1 /*	$NetBSD: efidbg.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $	*/
2 
3 /*
4  * Copyright (c) 1999, 2000
5  * Intel Corporation.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * 3. All advertising materials mentioning features or use of this software
20  *    must display the following acknowledgement:
21  *
22  *    This product includes software developed by Intel Corporation and
23  *    its contributors.
24  *
25  * 4. Neither the name of Intel Corporation or its contributors may be
26  *    used to endorse or promote products derived from this software
27  *    without specific prior written permission.
28  *
29  * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
30  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32  * ARE DISCLAIMED.  IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
33  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
34  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
35  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
36  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
37  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
39  * THE POSSIBILITY OF SUCH DAMAGE.
40  *
41  */
42 
43 
44 #ifndef _EFIDBG_H_
45 #define _EFIDBG_H_
46 
47 #include "eficontext.h"
48 #include "efiser.h"
49 
50 typedef struct _DEBUGPORT_16550_CONFIG_DATA {
51         UINT32							PortAddress;
52         UINT64                          BaudRate;
53     	UINT32               			ReceiveFifoDepth;
54     	UINT32               			Timeout;
55         UINT8                           Parity;
56         UINT8                           DataBits;
57         UINT8                           StopBits;
58 	    UINT32                       	ControlMask;
59         BOOLEAN							RtsCtsEnable;		// RTS, CTS control
60 } DEBUGPORT_16550_CONFIG_DATA;
61 
62 typedef struct _DEBUGPORT_16550_DEVICE_PATH {
63         EFI_DEVICE_PATH                 Header;
64         DEBUGPORT_16550_CONFIG_DATA		ConfigData;
65 } DEBUGPORT_16550_DEVICE_PATH;
66 
67 typedef union {
68     EFI_DEVICE_PATH                     DevPath;
69     DEBUGPORT_16550_DEVICE_PATH         Uart;
70     // add new types of debugport device paths to this union...
71 } DEBUGPORT_DEV_PATH;
72 
73 
74 //
75 // Debug Support protocol {2755590C-6F3C-42FA-9EA4-A3BA543CDA25}
76 //
77 
78 #define DEBUG_SUPPORT_PROTOCOL \
79 { 0x2755590C, 0x6F3C, 0x42fa, 0x9E, 0xA4, 0xA3, 0xBA, 0x54, 0x3C, 0xDA, 0x25 }
80 
81 
82 typedef UINTN EXCEPTION_TYPE;
83 
84 typedef
85 VOID
86 (*EXCEPTION_HANDLER) (
87 	IN EXCEPTION_TYPE ExceptionType,
88     IN SYSTEM_CONTEXT *SystemContext
89     );
90 
91 typedef
92 EFI_STATUS
93 (EFIAPI *EFI_REGISTER_TIMER_TICK_CALLBACK) (
94     IN struct _EFI_DEBUG_SUPPORT_INTERFACE  *This,
95     IN EXCEPTION_HANDLER	                TimerTickCallback
96     );
97 
98 typedef
99 EFI_STATUS
100 (EFIAPI *EFI_REGISTER_EXCEPTION_HANDLER) (
101     IN     struct _EFI_DEBUG_SUPPORT_INTERFACE  *This,
102     IN     EXCEPTION_HANDLER                    ExceptionHandler,
103     IN     EXCEPTION_TYPE                       ExceptionType
104     );
105 
106 typedef
107 EFI_STATUS
108 (EFIAPI *EFI_IP_CALL_TRACE) (
109     IN     struct _EFI_DEBUG_SUPPORT_INTERFACE  *This
110     );
111 
112 
113 #define EFI_DEBUG_SUPPORT_INTERFACE_REVISION     0x00010000
114 
115 typedef struct _EFI_DEBUG_SUPPORT_INTERFACE {
116     UINT32                          	Revision;
117     EFI_REGISTER_TIMER_TICK_CALLBACK	RegisterTimerTickCallback;
118     EFI_REGISTER_EXCEPTION_HANDLER  	RegisterExceptionHandler;
119     EFI_IP_CALL_TRACE               	IpCallTrace;
120 } EFI_DEBUG_SUPPORT_INTERFACE;
121 
122 
123 //
124 // Debugport io protocol {EBA4E8D2-3858-41EC-A281-2647BA9660D0}
125 //
126 
127 #define DEBUGPORT_IO_PROTOCOL \
128 { 0XEBA4E8D2, 0X3858, 0X41EC, 0XA2, 0X81, 0X26, 0X47, 0XBA, 0X96, 0X60, 0XD0 }
129 
130 
131 typedef
132 EFI_STATUS
133 (EFIAPI *EFI_DEBUGPORT_IO_RESET) (
134     IN struct _EFI_DEBUGPORT_IO_INTERFACE  	*This
135     );
136 
137 typedef
138 EFI_STATUS
139 (EFIAPI *EFI_DEBUGPORT_IO_READ) (
140     IN     struct _EFI_DEBUGPORT_IO_INTERFACE	*This,
141     IN OUT UINTN                    		*BufferSize,
142     OUT VOID                         		*Buffer
143     );
144 
145 typedef
146 EFI_STATUS
147 (EFIAPI *EFI_DEBUGPORT_IO_WRITE) (
148     IN     struct _EFI_DEBUGPORT_IO_INTERFACE *This,
149     IN OUT UINTN                    		*BufferSize,
150     IN VOID                         		*Buffer
151     );
152 
153 #define EFI_DEBUGPORT_IO_INTERFACE_REVISION   0x00010000
154 
155 typedef struct _EFI_DEBUGPORT_IO_INTERFACE {
156     UINT32                          		Revision;
157     EFI_DEBUGPORT_IO_READ					Read;
158     EFI_DEBUGPORT_IO_WRITE					Write;
159     EFI_DEBUGPORT_IO_RESET					Reset;
160 } EFI_DEBUGPORT_IO_INTERFACE;
161 
162 
163 //
164 // Debugport UART16550 control protocol {628EA978-4C26-4605-BC02-A42A496917DD}
165 //
166 
167 #define DEBUGPORT_UART16550_CONTROL_PROTOCOL \
168 { 0X628EA978, 0X4C26, 0X4605, 0XBC, 0X2, 0XA4, 0X2A, 0X49, 0X69, 0X17, 0XDD }
169 
170 // Note: The definitions for EFI_PARITY_TYPE, EFI_STOP_BITS_TYPE, and
171 // SERIAL_IO_MODE are included from efiser.h
172 
173 typedef
174 EFI_STATUS
175 (EFIAPI *EFI_UART16550_SET_ATTRIBUTES) (
176     IN struct _EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE  	*This,
177     IN UINT64                       	BaudRate,
178     IN UINT32                       	ReceiveFifoDepth,
179     IN UINT32                       	Timeout,
180     IN EFI_PARITY_TYPE       			Parity,
181     IN UINT8                        	DataBits,
182     IN EFI_STOP_BITS_TYPE    			StopBits
183     );
184 
185 typedef
186 EFI_STATUS
187 (EFIAPI *EFI_UART16550_SET_CONTROL_BITS) (
188     IN struct _EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE  	*This,
189     IN UINT32                       	Control
190     );
191 
192 typedef
193 EFI_STATUS
194 (EFIAPI *EFI_UART16550_GET_CONTROL_BITS) (
195     IN struct _EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE	*This,
196     OUT UINT32                      	*Control
197     );
198 
199 #define EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE_REVISION   0x00010000
200 
201 typedef struct _EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE {
202     UINT32                          	Revision;
203 	EFI_UART16550_SET_ATTRIBUTES		SetAttributes;
204 	EFI_UART16550_SET_CONTROL_BITS		SetControl;
205 	EFI_UART16550_GET_CONTROL_BITS 		GetControl;
206 	DEBUGPORT_16550_CONFIG_DATA			*Mode;
207 } EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE;
208 
209 
210 #define DEVICE_PATH_DEBUGPORT DEBUGPORT_IO_PROTOCOL
211 
212 #endif /* _EFIDBG_H_ */
213