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
|
/** @file
|
||||||
QEMU/KVM Firmware Configuration access
|
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
|
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
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
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
|
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
|
# 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
|
||||||
# which accompanies this distribution. The full text of the license may be found at
|
# which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -30,3 +30,23 @@ rep insb
|
||||||
popl %edi
|
popl %edi
|
||||||
ret
|
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
|
; 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
|
||||||
; which accompanies this distribution. The full text of the license may be found at
|
; which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -36,5 +36,27 @@ rep insb
|
||||||
|
|
||||||
IoReadFifo8 ENDP
|
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
|
END
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/** @file
|
/** @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
|
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
|
||||||
|
@ -50,6 +50,32 @@ IoReadFifo8 (
|
||||||
OUT VOID *Buffer
|
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
|
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
|
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
|
# 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
|
||||||
# which accompanies this distribution. The full text of the license may be found at
|
# 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
|
mov %r8, %rdi # restore rdi
|
||||||
ret
|
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
|
; 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
|
||||||
; which accompanies this distribution. The full text of the license may be found at
|
; which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -32,5 +32,25 @@ rep insb
|
||||||
|
|
||||||
IoReadFifo8 ENDP
|
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
|
END
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue