UINTN MaxMode;\r
EFI_STATUS Status;\r
CONSOLE_OUT_MODE ModeInfo;\r
+ CONSOLE_OUT_MODE MaxModeInfo;\r
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;\r
\r
PreferMode = 0xFF;\r
TextOut = &Private->TextOut;\r
MaxMode = (UINTN) (TextOut->Mode->MaxMode);\r
\r
- ModeInfo.Column = PcdGet32 (PcdConOutColumn);\r
- ModeInfo.Row = PcdGet32 (PcdConOutRow);\r
+ MaxModeInfo.Column = 0;\r
+ MaxModeInfo.Row = 0; \r
+ ModeInfo.Column = PcdGet32 (PcdConOutColumn);\r
+ ModeInfo.Row = PcdGet32 (PcdConOutRow);\r
\r
//\r
// To find the prefer mode and basic mode from Text Out mode list\r
for (Mode = 0; Mode < MaxMode; Mode++) {\r
Status = TextOut->QueryMode (TextOut, Mode, &Col, &Row);\r
if (!EFI_ERROR(Status)) {\r
- if (Col == ModeInfo.Column && Row == ModeInfo.Row) {\r
- PreferMode = Mode;\r
+ if ((ModeInfo.Column != 0) && (ModeInfo.Row != 0)) {\r
+ //\r
+ // Use user defined column and row\r
+ //\r
+ if (Col == ModeInfo.Column && Row == ModeInfo.Row) {\r
+ PreferMode = Mode;\r
+ }\r
+ } else {\r
+ //\r
+ // If user sets PcdConOutColumn or PcdConOutRow to 0,\r
+ // find and set the highest text mode.\r
+ //\r
+ if ((Col >= MaxModeInfo.Column) && (Row >= MaxModeInfo.Row)) {\r
+ MaxModeInfo.Column = Col;\r
+ MaxModeInfo.Row = Row;\r
+ PreferMode = Mode;\r
+ }\r
}\r
if (Col == 80 && Row == 25) {\r
BaseMode = Mode;\r