On 03/11/2015 22:01, Laszlo Ersek wrote:
> From: Paolo Bonzini <pbonz...@redhat.com>
> 
> The descriptor format is different and the assembly source is
> converted to nasm, but otherwise there is no difference.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>

Missing your SoB.

Paolo

> ---
> 
> Notes:
>     v3:
>     - new in v3
> 
>  OvmfPkg/QuarkPort/CpuS3DataDxe/CpuS3DataDxe.inf      |   5 +
>  OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecificDef.h |  59 +++++++++++
>  OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecific.c    | 108 
> ++++++++++++++++++++
>  OvmfPkg/QuarkPort/CpuS3DataDxe/X64/CpuAsm.nasm       |  58 +++++++++++
>  4 files changed, 230 insertions(+)
> 
> diff --git a/OvmfPkg/QuarkPort/CpuS3DataDxe/CpuS3DataDxe.inf 
> b/OvmfPkg/QuarkPort/CpuS3DataDxe/CpuS3DataDxe.inf
> index 2610a63..4bec056 100644
> --- a/OvmfPkg/QuarkPort/CpuS3DataDxe/CpuS3DataDxe.inf
> +++ b/OvmfPkg/QuarkPort/CpuS3DataDxe/CpuS3DataDxe.inf
> @@ -63,6 +63,11 @@ [Sources.Ia32]
>    IA32/ArchSpecificDef.h
>    IA32/ArchSpecific.c
>  
> +[Sources.X64]
> +  X64/CpuAsm.nasm
> +  X64/ArchSpecificDef.h
> +  X64/ArchSpecific.c
> +
>  [Packages]
>    MdePkg/MdePkg.dec
>    IntelFrameworkPkg/IntelFrameworkPkg.dec
> diff --git a/OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecificDef.h 
> b/OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecificDef.h
> new file mode 100644
> index 0000000..5ea4cf6
> --- /dev/null
> +++ b/OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecificDef.h
> @@ -0,0 +1,59 @@
> +/** @file
> +
> +Copyright (C) 2015, Red Hat, Inc.
> +Copyright (c) 2013-2015 Intel Corporation.
> +
> +Redistribution and use in source and binary forms, with or without
> +modification, are permitted provided that the following conditions
> +are met:
> +
> +* Redistributions of source code must retain the above copyright
> +notice, this list of conditions and the following disclaimer.
> +* Redistributions in binary form must reproduce the above copyright
> +notice, this list of conditions and the following disclaimer in
> +the documentation and/or other materials provided with the
> +distribution.
> +* Neither the name of Intel Corporation nor the names of its
> +contributors may be used to endorse or promote products derived
> +from this software without specific prior written permission.
> +
> +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +
> +Module Name:
> +
> +  ProcessorDef.h
> +
> +Abstract:
> +
> +  Definition for X64 processor
> +
> +**/
> +
> +#ifndef _PROCESSOR_DEF_H_
> +#define _PROCESSOR_DEF_H_
> +
> +#pragma pack(1)
> +
> +typedef struct {
> +  UINT16  OffsetLow;
> +  UINT16  SegmentSelector;
> +  UINT16  Attributes;
> +  UINT16  OffsetHigh;
> +  UINT32  OffsetUpper;
> +  UINT32  Zero;
> +} INTERRUPT_GATE_DESCRIPTOR;
> +
> +#pragma pack()
> +
> +#endif
> diff --git a/OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecific.c 
> b/OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecific.c
> new file mode 100644
> index 0000000..544816d
> --- /dev/null
> +++ b/OvmfPkg/QuarkPort/CpuS3DataDxe/X64/ArchSpecific.c
> @@ -0,0 +1,108 @@
> +/** @file
> +
> +  Memory Operation Functions for IA32 Architecture.
> +
> +  Copyright (C) 2015, Red Hat, Inc.
> +  Copyright (c) 2013-2015 Intel Corporation.
> +
> +  Redistribution and use in source and binary forms, with or without
> +  modification, are permitted provided that the following conditions
> +  are met:
> +
> +  * Redistributions of source code must retain the above copyright
> +  notice, this list of conditions and the following disclaimer.
> +  * Redistributions in binary form must reproduce the above copyright
> +  notice, this list of conditions and the following disclaimer in
> +  the documentation and/or other materials provided with the
> +  distribution.
> +  * Neither the name of Intel Corporation nor the names of its
> +  contributors may be used to endorse or promote products derived
> +  from this software without specific prior written permission.
> +
> +  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> +  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> +  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> +  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> +  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> +  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> +  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> +  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> +  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> +  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> +  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +  Module Name:  ArchSpecific.c
> +
> +**/
> +
> +#include "Cpu.h"
> +#include "MpService.h"
> +
> +//
> +// OVMF port note: in this driver we don't actually use this buffer for
> +// communicating between the BSP and the APs, we only allocate it as 
> auxiliary
> +// storage between the entry point and the EFI_SMM_CONFIGURATION_PROTOCOL
> +// installation callback, for setting up various parameters of the AP startup
> +// vector that is to be used by PiSmmCpuDxeSmm.
> +//
> +STATIC
> +MP_CPU_EXCHANGE_INFO    mExchangeInfoBuffer;
> +MP_CPU_EXCHANGE_INFO    *mExchangeInfo = &mExchangeInfoBuffer;
> +
> +/**
> +  Prepares Startup Vector for APs.
> +
> +  This function prepares Startup Vector for APs.
> +
> +**/
> +VOID
> +PrepareAPStartupVector (
> +  VOID
> +  )
> +{
> +  //
> +  // Allocate a 4K-aligned region under 1M for startup vector for AP.
> +  // The region contains AP startup code and exchange data between BSP and 
> AP.
> +  //
> +  AllocateStartupVector (SIZE_4KB);
> +
> +  //
> +  // Get the start address of exchange data between BSP and AP.
> +  //
> +  ZeroMem ((VOID *) mExchangeInfo, sizeof (MP_CPU_EXCHANGE_INFO));
> +
> +  PrepareGdtIdtForAP (
> +    (IA32_DESCRIPTOR *) (UINTN) &mExchangeInfo->GdtrProfile,
> +    (IA32_DESCRIPTOR *) (UINTN) &mExchangeInfo->IdtrProfile
> +    );
> +}
> +
> +/**
> +  Sets specified IDT entry with given function pointer.
> +
> +  This function sets specified IDT entry with given function pointer.
> +
> +  @param  FunctionPointer  Function pointer for IDT entry.
> +  @param  IdtEntry         The IDT entry to update.
> +
> +  @return The original IDT entry value.
> +
> +**/
> +UINTN
> +SetIdtEntry (
> +  IN  UINTN                       FunctionPointer,
> +  OUT INTERRUPT_GATE_DESCRIPTOR   *IdtEntry
> +)
> +{
> +  UINTN  OriginalEntry;
> +
> +  OriginalEntry = IdtEntry->OffsetLow;
> +  OriginalEntry |= ((UINTN) IdtEntry->OffsetHigh) << 16;
> +  OriginalEntry |= ((UINTN) IdtEntry->OffsetUpper) << 32;
> +
> +  IdtEntry->OffsetLow  = (UINT16) FunctionPointer;
> +  IdtEntry->OffsetHigh = (UINT16) (FunctionPointer >> 16);
> +  IdtEntry->OffsetUpper = (UINT32) (FunctionPointer >> 32);
> +
> +  return OriginalEntry;
> +}
> diff --git a/OvmfPkg/QuarkPort/CpuS3DataDxe/X64/CpuAsm.nasm 
> b/OvmfPkg/QuarkPort/CpuS3DataDxe/X64/CpuAsm.nasm
> new file mode 100644
> index 0000000..85502ae
> --- /dev/null
> +++ b/OvmfPkg/QuarkPort/CpuS3DataDxe/X64/CpuAsm.nasm
> @@ -0,0 +1,58 @@
> +;------------------------------------------------------------------------------
> +;
> +; Copyright (C) 2015, Red Hat, Inc.
> +; Copyright (c) 2013-2015 Intel Corporation.
> +;
> +; Redistribution and use in source and binary forms, with or without
> +; modification, are permitted provided that the following conditions
> +; are met:
> +;
> +; * Redistributions of source code must retain the above copyright
> +; notice, this list of conditions and the following disclaimer.
> +; * Redistributions in binary form must reproduce the above copyright
> +; notice, this list of conditions and the following disclaimer in
> +; the documentation and/or other materials provided with the
> +; distribution.
> +; * Neither the name of Intel Corporation nor the names of its
> +; contributors may be used to endorse or promote products derived
> +; from this software without specific prior written permission.
> +;
> +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> +; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> +; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> +; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> +; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> +; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> +; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> +; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> +; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> +; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> +;
> +; Module Name:
> +;
> +;   CpuAsm.asm
> +; 
> +; Abstract:
> +; 
> +;   Assembly code that supports X64 CPU architectural protocol
> +;
> +;------------------------------------------------------------------------------
> +
> +SECTION .text
> +BITS 64
> +
> +global ASM_PFX(ApMachineCheckHandler)
> +ASM_PFX(ApMachineCheckHandler):
> +  ;
> +  ; Clear MCIP flag of IA32_MCG_STATUS register
> +  ;
> +  mov     ecx, 17ah
> +  rdmsr
> +  btr     eax, 2
> +  wrmsr
> +
> +  iretq
> +
> +global ASM_PFX(ApMachineCheckHandlerEnd)
> +ASM_PFX(ApMachineCheckHandlerEnd):
> 
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to