Ticket #7637: enable_learning.patch

File enable_learning.patch, 2.0 KB (added by Memphis, 6 years ago)

Enabling learning, and therefore bring back switching

  • rtl8366rb.c

     
    752752                return rtl8366rb_vlan_set_4ktable(smi, val->value.i); 
    753753} 
    754754 
     755static int rtl8366rb_sw_get_learning_enable(struct switch_dev *dev, 
     756                                       const struct switch_attr *attr, 
     757                                       struct switch_val *val) 
     758{ 
     759        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     760        u32 data; 
     761 
     762        rtl8366_smi_read_reg(smi,RTL8366RB_SSCR0,&data); 
     763 
     764        if (data == 0) //all enabled? 
     765   { 
     766                val->value.i = 1; 
     767   } 
     768        else 
     769   { 
     770                val->value.i = 0; 
     771   } 
     772        return 0; 
     773} 
     774 
     775 
     776static int rtl8366rb_sw_set_learning_enable(struct switch_dev *dev, 
     777                                       const struct switch_attr *attr, 
     778                                       struct switch_val *val) 
     779{ 
     780   int err=0; 
     781        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     782        if (val->value.i == 1) 
     783        { 
     784                /* enable learning for all ports */ 
     785                REG_WR(smi, RTL8366RB_SSCR0, 0); 
     786 
     787                /* enable auto ageing for all ports */ 
     788                REG_WR(smi, RTL8366RB_SSCR1, 0); 
     789 
     790                /* drop packets whose DA has not been learned */ 
     791                REG_RMW(smi, RTL8366RB_SSCR2, RTL8366RB_SSCR2_DROP_UNKNOWN_DA, 1); 
     792        } 
     793        else//disable it 
     794        { 
     795                /* disable learning for all ports */ 
     796                REG_WR(smi, RTL8366RB_SSCR0, RTL8366RB_PORT_ALL); 
     797 
     798                /* disable auto ageing for all ports */ 
     799                REG_WR(smi, RTL8366RB_SSCR1, RTL8366RB_PORT_ALL); 
     800 
     801                /* don't drop packets whose DA has not been learned */ 
     802                REG_RMW(smi, RTL8366RB_SSCR2, RTL8366RB_SSCR2_DROP_UNKNOWN_DA, 0); 
     803        } 
     804} 
     805 
     806 
    755807static const char *rtl8366rb_speed_str(unsigned speed) 
    756808{ 
    757809        switch (speed) { 
     
    10171065static struct switch_attr rtl8366rb_globals[] = { 
    10181066        { 
    10191067                .type = SWITCH_TYPE_INT, 
     1068                .name = "enable_learning", 
     1069                .description = "Enable learning, enable aging, block unlearned DA", 
     1070                .set = rtl8366rb_sw_set_learning_enable, 
     1071                .get = rtl8366rb_sw_get_learning_enable, 
     1072                .max = 1, 
     1073        }, { 
     1074                .type = SWITCH_TYPE_INT, 
    10201075                .name = "enable_vlan", 
    10211076                .description = "Enable VLAN mode", 
    10221077                .set = rtl8366rb_sw_set_vlan_enable,