From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from huawei.com (huawei.com [45.249.212.35]) by mx.groups.io with SMTP id smtpd.web12.7059.1591709079603558900 for ; Tue, 09 Jun 2020 06:24:40 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: huawei.com, ip: 45.249.212.35, mailfrom: huangming23@huawei.com) Received: from DGGEMS402-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 5A618BB1164810E3B8BE; Tue, 9 Jun 2020 21:24:36 +0800 (CST) Received: from [127.0.0.1] (10.78.51.60) by DGGEMS402-HUB.china.huawei.com (10.3.19.202) with Microsoft SMTP Server id 14.3.487.0; Tue, 9 Jun 2020 21:24:28 +0800 Subject: Re: [edk2-devel] [PATCH edk2 v2 3/5] Silicon/Hisilicon/Acpi: Add update sas address feature To: Leif Lindholm , CC: , , , , , , , References: <1590590038-19724-1-git-send-email-huangming23@huawei.com> <1590590038-19724-4-git-send-email-huangming23@huawei.com> <20200608171551.GU28566@vanye> From: "Ming Huang" Message-ID: <472abc37-41ac-bbd6-63c1-1d4ba4188a0e@huawei.com> Date: Tue, 9 Jun 2020 21:24:28 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <20200608171551.GU28566@vanye> X-Originating-IP: [10.78.51.60] X-CFilter-Loop: Reflected Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable =E5=9C=A8 2020/6/9 1:15, Leif Lindholm =E5=86=99=E9=81=93: > Hi Ming, >=20 > On Wed, May 27, 2020 at 22:33:56 +0800, Ming Huang wrote: >> The updating sas address feature is similar with apdating mac address. >> Modify updating dsdt flow for add this feature. >> >> Signed-off-by: Ming Huang >> --- >> Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c | 2 +- >> Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf | 1 + >> Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c | 297 ++= +++++++++++++----- >> Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.h | 2 +- >> 4 files changed, 232 insertions(+), 70 deletions(-) >> >> diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/AcpiPlatform.c b= /Silicon/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; >> } >> >> - Status =3D EthMacInit (); >> + Status =3D UpdateAcpiDsdtTable (); >> if (EFI_ERROR (Status)) { >> DEBUG ((DEBUG_ERROR, " UpdateAcpiDsdtTable Failed, Status =3D %r\n= ", Status)); >> } >> 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_CONS= UMED >> gEfiAcpiSdtProtocolGuid # PROTOCOL ALWAYS_CONS= UMED >> gHisiBoardNicProtocolGuid # PROTOCOL ALWAY= S_CONSUMED >> + gHisiSasConfigProtocolGuid >> >> [FeaturePcd] >> gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol >> diff --git a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c b/Silic= on/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c >> index cd98506..6afdddf 100644 >> --- a/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c >> +++ b/Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c >> @@ -1,7 +1,7 @@ >> /** @file >> >> Copyright (c) 2014, Applied Micro Curcuit Corporation. All rights re= served.
>> - 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 >> >> @@ -23,6 +23,7 @@ >> #include >> #include >> #include >> +#include >> #include >> #include >> #include >> @@ -32,6 +33,7 @@ >> #include >> >> #include >> +#include >> >> // 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 >> >> -#define D03_ACPI_ETH_ID "HISI00C2" >> - >> #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 MAC_MAX_LEN 30 >> +#define ADDRESS_MAX_LEN 30 >> + >> +CHAR8 *mHisiAcpiDevId[] =3D {"HISI00C1","HISI00C2","HISI0162"}; >> >> -EFI_STATUS GetEnvMac( >> - IN UINTN MacNextID, >> - IN OUT UINT8 *MacBuffer) >> +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; >> @@ -89,12 +101,126 @@ EFI_STATUS GetEnvMac( >> return EFI_SUCCESS; >> } >> >> -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", Sta= tus)); >> + 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 UINT8 *Data; >> + 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__, = __LINE__)); >> + 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, &DataTy= pe, &Buffer, &DataSize); >> + if (EFI_ERROR (Status)) { >> + break; >> + } >> + >> + Data =3D Buffer; >=20 > After applying this patch, the NOOPT build fails with > Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c: In function =E2=80= =98UpdateAddressInOption=E2=80=99: > Silicon/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c:146:24: error: variab= le =E2=80=98Data=E2=80=99 set but not used [-Werror=3Dunused-but-set-variab= le] > CONST UINT8 *Data; > ^~~~ > You will need to move this line, and the subsequent DBG line inside an > #ifdef ACPI_DEBUG if you want to keep it. I think the DBG line can be remove, so I prefer remove this tow lines. Thanks, Ming >=20 > / > Leif >=20 >> + 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, >> + AddressBuffer + Count, >> + sizeof(UINT8)); >> + if (EFI_ERROR (Status)) { >> + break; >> + } >> + >> + Status =3D AcpiTableProtocol->GetChild (ChildHandle, &CurrentHandl= e); >> + 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 +240,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; >> >> 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 NUL= L)) >> break; >> >> @@ -143,11 +272,14 @@ EFI_STATUS _SearchReplacePackageMACAddress( >> 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) >> + 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 MAC address key\n", DataType); >> + DBG("_DSD Key Type %d. Found address key\n", DataType); >> >> // >> // We found the node. >> @@ -157,33 +289,7 @@ EFI_STATUS _SearchReplacePackageMACAddress( >> } >> >> 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, &Dat= aType, &Buffer, &DataSize); >> - if (EFI_ERROR(Status)) >> - break; >> - >> - Data =3D Buffer; >> - DBG(" _DSD Child Subnode Store Op Code 0x%02X 0x%02X %02X D= ataType 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, (VOI= D *)&MACBuffer[Count], sizeof(UINT8)); >> - if (EFI_ERROR(Status)) >> - break; >> - Status =3D AcpiTableProtocol->GetChild(ChildHandle, &CurrentHa= ndle); >> - if (EFI_ERROR(Status) || CurrentHandle =3D=3D NULL) >> - break; >> - } >> + Status =3D UpdateAddressInOption (AcpiTableProtocol, ChildHandle= , DevNextID, FoundDev); >> break; >> } >> >> @@ -192,7 +298,13 @@ EFI_STATUS _SearchReplacePackageMACAddress( >> >> //Search next package >> AcpiTableProtocol->Open((VOID *) Buffer, &NextHandle); >> - Status =3D _SearchReplacePackageMACAddress(AcpiTableProtocol, Next= Handle, Level + 1, Found, MacNextID); >> + Status =3D UpdateAddressInPackage ( >> + AcpiTableProtocol, >> + NextHandle, >> + Level + 1, >> + Found, >> + DevNextID, >> + FoundDev); >> AcpiTableProtocol->Close(NextHandle); >> if (!EFI_ERROR(Status)) >> break; >> @@ -201,22 +313,28 @@ EFI_STATUS _SearchReplacePackageMACAddress( >> return Status; >> } >> >> -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; >> >> - return _SearchReplacePackageMACAddress(AcpiTableProtocol, ChildHandl= e, Level, &Found, MacNextID); >> + return UpdateAddressInPackage (AcpiTableProtocol, ChildHandle, Level= , >> + &Found, DevNextID, FoundDev); >> } >> >> 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 +343,7 @@ GetEthID ( >> CONST VOID *Buffer; >> UINTN DataSize; >> >> - // Get NameString ETHx >> + // Get NameString >> Status =3D AcpiTableProtocol->GetOption (ChildHandle, 1, &DataType, = &Buffer, &DataSize); >> if (EFI_ERROR (Status)) { >> DEBUG ((EFI_D_ERROR, "[%a:%d] Get NameString failed: %r\n", __FUNC= TION__, __LINE__, Status)); >> @@ -236,14 +354,23 @@ GetEthID ( >> DBG("Size %p Data %02x %02x %02x %02x\n", DataSize, Data[0], Data[1]= , Data[2], Data[3]); >> >> 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", __= FUNCTION__, __LINE__, Data)); >> + if ((DataSize !=3D 4) || >> + (Data[3] > '9' || Data[3] < '0')) { >> + DEBUG ((DEBUG_ERROR, "The NameString %a is not ETHn or SASn\n", Da= ta)); >> + 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 SAS= n\n", >> + __FUNCTION__, __LINE__, Data)); >> return EFI_INVALID_PARAMETER; >> } >> >> - *EthID =3D Data[3] - '0'; >> + *DevID =3D Data[3] - '0'; >> return EFI_SUCCESS; >> } >> >> @@ -257,8 +384,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; >> >> Status =3D AcpiTableProtocol->GetOption(ChildHandle, 0, &DataType, &= Buffer, &DataSize); >> if (EFI_ERROR(Status)) >> @@ -280,7 +409,7 @@ EFI_STATUS ProcessDSDTDevice ( >> break; >> >> // >> - // Search for _HID with Ethernet ID >> + // Search for _HID with Device ID >> // >> Status =3D AcpiTableProtocol->GetOption(DevHandle, 0, &DataType, &= Buffer, &DataSize); >> if (EFI_ERROR(Status)) >> @@ -312,23 +441,34 @@ EFI_STATUS ProcessDSDTDevice ( >> DBG("[%a:%d] - _HID =3D %a\n", __FUNCTION__, __LINE__, Data)= ; >> >> 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; >> } >> >> - DBG("Found Ethernet device\n"); >> + 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 GetEthID (AcpiTableProtocol, ChildHandle, &MacNex= tID); >> + Status =3D GetDeviceInfo (AcpiTableProtocol, ChildHandle, &D= evNextID, &FoundDev); >> if (EFI_ERROR (Status)) { >> continue; >> } >> - Found =3D 1; >> - } else if (Found =3D=3D 1 && AsciiStrnCmp((CHAR8 *) Data, "_DS= D", 4) =3D=3D 0) { >> + } else if ((FoundDev !=3D DsdtDeviceUnknown) && AsciiStrnCmp((= CHAR8 *) 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, &DataT= ype, &Buffer, &DataSize); >> @@ -351,12 +491,30 @@ EFI_STATUS ProcessDSDTDevice ( >> // >> // Walk the _DSD node >> // >> - if (DataSize =3D=3D 1 && Data[0] =3D=3D AML_PACKAGE_OP) >> - Status =3D SearchReplacePackageMACAddress(AcpiTableProtoco= l, PkgHandle, MacNextID); >> + if (DataSize =3D=3D 1 && Data[0] =3D=3D AML_PACKAGE_OP) { >> + Status =3D SearchReplacePackageAddress (AcpiTableProtocol,= PkgHandle, DevNextID, FoundDev); >> + } >> >> AcpiTableProtocol->Close(PkgHandle); >> + } else if (AsciiStrnCmp ((CHAR8 *) Data, "_ADR", 4) =3D=3D 0) = { >> + Status =3D AcpiTableProtocol->GetOption (DevHandle, 2, &Data= Type, &Buffer, &DataSize); >> + if (EFI_ERROR (Status)) { >> + break; >> + } >> + >> + if (DataType !=3D EFI_ACPI_DATA_TYPE_CHILD) { >> + continue; >> + } >> + >> + Status =3D GetDeviceInfo (AcpiTableProtocol, ChildHandle, &D= evNextID, &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); >> } >> } >> >> @@ -457,7 +615,10 @@ AcpiCheckSum ( >> Buffer[ChecksumOffset] =3D CalculateCheckSum8 (Buffer, Table->Length= ); >> } >> >> -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/Silic= on/Hisilicon/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_ >> >> -EFI_STATUS EthMacInit(VOID); >> +EFI_STATUS UpdateAcpiDsdtTable (VOID); >> >> #endif >> >> --=20 >> 2.8.1 >> >> >>=20 >> >=20 > . >=20