REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the EmulatorPkg 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: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			135 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Emulator Thunk to abstract OS services from pure EFI code
 | 
						|
 | 
						|
  Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
 | 
						|
  Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved.<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include <Uefi.h>
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
 | 
						|
#include <Protocol/EmuIoThunk.h>
 | 
						|
 | 
						|
#define EMU_IO_THUNK_PROTOCOL_DATA_SIGNATURE  SIGNATURE_32('E','m','u','T')
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINTN                    Signature;
 | 
						|
  EMU_IO_THUNK_PROTOCOL    Data;
 | 
						|
  BOOLEAN                  EmuBusDriver;
 | 
						|
  LIST_ENTRY               Link;
 | 
						|
} EMU_IO_THUNK_PROTOCOL_DATA;
 | 
						|
 | 
						|
LIST_ENTRY  mThunkList = INITIALIZE_LIST_HEAD_VARIABLE (mThunkList);
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AddThunkProtocol (
 | 
						|
  IN  EMU_IO_THUNK_PROTOCOL  *ThunkIo,
 | 
						|
  IN  CHAR16                 *ConfigString,
 | 
						|
  IN  BOOLEAN                EmuBusDriver
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINTN                       Size;
 | 
						|
  CHAR16                      *StartString;
 | 
						|
  CHAR16                      *SubString;
 | 
						|
  UINTN                       Instance;
 | 
						|
  EMU_IO_THUNK_PROTOCOL_DATA  *Private;
 | 
						|
 | 
						|
  if (ThunkIo == NULL) {
 | 
						|
    return EFI_INVALID_PARAMETER;
 | 
						|
  }
 | 
						|
 | 
						|
  Instance    = 0;
 | 
						|
  Size        = StrSize (ConfigString);
 | 
						|
  StartString = AllocatePool (Size);
 | 
						|
  if (StartString == NULL) {
 | 
						|
    return EFI_OUT_OF_RESOURCES;
 | 
						|
  }
 | 
						|
 | 
						|
  StrCpyS (StartString, Size / sizeof (CHAR16), ConfigString);
 | 
						|
  while (*StartString != '\0') {
 | 
						|
    //
 | 
						|
    // Find the end of the sub string
 | 
						|
    //
 | 
						|
    SubString = StartString;
 | 
						|
    while (*SubString != '\0' && *SubString != '!') {
 | 
						|
      SubString++;
 | 
						|
    }
 | 
						|
 | 
						|
    if (*SubString == '!') {
 | 
						|
      //
 | 
						|
      // Replace token with '\0' to make sub strings. If this is the end
 | 
						|
      //  of the string SubString will already point to NULL.
 | 
						|
      //
 | 
						|
      *SubString = '\0';
 | 
						|
      SubString++;
 | 
						|
    }
 | 
						|
 | 
						|
    Private = AllocatePool (sizeof (EMU_IO_THUNK_PROTOCOL_DATA));
 | 
						|
    if (Private == NULL) {
 | 
						|
      return EFI_OUT_OF_RESOURCES;
 | 
						|
    }
 | 
						|
 | 
						|
    Private->Signature    = EMU_IO_THUNK_PROTOCOL_DATA_SIGNATURE;
 | 
						|
    Private->EmuBusDriver = EmuBusDriver;
 | 
						|
 | 
						|
    CopyMem (&Private->Data, ThunkIo, sizeof (EMU_IO_THUNK_PROTOCOL));
 | 
						|
    Private->Data.Instance     = (UINT16)Instance++;
 | 
						|
    Private->Data.ConfigString = StartString;
 | 
						|
 | 
						|
    InsertTailList (&mThunkList, &Private->Link);
 | 
						|
 | 
						|
    //
 | 
						|
    // Parse Next sub string. This will point to '\0' if we are at the end.
 | 
						|
    //
 | 
						|
    StartString = SubString;
 | 
						|
  }
 | 
						|
 | 
						|
  return EFI_SUCCESS;
 | 
						|
}
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
GetNextThunkProtocol (
 | 
						|
  IN  BOOLEAN                EmuBusDriver,
 | 
						|
  OUT EMU_IO_THUNK_PROTOCOL  **Instance  OPTIONAL
 | 
						|
  )
 | 
						|
{
 | 
						|
  LIST_ENTRY                  *Link;
 | 
						|
  EMU_IO_THUNK_PROTOCOL_DATA  *Private;
 | 
						|
 | 
						|
  if (mThunkList.ForwardLink == &mThunkList) {
 | 
						|
    // Skip parsing an empty list
 | 
						|
    return EFI_NOT_FOUND;
 | 
						|
  }
 | 
						|
 | 
						|
  for (Link = mThunkList.ForwardLink; Link != &mThunkList; Link = Link->ForwardLink) {
 | 
						|
    Private = CR (Link, EMU_IO_THUNK_PROTOCOL_DATA, Link, EMU_IO_THUNK_PROTOCOL_DATA_SIGNATURE);
 | 
						|
    if (EmuBusDriver & !Private->EmuBusDriver) {
 | 
						|
      continue;
 | 
						|
    } else if (*Instance == NULL) {
 | 
						|
      // Find 1st match in list
 | 
						|
      *Instance = &Private->Data;
 | 
						|
      return EFI_SUCCESS;
 | 
						|
    } else if (*Instance == &Private->Data) {
 | 
						|
      // Matched previous call so look for valid next entry
 | 
						|
      Link = Link->ForwardLink;
 | 
						|
      if (Link == &mThunkList) {
 | 
						|
        return EFI_NOT_FOUND;
 | 
						|
      }
 | 
						|
 | 
						|
      Private   = CR (Link, EMU_IO_THUNK_PROTOCOL_DATA, Link, EMU_IO_THUNK_PROTOCOL_DATA_SIGNATURE);
 | 
						|
      *Instance = &Private->Data;
 | 
						|
      return EFI_SUCCESS;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return EFI_NOT_FOUND;
 | 
						|
}
 |