1#![allow(non_camel_case_types)]
2extern crate libc;
3extern crate c2rust_bitfields;
4use self::libc::{c_char, size_t};
5use c2rust_bitfields::BitfieldStruct;
6
7pub type SkBool = ::libc::c_uint;
8
9#[repr(C)]
11#[derive(Clone, Copy, Debug)]
12pub enum SkSmartSelfTest {
13 SK_SMART_SELF_TEST_SHORT = 1,
14 SK_SMART_SELF_TEST_EXTENDED = 2,
15 SK_SMART_SELF_TEST_CONVEYANCE = 3,
16 SK_SMART_SELF_TEST_ABORT = 127
17}
18
19#[repr(C)]
20#[derive(Clone, Copy, Debug)]
21pub struct SkIdentifyParsedData {
22 pub serial: [c_char; 21],
23 pub firmware: [c_char; 9],
24 pub model: [c_char; 41],
25}
26
27#[repr(C)]
28#[derive(Clone, Copy,Debug)]
29pub enum SkSmartOfflineDataCollectionStatus {
30 SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_NEVER,
31 SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_SUCCESS,
32 SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_INPROGRESS,
33 SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_SUSPENDED,
34 SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_ABORTED,
35 SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_FATAL,
36 SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_UNKNOWN,
37 _SK_SMART_OFFLINE_DATA_COLLECTION_STATUS_MAX
38}
39
40
41
42#[repr(C)]
43#[derive(Clone, Copy, Debug)]
44pub enum SkSmartSelfTestExecutionStatus {
45 SK_SMART_SELF_TEST_EXECUTION_STATUS_SUCCESS_OR_NEVER = 0,
46 SK_SMART_SELF_TEST_EXECUTION_STATUS_ABORTED = 1,
47 SK_SMART_SELF_TEST_EXECUTION_STATUS_INTERRUPTED = 2,
48 SK_SMART_SELF_TEST_EXECUTION_STATUS_FATAL = 3,
49 SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_UNKNOWN = 4,
50 SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_ELECTRICAL = 5,
51 SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_SERVO = 6,
52 SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_READ = 7,
53 SK_SMART_SELF_TEST_EXECUTION_STATUS_ERROR_HANDLING = 8,
54 SK_SMART_SELF_TEST_EXECUTION_STATUS_INPROGRESS = 15,
55 _SK_SMART_SELF_TEST_EXECUTION_STATUS_MAX
56}
57
58
59#[repr(C)]
60#[derive(Clone, Copy, Debug)]
61pub struct SkSmartParsedData {
62 pub offline_data_collection_status: SkSmartOfflineDataCollectionStatus ,
64 pub total_offline_data_collection_seconds: u32,
65 pub self_test_execution_status: SkSmartSelfTestExecutionStatus,
66 pub self_test_execution_percent_remaining: u32,
67
68 pub short_and_extended_test_available: SkBool,
70 pub conveyance_test_available: SkBool,
71 pub start_test_available: SkBool,
72 pub abort_test_available: SkBool,
73
74 pub short_test_polling_minutes: u32,
75 pub extended_test_polling_minutes: u32,
76 pub conveyance_test_polling_minutes: u32,
77}
78
79#[repr(C)]
80#[derive(Clone, Copy, Debug)]
81pub enum SkSmartAttributeUnit {
82 SK_SMART_ATTRIBUTE_UNIT_UNKNOWN,
83 SK_SMART_ATTRIBUTE_UNIT_NONE,
84 SK_SMART_ATTRIBUTE_UNIT_MSECONDS, SK_SMART_ATTRIBUTE_UNIT_SECTORS,
86 SK_SMART_ATTRIBUTE_UNIT_MKELVIN, SK_SMART_ATTRIBUTE_UNIT_SMALL_PERCENT, SK_SMART_ATTRIBUTE_UNIT_PERCENT, SK_SMART_ATTRIBUTE_UNIT_MB,
90 _SK_SMART_ATTRIBUTE_UNIT_MAX
91
92}
93
94
95#[repr(C)]
96#[derive(Clone, Copy, Debug, BitfieldStruct)]
97pub struct SkSmartAttributeParsedData {
98 pub id: u8,
99 pub name: *const c_char,
100 pub pretty_unit: SkSmartAttributeUnit,
101 pub flags: u16,
102 pub threshold: u8,
103 #[bitfield(name="threshold_valid", ty="SkBool", bits="0..=0")]
104 #[bitfield(name="online", ty="SkBool", bits="1..=1")]
105 #[bitfield(name="prefailure", ty="SkBool", bits="2..=2")]
106 #[bitfield(name="good_now", ty="SkBool", bits="3..=3")]
107 #[bitfield(name="good_now_valid", ty="SkBool", bits="4..=4")]
108 #[bitfield(name="good_in_the_past", ty="SkBool", bits="5..=5")]
109 #[bitfield(name="good_in_the_past_valid", ty="SkBool", bits="6..=6")]
110 #[bitfield(name="current_value_valid", ty="SkBool", bits="7..=7")]
111 #[bitfield(name="worst_value_valid", ty="SkBool", bits="8..=8")]
112 #[bitfield(name="warn", ty="SkBool", bits="9..=9")]
113 pub threshold_valid_online_prefailure_good_now_good_now_valid_good_in_the_past_good_in_the_past_valid_current_value_valid_worst_value_valid_warn: [u8; 2],
114 pub current_value: u8,
115 pub worst_value: u8,
116 pub pretty_value: u64,
117 pub raw: [u8; 6],
118}
119
120#[derive(Clone, Copy, Debug)]
121pub enum SkDisk{
122
123}
124
125#[repr(C)]
126#[derive(Clone, Copy, Debug)]
127pub enum SkSmartOverall {
128 SK_SMART_OVERALL_GOOD,
129 SK_SMART_OVERALL_BAD_ATTRIBUTE_IN_THE_PAST, SK_SMART_OVERALL_BAD_SECTOR, SK_SMART_OVERALL_BAD_ATTRIBUTE_NOW, SK_SMART_OVERALL_BAD_SECTOR_MANY, SK_SMART_OVERALL_BAD_STATUS, SK_SMART_OVERALL_MAX
135}
136
137#[link(name = "atasmart")]
138extern "C" {
139 pub fn sk_smart_self_test_execution_status_to_string(status: SkSmartSelfTestExecutionStatus) -> *const ::libc::c_char;
140 pub fn sk_smart_offline_data_collection_status_to_string(status: SkSmartOfflineDataCollectionStatus) -> *const ::libc::c_char;
141 pub fn sk_smart_self_test_to_string(test: SkSmartSelfTest) -> *const ::libc::c_char;
142 pub fn sk_smart_self_test_available(d: *const SkSmartParsedData, test: SkSmartSelfTest) -> SkBool;
143 pub fn sk_smart_self_test_polling_minutes(d: *const SkSmartParsedData, test: SkSmartSelfTest) -> u32;
144 pub fn sk_smart_attribute_unit_to_string(unit: SkSmartAttributeUnit) -> *const ::libc::c_char;
145 pub fn sk_smart_overall_to_string(overall: SkSmartOverall) -> *const ::libc::c_char;
146 pub fn sk_disk_open(name: *const ::libc::c_char, d: *mut *mut SkDisk) -> ::libc::c_int;
147 pub fn sk_disk_get_size(d: *mut SkDisk, bytes: *mut u64) -> ::libc::c_int;
148 pub fn sk_disk_check_sleep_mode(d: *mut SkDisk, awake: *mut SkBool) -> ::libc::c_int;
149 pub fn sk_disk_identify_is_available(d: *mut SkDisk, available: *mut SkBool) -> ::libc::c_int;
150 pub fn sk_disk_identify_parse(d: *mut SkDisk, data: *const *const SkIdentifyParsedData) -> ::libc::c_int;
151 pub fn sk_disk_smart_is_available(d: *mut SkDisk, available: *mut SkBool) -> ::libc::c_int;
152 pub fn sk_disk_smart_status(d: *mut SkDisk, good: *mut SkBool) -> ::libc::c_int;
153 pub fn sk_disk_smart_read_data(d: *mut SkDisk) -> ::libc::c_int;
154 pub fn sk_disk_get_blob(d: *mut *mut SkDisk, blob: *const ::libc::c_void, size: *mut size_t) -> ::libc::c_int;
155 pub fn sk_disk_set_blob(d: *mut SkDisk, blob: *const ::libc::c_void, size: size_t) -> ::libc::c_int;
156 pub fn sk_disk_smart_parse(d: *mut *mut SkDisk, data: *const SkSmartParsedData) -> ::libc::c_int;
157 pub fn sk_disk_smart_parse_attributes(d: *mut SkDisk, cb: extern fn(d: *mut SkDisk, data: *const SkSmartAttributeParsedData, userdata: *mut ::libc::c_void), userdata: *mut ::libc::c_void) -> ::libc::c_int;
158 pub fn sk_disk_smart_self_test(d: *mut SkDisk, test: SkSmartSelfTest) -> ::libc::c_int;
159 pub fn sk_disk_smart_get_power_on(d: *mut SkDisk, mseconds: *mut u64) -> ::libc::c_int;
160 pub fn sk_disk_smart_get_power_cycle(d: *mut SkDisk, count: *mut u64) -> ::libc::c_int;
161 pub fn sk_disk_smart_get_bad(d: *mut SkDisk, sectors: *mut u64) -> ::libc::c_int;
162 pub fn sk_disk_smart_get_temperature(d: *mut SkDisk, mkelvin: *mut u64 ) -> ::libc::c_int;
163 pub fn sk_disk_smart_get_overall(d: *mut SkDisk, overall: *mut SkSmartOverall) -> ::libc::c_int;
164 pub fn sk_disk_dump(d: *mut SkDisk) -> ::libc::c_int;
165 pub fn sk_disk_free(d: *mut SkDisk) -> ::libc::c_void;
166}