1*1370a723SSascha Wildner /** @file
2*1370a723SSascha Wildner 
3*1370a723SSascha Wildner   The file defines the EFI Debugport protocol.
4*1370a723SSascha Wildner   This protocol is used by debug agent to communicate with the
5*1370a723SSascha Wildner   remote debug host.
6*1370a723SSascha Wildner 
7*1370a723SSascha Wildner   Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
8*1370a723SSascha Wildner   SPDX-License-Identifier: BSD-2-Clause-Patent
9*1370a723SSascha Wildner 
10*1370a723SSascha Wildner **/
11*1370a723SSascha Wildner 
12*1370a723SSascha Wildner #ifndef __DEBUG_PORT_H__
13*1370a723SSascha Wildner #define __DEBUG_PORT_H__
14*1370a723SSascha Wildner 
15*1370a723SSascha Wildner ///
16*1370a723SSascha Wildner /// DebugPortIo protocol {EBA4E8D2-3858-41EC-A281-2647BA9660D0}
17*1370a723SSascha Wildner ///
18*1370a723SSascha Wildner #define EFI_DEBUGPORT_PROTOCOL_GUID \
19*1370a723SSascha Wildner   { \
20*1370a723SSascha Wildner     0xEBA4E8D2, 0x3858, 0x41EC, {0xA2, 0x81, 0x26, 0x47, 0xBA, 0x96, 0x60, 0xD0 } \
21*1370a723SSascha Wildner   }
22*1370a723SSascha Wildner 
23*1370a723SSascha Wildner extern EFI_GUID gEfiDebugPortProtocolGuid;
24*1370a723SSascha Wildner 
25*1370a723SSascha Wildner typedef struct _EFI_DEBUGPORT_PROTOCOL EFI_DEBUGPORT_PROTOCOL;
26*1370a723SSascha Wildner 
27*1370a723SSascha Wildner //
28*1370a723SSascha Wildner // DebugPort member functions
29*1370a723SSascha Wildner //
30*1370a723SSascha Wildner 
31*1370a723SSascha Wildner /**
32*1370a723SSascha Wildner   Resets the debugport.
33*1370a723SSascha Wildner 
34*1370a723SSascha Wildner   @param  This                  A pointer to the EFI_DEBUGPORT_PROTOCOL instance.
35*1370a723SSascha Wildner 
36*1370a723SSascha Wildner   @retval EFI_SUCCESS           The debugport device was reset and is in usable state.
37*1370a723SSascha Wildner   @retval EFI_DEVICE_ERROR      The debugport device could not be reset and is unusable.
38*1370a723SSascha Wildner 
39*1370a723SSascha Wildner **/
40*1370a723SSascha Wildner typedef
41*1370a723SSascha Wildner EFI_STATUS
42*1370a723SSascha Wildner (EFIAPI *EFI_DEBUGPORT_RESET)(
43*1370a723SSascha Wildner   IN EFI_DEBUGPORT_PROTOCOL               *This
44*1370a723SSascha Wildner   );
45*1370a723SSascha Wildner 
46*1370a723SSascha Wildner /**
47*1370a723SSascha Wildner   Writes data to the debugport.
48*1370a723SSascha Wildner 
49*1370a723SSascha Wildner   @param  This                  A pointer to the EFI_DEBUGPORT_PROTOCOL instance.
50*1370a723SSascha Wildner   @param  Timeout               The number of microseconds to wait before timing out a write operation.
51*1370a723SSascha Wildner   @param  BufferSize            On input, the requested number of bytes of data to write. On output, the
52*1370a723SSascha Wildner                                 number of bytes of data actually written.
53*1370a723SSascha Wildner   @param  Buffer                A pointer to a buffer containing the data to write.
54*1370a723SSascha Wildner 
55*1370a723SSascha Wildner   @retval EFI_SUCCESS           The data was written.
56*1370a723SSascha Wildner   @retval EFI_DEVICE_ERROR      The device reported an error.
57*1370a723SSascha Wildner   @retval EFI_TIMEOUT           The data write was stopped due to a timeout.
58*1370a723SSascha Wildner 
59*1370a723SSascha Wildner **/
60*1370a723SSascha Wildner typedef
61*1370a723SSascha Wildner EFI_STATUS
62*1370a723SSascha Wildner (EFIAPI *EFI_DEBUGPORT_WRITE)(
63*1370a723SSascha Wildner   IN EFI_DEBUGPORT_PROTOCOL               *This,
64*1370a723SSascha Wildner   IN UINT32                               Timeout,
65*1370a723SSascha Wildner   IN OUT UINTN                            *BufferSize,
66*1370a723SSascha Wildner   IN VOID                                 *Buffer
67*1370a723SSascha Wildner   );
68*1370a723SSascha Wildner 
69*1370a723SSascha Wildner /**
70*1370a723SSascha Wildner   Reads data from the debugport.
71*1370a723SSascha Wildner 
72*1370a723SSascha Wildner   @param  This                  A pointer to the EFI_DEBUGPORT_PROTOCOL instance.
73*1370a723SSascha Wildner   @param  Timeout               The number of microseconds to wait before timing out a read operation.
74*1370a723SSascha Wildner   @param  BufferSize            On input, the requested number of bytes of data to read. On output, the
75*1370a723SSascha Wildner                                 number of bytes of data actually number of bytes
76*1370a723SSascha Wildner                                 of data read and returned in Buffer.
77*1370a723SSascha Wildner   @param  Buffer                A pointer to a buffer into which the data read will be saved.
78*1370a723SSascha Wildner 
79*1370a723SSascha Wildner   @retval EFI_SUCCESS           The data was read.
80*1370a723SSascha Wildner   @retval EFI_DEVICE_ERROR      The device reported an error.
81*1370a723SSascha Wildner   @retval EFI_TIMEOUT           The operation was stopped due to a timeout or overrun.
82*1370a723SSascha Wildner 
83*1370a723SSascha Wildner **/
84*1370a723SSascha Wildner typedef
85*1370a723SSascha Wildner EFI_STATUS
86*1370a723SSascha Wildner (EFIAPI *EFI_DEBUGPORT_READ)(
87*1370a723SSascha Wildner   IN EFI_DEBUGPORT_PROTOCOL               *This,
88*1370a723SSascha Wildner   IN UINT32                               Timeout,
89*1370a723SSascha Wildner   IN OUT UINTN                            *BufferSize,
90*1370a723SSascha Wildner   OUT VOID                                *Buffer
91*1370a723SSascha Wildner   );
92*1370a723SSascha Wildner 
93*1370a723SSascha Wildner /**
94*1370a723SSascha Wildner   Checks to see if any data is available to be read from the debugport device.
95*1370a723SSascha Wildner 
96*1370a723SSascha Wildner   @param  This                  A pointer to the EFI_DEBUGPORT_PROTOCOL instance.
97*1370a723SSascha Wildner 
98*1370a723SSascha Wildner   @retval EFI_SUCCESS           At least one byte of data is available to be read.
99*1370a723SSascha Wildner   @retval EFI_DEVICE_ERROR      The debugport device is not functioning correctly.
100*1370a723SSascha Wildner   @retval EFI_NOT_READY         No data is available to be read.
101*1370a723SSascha Wildner 
102*1370a723SSascha Wildner **/
103*1370a723SSascha Wildner typedef
104*1370a723SSascha Wildner EFI_STATUS
105*1370a723SSascha Wildner (EFIAPI *EFI_DEBUGPORT_POLL)(
106*1370a723SSascha Wildner   IN EFI_DEBUGPORT_PROTOCOL               *This
107*1370a723SSascha Wildner   );
108*1370a723SSascha Wildner 
109*1370a723SSascha Wildner ///
110*1370a723SSascha Wildner /// This protocol provides the communication link between the debug agent and the remote host.
111*1370a723SSascha Wildner ///
112*1370a723SSascha Wildner struct _EFI_DEBUGPORT_PROTOCOL {
113*1370a723SSascha Wildner   EFI_DEBUGPORT_RESET Reset;
114*1370a723SSascha Wildner   EFI_DEBUGPORT_WRITE Write;
115*1370a723SSascha Wildner   EFI_DEBUGPORT_READ  Read;
116*1370a723SSascha Wildner   EFI_DEBUGPORT_POLL  Poll;
117*1370a723SSascha Wildner };
118*1370a723SSascha Wildner 
119*1370a723SSascha Wildner //
120*1370a723SSascha Wildner // DEBUGPORT variable definitions...
121*1370a723SSascha Wildner //
122*1370a723SSascha Wildner #define EFI_DEBUGPORT_VARIABLE_NAME L"DEBUGPORT"
123*1370a723SSascha Wildner #define EFI_DEBUGPORT_VARIABLE_GUID EFI_DEBUGPORT_PROTOCOL_GUID
124*1370a723SSascha Wildner 
125*1370a723SSascha Wildner extern EFI_GUID  gEfiDebugPortVariableGuid;
126*1370a723SSascha Wildner 
127*1370a723SSascha Wildner //
128*1370a723SSascha Wildner // DebugPort device path definitions...
129*1370a723SSascha Wildner //
130*1370a723SSascha Wildner #define DEVICE_PATH_MESSAGING_DEBUGPORT EFI_DEBUGPORT_PROTOCOL_GUID
131*1370a723SSascha Wildner 
132*1370a723SSascha Wildner extern EFI_GUID  gEfiDebugPortDevicePathGuid;
133*1370a723SSascha Wildner 
134*1370a723SSascha Wildner typedef struct {
135*1370a723SSascha Wildner   EFI_DEVICE_PATH_PROTOCOL  Header;
136*1370a723SSascha Wildner   EFI_GUID                  Guid;
137*1370a723SSascha Wildner } DEBUGPORT_DEVICE_PATH;
138*1370a723SSascha Wildner 
139*1370a723SSascha Wildner #endif
140