voila , c pour une carte pci sur proc x86(cyrix) avec un noyau 2.4.
voici une partie du code :
int pci_das4020_init()
{
unsigned long ret;
unsigned char *gt;
if ((pci_das_major=register_chrdev(pci_das_major, pci_das_module_name, &pci_das_fops))<0)
{
printk("Ne peut avoir un major\n" );
return -EBUSY;
}else
printk("major=%d\n", pci_das_major);
if (!pci_present())
{
printk("l'ordinateut n'a pas de pci\n" );
return -EBUSY;
}
if ((pci_das_dev=pci_find_device(4871, 82, NULL))==NULL)
{
printk("carte non trouvée\n" );
return -EBUSY;
}
ret=pci_resource_flags(pci_das_dev, 2);
if (ret!=IORESOURCE_IO && ret!=IORESOURCE_MEM)
{
printk ("impossible d'obtenire la zone bar2\n" );
return -EBUSY;
}
/* obtenire les adresses hw */
pci_das_hwadd2s=pci_resource_start(pci_das_dev, 2);
pci_das_hwadd2e=pci_resource_end(pci_das_dev, 2);
if (check_mem_region(pci_das_hwadd2s, pci_das_hwadd2e-pci_das_hwadd2s))
{
printk("zone mémoire base 2 déjà utilisée\n" );
return -EBUSY;
}
request_mem_region(pci_das_hwadd2s, pci_das_hwadd2e-pci_das_hwadd2s, "pci-das4020/12" );
gt=ioremap(pci_das_hwadd2s, pci_das_hwadd2e-pci_das_hwadd2s);
*(gt+0x4E)=0;
*(gt+0x48)=0;
return 0;
}
toutes les fonctions on l'air de fonctionné, néamoins il ne se passe rien sur ma carte, aurai-je oublié kkchose ?