TianoCore EDK2 master
|
#include <Uefi.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/UefiLib.h>
#include <Library/UefiDriverEntryPoint.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiHiiServicesLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/HiiLib.h>
#include <Library/FileExplorerLib.h>
#include <Library/DevicePathLib.h>
#include <Library/PrintLib.h>
#include <Library/PcdLib.h>
#include <Library/DxeServicesLib.h>
#include <Protocol/RamDisk.h>
#include <Protocol/BlockIo.h>
#include <Protocol/BlockIo2.h>
#include <Protocol/HiiConfigAccess.h>
#include <Protocol/SimpleFileSystem.h>
#include <Protocol/AcpiTable.h>
#include <Protocol/AcpiSystemDescriptionTable.h>
#include <Guid/MdeModuleHii.h>
#include <Guid/RamDiskHii.h>
#include <Guid/FileInfo.h>
#include <IndustryStandard/Acpi61.h>
#include "RamDiskNVData.h"
Go to the source code of this file.
Data Structures | |
struct | RAM_DISK_PRIVATE_DATA |
struct | HII_VENDOR_DEVICE_PATH |
struct | RAM_DISK_CONFIG_PRIVATE_DATA |
Macros | |
#define | RAM_DISK_DEFAULT_BLOCK_SIZE 512 |
#define | RAM_DISK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('R', 'D', 'S', 'K') |
#define | RAM_DISK_PRIVATE_FROM_BLKIO(a) CR (a, RAM_DISK_PRIVATE_DATA, BlockIo, RAM_DISK_PRIVATE_DATA_SIGNATURE) |
#define | RAM_DISK_PRIVATE_FROM_BLKIO2(a) CR (a, RAM_DISK_PRIVATE_DATA, BlockIo2, RAM_DISK_PRIVATE_DATA_SIGNATURE) |
#define | RAM_DISK_PRIVATE_FROM_THIS(a) CR (a, RAM_DISK_PRIVATE_DATA, ThisInstance, RAM_DISK_PRIVATE_DATA_SIGNATURE) |
#define | RAM_DISK_CONFIG_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('R', 'C', 'F', 'G') |
#define | RAM_DISK_CONFIG_PRIVATE_FROM_THIS(a) CR (a, RAM_DISK_CONFIG_PRIVATE_DATA, ConfigAccess, RAM_DISK_CONFIG_PRIVATE_DATA_SIGNATURE) |
Typedefs | |
typedef enum _RAM_DISK_CREATE_METHOD | RAM_DISK_CREATE_METHOD |
Enumerations | |
enum | _RAM_DISK_CREATE_METHOD { RamDiskCreateOthers = 0 , RamDiskCreateHii } |
Variables | |
LIST_ENTRY | RegisteredRamDisks |
EFI_ACPI_TABLE_PROTOCOL * | mAcpiTableProtocol |
EFI_ACPI_SDT_PROTOCOL * | mAcpiSdtProtocol |
UINT8 | RamDiskHiiBin [] |
UINT8 | RamDiskDxeStrings [] |
RAM_DISK_CONFIG_PRIVATE_DATA | mRamDiskConfigPrivateDataTemplate |
The header file of RamDiskDxe driver.
Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.
Copyright (c) Microsoft Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent
Definition in file RamDiskImpl.h.
#define RAM_DISK_CONFIG_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('R', 'C', 'F', 'G') |
Definition at line 129 of file RamDiskImpl.h.
#define RAM_DISK_CONFIG_PRIVATE_FROM_THIS | ( | a | ) | CR (a, RAM_DISK_CONFIG_PRIVATE_DATA, ConfigAccess, RAM_DISK_CONFIG_PRIVATE_DATA_SIGNATURE) |
Definition at line 130 of file RamDiskImpl.h.
#define RAM_DISK_DEFAULT_BLOCK_SIZE 512 |
RAM disk general definitions and declarations
Definition at line 49 of file RamDiskImpl.h.
#define RAM_DISK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('R', 'D', 'S', 'K') |
Definition at line 97 of file RamDiskImpl.h.
#define RAM_DISK_PRIVATE_FROM_BLKIO | ( | a | ) | CR (a, RAM_DISK_PRIVATE_DATA, BlockIo, RAM_DISK_PRIVATE_DATA_SIGNATURE) |
Definition at line 98 of file RamDiskImpl.h.
#define RAM_DISK_PRIVATE_FROM_BLKIO2 | ( | a | ) | CR (a, RAM_DISK_PRIVATE_DATA, BlockIo2, RAM_DISK_PRIVATE_DATA_SIGNATURE) |
Definition at line 99 of file RamDiskImpl.h.
#define RAM_DISK_PRIVATE_FROM_THIS | ( | a | ) | CR (a, RAM_DISK_PRIVATE_DATA, ThisInstance, RAM_DISK_PRIVATE_DATA_SIGNATURE) |
Definition at line 100 of file RamDiskImpl.h.
enum _RAM_DISK_CREATE_METHOD |
Definition at line 65 of file RamDiskImpl.h.
EFI_FILE_INFO * FileInfo | ( | IN EFI_FILE_HANDLE | FHand | ) |
This function gets the file information from an open file descriptor, and stores it in a buffer allocated from pool.
[in] | FHand | File Handle. |
Definition at line 79 of file RamDiskFileExplorer.c.
EFI_STATUS InstallRamDiskConfigForm | ( | IN OUT RAM_DISK_CONFIG_PRIVATE_DATA * | ConfigPrivateData | ) |
This function publish the RAM disk configuration Form.
[in,out] | ConfigPrivateData | Points to RAM disk configuration private data. |
EFI_SUCCESS | HII Form is installed successfully. |
EFI_OUT_OF_RESOURCES | Not enough resource for HII Form installation. |
Others | Other errors as indicated. |
Definition at line 62 of file RamDiskImpl.c.
EFI_STATUS EFIAPI RamDiskBlkIo2FlushBlocksEx | ( | IN EFI_BLOCK_IO2_PROTOCOL * | This, |
IN OUT EFI_BLOCK_IO2_TOKEN * | Token | ||
) |
Flushes all modified data to a physical block device.
[in] | This | Indicates a pointer to the calling context. |
[in,out] | Token | A pointer to the token associated with the transaction. |
EFI_SUCCESS | The flush request was queued if Event is not NULL. All outstanding data was written correctly to the device if the Event is NULL. |
EFI_DEVICE_ERROR | The device reported an error while attempting to write data. |
EFI_WRITE_PROTECTED | The device cannot be written to. |
EFI_NO_MEDIA | There is no media in the device. |
EFI_MEDIA_CHANGED | The MediaId is not for the current media. |
EFI_OUT_OF_RESOURCES | The request could not be completed due to a lack of resources. |
Definition at line 458 of file RamDiskBlockIo.c.
EFI_STATUS EFIAPI RamDiskBlkIo2ReadBlocksEx | ( | IN EFI_BLOCK_IO2_PROTOCOL * | This, |
IN UINT32 | MediaId, | ||
IN EFI_LBA | Lba, | ||
IN OUT EFI_BLOCK_IO2_TOKEN * | Token, | ||
IN UINTN | BufferSize, | ||
OUT VOID * | Buffer | ||
) |
Reads the requested number of blocks from the device.
[in] | This | Indicates a pointer to the calling context. |
[in] | MediaId | The media ID that the read request is for. |
[in] | Lba | The starting logical block address to read from on the device. |
[in,out] | Token | A pointer to the token associated with the transaction. |
[in] | BufferSize | The size of the Buffer in bytes. This must be a multiple of the intrinsic block size of the device. |
[out] | Buffer | A pointer to the destination buffer for the data. The caller is responsible for either having implicit or explicit ownership of the buffer. |
EFI_SUCCESS | The read request was queued if Token->Event is not NULL. The data was read correctly from the device if the Token->Event is NULL. |
EFI_DEVICE_ERROR | The device reported an error while attempting to perform the read operation. |
EFI_NO_MEDIA | There is no media in the device. |
EFI_MEDIA_CHANGED | The MediaId is not for the current media. |
EFI_BAD_BUFFER_SIZE | The BufferSize parameter is not a multiple of the intrinsic block size of the device. |
EFI_INVALID_PARAMETER | The read request contains LBAs that are not valid, or the buffer is not on proper alignment. |
EFI_OUT_OF_RESOURCES | The request could not be completed due to a lack of resources. |
Definition at line 331 of file RamDiskBlockIo.c.
EFI_STATUS EFIAPI RamDiskBlkIo2Reset | ( | IN EFI_BLOCK_IO2_PROTOCOL * | This, |
IN BOOLEAN | ExtendedVerification | ||
) |
Resets the block device hardware.
[in] | This | The pointer of EFI_BLOCK_IO2_PROTOCOL. |
[in] | ExtendedVerification | The flag about if extend verificate. |
EFI_SUCCESS | The device was reset. |
EFI_DEVICE_ERROR | The block device is not functioning correctly and could not be reset. |
Definition at line 288 of file RamDiskBlockIo.c.
EFI_STATUS EFIAPI RamDiskBlkIo2WriteBlocksEx | ( | IN EFI_BLOCK_IO2_PROTOCOL * | This, |
IN UINT32 | MediaId, | ||
IN EFI_LBA | Lba, | ||
IN OUT EFI_BLOCK_IO2_TOKEN * | Token, | ||
IN UINTN | BufferSize, | ||
IN VOID * | Buffer | ||
) |
Writes a specified number of blocks to the device.
[in] | This | Indicates a pointer to the calling context. |
[in] | MediaId | The media ID that the write request is for. |
[in] | Lba | The starting logical block address to be written. The caller is responsible for writing to only legitimate locations. |
[in,out] | Token | A pointer to the token associated with the transaction. |
[in] | BufferSize | The size in bytes of Buffer. This must be a multiple of the intrinsic block size of the device. |
[in] | Buffer | A pointer to the source buffer for the data. |
EFI_SUCCESS | The write request was queued if Event is not NULL. The data was written correctly to the device if the Event is NULL. |
EFI_WRITE_PROTECTED | The device cannot be written to. |
EFI_NO_MEDIA | There is no media in the device. |
EFI_MEDIA_CHANGED | The MediaId is not for the current media. |
EFI_DEVICE_ERROR | The device reported an error while attempting to perform the write operation. |
EFI_BAD_BUFFER_SIZE | The BufferSize parameter is not a multiple of the intrinsic block size of the device. |
EFI_INVALID_PARAMETER | The write request contains LBAs that are not valid, or the buffer is not on proper alignment. |
EFI_OUT_OF_RESOURCES | The request could not be completed due to a lack of resources. |
Definition at line 401 of file RamDiskBlockIo.c.
EFI_STATUS EFIAPI RamDiskBlkIoFlushBlocks | ( | IN EFI_BLOCK_IO_PROTOCOL * | This | ) |
Flush the Block Device.
[in] | This | Indicates a pointer to the calling context. |
EFI_SUCCESS | All outstanding data was written to the device. |
EFI_DEVICE_ERROR | The device reported an error while writting back the data |
EFI_NO_MEDIA | There is no media in the device. |
Definition at line 268 of file RamDiskBlockIo.c.
EFI_STATUS EFIAPI RamDiskBlkIoReadBlocks | ( | IN EFI_BLOCK_IO_PROTOCOL * | This, |
IN UINT32 | MediaId, | ||
IN EFI_LBA | Lba, | ||
IN UINTN | BufferSize, | ||
OUT VOID * | Buffer | ||
) |
Read BufferSize bytes from Lba into Buffer.
[in] | This | Indicates a pointer to the calling context. |
[in] | MediaId | Id of the media, changes every time the media is replaced. |
[in] | Lba | The starting Logical Block Address to read from. |
[in] | BufferSize | Size of Buffer, must be a multiple of device block size. |
[out] | Buffer | A pointer to the destination buffer for the data. The caller is responsible for either having implicit or explicit ownership of the buffer. |
EFI_SUCCESS | The data was read correctly from the device. |
EFI_DEVICE_ERROR | The device reported an error while performing the read. |
EFI_NO_MEDIA | There is no media in the device. |
EFI_MEDIA_CHANGED | The MediaId does not matched the current device. |
EFI_BAD_BUFFER_SIZE | The Buffer was not a multiple of the block size of the device. |
EFI_INVALID_PARAMETER | The read request contains LBAs that are not valid, or the buffer is not on proper alignment. |
Definition at line 130 of file RamDiskBlockIo.c.
EFI_STATUS EFIAPI RamDiskBlkIoReset | ( | IN EFI_BLOCK_IO_PROTOCOL * | This, |
IN BOOLEAN | ExtendedVerification | ||
) |
Reset the Block Device.
[in] | This | Indicates a pointer to the calling context. |
[in] | ExtendedVerification | Driver may perform diagnostics on reset. |
EFI_SUCCESS | The device was reset. |
EFI_DEVICE_ERROR | The device is not functioning properly and could not be reset. |
Reset the Block Device.
This | Indicates a pointer to the calling context. |
ExtendedVerification | Driver may perform diagnostics on reset. |
EFI_SUCCESS | The device was reset. |
EFI_DEVICE_ERROR | The device is not functioning properly and could not be reset. |
Definition at line 95 of file RamDiskBlockIo.c.
EFI_STATUS EFIAPI RamDiskBlkIoWriteBlocks | ( | IN EFI_BLOCK_IO_PROTOCOL * | This, |
IN UINT32 | MediaId, | ||
IN EFI_LBA | Lba, | ||
IN UINTN | BufferSize, | ||
IN VOID * | Buffer | ||
) |
Write BufferSize bytes from Lba into Buffer.
[in] | This | Indicates a pointer to the calling context. |
[in] | MediaId | The media ID that the write request is for. |
[in] | Lba | The starting logical block address to be written. The caller is responsible for writing to only legitimate locations. |
[in] | BufferSize | Size of Buffer, must be a multiple of device block size. |
[in] | Buffer | A pointer to the source buffer for the data. |
EFI_SUCCESS | The data was written correctly to the device. |
EFI_WRITE_PROTECTED | The device can not be written to. |
EFI_DEVICE_ERROR | The device reported an error while performing the write. |
EFI_NO_MEDIA | There is no media in the device. |
EFI_MEDIA_CHNAGED | The MediaId does not matched the current device. |
EFI_BAD_BUFFER_SIZE | The Buffer was not a multiple of the block size of the device. |
EFI_INVALID_PARAMETER | The write request contains LBAs that are not valid, or the buffer is not on proper alignment. |
Definition at line 204 of file RamDiskBlockIo.c.
EFI_STATUS EFIAPI RamDiskCallback | ( | IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL * | This, |
IN EFI_BROWSER_ACTION | Action, | ||
IN EFI_QUESTION_ID | QuestionId, | ||
IN UINT8 | Type, | ||
IN EFI_IFR_TYPE_VALUE * | Value, | ||
OUT EFI_BROWSER_ACTION_REQUEST * | ActionRequest | ||
) |
This function processes the results of changes in configuration.
[in] | This | Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL. |
[in] | Action | Specifies the type of action taken by the browser. |
[in] | QuestionId | A unique value which is sent to the original exporting driver so that it can identify the type of data to expect. |
[in] | Type | The type of value for the question. |
[in] | Value | A pointer to the data being sent to the original exporting driver. |
[out] | ActionRequest | On return, points to the action requested by the callback function. |
EFI_SUCCESS | The callback successfully handled the action. |
EFI_OUT_OF_RESOURCES | Not enough storage is available to hold the variable and its data. |
EFI_DEVICE_ERROR | The variable could not be saved. |
EFI_UNSUPPORTED | The specified Action is not supported by the callback. |
Definition at line 583 of file RamDiskImpl.c.
EFI_STATUS EFIAPI RamDiskExtractConfig | ( | IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL * | This, |
IN CONST EFI_STRING | Request, | ||
OUT EFI_STRING * | Progress, | ||
OUT EFI_STRING * | Results | ||
) |
This function allows a caller to extract the current configuration for one or more named elements from the target driver.
[in] | This | Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL. |
[in] | Request | A null-terminated Unicode string in <ConfigRequest> format. |
[out] | Progress | On return, points to a character in the Request string. Points to the string's null terminator if request was successful. Points to the most recent '&' before the first failing name/value pair (or the beginning of the string if the failure is in the first name/value pair) if the request was not successful. |
[out] | Results | A null-terminated Unicode string in <ConfigAltResp> format which has all values filled in for the names in the Request string. String to be allocated by the called function. |
EFI_SUCCESS | The Results is filled with the requested values. |
EFI_OUT_OF_RESOURCES | Not enough memory to store the results. |
EFI_INVALID_PARAMETER | Request is illegal syntax, or unknown name. |
EFI_NOT_FOUND | Routing data doesn't match any storage in this driver. |
Definition at line 226 of file RamDiskImpl.c.
VOID RamDiskInitBlockIo | ( | IN RAM_DISK_PRIVATE_DATA * | PrivateData | ) |
Initialize the BlockIO protocol of a RAM disk device.
[in] | PrivateData | Points to RAM disk private data. |
Initialize the BlockIO & BlockIO2 protocol of a RAM disk device.
[in] | PrivateData | Points to RAM disk private data. |
Definition at line 43 of file RamDiskBlockIo.c.
EFI_STATUS RamDiskPublishNfit | ( | IN RAM_DISK_PRIVATE_DATA * | PrivateData | ) |
Publish the RAM disk NVDIMM Firmware Interface Table (NFIT) to the ACPI table.
[in] | PrivateData | Points to RAM disk private data. |
EFI_SUCCESS | The RAM disk NFIT has been published. |
others | The RAM disk NFIT has not been published. |
Definition at line 128 of file RamDiskProtocol.c.
EFI_STATUS EFIAPI RamDiskRegister | ( | IN UINT64 | RamDiskBase, |
IN UINT64 | RamDiskSize, | ||
IN EFI_GUID * | RamDiskType, | ||
IN EFI_DEVICE_PATH *ParentDevicePath | OPTIONAL, | ||
OUT EFI_DEVICE_PATH_PROTOCOL ** | DevicePath | ||
) |
Register a RAM disk with specified address, size and type.
[in] | RamDiskBase | The base address of registered RAM disk. |
[in] | RamDiskSize | The size of registered RAM disk. |
[in] | RamDiskType | The type of registered RAM disk. The GUID can be any of the values defined in section 9.3.6.9, or a vendor defined GUID. |
[in] | ParentDevicePath | Pointer to the parent device path. If there is no parent device path then ParentDevicePath is NULL. |
[out] | DevicePath | On return, points to a pointer to the device path of the RAM disk device. If ParentDevicePath is not NULL, the returned DevicePath is created by appending a RAM disk node to the parent device path. If ParentDevicePath is NULL, the returned DevicePath is a RAM disk device path without appending. This function is responsible for allocating the buffer DevicePath with the boot service AllocatePool(). |
EFI_SUCCESS | The RAM disk is registered successfully. |
EFI_INVALID_PARAMETER | DevicePath or RamDiskType is NULL. RamDiskSize is 0. |
EFI_ALREADY_STARTED | A Device Path Protocol instance to be created is already present in the handle database. |
EFI_OUT_OF_RESOURCES | The RAM disk register operation fails due to resource limitation. |
Definition at line 593 of file RamDiskProtocol.c.
EFI_STATUS EFIAPI RamDiskRouteConfig | ( | IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL * | This, |
IN CONST EFI_STRING | Configuration, | ||
OUT EFI_STRING * | Progress | ||
) |
This function processes the results of changes in configuration.
[in] | This | Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL. |
[in] | Configuration | A null-terminated Unicode string in <ConfigResp> format. |
[out] | Progress | A pointer to a string filled in with the offset of the most recent '&' before the first failing name/value pair (or the beginning of the string if the failure is in the first name/value pair) or the terminating NULL if all was successful. |
EFI_SUCCESS | The Results is processed successfully. |
EFI_INVALID_PARAMETER | Configuration is NULL. |
EFI_NOT_FOUND | Routing data doesn't match any storage in this driver. |
Definition at line 261 of file RamDiskImpl.c.
EFI_STATUS EFIAPI RamDiskUnregister | ( | IN EFI_DEVICE_PATH_PROTOCOL * | DevicePath | ) |
Unregister a RAM disk specified by DevicePath.
[in] | DevicePath | A pointer to the device path that describes a RAM Disk device. |
EFI_SUCCESS | The RAM disk is unregistered successfully. |
EFI_INVALID_PARAMETER | DevicePath is NULL. |
EFI_UNSUPPORTED | The device specified by DevicePath is not a valid ramdisk device path and not supported by the driver. |
EFI_NOT_FOUND | The RAM disk pointed by DevicePath doesn't exist. |
Definition at line 762 of file RamDiskProtocol.c.
VOID UninstallRamDiskConfigForm | ( | IN OUT RAM_DISK_CONFIG_PRIVATE_DATA * | ConfigPrivateData | ) |
This function removes RAM disk configuration Form.
[in,out] | ConfigPrivateData | Points to RAM disk configuration private data. |
Definition at line 122 of file RamDiskImpl.c.
VOID UnregisterAllRamDisks | ( | VOID | ) |
Unregister all registered RAM disks.
Definition at line 157 of file RamDiskImpl.c.
|
extern |
Definition at line 35 of file RamDiskDriver.c.
|
extern |
Definition at line 34 of file RamDiskDriver.c.
|
extern |
Definition at line 15 of file RamDiskImpl.c.
|
extern |
RAM disk HII-related definitions and declarations
|
extern |
Definition at line 29 of file RamDiskDriver.c.