mirror of https://github.com/acidanthera/audk.git
1. Sync the tracker for supporting the ModeNumber larger than 2.
2. Fixed one bug in SetMode(), Cursor should not be enabled with mandatory. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4594 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
0ca3bcbc90
commit
7347d5d6e6
|
@ -2152,12 +2152,20 @@ Returns:
|
|||
Mode = 0;
|
||||
Index = 0;
|
||||
while (Mode < MaxMode) {
|
||||
TextOut->QueryMode (
|
||||
TextOut,
|
||||
Mode,
|
||||
&Private->TextOutQueryData[Mode].Columns,
|
||||
&Private->TextOutQueryData[Mode].Rows
|
||||
);
|
||||
Status = TextOut->QueryMode (
|
||||
TextOut,
|
||||
Mode,
|
||||
&Private->TextOutQueryData[Mode].Columns,
|
||||
&Private->TextOutQueryData[Mode].Rows
|
||||
);
|
||||
//
|
||||
// If mode 1 (80x50) is not supported, make sure mode 1 in TextOutQueryData
|
||||
// is clear to 0x0.
|
||||
//
|
||||
if ((EFI_ERROR(Status)) && (Mode == 1)) {
|
||||
Private->TextOutQueryData[Mode].Columns = 0;
|
||||
Private->TextOutQueryData[Mode].Rows = 0;
|
||||
}
|
||||
Private->TextOutModeMap[Index] = Mode;
|
||||
Mode++;
|
||||
Index += Private->TextOutListCount;
|
||||
|
@ -2166,6 +2174,24 @@ Returns:
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Reconstruct TextOutModeMap to get intersection of modes
|
||||
|
||||
This routine reconstruct TextOutModeMap to get the intersection
|
||||
of modes for all console out devices. Because EFI/UEFI spec require
|
||||
mode 0 is 80x25, mode 1 is 80x50, this routine will not check the
|
||||
intersection for mode 0 and mode 1.
|
||||
|
||||
@parm TextOutModeMap Current text out mode map, begin with the mode 80x25
|
||||
@parm NewlyAddedMap New text out mode map, begin with the mode 80x25
|
||||
@parm MapStepSize Mode step size for one console device
|
||||
@parm NewMapStepSize Mode step size for one console device
|
||||
@parm MaxMode Current max text mode
|
||||
@parm CurrentMode Current text mode
|
||||
|
||||
@retval None
|
||||
|
||||
**/
|
||||
STATIC
|
||||
VOID
|
||||
ConSplitterGetIntersection (
|
||||
|
@ -2183,9 +2209,16 @@ ConSplitterGetIntersection (
|
|||
INT32 CurrentMaxMode;
|
||||
INT32 Mode;
|
||||
|
||||
Index = 0;
|
||||
CurrentMapEntry = TextOutModeMap;
|
||||
NextMapEntry = TextOutModeMap;
|
||||
//
|
||||
// According to EFI/UEFI spec, mode 0 and mode 1 have been reserved
|
||||
// for 80x25 and 80x50 in Simple Text Out protocol, so don't make intersection
|
||||
// for mode 0 and mode 1, mode number starts from 2.
|
||||
//
|
||||
Index = 2;
|
||||
CurrentMapEntry = &TextOutModeMap[MapStepSize * 2];
|
||||
NextMapEntry = &TextOutModeMap[MapStepSize * 2];
|
||||
NewlyAddedMap = &NewlyAddedMap[NewMapStepSize * 2];
|
||||
|
||||
CurrentMaxMode = *MaxMode;
|
||||
Mode = *CurrentMode;
|
||||
|
||||
|
@ -2248,6 +2281,7 @@ Returns:
|
|||
UINTN Rows;
|
||||
UINTN Columns;
|
||||
UINTN StepSize;
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// Must make sure that current mode won't change even if mode number changes
|
||||
|
@ -2263,9 +2297,16 @@ Returns:
|
|||
Mode = 0;
|
||||
MapTable = TextOutModeMap + Private->CurrentNumberOfConsoles;
|
||||
while (Mode < TextOut->Mode->MaxMode) {
|
||||
TextOut->QueryMode (TextOut, Mode, &Columns, &Rows);
|
||||
Status = TextOut->QueryMode (TextOut, Mode, &Columns, &Rows);
|
||||
if (EFI_ERROR(Status)) {
|
||||
if (Mode == 1) {
|
||||
MapTable[StepSize] = Mode;
|
||||
|
||||
TextOutQueryData[Mode].Columns = 0;
|
||||
TextOutQueryData[Mode].Rows = 0;
|
||||
}
|
||||
Mode++;
|
||||
continue;
|
||||
}
|
||||
//
|
||||
// Search the intersection map and QueryData database to see if they intersects
|
||||
//
|
||||
|
|
|
@ -1157,7 +1157,7 @@ GraphicsConsoleConOutQueryMode (
|
|||
GRAPHICS_CONSOLE_DEV *Private;
|
||||
EFI_STATUS Status;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
|
||||
if (ModeNumber >= (UINTN) This->Mode->MaxMode) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
@ -1280,10 +1280,10 @@ GraphicsConsoleConOutSetMode (
|
|||
goto Done;
|
||||
}
|
||||
//
|
||||
// Otherwise, the size of the text console and/or the UGA mode will be changed,
|
||||
// so turn off the cursor, and free the LineBuffer for the current mode
|
||||
// Otherwise, the size of the text console and/or the GOP/UGA mode will be changed,
|
||||
// so erase the cursor, and free the LineBuffer for the current mode
|
||||
//
|
||||
This->EnableCursor (This, FALSE);
|
||||
EraseCursor (This);
|
||||
|
||||
FreePool (Private->LineBuffer);
|
||||
}
|
||||
|
@ -1377,7 +1377,6 @@ GraphicsConsoleConOutSetMode (
|
|||
// Move the text cursor to the upper left hand corner of the displat and enable it
|
||||
//
|
||||
This->SetCursorPosition (This, 0, 0);
|
||||
This->EnableCursor (This, TRUE);
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
|
|
|
@ -500,7 +500,7 @@ TerminalDriverBindingStart (
|
|||
TerminalDevice->SimpleTextOutput.EnableCursor = TerminalConOutEnableCursor;
|
||||
TerminalDevice->SimpleTextOutput.Mode = &TerminalDevice->SimpleTextOutputMode;
|
||||
|
||||
TerminalDevice->SimpleTextOutputMode.MaxMode = 2;
|
||||
TerminalDevice->SimpleTextOutputMode.MaxMode = 3;
|
||||
//
|
||||
// For terminal devices, cursor is always visible
|
||||
//
|
||||
|
|
|
@ -143,8 +143,12 @@ typedef union {
|
|||
#define MODE0_COLUMN_COUNT 80
|
||||
#define MODE0_ROW_COUNT 25
|
||||
|
||||
#define MODE1_COLUMN_COUNT 100
|
||||
#define MODE1_ROW_COUNT 31
|
||||
#define MODE1_COLUMN_COUNT 80
|
||||
#define MODE1_ROW_COUNT 50
|
||||
|
||||
#define MODE2_COLUMN_COUNT 100
|
||||
#define MODE2_ROW_COUNT 31
|
||||
|
||||
#define BACKSPACE 8
|
||||
#define ESC 27
|
||||
#define CSI 0x9B
|
||||
|
|
|
@ -230,7 +230,7 @@ TerminalConOutOutputString (
|
|||
//
|
||||
Mode = This->Mode;
|
||||
|
||||
if (Mode->Mode > 1) {
|
||||
if (Mode->Mode > 2) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
|
@ -431,11 +431,11 @@ TerminalConOutQueryMode (
|
|||
/*++
|
||||
Routine Description:
|
||||
|
||||
Implements EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.QueryMode().
|
||||
Implements EFI_SIMPLE_TEXT_OUT_PROTOCOL.QueryMode().
|
||||
It returns information for an available text mode
|
||||
that the terminal supports.
|
||||
In this driver, we only support text mode 80x25, which is
|
||||
defined as mode 0.
|
||||
In this driver, we support text mode 80x25 (mode 0),
|
||||
80x50 (mode 1), 100x31 (mode 2).
|
||||
|
||||
|
||||
Arguments:
|
||||
|
@ -464,7 +464,7 @@ TerminalConOutQueryMode (
|
|||
|
||||
--*/
|
||||
{
|
||||
if (This->Mode->MaxMode > 2) {
|
||||
if (This->Mode->MaxMode > 3) {
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
|
@ -476,6 +476,10 @@ TerminalConOutQueryMode (
|
|||
*Columns = MODE1_COLUMN_COUNT;
|
||||
*Rows = MODE1_ROW_COUNT;
|
||||
return EFI_SUCCESS;
|
||||
} else if (ModeNumber == 2) {
|
||||
*Columns = MODE2_COLUMN_COUNT;
|
||||
*Rows = MODE2_ROW_COUNT;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
return EFI_UNSUPPORTED;
|
||||
|
@ -523,7 +527,7 @@ TerminalConOutSetMode (
|
|||
//
|
||||
TerminalDevice = TERMINAL_CON_OUT_DEV_FROM_THIS (This);
|
||||
|
||||
if (ModeNumber > 1) {
|
||||
if (ModeNumber > 2) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue