From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (NAM02-DM3-obe.outbound.protection.outlook.com [40.107.95.73]) by mx.groups.io with SMTP id smtpd.web11.6025.1684378273864474354 for ; Wed, 17 May 2023 19:51:14 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nvidia.com header.s=selector2 header.b=oYZp31c+; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: nvidia.com, ip: 40.107.95.73, mailfrom: nicklew@nvidia.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XPJB1Vr83jJknpJCrn6uCBZSzu7qfEXDlvoWtCMP9fG3Ygb0xKWdPRNCep8gJBuVc6cI+3c1m4mpTTD6XWhF1A/fRJP1xPFomP0qyT4+DYEDrAjEY0Xa+1KDYSZtfxrU2Gw11D3cpQeEP7U7Vsozr+LQ4sp6QVVtJ1Cf98V0c0Vz/Y5IWOK4MT2rwBX275FfFs9wKuX29jaZAAbIK0uji8/qZ1ZoHRdtk7fcIWGncmOk5hWO/VL0YGR3nWvjayDhrwltOsQ2+Hfy4cz9J3yxRVjU2u35XWmjmtQLtUBWV12SKsZZIj9zv/8VVgdVMTgmYZ6lKrRnY3J3YrfZcssnSg== 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=st56dlL4UbAJvrENX7d0vfJka307bsZ9lLeGcXkXCpw=; b=kHomNy5FuNSPn9mH1fXQj3vlwK/qO55WLjPUlLyhax2MOCXfkj3G5WVHFzGqUgb4JdrClvRVs0jctCnI1lUHo+0vrAV1N4BFZikGQBlqikF4aXIcXj5KtHT+Ddql43fE+eqn96aIYNycJrm5JhMrYv+Zyy+S6lZcGATriqAynSdatAObE7u2VVo4iIolgjZTXNR0ljLnSzdl7vsaMn65oWb8eoxjqNUZoBjiqu7hNX650s2ubyib+9uM6blXLvH4qXVnbE9WVE4P5QALSsqWaoNYvVgIsnGpJy4JQG+hNc/wqKl7KMjnqsHXd2h3mNMEZl1ScATfYHLZvxLhXZlm1g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=st56dlL4UbAJvrENX7d0vfJka307bsZ9lLeGcXkXCpw=; b=oYZp31c+jPit0EaRqB1BXKSnV9SXBPgjQZZrOYGwVQBRjP7t5PHi5pcGitcXZ8tf+AIegl2wUdvHI34ViNsGbHPBs9IwzjVL6myb8DBRRKWZLVYQ1YWVG5S9yOfPanyi72FZQRyriVENEqImV0pFZ4ZnxqKeUdoYw+dMtAAovNBwNEb6U6bB5mRK8GfolTjfQv77SOiez1qqtj48O2FdE9Cf8q9D9DWmD7rhXtHVk+xo8ie/rSRzjoVPOwDe+B4P1sJvJ+S21Nl7D1ddotcbQjWlip6jUTlfUEpzZt1hyykZYfM09t5VC9Ov8d5JCm7oKWpbtrLC5GsCIhoCYXOdlw== Received: from DM4PR12MB6182.namprd12.prod.outlook.com (2603:10b6:8:a8::15) by MN2PR12MB4094.namprd12.prod.outlook.com (2603:10b6:208:15f::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.33; Thu, 18 May 2023 02:51:11 +0000 Received: from MW4PR12MB7031.namprd12.prod.outlook.com (2603:10b6:303:1ef::6) by DM4PR12MB6182.namprd12.prod.outlook.com (2603:10b6:8:a8::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.17; Thu, 18 May 2023 02:51:10 +0000 Received: from MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::d9df:b45b:2cc1:f017]) by MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::d9df:b45b:2cc1:f017%5]) with mapi id 15.20.6387.023; Thu, 18 May 2023 02:51:09 +0000 From: "Nickle Wang" To: "devel@edk2.groups.io" , "Chang, Abner" CC: Isaac Oram , "Attar, AbdulLateef (Abdul Lateef)" , Tinh Nguyen Subject: Re: [edk2-devel] [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver Thread-Topic: [edk2-devel] [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFrb: IPMI BMC ACPI Driver Thread-Index: AQHZhbKLMukOd77D2U6uPZy8i0iaC69fW7IQ Date: Thu, 18 May 2023 02:51:09 +0000 Message-ID: References: <175EBEB0B9A650EF.27409@groups.io> In-Reply-To: <175EBEB0B9A650EF.27409@groups.io> 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=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR12MB7031:EE_|DM4PR12MB6182:EE_|MN2PR12MB4094:EE_ x-ms-office365-filtering-correlation-id: 8183ff41-3dba-4284-be7f-08db574abbf8 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: InduhyaYqJ+8SsG4B63LfNRTJUnpEogPXKSS7hQ+HBi6zynUqdw4VJX+7CqdX2u6hQQbCIR8OHNQ69V7MqaUKgIB9whlwX8qtwzFbjOFSs72+Yoyi5toYj1HDiTZRyNEviDEMZf1H2Tf3GQ4td7R/KXiiobs7YlquUBEs7Da3KuPmoprhsj5+qF6JNh94CO/222H8tqlJozl+BWpVrFsQC5xGUwyXMkLy+ZfFunMNY5u63d8KYkQnUSGJW7AnZIi94+s5CTzkYRKm8NpxwKurIiiiPW2XM1BVqtqoMu5WgiXDYU06X7Lvmodla7rTEMA1/t98UVZ8EQR9R1if3mfcbq7uLU7sITvrLxWE7dQ/GgkdfrK0E5HTvcJimYnSO7GaQqkJFL99el4in7gqNLsJbHSiZD0sozTd49EMjWU+DJLIz4rXP6aKKU0FG/t3/EG7jgUomC9u4HHs15NOo5XaNmXFHY0RihmPkPwXDEmHL3oygtaLPW66ldvMB5Te+oiFykNC7Jl4EXWh1VcUmbyVpKxXntx6RgqCwQsU3ezRuAO3YpAUEmMyJxQMi1waZ+eAcnmkzWJTbSir0cof04y1M3YQA60rpgEwDUcop2N69y2xBJWP5nemdzV/jCTsoKw x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB6182.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(39860400002)(396003)(376002)(346002)(366004)(136003)(451199021)(53546011)(6506007)(9686003)(966005)(122000001)(86362001)(38100700002)(38070700005)(33656002)(186003)(83380400001)(55016003)(30864003)(54906003)(19627235002)(478600001)(2906002)(110136005)(8676002)(5660300002)(66446008)(4326008)(66476007)(64756008)(8936002)(66556008)(76116006)(66946007)(52536014)(316002)(66899021)(71200400001)(7696005)(41300700001)(127784003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?LVzpGdT0kdHrlVfhhLplGMOkiYFms4gBzwvmc996OLklaBltoBHMFekW2u6+?= =?us-ascii?Q?6DjB8fdq8zqeF5HNtjiEttoSVflkaTWuaI64n+PUPKDtJm09C8UN8r9Wjo72?= =?us-ascii?Q?rgFkM8ZhxLmUMV/W4SpA7ZfDtHh5M69QY1QHNrLgR4pjK/9+U7UuaMsM1hCo?= =?us-ascii?Q?aHSn/LWnzI0AO+ZJMMJgotbv+zCkhg/oHn5sONppSdYL06nn1DDVyUfK3WSH?= =?us-ascii?Q?JhlgzPtdwQa55BF0FBYjw8Xf46snxIAMii4XY4Orovsx10w3whUWbRtqnKZl?= =?us-ascii?Q?B4ZHFQQI85jBMZ87nIJDKzRys6UYp/D+5LEHKtInWRqv625lRAPmTlkPZjht?= =?us-ascii?Q?DcSl305rCh/GudZh83gOBKPeWnN1qAonqgneSMbL3hNS70UADaLeotD3YQmL?= =?us-ascii?Q?Zu++79hXkwufiOsVf7QJwMqXrckUoba8Sd6ox09ITa3aTSWRlb51Xy7+mFlj?= =?us-ascii?Q?MIs26WafSGsTtfGxmBb0CQTo4v5UP+T3qD4pZtKfmYzQPZjwkBkeu+GP9xPq?= =?us-ascii?Q?RzRF51RqiP0gA0ApYKL2j+2MejQdxQPv8UZ5gpJqbCRX4Ei5RddcLrW+dXWX?= =?us-ascii?Q?Ytq/N0No+8sQhvOvgWJ9850BQzO0mavCgLK0xv3BHMWoml95EAmyWbefHJZ/?= =?us-ascii?Q?9EI+GYMwl+co/OGQ+4uUugJZmOQFaiuhUpEkk4ghG/Odze6X9j+MCGU9nyi9?= =?us-ascii?Q?6uEnQ+IG4GmgJ1QIyBYNgNpMI1V7RXqc2hAp6M8ynqWrMAtXaG3qHPkqsqas?= =?us-ascii?Q?6mrmxd+PnEUCJ/tEV4xPU/uZVGW9HP8cqxAoyMM8COgH0j4C8NUY9W8X+/6M?= =?us-ascii?Q?Z5yHG6JpLkSf1kUmEP3HjyosMwui2yUnpZ+Y1FVIoSy6EjTTE54q5ERqem1G?= =?us-ascii?Q?OSU9zc2+T8dXQoY8IhSUczDFnNxl8AZhlvpzf84ZkKA8kTPC4Q7enK1RG6F9?= =?us-ascii?Q?ky3ZxFG6Hwj2kMfGFlPsCNeuQyqDph4MjJNv4RUba6s11ZA6dKaxFAtCaNp3?= =?us-ascii?Q?ukAIH8/FPr5X3J8F41eMaBq4IJx1rii3Rl7Ssp/eM6Fb9IdXSImqoYYh6l0S?= =?us-ascii?Q?GCelkDE+ojR2Wm1IYWesHEJOL64ewsrSayawOu7Vs4p2Ler+A/RT9xm8GZee?= =?us-ascii?Q?+1tl7jJEQN0jLV/9hT0H6/zJtBqbhWh1MTWodY8hNkdH+2xoMDJmx5P6yJXK?= =?us-ascii?Q?hOBamrEaVqFUNvV186DhJIbqYT0MifYg7Nml9HpSfApbOCR24sDcZuGa3VKj?= =?us-ascii?Q?70xTATZ29w71O5iL9YeyfQQxaggZ0OHELUuT2ILInwLD4EeSYHrWpnv/ZI4R?= =?us-ascii?Q?M/AKOBkTAKoL7lqrtICEJ8Ft3BHRBDpZHK3ypxWtjaOklnRcVp7kIGP7c/Vg?= =?us-ascii?Q?Pdb0XdMnTApx+mYvdTorDee2mtJgKInJRN3CwUUm72mkwRSydgHfVC8OJKO3?= =?us-ascii?Q?ON9S1eJKP7FuT1WBakkQkzQBME13kka/Gr3BDTwGjIEpA8pF2lJJja0Zd4EQ?= =?us-ascii?Q?wzJicoFH99aDHYcohJjMoMNrwZ4xk+i7HTIuF/OPjdhILwhJHhwqTSEioea3?= =?us-ascii?Q?qlcjp90M9Hmn0nRXEGx9ToYAIr9hWMlZey2DCdHI0QMsuhz7XQicMWvbXqh3?= =?us-ascii?Q?kT3f0CV7ektzoAyyVe60XB6zz8wmTt5cSZbVtyRIomnR?= MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR12MB7031.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8183ff41-3dba-4284-be7f-08db574abbf8 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 May 2023 02:51:09.5643 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ACCv8Y6XKH66kiRimJr8EIAvxlxc9JOWtQm/x18XS9F11Oc3W0G9a1J7GUYF2FPdX/WZAT7PRkfgIsZaUW1LXA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4094 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Nickle Wang Regards, Nickle > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Chang, Abn= er > via groups.io > Sent: Saturday, May 13, 2023 11:49 PM > To: devel@edk2.groups.io > Cc: Isaac Oram ; Attar, AbdulLateef (Abdul Lateef= ) > ; Nickle Wang ; Tinh > Nguyen > Subject: [edk2-devel] [edk2-platforms][PATCH 1/2] ManageabilityPkg/IpmiFr= b: > IPMI BMC ACPI Driver >=20 > Caution: This message originated from an External Source. Use proper caut= ion > when opening attachments, clicking links, or responding. >=20 >=20 > From: Abner Chang >=20 > IpmiBmcAcpi is cloned from > edk2-platforms/Features/Intel/OutOfBandManagement/ > IpmiFeaturePkg/BmcAcpi in order to consolidate > edk2 system manageability support in one place. > Uncustify is applied to C files and no functionalities are changed in thi= s patch. >=20 > We will still keep the one under IpmiFeaturePkg/BmcAcpi until the referen= ce to > this instance are removed from platforms. >=20 > Signed-off-by: Abner Chang > Cc: Isaac Oram > Cc: Abdul Lateef Attar > Cc: Nickle Wang > Cc: Tinh Nguyen > --- > .../Universal/IpmiBmcAcpi/BmcAcpi.inf | 47 ++++ > .../Universal/IpmiBmcAcpi/BmcAcpi.c | 264 ++++++++++++++++++ > .../Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl | 28 ++ > .../IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.asi | 58 ++++ > 4 files changed, 397 insertions(+) > create mode 100644 > Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf > create mode 100644 > Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c > create mode 100644 > Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl > create mode 100644 > Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegions.as > i >=20 > diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf > b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf > new file mode 100644 > index 0000000000..a21c5b9b35 > --- /dev/null > +++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.inf > @@ -0,0 +1,47 @@ > +### @file > +# Component description file for BMC ACPI. > +# > +# Copyright (c) 2018 - 2019, Intel Corporation. All rights > +reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # ### > + > +[Defines] > + INF_VERSION =3D 0x00010005 > + BASE_NAME =3D BmcAcpi > + FILE_GUID =3D 09E3B4BE-F731-4903-AAE6-BD5D573B6140 > + MODULE_TYPE =3D DXE_DRIVER > + VERSION_STRING =3D 1.0 > + ENTRY_POINT =3D BmcAcpiEntryPoint > + > +[Sources] > + BmcAcpi.c > + BmcSsdt/BmcSsdt.asl > + > +[Packages] > + ManageabilityPkg/ManageabilityPkg.dec > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + > +[LibraryClasses] > + BaseMemoryLib > + DebugLib > + UefiBootServicesTableLib > + UefiDriverEntryPoint > + UefiLib > + > +[Protocols] > + gEfiFirmwareVolume2ProtocolGuid > + gEfiAcpiTableProtocolGuid > + > +[Pcd] > + gEfiMdePkgTokenSpaceGuid.PcdIpmiKcsIoBaseAddress > + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId > + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemTableId > + > +[Depex] > + gEfiAcpiTableProtocolGuid > + > +[BuildOptions] > + *_*_*_ASL_FLAGS =3D -oi > diff --git a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c > b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c > new file mode 100644 > index 0000000000..cf066dd095 > --- /dev/null > +++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcAcpi.c > @@ -0,0 +1,264 @@ > +/** @file > + IPMI BMC ACPI. > + > + Copyright (c) 2018 - 2019, Intel Corporation. All rights > + reserved.
> + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +// > +// Statements that include other header files // #include > + > +#include > +#include > +#include > +#include > + > +#include > +#include > +#include > +#include > +#include #include > + #include > + > +#ifndef EFI_ACPI_CREATOR_ID > +#define EFI_ACPI_CREATOR_ID SIGNATURE_32 ('M', 'S', 'F', 'T') #endif > +#ifndef EFI_ACPI_CREATOR_REVISION #define EFI_ACPI_CREATOR_REVISION > +0x0100000D #endif > + > +/** > + > + Locate the first instance of a protocol. If the protocol requested > + is an FV protocol, then it will return the first FV that contains the > + ACPI table storage file. > + > + @param [in] Protocol The protocol to find. > + @param [in] Instance Return pointer to the first instance of the prot= ocol. > + @param [in] Type The type of protocol to locate. > + > + @retval EFI_SUCCESS The function completed successfully. > + @retval EFI_NOT_FOUND The protocol could not be located. > + @retval EFI_OUT_OF_RESOURCES There are not enough resources to find t= he > protocol. > + > +**/ > +EFI_STATUS > +LocateSupportProtocol ( > + IN EFI_GUID *Protocol, > + OUT VOID **Instance, > + IN UINT32 Type > + ) > +{ > + EFI_STATUS Status; > + EFI_HANDLE *HandleBuffer; > + UINTN NumberOfHandles; > + EFI_FV_FILETYPE FileType; > + UINT32 FvStatus =3D 0; > + EFI_FV_FILE_ATTRIBUTES Attributes; > + UINTN Size; > + UINTN Index; > + > + Status =3D gBS->LocateHandleBuffer (ByProtocol, Protocol, NULL, > + &NumberOfHandles, &HandleBuffer); if (EFI_ERROR (Status)) { > + return Status; > + } > + > + // > + // Looking for FV with ACPI storage file // for (Index =3D 0; Index = < > + NumberOfHandles; Index++) { > + Status =3D gBS->HandleProtocol (HandleBuffer[Index], Protocol, Insta= nce); > + ASSERT (!EFI_ERROR (Status)); > + > + if (!Type) { > + // > + // Not looking for the FV protocol, so find the first instance of = the > + // protocol. There should not be any errors because our handle bu= ffer > + // should always contain at least one or LocateHandleBuffer would = have > + // returned not found. > + // > + break; > + } > + > + // > + // See if it has the ACPI storage file > + // > + Status =3D ((EFI_FIRMWARE_VOLUME2_PROTOCOL *)(*Instance))->ReadFile = ( > + *Instance= , > + &gEfiCall= erIdGuid, > + NULL, > + &Size, > + &FileType= , > + &Attribut= es, > + &FvStatus > + ); > + > + // > + // If we found it, then we are done > + // > + if (!EFI_ERROR (Status)) { > + break; > + } > + } > + > + gBS->FreePool (HandleBuffer); > + return Status; > +} > + > +/** > + Update ACPI SSDT for BMC IPMI KCS device > + > + @param [in] Table Pointer to ACPI SSDT > + > + @retval EFI_SUCCESS SSDT is updated according to PCD settings **/ > +EFI_STATUS UpdateDeviceSsdtTable ( > + IN OUT EFI_ACPI_COMMON_HEADER *Table > + ) > +{ > + EFI_ACPI_DESCRIPTION_HEADER *TableHeader =3D NULL; > + UINT64 TempOemTableId; > + UINT8 *DataPtr; > + EFI_ACPI_IO_PORT_DESCRIPTOR *IoRsc; > + > + TableHeader =3D (EFI_ACPI_DESCRIPTION_HEADER *)Table; > + > + // > + // Update the OEMID and OEM Table ID. > + // > + CopyMem (&TableHeader->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof > + (TableHeader->OemId)); TempOemTableId =3D PcdGet64 > + (PcdAcpiDefaultOemTableId); CopyMem (&TableHeader->OemTableId, > &TempOemTableId, sizeof (UINT64)); > + TableHeader->CreatorId =3D EFI_ACPI_CREATOR_ID; > + TableHeader->CreatorRevision =3D EFI_ACPI_CREATOR_REVISION; > + > + // > + // Update IO(Decode16, 0xCA2, 0xCA2, 0, 2) // DEBUG ((DEBUG_INFO, > + "UpdateDeviceSsdtTable - IPMI\n")); for (DataPtr =3D (UINT8 *)(Table + > + 1); > + DataPtr < (UINT8 *)((UINT8 *)Table + Table->Length - 4); > + DataPtr++) > + { > + if (CompareMem (DataPtr, "_CRS", 4) =3D=3D 0) { > + DataPtr +=3D 4; // Skip _CRS > + ASSERT (*DataPtr =3D=3D AML_BUFFER_OP); > + DataPtr++; // Skip AML_BUFFER_OP > + ASSERT ((*DataPtr & (BIT7|BIT6)) =3D=3D 0); > + DataPtr++; // Skip PkgLength - 0xD > + ASSERT ((*DataPtr) =3D=3D AML_BYTE_PREFIX); > + DataPtr++; // Skip BufferSize OpCode > + DataPtr++; // Skip BufferSize - 0xA > + IoRsc =3D (VOID *)DataPtr; > + ASSERT (IoRsc->Header.Bits.Type =3D=3D ACPI_SMALL_ITEM_FLAG); > + ASSERT (IoRsc->Header.Bits.Name =3D=3D > ACPI_SMALL_IO_PORT_DESCRIPTOR_NAME); > + ASSERT (IoRsc->Header.Bits.Length =3D=3D sizeof > (EFI_ACPI_IO_PORT_DESCRIPTOR) - sizeof (ACPI_SMALL_RESOURCE_HEADER)); > + DEBUG ((DEBUG_INFO, "IPMI IO Base in ASL update - 0x%04x <=3D 0x%0= 4x\n", > IoRsc->BaseAddressMin, PcdGet16 (PcdIpmiKcsIoBaseAddress))); > + IoRsc->BaseAddressMin =3D PcdGet16 (PcdIpmiKcsIoBaseAddress); > + IoRsc->BaseAddressMax =3D PcdGet16 (PcdIpmiKcsIoBaseAddress); > + } > + } > + > + return EFI_SUCCESS; > +} > + > +/** > + > + Entry point for Acpi platform driver. > + > + @param [in] ImageHandle A handle for the image that is initializing t= his driver. > + @param [in] SystemTable A pointer to the EFI system table. > + > + @retval EFI_SUCCESS Driver initialized successfully. > + @retval EFI_LOAD_ERROR Failed to Initialize or has been loaded. > + @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources. > + > +**/ > +EFI_STATUS > +EFIAPI > +BmcAcpiEntryPoint ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + EFI_STATUS Status; > + EFI_STATUS AcpiStatus; > + > + EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol; > + INTN Instance =3D 0; > + EFI_ACPI_COMMON_HEADER *CurrentTable =3D NULL; > + UINTN TableHandle =3D 0; > + UINT32 FvStatus; > + UINT32 Size; > + > + EFI_ACPI_TABLE_PROTOCOL *AcpiTable; > + UINTN TableSize; > + > + // > + // Find the AcpiTable protocol > + // > + Status =3D gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOI= D > + **)&AcpiTable); if (EFI_ERROR (Status)) { > + return EFI_ABORTED; > + } > + > + // > + // Locate the firmware volume protocol // Status =3D > + LocateSupportProtocol (&gEfiFirmwareVolume2ProtocolGuid, (VOID > + **)&FwVol, 1); if (EFI_ERROR (Status)) { > + return Status; > + } > + > + Status =3D EFI_SUCCESS; > + Instance =3D 0; > + > + // > + // Read tables from the storage file. > + // > + while (!EFI_ERROR (Status)) { > + CurrentTable =3D NULL; > + > + Status =3D FwVol->ReadSection ( > + FwVol, > + &gEfiCallerIdGuid, > + EFI_SECTION_RAW, > + Instance, > + (VOID **)&CurrentTable, > + (UINTN *)&Size, > + &FvStatus > + ); > + if (!EFI_ERROR (Status)) { > + // > + // Perform any table specific updates. > + // > + AcpiStatus =3D UpdateDeviceSsdtTable (CurrentTable); > + if (!EFI_ERROR (AcpiStatus)) { > + TableHandle =3D 0; > + TableSize =3D ((EFI_ACPI_DESCRIPTION_HEADER *)CurrentTable)->L= ength; > + ASSERT (Size >=3D TableSize); > + > + Status =3D AcpiTable->InstallAcpiTable ( > + AcpiTable, > + CurrentTable, > + TableSize, > + &TableHandle > + ); > + > + ASSERT_EFI_ERROR (Status); > + } > + > + // > + // Increment the instance > + // > + Instance++; > + } > + } > + > + return EFI_SUCCESS; > +} > diff --git > a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl > b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.asl > new file mode 100644 > index 0000000000..8157d744c8 > --- /dev/null > +++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/BmcSsdt.as > +++ l > @@ -0,0 +1,28 @@ > +/** @file > + BMC ACPI SSDT. > + > +Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.
> +SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +DefinitionBlock ( > + "BmcSsdt.aml", > + "SSDT", > + 0x02, // SSDT revision. > + // A Revision field value greater than or equal to 2 s= ignifies that > integers > + // declared within the Definition Block are to be eval= uated as 64-bit > values > + "INTEL", // OEM ID (6 byte string), same as PcdAcpiDefaultOemId= defined > in MdeModulePkg.dec > + "BMCACPI", // OEM table ID (8 byte string) > + 0x0 // OEM version of DSDT table (4 byte Integer) > + ) > +{ > + > + External(\_SB.PC00.LPC0, DeviceObj) > + > + Scope (\_SB.PC00.LPC0) > + { > + #include "IpmiOprRegions.asi" > + } > + > +} > diff --git > a/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegions. > asi > b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprRegions. > asi > new file mode 100644 > index 0000000000..ffd6af3944 > --- /dev/null > +++ b/Features/ManageabilityPkg/Universal/IpmiBmcAcpi/BmcSsdt/IpmiOprReg > +++ ions.asi > @@ -0,0 +1,58 @@ > +/** @file > + IPMI ACPI SSDT. > + > +Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.
> +SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +Device(IPMC) > +{ > + // Config DWord, modified during POST > + // Bit definitions are the same as PPMFlags: > + // [00] =3D Plug and Play BMC Detection enabled in setup > + // [31:01] =3D Reserved =3D 0 > + > + Name(ECFL, 0x80000000) > + > + // Return the interface specification revision > + Method(_SRV) > + { > + // IPMI Specification Revision v2.0 > + Return(0x0200) > + } > + > + Method(_STA, 0) > + { > + // > + // Assume OK > + // > + Store (0xF, Local0) > + > + Return(Local0) > + > + // Bit 0 - Set if the device is present. > + // Bit 1 - Set if the device is enabled and decoding its resourc= es. > + // Bit 2 - Set if the device should be shown in the UI. > + // Bit 3 - Set if the device is functioning properly (cleared if= the device failed > its diagnostics). > + // Bit 4 - Set if the battery is present. > + // Bit 5 - Reserved (must be cleared). > + } // end of _STA > + > + // Return the x86 resources consumed by BMC > + Name(_CRS, ResourceTemplate() > + { > + // Uses 8-bit ports 0xCA2-0xCA5 > + IO(Decode16, 0xCA2, 0xCA2, 0, 2) > + }) > + > + Name(_HID, "IPI0001") // IPMI device > + Name(_IFT, 0x1) // KCS system interface type > + Name(_STR, Unicode("IPMI_KCS")) > + > + Name(_UID, 0) // First interface. > + > + > +} // end of Device(IPMC) > + > + > -- > 2.37.1.windows.1 >=20 >=20 >=20 >=20 >=20