Committed in 14131 & 14132. (Which has been mirrored to git now. :) Thanks!
-Jordan On Mon, Jan 28, 2013 at 3:31 PM, David Woodhouse <[email protected]> wrote: > > 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 > > > ------------------------------------------------------------------------------ > 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 > ------------------------------------------------------------------------------ Free Next-Gen Firewall Hardware Offer Buy your Sophos next-gen firewall before the end March 2013 and get the hardware for free! Learn more. http://p.sf.net/sfu/sophos-d2d-feb _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
