diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-02-02 13:56:31 -0500 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-02-02 13:56:31 -0500 |
commit | c413b9b94d9a8e7548cc4b2e04b7df0439ce76fd (patch) | |
tree | 5d23110a0d1f87ad0c88fb1746194e532808eaab /drivers/ide/pci/sgiioc4.c | |
parent | 1ebf74936b1fccb5b65940f99ccddd74ec4d1fef (diff) |
ide: add struct ide_port_info instances to legacy host drivers
* Remove 'struct pci_dev *dev' argument from ide_hwif_setup_dma().
* Un-static ide_hwif_setup_dma() and add CONFIG_BLK_DEV_IDEDMA_PCI=n version.
* Add 'const struct ide_port_info *d' argument to ide_device_add[_all]().
* Factor out generic ports init from ide_pci_setup_ports() to ide_init_port(),
move it to ide-probe.c and call it in in ide_device_add_all() instead of
ide_pci_setup_ports().
* Move ->mate setup to ide_device_add_all() from ide_port_init().
* Add IDE_HFLAG_NO_AUTOTUNE host flag for host drivers that don't enable
->autotune currently.
* Setup hwif->chipset in ide_init_port() but iff pi->chipset is set
(to not override setup done by ide_hwif_configure()).
* Add ETRAX host handling to ide_device_add_all().
* cmd640.c: set IDE_HFLAG_ABUSE_* also for CONFIG_BLK_DEV_CMD640_ENHANCED=n.
* pmac.c: make pmac_ide_setup_dma() return an error value and move DMA masks
setup to pmac_ide_setup_device().
* Add 'struct ide_port_info' instances to legacy host drivers, pass them to
ide_device_add() calls and then remove open-coded ports initialization.
Reviewed-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/pci/sgiioc4.c')
-rw-r--r-- | drivers/ide/pci/sgiioc4.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c index 85902074b1fc..651845bf1ae5 100644 --- a/drivers/ide/pci/sgiioc4.c +++ b/drivers/ide/pci/sgiioc4.c | |||
@@ -555,7 +555,6 @@ static void __devinit | |||
555 | ide_init_sgiioc4(ide_hwif_t * hwif) | 555 | ide_init_sgiioc4(ide_hwif_t * hwif) |
556 | { | 556 | { |
557 | hwif->mmio = 1; | 557 | hwif->mmio = 1; |
558 | hwif->pio_mask = 0x00; | ||
559 | hwif->set_pio_mode = NULL; /* Sets timing for PIO mode */ | 558 | hwif->set_pio_mode = NULL; /* Sets timing for PIO mode */ |
560 | hwif->set_dma_mode = &sgiioc4_set_dma_mode; | 559 | hwif->set_dma_mode = &sgiioc4_set_dma_mode; |
561 | hwif->selectproc = NULL;/* Use the default routine to select drive */ | 560 | hwif->selectproc = NULL;/* Use the default routine to select drive */ |
@@ -572,8 +571,6 @@ ide_init_sgiioc4(ide_hwif_t * hwif) | |||
572 | if (hwif->dma_base == 0) | 571 | if (hwif->dma_base == 0) |
573 | return; | 572 | return; |
574 | 573 | ||
575 | hwif->mwdma_mask = ATA_MWDMA2_ONLY; | ||
576 | |||
577 | hwif->dma_host_set = &sgiioc4_dma_host_set; | 574 | hwif->dma_host_set = &sgiioc4_dma_host_set; |
578 | hwif->dma_setup = &sgiioc4_ide_dma_setup; | 575 | hwif->dma_setup = &sgiioc4_ide_dma_setup; |
579 | hwif->dma_start = &sgiioc4_ide_dma_start; | 576 | hwif->dma_start = &sgiioc4_ide_dma_start; |
@@ -583,6 +580,13 @@ ide_init_sgiioc4(ide_hwif_t * hwif) | |||
583 | hwif->dma_timeout = &ide_dma_timeout; | 580 | hwif->dma_timeout = &ide_dma_timeout; |
584 | } | 581 | } |
585 | 582 | ||
583 | static const struct ide_port_info sgiioc4_port_info __devinitdata = { | ||
584 | .chipset = ide_pci, | ||
585 | .host_flags = IDE_HFLAG_NO_DMA | /* no SFF-style DMA */ | ||
586 | IDE_HFLAG_NO_AUTOTUNE, | ||
587 | .mwdma_mask = ATA_MWDMA2_ONLY, | ||
588 | }; | ||
589 | |||
586 | static int __devinit | 590 | static int __devinit |
587 | sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | 591 | sgiioc4_ide_setup_pci_device(struct pci_dev *dev) |
588 | { | 592 | { |
@@ -593,6 +597,7 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
593 | int h; | 597 | int h; |
594 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | 598 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; |
595 | hw_regs_t hw; | 599 | hw_regs_t hw; |
600 | struct ide_port_info d = sgiioc4_port_info; | ||
596 | 601 | ||
597 | /* | 602 | /* |
598 | * Find an empty HWIF; if none available, return -ENOMEM. | 603 | * Find an empty HWIF; if none available, return -ENOMEM. |
@@ -641,7 +646,6 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
641 | ide_init_port_hw(hwif, &hw); | 646 | ide_init_port_hw(hwif, &hw); |
642 | 647 | ||
643 | hwif->dev = &dev->dev; | 648 | hwif->dev = &dev->dev; |
644 | hwif->channel = 0; /* Single Channel chip */ | ||
645 | 649 | ||
646 | /* The IOC4 uses MMIO rather than Port IO. */ | 650 | /* The IOC4 uses MMIO rather than Port IO. */ |
647 | default_hwif_mmiops(hwif); | 651 | default_hwif_mmiops(hwif); |
@@ -649,15 +653,17 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
649 | /* Initializing chipset IRQ Registers */ | 653 | /* Initializing chipset IRQ Registers */ |
650 | writel(0x03, (void __iomem *)(irqport + IOC4_INTR_SET * 4)); | 654 | writel(0x03, (void __iomem *)(irqport + IOC4_INTR_SET * 4)); |
651 | 655 | ||
652 | if (dma_base == 0 || ide_dma_sgiioc4(hwif, dma_base)) | 656 | if (dma_base == 0 || ide_dma_sgiioc4(hwif, dma_base)) { |
653 | printk(KERN_INFO "%s: %s Bus-Master DMA disabled\n", | 657 | printk(KERN_INFO "%s: %s Bus-Master DMA disabled\n", |
654 | hwif->name, DRV_NAME); | 658 | hwif->name, DRV_NAME); |
659 | d.mwdma_mask = 0; | ||
660 | } | ||
655 | 661 | ||
656 | ide_init_sgiioc4(hwif); | 662 | ide_init_sgiioc4(hwif); |
657 | 663 | ||
658 | idx[0] = hwif->index; | 664 | idx[0] = hwif->index; |
659 | 665 | ||
660 | if (ide_device_add(idx)) | 666 | if (ide_device_add(idx, &d)) |
661 | return -EIO; | 667 | return -EIO; |
662 | 668 | ||
663 | return 0; | 669 | return 0; |