/** @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.
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