ide.c revision 9e5755bce00bb563739aeb0f09932a1907521167
1/*
2 *  linux/drivers/ide/ide.c		Version 7.00beta2	Mar 05 2003
3 *
4 *  Copyright (C) 1994-1998  Linus Torvalds & authors (see below)
5 */
6
7/*
8 *  Mostly written by Mark Lord  <mlord@pobox.com>
9 *                and Gadi Oxman <gadio@netvision.net.il>
10 *                and Andre Hedrick <andre@linux-ide.org>
11 *
12 *  See linux/MAINTAINERS for address of current maintainer.
13 *
14 * This is the multiple IDE interface driver, as evolved from hd.c.
15 * It supports up to MAX_HWIFS IDE interfaces, on one or more IRQs
16 *   (usually 14 & 15).
17 * There can be up to two drives per interface, as per the ATA-2 spec.
18 *
19 * Primary:    ide0, port 0x1f0; major=3;  hda is minor=0; hdb is minor=64
20 * Secondary:  ide1, port 0x170; major=22; hdc is minor=0; hdd is minor=64
21 * Tertiary:   ide2, port 0x???; major=33; hde is minor=0; hdf is minor=64
22 * Quaternary: ide3, port 0x???; major=34; hdg is minor=0; hdh is minor=64
23 * ...
24 *
25 *  From hd.c:
26 *  |
27 *  | It traverses the request-list, using interrupts to jump between functions.
28 *  | As nearly all functions can be called within interrupts, we may not sleep.
29 *  | Special care is recommended.  Have Fun!
30 *  |
31 *  | modified by Drew Eckhardt to check nr of hd's from the CMOS.
32 *  |
33 *  | Thanks to Branko Lankester, lankeste@fwi.uva.nl, who found a bug
34 *  | in the early extended-partition checks and added DM partitions.
35 *  |
36 *  | Early work on error handling by Mika Liljeberg (liljeber@cs.Helsinki.FI).
37 *  |
38 *  | IRQ-unmask, drive-id, multiple-mode, support for ">16 heads",
39 *  | and general streamlining by Mark Lord (mlord@pobox.com).
40 *
41 *  October, 1994 -- Complete line-by-line overhaul for linux 1.1.x, by:
42 *
43 *	Mark Lord	(mlord@pobox.com)		(IDE Perf.Pkg)
44 *	Delman Lee	(delman@ieee.org)		("Mr. atdisk2")
45 *	Scott Snyder	(snyder@fnald0.fnal.gov)	(ATAPI IDE cd-rom)
46 *
47 *  This was a rewrite of just about everything from hd.c, though some original
48 *  code is still sprinkled about.  Think of it as a major evolution, with
49 *  inspiration from lots of linux users, esp.  hamish@zot.apana.org.au
50 *
51 *  Version 1.0 ALPHA	initial code, primary i/f working okay
52 *  Version 1.3 BETA	dual i/f on shared irq tested & working!
53 *  Version 1.4 BETA	added auto probing for irq(s)
54 *  Version 1.5 BETA	added ALPHA (untested) support for IDE cd-roms,
55 *  ...
56 * Version 5.50		allow values as small as 20 for idebus=
57 * Version 5.51		force non io_32bit in drive_cmd_intr()
58 *			change delay_10ms() to delay_50ms() to fix problems
59 * Version 5.52		fix incorrect invalidation of removable devices
60 *			add "hdx=slow" command line option
61 * Version 5.60		start to modularize the driver; the disk and ATAPI
62 *			 drivers can be compiled as loadable modules.
63 *			move IDE probe code to ide-probe.c
64 *			move IDE disk code to ide-disk.c
65 *			add support for generic IDE device subdrivers
66 *			add m68k code from Geert Uytterhoeven
67 *			probe all interfaces by default
68 *			add ioctl to (re)probe an interface
69 * Version 6.00		use per device request queues
70 *			attempt to optimize shared hwgroup performance
71 *			add ioctl to manually adjust bandwidth algorithms
72 *			add kerneld support for the probe module
73 *			fix bug in ide_error()
74 *			fix bug in the first ide_get_lock() call for Atari
75 *			don't flush leftover data for ATAPI devices
76 * Version 6.01		clear hwgroup->active while the hwgroup sleeps
77 *			support HDIO_GETGEO for floppies
78 * Version 6.02		fix ide_ack_intr() call
79 *			check partition table on floppies
80 * Version 6.03		handle bad status bit sequencing in ide_wait_stat()
81 * Version 6.10		deleted old entries from this list of updates
82 *			replaced triton.c with ide-dma.c generic PCI DMA
83 *			added support for BIOS-enabled UltraDMA
84 *			rename all "promise" things to "pdc4030"
85 *			fix EZ-DRIVE handling on small disks
86 * Version 6.11		fix probe error in ide_scan_devices()
87 *			fix ancient "jiffies" polling bugs
88 *			mask all hwgroup interrupts on each irq entry
89 * Version 6.12		integrate ioctl and proc interfaces
90 *			fix parsing of "idex=" command line parameter
91 * Version 6.13		add support for ide4/ide5 courtesy rjones@orchestream.com
92 * Version 6.14		fixed IRQ sharing among PCI devices
93 * Version 6.15		added SMP awareness to IDE drivers
94 * Version 6.16		fixed various bugs; even more SMP friendly
95 * Version 6.17		fix for newest EZ-Drive problem
96 * Version 6.18		default unpartitioned-disk translation now "BIOS LBA"
97 * Version 6.19		Re-design for a UNIFORM driver for all platforms,
98 *			  model based on suggestions from Russell King and
99 *			  Geert Uytterhoeven
100 *			Promise DC4030VL now supported.
101 *			add support for ide6/ide7
102 *			delay_50ms() changed to ide_delay_50ms() and exported.
103 * Version 6.20		Added/Fixed Generic ATA-66 support and hwif detection.
104 *			Added hdx=flash to allow for second flash disk
105 *			  detection w/o the hang loop.
106 *			Added support for ide8/ide9
107 *			Added idex=ata66 for the quirky chipsets that are
108 *			  ATA-66 compliant, but have yet to determine a method
109 *			  of verification of the 80c cable presence.
110 *			  Specifically Promise's PDC20262 chipset.
111 * Version 6.21		Fixing/Fixed SMP spinlock issue with insight from an old
112 *			  hat that clarified original low level driver design.
113 * Version 6.30		Added SMP support; fixed multmode issues.  -ml
114 * Version 6.31		Debug Share INTR's and request queue streaming
115 *			Native ATA-100 support
116 *			Prep for Cascades Project
117 * Version 7.00alpha	First named revision of ide rearrange
118 *
119 *  Some additional driver compile-time options are in ./include/linux/ide.h
120 *
121 *  To do, in likely order of completion:
122 *	- modify kernel to obtain BIOS geometry for drives on 2nd/3rd/4th i/f
123 *
124 */
125
126#define	REVISION	"Revision: 7.00alpha2"
127#define	VERSION		"Id: ide.c 7.00a2 20020906"
128
129#undef REALLY_SLOW_IO		/* most systems can safely undef this */
130
131#define _IDE_C			/* Tell ide.h it's really us */
132
133#include <linux/module.h>
134#include <linux/types.h>
135#include <linux/string.h>
136#include <linux/kernel.h>
137#include <linux/timer.h>
138#include <linux/mm.h>
139#include <linux/interrupt.h>
140#include <linux/major.h>
141#include <linux/errno.h>
142#include <linux/genhd.h>
143#include <linux/blkpg.h>
144#include <linux/slab.h>
145#include <linux/init.h>
146#include <linux/pci.h>
147#include <linux/delay.h>
148#include <linux/ide.h>
149#include <linux/completion.h>
150#include <linux/reboot.h>
151#include <linux/cdrom.h>
152#include <linux/seq_file.h>
153#include <linux/device.h>
154#include <linux/bitops.h>
155
156#include <asm/byteorder.h>
157#include <asm/irq.h>
158#include <asm/uaccess.h>
159#include <asm/io.h>
160
161
162/* default maximum number of failures */
163#define IDE_DEFAULT_MAX_FAILURES 	1
164
165static const u8 ide_hwif_to_major[] = { IDE0_MAJOR, IDE1_MAJOR,
166					IDE2_MAJOR, IDE3_MAJOR,
167					IDE4_MAJOR, IDE5_MAJOR,
168					IDE6_MAJOR, IDE7_MAJOR,
169					IDE8_MAJOR, IDE9_MAJOR };
170
171static int idebus_parameter;	/* holds the "idebus=" parameter */
172static int system_bus_speed;	/* holds what we think is VESA/PCI bus speed */
173static int initializing;	/* set while initializing built-in drivers */
174
175DECLARE_MUTEX(ide_cfg_sem);
176 __cacheline_aligned_in_smp DEFINE_SPINLOCK(ide_lock);
177
178#ifdef CONFIG_BLK_DEV_IDEPCI
179static int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */
180#endif
181
182#ifdef CONFIG_IDEDMA_AUTO
183int noautodma = 0;
184#else
185int noautodma = 1;
186#endif
187
188EXPORT_SYMBOL(noautodma);
189
190#ifdef CONFIG_BLK_DEV_IDEACPI
191int ide_noacpi = 0;
192int ide_noacpitfs = 1;
193int ide_noacpionboot = 1;
194#endif
195
196/*
197 * This is declared extern in ide.h, for access by other IDE modules:
198 */
199ide_hwif_t ide_hwifs[MAX_HWIFS];	/* master data repository */
200
201EXPORT_SYMBOL(ide_hwifs);
202
203/*
204 * Do not even *think* about calling this!
205 */
206static void init_hwif_data(ide_hwif_t *hwif, unsigned int index)
207{
208	unsigned int unit;
209
210	/* bulk initialize hwif & drive info with zeros */
211	memset(hwif, 0, sizeof(ide_hwif_t));
212
213	/* fill in any non-zero initial values */
214	hwif->index	= index;
215	hwif->major	= ide_hwif_to_major[index];
216
217	hwif->name[0]	= 'i';
218	hwif->name[1]	= 'd';
219	hwif->name[2]	= 'e';
220	hwif->name[3]	= '0' + index;
221
222	hwif->bus_state	= BUSSTATE_ON;
223
224	hwif->atapi_dma = 0;		/* disable all atapi dma */
225	hwif->ultra_mask = 0x80;	/* disable all ultra */
226	hwif->mwdma_mask = 0x80;	/* disable all mwdma */
227	hwif->swdma_mask = 0x80;	/* disable all swdma */
228
229	init_completion(&hwif->gendev_rel_comp);
230
231	default_hwif_iops(hwif);
232	default_hwif_transport(hwif);
233	for (unit = 0; unit < MAX_DRIVES; ++unit) {
234		ide_drive_t *drive = &hwif->drives[unit];
235
236		drive->media			= ide_disk;
237		drive->select.all		= (unit<<4)|0xa0;
238		drive->hwif			= hwif;
239		drive->ctl			= 0x08;
240		drive->ready_stat		= READY_STAT;
241		drive->bad_wstat		= BAD_W_STAT;
242		drive->special.b.recalibrate	= 1;
243		drive->special.b.set_geometry	= 1;
244		drive->name[0]			= 'h';
245		drive->name[1]			= 'd';
246		drive->name[2]			= 'a' + (index * MAX_DRIVES) + unit;
247		drive->max_failures		= IDE_DEFAULT_MAX_FAILURES;
248		drive->using_dma		= 0;
249		drive->vdma			= 0;
250		INIT_LIST_HEAD(&drive->list);
251		init_completion(&drive->gendev_rel_comp);
252	}
253}
254
255static void init_hwif_default(ide_hwif_t *hwif, unsigned int index)
256{
257	hw_regs_t hw;
258
259	memset(&hw, 0, sizeof(hw_regs_t));
260
261	ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, &hwif->irq);
262
263	memcpy(&hwif->hw, &hw, sizeof(hw));
264	memcpy(hwif->io_ports, hw.io_ports, sizeof(hw.io_ports));
265
266	hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET];
267#ifdef CONFIG_BLK_DEV_HD
268	if (hwif->io_ports[IDE_DATA_OFFSET] == HD_DATA)
269		hwif->noprobe = 1;	/* may be overridden by ide_setup() */
270#endif
271}
272
273extern void ide_arm_init(void);
274
275/*
276 * init_ide_data() sets reasonable default values into all fields
277 * of all instances of the hwifs and drives, but only on the first call.
278 * Subsequent calls have no effect (they don't wipe out anything).
279 *
280 * This routine is normally called at driver initialization time,
281 * but may also be called MUCH earlier during kernel "command-line"
282 * parameter processing.  As such, we cannot depend on any other parts
283 * of the kernel (such as memory allocation) to be functioning yet.
284 *
285 * This is too bad, as otherwise we could dynamically allocate the
286 * ide_drive_t structs as needed, rather than always consuming memory
287 * for the max possible number (MAX_HWIFS * MAX_DRIVES) of them.
288 *
289 * FIXME: We should stuff the setup data into __init and copy the
290 * relevant hwifs/allocate them properly during boot.
291 */
292#define MAGIC_COOKIE 0x12345678
293static void __init init_ide_data (void)
294{
295	ide_hwif_t *hwif;
296	unsigned int index;
297	static unsigned long magic_cookie = MAGIC_COOKIE;
298
299	if (magic_cookie != MAGIC_COOKIE)
300		return;		/* already initialized */
301	magic_cookie = 0;
302
303	/* Initialise all interface structures */
304	for (index = 0; index < MAX_HWIFS; ++index) {
305		hwif = &ide_hwifs[index];
306		init_hwif_data(hwif, index);
307		init_hwif_default(hwif, index);
308#if !defined(CONFIG_PPC32) || !defined(CONFIG_PCI)
309		hwif->irq = hwif->hw.irq =
310			ide_init_default_irq(hwif->io_ports[IDE_DATA_OFFSET]);
311#endif
312	}
313#ifdef CONFIG_IDE_ARM
314	initializing = 1;
315	ide_arm_init();
316	initializing = 0;
317#endif
318}
319
320/**
321 *	ide_system_bus_speed	-	guess bus speed
322 *
323 *	ide_system_bus_speed() returns what we think is the system VESA/PCI
324 *	bus speed (in MHz). This is used for calculating interface PIO timings.
325 *	The default is 40 for known PCI systems, 50 otherwise.
326 *	The "idebus=xx" parameter can be used to override this value.
327 *	The actual value to be used is computed/displayed the first time
328 *	through. Drivers should only use this as a last resort.
329 *
330 *	Returns a guessed speed in MHz.
331 */
332
333static int ide_system_bus_speed(void)
334{
335#ifdef CONFIG_PCI
336	static struct pci_device_id pci_default[] = {
337		{ PCI_DEVICE(PCI_ANY_ID, PCI_ANY_ID) },
338		{ }
339	};
340#else
341#define pci_default 0
342#endif /* CONFIG_PCI */
343
344	if (!system_bus_speed) {
345		if (idebus_parameter) {
346			/* user supplied value */
347			system_bus_speed = idebus_parameter;
348		} else if (pci_dev_present(pci_default)) {
349			/* safe default value for PCI */
350			system_bus_speed = 33;
351		} else {
352			/* safe default value for VESA and PCI */
353			system_bus_speed = 50;
354		}
355		printk(KERN_INFO "ide: Assuming %dMHz system bus speed "
356			"for PIO modes%s\n", system_bus_speed,
357			idebus_parameter ? "" : "; override with idebus=xx");
358	}
359	return system_bus_speed;
360}
361
362#ifdef CONFIG_PROC_FS
363struct proc_dir_entry *proc_ide_root;
364#endif
365
366static struct resource* hwif_request_region(ide_hwif_t *hwif,
367					    unsigned long addr, int num)
368{
369	struct resource *res = request_region(addr, num, hwif->name);
370
371	if (!res)
372		printk(KERN_ERR "%s: I/O resource 0x%lX-0x%lX not free.\n",
373				hwif->name, addr, addr+num-1);
374	return res;
375}
376
377/**
378 *	ide_hwif_request_regions - request resources for IDE
379 *	@hwif: interface to use
380 *
381 *	Requests all the needed resources for an interface.
382 *	Right now core IDE code does this work which is deeply wrong.
383 *	MMIO leaves it to the controller driver,
384 *	PIO will migrate this way over time.
385 */
386
387int ide_hwif_request_regions(ide_hwif_t *hwif)
388{
389	unsigned long addr;
390	unsigned int i;
391
392	if (hwif->mmio)
393		return 0;
394	addr = hwif->io_ports[IDE_CONTROL_OFFSET];
395	if (addr && !hwif_request_region(hwif, addr, 1))
396		goto control_region_busy;
397	hwif->straight8 = 0;
398	addr = hwif->io_ports[IDE_DATA_OFFSET];
399	if ((addr | 7) == hwif->io_ports[IDE_STATUS_OFFSET]) {
400		if (!hwif_request_region(hwif, addr, 8))
401			goto data_region_busy;
402		hwif->straight8 = 1;
403		return 0;
404	}
405	for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
406		addr = hwif->io_ports[i];
407		if (!hwif_request_region(hwif, addr, 1)) {
408			while (--i)
409				release_region(addr, 1);
410			goto data_region_busy;
411		}
412	}
413	return 0;
414
415data_region_busy:
416	addr = hwif->io_ports[IDE_CONTROL_OFFSET];
417	if (addr)
418		release_region(addr, 1);
419control_region_busy:
420	/* If any errors are return, we drop the hwif interface. */
421	return -EBUSY;
422}
423
424/**
425 *	ide_hwif_release_regions - free IDE resources
426 *
427 *	Note that we only release the standard ports,
428 *	and do not even try to handle any extra ports
429 *	allocated for weird IDE interface chipsets.
430 *
431 *	Note also that we don't yet handle mmio resources here. More
432 *	importantly our caller should be doing this so we need to
433 *	restructure this as a helper function for drivers.
434 */
435
436void ide_hwif_release_regions(ide_hwif_t *hwif)
437{
438	u32 i = 0;
439
440	if (hwif->mmio)
441		return;
442	if (hwif->io_ports[IDE_CONTROL_OFFSET])
443		release_region(hwif->io_ports[IDE_CONTROL_OFFSET], 1);
444	if (hwif->straight8) {
445		release_region(hwif->io_ports[IDE_DATA_OFFSET], 8);
446		return;
447	}
448	for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++)
449		if (hwif->io_ports[i])
450			release_region(hwif->io_ports[i], 1);
451}
452
453/**
454 *	ide_hwif_restore	-	restore hwif to template
455 *	@hwif: hwif to update
456 *	@tmp_hwif: template
457 *
458 *	Restore hwif to a previous state by copying most settings
459 *	from the template.
460 */
461
462static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif)
463{
464	hwif->hwgroup			= tmp_hwif->hwgroup;
465
466	hwif->gendev.parent		= tmp_hwif->gendev.parent;
467
468	hwif->proc			= tmp_hwif->proc;
469
470	hwif->major			= tmp_hwif->major;
471	hwif->straight8			= tmp_hwif->straight8;
472	hwif->bus_state			= tmp_hwif->bus_state;
473
474	hwif->atapi_dma			= tmp_hwif->atapi_dma;
475	hwif->ultra_mask		= tmp_hwif->ultra_mask;
476	hwif->mwdma_mask		= tmp_hwif->mwdma_mask;
477	hwif->swdma_mask		= tmp_hwif->swdma_mask;
478
479	hwif->chipset			= tmp_hwif->chipset;
480	hwif->hold			= tmp_hwif->hold;
481
482#ifdef CONFIG_BLK_DEV_IDEPCI
483	hwif->pci_dev			= tmp_hwif->pci_dev;
484	hwif->cds			= tmp_hwif->cds;
485#endif
486
487	hwif->tuneproc			= tmp_hwif->tuneproc;
488	hwif->speedproc			= tmp_hwif->speedproc;
489	hwif->selectproc		= tmp_hwif->selectproc;
490	hwif->reset_poll		= tmp_hwif->reset_poll;
491	hwif->pre_reset			= tmp_hwif->pre_reset;
492	hwif->resetproc			= tmp_hwif->resetproc;
493	hwif->intrproc			= tmp_hwif->intrproc;
494	hwif->maskproc			= tmp_hwif->maskproc;
495	hwif->quirkproc			= tmp_hwif->quirkproc;
496	hwif->busproc			= tmp_hwif->busproc;
497
498	hwif->ata_input_data		= tmp_hwif->ata_input_data;
499	hwif->ata_output_data		= tmp_hwif->ata_output_data;
500	hwif->atapi_input_bytes		= tmp_hwif->atapi_input_bytes;
501	hwif->atapi_output_bytes	= tmp_hwif->atapi_output_bytes;
502
503	hwif->dma_setup			= tmp_hwif->dma_setup;
504	hwif->dma_exec_cmd		= tmp_hwif->dma_exec_cmd;
505	hwif->dma_start			= tmp_hwif->dma_start;
506	hwif->ide_dma_end		= tmp_hwif->ide_dma_end;
507	hwif->ide_dma_check		= tmp_hwif->ide_dma_check;
508	hwif->ide_dma_on		= tmp_hwif->ide_dma_on;
509	hwif->dma_off_quietly		= tmp_hwif->dma_off_quietly;
510	hwif->ide_dma_test_irq		= tmp_hwif->ide_dma_test_irq;
511	hwif->ide_dma_clear_irq		= tmp_hwif->ide_dma_clear_irq;
512	hwif->dma_host_on		= tmp_hwif->dma_host_on;
513	hwif->dma_host_off		= tmp_hwif->dma_host_off;
514	hwif->ide_dma_lostirq		= tmp_hwif->ide_dma_lostirq;
515	hwif->ide_dma_timeout		= tmp_hwif->ide_dma_timeout;
516
517	hwif->OUTB			= tmp_hwif->OUTB;
518	hwif->OUTBSYNC			= tmp_hwif->OUTBSYNC;
519	hwif->OUTW			= tmp_hwif->OUTW;
520	hwif->OUTSW			= tmp_hwif->OUTSW;
521	hwif->OUTSL			= tmp_hwif->OUTSL;
522
523	hwif->INB			= tmp_hwif->INB;
524	hwif->INW			= tmp_hwif->INW;
525	hwif->INSW			= tmp_hwif->INSW;
526	hwif->INSL			= tmp_hwif->INSL;
527
528	hwif->sg_max_nents		= tmp_hwif->sg_max_nents;
529
530	hwif->mmio			= tmp_hwif->mmio;
531	hwif->rqsize			= tmp_hwif->rqsize;
532	hwif->no_lba48			= tmp_hwif->no_lba48;
533
534#ifndef CONFIG_BLK_DEV_IDECS
535	hwif->irq			= tmp_hwif->irq;
536#endif
537
538	hwif->dma_base			= tmp_hwif->dma_base;
539	hwif->dma_master		= tmp_hwif->dma_master;
540	hwif->dma_command		= tmp_hwif->dma_command;
541	hwif->dma_vendor1		= tmp_hwif->dma_vendor1;
542	hwif->dma_status		= tmp_hwif->dma_status;
543	hwif->dma_vendor3		= tmp_hwif->dma_vendor3;
544	hwif->dma_prdtable		= tmp_hwif->dma_prdtable;
545
546	hwif->config_data		= tmp_hwif->config_data;
547	hwif->select_data		= tmp_hwif->select_data;
548	hwif->extra_base		= tmp_hwif->extra_base;
549	hwif->extra_ports		= tmp_hwif->extra_ports;
550	hwif->autodma			= tmp_hwif->autodma;
551	hwif->udma_four			= tmp_hwif->udma_four;
552
553	hwif->hwif_data			= tmp_hwif->hwif_data;
554}
555
556/**
557 *	ide_unregister		-	free an IDE interface
558 *	@index: index of interface (will change soon to a pointer)
559 *
560 *	Perform the final unregister of an IDE interface. At the moment
561 *	we don't refcount interfaces so this will also get split up.
562 *
563 *	Locking:
564 *	The caller must not hold the IDE locks
565 *	The drive present/vanishing is not yet properly locked
566 *	Take care with the callbacks. These have been split to avoid
567 *	deadlocking the IDE layer. The shutdown callback is called
568 *	before we take the lock and free resources. It is up to the
569 *	caller to be sure there is no pending I/O here, and that
570 *	the interface will not be reopened (present/vanishing locking
571 *	isn't yet done BTW). After we commit to the final kill we
572 *	call the cleanup callback with the ide locks held.
573 *
574 *	Unregister restores the hwif structures to the default state.
575 *	This is raving bonkers.
576 */
577
578void ide_unregister(unsigned int index)
579{
580	ide_drive_t *drive;
581	ide_hwif_t *hwif, *g;
582	static ide_hwif_t tmp_hwif; /* protected by ide_cfg_sem */
583	ide_hwgroup_t *hwgroup;
584	int irq_count = 0, unit;
585
586	BUG_ON(index >= MAX_HWIFS);
587
588	BUG_ON(in_interrupt());
589	BUG_ON(irqs_disabled());
590	down(&ide_cfg_sem);
591	spin_lock_irq(&ide_lock);
592	hwif = &ide_hwifs[index];
593	if (!hwif->present)
594		goto abort;
595	for (unit = 0; unit < MAX_DRIVES; ++unit) {
596		drive = &hwif->drives[unit];
597		if (!drive->present)
598			continue;
599		spin_unlock_irq(&ide_lock);
600		device_unregister(&drive->gendev);
601		wait_for_completion(&drive->gendev_rel_comp);
602		spin_lock_irq(&ide_lock);
603	}
604	hwif->present = 0;
605
606	spin_unlock_irq(&ide_lock);
607
608	destroy_proc_ide_interface(hwif);
609
610	hwgroup = hwif->hwgroup;
611	/*
612	 * free the irq if we were the only hwif using it
613	 */
614	g = hwgroup->hwif;
615	do {
616		if (g->irq == hwif->irq)
617			++irq_count;
618		g = g->next;
619	} while (g != hwgroup->hwif);
620	if (irq_count == 1)
621		free_irq(hwif->irq, hwgroup);
622
623	spin_lock_irq(&ide_lock);
624	/*
625	 * Note that we only release the standard ports,
626	 * and do not even try to handle any extra ports
627	 * allocated for weird IDE interface chipsets.
628	 */
629	ide_hwif_release_regions(hwif);
630
631	/*
632	 * Remove us from the hwgroup, and free
633	 * the hwgroup if we were the only member
634	 */
635	if (hwif->next == hwif) {
636		BUG_ON(hwgroup->hwif != hwif);
637		kfree(hwgroup);
638	} else {
639		/* There is another interface in hwgroup.
640		 * Unlink us, and set hwgroup->drive and ->hwif to
641		 * something sane.
642		 */
643		g = hwgroup->hwif;
644		while (g->next != hwif)
645			g = g->next;
646		g->next = hwif->next;
647		if (hwgroup->hwif == hwif) {
648			/* Chose a random hwif for hwgroup->hwif.
649			 * It's guaranteed that there are no drives
650			 * left in the hwgroup.
651			 */
652			BUG_ON(hwgroup->drive != NULL);
653			hwgroup->hwif = g;
654		}
655		BUG_ON(hwgroup->hwif == hwif);
656	}
657
658	/* More messed up locking ... */
659	spin_unlock_irq(&ide_lock);
660	device_unregister(&hwif->gendev);
661	wait_for_completion(&hwif->gendev_rel_comp);
662
663	/*
664	 * Remove us from the kernel's knowledge
665	 */
666	blk_unregister_region(MKDEV(hwif->major, 0), MAX_DRIVES<<PARTN_BITS);
667	kfree(hwif->sg_table);
668	unregister_blkdev(hwif->major, hwif->name);
669	spin_lock_irq(&ide_lock);
670
671	if (hwif->dma_base) {
672		(void) ide_release_dma(hwif);
673
674		hwif->dma_base = 0;
675		hwif->dma_master = 0;
676		hwif->dma_command = 0;
677		hwif->dma_vendor1 = 0;
678		hwif->dma_status = 0;
679		hwif->dma_vendor3 = 0;
680		hwif->dma_prdtable = 0;
681
682		hwif->extra_base  = 0;
683		hwif->extra_ports = 0;
684	}
685
686	/* copy original settings */
687	tmp_hwif = *hwif;
688
689	/* restore hwif data to pristine status */
690	init_hwif_data(hwif, index);
691	init_hwif_default(hwif, index);
692
693	ide_hwif_restore(hwif, &tmp_hwif);
694
695abort:
696	spin_unlock_irq(&ide_lock);
697	up(&ide_cfg_sem);
698}
699
700EXPORT_SYMBOL(ide_unregister);
701
702
703/**
704 *	ide_setup_ports 	-	set up IDE interface ports
705 *	@hw: register descriptions
706 *	@base: base register
707 *	@offsets: table of register offsets
708 *	@ctrl: control register
709 *	@ack_irq: IRQ ack
710 *	@irq: interrupt lie
711 *
712 *	Setup hw_regs_t structure described by parameters.  You
713 *	may set up the hw structure yourself OR use this routine to
714 *	do it for you. This is basically a helper
715 *
716 */
717
718void ide_setup_ports (	hw_regs_t *hw,
719			unsigned long base, int *offsets,
720			unsigned long ctrl, unsigned long intr,
721			ide_ack_intr_t *ack_intr,
722/*
723 *			ide_io_ops_t *iops,
724 */
725			int irq)
726{
727	int i;
728
729	memset(hw, 0, sizeof(hw_regs_t));
730	for (i = 0; i < IDE_NR_PORTS; i++) {
731		if (offsets[i] == -1) {
732			switch(i) {
733				case IDE_CONTROL_OFFSET:
734					hw->io_ports[i] = ctrl;
735					break;
736#if defined(CONFIG_AMIGA) || defined(CONFIG_MAC)
737				case IDE_IRQ_OFFSET:
738					hw->io_ports[i] = intr;
739					break;
740#endif /* (CONFIG_AMIGA) || (CONFIG_MAC) */
741				default:
742					hw->io_ports[i] = 0;
743					break;
744			}
745		} else {
746			hw->io_ports[i] = base + offsets[i];
747		}
748	}
749	hw->irq = irq;
750	hw->dma = NO_DMA;
751	hw->ack_intr = ack_intr;
752/*
753 *	hw->iops = iops;
754 */
755}
756
757/**
758 *	ide_register_hw_with_fixup	-	register IDE interface
759 *	@hw: hardware registers
760 *	@hwifp: pointer to returned hwif
761 *	@fixup: fixup function
762 *
763 *	Register an IDE interface, specifying exactly the registers etc.
764 *	Set init=1 iff calling before probes have taken place.
765 *
766 *	Returns -1 on error.
767 */
768
769int ide_register_hw_with_fixup(hw_regs_t *hw, ide_hwif_t **hwifp, void(*fixup)(ide_hwif_t *hwif))
770{
771	int index, retry = 1;
772	ide_hwif_t *hwif;
773
774	do {
775		for (index = 0; index < MAX_HWIFS; ++index) {
776			hwif = &ide_hwifs[index];
777			if (hwif->hw.io_ports[IDE_DATA_OFFSET] == hw->io_ports[IDE_DATA_OFFSET])
778				goto found;
779		}
780		for (index = 0; index < MAX_HWIFS; ++index) {
781			hwif = &ide_hwifs[index];
782			if (hwif->hold)
783				continue;
784			if ((!hwif->present && !hwif->mate && !initializing) ||
785			    (!hwif->hw.io_ports[IDE_DATA_OFFSET] && initializing))
786				goto found;
787		}
788		for (index = 0; index < MAX_HWIFS; index++)
789			ide_unregister(index);
790	} while (retry--);
791	return -1;
792found:
793	if (hwif->present)
794		ide_unregister(index);
795	else if (!hwif->hold) {
796		init_hwif_data(hwif, index);
797		init_hwif_default(hwif, index);
798	}
799	if (hwif->present)
800		return -1;
801	memcpy(&hwif->hw, hw, sizeof(*hw));
802	memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->hw.io_ports));
803	hwif->irq = hw->irq;
804	hwif->noprobe = 0;
805	hwif->chipset = hw->chipset;
806	hwif->gendev.parent = hw->dev;
807
808	if (!initializing) {
809		probe_hwif_init_with_fixup(hwif, fixup);
810		create_proc_ide_interfaces();
811	}
812
813	if (hwifp)
814		*hwifp = hwif;
815
816	return (initializing || hwif->present) ? index : -1;
817}
818
819EXPORT_SYMBOL(ide_register_hw_with_fixup);
820
821int ide_register_hw(hw_regs_t *hw, ide_hwif_t **hwifp)
822{
823	return ide_register_hw_with_fixup(hw, hwifp, NULL);
824}
825
826EXPORT_SYMBOL(ide_register_hw);
827
828/*
829 *	Locks for IDE setting functionality
830 */
831
832DECLARE_MUTEX(ide_setting_sem);
833
834/**
835 *	__ide_add_setting	-	add an ide setting option
836 *	@drive: drive to use
837 *	@name: setting name
838 *	@rw: true if the function is read write
839 *	@read_ioctl: function to call on read
840 *	@write_ioctl: function to call on write
841 *	@data_type: type of data
842 *	@min: range minimum
843 *	@max: range maximum
844 *	@mul_factor: multiplication scale
845 *	@div_factor: divison scale
846 *	@data: private data field
847 *	@set: setting
848 *	@auto_remove: setting auto removal flag
849 *
850 *	Removes the setting named from the device if it is present.
851 *	The function takes the settings_lock to protect against
852 *	parallel changes. This function must not be called from IRQ
853 *	context. Returns 0 on success or -1 on failure.
854 *
855 *	BUGS: This code is seriously over-engineered. There is also
856 *	magic about how the driver specific features are setup. If
857 *	a driver is attached we assume the driver settings are auto
858 *	remove.
859 */
860
861static int __ide_add_setting(ide_drive_t *drive, const char *name, int rw, int read_ioctl, int write_ioctl, int data_type, int min, int max, int mul_factor, int div_factor, void *data, ide_procset_t *set, int auto_remove)
862{
863	ide_settings_t **p = (ide_settings_t **) &drive->settings, *setting = NULL;
864
865	down(&ide_setting_sem);
866	while ((*p) && strcmp((*p)->name, name) < 0)
867		p = &((*p)->next);
868	if ((setting = kzalloc(sizeof(*setting), GFP_KERNEL)) == NULL)
869		goto abort;
870	if ((setting->name = kmalloc(strlen(name) + 1, GFP_KERNEL)) == NULL)
871		goto abort;
872	strcpy(setting->name, name);
873	setting->rw = rw;
874	setting->read_ioctl = read_ioctl;
875	setting->write_ioctl = write_ioctl;
876	setting->data_type = data_type;
877	setting->min = min;
878	setting->max = max;
879	setting->mul_factor = mul_factor;
880	setting->div_factor = div_factor;
881	setting->data = data;
882	setting->set = set;
883
884	setting->next = *p;
885	if (auto_remove)
886		setting->auto_remove = 1;
887	*p = setting;
888	up(&ide_setting_sem);
889	return 0;
890abort:
891	up(&ide_setting_sem);
892	kfree(setting);
893	return -1;
894}
895
896int ide_add_setting(ide_drive_t *drive, const char *name, int rw, int read_ioctl, int write_ioctl, int data_type, int min, int max, int mul_factor, int div_factor, void *data, ide_procset_t *set)
897{
898	return __ide_add_setting(drive, name, rw, read_ioctl, write_ioctl, data_type, min, max, mul_factor, div_factor, data, set, 1);
899}
900
901EXPORT_SYMBOL(ide_add_setting);
902
903/**
904 *	__ide_remove_setting	-	remove an ide setting option
905 *	@drive: drive to use
906 *	@name: setting name
907 *
908 *	Removes the setting named from the device if it is present.
909 *	The caller must hold the setting semaphore.
910 */
911
912static void __ide_remove_setting (ide_drive_t *drive, char *name)
913{
914	ide_settings_t **p, *setting;
915
916	p = (ide_settings_t **) &drive->settings;
917
918	while ((*p) && strcmp((*p)->name, name))
919		p = &((*p)->next);
920	if ((setting = (*p)) == NULL)
921		return;
922
923	(*p) = setting->next;
924
925	kfree(setting->name);
926	kfree(setting);
927}
928
929/**
930 *	ide_find_setting_by_ioctl	-	find a drive specific ioctl
931 *	@drive: drive to scan
932 *	@cmd: ioctl command to handle
933 *
934 *	Scan's the device setting table for a matching entry and returns
935 *	this or NULL if no entry is found. The caller must hold the
936 *	setting semaphore
937 */
938
939static ide_settings_t *ide_find_setting_by_ioctl (ide_drive_t *drive, int cmd)
940{
941	ide_settings_t *setting = drive->settings;
942
943	while (setting) {
944		if (setting->read_ioctl == cmd || setting->write_ioctl == cmd)
945			break;
946		setting = setting->next;
947	}
948
949	return setting;
950}
951
952/**
953 *	ide_find_setting_by_name	-	find a drive specific setting
954 *	@drive: drive to scan
955 *	@name: setting name
956 *
957 *	Scan's the device setting table for a matching entry and returns
958 *	this or NULL if no entry is found. The caller must hold the
959 *	setting semaphore
960 */
961
962ide_settings_t *ide_find_setting_by_name (ide_drive_t *drive, char *name)
963{
964	ide_settings_t *setting = drive->settings;
965
966	while (setting) {
967		if (strcmp(setting->name, name) == 0)
968			break;
969		setting = setting->next;
970	}
971	return setting;
972}
973
974/**
975 *	auto_remove_settings	-	remove driver specific settings
976 *	@drive: drive
977 *
978 *	Automatically remove all the driver specific settings for this
979 *	drive. This function may not be called from IRQ context. The
980 *	caller must hold ide_setting_sem.
981 */
982
983static void auto_remove_settings (ide_drive_t *drive)
984{
985	ide_settings_t *setting;
986repeat:
987	setting = drive->settings;
988	while (setting) {
989		if (setting->auto_remove) {
990			__ide_remove_setting(drive, setting->name);
991			goto repeat;
992		}
993		setting = setting->next;
994	}
995}
996
997/**
998 *	ide_read_setting	-	read an IDE setting
999 *	@drive: drive to read from
1000 *	@setting: drive setting
1001 *
1002 *	Read a drive setting and return the value. The caller
1003 *	must hold the ide_setting_sem when making this call.
1004 *
1005 *	BUGS: the data return and error are the same return value
1006 *	so an error -EINVAL and true return of the same value cannot
1007 *	be told apart
1008 */
1009
1010int ide_read_setting (ide_drive_t *drive, ide_settings_t *setting)
1011{
1012	int		val = -EINVAL;
1013	unsigned long	flags;
1014
1015	if ((setting->rw & SETTING_READ)) {
1016		spin_lock_irqsave(&ide_lock, flags);
1017		switch(setting->data_type) {
1018			case TYPE_BYTE:
1019				val = *((u8 *) setting->data);
1020				break;
1021			case TYPE_SHORT:
1022				val = *((u16 *) setting->data);
1023				break;
1024			case TYPE_INT:
1025			case TYPE_INTA:
1026				val = *((u32 *) setting->data);
1027				break;
1028		}
1029		spin_unlock_irqrestore(&ide_lock, flags);
1030	}
1031	return val;
1032}
1033
1034/**
1035 *	ide_spin_wait_hwgroup	-	wait for group
1036 *	@drive: drive in the group
1037 *
1038 *	Wait for an IDE device group to go non busy and then return
1039 *	holding the ide_lock which guards the hwgroup->busy status
1040 *	and right to use it.
1041 */
1042
1043int ide_spin_wait_hwgroup (ide_drive_t *drive)
1044{
1045	ide_hwgroup_t *hwgroup = HWGROUP(drive);
1046	unsigned long timeout = jiffies + (3 * HZ);
1047
1048	spin_lock_irq(&ide_lock);
1049
1050	while (hwgroup->busy) {
1051		unsigned long lflags;
1052		spin_unlock_irq(&ide_lock);
1053		local_irq_set(lflags);
1054		if (time_after(jiffies, timeout)) {
1055			local_irq_restore(lflags);
1056			printk(KERN_ERR "%s: channel busy\n", drive->name);
1057			return -EBUSY;
1058		}
1059		local_irq_restore(lflags);
1060		spin_lock_irq(&ide_lock);
1061	}
1062	return 0;
1063}
1064
1065EXPORT_SYMBOL(ide_spin_wait_hwgroup);
1066
1067/**
1068 *	ide_write_setting	-	read an IDE setting
1069 *	@drive: drive to read from
1070 *	@setting: drive setting
1071 *	@val: value
1072 *
1073 *	Write a drive setting if it is possible. The caller
1074 *	must hold the ide_setting_sem when making this call.
1075 *
1076 *	BUGS: the data return and error are the same return value
1077 *	so an error -EINVAL and true return of the same value cannot
1078 *	be told apart
1079 *
1080 *	FIXME:  This should be changed to enqueue a special request
1081 *	to the driver to change settings, and then wait on a sema for completion.
1082 *	The current scheme of polling is kludgy, though safe enough.
1083 */
1084
1085int ide_write_setting (ide_drive_t *drive, ide_settings_t *setting, int val)
1086{
1087	int i;
1088	u32 *p;
1089
1090	if (!capable(CAP_SYS_ADMIN))
1091		return -EACCES;
1092	if (!(setting->rw & SETTING_WRITE))
1093		return -EPERM;
1094	if (val < setting->min || val > setting->max)
1095		return -EINVAL;
1096	if (setting->set)
1097		return setting->set(drive, val);
1098	if (ide_spin_wait_hwgroup(drive))
1099		return -EBUSY;
1100	switch (setting->data_type) {
1101		case TYPE_BYTE:
1102			*((u8 *) setting->data) = val;
1103			break;
1104		case TYPE_SHORT:
1105			*((u16 *) setting->data) = val;
1106			break;
1107		case TYPE_INT:
1108			*((u32 *) setting->data) = val;
1109			break;
1110		case TYPE_INTA:
1111			p = (u32 *) setting->data;
1112			for (i = 0; i < 1 << PARTN_BITS; i++, p++)
1113				*p = val;
1114			break;
1115	}
1116	spin_unlock_irq(&ide_lock);
1117	return 0;
1118}
1119
1120static int set_io_32bit(ide_drive_t *drive, int arg)
1121{
1122	drive->io_32bit = arg;
1123#ifdef CONFIG_BLK_DEV_DTC2278
1124	if (HWIF(drive)->chipset == ide_dtc2278)
1125		HWIF(drive)->drives[!drive->select.b.unit].io_32bit = arg;
1126#endif /* CONFIG_BLK_DEV_DTC2278 */
1127	return 0;
1128}
1129
1130static int set_using_dma (ide_drive_t *drive, int arg)
1131{
1132#ifdef CONFIG_BLK_DEV_IDEDMA
1133	if (!drive->id || !(drive->id->capability & 1))
1134		return -EPERM;
1135	if (HWIF(drive)->ide_dma_check == NULL)
1136		return -EPERM;
1137	if (arg) {
1138		if (ide_set_dma(drive))
1139			return -EIO;
1140		if (HWIF(drive)->ide_dma_on(drive)) return -EIO;
1141	} else
1142		ide_dma_off(drive);
1143	return 0;
1144#else
1145	return -EPERM;
1146#endif
1147}
1148
1149static int set_pio_mode (ide_drive_t *drive, int arg)
1150{
1151	struct request rq;
1152
1153	if (!HWIF(drive)->tuneproc)
1154		return -ENOSYS;
1155	if (drive->special.b.set_tune)
1156		return -EBUSY;
1157	ide_init_drive_cmd(&rq);
1158	drive->tune_req = (u8) arg;
1159	drive->special.b.set_tune = 1;
1160	(void) ide_do_drive_cmd(drive, &rq, ide_wait);
1161	return 0;
1162}
1163
1164static int set_xfer_rate (ide_drive_t *drive, int arg)
1165{
1166	int err = ide_wait_cmd(drive,
1167			WIN_SETFEATURES, (u8) arg,
1168			SETFEATURES_XFER, 0, NULL);
1169
1170	if (!err && arg) {
1171		ide_set_xfer_rate(drive, (u8) arg);
1172		ide_driveid_update(drive);
1173	}
1174	return err;
1175}
1176
1177/**
1178 *	ide_add_generic_settings	-	generic ide settings
1179 *	@drive: drive being configured
1180 *
1181 *	Add the generic parts of the system settings to the /proc files and
1182 *	ioctls for this IDE device. The caller must not be holding the
1183 *	ide_setting_sem.
1184 */
1185
1186void ide_add_generic_settings (ide_drive_t *drive)
1187{
1188/*
1189 *			  drive		setting name		read/write access				read ioctl		write ioctl		data type	min	max				mul_factor	div_factor	data pointer			set function
1190 */
1191	__ide_add_setting(drive,	"io_32bit",		drive->no_io_32bit ? SETTING_READ : SETTING_RW,	HDIO_GET_32BIT,		HDIO_SET_32BIT,		TYPE_BYTE,	0,	1 + (SUPPORT_VLB_SYNC << 1),	1,		1,		&drive->io_32bit,		set_io_32bit,	0);
1192	__ide_add_setting(drive,	"keepsettings",		SETTING_RW,					HDIO_GET_KEEPSETTINGS,	HDIO_SET_KEEPSETTINGS,	TYPE_BYTE,	0,	1,				1,		1,		&drive->keep_settings,		NULL,		0);
1193	__ide_add_setting(drive,	"nice1",		SETTING_RW,					-1,			-1,			TYPE_BYTE,	0,	1,				1,		1,		&drive->nice1,			NULL,		0);
1194	__ide_add_setting(drive,	"pio_mode",		SETTING_WRITE,					-1,			HDIO_SET_PIO_MODE,	TYPE_BYTE,	0,	255,				1,		1,		NULL,				set_pio_mode,	0);
1195	__ide_add_setting(drive,	"unmaskirq",		drive->no_unmask ? SETTING_READ : SETTING_RW,	HDIO_GET_UNMASKINTR,	HDIO_SET_UNMASKINTR,	TYPE_BYTE,	0,	1,				1,		1,		&drive->unmask,			NULL,		0);
1196	__ide_add_setting(drive,	"using_dma",		SETTING_RW,					HDIO_GET_DMA,		HDIO_SET_DMA,		TYPE_BYTE,	0,	1,				1,		1,		&drive->using_dma,		set_using_dma,	0);
1197	__ide_add_setting(drive,	"init_speed",		SETTING_RW,					-1,			-1,			TYPE_BYTE,	0,	70,				1,		1,		&drive->init_speed,		NULL,		0);
1198	__ide_add_setting(drive,	"current_speed",	SETTING_RW,					-1,			-1,			TYPE_BYTE,	0,	70,				1,		1,		&drive->current_speed,		set_xfer_rate,	0);
1199	__ide_add_setting(drive,	"number",		SETTING_RW,					-1,			-1,			TYPE_BYTE,	0,	3,				1,		1,		&drive->dn,			NULL,		0);
1200}
1201
1202/**
1203 *	system_bus_clock	-	clock guess
1204 *
1205 *	External version of the bus clock guess used by very old IDE drivers
1206 *	for things like VLB timings. Should not be used.
1207 */
1208
1209int system_bus_clock (void)
1210{
1211	return((int) ((!system_bus_speed) ? ide_system_bus_speed() : system_bus_speed ));
1212}
1213
1214EXPORT_SYMBOL(system_bus_clock);
1215
1216static int generic_ide_suspend(struct device *dev, pm_message_t mesg)
1217{
1218	ide_drive_t *drive = dev->driver_data;
1219	ide_hwif_t *hwif = HWIF(drive);
1220	struct request rq;
1221	struct request_pm_state rqpm;
1222	ide_task_t args;
1223
1224	/* Call ACPI _GTM only once */
1225	if (!(drive->dn % 2))
1226		ide_acpi_get_timing(hwif);
1227
1228	memset(&rq, 0, sizeof(rq));
1229	memset(&rqpm, 0, sizeof(rqpm));
1230	memset(&args, 0, sizeof(args));
1231	rq.cmd_type = REQ_TYPE_PM_SUSPEND;
1232	rq.special = &args;
1233	rq.data = &rqpm;
1234	rqpm.pm_step = ide_pm_state_start_suspend;
1235	if (mesg.event == PM_EVENT_PRETHAW)
1236		mesg.event = PM_EVENT_FREEZE;
1237	rqpm.pm_state = mesg.event;
1238
1239	return ide_do_drive_cmd(drive, &rq, ide_wait);
1240}
1241
1242static int generic_ide_resume(struct device *dev)
1243{
1244	ide_drive_t *drive = dev->driver_data;
1245	ide_hwif_t *hwif = HWIF(drive);
1246	struct request rq;
1247	struct request_pm_state rqpm;
1248	ide_task_t args;
1249
1250	/* Call ACPI _STM only once */
1251	if (!(drive->dn % 2))
1252		ide_acpi_push_timing(hwif);
1253
1254	ide_acpi_exec_tfs(drive);
1255
1256	memset(&rq, 0, sizeof(rq));
1257	memset(&rqpm, 0, sizeof(rqpm));
1258	memset(&args, 0, sizeof(args));
1259	rq.cmd_type = REQ_TYPE_PM_RESUME;
1260	rq.special = &args;
1261	rq.data = &rqpm;
1262	rqpm.pm_step = ide_pm_state_start_resume;
1263	rqpm.pm_state = PM_EVENT_ON;
1264
1265	return ide_do_drive_cmd(drive, &rq, ide_head_wait);
1266}
1267
1268int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device *bdev,
1269			unsigned int cmd, unsigned long arg)
1270{
1271	ide_settings_t *setting;
1272	ide_driver_t *drv;
1273	int err = 0;
1274	void __user *p = (void __user *)arg;
1275
1276	down(&ide_setting_sem);
1277	if ((setting = ide_find_setting_by_ioctl(drive, cmd)) != NULL) {
1278		if (cmd == setting->read_ioctl) {
1279			err = ide_read_setting(drive, setting);
1280			up(&ide_setting_sem);
1281			return err >= 0 ? put_user(err, (long __user *)arg) : err;
1282		} else {
1283			if (bdev != bdev->bd_contains)
1284				err = -EINVAL;
1285			else
1286				err = ide_write_setting(drive, setting, arg);
1287			up(&ide_setting_sem);
1288			return err;
1289		}
1290	}
1291	up(&ide_setting_sem);
1292
1293	switch (cmd) {
1294		case HDIO_OBSOLETE_IDENTITY:
1295		case HDIO_GET_IDENTITY:
1296			if (bdev != bdev->bd_contains)
1297				return -EINVAL;
1298			if (drive->id_read == 0)
1299				return -ENOMSG;
1300			if (copy_to_user(p, drive->id, (cmd == HDIO_GET_IDENTITY) ? sizeof(*drive->id) : 142))
1301				return -EFAULT;
1302			return 0;
1303
1304		case HDIO_GET_NICE:
1305			return put_user(drive->dsc_overlap	<<	IDE_NICE_DSC_OVERLAP	|
1306					drive->atapi_overlap	<<	IDE_NICE_ATAPI_OVERLAP	|
1307					drive->nice0		<< 	IDE_NICE_0		|
1308					drive->nice1		<<	IDE_NICE_1		|
1309					drive->nice2		<<	IDE_NICE_2,
1310					(long __user *) arg);
1311
1312#ifdef CONFIG_IDE_TASK_IOCTL
1313		case HDIO_DRIVE_TASKFILE:
1314		        if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
1315				return -EACCES;
1316			switch(drive->media) {
1317				case ide_disk:
1318					return ide_taskfile_ioctl(drive, cmd, arg);
1319				default:
1320					return -ENOMSG;
1321			}
1322#endif /* CONFIG_IDE_TASK_IOCTL */
1323
1324		case HDIO_DRIVE_CMD:
1325			if (!capable(CAP_SYS_RAWIO))
1326				return -EACCES;
1327			return ide_cmd_ioctl(drive, cmd, arg);
1328
1329		case HDIO_DRIVE_TASK:
1330			if (!capable(CAP_SYS_RAWIO))
1331				return -EACCES;
1332			return ide_task_ioctl(drive, cmd, arg);
1333
1334		case HDIO_SCAN_HWIF:
1335		{
1336			hw_regs_t hw;
1337			int args[3];
1338			if (!capable(CAP_SYS_RAWIO)) return -EACCES;
1339			if (copy_from_user(args, p, 3 * sizeof(int)))
1340				return -EFAULT;
1341			memset(&hw, 0, sizeof(hw));
1342			ide_init_hwif_ports(&hw, (unsigned long) args[0],
1343					    (unsigned long) args[1], NULL);
1344			hw.irq = args[2];
1345			if (ide_register_hw(&hw, NULL) == -1)
1346				return -EIO;
1347			return 0;
1348		}
1349	        case HDIO_UNREGISTER_HWIF:
1350			if (!capable(CAP_SYS_RAWIO)) return -EACCES;
1351			/* (arg > MAX_HWIFS) checked in function */
1352			ide_unregister(arg);
1353			return 0;
1354		case HDIO_SET_NICE:
1355			if (!capable(CAP_SYS_ADMIN)) return -EACCES;
1356			if (arg != (arg & ((1 << IDE_NICE_DSC_OVERLAP) | (1 << IDE_NICE_1))))
1357				return -EPERM;
1358			drive->dsc_overlap = (arg >> IDE_NICE_DSC_OVERLAP) & 1;
1359			drv = *(ide_driver_t **)bdev->bd_disk->private_data;
1360			if (drive->dsc_overlap && !drv->supports_dsc_overlap) {
1361				drive->dsc_overlap = 0;
1362				return -EPERM;
1363			}
1364			drive->nice1 = (arg >> IDE_NICE_1) & 1;
1365			return 0;
1366		case HDIO_DRIVE_RESET:
1367		{
1368			unsigned long flags;
1369			if (!capable(CAP_SYS_ADMIN)) return -EACCES;
1370
1371			/*
1372			 *	Abort the current command on the
1373			 *	group if there is one, taking
1374			 *	care not to allow anything else
1375			 *	to be queued and to die on the
1376			 *	spot if we miss one somehow
1377			 */
1378
1379			spin_lock_irqsave(&ide_lock, flags);
1380
1381			if (HWGROUP(drive)->resetting) {
1382				spin_unlock_irqrestore(&ide_lock, flags);
1383				return -EBUSY;
1384			}
1385
1386			ide_abort(drive, "drive reset");
1387
1388			BUG_ON(HWGROUP(drive)->handler);
1389
1390			/* Ensure nothing gets queued after we
1391			   drop the lock. Reset will clear the busy */
1392
1393			HWGROUP(drive)->busy = 1;
1394			spin_unlock_irqrestore(&ide_lock, flags);
1395			(void) ide_do_reset(drive);
1396
1397			return 0;
1398		}
1399
1400		case CDROMEJECT:
1401		case CDROMCLOSETRAY:
1402			return scsi_cmd_ioctl(file, bdev->bd_disk, cmd, p);
1403
1404		case HDIO_GET_BUSSTATE:
1405			if (!capable(CAP_SYS_ADMIN))
1406				return -EACCES;
1407			if (put_user(HWIF(drive)->bus_state, (long __user *)arg))
1408				return -EFAULT;
1409			return 0;
1410
1411		case HDIO_SET_BUSSTATE:
1412			if (!capable(CAP_SYS_ADMIN))
1413				return -EACCES;
1414			if (HWIF(drive)->busproc)
1415				return HWIF(drive)->busproc(drive, (int)arg);
1416			return -EOPNOTSUPP;
1417		default:
1418			return -EINVAL;
1419	}
1420}
1421
1422EXPORT_SYMBOL(generic_ide_ioctl);
1423
1424/*
1425 * stridx() returns the offset of c within s,
1426 * or -1 if c is '\0' or not found within s.
1427 */
1428static int __init stridx (const char *s, char c)
1429{
1430	char *i = strchr(s, c);
1431	return (i && c) ? i - s : -1;
1432}
1433
1434/*
1435 * match_parm() does parsing for ide_setup():
1436 *
1437 * 1. the first char of s must be '='.
1438 * 2. if the remainder matches one of the supplied keywords,
1439 *     the index (1 based) of the keyword is negated and returned.
1440 * 3. if the remainder is a series of no more than max_vals numbers
1441 *     separated by commas, the numbers are saved in vals[] and a
1442 *     count of how many were saved is returned.  Base10 is assumed,
1443 *     and base16 is allowed when prefixed with "0x".
1444 * 4. otherwise, zero is returned.
1445 */
1446static int __init match_parm (char *s, const char *keywords[], int vals[], int max_vals)
1447{
1448	static const char *decimal = "0123456789";
1449	static const char *hex = "0123456789abcdef";
1450	int i, n;
1451
1452	if (*s++ == '=') {
1453		/*
1454		 * Try matching against the supplied keywords,
1455		 * and return -(index+1) if we match one
1456		 */
1457		if (keywords != NULL) {
1458			for (i = 0; *keywords != NULL; ++i) {
1459				if (!strcmp(s, *keywords++))
1460					return -(i+1);
1461			}
1462		}
1463		/*
1464		 * Look for a series of no more than "max_vals"
1465		 * numeric values separated by commas, in base10,
1466		 * or base16 when prefixed with "0x".
1467		 * Return a count of how many were found.
1468		 */
1469		for (n = 0; (i = stridx(decimal, *s)) >= 0;) {
1470			vals[n] = i;
1471			while ((i = stridx(decimal, *++s)) >= 0)
1472				vals[n] = (vals[n] * 10) + i;
1473			if (*s == 'x' && !vals[n]) {
1474				while ((i = stridx(hex, *++s)) >= 0)
1475					vals[n] = (vals[n] * 0x10) + i;
1476			}
1477			if (++n == max_vals)
1478				break;
1479			if (*s == ',' || *s == ';')
1480				++s;
1481		}
1482		if (!*s)
1483			return n;
1484	}
1485	return 0;	/* zero = nothing matched */
1486}
1487
1488#ifdef CONFIG_BLK_DEV_ALI14XX
1489static int __initdata probe_ali14xx;
1490extern int ali14xx_init(void);
1491#endif
1492#ifdef CONFIG_BLK_DEV_UMC8672
1493static int __initdata probe_umc8672;
1494extern int umc8672_init(void);
1495#endif
1496#ifdef CONFIG_BLK_DEV_DTC2278
1497static int __initdata probe_dtc2278;
1498extern int dtc2278_init(void);
1499#endif
1500#ifdef CONFIG_BLK_DEV_HT6560B
1501static int __initdata probe_ht6560b;
1502extern int ht6560b_init(void);
1503#endif
1504#ifdef CONFIG_BLK_DEV_QD65XX
1505static int __initdata probe_qd65xx;
1506extern int qd65xx_init(void);
1507#endif
1508
1509static int __initdata is_chipset_set[MAX_HWIFS];
1510
1511/*
1512 * ide_setup() gets called VERY EARLY during initialization,
1513 * to handle kernel "command line" strings beginning with "hdx=" or "ide".
1514 *
1515 * Remember to update Documentation/ide.txt if you change something here.
1516 */
1517static int __init ide_setup(char *s)
1518{
1519	int i, vals[3];
1520	ide_hwif_t *hwif;
1521	ide_drive_t *drive;
1522	unsigned int hw, unit;
1523	const char max_drive = 'a' + ((MAX_HWIFS * MAX_DRIVES) - 1);
1524	const char max_hwif  = '0' + (MAX_HWIFS - 1);
1525
1526
1527	if (strncmp(s,"hd",2) == 0 && s[2] == '=')	/* hd= is for hd.c   */
1528		return 0;				/* driver and not us */
1529
1530	if (strncmp(s,"ide",3) && strncmp(s,"idebus",6) && strncmp(s,"hd",2))
1531		return 0;
1532
1533	printk(KERN_INFO "ide_setup: %s", s);
1534	init_ide_data ();
1535
1536#ifdef CONFIG_BLK_DEV_IDEDOUBLER
1537	if (!strcmp(s, "ide=doubler")) {
1538		extern int ide_doubler;
1539
1540		printk(" : Enabled support for IDE doublers\n");
1541		ide_doubler = 1;
1542		return 1;
1543	}
1544#endif /* CONFIG_BLK_DEV_IDEDOUBLER */
1545
1546	if (!strcmp(s, "ide=nodma")) {
1547		printk(" : Prevented DMA\n");
1548		noautodma = 1;
1549		return 1;
1550	}
1551
1552#ifdef CONFIG_BLK_DEV_IDEPCI
1553	if (!strcmp(s, "ide=reverse")) {
1554		ide_scan_direction = 1;
1555		printk(" : Enabled support for IDE inverse scan order.\n");
1556		return 1;
1557	}
1558#endif /* CONFIG_BLK_DEV_IDEPCI */
1559
1560#ifdef CONFIG_BLK_DEV_IDEACPI
1561	if (!strcmp(s, "ide=noacpi")) {
1562		//printk(" : Disable IDE ACPI support.\n");
1563		ide_noacpi = 1;
1564		return 1;
1565	}
1566	if (!strcmp(s, "ide=acpigtf")) {
1567		//printk(" : Enable IDE ACPI _GTF support.\n");
1568		ide_noacpitfs = 0;
1569		return 1;
1570	}
1571	if (!strcmp(s, "ide=acpionboot")) {
1572		//printk(" : Call IDE ACPI methods on boot.\n");
1573		ide_noacpionboot = 0;
1574		return 1;
1575	}
1576#endif /* CONFIG_BLK_DEV_IDEACPI */
1577
1578	/*
1579	 * Look for drive options:  "hdx="
1580	 */
1581	if (s[0] == 'h' && s[1] == 'd' && s[2] >= 'a' && s[2] <= max_drive) {
1582		const char *hd_words[] = {
1583			"none", "noprobe", "nowerr", "cdrom", "serialize",
1584			"autotune", "noautotune", "minus8", "swapdata", "bswap",
1585			"noflush", "remap", "remap63", "scsi", NULL };
1586		unit = s[2] - 'a';
1587		hw   = unit / MAX_DRIVES;
1588		unit = unit % MAX_DRIVES;
1589		hwif = &ide_hwifs[hw];
1590		drive = &hwif->drives[unit];
1591		if (strncmp(s + 4, "ide-", 4) == 0) {
1592			strlcpy(drive->driver_req, s + 4, sizeof(drive->driver_req));
1593			goto done;
1594		}
1595		switch (match_parm(&s[3], hd_words, vals, 3)) {
1596			case -1: /* "none" */
1597			case -2: /* "noprobe" */
1598				drive->noprobe = 1;
1599				goto done;
1600			case -3: /* "nowerr" */
1601				drive->bad_wstat = BAD_R_STAT;
1602				hwif->noprobe = 0;
1603				goto done;
1604			case -4: /* "cdrom" */
1605				drive->present = 1;
1606				drive->media = ide_cdrom;
1607				/* an ATAPI device ignores DRDY */
1608				drive->ready_stat = 0;
1609				hwif->noprobe = 0;
1610				goto done;
1611			case -5: /* "serialize" */
1612				printk(" -- USE \"ide%d=serialize\" INSTEAD", hw);
1613				goto do_serialize;
1614			case -6: /* "autotune" */
1615				drive->autotune = IDE_TUNE_AUTO;
1616				goto obsolete_option;
1617			case -7: /* "noautotune" */
1618				drive->autotune = IDE_TUNE_NOAUTO;
1619				goto obsolete_option;
1620			case -9: /* "swapdata" */
1621			case -10: /* "bswap" */
1622				drive->bswap = 1;
1623				goto done;
1624			case -11: /* noflush */
1625				drive->noflush = 1;
1626				goto done;
1627			case -12: /* "remap" */
1628				drive->remap_0_to_1 = 1;
1629				goto done;
1630			case -13: /* "remap63" */
1631				drive->sect0 = 63;
1632				goto done;
1633			case -14: /* "scsi" */
1634				drive->scsi = 1;
1635				goto done;
1636			case 3: /* cyl,head,sect */
1637				drive->media	= ide_disk;
1638				drive->ready_stat = READY_STAT;
1639				drive->cyl	= drive->bios_cyl  = vals[0];
1640				drive->head	= drive->bios_head = vals[1];
1641				drive->sect	= drive->bios_sect = vals[2];
1642				drive->present	= 1;
1643				drive->forced_geom = 1;
1644				hwif->noprobe = 0;
1645				goto done;
1646			default:
1647				goto bad_option;
1648		}
1649	}
1650
1651	if (s[0] != 'i' || s[1] != 'd' || s[2] != 'e')
1652		goto bad_option;
1653	/*
1654	 * Look for bus speed option:  "idebus="
1655	 */
1656	if (s[3] == 'b' && s[4] == 'u' && s[5] == 's') {
1657		if (match_parm(&s[6], NULL, vals, 1) != 1)
1658			goto bad_option;
1659		if (vals[0] >= 20 && vals[0] <= 66) {
1660			idebus_parameter = vals[0];
1661		} else
1662			printk(" -- BAD BUS SPEED! Expected value from 20 to 66");
1663		goto done;
1664	}
1665	/*
1666	 * Look for interface options:  "idex="
1667	 */
1668	if (s[3] >= '0' && s[3] <= max_hwif) {
1669		/*
1670		 * Be VERY CAREFUL changing this: note hardcoded indexes below
1671		 * (-8, -9, -10) are reserved to ease the hardcoding.
1672		 */
1673		static const char *ide_words[] = {
1674			"noprobe", "serialize", "autotune", "noautotune",
1675			"reset", "dma", "ata66", "minus8", "minus9",
1676			"minus10", "four", "qd65xx", "ht6560b", "cmd640_vlb",
1677			"dtc2278", "umc8672", "ali14xx", NULL };
1678		hw = s[3] - '0';
1679		hwif = &ide_hwifs[hw];
1680		i = match_parm(&s[4], ide_words, vals, 3);
1681
1682		/*
1683		 * Cryptic check to ensure chipset not already set for hwif.
1684		 * Note: we can't depend on hwif->chipset here.
1685		 */
1686		if ((i >= -18 && i <= -11) || (i > 0 && i <= 3)) {
1687			/* chipset already specified */
1688			if (is_chipset_set[hw])
1689				goto bad_option;
1690			if (i > -18 && i <= -11) {
1691				/* these drivers are for "ide0=" only */
1692				if (hw != 0)
1693					goto bad_hwif;
1694				/* chipset already specified for 2nd port */
1695				if (is_chipset_set[hw+1])
1696					goto bad_option;
1697			}
1698			is_chipset_set[hw] = 1;
1699			printk("\n");
1700		}
1701
1702		switch (i) {
1703#ifdef CONFIG_BLK_DEV_ALI14XX
1704			case -17: /* "ali14xx" */
1705				probe_ali14xx = 1;
1706				goto done;
1707#endif
1708#ifdef CONFIG_BLK_DEV_UMC8672
1709			case -16: /* "umc8672" */
1710				probe_umc8672 = 1;
1711				goto done;
1712#endif
1713#ifdef CONFIG_BLK_DEV_DTC2278
1714			case -15: /* "dtc2278" */
1715				probe_dtc2278 = 1;
1716				goto done;
1717#endif
1718#ifdef CONFIG_BLK_DEV_CMD640
1719			case -14: /* "cmd640_vlb" */
1720			{
1721				extern int cmd640_vlb; /* flag for cmd640.c */
1722				cmd640_vlb = 1;
1723				goto done;
1724			}
1725#endif
1726#ifdef CONFIG_BLK_DEV_HT6560B
1727			case -13: /* "ht6560b" */
1728				probe_ht6560b = 1;
1729				goto done;
1730#endif
1731#ifdef CONFIG_BLK_DEV_QD65XX
1732			case -12: /* "qd65xx" */
1733				probe_qd65xx = 1;
1734				goto done;
1735#endif
1736#ifdef CONFIG_BLK_DEV_4DRIVES
1737			case -11: /* "four" drives on one set of ports */
1738			{
1739				ide_hwif_t *mate = &ide_hwifs[hw^1];
1740				mate->drives[0].select.all ^= 0x20;
1741				mate->drives[1].select.all ^= 0x20;
1742				hwif->chipset = mate->chipset = ide_4drives;
1743				mate->irq = hwif->irq;
1744				memcpy(mate->io_ports, hwif->io_ports, sizeof(hwif->io_ports));
1745				goto do_serialize;
1746			}
1747#endif /* CONFIG_BLK_DEV_4DRIVES */
1748			case -10: /* minus10 */
1749			case -9: /* minus9 */
1750			case -8: /* minus8 */
1751				goto bad_option;
1752			case -7: /* ata66 */
1753#ifdef CONFIG_BLK_DEV_IDEPCI
1754				hwif->udma_four = 1;
1755				goto obsolete_option;
1756#else
1757				goto bad_hwif;
1758#endif
1759			case -6: /* dma */
1760				hwif->autodma = 1;
1761				goto obsolete_option;
1762			case -5: /* "reset" */
1763				hwif->reset = 1;
1764				goto obsolete_option;
1765			case -4: /* "noautotune" */
1766				hwif->drives[0].autotune = IDE_TUNE_NOAUTO;
1767				hwif->drives[1].autotune = IDE_TUNE_NOAUTO;
1768				goto obsolete_option;
1769			case -3: /* "autotune" */
1770				hwif->drives[0].autotune = IDE_TUNE_AUTO;
1771				hwif->drives[1].autotune = IDE_TUNE_AUTO;
1772				goto obsolete_option;
1773			case -2: /* "serialize" */
1774			do_serialize:
1775				hwif->mate = &ide_hwifs[hw^1];
1776				hwif->mate->mate = hwif;
1777				hwif->serialized = hwif->mate->serialized = 1;
1778				goto obsolete_option;
1779
1780			case -1: /* "noprobe" */
1781				hwif->noprobe = 1;
1782				goto done;
1783
1784			case 1:	/* base */
1785				vals[1] = vals[0] + 0x206; /* default ctl */
1786			case 2: /* base,ctl */
1787				vals[2] = 0;	/* default irq = probe for it */
1788			case 3: /* base,ctl,irq */
1789				hwif->hw.irq = vals[2];
1790				ide_init_hwif_ports(&hwif->hw, (unsigned long) vals[0], (unsigned long) vals[1], &hwif->irq);
1791				memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports));
1792				hwif->irq      = vals[2];
1793				hwif->noprobe  = 0;
1794				hwif->chipset  = ide_forced;
1795				goto obsolete_option;
1796
1797			case 0: goto bad_option;
1798			default:
1799				printk(" -- SUPPORT NOT CONFIGURED IN THIS KERNEL\n");
1800				return 1;
1801		}
1802	}
1803bad_option:
1804	printk(" -- BAD OPTION\n");
1805	return 1;
1806obsolete_option:
1807	printk(" -- OBSOLETE OPTION, WILL BE REMOVED SOON!\n");
1808	return 1;
1809bad_hwif:
1810	printk("-- NOT SUPPORTED ON ide%d", hw);
1811done:
1812	printk("\n");
1813	return 1;
1814}
1815
1816extern void __init pnpide_init(void);
1817extern void __exit pnpide_exit(void);
1818extern void __init h8300_ide_init(void);
1819
1820/*
1821 * probe_for_hwifs() finds/initializes "known" IDE interfaces
1822 */
1823static void __init probe_for_hwifs (void)
1824{
1825#ifdef CONFIG_BLK_DEV_IDEPCI
1826	ide_scan_pcibus(ide_scan_direction);
1827#endif /* CONFIG_BLK_DEV_IDEPCI */
1828
1829#ifdef CONFIG_ETRAX_IDE
1830	{
1831		extern void init_e100_ide(void);
1832		init_e100_ide();
1833	}
1834#endif /* CONFIG_ETRAX_IDE */
1835#ifdef CONFIG_BLK_DEV_CMD640
1836	{
1837		extern void ide_probe_for_cmd640x(void);
1838		ide_probe_for_cmd640x();
1839	}
1840#endif /* CONFIG_BLK_DEV_CMD640 */
1841#ifdef CONFIG_BLK_DEV_IDE_PMAC
1842	{
1843		extern int pmac_ide_probe(void);
1844		(void)pmac_ide_probe();
1845	}
1846#endif /* CONFIG_BLK_DEV_IDE_PMAC */
1847#ifdef CONFIG_BLK_DEV_GAYLE
1848	{
1849		extern void gayle_init(void);
1850		gayle_init();
1851	}
1852#endif /* CONFIG_BLK_DEV_GAYLE */
1853#ifdef CONFIG_BLK_DEV_FALCON_IDE
1854	{
1855		extern void falconide_init(void);
1856		falconide_init();
1857	}
1858#endif /* CONFIG_BLK_DEV_FALCON_IDE */
1859#ifdef CONFIG_BLK_DEV_MAC_IDE
1860	{
1861		extern void macide_init(void);
1862		macide_init();
1863	}
1864#endif /* CONFIG_BLK_DEV_MAC_IDE */
1865#ifdef CONFIG_BLK_DEV_Q40IDE
1866	{
1867		extern void q40ide_init(void);
1868		q40ide_init();
1869	}
1870#endif /* CONFIG_BLK_DEV_Q40IDE */
1871#ifdef CONFIG_BLK_DEV_BUDDHA
1872	{
1873		extern void buddha_init(void);
1874		buddha_init();
1875	}
1876#endif /* CONFIG_BLK_DEV_BUDDHA */
1877#ifdef CONFIG_BLK_DEV_IDEPNP
1878	pnpide_init();
1879#endif
1880#ifdef CONFIG_H8300
1881	h8300_ide_init();
1882#endif
1883}
1884
1885void ide_register_subdriver(ide_drive_t *drive, ide_driver_t *driver)
1886{
1887#ifdef CONFIG_PROC_FS
1888	ide_add_proc_entries(drive->proc, driver->proc, drive);
1889#endif
1890}
1891
1892EXPORT_SYMBOL(ide_register_subdriver);
1893
1894/**
1895 *	ide_unregister_subdriver	-	disconnect drive from driver
1896 *	@drive: drive to unplug
1897 *	@driver: driver
1898 *
1899 *	Disconnect a drive from the driver it was attached to and then
1900 *	clean up the various proc files and other objects attached to it.
1901 *
1902 *	Takes ide_setting_sem and ide_lock.
1903 *	Caller must hold none of the locks.
1904 */
1905
1906void ide_unregister_subdriver(ide_drive_t *drive, ide_driver_t *driver)
1907{
1908	unsigned long flags;
1909
1910#ifdef CONFIG_PROC_FS
1911	ide_remove_proc_entries(drive->proc, driver->proc);
1912#endif
1913	down(&ide_setting_sem);
1914	spin_lock_irqsave(&ide_lock, flags);
1915	/*
1916	 * ide_setting_sem protects the settings list
1917	 * ide_lock protects the use of settings
1918	 *
1919	 * so we need to hold both, ide_settings_sem because we want to
1920	 * modify the settings list, and ide_lock because we cannot take
1921	 * a setting out that is being used.
1922	 *
1923	 * OTOH both ide_{read,write}_setting are only ever used under
1924	 * ide_setting_sem.
1925	 */
1926	auto_remove_settings(drive);
1927	spin_unlock_irqrestore(&ide_lock, flags);
1928	up(&ide_setting_sem);
1929}
1930
1931EXPORT_SYMBOL(ide_unregister_subdriver);
1932
1933/*
1934 * Probe module
1935 */
1936
1937EXPORT_SYMBOL(ide_lock);
1938
1939static int ide_bus_match(struct device *dev, struct device_driver *drv)
1940{
1941	return 1;
1942}
1943
1944static char *media_string(ide_drive_t *drive)
1945{
1946	switch (drive->media) {
1947	case ide_disk:
1948		return "disk";
1949	case ide_cdrom:
1950		return "cdrom";
1951	case ide_tape:
1952		return "tape";
1953	case ide_floppy:
1954		return "floppy";
1955	default:
1956		return "UNKNOWN";
1957	}
1958}
1959
1960static ssize_t media_show(struct device *dev, struct device_attribute *attr, char *buf)
1961{
1962	ide_drive_t *drive = to_ide_device(dev);
1963	return sprintf(buf, "%s\n", media_string(drive));
1964}
1965
1966static ssize_t drivename_show(struct device *dev, struct device_attribute *attr, char *buf)
1967{
1968	ide_drive_t *drive = to_ide_device(dev);
1969	return sprintf(buf, "%s\n", drive->name);
1970}
1971
1972static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
1973{
1974	ide_drive_t *drive = to_ide_device(dev);
1975	return sprintf(buf, "ide:m-%s\n", media_string(drive));
1976}
1977
1978static struct device_attribute ide_dev_attrs[] = {
1979	__ATTR_RO(media),
1980	__ATTR_RO(drivename),
1981	__ATTR_RO(modalias),
1982	__ATTR_NULL
1983};
1984
1985static int ide_uevent(struct device *dev, char **envp, int num_envp,
1986		      char *buffer, int buffer_size)
1987{
1988	ide_drive_t *drive = to_ide_device(dev);
1989	int i = 0;
1990	int length = 0;
1991
1992	add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
1993		       "MEDIA=%s", media_string(drive));
1994	add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
1995		       "DRIVENAME=%s", drive->name);
1996	add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
1997		       "MODALIAS=ide:m-%s", media_string(drive));
1998	envp[i] = NULL;
1999	return 0;
2000}
2001
2002static int generic_ide_probe(struct device *dev)
2003{
2004	ide_drive_t *drive = to_ide_device(dev);
2005	ide_driver_t *drv = to_ide_driver(dev->driver);
2006
2007	return drv->probe ? drv->probe(drive) : -ENODEV;
2008}
2009
2010static int generic_ide_remove(struct device *dev)
2011{
2012	ide_drive_t *drive = to_ide_device(dev);
2013	ide_driver_t *drv = to_ide_driver(dev->driver);
2014
2015	if (drv->remove)
2016		drv->remove(drive);
2017
2018	return 0;
2019}
2020
2021static void generic_ide_shutdown(struct device *dev)
2022{
2023	ide_drive_t *drive = to_ide_device(dev);
2024	ide_driver_t *drv = to_ide_driver(dev->driver);
2025
2026	if (dev->driver && drv->shutdown)
2027		drv->shutdown(drive);
2028}
2029
2030struct bus_type ide_bus_type = {
2031	.name		= "ide",
2032	.match		= ide_bus_match,
2033	.uevent		= ide_uevent,
2034	.probe		= generic_ide_probe,
2035	.remove		= generic_ide_remove,
2036	.shutdown	= generic_ide_shutdown,
2037	.dev_attrs	= ide_dev_attrs,
2038	.suspend	= generic_ide_suspend,
2039	.resume		= generic_ide_resume,
2040};
2041
2042EXPORT_SYMBOL_GPL(ide_bus_type);
2043
2044/*
2045 * This is gets invoked once during initialization, to set *everything* up
2046 */
2047static int __init ide_init(void)
2048{
2049	int ret;
2050
2051	printk(KERN_INFO "Uniform Multi-Platform E-IDE driver " REVISION "\n");
2052	system_bus_speed = ide_system_bus_speed();
2053
2054	ret = bus_register(&ide_bus_type);
2055	if (ret < 0) {
2056		printk(KERN_WARNING "IDE: bus_register error: %d\n", ret);
2057		return ret;
2058	}
2059
2060	init_ide_data();
2061
2062#ifdef CONFIG_PROC_FS
2063	proc_ide_root = proc_mkdir("ide", NULL);
2064#endif
2065
2066#ifdef CONFIG_BLK_DEV_ALI14XX
2067	if (probe_ali14xx)
2068		(void)ali14xx_init();
2069#endif
2070#ifdef CONFIG_BLK_DEV_UMC8672
2071	if (probe_umc8672)
2072		(void)umc8672_init();
2073#endif
2074#ifdef CONFIG_BLK_DEV_DTC2278
2075	if (probe_dtc2278)
2076		(void)dtc2278_init();
2077#endif
2078#ifdef CONFIG_BLK_DEV_HT6560B
2079	if (probe_ht6560b)
2080		(void)ht6560b_init();
2081#endif
2082#ifdef CONFIG_BLK_DEV_QD65XX
2083	if (probe_qd65xx)
2084		(void)qd65xx_init();
2085#endif
2086
2087	initializing = 1;
2088	/* Probe for special PCI and other "known" interface chipsets. */
2089	probe_for_hwifs();
2090	initializing = 0;
2091
2092#ifdef CONFIG_PROC_FS
2093	proc_ide_create();
2094#endif
2095	return 0;
2096}
2097
2098#ifdef MODULE
2099static char *options = NULL;
2100module_param(options, charp, 0);
2101MODULE_LICENSE("GPL");
2102
2103static void __init parse_options (char *line)
2104{
2105	char *next = line;
2106
2107	if (line == NULL || !*line)
2108		return;
2109	while ((line = next) != NULL) {
2110 		if ((next = strchr(line,' ')) != NULL)
2111			*next++ = 0;
2112		if (!ide_setup(line))
2113			printk (KERN_INFO "Unknown option '%s'\n", line);
2114	}
2115}
2116
2117int __init init_module (void)
2118{
2119	parse_options(options);
2120	return ide_init();
2121}
2122
2123void __exit cleanup_module (void)
2124{
2125	int index;
2126
2127	for (index = 0; index < MAX_HWIFS; ++index)
2128		ide_unregister(index);
2129
2130#ifdef CONFIG_BLK_DEV_IDEPNP
2131	pnpide_exit();
2132#endif
2133
2134#ifdef CONFIG_PROC_FS
2135	proc_ide_destroy();
2136#endif
2137
2138	bus_unregister(&ide_bus_type);
2139}
2140
2141#else /* !MODULE */
2142
2143__setup("", ide_setup);
2144
2145module_init(ide_init);
2146
2147#endif /* MODULE */
2148