diff --git a/sys/cam/cam.c b/sys/cam/cam.c --- a/sys/cam/cam.c +++ b/sys/cam/cam.c @@ -572,74 +572,3 @@ ccg->cylinders = ccg->volume_size / secs_per_cylinder; ccg->ccb_h.status = CAM_REQ_CMP; } - -#ifdef _KERNEL -struct memdesc -memdesc_ccb(union ccb *ccb) -{ - struct ccb_hdr *ccb_h; - void *data_ptr; - uint32_t dxfer_len; - uint16_t sglist_cnt; - - ccb_h = &ccb->ccb_h; - switch (ccb_h->func_code) { - case XPT_SCSI_IO: { - struct ccb_scsiio *csio; - - csio = &ccb->csio; - data_ptr = csio->data_ptr; - dxfer_len = csio->dxfer_len; - sglist_cnt = csio->sglist_cnt; - break; - } - case XPT_CONT_TARGET_IO: { - struct ccb_scsiio *ctio; - - ctio = &ccb->ctio; - data_ptr = ctio->data_ptr; - dxfer_len = ctio->dxfer_len; - sglist_cnt = ctio->sglist_cnt; - break; - } - case XPT_ATA_IO: { - struct ccb_ataio *ataio; - - ataio = &ccb->ataio; - data_ptr = ataio->data_ptr; - dxfer_len = ataio->dxfer_len; - sglist_cnt = 0; - break; - } - case XPT_NVME_IO: - case XPT_NVME_ADMIN: { - struct ccb_nvmeio *nvmeio; - - nvmeio = &ccb->nvmeio; - data_ptr = nvmeio->data_ptr; - dxfer_len = nvmeio->dxfer_len; - sglist_cnt = nvmeio->sglist_cnt; - break; - } - default: - panic("%s: Unsupported func code %d", __func__, - ccb_h->func_code); - } - - switch ((ccb_h->flags & CAM_DATA_MASK)) { - case CAM_DATA_VADDR: - return (memdesc_vaddr(data_ptr, dxfer_len)); - case CAM_DATA_PADDR: - return (memdesc_paddr((vm_paddr_t)(uintptr_t)data_ptr, - dxfer_len)); - case CAM_DATA_SG: - return (memdesc_vlist(data_ptr, sglist_cnt)); - case CAM_DATA_SG_PADDR: - return (memdesc_plist(data_ptr, sglist_cnt)); - case CAM_DATA_BIO: - return (memdesc_bio(data_ptr)); - default: - panic("%s: flags 0x%X unimplemented", __func__, ccb_h->flags); - } -} -#endif diff --git a/sys/cam/cam_ccb.h b/sys/cam/cam_ccb.h --- a/sys/cam/cam_ccb.h +++ b/sys/cam/cam_ccb.h @@ -1553,6 +1553,79 @@ nvmeio->data_ptr = data_ptr; nvmeio->dxfer_len = dxfer_len; } +#ifdef _KERNEL +#include + +static inline struct memdesc +cam_memdesc_ccb(union ccb *ccb) +{ + struct ccb_hdr *ccb_h; + void *data_ptr; + uint32_t dxfer_len; + uint16_t sglist_cnt; + + ccb_h = &ccb->ccb_h; + switch (ccb_h->func_code) { + case XPT_SCSI_IO: { + struct ccb_scsiio *csio; + + csio = &ccb->csio; + data_ptr = csio->data_ptr; + dxfer_len = csio->dxfer_len; + sglist_cnt = csio->sglist_cnt; + break; + } + case XPT_CONT_TARGET_IO: { + struct ccb_scsiio *ctio; + + ctio = &ccb->ctio; + data_ptr = ctio->data_ptr; + dxfer_len = ctio->dxfer_len; + sglist_cnt = ctio->sglist_cnt; + break; + } + case XPT_ATA_IO: { + struct ccb_ataio *ataio; + + ataio = &ccb->ataio; + data_ptr = ataio->data_ptr; + dxfer_len = ataio->dxfer_len; + sglist_cnt = 0; + break; + } + case XPT_NVME_IO: + case XPT_NVME_ADMIN: { + struct ccb_nvmeio *nvmeio; + + nvmeio = &ccb->nvmeio; + data_ptr = nvmeio->data_ptr; + dxfer_len = nvmeio->dxfer_len; + sglist_cnt = nvmeio->sglist_cnt; + break; + } + default: + panic("%s: Unsupported func code %d", __func__, + ccb_h->func_code); + } + + switch ((ccb_h->flags & CAM_DATA_MASK)) { + case CAM_DATA_VADDR: + return (memdesc_vaddr(data_ptr, dxfer_len)); + case CAM_DATA_PADDR: + return (memdesc_paddr((vm_paddr_t)(uintptr_t)data_ptr, + dxfer_len)); + case CAM_DATA_SG: + return (memdesc_vlist(data_ptr, sglist_cnt)); + case CAM_DATA_SG_PADDR: + return (memdesc_plist(data_ptr, sglist_cnt)); + case CAM_DATA_BIO: + return (memdesc_bio(data_ptr)); + default: + panic("%s: flags 0x%X unimplemented", __func__, ccb_h->flags); + } +} +#endif + __END_DECLS #endif /* _CAM_CAM_CCB_H */ diff --git a/sys/kern/subr_bus_dma.c b/sys/kern/subr_bus_dma.c --- a/sys/kern/subr_bus_dma.c +++ b/sys/kern/subr_bus_dma.c @@ -463,7 +463,7 @@ return (0); } - mem = memdesc_ccb(ccb); + mem = cam_memdesc_ccb(ccb); return (bus_dmamap_load_mem(dmat, map, &mem, callback, callback_arg, flags)); } diff --git a/sys/sys/memdesc.h b/sys/sys/memdesc.h --- a/sys/sys/memdesc.h +++ b/sys/sys/memdesc.h @@ -36,7 +36,6 @@ struct uio; struct mbuf; struct vm_page; -union ccb; /* * struct memdesc encapsulates various memory descriptors and provides @@ -153,6 +152,5 @@ } struct memdesc memdesc_bio(struct bio *bio); -struct memdesc memdesc_ccb(union ccb *ccb); #endif /* _SYS_MEMDESC_H_ */