From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from huawei.com (huawei.com [45.249.212.191]) by mx.groups.io with SMTP id smtpd.web12.7519.1591710229169825572 for ; Tue, 09 Jun 2020 06:43:49 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: huawei.com, ip: 45.249.212.191, mailfrom: huangming23@huawei.com) Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 9AC1BC1A6E506A7CEC53; Tue, 9 Jun 2020 21:43:44 +0800 (CST) 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:43:34 +0800 From: "Ming Huang" To: , , CC: , , , , , , Subject: [PATCH edk2-platforms v2 2/2] Silicon/Hisilicon/Smbios: Optimize type 9 Date: Tue, 9 Jun 2020 21:41:08 +0800 Message-ID: <1591710068-49992-3-git-send-email-huangming23@huawei.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1591710068-49992-1-git-send-email-huangming23@huawei.com> References: <1591710068-49992-1-git-send-email-huangming23@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.184.68.188] X-CFilter-Loop: Reflected Content-Type: text/plain Break down AddSmbiosType9Entry to three funtions for optimizing Smbios type 9. Signed-off-by: Ming Huang Reviewed-by: Leif Lindholm --- Silicon/Hisilicon/Drivers/Smbios/AddSmbiosType9/AddSmbiosType9.c | 173 +++++++++++--------- 1 file changed, 95 insertions(+), 78 deletions(-) diff --git a/Silicon/Hisilicon/Drivers/Smbios/AddSmbiosType9/AddSmbiosType9.c b/Silicon/Hisilicon/Drivers/Smbios/AddSmbiosType9/AddSmbiosType9.c index 2398c6b..57e049a 100644 --- a/Silicon/Hisilicon/Drivers/Smbios/AddSmbiosType9/AddSmbiosType9.c +++ b/Silicon/Hisilicon/Drivers/Smbios/AddSmbiosType9/AddSmbiosType9.c @@ -75,38 +75,16 @@ UpdateSmbiosType9Info ( return; } -EFI_STATUS -EFIAPI -AddSmbiosType9Entry ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable +STATIC +VOID +EmptySmbiosType9 ( + EFI_SMBIOS_PROTOCOL *Smbios ) { EFI_STATUS Status; EFI_SMBIOS_TYPE SmbiosType; EFI_SMBIOS_HANDLE SmbiosHandle; - EFI_SMBIOS_PROTOCOL *Smbios; EFI_SMBIOS_TABLE_HEADER *Record; - SMBIOS_TABLE_TYPE9 *Type9Record; - SMBIOS_TABLE_TYPE9 *SmbiosRecord = NULL; - CHAR8 *OptionalStrStart; - - UINT8 SmbiosAddType9Number; - UINT8 Index; - - CHAR16 *SlotDesignation = NULL; - UINTN SlotDesignationStrLen; - - Status = gBS->LocateProtocol ( - &gEfiSmbiosProtocolGuid, - NULL, - (VOID **) &Smbios - ); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "[%a]:[%dL] LocateProtocol Failed. Status : %r\n", - __FUNCTION__, __LINE__, Status)); - return Status; - } do { SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; @@ -122,76 +100,115 @@ AddSmbiosType9Entry ( } } while (SmbiosHandle != SMBIOS_HANDLE_PI_RESERVED); - SmbiosAddType9Number = OemGetPcieSlotNumber (); + return; +} - for (Index = 0; Index < SmbiosAddType9Number; Index++) { - if (gPcieSlotInfo[Index].Hdr.Type != EFI_SMBIOS_TYPE_SYSTEM_SLOTS) { - continue; - } +STATIC +EFI_STATUS +AddSmbiosType9Record ( + EFI_SMBIOS_PROTOCOL *Smbios, + SMBIOS_TABLE_TYPE9 *Type9Record + ) +{ + EFI_STATUS Status; + EFI_SMBIOS_HANDLE SmbiosHandle; + SMBIOS_TABLE_TYPE9 *SmbiosRecord; + CHAR8 *OptionalStrStart; + CHAR16 SlotDesignation[SMBIOS_STRING_MAX_LENGTH]; + UINTN SlotStrLen; + + SlotStrLen = UnicodeSPrint ( + SlotDesignation, + SMBIOS_STRING_MAX_LENGTH * 2, + L"PCIE Slot%d", + Type9Record->SlotID); + + // + // Two zeros following the last string. + // + SmbiosRecord = AllocateZeroPool (sizeof (SMBIOS_TABLE_TYPE9) + SlotStrLen + 1 + 1); + if (SmbiosRecord == NULL) { + DEBUG ((DEBUG_ERROR, "AllocateZeroPool Failed for SmbiosRecord.\n")); + return EFI_OUT_OF_RESOURCES; + } - Type9Record = &gPcieSlotInfo[Index]; + (VOID)CopyMem (SmbiosRecord, Type9Record, sizeof (SMBIOS_TABLE_TYPE9)); + SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE9); + OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1); + (VOID)UnicodeStrToAsciiStr (SlotDesignation, OptionalStrStart); - UpdateSmbiosType9Info (Type9Record); - SlotDesignation = AllocateZeroPool ((sizeof (CHAR16)) * SMBIOS_STRING_MAX_LENGTH); - if (SlotDesignation == NULL) { - Status = EFI_OUT_OF_RESOURCES; - DEBUG ((DEBUG_ERROR, "[%a]:[%dL] AllocateZeroPool Failed. Status : %r\n", - __FUNCTION__, __LINE__, Status)); + // + // Now we have got the full smbios record, call smbios protocol to add this record. + // + SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; + Status = Smbios->Add (Smbios, NULL, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *)SmbiosRecord); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Add Smbios Type09 Failed! %r\n", Status)); + } - goto Exit; - } + FreePool (SmbiosRecord); + return Status; +} - SlotDesignationStrLen = UnicodeSPrint ( - SlotDesignation, - SMBIOS_STRING_MAX_LENGTH - 1, - L"PCIE Slot%d", - Type9Record->SlotID); - - // - // Two zeros following the last string. - // - SmbiosRecord = AllocateZeroPool (sizeof (SMBIOS_TABLE_TYPE9) + SlotDesignationStrLen + 1 + 1); - if (SmbiosRecord == NULL) { - Status = EFI_OUT_OF_RESOURCES; - DEBUG ((DEBUG_ERROR, "[%a]:[%dL] AllocateZeroPool Failed. Status : %r\n", - __FUNCTION__, __LINE__, Status)); +STATIC +VOID +HandleSmbiosType9 ( + EFI_SMBIOS_PROTOCOL *Smbios + ) +{ + EFI_STATUS Status; + SMBIOS_TABLE_TYPE9 *Type9Record; + UINT8 RecordCount; + UINT8 Index; - goto Exit; - } + RecordCount = OemGetPcieSlotNumber (); + if (RecordCount == 0) { + return; + } - (VOID)CopyMem (SmbiosRecord, Type9Record, sizeof (SMBIOS_TABLE_TYPE9)); + EmptySmbiosType9 (Smbios); + Status = EFI_SUCCESS; + for (Index = 0; Index < RecordCount; Index++) { + if (gPcieSlotInfo[Index].Hdr.Type != EFI_SMBIOS_TYPE_SYSTEM_SLOTS) { + continue; + } - SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE9); + Type9Record = &gPcieSlotInfo[Index]; - OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1); - UnicodeStrToAsciiStr (SlotDesignation, OptionalStrStart); + UpdateSmbiosType9Info (Type9Record); - // - // Now we have got the full smbios record, call smbios protocol to add this record. - // - SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; - Status = Smbios->Add (Smbios, NULL, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *)SmbiosRecord); + Status = AddSmbiosType9Record (Smbios, Type9Record); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "[%a]:[%dL] Smbios Type09 Table Log Failed! %r \n", - __FUNCTION__, __LINE__, Status)); - goto Exit; + break; } - - FreePool (SmbiosRecord); - FreePool (SlotDesignation); } - return EFI_SUCCESS; + return; +} -Exit: - if(SmbiosRecord != NULL) { - FreePool (SmbiosRecord); - } +EFI_STATUS +EFIAPI +AddSmbiosType9Entry ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + EFI_SMBIOS_PROTOCOL *Smbios; - if(SlotDesignation != NULL) { - FreePool (SlotDesignation); + Status = gBS->LocateProtocol ( + &gEfiSmbiosProtocolGuid, + NULL, + (VOID **) &Smbios + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "[%a]:[%dL] LocateProtocol Failed. Status : %r\n", + __FUNCTION__, __LINE__, Status)); + return Status; } + HandleSmbiosType9 (Smbios); + return Status; } -- 2.8.1