From nobody Wed May 15 12:32:39 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+87524+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+87524+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1647226125; cv=none; d=zohomail.com; s=zohoarc; b=Bs7JlDmo/sBFFiu5PkVrT+hkPhQIsL4eUchTBb8/i7AjzIEVgn0J6sGTf2VnPsWD4EquPsLre2NF/v2ogHbT/hwAg+Mj/VzM9e8fzHu6rAmHg0W8vcCpLu01+ItcnJGClWDTnIVF0bMq76NdoIDB9+hL3cJJm6b6EK6fLLRHBIg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647226125; h=Cc:Date:From:List-Subscribe:List-Id:List-Help:List-Unsubscribe:Message-ID:Reply-To:Sender:Subject:To; bh=zC/FqABFpMNIXAYYD2JZF9vRX7vNZKzpMtUBtgm1cyA=; b=CFLjcVFBWEHS9ruQBrmL6GjH5px29kUcFETB9480sniBNeoUPYj1hl4vnLmtdp8F6gUjH6H/JeQCwBfstp6LdQokyf/a8KbfuvF7ucEs48uDLZqcsfRgaBbuYeO4MzhfOHR+EWvB9xYXRy0NH14d139IWPraKIFzKGVknty87Kw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+87524+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 16472261257436.79442750885778; Sun, 13 Mar 2022 19:48:45 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id bX5wYY1788612xR1XQ30BV1S; Sun, 13 Mar 2022 19:48:45 -0700 X-Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mx.groups.io with SMTP id smtpd.web11.22523.1647226123995320443 for ; Sun, 13 Mar 2022 19:48:44 -0700 X-IronPort-AV: E=McAfee;i="6200,9189,10285"; a="254751376" X-IronPort-AV: E=Sophos;i="5.90,179,1643702400"; d="scan'208";a="254751376" X-Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Mar 2022 19:48:43 -0700 X-IronPort-AV: E=Sophos;i="5.90,179,1643702400"; d="scan'208";a="634035088" X-Received: from tedkuo1-win10.gar.corp.intel.com ([10.5.215.13]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Mar 2022 19:48:42 -0700 From: "Kuo, Ted" To: devel@edk2.groups.io Cc: Chasel Chiu , Nate DeSimone , Star Zeng , Ashraf Ali S Subject: [edk2-devel][PATCH v2] IntelFsp2Pkg: BaseFspSwitchStackLib Support for X64 Date: Mon, 14 Mar 2022 10:48:00 +0800 Message-Id: <71ee0d36a35875749f163abb4d301da63ec0853a.1647226063.git.ted.kuo@intel.com> Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,ted.kuo@intel.com X-Gm-Message-State: oilFAuWJhglSIrXR5c7v3sQbx1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1647226125; bh=BsJZMqU3A6AoXcNU36WylqEbnQBB2XBOhkkWux5+ihI=; h=Cc:Date:From:Reply-To:Subject:To; b=Hshf5v1cKrw3nTf6xvj5padYXmN2wjLf89yJbLZj7Vq2IAtpNtyh6665GCP0CKdqlUN N4IyLfI9FZtTxaKxjovik3ZkLodg5kWBqOnQ4c6oP/3u+E/x6JUQq9JneaTWdb3hWJyU7 IzmeH+QgD1GrCWcvA9Aj8A4ICHX0W5YoUiU= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1647226128061100002 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D3832 Add BaseFspSwitchStackLib Support for X64. Cc: Chasel Chiu Cc: Nate DeSimone Cc: Star Zeng Cc: Ashraf Ali S Signed-off-by: Ted Kuo Reviewed-by: Chasel Chiu --- IntelFsp2Pkg/Include/PushPopRegsNasm.inc | 67 ++++++++++++++++++= ++ .../BaseFspSwitchStackLib.inf | 5 +- .../BaseFspSwitchStackLib/FspSwitchStackLib.c | 8 +-- .../Library/BaseFspSwitchStackLib/X64/Stack.nasm | 72 ++++++++++++++++++= ++++ 4 files changed, 147 insertions(+), 5 deletions(-) create mode 100644 IntelFsp2Pkg/Include/PushPopRegsNasm.inc create mode 100644 IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.na= sm diff --git a/IntelFsp2Pkg/Include/PushPopRegsNasm.inc b/IntelFsp2Pkg/Includ= e/PushPopRegsNasm.inc new file mode 100644 index 0000000000..ec103940d8 --- /dev/null +++ b/IntelFsp2Pkg/Include/PushPopRegsNasm.inc @@ -0,0 +1,67 @@ +;-------------------------------------------------------------------------= ----- +; +; Copyright (c) 2022, Intel Corporation. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Abstract: +; +; Provide macro to push/pop registers in X64 +; +;-------------------------------------------------------------------------= ----- + +;-------------------------------------------------------------------------= ---- +; Macro: PUSHA_64 +; +; Description: Saves all registers on stack +; +; Input: None +; +; Output: None +;-------------------------------------------------------------------------= ---- +%macro PUSHA_64 0 + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 + push rax + push rcx + push rdx + push rbx + push rsp + push rbp + push rsi + push rdi +%endmacro + +;-------------------------------------------------------------------------= ---- +; Macro: POPA_64 +; +; Description: Restores all registers from stack +; +; Input: None +; +; Output: None +;-------------------------------------------------------------------------= ---- +%macro POPA_64 0 + pop rdi + pop rsi + pop rbp + pop rsp + pop rbx + pop rdx + pop rcx + pop rax + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 +%endmacro + diff --git a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackL= ib.inf b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.i= nf index 3dcf3b9598..6909aec651 100644 --- a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf @@ -15,12 +15,15 @@ VERSION_STRING =3D 1.0 LIBRARY_CLASS =3D FspSwitchStackLib =20 -[Sources.IA32] +[Sources] FspSwitchStackLib.c =20 [Sources.IA32] Ia32/Stack.nasm =20 +[Sources.X64] + X64/Stack.nasm + [Packages] MdePkg/MdePkg.dec IntelFsp2Pkg/IntelFsp2Pkg.dec diff --git a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c= b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c index 618c25c3b0..dae4e27172 100644 --- a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c @@ -20,16 +20,16 @@ =20 =20 **/ -UINT32 +UINTN SwapStack ( - IN UINT32 NewStack + IN UINTN NewStack ) { FSP_GLOBAL_DATA *FspData; - UINT32 OldStack; + UINTN OldStack; =20 FspData =3D GetFspGlobalDataPointer (); OldStack =3D FspData->CoreStack; - FspData->CoreStack =3D NewStack; + FspData->CoreStack =3D (UINTN) NewStack; return OldStack; } diff --git a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm b/In= telFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm new file mode 100644 index 0000000000..bd36fe4b8b --- /dev/null +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm @@ -0,0 +1,72 @@ +;-------------------------------------------------------------------------= ----- +; +; Copyright (c) 2022, Intel Corporation. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Abstract: +; +; Switch the stack from temporary memory to permanent memory. +; +;-------------------------------------------------------------------------= ----- + + SECTION .text + +%include "PushPopRegsNasm.inc" + +extern ASM_PFX(SwapStack) + +;-------------------------------------------------------------------------= ----- +; UINT32 +; EFIAPI +; Pei2LoaderSwitchStack ( +; VOID +; ) +;-------------------------------------------------------------------------= ----- +global ASM_PFX(Pei2LoaderSwitchStack) +ASM_PFX(Pei2LoaderSwitchStack): + xor rax, rax + jmp ASM_PFX(FspSwitchStack) + +;-------------------------------------------------------------------------= ----- +; UINT32 +; EFIAPI +; Loader2PeiSwitchStack ( +; VOID +; ) +;-------------------------------------------------------------------------= ----- +global ASM_PFX(Loader2PeiSwitchStack) +ASM_PFX(Loader2PeiSwitchStack): + jmp ASM_PFX(FspSwitchStack) + +;-------------------------------------------------------------------------= ----- +; UINT32 +; EFIAPI +; FspSwitchStack ( +; VOID +; ) +;-------------------------------------------------------------------------= ----- +global ASM_PFX(FspSwitchStack) +ASM_PFX(FspSwitchStack): + ; Save current contexts + push rdx ; ApiParam2 + push rcx ; ApiParam1 + push rax ; FspInfoHeader + pushfq + cli + PUSHA_64 + sub rsp, 16 + sidt [rsp] + + ; Load new stack + mov rcx, rsp + call ASM_PFX(SwapStack) + mov rsp, rax + + ; Restore previous contexts + lidt [rsp] + add rsp, 16 + POPA_64 + popfq + add rsp, 24 ; FspInfoHeader + ApiParam[2] + ret + --=20 2.16.2.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#87524): https://edk2.groups.io/g/devel/message/87524 Mute This Topic: https://groups.io/mt/89765732/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-