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