/** @file Copyright (c) 2017-2021, Arm Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent System Control and Management Interface V1.0 http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/ DEN0056A_System_Control_and_Management_Interface.pdf **/ #ifndef ARM_SCMI_PERFORMANCE_PROTOCOL_PRIVATE_H_ #define ARM_SCMI_PERFORMANCE_PROTOCOL_PRIVATE_H_ #include // Number of performance levels returned by a call to the SCP, Lvls Bits[11:0] #define NUM_PERF_LEVELS_MASK 0x0FFF #define NUM_PERF_LEVELS(Lvls) (Lvls & NUM_PERF_LEVELS_MASK) // Number of performance levels remaining after a call to the SCP, Lvls Bits[31:16] #define NUM_REMAIN_PERF_LEVELS_SHIFT 16 #define NUM_REMAIN_PERF_LEVELS(Lvls) (Lvls >> NUM_REMAIN_PERF_LEVELS_SHIFT) /** Return values for ScmiMessageIdPerformanceDescribeLevels command. SCMI Spec section 4.5.2.5 **/ typedef struct { UINT32 NumLevels; // NOTE: Since EDK2 does not allow flexible array member [] we declare // here array of 1 element length. However below is used as a variable // length array. SCMI_PERFORMANCE_LEVEL PerfLevel[1]; // Offset to array of performance levels } PERF_DESCRIBE_LEVELS; /** Initialize performance management protocol and install on a given Handle. @param[in] Handle Handle to install performance management protocol. @retval EFI_SUCCESS Performance protocol installed successfully. **/ EFI_STATUS ScmiPerformanceProtocolInit ( IN EFI_HANDLE *Handle ); #endif /* ARM_SCMI_PERFORMANCE_PROTOCOL_PRIVATE_H_ */