diff options
Diffstat (limited to 'drivers/ata/ahci.c')
| -rw-r--r-- | drivers/ata/ahci.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 5eee91c73c90..cffad07c65bf 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
| @@ -1483,28 +1483,24 @@ static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf) | |||
| 1483 | static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc, void *cmd_tbl) | 1483 | static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc, void *cmd_tbl) |
| 1484 | { | 1484 | { |
| 1485 | struct scatterlist *sg; | 1485 | struct scatterlist *sg; |
| 1486 | struct ahci_sg *ahci_sg; | 1486 | struct ahci_sg *ahci_sg = cmd_tbl + AHCI_CMD_TBL_HDR_SZ; |
| 1487 | unsigned int n_sg = 0; | 1487 | unsigned int si; |
| 1488 | 1488 | ||
| 1489 | VPRINTK("ENTER\n"); | 1489 | VPRINTK("ENTER\n"); |
| 1490 | 1490 | ||
| 1491 | /* | 1491 | /* |
| 1492 | * Next, the S/G list. | 1492 | * Next, the S/G list. |
| 1493 | */ | 1493 | */ |
| 1494 | ahci_sg = cmd_tbl + AHCI_CMD_TBL_HDR_SZ; | 1494 | for_each_sg(qc->sg, sg, qc->n_elem, si) { |
| 1495 | ata_for_each_sg(sg, qc) { | ||
| 1496 | dma_addr_t addr = sg_dma_address(sg); | 1495 | dma_addr_t addr = sg_dma_address(sg); |
| 1497 | u32 sg_len = sg_dma_len(sg); | 1496 | u32 sg_len = sg_dma_len(sg); |
| 1498 | 1497 | ||
| 1499 | ahci_sg->addr = cpu_to_le32(addr & 0xffffffff); | 1498 | ahci_sg[si].addr = cpu_to_le32(addr & 0xffffffff); |
| 1500 | ahci_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16); | 1499 | ahci_sg[si].addr_hi = cpu_to_le32((addr >> 16) >> 16); |
| 1501 | ahci_sg->flags_size = cpu_to_le32(sg_len - 1); | 1500 | ahci_sg[si].flags_size = cpu_to_le32(sg_len - 1); |
| 1502 | |||
| 1503 | ahci_sg++; | ||
| 1504 | n_sg++; | ||
| 1505 | } | 1501 | } |
| 1506 | 1502 | ||
| 1507 | return n_sg; | 1503 | return si; |
| 1508 | } | 1504 | } |
| 1509 | 1505 | ||
| 1510 | static void ahci_qc_prep(struct ata_queued_cmd *qc) | 1506 | static void ahci_qc_prep(struct ata_queued_cmd *qc) |
