From: Gollu Appalanaidu Date: Fri, 5 Nov 2021 13:05:37 +0000 (+0100) Subject: types: add supported log pages log page (lid = 0x00) X-Git-Tag: v1.0-rc0~54^2~8 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=27f45627861c087ee0a2fb680b8ce5599e6cb09f;p=users%2Fsagi%2Flibnvme.git types: add supported log pages log page (lid = 0x00) Signed-off-by: Gollu Appalanaidu [dwagner: - ported from nvme-cli-monolithic - changed naming scheme to nvme_get_log_supported_log_pages] Signed-off-by: Daniel Wagner --- diff --git a/src/libnvme.map b/src/libnvme.map index d425ef0a..1b495099 100644 --- a/src/libnvme.map +++ b/src/libnvme.map @@ -123,6 +123,7 @@ nvme_get_log_reservation; nvme_get_log_sanitize; nvme_get_log_smart; + nvme_get_log_supported_log_pages; nvme_get_log_telemetry_ctrl; nvme_get_log_telemetry_host; nvme_get_new_host_telemetry; diff --git a/src/nvme/ioctl.c b/src/nvme/ioctl.c index c638a61b..b7a8b27e 100644 --- a/src/nvme/ioctl.c +++ b/src/nvme/ioctl.c @@ -612,6 +612,14 @@ static int __nvme_get_log(int fd, enum nvme_cmd_get_log_lid lid, bool rae, NVME_CSI_NVM, len, log); } +int nvme_get_log_supported_log_pages(int fd, bool rae, + struct nvme_supported_log_pages *log) +{ + BUILD_ASSERT(sizeof(struct nvme_supported_log_pages) == 1024); + return __nvme_get_log(fd, NVME_LOG_LID_SUPPORTED_LOG_PAGES, rae, + sizeof(*log), log); +} + int nvme_get_log_error(int fd, unsigned nr_entries, bool rae, struct nvme_error_log_page *log) { diff --git a/src/nvme/ioctl.h b/src/nvme/ioctl.h index 72fd02ca..310b7a11 100644 --- a/src/nvme/ioctl.h +++ b/src/nvme/ioctl.h @@ -793,6 +793,17 @@ static inline int nvme_get_log_simple(int fd, enum nvme_cmd_get_log_lid lid, return nvme_get_nsid_log(fd, lid, NVME_NSID_ALL, len, log); } +/** nvme_get_log_supported_log_pages() - Retrieve nmve supported log pages + * @fd: File descriptor of nvme device + * @rae: Retain asynchronous events + * @log: Array of LID supported and Effects data structures + * + * Return: The nvme command status if a response was received (see + * &enum nvme_status_field) or -1 with errno set otherwise. + */ +int nvme_get_log_supported_log_pages(int fd, bool rae, + struct nvme_supported_log_pages *log); + /** * nvme_get_log_error() - Retrieve nvme error log * @fd: File descriptor of nvme device diff --git a/src/nvme/types.h b/src/nvme/types.h index 7b7cd9ac..a8f4dd40 100644 --- a/src/nvme/types.h +++ b/src/nvme/types.h @@ -53,6 +53,8 @@ * @NVME_LOG_LSI_NONE: Use to omit a log lsi command parameter * @NVME_LOG_LPO_NONE: Use to omit a log lpo command parameter * @NVME_IDENTIFY_DATA_SIZE: The transfer size for nvme identify commands + * @NVME_LOG_SUPPORTED_LOG_PAGES_MAX: The lagest possible index in the supported + * log pages log. * @NVME_ID_NVMSET_LIST_MAX: The largest possible nvmset index in identify * nvmeset * @NVME_ID_UUID_LIST_MAX: The largest possible uuid index in identify @@ -89,6 +91,7 @@ enum nvme_constants { NVME_LOG_LSI_NONE = 0, NVME_LOG_LPO_NONE = 0, NVME_IDENTIFY_DATA_SIZE = 4096, + NVME_LOG_SUPPORTED_LOG_PAGES_MAX = 256, NVME_ID_NVMSET_LIST_MAX = 31, NVME_ID_UUID_LIST_MAX = 127, NVME_ID_CTRL_LIST_MAX = 2047, @@ -2201,6 +2204,16 @@ struct nvme_id_domain_list { struct nvme_id_domain_attr domain_attr[NVME_ID_DOMAIN_LIST_MAX]; }; +/** + * struct nvme_supported_log_pages - + * @lid_support: + * + * Supported Log Pages (Log Identifier 00h) + */ +struct nvme_supported_log_pages { + __le32 lid_support[NVME_LOG_SUPPORTED_LOG_PAGES_MAX]; +}; + /** * struct nvme_error_log_page - Error Information Log Entry (Log Identifier 01h) * @error_count: Error Count: a 64-bit incrementing error count, @@ -5069,6 +5082,7 @@ enum nvme_identify_cns { /** * enum nvme_cmd_get_log_lid - + * @NVME_LOG_LID_SUPPORTED_LOG_PAGES: * @NVME_LOG_LID_ERROR: * @NVME_LOG_LID_SMART: * @NVME_LOG_LID_FW_SLOT: @@ -5092,6 +5106,7 @@ enum nvme_identify_cns { * @NVME_LOG_LID_ZNS_CHANGED_ZONES: */ enum nvme_cmd_get_log_lid { + NVME_LOG_LID_SUPPORTED_LOG_PAGES = 0x00, NVME_LOG_LID_ERROR = 0x01, NVME_LOG_LID_SMART = 0x02, NVME_LOG_LID_FW_SLOT = 0x03,