Migrate GOP driver from R8.6 for NT32. Add a new PCD "PcdWinNtGop". Setting NT32 platform using GOP driver instead of UGA driver.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2137 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
wuyizhong 2006-12-26 02:26:02 +00:00
parent 7432a21444
commit 72b695f33b
15 changed files with 2743 additions and 99 deletions

View File

@ -58,6 +58,12 @@ typedef struct {
EFI_DEVICE_PATH_PROTOCOL End;
} NT_PLATFORM_UGA_DEVICE_PATH;
typedef struct {
VENDOR_DEVICE_PATH NtBus;
WIN_NT_VENDOR_DEVICE_PATH_NODE NtGopDevice;
EFI_DEVICE_PATH_PROTOCOL End;
} NT_PLATFORM_GOP_DEVICE_PATH;
//
// Platform BDS Functions
//

View File

@ -68,6 +68,45 @@ NT_PLATFORM_UGA_DEVICE_PATH gUgaDevicePath1 = {
},
gEndEntire
};
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
NT_PLATFORM_GOP_DEVICE_PATH gGopDevicePath0 = {
{
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
(UINT8) (sizeof (VENDOR_DEVICE_PATH)),
(UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8),
EFI_WIN_NT_THUNK_PROTOCOL_GUID
},
{
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
(UINT8) (sizeof (WIN_NT_VENDOR_DEVICE_PATH_NODE)),
(UINT8) ((sizeof (WIN_NT_VENDOR_DEVICE_PATH_NODE)) >> 8),
EFI_WIN_NT_GOP_GUID,
0
},
gEndEntire
};
NT_PLATFORM_GOP_DEVICE_PATH gGopDevicePath1 = {
{
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
(UINT8) (sizeof (VENDOR_DEVICE_PATH)),
(UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8),
EFI_WIN_NT_THUNK_PROTOCOL_GUID
},
{
HARDWARE_DEVICE_PATH,
HW_VENDOR_DP,
(UINT8) (sizeof (WIN_NT_VENDOR_DEVICE_PATH_NODE)),
(UINT8) ((sizeof (WIN_NT_VENDOR_DEVICE_PATH_NODE)) >> 8),
EFI_WIN_NT_GOP_GUID,
1
},
gEndEntire
};
#endif
//
// Platform specific serial device path
@ -165,6 +204,16 @@ BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = {
(EFI_DEVICE_PATH_PROTOCOL *) &gUgaDevicePath1,
(CONSOLE_OUT | CONSOLE_IN)
},
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
{
(EFI_DEVICE_PATH_PROTOCOL *) &gGopDevicePath0,
(CONSOLE_OUT | CONSOLE_IN)
},
{
(EFI_DEVICE_PATH_PROTOCOL *) &gGopDevicePath1,
(CONSOLE_OUT | CONSOLE_IN)
},
#endif
{
NULL,
0

View File

@ -0,0 +1,189 @@
/** @file
Copyright (c) 2006, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
ComponentName.c
Abstract:
**/
#include "WinNtGop.h"
//
// EFI Component Name Functions
//
EFI_STATUS
EFIAPI
WinNtGopComponentNameGetDriverName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN CHAR8 *Language,
OUT CHAR16 **DriverName
);
EFI_STATUS
EFIAPI
WinNtGopComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
//
// EFI Component Name Protocol
//
EFI_COMPONENT_NAME_PROTOCOL gWinNtGopComponentName = {
WinNtGopComponentNameGetDriverName,
WinNtGopComponentNameGetControllerName,
"eng"
};
static EFI_UNICODE_STRING_TABLE mWinNtGopDriverNameTable[] = {
{ "eng", L"Windows GOP Driver" },
{ NULL , NULL }
};
/**
Retrieves a Unicode string that is the user readable name of the EFI Driver.
@param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL
instance.
@param Language A pointer to a three character ISO 639-2 language
identifier. This is the language of the driver
name that that the caller is requesting, and it
must match one of the languages specified in
SupportedLanguages. The number of languages
supported by a driver is up to the driver writer.
@param DriverName A pointer to the Unicode string to return. This
Unicode string is the name of the driver specified
by This in the language specified by Language.
@retval EFI_SUCCESS The Unicode string for the Driver specified by
This and the language specified by Language was
returned in DriverName.
@retval EFI_INVALID_PARAMETER Language is NULL.
@retval EFI_INVALID_PARAMETER DriverName is NULL.
@retval EFI_UNSUPPORTED The driver specified by This does not support the
language specified by Language.
**/
EFI_STATUS
EFIAPI
WinNtGopComponentNameGetDriverName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN CHAR8 *Language,
OUT CHAR16 **DriverName
)
{
return LookupUnicodeString (
Language,
gWinNtGopComponentName.SupportedLanguages,
mWinNtGopDriverNameTable,
DriverName
);
}
/**
Retrieves a Unicode string that is the user readable name of the controller
that is being managed by an EFI Driver.
@param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL
instance.
@param ControllerHandle The handle of a controller that the driver
specified by This is managing. This handle
specifies the controller whose name is to be
returned.
@param ChildHandle The handle of the child controller to retrieve the
name of. This is an optional parameter that may
be NULL. It will be NULL for device drivers. It
will also be NULL for a bus drivers that wish to
retrieve the name of the bus controller. It will
not be NULL for a bus driver that wishes to
retrieve the name of a child controller.
@param Language A pointer to a three character ISO 639-2 language
identifier. This is the language of the
controller name that that the caller is
requesting, and it must match one of the languages
specified in SupportedLanguages. The number of
languages supported by a driver is up to the
driver writer.
@param ControllerName A pointer to the Unicode string to return. This
Unicode string is the name of the controller
specified by ControllerHandle and ChildHandle in
the language specified by Language from the point
of view of the driver specified by This.
@retval EFI_SUCCESS The Unicode string for the user readable name in
the language specified by Language for the driver
specified by This was returned in DriverName.
@retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
EFI_HANDLE.
@retval EFI_INVALID_PARAMETER Language is NULL.
@retval EFI_INVALID_PARAMETER ControllerName is NULL.
@retval EFI_UNSUPPORTED The driver specified by This is not currently
managing the controller specified by
ControllerHandle and ChildHandle.
@retval EFI_UNSUPPORTED The driver specified by This does not support the
language specified by Language.
**/
EFI_STATUS
EFIAPI
WinNtGopComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
)
{
EFI_STATUS Status;
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
GOP_PRIVATE_DATA *Private;
//
// This is a device driver, so ChildHandle must be NULL.
//
if (ChildHandle != NULL) {
return EFI_UNSUPPORTED;
}
//
// Get our context back
//
Status = gBS->OpenProtocol (
ControllerHandle,
&gEfiGraphicsOutputProtocolGuid,
&GraphicsOutput,
gWinNtGopDriverBinding.DriverBindingHandle,
ControllerHandle,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
);
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
Private = GOP_PRIVATE_DATA_FROM_THIS (GraphicsOutput);
return LookupUnicodeString (
Language,
gWinNtGopComponentName.SupportedLanguages,
Private->ControllerNameTable,
ControllerName
);
}

