patch-2.4.21 linux-2.4.21/drivers/char/cyclades.c
Next file: linux-2.4.21/drivers/char/drm/drm_agpsupport.h
Previous file: linux-2.4.21/drivers/char/amd768_rng.c
Back to the patch index
Back to the overall index
- Lines: 136
- Date:
2003-06-13 07:51:32.000000000 -0700
- Orig file:
linux-2.4.20/drivers/char/cyclades.c
- Orig date:
2002-11-28 15:53:12.000000000 -0800
diff -urN linux-2.4.20/drivers/char/cyclades.c linux-2.4.21/drivers/char/cyclades.c
@@ -4957,7 +4957,7 @@
struct pci_dev *pdev = NULL;
unsigned char cyy_rev_id;
unsigned char cy_pci_irq = 0;
- uclong cy_pci_phys0, cy_pci_phys1, cy_pci_phys2;
+ uclong cy_pci_phys0, cy_pci_phys2;
uclong cy_pci_addr0, cy_pci_addr2;
unsigned short i,j,cy_pci_nchan, plx_ver;
unsigned short device_id,dev_index = 0;
@@ -4965,8 +4965,7 @@
uclong Ze_addr0[NR_CARDS], Ze_addr2[NR_CARDS], ZeIndex = 0;
uclong Ze_phys0[NR_CARDS], Ze_phys2[NR_CARDS];
unsigned char Ze_irq[NR_CARDS];
- struct resource *resource;
- unsigned long res_start, res_len;
+ struct pci_dev *Ze_pdev[NR_CARDS];
for (i = 0; i < NR_CARDS; i++) {
/* look for a Cyclades card by vendor and device id */
@@ -4988,7 +4987,6 @@
/* read PCI configuration area */
cy_pci_irq = pdev->irq;
cy_pci_phys0 = pci_resource_start(pdev, 0);
- cy_pci_phys1 = pci_resource_start(pdev, 1);
cy_pci_phys2 = pci_resource_start(pdev, 2);
pci_read_config_byte(pdev, PCI_REVISION_ID, &cyy_rev_id);
@@ -5014,14 +5012,11 @@
/* Although we don't use this I/O region, we should
request it from the kernel anyway, to avoid problems
with other drivers accessing it. */
- resource = request_region(cy_pci_phys1, CyPCI_Yctl, "Cyclom-Y");
- if (resource == NULL) {
- printk(KERN_ERR "cyclades: failed to allocate IO "
- "resource at 0x%lx\n", cy_pci_phys1);
+ if (pci_request_regions(pdev, "Cyclom-Y") != 0) {
+ printk(KERN_ERR "cyclades: failed to reserve PCI "
+ "resources\n");
continue;
}
- res_start = cy_pci_phys1;
- res_len = CyPCI_Yctl;
#if defined(__alpha__)
if (device_id == PCI_DEVICE_ID_CYCLOM_Y_Lo) { /* below 1M? */
@@ -5092,10 +5087,7 @@
cy_card[j].bus_index = 1;
cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = cy_pci_nchan/4;
- cy_card[j].resource = resource;
- cy_card[j].res_start = res_start;
- cy_card[j].res_len = res_len;
- resource = NULL; /* For next card */
+ cy_card[j].pdev = pdev;
/* enable interrupts in the PCI interface */
plx_ver = cy_readb(cy_pci_addr2 + CyPLX_VER) & 0x0f;
@@ -5175,16 +5167,13 @@
/* Although we don't use this I/O region, we should
request it from the kernel anyway, to avoid problems
with other drivers accessing it. */
- resource = request_region(cy_pci_phys1, CyPCI_Zctl,
- "Cyclades-Z");
- if (resource == NULL) {
- printk(KERN_ERR "cyclades: failed to allocate IO "
- "resource at 0x%lx\n", cy_pci_phys1);
- continue;
- }
- res_start = cy_pci_phys1;
- res_len = CyPCI_Zctl;
+ if (pci_request_regions(pdev, "Cyclades-Z") != 0) {
+ printk(KERN_ERR "cyclades: failed to reserve PCI "
+ "resources\n");
+ continue;
+ }
+
if (mailbox == ZE_V1) {
cy_pci_addr2 = (ulong)ioremap(cy_pci_phys2, CyPCI_Ze_win);
if (ZeIndex == NR_CARDS) {
@@ -5198,6 +5187,7 @@
Ze_addr0[ZeIndex] = cy_pci_addr0;
Ze_addr2[ZeIndex] = cy_pci_addr2;
Ze_irq[ZeIndex] = cy_pci_irq;
+ Ze_pdev[ZeIndex] = pdev;
ZeIndex++;
}
i--;
@@ -5282,10 +5272,7 @@
cy_card[j].bus_index = 1;
cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = -1;
- cy_card[j].resource = resource;
- cy_card[j].res_start = res_start;
- cy_card[j].res_len = res_len;
- resource = NULL; /* For next card */
+ cy_card[j].pdev = pdev;
/* print message */
#ifdef CONFIG_CYZ_INTR
@@ -5313,12 +5300,14 @@
cy_pci_addr0 = Ze_addr0[0];
cy_pci_addr2 = Ze_addr2[0];
cy_pci_irq = Ze_irq[0];
+ pdev = Ze_pdev[0];
for (j = 0 ; j < ZeIndex-1 ; j++) {
Ze_phys0[j] = Ze_phys0[j+1];
Ze_phys2[j] = Ze_phys2[j+1];
Ze_addr0[j] = Ze_addr0[j+1];
Ze_addr2[j] = Ze_addr2[j+1];
Ze_irq[j] = Ze_irq[j+1];
+ Ze_pdev[j] = Ze_pdev[j+1];
}
ZeIndex--;
mailbox = (uclong)cy_readl(&((struct RUNTIME_9060 *)
@@ -5376,6 +5365,7 @@
cy_card[j].bus_index = 1;
cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = -1;
+ cy_card[j].pdev = pdev;
/* print message */
#ifdef CONFIG_CYZ_INTR
@@ -5812,10 +5802,8 @@
#endif /* CONFIG_CYZ_INTR */
)
free_irq(cy_card[i].irq, &cy_card[i]);
- if (cy_card[i].resource) {
- cy_card[i].resource = NULL;
- release_region(cy_card[i].res_start, cy_card[i].res_len);
- }
+ if (cy_card[i].pdev)
+ pci_release_regions(cy_card[i].pdev);
}
}
if (tmp_buf) {
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)