/** @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 <Protocol/ArmScmiPerformanceProtocol.h> | |
// 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_ */ |