};\r
\r
TERMINAL_CONSOLE_MODE_DATA mTerminalConsoleModeData[] = {\r
+ {80, 25},\r
+ {80, 50},\r
{100, 31},\r
//\r
// New modes can be added here.\r
It returns information for available text modes that the terminal can support.\r
\r
@param[out] TextModeCount The total number of text modes that terminal console supports.\r
- @param[out] TextModeData The buffer to the text modes column and row information.\r
- Caller is responsible to free it when it's non-NULL.\r
\r
- @retval EFI_SUCCESS The supporting mode information is returned.\r
- @retval EFI_INVALID_PARAMETER The parameters are invalid.\r
+ @return The buffer to the text modes column and row information.\r
+ Caller is responsible to free it when it's non-NULL.\r
\r
**/\r
-EFI_STATUS\r
+TERMINAL_CONSOLE_MODE_DATA *\r
InitializeTerminalConsoleTextMode (\r
- OUT UINTN *TextModeCount,\r
- OUT TERMINAL_CONSOLE_MODE_DATA **TextModeData\r
- )\r
+ OUT INT32 *TextModeCount\r
+)\r
{\r
- UINTN Index;\r
- UINTN Count;\r
- TERMINAL_CONSOLE_MODE_DATA *ModeBuffer;\r
- TERMINAL_CONSOLE_MODE_DATA *NewModeBuffer;\r
- UINTN ValidCount;\r
- UINTN ValidIndex;\r
- \r
- if ((TextModeCount == NULL) || (TextModeData == NULL)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- \r
- Count = sizeof (mTerminalConsoleModeData) / sizeof (TERMINAL_CONSOLE_MODE_DATA);\r
- \r
- //\r
- // Get defined mode buffer pointer.\r
- //\r
- ModeBuffer = mTerminalConsoleModeData;\r
- \r
+ TERMINAL_CONSOLE_MODE_DATA *TextModeData;\r
+\r
+ ASSERT (TextModeCount != NULL);\r
+\r
//\r
// Here we make sure that the final mode exposed does not include the duplicated modes,\r
// and does not include the invalid modes which exceed the max column and row.\r
// Reserve 2 modes for 80x25, 80x50 of terminal console.\r
//\r
- NewModeBuffer = AllocateZeroPool (sizeof (TERMINAL_CONSOLE_MODE_DATA) * (Count + 2));\r
- ASSERT (NewModeBuffer != NULL);\r
-\r
- //\r
- // Mode 0 and mode 1 is for 80x25, 80x50 according to UEFI spec.\r
- //\r
- ValidCount = 0; \r
-\r
- NewModeBuffer[ValidCount].Columns = 80;\r
- NewModeBuffer[ValidCount].Rows = 25;\r
- ValidCount++;\r
-\r
- NewModeBuffer[ValidCount].Columns = 80;\r
- NewModeBuffer[ValidCount].Rows = 50;\r
- ValidCount++;\r
- \r
- //\r
- // Start from mode 2 to put the valid mode other than 80x25 and 80x50 in the output mode buffer.\r
- //\r
- for (Index = 0; Index < Count; Index++) {\r
- if ((ModeBuffer[Index].Columns == 0) || (ModeBuffer[Index].Rows == 0)) {\r
- //\r
- // Skip the pre-defined mode which is invalid.\r
- //\r
- continue;\r
- }\r
- for (ValidIndex = 0; ValidIndex < ValidCount; ValidIndex++) {\r
- if ((ModeBuffer[Index].Columns == NewModeBuffer[ValidIndex].Columns) &&\r
- (ModeBuffer[Index].Rows == NewModeBuffer[ValidIndex].Rows)) {\r
- //\r
- // Skip the duplicated mode.\r
- //\r
- break;\r
- }\r
- }\r
- if (ValidIndex == ValidCount) {\r
- NewModeBuffer[ValidCount].Columns = ModeBuffer[Index].Columns;\r
- NewModeBuffer[ValidCount].Rows = ModeBuffer[Index].Rows;\r
- ValidCount++;\r
- }\r
+ TextModeData = AllocateCopyPool (sizeof (mTerminalConsoleModeData), mTerminalConsoleModeData);\r
+ if (TextModeData == NULL) {\r
+ return NULL;\r
}\r
- \r
+ *TextModeCount = ARRAY_SIZE (mTerminalConsoleModeData);\r
+\r
DEBUG_CODE (\r
- for (Index = 0; Index < ValidCount; Index++) {\r
- DEBUG ((EFI_D_INFO, "Terminal - Mode %d, Column = %d, Row = %d\n", \r
- Index, NewModeBuffer[Index].Columns, NewModeBuffer[Index].Rows)); \r
+ INT32 Index;\r
+ for (Index = 0; Index < *TextModeCount; Index++) {\r
+ DEBUG ((DEBUG_INFO, "Terminal - Mode %d, Column = %d, Row = %d\n",\r
+ Index, TextModeData[Index].Columns, TextModeData[Index].Rows));\r
}\r
);\r
- \r
- //\r
- // Return valid mode count and mode information buffer.\r
- //\r
- *TextModeCount = ValidCount;\r
- *TextModeData = NewModeBuffer;\r
- return EFI_SUCCESS;\r
+ return TextModeData;\r
}\r
\r
/**\r
BOOLEAN SimTxtInInstalled;\r
BOOLEAN SimTxtOutInstalled;\r
BOOLEAN FirstEnter;\r
- UINTN ModeCount;\r
\r
TerminalDevice = NULL;\r
ConInSelected = FALSE;\r
);\r
SimpleTextOutput->Mode = &TerminalDevice->SimpleTextOutputMode;\r
\r
- Status = InitializeTerminalConsoleTextMode (&ModeCount, &TerminalDevice->TerminalConsoleModeData);\r
- if (EFI_ERROR (Status)) {\r
+ TerminalDevice->TerminalConsoleModeData = InitializeTerminalConsoleTextMode (\r
+ &SimpleTextOutput->Mode->MaxMode\r
+ );\r
+ if (TerminalDevice->TerminalConsoleModeData == NULL) {\r
goto ReportError;\r
}\r
- TerminalDevice->SimpleTextOutputMode.MaxMode = (INT32) ModeCount;\r
- \r
+\r
//\r
// For terminal devices, cursor is always visible\r
//\r