// SPDX-License-Identifier: GPL-2.0-only /* * pata_atiixp.c - ATI PATA for new ATA layer * (C) 2005 Red Hat Inc * (C) 2009-2010 Bartlomiej Zolnierkiewicz * * Based on * * linux/drivers/ide/pci/atiixp.c Version 0.01-bart2 Feb. 26, 2004 * * Copyright (C) 2003 ATI Inc. <[email protected]> * Copyright (C) 2004 Bartlomiej Zolnierkiewicz * */ #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> #include <linux/dmi.h> #define DRV_NAME … #define DRV_VERSION … enum { … }; static const struct dmi_system_id attixp_cable_override_dmi_table[] = …; static int atiixp_cable_detect(struct ata_port *ap) { … } static DEFINE_SPINLOCK(atiixp_lock); /** * atiixp_prereset - perform reset handling * @link: ATA link * @deadline: deadline jiffies for the operation * * Reset sequence checking enable bits to see which ports are * active. */ static int atiixp_prereset(struct ata_link *link, unsigned long deadline) { … } /** * atiixp_set_pio_timing - set initial PIO mode data * @ap: ATA interface * @adev: ATA device * @pio: Requested PIO * * Called by both the pio and dma setup functions to set the controller * timings for PIO transfers. We must load both the mode number and * timing values into the controller. */ static void atiixp_set_pio_timing(struct ata_port *ap, struct ata_device *adev, int pio) { … } /** * atiixp_set_piomode - set initial PIO mode data * @ap: ATA interface * @adev: ATA device * * Called to do the PIO mode setup. We use a shared helper for this * as the DMA setup must also adjust the PIO timing information. */ static void atiixp_set_piomode(struct ata_port *ap, struct ata_device *adev) { … } /** * atiixp_set_dmamode - set initial DMA mode data * @ap: ATA interface * @adev: ATA device * * Called to do the DMA mode setup. We use timing tables for most * modes but must tune an appropriate PIO mode to match. */ static void atiixp_set_dmamode(struct ata_port *ap, struct ata_device *adev) { … } /** * atiixp_bmdma_start - DMA start callback * @qc: Command in progress * * When DMA begins we need to ensure that the UDMA control * register for the channel is correctly set. * * Note: The host lock held by the libata layer protects * us from two channels both trying to set DMA bits at once */ static void atiixp_bmdma_start(struct ata_queued_cmd *qc) { … } /** * atiixp_bmdma_stop - DMA stop callback * @qc: Command in progress * * DMA has completed. Clear the UDMA flag as the next operations will * be PIO ones not UDMA data transfer. * * Note: The host lock held by the libata layer protects * us from two channels both trying to set DMA bits at once */ static void atiixp_bmdma_stop(struct ata_queued_cmd *qc) { … } static const struct scsi_host_template atiixp_sht = …; static struct ata_port_operations atiixp_port_ops = …; static int atiixp_init_one(struct pci_dev *pdev, const struct pci_device_id *id) { … } static const struct pci_device_id atiixp[] = …; static struct pci_driver atiixp_pci_driver = …; module_pci_driver(…) …; MODULE_AUTHOR(…) …; MODULE_DESCRIPTION(…) …; MODULE_LICENSE(…) …; MODULE_DEVICE_TABLE(pci, atiixp); MODULE_VERSION(…);