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.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/drivers/ide/macide.c b/drivers/ide/macide.c
index 4b1718e83283..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
65static void __init macide_setup_ports(hw_regs_t *hw, unsigned long base, 63static void macide_clear_irq(ide_drive_t *drive)
66 int irq, ide_ack_intr_t *ack_intr) 64{
65 *ide_ifr &= ~0x20;
66}
67
68static void __init macide_setup_ports(struct ide_hw *hw, unsigned long base,
69 int irq)
67{ 70{
68 int i; 71 int i;
69 72
@@ -75,14 +78,18 @@ static void __init macide_setup_ports(hw_regs_t *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
80 hw->chipset = ide_generic;
81} 81}
82 82
83static const struct ide_port_ops macide_port_ops = {
84 .clear_irq = macide_clear_irq,
85 .test_irq = macide_test_irq,
86};
87
83static const struct ide_port_info macide_port_info = { 88static const struct ide_port_info macide_port_info = {
89 .port_ops = &macide_port_ops,
84 .host_flags = IDE_HFLAG_MMIO | IDE_HFLAG_NO_DMA, 90 .host_flags = IDE_HFLAG_MMIO | IDE_HFLAG_NO_DMA,
85 .irq_flags = IRQF_SHARED, 91 .irq_flags = IRQF_SHARED,
92 .chipset = ide_generic,
86}; 93};
87 94
88static const char *mac_ide_name[] = 95static const char *mac_ide_name[] =
@@ -94,10 +101,10 @@ static const char *mac_ide_name[] =
94 101
95static int __init macide_init(void) 102static int __init macide_init(void)
96{ 103{
97 ide_ack_intr_t *ack_intr;
98 unsigned long base; 104 unsigned long base;
99 int irq; 105 int irq;
100 hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL }; 106 struct ide_hw hw, *hws[] = { &hw };
107 struct ide_port_info d = macide_port_info;
101 108
102 if (!MACH_IS_MAC) 109 if (!MACH_IS_MAC)
103 return -ENODEV; 110 return -ENODEV;
@@ -105,17 +112,15 @@ static int __init macide_init(void)
105 switch (macintosh_config->ide_type) { 112 switch (macintosh_config->ide_type) {
106 case MAC_IDE_QUADRA: 113 case MAC_IDE_QUADRA:
107 base = IDE_BASE; 114 base = IDE_BASE;
108 ack_intr = macide_ack_intr;
109 irq = IRQ_NUBUS_F; 115 irq = IRQ_NUBUS_F;
110 break; 116 break;
111 case MAC_IDE_PB: 117 case MAC_IDE_PB:
112 base = IDE_BASE; 118 base = IDE_BASE;
113 ack_intr = macide_ack_intr;
114 irq = IRQ_NUBUS_C; 119 irq = IRQ_NUBUS_C;
115 break; 120 break;
116 case MAC_IDE_BABOON: 121 case MAC_IDE_BABOON:
117 base = BABOON_BASE; 122 base = BABOON_BASE;
118 ack_intr = NULL; 123 d.port_ops = NULL;
119 irq = IRQ_BABOON_1; 124 irq = IRQ_BABOON_1;
120 break; 125 break;
121 default: 126 default:
@@ -125,9 +130,9 @@ static int __init macide_init(void)
125 printk(KERN_INFO "ide: Macintosh %s IDE controller\n", 130 printk(KERN_INFO "ide: Macintosh %s IDE controller\n",
126 mac_ide_name[macintosh_config->ide_type - 1]); 131 mac_ide_name[macintosh_config->ide_type - 1]);
127 132
128 macide_setup_ports(&hw, base, irq, ack_intr); 133 macide_setup_ports(&hw, base, irq);
129 134
130 return ide_host_add(&macide_port_info, hws, NULL); 135 return ide_host_add(&d, hws, 1, NULL);
131} 136}
132 137
133module_init(macide_init); 138module_init(macide_init);