REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the ArmPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Andrew Fish <afish@apple.com>
		
			
				
	
	
		
			134 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Serial I/O Port library functions with no library constructor/destructor
 | 
						|
 | 
						|
  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
 | 
						|
  Copyright (c) 2021, Arm Limited. All rights reserved.<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include <Uefi.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/SemihostLib.h>
 | 
						|
#include <Library/SerialPortLib.h>
 | 
						|
 | 
						|
/*
 | 
						|
 | 
						|
  Programmed hardware of Serial port.
 | 
						|
 | 
						|
  @return    Always return EFI_UNSUPPORTED.
 | 
						|
 | 
						|
**/
 | 
						|
RETURN_STATUS
 | 
						|
EFIAPI
 | 
						|
SerialPortInitialize (
 | 
						|
  VOID
 | 
						|
  )
 | 
						|
{
 | 
						|
  if (SemihostConnectionSupported ()) {
 | 
						|
    return RETURN_SUCCESS;
 | 
						|
  } else {
 | 
						|
    return RETURN_UNSUPPORTED;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Write data to serial device.
 | 
						|
 | 
						|
  @param  Buffer           Point of data buffer which need to be written.
 | 
						|
  @param  NumberOfBytes    Number of output bytes which are cached in Buffer.
 | 
						|
 | 
						|
  @retval 0                Write data failed.
 | 
						|
  @retval !0               Actual number of bytes written to serial device.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#define PRINT_BUFFER_SIZE       512
 | 
						|
#define PRINT_BUFFER_THRESHOLD  (PRINT_BUFFER_SIZE - 4)
 | 
						|
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
SerialPortWrite (
 | 
						|
  IN UINT8  *Buffer,
 | 
						|
  IN UINTN  NumberOfBytes
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT8  PrintBuffer[PRINT_BUFFER_SIZE];
 | 
						|
  UINTN  SourceIndex;
 | 
						|
  UINTN  DestinationIndex;
 | 
						|
  UINT8  CurrentCharacter;
 | 
						|
 | 
						|
  SourceIndex      = 0;
 | 
						|
  DestinationIndex = 0;
 | 
						|
 | 
						|
  while (SourceIndex < NumberOfBytes) {
 | 
						|
    CurrentCharacter = Buffer[SourceIndex++];
 | 
						|
 | 
						|
    switch (CurrentCharacter) {
 | 
						|
      case '\r':
 | 
						|
        continue;
 | 
						|
 | 
						|
      case '\n':
 | 
						|
        PrintBuffer[DestinationIndex++] = ' ';
 | 
						|
      // fall through
 | 
						|
 | 
						|
      default:
 | 
						|
        PrintBuffer[DestinationIndex++] = CurrentCharacter;
 | 
						|
        break;
 | 
						|
    }
 | 
						|
 | 
						|
    if (DestinationIndex > PRINT_BUFFER_THRESHOLD) {
 | 
						|
      PrintBuffer[DestinationIndex] = '\0';
 | 
						|
      SemihostWriteString ((CHAR8 *)PrintBuffer);
 | 
						|
 | 
						|
      DestinationIndex = 0;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (DestinationIndex > 0) {
 | 
						|
    PrintBuffer[DestinationIndex] = '\0';
 | 
						|
    SemihostWriteString ((CHAR8 *)PrintBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  return NumberOfBytes;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Read data from serial device and save the datas in buffer.
 | 
						|
 | 
						|
  @param  Buffer           Point of data buffer which need to be written.
 | 
						|
  @param  NumberOfBytes    Number of output bytes which are cached in Buffer.
 | 
						|
 | 
						|
  @retval 0                Read data failed.
 | 
						|
  @retval !0               Actual number of bytes read from serial device.
 | 
						|
 | 
						|
**/
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
SerialPortRead (
 | 
						|
  OUT UINT8  *Buffer,
 | 
						|
  IN  UINTN  NumberOfBytes
 | 
						|
  )
 | 
						|
{
 | 
						|
  *Buffer = SemihostReadCharacter ();
 | 
						|
  return 1;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Check to see if any data is available to be read from the debug device.
 | 
						|
 | 
						|
  @retval TRUE       At least one byte of data is available to be read
 | 
						|
  @retval FALSE      No data is available to be read
 | 
						|
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
SerialPortPoll (
 | 
						|
  VOID
 | 
						|
  )
 | 
						|
{
 | 
						|
  // Since SemiHosting read character is blocking always say we have a char ready?
 | 
						|
  return SemihostConnectionSupported ();
 | 
						|
}
 |