ide: drop 'initializing' argument from ide_register_hw()
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Sat, 26 Jan 2008 19:13:06 +0000 (20:13 +0100)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Sat, 26 Jan 2008 19:13:06 +0000 (20:13 +0100)
* Rename init_hwif_data() to ide_init_port_data() and export it.

* For all users of ide_register_hw() with 'initializing' argument set
  hwif->present and hwif->hold are always zero so convert these host
  drivers to use ide_find_port()+ide_init_port_data()+ide_init_port_hw()
  instead (also no need for init_hwif_default() call since the setup
  done by it gets over-ridden by ide_init_port_hw() call).

* Drop 'initializing' argument from ide_register_hw().

Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Roman Zippel <zippel@linux-m68k.org>
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
15 files changed:
drivers/ide/arm/bast-ide.c
drivers/ide/arm/ide_arm.c
drivers/ide/cris/ide-cris.c
drivers/ide/h8300/ide-h8300.c
drivers/ide/ide-pnp.c
drivers/ide/ide.c
drivers/ide/legacy/buddha.c
drivers/ide/legacy/falconide.c
drivers/ide/legacy/gayle.c
drivers/ide/legacy/ide-cs.c
drivers/ide/legacy/macide.c
drivers/ide/legacy/q40ide.c
drivers/ide/pci/delkin_cb.c
drivers/macintosh/mediabay.c
include/linux/ide.h

index 48db6167bb90f6005927590431ba56a231061cd3..45bf9c825f2b11c7afd2fd4d65d45c49a0dfaa45 100644 (file)
@@ -45,7 +45,7 @@ bastide_register(unsigned int base, unsigned int aux, int irq,
        hw.io_ports[IDE_CONTROL_OFFSET] = aux + (6 * 0x20);
        hw.irq = irq;
 
-       ide_register_hw(&hw, NULL, 0, hwif);
+       ide_register_hw(&hw, NULL, hwif);
 
        return 0;
 }
index 8957cbadf5c2a8c5870800a54ebd1d4b6eebae70..1a03a2a285efef7081f7778056db77b15039333f 100644 (file)
 
 void __init ide_arm_init(void)
 {
+       ide_hwif_t *hwif;
        hw_regs_t hw;
 
        memset(&hw, 0, sizeof(hw));
        ide_std_init_ports(&hw, IDE_ARM_IO, IDE_ARM_IO + 0x206);
        hw.irq = IDE_ARM_IRQ;
-       ide_register_hw(&hw, NULL, 1, NULL);
+
+       hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
+       if (hwif) {
+               ide_init_port_data(hwif, hwif->index);
+               ide_init_port_hw(hwif, &hw);
+       }
 }
index dcebc0299f5eeede3208149f31c76028388c08dc..7e33e2b42e92cfe5ea63afafa1e4bb0530d18cf9 100644 (file)
@@ -777,9 +777,11 @@ init_e100_ide (void)
                                ide_offsets,
                                0, 0, cris_ide_ack_intr,
                                ide_default_irq(0));
-               ide_register_hw(&hw, NULL, 1, &hwif);
+               hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
                if (hwif == NULL)
                        continue;
+               ide_init_port_data(hwif, hwif->index);
+               ide_init_port_hw(hwif, &hw);
                hwif->mmio = 1;
                hwif->chipset = ide_etrax100;
                hwif->set_pio_mode = &cris_set_pio_mode;
index 4a49b5c59acb3949fa87656814678956b7855e17..57d0d4ce8588c13389b01193d5068fea313f4492 100644 (file)
@@ -88,7 +88,7 @@ void __init h8300_ide_init(void)
 {
        hw_regs_t hw;
        ide_hwif_t *hwif;
-       int idx;
+       int index;
 
        if (!request_region(CONFIG_H8300_IDE_BASE, H8300_IDE_GAP*8, "ide-h8300"))
                goto out_busy;
@@ -100,14 +100,17 @@ void __init h8300_ide_init(void)
        hw_setup(&hw);
 
        /* register if */
-       idx = ide_register_hw(&hw, NULL, 1, &hwif);
-       if (idx == -1) {
+       hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
+       if (hwif == NULL) {
                printk(KERN_ERR "ide-h8300: IDE I/F register failed\n");
                return;
        }
 
+       index = hwif->index;
+       ide_init_port_data(hwif, index);
+       ide_init_port_hw(hwif, &hw);
        hwif_setup(hwif);
-       printk(KERN_INFO "ide%d: H8/300 generic IDE interface\n", idx);
+       printk(KERN_INFO "ide%d: H8/300 generic IDE interface\n", index);
        return;
 
 out_busy:
index e245521af7b55d3aa9ae97c381c2234213183179..664bc489c550ccb8ca29efe434d321ee78026b7a 100644 (file)
@@ -31,7 +31,6 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id
 {
        hw_regs_t hw;
        ide_hwif_t *hwif;
-       int index;
 
        if (!(pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) && pnp_irq_valid(dev, 0)))
                return -1;
@@ -41,10 +40,14 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id
                                pnp_port_start(dev, 1));
        hw.irq = pnp_irq(dev, 0);
 
-       index = ide_register_hw(&hw, NULL, 1, &hwif);
+       hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
+       if (hwif) {
+               u8 index = hwif->index;
+
+               ide_init_port_data(hwif, index);
+               ide_init_port_hw(hwif, &hw);
 
-       if (index != -1) {
-               printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index);
+               printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index);
                pnp_set_drvdata(dev,hwif);
                return 0;
        }
