static int command_nvram(int argc, char *argv[]) { CHAR16 var[128]; CHAR16 *data; EFI_STATUS status; EFI_GUID varguid = { 0,0,0,{0,0,0,0,0,0,0,0} }; unsigned int varsz; unsigned int datasz; SIMPLE_TEXT_OUTPUT_INTERFACE *conout; int i; conout = ST->ConOut; /* Initiate the search */ status = RS->GetNextVariableName(&varsz, NULL, NULL); for (; status != EFI_NOT_FOUND; ) { status = RS->GetNextVariableName(&varsz, var, &varguid); //if (EFI_ERROR(status)) //break; conout->OutputString(conout, var); printf("="); datasz = 0; status = RS->GetVariable(var, &varguid, NULL, &datasz, NULL); /* XXX: check status */ data = malloc(datasz); status = RS->GetVariable(var, &varguid, NULL, &datasz, data); if (EFI_ERROR(status)) printf("<error retrieving variable>"); else { for (i = 0; i < datasz; i++) { if (isalnum(data[i]) || isspace(data[i])) printf("%c", data[i]); else printf("\\x%02x", data[i]); } } /* XXX */ pager_output("\n"); free(data); } return (CMD_OK); }
/** * efi_main - The entry point for the EFI application * @image: firmware-allocated handle that identifies the image * @SystemTable: EFI system table */ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *systemTable) { EFI_BOOT_SERVICES *bs = systemTable->BootServices; EFI_GRAPHICS_OUTPUT_PROTOCOL *graphicsProtocol; SIMPLE_TEXT_OUTPUT_INTERFACE *conOut = systemTable->ConOut; EFI_EVENT event = systemTable->ConIn->WaitForKey; UINTN index; int i, modeCount; EFI_STATUS status = bs->LocateProtocol(&GraphicsOutputProtocolGUID, NULL, (void**)&graphicsProtocol); if (EFI_ERROR(status) || graphicsProtocol == NULL) { conOut->OutputString(conOut, L"Failed to init gfx!\r\n"); return status; } //Switch to current mode so gfx is started. status = graphicsProtocol->SetMode(graphicsProtocol, graphicsProtocol->Mode->Mode); if (EFI_ERROR(status)) { conOut->OutputString(conOut, L"Failed to set default mode!\r\n"); return status; } conOut->OutputString(conOut, L"Current mode: "); printInt(conOut, graphicsProtocol->Mode->Mode); conOut->OutputString(conOut, L"\r\n"); modeCount = graphicsProtocol->Mode->MaxMode; for (i = 0; i < modeCount; i++) { conOut->OutputString(conOut, L"\r\n"); printInt(conOut, i); conOut->OutputString(conOut, L": "); EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info; UINTN SizeOfInfo; status = graphicsProtocol->QueryMode(graphicsProtocol, i, &SizeOfInfo, &info); if (EFI_ERROR(status)) { conOut->OutputString(conOut, L" Failure to query mode: "); printInt(conOut, status); continue; } printInt(conOut, info->HorizontalResolution); conOut->OutputString(conOut, L" x "); printInt(conOut, info->VerticalResolution); switch(info->PixelFormat) { case PixelRedGreenBlueReserved8BitPerColor: conOut->OutputString(conOut, L" RGB(R)"); break; case PixelBlueGreenRedReserved8BitPerColor: conOut->OutputString(conOut, L" BGR(R)"); break; case PixelBitMask: conOut->OutputString(conOut, L" BitMask "); printInt(conOut, info->PixelInformation.RedMask); conOut->OutputString(conOut, L"R "); printInt(conOut, info->PixelInformation.GreenMask); conOut->OutputString(conOut, L"G "); printInt(conOut, info->PixelInformation.BlueMask); conOut->OutputString(conOut, L"B "); printInt(conOut, info->PixelInformation.ReservedMask); conOut->OutputString(conOut, L"Reserved "); break; case PixelBltOnly: conOut->OutputString(conOut, L" (blt only)"); break; default: conOut->OutputString(conOut, L" (Invalid pixel format)"); break; } conOut->OutputString(conOut, L" Pixel per scanline: "); printInt(conOut, info->PixelsPerScanLine); } bs->WaitForEvent(1, &event, &index); return EFI_SUCCESS; }