X-Git-Url: http://git.ozo.com/?p=openwrt-10.03%2F.git;a=blobdiff_plain;f=target%2Flinux%2Fgeneric-2.6%2Ffiles%2Fdrivers%2Fnet%2Fphy%2Frtl8366s.c;h=45da8fd8e582b7ebac0acadc0f6d533d942d2e7c;hp=f0d394065c24314bb30a4ec18326c0d266d62898;hb=c56ed47f65d15e972d7c75ba4633984bb669ad3e;hpb=ea51bbc9aeb6b9d5e7d4fc3ea387cb26ac124408 diff --git a/target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c b/target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c index f0d394065..45da8fd8e 100644 --- a/target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c +++ b/target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c @@ -27,9 +27,6 @@ #define RTL8366S_PHY_PAGE_MAX 7 #define RTL8366S_PHY_ADDR_MAX 31 -#define RTL8366S_CHIP_GLOBAL_CTRL_REG 0x0000 -#define RTL8366S_CHIP_CTRL_VLAN (1 << 13) - /* Switch Global Configuration register */ #define RTL8366S_SGCR 0x0000 #define RTL8366S_SGCR_EN_BC_STORM_CTRL BIT(0) @@ -39,6 +36,7 @@ #define RTL8366S_SGCR_MAX_LENGTH_1536 RTL8366S_SGCR_MAX_LENGTH(0x1) #define RTL8366S_SGCR_MAX_LENGTH_1552 RTL8366S_SGCR_MAX_LENGTH(0x2) #define RTL8366S_SGCR_MAX_LENGTH_16000 RTL8366S_SGCR_MAX_LENGTH(0x3) +#define RTL8366S_SGCR_EN_VLAN BIT(13) /* Port Enable Control register */ #define RTL8366S_PECR 0x0001 @@ -114,6 +112,7 @@ #define RTL8366S_VLAN_MEMCONF_BASE 0x0016 +#define RTL8366S_VLAN_MEMBERINGRESS_REG 0x0379 #define RTL8366S_PORT_LINK_STATUS_BASE 0x0060 #define RTL8366S_PORT_STATUS_SPEED_MASK 0x0003 @@ -301,6 +300,12 @@ static int rtl8366s_hw_init(struct rtl8366_smi *smi) /* disable auto ageing for all ports */ REG_WR(smi, RTL8366S_SSCR1, RTL8366S_PORT_ALL); + /* + * discard VLAN tagged packets if the port is not a member of + * the VLAN with which the packets is associated. + */ + REG_WR(smi, RTL8366S_VLAN_MEMBERINGRESS_REG, RTL8366S_PORT_ALL); + /* don't drop packets whose DA has not been learned */ REG_RMW(smi, RTL8366S_SSCR2, RTL8366S_SSCR2_DROP_UNKNOWN_DA, 0); @@ -644,9 +649,8 @@ static int rtl8366s_set_mc_index(struct rtl8366_smi *smi, int port, int index) static int rtl8366s_vlan_set_vlan(struct rtl8366_smi *smi, int enable) { - return rtl8366_smi_rmwr(smi, RTL8366S_CHIP_GLOBAL_CTRL_REG, - RTL8366S_CHIP_CTRL_VLAN, - (enable) ? RTL8366S_CHIP_CTRL_VLAN : 0); + return rtl8366_smi_rmwr(smi, RTL8366S_SGCR, RTL8366S_SGCR_EN_VLAN, + (enable) ? RTL8366S_SGCR_EN_VLAN : 0); } static int rtl8366s_vlan_set_4ktable(struct rtl8366_smi *smi, int enable) @@ -676,9 +680,9 @@ static int rtl8366s_sw_get_vlan_enable(struct switch_dev *dev, u32 data; if (attr->ofs == 1) { - rtl8366_smi_read_reg(smi, RTL8366S_CHIP_GLOBAL_CTRL_REG, &data); + rtl8366_smi_read_reg(smi, RTL8366S_SGCR, &data); - if (data & RTL8366S_CHIP_CTRL_VLAN) + if (data & RTL8366S_SGCR_EN_VLAN) val->value.i = 1; else val->value.i = 0;