EFI_STATUS EblDumpFdt ( IN UINTN Argc, IN CHAR8 **Argv ) { EFI_STATUS Status; VOID *FdtBlob; UINTN Ret; // If no FDT file is passed to the argument then get the one from the platform if (Argc < 2) { Status = EfiGetSystemConfigurationTable (&gFdtTableGuid, &FdtBlob); if (EFI_ERROR (Status)) { Print (L"ERROR: Did not find the Fdt Blob.\n"); return Status; } } else { return EFI_NOT_FOUND; } Ret = fdt_check_header (FdtBlob); if (Ret != 0) { Print (L"ERROR: Device Tree header not valid (err:%d)\n", Ret); return EFI_INVALID_PARAMETER; } DumpFdt (FdtBlob); return EFI_SUCCESS; }
/** This is the shell command "dumpfdt" handler function. This function handles the command when it is invoked in the shell. @param[in] This The instance of the EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL. @param[in] SystemTable The pointer to the UEFI system table. @param[in] ShellParameters The parameters associated with the command. @param[in] Shell The instance of the shell protocol used in the context of processing this command. @return SHELL_SUCCESS The operation was successful. @return SHELL_ABORTED Operation aborted due to internal error. @return SHELL_NOT_FOUND Failed to locate the Device Tree into the EFI Configuration Table @return SHELL_OUT_OF_RESOURCES A memory allocation failed. **/ SHELL_STATUS EFIAPI ShellDynCmdDumpFdtHandler ( IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This, IN EFI_SYSTEM_TABLE *SystemTable, IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters, IN EFI_SHELL_PROTOCOL *Shell ) { SHELL_STATUS ShellStatus; EFI_STATUS Status; VOID *FdtBlob; ShellStatus = SHELL_SUCCESS; // // Install the Shell and Shell Parameters Protocols on the driver // image. This is necessary for the initialisation of the Shell // Library to succeed in the next step. // Status = gBS->InstallMultipleProtocolInterfaces ( &gImageHandle, &gEfiShellProtocolGuid, Shell, &gEfiShellParametersProtocolGuid, ShellParameters, NULL ); if (EFI_ERROR (Status)) { return SHELL_ABORTED; } // // Initialise the Shell Library as we are going to use it. // Assert that the return code is EFI_SUCCESS as it should. // To anticipate any change is the codes returned by // ShellInitialize(), leave in case of error. // Status = ShellInitialize (); if (EFI_ERROR (Status)) { ASSERT_EFI_ERROR (Status); return SHELL_ABORTED; } Status = EfiGetSystemConfigurationTable (&gFdtTableGuid, &FdtBlob); if (EFI_ERROR (Status)) { Print (L"ERROR: Did not find the Fdt Blob.\n"); return EfiCodeToShellCode (Status); } DumpFdt (FdtBlob); gBS->UninstallMultipleProtocolInterfaces ( gImageHandle, &gEfiShellProtocolGuid, Shell, &gEfiShellParametersProtocolGuid, ShellParameters, NULL ); return ShellStatus; }