Lines Matching full:vid
26 static void lan966x_vlan_set_mask(struct lan966x *lan966x, u16 vid) in lan966x_vlan_set_mask() argument
28 u16 mask = lan966x->vlan_mask[vid]; in lan966x_vlan_set_mask()
33 /* Set flags and the VID to configure */ in lan966x_vlan_set_mask()
35 ANA_VLANTIDX_V_INDEX_SET(vid), in lan966x_vlan_set_mask()
54 static void lan966x_vlan_port_add_vlan_mask(struct lan966x_port *port, u16 vid) in lan966x_vlan_port_add_vlan_mask() argument
59 lan966x->vlan_mask[vid] |= BIT(p); in lan966x_vlan_port_add_vlan_mask()
60 lan966x_vlan_set_mask(lan966x, vid); in lan966x_vlan_port_add_vlan_mask()
63 static void lan966x_vlan_port_del_vlan_mask(struct lan966x_port *port, u16 vid) in lan966x_vlan_port_del_vlan_mask() argument
68 lan966x->vlan_mask[vid] &= ~BIT(p); in lan966x_vlan_port_del_vlan_mask()
69 lan966x_vlan_set_mask(lan966x, vid); in lan966x_vlan_port_del_vlan_mask()
72 static bool lan966x_vlan_port_any_vlan_mask(struct lan966x *lan966x, u16 vid) in lan966x_vlan_port_any_vlan_mask() argument
74 return !!(lan966x->vlan_mask[vid] & ~BIT(CPU_PORT)); in lan966x_vlan_port_any_vlan_mask()
77 static void lan966x_vlan_cpu_add_vlan_mask(struct lan966x *lan966x, u16 vid) in lan966x_vlan_cpu_add_vlan_mask() argument
79 lan966x->vlan_mask[vid] |= BIT(CPU_PORT); in lan966x_vlan_cpu_add_vlan_mask()
80 lan966x_vlan_set_mask(lan966x, vid); in lan966x_vlan_cpu_add_vlan_mask()
83 static void lan966x_vlan_cpu_del_vlan_mask(struct lan966x *lan966x, u16 vid) in lan966x_vlan_cpu_del_vlan_mask() argument
85 lan966x->vlan_mask[vid] &= ~BIT(CPU_PORT); in lan966x_vlan_cpu_del_vlan_mask()
86 lan966x_vlan_set_mask(lan966x, vid); in lan966x_vlan_cpu_del_vlan_mask()
89 static void lan966x_vlan_cpu_add_cpu_vlan_mask(struct lan966x *lan966x, u16 vid) in lan966x_vlan_cpu_add_cpu_vlan_mask() argument
91 __set_bit(vid, lan966x->cpu_vlan_mask); in lan966x_vlan_cpu_add_cpu_vlan_mask()
94 static void lan966x_vlan_cpu_del_cpu_vlan_mask(struct lan966x *lan966x, u16 vid) in lan966x_vlan_cpu_del_cpu_vlan_mask() argument
96 __clear_bit(vid, lan966x->cpu_vlan_mask); in lan966x_vlan_cpu_del_cpu_vlan_mask()
99 bool lan966x_vlan_cpu_member_cpu_vlan_mask(struct lan966x *lan966x, u16 vid) in lan966x_vlan_cpu_member_cpu_vlan_mask() argument
101 return test_bit(vid, lan966x->cpu_vlan_mask); in lan966x_vlan_cpu_member_cpu_vlan_mask()
114 int lan966x_vlan_port_set_vid(struct lan966x_port *port, u16 vid, in lan966x_vlan_port_set_vid() argument
120 if (untagged && port->vid != vid) { in lan966x_vlan_port_set_vid()
121 if (port->vid) { in lan966x_vlan_port_set_vid()
124 port->vid); in lan966x_vlan_port_set_vid()
127 port->vid = vid; in lan966x_vlan_port_set_vid()
132 port->pvid = vid; in lan966x_vlan_port_set_vid()
137 static void lan966x_vlan_port_remove_vid(struct lan966x_port *port, u16 vid) in lan966x_vlan_port_remove_vid() argument
139 if (port->pvid == vid) in lan966x_vlan_port_remove_vid()
142 if (port->vid == vid) in lan966x_vlan_port_remove_vid()
143 port->vid = 0; in lan966x_vlan_port_remove_vid()
164 /* Tag all frames except when VID=0*/ in lan966x_vlan_port_rew_host()
214 if (port->vid) in lan966x_vlan_port_apply()
215 /* Tag all frames except when VID == DEFAULT_VLAN */ in lan966x_vlan_port_apply()
228 REW_PORT_VLAN_CFG_PORT_VID_SET(port->vid), in lan966x_vlan_port_apply()
235 u16 vid, in lan966x_vlan_port_add_vlan() argument
246 if (lan966x_vlan_cpu_member_cpu_vlan_mask(lan966x, vid)) { in lan966x_vlan_port_add_vlan()
247 lan966x_vlan_cpu_add_vlan_mask(lan966x, vid); in lan966x_vlan_port_add_vlan()
248 lan966x_fdb_write_entries(lan966x, vid); in lan966x_vlan_port_add_vlan()
249 lan966x_mdb_write_entries(lan966x, vid); in lan966x_vlan_port_add_vlan()
252 lan966x_vlan_port_set_vid(port, vid, pvid, untagged); in lan966x_vlan_port_add_vlan()
253 lan966x_vlan_port_add_vlan_mask(port, vid); in lan966x_vlan_port_add_vlan()
257 void lan966x_vlan_port_del_vlan(struct lan966x_port *port, u16 vid) in lan966x_vlan_port_del_vlan() argument
261 lan966x_vlan_port_remove_vid(port, vid); in lan966x_vlan_port_del_vlan()
262 lan966x_vlan_port_del_vlan_mask(port, vid); in lan966x_vlan_port_del_vlan()
269 if (!lan966x_vlan_port_any_vlan_mask(lan966x, vid)) { in lan966x_vlan_port_del_vlan()
270 lan966x_vlan_cpu_del_vlan_mask(lan966x, vid); in lan966x_vlan_port_del_vlan()
271 lan966x_fdb_erase_entries(lan966x, vid); in lan966x_vlan_port_del_vlan()
272 lan966x_mdb_erase_entries(lan966x, vid); in lan966x_vlan_port_del_vlan()
276 void lan966x_vlan_cpu_add_vlan(struct lan966x *lan966x, u16 vid) in lan966x_vlan_cpu_add_vlan() argument
286 if (lan966x_vlan_port_any_vlan_mask(lan966x, vid)) { in lan966x_vlan_cpu_add_vlan()
287 lan966x_vlan_cpu_add_vlan_mask(lan966x, vid); in lan966x_vlan_cpu_add_vlan()
288 lan966x_mdb_write_entries(lan966x, vid); in lan966x_vlan_cpu_add_vlan()
291 lan966x_vlan_cpu_add_cpu_vlan_mask(lan966x, vid); in lan966x_vlan_cpu_add_vlan()
292 lan966x_fdb_write_entries(lan966x, vid); in lan966x_vlan_cpu_add_vlan()
295 void lan966x_vlan_cpu_del_vlan(struct lan966x *lan966x, u16 vid) in lan966x_vlan_cpu_del_vlan() argument
298 lan966x_vlan_cpu_del_cpu_vlan_mask(lan966x, vid); in lan966x_vlan_cpu_del_vlan()
299 lan966x_vlan_cpu_del_vlan_mask(lan966x, vid); in lan966x_vlan_cpu_del_vlan()
300 lan966x_fdb_erase_entries(lan966x, vid); in lan966x_vlan_cpu_del_vlan()
301 lan966x_mdb_erase_entries(lan966x, vid); in lan966x_vlan_cpu_del_vlan()
306 u16 port, vid; in lan966x_vlan_init() local
314 for (vid = 1; vid < VLAN_N_VID; vid++) { in lan966x_vlan_init()
315 lan966x->vlan_mask[vid] = 0; in lan966x_vlan_init()
316 lan966x_vlan_set_mask(lan966x, vid); in lan966x_vlan_init()