]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Drivers/ArmScmiDxe/ArmScmiClockProtocolPrivate.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / ArmPkg / Drivers / ArmScmiDxe / ArmScmiClockProtocolPrivate.h
CommitLineData
4f2494cf
GP
1/** @file\r
2\r
3 Copyright (c) 2017-2018, Arm Limited. All rights reserved.\r
4\r
4059386c 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
4f2494cf
GP
6\r
7 System Control and Management Interface V1.0\r
8 http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/\r
9 DEN0056A_System_Control_and_Management_Interface.pdf\r
10**/\r
11\r
12#ifndef ARM_SCMI_CLOCK_PROTOCOL_PRIVATE_H_\r
13#define ARM_SCMI_CLOCK_PROTOCOL_PRIVATE_H_\r
14\r
15#pragma pack(1)\r
16\r
17// Clock rate in two 32bit words.\r
18typedef struct {\r
429309e0
MK
19 UINT32 Low;\r
20 UINT32 High;\r
4f2494cf
GP
21} CLOCK_RATE_DWORD;\r
22\r
23// Format of the returned rate array. Linear or Non-linear,.RatesFlag Bit[12]\r
429309e0
MK
24#define RATE_FORMAT_SHIFT 12\r
25#define RATE_FORMAT_MASK 0x0001\r
26#define RATE_FORMAT(RatesFlags) ((RatesFlags >> RATE_FORMAT_SHIFT) \\r
4f2494cf
GP
27 & RATE_FORMAT_MASK)\r
28\r
29// Number of remaining rates after a call to the SCP, RatesFlag Bits[31:16]\r
429309e0 30#define NUM_REMAIN_RATES_SHIFT 16\r
4f2494cf
GP
31#define NUM_REMAIN_RATES(RatesFlags) ((RatesFlags >> NUM_REMAIN_RATES_SHIFT))\r
32\r
33// Number of rates that are returned by a call.to the SCP, RatesFlag Bits[11:0]\r
429309e0
MK
34#define NUM_RATES_MASK 0x0FFF\r
35#define NUM_RATES(RatesFlags) (RatesFlags & NUM_RATES_MASK)\r
4f2494cf
GP
36\r
37// Return values for the CLOCK_DESCRIBER_RATE command.\r
38typedef struct {\r
429309e0 39 UINT32 NumRatesFlags;\r
4f2494cf
GP
40\r
41 // NOTE: Since EDK2 does not allow flexible array member [] we declare\r
42 // here array of 1 element length. However below is used as a variable\r
43 // length array.\r
429309e0 44 CLOCK_RATE_DWORD Rates[1];\r
4f2494cf
GP
45} CLOCK_DESCRIBE_RATES;\r
46\r
429309e0 47#define CLOCK_SET_DEFAULT_FLAGS 0\r
4f2494cf
GP
48\r
49// Message parameters for CLOCK_RATE_SET command.\r
50typedef struct {\r
429309e0
MK
51 UINT32 Flags;\r
52 UINT32 ClockId;\r
53 CLOCK_RATE_DWORD Rate;\r
4f2494cf
GP
54} CLOCK_RATE_SET_ATTRIBUTES;\r
55\r
559a07d8
JB
56// Message parameters for CLOCK_CONFIG_SET command.\r
57typedef struct {\r
429309e0
MK
58 UINT32 ClockId;\r
59 UINT32 Attributes;\r
559a07d8
JB
60} CLOCK_CONFIG_SET_ATTRIBUTES;\r
61\r
4f2494cf 62// if ClockAttr Bit[0] is set then clock device is enabled.\r
429309e0 63#define CLOCK_ENABLE_MASK 0x1\r
4f2494cf
GP
64#define CLOCK_ENABLED(ClockAttr) ((ClockAttr & CLOCK_ENABLE_MASK) == 1)\r
65\r
66typedef struct {\r
429309e0
MK
67 UINT32 Attributes;\r
68 UINT8 ClockName[SCMI_MAX_STR_LEN];\r
4f2494cf
GP
69} CLOCK_ATTRIBUTES;\r
70\r
71#pragma pack()\r
72\r
73/** Initialize clock management protocol and install protocol on a given handle.\r
74\r
75 @param[in] Handle Handle to install clock management protocol.\r
76\r
77 @retval EFI_SUCCESS Clock protocol interface installed successfully.\r
78**/\r
79EFI_STATUS\r
80ScmiClockProtocolInit (\r
429309e0 81 IN EFI_HANDLE *Handle\r
4f2494cf
GP
82 );\r
83\r
84#endif /* ARM_SCMI_CLOCK_PROTOCOL_PRIVATE_H_ */\r