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_INVALID, 14 }; 15 16 struct roc_tim { 17 struct roc_sso *roc_sso; 18 /* Public data. */ 19 uint16_t nb_lfs; 20 /* Private data. */ 21 #define TIM_MEM_SZ (1 * 1024) 22 uint8_t reserved[TIM_MEM_SZ] __plt_cache_aligned; 23 } __plt_cache_aligned; 24 25 int __roc_api roc_tim_init(struct roc_tim *roc_tim); 26 void __roc_api roc_tim_fini(struct roc_tim *roc_tim); 27 28 /* TIM config */ 29 int __roc_api roc_tim_lf_enable(struct roc_tim *roc_tim, uint8_t ring_id, 30 uint64_t *start_tsc, uint32_t *cur_bkt); 31 int __roc_api roc_tim_lf_disable(struct roc_tim *roc_tim, uint8_t ring_id); 32 int __roc_api roc_tim_lf_config(struct roc_tim *roc_tim, uint8_t ring_id, 33 enum roc_tim_clk_src clk_src, 34 uint8_t ena_periodic, uint8_t ena_dfb, 35 uint32_t bucket_sz, uint32_t chunk_sz, 36 uint32_t interval); 37 int __roc_api roc_tim_lf_alloc(struct roc_tim *roc_tim, uint8_t ring_id, 38 uint64_t *clk); 39 int __roc_api roc_tim_lf_free(struct roc_tim *roc_tim, uint8_t ring_id); 40 uintptr_t __roc_api roc_tim_lf_base_get(struct roc_tim *roc_tim, 41 uint8_t ring_id); 42 43 #endif 44