Break down AddSmbiosType9Entry to three funtions for optimizing
Smbios type 9.
Signed-off-by: Ming Huang <huangming23@huawei.com>
---
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
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#60879): https://edk2.groups.io/g/devel/message/60879
Mute This Topic: https://groups.io/mt/74755015/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
On Mon, Jun 08, 2020 at 22:09:57 +0800, Ming Huang wrote:
> Break down AddSmbiosType9Entry to three funtions for optimizing
> Smbios type 9.
>
> Signed-off-by: Ming Huang <huangming23@huawei.com>
Reviewed-by: Leif Lindholm <leif@nuviainc.com>
> ---
> 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
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#60903): https://edk2.groups.io/g/devel/message/60903
Mute This Topic: https://groups.io/mt/74755015/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2026 Red Hat, Inc.