From 7f1d94e16b71f269a7ed75963a77323a44e04592 Mon Sep 17 00:00:00 2001 From: Brandon Paupore Date: Tue, 17 Jun 2025 15:07:24 -0500 Subject: [PATCH] sndk: rework shared capabilities with wdc plugin When we split things off for the SanDisk plugin there were a few capability flags left off, which cause mismatches between the versions maintained for the WDC plugin. For now, this updates the flags to use shared values between the plugins, allowing for proper determination of support using the various run_wdc functions. This also adds one missing capabilities check for a command still supported in the new plugin. Reviewed-by: Jeffrey Lien Signed-off-by: Brandon Paupore --- plugins/sandisk/sandisk-nvme.c | 2 + plugins/sandisk/sandisk-utils.c | 272 +------------------------------- plugins/sandisk/sandisk-utils.h | 80 +++++----- plugins/wdc/wdc-nvme-cmds.h | 2 + plugins/wdc/wdc-nvme.c | 8 +- 5 files changed, 59 insertions(+), 305 deletions(-) diff --git a/plugins/sandisk/sandisk-nvme.c b/plugins/sandisk/sandisk-nvme.c index cafada17b3..2f33dffed4 100644 --- a/plugins/sandisk/sandisk-nvme.c +++ b/plugins/sandisk/sandisk-nvme.c @@ -172,6 +172,8 @@ static int sndk_capabilities(int argc, char **argv, capabilities & SNDK_DRIVE_CAP_CLEAR_PCIE_MASK ? "Supported" : "Not Supported"); printf("get-drive-status : %s\n", capabilities & SNDK_DRIVE_CAP_DRIVE_STATUS ? "Supported" : "Not Supported"); + printf("clear-assert-dump : %s\n", + capabilities & SNDK_DRIVE_CAP_CLEAR_ASSERT ? "Supported" : "Not Supported"); printf("drive-resize : %s\n", capabilities & SNDK_DRIVE_CAP_RESIZE ? "Supported" : "Not Supported"); printf("vs-fw-activate-history : %s\n", diff --git a/plugins/sandisk/sandisk-utils.c b/plugins/sandisk/sandisk-utils.c index fdc05eadaf..a741264361 100644 --- a/plugins/sandisk/sandisk-utils.c +++ b/plugins/sandisk/sandisk-utils.c @@ -137,7 +137,6 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev) int ret; uint32_t read_device_id = -1, read_vendor_id = -1; - __u32 cust_id; ret = sndk_get_pci_ids(r, dev, &read_device_id, &read_vendor_id); if (ret < 0) { @@ -158,201 +157,6 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev) switch (read_vendor_id) { case SNDK_NVME_WDC_VID: switch (read_device_id) { - case SNDK_NVME_SN630_DEV_ID: - case SNDK_NVME_SN630_DEV_ID_1: - capabilities = (SNDK_DRIVE_CAP_INTERNAL_LOG | - SNDK_DRIVE_CAP_DRIVE_STATUS | - SNDK_DRIVE_CAP_CLEAR_ASSERT | - SNDK_DRIVE_CAP_RESIZE | - SNDK_DRIVE_CAP_CLEAR_PCIE); - /* verify the 0xCA log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_NVME_GET_DEVICE_INFO_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_CA_LOG_PAGE; - - /* verify the 0xD0 log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_NVME_GET_VU_SMART_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_D0_LOG_PAGE; - break; - - case SNDK_NVME_SN640_DEV_ID: - case SNDK_NVME_SN640_DEV_ID_1: - case SNDK_NVME_SN640_DEV_ID_2: - case SNDK_NVME_SN640_DEV_ID_3: - /* verify the 0xC0 log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_NVME_GET_SMART_CLOUD_ATTR_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_C0_LOG_PAGE; - - capabilities |= (SNDK_DRIVE_CAP_INTERNAL_LOG | - SNDK_DRIVE_CAP_DRIVE_STATUS | - SNDK_DRIVE_CAP_CLEAR_ASSERT | - SNDK_DRIVE_CAP_RESIZE | - SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY | - SNDK_DRIVE_CAP_DISABLE_CTLR_TELE_LOG | - SNDK_DRIVE_CAP_REASON_ID | - SNDK_DRIVE_CAP_LOG_PAGE_DIR); - - /* verify the 0xC1 (OCP Error Recovery) log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_ERROR_REC_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_OCP_C1_LOG_PAGE; - - /* verify the 0xC3 (OCP Latency Monitor) log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_LATENCY_MON_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_C3_LOG_PAGE; - - /* verify the 0xC4 (OCP Device Capabilities) log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_DEV_CAP_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE; - - /* verify the 0xC5 (OCP Unsupported Requirements) log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_UNSUPPORTED_REQS_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE; - - /* verify the 0xCA log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_NVME_GET_DEVICE_INFO_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_CA_LOG_PAGE; - - /* verify the 0xD0 log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_NVME_GET_VU_SMART_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_D0_LOG_PAGE; - - cust_id = run_wdc_get_fw_cust_id(r, dev); - if (cust_id == SNDK_INVALID_CUSTOMER_ID) { - fprintf(stderr, "%s: ERROR: SNDK: invalid customer id\n", __func__); - return -1; - } - - if ((cust_id == SNDK_CUSTOMER_ID_0x1004) || - (cust_id == SNDK_CUSTOMER_ID_0x1008) || - (cust_id == SNDK_CUSTOMER_ID_0x1005) || - (cust_id == SNDK_CUSTOMER_ID_0x1304)) - capabilities |= (SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY | - SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE | - SNDK_DRIVE_CAP_INFO | - SNDK_DRIVE_CAP_CLOUD_SSD_VERSION); - else - capabilities |= (SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY | - SNDK_DRIVE_CAP_CLEAR_PCIE); - - break; - - case SNDK_NVME_SN840_DEV_ID: - case SNDK_NVME_SN840_DEV_ID_1: - /* verify the 0xC0 log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_NVME_GET_EOL_STATUS_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_C0_LOG_PAGE; - - capabilities |= (SNDK_DRIVE_CAP_INTERNAL_LOG | - SNDK_DRIVE_CAP_DRIVE_STATUS | - SNDK_DRIVE_CAP_CLEAR_ASSERT | - SNDK_DRIVE_CAP_RESIZE | - SNDK_DRIVE_CAP_CLEAR_PCIE | - SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY | - SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY | - SNDK_DRIVE_CAP_DISABLE_CTLR_TELE_LOG | - SNDK_DRIVE_CAP_REASON_ID | - SNDK_DRIVE_CAP_LOG_PAGE_DIR); - - /* verify the 0xCA log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_NVME_GET_DEVICE_INFO_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_CA_LOG_PAGE; - - /* verify the 0xD0 log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_NVME_GET_VU_SMART_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_D0_LOG_PAGE; - break; - - case SNDK_NVME_SN650_DEV_ID: - case SNDK_NVME_SN650_DEV_ID_1: - case SNDK_NVME_SN650_DEV_ID_2: - case SNDK_NVME_SN650_DEV_ID_3: - case SNDK_NVME_SN650_DEV_ID_4: - case SNDK_NVME_SN655_DEV_ID: - case SNDK_NVME_SN655_DEV_ID_1: - /* verify the 0xC0 log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_NVME_GET_SMART_CLOUD_ATTR_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_C0_LOG_PAGE; - - /* verify the 0xC1 (OCP Error Recovery) log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_ERROR_REC_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_OCP_C1_LOG_PAGE; - - /* verify the 0xC3 (OCP Latency Monitor) log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_LATENCY_MON_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_C3_LOG_PAGE; - - /* verify the 0xC4 (OCP Device Capabilities) log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_DEV_CAP_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE; - - /* verify the 0xC5 (OCP Unsupported Requirements) log page is supported */ - if (run_wdc_nvme_check_supported_log_page(r, dev, - SNDK_UNSUPPORTED_REQS_LOG_ID)) - capabilities |= SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE; - - capabilities |= (SNDK_DRIVE_CAP_INTERNAL_LOG | - SNDK_DRIVE_CAP_DRIVE_STATUS | - SNDK_DRIVE_CAP_CLEAR_ASSERT | - SNDK_DRIVE_CAP_RESIZE | - SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY | - SNDK_DRIVE_CAP_DISABLE_CTLR_TELE_LOG | - SNDK_DRIVE_CAP_REASON_ID | - SNDK_DRIVE_CAP_LOG_PAGE_DIR); - - cust_id = run_wdc_get_fw_cust_id(r, dev); - if (cust_id == SNDK_INVALID_CUSTOMER_ID) { - fprintf(stderr, "%s: ERROR: SNDK: invalid customer id\n", __func__); - return -1; - } - - if ((cust_id == SNDK_CUSTOMER_ID_0x1004) || - (cust_id == SNDK_CUSTOMER_ID_0x1008) || - (cust_id == SNDK_CUSTOMER_ID_0x1005) || - (cust_id == SNDK_CUSTOMER_ID_0x1304)) - capabilities |= (SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY | - SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE | - SNDK_DRIVE_CAP_INFO | - SNDK_DRIVE_CAP_CLOUD_SSD_VERSION); - else - capabilities |= (SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY | - SNDK_DRIVE_CAP_CLEAR_PCIE); - - break; - - case SNDK_NVME_SN861_DEV_ID: - case SNDK_NVME_SN861_DEV_ID_1: - case SNDK_NVME_SN861_DEV_ID_2: - capabilities |= (SNDK_DRIVE_CAP_C0_LOG_PAGE | - SNDK_DRIVE_CAP_C3_LOG_PAGE | - SNDK_DRIVE_CAP_CA_LOG_PAGE | - SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE | - SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE | - SNDK_DRIVE_CAP_INTERNAL_LOG | - SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 | - SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE | - SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY | - SNDK_DRIVE_CAP_INFO | - SNDK_DRIVE_CAP_CLOUD_SSD_VERSION | - SNDK_DRIVE_CAP_LOG_PAGE_DIR | - SNDK_DRIVE_CAP_DRIVE_STATUS | - SNDK_DRIVE_CAP_SET_LATENCY_MONITOR); - break; - case SNDK_NVME_SNTMP_DEV_ID: capabilities |= (SNDK_DRIVE_CAP_C0_LOG_PAGE | SNDK_DRIVE_CAP_C3_LOG_PAGE | @@ -377,86 +181,14 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev) case SNDK_NVME_SNDK_VID: switch (read_device_id) { - case SNDK_NVME_SN520_DEV_ID: - case SNDK_NVME_SN520_DEV_ID_1: - case SNDK_NVME_SN520_DEV_ID_2: - case SNDK_NVME_SN810_DEV_ID: - capabilities = SNDK_DRIVE_CAP_DUI_DATA; - break; - - case SNDK_NVME_SN820CL_DEV_ID: - capabilities = SNDK_DRIVE_CAP_DUI_DATA | - SNDK_DRIVE_CAP_CLOUD_BOOT_SSD_VERSION | - SNDK_DRIVE_CAP_CLOUD_LOG_PAGE | - SNDK_DRIVE_CAP_C0_LOG_PAGE | - SNDK_DRIVE_CAP_HW_REV_LOG_PAGE | - SNDK_DRIVE_CAP_INFO | - SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE | - SNDK_DRIVE_CAP_NAND_STATS | - SNDK_DRIVE_CAP_DEVICE_WAF | - SNDK_DRIVE_CAP_TEMP_STATS; - break; - - case SNDK_NVME_SN720_DEV_ID: - capabilities = SNDK_DRIVE_CAP_DUI_DATA | - SNDK_DRIVE_CAP_NAND_STATS | - SNDK_DRIVE_CAP_NS_RESIZE; - break; - - case SNDK_NVME_SN730_DEV_ID: - capabilities = SNDK_DRIVE_CAP_DUI | - SNDK_DRIVE_CAP_NAND_STATS | - SNDK_DRIVE_CAP_INFO | - SNDK_DRIVE_CAP_TEMP_STATS | - SNDK_DRIVE_CAP_VUC_CLEAR_PCIE | - SNDK_DRIVE_CAP_PCIE_STATS; - break; - - case SNDK_NVME_SN530_DEV_ID_1: - case SNDK_NVME_SN530_DEV_ID_2: - case SNDK_NVME_SN530_DEV_ID_3: - case SNDK_NVME_SN530_DEV_ID_4: - case SNDK_NVME_SN530_DEV_ID_5: - case SNDK_NVME_SN350_DEV_ID: - case SNDK_NVME_SN570_DEV_ID: - case SNDK_NVME_SN850X_DEV_ID: - case SNDK_NVME_SN5000_DEV_ID_1: - case SNDK_NVME_SN5000_DEV_ID_2: - case SNDK_NVME_SN5000_DEV_ID_3: - case SNDK_NVME_SN5000_DEV_ID_4: - case SNDK_NVME_SN7000S_DEV_ID_1: case SNDK_NVME_SN7150_DEV_ID_1: case SNDK_NVME_SN7150_DEV_ID_2: case SNDK_NVME_SN7150_DEV_ID_3: case SNDK_NVME_SN7150_DEV_ID_4: case SNDK_NVME_SN7150_DEV_ID_5: - case SNDK_NVME_SN7100_DEV_ID_1: - case SNDK_NVME_SN7100_DEV_ID_2: - case SNDK_NVME_SN7100_DEV_ID_3: - case SNDK_NVME_SN8000S_DEV_ID: - case SNDK_NVME_SN5100S_DEV_ID_1: - case SNDK_NVME_SN5100S_DEV_ID_2: - case SNDK_NVME_SN5100S_DEV_ID_3: - case SNDK_NVME_SN740_DEV_ID: - case SNDK_NVME_SN740_DEV_ID_1: - case SNDK_NVME_SN740_DEV_ID_2: - case SNDK_NVME_SN740_DEV_ID_3: - case SNDK_NVME_SN340_DEV_ID: capabilities = SNDK_DRIVE_CAP_DUI; break; - case SNDK_NVME_ZN350_DEV_ID: - case SNDK_NVME_ZN350_DEV_ID_1: - capabilities = SNDK_DRIVE_CAP_DUI_DATA | - SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE | - SNDK_DRIVE_CAP_C0_LOG_PAGE | - SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY | - SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 | - SNDK_DRIVE_CAP_INFO | - SNDK_DRIVE_CAP_CLOUD_SSD_VERSION | - SNDK_DRIVE_CAP_LOG_PAGE_DIR; - break; - default: capabilities = 0; } @@ -465,6 +197,10 @@ __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev) capabilities = 0; } + /* Check for fallback WDC plugin support */ + if (!capabilities) + capabilities = run_wdc_get_drive_capabilities(r, dev); + return capabilities; } diff --git a/plugins/sandisk/sandisk-utils.h b/plugins/sandisk/sandisk-utils.h index afbc018c3a..3324c1e5bd 100644 --- a/plugins/sandisk/sandisk-utils.h +++ b/plugins/sandisk/sandisk-utils.h @@ -96,42 +96,50 @@ #define SNDK_NVME_SN5100S_DEV_ID_2 0x5062 #define SNDK_NVME_SN5100S_DEV_ID_3 0x5063 -#define SNDK_DRIVE_CAP_INTERNAL_LOG 0x0000000000000001 -#define SNDK_DRIVE_CAP_C1_LOG_PAGE 0x0000000000000002 -#define SNDK_DRIVE_CAP_CA_LOG_PAGE 0x0000000000000004 -#define SNDK_DRIVE_CAP_D0_LOG_PAGE 0x0000000000000008 -#define SNDK_DRIVE_CAP_DRIVE_STATUS 0x0000000000000010 -#define SNDK_DRIVE_CAP_CLEAR_ASSERT 0x0000000000000020 -#define SNDK_DRIVE_CAP_CLEAR_PCIE 0x0000000000000040 -#define SNDK_DRIVE_CAP_RESIZE 0x0000000000000080 -#define SNDK_DRIVE_CAP_NAND_STATS 0x0000000000000100 -#define SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY 0x0000000000000200 -#define SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY 0x0000000000000400 -#define SNDK_DRIVE_CAP_DISABLE_CTLR_TELE_LOG 0x0000000000000800 -#define SNDK_DRIVE_CAP_REASON_ID 0x0000000000001000 -#define SNDK_DRIVE_CAP_LOG_PAGE_DIR 0x0000000000002000 -#define SNDK_DRIVE_CAP_NS_RESIZE 0x0000000000004000 -#define SNDK_DRIVE_CAP_INFO 0x0000000000008000 -#define SNDK_DRIVE_CAP_C0_LOG_PAGE 0x0000000000010000 -#define SNDK_DRIVE_CAP_TEMP_STATS 0x0000000000020000 -#define SNDK_DRIVE_CAP_VUC_CLEAR_PCIE 0x0000000000040000 -#define SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE 0x0000000000080000 -#define SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 0x0000000000100000 -#define SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY 0x0000000000200000 -#define SNDK_DRIVE_CAP_CLOUD_SSD_VERSION 0x0000000000400000 -#define SNDK_DRIVE_CAP_PCIE_STATS 0x0000000000800000 -#define SNDK_DRIVE_CAP_HW_REV_LOG_PAGE 0x0000000001000000 -#define SNDK_DRIVE_CAP_C3_LOG_PAGE 0x0000000002000000 -#define SNDK_DRIVE_CAP_CLOUD_BOOT_SSD_VERSION 0x0000000004000000 -#define SNDK_DRIVE_CAP_CLOUD_LOG_PAGE 0x0000000008000000 -#define SNDK_DRIVE_CAP_DUI_DATA 0x0000000010000000 -#define SNDK_DRIVE_CAP_VUC_LOG 0x0000000020000000 -#define SNDK_DRIVE_CAP_DUI 0x0000000040000000 -#define SNDK_DRIVE_CAP_OCP_C1_LOG_PAGE 0x0000000080000000 -#define SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE 0x0000000100000000 -#define SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE 0x0000000200000000 -#define SNDK_DRIVE_CAP_DEVICE_WAF 0x0000000400000000 -#define SNDK_DRIVE_CAP_SET_LATENCY_MONITOR 0x0000000800000000 +/* Shared flag space with WDC plugin */ +#define SNDK_DRIVE_CAP_RESERVED1 0x0000000000000001 +#define SNDK_DRIVE_CAP_INTERNAL_LOG 0x0000000000000002 +#define SNDK_DRIVE_CAP_C1_LOG_PAGE 0x0000000000000004 +#define SNDK_DRIVE_CAP_CA_LOG_PAGE 0x0000000000000008 +#define SNDK_DRIVE_CAP_D0_LOG_PAGE 0x0000000000000010 +#define SNDK_DRIVE_CAP_DRIVE_STATUS 0x0000000000000020 +#define SNDK_DRIVE_CAP_CLEAR_ASSERT 0x0000000000000040 +#define SNDK_DRIVE_CAP_CLEAR_PCIE 0x0000000000000080 +#define SNDK_DRIVE_CAP_RESIZE 0x0000000000000100 +#define SNDK_DRIVE_CAP_NAND_STATS 0x0000000000000200 +#define SNDK_DRIVE_CAP_RESERVED2 0x0000000000000400 +#define SNDK_DRIVE_CAP_RESERVED3 0x0000000000000800 +#define SNDK_DRIVE_CAP_RESERVED4 0x0000000000001000 +#define SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY 0x0000000000002000 +#define SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY 0x0000000000004000 +#define SNDK_DRIVE_CAP_DISABLE_CTLR_TELE_LOG 0x0000000000008000 +#define SNDK_DRIVE_CAP_REASON_ID 0x0000000000010000 +#define SNDK_DRIVE_CAP_LOG_PAGE_DIR 0x0000000000020000 +#define SNDK_DRIVE_CAP_NS_RESIZE 0x0000000000040000 +#define SNDK_DRIVE_CAP_INFO 0x0000000000080000 +#define SNDK_DRIVE_CAP_C0_LOG_PAGE 0x0000000000100000 +#define SNDK_DRIVE_CAP_TEMP_STATS 0x0000000000200000 +#define SNDK_DRIVE_CAP_VUC_CLEAR_PCIE 0x0000000000400000 +#define SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE 0x0000000000800000 +#define SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2 0x0000000001000000 +#define SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY 0x0000000002000000 +#define SNDK_DRIVE_CAP_CLOUD_SSD_VERSION 0x0000000004000000 +#define SNDK_DRIVE_CAP_PCIE_STATS 0x0000000008000000 +#define SNDK_DRIVE_CAP_HW_REV_LOG_PAGE 0x0000000010000000 +#define SNDK_DRIVE_CAP_C3_LOG_PAGE 0x0000000020000000 +#define SNDK_DRIVE_CAP_CLOUD_BOOT_SSD_VERSION 0x0000000040000000 +#define SNDK_DRIVE_CAP_CLOUD_LOG_PAGE 0x0000000080000000 +#define SNDK_DRIVE_CAP_RESERVED5 0x0000000100000000 +#define SNDK_DRIVE_CAP_DUI_DATA 0x0000000200000000 +#define SNDK_DRIVE_CAP_VUC_LOG 0x0000000400000000 +#define SNDK_DRIVE_CAP_DUI 0x0000000800000000 +#define SNDK_DRIVE_CAP_RESERVED6 0x0000001000000000 +#define SNDK_DRIVE_CAP_OCP_C1_LOG_PAGE 0x0000002000000000 +#define SNDK_DRIVE_CAP_OCP_C4_LOG_PAGE 0x0000004000000000 +#define SNDK_DRIVE_CAP_OCP_C5_LOG_PAGE 0x0000008000000000 +#define SNDK_DRIVE_CAP_DEVICE_WAF 0x0000010000000000 +#define SNDK_DRIVE_CAP_SET_LATENCY_MONITOR 0x0000020000000000 +/* Any new capability flags should be added to the WDC plugin */ #define SNDK_DRIVE_CAP_SMART_LOG_MASK (SNDK_DRIVE_CAP_C0_LOG_PAGE | \ SNDK_DRIVE_CAP_C1_LOG_PAGE | \ diff --git a/plugins/wdc/wdc-nvme-cmds.h b/plugins/wdc/wdc-nvme-cmds.h index 3f60d6dde8..2dea9b06c2 100644 --- a/plugins/wdc/wdc-nvme-cmds.h +++ b/plugins/wdc/wdc-nvme-cmds.h @@ -123,3 +123,5 @@ bool run_wdc_nvme_check_supported_log_page(nvme_root_t r, __u32 run_wdc_get_fw_cust_id(nvme_root_t r, struct nvme_dev *dev); + +__u64 run_wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev); diff --git a/plugins/wdc/wdc-nvme.c b/plugins/wdc/wdc-nvme.c index a6c1572ecc..8eb1b71fc7 100644 --- a/plugins/wdc/wdc-nvme.c +++ b/plugins/wdc/wdc-nvme.c @@ -146,6 +146,7 @@ #define WDC_NVME_SN5100S_DEV_ID_2 0x5062 #define WDC_NVME_SN5100S_DEV_ID_3 0x5063 +/* Shared flag space with SNDK plugin, should be kept in sync */ #define WDC_DRIVE_CAP_CAP_DIAG 0x0000000000000001 #define WDC_DRIVE_CAP_INTERNAL_LOG 0x0000000000000002 #define WDC_DRIVE_CAP_C1_LOG_PAGE 0x0000000000000004 @@ -178,7 +179,6 @@ #define WDC_DRIVE_CAP_C3_LOG_PAGE 0x0000000020000000 #define WDC_DRIVE_CAP_CLOUD_BOOT_SSD_VERSION 0x0000000040000000 #define WDC_DRIVE_CAP_CLOUD_LOG_PAGE 0x0000000080000000 - #define WDC_DRIVE_CAP_DRIVE_ESSENTIALS 0x0000000100000000 #define WDC_DRIVE_CAP_DUI_DATA 0x0000000200000000 #define WDC_SN730B_CAP_VUC_LOG 0x0000000400000000 @@ -189,6 +189,7 @@ #define WDC_DRIVE_CAP_OCP_C5_LOG_PAGE 0x0000008000000000 #define WDC_DRIVE_CAP_DEVICE_WAF 0x0000010000000000 #define WDC_DRIVE_CAP_SET_LATENCY_MONITOR 0x0000020000000000 +/* Any new capability flags should be added to the SNDK plugin */ #define WDC_DRIVE_CAP_SMART_LOG_MASK (WDC_DRIVE_CAP_C0_LOG_PAGE | \ WDC_DRIVE_CAP_C1_LOG_PAGE | \ @@ -12940,3 +12941,8 @@ bool run_wdc_nvme_check_supported_log_page(nvme_root_t r, log_id, 0); } + +__u64 run_wdc_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev) +{ + return wdc_get_drive_capabilities(r, dev); +}