Commit cc4b9888 authored by Dave Jones's avatar Dave Jones

[PATCH] cyclades region handling updates from 2.4

parent 8f29589d
...@@ -12,7 +12,7 @@ static char rcsid[] = ...@@ -12,7 +12,7 @@ static char rcsid[] =
* *
* Initially written by Randolph Bentson <bentson@grieg.seaslug.org>. * Initially written by Randolph Bentson <bentson@grieg.seaslug.org>.
* Modified and maintained by Marcio Saito <marcio@cyclades.com>. * Modified and maintained by Marcio Saito <marcio@cyclades.com>.
* Currently maintained by Henrique Gobbi <henrique.gobbi@cyclades.com>. * Currently maintained by Ivan Passos <ivan@cyclades.com>.
* *
* For Technical support and installation problems, please send e-mail * For Technical support and installation problems, please send e-mail
* to support@cyclades.com. * to support@cyclades.com.
...@@ -883,7 +883,9 @@ static void cyz_poll(unsigned long); ...@@ -883,7 +883,9 @@ static void cyz_poll(unsigned long);
static long cyz_polling_cycle = CZ_DEF_POLL; static long cyz_polling_cycle = CZ_DEF_POLL;
static int cyz_timeron = 0; static int cyz_timeron = 0;
static struct timer_list cyz_timerlist = TIMER_INITIALIZER(cyz_poll, 0, 0); static struct timer_list cyz_timerlist = {
.function = cyz_poll
};
#else /* CONFIG_CYZ_INTR */ #else /* CONFIG_CYZ_INTR */
static void cyz_rx_restart(unsigned long); static void cyz_rx_restart(unsigned long);
...@@ -4945,7 +4947,7 @@ cy_detect_pci(void) ...@@ -4945,7 +4947,7 @@ cy_detect_pci(void)
struct pci_dev *pdev = NULL; struct pci_dev *pdev = NULL;
unsigned char cyy_rev_id; unsigned char cyy_rev_id;
unsigned char cy_pci_irq = 0; 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; uclong cy_pci_addr0, cy_pci_addr2;
unsigned short i,j,cy_pci_nchan, plx_ver; unsigned short i,j,cy_pci_nchan, plx_ver;
unsigned short device_id,dev_index = 0; unsigned short device_id,dev_index = 0;
...@@ -4953,8 +4955,7 @@ cy_detect_pci(void) ...@@ -4953,8 +4955,7 @@ cy_detect_pci(void)
uclong Ze_addr0[NR_CARDS], Ze_addr2[NR_CARDS], ZeIndex = 0; uclong Ze_addr0[NR_CARDS], Ze_addr2[NR_CARDS], ZeIndex = 0;
uclong Ze_phys0[NR_CARDS], Ze_phys2[NR_CARDS]; uclong Ze_phys0[NR_CARDS], Ze_phys2[NR_CARDS];
unsigned char Ze_irq[NR_CARDS]; unsigned char Ze_irq[NR_CARDS];
struct resource *resource; struct pci_dev *Ze_pdev[NR_CARDS];
unsigned long res_start, res_len;
for (i = 0; i < NR_CARDS; i++) { for (i = 0; i < NR_CARDS; i++) {
/* look for a Cyclades card by vendor and device id */ /* look for a Cyclades card by vendor and device id */
...@@ -4976,7 +4977,6 @@ cy_detect_pci(void) ...@@ -4976,7 +4977,6 @@ cy_detect_pci(void)
/* read PCI configuration area */ /* read PCI configuration area */
cy_pci_irq = pdev->irq; cy_pci_irq = pdev->irq;
cy_pci_phys0 = pci_resource_start(pdev, 0); cy_pci_phys0 = pci_resource_start(pdev, 0);
cy_pci_phys1 = pci_resource_start(pdev, 1);
cy_pci_phys2 = pci_resource_start(pdev, 2); cy_pci_phys2 = pci_resource_start(pdev, 2);
pci_read_config_byte(pdev, PCI_REVISION_ID, &cyy_rev_id); pci_read_config_byte(pdev, PCI_REVISION_ID, &cyy_rev_id);
...@@ -5002,15 +5002,10 @@ cy_detect_pci(void) ...@@ -5002,15 +5002,10 @@ cy_detect_pci(void)
/* Although we don't use this I/O region, we should /* Although we don't use this I/O region, we should
request it from the kernel anyway, to avoid problems request it from the kernel anyway, to avoid problems
with other drivers accessing it. */ with other drivers accessing it. */
resource = request_region(cy_pci_phys1, if (pci_request_regions(pdev, "Cyclom-Y") != 0) {
CyPCI_Yctl, "Cyclom-Y"); printk(KERN_ERR "cyclades: failed to reserve PCI resources\n");
if (resource == NULL) {
printk(KERN_ERR "cyclades: failed to allocate IO "
"resource at 0x%lx\n", cy_pci_phys1);
continue; continue;
} }
res_start = cy_pci_phys1;
res_len = CyPCI_Yctl;
#if defined(__alpha__) #if defined(__alpha__)
if (device_id == PCI_DEVICE_ID_CYCLOM_Y_Lo) { /* below 1M? */ if (device_id == PCI_DEVICE_ID_CYCLOM_Y_Lo) { /* below 1M? */
...@@ -5081,10 +5076,7 @@ cy_detect_pci(void) ...@@ -5081,10 +5076,7 @@ cy_detect_pci(void)
cy_card[j].bus_index = 1; cy_card[j].bus_index = 1;
cy_card[j].first_line = cy_next_channel; cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = cy_pci_nchan/4; cy_card[j].num_chips = cy_pci_nchan/4;
cy_card[j].resource = resource; cy_card[j].pdev = pdev;
cy_card[j].res_start = res_start;
cy_card[j].res_len = res_len;
resource = NULL; /* For next card */
/* enable interrupts in the PCI interface */ /* enable interrupts in the PCI interface */
plx_ver = cy_readb(cy_pci_addr2 + CyPLX_VER) & 0x0f; plx_ver = cy_readb(cy_pci_addr2 + CyPLX_VER) & 0x0f;
...@@ -5164,15 +5156,10 @@ cy_detect_pci(void) ...@@ -5164,15 +5156,10 @@ cy_detect_pci(void)
/* Although we don't use this I/O region, we should /* Although we don't use this I/O region, we should
request it from the kernel anyway, to avoid problems request it from the kernel anyway, to avoid problems
with other drivers accessing it. */ with other drivers accessing it. */
resource = request_region(cy_pci_phys1, if (pci_request_regions(pdev, "Cyclades-Z") != 0) {
CyPCI_Zctl, "Cyclades-Z"); printk(KERN_ERR "cyclades: failed to reserve PCI resources\n");
if (resource == NULL) {
printk(KERN_ERR "cyclades: failed ot allocate IO resource "
"at 0x%lx\n", cy_pci_phys1);
continue; continue;
} }
res_start = cy_pci_phys1;
res_len = CyPCI_Zctl;
if (mailbox == ZE_V1) { if (mailbox == ZE_V1) {
cy_pci_addr2 = (ulong)ioremap(cy_pci_phys2, CyPCI_Ze_win); cy_pci_addr2 = (ulong)ioremap(cy_pci_phys2, CyPCI_Ze_win);
...@@ -5187,6 +5174,7 @@ cy_detect_pci(void) ...@@ -5187,6 +5174,7 @@ cy_detect_pci(void)
Ze_addr0[ZeIndex] = cy_pci_addr0; Ze_addr0[ZeIndex] = cy_pci_addr0;
Ze_addr2[ZeIndex] = cy_pci_addr2; Ze_addr2[ZeIndex] = cy_pci_addr2;
Ze_irq[ZeIndex] = cy_pci_irq; Ze_irq[ZeIndex] = cy_pci_irq;
Ze_pdev[ZeIndex] = pdev;
ZeIndex++; ZeIndex++;
} }
i--; i--;
...@@ -5271,10 +5259,7 @@ cy_detect_pci(void) ...@@ -5271,10 +5259,7 @@ cy_detect_pci(void)
cy_card[j].bus_index = 1; cy_card[j].bus_index = 1;
cy_card[j].first_line = cy_next_channel; cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = -1; cy_card[j].num_chips = -1;
cy_card[j].resource = resource; cy_card[j].pdev = pdev;
cy_card[j].res_start = res_start;
cy_card[j].res_len = res_len;
resource = NULL; /* For next card */
/* print message */ /* print message */
#ifdef CONFIG_CYZ_INTR #ifdef CONFIG_CYZ_INTR
...@@ -5302,12 +5287,14 @@ cy_detect_pci(void) ...@@ -5302,12 +5287,14 @@ cy_detect_pci(void)
cy_pci_addr0 = Ze_addr0[0]; cy_pci_addr0 = Ze_addr0[0];
cy_pci_addr2 = Ze_addr2[0]; cy_pci_addr2 = Ze_addr2[0];
cy_pci_irq = Ze_irq[0]; cy_pci_irq = Ze_irq[0];
pdev = Ze_pdev[0];
for (j = 0 ; j < ZeIndex-1 ; j++) { for (j = 0 ; j < ZeIndex-1 ; j++) {
Ze_phys0[j] = Ze_phys0[j+1]; Ze_phys0[j] = Ze_phys0[j+1];
Ze_phys2[j] = Ze_phys2[j+1]; Ze_phys2[j] = Ze_phys2[j+1];
Ze_addr0[j] = Ze_addr0[j+1]; Ze_addr0[j] = Ze_addr0[j+1];
Ze_addr2[j] = Ze_addr2[j+1]; Ze_addr2[j] = Ze_addr2[j+1];
Ze_irq[j] = Ze_irq[j+1]; Ze_irq[j] = Ze_irq[j+1];
Ze_pdev[j] = Ze_pdev[j+1];
} }
ZeIndex--; ZeIndex--;
mailbox = (uclong)cy_readl(&((struct RUNTIME_9060 *) mailbox = (uclong)cy_readl(&((struct RUNTIME_9060 *)
...@@ -5365,6 +5352,7 @@ cy_detect_pci(void) ...@@ -5365,6 +5352,7 @@ cy_detect_pci(void)
cy_card[j].bus_index = 1; cy_card[j].bus_index = 1;
cy_card[j].first_line = cy_next_channel; cy_card[j].first_line = cy_next_channel;
cy_card[j].num_chips = -1; cy_card[j].num_chips = -1;
cy_card[j].pdev = pdev;
/* print message */ /* print message */
#ifdef CONFIG_CYZ_INTR #ifdef CONFIG_CYZ_INTR
...@@ -5797,8 +5785,8 @@ cy_cleanup_module(void) ...@@ -5797,8 +5785,8 @@ cy_cleanup_module(void)
#endif /* CONFIG_CYZ_INTR */ #endif /* CONFIG_CYZ_INTR */
) )
free_irq(cy_card[i].irq, &cy_card[i]); free_irq(cy_card[i].irq, &cy_card[i]);
if (cy_card[i].resource) if (cy_card[i].pdev)
release_region(cy_card[i].res_start, cy_card[i].res_len); pci_release_regions(cy_card[i].pdev);
} }
} }
if (tmp_buf) { if (tmp_buf) {
......
...@@ -515,9 +515,7 @@ struct cyclades_card { ...@@ -515,9 +515,7 @@ struct cyclades_card {
int nports; /* Number of ports in the card */ int nports; /* Number of ports in the card */
int bus_index; /* address shift - 0 for ISA, 1 for PCI */ int bus_index; /* address shift - 0 for ISA, 1 for PCI */
int intr_enabled; /* FW Interrupt flag - 0 disabled, 1 enabled */ int intr_enabled; /* FW Interrupt flag - 0 disabled, 1 enabled */
struct resource *resource; struct pci_dev *pdev;
unsigned long res_start;
unsigned long res_len;
#ifdef __KERNEL__ #ifdef __KERNEL__
spinlock_t card_lock; spinlock_t card_lock;
#else #else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment