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:
jljusten 2013-01-28 16:54:55 +00:00
parent b5e243b75f
commit 29874a8c60
6 changed files with 153 additions and 6 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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