Changeset 30842


Ignore:
Timestamp:
2012-03-07T17:32:37+01:00 (6 years ago)
Author:
juhosg
Message:

generic: rtl8366rb: use the generic get_port_link implementation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic/files/drivers/net/phy/rtl8366rb.c

    r29844 r30842  
    682682} 
    683683 
    684  
    685 static const char *rtl8366rb_speed_str(unsigned speed) 
    686 { 
     684static int rtl8366rb_sw_get_port_link(struct switch_dev *dev, 
     685                                     int port, 
     686                                     struct switch_port_link *link) 
     687{ 
     688        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     689        u32 data = 0; 
     690        u32 speed; 
     691 
     692        if (port >= RTL8366RB_NUM_PORTS) 
     693                return -EINVAL; 
     694 
     695        rtl8366_smi_read_reg(smi, RTL8366RB_PORT_LINK_STATUS_BASE + (port / 2), 
     696                             &data); 
     697 
     698        if (port % 2) 
     699                data = data >> 8; 
     700 
     701        link->link = !!(data & RTL8366RB_PORT_STATUS_LINK_MASK); 
     702        if (!link->link) 
     703                return 0; 
     704 
     705        link->duplex = !!(data & RTL8366RB_PORT_STATUS_DUPLEX_MASK); 
     706        link->rx_flow = !!(data & RTL8366RB_PORT_STATUS_RXPAUSE_MASK); 
     707        link->tx_flow = !!(data & RTL8366RB_PORT_STATUS_TXPAUSE_MASK); 
     708        link->aneg = !!(data & RTL8366RB_PORT_STATUS_AN_MASK); 
     709 
     710        speed = (data & RTL8366RB_PORT_STATUS_SPEED_MASK); 
    687711        switch (speed) { 
    688712        case 0: 
    689                 return "10baseT"; 
     713                link->speed = SWITCH_PORT_SPEED_10; 
     714                break; 
    690715        case 1: 
    691                 return "100baseT"; 
     716                link->speed = SWITCH_PORT_SPEED_100; 
     717                break; 
    692718        case 2: 
    693                 return "1000baseT"; 
     719                link->speed = SWITCH_PORT_SPEED_1000; 
     720                break; 
     721        default: 
     722                link->speed = SWITCH_PORT_SPEED_UNKNOWN; 
     723                break; 
    694724        } 
    695  
    696         return "unknown"; 
    697 } 
    698  
    699 static int rtl8366rb_sw_get_port_link(struct switch_dev *dev, 
    700                                      const struct switch_attr *attr, 
    701                                      struct switch_val *val) 
    702 { 
    703         struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
    704         u32 len = 0, data = 0; 
    705  
    706         if (val->port_vlan >= RTL8366RB_NUM_PORTS) 
    707                 return -EINVAL; 
    708  
    709         memset(smi->buf, '\0', sizeof(smi->buf)); 
    710         rtl8366_smi_read_reg(smi, RTL8366RB_PORT_LINK_STATUS_BASE + 
    711                              (val->port_vlan / 2), &data); 
    712  
    713         if (val->port_vlan % 2) 
    714                 data = data >> 8; 
    715  
    716         if (data & RTL8366RB_PORT_STATUS_LINK_MASK) { 
    717                 len = snprintf(smi->buf, sizeof(smi->buf), 
    718                                 "port:%d link:up speed:%s %s-duplex %s%s%s", 
    719                                 val->port_vlan, 
    720                                 rtl8366rb_speed_str(data & 
    721                                           RTL8366RB_PORT_STATUS_SPEED_MASK), 
    722                                 (data & RTL8366RB_PORT_STATUS_DUPLEX_MASK) ? 
    723                                         "full" : "half", 
    724                                 (data & RTL8366RB_PORT_STATUS_TXPAUSE_MASK) ? 
    725                                         "tx-pause ": "", 
    726                                 (data & RTL8366RB_PORT_STATUS_RXPAUSE_MASK) ? 
    727                                         "rx-pause " : "", 
    728                                 (data & RTL8366RB_PORT_STATUS_AN_MASK) ? 
    729                                         "nway ": ""); 
    730         } else { 
    731                 len = snprintf(smi->buf, sizeof(smi->buf), "port:%d link: down", 
    732                                 val->port_vlan); 
    733         } 
    734  
    735         val->value.s = smi->buf; 
    736         val->len = len; 
    737725 
    738726        return 0; 
     
    10191007static struct switch_attr rtl8366rb_port[] = { 
    10201008        { 
    1021                 .type = SWITCH_TYPE_STRING, 
    1022                 .name = "link", 
    1023                 .description = "Get port link information", 
    1024                 .max = 1, 
    1025                 .set = NULL, 
    1026                 .get = rtl8366rb_sw_get_port_link, 
    1027         }, { 
    10281009                .type = SWITCH_TYPE_NOVAL, 
    10291010                .name = "reset_mib", 
     
    11051086        .set_port_pvid = rtl8366_sw_set_port_pvid, 
    11061087        .reset_switch = rtl8366rb_sw_reset_switch, 
     1088        .get_port_link = rtl8366rb_sw_get_port_link, 
    11071089}; 
    11081090 
Note: See TracChangeset for help on using the changeset viewer.