diff options
author | David Gwynne <dlg@cvs.openbsd.org> | 2012-08-26 11:33:45 +0000 |
---|---|---|
committer | David Gwynne <dlg@cvs.openbsd.org> | 2012-08-26 11:33:45 +0000 |
commit | 5f5286de0a0de74ab7e362a34220341aa04be063 (patch) | |
tree | f9e78e8300185e417a7e310151187d8a3ed79900 | |
parent | 6f7696c116b8de9d1c0673b7529bf7a792ddd56e (diff) |
htole64 works as good as htole32 twice for dma virtual addresses.
-rw-r--r-- | sys/dev/ic/mpi.c | 27 | ||||
-rw-r--r-- | sys/dev/ic/mpireg.h | 5 |
2 files changed, 9 insertions, 23 deletions
diff --git a/sys/dev/ic/mpi.c b/sys/dev/ic/mpi.c index f4503159076..bed852d9400 100644 --- a/sys/dev/ic/mpi.c +++ b/sys/dev/ic/mpi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mpi.c,v 1.175 2012/01/16 10:55:46 dlg Exp $ */ +/* $OpenBSD: mpi.c,v 1.176 2012/08/26 11:33:44 dlg Exp $ */ /* * Copyright (c) 2005, 2006, 2009 David Gwynne <dlg@openbsd.org> @@ -801,8 +801,7 @@ mpi_inq(struct mpi_softc *sc, u_int16_t target, int physdisk) addr = ccb->ccb_cmd_dva + ((u_int8_t *)&bundle->inqbuf - (u_int8_t *)bundle); - sge->sg_hi_addr = htole32((u_int32_t)(addr >> 32)); - sge->sg_lo_addr = htole32((u_int32_t)addr); + sge->sg_addr = htole64(addr); if (mpi_poll(sc, ccb, 5000) != 0) return (1); @@ -1562,10 +1561,7 @@ mpi_load_xs(struct mpi_ccb *ccb) ce_dva = ccb->ccb_cmd_dva + ((u_int8_t *)nsge - (u_int8_t *)mcb); - addr = (u_int32_t)(ce_dva >> 32); - ce->sg_hi_addr = htole32(addr); - addr = (u_int32_t)ce_dva; - ce->sg_lo_addr = htole32(addr); + ce->sg_addr = htole64(ce_dva); DNPRINTF(MPI_D_DMA, "%s: ce: 0x%08x 0x%08x 0x%08x\n", DEVNAME(sc), ce->sg_hdr, ce->sg_hi_addr, @@ -1581,10 +1577,7 @@ mpi_load_xs(struct mpi_ccb *ccb) sge = nsge; sge->sg_hdr = htole32(flags | dmap->dm_segs[i].ds_len); - addr = (u_int32_t)((u_int64_t)dmap->dm_segs[i].ds_addr >> 32); - sge->sg_hi_addr = htole32(addr); - addr = (u_int32_t)dmap->dm_segs[i].ds_addr; - sge->sg_lo_addr = htole32(addr); + sge->sg_addr = htole64(dmap->dm_segs[i].ds_addr); DNPRINTF(MPI_D_DMA, "%s: %d: 0x%08x 0x%08x 0x%08x\n", DEVNAME(sc), i, sge->sg_hdr, sge->sg_hi_addr, @@ -2638,7 +2631,6 @@ mpi_fwupload(struct mpi_softc *sc) struct mpi_sge sge; } __packed *bundle; struct mpi_msg_fwupload_reply *upp; - u_int64_t addr; int rv = 0; if (sc->sc_fw_len == 0) @@ -2674,9 +2666,7 @@ mpi_fwupload(struct mpi_softc *sc) bundle->sge.sg_hdr = htole32(MPI_SGE_FL_TYPE_SIMPLE | MPI_SGE_FL_SIZE_64 | MPI_SGE_FL_LAST | MPI_SGE_FL_EOB | MPI_SGE_FL_EOL | (u_int32_t)sc->sc_fw_len); - addr = MPI_DMA_DVA(sc->sc_fw); - bundle->sge.sg_hi_addr = htole32((u_int32_t)(addr >> 32)); - bundle->sge.sg_lo_addr = htole32((u_int32_t)addr); + bundle->sge.sg_addr = htole64(MPI_DMA_DVA(sc->sc_fw)); if (mpi_poll(sc, ccb, 50000) != 0) { DNPRINTF(MPI_D_MISC, "%s: mpi_cfg_header poll\n", DEVNAME(sc)); @@ -2855,7 +2845,6 @@ mpi_req_cfg_page(struct mpi_softc *sc, u_int32_t address, int flags, struct mpi_msg_config_reply *cp; struct mpi_cfg_hdr *hdr = p; struct mpi_ecfg_hdr *ehdr = p; - u_int64_t dva; char *kva; int page_length; int rv = 0; @@ -2901,10 +2890,8 @@ mpi_req_cfg_page(struct mpi_softc *sc, u_int32_t address, int flags, (read ? MPI_SGE_FL_DIR_IN : MPI_SGE_FL_DIR_OUT)); /* bounce the page via the request space to avoid more bus_dma games */ - dva = ccb->ccb_cmd_dva + sizeof(struct mpi_msg_config_request); - - cq->page_buffer.sg_hi_addr = htole32((u_int32_t)(dva >> 32)); - cq->page_buffer.sg_lo_addr = htole32((u_int32_t)dva); + cq->page_buffer.sg_addr = htole64(ccb->ccb_cmd_dva + + sizeof(struct mpi_msg_config_request)); kva = ccb->ccb_cmd; kva += sizeof(struct mpi_msg_config_request); diff --git a/sys/dev/ic/mpireg.h b/sys/dev/ic/mpireg.h index c6d05c8013b..011bb6bc500 100644 --- a/sys/dev/ic/mpireg.h +++ b/sys/dev/ic/mpireg.h @@ -1,4 +1,4 @@ -/* $OpenBSD: mpireg.h,v 1.41 2011/04/27 04:03:11 dlg Exp $ */ +/* $OpenBSD: mpireg.h,v 1.42 2012/08/26 11:33:44 dlg Exp $ */ /* * Copyright (c) 2005 David Gwynne <dlg@openbsd.org> @@ -126,8 +126,7 @@ struct mpi_sge { u_int32_t sg_hdr; - u_int32_t sg_lo_addr; - u_int32_t sg_hi_addr; + u_int64_t sg_addr; } __packed; struct mpi_fw_tce { |