Lines Matching refs:ale_entry
54 static inline int cpsw_ale_get_field(u32 *ale_entry, u32 start, u32 bits) in cpsw_ale_get_field() argument
61 return (ale_entry[idx] >> start) & BITMASK(bits); in cpsw_ale_get_field()
64 static inline void cpsw_ale_set_field(u32 *ale_entry, u32 start, u32 bits, in cpsw_ale_set_field() argument
73 ale_entry[idx] &= ~(BITMASK(bits) << start); in cpsw_ale_set_field()
74 ale_entry[idx] |= (value << start); in cpsw_ale_set_field()
78 static inline int cpsw_ale_get_##name(u32 *ale_entry) \
80 return cpsw_ale_get_field(ale_entry, start, bits); \
82 static inline void cpsw_ale_set_##name(u32 *ale_entry, u32 value) \
84 cpsw_ale_set_field(ale_entry, start, bits, value); \
103 static inline void cpsw_ale_get_addr(u32 *ale_entry, u8 *addr) in cpsw_ale_get_addr() argument
108 addr[i] = cpsw_ale_get_field(ale_entry, 40 - 8*i, 8); in cpsw_ale_get_addr()
111 static inline void cpsw_ale_set_addr(u32 *ale_entry, u8 *addr) in cpsw_ale_set_addr() argument
116 cpsw_ale_set_field(ale_entry, 40 - 8*i, 8, addr[i]); in cpsw_ale_set_addr()
119 static int cpsw_ale_read(struct cpsw_ale *ale, int idx, u32 *ale_entry) in cpsw_ale_read() argument
128 ale_entry[i] = __raw_readl(ale->params.ale_regs + in cpsw_ale_read()
134 static int cpsw_ale_write(struct cpsw_ale *ale, int idx, u32 *ale_entry) in cpsw_ale_write() argument
141 __raw_writel(ale_entry[i], ale->params.ale_regs + in cpsw_ale_write()
152 u32 ale_entry[ALE_ENTRY_WORDS]; in cpsw_ale_match_addr() local
158 cpsw_ale_read(ale, idx, ale_entry); in cpsw_ale_match_addr()
159 type = cpsw_ale_get_entry_type(ale_entry); in cpsw_ale_match_addr()
162 if (cpsw_ale_get_vlan_id(ale_entry) != vid) in cpsw_ale_match_addr()
164 cpsw_ale_get_addr(ale_entry, entry_addr); in cpsw_ale_match_addr()
173 u32 ale_entry[ALE_ENTRY_WORDS]; in cpsw_ale_match_vlan() local
177 cpsw_ale_read(ale, idx, ale_entry); in cpsw_ale_match_vlan()
178 type = cpsw_ale_get_entry_type(ale_entry); in cpsw_ale_match_vlan()
181 if (cpsw_ale_get_vlan_id(ale_entry) == vid) in cpsw_ale_match_vlan()
189 u32 ale_entry[ALE_ENTRY_WORDS]; in cpsw_ale_match_free() local
193 cpsw_ale_read(ale, idx, ale_entry); in cpsw_ale_match_free()
194 type = cpsw_ale_get_entry_type(ale_entry); in cpsw_ale_match_free()
203 u32 ale_entry[ALE_ENTRY_WORDS]; in cpsw_ale_find_ageable() local
207 cpsw_ale_read(ale, idx, ale_entry); in cpsw_ale_find_ageable()
208 type = cpsw_ale_get_entry_type(ale_entry); in cpsw_ale_find_ageable()
211 if (cpsw_ale_get_mcast(ale_entry)) in cpsw_ale_find_ageable()
213 type = cpsw_ale_get_ucast_type(ale_entry); in cpsw_ale_find_ageable()
221 static void cpsw_ale_flush_mcast(struct cpsw_ale *ale, u32 *ale_entry, in cpsw_ale_flush_mcast() argument
226 mask = cpsw_ale_get_port_mask(ale_entry); in cpsw_ale_flush_mcast()
233 cpsw_ale_set_port_mask(ale_entry, mask); in cpsw_ale_flush_mcast()
235 cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_FREE); in cpsw_ale_flush_mcast()
240 u32 ale_entry[ALE_ENTRY_WORDS]; in cpsw_ale_flush_multicast() local
244 cpsw_ale_read(ale, idx, ale_entry); in cpsw_ale_flush_multicast()
245 ret = cpsw_ale_get_entry_type(ale_entry); in cpsw_ale_flush_multicast()
254 if (vid != -1 && cpsw_ale_get_vlan_id(ale_entry) != vid) in cpsw_ale_flush_multicast()
257 if (cpsw_ale_get_mcast(ale_entry)) { in cpsw_ale_flush_multicast()
260 cpsw_ale_get_addr(ale_entry, addr); in cpsw_ale_flush_multicast()
262 cpsw_ale_flush_mcast(ale, ale_entry, port_mask); in cpsw_ale_flush_multicast()
265 cpsw_ale_write(ale, idx, ale_entry); in cpsw_ale_flush_multicast()
271 static void cpsw_ale_flush_ucast(struct cpsw_ale *ale, u32 *ale_entry, in cpsw_ale_flush_ucast() argument
276 port = cpsw_ale_get_port_num(ale_entry); in cpsw_ale_flush_ucast()
279 cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_FREE); in cpsw_ale_flush_ucast()
284 u32 ale_entry[ALE_ENTRY_WORDS]; in cpsw_ale_flush() local
288 cpsw_ale_read(ale, idx, ale_entry); in cpsw_ale_flush()
289 ret = cpsw_ale_get_entry_type(ale_entry); in cpsw_ale_flush()
293 if (cpsw_ale_get_mcast(ale_entry)) in cpsw_ale_flush()
294 cpsw_ale_flush_mcast(ale, ale_entry, port_mask); in cpsw_ale_flush()
296 cpsw_ale_flush_ucast(ale, ale_entry, port_mask); in cpsw_ale_flush()
298 cpsw_ale_write(ale, idx, ale_entry); in cpsw_ale_flush()
304 static inline void cpsw_ale_set_vlan_entry_type(u32 *ale_entry, in cpsw_ale_set_vlan_entry_type() argument
308 cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_VLAN_ADDR); in cpsw_ale_set_vlan_entry_type()
309 cpsw_ale_set_vlan_id(ale_entry, vid); in cpsw_ale_set_vlan_entry_type()
311 cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_ADDR); in cpsw_ale_set_vlan_entry_type()
318 u32 ale_entry[ALE_ENTRY_WORDS] = {0, 0, 0}; in cpsw_ale_add_ucast() local
321 cpsw_ale_set_vlan_entry_type(ale_entry, flags, vid); in cpsw_ale_add_ucast()
323 cpsw_ale_set_addr(ale_entry, addr); in cpsw_ale_add_ucast()
324 cpsw_ale_set_ucast_type(ale_entry, ALE_UCAST_PERSISTANT); in cpsw_ale_add_ucast()
325 cpsw_ale_set_secure(ale_entry, (flags & ALE_SECURE) ? 1 : 0); in cpsw_ale_add_ucast()
326 cpsw_ale_set_blocked(ale_entry, (flags & ALE_BLOCKED) ? 1 : 0); in cpsw_ale_add_ucast()
327 cpsw_ale_set_port_num(ale_entry, port); in cpsw_ale_add_ucast()
337 cpsw_ale_write(ale, idx, ale_entry); in cpsw_ale_add_ucast()
345 u32 ale_entry[ALE_ENTRY_WORDS] = {0, 0, 0}; in cpsw_ale_del_ucast() local
352 cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_FREE); in cpsw_ale_del_ucast()
353 cpsw_ale_write(ale, idx, ale_entry); in cpsw_ale_del_ucast()
361 u32 ale_entry[ALE_ENTRY_WORDS] = {0, 0, 0}; in cpsw_ale_add_mcast() local
366 cpsw_ale_read(ale, idx, ale_entry); in cpsw_ale_add_mcast()
368 cpsw_ale_set_vlan_entry_type(ale_entry, flags, vid); in cpsw_ale_add_mcast()
370 cpsw_ale_set_addr(ale_entry, addr); in cpsw_ale_add_mcast()
371 cpsw_ale_set_super(ale_entry, (flags & ALE_BLOCKED) ? 1 : 0); in cpsw_ale_add_mcast()
372 cpsw_ale_set_mcast_state(ale_entry, mcast_state); in cpsw_ale_add_mcast()
374 mask = cpsw_ale_get_port_mask(ale_entry); in cpsw_ale_add_mcast()
376 cpsw_ale_set_port_mask(ale_entry, port_mask); in cpsw_ale_add_mcast()
385 cpsw_ale_write(ale, idx, ale_entry); in cpsw_ale_add_mcast()
393 u32 ale_entry[ALE_ENTRY_WORDS] = {0, 0, 0}; in cpsw_ale_del_mcast() local
400 cpsw_ale_read(ale, idx, ale_entry); in cpsw_ale_del_mcast()
403 cpsw_ale_set_port_mask(ale_entry, port_mask); in cpsw_ale_del_mcast()
405 cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_FREE); in cpsw_ale_del_mcast()
407 cpsw_ale_write(ale, idx, ale_entry); in cpsw_ale_del_mcast()
415 u32 ale_entry[ALE_ENTRY_WORDS] = {0, 0, 0}; in cpsw_ale_add_vlan() local
420 cpsw_ale_read(ale, idx, ale_entry); in cpsw_ale_add_vlan()
422 cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_VLAN); in cpsw_ale_add_vlan()
423 cpsw_ale_set_vlan_id(ale_entry, vid); in cpsw_ale_add_vlan()
425 cpsw_ale_set_vlan_untag_force(ale_entry, untag); in cpsw_ale_add_vlan()
426 cpsw_ale_set_vlan_reg_mcast(ale_entry, reg_mcast); in cpsw_ale_add_vlan()
427 cpsw_ale_set_vlan_unreg_mcast(ale_entry, unreg_mcast); in cpsw_ale_add_vlan()
428 cpsw_ale_set_vlan_member_list(ale_entry, port); in cpsw_ale_add_vlan()
437 cpsw_ale_write(ale, idx, ale_entry); in cpsw_ale_add_vlan()
444 u32 ale_entry[ALE_ENTRY_WORDS] = {0, 0, 0}; in cpsw_ale_del_vlan() local
451 cpsw_ale_read(ale, idx, ale_entry); in cpsw_ale_del_vlan()
454 cpsw_ale_set_vlan_member_list(ale_entry, port_mask); in cpsw_ale_del_vlan()
456 cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_FREE); in cpsw_ale_del_vlan()
458 cpsw_ale_write(ale, idx, ale_entry); in cpsw_ale_del_vlan()
465 u32 ale_entry[ALE_ENTRY_WORDS]; in cpsw_ale_set_allmulti() local
477 cpsw_ale_read(ale, idx, ale_entry); in cpsw_ale_set_allmulti()
478 type = cpsw_ale_get_entry_type(ale_entry); in cpsw_ale_set_allmulti()
482 unreg_mcast = cpsw_ale_get_vlan_unreg_mcast(ale_entry); in cpsw_ale_set_allmulti()
487 cpsw_ale_set_vlan_unreg_mcast(ale_entry, unreg_mcast); in cpsw_ale_set_allmulti()
488 cpsw_ale_write(ale, idx, ale_entry); in cpsw_ale_set_allmulti()