diff options
Diffstat (limited to 'drivers/ide/macide.c')
-rw-r--r-- | drivers/ide/macide.c | 37 |
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 | ||
54 | volatile unsigned char *ide_ifr = (unsigned char *) (IDE_BASE + IDE_IFR); | 54 | volatile unsigned char *ide_ifr = (unsigned char *) (IDE_BASE + IDE_IFR); |
55 | 55 | ||
56 | int macide_ack_intr(ide_hwif_t* hwif) | 56 | int 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 | ||
65 | static void __init macide_setup_ports(hw_regs_t *hw, unsigned long base, | 63 | static void macide_clear_irq(ide_drive_t *drive) |
66 | int irq, ide_ack_intr_t *ack_intr) | 64 | { |
65 | *ide_ifr &= ~0x20; | ||
66 | } | ||
67 | |||
68 | static 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 | ||
83 | static const struct ide_port_ops macide_port_ops = { | ||
84 | .clear_irq = macide_clear_irq, | ||
85 | .test_irq = macide_test_irq, | ||
86 | }; | ||
87 | |||
83 | static const struct ide_port_info macide_port_info = { | 88 | static 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 | ||
88 | static const char *mac_ide_name[] = | 95 | static const char *mac_ide_name[] = |
@@ -94,10 +101,10 @@ static const char *mac_ide_name[] = | |||
94 | 101 | ||
95 | static int __init macide_init(void) | 102 | static 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 | ||
133 | module_init(macide_init); | 138 | module_init(macide_init); |