/usr/share/dpdk/x86_64-default-linuxapp-gcc/include/generic/rte_cycles.h is in dpdk-dev 17.11.1-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | /*-
* BSD LICENSE
*
* Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
* Copyright(c) 2013 6WIND.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Intel Corporation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _RTE_CYCLES_H_
#define _RTE_CYCLES_H_
/**
* @file
*
* Simple Time Reference Functions (Cycles and HPET).
*/
#include <stdint.h>
#include <rte_debug.h>
#include <rte_atomic.h>
#define MS_PER_S 1000
#define US_PER_S 1000000
#define NS_PER_S 1000000000
enum timer_source {
EAL_TIMER_TSC = 0,
EAL_TIMER_HPET
};
extern enum timer_source eal_timer_source;
/**
* Get the measured frequency of the RDTSC counter
*
* @return
* The TSC frequency for this lcore
*/
uint64_t
rte_get_tsc_hz(void);
/**
* Return the number of TSC cycles since boot
*
* @return
* the number of cycles
*/
static inline uint64_t
rte_get_tsc_cycles(void);
#ifdef RTE_LIBEAL_USE_HPET
/**
* Return the number of HPET cycles since boot
*
* This counter is global for all execution units. The number of
* cycles in one second can be retrieved using rte_get_hpet_hz().
*
* @return
* the number of cycles
*/
uint64_t
rte_get_hpet_cycles(void);
/**
* Get the number of HPET cycles in one second.
*
* @return
* The number of cycles in one second.
*/
uint64_t
rte_get_hpet_hz(void);
/**
* Initialise the HPET for use. This must be called before the rte_get_hpet_hz
* and rte_get_hpet_cycles APIs are called. If this function does not succeed,
* then the HPET functions are unavailable and should not be called.
*
* @param make_default
* If set, the hpet timer becomes the default timer whose values are
* returned by the rte_get_timer_hz/cycles API calls
*
* @return
* 0 on success,
* -1 on error, and the make_default parameter is ignored.
*/
int rte_eal_hpet_init(int make_default);
#endif
/**
* Get the number of cycles since boot from the default timer.
*
* @return
* The number of cycles
*/
static inline uint64_t
rte_get_timer_cycles(void)
{
#ifdef RTE_LIBEAL_USE_HPET
switch(eal_timer_source) {
case EAL_TIMER_TSC:
#endif
return rte_get_tsc_cycles();
#ifdef RTE_LIBEAL_USE_HPET
case EAL_TIMER_HPET:
return rte_get_hpet_cycles();
default: rte_panic("Invalid timer source specified\n");
}
#endif
}
/**
* Get the number of cycles in one second for the default timer.
*
* @return
* The number of cycles in one second.
*/
static inline uint64_t
rte_get_timer_hz(void)
{
#ifdef RTE_LIBEAL_USE_HPET
switch(eal_timer_source) {
case EAL_TIMER_TSC:
#endif
return rte_get_tsc_hz();
#ifdef RTE_LIBEAL_USE_HPET
case EAL_TIMER_HPET:
return rte_get_hpet_hz();
default: rte_panic("Invalid timer source specified\n");
}
#endif
}
/**
* Wait at least us microseconds.
* This function can be replaced with user-defined function.
* @see rte_delay_us_callback_register
*
* @param us
* The number of microseconds to wait.
*/
extern void
(*rte_delay_us)(unsigned int us);
/**
* Wait at least ms milliseconds.
*
* @param ms
* The number of milliseconds to wait.
*/
static inline void
rte_delay_ms(unsigned ms)
{
rte_delay_us(ms * 1000);
}
/**
* Blocking delay function.
*
* @param us
* Number of microseconds to wait.
*/
void rte_delay_us_block(unsigned int us);
/**
* Replace rte_delay_us with user defined function.
*
* @param userfunc
* User function which replaces rte_delay_us. rte_delay_us_block restores
* buildin block delay function.
*/
void rte_delay_us_callback_register(void(*userfunc)(unsigned int));
#endif /* _RTE_CYCLES_H_ */
|