|  | /* | 
|  | * 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 | 
|  |  | 
|  | #define OFFLINE_FULL_SCAN		0 | 
|  | #define SHORT_SELF_TEST			1 | 
|  | #define EXTEND_SELF_TEST		2 | 
|  | #define SHORT_CAPTIVE_SELF_TEST		129 | 
|  | #define EXTEND_CAPTIVE_SELF_TEST	130 | 
|  |  | 
|  | /* smart_attribute is the vendor specific in SFF-8035 spec */ | 
|  | typedef struct ata_smart_attribute_s { | 
|  | unsigned char			id; | 
|  | unsigned short			status_flag; | 
|  | unsigned char			normalized; | 
|  | unsigned char			worse_normal; | 
|  | unsigned char			raw[6]; | 
|  | unsigned char			reserv; | 
|  | } __attribute__ ((packed)) ata_smart_attribute_t; | 
|  |  | 
|  | /* smart_values is format of the read drive Atrribute command */ | 
|  | typedef struct ata_smart_values_s { | 
|  | unsigned short			revnumber; | 
|  | ata_smart_attribute_t		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)) ata_smart_values_t; | 
|  |  | 
|  | /* Smart Threshold data structures */ | 
|  | /* Vendor attribute of SMART Threshold */ | 
|  | typedef struct ata_smart_threshold_entry_s { | 
|  | unsigned char			id; | 
|  | unsigned char			normalized_threshold; | 
|  | unsigned char			reserved[10]; | 
|  | } __attribute__ ((packed)) ata_smart_threshold_entry_t; | 
|  |  | 
|  | /* Format of Read SMART THreshold Command */ | 
|  | typedef struct ata_smart_thresholds_s { | 
|  | unsigned short			revnumber; | 
|  | ata_smart_threshold_entry_t	thres_entries[30]; | 
|  | unsigned char			reserved[149]; | 
|  | unsigned char			chksum; | 
|  | } __attribute__ ((packed)) ata_smart_thresholds_t; | 
|  |  | 
|  | typedef struct ata_smart_errorlog_command_struct_s { | 
|  | 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)) ata_smart_errorlog_command_struct_t; | 
|  |  | 
|  | typedef struct ata_smart_errorlog_error_struct_s { | 
|  | unsigned char			error_condition; | 
|  | unsigned char			extended_error[14]; | 
|  | unsigned char			state; | 
|  | unsigned short			timestamp; | 
|  | } __attribute__ ((packed)) ata_smart_errorlog_error_struct_t; | 
|  |  | 
|  | typedef struct ata_smart_errorlog_struct_s { | 
|  | ata_smart_errorlog_command_struct_t	commands[6]; | 
|  | ata_smart_errorlog_error_struct_t	error_struct; | 
|  | } __attribute__ ((packed)) ata_smart_errorlog_struct_t; | 
|  |  | 
|  | typedef struct ata_smart_errorlog_s { | 
|  | unsigned char			revnumber; | 
|  | unsigned char			error_log_pointer; | 
|  | ata_smart_errorlog_struct_t	errorlog_struct[5]; | 
|  | unsigned short			ata_error_count; | 
|  | unsigned short			non_fatal_count; | 
|  | unsigned short			drive_timeout_count; | 
|  | unsigned char			reserved[53]; | 
|  | unsigned char			chksum; | 
|  | } __attribute__ ((packed)) ata_smart_errorlog_t; | 
|  |  | 
|  | typedef struct ata_smart_selftestlog_struct_s { | 
|  | unsigned char			selftestnumber; | 
|  | unsigned char			selfteststatus; | 
|  | unsigned short			timestamp; | 
|  | unsigned char			selftestfailurecheckpoint; | 
|  | unsigned int			lbafirstfailure; | 
|  | unsigned char			vendorspecific[15]; | 
|  | } __attribute__ ((packed)) ata_smart_selftestlog_struct_t; | 
|  |  | 
|  | typedef struct ata_smart_selftestlog_s { | 
|  | unsigned short			revnumber; | 
|  | ata_smart_selftestlog_struct_t	selftest_struct[21]; | 
|  | unsigned char			vendorspecific[2]; | 
|  | unsigned char			mostrecenttest; | 
|  | unsigned char			resevered[2]; | 
|  | unsigned char			chksum; | 
|  | } __attribute__ ((packed)) ata_smart_selftestlog_t; | 
|  |  | 
|  | #endif	/* _LINUX_HDSMART_H */ |