123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /** @file
- Debug Port Library implementation based on serial port.
- Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <Base.h>
- #include <Library/DebugCommunicationLib.h>
- #include <Library/SerialPortLib.h>
- #include <Library/DebugLib.h>
- /**
- Initialize the debug port.
- This function will initialize debug port to get it ready for data transmission. If
- certain Debug Communication Library instance has to save some private data in the
- stack, this function must work on the mode that doesn't return to the caller, then
- the caller needs to wrap up all rest of logic after DebugPortInitialize() into one
- function and pass it into DebugPortInitialize(). DebugPortInitialize() is
- responsible to invoke the passing-in function at the end of DebugPortInitialize().
- If the parameter Function is not NULL, Debug Communication Library instance will
- invoke it by passing in the Context to be the first parameter. Debug Communication
- Library instance could create one debug port handle to be the second parameter
- passing into the Function. Debug Communication Library instance also could pass
- NULL to be the second parameter if it doesn't create the debug port handle.
- If the parameter Function is NULL, and Context is not NULL. At this time, Context
- is the debug port handle created by the previous Debug Communication Library
- instance.
- a) If the instance can understand and continue use the private data of the previous
- instance, it could return the same handle as passed in (as Context parameter).
- b) If the instance does not understand, or does not want to continue use the
- private data of the previous instance, it could ignore the input Context parameter
- and create the new handle to be returned.
- If Function() is NULL and Context is NULL, Debug Communication Library could create a
- new handle and return it. NULL is also a valid handle to be returned.
- @param[in] Context Context needed by callback function; it was optional.
- @param[in] Function Continue function called by Debug Communication library;
- it was optional.
- @return The debug port handle created by Debug Communication Library if Function
- is not NULL.
- **/
- DEBUG_PORT_HANDLE
- EFIAPI
- DebugPortInitialize (
- IN VOID *Context,
- IN DEBUG_PORT_CONTINUE Function
- )
- {
- RETURN_STATUS Status;
- Status = SerialPortInitialize ();
- if (RETURN_ERROR (Status)) {
- DEBUG ((DEBUG_ERROR, "Debug Serial Port: Initialization failed!\n"));
- }
- if (Function != NULL) {
- Function (Context, NULL);
- }
- return NULL;
- }
- /**
- Read data from debug device and save the data in a buffer.
- Reads NumberOfBytes data bytes from a debug device into the buffer
- specified by Buffer. The number of bytes actually read is returned.
- If the return value is less than NumberOfBytes, then the rest operation failed.
- If NumberOfBytes is zero, then return 0.
- @param Handle Debug port handle.
- @param Buffer Pointer to the data buffer to store the data read from the debug device.
- @param NumberOfBytes Number of bytes which will be read.
- @param Timeout Timeout value for reading from debug device. It unit is Microsecond.
- @retval 0 Read data failed, no data is to be read.
- @retval >0 Actual number of bytes read from debug device.
- **/
- UINTN
- EFIAPI
- DebugPortReadBuffer (
- IN DEBUG_PORT_HANDLE Handle,
- IN UINT8 *Buffer,
- IN UINTN NumberOfBytes,
- IN UINTN Timeout
- )
- {
- if ((NumberOfBytes != 1) || (Buffer == NULL) || (Timeout != 0)) {
- return 0;
- }
- return SerialPortRead (Buffer, 1);
- }
- /**
- Write data from buffer to debug device.
- Writes NumberOfBytes data bytes from Buffer to the debug device.
- The number of bytes actually written to the debug device is returned.
- If the return value is less than NumberOfBytes, then the write operation failed.
- If NumberOfBytes is zero, then return 0.
- @param Handle Debug port handle.
- @param Buffer Pointer to the data buffer to be written.
- @param NumberOfBytes Number of bytes to written to the debug device.
- @retval 0 NumberOfBytes is 0.
- @retval >0 The number of bytes written to the debug device.
- If this value is less than NumberOfBytes, then the read operation failed.
- **/
- UINTN
- EFIAPI
- DebugPortWriteBuffer (
- IN DEBUG_PORT_HANDLE Handle,
- IN UINT8 *Buffer,
- IN UINTN NumberOfBytes
- )
- {
- return SerialPortWrite (Buffer, NumberOfBytes);
- }
- /**
- Polls a debug device to see if there is any data waiting to be read.
- Polls a debug device to see if there is any data waiting to be read.
- If there is data waiting to be read from the debug device, then TRUE is returned.
- If there is no data waiting to be read from the debug device, then FALSE is returned.
- @param Handle Debug port handle.
- @retval TRUE Data is waiting to be read from the debug device.
- @retval FALSE There is no data waiting to be read from the serial device.
- **/
- BOOLEAN
- EFIAPI
- DebugPortPollBuffer (
- IN DEBUG_PORT_HANDLE Handle
- )
- {
- return SerialPortPoll ();
- }
|