diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c index e2d779c783..50f79f55a6 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c @@ -2,6 +2,7 @@ Produces Simple Text Input Protocol, Simple Text Input Extended Protocol and Simple Text Output Protocol upon Serial IO Protocol. +Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved.
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -114,7 +115,10 @@ TERMINAL_DEV mTerminalDevTemplate = { TERMINAL_CONSOLE_MODE_DATA mTerminalConsoleModeData[] = { { 80, 25 }, { 80, 50 }, - { 100, 31 }, + { 100, 31 }, // 800 x 600 + { 128, 40 }, // 1024 x 768 + { 160, 42 }, // 1280 x 800 + { 240, 56 }, // 1920 x 1080 // // New modes can be added here. // diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h index 61fbd808ae..66438bec7e 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h @@ -1,6 +1,7 @@ /** @file Header file for Terminal driver. +Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved.
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
Copyright (C) 2016 Silicon Graphics, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -162,6 +163,8 @@ typedef union { #define ROW_OFFSET 2 #define COLUMN_OFFSET 5 #define FW_BACK_OFFSET 2 +#define RESIZE_ROW_OFFSET 4 +#define RESIZE_COLUMN_OFFSET 8 typedef struct { UINT16 Unicode; diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c index 7809869e7d..eb8658c892 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c @@ -1,6 +1,7 @@ /** @file Implementation for EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL protocol. +Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved.
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
Copyright (C) 2016 Silicon Graphics, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -74,6 +75,7 @@ UNICODE_TO_CHAR UnicodeToPcAnsiOrAscii[] = { }; CHAR16 mSetModeString[] = { ESC, '[', '=', '3', 'h', 0 }; +CHAR16 mSetModeStringResize[] = { ESC, '[', '8', ';', '0', '0', '0', ';', '0', '0', '0', 't', '0', 0 }; CHAR16 mSetAttributeString[] = { ESC, '[', '0', 'm', ESC, '[', '4', '0', 'm', ESC, '[', '4', '0', 'm', 0 }; CHAR16 mClearScreenString[] = { ESC, '[', '2', 'J', 0 }; CHAR16 mSetCursorPositionString[] = { ESC, '[', '0', '0', ';', '0', '0', 'H', 0 }; @@ -453,7 +455,6 @@ TerminalConOutQueryMode ( Implements EFI_SIMPLE_TEXT_OUT.SetMode(). Set the terminal to a specified display mode. - In this driver, we only support mode 0. @param This Indicates the calling context. @param ModeNumber The text mode to set. @@ -473,9 +474,12 @@ TerminalConOutSetMode ( { EFI_STATUS Status; TERMINAL_DEV *TerminalDevice; + CHAR16 *String; + UINTN Columns; + UINTN Rows; // - // get Terminal device data structure pointer. + // Get Terminal device data structure pointer. // TerminalDevice = TERMINAL_CON_OUT_DEV_FROM_THIS (This); @@ -483,6 +487,25 @@ TerminalConOutSetMode ( return EFI_UNSUPPORTED; } + // + // Configure terminal string for the text mode to set. + // + if (ModeNumber == 0) { + String = mSetModeString; + } else { + Columns = TerminalDevice->TerminalConsoleModeData[ModeNumber].Columns; + Rows = TerminalDevice->TerminalConsoleModeData[ModeNumber].Rows; + + mSetModeStringResize[RESIZE_ROW_OFFSET + 0] = (CHAR16)('0' + (Rows / 100)); + mSetModeStringResize[RESIZE_ROW_OFFSET + 1] = (CHAR16)('0' + ((Rows - ((Rows / 100) * 100)) / 10)); + mSetModeStringResize[RESIZE_ROW_OFFSET + 2] = (CHAR16)('0' + (Rows % 10)); + mSetModeStringResize[RESIZE_COLUMN_OFFSET + 0] = (CHAR16)('0' + (Columns / 100)); + mSetModeStringResize[RESIZE_COLUMN_OFFSET + 1] = (CHAR16)('0' + ((Columns - ((Columns / 100) * 100)) / 10)); + mSetModeStringResize[RESIZE_COLUMN_OFFSET + 2] = (CHAR16)('0' + (Columns % 10)); + + String = mSetModeStringResize; + } + // // Set the current mode // @@ -491,7 +514,7 @@ TerminalConOutSetMode ( This->ClearScreen (This); TerminalDevice->OutputEscChar = TRUE; - Status = This->OutputString (This, mSetModeString); + Status = This->OutputString (This, String); TerminalDevice->OutputEscChar = FALSE; if (EFI_ERROR (Status)) {