d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef ECORE_COMMON_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define ECORE_COMMON_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define ECORE_SWCID_SHIFT 17
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define ECORE_SWCID_MASK ((0x1 << ECORE_SWCID_SHIFT) - 1)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Manipulate a bit vector defined as an array of u64 */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Number of bits in one sge_mask array element */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BIT_VEC64_ELEM_SZ 64
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BIT_VEC64_ELEM_SHIFT 6
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BIT_VEC64_ELEM_MASK ((u64)BIT_VEC64_ELEM_SZ - 1)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define __BIT_VEC64_SET_BIT(el, bit) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi el = ((el) | ((u64)0x1 << (bit))); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } while (0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define __BIT_VEC64_CLEAR_BIT(el, bit) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi el = ((el) & (~((u64)0x1 << (bit)))); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } while (0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BIT_VEC64_SET_BIT(vec64, idx) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi __BIT_VEC64_SET_BIT((vec64)[(idx) >> BIT_VEC64_ELEM_SHIFT], \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (idx) & BIT_VEC64_ELEM_MASK)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BIT_VEC64_CLEAR_BIT(vec64, idx) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi __BIT_VEC64_CLEAR_BIT((vec64)[(idx) >> BIT_VEC64_ELEM_SHIFT], \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (idx) & BIT_VEC64_ELEM_MASK)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BIT_VEC64_TEST_BIT(vec64, idx) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (((vec64)[(idx) >> BIT_VEC64_ELEM_SHIFT] >> \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((idx) & BIT_VEC64_ELEM_MASK)) & 0x1)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Creates a bitmask of all ones in less significant bits.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi idx - index of the most significant bit in the created mask */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BIT_VEC64_ONES_MASK(idx) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (((u64)0x1 << (((idx) & BIT_VEC64_ELEM_MASK) + 1)) - 1)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BIT_VEC64_ELEM_ONE_MASK ((u64)(~0))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic __inline void __storm_memset_struct(struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 addr, size_t size, u32 *data)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 i;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi for (i = 0; i < size/4; i++)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi REG_WR(pdev, addr + (i * 4), data[i]);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MC_HASH_SIZE 8
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MC_HASH_OFFSET(bp, i) (BAR_TSTRORM_INTMEM + \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi TSTORM_APPROXIMATE_MATCH_MULTICAST_FILTERING_OFFSET(FUNC_ID(pdev)) + i*4)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define ECORE_MAX_MULTICAST 64
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define ECORE_MAX_EMUL_MULTI 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Fill in a MAC address the way the FW likes it
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param fw_hi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param fw_mid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param fw_lo
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param mac
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic __inline void ecore_set_fw_mac_addr(u16 *fw_hi, u16 *fw_mid, u16 *fw_lo,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8 *mac)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((u8 *)fw_hi)[0] = mac[1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((u8 *)fw_hi)[1] = mac[0];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((u8 *)fw_mid)[0] = mac[3];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((u8 *)fw_mid)[1] = mac[2];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((u8 *)fw_lo)[0] = mac[5];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((u8 *)fw_lo)[1] = mac[4];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi