]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkModulePkg/Csm/BiosThunk/BlockIoDxe/BiosBlkIo.h
IntelFrameworkModulePkg: Clean up source files
[mirror_edk2.git] / IntelFrameworkModulePkg / Csm / BiosThunk / BlockIoDxe / BiosBlkIo.h
1 /** @file
2
3 Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.<BR>
4
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions
7 of the BSD License which accompanies this distribution. The
8 full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16 #ifndef _BIOS_BLOCK_IO_H_
17 #define _BIOS_BLOCK_IO_H_
18
19 #include <Uefi.h>
20
21 #include <Protocol/BlockIo.h>
22 #include <Protocol/PciIo.h>
23 #include <Protocol/LegacyBios.h>
24 #include <Protocol/DevicePath.h>
25 #include <Guid/LegacyBios.h>
26 #include <Guid/BlockIoVendor.h>
27
28 #include <Library/UefiDriverEntryPoint.h>
29 #include <Library/DebugLib.h>
30 #include <Library/BaseMemoryLib.h>
31 #include <Library/UefiBootServicesTableLib.h>
32 #include <Library/UefiLib.h>
33 #include <Library/DevicePathLib.h>
34 #include <Library/MemoryAllocationLib.h>
35
36 #include <IndustryStandard/Pci.h>
37
38 #include "Edd.h"
39
40 //
41 // Global Variables
42 //
43 extern EFI_COMPONENT_NAME_PROTOCOL gBiosBlockIoComponentName;
44 extern EFI_COMPONENT_NAME2_PROTOCOL gBiosBlockIoComponentName2;
45
46
47 //
48 // Define the I2O class code
49 //
50 #define PCI_BASE_CLASS_INTELLIGENT 0x0e
51 #define PCI_SUB_CLASS_INTELLIGENT 0x00
52
53 //
54 // Number of pages needed for our buffer under 1MB
55 //
56 #define BLOCK_IO_BUFFER_PAGE_SIZE (((sizeof (EDD_DEVICE_ADDRESS_PACKET) + sizeof (BIOS_LEGACY_DRIVE) + MAX_EDD11_XFER) / EFI_PAGE_SIZE) + 1 \
57 )
58
59 //
60 // Driver Binding Protocol functions
61 //
62
63 /**
64 Check whether the driver supports this device.
65
66 @param This The Udriver binding protocol.
67 @param Controller The controller handle to check.
68 @param RemainingDevicePath The remaining device path.
69
70 @retval EFI_SUCCESS The driver supports this controller.
71 @retval other This device isn't supported.
72
73 **/
74 EFI_STATUS
75 EFIAPI
76 BiosBlockIoDriverBindingSupported (
77 IN EFI_DRIVER_BINDING_PROTOCOL *This,
78 IN EFI_HANDLE Controller,
79 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
80 );
81
82
83 /**
84 Starts the device with this driver.
85
86 @param This The driver binding instance.
87 @param Controller Handle of device to bind driver to.
88 @param RemainingDevicePath Optional parameter use to pick a specific child
89 device to start.
90
91 @retval EFI_SUCCESS The controller is controlled by the driver.
92 @retval Other This controller cannot be started.
93
94 **/
95 EFI_STATUS
96 EFIAPI
97 BiosBlockIoDriverBindingStart (
98 IN EFI_DRIVER_BINDING_PROTOCOL *This,
99 IN EFI_HANDLE Controller,
100 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
101 );
102
103 /**
104 Stop the device handled by this driver.
105
106 @param This The driver binding protocol.
107 @param Controller The controller to release.
108 @param NumberOfChildren The number of handles in ChildHandleBuffer.
109 @param ChildHandleBuffer The array of child handle.
110
111 @retval EFI_SUCCESS The device was stopped.
112 @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
113 @retval Others Fail to uninstall protocols attached on the device.
114
115 **/
116 EFI_STATUS
117 EFIAPI
118 BiosBlockIoDriverBindingStop (
119 IN EFI_DRIVER_BINDING_PROTOCOL *This,
120 IN EFI_HANDLE Controller,
121 IN UINTN NumberOfChildren,
122 IN EFI_HANDLE *ChildHandleBuffer
123 );
124
125 //
126 // Other internal functions
127 //
128
129 /**
130 Build device path for EDD 3.0.
131
132 @param BaseDevicePath Base device path.
133 @param Drive Legacy drive.
134 @param DevicePath Device path for output.
135
136 @retval EFI_SUCCESS The device path is built successfully.
137 @retval EFI_UNSUPPORTED It is failed to built device path.
138
139 **/
140 EFI_STATUS
141 BuildEdd30DevicePath (
142 IN EFI_DEVICE_PATH_PROTOCOL *BaseDevicePath,
143 IN BIOS_LEGACY_DRIVE *Drive,
144 IN EFI_DEVICE_PATH_PROTOCOL **DevicePath
145 );
146
147 /**
148 Initialize block I/O device instance
149
150 @param Dev Instance of block I/O device instance
151
152 @retval TRUE Initialization succeeds.
153 @retval FALSE Initialization fails.
154
155 **/
156 BOOLEAN
157 BiosInitBlockIo (
158 IN BIOS_BLOCK_IO_DEV *Dev
159 );
160
161 /**
162 Read BufferSize bytes from Lba into Buffer.
163
164 @param This Indicates a pointer to the calling context.
165 @param MediaId Id of the media, changes every time the media is replaced.
166 @param Lba The starting Logical Block Address to read from
167 @param BufferSize Size of Buffer, must be a multiple of device block size.
168 @param Buffer A pointer to the destination buffer for the data. The caller is
169 responsible for either having implicit or explicit ownership of the buffer.
170
171 @retval EFI_SUCCESS The data was read correctly from the device.
172 @retval EFI_DEVICE_ERROR The device reported an error while performing the read.
173 @retval EFI_NO_MEDIA There is no media in the device.
174 @retval EFI_MEDIA_CHANGED The MediaId does not matched the current device.
175 @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.
176 @retval EFI_INVALID_PARAMETER The read request contains LBAs that are not valid,
177 or the buffer is not on proper alignment.
178
179 **/
180 EFI_STATUS
181 EFIAPI
182 Edd30BiosReadBlocks (
183 IN EFI_BLOCK_IO_PROTOCOL *This,
184 IN UINT32 MediaId,
185 IN EFI_LBA Lba,
186 IN UINTN BufferSize,
187 OUT VOID *Buffer
188 );
189
190 /**
191 Write BufferSize bytes from Lba into Buffer.
192
193 @param This Indicates a pointer to the calling context.
194 @param MediaId The media ID that the write request is for.
195 @param Lba The starting logical block address to be written. The caller is
196 responsible for writing to only legitimate locations.
197 @param BufferSize Size of Buffer, must be a multiple of device block size.
198 @param Buffer A pointer to the source buffer for the data.
199
200 @retval EFI_SUCCESS The data was written correctly to the device.
201 @retval EFI_WRITE_PROTECTED The device can not be written to.
202 @retval EFI_DEVICE_ERROR The device reported an error while performing the write.
203 @retval EFI_NO_MEDIA There is no media in the device.
204 @retval EFI_MEDIA_CHNAGED The MediaId does not matched the current device.
205 @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.
206 @retval EFI_INVALID_PARAMETER The write request contains LBAs that are not valid,
207 or the buffer is not on proper alignment.
208
209 **/
210 EFI_STATUS
211 EFIAPI
212 Edd30BiosWriteBlocks (
213 IN EFI_BLOCK_IO_PROTOCOL *This,
214 IN UINT32 MediaId,
215 IN EFI_LBA Lba,
216 IN UINTN BufferSize,
217 OUT VOID *Buffer
218 );
219
220 /**
221 Flush the Block Device.
222
223 @param This Indicates a pointer to the calling context.
224
225 @retval EFI_SUCCESS All outstanding data was written to the device
226 @retval EFI_DEVICE_ERROR The device reported an error while writting back the data
227 @retval EFI_NO_MEDIA There is no media in the device.
228
229 **/
230 EFI_STATUS
231 EFIAPI
232 BiosBlockIoFlushBlocks (
233 IN EFI_BLOCK_IO_PROTOCOL *This
234 );
235
236 /**
237 Reset the Block Device.
238
239 @param This Indicates a pointer to the calling context.
240 @param ExtendedVerification Driver may perform diagnostics on reset.
241
242 @retval EFI_SUCCESS The device was reset.
243 @retval EFI_DEVICE_ERROR The device is not functioning properly and could
244 not be reset.
245
246 **/
247 EFI_STATUS
248 EFIAPI
249 BiosBlockIoReset (
250 IN EFI_BLOCK_IO_PROTOCOL *This,
251 IN BOOLEAN ExtendedVerification
252 );
253
254 /**
255 Read BufferSize bytes from Lba into Buffer.
256
257 @param This Indicates a pointer to the calling context.
258 @param MediaId Id of the media, changes every time the media is replaced.
259 @param Lba The starting Logical Block Address to read from
260 @param BufferSize Size of Buffer, must be a multiple of device block size.
261 @param Buffer A pointer to the destination buffer for the data. The caller is
262 responsible for either having implicit or explicit ownership of the buffer.
263
264 @retval EFI_SUCCESS The data was read correctly from the device.
265 @retval EFI_DEVICE_ERROR The device reported an error while performing the read.
266 @retval EFI_NO_MEDIA There is no media in the device.
267 @retval EFI_MEDIA_CHANGED The MediaId does not matched the current device.
268 @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.
269 @retval EFI_INVALID_PARAMETER The read request contains LBAs that are not valid,
270 or the buffer is not on proper alignment.
271
272 **/
273 EFI_STATUS
274 EFIAPI
275 Edd11BiosReadBlocks (
276 IN EFI_BLOCK_IO_PROTOCOL *This,
277 IN UINT32 MediaId,
278 IN EFI_LBA Lba,
279 IN UINTN BufferSize,
280 OUT VOID *Buffer
281 );
282
283 /**
284 Write BufferSize bytes from Lba into Buffer.
285
286 @param This Indicates a pointer to the calling context.
287 @param MediaId The media ID that the write request is for.
288 @param Lba The starting logical block address to be written. The caller is
289 responsible for writing to only legitimate locations.
290 @param BufferSize Size of Buffer, must be a multiple of device block size.
291 @param Buffer A pointer to the source buffer for the data.
292
293 @retval EFI_SUCCESS The data was written correctly to the device.
294 @retval EFI_WRITE_PROTECTED The device can not be written to.
295 @retval EFI_DEVICE_ERROR The device reported an error while performing the write.
296 @retval EFI_NO_MEDIA There is no media in the device.
297 @retval EFI_MEDIA_CHNAGED The MediaId does not matched the current device.
298 @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.
299 @retval EFI_INVALID_PARAMETER The write request contains LBAs that are not valid,
300 or the buffer is not on proper alignment.
301
302 **/
303 EFI_STATUS
304 EFIAPI
305 Edd11BiosWriteBlocks (
306 IN EFI_BLOCK_IO_PROTOCOL *This,
307 IN UINT32 MediaId,
308 IN EFI_LBA Lba,
309 IN UINTN BufferSize,
310 OUT VOID *Buffer
311 );
312
313 /**
314 Read BufferSize bytes from Lba into Buffer.
315
316 @param This Indicates a pointer to the calling context.
317 @param MediaId Id of the media, changes every time the media is replaced.
318 @param Lba The starting Logical Block Address to read from
319 @param BufferSize Size of Buffer, must be a multiple of device block size.
320 @param Buffer A pointer to the destination buffer for the data. The caller is
321 responsible for either having implicit or explicit ownership of the buffer.
322
323 @retval EFI_SUCCESS The data was read correctly from the device.
324 @retval EFI_DEVICE_ERROR The device reported an error while performing the read.
325 @retval EFI_NO_MEDIA There is no media in the device.
326 @retval EFI_MEDIA_CHANGED The MediaId does not matched the current device.
327 @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.
328 @retval EFI_INVALID_PARAMETER The read request contains LBAs that are not valid,
329 or the buffer is not on proper alignment.
330
331 **/
332 EFI_STATUS
333 EFIAPI
334 BiosReadLegacyDrive (
335 IN EFI_BLOCK_IO_PROTOCOL *This,
336 IN UINT32 MediaId,
337 IN EFI_LBA Lba,
338 IN UINTN BufferSize,
339 OUT VOID *Buffer
340 );
341
342 /**
343 Write BufferSize bytes from Lba into Buffer.
344
345 @param This Indicates a pointer to the calling context.
346 @param MediaId The media ID that the write request is for.
347 @param Lba The starting logical block address to be written. The caller is
348 responsible for writing to only legitimate locations.
349 @param BufferSize Size of Buffer, must be a multiple of device block size.
350 @param Buffer A pointer to the source buffer for the data.
351
352 @retval EFI_SUCCESS The data was written correctly to the device.
353 @retval EFI_WRITE_PROTECTED The device can not be written to.
354 @retval EFI_DEVICE_ERROR The device reported an error while performing the write.
355 @retval EFI_NO_MEDIA There is no media in the device.
356 @retval EFI_MEDIA_CHNAGED The MediaId does not matched the current device.
357 @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.
358 @retval EFI_INVALID_PARAMETER The write request contains LBAs that are not valid,
359 or the buffer is not on proper alignment.
360
361 **/
362 EFI_STATUS
363 EFIAPI
364 BiosWriteLegacyDrive (
365 IN EFI_BLOCK_IO_PROTOCOL *This,
366 IN UINT32 MediaId,
367 IN EFI_LBA Lba,
368 IN UINTN BufferSize,
369 OUT VOID *Buffer
370 );
371
372 /**
373 Gets parameters of block I/O device.
374
375 @param BiosBlockIoDev Instance of block I/O device.
376 @param Drive Legacy drive.
377
378 @return Result of device parameter retrieval.
379
380 **/
381 UINTN
382 Int13GetDeviceParameters (
383 IN BIOS_BLOCK_IO_DEV *BiosBlockIoDev,
384 IN BIOS_LEGACY_DRIVE *Drive
385 );
386
387 /**
388 Extension of INT13 call.
389
390 @param BiosBlockIoDev Instance of block I/O device.
391 @param Drive Legacy drive.
392
393 @return Result of this extension.
394
395 **/
396 UINTN
397 Int13Extensions (
398 IN BIOS_BLOCK_IO_DEV *BiosBlockIoDev,
399 IN BIOS_LEGACY_DRIVE *Drive
400 );
401
402 /**
403 Gets parameters of legacy drive.
404
405 @param BiosBlockIoDev Instance of block I/O device.
406 @param Drive Legacy drive.
407
408 @return Result of drive parameter retrieval.
409
410 **/
411 UINTN
412 GetDriveParameters (
413 IN BIOS_BLOCK_IO_DEV *BiosBlockIoDev,
414 IN BIOS_LEGACY_DRIVE *Drive
415 );
416
417 /**
418 Build device path for device.
419
420 @param BaseDevicePath Base device path.
421 @param Drive Legacy drive.
422 @param DevicePath Device path for output.
423
424 **/
425 VOID
426 SetBiosInitBlockIoDevicePath (
427 IN EFI_DEVICE_PATH_PROTOCOL *BaseDevicePath,
428 IN BIOS_LEGACY_DRIVE *Drive,
429 OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
430 );
431
432 #endif