设置分辨率会用到以下Protocol:
EFI_STATUS
EFIAPI
MainEntryPoint (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable )
{
EFI_STATUS Status;
UINT32 i;
UINTN SizeOfInfo;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *pModeInfo;
EFI_GRAPHICS_OUTPUT_PROTOCOL *gGOP;
//获取Protocol找到实例
Status = gBS->LocateProtocol (
&gEfiGraphicsOutputProtocolGuid,
NULL,
(VOID **) &gGOP);
if (EFI_ERROR(Status)) {
return Status;
}
//清屏
gST->ConOut->ClearScreen( gST->ConOut);
for(i=0;i<gGOP->Mode->MaxMode;i++)
{
//获取图形设备可使用的图形模式信息
Status = gGOP->QueryMode(gGOP,i,&SizeOfInfo,&pModeInfo);
if((EFI_SUCCESS == Status) && SizeOfInfo)
{
//自定义分辨率
if((1366 == pModeInfo->HorizontalResolution) &&
(768 == pModeInfo->VerticalResolution))
{
Status = gGOP->SetMode(gGOP,i);
return Status;
}
}
}
return EFI_SUCCESS;