@ -926,10 +926,19 @@ ar8327_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
t = pvid < < AR8327_PORT_VLAN0_DEF_SVID_S ;
t | = pvid < < AR8327_PORT_VLAN0_DEF_CVID_S ;
if ( priv - > vlan & & priv - > port_vlan_prio [ port ] > 0 ) {
u32 prio = priv - > port_vlan_prio [ port ] ;
t | = prio < < AR8327_PORT_VLAN0_DEF_SPRI_S ;
t | = prio < < AR8327_PORT_VLAN0_DEF_CPRI_S ;
}
ar8xxx_write ( priv , AR8327_REG_PORT_VLAN0 ( port ) , t ) ;
t = AR8327_PORT_VLAN1_PORT_VLAN_PROP ;
t | = egress < < AR8327_PORT_VLAN1_OUT_MODE_S ;
if ( priv - > vlan & & priv - > port_vlan_prio [ port ] > 0 )
t | = AR8327_PORT_VLAN1_VLAN_PRI_PROP ;
ar8xxx_write ( priv , AR8327_REG_PORT_VLAN1 ( port ) , t ) ;
t = members ;
@ -1268,6 +1277,37 @@ ar8327_sw_set_igmp_v3(struct switch_dev *dev,
return 0 ;
}
static int
ar8327_sw_set_port_vlan_prio ( struct switch_dev * dev , const struct switch_attr * attr ,
struct switch_val * val )
{
struct ar8xxx_priv * priv = swdev_to_ar8xxx ( dev ) ;
int port = val - > port_vlan ;
if ( port > = dev - > ports )
return - EINVAL ;
if ( port = = 0 | | port = = 6 )
return - EOPNOTSUPP ;
if ( val - > value . i < 0 | | val - > value . i > 7 )
return - EINVAL ;
priv - > port_vlan_prio [ port ] = val - > value . i ;
return 0 ;
}
static int
ar8327_sw_get_port_vlan_prio ( struct switch_dev * dev , const struct switch_attr * attr ,
struct switch_val * val )
{
struct ar8xxx_priv * priv = swdev_to_ar8xxx ( dev ) ;
int port = val - > port_vlan ;
val - > value . i = priv - > port_vlan_prio [ port ] ;
return 0 ;
}
static const struct switch_attr ar8327_sw_attr_globals [ ] = {
{
. type = SWITCH_TYPE_INT ,
@ -1389,6 +1429,14 @@ static const struct switch_attr ar8327_sw_attr_port[] = {
. get = ar8327_sw_get_port_igmp_snooping ,
. max = 1
} ,
{
. type = SWITCH_TYPE_INT ,
. name = " vlan_prio " ,
. description = " Port VLAN default priority (VLAN PCP) (0-7) " ,
. set = ar8327_sw_set_port_vlan_prio ,
. get = ar8327_sw_get_port_vlan_prio ,
. max = 7 ,
} ,
} ;
static const struct switch_dev_ops ar8327_sw_ops = {