]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskImpl.h
MdeModulePkg RamDiskDxe: Do not save 'Size' numeric value by varstore
[mirror_edk2.git] / MdeModulePkg / Universal / Disk / RamDiskDxe / RamDiskImpl.h
1 /** @file
2 The header file of RamDiskDxe driver.
3
4 Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
5 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 _RAM_DISK_IMPL_H_
16 #define _RAM_DISK_IMPL_H_
17
18 #include <Uefi.h>
19 #include <Library/BaseLib.h>
20 #include <Library/BaseMemoryLib.h>
21 #include <Library/DebugLib.h>
22 #include <Library/UefiLib.h>
23 #include <Library/UefiDriverEntryPoint.h>
24 #include <Library/UefiBootServicesTableLib.h>
25 #include <Library/UefiHiiServicesLib.h>
26 #include <Library/MemoryAllocationLib.h>
27 #include <Library/HiiLib.h>
28 #include <Library/FileExplorerLib.h>
29 #include <Library/DevicePathLib.h>
30 #include <Library/PrintLib.h>
31 #include <Library/PcdLib.h>
32 #include <Library/DxeServicesLib.h>
33 #include <Protocol/RamDisk.h>
34 #include <Protocol/BlockIo.h>
35 #include <Protocol/BlockIo2.h>
36 #include <Protocol/HiiConfigAccess.h>
37 #include <Protocol/SimpleFileSystem.h>
38 #include <Protocol/AcpiTable.h>
39 #include <Protocol/AcpiSystemDescriptionTable.h>
40 #include <Guid/MdeModuleHii.h>
41 #include <Guid/RamDiskHii.h>
42 #include <Guid/FileInfo.h>
43 #include <IndustryStandard/Acpi61.h>
44
45 #include "RamDiskNVData.h"
46
47 ///
48 /// RAM disk general definitions and declarations
49 ///
50
51 //
52 // Block size for RAM disk
53 //
54 #define RAM_DISK_BLOCK_SIZE 512
55
56 //
57 // Iterate through the doule linked list. NOT delete safe
58 //
59 #define EFI_LIST_FOR_EACH(Entry, ListHead) \
60 for(Entry = (ListHead)->ForwardLink; Entry != (ListHead); Entry = Entry->ForwardLink)
61
62 //
63 // Iterate through the doule linked list. This is delete-safe.
64 // Do not touch NextEntry
65 //
66 #define EFI_LIST_FOR_EACH_SAFE(Entry, NextEntry, ListHead) \
67 for(Entry = (ListHead)->ForwardLink, NextEntry = Entry->ForwardLink;\
68 Entry != (ListHead); Entry = NextEntry, NextEntry = Entry->ForwardLink)
69
70 //
71 // RamDiskDxe driver maintains a list of registered RAM disks.
72 //
73 extern LIST_ENTRY RegisteredRamDisks;
74
75 //
76 // Pointers to the EFI_ACPI_TABLE_PROTOCOL and EFI_ACPI_SDT_PROTOCOL.
77 //
78 extern EFI_ACPI_TABLE_PROTOCOL *mAcpiTableProtocol;
79 extern EFI_ACPI_SDT_PROTOCOL *mAcpiSdtProtocol;
80
81 //
82 // RAM Disk create method.
83 //
84 typedef enum _RAM_DISK_CREATE_METHOD {
85 RamDiskCreateOthers = 0,
86 RamDiskCreateHii
87 } RAM_DISK_CREATE_METHOD;
88
89 //
90 // RamDiskDxe driver maintains a list of registered RAM disks.
91 // The struct contains the list entry and the information of each RAM
92 // disk
93 //
94 typedef struct {
95 UINTN Signature;
96
97 EFI_HANDLE Handle;
98
99 EFI_BLOCK_IO_PROTOCOL BlockIo;
100 EFI_BLOCK_IO2_PROTOCOL BlockIo2;
101 EFI_BLOCK_IO_MEDIA Media;
102 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
103
104 UINT64 StartingAddr;
105 UINT64 Size;
106 EFI_GUID TypeGuid;
107 UINT16 InstanceNumber;
108 RAM_DISK_CREATE_METHOD CreateMethod;
109 BOOLEAN InNfit;
110 EFI_QUESTION_ID CheckBoxId;
111 BOOLEAN CheckBoxChecked;
112
113 LIST_ENTRY ThisInstance;
114 } RAM_DISK_PRIVATE_DATA;
115
116 #define RAM_DISK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('R', 'D', 'S', 'K')
117 #define RAM_DISK_PRIVATE_FROM_BLKIO(a) CR (a, RAM_DISK_PRIVATE_DATA, BlockIo, RAM_DISK_PRIVATE_DATA_SIGNATURE)
118 #define RAM_DISK_PRIVATE_FROM_BLKIO2(a) CR (a, RAM_DISK_PRIVATE_DATA, BlockIo2, RAM_DISK_PRIVATE_DATA_SIGNATURE)
119 #define RAM_DISK_PRIVATE_FROM_THIS(a) CR (a, RAM_DISK_PRIVATE_DATA, ThisInstance, RAM_DISK_PRIVATE_DATA_SIGNATURE)
120
121 ///
122 /// RAM disk HII-related definitions and declarations
123 ///
124
125 //
126 // Tool generated IFR binary data and String package data
127 //
128 extern UINT8 RamDiskHiiBin[];
129 extern UINT8 RamDiskDxeStrings[];
130
131 typedef struct {
132 VENDOR_DEVICE_PATH VendorDevicePath;
133 EFI_DEVICE_PATH_PROTOCOL End;
134 } HII_VENDOR_DEVICE_PATH;
135
136 typedef struct {
137 UINTN Signature;
138
139 RAM_DISK_CONFIGURATION ConfigStore;
140
141 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
142 EFI_HANDLE DriverHandle;
143 EFI_HII_HANDLE HiiHandle;
144 } RAM_DISK_CONFIG_PRIVATE_DATA;
145
146 extern RAM_DISK_CONFIG_PRIVATE_DATA mRamDiskConfigPrivateDataTemplate;
147
148 #define RAM_DISK_CONFIG_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('R', 'C', 'F', 'G')
149 #define RAM_DISK_CONFIG_PRIVATE_FROM_THIS(a) CR (a, RAM_DISK_CONFIG_PRIVATE_DATA, ConfigAccess, RAM_DISK_CONFIG_PRIVATE_DATA_SIGNATURE)
150
151 /**
152 Register a RAM disk with specified address, size and type.
153
154 @param[in] RamDiskBase The base address of registered RAM disk.
155 @param[in] RamDiskSize The size of registered RAM disk.
156 @param[in] RamDiskType The type of registered RAM disk. The GUID can be
157 any of the values defined in section 9.3.6.9, or a
158 vendor defined GUID.
159 @param[in] ParentDevicePath
160 Pointer to the parent device path. If there is no
161 parent device path then ParentDevicePath is NULL.
162 @param[out] DevicePath On return, points to a pointer to the device path
163 of the RAM disk device.
164 If ParentDevicePath is not NULL, the returned
165 DevicePath is created by appending a RAM disk node
166 to the parent device path. If ParentDevicePath is
167 NULL, the returned DevicePath is a RAM disk device
168 path without appending. This function is
169 responsible for allocating the buffer DevicePath
170 with the boot service AllocatePool().
171
172 @retval EFI_SUCCESS The RAM disk is registered successfully.
173 @retval EFI_INVALID_PARAMETER DevicePath or RamDiskType is NULL.
174 RamDiskSize is 0.
175 @retval EFI_ALREADY_STARTED A Device Path Protocol instance to be created
176 is already present in the handle database.
177 @retval EFI_OUT_OF_RESOURCES The RAM disk register operation fails due to
178 resource limitation.
179
180 **/
181 EFI_STATUS
182 EFIAPI
183 RamDiskRegister (
184 IN UINT64 RamDiskBase,
185 IN UINT64 RamDiskSize,
186 IN EFI_GUID *RamDiskType,
187 IN EFI_DEVICE_PATH *ParentDevicePath OPTIONAL,
188 OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
189 );
190
191 /**
192 Unregister a RAM disk specified by DevicePath.
193
194 @param[in] DevicePath A pointer to the device path that describes a RAM
195 Disk device.
196
197 @retval EFI_SUCCESS The RAM disk is unregistered successfully.
198 @retval EFI_INVALID_PARAMETER DevicePath is NULL.
199 @retval EFI_UNSUPPORTED The device specified by DevicePath is not a
200 valid ramdisk device path and not supported
201 by the driver.
202 @retval EFI_NOT_FOUND The RAM disk pointed by DevicePath doesn't
203 exist.
204
205 **/
206 EFI_STATUS
207 EFIAPI
208 RamDiskUnregister (
209 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
210 );
211
212 /**
213 Initialize the BlockIO protocol of a RAM disk device.
214
215 @param[in] PrivateData Points to RAM disk private data.
216
217 **/
218 VOID
219 RamDiskInitBlockIo (
220 IN RAM_DISK_PRIVATE_DATA *PrivateData
221 );
222
223 /**
224 Reset the Block Device.
225
226 @param[in] This Indicates a pointer to the calling context.
227 @param[in] ExtendedVerification
228 Driver may perform diagnostics on reset.
229
230 @retval EFI_SUCCESS The device was reset.
231 @retval EFI_DEVICE_ERROR The device is not functioning properly and
232 could not be reset.
233
234 **/
235 EFI_STATUS
236 EFIAPI
237 RamDiskBlkIoReset (
238 IN EFI_BLOCK_IO_PROTOCOL *This,
239 IN BOOLEAN ExtendedVerification
240 );
241
242 /**
243 Read BufferSize bytes from Lba into Buffer.
244
245 @param[in] This Indicates a pointer to the calling context.
246 @param[in] MediaId Id of the media, changes every time the media is
247 replaced.
248 @param[in] Lba The starting Logical Block Address to read from.
249 @param[in] BufferSize Size of Buffer, must be a multiple of device block
250 size.
251 @param[out] Buffer A pointer to the destination buffer for the data.
252 The caller is responsible for either having
253 implicit or explicit ownership of the buffer.
254
255 @retval EFI_SUCCESS The data was read correctly from the device.
256 @retval EFI_DEVICE_ERROR The device reported an error while performing
257 the read.
258 @retval EFI_NO_MEDIA There is no media in the device.
259 @retval EFI_MEDIA_CHANGED The MediaId does not matched the current
260 device.
261 @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block
262 size of the device.
263 @retval EFI_INVALID_PARAMETER The read request contains LBAs that are not
264 valid, or the buffer is not on proper alignment.
265
266 **/
267 EFI_STATUS
268 EFIAPI
269 RamDiskBlkIoReadBlocks (
270 IN EFI_BLOCK_IO_PROTOCOL *This,
271 IN UINT32 MediaId,
272 IN EFI_LBA Lba,
273 IN UINTN BufferSize,
274 OUT VOID *Buffer
275 );
276
277 /**
278 Write BufferSize bytes from Lba into Buffer.
279
280 @param[in] This Indicates a pointer to the calling context.
281 @param[in] MediaId The media ID that the write request is for.
282 @param[in] Lba The starting logical block address to be written.
283 The caller is responsible for writing to only
284 legitimate locations.
285 @param[in] BufferSize Size of Buffer, must be a multiple of device block
286 size.
287 @param[in] Buffer A pointer to the source buffer for the data.
288
289 @retval EFI_SUCCESS The data was written correctly to the device.
290 @retval EFI_WRITE_PROTECTED The device can not be written to.
291 @retval EFI_DEVICE_ERROR The device reported an error while performing
292 the write.
293 @retval EFI_NO_MEDIA There is no media in the device.
294 @retval EFI_MEDIA_CHNAGED The MediaId does not matched the current
295 device.
296 @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block
297 size of the device.
298 @retval EFI_INVALID_PARAMETER The write request contains LBAs that are not
299 valid, or the buffer is not on proper alignment.
300
301 **/
302 EFI_STATUS
303 EFIAPI
304 RamDiskBlkIoWriteBlocks (
305 IN EFI_BLOCK_IO_PROTOCOL *This,
306 IN UINT32 MediaId,
307 IN EFI_LBA Lba,
308 IN UINTN BufferSize,
309 IN VOID *Buffer
310 );
311
312 /**
313 Flush the Block Device.
314
315 @param[in] This Indicates a pointer to the calling context.
316
317 @retval EFI_SUCCESS All outstanding data was written to the device.
318 @retval EFI_DEVICE_ERROR The device reported an error while writting
319 back the data
320 @retval EFI_NO_MEDIA There is no media in the device.
321
322 **/
323 EFI_STATUS
324 EFIAPI
325 RamDiskBlkIoFlushBlocks (
326 IN EFI_BLOCK_IO_PROTOCOL *This
327 );
328
329 /**
330 Resets the block device hardware.
331
332 @param[in] This The pointer of EFI_BLOCK_IO2_PROTOCOL.
333 @param[in] ExtendedVerification The flag about if extend verificate.
334
335 @retval EFI_SUCCESS The device was reset.
336 @retval EFI_DEVICE_ERROR The block device is not functioning correctly
337 and could not be reset.
338
339 **/
340 EFI_STATUS
341 EFIAPI
342 RamDiskBlkIo2Reset (
343 IN EFI_BLOCK_IO2_PROTOCOL *This,
344 IN BOOLEAN ExtendedVerification
345 );
346
347 /**
348 Reads the requested number of blocks from the device.
349
350 @param[in] This Indicates a pointer to the calling context.
351 @param[in] MediaId The media ID that the read request is for.
352 @param[in] Lba The starting logical block address to read
353 from on the device.
354 @param[in, out] Token A pointer to the token associated with the
355 transaction.
356 @param[in] BufferSize The size of the Buffer in bytes. This must be
357 a multiple of the intrinsic block size of the
358 device.
359 @param[out] Buffer A pointer to the destination buffer for the
360 data. The caller is responsible for either
361 having implicit or explicit ownership of the
362 buffer.
363
364 @retval EFI_SUCCESS The read request was queued if Token->Event
365 is not NULL. The data was read correctly from
366 the device if the Token->Event is NULL.
367 @retval EFI_DEVICE_ERROR The device reported an error while attempting
368 to perform the read operation.
369 @retval EFI_NO_MEDIA There is no media in the device.
370 @retval EFI_MEDIA_CHANGED The MediaId is not for the current media.
371 @retval EFI_BAD_BUFFER_SIZE The BufferSize parameter is not a multiple of
372 the intrinsic block size of the device.
373 @retval EFI_INVALID_PARAMETER The read request contains LBAs that are not
374 valid, or the buffer is not on proper
375 alignment.
376 @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
377 lack of resources.
378
379 **/
380 EFI_STATUS
381 EFIAPI
382 RamDiskBlkIo2ReadBlocksEx (
383 IN EFI_BLOCK_IO2_PROTOCOL *This,
384 IN UINT32 MediaId,
385 IN EFI_LBA Lba,
386 IN OUT EFI_BLOCK_IO2_TOKEN *Token,
387 IN UINTN BufferSize,
388 OUT VOID *Buffer
389 );
390
391 /**
392 Writes a specified number of blocks to the device.
393
394 @param[in] This Indicates a pointer to the calling context.
395 @param[in] MediaId The media ID that the write request is for.
396 @param[in] Lba The starting logical block address to be
397 written. The caller is responsible for
398 writing to only legitimate locations.
399 @param[in, out] Token A pointer to the token associated with the
400 transaction.
401 @param[in] BufferSize The size in bytes of Buffer. This must be a
402 multiple of the intrinsic block size of the
403 device.
404 @param[in] Buffer A pointer to the source buffer for the data.
405
406 @retval EFI_SUCCESS The write request was queued if Event is not
407 NULL. The data was written correctly to the
408 device if the Event is NULL.
409 @retval EFI_WRITE_PROTECTED The device cannot be written to.
410 @retval EFI_NO_MEDIA There is no media in the device.
411 @retval EFI_MEDIA_CHANGED The MediaId is not for the current media.
412 @retval EFI_DEVICE_ERROR The device reported an error while attempting
413 to perform the write operation.
414 @retval EFI_BAD_BUFFER_SIZE The BufferSize parameter is not a multiple of
415 the intrinsic block size of the device.
416 @retval EFI_INVALID_PARAMETER The write request contains LBAs that are not
417 valid, or the buffer is not on proper
418 alignment.
419 @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
420 lack of resources.
421
422 **/
423 EFI_STATUS
424 EFIAPI
425 RamDiskBlkIo2WriteBlocksEx (
426 IN EFI_BLOCK_IO2_PROTOCOL *This,
427 IN UINT32 MediaId,
428 IN EFI_LBA Lba,
429 IN OUT EFI_BLOCK_IO2_TOKEN *Token,
430 IN UINTN BufferSize,
431 IN VOID *Buffer
432 );
433
434 /**
435 Flushes all modified data to a physical block device.
436
437 @param[in] This Indicates a pointer to the calling context.
438 @param[in, out] Token A pointer to the token associated with the
439 transaction.
440
441 @retval EFI_SUCCESS The flush request was queued if Event is not
442 NULL. All outstanding data was written
443 correctly to the device if the Event is NULL.
444 @retval EFI_DEVICE_ERROR The device reported an error while attempting
445 to write data.
446 @retval EFI_WRITE_PROTECTED The device cannot be written to.
447 @retval EFI_NO_MEDIA There is no media in the device.
448 @retval EFI_MEDIA_CHANGED The MediaId is not for the current media.
449 @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
450 lack of resources.
451
452 **/
453 EFI_STATUS
454 EFIAPI
455 RamDiskBlkIo2FlushBlocksEx (
456 IN EFI_BLOCK_IO2_PROTOCOL *This,
457 IN OUT EFI_BLOCK_IO2_TOKEN *Token
458 );
459
460 /**
461 This function publish the RAM disk configuration Form.
462
463 @param[in, out] ConfigPrivateData
464 Points to RAM disk configuration private data.
465
466 @retval EFI_SUCCESS HII Form is installed successfully.
467 @retval EFI_OUT_OF_RESOURCES Not enough resource for HII Form installation.
468 @retval Others Other errors as indicated.
469
470 **/
471 EFI_STATUS
472 InstallRamDiskConfigForm (
473 IN OUT RAM_DISK_CONFIG_PRIVATE_DATA *ConfigPrivateData
474 );
475
476 /**
477 This function removes RAM disk configuration Form.
478
479 @param[in, out] ConfigPrivateData
480 Points to RAM disk configuration private data.
481
482 **/
483 VOID
484 UninstallRamDiskConfigForm (
485 IN OUT RAM_DISK_CONFIG_PRIVATE_DATA *ConfigPrivateData
486 );
487
488 /**
489 Unregister all registered RAM disks.
490
491 **/
492 VOID
493 UnregisterAllRamDisks (
494 VOID
495 );
496
497 /**
498 This function allows a caller to extract the current configuration for one
499 or more named elements from the target driver.
500
501 @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
502 @param[in] Request A null-terminated Unicode string in
503 <ConfigRequest> format.
504 @param[out] Progress On return, points to a character in the Request
505 string. Points to the string's null terminator if
506 request was successful. Points to the most recent
507 '&' before the first failing name/value pair (or
508 the beginning of the string if the failure is in
509 the first name/value pair) if the request was not
510 successful.
511 @param[out] Results A null-terminated Unicode string in
512 <ConfigAltResp> format which has all values filled
513 in for the names in the Request string. String to
514 be allocated by the called function.
515
516 @retval EFI_SUCCESS The Results is filled with the requested
517 values.
518 @retval EFI_OUT_OF_RESOURCES Not enough memory to store the results.
519 @retval EFI_INVALID_PARAMETER Request is illegal syntax, or unknown name.
520 @retval EFI_NOT_FOUND Routing data doesn't match any storage in
521 this driver.
522
523 **/
524 EFI_STATUS
525 EFIAPI
526 RamDiskExtractConfig (
527 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
528 IN CONST EFI_STRING Request,
529 OUT EFI_STRING *Progress,
530 OUT EFI_STRING *Results
531 );
532
533 /**
534 This function processes the results of changes in configuration.
535
536 @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
537 @param[in] Configuration A null-terminated Unicode string in <ConfigResp>
538 format.
539 @param[out] Progress A pointer to a string filled in with the offset of
540 the most recent '&' before the first failing
541 name/value pair (or the beginning of the string if
542 the failure is in the first name/value pair) or
543 the terminating NULL if all was successful.
544
545 @retval EFI_SUCCESS The Results is processed successfully.
546 @retval EFI_INVALID_PARAMETER Configuration is NULL.
547 @retval EFI_NOT_FOUND Routing data doesn't match any storage in
548 this driver.
549
550 **/
551 EFI_STATUS
552 EFIAPI
553 RamDiskRouteConfig (
554 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
555 IN CONST EFI_STRING Configuration,
556 OUT EFI_STRING *Progress
557 );
558
559 /**
560 This function processes the results of changes in configuration.
561
562 @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
563 @param[in] Action Specifies the type of action taken by the browser.
564 @param[in] QuestionId A unique value which is sent to the original
565 exporting driver so that it can identify the type
566 of data to expect.
567 @param[in] Type The type of value for the question.
568 @param[in] Value A pointer to the data being sent to the original
569 exporting driver.
570 @param[out] ActionRequest On return, points to the action requested by the
571 callback function.
572
573 @retval EFI_SUCCESS The callback successfully handled the action.
574 @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the
575 variable and its data.
576 @retval EFI_DEVICE_ERROR The variable could not be saved.
577 @retval EFI_UNSUPPORTED The specified Action is not supported by the
578 callback.
579
580 **/
581 EFI_STATUS
582 EFIAPI
583 RamDiskCallback (
584 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
585 IN EFI_BROWSER_ACTION Action,
586 IN EFI_QUESTION_ID QuestionId,
587 IN UINT8 Type,
588 IN EFI_IFR_TYPE_VALUE *Value,
589 OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
590 );
591
592
593 /**
594 This function gets the file information from an open file descriptor,
595 and stores it in a buffer allocated from pool.
596
597 @param[in] FHand File Handle.
598
599 @return A pointer to a buffer with file information or NULL is returned.
600
601 **/
602 EFI_FILE_INFO *
603 FileInfo (
604 IN EFI_FILE_HANDLE FHand
605 );
606
607
608 /**
609 This function will open a file or directory referenced by DevicePath.
610
611 This function opens a file with the open mode according to the file path. The
612 Attributes is valid only for EFI_FILE_MODE_CREATE.
613
614 @param[in, out] FilePath On input, the device path to the file.
615 On output, the remaining device path.
616 @param[out] FileHandle Pointer to the file handle.
617 @param[in] OpenMode The mode to open the file with.
618 @param[in] Attributes The file's file attributes.
619
620 @retval EFI_SUCCESS The information was set.
621 @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value.
622 @retval EFI_UNSUPPORTED Could not open the file path.
623 @retval EFI_NOT_FOUND The specified file could not be found on the
624 device or the file system could not be found
625 on the device.
626 @retval EFI_NO_MEDIA The device has no medium.
627 @retval EFI_MEDIA_CHANGED The device has a different medium in it or
628 the medium is no longer supported.
629 @retval EFI_DEVICE_ERROR The device reported an error.
630 @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
631 @retval EFI_WRITE_PROTECTED The file or medium is write protected.
632 @retval EFI_ACCESS_DENIED The file was opened read only.
633 @retval EFI_OUT_OF_RESOURCES Not enough resources were available to open
634 the file.
635 @retval EFI_VOLUME_FULL The volume is full.
636 **/
637 EFI_STATUS
638 EFIAPI
639 OpenFileByDevicePath(
640 IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath,
641 OUT EFI_FILE_HANDLE *FileHandle,
642 IN UINT64 OpenMode,
643 IN UINT64 Attributes
644 );
645
646
647 /**
648 Publish the RAM disk NVDIMM Firmware Interface Table (NFIT) to the ACPI
649 table.
650
651 @param[in] PrivateData Points to RAM disk private data.
652
653 @retval EFI_SUCCESS The RAM disk NFIT has been published.
654 @retval others The RAM disk NFIT has not been published.
655
656 **/
657 EFI_STATUS
658 RamDiskPublishNfit (
659 IN RAM_DISK_PRIVATE_DATA *PrivateData
660 );
661
662 #endif