+ struct pci_dev *pcidev = candev->sysdevptr.pcidev;
+ can_ioptr_t remap_addr;
+ unsigned long bar2_addr;
+
+ #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,21))
+ if(pci_request_region(pcidev, 0, "esdpci200_plx9050") != 0){
+ CANMSG("Request of esdpci200_plx9050 range failed\n");
+ return -ENODEV;
+ }else if(pci_request_region(pcidev, 1, "esdpci200_io") != 0){
+ CANMSG("Request of esdpci200_io range failed\n");
+ pci_release_region(pcidev, 0);
+ return -ENODEV;
+ }else if(pci_request_region(pcidev, 2, "esdpci200_sja") != 0){
+ CANMSG("Request of esdpci200_sja range failed\n");
+ pci_release_region(pcidev, 1);
+ pci_release_region(pcidev, 0);
+ return -ENODEV;
+ }
+ #else /*(LINUX_VERSION_CODE > KERNEL_VERSION(2,4,21))*/
+ if(pci_request_regions(pcidev, "esdpci200") != 0){
+ CANMSG("Request of esdpci200_plx9050 regions failed\n");
+ return -ENODEV;
+ }
+ #endif /*(LINUX_VERSION_CODE > KERNEL_VERSION(2,4,21))*/
+
+
+ /* ioports, PLX local configuration registers */
+ candev->res_addr=pci_resource_start(pcidev,1);
+ /*MEM window for SJA1000 chips*/
+ bar2_addr = pci_resource_start(pcidev,2);
+ candev->io_addr = bar2_addr;
+ if( ! (remap_addr=ioremap(bar2_addr,
+ pci_resource_len(pcidev,2)))) /*MEM window for SJA1000 chips*/
+ {
+ CANMSG("Unable to access I/O memory at: 0x%lx\n", (unsigned long)bar2_addr);
+ goto ioremap_error;
+ }
+
+ can_base_addr_fixup(candev, remap_addr);
+ CANMSG("esdpci200_sja IO-memory: 0x%lx - 0x%lx (VMA 0x%lx)\n",
+ (unsigned long) bar2_addr,
+ (unsigned long) (bar2_addr + pci_resource_len(pcidev,2) - 1),
+ (long) remap_addr);
+