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>
		
			
				
	
	
		
			153 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
|   Copyright (c) 2017-2021, Arm Limited. All rights reserved.<BR>
 | |
| 
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
|   @par Specification Reference:
 | |
|   - Arm System Control and Management Interface - Platform Design Document
 | |
|     (https://developer.arm.com/documentation/den0056/)
 | |
| **/
 | |
| 
 | |
| #include <Base.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/MemoryAllocationLib.h>
 | |
| #include <Library/UefiBootServicesTableLib.h>
 | |
| #include <Protocol/ArmScmiBaseProtocol.h>
 | |
| #include <Protocol/ArmScmiClockProtocol.h>
 | |
| #include <Protocol/ArmScmiPerformanceProtocol.h>
 | |
| 
 | |
| #include "ArmScmiBaseProtocolPrivate.h"
 | |
| #include "ArmScmiClockProtocolPrivate.h"
 | |
| #include "ArmScmiPerformanceProtocolPrivate.h"
 | |
| #include "ScmiDxe.h"
 | |
| #include "ScmiPrivate.h"
 | |
| 
 | |
| STATIC CONST SCMI_PROTOCOL_ENTRY  Protocols[] = {
 | |
|   { ScmiProtocolIdBase,        ScmiBaseProtocolInit        },
 | |
|   { ScmiProtocolIdPerformance, ScmiPerformanceProtocolInit },
 | |
|   { ScmiProtocolIdClock,       ScmiClockProtocolInit       }
 | |
| };
 | |
| 
 | |
| /** ARM SCMI driver entry point function.
 | |
| 
 | |
|   This function installs the SCMI Base protocol and a list of other
 | |
|   protocols is queried using the Base protocol. If protocol is supported,
 | |
|   driver will call each protocol init function to install the protocol on
 | |
|   the ImageHandle.
 | |
| 
 | |
|   @param[in] ImageHandle     Handle to this EFI Image which will be used to
 | |
|                              install Base, Clock and Performance protocols.
 | |
|   @param[in] SystemTable     A pointer to boot time system table.
 | |
| 
 | |
|   @retval EFI_SUCCESS       Driver initalized successfully.
 | |
|   @retval EFI_UNSUPPORTED   If SCMI base protocol version is not supported.
 | |
|   @retval !(EFI_SUCCESS)    Other errors.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ArmScmiDxeEntryPoint (
 | |
|   IN EFI_HANDLE        ImageHandle,
 | |
|   IN EFI_SYSTEM_TABLE  *SystemTable
 | |
|   )
 | |
| {
 | |
|   EFI_STATUS          Status;
 | |
|   SCMI_BASE_PROTOCOL  *BaseProtocol;
 | |
|   UINT32              Version;
 | |
|   UINT32              Index;
 | |
|   UINT32              NumProtocols;
 | |
|   UINT32              ProtocolIndex;
 | |
|   UINT8               *SupportedList;
 | |
|   UINT32              SupportedListSize;
 | |
| 
 | |
|   // Every SCMI implementation must implement the base protocol.
 | |
|   ASSERT (Protocols[0].Id == ScmiProtocolIdBase);
 | |
| 
 | |
|   Status = ScmiBaseProtocolInit (&ImageHandle);
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     ASSERT (FALSE);
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   Status = gBS->LocateProtocol (
 | |
|                   &gArmScmiBaseProtocolGuid,
 | |
|                   NULL,
 | |
|                   (VOID **)&BaseProtocol
 | |
|                   );
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     ASSERT (FALSE);
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   // Get SCMI Base protocol version.
 | |
|   Status = BaseProtocol->GetVersion (BaseProtocol, &Version);
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     ASSERT (FALSE);
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   // Accept any version between SCMI v1.0 and SCMI v2.0
 | |
|   if ((Version < BASE_PROTOCOL_VERSION_V1) ||
 | |
|       (Version > BASE_PROTOCOL_VERSION_V2))
 | |
|   {
 | |
|     ASSERT (FALSE);
 | |
|     return EFI_UNSUPPORTED;
 | |
|   }
 | |
| 
 | |
|   // Apart from Base protocol, SCMI may implement various other protocols,
 | |
|   // query total protocols implemented by the SCP firmware.
 | |
|   NumProtocols = 0;
 | |
|   Status       = BaseProtocol->GetTotalProtocols (BaseProtocol, &NumProtocols);
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     ASSERT (FALSE);
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   ASSERT (NumProtocols != 0);
 | |
| 
 | |
|   SupportedListSize = (NumProtocols * sizeof (*SupportedList));
 | |
| 
 | |
|   Status = gBS->AllocatePool (
 | |
|                   EfiBootServicesData,
 | |
|                   SupportedListSize,
 | |
|                   (VOID **)&SupportedList
 | |
|                   );
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     ASSERT (FALSE);
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   // Get the list of protocols supported by SCP firmware on the platform.
 | |
|   Status = BaseProtocol->DiscoverListProtocols (
 | |
|                            BaseProtocol,
 | |
|                            &SupportedListSize,
 | |
|                            SupportedList
 | |
|                            );
 | |
|   if (EFI_ERROR (Status)) {
 | |
|     gBS->FreePool (SupportedList);
 | |
|     ASSERT (FALSE);
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   // Install supported protocol on ImageHandle.
 | |
|   for (ProtocolIndex = 1; ProtocolIndex < ARRAY_SIZE (Protocols);
 | |
|        ProtocolIndex++)
 | |
|   {
 | |
|     for (Index = 0; Index < NumProtocols; Index++) {
 | |
|       if (Protocols[ProtocolIndex].Id == SupportedList[Index]) {
 | |
|         Status = Protocols[ProtocolIndex].InitFn (&ImageHandle);
 | |
|         if (EFI_ERROR (Status)) {
 | |
|           ASSERT_EFI_ERROR (Status);
 | |
|           return Status;
 | |
|         }
 | |
| 
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   gBS->FreePool (SupportedList);
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 |