summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/pci/ahci.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/sys/dev/pci/ahci.c b/sys/dev/pci/ahci.c
index 004ac69835d..55ff97bc9f7 100644
--- a/sys/dev/pci/ahci.c
+++ b/sys/dev/pci/ahci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ahci.c,v 1.71 2007/03/06 06:43:56 pascoe Exp $ */
+/* $OpenBSD: ahci.c,v 1.72 2007/03/06 09:00:03 dlg Exp $ */
/*
* Copyright (c) 2006 David Gwynne <dlg@openbsd.org>
@@ -711,8 +711,10 @@ ahci_port_alloc(struct ahci_softc *sc, u_int port)
struct ahci_port *ap;
struct ahci_ccb *ccb;
u_int64_t dva;
- int i, rc = ENOMEM;
u_int32_t cmd;
+ struct ahci_cmd_hdr *hdr;
+ struct ahci_cmd_table *table;
+ int i, rc = ENOMEM;
ap = malloc(sizeof(struct ahci_port), M_DEVBUF, M_NOWAIT);
if (ap == NULL) {
@@ -811,6 +813,8 @@ nomem:
/* Split CCB allocation into CCBs and assign to command header/table */
TAILQ_INIT(&ap->ap_ccb_free);
+ hdr = AHCI_DMA_KVA(ap->ap_dmamem_cmd_list);
+ table = AHCI_DMA_KVA(ap->ap_dmamem_cmd_table);
for (i = 0; i < sc->sc_ncmds; i++) {
ccb = &ap->ap_ccbs[i];
@@ -823,10 +827,8 @@ nomem:
ccb->ccb_slot = i;
ccb->ccb_port = ap;
- ccb->ccb_cmd_hdr = AHCI_DMA_KVA(ap->ap_dmamem_cmd_list) +
- ccb->ccb_slot * sizeof(struct ahci_cmd_hdr);
- ccb->ccb_cmd_table = AHCI_DMA_KVA(ap->ap_dmamem_cmd_table) +
- ccb->ccb_slot * sizeof(struct ahci_cmd_table);
+ ccb->ccb_cmd_hdr = &hdr[i];
+ ccb->ccb_cmd_table = &table[i];
dva = AHCI_DMA_DVA(ap->ap_dmamem_cmd_table) +
ccb->ccb_slot * sizeof(struct ahci_cmd_table);
ccb->ccb_cmd_hdr->ctba_hi = htole32((u_int32_t)(dva >> 32));