| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  * linux/include/linux/hdsmart.h | 
 | 3 |  * | 
 | 4 |  * Copyright (C) 1999-2000	Michael Cornwell <cornwell@acm.org> | 
 | 5 |  * Copyright (C) 2000		Andre Hedrick <andre@linux-ide.org> | 
 | 6 |  * | 
 | 7 |  * This program is free software; you can redistribute it and/or modify | 
 | 8 |  * it under the terms of the GNU General Public License as published by | 
 | 9 |  * the Free Software Foundation; either version 2, or (at your option) | 
 | 10 |  * any later version. | 
 | 11 |  * | 
 | 12 |  * You should have received a copy of the GNU General Public License | 
 | 13 |  * (for example /usr/src/linux/COPYING); if not, write to the Free | 
 | 14 |  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 
 | 15 |  */ | 
 | 16 |  | 
 | 17 | #ifndef _LINUX_HDSMART_H | 
 | 18 | #define _LINUX_HDSMART_H | 
 | 19 |  | 
 | 20 | #define OFFLINE_FULL_SCAN		0 | 
 | 21 | #define SHORT_SELF_TEST			1 | 
 | 22 | #define EXTEND_SELF_TEST		2 | 
 | 23 | #define SHORT_CAPTIVE_SELF_TEST		129 | 
 | 24 | #define EXTEND_CAPTIVE_SELF_TEST	130 | 
 | 25 |  | 
 | 26 | /* smart_attribute is the vendor specific in SFF-8035 spec */ | 
 | 27 | typedef struct ata_smart_attribute_s { | 
 | 28 | 	unsigned char			id; | 
 | 29 | 	unsigned short			status_flag; | 
 | 30 | 	unsigned char			normalized; | 
 | 31 | 	unsigned char			worse_normal; | 
 | 32 | 	unsigned char			raw[6]; | 
 | 33 | 	unsigned char			reserv; | 
 | 34 | } __attribute__ ((packed)) ata_smart_attribute_t; | 
 | 35 |  | 
 | 36 | /* smart_values is format of the read drive Atrribute command */ | 
 | 37 | typedef struct ata_smart_values_s { | 
 | 38 | 	unsigned short			revnumber; | 
 | 39 | 	ata_smart_attribute_t		vendor_attributes [30]; | 
 | 40 |         unsigned char			offline_data_collection_status; | 
 | 41 |         unsigned char			self_test_exec_status; | 
 | 42 | 	unsigned short			total_time_to_complete_off_line; | 
 | 43 | 	unsigned char			vendor_specific_366; | 
 | 44 | 	unsigned char			offline_data_collection_capability; | 
 | 45 | 	unsigned short			smart_capability; | 
 | 46 | 	unsigned char			errorlog_capability; | 
 | 47 | 	unsigned char			vendor_specific_371; | 
 | 48 | 	unsigned char			short_test_completion_time; | 
 | 49 | 	unsigned char			extend_test_completion_time; | 
 | 50 | 	unsigned char			reserved_374_385 [12]; | 
 | 51 | 	unsigned char			vendor_specific_386_509 [125]; | 
 | 52 | 	unsigned char			chksum; | 
 | 53 | } __attribute__ ((packed)) ata_smart_values_t; | 
 | 54 |  | 
 | 55 | /* Smart Threshold data structures */ | 
 | 56 | /* Vendor attribute of SMART Threshold */ | 
 | 57 | typedef struct ata_smart_threshold_entry_s { | 
 | 58 | 	unsigned char			id; | 
 | 59 | 	unsigned char			normalized_threshold; | 
 | 60 | 	unsigned char			reserved[10]; | 
 | 61 | } __attribute__ ((packed)) ata_smart_threshold_entry_t; | 
 | 62 |  | 
 | 63 | /* Format of Read SMART THreshold Command */ | 
 | 64 | typedef struct ata_smart_thresholds_s { | 
 | 65 | 	unsigned short			revnumber; | 
 | 66 | 	ata_smart_threshold_entry_t	thres_entries[30]; | 
 | 67 | 	unsigned char			reserved[149]; | 
 | 68 | 	unsigned char			chksum; | 
 | 69 | } __attribute__ ((packed)) ata_smart_thresholds_t; | 
 | 70 |  | 
 | 71 | typedef struct ata_smart_errorlog_command_struct_s { | 
 | 72 | 	unsigned char			devicecontrolreg; | 
 | 73 | 	unsigned char			featuresreg; | 
 | 74 | 	unsigned char			sector_count; | 
 | 75 | 	unsigned char			sector_number; | 
 | 76 | 	unsigned char			cylinder_low; | 
 | 77 | 	unsigned char			cylinder_high; | 
 | 78 | 	unsigned char			drive_head; | 
 | 79 | 	unsigned char			commandreg; | 
 | 80 | 	unsigned int			timestamp; | 
 | 81 | } __attribute__ ((packed)) ata_smart_errorlog_command_struct_t; | 
 | 82 |  | 
 | 83 | typedef struct ata_smart_errorlog_error_struct_s { | 
 | 84 | 	unsigned char			error_condition; | 
 | 85 | 	unsigned char			extended_error[14]; | 
 | 86 | 	unsigned char			state; | 
 | 87 | 	unsigned short			timestamp; | 
 | 88 | } __attribute__ ((packed)) ata_smart_errorlog_error_struct_t; | 
 | 89 |  | 
 | 90 | typedef struct ata_smart_errorlog_struct_s { | 
 | 91 | 	ata_smart_errorlog_command_struct_t	commands[6]; | 
 | 92 | 	ata_smart_errorlog_error_struct_t	error_struct; | 
 | 93 | } __attribute__ ((packed)) ata_smart_errorlog_struct_t; | 
 | 94 |  | 
 | 95 | typedef struct ata_smart_errorlog_s { | 
 | 96 | 	unsigned char			revnumber; | 
 | 97 | 	unsigned char			error_log_pointer; | 
 | 98 | 	ata_smart_errorlog_struct_t	errorlog_struct[5]; | 
 | 99 | 	unsigned short			ata_error_count; | 
 | 100 | 	unsigned short			non_fatal_count; | 
 | 101 | 	unsigned short			drive_timeout_count; | 
 | 102 | 	unsigned char			reserved[53]; | 
 | 103 | 	unsigned char			chksum; | 
 | 104 | } __attribute__ ((packed)) ata_smart_errorlog_t; | 
 | 105 |  | 
 | 106 | typedef struct ata_smart_selftestlog_struct_s { | 
 | 107 | 	unsigned char			selftestnumber; | 
 | 108 | 	unsigned char			selfteststatus; | 
 | 109 | 	unsigned short			timestamp; | 
 | 110 | 	unsigned char			selftestfailurecheckpoint; | 
 | 111 | 	unsigned int			lbafirstfailure; | 
 | 112 | 	unsigned char			vendorspecific[15]; | 
 | 113 | } __attribute__ ((packed)) ata_smart_selftestlog_struct_t; | 
 | 114 |  | 
 | 115 | typedef struct ata_smart_selftestlog_s { | 
 | 116 | 	unsigned short			revnumber; | 
 | 117 | 	ata_smart_selftestlog_struct_t	selftest_struct[21]; | 
 | 118 | 	unsigned char			vendorspecific[2]; | 
 | 119 | 	unsigned char			mostrecenttest; | 
 | 120 | 	unsigned char			resevered[2]; | 
 | 121 | 	unsigned char			chksum; | 
 | 122 | } __attribute__ ((packed)) ata_smart_selftestlog_t; | 
 | 123 |  | 
 | 124 | #endif	/* _LINUX_HDSMART_H */ |