1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2018-2021 Beijing WangXun Technology Co., Ltd. 3 * Copyright(c) 2010-2017 Intel Corporation 4 */ 5 6 #ifndef _NGBE_OS_H_ 7 #define _NGBE_OS_H_ 8 9 #include <string.h> 10 #include <stdint.h> 11 #include <stdio.h> 12 #include <stdarg.h> 13 #include <rte_version.h> 14 #include <rte_common.h> 15 #include <rte_debug.h> 16 #include <rte_cycles.h> 17 #include <rte_log.h> 18 #include <rte_byteorder.h> 19 #include <rte_config.h> 20 #include <rte_io.h> 21 #include <rte_ether.h> 22 #include <bus_pci_driver.h> 23 24 #include "../ngbe_logs.h" 25 26 #define RTE_LIBRTE_NGBE_TM DCPV(1, 0) 27 #define TMZ_PADDR(mz) ((mz)->iova) 28 #define TMZ_VADDR(mz) ((mz)->addr) 29 #define TDEV_NAME(eth_dev) ((eth_dev)->device->name) 30 31 #define ASSERT(x) do { \ 32 if (!(x)) \ 33 PMD_DRV_LOG(ERR, "NGBE: %d", x); \ 34 } while (0) 35 36 #define ngbe_unused __rte_unused 37 38 #define usec_delay(x) rte_delay_us(x) 39 #define msec_delay(x) rte_delay_ms(x) 40 #define usleep(x) rte_delay_us(x) 41 #define msleep(x) rte_delay_ms(x) 42 43 #define FALSE 0 44 #define TRUE 1 45 46 #ifndef false 47 #define false 0 48 #endif 49 #ifndef true 50 #define true 1 51 #endif 52 #define min(a, b) RTE_MIN(a, b) 53 #define max(a, b) RTE_MAX(a, b) 54 55 /* Bunch of defines for shared code bogosity */ 56 57 static inline void UNREFERENCED(const char *a __rte_unused, ...) {} 58 #define UNREFERENCED_PARAMETER(...) UNREFERENCED("", ##__VA_ARGS__) 59 60 #define STATIC static 61 62 typedef uint8_t u8; 63 typedef int8_t s8; 64 typedef uint16_t u16; 65 typedef int16_t s16; 66 typedef uint32_t u32; 67 typedef int32_t s32; 68 typedef uint64_t u64; 69 typedef int64_t s64; 70 71 /* Little Endian defines */ 72 #ifndef __le16 73 #define __le16 u16 74 #define __le32 u32 75 #define __le64 u64 76 #endif 77 #ifndef __be16 78 #define __be16 u16 79 #define __be32 u32 80 #define __be64 u64 81 #endif 82 83 /* Bit shift and mask */ 84 #define BIT_MASK4 (0x0000000FU) 85 #define BIT_MASK8 (0x000000FFU) 86 #define BIT_MASK16 (0x0000FFFFU) 87 #define BIT_MASK32 (0xFFFFFFFFU) 88 #define BIT_MASK64 (0xFFFFFFFFFFFFFFFFUL) 89 90 #ifndef cpu_to_le32 91 #define cpu_to_le16(v) rte_cpu_to_le_16((u16)(v)) 92 #define cpu_to_le32(v) rte_cpu_to_le_32((u32)(v)) 93 #define cpu_to_le64(v) rte_cpu_to_le_64((u64)(v)) 94 #define le_to_cpu16(v) rte_le_to_cpu_16((u16)(v)) 95 #define le_to_cpu32(v) rte_le_to_cpu_32((u32)(v)) 96 #define le_to_cpu64(v) rte_le_to_cpu_64((u64)(v)) 97 98 #define cpu_to_be16(v) rte_cpu_to_be_16((u16)(v)) 99 #define cpu_to_be32(v) rte_cpu_to_be_32((u32)(v)) 100 #define cpu_to_be64(v) rte_cpu_to_be_64((u64)(v)) 101 #define be_to_cpu16(v) rte_be_to_cpu_16((u16)(v)) 102 #define be_to_cpu32(v) rte_be_to_cpu_32((u32)(v)) 103 #define be_to_cpu64(v) rte_be_to_cpu_64((u64)(v)) 104 105 #define le_to_be16(v) rte_bswap16((u16)(v)) 106 #define le_to_be32(v) rte_bswap32((u32)(v)) 107 #define le_to_be64(v) rte_bswap64((u64)(v)) 108 #define be_to_le16(v) rte_bswap16((u16)(v)) 109 #define be_to_le32(v) rte_bswap32((u32)(v)) 110 #define be_to_le64(v) rte_bswap64((u64)(v)) 111 112 #define npu_to_le16(v) (v) 113 #define npu_to_le32(v) (v) 114 #define npu_to_le64(v) (v) 115 #define le_to_npu16(v) (v) 116 #define le_to_npu32(v) (v) 117 #define le_to_npu64(v) (v) 118 119 #define npu_to_be16(v) le_to_be16((u16)(v)) 120 #define npu_to_be32(v) le_to_be32((u32)(v)) 121 #define npu_to_be64(v) le_to_be64((u64)(v)) 122 #define be_to_npu16(v) be_to_le16((u16)(v)) 123 #define be_to_npu32(v) be_to_le32((u32)(v)) 124 #define be_to_npu64(v) be_to_le64((u64)(v)) 125 #endif /* !cpu_to_le32 */ 126 127 static inline u16 REVERT_BIT_MASK16(u16 mask) 128 { 129 mask = ((mask & 0x5555) << 1) | ((mask & 0xAAAA) >> 1); 130 mask = ((mask & 0x3333) << 2) | ((mask & 0xCCCC) >> 2); 131 mask = ((mask & 0x0F0F) << 4) | ((mask & 0xF0F0) >> 4); 132 return ((mask & 0x00FF) << 8) | ((mask & 0xFF00) >> 8); 133 } 134 135 static inline u32 REVERT_BIT_MASK32(u32 mask) 136 { 137 mask = ((mask & 0x55555555) << 1) | ((mask & 0xAAAAAAAA) >> 1); 138 mask = ((mask & 0x33333333) << 2) | ((mask & 0xCCCCCCCC) >> 2); 139 mask = ((mask & 0x0F0F0F0F) << 4) | ((mask & 0xF0F0F0F0) >> 4); 140 mask = ((mask & 0x00FF00FF) << 8) | ((mask & 0xFF00FF00) >> 8); 141 return ((mask & 0x0000FFFF) << 16) | ((mask & 0xFFFF0000) >> 16); 142 } 143 144 static inline u64 REVERT_BIT_MASK64(u64 mask) 145 { 146 mask = ((mask & 0x5555555555555555) << 1) | 147 ((mask & 0xAAAAAAAAAAAAAAAA) >> 1); 148 mask = ((mask & 0x3333333333333333) << 2) | 149 ((mask & 0xCCCCCCCCCCCCCCCC) >> 2); 150 mask = ((mask & 0x0F0F0F0F0F0F0F0F) << 4) | 151 ((mask & 0xF0F0F0F0F0F0F0F0) >> 4); 152 mask = ((mask & 0x00FF00FF00FF00FF) << 8) | 153 ((mask & 0xFF00FF00FF00FF00) >> 8); 154 mask = ((mask & 0x0000FFFF0000FFFF) << 16) | 155 ((mask & 0xFFFF0000FFFF0000) >> 16); 156 return ((mask & 0x00000000FFFFFFFF) << 32) | 157 ((mask & 0xFFFFFFFF00000000) >> 32); 158 } 159 160 #define IOMEM 161 162 #define prefetch(x) rte_prefetch0(x) 163 164 #define ARRAY_SIZE(x) ((int32_t)RTE_DIM(x)) 165 166 #ifndef MAX_UDELAY_MS 167 #define MAX_UDELAY_MS 5 168 #endif 169 170 #define ETH_ADDR_LEN 6 171 #define ETH_FCS_LEN 4 172 173 /* Check whether address is multicast. This is little-endian specific check.*/ 174 #define NGBE_IS_MULTICAST(address) \ 175 rte_is_multicast_ether_addr(address) 176 177 /* Check whether an address is broadcast. */ 178 #define NGBE_IS_BROADCAST(address) \ 179 rte_is_broadcast_ether_addr(address) 180 181 #define ETH_P_8021Q 0x8100 182 #define ETH_P_8021AD 0x88A8 183 184 #endif /* _NGBE_OS_H_ */ 185