View File

@ -0,0 +1,321 @@
/** @file
Copyright (c) 2006, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
WinNtGop.h
Abstract:
Private data for the Gop driver that is bound to the WinNt Thunk protocol
**/
#ifndef _WIN_NT_GOP_H_
#define _WIN_NT_GOP_H_
//@MT:#include "EfiWinNT.h"
//@MT:#include "Tiano.h"
//@MT:#include "EfiDriverLib.h"
//
// Driver Consumed Protocols
//
//@MT:#include EFI_PROTOCOL_DEFINITION (DevicePath)
//@MT:#include EFI_PROTOCOL_DEFINITION (WinNtIo)
//
// Driver Produced Protocols
//
//@MT:#include EFI_PROTOCOL_DEFINITION (DriverBinding)
//@MT:#include EFI_PROTOCOL_DEFINITION (ComponentName)
//@MT:#include EFI_PROTOCOL_DEFINITION (GraphicsOutput)
//@MT:#include "LinkedList.h"
#define MAX_Q 256
typedef struct {
UINTN Front;
UINTN Rear;
UINTN Count;
EFI_INPUT_KEY Q[MAX_Q];
} GOP_QUEUE_FIXED;
#define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow"
#define GOP_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('S', 'g', 'o', 'N')
#define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff
typedef struct {
UINT32 HorizontalResolution;
UINT32 VerticalResolution;
UINT32 ColorDepth;
UINT32 RefreshRate;
} GOP_MODE_DATA;
typedef struct {
UINT64 Signature;
EFI_HANDLE Handle;
EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;
EFI_SIMPLE_TEXT_IN_PROTOCOL SimpleTextIn;
EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk;
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
//
// GOP Private Data for QueryMode ()
//
GOP_MODE_DATA *ModeData;
//
// GOP Private Data knowing when to start hardware
//
BOOLEAN HardwareNeedsStarting;
CHAR16 *WindowName;
CHAR16 Buffer[160];
HANDLE ThreadInited; // Semaphore
HANDLE ThreadHandle; // Thread
DWORD ThreadId;
HWND WindowHandle;
WNDCLASSEX WindowsClass;
//
// This screen is used to redraw the scree when windows events happen. It's
// updated in the main thread and displayed in the windows thread.
//
BITMAPV4HEADER *VirtualScreenInfo;
RGBQUAD *VirtualScreen;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FillLine;
//
// Keyboard Queue used by Simple Text In. WinProc thread adds, and main
// thread removes.
//
CRITICAL_SECTION QCriticalSection;
GOP_QUEUE_FIXED Queue;
} GOP_PRIVATE_DATA;
#define GOP_PRIVATE_DATA_FROM_THIS(a) \
CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)
#define GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS(a) \
CR(a, GOP_PRIVATE_DATA, SimpleTextIn, GOP_PRIVATE_DATA_SIGNATURE)
//
// Global Protocol Variables
//
extern EFI_DRIVER_BINDING_PROTOCOL gWinNtGopDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gWinNtGopComponentName;
//
// Gop Hardware abstraction internal worker functions
//
/**
TODO: Add function description
@param WinNtIo TODO: add argument description
@return TODO: add return values
**/
EFI_STATUS
WinNtGopSupported (
IN EFI_WIN_NT_IO_PROTOCOL *WinNtIo
)
;
/**
TODO: Add function description
@param Private TODO: add argument description
@return TODO: add return values
**/
EFI_STATUS
WinNtGopConstructor (
IN GOP_PRIVATE_DATA *Private
)
;
/**
TODO: Add function description
@param Private TODO: add argument description
@return TODO: add return values
**/
EFI_STATUS
WinNtGopDestructor (
IN GOP_PRIVATE_DATA *Private
)
;
//
// EFI 1.1 driver model prototypes for Win NT GOP
//
/**
TODO: Add function description
@param ImageHandle TODO: add argument description
@param SystemTable TODO: add argument description
@return TODO: add return values
**/
EFI_STATUS
EFIAPI
WinNtGopInitialize (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
;
/**
TODO: Add function description
@param This TODO: add argument description
@param Handle TODO: add argument description
@param RemainingDevicePath TODO: add argument description
@return TODO: add return values
**/
EFI_STATUS
EFIAPI
WinNtGopDriverBindingSupported (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
;
/**
TODO: Add function description
@param This TODO: add argument description
@param Handle TODO: add argument description
@param RemainingDevicePath TODO: add argument description
@return TODO: add return values
**/
EFI_STATUS
EFIAPI
WinNtGopDriverBindingStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
;
/**
TODO: Add function description
@param This TODO: add argument description
@param Handle TODO: add argument description
@param NumberOfChildren TODO: add argument description
@param ChildHandleBuffer TODO: add argument description
@return TODO: add return values
**/
EFI_STATUS
EFIAPI
WinNtGopDriverBindingStop (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
)
;
/**
TODO: Add function description
@param Private TODO: add argument description
@param Key TODO: add argument description
@return TODO: add return values
**/
EFI_STATUS
GopPrivateAddQ (
IN GOP_PRIVATE_DATA *Private,
IN EFI_INPUT_KEY Key
)
;
/**
TODO: Add function description
@param Private TODO: add argument description
@return TODO: add return values
**/
EFI_STATUS
WinNtGopInitializeSimpleTextInForWindow (
IN GOP_PRIVATE_DATA *Private
)
;
/**
TODO: Add function description
@param Private TODO: add argument description
@return TODO: add return values
**/
EFI_STATUS
WinNtGopDestroySimpleTextInForWindow (
IN GOP_PRIVATE_DATA *Private
)
;
/**
TODO: Add function description
@param String TODO: add argument description
@return TODO: add return values
**/
UINTN
Atoi (
IN CHAR16 *String
)
;
#endif

View File

@ -0,0 +1,97 @@
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<MsaHeader>
<ModuleName>WinNtGop</ModuleName>
<ModuleType>UEFI_DRIVER</ModuleType>
<GuidValue>29b3c4c6-e5aa-49e4-8ce0-2772f782ddc2</GuidValue>
<Version>1.0</Version>
<Abstract>Gop Driver</Abstract>
<Description>
GOP is short hand for UEFI Graphics Output protocol.
This file is a verision of GopIo the uses WinNtThunk system calls as an IO
abstraction. For a PCI device WinNtIo would be replaced with
a PCI IO abstraction that abstracted a specific PCI device.
</Description>
<Copyright>Copyright (c) 2006, Intel Corporation</Copyright>
<License>All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.</License>
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
</MsaHeader>
<ModuleDefinitions>
<SupportedArchitectures>IA32</SupportedArchitectures>
<BinaryModule>false</BinaryModule>
<OutputFileBasename>WinNtGop</OutputFileBasename>
</ModuleDefinitions>
<LibraryClassDefinitions>
<LibraryClass Usage="ALWAYS_CONSUMED">
<Keyword>DebugLib</Keyword>
</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">
<Keyword>BaseLib</Keyword>
</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">
<Keyword>UefiDriverModelLib</Keyword>
</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">
<Keyword>UefiDriverEntryPoint</Keyword>
</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">
<Keyword>UefiLib</Keyword>
</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">
<Keyword>BaseMemoryLib</Keyword>
</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">
<Keyword>MemoryAllocationLib</Keyword>
</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">
<Keyword>UefiBootServicesTableLib</Keyword>
</LibraryClass>
</LibraryClassDefinitions>
<SourceFiles>
<Filename>WinNtGopScreen.c</Filename>
<Filename>WinNtGopInput.c</Filename>
<Filename>WinNtGop.h</Filename>
<Filename>ComponentName.c</Filename>
<Filename>WinNtGopDriver.c</Filename>
</SourceFiles>
<PackageDependencies>
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Package PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d"/>
<Package PackageGuid="0fb2aa2d-10d5-40a5-a9dc-060c12a4a3f3"/>
</PackageDependencies>
<Protocols>
<Protocol Usage="TO_START">
<ProtocolCName>gEfiWinNtIoProtocolGuid</ProtocolCName>
</Protocol>
<Protocol Usage="BY_START">
<ProtocolCName>gEfiSimpleTextInProtocolGuid</ProtocolCName>
</Protocol>
<Protocol Usage="BY_START">
<ProtocolCName>gEfiGraphicsOutputProtocolGuid</ProtocolCName>
</Protocol>
</Protocols>
<Events>
<CreateEvents>
<EventTypes EventGuidCName="gEfiEventExitBootServicesGuid" Usage="SOMETIMES_CONSUMED">
<EventType>EVENT_GROUP_GUID</EventType>
</EventTypes>
</CreateEvents>
</Events>
<Guids>
<GuidCNames Usage="ALWAYS_CONSUMED">
<GuidCName>gEfiWinNtGopGuid</GuidCName>
</GuidCNames>
</Guids>
<Externs>
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
<Extern>
<DriverBinding>gWinNtGopDriverBinding</DriverBinding>
<ComponentName>gWinNtGopComponentName</ComponentName>
</Extern>
</Externs>
</ModuleSurfaceArea>

View File

@ -0,0 +1,320 @@
/** @file
Copyright (c) 2006, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
WinNtGopDriver.c
Abstract:
This file implements the UEFI Device Driver model requirements for GOP
GOP is short hand for Graphics Output Protocol.
**/
#include "WinNtGop.h"
EFI_DRIVER_BINDING_PROTOCOL gWinNtGopDriverBinding = {
WinNtGopDriverBindingSupported,
WinNtGopDriverBindingStart,
WinNtGopDriverBindingStop,
0x10,
NULL,
NULL
};
/**
@return None
**/
// TODO: This - add argument and description to function comment
// TODO: Handle - add argument and description to function comment
// TODO: RemainingDevicePath - add argument and description to function comment
EFI_STATUS
EFIAPI
WinNtGopDriverBindingSupported (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EFI_WIN_NT_IO_PROTOCOL *WinNtIo;
//
// Open the IO Abstraction(s) needed to perform the supported test
//
Status = gBS->OpenProtocol (
Handle,
&gEfiWinNtIoProtocolGuid,
&WinNtIo,
This->DriverBindingHandle,
Handle,
EFI_OPEN_PROTOCOL_BY_DRIVER
);
if (EFI_ERROR (Status)) {
return Status;
}
Status = WinNtGopSupported (WinNtIo);
//
// Close the I/O Abstraction(s) used to perform the supported test
//
gBS->CloseProtocol (
Handle,
&gEfiWinNtIoProtocolGuid,
This->DriverBindingHandle,
Handle
);
return Status;
}
/**
@return None
**/
// TODO: This - add argument and description to function comment
// TODO: Handle - add argument and description to function comment
// TODO: RemainingDevicePath - add argument and description to function comment
// TODO: EFI_UNSUPPORTED - add return value to function comment
EFI_STATUS
EFIAPI
WinNtGopDriverBindingStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_WIN_NT_IO_PROTOCOL *WinNtIo;
EFI_STATUS Status;
GOP_PRIVATE_DATA *Private;
//
// Grab the protocols we need
//
Status = gBS->OpenProtocol (
Handle,
&gEfiWinNtIoProtocolGuid,
&WinNtIo,
This->DriverBindingHandle,
Handle,
EFI_OPEN_PROTOCOL_BY_DRIVER
);
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
//
// Allocate Private context data for SGO inteface.
//
Private = NULL;
Status = gBS->AllocatePool (
EfiBootServicesData,
sizeof (GOP_PRIVATE_DATA),
&Private
);
if (EFI_ERROR (Status)) {
goto Done;
}
//
// Set up context record
//
Private->Signature = GOP_PRIVATE_DATA_SIGNATURE;
Private->Handle = Handle;
Private->WinNtThunk = WinNtIo->WinNtThunk;
Private->ControllerNameTable = NULL;
AddUnicodeString (
"eng",
gWinNtGopComponentName.SupportedLanguages,
&Private->ControllerNameTable,
WinNtIo->EnvString
);
Private->WindowName = WinNtIo->EnvString;
Status = WinNtGopConstructor (Private);
if (EFI_ERROR (Status)) {
goto Done;
}
//
// Publish the Gop interface to the world
//
Status = gBS->InstallMultipleProtocolInterfaces (
&Private->Handle,
&gEfiGraphicsOutputProtocolGuid,
&Private->GraphicsOutput,
&gEfiSimpleTextInProtocolGuid,
&Private->SimpleTextIn,
NULL
);
Done:
if (EFI_ERROR (Status)) {
gBS->CloseProtocol (
Handle,
&gEfiWinNtIoProtocolGuid,
This->DriverBindingHandle,
Handle
);
if (Private != NULL) {
//
// On Error Free back private data
//
if (Private->ControllerNameTable != NULL) {
FreeUnicodeStringTable (Private->ControllerNameTable);
}
gBS->FreePool (Private);
}
}
return Status;
}
/**
@return None
**/
// TODO: This - add argument and description to function comment
// TODO: Handle - add argument and description to function comment
// TODO: NumberOfChildren - add argument and description to function comment
// TODO: ChildHandleBuffer - add argument and description to function comment
// TODO: EFI_NOT_STARTED - add return value to function comment
// TODO: EFI_DEVICE_ERROR - add return value to function comment
EFI_STATUS
EFIAPI
WinNtGopDriverBindingStop (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Handle,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
)
{
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
EFI_STATUS Status;
GOP_PRIVATE_DATA *Private;
Status = gBS->OpenProtocol (
Handle,
&gEfiGraphicsOutputProtocolGuid,
&GraphicsOutput,
This->DriverBindingHandle,
Handle,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
);
if (EFI_ERROR (Status)) {
//
// If the GOP interface does not exist the driver is not started
//
return EFI_NOT_STARTED;
}
//
// Get our private context information
//
Private = GOP_PRIVATE_DATA_FROM_THIS (GraphicsOutput);
//
// Remove the SGO interface from the system
//
Status = gBS->UninstallMultipleProtocolInterfaces (
Private->Handle,
&gEfiGraphicsOutputProtocolGuid,
&Private->GraphicsOutput,
&gEfiSimpleTextInProtocolGuid,
&Private->SimpleTextIn,
NULL
);
if (!EFI_ERROR (Status)) {
//
// Shutdown the hardware
//
Status = WinNtGopDestructor (Private);
if (EFI_ERROR (Status)) {
return EFI_DEVICE_ERROR;
}
gBS->CloseProtocol (
Handle,
&gEfiWinNtIoProtocolGuid,
This->DriverBindingHandle,
Handle
);
//
// Free our instance data
//
FreeUnicodeStringTable (Private->ControllerNameTable);
gBS->FreePool (Private);
}
return Status;
}
/**
Convert a unicode string to a UINTN
@param String Unicode string.
@return UINTN of the number represented by String.
**/
UINTN
Atoi (
CHAR16 *String
)
{
UINTN Number;
CHAR16 *Str;
//
// skip preceeding white space
//
Str = String;
while ((*Str) && (*Str == ' ' || *Str == '"')) {
Str++;
}
//
// Convert ot a Number
//
Number = 0;
while (*Str != '\0') {
if ((*Str >= '0') && (*Str <= '9')) {
Number = (Number * 10) +*Str - '0';
} else {
break;
}
Str++;
}
return Number;
}

View File

@ -0,0 +1,352 @@
/** @file
Copyright (c) 2006, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
WinNtGopInput.c
Abstract:
This file produces the Simple Text In for an Gop window.
This stuff is linked at the hip to the Window, since the window
processing is done in a thread kicked off in WinNtGopImplementation.c
Since the window information is processed in an other thread we need
a keyboard Queue to pass data about. The Simple Text In code just
takes data off the Queue. The WinProc message loop takes keyboard input
and places it in the Queue.
**/
#include "WinNtGop.h"
/**
TODO: Add function description
@param Private TODO: add argument description
@retval EFI_SUCCESS TODO: Add description for return value
**/
EFI_STATUS
GopPrivateCreateQ (
IN GOP_PRIVATE_DATA *Private
)
{
Private->WinNtThunk->InitializeCriticalSection (&Private->QCriticalSection);
Private->Queue.Front = 0;
Private->Queue.Rear = MAX_Q - 1;
Private->Queue.Count = 0;
return EFI_SUCCESS;
}
/**
TODO: Add function description
@param Private TODO: add argument description
@retval EFI_SUCCESS TODO: Add description for return value
**/
EFI_STATUS
GopPrivateDestroyQ (
IN GOP_PRIVATE_DATA *Private
)
{
Private->Queue.Count = 0;
Private->WinNtThunk->DeleteCriticalSection (&Private->QCriticalSection);
return EFI_SUCCESS;
}
/**
TODO: Add function description
@param Private TODO: add argument description
@param Key TODO: add argument description
@retval EFI_NOT_READY TODO: Add description for return value
@retval EFI_SUCCESS TODO: Add description for return value
**/
EFI_STATUS
GopPrivateAddQ (
IN GOP_PRIVATE_DATA *Private,
IN EFI_INPUT_KEY Key
)
{
Private->WinNtThunk->EnterCriticalSection (&Private->QCriticalSection);
if (Private->Queue.Count == MAX_Q) {
Private->WinNtThunk->LeaveCriticalSection (&Private->QCriticalSection);
return EFI_NOT_READY;
}
Private->Queue.Rear = (Private->Queue.Rear + 1) % MAX_Q;
Private->Queue.Q[Private->Queue.Rear] = Key;
Private->Queue.Count++;
Private->WinNtThunk->LeaveCriticalSection (&Private->QCriticalSection);
return EFI_SUCCESS;
}
/**
TODO: Add function description
@param Private TODO: add argument description
@param Key TODO: add argument description
@retval EFI_NOT_READY TODO: Add description for return value
@retval EFI_SUCCESS TODO: Add description for return value
**/
EFI_STATUS
GopPrivateDeleteQ (
IN GOP_PRIVATE_DATA *Private,
OUT EFI_INPUT_KEY *Key
)
{
Private->WinNtThunk->EnterCriticalSection (&Private->QCriticalSection);
if (Private->Queue.Count == 0) {
Private->WinNtThunk->LeaveCriticalSection (&Private->QCriticalSection);
return EFI_NOT_READY;
}
*Key = Private->Queue.Q[Private->Queue.Front];
Private->Queue.Front = (Private->Queue.Front + 1) % MAX_Q;
Private->Queue.Count--;
Private->WinNtThunk->LeaveCriticalSection (&Private->QCriticalSection);
return EFI_SUCCESS;
}
/**
TODO: Add function description
@param Private TODO: add argument description
@retval EFI_NOT_READY TODO: Add description for return value
@retval EFI_SUCCESS TODO: Add description for return value
**/
EFI_STATUS
GopPrivateCheckQ (
IN GOP_PRIVATE_DATA *Private
)
{
if (Private->Queue.Count == 0) {
return EFI_NOT_READY;
}
return EFI_SUCCESS;
}
//
// Simple Text In implementation.
//
/**
TODO: Add function description
@param This TODO: add argument description
@param ExtendedVerification TODO: add argument description
@retval EFI_SUCCESS TODO: Add description for return value
**/
EFI_STATUS
EFIAPI
WinNtGopSimpleTextInReset (
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
{
GOP_PRIVATE_DATA *Private;
EFI_INPUT_KEY Key;
EFI_TPL OldTpl;
Private = GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS (This);
//
// Enter critical section
//
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
//
// A reset is draining the Queue
//
while (GopPrivateDeleteQ (Private, &Key) == EFI_SUCCESS)
;
//
// Leave critical section and return
//
gBS->RestoreTPL (OldTpl);
return EFI_SUCCESS;
}
/**
TODO: Add function description
@param This TODO: add argument description
@param Key TODO: add argument description
@return TODO: add return values
**/
STATIC
EFI_STATUS
EFIAPI
WinNtGopSimpleTextInReadKeyStroke (
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
OUT EFI_INPUT_KEY *Key
)
{
GOP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EFI_TPL OldTpl;
Private = GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS (This);
//
// Enter critical section
//
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
Status = GopPrivateCheckQ (Private);
if (!EFI_ERROR (Status)) {
//
// If a Key press exists try and read it.
//
Status = GopPrivateDeleteQ (Private, Key);
}
//
// Leave critical section and return
//
gBS->RestoreTPL (OldTpl);
return Status;
}
/**
TODO: Add function description
@param Event TODO: add argument description
@param Context TODO: add argument description
@return TODO: add return values
**/
STATIC
VOID
EFIAPI
WinNtGopSimpleTextInWaitForKey (
IN EFI_EVENT Event,
IN VOID *Context
)
{
GOP_PRIVATE_DATA *Private;
EFI_STATUS Status;
EFI_TPL OldTpl;
Private = (GOP_PRIVATE_DATA *) Context;
//
// Enter critical section
//
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
Status = GopPrivateCheckQ (Private);
if (!EFI_ERROR (Status)) {
//
// If a there is a key in the queue signal our event.
//
gBS->SignalEvent (Event);
} else {
//
// We need to sleep or NT will schedule this thread with such high
// priority that WinProc thread will never run and we will not see
// keyboard input. This Sleep makes the syste run 10x faster, so don't
// remove it.
//
Private->WinNtThunk->Sleep (1);
}
//
// Leave critical section and return
//
gBS->RestoreTPL (OldTpl);
}
/**
TODO: Add function description
@param Private TODO: add argument description
@return TODO: add return values
**/
EFI_STATUS
WinNtGopInitializeSimpleTextInForWindow (
IN GOP_PRIVATE_DATA *Private
)
{
EFI_STATUS Status;
GopPrivateCreateQ (Private);
//
// Initialize Simple Text In protoocol
//
Private->SimpleTextIn.Reset = WinNtGopSimpleTextInReset;
Private->SimpleTextIn.ReadKeyStroke = WinNtGopSimpleTextInReadKeyStroke;
Status = gBS->CreateEvent (
EVENT_NOTIFY_WAIT,
TPL_NOTIFY,
WinNtGopSimpleTextInWaitForKey,
Private,
&Private->SimpleTextIn.WaitForKey
);
return Status;
}
/**
TODO: Add function description
@param Private TODO: add argument description
@retval EFI_SUCCESS TODO: Add description for return value
**/
EFI_STATUS
WinNtGopDestroySimpleTextInForWindow (
IN GOP_PRIVATE_DATA *Private
)
{
GopPrivateDestroyQ (Private);
return EFI_SUCCESS;
}

File diff suppressed because it is too large Load Diff

View File

@ -128,6 +128,9 @@ EFI_DRIVER_BINDING_PROTOCOL gWinNtBusDriverBinding = {
static NT_PCD_ENTRY mPcdEnvironment[] = {
PcdToken(PcdWinNtConsole), &gEfiWinNtConsoleGuid,
PcdToken(PcdWinNtUga), &gEfiWinNtUgaGuid,
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
PcdToken(PcdWinNtGop), &gEfiWinNtGopGuid,
#endif
PcdToken(PcdWinNtSerialPort), &gEfiWinNtSerialPortGuid,
PcdToken(PcdWinNtFileSystem), &gEfiWinNtFileSystemGuid,
PcdToken(PcdWinNtVirtualDisk), &gEfiWinNtVirtualDisksGuid,

View File

@ -97,6 +97,9 @@
<GuidCNames Usage="ALWAYS_CONSUMED">
<GuidCName>gEfiWinNtUgaGuid</GuidCName>
</GuidCNames>
<GuidCNames Usage="ALWAYS_CONSUMED">
<GuidCName>gEfiWinNtGopGuid</GuidCName>
</GuidCNames>
<GuidCNames Usage="ALWAYS_CONSUMED">
<GuidCName>gEfiWinNtConsoleGuid</GuidCName>
</GuidCNames>
@ -132,6 +135,12 @@
<HelpText>This PCD declares the resolutions for the UGA windows.
The item type of this PCD can only be "DYNAMIC".</HelpText>
</PcdEntry>
<PcdEntry PcdItemType="DYNAMIC">
<C_Name>PcdWinNtGop</C_Name>
<TokenSpaceGuidCName>gEfiEdkNt32PkgTokenSpaceGuid</TokenSpaceGuidCName>
<HelpText>This PCD declares the resolutions for the GOP windows.
The item type of this PCD can only be "DYNAMIC".</HelpText>
</PcdEntry>
<PcdEntry PcdItemType="DYNAMIC">
<C_Name>PcdWinNtSerialPort</C_Name>
<TokenSpaceGuidCName>gEfiEdkNt32PkgTokenSpaceGuid</TokenSpaceGuidCName>

View File

@ -97,6 +97,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
<Filename>Dxe/WinNtThunk/Bus/SerialIo/WinNtSerialIo.msa</Filename>
<Filename>Dxe/WinNtThunk/Bus/SimpleFileSystem/WinNtSimpleFileSystem.msa</Filename>
<Filename>Dxe/WinNtThunk/Bus/Uga/WinNtUga.msa</Filename>
<Filename>Dxe/WinNtThunk/Bus/Gop/WinNtGop.msa</Filename>
<Filename>Dxe/WinNtThunk/Bus/WinNtBusDriver/WinNtBusDriver.msa</Filename>
<Filename>Dxe/WinNtThunk/Chipset/Metronome/Metronome.msa</Filename>
<Filename>Dxe/WinNtThunk/Chipset/RealTimeClock/RealTimeClock.msa</Filename>
@ -155,6 +156,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
<GuidValue>0C95A93D-A006-11D4-BCFA-0080C73C8881</GuidValue>
<HelpText/>
</Entry>
<Entry Name="WinNtGop">
<C_Name>gEfiWinNtGopGuid</C_Name>
<GuidValue>4e11e955-ccca-11d4-bd0d-0080c73c8881</GuidValue>
<HelpText/>
</Entry>
<Entry Name="WinNtUga">
<C_Name>gEfiWinNtUgaGuid</C_Name>
<GuidValue>AB248E99-ABE1-11D4-BD0D-0080C73C8881</GuidValue>
@ -368,5 +374,15 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
<HelpText>This PCD defines the memory size of simulated machine. Simulator will allocate
the size of PcdWinNtMemorySizeForSecMain in windows platform.</HelpText>
</PcdEntry>
<PcdEntry>
<C_Name>PcdWinNtGop</C_Name>
<Token>0x0000100d</Token>
<TokenSpaceGuidCName>gEfiEdkNt32PkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>VOID*</DatumType>
<ValidUsage>DYNAMIC</ValidUsage>
<DefaultValue>L"UGA Window 1!UGA Window 2"</DefaultValue>
<HelpText>This PCD declares the resolutions for the GOP windows.
The item type of this PCD can only be "DYNAMIC".</HelpText>
</PcdEntry>
</PcdDeclarations>
</PackageSurfaceArea>

View File

@ -23,6 +23,8 @@ Abstract:
#define EFI_WIN_NT_IO_PROTOCOL_GUID \
{ 0x96eb4ad6, 0xa32a, 0x11d4, { 0xbc, 0xfd, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
extern EFI_GUID gEfiWinNtIoProtocolGuid;
typedef struct {
EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk;
EFI_GUID *TypeGuid;
@ -30,9 +32,6 @@ typedef struct {
UINT16 InstanceNumber;
} EFI_WIN_NT_IO_PROTOCOL;
extern EFI_GUID gEfiWinNtIoProtocolGuid;
//
// The following GUIDs are used in EFI_WIN_NT_IO_PROTOCOL_GUID
// Device paths. They map 1:1 with NT envirnment variables. The variables
@ -63,10 +62,10 @@ extern EFI_GUID gEfiWinNtPhysicalDisksGuid;
//
#define EFI_WIN_NT_GOP_GUID \
{ \
0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } \
0x4e11e955, 0xccca, 0x11d4, {0xbd, 0x0d, 0x00, 0x80, 0xc7, 0x3c, 0x88, 0x81} \
}
extern EFI_GUID gEfiWinNtFileSystemGuid;
extern EFI_GUID gEfiWinNtGopGuid;
//
// EFI_WIN_NT_FILE_SYSTEM
@ -76,7 +75,7 @@ extern EFI_GUID gEfiWinNtFileSystemGuid;
0xc95a935, 0xa006, 0x11d4, {0xbc, 0xfa, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } \
}
extern EFI_GUID mEfiWinNtGopGuid;
extern EFI_GUID gEfiWinNtFileSystemGuid;
//
// EFI_WIN_NT_SERIAL_PORT

View File

@ -158,9 +158,11 @@ Returns:
//
return EFI_SUCCESS;
}
//
// Signal the EFI_EVENT_SIGNAL_READY_TO_BOOT event
//
EfiSignalEventReadyToBoot ();
//
// Set Boot Current
//

View File

@ -27,6 +27,7 @@ EFI_GUID UnknownDeviceGuid = UNKNOWN_DEVICE_GUID;
EFI_GUID mEfiWinNtThunkProtocolGuid = EFI_WIN_NT_THUNK_PROTOCOL_GUID;
EFI_GUID mEfiWinNtUgaGuid = EFI_WIN_NT_UGA_GUID;
EFI_GUID mEfiWinNtGopGuid = EFI_WIN_NT_GOP_GUID;
EFI_GUID mEfiWinNtSerialPortGuid = EFI_WIN_NT_SERIAL_PORT_GUID;
EFI_GUID mEfiMsgPcAnsiGuid = DEVICE_PATH_MESSAGING_PC_ANSI;
EFI_GUID mEfiMsgVt100Guid = DEVICE_PATH_MESSAGING_VT_100;
@ -313,6 +314,9 @@ Returns:
} else if (CompareGuid (&Vendor->Guid, &mEfiWinNtUgaGuid)) {
CatPrint (Str, L"%s", L"UGA");
return ;
} else if (CompareGuid (&Vendor->Guid, &mEfiWinNtGopGuid)) {
CatPrint (Str, L"%s", L"GOP");
return ;
} else if (CompareGuid (&Vendor->Guid, &mEfiWinNtSerialPortGuid)) {
CatPrint (Str, L"%s", L"Serial");
return ;
@ -370,6 +374,139 @@ DevPathAcpi (
}
}
VOID
DevPathExtendedAcpi (
IN OUT POOL_PRINT *Str,
IN VOID *DevPath
)
{
ACPI_EXTENDED_HID_DEVICE_PATH *ExtendedAcpi;
//
// Index for HID, UID and CID strings, 0 for non-exist
//
UINT16 HIDSTRIdx;
UINT16 UIDSTRIdx;
UINT16 CIDSTRIdx;
UINT16 Index;
UINT16 Length;
UINT16 Anchor;
CHAR8 *AsChar8Array;
ASSERT (Str != NULL);
ASSERT (DevPath != NULL);
HIDSTRIdx = 0;
UIDSTRIdx = 0;
CIDSTRIdx = 0;
ExtendedAcpi = DevPath;
Length = DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL *) ExtendedAcpi);
ASSERT (Length >= 19);
AsChar8Array = (CHAR8 *) ExtendedAcpi;
//
// find HIDSTR
//
Anchor = 16;
for (Index = Anchor; Index < Length && AsChar8Array[Index]; Index++) {
;
}
if (Index > Anchor) {
HIDSTRIdx = Anchor;
}
//
// find UIDSTR
//
Anchor = Index + 1;
for (Index = Anchor; Index < Length && AsChar8Array[Index]; Index++) {
;
}
if (Index > Anchor) {
UIDSTRIdx = Anchor;
}
//
// find CIDSTR
//
Anchor = Index + 1;
for (Index = Anchor; Index < Length && AsChar8Array[Index]; Index++) {
;
}
if (Index > Anchor) {
CIDSTRIdx = Anchor;
}
if (HIDSTRIdx == 0 && CIDSTRIdx == 0 && ExtendedAcpi->UID == 0) {
CatPrint (Str, L"AcpiExp(");
if ((ExtendedAcpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {
CatPrint (Str, L"PNP%04x,", EISA_ID_TO_NUM (ExtendedAcpi->HID));
} else {
CatPrint (Str, L"%08x,", ExtendedAcpi->HID);
}
if ((ExtendedAcpi->CID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {
CatPrint (Str, L"PNP%04x,", EISA_ID_TO_NUM (ExtendedAcpi->CID));
} else {
CatPrint (Str, L"%08x,", ExtendedAcpi->CID);
}
if (UIDSTRIdx != 0) {
CatPrint (Str, L"%a)", AsChar8Array + UIDSTRIdx);
} else {
CatPrint (Str, L"\"\")");
}
} else {
CatPrint (Str, L"AcpiEx(");
if ((ExtendedAcpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {
CatPrint (Str, L"PNP%04x,", EISA_ID_TO_NUM (ExtendedAcpi->HID));
} else {
CatPrint (Str, L"%08x,", ExtendedAcpi->HID);
}
if ((ExtendedAcpi->CID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {
CatPrint (Str, L"PNP%04x,", EISA_ID_TO_NUM (ExtendedAcpi->CID));
} else {
CatPrint (Str, L"%08x,", ExtendedAcpi->CID);
}
CatPrint (Str, L"%x,", ExtendedAcpi->UID);
if (HIDSTRIdx != 0) {
CatPrint (Str, L"%a,", AsChar8Array + HIDSTRIdx);
} else {
CatPrint (Str, L"\"\",");
}
if (CIDSTRIdx != 0) {
CatPrint (Str, L"%a,", AsChar8Array + CIDSTRIdx);
} else {
CatPrint (Str, L"\"\",");
}
if (UIDSTRIdx != 0) {
CatPrint (Str, L"%a)", AsChar8Array + UIDSTRIdx);
} else {
CatPrint (Str, L"\"\")");
}
}
}
VOID
DevPathAdrAcpi (
IN OUT POOL_PRINT *Str,
IN VOID *DevPath
)
{
ACPI_ADR_DEVICE_PATH *AcpiAdr;
UINT16 Index;
UINT16 Length;
UINT16 AdditionalAdrCount;
AcpiAdr = DevPath;
Length = DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL *) AcpiAdr);
AdditionalAdrCount = (Length - 8) / 4;
CatPrint (Str, L"AcpiAdr(%x", AcpiAdr->ADR);
for (Index = 0; Index < AdditionalAdrCount; Index++) {
CatPrint (Str, L",%x", *(UINT32 *) ((UINT8 *) AcpiAdr + 8 + Index * 4));
}
CatPrint (Str, L")");
}
VOID
DevPathAtapi (
IN OUT POOL_PRINT *Str,
@ -783,6 +920,12 @@ DEVICE_PATH_STRING_TABLE DevPathTable[] = {
ACPI_DEVICE_PATH,
ACPI_DP,
DevPathAcpi,
ACPI_DEVICE_PATH,
ACPI_EXTENDED_DP,
DevPathExtendedAcpi,
ACPI_DEVICE_PATH,
ACPI_ADR_DP,
DevPathAdrAcpi,
MESSAGING_DEVICE_PATH,
MSG_ATAPI_DP,
DevPathAtapi,

View File

@ -6617,6 +6617,14 @@
<MaxDatumSize>50</MaxDatumSize>
<Value>L"UGA Window 1!UGA Window 2"</Value>
</PcdData>
<PcdData ItemType="DYNAMIC">
<C_Name>PcdWinNtGop</C_Name>
<Token>0x0000100d</Token>
<TokenSpaceGuidCName>gEfiEdkNt32PkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>VOID*</DatumType>
<MaxDatumSize>50</MaxDatumSize>
<Value>L"GOP Window 1!GOP Window 2"</Value>
</PcdData>
<PcdData ItemType="DYNAMIC">
<C_Name>PcdWinNtSerialPort</C_Name>
<Token>0x00001002</Token>
@ -7124,97 +7132,6 @@
<FfsFormatKey>BS_DRIVER</FfsFormatKey>
</ModuleSaBuildOptions>
</ModuleSA>
<ModuleSA SupArchList="IA32" PackageGuid="0fb2aa2d-10d5-40a5-a9dc-060c12a4a3f3" ModuleGuid="AB248E8D-ABE1-11d4-BD0D-0080C73C8881">
<Libraries>
<Instance ModuleGuid="ff5c7a2c-ab7a-4366-8616-11c6e53247b6" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="27d67720-ea68-48ae-93da-a3a074c90e30" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="3a004ba5-efe0-4a61-9f1a-267a46ae5ba9" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="f1bbe03d-2f28-4dee-bec7-d98d7a30c36a" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="331deb15-454b-48d8-9b74-70d01f3f3556" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="52af22ae-9901-4484-8cdc-622dd5838b09" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="b57a1df6-ffdb-4247-a3df-3a562176751a" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="a86fbfca-0183-4eeb-aa8a-762e3b7da1f3" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="4674739d-3195-4fb2-8094-ac1d22d00194" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
</Libraries>
<PcdBuildDefinition>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdMaximumUnicodeStringLength</C_Name>
<Token>0x00000001</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>1000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdMaximumAsciiStringLength</C_Name>
<Token>0x00000002</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>1000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdMaximumLinkedListLength</C_Name>
<Token>0x00000003</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>1000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdSpinLockTimeout</C_Name>
<Token>0x00000004</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>10000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugPropertyMask</C_Name>
<Token>0x00000005</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0x1f</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugClearMemoryValue</C_Name>
<Token>0x00000008</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0xAF</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugPrintErrorLevel</C_Name>
<Token>0x00000006</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>0x80000000</Value>
</PcdData>
<PcdData ItemType="FEATURE_FLAG">
<C_Name>PcdComponentNameDisable</C_Name>
<Token>0x0000000d</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>BOOLEAN</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>FALSE</Value>
</PcdData>
<PcdData ItemType="FEATURE_FLAG">
<C_Name>PcdDriverDiagnosticsDisable</C_Name>
<Token>0x0000000e</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>BOOLEAN</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>FALSE</Value>
</PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>FV_RECOVERY</FvBinding>
<FfsFormatKey>BS_DRIVER</FfsFormatKey>
</ModuleSaBuildOptions>
</ModuleSA>
<ModuleSA SupArchList="IA32" PackageGuid="0fb2aa2d-10d5-40a5-a9dc-060c12a4a3f3" ModuleGuid="4A9B9DB8-EC62-4A92-818F-8AA0246D246E">
<Libraries>
<Instance ModuleGuid="ff5c7a2c-ab7a-4366-8616-11c6e53247b6" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
@ -7385,6 +7302,204 @@
<FfsFormatKey>APPLICATION</FfsFormatKey>
</ModuleSaBuildOptions>
</ModuleSA>
<!--Mod: WinNtGop Type: DXE_DRIVER Path: EdkNt32Pkg\Dxe\WinNtThunk\Bus\Gop\WinNtGop.msa-->
<ModuleSA ModuleGuid="29b3c4c6-e5aa-49e4-8ce0-2772f782ddc2" PackageGuid="0fb2aa2d-10d5-40a5-a9dc-060c12a4a3f3" SupArchList="IA32">
<Libraries>
<!--Pkg: MdePkg Mod: UefiLib Path: MdePkg\Library\UefiLib\UefiLib.msa-->
<Instance ModuleGuid="3a004ba5-efe0-4a61-9f1a-267a46ae5ba9" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
<!--Pkg: MdePkg Mod: BaseLib Path: MdePkg\Library\BaseLib\BaseLib.msa-->
<Instance ModuleGuid="27d67720-ea68-48ae-93da-a3a074c90e30" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
<!--Pkg: MdePkg Mod: DxeMemoryAllocationLib Path: MdePkg\Library\DxeMemoryAllocationLib\DxeMemoryAllocationLib.msa-->
<Instance ModuleGuid="4674739d-3195-4fb2-8094-ac1d22d00194" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
<!--Pkg: MdePkg Mod: BaseDebugLibNull Path: MdePkg\Library\BaseDebugLibNull\BaseDebugLibNull.msa-->
<Instance ModuleGuid="9ba1d976-0624-41a3-8650-28165e8d9ae8" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
<!--Pkg: MdePkg Mod: UefiBootServicesTableLib Path: MdePkg\Library\UefiBootServicesTableLib\UefiBootServicesTableLib.msa-->
<Instance ModuleGuid="ff5c7a2c-ab7a-4366-8616-11c6e53247b6" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
<!--Pkg: MdePkg Mod: BaseMemoryLib Path: MdePkg\Library\BaseMemoryLib\BaseMemoryLib.msa-->
<Instance ModuleGuid="fd44e603-002a-4b29-9f5f-529e815b6165" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
<!--Pkg: MdePkg Mod: BasePcdLibNull Path: MdePkg\Library\BasePcdLibNull\BasePcdLibNull.msa-->
<Instance ModuleGuid="40096a3a-5c2a-4fbc-aef7-5475dd7ab334" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
<!--Pkg: EdkNt32Pkg Mod: Nt32TimerLib Path: EdkNt32Pkg\Library\Nt32TimerLibNull\Nt32TimerLib.msa-->
<Instance ModuleGuid="3813bb9b-808b-4dcb-b9a3-ea47bd9324c0" ModuleVersion="1.0" PackageGuid="0fb2aa2d-10d5-40a5-a9dc-060c12a4a3f3" PackageVersion="0.3"/>
<!--Pkg: MdePkg Mod: BasePrintLib Path: MdePkg\Library\BasePrintLib\BasePrintLib.msa-->
<Instance ModuleGuid="a86fbfca-0183-4eeb-aa8a-762e3b7da1f3" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
<!--Pkg: MdePkg Mod: UefiDriverEntryPoint Path: MdePkg\Library\UefiDriverEntryPoint\UefiDriverEntryPoint.msa-->
<Instance ModuleGuid="331deb15-454b-48d8-9b74-70d01f3f3556" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
<!--Pkg: MdePkg Mod: UefiDriverModelLib Path: MdePkg\Library\UefiDriverModelLib\UefiDriverModelLib.msa-->
<Instance ModuleGuid="52af22ae-9901-4484-8cdc-622dd5838b09" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
<!--Pkg: MdePkg Mod: UefiRuntimeServicesTableLib Path: MdePkg\Library\UefiRuntimeServicesTableLib\UefiRuntimeServicesTableLib.msa-->
<Instance ModuleGuid="19cbbb97-ff61-45ff-8c3f-dfa66dd118c8" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
</Libraries>
<PcdBuildDefinition>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdMaximumUnicodeStringLength</C_Name>
<Token>0x00000001</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>1000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdMaximumAsciiStringLength</C_Name>
<Token>0x00000002</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>1000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdMaximumLinkedListLength</C_Name>
<Token>0x00000003</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>1000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdSpinLockTimeout</C_Name>
<Token>0x00000004</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>10000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugPropertyMask</C_Name>
<Token>0x00000005</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0x0f</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugClearMemoryValue</C_Name>
<Token>0x00000008</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0xAF</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugPrintErrorLevel</C_Name>
<Token>0x00000006</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>0x80000000</Value>
</PcdData>
<PcdData ItemType="FEATURE_FLAG">
<C_Name>PcdComponentNameDisable</C_Name>
<Token>0x0000000d</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>BOOLEAN</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>FALSE</Value>
</PcdData>
<PcdData ItemType="FEATURE_FLAG">
<C_Name>PcdDriverDiagnosticsDisable</C_Name>
<Token>0x0000000e</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>BOOLEAN</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>FALSE</Value>
</PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>FV_RECOVERY</FvBinding>
<FfsFormatKey>BS_DRIVER</FfsFormatKey>
</ModuleSaBuildOptions>
</ModuleSA>
<ModuleSA SupArchList="IA32" PackageGuid="0fb2aa2d-10d5-40a5-a9dc-060c12a4a3f3" ModuleGuid="AB248E8D-ABE1-11d4-BD0D-0080C73C8881">
<Libraries>
<Instance ModuleGuid="ff5c7a2c-ab7a-4366-8616-11c6e53247b6" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="27d67720-ea68-48ae-93da-a3a074c90e30" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="3a004ba5-efe0-4a61-9f1a-267a46ae5ba9" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="f1bbe03d-2f28-4dee-bec7-d98d7a30c36a" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="331deb15-454b-48d8-9b74-70d01f3f3556" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="52af22ae-9901-4484-8cdc-622dd5838b09" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="b57a1df6-ffdb-4247-a3df-3a562176751a" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="a86fbfca-0183-4eeb-aa8a-762e3b7da1f3" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Instance ModuleGuid="4674739d-3195-4fb2-8094-ac1d22d00194" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
</Libraries>
<PcdBuildDefinition>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdMaximumUnicodeStringLength</C_Name>
<Token>0x00000001</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>1000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdMaximumAsciiStringLength</C_Name>
<Token>0x00000002</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>1000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdMaximumLinkedListLength</C_Name>
<Token>0x00000003</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>1000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdSpinLockTimeout</C_Name>
<Token>0x00000004</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>10000000</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugPropertyMask</C_Name>
<Token>0x00000005</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0x1f</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugClearMemoryValue</C_Name>
<Token>0x00000008</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0xAF</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugPrintErrorLevel</C_Name>
<Token>0x00000006</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>0x80000000</Value>
</PcdData>
<PcdData ItemType="FEATURE_FLAG">
<C_Name>PcdComponentNameDisable</C_Name>
<Token>0x0000000d</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>BOOLEAN</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>FALSE</Value>
</PcdData>
<PcdData ItemType="FEATURE_FLAG">
<C_Name>PcdDriverDiagnosticsDisable</C_Name>
<Token>0x0000000e</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>BOOLEAN</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>FALSE</Value>
</PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>NULL</FvBinding>
<FfsFormatKey>BS_DRIVER</FfsFormatKey>
</ModuleSaBuildOptions>
</ModuleSA>
</FrameworkModules>
<DynamicPcdBuildDefinitions>
<PcdBuildData ItemType="DYNAMIC">
@ -7475,6 +7590,17 @@
<Value>L"UGA Window 1!UGA Window 2"</Value>
</SkuInfo>
</PcdBuildData>
<PcdBuildData ItemType="DYNAMIC">
<C_Name>PcdWinNtGop</C_Name>
<Token>0x0000100d</Token>
<TokenSpaceGuidCName>gEfiEdkNt32PkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>VOID*</DatumType>
<MaxDatumSize>50</MaxDatumSize>
<SkuInfo>
<SkuId>0</SkuId>
<Value>L"GOP Window 1!GOP Window 2"</Value>
</SkuInfo>
</PcdBuildData>
<PcdBuildData ItemType="DYNAMIC">
<C_Name>PcdWinNtSerialPort</C_Name>
<Token>0x00001002</Token>