blob: 509b591d283543587f662b3135fb016fb01efcbb (
plain)
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
/*
* linux/include/linux/hdsmart.h
*
* Copyright (C) 1999-2000 Michael Cornwell <cornwell@acm.org>
* Copyright (C) 2000 Andre Hedrick <andre@linux-ide.org>
*
* 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, or (at your option)
* any later version.
*
* You should have received a copy of the GNU General Public License
* (for example /usr/src/linux/COPYING); if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _LINUX_HDSMART_H
#define _LINUX_HDSMART_H
/* smart_attribute is the vendor specific in SFF-8035 spec */
struct ata_smart_attribute {
unsigned char id;
unsigned short status_flag;
unsigned char normalized;
unsigned char worse_normal;
unsigned char raw[6];
unsigned char reserv;
} __attribute__ ((packed));
/* smart_values is format of the read drive Atrribute command */
struct ata_smart_values {
unsigned short revnumber;
struct ata_smart_attribute vendor_attributes [30];
unsigned char offline_data_collection_status;
unsigned char self_test_exec_status;
unsigned short total_time_to_complete_off_line;
unsigned char vendor_specific_366;
unsigned char offline_data_collection_capability;
unsigned short smart_capability;
unsigned char errorlog_capability;
unsigned char vendor_specific_371;
unsigned char short_test_completion_time;
unsigned char extend_test_completion_time;
unsigned char reserved_374_385 [12];
unsigned char vendor_specific_386_509 [125];
unsigned char chksum;
} __attribute__ ((packed));
/* Smart Threshold data structures */
/* Vendor attribute of SMART Threshold */
struct ata_smart_threshold_entry {
unsigned char id;
unsigned char normalized_threshold;
unsigned char reserved[10];
} __attribute__ ((packed));
/* Format of Read SMART THreshold Command */
struct ata_smart_thresholds {
unsigned short revnumber;
struct ata_smart_threshold_entry thres_entries[30];
unsigned char reserved[149];
unsigned char chksum;
} __attribute__ ((packed));
struct ata_smart_errorlog_command_struct {
unsigned char devicecontrolreg;
unsigned char featuresreg;
unsigned char sector_count;
unsigned char sector_number;
unsigned char cylinder_low;
unsigned char cylinder_high;
unsigned char drive_head;
unsigned char commandreg;
unsigned int timestamp;
} __attribute__ ((packed));
struct ata_smart_errorlog_error_struct {
unsigned char error_condition;
unsigned char extended_error[14];
unsigned char state;
unsigned short timestamp;
} __attribute__ ((packed));
struct ata_smart_errorlog_struct {
struct ata_smart_errorlog_command_struct commands[6];
struct ata_smart_errorlog_error_struct error_struct;
} __attribute__ ((packed));
struct ata_smart_errorlog {
unsigned char revnumber;
unsigned char error_log_pointer;
struct ata_smart_errorlog_struct errorlog_struct[5];
unsigned short ata_error_count;
unsigned short non_fatal_count;
unsigned short drive_timeout_count;
unsigned char reserved[53];
} __attribute__ ((packed));
struct ata_smart_selftestlog_struct {
unsigned char selftestnumber;
unsigned char selfteststatus;
unsigned short timestamp;
unsigned char selftestfailurecheckpoint;
unsigned int lbafirstfailure;
unsigned char vendorspecific[15];
} __attribute__ ((packed));
struct ata_smart_selftestlog {
unsigned short revnumber;
struct ata_smart_selftestlog_struct selftest_struct[21];
unsigned char vendorspecific[2];
unsigned char mostrecenttest;
unsigned char resevered[2];
unsigned char chksum;
} __attribute__ ((packed));
#if !defined(__KERNEL__) || defined(_IDE_DISK_C)
/* smartctl version number */
#define VERSION_MAJOR 1
#define VERSION_MINOR 2
/* Number of ata device to scan */
int numdevices;
/* how often SMART is checks in seconds */
int checktime = 1800;
typedef struct atadevices_s {
int fd;
char devicename[14];
int selftest;
struct hd_driveid drive;
struct ata_smart_values smartval;
struct ata_smart_thresholds smartthres;
} atadevices_t;
#endif /* !defined(__KERNEL__) || defined(_IDE_DISK_C) */
#endif /* _LINUX_HDSMART_H */
|