index 98bd45e8c1759d58d83bbe8b79e539bc88ed91d8..3ec220b64d0be01c83f1ffd577831976600123df 100644 (file)
@@ -116,7 +116,7 @@ EXPORT_SYMBOL(ide_hwifs);
 /*
  * Do not even *think* about calling this!
  */
-static void init_hwif_data(ide_hwif_t *hwif, unsigned int index)
+void ide_init_port_data(ide_hwif_t *hwif, unsigned int index)
 {
        unsigned int unit;
 
@@ -159,6 +159,7 @@ static void init_hwif_data(ide_hwif_t *hwif, unsigned int index)
                init_completion(&drive->gendev_rel_comp);
        }
 }
+EXPORT_SYMBOL_GPL(ide_init_port_data);
 
 static void init_hwif_default(ide_hwif_t *hwif, unsigned int index)
 {
@@ -210,7 +211,7 @@ static void __init init_ide_data (void)
        /* Initialise all interface structures */
        for (index = 0; index < MAX_HWIFS; ++index) {
                hwif = &ide_hwifs[index];
-               init_hwif_data(hwif, index);
+               ide_init_port_data(hwif, index);
                init_hwif_default(hwif, index);
 #if !defined(CONFIG_PPC32) || !defined(CONFIG_PCI)
                hwif->irq =
@@ -609,7 +610,7 @@ void ide_unregister(unsigned int index)
        tmp_hwif = *hwif;
 
        /* restore hwif data to pristine status */
-       init_hwif_data(hwif, index);
+       ide_init_port_data(hwif, index);
        init_hwif_default(hwif, index);
 
        ide_hwif_restore(hwif, &tmp_hwif);
@@ -690,29 +691,19 @@ EXPORT_SYMBOL_GPL(ide_init_port_hw);
  *     ide_register_hw         -       register IDE interface
  *     @hw: hardware registers
  *     @quirkproc: quirkproc function
- *     @initializing: set while initializing built-in drivers
  *     @hwifp: pointer to returned hwif
  *
  *     Register an IDE interface, specifying exactly the registers etc.
- *     Set init=1 iff calling before probes have taken place.
  *
  *     Returns -1 on error.
  */
 
 int ide_register_hw(hw_regs_t *hw, void (*quirkproc)(ide_drive_t *),
-                   int initializing, ide_hwif_t **hwifp)
+                   ide_hwif_t **hwifp)
 {
        int index, retry = 1;
        ide_hwif_t *hwif;
-
-       if (initializing) {
-               hwif = ide_find_port(hw->io_ports[IDE_DATA_OFFSET]);
-               if (hwif) {
-                       index = hwif->index;
-                       goto found;
-               }
-               return -1;
-       }
+       u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
        do {
                for (index = 0; index < MAX_HWIFS; ++index) {
@@ -735,7 +726,7 @@ found:
        if (hwif->present)
                ide_unregister(index);
        else if (!hwif->hold) {
-               init_hwif_data(hwif, index);
+               ide_init_port_data(hwif, index);
                init_hwif_default(hwif, index);
        }
        if (hwif->present)
@@ -744,16 +735,14 @@ found:
        ide_init_port_hw(hwif, hw);
        hwif->quirkproc = quirkproc;
 
-       if (initializing == 0) {
-               u8 idx[4] = { index, 0xff, 0xff, 0xff };
+       idx[0] = index;
 
-               ide_device_add(idx);
-       }
+       ide_device_add(idx);
 
        if (hwifp)
                *hwifp = hwif;
 
-       return (initializing || hwif->present) ? index : -1;
+       return hwif->present ? index : -1;
 }
 
 EXPORT_SYMBOL(ide_register_hw);
@@ -1076,7 +1065,7 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device
                        ide_init_hwif_ports(&hw, (unsigned long) args[0],
                                            (unsigned long) args[1], NULL);
                        hw.irq = args[2];
-                       if (ide_register_hw(&hw, NULL, 0, NULL) == -1)
+                       if (ide_register_hw(&hw, NULL, NULL) == -1)
                                return -EIO;
                        return 0;
                }
index 4a0be251a05fd84ddaa606c2b1161c2c99d93a59..8b9cb39c961e085869dafc43344fd3f781bd2969 100644 (file)
@@ -147,7 +147,7 @@ void __init buddha_init(void)
 {
        hw_regs_t hw;
        ide_hwif_t *hwif;
-       int i, index;
+       int i;
 
        struct zorro_dev *z = NULL;
        u_long buddha_board = 0;
@@ -213,8 +213,13 @@ fail_base2:
                                                IRQ_AMIGA_PORTS);
                        }       
 
-                       index = ide_register_hw(&hw, NULL, 1, &hwif);
-                       if (index != -1) {
+                       hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
+                       if (hwif) {
+                               u8 index = hwif->index;
+
+                               ide_init_port_data(hwif, index);
+                               ide_init_port_hw(hwif, &hw);
+
                                hwif->mmio = 1;
                                printk("ide%d: ", index);
                                switch(type) {
index 7d7936f1b9007b06c50bfe477f1171ef49a33150..b861cfe259006e266fb21c6acf14616f0bfe3938 100644 (file)
@@ -66,15 +66,19 @@ void __init falconide_init(void)
 {
     if (MACH_IS_ATARI && ATARIHW_PRESENT(IDE)) {
        hw_regs_t hw;
-       int index;
 
        ide_setup_ports(&hw, ATA_HD_BASE, falconide_offsets,
                        0, 0, NULL,
 //                     falconide_iops,
                        IRQ_MFP_IDE);
-       index = ide_register_hw(&hw, NULL, 1, NULL);
 
-       if (index != -1)
-           printk("ide%d: Falcon IDE interface\n", index);
-    }
+       hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
+       if (hwif) {
+               u8 index = hwif->index;
+
+               ide_init_port_data(hwif, index);
+               ide_init_port_hw(hwif, &hw);
+
+               printk("ide%d: Falcon IDE interface\n", index);
+       }
 }
index 53331ee1e957c9a71c651a2eeb3c5ae2aaa191bf..705d0b8a3f5d20d5a28c385413dbde52a2602303 100644 (file)
@@ -133,7 +133,6 @@ found:
        ide_ack_intr_t *ack_intr;
        hw_regs_t hw;
        ide_hwif_t *hwif;
-       int index;
        unsigned long phys_base, res_start, res_n;
 
        if (a4000) {
@@ -165,8 +164,13 @@ found:
 //                     &gayle_iops,
                        IRQ_AMIGA_PORTS);
 
-       index = ide_register_hw(&hw, NULL, 1, &hwif);
-       if (index != -1) {
+       hwif = ide_find_port(base);
+       if (hwif) {
+           u8 index = hwif->index;
+
+           ide_init_port_data(hwif, index);
+           ide_init_port_hw(hwif, &hw);
+
            hwif->mmio = 1;
            switch (i) {
                case 0:
index 03715c05866408b1d14773e365d265d74b7194c4..f4ea15b32969322d6e29dbd27a87f33dedff35c1 100644 (file)
@@ -153,7 +153,7 @@ static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq
     hw.irq = irq;
     hw.chipset = ide_pci;
     hw.dev = &handle->dev;
-    return ide_register_hw(&hw, &ide_undecoded_slave, 0, NULL);
+    return ide_register_hw(&hw, &ide_undecoded_slave, NULL);
 }
 
 /*======================================================================
index 5c6aa77c237087d87e14837f6d5239716bb3dc24..1840fede5216e5c458dd05a98d743875393e7c80 100644 (file)
@@ -85,7 +85,6 @@ void __init macide_init(void)
 {
        hw_regs_t hw;
        ide_hwif_t *hwif;
-       int index = -1;
 
        switch (macintosh_config->ide_type) {
        case MAC_IDE_QUADRA:
@@ -93,40 +92,40 @@ void __init macide_init(void)
                                0, 0, macide_ack_intr,
 //                             quadra_ide_iops,
                                IRQ_NUBUS_F);
-               index = ide_register_hw(&hw, NULL, 1, &hwif);
                break;
        case MAC_IDE_PB:
                ide_setup_ports(&hw, IDE_BASE, macide_offsets,
                                0, 0, macide_ack_intr,
 //                             macide_pb_iops,
                                IRQ_NUBUS_C);
-               index = ide_register_hw(&hw, NULL, 1, &hwif);
                break;
        case MAC_IDE_BABOON:
                ide_setup_ports(&hw, BABOON_BASE, macide_offsets,
                                0, 0, NULL,
 //                             macide_baboon_iops,
                                IRQ_BABOON_1);
-               index = ide_register_hw(&hw, NULL, 1, &hwif);
-               if (index == -1) break;
-               if (macintosh_config->ident == MAC_MODEL_PB190) {
+               break;
+       default:
+               return;
+       }
 
+       hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
+       if (hwif) {
+               u8 index = hwif->index;
+
+               ide_init_port_data(hwif, index);
+               ide_init_port_hw(hwif, &hw);
+
+               if (macintosh_config->ide_type == MAC_IDE_BABOON &&
+                   macintosh_config->ident == MAC_MODEL_PB190) {
                        /* Fix breakage in ide-disk.c: drive capacity   */
                        /* is not initialized for drives without a      */
                        /* hardware ID, and we can't get that without   */
                        /* probing the drive which freezes a 190.       */
-
-                       ide_drive_t *drive = &ide_hwifs[index].drives[0];
+                       ide_drive_t *drive = &hwif->drives[0];
                        drive->capacity64 = drive->cyl*drive->head*drive->sect;
-
                }
-               break;
-
-       default:
-           return;
-       }
 
-        if (index != -1) {
                hwif->mmio = 1;
                if (macintosh_config->ide_type == MAC_IDE_QUADRA)
                        printk(KERN_INFO "ide%d: Macintosh Quadra IDE interface\n", index);
index 6ea46a6723e2c3975758a88bba8c304d96390bb6..31e54ffdfee4c8604683fa881441ea49e780b65e 100644 (file)
@@ -115,7 +115,6 @@ void __init q40ide_init(void)
 {
     int i;
     ide_hwif_t *hwif;
-    int index;
     const char *name;
 
     if (!MACH_IS_Q40)
@@ -141,10 +140,13 @@ void __init q40ide_init(void)
                        0, NULL,
 //                     m68kide_iops,
                        q40ide_default_irq(pcide_bases[i]));
-       index = ide_register_hw(&hw, NULL, 1, &hwif);
-       // **FIXME**
-       if (index != -1)
+
+       hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
+       if (hwif) {
+               ide_init_port_data(hwif, hwif->index);
+               ide_init_port_hw(hwif, &hw);
                hwif->mmio = 1;
+       }
     }
 }
 
index 83829081640a6f84727f18260a169477e8d3d257..26aa492071bb5fddb63ca8b3c3822637480060ef 100644 (file)
@@ -80,7 +80,7 @@ delkin_cb_probe (struct pci_dev *dev, const struct pci_device_id *id)
        hw.irq = dev->irq;
        hw.chipset = ide_pci;           /* this enables IRQ sharing */
 
-       rc = ide_register_hw(&hw, &ide_undecoded_slave, 0, &hwif);
+       rc = ide_register_hw(&hw, &ide_undecoded_slave, &hwif);
        if (rc < 0) {
                printk(KERN_ERR "delkin_cb: ide_register_hw failed (%d)\n", rc);
                pci_disable_device(dev);
index 48d647abea460ce914168072012208690c4c57d5..eaba4a9b231e5479a5b61be9b05f5085e6f20e5b 100644 (file)
@@ -563,7 +563,8 @@ static void media_bay_step(int i)
                                ide_init_hwif_ports(&hw, (unsigned long) bay->cd_base, (unsigned long) 0, NULL);
                                hw.irq = bay->cd_irq;
                                hw.chipset = ide_pmac;
-                               bay->cd_index = ide_register_hw(&hw, NULL, 0, NULL);
+                               bay->cd_index =
+                                       ide_register_hw(&hw, NULL, NULL);
                                pmu_resume();
                        }
                        if (bay->cd_index == -1) {
index de94a526ef9e5974f33a411b888cbd8d06e9d35a..9c037a0f2af2f93400d64ba1c12ce3d42370cd26 100644 (file)
@@ -198,10 +198,11 @@ typedef struct hw_regs_s {
 } hw_regs_t;
 
 struct hwif_s * ide_find_port(unsigned long);
+void ide_init_port_data(struct hwif_s *, unsigned int);
 void ide_init_port_hw(struct hwif_s *, hw_regs_t *);
 
 struct ide_drive_s;
-int ide_register_hw(hw_regs_t *, void (*)(struct ide_drive_s *), int,
+int ide_register_hw(hw_regs_t *, void (*)(struct ide_drive_s *),
                    struct hwif_s **);
 
 void ide_setup_ports(  hw_regs_t *hw,