summaryrefslogtreecommitdiff
path: root/Core/EM/Terminal
diff options
context:
space:
mode:
authorraywu <raywu0301@gmail.com>2018-06-15 00:00:50 +0800
committerraywu <raywu0301@gmail.com>2018-06-15 00:00:50 +0800
commitb7c51c9cf4864df6aabb99a1ae843becd577237c (patch)
treeeebe9b0d0ca03062955223097e57da84dd618b9a /Core/EM/Terminal
downloadzprj-b7c51c9cf4864df6aabb99a1ae843becd577237c.tar.xz
init. 1AQQW051HEADmaster
Diffstat (limited to 'Core/EM/Terminal')
-rw-r--r--Core/EM/Terminal/InitTerminalStrings.c349
-rw-r--r--Core/EM/Terminal/Terminal.chmbin0 -> 158117 bytes
-rw-r--r--Core/EM/Terminal/Terminal.cif21
-rw-r--r--Core/EM/Terminal/Terminal.libbin0 -> 61392 bytes
-rw-r--r--Core/EM/Terminal/Terminal.mak165
-rw-r--r--Core/EM/Terminal/Terminal.sd1533
-rw-r--r--Core/EM/Terminal/Terminal.sdl796
-rw-r--r--Core/EM/Terminal/Terminal.unibin0 -> 26732 bytes
-rw-r--r--Core/EM/Terminal/TerminalAcpi.c179
-rw-r--r--Core/EM/Terminal/TerminalBoard.h404
-rw-r--r--Core/EM/Terminal/TerminalSetup.c1788
-rw-r--r--Core/EM/Terminal/TerminalSetupVar.h167
-rw-r--r--Core/EM/Terminal/Terminalx64.libbin0 -> 80684 bytes
13 files changed, 5402 insertions, 0 deletions
diff --git a/Core/EM/Terminal/InitTerminalStrings.c b/Core/EM/Terminal/InitTerminalStrings.c
new file mode 100644
index 0000000..b7512e8
--- /dev/null
+++ b/Core/EM/Terminal/InitTerminalStrings.c
@@ -0,0 +1,349 @@
+//****************************************************************************
+//****************************************************************************
+//** **
+//** (C)Copyright 1985-2009, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone (770)-246-8600 **
+//** **
+//****************************************************************************
+//****************************************************************************
+// $Header: /Alaska/BIN/Modules/Terminal/InitTerminalStrings.c 22 12/12/11 6:51a Rajeshms $
+//
+// $Revision: 22 $
+//
+// $Date: 12/12/11 6:51a $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/BIN/Modules/Terminal/InitTerminalStrings.c $
+//
+// 22 12/12/11 6:51a Rajeshms
+// [TAG] EIP71636
+// [Category] New Feature
+// [Description] Implement the AMI_SERIAL_PROTOCOL for non-generic PCI
+// Serial Device.
+// [Files] AmiSerial.c, AmiSerial.sdl, AmiSerial.mak, AmiSerial.chm,
+// AmiSerial.dxs, AmiSerial.cif, Terminal.c, SerialIo.c, TerminalSetup.c,
+// InitTerminalStrings.c, TerminalSetupVar.h, Terminal.cif,
+// TerminalAmiSerial.h, LegacySredir_Setup.c
+//
+// 21 3/02/11 3:15a Rameshr
+// [TAG]- EIP 54313
+// [Category]-IMPROVEMENT
+// [Description]- Terminal driver Getvariable calls assumed to have valid
+// values. Added code to return the error code when there is an failure in
+// the getvariable call.
+// [Files]- TerminalSetup.c, InitTerminalString.c
+//
+// 20 11/02/10 4:17a Lavanyap
+// [TAG] - EIP42299
+// [Category] - IMPROVEMENT
+// [Description] - Console Redirection can support 10 COM Ports.
+// [Files] - InitTerminalStrings.c, SerialIo.c, Terminal.sd,
+// Terminal.sdl, Terminal.uni, TerminalSetup.c
+//
+// 19 10/19/10 8:35a Rajeshms
+// [TAG]- EIP 39562
+// [Category]-IMPROVEMENT
+// [Description]- Show entire PCI address of redirection device in Setup
+// [Files]- Terminal.c, TerminalSetup.c, InitTerminalStrings.c
+//
+// 18 1/20/10 4:47p Artems
+// EIP 34000 - made UEFI 2.1 changes backward compatible
+//
+// 17 12/16/09 4:33p Artems
+// EIP 31619 added UEFI 2.1 support
+//
+// 16 11/18/09 10:28a Fasihm
+// EIP#30023 - Fix added to resolve the NVRAM Corruption issue in the
+// projects.
+//
+// 15 7/02/09 5:01p Rameshr
+// Coding Standard and File header updated.
+//
+// 14 4/14/08 4:55p Ambikas
+//
+// 13 4/14/08 2:33p Ambikas
+//
+// 12 6/18/07 6:38p Ambikas
+//
+// 11 6/12/07 3:53p Ambikas
+//
+// 10 6/11/07 11:35a Ambikas
+//
+// 9 6/10/07 6:02p Ambikas
+//
+// 8 6/06/07 7:55p Ambikas
+// We no longer print segment and bus numbers of pci serial device, just
+// device and function numbers.
+//
+// 7 6/05/07 6:26p Ambikas
+//
+// 6 6/05/07 6:16p Ambikas
+//
+// 5 6/05/07 11:44a Ambikas
+//
+// 4 6/05/07 11:43a Ambikas
+//
+// 3 6/05/07 11:40a Ambikas
+//
+// 2 6/04/07 7:32p Ambikas
+// -Increased the max number of pci serial ports to 4. Added extra strings
+// for the additional ports.
+// -If TOTAL_SERIAL_PORTS is 0, then the setup data structures for the
+// serial ports in Terminal.sd will not be defined. So, we comment out
+// code which references those data structures and just return default
+// values.
+//
+// 1 5/24/2007 2:33p Ambikas
+//
+//**********************************************************************
+//<AMI_FHDR_START>
+//
+// Name: InitTerminalStrings.c
+//
+// Description: Contains InitTerminalStrings(), which is linked to
+// SetupStringInit in the sdl page. Before entering setup,
+// we do any modification or updating needed for the serial
+// port name strings (STR_SIO_SERIAL_PORT0, etc.).
+//
+//<AMI_FHDR_END>
+//**********************************************************************
+
+#include <AmiLib.h>
+#include <AmiDxeLib.h>
+#include <Setup.h>
+#include <SetupStrTokens.h>
+#include <Token.h>
+#include "TerminalSetupVar.h"
+
+#ifndef HII_LIBRARY_FUNCTIONS_SUPPORT
+EFI_STATUS HiiLibGetString(
+ IN EFI_HII_HANDLE HiiHandle,
+ IN STRING_REF StringId,
+ IN OUT UINTN *StringSize,
+ OUT EFI_STRING String
+);
+EFI_STATUS HiiLibSetString(
+ IN EFI_HII_HANDLE HiiHandle,
+ IN STRING_REF StringId,
+ IN EFI_STRING String
+);
+#endif
+
+
+STRING_REF gSioSerialPortStrRef[MAX_SIO_SERIAL_PORTS] = {
+ STRING_TOKEN(STR_SIO_SERIAL_PORT0),
+ STRING_TOKEN(STR_SIO_SERIAL_PORT1),
+ STRING_TOKEN(STR_SIO_SERIAL_PORT2),
+ STRING_TOKEN(STR_SIO_SERIAL_PORT3),
+ STRING_TOKEN(STR_SIO_SERIAL_PORT4),
+ STRING_TOKEN(STR_SIO_SERIAL_PORT5),
+ STRING_TOKEN(STR_SIO_SERIAL_PORT6),
+ STRING_TOKEN(STR_SIO_SERIAL_PORT7),
+ STRING_TOKEN(STR_SIO_SERIAL_PORT8),
+ STRING_TOKEN(STR_SIO_SERIAL_PORT9)
+};
+
+STRING_REF gPciSerialPortStrRef[MAX_PCI_SERIAL_PORTS] = {
+ STRING_TOKEN(STR_PCI_SERIAL_PORT0),
+ STRING_TOKEN(STR_PCI_SERIAL_PORT1),
+ STRING_TOKEN(STR_PCI_SERIAL_PORT2),
+ STRING_TOKEN(STR_PCI_SERIAL_PORT3)
+};
+
+UINT32 gTotalSioSerialPorts = TOTAL_SIO_SERIAL_PORTS;
+UINT32 gTotalPciSerialPorts = TOTAL_PCI_SERIAL_PORTS;
+
+EFI_GUID gTerminalVarGuid = TERMINAL_VAR_GUID;
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: StrCat
+//
+// Description: Wrapper function around Wcscpy.
+// Concantenates the second Unicode string to the first.
+//
+// Input:
+// IN OUT CHAR16 *Destination
+// IN CHAR16 *Source
+//
+// Output: VOID
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+VOID StrCat (IN OUT CHAR16 *Destination, IN CHAR16 *Source)
+{
+ Wcscpy (Destination + Wcslen (Destination), Source);
+}
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: InitTerminalStrings
+//
+// Input:
+// IN EFI_HII_HANDLE HiiHandle
+// IN UINT16 Class
+//
+// Output: VOID
+//
+// Description: Certain strings in the terminal setup page can only be
+// updated at runtime, which is what this function does.
+// The pci serial port names are changed to contain the
+// location (device and function numbers) of the port.
+// If any serial ports are disabled, "Disabled"
+// is concatenated to their names.
+//
+// Output:
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+VOID InitTerminalStrings(IN EFI_HII_HANDLE HiiHandle, IN UINT16 Class)
+{
+#if (TOTAL_SERIAL_PORTS > 0)
+
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ UINTN SerialPortsEnabledVarSize = sizeof(SERIAL_PORTS_ENABLED_VAR);
+ SERIAL_PORTS_ENABLED_VAR SerialPortsEnabledVar;
+ UINT32 SerialPortsEnabledVarAttributes=0;
+
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+ UINTN PciSerialPortsLocationVarSize
+ = sizeof(PCI_SERIAL_PORTS_LOCATION_VAR);
+ PCI_SERIAL_PORTS_LOCATION_VAR PciSerialPortsLocationVar;
+ UINT32 PciSerialPortsLocationVarAttributes=0;
+#endif
+
+ UINT32 i = 0;
+
+ CHAR16 Str[512]=L"";
+ CHAR16 Str2[512]=L"";
+ UINTN Size=512;
+
+ if (Class==ADVANCED_FORM_SET_CLASS) {
+ Status = pRS->GetVariable(SERIAL_PORTS_ENABLED_VAR_C_NAME,
+ &gTerminalVarGuid,
+ &SerialPortsEnabledVarAttributes,
+ &SerialPortsEnabledVarSize,
+ &SerialPortsEnabledVar);
+
+ if (EFI_ERROR(Status)) {
+ return;
+ }
+
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+ Status = pRS->GetVariable(PCI_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ &PciSerialPortsLocationVarAttributes,
+ &PciSerialPortsLocationVarSize,
+ &PciSerialPortsLocationVar);
+ ASSERT_EFI_ERROR(Status);
+
+ if (EFI_ERROR(Status)) {
+ return;
+ }
+#endif
+
+ for (i = 0; i < gTotalSioSerialPorts; i++) {
+ if (!SerialPortsEnabledVar.PortsEnabled[i]) {
+ Size = 512;
+ Status = HiiLibGetString(HiiHandle,
+ gSioSerialPortStrRef[i],
+ &Size, Str);
+ if (!EFI_ERROR(Status)) {
+ StrCat(Str, L" (Disabled)");
+ InitString(HiiHandle, gSioSerialPortStrRef[i], Str);
+ }
+ }
+ }
+
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+ for (i = 0; i < gTotalPciSerialPorts; i++) {
+ Size = 512;
+ Status = HiiLibGetString(HiiHandle,
+ gPciSerialPortStrRef[i],
+ &Size, Str);
+ if (!EFI_ERROR(Status)) {
+ if(PciSerialPortsLocationVar.AmiPciSerialPresent[i] == TRUE) {
+ //
+ // If AMI Serial Protcocol was installed for this PCI Serial device,
+ // then display the device like COM3(Pci Bus2,Dev10,Func1,Port0)
+ // with Port information.
+ //
+ Swprintf(Str2, L"COM%X(Pci Bus%d,Dev%d,Func%d,Port%d)",
+ gTotalSioSerialPorts+i,
+ PciSerialPortsLocationVar.Bus[i],
+ PciSerialPortsLocationVar.Device[i],
+ PciSerialPortsLocationVar.Function[i],
+ PciSerialPortsLocationVar.Port[i]);
+ } else {
+ Swprintf(Str2, L"COM%X(Pci Bus%d,Dev%d,Func%d)",
+ gTotalSioSerialPorts+i,
+ PciSerialPortsLocationVar.Bus[i],
+ PciSerialPortsLocationVar.Device[i],
+ PciSerialPortsLocationVar.Function[i]);
+ }
+
+ StrCat(Str, Str2);
+ if (!SerialPortsEnabledVar.PortsEnabled[gTotalSioSerialPorts+i]) {
+ StrCat(Str, L" (Disabled)");
+ }
+ InitString(HiiHandle, gPciSerialPortStrRef[i], Str);
+ }
+ }
+#endif
+ }
+#endif
+}
+
+#ifndef HII_LIBRARY_FUNCTIONS_SUPPORT
+#include <Protocol/Hii.h>
+
+static EFI_HII_PROTOCOL *Hii = NULL;
+
+static EFI_STATUS HiiLibGetString(
+ IN EFI_HII_HANDLE HiiHandle,
+ IN STRING_REF StringId,
+ IN OUT UINTN *StringSize,
+ OUT EFI_STRING String
+)
+{
+ if (Hii == NULL && EFI_ERROR(pBS->LocateProtocol(&gEfiHiiProtocolGuid, NULL, &Hii)))
+ return EFI_NOT_FOUND;
+
+ return Hii->GetString(Hii, HiiHandle, StringId, TRUE, NULL, StringSize, String);
+}
+
+static EFI_STATUS HiiLibSetString(
+ IN EFI_HII_HANDLE HiiHandle,
+ IN STRING_REF StringId,
+ IN EFI_STRING String
+)
+{
+ if (Hii == NULL && EFI_ERROR(pBS->LocateProtocol(&gEfiHiiProtocolGuid, NULL, &Hii)))
+ return EFI_NOT_FOUND;
+
+ return Hii->NewString(Hii, L" ", HiiHandle, &StringId, String);
+}
+#endif
+
+//****************************************************************************
+//****************************************************************************
+//** **
+//** (C)Copyright 1985-2009, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone (770)-246-8600 **
+//** **
+//****************************************************************************
+//**************************************************************************** \ No newline at end of file
diff --git a/Core/EM/Terminal/Terminal.chm b/Core/EM/Terminal/Terminal.chm
new file mode 100644
index 0000000..f8a5683
--- /dev/null
+++ b/Core/EM/Terminal/Terminal.chm
Binary files differ
diff --git a/Core/EM/Terminal/Terminal.cif b/Core/EM/Terminal/Terminal.cif
new file mode 100644
index 0000000..1834433
--- /dev/null
+++ b/Core/EM/Terminal/Terminal.cif
@@ -0,0 +1,21 @@
+<component>
+ name = "Serial Redirection"
+ category = eModule
+ LocalRoot = "Core\EM\Terminal\"
+ RefName = "Terminal"
+[files]
+"Terminal.sdl"
+"Terminal.mak"
+"TerminalSetupVar.h"
+"TerminalSetup.c"
+"InitTerminalStrings.c"
+"Terminal.sd"
+"Terminal.uni"
+"Terminal.lib"
+"Terminalx64.lib"
+"Terminal.chm"
+"TerminalBoard.h"
+"TerminalAcpi.c"
+[parts]
+"TerminalAmiSerial Protocol"
+<endComponent>
diff --git a/Core/EM/Terminal/Terminal.lib b/Core/EM/Terminal/Terminal.lib
new file mode 100644
index 0000000..b065cf7
--- /dev/null
+++ b/Core/EM/Terminal/Terminal.lib
Binary files differ
diff --git a/Core/EM/Terminal/Terminal.mak b/Core/EM/Terminal/Terminal.mak
new file mode 100644
index 0000000..daa0578
--- /dev/null
+++ b/Core/EM/Terminal/Terminal.mak
@@ -0,0 +1,165 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
+# $Header: /Alaska/BIN/Modules/Terminal/Terminal.mak 12 12/22/11 1:32a Rajeshms $
+#
+# $Revision: 12 $
+#
+# $Date: 12/22/11 1:32a $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/BIN/Modules/Terminal/Terminal.mak $
+#
+# 12 12/22/11 1:32a Rajeshms
+# [TAG] EIP57579
+# [Category] Improvement
+# [Description] PCI legacy console redirection causes Legacy OS
+# installation slow because when Redirection is enabled for Legacy OS,
+# Legacy Serial Redirection enables the PCI Serial interrupt for
+# redirection and sometime after that OS uses its own IVT but still PCI
+# Serial interrupt is generated and not handled.So, disable redirection
+# at OS level. we disable redirection on ACPI enable/disable call and
+# reset the Interrupt Enable Register so that interrupt is not generated.
+# [Files] Terminal.sdl, Terminal.mak, Terminal.cif, TerminalAcpi.c
+#
+# 11 2/12/10 5:06p Felixp
+# Clean up (unneeded target removed)
+#
+# 10 7/02/09 5:00p Rameshr
+# Coding Standard and File header updated.
+#
+# 9 4/14/08 6:52p Ambikas
+#
+# 8 11/29/07 11:58a Ambikas
+# Fixed bug. If Terminal_SUPPORT was set to 0, InitTerminalStrings.c
+# would still be compiled and incorporated into SetupBin,
+# which would result in an assert while booting.
+# Made the compiling of InitTerminalStrings.obj and the generation of
+# Terminal.sdb dependent on the value of Terminal_SUPPORT.
+#
+# 7 11/07/07 4:53p Ambikas
+# Terminal.sd is dependent on token.h.
+#
+# 6 6/05/07 4:14p Ambikas
+#
+# 5 5/24/07 2:30p Ambikas
+# Added rule for InitTerminalStrings.c.
+#
+# 4 12/02/05 11:50a Felixp
+#
+# 3 11/11/05 2:07p Ambikas
+#
+# 2 2/11/05 5:49p Felixp
+# Binary files organization improved:
+# - extra layer of sub-component removed
+# - macros initialization moved to SDL tokens to eliminate undefined
+# macros situation
+# - debug and release binaries have different names now (workaround for
+# VeB limitation)
+# - binaries reside in the component home directory (eliminates
+# hardcoded paths)
+#
+# 1 1/28/05 12:47p Felixp
+#
+# 2 1/18/05 3:22p Felixp
+# PrintDebugMessage renamed to Trace
+#
+# 1 12/22/04 6:19p Admin
+#
+# 1 12/22/04 6:18p Admin
+#
+# 1 11/07/04 3:20p Markw
+# Adding unfinished code to source control. Partially works. Currently
+# turned off.
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: Terminal_mak
+#
+# Description: Creates Terminal.efi.
+# Includes either Terminal.lib or Terminalx64.lib depending
+# on the cpu mode.
+#
+# These two files are not part of Terminal.efi:
+# The Terminal.sd file is compiled as part of the target SetupSdbs
+# in Setup.mak.
+# InitTerminalStrings.c is compiled as part of the target SetupBin
+# in Setup.mak.
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+all : TERMINAL
+
+TERMINAL : $(BUILD_DIR)\Terminal.mak TERMINALBIN
+
+$(BUILD_DIR)\Terminal.mak : $(TERMINAL_DIR)\$(@B).cif \
+ $(TERMINAL_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(TERMINAL_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+TERMINALBIN : $(AMIDXELIB) $(Terminal_LIB)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\Terminal.mak all\
+ OBJECTS=$(BUILD_DIR)\$(TERMINAL_DIR)\TerminalSetup.obj\
+ GUID=7A08CB98-E9BC-41c3-BE19-B302F3F1F595\
+ ENTRY_POINT=TerminalEntryPoint \
+ "EXT_HEADERS=$(BUILD_DIR)\token.h"\
+ TYPE=BS_DRIVER LIBRARIES= \
+ COMPRESS=1\
+ "INIT_LIST=$(TerminalInitialize)"
+
+#***********************************************************************
+
+!IF "$(Terminal_SUPPORT)"=="1"
+SetupSdbs : TerminalSDB
+!ENDIF
+
+TerminalSDB : $(BUILD_DIR)\Terminal.mak
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\Terminal.mak all\
+ TYPE=SDB NAME=Terminal STRING_CONSUMERS=$(TERMINAL_DIR)\Terminal.sd
+
+!IF "$(Terminal_SUPPORT)"=="1"
+SetupBin : $(BUILD_DIR)\InitTerminalStrings.obj
+!ENDIF
+
+$(BUILD_DIR)\InitTerminalStrings.obj : \
+ $(TERMINAL_DIR)\InitTerminalStrings.c \
+ $(BUILD_DIR)\SetupStrTokens.h
+ $(CC) $(CFLAGS) /Fo$(BUILD_DIR)\ $(TERMINAL_DIR)\InitTerminalStrings.c
+
+#***********************************************************************
+
+!IF "$(DISABLE_PCI_REDIRECTION_ON_ACPI_ENABLE_DISABLE)"=="1"
+
+$(BUILD_DIR)\TerminalAcpi.obj: $(TERMINAL_DIR)\TerminalAcpi.c
+ $(CC) $(CFLAGS) /Fo$(BUILD_DIR)\ $(TERMINAL_DIR)\TerminalAcpi.c /I$(TERMINAL_DIR)
+
+AcpiModeEnableBin: $(BUILD_DIR)\TerminalAcpi.obj
+!ENDIF
+
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
+
diff --git a/Core/EM/Terminal/Terminal.sd b/Core/EM/Terminal/Terminal.sd
new file mode 100644
index 0000000..35f2474
--- /dev/null
+++ b/Core/EM/Terminal/Terminal.sd
@@ -0,0 +1,1533 @@
+//****************************************************************************
+//****************************************************************************
+//** **
+//** (C)Copyright 1985-2014, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone (770)-246-8600 **
+//** **
+//****************************************************************************
+//****************************************************************************
+// $Header: /Alaska/BIN/Modules/Terminal/Terminal.sd 46 6/16/14 7:52a Divyac $
+//
+// $Revision: 46 $
+//
+// $Date: 6/16/14 7:52a $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/BIN/Modules/Terminal/Terminal.sd $
+//
+// 46 6/16/14 7:52a Divyac
+// [TAG] EIP172073
+// [Category] Improvement
+// [Description] Setup option for Legacy Serial Redirection.
+// [Files] Terminal.sd, Terminal.uni, LegacySredir_Setup.c
+//
+// 45 3/14/14 8:37a Anbuprakashp
+// [TAG] EIP156273
+// [Category] Improvement
+// [Description] Avoid Build issue happened in Non english version of
+// the OS with Serial Redirection label 4.6.3_Terminal_53
+// [Files] Terminal.sd,TerminalSetup.c
+//
+// 44 9/04/13 3:25a Anbuprakashp
+// [TAG] EIP134648
+// [Category] Bug Fix
+// [Severity] Minor
+// [Symptom] Build error occurs in Sharkbay platform if tokens
+// "TOTAL_SIO_SERIAL_PORTS" and "TOTAL_PCI_SERIAL_PORTS" are set to 0
+// [RootCause] TerminalSetup.c file Status Variable Initialization is
+// missing.Terminal.sd file, Condition (TOTAL_SERIAL_PORTS > 0) need to be
+// added to avoid build error.
+// [Solution] Terminal.sd file, Condition (TOTAL_SERIAL_PORTS > 0) added
+// to avoid build error.
+// Status variable initialzed properly.
+// [Files] Terminal.sd,TerminalSetup.c
+//
+// 43 12/12/11 1:57a Jittenkumarp
+// [TAG] EIP75982
+// [Category] New Feature
+// [Description] Redirection After BIOS POST item on the setup menu
+// [Files] Terminal.sd, Terminal.uni, LegacySredir.c,
+// LegacySredir_Setup.c
+//
+// 42 9/20/11 3:04a Rajeshms
+// [TAG] EIP70320
+// [Category] Bug Fix
+// [Severity] Critical
+// [Symptom] SPCR table is not created with EFI_SPECIFICATION_VERSION
+// 0x2000A
+// [RootCause] Comport was returned as 0xff from
+// GetAcpiSpcrTableValues() as the PORT number is zero indexed after
+// EFI_SPECIFICATION_VERSION 0x2000A.
+// [Solution] The comport number is not subtracted with 1 if
+// EFI_SPECIFICATION_VERSION is equal to greater than0x2000A
+// [Files] Terminal.sd, TerminalSetup.c
+//
+// 41 9/12/11 3:11a Rajeshms
+// [TAG]- EIP 63665
+// [Category]-IMPROVEMENT
+// [Description]- Install Linux(Legacy OS) through remote. Some Linux
+// versions are forced to text mode to redirect and some are redirected in
+// graphics mode itself. It might not work for all the Linux versions as
+// the Linux kernel's behave differently.
+// [Files]- Terminal.sdl, Terminal.uni, Terminal.sd, LegacySredir.c,
+// LegacySredir.h, LegacySredir_Setup.c, GRAPHREDIR.ASM, INT10REDIR.ASM,
+// OR_MOD.ASM, OR_MOD.EQU, SREDIR.ASM
+//
+// 40 7/29/11 2:22a Lavanyap
+// [TAG] EIP65854
+// [Category] Bug Fix
+// [Severity] Minor
+// [Symptom] Build errors on redefinition of symbols PORT(0-9) in some
+// projects.
+// [RootCause] Terminal module redefines symbols PORT(0-9).
+// [Solution] Symbol definition PORTx has been changed to
+// TERMINAL_PORTx.
+// [Files] Terminal.sd
+//
+// 39 7/13/11 2:48a Rajeshms
+// [TAG]- EIP 36616
+// [Category]- New Feature
+// [Description]- Add Setup option for Various Putty keyPad support in
+// Terminal driver.
+// [Files]- Terminal.c, Terminal.h, Terminal.sd, Terminal.sdl,
+// Terminal.uni, TerminalBoard.h, TerminalSetup.c, TerminalSimpleTextIn.c
+//
+// 38 6/21/11 7:06a Rameshr
+// [TAG] - EIP 62809
+// [Category]- BUG FIX
+// [Severity]- Minor
+// [Symptom] - COM ports can't be select in Out-of-band mgmt port in setup
+// menu,it always show COM0..
+// [RootCause]- UEFI2.1 port index starts from 0.
+// [Solution] - Modified the values based on the Port0, Port1 etc
+// defination.
+// [Files] - Terminal.sd
+//
+// 37 4/12/11 4:30a Rameshr
+// [TAG]- EIP 57688
+// [Category]- New Feature
+// [Description]- Add Setup option for Vt-UTF8 combo key support in
+// terminal driver
+// [Files]- Terminal.c, Terminal.h, Terminal.sd, Terminal.sdl ,
+// Terminal.uni, Terminalboard.h, TerminalSetup.c, TerminalSimpletextin.c
+//
+// 36 1/24/11 4:05a Lavanyap
+// [TAG] - EIP48183
+// [Category] - IMPROVEMENT
+// [Description] - Update the Terminal eModule to utilize Setup
+// Customization
+// [Files] - Terminal.sd, TerminalSetupVar.h
+//
+// 35 11/02/10 4:17a Lavanyap
+// [TAG] - EIP42299
+// [Category] - IMPROVEMENT
+// [Description] - Console Redirection can support 10 COM Ports.
+// [Files] - InitTerminalStrings.c, SerialIo.c, Terminal.sd,
+// Terminal.sdl, Terminal.uni, TerminalSetup.c
+//
+// 34 9/24/10 12:40a Rameshr
+// [TAG] - EIP 44736
+// [Category]- BUG FIX
+// [Severity]- Major
+// [Symptom] - Terminal label 44 is not building in UEFI2.1 mode
+// [RootCause] - suppressif and grayoutif used in Single menu
+// [Solution] - Used SUPPRESS_GRAYOUT_ENDIF to resolve the build error
+// [Files] - Terminal.sd
+//
+// 33 6/01/10 12:29a Rameshr
+// Support for Baud Rate 38400 in Terminal Driver
+// EIP 38852
+//
+// 32 5/03/10 12:21a Rameshr
+// Issue:VT-UTF8 mode support for Console redirection with Debugger
+// Solution: Serial Port attribute Setup questions added for the debugger
+// console redirection port.
+// EIP 37440
+//
+// 31 3/31/10 12:29a Rameshr
+// Recorder mode support Added.
+// EIP 34388
+//
+// 30 3/30/10 1:02a Rameshr
+// Each Com port has SDL token for default value of console Redirection
+// setup option
+// EIP 15087
+//
+// 29 2/15/10 12:44p Pats
+// EIP 28461: Enabling Console Redirection COM4 locks SUT in POST
+// Added separate controls for PCI serial ports and a separate default.
+//
+//
+// 28 2/12/10 5:37p Felixp
+// Bug fix: the code didn't compile in UEFI 2.1 mode.
+//
+// 27 1/20/10 4:47p Artems
+// EIP 34000 - made UEFI 2.1 changes backward compatible
+//
+// 26 12/23/09 4:07a Rameshr
+// Software flowControl Removed as SerialIO doesnt support it.
+//
+// 25 12/16/09 5:08p Artems
+// EIP 31619 UEFI 2.1 support added
+//
+// 24 10/22/09 11:26a Yul
+// EIP 24167
+// Add Setup question to replace SDL token for LegacyOsResolution.
+//
+// 23 10/21/09 11:29a Artems
+// EIP 25955 - fixed switching mode mechanism
+//
+// 21 7/02/09 5:01p Rameshr
+// Coding Standard and File header updated.
+//
+// 20 11/14/08 10:56a Ambikas
+//
+// 18 11/12/08 5:55p Ambikas
+//
+// 17 10/21/08 4:49p Fasihm
+// Updated by adding more MANUFACTURING flags to missed setup questions.
+//
+// 16 8/13/08 5:56p Fasihm
+// Added the Manufacturing flags to the setup questions.
+//
+// 15 5/13/08 3:41p Rameshraju
+// Terminal Resolution 100 x 31 support Added
+//
+// 14 2/07/08 6:41p Ambikas
+//
+// 13 11/07/07 4:52p Ambikas
+// We have reverted the the VfrCompile convention of 1 based array.
+// Array indeces have been changed to accordingly.
+//
+// 12 6/12/07 3:52p Ambikas
+//
+// 11 6/11/07 11:35a Ambikas
+//
+// 10 6/05/07 6:31p Ambikas
+//
+// 9 6/05/07 12:43p Ambikas
+//
+// 8 6/05/07 12:41p Ambikas
+//
+// 7 6/04/07 7:26p Ambikas
+// -Serial port related setup vars are now only defined if
+// TOTAL_SERIAL_PORTS > 0.
+// -Increased max Pci Serial Ports to 4, and so added controls for the
+// additional ports.
+//
+// 6 5/24/07 2:32p Ambikas
+// Re-organized the file using macros.
+//
+// 5 4/32/07 4:25p Robert
+//
+// 4 4/02/07 4:25p Robert
+// Changed Default setup value to Disabled
+//
+// 3 5/05/06 5:34p Ambikas
+//
+// 2 12/02/05 7:44p Ambikas
+//
+// 1 11/11/05 2:07p Ambikas
+//
+//**********************************************************************
+//<AMI_FHDR_START>
+//
+// Name: Terminal.sd
+//
+// Description: This is the setup page 'Serial Port Console Redirection.'
+// The link to the page is in the setup 'Advanced' tab.
+//
+//<AMI_FHDR_END>
+//**********************************************************************
+
+#ifdef FORM_SET_TYPEDEF
+#include "TerminalSetupVar.h"
+#endif
+
+//Initialize Macro Arguments
+#define PORT_NUM 0
+#define DEFAULT_CONSOLE_REDIRECTION_ENABLE 0
+
+#if EFI_SPECIFICATION_VERSION>0x20000
+#define TERMINAL_PORT0 0
+#define TERMINAL_PORT1 1
+#define TERMINAL_PORT2 2
+#define TERMINAL_PORT3 3
+#define TERMINAL_PORT4 4
+#define TERMINAL_PORT5 5
+#define TERMINAL_PORT6 6
+#define TERMINAL_PORT7 7
+#define TERMINAL_PORT8 8
+#define TERMINAL_PORT9 9
+#else
+#define TERMINAL_PORT0 1
+#define TERMINAL_PORT1 2
+#define TERMINAL_PORT2 3
+#define TERMINAL_PORT3 4
+#define TERMINAL_PORT4 5
+#define TERMINAL_PORT5 6
+#define TERMINAL_PORT6 7
+#define TERMINAL_PORT7 8
+#define TERMINAL_PORT8 9
+#define TERMINAL_PORT9 10
+#endif
+#ifdef SETUP_DATA_DEFINITION
+ #if (TOTAL_SERIAL_PORTS > 0)
+
+ UINT8 BaudRate[ TOTAL_SERIAL_PORTS ];
+ UINT8 DataBits[ TOTAL_SERIAL_PORTS ];
+ UINT8 Parity[ TOTAL_SERIAL_PORTS ];
+ UINT8 StopBits[ TOTAL_SERIAL_PORTS ];
+ UINT8 FlowControl[ TOTAL_SERIAL_PORTS ];
+ UINT8 LoopbackEnable[ TOTAL_SERIAL_PORTS ];
+ UINT8 ConsoleRedirectionEnable[ TOTAL_SERIAL_PORTS ];
+ UINT8 TerminalType[ TOTAL_SERIAL_PORTS ];
+ UINT8 VtUtf8[ TOTAL_SERIAL_PORTS ];
+ UINT8 RecorderMode[ TOTAL_SERIAL_PORTS ];
+ UINT8 Resolution[ TOTAL_SERIAL_PORTS ];
+ UINT8 LegacyOsResolution[ TOTAL_SERIAL_PORTS ];
+ UINT8 PuttyFunctionKeyPad[ TOTAL_SERIAL_PORTS ];
+ UINT8 RedirectionAfterBiosPost[ TOTAL_SERIAL_PORTS ];
+#if (INSTALL_LEGACY_OS_THROUGH_REMOTE == 1)
+ UINT8 InstallLegacyOSthroughRemote[ TOTAL_SERIAL_PORTS ];
+#endif
+
+ UINT8 AcpiSpcrConsoleRedirectionEnable;
+ UINT8 AcpiSpcrPort;
+ UINT8 AcpiSpcrTerminalType;
+ UINT8 AcpiSpcrBaudRate;
+ UINT8 AcpiSpcrFlowControl;
+ UINT8 AcpiSpcrSetupDummyVar;
+ #endif //(TOTAL_SERIAL_PORTS > 0)
+ UINT8 DebuggerConsoleRedirectionEnable;
+ UINT8 DebuggerTerminalType;
+ UINT8 ComPortforLegacy;
+#endif //ifdef SETUP_DATA_DEFINITION
+
+////////////////////////////////////
+
+#if (TOTAL_SERIAL_PORTS > 0)
+ #ifdef FORM_SET_VARSTORE
+
+ varstore SERIAL_PORTS_ENABLED_VAR,
+ key = AUTO_ID(SERIAL_PORTS_ENABLED_VAR_KEY),
+ name = SerialPortsEnabledVar,
+ guid = TERMINAL_VAR_GUID;
+
+ #endif //FORM_SET_VARSTORE
+#endif //if (TOTAL_SERIAL_PORTS > 0)
+
+ #ifdef FORM_SET_VARSTORE
+
+ varstore DEBUGGER_SERIAL_PORTS_ENABLED_VAR,
+ key = AUTO_ID(DEBUGGER_SERIAL_PORTS_ENABLED_VAR_KEY),
+ name = DebuggerSerialPortsEnabledVar,
+ guid = DEBUGGER_TERMINAL_VAR_GUID;
+
+ #endif //FORM_SET_VARSTORE
+
+#if defined(VFRCOMPILE) && !defined(CONTROLS_ARE_DEFINED)
+#define CONTROL_DEFINITION
+#endif
+#ifdef CONTROL_DEFINITION
+
+#ifdef CONSOLE_REDIRECTION_SUPPORT
+#if CONSOLE_REDIRECTION_SUPPORT == 1
+
+#define TERMINAL_CHECKBOX_DEBUGGERCONSOLEREDIRECTIONENABLE\
+ checkbox varid = SETUP_DATA.DebuggerConsoleRedirectionEnable,\
+ prompt = STRING_TOKEN(STR_CONSOLE_REDIRECTION),\
+ help = STRING_TOKEN(STR_CONSOLE_REDIRECTION_ENABLE_HELP),\
+ flags = DEFAULT_DEBUGGER_CONSOLE_REDIRECTION_ENABLE | MANUFACTURING | RESET_REQUIRED,\
+ endcheckbox;
+
+#define TERMINAL_ONEOF_DEBUGGERTERMINALTYPE\
+ oneof varid = SETUP_DATA.DebuggerTerminalType,\
+ prompt = STRING_TOKEN (STR_DEBUGGER_TERMINAL_TYPE),\
+ help = STRING_TOKEN (STR_DEBUGGER_TERMINAL_TYPE_HELP),\
+ option text = STRING_TOKEN (STR_VT100),\
+ value = 0,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_VT100_PLUS),\
+ value = 1,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_VT_UTF8),\
+ value = 2,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_ANSI),\
+ value = 3,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ endoneof;
+#else
+ #define TERMINAL_CHECKBOX_DEBUGGERCONSOLEREDIRECTIONENABLE
+ #define TERMINAL_ONEOF_DEBUGGERTERMINALTYPE
+#endif // END #if CONSOLE_REDIRECTION_SUPPORT == 1
+#else
+ #define TERMINAL_CHECKBOX_DEBUGGERCONSOLEREDIRECTIONENABLE
+ #define TERMINAL_ONEOF_DEBUGGERTERMINALTYPE
+#endif // END #ifdef CONSOLE_REDIRECTION_SUPPORT
+
+//---------------------------------------------------------------------------
+// DEFINES USED IN PORT_SUB_PAGE MACRO START
+//---------------------------------------------------------------------------
+
+#if (TOTAL_SERIAL_PORTS > 0)
+
+#define TERMINAL_ONEOF_TERMINALTYPE(PORT_NUM)\
+ oneof varid = SETUP_DATA.TerminalType[PORT_NUM],\
+ prompt = STRING_TOKEN (STR_TERMINAL_TYPE),\
+ help = STRING_TOKEN (STR_TERMINAL_TYPE_HELP),\
+ option text = STRING_TOKEN (STR_VT100),\
+ value = 0,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_VT100_PLUS),\
+ value = 1,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_VT_UTF8),\
+ value = 2,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_ANSI),\
+ value = 3,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ endoneof;
+
+#define TERMINAL_ONEOF_BAUDRATE(PORT_NUM)\
+ oneof varid = SETUP_DATA.BaudRate[PORT_NUM],\
+ prompt = STRING_TOKEN (STR_BAUD_RATE),\
+ help = STRING_TOKEN (STR_BAUD_RATE_HELP),\
+ option text = STRING_TOKEN (STR_9600),\
+ value = 3,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_19200),\
+ value = 4,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_38400),\
+ value = 5,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_57600),\
+ value = 6,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_115200),\
+ value = 7,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ endoneof;
+
+#define TERMINAL_ONEOF_DATABITS(PORT_NUM)\
+ oneof varid = SETUP_DATA.DataBits[PORT_NUM],\
+ prompt = STRING_TOKEN (STR_DATA_BITS),\
+ help = STRING_TOKEN (STR_DATA_BITS_HELP),\
+ option text = STRING_TOKEN (STR_7),\
+ value = 7,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_8),\
+ value = 8,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ endoneof;
+
+#define TERMINAL_ONEOF_PARITY(PORT_NUM)\
+ oneof varid = SETUP_DATA.Parity[PORT_NUM],\
+ prompt = STRING_TOKEN (STR_PARITY),\
+ help = STRING_TOKEN (STR_PARITY_HELP),\
+ option text = STRING_TOKEN (STR_NONE),\
+ value = 1,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_EVEN),\
+ value = 2,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_ODD),\
+ value = 3,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_MARK),\
+ value = 4,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_SPACE),\
+ value = 5,\
+ flags = 0;\
+ endoneof;
+
+#define TERMINAL_ONEOF_STOPBITS(PORT_NUM)\
+ oneof varid = SETUP_DATA.StopBits[PORT_NUM],\
+ prompt = STRING_TOKEN (STR_STOP_BITS),\
+ help = STRING_TOKEN (STR_STOP_BITS_HELP),\
+ option text = STRING_TOKEN (STR_1),\
+ value = 1,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_2),\
+ value = 3,\
+ flags = 0;\
+ endoneof;
+
+#define TERMINAL_ONEOF_FLOWCONTROL(PORT_NUM)\
+ oneof varid = SETUP_DATA.FlowControl[PORT_NUM],\
+ prompt = STRING_TOKEN (STR_FLOW_CTRL),\
+ help = STRING_TOKEN (STR_FLOW_CTRL_HELP),\
+ option text = STRING_TOKEN (STR_NONE),\
+ value = 0,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_HARDWARE_FLOW_CTRL),\
+ value = HARDWARE_FLOW_CONTROL_SETUP_OPTION,\
+ flags = 0;\
+ endoneof;
+
+#define TERMINAL_ONEOF_VTUTF8(PORT_NUM)\
+ checkbox varid = SETUP_DATA.VtUtf8[PORT_NUM],\
+ prompt = STRING_TOKEN(STR_TERMINAL_VTUTF8),\
+ help = STRING_TOKEN(STR_TERMINAL_VTUTF8_HELP),\
+ flags = VTUTF8_ENABLE | MANUFACTURING | RESET_REQUIRED,\
+ endcheckbox;
+
+#define TERMINAL_ONEOF_RECORDERMODE(PORT_NUM)\
+ checkbox varid = SETUP_DATA.RecorderMode[PORT_NUM],\
+ prompt = STRING_TOKEN(STR_TERMINAL_RECORDER_MODE),\
+ help = STRING_TOKEN(STR_TERMINAL_RECORDER_MODE_HELP),\
+ flags = RECORDER_MODE_ENABLE | MANUFACTURING | RESET_REQUIRED,\
+ endcheckbox;
+
+#define TERMINAL_ONEOF_RESOLUTION(PORT_NUM)\
+ checkbox varid = SETUP_DATA.Resolution[PORT_NUM],\
+ prompt = STRING_TOKEN(STR_TERMINAL_RESOLUTION),\
+ help = STRING_TOKEN(STR_TERMINAL_RESOLUTION_HELP),\
+ flags = EXTENDED_RESOLUTION_ENABLE | MANUFACTURING | RESET_REQUIRED,\
+ endcheckbox;
+
+#define TERMINAL_ONEOF_LEGACYOSRESOLUTION(PORT_NUM)\
+ oneof varid = SETUP_DATA.LegacyOsResolution[PORT_NUM],\
+ prompt = STRING_TOKEN (STR_LEGACYOS_RESOLUTION),\
+ help = STRING_TOKEN (STR_LEGACYOS_RESOLUTION_HELP),\
+ option text = STRING_TOKEN (STR_80_24),\
+ value = 0,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_80_25),\
+ value = 1,\
+ flags = 0;\
+ endoneof;
+
+#define TERMINAL_ONEOF_PUTTYFUNCTIONKEYPAD(PORT_NUM)\
+ oneof varid = SETUP_DATA.PuttyFunctionKeyPad[PORT_NUM],\
+ prompt = STRING_TOKEN (STR_PUTTYFUNCTION_KEYPAD),\
+ help = STRING_TOKEN (STR_PUTTYFUNCTION_KEYPAD_HELP),\
+ option text = STRING_TOKEN (STR_VT100), \
+ value = PUTTY_VT100, \
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED; \
+ option text = STRING_TOKEN (STR_LINUX), \
+ value = PUTTY_LINUX, \
+ flags = 0; \
+ option text = STRING_TOKEN (STR_XTERMR6), \
+ value = PUTTY_XTERMR6, \
+ flags = 0; \
+ option text = STRING_TOKEN (STR_SCO), \
+ value = PUTTY_SCO, \
+ flags = 0; \
+ option text = STRING_TOKEN (STR_ESCN), \
+ value = PUTTY_ESCN, \
+ flags = 0; \
+ option text = STRING_TOKEN (STR_VT400), \
+ value = PUTTY_VT400, \
+ flags = 0; \
+ endoneof;
+
+#if (INSTALL_LEGACY_OS_THROUGH_REMOTE == 1)
+#define TERMINAL_ONEOF_INSTALLLEGACYOSTHROUGHREMOTE(PORT_NUM)\
+ checkbox varid = SETUP_DATA.InstallLegacyOSthroughRemote[PORT_NUM],\
+ prompt = STRING_TOKEN(STR_FORCE_SYSTEM_VGA_TO_TEXT_MODE),\
+ help = STRING_TOKEN(STR_FORCE_SYSTEM_VGA_TO_TEXT_MODE_HELP),\
+ flags = INSTALL_LEGACY_OS_THROUGH_REMOTE | MANUFACTURING | RESET_REQUIRED,\
+ endcheckbox;
+#else
+#define TERMINAL_ONEOF_INSTALLLEGACYOSTHROUGHREMOTE(PORT_NUM)
+#endif
+
+#define TERMINAL_ONEOF_REDIRECTIONAFTERBIOSENABLE(PORT_NUM)\
+ oneof varid = SETUP_DATA.RedirectionAfterBiosPost[PORT_NUM],\
+ prompt = STRING_TOKEN (STR_REDIRECTION_AFTER_BIOS_POST),\
+ help = STRING_TOKEN (STR_REDIRECTION_AFTER_BIOS_POST_HELP),\
+ option text = STRING_TOKEN (STR_ALWAY_ENABLE),\
+ value = 0,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_BOOTLOADER),\
+ value = 1,\
+ flags = 0;\
+ endoneof;
+//---------------------------------------------------------------------------
+// DEFINES USED IN PORT_SUB_PAGE MACRO END
+//---------------------------------------------------------------------------
+
+//---------------------------------------------------------------------------
+// DEFINES USED IN PORT_CONTROLS and PORT_CONTROLS_PCI MACRO START
+//---------------------------------------------------------------------------
+
+#define TERMINAL_ONEOF_CONSOLEREDIRECTIONENABLE(PORT_NUM,DEFAULT_CONSOLE_REDIRECTION_ENABLE)\
+ checkbox varid = SETUP_DATA.ConsoleRedirectionEnable[PORT_NUM],\
+ prompt = STRING_TOKEN(STR_CONSOLE_REDIRECTION),\
+ help = STRING_TOKEN(STR_CONSOLE_REDIRECTION_ENABLE_HELP),\
+ flags = DEFAULT_CONSOLE_REDIRECTION_ENABLE | MANUFACTURING | RESET_REQUIRED,\
+ endcheckbox;
+
+#endif
+//---------------------------------------------------------------------------
+// DEFINES USED IN PORT_CONTROLS and PORT_CONTROLS_PCI MACRO END
+//---------------------------------------------------------------------------
+
+#if (TOTAL_SERIAL_PORTS > 0)
+
+#define TERMINAL_CHECKBOX_ACPISPCRCONSOLEREDIRECTIONENABLE\
+ checkbox varid = SETUP_DATA.AcpiSpcrConsoleRedirectionEnable,\
+ prompt = STRING_TOKEN(STR_CONSOLE_REDIRECTION),\
+ help = STRING_TOKEN(STR_CONSOLE_REDIRECTION_ENABLE_HELP),\
+ flags = DEFAULT_ACPI_SPCR_CONSOLE_REDIRECTION_ENABLE | MANUFACTURING | RESET_REQUIRED,\
+ endcheckbox;
+
+#define TERMINAL_ONEOF_ACPISPCRTERMINALTYPE\
+ oneof varid = SETUP_DATA.AcpiSpcrTerminalType,\
+ prompt = STRING_TOKEN (STR_TERMINAL_TYPE),\
+ help = STRING_TOKEN (STR_OUT_OF_BAND_MGMT_TERMINAL_TYPE_HELP),\
+ option text = STRING_TOKEN (STR_VT100),\
+ value = 0,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_VT100_PLUS),\
+ value = 1,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_VT_UTF8),\
+ value = 2,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_ANSI),\
+ value = 3,\
+ flags = 0;\
+ endoneof;
+
+#define TERMINAL_ONEOF_ACPISPCRBAUDRATE\
+ oneof varid = SETUP_DATA.AcpiSpcrBaudRate,\
+ prompt = STRING_TOKEN (STR_BAUD_RATE),\
+ help = STRING_TOKEN (STR_BAUD_RATE_HELP),\
+ option text = STRING_TOKEN (STR_9600),\
+ value = 3,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_19200),\
+ value = 4,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_57600),\
+ value = 6,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_115200),\
+ value = 7,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ endoneof;
+
+#define TERMINAL_ONEOF_ACPISPCRFLOWCONTROL\
+ oneof varid = SETUP_DATA.AcpiSpcrFlowControl,\
+ prompt = STRING_TOKEN (STR_FLOW_CTRL),\
+ help = STRING_TOKEN (STR_FLOW_CTRL_HELP),\
+ option text = STRING_TOKEN (STR_NONE),\
+ value = 0,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_HARDWARE_FLOW_CTRL),\
+ value = HARDWARE_FLOW_CONTROL_SETUP_OPTION,\
+ flags = 0;\
+ option text = STRING_TOKEN (STR_SOFTWARE_FLOW_CTRL),\
+ value = SOFTWARE_FLOW_CONTROL_SETUP_OPTION,\
+ flags = 0;\
+ endoneof;
+
+#else
+ #define TERMINAL_CHECKBOX_ACPISPCRCONSOLEREDIRECTIONENABLE
+ #define TERMINAL_ONEOF_ACPISPCRTERMINALTYPE
+ #define TERMINAL_ONEOF_ACPISPCRBAUDRATE
+ #define TERMINAL_ONEOF_ACPISPCRFLOWCONTROL
+#endif // END #if (TOTAL_SERIAL_PORTS > 0)
+
+
+#if (TOTAL_SERIAL_PORTS > 0)
+
+//---------------------------------------------------------------------------
+// PCI PORT OPTION TEXT INDEX DEFINITION
+//---------------------------------------------------------------------------
+
+#if (TOTAL_PCI_SERIAL_PORTS > 0) && (TOTAL_SIO_SERIAL_PORTS == 0)
+
+#define PCI_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_PCI_SERIAL_PORT0),\
+ value = PCI_SERIAL_PORT_0_INDEX,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;
+
+#else
+
+#define PCI_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_PCI_SERIAL_PORT0),\
+ value = PCI_SERIAL_PORT_0_INDEX,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_PCI_SERIAL_PORTS > 0) && (TOTAL_SIO_SERIAL_PORTS == 0)
+
+
+//---------------------------------------------------------------------------
+// PCI PORT OPTION TEXT DEFINITION START
+//---------------------------------------------------------------------------
+
+#if (TOTAL_PCI_SERIAL_PORTS == 0)
+
+ #define PCI_PORT_OPTION_TEXT
+
+#endif // END #if (TOTAL_PCI_SERIAL_PORTS == 0)
+
+#if (TOTAL_PCI_SERIAL_PORTS == 1)
+
+#define PCI_PORT_OPTION_TEXT\
+ PCI_PORT_OPTION_TEXT_INDEX
+
+#endif // END #if (TOTAL_PCI_SERIAL_PORTS == 1)
+
+#if (TOTAL_PCI_SERIAL_PORTS == 2)
+
+#define PCI_PORT_OPTION_TEXT\
+ PCI_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_PCI_SERIAL_PORT1),\
+ value = PCI_SERIAL_PORT_1_INDEX,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_PCI_SERIAL_PORTS == 2)
+
+#if (TOTAL_PCI_SERIAL_PORTS == 3)
+
+#define PCI_PORT_OPTION_TEXT\
+ PCI_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_PCI_SERIAL_PORT1),\
+ value = PCI_SERIAL_PORT_1_INDEX,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_PCI_SERIAL_PORT2),\
+ value = PCI_SERIAL_PORT_2_INDEX,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_PCI_SERIAL_PORTS == 3)
+
+#if (TOTAL_PCI_SERIAL_PORTS == 4)
+
+#define PCI_PORT_OPTION_TEXT\
+ PCI_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_PCI_SERIAL_PORT1),\
+ value = PCI_SERIAL_PORT_1_INDEX,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_PCI_SERIAL_PORT2),\
+ value = PCI_SERIAL_PORT_2_INDEX,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_PCI_SERIAL_PORT3),\
+ value = PCI_SERIAL_PORT_3_INDEX,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_PCI_SERIAL_PORTS == 4)
+
+//---------------------------------------------------------------------------
+// PCI PORT OPTION TEXT DEFINITION END
+//---------------------------------------------------------------------------
+
+//---------------------------------------------------------------------------
+// SIO PORT OPTION TEXT INDEX DEFINITION START
+//---------------------------------------------------------------------------
+
+#if (TOTAL_SIO_SERIAL_PORTS > 0)
+
+#define SIO_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT0),\
+ value = TERMINAL_PORT0,\
+ flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS > 0)
+
+//---------------------------------------------------------------------------
+// SIO PORT OPTION TEXT INDEX DEFINITION END
+//---------------------------------------------------------------------------
+
+//---------------------------------------------------------------------------
+// SIO PORT OPTION TEXT DEFINITION START
+//---------------------------------------------------------------------------
+
+#if (TOTAL_SIO_SERIAL_PORTS == 0)
+
+ #define SIO_PORT_OPTION_TEXT
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS == 0)
+
+#if (TOTAL_SIO_SERIAL_PORTS == 1)
+
+#define SIO_PORT_OPTION_TEXT\
+ SIO_PORT_OPTION_TEXT_INDEX
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS == 1)
+
+#if (TOTAL_SIO_SERIAL_PORTS == 2)
+
+#define SIO_PORT_OPTION_TEXT\
+ SIO_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT1),\
+ value = TERMINAL_PORT1,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS == 2)
+
+#if (TOTAL_SIO_SERIAL_PORTS == 3)
+
+#define SIO_PORT_OPTION_TEXT\
+ SIO_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT1),\
+ value = TERMINAL_PORT1,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT2),\
+ value = TERMINAL_PORT2,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS == 3)
+
+#if (TOTAL_SIO_SERIAL_PORTS == 4)
+
+#define SIO_PORT_OPTION_TEXT\
+ SIO_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT1),\
+ value = TERMINAL_PORT1,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT2),\
+ value = TERMINAL_PORT2,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT3),\
+ value = TERMINAL_PORT3,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS == 4)
+
+#if (TOTAL_SIO_SERIAL_PORTS == 5)
+
+#define SIO_PORT_OPTION_TEXT\
+ SIO_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT1),\
+ value = TERMINAL_PORT1,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT2),\
+ value = TERMINAL_PORT2,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT3),\
+ value = TERMINAL_PORT3,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT4),\
+ value = TERMINAL_PORT4,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS == 5)
+
+#if (TOTAL_SIO_SERIAL_PORTS == 6)
+
+#define SIO_PORT_OPTION_TEXT\
+ SIO_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT1),\
+ value = TERMINAL_PORT1,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT2),\
+ value = TERMINAL_PORT2,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT3),\
+ value = TERMINAL_PORT3,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT4),\
+ value = TERMINAL_PORT4,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT5),\
+ value = TERMINAL_PORT5,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS == 6)
+
+#if (TOTAL_SIO_SERIAL_PORTS == 7)
+
+#define SIO_PORT_OPTION_TEXT\
+ SIO_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT1),\
+ value = TERMINAL_PORT1,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT2),\
+ value = TERMINAL_PORT2,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT3),\
+ value = TERMINAL_PORT3,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT4),\
+ value = TERMINAL_PORT4,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT5),\
+ value = TERMINAL_PORT5,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT6),\
+ value = TERMINAL_PORT6,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS == 7)
+
+#if (TOTAL_SIO_SERIAL_PORTS == 8)
+
+#define SIO_PORT_OPTION_TEXT\
+ SIO_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT1),\
+ value = TERMINAL_PORT1,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT2),\
+ value = TERMINAL_PORT2,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT3),\
+ value = TERMINAL_PORT3,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT4),\
+ value = TERMINAL_PORT4,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT5),\
+ value = TERMINAL_PORT5,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT6),\
+ value = TERMINAL_PORT6,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT7),\
+ value = TERMINAL_PORT7,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS == 8)
+
+#if (TOTAL_SIO_SERIAL_PORTS == 9)
+
+#define SIO_PORT_OPTION_TEXT\
+ SIO_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT1),\
+ value = TERMINAL_PORT1,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT2),\
+ value = TERMINAL_PORT2,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT3),\
+ value = TERMINAL_PORT3,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT3),\
+ value = TERMINAL_PORT3,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT4),\
+ value = TERMINAL_PORT4,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT5),\
+ value = TERMINAL_PORT5,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT6),\
+ value = TERMINAL_PORT6,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT7),\
+ value = TERMINAL_PORT7,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT8),\
+ value = TERMINAL_PORT8,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS == 9)
+
+#if (TOTAL_SIO_SERIAL_PORTS == 10)
+
+#define SIO_PORT_OPTION_TEXT\
+ SIO_PORT_OPTION_TEXT_INDEX\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT1),\
+ value = TERMINAL_PORT1,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT2),\
+ value = TERMINAL_PORT2,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT3),\
+ value = TERMINAL_PORT3,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT4),\
+ value = TERMINAL_PORT4,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT5),\
+ value = TERMINAL_PORT5,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT6),\
+ value = TERMINAL_PORT6,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT7),\
+ value = TERMINAL_PORT7,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT8),\
+ value = TERMINAL_PORT8,\
+ flags = RESET_REQUIRED;\
+ option text = STRING_TOKEN (STR_SIO_SERIAL_PORT9),\
+ value = TERMINAL_PORT9,\
+ flags = RESET_REQUIRED;
+
+#endif // END #if (TOTAL_SIO_SERIAL_PORTS == 10)
+
+#endif // END #if ()
+
+//---------------------------------------------------------------------------
+// SIO PORT OPTION TEXT DEFINITION END
+//---------------------------------------------------------------------------
+
+
+//---------------------------------------------------------------------------
+// AcpiSpcrPort VARIABLE DEFINITION START
+//---------------------------------------------------------------------------
+
+#if (TOTAL_SERIAL_PORTS > 0)
+
+#define TERMINAL_ONEOF_ACPISPCRPORT\
+ oneof varid = SETUP_DATA.AcpiSpcrPort,\
+ prompt = STRING_TOKEN (STR_OUT_OF_BAND_MANAGEMENT_PORT),\
+ help = STRING_TOKEN (STR_OUT_OF_BAND_MANAGEMENT_PORT_HELP),\
+ SIO_PORT_OPTION_TEXT\
+ PCI_PORT_OPTION_TEXT\
+ endoneof;
+
+#endif // ((TOTAL_SERIAL_PORTS > 0)
+
+#ifndef TERMINAL_ONEOF_ACPISPCRPORT
+ #define TERMINAL_ONEOF_ACPISPCRPORT
+#endif // END #ifndef TERMINAL_ONEOF_ACPISPCRPORT
+
+//---------------------------------------------------------------------------
+// AcpiSpcrPort VARIABLE DEFINITION END
+//---------------------------------------------------------------------------
+
+//---------------------------------------------------------------------------
+// ComPortforLegacy VARIABLE DEFINITION START
+//---------------------------------------------------------------------------
+
+#if (TOTAL_SERIAL_PORTS > 1)
+
+#define TERMINAL_ONEOF_LEGACYPORT\
+ oneof varid = SETUP_DATA.ComPortforLegacy,\
+ prompt = STRING_TOKEN (STR_COM_FOR_LEGACY_REDIRECTION),\
+ help = STRING_TOKEN (STR_COM_FOR_LEGACY_REDIRECTION_HELP),\
+ SIO_PORT_OPTION_TEXT\
+ PCI_PORT_OPTION_TEXT\
+ endoneof;
+
+#endif // END #if (TOTAL_SERIAL_PORTS > 1)
+
+#ifndef TERMINAL_ONEOF_LEGACYPORT
+ #define TERMINAL_ONEOF_LEGACYPORT
+#endif // END #ifndef TERMINAL_ONEOF_LEGACYPORT
+
+//---------------------------------------------------------------------------
+// ComPortforLegacy VARIABLE DEFINITION END
+//---------------------------------------------------------------------------
+
+#endif // END #ifdef CONTROL_DEFINITION
+
+#ifdef CONTROLS_WITH_DEFAULTS
+ TERMINAL_CHECKBOX_DEBUGGERCONSOLEREDIRECTIONENABLE
+ TERMINAL_ONEOF_DEBUGGERTERMINALTYPE
+#if (TOTAL_SERIAL_PORTS > 0)
+ TERMINAL_ONEOF_TERMINALTYPE(PORT_NUM)
+ TERMINAL_ONEOF_BAUDRATE(PORT_NUM)
+ TERMINAL_ONEOF_DATABITS(PORT_NUM)
+ TERMINAL_ONEOF_PARITY(PORT_NUM)
+ TERMINAL_ONEOF_STOPBITS(PORT_NUM)
+ TERMINAL_ONEOF_FLOWCONTROL(PORT_NUM)
+ TERMINAL_ONEOF_VTUTF8(PORT_NUM)
+ TERMINAL_ONEOF_RECORDERMODE(PORT_NUM)
+ TERMINAL_ONEOF_RESOLUTION(PORT_NUM)
+ TERMINAL_ONEOF_LEGACYOSRESOLUTION(PORT_NUM)
+ TERMINAL_ONEOF_PUTTYFUNCTIONKEYPAD(PORT_NUM)
+ TERMINAL_ONEOF_REDIRECTIONAFTERBIOSENABLE(PORT_NUM)
+#if (INSTALL_LEGACY_OS_THROUGH_REMOTE == 1)
+ TERMINAL_ONEOF_INSTALLLEGACYOSTHROUGHREMOTE(PORT_NUM)
+#endif
+ TERMINAL_ONEOF_CONSOLEREDIRECTIONENABLE(PORT_NUM,DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+ TERMINAL_CHECKBOX_ACPISPCRCONSOLEREDIRECTIONENABLE
+ TERMINAL_ONEOF_ACPISPCRTERMINALTYPE
+ TERMINAL_ONEOF_ACPISPCRBAUDRATE
+ TERMINAL_ONEOF_ACPISPCRFLOWCONTROL
+ TERMINAL_ONEOF_ACPISPCRPORT
+#endif
+#endif // END #ifdef CONTROLS_WITH_DEFAULTS
+////////////////////////////////////
+
+#ifdef ADVANCED_FORM_SET
+
+#ifndef SUPPRESS_GRAYOUT_ENDIF //old Core
+#define SUPPRESS_GRAYOUT_ENDIF endif;
+#endif
+
+
+ #ifdef FORM_SET_GOTO
+ goto TERMINAL_FORM_ID,
+ prompt = STRING_TOKEN(STR_TERMINAL_FORM_TITLE),
+ help = STRING_TOKEN(STR_TERMINAL_FORM_TITLE);
+ #endif
+
+
+ #ifdef FORM_SET_FORM
+
+ #ifndef TERMINAL_FORM_MAIN
+ #define TERMINAL_FORM_MAIN
+ form formid = AUTO_ID(TERMINAL_FORM_ID),
+ title = STRING_TOKEN(STR_TERMINAL_FORM_TITLE);
+
+////////////////////////////////////
+
+#if (TOTAL_SERIAL_PORTS == 0)
+
+ SEPARATOR
+ SUBTITLE(STRING_TOKEN(STR_NO_SERIAL_PORTS_PRESENT))
+
+#else
+
+////////////////////////////////////
+
+#define PORT_CONTROLS(SUBTITLE_STR_TOKEN, FORM_ID, PORT_NUM,DEFAULT_CONSOLE_REDIRECTION_ENABLE) \
+ SEPARATOR \
+ SUBTITLE(SUBTITLE_STR_TOKEN) \
+\
+ suppressif ideqval SERIAL_PORTS_ENABLED_VAR.PortsEnabled[PORT_NUM]==1; \
+ text \
+ help = STRING_TOKEN(STR_BLANK), \
+ text = STRING_TOKEN(STR_CONSOLE_REDIRECTION), \
+ text = STRING_TOKEN(STR_PORT_IS_DISABLED), \
+ flags = 0, \
+ key = 0; \
+ endif; \
+\
+ suppressif ideqval SERIAL_PORTS_ENABLED_VAR.PortsEnabled[PORT_NUM]==0; \
+ TERMINAL_ONEOF_CONSOLEREDIRECTIONENABLE(PORT_NUM,DEFAULT_CONSOLE_REDIRECTION_ENABLE) \
+ endif; \
+\
+ suppressif ideqval SERIAL_PORTS_ENABLED_VAR.PortsEnabled[PORT_NUM]==0; \
+ grayoutif ideqval SETUP_DATA.ConsoleRedirectionEnable[PORT_NUM] == 0; \
+ goto FORM_ID, \
+ prompt = STRING_TOKEN(STR_CONSOLE_REDIRECTION_SETTINGS), \
+ help = STRING_TOKEN(STR_CONSOLE_REDIRECTION_SETTINGS_HELP); \
+ SUPPRESS_GRAYOUT_ENDIF
+
+#define PORT_CONTROLS_PCI(SUBTITLE_STR_TOKEN, FORM_ID, PORT_NUM, DEFAULT_PCI_CONSOLE_REDIRECTION_ENABLE) \
+ SEPARATOR \
+ SUBTITLE(SUBTITLE_STR_TOKEN) \
+\
+ suppressif ideqval SERIAL_PORTS_ENABLED_VAR.PortsEnabled[PORT_NUM]==1; \
+ text \
+ help = STRING_TOKEN(STR_BLANK), \
+ text = STRING_TOKEN(STR_CONSOLE_REDIRECTION), \
+ text = STRING_TOKEN(STR_PORT_IS_DISABLED), \
+ flags = 0, \
+ key = 0; \
+ endif; \
+\
+ suppressif ideqval SERIAL_PORTS_ENABLED_VAR.PortsEnabled[PORT_NUM]==0; \
+ TERMINAL_ONEOF_CONSOLEREDIRECTIONENABLE(PORT_NUM,DEFAULT_PCI_CONSOLE_REDIRECTION_ENABLE) \
+ endif; \
+\
+ suppressif ideqval SERIAL_PORTS_ENABLED_VAR.PortsEnabled[PORT_NUM]==0; \
+ grayoutif ideqval SETUP_DATA.ConsoleRedirectionEnable[PORT_NUM] == 0; \
+ goto FORM_ID, \
+ prompt = STRING_TOKEN(STR_CONSOLE_REDIRECTION_SETTINGS), \
+ help = STRING_TOKEN(STR_CONSOLE_REDIRECTION_SETTINGS_HELP); \
+ SUPPRESS_GRAYOUT_ENDIF
+
+#if (TOTAL_SIO_SERIAL_PORTS > 0)
+ PORT_CONTROLS(STRING_TOKEN(STR_SIO_SERIAL_PORT0), COM0_FORM_ID, TERMINAL_PORT0, COM0_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 1)
+ PORT_CONTROLS(STRING_TOKEN(STR_SIO_SERIAL_PORT1), COM1_FORM_ID, TERMINAL_PORT1, COM1_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 2)
+ PORT_CONTROLS(STRING_TOKEN(STR_SIO_SERIAL_PORT2), COM2_FORM_ID, TERMINAL_PORT2, COM2_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 3)
+ PORT_CONTROLS(STRING_TOKEN(STR_SIO_SERIAL_PORT3), COM3_FORM_ID, TERMINAL_PORT3, COM3_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 4)
+ PORT_CONTROLS(STRING_TOKEN(STR_SIO_SERIAL_PORT4), COM4_FORM_ID, TERMINAL_PORT4, COM4_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 5)
+ PORT_CONTROLS(STRING_TOKEN(STR_SIO_SERIAL_PORT5), COM5_FORM_ID, TERMINAL_PORT5, COM5_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 6)
+ PORT_CONTROLS(STRING_TOKEN(STR_SIO_SERIAL_PORT6), COM6_FORM_ID, TERMINAL_PORT6, COM6_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 7)
+ PORT_CONTROLS(STRING_TOKEN(STR_SIO_SERIAL_PORT7), COM7_FORM_ID, TERMINAL_PORT7, COM7_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 8)
+ PORT_CONTROLS(STRING_TOKEN(STR_SIO_SERIAL_PORT8), COM8_FORM_ID, TERMINAL_PORT8, COM8_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 9)
+ PORT_CONTROLS(STRING_TOKEN(STR_SIO_SERIAL_PORT9), COM9_FORM_ID, TERMINAL_PORT9, COM9_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+////////////////////////////////////
+
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+ PORT_CONTROLS_PCI(STRING_TOKEN(STR_PCI_SERIAL_PORT0), PCI_SERIAL0_FORM_ID,
+ PCI_SERIAL_PORT_0_INDEX, PCI0_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_PCI_SERIAL_PORTS > 1)
+ PORT_CONTROLS_PCI(STRING_TOKEN(STR_PCI_SERIAL_PORT1), PCI_SERIAL1_FORM_ID,
+ PCI_SERIAL_PORT_1_INDEX, PCI1_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_PCI_SERIAL_PORTS > 2)
+ PORT_CONTROLS_PCI(STRING_TOKEN(STR_PCI_SERIAL_PORT2), PCI_SERIAL2_FORM_ID,
+ PCI_SERIAL_PORT_2_INDEX, PCI2_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#if (TOTAL_PCI_SERIAL_PORTS > 3)
+ PORT_CONTROLS_PCI(STRING_TOKEN(STR_PCI_SERIAL_PORT3), PCI_SERIAL3_FORM_ID,
+ PCI_SERIAL_PORT_3_INDEX, PCI3_DEFAULT_CONSOLE_REDIRECTION_ENABLE)
+#endif
+
+#endif
+////////////////////////////////////
+
+ SEPARATOR
+#ifdef CONSOLE_REDIRECTION_SUPPORT
+#if CONSOLE_REDIRECTION_SUPPORT == 1
+
+ SUBTITLE(STRING_TOKEN(STR_DEBUGGER_TERMINAL))
+
+ suppressif ideqval DEBUGGER_SERIAL_PORTS_ENABLED_VAR.PortEnabled == 1;
+ text
+ help = STRING_TOKEN(STR_BLANK),
+ text = STRING_TOKEN(STR_CONSOLE_REDIRECTION),
+ text = STRING_TOKEN(STR_PORT_IS_DISABLED),
+ flags = 0,
+ key = 0;
+ endif;
+
+
+ suppressif ideqval DEBUGGER_SERIAL_PORTS_ENABLED_VAR.PortEnabled==0;
+ TERMINAL_CHECKBOX_DEBUGGERCONSOLEREDIRECTIONENABLE
+ endif;
+
+ suppressif ideqval DEBUGGER_SERIAL_PORTS_ENABLED_VAR.PortEnabled==0;
+ grayoutif ideqval SETUP_DATA.DebuggerConsoleRedirectionEnable == 0;
+ TERMINAL_ONEOF_DEBUGGERTERMINALTYPE
+ SUPPRESS_GRAYOUT_ENDIF
+
+ SEPARATOR
+#endif
+#endif
+
+
+#if (TOTAL_SERIAL_PORTS > 0)
+ SUBTITLE(STRING_TOKEN(STR_LEGACY_CONSOLE_REDIRECTION))
+
+ goto LEGACYSREDIR_FORM_ID,
+ prompt = STRING_TOKEN(STR_LEGACY_CONSOLE_REDIRECTION_SETTINGS),
+ help = STRING_TOKEN(STR_LEGACY_CONSOLE_REDIRECTION_SETTINGS);
+
+ SEPARATOR
+#endif
+
+#if (TOTAL_SERIAL_PORTS > 0)
+ SUBTITLE(STRING_TOKEN(STR_SERIAL_PORT_FOR_OUT_OF_BAND_MGMT))
+#else
+ SUBTITLE(STRING_TOKEN(STR_NO_SERIAL_PORT_FOR_OUT_OF_BAND_MGMT))
+#endif
+
+ SUBTITLE(STRING_TOKEN(STR_EMERGENCY_MANAGEMENT_SERIVCES_EMS))
+
+#if (TOTAL_SERIAL_PORTS > 0)
+
+ TERMINAL_CHECKBOX_ACPISPCRCONSOLEREDIRECTIONENABLE
+
+ grayoutif ideqval SETUP_DATA.AcpiSpcrConsoleRedirectionEnable == 0;
+ goto SPCR_FORM_ID,
+ prompt = STRING_TOKEN(STR_CONSOLE_REDIRECTION_SETTINGS),
+ help = STRING_TOKEN(STR_CONSOLE_REDIRECTION_SETTINGS_HELP);
+ endif;
+
+#endif
+ endform;
+#endif // END #if TERMINAL_FORM_MAIN
+
+ #ifndef TERMINAL_FORM_SPCR
+ #define TERMINAL_FORM_SPCR
+
+ form formid = AUTO_ID(SPCR_FORM_ID),
+ title = STRING_TOKEN(STR_CONSOLE_REDIRECTION_SETTINGS);
+
+#if ((TOTAL_SERIAL_PORTS == 1) && (TOTAL_SIO_SERIAL_PORTS == 1))
+
+ suppressif ideqval SETUP_DATA.AcpiSpcrSetupDummyVar == 0;
+ TERMINAL_ONEOF_ACPISPCRPORT
+ endif;
+
+ text
+ help = STRING_TOKEN(STR_OUT_OF_BAND_MANAGEMENT_PORT_HELP),
+ text = STRING_TOKEN(STR_OUT_OF_BAND_MANAGEMENT_PORT),
+ text = STRING_TOKEN(STR_SIO_SERIAL_PORT0),
+ flags = 0,
+ key = 0;
+
+#endif //if ((TOTAL_SERIAL_PORTS == 1) && (TOTAL_SIO_SERIAL_PORTS == 1))
+
+#if ((TOTAL_SERIAL_PORTS == 1) && (TOTAL_PCI_SERIAL_PORTS == 1))
+
+ suppressif ideqval SETUP_DATA.AcpiSpcrSetupDummyVar == 0;
+ TERMINAL_ONEOF_ACPISPCRPORT
+ endif;
+
+ text
+ help = STRING_TOKEN(STR_OUT_OF_BAND_MANAGEMENT_PORT_HELP),
+ text = STRING_TOKEN(STR_OUT_OF_BAND_MANAGEMENT_PORT),
+ text = STRING_TOKEN(STR_PCI_SERIAL_PORT0),
+ flags = 0,
+ key = 0;
+
+#endif //if ((TOTAL_SERIAL_PORTS == 1) && (TOTAL_PCI_SERIAL_PORTS == 1))
+
+#if (TOTAL_SERIAL_PORTS > 1)
+
+ TERMINAL_ONEOF_ACPISPCRPORT
+
+#endif //if (TOTAL_SERIAL_PORTS > 1)
+
+#if (TOTAL_SERIAL_PORTS > 0)
+
+ grayoutif ideqval SETUP_DATA.AcpiSpcrConsoleRedirectionEnable == 0;
+ TERMINAL_ONEOF_ACPISPCRTERMINALTYPE
+ endif;
+
+ grayoutif ideqval SETUP_DATA.AcpiSpcrConsoleRedirectionEnable == 0;
+ TERMINAL_ONEOF_ACPISPCRBAUDRATE
+ endif;
+
+ grayoutif ideqval SETUP_DATA.AcpiSpcrConsoleRedirectionEnable == 0;
+ TERMINAL_ONEOF_ACPISPCRFLOWCONTROL
+ endif;
+
+ grayoutif ideqval SETUP_DATA.AcpiSpcrConsoleRedirectionEnable == 0;
+ text
+ help = STRING_TOKEN(STR_DATA_BITS_HELP),
+ text = STRING_TOKEN(STR_DATA_BITS),
+ text = STRING_TOKEN(STR_8),
+ flags = 0,
+ key = 0;
+ endif;
+
+ grayoutif ideqval SETUP_DATA.AcpiSpcrConsoleRedirectionEnable == 0;
+ text
+ help = STRING_TOKEN(STR_PARITY_HELP),
+ text = STRING_TOKEN(STR_PARITY),
+ text = STRING_TOKEN(STR_NONE),
+ flags = 0,
+ key = 0;
+ endif;
+
+ grayoutif ideqval SETUP_DATA.AcpiSpcrConsoleRedirectionEnable == 0;
+ text
+ help = STRING_TOKEN(STR_STOP_BITS_HELP),
+ text = STRING_TOKEN(STR_STOP_BITS),
+ text = STRING_TOKEN(STR_1),
+ flags = 0,
+ key = 0;
+ endif;
+
+#endif //if (TOTAL_SERIAL_PORTS > 0)
+
+ endform;
+
+#endif // END #if TERMINAL_FORM_SPCR
+
+#ifndef LEGACYSREDIR_FORM
+#define LEGACYSREDIR_FORM
+
+ form formid = AUTO_ID(LEGACYSREDIR_FORM_ID),
+ title = STRING_TOKEN(STR_LEGACY_CONSOLE_REDIRECTION_SETTINGS);
+
+ TERMINAL_ONEOF_LEGACYPORT
+
+ endform;
+#endif // END #if LEGACYSREDIR_FORM
+
+
+
+
+#endif //ifdef FORM_SET_FORM
+
+
+#define PORT_SUB_PAGE(TITLE_STR_TOKEN, SUBTITLE_STR_TOKEN, \
+ FORM_ID, PORT_NUM) \
+\
+ form formid = FORM_ID, \
+ title = TITLE_STR_TOKEN; \
+\
+ SUBTITLE_STR_TOKEN \
+ SUBTITLE(STRING_TOKEN(STR_CONSOLE_REDIRECTION_SETTINGS)) \
+ SEPARATOR \
+\
+ TERMINAL_ONEOF_TERMINALTYPE(PORT_NUM) \
+\
+ TERMINAL_ONEOF_BAUDRATE(PORT_NUM) \
+\
+ TERMINAL_ONEOF_DATABITS(PORT_NUM) \
+\
+ TERMINAL_ONEOF_PARITY(PORT_NUM) \
+\
+ TERMINAL_ONEOF_STOPBITS(PORT_NUM) \
+\
+ TERMINAL_ONEOF_FLOWCONTROL(PORT_NUM) \
+\
+ TERMINAL_ONEOF_VTUTF8(PORT_NUM) \
+\
+ TERMINAL_ONEOF_RECORDERMODE(PORT_NUM) \
+\
+ TERMINAL_ONEOF_RESOLUTION(PORT_NUM) \
+\
+ TERMINAL_ONEOF_LEGACYOSRESOLUTION(PORT_NUM) \
+\
+ TERMINAL_ONEOF_PUTTYFUNCTIONKEYPAD(PORT_NUM) \
+\
+ TERMINAL_ONEOF_INSTALLLEGACYOSTHROUGHREMOTE(PORT_NUM)\
+\
+ TERMINAL_ONEOF_REDIRECTIONAFTERBIOSENABLE(PORT_NUM)\
+\
+ SEPARATOR \
+\
+ endform;
+
+////////////////////////////////////
+
+#if (TOTAL_SIO_SERIAL_PORTS > 0)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_SIO_SERIAL_PORT0),
+ SUBTITLE(STRING_TOKEN(STR_SIO_SERIAL_PORT0)),
+ AUTO_ID(COM0_FORM_ID), TERMINAL_PORT0)
+ #endif
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 1)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_SIO_SERIAL_PORT1),
+ SUBTITLE(STRING_TOKEN(STR_SIO_SERIAL_PORT1)),
+ AUTO_ID(COM1_FORM_ID), TERMINAL_PORT1)
+ #endif
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 2)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_SIO_SERIAL_PORT2),
+ SUBTITLE(STRING_TOKEN(STR_SIO_SERIAL_PORT2)),
+ AUTO_ID(COM2_FORM_ID), TERMINAL_PORT2)
+ #endif
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 3)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_SIO_SERIAL_PORT3),
+ SUBTITLE(STRING_TOKEN(STR_SIO_SERIAL_PORT3)),
+ AUTO_ID(COM3_FORM_ID), TERMINAL_PORT3)
+ #endif
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 4)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_SIO_SERIAL_PORT4),
+ SUBTITLE(STRING_TOKEN(STR_SIO_SERIAL_PORT4)),
+ AUTO_ID(COM4_FORM_ID), TERMINAL_PORT4)
+ #endif
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 5)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_SIO_SERIAL_PORT5),
+ SUBTITLE(STRING_TOKEN(STR_SIO_SERIAL_PORT5)),
+ AUTO_ID(COM5_FORM_ID), TERMINAL_PORT5)
+ #endif
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 6)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_SIO_SERIAL_PORT6),
+ SUBTITLE(STRING_TOKEN(STR_SIO_SERIAL_PORT6)),
+ AUTO_ID(COM6_FORM_ID), TERMINAL_PORT6)
+ #endif
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 7)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_SIO_SERIAL_PORT7),
+ SUBTITLE(STRING_TOKEN(STR_SIO_SERIAL_PORT7)),
+ AUTO_ID(COM7_FORM_ID), TERMINAL_PORT7)
+ #endif
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 8)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_SIO_SERIAL_PORT8),
+ SUBTITLE(STRING_TOKEN(STR_SIO_SERIAL_PORT8)),
+ AUTO_ID(COM8_FORM_ID), TERMINAL_PORT8)
+ #endif
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 9)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_SIO_SERIAL_PORT9),
+ SUBTITLE(STRING_TOKEN(STR_SIO_SERIAL_PORT9)),
+ AUTO_ID(COM9_FORM_ID), TERMINAL_PORT9)
+ #endif
+#endif
+
+////////////////////////////////////
+
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_PCI_SERIAL_PORT0),
+ SUBTITLE(STRING_TOKEN(STR_PCI_SERIAL_PORT0)),
+ AUTO_ID(PCI_SERIAL0_FORM_ID), PCI_SERIAL_PORT_0_INDEX)
+ #endif
+#endif
+
+#if (TOTAL_PCI_SERIAL_PORTS > 1)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_PCI_SERIAL_PORT1),
+ SUBTITLE(STRING_TOKEN(STR_PCI_SERIAL_PORT1)),
+ AUTO_ID(PCI_SERIAL1_FORM_ID), PCI_SERIAL_PORT_1_INDEX)
+ #endif
+#endif
+
+#if (TOTAL_PCI_SERIAL_PORTS > 2)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_PCI_SERIAL_PORT2),
+ SUBTITLE(STRING_TOKEN(STR_PCI_SERIAL_PORT2)),
+ AUTO_ID(PCI_SERIAL2_FORM_ID), PCI_SERIAL_PORT_2_INDEX)
+ #endif
+#endif
+
+#if (TOTAL_PCI_SERIAL_PORTS > 3)
+ #ifdef FORM_SET_FORM
+ PORT_SUB_PAGE(STRING_TOKEN(STR_PCI_SERIAL_PORT3),
+ SUBTITLE(STRING_TOKEN(STR_PCI_SERIAL_PORT3)),
+ AUTO_ID(PCI_SERIAL3_FORM_ID), PCI_SERIAL_PORT_3_INDEX)
+ #endif
+#endif
+////////////////////////////////////
+
+#endif //ifdef ADVANCED_FORM_SET
+
+//****************************************************************************
+//****************************************************************************
+//** **
+//** (C)Copyright 1985-2014, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone (770)-246-8600 **
+//** **
+//****************************************************************************
+//****************************************************************************
diff --git a/Core/EM/Terminal/Terminal.sdl b/Core/EM/Terminal/Terminal.sdl
new file mode 100644
index 0000000..d04fe5e
--- /dev/null
+++ b/Core/EM/Terminal/Terminal.sdl
@@ -0,0 +1,796 @@
+TOKEN
+ Name = "Terminal_SUPPORT"
+ Value = "1"
+ Help = "Enable/Disable 'Serial Redirection' module. \This module contains Terminal.lib/Terminalx64.lib,\the compiled binary of module 'Serial Redirection \Sources.' It also contains all setup related material\for the module.\"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+End
+
+TOKEN
+ Name = "SerialIo_SUPPORT"
+ Value = "1"
+ TokenType = Boolean
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "SERIALIO_PCI_SERIAL_SUPPORT"
+ Value = "0"
+ Help = "0-Serial IO doesnt support the PCI serial Devices.1- Serial Io Driver installs the Serial IO for PCI serial Device."
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DISABLE_TERMINAL_FOR_SCT_TEST"
+ Value = "0"
+ Help = "Set this token to 1 if running the SCT Test. It will result in console redirection being turned off. As of this revision, console redirection interferes wtih the SCT SerialIO test."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TOTAL_SIO_SERIAL_PORTS"
+ Value = "1"
+ Help = "**PORTING NEEDED** Total number of Super IO serial ports present."
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Range = "0-10"
+End
+
+TOKEN
+ Name = "TOTAL_PCI_SERIAL_PORTS"
+ Value = "0"
+ Help = "**PORTING NEEDED** Total number of PCI serial ports present."
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Range = "0-4"
+End
+
+TOKEN
+ Name = "TOTAL_SERIAL_PORTS"
+ Value = "$(TOTAL_SIO_SERIAL_PORTS)+$(TOTAL_PCI_SERIAL_PORTS)"
+ Help = "Total number of serial ports present (both Super IO and PCI)."
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PCI_SERIAL_MMIO_WIDTH"
+ Value = "1"
+ Help = "MMIO Com device width size. 1- Byte, 2- Word, 4-Dword. Default Set to Dword"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "1...4h"
+End
+
+TOKEN
+ Name = "MAX_SIO_SERIAL_PORTS"
+ Value = "10"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "MAX_PCI_SERIAL_PORTS"
+ Value = "4"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PCI_SERIAL_PORT_INDEX_BASE"
+ Value = "1"
+ Help = "Used in the Terminal.sd file."
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "EFI_SPECIFICATION_VERSION" "<" "0x2000A"
+End
+
+TOKEN
+ Name = "PCI_SERIAL_PORT_INDEX_BASE"
+ Value = "0"
+ Help = "Used in the Terminal.sd file."
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "EFI_SPECIFICATION_VERSION" ">=" "0x2000A"
+End
+
+TOKEN
+ Name = "PCI_SERIAL_PORT_0_INDEX"
+ Value = "$(TOTAL_SIO_SERIAL_PORTS) + $(PCI_SERIAL_PORT_INDEX_BASE)"
+ Help = "Used in the Terminal.sd file."
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PCI_SERIAL_PORT_1_INDEX"
+ Value = "$(TOTAL_SIO_SERIAL_PORTS) + $(PCI_SERIAL_PORT_INDEX_BASE) + 1"
+ Help = "Used in the Terminal.sd file. VfrCompile does\ not allow the use of arithmetic expressions as \array indeces."
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PCI_SERIAL_PORT_2_INDEX"
+ Value = "$(TOTAL_SIO_SERIAL_PORTS) + $(PCI_SERIAL_PORT_INDEX_BASE) + 2"
+ Help = "Used in the Terminal.sd file. VfrCompile does\ not allow the use of arithmetic expressions as \array indeces."
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PCI_SERIAL_PORT_3_INDEX"
+ Value = "$(TOTAL_SIO_SERIAL_PORTS) + $(PCI_SERIAL_PORT_INDEX_BASE) + 3"
+ Help = "Used in the Terminal.sd file. VfrCompile does\ not allow the use of arithmetic expressions as \array indeces."
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "UART_DEFAULT_BAUD_RATE"
+ Value = "115200"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "UART_DEFAULT_BAUD_RATE_INDEX"
+ Value = "7"
+ Help = "Index into array gAcpiSpcrTableComBaudRates."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "UART_DEFAULT_DATA_BITS"
+ Value = "8"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "UART_DEFAULT_PARITY"
+ Value = "1"
+ Help = "EFI_PARITY_TYPE NoParity, which has value 1."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "UART_DEFAULT_STOP_BITS"
+ Value = "1"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "UART_DEFAULT_FLOW_CONTROL"
+ Value = "0"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "UART_DEFAULT_LOOPBACK_ENABLE"
+ Value = "0"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PCI_UART_INPUT_CLOCK"
+ Value = "1843200"
+ Help = "This is PCI UART input clock. The default value is (24000000/13) = 1843200 MHz"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "COM0_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "1"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "COM1_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "COM2_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "COM3_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "COM4_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "COM5_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "COM6_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "COM7_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "COM8_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "COM9_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PCI0_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PCI1_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PCI2_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PCI3_DEFAULT_CONSOLE_REDIRECTION_ENABLE"
+ Value = "0"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DEFAULT_DEBUGGER_CONSOLE_REDIRECTION_ENABLE"
+ Value = "1"
+ Help = "Once Rx/Redir/Debugger port been detected, enable/disable Console Redirection."
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DEFAULT_ACPI_SPCR_COM_PORT"
+ Value = "0"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DEFAULT_TERMINAL_TYPE"
+ Value = "3"
+ Help = "TERMINAL_TYPE ANSI, which is 3."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "EXTENDED_RESOLUTION_ENABLE"
+ Value = "0"
+ Help = "Enable or disable 100 x 31 terminal resolution"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "VTUTF8_ENABLE"
+ Value = "1"
+ Help = "Enable or disable VT-UTF8 Combination Key Support for ANSI/VT100 terminals"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "RECORDER_MODE_ENABLE"
+ Value = "0"
+ Help = "Enable or disable Terminal Recorder Mode"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DEFAULT_ACPI_SPCR_CONSOLE_REDIRECTION_ENABLE"
+ Value = "1"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DEFAULT_ACPI_SPCR_TABLE_TERMINAL_TYPE"
+ Value = "2"
+ Help = "TERMINAL_TYPE VT_UTF8, which is 2."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "HARDWARE_FLOW_CONTROL_SETUP_OPTION"
+ Value = "1"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "MAX_FAILURES_ALLOWED"
+ Value = "5"
+ Help = "The allowed range is 1 to 0xFF. This token value controls the hardware flow control retry count. Once the counter expired Redirection will be disabled and will be enabled again when host is ready to accept the data(i.e CTS is Set)."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "SOFTWARE_FLOW_CONTROL_SETUP_OPTION"
+ Value = "2"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TIMEOUT_FOR_DETERMINING_LONE_ESC_CHAR"
+ Value = "10000000"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NUMBER_OF_TIME_FOR_ESC_SEQUENCE_CHECKING"
+ Value = "20"
+ TokenType = Integer
+ TargetH = Yes
+End
+TOKEN
+ Name = "SPCR_ACPI_OEM_ID"
+ Value = "A M I "
+ Help = "SPCR OEM Id -\a string value to be filled into SPCR ACPI table headers"
+ TokenType = Expression
+ TargetMAK = Yes
+ TargetH = Yes
+ Range = "1-6 characters"
+End
+
+TOKEN
+ Name = "SPCR_ACPI_OEM_TBL_ID"
+ Value = "APTIO4"
+ Help = "SPCR OEM table Id -\a string value to be filled into SPCR ACPI table headers"
+ TokenType = Expression
+ TargetMAK = Yes
+ TargetH = Yes
+ Range = "1-8 characters"
+End
+
+TOKEN
+ Name = "UART_FIFO_SIZE"
+ Value = "16"
+ TokenType = Integer
+ TargetH = Yes
+ Help = "UART fifo size. Maximum supported UART size is 16."
+ Range = "0-16."
+End
+
+TOKEN
+ Name = "REFRESH_SCREEN_KEY"
+ Value = "0x0012"
+ Help = "Unicode Value of Key to Refresh the Screen.Default it set to Ctrl+r"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "ASCII_CONTROL_CODE_SUPPORT"
+ Value = "1"
+ Help = "ASCII control code support 0 - Disabled 1- Enabled"
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "spcr_interface_type"
+ Value = "0"
+ Help = "Indicate the type of the COM Port register interface.(ACPI 2.0 SPEC)."
+ TokenType = Integer
+ TargetH = Yes
+ Range = "0 = full 16550 interface; 1 = full 16450 interface; 2-255 = reserved."
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_addr_spc_id"
+ Value = "1"
+ Help = "UART BLK Register Id (Part of GAS_20 Structure, refer to ACPI v2.0 spec for details)"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "0=System memory; 1=System I/O; 2=PCI Config Space; 3=Embeded Controller; 4=SMBus; 0x7F=Functional Fixed Hardware; All other values reserved"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_addr_bit_width"
+ Value = "8"
+ Help = "UART BLK Register Bit Width (Part of GAS_20 Structure, refer to ACPI v2.0 spec for details)"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "value range depends on other GAS_20 elements"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_addr_bit_offset"
+ Value = "0"
+ Help = "UART BLK Register Bit Offset (Part of GAS_20 Structure, refer to ACPI v2.0 spec for details)"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "value range depends on other GAS_20 elements"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_access_size"
+ Value = "0"
+ Help = "UART BLK Register Bit Offset (Part of GAS_20 Structure, refer to ACPI v2.0 spec for details)"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "value range depends on other GAS_20 elements"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_interrupt_type"
+ Value = "05h"
+ Help = "Interrupt type(s) used by the UART."
+ TokenType = Integer
+ TargetH = Yes
+ Range = "Bit[0]=PC-AT dual-8259 PIC IRQ; Bit[1]=I/O APIC interrupt; Bit[2]=I/O SAPIC interrupt; Bit[3:7]=reserved (must be 0)"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_global_system_int"
+ Value = "03h"
+ Help = "I/O APIC mode IRQ #."
+ TokenType = Integer
+ TargetH = Yes
+ Range = "0-?: Depends on how many INTINs APIC has."
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_parity"
+ Value = "0"
+ Help = "UART parity check"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "(Refer to ACPI v2.0 spec for details)"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_stop_bits"
+ Value = "1"
+ Help = "UART stop bits"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "(Refer to ACPI v2.0 spec for details)"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_pci_device_id"
+ Value = "0FFFFh"
+ Help = "if UART is on PCI bus - its device ID"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "0-0xffff (Refer to ACPI v2.0 spec for details)"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_pci_vendor_id"
+ Value = "0FFFFh"
+ Help = "if UART is on PCI bus - its vendor ID"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "0-0xffff (Refer to ACPI v2.0 spec for details)"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_pci_bus_number"
+ Value = "0"
+ Help = "if UART is on PCI bus - its BUS #"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "0-0xff (Refer to ACPI v2.0 spec for details)"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_pci_device_number"
+ Value = "0"
+ Help = "if UART is on PCI bus - its DEVICE #"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "0-31 (Refer to ACPI v2.0 spec for details)"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_pci_function_number"
+ Value = "0"
+ Help = "if UART is on PCI bus - its FUNCTION #"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "0-7 (Refer to ACPI v2.0 spec for details)"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_pci_flags"
+ Value = "0"
+ Help = "if UART is on PCI bus - PCI flags"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "0-0xff (Refer to ACPI v2.0 spec for details)"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "spcr_pci_segment"
+ Value = "0"
+ Help = "if UART is on PCI bus - its PCI SEGMENT #"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "0-0xff (Refer to ACPI v2.0 spec for details)"
+ Token = "ACPI_BUILD_TABLES_2_0" "=" "1"
+End
+
+TOKEN
+ Name = "SERIAL_WRITE_ERROR_CHECK"
+ Value = "1"
+ Help = "Enable or disable Serial Port Write Error checking."
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "MAXIMUM_SERIAL_WRITE_ERROR_COUNT"
+ Value = "10"
+ Help = "This token specifies the number of retry count for serial port write error. Once this count reaches all the serialWrite calls will be returned as error. This token is valid only when the SERIAL_WRITE_ERROR_CHECK is enabled"
+ TokenType = Integer
+ TargetH = Yes
+ Range = "1-0xffffffff "
+ Token = "SERIAL_WRITE_ERROR_CHECK" "=" "1"
+End
+
+TOKEN
+ Name = "CLEAR_TERMINAL_KB_BUFFER_AT_READYTOBOOT"
+ Value = "0"
+ Help = "ON- Terminal KB Buffer will be cleared at ReadyToBoot.\OFF - Terminal KB Buffer will not be cleared at ReadyToBoot."
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "OEM_ESC_SEQUENCES"
+ Value = "1"
+ Help = "1- Enable OEM ESC Sequence.\0 - Disable OEM ESC Sequence."
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PUTTY_VT100"
+ Value = "0x1"
+ Help = "Putty Vt100 KeyPad Value."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PUTTY_LINUX"
+ Value = "0x2"
+ Help = "Putty Linux KeyPad Value."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PUTTY_XTERMR6"
+ Value = "0x4"
+ Help = "Putty XtermR6 KeyPad Value."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PUTTY_SCO"
+ Value = "0x8"
+ Help = "Putty SCO KeyPad Value."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PUTTY_ESCN"
+ Value = "0x10"
+ Help = "Putty Escn KeyPad Value."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PUTTY_VT400"
+ Value = "0x20"
+ Help = "Putty Vt400 KeyPad Value."
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "INSTALL_LEGACY_OS_THROUGH_REMOTE"
+ Value = "0"
+ Help = "Install Legacy OS like Linux through redirection. To make that happen some Linux are force to install in text mode and some others are redirected in graphics mode itseld. Note: All Linux Versions cannot be installed through remote as different Linux kernel's behave differently."
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DONT_SEND_ASCII_CONTROL_PRINTABLE_CHARACTERS"
+ Value = "0"
+ Help = "Applications like HyperTerminal supports printable characters in the ASCII control characters value's(0 - 0x1F) but Putty does not. so,to print the printable ASCII control characters we will send the equivalent ASCII printable value(whichever is applicable) if the token is enabled."
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DISABLE_PCI_REDIRECTION_ON_ACPI_ENABLE_DISABLE"
+ Value = "0"
+ Help = "When Redirection is enabled for Legacy OS, the system installation gets slow as Legacy Serial Redirection enables the PCI Serial interrupt for redirection and sometime after that OS uses its own IVT but PCI Serial interrupt is generated and not handled.So, disable redirection at OS level. we disable redirection on ACPI enable/disable call and reset the Interrupt Enable Register."
+ TokenType = Boolean
+ TargetH = Yes
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "SERIAL_MOUSE_DETECTION"
+ Value = "0"
+ Help = "Detect the Serial Mouse in the Serial Port and if the Serial Mouse is present, redirection will not be enabled."
+ TokenType = Boolean
+ TargetH = Yes
+End
+
+PATH
+ Name = "TERMINAL_DIR"
+End
+
+MODULE
+ Help = "Includes Terminal.mak to Project"
+ File = "Terminal.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\Terminal.sdb"
+ Parent = "SETUP_SDBS"
+ Priority = 80
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(TERMINAL_DIR)\Terminal.sd"
+ Parent = "SETUP_DEFINITIONS"
+ Priority = 80
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "SerialIoEntryPoint,"
+ Parent = "TerminalInitialize"
+ Token = "SerialIo_SUPPORT" "=" "1"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(TERMINAL_DIR)\Terminal$(ARCH).lib"
+ Parent = "Terminal_LIB"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "InitTerminalStrings,"
+ Parent = "SetupStringInit"
+ Token = "Terminal_SUPPORT" "=" "1"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "-i $(TERMINAL_DIR)"
+ Parent = "SETUP_VFR_INCLUDES"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\Terminal.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "TerminalInitialize"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "Terminal_LIB"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "TerminalAcpiEnableDisableCallBack,"
+ Parent = "AcpiEnableCallbackList"
+ Token = "DISABLE_PCI_REDIRECTION_ON_ACPI_ENABLE_DISABLE" "=" "1"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "TerminalAcpiEnableDisableCallBack,"
+ Parent = "AcpiDisableCallbackList"
+ Token = "DISABLE_PCI_REDIRECTION_ON_ACPI_ENABLE_DISABLE" "=" "1"
+ InvokeOrder = AfterParent
+End \ No newline at end of file
diff --git a/Core/EM/Terminal/Terminal.uni b/Core/EM/Terminal/Terminal.uni
new file mode 100644
index 0000000..827425c
--- /dev/null
+++ b/Core/EM/Terminal/Terminal.uni
Binary files differ
diff --git a/Core/EM/Terminal/TerminalAcpi.c b/Core/EM/Terminal/TerminalAcpi.c
new file mode 100644
index 0000000..da03372
--- /dev/null
+++ b/Core/EM/Terminal/TerminalAcpi.c
@@ -0,0 +1,179 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/BIN/Modules/Terminal/TerminalAcpi.c 1 12/22/11 1:34a Rajeshms $
+//
+// $Revision: 1 $
+//
+// $Date: 12/22/11 1:34a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/BIN/Modules/Terminal/TerminalAcpi.c $
+//
+// 1 12/22/11 1:34a Rajeshms
+// [TAG] EIP57579
+// [Category] Improvement
+// [Description] PCI legacy console redirection causes Legacy OS
+// installation slow because when Redirection is enabled for Legacy OS,
+// Legacy Serial Redirection enables the PCI Serial interrupt for
+// redirection and sometime after that OS uses its own IVT but still PCI
+// Serial interrupt is generated and not handled.So, disable redirection
+// at OS level. we disable redirection on ACPI enable/disable call and
+// reset the Interrupt Enable Register so that interrupt is not generated.
+// [Files] Terminal.sdl, Terminal.mak, Terminal.cif, TerminalAcpi.c
+//
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: TerminalAcpi.c
+//
+// Description: This file contains function to disable the PCI redirection
+// at ACPI enable call.
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+//----------------------------------------------------------------------------
+// Include(s)
+//----------------------------------------------------------------------------
+
+#include <Token.h>
+#include <AmiDxeLib.h>
+#if defined(PI_SPECIFICATION_VERSION)&&(PI_SPECIFICATION_VERSION>=0x0001000A)
+#include <Protocol\SmmSwDispatch2.h>
+#define AMI_SMM_SW_DISPATCH_CONTEXT EFI_SMM_SW_REGISTER_CONTEXT
+#else
+#include <Protocol\SmmSwDispatch.h>
+#define AMI_SMM_SW_DISPATCH_CONTEXT EFI_SMM_SW_DISPATCH_CONTEXT
+#endif
+#include "TerminalSetupVar.h"
+
+#define CFG_SPACE_INDEX_REG 0xCF8
+#define CFG_SPACE_DATA_REG 0xCFC
+#define PCI_BAR0 0x0010
+#define INT08h_SEGMENT 0xF000
+#define INT08h_OFFSET 0xFEA5
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: TerminalAcpiEnableDisableCallBack
+//
+// Description: This routine will be called to disable PCI redirection at ACPI
+// enable/disable call and reset Interrupt Enable Register to
+// disable interrupt from PCI Serial device & replace actual INT08h.
+//
+// Input: None
+//
+// Output: None
+//
+// Notes: None
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+
+VOID
+TerminalAcpiEnableDisableCallBack(
+ IN EFI_HANDLE DispatchHandle,
+ IN AMI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+)
+{
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+ EFI_STATUS Status;
+ UINT8 RegNum = PCI_BAR0;
+ UINT32 PciAddr;
+ UINT32 BarAddress;
+ UINT8 i,DevFunc;
+
+ UINT8 gTotalSioSerialPorts = TOTAL_SIO_SERIAL_PORTS;
+ EFI_GUID gTerminalVarGuid = TERMINAL_VAR_GUID;
+ UINTN PciSerialPortsLocationVarSize =
+ sizeof(PCI_SERIAL_PORTS_LOCATION_VAR);
+ PCI_SERIAL_PORTS_LOCATION_VAR PciSerialPortsLocationVar;
+
+ UINTN SerialPortsEnabledVarSize = sizeof(SERIAL_PORTS_ENABLED_VAR);
+ UINT32 SerialPortsEnabledVarAttributes=0;
+ SERIAL_PORTS_ENABLED_VAR SerialPortsEnabledVar;
+
+
+ Status = pRS->GetVariable(SERIAL_PORTS_ENABLED_VAR_C_NAME,
+ &gTerminalVarGuid,
+ &SerialPortsEnabledVarAttributes,
+ &SerialPortsEnabledVarSize,
+ &SerialPortsEnabledVar);
+
+ if (!EFI_ERROR(Status)) {
+ Status = pRS->GetVariable(PCI_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ NULL,
+ &PciSerialPortsLocationVarSize,
+ &PciSerialPortsLocationVar);
+
+ if (!EFI_ERROR(Status)) {
+ for (i = 0; i < TOTAL_PCI_SERIAL_PORTS; i++) {
+ //
+ // Look for the PCI device that are enabled.
+ //
+ if (SerialPortsEnabledVar.PortsEnabled[gTotalSioSerialPorts+i]) {
+ if ((PciSerialPortsLocationVar.Bus[i] == 0) &&
+ (PciSerialPortsLocationVar.Device[i] == 0) &&
+ (PciSerialPortsLocationVar.Function[i] == 0)) {
+ continue;
+ }
+
+ DevFunc = (PciSerialPortsLocationVar.Device[i] << 3) + PciSerialPortsLocationVar.Function[i];
+ PciAddr = ((UINT32) (( (UINT16) PciSerialPortsLocationVar.Bus[i] ) << 8) + DevFunc) << 8;
+ PciAddr += (RegNum & 0xfc);
+ PciAddr |= 0x80000000;
+
+ IoWrite32(CFG_SPACE_INDEX_REG, PciAddr);
+ BarAddress = IoRead32(CFG_SPACE_DATA_REG);
+ //
+ // Reset the IER register of UART.
+ //
+ if(BarAddress & 1) {
+ IoWrite32(BarAddress, 0);
+ } else {
+ *(UINTN*)( (BarAddress & 0xfffffff0) + 1) = 0;
+ }
+ }
+ }
+ //
+ // Replace the Actual INT08h routine which was hooked by Legacy console Redirection
+ //
+ *(UINT16*)0x0020 = (UINT16)INT08h_OFFSET;
+ *(UINT16*)0x0022 = (UINT16)INT08h_SEGMENT;
+
+ IoWrite8(0x80,0x99);
+ }
+ }
+#endif
+ return;
+}
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//************************************************************************* \ No newline at end of file
diff --git a/Core/EM/Terminal/TerminalBoard.h b/Core/EM/Terminal/TerminalBoard.h
new file mode 100644
index 0000000..36a78ef
--- /dev/null
+++ b/Core/EM/Terminal/TerminalBoard.h
@@ -0,0 +1,404 @@
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2009, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************
+// $Header: /Alaska/BIN/Modules/Terminal/TerminalBoard.h 4 12/08/11 6:30a Jittenkumarp $
+//
+// $Revision: 4 $
+//
+// $Date: 12/08/11 6:30a $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/BIN/Modules/Terminal/TerminalBoard.h $
+//
+// 4 12/08/11 6:30a Jittenkumarp
+// [TAG] EIP74239
+// [Category] New Feature
+// [Description] Added "Intel Key" ESC sequence support for Serial
+// Redirection.
+// [Files] Terminal.sdl, TerminalBoard.h
+//
+// 3 7/13/11 2:51a Rajeshms
+// [TAG]- EIP 36616
+// [Category]- New Feature
+// [Description]- Add Setup option for Various Putty keyPad support in
+// Terminal driver.
+// [Files]- Terminal.c, Terminal.h, Terminal.sd, Terminal.sdl,
+// Terminal.uni, TerminalBoard.h, TerminalSetup.c, TerminalSimpleTextIn.c
+//
+// 2 4/12/11 4:31a Rameshr
+// [TAG]- EIP 57688
+// [Category]- New Feature
+// [Description]- Add Setup option for Vt-UTF8 combo key support in
+// terminal driver
+// [Files]- Terminal.c, Terminal.h, Terminal.sd, Terminal.sdl ,
+// Terminal.uni, Terminalboard.h, TerminalSetup.c, TerminalSimpletextin.c
+//
+// 1 7/17/09 2:54p Rameshr
+// Initial check-in
+//
+//
+//**********************************************************************
+
+//<AMI_FHDR_START>
+//--------------------------------------------------------------------------
+//
+// Name: TerminalBoard.h
+//
+// Description: Board file for the Terminal Module.
+//
+//--------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+#ifndef _TERMINAL_BOARD_H__
+#define _TERMINAL_BOARD_H__
+
+#include <Protocol\SimpleTextIn.h>
+#include <Protocol\SimpleTextInEx.h>
+#include <Protocol\AmiKeycode.h>
+
+
+#define ESC_SEQ_STATE_ARRAY_END_MARKER {0,0,0,0,0}
+#define RESET 0xFFFF
+#define ASCII_ESC 0x1B
+
+#define GLOBAL_ALL PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_SCO | PUTTY_ESCN | PUTTY_VT400
+
+
+typedef struct _STATE_DESCRIPTION STATE_DESCRIPTION;
+
+//
+// Esc Sequence defination.
+//
+struct _STATE_DESCRIPTION{
+ CHAR16 InputChar;
+ STATE_DESCRIPTION *NextEscSeqState;
+ UINT16 EfiInputKeyScanCode;
+ CHAR16 EfiInputKeyUnicodeChar;
+ UINT8 KeyPad;
+};
+
+STATE_DESCRIPTION EscSeqStateArrayEndMarker = ESC_SEQ_STATE_ARRAY_END_MARKER;
+STATE_DESCRIPTION *EscSeqStateArrayEndMarkerPtr = &EscSeqStateArrayEndMarker;
+
+STATE_DESCRIPTION PuttyLinuxEscSeq[] =
+{
+ {'A', NULL, EFI_SCAN_F1, 0, PUTTY_LINUX},
+ {'B', NULL, EFI_SCAN_F2, 0, PUTTY_LINUX},
+ {'C', NULL, EFI_SCAN_F3, 0, PUTTY_LINUX},
+ {'D', NULL, EFI_SCAN_F4, 0, PUTTY_LINUX},
+ {'E', NULL, EFI_SCAN_F5, 0, PUTTY_LINUX},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyLinuxF6[] =
+{
+ {'~', NULL, EFI_SCAN_F6, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyLinuxF7[] =
+{
+ {'~', NULL, EFI_SCAN_F7, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyLinuxF8[] =
+{
+ {'~', NULL, EFI_SCAN_F8, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyLinuxF9[] =
+{
+ {'~', NULL, EFI_SCAN_F9, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyLinuxF10[] =
+{
+ {'~', NULL, EFI_SCAN_F10, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyLinuxF11[] =
+{
+ {'~', NULL, EFI_SCAN_F11, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyLinuxF12[] =
+{
+ {'~', NULL, EFI_SCAN_F12, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+
+STATE_DESCRIPTION PuttyXterm86F5[] =
+{
+ {'~', NULL, EFI_SCAN_F5, 0, PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyEscNF1[] =
+{
+ {'~', NULL, EFI_SCAN_F1, 0, PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+STATE_DESCRIPTION PuttyEscNF2[] =
+{
+ {'~', NULL, EFI_SCAN_F2, 0, PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+STATE_DESCRIPTION PuttyEscNF3[] =
+{
+ {'~', NULL, EFI_SCAN_F3, 0, PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+STATE_DESCRIPTION PuttyEscNF4[] =
+{
+ {'~', NULL, EFI_SCAN_F4, 0, PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyVt100EscSeq1[] =
+{
+ {'~', NULL, EFI_SCAN_HOME, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN },
+ {'~', NULL, EFI_SCAN_INS, 0, PUTTY_VT400},
+ {'7', PuttyLinuxF6, 0, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ {'8', PuttyLinuxF7, 0, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ {'9', PuttyLinuxF8, 0, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ {'5', PuttyXterm86F5, 0, 0, PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ {'1', PuttyEscNF1, 0, 0, PUTTY_ESCN | PUTTY_VT400},
+ {'2', PuttyEscNF2, 0, 0, PUTTY_ESCN | PUTTY_VT400},
+ {'3', PuttyEscNF3, 0, 0, PUTTY_ESCN | PUTTY_VT400},
+ {'4', PuttyEscNF4, 0, 0, PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyVt100EscSeq2[] =
+{
+ {'~', NULL, EFI_SCAN_INS, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN},
+ {'~', NULL, EFI_SCAN_HOME, 0, PUTTY_VT400},
+ {'0', PuttyLinuxF9, 0, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ {'1', PuttyLinuxF10, 0, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ {'3', PuttyLinuxF11, 0, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ {'4', PuttyLinuxF12, 0, 0, PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyVt100EscSeq3[] =
+{
+ {'~', NULL, EFI_SCAN_DEL, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyVt100EscSeq4[] =
+{
+ {'~', NULL, EFI_SCAN_END, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyVt100EscSeq5[] =
+{
+ {'~', NULL, EFI_SCAN_PGUP, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyVt100EscSeq6[] =
+{
+ {'~', NULL, EFI_SCAN_PGDN, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyVt400EscSeq3[] =
+{
+ {'~', NULL, EFI_SCAN_PGUP, 0, PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyVt400EscSeq4[] =
+{
+ {'~', NULL, EFI_SCAN_DEL, 0, PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyVt400EscSeq5[] =
+{
+ {'~', NULL, EFI_SCAN_END, 0, PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION PuttyVt400EscSeq6[] =
+{
+ {'~', NULL, EFI_SCAN_PGDN, 0, PUTTY_VT400},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+
+STATE_DESCRIPTION OemEscSeqStateArray[]=
+{
+ {'P', NULL, EFI_SCAN_F1, 0, GLOBAL_ALL},
+ {'Q', NULL, EFI_SCAN_F2, 0, GLOBAL_ALL},
+ {'w', NULL, EFI_SCAN_F3, 0, GLOBAL_ALL},
+ {'x', NULL, EFI_SCAN_F4, 0, GLOBAL_ALL},
+ {'t', NULL, EFI_SCAN_F5, 0, GLOBAL_ALL},
+ {'u', NULL, EFI_SCAN_F6, 0, GLOBAL_ALL},
+ {'q', NULL, EFI_SCAN_F7, 0, GLOBAL_ALL},
+ {'r', NULL, EFI_SCAN_F8, 0, GLOBAL_ALL},
+ {'p', NULL, EFI_SCAN_F9, 0, GLOBAL_ALL},
+ {'M', NULL, EFI_SCAN_F10,0, GLOBAL_ALL},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+
+};
+
+STATE_DESCRIPTION CursorPositionEscSeqStateArray[] =
+{
+ {'C', NULL, EFI_SCAN_RIGHT, 0, GLOBAL_ALL},
+ {'D', NULL, EFI_SCAN_LEFT, 0, GLOBAL_ALL},
+ {'A', NULL, EFI_SCAN_UP, 0, GLOBAL_ALL},
+ {'B', NULL, EFI_SCAN_DN, 0, GLOBAL_ALL},
+ {'H', NULL, EFI_SCAN_HOME, 0, GLOBAL_ALL},
+ {'K', NULL, EFI_SCAN_END, 0, GLOBAL_ALL},
+ {'1', PuttyVt100EscSeq1, 0, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400 },
+ {'2', PuttyVt100EscSeq2, 0, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN | PUTTY_VT400 },
+ {'3', PuttyVt100EscSeq3, 0, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN },
+ {'4', PuttyVt100EscSeq4, 0, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN },
+ {'5', PuttyVt100EscSeq5, 0, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN },
+ {'6', PuttyVt100EscSeq6, 0, 0, PUTTY_VT100 | PUTTY_LINUX | PUTTY_XTERMR6 | PUTTY_ESCN },
+ {'3', PuttyVt400EscSeq3, 0, 0, PUTTY_VT400},
+ {'4', PuttyVt400EscSeq4, 0, 0, PUTTY_VT400},
+ {'5', PuttyVt400EscSeq5, 0, 0, PUTTY_VT400},
+ {'6', PuttyVt400EscSeq6, 0, 0, PUTTY_VT400},
+ {'[', PuttyLinuxEscSeq, 0, 0, PUTTY_LINUX},
+ {'M', NULL, EFI_SCAN_F1, 0, PUTTY_SCO},
+ {'N', NULL, EFI_SCAN_F2, 0, PUTTY_SCO},
+#if OEM_ESC_SEQUENCES
+ {'O', OemEscSeqStateArray, 0, 0, GLOBAL_ALL},
+#else
+ {'O', NULL, EFI_SCAN_F3, 0, PUTTY_SCO},
+#endif
+ {'P', NULL, EFI_SCAN_F4, 0, PUTTY_SCO},
+ {'Q', NULL, EFI_SCAN_F5, 0, PUTTY_SCO},
+ {'R', NULL, EFI_SCAN_F6, 0, PUTTY_SCO},
+ {'S', NULL, EFI_SCAN_F7, 0, PUTTY_SCO},
+ {'T', NULL, EFI_SCAN_F8, 0, PUTTY_SCO},
+ {'U', NULL, EFI_SCAN_F9, 0, PUTTY_SCO},
+ {'V', NULL, EFI_SCAN_F10, 0, PUTTY_SCO},
+ {'W', NULL, EFI_SCAN_F11, 0, PUTTY_SCO},
+ {'X', NULL, EFI_SCAN_F12, 0, PUTTY_SCO},
+ {'I', NULL, EFI_SCAN_PGUP, 0, PUTTY_SCO},
+ {'G', NULL, EFI_SCAN_PGDN, 0, PUTTY_SCO},
+ {'F', NULL, EFI_SCAN_END, 0, PUTTY_SCO},
+ {'L', NULL, EFI_SCAN_INS, 0, PUTTY_SCO},
+ {0x7F, NULL, EFI_SCAN_DEL, 0, PUTTY_SCO},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION FunctionKeyEscSeqStateArray[] =
+{
+ {'P', NULL, EFI_SCAN_F1, 0, GLOBAL_ALL},
+ {'Q', NULL, EFI_SCAN_F2, 0, GLOBAL_ALL},
+ {'R', NULL, EFI_SCAN_F3, 0, GLOBAL_ALL},
+ {'S', NULL, EFI_SCAN_F4, 0, GLOBAL_ALL},
+ {'T', NULL, EFI_SCAN_F5, 0, PUTTY_VT100},
+ {'U', NULL, EFI_SCAN_F6, 0, PUTTY_VT100},
+ {'V', NULL, EFI_SCAN_F7, 0, PUTTY_VT100},
+ {'W', NULL, EFI_SCAN_F8, 0, PUTTY_VT100},
+ {'X', NULL, EFI_SCAN_F9, 0, PUTTY_VT100},
+ {'Y', NULL, EFI_SCAN_F10, 0, PUTTY_VT100},
+ {'Z', NULL, EFI_SCAN_F11, 0, PUTTY_VT100},
+ {'[', NULL, EFI_SCAN_F12, 0, PUTTY_VT100},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+
+STATE_DESCRIPTION ResetSequenceState5[] =
+{
+ {'R', NULL, RESET, 0, GLOBAL_ALL},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION ResetSequenceState4[] =
+{
+ {ASCII_ESC, ResetSequenceState5, 0, 0, GLOBAL_ALL},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION ResetSequenceState3[] =
+{
+ {'r', ResetSequenceState4, 0, 0, GLOBAL_ALL},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION ResetSequenceState2[] =
+{
+ {ASCII_ESC, ResetSequenceState3, 0, 0, GLOBAL_ALL},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION EscSeqStateArray[] =
+{
+ {'[', CursorPositionEscSeqStateArray,
+ 0, 0, GLOBAL_ALL},
+ {'O', FunctionKeyEscSeqStateArray,
+ 0, 0, GLOBAL_ALL},
+ {'R', ResetSequenceState2,
+ 0, 0, GLOBAL_ALL},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+STATE_DESCRIPTION Vtutf8EscSeqStateArray[] =
+{
+ {'[', CursorPositionEscSeqStateArray,
+ 0, 0, GLOBAL_ALL},
+ {'O', FunctionKeyEscSeqStateArray,
+ 0, 0, GLOBAL_ALL},
+ {'h', NULL, EFI_SCAN_HOME, 0, GLOBAL_ALL},
+ {'k', NULL, EFI_SCAN_END, 0, GLOBAL_ALL},
+ {'+', NULL, EFI_SCAN_INS, 0, GLOBAL_ALL},
+ {'-', NULL, EFI_SCAN_DEL, 0, GLOBAL_ALL},
+ {'?', NULL, EFI_SCAN_PGUP, 0, GLOBAL_ALL},
+ {'/', NULL, EFI_SCAN_PGDN, 0, GLOBAL_ALL},
+ {'1', NULL, EFI_SCAN_F1, 0, GLOBAL_ALL},
+ {'2', NULL, EFI_SCAN_F2, 0, GLOBAL_ALL},
+ {'3', NULL, EFI_SCAN_F3, 0, GLOBAL_ALL},
+ {'4', NULL, EFI_SCAN_F4, 0, GLOBAL_ALL},
+ {'5', NULL, EFI_SCAN_F5, 0, GLOBAL_ALL},
+ {'6', NULL, EFI_SCAN_F6, 0, GLOBAL_ALL},
+ {'7', NULL, EFI_SCAN_F7, 0, GLOBAL_ALL},
+ {'8', NULL, EFI_SCAN_F8, 0, GLOBAL_ALL},
+ {'9', NULL, EFI_SCAN_F9, 0, GLOBAL_ALL},
+ {'0', NULL, EFI_SCAN_F10, 0, GLOBAL_ALL},
+ {'!', NULL, EFI_SCAN_F11, 0, GLOBAL_ALL},
+ {'@', NULL, EFI_SCAN_F12, 0, GLOBAL_ALL},
+ {'R', ResetSequenceState2,
+ 0, 0, GLOBAL_ALL},
+ ESC_SEQ_STATE_ARRAY_END_MARKER
+};
+
+#endif
+
+//****************************************************************************
+//****************************************************************************
+//** **
+//** (C)Copyright 1985-2008, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Norcross, GA 30093 **
+//** **
+//** Phone (770)-246-8600 **
+//** **
+//****************************************************************************
+//**************************************************************************** \ No newline at end of file
diff --git a/Core/EM/Terminal/TerminalSetup.c b/Core/EM/Terminal/TerminalSetup.c
new file mode 100644
index 0000000..312c0f1
--- /dev/null
+++ b/Core/EM/Terminal/TerminalSetup.c
@@ -0,0 +1,1788 @@
+//****************************************************************************
+//****************************************************************************
+//** **
+//** (C)Copyright 1985-20014, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone (770)-246-8600 **
+//** **
+//****************************************************************************
+//****************************************************************************
+// $Header: /Alaska/BIN/Modules/Terminal/TerminalSetup.c 68 5/29/14 5:20a Deepthins $
+//
+// $Revision: 68 $
+//
+// $Date: 5/29/14 5:20a $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/BIN/Modules/Terminal/TerminalSetup.c $
+//
+// 68 5/29/14 5:20a Deepthins
+// [TAG] EIP166561
+// [Category] Bug Fix
+// [Severity] Normal
+// [Symptom] Runtime attribute set for the some of the variables used by
+// terminal driver.
+// [RootCause] Runtime attribute set for the some of the variables used
+// by terminal driver.
+// [Solution] Runtime attribute is removed
+// [Files] TerminalSetup.c
+//
+// 67 3/17/14 12:16a Anbuprakashp
+// [TAG] EIP156273
+// [Category] Improvement
+// [Description] Avoid Build issue happened in Non english version of
+// the OS with Serial Redirection label 4.6.3_Terminal_53
+// [Files] Terminal.sd,TerminalSetup.c
+//
+// 66 9/04/13 3:27a Anbuprakashp
+// [TAG] EIP134648
+// [Category] Bug Fix
+// [Severity] Minor
+// [Symptom] Build error occurs in Sharkbay platform if tokens
+// "TOTAL_SIO_SERIAL_PORTS" and "TOTAL_PCI_SERIAL_PORTS" are set to 0
+// [RootCause] TerminalSetup.c file Status Variable Initialization is
+// missing.Terminal.sd file, Condition (TOTAL_SERIAL_PORTS > 0) need to be
+// added to avoid build error.
+// [Solution] Terminal.sd file, Condition (TOTAL_SERIAL_PORTS > 0) added
+// to avoid build error.
+// Status variable initialzed properly.
+// [Files] Terminal.sd,TerminalSetup.c
+//
+// 65 8/21/13 1:23a Anbuprakashp
+// [TAG] EIP131785
+// [Category] Bug Fix
+// [Severity] Minor
+// [Symptom] Serial Redirection PCI COM port function numbers are
+// changing randomly for every reboot
+// [RootCause] COM port number and its associated PCI Function numbers
+// are
+// changing due to the funtion (ValidatePciSerialNvram) in TerminalSetup.c
+// file of the SerialRedirection module.Here, It fail to make particular
+// PCI COM port function number to Zero.
+// As it wrongly comparing device path for the PCI com port.
+//
+// [Solution] PCI serial COM port's Device Path comparing condition
+// commented.
+// [Files] TerminalSetup.c
+//
+// 64 5/27/13 6:34a Rameshr
+// [TAG] EIP121329
+// [Category] Improvement
+// [Description] Serial Mouse Detection added based on the SDL token and
+// by default kept disabled
+//
+// [Files] SerialIo.c, TerminalSetup.c , Terminal.sdl
+//
+// 63 5/02/13 9:27a Kapilporwal
+// [TAG] EIP117486
+// [Description] CppCheck error in Terminal label 4.6.3_Terminal_50
+// [Files] SerialIo.c, Terminal.c, TerminalSetup.c,
+// TerminalSimpleTextOut.c
+//
+// 62 2/11/13 3:00a Rameshr
+// [TAG] EIP113629
+// [Category] New Feature
+// [Description] Terminal driver support for ctrl+key(ASCII Control
+// Char) combinations
+// [Files] Terminal.sdl, TerminalSetup.c, TerminalSimpleTextIn.c
+//
+// 61 6/29/12 5:29a Srilathasc
+// [TAG] EIP93519
+// [Category] Improvement
+// [Description] make hardware flow control maximum re-try count as SDL
+// token.
+// [Files] Terminal.sdl, TerminalSetup.c, SerialIo.c
+//
+// 60 3/30/12 12:16a Rajeshms
+// [TAG] EIP86477
+// [Category] Improvement
+// [Description] PuttyKeyPad value is returned as non-zero(PUTTY_VT100)
+// from GetSetupValuesForTerminal() if there is any error in that
+// function.
+// [Files] TerminalSetup.c
+//
+// 59 3/29/12 11:58p Rajeshms
+// [TAG] EIP84341
+// [Category] Improvement
+// [Description] Added Separate PCI_UART_INPUT_CLOCK token for setting
+// the Clock for PCI Serial UART.
+// [Files] Terminal.sdl, TerminalSetup.c, SerialIo.c, LegacySredir.c,
+// LegacySredir_Setup.c
+//
+// 58 12/12/11 6:53a Rajeshms
+// [TAG] EIP71636
+// [Category] New Feature
+// [Description] Implement the AMI_SERIAL_PROTOCOL for non-generic PCI
+// Serial Device.
+// [Files] AmiSerial.c, AmiSerial.sdl, AmiSerial.mak, AmiSerial.chm,
+// AmiSerial.dxs, AmiSerial.cif, Terminal.c, SerialIo.c, TerminalSetup.c,
+// InitTerminalStrings.c, TerminalSetupVar.h, Terminal.cif,
+// TerminalAmiSerial.h, LegacySredir_Setup.c
+//
+// 57 11/03/11 4:47a Rameshr
+// [TAG] EIP73026
+// [Category] Improvement
+// [Description] SetNvramVariable used on line 1039, conditionally not
+// set
+// [Files] TerminalSetup.c
+//
+// 56 10/19/11 6:42a Rajeshms
+// [TAG] EIP71973
+// [Category] Bug Fix
+// [Severity] Normal
+// [Symptom] ASCII Control characters that are used to display graphics
+// characters are not redirected to remote if Putty/teraterm application
+// is used.
+// [RootCause] Putty/Teraterm application does not use ASCII control
+// characters as Printable characters.
+// [Solution] DONT_SEND_ASCII_CONTROL_PRINTABLE_CHARACTERS token has
+// been created, if disabled it will not send the ASCII control
+// characters.
+// [Files] Terminal.sdl, TerminalSetup.c, TerminalSimpleTextOut.c
+//
+// 55 9/20/11 3:05a Rajeshms
+// [TAG] EIP70320
+// [Category] Bug Fix
+// [Severity] Critical
+// [Symptom] SPCR table is not created with EFI_SPECIFICATION_VERSION
+// 0x2000A
+// [RootCause] Comport was returned as 0xff from
+// GetAcpiSpcrTableValues() as the PORT number is zero indexed after
+// EFI_SPECIFICATION_VERSION 0x2000A.
+// [Solution] The comport number is not subtracted with 1 if
+// EFI_SPECIFICATION_VERSION is equal to greater than0x2000A
+// [Files] Terminal.sd, TerminalSetup.c
+//
+// 54 8/29/11 6:26a Rameshr
+// [TAG] - EIP 55335
+// [Category]- IMPROVEMENT
+// [Description]- Add optional code to clear keyboard buffer at
+// ReadyToBoot in Terminal driver
+// [Files] - Terminal.c , Terminal.h, Terminal.sdl, TerminalSetup.c
+//
+// 53 7/13/11 2:47a Rajeshms
+// [TAG]- EIP 36616
+// [Category]- New Feature
+// [Description]- Add Setup option for Various Putty keyPad support in
+// Terminal driver.
+// [Files]- Terminal.c, Terminal.h, Terminal.sd, Terminal.sdl,
+// Terminal.uni, TerminalBoard.h, TerminalSetup.c, TerminalSimpleTextIn.c
+//
+// 52 5/19/11 1:58a Rameshr
+// [TAG] - EIP 59741
+// [Category]- BUG FIX
+// [Severity]- Minor
+// [Symptom] - System hangs if the Serial port doesn't work
+// [RootCause]- Serial Port says valid, but when we try to write, Terminal
+// Holding Register never gets Empty.
+// [Solution] - Added Error Count when the maximum error count reached,
+// SerialIoWrite has been stopped
+// [Files] - SerialIo.c, Terminal.sdl , TerminalSetup.c
+//
+// 51 4/29/11 5:04a Rameshr
+// [TAG] - EIP 54870
+// [Category]- BUG FIX
+// [Severity]- Major
+// [Symptom] - Legacy Console Redirection doesn't work on 2nd PCI Serial
+// Port
+// [RootCause]- Terminal creats the same Nvram variable name for all the
+// PCI Serial devices
+// [Solution] - Created seperate Nvram Variable name for each PCI serial
+// devices Ahci recovery driver shutdown code exectued only when the
+// Recovery from Ahci driver started
+// [Files] - TerminalSetup.c
+//
+// 50 4/12/11 4:31a Rameshr
+// [TAG]- EIP 57688
+// [Category]- New Feature
+// [Description]- Add Setup option for Vt-UTF8 combo key support in
+// terminal driver
+// [Files]- Terminal.c, Terminal.h, Terminal.sd, Terminal.sdl ,
+// Terminal.uni, Terminalboard.h, TerminalSetup.c, TerminalSimpletextin.c
+//
+// 49 3/02/11 3:14a Rameshr
+// [TAG]- EIP 54313
+// [Category]-IMPROVEMENT
+// [Description]- Terminal driver Getvariable calls assumed to have valid
+// values. Added code to return the error code when there is an failure in
+// the getvariable call.
+// [Files]- TerminalSetup.c, InitTerminalString.c
+//
+// 48 3/02/11 3:07a Rameshr
+// [TAG]- EIP 54526
+// [Category]-IMPROVEMENT
+// [Description]- PCI serial MMIO device width support added through SDL
+// token
+// [Files]- SerialIo.c , TerminalSetup.c , Terminal.sdl
+//
+// 47 2/07/11 12:55a Rameshr
+// [TAG] - EIP 53292
+// [Category]- BUG FIX
+// [Severity]- Minor
+// [Symptom] - CPU Exception D in Terminal when enabling more than 1
+// Serial Port.
+// [RootCause]- ComPort value is not initilized , that returns junk value
+// causing the invalid exection.
+// [Solution] - Initilized to 0xFF
+// [Files] - TerminalSetup.c
+//
+// 46 1/20/11 1:16a Lavanyap
+// [TAG] - EIP51898
+// [Category] - BUG FIX
+// [Severity] - Minor
+// [Symptom] - SDL tokens are not working in Terminal driver when Terminal
+// source module is not available in project.
+// [RootCause] - Tokens are defined in Terminal binary module and are used
+// in source module,so SDL token value changes cannot take effect when
+// source module is not present in the project.
+// [Solution] - Replaced SDL tokens used in source module with variables
+// defined in binary module.
+// [Files] - Terminal.c, TerminalSetup.c
+//
+// 45 11/29/10 11:58p Rajeshms
+// Build error resolved that caused because of previous Check-in.
+//
+// 44 11/29/10 7:28a Rajeshms
+// [TAG] - EIP 39842
+// [Category]- BUG FIX
+// [Severity]- Normal
+// [Symptom] - PCI Serial Doesn't work when we change the PCI Serial
+// device to different Slot(TOTAL_PCI_SERIAL_PORTS=1).
+// [RootCause] - NVRAM variable was not set to Zero once device was
+// removed from that slot so eventhough device(in another slot) is
+// detected its not shown in Setup.
+// [Solution] - NVRAM variable which was set previously when device was
+// present is set to ZERO if the device is not present in current slot.
+// [Files] - TerminalSetup.c
+//
+// 43 11/03/10 2:07a Rajeshms
+// [TAG] - EIP 46234
+// [Category]- BUG FIX
+// [Severity]- Normal
+// [Symptom] - If TOTAL_PCI_SERIAL_PORTS=1, the BIOS will hang in POST in
+// non-debug mode.Was reproduced in CrownBay.
+// [RootCause] - In non-debug mode terminal driver gets garbage value for
+// UINT8 ComPort; in some cases so it hangs.
+// [Solution] - UINT8 Comport is initialised to zero.
+// [Files] - TerminalSetup.c
+//
+// 42 11/02/10 4:15a Lavanyap
+// [TAG] - EIP42299
+// [Category] - IMPROVEMENT
+// [Description] - Console Redirection can support 10 COM Ports.
+// [Files] - InitTerminalStrings.c, SerialIo.c, Terminal.sd,
+// Terminal.sdl, Terminal.uni, TerminalSetup.c
+//
+// 41 10/19/10 8:35a Rajeshms
+// [TAG]- EIP 39562
+// [Category]-IMPROVEMENT
+// [Description]- Show entire PCI address of redirection device in Setup
+// [Files]- Terminal.c, TerminalSetup.c, InitTerminalStrings.c
+//
+// 40 6/01/10 12:32a Rameshr
+// Support for Baud Rate 38400 in Terminal Driver
+// EIP 38852
+//
+// 39 5/03/10 1:14a Rameshr
+// Issue:Need to handle different Base Hz values for SerialStatusCode,
+// Terminal, and Legacy Serial Redirection.
+// Solution: Moved Uart input clock into Core.sdl token and used in all
+// the above modules.
+// EIP: 37332
+//
+// 38 5/03/10 12:22a Rameshr
+// Issue:VT-UTF8 mode support for Console redirection with Debugger
+// Solution: Serial Port attribute Setup questions added for the debugger
+// console redirection port.
+// EIP 37440
+//
+// 37 4/19/10 1:44a Rameshr
+// Build problem resolved because of removing
+// DEFAULT_CONSOLE_REDIRECTION_ENABLE SDL token.
+//
+// 36 3/31/10 12:30a Rameshr
+// Recorder mode support Added.
+// EIP 34388
+//
+// 35 1/21/10 4:11p Artems
+//
+// 34 12/16/09 6:35p Artems
+//
+// 33 11/26/09 6:00a Rameshr
+// SPCR table OEMID and OEMTABLEID configured through SDL tokens.
+// EIP:26773
+//
+// 32 10/26/09 9:48a Yul
+// EIP 26401
+// Console Redirection freezes when "CTRL + R" (refresh screen) is used
+//
+// 31 10/21/09 11:28a Artems
+// EIP 25955 - fixed switching mode mechanism
+//
+// 30 10/08/09 6:02p Pats
+// EIP 23731: Need to remove SIO serial port from Console Redirection
+// Setup menu if TOTAL_SIO_SERIAL_PORTS is 0.
+// Solution: In SetSerialPortsEnabledVar_Sio(), "#if (TOTAL_SERIAL_PORTS >
+// 0)" changed to "#if (TOTAL_SIO_SERIAL_PORTS > 0)".
+//
+// 29 9/28/09 4:08p Rameshr
+// Terminal assumes UID to be started from 0. This assumption removed as
+// UID should be unique and not be started from 0.
+// EIP 17239
+//
+// 28 9/21/09 11:38a Rameshr
+// SerailIo driver to handle Pciserial device based on the SDL token
+// settings.
+// EIP 23764
+//
+// 27 9/04/09 3:55p Krishnakumarg
+// DEFAULT_DEBUGGER_CONSOLE_REDIRECTION_ENABLE token created for setting
+// default option for debugger port.
+//
+// 26 7/17/09 2:48p Rameshr
+// ESC sequence information moved from Lib to Board module.
+// Uart fifo size added as SDL token.
+// EIP 23064
+//
+// 25 7/02/09 5:01p Rameshr
+// Coding Standard and File header updated.
+//
+// 24 11/12/08 5:55p Ambikas
+//
+// 23 9/08/08 4:52p Ambikas
+//
+// 22 5/13/08 3:40p Rameshraju
+// Terminal Resolution 100 x 31 support Added
+//
+// 21 4/14/08 7:51p Ambikas
+//
+// 20 4/14/08 7:42p Ambikas
+//
+// 19 4/14/08 4:52p Ambikas
+//
+// 18 4/14/08 4:46p Ambikas
+//
+// 17 11/07/07 4:53p Ambikas
+// We have reverted to the version of VfrCompile which uses 1 based
+// arrays.
+// Array indeces have been changed accordingly.
+//
+// 16 10/11/07 7:42a Ambikas
+//
+// 15 6/12/07 3:58p Ambikas
+//
+// 14 6/11/07 11:36a Ambikas
+//
+// 13 6/10/07 6:02p Ambikas
+//
+// 12 6/06/07 7:52p Ambikas
+// We now save the pci device path of pci serial port rather than segment
+// and bus numbers.
+//
+// 11 6/05/07 6:26p Ambikas
+//
+// 10 6/05/07 11:55a Ambikas
+//
+// 9 6/4/2007 7:34p Ambikas
+//
+// 8 6/4/2007 7:30p Ambikas
+// If TOTAL_SERIAL_PORTS is 0, then the setup data structures for the
+// serial ports in Terminal.sd will not be defined. So, we comment out
+// code which references those data structures and just return default
+// values.
+//
+// 7 5/30/2007 12:18p Ambikas
+//
+// 6 5/29/2007 8:35p Ambikas
+//
+// 5 5/24/2007 2:33p Ambikas
+//
+// 4 8/24/2006 7:07p Felixp
+// x64 support (warnings/errors fixed)
+//
+// 3 8/24/2006 3:34p Felixp
+// x64 support (warnings/errors fixed)
+//
+// 2 5/05/2006 5:35p Ambikas
+//
+// 1 11/11/2005 2:07p Ambikas
+//
+//**********************************************************************
+//<AMI_FHDR_START>
+//
+// Name: TerminalSetup.c
+//
+// Description: This file contains functions used by
+// Terminal.lib/Terminalx64.lib to get Terminal/Serial
+// related setup values.
+//
+//<AMI_FHDR_END>
+//**********************************************************************
+
+
+#include <Protocol\SerialIo.h> //for SERIAL_IO_MODE
+#include <Token.h> //for sdl tokens
+#include <AmiDxeLib.h> //for pRS
+#include "TerminalBoard.h"
+
+#include <Protocol\SerialIo.h>
+#include <Setup.h>
+#include "TerminalSetupVar.h"
+#include <protocol\PciRootBridgeIo.h>
+#include <Pci.h>
+
+#define PCI_CFG_ADDRESS(bus,dev,func,reg) \
+ ((UINT64)((((UINTN)bus) << 24) + (((UINTN)dev) << 16) + (((UINTN)func) << 8) + ((UINTN)reg)))& 0x00000000ffffffff
+
+#define HARDWARE_LOOPBACK 1
+#define SOFTWARE_LOOPBACK 2
+
+#ifdef UART_INPUT_CLOCK
+UINTN SioUartInputClock = UART_INPUT_CLOCK;
+#else
+//
+// Set the default value((24000000/13)MHz input clock) if the UART_INPUT_CLOCK SDL token is not present.
+//
+UINTN SioUartInputClock=1843200;
+#endif
+
+UINTN PciUartInputClock = PCI_UART_INPUT_CLOCK;
+
+//for serial io defaults
+UINT32 UartDefaultBaudRate = UART_DEFAULT_BAUD_RATE;
+EFI_PARITY_TYPE UartDefaultParity = UART_DEFAULT_PARITY;
+UINT8 UartDefaultDataBits = UART_DEFAULT_DATA_BITS;
+EFI_STOP_BITS_TYPE UartDefaultStopBits = UART_DEFAULT_STOP_BITS;
+UINT8 SerialIo_PciSerialSupport = SERIALIO_PCI_SERIAL_SUPPORT;
+BOOLEAN ValidateNvram = FALSE;
+
+UINT32 TimeoutForDeterminingLoneEscChar =
+ TIMEOUT_FOR_DETERMINING_LONE_ESC_CHAR;
+
+UINT32 EscSequenceCheckingIntervel =
+ (TIMEOUT_FOR_DETERMINING_LONE_ESC_CHAR/NUMBER_OF_TIME_FOR_ESC_SEQUENCE_CHECKING);
+
+CHAR16 RefreshScreenKey = REFRESH_SCREEN_KEY;
+UINT8 SPCR_OEM_ID[6] = CONVERT_TO_STRING(SPCR_ACPI_OEM_ID);
+UINT8 SPCR_OEM_TBL_ID[8] = CONVERT_TO_STRING(SPCR_ACPI_OEM_TBL_ID);
+UINT32 gTotalSioSerialPorts = TOTAL_SIO_SERIAL_PORTS;
+UINT32 gTotalPciSerialPorts = TOTAL_PCI_SERIAL_PORTS;
+UINTN TotalTerminalDev=TOTAL_SERIAL_PORTS;
+UINT32 Uart_Fifo_Size=UART_FIFO_SIZE;
+UINT8 PciComMmioWidth=PCI_SERIAL_MMIO_WIDTH;
+UINT8 MaxFailuresAllowed = MAX_FAILURES_ALLOWED;
+UINT32 MaximumSerialWriteErrorCount = MAXIMUM_SERIAL_WRITE_ERROR_COUNT;
+BOOLEAN SerialWriteErrorCheck= SERIAL_WRITE_ERROR_CHECK;
+BOOLEAN ClearTerminalKBBufferReadyToBoot= CLEAR_TERMINAL_KB_BUFFER_AT_READYTOBOOT;
+BOOLEAN ASCIIControlCodeSupport= ASCII_CONTROL_CODE_SUPPORT;
+BOOLEAN SerialMouseDetection=SERIAL_MOUSE_DETECTION;
+
+
+EFI_GUID gTerminalVarGuid = TERMINAL_VAR_GUID;
+EFI_GUID gSetupGuid = SETUP_GUID;
+EFI_GUID gDebuggerTerminalVarGuid = DEBUGGER_TERMINAL_VAR_GUID;
+EFI_GUID gEfiPciRootBridgeIoProtocolGuid = EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID;
+
+UINT64 gAcpiSpcrTableComBaudRates[8] =
+ {0, 0, 0, 9600, 19200, 38400, 57600, 115200};
+
+CHAR16 *gPciSerialPortsDevicePathVarName[MAX_PCI_SERIAL_PORTS];
+
+SETUP_DATA gSetupData;
+
+//Terminal Driver global variables for SDL tokens.
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: Dont_Send_Ascii_Control_Printable_Characters
+//
+// Description: Variable to replace DONT_SEND_ASCII_CONTROL_PRINTABLE_CHARACTERS.
+// token.
+// Notes: BOOLEAN
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+BOOLEAN Dont_Send_Ascii_Control_Printable_Characters =
+#ifdef DONT_SEND_ASCII_CONTROL_PRINTABLE_CHARACTERS
+ DONT_SEND_ASCII_CONTROL_PRINTABLE_CHARACTERS
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrInterfaceType
+//
+// Description: Variable to replace spcr_interface_type token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrInterfaceType =
+#ifdef spcr_interface_type
+ spcr_interface_type
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrAddrSpcId
+//
+// Description: Variable to replace spcr_addr_spc_id token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrAddrSpcId =
+#ifdef spcr_addr_spc_id
+ spcr_addr_spc_id
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrAddrBitWidth
+//
+// Description: Variable to replace spcr_addr_bit_width token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrAddrBitWidth =
+#ifdef spcr_addr_bit_width
+ spcr_addr_bit_width
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrAddrBitOffset
+//
+// Description: Variable to replace spcr_addr_bit_offset token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrAddrBitOffset =
+#ifdef spcr_addr_bit_offset
+ spcr_addr_bit_offset
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrAccessSize
+//
+// Description: Variable to replace spcr_access_size token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrAccessSize =
+#ifdef spcr_access_size
+ spcr_access_size
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrInterruptType
+//
+// Description: Variable to replace spcr_interrupt_type token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrInterruptType =
+#ifdef spcr_interrupt_type
+ spcr_interrupt_type
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrGlobalSystemInit
+//
+// Description: Variable to replace spcr_global_system_int token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrGlobalSystemInit =
+#ifdef spcr_global_system_int
+ spcr_global_system_int
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrParity
+//
+// Description: Variable to replace spcr_parity token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrParity =
+#ifdef spcr_parity
+ spcr_parity
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrStopBits
+//
+// Description: Variable to replace spcr_stop_bits token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrStopBits =
+#ifdef spcr_stop_bits
+ spcr_stop_bits
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrPciDeviceId
+//
+// Description: Variable to replace spcr_pci_device_id token.
+//
+// Notes: UINT16
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT16 SpcrPciDeviceId =
+#ifdef spcr_pci_device_id
+ spcr_pci_device_id
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrPciVendorId
+//
+// Description: Variable to replace spcr_pci_vendor_id token.
+//
+// Notes: UINT16
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT16 SpcrPciVendorId =
+#ifdef spcr_pci_vendor_id
+ spcr_pci_vendor_id
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrPciBusNumber
+//
+// Description: Variable to replace spcr_pci_bus_number token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrPciBusNumber =
+#ifdef spcr_pci_bus_number
+ spcr_pci_bus_number
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrPciDeviceNumber
+//
+// Description: Variable to replace spcr_interface_type token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrPciDeviceNumber =
+#ifdef spcr_pci_device_number
+ spcr_pci_device_number
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrPciFunctionNumber
+//
+// Description: Variable to replace spcr_pci_function_number token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrPciFunctionNumber =
+#ifdef spcr_pci_function_number
+ spcr_pci_function_number
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrPciFlags
+//
+// Description: Variable to replace spcr_pci_flags token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrPciFlags =
+#ifdef spcr_pci_flags
+ spcr_pci_flags
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: SpcrPciSegment
+//
+// Description: Variable to replace spcr_pci_segment token.
+//
+// Notes: UINT8
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 SpcrPciSegment =
+#ifdef spcr_pci_segment
+ spcr_pci_segment
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: AcpiOemRev
+//
+// Description: Variable to replace ACPI_OEM_REV token.
+//
+// Notes: UINT64
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT64 AcpiOemRev =
+#ifdef ACPI_OEM_REV
+ ACPI_OEM_REV
+#else
+ 0
+#endif
+ ;
+
+//<AMI_SHDR_START>
+//----------------------------------------------------------------------------
+// Name: CoreRevision
+//
+// Description: Variable to replace CORE_REVISION token.
+//
+// Notes: UINT64
+//
+//----------------------------------------------------------------------------
+//<AMI_SHDR_END>
+UINT8 CoreRevision =
+#ifdef CORE_REVISION
+ CORE_REVISION
+#else
+ 0
+#endif
+ ;
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: InitSerialPortsEnabledVar
+//
+// Input: VOID
+//
+// Output: VOID
+//
+// Description: Initializes the variables SERIAL_PORTS_ENABLED_VAR and
+// PCI_SERIAL_PORTS_LOCATION_VAR.
+// SERIAL_PORTS_ENABLED_VAR keeps track of which serial ports
+// (both SuperIO and PCI) are enabled.
+// PCI_SERIAL_PORTS_LOCATION_VAR keeps contains location
+// information about the pci serial ports (device and function
+// numbers).
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+VOID InitSerialPortsEnabledVar(VOID)
+{
+ UINTN DebuggerSerialPortsEnabledVarSize = sizeof(DEBUGGER_SERIAL_PORTS_ENABLED_VAR);
+ DEBUGGER_SERIAL_PORTS_ENABLED_VAR DebuggerSerialPortsEnabledVar;
+ EFI_STATUS Status = EFI_SUCCESS;
+
+#if (TOTAL_SERIAL_PORTS > 0)
+
+ UINTN SerialPortsEnabledVarSize = sizeof(SERIAL_PORTS_ENABLED_VAR);
+ SERIAL_PORTS_ENABLED_VAR SerialPortsEnabledVar;
+
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+ UINTN PciSerialPortsLocationVarSize =
+ sizeof(PCI_SERIAL_PORTS_LOCATION_VAR);
+ PCI_SERIAL_PORTS_LOCATION_VAR PciSerialPortsLocationVar;
+#endif
+#if (TOTAL_SIO_SERIAL_PORTS > 0)
+ UINTN SioSerialPortsLocationVarSize =
+ sizeof(SIO_SERIAL_PORTS_LOCATION_VAR);
+ SIO_SERIAL_PORTS_LOCATION_VAR SioSerialPortsLocationVar;
+#endif
+
+ pBS->SetMem(&SerialPortsEnabledVar,
+ sizeof(SERIAL_PORTS_ENABLED_VAR),
+ 0);
+ Status = pRS->SetVariable(SERIAL_PORTS_ENABLED_VAR_C_NAME,
+ &gTerminalVarGuid,
+ EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ SerialPortsEnabledVarSize,
+ &SerialPortsEnabledVar);
+ ASSERT_EFI_ERROR(Status);
+
+#if (TOTAL_SIO_SERIAL_PORTS > 0)
+ Status = pRS->GetVariable(SIO_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ NULL,
+ &SioSerialPortsLocationVarSize,
+ &SioSerialPortsLocationVar);
+ if (EFI_ERROR(Status)) {
+ pBS->SetMem(&SioSerialPortsLocationVar,
+ sizeof(SIO_SERIAL_PORTS_LOCATION_VAR),
+ 0);
+ Status = pRS->SetVariable(SIO_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ (EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_NON_VOLATILE),
+ SioSerialPortsLocationVarSize,
+ &SioSerialPortsLocationVar);
+ ASSERT_EFI_ERROR(Status);
+ }
+#endif
+
+
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+ Status = pRS->GetVariable(PCI_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ NULL,
+ &PciSerialPortsLocationVarSize,
+ &PciSerialPortsLocationVar);
+ if (EFI_ERROR(Status)) {
+ pBS->SetMem(&PciSerialPortsLocationVar,
+ sizeof(PCI_SERIAL_PORTS_LOCATION_VAR),
+ 0);
+ Status = pRS->SetVariable(PCI_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ (EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_NON_VOLATILE),
+ PciSerialPortsLocationVarSize,
+ &PciSerialPortsLocationVar);
+ ASSERT_EFI_ERROR(Status);
+ }
+#endif
+
+#endif
+ //
+ // Initilize the Amidebugger Serial Port variables.
+ //
+ pBS->SetMem(&DebuggerSerialPortsEnabledVar,
+ sizeof(DEBUGGER_SERIAL_PORTS_ENABLED_VAR),
+ 0);
+ Status = pRS->SetVariable(DEBUGGER_SERIAL_PORTS_ENABLED_VAR_C_NAME,
+ &gDebuggerTerminalVarGuid,
+ EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ DebuggerSerialPortsEnabledVarSize,
+ &DebuggerSerialPortsEnabledVar);
+}
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: SetSerialPortsEnabledVar_Sio
+//
+// Input: IN UINT8 Port
+//
+// Output: VOID
+//
+// Description: Sets SERIAL_PORTS_ENABLED_VAR[Port] to 1.
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+UINT8 SetSerialPortsEnabledVar_Sio(IN UINT8 Uid)
+{
+ UINTN DebuggerSerialPortsEnabledVarSize = sizeof(DEBUGGER_SERIAL_PORTS_ENABLED_VAR);
+ UINT32 DebuggerSerialPortsEnabledVarAttributes=0;
+ DEBUGGER_SERIAL_PORTS_ENABLED_VAR DebuggerSerialPortsEnabledVar;
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ if(Uid == 0xFF) {
+
+ //
+ // Handle the Serial Port that is coming from Ami debugger
+ //
+ Status = pRS->GetVariable(DEBUGGER_SERIAL_PORTS_ENABLED_VAR_C_NAME,
+ &gDebuggerTerminalVarGuid,
+ &DebuggerSerialPortsEnabledVarAttributes,
+ &DebuggerSerialPortsEnabledVarSize,
+ &DebuggerSerialPortsEnabledVar);
+ ASSERT_EFI_ERROR(Status);
+
+ //
+ // Port Present Status.
+ //
+ DebuggerSerialPortsEnabledVar.PortEnabled=1;
+
+ Status = pRS->SetVariable(DEBUGGER_SERIAL_PORTS_ENABLED_VAR_C_NAME,
+ &gDebuggerTerminalVarGuid,
+ EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ DebuggerSerialPortsEnabledVarSize,
+ &DebuggerSerialPortsEnabledVar);
+ ASSERT_EFI_ERROR(Status);
+ //
+ // Return 0xFF, so that it's known as this serial port is coming
+ // from AmiDebugger
+ //
+ return 0xFF;
+ }
+
+#if (TOTAL_SIO_SERIAL_PORTS > 0)
+{
+
+ UINTN SerialPortsEnabledVarSize = sizeof(SERIAL_PORTS_ENABLED_VAR);
+ UINT32 SerialPortsEnabledVarAttributes=0;
+ SERIAL_PORTS_ENABLED_VAR SerialPortsEnabledVar;
+
+ UINTN SioSerialPortsLocationVarSize =
+ sizeof(SIO_SERIAL_PORTS_LOCATION_VAR);
+ UINT32 SioSerialPortsLocationVarAttributes=0;
+ SIO_SERIAL_PORTS_LOCATION_VAR SioSerialPortsLocationVar;
+ EFI_STATUS Status = EFI_SUCCESS;
+ UINT32 i = 0;
+ UINT8 ComPort = 0xFF;
+
+ Status = pRS->GetVariable(SERIAL_PORTS_ENABLED_VAR_C_NAME,
+ &gTerminalVarGuid,
+ &SerialPortsEnabledVarAttributes,
+ &SerialPortsEnabledVarSize,
+ &SerialPortsEnabledVar);
+ ASSERT_EFI_ERROR(Status);
+
+ if(EFI_ERROR(Status)) {
+ return 0xFF;
+ }
+
+ Status = pRS->GetVariable(SIO_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ &SioSerialPortsLocationVarAttributes,
+ &SioSerialPortsLocationVarSize,
+ &SioSerialPortsLocationVar);
+ ASSERT_EFI_ERROR(Status);
+
+ if(EFI_ERROR(Status)) {
+ return 0xFF;
+ }
+
+ for (i = 0; i < TOTAL_SIO_SERIAL_PORTS; i++) {
+ if ((SioSerialPortsLocationVar.PortUid[i] == Uid ) &&
+ (SioSerialPortsLocationVar.Valid[i] == 0xFF)) {
+ SerialPortsEnabledVar.PortsEnabled[i] = 1;
+ ComPort = i;
+ break;
+ }
+ }
+
+ if (i == TOTAL_SIO_SERIAL_PORTS) {
+ for (i = 0; i < TOTAL_SIO_SERIAL_PORTS; i++) {
+ if ((!SerialPortsEnabledVar.PortsEnabled[i]) &&
+ (SioSerialPortsLocationVar.Valid[i] == 0)) {
+
+ SerialPortsEnabledVar.PortsEnabled[i] = 1;
+ ComPort = i;
+
+ SioSerialPortsLocationVar.PortUid[i] = Uid;
+ SioSerialPortsLocationVar.Valid[i] = 0xFF;
+
+ Status = pRS->SetVariable(
+ SIO_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ (EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_NON_VOLATILE),
+ SioSerialPortsLocationVarSize,
+ &SioSerialPortsLocationVar);
+
+ ASSERT_EFI_ERROR(Status);
+ break;
+ }
+ }
+ }
+
+ Status = pRS->SetVariable(SERIAL_PORTS_ENABLED_VAR_C_NAME,
+ &gTerminalVarGuid,
+ EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ SerialPortsEnabledVarSize,
+ &SerialPortsEnabledVar);
+ ASSERT_EFI_ERROR(Status);
+
+ return ComPort;
+}
+#else
+
+ return 0xFF;
+
+#endif
+}
+
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: ValidatePciSerialNvram
+//
+// Input: IN SERIAL_PORTS_ENABLED_VAR SerialPortsEnabledVar,
+// IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+//
+// Output: EFI_STATUS
+//
+// Description: Checks for the Presence of PCI Serial device with values
+// present in the NVRAM Variable PciSerialPortsLocationVar.
+// If found donot change NVRAM variable.If not found delete
+// the NVRAM variable describing the device path and make
+// current PciSerialPortsLocationVar.Bus[i],Device[i] and
+// function[i] to zero.
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+EFI_STATUS ValidatePciSerialNvram(
+ IN SERIAL_PORTS_ENABLED_VAR SerialPortsEnabledVar,
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath)
+{
+ UINT64 PciAddress;
+ UINT8 RevisionId[4];
+ UINT8 SetNvramVariable=0;
+ UINT8 i = 0;
+ EFI_STATUS Status;
+
+ UINTN PciSerialPortsLocationVarSize = sizeof(PCI_SERIAL_PORTS_LOCATION_VAR);
+ UINT32 PciSerialPortsLocationVarAttributes=0;
+ PCI_SERIAL_PORTS_LOCATION_VAR PciSerialPortsLocationVar;
+
+ UINTN PciSerialPortDevicePathVarSize = 0;
+ UINT32 PciSerialPortDevicePathVarAttributes = 0;
+ EFI_DEVICE_PATH_PROTOCOL *PciSerialPortDevicePathVar = NULL;
+
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *gPciRootBridgeIo=NULL;
+
+ if (ValidateNvram == TRUE) {
+ return EFI_SUCCESS;
+ }
+
+ Status = pBS->LocateProtocol( &gEfiPciRootBridgeIoProtocolGuid,
+ NULL,
+ &gPciRootBridgeIo );
+
+ ASSERT_EFI_ERROR(Status);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ValidateNvram = TRUE;
+ Status = pRS->GetVariable(PCI_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ &PciSerialPortsLocationVarAttributes,
+ &PciSerialPortsLocationVarSize,
+ &PciSerialPortsLocationVar );
+ if(EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT_EFI_ERROR(Status);
+
+ for (i = 0; i < TOTAL_PCI_SERIAL_PORTS; i++) {
+ if (!SerialPortsEnabledVar.PortsEnabled[gTotalSioSerialPorts+i]) {
+ if ((PciSerialPortsLocationVar.Bus[i] == 0) &&
+ (PciSerialPortsLocationVar.Device[i] == 0) &&
+ (PciSerialPortsLocationVar.Function[i] == 0)) {
+ continue;
+ }
+
+ PciAddress = PCI_CFG_ADDRESS (PciSerialPortsLocationVar.Bus[i],
+ PciSerialPortsLocationVar.Device[i],
+ PciSerialPortsLocationVar.Function[i],
+ PCI_REV_ID_OFFSET
+ );
+ //
+ //Get the Class Code
+ //
+ Status = gPciRootBridgeIo->Pci.Read(
+ gPciRootBridgeIo,
+ EfiPciWidthUint32,
+ PciAddress,
+ 1,
+ &RevisionId);
+ ASSERT_EFI_ERROR(Status);
+
+ Status = GetEfiVariable(gPciSerialPortsDevicePathVarName[i],
+ &gTerminalVarGuid,
+ &PciSerialPortDevicePathVarAttributes,
+ &PciSerialPortDevicePathVarSize,
+ &PciSerialPortDevicePathVar);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ //
+ //Check for the presence of the PCI Serial device
+ //
+ if ((RevisionId[3] == PCI_CL_COMM) &&
+ ((RevisionId[2] == PCI_CL_COMM_CSL_SERIAL) ||
+ (RevisionId[2] == PCI_CL_COMM_CSL_OTHER)) ) {
+ continue;
+ }
+
+ //
+ //Its not PCI serial Device,So delete NVRAM variable describing device path of the device.
+ //
+ SetNvramVariable = 1;
+ Status = pRS->SetVariable(gPciSerialPortsDevicePathVarName[i],
+ &gTerminalVarGuid,
+ (EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_NON_VOLATILE),
+ NULL,
+ NULL);
+ ASSERT_EFI_ERROR(Status);
+ //
+ //Initialise Bus,Dev,func. to Zero and set variable to represent that device is not present.
+ //
+ PciSerialPortsLocationVar.Bus[i] = 0;
+ PciSerialPortsLocationVar.Device[i] = 0;
+ PciSerialPortsLocationVar.Function[i] = 0;
+ }
+ }
+ if (SetNvramVariable == 1) {
+ Status = pRS->SetVariable(PCI_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ (EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_NON_VOLATILE),
+ PciSerialPortsLocationVarSize,
+ &PciSerialPortsLocationVar);
+ ASSERT_EFI_ERROR(Status);
+ }
+ return EFI_SUCCESS;
+}
+#endif
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: SetSerialPortsEnabledVar_Pci
+//
+// Input:
+// IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+// IN UINT8 Device
+// IN UINT8 Function
+//
+// Output: the assigned com port number
+// UINT8
+//
+// Description: Keeping track of which pci serial ports are enabled
+// a bit complicated.
+// Unlike the SuperIO serial ports, pci serial ports do not
+// have UIDs.
+// We distinguish them by their locations.
+// For each pci serial port, we store the entire device
+// path under the variable names in
+// gPciSerialPortsDevicePathVarName ("COM5," "COM6", etc).
+// We check the parameter "DevicePath" against our stored
+// device paths.
+// If it matches, we return the com port number of that
+// device path.
+// If it doesn't match, we use a new entry in
+// SERIAL_PORTS_ENABLED_VAR for the pci serial port.
+// We also use a new entry in PCI_SERIAL_PORTS_LOCATION_VAR
+// and store the device and function numbers.
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+UINT8 SetSerialPortsEnabledVar_Pci(
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
+ IN UINT8 Bus,
+ IN UINT8 Device,
+ IN UINT8 Function,
+ IN UINT8 Port,
+ IN BOOLEAN AmiPciSerialDetected)
+{
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+ UINTN SerialPortsEnabledVarSize = sizeof(SERIAL_PORTS_ENABLED_VAR);
+ UINT32 SerialPortsEnabledVarAttributes=0;
+ SERIAL_PORTS_ENABLED_VAR SerialPortsEnabledVar;
+
+ UINTN PciSerialPortsLocationVarSize =
+ sizeof(PCI_SERIAL_PORTS_LOCATION_VAR);
+ UINT32 PciSerialPortsLocationVarAttributes=0;
+ PCI_SERIAL_PORTS_LOCATION_VAR PciSerialPortsLocationVar;
+
+ UINTN PciSerialPortDevicePathVarSize = 0;
+ UINT32 PciSerialPortDevicePathVarAttributes = 0;
+ EFI_DEVICE_PATH_PROTOCOL *PciSerialPortDevicePathVar = NULL;
+
+ EFI_STATUS Status = EFI_SUCCESS;
+ UINT32 i = 0;
+ UINT8 ComPort=0xFF;
+ CHAR16 PciSerialPortName[TOTAL_PCI_SERIAL_PORTS][6];
+
+ for ( i = 0; i < TOTAL_PCI_SERIAL_PORTS; i++) {
+ Swprintf(PciSerialPortName[i], L"COM%x", gTotalSioSerialPorts+i);
+ gPciSerialPortsDevicePathVarName[i] = PciSerialPortName[i];
+ }
+
+ Status = pRS->GetVariable(SERIAL_PORTS_ENABLED_VAR_C_NAME,
+ &gTerminalVarGuid,
+ &SerialPortsEnabledVarAttributes,
+ &SerialPortsEnabledVarSize,
+ &SerialPortsEnabledVar);
+ ASSERT_EFI_ERROR(Status);
+
+ if(EFI_ERROR(Status)) {
+ return 0xFF;
+ }
+
+ Status = ValidatePciSerialNvram(SerialPortsEnabledVar,DevicePath);
+
+ if (EFI_ERROR(Status)) {
+ return 0xFF;
+ }
+
+ Status = pRS->GetVariable(PCI_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ &PciSerialPortsLocationVarAttributes,
+ &PciSerialPortsLocationVarSize,
+ &PciSerialPortsLocationVar);
+ ASSERT_EFI_ERROR(Status);
+
+ if(EFI_ERROR(Status)) {
+ return 0xFF;
+ }
+
+ for (i = 0; i < TOTAL_PCI_SERIAL_PORTS; i++) {
+ if ((PciSerialPortsLocationVar.Device[i] == Device) &&
+ (PciSerialPortsLocationVar.Function[i] == Function)) {
+ Status = GetEfiVariable(gPciSerialPortsDevicePathVarName[i],
+ &gTerminalVarGuid,
+ &PciSerialPortDevicePathVarAttributes,
+ &PciSerialPortDevicePathVarSize,
+ &PciSerialPortDevicePathVar);
+ if (!EFI_ERROR(Status)) {
+ if (!DPCmp(DevicePath, PciSerialPortDevicePathVar)) {
+ SerialPortsEnabledVar.PortsEnabled[gTotalSioSerialPorts+i] = 1;
+ ComPort = gTotalSioSerialPorts+i;
+ break;
+ }
+ }
+ }
+ }
+
+ if (i == TOTAL_PCI_SERIAL_PORTS) {
+ for (i = 0; i < TOTAL_PCI_SERIAL_PORTS; i++) {
+ if ((!SerialPortsEnabledVar.PortsEnabled[gTotalSioSerialPorts+i]) &&
+ (PciSerialPortsLocationVar.Device[i] == 0) &&
+ (PciSerialPortsLocationVar.Function[i] == 0)) {
+ Status = GetEfiVariable(
+ gPciSerialPortsDevicePathVarName[i],
+ &gTerminalVarGuid,
+ &PciSerialPortDevicePathVarAttributes,
+ &PciSerialPortDevicePathVarSize,
+ &PciSerialPortDevicePathVar);
+ if (Status == EFI_NOT_FOUND) {
+ SerialPortsEnabledVar.PortsEnabled[gTotalSioSerialPorts+i] = 1;
+ ComPort = gTotalSioSerialPorts+i;
+
+ PciSerialPortDevicePathVarSize = DPLength(DevicePath);
+ Status = pRS->SetVariable(
+ gPciSerialPortsDevicePathVarName[i],
+ &gTerminalVarGuid,
+ (EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_NON_VOLATILE),
+ PciSerialPortDevicePathVarSize,
+ DevicePath);
+ ASSERT_EFI_ERROR(Status);
+
+ PciSerialPortsLocationVar.Bus[i] = Bus;
+ PciSerialPortsLocationVar.Device[i] = Device;
+ PciSerialPortsLocationVar.Function[i] = Function;
+ if(AmiPciSerialDetected) {
+ PciSerialPortsLocationVar.AmiPciSerialPresent[i] = TRUE;
+ PciSerialPortsLocationVar.Port[i] = Port;
+ }
+
+ Status = pRS->SetVariable(
+ PCI_SERIAL_PORTS_LOCATION_VAR_C_NAME,
+ &gTerminalVarGuid,
+ (EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_NON_VOLATILE),
+ PciSerialPortsLocationVarSize,
+ &PciSerialPortsLocationVar);
+ ASSERT_EFI_ERROR(Status);
+
+ break;
+ }
+ }
+ }
+ }
+
+ Status = pRS->SetVariable(SERIAL_PORTS_ENABLED_VAR_C_NAME,
+ &gTerminalVarGuid,
+ EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ SerialPortsEnabledVarSize,
+ &SerialPortsEnabledVar);
+ ASSERT_EFI_ERROR(Status);
+
+ return ComPort;
+
+#else
+
+ return 0xFF;
+
+#endif
+}
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: GetSetupValuesForSerialIoMode
+//
+// Input:
+// IN UINT8 Port
+// IN OUT SERIAL_IO_MODE *SerialIoMode
+//
+// Output: VOID
+//
+// Description: Returns the user configured SERIAL_IO_MODE values.
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+VOID GetSetupValuesForSerialIoMode(
+ IN UINT8 Port,
+ IN OUT SERIAL_IO_MODE *SerialIoMode)
+{
+ UINT32 SetupDataAttributes = 0;
+ UINTN SetupDataVarSize = sizeof(SETUP_DATA);
+
+ UINT8 LoopbackEnable = 0;
+ UINT8 FlowControl = 0;
+ EFI_STATUS Status = EFI_SUCCESS;
+
+#if (TOTAL_SERIAL_PORTS == 0)
+
+ LoopbackEnable = UART_DEFAULT_LOOPBACK_ENABLE;
+ FlowControl = UART_DEFAULT_FLOW_CONTROL;
+ SerialIoMode->BaudRate =
+ gAcpiSpcrTableComBaudRates[UART_DEFAULT_BAUD_RATE_INDEX];
+ SerialIoMode->Parity = UART_DEFAULT_PARITY;
+ SerialIoMode->DataBits = UART_DEFAULT_DATA_BITS;
+ SerialIoMode->StopBits = UART_DEFAULT_STOP_BITS;
+
+#else
+
+ Status = pRS->GetVariable(L"Setup", &gSetupGuid, &SetupDataAttributes,
+ &SetupDataVarSize, &gSetupData);
+
+ if (EFI_ERROR(Status)) {
+ LoopbackEnable = UART_DEFAULT_LOOPBACK_ENABLE;
+ FlowControl = UART_DEFAULT_FLOW_CONTROL;
+ SerialIoMode->BaudRate =
+ gAcpiSpcrTableComBaudRates[UART_DEFAULT_BAUD_RATE_INDEX];
+ SerialIoMode->Parity = UART_DEFAULT_PARITY;
+ SerialIoMode->DataBits = UART_DEFAULT_DATA_BITS;
+ SerialIoMode->StopBits = UART_DEFAULT_STOP_BITS;
+ } else {
+ LoopbackEnable = gSetupData.LoopbackEnable[Port];
+ FlowControl = gSetupData.FlowControl[Port];
+ SerialIoMode->BaudRate =
+ gAcpiSpcrTableComBaudRates[gSetupData.BaudRate[Port]];
+ SerialIoMode->Parity = gSetupData.Parity[Port];
+ SerialIoMode->DataBits = gSetupData.DataBits[Port];
+ SerialIoMode->StopBits = gSetupData.StopBits[Port];
+ }
+
+#endif
+
+ SerialIoMode->ControlMask = 0;
+ if (FlowControl == HARDWARE_FLOW_CONTROL_SETUP_OPTION)
+ SerialIoMode->ControlMask |= EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE;
+ else if (FlowControl == SOFTWARE_FLOW_CONTROL_SETUP_OPTION)
+ SerialIoMode->ControlMask |= EFI_SERIAL_SOFTWARE_FLOW_CONTROL_ENABLE;
+}
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: GetDefaultConsoleRedirectionStatus
+//
+// Description: Returns the default settings of the ConsoleRedirection
+// enable status
+//
+// Input: IN UINT8 Port
+//
+// Output: OUT UINT8 RedirectionStatus
+//
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+UINT8 GetDefaultConsoleRedirectionStatus(
+ IN UINT8 Port
+)
+{
+ switch (Port) {
+#if (TOTAL_SIO_SERIAL_PORTS > 0)
+ case 0:
+ return COM0_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 1)
+ case 1:
+ return COM1_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 2)
+ case 2:
+ return COM2_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 3)
+ case 3:
+ return COM3_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 4)
+ case 4:
+ return COM4_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 5)
+ case 5:
+ return COM5_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 6)
+ case 6:
+ return COM6_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 7)
+ case 7:
+ return COM7_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 8)
+ case 8:
+ return COM8_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 9)
+ case 9:
+ return COM9_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+ case (TOTAL_SIO_SERIAL_PORTS):
+ return PCI0_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_PCI_SERIAL_PORTS > 1)
+ case (TOTAL_SIO_SERIAL_PORTS+1):
+ return PCI1_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_PCI_SERIAL_PORTS > 2)
+ case (TOTAL_SIO_SERIAL_PORTS+2):
+ return PCI2_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+#if (TOTAL_PCI_SERIAL_PORTS > 3)
+ case (TOTAL_SIO_SERIAL_PORTS+3):
+ return PCI3_DEFAULT_CONSOLE_REDIRECTION_ENABLE;
+#endif
+
+ }
+
+ return 0;
+}
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: GetSetupValuesForTerminal
+//
+// Input:
+// IN UINT8 Port
+// IN OUT UINT8 *ConsoleRedirectionEnable
+// IN OUT UINT8 *TerminalType
+// IN OUT BOOLEAN *SupportExRes
+// IN OUT BOOLEAN *RecorderMode,
+// IN OUT UINT8 *Disable_Terminal_For_SCT_Test
+//
+// Output: VOID
+//
+// Description: Returns the Setup setttings for the terminal
+// (whether redirection is enabled and the terminal type).
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+VOID GetSetupValuesForTerminal(
+ IN UINT8 Port,
+ IN OUT UINT8 *ConsoleRedirectionEnable,
+ IN OUT UINT8 *TerminalType,
+ IN OUT BOOLEAN *SupportExRes,
+ IN OUT BOOLEAN *VtUtf8,
+ IN OUT BOOLEAN *RecorderMode,
+ IN OUT BOOLEAN *PuttyKeyPad,
+ IN OUT UINT8 *Disable_Terminal_For_SCT_Test)
+{
+ UINT32 SetupDataAttributes = 0;
+ UINTN SetupDataSize = sizeof(SETUP_DATA);
+
+ EFI_STATUS Status ;
+
+ *Disable_Terminal_For_SCT_Test = DISABLE_TERMINAL_FOR_SCT_TEST;
+
+ Status = pRS->GetVariable(L"Setup", &gSetupGuid, &SetupDataAttributes,
+ &SetupDataSize, &gSetupData);
+
+ if(Port == (UINT8)-1){
+ //
+ // If the redirection comes Via Ami debugger
+ //
+#ifdef CONSOLE_REDIRECTION_SUPPORT
+#if CONSOLE_REDIRECTION_SUPPORT == 1
+ if(EFI_ERROR(Status)) {
+ //
+ // If the Setup Variable is not Found Return the Default values
+ //
+ *ConsoleRedirectionEnable = DEFAULT_DEBUGGER_CONSOLE_REDIRECTION_ENABLE;
+ *TerminalType = DEFAULT_TERMINAL_TYPE;
+ *SupportExRes = FALSE;
+ *VtUtf8 = VTUTF8_ENABLE;
+ *RecorderMode = FALSE;
+ *PuttyKeyPad = PUTTY_VT100;
+ } else {
+ //
+ // Setup Values Found for the Debugger Serial port.
+ //
+ *ConsoleRedirectionEnable=gSetupData.DebuggerConsoleRedirectionEnable;
+ *TerminalType = gSetupData.DebuggerTerminalType;
+ *SupportExRes = FALSE;
+ *VtUtf8 = VTUTF8_ENABLE;
+ *RecorderMode = FALSE;
+ *PuttyKeyPad = PUTTY_VT100;
+ }
+#else
+ //
+ // CONSOLE_REDIRECTION_SUPPORT token is defined in Amidebugger module.
+ // But if this token is disabled, return the default values.
+ //
+ *ConsoleRedirectionEnable = DEFAULT_DEBUGGER_CONSOLE_REDIRECTION_ENABLE;
+ *TerminalType = DEFAULT_TERMINAL_TYPE;
+ *SupportExRes = FALSE;
+ *VtUtf8 = VTUTF8_ENABLE;
+ *RecorderMode = FALSE;
+ *PuttyKeyPad = PUTTY_VT100;
+#endif
+#else
+ //
+ // CONSOLE_REDIRECTION_SUPPORT token is defined in Amidebugger module.
+ // If this token is not present, return the default values.
+ //
+ *ConsoleRedirectionEnable = DEFAULT_DEBUGGER_CONSOLE_REDIRECTION_ENABLE;
+ *TerminalType = DEFAULT_TERMINAL_TYPE;
+ *SupportExRes = FALSE;
+ *VtUtf8 = VTUTF8_ENABLE;
+ *RecorderMode = FALSE;
+ *PuttyKeyPad = PUTTY_VT100;
+
+#endif
+
+ return;
+ }
+
+#if (TOTAL_SERIAL_PORTS == 0)
+
+ *ConsoleRedirectionEnable = GetDefaultConsoleRedirectionStatus(Port);
+ *TerminalType = DEFAULT_TERMINAL_TYPE;
+ *SupportExRes = FALSE;
+ *VtUtf8 = VTUTF8_ENABLE;
+ *RecorderMode = FALSE;
+ *PuttyKeyPad = PUTTY_VT100;
+
+#else
+ if (EFI_ERROR(Status)) {
+ *ConsoleRedirectionEnable = GetDefaultConsoleRedirectionStatus(Port);
+ *TerminalType = DEFAULT_TERMINAL_TYPE;
+ *SupportExRes = FALSE;
+ *VtUtf8 = VTUTF8_ENABLE;
+ *RecorderMode = FALSE;
+ *PuttyKeyPad = PUTTY_VT100;
+ } else {
+ *ConsoleRedirectionEnable =
+ gSetupData.ConsoleRedirectionEnable[Port];
+ *TerminalType = gSetupData.TerminalType[Port];
+ *SupportExRes = (gSetupData.Resolution[Port] == 0) ? FALSE : TRUE;
+ *VtUtf8 = (gSetupData.VtUtf8[Port] == 0) ? FALSE : TRUE;
+ *RecorderMode = (gSetupData.RecorderMode[Port] == 0) ? FALSE : TRUE;
+ *PuttyKeyPad = gSetupData.PuttyFunctionKeyPad[Port];
+ }
+#endif
+}
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: GetAcpiSpcrTableValues
+//
+// Input:
+// IN OUT UINT8 *AcpiSpcrTableComPort
+// IN OUT UINT8 *AcpiSpcrTableConsoleRedirectionEnable
+// IN OUT UINT8 *AcpiSpcrTableTerminalType
+// IN OUT UINT8 *AcpiSpcrTableBaudRate
+// IN OUT UINT8 *AcpiSpcrTableFlowControl
+//
+// Output: VOID
+//
+// Description: Returns the configurable aspects of the acpi spcr table
+// com port (the com port number, whether the console
+// redirection is enabled, the terminal type, baude rate,
+// and flow control type used).
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+VOID GetAcpiSpcrTableValues(
+ IN OUT UINT8 *AcpiSpcrTableComPort,
+ IN OUT UINT8 *AcpiSpcrTableConsoleRedirectionEnable,
+ IN OUT UINT8 *AcpiSpcrTableTerminalType,
+ IN OUT UINT8 *AcpiSpcrTableBaudRate,
+ IN OUT UINT8 *AcpiSpcrTableFlowControl)
+{
+ UINT32 SetupDataAttributes = 0;
+ UINTN SetupDataSize = sizeof(SETUP_DATA);
+
+ EFI_STATUS Status = EFI_SUCCESS ;
+
+#if (TOTAL_SERIAL_PORTS == 0)
+
+ *AcpiSpcrTableComPort = DEFAULT_ACPI_SPCR_COM_PORT;
+ *AcpiSpcrTableConsoleRedirectionEnable =
+ DEFAULT_ACPI_SPCR_CONSOLE_REDIRECTION_ENABLE;
+ *AcpiSpcrTableTerminalType = DEFAULT_ACPI_SPCR_TABLE_TERMINAL_TYPE;
+ *AcpiSpcrTableBaudRate = UART_DEFAULT_BAUD_RATE_INDEX;
+ *AcpiSpcrTableFlowControl = UART_DEFAULT_FLOW_CONTROL;
+
+#else
+
+ Status = pRS->GetVariable(L"Setup", &gSetupGuid, &SetupDataAttributes,
+ &SetupDataSize, &gSetupData);
+
+ if (EFI_ERROR(Status)) {
+ *AcpiSpcrTableComPort = DEFAULT_ACPI_SPCR_COM_PORT;
+ *AcpiSpcrTableConsoleRedirectionEnable =
+ DEFAULT_ACPI_SPCR_CONSOLE_REDIRECTION_ENABLE;
+ *AcpiSpcrTableTerminalType = DEFAULT_ACPI_SPCR_TABLE_TERMINAL_TYPE;
+ *AcpiSpcrTableBaudRate = UART_DEFAULT_BAUD_RATE_INDEX;
+ *AcpiSpcrTableFlowControl = UART_DEFAULT_FLOW_CONTROL;
+ } else {
+#if EFI_SPECIFICATION_VERSION<0x2000A
+ *AcpiSpcrTableComPort = gSetupData.AcpiSpcrPort-1;
+#else
+ *AcpiSpcrTableComPort = gSetupData.AcpiSpcrPort;
+#endif
+
+ *AcpiSpcrTableConsoleRedirectionEnable =
+ gSetupData.AcpiSpcrConsoleRedirectionEnable;
+ *AcpiSpcrTableTerminalType = gSetupData.AcpiSpcrTerminalType;
+ *AcpiSpcrTableBaudRate =
+ gSetupData.AcpiSpcrBaudRate;
+ *AcpiSpcrTableFlowControl =
+ gSetupData.AcpiSpcrFlowControl;
+ }
+
+#endif
+}
+
+#include <Protocol\ComponentName.h>
+#ifndef EFI_COMPONENT_NAME2_PROTOCOL_GUID //old Core
+BOOLEAN LanguageCodesEqual(
+ CONST CHAR8* LangCode1, CONST CHAR8* LangCode2
+){
+ return LangCode1[0]==LangCode2[0]
+ && LangCode1[1]==LangCode2[1]
+ && LangCode1[2]==LangCode2[2];
+}
+#endif
+
+#ifndef LANGUAGE_CODE_ENGLISH
+CHAR8 SupportedLanguages[] = "eng";
+#else
+CHAR8 SupportedLanguages[] = LANGUAGE_CODE_ENGLISH;
+#endif
+
+//****************************************************************************
+//****************************************************************************
+//** **
+//** (C)Copyright 1985-20014, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone (770)-246-8600 **
+//** **
+//****************************************************************************
+//****************************************************************************
diff --git a/Core/EM/Terminal/TerminalSetupVar.h b/Core/EM/Terminal/TerminalSetupVar.h
new file mode 100644
index 0000000..081679d
--- /dev/null
+++ b/Core/EM/Terminal/TerminalSetupVar.h
@@ -0,0 +1,167 @@
+//****************************************************************************
+//****************************************************************************
+//** **
+//** (C)Copyright 1985-2009, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone (770)-246-8600 **
+//** **
+//****************************************************************************
+//****************************************************************************
+// $Header: /Alaska/BIN/Modules/Terminal/TerminalSetupVar.h 14 12/12/11 6:55a Rajeshms $
+//
+// $Revision: 14 $
+//
+// $Date: 12/12/11 6:55a $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/BIN/Modules/Terminal/TerminalSetupVar.h $
+//
+// 14 12/12/11 6:55a Rajeshms
+// [TAG] EIP71636
+// [Category] New Feature
+// [Description] Implement the AMI_SERIAL_PROTOCOL for non-generic PCI
+// Serial Device.
+// [Files] AmiSerial.c, AmiSerial.sdl, AmiSerial.mak, AmiSerial.chm,
+// AmiSerial.dxs, AmiSerial.cif, Terminal.c, SerialIo.c, TerminalSetup.c,
+// InitTerminalStrings.c, TerminalSetupVar.h, Terminal.cif,
+// TerminalAmiSerial.h, LegacySredir_Setup.c
+//
+// 13 1/24/11 4:04a Lavanyap
+// [TAG] - EIP48183
+// [Category] - IMPROVEMENT
+// [Description] - Update the Terminal eModule to utilize Setup
+// Customization
+// [Files] - Terminal.sd, TerminalSetupVar.h
+//
+// 12 5/03/10 12:22a Rameshr
+// Issue:VT-UTF8 mode support for Console redirection with Debugger
+// Solution: Serial Port attribute Setup questions added for the debugger
+// console redirection port.
+// EIP 37440
+//
+// 11 9/28/09 4:09p Rameshr
+// Terminal assumes UID to be started from 0. This assumption removed as
+// UID should be unique and not be started from 0.
+// EIP 17239
+//
+// 10 7/02/09 5:01p Rameshr
+// Coding Standard and File header updated.
+//
+// 9 6/22/09 12:58p Ambikas
+//
+// 8 4/14/08 6:51p Ambikas
+//
+// 7 6/12/07 3:55p Ambikas
+//
+// 6 6/06/07 7:53p Ambikas
+// We no longer save segment and bus number of pci serial device.
+//
+// 5 6/05/07 6:16p Ambikas
+//
+// 4 6/05/07 11:47a Ambikas
+//
+// 3 6/4/2007 7:31p
+// The setup question related data structures for the serial ports will
+// not be defined if TOTAL_SERIAL_PORTS is 0.
+//
+// 2 5/24/2007 2:33p Ambikas
+//
+// 1 5/05/2006 5:33p Ambikas
+//
+//**********************************************************************
+//<AMI_FHDR_START>
+//
+// Name: TerminalSetupVar.h
+//
+// Description: Contains definition of PCI_SERIAL_PORTS_LOCATION_VAR
+// and of varstore declaration SERIAL_PORTS_ENABLED_VAR.
+//
+//<AMI_FHDR_END>
+//**********************************************************************
+
+#ifndef _TERMINAL_SETUP_VAR_H
+#define _TERMINAL_SETUP_VAR_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <token.h>
+
+#define TERMINAL_VAR_GUID \
+{0x560bf58a, 0x1e0d, 0x4d7e, 0x95, 0x3f, 0x29, 0x80, 0xa2, 0x61, 0xe0, 0x31}
+
+#define SERIAL_PORTS_ENABLED_VAR_C_NAME L"SerialPortsEnabledVar"
+#define SIO_SERIAL_PORTS_LOCATION_VAR_C_NAME L"SioSerialPortsLocationVar"
+#define PCI_SERIAL_PORTS_LOCATION_VAR_C_NAME L"PciSerialPortsLocationVar"
+#define DEBUGGER_SERIAL_PORTS_ENABLED_VAR_C_NAME L"DebuggerSerialPortsEnabledVar"
+
+#define DEBUGGER_TERMINAL_VAR_GUID \
+{0x97ca1a5b, 0xb760, 0x4d1f, 0xa5, 0x4b, 0xd1, 0x90, 0x92, 0x3, 0x2c, 0x90}
+
+#pragma pack(1)
+
+#ifndef TYPEDEF_DEBUGGER_SERIAL_PORTS_ENABLED_VAR
+#define TYPEDEF_DEBUGGER_SERIAL_PORTS_ENABLED_VAR
+ typedef struct {
+ UINT8 PortEnabled;
+ } DEBUGGER_SERIAL_PORTS_ENABLED_VAR;
+#endif
+
+#if (TOTAL_SERIAL_PORTS > 0)
+#ifndef TYPEDEF_SERIAL_PORTS_ENABLED_VAR
+#define TYPEDEF_SERIAL_PORTS_ENABLED_VAR
+ typedef struct {
+ UINT8 PortsEnabled[ TOTAL_SERIAL_PORTS ];
+ } SERIAL_PORTS_ENABLED_VAR;
+#endif
+#endif
+
+#if (TOTAL_SIO_SERIAL_PORTS > 0)
+#ifndef TYPEDEF_SIO_SERIAL_PORTS_LOCATION_VAR
+#define TYPEDEF_SIO_SERIAL_PORTS_LOCATION_VAR
+ typedef struct {
+ UINT8 PortUid[ TOTAL_SIO_SERIAL_PORTS ];
+ UINT8 Valid[ TOTAL_SIO_SERIAL_PORTS ];
+ } SIO_SERIAL_PORTS_LOCATION_VAR;
+#endif
+#endif
+
+#if (TOTAL_PCI_SERIAL_PORTS > 0)
+#ifndef TYPEDEF_PCI_SERIAL_PORTS_LOCATION_VAR
+#define TYPEDEF_PCI_SERIAL_PORTS_LOCATION_VAR
+ typedef struct {
+ UINT8 Segment[ TOTAL_PCI_SERIAL_PORTS ];
+ UINT8 Bus[ TOTAL_PCI_SERIAL_PORTS ];
+ UINT8 Device[ TOTAL_PCI_SERIAL_PORTS ];
+ UINT8 Function[ TOTAL_PCI_SERIAL_PORTS ];
+ UINT8 AmiPciSerialPresent[ TOTAL_PCI_SERIAL_PORTS ];
+ UINT8 Port[ TOTAL_PCI_SERIAL_PORTS ];
+ } PCI_SERIAL_PORTS_LOCATION_VAR;
+#endif
+#endif
+
+#pragma pack()
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+//****************************************************************************
+//****************************************************************************
+//** **
+//** (C)Copyright 1985-2009, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone (770)-246-8600 **
+//** **
+//****************************************************************************
+//****************************************************************************
diff --git a/Core/EM/Terminal/Terminalx64.lib b/Core/EM/Terminal/Terminalx64.lib
new file mode 100644
index 0000000..386f64c
--- /dev/null
+++ b/Core/EM/Terminal/Terminalx64.lib
Binary files differ