Upload BSD-licensed Vlv2TbltDevicePkg and Vlv2DeviceRefCodePkg to
https://svn.code.sf.net/p/edk2/code/trunk/edk2/, which are for MinnowBoard MAX open source project. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: David Wei <david.wei@intel.com> Reviewed-by: Mike Wu <mike.wu@intel.com> Reviewed-by: Hot Tian <hot.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16599 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
212
Vlv2TbltDevicePkg/Library/CpuIA32Lib/X64/Cpu.S
Normal file
212
Vlv2TbltDevicePkg/Library/CpuIA32Lib/X64/Cpu.S
Normal file
@@ -0,0 +1,212 @@
|
||||
#
|
||||
#
|
||||
# Copyright (c) 1999 - 2014, 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 that 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:
|
||||
#*
|
||||
#* Cpu.asm
|
||||
#*
|
||||
#* Abstract:
|
||||
#*
|
||||
#------------------------------------------------------------------------------
|
||||
##include <EfiBind.h>
|
||||
|
||||
.globl ASM_PFX(EfiHalt)
|
||||
.globl ASM_PFX(EfiWbinvd)
|
||||
.globl ASM_PFX(EfiInvd)
|
||||
.globl ASM_PFX(EfiCpuid)
|
||||
.globl ASM_PFX(EfiReadTsc)
|
||||
.globl ASM_PFX(EfiDisableCache)
|
||||
.globl ASM_PFX(EfiEnableCache)
|
||||
.globl ASM_PFX(EfiReadMsr)
|
||||
.globl ASM_PFX(EfiWriteMsr)
|
||||
.globl ASM_PFX(EfiGetEflags)
|
||||
.globl ASM_PFX(EfiDisableInterrupts)
|
||||
.globl ASM_PFX(EfiEnableInterrupts)
|
||||
.globl ASM_PFX(EfiCpuidExt)
|
||||
|
||||
.text
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EfiHalt (
|
||||
# VOID
|
||||
# )
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiHalt):
|
||||
hlt
|
||||
retq
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EfiWbinvd (
|
||||
# VOID
|
||||
# )
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiWbinvd):
|
||||
wbinvd
|
||||
retq
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EfiInvd (
|
||||
# VOID
|
||||
# )
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiInvd):
|
||||
invd
|
||||
retq
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EfiCpuid (
|
||||
# IN UINT32 RegisterInEax, // rcx
|
||||
# OUT EFI_CPUID_REGISTER *Reg OPTIONAL // rdx
|
||||
# )
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiCpuid):
|
||||
push %rbx
|
||||
mov %rdx,%r8
|
||||
mov %rcx,%rax
|
||||
cpuid
|
||||
cmp $0x0,%r8
|
||||
je _Exit
|
||||
mov %eax,(%r8)
|
||||
mov %ebx,0x4(%r8)
|
||||
mov %ecx,0x8(%r8)
|
||||
mov %edx,0xc(%r8)
|
||||
_Exit:
|
||||
pop %rbx
|
||||
retq
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# UINT64
|
||||
# EfiReadMsr (
|
||||
# IN UINT32 Index, // rcx
|
||||
# )
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiReadMsr):
|
||||
rdmsr
|
||||
shl $0x20,%rdx
|
||||
or %rdx,%rax
|
||||
retq
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EfiWriteMsr (
|
||||
# IN UINT32 Index, // rcx
|
||||
# IN UINT64 Value // rdx
|
||||
# )
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiWriteMsr):
|
||||
mov %rdx,%rax
|
||||
sar $0x20,%rdx
|
||||
wrmsr
|
||||
retq
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# UINT64
|
||||
# EfiReadTsc (
|
||||
# VOID
|
||||
# );
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiReadTsc):
|
||||
rdtsc
|
||||
shl $0x20,%rax
|
||||
shrd $0x20,%rdx,%rax
|
||||
retq
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EfiDisableCache (
|
||||
# VOID
|
||||
# );
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiDisableCache):
|
||||
# added a check to see if cache is already disabled. If it is, then skip.
|
||||
mov %cr0,%rax
|
||||
and $0x60000000,%rax
|
||||
cmp $0x0,%rax
|
||||
jne 1f
|
||||
mov %cr0,%rax
|
||||
or $0x60000000,%rax
|
||||
mov %rax,%cr0
|
||||
wbinvd
|
||||
1:
|
||||
retq
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EfiEnableCache (
|
||||
# VOID
|
||||
# );
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiEnableCache):
|
||||
wbinvd
|
||||
mov %cr0,%rax
|
||||
and $0xffffffff9fffffff,%rax
|
||||
mov %rax,%cr0
|
||||
retq
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# UINTN
|
||||
# EfiGetEflags (
|
||||
# VOID
|
||||
# );
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiGetEflags):
|
||||
pushfq
|
||||
pop %rax
|
||||
retq
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EfiDisableInterrupts (
|
||||
# VOID
|
||||
# );
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiDisableInterrupts):
|
||||
cli
|
||||
ret
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EfiEnableInterrupts (
|
||||
# VOID
|
||||
# );
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiEnableInterrupts):
|
||||
sti
|
||||
ret
|
||||
#------------------------------------------------------------------------------
|
||||
# VOID
|
||||
# EfiCpuidExt (
|
||||
# IN UINT32 RegisterInEax,
|
||||
# IN UINT32 CacheLevel,
|
||||
# OUT EFI_CPUID_REGISTER *Regs
|
||||
# )
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_PFX(EfiCpuidExt):
|
||||
push %rbx
|
Reference in New Issue
Block a user