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 ();
 | |
| }
 |