ShellPkg/UefiShellDriver1: Flatten some functions

Flatten the following functions to make them easier to read:
- TraverseHandleDatabase()
- GetDeviceHandleInfo()
- DoDecodeByProtocol()

No functional change.

Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
This commit is contained in:
Pierre Gondois 2026-04-08 15:28:31 +02:00 committed by mergify[bot]
parent 1ab251c770
commit c14647a483
3 changed files with 121 additions and 106 deletions

View file

@ -91,24 +91,25 @@ GetDeviceHandleInfo (
// }
Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS (TheHandle, Devices, &HandleBuffer);
if (!EFI_ERROR (Status) && (Devices != NULL) && (HandleBuffer != NULL)) {
for (Count = 0; Count < *Devices; Count++) {
if (!EFI_ERROR (gBS->OpenProtocol (HandleBuffer[Count], &gEfiDriverConfigurationProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
*Cfg = TRUE;
}
if (!EFI_ERROR (gBS->OpenProtocol (HandleBuffer[Count], &gEfiDriverDiagnosticsProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
*Diag = TRUE;
}
if (!EFI_ERROR (gBS->OpenProtocol (HandleBuffer[Count], &gEfiDriverDiagnostics2ProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
*Diag = TRUE;
}
}
SHELL_FREE_NON_NULL (HandleBuffer);
if (EFI_ERROR (Status) || (Devices == NULL) || (HandleBuffer == NULL)) {
return Status;
}
for (Count = 0; Count < *Devices; Count++) {
if (!EFI_ERROR (gBS->OpenProtocol (HandleBuffer[Count], &gEfiDriverConfigurationProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
*Cfg = TRUE;
}
if (!EFI_ERROR (gBS->OpenProtocol (HandleBuffer[Count], &gEfiDriverDiagnosticsProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
*Diag = TRUE;
}
if (!EFI_ERROR (gBS->OpenProtocol (HandleBuffer[Count], &gEfiDriverDiagnostics2ProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {
*Diag = TRUE;
}
}
SHELL_FREE_NON_NULL (HandleBuffer);
return (Status);
}

View file

@ -994,24 +994,27 @@ DoDecodeByProtocol (
FreePool (Guids);
}
} else {
if (ConvertStrToGuid (Protocol, &Guid) == EFI_SUCCESS) {
Name = GetStringNameFromGuid (&Guid, Language);
if (Name != NULL) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_DH_OUTPUT_DECODE), gShellDriver1HiiHandle, Name, &Guid);
} else {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_DH_NO_GUID_FOUND), gShellDriver1HiiHandle, &Guid);
}
SHELL_FREE_NON_NULL (Name);
return SHELL_SUCCESS;
}
if (ConvertStrToGuid (Protocol, &Guid) == EFI_SUCCESS) {
Name = GetStringNameFromGuid (&Guid, Language);
if (Name != NULL) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_DH_OUTPUT_DECODE), gShellDriver1HiiHandle, Name, &Guid);
} else {
Status = GetGuidFromStringName (Protocol, Language, &Guids);
if (Status == EFI_SUCCESS) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_DH_OUTPUT_DECODE), gShellDriver1HiiHandle, Protocol, Guids);
} else {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_DH_NO_NAME_FOUND), gShellDriver1HiiHandle, Protocol);
}
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_DH_NO_GUID_FOUND), gShellDriver1HiiHandle, &Guid);
}
SHELL_FREE_NON_NULL (Name);
return SHELL_SUCCESS;
}
Status = GetGuidFromStringName (Protocol, Language, &Guids);
if (Status == EFI_SUCCESS) {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_DH_OUTPUT_DECODE), gShellDriver1HiiHandle, Protocol, Guids);
} else {
ShellPrintHiiDefaultEx (STRING_TOKEN (STR_DH_NO_NAME_FOUND), gShellDriver1HiiHandle, Protocol);
}
return SHELL_SUCCESS;

View file

