]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBus.h
0fdacfed829220de447f2bf1378c6ea508a07f1d
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Pci / IdeBusDxe / IdeBus.h
1 /** @file
2 Header file for IDE Bus Driver.
3
4 Copyright (c) 2006 - 2007 Intel Corporation. <BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef _IDE_BUS_H_
16 #define _IDE_BUS_H_
17
18
19
20 #include <FrameworkDxe.h>
21
22 #include <Protocol/IdeControllerInit.h>
23 #include <Protocol/BlockIo.h>
24 #include <Protocol/PciIo.h>
25 #include <Protocol/DiskInfo.h>
26 #include <Protocol/DevicePath.h>
27
28 #include <Library/DebugLib.h>
29 #include <Library/UefiDriverEntryPoint.h>
30 #include <Library/BaseLib.h>
31 #include <Library/UefiLib.h>
32 #include <Library/BaseMemoryLib.h>
33 #include <Library/ReportStatusCodeLib.h>
34 #include <Library/MemoryAllocationLib.h>
35 #include <Library/PerformanceLib.h>
36 #include <Library/UefiBootServicesTableLib.h>
37 #include <Library/UefiRuntimeServicesTableLib.h>
38 #include <Library/DevicePathLib.h>
39
40 #include <Guid/EventGroup.h>
41
42 #include <IndustryStandard/Pci22.h>
43 #include "IdeData.h"
44
45 //
46 // Extra Definition to porting
47 //
48 #define MAX_IDE_DEVICE 4
49 #define MAX_IDE_CHANNELS 2
50 #define MAX_IDE_DRIVES 2
51
52 #define INVALID_DEVICE_TYPE 0xff
53 #define ATA_DEVICE_TYPE 0x00
54 #define ATAPI_DEVICE_TYPE 0x01
55
56 #define EFI_IOB_ATA_BUS_SMART_ENABLE (EFI_SUBCLASS_SPECIFIC | 0x00000000)
57 #define EFI_IOB_ATA_BUS_SMART_DISABLE (EFI_SUBCLASS_SPECIFIC | 0x00000001)
58 #define EFI_IOB_ATA_BUS_SMART_OVERTHRESHOLD (EFI_SUBCLASS_SPECIFIC | 0x00000002)
59 #define EFI_IOB_ATA_BUS_SMART_UNDERTHRESHOLD (EFI_SUBCLASS_SPECIFIC | 0x00000003)
60
61 typedef struct {
62 BOOLEAN HaveScannedDevice[MAX_IDE_DEVICE];
63 BOOLEAN DeviceFound[MAX_IDE_DEVICE];
64 BOOLEAN DeviceProcessed[MAX_IDE_DEVICE];
65 } IDE_BUS_DRIVER_PRIVATE_DATA;
66
67 #define IDE_BLK_IO_DEV_SIGNATURE SIGNATURE_32 ('i', 'b', 'i', 'd')
68
69 typedef struct {
70 UINT32 Signature;
71
72 EFI_HANDLE Handle;
73 EFI_BLOCK_IO_PROTOCOL BlkIo;
74 EFI_BLOCK_IO_MEDIA BlkMedia;
75 EFI_DISK_INFO_PROTOCOL DiskInfo;
76 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
77 EFI_PCI_IO_PROTOCOL *PciIo;
78 IDE_BUS_DRIVER_PRIVATE_DATA *IdeBusDriverPrivateData;
79
80 //
81 // Local Data for IDE interface goes here
82 //
83 EFI_IDE_CHANNEL Channel;
84 EFI_IDE_DEVICE Device;
85 UINT16 Lun;
86 IDE_DEVICE_TYPE Type;
87
88 IDE_BASE_REGISTERS *IoPort;
89 UINT16 AtapiError;
90
91 ATAPI_INQUIRY_DATA *pInquiryData;
92 EFI_IDENTIFY_DATA *pIdData;
93 ATA_PIO_MODE PioMode;
94 EFI_ATA_MODE UdmaMode;
95 CHAR8 ModelName[41];
96 ATAPI_REQUEST_SENSE_DATA *SenseData;
97 UINT8 SenseDataNumber;
98 UINT8 *Cache;
99
100 //
101 // ExitBootService Event, it is used to clear pending IDE interrupt
102 //
103 EFI_EVENT ExitBootServiceEvent;
104
105 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
106 } IDE_BLK_IO_DEV;
107
108 #include "ComponentName.h"
109
110 #define IDE_BLOCK_IO_DEV_FROM_THIS(a) CR (a, IDE_BLK_IO_DEV, BlkIo, IDE_BLK_IO_DEV_SIGNATURE)
111 #define IDE_BLOCK_IO_DEV_FROM_DISK_INFO_THIS(a) CR (a, IDE_BLK_IO_DEV, DiskInfo, IDE_BLK_IO_DEV_SIGNATURE)
112
113 //
114 // Global Variables
115 //
116 extern EFI_DRIVER_BINDING_PROTOCOL gIDEBusDriverBinding;
117 extern EFI_DRIVER_DIAGNOSTICS_PROTOCOL gIDEBusDriverDiagnostics;
118 extern EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gIDEBusDriverDiagnostics2;
119
120 #include "Ide.h"
121
122 //
123 // Prototypes
124 // Driver model protocol interface
125 //
126 /**
127 TODO: Add function description
128
129 @param ImageHandle TODO: add argument description
130 @param SystemTable TODO: add argument description
131
132 TODO: add return values.
133
134 **/
135 EFI_STATUS
136 EFIAPI
137 IDEBusControllerDriverEntryPoint (
138 IN EFI_HANDLE ImageHandle,
139 IN EFI_SYSTEM_TABLE *SystemTable
140 );
141
142 /**
143 TODO: Add function description
144
145 @param This TODO: add argument description
146 @param Controller TODO: add argument description
147 @param RemainingDevicePath TODO: add argument description
148
149 TODO: add return values.
150
151 **/
152 EFI_STATUS
153 EFIAPI
154 IDEBusDriverBindingSupported (
155 IN EFI_DRIVER_BINDING_PROTOCOL *This,
156 IN EFI_HANDLE Controller,
157 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
158 );
159
160 /**
161 TODO: Add function description
162
163 @param This TODO: add argument description
164 @param Controller TODO: add argument description
165 @param RemainingDevicePath TODO: add argument description
166
167 TODO: add return values.
168
169 **/
170 EFI_STATUS
171 EFIAPI
172 IDEBusDriverBindingStart (
173 IN EFI_DRIVER_BINDING_PROTOCOL *This,
174 IN EFI_HANDLE Controller,
175 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
176 );
177
178 /**
179 TODO: Add function description
180
181 @param This TODO: add argument description
182 @param Controller TODO: add argument description
183 @param NumberOfChildren TODO: add argument description
184 @param ChildHandleBuffer TODO: add argument description
185
186 TODO: add return values.
187
188 **/
189 EFI_STATUS
190 EFIAPI
191 IDEBusDriverBindingStop (
192 IN EFI_DRIVER_BINDING_PROTOCOL *This,
193 IN EFI_HANDLE Controller,
194 IN UINTN NumberOfChildren,
195 IN EFI_HANDLE *ChildHandleBuffer
196 );
197
198 //
199 // EFI Driver Configuration Functions
200 //
201 /**
202 TODO: Add function description
203
204 @param This TODO: add argument description
205 @param ControllerHandle TODO: add argument description
206 @param ChildHandle TODO: add argument description
207 @param Language TODO: add argument description
208 @param ActionRequired TODO: add argument description
209
210 TODO: add return values.
211
212 **/
213 EFI_STATUS
214 IDEBusDriverConfigurationSetOptions (
215 IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
216 IN EFI_HANDLE ControllerHandle,
217 IN EFI_HANDLE ChildHandle OPTIONAL,
218 IN CHAR8 *Language,
219 OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
220 );
221
222 /**
223 TODO: Add function description
224
225 @param This TODO: add argument description
226 @param ControllerHandle TODO: add argument description
227 @param ChildHandle TODO: add argument description
228
229 TODO: add return values.
230
231 **/
232 EFI_STATUS
233 IDEBusDriverConfigurationOptionsValid (
234 IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
235 IN EFI_HANDLE ControllerHandle,
236 IN EFI_HANDLE ChildHandle OPTIONAL
237 );
238
239 /**
240 TODO: Add function description
241
242 @param This TODO: add argument description
243 @param ControllerHandle TODO: add argument description
244 @param ChildHandle TODO: add argument description
245 @param DefaultType TODO: add argument description
246 @param ActionRequired TODO: add argument description
247
248 TODO: add return values.
249
250 **/
251 EFI_STATUS
252 IDEBusDriverConfigurationForceDefaults (
253 IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
254 IN EFI_HANDLE ControllerHandle,
255 IN EFI_HANDLE ChildHandle OPTIONAL,
256 IN UINT32 DefaultType,
257 OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
258 );
259
260 //
261 // EFI Driver Diagnostics Functions
262 //
263 /**
264 TODO: Add function description
265
266 @param This TODO: add argument description
267 @param ControllerHandle TODO: add argument description
268 @param ChildHandle TODO: add argument description
269 @param DiagnosticType TODO: add argument description
270 @param Language TODO: add argument description
271 @param ErrorType TODO: add argument description
272 @param BufferSize TODO: add argument description
273 @param Buffer TODO: add argument description
274
275 TODO: add return values.
276
277 **/
278 EFI_STATUS
279 IDEBusDriverDiagnosticsRunDiagnostics (
280 IN EFI_DRIVER_DIAGNOSTICS_PROTOCOL *This,
281 IN EFI_HANDLE ControllerHandle,
282 IN EFI_HANDLE ChildHandle OPTIONAL,
283 IN EFI_DRIVER_DIAGNOSTIC_TYPE DiagnosticType,
284 IN CHAR8 *Language,
285 OUT EFI_GUID **ErrorType,
286 OUT UINTN *BufferSize,
287 OUT CHAR16 **Buffer
288 );
289
290 //
291 // Block I/O Protocol Interface
292 //
293 /**
294 TODO: Add function description
295
296 @param This TODO: add argument description
297 @param ExtendedVerification TODO: add argument description
298
299 TODO: add return values.
300
301 **/
302 EFI_STATUS
303 EFIAPI
304 IDEBlkIoReset (
305 IN EFI_BLOCK_IO_PROTOCOL *This,
306 IN BOOLEAN ExtendedVerification
307 );
308
309 /**
310 TODO: Add function description
311
312 @param This TODO: add argument description
313 @param MediaId TODO: add argument description
314 @param LBA TODO: add argument description
315 @param BufferSize TODO: add argument description
316 @param Buffer TODO: add argument description
317
318 TODO: add return values.
319
320 **/
321 EFI_STATUS
322 EFIAPI
323 IDEBlkIoReadBlocks (
324 IN EFI_BLOCK_IO_PROTOCOL *This,
325 IN UINT32 MediaId,
326 IN EFI_LBA LBA,
327 IN UINTN BufferSize,
328 OUT VOID *Buffer
329 );
330
331 /**
332 TODO: Add function description
333
334 @param This TODO: add argument description
335 @param MediaId TODO: add argument description
336 @param LBA TODO: add argument description
337 @param BufferSize TODO: add argument description
338 @param Buffer TODO: add argument description
339
340 TODO: add return values.
341
342 **/
343 EFI_STATUS
344 EFIAPI
345 IDEBlkIoWriteBlocks (
346 IN EFI_BLOCK_IO_PROTOCOL *This,
347 IN UINT32 MediaId,
348 IN EFI_LBA LBA,
349 IN UINTN BufferSize,
350 IN VOID *Buffer
351 );
352
353 /**
354 TODO: Add function description
355
356 @param This TODO: add argument description
357
358 TODO: add return values.
359
360 **/
361 EFI_STATUS
362 EFIAPI
363 IDEBlkIoFlushBlocks (
364 IN EFI_BLOCK_IO_PROTOCOL *This
365 );
366
367 /**
368 TODO: Add function description
369
370 @param PciIo TODO: add argument description
371 @param Enable TODO: add argument description
372
373 TODO: add return values.
374
375 **/
376 EFI_STATUS
377 IDERegisterDecodeEnableorDisable (
378 IN EFI_PCI_IO_PROTOCOL *PciIo,
379 IN BOOLEAN Enable
380 );
381
382 /**
383 TODO: Add function description
384
385 @param This TODO: add argument description
386 @param InquiryData TODO: add argument description
387 @param IntquiryDataSize TODO: add argument description
388
389 TODO: add return values.
390
391 **/
392 EFI_STATUS
393 EFIAPI
394 IDEDiskInfoInquiry (
395 IN EFI_DISK_INFO_PROTOCOL *This,
396 IN OUT VOID *InquiryData,
397 IN OUT UINT32 *IntquiryDataSize
398 );
399
400 /**
401 TODO: Add function description
402
403 @param This TODO: add argument description
404 @param IdentifyData TODO: add argument description
405 @param IdentifyDataSize TODO: add argument description
406
407 TODO: add return values.
408
409 **/
410 EFI_STATUS
411 EFIAPI
412 IDEDiskInfoIdentify (
413 IN EFI_DISK_INFO_PROTOCOL *This,
414 IN OUT VOID *IdentifyData,
415 IN OUT UINT32 *IdentifyDataSize
416 );
417
418 /**
419 TODO: Add function description
420
421 @param This TODO: add argument description
422 @param SenseData TODO: add argument description
423 @param SenseDataSize TODO: add argument description
424 @param SenseDataNumber TODO: add argument description
425
426 TODO: add return values.
427
428 **/
429 EFI_STATUS
430 EFIAPI
431 IDEDiskInfoSenseData (
432 IN EFI_DISK_INFO_PROTOCOL *This,
433 IN OUT VOID *SenseData,
434 IN OUT UINT32 *SenseDataSize,
435 OUT UINT8 *SenseDataNumber
436 );
437
438 /**
439 TODO: Add function description
440
441 @param This TODO: add argument description
442 @param IdeChannel TODO: add argument description
443 @param IdeDevice TODO: add argument description
444
445 TODO: add return values.
446
447 **/
448 EFI_STATUS
449 EFIAPI
450 IDEDiskInfoWhichIde (
451 IN EFI_DISK_INFO_PROTOCOL *This,
452 OUT UINT32 *IdeChannel,
453 OUT UINT32 *IdeDevice
454 );
455
456 #endif