2 Header file for IDE Bus Driver.
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
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.
20 #include <FrameworkDxe.h>
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>
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>
40 #include <Guid/EventGroup.h>
42 #include <IndustryStandard/Pci22.h>
46 // Extra Definition to porting
48 #define MAX_IDE_DEVICE 4
49 #define MAX_IDE_CHANNELS 2
50 #define MAX_IDE_DRIVES 2
52 #define INVALID_DEVICE_TYPE 0xff
53 #define ATA_DEVICE_TYPE 0x00
54 #define ATAPI_DEVICE_TYPE 0x01
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)
62 BOOLEAN HaveScannedDevice
[MAX_IDE_DEVICE
];
63 BOOLEAN DeviceFound
[MAX_IDE_DEVICE
];
64 BOOLEAN DeviceProcessed
[MAX_IDE_DEVICE
];
65 } IDE_BUS_DRIVER_PRIVATE_DATA
;
67 #define IDE_BLK_IO_DEV_SIGNATURE SIGNATURE_32 ('i', 'b', 'i', 'd')
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
;
81 // Local Data for IDE interface goes here
83 EFI_IDE_CHANNEL Channel
;
84 EFI_IDE_DEVICE Device
;
88 IDE_BASE_REGISTERS
*IoPort
;
91 ATAPI_INQUIRY_DATA
*pInquiryData
;
92 EFI_IDENTIFY_DATA
*pIdData
;
94 EFI_ATA_MODE UdmaMode
;
96 ATAPI_REQUEST_SENSE_DATA
*SenseData
;
97 UINT8 SenseDataNumber
;
101 // ExitBootService Event, it is used to clear pending IDE interrupt
103 EFI_EVENT ExitBootServiceEvent
;
105 EFI_UNICODE_STRING_TABLE
*ControllerNameTable
;
108 #include "ComponentName.h"
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)
116 extern EFI_DRIVER_BINDING_PROTOCOL gIDEBusDriverBinding
;
117 extern EFI_DRIVER_DIAGNOSTICS_PROTOCOL gIDEBusDriverDiagnostics
;
118 extern EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gIDEBusDriverDiagnostics2
;
124 // Driver model protocol interface
127 TODO: Add function description
129 @param ImageHandle TODO: add argument description
130 @param SystemTable TODO: add argument description
132 TODO: add return values.
137 IDEBusControllerDriverEntryPoint (
138 IN EFI_HANDLE ImageHandle
,
139 IN EFI_SYSTEM_TABLE
*SystemTable
143 TODO: Add function description
145 @param This TODO: add argument description
146 @param Controller TODO: add argument description
147 @param RemainingDevicePath TODO: add argument description
149 TODO: add return values.
154 IDEBusDriverBindingSupported (
155 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
156 IN EFI_HANDLE Controller
,
157 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
161 TODO: Add function description
163 @param This TODO: add argument description
164 @param Controller TODO: add argument description
165 @param RemainingDevicePath TODO: add argument description
167 TODO: add return values.
172 IDEBusDriverBindingStart (
173 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
174 IN EFI_HANDLE Controller
,
175 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
179 TODO: Add function description
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
186 TODO: add return values.
191 IDEBusDriverBindingStop (
192 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
193 IN EFI_HANDLE Controller
,
194 IN UINTN NumberOfChildren
,
195 IN EFI_HANDLE
*ChildHandleBuffer
199 // EFI Driver Configuration Functions
202 TODO: Add function description
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
210 TODO: add return values.
214 IDEBusDriverConfigurationSetOptions (
215 IN EFI_DRIVER_CONFIGURATION_PROTOCOL
*This
,
216 IN EFI_HANDLE ControllerHandle
,
217 IN EFI_HANDLE ChildHandle OPTIONAL
,
219 OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED
*ActionRequired
223 TODO: Add function description
225 @param This TODO: add argument description
226 @param ControllerHandle TODO: add argument description
227 @param ChildHandle TODO: add argument description
229 TODO: add return values.
233 IDEBusDriverConfigurationOptionsValid (
234 IN EFI_DRIVER_CONFIGURATION_PROTOCOL
*This
,
235 IN EFI_HANDLE ControllerHandle
,
236 IN EFI_HANDLE ChildHandle OPTIONAL
240 TODO: Add function description
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
248 TODO: add return values.
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
261 // EFI Driver Diagnostics Functions
264 TODO: Add function description
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
275 TODO: add return values.
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
,
285 OUT EFI_GUID
**ErrorType
,
286 OUT UINTN
*BufferSize
,
291 // Block I/O Protocol Interface
294 TODO: Add function description
296 @param This TODO: add argument description
297 @param ExtendedVerification TODO: add argument description
299 TODO: add return values.
305 IN EFI_BLOCK_IO_PROTOCOL
*This
,
306 IN BOOLEAN ExtendedVerification
310 TODO: Add function description
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
318 TODO: add return values.
324 IN EFI_BLOCK_IO_PROTOCOL
*This
,
332 TODO: Add function description
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
340 TODO: add return values.
345 IDEBlkIoWriteBlocks (
346 IN EFI_BLOCK_IO_PROTOCOL
*This
,
354 TODO: Add function description
356 @param This TODO: add argument description
358 TODO: add return values.
363 IDEBlkIoFlushBlocks (
364 IN EFI_BLOCK_IO_PROTOCOL
*This
368 TODO: Add function description
370 @param PciIo TODO: add argument description
371 @param Enable TODO: add argument description
373 TODO: add return values.
377 IDERegisterDecodeEnableorDisable (
378 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
383 TODO: Add function description
385 @param This TODO: add argument description
386 @param InquiryData TODO: add argument description
387 @param IntquiryDataSize TODO: add argument description
389 TODO: add return values.
395 IN EFI_DISK_INFO_PROTOCOL
*This
,
396 IN OUT VOID
*InquiryData
,
397 IN OUT UINT32
*IntquiryDataSize
401 TODO: Add function description
403 @param This TODO: add argument description
404 @param IdentifyData TODO: add argument description
405 @param IdentifyDataSize TODO: add argument description
407 TODO: add return values.
412 IDEDiskInfoIdentify (
413 IN EFI_DISK_INFO_PROTOCOL
*This
,
414 IN OUT VOID
*IdentifyData
,
415 IN OUT UINT32
*IdentifyDataSize
419 TODO: Add function description
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
426 TODO: add return values.
431 IDEDiskInfoSenseData (
432 IN EFI_DISK_INFO_PROTOCOL
*This
,
433 IN OUT VOID
*SenseData
,
434 IN OUT UINT32
*SenseDataSize
,
435 OUT UINT8
*SenseDataNumber
439 TODO: Add function description
441 @param This TODO: add argument description
442 @param IdeChannel TODO: add argument description
443 @param IdeDevice TODO: add argument description
445 TODO: add return values.
450 IDEDiskInfoWhichIde (
451 IN EFI_DISK_INFO_PROTOCOL
*This
,
452 OUT UINT32
*IdeChannel
,
453 OUT UINT32
*IdeDevice