/** @file Shell command `hob` to list HOBs. Copyright (c) 2017, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include /** List HOBs. @param[in] Shell shell instance @param[in] Argc number of command line arguments @param[in] Argv command line arguments @retval EFI_SUCCESS **/ STATIC EFI_STATUS EFIAPI ShellCommandHobFunc ( IN SHELL *Shell, IN UINTN Argc, IN CHAR16 *Argv[] ); CONST SHELL_COMMAND ShellCommandHob = { L"hob", L"List HOBs", &ShellCommandHobFunc }; /** Get string description of HOB type. @param[in] Type Numeric HOB type @retval Type string **/ STATIC CONST CHAR16 * EFIAPI HobTypeToStr ( IN UINTN Type ) { switch (Type) { case EFI_HOB_TYPE_HANDOFF: return L"HANDOFF"; case EFI_HOB_TYPE_MEMORY_ALLOCATION: return L"MEMORY_ALLOCATION"; case EFI_HOB_TYPE_RESOURCE_DESCRIPTOR: return L"RESOURCE_DESCRIPTOR"; case EFI_HOB_TYPE_GUID_EXTENSION: return L"GUID_EXTENSION"; case EFI_HOB_TYPE_FV: return L"FV"; case EFI_HOB_TYPE_CPU: return L"CPU"; case EFI_HOB_TYPE_MEMORY_POOL: return L"MEMORY_POOL"; case EFI_HOB_TYPE_FV2: return L"FV2"; case EFI_HOB_TYPE_LOAD_PEIM_UNUSED: return L"LOAD_PEIM_UNUSED"; case EFI_HOB_TYPE_UEFI_CAPSULE: return L"UEFI_CAPSULE"; case EFI_HOB_TYPE_UNUSED: return L"UNUSED"; default: return L"Unknown"; } } /** List HOBs. @param[in] HobList hob list pointer @retval EFI_SUCCESS **/ STATIC EFI_STATUS EFIAPI ListHobs ( IN VOID *HobList ) { EFI_PEI_HOB_POINTERS Hob; UINTN Count; Count = 0; Hob.Raw = HobList; while (!END_OF_HOB_LIST (Hob.Raw)) { ShellPrint (L"%3d: 0x%08p 0x%04x %s", Count, Hob.Raw, Hob.Header->HobLength, HobTypeToStr (Hob.Header->HobType)); // Display HOB type-specific information switch (Hob.Header->HobType) { case EFI_HOB_TYPE_GUID_EXTENSION: ShellPrint (L" (%g)\n", & (Hob.Guid->Name)); break; default: ShellPrint (L"\n"); break; } Hob.Raw = GET_NEXT_HOB (Hob); Count++; } return EFI_SUCCESS; } /** List HOBs. @param[in] Shell shell instance @param[in] Argc number of command line arguments @param[in] Argv command line arguments @retval EFI_SUCCESS **/ STATIC EFI_STATUS EFIAPI ShellCommandHobFunc ( IN SHELL *Shell, IN UINTN Argc, IN CHAR16 *Argv[] ) { VOID *HobList; LOADER_FSP_INFO *FspInfo; HobList = GetHobList(); ASSERT (HobList != NULL); // Display Loader HOBs ShellPrint (L"Loader HOBs\n"); ShellPrint (L"========================================\n"); ListHobs (HobList); // Display FSP HOBs FspInfo = GetNextGuidHob (&gLoaderFspInfoGuid, HobList); ASSERT (FspInfo != NULL); FspInfo = GET_GUID_HOB_DATA (FspInfo); ShellPrint (L"\nFSP HOBs\n"); ShellPrint (L"========================================\n"); ListHobs ((VOID*)(UINTN)FspInfo->FspHobList); return EFI_SUCCESS; }