VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/ArmPkg/Include/Protocol/ArmScmiClockProtocol.h@ 107675

最後變更 在這個檔案從107675是 99464,由 vboxsync 提交於 2 年 前

Devices/EFI/Firmware: Restore ArmPkg, ArmVirtPkg, ArmPlatformPkg in order to be able to build Aarch64 and Aarch32 firmware images for the virt platform, bugref:10400

  • 屬性 svn:eol-style 設為 native
檔案大小: 6.7 KB
 
1/** @file
2
3 Copyright (c) 2017-2021, Arm Limited. All rights reserved.
4
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 System Control and Management Interface V1.0
8 http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/
9 DEN0056A_System_Control_and_Management_Interface.pdf
10**/
11
12#ifndef ARM_SCMI_CLOCK_PROTOCOL_H_
13#define ARM_SCMI_CLOCK_PROTOCOL_H_
14
15#include <Protocol/ArmScmi.h>
16
17#define ARM_SCMI_CLOCK_PROTOCOL_GUID {\
18 0x91ce67a8, 0xe0aa, 0x4012, {0xb9, 0x9f, 0xb6, 0xfc, 0xf3, 0x4, 0x8e, 0xaa} \
19 }
20
21extern EFI_GUID gArmScmiClockProtocolGuid;
22
23// Message Type for clock management protocol.
24typedef enum {
25 ScmiMessageIdClockAttributes = 0x3,
26 ScmiMessageIdClockDescribeRates = 0x4,
27 ScmiMessageIdClockRateSet = 0x5,
28 ScmiMessageIdClockRateGet = 0x6,
29 ScmiMessageIdClockConfigSet = 0x7
30} SCMI_MESSAGE_ID_CLOCK;
31
32typedef enum {
33 ScmiClockRateFormatDiscrete, // Non-linear range.
34 ScmiClockRateFormatLinear // Linear range.
35} SCMI_CLOCK_RATE_FORMAT;
36
37// Clock management protocol version.
38#define SCMI_CLOCK_PROTOCOL_VERSION 0x10000
39
40#define SCMI_CLOCK_PROTOCOL_PENDING_ASYNC_RATES_MASK 0xFFU
41#define SCMI_CLOCK_PROTOCOL_PENDING_ASYNC_RATES_SHIFT 16
42#define SCMI_CLOCK_PROTOCOL_NUM_CLOCKS_MASK 0xFFFFU
43
44/** Total number of pending asynchronous clock rates changes
45 supported by the SCP, Attr Bits[23:16]
46*/
47#define SCMI_CLOCK_PROTOCOL_MAX_ASYNC_CLK_RATES(Attr) ( \
48 (Attr >> SCMI_CLOCK_PROTOCOL_PENDING_ASYNC_RATES_SHIFT) && \
49 SCMI_CLOCK_PROTOCOL_PENDING_ASYNC_RATES_MASK)
50
51// Total of clock devices supported by the SCP, Attr Bits[15:0]
52#define SCMI_CLOCK_PROTOCOL_TOTAL_CLKS(Attr) (Attr & SCMI_CLOCK_PROTOCOL_NUM_CLOCKS_MASK)
53
54#pragma pack(1)
55
56/* Depending on the format (linear/non-linear) supported by a clock device
57 either Rate or Min/Max/Step triplet is valid.
58*/
59typedef struct {
60 UINT64 Min;
61 UINT64 Max;
62 UINT64 Step;
63} SCMI_CLOCK_RATE_CONTINUOUS;
64
65typedef struct {
66 UINT64 Rate;
67} SCMI_CLOCK_RATE_DISCRETE;
68
69typedef union {
70 SCMI_CLOCK_RATE_CONTINUOUS ContinuousRate;
71 SCMI_CLOCK_RATE_DISCRETE DiscreteRate;
72} SCMI_CLOCK_RATE;
73
74#pragma pack()
75
76typedef struct _SCMI_CLOCK_PROTOCOL SCMI_CLOCK_PROTOCOL;
77
78// Protocol Interface functions.
79
80/** Return version of the clock management protocol supported by SCP firmware.
81
82 @param[in] This A Pointer to SCMI_CLOCK_PROTOCOL Instance.
83
84 @param[out] Version Version of the supported SCMI Clock management protocol.
85
86 @retval EFI_SUCCESS The version is returned.
87 @retval EFI_DEVICE_ERROR SCP returns an SCMI error.
88 @retval !(EFI_SUCCESS) Other errors.
89**/
90typedef
91EFI_STATUS
92(EFIAPI *SCMI_CLOCK_GET_VERSION)(
93 IN SCMI_CLOCK_PROTOCOL *This,
94 OUT UINT32 *Version
95 );
96
97/** Return total number of clock devices supported by the clock management
98 protocol.
99
100 @param[in] This A Pointer to SCMI_CLOCK_PROTOCOL Instance.
101
102 @param[out] TotalClocks Total number of clocks supported.
103
104 @retval EFI_SUCCESS Total number of clocks supported is returned.
105 @retval EFI_DEVICE_ERROR SCP returns an SCMI error.
106 @retval !(EFI_SUCCESS) Other errors.
107**/
108typedef
109EFI_STATUS
110(EFIAPI *SCMI_CLOCK_GET_TOTAL_CLOCKS)(
111 IN SCMI_CLOCK_PROTOCOL *This,
112 OUT UINT32 *TotalClocks
113 );
114
115/** Return attributes of a clock device.
116
117 @param[in] This A Pointer to SCMI_CLOCK_PROTOCOL Instance.
118 @param[in] ClockId Identifier for the clock device.
119
120 @param[out] Enabled If TRUE, the clock device is enabled.
121 @param[out] ClockAsciiName A NULL terminated ASCII string with the clock
122 name, of up to 16 bytes.
123
124 @retval EFI_SUCCESS Clock device attributes are returned.
125 @retval EFI_DEVICE_ERROR SCP returns an SCMI error.
126 @retval !(EFI_SUCCESS) Other errors.
127**/
128typedef
129EFI_STATUS
130(EFIAPI *SCMI_CLOCK_GET_CLOCK_ATTRIBUTES)(
131 IN SCMI_CLOCK_PROTOCOL *This,
132 IN UINT32 ClockId,
133 OUT BOOLEAN *Enabled,
134 OUT CHAR8 *ClockAsciiName
135 );
136
137/** Return list of rates supported by a given clock device.
138
139 @param[in] This A pointer to SCMI_CLOCK_PROTOCOL Instance.
140 @param[in] ClockId Identifier for the clock device.
141
142 @param[out] Format ScmiClockRateFormatDiscrete: Clock device
143 supports range of clock rates which are non-linear.
144
145 ScmiClockRateFormatLinear: Clock device supports
146 range of linear clock rates from Min to Max in steps.
147
148 @param[out] TotalRates Total number of rates.
149
150 @param[in,out] RateArraySize Size of the RateArray.
151
152 @param[out] RateArray List of clock rates.
153
154 @retval EFI_SUCCESS List of clock rates are returned.
155 @retval EFI_DEVICE_ERROR SCP returns an SCMI error.
156 @retval EFI_BUFFER_TOO_SMALL RateArraySize is too small for the result.
157 It has been updated to the size needed.
158 @retval !(EFI_SUCCESS) Other errors.
159**/
160typedef
161EFI_STATUS
162(EFIAPI *SCMI_CLOCK_DESCRIBE_RATES)(
163 IN SCMI_CLOCK_PROTOCOL *This,
164 IN UINT32 ClockId,
165 OUT SCMI_CLOCK_RATE_FORMAT *Format,
166 OUT UINT32 *TotalRates,
167 IN OUT UINT32 *RateArraySize,
168 OUT SCMI_CLOCK_RATE *RateArray
169 );
170
171/** Get clock rate.
172
173 @param[in] This A Pointer to SCMI_CLOCK_PROTOCOL Instance.
174 @param[in] ClockId Identifier for the clock device.
175
176 @param[out] Rate Clock rate.
177
178 @retval EFI_SUCCESS Clock rate is returned.
179 @retval EFI_DEVICE_ERROR SCP returns an SCMI error.
180 @retval !(EFI_SUCCESS) Other errors.
181**/
182typedef
183EFI_STATUS
184(EFIAPI *SCMI_CLOCK_RATE_GET)(
185 IN SCMI_CLOCK_PROTOCOL *This,
186 IN UINT32 ClockId,
187 OUT UINT64 *Rate
188 );
189
190/** Set clock rate.
191
192 @param[in] This A Pointer to SCMI_CLOCK_PROTOCOL Instance.
193 @param[in] ClockId Identifier for the clock device.
194 @param[in] Rate Clock rate.
195
196 @retval EFI_SUCCESS Clock rate set success.
197 @retval EFI_DEVICE_ERROR SCP returns an SCMI error.
198 @retval !(EFI_SUCCESS) Other errors.
199**/
200typedef
201EFI_STATUS
202(EFIAPI *SCMI_CLOCK_RATE_SET)(
203 IN SCMI_CLOCK_PROTOCOL *This,
204 IN UINT32 ClockId,
205 IN UINT64 Rate
206 );
207
208typedef struct _SCMI_CLOCK_PROTOCOL {
209 SCMI_CLOCK_GET_VERSION GetVersion;
210 SCMI_CLOCK_GET_TOTAL_CLOCKS GetTotalClocks;
211 SCMI_CLOCK_GET_CLOCK_ATTRIBUTES GetClockAttributes;
212 SCMI_CLOCK_DESCRIBE_RATES DescribeRates;
213 SCMI_CLOCK_RATE_GET RateGet;
214 SCMI_CLOCK_RATE_SET RateSet;
215} SCMI_CLOCK_PROTOCOL;
216
217#endif /* ARM_SCMI_CLOCK_PROTOCOL_H_ */
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette