ide: add ->chipset field to ide_pci_device_t
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 19 Oct 2007 22:32:30 +0000 (00:32 +0200)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 19 Oct 2007 22:32:30 +0000 (00:32 +0200)
Add ->chipset field to ide_pci_device_t and use it in ide_hwif_configure()
to set hwif->chipset.  Convert cmd64x, cy82c693, rz1000 and trm290 host
drivers to use this new ability.

While at it define hwif_chipset_t as u8 to save some space in hw_regs_t,
ide_hwif_t and ide_pci_device_t instances.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/pci/cmd64x.c
drivers/ide/pci/cy82c693.c
drivers/ide/pci/rz1000.c
drivers/ide/pci/trm290.c
drivers/ide/setup-pci.c
include/linux/ide.h

index 69cdbfb86bbf7590e172b3df2b7237862f06fdd8..5c1b897017b40972d6a495820bee6c4fb6004505 100644 (file)
@@ -506,9 +506,6 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif)
        hwif->set_pio_mode = &cmd64x_set_pio_mode;
        hwif->set_dma_mode = &cmd64x_set_dma_mode;
 
-       if (dev->device == PCI_DEVICE_ID_CMD_646)
-               hwif->chipset = ide_cmd646;
-
        if (!hwif->dma_base)
                return;
 
@@ -575,6 +572,7 @@ static ide_pci_device_t cmd64x_chipsets[] __devinitdata = {
                .init_chipset   = init_chipset_cmd64x,
                .init_hwif      = init_hwif_cmd64x,
                .enablebits     = {{0x51,0x04,0x04}, {0x51,0x08,0x08}},
+               .chipset        = ide_cmd646,
                .host_flags     = IDE_HFLAG_ABUSE_PREFETCH | IDE_HFLAG_BOOTABLE,
                .pio_mask       = ATA_PIO5,
                .mwdma_mask     = ATA_MWDMA2,
index efc20bd97fd51bbdfb52cc53e44c7a6ced952797..e70ffa90aefe89045944a123519dbdeb66dd882e 100644 (file)
@@ -428,7 +428,6 @@ static unsigned int __devinit init_chipset_cy82c693(struct pci_dev *dev, const c
  */
 static void __devinit init_hwif_cy82c693(ide_hwif_t *hwif)
 {
-       hwif->chipset = ide_cy82c693;
        hwif->set_pio_mode = &cy82c693_set_pio_mode;
 
        if (hwif->dma_base == 0)
@@ -454,6 +453,7 @@ static ide_pci_device_t cy82c693_chipset __devinitdata = {
        .init_chipset   = init_chipset_cy82c693,
        .init_iops      = init_iops_cy82c693,
        .init_hwif      = init_hwif_cy82c693,
+       .chipset        = ide_cy82c693,
        .host_flags     = IDE_HFLAG_SINGLE | IDE_HFLAG_TRUST_BIOS_FOR_DMA |
                          IDE_HFLAG_BOOTABLE,
        .pio_mask       = ATA_PIO4,
index 0d76af45db6b9d757b3f15f6322082bb1a028116..5f1ad9ef1fe017906b0f1c80aadebfd5c9c7d524 100644 (file)
@@ -35,7 +35,6 @@ static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif)
        u16 reg;
        struct pci_dev *dev = hwif->pci_dev;
 
-       hwif->chipset = ide_rz1000;
        if (!pci_read_config_word (dev, 0x40, &reg) &&
            !pci_write_config_word(dev, 0x40, reg & 0xdfff)) {
                printk(KERN_INFO "%s: disabled chipset read-ahead "
@@ -53,6 +52,7 @@ static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif)
 static ide_pci_device_t rz1000_chipset __devinitdata = {
        .name           = "RZ100x",
        .init_hwif      = init_hwif_rz1000,
+       .chipset        = ide_rz1000,
        .host_flags     = IDE_HFLAG_NO_DMA | IDE_HFLAG_BOOTABLE,
 };
 
index 140d486f6237a3dd386a0b6ff5888abc429c127a..be5d145a94f1703d71b367550ebe7304702302fa 100644 (file)
@@ -250,7 +250,6 @@ static void __devinit init_hwif_trm290(ide_hwif_t *hwif)
        u8 reg = 0;
        struct pci_dev *dev = hwif->pci_dev;
 
-       hwif->chipset = ide_trm290;
        cfgbase = pci_resource_start(dev, 4);
        if ((dev->class & 5) && cfgbase) {
                hwif->config_data = cfgbase;
@@ -323,6 +322,7 @@ static void __devinit init_hwif_trm290(ide_hwif_t *hwif)
 static ide_pci_device_t trm290_chipset __devinitdata = {
        .name           = "TRM290",
        .init_hwif      = init_hwif_trm290,
+       .chipset        = ide_trm290,
        .host_flags     = IDE_HFLAG_NO_ATAPI_DMA |
 #if 0 /* play it safe for now */
                          IDE_HFLAG_TRUST_BIOS_FOR_DMA |
index 6903100e3c8395effd66a46d61738b76fd5ec039..30c0741c5e5ca70d08ff8534579c46cabcfcde26 100644 (file)
@@ -397,7 +397,7 @@ static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, ide_pci_device_t *d,
                memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports));
                hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET];
        }
-       hwif->chipset = ide_pci;
+       hwif->chipset = d->chipset ? d->chipset : ide_pci;
        hwif->pci_dev = dev;
        hwif->cds = (struct ide_pci_device_s *) d;
        hwif->channel = port;
index fdd09747305504b27f906211b291a645f9a6fd6e..b676e51d74f16a8bf6e21d28c3a028a2ed8d866a 100644 (file)
@@ -200,14 +200,16 @@ typedef int (ide_ack_intr_t)(struct hwif_s *);
  * hwif_chipset_t is used to keep track of the specific hardware
  * chipset used by each IDE interface, if known.
  */
-typedef enum { ide_unknown,    ide_generic,    ide_pci,
+enum {         ide_unknown,    ide_generic,    ide_pci,
                ide_cmd640,     ide_dtc2278,    ide_ali14xx,
                ide_qd65xx,     ide_umc8672,    ide_ht6560b,
                ide_rz1000,     ide_trm290,
                ide_cmd646,     ide_cy82c693,   ide_4drives,
                ide_pmac,       ide_etrax100,   ide_acorn,
                ide_au1xxx, ide_forced
-} hwif_chipset_t;
+};
+
+typedef u8 hwif_chipset_t;
 
 /*
  * Structure to hold all information about the location of this port
@@ -1277,6 +1279,7 @@ typedef struct ide_pci_device_s {
        void                    (*init_dma)(ide_hwif_t *, unsigned long);
        void                    (*fixup)(ide_hwif_t *);
        ide_pci_enablebit_t     enablebits[2];
+       hwif_chipset_t          chipset;
        unsigned int            extra;
        u32                     host_flags;
        u8                      pio_mask;