X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=OvmfPkg%2FLibrary%2FQemuFwCfgLib%2FQemuFwCfgLib.c;h=8e8f54ba3facfe558520b9835603337269e0a6fd;hb=ac0a286f4d747a4c6c603a7b225917293cbe1e9f;hp=1387ea85f3f08cf14d329111947c13842b694c24;hpb=21ca2f28e6c5e006820956d7d56150184faeef85;p=mirror_edk2.git diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c index 1387ea85f3..8e8f54ba3f 100644 --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c @@ -4,13 +4,7 @@ Copyright (C) 2013, Red Hat, Inc. Copyright (c) 2017, AMD Incorporated. All rights reserved.
- This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -25,10 +19,9 @@ #include "QemuFwCfgLibInternal.h" - /** Selects a firmware configuration item for reading. - + Following this call, any data read from this item will start from the beginning of the configuration item's data. @@ -38,85 +31,13 @@ VOID EFIAPI QemuFwCfgSelectItem ( - IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem + IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem ) { - DEBUG ((EFI_D_INFO, "Select Item: 0x%x\n", (UINT16)(UINTN) QemuFwCfgItem)); - IoWrite16 (FW_CFG_IO_SELECTOR, (UINT16)(UINTN) QemuFwCfgItem); + DEBUG ((DEBUG_INFO, "Select Item: 0x%x\n", (UINT16)(UINTN)QemuFwCfgItem)); + IoWrite16 (FW_CFG_IO_SELECTOR, (UINT16)(UINTN)QemuFwCfgItem); } - -/** - 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 -InternalQemuFwCfgDmaBytes ( - IN UINT32 Size, - IN OUT VOID *Buffer OPTIONAL, - IN UINT32 Control - ) -{ - volatile FW_CFG_DMA_ACCESS Access; - UINT32 AccessHigh, AccessLow; - UINT32 Status; - - ASSERT (Control == FW_CFG_DMA_CTL_WRITE || Control == FW_CFG_DMA_CTL_READ || - Control == FW_CFG_DMA_CTL_SKIP); - - if (Size == 0) { - return; - } - - Access.Control = SwapBytes32 (Control); - Access.Length = SwapBytes32 (Size); - Access.Address = SwapBytes64 ((UINTN)Buffer); - - // - // Delimit the transfer from (a) modifications to Access, (b) in case of a - // write, from writes to Buffer by the caller. - // - MemoryFence (); - - // - // Start the transfer. - // - AccessHigh = (UINT32)RShiftU64 ((UINTN)&Access, 32); - AccessLow = (UINT32)(UINTN)&Access; - IoWrite32 (0x514, SwapBytes32 (AccessHigh)); - IoWrite32 (0x518, SwapBytes32 (AccessLow)); - - // - // Don't look at Access.Control before starting the transfer. - // - MemoryFence (); - - // - // Wait for the transfer to complete. - // - do { - Status = SwapBytes32 (Access.Control); - ASSERT ((Status & FW_CFG_DMA_CTL_ERROR) == 0); - } while (Status != 0); - - // - // After a read, the caller will want to use Buffer. - // - MemoryFence (); -} - - /** Reads firmware configuration bytes into a buffer @@ -127,17 +48,17 @@ InternalQemuFwCfgDmaBytes ( VOID EFIAPI InternalQemuFwCfgReadBytes ( - IN UINTN Size, - IN VOID *Buffer OPTIONAL + IN UINTN Size, + IN VOID *Buffer OPTIONAL ) { - if (InternalQemuFwCfgDmaIsAvailable () && Size <= MAX_UINT32) { + if (InternalQemuFwCfgDmaIsAvailable () && (Size <= MAX_UINT32)) { InternalQemuFwCfgDmaBytes ((UINT32)Size, Buffer, FW_CFG_DMA_CTL_READ); return; } - IoReadFifo8 (0x511, Size, Buffer); -} + IoReadFifo8 (FW_CFG_IO_DATA, Size, Buffer); +} /** Reads firmware configuration bytes into a buffer @@ -153,8 +74,8 @@ InternalQemuFwCfgReadBytes ( VOID EFIAPI QemuFwCfgReadBytes ( - IN UINTN Size, - IN VOID *Buffer + IN UINTN Size, + IN VOID *Buffer ) { if (InternalQemuFwCfgIsAvailable ()) { @@ -178,20 +99,20 @@ QemuFwCfgReadBytes ( VOID EFIAPI QemuFwCfgWriteBytes ( - IN UINTN Size, - IN VOID *Buffer + IN UINTN Size, + IN VOID *Buffer ) { if (InternalQemuFwCfgIsAvailable ()) { - if (InternalQemuFwCfgDmaIsAvailable () && Size <= MAX_UINT32) { + if (InternalQemuFwCfgDmaIsAvailable () && (Size <= MAX_UINT32)) { InternalQemuFwCfgDmaBytes ((UINT32)Size, Buffer, FW_CFG_DMA_CTL_WRITE); return; } - IoWriteFifo8 (0x511, Size, Buffer); + + IoWriteFifo8 (FW_CFG_IO_DATA, Size, Buffer); } } - /** Skip bytes in the firmware configuration item. @@ -204,17 +125,17 @@ QemuFwCfgWriteBytes ( VOID EFIAPI QemuFwCfgSkipBytes ( - IN UINTN Size + IN UINTN Size ) { - UINTN ChunkSize; - UINT8 SkipBuffer[256]; + UINTN ChunkSize; + UINT8 SkipBuffer[256]; if (!InternalQemuFwCfgIsAvailable ()) { return; } - if (InternalQemuFwCfgDmaIsAvailable () && Size <= MAX_UINT32) { + if (InternalQemuFwCfgDmaIsAvailable () && (Size <= MAX_UINT32)) { InternalQemuFwCfgDmaBytes ((UINT32)Size, NULL, FW_CFG_DMA_CTL_SKIP); return; } @@ -230,12 +151,11 @@ QemuFwCfgSkipBytes ( // while (Size > 0) { ChunkSize = MIN (Size, sizeof SkipBuffer); - IoReadFifo8 (0x511, ChunkSize, SkipBuffer); + IoReadFifo8 (FW_CFG_IO_DATA, ChunkSize, SkipBuffer); Size -= ChunkSize; } } - /** Reads a UINT8 firmware configuration value @@ -248,14 +168,13 @@ QemuFwCfgRead8 ( VOID ) { - UINT8 Result; + UINT8 Result; QemuFwCfgReadBytes (sizeof (Result), &Result); return Result; } - /** Reads a UINT16 firmware configuration value @@ -268,14 +187,13 @@ QemuFwCfgRead16 ( VOID ) { - UINT16 Result; + UINT16 Result; QemuFwCfgReadBytes (sizeof (Result), &Result); return Result; } - /** Reads a UINT32 firmware configuration value @@ -288,14 +206,13 @@ QemuFwCfgRead32 ( VOID ) { - UINT32 Result; + UINT32 Result; QemuFwCfgReadBytes (sizeof (Result), &Result); return Result; } - /** Reads a UINT64 firmware configuration value @@ -308,14 +225,13 @@ QemuFwCfgRead64 ( VOID ) { - UINT64 Result; + UINT64 Result; QemuFwCfgReadBytes (sizeof (Result), &Result); return Result; } - /** Find the configuration item corresponding to the firmware configuration file. @@ -337,8 +253,8 @@ QemuFwCfgFindFile ( OUT UINTN *Size ) { - UINT32 Count; - UINT32 Idx; + UINT32 Count; + UINT32 Idx; if (!InternalQemuFwCfgIsAvailable ()) { return RETURN_UNSUPPORTED; @@ -348,15 +264,15 @@ QemuFwCfgFindFile ( Count = SwapBytes32 (QemuFwCfgRead32 ()); for (Idx = 0; Idx < Count; ++Idx) { - UINT32 FileSize; - UINT16 FileSelect; - UINT16 FileReserved; - CHAR8 FName[QEMU_FW_CFG_FNAME_SIZE]; + UINT32 FileSize; + UINT16 FileSelect; + UINT16 FileReserved; + CHAR8 FName[QEMU_FW_CFG_FNAME_SIZE]; FileSize = QemuFwCfgRead32 (); FileSelect = QemuFwCfgRead16 (); FileReserved = QemuFwCfgRead16 (); - (VOID) FileReserved; /* Force a do-nothing reference. */ + (VOID)FileReserved; /* Force a do-nothing reference. */ InternalQemuFwCfgReadBytes (sizeof (FName), FName); if (AsciiStrCmp (Name, FName) == 0) { @@ -368,31 +284,3 @@ QemuFwCfgFindFile ( return RETURN_NOT_FOUND; } - - -/** - Determine if S3 support is explicitly enabled. - - @retval TRUE if S3 support is explicitly enabled. - FALSE otherwise. This includes unavailability of the firmware - configuration interface. -**/ -BOOLEAN -EFIAPI -QemuFwCfgS3Enabled ( - VOID - ) -{ - RETURN_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - UINT8 SystemStates[6]; - - Status = QemuFwCfgFindFile ("etc/system-states", &FwCfgItem, &FwCfgSize); - if (Status != RETURN_SUCCESS || FwCfgSize != sizeof SystemStates) { - return FALSE; - } - QemuFwCfgSelectItem (FwCfgItem); - QemuFwCfgReadBytes (sizeof SystemStates, SystemStates); - return (BOOLEAN) (SystemStates[3] & BIT7); -}