• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*++ @file
2 
3 Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
4 Portions copyright (c) 2010,Apple Inc. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution.  The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9 
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #ifndef __UGA_H_
16 #define __UGA_H_
17 
18 #include <PiDxe.h>
19 
20 #include <Protocol/GraphicsOutput.h>
21 #include <Protocol/SimpleTextIn.h>
22 #include <Protocol/SimpleTextInEx.h>
23 #include <Protocol/SimplePointer.h>
24 #include <Protocol/EmuIoThunk.h>
25 #include <Protocol/EmuGraphicsWindow.h>
26 
27 #include <Guid/EventGroup.h>
28 
29 #include <Library/DebugLib.h>
30 #include <Library/BaseLib.h>
31 #include <Library/UefiDriverEntryPoint.h>
32 #include <Library/UefiLib.h>
33 #include <Library/BaseMemoryLib.h>
34 #include <Library/MemoryAllocationLib.h>
35 #include <Library/UefiBootServicesTableLib.h>
36 #include <Library/KeyMapLib.h>
37 
38 
39 #define MAX_Q 256
40 
41 typedef struct {
42   UINTN         Front;
43   UINTN         Rear;
44   UINTN         Count;
45   EFI_INPUT_KEY Q[MAX_Q];
46 } GOP_QUEUE_FIXED;
47 
48 #define EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('U', 'g', 'S', 'n')
49 typedef struct _EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY {
50   UINTN                                 Signature;
51   EFI_HANDLE                            NotifyHandle;
52   EFI_KEY_DATA                          KeyData;
53   EFI_KEY_NOTIFY_FUNCTION               KeyNotificationFn;
54   EFI_EVENT                             Event;
55   LIST_ENTRY                            NotifyEntry;
56 } EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY;
57 
58 #define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff
59 
60 typedef struct {
61   UINT32                     HorizontalResolution;
62   UINT32                     VerticalResolution;
63   UINT32                     ColorDepth;
64   UINT32                     RefreshRate;
65 } GOP_MODE_DATA;
66 
67 
68 
69 extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;
70 extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;
71 
72 #define EMU_UGA_CLASS_NAME       L"EmuGopWindow"
73 
74 #define GOP_PRIVATE_DATA_SIGNATURE  SIGNATURE_32 ('G', 'o', 'p', 'N')
75 typedef struct {
76   UINT64                            Signature;
77 
78   EFI_HANDLE                        Handle;
79   EFI_GRAPHICS_OUTPUT_PROTOCOL      GraphicsOutput;
80   EFI_SIMPLE_TEXT_INPUT_PROTOCOL    SimpleTextIn;
81   EFI_SIMPLE_POINTER_PROTOCOL       SimplePointer;
82 
83   EMU_IO_THUNK_PROTOCOL             *EmuIoThunk;
84   EMU_GRAPHICS_WINDOW_PROTOCOL      *EmuGraphicsWindow;
85 
86   EFI_UNICODE_STRING_TABLE          *ControllerNameTable;
87 
88   EFI_SIMPLE_POINTER_MODE           PointerMode;
89   //
90   // GOP Private Data for QueryMode ()
91   //
92   GOP_MODE_DATA                     *ModeData;
93 
94 
95   //
96   // UGA Private Data knowing when to start hardware
97   //
98   BOOLEAN                           HardwareNeedsStarting;
99 
100   CHAR16                            *WindowName;
101 
102   GOP_QUEUE_FIXED                   Queue;
103 
104   EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleTextInEx;
105   EFI_KEY_STATE                     KeyState;
106   LIST_ENTRY                        NotifyList;
107 } GOP_PRIVATE_DATA;
108 
109 
110 #define GOP_PRIVATE_DATA_FROM_THIS(a)  \
111          CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE)
112 
113 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS(a)  \
114          CR(a, GOP_PRIVATE_DATA, SimpleTextIn, GOP_PRIVATE_DATA_SIGNATURE)
115 
116 #define GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS(a)  \
117          CR(a, GOP_PRIVATE_DATA, SimpleTextInEx, GOP_PRIVATE_DATA_SIGNATURE)
118 
119 #define GOP_PRIVATE_DATA_FROM_POINTER_MODE_THIS(a)  \
120          CR(a, GOP_PRIVATE_DATA, SimplePointer, GOP_PRIVATE_DATA_SIGNATURE)
121 
122 
123 //
124 // Global Protocol Variables
125 //
126 extern EFI_DRIVER_BINDING_PROTOCOL  gEmuGopDriverBinding;
127 extern EFI_COMPONENT_NAME_PROTOCOL  gEmuGopComponentName;
128 extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2;
129 
130 //
131 // Gop Hardware abstraction internal worker functions
132 //
133 EFI_STATUS
134 EmuGopSupported (
135   IN  EMU_IO_THUNK_PROTOCOL  *EmuIoThunk
136   );
137 
138 EFI_STATUS
139 EmuGopConstructor (
140   IN  GOP_PRIVATE_DATA    *Private
141   );
142 
143 EFI_STATUS
144 EmuGopDestructor (
145   IN  GOP_PRIVATE_DATA    *Private
146   );
147 
148 
149 EFI_STATUS
150 GopPrivateAddQ (
151   IN  GOP_PRIVATE_DATA    *Private,
152   IN  EFI_INPUT_KEY       Key
153   );
154 
155 EFI_STATUS
156 EmuGopInitializeSimpleTextInForWindow (
157   IN  GOP_PRIVATE_DATA    *Private
158   );
159 
160 EFI_STATUS
161 EmuGopInitializeSimplePointerForWindow (
162   IN  GOP_PRIVATE_DATA    *Private
163   );
164 
165 EFI_STATUS
166 EmuGopStartWindow (
167   IN  GOP_PRIVATE_DATA    *Private,
168   IN  UINT32              HorizontalResolution,
169   IN  UINT32              VerticalResolution,
170   IN  UINT32              ColorDepth,
171   IN  UINT32              RefreshRate
172   );
173 
174 VOID
175 EFIAPI
176 ShutdownGopEvent (
177   IN EFI_EVENT  Event,
178   IN VOID       *Context
179   );
180 
181 VOID
182 EFIAPI
183 GopPrivateMakeCallbackFunction (
184   IN VOID           *Context,
185   IN EFI_KEY_DATA   *KeyData
186   );
187 
188 VOID
189 EFIAPI
190 GopPrivateBreakCallbackFunction (
191   IN VOID           *Context,
192   IN EFI_KEY_DATA   *KeyData
193   );
194 
195 #endif
196