ide: add ->chipset field to ide_pci_device_t
PATCH 7/10 ide: add ->chipset field to ide_pci_device_t
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.
--- drivers/ide/pci/cmd64x.c | 4 +--- drivers/ide/pci/cy82c693.c | 2 +- drivers/ide/pci/rz1000.c | 2 +- drivers/ide/pci/trm290.c | 2 +- drivers/ide/setup-pci.c | 2 +- include/linux/ide.h | 7 +++++-- 6 files changed, 10 insertions(+), 9 deletions(-)
drivers/ide/pci/cmd64x.c +1 -3
@@ -506,9 +506,6 @@ static void __devinit init_hwif_cmd64x(i 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[ .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,
drivers/ide/pci/cy82c693.c +1 -1
@@ -428,7 +428,6 @@ static unsigned int __devinit init_chips*/ 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 .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,
drivers/ide/pci/rz1000.c +1 -1
@@ -35,7 +35,6 @@ static void __devinit init_hwif_rz1000 (u16 reg;struct pci_dev *dev = hwif->pci_dev; - hwif->chipset = ide_rz1000;if (!pci_read_config_word (dev,0x40 , ®) && !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 (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 , };
drivers/ide/pci/trm290.c +1 -1
@@ -250,7 +250,6 @@ static void __devinit init_hwif_trm290(iu8 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(istatic 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 |
drivers/ide/setup-pci.c +1 -1
@@ -397,7 +397,7 @@ static ide_hwif_t *ide_hwif_configure(stmemcpy (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;
include/linux/ide.h +5 -2
@@ -200,14 +200,16 @@ typedef int (ide_ack_intr_t)(struct hwif* 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
@@ -1282,6 +1284,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;
Quoted 6 lines · Bartlomiej Zolnierkiewicz
Add ->chipset field to
ide_pci_device_tand use it inide_hwif_configure()to sethwif->chipset. Convert cmd64x, cy82c693, rz1000 and trm290 host drivers to use this new ability.While at it define
hwif_chipset_tas u8 to save some space inhw_regs_t,ide_hwif_tandide_pci_device_tinstances.
I( wonder what's so special about say cmd64x_chipset -- why it's got its
own value? Some histerical raisins? :-)
MBR, Sergei
Quoted 11 lines · Sergei Shtylyov
Quoted 6 lines · Bartlomiej Zolnierkiewicz
Add ->chipset field to
ide_pci_device_tand use it inide_hwif_configure()to sethwif->chipset. Convert cmd64x, cy82c693, rz1000 and trm290 host drivers to use this new ability.While at it define
hwif_chipset_tas u8 to save some space inhw_regs_t,ide_hwif_tandide_pci_device_tinstances.I( wonder what's so special about say
cmd64x_chipset-- why it's got its
own value? Some histerical raisins? :-)
It seems that ide_cmd646 causes serialization of interfaces in init_irq()... Would be great if somebody could comment more on the reasons for ide_cmd646.
Thanks,
Bart
Quoted 2 lines
It seems that
ide_cmd646causes serialization of interfaces ininit_irq()... Would be great if somebody could comment more on the reasons foride_cmd646.
No idea but various CMD64x chips had problems cured by serializing stuff
- notably on some HP boxes.
Alan