35 #include <linux/kernel.h>
36 #include <linux/module.h>
38 #include <linux/pci.h>
43 #include <linux/device.h>
47 #define DRV_NAME "pdc_adma"
48 #define DRV_VERSION "1.0"
51 #define ADMA_ATA_REGS(base, port_no) ((base) + ((port_no) * 0x40))
54 #define ADMA_REGS(base, port_no) ((base) + 0x80 + ((port_no) * 0x20))
57 #define ADMA_PORT_REGS(ap) \
58 ADMA_REGS((ap)->host->iomap[ADMA_MMIO_BAR], ap->port_no)
132 static int adma_ata_init_one(
struct pci_dev *pdev,
134 static int adma_port_start(
struct ata_port *ap);
135 static void adma_port_stop(
struct ata_port *ap);
139 static void adma_freeze(
struct ata_port *ap);
140 static void adma_thaw(
struct ata_port *ap);
141 static int adma_prereset(
struct ata_link *
link,
unsigned long deadline);
154 .check_atapi_dma = adma_check_atapi_dma,
155 .qc_prep = adma_qc_prep,
156 .qc_issue = adma_qc_issue,
158 .freeze = adma_freeze,
160 .prereset = adma_prereset,
162 .port_start = adma_port_start,
163 .port_stop = adma_port_stop,
172 .port_ops = &adma_ata_ops,
182 static struct pci_driver adma_ata_pci_driver = {
184 .id_table = adma_ata_pci_tbl,
185 .probe = adma_ata_init_one,
186 .remove = ata_pci_remove_one,
194 static void adma_reset_engine(
struct ata_port *ap)
205 static void adma_reinit_engine(
struct ata_port *ap)
215 adma_reset_engine(ap);
233 static inline void adma_enter_reg_mode(
struct ata_port *ap)
241 static void adma_freeze(
struct ata_port *ap)
256 static void adma_thaw(
struct ata_port *ap)
258 adma_reinit_engine(ap);
261 static int adma_prereset(
struct ata_link *
link,
unsigned long deadline)
268 adma_reinit_engine(ap);
279 int i = (2 + buf[3]) * 8;
297 buf[i++] = qc->
dev->dma_mode & 0xf;
305 VPRINTK(
"PRD[%u] = (0x%lX, 0x%X)\n", i/4,
306 (
unsigned long)addr, len);
324 adma_enter_reg_mode(qc->
ap);
343 buf[i++] = qc->
tf.device;
346 buf[i++] = qc->
tf.hob_nsect;
348 buf[i++] = qc->
tf.hob_lbal;
350 buf[i++] = qc->
tf.hob_lbam;
352 buf[i++] = qc->
tf.hob_lbah;
355 buf[i++] = qc->
tf.nsect;
357 buf[i++] = qc->
tf.lbal;
359 buf[i++] = qc->
tf.lbam;
361 buf[i++] = qc->
tf.lbah;
367 buf[i++] = qc->
tf.command;
370 buf[3] = (i >> 3) - 2;
373 i = adma_fill_sg(qc);
379 static char obuf[2048];
380 for (j = 0; j <
i; ++
j) {
381 len +=
sprintf(obuf+len,
"%02x ", buf[j]);
408 switch (qc->
tf.protocol) {
411 adma_packet_start(qc);
426 static inline unsigned int adma_intr_pkt(
struct ata_host *
host)
428 unsigned int handled = 0,
port_no;
440 adma_enter_reg_mode(ap);
444 qc = ata_qc_from_tag(ap, ap->
link.active_tag);
462 "ADMA-status 0x%02X", status);
464 "pkt[0] 0x%02X", pp->
pkt[0]);
476 static inline unsigned int adma_intr_mmio(
struct ata_host *host)
478 unsigned int handled = 0,
port_no;
487 qc = ata_qc_from_tag(ap, ap->
link.active_tag);
494 DPRINTK(
"ata%u: protocol %d (dev_stat 0x%X)\n",
499 qc->
err_mask |= ac_err_mask(status);
518 static irqreturn_t adma_intr(
int irq,
void *dev_instance)
520 struct ata_host *host = dev_instance;
521 unsigned int handled = 0;
525 spin_lock(&host->
lock);
526 handled = adma_intr_pkt(host) | adma_intr_mmio(host);
527 spin_unlock(&host->
lock);
534 static void adma_ata_setup_port(
struct ata_ioports *
port,
void __iomem *base)
537 port->data_addr = base + 0x000;
539 port->feature_addr = base + 0x004;
540 port->nsect_addr = base + 0x008;
541 port->lbal_addr = base + 0x00c;
542 port->lbam_addr = base + 0x010;
543 port->lbah_addr = base + 0x014;
544 port->device_addr = base + 0x018;
546 port->command_addr = base + 0x01c;
547 port->altstatus_addr =
548 port->ctl_addr = base + 0x038;
551 static int adma_port_start(
struct ata_port *ap)
556 adma_enter_reg_mode(ap);
572 adma_reinit_engine(ap);
576 static void adma_port_stop(
struct ata_port *ap)
578 adma_reset_engine(ap);
581 static void adma_host_init(
struct ata_host *host,
unsigned int chip_id)
590 adma_reset_engine(host->
ports[port_no]);
599 dev_err(&pdev->
dev,
"32-bit DMA enable failed\n");
602 rc = pci_set_consistent_dma_mask(pdev,
DMA_BIT_MASK(32));
604 dev_err(&pdev->
dev,
"32-bit consistent DMA enable failed\n");
610 static int adma_ata_init_one(
struct pci_dev *pdev,
640 rc = adma_set_dma_masks(pdev, mmio_base);
649 adma_ata_setup_port(&ap->ioaddr, port_base);
656 adma_host_init(host, board_idx);