- ide_hwif_t *hwif = &ide_hwifs[i];
- unsigned long io_addr = ide_default_io_base(i);
- hw_regs_t hw;
-
- if (hwif->chipset == ide_unknown && io_addr) {
- memset(&hw, 0, sizeof(hw));
- ide_std_init_ports(&hw, io_addr, io_addr + 0x206);
- hw.irq = ide_default_irq(io_addr);
- ide_init_port_hw(hwif, &hw);
-
- idx[i] = i;
- } else
- idx[i] = 0xff;
+ io_addr = ide_default_io_base(i);
+
+ hws[i] = NULL;
+
+ if ((probe_mask & (1 << i)) && io_addr) {
+ if (!request_region(io_addr, 8, DRV_NAME)) {
+ printk(KERN_ERR "%s: I/O resource 0x%lX-0x%lX "
+ "not free.\n",
+ DRV_NAME, io_addr, io_addr + 7);
+ continue;
+ }
+
+ if (!request_region(io_addr + 0x206, 1, DRV_NAME)) {
+ printk(KERN_ERR "%s: I/O resource 0x%lX "
+ "not free.\n",
+ DRV_NAME, io_addr + 0x206);
+ release_region(io_addr, 8);
+ continue;
+ }
+
+ memset(&hw[i], 0, sizeof(hw[i]));
+ ide_std_init_ports(&hw[i], io_addr, io_addr + 0x206);
+ hw[i].irq = ide_default_irq(io_addr);
+ hw[i].chipset = ide_generic;
+
+ hws[i] = &hw[i];
+ }