mirror of https://github.com/acidanthera/audk.git
OvmfPkg: Add QemuFwCfgLib library class and implementation
QEMU's Firmware Configuration interface gives the firmware access to various types of information. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13383 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
d90e7d81c0
commit
f1ec65ba24
|
@ -0,0 +1,157 @@
|
||||||
|
/** @file
|
||||||
|
QEMU/KVM Firmware Configuration access
|
||||||
|
|
||||||
|
Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
|
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.
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef __FW_CFG_LIB__
|
||||||
|
#define __FW_CFG_LIB__
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
QemuFwCfgItemSignature = 0x0000,
|
||||||
|
QemuFwCfgItemInterfaceVersion = 0x0001,
|
||||||
|
QemuFwCfgItemSystemUuid = 0x0002,
|
||||||
|
QemuFwCfgItemRamSize = 0x0003,
|
||||||
|
QemuFwCfgItemGraphicsEnabled = 0x0004,
|
||||||
|
QemuFwCfgItemSmpCpuCount = 0x0005,
|
||||||
|
QemuFwCfgItemMachineId = 0x0006,
|
||||||
|
QemuFwCfgItemKernelAddress = 0x0007,
|
||||||
|
QemuFwCfgItemKernelSize = 0x0008,
|
||||||
|
QemuFwCfgItemKernelCommandLine = 0x0009,
|
||||||
|
QemuFwCfgItemInitrdAddress = 0x000a,
|
||||||
|
QemuFwCfgItemInitrdSize = 0x000b,
|
||||||
|
QemuFwCfgItemBootDevice = 0x000c,
|
||||||
|
QemuFwCfgItemNumaData = 0x000d,
|
||||||
|
QemuFwCfgItemBootMenu = 0x000e,
|
||||||
|
QemuFwCfgItemMaximumCpuCount = 0x000f,
|
||||||
|
QemuFwCfgItemKernelEntry = 0x0010,
|
||||||
|
QemuFwCfgItemKernelData = 0x0011,
|
||||||
|
QemuFwCfgItemInitrdData = 0x0012,
|
||||||
|
QemuFwCfgItemCommandLineAddress = 0x0013,
|
||||||
|
QemuFwCfgItemCommandLineSize = 0x0014,
|
||||||
|
QemuFwCfgItemCommandLineData = 0x0015,
|
||||||
|
QemuFwCfgItemKernelSetupAddress = 0x0016,
|
||||||
|
QemuFwCfgItemKernelSetupSize = 0x0017,
|
||||||
|
QemuFwCfgItemKernelSetupData = 0x0018,
|
||||||
|
|
||||||
|
QemuFwCfgItemX86AcpiTables = 0x8000,
|
||||||
|
QemuFwCfgItemX86SmbiosTables = 0x8001,
|
||||||
|
QemuFwCfgItemX86Irq0Override = 0x8002,
|
||||||
|
QemuFwCfgItemX86E820Table = 0x8003,
|
||||||
|
QemuFwCfgItemX86HpetData = 0x8004,
|
||||||
|
|
||||||
|
} FIRMWARE_CONFIG_ITEM;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns a boolean indicating if the firmware configuration interface
|
||||||
|
is available or not.
|
||||||
|
|
||||||
|
@retval TRUE The interface is available
|
||||||
|
@retval FALSE The interface is not available
|
||||||
|
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgIsAvailable (
|
||||||
|
VOID
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
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.
|
||||||
|
|
||||||
|
@param[in] QemuFwCfgItem - Firmware Configuration item to read
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgSelectItem (
|
||||||
|
IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads firmware configuration bytes into a buffer
|
||||||
|
|
||||||
|
If called multiple times, then the data read will
|
||||||
|
continue at the offset of the firmware configuration
|
||||||
|
item where the previous read ended.
|
||||||
|
|
||||||
|
@param[in] Size - Size in bytes to read
|
||||||
|
@param[in] Buffer - Buffer to store data into
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgReadBytes (
|
||||||
|
IN UINTN Size,
|
||||||
|
IN VOID *Buffer OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads a UINT8 firmware configuration value
|
||||||
|
|
||||||
|
@return Value of Firmware Configuration item read
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgRead8 (
|
||||||
|
VOID
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads a UINT16 firmware configuration value
|
||||||
|
|
||||||
|
@return Value of Firmware Configuration item read
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT16
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgRead16 (
|
||||||
|
VOID
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads a UINT32 firmware configuration value
|
||||||
|
|
||||||
|
@return Value of Firmware Configuration item read
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT32
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgRead32 (
|
||||||
|
VOID
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads a UINT64 firmware configuration value
|
||||||
|
|
||||||
|
@return Value of Firmware Configuration item read
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT64
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgRead64 (
|
||||||
|
VOID
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID
|
||||||
|
# EFIAPI
|
||||||
|
# IoReadFifo8 (
|
||||||
|
# IN UINTN Port,
|
||||||
|
# IN UINTN Size,
|
||||||
|
# IN VOID *Buffer
|
||||||
|
# );
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
ASM_GLOBAL ASM_PFX(IoReadFifo8)
|
||||||
|
ASM_PFX(IoReadFifo8):
|
||||||
|
movw 4(%esp), %dx
|
||||||
|
movl 8(%esp), %ecx
|
||||||
|
pushl %edi
|
||||||
|
movl 16(%esp), %edi
|
||||||
|
rep insb
|
||||||
|
popl %edi
|
||||||
|
ret
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
|
; 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.
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.586P
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID
|
||||||
|
; EFIAPI
|
||||||
|
; IoReadFifo8 (
|
||||||
|
; IN UINTN Port,
|
||||||
|
; IN UINTN Size,
|
||||||
|
; IN VOID *Buffer
|
||||||
|
; );
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
IoReadFifo8 PROC
|
||||||
|
|
||||||
|
mov dx, [esp + 4]
|
||||||
|
mov ecx, [esp + 8]
|
||||||
|
push edi
|
||||||
|
mov edx, [esp + 16]
|
||||||
|
rep insb
|
||||||
|
pop edi
|
||||||
|
ret
|
||||||
|
|
||||||
|
IoReadFifo8 ENDP
|
||||||
|
|
||||||
|
END
|
||||||
|
|
|
@ -0,0 +1,246 @@
|
||||||
|
/** @file
|
||||||
|
|
||||||
|
Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "Uefi.h"
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/IoLib.h>
|
||||||
|
#include <Library/QemuFwCfgLib.h>
|
||||||
|
#include <Library/MemoryAllocationLib.h>
|
||||||
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
|
|
||||||
|
STATIC BOOLEAN mQemuFwCfgSupported = FALSE;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads an 8-bit I/O port fifo into a block of memory.
|
||||||
|
|
||||||
|
Reads the 8-bit I/O fifo port specified by Port.
|
||||||
|
|
||||||
|
The port is read Count times, and the read data is
|
||||||
|
stored in the provided Buffer.
|
||||||
|
|
||||||
|
This function must guarantee that all I/O read and write operations are
|
||||||
|
serialized.
|
||||||
|
|
||||||
|
If 8-bit I/O port operations are not supported, then ASSERT().
|
||||||
|
|
||||||
|
@param Port The I/O port to read.
|
||||||
|
@param Count The number of times to read I/O port.
|
||||||
|
@param Buffer The buffer to store the read data into.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
IoReadFifo8 (
|
||||||
|
IN UINTN Port,
|
||||||
|
IN UINTN Count,
|
||||||
|
OUT VOID *Buffer
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns a boolean indicating if the firmware configuration interface
|
||||||
|
is available or not.
|
||||||
|
|
||||||
|
@retval TRUE The interface is available
|
||||||
|
@retval FALSE The interface is not available
|
||||||
|
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgIsAvailable (
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return mQemuFwCfgSupported;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
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.
|
||||||
|
|
||||||
|
@param[in] QemuFwCfgItem - Firmware Configuration item to read
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgSelectItem (
|
||||||
|
IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem
|
||||||
|
)
|
||||||
|
{
|
||||||
|
DEBUG ((EFI_D_INFO, "Select Item: 0x%x\n", (UINT16)(UINTN) QemuFwCfgItem));
|
||||||
|
IoWrite16 (0x510, (UINT16)(UINTN) QemuFwCfgItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
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)
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
InternalQemuFwCfgReadBytes (
|
||||||
|
IN UINTN Size,
|
||||||
|
IN VOID *Buffer OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
IoReadFifo8 (0x511, Size, Buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads firmware configuration bytes into a buffer
|
||||||
|
|
||||||
|
If called multiple times, then the data read will
|
||||||
|
continue at the offset of the firmware configuration
|
||||||
|
item where the previous read ended.
|
||||||
|
|
||||||
|
@param[in] Size - Size in bytes to read
|
||||||
|
@param[in] Buffer - Buffer to store data into
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgReadBytes (
|
||||||
|
IN UINTN Size,
|
||||||
|
IN VOID *Buffer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (mQemuFwCfgSupported) {
|
||||||
|
InternalQemuFwCfgReadBytes (Size, Buffer);
|
||||||
|
} else {
|
||||||
|
ZeroMem (Buffer, Size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads a UINT8 firmware configuration value
|
||||||
|
|
||||||
|
@return Value of Firmware Configuration item read
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgRead8 (
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8 Result;
|
||||||
|
|
||||||
|
QemuFwCfgReadBytes (sizeof (Result), &Result);
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads a UINT16 firmware configuration value
|
||||||
|
|
||||||
|
@return Value of Firmware Configuration item read
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT16
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgRead16 (
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT16 Result;
|
||||||
|
|
||||||
|
QemuFwCfgReadBytes (sizeof (Result), &Result);
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads a UINT32 firmware configuration value
|
||||||
|
|
||||||
|
@return Value of Firmware Configuration item read
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT32
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgRead32 (
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT32 Result;
|
||||||
|
|
||||||
|
QemuFwCfgReadBytes (sizeof (Result), &Result);
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reads a UINT64 firmware configuration value
|
||||||
|
|
||||||
|
@return Value of Firmware Configuration item read
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT64
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgRead64 (
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT64 Result;
|
||||||
|
|
||||||
|
QemuFwCfgReadBytes (sizeof (Result), &Result);
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
RETURN_STATUS
|
||||||
|
EFIAPI
|
||||||
|
QemuFwCfgInitialize (
|
||||||
|
VOID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT32 Signature;
|
||||||
|
UINT32 Revision;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Enable the access routines while probing to see if it is supported.
|
||||||
|
//
|
||||||
|
mQemuFwCfgSupported = TRUE;
|
||||||
|
|
||||||
|
QemuFwCfgSelectItem (QemuFwCfgItemSignature);
|
||||||
|
Signature = QemuFwCfgRead32 ();
|
||||||
|
DEBUG ((EFI_D_INFO, "FW CFG Signature: 0x%x\n", Signature));
|
||||||
|
QemuFwCfgSelectItem (QemuFwCfgItemInterfaceVersion);
|
||||||
|
Revision = QemuFwCfgRead32 ();
|
||||||
|
DEBUG ((EFI_D_INFO, "FW CFG Revision: 0x%x\n", Revision));
|
||||||
|
if ((Signature != SIGNATURE_32 ('Q', 'E', 'M', 'U')) ||
|
||||||
|
(Revision < 1)
|
||||||
|
) {
|
||||||
|
DEBUG ((EFI_D_INFO, "QemuFwCfg interface not supported.\n"));
|
||||||
|
mQemuFwCfgSupported = FALSE;
|
||||||
|
return RETURN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEBUG ((EFI_D_INFO, "QemuFwCfg interface is supported.\n"));
|
||||||
|
return RETURN_SUCCESS;
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
## @file
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
##
|
||||||
|
|
||||||
|
[Defines]
|
||||||
|
INF_VERSION = 0x00010005
|
||||||
|
BASE_NAME = QemuFwCfgLib
|
||||||
|
FILE_GUID = fdd53716-31e1-4acc-9007-8bd5d877c96f
|
||||||
|
MODULE_TYPE = BASE
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
LIBRARY_CLASS = QemuFwCfgLib
|
||||||
|
|
||||||
|
CONSTRUCTOR = QemuFwCfgInitialize
|
||||||
|
|
||||||
|
#
|
||||||
|
# The following information is for reference only and not required by the build tools.
|
||||||
|
#
|
||||||
|
# VALID_ARCHITECTURES = IA32 X64
|
||||||
|
#
|
||||||
|
|
||||||
|
[Sources]
|
||||||
|
QemuFwCfgLib.c
|
||||||
|
|
||||||
|
[Sources.IA32]
|
||||||
|
Ia32/IoLibExAsm.asm
|
||||||
|
Ia32/IoLibExAsm.S
|
||||||
|
|
||||||
|
[Sources.X64]
|
||||||
|
X64/IoLibExAsm.asm
|
||||||
|
X64/IoLibExAsm.S
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
OvmfPkg/OvmfPkg.dec
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
BaseLib
|
||||||
|
BaseMemoryLib
|
||||||
|
DebugLib
|
||||||
|
IoLib
|
||||||
|
MemoryAllocationLib
|
||||||
|
UefiBootServicesTableLib
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# VOID
|
||||||
|
# EFIAPI
|
||||||
|
# IoReadFifo8 (
|
||||||
|
# IN UINTN Port, // rcx
|
||||||
|
# IN UINTN Size, // rdx
|
||||||
|
# IN VOID *Buffer // r8
|
||||||
|
# );
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
ASM_GLOBAL ASM_PFX(IoReadFifo8)
|
||||||
|
ASM_PFX(IoReadFifo8):
|
||||||
|
xchg %rcx, %rdx
|
||||||
|
xchg %r8, %rdi # rdi: buffer address; r8: save rdi
|
||||||
|
rep insb
|
||||||
|
mov %r8, %rdi # restore rdi
|
||||||
|
ret
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
|
; 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.
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; VOID
|
||||||
|
; EFIAPI
|
||||||
|
; IoReadFifo8 (
|
||||||
|
; IN UINTN Port, // rcx
|
||||||
|
; IN UINTN Size, // rdx
|
||||||
|
; IN VOID *Buffer // r8
|
||||||
|
; );
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
IoReadFifo8 PROC
|
||||||
|
|
||||||
|
xchg rcx, rdx
|
||||||
|
xchg rdi, r8 ; rdi: buffer address; r8: save rdi
|
||||||
|
rep insb
|
||||||
|
mov rdi, r8 ; restore rdi
|
||||||
|
ret
|
||||||
|
|
||||||
|
IoReadFifo8 ENDP
|
||||||
|
|
||||||
|
END
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
## @file
|
## @file
|
||||||
# EFI/Framework Open Virtual Machine Firmware (OVMF) platform
|
# EFI/Framework Open Virtual Machine Firmware (OVMF) platform
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -27,6 +27,10 @@
|
||||||
#
|
#
|
||||||
NvVarsFileLib|Include/Library/NvVarsFileLib.h
|
NvVarsFileLib|Include/Library/NvVarsFileLib.h
|
||||||
|
|
||||||
|
## @libraryclass Access QEMU's firmware configuration interface
|
||||||
|
#
|
||||||
|
QemuFwCfgLib|Include/Library/QemuFwCfgLib.h
|
||||||
|
|
||||||
## @libraryclass Serialize (and deserialize) variables
|
## @libraryclass Serialize (and deserialize) variables
|
||||||
#
|
#
|
||||||
SerializeVariablesLib|Include/Library/SerializeVariablesLib.h
|
SerializeVariablesLib|Include/Library/SerializeVariablesLib.h
|
||||||
|
|
|
@ -94,6 +94,8 @@
|
||||||
DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
|
DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
|
||||||
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
|
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
|
||||||
SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
|
SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
|
||||||
|
QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf
|
||||||
|
LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf
|
||||||
|
|
||||||
!ifdef $(SOURCE_DEBUG_ENABLE)
|
!ifdef $(SOURCE_DEBUG_ENABLE)
|
||||||
PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
|
PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
|
||||||
|
|
|
@ -94,6 +94,7 @@
|
||||||
DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
|
DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
|
||||||
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
|
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
|
||||||
SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
|
SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
|
||||||
|
QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf
|
||||||
LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf
|
LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf
|
||||||
|
|
||||||
!ifdef $(SOURCE_DEBUG_ENABLE)
|
!ifdef $(SOURCE_DEBUG_ENABLE)
|
||||||
|
|
|
@ -94,6 +94,7 @@
|
||||||
DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
|
DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
|
||||||
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
|
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
|
||||||
SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
|
SerializeVariablesLib|OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.inf
|
||||||
|
QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf
|
||||||
LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf
|
LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf
|
||||||
|
|
||||||
!ifdef $(SOURCE_DEBUG_ENABLE)
|
!ifdef $(SOURCE_DEBUG_ENABLE)
|
||||||
|
|
Loading…
Reference in New Issue