/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (c) 2025 Sandisk Corporation or its affiliates. * * Author: Jeff Lien * Brandon Paupore */ #include #include #include #include #include #include #include #include #include #include #include #include #include /* Device Config */ #define SNDK_NVME_WDC_VID 0x1b96 #define SNDK_NVME_SNDK_VID 0x15b7 #define SNDK_NVME_SN630_DEV_ID 0x2200 #define SNDK_NVME_SN630_DEV_ID_1 0x2201 #define SNDK_NVME_SN840_DEV_ID 0x2300 #define SNDK_NVME_SN840_DEV_ID_1 0x2500 #define SNDK_NVME_SN640_DEV_ID 0x2400 #define SNDK_NVME_SN640_DEV_ID_1 0x2401 #define SNDK_NVME_SN640_DEV_ID_2 0x2402 #define SNDK_NVME_SN640_DEV_ID_3 0x2404 #define SNDK_NVME_SN650_DEV_ID 0x2700 #define SNDK_NVME_SN650_DEV_ID_1 0x2701 #define SNDK_NVME_SN650_DEV_ID_2 0x2702 #define SNDK_NVME_SN650_DEV_ID_3 0x2720 #define SNDK_NVME_SN650_DEV_ID_4 0x2721 #define SNDK_NVME_SN655_DEV_ID 0x2722 #define SNDK_NVME_SN655_DEV_ID_1 0x2723 #define SNDK_NVME_SN861_DEV_ID 0x2750 #define SNDK_NVME_SN861_DEV_ID_1 0x2751 #define SNDK_NVME_SN861_DEV_ID_2 0x2752 #define SNDK_NVME_SNTMP_DEV_ID 0x2761 #define SNDK_NVME_SN520_DEV_ID 0x5003 #define SNDK_NVME_SN520_DEV_ID_1 0x5004 #define SNDK_NVME_SN520_DEV_ID_2 0x5005 #define SNDK_NVME_SN530_DEV_ID_1 0x5007 #define SNDK_NVME_SN530_DEV_ID_2 0x5008 #define SNDK_NVME_SN530_DEV_ID_3 0x5009 #define SNDK_NVME_SN530_DEV_ID_4 0x500b #define SNDK_NVME_SN530_DEV_ID_5 0x501d #define SNDK_NVME_SN350_DEV_ID 0x5019 #define SNDK_NVME_SN570_DEV_ID 0x501A #define SNDK_NVME_SN850X_DEV_ID 0x5030 #define SNDK_NVME_SN5000_DEV_ID_1 0x5034 #define SNDK_NVME_SN5000_DEV_ID_2 0x5035 #define SNDK_NVME_SN5000_DEV_ID_3 0x5036 #define SNDK_NVME_SN5000_DEV_ID_4 0x504A #define SNDK_NVME_SN7000S_DEV_ID_1 0x5039 #define SNDK_NVME_SN7150_DEV_ID_1 0x503b #define SNDK_NVME_SN7150_DEV_ID_2 0x503c #define SNDK_NVME_SN7150_DEV_ID_3 0x503d #define SNDK_NVME_SN7150_DEV_ID_4 0x503e #define SNDK_NVME_SN7150_DEV_ID_5 0x503f #define SNDK_NVME_SN7100_DEV_ID_1 0x5043 #define SNDK_NVME_SN7100_DEV_ID_2 0x5044 #define SNDK_NVME_SN7100_DEV_ID_3 0x5045 #define SNDK_NVME_SN8000S_DEV_ID 0x5049 #define SNDK_NVME_SN720_DEV_ID 0x5002 #define SNDK_NVME_SN730_DEV_ID 0x5006 #define SNDK_NVME_SN740_DEV_ID 0x5015 #define SNDK_NVME_SN740_DEV_ID_1 0x5016 #define SNDK_NVME_SN740_DEV_ID_2 0x5017 #define SNDK_NVME_SN740_DEV_ID_3 0x5025 #define SNDK_NVME_SN340_DEV_ID 0x500d #define SNDK_NVME_ZN350_DEV_ID 0x5010 #define SNDK_NVME_ZN350_DEV_ID_1 0x5018 #define SNDK_NVME_SN810_DEV_ID 0x5011 #define SNDK_NVME_SN820CL_DEV_ID 0x5037 #define SNDK_NVME_SN5100S_DEV_ID_1 0x5061 #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 #define SNDK_DRIVE_CAP_SMART_LOG_MASK (SNDK_DRIVE_CAP_C0_LOG_PAGE | \ SNDK_DRIVE_CAP_C1_LOG_PAGE | \ SNDK_DRIVE_CAP_CA_LOG_PAGE | \ SNDK_DRIVE_CAP_D0_LOG_PAGE) #define SNDK_DRIVE_CAP_CLEAR_PCIE_MASK (SNDK_DRIVE_CAP_CLEAR_PCIE | \ SNDK_DRIVE_CAP_VUC_CLEAR_PCIE | \ SNDK_DRIVE_CAP_VU_FID_CLEAR_PCIE) #define SNDK_DRIVE_CAP_INTERNAL_LOG_MASK (SNDK_DRIVE_CAP_INTERNAL_LOG | \ SNDK_DRIVE_CAP_DUI | \ SNDK_DRIVE_CAP_DUI_DATA | \ SNDK_DRIVE_CAP_VUC_LOG) #define SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_MASK (SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY | \ SNDK_DRIVE_CAP_FW_ACTIVATE_HISTORY_C2) #define SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY_MASK (SNDK_DRIVE_CAP_CLEAR_FW_ACT_HISTORY | \ SNDK_DRIVE_CAP_VU_FID_CLEAR_FW_ACT_HISTORY) /* Vendor defined Log Page IDs */ #define SNDK_NVME_GET_SMART_CLOUD_ATTR_LOG_ID 0xC0 #define SNDK_NVME_GET_EOL_STATUS_LOG_ID 0xC0 #define SNDK_ERROR_REC_LOG_ID 0xC1 #define SNDK_NVME_GET_FW_ACT_HISTORY_C2_LOG_ID 0xC2 #define SNDK_LATENCY_MON_LOG_ID 0xC3 #define SNDK_DEV_CAP_LOG_ID 0xC4 #define SNDK_UNSUPPORTED_REQS_LOG_ID 0xC5 #define SNDK_NVME_GET_DEVICE_INFO_LOG_ID 0xCA #define SNDK_NVME_GET_FW_ACT_HISTORY_LOG_ID 0xCB #define SNDK_NVME_GET_VU_SMART_LOG_ID 0xD0 /* Customer ID's */ #define SNDK_CUSTOMER_ID_GN 0x0001 #define SNDK_CUSTOMER_ID_GD 0x0101 #define SNDK_CUSTOMER_ID_BD 0x1009 #define SNDK_CUSTOMER_ID_0x1004 0x1004 #define SNDK_CUSTOMER_ID_0x1005 0x1005 #define SNDK_CUSTOMER_ID_0x1008 0x1008 #define SNDK_CUSTOMER_ID_0x1304 0x1304 #define SNDK_INVALID_CUSTOMER_ID -1 int sndk_get_pci_ids(nvme_root_t r, struct nvme_dev *dev, uint32_t *device_id, uint32_t *vendor_id); int sndk_get_vendor_id(struct nvme_dev *dev, uint32_t *vendor_id); bool sndk_check_device(nvme_root_t r, struct nvme_dev *dev); __u64 sndk_get_drive_capabilities(nvme_root_t r, struct nvme_dev *dev); __u64 sndk_get_enc_drive_capabilities(nvme_root_t r, struct nvme_dev *dev);