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