mirror of https://github.com/acidanthera/audk.git
583 lines
22 KiB
C
583 lines
22 KiB
C
/** @file
|
|
Unit Test Host BaseLib hooks.
|
|
|
|
Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef __UNIT_TEST_HOST_BASE_LIB_H__
|
|
#define __UNIT_TEST_HOST_BASE_LIB_H__
|
|
|
|
/**
|
|
Prototype of service with no parameters and no return value.
|
|
**/
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_VOID)(
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Prototype of service that reads and returns a BOOLEAN value.
|
|
|
|
@return The value read.
|
|
**/
|
|
typedef
|
|
BOOLEAN
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_READ_BOOLEAN)(
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Prototype of service that reads and returns a UINT16 value.
|
|
|
|
@return The value read.
|
|
**/
|
|
typedef
|
|
UINT16
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_READ_UINT16)(
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Prototype of service that reads and returns a UINTN value.
|
|
|
|
@return The value read.
|
|
**/
|
|
typedef
|
|
UINTN
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_READ_UINTN)(
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Prototype of service that writes and returns a UINT16 value.
|
|
|
|
@param[in] Value The value to write.
|
|
|
|
@return The value written.
|
|
**/
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_WRITE_UINT16)(
|
|
IN UINT16 Value
|
|
);
|
|
|
|
/**
|
|
Prototype of service that writes and returns a UINTN value.
|
|
|
|
@param[in] Value The value to write.
|
|
|
|
@return The value written.
|
|
**/
|
|
typedef
|
|
UINTN
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN)(
|
|
IN UINTN Value
|
|
);
|
|
|
|
/**
|
|
Prototype of service that reads and returns an IA32_DESCRIPTOR.
|
|
|
|
@param[out] Ia32Descriptor Pointer to the descriptor read.
|
|
**/
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_READ_IA32_DESCRIPTOR)(
|
|
OUT IA32_DESCRIPTOR *Ia32Descriptor
|
|
);
|
|
|
|
/**
|
|
Prototype of service that writes an IA32_DESCRIPTOR.
|
|
|
|
@param[in] Ia32Descriptor Pointer to the descriptor to write.
|
|
**/
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_WRITE_IA32_DESCRIPTOR)(
|
|
IN CONST IA32_DESCRIPTOR *Ia32Descriptor
|
|
);
|
|
|
|
/**
|
|
Retrieves CPUID information.
|
|
|
|
Executes the CPUID instruction with EAX set to the value specified by Index.
|
|
This function always returns Index.
|
|
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.
|
|
This function is only available on IA-32 and x64.
|
|
|
|
@param Index The 32-bit value to load into EAX prior to invoking the CPUID
|
|
instruction.
|
|
@param Eax The pointer to the 32-bit EAX value returned by the CPUID
|
|
instruction. This is an optional parameter that may be NULL.
|
|
@param Ebx The pointer to the 32-bit EBX value returned by the CPUID
|
|
instruction. This is an optional parameter that may be NULL.
|
|
@param Ecx The pointer to the 32-bit ECX value returned by the CPUID
|
|
instruction. This is an optional parameter that may be NULL.
|
|
@param Edx The pointer to the 32-bit EDX value returned by the CPUID
|
|
instruction. This is an optional parameter that may be NULL.
|
|
|
|
@return Index.
|
|
|
|
**/
|
|
typedef
|
|
UINT32
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_CPUID)(
|
|
IN UINT32 Index,
|
|
OUT UINT32 *Eax, OPTIONAL
|
|
OUT UINT32 *Ebx, OPTIONAL
|
|
OUT UINT32 *Ecx, 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 The pointer to the 32-bit EAX value returned by the CPUID
|
|
instruction. This is an optional parameter that may be
|
|
NULL.
|
|
@param Ebx The pointer to the 32-bit EBX value returned by the CPUID
|
|
instruction. This is an optional parameter that may be
|
|
NULL.
|
|
@param Ecx The pointer to the 32-bit ECX value returned by the CPUID
|
|
instruction. This is an optional parameter that may be
|
|
NULL.
|
|
@param Edx The pointer to the 32-bit EDX value returned by the CPUID
|
|
instruction. This is an optional parameter that may be
|
|
NULL.
|
|
|
|
@return Index.
|
|
|
|
**/
|
|
typedef
|
|
UINT32
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_CPUID_EX)(
|
|
IN UINT32 Index,
|
|
IN UINT32 SubIndex,
|
|
OUT UINT32 *Eax, OPTIONAL
|
|
OUT UINT32 *Ebx, OPTIONAL
|
|
OUT UINT32 *Ecx, OPTIONAL
|
|
OUT UINT32 *Edx OPTIONAL
|
|
);
|
|
|
|
/**
|
|
Returns a 64-bit Machine Specific Register(MSR).
|
|
|
|
Reads and returns the 64-bit MSR specified by Index. No parameter checking is
|
|
performed on Index, and some Index values may cause CPU exceptions. The
|
|
caller must either guarantee that Index is valid, or the caller must set up
|
|
exception handlers to catch the exceptions. This function is only available
|
|
on IA-32 and x64.
|
|
|
|
@param Index The 32-bit MSR index to read.
|
|
|
|
@return The value of the MSR identified by Index.
|
|
|
|
**/
|
|
typedef
|
|
UINT64
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_READ_MSR_64)(
|
|
IN UINT32 Index
|
|
);
|
|
|
|
/**
|
|
Writes a 64-bit value to a Machine Specific Register(MSR), and returns the
|
|
value.
|
|
|
|
Writes the 64-bit value specified by Value to the MSR specified by Index. The
|
|
64-bit value written to the MSR is returned. No parameter checking is
|
|
performed on Index or Value, and some of these may cause CPU exceptions. The
|
|
caller must either guarantee that Index and Value are valid, or the caller
|
|
must establish proper exception handlers. This function is only available on
|
|
IA-32 and x64.
|
|
|
|
@param Index The 32-bit MSR index to write.
|
|
@param Value The 64-bit value to write to the MSR.
|
|
|
|
@return Value
|
|
|
|
**/
|
|
typedef
|
|
UINT64
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_WRITE_MSR_64)(
|
|
IN UINT32 Index,
|
|
IN UINT64 Value
|
|
);
|
|
|
|
/**
|
|
Reads the current value of a Performance Counter (PMC).
|
|
|
|
Reads and returns the current value of performance counter specified by
|
|
Index. This function is only available on IA-32 and x64.
|
|
|
|
@param Index The 32-bit Performance Counter index to read.
|
|
|
|
@return The value of the PMC specified by Index.
|
|
|
|
**/
|
|
typedef
|
|
UINT64
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_READ_PMC)(
|
|
IN UINT32 Index
|
|
);
|
|
|
|
/**
|
|
Sets up a monitor buffer that is used by AsmMwait().
|
|
|
|
Executes a MONITOR instruction with the register state specified by Eax, Ecx
|
|
and Edx. Returns Eax. This function is only available on IA-32 and x64.
|
|
|
|
@param Eax The value to load into EAX or RAX before executing the MONITOR
|
|
instruction.
|
|
@param Ecx The value to load into ECX or RCX before executing the MONITOR
|
|
instruction.
|
|
@param Edx The value to load into EDX or RDX before executing the MONITOR
|
|
instruction.
|
|
|
|
@return Eax
|
|
|
|
**/
|
|
typedef
|
|
UINTN
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_MONITOR)(
|
|
IN UINTN Eax,
|
|
IN UINTN Ecx,
|
|
IN UINTN Edx
|
|
);
|
|
|
|
/**
|
|
Executes an MWAIT instruction.
|
|
|
|
Executes an MWAIT instruction with the register state specified by Eax and
|
|
Ecx. Returns Eax. This function is only available on IA-32 and x64.
|
|
|
|
@param Eax The value to load into EAX or RAX before executing the MONITOR
|
|
instruction.
|
|
@param Ecx The value to load into ECX or RCX before executing the MONITOR
|
|
instruction.
|
|
|
|
@return Eax
|
|
|
|
**/
|
|
typedef
|
|
UINTN
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_MWAIT)(
|
|
IN UINTN Eax,
|
|
IN UINTN Ecx
|
|
);
|
|
|
|
/**
|
|
Flushes a cache line from all the instruction and data caches within the
|
|
coherency domain of the CPU.
|
|
|
|
Flushed the cache line specified by LinearAddress, and returns LinearAddress.
|
|
This function is only available on IA-32 and x64.
|
|
|
|
@param LinearAddress The address of the cache line to flush. If the CPU is
|
|
in a physical addressing mode, then LinearAddress is a
|
|
physical address. If the CPU is in a virtual
|
|
addressing mode, then LinearAddress is a virtual
|
|
address.
|
|
|
|
@return LinearAddress.
|
|
**/
|
|
typedef
|
|
VOID *
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_FLUSH_CACHE_LINE)(
|
|
IN VOID *LinearAddress
|
|
);
|
|
|
|
/**
|
|
Prototype of service that enables ot disables 32-bit paging modes.
|
|
|
|
@param EntryPoint A pointer to function to call with the new stack after
|
|
paging is enabled.
|
|
@param Context1 A pointer to the context to pass into the EntryPoint
|
|
function as the first parameter after paging is enabled.
|
|
@param Context2 A pointer to the context to pass into the EntryPoint
|
|
function as the second parameter after paging is enabled.
|
|
@param NewStack A pointer to the new stack to use for the EntryPoint
|
|
function after paging is enabled.
|
|
|
|
**/
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_PAGING_32)(
|
|
IN SWITCH_STACK_ENTRY_POINT EntryPoint,
|
|
IN VOID *Context1, OPTIONAL
|
|
IN VOID *Context2, OPTIONAL
|
|
IN VOID *NewStack
|
|
);
|
|
|
|
/**
|
|
Enables the 64-bit paging mode on the CPU.
|
|
|
|
Enables the 64-bit paging mode on the CPU. CR0, CR3, CR4, and the page tables
|
|
must be properly initialized prior to calling this service. This function
|
|
assumes the current execution mode is 32-bit protected mode with flat
|
|
descriptors. This function is only available on IA-32. After the 64-bit
|
|
paging mode is enabled, control is transferred to the function specified by
|
|
EntryPoint using the new stack specified by NewStack and passing in the
|
|
parameters specified by Context1 and Context2. Context1 and Context2 are
|
|
optional and may be 0. The function EntryPoint must never return.
|
|
|
|
If the current execution mode is not 32-bit protected mode with flat
|
|
descriptors, then ASSERT().
|
|
If EntryPoint is 0, then ASSERT().
|
|
If NewStack is 0, then ASSERT().
|
|
|
|
@param Cs The 16-bit selector to load in the CS before EntryPoint
|
|
is called. The descriptor in the GDT that this selector
|
|
references must be setup for long mode.
|
|
@param EntryPoint The 64-bit virtual address of the function to call with
|
|
the new stack after paging is enabled.
|
|
@param Context1 The 64-bit virtual address of the context to pass into
|
|
the EntryPoint function as the first parameter after
|
|
paging is enabled.
|
|
@param Context2 The 64-bit virtual address of the context to pass into
|
|
the EntryPoint function as the second parameter after
|
|
paging is enabled.
|
|
@param NewStack The 64-bit virtual address of the new stack to use for
|
|
the EntryPoint function after paging is enabled.
|
|
|
|
**/
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_ENABLE_PAGING_64)(
|
|
IN UINT16 Cs,
|
|
IN UINT64 EntryPoint,
|
|
IN UINT64 Context1, OPTIONAL
|
|
IN UINT64 Context2, OPTIONAL
|
|
IN UINT64 NewStack
|
|
);
|
|
|
|
/**
|
|
Disables the 64-bit paging mode on the CPU.
|
|
|
|
Disables the 64-bit paging mode on the CPU and returns to 32-bit protected
|
|
mode. This function assumes the current execution mode is 64-paging mode.
|
|
This function is only available on x64. After the 64-bit paging mode is
|
|
disabled, control is transferred to the function specified by EntryPoint
|
|
using the new stack specified by NewStack and passing in the parameters
|
|
specified by Context1 and Context2. Context1 and Context2 are optional and
|
|
may be 0. The function EntryPoint must never return.
|
|
|
|
If the current execution mode is not 64-bit paged mode, then ASSERT().
|
|
If EntryPoint is 0, then ASSERT().
|
|
If NewStack is 0, then ASSERT().
|
|
|
|
@param Cs The 16-bit selector to load in the CS before EntryPoint
|
|
is called. The descriptor in the GDT that this selector
|
|
references must be setup for 32-bit protected mode.
|
|
@param EntryPoint The 64-bit virtual address of the function to call with
|
|
the new stack after paging is disabled.
|
|
@param Context1 The 64-bit virtual address of the context to pass into
|
|
the EntryPoint function as the first parameter after
|
|
paging is disabled.
|
|
@param Context2 The 64-bit virtual address of the context to pass into
|
|
the EntryPoint function as the second parameter after
|
|
paging is disabled.
|
|
@param NewStack The 64-bit virtual address of the new stack to use for
|
|
the EntryPoint function after paging is disabled.
|
|
|
|
**/
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_DISABLE_PAGING_64)(
|
|
IN UINT16 Cs,
|
|
IN UINT32 EntryPoint,
|
|
IN UINT32 Context1, OPTIONAL
|
|
IN UINT32 Context2, OPTIONAL
|
|
IN UINT32 NewStack
|
|
);
|
|
|
|
/**
|
|
Retrieves the properties for 16-bit thunk functions.
|
|
|
|
Computes the size of the buffer and stack below 1MB required to use the
|
|
AsmPrepareThunk16(), AsmThunk16() and AsmPrepareAndThunk16() functions. This
|
|
buffer size is returned in RealModeBufferSize, and the stack size is returned
|
|
in ExtraStackSize. If parameters are passed to the 16-bit real mode code,
|
|
then the actual minimum stack size is ExtraStackSize plus the maximum number
|
|
of bytes that need to be passed to the 16-bit real mode code.
|
|
|
|
If RealModeBufferSize is NULL, then ASSERT().
|
|
If ExtraStackSize is NULL, then ASSERT().
|
|
|
|
@param RealModeBufferSize A pointer to the size of the buffer below 1MB
|
|
required to use the 16-bit thunk functions.
|
|
@param ExtraStackSize A pointer to the extra size of stack below 1MB
|
|
that the 16-bit thunk functions require for
|
|
temporary storage in the transition to and from
|
|
16-bit real mode.
|
|
|
|
**/
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_GET_THUNK_16_PROPERTIES)(
|
|
OUT UINT32 *RealModeBufferSize,
|
|
OUT UINT32 *ExtraStackSize
|
|
);
|
|
|
|
/**
|
|
Prototype of services that operates on a THUNK_CONTEXT structure.
|
|
|
|
@param ThunkContext A pointer to the context structure that describes the
|
|
16-bit real mode code to call.
|
|
|
|
**/
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_THUNK_16)(
|
|
IN OUT THUNK_CONTEXT *ThunkContext
|
|
);
|
|
|
|
/**
|
|
Patch the immediate operand of an IA32 or X64 instruction such that the byte,
|
|
word, dword or qword operand is encoded at the end of the instruction's
|
|
binary representation.
|
|
|
|
This function should be used to update object code that was compiled with
|
|
NASM from assembly source code. Example:
|
|
|
|
NASM source code:
|
|
|
|
mov eax, strict dword 0 ; the imm32 zero operand will be patched
|
|
ASM_PFX(gPatchCr3):
|
|
mov cr3, eax
|
|
|
|
C source code:
|
|
|
|
X86_ASSEMBLY_PATCH_LABEL gPatchCr3;
|
|
PatchInstructionX86 (gPatchCr3, AsmReadCr3 (), 4);
|
|
|
|
@param[out] InstructionEnd Pointer right past the instruction to patch. The
|
|
immediate operand to patch is expected to
|
|
comprise the trailing bytes of the instruction.
|
|
If InstructionEnd is closer to address 0 than
|
|
ValueSize permits, then ASSERT().
|
|
|
|
@param[in] PatchValue The constant to write to the immediate operand.
|
|
The caller is responsible for ensuring that
|
|
PatchValue can be represented in the byte, word,
|
|
dword or qword operand (as indicated through
|
|
ValueSize); otherwise ASSERT().
|
|
|
|
@param[in] ValueSize The size of the operand in bytes; must be 1, 2,
|
|
4, or 8. ASSERT() otherwise.
|
|
**/
|
|
typedef
|
|
VOID
|
|
(EFIAPI *UNIT_TEST_HOST_BASE_LIB_ASM_PATCH_INSTRUCTION_X86)(
|
|
OUT X86_ASSEMBLY_PATCH_LABEL *InstructionEnd,
|
|
IN UINT64 PatchValue,
|
|
IN UINTN ValueSize
|
|
);
|
|
|
|
///
|
|
/// Common services
|
|
///
|
|
typedef struct {
|
|
UNIT_TEST_HOST_BASE_LIB_VOID EnableInterrupts;
|
|
UNIT_TEST_HOST_BASE_LIB_VOID DisableInterrupts;
|
|
UNIT_TEST_HOST_BASE_LIB_VOID EnableDisableInterrupts;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_BOOLEAN GetInterruptState;
|
|
} UNIT_TEST_HOST_BASE_LIB_COMMON;
|
|
|
|
///
|
|
/// IA32/X64 services
|
|
///
|
|
typedef struct {
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_CPUID AsmCpuid;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_CPUID_EX AsmCpuidEx;
|
|
UNIT_TEST_HOST_BASE_LIB_VOID AsmDisableCache;
|
|
UNIT_TEST_HOST_BASE_LIB_VOID AsmEnableCache;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_READ_MSR_64 AsmReadMsr64;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_WRITE_MSR_64 AsmWriteMsr64;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadCr0;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadCr2;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadCr3;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadCr4;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteCr0;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteCr2;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteCr3;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteCr4;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadDr0;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadDr1;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadDr2;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadDr3;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadDr4;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadDr5;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadDr6;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINTN AsmReadDr7;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteDr0;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteDr1;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteDr2;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteDr3;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteDr4;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteDr5;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteDr6;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINTN AsmWriteDr7;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINT16 AsmReadCs;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINT16 AsmReadDs;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINT16 AsmReadEs;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINT16 AsmReadFs;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINT16 AsmReadGs;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINT16 AsmReadSs;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINT16 AsmReadTr;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_READ_IA32_DESCRIPTOR AsmReadGdtr;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_WRITE_IA32_DESCRIPTOR AsmWriteGdtr;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_READ_IA32_DESCRIPTOR AsmReadIdtr;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_WRITE_IA32_DESCRIPTOR AsmWriteIdtr;
|
|
UNIT_TEST_HOST_BASE_LIB_READ_UINT16 AsmReadLdtr;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINT16 AsmWriteLdtr;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_READ_PMC AsmReadPmc;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_MONITOR AsmMonitor;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_MWAIT AsmMwait;
|
|
UNIT_TEST_HOST_BASE_LIB_VOID AsmWbinvd;
|
|
UNIT_TEST_HOST_BASE_LIB_VOID AsmInvd;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_FLUSH_CACHE_LINE AsmFlushCacheLine;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_PAGING_32 AsmEnablePaging32;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_PAGING_32 AsmDisablePaging32;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_ENABLE_PAGING_64 AsmEnablePaging64;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_DISABLE_PAGING_64 AsmDisablePaging64;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_GET_THUNK_16_PROPERTIES AsmGetThunk16Properties;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_THUNK_16 AsmPrepareThunk16;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_THUNK_16 AsmThunk16;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_THUNK_16 AsmPrepareAndThunk16;
|
|
UNIT_TEST_HOST_BASE_LIB_WRITE_UINT16 AsmWriteTr;
|
|
UNIT_TEST_HOST_BASE_LIB_VOID AsmLfence;
|
|
UNIT_TEST_HOST_BASE_LIB_ASM_PATCH_INSTRUCTION_X86 PatchInstructionX86;
|
|
} UNIT_TEST_HOST_BASE_LIB_X86;
|
|
|
|
///
|
|
/// Data structure that contains pointers structures of common services and CPU
|
|
/// architctuire specific services. Support for additional CPU architectures
|
|
/// can be added to the end of this structure.
|
|
///
|
|
typedef struct {
|
|
UNIT_TEST_HOST_BASE_LIB_COMMON *Common;
|
|
UNIT_TEST_HOST_BASE_LIB_X86 *X86;
|
|
} UNIT_TEST_HOST_BASE_LIB;
|
|
|
|
extern UNIT_TEST_HOST_BASE_LIB gUnitTestHostBaseLib;
|
|
|
|
#endif
|