168eb13a1SJiawen Wu /* SPDX-License-Identifier: BSD-3-Clause 268eb13a1SJiawen Wu * Copyright(c) 2018-2021 Beijing WangXun Technology Co., Ltd. 368eb13a1SJiawen Wu * Copyright(c) 2010-2017 Intel Corporation 468eb13a1SJiawen Wu */ 568eb13a1SJiawen Wu 668eb13a1SJiawen Wu #ifndef _NGBE_OS_H_ 768eb13a1SJiawen Wu #define _NGBE_OS_H_ 868eb13a1SJiawen Wu 968eb13a1SJiawen Wu #include <string.h> 1068eb13a1SJiawen Wu #include <stdint.h> 1168eb13a1SJiawen Wu #include <stdio.h> 1268eb13a1SJiawen Wu #include <stdarg.h> 1368eb13a1SJiawen Wu #include <rte_version.h> 1468eb13a1SJiawen Wu #include <rte_common.h> 1568eb13a1SJiawen Wu #include <rte_debug.h> 1668eb13a1SJiawen Wu #include <rte_cycles.h> 1768eb13a1SJiawen Wu #include <rte_log.h> 1868eb13a1SJiawen Wu #include <rte_byteorder.h> 1968eb13a1SJiawen Wu #include <rte_config.h> 2068eb13a1SJiawen Wu #include <rte_io.h> 2168eb13a1SJiawen Wu #include <rte_ether.h> 221f37cb2bSDavid Marchand #include <bus_pci_driver.h> 2368eb13a1SJiawen Wu 2468eb13a1SJiawen Wu #include "../ngbe_logs.h" 2568eb13a1SJiawen Wu 2668eb13a1SJiawen Wu #define RTE_LIBRTE_NGBE_TM DCPV(1, 0) 2768eb13a1SJiawen Wu #define TMZ_PADDR(mz) ((mz)->iova) 2868eb13a1SJiawen Wu #define TMZ_VADDR(mz) ((mz)->addr) 2968eb13a1SJiawen Wu #define TDEV_NAME(eth_dev) ((eth_dev)->device->name) 3068eb13a1SJiawen Wu 3168eb13a1SJiawen Wu #define ASSERT(x) do { \ 3268eb13a1SJiawen Wu if (!(x)) \ 3368eb13a1SJiawen Wu PMD_DRV_LOG(ERR, "NGBE: %d", x); \ 3468eb13a1SJiawen Wu } while (0) 3568eb13a1SJiawen Wu 3668eb13a1SJiawen Wu #define ngbe_unused __rte_unused 3768eb13a1SJiawen Wu 3868eb13a1SJiawen Wu #define usec_delay(x) rte_delay_us(x) 3968eb13a1SJiawen Wu #define msec_delay(x) rte_delay_ms(x) 4068eb13a1SJiawen Wu #define usleep(x) rte_delay_us(x) 4168eb13a1SJiawen Wu #define msleep(x) rte_delay_ms(x) 4268eb13a1SJiawen Wu 4368eb13a1SJiawen Wu #define FALSE 0 4468eb13a1SJiawen Wu #define TRUE 1 4568eb13a1SJiawen Wu 4668eb13a1SJiawen Wu #ifndef false 4768eb13a1SJiawen Wu #define false 0 4868eb13a1SJiawen Wu #endif 4968eb13a1SJiawen Wu #ifndef true 5068eb13a1SJiawen Wu #define true 1 5168eb13a1SJiawen Wu #endif 5268eb13a1SJiawen Wu #define min(a, b) RTE_MIN(a, b) 5368eb13a1SJiawen Wu #define max(a, b) RTE_MAX(a, b) 5468eb13a1SJiawen Wu 5568eb13a1SJiawen Wu /* Bunch of defines for shared code bogosity */ 5668eb13a1SJiawen Wu 5768eb13a1SJiawen Wu static inline void UNREFERENCED(const char *a __rte_unused, ...) {} 58*fd51012dSAndre Muezerie #define UNREFERENCED_PARAMETER(...) UNREFERENCED("", ##__VA_ARGS__) 5968eb13a1SJiawen Wu 6068eb13a1SJiawen Wu #define STATIC static 6168eb13a1SJiawen Wu 6268eb13a1SJiawen Wu typedef uint8_t u8; 6368eb13a1SJiawen Wu typedef int8_t s8; 6468eb13a1SJiawen Wu typedef uint16_t u16; 6568eb13a1SJiawen Wu typedef int16_t s16; 6668eb13a1SJiawen Wu typedef uint32_t u32; 6768eb13a1SJiawen Wu typedef int32_t s32; 6868eb13a1SJiawen Wu typedef uint64_t u64; 6968eb13a1SJiawen Wu typedef int64_t s64; 7068eb13a1SJiawen Wu 7168eb13a1SJiawen Wu /* Little Endian defines */ 7268eb13a1SJiawen Wu #ifndef __le16 7368eb13a1SJiawen Wu #define __le16 u16 7468eb13a1SJiawen Wu #define __le32 u32 7568eb13a1SJiawen Wu #define __le64 u64 7668eb13a1SJiawen Wu #endif 7768eb13a1SJiawen Wu #ifndef __be16 7868eb13a1SJiawen Wu #define __be16 u16 7968eb13a1SJiawen Wu #define __be32 u32 8068eb13a1SJiawen Wu #define __be64 u64 8168eb13a1SJiawen Wu #endif 8268eb13a1SJiawen Wu 8368eb13a1SJiawen Wu /* Bit shift and mask */ 8468eb13a1SJiawen Wu #define BIT_MASK4 (0x0000000FU) 8568eb13a1SJiawen Wu #define BIT_MASK8 (0x000000FFU) 8668eb13a1SJiawen Wu #define BIT_MASK16 (0x0000FFFFU) 8768eb13a1SJiawen Wu #define BIT_MASK32 (0xFFFFFFFFU) 8868eb13a1SJiawen Wu #define BIT_MASK64 (0xFFFFFFFFFFFFFFFFUL) 8968eb13a1SJiawen Wu 9068eb13a1SJiawen Wu #ifndef cpu_to_le32 9168eb13a1SJiawen Wu #define cpu_to_le16(v) rte_cpu_to_le_16((u16)(v)) 9268eb13a1SJiawen Wu #define cpu_to_le32(v) rte_cpu_to_le_32((u32)(v)) 9368eb13a1SJiawen Wu #define cpu_to_le64(v) rte_cpu_to_le_64((u64)(v)) 9468eb13a1SJiawen Wu #define le_to_cpu16(v) rte_le_to_cpu_16((u16)(v)) 9568eb13a1SJiawen Wu #define le_to_cpu32(v) rte_le_to_cpu_32((u32)(v)) 9668eb13a1SJiawen Wu #define le_to_cpu64(v) rte_le_to_cpu_64((u64)(v)) 9768eb13a1SJiawen Wu 9868eb13a1SJiawen Wu #define cpu_to_be16(v) rte_cpu_to_be_16((u16)(v)) 9968eb13a1SJiawen Wu #define cpu_to_be32(v) rte_cpu_to_be_32((u32)(v)) 10068eb13a1SJiawen Wu #define cpu_to_be64(v) rte_cpu_to_be_64((u64)(v)) 10168eb13a1SJiawen Wu #define be_to_cpu16(v) rte_be_to_cpu_16((u16)(v)) 10268eb13a1SJiawen Wu #define be_to_cpu32(v) rte_be_to_cpu_32((u32)(v)) 10368eb13a1SJiawen Wu #define be_to_cpu64(v) rte_be_to_cpu_64((u64)(v)) 10468eb13a1SJiawen Wu 10568eb13a1SJiawen Wu #define le_to_be16(v) rte_bswap16((u16)(v)) 10668eb13a1SJiawen Wu #define le_to_be32(v) rte_bswap32((u32)(v)) 10768eb13a1SJiawen Wu #define le_to_be64(v) rte_bswap64((u64)(v)) 10868eb13a1SJiawen Wu #define be_to_le16(v) rte_bswap16((u16)(v)) 10968eb13a1SJiawen Wu #define be_to_le32(v) rte_bswap32((u32)(v)) 11068eb13a1SJiawen Wu #define be_to_le64(v) rte_bswap64((u64)(v)) 11168eb13a1SJiawen Wu 11268eb13a1SJiawen Wu #define npu_to_le16(v) (v) 11368eb13a1SJiawen Wu #define npu_to_le32(v) (v) 11468eb13a1SJiawen Wu #define npu_to_le64(v) (v) 11568eb13a1SJiawen Wu #define le_to_npu16(v) (v) 11668eb13a1SJiawen Wu #define le_to_npu32(v) (v) 11768eb13a1SJiawen Wu #define le_to_npu64(v) (v) 11868eb13a1SJiawen Wu 11968eb13a1SJiawen Wu #define npu_to_be16(v) le_to_be16((u16)(v)) 12068eb13a1SJiawen Wu #define npu_to_be32(v) le_to_be32((u32)(v)) 12168eb13a1SJiawen Wu #define npu_to_be64(v) le_to_be64((u64)(v)) 12268eb13a1SJiawen Wu #define be_to_npu16(v) be_to_le16((u16)(v)) 12368eb13a1SJiawen Wu #define be_to_npu32(v) be_to_le32((u32)(v)) 12468eb13a1SJiawen Wu #define be_to_npu64(v) be_to_le64((u64)(v)) 12568eb13a1SJiawen Wu #endif /* !cpu_to_le32 */ 12668eb13a1SJiawen Wu 12768eb13a1SJiawen Wu static inline u16 REVERT_BIT_MASK16(u16 mask) 12868eb13a1SJiawen Wu { 12968eb13a1SJiawen Wu mask = ((mask & 0x5555) << 1) | ((mask & 0xAAAA) >> 1); 13068eb13a1SJiawen Wu mask = ((mask & 0x3333) << 2) | ((mask & 0xCCCC) >> 2); 13168eb13a1SJiawen Wu mask = ((mask & 0x0F0F) << 4) | ((mask & 0xF0F0) >> 4); 13268eb13a1SJiawen Wu return ((mask & 0x00FF) << 8) | ((mask & 0xFF00) >> 8); 13368eb13a1SJiawen Wu } 13468eb13a1SJiawen Wu 13568eb13a1SJiawen Wu static inline u32 REVERT_BIT_MASK32(u32 mask) 13668eb13a1SJiawen Wu { 13768eb13a1SJiawen Wu mask = ((mask & 0x55555555) << 1) | ((mask & 0xAAAAAAAA) >> 1); 13868eb13a1SJiawen Wu mask = ((mask & 0x33333333) << 2) | ((mask & 0xCCCCCCCC) >> 2); 13968eb13a1SJiawen Wu mask = ((mask & 0x0F0F0F0F) << 4) | ((mask & 0xF0F0F0F0) >> 4); 14068eb13a1SJiawen Wu mask = ((mask & 0x00FF00FF) << 8) | ((mask & 0xFF00FF00) >> 8); 14168eb13a1SJiawen Wu return ((mask & 0x0000FFFF) << 16) | ((mask & 0xFFFF0000) >> 16); 14268eb13a1SJiawen Wu } 14368eb13a1SJiawen Wu 14468eb13a1SJiawen Wu static inline u64 REVERT_BIT_MASK64(u64 mask) 14568eb13a1SJiawen Wu { 14668eb13a1SJiawen Wu mask = ((mask & 0x5555555555555555) << 1) | 14768eb13a1SJiawen Wu ((mask & 0xAAAAAAAAAAAAAAAA) >> 1); 14868eb13a1SJiawen Wu mask = ((mask & 0x3333333333333333) << 2) | 14968eb13a1SJiawen Wu ((mask & 0xCCCCCCCCCCCCCCCC) >> 2); 15068eb13a1SJiawen Wu mask = ((mask & 0x0F0F0F0F0F0F0F0F) << 4) | 15168eb13a1SJiawen Wu ((mask & 0xF0F0F0F0F0F0F0F0) >> 4); 15268eb13a1SJiawen Wu mask = ((mask & 0x00FF00FF00FF00FF) << 8) | 15368eb13a1SJiawen Wu ((mask & 0xFF00FF00FF00FF00) >> 8); 15468eb13a1SJiawen Wu mask = ((mask & 0x0000FFFF0000FFFF) << 16) | 15568eb13a1SJiawen Wu ((mask & 0xFFFF0000FFFF0000) >> 16); 15668eb13a1SJiawen Wu return ((mask & 0x00000000FFFFFFFF) << 32) | 15768eb13a1SJiawen Wu ((mask & 0xFFFFFFFF00000000) >> 32); 15868eb13a1SJiawen Wu } 15968eb13a1SJiawen Wu 16068eb13a1SJiawen Wu #define IOMEM 16168eb13a1SJiawen Wu 16268eb13a1SJiawen Wu #define prefetch(x) rte_prefetch0(x) 16368eb13a1SJiawen Wu 16468eb13a1SJiawen Wu #define ARRAY_SIZE(x) ((int32_t)RTE_DIM(x)) 16568eb13a1SJiawen Wu 16668eb13a1SJiawen Wu #ifndef MAX_UDELAY_MS 16768eb13a1SJiawen Wu #define MAX_UDELAY_MS 5 16868eb13a1SJiawen Wu #endif 16968eb13a1SJiawen Wu 17068eb13a1SJiawen Wu #define ETH_ADDR_LEN 6 17168eb13a1SJiawen Wu #define ETH_FCS_LEN 4 17268eb13a1SJiawen Wu 17368eb13a1SJiawen Wu /* Check whether address is multicast. This is little-endian specific check.*/ 17468eb13a1SJiawen Wu #define NGBE_IS_MULTICAST(address) \ 17568eb13a1SJiawen Wu rte_is_multicast_ether_addr(address) 17668eb13a1SJiawen Wu 17768eb13a1SJiawen Wu /* Check whether an address is broadcast. */ 17868eb13a1SJiawen Wu #define NGBE_IS_BROADCAST(address) \ 17968eb13a1SJiawen Wu rte_is_broadcast_ether_addr(address) 18068eb13a1SJiawen Wu 18168eb13a1SJiawen Wu #define ETH_P_8021Q 0x8100 18268eb13a1SJiawen Wu #define ETH_P_8021AD 0x88A8 18368eb13a1SJiawen Wu 18468eb13a1SJiawen Wu #endif /* _NGBE_OS_H_ */ 185