Lines Matching defs:smi
14 #include "realtek-smi-core.h"
16 int rtl8366_mc_is_used(struct realtek_smi *smi, int mc_index, int *used)
22 for (i = 0; i < smi->num_ports; i++) {
25 ret = smi->ops->get_mc_index(smi, i, &index);
41 * @smi: the Realtek SMI device instance
47 static int rtl8366_obtain_mc(struct realtek_smi *smi, int vid,
55 for (i = 0; i < smi->num_vlan_mc; i++) {
56 ret = smi->ops->get_vlan_mc(smi, i, vlanmc);
58 dev_err(smi->dev, "error searching for VLAN MC %d for VID %d\n",
68 for (i = 0; i < smi->num_vlan_mc; i++) {
69 ret = smi->ops->get_vlan_mc(smi, i, vlanmc);
71 dev_err(smi->dev, "error searching for VLAN MC %d for VID %d\n",
78 ret = smi->ops->get_vlan_4k(smi, vid, &vlan4k);
80 dev_err(smi->dev, "error looking for 4K VLAN MC %d for VID %d\n",
89 ret = smi->ops->set_vlan_mc(smi, i, vlanmc);
91 dev_err(smi->dev, "unable to set/update VLAN MC %d for VID %d\n",
96 dev_dbg(smi->dev, "created new MC at index %d for VID %d\n",
103 for (i = 0; i < smi->num_vlan_mc; i++) {
106 ret = rtl8366_mc_is_used(smi, i, &used);
112 ret = smi->ops->get_vlan_4k(smi, vid, &vlan4k);
120 ret = smi->ops->set_vlan_mc(smi, i, vlanmc);
122 dev_err(smi->dev, "unable to set/update VLAN MC %d for VID %d\n",
126 dev_dbg(smi->dev, "recycled MC at index %i for VID %d\n",
132 dev_err(smi->dev, "all VLAN member configurations are in use\n");
136 int rtl8366_set_vlan(struct realtek_smi *smi, int vid, u32 member,
144 if (!smi->ops->is_vlan_valid(smi, vid))
147 dev_dbg(smi->dev,
152 ret = smi->ops->get_vlan_4k(smi, vid, &vlan4k);
159 ret = smi->ops->set_vlan_4k(smi, &vlan4k);
163 dev_dbg(smi->dev,
168 ret = rtl8366_obtain_mc(smi, vid, &vlanmc);
179 ret = smi->ops->set_vlan_mc(smi, mc, &vlanmc);
181 dev_err(smi->dev, "failed to commit changes to VLAN MC index %d for VID %d\n",
184 dev_dbg(smi->dev,
192 int rtl8366_set_pvid(struct realtek_smi *smi, unsigned int port,
199 if (!smi->ops->is_vlan_valid(smi, vid))
203 ret = rtl8366_obtain_mc(smi, vid, &vlanmc);
208 ret = smi->ops->set_mc_index(smi, port, mc);
210 dev_err(smi->dev, "set PVID: failed to set MC index %d for port %d\n",
215 dev_dbg(smi->dev, "set PVID: the PVID for port %d set to %d using existing MC index %d\n",
222 int rtl8366_enable_vlan4k(struct realtek_smi *smi, bool enable)
232 ret = smi->ops->enable_vlan(smi, true);
236 smi->vlan_enabled = true;
239 ret = smi->ops->enable_vlan4k(smi, enable);
243 smi->vlan4k_enabled = enable;
248 int rtl8366_enable_vlan(struct realtek_smi *smi, bool enable)
252 ret = smi->ops->enable_vlan(smi, enable);
256 smi->vlan_enabled = enable;
262 smi->vlan4k_enabled = false;
263 ret = smi->ops->enable_vlan4k(smi, false);
270 int rtl8366_reset_vlan(struct realtek_smi *smi)
276 rtl8366_enable_vlan(smi, false);
277 rtl8366_enable_vlan4k(smi, false);
285 for (i = 0; i < smi->num_vlan_mc; i++) {
286 ret = smi->ops->set_vlan_mc(smi, i, &vlanmc);
295 int rtl8366_init_vlan(struct realtek_smi *smi)
300 ret = rtl8366_reset_vlan(smi);
307 for (port = 0; port < smi->num_ports; port++) {
310 if (port == smi->cpu_port)
314 mask = GENMASK((int)smi->num_ports - 1, 0);
319 mask = BIT(port) | BIT(smi->cpu_port);
326 dev_info(smi->dev, "VLAN%d port mask for port %d, %08x\n",
328 ret = rtl8366_set_vlan(smi, (port + 1), mask, mask, 0);
332 dev_info(smi->dev, "VLAN%d port %d, PVID set to %d\n",
334 ret = rtl8366_set_pvid(smi, port, (port + 1));
339 return rtl8366_enable_vlan(smi, true);
346 struct realtek_smi *smi = ds->priv;
352 if (!smi->ops->is_vlan_valid(smi, port + 1))
358 dev_info(smi->dev, "%s filtering on port %d\n",
366 ret = smi->ops->get_vlan_4k(smi, port + 1, &vlan4k);
371 ret = rtl8366_set_vlan(smi, port + 1,
385 struct realtek_smi *smi = ds->priv;
390 if (!smi->ops->is_vlan_valid(smi, vid))
393 dev_info(smi->dev, "prepare VLANs %04x..%04x\n",
400 ret = rtl8366_enable_vlan4k(smi, true);
413 struct realtek_smi *smi = ds->priv;
420 if (!smi->ops->is_vlan_valid(smi, vid))
423 dev_info(smi->dev, "add VLAN %d on port %d, %s, %s\n",
430 dev_err(smi->dev, "port is DSA or CPU port\n");
438 ret = rtl8366_set_vlan(smi, vid, member, untag, 0);
440 dev_err(smi->dev,
447 ret = rtl8366_set_pvid(smi, port, vid);
449 dev_err(smi->dev,
454 dev_dbg(smi->dev, "VLAN add: added VLAN %d with PVID on port %d\n",
463 struct realtek_smi *smi = ds->priv;
467 dev_info(smi->dev, "del VLAN on port %d\n", port);
472 dev_info(smi->dev, "del VLAN %04x\n", vid);
474 for (i = 0; i < smi->num_vlan_mc; i++) {
477 ret = smi->ops->get_vlan_mc(smi, i, &vlanmc);
495 ret = smi->ops->set_vlan_mc(smi, i, &vlanmc);
497 dev_err(smi->dev,
514 struct realtek_smi *smi = ds->priv;
518 if (port >= smi->num_ports)
521 for (i = 0; i < smi->num_mib_counters; i++) {
522 mib = &smi->mib_counters[i];
531 struct realtek_smi *smi = ds->priv;
536 if (port >= smi->num_ports)
539 return smi->num_mib_counters;
545 struct realtek_smi *smi = ds->priv;
549 if (port >= smi->num_ports)
552 for (i = 0; i < smi->num_mib_counters; i++) {
556 mib = &smi->mib_counters[i];
557 ret = smi->ops->get_mib_counter(smi, port, mib, &mibvalue);
559 dev_err(smi->dev, "error reading MIB counter %s\n",