#ifndef __WIN_NT_IO_H__\r
#define __WIN_NT_IO_H__\r
\r
+#include <Protocol/WinNtThunk.h>\r
+\r
#define EFI_WIN_NT_IO_PROTOCOL_GUID \\r
{ 0x96eb4ad6, 0xa32a, 0x11d4, { 0xbc, 0xfd, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }\r
\r
$(WORKSPACE)\Nt32Pkg\WinNtThunkPPIToProtocolPeim\WinNtThunkPPIToProtocolPeim.inf\r
$(WORKSPACE)\Nt32Pkg\WinNtAutoScanPeim\WinNtAutoScan.inf\r
$(WORKSPACE)\Nt32Pkg\WinNtBlockIoDxe\WinNtBlockIo.inf\r
- $(WORKSPACE)\Nt32Pkg\WinNtBusDriverDxe\WinNtBusDriver.inf
\ No newline at end of file
+ $(WORKSPACE)\Nt32Pkg\WinNtBusDriverDxe\WinNtBusDriver.inf\r
+ $(WORKSPACE)\Nt32Pkg\WinNtConsoleDxe\WinNtConsole.inf
\ No newline at end of file
--- /dev/null
+/*++\r
+\r
+Copyright (c) 2006, Intel Corporation \r
+All rights reserved. This program and the accompanying materials \r
+are licensed and made available under the terms and conditions of the BSD License \r
+which accompanies this distribution. The full text of the license may be found at \r
+http://opensource.org/licenses/bsd-license.php \r
+ \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+Module Name:\r
+\r
+ ComponentName.c\r
+\r
+Abstract:\r
+\r
+--*/\r
+//\r
+// The package level header files this module uses\r
+//\r
+#include <Uefi.h>\r
+#include <WinNtDxe.h>\r
+//\r
+// The protocols, PPI and GUID defintions for this module\r
+//\r
+#include <Protocol/SimpleTextIn.h>\r
+#include <Protocol/WinNtIo.h>\r
+#include <Protocol/SimpleTextOut.h>\r
+#include <Protocol/ComponentName.h>\r
+#include <Protocol/DriverBinding.h>\r
+//\r
+// The Library classes this module consumes\r
+//\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/UefiDriverEntryPoint.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+#include "Console.h"\r
+\r
+//\r
+// EFI Component Name Functions\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtConsoleComponentNameGetDriverName (\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **DriverName\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtConsoleComponentNameGetControllerName (\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_HANDLE ChildHandle OPTIONAL,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **ControllerName\r
+ );\r
+\r
+//\r
+// EFI Component Name Protocol\r
+//\r
+EFI_COMPONENT_NAME_PROTOCOL gWinNtConsoleComponentName = {\r
+ WinNtConsoleComponentNameGetDriverName,\r
+ WinNtConsoleComponentNameGetControllerName,\r
+ "eng"\r
+};\r
+\r
+static EFI_UNICODE_STRING_TABLE mWinNtConsoleDriverNameTable[] = {\r
+ { "eng", L"Windows Text Console Driver" },\r
+ { NULL , NULL }\r
+};\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtConsoleComponentNameGetDriverName (\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **DriverName\r
+ )\r
+/*++\r
+\r
+ Routine Description:\r
+ Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
+\r
+ Arguments:\r
+ This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
+ Language - A pointer to a three character ISO 639-2 language identifier.\r
+ This is the language of the driver name that that the caller \r
+ is requesting, and it must match one of the languages specified\r
+ in SupportedLanguages. The number of languages supported by a \r
+ driver is up to the driver writer.\r
+ DriverName - A pointer to the Unicode string to return. This Unicode string\r
+ is the name of the driver specified by This in the language \r
+ specified by Language.\r
+\r
+ Returns:\r
+ EFI_SUCCESS - The Unicode string for the Driver specified by This\r
+ and the language specified by Language was returned \r
+ in DriverName.\r
+ EFI_INVALID_PARAMETER - Language is NULL.\r
+ EFI_INVALID_PARAMETER - DriverName is NULL.\r
+ EFI_UNSUPPORTED - The driver specified by This does not support the \r
+ language specified by Language.\r
+\r
+--*/\r
+{\r
+ return LookupUnicodeString (\r
+ Language,\r
+ gWinNtConsoleComponentName.SupportedLanguages,\r
+ mWinNtConsoleDriverNameTable,\r
+ DriverName\r
+ );\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtConsoleComponentNameGetControllerName (\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_HANDLE ChildHandle OPTIONAL,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **ControllerName\r
+ )\r
+/*++\r
+\r
+ Routine Description:\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by an EFI Driver.\r
+\r
+ Arguments:\r
+ This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
+ ControllerHandle - The handle of a controller that the driver specified by \r
+ This is managing. This handle specifies the controller \r
+ whose name is to be returned.\r
+ ChildHandle - The handle of the child controller to retrieve the name \r
+ of. This is an optional parameter that may be NULL. It \r
+ will be NULL for device drivers. It will also be NULL \r
+ for a bus drivers that wish to retrieve the name of the \r
+ bus controller. It will not be NULL for a bus driver \r
+ that wishes to retrieve the name of a child controller.\r
+ Language - A pointer to a three character ISO 639-2 language \r
+ identifier. This is the language of the controller name \r
+ that that the caller is requesting, and it must match one\r
+ of the languages specified in SupportedLanguages. The \r
+ number of languages supported by a driver is up to the \r
+ driver writer.\r
+ ControllerName - A pointer to the Unicode string to return. This Unicode\r
+ string is the name of the controller specified by \r
+ ControllerHandle and ChildHandle in the language specified\r
+ by Language from the point of view of the driver specified\r
+ by This. \r
+\r
+ Returns:\r
+ EFI_SUCCESS - The Unicode string for the user readable name in the \r
+ language specified by Language for the driver \r
+ specified by This was returned in DriverName.\r
+ EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
+ EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
+ EFI_INVALID_PARAMETER - Language is NULL.\r
+ EFI_INVALID_PARAMETER - ControllerName is NULL.\r
+ EFI_UNSUPPORTED - The driver specified by This is not currently managing \r
+ the controller specified by ControllerHandle and \r
+ ChildHandle.\r
+ EFI_UNSUPPORTED - The driver specified by This does not support the \r
+ language specified by Language.\r
+\r
+--*/\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut;\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+\r
+ //\r
+ // This is a device driver, so ChildHandle must be NULL.\r
+ //\r
+ if (ChildHandle != NULL) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+ //\r
+ // Make sure this driver is currently managing ControllerHandle\r
+ //\r
+ Status = EfiTestManagedDevice (\r
+ ControllerHandle,\r
+ gWinNtConsoleDriverBinding.DriverBindingHandle,\r
+ &gEfiWinNtIoProtocolGuid\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+ //\r
+ // Get out context back\r
+ //\r
+ Status = gBS->OpenProtocol (\r
+ ControllerHandle,\r
+ &gEfiSimpleTextOutProtocolGuid,\r
+ &SimpleTextOut,\r
+ gWinNtConsoleDriverBinding.DriverBindingHandle,\r
+ ControllerHandle,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (SimpleTextOut);\r
+\r
+ return LookupUnicodeString (\r
+ Language,\r
+ gWinNtConsoleComponentName.SupportedLanguages,\r
+ Private->ControllerNameTable,\r
+ ControllerName\r
+ );\r
+}\r
--- /dev/null
+/*++\r
+\r
+Copyright (c) 2006 - 2007, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+Module Name:\r
+\r
+ Console.c\r
+\r
+Abstract:\r
+\r
+ Console based on Win32 APIs.\r
+\r
+--*/\r
+\r
+//\r
+// The package level header files this module uses\r
+//\r
+#include <Uefi.h>\r
+#include <WinNtDxe.h>\r
+//\r
+// The protocols, PPI and GUID defintions for this module\r
+//\r
+#include <Protocol/SimpleTextIn.h>\r
+#include <Protocol/WinNtIo.h>\r
+#include <Protocol/SimpleTextOut.h>\r
+#include <Protocol/ComponentName.h>\r
+#include <Protocol/DriverBinding.h>\r
+//\r
+// The Library classes this module consumes\r
+//\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/UefiDriverEntryPoint.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+#include "Console.h"\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtConsoleDriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Handle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtConsoleDriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Handle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtConsoleDriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Handle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ );\r
+\r
+EFI_DRIVER_BINDING_PROTOCOL gWinNtConsoleDriverBinding = {\r
+ WinNtConsoleDriverBindingSupported,\r
+ WinNtConsoleDriverBindingStart,\r
+ WinNtConsoleDriverBindingStop,\r
+ 0xa,\r
+ NULL,\r
+ NULL\r
+};\r
+\r
+/**\r
+ The user Entry Point for module WinNtConsole. The user code starts with this function.\r
+\r
+ @param[in] ImageHandle The firmware allocated handle for the EFI image. \r
+ @param[in] SystemTable A pointer to the EFI System Table.\r
+ \r
+ @retval EFI_SUCCESS The entry point is executed successfully.\r
+ @retval other Some error occurs when executing this entry point.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+InitializeWinNtConsole(\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ //\r
+ // Install driver model protocol(s).\r
+ //\r
+ Status = EfiLibInstallAllDriverProtocols (\r
+ ImageHandle,\r
+ SystemTable,\r
+ &gWinNtConsoleDriverBinding,\r
+ ImageHandle,\r
+ &gWinNtConsoleComponentName,\r
+ NULL,\r
+ NULL\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+\r
+ return Status;\r
+}\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtConsoleDriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Handle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+Arguments:\r
+\r
+Returns:\r
+\r
+ None\r
+\r
+--*/\r
+// TODO: This - add argument and description to function comment\r
+// TODO: Handle - add argument and description to function comment\r
+// TODO: RemainingDevicePath - add argument and description to function comment\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_WIN_NT_IO_PROTOCOL *WinNtIo;\r
+\r
+ //\r
+ // Open the IO Abstraction(s) needed to perform the supported test\r
+ //\r
+ Status = gBS->OpenProtocol (\r
+ Handle,\r
+ &gEfiWinNtIoProtocolGuid,\r
+ &WinNtIo,\r
+ This->DriverBindingHandle,\r
+ Handle,\r
+ EFI_OPEN_PROTOCOL_BY_DRIVER\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // Make sure that the WinNt Thunk Protocol is valid\r
+ //\r
+ Status = EFI_UNSUPPORTED;\r
+ if (WinNtIo->WinNtThunk->Signature == EFI_WIN_NT_THUNK_PROTOCOL_SIGNATURE) {\r
+\r
+ //\r
+ // Check the GUID to see if this is a handle type the driver supports\r
+ //\r
+ if (CompareGuid (WinNtIo->TypeGuid, &gEfiWinNtConsoleGuid)) {\r
+ Status = EFI_SUCCESS;\r
+ }\r
+ }\r
+\r
+ //\r
+ // Close the I/O Abstraction(s) used to perform the supported test\r
+ //\r
+ gBS->CloseProtocol (\r
+ Handle,\r
+ &gEfiWinNtIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Handle\r
+ );\r
+\r
+ return Status;\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtConsoleDriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Handle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+Arguments:\r
+\r
+Returns:\r
+\r
+ None\r
+\r
+--*/\r
+// TODO: This - add argument and description to function comment\r
+// TODO: Handle - add argument and description to function comment\r
+// TODO: RemainingDevicePath - add argument and description to function comment\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_WIN_NT_IO_PROTOCOL *WinNtIo;\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+\r
+ //\r
+ // Grab the IO abstraction we need to get any work done\r
+ //\r
+ Status = gBS->OpenProtocol (\r
+ Handle,\r
+ &gEfiWinNtIoProtocolGuid,\r
+ &WinNtIo,\r
+ This->DriverBindingHandle,\r
+ Handle,\r
+ EFI_OPEN_PROTOCOL_BY_DRIVER\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ Private = AllocatePool (sizeof (WIN_NT_SIMPLE_TEXT_PRIVATE_DATA));\r
+ if (Private == NULL) {\r
+ goto Done;\r
+ }\r
+\r
+ ZeroMem (Private, sizeof (WIN_NT_SIMPLE_TEXT_PRIVATE_DATA));\r
+\r
+ Private->Signature = WIN_NT_SIMPLE_TEXT_PRIVATE_DATA_SIGNATURE;\r
+ Private->Handle = Handle;\r
+ Private->WinNtIo = WinNtIo;\r
+ Private->WinNtThunk = WinNtIo->WinNtThunk;\r
+\r
+ WinNtSimpleTextOutOpenWindow (Private);\r
+ WinNtSimpleTextInAttachToWindow (Private);\r
+\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &Handle,\r
+ &gEfiSimpleTextOutProtocolGuid,\r
+ &Private->SimpleTextOut,\r
+ &gEfiSimpleTextInProtocolGuid,\r
+ &Private->SimpleTextIn,\r
+ NULL\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+Done:\r
+ gBS->CloseProtocol (\r
+ Handle,\r
+ &gEfiWinNtIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Handle\r
+ );\r
+ if (Private != NULL) {\r
+\r
+ FreeUnicodeStringTable (Private->ControllerNameTable);\r
+\r
+ if (Private->NtOutHandle != NULL) {\r
+ Private->WinNtThunk->CloseHandle (Private->NtOutHandle);\r
+ }\r
+\r
+ if (Private->SimpleTextIn.WaitForKey != NULL) {\r
+ gBS->CloseEvent (Private->SimpleTextIn.WaitForKey);\r
+ }\r
+\r
+ FreePool (Private);\r
+ }\r
+\r
+ return Status;\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtConsoleDriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Handle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ Handle - TODO: add argument description\r
+ NumberOfChildren - TODO: add argument description\r
+ ChildHandleBuffer - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_UNSUPPORTED - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut;\r
+ EFI_STATUS Status;\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+\r
+ //\r
+ // Kick people off our interface???\r
+ //\r
+ Status = gBS->OpenProtocol (\r
+ Handle,\r
+ &gEfiSimpleTextOutProtocolGuid,\r
+ &SimpleTextOut,\r
+ This->DriverBindingHandle,\r
+ Handle,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (SimpleTextOut);\r
+\r
+ ASSERT (Private->Handle == Handle);\r
+\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ Handle,\r
+ &gEfiSimpleTextOutProtocolGuid,\r
+ &Private->SimpleTextOut,\r
+ &gEfiSimpleTextInProtocolGuid,\r
+ &Private->SimpleTextIn,\r
+ NULL\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+\r
+ //\r
+ // Shut down our device\r
+ //\r
+ Status = gBS->CloseProtocol (\r
+ Handle,\r
+ &gEfiWinNtIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Handle\r
+ );\r
+\r
+ Status = gBS->CloseEvent (Private->SimpleTextIn.WaitForKey);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Private->WinNtThunk->CloseHandle (Private->NtOutHandle);\r
+ //\r
+ // DO NOT close Private->NtInHandle. It points to StdIn and not\r
+ // the Private->NtOutHandle is StdIn and should not be closed!\r
+ //\r
+ FreeUnicodeStringTable (Private->ControllerNameTable);\r
+\r
+ FreePool (Private);\r
+ }\r
+\r
+ return Status;\r
+}\r
--- /dev/null
+/*++\r
+\r
+Copyright (c) 2006, Intel Corporation \r
+All rights reserved. This program and the accompanying materials \r
+are licensed and made available under the terms and conditions of the BSD License \r
+which accompanies this distribution. The full text of the license may be found at \r
+http://opensource.org/licenses/bsd-license.php \r
+ \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+Module Name:\r
+\r
+ Console.h\r
+\r
+Abstract:\r
+\r
+ Console based on Win32 APIs.\r
+\r
+ This file attaches a SimpleTextIn protocol to a previously open window.\r
+ \r
+ The constructor for this protocol depends on an open window. Currently\r
+ the SimpleTextOut protocol creates a window when it's constructor is called.\r
+ Thus this code must run after the constructor for the SimpleTextOut \r
+ protocol\r
+ \r
+--*/\r
+\r
+#ifndef _CONSOLE_H_\r
+#define _CONSOLE_H_\r
+\r
+\r
+#define WIN_NT_SIMPLE_TEXT_PRIVATE_DATA_SIGNATURE \\r
+ EFI_SIGNATURE_32('N','T','s','c')\r
+\r
+typedef struct {\r
+ UINT64 Signature;\r
+\r
+ EFI_HANDLE Handle;\r
+\r
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL SimpleTextOut;\r
+ EFI_SIMPLE_TEXT_OUTPUT_MODE SimpleTextOutMode;\r
+\r
+ EFI_WIN_NT_IO_PROTOCOL *WinNtIo;\r
+ EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk;\r
+\r
+ //\r
+ // SimpleTextOut Private Data including Win32 types.\r
+ //\r
+ HANDLE NtOutHandle;\r
+ HANDLE NtInHandle;\r
+\r
+ COORD MaxScreenSize;\r
+ COORD Possition;\r
+ WORD Attribute;\r
+ BOOLEAN CursorEnable;\r
+\r
+ EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn;\r
+\r
+ EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
+\r
+} WIN_NT_SIMPLE_TEXT_PRIVATE_DATA;\r
+\r
+#define WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS(a) \\r
+ CR(a, WIN_NT_SIMPLE_TEXT_PRIVATE_DATA, SimpleTextOut, WIN_NT_SIMPLE_TEXT_PRIVATE_DATA_SIGNATURE)\r
+\r
+#define WIN_NT_SIMPLE_TEXT_IN_PRIVATE_DATA_FROM_THIS(a) \\r
+ CR(a, WIN_NT_SIMPLE_TEXT_PRIVATE_DATA, SimpleTextIn, WIN_NT_SIMPLE_TEXT_PRIVATE_DATA_SIGNATURE)\r
+\r
+//\r
+// Console Globale Variables\r
+//\r
+extern EFI_DRIVER_BINDING_PROTOCOL gWinNtConsoleDriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL gWinNtConsoleComponentName;\r
+\r
+typedef struct {\r
+ UINTN ColumnsX;\r
+ UINTN RowsY;\r
+} WIN_NT_SIMPLE_TEXT_OUT_MODE;\r
+\r
+//\r
+// Simple Text Out protocol member functions\r
+//\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutReset (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN BOOLEAN ExtendedVerification\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ ExtendedVerification - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutOutputString (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN CHAR16 *String\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ String - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutTestString (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN CHAR16 *String\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ String - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutQueryMode (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN UINTN ModeNumber,\r
+ OUT UINTN *Columns,\r
+ OUT UINTN *Rows\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ ModeNumber - TODO: add argument description\r
+ Columns - TODO: add argument description\r
+ Rows - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutSetMode (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN UINTN ModeNumber\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ ModeNumber - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutSetAttribute (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN UINTN Attribute\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ Attribute - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutClearScreen (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutSetCursorPosition (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN UINTN Column,\r
+ IN UINTN Row\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ Column - TODO: add argument description\r
+ Row - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutEnableCursor (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN BOOLEAN Enable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ Enable - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+//\r
+// Simple Text Out constructor and destructor.\r
+//\r
+EFI_STATUS\r
+WinNtSimpleTextOutOpenWindow (\r
+ IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ Private - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+WinNtSimpleTextOutCloseWindow (\r
+ IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Console\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ Console - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+//\r
+// Simple Text In protocol member functions.\r
+//\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextInReset (\r
+ IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
+ IN BOOLEAN ExtendedVerification\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ ExtendedVerification - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextInReadKeyStroke (\r
+ IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
+ OUT EFI_INPUT_KEY *Key\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ Key - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+STATIC\r
+VOID\r
+EFIAPI\r
+WinNtSimpleTextInWaitForKey (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ Event - TODO: add argument description\r
+ Context - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+//\r
+// Simple Text In constructor\r
+//\r
+EFI_STATUS\r
+WinNtSimpleTextInAttachToWindow (\r
+ IN WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ Private - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+//\r
+// Main Entry Point\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+InitializeWinNtConsole (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ ImageHandle - TODO: add argument description\r
+ SystemTable - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+AppendDevicePathInstanceToVar (\r
+ IN CHAR16 *VariableName,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePathInstance\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ VariableName - TODO: add argument description\r
+ DevicePathInstance - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+#endif\r
--- /dev/null
+/*++\r
+\r
+Copyright (c) 2006 - 2007, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+Module Name:\r
+\r
+ ConsoleIn.c\r
+\r
+Abstract:\r
+\r
+ Console based on Win32 APIs.\r
+\r
+ This file attaches a SimpleTextIn protocol to a previously open window.\r
+\r
+ The constructor for this protocol depends on an open window. Currently\r
+ the SimpleTextOut protocol creates a window when it's constructor is called.\r
+ Thus this code must run after the constructor for the SimpleTextOut\r
+ protocol\r
+\r
+--*/\r
+//\r
+// The package level header files this module uses\r
+//\r
+#include <Uefi.h>\r
+#include <WinNtDxe.h>\r
+//\r
+// The protocols, PPI and GUID defintions for this module\r
+//\r
+#include <Protocol/SimpleTextIn.h>\r
+#include <Protocol/WinNtIo.h>\r
+#include <Protocol/SimpleTextOut.h>\r
+#include <Protocol/ComponentName.h>\r
+#include <Protocol/DriverBinding.h>\r
+//\r
+// The Library classes this module consumes\r
+//\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/UefiDriverEntryPoint.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include "Console.h"\r
+\r
+//\r
+// Private worker functions\r
+//\r
+STATIC\r
+EFI_STATUS\r
+WinNtSimpleTextInCheckKey (\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextInReset (\r
+ IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
+ IN BOOLEAN ExtendedVerification\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ ExtendedVerification - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_IN_PRIVATE_DATA_FROM_THIS (This);\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+STATIC\r
+EFI_STATUS\r
+WinNtConvertInputRecordToEfiKey (\r
+ IN INPUT_RECORD *InputRecord,\r
+ OUT EFI_INPUT_KEY *Key\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ InputRecord - TODO: add argument description\r
+ Key - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_NOT_READY - TODO: Add description for return value\r
+ EFI_NOT_READY - TODO: Add description for return value\r
+ EFI_NOT_READY - TODO: Add description for return value\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ //\r
+ // Make sure InputRecord is an event that represents a keypress\r
+ //\r
+ if (InputRecord->EventType == KEY_EVENT) {\r
+ if (!InputRecord->Event.KeyEvent.bKeyDown) {\r
+ return EFI_NOT_READY;\r
+ }\r
+ } else {\r
+ return EFI_NOT_READY;\r
+ }\r
+\r
+ //\r
+ // Check to see if we should return a scan code in place of Unicode character.\r
+ //\r
+ Key->ScanCode = 0;\r
+ Key->UnicodeChar = 0;\r
+ if ((InputRecord->Event.KeyEvent.dwControlKeyState & (NUMLOCK_ON | ENHANCED_KEY)) != NUMLOCK_ON) {\r
+ //\r
+ // Only check these scan codes if num lock is off.\r
+ //\r
+ switch (InputRecord->Event.KeyEvent.wVirtualScanCode) {\r
+ case 0x48: Key->ScanCode = SCAN_UP; break;\r
+ case 0x50: Key->ScanCode = SCAN_DOWN; break;\r
+ case 0x4d: Key->ScanCode = SCAN_RIGHT; break;\r
+ case 0x4b: Key->ScanCode = SCAN_LEFT; break;\r
+ case 0x47: Key->ScanCode = SCAN_HOME; break;\r
+ case 0x4F: Key->ScanCode = SCAN_END; break;\r
+ case 0x52: Key->ScanCode = SCAN_INSERT; break;\r
+ case 0x53: Key->ScanCode = SCAN_DELETE; break;\r
+ case 0x49: Key->ScanCode = SCAN_PAGE_UP; break;\r
+ case 0x51: Key->ScanCode = SCAN_PAGE_DOWN; break;\r
+ }\r
+ }\r
+\r
+ switch (InputRecord->Event.KeyEvent.wVirtualScanCode) {\r
+ case 0x3b: Key->ScanCode = SCAN_F1; break;\r
+ case 0x3c: Key->ScanCode = SCAN_F2; break;\r
+ case 0x3d: Key->ScanCode = SCAN_F3; break;\r
+ case 0x3e: Key->ScanCode = SCAN_F4; break;\r
+ case 0x3f: Key->ScanCode = SCAN_F5; break;\r
+ case 0x40: Key->ScanCode = SCAN_F6; break;\r
+ case 0x41: Key->ScanCode = SCAN_F7; break;\r
+ case 0x42: Key->ScanCode = SCAN_F8; break;\r
+ case 0x43: Key->ScanCode = SCAN_F9; break;\r
+ case 0x44: Key->ScanCode = SCAN_F10; break;\r
+ case 0x01: Key->ScanCode = SCAN_ESC; break;\r
+ }\r
+\r
+ //\r
+ // If there's a scan code pass it, and don't pass the char code\r
+ //\r
+ if (Key->ScanCode == 0) {\r
+ Key->UnicodeChar = InputRecord->Event.KeyEvent.uChar.UnicodeChar;\r
+ if (Key->UnicodeChar == 0) {\r
+ return EFI_NOT_READY;\r
+ }\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextInReadKeyStroke (\r
+ IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
+ OUT EFI_INPUT_KEY *Key\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ Key - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_DEVICE_ERROR - TODO: Add description for return value\r
+ EFI_NOT_READY - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ EFI_STATUS Status;\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+ INPUT_RECORD InputRecord;\r
+ DWORD NtEventCount;\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_IN_PRIVATE_DATA_FROM_THIS (This);\r
+\r
+ Status = WinNtSimpleTextInCheckKey (Private);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ do {\r
+\r
+ if (!Private->WinNtThunk->ReadConsoleInput (Private->NtInHandle, &InputRecord, 1, &NtEventCount)) {\r
+ return EFI_DEVICE_ERROR;\r
+ }\r
+\r
+ if (NtEventCount == 0) {\r
+ return EFI_NOT_READY;\r
+ }\r
+\r
+ //\r
+ // Convert the Input Record to an EFI Keystroke.\r
+ //\r
+ Status = WinNtConvertInputRecordToEfiKey (&InputRecord, Key);\r
+ } while (EFI_ERROR (Status));\r
+\r
+ return Status;\r
+}\r
+\r
+STATIC\r
+VOID\r
+EFIAPI\r
+WinNtSimpleTextInWaitForKey (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ Event - TODO: add argument description\r
+ Context - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+{\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+ EFI_STATUS Status;\r
+\r
+ Private = (WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *) Context;\r
+ Status = WinNtSimpleTextInCheckKey (Private);\r
+ if (!EFI_ERROR (Status)) {\r
+ gBS->SignalEvent (Event);\r
+ }\r
+}\r
+\r
+STATIC\r
+EFI_STATUS\r
+WinNtSimpleTextInCheckKey (\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ Private - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+{\r
+ INPUT_RECORD *InputRecord;\r
+ DWORD NtEventCount;\r
+ DWORD ActualNtEventCount;\r
+ EFI_STATUS Status;\r
+ BOOLEAN Success;\r
+ UINTN Index;\r
+ EFI_INPUT_KEY Key;\r
+\r
+ InputRecord = NULL;\r
+ NtEventCount = 0;\r
+ Private->WinNtThunk->GetNumberOfConsoleInputEvents (Private->NtInHandle, &NtEventCount);\r
+ if (NtEventCount == 0) {\r
+ Status = EFI_NOT_READY;\r
+ goto Done;\r
+ }\r
+\r
+ InputRecord = AllocatePool (sizeof (INPUT_RECORD) * NtEventCount);\r
+ if (InputRecord == NULL) {\r
+ Status = EFI_NOT_READY;\r
+ goto Done;\r
+ }\r
+\r
+ Success = (BOOLEAN) Private->WinNtThunk->PeekConsoleInput (\r
+ Private->NtInHandle,\r
+ InputRecord,\r
+ NtEventCount,\r
+ &ActualNtEventCount\r
+ );\r
+ if (!Success) {\r
+ Status = EFI_NOT_READY;\r
+ goto Done;\r
+ }\r
+\r
+ Status = EFI_NOT_READY;\r
+ for (Index = 0; Index < (UINTN) ActualNtEventCount; Index++) {\r
+ //\r
+ // Convert the Input Record to an EFI Keystroke.\r
+ //\r
+ Status = WinNtConvertInputRecordToEfiKey (&InputRecord[Index], &Key);\r
+ if (!EFI_ERROR (Status)) {\r
+ Status = EFI_SUCCESS;\r
+ goto Done;\r
+ }\r
+ }\r
+\r
+Done:\r
+ if (InputRecord != NULL) {\r
+ FreePool (InputRecord);\r
+ }\r
+\r
+ return Status;\r
+}\r
+\r
+EFI_STATUS\r
+WinNtSimpleTextInAttachToWindow (\r
+ IN WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ Private - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ Private->NtInHandle = Private->WinNtThunk->GetStdHandle (STD_INPUT_HANDLE);\r
+\r
+ Private->SimpleTextIn.Reset = WinNtSimpleTextInReset;\r
+ Private->SimpleTextIn.ReadKeyStroke = WinNtSimpleTextInReadKeyStroke;\r
+\r
+ Status = gBS->CreateEvent (\r
+ EVT_NOTIFY_WAIT,\r
+ TPL_NOTIFY,\r
+ WinNtSimpleTextInWaitForKey,\r
+ Private,\r
+ &Private->SimpleTextIn.WaitForKey\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ return Status;\r
+}\r
--- /dev/null
+/*++\r
+\r
+Copyright (c) 2006, Intel Corporation \r
+All rights reserved. This program and the accompanying materials \r
+are licensed and made available under the terms and conditions of the BSD License \r
+which accompanies this distribution. The full text of the license may be found at \r
+http://opensource.org/licenses/bsd-license.php \r
+ \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+Module Name:\r
+\r
+ ConsoleOut.c\r
+\r
+Abstract:\r
+\r
+ Console based on Win32 APIs. \r
+\r
+ This file creates an Win32 window and attaches a SimpleTextOut protocol.\r
+\r
+--*/\r
+\r
+//\r
+// The package level header files this module uses\r
+//\r
+#include <Uefi.h>\r
+#include <WinNtDxe.h>\r
+//\r
+// The protocols, PPI and GUID defintions for this module\r
+//\r
+#include <Protocol/SimpleTextIn.h>\r
+#include <Protocol/WinNtIo.h>\r
+#include <Protocol/SimpleTextOut.h>\r
+#include <Protocol/ComponentName.h>\r
+#include <Protocol/DriverBinding.h>\r
+//\r
+// The Library classes this module consumes\r
+//\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/UefiDriverEntryPoint.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+\r
+#include "Console.h"\r
+//\r
+// Private worker functions.\r
+//\r
+\r
+STATIC\r
+VOID\r
+WinNtSimpleTextOutScrollScreen (\r
+ IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Console\r
+ );\r
+\r
+STATIC\r
+VOID\r
+WinNtSimpleTextOutPutChar (\r
+ IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Console,\r
+ IN CHAR16 Char\r
+ );\r
+\r
+//\r
+// Modeule Global for Simple Text Out Mode.\r
+//\r
+#define MAX_SIMPLE_TEXT_OUT_MODE \\r
+ (sizeof(mWinNtSimpleTextOutSupportedModes)/sizeof(WIN_NT_SIMPLE_TEXT_OUT_MODE))\r
+\r
+STATIC WIN_NT_SIMPLE_TEXT_OUT_MODE mWinNtSimpleTextOutSupportedModes[] = {\r
+ { 80, 25 }, \r
+ { 80, 50 }, \r
+ { 80, 43 }, \r
+ { 100, 100 }, \r
+ { 100, 999 } \r
+};\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutReset (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN BOOLEAN ExtendedVerification\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ ExtendedVerification - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
+\r
+ WinNtSimpleTextOutSetAttribute (This, EFI_TEXT_ATTR (This->Mode->Attribute & 0x0F, EFI_BACKGROUND_BLACK));\r
+\r
+ WinNtSimpleTextOutSetMode (This, 0);\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutOutputString (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN CHAR16 *String\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ String - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+ CHAR16 *Str;\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
+\r
+ for (Str = String; *Str != '\0'; Str++) {\r
+ switch (*Str) {\r
+ case '\n':\r
+ if (Private->Possition.Y == (Private->MaxScreenSize.Y - 1)) {\r
+ WinNtSimpleTextOutScrollScreen (Private);\r
+ }\r
+\r
+ if (Private->Possition.Y < (Private->MaxScreenSize.Y - 1)) {\r
+ Private->Possition.Y++;\r
+ This->Mode->CursorRow++;\r
+ }\r
+ break;\r
+\r
+ case '\r':\r
+ Private->Possition.X = 0;\r
+ This->Mode->CursorColumn = 0;\r
+ break;\r
+\r
+ case '\b':\r
+ if (Private->Possition.X > 0) {\r
+ Private->Possition.X--;\r
+ This->Mode->CursorColumn--;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ WinNtSimpleTextOutPutChar (Private, *Str);\r
+ }\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+STATIC\r
+VOID\r
+WinNtSimpleTextOutPutChar (\r
+ IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Console,\r
+ IN CHAR16 Char\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ Console - TODO: add argument description\r
+ Char - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+{\r
+ SMALL_RECT Region;\r
+ COORD StrCoordinate;\r
+ COORD StrSize;\r
+ CHAR_INFO CharInfo;\r
+ BOOL Flag;\r
+\r
+ CharInfo.Char.UnicodeChar = Char;\r
+ CharInfo.Attributes = Console->Attribute;\r
+\r
+ StrSize.X = 1;\r
+ StrSize.Y = 1;\r
+ StrCoordinate.X = 0;\r
+ StrCoordinate.Y = 0;\r
+\r
+ Region.Left = (INT16) Console->Possition.X;\r
+ Region.Top = (INT16) Console->Possition.Y;\r
+ Region.Right = (INT16) (Console->Possition.X + 1);\r
+ Region.Bottom = (INT16) Console->Possition.Y;\r
+\r
+ Console->WinNtThunk->WriteConsoleOutput (\r
+ Console->NtOutHandle,\r
+ &CharInfo,\r
+ StrSize,\r
+ StrCoordinate,\r
+ &Region\r
+ );\r
+\r
+ if (Console->Possition.X >= (Console->MaxScreenSize.X - 1)) {\r
+ //\r
+ // If you print off the end wrap around\r
+ //\r
+ Console->SimpleTextOut.OutputString (&Console->SimpleTextOut, L"\n\r");\r
+ } else {\r
+ Console->Possition.X++;\r
+ Console->SimpleTextOut.Mode->CursorColumn++;\r
+ }\r
+\r
+ Flag = Console->WinNtThunk->SetConsoleCursorPosition (Console->NtOutHandle, Console->Possition);\r
+}\r
+\r
+STATIC\r
+VOID\r
+WinNtSimpleTextOutScrollScreen (\r
+ IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Console\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ Console - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+{\r
+ SMALL_RECT Scroll;\r
+ CHAR_INFO CharInfo;\r
+ COORD Origin;\r
+\r
+ CharInfo.Char.UnicodeChar = ' ';\r
+ CharInfo.Attributes = Console->Attribute;\r
+\r
+ Origin.X = 0;\r
+ Origin.Y = 0;\r
+\r
+ Scroll.Top = 1;\r
+ Scroll.Left = 0;\r
+ Scroll.Right = (INT16) Console->MaxScreenSize.X;\r
+ Scroll.Bottom = (INT16) Console->MaxScreenSize.Y;\r
+\r
+ Console->WinNtThunk->ScrollConsoleScreenBuffer (\r
+ Console->NtOutHandle,\r
+ &Scroll,\r
+ NULL,\r
+ Origin,\r
+ &CharInfo\r
+ );\r
+}\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutTestString (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN CHAR16 *String\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ String - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
+\r
+ //\r
+ // BugBug: The correct answer would be a function of what code pages\r
+ // are currently loaded? For now we will just return success.\r
+ //\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutQueryMode (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN UINTN ModeNumber,\r
+ OUT UINTN *Columns,\r
+ OUT UINTN *Rows\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ ModeNumber - TODO: add argument description\r
+ Columns - TODO: add argument description\r
+ Rows - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_INVALID_PARAMETER - TODO: Add description for return value\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
+\r
+ if (ModeNumber > MAX_SIMPLE_TEXT_OUT_MODE) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ *Columns = mWinNtSimpleTextOutSupportedModes[ModeNumber].ColumnsX;\r
+ *Rows = mWinNtSimpleTextOutSupportedModes[ModeNumber].RowsY;\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutSetMode (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN UINTN ModeNumber\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ ModeNumber - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_INVALID_PARAMETER - TODO: Add description for return value\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
+\r
+ if (ModeNumber > MAX_SIMPLE_TEXT_OUT_MODE) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ Private->MaxScreenSize.X = (WORD) mWinNtSimpleTextOutSupportedModes[ModeNumber].ColumnsX;\r
+ Private->MaxScreenSize.Y = (WORD) mWinNtSimpleTextOutSupportedModes[ModeNumber].RowsY;\r
+\r
+ Private->WinNtThunk->SetConsoleScreenBufferSize (Private->NtOutHandle, Private->MaxScreenSize);\r
+ Private->WinNtThunk->SetConsoleActiveScreenBuffer (Private->NtOutHandle);\r
+\r
+ This->Mode->Mode = (INT32) ModeNumber;\r
+\r
+ This->EnableCursor (This, TRUE);\r
+ This->ClearScreen (This);\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutSetAttribute (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN UINTN Attribute\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ Attribute - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
+\r
+ Private->Attribute = (WORD) Attribute;\r
+ This->Mode->Attribute = (INT32) Attribute;\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutClearScreen (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+ DWORD ConsoleWindow;\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
+\r
+ This->SetCursorPosition (This, 0, 0);\r
+\r
+ Private->WinNtThunk->FillConsoleOutputCharacter (\r
+ Private->NtOutHandle,\r
+ ' ',\r
+ Private->MaxScreenSize.X * Private->MaxScreenSize.Y,\r
+ Private->Possition,\r
+ &ConsoleWindow\r
+ );\r
+ Private->WinNtThunk->FillConsoleOutputAttribute (\r
+ Private->NtOutHandle,\r
+ Private->Attribute,\r
+ Private->MaxScreenSize.X * Private->MaxScreenSize.Y,\r
+ Private->Possition,\r
+ &ConsoleWindow\r
+ );\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutSetCursorPosition (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN UINTN Column,\r
+ IN UINTN Row\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ Column - TODO: add argument description\r
+ Row - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
+\r
+ Private->Possition.X = (WORD) Column;\r
+ This->Mode->CursorColumn = (INT32) Column;\r
+\r
+ Private->Possition.Y = (WORD) Row;\r
+ This->Mode->CursorRow = (INT32) Row;\r
+ Private->WinNtThunk->SetConsoleCursorPosition (Private->NtOutHandle, Private->Possition);\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+STATIC\r
+EFI_STATUS\r
+EFIAPI\r
+WinNtSimpleTextOutEnableCursor (\r
+ IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,\r
+ IN BOOLEAN Enable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ Enable - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private;\r
+ CONSOLE_CURSOR_INFO Info;\r
+\r
+ Private = WIN_NT_SIMPLE_TEXT_OUT_PRIVATE_DATA_FROM_THIS (This);\r
+ Private->CursorEnable = Enable;\r
+ This->Mode->CursorVisible = Enable;\r
+\r
+ Private->WinNtThunk->GetConsoleCursorInfo (Private->NtOutHandle, &Info);\r
+ Info.bVisible = Enable;\r
+ Private->WinNtThunk->SetConsoleCursorInfo (Private->NtOutHandle, &Info);\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+EFI_STATUS\r
+WinNtSimpleTextOutOpenWindow (\r
+ IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Private\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ Private - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+{\r
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut;\r
+ CHAR16 *WindowName;\r
+\r
+ WindowName = Private->WinNtIo->EnvString;\r
+ Private->Attribute = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY;\r
+ if (*WindowName == '?') {\r
+ Private->Attribute = BACKGROUND_RED | FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN;\r
+ WindowName = L"EFI Emulator Error Console";\r
+ }\r
+\r
+ AddUnicodeString (\r
+ "eng",\r
+ gWinNtConsoleComponentName.SupportedLanguages,\r
+ &Private->ControllerNameTable,\r
+ WindowName\r
+ );\r
+\r
+ //\r
+ // Fill in protocol member functions\r
+ //\r
+ SimpleTextOut = &Private->SimpleTextOut;\r
+ SimpleTextOut->Reset = WinNtSimpleTextOutReset;\r
+ SimpleTextOut->OutputString = WinNtSimpleTextOutOutputString;\r
+ SimpleTextOut->TestString = WinNtSimpleTextOutTestString;\r
+ SimpleTextOut->QueryMode = WinNtSimpleTextOutQueryMode;\r
+ SimpleTextOut->SetMode = WinNtSimpleTextOutSetMode;\r
+ SimpleTextOut->SetAttribute = WinNtSimpleTextOutSetAttribute;\r
+ SimpleTextOut->ClearScreen = WinNtSimpleTextOutClearScreen;\r
+ SimpleTextOut->SetCursorPosition = WinNtSimpleTextOutSetCursorPosition;\r
+ SimpleTextOut->EnableCursor = WinNtSimpleTextOutEnableCursor;\r
+\r
+ //\r
+ // Initialize SimpleTextOut protocol mode structure\r
+ //\r
+ SimpleTextOut->Mode = &Private->SimpleTextOutMode;\r
+ SimpleTextOut->Mode->MaxMode = MAX_SIMPLE_TEXT_OUT_MODE;\r
+ SimpleTextOut->Mode->Attribute = (INT32) Private->Attribute;\r
+\r
+ //\r
+ // Open the window an initialize it!\r
+ //\r
+ Private->NtOutHandle = Private->WinNtThunk->CreateConsoleScreenBuffer (\r
+ GENERIC_WRITE | GENERIC_READ,\r
+ FILE_SHARE_WRITE | FILE_SHARE_READ,\r
+ NULL,\r
+ CONSOLE_TEXTMODE_BUFFER,\r
+ NULL\r
+ );\r
+ Private->WinNtThunk->SetConsoleTitle (WindowName);\r
+\r
+ return SimpleTextOut->SetMode (SimpleTextOut, 0);\r
+}\r
+\r
+EFI_STATUS\r
+WinNtSimpleTextOutCloseWindow (\r
+ IN OUT WIN_NT_SIMPLE_TEXT_PRIVATE_DATA *Console\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ Console - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS - TODO: Add description for return value\r
+\r
+--*/\r
+{\r
+ Console->WinNtThunk->CloseHandle (Console->NtOutHandle);\r
+ return EFI_SUCCESS;\r
+}\r
--- /dev/null
+#/** @file\r
+# Console Dxe driver\r
+#\r
+# Simulate console with WinAPI\r
+# Copyright (c) 2006 - 2007, Intel Corporation\r
+#\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+#\r
+#**/\r
+\r
+################################################################################\r
+#\r
+# Defines Section - statements that will be processed to create a Makefile.\r
+#\r
+################################################################################\r
+[Defines]\r
+ INF_VERSION = 0x00010005\r
+ BASE_NAME = WinNtConsole\r
+ FILE_GUID = 263631d7-5836-4b74-be48-ee22e92ce5d3\r
+ MODULE_TYPE = UEFI_DRIVER\r
+ VERSION_STRING = 1.0\r
+ EDK_RELEASE_VERSION = 0x00020000\r
+ EFI_SPECIFICATION_VERSION = 0x00020000\r
+\r
+ ENTRY_POINT = InitializeWinNtConsole\r
+\r
+#\r
+# The following information is for reference only and not required by the build tools.\r
+#\r
+# VALID_ARCHITECTURES = IA32\r
+#\r
+# DRIVER_BINDING = gWinNtConsoleDriverBinding \r
+# COMPONENT_NAME = gWinNtConsoleComponentName \r
+#\r
+\r
+################################################################################\r
+#\r
+# Sources Section - list of files that are required for the build to succeed.\r
+#\r
+################################################################################\r
+\r
+[Sources.common]\r
+ ComponentName.c\r
+ ConsoleOut.c\r
+ ConsoleIn.c\r
+ Console.c\r
+ Console.h\r
+\r
+\r
+################################################################################\r
+#\r
+# Includes Section - list of Include locations that are required for\r
+# this module.\r
+#\r
+################################################################################\r
+\r
+[Includes]\r
+ $(WORKSPACE)/MdePkg/Include/Library\r
+\r
+################################################################################\r
+#\r
+# Package Dependency Section - list of Package files that are required for\r
+# this module.\r
+#\r
+################################################################################\r
+\r
+[Packages]\r
+ Nt32Pkg/Nt32Pkg.dec\r
+ MdePkg/MdePkg.dec\r
+\r
+\r
+################################################################################\r
+#\r
+# Library Class Section - list of Library Classes that are required for\r
+# this module.\r
+#\r
+################################################################################\r
+\r
+[LibraryClasses]\r
+ MemoryAllocationLib\r
+ UefiBootServicesTableLib\r
+ BaseMemoryLib\r
+ UefiLib\r
+ UefiDriverEntryPoint\r
+ BaseLib\r
+ DebugLib\r
+\r
+\r
+################################################################################\r
+#\r
+# Guid C Name Section - list of Guids that this module uses or produces.\r
+#\r
+################################################################################\r
+\r
+[Guids]\r
+ gEfiWinNtConsoleGuid # ALWAYS_CONSUMED\r
+\r
+\r
+################################################################################\r
+#\r
+# Protocol C Name Section - list of Protocol and Protocol Notify C Names\r
+# that this module uses or produces.\r
+#\r
+################################################################################\r
+\r
+[Protocols]\r
+ gEfiSimpleTextInProtocolGuid # PROTOCOL BY_START\r
+ gEfiSimpleTextOutProtocolGuid # PROTOCOL BY_START\r
+ gEfiWinNtIoProtocolGuid # PROTOCOL TO_START\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r
+ <MsaHeader>\r
+ <ModuleName>WinNtConsole</ModuleName>\r
+ <ModuleType>UEFI_DRIVER</ModuleType>\r
+ <GuidValue>263631d7-5836-4b74-be48-ee22e92ce5d3</GuidValue>\r
+ <Version>1.0</Version>\r
+ <Abstract>Console Dxe driver</Abstract>\r
+ <Description>Simulate console with WinAPI</Description>\r
+ <Copyright>Copyright (c) 2006 - 2007, Intel Corporation</Copyright>\r
+ <License>All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.</License>\r
+ <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>\r
+ </MsaHeader>\r
+ <ModuleDefinitions>\r
+ <SupportedArchitectures>IA32</SupportedArchitectures>\r
+ <BinaryModule>false</BinaryModule>\r
+ <OutputFileBasename>WinNtConsole</OutputFileBasename>\r
+ </ModuleDefinitions>\r
+ <LibraryClassDefinitions>\r
+ <LibraryClass Usage="ALWAYS_CONSUMED">\r
+ <Keyword>DebugLib</Keyword>\r
+ </LibraryClass>\r
+ <LibraryClass Usage="ALWAYS_CONSUMED">\r
+ <Keyword>BaseLib</Keyword>\r
+ </LibraryClass>\r
+ <LibraryClass Usage="ALWAYS_CONSUMED">\r
+ <Keyword>UefiDriverModelLib</Keyword>\r
+ </LibraryClass>\r
+ <LibraryClass Usage="ALWAYS_CONSUMED">\r
+ <Keyword>UefiDriverEntryPoint</Keyword>\r
+ </LibraryClass>\r
+ <LibraryClass Usage="ALWAYS_CONSUMED">\r
+ <Keyword>UefiLib</Keyword>\r
+ </LibraryClass>\r
+ <LibraryClass Usage="ALWAYS_CONSUMED">\r
+ <Keyword>BaseMemoryLib</Keyword>\r
+ </LibraryClass>\r
+ <LibraryClass Usage="ALWAYS_CONSUMED">\r
+ <Keyword>UefiBootServicesTableLib</Keyword>\r
+ </LibraryClass>\r
+ <LibraryClass Usage="ALWAYS_CONSUMED">\r
+ <Keyword>MemoryAllocationLib</Keyword>\r
+ </LibraryClass>\r
+ </LibraryClassDefinitions>\r
+ <SourceFiles>\r
+ <Filename>Console.h</Filename>\r
+ <Filename>Console.c</Filename>\r
+ <Filename>ConsoleIn.c</Filename>\r
+ <Filename>ConsoleOut.c</Filename>\r
+ <Filename>ComponentName.c</Filename>\r
+ </SourceFiles>\r
+ <PackageDependencies>\r
+ <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>\r
+ <Package PackageGuid="0fb2aa2d-10d5-40a5-a9dc-060c12a4a3f3"/>\r
+ </PackageDependencies>\r
+ <Protocols>\r
+ <Protocol Usage="TO_START">\r
+ <ProtocolCName>gEfiWinNtIoProtocolGuid</ProtocolCName>\r
+ </Protocol>\r
+ <Protocol Usage="BY_START">\r
+ <ProtocolCName>gEfiSimpleTextOutProtocolGuid</ProtocolCName>\r
+ </Protocol>\r
+ <Protocol Usage="BY_START">\r
+ <ProtocolCName>gEfiSimpleTextInProtocolGuid</ProtocolCName>\r
+ </Protocol>\r
+ </Protocols>\r
+ <Guids>\r
+ <GuidCNames Usage="ALWAYS_CONSUMED">\r
+ <GuidCName>gEfiWinNtConsoleGuid</GuidCName>\r
+ </GuidCNames>\r
+ </Guids>\r
+ <Externs>\r
+ <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>\r
+ <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>\r
+ <Extern>\r
+ <DriverBinding>gWinNtConsoleDriverBinding</DriverBinding>\r
+ <ComponentName>gWinNtConsoleComponentName</ComponentName>\r
+ </Extern>\r
+ </Externs>\r
+</ModuleSurfaceArea>
\ No newline at end of file