diff options
| author | Jeff Garzik <jgarzik@pobox.com> | 2004-06-14 16:29:37 -0400 |
|---|---|---|
| committer | Jeff Garzik <jgarzik@pobox.com> | 2004-06-14 16:29:37 -0400 |
| commit | 2b13abe5a557a62c0ebb9ab24157d178fa23df20 (patch) | |
| tree | 85f9d2984da5d941071ae29ec052ac7db422d378 | |
| parent | 5ae20cc7a8f268c28b987b716b11b4dab4d14142 (diff) | |
[libata] ->qc_prep hook
Rename ->fill_sg hook to ->qc_prep, and call it unconditionally
(as opposed to ->fill_sg, which was called only when the
flag ATA_QCFLAG_SG was set).
| -rw-r--r-- | drivers/scsi/ata_piix.c | 4 | ||||
| -rw-r--r-- | drivers/scsi/libata-core.c | 50 | ||||
| -rw-r--r-- | drivers/scsi/sata_promise.c | 8 | ||||
| -rw-r--r-- | drivers/scsi/sata_sil.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/sata_sis.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/sata_svw.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/sata_sx4.c | 9 | ||||
| -rw-r--r-- | drivers/scsi/sata_via.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/sata_vsc.c | 2 | ||||
| -rw-r--r-- | include/linux/libata.h | 4 |
10 files changed, 48 insertions, 37 deletions
diff --git a/drivers/scsi/ata_piix.c b/drivers/scsi/ata_piix.c index a6588b0f8c98..e02e33c17404 100644 --- a/drivers/scsi/ata_piix.c +++ b/drivers/scsi/ata_piix.c @@ -138,7 +138,7 @@ static struct ata_port_operations piix_pata_ops = { .bmdma_setup = ata_bmdma_setup_pio, .bmdma_start = ata_bmdma_start_pio, - .fill_sg = ata_fill_sg, + .qc_prep = ata_qc_prep, .eng_timeout = ata_eng_timeout, .irq_handler = ata_interrupt, @@ -161,7 +161,7 @@ static struct ata_port_operations piix_sata_ops = { .bmdma_setup = ata_bmdma_setup_pio, .bmdma_start = ata_bmdma_start_pio, - .fill_sg = ata_fill_sg, + .qc_prep = ata_qc_prep, .eng_timeout = ata_eng_timeout, .irq_handler = ata_interrupt, diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index e2c593c130c4..e0f59b47cc71 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c @@ -1775,13 +1775,13 @@ static void ata_sg_clean(struct ata_queued_cmd *qc) } /** - * ata_fill_sg - - * @qc: + * ata_fill_sg - Fill PCI IDE PRD table + * @qc: Metadata associated with taskfile to be transferred * * LOCKING: * */ -void ata_fill_sg(struct ata_queued_cmd *qc) +static void ata_fill_sg(struct ata_queued_cmd *qc) { struct scatterlist *sg = qc->sg; struct ata_port *ap = qc->ap; @@ -1823,6 +1823,21 @@ void ata_fill_sg(struct ata_queued_cmd *qc) } /** + * ata_qc_prep - Prepare taskfile for submission + * @qc: Metadata associated with taskfile to be prepared + * + * LOCKING: + * spin_lock_irqsave(host_set lock) + */ +void ata_qc_prep(struct ata_queued_cmd *qc) +{ + if (!(qc->flags & ATA_QCFLAG_SG)) + return; + + ata_fill_sg(qc); +} + +/** * ata_sg_setup_one - * @qc: * @@ -1839,7 +1854,6 @@ static int ata_sg_setup_one(struct ata_queued_cmd *qc) struct scsi_cmnd *cmd = qc->scsicmd; int dir = scsi_to_pci_dma_dir(cmd->sc_data_direction); struct scatterlist *sg = qc->sg; - unsigned int have_sg = (qc->flags & ATA_QCFLAG_SG); dma_addr_t dma_address; assert(sg == &qc->sgent); @@ -1849,9 +1863,6 @@ static int ata_sg_setup_one(struct ata_queued_cmd *qc) sg->offset = (unsigned long) cmd->request_buffer & ~PAGE_MASK; sg_dma_len(sg) = cmd->request_bufflen; - if (!have_sg) - return 0; - dma_address = pci_map_single(ap->host_set->pdev, cmd->request_buffer, cmd->request_bufflen, dir); if (pci_dma_mapping_error(dma_address)) @@ -1881,22 +1892,19 @@ static int ata_sg_setup(struct ata_queued_cmd *qc) struct ata_port *ap = qc->ap; struct scsi_cmnd *cmd = qc->scsicmd; struct scatterlist *sg; - int n_elem; - unsigned int have_sg = (qc->flags & ATA_QCFLAG_SG); + int n_elem, dir; VPRINTK("ENTER, ata%u, use_sg %d\n", ap->id, cmd->use_sg); assert(cmd->use_sg > 0); sg = (struct scatterlist *)cmd->request_buffer; - if (have_sg) { - int dir = scsi_to_pci_dma_dir(cmd->sc_data_direction); - n_elem = pci_map_sg(ap->host_set->pdev, sg, cmd->use_sg, dir); - if (n_elem < 1) - return -1; - DPRINTK("%d sg elements mapped\n", n_elem); - } else { - n_elem = cmd->use_sg; - } + dir = scsi_to_pci_dma_dir(cmd->sc_data_direction); + n_elem = pci_map_sg(ap->host_set->pdev, sg, cmd->use_sg, dir); + if (n_elem < 1) + return -1; + + DPRINTK("%d sg elements mapped\n", n_elem); + qc->n_elem = n_elem; return 0; @@ -2325,10 +2333,10 @@ int ata_qc_issue(struct ata_queued_cmd *qc) if (ata_sg_setup_one(qc)) goto err_out; } - - ap->ops->fill_sg(qc); } + ap->ops->qc_prep(qc); + qc->ap->active_tag = qc->tag; qc->flags |= ATA_QCFLAG_ACTIVE; @@ -3325,7 +3333,7 @@ EXPORT_SYMBOL_GPL(ata_exec_command_mmio); EXPORT_SYMBOL_GPL(ata_port_start); EXPORT_SYMBOL_GPL(ata_port_stop); EXPORT_SYMBOL_GPL(ata_interrupt); -EXPORT_SYMBOL_GPL(ata_fill_sg); +EXPORT_SYMBOL_GPL(ata_qc_prep); EXPORT_SYMBOL_GPL(ata_bmdma_setup_pio); EXPORT_SYMBOL_GPL(ata_bmdma_start_pio); EXPORT_SYMBOL_GPL(ata_bmdma_setup_mmio); diff --git a/drivers/scsi/sata_promise.c b/drivers/scsi/sata_promise.c index 268b2c345728..ae6d77c96786 100644 --- a/drivers/scsi/sata_promise.c +++ b/drivers/scsi/sata_promise.c @@ -81,7 +81,7 @@ static void pdc_eng_timeout(struct ata_port *ap); static int pdc_port_start(struct ata_port *ap); static void pdc_port_stop(struct ata_port *ap); static void pdc_phy_reset(struct ata_port *ap); -static void pdc_fill_sg(struct ata_queued_cmd *qc); +static void pdc_qc_prep(struct ata_queued_cmd *qc); static void pdc_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf); static void pdc_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf); static inline void pdc_dma_complete (struct ata_port *ap, @@ -114,7 +114,7 @@ static struct ata_port_operations pdc_sata_ops = { .phy_reset = pdc_phy_reset, .bmdma_setup = pdc_dma_setup, .bmdma_start = pdc_dma_start, - .fill_sg = pdc_fill_sg, + .qc_prep = pdc_qc_prep, .eng_timeout = pdc_eng_timeout, .irq_handler = pdc_interrupt, .scr_read = pdc_sata_scr_read, @@ -261,14 +261,14 @@ static void pdc_sata_scr_write (struct ata_port *ap, unsigned int sc_reg, writel(val, (void *) ap->ioaddr.scr_addr + (sc_reg * 4)); } -static void pdc_fill_sg(struct ata_queued_cmd *qc) +static void pdc_qc_prep(struct ata_queued_cmd *qc) { struct pdc_port_priv *pp = qc->ap->private_data; unsigned int i; VPRINTK("ENTER\n"); - ata_fill_sg(qc); + ata_qc_prep(qc); i = pdc_pkt_header(&qc->tf, qc->ap->prd_dma, qc->dev->devno, pp->pkt); diff --git a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c index 33ae676e2d78..49ce4d02c1fd 100644 --- a/drivers/scsi/sata_sil.c +++ b/drivers/scsi/sata_sil.c @@ -131,7 +131,7 @@ static struct ata_port_operations sil_ops = { .post_set_mode = sil_post_set_mode, .bmdma_setup = ata_bmdma_setup_mmio, .bmdma_start = ata_bmdma_start_mmio, - .fill_sg = ata_fill_sg, + .qc_prep = ata_qc_prep, .eng_timeout = ata_eng_timeout, .irq_handler = ata_interrupt, .scr_read = sil_scr_read, diff --git a/drivers/scsi/sata_sis.c b/drivers/scsi/sata_sis.c index 8965ee281839..a2106d2ebb18 100644 --- a/drivers/scsi/sata_sis.c +++ b/drivers/scsi/sata_sis.c @@ -100,7 +100,7 @@ static struct ata_port_operations sis_ops = { .phy_reset = sata_phy_reset, .bmdma_setup = ata_bmdma_setup_pio, .bmdma_start = ata_bmdma_start_pio, - .fill_sg = ata_fill_sg, + .qc_prep = ata_qc_prep, .eng_timeout = ata_eng_timeout, .irq_handler = ata_interrupt, .scr_read = sis_scr_read, diff --git a/drivers/scsi/sata_svw.c b/drivers/scsi/sata_svw.c index 60841abc4398..af28b1f7a95f 100644 --- a/drivers/scsi/sata_svw.c +++ b/drivers/scsi/sata_svw.c @@ -233,7 +233,7 @@ static struct ata_port_operations k2_sata_ops = { .phy_reset = sata_phy_reset, .bmdma_setup = ata_bmdma_setup_mmio, .bmdma_start = ata_bmdma_start_mmio, - .fill_sg = ata_fill_sg, + .qc_prep = ata_qc_prep, .eng_timeout = ata_eng_timeout, .irq_handler = ata_interrupt, .scr_read = k2_sata_scr_read, diff --git a/drivers/scsi/sata_sx4.c b/drivers/scsi/sata_sx4.c index 3268fdf7e583..ea8ddcc78a6d 100644 --- a/drivers/scsi/sata_sx4.c +++ b/drivers/scsi/sata_sx4.c @@ -153,7 +153,7 @@ static void pdc_eng_timeout(struct ata_port *ap); static void pdc_20621_phy_reset (struct ata_port *ap); static int pdc_port_start(struct ata_port *ap); static void pdc_port_stop(struct ata_port *ap); -static void pdc20621_fill_sg(struct ata_queued_cmd *qc); +static void pdc20621_qc_prep(struct ata_queued_cmd *qc); static void pdc_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf); static void pdc_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf); static void pdc20621_host_stop(struct ata_host_set *host_set); @@ -200,7 +200,7 @@ static struct ata_port_operations pdc_20621_ops = { .phy_reset = pdc_20621_phy_reset, .bmdma_setup = pdc20621_dma_setup, .bmdma_start = pdc20621_dma_start, - .fill_sg = pdc20621_fill_sg, + .qc_prep = pdc20621_qc_prep, .eng_timeout = pdc_eng_timeout, .irq_handler = pdc20621_interrupt, .port_start = pdc_port_start, @@ -434,7 +434,7 @@ static inline void pdc20621_host_pkt(struct ata_taskfile *tf, u8 *buf, buf32[dw + 3]); } -static void pdc20621_fill_sg(struct ata_queued_cmd *qc) +static void pdc20621_qc_prep(struct ata_queued_cmd *qc) { struct scatterlist *sg = qc->sg; struct ata_port *ap = qc->ap; @@ -446,6 +446,9 @@ static void pdc20621_fill_sg(struct ata_queued_cmd *qc) unsigned int i, last, idx, total_len = 0, sgt_len; u32 *buf = (u32 *) &pp->dimm_buf[PDC_DIMM_HEADER_SZ]; + if (!(qc->flags & ATA_QCFLAG_SG)) + return; + VPRINTK("ata%u: ENTER\n", ap->id); /* hard-code chip #0 */ diff --git a/drivers/scsi/sata_via.c b/drivers/scsi/sata_via.c index 46d385128842..84ee429471ce 100644 --- a/drivers/scsi/sata_via.c +++ b/drivers/scsi/sata_via.c @@ -108,7 +108,7 @@ static struct ata_port_operations svia_sata_ops = { .bmdma_setup = ata_bmdma_setup_pio, .bmdma_start = ata_bmdma_start_pio, - .fill_sg = ata_fill_sg, + .qc_prep = ata_qc_prep, .eng_timeout = ata_eng_timeout, .irq_handler = ata_interrupt, diff --git a/drivers/scsi/sata_vsc.c b/drivers/scsi/sata_vsc.c index e0ad17121850..a09f03ee0ef0 100644 --- a/drivers/scsi/sata_vsc.c +++ b/drivers/scsi/sata_vsc.c @@ -215,7 +215,7 @@ static struct ata_port_operations vsc_sata_ops = { .phy_reset = sata_phy_reset, .bmdma_setup = ata_bmdma_setup_mmio, .bmdma_start = ata_bmdma_start_mmio, - .fill_sg = ata_fill_sg, + .qc_prep = ata_qc_prep, .eng_timeout = ata_eng_timeout, .irq_handler = vsc_sata_interrupt, .scr_read = vsc_sata_scr_read, diff --git a/include/linux/libata.h b/include/linux/libata.h index c9713d0d30af..a5cbca376a92 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -315,7 +315,7 @@ struct ata_port_operations { void (*bmdma_setup) (struct ata_queued_cmd *qc); void (*bmdma_start) (struct ata_queued_cmd *qc); - void (*fill_sg) (struct ata_queued_cmd *qc); + void (*qc_prep) (struct ata_queued_cmd *qc); void (*eng_timeout) (struct ata_port *ap); irqreturn_t (*irq_handler)(int, void *, struct pt_regs *); @@ -375,7 +375,7 @@ extern void ata_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf); extern int ata_port_start (struct ata_port *ap); extern void ata_port_stop (struct ata_port *ap); extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs); -extern void ata_fill_sg(struct ata_queued_cmd *qc); +extern void ata_qc_prep(struct ata_queued_cmd *qc); extern void ata_dev_id_string(struct ata_device *dev, unsigned char *s, unsigned int ofs, unsigned int len); extern void ata_bmdma_setup_mmio (struct ata_queued_cmd *qc); |
