]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Framework/Protocol/IdeControllerInit/IdeControllerInit.h
Sync all bug fixes between EDK1.04 and EDK1.06 into EdkCompatibilityPkg.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Framework / Protocol / IdeControllerInit / IdeControllerInit.h
1 /*++
2
3 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 IdeControllerInit.h
15
16 Abstract:
17
18 EFI Platform IDE Init Protocol
19
20 Revision History
21
22 0.01 - Draft, 5-01-2002
23 Add Atapi6 Identify structure definition, 8-14-2002
24
25 --*/
26
27 #ifndef _EFI_IDE_CONTROLLER_INIT_PROTOCOL_H
28 #define _EFI_IDE_CONTROLLER_INIT_PROTOCOL_H
29
30 //
31 // Global ID for the EFI Platform IDE Protocol GUID
32 //
33 #define EFI_IDE_CONTROLLER_INIT_PROTOCOL_GUID \
34 { 0xa1e37052, 0x80d9, 0x4e65, {0xa3, 0x17, 0x3e, 0x9a, 0x55, 0xc4, 0x3e, 0xc9} }
35
36 ////////////////////////////////////////////////////////////////////////////////////////
37 // Forward reference, ANSI compatability
38 //
39 EFI_FORWARD_DECLARATION (EFI_IDE_CONTROLLER_INIT_PROTOCOL);
40
41 //
42 //////////////////////////////////////////////////////////////////////////////////////////
43 // EFI_IDE_BUS_ENUMERATION_PHASE
44 // EFI_IDE_CONTROLLER_ENUM_PHASE
45 //
46 typedef enum{
47 EfiIdeBeforeChannelEnumeration,
48 EfiIdeAfterChannelEnumeration,
49 EfiIdeBeforeChannelReset,
50 EfiIdeAfterChannelReset,
51 EfiIdeBusBeforeDevicePresenceDetection,
52 EfiIdeBusAfterDevicePresenceDetection,
53 EfiIdeResetMode,
54 EfiIdeBusPhaseMaximum
55 } EFI_IDE_CONTROLLER_ENUM_PHASE;
56
57 //
58 //******************************************************
59 // EFI_ATA_EXT_TRANSFER_PROTOCOL
60 //******************************************************
61 //
62 // This extended mode describes the SATA physical protocol.
63 // SATA physical layers can operate at different speeds.
64 // These speeds are defined below. Various PATA protocols
65 // and associated modes are not applicable to SATA devices.
66 //
67
68 typedef enum {
69 EfiAtaSataTransferProtocol
70 } EFI_ATA_EXT_TRANSFER_PROTOCOL;
71
72 #define EFI_SATA_AUTO_SPEED 0
73 #define EFI_SATA_GEN1_SPEED 1
74 #define EFI_SATA_GEN2_SPEED 2
75
76 //
77 //*******************************************************
78 // EFI_IDE_CABLE_TYPE
79 //*******************************************************
80 //
81 typedef enum {
82 EfiIdeCableTypeUnknown,
83 EfiIdeCableType40pin,
84 EfiIdeCableType80Pin,
85 EfiIdeCableTypeSerial,
86 EfiIdeCableTypeMaximum
87 } EFI_IDE_CABLE_TYPE;
88
89 //
90 //******************************************************
91 // EFI_ATA_MODE
92 //******************************************************
93 //
94 typedef struct {
95 BOOLEAN Valid;
96 UINT32 Mode;
97 } EFI_ATA_MODE;
98
99 //
100 //******************************************************
101 // EFI_ATA_EXTENDED_MODE
102 //******************************************************
103 //
104 typedef struct {
105 EFI_ATA_EXT_TRANSFER_PROTOCOL TransferProtocol;
106 UINT32 Mode;
107 } EFI_ATA_EXTENDED_MODE;
108
109 //
110 //******************************************************
111 // EFI_ATA_COLLECTIVE_MODE
112 //******************************************************
113 //
114 typedef struct {
115 EFI_ATA_MODE PioMode;
116 EFI_ATA_MODE SingleWordDmaMode;
117 EFI_ATA_MODE MultiWordDmaMode;
118 EFI_ATA_MODE UdmaMode;
119 UINT32 ExtModeCount;
120 EFI_ATA_EXTENDED_MODE ExtMode[1];
121 } EFI_ATA_COLLECTIVE_MODE;
122
123 //
124 //*******************************************************
125 // EFI_ATA_IDENTIFY_DATA
126 //*******************************************************
127 //
128
129 #pragma pack(1)
130
131 typedef struct {
132 UINT16 config; // General Configuration
133 UINT16 cylinders; // Number of Cylinders
134 UINT16 reserved_2;
135 UINT16 heads; //Number of logical heads
136 UINT16 vendor_data1;
137 UINT16 vendor_data2;
138 UINT16 sectors_per_track;
139 UINT16 vendor_specific_7_9[3];
140 CHAR8 SerialNo[20]; // ASCII
141 UINT16 vendor_specific_20_21[2];
142 UINT16 ecc_bytes_available;
143 CHAR8 FirmwareVer[8]; // ASCII
144 CHAR8 ModelName[40]; // ASCII
145 UINT16 multi_sector_cmd_max_sct_cnt;
146 UINT16 reserved_48;
147 UINT16 capabilities;
148 UINT16 reserved_50;
149 UINT16 pio_cycle_timing;
150 UINT16 reserved_52;
151 UINT16 field_validity;
152 UINT16 current_cylinders;
153 UINT16 current_heads;
154 UINT16 current_sectors;
155 UINT16 CurrentCapacityLsb;
156 UINT16 CurrentCapacityMsb;
157 UINT16 reserved_59;
158 UINT16 user_addressable_sectors_lo;
159 UINT16 user_addressable_sectors_hi;
160 UINT16 reserved_62;
161 UINT16 multi_word_dma_mode;
162 UINT16 advanced_pio_modes;
163 UINT16 min_multi_word_dma_cycle_time;
164 UINT16 rec_multi_word_dma_cycle_time;
165 UINT16 min_pio_cycle_time_without_flow_control;
166 UINT16 min_pio_cycle_time_with_flow_control;
167 UINT16 reserved_69_79[11];
168 UINT16 major_version_no;
169 UINT16 minor_version_no;
170 UINT16 command_set_supported_82; // word 82
171 UINT16 command_set_supported_83; // word 83
172 UINT16 command_set_feature_extn; // word 84
173 UINT16 command_set_feature_enb_85; // word 85
174 UINT16 command_set_feature_enb_86; // word 86
175 UINT16 command_set_feature_default; // word 87
176 UINT16 ultra_dma_mode; // word 88
177 UINT16 reserved_89_105[17];
178 UINT16 phy_logic_sector_support; // word 106
179 UINT16 reserved_107_116[10];
180 UINT16 logic_sector_size_lo; // word 117
181 UINT16 logic_sector_size_hi; // word 118
182 UINT16 reserved_119_127[9];
183 UINT16 security_status;
184 UINT16 vendor_data_129_159[31];
185 UINT16 reserved_160_208[49];
186 UINT16 alignment_logic_in_phy_blocks; // word 209
187 UINT16 reserved_210_255[46];
188 } EFI_ATA_IDENTIFY_DATA;
189
190 #pragma pack()
191 //
192 //*******************************************************
193 // EFI_ATAPI_IDENTIFY_DATA
194 //*******************************************************
195 //
196 #pragma pack(1)
197 typedef struct {
198 UINT16 config; // General Configuration
199 UINT16 obsolete_1;
200 UINT16 specific_config;
201 UINT16 obsolete_3;
202 UINT16 retired_4_5[2];
203 UINT16 obsolete_6;
204 UINT16 cfa_reserved_7_8[2];
205 UINT16 retired_9;
206 CHAR8 SerialNo[20]; // ASCII
207 UINT16 retired_20_21[2];
208 UINT16 obsolete_22;
209 CHAR8 FirmwareVer[8]; // ASCII
210 CHAR8 ModelName[40]; // ASCII
211 UINT16 multi_sector_cmd_max_sct_cnt;
212 UINT16 reserved_48;
213 UINT16 capabilities_49;
214 UINT16 capabilities_50;
215 UINT16 obsolete_51_52[2];
216 UINT16 field_validity;
217 UINT16 obsolete_54_58[5];
218 UINT16 mutil_sector_setting;
219 UINT16 user_addressable_sectors_lo;
220 UINT16 user_addressable_sectors_hi;
221 UINT16 obsolete_62;
222 UINT16 multi_word_dma_mode;
223 UINT16 advanced_pio_modes;
224 UINT16 min_multi_word_dma_cycle_time;
225 UINT16 rec_multi_word_dma_cycle_time;
226 UINT16 min_pio_cycle_time_without_flow_control;
227 UINT16 min_pio_cycle_time_with_flow_control;
228 UINT16 reserved_69_74[6];
229 UINT16 queue_depth;
230 UINT16 reserved_76_79[4];
231 UINT16 major_version_no;
232 UINT16 minor_version_no;
233 UINT16 cmd_set_support_82;
234 UINT16 cmd_set_support_83;
235 UINT16 cmd_feature_support;
236 UINT16 cmd_feature_enable_85;
237 UINT16 cmd_feature_enable_86;
238 UINT16 cmd_feature_default;
239 UINT16 ultra_dma_select;
240 UINT16 time_required_for_sec_erase;
241 UINT16 time_required_for_enhanced_sec_erase;
242 UINT16 current_advanced_power_mgmt_value;
243 UINT16 master_pwd_revison_code;
244 UINT16 hardware_reset_result;
245 UINT16 current_auto_acoustic_mgmt_value;
246 UINT16 reserved_95_99[5];
247 UINT16 max_user_lba_for_48bit_addr[4];
248 UINT16 reserved_104_126[23];
249 UINT16 removable_media_status_notification_support;
250 UINT16 security_status;
251 UINT16 vendor_data_129_159[31];
252 UINT16 cfa_power_mode;
253 UINT16 cfa_reserved_161_175[15];
254 UINT16 current_media_serial_no[30];
255 UINT16 reserved_206_254[49];
256 UINT16 integrity_word;
257 } EFI_ATAPI_IDENTIFY_DATA;
258
259 #pragma pack()
260 //
261 //*******************************************************
262 // EFI_IDENTIFY_DATA
263 //*******************************************************
264 //
265 typedef union {
266 EFI_ATA_IDENTIFY_DATA AtaData;
267 EFI_ATAPI_IDENTIFY_DATA AtapiData;
268 } EFI_IDENTIFY_DATA;
269
270 #define EFI_ATAPI_DEVICE_IDENTIFY_DATA 0x8000
271
272 //
273 /////////////////////////////////////////////////////////////////////////////////////////
274 // Function prototype declaration, for ANSI compatability
275 //
276 typedef
277 EFI_STATUS
278 (EFIAPI *EFI_IDE_CONTROLLER_GET_CHANNEL_INFO) (
279 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
280 IN UINT8 Channel,
281 OUT BOOLEAN *Enabled,
282 OUT UINT8 *MaxDevices
283
284 );
285
286 typedef
287 EFI_STATUS
288 (EFIAPI *EFI_IDE_CONTROLLER_NOTIFY_PHASE) (
289 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
290 IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase,
291 IN UINT8 Channel
292 );
293
294 typedef
295 EFI_STATUS
296 (EFIAPI *EFI_IDE_CONTROLLER_SUBMIT_DATA) (
297 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
298 IN UINT8 Channel,
299 IN UINT8 Device,
300 IN EFI_IDENTIFY_DATA *IdentifyData
301 );
302
303
304 typedef
305 EFI_STATUS
306 (EFIAPI *EFI_IDE_CONTROLLER_DISQUALIFY_MODE) (
307 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
308 IN UINT8 Channel,
309 IN UINT8 Device,
310 IN EFI_ATA_COLLECTIVE_MODE *BadModes
311 );
312
313 typedef
314 EFI_STATUS
315 (EFIAPI *EFI_IDE_CONTROLLER_CALCULATE_MODE) (
316 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
317 IN UINT8 Channel,
318 IN UINT8 Device,
319 OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes
320 );
321
322 //
323 // ?? What happen to EFI_IDE_CONTROLLER_SET_TIMING ???
324 //
325 typedef
326 EFI_STATUS
327 (EFIAPI *EFI_IDE_CONTROLLER_SET_TIMING) (
328 IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
329 IN UINT8 Channel,
330 IN UINT8 Device,
331 IN EFI_ATA_COLLECTIVE_MODE *Modes
332 );
333
334 //
335 ////////////////////////////////////////////////////////////////////////////////////////////////////
336 // Interface structure
337 // EFI_IDE_CONTROLLER_INIT_PROTOCOL protocol provides the chipset specific information to the IDE bus driver.
338 // An IDE Bus driver wants to manage an IDE bus and possible IDE devices will have to retrieve the
339 // EFI_IDE_CONTROLLER_INIT_PROTOCOL instances.
340 //
341 struct _EFI_IDE_CONTROLLER_INIT_PROTOCOL {
342 EFI_IDE_CONTROLLER_GET_CHANNEL_INFO GetChannelInfo;
343 EFI_IDE_CONTROLLER_NOTIFY_PHASE NotifyPhase;
344 EFI_IDE_CONTROLLER_SUBMIT_DATA SubmitData;
345 EFI_IDE_CONTROLLER_DISQUALIFY_MODE DisqualifyMode;
346 EFI_IDE_CONTROLLER_CALCULATE_MODE CalculateMode;
347 EFI_IDE_CONTROLLER_SET_TIMING SetTiming;
348 BOOLEAN EnumAll;
349 UINT8 ChannelCount;
350 };
351
352
353 extern EFI_GUID gEfiIdeControllerInitProtocolGuid;
354
355 #endif