/** @file | |
Internal interfaces specific to the QemuFwCfgLibMmio instances in OvmfPkg. | |
Copyright (C) 2016, Red Hat, Inc. | |
Copyright (C) 2017, Advanced Micro Devices. All rights reserved | |
Copyright (c) 2024 Loongson Technology Corporation Limited. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef QEMU_FW_CFG_LIB_MMIO_INTERNAL_H_ | |
#define QEMU_FW_CFG_LIB_MMIO_INTERNAL_H_ | |
typedef struct { | |
UINTN FwCfgSelectorAddress; | |
UINTN FwCfgDataAddress; | |
UINTN FwCfgDmaAddress; | |
} QEMU_FW_CFG_RESOURCE; | |
/** | |
Reads firmware configuration bytes into a buffer | |
@param[in] Size Size in bytes to read | |
@param[in] Buffer Buffer to store data into (OPTIONAL if Size is 0) | |
**/ | |
typedef | |
VOID(EFIAPI READ_BYTES_FUNCTION)( | |
IN UINTN Size, | |
IN VOID *Buffer OPTIONAL | |
); | |
/** | |
Writes bytes from a buffer to firmware configuration | |
@param[in] Size Size in bytes to write | |
@param[in] Buffer Buffer to transfer data from (OPTIONAL if Size is 0) | |
**/ | |
typedef | |
VOID(EFIAPI WRITE_BYTES_FUNCTION)( | |
IN UINTN Size, | |
IN VOID *Buffer OPTIONAL | |
); | |
/** | |
Skips bytes in firmware configuration | |
@param[in] Size Size in bytes to skip | |
**/ | |
typedef | |
VOID(EFIAPI SKIP_BYTES_FUNCTION)( | |
IN UINTN Size | |
); | |
/** | |
Reads firmware configuration bytes into a buffer | |
@param[in] Size Size in bytes to read | |
@param[in] Buffer Buffer to store data into (OPTIONAL if Size is 0) | |
**/ | |
extern | |
VOID (EFIAPI *InternalQemuFwCfgReadBytes)( | |
IN UINTN Size, | |
IN VOID *Buffer OPTIONAL | |
); | |
/** | |
Writes bytes from a buffer to firmware configuration | |
@param[in] Size Size in bytes to write | |
@param[in] Buffer Buffer to transfer data from (OPTIONAL if Size is 0) | |
**/ | |
extern | |
VOID (EFIAPI *InternalQemuFwCfgWriteBytes)( | |
IN UINTN Size, | |
IN VOID *Buffer OPTIONAL | |
); | |
/** | |
Skips bytes in firmware configuration | |
@param[in] Size Size in bytes to skip | |
**/ | |
extern | |
VOID (EFIAPI *InternalQemuFwCfgSkipBytes)( | |
IN UINTN Size | |
); | |
/** | |
Build firmware configure resource HOB. | |
@param[in] FwCfgResource A pointer to firmware configure resource. | |
@retval NULL | |
**/ | |
VOID | |
QemuBuildFwCfgResourceHob ( | |
IN QEMU_FW_CFG_RESOURCE *FwCfgResource | |
); | |
/** | |
Get firmware configure resource HOB. | |
@param VOID | |
@retval FwCfgResource The firmware configure resouce in HOB. | |
**/ | |
QEMU_FW_CFG_RESOURCE * | |
QemuGetFwCfgResourceHob ( | |
VOID | |
); | |
/** | |
To get firmware configure selector address. | |
@param VOID | |
@retval firmware configure selector address | |
**/ | |
UINTN | |
EFIAPI | |
QemuGetFwCfgSelectorAddress ( | |
VOID | |
); | |
/** | |
To get firmware configure Data address. | |
@param VOID | |
@retval firmware configure data address | |
**/ | |
UINTN | |
EFIAPI | |
QemuGetFwCfgDataAddress ( | |
VOID | |
); | |
/** | |
To get firmware DMA address. | |
@param VOID | |
@retval firmware DMA address | |
**/ | |
UINTN | |
EFIAPI | |
QemuGetFwCfgDmaAddress ( | |
VOID | |
); | |
/** | |
Slow READ_BYTES_FUNCTION. | |
**/ | |
VOID | |
EFIAPI | |
MmioReadBytes ( | |
IN UINTN Size, | |
IN VOID *Buffer OPTIONAL | |
); | |
/** | |
Slow WRITE_BYTES_FUNCTION. | |
**/ | |
VOID | |
EFIAPI | |
MmioWriteBytes ( | |
IN UINTN Size, | |
IN VOID *Buffer OPTIONAL | |
); | |
/** | |
Slow SKIP_BYTES_FUNCTION. | |
**/ | |
VOID | |
EFIAPI | |
MmioSkipBytes ( | |
IN UINTN Size | |
); | |
/** | |
Fast READ_BYTES_FUNCTION. | |
**/ | |
VOID | |
EFIAPI | |
DmaReadBytes ( | |
IN UINTN Size, | |
IN VOID *Buffer OPTIONAL | |
); | |
/** | |
Fast WRITE_BYTES_FUNCTION. | |
**/ | |
VOID | |
EFIAPI | |
DmaWriteBytes ( | |
IN UINTN Size, | |
IN VOID *Buffer OPTIONAL | |
); | |
/** | |
Fast SKIP_BYTES_FUNCTION. | |
**/ | |
VOID | |
EFIAPI | |
DmaSkipBytes ( | |
IN UINTN Size | |
); | |
/** | |
Transfer an array of bytes, or skip a number of bytes, using the DMA | |
interface. | |
@param[in] Size Size in bytes to transfer or skip. | |
@param[in,out] Buffer Buffer to read data into or write data from. Ignored, | |
and may be NULL, if Size is zero, or Control is | |
FW_CFG_DMA_CTL_SKIP. | |
@param[in] Control One of the following: | |
FW_CFG_DMA_CTL_WRITE - write to fw_cfg from Buffer. | |
FW_CFG_DMA_CTL_READ - read from fw_cfg into Buffer. | |
FW_CFG_DMA_CTL_SKIP - skip bytes in fw_cfg. | |
**/ | |
VOID | |
DmaTransferBytes ( | |
IN UINTN Size, | |
IN OUT VOID *Buffer OPTIONAL, | |
IN UINT32 Control | |
); | |
#endif |