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

Reply via email to