1951a39d68df598db08dfced8b4707755864a0492Ying Wang/****************************************************************************
2951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
3951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
4951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   This header was automatically generated from a Linux kernel header
5951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   of the same name, to make information necessary for userspace to
6951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   call into the kernel available to libc.  It contains only constants,
7951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   structures, and macros generated from the original header, and thus,
8951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   contains no copyrightable information.
9951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
10951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
11951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************/
12951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _LINUX_HDSMART_H
13951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _LINUX_HDSMART_H
14951a39d68df598db08dfced8b4707755864a0492Ying Wang
15951a39d68df598db08dfced8b4707755864a0492Ying Wang#define OFFLINE_FULL_SCAN 0
16951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHORT_SELF_TEST 1
17951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EXTEND_SELF_TEST 2
18951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SHORT_CAPTIVE_SELF_TEST 129
19951a39d68df598db08dfced8b4707755864a0492Ying Wang#define EXTEND_CAPTIVE_SELF_TEST 130
20951a39d68df598db08dfced8b4707755864a0492Ying Wang
21951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ata_smart_attribute_s {
22951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char id;
23951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short status_flag;
24951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char normalized;
25951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char worse_normal;
26951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char raw[6];
27951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char reserv;
28951a39d68df598db08dfced8b4707755864a0492Ying Wang} __attribute__ ((packed)) ata_smart_attribute_t;
29951a39d68df598db08dfced8b4707755864a0492Ying Wang
30951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ata_smart_values_s {
31951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short revnumber;
32951a39d68df598db08dfced8b4707755864a0492Ying Wang ata_smart_attribute_t vendor_attributes [30];
33951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char offline_data_collection_status;
34951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char self_test_exec_status;
35951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short total_time_to_complete_off_line;
36951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char vendor_specific_366;
37951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char offline_data_collection_capability;
38951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short smart_capability;
39951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char errorlog_capability;
40951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char vendor_specific_371;
41951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char short_test_completion_time;
42951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char extend_test_completion_time;
43951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char reserved_374_385 [12];
44951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char vendor_specific_386_509 [125];
45951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char chksum;
46951a39d68df598db08dfced8b4707755864a0492Ying Wang} __attribute__ ((packed)) ata_smart_values_t;
47951a39d68df598db08dfced8b4707755864a0492Ying Wang
48951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ata_smart_threshold_entry_s {
49951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char id;
50951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char normalized_threshold;
51951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char reserved[10];
52951a39d68df598db08dfced8b4707755864a0492Ying Wang} __attribute__ ((packed)) ata_smart_threshold_entry_t;
53951a39d68df598db08dfced8b4707755864a0492Ying Wang
54951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ata_smart_thresholds_s {
55951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short revnumber;
56951a39d68df598db08dfced8b4707755864a0492Ying Wang ata_smart_threshold_entry_t thres_entries[30];
57951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char reserved[149];
58951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char chksum;
59951a39d68df598db08dfced8b4707755864a0492Ying Wang} __attribute__ ((packed)) ata_smart_thresholds_t;
60951a39d68df598db08dfced8b4707755864a0492Ying Wang
61951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ata_smart_errorlog_command_struct_s {
62951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char devicecontrolreg;
63951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char featuresreg;
64951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char sector_count;
65951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char sector_number;
66951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char cylinder_low;
67951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char cylinder_high;
68951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char drive_head;
69951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char commandreg;
70951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int timestamp;
71951a39d68df598db08dfced8b4707755864a0492Ying Wang} __attribute__ ((packed)) ata_smart_errorlog_command_struct_t;
72951a39d68df598db08dfced8b4707755864a0492Ying Wang
73951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ata_smart_errorlog_error_struct_s {
74951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char error_condition;
75951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char extended_error[14];
76951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char state;
77951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short timestamp;
78951a39d68df598db08dfced8b4707755864a0492Ying Wang} __attribute__ ((packed)) ata_smart_errorlog_error_struct_t;
79951a39d68df598db08dfced8b4707755864a0492Ying Wang
80951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ata_smart_errorlog_struct_s {
81951a39d68df598db08dfced8b4707755864a0492Ying Wang ata_smart_errorlog_command_struct_t commands[6];
82951a39d68df598db08dfced8b4707755864a0492Ying Wang ata_smart_errorlog_error_struct_t error_struct;
83951a39d68df598db08dfced8b4707755864a0492Ying Wang} __attribute__ ((packed)) ata_smart_errorlog_struct_t;
84951a39d68df598db08dfced8b4707755864a0492Ying Wang
85951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ata_smart_errorlog_s {
86951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char revnumber;
87951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char error_log_pointer;
88951a39d68df598db08dfced8b4707755864a0492Ying Wang ata_smart_errorlog_struct_t errorlog_struct[5];
89951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short ata_error_count;
90951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short non_fatal_count;
91951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short drive_timeout_count;
92951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char reserved[53];
93951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char chksum;
94951a39d68df598db08dfced8b4707755864a0492Ying Wang} __attribute__ ((packed)) ata_smart_errorlog_t;
95951a39d68df598db08dfced8b4707755864a0492Ying Wang
96951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ata_smart_selftestlog_struct_s {
97951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char selftestnumber;
98951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char selfteststatus;
99951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short timestamp;
100951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char selftestfailurecheckpoint;
101951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int lbafirstfailure;
102951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char vendorspecific[15];
103951a39d68df598db08dfced8b4707755864a0492Ying Wang} __attribute__ ((packed)) ata_smart_selftestlog_struct_t;
104951a39d68df598db08dfced8b4707755864a0492Ying Wang
105951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ata_smart_selftestlog_s {
106951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short revnumber;
107951a39d68df598db08dfced8b4707755864a0492Ying Wang ata_smart_selftestlog_struct_t selftest_struct[21];
108951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char vendorspecific[2];
109951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char mostrecenttest;
110951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char resevered[2];
111951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char chksum;
112951a39d68df598db08dfced8b4707755864a0492Ying Wang} __attribute__ ((packed)) ata_smart_selftestlog_t;
113951a39d68df598db08dfced8b4707755864a0492Ying Wang
114951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
115