From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mx.groups.io with SMTP id smtpd.web11.36326.1683646876801282926 for ; Tue, 09 May 2023 08:41:17 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=YVAyzPlV; spf=pass (domain: intel.com, ip: 134.134.136.31, mailfrom: jiewen.yao@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683646876; x=1715182876; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=R+xxgzSgd2jKoVjjRBpC0S1or888RxI3kZ+uBejgkPs=; b=YVAyzPlVIuB9sG/YIIYwzYIxNpGX3elqqGn8Fm8+xq4pin7KE1eSXIdd W16BbjLz+RtY/lt+7DE25cSJanB3CWHIY2eXZMdo7/7KBqoIXguWB7V7S y9jCfzdgnJChWt6ZtNpnqgCAoIBvEbGiwjBkTdIj9qLbqojpiRE3M65yO DWM1qYSeWiTJzGoUicc3cOne7UxCOHo1ls/WuKcSHXEairp7zR5tbic87 CLr/ypBC78G2b25rhqAaSVt2/t58wDFOUekK4LaWBUFMbDeoxNkK47DgB vz36g/t9tfMc7jgRpDnYVYqvfD3N5US2worSxEsVHRyPsNzvMYIK0TD6v g==; X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="413238833" X-IronPort-AV: E=Sophos;i="5.99,262,1677571200"; d="scan'208";a="413238833" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 May 2023 08:41:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="701896183" X-IronPort-AV: E=Sophos;i="5.99,262,1677571200"; d="scan'208";a="701896183" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga007.fm.intel.com with ESMTP; 09 May 2023 08:41:10 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 9 May 2023 08:41:10 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Tue, 9 May 2023 08:41:10 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.175) 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.2507.23; Tue, 9 May 2023 08:41:09 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DTuB0fju5zWKX2gMj+zYyzlcnxY8806puZUWYCz6rJero9iktRYfMxAR4MSxh85VgGUHtzNuZvlM2oT4InL6NQ9lav4PkL8OrFD/T3j20YDRTrB+nr7N2QMB4y+tRl06rjVmwr+yPjOUbvFeEhl4jj1K4e2LlwJsfaNT9izjHY7ZezPHzmhv88nfHM6gK7Z9pn83k3kq1YtdUP951Jr0LpbjYdwDgKuL9S8cQM+hdjDCe0CyNFG9wKe1qafuGWbIUd80FSC+dd6ky+O1qlxm5ZNUM0Fnq+RCan0eH4/469lqrJB8OcktHl6xoL5w61BZuSK5GLuWgbOOU6/InT4b1A== 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=+/IU3JAG1EELSx443Gt5ttZXhlH2bd4sgcwETkUmmqw=; b=QBtTYaNa+4wQGQpwADMr6+qcNPq5mFFxs24NxNAG6cgHM2ioi8i1u7+GulIozooFtb/z/fxytvMFcorOGe8zfiB0ntt6yPN0GFWJif+jHzfryTYigwDaKlrpmfZXCYF01YPR2SPgSHwk7lsFAt/EN+Qo2K+YMCEyYwj+nYt6jEpyVqt+7pMaPS5PezAZZZ/XgAWRJ81UhjVKAG7EchSd1SU7fBRbHcUvle3n7tKkYkWTxSV14VYun6li0Y/LRbkBBXSxs0fsxfHajxhcSvFP4W2m+QZc3UXKX9/9d35GJXmSAGm6uyCy2fEtT5uc4fPIH49AkmOhmcuXqqjZPiUmsQ== 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 MW4PR11MB5872.namprd11.prod.outlook.com (2603:10b6:303:169::14) by CO1PR11MB5011.namprd11.prod.outlook.com (2603:10b6:303:6d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.18; Tue, 9 May 2023 15:41:07 +0000 Received: from MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::48e9:aeb0:c365:388]) by MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::48e9:aeb0:c365:388%6]) with mapi id 15.20.6363.033; Tue, 9 May 2023 15:41:07 +0000 From: "Yao, Jiewen" To: "devel@edk2.groups.io" , "abdattar@amd.com" CC: Abdul Lateef Attar , Paul Grimes , Abner Chang , "Dong, Eric" , "Ni, Ray" , "Kumar, Rahul R" , Gerd Hoffmann , Ard Biesheuvel , "Justen, Jordan L" Subject: Re: [edk2-devel] [PATCH v10 9/9] OvmfPkg: Uses MmSaveStateLib library Thread-Topic: [edk2-devel] [PATCH v10 9/9] OvmfPkg: Uses MmSaveStateLib library Thread-Index: AQHZflNR1q/okmyIsEiK4XUIhH6mrq9SHKOg Date: Tue, 9 May 2023 15:41:07 +0000 Message-ID: References: <0bf1d18aeedeb3932e9afbb9ff4fa9905b08a7c6.1683182178.git.abdattar@amd.com> In-Reply-To: <0bf1d18aeedeb3932e9afbb9ff4fa9905b08a7c6.1683182178.git.abdattar@amd.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-traffictypediagnostic: MW4PR11MB5872:EE_|CO1PR11MB5011:EE_ x-ms-office365-filtering-correlation-id: 36273191-11b0-4e6c-c221-08db50a3ce2a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: hKbnGog/KB4Xk+YX6yleWnoT7QLHmAlgQU6ny/8xQON50uw8OB3xAHvFIEJeVQnazBA3W2i3Os83yACM49eInNymtNb9CJtsFoLahAqwCjAdWvPNXeVIOCeHtUL13aGXGtArKCyIvlgpZrYJFXoOXolpUobG6fIPVgZm/gO1M2W8a0Tfv3vbLDoK0BkANouSydukhUhgtdVn3cvUXeIh2hI/FwQW1hYrs4yTskxcWN4LWVizNcXvNsOEuOTWTTASMOyUcMAiiOLL2k8cTV9D8176Nl9SSbWLJwvgSVpsEex2fnxRezKLu3yotfGUlXewceemfFeulQspBBC9wqA0qE7kY8nTHDEAyLDO/X3Ibgyexn7v9lnaSuvZtxNbEkwiOND1c5yYsBNwqyLbKTu0VJjwyeGWAnsVjdzLJVqTnsMD2xEYH21zZyghAhOHFaM1URKZfZK/3/GfmoGw8oSS9Vl9T+yKlKq7Ecg6sxSXNauHc25h8W8SSIXsTQ/Y4pZ91tOvR3K8hFCWqFOZIyRBa4Roknt8UFgR4hehfG2CqOwG4U+N8bnbUs1hMiUIJ0Xs5fToSwn4frEmmRIUorkEut8KETWpWmlq8LnmRcZBh7PJY717tKAH+LqhWtxGlgsqnzEtGIohSbwb7JKuc5F44g== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB5872.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(6029001)(376002)(396003)(346002)(39860400002)(136003)(366004)(451199021)(82960400001)(122000001)(38100700002)(38070700005)(33656002)(86362001)(66899021)(8936002)(7696005)(966005)(8676002)(5660300002)(478600001)(107886003)(26005)(52536014)(55016003)(186003)(53546011)(83380400001)(30864003)(2906002)(9686003)(316002)(110136005)(76116006)(66946007)(66556008)(66476007)(66446008)(64756008)(71200400001)(45080400002)(54906003)(19627235002)(41300700001)(4326008)(6506007)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?BV14HSrk1OSeAPVoIQZWL4u+GKk+4wKIzIfsFnYFPEyBhfqqygVMZ+VrWN/A?= =?us-ascii?Q?8IbxjTP92cQWtoWQAcRqFXvknzswgQs2E4a/5RJ61LeiCrDB4sgrN+yA01SS?= =?us-ascii?Q?s+reiExzqj5KNwLaZD36QYzk35NzCssl8JpU/pa6Sw8XX6fFJBRxYqJ2IvFA?= =?us-ascii?Q?QEhtHDo+7OnLSSsXwnaCDfJKgUECPZ2/CsbHFmwtqJ4zFXPovcXELRwnoOgd?= =?us-ascii?Q?PHHlD43y//lpTFP/8wjI+nwx77MbuQp0vr/qadHif948JJCME/iDDkYrlMP5?= =?us-ascii?Q?aWKrzs4ujFT0J5D1lAkXlntCM2wQYeVn3LsYkh1+40wTCp/v2Uzn3w1m5qp9?= =?us-ascii?Q?o4pH9UmLhHIsDXJ6h4iTQX493mWVTCWVDdA8EtkUdt2pcAycYxjEH2gEiyIa?= =?us-ascii?Q?mK1bsMQsxouLlHE8rh2i+PBTtJgJwxbeaSPQKtN+lDkgbxl0Z37/5h2gSt15?= =?us-ascii?Q?anRqq/3Hc6MMZrZeR80vOJX87CCTSqDu1d6Cr9gIkuDjJg54plk4wdjpR9jm?= =?us-ascii?Q?HZ+VJu+tN7FJZp/gSnpRhq2IYsRE7RH1/ZLBE5hKog6bYn8lN0KKiJToIrbs?= =?us-ascii?Q?AjMitLnZqsunrc+odi579Nhnd9czzN6HBs0NSmg9Ghxgb9H6bxWoh1Anz4+1?= =?us-ascii?Q?f2QHgaiMsESN8ayZ0BxTmma7KFQPmg6eAeombWtX4SdP4A3wYg/+WQ+kbJW9?= =?us-ascii?Q?b0n9HSOAnzBm/ST9iVxYk4bYpouUa8Sjup031nxefU1jWEU47G/wt/2i+E/B?= =?us-ascii?Q?bibFgyI1QHABxJpGpXaoo+Rs2HDr93+nFJHYkrp0cPMf9f+YKEPuk+gl75VF?= =?us-ascii?Q?R0zrzmj5G13d6PwdIwXKtYqdIzlieQGlIevZQEaXnZdBU1kQCtCqOPucZcZe?= =?us-ascii?Q?iwgKbA7j3YhCfIol5XZxebM4f4W9lvHlOYyPaGbk24PvK+5VhZ5EVMOoz3A/?= =?us-ascii?Q?lth+LE3mO1vqw18Br8LXYikxu7wFKxb2sNDvFDJt5Y9MZ5aPp83rL9dHdVTi?= =?us-ascii?Q?bf2k6VJKHLdz4J3h8qohIkGORHRpH/H5Pjbq99mfXZ9tV1IFrFKmSwWo54DJ?= =?us-ascii?Q?ygWLgER3Fe3w0uOXPlPBaoYLmldJ+7+EbQlt5WTEmpecTWAECdHHjPrzY94e?= =?us-ascii?Q?aln0VQaBB0+8UHWHRr1z8EgyupJz5rDxGfD1l+0DIDvVj5A8YHmlFBQS0Taa?= =?us-ascii?Q?VaHS8lxMhKl9RZsWCyjeHmDXQqRXy9ecuXYlxhRmas7zEDeGA79Yn1h49Rx0?= =?us-ascii?Q?R51Fb21z/IyzLgdTQWtTnEVC4BSsWG/dh4xfEmPq/NUcGwcS3aXM2hIEglso?= =?us-ascii?Q?z6PsM53TZjP4nbEUa0NiMgFq4WafHBxyz1KeHVsp19M1i43dui9qMWjfYgTt?= =?us-ascii?Q?j+0t6SeNMYHhgzfbvXB/d8oRxyQcgqm5KxVy8+xBYVh7fktZ1hiVDudWYxnr?= =?us-ascii?Q?qeK91Jzxwm+Tc0Ct5xjtx10tZEVbS1Btj8I77yhqxB7rUGB4RZ/8GYVR0faW?= =?us-ascii?Q?hOrB/0/QERiIYwT3LCNWndd4HM7FWglnXOUy/H4FoTmlq1POCaXt0HyNTKRq?= =?us-ascii?Q?nazhO8S7AWTQ42Z6X90tJvOEO2HWrCRfb3umYv0c?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB5872.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36273191-11b0-4e6c-c221-08db50a3ce2a X-MS-Exchange-CrossTenant-originalarrivaltime: 09 May 2023 15:41:07.1513 (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: kLk3HFXUXXYjcEw0YmPip3K2lIiIDwepI8KVV+or0a1J24QJDCjNs8f/Gd8JjDS8EC+uUb6BIaQDkMJNRwiwCw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR11MB5011 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Acked-by: Jiewen Yao > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Abdul > Lateef Attar via groups.io > Sent: Thursday, May 4, 2023 2:39 PM > To: devel@edk2.groups.io > Cc: Abdul Lateef Attar ; Paul Grimes > ; Abner Chang ; Dong, > Eric ; Ni, Ray ; Kumar, Rahul R > ; Gerd Hoffmann ; Ard > Biesheuvel ; Yao, Jiewen > ; Justen, Jordan L ; > Abdul Lateef Attar > Subject: [edk2-devel] [PATCH v10 9/9] OvmfPkg: Uses MmSaveStateLib > library >=20 > From: Abdul Lateef Attar >=20 > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4182 >=20 > Uses new MmSaveStateLib library instance. >=20 > Cc: Paul Grimes > Cc: Abner Chang > Cc: Eric Dong > Cc: Ray Ni > Cc: Rahul Kumar > Cc: Gerd Hoffmann > Cc: Ard Biesheuvel > Cc: Jiewen Yao > Cc: Jordan Justen > Signed-off-by: Abdul Lateef Attar > --- > OvmfPkg/OvmfPkgIa32.dsc | 1 + > OvmfPkg/OvmfPkgIa32X64.dsc | 3 + > OvmfPkg/OvmfPkgX64.dsc | 1 + > .../SmmCpuFeaturesLib/SmmCpuFeaturesLib.c | 767 ------------------ > 4 files changed, 5 insertions(+), 767 deletions(-) >=20 > diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc > index 86177bb94899..cde1ce4b2984 100644 > --- a/OvmfPkg/OvmfPkgIa32.dsc > +++ b/OvmfPkg/OvmfPkgIa32.dsc > @@ -977,6 +977,7 @@ [Components] > >=20 > SmmCpuPlatformHookLib|OvmfPkg/Library/SmmCpuPlatformHookLibQemu > /SmmCpuPlatformHookLibQemu.inf >=20 > SmmCpuFeaturesLib|OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeature > sLib.inf > + > MmSaveStateLib|UefiCpuPkg/Library/MmSaveStateLib/OvmfMmSaveStateLi > b.inf > } >=20 > # > diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc > index 065b54450647..a5883085257e 100644 > --- a/OvmfPkg/OvmfPkgIa32X64.dsc > +++ b/OvmfPkg/OvmfPkgIa32X64.dsc > @@ -4,6 +4,7 @@ > # Copyright (c) 2006 - 2023, Intel Corporation. All rights reserved. > # (C) Copyright 2016 Hewlett Packard Enterprise Development LP
> # Copyright (c) Microsoft Corporation. > +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<= BR> > # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -451,6 +452,7 @@ [LibraryClasses.common.DXE_SMM_DRIVER] > BaseCryptLib|CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf > PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf >=20 > SmmCpuRendezvousLib|UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCp > uRendezvousLib.inf > + > MmSaveStateLib|UefiCpuPkg/Library/MmSaveStateLib/OvmfMmSaveStateLi > b.inf >=20 > [LibraryClasses.common.SMM_CORE] > PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf > @@ -995,6 +997,7 @@ [Components.X64] > >=20 > SmmCpuPlatformHookLib|OvmfPkg/Library/SmmCpuPlatformHookLibQemu > /SmmCpuPlatformHookLibQemu.inf >=20 > SmmCpuFeaturesLib|OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeature > sLib.inf > + > MmSaveStateLib|UefiCpuPkg/Library/MmSaveStateLib/OvmfMmSaveStateLi > b.inf > } >=20 > # > diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc > index 3d405cd4ade0..d0f6536d1764 100644 > --- a/OvmfPkg/OvmfPkgX64.dsc > +++ b/OvmfPkg/OvmfPkgX64.dsc > @@ -1071,6 +1071,7 @@ [Components] > >=20 > SmmCpuPlatformHookLib|OvmfPkg/Library/SmmCpuPlatformHookLibQemu > /SmmCpuPlatformHookLibQemu.inf >=20 > SmmCpuFeaturesLib|OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeature > sLib.inf > + > MmSaveStateLib|UefiCpuPkg/Library/MmSaveStateLib/OvmfMmSaveStateLi > b.inf > } >=20 > # > diff --git a/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c > b/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c > index a009123dae88..4c354bafe42f 100644 > --- a/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c > +++ b/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c > @@ -578,773 +578,6 @@ SmmCpuFeaturesSetSmmRegister ( > ASSERT (FALSE); > } >=20 > -/// > -/// Macro used to simplify the lookup table entries of type > -/// CPU_SMM_SAVE_STATE_LOOKUP_ENTRY > -/// > -#define SMM_CPU_OFFSET(Field) OFFSET_OF > (QEMU_SMRAM_SAVE_STATE_MAP, Field) > - > -/// > -/// Macro used to simplify the lookup table entries of type > -/// CPU_SMM_SAVE_STATE_REGISTER_RANGE > -/// > -#define SMM_REGISTER_RANGE(Start, End) { Start, End, End - Start + 1 } > - > -/// > -/// Structure used to describe a range of registers > -/// > -typedef struct { > - EFI_SMM_SAVE_STATE_REGISTER Start; > - EFI_SMM_SAVE_STATE_REGISTER End; > - UINTN Length; > -} CPU_SMM_SAVE_STATE_REGISTER_RANGE; > - > -/// > -/// Structure used to build a lookup table to retrieve the widths and of= fsets > -/// associated with each supported EFI_SMM_SAVE_STATE_REGISTER value > -/// > - > -#define SMM_SAVE_STATE_REGISTER_FIRST_INDEX 1 > - > -typedef struct { > - UINT8 Width32; > - UINT8 Width64; > - UINT16 Offset32; > - UINT16 Offset64Lo; > - UINT16 Offset64Hi; > - BOOLEAN Writeable; > -} CPU_SMM_SAVE_STATE_LOOKUP_ENTRY; > - > -/// > -/// Table used by GetRegisterIndex() to convert an > EFI_SMM_SAVE_STATE_REGISTER > -/// value to an index into a table of type > CPU_SMM_SAVE_STATE_LOOKUP_ENTRY > -/// > -STATIC CONST CPU_SMM_SAVE_STATE_REGISTER_RANGE > mSmmCpuRegisterRanges[] =3D { > - SMM_REGISTER_RANGE ( > - EFI_SMM_SAVE_STATE_REGISTER_GDTBASE, > - EFI_SMM_SAVE_STATE_REGISTER_LDTINFO > - ), > - SMM_REGISTER_RANGE ( > - EFI_SMM_SAVE_STATE_REGISTER_ES, > - EFI_SMM_SAVE_STATE_REGISTER_RIP > - ), > - SMM_REGISTER_RANGE ( > - EFI_SMM_SAVE_STATE_REGISTER_RFLAGS, > - EFI_SMM_SAVE_STATE_REGISTER_CR4 > - ), > - { (EFI_SMM_SAVE_STATE_REGISTER)0, > (EFI_SMM_SAVE_STATE_REGISTER)0,0 } > -}; > - > -/// > -/// Lookup table used to retrieve the widths and offsets associated with > each > -/// supported EFI_SMM_SAVE_STATE_REGISTER value > -/// > -STATIC CONST CPU_SMM_SAVE_STATE_LOOKUP_ENTRY > mSmmCpuWidthOffset[] =3D { > - { > - 0, // Width32 > - 0, // Width64 > - 0, // Offset32 > - 0, // Offset64Lo > - 0, // Offset64Hi > - FALSE // Writeable > - }, // Reserved > - > - // > - // CPU Save State registers defined in PI SMM CPU Protocol. > - // > - { > - 0, // Width32 > - 8, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._GDTRBase), // Offset64Lo > - SMM_CPU_OFFSET (x64._GDTRBase) + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_GDTBASE =3D 4 > - > - { > - 0, // Width32 > - 8, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._IDTRBase), // Offset64Lo > - SMM_CPU_OFFSET (x64._IDTRBase) + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_IDTBASE =3D 5 > - > - { > - 0, // Width32 > - 8, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._LDTRBase), // Offset64Lo > - SMM_CPU_OFFSET (x64._LDTRBase) + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_LDTBASE =3D 6 > - > - { > - 0, // Width32 > - 0, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._GDTRLimit), // Offset64Lo > - SMM_CPU_OFFSET (x64._GDTRLimit) + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_GDTLIMIT =3D 7 > - > - { > - 0, // Width32 > - 0, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._IDTRLimit), // Offset64Lo > - SMM_CPU_OFFSET (x64._IDTRLimit) + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_IDTLIMIT =3D 8 > - > - { > - 0, // Width32 > - 0, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._LDTRLimit), // Offset64Lo > - SMM_CPU_OFFSET (x64._LDTRLimit) + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_LDTLIMIT =3D 9 > - > - { > - 0, // Width32 > - 0, // Width64 > - 0, // Offset32 > - 0, // Offset64Lo > - 0 + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_LDTINFO =3D 10 > - > - { > - 4, // Width32 > - 4, // Width64 > - SMM_CPU_OFFSET (x86._ES), // Offset32 > - SMM_CPU_OFFSET (x64._ES), // Offset64Lo > - 0, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_ES =3D 20 > - > - { > - 4, // Width32 > - 4, // Width64 > - SMM_CPU_OFFSET (x86._CS), // Offset32 > - SMM_CPU_OFFSET (x64._CS), // Offset64Lo > - 0, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_CS =3D 21 > - > - { > - 4, // Width32 > - 4, // Width64 > - SMM_CPU_OFFSET (x86._SS), // Offset32 > - SMM_CPU_OFFSET (x64._SS), // Offset64Lo > - 0, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_SS =3D 22 > - > - { > - 4, // Width32 > - 4, // Width64 > - SMM_CPU_OFFSET (x86._DS), // Offset32 > - SMM_CPU_OFFSET (x64._DS), // Offset64Lo > - 0, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_DS =3D 23 > - > - { > - 4, // Width32 > - 4, // Width64 > - SMM_CPU_OFFSET (x86._FS), // Offset32 > - SMM_CPU_OFFSET (x64._FS), // Offset64Lo > - 0, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_FS =3D 24 > - > - { > - 4, // Width32 > - 4, // Width64 > - SMM_CPU_OFFSET (x86._GS), // Offset32 > - SMM_CPU_OFFSET (x64._GS), // Offset64Lo > - 0, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_GS =3D 25 > - > - { > - 0, // Width32 > - 4, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._LDTR), // Offset64Lo > - 0, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_LDTR_SEL =3D 26 > - > - { > - 4, // Width32 > - 4, // Width64 > - SMM_CPU_OFFSET (x86._TR), // Offset32 > - SMM_CPU_OFFSET (x64._TR), // Offset64Lo > - 0, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_TR_SEL =3D 27 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._DR7), // Offset32 > - SMM_CPU_OFFSET (x64._DR7), // Offset64Lo > - SMM_CPU_OFFSET (x64._DR7) + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_DR7 =3D 28 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._DR6), // Offset32 > - SMM_CPU_OFFSET (x64._DR6), // Offset64Lo > - SMM_CPU_OFFSET (x64._DR6) + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_DR6 =3D 29 > - > - { > - 0, // Width32 > - 8, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._R8), // Offset64Lo > - SMM_CPU_OFFSET (x64._R8) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_R8 =3D 30 > - > - { > - 0, // Width32 > - 8, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._R9), // Offset64Lo > - SMM_CPU_OFFSET (x64._R9) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_R9 =3D 31 > - > - { > - 0, // Width32 > - 8, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._R10), // Offset64Lo > - SMM_CPU_OFFSET (x64._R10) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_R10 =3D 32 > - > - { > - 0, // Width32 > - 8, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._R11), // Offset64Lo > - SMM_CPU_OFFSET (x64._R11) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_R11 =3D 33 > - > - { > - 0, // Width32 > - 8, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._R12), // Offset64Lo > - SMM_CPU_OFFSET (x64._R12) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_R12 =3D 34 > - > - { > - 0, // Width32 > - 8, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._R13), // Offset64Lo > - SMM_CPU_OFFSET (x64._R13) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_R13 =3D 35 > - > - { > - 0, // Width32 > - 8, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._R14), // Offset64Lo > - SMM_CPU_OFFSET (x64._R14) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_R14 =3D 36 > - > - { > - 0, // Width32 > - 8, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._R15), // Offset64Lo > - SMM_CPU_OFFSET (x64._R15) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_R15 =3D 37 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._EAX), // Offset32 > - SMM_CPU_OFFSET (x64._RAX), // Offset64Lo > - SMM_CPU_OFFSET (x64._RAX) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_RAX =3D 38 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._EBX), // Offset32 > - SMM_CPU_OFFSET (x64._RBX), // Offset64Lo > - SMM_CPU_OFFSET (x64._RBX) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_RBX =3D 39 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._ECX), // Offset32 > - SMM_CPU_OFFSET (x64._RCX), // Offset64Lo > - SMM_CPU_OFFSET (x64._RCX) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_RCX =3D 40 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._EDX), // Offset32 > - SMM_CPU_OFFSET (x64._RDX), // Offset64Lo > - SMM_CPU_OFFSET (x64._RDX) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_RDX =3D 41 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._ESP), // Offset32 > - SMM_CPU_OFFSET (x64._RSP), // Offset64Lo > - SMM_CPU_OFFSET (x64._RSP) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_RSP =3D 42 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._EBP), // Offset32 > - SMM_CPU_OFFSET (x64._RBP), // Offset64Lo > - SMM_CPU_OFFSET (x64._RBP) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_RBP =3D 43 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._ESI), // Offset32 > - SMM_CPU_OFFSET (x64._RSI), // Offset64Lo > - SMM_CPU_OFFSET (x64._RSI) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_RSI =3D 44 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._EDI), // Offset32 > - SMM_CPU_OFFSET (x64._RDI), // Offset64Lo > - SMM_CPU_OFFSET (x64._RDI) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_RDI =3D 45 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._EIP), // Offset32 > - SMM_CPU_OFFSET (x64._RIP), // Offset64Lo > - SMM_CPU_OFFSET (x64._RIP) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_RIP =3D 46 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._EFLAGS), // Offset32 > - SMM_CPU_OFFSET (x64._RFLAGS), // Offset64Lo > - SMM_CPU_OFFSET (x64._RFLAGS) + 4, // Offset64Hi > - TRUE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_RFLAGS =3D 51 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._CR0), // Offset32 > - SMM_CPU_OFFSET (x64._CR0), // Offset64Lo > - SMM_CPU_OFFSET (x64._CR0) + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_CR0 =3D 52 > - > - { > - 4, // Width32 > - 8, // Width64 > - SMM_CPU_OFFSET (x86._CR3), // Offset32 > - SMM_CPU_OFFSET (x64._CR3), // Offset64Lo > - SMM_CPU_OFFSET (x64._CR3) + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_CR3 =3D 53 > - > - { > - 0, // Width32 > - 4, // Width64 > - 0, // Offset32 > - SMM_CPU_OFFSET (x64._CR4), // Offset64Lo > - SMM_CPU_OFFSET (x64._CR4) + 4, // Offset64Hi > - FALSE // Writeable > - }, // EFI_SMM_SAVE_STATE_REGISTER_CR4 =3D 54 > -}; > - > -// > -// No support for I/O restart > -// > - > -/** > - Read information from the CPU save state. > - > - @param Register Specifies the CPU register to read form the save sta= te. > - > - @retval 0 Register is not valid > - @retval >0 Index into mSmmCpuWidthOffset[] associated with Register > - > -**/ > -STATIC > -UINTN > -GetRegisterIndex ( > - IN EFI_SMM_SAVE_STATE_REGISTER Register > - ) > -{ > - UINTN Index; > - UINTN Offset; > - > - for (Index =3D 0, Offset =3D SMM_SAVE_STATE_REGISTER_FIRST_INDEX; > - mSmmCpuRegisterRanges[Index].Length !=3D 0; > - Index++) > - { > - if ((Register >=3D mSmmCpuRegisterRanges[Index].Start) && > - (Register <=3D mSmmCpuRegisterRanges[Index].End)) > - { > - return Register - mSmmCpuRegisterRanges[Index].Start + Offset; > - } > - > - Offset +=3D mSmmCpuRegisterRanges[Index].Length; > - } > - > - return 0; > -} > - > -/** > - Read a CPU Save State register on the target processor. > - > - This function abstracts the differences that whether the CPU Save Stat= e > - register is in the IA32 CPU Save State Map or X64 CPU Save State Map. > - > - This function supports reading a CPU Save State register in SMBase > relocation > - handler. > - > - @param[in] CpuIndex Specifies the zero-based index of the CPU s= ave > - state. > - @param[in] RegisterIndex Index into mSmmCpuWidthOffset[] look up > table. > - @param[in] Width The number of bytes to read from the CPU sa= ve > - state. > - @param[out] Buffer Upon return, this holds the CPU register va= lue > - read from the save state. > - > - @retval EFI_SUCCESS The register was read from Save State. > - @retval EFI_NOT_FOUND The register is not defined for the Save > State > - of Processor. > - @retval EFI_INVALID_PARAMTER This or Buffer is NULL. > - > -**/ > -STATIC > -EFI_STATUS > -ReadSaveStateRegisterByIndex ( > - IN UINTN CpuIndex, > - IN UINTN RegisterIndex, > - IN UINTN Width, > - OUT VOID *Buffer > - ) > -{ > - QEMU_SMRAM_SAVE_STATE_MAP *CpuSaveState; > - > - CpuSaveState =3D (QEMU_SMRAM_SAVE_STATE_MAP *)gSmst- > >CpuSaveState[CpuIndex]; > - > - if ((CpuSaveState->x86.SMMRevId & 0xFFFF) =3D=3D 0) { > - // > - // If 32-bit mode width is zero, then the specified register can not= be > - // accessed > - // > - if (mSmmCpuWidthOffset[RegisterIndex].Width32 =3D=3D 0) { > - return EFI_NOT_FOUND; > - } > - > - // > - // If Width is bigger than the 32-bit mode width, then the specified > - // register can not be accessed > - // > - if (Width > mSmmCpuWidthOffset[RegisterIndex].Width32) { > - return EFI_INVALID_PARAMETER; > - } > - > - // > - // Write return buffer > - // > - ASSERT (CpuSaveState !=3D NULL); > - CopyMem ( > - Buffer, > - (UINT8 *)CpuSaveState + > mSmmCpuWidthOffset[RegisterIndex].Offset32, > - Width > - ); > - } else { > - // > - // If 64-bit mode width is zero, then the specified register can not= be > - // accessed > - // > - if (mSmmCpuWidthOffset[RegisterIndex].Width64 =3D=3D 0) { > - return EFI_NOT_FOUND; > - } > - > - // > - // If Width is bigger than the 64-bit mode width, then the specified > - // register can not be accessed > - // > - if (Width > mSmmCpuWidthOffset[RegisterIndex].Width64) { > - return EFI_INVALID_PARAMETER; > - } > - > - // > - // Write lower 32-bits of return buffer > - // > - CopyMem ( > - Buffer, > - (UINT8 *)CpuSaveState + > mSmmCpuWidthOffset[RegisterIndex].Offset64Lo, > - MIN (4, Width) > - ); > - if (Width >=3D 4) { > - // > - // Write upper 32-bits of return buffer > - // > - CopyMem ( > - (UINT8 *)Buffer + 4, > - (UINT8 *)CpuSaveState + > mSmmCpuWidthOffset[RegisterIndex].Offset64Hi, > - Width - 4 > - ); > - } > - } > - > - return EFI_SUCCESS; > -} > - > -/** > - Read an SMM Save State register on the target processor. If this func= tion > - returns EFI_UNSUPPORTED, then the caller is responsible for reading th= e > - SMM Save Sate register. > - > - @param[in] CpuIndex The index of the CPU to read the SMM Save State. > The > - value must be between 0 and the NumberOfCpus fie= ld in > - the System Management System Table (SMST). > - @param[in] Register The SMM Save State register to read. > - @param[in] Width The number of bytes to read from the CPU save st= ate. > - @param[out] Buffer Upon return, this holds the CPU register value r= ead > - from the save state. > - > - @retval EFI_SUCCESS The register was read from Save State. > - @retval EFI_INVALID_PARAMTER Buffer is NULL. > - @retval EFI_UNSUPPORTED This function does not support reading > - Register. > -**/ > -EFI_STATUS > -EFIAPI > -SmmCpuFeaturesReadSaveStateRegister ( > - IN UINTN CpuIndex, > - IN EFI_SMM_SAVE_STATE_REGISTER Register, > - IN UINTN Width, > - OUT VOID *Buffer > - ) > -{ > - UINTN RegisterIndex; > - QEMU_SMRAM_SAVE_STATE_MAP *CpuSaveState; > - > - // > - // Check for special EFI_SMM_SAVE_STATE_REGISTER_LMA > - // > - if (Register =3D=3D EFI_SMM_SAVE_STATE_REGISTER_LMA) { > - // > - // Only byte access is supported for this register > - // > - if (Width !=3D 1) { > - return EFI_INVALID_PARAMETER; > - } > - > - CpuSaveState =3D (QEMU_SMRAM_SAVE_STATE_MAP *)gSmst- > >CpuSaveState[CpuIndex]; > - > - // > - // Check CPU mode > - // > - if ((CpuSaveState->x86.SMMRevId & 0xFFFF) =3D=3D 0) { > - *(UINT8 *)Buffer =3D 32; > - } else { > - *(UINT8 *)Buffer =3D 64; > - } > - > - return EFI_SUCCESS; > - } > - > - // > - // Check for special EFI_SMM_SAVE_STATE_REGISTER_IO > - // > - if (Register =3D=3D EFI_SMM_SAVE_STATE_REGISTER_IO) { > - return EFI_NOT_FOUND; > - } > - > - // > - // Convert Register to a register lookup table index. Let > - // PiSmmCpuDxeSmm implement other special registers (currently > - // there is only EFI_SMM_SAVE_STATE_REGISTER_PROCESSOR_ID). > - // > - RegisterIndex =3D GetRegisterIndex (Register); > - if (RegisterIndex =3D=3D 0) { > - return (Register < EFI_SMM_SAVE_STATE_REGISTER_IO ? > - EFI_NOT_FOUND : > - EFI_UNSUPPORTED); > - } > - > - return ReadSaveStateRegisterByIndex (CpuIndex, RegisterIndex, Width, > Buffer); > -} > - > -/** > - Writes an SMM Save State register on the target processor. If this fu= nction > - returns EFI_UNSUPPORTED, then the caller is responsible for writing th= e > - SMM Save Sate register. > - > - @param[in] CpuIndex The index of the CPU to write the SMM Save State. > The > - value must be between 0 and the NumberOfCpus fiel= d in > - the System Management System Table (SMST). > - @param[in] Register The SMM Save State register to write. > - @param[in] Width The number of bytes to write to the CPU save stat= e. > - @param[in] Buffer Upon entry, this holds the new CPU register value= . > - > - @retval EFI_SUCCESS The register was written to Save State. > - @retval EFI_INVALID_PARAMTER Buffer is NULL. > - @retval EFI_UNSUPPORTED This function does not support writing > - Register. > -**/ > -EFI_STATUS > -EFIAPI > -SmmCpuFeaturesWriteSaveStateRegister ( > - IN UINTN CpuIndex, > - IN EFI_SMM_SAVE_STATE_REGISTER Register, > - IN UINTN Width, > - IN CONST VOID *Buffer > - ) > -{ > - UINTN RegisterIndex; > - QEMU_SMRAM_SAVE_STATE_MAP *CpuSaveState; > - > - // > - // Writes to EFI_SMM_SAVE_STATE_REGISTER_LMA are ignored > - // > - if (Register =3D=3D EFI_SMM_SAVE_STATE_REGISTER_LMA) { > - return EFI_SUCCESS; > - } > - > - // > - // Writes to EFI_SMM_SAVE_STATE_REGISTER_IO are not supported > - // > - if (Register =3D=3D EFI_SMM_SAVE_STATE_REGISTER_IO) { > - return EFI_NOT_FOUND; > - } > - > - // > - // Convert Register to a register lookup table index. Let > - // PiSmmCpuDxeSmm implement other special registers (currently > - // there is only EFI_SMM_SAVE_STATE_REGISTER_PROCESSOR_ID). > - // > - RegisterIndex =3D GetRegisterIndex (Register); > - if (RegisterIndex =3D=3D 0) { > - return (Register < EFI_SMM_SAVE_STATE_REGISTER_IO ? > - EFI_NOT_FOUND : > - EFI_UNSUPPORTED); > - } > - > - CpuSaveState =3D (QEMU_SMRAM_SAVE_STATE_MAP *)gSmst- > >CpuSaveState[CpuIndex]; > - > - // > - // Do not write non-writable SaveState, because it will cause exceptio= n. > - // > - if (!mSmmCpuWidthOffset[RegisterIndex].Writeable) { > - return EFI_UNSUPPORTED; > - } > - > - // > - // Check CPU mode > - // > - if ((CpuSaveState->x86.SMMRevId & 0xFFFF) =3D=3D 0) { > - // > - // If 32-bit mode width is zero, then the specified register can not= be > - // accessed > - // > - if (mSmmCpuWidthOffset[RegisterIndex].Width32 =3D=3D 0) { > - return EFI_NOT_FOUND; > - } > - > - // > - // If Width is bigger than the 32-bit mode width, then the specified > - // register can not be accessed > - // > - if (Width > mSmmCpuWidthOffset[RegisterIndex].Width32) { > - return EFI_INVALID_PARAMETER; > - } > - > - // > - // Write SMM State register > - // > - ASSERT (CpuSaveState !=3D NULL); > - CopyMem ( > - (UINT8 *)CpuSaveState + > mSmmCpuWidthOffset[RegisterIndex].Offset32, > - Buffer, > - Width > - ); > - } else { > - // > - // If 64-bit mode width is zero, then the specified register can not= be > - // accessed > - // > - if (mSmmCpuWidthOffset[RegisterIndex].Width64 =3D=3D 0) { > - return EFI_NOT_FOUND; > - } > - > - // > - // If Width is bigger than the 64-bit mode width, then the specified > - // register can not be accessed > - // > - if (Width > mSmmCpuWidthOffset[RegisterIndex].Width64) { > - return EFI_INVALID_PARAMETER; > - } > - > - // > - // Write lower 32-bits of SMM State register > - // > - CopyMem ( > - (UINT8 *)CpuSaveState + > mSmmCpuWidthOffset[RegisterIndex].Offset64Lo, > - Buffer, > - MIN (4, Width) > - ); > - if (Width >=3D 4) { > - // > - // Write upper 32-bits of SMM State register > - // > - CopyMem ( > - (UINT8 *)CpuSaveState + > mSmmCpuWidthOffset[RegisterIndex].Offset64Hi, > - (UINT8 *)Buffer + 4, > - Width - 4 > - ); > - } > - } > - > - return EFI_SUCCESS; > -} > - > /** > This function is hook point called after the > gEfiSmmReadyToLockProtocolGuid > notification is completely processed. > -- > 2.25.1 >=20 >=20 >=20 >=20 >=20