129631ee5SMin Zhou /* SPDX-License-Identifier: BSD-3-Clause 229631ee5SMin Zhou * Copyright(c) 2022 Loongson Technology Corporation Limited 329631ee5SMin Zhou */ 429631ee5SMin Zhou 529631ee5SMin Zhou #ifndef RTE_CYCLES_LOONGARCH_H 629631ee5SMin Zhou #define RTE_CYCLES_LOONGARCH_H 729631ee5SMin Zhou 8*719834a6SMattias Rönnblom #include "generic/rte_cycles.h" 9*719834a6SMattias Rönnblom 1029631ee5SMin Zhou #ifdef __cplusplus 1129631ee5SMin Zhou extern "C" { 1229631ee5SMin Zhou #endif 1329631ee5SMin Zhou 1429631ee5SMin Zhou /** 1529631ee5SMin Zhou * Read the time base register. 1629631ee5SMin Zhou * 1729631ee5SMin Zhou * @return 1829631ee5SMin Zhou * The time base for this lcore. 1929631ee5SMin Zhou */ 2029631ee5SMin Zhou static inline uint64_t 2129631ee5SMin Zhou rte_rdtsc(void) 2229631ee5SMin Zhou { 2329631ee5SMin Zhou uint64_t count; 2429631ee5SMin Zhou 2529631ee5SMin Zhou __asm__ __volatile__ ( 2629631ee5SMin Zhou "rdtime.d %[cycles], $zero\n" 2729631ee5SMin Zhou : [cycles] "=r" (count) 2829631ee5SMin Zhou :: 2929631ee5SMin Zhou ); 3029631ee5SMin Zhou return count; 3129631ee5SMin Zhou } 3229631ee5SMin Zhou 3329631ee5SMin Zhou static inline uint64_t 3429631ee5SMin Zhou rte_rdtsc_precise(void) 3529631ee5SMin Zhou { 3629631ee5SMin Zhou rte_mb(); 3729631ee5SMin Zhou return rte_rdtsc(); 3829631ee5SMin Zhou } 3929631ee5SMin Zhou 4029631ee5SMin Zhou static inline uint64_t 4129631ee5SMin Zhou rte_get_tsc_cycles(void) { return rte_rdtsc(); } 4229631ee5SMin Zhou 4329631ee5SMin Zhou #ifdef __cplusplus 4429631ee5SMin Zhou } 4529631ee5SMin Zhou #endif 4629631ee5SMin Zhou 4729631ee5SMin Zhou #endif /* RTE_CYCLES_LOONGARCH_H */ 48