xref: /titanic_51/usr/src/uts/common/io/bnxe/577xx/drivers/common/ecore/ecore_common.h (revision d14abf155341d55053c76eeec58b787a456b753b)
1 #ifndef ECORE_COMMON_H
2 #define ECORE_COMMON_H
3 
4 #define ECORE_SWCID_SHIFT	17
5 #define ECORE_SWCID_MASK	((0x1 << ECORE_SWCID_SHIFT) - 1)
6 
7 
8 /* Manipulate a bit vector defined as an array of u64 */
9 
10 /* Number of bits in one sge_mask array element */
11 #define BIT_VEC64_ELEM_SZ		64
12 #define BIT_VEC64_ELEM_SHIFT		6
13 #define BIT_VEC64_ELEM_MASK		((u64)BIT_VEC64_ELEM_SZ - 1)
14 
15 
16 #define __BIT_VEC64_SET_BIT(el, bit) \
17 	do { \
18 		el = ((el) | ((u64)0x1 << (bit))); \
19 	} while (0)
20 
21 #define __BIT_VEC64_CLEAR_BIT(el, bit) \
22 	do { \
23 		el = ((el) & (~((u64)0x1 << (bit)))); \
24 	} while (0)
25 
26 
27 #define BIT_VEC64_SET_BIT(vec64, idx) \
28 	__BIT_VEC64_SET_BIT((vec64)[(idx) >> BIT_VEC64_ELEM_SHIFT], \
29 			   (idx) & BIT_VEC64_ELEM_MASK)
30 
31 #define BIT_VEC64_CLEAR_BIT(vec64, idx) \
32 	__BIT_VEC64_CLEAR_BIT((vec64)[(idx) >> BIT_VEC64_ELEM_SHIFT], \
33 			     (idx) & BIT_VEC64_ELEM_MASK)
34 
35 #define BIT_VEC64_TEST_BIT(vec64, idx) \
36 	(((vec64)[(idx) >> BIT_VEC64_ELEM_SHIFT] >> \
37 	((idx) & BIT_VEC64_ELEM_MASK)) & 0x1)
38 
39 /* Creates a bitmask of all ones in less significant bits.
40    idx - index of the most significant bit in the created mask */
41 #define BIT_VEC64_ONES_MASK(idx) \
42 		(((u64)0x1 << (((idx) & BIT_VEC64_ELEM_MASK) + 1)) - 1)
43 #define BIT_VEC64_ELEM_ONE_MASK	((u64)(~0))
44 
45 
46 static __inline void __storm_memset_struct(struct _lm_device_t *pdev,
47 					 u32 addr, size_t size, u32 *data)
48 {
49 	u8 i;
50 	for (i = 0; i < size/4; i++)
51 		REG_WR(pdev, addr + (i * 4), data[i]);
52 }
53 
54 #define MC_HASH_SIZE			8
55 #define MC_HASH_OFFSET(bp, i)		(BAR_TSTRORM_INTMEM + \
56 	TSTORM_APPROXIMATE_MATCH_MULTICAST_FILTERING_OFFSET(FUNC_ID(pdev)) + i*4)
57 
58 #define ECORE_MAX_MULTICAST		    64
59 #define ECORE_MAX_EMUL_MULTI		1
60 
61 
62 /**
63  * Fill in a MAC address the way the FW likes it
64  *
65  * @param fw_hi
66  * @param fw_mid
67  * @param fw_lo
68  * @param mac
69  */
70 static __inline void ecore_set_fw_mac_addr(u16 *fw_hi, u16 *fw_mid, u16 *fw_lo,
71 					 u8 *mac)
72 {
73 	((u8 *)fw_hi)[0]  = mac[1];
74 	((u8 *)fw_hi)[1]  = mac[0];
75 	((u8 *)fw_mid)[0] = mac[3];
76 	((u8 *)fw_mid)[1] = mac[2];
77 	((u8 *)fw_lo)[0]  = mac[5];
78 	((u8 *)fw_lo)[1]  = mac[4];
79 }
80 
81 
82 #endif
83 
84