1 /*++ @file
2 
3 Copyright (c) 2006, Tristan Gingold. All rights reserved.<BR>
4 Portitions copyright (c) 2010 - 2011, Apple Inc. All rights reserved.
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6 
7 **/
8 
9 #ifndef _EMU_UGA_IO_H_
10 #define _EMU_UGA_IO_H_
11 
12 #include <Protocol/SimplePointer.h>
13 #include <Protocol/SimpleTextIn.h>
14 #include <Protocol/SimpleTextInEx.h>
15 #include <Protocol/UgaDraw.h>
16 
17 #define EMU_GRAPHICS_WINDOW_PROTOCOL_GUID \
18  { 0x30FD316A, 0x6728, 0x2E41, { 0xA6, 0x90, 0x0D, 0x13, 0x33, 0xD8, 0xCA, 0xC1 } }
19 
20 typedef struct _EMU_GRAPHICS_WINDOW_PROTOCOL EMU_GRAPHICS_WINDOW_PROTOCOL;
21 
22 typedef
23 EFI_STATUS
24 (EFIAPI *EMU_GRAPHICS_WINDOWS_CLOSE)(
25   EMU_GRAPHICS_WINDOW_PROTOCOL *Uga
26   );
27 
28 typedef
29 EFI_STATUS
30 (EFIAPI *EMU_GRAPHICS_WINDOWS_SIZE)(
31   EMU_GRAPHICS_WINDOW_PROTOCOL  *Uga,
32   UINT32                        Width,
33   UINT32                        Height
34   );
35 
36 typedef
37 EFI_STATUS
38 (EFIAPI *EMU_GRAPHICS_WINDOWS_CHECK_KEY)(
39   EMU_GRAPHICS_WINDOW_PROTOCOL *Uga
40   );
41 
42 typedef
43 EFI_STATUS
44 (EFIAPI *EMU_GRAPHICS_WINDOWS_GET_KEY)(
45   EMU_GRAPHICS_WINDOW_PROTOCOL  *Uga,
46   EFI_KEY_DATA                  *key
47   );
48 
49 typedef
50 EFI_STATUS
51 (EFIAPI *EMU_GRAPHICS_WINDOWS_KEY_SET_STATE) (
52   IN EMU_GRAPHICS_WINDOW_PROTOCOL   *GraphicsWindows,
53   IN EFI_KEY_TOGGLE_STATE           *KeyToggleState
54   );
55 
56 
57 typedef
58 VOID
59 (EFIAPI *EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK) (
60   IN VOID           *Context,
61   IN EFI_KEY_DATA   *KeyData
62   );
63 
64 typedef
65 EFI_STATUS
66 (EFIAPI *EMU_GRAPHICS_WINDOWS_REGISTER_KEY_NOTIFY) (
67   IN EMU_GRAPHICS_WINDOW_PROTOCOL                       *GraphicsWindows,
68   IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK   MakeCallBack,
69   IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK   BreakCallBack,
70   IN VOID                                               *Context
71   );
72 
73 
74 typedef struct {
75     UINTN                                   SourceX;
76     UINTN                                   SourceY;
77     UINTN                                   DestinationX;
78     UINTN                                   DestinationY;
79     UINTN                                   Width;
80     UINTN                                   Height;
81     UINTN                                   Delta;
82 } EMU_GRAPHICS_WINDOWS__BLT_ARGS;
83 
84 typedef
85 EFI_STATUS
86 (EFIAPI *EMU_GRAPHICS_WINDOWS_BLT)(
87   IN  EMU_GRAPHICS_WINDOW_PROTOCOL            *GraphicsWindows,
88   IN  EFI_UGA_PIXEL                           *BltBuffer OPTIONAL,
89   IN  EFI_UGA_BLT_OPERATION                   BltOperation,
90   IN  EMU_GRAPHICS_WINDOWS__BLT_ARGS          *Args
91   );
92 
93 typedef
94 BOOLEAN
95 (EFIAPI *EMU_GRAPHICS_WINDOWS_IS_KEY_PRESSED) (
96   IN  EMU_GRAPHICS_WINDOW_PROTOCOL  *GraphicsWindows,
97   IN  EFI_KEY_DATA                  *KeyData
98   );
99 
100 typedef
101 EFI_STATUS
102 (EFIAPI *EMU_GRAPHICS_WINDOWS_CHECK_POINTER)(
103   EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows
104   );
105 
106 typedef
107 EFI_STATUS
108 (EFIAPI *EMU_GRAPHICS_WINDOWS_GET_POINTER_STATE)(
109   EMU_GRAPHICS_WINDOW_PROTOCOL  *GraphicsWindows,
110   EFI_SIMPLE_POINTER_STATE      *state
111   );
112 
113 struct _EMU_GRAPHICS_WINDOW_PROTOCOL {
114   EMU_GRAPHICS_WINDOWS_SIZE                    Size;
115   EMU_GRAPHICS_WINDOWS_CHECK_KEY               CheckKey;
116   EMU_GRAPHICS_WINDOWS_KEY_SET_STATE           KeySetState;
117   EMU_GRAPHICS_WINDOWS_GET_KEY                 GetKey;
118   EMU_GRAPHICS_WINDOWS_REGISTER_KEY_NOTIFY     RegisterKeyNotify;
119   EMU_GRAPHICS_WINDOWS_BLT                     Blt;
120   EMU_GRAPHICS_WINDOWS_IS_KEY_PRESSED          IsKeyPressed;
121   EMU_GRAPHICS_WINDOWS_CHECK_POINTER           CheckPointer;
122   EMU_GRAPHICS_WINDOWS_GET_POINTER_STATE       GetPointerState;
123 };
124 
125 
126 extern EFI_GUID gEmuGraphicsWindowProtocolGuid;
127 
128 #endif
129