Add "TtyTerm" terminal type to TerminalDxe

This patch a adds new terminal type, TtyTerm, to TerminalDxe.  This terminal
type provides a place to add support for various *nix terminals that don't
behave like standard VT terminals.  The goal is to 'just work' with as many
terminals as possible, rather than properly emulating any one specific
terminal.

Signed-off-by: Roy Franz <roy.franz@linaro.org>
Contributed-under: TianoCore Contribution Agreement 1.0
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Feng Tian <feng.tian@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17895 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Roy Franz
2015-07-09 06:24:11 +00:00
committed by lersek
parent 4dc0d578b8
commit 6e3227c88c
7 changed files with 73 additions and 8 deletions

View File

@@ -33,7 +33,8 @@ EFI_GUID *gTerminalType[] = {
&gEfiPcAnsiGuid,
&gEfiVT100Guid,
&gEfiVT100PlusGuid,
&gEfiVTUTF8Guid
&gEfiVTUTF8Guid,
&gEfiTtyTermGuid
};
@@ -152,12 +153,13 @@ TerminalDriverBindingSupported (
}
//
// only supports PC ANSI, VT100, VT100+ and VT-UTF8 terminal types
// only supports PC ANSI, VT100, VT100+, VT-UTF8, and TtyTerm terminal types
//
if (!CompareGuid (&Node->Guid, &gEfiPcAnsiGuid) &&
!CompareGuid (&Node->Guid, &gEfiVT100Guid) &&
!CompareGuid (&Node->Guid, &gEfiVT100PlusGuid) &&
!CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) {
!CompareGuid (&Node->Guid, &gEfiVTUTF8Guid) &&
!CompareGuid (&Node->Guid, &gEfiTtyTermGuid)) {
return EFI_UNSUPPORTED;
}
@@ -275,6 +277,10 @@ BuildTerminalDevpath (
TerminalType = VTUTF8TYPE;
} else if (CompareGuid (&Node->Guid, &gEfiTtyTermGuid)) {
TerminalType = TTYTERMTYPE;
} else {
return NULL;
}
@@ -708,9 +714,9 @@ TerminalDriverBindingStart (
TerminalType = PcdGet8 (PcdDefaultTerminalType);
//
// Must be between PCANSITYPE (0) and VTUTF8TYPE (3)
// Must be between PCANSITYPE (0) and TTYTERMTYPE (4)
//
ASSERT (TerminalType <= VTUTF8TYPE);
ASSERT (TerminalType <= TTYTERMTYPE);
CopyMem (&DefaultNode->Guid, gTerminalType[TerminalType], sizeof (EFI_GUID));
RemainingDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) DefaultNode;
@@ -728,6 +734,8 @@ TerminalDriverBindingStart (
TerminalType = VT100PLUSTYPE;
} else if (CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) {
TerminalType = VTUTF8TYPE;
} else if (CompareGuid (&Node->Guid, &gEfiTtyTermGuid)) {
TerminalType = TTYTERMTYPE;
} else {
goto Error;
}
@@ -926,6 +934,24 @@ TerminalDriverBindingStart (
);
break;
case TTYTERMTYPE:
AddUnicodeString2 (
"eng",
gTerminalComponentName.SupportedLanguages,
&TerminalDevice->ControllerNameTable,
(CHAR16 *)L"Tty Terminal Serial Console",
TRUE
);
AddUnicodeString2 (
"en",
gTerminalComponentName2.SupportedLanguages,
&TerminalDevice->ControllerNameTable,
(CHAR16 *)L"Tty Terminal Serial Console",
FALSE
);
break;
}
//
@@ -1441,7 +1467,7 @@ TerminalUpdateConsoleDevVariable (
//
// Append terminal device path onto the variable.
//
for (TerminalType = PCANSITYPE; TerminalType <= VTUTF8TYPE; TerminalType++) {
for (TerminalType = PCANSITYPE; TerminalType <= TTYTERMTYPE; TerminalType++) {
SetTerminalDevicePath (TerminalType, ParentDevicePath, &TempDevicePath);
NewVariable = AppendDevicePathInstance (Variable, TempDevicePath);
ASSERT (NewVariable != NULL);
@@ -1554,7 +1580,7 @@ TerminalRemoveConsoleDevVariable (
// Loop through all the terminal types that this driver supports
//
Match = FALSE;
for (TerminalType = PCANSITYPE; TerminalType <= VTUTF8TYPE; TerminalType++) {
for (TerminalType = PCANSITYPE; TerminalType <= TTYTERMTYPE; TerminalType++) {
SetTerminalDevicePath (TerminalType, ParentDevicePath, &TempDevicePath);
@@ -1658,6 +1684,10 @@ SetTerminalDevicePath (
CopyGuid (&Node.Guid, &gEfiVTUTF8Guid);
break;
case TTYTERMTYPE:
CopyGuid (&Node.Guid, &gEfiTtyTermGuid);
break;
default:
return EFI_UNSUPPORTED;
}