mirror of https://github.com/acidanthera/audk.git
QemuFwCfgLib: Add QemuFwCfgWriteBytes() function
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14109 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
b5e243b75f
commit
29874a8c60
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
QEMU/KVM Firmware Configuration access
|
||||
|
||||
Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2011 - 2013, 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
|
||||
|
@ -102,6 +102,25 @@ QemuFwCfgReadBytes (
|
|||
);
|
||||
|
||||
|
||||
/**
|
||||
Writes firmware configuration bytes from a buffer
|
||||
|
||||
If called multiple times, then the data written will
|
||||
continue at the offset of the firmware configuration
|
||||
item where the previous write ended.
|
||||
|
||||
@param[in] Size - Size in bytes to write
|
||||
@param[in] Buffer - Buffer to read data from
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
QemuFwCfgWriteBytes (
|
||||
IN UINTN Size,
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Reads a UINT8 firmware configuration value
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2006 - 2013, 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
|
||||
|
@ -30,3 +30,23 @@ rep insb
|
|||
popl %edi
|
||||
ret
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EFIAPI
|
||||
# IoWriteFifo8 (
|
||||
# IN UINTN Port,
|
||||
# IN UINTN Size,
|
||||
# IN VOID *Buffer
|
||||
# );
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_GLOBAL ASM_PFX(IoWriteFifo8)
|
||||
ASM_PFX(IoWriteFifo8):
|
||||
movw 4(%esp), %dx
|
||||
movl 8(%esp), %ecx
|
||||
pushl %esi
|
||||
movl 16(%esp), %esi
|
||||
rep outsb
|
||||
popl %esi
|
||||
ret
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;------------------------------------------------------------------------------
|
||||
;
|
||||
; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
; Copyright (c) 2006 - 2013, 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
|
||||
|
@ -36,5 +36,27 @@ rep insb
|
|||
|
||||
IoReadFifo8 ENDP
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; VOID
|
||||
; EFIAPI
|
||||
; IoWriteFifo8 (
|
||||
; IN UINTN Port,
|
||||
; IN UINTN Size,
|
||||
; IN VOID *Buffer
|
||||
; );
|
||||
;------------------------------------------------------------------------------
|
||||
IoWriteFifo8 PROC
|
||||
|
||||
mov dx, [esp + 4]
|
||||
mov ecx, [esp + 8]
|
||||
push esi
|
||||
mov esi, [esp + 16]
|
||||
rep outsb
|
||||
pop esi
|
||||
ret
|
||||
|
||||
IoWriteFifo8 ENDP
|
||||
|
||||
END
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/** @file
|
||||
|
||||
Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2011 - 2013, 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
|
||||
|
@ -50,6 +50,32 @@ IoReadFifo8 (
|
|||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Writes an 8-bit I/O port fifo from a block of memory.
|
||||
|
||||
Writes the 8-bit I/O fifo port specified by Port.
|
||||
|
||||
The port is written Count times, and the data are obtained
|
||||
from 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
|
||||
IoWriteFifo8 (
|
||||
IN UINTN Port,
|
||||
IN UINTN Count,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Returns a boolean indicating if the firmware configuration interface
|
||||
|
@ -132,6 +158,29 @@ QemuFwCfgReadBytes (
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Write firmware configuration bytes from a buffer
|
||||
|
||||
If called multiple times, then the data written will
|
||||
continue at the offset of the firmware configuration
|
||||
item where the previous write ended.
|
||||
|
||||
@param[in] Size - Size in bytes to write
|
||||
@param[in] Buffer - Buffer to read data from
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
QemuFwCfgWriteBytes (
|
||||
IN UINTN Size,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
if (mQemuFwCfgSupported) {
|
||||
IoWriteFifo8 (0x511, Size, Buffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Reads a UINT8 firmware configuration value
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2006 - 2013, 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
|
||||
|
@ -28,3 +28,20 @@ rep insb
|
|||
mov %r8, %rdi # restore rdi
|
||||
ret
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EFIAPI
|
||||
# IoWriteFifo8 (
|
||||
# IN UINTN Port, // rcx
|
||||
# IN UINTN Size, // rdx
|
||||
# IN VOID *Buffer // r8
|
||||
# );
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_GLOBAL ASM_PFX(IoWriteFifo8)
|
||||
ASM_PFX(IoWriteFifo8):
|
||||
xchg %rcx, %rdx
|
||||
xchg %r8, %rsi # rdi: buffer address; r8: save rsi
|
||||
rep outsb
|
||||
mov %r8, %rsi # restore rsi
|
||||
ret
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;------------------------------------------------------------------------------
|
||||
;
|
||||
; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
; Copyright (c) 2006 - 2013, 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
|
||||
|
@ -32,5 +32,25 @@ rep insb
|
|||
|
||||
IoReadFifo8 ENDP
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; VOID
|
||||
; EFIAPI
|
||||
; IoWriteFifo8 (
|
||||
; IN UINTN Port, // rcx
|
||||
; IN UINTN Size, // rdx
|
||||
; IN VOID *Buffer // r8
|
||||
; );
|
||||
;------------------------------------------------------------------------------
|
||||
IoWriteFifo8 PROC
|
||||
|
||||
xchg rcx, rdx
|
||||
xchg rsi, r8 ; rdi: buffer address; r8: save rdi
|
||||
rep outsb
|
||||
mov rsi, r8 ; restore rdi
|
||||
ret
|
||||
|
||||
IoWriteFifo8 ENDP
|
||||
|
||||
END
|
||||
|
||||
|
|
Loading…
Reference in New Issue