1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#ifndef __YMTC_UTILS_H__
#define __YMTC_UTILS_H__
#define SMART_INFO_SIZE 4096
#define ID_SIZE 3
#define NM_SIZE 2
#define RAW_SIZE 7
typedef unsigned char u8;
/* Additional smart external ID */
#define SI_VD_PROGRAM_FAIL_ID 0xAB
#define SI_VD_ERASE_FAIL_ID 0xAC
#define SI_VD_WEARLEVELING_COUNT_ID 0xAD
#define SI_VD_E2E_DECTECTION_COUNT_ID 0xB8
#define SI_VD_PCIE_CRC_ERR_COUNT_ID 0xC7
#define SI_VD_TIMED_WORKLOAD_MEDIA_WEAR_ID 0xE2
#define SI_VD_TIMED_WORKLOAD_HOST_READ_ID 0xE3
#define SI_VD_TIMED_WORKLOAD_TIMER_ID 0xE4
#define SI_VD_THERMAL_THROTTLE_STATUS_ID 0xEA
#define SI_VD_RETRY_BUFF_OVERFLOW_COUNT_ID 0xF0
#define SI_VD_PLL_LOCK_LOSS_COUNT_ID 0xF3
#define SI_VD_TOTAL_WRITE_ID 0xF4
#define SI_VD_HOST_WRITE_ID 0xF5
#define SI_VD_SYSTEM_AREA_LIFE_LEFT_ID 0xF6
#define SI_VD_TOTAL_READ_ID 0xFA
#define SI_VD_TEMPT_SINCE_BORN_ID 0xE7
#define SI_VD_POWER_CONSUMPTION_ID 0xE8
#define SI_VD_TEMPT_SINCE_BOOTUP_ID 0xAF
#define SI_VD_POWER_LOSS_PROTECTION_ID 0xEC
#define SI_VD_READ_FAIL_ID 0xF2
#define SI_VD_THERMAL_THROTTLE_TIME_ID 0xEB
#define SI_VD_FLASH_MEDIA_ERROR_ID 0xED
/* Addtional smart internal ID */
typedef enum
{
/* smart attr following intel */
SI_VD_PROGRAM_FAIL = 0, /* 0xAB */
SI_VD_ERASE_FAIL = 1, /* 0xAC */
SI_VD_WEARLEVELING_COUNT = 2,/* 0xAD */
SI_VD_E2E_DECTECTION_COUNT = 3, /* 0xB8 */
SI_VD_PCIE_CRC_ERR_COUNT = 4, /* 0xC7, 2 port data in one attribute */
SI_VD_THERMAL_THROTTLE_STATUS = 8, /* 0xEA */
SI_VD_TOTAL_WRITE = 11, /* 0xF4, unit is 32MiB */
SI_VD_HOST_WRITE = 12, /* 0xF5, unit is 32MiB */
SI_VD_TOTAL_READ = 14, /* 0xFA, unit is 32MiB */
/* smart attr self defined */
SI_VD_TEMPT_SINCE_BORN = 15, /* 0xE7 */
SI_VD_POWER_CONSUMPTION = 16, /* 0xE8 */
SI_VD_TEMPT_SINCE_BOOTUP = 17, /* 0xAF */
SI_VD_POWER_LOSS_PROTECTION = 18, /* 0xEC */
SI_VD_READ_FAIL = 19, /* 0xF2 */
SI_VD_THERMAL_THROTTLE_TIME = 20, /* 0xEB */
SI_VD_FLASH_MEDIA_ERROR = 21, /* 0xED */
NR_SMART_ITEMS,
} si_vendor_smart_item_e;
// Intel Format
struct nvme_ymtc_smart_log_item
{
/* Item identifier */
u8 id[ID_SIZE];
/* Normalized value or percentage. In the range from 0 to 100. */
u8 nmVal[NM_SIZE];
/* raw value */
u8 rawVal[RAW_SIZE];
};
struct nvme_ymtc_smart_log
{
struct nvme_ymtc_smart_log_item itemArr[NR_SMART_ITEMS];
u8 resv[SMART_INFO_SIZE - sizeof(struct nvme_ymtc_smart_log_item) * NR_SMART_ITEMS];
};
#endif // __YMTC_UTILS_H__
|