18c83f28cSHemant Agrawal /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) 28c83f28cSHemant Agrawal * 38c83f28cSHemant Agrawal * Copyright 2011 Freescale Semiconductor, Inc. 48c83f28cSHemant Agrawal * All rights reserved. 52aa10990SRohit Raj * Copyright 2019-2020 NXP 68c83f28cSHemant Agrawal * 78c83f28cSHemant Agrawal */ 88c83f28cSHemant Agrawal 98c83f28cSHemant Agrawal #ifndef __COMPAT_H 108c83f28cSHemant Agrawal #define __COMPAT_H 118c83f28cSHemant Agrawal 128c83f28cSHemant Agrawal #include <sched.h> 138c83f28cSHemant Agrawal #include <stdint.h> 148c83f28cSHemant Agrawal #include <stdlib.h> 158c83f28cSHemant Agrawal #include <stddef.h> 168c83f28cSHemant Agrawal #include <stdio.h> 178c83f28cSHemant Agrawal #include <errno.h> 188c83f28cSHemant Agrawal #include <string.h> 198c83f28cSHemant Agrawal #include <pthread.h> 208c83f28cSHemant Agrawal #include <linux/types.h> 218c83f28cSHemant Agrawal #include <stdbool.h> 228c83f28cSHemant Agrawal #include <ctype.h> 238c83f28cSHemant Agrawal #include <malloc.h> 248c83f28cSHemant Agrawal #include <sys/types.h> 258c83f28cSHemant Agrawal #include <sys/stat.h> 268c83f28cSHemant Agrawal #include <fcntl.h> 278c83f28cSHemant Agrawal #include <unistd.h> 288c83f28cSHemant Agrawal #include <sys/mman.h> 298c83f28cSHemant Agrawal #include <limits.h> 308c83f28cSHemant Agrawal #include <assert.h> 318c83f28cSHemant Agrawal #include <dirent.h> 328c83f28cSHemant Agrawal #include <inttypes.h> 332204658fSDavid Marchand 348c83f28cSHemant Agrawal #include <rte_byteorder.h> 358c83f28cSHemant Agrawal #include <rte_atomic.h> 368c83f28cSHemant Agrawal #include <rte_spinlock.h> 378c83f28cSHemant Agrawal #include <rte_common.h> 388c83f28cSHemant Agrawal #include <rte_debug.h> 398c83f28cSHemant Agrawal #include <rte_cycles.h> 408c83f28cSHemant Agrawal #include <rte_malloc.h> 412204658fSDavid Marchand #include <rte_prefetch.h> 428c83f28cSHemant Agrawal 438c83f28cSHemant Agrawal /* The following definitions are primarily to allow the single-source driver 448c83f28cSHemant Agrawal * interfaces to be included by arbitrary program code. Ie. for interfaces that 458c83f28cSHemant Agrawal * are also available in kernel-space, these definitions provide compatibility 468c83f28cSHemant Agrawal * with certain attributes and types used in those interfaces. 478c83f28cSHemant Agrawal */ 488c83f28cSHemant Agrawal 498c83f28cSHemant Agrawal /* Required compiler attributes */ 508c83f28cSHemant Agrawal #ifndef __maybe_unused 518c83f28cSHemant Agrawal #define __maybe_unused __rte_unused 528c83f28cSHemant Agrawal #endif 538c83f28cSHemant Agrawal #ifndef __always_unused 548c83f28cSHemant Agrawal #define __always_unused __rte_unused 558c83f28cSHemant Agrawal #endif 568c83f28cSHemant Agrawal #ifndef noinline 57d0ac7bb5SThomas Monjalon #define noinline __rte_noinline 588c83f28cSHemant Agrawal #endif 598c83f28cSHemant Agrawal #define L1_CACHE_BYTES 64 60f35e5b3eSThomas Monjalon #define ____cacheline_aligned __rte_aligned(L1_CACHE_BYTES) 618c83f28cSHemant Agrawal #define __stringify_1(x) #x 628c83f28cSHemant Agrawal #define __stringify(x) __stringify_1(x) 638c83f28cSHemant Agrawal 648c83f28cSHemant Agrawal #ifdef ARRAY_SIZE 658c83f28cSHemant Agrawal #undef ARRAY_SIZE 668c83f28cSHemant Agrawal #endif 678c83f28cSHemant Agrawal #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) 688c83f28cSHemant Agrawal 698c83f28cSHemant Agrawal /* Debugging */ 70*fd51012dSAndre Muezerie #define prflush(fmt, ...) \ 718c83f28cSHemant Agrawal do { \ 72*fd51012dSAndre Muezerie printf(fmt, ##__VA_ARGS__); \ 738c83f28cSHemant Agrawal fflush(stdout); \ 748c83f28cSHemant Agrawal } while (0) 758c83f28cSHemant Agrawal #ifndef pr_crit 76*fd51012dSAndre Muezerie #define pr_crit(fmt, ...) prflush("CRIT:" fmt, ##__VA_ARGS__) 778c83f28cSHemant Agrawal #endif 788c83f28cSHemant Agrawal #ifndef pr_err 79*fd51012dSAndre Muezerie #define pr_err(fmt, ...) prflush("ERR:" fmt, ##__VA_ARGS__) 808c83f28cSHemant Agrawal #endif 818c83f28cSHemant Agrawal #ifndef pr_warn 82*fd51012dSAndre Muezerie #define pr_warn(fmt, ...) prflush("WARN:" fmt, ##__VA_ARGS__) 838c83f28cSHemant Agrawal #endif 848c83f28cSHemant Agrawal #ifndef pr_info 85*fd51012dSAndre Muezerie #define pr_info(fmt, ...) prflush(fmt, ##__VA_ARGS__) 868c83f28cSHemant Agrawal #endif 878c83f28cSHemant Agrawal #ifndef pr_debug 888c83f28cSHemant Agrawal #ifdef RTE_LIBRTE_DPAA_DEBUG_BUS 89*fd51012dSAndre Muezerie #define pr_debug(fmt, ...) printf(fmt, ##__VA_ARGS__) 908c83f28cSHemant Agrawal #else 91*fd51012dSAndre Muezerie #define pr_debug(fmt, ...) {} 928c83f28cSHemant Agrawal #endif 938c83f28cSHemant Agrawal #endif 948c83f28cSHemant Agrawal 958c83f28cSHemant Agrawal #define DPAA_BUG_ON(x) RTE_ASSERT(x) 968c83f28cSHemant Agrawal 978c83f28cSHemant Agrawal /* Required types */ 988c83f28cSHemant Agrawal typedef uint8_t u8; 998c83f28cSHemant Agrawal typedef uint16_t u16; 1008c83f28cSHemant Agrawal typedef uint32_t u32; 1018c83f28cSHemant Agrawal typedef uint64_t u64; 1028c83f28cSHemant Agrawal typedef uint64_t dma_addr_t; 1038c83f28cSHemant Agrawal typedef cpu_set_t cpumask_t; 1048c83f28cSHemant Agrawal typedef uint32_t phandle; 1058c83f28cSHemant Agrawal typedef uint32_t gfp_t; 1068c83f28cSHemant Agrawal typedef uint32_t irqreturn_t; 1078c83f28cSHemant Agrawal 1088c83f28cSHemant Agrawal #define ETHER_ADDR_LEN 6 1098c83f28cSHemant Agrawal 1108c83f28cSHemant Agrawal #define IRQ_HANDLED 0 1118c83f28cSHemant Agrawal #define request_irq qbman_request_irq 1128c83f28cSHemant Agrawal #define free_irq qbman_free_irq 1138c83f28cSHemant Agrawal 1148c83f28cSHemant Agrawal #define __iomem 1158c83f28cSHemant Agrawal #define GFP_KERNEL 0 1168c83f28cSHemant Agrawal #define __raw_readb(p) (*(const volatile unsigned char *)(p)) 1178c83f28cSHemant Agrawal #define __raw_readl(p) (*(const volatile unsigned int *)(p)) 1188c83f28cSHemant Agrawal #define __raw_writel(v, p) {*(volatile unsigned int *)(p) = (v); } 1198c83f28cSHemant Agrawal 1208c83f28cSHemant Agrawal /* to be used as an upper-limit only */ 1218c83f28cSHemant Agrawal #define NR_CPUS 64 1228c83f28cSHemant Agrawal 1238c83f28cSHemant Agrawal /* Waitqueue stuff */ 1248c83f28cSHemant Agrawal typedef struct { } wait_queue_head_t; 1258c83f28cSHemant Agrawal #define DECLARE_WAIT_QUEUE_HEAD(x) int dummy_##x __always_unused 1268c83f28cSHemant Agrawal #define wake_up(x) do { } while (0) 1278c83f28cSHemant Agrawal 1288c83f28cSHemant Agrawal /* I/O operations */ 1298c83f28cSHemant Agrawal static inline u32 in_be32(volatile void *__p) 1308c83f28cSHemant Agrawal { 1318c83f28cSHemant Agrawal volatile u32 *p = __p; 1328c83f28cSHemant Agrawal return rte_be_to_cpu_32(*p); 1338c83f28cSHemant Agrawal } 1348c83f28cSHemant Agrawal 1358c83f28cSHemant Agrawal static inline void out_be32(volatile void *__p, u32 val) 1368c83f28cSHemant Agrawal { 1378c83f28cSHemant Agrawal volatile u32 *p = __p; 1388c83f28cSHemant Agrawal *p = rte_cpu_to_be_32(val); 1398c83f28cSHemant Agrawal } 1408c83f28cSHemant Agrawal 1418c83f28cSHemant Agrawal #define hwsync() rte_rmb() 1428c83f28cSHemant Agrawal #define lwsync() rte_wmb() 1438c83f28cSHemant Agrawal 1442204658fSDavid Marchand #define dcbt_ro(p) rte_prefetch0(p) 1452204658fSDavid Marchand #define dcbt_rw(p) rte_prefetch0_write(p) 1468c83f28cSHemant Agrawal 147e9b97392SRuifeng Wang #if defined(RTE_ARCH_ARM) 148e9b97392SRuifeng Wang #if defined(RTE_ARCH_64) 1498c83f28cSHemant Agrawal #define dcbz(p) { asm volatile("dc zva, %0" : : "r" (p) : "memory"); } 1508c83f28cSHemant Agrawal #define dcbz_64(p) dcbz(p) 1518c83f28cSHemant Agrawal #define dcbf(p) { asm volatile("dc cvac, %0" : : "r"(p) : "memory"); } 1528c83f28cSHemant Agrawal #define dcbf_64(p) dcbf(p) 1538c83f28cSHemant Agrawal #define dccivac(p) { asm volatile("dc civac, %0" : : "r"(p) : "memory"); } 1548c83f28cSHemant Agrawal 1558c83f28cSHemant Agrawal #define dcbit_ro(p) \ 1568c83f28cSHemant Agrawal do { \ 1578c83f28cSHemant Agrawal dccivac(p); \ 1588c83f28cSHemant Agrawal asm volatile("prfm pldl1keep, [%0, #64]" : : "r" (p)); \ 1598c83f28cSHemant Agrawal } while (0) 1608c83f28cSHemant Agrawal 161e9b97392SRuifeng Wang #else /* RTE_ARCH_32 */ 1628c83f28cSHemant Agrawal #define dcbz(p) memset((p), 0, 32) 1638c83f28cSHemant Agrawal #define dcbz_64(p) memset((p), 0, 64) 1648c83f28cSHemant Agrawal #define dcbf(p) RTE_SET_USED(p) 1658c83f28cSHemant Agrawal #define dcbf_64(p) dcbf(p) 1668c83f28cSHemant Agrawal #define dccivac(p) RTE_SET_USED(p) 1678c83f28cSHemant Agrawal #define dcbit_ro(p) RTE_SET_USED(p) 168e9b97392SRuifeng Wang #endif 1698c83f28cSHemant Agrawal 1708c83f28cSHemant Agrawal #else 1718c83f28cSHemant Agrawal #define dcbz(p) RTE_SET_USED(p) 1728c83f28cSHemant Agrawal #define dcbz_64(p) dcbz(p) 1738c83f28cSHemant Agrawal #define dcbf(p) RTE_SET_USED(p) 1748c83f28cSHemant Agrawal #define dcbf_64(p) dcbf(p) 1758c83f28cSHemant Agrawal #define dccivac(p) RTE_SET_USED(p) 1768c83f28cSHemant Agrawal #define dcbit_ro(p) RTE_SET_USED(p) 1778c83f28cSHemant Agrawal #endif 1788c83f28cSHemant Agrawal 1798c83f28cSHemant Agrawal #define barrier() { asm volatile ("" : : : "memory"); } 1808c83f28cSHemant Agrawal #define cpu_relax barrier 1818c83f28cSHemant Agrawal 1828c83f28cSHemant Agrawal #if defined(RTE_ARCH_ARM64) 1838c83f28cSHemant Agrawal static inline uint64_t mfatb(void) 1848c83f28cSHemant Agrawal { 1858c83f28cSHemant Agrawal uint64_t ret, ret_new, timeout = 200; 1868c83f28cSHemant Agrawal 1878c83f28cSHemant Agrawal asm volatile ("mrs %0, cntvct_el0" : "=r" (ret)); 1888c83f28cSHemant Agrawal asm volatile ("mrs %0, cntvct_el0" : "=r" (ret_new)); 1898c83f28cSHemant Agrawal while (ret != ret_new && timeout--) { 1908c83f28cSHemant Agrawal ret = ret_new; 1918c83f28cSHemant Agrawal asm volatile ("mrs %0, cntvct_el0" : "=r" (ret_new)); 1928c83f28cSHemant Agrawal } 1938c83f28cSHemant Agrawal DPAA_BUG_ON(!timeout && (ret != ret_new)); 1948c83f28cSHemant Agrawal return ret * 64; 1958c83f28cSHemant Agrawal } 1968c83f28cSHemant Agrawal #else 1978c83f28cSHemant Agrawal 1988c83f28cSHemant Agrawal #define mfatb rte_rdtsc 1998c83f28cSHemant Agrawal 2008c83f28cSHemant Agrawal #endif 2018c83f28cSHemant Agrawal 2028c83f28cSHemant Agrawal /* Spin for a few cycles without bothering the bus */ 2038c83f28cSHemant Agrawal static inline void cpu_spin(int cycles) 2048c83f28cSHemant Agrawal { 2058c83f28cSHemant Agrawal uint64_t now = mfatb(); 2068c83f28cSHemant Agrawal 2078c83f28cSHemant Agrawal while (mfatb() < (now + cycles)) 2088c83f28cSHemant Agrawal ; 2098c83f28cSHemant Agrawal } 2108c83f28cSHemant Agrawal 2118c83f28cSHemant Agrawal /* Qman/Bman API inlines and macros; */ 2128c83f28cSHemant Agrawal #ifdef lower_32_bits 2138c83f28cSHemant Agrawal #undef lower_32_bits 2148c83f28cSHemant Agrawal #endif 2158c83f28cSHemant Agrawal #define lower_32_bits(x) ((u32)(x)) 2168c83f28cSHemant Agrawal 2178c83f28cSHemant Agrawal #ifdef upper_32_bits 2188c83f28cSHemant Agrawal #undef upper_32_bits 2198c83f28cSHemant Agrawal #endif 2208c83f28cSHemant Agrawal #define upper_32_bits(x) ((u32)(((x) >> 16) >> 16)) 2218c83f28cSHemant Agrawal 2228c83f28cSHemant Agrawal /* 2238c83f28cSHemant Agrawal * Swap bytes of a 48-bit value. 2248c83f28cSHemant Agrawal */ 2258c83f28cSHemant Agrawal static inline uint64_t 2268c83f28cSHemant Agrawal __bswap_48(uint64_t x) 2278c83f28cSHemant Agrawal { 2288c83f28cSHemant Agrawal return ((x & 0x0000000000ffULL) << 40) | 2298c83f28cSHemant Agrawal ((x & 0x00000000ff00ULL) << 24) | 2308c83f28cSHemant Agrawal ((x & 0x000000ff0000ULL) << 8) | 2318c83f28cSHemant Agrawal ((x & 0x0000ff000000ULL) >> 8) | 2328c83f28cSHemant Agrawal ((x & 0x00ff00000000ULL) >> 24) | 2338c83f28cSHemant Agrawal ((x & 0xff0000000000ULL) >> 40); 2348c83f28cSHemant Agrawal } 2358c83f28cSHemant Agrawal 2368c83f28cSHemant Agrawal /* 2378c83f28cSHemant Agrawal * Swap bytes of a 40-bit value. 2388c83f28cSHemant Agrawal */ 2398c83f28cSHemant Agrawal static inline uint64_t 2408c83f28cSHemant Agrawal __bswap_40(uint64_t x) 2418c83f28cSHemant Agrawal { 2428c83f28cSHemant Agrawal return ((x & 0x00000000ffULL) << 32) | 2438c83f28cSHemant Agrawal ((x & 0x000000ff00ULL) << 16) | 2448c83f28cSHemant Agrawal ((x & 0x0000ff0000ULL)) | 2458c83f28cSHemant Agrawal ((x & 0x00ff000000ULL) >> 16) | 2468c83f28cSHemant Agrawal ((x & 0xff00000000ULL) >> 32); 2478c83f28cSHemant Agrawal } 2488c83f28cSHemant Agrawal 2498c83f28cSHemant Agrawal /* 2508c83f28cSHemant Agrawal * Swap bytes of a 24-bit value. 2518c83f28cSHemant Agrawal */ 2528c83f28cSHemant Agrawal static inline uint32_t 2538c83f28cSHemant Agrawal __bswap_24(uint32_t x) 2548c83f28cSHemant Agrawal { 2558c83f28cSHemant Agrawal return ((x & 0x0000ffULL) << 16) | 2568c83f28cSHemant Agrawal ((x & 0x00ff00ULL)) | 2578c83f28cSHemant Agrawal ((x & 0xff0000ULL) >> 16); 2588c83f28cSHemant Agrawal } 2598c83f28cSHemant Agrawal 2608c83f28cSHemant Agrawal #define be64_to_cpu(x) rte_be_to_cpu_64(x) 2618c83f28cSHemant Agrawal #define be32_to_cpu(x) rte_be_to_cpu_32(x) 2628c83f28cSHemant Agrawal #define be16_to_cpu(x) rte_be_to_cpu_16(x) 2638c83f28cSHemant Agrawal 2648c83f28cSHemant Agrawal #define cpu_to_be64(x) rte_cpu_to_be_64(x) 2658c83f28cSHemant Agrawal #if !defined(cpu_to_be32) 2668c83f28cSHemant Agrawal #define cpu_to_be32(x) rte_cpu_to_be_32(x) 2678c83f28cSHemant Agrawal #endif 2688c83f28cSHemant Agrawal #define cpu_to_be16(x) rte_cpu_to_be_16(x) 2698c83f28cSHemant Agrawal 2708c83f28cSHemant Agrawal #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN 2718c83f28cSHemant Agrawal 2728c83f28cSHemant Agrawal #define cpu_to_be48(x) __bswap_48(x) 2738c83f28cSHemant Agrawal #define be48_to_cpu(x) __bswap_48(x) 2748c83f28cSHemant Agrawal 2758c83f28cSHemant Agrawal #define cpu_to_be40(x) __bswap_40(x) 2768c83f28cSHemant Agrawal #define be40_to_cpu(x) __bswap_40(x) 2778c83f28cSHemant Agrawal 2788c83f28cSHemant Agrawal #define cpu_to_be24(x) __bswap_24(x) 2798c83f28cSHemant Agrawal #define be24_to_cpu(x) __bswap_24(x) 2808c83f28cSHemant Agrawal 2818c83f28cSHemant Agrawal #else /* RTE_BIG_ENDIAN */ 2828c83f28cSHemant Agrawal 2838c83f28cSHemant Agrawal #define cpu_to_be48(x) (x) 2848c83f28cSHemant Agrawal #define be48_to_cpu(x) (x) 2858c83f28cSHemant Agrawal 2868c83f28cSHemant Agrawal #define cpu_to_be40(x) (x) 2878c83f28cSHemant Agrawal #define be40_to_cpu(x) (x) 2888c83f28cSHemant Agrawal 2898c83f28cSHemant Agrawal #define cpu_to_be24(x) (x) 2908c83f28cSHemant Agrawal #define be24_to_cpu(x) (x) 2918c83f28cSHemant Agrawal 2928c83f28cSHemant Agrawal #endif /* RTE_BIG_ENDIAN */ 2938c83f28cSHemant Agrawal 2948c83f28cSHemant Agrawal /* When copying aligned words or shorts, try to avoid memcpy() */ 2958c83f28cSHemant Agrawal /* memcpy() stuff - when you know alignments in advance */ 2968c83f28cSHemant Agrawal #define CONFIG_TRY_BETTER_MEMCPY 2978c83f28cSHemant Agrawal 2988c83f28cSHemant Agrawal #ifdef CONFIG_TRY_BETTER_MEMCPY 2998c83f28cSHemant Agrawal static inline void copy_words(void *dest, const void *src, size_t sz) 3008c83f28cSHemant Agrawal { 3018c83f28cSHemant Agrawal u32 *__dest = dest; 3028c83f28cSHemant Agrawal const u32 *__src = src; 3038c83f28cSHemant Agrawal size_t __sz = sz >> 2; 3048c83f28cSHemant Agrawal 3058c83f28cSHemant Agrawal DPAA_BUG_ON((unsigned long)dest & 0x3); 3068c83f28cSHemant Agrawal DPAA_BUG_ON((unsigned long)src & 0x3); 3078c83f28cSHemant Agrawal DPAA_BUG_ON(sz & 0x3); 3088c83f28cSHemant Agrawal while (__sz--) 3098c83f28cSHemant Agrawal *(__dest++) = *(__src++); 3108c83f28cSHemant Agrawal } 3118c83f28cSHemant Agrawal 3128c83f28cSHemant Agrawal static inline void copy_shorts(void *dest, const void *src, size_t sz) 3138c83f28cSHemant Agrawal { 3148c83f28cSHemant Agrawal u16 *__dest = dest; 3158c83f28cSHemant Agrawal const u16 *__src = src; 3168c83f28cSHemant Agrawal size_t __sz = sz >> 1; 3178c83f28cSHemant Agrawal 3188c83f28cSHemant Agrawal DPAA_BUG_ON((unsigned long)dest & 0x1); 3198c83f28cSHemant Agrawal DPAA_BUG_ON((unsigned long)src & 0x1); 3208c83f28cSHemant Agrawal DPAA_BUG_ON(sz & 0x1); 3218c83f28cSHemant Agrawal while (__sz--) 3228c83f28cSHemant Agrawal *(__dest++) = *(__src++); 3238c83f28cSHemant Agrawal } 3248c83f28cSHemant Agrawal 3258c83f28cSHemant Agrawal static inline void copy_bytes(void *dest, const void *src, size_t sz) 3268c83f28cSHemant Agrawal { 3278c83f28cSHemant Agrawal u8 *__dest = dest; 3288c83f28cSHemant Agrawal const u8 *__src = src; 3298c83f28cSHemant Agrawal 3308c83f28cSHemant Agrawal while (sz--) 3318c83f28cSHemant Agrawal *(__dest++) = *(__src++); 3328c83f28cSHemant Agrawal } 3338c83f28cSHemant Agrawal #else 3348c83f28cSHemant Agrawal #define copy_words memcpy 3358c83f28cSHemant Agrawal #define copy_shorts memcpy 3368c83f28cSHemant Agrawal #define copy_bytes memcpy 3378c83f28cSHemant Agrawal #endif 3388c83f28cSHemant Agrawal 3398c83f28cSHemant Agrawal /* Allocator stuff */ 3408c83f28cSHemant Agrawal #define kmalloc(sz, t) rte_malloc(NULL, sz, 0) 34106c047b6SStephen Hemminger #define kzalloc(sz, t) rte_zmalloc(NULL, sz, 0) 3428c83f28cSHemant Agrawal #define vmalloc(sz) rte_malloc(NULL, sz, 0) 34306c047b6SStephen Hemminger #define kfree(p) rte_free(p) 3448c83f28cSHemant Agrawal 3458c83f28cSHemant Agrawal static inline unsigned long get_zeroed_page(gfp_t __foo __rte_unused) 3468c83f28cSHemant Agrawal { 3478c83f28cSHemant Agrawal void *p; 3488c83f28cSHemant Agrawal 3498c83f28cSHemant Agrawal if (posix_memalign(&p, 4096, 4096)) 3508c83f28cSHemant Agrawal return 0; 3518c83f28cSHemant Agrawal memset(p, 0, 4096); 3528c83f28cSHemant Agrawal return (unsigned long)p; 3538c83f28cSHemant Agrawal } 3548c83f28cSHemant Agrawal 3558c83f28cSHemant Agrawal /* Spinlock stuff */ 3568c83f28cSHemant Agrawal #define spinlock_t rte_spinlock_t 3578c83f28cSHemant Agrawal #define __SPIN_LOCK_UNLOCKED(x) RTE_SPINLOCK_INITIALIZER 3588c83f28cSHemant Agrawal #define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) 3598c83f28cSHemant Agrawal #define spin_lock_init(x) rte_spinlock_init(x) 3608c83f28cSHemant Agrawal #define spin_lock_destroy(x) 3618c83f28cSHemant Agrawal #define spin_lock(x) rte_spinlock_lock(x) 3628c83f28cSHemant Agrawal #define spin_unlock(x) rte_spinlock_unlock(x) 3638c83f28cSHemant Agrawal #define spin_lock_irq(x) spin_lock(x) 3648c83f28cSHemant Agrawal #define spin_unlock_irq(x) spin_unlock(x) 3658c83f28cSHemant Agrawal #define spin_lock_irqsave(x, f) spin_lock_irq(x) 3668c83f28cSHemant Agrawal #define spin_unlock_irqrestore(x, f) spin_unlock_irq(x) 3678c83f28cSHemant Agrawal 3688c83f28cSHemant Agrawal #define atomic_t rte_atomic32_t 3698c83f28cSHemant Agrawal #define atomic_read(v) rte_atomic32_read(v) 3708c83f28cSHemant Agrawal #define atomic_set(v, i) rte_atomic32_set(v, i) 3718c83f28cSHemant Agrawal 3728c83f28cSHemant Agrawal #define atomic_inc(v) rte_atomic32_add(v, 1) 3738c83f28cSHemant Agrawal #define atomic_dec(v) rte_atomic32_sub(v, 1) 3748c83f28cSHemant Agrawal 3758c83f28cSHemant Agrawal #define atomic_inc_and_test(v) rte_atomic32_inc_and_test(v) 3768c83f28cSHemant Agrawal #define atomic_dec_and_test(v) rte_atomic32_dec_and_test(v) 3778c83f28cSHemant Agrawal 3788c83f28cSHemant Agrawal #define atomic_inc_return(v) rte_atomic32_add_return(v, 1) 3798c83f28cSHemant Agrawal #define atomic_dec_return(v) rte_atomic32_sub_return(v, 1) 3808c83f28cSHemant Agrawal #define atomic_sub_and_test(i, v) (rte_atomic32_sub_return(v, i) == 0) 3818c83f28cSHemant Agrawal 3822aa10990SRohit Raj /* Interface name len*/ 3832aa10990SRohit Raj #define IF_NAME_MAX_LEN 16 3842aa10990SRohit Raj 3858c83f28cSHemant Agrawal #endif /* __COMPAT_H */ 386