diff options
Diffstat (limited to 'drivers/ide/ide.c')
-rw-r--r-- | drivers/ide/ide.c | 49 |
1 files changed, 3 insertions, 46 deletions
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index d4a6b102a772..60f0ca66aa93 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 1994-1998 Linus Torvalds & authors (see below) | 2 | * Copyright (C) 1994-1998 Linus Torvalds & authors (see below) |
3 | * Copyrifht (C) 2003-2005, 2007 Bartlomiej Zolnierkiewicz | 3 | * Copyright (C) 2003-2005, 2007 Bartlomiej Zolnierkiewicz |
4 | */ | 4 | */ |
5 | 5 | ||
6 | /* | 6 | /* |
@@ -101,8 +101,7 @@ void ide_init_port_data(ide_hwif_t *hwif, unsigned int index) | |||
101 | 101 | ||
102 | init_completion(&hwif->gendev_rel_comp); | 102 | init_completion(&hwif->gendev_rel_comp); |
103 | 103 | ||
104 | default_hwif_iops(hwif); | 104 | hwif->tp_ops = &default_tp_ops; |
105 | default_hwif_transport(hwif); | ||
106 | 105 | ||
107 | ide_port_init_devices_data(hwif); | 106 | ide_port_init_devices_data(hwif); |
108 | } | 107 | } |
@@ -134,41 +133,6 @@ static void ide_port_init_devices_data(ide_hwif_t *hwif) | |||
134 | } | 133 | } |
135 | } | 134 | } |
136 | 135 | ||
137 | void ide_remove_port_from_hwgroup(ide_hwif_t *hwif) | ||
138 | { | ||
139 | ide_hwgroup_t *hwgroup = hwif->hwgroup; | ||
140 | |||
141 | spin_lock_irq(&ide_lock); | ||
142 | /* | ||
143 | * Remove us from the hwgroup, and free | ||
144 | * the hwgroup if we were the only member | ||
145 | */ | ||
146 | if (hwif->next == hwif) { | ||
147 | BUG_ON(hwgroup->hwif != hwif); | ||
148 | kfree(hwgroup); | ||
149 | } else { | ||
150 | /* There is another interface in hwgroup. | ||
151 | * Unlink us, and set hwgroup->drive and ->hwif to | ||
152 | * something sane. | ||
153 | */ | ||
154 | ide_hwif_t *g = hwgroup->hwif; | ||
155 | |||
156 | while (g->next != hwif) | ||
157 | g = g->next; | ||
158 | g->next = hwif->next; | ||
159 | if (hwgroup->hwif == hwif) { | ||
160 | /* Chose a random hwif for hwgroup->hwif. | ||
161 | * It's guaranteed that there are no drives | ||
162 | * left in the hwgroup. | ||
163 | */ | ||
164 | BUG_ON(hwgroup->drive != NULL); | ||
165 | hwgroup->hwif = g; | ||
166 | } | ||
167 | BUG_ON(hwgroup->hwif == hwif); | ||
168 | } | ||
169 | spin_unlock_irq(&ide_lock); | ||
170 | } | ||
171 | |||
172 | /* Called with ide_lock held. */ | 136 | /* Called with ide_lock held. */ |
173 | static void __ide_port_unregister_devices(ide_hwif_t *hwif) | 137 | static void __ide_port_unregister_devices(ide_hwif_t *hwif) |
174 | { | 138 | { |
@@ -269,16 +233,9 @@ void ide_unregister(ide_hwif_t *hwif) | |||
269 | if (hwif->dma_base) | 233 | if (hwif->dma_base) |
270 | ide_release_dma_engine(hwif); | 234 | ide_release_dma_engine(hwif); |
271 | 235 | ||
272 | spin_lock_irq(&ide_lock); | ||
273 | /* restore hwif data to pristine status */ | ||
274 | ide_init_port_data(hwif, hwif->index); | ||
275 | spin_unlock_irq(&ide_lock); | ||
276 | |||
277 | mutex_unlock(&ide_cfg_mtx); | 236 | mutex_unlock(&ide_cfg_mtx); |
278 | } | 237 | } |
279 | 238 | ||
280 | EXPORT_SYMBOL(ide_unregister); | ||
281 | |||
282 | void ide_init_port_hw(ide_hwif_t *hwif, hw_regs_t *hw) | 239 | void ide_init_port_hw(ide_hwif_t *hwif, hw_regs_t *hw) |
283 | { | 240 | { |
284 | memcpy(&hwif->io_ports, &hw->io_ports, sizeof(hwif->io_ports)); | 241 | memcpy(&hwif->io_ports, &hw->io_ports, sizeof(hwif->io_ports)); |
@@ -287,8 +244,8 @@ void ide_init_port_hw(ide_hwif_t *hwif, hw_regs_t *hw) | |||
287 | hwif->dev = hw->dev; | 244 | hwif->dev = hw->dev; |
288 | hwif->gendev.parent = hw->parent ? hw->parent : hw->dev; | 245 | hwif->gendev.parent = hw->parent ? hw->parent : hw->dev; |
289 | hwif->ack_intr = hw->ack_intr; | 246 | hwif->ack_intr = hw->ack_intr; |
247 | hwif->config_data = hw->config; | ||
290 | } | 248 | } |
291 | EXPORT_SYMBOL_GPL(ide_init_port_hw); | ||
292 | 249 | ||
293 | /* | 250 | /* |
294 | * Locks for IDE setting functionality | 251 | * Locks for IDE setting functionality |