2 #include <linux/kernel.h>
3 #include <linux/init.h>
4 #include <linux/module.h>
7 #define DRV_NAME "ide-4drives"
9 static int probe_4drives
;
11 module_param_named(probe
, probe_4drives
, bool, 0);
12 MODULE_PARM_DESC(probe
, "probe for generic IDE chipset with 4 drives/port");
14 static int __init
ide_4drives_init(void)
16 ide_hwif_t
*hwif
, *mate
;
17 unsigned long base
= 0x1f0, ctl
= 0x3f6;
18 u8 idx
[4] = { 0xff, 0xff, 0xff, 0xff };
21 if (probe_4drives
== 0)
24 if (!request_region(base
, 8, DRV_NAME
)) {
25 printk(KERN_ERR
"%s: I/O resource 0x%lX-0x%lX not free.\n",
26 DRV_NAME
, base
, base
+ 7);
30 if (!request_region(ctl
, 1, DRV_NAME
)) {
31 printk(KERN_ERR
"%s: I/O resource 0x%lX not free.\n",
33 release_region(base
, 8);
37 memset(&hw
, 0, sizeof(hw
));
39 ide_std_init_ports(&hw
, base
, ctl
);
41 hw
.chipset
= ide_4drives
;
43 hwif
= ide_find_port();
45 ide_init_port_hw(hwif
, &hw
);
49 mate
= ide_find_port();
51 ide_init_port_hw(mate
, &hw
);
52 mate
->drives
[0].select
.all
^= 0x20;
53 mate
->drives
[1].select
.all
^= 0x20;
59 hwif
->serialized
= mate
->serialized
= 1;
63 ide_device_add(idx
, NULL
);
68 module_init(ide_4drives_init
);
70 MODULE_AUTHOR("Bartlomiej Zolnierkiewicz");
71 MODULE_DESCRIPTION("generic IDE chipset with 4 drives/port support");
72 MODULE_LICENSE("GPL");