/// Latency Monitor Log
#define C3_LATENCY_MON_LOG_BUF_LEN 0x200
-#define C3_LATENCY_MON_OPCODE 0xC3
-#define NVME_FEAT_OCP_LATENCY_MONITOR 0xC5
static __u8 lat_mon_guid[GUID_LEN] = {
0x92, 0x7a, 0xc0, 0x8c,
}
memset(data, 0, sizeof(__u8) * C3_LATENCY_MON_LOG_BUF_LEN);
- ret = ocp_get_log_simple(dev, C3_LATENCY_MON_OPCODE, C3_LATENCY_MON_LOG_BUF_LEN,
- data);
+ ret = ocp_get_log_simple(dev, OCP_LID_LMLOG, C3_LATENCY_MON_LOG_BUF_LEN, data);
if (strcmp(format, "json"))
fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret, false), ret);
struct nvme_set_features_args args = {
.args_size = sizeof(args),
.fd = dev_fd(dev),
- .fid = NVME_FEAT_OCP_LATENCY_MONITOR,
+ .fid = OCP_FID_LM,
.nsid = 0,
.cdw12 = 0,
.save = 1,
if (err < 0) {
perror("set-feature");
} else if (!err) {
- printf("NVME_FEAT_OCP_LATENCY_MONITOR: 0x%02x\n", NVME_FEAT_OCP_LATENCY_MONITOR);
+ printf("NVME_FEAT_OCP_LATENCY_MONITOR: 0x%02x\n", OCP_FID_LM);
printf("active bucket timer threshold: 0x%x\n",
le16_to_cpu(buf.active_bucket_timer_threshold));
printf("active threshold a: 0x%x\n", buf.active_threshold_a);
"No argument prints current mode.";
const char *mode = "[0-3]: default/rom/wtm/normal";
const __u32 nsid = 0;
- const __u8 fid = 0xc2;
+ const __u8 fid = OCP_FID_ROWTM;
struct nvme_dev *dev;
int err;
}
memset(header_data, 0, sizeof(__u8) * C9_TELEMETRY_STR_LOG_LEN);
- ret = ocp_get_log_simple(dev, C9_TELEMETRY_STRING_LOG_ENABLE_OPCODE,
- C9_TELEMETRY_STR_LOG_LEN, header_data);
+ ret = ocp_get_log_simple(dev, OCP_LID_TELSLG, C9_TELEMETRY_STR_LOG_LEN, header_data);
if (!ret) {
log_data = (struct telemetry_str_log_format *)header_data;
}
memset(pC9_string_buffer, 0, sizeof(__u8) * total_log_page_sz);
- ret = ocp_get_log_simple(dev, C9_TELEMETRY_STRING_LOG_ENABLE_OPCODE,
- total_log_page_sz, pC9_string_buffer);
+ ret = ocp_get_log_simple(dev, OCP_LID_TELSLG, total_log_page_sz, pC9_string_buffer);
} else {
fprintf(stderr, "ERROR : OCP : Unable to read C9 data.\n");
}
/* C5 Unsupported Requirement Log Page */
#define C5_UNSUPPORTED_REQS_LEN 4096
-#define C5_UNSUPPORTED_REQS_OPCODE 0xC5
static __u8 unsupported_req_guid[GUID_LEN] = {
0x2F, 0x72, 0x9C, 0x0E,
}
memset(data, 0, sizeof(__u8) * C5_UNSUPPORTED_REQS_LEN);
- ret = ocp_get_log_simple(dev, C5_UNSUPPORTED_REQS_OPCODE, C5_UNSUPPORTED_REQS_LEN, data);
+ ret = ocp_get_log_simple(dev, OCP_LID_URLP, C5_UNSUPPORTED_REQS_LEN, data);
if (!ret) {
log_data = (struct unsupported_requirement_log *)data;
/// Error Recovery Log Page(0xC1)
#define C1_ERROR_RECOVERY_LOG_BUF_LEN 0x200
-#define C1_ERROR_RECOVERY_OPCODE 0xC1
static __u8 error_recovery_guid[GUID_LEN] = {
0x44, 0xd9, 0x31, 0x21,
}
memset(data, 0, sizeof(__u8) * C1_ERROR_RECOVERY_LOG_BUF_LEN);
- ret = ocp_get_log_simple(dev, C1_ERROR_RECOVERY_OPCODE, C1_ERROR_RECOVERY_LOG_BUF_LEN,
- data);
+ ret = ocp_get_log_simple(dev, OCP_LID_EREC, C1_ERROR_RECOVERY_LOG_BUF_LEN, data);
if (!ret) {
log_data = (struct ocp_error_recovery_log_page *)data;
/// Device Capabilities (Log Identifier C4h) Requirements
#define C4_DEV_CAP_REQ_LEN 0x1000
-#define C4_DEV_CAP_REQ_OPCODE 0xC4
static __u8 dev_cap_req_guid[GUID_LEN] = {
0x97, 0x42, 0x05, 0x0d,
0xd1, 0xe1, 0xc9, 0x98,
}
memset(data, 0, sizeof(__u8) * C4_DEV_CAP_REQ_LEN);
- ret = ocp_get_log_simple(dev, C4_DEV_CAP_REQ_OPCODE, C4_DEV_CAP_REQ_LEN, data);
+ ret = ocp_get_log_simple(dev, OCP_LID_DCLP, C4_DEV_CAP_REQ_LEN, data);
if (!ret) {
log_data = (struct ocp_device_capabilities_log_page *)data;
struct nvme_set_features_args args = {
.args_size = sizeof(args),
.fd = dev_fd(dev),
- .fid = 0xC8,
+ .fid = OCP_FID_TEL_CFG,
.nsid = 0xFFFFFFFF,
.cdw11 = tps,
.cdw12 = 0,
const char *power_state = "DSSD Power State to set in watts";
const char *save = "Specifies that the controller shall save the attribute";
const __u32 nsid = 0;
- const __u8 fid = 0xC7;
struct nvme_dev *dev;
int err;
return err;
if (argconfig_parse_seen(opts, "power-state"))
- err = set_dssd_power_state(dev, nsid, fid, cfg.power_state,
- cfg.save,
- !argconfig_parse_seen(opts, "no-uuid"));
+ err = set_dssd_power_state(dev, nsid, OCP_FID_DSSDPS, cfg.power_state, cfg.save,
+ !argconfig_parse_seen(opts, "no-uuid"));
dev_close(dev);
const char *all = "Print out all 3 values at once - Current, Default, and Saved";
const char *sel = "[0-3]: current/default/saved/supported/";
const __u32 nsid = 0;
- const __u8 fid = 0xC7;
+ const __u8 fid = OCP_FID_DSSDPS;
struct nvme_dev *dev;
int i, err;
const char *plp_health_interval = "[31:16]:PLP Health Check Interval";
const char *save = "Specifies that the controller shall save the attribute";
const __u32 nsid = 0;
- const __u8 fid = 0xc6;
struct nvme_dev *dev;
int err;
__u32 result;
struct nvme_set_features_args args = {
.args_size = sizeof(args),
.fd = dev_fd(dev),
- .fid = fid,
+ .fid = OCP_FID_PLPI,
.nsid = nsid,
.cdw11 = cfg.plp_health_interval << 16,
.cdw12 = 0,
struct nvme_get_features_args args = {
.args_size = sizeof(args),
.fd = dev_fd(dev),
- .fid = fid,
+ .fid = OCP_FID_PLPI,
.nsid = nsid,
.sel = cfg.sel,
.cdw11 = 0,
const char *epn = "[0]:Enable Panic Notices";
const char *save = "Specifies that the controller shall save the attribute";
const __u32 nsid = 0;
- const __u8 fid = 0xc9;
struct nvme_dev *dev;
int err;
__u32 result;
struct nvme_set_features_args args = {
.args_size = sizeof(args),
.fd = dev_fd(dev),
- .fid = fid,
+ .fid = OCP_FID_DAEC,
.nsid = nsid,
.cdw11 = cfg.epn ? 1 : 0,
.cdw12 = 0,
const char *desc = "Issue Get Feature command (FID : 0xC9) DSSD Async Event Config";
const char *sel = "[0-3]: current/default/saved/supported";
const __u32 nsid = 0;
- const __u8 fid = 0xc9;
+ const __u8 fid = OCP_FID_DAEC;
struct nvme_dev *dev;
__u32 result;
int err;
/* C7 TCG Configuration Log Page */
#define C7_TCG_CONFIGURATION_LEN 512
-#define C7_TCG_CONFIGURATION_OPCODE 0xC7
static __u8 tcg_configuration_guid[GUID_LEN] = {
0x06, 0x40, 0x24, 0xBD,
}
memset(data, 0, sizeof(__u8) * C7_TCG_CONFIGURATION_LEN);
- ret = ocp_get_log_simple(dev, C7_TCG_CONFIGURATION_OPCODE, C7_TCG_CONFIGURATION_LEN, data);
+ ret = ocp_get_log_simple(dev, OCP_LID_TCGL, C7_TCG_CONFIGURATION_LEN, data);
if (!ret) {
log_data = (struct tcg_configuration_log *)data;
struct erri_get_cq_entry cq_entry;
int err;
int i;
- const __u8 fid = 0xc0;
+ const __u8 fid = OCP_FID_ERRI;
_cleanup_free_ struct erri_entry *entry = NULL;
struct nvme_set_features_args args = {
.args_size = sizeof(args),
.fd = dev_fd(dev),
- .fid = 0xc0,
+ .fid = OCP_FID_ERRI,
.cdw11 = cfg->number,
.data_len = cfg->number * sizeof(struct erri_entry),
.timeout = nvme_cfg.timeout,
{
struct ieee1667_get_cq_entry cq_entry;
int err;
- const __u8 fid = 0xc4;
+ const __u8 fid = OCP_FID_1667;
struct nvme_get_features_args args = {
.result = (__u32 *)&cq_entry,
{
struct ieee1667_get_cq_entry cq_entry;
int err;
- const __u8 fid = 0xc4;
+ const __u8 fid = OCP_FID_1667;
bool enable = argconfig_parse_seen(opts, "enable");
struct nvme_set_features_args args = {
#ifndef OCP_NVME_H
#define OCP_NVME_H
+#include "common.h"
+
struct __packed ssd_latency_monitor_log {
__u8 feature_status; /* 0x00 */
__u8 rsvd1; /* 0x01 */
__u8 log_page_guid[GUID_LEN];
};
+
+enum ocp_dssd_log_id {
+ OCP_LID_SMART = 0xc0, /* SMART / Helth Information Extended */
+ OCP_LID_EREC, /* Error Recovery */
+ OCP_LID_FAHL_OBSOLETE, /* Firmware Activation History (Obsolete) */
+ OCP_LID_LMLOG, /* Latency Monitor */
+ OCP_LID_DCLP, /* Device Capabilities */
+ OCP_LID_URLP, /* Unsupported Requirements */
+ OCP_LID_HWCOMP, /* Hardware Component */
+ OCP_LID_TCGL, /* TCG Configuration */
+ OCP_LID_RESERVED, /* Reserved for future use */
+ OCP_LID_TELSLG, /* Telemetry String */
+ OCP_LID_LMLOG_DEBUG, /* Latency Monitor Debug Telemetry */
+};
+
+enum ocp_dssd_feature_id {
+ OCP_FID_ERRI = 0xc0, /* Error Injection */
+ OCP_FID_CFUH, /* Clear Firmware Update History (Obsolete) */
+ OCP_FID_ROWTM, /* EOL/PLP Failure Mode */
+ OCP_FID_CPCIE, /* Clear PCIe Correctable Error Counters */
+ OCP_FID_1667, /* Enable IEEE1667 Silo */
+ OCP_FID_LM, /* Latency Monitor */
+ OCP_FID_PLPI, /* PLP Health Check Interval */
+ OCP_FID_DSSDPS, /* DSSD Power State */
+ OCP_FID_TEL_CFG, /* Telemetry Profile */
+ OCP_FID_DAEC, /* DSSD Asynchronous Event Configuration */
+};
#endif /* OCP_NVME_H */