Take 2. This time the corresponding flags have actually been merged into the Linux x86 maintainers' git tree.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: David Woodhouse <[email protected]> --- OvmfPkg/Include/IndustryStandard/LinuxBzimage.h | 3 ++- OvmfPkg/Library/LoadLinuxLib/Ia32/JumpToKernel.S | 19 ++++++++++++++++- OvmfPkg/Library/LoadLinuxLib/Ia32/JumpToKernel.asm | 21 ++++++++++++++++++- OvmfPkg/Library/LoadLinuxLib/Linux.c | 16 +++++++++++---- OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h | 11 +++++++++- OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.S | 22 ++++++++++++++++++++ OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.asm | 24 ++++++++++++++++++++++ 7 files changed, 108 insertions(+), 8 deletions(-) diff --git a/OvmfPkg/Include/IndustryStandard/LinuxBzimage.h b/OvmfPkg/Include/IndustryStandard/LinuxBzimage.h index d16b112..29362de 100644 --- a/OvmfPkg/Include/IndustryStandard/LinuxBzimage.h +++ b/OvmfPkg/Include/IndustryStandard/LinuxBzimage.h @@ -55,7 +55,8 @@ struct setup_header { UINT32 ramdisk_max; /* Highest legal initrd address */ UINT32 kernel_alignment; /* Physical addr alignment required for kernel */ UINT8 relocatable_kernel; /* Whether kernel is relocatable or not */ - UINT8 _pad2[3]; + UINT8 min_alignment; + UINT16 xloadflags; UINT32 cmdline_size; UINT32 hardware_subarch; UINT64 hardware_subarch_data; diff --git a/OvmfPkg/Library/LoadLinuxLib/Ia32/JumpToKernel.S b/OvmfPkg/Library/LoadLinuxLib/Ia32/JumpToKernel.S index b8cd4ca..f7440f7 100644 --- a/OvmfPkg/Library/LoadLinuxLib/Ia32/JumpToKernel.S +++ b/OvmfPkg/Library/LoadLinuxLib/Ia32/JumpToKernel.S @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ # -# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -13,6 +13,7 @@ #------------------------------------------------------------------------------ ASM_GLOBAL ASM_PFX(JumpToKernel) +ASM_GLOBAL ASM_PFX(JumpToUefiKernel) #------------------------------------------------------------------------------ # VOID @@ -27,3 +28,19 @@ ASM_PFX(JumpToKernel): calll 0x4(%esp) ret +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# JumpToUefiKernel ( +# EFI_HANDLE ImageHandle, +# EFI_SYSTEM_TABLE *SystemTable, +# VOID *KernelBootParams, +# VOID *KernelStart +# ); +#------------------------------------------------------------------------------ +ASM_PFX(JumpToUefiKernel): + movl 0xc(%esp), %eax + movl 0x264(%eax), %eax + addl 0x10(%esp), %eax + jmp %eax + diff --git a/OvmfPkg/Library/LoadLinuxLib/Ia32/JumpToKernel.asm b/OvmfPkg/Library/LoadLinuxLib/Ia32/JumpToKernel.asm index a8f3965..21d0c4e 100644 --- a/OvmfPkg/Library/LoadLinuxLib/Ia32/JumpToKernel.asm +++ b/OvmfPkg/Library/LoadLinuxLib/Ia32/JumpToKernel.asm @@ -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 ; are licensed and made available under the terms and conditions of the BSD License @@ -32,4 +32,23 @@ JumpToKernel PROC JumpToKernel ENDP +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; JumpToUefiKernel ( +; EFI_HANDLE ImageHandle, +; EFI_SYSTEM_TABLE *SystemTable, +; VOID *KernelBootParams, +; VOID *KernelStart +; ); +;------------------------------------------------------------------------------ +JumpToUefiKernel PROC + + mov eax, [esp + 12] + mov eax, [eax + 264h] + add eax, [esp + 16] + jmp eax + +JumpToUefiKernel ENDP + END diff --git a/OvmfPkg/Library/LoadLinuxLib/Linux.c b/OvmfPkg/Library/LoadLinuxLib/Linux.c index 1da5507..d64b5bc 100644 --- a/OvmfPkg/Library/LoadLinuxLib/Linux.c +++ b/OvmfPkg/Library/LoadLinuxLib/Linux.c @@ -604,14 +604,11 @@ SetupGraphics ( STATIC EFI_STATUS SetupLinuxBootParams ( - IN VOID *Kernel, IN OUT struct boot_params *Bp ) { SetupGraphics (Bp); - Bp->hdr.code32_start = (UINT32)(UINTN) Kernel; - SetupLinuxMemmap (Bp); return EFI_SUCCESS; @@ -644,7 +641,18 @@ LoadLinux ( InitLinuxDescriptorTables (); - SetupLinuxBootParams (Kernel, (struct boot_params*) KernelSetup); + Bp->hdr.code32_start = (UINT32)(UINTN) Kernel; + if (Bp->hdr.version >= 0x20c && Bp->hdr.handover_offset && + (Bp->hdr.xloadflags & sizeof(long))) { + DEBUG ((EFI_D_INFO, "Jumping to kernel EFI handover point at ofs %x\n", Bp->hdr.handover_offset)); + + DisableInterrupts (); + JumpToUefiKernel ((VOID*) gImageHandle, (VOID*) gST, KernelSetup, Kernel); + } + // + // Old kernels without EFI handover protocol + // + SetupLinuxBootParams (KernelSetup); DEBUG ((EFI_D_INFO, "Jumping to kernel\n")); DisableInterrupts (); diff --git a/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h b/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h index f869797..045cbf9 100644 --- a/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h +++ b/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h @@ -1,7 +1,7 @@ /** @file Boot UEFI Linux. - Copyright (c) 2008 - 2011, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2008 - 2013, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -37,6 +37,15 @@ JumpToKernel ( ); VOID +EFIAPI +JumpToUefiKernel ( + EFI_HANDLE ImageHandle, + EFI_SYSTEM_TABLE *SystemTable, + VOID *KernelBootParams, + VOID *KernelStart + ); + +VOID InitLinuxDescriptorTables ( VOID ); diff --git a/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.S b/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.S index edc6e7b..06d0a1f 100644 --- a/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.S +++ b/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.S @@ -13,6 +13,7 @@ #------------------------------------------------------------------------------ ASM_GLOBAL ASM_PFX(JumpToKernel) +ASM_GLOBAL ASM_PFX(JumpToUefiKernel) #------------------------------------------------------------------------------ # VOID @@ -67,3 +68,24 @@ ASM_PFX(JumpToKernel): ret .code64 +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# JumpToUefiKernel ( +# EFI_HANDLE ImageHandle, +# EFI_SYSTEM_TABLE *SystemTable, +# VOID *KernelBootParams, +# VOID *KernelStart +# ); +#------------------------------------------------------------------------------ +ASM_PFX(JumpToUefiKernel): + movq %rcx, %rdi + movq %rdx, %rsi + movq %r8, %rdx + xor %rax, %rax + movl 0x264(%r8), %eax + addq %rax, %r9 + addq $0x200, %r9 + callq %r9 + ret + diff --git a/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.asm b/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.asm index bcf6260..fc07eab 100644 --- a/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.asm +++ b/OvmfPkg/Library/LoadLinuxLib/X64/JumpToKernel.asm @@ -68,4 +68,28 @@ JumpToKernel PROC JumpToKernel ENDP +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; JumpToUefiKernel ( +; EFI_HANDLE ImageHandle, // rcx +; EFI_SYSTEM_TABLE *SystemTable, // rdx +; VOID *KernelBootParams // r8 +; VOID *KernelStart, // r9 +; ); +;------------------------------------------------------------------------------ +JumpToUefiKernel PROC + + mov rdi, rcx + mov rsi, rdx + mov rdx, r8 + xor rax, rax + mov eax, [r8 + 264h] + add r9, rax + add r9, 200h + call r9 + ret + +JumpToUefiKernel ENDP + END -- 1.8.0.2 -- dwmw2
smime.p7s
Description: S/MIME cryptographic signature
------------------------------------------------------------------------------ Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft MVPs and experts. ON SALE this month only -- learn more at: http://p.sf.net/sfu/learnnow-d2d
_______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
