mirror of
https://github.com/acidanthera/audk.git
synced 2025-08-20 09:08:10 +02:00
Added the HOB methods to load and store the QEMU firmware configure address, data address and DMA address, which are not enabled during the DXE stage. Build-tested only (with "ArmVirtQemu.dsc and RiscVVirtQemu.dsc"). BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4755 Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Leif Lindholm <quic_llindhol@quicinc.com> Cc: Sami Mujawar <sami.mujawar@arm.com> Cc: Sunil V L <sunilvl@ventanamicro.com> Cc: Andrei Warkentin <andrei.warkentin@intel.com> Signed-off-by: Chao Li <lichao@loongson.cn>
239 lines
4.4 KiB
C
239 lines
4.4 KiB
C
/** @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
|