Lines Matching refs:drv_data

263 static u16 ep93xx_pata_read(struct ep93xx_pata_data *drv_data,  in ep93xx_pata_read()  argument
267 void __iomem *base = drv_data->ide_base; in ep93xx_pata_read()
268 const struct ata_timing *t = &drv_data->t; in ep93xx_pata_read()
279 ep93xx_pata_rw_end(base, addr, drv_data->iordy, t0, t2, t2i); in ep93xx_pata_read()
284 static u16 ep93xx_pata_read_reg(struct ep93xx_pata_data *drv_data, in ep93xx_pata_read_reg() argument
287 return ep93xx_pata_read(drv_data, addr, true); in ep93xx_pata_read_reg()
291 static u16 ep93xx_pata_read_data(struct ep93xx_pata_data *drv_data, in ep93xx_pata_read_data() argument
294 return ep93xx_pata_read(drv_data, addr, false); in ep93xx_pata_read_data()
297 static void ep93xx_pata_write(struct ep93xx_pata_data *drv_data, in ep93xx_pata_write() argument
301 void __iomem *base = drv_data->ide_base; in ep93xx_pata_write()
302 const struct ata_timing *t = &drv_data->t; in ep93xx_pata_write()
314 ep93xx_pata_rw_end(base, addr, drv_data->iordy, t0, t2, t2i); in ep93xx_pata_write()
318 static void ep93xx_pata_write_reg(struct ep93xx_pata_data *drv_data, in ep93xx_pata_write_reg() argument
321 ep93xx_pata_write(drv_data, value, addr, true); in ep93xx_pata_write_reg()
325 static void ep93xx_pata_write_data(struct ep93xx_pata_data *drv_data, in ep93xx_pata_write_data() argument
328 ep93xx_pata_write(drv_data, value, addr, false); in ep93xx_pata_write_data()
334 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_set_piomode() local
345 ata_timing_compute(adev, adev->pio_mode, &drv_data->t, T, 0); in ep93xx_pata_set_piomode()
349 ata_timing_merge(&t, &drv_data->t, &drv_data->t, in ep93xx_pata_set_piomode()
352 drv_data->iordy = ata_pio_need_iordy(adev); in ep93xx_pata_set_piomode()
354 ep93xx_pata_enable_pio(drv_data->ide_base, in ep93xx_pata_set_piomode()
361 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_check_status() local
363 return ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_STATUS); in ep93xx_pata_check_status()
368 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_check_altstatus() local
370 return ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_ALTSTATUS); in ep93xx_pata_check_altstatus()
377 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_tf_load() local
381 ep93xx_pata_write_reg(drv_data, tf->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_tf_load()
387 ep93xx_pata_write_reg(drv_data, tf->hob_feature, in ep93xx_pata_tf_load()
389 ep93xx_pata_write_reg(drv_data, tf->hob_nsect, in ep93xx_pata_tf_load()
391 ep93xx_pata_write_reg(drv_data, tf->hob_lbal, in ep93xx_pata_tf_load()
393 ep93xx_pata_write_reg(drv_data, tf->hob_lbam, in ep93xx_pata_tf_load()
395 ep93xx_pata_write_reg(drv_data, tf->hob_lbah, in ep93xx_pata_tf_load()
400 ep93xx_pata_write_reg(drv_data, tf->feature, in ep93xx_pata_tf_load()
402 ep93xx_pata_write_reg(drv_data, tf->nsect, IDECTRL_ADDR_NSECT); in ep93xx_pata_tf_load()
403 ep93xx_pata_write_reg(drv_data, tf->lbal, IDECTRL_ADDR_LBAL); in ep93xx_pata_tf_load()
404 ep93xx_pata_write_reg(drv_data, tf->lbam, IDECTRL_ADDR_LBAM); in ep93xx_pata_tf_load()
405 ep93xx_pata_write_reg(drv_data, tf->lbah, IDECTRL_ADDR_LBAH); in ep93xx_pata_tf_load()
409 ep93xx_pata_write_reg(drv_data, tf->device, in ep93xx_pata_tf_load()
418 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_tf_read() local
421 tf->error = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_FEATURE); in ep93xx_pata_tf_read()
422 tf->nsect = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_NSECT); in ep93xx_pata_tf_read()
423 tf->lbal = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAL); in ep93xx_pata_tf_read()
424 tf->lbam = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAM); in ep93xx_pata_tf_read()
425 tf->lbah = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAH); in ep93xx_pata_tf_read()
426 tf->device = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_DEVICE); in ep93xx_pata_tf_read()
429 ep93xx_pata_write_reg(drv_data, tf->ctl | ATA_HOB, in ep93xx_pata_tf_read()
431 tf->hob_feature = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
433 tf->hob_nsect = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
435 tf->hob_lbal = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
437 tf->hob_lbam = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
439 tf->hob_lbah = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
441 ep93xx_pata_write_reg(drv_data, tf->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_tf_read()
450 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_exec_command() local
452 ep93xx_pata_write_reg(drv_data, tf->command, in ep93xx_pata_exec_command()
460 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_dev_select() local
466 ep93xx_pata_write_reg(drv_data, tmp, IDECTRL_ADDR_DEVICE); in ep93xx_pata_dev_select()
473 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_set_devctl() local
475 ep93xx_pata_write_reg(drv_data, ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_set_devctl()
484 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_data_xfer() local
493 drv_data, IDECTRL_ADDR_DATA)); in ep93xx_pata_data_xfer()
495 ep93xx_pata_write_data(drv_data, le16_to_cpu(*data++), in ep93xx_pata_data_xfer()
507 drv_data, IDECTRL_ADDR_DATA)); in ep93xx_pata_data_xfer()
511 ep93xx_pata_write_data(drv_data, le16_to_cpu(*pad), in ep93xx_pata_data_xfer()
524 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_device_is_present() local
529 ep93xx_pata_write_reg(drv_data, 0x55, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
530 ep93xx_pata_write_reg(drv_data, 0xaa, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
532 ep93xx_pata_write_reg(drv_data, 0xaa, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
533 ep93xx_pata_write_reg(drv_data, 0x55, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
535 ep93xx_pata_write_reg(drv_data, 0x55, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
536 ep93xx_pata_write_reg(drv_data, 0xaa, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
538 nsect = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
539 lbal = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
553 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_wait_after_reset() local
586 nsect = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_wait_after_reset()
588 lbal = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_wait_after_reset()
616 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_bus_softreset() local
618 ep93xx_pata_write_reg(drv_data, ap->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_bus_softreset()
620 ep93xx_pata_write_reg(drv_data, ap->ctl | ATA_SRST, IDECTRL_ADDR_CTL); in ep93xx_pata_bus_softreset()
622 ep93xx_pata_write_reg(drv_data, ap->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_bus_softreset()
628 static void ep93xx_pata_release_dma(struct ep93xx_pata_data *drv_data) in ep93xx_pata_release_dma() argument
630 if (drv_data->dma_rx_channel) { in ep93xx_pata_release_dma()
631 dma_release_channel(drv_data->dma_rx_channel); in ep93xx_pata_release_dma()
632 drv_data->dma_rx_channel = NULL; in ep93xx_pata_release_dma()
634 if (drv_data->dma_tx_channel) { in ep93xx_pata_release_dma()
635 dma_release_channel(drv_data->dma_tx_channel); in ep93xx_pata_release_dma()
636 drv_data->dma_tx_channel = NULL; in ep93xx_pata_release_dma()
649 static void ep93xx_pata_dma_init(struct ep93xx_pata_data *drv_data) in ep93xx_pata_dma_init() argument
651 const struct platform_device *pdev = drv_data->pdev; in ep93xx_pata_dma_init()
663 drv_data->dma_rx_data.port = EP93XX_DMA_IDE; in ep93xx_pata_dma_init()
664 drv_data->dma_rx_data.direction = DMA_DEV_TO_MEM; in ep93xx_pata_dma_init()
665 drv_data->dma_rx_data.name = "ep93xx-pata-rx"; in ep93xx_pata_dma_init()
666 drv_data->dma_rx_channel = dma_request_channel(mask, in ep93xx_pata_dma_init()
667 ep93xx_pata_dma_filter, &drv_data->dma_rx_data); in ep93xx_pata_dma_init()
668 if (!drv_data->dma_rx_channel) in ep93xx_pata_dma_init()
671 drv_data->dma_tx_data.port = EP93XX_DMA_IDE; in ep93xx_pata_dma_init()
672 drv_data->dma_tx_data.direction = DMA_MEM_TO_DEV; in ep93xx_pata_dma_init()
673 drv_data->dma_tx_data.name = "ep93xx-pata-tx"; in ep93xx_pata_dma_init()
674 drv_data->dma_tx_channel = dma_request_channel(mask, in ep93xx_pata_dma_init()
675 ep93xx_pata_dma_filter, &drv_data->dma_tx_data); in ep93xx_pata_dma_init()
676 if (!drv_data->dma_tx_channel) { in ep93xx_pata_dma_init()
677 dma_release_channel(drv_data->dma_rx_channel); in ep93xx_pata_dma_init()
684 conf.src_addr = drv_data->udma_in_phys; in ep93xx_pata_dma_init()
686 if (dmaengine_slave_config(drv_data->dma_rx_channel, &conf)) { in ep93xx_pata_dma_init()
688 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_dma_init()
695 conf.dst_addr = drv_data->udma_out_phys; in ep93xx_pata_dma_init()
697 if (dmaengine_slave_config(drv_data->dma_tx_channel, &conf)) { in ep93xx_pata_dma_init()
699 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_dma_init()
706 struct ep93xx_pata_data *drv_data = qc->ap->host->private_data; in ep93xx_pata_dma_start() local
707 void __iomem *base = drv_data->ide_base; in ep93xx_pata_dma_start()
711 ? drv_data->dma_tx_channel : drv_data->dma_rx_channel; in ep93xx_pata_dma_start()
746 struct ep93xx_pata_data *drv_data = qc->ap->host->private_data; in ep93xx_pata_dma_stop() local
747 void __iomem *base = drv_data->ide_base; in ep93xx_pata_dma_stop()
750 dmaengine_terminate_all(drv_data->dma_rx_channel); in ep93xx_pata_dma_stop()
751 dmaengine_terminate_all(drv_data->dma_tx_channel); in ep93xx_pata_dma_stop()
761 ep93xx_pata_enable_pio(drv_data->ide_base, in ep93xx_pata_dma_stop()
774 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_dma_status() local
775 u32 val = readl(drv_data->ide_base + IDEUDMASTS); in ep93xx_pata_dma_status()
795 if (readl(drv_data->ide_base + IDECTRL) & IDECTRL_INTRQ) in ep93xx_pata_dma_status()
846 struct ep93xx_pata_data *drv_data; in ep93xx_pata_drain_fifo() local
853 drv_data = ap->host->private_data; in ep93xx_pata_drain_fifo()
857 ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_DATA); in ep93xx_pata_drain_fifo()
866 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_port_start() local
872 drv_data->t = *ata_timing_find_mode(XFER_PIO_0); in ep93xx_pata_port_start()
922 struct ep93xx_pata_data *drv_data; in ep93xx_pata_probe() local
947 drv_data = devm_kzalloc(&pdev->dev, sizeof(*drv_data), GFP_KERNEL); in ep93xx_pata_probe()
948 if (!drv_data) { in ep93xx_pata_probe()
953 drv_data->pdev = pdev; in ep93xx_pata_probe()
954 drv_data->ide_base = ide_base; in ep93xx_pata_probe()
955 drv_data->udma_in_phys = mem_res->start + IDEUDMADATAIN; in ep93xx_pata_probe()
956 drv_data->udma_out_phys = mem_res->start + IDEUDMADATAOUT; in ep93xx_pata_probe()
957 ep93xx_pata_dma_init(drv_data); in ep93xx_pata_probe()
968 host->private_data = drv_data; in ep93xx_pata_probe()
985 if (drv_data->dma_rx_channel && drv_data->dma_tx_channel) { in ep93xx_pata_probe()
1007 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_probe()
1016 struct ep93xx_pata_data *drv_data = host->private_data; in ep93xx_pata_remove() local
1019 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_remove()
1020 ep93xx_pata_clear_regs(drv_data->ide_base); in ep93xx_pata_remove()