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