From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web12.14126.1645544577634854894 for ; Tue, 22 Feb 2022 07:42:58 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=TBQvGiTV; spf=pass (domain: intel.com, ip: 192.55.52.115, mailfrom: maurice.ma@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1645544577; x=1677080577; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=V5r3AdPcyAwhk1l2Y9cYu1EUklxcDeKOw3gCqzQzhb4=; b=TBQvGiTV+nhT0z2UvPQBH/NDZaS314+fEcM7meCkiQ/QH7jbIwzEOxf4 rJpTtlpaFgFHmp8t90VTTGAIzR66GZf5cVEEwUbswF78d6JytuxhvPcUC fzau8/Ng4dIPW3D5HcvwMp0KK8WEnm0bKhFBDQSAy5l0N5USNCuperzcd KyVMX7XpmvWhvkQ1D61s1g7CKFNVoVIVxLQlBl+0FokPwJuqnDDsnPFA8 DlFlaff7FpmIFHkoj3UW7gKgIi10D+bVgch8hjK6KA2SWNH4YOdJ2SYRb BhvzeKI6uVv0ONC+Ytxl+wUsTVXFqhhtJTApKini1caNgXCaCe8VmzJ4x Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10265"; a="251924481" X-IronPort-AV: E=Sophos;i="5.88,387,1635231600"; d="scan'208";a="251924481" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Feb 2022 07:42:56 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,387,1635231600"; d="scan'208";a="779304941" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by fmsmga005.fm.intel.com with ESMTP; 22 Feb 2022 07:42:56 -0800 Received: from orsmsx608.amr.corp.intel.com (10.22.229.21) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Tue, 22 Feb 2022 07:42:56 -0800 Received: from orsmsx604.amr.corp.intel.com (10.22.229.17) by ORSMSX608.amr.corp.intel.com (10.22.229.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Tue, 22 Feb 2022 07:42:55 -0800 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx604.amr.corp.intel.com (10.22.229.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Tue, 22 Feb 2022 07:42:55 -0800 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.168) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Tue, 22 Feb 2022 07:42:55 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YZthvlp/ZG2BIblBjDpK8jCjO0vVnLNpsoDQ//8+MMhRI7+JQNCIydABcRxmkur8ZB6GdTKVlrfEHQIQ43x0+9injQNoocWjQUcaf4Sl6JKsAj9ZKpXztPBfs34fSca0DYy6ZO57U8QfYIwetUp68rgVUe6vfRo8F4z3fAb6zL2IL4uR8ECIBfvY4yMmj/8lPpQksqi96RA1XOoi780NsaDXbzpqpCs0LturTjVW8NDasoUulDauE0OJi6Voyxsl3HsJH1h70ZTplpOzPoDyhxWqb3NJaJ1EiEJRXcIP0wkg1OeL7++q6cZUWOEXcBaKHBjkKpgtmoDyQ9ahY85jCQ== 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=TtjV5EQEE66vFlQEDSer3oly2GHcgEDdPhrwmiv6l8o=; b=cfoHLkM3DkQMnOmSdGZYLUNZ0sLsPClOe8YkOd96gYz6xio+CkRPh6W1NlvZN5jTcof5LYpjJeeey7u5WZI4rUxagOx0Q/A7xx19xPQ0GHRjFfcPwPjBiu/wh/zUtsTK8Vw3SGYWLwokqJ3UKpEff7Ln5kUt9eInTR89wxYSxTN5ZqIIAcUS+uZ4IJ0Hn6/MIGeTKlN2U9XJWQSFeddU540qlbI3oP6mH9kSGiTwdueLad5H2OJ3KrmzRBrhy0Nsi9DV1eUjXsUglfeqGjBL9aKKLPutSfGZUKbia5iQFAkeXFoygC2KXSq9hvdzld+ugYQ/wfSKjXwKkIf3ct3+Tg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from CO1PR11MB4945.namprd11.prod.outlook.com (2603:10b6:303:9c::8) by DM8PR11MB5720.namprd11.prod.outlook.com (2603:10b6:8:11::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4995.24; Tue, 22 Feb 2022 15:42:53 +0000 Received: from CO1PR11MB4945.namprd11.prod.outlook.com ([fe80::c9d4:be7:7abc:48c0]) by CO1PR11MB4945.namprd11.prod.outlook.com ([fe80::c9d4:be7:7abc:48c0%4]) with mapi id 15.20.5017.022; Tue, 22 Feb 2022 15:42:53 +0000 From: "Ma, Maurice" To: "S, Ashraf Ali" CC: "Chiu, Chasel" , "Desimone, Nathaniel L" , "Zeng, Star" , "Kuo, Ted" , "Duggapu, Chinni B" , "Chaganty, Rangasai V" , "Solanki, Digant H" , "V, Sangeetha" , "devel@edk2.groups.io" Subject: Re: [edk2-devel] [PATCH] IntelFsp2Pkg: BaseFspSwitchStackLib Support for X64 Build Thread-Topic: [edk2-devel] [PATCH] IntelFsp2Pkg: BaseFspSwitchStackLib Support for X64 Build Thread-Index: AQHYIPNAya4Rrg7w0kOpFpz1u8Z5xqyfvB3g Date: Tue, 22 Feb 2022 15:42:53 +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: dlp-product: dlpe-windows dlp-version: 11.6.200.16 dlp-reaction: no-action 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: b692f38e-f01f-4bfe-7054-08d9f619fd6b x-ms-traffictypediagnostic: DM8PR11MB5720:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cfagV3UMe3c1KK/aSIgKeWIZreBRzT2+VoLSrCksEdbucD5W9kj4FnhxxpvbSvOzIbR/+jIjZpr0FoPFmWByKMZLu8kTtQAPtTDXGPcX5bUeO5rdgCbZ0zNGzCMiaE7J+NV7rvfLJghFDTHJvt729WgMNoXdkDlqEwfdGoItaFBiVnp760cHouSkI/SFLQbTWVwpIKiHiteoaRuKaXrfj9i/HZ3qS9pDquTXpBEpR9xH0MvafSbbjdQEDjKVXUHW3kwmJbzbyxafaAKhI1Q8bffK48rd5J8WzafnYTDxtWDeQEWqLNCUE7FYvhCZEbD5kG5aOgVZ52eKM3MUliDnO3+/ordxuGuPfeDTepYYuJjtoCp5XBjWIr5mkUpS+98zZaDf7XYqPMFk8WvFXFhDomK+/RolXbFqORhd09KxCxo5dzwQpBswR9L7rLkNzmWjISOTQXs3YdZ1vu8Od3s6GSSdjKD0od1O0st3IAso+JAInA+uGhIj33NrBqEVrwxb4JTc06arQi3bl89jLXHQRVwOb2x2/GwmJy/gkx/DIOCRloFl4s+7+HCwSu3KHX/s7L0jhuOGkKP8RgY6iWPIaSxQeaMRr3WEb9cbWu8Gf6F7IAZCb0/wocaIl0ZlA+XwxTKmqte3EodQXlVgE2NI7pLvMu8zyg/LSDetVpEgqwv4sII5XgjIiJsS9OG+qQlcUS4l7NCIhSlfZpUjO329nD3rJWgCEnQVSB1sQfMExt47SsAyAcLeeDGGBzY9wRwuCefbNM5qg510G65Meek3JDH5odI/04MSdUV9TuLF5oWs82JWpVvwCLBLB9mISYmMsJJeK3EnqZOgdAUyGsNhBIYZ0dVsubRpPAYchOdGf5g= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4945.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(9686003)(71200400001)(7696005)(33656002)(38070700005)(966005)(6506007)(53546011)(55016003)(508600001)(2906002)(38100700002)(6636002)(186003)(66556008)(66476007)(52536014)(5660300002)(4326008)(66446008)(54906003)(19627235002)(8936002)(26005)(8676002)(316002)(122000001)(86362001)(82960400001)(76116006)(83380400001)(66946007)(6862004)(64756008)(213903007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?rNvW2cXnojFbZCuvkWq8iuGwaB2+9p/vMDbtiVj3LST6EK0yjGpbLztyVlJa?= =?us-ascii?Q?LxDHAP8Sm/jWDoTuzCadOCgrHNeUeqoujwcywGmT/h8hOyROuR30z4cCecTH?= =?us-ascii?Q?qhBqmuV6ZXcksYIoQUP3An1kMquFfLY58DRo0sxtB7GSJDhsNkjmIwv2WMbu?= =?us-ascii?Q?x5J55OPNvLtQZjLVp57Sdys6caymF+APXtK7MEF5NpVFHi1GYoQO0vb+ESf4?= =?us-ascii?Q?JgBHWE8pbdz4R/ZkEbDduyD25qDf67Iuw1rh8wtwYgfNhn3ZLkgYW9lrGRnT?= =?us-ascii?Q?G+PZLiWVkIA3dKVEwphEEdbHhqz5K4Ab92wfyuo3er+/6Z6NykxhogbWhIiI?= =?us-ascii?Q?GG1Sg1+UVJzF08UEIAsuI/veFCBGwR34DZdbx9dE2BTKIiYD72ETFyeXWNCb?= =?us-ascii?Q?nkFuHmy5WHXmi2iqFkUdPXp/+Nc+k+H34LONelbXvG36PGmloMuyEDdfB9Xm?= =?us-ascii?Q?QXxl9ytcmmZEcB0wfx2tgEJHtj1YH+WsL3RqlSp2MCzDM9zvSaymG30hvpDh?= =?us-ascii?Q?n5ONPSoI/QA0N+W70VOioXw3VPFGI812p4wQWQenCs3lrA1kXFIlf29BIINw?= =?us-ascii?Q?+sCyQvFJo6N88xMbQ0RoYA5QTfNZ9x+tlDj8FV67vhNhG8FAdai0lj4UD4Sq?= =?us-ascii?Q?rQNWZ5Qvp5H9KxD2bSJyUkwHAdKNeqUFNW3K7cVrCL6wjvDFRHg96EP/Ytob?= =?us-ascii?Q?FFXG+1jngWjiPEZC39OA8AEAi/8sulNvIpCXeGmIbpZfvSpVnPCvovaeLjYm?= =?us-ascii?Q?AOZkK05eeyhLN+lVhA9lOWgv7FaVmuI9LIhyVtrrAq/lSgY9BZeSDvroRhol?= =?us-ascii?Q?S+aiwmr8ztxKqSriMvPGKPKOUCyuILyhm+oo8tXxF+o61Ewth+vgSTtYMt77?= =?us-ascii?Q?tQC6fxvgkWiX/4c7TytNgUK/kNy7xVcP/+gZvJJNVkLYWvNZsxTfr/W/NZ+A?= =?us-ascii?Q?ZPphSgPE+auNlwi9Ct2Di4YfbE1BfAGO9htwmeINjf3LIj8HbYzq6tkI9jxm?= =?us-ascii?Q?8ZyfF7+7Cak+AkxV0KN5C7nmx1ajP/TWyuHUMfjqaGBPCFmXVI1PEiqjgWRm?= =?us-ascii?Q?luqwnbA3uXVnaaAWamJ3/iMkCbGfDNufUVPjgM8TH8Xwn+ySzLbciFEoft4/?= =?us-ascii?Q?Dd/YZ1+FXaaqPanMPFqTNIbPc0Rd+I4QBPsMVjpDxDxP99rUbTzP9bIBEot0?= =?us-ascii?Q?edKsZv36F9136CuRcqaSKug5GCKXBvcBmYWXXWSS4wd/M+dMPKbc23j079Ny?= =?us-ascii?Q?GIH/iurjmZJtgsEynKoqQO4bhKX+Nk2y4QPlsQHivinHgX7DTIuAh1SKcp7q?= =?us-ascii?Q?dvXAyXldtlgZrwwxa5rocrZw+ExW7evaUYstnabKY4yey1imUyidFn0qpwen?= =?us-ascii?Q?WngxzNNVvenvcWRtGzGeZicb8N7z8cLdz+fLZE3o8ksPGn/UDyq29+pny8d/?= =?us-ascii?Q?j5PkP3OdoLevbsBztuYQeWV84jO4qhoWVzQk3EF6/ChUhKB1K6p/olQQN2L/?= =?us-ascii?Q?m2Xk/SZSE3eFmGqSt2MrkS1Q/GdR9gNYu6oVhqDZosSaBPWYhbkpHXEgplq/?= =?us-ascii?Q?2/1TtzTn2+CfrbWcV7c94Gq59hIIAD7o5NiXN+1rqbF1V67AzC9wEymNseoB?= =?us-ascii?Q?sw=3D=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4945.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b692f38e-f01f-4bfe-7054-08d9f619fd6b X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Feb 2022 15:42:53.4521 (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: cfd6Z3aNw55P3472t7iERn0tAX6L2sdJDJtDY/vaV1zkWWEkvx0ghGtz/absssz54FkstIApfCYKWMb2VpVj8g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM8PR11MB5720 Return-Path: maurice.ma@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Several comments as below: 1. Need to ensure sufficient space to save IDT The following will only reserve 8 bytes on stack to save IDT. It is fi= ne for x86, but for x64 mode, the SIDT needs at least 80 bits. So we might= want to reserve 16 byte for the changes listed below to void buffer overfl= ow. Also it needs to use rsp instead.=09 + sub esp, 8 + sidt [esp] ..... + lidt [esp] + add esp, 8 2. Ensure rsp is always aligned at 8. Change: + add esp, 4 To: + add rsp, 8 3. Function prototype needs to be 64bit. The following comments will need= to be updated from "UINT32" to "UINTN" to match both x86 and x64 mode. +;--------------------------------------------------------------------= ---------- +; UINT32 +; EFIAPI +; Pei2LoaderSwitchStack ( +; VOID +; ) +;------- + +;--------------------------------------------------------------------= ---------- +; UINT32 +; EFIAPI +; Loader2PeiSwitchStack ( +; VOID +; ) +;--------------------------------------------------------------------= ---------- +;--------------------------------------------------------------------= ---------- +; UINT32 +; EFIAPI +; FspSwitchStack ( +; VOID +; ) +;--------- 4. Need to ensure UEFI x64 calling convention is followed. UEFI x64 calli= ng convention requires "A caller must always call with the stack 16 bytes a= ligned." So before calling SwapStack C function, the rsp needs to be aligned at= 16 bytes. So please verify if the changes satisfy this requirement. Regards Maurice > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Ashraf > Ali S > Sent: Sunday, February 13, 2022 8:02 > To: devel@edk2.groups.io > Cc: S, Ashraf Ali ; Chiu, Chasel > ; Desimone, Nathaniel L > ; Zeng, Star ; Kuo, > Ted ; Duggapu, Chinni B > ; Chaganty, Rangasai V > ; Solanki, Digant H > ; V, Sangeetha > Subject: [edk2-devel] [PATCH] IntelFsp2Pkg: BaseFspSwitchStackLib Support > for X64 Build >=20 > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D3832 >=20 > BaseFspSwitchStackLib Currently Support for IA32 build only, adding suppo= rt > 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 >=20 > 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 >=20 > 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.nasm >=20 > diff --git a/IntelFsp2Pkg/FspSecCore/SecFsp.h > b/IntelFsp2Pkg/FspSecCore/SecFsp.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/FspSecCore/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 --gi= t > a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf > b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf > index 3dcf3b9598..cd7d89e43a 100644 > --- a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.in= f > +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.i > +++ nf > @@ -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/IntelFsp2Pkg/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 > + > -- > 2.30.2.windows.1 >=20 >=20 >=20 >=20 >=20