Lines Matching refs:ale_entry

242 static inline int cpsw_ale_get_field(u32 *ale_entry, u32 start, u32 bits)  in cpsw_ale_get_field()  argument
249 return (ale_entry[idx] >> start) & BITMASK(bits); in cpsw_ale_get_field()
252 static inline void cpsw_ale_set_field(u32 *ale_entry, u32 start, u32 bits, in cpsw_ale_set_field() argument
261 ale_entry[idx] &= ~(BITMASK(bits) << start); in cpsw_ale_set_field()
262 ale_entry[idx] |= (value << start); in cpsw_ale_set_field()
266 static inline int cpsw_ale_get_##name(u32 *ale_entry) \
268 return cpsw_ale_get_field(ale_entry, start, bits); \
270 static inline void cpsw_ale_set_##name(u32 *ale_entry, u32 value) \
272 cpsw_ale_set_field(ale_entry, start, bits, value); \
285 static inline void cpsw_ale_get_addr(u32 *ale_entry, u8 *addr) in cpsw_ale_get_addr() argument
290 addr[i] = cpsw_ale_get_field(ale_entry, 40 - 8*i, 8); in cpsw_ale_get_addr()
293 static inline void cpsw_ale_set_addr(u32 *ale_entry, const u8 *addr) in cpsw_ale_set_addr() argument
298 cpsw_ale_set_field(ale_entry, 40 - 8*i, 8, addr[i]); in cpsw_ale_set_addr()
301 static int cpsw_ale_read(struct cpsw_priv *priv, int idx, u32 *ale_entry) in cpsw_ale_read() argument
308 ale_entry[i] = __raw_readl(priv->ale_regs + ALE_TABLE + 4 * i); in cpsw_ale_read()
313 static int cpsw_ale_write(struct cpsw_priv *priv, int idx, u32 *ale_entry) in cpsw_ale_write() argument
318 __raw_writel(ale_entry[i], priv->ale_regs + ALE_TABLE + 4 * i); in cpsw_ale_write()
327 u32 ale_entry[ALE_ENTRY_WORDS]; in cpsw_ale_match_addr() local
333 cpsw_ale_read(priv, idx, ale_entry); in cpsw_ale_match_addr()
334 type = cpsw_ale_get_entry_type(ale_entry); in cpsw_ale_match_addr()
337 cpsw_ale_get_addr(ale_entry, entry_addr); in cpsw_ale_match_addr()
346 u32 ale_entry[ALE_ENTRY_WORDS]; in cpsw_ale_match_free() local
350 cpsw_ale_read(priv, idx, ale_entry); in cpsw_ale_match_free()
351 type = cpsw_ale_get_entry_type(ale_entry); in cpsw_ale_match_free()
360 u32 ale_entry[ALE_ENTRY_WORDS]; in cpsw_ale_find_ageable() local
364 cpsw_ale_read(priv, idx, ale_entry); in cpsw_ale_find_ageable()
365 type = cpsw_ale_get_entry_type(ale_entry); in cpsw_ale_find_ageable()
368 if (cpsw_ale_get_mcast(ale_entry)) in cpsw_ale_find_ageable()
370 type = cpsw_ale_get_ucast_type(ale_entry); in cpsw_ale_find_ageable()
381 u32 ale_entry[ALE_ENTRY_WORDS] = {0, 0, 0}; in cpsw_ale_add_ucast() local
384 cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_ADDR); in cpsw_ale_add_ucast()
385 cpsw_ale_set_addr(ale_entry, addr); in cpsw_ale_add_ucast()
386 cpsw_ale_set_ucast_type(ale_entry, ALE_UCAST_PERSISTANT); in cpsw_ale_add_ucast()
387 cpsw_ale_set_secure(ale_entry, (flags & ALE_SECURE) ? 1 : 0); in cpsw_ale_add_ucast()
388 cpsw_ale_set_blocked(ale_entry, (flags & ALE_BLOCKED) ? 1 : 0); in cpsw_ale_add_ucast()
389 cpsw_ale_set_port_num(ale_entry, port); in cpsw_ale_add_ucast()
399 cpsw_ale_write(priv, idx, ale_entry); in cpsw_ale_add_ucast()
406 u32 ale_entry[ALE_ENTRY_WORDS] = {0, 0, 0}; in cpsw_ale_add_mcast() local
411 cpsw_ale_read(priv, idx, ale_entry); in cpsw_ale_add_mcast()
413 cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_ADDR); in cpsw_ale_add_mcast()
414 cpsw_ale_set_addr(ale_entry, addr); in cpsw_ale_add_mcast()
415 cpsw_ale_set_mcast_state(ale_entry, ALE_MCAST_FWD_2); in cpsw_ale_add_mcast()
417 mask = cpsw_ale_get_port_mask(ale_entry); in cpsw_ale_add_mcast()
419 cpsw_ale_set_port_mask(ale_entry, port_mask); in cpsw_ale_add_mcast()
428 cpsw_ale_write(priv, idx, ale_entry); in cpsw_ale_add_mcast()