mirror of https://github.com/acidanthera/audk.git
1. Added AsmCpuidEx() to BaseLib
2. Added DecimalToBcd8() and BcdToDecimal8() to String.c git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@465 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
4cbd217532
commit
dee4740abe
|
@ -638,6 +638,45 @@ AsciiStrnCat (
|
||||||
IN UINTN Length
|
IN UINTN Length
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Converts an 8-bit value to an 8-bit BCD value.
|
||||||
|
|
||||||
|
Converts the 8-bit value specified by Value to BCD. The BCD value is
|
||||||
|
returned.
|
||||||
|
|
||||||
|
If Value >= 100, then ASSERT().
|
||||||
|
|
||||||
|
@param Value The 8-bit value to convert to BCD. Range 0..99.
|
||||||
|
|
||||||
|
@return The BCD value
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
DecimalToBcd8 (
|
||||||
|
IN UINT8 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Converts an 8-bit BCD value to an 8-bit value.
|
||||||
|
|
||||||
|
Converts the 8-bit BCD value specified by Value to an 8-bit value. The 8-bit
|
||||||
|
value is returned.
|
||||||
|
|
||||||
|
If Value >= 0xA0, then ASSERT().
|
||||||
|
If (Value & 0x0F) >= 0x0A, then ASSERT().
|
||||||
|
|
||||||
|
@param Value The 8-bit BCD value to convert to an 8-bit value.
|
||||||
|
|
||||||
|
@return The 8-bit value is returned.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
BcdToDecimal8 (
|
||||||
|
IN UINT8 Value
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// LIST_ENTRY definition
|
// LIST_ENTRY definition
|
||||||
//
|
//
|
||||||
|
@ -2994,6 +3033,49 @@ AsmCpuid (
|
||||||
OUT UINT32 *Edx OPTIONAL
|
OUT UINT32 *Edx OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrieves CPUID information using an extended leaf identifier.
|
||||||
|
|
||||||
|
Executes the CPUID instruction with EAX set to the value specified by Index
|
||||||
|
and ECX set to the value specified by SubIndex. This function always returns
|
||||||
|
Index. This function is only available on IA-32 and x64.
|
||||||
|
|
||||||
|
If Eax is not NULL, then the value of EAX after CPUID is returned in Eax.
|
||||||
|
If Ebx is not NULL, then the value of EBX after CPUID is returned in Ebx.
|
||||||
|
If Ecx is not NULL, then the value of ECX after CPUID is returned in Ecx.
|
||||||
|
If Edx is not NULL, then the value of EDX after CPUID is returned in Edx.
|
||||||
|
|
||||||
|
@param Index The 32-bit value to load into EAX prior to invoking the
|
||||||
|
CPUID instruction.
|
||||||
|
@param SubIndex The 32-bit value to load into ECX prior to invoking the
|
||||||
|
CPUID instruction.
|
||||||
|
@param Eax Pointer to the 32-bit EAX value returned by the CPUID
|
||||||
|
instruction. This is an optional parameter that may be
|
||||||
|
NULL.
|
||||||
|
@param Ebx Pointer to the 32-bit EBX value returned by the CPUID
|
||||||
|
instruction. This is an optional parameter that may be
|
||||||
|
NULL.
|
||||||
|
@param Ecx Pointer to the 32-bit ECX value returned by the CPUID
|
||||||
|
instruction. This is an optional parameter that may be
|
||||||
|
NULL.
|
||||||
|
@param Edx Pointer to the 32-bit EDX value returned by the CPUID
|
||||||
|
instruction. This is an optional parameter that may be
|
||||||
|
NULL.
|
||||||
|
|
||||||
|
@return Index
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT32
|
||||||
|
EFIAPI
|
||||||
|
AsmCpuidEx (
|
||||||
|
IN UINT32 Index,
|
||||||
|
IN UINT32 SubIndex,
|
||||||
|
OUT UINT32 *Eax, OPTIONAL
|
||||||
|
OUT UINT32 *Ebx, OPTIONAL
|
||||||
|
OUT UINT32 *Ecx, OPTIONAL
|
||||||
|
OUT UINT32 *Edx OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the lower 32-bits of a Machine Specific Register(MSR).
|
Returns the lower 32-bits of a Machine Specific Register(MSR).
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
<Filename>Ia32/SetJump.asm</Filename>
|
<Filename>Ia32/SetJump.asm</Filename>
|
||||||
<Filename>Ia32/LongJump.asm</Filename>
|
<Filename>Ia32/LongJump.asm</Filename>
|
||||||
<Filename>Ia32/CpuId.asm</Filename>
|
<Filename>Ia32/CpuId.asm</Filename>
|
||||||
|
<Filename>Ia32/CpuIdEx.asm</Filename>
|
||||||
<Filename>Ia32/ReadEflags.asm</Filename>
|
<Filename>Ia32/ReadEflags.asm</Filename>
|
||||||
<Filename>Ia32/ReadMsr64.asm</Filename>
|
<Filename>Ia32/ReadMsr64.asm</Filename>
|
||||||
<Filename>Ia32/WriteMsr32.asm</Filename>
|
<Filename>Ia32/WriteMsr32.asm</Filename>
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; Copyright (c) 2006, Intel Corporation
|
||||||
|
; All rights reserved. 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.
|
||||||
|
;
|
||||||
|
; Module Name:
|
||||||
|
;
|
||||||
|
; CpuIdEx.Asm
|
||||||
|
;
|
||||||
|
; Abstract:
|
||||||
|
;
|
||||||
|
; AsmCpuidEx function
|
||||||
|
;
|
||||||
|
; Notes:
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.686
|
||||||
|
.model flat,C
|
||||||
|
.code
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; UINT32
|
||||||
|
; EFIAPI
|
||||||
|
; AsmCpuidEx (
|
||||||
|
; IN UINT32 RegisterInEax,
|
||||||
|
; IN UINT32 RegisterInEcx,
|
||||||
|
; OUT UINT32 *RegisterOutEax OPTIONAL,
|
||||||
|
; OUT UINT32 *RegisterOutEbx OPTIONAL,
|
||||||
|
; OUT UINT32 *RegisterOutEcx OPTIONAL,
|
||||||
|
; OUT UINT32 *RegisterOutEdx OPTIONAL
|
||||||
|
; )
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
AsmCpuidEx PROC USES ebx
|
||||||
|
push ebp
|
||||||
|
mov ebp, esp
|
||||||
|
mov eax, [ebp + 12]
|
||||||
|
mov ecx, [ebp + 16]
|
||||||
|
cpuid
|
||||||
|
push ecx
|
||||||
|
mov ecx, [ebp + 20]
|
||||||
|
jecxz @F
|
||||||
|
mov [ecx], eax
|
||||||
|
@@:
|
||||||
|
mov ecx, [ebp + 24]
|
||||||
|
jecxz @F
|
||||||
|
mov [ecx], ebx
|
||||||
|
@@:
|
||||||
|
mov ecx, [ebp + 28]
|
||||||
|
jecxz @F
|
||||||
|
pop [ecx]
|
||||||
|
@@:
|
||||||
|
mov edx, [ebp + 32]
|
||||||
|
jecxz @F
|
||||||
|
mov [ecx], edx
|
||||||
|
@@:
|
||||||
|
mov eax, [ebp + 12]
|
||||||
|
leave
|
||||||
|
ret
|
||||||
|
AsmCpuidEx ENDP
|
||||||
|
|
||||||
|
END
|
|
@ -796,3 +796,51 @@ AsciiStrnCat (
|
||||||
ASSERT (AsciiStrSize (Destination) != 0);
|
ASSERT (AsciiStrSize (Destination) != 0);
|
||||||
return Destination;
|
return Destination;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Converts an 8-bit value to an 8-bit BCD value.
|
||||||
|
|
||||||
|
Converts the 8-bit value specified by Value to BCD. The BCD value is
|
||||||
|
returned.
|
||||||
|
|
||||||
|
If Value >= 100, then ASSERT().
|
||||||
|
|
||||||
|
@param Value The 8-bit value to convert to BCD. Range 0..99.
|
||||||
|
|
||||||
|
@return The BCD value
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
DecimalToBcd8 (
|
||||||
|
IN UINT8 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (Value < 100);
|
||||||
|
return ((Value / 10) << 4) | (Value % 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Converts an 8-bit BCD value to an 8-bit value.
|
||||||
|
|
||||||
|
Converts the 8-bit BCD value specified by Value to an 8-bit value. The 8-bit
|
||||||
|
value is returned.
|
||||||
|
|
||||||
|
If Value >= 0xA0, then ASSERT().
|
||||||
|
If (Value & 0x0F) >= 0x0A, then ASSERT().
|
||||||
|
|
||||||
|
@param Value The 8-bit BCD value to convert to an 8-bit value.
|
||||||
|
|
||||||
|
@return The 8-bit value is returned.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
BcdToDecimal8 (
|
||||||
|
IN UINT8 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (Value < 0xa0);
|
||||||
|
ASSERT ((Value & 0xf) < 0xa);
|
||||||
|
return (Value >> 4) * 10 + (Value & 0xf);
|
||||||
|
}
|
||||||
|
|
|
@ -11,11 +11,11 @@
|
||||||
;
|
;
|
||||||
; Module Name:
|
; Module Name:
|
||||||
;
|
;
|
||||||
; CpuId.Asm
|
; CpuIdEx.Asm
|
||||||
;
|
;
|
||||||
; Abstract:
|
; Abstract:
|
||||||
;
|
;
|
||||||
; AsmCpuid function
|
; AsmCpuidEx function
|
||||||
;
|
;
|
||||||
; Notes:
|
; Notes:
|
||||||
;
|
;
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
; UINT32
|
; UINT32
|
||||||
; EFIAPI
|
; EFIAPI
|
||||||
; AsmCpuid (
|
; AsmCpuidEx (
|
||||||
; IN UINT32 RegisterInEax,
|
; IN UINT32 RegisterInEax,
|
||||||
; IN UINT32 RegisterInEcx,
|
; IN UINT32 RegisterInEcx,
|
||||||
; OUT UINT32 *RegisterOutEax OPTIONAL,
|
; OUT UINT32 *RegisterOutEax OPTIONAL,
|
||||||
|
|
Loading…
Reference in New Issue