+#endif
+
+static int
+rtl_attr_set_port_pvid(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val)
+{
+ unsigned int vlan;
+
+ if (val->port_vlan >= RTL8306_NUM_PORTS)
+ return -EINVAL;
+
+ for (vlan = 0; vlan < RTL8306_NUM_VLANS; vlan++) {
+ if (rtl_get(dev, RTL_VLAN_REG(vlan, VID)) == val->value.i) {
+ rtl_set(dev, RTL_PORT_REG(val->port_vlan, PVID), vlan);
+ break;
+ }
+ }
+
+ return 0;
+}
+
+static int
+rtl_attr_get_port_pvid(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val)
+{
+ unsigned int vlan;
+
+ if (val->port_vlan >= RTL8306_NUM_PORTS)
+ return -EINVAL;
+
+ vlan = rtl_get(dev, RTL_PORT_REG(val->port_vlan, PVID));
+ val->value.i = rtl_get(dev, RTL_VLAN_REG(vlan, VID));
+
+ return 0;
+}