// SPDX-License-Identifier: GPL-2.0-only /* * pata_pdc202xx_old.c - Promise PDC202xx PATA for new ATA layer * (C) 2005 Red Hat Inc * Alan Cox <[email protected]> * (C) 2007,2009,2010 Bartlomiej Zolnierkiewicz * * Based in part on linux/drivers/ide/pci/pdc202xx_old.c * * First cut with LBA48/ATAPI * * TODO: * Channel interlock/reset on both required ? */ #include <linux/kernel.h> #include <linux/module.h> #include <linux/pci.h> #include <linux/blkdev.h> #include <linux/delay.h> #include <scsi/scsi_host.h> #include <linux/libata.h> #define DRV_NAME … #define DRV_VERSION … static int pdc2026x_cable_detect(struct ata_port *ap) { … } static void pdc202xx_exec_command(struct ata_port *ap, const struct ata_taskfile *tf) { … } static bool pdc202xx_irq_check(struct ata_port *ap) { … } /** * pdc202xx_configure_piomode - set chip PIO timing * @ap: ATA interface * @adev: ATA device * @pio: PIO mode * * Called to do the PIO mode setup. Our timing registers are shared * so a configure_dmamode call will undo any work we do here and vice * versa */ static void pdc202xx_configure_piomode(struct ata_port *ap, struct ata_device *adev, int pio) { … } /** * pdc202xx_set_piomode - set initial PIO mode data * @ap: ATA interface * @adev: ATA device * * Called to do the PIO mode setup. Our timing registers are shared * but we want to set the PIO timing by default. */ static void pdc202xx_set_piomode(struct ata_port *ap, struct ata_device *adev) { … } /** * pdc202xx_set_dmamode - set DMA mode in chip * @ap: ATA interface * @adev: ATA device * * Load DMA cycle times into the chip ready for a DMA transfer * to occur. */ static void pdc202xx_set_dmamode(struct ata_port *ap, struct ata_device *adev) { … } /** * pdc2026x_bmdma_start - DMA engine begin * @qc: ATA command * * In UDMA3 or higher we have to clock switch for the duration of the * DMA transfer sequence. * * Note: The host lock held by the libata layer protects * us from two channels both trying to set DMA bits at once */ static void pdc2026x_bmdma_start(struct ata_queued_cmd *qc) { … } /** * pdc2026x_bmdma_stop - DMA engine stop * @qc: ATA command * * After a DMA completes we need to put the clock back to 33MHz for * PIO timings. * * Note: The host lock held by the libata layer protects * us from two channels both trying to set DMA bits at once */ static void pdc2026x_bmdma_stop(struct ata_queued_cmd *qc) { … } /** * pdc2026x_dev_config - device setup hook * @adev: newly found device * * Perform chip specific early setup. We need to lock the transfer * sizes to 8bit to avoid making the state engine on the 2026x cards * barf. */ static void pdc2026x_dev_config(struct ata_device *adev) { … } static int pdc2026x_port_start(struct ata_port *ap) { … } /** * pdc2026x_check_atapi_dma - Check whether ATAPI DMA can be supported for this command * @qc: Metadata associated with taskfile to check * * Just say no - not supported on older Promise. * * LOCKING: * None (inherited from caller). * * RETURNS: 0 when ATAPI DMA can be used * 1 otherwise */ static int pdc2026x_check_atapi_dma(struct ata_queued_cmd *qc) { … } static const struct scsi_host_template pdc202xx_sht = …; static struct ata_port_operations pdc2024x_port_ops = …; static struct ata_port_operations pdc2026x_port_ops = …; static int pdc202xx_init_one(struct pci_dev *dev, const struct pci_device_id *id) { … } static const struct pci_device_id pdc202xx[] = …; static struct pci_driver pdc202xx_pci_driver = …; module_pci_driver(…) …; MODULE_AUTHOR(…) …; MODULE_DESCRIPTION(…) …; MODULE_LICENSE(…) …; MODULE_DEVICE_TABLE(pci, pdc202xx); MODULE_VERSION(…);