diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-19 18:32:30 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-19 18:32:30 -0400 |
commit | caea7602f309cbd55ba609800fd3c3e5d19ab684 (patch) | |
tree | fbf1fab750452317a1a38f9ec38b18ad6b1323c3 | |
parent | 272a370900e5d2ae84662338397bb7b2375ff5cf (diff) |
ide: add IDE_HFLAG_{IO_32BIT,UNMASK_IRQS} host flags
Add IDE_HFLAG_{IO_32BIT,UNMASK_IRQS} host flag to tell ide_pci_setup_ports()
to set drive->{io_32bit,unmask} for both drives on the interface. Convert
amd74xx, sl82c105 and via82cxxx host drivers to use these new host flags.
While at it:
* Add IDE_HFLAGS_AMD define (amd74xx host driver).
* Add IDE_HFLAGS_VIA define (via82cxxx host driver).
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-rw-r--r-- | drivers/ide/pci/amd74xx.c | 25 | ||||
-rw-r--r-- | drivers/ide/pci/sl82c105.c | 12 | ||||
-rw-r--r-- | drivers/ide/pci/via82cxxx.c | 31 | ||||
-rw-r--r-- | drivers/ide/setup-pci.c | 10 | ||||
-rw-r--r-- | include/linux/ide.h | 4 |
5 files changed, 42 insertions, 40 deletions
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c index 7cafefbf6c1b..f6aa1d7f3fc3 100644 --- a/drivers/ide/pci/amd74xx.c +++ b/drivers/ide/pci/amd74xx.c | |||
@@ -242,19 +242,12 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const ch | |||
242 | 242 | ||
243 | static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) | 243 | static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) |
244 | { | 244 | { |
245 | int i; | ||
246 | |||
247 | if (hwif->irq == 0) /* 0 is bogus but will do for now */ | 245 | if (hwif->irq == 0) /* 0 is bogus but will do for now */ |
248 | hwif->irq = pci_get_legacy_ide_irq(hwif->pci_dev, hwif->channel); | 246 | hwif->irq = pci_get_legacy_ide_irq(hwif->pci_dev, hwif->channel); |
249 | 247 | ||
250 | hwif->set_pio_mode = &amd_set_pio_mode; | 248 | hwif->set_pio_mode = &amd_set_pio_mode; |
251 | hwif->set_dma_mode = &amd_set_drive; | 249 | hwif->set_dma_mode = &amd_set_drive; |
252 | 250 | ||
253 | for (i = 0; i < 2; i++) { | ||
254 | hwif->drives[i].io_32bit = 1; | ||
255 | hwif->drives[i].unmask = 1; | ||
256 | } | ||
257 | |||
258 | if (!hwif->dma_base) | 251 | if (!hwif->dma_base) |
259 | return; | 252 | return; |
260 | 253 | ||
@@ -270,16 +263,21 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) | |||
270 | } | 263 | } |
271 | } | 264 | } |
272 | 265 | ||
266 | #define IDE_HFLAGS_AMD \ | ||
267 | (IDE_HFLAG_PIO_NO_BLACKLIST | \ | ||
268 | IDE_HFLAG_PIO_NO_DOWNGRADE | \ | ||
269 | IDE_HFLAG_POST_SET_MODE | \ | ||
270 | IDE_HFLAG_IO_32BIT | \ | ||
271 | IDE_HFLAG_UNMASK_IRQS | \ | ||
272 | IDE_HFLAG_BOOTABLE) | ||
273 | |||
273 | #define DECLARE_AMD_DEV(name_str) \ | 274 | #define DECLARE_AMD_DEV(name_str) \ |
274 | { \ | 275 | { \ |
275 | .name = name_str, \ | 276 | .name = name_str, \ |
276 | .init_chipset = init_chipset_amd74xx, \ | 277 | .init_chipset = init_chipset_amd74xx, \ |
277 | .init_hwif = init_hwif_amd74xx, \ | 278 | .init_hwif = init_hwif_amd74xx, \ |
278 | .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \ | 279 | .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \ |
279 | .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST | \ | 280 | .host_flags = IDE_HFLAGS_AMD, \ |
280 | IDE_HFLAG_PIO_NO_DOWNGRADE | \ | ||
281 | IDE_HFLAG_POST_SET_MODE | \ | ||
282 | IDE_HFLAG_BOOTABLE, \ | ||
283 | .pio_mask = ATA_PIO5, \ | 281 | .pio_mask = ATA_PIO5, \ |
284 | .swdma_mask = ATA_SWDMA2, \ | 282 | .swdma_mask = ATA_SWDMA2, \ |
285 | .mwdma_mask = ATA_MWDMA2, \ | 283 | .mwdma_mask = ATA_MWDMA2, \ |
@@ -291,10 +289,7 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) | |||
291 | .init_chipset = init_chipset_amd74xx, \ | 289 | .init_chipset = init_chipset_amd74xx, \ |
292 | .init_hwif = init_hwif_amd74xx, \ | 290 | .init_hwif = init_hwif_amd74xx, \ |
293 | .enablebits = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \ | 291 | .enablebits = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \ |
294 | .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST | \ | 292 | .host_flags = IDE_HFLAGS_AMD, \ |
295 | IDE_HFLAG_PIO_NO_DOWNGRADE | \ | ||
296 | IDE_HFLAG_POST_SET_MODE | \ | ||
297 | IDE_HFLAG_BOOTABLE, \ | ||
298 | .pio_mask = ATA_PIO5, \ | 293 | .pio_mask = ATA_PIO5, \ |
299 | .swdma_mask = ATA_SWDMA2, \ | 294 | .swdma_mask = ATA_SWDMA2, \ |
300 | .mwdma_mask = ATA_MWDMA2, \ | 295 | .mwdma_mask = ATA_MWDMA2, \ |
diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c index 0dce459b1269..7b5f7b6d3e0d 100644 --- a/drivers/ide/pci/sl82c105.c +++ b/drivers/ide/pci/sl82c105.c | |||
@@ -361,13 +361,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) | |||
361 | hwif->selectproc = &sl82c105_selectproc; | 361 | hwif->selectproc = &sl82c105_selectproc; |
362 | hwif->resetproc = &sl82c105_resetproc; | 362 | hwif->resetproc = &sl82c105_resetproc; |
363 | 363 | ||
364 | /* | ||
365 | * We support 32-bit I/O on this interface, and | ||
366 | * it doesn't have problems with interrupts. | ||
367 | */ | ||
368 | hwif->drives[0].io_32bit = hwif->drives[1].io_32bit = 1; | ||
369 | hwif->drives[0].unmask = hwif->drives[1].unmask = 1; | ||
370 | |||
371 | if (!hwif->dma_base) | 364 | if (!hwif->dma_base) |
372 | return; | 365 | return; |
373 | 366 | ||
@@ -399,7 +392,10 @@ static ide_pci_device_t sl82c105_chipset __devinitdata = { | |||
399 | .init_chipset = init_chipset_sl82c105, | 392 | .init_chipset = init_chipset_sl82c105, |
400 | .init_hwif = init_hwif_sl82c105, | 393 | .init_hwif = init_hwif_sl82c105, |
401 | .enablebits = {{0x40,0x01,0x01}, {0x40,0x10,0x10}}, | 394 | .enablebits = {{0x40,0x01,0x01}, {0x40,0x10,0x10}}, |
402 | .host_flags = IDE_HFLAG_NO_AUTODMA | IDE_HFLAG_BOOTABLE, | 395 | .host_flags = IDE_HFLAG_IO_32BIT | |
396 | IDE_HFLAG_UNMASK_IRQS | | ||
397 | IDE_HFLAG_NO_AUTODMA | | ||
398 | IDE_HFLAG_BOOTABLE, | ||
403 | .pio_mask = ATA_PIO5, | 399 | .pio_mask = ATA_PIO5, |
404 | }; | 400 | }; |
405 | 401 | ||
diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c index 27e5b410123a..14979f4df362 100644 --- a/drivers/ide/pci/via82cxxx.c +++ b/drivers/ide/pci/via82cxxx.c | |||
@@ -422,17 +422,9 @@ static u8 __devinit via82cxxx_cable_detect(ide_hwif_t *hwif) | |||
422 | 422 | ||
423 | static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif) | 423 | static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif) |
424 | { | 424 | { |
425 | struct via82cxxx_dev *vdev = pci_get_drvdata(hwif->pci_dev); | ||
426 | int i; | ||
427 | |||
428 | hwif->set_pio_mode = &via_set_pio_mode; | 425 | hwif->set_pio_mode = &via_set_pio_mode; |
429 | hwif->set_dma_mode = &via_set_drive; | 426 | hwif->set_dma_mode = &via_set_drive; |
430 | 427 | ||
431 | for (i = 0; i < 2; i++) { | ||
432 | hwif->drives[i].io_32bit = 1; | ||
433 | hwif->drives[i].unmask = (vdev->via_config->flags & VIA_NO_UNMASK) ? 0 : 1; | ||
434 | } | ||
435 | |||
436 | if (!hwif->dma_base) | 428 | if (!hwif->dma_base) |
437 | return; | 429 | return; |
438 | 430 | ||
@@ -440,17 +432,20 @@ static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif) | |||
440 | hwif->cbl = via82cxxx_cable_detect(hwif); | 432 | hwif->cbl = via82cxxx_cable_detect(hwif); |
441 | } | 433 | } |
442 | 434 | ||
435 | #define IDE_HFLAGS_VIA \ | ||
436 | (IDE_HFLAG_PIO_NO_BLACKLIST | \ | ||
437 | IDE_HFLAG_PIO_NO_DOWNGRADE | \ | ||
438 | IDE_HFLAG_POST_SET_MODE | \ | ||
439 | IDE_HFLAG_IO_32BIT | \ | ||
440 | IDE_HFLAG_BOOTABLE) | ||
441 | |||
443 | static ide_pci_device_t via82cxxx_chipsets[] __devinitdata = { | 442 | static ide_pci_device_t via82cxxx_chipsets[] __devinitdata = { |
444 | { /* 0 */ | 443 | { /* 0 */ |
445 | .name = "VP_IDE", | 444 | .name = "VP_IDE", |
446 | .init_chipset = init_chipset_via82cxxx, | 445 | .init_chipset = init_chipset_via82cxxx, |
447 | .init_hwif = init_hwif_via82cxxx, | 446 | .init_hwif = init_hwif_via82cxxx, |
448 | .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, | 447 | .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, |
449 | .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST | | 448 | .host_flags = IDE_HFLAGS_VIA | IDE_HFLAG_NO_AUTODMA, |
450 | IDE_HFLAG_PIO_NO_DOWNGRADE | | ||
451 | IDE_HFLAG_POST_SET_MODE | | ||
452 | IDE_HFLAG_NO_AUTODMA | | ||
453 | IDE_HFLAG_BOOTABLE, | ||
454 | .pio_mask = ATA_PIO5, | 449 | .pio_mask = ATA_PIO5, |
455 | .swdma_mask = ATA_SWDMA2, | 450 | .swdma_mask = ATA_SWDMA2, |
456 | .mwdma_mask = ATA_MWDMA2, | 451 | .mwdma_mask = ATA_MWDMA2, |
@@ -459,10 +454,7 @@ static ide_pci_device_t via82cxxx_chipsets[] __devinitdata = { | |||
459 | .init_chipset = init_chipset_via82cxxx, | 454 | .init_chipset = init_chipset_via82cxxx, |
460 | .init_hwif = init_hwif_via82cxxx, | 455 | .init_hwif = init_hwif_via82cxxx, |
461 | .enablebits = {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, | 456 | .enablebits = {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, |
462 | .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST | | 457 | .host_flags = IDE_HFLAGS_VIA, |
463 | IDE_HFLAG_PIO_NO_DOWNGRADE | | ||
464 | IDE_HFLAG_POST_SET_MODE | | ||
465 | IDE_HFLAG_BOOTABLE, | ||
466 | .pio_mask = ATA_PIO5, | 458 | .pio_mask = ATA_PIO5, |
467 | .swdma_mask = ATA_SWDMA2, | 459 | .swdma_mask = ATA_SWDMA2, |
468 | .mwdma_mask = ATA_MWDMA2, | 460 | .mwdma_mask = ATA_MWDMA2, |
@@ -485,6 +477,11 @@ static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_i | |||
485 | return -ENODEV; | 477 | return -ENODEV; |
486 | } | 478 | } |
487 | 479 | ||
480 | if (via_config->flags & VIA_NO_UNMASK) | ||
481 | d->host_flags &= ~IDE_HFLAG_UNMASK_IRQS; | ||
482 | else | ||
483 | d->host_flags |= IDE_HFLAG_UNMASK_IRQS; | ||
484 | |||
488 | #ifdef CONFIG_PPC_CHRP | 485 | #ifdef CONFIG_PPC_CHRP |
489 | if (machine_is(chrp) && _chrp_type == _CHRP_Pegasos) | 486 | if (machine_is(chrp) && _chrp_type == _CHRP_Pegasos) |
490 | d->host_flags |= IDE_HFLAG_FORCE_LEGACY_IRQS; | 487 | d->host_flags |= IDE_HFLAG_FORCE_LEGACY_IRQS; |
diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c index a1d7efc9eaaf..d62b225f569f 100644 --- a/drivers/ide/setup-pci.c +++ b/drivers/ide/setup-pci.c | |||
@@ -573,6 +573,16 @@ void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, a | |||
573 | if ((d->host_flags & IDE_HFLAG_SERIALIZE) && hwif->mate) | 573 | if ((d->host_flags & IDE_HFLAG_SERIALIZE) && hwif->mate) |
574 | hwif->mate->serialized = hwif->serialized = 1; | 574 | hwif->mate->serialized = hwif->serialized = 1; |
575 | 575 | ||
576 | if (d->host_flags & IDE_HFLAG_IO_32BIT) { | ||
577 | hwif->drives[0].io_32bit = 1; | ||
578 | hwif->drives[1].io_32bit = 1; | ||
579 | } | ||
580 | |||
581 | if (d->host_flags & IDE_HFLAG_UNMASK_IRQS) { | ||
582 | hwif->drives[0].unmask = 1; | ||
583 | hwif->drives[1].unmask = 1; | ||
584 | } | ||
585 | |||
576 | if (hwif->dma_base) { | 586 | if (hwif->dma_base) { |
577 | hwif->swdma_mask = d->swdma_mask; | 587 | hwif->swdma_mask = d->swdma_mask; |
578 | hwif->mwdma_mask = d->mwdma_mask; | 588 | hwif->mwdma_mask = d->mwdma_mask; |
diff --git a/include/linux/ide.h b/include/linux/ide.h index c5b52dd16a89..258a15cc2746 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -1267,6 +1267,10 @@ enum { | |||
1267 | IDE_HFLAG_FORCE_LEGACY_IRQS = (1 << 22), | 1267 | IDE_HFLAG_FORCE_LEGACY_IRQS = (1 << 22), |
1268 | /* limit LBA48 requests to 256 sectors */ | 1268 | /* limit LBA48 requests to 256 sectors */ |
1269 | IDE_HFLAG_RQSIZE_256 = (1 << 23), | 1269 | IDE_HFLAG_RQSIZE_256 = (1 << 23), |
1270 | /* use 32-bit I/O ops */ | ||
1271 | IDE_HFLAG_IO_32BIT = (1 << 24), | ||
1272 | /* unmask IRQs */ | ||
1273 | IDE_HFLAG_UNMASK_IRQS = (1 << 25), | ||
1270 | }; | 1274 | }; |
1271 | 1275 | ||
1272 | #ifdef CONFIG_BLK_DEV_OFFBOARD | 1276 | #ifdef CONFIG_BLK_DEV_OFFBOARD |