From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web10.31578.1644827896090431153 for ; Mon, 14 Feb 2022 00:38:16 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=VmHPBvKz; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: ray.ni@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1644827896; x=1676363896; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=HJVLn6O8VeH1LnIwdQJgs2Wk4s5IIA9CLcW5F27RJK8=; b=VmHPBvKzxo1vTPddjRcG5YCwdDyrkjWCfX8iLIwWc4nESGUhjxSE/Lao V3YzM34qx2JUxw69TgAp5BqHD1V8k3/+OfBjOfPf76U6TZe1kT6hKdpfV 9fqB77m4+IFCe2asmH1A8U/AUMXmHonJNHc1QJvgcxAta2TL0p8qm61a0 OHMvQZSMhGuYzTwuxsKDH3GT7ncPcJpz5ba6F+BNzNGNQp5lIjGBJoTKH FlTs3Uz0Vf8/QIbl1CxS4LLmU7vkTob8gJdEg6n5x8dV4hwi+To4+ZjMS +0dOBGVZRcgLP9YNT78gOHiqh8Gyl7Nv8sSsQ7ZUYkDSbKIZUx//9Julb A==; X-IronPort-AV: E=McAfee;i="6200,9189,10257"; a="233591516" X-IronPort-AV: E=Sophos;i="5.88,367,1635231600"; d="scan'208";a="233591516" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Feb 2022 00:38:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,367,1635231600"; d="scan'208";a="501639619" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga002.jf.intel.com with ESMTP; 14 Feb 2022 00:38:11 -0800 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Mon, 14 Feb 2022 00:38:11 -0800 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Mon, 14 Feb 2022 00:38:10 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Mon, 14 Feb 2022 00:38:10 -0800 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.101) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Mon, 14 Feb 2022 00:38:10 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PjdITOm8WwRPRhxdLIlwKD7cEsq9h/8K4ZMQNxGi8GbBvKDm0GeojiHAoPjlZZrf7t2mAvPoMuaZIpF16kPYrY99qa1EkJqvZ/r7lKm6olnVtv6ulBVbWWRU5LgRs5KEtpe1JjJCD2U2rFq319MiOwMOeRSf5o4/ZgFPvZsdsI9KhEcVzhlXTF8SoEBPXjvpezhJVLpieS0UXEoC09if8+90JesRXLGRFhWcEByVTTuEWW4rcUQz/T99zH4Kj+EdYS4KSSIKjZhy4RupJml81c10VzW/rl+iS7ZX9eXQ5YO/ptuswhZJPrzoPHCThepcgKuJlGnoBknFs4bKjjgWQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dj98nqSzvcfxFhLvTcXC2/iJWmXCY6FHgJ/xRmmNjuk=; b=ELY5THHHGDU+VK/R7dIET2OnwlWtLcFEhc1tbDpWBtY8gEFammQnu9Xd2MnHUJyQKIcNsVg70Elh4Dz3TNAqS0EI+lMM9AWZsnztAqZCI5Xfxen0GZOiljESwhKww8TtRcvOYbSYnHIpieDyvsJ2wHsmnj09be9pDa1+BExFifT6P+TAQlxAW7765iCJGOgafPaSv3iiaBZM2HFAU+LhYe89Kmbu8o9BZaT46ici2BAAHhdO1cgmStwn8+NOUvkNCoyidI/zsOPVRgr8GxK5933hniayw5aACP5XcEL3hoqUbHDQr13CyPDAnbxMhpOgG8ljW5H1L7Ykw9uGvQrLYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from MWHPR11MB1631.namprd11.prod.outlook.com (2603:10b6:301:10::10) by MWHPR11MB1488.namprd11.prod.outlook.com (2603:10b6:301:c::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4975.11; Mon, 14 Feb 2022 08:38:08 +0000 Received: from MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::e0fb:ec1d:4e67:375f]) by MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::e0fb:ec1d:4e67:375f%8]) with mapi id 15.20.4975.018; Mon, 14 Feb 2022 08:38:08 +0000 From: "Ni, Ray" To: "devel@edk2.groups.io" , "S, Ashraf Ali" CC: "Chiu, Chasel" , "Desimone, Nathaniel L" , "Zeng, Star" , "Kuo, Ted" , "Duggapu, Chinni B" , "Chaganty, Rangasai V" , "Solanki, Digant H" , "V, Sangeetha" Subject: Re: [edk2-devel] [PATCH] IntelFsp2Pkg: BaseFspSwitchStackLib Support for X64 Build Thread-Topic: [edk2-devel] [PATCH] IntelFsp2Pkg: BaseFspSwitchStackLib Support for X64 Build Thread-Index: AQHYIPNDTMiRE/kWU0avZBIlCHlfYaySuW5g Date: Mon, 14 Feb 2022 08:38:07 +0000 Message-ID: References: <1854878485cb78c405c11f72e6ca7363587cac73.1644768023.git.ashraf.ali.s@intel.com> In-Reply-To: <1854878485cb78c405c11f72e6ca7363587cac73.1644768023.git.ashraf.ali.s@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 74779dee-bf92-4e4d-4a44-08d9ef9553a0 x-ms-traffictypediagnostic: MWHPR11MB1488:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:393; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ni876I6HUJt3seeMyxuf3HcuVo7sIGTd+Z/JbWbODfpj26/+CQgnUVu09AznH7HnCsgTPx2WqrWVWc2s1JFh4/3wOpPdNkYF/6Hb8VQAOXuIDRzAiX/0qws4pzA5CruIdAfc7rQcLmKhomOu6Azx+N4VztVG0K5K842fAMdXmKXorBmGZO4EvPR813YrN/ZltspWxtMMYWarKRPpF68XIjjWBn0ldJaQU8DjjD7mlnak3mS0vn7il+JMGJN6IWh2OJZm7n5O6O1FHZpw4LEgeE3bk4TL0zo6eANdleea1Mi5qGO8mS3Qysxfg3XEX+36pTpZoyEv6fFl8oHF7jlawAa/4gq/kDff3BwL+IYZwiA+QvuI/EZYSa7fhNiDcRvoK/ulqyuGGsLoKMFQzdcQQg5VP31ktJRGJQijNlMjIKMZ6HWPdVl7I6i6VrDXzVe9c+NmbUvUptWsGwpc8UyhiQmFo3qbQ091la7lUPRbx0AGUPdkBOo5xnfq9wgpvAo/oEALviJxQO/6CBpVPXYE+wz2w/qd339gLasyPkKDK+uqdHq7pm/zCqtQadUF3enGTMe/BsQap3WFbg/rdTfudo8UsQXzrSrol6mFHtEZA6SnYwAyq6tqfeU9BCkkAaPZzOTCs2oFTFeW6pGLEVheE+0QX6K2Z1JratVtSlua2V+GVRVvIjaxawHTUoK151t3JG+peQMeNrCLWeIlDYpNABE1EYtnkR4kuDYgq6PSD6YEoCNE2+pUV90LAU0UPunidvwXT59QAnb4+kkZ2C6/SOvU8goYz/yrZROQHo1beXzkdMXBVJ030mxkrBtb0roMvnXCOt9y3TTugtdg85P+Q30Qr5eYxaK4Hnr5la4iUo0= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1631.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(8936002)(66556008)(76116006)(66476007)(64756008)(2906002)(122000001)(52536014)(5660300002)(19627235002)(66446008)(8676002)(71200400001)(66946007)(186003)(966005)(107886003)(26005)(6506007)(4326008)(53546011)(55016003)(508600001)(86362001)(54906003)(33656002)(6636002)(316002)(82960400001)(38100700002)(9686003)(83380400001)(7696005)(110136005)(38070700005)(213903007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?qM/vRl2w7h1284AozEiwxWMqWUgroGRqHKXLvsSZpX8c7xchclegfLcGS6rn?= =?us-ascii?Q?Bod5ISnLXXMsWJwfrOKlWcOR03qBC43KxefeV5Ng2tT1qVQ3z4KNW396z8/9?= =?us-ascii?Q?lsoACpomtb6TNFgJCIhx36shAI4Gc1pkPJ2rpfvlelTzEvy/tGeNrHrF+Fp2?= =?us-ascii?Q?+uW0SXfBYO0C5r6rxfsD3U34A3TfxQObJEUyoswkXl8/9ahOprjc3R1BDMDu?= =?us-ascii?Q?ME3b0TObE2DSQL/RTseK7uVga0VHcrsjoHUe1PIaBLfPQ6Gjnwrn77r389Fb?= =?us-ascii?Q?aKRYurxjBtO9qUQGN1+0Z5pdAoYdeHLnpoRThIFoNIJkSZeA0tgsLrdmfQHE?= =?us-ascii?Q?D3c7cN+ZEF2WzHaFgrDNJLkX9/kkujanxKFEwYxgIyBb8vTix22XxGnBraAg?= =?us-ascii?Q?guv109XfsGUYxWd8ye6Ci5nQSsvvCq2LTzHsiGdBKW++51UgJI+z0vcuZKHt?= =?us-ascii?Q?jJbfBbD8FAgxuSWj+5u1nP68zyGWS61R9JfKmcNtAyGzuC8tsH2y/ESZ/mDX?= =?us-ascii?Q?Dmno1zGm8vTvXnf2vmWbFq+Dvllh5MGpcCMdIqpOKCC7Uol6Ux7euqfTU6ll?= =?us-ascii?Q?8BkkfL2yE0J25CwFnapyI8FgTFKWn1OgTjpb7ataeXrP9poPBXLlzx6Ukg64?= =?us-ascii?Q?CKmZHQyGMY5MQCu9AOVlSUgBVuYxZNfBYWDRujBCnjBJ2U8Qc+rqPxm6ybzQ?= =?us-ascii?Q?hvQe22C6CbKwwkRYZCdfD6J+Zj4ktq6RJGQtep2Ny5Jk9xzboSrKLLvXXeZn?= =?us-ascii?Q?o84H+DT8xl/RMN2vbA23EkMjAz0aSvLGWkpc6l8ebQQnCcXix5pnlkKpxef2?= =?us-ascii?Q?qAxmG5BdkZuQQKloviv1RSvNWVw9NisyytBP8NE+aoBIuTQBzCxBaT5KREqG?= =?us-ascii?Q?+FcGRgPYRLGWxB8XbNZa6UXpNxjLRHDTLpWGd8i1s8ChptKeOH75YPkOj/XA?= =?us-ascii?Q?6HR5x1rSCN2TtVgkTinj1MfqTju+6oYhVW1DUl4Eq5wnVg1f4Vr3EntEGmUS?= =?us-ascii?Q?CUhp65URKWQq8uWy+WgiZHb6M0AwYJ6RxdCE0Mqli9FvxNnZYaCUEVzSmReN?= =?us-ascii?Q?m5ZwSYumMO+NtAZ5pE62N7VLRKmPQsk70RYg2X8HTq9JqPaOpPdh67aZyIRO?= =?us-ascii?Q?hd+KEk7W8aQX3H8HghBQNKQpCf9D9ocHrK0YvgJQsjCYtq09LLKMXX+rFj0B?= =?us-ascii?Q?1ms0CjTvueXhUndbwI99b0XyxoX7SKBgMZQLTnznaeIflATFz2Y4cetHNesy?= =?us-ascii?Q?u1k3uu+iCI1EVP7IRcaL1+UAQHqDLN+Z07ciZMqUnFNsE7uWW/1gZf4ld1S5?= =?us-ascii?Q?x3bynseQ76xmI99h44D/EShAPN2yfrC03IIlCl47hx/aQi1HzPEssydkM/DR?= =?us-ascii?Q?14zsVQk3f+1rRCvd5a2b4U+CipHTarhuRnqGGH55WMThxwoW2cKwSkEhnogz?= =?us-ascii?Q?ADWhzlvijCln6udnjbL5/wBRR2Bx7jZSXi4+mQrrhf0GlP5ogi2tsnr7odwh?= =?us-ascii?Q?b20nCR6lp5zBkqSPXbS+Or66EpI9SLghGb6Do9Sv3ecs+oROoJo/L/a695o+?= =?us-ascii?Q?G+527r8593sbA+/b8QoBBfw7wimDC9Ds/FvH0kQdsIkrPQ7SIwciNMGylmin?= =?us-ascii?Q?jJpgO5LdNi5iunR2CFPExTo=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1631.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 74779dee-bf92-4e4d-4a44-08d9ef9553a0 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Feb 2022 08:38:07.9784 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: MjOxyN5czRSpQYN6ksDAFj9xrle+6FtPuiAtDp2vHJbClcthWtqzK2MYlU1mOlyTdpHgb4DfopCl6C9QSkRcEA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1488 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable The patch itself looks good to me. But when I read the code further, the SwapStack() is implemented as below. I think you need to enhance it to support the case when RSP is above 4GB. 1. Change UINT32 NewStack to UINTN 2. Change CoreStack from UINT32 to UINTN. UINT32 SwapStack ( IN UINT32 NewStack ) { FSP_GLOBAL_DATA *FspData; UINT32 OldStack; FspData =3D GetFspGlobalDataPointer (); OldStack =3D FspData->CoreStack; FspData->CoreStack =3D NewStack; return OldStack; } -----Original Message----- From: devel@edk2.groups.io On Behalf Of Ashraf Ali S Sent: Monday, February 14, 2022 12:02 AM To: devel@edk2.groups.io Cc: S, Ashraf Ali ; Chiu, Chasel ; Desimone, Nathaniel L ; Zeng, Star <= star.zeng@intel.com>; Kuo, Ted ; Duggapu, Chinni B ; Chaganty, Rangasai V ; Solanki, Digant H ; V, Sangeetha Subject: [edk2-devel] [PATCH] IntelFsp2Pkg: BaseFspSwitchStackLib Support f= or X64 Build REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D3832 BaseFspSwitchStackLib Currently Support for IA32 build only, adding support for X64 build, fix typecasting issues for X64 build. 0xFFFF_FFFF will be replaced by MAX_ADDRESS which is set based on the type of Library which is it building. if it's a IA32 MAX_ADDRESS =3D 0xFFFF_FFFF for X64 MAX_ADDRESS =3D 0xFFFF_FFFF_FFFF_FFFFULL Cc: Chasel Chiu Cc: Nate DeSimone Cc: Star Zeng Cc: Kuo Ted Cc: Duggapu Chinni B Cc: Rangasai V Chaganty Cc: Digant H Solanki Cc: Sangeetha V Signed-off-by: Ashraf Ali S --- IntelFsp2Pkg/FspSecCore/SecFsp.h | 3 +- IntelFsp2Pkg/FspSecCore/SecFspApiChk.c | 10 +- .../BaseFspSwitchStackLib.inf | 7 +- .../BaseFspSwitchStackLib/X64/Stack.nasm | 124 ++++++++++++++++++ 4 files changed, 136 insertions(+), 8 deletions(-) create mode 100644 IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.na= sm diff --git a/IntelFsp2Pkg/FspSecCore/SecFsp.h b/IntelFsp2Pkg/FspSecCore/Sec= Fsp.h index aacd32f7f7..9a6fc14d23 100644 --- a/IntelFsp2Pkg/FspSecCore/SecFsp.h +++ b/IntelFsp2Pkg/FspSecCore/SecFsp.h @@ -1,6 +1,6 @@ /** @file =20 - Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
+ Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent =20 **/ @@ -10,6 +10,7 @@ =20 #include #include +#include #include #include #include diff --git a/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c b/IntelFsp2Pkg/FspSecCo= re/SecFspApiChk.c index 7d6ef11fe7..b70d3ffcf1 100644 --- a/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c +++ b/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c @@ -1,6 +1,6 @@ /** @file =20 - Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.
+ Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent =20 **/ @@ -31,7 +31,7 @@ FspApiCallingCheck ( // // NotifyPhase check // - if ((FspData =3D=3D NULL) || ((UINT32)FspData =3D=3D 0xFFFFFFFF)) { + if ((FspData =3D=3D NULL) || ((UINTN)FspData =3D=3D MAX_ADDRESS)) { Status =3D EFI_UNSUPPORTED; } else { if (FspData->Signature !=3D FSP_GLOBAL_DATA_SIGNATURE) { @@ -42,7 +42,7 @@ FspApiCallingCheck ( // // FspMemoryInit check // - if ((UINT32)FspData !=3D 0xFFFFFFFF) { + if ((UINTN)FspData !=3D MAX_ADDRESS) { Status =3D EFI_UNSUPPORTED; } else if (EFI_ERROR (FspUpdSignatureCheck (ApiIdx, ApiParam))) { Status =3D EFI_INVALID_PARAMETER; @@ -51,7 +51,7 @@ FspApiCallingCheck ( // // TempRamExit check // - if ((FspData =3D=3D NULL) || ((UINT32)FspData =3D=3D 0xFFFFFFFF)) { + if ((FspData =3D=3D NULL) || ((UINTN)FspData =3D=3D MAX_ADDRESS)) { Status =3D EFI_UNSUPPORTED; } else { if (FspData->Signature !=3D FSP_GLOBAL_DATA_SIGNATURE) { @@ -62,7 +62,7 @@ FspApiCallingCheck ( // // FspSiliconInit check // - if ((FspData =3D=3D NULL) || ((UINT32)FspData =3D=3D 0xFFFFFFFF)) { + if ((FspData =3D=3D NULL) || ((UINTN)FspData =3D=3D MAX_ADDRESS)) { Status =3D EFI_UNSUPPORTED; } else { if (FspData->Signature !=3D FSP_GLOBAL_DATA_SIGNATURE) { diff --git a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackL= ib.inf b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.i= nf index 3dcf3b9598..cd7d89e43a 100644 --- a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf @@ -1,7 +1,7 @@ ## @file # Instance of BaseFspSwitchStackLib # -# Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -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/X64/Stack.nasm b/In= telFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm new file mode 100644 index 0000000000..f94f39fc13 --- /dev/null +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm @@ -0,0 +1,124 @@ +;-------------------------------------------------------------------------= ----- +; +; 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 + +extern ASM_PFX(SwapStack) + +;-------------------------------------------------------------------------= ---- +; Macro: PUSHA_64 +; +; Description: Saves all registers on stack +; +; Input: None +; +; Output: None +;-------------------------------------------------------------------------= ---- +%macro PUSHA_64 0 + push rsp + push rbp + push rax + push rbx + push rcx + push rdx + push rsi + push rdi + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 +%endmacro + +;-------------------------------------------------------------------------= ---- +; Macro: POPA_64 +; +; Description: Restores all registers from stack +; +; Input: None +; +; Output: None +;-------------------------------------------------------------------------= ---- +%macro POPA_64 0 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop rdi + pop rsi + pop rdx + pop rcx + pop rbx + pop rax + pop rbp + pop rsp +%endmacro + +;-------------------------------------------------------------------------= ----- +; 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 rax + pushfq + cli + PUSHA_64 + sub esp, 8 + sidt [esp] + + ; Load new stack + mov rcx, rsp + call ASM_PFX(SwapStack) + mov rsp, rax + + ; Restore previous contexts + lidt [esp] + add esp, 8 + POPA_64 + popfq + add esp, 4 + ret + --=20 2.30.2.windows.1