+EFI_STATUS\r
+CheckModeSupported (\r
+ EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput,\r
+ IN UINT32 HorizontalResolution,\r
+ IN UINT32 VerticalResolution,\r
+ OUT UINT32 *CurrentModeNumber\r
+ )\r
+{\r
+ UINT32 ModeNumber;\r
+ EFI_STATUS Status;\r
+ UINTN SizeOfInfo; \r
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;\r
+ \r
+ Status = EFI_SUCCESS;\r
+ \r
+ for (ModeNumber = 0; ModeNumber < GraphicsOutput->Mode->MaxMode; ModeNumber++) {\r
+ Status = GraphicsOutput->QueryMode (\r
+ GraphicsOutput,\r
+ ModeNumber,\r
+ &SizeOfInfo,\r
+ &Info\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ if ((Info->HorizontalResolution == HorizontalResolution) &&\r
+ (Info->VerticalResolution == VerticalResolution)) {\r
+ Status = GraphicsOutput->SetMode (GraphicsOutput, ModeNumber);\r
+ if (!EFI_ERROR (Status)) {\r
+ gBS->FreePool (Info);\r
+ break;\r
+ }\r
+ }\r
+ gBS->FreePool (Info);\r
+ }\r
+ }\r
+ \r
+ if (ModeNumber == GraphicsOutput->Mode->MaxMode) {\r
+ Status = EFI_UNSUPPORTED;\r
+ }\r
+ \r
+ *CurrentModeNumber = ModeNumber;\r
+ return Status; \r
+}\r
+\r