xref: /dpdk/drivers/common/dpaax/compat.h (revision e77506397fc8005c5129e22e9e2d15d5876790fd)
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