]> nv-tegra.nvidia Code Review - linux-2.6.git/blobdiff - drivers/ata/sata_promise.c
libata-sff: prd is BMDMA specific
[linux-2.6.git] / drivers / ata / sata_promise.c
index 2c029ea12c54d5409cd82d1e1ac35f7eb9be6072..f03ad48273ffe10117cc82984f0f4b3be0f34bcc 100644 (file)
@@ -333,7 +333,8 @@ static int pdc_common_port_start(struct ata_port *ap)
        struct pdc_port_priv *pp;
        int rc;
 
-       rc = ata_port_start(ap);
+       /* we use the same prd table as bmdma, allocate it */
+       rc = ata_bmdma_port_start(ap);
        if (rc)
                return rc;
 
@@ -499,7 +500,7 @@ static int pdc_sata_scr_write(struct ata_link *link,
 static void pdc_atapi_pkt(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
-       dma_addr_t sg_table = ap->prd_dma;
+       dma_addr_t sg_table = ap->bmdma_prd_dma;
        unsigned int cdb_len = qc->dev->cdb_len;
        u8 *cdb = qc->cdb;
        struct pdc_port_priv *pp = ap->private_data;
@@ -587,6 +588,7 @@ static void pdc_atapi_pkt(struct ata_queued_cmd *qc)
 static void pdc_fill_sg(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
+       struct ata_bmdma_prd *prd = ap->bmdma_prd;
        struct scatterlist *sg;
        const u32 SG_COUNT_ASIC_BUG = 41*4;
        unsigned int si, idx;
@@ -613,8 +615,8 @@ static void pdc_fill_sg(struct ata_queued_cmd *qc)
                        if ((offset + sg_len) > 0x10000)
                                len = 0x10000 - offset;
 
-                       ap->prd[idx].addr = cpu_to_le32(addr);
-                       ap->prd[idx].flags_len = cpu_to_le32(len & 0xffff);
+                       prd[idx].addr = cpu_to_le32(addr);
+                       prd[idx].flags_len = cpu_to_le32(len & 0xffff);
                        VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx, addr, len);
 
                        idx++;
@@ -623,27 +625,27 @@ static void pdc_fill_sg(struct ata_queued_cmd *qc)
                }
        }
 
-       len = le32_to_cpu(ap->prd[idx - 1].flags_len);
+       len = le32_to_cpu(prd[idx - 1].flags_len);
 
        if (len > SG_COUNT_ASIC_BUG) {
                u32 addr;
 
                VPRINTK("Splitting last PRD.\n");
 
-               addr = le32_to_cpu(ap->prd[idx - 1].addr);
-               ap->prd[idx - 1].flags_len = cpu_to_le32(len - SG_COUNT_ASIC_BUG);
+               addr = le32_to_cpu(prd[idx - 1].addr);
+               prd[idx - 1].flags_len = cpu_to_le32(len - SG_COUNT_ASIC_BUG);
                VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx - 1, addr, SG_COUNT_ASIC_BUG);
 
                addr = addr + len - SG_COUNT_ASIC_BUG;
                len = SG_COUNT_ASIC_BUG;
-               ap->prd[idx].addr = cpu_to_le32(addr);
-               ap->prd[idx].flags_len = cpu_to_le32(len);
+               prd[idx].addr = cpu_to_le32(addr);
+               prd[idx].flags_len = cpu_to_le32(len);
                VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx, addr, len);
 
                idx++;
        }
 
-       ap->prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
+       prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
 }
 
 static void pdc_qc_prep(struct ata_queued_cmd *qc)
@@ -658,7 +660,7 @@ static void pdc_qc_prep(struct ata_queued_cmd *qc)
                pdc_fill_sg(qc);
                /*FALLTHROUGH*/
        case ATA_PROT_NODATA:
-               i = pdc_pkt_header(&qc->tf, qc->ap->prd_dma,
+               i = pdc_pkt_header(&qc->tf, qc->ap->bmdma_prd_dma,
                                   qc->dev->devno, pp->pkt);
                if (qc->tf.flags & ATA_TFLAG_LBA48)
                        i = pdc_prep_lba48(&qc->tf, pp->pkt, i);
@@ -838,7 +840,7 @@ static void pdc_error_handler(struct ata_port *ap)
        if (!(ap->pflags & ATA_PFLAG_FROZEN))
                pdc_reset_port(ap);
 
-       ata_std_error_handler(ap);
+       ata_sff_error_handler(ap);
 }
 
 static void pdc_post_internal_cmd(struct ata_queued_cmd *qc)