ide-pmac: use ->init_dma method
PATCH 3/7 ide-pmac: use ->init_dma method
* Move pmif->dma_regs check from pmac_ide_setup_device() to pmac_ide_init_dma().
* Get 'pmif' from 'hwif->hwif_data' in pmac_ide_init_dma() and replace 'pmac_ide_hwif_t *pmif' argument by 'const struct ide_port_info *d'.
* Add pmac_ide_init_dma() implementation for CONFIG_BLK_DEV_IDEDMA_PMAC=n case and convert the driver to use ->init_dma method.
Cc Benjamin Herrenschmidt <[email protected]>
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
--- drivers/ide/ppc/pmac.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
drivers/ide/ppc/pmac.c +12 -8
@@ -409,7 +409,7 @@ kauai_lookup_timing(struct kauai_timing**/ #define IDE_WAKEUP_DELAY (1*HZ) -static int pmac_ide_setup_dma (pmac_ide_hwif_t *pmif,ide_hwif_t *hwif); +static int pmac_ide_init_dma (ide_hwif_t *,const struct ide_port_info *);static int pmac_ide_build_dmatable (ide_drive_t *drive,struct request *rq);static void pmac_ide_selectproc (ide_drive_t *drive);static void pmac_ide_kauai_selectproc (ide_drive_t *drive);
@@ -931,11 +931,11 @@ static const struct ide_port_ops pmac_id };static const struct ide_port_info pmac_port_info = { + .init_dma = pmac_ide_init_dma, .chipset = ide_pmac, .port_ops = &pmac_ide_port_ops, .host_flags =IDE_HFLAG_SET_PIO_MODE_KEEP_DMA |IDE_HFLAG_POST_SET_MODE | -IDE_HFLAG_NO_DMA |/* no SFF-style DMA */ IDE_HFLAG_UNMASK_IRQS , .pio_mask =ATA_PIO4 , .mwdma_mask =ATA_MWDMA2 ,
@@ -1067,10 +1067,7 @@ pmac_ide_setup_device(pmac_ide_hwif_t *p#ifdef CONFIG_BLK_DEV_IDEDMA_PMAC if (pmif->cable_80 ==0 ) d.udma_mask &=ATA_UDMA2 ; -/* has a DBDMA controller channel */ - if (pmif->dma_regs == 0 || pmac_ide_setup_dma(pmif, hwif) < 0)#endif - d.udma_mask = d.mwdma_mask =0 ; idx[0 ] = hwif->index;
@@ -1677,14 +1674,16 @@ pmac_ide_dma_lost_irq (ide_drive_t *driv* Allocate the data structures needed for using DMA with an interface * and fill the proper list of functions pointers */ -static int __devinit pmac_ide_setup_dma (pmac_ide_hwif_t *pmif,ide_hwif_t *hwif) +static int __devinit pmac_ide_init_dma (ide_hwif_t *hwif, +const struct ide_port_info *d) { +pmac_ide_hwif_t *pmif = (pmac_ide_hwif_t *)hwif->hwif_data;struct pci_dev *dev =to_pci_dev (hwif->dev);/* We won't need pci_dev if we switch to generic consistent * DMA routines ... */ -if (dev ==NULL ) +if (dev ==NULL || pmif->dma_regs ==0 )return -ENODEV ;/* * Allocate space for the DBDMA commands.
@@ -1714,7 +1713,12 @@ static int __devinit pmac_ide_setup_dma( return 0; } - +#else +static int __devinit pmac_ide_init_dma (ide_hwif_t *hwif, +const struct ide_port_info *d) +{ +return -EOPNOTSUPP ; +}#endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */ module_init (pmac_ide_probe);