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