| From 35b33c06617e30438e331bcad719c93f65ab7a3c Mon Sep 17 00:00:00 2001 |
| From: Agrim Bharat <agrimbharat@google.com> |
| Date: Thu, 25 Sep 2025 17:29:40 +0000 |
| Subject: [PATCH] Add support for command & feature lockdown log page |
| |
| --- |
| src/nvme/mi.h | 30 ++++++++++++++++++++++++++++++ |
| src/nvme/types.h | 16 ++++++++++++++++ |
| 2 files changed, 46 insertions(+) |
| |
| diff --git a/src/nvme/mi.h b/src/nvme/mi.h |
| index 56591595..d4f02fe2 100644 |
| --- a/src/nvme/mi.h |
| +++ b/src/nvme/mi.h |
| @@ -2274,6 +2274,36 @@ static inline int nvme_mi_admin_get_log_persistent_event(nvme_mi_ctrl_t ctrl, |
| return nvme_mi_admin_get_log(ctrl, &args); |
| } |
| |
| +/** |
| + * nvme_mi_admin_get_log_lockdown() - Retrieve lockdown Log |
| + * @ctrl: Controller to query |
| + * @cnscp: Contents and Scope of Command and Feature Identifier Lists |
| + * @lockdown_log: Buffer to store the lockdown log |
| + * |
| + * Return: The nvme command status if a response was received (see |
| + * &enum nvme_status_field) or -1 with errno set otherwise. |
| + */ |
| +static inline int nvme_mi_admin_get_log_lockdown(nvme_mi_ctrl_t ctrl, |
| + __u8 cnscp, struct nvme_lockdown_log *lockdown_log) |
| +{ |
| + struct nvme_get_log_args args = { |
| + .lpo = 0, |
| + .result = NULL, |
| + .log = lockdown_log, |
| + .args_size = sizeof(args), |
| + .lid = NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN, |
| + .len = sizeof(*lockdown_log), |
| + .nsid = NVME_NSID_ALL, |
| + .csi = NVME_CSI_NVM, |
| + .lsi = NVME_LOG_LSI_NONE, |
| + .lsp = cnscp, |
| + .uuidx = NVME_UUID_NONE, |
| + .rae = false, |
| + .ot = false, |
| + }; |
| + return nvme_mi_admin_get_log(ctrl, &args); |
| +} |
| + |
| /** |
| * nvme_mi_admin_security_send() - Perform a Security Send command on a |
| * controller. |
| diff --git a/src/nvme/types.h b/src/nvme/types.h |
| index 94066fc2..922dc2c0 100644 |
| --- a/src/nvme/types.h |
| +++ b/src/nvme/types.h |
| @@ -3816,6 +3816,20 @@ struct nvme_supported_cap_config_list_log { |
| struct nvme_capacity_config_desc cap_config_desc[]; |
| }; |
| |
| +/** |
| + * struct nvme_lockdown_log - Command and Feature Lockdown Log |
| + * @cfila: Contents of the Command and Feature Identifier List field in the log page. |
| + * @rsvd1: Reserved |
| + * @lngth: Length of Command and Feature Identifier List field |
| + * @cfil: Command and Feature Identifier List |
| + */ |
| +struct nvme_lockdown_log { |
| + __u8 cfila; |
| + __u8 rsvd1[2]; |
| + __u8 lngth; |
| + __u8 cfil[508]; |
| +}; |
| + |
| /** |
| * struct nvme_resv_notification_log - Reservation Notification Log |
| * @lpc: Log Page Count |
| @@ -6375,6 +6389,7 @@ enum nvme_identify_cns { |
| * @NVME_LOG_LID_SUPPORTED_CAP_CONFIG_LIST: Supported Capacity Configuration Lis |
| * @NVME_LOG_LID_FID_SUPPORTED_EFFECTS: Feature Identifiers Supported and Effects |
| * @NVME_LOG_LID_MI_CMD_SUPPORTED_EFFECTS: NVMe-MI Commands Supported and Effects |
| + * @NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN: Command and Feature Lockdown |
| * @NVME_LOG_LID_BOOT_PARTITION: Boot Partition |
| * @NVME_LOG_LID_DISCOVER: Discovery |
| * @NVME_LOG_LID_RESERVATION: Reservation Notification |
| @@ -6402,6 +6417,7 @@ enum nvme_cmd_get_log_lid { |
| NVME_LOG_LID_SUPPORTED_CAP_CONFIG_LIST = 0x11, |
| NVME_LOG_LID_FID_SUPPORTED_EFFECTS = 0x12, |
| NVME_LOG_LID_MI_CMD_SUPPORTED_EFFECTS = 0x13, |
| + NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN = 0x14, |
| NVME_LOG_LID_BOOT_PARTITION = 0x15, |
| NVME_LOG_LID_DISCOVER = 0x70, |
| NVME_LOG_LID_RESERVATION = 0x80, |
| -- |
| 2.51.0.618.g983fd99d29-goog |
| |