From 9eb6f10995f919a6bec660a31a8994c75be57950 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Thu, 29 Jun 2017 08:20:22 +0800 Subject: [PATCH] busdma: Add bus_dmamap_load_ccb; ease driver porting from FreeBSD. --- sys/platform/pc64/x86_64/busdma_machdep.c | 18 ++++++++++++++++++ sys/sys/bus_dma.h | 8 ++++++++ 2 files changed, 26 insertions(+) diff --git a/sys/platform/pc64/x86_64/busdma_machdep.c b/sys/platform/pc64/x86_64/busdma_machdep.c index 09e2e78194..884b3ffbb2 100644 --- a/sys/platform/pc64/x86_64/busdma_machdep.c +++ b/sys/platform/pc64/x86_64/busdma_machdep.c @@ -49,6 +49,9 @@ #include +#include +#include + #define MAX_BPAGES 1024 /* @@ -842,6 +845,21 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, return 0; } +int +bus_dmamap_load_ccb(bus_dma_tag_t dmat, bus_dmamap_t map, union ccb *ccb, + bus_dmamap_callback_t *callback, void *callback_arg, int flags) +{ + const struct ccb_scsiio *csio; + + KASSERT(ccb->ccb_h.func_code == XPT_SCSI_IO || + ccb->ccb_h.func_code == XPT_CONT_TARGET_IO, + ("invalid ccb func_code %u", ccb->ccb_h.func_code)); + csio = &ccb->csio; + + return (bus_dmamap_load(dmat, map, csio->data_ptr, csio->dxfer_len, + callback, callback_arg, flags)); +} + /* * Like _bus_dmamap_load(), but for mbufs. */ diff --git a/sys/sys/bus_dma.h b/sys/sys/bus_dma.h index 348078ea67..dbedbdfd8b 100644 --- a/sys/sys/bus_dma.h +++ b/sys/sys/bus_dma.h @@ -106,6 +106,7 @@ /* Forwards needed by prototypes below. */ struct mbuf; struct uio; +union ccb; /* * bus_dmasync_op_t @@ -251,6 +252,13 @@ int bus_dmamap_load_uio(bus_dma_tag_t dmat, bus_dmamap_t map, struct uio *ui, bus_dmamap_callback2_t *callback, void *callback_arg, int flags); +/* + * Like bus_dmamap_load but for ccb. + */ +int bus_dmamap_load_ccb(bus_dma_tag_t dmat, bus_dmamap_t map, + union ccb *ccb, + bus_dmamap_callback_t *callback, void *callback_arg, + int flags); /* * Like bus_dmamap_load_mbuf without callback. -- 2.11.4.GIT