ide.c revision 1a2f84ea3e5110872b9aa86763360609b4b04e1b
1/*
2 *  Copyright (C) 1994-1998	    Linus Torvalds & authors (see below)
3 *  Copyrifht (C) 2003-2005, 2007   Bartlomiej Zolnierkiewicz
4 */
5
6/*
7 *  Mostly written by Mark Lord  <mlord@pobox.com>
8 *                and Gadi Oxman <gadio@netvision.net.il>
9 *                and Andre Hedrick <andre@linux-ide.org>
10 *
11 *  See linux/MAINTAINERS for address of current maintainer.
12 *
13 * This is the multiple IDE interface driver, as evolved from hd.c.
14 * It supports up to MAX_HWIFS IDE interfaces, on one or more IRQs
15 *   (usually 14 & 15).
16 * There can be up to two drives per interface, as per the ATA-2 spec.
17 *
18 * ...
19 *
20 *  From hd.c:
21 *  |
22 *  | It traverses the request-list, using interrupts to jump between functions.
23 *  | As nearly all functions can be called within interrupts, we may not sleep.
24 *  | Special care is recommended.  Have Fun!
25 *  |
26 *  | modified by Drew Eckhardt to check nr of hd's from the CMOS.
27 *  |
28 *  | Thanks to Branko Lankester, lankeste@fwi.uva.nl, who found a bug
29 *  | in the early extended-partition checks and added DM partitions.
30 *  |
31 *  | Early work on error handling by Mika Liljeberg (liljeber@cs.Helsinki.FI).
32 *  |
33 *  | IRQ-unmask, drive-id, multiple-mode, support for ">16 heads",
34 *  | and general streamlining by Mark Lord (mlord@pobox.com).
35 *
36 *  October, 1994 -- Complete line-by-line overhaul for linux 1.1.x, by:
37 *
38 *	Mark Lord	(mlord@pobox.com)		(IDE Perf.Pkg)
39 *	Delman Lee	(delman@ieee.org)		("Mr. atdisk2")
40 *	Scott Snyder	(snyder@fnald0.fnal.gov)	(ATAPI IDE cd-rom)
41 *
42 *  This was a rewrite of just about everything from hd.c, though some original
43 *  code is still sprinkled about.  Think of it as a major evolution, with
44 *  inspiration from lots of linux users, esp.  hamish@zot.apana.org.au
45 */
46
47#define _IDE_C			/* Tell ide.h it's really us */
48
49#include <linux/module.h>
50#include <linux/types.h>
51#include <linux/string.h>
52#include <linux/kernel.h>
53#include <linux/timer.h>
54#include <linux/mm.h>
55#include <linux/interrupt.h>
56#include <linux/major.h>
57#include <linux/errno.h>
58#include <linux/genhd.h>
59#include <linux/blkpg.h>
60#include <linux/slab.h>
61#include <linux/init.h>
62#include <linux/pci.h>
63#include <linux/delay.h>
64#include <linux/ide.h>
65#include <linux/completion.h>
66#include <linux/reboot.h>
67#include <linux/cdrom.h>
68#include <linux/seq_file.h>
69#include <linux/device.h>
70#include <linux/bitops.h>
71
72#include <asm/byteorder.h>
73#include <asm/irq.h>
74#include <asm/uaccess.h>
75#include <asm/io.h>
76
77
78/* default maximum number of failures */
79#define IDE_DEFAULT_MAX_FAILURES 	1
80
81struct class *ide_port_class;
82
83static const u8 ide_hwif_to_major[] = { IDE0_MAJOR, IDE1_MAJOR,
84					IDE2_MAJOR, IDE3_MAJOR,
85					IDE4_MAJOR, IDE5_MAJOR,
86					IDE6_MAJOR, IDE7_MAJOR,
87					IDE8_MAJOR, IDE9_MAJOR };
88
89static int idebus_parameter;	/* holds the "idebus=" parameter */
90static int system_bus_speed;	/* holds what we think is VESA/PCI bus speed */
91
92DEFINE_MUTEX(ide_cfg_mtx);
93 __cacheline_aligned_in_smp DEFINE_SPINLOCK(ide_lock);
94
95int noautodma = 0;
96
97#ifdef CONFIG_BLK_DEV_IDEACPI
98int ide_noacpi = 0;
99int ide_noacpitfs = 1;
100int ide_noacpionboot = 1;
101#endif
102
103ide_hwif_t ide_hwifs[MAX_HWIFS];	/* master data repository */
104
105static void ide_port_init_devices_data(ide_hwif_t *);
106
107/*
108 * Do not even *think* about calling this!
109 */
110void ide_init_port_data(ide_hwif_t *hwif, unsigned int index)
111{
112	/* bulk initialize hwif & drive info with zeros */
113	memset(hwif, 0, sizeof(ide_hwif_t));
114
115	/* fill in any non-zero initial values */
116	hwif->index	= index;
117	hwif->major	= ide_hwif_to_major[index];
118
119	hwif->name[0]	= 'i';
120	hwif->name[1]	= 'd';
121	hwif->name[2]	= 'e';
122	hwif->name[3]	= '0' + index;
123
124	hwif->bus_state	= BUSSTATE_ON;
125
126	init_completion(&hwif->gendev_rel_comp);
127
128	default_hwif_iops(hwif);
129	default_hwif_transport(hwif);
130
131	ide_port_init_devices_data(hwif);
132}
133EXPORT_SYMBOL_GPL(ide_init_port_data);
134
135static void ide_port_init_devices_data(ide_hwif_t *hwif)
136{
137	int unit;
138
139	for (unit = 0; unit < MAX_DRIVES; ++unit) {
140		ide_drive_t *drive = &hwif->drives[unit];
141		u8 j = (hwif->index * MAX_DRIVES) + unit;
142
143		memset(drive, 0, sizeof(*drive));
144
145		drive->media			= ide_disk;
146		drive->select.all		= (unit<<4)|0xa0;
147		drive->hwif			= hwif;
148		drive->ctl			= 0x08;
149		drive->ready_stat		= READY_STAT;
150		drive->bad_wstat		= BAD_W_STAT;
151		drive->special.b.recalibrate	= 1;
152		drive->special.b.set_geometry	= 1;
153		drive->name[0]			= 'h';
154		drive->name[1]			= 'd';
155		drive->name[2]			= 'a' + j;
156		drive->max_failures		= IDE_DEFAULT_MAX_FAILURES;
157
158		INIT_LIST_HEAD(&drive->list);
159		init_completion(&drive->gendev_rel_comp);
160	}
161}
162
163/*
164 * init_ide_data() sets reasonable default values into all fields
165 * of all instances of the hwifs and drives, but only on the first call.
166 * Subsequent calls have no effect (they don't wipe out anything).
167 *
168 * This routine is normally called at driver initialization time,
169 * but may also be called MUCH earlier during kernel "command-line"
170 * parameter processing.  As such, we cannot depend on any other parts
171 * of the kernel (such as memory allocation) to be functioning yet.
172 *
173 * This is too bad, as otherwise we could dynamically allocate the
174 * ide_drive_t structs as needed, rather than always consuming memory
175 * for the max possible number (MAX_HWIFS * MAX_DRIVES) of them.
176 *
177 * FIXME: We should stuff the setup data into __init and copy the
178 * relevant hwifs/allocate them properly during boot.
179 */
180#define MAGIC_COOKIE 0x12345678
181static void __init init_ide_data (void)
182{
183	unsigned int index;
184	static unsigned long magic_cookie = MAGIC_COOKIE;
185
186	if (magic_cookie != MAGIC_COOKIE)
187		return;		/* already initialized */
188	magic_cookie = 0;
189
190	/* Initialise all interface structures */
191	for (index = 0; index < MAX_HWIFS; ++index) {
192		ide_hwif_t *hwif = &ide_hwifs[index];
193
194		ide_init_port_data(hwif, index);
195	}
196}
197
198/**
199 *	ide_system_bus_speed	-	guess bus speed
200 *
201 *	ide_system_bus_speed() returns what we think is the system VESA/PCI
202 *	bus speed (in MHz). This is used for calculating interface PIO timings.
203 *	The default is 40 for known PCI systems, 50 otherwise.
204 *	The "idebus=xx" parameter can be used to override this value.
205 *	The actual value to be used is computed/displayed the first time
206 *	through. Drivers should only use this as a last resort.
207 *
208 *	Returns a guessed speed in MHz.
209 */
210
211static int ide_system_bus_speed(void)
212{
213#ifdef CONFIG_PCI
214	static struct pci_device_id pci_default[] = {
215		{ PCI_DEVICE(PCI_ANY_ID, PCI_ANY_ID) },
216		{ }
217	};
218#else
219#define pci_default 0
220#endif /* CONFIG_PCI */
221
222	/* user supplied value */
223	if (idebus_parameter)
224		return idebus_parameter;
225
226	/* safe default value for PCI or VESA and PCI*/
227	return pci_dev_present(pci_default) ? 33 : 50;
228}
229
230static struct resource* hwif_request_region(ide_hwif_t *hwif,
231					    unsigned long addr, int num)
232{
233	struct resource *res = request_region(addr, num, hwif->name);
234
235	if (!res)
236		printk(KERN_ERR "%s: I/O resource 0x%lX-0x%lX not free.\n",
237				hwif->name, addr, addr+num-1);
238	return res;
239}
240
241/**
242 *	ide_hwif_request_regions - request resources for IDE
243 *	@hwif: interface to use
244 *
245 *	Requests all the needed resources for an interface.
246 *	Right now core IDE code does this work which is deeply wrong.
247 *	MMIO leaves it to the controller driver,
248 *	PIO will migrate this way over time.
249 */
250
251int ide_hwif_request_regions(ide_hwif_t *hwif)
252{
253	unsigned long addr;
254	unsigned int i;
255
256	if (hwif->mmio)
257		return 0;
258	addr = hwif->io_ports[IDE_CONTROL_OFFSET];
259	if (addr && !hwif_request_region(hwif, addr, 1))
260		goto control_region_busy;
261	hwif->straight8 = 0;
262	addr = hwif->io_ports[IDE_DATA_OFFSET];
263	if ((addr | 7) == hwif->io_ports[IDE_STATUS_OFFSET]) {
264		if (!hwif_request_region(hwif, addr, 8))
265			goto data_region_busy;
266		hwif->straight8 = 1;
267		return 0;
268	}
269	for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
270		addr = hwif->io_ports[i];
271		if (!hwif_request_region(hwif, addr, 1)) {
272			while (--i)
273				release_region(addr, 1);
274			goto data_region_busy;
275		}
276	}
277	return 0;
278
279data_region_busy:
280	addr = hwif->io_ports[IDE_CONTROL_OFFSET];
281	if (addr)
282		release_region(addr, 1);
283control_region_busy:
284	/* If any errors are return, we drop the hwif interface. */
285	return -EBUSY;
286}
287
288/**
289 *	ide_hwif_release_regions - free IDE resources
290 *
291 *	Note that we only release the standard ports,
292 *	and do not even try to handle any extra ports
293 *	allocated for weird IDE interface chipsets.
294 *
295 *	Note also that we don't yet handle mmio resources here. More
296 *	importantly our caller should be doing this so we need to
297 *	restructure this as a helper function for drivers.
298 */
299
300void ide_hwif_release_regions(ide_hwif_t *hwif)
301{
302	u32 i = 0;
303
304	if (hwif->mmio)
305		return;
306	if (hwif->io_ports[IDE_CONTROL_OFFSET])
307		release_region(hwif->io_ports[IDE_CONTROL_OFFSET], 1);
308	if (hwif->straight8) {
309		release_region(hwif->io_ports[IDE_DATA_OFFSET], 8);
310		return;
311	}
312	for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++)
313		if (hwif->io_ports[i])
314			release_region(hwif->io_ports[i], 1);
315}
316
317void ide_remove_port_from_hwgroup(ide_hwif_t *hwif)
318{
319	ide_hwgroup_t *hwgroup = hwif->hwgroup;
320
321	spin_lock_irq(&ide_lock);
322	/*
323	 * Remove us from the hwgroup, and free
324	 * the hwgroup if we were the only member
325	 */
326	if (hwif->next == hwif) {
327		BUG_ON(hwgroup->hwif != hwif);
328		kfree(hwgroup);
329	} else {
330		/* There is another interface in hwgroup.
331		 * Unlink us, and set hwgroup->drive and ->hwif to
332		 * something sane.
333		 */
334		ide_hwif_t *g = hwgroup->hwif;
335
336		while (g->next != hwif)
337			g = g->next;
338		g->next = hwif->next;
339		if (hwgroup->hwif == hwif) {
340			/* Chose a random hwif for hwgroup->hwif.
341			 * It's guaranteed that there are no drives
342			 * left in the hwgroup.
343			 */
344			BUG_ON(hwgroup->drive != NULL);
345			hwgroup->hwif = g;
346		}
347		BUG_ON(hwgroup->hwif == hwif);
348	}
349	spin_unlock_irq(&ide_lock);
350}
351
352/* Called with ide_lock held. */
353static void __ide_port_unregister_devices(ide_hwif_t *hwif)
354{
355	int i;
356
357	for (i = 0; i < MAX_DRIVES; i++) {
358		ide_drive_t *drive = &hwif->drives[i];
359
360		if (drive->present) {
361			spin_unlock_irq(&ide_lock);
362			device_unregister(&drive->gendev);
363			wait_for_completion(&drive->gendev_rel_comp);
364			spin_lock_irq(&ide_lock);
365		}
366	}
367}
368
369void ide_port_unregister_devices(ide_hwif_t *hwif)
370{
371	mutex_lock(&ide_cfg_mtx);
372	spin_lock_irq(&ide_lock);
373	__ide_port_unregister_devices(hwif);
374	hwif->present = 0;
375	ide_port_init_devices_data(hwif);
376	spin_unlock_irq(&ide_lock);
377	mutex_unlock(&ide_cfg_mtx);
378}
379EXPORT_SYMBOL_GPL(ide_port_unregister_devices);
380
381/**
382 *	ide_unregister		-	free an IDE interface
383 *	@index: index of interface (will change soon to a pointer)
384 *
385 *	Perform the final unregister of an IDE interface. At the moment
386 *	we don't refcount interfaces so this will also get split up.
387 *
388 *	Locking:
389 *	The caller must not hold the IDE locks
390 *	The drive present/vanishing is not yet properly locked
391 *	Take care with the callbacks. These have been split to avoid
392 *	deadlocking the IDE layer. The shutdown callback is called
393 *	before we take the lock and free resources. It is up to the
394 *	caller to be sure there is no pending I/O here, and that
395 *	the interface will not be reopened (present/vanishing locking
396 *	isn't yet done BTW). After we commit to the final kill we
397 *	call the cleanup callback with the ide locks held.
398 *
399 *	Unregister restores the hwif structures to the default state.
400 *	This is raving bonkers.
401 */
402
403void ide_unregister(unsigned int index)
404{
405	ide_hwif_t *hwif, *g;
406	ide_hwgroup_t *hwgroup;
407	int irq_count = 0;
408
409	BUG_ON(index >= MAX_HWIFS);
410
411	BUG_ON(in_interrupt());
412	BUG_ON(irqs_disabled());
413	mutex_lock(&ide_cfg_mtx);
414	spin_lock_irq(&ide_lock);
415	hwif = &ide_hwifs[index];
416	if (!hwif->present)
417		goto abort;
418	__ide_port_unregister_devices(hwif);
419	hwif->present = 0;
420
421	spin_unlock_irq(&ide_lock);
422
423	ide_proc_unregister_port(hwif);
424
425	hwgroup = hwif->hwgroup;
426	/*
427	 * free the irq if we were the only hwif using it
428	 */
429	g = hwgroup->hwif;
430	do {
431		if (g->irq == hwif->irq)
432			++irq_count;
433		g = g->next;
434	} while (g != hwgroup->hwif);
435	if (irq_count == 1)
436		free_irq(hwif->irq, hwgroup);
437
438	ide_remove_port_from_hwgroup(hwif);
439
440	device_unregister(hwif->portdev);
441	device_unregister(&hwif->gendev);
442	wait_for_completion(&hwif->gendev_rel_comp);
443
444	/*
445	 * Remove us from the kernel's knowledge
446	 */
447	blk_unregister_region(MKDEV(hwif->major, 0), MAX_DRIVES<<PARTN_BITS);
448	kfree(hwif->sg_table);
449	unregister_blkdev(hwif->major, hwif->name);
450	spin_lock_irq(&ide_lock);
451
452	if (hwif->dma_base)
453		(void)ide_release_dma(hwif);
454
455	ide_hwif_release_regions(hwif);
456
457	/* restore hwif data to pristine status */
458	ide_init_port_data(hwif, index);
459
460abort:
461	spin_unlock_irq(&ide_lock);
462	mutex_unlock(&ide_cfg_mtx);
463}
464
465EXPORT_SYMBOL(ide_unregister);
466
467void ide_init_port_hw(ide_hwif_t *hwif, hw_regs_t *hw)
468{
469	memcpy(hwif->io_ports, hw->io_ports, sizeof(hwif->io_ports));
470	hwif->irq = hw->irq;
471	hwif->noprobe = 0;
472	hwif->chipset = hw->chipset;
473	hwif->gendev.parent = hw->dev;
474	hwif->ack_intr = hw->ack_intr;
475}
476EXPORT_SYMBOL_GPL(ide_init_port_hw);
477
478/*
479 *	Locks for IDE setting functionality
480 */
481
482DEFINE_MUTEX(ide_setting_mtx);
483
484EXPORT_SYMBOL_GPL(ide_setting_mtx);
485
486/**
487 *	ide_spin_wait_hwgroup	-	wait for group
488 *	@drive: drive in the group
489 *
490 *	Wait for an IDE device group to go non busy and then return
491 *	holding the ide_lock which guards the hwgroup->busy status
492 *	and right to use it.
493 */
494
495int ide_spin_wait_hwgroup (ide_drive_t *drive)
496{
497	ide_hwgroup_t *hwgroup = HWGROUP(drive);
498	unsigned long timeout = jiffies + (3 * HZ);
499
500	spin_lock_irq(&ide_lock);
501
502	while (hwgroup->busy) {
503		unsigned long lflags;
504		spin_unlock_irq(&ide_lock);
505		local_irq_set(lflags);
506		if (time_after(jiffies, timeout)) {
507			local_irq_restore(lflags);
508			printk(KERN_ERR "%s: channel busy\n", drive->name);
509			return -EBUSY;
510		}
511		local_irq_restore(lflags);
512		spin_lock_irq(&ide_lock);
513	}
514	return 0;
515}
516
517EXPORT_SYMBOL(ide_spin_wait_hwgroup);
518
519int set_io_32bit(ide_drive_t *drive, int arg)
520{
521	if (drive->no_io_32bit)
522		return -EPERM;
523
524	if (arg < 0 || arg > 1 + (SUPPORT_VLB_SYNC << 1))
525		return -EINVAL;
526
527	if (ide_spin_wait_hwgroup(drive))
528		return -EBUSY;
529
530	drive->io_32bit = arg;
531
532	spin_unlock_irq(&ide_lock);
533
534	return 0;
535}
536
537static int set_ksettings(ide_drive_t *drive, int arg)
538{
539	if (arg < 0 || arg > 1)
540		return -EINVAL;
541
542	if (ide_spin_wait_hwgroup(drive))
543		return -EBUSY;
544	drive->keep_settings = arg;
545	spin_unlock_irq(&ide_lock);
546
547	return 0;
548}
549
550int set_using_dma(ide_drive_t *drive, int arg)
551{
552#ifdef CONFIG_BLK_DEV_IDEDMA
553	ide_hwif_t *hwif = drive->hwif;
554	int err = -EPERM;
555
556	if (arg < 0 || arg > 1)
557		return -EINVAL;
558
559	if (!drive->id || !(drive->id->capability & 1))
560		goto out;
561
562	if (hwif->dma_host_set == NULL)
563		goto out;
564
565	err = -EBUSY;
566	if (ide_spin_wait_hwgroup(drive))
567		goto out;
568	/*
569	 * set ->busy flag, unlock and let it ride
570	 */
571	hwif->hwgroup->busy = 1;
572	spin_unlock_irq(&ide_lock);
573
574	err = 0;
575
576	if (arg) {
577		if (ide_set_dma(drive))
578			err = -EIO;
579	} else
580		ide_dma_off(drive);
581
582	/*
583	 * lock, clear ->busy flag and unlock before leaving
584	 */
585	spin_lock_irq(&ide_lock);
586	hwif->hwgroup->busy = 0;
587	spin_unlock_irq(&ide_lock);
588out:
589	return err;
590#else
591	if (arg < 0 || arg > 1)
592		return -EINVAL;
593
594	return -EPERM;
595#endif
596}
597
598int set_pio_mode(ide_drive_t *drive, int arg)
599{
600	struct request rq;
601
602	if (arg < 0 || arg > 255)
603		return -EINVAL;
604
605	if (drive->hwif->set_pio_mode == NULL)
606		return -ENOSYS;
607
608	if (drive->special.b.set_tune)
609		return -EBUSY;
610
611	ide_init_drive_cmd(&rq);
612	rq.cmd_type = REQ_TYPE_ATA_TASKFILE;
613
614	drive->tune_req = (u8) arg;
615	drive->special.b.set_tune = 1;
616	(void) ide_do_drive_cmd(drive, &rq, ide_wait);
617	return 0;
618}
619
620static int set_unmaskirq(ide_drive_t *drive, int arg)
621{
622	if (drive->no_unmask)
623		return -EPERM;
624
625	if (arg < 0 || arg > 1)
626		return -EINVAL;
627
628	if (ide_spin_wait_hwgroup(drive))
629		return -EBUSY;
630	drive->unmask = arg;
631	spin_unlock_irq(&ide_lock);
632
633	return 0;
634}
635
636/**
637 *	system_bus_clock	-	clock guess
638 *
639 *	External version of the bus clock guess used by very old IDE drivers
640 *	for things like VLB timings. Should not be used.
641 */
642
643int system_bus_clock (void)
644{
645	return system_bus_speed;
646}
647
648EXPORT_SYMBOL(system_bus_clock);
649
650static int generic_ide_suspend(struct device *dev, pm_message_t mesg)
651{
652	ide_drive_t *drive = dev->driver_data;
653	ide_hwif_t *hwif = HWIF(drive);
654	struct request rq;
655	struct request_pm_state rqpm;
656	ide_task_t args;
657	int ret;
658
659	/* Call ACPI _GTM only once */
660	if (!(drive->dn % 2))
661		ide_acpi_get_timing(hwif);
662
663	memset(&rq, 0, sizeof(rq));
664	memset(&rqpm, 0, sizeof(rqpm));
665	memset(&args, 0, sizeof(args));
666	rq.cmd_type = REQ_TYPE_PM_SUSPEND;
667	rq.special = &args;
668	rq.data = &rqpm;
669	rqpm.pm_step = ide_pm_state_start_suspend;
670	if (mesg.event == PM_EVENT_PRETHAW)
671		mesg.event = PM_EVENT_FREEZE;
672	rqpm.pm_state = mesg.event;
673
674	ret = ide_do_drive_cmd(drive, &rq, ide_wait);
675	/* only call ACPI _PS3 after both drivers are suspended */
676	if (!ret && (((drive->dn % 2) && hwif->drives[0].present
677		 && hwif->drives[1].present)
678		 || !hwif->drives[0].present
679		 || !hwif->drives[1].present))
680		ide_acpi_set_state(hwif, 0);
681	return ret;
682}
683
684static int generic_ide_resume(struct device *dev)
685{
686	ide_drive_t *drive = dev->driver_data;
687	ide_hwif_t *hwif = HWIF(drive);
688	struct request rq;
689	struct request_pm_state rqpm;
690	ide_task_t args;
691	int err;
692
693	/* Call ACPI _STM only once */
694	if (!(drive->dn % 2)) {
695		ide_acpi_set_state(hwif, 1);
696		ide_acpi_push_timing(hwif);
697	}
698
699	ide_acpi_exec_tfs(drive);
700
701	memset(&rq, 0, sizeof(rq));
702	memset(&rqpm, 0, sizeof(rqpm));
703	memset(&args, 0, sizeof(args));
704	rq.cmd_type = REQ_TYPE_PM_RESUME;
705	rq.special = &args;
706	rq.data = &rqpm;
707	rqpm.pm_step = ide_pm_state_start_resume;
708	rqpm.pm_state = PM_EVENT_ON;
709
710	err = ide_do_drive_cmd(drive, &rq, ide_head_wait);
711
712	if (err == 0 && dev->driver) {
713		ide_driver_t *drv = to_ide_driver(dev->driver);
714
715		if (drv->resume)
716			drv->resume(drive);
717	}
718
719	return err;
720}
721
722int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device *bdev,
723			unsigned int cmd, unsigned long arg)
724{
725	unsigned long flags;
726	ide_driver_t *drv;
727	void __user *p = (void __user *)arg;
728	int err = 0, (*setfunc)(ide_drive_t *, int);
729	u8 *val;
730
731	switch (cmd) {
732	case HDIO_GET_32BIT:	    val = &drive->io_32bit;	 goto read_val;
733	case HDIO_GET_KEEPSETTINGS: val = &drive->keep_settings; goto read_val;
734	case HDIO_GET_UNMASKINTR:   val = &drive->unmask;	 goto read_val;
735	case HDIO_GET_DMA:	    val = &drive->using_dma;	 goto read_val;
736	case HDIO_SET_32BIT:	    setfunc = set_io_32bit;	 goto set_val;
737	case HDIO_SET_KEEPSETTINGS: setfunc = set_ksettings;	 goto set_val;
738	case HDIO_SET_PIO_MODE:	    setfunc = set_pio_mode;	 goto set_val;
739	case HDIO_SET_UNMASKINTR:   setfunc = set_unmaskirq;	 goto set_val;
740	case HDIO_SET_DMA:	    setfunc = set_using_dma;	 goto set_val;
741	}
742
743	switch (cmd) {
744		case HDIO_OBSOLETE_IDENTITY:
745		case HDIO_GET_IDENTITY:
746			if (bdev != bdev->bd_contains)
747				return -EINVAL;
748			if (drive->id_read == 0)
749				return -ENOMSG;
750			if (copy_to_user(p, drive->id, (cmd == HDIO_GET_IDENTITY) ? sizeof(*drive->id) : 142))
751				return -EFAULT;
752			return 0;
753
754		case HDIO_GET_NICE:
755			return put_user(drive->dsc_overlap	<<	IDE_NICE_DSC_OVERLAP	|
756					drive->atapi_overlap	<<	IDE_NICE_ATAPI_OVERLAP	|
757					drive->nice1 << IDE_NICE_1,
758					(long __user *) arg);
759#ifdef CONFIG_IDE_TASK_IOCTL
760		case HDIO_DRIVE_TASKFILE:
761		        if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
762				return -EACCES;
763			switch(drive->media) {
764				case ide_disk:
765					return ide_taskfile_ioctl(drive, cmd, arg);
766				default:
767					return -ENOMSG;
768			}
769#endif /* CONFIG_IDE_TASK_IOCTL */
770
771		case HDIO_DRIVE_CMD:
772			if (!capable(CAP_SYS_RAWIO))
773				return -EACCES;
774			return ide_cmd_ioctl(drive, cmd, arg);
775
776		case HDIO_DRIVE_TASK:
777			if (!capable(CAP_SYS_RAWIO))
778				return -EACCES;
779			return ide_task_ioctl(drive, cmd, arg);
780		case HDIO_SET_NICE:
781			if (!capable(CAP_SYS_ADMIN)) return -EACCES;
782			if (arg != (arg & ((1 << IDE_NICE_DSC_OVERLAP) | (1 << IDE_NICE_1))))
783				return -EPERM;
784			drive->dsc_overlap = (arg >> IDE_NICE_DSC_OVERLAP) & 1;
785			drv = *(ide_driver_t **)bdev->bd_disk->private_data;
786			if (drive->dsc_overlap && !drv->supports_dsc_overlap) {
787				drive->dsc_overlap = 0;
788				return -EPERM;
789			}
790			drive->nice1 = (arg >> IDE_NICE_1) & 1;
791			return 0;
792		case HDIO_DRIVE_RESET:
793			if (!capable(CAP_SYS_ADMIN))
794				return -EACCES;
795
796			/*
797			 *	Abort the current command on the
798			 *	group if there is one, taking
799			 *	care not to allow anything else
800			 *	to be queued and to die on the
801			 *	spot if we miss one somehow
802			 */
803
804			spin_lock_irqsave(&ide_lock, flags);
805
806			if (HWGROUP(drive)->resetting) {
807				spin_unlock_irqrestore(&ide_lock, flags);
808				return -EBUSY;
809			}
810
811			ide_abort(drive, "drive reset");
812
813			BUG_ON(HWGROUP(drive)->handler);
814
815			/* Ensure nothing gets queued after we
816			   drop the lock. Reset will clear the busy */
817
818			HWGROUP(drive)->busy = 1;
819			spin_unlock_irqrestore(&ide_lock, flags);
820			(void) ide_do_reset(drive);
821
822			return 0;
823		case HDIO_GET_BUSSTATE:
824			if (!capable(CAP_SYS_ADMIN))
825				return -EACCES;
826			if (put_user(HWIF(drive)->bus_state, (long __user *)arg))
827				return -EFAULT;
828			return 0;
829
830		case HDIO_SET_BUSSTATE:
831			if (!capable(CAP_SYS_ADMIN))
832				return -EACCES;
833			return -EOPNOTSUPP;
834		default:
835			return -EINVAL;
836	}
837
838read_val:
839	mutex_lock(&ide_setting_mtx);
840	spin_lock_irqsave(&ide_lock, flags);
841	err = *val;
842	spin_unlock_irqrestore(&ide_lock, flags);
843	mutex_unlock(&ide_setting_mtx);
844	return err >= 0 ? put_user(err, (long __user *)arg) : err;
845
846set_val:
847	if (bdev != bdev->bd_contains)
848		err = -EINVAL;
849	else {
850		if (!capable(CAP_SYS_ADMIN))
851			err = -EACCES;
852		else {
853			mutex_lock(&ide_setting_mtx);
854			err = setfunc(drive, arg);
855			mutex_unlock(&ide_setting_mtx);
856		}
857	}
858	return err;
859}
860
861EXPORT_SYMBOL(generic_ide_ioctl);
862
863/*
864 * stridx() returns the offset of c within s,
865 * or -1 if c is '\0' or not found within s.
866 */
867static int __init stridx (const char *s, char c)
868{
869	char *i = strchr(s, c);
870	return (i && c) ? i - s : -1;
871}
872
873/*
874 * match_parm() does parsing for ide_setup():
875 *
876 * 1. the first char of s must be '='.
877 * 2. if the remainder matches one of the supplied keywords,
878 *     the index (1 based) of the keyword is negated and returned.
879 * 3. if the remainder is a series of no more than max_vals numbers
880 *     separated by commas, the numbers are saved in vals[] and a
881 *     count of how many were saved is returned.  Base10 is assumed,
882 *     and base16 is allowed when prefixed with "0x".
883 * 4. otherwise, zero is returned.
884 */
885static int __init match_parm (char *s, const char *keywords[], int vals[], int max_vals)
886{
887	static const char *decimal = "0123456789";
888	static const char *hex = "0123456789abcdef";
889	int i, n;
890
891	if (*s++ == '=') {
892		/*
893		 * Try matching against the supplied keywords,
894		 * and return -(index+1) if we match one
895		 */
896		if (keywords != NULL) {
897			for (i = 0; *keywords != NULL; ++i) {
898				if (!strcmp(s, *keywords++))
899					return -(i+1);
900			}
901		}
902		/*
903		 * Look for a series of no more than "max_vals"
904		 * numeric values separated by commas, in base10,
905		 * or base16 when prefixed with "0x".
906		 * Return a count of how many were found.
907		 */
908		for (n = 0; (i = stridx(decimal, *s)) >= 0;) {
909			vals[n] = i;
910			while ((i = stridx(decimal, *++s)) >= 0)
911				vals[n] = (vals[n] * 10) + i;
912			if (*s == 'x' && !vals[n]) {
913				while ((i = stridx(hex, *++s)) >= 0)
914					vals[n] = (vals[n] * 0x10) + i;
915			}
916			if (++n == max_vals)
917				break;
918			if (*s == ',' || *s == ';')
919				++s;
920		}
921		if (!*s)
922			return n;
923	}
924	return 0;	/* zero = nothing matched */
925}
926
927extern int probe_ali14xx;
928extern int probe_umc8672;
929extern int probe_dtc2278;
930extern int probe_ht6560b;
931extern int probe_qd65xx;
932extern int cmd640_vlb;
933extern int probe_4drives;
934
935static int __initdata is_chipset_set;
936
937/*
938 * ide_setup() gets called VERY EARLY during initialization,
939 * to handle kernel "command line" strings beginning with "hdx=" or "ide".
940 *
941 * Remember to update Documentation/ide/ide.txt if you change something here.
942 */
943static int __init ide_setup(char *s)
944{
945	int i, vals[3];
946	ide_hwif_t *hwif;
947	ide_drive_t *drive;
948	unsigned int hw, unit;
949	const char max_drive = 'a' + ((MAX_HWIFS * MAX_DRIVES) - 1);
950	const char max_hwif  = '0' + (MAX_HWIFS - 1);
951
952
953	if (strncmp(s,"hd",2) == 0 && s[2] == '=')	/* hd= is for hd.c   */
954		return 0;				/* driver and not us */
955
956	if (strncmp(s,"ide",3) && strncmp(s,"idebus",6) && strncmp(s,"hd",2))
957		return 0;
958
959	printk(KERN_INFO "ide_setup: %s", s);
960	init_ide_data ();
961
962#ifdef CONFIG_BLK_DEV_IDEDOUBLER
963	if (!strcmp(s, "ide=doubler")) {
964		extern int ide_doubler;
965
966		printk(" : Enabled support for IDE doublers\n");
967		ide_doubler = 1;
968		return 1;
969	}
970#endif /* CONFIG_BLK_DEV_IDEDOUBLER */
971
972	if (!strcmp(s, "ide=nodma")) {
973		printk(" : Prevented DMA\n");
974		noautodma = 1;
975		goto obsolete_option;
976	}
977
978#ifdef CONFIG_BLK_DEV_IDEACPI
979	if (!strcmp(s, "ide=noacpi")) {
980		//printk(" : Disable IDE ACPI support.\n");
981		ide_noacpi = 1;
982		return 1;
983	}
984	if (!strcmp(s, "ide=acpigtf")) {
985		//printk(" : Enable IDE ACPI _GTF support.\n");
986		ide_noacpitfs = 0;
987		return 1;
988	}
989	if (!strcmp(s, "ide=acpionboot")) {
990		//printk(" : Call IDE ACPI methods on boot.\n");
991		ide_noacpionboot = 0;
992		return 1;
993	}
994#endif /* CONFIG_BLK_DEV_IDEACPI */
995
996	/*
997	 * Look for drive options:  "hdx="
998	 */
999	if (s[0] == 'h' && s[1] == 'd' && s[2] >= 'a' && s[2] <= max_drive) {
1000		const char *hd_words[] = {
1001			"none", "noprobe", "nowerr", "cdrom", "nodma",
1002			"autotune", "noautotune", "-8", "-9", "-10",
1003			"noflush", "remap", "remap63", "scsi", NULL };
1004		unit = s[2] - 'a';
1005		hw   = unit / MAX_DRIVES;
1006		unit = unit % MAX_DRIVES;
1007		hwif = &ide_hwifs[hw];
1008		drive = &hwif->drives[unit];
1009		if (strncmp(s + 4, "ide-", 4) == 0) {
1010			strlcpy(drive->driver_req, s + 4, sizeof(drive->driver_req));
1011			goto obsolete_option;
1012		}
1013		switch (match_parm(&s[3], hd_words, vals, 3)) {
1014			case -1: /* "none" */
1015			case -2: /* "noprobe" */
1016				drive->noprobe = 1;
1017				goto done;
1018			case -3: /* "nowerr" */
1019				drive->bad_wstat = BAD_R_STAT;
1020				hwif->noprobe = 0;
1021				goto done;
1022			case -4: /* "cdrom" */
1023				drive->present = 1;
1024				drive->media = ide_cdrom;
1025				/* an ATAPI device ignores DRDY */
1026				drive->ready_stat = 0;
1027				hwif->noprobe = 0;
1028				goto done;
1029			case -5: /* nodma */
1030				drive->nodma = 1;
1031				goto done;
1032			case -6: /* "autotune" */
1033				drive->autotune = IDE_TUNE_AUTO;
1034				goto obsolete_option;
1035			case -7: /* "noautotune" */
1036				drive->autotune = IDE_TUNE_NOAUTO;
1037				goto obsolete_option;
1038			case -11: /* noflush */
1039				drive->noflush = 1;
1040				goto done;
1041			case -12: /* "remap" */
1042				drive->remap_0_to_1 = 1;
1043				goto obsolete_option;
1044			case -13: /* "remap63" */
1045				drive->sect0 = 63;
1046				goto obsolete_option;
1047			case -14: /* "scsi" */
1048				drive->scsi = 1;
1049				goto obsolete_option;
1050			case 3: /* cyl,head,sect */
1051				drive->media	= ide_disk;
1052				drive->ready_stat = READY_STAT;
1053				drive->cyl	= drive->bios_cyl  = vals[0];
1054				drive->head	= drive->bios_head = vals[1];
1055				drive->sect	= drive->bios_sect = vals[2];
1056				drive->present	= 1;
1057				drive->forced_geom = 1;
1058				hwif->noprobe = 0;
1059				goto done;
1060			default:
1061				goto bad_option;
1062		}
1063	}
1064
1065	if (s[0] != 'i' || s[1] != 'd' || s[2] != 'e')
1066		goto bad_option;
1067	/*
1068	 * Look for bus speed option:  "idebus="
1069	 */
1070	if (s[3] == 'b' && s[4] == 'u' && s[5] == 's') {
1071		if (match_parm(&s[6], NULL, vals, 1) != 1)
1072			goto bad_option;
1073		if (vals[0] >= 20 && vals[0] <= 66) {
1074			idebus_parameter = vals[0];
1075		} else
1076			printk(" -- BAD BUS SPEED! Expected value from 20 to 66");
1077		goto done;
1078	}
1079	/*
1080	 * Look for interface options:  "idex="
1081	 */
1082	if (s[3] >= '0' && s[3] <= max_hwif) {
1083		/*
1084		 * Be VERY CAREFUL changing this: note hardcoded indexes below
1085		 * (-8, -9, -10) are reserved to ease the hardcoding.
1086		 */
1087		static const char *ide_words[] = {
1088			"minus1", "serialize", "minus3", "minus4",
1089			"reset", "minus6", "ata66", "minus8", "minus9",
1090			"minus10", "four", "qd65xx", "ht6560b", "cmd640_vlb",
1091			"dtc2278", "umc8672", "ali14xx", NULL };
1092
1093		hw = s[3] - '0';
1094		hwif = &ide_hwifs[hw];
1095		i = match_parm(&s[4], ide_words, vals, 3);
1096
1097		/*
1098		 * Cryptic check to ensure chipset not already set for hwif.
1099		 * Note: we can't depend on hwif->chipset here.
1100		 */
1101		if (i >= -18 && i <= -11) {
1102			/* chipset already specified */
1103			if (is_chipset_set)
1104				goto bad_option;
1105			/* these drivers are for "ide0=" only */
1106			if (hw != 0)
1107				goto bad_hwif;
1108			is_chipset_set = 1;
1109			printk("\n");
1110		}
1111
1112		switch (i) {
1113#ifdef CONFIG_BLK_DEV_ALI14XX
1114			case -17: /* "ali14xx" */
1115				probe_ali14xx = 1;
1116				goto obsolete_option;
1117#endif
1118#ifdef CONFIG_BLK_DEV_UMC8672
1119			case -16: /* "umc8672" */
1120				probe_umc8672 = 1;
1121				goto obsolete_option;
1122#endif
1123#ifdef CONFIG_BLK_DEV_DTC2278
1124			case -15: /* "dtc2278" */
1125				probe_dtc2278 = 1;
1126				goto obsolete_option;
1127#endif
1128#ifdef CONFIG_BLK_DEV_CMD640
1129			case -14: /* "cmd640_vlb" */
1130				cmd640_vlb = 1;
1131				goto obsolete_option;
1132#endif
1133#ifdef CONFIG_BLK_DEV_HT6560B
1134			case -13: /* "ht6560b" */
1135				probe_ht6560b = 1;
1136				goto obsolete_option;
1137#endif
1138#ifdef CONFIG_BLK_DEV_QD65XX
1139			case -12: /* "qd65xx" */
1140				probe_qd65xx = 1;
1141				goto obsolete_option;
1142#endif
1143#ifdef CONFIG_BLK_DEV_4DRIVES
1144			case -11: /* "four" drives on one set of ports */
1145				probe_4drives = 1;
1146				goto obsolete_option;
1147#endif
1148			case -10: /* minus10 */
1149			case -9: /* minus9 */
1150			case -8: /* minus8 */
1151			case -6:
1152			case -4:
1153			case -3:
1154				goto bad_option;
1155			case -7: /* ata66 */
1156#ifdef CONFIG_BLK_DEV_IDEPCI
1157				/*
1158				 * Use ATA_CBL_PATA40_SHORT so drive side
1159				 * cable detection is also overriden.
1160				 */
1161				hwif->cbl = ATA_CBL_PATA40_SHORT;
1162				goto obsolete_option;
1163#else
1164				goto bad_hwif;
1165#endif
1166			case -5: /* "reset" */
1167				hwif->reset = 1;
1168				goto obsolete_option;
1169			case -2: /* "serialize" */
1170				hwif->mate = &ide_hwifs[hw^1];
1171				hwif->mate->mate = hwif;
1172				hwif->serialized = hwif->mate->serialized = 1;
1173				goto obsolete_option;
1174
1175			case -1:
1176			case 0:
1177			case 1:
1178			case 2:
1179			case 3:
1180				goto bad_option;
1181			default:
1182				printk(" -- SUPPORT NOT CONFIGURED IN THIS KERNEL\n");
1183				return 1;
1184		}
1185	}
1186bad_option:
1187	printk(" -- BAD OPTION\n");
1188	return 1;
1189obsolete_option:
1190	printk(" -- OBSOLETE OPTION, WILL BE REMOVED SOON!\n");
1191	return 1;
1192bad_hwif:
1193	printk("-- NOT SUPPORTED ON ide%d", hw);
1194done:
1195	printk("\n");
1196	return 1;
1197}
1198
1199EXPORT_SYMBOL(ide_lock);
1200
1201static int ide_bus_match(struct device *dev, struct device_driver *drv)
1202{
1203	return 1;
1204}
1205
1206static char *media_string(ide_drive_t *drive)
1207{
1208	switch (drive->media) {
1209	case ide_disk:
1210		return "disk";
1211	case ide_cdrom:
1212		return "cdrom";
1213	case ide_tape:
1214		return "tape";
1215	case ide_floppy:
1216		return "floppy";
1217	case ide_optical:
1218		return "optical";
1219	default:
1220		return "UNKNOWN";
1221	}
1222}
1223
1224static ssize_t media_show(struct device *dev, struct device_attribute *attr, char *buf)
1225{
1226	ide_drive_t *drive = to_ide_device(dev);
1227	return sprintf(buf, "%s\n", media_string(drive));
1228}
1229
1230static ssize_t drivename_show(struct device *dev, struct device_attribute *attr, char *buf)
1231{
1232	ide_drive_t *drive = to_ide_device(dev);
1233	return sprintf(buf, "%s\n", drive->name);
1234}
1235
1236static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
1237{
1238	ide_drive_t *drive = to_ide_device(dev);
1239	return sprintf(buf, "ide:m-%s\n", media_string(drive));
1240}
1241
1242static ssize_t model_show(struct device *dev, struct device_attribute *attr,
1243			  char *buf)
1244{
1245	ide_drive_t *drive = to_ide_device(dev);
1246	return sprintf(buf, "%s\n", drive->id->model);
1247}
1248
1249static ssize_t firmware_show(struct device *dev, struct device_attribute *attr,
1250			     char *buf)
1251{
1252	ide_drive_t *drive = to_ide_device(dev);
1253	return sprintf(buf, "%s\n", drive->id->fw_rev);
1254}
1255
1256static ssize_t serial_show(struct device *dev, struct device_attribute *attr,
1257			   char *buf)
1258{
1259	ide_drive_t *drive = to_ide_device(dev);
1260	return sprintf(buf, "%s\n", drive->id->serial_no);
1261}
1262
1263static struct device_attribute ide_dev_attrs[] = {
1264	__ATTR_RO(media),
1265	__ATTR_RO(drivename),
1266	__ATTR_RO(modalias),
1267	__ATTR_RO(model),
1268	__ATTR_RO(firmware),
1269	__ATTR(serial, 0400, serial_show, NULL),
1270	__ATTR_NULL
1271};
1272
1273static int ide_uevent(struct device *dev, struct kobj_uevent_env *env)
1274{
1275	ide_drive_t *drive = to_ide_device(dev);
1276
1277	add_uevent_var(env, "MEDIA=%s", media_string(drive));
1278	add_uevent_var(env, "DRIVENAME=%s", drive->name);
1279	add_uevent_var(env, "MODALIAS=ide:m-%s", media_string(drive));
1280	return 0;
1281}
1282
1283static int generic_ide_probe(struct device *dev)
1284{
1285	ide_drive_t *drive = to_ide_device(dev);
1286	ide_driver_t *drv = to_ide_driver(dev->driver);
1287
1288	return drv->probe ? drv->probe(drive) : -ENODEV;
1289}
1290
1291static int generic_ide_remove(struct device *dev)
1292{
1293	ide_drive_t *drive = to_ide_device(dev);
1294	ide_driver_t *drv = to_ide_driver(dev->driver);
1295
1296	if (drv->remove)
1297		drv->remove(drive);
1298
1299	return 0;
1300}
1301
1302static void generic_ide_shutdown(struct device *dev)
1303{
1304	ide_drive_t *drive = to_ide_device(dev);
1305	ide_driver_t *drv = to_ide_driver(dev->driver);
1306
1307	if (dev->driver && drv->shutdown)
1308		drv->shutdown(drive);
1309}
1310
1311struct bus_type ide_bus_type = {
1312	.name		= "ide",
1313	.match		= ide_bus_match,
1314	.uevent		= ide_uevent,
1315	.probe		= generic_ide_probe,
1316	.remove		= generic_ide_remove,
1317	.shutdown	= generic_ide_shutdown,
1318	.dev_attrs	= ide_dev_attrs,
1319	.suspend	= generic_ide_suspend,
1320	.resume		= generic_ide_resume,
1321};
1322
1323EXPORT_SYMBOL_GPL(ide_bus_type);
1324
1325static void ide_port_class_release(struct device *portdev)
1326{
1327	ide_hwif_t *hwif = dev_get_drvdata(portdev);
1328
1329	put_device(&hwif->gendev);
1330}
1331
1332/*
1333 * This is gets invoked once during initialization, to set *everything* up
1334 */
1335static int __init ide_init(void)
1336{
1337	int ret;
1338
1339	printk(KERN_INFO "Uniform Multi-Platform E-IDE driver\n");
1340	system_bus_speed = ide_system_bus_speed();
1341
1342	printk(KERN_INFO "ide: Assuming %dMHz system bus speed "
1343			 "for PIO modes%s\n", system_bus_speed,
1344			idebus_parameter ? "" : "; override with idebus=xx");
1345
1346	ret = bus_register(&ide_bus_type);
1347	if (ret < 0) {
1348		printk(KERN_WARNING "IDE: bus_register error: %d\n", ret);
1349		return ret;
1350	}
1351
1352	ide_port_class = class_create(THIS_MODULE, "ide_port");
1353	if (IS_ERR(ide_port_class)) {
1354		ret = PTR_ERR(ide_port_class);
1355		goto out_port_class;
1356	}
1357	ide_port_class->dev_release = ide_port_class_release;
1358
1359	init_ide_data();
1360
1361	proc_ide_create();
1362
1363	return 0;
1364
1365out_port_class:
1366	bus_unregister(&ide_bus_type);
1367
1368	return ret;
1369}
1370
1371#ifdef MODULE
1372static char *options = NULL;
1373module_param(options, charp, 0);
1374MODULE_LICENSE("GPL");
1375
1376static void __init parse_options (char *line)
1377{
1378	char *next = line;
1379
1380	if (line == NULL || !*line)
1381		return;
1382	while ((line = next) != NULL) {
1383 		if ((next = strchr(line,' ')) != NULL)
1384			*next++ = 0;
1385		if (!ide_setup(line))
1386			printk (KERN_INFO "Unknown option '%s'\n", line);
1387	}
1388}
1389
1390int __init init_module (void)
1391{
1392	parse_options(options);
1393	return ide_init();
1394}
1395
1396void __exit cleanup_module (void)
1397{
1398	int index;
1399
1400	for (index = 0; index < MAX_HWIFS; ++index)
1401		ide_unregister(index);
1402
1403	proc_ide_destroy();
1404
1405	class_destroy(ide_port_class);
1406
1407	bus_unregister(&ide_bus_type);
1408}
1409
1410#else /* !MODULE */
1411
1412__setup("", ide_setup);
1413
1414module_init(ide_init);
1415
1416#endif /* MODULE */
1417