XCORE SDK
XCORE Software Development Kit
rtos_clock_control.h
1 // Copyright 2022 XMOS LIMITED.
2 // This Software is subject to the terms of the XMOS Public Licence: Version 1.
3 
4 #ifndef RTOS_CLOCK_CONTROL_H_
5 #define RTOS_CLOCK_CONTROL_H_
6 
14 #include "xcore_clock_control.h"
15 
16 #include "rtos_osal.h"
17 #include "rtos_driver_rpc.h"
18 #include "mrsw_lock.h"
19 
24 
31  rtos_driver_rpc_t *rpc_config;
32 
33  __attribute__((fptrgroup("rtos_clock_control_set_ref_clk_div_fptr_grp")))
34  void (*set_ref_clk_div)(rtos_clock_control_t *, unsigned);
35 
36  __attribute__((fptrgroup("rtos_clock_control_set_processor_clk_div_fptr_grp")))
37  void (*set_processor_clk_div)(rtos_clock_control_t *, unsigned);
38 
39  __attribute__((fptrgroup("rtos_clock_control_set_switch_clk_div_fptr_grp")))
40  void (*set_switch_clk_div)(rtos_clock_control_t *, unsigned);
41 
42  __attribute__((fptrgroup("rtos_clock_control_get_ref_clk_div_fptr_grp")))
43  unsigned (*get_ref_clk_div)(rtos_clock_control_t *);
44 
45  __attribute__((fptrgroup("rtos_clock_control_get_processor_clk_div_fptr_grp")))
46  unsigned (*get_processor_clk_div)(rtos_clock_control_t *);
47 
48  __attribute__((fptrgroup("rtos_clock_control_get_switch_clk_div_fptr_grp")))
49  unsigned (*get_switch_clk_div)(rtos_clock_control_t *);
50 
51  __attribute__((fptrgroup("rtos_clock_control_get_processor_clock_fptr_grp")))
52  unsigned (*get_processor_clock)(rtos_clock_control_t *);
53 
54  __attribute__((fptrgroup("rtos_clock_control_get_ref_clock_fptr_grp")))
55  unsigned (*get_ref_clock)(rtos_clock_control_t *);
56 
57  __attribute__((fptrgroup("rtos_clock_control_get_switch_clock_fptr_grp")))
58  unsigned (*get_switch_clock)(rtos_clock_control_t *);
59 
60  __attribute__((fptrgroup("rtos_clock_control_set_node_pll_ratio_fptr_grp")))
61  void (*set_node_pll_ratio)(rtos_clock_control_t *, unsigned, unsigned, unsigned);
62 
63  __attribute__((fptrgroup("rtos_clock_control_get_node_pll_ratio_fptr_grp")))
64  void (*get_node_pll_ratio)(rtos_clock_control_t *, unsigned *, unsigned *, unsigned *);
65 
66  __attribute__((fptrgroup("rtos_clock_control_scale_links_fptr_grp")))
67  void (*scale_links)(rtos_clock_control_t *, unsigned, unsigned, unsigned, unsigned);
68 
69  __attribute__((fptrgroup("rtos_clock_control_reset_links_fptr_grp")))
70  void (*reset_links)(rtos_clock_control_t *, unsigned, unsigned);
71 
72  __attribute__((fptrgroup("rtos_clock_control_get_local_lock_fptr_grp")))
73  void (*get_local_lock)(rtos_clock_control_t *);
74 
75  __attribute__((fptrgroup("rtos_clock_control_release_local_lock_fptr_grp")))
76  void (*release_local_lock)(rtos_clock_control_t *);
77 
83  mrsw_lock_t local_lock;
84  rtos_osal_mutex_t lock; /* Only used by RPC client */
85 };
86 
87 #include "rtos_clock_control_rpc.h"
88 
107  unsigned divider)
108 {
109  ctx->set_ref_clk_div(ctx, divider);
110 }
111 
120 {
121  return ctx->get_ref_clk_div(ctx);
122 }
123 
133  unsigned divider)
134 {
135  ctx->set_processor_clk_div(ctx, divider);
136 }
137 
146 {
147  return ctx->get_processor_clk_div(ctx);
148 }
149 
159  unsigned divider)
160 {
161  ctx->set_switch_clk_div(ctx, divider);
162 }
163 
172 {
173  return ctx->get_switch_clk_div(ctx);
174 }
175 
184 {
185  return ctx->get_ref_clock(ctx);
186 }
187 
196 {
197  return ctx->get_processor_clock(ctx);
198 }
199 
208 {
209  return ctx->get_switch_clock(ctx);
210 }
211 
224  unsigned start_addr,
225  unsigned end_addr,
226  unsigned delay_intra,
227  unsigned delay_inter)
228 {
229  ctx->scale_links(ctx, start_addr, end_addr, delay_intra, delay_inter);
230 }
231 
242  unsigned start_addr,
243  unsigned end_addr)
244 {
245  ctx->reset_links(ctx, start_addr, end_addr);
246 }
247 
273  unsigned pre_div,
274  unsigned mul,
275  unsigned post_div)
276 {
277  ctx->set_node_pll_ratio(ctx, pre_div, mul, post_div);
278 }
279 
292  unsigned *pre_div,
293  unsigned *mul,
294  unsigned *post_div)
295 {
296  ctx->get_node_pll_ratio(ctx, pre_div, mul, post_div);
297 }
298 
308 {
309  ctx->get_local_lock(ctx);
310 }
311 
320 {
321  ctx->release_local_lock(ctx);
322 }
323 
338  rtos_clock_control_t *ctx);
339 
350  rtos_clock_control_t *ctx);
351 
354 #endif /* RTOS_CLOCK_CONTROL_H_ */
unsigned rtos_clock_control_get_processor_clk_div(rtos_clock_control_t *ctx)
Definition: rtos_clock_control.h:144
void rtos_clock_control_reset_links(rtos_clock_control_t *ctx, unsigned start_addr, unsigned end_addr)
Definition: rtos_clock_control.h:240
void rtos_clock_control_get_node_pll_ratio(rtos_clock_control_t *ctx, unsigned *pre_div, unsigned *mul, unsigned *post_div)
Definition: rtos_clock_control.h:290
void rtos_clock_control_release_local_lock(rtos_clock_control_t *ctx)
Definition: rtos_clock_control.h:318
unsigned rtos_clock_control_get_ref_clk_div(rtos_clock_control_t *ctx)
Definition: rtos_clock_control.h:118
unsigned rtos_clock_control_get_processor_clock(rtos_clock_control_t *ctx)
Definition: rtos_clock_control.h:194
void rtos_clock_control_get_local_lock(rtos_clock_control_t *ctx)
Definition: rtos_clock_control.h:306
void rtos_clock_control_set_processor_clk_div(rtos_clock_control_t *ctx, unsigned divider)
Definition: rtos_clock_control.h:131
void rtos_clock_control_scale_links(rtos_clock_control_t *ctx, unsigned start_addr, unsigned end_addr, unsigned delay_intra, unsigned delay_inter)
Definition: rtos_clock_control.h:222
unsigned rtos_clock_control_get_switch_clock(rtos_clock_control_t *ctx)
Definition: rtos_clock_control.h:206
void rtos_clock_control_set_ref_clk_div(rtos_clock_control_t *ctx, unsigned divider)
Definition: rtos_clock_control.h:105
void rtos_clock_control_set_node_pll_ratio(rtos_clock_control_t *ctx, unsigned pre_div, unsigned mul, unsigned post_div)
Definition: rtos_clock_control.h:271
void rtos_clock_control_set_switch_clk_div(rtos_clock_control_t *ctx, unsigned divider)
Definition: rtos_clock_control.h:157
unsigned rtos_clock_control_get_ref_clock(rtos_clock_control_t *ctx)
Definition: rtos_clock_control.h:182
unsigned rtos_clock_control_get_switch_clk_div(rtos_clock_control_t *ctx)
Definition: rtos_clock_control.h:170
void rtos_clock_control_init(rtos_clock_control_t *ctx)
Definition: rtos_clock_control.c:151
void rtos_clock_control_start(rtos_clock_control_t *ctx)
Definition: rtos_clock_control.c:140
Definition: rtos_clock_control.h:30
mrsw_lock_t local_lock
Definition: rtos_clock_control.h:83
Definition: rtos_driver_rpc.h:23