@ -58,89 +58,100 @@ TraverseHandleDatabase (
&ArrayCount
);
ASSERT_EFI_ERROR (Status);
if (!EFI_ERROR (Status)) {
for (ProtocolIndex = 0; ProtocolIndex < ArrayCount; ProtocolIndex++) {
//
// print out the human readable name for this one.
//
TempString = GetStringNameFromGuid (ProtocolGuidArray[ProtocolIndex], NULL);
if (TempString == NULL) {
continue;
if (EFI_ERROR (Status)) {
return Status;
}
for (ProtocolIndex = 0; ProtocolIndex < ArrayCount; ProtocolIndex++) {
//
// print out the human readable name for this one.
//
TempString = GetStringNameFromGuid (ProtocolGuidArray[ProtocolIndex], NULL);
if (TempString == NULL) {
continue;
}
ShellPrintDefaultEx (L"%H%s%N\r\n", TempString);
FreePool (TempString);
//
// Retrieve the list of agents that have opened each protocol
//
Status = gBS->OpenProtocolInformation (
TheHandle,
ProtocolGuidArray[ProtocolIndex],
&OpenInfo,
&OpenInfoCount
);
ASSERT_EFI_ERROR (Status);
if (EFI_ERROR (Status)) {
continue;
}
for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {
switch (OpenInfo[OpenInfoIndex].Attributes) {
case EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL:
OpenTypeString = StringHandProt;
break;
case EFI_OPEN_PROTOCOL_GET_PROTOCOL:
OpenTypeString = StringGetProt;
break;
case EFI_OPEN_PROTOCOL_TEST_PROTOCOL:
OpenTypeString = StringTestProt;
break;
case EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER:
OpenTypeString = StringChild;
break;
case EFI_OPEN_PROTOCOL_BY_DRIVER:
OpenTypeString = StringDriver;
break;
case EFI_OPEN_PROTOCOL_EXCLUSIVE:
OpenTypeString = StringExclusive;
break;
case EFI_OPEN_PROTOCOL_BY_DRIVER|EFI_OPEN_PROTOCOL_EXCLUSIVE:
OpenTypeString = StringDriverEx;
break;
default:
OpenTypeString = StringUnknown;
break;
}
ShellPrintDefaultEx (L"%H%s%N\r\n", TempString);
FreePool (TempString);
//
// Retrieve the list of agents that have opened each protocol
//
Status = gBS->OpenProtocolInformation (
TheHandle,
ProtocolGuidArray[ProtocolIndex],
&OpenInfo,
&OpenInfoCount
);
ASSERT_EFI_ERROR (Status);
if (!EFI_ERROR (Status)) {
for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {
switch (OpenInfo[OpenInfoIndex].Attributes) {
case EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL: OpenTypeString = StringHandProt;
break;
case EFI_OPEN_PROTOCOL_GET_PROTOCOL: OpenTypeString = StringGetProt;
break;
case EFI_OPEN_PROTOCOL_TEST_PROTOCOL: OpenTypeString = StringTestProt;
break;
case EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER: OpenTypeString = StringChild;
break;
case EFI_OPEN_PROTOCOL_BY_DRIVER: OpenTypeString = StringDriver;
break;
case EFI_OPEN_PROTOCOL_EXCLUSIVE: OpenTypeString = StringExclusive;
break;
case EFI_OPEN_PROTOCOL_BY_DRIVER|EFI_OPEN_PROTOCOL_EXCLUSIVE:
OpenTypeString = StringDriverEx;
break;
default: OpenTypeString = StringUnknown;
break;
}
HandleIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].AgentHandle);
if (HandleIndex == 0) {
FreePool (OpenInfo);
FreePool (ProtocolGuidArray);
return EFI_OUT_OF_RESOURCES;
}
Name = GetStringNameFromHandle (OpenInfo[OpenInfoIndex].AgentHandle, NULL);
ControllerIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].ControllerHandle);
if ((ControllerIndex != 0) && (Name != NULL)) {
ShellPrintHiiDefaultEx (
STRING_TOKEN (STR_OPENINFO_LINE),
gShellDriver1HiiHandle,
HandleIndex,
ControllerIndex,
OpenInfo[OpenInfoIndex].OpenCount,
OpenTypeString,
Name
);
} else {
ShellPrintHiiDefaultEx (
STRING_TOKEN (STR_OPENINFO_MIN_LINE),
gShellDriver1HiiHandle,
HandleIndex,
OpenInfo[OpenInfoIndex].OpenCount,
OpenTypeString,
Name ? Name : L""
);
}
}
HandleIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].AgentHandle);
if (HandleIndex == 0) {
FreePool (OpenInfo);
FreePool (ProtocolGuidArray);
return EFI_OUT_OF_RESOURCES;
}
Name = GetStringNameFromHandle (OpenInfo[OpenInfoIndex].AgentHandle, NULL);
ControllerIndex = ConvertHandleToHandleIndex (OpenInfo[OpenInfoIndex].ControllerHandle);
if ((ControllerIndex != 0) && (Name != NULL)) {
ShellPrintHiiDefaultEx (
STRING_TOKEN (STR_OPENINFO_LINE),
gShellDriver1HiiHandle,
HandleIndex,
ControllerIndex,
OpenInfo[OpenInfoIndex].OpenCount,
OpenTypeString,
Name
);
} else {
ShellPrintHiiDefaultEx (
STRING_TOKEN (STR_OPENINFO_MIN_LINE),
gShellDriver1HiiHandle,
HandleIndex,
OpenInfo[OpenInfoIndex].OpenCount,
OpenTypeString,
Name ? Name : L""
);
}
}
FreePool (ProtocolGuidArray);
FreePool (OpenInfo);
}
FreePool (ProtocolGuidArray);
return Status;
}