Adding Simple Pointer, GOP, SimpleTextInEx, and Networking protocols to the emulator. Cleaned up POSIX include situation by centralizing it in a single file, like NT32. Fixed TPL issue with TPL High not being emulated correctly, it was possible to take a timer tick when the locks in the DXE core should have prevented this. Remove some unused files to make things easier to maintain.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11105 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -25,6 +25,7 @@ Abstract:
|
||||
#include "PiDxe.h"
|
||||
#include <Guid/EventGroup.h>
|
||||
#include <Protocol/SimpleTextIn.h>
|
||||
#include <Protocol/SimplePointer.h>
|
||||
#include <Protocol/UgaDraw.h>
|
||||
#include "Protocol/UnixUgaIo.h"
|
||||
#include <Library/DebugLib.h>
|
||||
@@ -48,6 +49,7 @@ typedef struct {
|
||||
EFI_HANDLE Handle;
|
||||
EFI_UGA_DRAW_PROTOCOL UgaDraw;
|
||||
EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn;
|
||||
EFI_SIMPLE_POINTER_PROTOCOL SimplePointer;
|
||||
|
||||
EFI_UNIX_THUNK_PROTOCOL *UnixThunk;
|
||||
|
||||
@@ -61,6 +63,8 @@ typedef struct {
|
||||
UINT32 ColorDepth;
|
||||
UINT32 RefreshRate;
|
||||
|
||||
EFI_SIMPLE_POINTER_MODE PointerMode;
|
||||
|
||||
//
|
||||
// UGA Private Data knowing when to start hardware
|
||||
//
|
||||
@@ -78,6 +82,9 @@ typedef struct {
|
||||
#define UGA_PRIVATE_DATA_FROM_TEXT_IN_THIS(a) \
|
||||
CR(a, UGA_PRIVATE_DATA, SimpleTextIn, UGA_PRIVATE_DATA_SIGNATURE)
|
||||
|
||||
#define UGA_PRIVATE_DATA_FROM_POINTER_THIS(a) \
|
||||
CR(a, UGA_PRIVATE_DATA, SimplePointer, UGA_PRIVATE_DATA_SIGNATURE)
|
||||
|
||||
//
|
||||
// Global Protocol Variables
|
||||
//
|
||||
@@ -287,6 +294,27 @@ UnixUgaInitializeSimpleTextInForWindow (
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
TODO: Add function description
|
||||
|
||||
Arguments:
|
||||
|
||||
Private - TODO: add argument description
|
||||
|
||||
Returns:
|
||||
|
||||
TODO: add return values
|
||||
|
||||
--*/
|
||||
;
|
||||
|
||||
EFI_STATUS
|
||||
UnixUgaInitializeSimplePointerForWindow (
|
||||
IN UGA_PRIVATE_DATA *Private
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
TODO: Add function description
|
||||
|
@@ -66,6 +66,7 @@
|
||||
|
||||
[Protocols]
|
||||
gEfiSimpleTextInProtocolGuid # PROTOCOL BY_START
|
||||
gEfiSimplePointerProtocolGuid # PROTOCOL BY_START
|
||||
gEfiUnixUgaIoProtocolGuid # PROTOCOL BY_START
|
||||
gEfiUgaDrawProtocolGuid # PROTOCOL BY_START
|
||||
gEfiUnixIoProtocolGuid # PROTOCOL TO_START
|
||||
|
@@ -177,6 +177,8 @@ Returns:
|
||||
&Private->UgaDraw,
|
||||
&gEfiSimpleTextInProtocolGuid,
|
||||
&Private->SimpleTextIn,
|
||||
&gEfiSimplePointerProtocolGuid,
|
||||
&Private->SimplePointer,
|
||||
NULL
|
||||
);
|
||||
|
||||
@@ -264,6 +266,8 @@ Returns:
|
||||
&Private->UgaDraw,
|
||||
&gEfiSimpleTextInProtocolGuid,
|
||||
&Private->SimpleTextIn,
|
||||
&gEfiSimplePointerProtocolGuid,
|
||||
&Private->SimplePointer,
|
||||
NULL
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
|
@@ -1,6 +1,7 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
|
||||
Portions copyright (c) 2010, Apple, Inc. 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
|
||||
@@ -57,7 +58,7 @@ Returns:
|
||||
--*/
|
||||
{
|
||||
UGA_PRIVATE_DATA *Private;
|
||||
EFI_INPUT_KEY Key;
|
||||
EFI_KEY_DATA Key;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
Private = UGA_PRIVATE_DATA_FROM_TEXT_IN_THIS (This);
|
||||
@@ -73,7 +74,7 @@ Returns:
|
||||
//
|
||||
// A reset is draining the Queue
|
||||
//
|
||||
while (Private->UgaIo->UgaGetKey(Private->UgaIo, &Key) == EFI_SUCCESS)
|
||||
while (Private->UgaIo->UgaGetKey (Private->UgaIo, &Key) == EFI_SUCCESS)
|
||||
;
|
||||
|
||||
//
|
||||
@@ -87,7 +88,7 @@ EFI_STATUS
|
||||
EFIAPI
|
||||
UnixUgaSimpleTextInReadKeyStroke (
|
||||
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
|
||||
OUT EFI_INPUT_KEY *Key
|
||||
OUT EFI_INPUT_KEY *Key
|
||||
)
|
||||
/*++
|
||||
|
||||
@@ -109,7 +110,8 @@ Returns:
|
||||
UGA_PRIVATE_DATA *Private;
|
||||
EFI_STATUS Status;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
EFI_KEY_DATA KeyData;
|
||||
|
||||
Private = UGA_PRIVATE_DATA_FROM_TEXT_IN_THIS (This);
|
||||
if (Private->UgaIo == NULL) {
|
||||
return EFI_NOT_READY;
|
||||
@@ -120,7 +122,9 @@ Returns:
|
||||
//
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
|
||||
Status = Private->UgaIo->UgaGetKey(Private->UgaIo, Key);
|
||||
Status = Private->UgaIo->UgaGetKey(Private->UgaIo, &KeyData);
|
||||
CopyMem (Key, &KeyData, sizeof (EFI_INPUT_KEY));
|
||||
|
||||
//
|
||||
// Leave critical section and return
|
||||
//
|
||||
@@ -179,6 +183,156 @@ Returns:
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
}
|
||||
|
||||
//
|
||||
// Simple Pointer implementation.
|
||||
//
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UnixUgaSimplePointerReset (
|
||||
IN EFI_SIMPLE_POINTER_PROTOCOL *This,
|
||||
IN BOOLEAN ExtendedVerification
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
TODO: Add function description
|
||||
|
||||
Arguments:
|
||||
|
||||
This - TODO: add argument description
|
||||
ExtendedVerification - TODO: add argument description
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - TODO: Add description for return value
|
||||
|
||||
--*/
|
||||
{
|
||||
UGA_PRIVATE_DATA *Private;
|
||||
EFI_SIMPLE_POINTER_STATE State;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
Private = UGA_PRIVATE_DATA_FROM_POINTER_THIS (This);
|
||||
if (Private->UgaIo == NULL) {
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
//
|
||||
// Enter critical section
|
||||
//
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
|
||||
//
|
||||
// A reset is draining the Queue
|
||||
//
|
||||
while (Private->UgaIo->UgaGetPointerState(Private->UgaIo, &State) == EFI_SUCCESS)
|
||||
;
|
||||
|
||||
//
|
||||
// Leave critical section and return
|
||||
//
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UnixUgaSimplePointerGetState (
|
||||
IN EFI_SIMPLE_POINTER_PROTOCOL *This,
|
||||
IN OUT EFI_SIMPLE_POINTER_STATE *State
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
TODO: Add function description
|
||||
|
||||
Arguments:
|
||||
|
||||
This - TODO: add argument description
|
||||
Key - TODO: add argument description
|
||||
|
||||
Returns:
|
||||
|
||||
TODO: add return values
|
||||
|
||||
--*/
|
||||
{
|
||||
UGA_PRIVATE_DATA *Private;
|
||||
EFI_STATUS Status;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
Private = UGA_PRIVATE_DATA_FROM_POINTER_THIS (This);
|
||||
if (Private->UgaIo == NULL) {
|
||||
return EFI_NOT_READY;
|
||||
}
|
||||
|
||||
//
|
||||
// Enter critical section
|
||||
//
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
|
||||
Status = Private->UgaIo->UgaGetPointerState(Private->UgaIo, State);
|
||||
//
|
||||
// Leave critical section and return
|
||||
//
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VOID
|
||||
EFIAPI
|
||||
UnixUgaSimplePointerWaitForInput (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
TODO: Add function description
|
||||
|
||||
Arguments:
|
||||
|
||||
Event - TODO: add argument description
|
||||
Context - TODO: add argument description
|
||||
|
||||
Returns:
|
||||
|
||||
TODO: add return values
|
||||
|
||||
--*/
|
||||
{
|
||||
UGA_PRIVATE_DATA *Private;
|
||||
EFI_STATUS Status;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
Private = (UGA_PRIVATE_DATA *) Context;
|
||||
if (Private->UgaIo == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Enter critical section
|
||||
//
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
|
||||
Status = Private->UgaIo->UgaCheckPointer(Private->UgaIo);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
// If the pointer state has changed, signal our event.
|
||||
//
|
||||
gBS->SignalEvent (Event);
|
||||
}
|
||||
//
|
||||
// Leave critical section and return
|
||||
//
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
UnixUgaInitializeSimpleTextInForWindow (
|
||||
IN UGA_PRIVATE_DATA *Private
|
||||
@@ -217,3 +371,48 @@ Returns:
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
UnixUgaInitializeSimplePointerForWindow (
|
||||
IN UGA_PRIVATE_DATA *Private
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
TODO: Add function description
|
||||
|
||||
Arguments:
|
||||
|
||||
Private - TODO: add argument description
|
||||
|
||||
Returns:
|
||||
|
||||
TODO: add return values
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// Initialize Simple Pointer protoocol
|
||||
//
|
||||
Private->PointerMode.ResolutionX = 1;
|
||||
Private->PointerMode.ResolutionY = 1;
|
||||
Private->PointerMode.LeftButton = TRUE;
|
||||
Private->PointerMode.RightButton = TRUE;
|
||||
|
||||
Private->SimplePointer.Reset = UnixUgaSimplePointerReset;
|
||||
Private->SimplePointer.GetState = UnixUgaSimplePointerGetState;
|
||||
Private->SimplePointer.Mode = &Private->PointerMode;
|
||||
|
||||
Status = gBS->CreateEvent (
|
||||
EVT_NOTIFY_WAIT,
|
||||
TPL_NOTIFY,
|
||||
UnixUgaSimplePointerWaitForInput,
|
||||
Private,
|
||||
&Private->SimplePointer.WaitForInput
|
||||
);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
@@ -394,6 +394,8 @@ Returns:
|
||||
|
||||
UnixUgaInitializeSimpleTextInForWindow (Private);
|
||||
|
||||
UnixUgaInitializeSimplePointerForWindow (Private);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user