269 lines
10 KiB
C
269 lines
10 KiB
C
/*
|
|
* Do NOT modify or remove this copyright and license
|
|
*
|
|
* Copyright (c) 2017-2018 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
|
|
*
|
|
* ******************************************************************************************
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* \file seagate-diag.h
|
|
* \brief This file defines the functions and macros to make building a nvme-cli seagate plug-in.
|
|
*/
|
|
|
|
|
|
#ifndef SEAGATE_NVME_H
|
|
#define SEAGATE_NVME_H
|
|
|
|
#define SEAGATE_PLUGIN_VERSION_MAJOR 1
|
|
#define SEAGATE_PLUGIN_VERSION_MINOR 1
|
|
|
|
#define PERSIST_FILE_SIZE (2764800)
|
|
#define ONE_MB (1048576) /* (1024 * 1024) */
|
|
#define PERSIST_CHUNK (65536) /* (1024 * 64) */
|
|
#define FOUR_KB (4096)
|
|
|
|
|
|
/***************************
|
|
*Supported Log-Pages from FW
|
|
***************************/
|
|
|
|
typedef struct log_page_map_entry {
|
|
__u32 LogPageID;
|
|
__u32 LogPageSignature;
|
|
__u32 LogPageVersion;
|
|
} log_page_map_entry;
|
|
|
|
#define MAX_SUPPORTED_LOG_PAGE_ENTRIES ((4096 - sizeof(__u32)) / sizeof(log_page_map_entry))
|
|
|
|
typedef struct log_page_map {
|
|
__u32 NumLogPages;
|
|
log_page_map_entry LogPageEntry[ MAX_SUPPORTED_LOG_PAGE_ENTRIES ];
|
|
} log_page_map;
|
|
/* EOF Supported Log-Pages from FW */
|
|
|
|
|
|
/***************************
|
|
* Extended-SMART Information
|
|
***************************/
|
|
#pragma pack(1)
|
|
#define NUMBER_EXTENDED_SMART_ATTRIBUTES 42
|
|
|
|
typedef enum _EXTENDED_SMART_VERSION_
|
|
{
|
|
EXTENDED_SMART_VERSION_NONE,
|
|
EXTENDED_SMART_VERSION_GEN,
|
|
EXTENDED_SMART_VERSION_VENDOR1,
|
|
} EXTENDED_SMART_VERSION;
|
|
|
|
typedef struct _SmartVendorSpecific
|
|
{
|
|
__u8 AttributeNumber;
|
|
__u16 SmartStatus;
|
|
__u8 NominalValue;
|
|
__u8 LifetimeWorstValue;
|
|
__u32 Raw0_3;
|
|
__u8 RawHigh[3];
|
|
} SmartVendorSpecific;
|
|
|
|
typedef struct _EXTENDED_SMART_INFO_T
|
|
{
|
|
__u16 Version;
|
|
SmartVendorSpecific vendorData[NUMBER_EXTENDED_SMART_ATTRIBUTES];
|
|
__u8 vendor_specific_reserved[6];
|
|
} EXTENDED_SMART_INFO_T;
|
|
|
|
typedef struct vendor_smart_attribute_data
|
|
{
|
|
__u8 AttributeNumber; /* 00 */
|
|
__u8 Rsvd[3]; /* 01 -03 */
|
|
__u32 LSDword; /* 04-07 */
|
|
__u32 MSDword; /* 08 - 11 */
|
|
} vendor_smart_attribute_data;
|
|
|
|
struct nvme_temetry_log_hdr
|
|
{
|
|
__u8 log_id;
|
|
__u8 rsvd1[4];
|
|
__u8 ieee_id[3];
|
|
__le16 tele_data_area1;
|
|
__le16 tele_data_area2;
|
|
__le16 tele_data_area3;
|
|
__u8 rsvd14[368];
|
|
__u8 tele_data_aval;
|
|
__u8 tele_data_gen_num;
|
|
__u8 reason_identifier[128];
|
|
};
|
|
|
|
typedef struct _U128
|
|
{
|
|
__u64 LS__u64;
|
|
__u64 MS__u64;
|
|
} U128;
|
|
|
|
typedef struct _vendor_log_page_CF_Attr
|
|
{
|
|
__u16 SuperCapCurrentTemperature; /* 00-01 */
|
|
__u16 SuperCapMaximumTemperature; /* 02-03 */
|
|
__u8 SuperCapStatus; /* 04 */
|
|
__u8 Reserved5to7[3]; /* 05-07 */
|
|
U128 DataUnitsReadToDramNamespace; /* 08-23 */
|
|
U128 DataUnitsWrittenToDramNamespace; /* 24-39 */
|
|
__u64 DramCorrectableErrorCount; /* 40-47 */
|
|
__u64 DramUncorrectableErrorCount; /* 48-55 */
|
|
}vendor_log_page_CF_Attr;
|
|
|
|
typedef struct _vendor_log_page_CF
|
|
{
|
|
vendor_log_page_CF_Attr AttrCF;
|
|
__u8 Vendor_Specific_Reserved[ 456 ]; /* 56-511 */
|
|
}vendor_log_page_CF;
|
|
|
|
#pragma pack()
|
|
/* EOF Extended-SMART Information*/
|
|
|
|
|
|
/**************************
|
|
* PCIE ERROR INFORMATION
|
|
**************************/
|
|
typedef struct pcie_error_log_page
|
|
{
|
|
__u32 Version;
|
|
__u32 BadDllpErrCnt;
|
|
__u32 BadTlpErrCnt;
|
|
__u32 RcvrErrCnt;
|
|
__u32 ReplayTOErrCnt;
|
|
__u32 ReplayNumRolloverErrCnt;
|
|
__u32 FCProtocolErrCnt;
|
|
__u32 DllpProtocolErrCnt;
|
|
__u32 CmpltnTOErrCnt;
|
|
__u32 RcvrQOverflowErrCnt;
|
|
__u32 UnexpectedCplTlpErrCnt;
|
|
__u32 CplTlpURErrCnt;
|
|
__u32 CplTlpCAErrCnt;
|
|
__u32 ReqCAErrCnt;
|
|
__u32 ReqURErrCnt;
|
|
__u32 EcrcErrCnt;
|
|
__u32 MalformedTlpErrCnt;
|
|
__u32 CplTlpPoisonedErrCnt;
|
|
__u32 MemRdTlpPoisonedErrCnt;
|
|
} pcie_error_log_page;
|
|
/*EOF PCIE ERROR INFORMATION */
|
|
|
|
typedef enum
|
|
{
|
|
VS_ATTR_SOFT_READ_ERROR_RATE, /* 0 OFFSET : 02 -13 bytes */
|
|
VS_ATTR_REALLOCATED_SECTOR_COUNT, /* 1 OFFSET : 14 -25 bytes */
|
|
VS_ATTR_POWER_ON_HOURS, /* 2 OFFSET : 26 -37 bytes */
|
|
VS_ATTR_POWER_FAIL_EVENT_COUNT, /* 3 OFFSET : 38 -49 bytes */
|
|
VS_ATTR_DEVICE_POWER_CYCLE_COUNT, /* 4 OFFSET : 50 -61 bytes */
|
|
VS_ATTR_GB_ERASED, /* 5 OFFSET : 62 -73 bytes */
|
|
VS_ATTR_LIFETIME_DEVSLEEP_EXIT_COUNT, /* 6 OFFSET : 74 -85 bytes */
|
|
VS_ATTR_LIFETIME_ENTERING_PS4_COUNT, /* 7 OFFSET : 86 -97 bytes */
|
|
VS_ATTR_LIFETIME_ENTERING_PS3_COUNT, /* 8 OFFSET : 98 -109 bytes */
|
|
VS_ATTR_RETIRED_BLOCK_COUNT, /* 9 OFFSET : 110 -121 bytes */
|
|
VS_ATTR_PROGRAM_FAILURE_COUNT, /* 10 OFFSET : 122 -133 bytes */
|
|
VS_ATTR_ERASE_FAIL_COUNT, /* 11 OFFSET : 134 -145 bytes */
|
|
VS_ATTR_AVG_ERASE_COUNT, /* 12 OFFSET : 146 -157 bytes */
|
|
VS_ATTR_UNEXPECTED_POWER_LOSS_COUNT, /* 13 OFFSET : 158 -169 bytes */
|
|
VS_ATTR_WEAR_RANGE_DELTA, /* 14 OFFSET : 170 -181 bytes */
|
|
VS_ATTR_SATA_INTERFACE_DOWNSHIFT_COUNT, /* 15 OFFSET : 182 -193 bytes */
|
|
VS_ATTR_END_TO_END_CRC_ERROR_COUNT, /* 16 OFFSET : 194 -205 bytes */
|
|
VS_ATTR_MAX_LIFE_TEMPERATURE, /* 17 OFFSET : 206 -217 bytes */
|
|
VS_ATTR_UNCORRECTABLE_RAISE_ERRORS, /* 18 OFFSET : 218 -229 bytes */
|
|
VS_ATTR_DRIVE_LIFE_PROTECTION_STATUS, /* 19 OFFSET : 230 -241 bytes */
|
|
VS_ATTR_REMAINING_SSD_LIFE, /* 20 OFFSET : 242 -253 bytes */
|
|
VS_ATTR_LIFETIME_WRITES_TO_FLASH, /* 21 OFFSET : 254 -265 bytes */
|
|
VS_ATTR_LIFETIME_WRITES_FROM_HOST, /* 22 OFFSET : 266 -277 bytes */
|
|
VS_ATTR_LIFETIME_READS_TO_HOST, /* 23 OFFSET : 278 -289 bytes */
|
|
VS_ATTR_FREE_SPACE, /* 24 OFFSET : 290 -301 bytes */
|
|
VS_ATTR_TRIM_COUNT_LSB, /* 25 OFFSET : 302 -313 bytes */
|
|
VS_ATTR_TRIM_COUNT_MSB, /* 26 OFFSET : 314 -325 bytes */
|
|
VS_ATTR_OP_PERCENTAGE, /* 27 OFFSET : 326 -337 bytes */
|
|
VS_ATTR_RAISE_ECC_CORRECTABLE_ERROR_COUNT, /* 28 OFFSET : 338 -349 bytes */
|
|
VS_ATTR_UNCORRECTABLE_ECC_ERRORS , /* 29 OFFSET : 350 -361 bytes */
|
|
VS_ATTR_LIFETIME_WRITES0_TO_FLASH, /* 30 362-372 */
|
|
VS_ATTR_LIFETIME_WRITES1_TO_FLASH, /* 31 374-385 */
|
|
VS_ATTR_LIFETIME_WRITES0_FROM_HOST, /* 32 386-397 */
|
|
VS_ATTR_LIFETIME_WRITES1_FROM_HOST, /* 33 398-409 */
|
|
VS_ATTR_LIFETIME_READ0_FROM_HOST, /* 34 410-421 */
|
|
VS_ATTR_LIFETIME_READ1_FROM_HOST, /* 35 422-433 */
|
|
VS_ATTR_PCIE_PHY_CRC_ERROR, /* 36 434-445 */
|
|
VS_ATTR_BAD_BLOCK_COUNT_SYSTEM, /* 37 446-457 */
|
|
VS_ATTR_BAD_BLOCK_COUNT_USER, /* 38 458-469 */
|
|
VS_ATTR_THERMAL_THROTTLING_STATUS, /* 39 470-481 */
|
|
VS_ATTR_POWER_CONSUMPTION, /* 40 482-493 */
|
|
VS_ATTR_MAX_SOC_LIFE_TEMPERATURE, /* 41 494-505 */
|
|
|
|
VS_MAX_ATTR_NUMBER,
|
|
|
|
} extended_smart_attributes;
|
|
|
|
/*Smart attribute IDs */
|
|
|
|
typedef enum
|
|
{
|
|
VS_ATTR_ID_SOFT_READ_ERROR_RATE = 1,
|
|
VS_ATTR_ID_REALLOCATED_SECTOR_COUNT = 5,
|
|
VS_ATTR_ID_POWER_ON_HOURS = 9,
|
|
VS_ATTR_ID_POWER_FAIL_EVENT_COUNT = 11,
|
|
VS_ATTR_ID_DEVICE_POWER_CYCLE_COUNT = 12,
|
|
VS_ATTR_ID_RAW_READ_ERROR_RATE = 13,
|
|
VS_ATTR_ID_GROWN_BAD_BLOCK_COUNT = 40,
|
|
VS_ATTR_ID_END_2_END_CORRECTION_COUNT = 41,
|
|
VS_ATTR_ID_MIN_MAX_WEAR_RANGE_COUNT = 42,
|
|
VS_ATTR_ID_REFRESH_COUNT = 43,
|
|
VS_ATTR_ID_BAD_BLOCK_COUNT_USER = 44,
|
|
VS_ATTR_ID_BAD_BLOCK_COUNT_SYSTEM = 45,
|
|
VS_ATTR_ID_THERMAL_THROTTLING_STATUS = 46,
|
|
VS_ATTR_ID_ALL_PCIE_CORRECTABLE_ERROR_COUNT = 47,
|
|
VS_ATTR_ID_ALL_PCIE_UNCORRECTABLE_ERROR_COUNT = 48,
|
|
VS_ATTR_ID_INCOMPLETE_SHUTDOWN_COUNT = 49,
|
|
VS_ATTR_ID_GB_ERASED_LSB = 100,
|
|
VS_ATTR_ID_GB_ERASED_MSB = 101,
|
|
VS_ATTR_ID_LIFETIME_ENTERING_PS4_COUNT = 102,
|
|
VS_ATTR_ID_LIFETIME_ENTERING_PS3_COUNT = 103,
|
|
VS_ATTR_ID_LIFETIME_DEVSLEEP_EXIT_COUNT = 104,
|
|
VS_ATTR_ID_RETIRED_BLOCK_COUNT = 170,
|
|
VS_ATTR_ID_PROGRAM_FAILURE_COUNT = 171,
|
|
VS_ATTR_ID_ERASE_FAIL_COUNT = 172,
|
|
VS_ATTR_ID_AVG_ERASE_COUNT = 173,
|
|
VS_ATTR_ID_UNEXPECTED_POWER_LOSS_COUNT = 174,
|
|
VS_ATTR_ID_WEAR_RANGE_DELTA = 177,
|
|
VS_ATTR_ID_SATA_INTERFACE_DOWNSHIFT_COUNT = 183,
|
|
VS_ATTR_ID_END_TO_END_CRC_ERROR_COUNT = 184,
|
|
VS_ATTR_ID_UNCORRECTABLE_READ_ERRORS = 188,
|
|
VS_ATTR_ID_MAX_LIFE_TEMPERATURE = 194,
|
|
VS_ATTR_ID_RAISE_ECC_CORRECTABLE_ERROR_COUNT = 195,
|
|
VS_ATTR_ID_UNCORRECTABLE_RAISE_ERRORS = 198,
|
|
VS_ATTR_ID_DRIVE_LIFE_PROTECTION_STATUS = 230,
|
|
VS_ATTR_ID_REMAINING_SSD_LIFE = 231,
|
|
VS_ATTR_ID_LIFETIME_WRITES_TO_FLASH_LSB = 233,
|
|
VS_ATTR_ID_LIFETIME_WRITES_TO_FLASH_MSB = 234,
|
|
VS_ATTR_ID_LIFETIME_WRITES_FROM_HOST_LSB = 241,
|
|
VS_ATTR_ID_LIFETIME_WRITES_FROM_HOST_MSB = 242,
|
|
VS_ATTR_ID_LIFETIME_READS_TO_HOST_LSB = 243,
|
|
VS_ATTR_ID_LIFETIME_READS_TO_HOST_MSB = 244,
|
|
VS_ATTR_ID_FREE_SPACE = 245,
|
|
VS_ATTR_ID_TRIM_COUNT_LSB = 250,
|
|
VS_ATTR_ID_TRIM_COUNT_MSB = 251,
|
|
VS_ATTR_ID_OP_PERCENTAGE = 252,
|
|
VS_ATTR_ID_MAX_SOC_LIFE_TEMPERATURE = 253,
|
|
} smart_attributes_ids;
|
|
|
|
#define TELEMETRY_BLOCKS_TO_READ 8
|
|
|
|
void seaget_d_raw(unsigned char *buf, int len, int fd);
|
|
|
|
|
|
#define DP_CLASS_ID_FULL 0
|
|
|
|
#endif
|