From nobody Thu Dec 26 00:28:47 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1507751148937999.6674655298651; Wed, 11 Oct 2017 12:45:48 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 4E01221DF9690; Wed, 11 Oct 2017 12:42:18 -0700 (PDT) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0076.outbound.protection.outlook.com [104.47.38.76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 445A62095E51F for ; Wed, 11 Oct 2017 12:42:16 -0700 (PDT) Received: from leduran-Precision-WorkStation-T5400.amd.com (165.204.77.1) by DM5PR12MB1243.namprd12.prod.outlook.com (10.168.237.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Wed, 11 Oct 2017 19:45:42 +0000 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=helo; client-ip=104.47.38.76; helo=nam02-bl2-obe.outbound.protection.outlook.com; envelope-from=leo.duran@amd.com; receiver=edk2-devel@lists.01.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=2vaAcTaRbJXNXQiuChxFduL9/00M1tzgHVSWsC6GLxA=; b=0TCKoZ7ux/T0HcwkPBEC/+IoVAJaTTMQK0/+EYsc0JXhcU8kWMEu8iL9iozMDwAudYbQMmf9KfxJGTgX6Fd7dIDMa+Pg28GjXWB6UxJx/kQCMmRhvL29v/CuKksKndTg+XLvw/rZnBjN1G2EZBEwNDgOZUPgqKDGrL9kNCT35pk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=leo.duran@amd.com; From: Leo Duran To: edk2-devel@lists.01.org Date: Wed, 11 Oct 2017 14:45:30 -0500 Message-Id: <1507751131-32404-2-git-send-email-leo.duran@amd.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1507751131-32404-1-git-send-email-leo.duran@amd.com> References: <1507751131-32404-1-git-send-email-leo.duran@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: CO2PR05CA0063.namprd05.prod.outlook.com (10.166.88.159) To DM5PR12MB1243.namprd12.prod.outlook.com (10.168.237.22) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d18b1a7e-54f4-48d3-5d80-08d510e0a8de X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(48565401081)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:DM5PR12MB1243; X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1243; 3:gySAfSVynwY7bJwivQ9ZNG9/ELH+MZ2JhmX0v0MRogEnrjuI+X+JVUyA1VXhjhcW2s+as+fCqMUohRxA2ir6w3TwMaTX7kQTvxMgqZtkACB9z6I9ajlF+wdeHTjZ7CCX0Dgw+u+Az4DbP8/yPaF6KmsaxFb2UitMK/vPKuJsLvvLV68PNOHib7xWr2fZaEVk+A+9fnjudfwTf0cL5p0B8H6dXxvEuCz8Zr4mdRp6wwwxCQDWK9aBEjWbVRVRlmbq; 25:sjib999+W5EUGzVlO4+Y9PhA8Sc+spkz0GxrH96xJaTIpolWz844NyETQ+aaGwsnY9vR61dgiYRsRbnGcYShIQTyfjtGQ3WnBQ0c653eL9n0dWhsd8zHkwwB+SNXNzzsCOpmQLONo9C/pbYp3tS3mnEge3AedMTlAGQNrdyucNbtukoG2oqsdquG0a9zsqHXMqrCKBq/3q/1yP1oPD5t3P/VASzC7eaJRU0kB8/aGtqJUfRXY3ekE6qEgzJG3ATjrqz+WrNBxTYBIrblcy09RYjWkunfX4IpbkdJjO1Q2xpoTlVZVJeHwWwkksGiuq4oclQIHj9GjhwFJpRZOsyPZA==; 31:kwFlk2eHbPgOIryAirZgvP7hfI63XFLKBjbZxgPWVnSp0bibnydXivOq6cBooAvz3qg7OcGoMggzx4pF8bRNOCaIciSJtUl0xKqq7oRCEIVsIid/Qwco84WnHVoz2XDl2TClwWjDryaHggURPQZVGkKmseP/0mZ8mx0R5nfGn0hABfrjntd0HONZDbdhFWI8U5FmYlxb/NV31JbXW2fNSfd3NsY56r7VfpHyju7un1s= X-MS-TrafficTypeDiagnostic: DM5PR12MB1243: X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1243; 20:CxWIcWj/wYXg+6+ZnxvBSyDjTrfQJxHqga/jzd1EwGjQvky3YK9pRdMjaMFWuIHiiFUY7PxoZDGeHtX+7EfYkBYuE/o9Fke3AK+sHqU3m9YlDMh0Vg9mszcWqN0x5o0yhSk2qVOp9uKDTnAiZLIAdgpFoMaAU8b9P+xLg4EITFrEQkE7rYUUZK+wBvynx8KGI/0jPI8OeEqcbyvTPtH/k1Jy+r9Asw9bdFZCIeQ20XnRW5TbqytFtHssQiusz6YHnYQuTCWEcq2b/WFE1LCfH4NbtL1c9YmD0iDVXnfL9ZY3tOEWQGOlcWD8XD+toZUs80+gSdB8LsZuNeeKSSvO1wTaUWiLwd2Nu64wpKZm8jZTGhI+AsXBnxniRMlHSdXljLwRaWGN0i8KcT+U+BeVRgX2r0UF3XfCCd13X4R6Kb1dG31rNAqYlsimajhisjMEcELY/xJGFQJR2+F1/l0H+/UWCo5MYttfugdzVYBsphCkErhC1eEkGS+fcxc6IoG+; 4:InxB7LfmD4lElqT7M27FZuMrIs4oA7Dirz5g6vWnSn2Y4wf9IzN5YhYy5wM9uTnp2ayx5IqiC/e+wiyn8TsCBZQr/Wue5Zv/o/6ugOw/SBwYrLkH2ZrpUPjerwGZQMAz+h7Jp6Ko55V5P5iw2+V9k2eu+WFPFK6DIrTQ87ruBquMw/wpkFglNM7DXDw+hE4o3wOF6N6L9gVVnwHA/0PUcd36t45mMtUfQpHcL082S8F4ftwdPVu7Bh6kRddJPZkWmwczak8SJ4/7rIjo37m5HZ+IYumZlGbR30tusVrBA9VuZxMu1gikzYg+mJ+N8jscu0KxUVLk8Cd/7Jn0/7J7I+b1RkVMAldBkiq+yCQciag= X-Exchange-Antispam-Report-Test: UriScan:(767451399110)(788757137089)(228905959029699); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(3002001)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(6055026)(6041248)(20161123564025)(20161123555025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM5PR12MB1243; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM5PR12MB1243; X-Forefront-PRVS: 0457F11EAF X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(39860400002)(376002)(346002)(199003)(189002)(36756003)(68736007)(189998001)(16526018)(53936002)(16586007)(50466002)(966005)(2906002)(81156014)(3846002)(48376002)(316002)(6306002)(305945005)(81166006)(8676002)(53946003)(86362001)(6116002)(97736004)(478600001)(8936002)(7736002)(2351001)(5003940100001)(2361001)(53376002)(53416004)(6666003)(50986999)(6486002)(25786009)(76176999)(106356001)(16799955002)(4326008)(5660300001)(105586002)(575784001)(66066001)(50226002)(15188155005)(54906003)(47776003)(33646002)(101416001)(6916009)(2950100002)(19627235001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB1243; H:leduran-Precision-WorkStation-T5400.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR12MB1243; 23:6UIy2K23wBm6kBpA11aNCZ/YMgUvvklwPbYf0jdIX?= =?us-ascii?Q?2NO9KNVPzKVDXeyGDkqVhFue1hYOlswngD3GVPcKRMGL2xWCD9gsSOenOuEq?= =?us-ascii?Q?mO50Bqx4ij8I2y3MPJ1bZ+9EShCgL7Q2AoVT/hNY+Kb0ob1vVO8uyeIgcpbA?= =?us-ascii?Q?BD/m6eo17atwfYKONdZbKziGEju5CE70Hqy0A9oJiKw0AqkM1tb2f6O6Ygez?= =?us-ascii?Q?PmVzao8I6D/xkWT5aQkUtOu0Nkq4z+3UVKN0kABcWVJ6EOaYzvWzzIt4EL7+?= =?us-ascii?Q?ollW5E4XPqv8h1ssEa/ZabEwTebUUNNNxllLscaZhcxxApp/DgZlfb4oPKuk?= =?us-ascii?Q?k5I089A/RqU/B80d/2wnSkB6z2f7pQNdGjIbgfedcLIAK1ZGaiYcT6Y0kc5w?= =?us-ascii?Q?eiqP1KC6aJFP0Ix0ravQUlDn++G36Qik/LiypwugvdH7G78wcYA1rhaW9HYR?= =?us-ascii?Q?GSJORKHLKAB7i6i8x8/ez5xHE44IsSn8VgTiFW4e25T2i0zqd+KlroYqoOPd?= =?us-ascii?Q?9fa23JmdiYgJTZLo2qCESgyriXMjXrEhNH79SdGR0bIyXi8WRx8rbvlwMPVJ?= =?us-ascii?Q?dtjO+r0IQ/vzM97/BqCTkNzfwOqLyeiscHBoWtmwFSf8LZwZS8W05RsR0Jtm?= =?us-ascii?Q?Vp1lrsrSp1GQ4+oa1I9fkV4fa7f7VDvZh1iIF9iOnhJvT39xCvcjsxpCuPP6?= =?us-ascii?Q?oqktB2N7rXAYhlJdOXop7Xess9NB47Zm+/YXEfMygAH4WXgnT5ymh1l7iTlb?= =?us-ascii?Q?gzQ+h386sBYUoCL8IVVTeNv+2h1a2kyKNTnvq9xQhgAj32KJE1jaPLdDVVjG?= =?us-ascii?Q?66Lnpt6mbWC7b0ozvy9hOTOXCdjoKhYpekRLOXvM4AMuPAKmaI29PV40INJG?= =?us-ascii?Q?9qXac8B+7MWK9UOABoi4UGN9TbHhV18ntzx9oSVEMyIKaY7xCq4ud909t+uk?= =?us-ascii?Q?8V6Sz7FWXyZyoX0JC4DH9AZzP+TW3Mk+PgRT6CFg23qrWOaxbU/q8NCr8Oyq?= =?us-ascii?Q?KU05GktrY9IDtLqHSTTsBOimR5NW6i8DF90fv9c6dYlhD1HAsf/Gadu4e+wr?= =?us-ascii?Q?stOp0oBguVbM1J55D7FfskVDQ5jFw7xA4vZoaJJ3y713U5g0n/MyG39uITj5?= =?us-ascii?Q?MZUBGkAzyWQzkDCBwUVFpt2AJ/vqxzcb4Kt8x1GO70KoYfGB4Rvlr2cpYG3K?= =?us-ascii?Q?PGjKkDZMbIfrgCQpDf8XlCwpd8/ohsOkQI1L8pklSfC54bWdlEtZar8s61Vi?= =?us-ascii?Q?GXHmVAhMWYFMtkTsEh4Al7RbORxcekfiLfu2NWmU8AnXUUpbvJJ20UtIxaIq?= =?us-ascii?Q?UiAv7bpWbH2F3HCwJ8zOI8=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1243; 6:tdXwLtQL+Kz5aSMoW9Wjxt5VgVzIx53VUT0iDngQXLwrLC7ovyV+FF8rI69EO9y7IFEq55ixY+iHz59WOrrrgtaLN1Ck61IIzITGVJtG9KUuUQjhKLFE50qI+vBgAr0WrSGlTPjl+SIkC0+i0uS1IZcdDcEjkNxU7P2hpcli5bD6Yi9RLFnzWQWRryqNOrfbY8LiA3iKMC1HvYKu/V25zG2350Z3VXvxTZUNsnyMGLnH2Y2toTy48ex9vW6ddxfY7AYdFtsDF0jcxF6p+ZP2tv6xOwbBtQ37ouddZ5x0tqdSKqIu5rT647fg4bsGBNammNEG5lzllo2bXWvCO8a8aA==; 5:sAmKCQnuIcRBtvBiWFBzkYcGsbR3Gvd06EYZVvVeiwQPKmKEjTTzmpIvGTFkRnzZwxwVp8P3Pq3mRq6gIahpOObIIdClCnKithfReSic5ghp2+rz2rPM8BGBj3cKf4MwbhPizGJqWKbPQfzvPKd2ng==; 24:AW9isGMl5AQmgdSMTS6WWrYqTZy/3tONZNi/tfJ9hfoZfEewjFwQK4b6cTadXrmC0Aen3p4n9bJfaMHfFZJncAnZW5/giykJnQakYJwZuEg=; 7:4pl96V5bNL9/kpsDk9F2iyaAFaABeyGvCAZ+VT7hpnldV2bgIupP3cT3GSijKE/cwcQnhC5RBXblJAn7KwJwk1neU57MGkSWDk8yOLDxxTm20Te4rImNLkL3Jmb2smXYI9ugob7K391CqEuhSOOLFM7+9NAxKdrWHBMqj7pNkK01LaBqrnot84VhwQV3/SJNSr8w6gEBugifay1CFHK5Pb7oyS1P1m5as4Nb9Gf9NM4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB1243; 20:Qdc/5jjcg8USap0fYs5CU4RuvfXOVpn5/EHbmACtne0W9WHUSy3qTTf5GNXCKnu1EEh58vOuKGLMX8rh2XeOVdX99UIg7wE7iKSUWy06TQKkLztg7lcGx05O6yira3QfF8wG4HY4AT7zs/Od8W2uHP1+tryi99nu790O94uNUtN7kw2pfoavIRFuEpitF/K44gDxCR6Rthr1rDUZXo/2ODUrzl0kLHXZl3SgGgr/XppeAZmR5Op9RzJ+cP+Pwye+ X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Oct 2017 19:45:42.6688 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1243 Subject: [edk2] [PATCH v5 1/2] UefiCpuPkg/SmmCpuFeaturesLib: Use global variables to replace macros X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ruiyu Ni , Jordan Justen , Liming Gao , Jiewen Yao , Michael D Kinney Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Set global variables on Constructor function based on CPUID checks. The variables replace Intel macros to allow support on AMD x86 systems. Specifically, the replaced macros are: 1) SRAM_SAVE_STATE_MAP_OFFSET 2) TXT_SMM_PSD_OFFSET Cc: Jiewen Yao Cc: Ruiyu Ni Cc: Michael D Kinney Cc: Jordan Justen Cc: Liming Gao Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Leo Duran --- .../Library/SmmCpuFeaturesLib/Ia32/SmiEntry.S | 28 ++++++---- .../Library/SmmCpuFeaturesLib/Ia32/SmiEntry.asm | 29 +++++++---- .../Library/SmmCpuFeaturesLib/Ia32/SmiEntry.nasm | 43 ++++++++++++---- UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCommon.h | 48 ++++++++++++++++++ .../Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c | 59 ++++++++++++++++++= ---- .../SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf | 3 ++ .../SmmCpuFeaturesLib/SmmCpuFeaturesLibStm.inf | 3 ++ UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmStm.c | 39 ++++++++++++-- .../Library/SmmCpuFeaturesLib/X64/SmiEntry.S | 28 ++++++---- .../Library/SmmCpuFeaturesLib/X64/SmiEntry.asm | 30 +++++++---- .../Library/SmmCpuFeaturesLib/X64/SmiEntry.nasm | 47 ++++++++++++----- 11 files changed, 282 insertions(+), 75 deletions(-) create mode 100644 UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCommon.h diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.S b/UefiCpu= Pkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.S index 4c0f8c8..c7b49d7 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.S +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.S @@ -1,6 +1,8 @@ #-------------------------------------------------------------------------= ----- # # Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2017, AMD Incorporated. All rights reserved.
+# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BS= D License # which accompanies this distribution. The full text of the license may b= e found at @@ -28,6 +30,9 @@ ASM_GLOBAL ASM_PFX(gStmSmbase) ASM_GLOBAL ASM_PFX(gStmXdSupported) ASM_GLOBAL ASM_PFX(FeaturePcdGet (PcdCpuSmmStackGuard)) ASM_GLOBAL ASM_PFX(gStmSmiHandlerIdtr) +ASM_GLOBAL ASM_PFX(gStmPsdOffset) +ASM_GLOBAL ASM_PFX(gStmGdtSize) +ASM_GLOBAL ASM_PFX(gStmGdtPtr) =20 .equ MSR_IA32_MISC_ENABLE, 0x1A0 .equ MSR_EFER, 0xc0000080 @@ -36,12 +41,13 @@ ASM_GLOBAL ASM_PFX(gStmSmiHandlerIdtr) # # Constants relating to TXT_PROCESSOR_SMM_DESCRIPTOR # -.equ DSC_OFFSET, 0xfb00 -.equ DSC_GDTPTR, 0x48 -.equ DSC_GDTSIZ, 0x50 -.equ DSC_CS, 0x14 -.equ DSC_DS, 0x16 -.equ DSC_SS, 0x18 +# .equ DSC_OFFSET, 0xfb00 +# .equ DSC_GDTPTR, 0x48 +# .equ DSC_GDTSIZ, 0x50 +# +.equ DSC_CS, 0x14 +.equ DSC_DS, 0x16 +.equ DSC_SS, 0x18 .equ DSC_OTHERSEG, 0x1A =20 .equ PROTECT_MODE_CS, 0x08 @@ -55,11 +61,11 @@ _StmSmiEntryPoint: .byte 0xbb # mov bx, imm16 .word _StmGdtDesc - _StmSmiEntryPoint + 0x8000 .byte 0x2e,0xa1 # mov ax, cs:[offset16] - .word DSC_OFFSET + DSC_GDTSIZ +ASM_PFX(gStmGdtSize): .space 2 # .word DSC_OFFSET + DSC_GDTSIZ decl %eax movl %eax, %cs:(%edi) # mov cs:[bx], ax .byte 0x66,0x2e,0xa1 # mov eax, cs:[offset16] - .word DSC_OFFSET + DSC_GDTPTR +ASM_PFX(gStmGdtPtr): .space 2 # .word DSC_OFFSET + DSC_GDTPTR movw %ax, %cs:2(%edi) movw %ax, %bp # ebp =3D GDT base .byte 0x66 @@ -167,7 +173,11 @@ XdDone: movl %cr0, %ebx orl $0x080010023, %ebx # enable paging + WP + NE + MP = + PE movl %ebx, %cr0 - leal DSC_OFFSET(%edi),%ebx + + movl $ASM_PFX(gStmPsdOffset), %ebx # leal DSC_OFFSET(%edi), %ebx + movzxw (%ebx), %esi + leal (%edi, %esi), %ebx + movw DSC_DS(%ebx),%ax movl %eax, %ds movw DSC_OTHERSEG(%ebx),%ax diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.asm b/UefiC= puPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.asm index 91dc1eb..4dbe276 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.asm +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.asm @@ -1,5 +1,7 @@ ;-------------------------------------------------------------------------= ----- ; ; Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.
+; Copyright (c) 2017, AMD Incorporated. All rights reserved.
+; ; This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BS= D License ; which accompanies this distribution. The full text of the license may b= e found at @@ -29,13 +31,14 @@ MSR_EFER_XD EQU 0800h ; ; Constants relating to TXT_PROCESSOR_SMM_DESCRIPTOR ; -DSC_OFFSET EQU 0fb00h -DSC_GDTPTR EQU 48h -DSC_GDTSIZ EQU 50h -DSC_CS EQU 14h -DSC_DS EQU 16h -DSC_SS EQU 18h -DSC_OTHERSEG EQU 1Ah +; DSC_OFFSET EQU 0fb00h +; DSC_GDTPTR EQU 48h +; DSC_GDTSIZ EQU 50h +; +DSC_CS EQU 14h +DSC_DS EQU 16h +DSC_SS EQU 18h +DSC_OTHERSEG EQU 1Ah =20 PROTECT_MODE_CS EQU 08h PROTECT_MODE_DS EQU 20h @@ -54,6 +57,9 @@ EXTERNDEF gStmSmbase:DWORD EXTERNDEF gStmXdSupported:BYTE EXTERNDEF FeaturePcdGet (PcdCpuSmmStackGuard):BYTE EXTERNDEF gStmSmiHandlerIdtr:FWORD +EXTERNDEF gStmPsdOffset:WORD +EXTERNDEF gStmGdtSize:WORD +EXTERNDEF gStmGdtPtr:WORD =20 .code =20 @@ -63,11 +69,11 @@ _StmSmiEntryPoint: DB 0bbh ; mov bx, imm16 DW offset _StmGdtDesc - _StmSmiEntryPoint + 8000h DB 2eh, 0a1h ; mov ax, cs:[offset16] - DW DSC_OFFSET + DSC_GDTSIZ +gStmGdtSize DW ? ; DSC_OFFSET + DSC_GDTSIZ dec eax mov cs:[edi], eax ; mov cs:[bx], ax DB 66h, 2eh, 0a1h ; mov eax, cs:[offset16] - DW DSC_OFFSET + DSC_GDTPTR +gStmGdtPtr DW ? ; DSC_OFFSET + DSC_GDTPTR mov cs:[edi + 2], ax ; mov cs:[bx + 2], eax mov bp, ax ; ebp =3D GDT base DB 66h @@ -174,7 +180,10 @@ gStmXdSupported DB 1 mov ebx, cr0 or ebx, 080010023h ; enable paging + WP + NE + MP + PE mov cr0, ebx - lea ebx, [edi + DSC_OFFSET] + + movzx esi, word ptr [gStmPsdOffset] ; lea ebx, [edi + DSC_OFFS= ET] + lea ebx, [edi + esi] ; + mov ax, [ebx + DSC_DS] mov ds, eax mov ax, [ebx + DSC_OTHERSEG] diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.nasm b/Uefi= CpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.nasm index 00c0f067..023923a 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.nasm +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/Ia32/SmiEntry.nasm @@ -1,5 +1,7 @@ ;-------------------------------------------------------------------------= ----- ; ; Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.
+; Copyright (c) 2017, AMD Incorporated. All rights reserved.
+; ; This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BS= D License ; which accompanies this distribution. The full text of the license may b= e found at @@ -25,17 +27,18 @@ ; ; Constants relating to TXT_PROCESSOR_SMM_DESCRIPTOR ; -%define DSC_OFFSET 0xfb00 -%define DSC_GDTPTR 0x48 -%define DSC_GDTSIZ 0x50 -%define DSC_CS 0x14 -%define DSC_DS 0x16 -%define DSC_SS 0x18 -%define DSC_OTHERSEG 0x1a +; %define DSC_OFFSET 0xfb00 +; %define DSC_GDTPTR 0x48 +; %define DSC_GDTSIZ 0x50 +; +%define DSC_CS 0x14 +%define DSC_DS 0x16 +%define DSC_SS 0x18 +%define DSC_OTHERSEG 0x1a =20 %define PROTECT_MODE_CS 0x8 %define PROTECT_MODE_DS 0x20 -%define TSS_SEGMENT 0x40 +%define TSS_SEGMENT 0x40 =20 extern ASM_PFX(SmiRendezvous) extern ASM_PFX(FeaturePcdGet (PcdCpuSmmStackGuard)) @@ -51,6 +54,10 @@ global ASM_PFX(gStmSmbase) global ASM_PFX(gStmXdSupported) extern ASM_PFX(gStmSmiHandlerIdtr) =20 +extern ASM_PFX(gStmPsdOffset) +global ASM_PFX(gStmGdtSize) +global ASM_PFX(gStmGdtPtr) + ASM_PFX(gStmSmiCr3) EQU StmSmiCr3Patch - 4 ASM_PFX(gStmSmiStack) EQU StmSmiStackPatch - 4 ASM_PFX(gStmSmbase) EQU StmSmbasePatch - 4 @@ -62,10 +69,18 @@ BITS 16 ASM_PFX(gcStmSmiHandlerTemplate): _StmSmiEntryPoint: mov bx, _StmGdtDesc - _StmSmiEntryPoint + 0x8000 - mov ax,[cs:DSC_OFFSET + DSC_GDTSIZ] + + mov eax, ASM_PFX(gStmGdtSize) ; mov ax, [cs:DSC_OFFSET + D= SC_GDTSIZ] + mov si, [cs:eax] ; + mov ax, [cs:si] ; + dec ax mov [cs:bx], ax - mov eax, [cs:DSC_OFFSET + DSC_GDTPTR] + + mov eax, ASM_PFX(gStmGdtPtr) ; mov eax, [cs:DSC_OFFSET + = DSC_GDTPTR] + mov si, [cs:eax] ; + mov eax, [cs:si] ; + mov [cs:bx + 2], eax mov ebp, eax ; ebp =3D GDT base o32 lgdt [cs:bx] ; lgdt fword ptr cs:[bx] @@ -166,7 +181,10 @@ StmXdSupportedPatch: mov ebx, cr0 or ebx, 0x80010023 ; enable paging + WP + NE + MP + PE mov cr0, ebx - lea ebx, [edi + DSC_OFFSET] + + movzx esi, word [ASM_PFX(gStmPsdOffset)] ; lea ebx, [edi + DSC_= OFFSET] + lea ebx, [edi + esi] ; + mov ax, [ebx + DSC_DS] mov ds, eax mov ax, [ebx + DSC_OTHERSEG] @@ -271,5 +289,8 @@ _StmSmiHandler: ; STM init finish jmp CommonHandler =20 +ASM_PFX(gStmGdtSize) : RESW 1 +ASM_PFX(gStmGdtPtr) : RESW 1 + ASM_PFX(gcStmSmiHandlerSize) : DW $ - _StmSmiEntryPoint ASM_PFX(gcStmSmiHandlerOffset) : DW _StmSmiHandler - _StmSmiEntryPo= int diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCommon.h b/UefiCpuPkg/= Library/SmmCpuFeaturesLib/SmmCommon.h new file mode 100644 index 0000000..78b3a5b --- /dev/null +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCommon.h @@ -0,0 +1,48 @@ +/** @file + Common declarations + + Copyright (c) 2017, AMD Incorporated. All rights reserved.
+ + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BS= D License + which accompanies this distribution. The full text of the license may b= e found at + http://opensource.org/licenses/bsd-license.php. + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. + +**/ + +#ifndef _SMM_COMMON_H_ +#define _SMM_COMMON_H_ + +#include + +// +// Definitions for AMD systems are based on contents of the +// AMD64 Architecture Programmer's Manual +// Volume 2: System Programming, Section 10 System-Management Mode +// +#define AMD_SMRAM_SAVE_STATE_MAP_OFFSET 0xfe00 +#define AMD_SMM_PSD_OFFSET 0xfc00 + +// +// External global variables for SMRAM offsets +// +extern UINT16 gSmramStateMapOffset; +extern UINT16 gSmmPsdOffset; + + +/** + Determine if the standard CPU signature is "AuthenticAMD". + + @retval TRUE The CPU signature matches. + @retval FALSE The CPU signature does not match. + +**/ +BOOLEAN +SmmStandardSignatureIsAuthenticAMD ( + VOID + ); + +#endif diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c b/Uef= iCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c index 2d2bc6d..1c12095 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c @@ -1,14 +1,16 @@ /** @file -The CPU specific programming for PiSmmCpuDxeSmm module. + The CPU specific programming for PiSmmCpuDxeSmm module. =20 -Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.
-This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD = License -which accompanies this distribution. The full text of the license may be = found at -http://opensource.org/licenses/bsd-license.php + Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.
+ Copyright (c) 2017, AMD Incorporated. All rights reserved.
=20 -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLI= ED. + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BS= D License + which accompanies this distribution. The full text of the license may b= e found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. =20 **/ =20 @@ -22,6 +24,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER= EXPRESS OR IMPLIED. #include #include =20 +#include "SmmCommon.h" + // // Machine Specific Registers (MSRs) // @@ -41,6 +45,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER= EXPRESS OR IMPLIED. #define SMM_FEATURES_LIB_IA32_MCA_CAP 0x17D #define SMM_CODE_ACCESS_CHK_BIT BIT58 =20 + /** Internal worker function that is called to complete CPU initialization a= t the end of SmmCpuFeaturesInitializeProcessor(). @@ -77,6 +82,13 @@ BOOLEAN mNeedConfigureMtrrs =3D TRUE; // BOOLEAN *mSmrrEnabled; =20 +// +// Set default value for SMRAM offset +// from +// +UINT16 gSmramStateMapOffset =3D SMRAM_SAVE_STATE_MAP_OFFSET; + + /** The constructor function =20 @@ -99,6 +111,13 @@ SmmCpuFeaturesLibConstructor ( UINTN ModelId; =20 // + // Override SMRAM offset for AMD + // + if (SmmStandardSignatureIsAuthenticAMD ()) { + gSmramStateMapOffset =3D AMD_SMRAM_SAVE_STATE_MAP_OFFSET; + } + + // // Retrieve CPU Family and Model // AsmCpuid (CPUID_VERSION_INFO, &RegEax, NULL, NULL, &RegEdx); @@ -224,7 +243,7 @@ SmmCpuFeaturesInitializeProcessor ( // // Configure SMBASE. // - CpuState =3D (SMRAM_SAVE_STATE_MAP *)(UINTN)(SMM_DEFAULT_SMBASE + SMRAM_= SAVE_STATE_MAP_OFFSET); + CpuState =3D (SMRAM_SAVE_STATE_MAP *)(UINTN)(SMM_DEFAULT_SMBASE + gSmram= StateMapOffset); CpuState->x86.SMBASE =3D (UINT32)CpuHotPlugData->SmBase[CpuIndex]; =20 // @@ -630,3 +649,25 @@ SmmCpuFeaturesAllocatePageTableMemory ( return NULL; } =20 + +/** + Determine if the standard CPU signature is "AuthenticAMD". + + @retval TRUE The CPU signature matches. + @retval FALSE The CPU signature does not match. + +**/ +BOOLEAN +SmmStandardSignatureIsAuthenticAMD ( + VOID + ) +{ + UINT32 RegEbx; + UINT32 RegEcx; + UINT32 RegEdx; + + AsmCpuid (CPUID_SIGNATURE, NULL, &RegEbx, &RegEcx, &RegEdx); + return (RegEbx =3D=3D CPUID_SIGNATURE_AUTHENTIC_AMD_EBX && + RegEcx =3D=3D CPUID_SIGNATURE_AUTHENTIC_AMD_ECX && + RegEdx =3D=3D CPUID_SIGNATURE_AUTHENTIC_AMD_EDX); +} diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf b/U= efiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf index 77908b0..6a39d4b 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf @@ -2,6 +2,8 @@ # The CPU specific programming for PiSmmCpuDxeSmm module. # # Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2017, AMD Incorporated. All rights reserved.
+# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License # which accompanies this distribution. The full text of the license may = be found at @@ -24,6 +26,7 @@ =20 [Sources] SmmCpuFeaturesLib.c + SmmCommon.h SmmCpuFeaturesLibNoStm.c =20 [Packages] diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLibStm.inf = b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLibStm.inf index db8dcdc..a76bed6 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLibStm.inf +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLibStm.inf @@ -3,6 +3,8 @@ # is included. # # Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2017, AMD Incorporated. All rights reserved.
+# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License # which accompanies this distribution. The full text of the license may = be found at @@ -25,6 +27,7 @@ =20 [Sources] SmmCpuFeaturesLib.c + SmmCommon.h SmmStm.c SmmStm.h =20 diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmStm.c b/UefiCpuPkg/Lib= rary/SmmCpuFeaturesLib/SmmStm.c index 45015b8..5f7c3db 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmStm.c +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmStm.c @@ -2,6 +2,8 @@ SMM STM support functions =20 Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.
+ Copyright (c) 2017, AMD Incorporated. All rights reserved.
+ This program and the accompanying materials are licensed and made available under the terms and conditions of the BS= D License which accompanies this distribution. The full text of the license may b= e found at @@ -28,6 +30,8 @@ #include =20 #include "SmmStm.h" +#include "SmmCommon.h" + =20 #define TXT_EVTYPE_BASE 0x400 #define TXT_EVTYPE_STM_HASH (TXT_EVTYPE_BASE + 14) @@ -97,6 +101,20 @@ extern volatile UINT8 gcStmSmiHand= lerTemplate[]; extern CONST UINT16 gcStmSmiHandlerSize; extern UINT16 gcStmSmiHandlerOffset; extern BOOLEAN gStmXdSupported; +extern UINT16 gStmGdtSize; +extern UINT16 gStmGdtPtr; + +// +// Constants relating to TXT_PROCESSOR_SMM_DESCRIPTOR +// +#define TXT_PSD_GDTPTR 0x48 +#define TXT_PSD_GDTSIZE 0x50 + +// +// Set default value for PSD offset in SMRAM +// from +// +UINT16 gStmPsdOffset =3D TXT_SMM_PSD_OFFSET; =20 // // Variables used by SMI Handler @@ -145,6 +163,19 @@ SmmCpuFeaturesLibStmConstructor ( ASSERT_EFI_ERROR (Status); =20 // + // Override PSD offset for AMD + // + if (SmmStandardSignatureIsAuthenticAMD ()) { + gStmPsdOffset =3D AMD_SMM_PSD_OFFSET; + } + + // + // Initialize STM global variables associated with SMI Handler + // + gStmGdtSize =3D gStmPsdOffset + TXT_PSD_GDTSIZE; + gStmGdtPtr =3D gStmPsdOffset + TXT_PSD_GDTPTR; + + // // Lookup the MP Services Protocol // Status =3D gBS->LocateProtocol ( @@ -276,8 +307,8 @@ SmmCpuFeaturesInstallSmiHandler ( UINT32 RegEdx; EFI_PROCESSOR_INFORMATION ProcessorInfo; =20 - CopyMem ((VOID *)((UINTN)SmBase + TXT_SMM_PSD_OFFSET), &gcStmPsd, sizeof= (gcStmPsd)); - Psd =3D (TXT_PROCESSOR_SMM_DESCRIPTOR *)(VOID *)((UINTN)SmBase + TXT_SMM= _PSD_OFFSET); + CopyMem ((VOID *)((UINTN)SmBase + gStmPsdOffset), &gcStmPsd, sizeof (gcS= tmPsd)); + Psd =3D (TXT_PROCESSOR_SMM_DESCRIPTOR *)(VOID *)((UINTN)SmBase + gStmPsd= Offset); Psd->SmmGdtPtr =3D GdtBase; Psd->SmmGdtSize =3D (UINT32)GdtSize; =20 @@ -416,7 +447,7 @@ SmmEndOfDxeEventNotify ( } =20 for (Index =3D 0; Index < gSmst->NumberOfCpus; Index++) { - Psd =3D (TXT_PROCESSOR_SMM_DESCRIPTOR *)((UINTN)gSmst->CpuSaveState[In= dex] - SMRAM_SAVE_STATE_MAP_OFFSET + TXT_SMM_PSD_OFFSET); + Psd =3D (TXT_PROCESSOR_SMM_DESCRIPTOR *)((UINTN)gSmst->CpuSaveState[In= dex] - gSmramStateMapOffset + gStmPsdOffset); DEBUG ((DEBUG_INFO, "Index=3D%d Psd=3D%p Rsdp=3D%p\n", Index, Psd, R= sdp)); Psd->AcpiRsdp =3D (UINT64)(UINTN)Rsdp; } @@ -1266,7 +1297,7 @@ NotifyStmResourceChange ( TXT_PROCESSOR_SMM_DESCRIPTOR *Psd; =20 for (Index =3D 0; Index < gSmst->NumberOfCpus; Index++) { - Psd =3D (TXT_PROCESSOR_SMM_DESCRIPTOR *)((UINTN)gSmst->CpuSaveState[In= dex] - SMRAM_SAVE_STATE_MAP_OFFSET + TXT_SMM_PSD_OFFSET); + Psd =3D (TXT_PROCESSOR_SMM_DESCRIPTOR *)((UINTN)gSmst->CpuSaveState[In= dex] - gSmramStateMapOffset + gStmPsdOffset); Psd->BiosHwResourceRequirementsPtr =3D (UINT64)(UINTN)StmResource; } return ; diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.S b/UefiCpuP= kg/Library/SmmCpuFeaturesLib/X64/SmiEntry.S index 1f9f91c..5f3386a 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.S +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.S @@ -1,6 +1,8 @@ #-------------------------------------------------------------------------= ----- # # Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2017, AMD Incorporated. All rights reserved.
+# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BS= D License # which accompanies this distribution. The full text of the license may b= e found at @@ -27,6 +29,9 @@ ASM_GLOBAL ASM_PFX(gStmSmiStack) ASM_GLOBAL ASM_PFX(gStmSmbase) ASM_GLOBAL ASM_PFX(gStmXdSupported) ASM_GLOBAL ASM_PFX(gStmSmiHandlerIdtr) +ASM_GLOBAL ASM_PFX(gStmPsdOffset) +ASM_GLOBAL ASM_PFX(gStmGdtSize) +ASM_GLOBAL ASM_PFX(gStmGdtPtr) =20 .equ MSR_IA32_MISC_ENABLE, 0x1A0 .equ MSR_EFER, 0xc0000080 @@ -35,12 +40,13 @@ ASM_GLOBAL ASM_PFX(gStmSmiHandlerIdtr) # # Constants relating to TXT_PROCESSOR_SMM_DESCRIPTOR # -.equ DSC_OFFSET, 0xfb00 -.equ DSC_GDTPTR, 0x48 -.equ DSC_GDTSIZ, 0x50 -.equ DSC_CS, 0x14 -.equ DSC_DS, 0x16 -.equ DSC_SS, 0x18 +# .equ DSC_OFFSET, 0xfb00 +# .equ DSC_GDTPTR, 0x48 +# .equ DSC_GDTSIZ, 0x50 +# +.equ DSC_CS, 0x14 +.equ DSC_DS, 0x16 +.equ DSC_SS, 0x18 .equ DSC_OTHERSEG, 0x1a # # Constants relating to CPU State Save Area @@ -71,12 +77,12 @@ _StmSmiEntryPoint: # fix GDT descriptor # .byte 0x2e,0xa1 # mov ax, cs:[offset16] - .word DSC_OFFSET + DSC_GDTSIZ +ASM_PFX(gStmGdtSize): .space 2 # .word DSC_OFFSET + DSC_GDTSIZ .byte 0x48 # dec ax .byte 0x2e movl %eax, (%rdi) # mov cs:[bx], ax .byte 0x66,0x2e,0xa1 # mov eax, cs:[offset16] - .word DSC_OFFSET + DSC_GDTPTR +ASM_PFX(gStmGdtPtr): .space 2 # .word DSC_OFFSET + DSC_GDTPTR .byte 0x2e movw %ax, 2(%rdi) .byte 0x66,0x2e @@ -183,7 +189,11 @@ Base: LongMode: # long mode (64-bit code) starts h= ere movabsq $ASM_PFX(gStmSmiHandlerIdtr), %rax lidt (%rax) - lea (DSC_OFFSET)(%rdi), %ebx + + movl $ASM_PFX(gStmPsdOffset), %ebx # lea (DSC_OFFSET)(%rdi), %= ebx + movzxw (%ebx), %rsi + leal (%rdi, %rsi), %ebx + movw DSC_DS(%rbx), %ax movl %eax,%ds movw DSC_OTHERSEG(%rbx), %ax diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.asm b/UefiCp= uPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.asm index ad51e07..10913df 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.asm +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.asm @@ -1,5 +1,7 @@ ;-------------------------------------------------------------------------= ----- ; ; Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
+; Copyright (c) 2017, AMD Incorporated. All rights reserved.
+; ; This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BS= D License ; which accompanies this distribution. The full text of the license may b= e found at @@ -32,6 +34,10 @@ EXTERNDEF gStmSmiStack:DWORD EXTERNDEF gStmSmbase:DWORD EXTERNDEF gStmXdSupported:BYTE EXTERNDEF gStmSmiHandlerIdtr:FWORD +EXTERNDEF gStmPsdOffset:WORD +EXTERNDEF gStmGdtSize:WORD +EXTERNDEF gStmGdtPtr:WORD + =20 MSR_IA32_MISC_ENABLE EQU 1A0h MSR_EFER EQU 0c0000080h @@ -40,13 +46,14 @@ MSR_EFER_XD EQU 0800h ; ; Constants relating to TXT_PROCESSOR_SMM_DESCRIPTOR ; -DSC_OFFSET EQU 0fb00h -DSC_GDTPTR EQU 48h -DSC_GDTSIZ EQU 50h -DSC_CS EQU 14h -DSC_DS EQU 16h -DSC_SS EQU 18h -DSC_OTHERSEG EQU 1ah +; DSC_OFFSET EQU 0fb00h +; DSC_GDTPTR EQU 48h +; DSC_GDTSIZ EQU 50h +; +DSC_CS EQU 14h +DSC_DS EQU 16h +DSC_SS EQU 18h +DSC_OTHERSEG EQU 1ah ; ; Constants relating to CPU State Save Area ; @@ -74,12 +81,12 @@ _StmSmiEntryPoint: DW offset _StmGdtDesc - _StmSmiEntryPoint + 8000h ; bx =3D GdtDe= sc offset ; fix GDT descriptor DB 2eh, 0a1h ; mov ax, cs:[offset16] - DW DSC_OFFSET + DSC_GDTSIZ +gStmGdtSize DW ? ; DSC_OFFSET + DSC_GDTSIZ DB 48h ; dec ax DB 2eh mov [rdi], eax ; mov cs:[bx], ax DB 66h, 2eh, 0a1h ; mov eax, cs:[offset16] - DW DSC_OFFSET + DSC_GDTPTR +gStmGdtPtr DW ? ; DSC_OFFSET + DSC_GDTPTR DB 2eh mov [rdi + 2], ax ; mov cs:[bx + 2], eax DB 66h, 2eh @@ -178,7 +185,10 @@ Base: @LongMode: ; long mode (64-bit code) starts h= ere mov rax, offset gStmSmiHandlerIdtr lidt fword ptr [rax] - lea ebx, [rdi + DSC_OFFSET] + + movzx rsi, word ptr [gStmPsdOffset] ; lea ebx, [rdi + DSC_OFFS= ET] + lea ebx, [rdi + rsi] ; + mov ax, [rbx + DSC_DS] mov ds, eax mov ax, [rbx + DSC_OTHERSEG] diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.nasm b/UefiC= puPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.nasm index bcac643..df4c5a2 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.nasm +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/X64/SmiEntry.nasm @@ -1,5 +1,7 @@ ;-------------------------------------------------------------------------= ----- ; ; Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.
+; Copyright (c) 2017, AMD Incorporated. All rights reserved.
+; ; This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BS= D License ; which accompanies this distribution. The full text of the license may b= e found at @@ -29,13 +31,14 @@ ; ; Constants relating to TXT_PROCESSOR_SMM_DESCRIPTOR ; -%define DSC_OFFSET 0xfb00 -%define DSC_GDTPTR 0x48 -%define DSC_GDTSIZ 0x50 -%define DSC_CS 0x14 -%define DSC_DS 0x16 -%define DSC_SS 0x18 -%define DSC_OTHERSEG 0x1a +; %define DSC_OFFSET 0xfb00 +; %define DSC_GDTPTR 0x48 +; %define DSC_GDTSIZ 0x50 +; +%define DSC_CS 0x14 +%define DSC_DS 0x16 +%define DSC_SS 0x18 +%define DSC_OTHERSEG 0x1a ; ; Constants relating to CPU State Save Area ; @@ -44,9 +47,9 @@ =20 %define PROTECT_MODE_CS 0x8 %define PROTECT_MODE_DS 0x20 -%define LONG_MODE_CS 0x38 -%define TSS_SEGMENT 0x40 -%define GDT_SIZE 0x50 +%define LONG_MODE_CS 0x38 +%define TSS_SEGMENT 0x40 +%define GDT_SIZE 0x50 =20 extern ASM_PFX(SmiRendezvous) extern ASM_PFX(gStmSmiHandlerIdtr) @@ -61,6 +64,10 @@ global ASM_PFX(gcStmSmiHandlerTemplate) global ASM_PFX(gcStmSmiHandlerSize) global ASM_PFX(gcStmSmiHandlerOffset) =20 +extern ASM_PFX(gStmPsdOffset) +global ASM_PFX(gStmGdtSize) +global ASM_PFX(gStmGdtPtr) + ASM_PFX(gStmSmbase) EQU StmSmbasePatch - 4 ASM_PFX(gStmSmiStack) EQU StmSmiStackPatch - 4 ASM_PFX(gStmSmiCr3) EQU StmSmiCr3Patch - 4 @@ -73,10 +80,18 @@ BITS 16 ASM_PFX(gcStmSmiHandlerTemplate): _StmSmiEntryPoint: mov bx, _StmGdtDesc - _StmSmiEntryPoint + 0x8000 - mov ax,[cs:DSC_OFFSET + DSC_GDTSIZ] + + mov eax, ASM_PFX(gStmGdtSize) ; mov ax, [cs:DSC_OFFSET + D= SC_GDTSIZ] + mov si, [cs:eax] ; + mov ax, [cs:si] ; + dec ax mov [cs:bx], ax - mov eax, [cs:DSC_OFFSET + DSC_GDTPTR] + + mov eax, ASM_PFX(gStmGdtPtr) ; mov eax, [cs:DSC_OFFSET + = DSC_GDTPTR] + mov si, [cs:eax] ; + mov eax, [cs:si] ; + mov [cs:bx + 2], eax o32 lgdt [cs:bx] ; lgdt fword ptr cs:[bx] mov ax, PROTECT_MODE_CS @@ -166,7 +181,10 @@ Base: @LongMode: ; long mode (64-bit code) starts h= ere mov rax, ASM_PFX(gStmSmiHandlerIdtr) lidt [rax] - lea ebx, [rdi + DSC_OFFSET] + + movzx rsi, word [ASM_PFX(gStmPsdOffset)] ; lea ebx, [rdi + DSC_= OFFSET] + lea ebx, [rdi + rsi] ; + mov ax, [rbx + DSC_DS] mov ds, eax mov ax, [rbx + DSC_OTHERSEG] @@ -262,5 +280,8 @@ _StmSmiHandler: ; STM init finish jmp CommonHandler =20 +ASM_PFX(gStmGdtSize) : RESW 1 +ASM_PFX(gStmGdtPtr) : RESW 1 + ASM_PFX(gcStmSmiHandlerSize) : DW $ - _StmSmiEntryPoint ASM_PFX(gcStmSmiHandlerOffset) : DW _StmSmiHandler - _StmSmiEntryPoint --=20 2.7.4 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel