Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F174185057
D59532.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D59532.diff
View Options
diff --git a/sys/cam/nvme/nvme_all.h b/sys/cam/nvme/nvme_all.h
--- a/sys/cam/nvme/nvme_all.h
+++ b/sys/cam/nvme/nvme_all.h
@@ -32,6 +32,7 @@
struct ccb_nvmeio;
+__BEGIN_DECLS
void nvme_ns_cmd(struct ccb_nvmeio *nvmeio, uint8_t cmd, uint32_t nsid,
uint32_t cdw10, uint32_t cdw11, uint32_t cdw12, uint32_t cdw13,
uint32_t cdw14, uint32_t cdw15);
@@ -44,9 +45,49 @@
const struct nvme_namespace_data *, struct sbuf *);
void nvme_cmd_sbuf(const struct nvme_command *, struct sbuf *sb);
int nvme_command_sbuf(struct ccb_nvmeio *nvmeio, struct sbuf *sb);
+void nvme_resv_report(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, uint32_t report_type, uint8_t *data_ptr,
+ uint32_t dxfer_len, uint32_t timeout);
+void nvme_resv_register(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int cptpl, int iekey, int rrega,
+ uint8_t *data_ptr, uint32_t dxfer_len,uint32_t timeout);
+void nvme_resv_acquire(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int rtype, int iekey, int racqa,
+ uint8_t *data_ptr, uint32_t dxfer_len, uint32_t timeout);
+void nvme_resv_release(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int rtype, int iekey, int rrela,
+ uint8_t *data_ptr, uint32_t dxfer_len, uint32_t timeout);
+void nvme_format(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int ses, int pil, int pi, int mset, int lbaf,
+ uint32_t timeout);
+void nvme_get_feature(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int sel, uint8_t feature, uint32_t cdw11,
+ int uuid_idx, uint8_t *data_ptr, uint32_t dxfer_len,
+ uint32_t timeout);
+void nvme_set_feature(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int sv, uint8_t feature, uint32_t cdw11,
+ uint32_t cdw12, uint32_t cdw13, uint32_t cdw14,
+ uint32_t cdw15, uint8_t *data_ptr, uint32_t dxfer_len,
+ uint32_t timeout);
+void nvme_get_feature_hostid(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ int sel, int uuid_idx, uint8_t *data_ptr,
+ uint32_t dxfer_len, uint32_t timeout);
+void nvme_set_feature_hostid(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ int sv, int exhid, uint8_t *data_ptr,
+ uint32_t dxfer_len, uint32_t timeout);
const char *nvme_command_string(struct ccb_nvmeio *nvmeio, char *, size_t);
int nvme_status_sbuf(struct ccb_nvmeio *nvmeio, struct sbuf *sb);
const void *nvme_get_identify_cntrl(struct cam_periph *);
const void *nvme_get_identify_ns(struct cam_periph *);
+__END_DECLS
#endif /* CAM_NVME_NVME_ALL_H */
diff --git a/sys/cam/nvme/nvme_all.c b/sys/cam/nvme/nvme_all.c
--- a/sys/cam/nvme/nvme_all.c
+++ b/sys/cam/nvme/nvme_all.c
@@ -50,6 +50,7 @@
#include <cam/cam_queue.h>
#include <cam/cam_xpt.h>
#include <cam/nvme/nvme_all.h>
+#include <dev/nvme/nvme.h>
#include <sys/sbuf.h>
#include <sys/endian.h>
@@ -160,6 +161,206 @@
return(0);
}
+void
+nvme_resv_report(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, uint32_t report_type, uint8_t *data_ptr,
+ uint32_t dxfer_len, uint32_t timeout)
+{
+ cam_fill_nvmeio(/*nvmeio*/ nvmeio,
+ /*retries*/ retries,
+ /*cbfcnp*/ cbfcnp,
+ /*flags*/ CAM_DIR_IN,
+ /*data_ptr*/ data_ptr,
+ /*dxfer_len*/ dxfer_len,
+ /*timeout*/ timeout);
+
+ nvme_ns_resv_report_cmd(/*cmd*/ &nvmeio->cmd,
+ /*nsid*/ nsid,
+ /*length*/ dxfer_len,
+ /*report_type*/ report_type);
+}
+
+void
+nvme_resv_register(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int cptpl, int iekey, int rrega,
+ uint8_t *data_ptr, uint32_t dxfer_len, uint32_t timeout)
+{
+ cam_fill_nvmeio(/*nvmeio*/ nvmeio,
+ /*retries*/ retries,
+ /*cbfcnp*/ cbfcnp,
+ /*flags*/ CAM_DIR_OUT,
+ /*data_ptr*/ data_ptr,
+ /*dxfer_len*/ dxfer_len,
+ /*timeout*/ timeout);
+
+ nvme_ns_resv_register_cmd(/*cmd*/ &nvmeio->cmd,
+ /*nsid*/ nsid,
+ /*cptpl*/ cptpl,
+ /*iekey*/ iekey,
+ /*rrega*/ rrega);
+}
+
+void
+nvme_resv_acquire(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int rtype, int iekey, int racqa,
+ uint8_t *data_ptr, uint32_t dxfer_len, uint32_t timeout)
+{
+ cam_fill_nvmeio(/*nvmeio*/ nvmeio,
+ /*retries*/ retries,
+ /*cbfcnp*/ cbfcnp,
+ /*flags*/ CAM_DIR_OUT,
+ /*data_ptr*/ data_ptr,
+ /*dxfer_len*/ dxfer_len,
+ /*timeout*/ timeout);
+
+ nvme_ns_resv_acquire_cmd(/*cmd*/ &nvmeio->cmd,
+ /*nsid*/ nsid,
+ /*rtype*/ rtype,
+ /*iekey*/ iekey,
+ /*racqa*/ racqa);
+}
+
+void
+nvme_resv_release(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int rtype, int iekey, int rrela,
+ uint8_t *data_ptr, uint32_t dxfer_len, uint32_t timeout)
+{
+ cam_fill_nvmeio(/*nvmeio*/ nvmeio,
+ /*retries*/ retries,
+ /*cbfcnp*/ cbfcnp,
+ /*flags*/ CAM_DIR_OUT,
+ /*data_ptr*/ data_ptr,
+ /*dxfer_len*/ dxfer_len,
+ /*timeout*/ timeout);
+
+ nvme_ns_resv_release_cmd(/*cmd*/ &nvmeio->cmd,
+ /*nsid*/ nsid,
+ /*rtype*/ rtype,
+ /*iekey*/ iekey,
+ /*rrela*/ rrela);
+}
+
+void
+nvme_format(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int ses, int pil, int pi, int mset, int lbaf,
+ uint32_t timeout)
+{
+ cam_fill_nvmeadmin(/*nvmeio*/ nvmeio,
+ /*retries*/ retries,
+ /*cbfcnp*/ cbfcnp,
+ /*flags*/ CAM_DIR_NONE,
+ /*data_ptr*/ NULL,
+ /*dxfer_len*/ 0,
+ /*timeout*/ timeout);
+
+ nvme_admin_format_cmd(/*cmd*/ &nvmeio->cmd,
+ /*nsid*/ nsid,
+ /*ses*/ ses,
+ /*pil*/ pil,
+ /*pi*/ pi,
+ /*mset*/ mset,
+ /*lbaf*/ lbaf);
+}
+
+void
+nvme_get_feature(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int sel, uint8_t feature, uint32_t cdw11,
+ int uuid_idx, uint8_t *data_ptr, uint32_t dxfer_len,
+ uint32_t timeout)
+{
+ cam_fill_nvmeadmin(/*nvmeio*/ nvmeio,
+ /*retries*/ retries,
+ /*cbfcnp*/ cbfcnp,
+ /*flags*/ CAM_DIR_IN,
+ /*data_ptr*/ data_ptr,
+ /*dxfer_len*/ dxfer_len,
+ /*timeout*/ timeout);
+
+ nvme_admin_get_feature_cmd(/*cmd*/ &nvmeio->cmd,
+ /*nsid*/ nsid,
+ /*sel*/ sel,
+ /*feature*/ feature,
+ /*cdw11*/ cdw11,
+ /*uuid_idx*/ uuid_idx);
+}
+
+void
+nvme_set_feature(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ uint32_t nsid, int sv, uint8_t feature, uint32_t cdw11,
+ uint32_t cdw12, uint32_t cdw13, uint32_t cdw14, uint32_t cdw15,
+ uint8_t *data_ptr, uint32_t dxfer_len, uint32_t timeout)
+{
+ cam_fill_nvmeadmin(/*nvmeio*/ nvmeio,
+ /*retries*/ retries,
+ /*cbfcnp*/ cbfcnp,
+ /*flags*/ CAM_DIR_OUT,
+ /*data_ptr*/ data_ptr,
+ /*dxfer_len*/ dxfer_len,
+ /*timeout*/ timeout);
+
+ nvme_admin_set_feature_cmd(/*cmd*/ &nvmeio->cmd,
+ /*nsid*/ nsid,
+ /*sv*/ sv,
+ /*feature*/ feature,
+ /*cdw11*/ cdw11,
+ /*cdw12*/ cdw12,
+ /*cdw13*/ cdw13,
+ /*cdw14*/ cdw14,
+ /*cdw15*/ cdw15);
+}
+
+void
+nvme_get_feature_hostid(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ int sel, int uuid_idx, uint8_t *data_ptr,
+ uint32_t dxfer_len, uint32_t timeout)
+{
+ nvme_get_feature(/*nvmeio*/ nvmeio,
+ /*retries*/ retries,
+ /*cbfcnp*/ cbfcnp,
+ /*nsid*/ 0,
+ /*sel*/ sel,
+ /*feature*/ NVME_FEAT_HOST_IDENTIFIER,
+ /*cdw11*/ 0,
+ /*uuid_idx*/ uuid_idx,
+ /*data_ptr*/ data_ptr,
+ /*dxfer_len*/ dxfer_len,
+ /*timeout*/ timeout);
+}
+
+void
+nvme_set_feature_hostid(struct ccb_nvmeio *nvmeio, uint32_t retries,
+ void (*cbfcnp)(struct cam_periph *, union ccb *),
+ int sv, int exhid, uint8_t *data_ptr,
+ uint32_t dxfer_len, uint32_t timeout)
+{
+ uint32_t cdw11 = 0;
+ if (exhid)
+ cdw11 = 0x01;
+
+ nvme_set_feature(/*nvmeio*/ nvmeio,
+ /*retries*/ retries,
+ /*cbfcnp*/ cbfcnp,
+ /*nsid*/ 0,
+ /*sv*/ sv,
+ /*feature*/ NVME_FEAT_HOST_IDENTIFIER,
+ /*cdw11*/ cdw11,
+ /*cdw12*/ 0,
+ /*cdw13*/ 0,
+ /*cdw14*/ 0,
+ /*cdw15*/ 0,
+ /*data_ptr*/ data_ptr,
+ /*dxfer_len*/ dxfer_len,
+ /*timeout*/ timeout);
+}
+
/*
* nvme_status_sbuf() returns 0 for success and -1 for failure.
*/
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Oct 2, 5:28 AM (16 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38667028
Default Alt Text
D59532.diff (8 KB)
Attached To
Mode
D59532: cam: Add NVMe reservation, format and features CCB building functions
Attached
Detach File
Event Timeline
Log In to Comment