xref: /dpdk/drivers/common/cnxk/roc_tim.h (revision dcc97999)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4 
5 #ifndef _ROC_TIM_H_
6 #define _ROC_TIM_H_
7 
8 enum roc_tim_clk_src {
9 	ROC_TIM_CLK_SRC_10NS = 0,
10 	ROC_TIM_CLK_SRC_GPIO,
11 	ROC_TIM_CLK_SRC_GTI,
12 	ROC_TIM_CLK_SRC_PTP,
13 	ROC_TIM_CLK_SRC_SYNCE,
14 	ROC_TIM_CLK_SRC_BTS,
15 	ROC_TIM_CLK_SRC_INVALID,
16 };
17 
18 struct roc_tim {
19 	struct roc_sso *roc_sso;
20 	/* Public data. */
21 	uint16_t nb_lfs;
22 	/* Private data. */
23 #define TIM_MEM_SZ (1 * 1024)
24 	uint8_t reserved[TIM_MEM_SZ] __plt_cache_aligned;
25 } __plt_cache_aligned;
26 
27 int __roc_api roc_tim_init(struct roc_tim *roc_tim);
28 void __roc_api roc_tim_fini(struct roc_tim *roc_tim);
29 
30 /* TIM config */
31 int __roc_api roc_tim_lf_enable(struct roc_tim *roc_tim, uint8_t ring_id,
32 				uint64_t *start_tsc, uint32_t *cur_bkt);
33 int __roc_api roc_tim_lf_disable(struct roc_tim *roc_tim, uint8_t ring_id);
34 int __roc_api roc_tim_lf_config(struct roc_tim *roc_tim, uint8_t ring_id,
35 				enum roc_tim_clk_src clk_src,
36 				uint8_t ena_periodic, uint8_t ena_dfb,
37 				uint32_t bucket_sz, uint32_t chunk_sz,
38 				uint32_t interval, uint64_t intervalns,
39 				uint64_t clockfreq);
40 int __roc_api roc_tim_lf_interval(struct roc_tim *roc_tim,
41 				  enum roc_tim_clk_src clk_src,
42 				  uint64_t clockfreq, uint64_t *intervalns,
43 				  uint64_t *interval);
44 int __roc_api roc_tim_lf_alloc(struct roc_tim *roc_tim, uint8_t ring_id,
45 			       uint64_t *clk);
46 int __roc_api roc_tim_lf_free(struct roc_tim *roc_tim, uint8_t ring_id);
47 uintptr_t __roc_api roc_tim_lf_base_get(struct roc_tim *roc_tim,
48 					uint8_t ring_id);
49 
50 #endif
51