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