| /** @file | |
| Copyright (c) 2017-2018, 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_CLOCK_PROTOCOL_PRIVATE_H_ | |
| #define ARM_SCMI_CLOCK_PROTOCOL_PRIVATE_H_ | |
| #pragma pack(1) | |
| // Clock rate in two 32bit words. | |
| typedef struct { | |
| UINT32 Low; | |
| UINT32 High; | |
| } CLOCK_RATE_DWORD; | |
| // Format of the returned rate array. Linear or Non-linear,.RatesFlag Bit[12] | |
| #define RATE_FORMAT_SHIFT 12 | |
| #define RATE_FORMAT_MASK 0x0001 | |
| #define RATE_FORMAT(RatesFlags) ((RatesFlags >> RATE_FORMAT_SHIFT) \ | |
| & RATE_FORMAT_MASK) | |
| // Number of remaining rates after a call to the SCP, RatesFlag Bits[31:16] | |
| #define NUM_REMAIN_RATES_SHIFT 16 | |
| #define NUM_REMAIN_RATES(RatesFlags) ((RatesFlags >> NUM_REMAIN_RATES_SHIFT)) | |
| // Number of rates that are returned by a call.to the SCP, RatesFlag Bits[11:0] | |
| #define NUM_RATES_MASK 0x0FFF | |
| #define NUM_RATES(RatesFlags) (RatesFlags & NUM_RATES_MASK) | |
| // Return values for the CLOCK_DESCRIBER_RATE command. | |
| typedef struct { | |
| UINT32 NumRatesFlags; | |
| // 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. | |
| CLOCK_RATE_DWORD Rates[1]; | |
| } CLOCK_DESCRIBE_RATES; | |
| #define CLOCK_SET_DEFAULT_FLAGS 0 | |
| // Message parameters for CLOCK_RATE_SET command. | |
| typedef struct { | |
| UINT32 Flags; | |
| UINT32 ClockId; | |
| CLOCK_RATE_DWORD Rate; | |
| } CLOCK_RATE_SET_ATTRIBUTES; | |
| // Message parameters for CLOCK_CONFIG_SET command. | |
| typedef struct { | |
| UINT32 ClockId; | |
| UINT32 Attributes; | |
| } CLOCK_CONFIG_SET_ATTRIBUTES; | |
| // if ClockAttr Bit[0] is set then clock device is enabled. | |
| #define CLOCK_ENABLE_MASK 0x1 | |
| #define CLOCK_ENABLED(ClockAttr) ((ClockAttr & CLOCK_ENABLE_MASK) == 1) | |
| typedef struct { | |
| UINT32 Attributes; | |
| UINT8 ClockName[SCMI_MAX_STR_LEN]; | |
| } CLOCK_ATTRIBUTES; | |
| #pragma pack() | |
| /** Initialize clock management protocol and install protocol on a given handle. | |
| @param[in] Handle Handle to install clock management protocol. | |
| @retval EFI_SUCCESS Clock protocol interface installed successfully. | |
| **/ | |
| EFI_STATUS | |
| ScmiClockProtocolInit ( | |
| IN EFI_HANDLE *Handle | |
| ); | |
| #endif /* ARM_SCMI_CLOCK_PROTOCOL_PRIVATE_H_ */ |