/usr/include/dpdk/generic/rte_cycles.h is in libdpdk-dev 2.2.0-0ubuntu7.
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 199 200 201 202 203 204 205 | /*-
* BSD LICENSE
*
* Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
* 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.
*/
/* BSD LICENSE
*
* Copyright(c) 2013 6WIND.
*
* 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 6WIND S.A. 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)
{
switch(eal_timer_source) {
case EAL_TIMER_TSC:
return rte_get_tsc_cycles();
case EAL_TIMER_HPET:
#ifdef RTE_LIBEAL_USE_HPET
return rte_get_hpet_cycles();
#endif
default: rte_panic("Invalid timer source specified\n");
}
}
/**
* 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)
{
switch(eal_timer_source) {
case EAL_TIMER_TSC:
return rte_get_tsc_hz();
case EAL_TIMER_HPET:
#ifdef RTE_LIBEAL_USE_HPET
return rte_get_hpet_hz();
#endif
default: rte_panic("Invalid timer source specified\n");
}
}
/**
* Wait at least us microseconds.
*
* @param us
* The number of microseconds to wait.
*/
void
rte_delay_us(unsigned 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);
}
#endif /* _RTE_CYCLES_H_ */
|