From nobody Fri May 3 09:34:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+60968+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+60968+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1591709401; cv=none; d=zohomail.com; s=zohoarc; b=I99d01u8huMgLQFKX2xoRUjBrDf1UdHw9uaWZ35fQw69glQ4O6iwB7oGgXTzGQuLcU/LEdX8i3GNVmE2LTtOg3fi0LQwCRgaxpk+yf18ULyNqYKoPTJ6tIpoSO4Fs1v6ReVPoCbB5LWiUXG5N9bHWDGJbUXU1aqNLAVFS4Tq5Vg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591709401; h=Content-Type:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=X3NVmrSfyeNO9karii3jXP22qWUhurTw4tzXue5wl2Y=; b=QllF4Wx4NOQ1vL6SeMHZkuosYvS0txhSOATOcRYup5SRxBCvcvDBxLr7WpHbz7xlsMgbUHD3x4Hd+Y4NNlowBU/AAOHyM2/FmJGTaFrCuvUqSy7iugIxLLLysyU3UhvnAHTd1rJTofrwVjtOy4HXQOpglb5IfFYUK3FWJqYAgOU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+60968+1787277+3901457@groups.io Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1591709401056785.3292771910468; Tue, 9 Jun 2020 06:30:01 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id fcaWYY1788612xTZtrFzLBcF; Tue, 09 Jun 2020 06:30:00 -0700 X-Received: from huawei.com (huawei.com [45.249.212.35]) by mx.groups.io with SMTP id smtpd.web11.7148.1591709399927201458 for ; Tue, 09 Jun 2020 06:30:00 -0700 X-Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 062A37E92A2B87368A37; Tue, 9 Jun 2020 21:29:58 +0800 (CST) X-Received: from HGH1000039998.huawei.com (10.184.68.188) by DGGEMS411-HUB.china.huawei.com (10.3.19.211) with Microsoft SMTP Server id 14.3.487.0; Tue, 9 Jun 2020 21:29:51 +0800 From: "Ming Huang" To: , , CC: , , , , , , Subject: [edk2-devel] [PATCH edk2-platforms v3 1/4] Silicon/Hisilicon: Change updating dsdt in ready to boot event Date: Tue, 9 Jun 2020 21:27:22 +0800 Message-ID: <1591709245-44527-2-git-send-email-huangming23@huawei.com> In-Reply-To: <1591709245-44527-1-git-send-email-huangming23@huawei.com> References: <1591709245-44527-1-git-send-email-huangming23@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.184.68.188] X-CFilter-Loop: Reflected Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,huangming23@huawei.com X-Gm-Message-State: 0gKT9ZJiY0suO3tEgioGRImZx1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1591709400; bh=nsNhTiZRXrUfSH8HtZrH8PDrWPmZE8HR4SEWJVC87A8=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=ijhsWKi3ZDkguO7Qi2u110XK3XYew9FzG6foRGQwAPtet2Rp/pKqMcqpetM4aBfeLEA OFVR3risyispn7ppLGQGk6sJSlbK9tRD8QkWaMYGU9+bfcTMX7oebnc0VExBHF1R/cKzz JzUWslHMxnEwm5IDmmQjT68ZJ885kyCR3f8= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The dsdt need be updated before boot to OS, so change the updating to ready to boot event and can remove the needless dependence. Signed-off-by: Ming Huang Reviewed-by: Leif Lindholm --- Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c | 56 +++++++= ++++++++++++- Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf | 4 +- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c b/Sil= icon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c index b888cb1..c45a0bb 100644 --- a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c +++ b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c @@ -1,7 +1,7 @@ /** @file =20 Copyright (c) 2014, Applied Micro Curcuit Corporation. All rights reserv= ed.
- Copyright (c) 2015, Hisilicon Limited. All rights reserved.
+ Copyright (c) 2015 - 2020, Hisilicon Limited. All rights reserved.
Copyright (c) 2015, Linaro Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent =20 @@ -23,6 +23,38 @@ #include #include "EthMac.h" =20 +EFI_EVENT mUpdateAcpiDsdtTableEvent; + +VOID +EFIAPI +UpdateAcpiDsdt ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + EFI_ACPI_TABLE_PROTOCOL *AcpiTableProtocol; + EFI_STATUS Status; + + Status =3D gBS->LocateProtocol ( + &gEfiAcpiTableProtocolGuid, + NULL, + (VOID**)&AcpiTableProtocol + ); + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, " Unable to locate ACPI table protocol\n")); + return; + } + + Status =3D EthMacInit (); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, " UpdateAcpiDsdtTable Failed, Status =3D %r\n", S= tatus)); + } + + gBS->CloseEvent (Event); + return; +} + EFI_STATUS EFIAPI AcpiPlatformEntryPoint ( @@ -30,5 +62,25 @@ AcpiPlatformEntryPoint ( IN EFI_SYSTEM_TABLE *SystemTable ) { - return EthMacInit(); + EFI_STATUS Status; + + // + // Register notify function + // + Status =3D gBS->CreateEventEx ( + EVT_NOTIFY_SIGNAL, + TPL_CALLBACK, + UpdateAcpiDsdt, + NULL, + &gEfiEventReadyToBootGuid, + &mUpdateAcpiDsdtTableEvent + ); + + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Create ReadyToBoot event for UpdateAcpiDsdt fail= ed.\n")); + } else { + DEBUG ((DEBUG_INFO, "Create ReadyToBoot event for UpdateAcpiDsdt succe= ss.\n")); + } + + return Status; } diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf = b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf index 53da731..866ff75 100644 --- a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf +++ b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf @@ -1,7 +1,7 @@ ## @file # # Copyright (c) 2014, Applied Micro Curcuit Corp. All rights reserved.
-# Copyright (c) 2015, Hisilicon Limited. All rights reserved.
+# Copyright (c) 2015 - 2020, Hisilicon Limited. All rights reserved.
# Copyright (c) 2015, Linaro Limited. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -62,5 +62,5 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision =20 [Depex] - gEfiAcpiTableProtocolGuid AND gEfiAcpiSdtProtocolGuid AND gHisiBoardNicP= rotocolGuid AND gHisiInstalledAcpiProtocolGuid + TRUE =20 --=20 2.8.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#60968): https://edk2.groups.io/g/devel/message/60968 Mute This Topic: https://groups.io/mt/74773826/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri May 3 09:34:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+60969+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+60969+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1591709401; cv=none; d=zohomail.com; s=zohoarc; b=fszSVXouCELnNy+3b9sEJjNq17kONj5Va+zlucn61CCuqxrTT2CI7AjZ/uQIWy/4Y9/h/V9W4EblKXemD5GIdrH82ocCqVrLwewRhGx5fcn2Hy/tp7SUlFuTBwcLVtff6SuzdvftuSm3P67SydIqChCNmsp7SjOzbWT1H/g2flc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591709401; h=Content-Type:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=ylnv9qNJM3iY57EfEJ0VqmrB09CL5ZGl7Ep62eE09PU=; b=PQewU1N4J2ie3j3A8xkRU2HsfVWJZMmVATpoavMyRauQztxmT5vvbDXoywbyBQTtoj84rGJj2aqPi+S2Z5yIzt/0riEraiBqrUbRZ9l1mJQs1v0WlptJRUoqKJObZWjkoJydWw2XYhPOpYYdcPI/10jX3RR4KtIE+Cj2POH3dMY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+60969+1787277+3901457@groups.io Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1591709401734802.2436767764418; Tue, 9 Jun 2020 06:30:01 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id WVHHYY1788612xx6qgWJpYyU; Tue, 09 Jun 2020 06:30:01 -0700 X-Received: from huawei.com (huawei.com [45.249.212.35]) by mx.groups.io with SMTP id smtpd.web10.7239.1591709399931798402 for ; Tue, 09 Jun 2020 06:30:00 -0700 X-Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 0B6A82142C59AC006A48; Tue, 9 Jun 2020 21:29:58 +0800 (CST) X-Received: from HGH1000039998.huawei.com (10.184.68.188) by DGGEMS411-HUB.china.huawei.com (10.3.19.211) with Microsoft SMTP Server id 14.3.487.0; Tue, 9 Jun 2020 21:29:51 +0800 From: "Ming Huang" To: , , CC: , , , , , , Subject: [edk2-devel] [PATCH edk2-platforms v3 2/4] Silicon/Hisilicon: Add HISI_SAS_CONFIG_PROTOCOL Date: Tue, 9 Jun 2020 21:27:23 +0800 Message-ID: <1591709245-44527-3-git-send-email-huangming23@huawei.com> In-Reply-To: <1591709245-44527-1-git-send-email-huangming23@huawei.com> References: <1591709245-44527-1-git-send-email-huangming23@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.184.68.188] X-CFilter-Loop: Reflected Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,huangming23@huawei.com X-Gm-Message-State: uYLpCC6OjuZlKVrBwLvWaVy7x1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1591709401; bh=nkAuMFZqzCAqmvomvDcZuRchEzfSsCEZoidmmNMmJE8=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=R8+O4QstoP9mjZK67rzUxREQOsgMeDzI961hwyPuyI/iIPA9j0CvnKhuSnb9kZZI0Hl g5AM9eCaKJTCxJFxtxFBwDgku8LatqP+NWpJO/CAsS7SHZqWqMT6sEA3eIgSLRtk1EPw3 PvVP3WCHPsDndyVlMHvVETF8MYhqTe4gom0= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add HISI_SAS_CONFIG_PROTOCOL, provide get sas address interface, this is prepare for adding update sas address feature. Signed-off-by: Ming Huang --- Silicon/Hisilicon/HisiPkg.dec | 1 + Silicon/Hisilicon/Include/Protocol/HisiSasConfig.h | 43 ++++++++++++++++++= ++ 2 files changed, 44 insertions(+) diff --git a/Silicon/Hisilicon/HisiPkg.dec b/Silicon/Hisilicon/HisiPkg.dec index 63f50f7..051b5b8 100644 --- a/Silicon/Hisilicon/HisiPkg.dec +++ b/Silicon/Hisilicon/HisiPkg.dec @@ -34,6 +34,7 @@ gHisiPlatformSasProtocolGuid =3D {0x20e9829f, 0x3a2c, 0x479a, {0x9a, 0x9= 3, 0x45, 0x7d, 0x13, 0x50, 0x96, 0x6d}} gHisiSnpPlatformProtocolGuid =3D {0x81321f27, 0xff58, 0x4a1d, {0x99, 0x9= 7, 0xd, 0xcc, 0xfa, 0x82, 0xf4, 0x6f}} gHisiInstalledAcpiProtocolGuid =3D {0x31505f6a, 0xe496, 0x4c7e, {0xba, 0= xbb, 0x71, 0x7b, 0xe2, 0xc4, 0xb4, 0x59}} + gHisiSasConfigProtocolGuid =3D {0x3A236669, 0x6666, 0x4d04, {0xb2, 0x83,= 0x7, 0x9f, 0x3c, 0xc4, 0x71, 0x66}} =20 [Guids] gHisiTokenSpaceGuid =3D {0xc8bc553e, 0x12bf, 0x11e6, {0x97, 0x4f, 0x87, = 0xf7, 0x7c, 0xfd, 0x52, 0x1d}} diff --git a/Silicon/Hisilicon/Include/Protocol/HisiSasConfig.h b/Silicon/H= isilicon/Include/Protocol/HisiSasConfig.h new file mode 100644 index 0000000..6b850c8 --- /dev/null +++ b/Silicon/Hisilicon/Include/Protocol/HisiSasConfig.h @@ -0,0 +1,43 @@ +/** @file + + Copyright (c) 2020, Hisilicon Limited. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef HISI_SAS_CONFIG_H_ +#define HISI_SAS_CONFIG_H_ + +typedef struct{ + UINT32 CtrlId; + BOOLEAN Enable; + UINT32 Bar32; + UINT64 ResetBase; + UINTN Segment; + UINTN Bus; + UINTN Device; + UINTN Fun; +} SAS_CONTROLLER_DATA; + +typedef +VOID * +(EFIAPI *HISI_SAS_GET_CONTROLLER_DATA) ( + VOID + ); + +typedef +EFI_STATUS +(EFIAPI *HISI_SAS_GET_ADDRESS) ( + IN UINT8 Index, + IN OUT UINT8 *SasAddrBuffer + ); + +typedef struct { + HISI_SAS_GET_ADDRESS GetAddr; + HISI_SAS_GET_CONTROLLER_DATA GetControllerData; +} HISI_SAS_CONFIG_PROTOCOL; + +extern EFI_GUID gHisiSasConfigProtocolGuid; + +#endif --=20 2.8.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#60969): https://edk2.groups.io/g/devel/message/60969 Mute This Topic: https://groups.io/mt/74773828/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri May 3 09:34:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+60971+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+60971+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1591709408; cv=none; d=zohomail.com; s=zohoarc; b=bm8XRHXj6slCzikgPhmbT4dceSQBkfwsEcmUu7W5uH0X2nQ1XUyGPncKJnzK9OXothj4AJah1cSplGPVi2dLmh7lyRBQckRUQUO9zA4/v7oahk5fj77MNjRzo8gCNEZ1bdKGM1IsJh/WyUf6OQu4x0Q8SQ2DPtNB+kSlrUZEcPc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591709408; h=Content-Type:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=cSJlhOSqwvzaDtHL6kf/ip0yzT4sHKcPK+hm8fkFA5Y=; b=Z9NunRF6V0OJhccB7925MDHsy4Fc3XkOhuUNvc+CdsHjvfoWfwP/zwOB4B4TAhLWrq0Qf+/ePWFWhGd1KTHOB0/A4+p0gOly7Mm93Gn/rr7wo+z7NJOE2qPr2elQOTFPhRLCdUAv5rFf6gHqOU0c2tYhfPiZxXasp//4e3nHdOw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+60971+1787277+3901457@groups.io Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1591709408386833.8299539806109; Tue, 9 Jun 2020 06:30:08 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id AtQAYY1788612xbtLcx5U5d0; Tue, 09 Jun 2020 06:30:07 -0700 X-Received: from huawei.com (huawei.com [45.249.212.32]) by mx.groups.io with SMTP id smtpd.web12.7172.1591709406976524547 for ; Tue, 09 Jun 2020 06:30:07 -0700 X-Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 3573F2E283E8C0EB6803; Tue, 9 Jun 2020 21:30:03 +0800 (CST) X-Received: from HGH1000039998.huawei.com (10.184.68.188) by DGGEMS411-HUB.china.huawei.com (10.3.19.211) with Microsoft SMTP Server id 14.3.487.0; Tue, 9 Jun 2020 21:29:52 +0800 From: "Ming Huang" To: , , CC: , , , , , , Subject: [edk2-devel] [PATCH edk2-platforms v3 3/4] Silicon/Hisilicon/Acpi: Add update sas address feature Date: Tue, 9 Jun 2020 21:27:24 +0800 Message-ID: <1591709245-44527-4-git-send-email-huangming23@huawei.com> In-Reply-To: <1591709245-44527-1-git-send-email-huangming23@huawei.com> References: <1591709245-44527-1-git-send-email-huangming23@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.184.68.188] X-CFilter-Loop: Reflected Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,huangming23@huawei.com X-Gm-Message-State: DLayTpVZ1Mj1N8mjhsQfSm2Hx1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1591709407; bh=hf5LT1aht+xHJs9qLDFQwRhxmnZHukZuVqgEgaZo54k=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=weG2EpF9djLygOtg6Unp6ItqNW1z482DpcOLh9w0RCbBcNY1NNp5//PdK1HBGAxDDbD gWQDKUD3ralFVOprbzh7ecedzkD9vxnVUknvKto0ZUwqHEN5oNVx8qPqu6zdyO8FW9gLw ls+4kanRm2UwZkIVKkKvhVi1ak47pwc+cFw= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The updating sas address feature is similar with apdating mac address. Modify updating dsdt flow for add this feature. Signed-off-by: Ming Huang Reviewed-by: Leif Lindholm --- Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c | 2 +- Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf | 1 + Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c | 292 ++++++= +++++++++----- Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.h | 2 +- 4 files changed, 227 insertions(+), 70 deletions(-) diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c b/Sil= icon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c index c45a0bb..9cdf710 100644 --- a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c +++ b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c @@ -46,7 +46,7 @@ UpdateAcpiDsdt ( return; } =20 - Status =3D EthMacInit (); + Status =3D UpdateAcpiDsdtTable (); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, " UpdateAcpiDsdtTable Failed, Status =3D %r\n", S= tatus)); } diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf = b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf index 866ff75..856309a 100644 --- a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf +++ b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf @@ -46,6 +46,7 @@ gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED gEfiAcpiSdtProtocolGuid # PROTOCOL ALWAYS_CONSUMED gHisiBoardNicProtocolGuid # PROTOCOL ALWAYS_CO= NSUMED + gHisiSasConfigProtocolGuid =20 [FeaturePcd] gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c b/Silicon/H= isilicon/Drivers/AcpiPlatformDxe/EthMac.c index cd98506..841c94e 100644 --- a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c +++ b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c @@ -1,7 +1,7 @@ /** @file =20 Copyright (c) 2014, Applied Micro Curcuit Corporation. All rights reserv= ed.
- Copyright (c) 2015, Hisilicon Limited. All rights reserved.
+ Copyright (c) 2015 - 2020, Hisilicon Limited. All rights reserved.
Copyright (c) 2015, Linaro Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent =20 @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -32,6 +33,7 @@ #include =20 #include +#include =20 // Turn on debug message by enabling below define //#define ACPI_DEBUG @@ -45,17 +47,27 @@ #define EFI_ACPI_MAX_NUM_TABLES 20 #define DSDT_SIGNATURE 0x54445344 =20 -#define D03_ACPI_ETH_ID "HISI00C2" - #define ACPI_ETH_MAC_KEY "local-mac-address" +#define ACPI_ETH_SAS_KEY "sas-addr" =20 #define PREFIX_VARIABLE_NAME L"MAC" #define PREFIX_VARIABLE_NAME_COMPAT L"RGMII_MAC" -#define MAC_MAX_LEN 30 +#define ADDRESS_MAX_LEN 30 + +CHAR8 *mHisiAcpiDevId[] =3D {"HISI00C1","HISI00C2","HISI0162"}; + +typedef enum { + DsdtDeviceUnknown, + DsdtDeviceLan, + DsdtDeviceSas +} DSDT_DEVICE_TYPE; =20 -EFI_STATUS GetEnvMac( - IN UINTN MacNextID, - IN OUT UINT8 *MacBuffer) +STATIC +EFI_STATUS +GetEnvMac( + IN UINTN MacNextID, + IN OUT UINT8 *MacBuffer + ) { EFI_MAC_ADDRESS Mac; EFI_STATUS Status; @@ -89,12 +101,121 @@ EFI_STATUS GetEnvMac( return EFI_SUCCESS; } =20 -EFI_STATUS _SearchReplacePackageMACAddress( +STATIC +EFI_STATUS +GetSasAddress ( + IN UINT8 Index, + IN OUT UINT8 *SasAddrBuffer + ) +{ + EFI_STATUS Status; + HISI_SAS_CONFIG_PROTOCOL *HisiSasConf; + + if (SasAddrBuffer =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + Status =3D gBS->LocateProtocol (&gHisiSasConfigProtocolGuid, NULL, (VOID= **)&HisiSasConf); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Locate Sas Config Protocol failed %r\n", Status)= ); + SasAddrBuffer[0] =3D 0x50; + SasAddrBuffer[1] =3D 0x01; + SasAddrBuffer[2] =3D 0x88; + SasAddrBuffer[3] =3D 0x20; + SasAddrBuffer[4] =3D 0x16; + SasAddrBuffer[5] =3D 0x00; + SasAddrBuffer[6] =3D 0x00; + SasAddrBuffer[7] =3D Index; + return Status; + } + + return HisiSasConf->GetAddr (Index, SasAddrBuffer); +} + +STATIC +EFI_STATUS +UpdateAddressInOption ( + IN EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, + IN EFI_ACPI_HANDLE ChildHandle, + IN UINTN DevNextID, + IN DSDT_DEVICE_TYPE FoundDev + ) +{ + EFI_STATUS Status; + EFI_ACPI_DATA_TYPE DataType; + CONST VOID *Buffer; + UINTN DataSize; + UINTN Count; + EFI_ACPI_HANDLE CurrentHandle; + UINT8 *AddressBuffer; + UINT8 AddressByte; + + AddressByte =3D 0; + AddressBuffer =3D AllocateZeroPool (ADDRESS_MAX_LEN); + if (AddressBuffer =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a:%d AllocateZeroPool failed\n", __FILE__, __LI= NE__)); + return EFI_OUT_OF_RESOURCES; + } + + switch (FoundDev) { + case DsdtDeviceLan: + //Update the MAC + Status =3D GetEnvMac (DevNextID, AddressBuffer); + AddressByte =3D 6; + break; + case DsdtDeviceSas: + //Update SAS Address. + Status =3D GetSasAddress (DevNextID, AddressBuffer); + AddressByte =3D 8; + break; + default: + Status =3D EFI_INVALID_PARAMETER; + } + if (EFI_ERROR (Status)) { + FreePool (AddressBuffer); + return Status; + } + + for (Count =3D 0; Count < AddressByte; Count++) { + Status =3D AcpiTableProtocol->GetOption (CurrentHandle, 1, &DataType, = &Buffer, &DataSize); + if (EFI_ERROR (Status)) { + break; + } + + if (DataType !=3D EFI_ACPI_DATA_TYPE_UINT) + break; + + // only need one byte. + // FIXME: Assume the CPU is little endian + Status =3D AcpiTableProtocol->SetOption ( + CurrentHandle, + 1, + AddressBuffer + Count, + sizeof(UINT8)); + if (EFI_ERROR (Status)) { + break; + } + + Status =3D AcpiTableProtocol->GetChild (ChildHandle, &CurrentHandle); + if (EFI_ERROR (Status) || CurrentHandle =3D=3D NULL) { + break; + } + } + + FreePool (AddressBuffer); + return Status; +} + +STATIC +EFI_STATUS +UpdateAddressInPackage ( IN EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, IN EFI_ACPI_HANDLE ChildHandle, IN UINTN Level, IN OUT BOOLEAN *Found, - IN UINTN MacNextID) + IN UINTN DevNextID, + IN DSDT_DEVICE_TYPE FoundDev + ) { // ASL template for ethernet driver: /* @@ -114,15 +235,18 @@ EFI_STATUS _SearchReplacePackageMACAddress( CONST UINT8 *Data; CONST VOID *Buffer; UINTN DataSize; - UINTN Count; EFI_ACPI_HANDLE CurrentHandle; EFI_ACPI_HANDLE NextHandle; - UINT8 MACBuffer[MAC_MAX_LEN]; + EFI_ACPI_HANDLE Level1Handle; =20 DBG("In Level:%d\n", Level); + Level1Handle =3D NULL; Status =3D EFI_SUCCESS; for (CurrentHandle =3D NULL; ;) { Status =3D AcpiTableProtocol->GetChild(ChildHandle, &CurrentHandle); + if (Level =3D=3D 1) { + Level1Handle =3D CurrentHandle; + } if (Level !=3D 3 && (EFI_ERROR(Status) || CurrentHandle =3D=3D NULL)) break; =20 @@ -143,11 +267,14 @@ EFI_STATUS _SearchReplacePackageMACAddress( DataSize, Data[0], DataSize > 1 ? Data[1] : 0); =20 Data =3D Buffer; - if (DataType !=3D EFI_ACPI_DATA_TYPE_STRING - || AsciiStrCmp((CHAR8 *) Data, ACPI_ETH_MAC_KEY) !=3D 0) + if ((DataType !=3D EFI_ACPI_DATA_TYPE_STRING) || + ((AsciiStrCmp ((CHAR8 *) Data, ACPI_ETH_MAC_KEY) !=3D 0) && + (AsciiStrCmp ((CHAR8 *) Data, ACPI_ETH_SAS_KEY) !=3D 0))) { + ChildHandle =3D Level1Handle; continue; + } =20 - DBG("_DSD Key Type %d. Found MAC address key\n", DataType); + DBG("_DSD Key Type %d. Found address key\n", DataType); =20 // // We found the node. @@ -157,33 +284,7 @@ EFI_STATUS _SearchReplacePackageMACAddress( } =20 if (Level =3D=3D 3 && *Found) { - - //Update the MAC - Status =3D GetEnvMac(MacNextID, MACBuffer); - if (EFI_ERROR(Status)) - break; - - for (Count =3D 0; Count < 6; Count++) { - Status =3D AcpiTableProtocol->GetOption(CurrentHandle, 1, &DataTyp= e, &Buffer, &DataSize); - if (EFI_ERROR(Status)) - break; - - Data =3D Buffer; - DBG(" _DSD Child Subnode Store Op Code 0x%02X 0x%02X %02X DataT= ype 0x%X\n", - DataSize, Data[0], DataSize > 1 ? Data[1] : 0, DataType); - - if (DataType !=3D EFI_ACPI_DATA_TYPE_UINT) - break; - - // only need one byte. - // FIXME: Assume the CPU is little endian - Status =3D AcpiTableProtocol->SetOption(CurrentHandle, 1, (VOID *)= &MACBuffer[Count], sizeof(UINT8)); - if (EFI_ERROR(Status)) - break; - Status =3D AcpiTableProtocol->GetChild(ChildHandle, &CurrentHandle= ); - if (EFI_ERROR(Status) || CurrentHandle =3D=3D NULL) - break; - } + Status =3D UpdateAddressInOption (AcpiTableProtocol, ChildHandle, De= vNextID, FoundDev); break; } =20 @@ -192,7 +293,13 @@ EFI_STATUS _SearchReplacePackageMACAddress( =20 //Search next package AcpiTableProtocol->Open((VOID *) Buffer, &NextHandle); - Status =3D _SearchReplacePackageMACAddress(AcpiTableProtocol, NextHand= le, Level + 1, Found, MacNextID); + Status =3D UpdateAddressInPackage ( + AcpiTableProtocol, + NextHandle, + Level + 1, + Found, + DevNextID, + FoundDev); AcpiTableProtocol->Close(NextHandle); if (!EFI_ERROR(Status)) break; @@ -201,22 +308,28 @@ EFI_STATUS _SearchReplacePackageMACAddress( return Status; } =20 -EFI_STATUS SearchReplacePackageMACAddress( +STATIC +EFI_STATUS +SearchReplacePackageAddress ( IN EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, IN EFI_ACPI_HANDLE ChildHandle, - IN UINTN MacNextID) + IN UINTN DevNextID, + IN DSDT_DEVICE_TYPE FoundDev + ) { BOOLEAN Found =3D FALSE; UINTN Level =3D 0; =20 - return _SearchReplacePackageMACAddress(AcpiTableProtocol, ChildHandle, L= evel, &Found, MacNextID); + return UpdateAddressInPackage (AcpiTableProtocol, ChildHandle, Level, + &Found, DevNextID, FoundDev); } =20 EFI_STATUS -GetEthID ( +GetDeviceInfo ( EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, EFI_ACPI_HANDLE ChildHandle, - UINTN *EthID + UINTN *DevID, + DSDT_DEVICE_TYPE *FoundDev ) { EFI_STATUS Status; @@ -225,7 +338,7 @@ GetEthID ( CONST VOID *Buffer; UINTN DataSize; =20 - // Get NameString ETHx + // Get NameString Status =3D AcpiTableProtocol->GetOption (ChildHandle, 1, &DataType, &Buf= fer, &DataSize); if (EFI_ERROR (Status)) { DEBUG ((EFI_D_ERROR, "[%a:%d] Get NameString failed: %r\n", __FUNCTION= __, __LINE__, Status)); @@ -236,14 +349,23 @@ GetEthID ( DBG("Size %p Data %02x %02x %02x %02x\n", DataSize, Data[0], Data[1], Da= ta[2], Data[3]); =20 Data[4] =3D '\0'; - if (DataSize !=3D 4 || - AsciiStrnCmp ("ETH", Data, 3) !=3D 0 || - Data[3] > '9' || Data[3] < '0') { - DEBUG ((EFI_D_ERROR, "[%a:%d] The NameString %a is not ETHn\n", __FUNC= TION__, __LINE__, Data)); + if ((DataSize !=3D 4) || + (Data[3] > '9' || Data[3] < '0')) { + DEBUG ((DEBUG_ERROR, "The NameString %a is not ETHn or SASn\n", Data)); + return EFI_INVALID_PARAMETER; + } + + if (AsciiStrnCmp ("ETH", Data, 3) =3D=3D 0) { + *FoundDev =3D DsdtDeviceLan; + } else if (AsciiStrnCmp ("SAS", Data, 3) =3D=3D 0) { + *FoundDev =3D DsdtDeviceSas; + } else { + DEBUG ((DEBUG_ERROR, "[%a:%d] The NameString %a is not ETHn or SASn\n", + __FUNCTION__, __LINE__, Data)); return EFI_INVALID_PARAMETER; } =20 - *EthID =3D Data[3] - '0'; + *DevID =3D Data[3] - '0'; return EFI_SUCCESS; } =20 @@ -257,8 +379,10 @@ EFI_STATUS ProcessDSDTDevice ( CONST VOID *Buffer; UINTN DataSize; EFI_ACPI_HANDLE DevHandle; - INTN Found =3D 0; - UINTN MacNextID; + DSDT_DEVICE_TYPE FoundDev =3D DsdtDeviceUnknown; + UINTN DevNextID; + BOOLEAN HisiAcpiDevNotFound; + UINTN Index; =20 Status =3D AcpiTableProtocol->GetOption(ChildHandle, 0, &DataType, &Buff= er, &DataSize); if (EFI_ERROR(Status)) @@ -280,7 +404,7 @@ EFI_STATUS ProcessDSDTDevice ( break; =20 // - // Search for _HID with Ethernet ID + // Search for _HID with Device ID // Status =3D AcpiTableProtocol->GetOption(DevHandle, 0, &DataType, &Buff= er, &DataSize); if (EFI_ERROR(Status)) @@ -312,23 +436,34 @@ EFI_STATUS ProcessDSDTDevice ( DBG("[%a:%d] - _HID =3D %a\n", __FUNCTION__, __LINE__, Data); =20 if (EFI_ERROR(Status) || - DataType !=3D EFI_ACPI_DATA_TYPE_STRING || - (AsciiStrCmp((CHAR8 *) Data, D03_ACPI_ETH_ID) !=3D 0)) { - AcpiTableProtocol->Close(ValueHandle); - Found =3D 0; + DataType !=3D EFI_ACPI_DATA_TYPE_STRING) { + AcpiTableProtocol->Close (ValueHandle); + FoundDev =3D DsdtDeviceUnknown; + continue; + } + + HisiAcpiDevNotFound =3D TRUE; + for (Index =3D 0; Index < ARRAY_SIZE (mHisiAcpiDevId); Index++) { + if (AsciiStrCmp ((CHAR8 *)Data, mHisiAcpiDevId[Index]) =3D=3D = 0) { + HisiAcpiDevNotFound =3D FALSE; + break; + } + } + if (HisiAcpiDevNotFound) { + AcpiTableProtocol->Close (ValueHandle); + FoundDev =3D DsdtDeviceUnknown; continue; } =20 - DBG("Found Ethernet device\n"); + DBG("Found device\n"); AcpiTableProtocol->Close(ValueHandle); - Status =3D GetEthID (AcpiTableProtocol, ChildHandle, &MacNextID); + Status =3D GetDeviceInfo (AcpiTableProtocol, ChildHandle, &DevNe= xtID, &FoundDev); if (EFI_ERROR (Status)) { continue; } - Found =3D 1; - } else if (Found =3D=3D 1 && AsciiStrnCmp((CHAR8 *) Data, "_DSD", = 4) =3D=3D 0) { + } else if ((FoundDev !=3D DsdtDeviceUnknown) && AsciiStrnCmp((CHAR= 8 *) Data, "_DSD", 4) =3D=3D 0) { // - // Patch MAC address for open source kernel + // Patch DSD data // EFI_ACPI_HANDLE PkgHandle; Status =3D AcpiTableProtocol->GetOption(DevHandle, 2, &DataType,= &Buffer, &DataSize); @@ -351,12 +486,30 @@ EFI_STATUS ProcessDSDTDevice ( // // Walk the _DSD node // - if (DataSize =3D=3D 1 && Data[0] =3D=3D AML_PACKAGE_OP) - Status =3D SearchReplacePackageMACAddress(AcpiTableProtocol, P= kgHandle, MacNextID); + if (DataSize =3D=3D 1 && Data[0] =3D=3D AML_PACKAGE_OP) { + Status =3D SearchReplacePackageAddress (AcpiTableProtocol, Pkg= Handle, DevNextID, FoundDev); + } =20 AcpiTableProtocol->Close(PkgHandle); + } else if (AsciiStrnCmp ((CHAR8 *) Data, "_ADR", 4) =3D=3D 0) { + Status =3D AcpiTableProtocol->GetOption (DevHandle, 2, &DataType= , &Buffer, &DataSize); + if (EFI_ERROR (Status)) { + break; + } + + if (DataType !=3D EFI_ACPI_DATA_TYPE_CHILD) { + continue; + } + + Status =3D GetDeviceInfo (AcpiTableProtocol, ChildHandle, &DevNe= xtID, &FoundDev); + + if (EFI_ERROR (Status)) { + continue; + } } } + } else if ((DataSize =3D=3D 2) && (Data[0] =3D=3D AML_EXT_OP) && (Data= [1] =3D=3D AML_EXT_DEVICE_OP)) { + ProcessDSDTDevice (AcpiTableProtocol, DevHandle); } } =20 @@ -457,7 +610,10 @@ AcpiCheckSum ( Buffer[ChecksumOffset] =3D CalculateCheckSum8 (Buffer, Table->Length); } =20 -EFI_STATUS EthMacInit(void) +EFI_STATUS +UpdateAcpiDsdtTable ( + VOID + ) { EFI_STATUS Status; EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol; diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.h b/Silicon/H= isilicon/Drivers/AcpiPlatformDxe/EthMac.h index 0a3e811..a7e1eed 100644 --- a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.h +++ b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.h @@ -10,7 +10,7 @@ #ifndef _ETH_MAC_H_ #define _ETH_MAC_H_ =20 -EFI_STATUS EthMacInit(VOID); +EFI_STATUS UpdateAcpiDsdtTable (VOID); =20 #endif =20 --=20 2.8.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#60971): https://edk2.groups.io/g/devel/message/60971 Mute This Topic: https://groups.io/mt/74773835/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Fri May 3 09:34:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+60972+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+60972+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1591709411; cv=none; d=zohomail.com; s=zohoarc; b=anBlmDo11wLKPvnc8j8jkxFQ6mvymYhLmNIC6aA6lSRsMZMyvVnyqWJ++yKFVqJiO5fNesQNgcZoVY3pXCl1GKqZhmQJwo5I7chIZBJ2lJ4q4O+VD/ZrsKXVLXwPiRYlEzvKdRg71c8plm5Y9o6T1gAROvxNwwJkz8S+Hv3Psbs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591709411; h=Content-Type:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=iugs0NtiNTbaRHdvJ27WALVuV48UJJo8Z+KDV8dFyL4=; b=FkwX8eXWyat1CRz6NiR3goVB1/SP8Cm8TkdgZw28gMgQtPHkbxG5wLTaFYmCi4gANYWUR3brA3Noaf/Ys6TbB5IP5ZcVDyCioweduc/jt6DdC3Gh9Rt9nRYxOXxOceKqCL8hVkYZsVCzs3ffzD8uyCW8LZd/wBxSWH14DP+kSXk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+60972+1787277+3901457@groups.io Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1591709411501438.53069897970704; Tue, 9 Jun 2020 06:30:11 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id ZDGzYY1788612x5YzNCdtBAS; Tue, 09 Jun 2020 06:30:10 -0700 X-Received: from huawei.com (huawei.com [45.249.212.32]) by mx.groups.io with SMTP id smtpd.web12.7174.1591709409488388464 for ; Tue, 09 Jun 2020 06:30:10 -0700 X-Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 100E211DCD10348D6565; Tue, 9 Jun 2020 21:30:03 +0800 (CST) X-Received: from HGH1000039998.huawei.com (10.184.68.188) by DGGEMS411-HUB.china.huawei.com (10.3.19.211) with Microsoft SMTP Server id 14.3.487.0; Tue, 9 Jun 2020 21:29:53 +0800 From: "Ming Huang" To: , , CC: , , , , , , Subject: [edk2-devel] [PATCH edk2-platforms v3 4/4] Silicon/Hisilicon: Rename EthMac files Date: Tue, 9 Jun 2020 21:27:25 +0800 Message-ID: <1591709245-44527-5-git-send-email-huangming23@huawei.com> In-Reply-To: <1591709245-44527-1-git-send-email-huangming23@huawei.com> References: <1591709245-44527-1-git-send-email-huangming23@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.184.68.188] X-CFilter-Loop: Reflected Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,huangming23@huawei.com X-Gm-Message-State: VWjFrt7kTcS8xXBsBBpvSfR9x1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1591709410; bh=zBi75MqBx2JUj/rbc0/Ot1uWy+FCBouXuxDTxQKA7Ms=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=aFNmQhZL8hnYudIeCqSrZk9SyLk3qHORgm0NVaMpqQz5wY6VCRDTkLTekDhyr+NKSuA +7vr3udF1357RPyFn0CSq2KU0LeOZl5/ya/1d3ZSRQSrM7H4ksl0W0eXZxo7SwEzR6yLD h3ZtOqCutQbqzeS8TaxsN4hpGDOBLmGtLNg= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As not only update mac address feature in EthMac files, so rename them to UpdateDsdt. Signed-off-by: Ming Huang --- Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c | 2 +- Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf | 2 +- Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c | 656 ------= -------------- Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.h | 16 - Silicon/Hisilicon/Drivers/AcpiPlatformDxe/UpdateDsdt.c | 656 ++++++= ++++++++++++++ Silicon/Hisilicon/Drivers/AcpiPlatformDxe/UpdateDsdt.h | 16 + 6 files changed, 674 insertions(+), 674 deletions(-) diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c b/Sil= icon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c index 9cdf710..34a1dc9 100644 --- a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c +++ b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c @@ -21,7 +21,7 @@ #include #include #include -#include "EthMac.h" +#include "UpdateDsdt.h" =20 EFI_EVENT mUpdateAcpiDsdtTableEvent; =20 diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf = b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf index 856309a..efb7ff3 100644 --- a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf +++ b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf @@ -18,7 +18,7 @@ =20 [Sources] AcpiPlatform.c - EthMac.c + UpdateDsdt.c =20 [Packages] MdePkg/MdePkg.dec diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c b/Silicon/H= isilicon/Drivers/AcpiPlatformDxe/EthMac.c deleted file mode 100644 index 841c94e..0000000 --- a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c +++ /dev/null @@ -1,656 +0,0 @@ -/** @file - - Copyright (c) 2014, Applied Micro Curcuit Corporation. All rights reserv= ed.
- Copyright (c) 2015 - 2020, Hisilicon Limited. All rights reserved.
- Copyright (c) 2015, Linaro Limited. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent - - This driver is called to initialize the FW part of the PHY in preparation - for the OS. - -**/ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -// Turn on debug message by enabling below define -//#define ACPI_DEBUG - -#ifdef ACPI_DEBUG -#define DBG(arg...) DEBUG((EFI_D_ERROR,## arg)) -#else -#define DBG(arg...) -#endif - -#define EFI_ACPI_MAX_NUM_TABLES 20 -#define DSDT_SIGNATURE 0x54445344 - -#define ACPI_ETH_MAC_KEY "local-mac-address" -#define ACPI_ETH_SAS_KEY "sas-addr" - -#define PREFIX_VARIABLE_NAME L"MAC" -#define PREFIX_VARIABLE_NAME_COMPAT L"RGMII_MAC" -#define ADDRESS_MAX_LEN 30 - -CHAR8 *mHisiAcpiDevId[] =3D {"HISI00C1","HISI00C2","HISI0162"}; - -typedef enum { - DsdtDeviceUnknown, - DsdtDeviceLan, - DsdtDeviceSas -} DSDT_DEVICE_TYPE; - -STATIC -EFI_STATUS -GetEnvMac( - IN UINTN MacNextID, - IN OUT UINT8 *MacBuffer - ) -{ - EFI_MAC_ADDRESS Mac; - EFI_STATUS Status; - HISI_BOARD_NIC_PROTOCOL *OemNic =3D NULL; - - Status =3D gBS->LocateProtocol(&gHisiBoardNicProtocolGuid, NULL, (VOID *= *)&OemNic); - if(EFI_ERROR(Status)) - { - DEBUG((EFI_D_ERROR, "[%a]:[%dL] LocateProtocol failed %r\n", __FUNCTIO= N__, __LINE__, Status)); - return Status; - } - - Status =3D OemNic->GetMac(&Mac, MacNextID); - if(EFI_ERROR(Status)) - { - DEBUG((EFI_D_ERROR, "[%a]:[%dL] GetMac failed %r\n", __FUNCTION__, __L= INE__, Status)); - return Status; - } - - CopyMem (MacBuffer, &Mac, 6); - DEBUG((EFI_D_ERROR, "Port %d MAC %02x:%02x:%02x:%02x:%02x:%02x\n", - MacNextID, - MacBuffer[0], - MacBuffer[1], - MacBuffer[2], - MacBuffer[3], - MacBuffer[4], - MacBuffer[5] - )); - - return EFI_SUCCESS; -} - -STATIC -EFI_STATUS -GetSasAddress ( - IN UINT8 Index, - IN OUT UINT8 *SasAddrBuffer - ) -{ - EFI_STATUS Status; - HISI_SAS_CONFIG_PROTOCOL *HisiSasConf; - - if (SasAddrBuffer =3D=3D NULL) { - return EFI_INVALID_PARAMETER; - } - - Status =3D gBS->LocateProtocol (&gHisiSasConfigProtocolGuid, NULL, (VOID= **)&HisiSasConf); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "Locate Sas Config Protocol failed %r\n", Status)= ); - SasAddrBuffer[0] =3D 0x50; - SasAddrBuffer[1] =3D 0x01; - SasAddrBuffer[2] =3D 0x88; - SasAddrBuffer[3] =3D 0x20; - SasAddrBuffer[4] =3D 0x16; - SasAddrBuffer[5] =3D 0x00; - SasAddrBuffer[6] =3D 0x00; - SasAddrBuffer[7] =3D Index; - return Status; - } - - return HisiSasConf->GetAddr (Index, SasAddrBuffer); -} - -STATIC -EFI_STATUS -UpdateAddressInOption ( - IN EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, - IN EFI_ACPI_HANDLE ChildHandle, - IN UINTN DevNextID, - IN DSDT_DEVICE_TYPE FoundDev - ) -{ - EFI_STATUS Status; - EFI_ACPI_DATA_TYPE DataType; - CONST VOID *Buffer; - UINTN DataSize; - UINTN Count; - EFI_ACPI_HANDLE CurrentHandle; - UINT8 *AddressBuffer; - UINT8 AddressByte; - - AddressByte =3D 0; - AddressBuffer =3D AllocateZeroPool (ADDRESS_MAX_LEN); - if (AddressBuffer =3D=3D NULL) { - DEBUG ((DEBUG_ERROR, "%a:%d AllocateZeroPool failed\n", __FILE__, __LI= NE__)); - return EFI_OUT_OF_RESOURCES; - } - - switch (FoundDev) { - case DsdtDeviceLan: - //Update the MAC - Status =3D GetEnvMac (DevNextID, AddressBuffer); - AddressByte =3D 6; - break; - case DsdtDeviceSas: - //Update SAS Address. - Status =3D GetSasAddress (DevNextID, AddressBuffer); - AddressByte =3D 8; - break; - default: - Status =3D EFI_INVALID_PARAMETER; - } - if (EFI_ERROR (Status)) { - FreePool (AddressBuffer); - return Status; - } - - for (Count =3D 0; Count < AddressByte; Count++) { - Status =3D AcpiTableProtocol->GetOption (CurrentHandle, 1, &DataType, = &Buffer, &DataSize); - if (EFI_ERROR (Status)) { - break; - } - - if (DataType !=3D EFI_ACPI_DATA_TYPE_UINT) - break; - - // only need one byte. - // FIXME: Assume the CPU is little endian - Status =3D AcpiTableProtocol->SetOption ( - CurrentHandle, - 1, - AddressBuffer + Count, - sizeof(UINT8)); - if (EFI_ERROR (Status)) { - break; - } - - Status =3D AcpiTableProtocol->GetChild (ChildHandle, &CurrentHandle); - if (EFI_ERROR (Status) || CurrentHandle =3D=3D NULL) { - break; - } - } - - FreePool (AddressBuffer); - return Status; -} - -STATIC -EFI_STATUS -UpdateAddressInPackage ( - IN EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, - IN EFI_ACPI_HANDLE ChildHandle, - IN UINTN Level, - IN OUT BOOLEAN *Found, - IN UINTN DevNextID, - IN DSDT_DEVICE_TYPE FoundDev - ) -{ - // ASL template for ethernet driver: -/* - * Name (_DSD, Package () { - * ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), - * Package () { - * Package (2) {"mac-address", Package (6) { 00, 11, 22, 33, 44, 55 }} - * Package (2) {"phy-channel", 0}, - * Package (2) {"phy-mode", "rgmii"}, - * Package (2) {"max-transfer-unit", 0x5dc}, // MTU of 1500 - * Package (2) {"max-speed", 0x3e8}, // 1000 Mbps - * } - * }) - */ - EFI_STATUS Status; - EFI_ACPI_DATA_TYPE DataType; - CONST UINT8 *Data; - CONST VOID *Buffer; - UINTN DataSize; - EFI_ACPI_HANDLE CurrentHandle; - EFI_ACPI_HANDLE NextHandle; - EFI_ACPI_HANDLE Level1Handle; - - DBG("In Level:%d\n", Level); - Level1Handle =3D NULL; - Status =3D EFI_SUCCESS; - for (CurrentHandle =3D NULL; ;) { - Status =3D AcpiTableProtocol->GetChild(ChildHandle, &CurrentHandle); - if (Level =3D=3D 1) { - Level1Handle =3D CurrentHandle; - } - if (Level !=3D 3 && (EFI_ERROR(Status) || CurrentHandle =3D=3D NULL)) - break; - - Status =3D AcpiTableProtocol->GetOption(CurrentHandle, 0, &DataType, &= Buffer, &DataSize); - Data =3D Buffer; - DBG("_DSD Child Subnode Store Op Code 0x%02X 0x%02X %02X\n", - DataSize, Data[0], DataSize > 1 ? Data[1] : 0); - - if (Level < 2 && Data[0] !=3D AML_PACKAGE_OP) - continue; - - if (Level =3D=3D 2 && Data[0] =3D=3D AML_STRING_PREFIX) { - Status =3D AcpiTableProtocol->GetOption(CurrentHandle, 1, &DataType,= &Buffer, &DataSize); - if (EFI_ERROR(Status)) - break; - - DBG(" _DSD Child Subnode Store Op Code 0x%02X 0x%02X %02X\n", - DataSize, Data[0], DataSize > 1 ? Data[1] : 0); - - Data =3D Buffer; - if ((DataType !=3D EFI_ACPI_DATA_TYPE_STRING) || - ((AsciiStrCmp ((CHAR8 *) Data, ACPI_ETH_MAC_KEY) !=3D 0) && - (AsciiStrCmp ((CHAR8 *) Data, ACPI_ETH_SAS_KEY) !=3D 0))) { - ChildHandle =3D Level1Handle; - continue; - } - - DBG("_DSD Key Type %d. Found address key\n", DataType); - - // - // We found the node. - // - *Found =3D TRUE; - continue; - } - - if (Level =3D=3D 3 && *Found) { - Status =3D UpdateAddressInOption (AcpiTableProtocol, ChildHandle, De= vNextID, FoundDev); - break; - } - - if (Level > 3) - break; - - //Search next package - AcpiTableProtocol->Open((VOID *) Buffer, &NextHandle); - Status =3D UpdateAddressInPackage ( - AcpiTableProtocol, - NextHandle, - Level + 1, - Found, - DevNextID, - FoundDev); - AcpiTableProtocol->Close(NextHandle); - if (!EFI_ERROR(Status)) - break; - } - - return Status; -} - -STATIC -EFI_STATUS -SearchReplacePackageAddress ( - IN EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, - IN EFI_ACPI_HANDLE ChildHandle, - IN UINTN DevNextID, - IN DSDT_DEVICE_TYPE FoundDev - ) -{ - BOOLEAN Found =3D FALSE; - UINTN Level =3D 0; - - return UpdateAddressInPackage (AcpiTableProtocol, ChildHandle, Level, - &Found, DevNextID, FoundDev); -} - -EFI_STATUS -GetDeviceInfo ( - EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, - EFI_ACPI_HANDLE ChildHandle, - UINTN *DevID, - DSDT_DEVICE_TYPE *FoundDev - ) -{ - EFI_STATUS Status; - EFI_ACPI_DATA_TYPE DataType; - CHAR8 Data[5]; - CONST VOID *Buffer; - UINTN DataSize; - - // Get NameString - Status =3D AcpiTableProtocol->GetOption (ChildHandle, 1, &DataType, &Buf= fer, &DataSize); - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_ERROR, "[%a:%d] Get NameString failed: %r\n", __FUNCTION= __, __LINE__, Status)); - return Status; - } - - CopyMem (Data, Buffer, 4); - DBG("Size %p Data %02x %02x %02x %02x\n", DataSize, Data[0], Data[1], Da= ta[2], Data[3]); - - Data[4] =3D '\0'; - if ((DataSize !=3D 4) || - (Data[3] > '9' || Data[3] < '0')) { - DEBUG ((DEBUG_ERROR, "The NameString %a is not ETHn or SASn\n", Data)); - return EFI_INVALID_PARAMETER; - } - - if (AsciiStrnCmp ("ETH", Data, 3) =3D=3D 0) { - *FoundDev =3D DsdtDeviceLan; - } else if (AsciiStrnCmp ("SAS", Data, 3) =3D=3D 0) { - *FoundDev =3D DsdtDeviceSas; - } else { - DEBUG ((DEBUG_ERROR, "[%a:%d] The NameString %a is not ETHn or SASn\n", - __FUNCTION__, __LINE__, Data)); - return EFI_INVALID_PARAMETER; - } - - *DevID =3D Data[3] - '0'; - return EFI_SUCCESS; -} - -EFI_STATUS ProcessDSDTDevice ( - EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, - EFI_ACPI_HANDLE ChildHandle) -{ - EFI_STATUS Status; - EFI_ACPI_DATA_TYPE DataType; - CONST UINT8 *Data; - CONST VOID *Buffer; - UINTN DataSize; - EFI_ACPI_HANDLE DevHandle; - DSDT_DEVICE_TYPE FoundDev =3D DsdtDeviceUnknown; - UINTN DevNextID; - BOOLEAN HisiAcpiDevNotFound; - UINTN Index; - - Status =3D AcpiTableProtocol->GetOption(ChildHandle, 0, &DataType, &Buff= er, &DataSize); - if (EFI_ERROR(Status)) - return EFI_SUCCESS; - - Data =3D Buffer; - // - // Skip all non-device type - // - if (DataSize !=3D 2 || Data[0] !=3D AML_EXT_OP || Data[1] !=3D AML_EXT_D= EVICE_OP) - return EFI_SUCCESS; - - // - // Walk the device type node - // - for (DevHandle =3D NULL; ; ) { - Status =3D AcpiTableProtocol->GetChild(ChildHandle, &DevHandle); - if (EFI_ERROR(Status) || DevHandle =3D=3D NULL) - break; - - // - // Search for _HID with Device ID - // - Status =3D AcpiTableProtocol->GetOption(DevHandle, 0, &DataType, &Buff= er, &DataSize); - if (EFI_ERROR(Status)) - break; - - Data =3D Buffer; - DBG("Data Type 0x%02X %02X\n", Data[0], DataSize > 1 ? Data[1] : 0); - if (DataSize =3D=3D 1 && Data[0] =3D=3D AML_NAME_OP) { - Status =3D AcpiTableProtocol->GetOption(DevHandle, 1, &DataType, &Bu= ffer, &DataSize); - if (EFI_ERROR(Status)) - break; - - Data =3D Buffer; - if (DataType =3D=3D EFI_ACPI_DATA_TYPE_NAME_STRING) { - if (AsciiStrnCmp((CHAR8 *) Data, "_HID", 4) =3D=3D 0) { - EFI_ACPI_HANDLE ValueHandle; - - Status =3D AcpiTableProtocol->GetOption(DevHandle, 2, &DataType,= &Buffer, &DataSize); - if (EFI_ERROR(Status)) - break; - - if (DataType !=3D EFI_ACPI_DATA_TYPE_CHILD) - continue; - - AcpiTableProtocol->Open((VOID *) Buffer, &ValueHandle); - Status =3D AcpiTableProtocol->GetOption(ValueHandle, 1, &DataTyp= e, &Buffer, &DataSize); - - Data =3D Buffer; - DBG("[%a:%d] - _HID =3D %a\n", __FUNCTION__, __LINE__, Data); - - if (EFI_ERROR(Status) || - DataType !=3D EFI_ACPI_DATA_TYPE_STRING) { - AcpiTableProtocol->Close (ValueHandle); - FoundDev =3D DsdtDeviceUnknown; - continue; - } - - HisiAcpiDevNotFound =3D TRUE; - for (Index =3D 0; Index < ARRAY_SIZE (mHisiAcpiDevId); Index++) { - if (AsciiStrCmp ((CHAR8 *)Data, mHisiAcpiDevId[Index]) =3D=3D = 0) { - HisiAcpiDevNotFound =3D FALSE; - break; - } - } - if (HisiAcpiDevNotFound) { - AcpiTableProtocol->Close (ValueHandle); - FoundDev =3D DsdtDeviceUnknown; - continue; - } - - DBG("Found device\n"); - AcpiTableProtocol->Close(ValueHandle); - Status =3D GetDeviceInfo (AcpiTableProtocol, ChildHandle, &DevNe= xtID, &FoundDev); - if (EFI_ERROR (Status)) { - continue; - } - } else if ((FoundDev !=3D DsdtDeviceUnknown) && AsciiStrnCmp((CHAR= 8 *) Data, "_DSD", 4) =3D=3D 0) { - // - // Patch DSD data - // - EFI_ACPI_HANDLE PkgHandle; - Status =3D AcpiTableProtocol->GetOption(DevHandle, 2, &DataType,= &Buffer, &DataSize); - if (EFI_ERROR(Status)) - break; - - if (DataType !=3D EFI_ACPI_DATA_TYPE_CHILD) - continue; - - // - // Open package data - // - AcpiTableProtocol->Open((VOID *) Buffer, &PkgHandle); - Status =3D AcpiTableProtocol->GetOption(PkgHandle, 0, &DataType,= &Buffer, &DataSize); - - Data =3D Buffer; - DBG("_DSD Subnode Store Op Code 0x%02X %02X\n", - Data[0], DataSize > 1 ? Data[1] : 0); - - // - // Walk the _DSD node - // - if (DataSize =3D=3D 1 && Data[0] =3D=3D AML_PACKAGE_OP) { - Status =3D SearchReplacePackageAddress (AcpiTableProtocol, Pkg= Handle, DevNextID, FoundDev); - } - - AcpiTableProtocol->Close(PkgHandle); - } else if (AsciiStrnCmp ((CHAR8 *) Data, "_ADR", 4) =3D=3D 0) { - Status =3D AcpiTableProtocol->GetOption (DevHandle, 2, &DataType= , &Buffer, &DataSize); - if (EFI_ERROR (Status)) { - break; - } - - if (DataType !=3D EFI_ACPI_DATA_TYPE_CHILD) { - continue; - } - - Status =3D GetDeviceInfo (AcpiTableProtocol, ChildHandle, &DevNe= xtID, &FoundDev); - - if (EFI_ERROR (Status)) { - continue; - } - } - } - } else if ((DataSize =3D=3D 2) && (Data[0] =3D=3D AML_EXT_OP) && (Data= [1] =3D=3D AML_EXT_DEVICE_OP)) { - ProcessDSDTDevice (AcpiTableProtocol, DevHandle); - } - } - - return EFI_SUCCESS; -} - - -BOOLEAN -IsSbScope ( - EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, - EFI_ACPI_HANDLE ChildHandle - ) -{ - EFI_STATUS Status; - EFI_ACPI_DATA_TYPE DataType; - CONST UINT8 *Data; - CONST VOID *Buffer; - UINTN DataSize; - - Status =3D AcpiTableProtocol->GetOption (ChildHandle, 0, &DataType, &Buf= fer, &DataSize); - if (EFI_ERROR(Status)) return FALSE; - - Data =3D Buffer; - if (DataSize !=3D 1 || Data[0] !=3D AML_SCOPE_OP) { - return FALSE; - } - - return TRUE; -} - -EFI_STATUS ProcessDSDTChild( - EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, - EFI_ACPI_HANDLE ChildHandle) -{ - EFI_STATUS Status; - EFI_ACPI_HANDLE DevHandle; - - // Check Scope(_SB) at first - if (!IsSbScope (AcpiTableProtocol, ChildHandle)) { - return ProcessDSDTDevice (AcpiTableProtocol, ChildHandle); - } - - for (DevHandle =3D NULL; ; ) { - Status =3D AcpiTableProtocol->GetChild (ChildHandle, &DevHandle); - if (EFI_ERROR(Status) || DevHandle =3D=3D NULL) { - break; - } - - ProcessDSDTDevice (AcpiTableProtocol, DevHandle); - } - - return EFI_SUCCESS; -} - -static EFI_STATUS ProcessDSDT( - EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, - EFI_ACPI_HANDLE TableHandle) -{ - EFI_STATUS Status; - EFI_ACPI_HANDLE ChildHandle; - // - // Parse table for device type - DBG ("[%a:%d] - TableHandle=3D%p\n", __FUNCTION__, __LINE__, TableHandle= ); - for (ChildHandle =3D NULL; ; ) { - Status =3D AcpiTableProtocol->GetChild(TableHandle, &ChildHandle); - DBG ("[%a:%d] - Child=3D%p, %r\n", __FUNCTION__, __LINE__, ChildHandle= , Status); - if (EFI_ERROR(Status)) - break; - if (ChildHandle =3D=3D NULL) - break; - - ProcessDSDTChild(AcpiTableProtocol, ChildHandle); - } - - return EFI_SUCCESS; -} - -STATIC -VOID -AcpiCheckSum ( - IN OUT EFI_ACPI_SDT_HEADER *Table - ) -{ - UINTN ChecksumOffset; - UINT8 *Buffer; - - ChecksumOffset =3D OFFSET_OF (EFI_ACPI_DESCRIPTION_HEADER, Checksum); - Buffer =3D (UINT8 *)Table; - - // - // set checksum to 0 first - // - Buffer[ChecksumOffset] =3D 0; - - // - // Update checksum value - // - Buffer[ChecksumOffset] =3D CalculateCheckSum8 (Buffer, Table->Length); -} - -EFI_STATUS -UpdateAcpiDsdtTable ( - VOID - ) -{ - EFI_STATUS Status; - EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol; - EFI_ACPI_SDT_HEADER *Table; - EFI_ACPI_TABLE_VERSION TableVersion; - UINTN TableKey; - EFI_ACPI_HANDLE TableHandle; - UINTN i; - - DEBUG ((EFI_D_ERROR, "Updating Ethernet MAC in ACPI DSDT...\n")); - - // - // Find the AcpiTable protocol - Status =3D gBS->LocateProtocol(&gEfiAcpiSdtProtocolGuid, NULL, (VOID**) = &AcpiTableProtocol); - if (EFI_ERROR(Status)) { - DBG("Unable to locate ACPI table protocol\n"); - return EFI_SUCCESS; - } - - // - // Search for DSDT Table - for (i =3D 0; i < EFI_ACPI_MAX_NUM_TABLES; i++) { - Status =3D AcpiTableProtocol->GetAcpiTable(i, &Table, &TableVersion, &= TableKey); - if (EFI_ERROR(Status)) - break; - if (Table->Signature !=3D DSDT_SIGNATURE) - continue; - - Status =3D AcpiTableProtocol->OpenSdt(TableKey, &TableHandle); - if (EFI_ERROR(Status)) - break; - - ProcessDSDT(AcpiTableProtocol, TableHandle); - - AcpiTableProtocol->Close(TableHandle); - AcpiCheckSum (Table); - } - - return EFI_SUCCESS; -} diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.h b/Silicon/H= isilicon/Drivers/AcpiPlatformDxe/EthMac.h deleted file mode 100644 index a7e1eed..0000000 --- a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * - * Copyright (c) 2014, Applied Micro Circuits Corporation - * Copyright (c) 2015, Hisilicon Limited. All rights reserved. - * Copyright (c) 2015, Linaro Limited. All rights reserved. - * Author: Loc Ho - * - * SPDX-License-Identifier: BSD-2-Clause-Patent - */ -#ifndef _ETH_MAC_H_ -#define _ETH_MAC_H_ - -EFI_STATUS UpdateAcpiDsdtTable (VOID); - -#endif - diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/UpdateDsdt.c b/Silic= on/Hisilicon/Drivers/AcpiPlatformDxe/UpdateDsdt.c new file mode 100644 index 0000000..841c94e --- /dev/null +++ b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/UpdateDsdt.c @@ -0,0 +1,656 @@ +/** @file + + Copyright (c) 2014, Applied Micro Curcuit Corporation. All rights reserv= ed.
+ Copyright (c) 2015 - 2020, Hisilicon Limited. All rights reserved.
+ Copyright (c) 2015, Linaro Limited. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + + This driver is called to initialize the FW part of the PHY in preparation + for the OS. + +**/ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +// Turn on debug message by enabling below define +//#define ACPI_DEBUG + +#ifdef ACPI_DEBUG +#define DBG(arg...) DEBUG((EFI_D_ERROR,## arg)) +#else +#define DBG(arg...) +#endif + +#define EFI_ACPI_MAX_NUM_TABLES 20 +#define DSDT_SIGNATURE 0x54445344 + +#define ACPI_ETH_MAC_KEY "local-mac-address" +#define ACPI_ETH_SAS_KEY "sas-addr" + +#define PREFIX_VARIABLE_NAME L"MAC" +#define PREFIX_VARIABLE_NAME_COMPAT L"RGMII_MAC" +#define ADDRESS_MAX_LEN 30 + +CHAR8 *mHisiAcpiDevId[] =3D {"HISI00C1","HISI00C2","HISI0162"}; + +typedef enum { + DsdtDeviceUnknown, + DsdtDeviceLan, + DsdtDeviceSas +} DSDT_DEVICE_TYPE; + +STATIC +EFI_STATUS +GetEnvMac( + IN UINTN MacNextID, + IN OUT UINT8 *MacBuffer + ) +{ + EFI_MAC_ADDRESS Mac; + EFI_STATUS Status; + HISI_BOARD_NIC_PROTOCOL *OemNic =3D NULL; + + Status =3D gBS->LocateProtocol(&gHisiBoardNicProtocolGuid, NULL, (VOID *= *)&OemNic); + if(EFI_ERROR(Status)) + { + DEBUG((EFI_D_ERROR, "[%a]:[%dL] LocateProtocol failed %r\n", __FUNCTIO= N__, __LINE__, Status)); + return Status; + } + + Status =3D OemNic->GetMac(&Mac, MacNextID); + if(EFI_ERROR(Status)) + { + DEBUG((EFI_D_ERROR, "[%a]:[%dL] GetMac failed %r\n", __FUNCTION__, __L= INE__, Status)); + return Status; + } + + CopyMem (MacBuffer, &Mac, 6); + DEBUG((EFI_D_ERROR, "Port %d MAC %02x:%02x:%02x:%02x:%02x:%02x\n", + MacNextID, + MacBuffer[0], + MacBuffer[1], + MacBuffer[2], + MacBuffer[3], + MacBuffer[4], + MacBuffer[5] + )); + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +GetSasAddress ( + IN UINT8 Index, + IN OUT UINT8 *SasAddrBuffer + ) +{ + EFI_STATUS Status; + HISI_SAS_CONFIG_PROTOCOL *HisiSasConf; + + if (SasAddrBuffer =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + Status =3D gBS->LocateProtocol (&gHisiSasConfigProtocolGuid, NULL, (VOID= **)&HisiSasConf); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Locate Sas Config Protocol failed %r\n", Status)= ); + SasAddrBuffer[0] =3D 0x50; + SasAddrBuffer[1] =3D 0x01; + SasAddrBuffer[2] =3D 0x88; + SasAddrBuffer[3] =3D 0x20; + SasAddrBuffer[4] =3D 0x16; + SasAddrBuffer[5] =3D 0x00; + SasAddrBuffer[6] =3D 0x00; + SasAddrBuffer[7] =3D Index; + return Status; + } + + return HisiSasConf->GetAddr (Index, SasAddrBuffer); +} + +STATIC +EFI_STATUS +UpdateAddressInOption ( + IN EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, + IN EFI_ACPI_HANDLE ChildHandle, + IN UINTN DevNextID, + IN DSDT_DEVICE_TYPE FoundDev + ) +{ + EFI_STATUS Status; + EFI_ACPI_DATA_TYPE DataType; + CONST VOID *Buffer; + UINTN DataSize; + UINTN Count; + EFI_ACPI_HANDLE CurrentHandle; + UINT8 *AddressBuffer; + UINT8 AddressByte; + + AddressByte =3D 0; + AddressBuffer =3D AllocateZeroPool (ADDRESS_MAX_LEN); + if (AddressBuffer =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a:%d AllocateZeroPool failed\n", __FILE__, __LI= NE__)); + return EFI_OUT_OF_RESOURCES; + } + + switch (FoundDev) { + case DsdtDeviceLan: + //Update the MAC + Status =3D GetEnvMac (DevNextID, AddressBuffer); + AddressByte =3D 6; + break; + case DsdtDeviceSas: + //Update SAS Address. + Status =3D GetSasAddress (DevNextID, AddressBuffer); + AddressByte =3D 8; + break; + default: + Status =3D EFI_INVALID_PARAMETER; + } + if (EFI_ERROR (Status)) { + FreePool (AddressBuffer); + return Status; + } + + for (Count =3D 0; Count < AddressByte; Count++) { + Status =3D AcpiTableProtocol->GetOption (CurrentHandle, 1, &DataType, = &Buffer, &DataSize); + if (EFI_ERROR (Status)) { + break; + } + + if (DataType !=3D EFI_ACPI_DATA_TYPE_UINT) + break; + + // only need one byte. + // FIXME: Assume the CPU is little endian + Status =3D AcpiTableProtocol->SetOption ( + CurrentHandle, + 1, + AddressBuffer + Count, + sizeof(UINT8)); + if (EFI_ERROR (Status)) { + break; + } + + Status =3D AcpiTableProtocol->GetChild (ChildHandle, &CurrentHandle); + if (EFI_ERROR (Status) || CurrentHandle =3D=3D NULL) { + break; + } + } + + FreePool (AddressBuffer); + return Status; +} + +STATIC +EFI_STATUS +UpdateAddressInPackage ( + IN EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, + IN EFI_ACPI_HANDLE ChildHandle, + IN UINTN Level, + IN OUT BOOLEAN *Found, + IN UINTN DevNextID, + IN DSDT_DEVICE_TYPE FoundDev + ) +{ + // ASL template for ethernet driver: +/* + * Name (_DSD, Package () { + * ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), + * Package () { + * Package (2) {"mac-address", Package (6) { 00, 11, 22, 33, 44, 55 }} + * Package (2) {"phy-channel", 0}, + * Package (2) {"phy-mode", "rgmii"}, + * Package (2) {"max-transfer-unit", 0x5dc}, // MTU of 1500 + * Package (2) {"max-speed", 0x3e8}, // 1000 Mbps + * } + * }) + */ + EFI_STATUS Status; + EFI_ACPI_DATA_TYPE DataType; + CONST UINT8 *Data; + CONST VOID *Buffer; + UINTN DataSize; + EFI_ACPI_HANDLE CurrentHandle; + EFI_ACPI_HANDLE NextHandle; + EFI_ACPI_HANDLE Level1Handle; + + DBG("In Level:%d\n", Level); + Level1Handle =3D NULL; + Status =3D EFI_SUCCESS; + for (CurrentHandle =3D NULL; ;) { + Status =3D AcpiTableProtocol->GetChild(ChildHandle, &CurrentHandle); + if (Level =3D=3D 1) { + Level1Handle =3D CurrentHandle; + } + if (Level !=3D 3 && (EFI_ERROR(Status) || CurrentHandle =3D=3D NULL)) + break; + + Status =3D AcpiTableProtocol->GetOption(CurrentHandle, 0, &DataType, &= Buffer, &DataSize); + Data =3D Buffer; + DBG("_DSD Child Subnode Store Op Code 0x%02X 0x%02X %02X\n", + DataSize, Data[0], DataSize > 1 ? Data[1] : 0); + + if (Level < 2 && Data[0] !=3D AML_PACKAGE_OP) + continue; + + if (Level =3D=3D 2 && Data[0] =3D=3D AML_STRING_PREFIX) { + Status =3D AcpiTableProtocol->GetOption(CurrentHandle, 1, &DataType,= &Buffer, &DataSize); + if (EFI_ERROR(Status)) + break; + + DBG(" _DSD Child Subnode Store Op Code 0x%02X 0x%02X %02X\n", + DataSize, Data[0], DataSize > 1 ? Data[1] : 0); + + Data =3D Buffer; + if ((DataType !=3D EFI_ACPI_DATA_TYPE_STRING) || + ((AsciiStrCmp ((CHAR8 *) Data, ACPI_ETH_MAC_KEY) !=3D 0) && + (AsciiStrCmp ((CHAR8 *) Data, ACPI_ETH_SAS_KEY) !=3D 0))) { + ChildHandle =3D Level1Handle; + continue; + } + + DBG("_DSD Key Type %d. Found address key\n", DataType); + + // + // We found the node. + // + *Found =3D TRUE; + continue; + } + + if (Level =3D=3D 3 && *Found) { + Status =3D UpdateAddressInOption (AcpiTableProtocol, ChildHandle, De= vNextID, FoundDev); + break; + } + + if (Level > 3) + break; + + //Search next package + AcpiTableProtocol->Open((VOID *) Buffer, &NextHandle); + Status =3D UpdateAddressInPackage ( + AcpiTableProtocol, + NextHandle, + Level + 1, + Found, + DevNextID, + FoundDev); + AcpiTableProtocol->Close(NextHandle); + if (!EFI_ERROR(Status)) + break; + } + + return Status; +} + +STATIC +EFI_STATUS +SearchReplacePackageAddress ( + IN EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, + IN EFI_ACPI_HANDLE ChildHandle, + IN UINTN DevNextID, + IN DSDT_DEVICE_TYPE FoundDev + ) +{ + BOOLEAN Found =3D FALSE; + UINTN Level =3D 0; + + return UpdateAddressInPackage (AcpiTableProtocol, ChildHandle, Level, + &Found, DevNextID, FoundDev); +} + +EFI_STATUS +GetDeviceInfo ( + EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, + EFI_ACPI_HANDLE ChildHandle, + UINTN *DevID, + DSDT_DEVICE_TYPE *FoundDev + ) +{ + EFI_STATUS Status; + EFI_ACPI_DATA_TYPE DataType; + CHAR8 Data[5]; + CONST VOID *Buffer; + UINTN DataSize; + + // Get NameString + Status =3D AcpiTableProtocol->GetOption (ChildHandle, 1, &DataType, &Buf= fer, &DataSize); + if (EFI_ERROR (Status)) { + DEBUG ((EFI_D_ERROR, "[%a:%d] Get NameString failed: %r\n", __FUNCTION= __, __LINE__, Status)); + return Status; + } + + CopyMem (Data, Buffer, 4); + DBG("Size %p Data %02x %02x %02x %02x\n", DataSize, Data[0], Data[1], Da= ta[2], Data[3]); + + Data[4] =3D '\0'; + if ((DataSize !=3D 4) || + (Data[3] > '9' || Data[3] < '0')) { + DEBUG ((DEBUG_ERROR, "The NameString %a is not ETHn or SASn\n", Data)); + return EFI_INVALID_PARAMETER; + } + + if (AsciiStrnCmp ("ETH", Data, 3) =3D=3D 0) { + *FoundDev =3D DsdtDeviceLan; + } else if (AsciiStrnCmp ("SAS", Data, 3) =3D=3D 0) { + *FoundDev =3D DsdtDeviceSas; + } else { + DEBUG ((DEBUG_ERROR, "[%a:%d] The NameString %a is not ETHn or SASn\n", + __FUNCTION__, __LINE__, Data)); + return EFI_INVALID_PARAMETER; + } + + *DevID =3D Data[3] - '0'; + return EFI_SUCCESS; +} + +EFI_STATUS ProcessDSDTDevice ( + EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, + EFI_ACPI_HANDLE ChildHandle) +{ + EFI_STATUS Status; + EFI_ACPI_DATA_TYPE DataType; + CONST UINT8 *Data; + CONST VOID *Buffer; + UINTN DataSize; + EFI_ACPI_HANDLE DevHandle; + DSDT_DEVICE_TYPE FoundDev =3D DsdtDeviceUnknown; + UINTN DevNextID; + BOOLEAN HisiAcpiDevNotFound; + UINTN Index; + + Status =3D AcpiTableProtocol->GetOption(ChildHandle, 0, &DataType, &Buff= er, &DataSize); + if (EFI_ERROR(Status)) + return EFI_SUCCESS; + + Data =3D Buffer; + // + // Skip all non-device type + // + if (DataSize !=3D 2 || Data[0] !=3D AML_EXT_OP || Data[1] !=3D AML_EXT_D= EVICE_OP) + return EFI_SUCCESS; + + // + // Walk the device type node + // + for (DevHandle =3D NULL; ; ) { + Status =3D AcpiTableProtocol->GetChild(ChildHandle, &DevHandle); + if (EFI_ERROR(Status) || DevHandle =3D=3D NULL) + break; + + // + // Search for _HID with Device ID + // + Status =3D AcpiTableProtocol->GetOption(DevHandle, 0, &DataType, &Buff= er, &DataSize); + if (EFI_ERROR(Status)) + break; + + Data =3D Buffer; + DBG("Data Type 0x%02X %02X\n", Data[0], DataSize > 1 ? Data[1] : 0); + if (DataSize =3D=3D 1 && Data[0] =3D=3D AML_NAME_OP) { + Status =3D AcpiTableProtocol->GetOption(DevHandle, 1, &DataType, &Bu= ffer, &DataSize); + if (EFI_ERROR(Status)) + break; + + Data =3D Buffer; + if (DataType =3D=3D EFI_ACPI_DATA_TYPE_NAME_STRING) { + if (AsciiStrnCmp((CHAR8 *) Data, "_HID", 4) =3D=3D 0) { + EFI_ACPI_HANDLE ValueHandle; + + Status =3D AcpiTableProtocol->GetOption(DevHandle, 2, &DataType,= &Buffer, &DataSize); + if (EFI_ERROR(Status)) + break; + + if (DataType !=3D EFI_ACPI_DATA_TYPE_CHILD) + continue; + + AcpiTableProtocol->Open((VOID *) Buffer, &ValueHandle); + Status =3D AcpiTableProtocol->GetOption(ValueHandle, 1, &DataTyp= e, &Buffer, &DataSize); + + Data =3D Buffer; + DBG("[%a:%d] - _HID =3D %a\n", __FUNCTION__, __LINE__, Data); + + if (EFI_ERROR(Status) || + DataType !=3D EFI_ACPI_DATA_TYPE_STRING) { + AcpiTableProtocol->Close (ValueHandle); + FoundDev =3D DsdtDeviceUnknown; + continue; + } + + HisiAcpiDevNotFound =3D TRUE; + for (Index =3D 0; Index < ARRAY_SIZE (mHisiAcpiDevId); Index++) { + if (AsciiStrCmp ((CHAR8 *)Data, mHisiAcpiDevId[Index]) =3D=3D = 0) { + HisiAcpiDevNotFound =3D FALSE; + break; + } + } + if (HisiAcpiDevNotFound) { + AcpiTableProtocol->Close (ValueHandle); + FoundDev =3D DsdtDeviceUnknown; + continue; + } + + DBG("Found device\n"); + AcpiTableProtocol->Close(ValueHandle); + Status =3D GetDeviceInfo (AcpiTableProtocol, ChildHandle, &DevNe= xtID, &FoundDev); + if (EFI_ERROR (Status)) { + continue; + } + } else if ((FoundDev !=3D DsdtDeviceUnknown) && AsciiStrnCmp((CHAR= 8 *) Data, "_DSD", 4) =3D=3D 0) { + // + // Patch DSD data + // + EFI_ACPI_HANDLE PkgHandle; + Status =3D AcpiTableProtocol->GetOption(DevHandle, 2, &DataType,= &Buffer, &DataSize); + if (EFI_ERROR(Status)) + break; + + if (DataType !=3D EFI_ACPI_DATA_TYPE_CHILD) + continue; + + // + // Open package data + // + AcpiTableProtocol->Open((VOID *) Buffer, &PkgHandle); + Status =3D AcpiTableProtocol->GetOption(PkgHandle, 0, &DataType,= &Buffer, &DataSize); + + Data =3D Buffer; + DBG("_DSD Subnode Store Op Code 0x%02X %02X\n", + Data[0], DataSize > 1 ? Data[1] : 0); + + // + // Walk the _DSD node + // + if (DataSize =3D=3D 1 && Data[0] =3D=3D AML_PACKAGE_OP) { + Status =3D SearchReplacePackageAddress (AcpiTableProtocol, Pkg= Handle, DevNextID, FoundDev); + } + + AcpiTableProtocol->Close(PkgHandle); + } else if (AsciiStrnCmp ((CHAR8 *) Data, "_ADR", 4) =3D=3D 0) { + Status =3D AcpiTableProtocol->GetOption (DevHandle, 2, &DataType= , &Buffer, &DataSize); + if (EFI_ERROR (Status)) { + break; + } + + if (DataType !=3D EFI_ACPI_DATA_TYPE_CHILD) { + continue; + } + + Status =3D GetDeviceInfo (AcpiTableProtocol, ChildHandle, &DevNe= xtID, &FoundDev); + + if (EFI_ERROR (Status)) { + continue; + } + } + } + } else if ((DataSize =3D=3D 2) && (Data[0] =3D=3D AML_EXT_OP) && (Data= [1] =3D=3D AML_EXT_DEVICE_OP)) { + ProcessDSDTDevice (AcpiTableProtocol, DevHandle); + } + } + + return EFI_SUCCESS; +} + + +BOOLEAN +IsSbScope ( + EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, + EFI_ACPI_HANDLE ChildHandle + ) +{ + EFI_STATUS Status; + EFI_ACPI_DATA_TYPE DataType; + CONST UINT8 *Data; + CONST VOID *Buffer; + UINTN DataSize; + + Status =3D AcpiTableProtocol->GetOption (ChildHandle, 0, &DataType, &Buf= fer, &DataSize); + if (EFI_ERROR(Status)) return FALSE; + + Data =3D Buffer; + if (DataSize !=3D 1 || Data[0] !=3D AML_SCOPE_OP) { + return FALSE; + } + + return TRUE; +} + +EFI_STATUS ProcessDSDTChild( + EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, + EFI_ACPI_HANDLE ChildHandle) +{ + EFI_STATUS Status; + EFI_ACPI_HANDLE DevHandle; + + // Check Scope(_SB) at first + if (!IsSbScope (AcpiTableProtocol, ChildHandle)) { + return ProcessDSDTDevice (AcpiTableProtocol, ChildHandle); + } + + for (DevHandle =3D NULL; ; ) { + Status =3D AcpiTableProtocol->GetChild (ChildHandle, &DevHandle); + if (EFI_ERROR(Status) || DevHandle =3D=3D NULL) { + break; + } + + ProcessDSDTDevice (AcpiTableProtocol, DevHandle); + } + + return EFI_SUCCESS; +} + +static EFI_STATUS ProcessDSDT( + EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol, + EFI_ACPI_HANDLE TableHandle) +{ + EFI_STATUS Status; + EFI_ACPI_HANDLE ChildHandle; + // + // Parse table for device type + DBG ("[%a:%d] - TableHandle=3D%p\n", __FUNCTION__, __LINE__, TableHandle= ); + for (ChildHandle =3D NULL; ; ) { + Status =3D AcpiTableProtocol->GetChild(TableHandle, &ChildHandle); + DBG ("[%a:%d] - Child=3D%p, %r\n", __FUNCTION__, __LINE__, ChildHandle= , Status); + if (EFI_ERROR(Status)) + break; + if (ChildHandle =3D=3D NULL) + break; + + ProcessDSDTChild(AcpiTableProtocol, ChildHandle); + } + + return EFI_SUCCESS; +} + +STATIC +VOID +AcpiCheckSum ( + IN OUT EFI_ACPI_SDT_HEADER *Table + ) +{ + UINTN ChecksumOffset; + UINT8 *Buffer; + + ChecksumOffset =3D OFFSET_OF (EFI_ACPI_DESCRIPTION_HEADER, Checksum); + Buffer =3D (UINT8 *)Table; + + // + // set checksum to 0 first + // + Buffer[ChecksumOffset] =3D 0; + + // + // Update checksum value + // + Buffer[ChecksumOffset] =3D CalculateCheckSum8 (Buffer, Table->Length); +} + +EFI_STATUS +UpdateAcpiDsdtTable ( + VOID + ) +{ + EFI_STATUS Status; + EFI_ACPI_SDT_PROTOCOL *AcpiTableProtocol; + EFI_ACPI_SDT_HEADER *Table; + EFI_ACPI_TABLE_VERSION TableVersion; + UINTN TableKey; + EFI_ACPI_HANDLE TableHandle; + UINTN i; + + DEBUG ((EFI_D_ERROR, "Updating Ethernet MAC in ACPI DSDT...\n")); + + // + // Find the AcpiTable protocol + Status =3D gBS->LocateProtocol(&gEfiAcpiSdtProtocolGuid, NULL, (VOID**) = &AcpiTableProtocol); + if (EFI_ERROR(Status)) { + DBG("Unable to locate ACPI table protocol\n"); + return EFI_SUCCESS; + } + + // + // Search for DSDT Table + for (i =3D 0; i < EFI_ACPI_MAX_NUM_TABLES; i++) { + Status =3D AcpiTableProtocol->GetAcpiTable(i, &Table, &TableVersion, &= TableKey); + if (EFI_ERROR(Status)) + break; + if (Table->Signature !=3D DSDT_SIGNATURE) + continue; + + Status =3D AcpiTableProtocol->OpenSdt(TableKey, &TableHandle); + if (EFI_ERROR(Status)) + break; + + ProcessDSDT(AcpiTableProtocol, TableHandle); + + AcpiTableProtocol->Close(TableHandle); + AcpiCheckSum (Table); + } + + return EFI_SUCCESS; +} diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/UpdateDsdt.h b/Silic= on/Hisilicon/Drivers/AcpiPlatformDxe/UpdateDsdt.h new file mode 100644 index 0000000..246eb92 --- /dev/null +++ b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/UpdateDsdt.h @@ -0,0 +1,16 @@ +/* + * + * Copyright (c) 2014, Applied Micro Circuits Corporation + * Copyright (c) 2020, Hisilicon Limited. All rights reserved. + * Copyright (c) 2015, Linaro Limited. All rights reserved. + * Author: Loc Ho + * + * SPDX-License-Identifier: BSD-2-Clause-Patent + */ +#ifndef UPDATE_DSDT_H_ +#define UPDATE_DSDT_H_ + +EFI_STATUS UpdateAcpiDsdtTable (VOID); + +#endif + --=20 2.8.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#60972): https://edk2.groups.io/g/devel/message/60972 Mute This Topic: https://groups.io/mt/74773836/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-