summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/dev/nvme/nvme_private.h
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/dev/nvme/nvme_private.h')
-rw-r--r--freebsd/sys/dev/nvme/nvme_private.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/freebsd/sys/dev/nvme/nvme_private.h b/freebsd/sys/dev/nvme/nvme_private.h
index 8346d5ea..ade1833c 100644
--- a/freebsd/sys/dev/nvme/nvme_private.h
+++ b/freebsd/sys/dev/nvme/nvme_private.h
@@ -130,6 +130,9 @@ extern devclass_t nvme_devclass;
#define NVME_REQUEST_UIO 3
#define NVME_REQUEST_BIO 4
#define NVME_REQUEST_CCB 5
+#ifdef __rtems__
+#define NVME_REQUEST_IOV 10
+#endif /* __rtems__ */
struct nvme_request {
@@ -138,6 +141,9 @@ struct nvme_request {
union {
void *payload;
struct bio *bio;
+#ifdef __rtems__
+ const struct iovec *iov;
+#endif /* __rtems__ */
} u;
uint32_t type;
uint32_t payload_size;
@@ -556,6 +562,23 @@ nvme_allocate_request_ccb(union ccb *ccb, nvme_cb_fn_t cb_fn, void *cb_arg)
return (req);
}
+#ifdef __rtems__
+static __inline struct nvme_request *
+nvme_allocate_request_iov(const struct iovec *iov, uint32_t payload_size,
+ nvme_cb_fn_t cb_fn, void *cb_arg)
+{
+ struct nvme_request *req;
+
+ req = _nvme_allocate_request(cb_fn, cb_arg);
+ if (req != NULL) {
+ req->type = NVME_REQUEST_IOV;
+ req->u.iov = iov;
+ req->payload_size = payload_size;
+ }
+
+ return (req);
+}
+#endif /* __rtems__ */
#define nvme_free_request(req) uma_zfree(nvme_request_zone, req)