Page MenuHomeFreeBSD

D41078.diff
No OneTemporary

D41078.diff

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 <sys/memdesc.h>
+
+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_ */

File Metadata

Mime Type
text/plain
Expires
Fri, Nov 14, 1:18 PM (2 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25288533
Default Alt Text
D41078.diff (4 KB)

Event Timeline