aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/macide.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/macide.c')
-rw-r--r--drivers/ide/macide.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/ide/macide.c b/drivers/ide/macide.c
index 1447c8c90565..505ec43e5606 100644
--- a/drivers/ide/macide.c
+++ b/drivers/ide/macide.c
@@ -53,17 +53,20 @@
53 53
54volatile unsigned char *ide_ifr = (unsigned char *) (IDE_BASE + IDE_IFR); 54volatile unsigned char *ide_ifr = (unsigned char *) (IDE_BASE + IDE_IFR);
55 55
56int macide_ack_intr(ide_hwif_t* hwif) 56int macide_test_irq(ide_hwif_t *hwif)
57{ 57{
58 if (*ide_ifr & 0x20) { 58 if (*ide_ifr & 0x20)
59 *ide_ifr &= ~0x20;
60 return 1; 59 return 1;
61 }
62 return 0; 60 return 0;
63} 61}
64 62
63static void macide_clear_irq(ide_drive_t *drive)
64{
65 *ide_ifr &= ~0x20;
66}
67
65static void __init macide_setup_ports(struct ide_hw *hw, unsigned long base, 68static void __init macide_setup_ports(struct ide_hw *hw, unsigned long base,
66 int irq, ide_ack_intr_t *ack_intr) 69 int irq)
67{ 70{
68 int i; 71 int i;
69 72
@@ -75,10 +78,15 @@ static void __init macide_setup_ports(struct ide_hw *hw, unsigned long base,
75 hw->io_ports.ctl_addr = base + IDE_CONTROL; 78 hw->io_ports.ctl_addr = base + IDE_CONTROL;
76 79
77 hw->irq = irq; 80 hw->irq = irq;
78 hw->ack_intr = ack_intr;
79} 81}
80 82
83static const struct ide_port_ops macide_port_ops = {
84 .clear_irq = macide_clear_irq,
85 .test_irq = macide_test_irq,
86};
87
81static const struct ide_port_info macide_port_info = { 88static const struct ide_port_info macide_port_info = {
89 .port_ops = &macide_port_ops,
82 .host_flags = IDE_HFLAG_MMIO | IDE_HFLAG_NO_DMA, 90 .host_flags = IDE_HFLAG_MMIO | IDE_HFLAG_NO_DMA,
83 .irq_flags = IRQF_SHARED, 91 .irq_flags = IRQF_SHARED,
84 .chipset = ide_generic, 92 .chipset = ide_generic,
@@ -93,10 +101,10 @@ static const char *mac_ide_name[] =
93 101
94static int __init macide_init(void) 102static int __init macide_init(void)
95{ 103{
96 ide_ack_intr_t *ack_intr;
97 unsigned long base; 104 unsigned long base;
98 int irq; 105 int irq;
99 struct ide_hw hw, *hws[] = { &hw }; 106 struct ide_hw hw, *hws[] = { &hw };
107 struct ide_port_info d = macide_port_info;
100 108
101 if (!MACH_IS_MAC) 109 if (!MACH_IS_MAC)
102 return -ENODEV; 110 return -ENODEV;
@@ -104,17 +112,15 @@ static int __init macide_init(void)
104 switch (macintosh_config->ide_type) { 112 switch (macintosh_config->ide_type) {
105 case MAC_IDE_QUADRA: 113 case MAC_IDE_QUADRA:
106 base = IDE_BASE; 114 base = IDE_BASE;
107 ack_intr = macide_ack_intr;
108 irq = IRQ_NUBUS_F; 115 irq = IRQ_NUBUS_F;
109 break; 116 break;
110 case MAC_IDE_PB: 117 case MAC_IDE_PB:
111 base = IDE_BASE; 118 base = IDE_BASE;
112 ack_intr = macide_ack_intr;
113 irq = IRQ_NUBUS_C; 119 irq = IRQ_NUBUS_C;
114 break; 120 break;
115 case MAC_IDE_BABOON: 121 case MAC_IDE_BABOON:
116 base = BABOON_BASE; 122 base = BABOON_BASE;
117 ack_intr = NULL; 123 d.port_ops = NULL;
118 irq = IRQ_BABOON_1; 124 irq = IRQ_BABOON_1;
119 break; 125 break;
120 default: 126 default:
@@ -124,9 +130,9 @@ static int __init macide_init(void)
124 printk(KERN_INFO "ide: Macintosh %s IDE controller\n", 130 printk(KERN_INFO "ide: Macintosh %s IDE controller\n",
125 mac_ide_name[macintosh_config->ide_type - 1]); 131 mac_ide_name[macintosh_config->ide_type - 1]);
126 132
127 macide_setup_ports(&hw, base, irq, ack_intr); 133 macide_setup_ports(&hw, base, irq);
128 134
129 return ide_host_add(&macide_port_info, hws, 1, NULL); 135 return ide_host_add(&d, hws, 1, NULL);
130} 136}
131 137
132module_init(macide_init); 138module_init(macide_init);