xref: /dpdk/drivers/net/ngbe/base/ngbe_osdep.h (revision fd51012de5369679e807be1d6a81d63ef15015ce)
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