aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/pci/hpt34x.c
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-10-18 18:30:07 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-10-18 18:30:07 -0400
commit5f8b6c34854a966fe5eb7241fde0419d47d5d408 (patch)
tree052afd508d9cd314f503d938182db55355f1b392 /drivers/ide/pci/hpt34x.c
parent9adf768a398745c539623210502b521e671c59d7 (diff)
ide: add ->mwdma_mask and ->swdma_mask to ide_pci_device_t (take 2)
* Add ->mwdma_mask and ->swdma_mask to ide_pci_device_t. * Set ide_hwif_t DMA masks using DMA masks from ide_pci_device_t in setup-pci.c::ide_pci_setup_ports() (iff DMA base is valid and ->init_hwif method may still override them). * Convert IDE PCI host drivers to use ide_pci_device_t DMA masks. While at it: * Use ATA_{UDMA,MWDMA,SWDMA}* defines. * hpt34x.c: add separate ide_pci_device_t instances for HPT343 and HPT345. * serverworks.c: fix DMA masks being set before checking DMA base. v2: * Add missing masks to DECLARE_GENERIC_PCI_DEV() macro. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/pci/hpt34x.c')
-rw-r--r--drivers/ide/pci/hpt34x.c55
1 files changed, 26 insertions, 29 deletions
diff --git a/drivers/ide/pci/hpt34x.c b/drivers/ide/pci/hpt34x.c
index 470e06bd3f2d..0b0c08298348 100644
--- a/drivers/ide/pci/hpt34x.c
+++ b/drivers/ide/pci/hpt34x.c
@@ -125,51 +125,48 @@ static unsigned int __devinit init_chipset_hpt34x(struct pci_dev *dev, const cha
125 125
126static void __devinit init_hwif_hpt34x(ide_hwif_t *hwif) 126static void __devinit init_hwif_hpt34x(ide_hwif_t *hwif)
127{ 127{
128 u16 pcicmd = 0;
129
130 hwif->set_pio_mode = &hpt34x_set_pio_mode; 128 hwif->set_pio_mode = &hpt34x_set_pio_mode;
131 hwif->set_dma_mode = &hpt34x_set_mode; 129 hwif->set_dma_mode = &hpt34x_set_mode;
132 130
133 hwif->drives[0].autotune = 1; 131 hwif->drives[0].autotune = 1;
134 hwif->drives[1].autotune = 1; 132 hwif->drives[1].autotune = 1;
133}
135 134
136 pci_read_config_word(hwif->pci_dev, PCI_COMMAND, &pcicmd); 135static ide_pci_device_t hpt34x_chipsets[] __devinitdata = {
137 136 { /* 0 */
138 if (!hwif->dma_base) 137 .name = "HPT343",
139 return; 138 .init_chipset = init_chipset_hpt34x,
140 139 .init_hwif = init_hwif_hpt34x,
140 .extra = 16,
141 .host_flags = IDE_HFLAG_NO_ATAPI_DMA |
142 IDE_HFLAG_NO_AUTODMA,
143 .pio_mask = ATA_PIO5,
144 },
145 { /* 1 */
146 .name = "HPT345",
147 .init_chipset = init_chipset_hpt34x,
148 .init_hwif = init_hwif_hpt34x,
149 .extra = 16,
150 .host_flags = IDE_HFLAG_NO_ATAPI_DMA |
151 IDE_HFLAG_NO_AUTODMA |
152 IDE_HFLAG_OFF_BOARD,
153 .pio_mask = ATA_PIO5,
141#ifdef CONFIG_HPT34X_AUTODMA 154#ifdef CONFIG_HPT34X_AUTODMA
142 if ((pcicmd & PCI_COMMAND_MEMORY) == 0) 155 .swdma_mask = ATA_SWDMA2,
143 return; 156 .mwdma_mask = ATA_MWDMA2,
144 157 .udma_mask = ATA_UDMA2,
145 hwif->ultra_mask = 0x07;
146 hwif->mwdma_mask = 0x07;
147 hwif->swdma_mask = 0x07;
148#endif 158#endif
149} 159 }
150
151static ide_pci_device_t hpt34x_chipset __devinitdata = {
152 .name = "HPT34X",
153 .init_chipset = init_chipset_hpt34x,
154 .init_hwif = init_hwif_hpt34x,
155 .extra = 16,
156 .host_flags = IDE_HFLAG_NO_ATAPI_DMA | IDE_HFLAG_NO_AUTODMA,
157 .pio_mask = ATA_PIO5,
158}; 160};
159 161
160static int __devinit hpt34x_init_one(struct pci_dev *dev, const struct pci_device_id *id) 162static int __devinit hpt34x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
161{ 163{
162 ide_pci_device_t *d = &hpt34x_chipset; 164 ide_pci_device_t *d;
163 static char *chipset_names[] = {"HPT343", "HPT345"};
164 u16 pcicmd = 0; 165 u16 pcicmd = 0;
165 166
166 pci_read_config_word(dev, PCI_COMMAND, &pcicmd); 167 pci_read_config_word(dev, PCI_COMMAND, &pcicmd);
167 168
168 d->name = chipset_names[(pcicmd & PCI_COMMAND_MEMORY) ? 1 : 0]; 169 d = &hpt34x_chipsets[(pcicmd & PCI_COMMAND_MEMORY) ? 1 : 0];
169 if (pcicmd & PCI_COMMAND_MEMORY)
170 d->host_flags |= IDE_HFLAG_OFF_BOARD;
171 else
172 d->host_flags &= ~IDE_HFLAG_OFF_BOARD;
173 170
174 return ide_setup_pci_device(dev, d); 171 return ide_setup_pci_device(dev, d);
175} 172}