Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.
Portions copyright (c) 2008 - 2009, Apple Inc. 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.
VOID* EFIAPI AsmFlushCacheLine | ( | IN VOID * | LinearAddress | ) |
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.
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. |
References AsmCpuid(), BIT19, and NULL.
Referenced by WriteBackInvalidateDataCacheRange().
VOID EFIAPI AsmInvd | ( | VOID | ) |
Executes a INVD instruction.
Executes a INVD instruction. This function is only available on IA-32 and X64.
Referenced by InvalidateDataCache().
UINTN EFIAPI AsmReadCr0 | ( | VOID | ) |
Reads the current value of the Control Register 0 (CR0).
Reads and returns the current value of CR0. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
UINTN EFIAPI AsmReadCr2 | ( | VOID | ) |
Reads the current value of the Control Register 2 (CR2).
Reads and returns the current value of CR2. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
UINTN EFIAPI AsmReadCr3 | ( | VOID | ) |
Reads the current value of the Control Register 3 (CR3).
Reads and returns the current value of CR3. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
Referenced by CpuFlushTlb().
UINTN EFIAPI AsmReadCr4 | ( | VOID | ) |
Reads the current value of the Control Register 4 (CR4).
Reads and returns the current value of CR4. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
Reads the current value of Code Segment Register (CS).
Reads and returns the current value of CS. This function is only available on IA-32 and X64.
UINTN EFIAPI AsmReadDr0 | ( | VOID | ) |
Reads the current value of Debug Register 0 (DR0).
Reads and returns the current value of DR0. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
UINTN EFIAPI AsmReadDr1 | ( | VOID | ) |
Reads the current value of Debug Register 1 (DR1).
Reads and returns the current value of DR1. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
UINTN EFIAPI AsmReadDr2 | ( | VOID | ) |
Reads the current value of Debug Register 2 (DR2).
Reads and returns the current value of DR2. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
UINTN EFIAPI AsmReadDr3 | ( | VOID | ) |
Reads the current value of Debug Register 3 (DR3).
Reads and returns the current value of DR3. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
UINTN EFIAPI AsmReadDr4 | ( | VOID | ) |
Reads the current value of Debug Register 4 (DR4).
Reads and returns the current value of DR4. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
UINTN EFIAPI AsmReadDr5 | ( | VOID | ) |
Reads the current value of Debug Register 5 (DR5).
Reads and returns the current value of DR5. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
UINTN EFIAPI AsmReadDr6 | ( | VOID | ) |
Reads the current value of Debug Register 6 (DR6).
Reads and returns the current value of DR6. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
UINTN EFIAPI AsmReadDr7 | ( | VOID | ) |
Reads the current value of Debug Register 7 (DR7).
Reads and returns the current value of DR7. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
Reads the current value of Data Segment Register (DS).
Reads and returns the current value of DS. This function is only available on IA-32 and X64.
UINTN EFIAPI AsmReadEflags | ( | VOID | ) |
Reads the current value of the EFLAGS register.
Reads and returns the current value of the EFLAGS register. This function is only available on IA-32 and X64. This returns a 32-bit value on IA-32 and a 64-bit value on X64.
Referenced by GetInterruptState().
Reads the current value of Extra Segment Register (ES).
Reads and returns the current value of ES. This function is only available on IA-32 and X64.
Reads the current value of FS Data Segment Register (FS).
Reads and returns the current value of FS. This function is only available on IA-32 and X64.
Reads the current value of GS Data Segment Register (GS).
Reads and returns the current value of GS. This function is only available on IA-32 and X64.
Reads the current Local Descriptor Table Register(LDTR) selector.
Reads and returns the current 16-bit LDTR descriptor value. This function is only available on IA-32 and X64.
Reads the current value of 64-bit MMX Register #0 (MM0).
Reads and returns the current value of MM0. This function is only available on IA-32 and X64.
Reads the current value of 64-bit MMX Register #1 (MM1).
Reads and returns the current value of MM1. This function is only available on IA-32 and X64.
Reads the current value of 64-bit MMX Register #2 (MM2).
Reads and returns the current value of MM2. This function is only available on IA-32 and X64.
Reads the current value of 64-bit MMX Register #3 (MM3).
Reads and returns the current value of MM3. This function is only available on IA-32 and X64.
Reads the current value of 64-bit MMX Register #4 (MM4).
Reads and returns the current value of MM4. This function is only available on IA-32 and X64.
Reads the current value of 64-bit MMX Register #5 (MM5).
Reads and returns the current value of MM5. This function is only available on IA-32 and X64.
Reads the current value of 64-bit MMX Register #6 (MM6).
Reads and returns the current value of MM6. This function is only available on IA-32 and X64.
Reads the current value of 64-bit MMX Register #7 (MM7).
Reads and returns the current value of MM7. This function is only available on IA-32 and X64.
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.
Index | The 32-bit MSR index to read. |
Referenced by AsmMsrAnd64(), AsmMsrAndThenOr64(), AsmMsrBitFieldAnd64(), AsmMsrBitFieldAndThenOr64(), AsmMsrBitFieldOr64(), AsmMsrBitFieldRead64(), AsmMsrBitFieldWrite64(), AsmMsrOr64(), and AsmReadMsr32().
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.
Index | The 32-bit Performance Counter index to read. |
Reads the current value of Stack Segment Register (SS).
Reads and returns the current value of SS. This function is only available on IA-32 and X64.
Reads the current value of Task Register (TR).
Reads and returns the current value of TR. This function is only available on IA-32 and X64.
Reads the current value of Time Stamp Counter (TSC).
Reads and returns the current value of TSC. This function is only available on IA-32 and X64.
VOID EFIAPI AsmWbinvd | ( | VOID | ) |
Executes a WBINVD instruction.
Executes a WBINVD instruction. This function is only available on IA-32 and X64.
Referenced by WriteBackInvalidateDataCache(), and WriteBackInvalidateDataCacheRange().
UINTN EFIAPI AsmWriteCr0 | ( | UINTN | Cr0 | ) |
Writes a value to Control Register 0 (CR0).
Writes and returns a new value to CR0. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Cr0 | The value to write to CR0. |
UINTN EFIAPI AsmWriteCr2 | ( | UINTN | Cr2 | ) |
Writes a value to Control Register 2 (CR2).
Writes and returns a new value to CR2. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Cr2 | The value to write to CR2. |
UINTN EFIAPI AsmWriteCr3 | ( | UINTN | Cr3 | ) |
Writes a value to Control Register 3 (CR3).
Writes and returns a new value to CR3. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Cr3 | The value to write to CR3. |
Referenced by CpuFlushTlb().
UINTN EFIAPI AsmWriteCr4 | ( | UINTN | Cr4 | ) |
Writes a value to Control Register 4 (CR4).
Writes and returns a new value to CR4. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Cr4 | The value to write to CR4. |
UINTN EFIAPI AsmWriteDr0 | ( | UINTN | Dr0 | ) |
Writes a value to Debug Register 0 (DR0).
Writes and returns a new value to DR0. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Dr0 | The value to write to Dr0. |
UINTN EFIAPI AsmWriteDr1 | ( | UINTN | Dr1 | ) |
Writes a value to Debug Register 1 (DR1).
Writes and returns a new value to DR1. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Dr1 | The value to write to Dr1. |
UINTN EFIAPI AsmWriteDr2 | ( | UINTN | Dr2 | ) |
Writes a value to Debug Register 2 (DR2).
Writes and returns a new value to DR2. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Dr2 | The value to write to Dr2. |
UINTN EFIAPI AsmWriteDr3 | ( | UINTN | Dr3 | ) |
Writes a value to Debug Register 3 (DR3).
Writes and returns a new value to DR3. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Dr3 | The value to write to Dr3. |
UINTN EFIAPI AsmWriteDr4 | ( | UINTN | Dr4 | ) |
Writes a value to Debug Register 4 (DR4).
Writes and returns a new value to DR4. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Dr4 | The value to write to Dr4. |
UINTN EFIAPI AsmWriteDr5 | ( | UINTN | Dr5 | ) |
Writes a value to Debug Register 5 (DR5).
Writes and returns a new value to DR5. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Dr5 | The value to write to Dr5. |
UINTN EFIAPI AsmWriteDr6 | ( | UINTN | Dr6 | ) |
Writes a value to Debug Register 6 (DR6).
Writes and returns a new value to DR6. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Dr6 | The value to write to Dr6. |
UINTN EFIAPI AsmWriteDr7 | ( | UINTN | Dr7 | ) |
Writes a value to Debug Register 7 (DR7).
Writes and returns a new value to DR7. This function is only available on IA-32 and X64. This writes a 32-bit value on IA-32 and a 64-bit value on X64.
Dr7 | The value to write to Dr7. |
Writes the current Local Descriptor Table Register (GDTR) selector.
Writes and the current LDTR descriptor specified by Ldtr. This function is only available on IA-32 and X64.
Ldtr | 16-bit LDTR selector value. |
Writes the current value of 64-bit MMX Register #0 (MM0).
Writes the current value of MM0. This function is only available on IA32 and X64.
Value | The 64-bit value to write to MM0. |
Writes the current value of 64-bit MMX Register #1 (MM1).
Writes the current value of MM1. This function is only available on IA32 and X64.
Value | The 64-bit value to write to MM1. |
Writes the current value of 64-bit MMX Register #2 (MM2).
Writes the current value of MM2. This function is only available on IA32 and X64.
Value | The 64-bit value to write to MM2. |
Writes the current value of 64-bit MMX Register #3 (MM3).
Writes the current value of MM3. This function is only available on IA32 and X64.
Value | The 64-bit value to write to MM3. |
Writes the current value of 64-bit MMX Register #4 (MM4).
Writes the current value of MM4. This function is only available on IA32 and X64.
Value | The 64-bit value to write to MM4. |
Writes the current value of 64-bit MMX Register #5 (MM5).
Writes the current value of MM5. This function is only available on IA32 and X64.
Value | The 64-bit value to write to MM5. |
Writes the current value of 64-bit MMX Register #6 (MM6).
Writes the current value of MM6. This function is only available on IA32 and X64.
Value | The 64-bit value to write to MM6. |
Writes the current value of 64-bit MMX Register #7 (MM7).
Writes the current value of MM7. This function is only available on IA32 and X64.
Value | The 64-bit value to write to MM7. |
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.
Index | The 32-bit MSR index to write. | |
Value | The 64-bit value to write to the MSR. |
Referenced by AsmMsrAnd64(), AsmMsrAndThenOr64(), AsmMsrBitFieldAnd64(), AsmMsrBitFieldAndThenOr64(), AsmMsrBitFieldOr64(), AsmMsrBitFieldWrite64(), AsmMsrOr64(), and AsmWriteMsr32().
VOID EFIAPI CpuBreakpoint | ( | VOID | ) |
Generates a breakpoint on the CPU.
Generates a breakpoint on the CPU. The breakpoint must be implemented such that code can resume normal execution after the breakpoint.
Referenced by __stack_chk_fail(), DebugAssert(), and GetPciExpressAddress().
VOID EFIAPI CpuPause | ( | VOID | ) |
Requests CPU to pause for a short period of time.
Requests CPU to pause for a short period of time. Typically used in MP systems to prevent memory starvation while waiting for a spin lock.
Referenced by AcquireSpinLock(), InternalX86Delay(), and PeriodicSmiDispatchFunction().
VOID EFIAPI DisableInterrupts | ( | VOID | ) |
Disables CPU interrupts.
Disables CPU interrupts.
Referenced by EnableDisableInterrupts(), SaveAndDisableInterrupts(), and SetInterruptState().
VOID EFIAPI EnableInterrupts | ( | VOID | ) |
Enables CPU interrupts.
Enables CPU interrupts.
Referenced by EnableDisableInterrupts(), and SetInterruptState().
VOID EFIAPI InternalX86FxRestore | ( | IN CONST IA32_FX_BUFFER * | Buffer | ) |
Restores the current floating point/SSE/SSE2 context from a buffer.
Restores the current floating point/SSE/SSE2 state from the buffer specified by Buffer. Buffer must be aligned on a 16-byte boundary. This function is only available on IA-32 and X64.
Buffer | The pointer to a buffer to save the floating point/SSE/SSE2 context. |
Referenced by AsmFxRestore().
VOID EFIAPI InternalX86FxSave | ( | OUT IA32_FX_BUFFER * | Buffer | ) |
Save the current floating point/SSE/SSE2 context to a buffer.
Saves the current floating point/SSE/SSE2 state to the buffer specified by Buffer. Buffer must be aligned on a 16-byte boundary. This function is only available on IA-32 and X64.
Buffer | The pointer to a buffer to save the floating point/SSE/SSE2 context. |
Referenced by AsmFxSave().
VOID EFIAPI InternalX86ReadGdtr | ( | OUT IA32_DESCRIPTOR * | Gdtr | ) |
Reads the current Global Descriptor Table Register(GDTR) descriptor.
Reads and returns the current GDTR descriptor and returns it in Gdtr. This function is only available on IA-32 and X64.
Gdtr | The pointer to a GDTR descriptor. |
Referenced by AsmReadGdtr().
VOID EFIAPI InternalX86ReadIdtr | ( | OUT IA32_DESCRIPTOR * | Idtr | ) |
Reads the current Interrupt Descriptor Table Register(GDTR) descriptor.
Reads and returns the current IDTR descriptor and returns it in Idtr. This function is only available on IA-32 and X64.
Idtr | The pointer to a IDTR descriptor. |
Referenced by AsmReadIdtr().
VOID EFIAPI InternalX86WriteGdtr | ( | IN CONST IA32_DESCRIPTOR * | Gdtr | ) |
Writes the current Global Descriptor Table Register (GDTR) descriptor.
Writes and the current GDTR descriptor specified by Gdtr. This function is only available on IA-32 and X64.
Gdtr | The pointer to a GDTR descriptor. |
Referenced by AsmWriteGdtr().
VOID EFIAPI InternalX86WriteIdtr | ( | IN CONST IA32_DESCRIPTOR * | Idtr | ) |
Writes the current Interrupt Descriptor Table Register(GDTR) descriptor.
Writes the current IDTR descriptor and returns it in Idtr. This function is only available on IA-32 and X64.
Idtr | The pointer to a IDTR descriptor. |
Referenced by AsmWriteIdtr().
VOID EFIAPI MemoryFence | ( | VOID | ) |
Used to serialize load and store operations.
All loads and stores that proceed calls to this function are guaranteed to be globally visible when this function returns.
Referenced by MmioRead16(), MmioRead32(), MmioRead64(), MmioRead8(), MmioWrite16(), MmioWrite32(), MmioWrite64(), and MmioWrite8().