2 Basic serial IO abstaction for GDB
4 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 #include <Library/GdbSerialLib.h>
18 #include <Library/PcdLib.h>
19 #include <Library/IoLib.h>
20 #include <Library/DebugLib.h>
21 #include <Library/UefiBootServicesTableLib.h>
23 #include <Protocol/DebugPort.h>
26 EFI_DEBUGPORT_PROTOCOL
*gDebugPort
= NULL
;
30 The constructor function initializes the UART.
32 @param ImageHandle The firmware allocated handle for the EFI image.
33 @param SystemTable A pointer to the EFI System Table.
35 @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
40 GdbSerialLibDebugPortConstructor (
41 IN EFI_HANDLE ImageHandle
,
42 IN EFI_SYSTEM_TABLE
*SystemTable
47 Status
= gBS
->LocateProtocol (&gEfiDebugPortProtocolGuid
, NULL
, (VOID
**)&gDebugPort
);
48 if (!EFI_ERROR (Status
)) {
49 gTimeOut
= PcdGet32 (PcdGdbMaxPacketRetryCount
);
50 gDebugPort
->Reset (gDebugPort
);
59 Sets the baud rate, receive FIFO depth, transmit/receice time out, parity,
60 data buts, and stop bits on a serial device. This call is optional as the serial
61 port will be set up with defaults base on PCD values.
63 @param BaudRate The requested baud rate. A BaudRate value of 0 will use the the
64 device's default interface speed.
65 @param Parity The type of parity to use on this serial device. A Parity value of
66 DefaultParity will use the device's default parity value.
67 @param DataBits The number of data bits to use on the serial device. A DataBits
68 vaule of 0 will use the device's default data bit setting.
69 @param StopBits The number of stop bits to use on this serial device. A StopBits
70 value of DefaultStopBits will use the device's default number of
73 @retval EFI_SUCCESS The device was configured.
74 @retval EFI_DEVICE_ERROR The serial device could not be coonfigured.
88 Status
= gDebugPort
->Reset (gDebugPort
);
94 Check to see if a character is available from GDB. Do not read the character as that is
95 done via GdbGetChar().
97 @return TRUE - Character availible
98 @return FALSE - Character not availible
109 Status
= gDebugPort
->Poll (gDebugPort
);
111 return (Status
== EFI_SUCCESS
? TRUE
: FALSE
);
116 Get a character from GDB. This function must be able to run in interrupt context.
118 @return A character from GDB
132 BufferSize
= sizeof (Char
);
133 Status
= gDebugPort
->Read (gDebugPort
, gTimeOut
, &BufferSize
, &Char
);
134 } while (EFI_ERROR (Status
) || BufferSize
!= sizeof (Char
));
141 Send a character to GDB. This function must be able to run in interrupt context.
144 @param Char Send a character to GDB
158 BufferSize
= sizeof (Char
);
159 Status
= gDebugPort
->Write (gDebugPort
, gTimeOut
, &BufferSize
, &Char
);
160 } while (EFI_ERROR (Status
) || BufferSize
!= sizeof (Char
));
166 Send an ASCII string to GDB. This function must be able to run in interrupt context.
169 @param String Send a string to GDB
178 // We could performance enhance this function by calling gDebugPort->Write ()
179 while (*String
!= '\0') {
180 GdbPutChar (*String
);