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 <benh@kernel.crashing.org> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
Родитель
b123f56e04
Коммит
0d07192297
|
@ -409,7 +409,7 @@ kauai_lookup_timing(struct kauai_timing* table, int cycle_time)
|
|||
*/
|
||||
#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_ide_port_ops = {
|
|||
};
|
||||
|
||||
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 *pmif, ide_hwif_t *hwif, hw_regs_t *hw)
|
|||
#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 *drive)
|
|||
* 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(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
|
|||
|
||||
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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче