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