Changeset 30843


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

generic: rtl8366s: use the generic get_port_link implementation

File:
1 edited

Legend:

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

    r29844 r30843  
    733733} 
    734734 
    735  
    736 static const char *rtl8366s_speed_str(unsigned speed) 
    737 { 
     735static int rtl8366s_sw_get_port_link(struct switch_dev *dev, 
     736                                     int port, 
     737                                     struct switch_port_link *link) 
     738{ 
     739        struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
     740        u32 data = 0; 
     741        u32 speed; 
     742 
     743        if (port >= RTL8366S_NUM_PORTS) 
     744                return -EINVAL; 
     745 
     746        rtl8366_smi_read_reg(smi, RTL8366S_PORT_LINK_STATUS_BASE + (port / 2), 
     747                             &data); 
     748 
     749        if (port % 2) 
     750                data = data >> 8; 
     751 
     752        link->link = !!(data & RTL8366S_PORT_STATUS_LINK_MASK); 
     753        if (!link->link) 
     754                return 0; 
     755 
     756        link->duplex = !!(data & RTL8366S_PORT_STATUS_DUPLEX_MASK); 
     757        link->rx_flow = !!(data & RTL8366S_PORT_STATUS_RXPAUSE_MASK); 
     758        link->tx_flow = !!(data & RTL8366S_PORT_STATUS_TXPAUSE_MASK); 
     759        link->aneg = !!(data & RTL8366S_PORT_STATUS_AN_MASK); 
     760 
     761        speed = (data & RTL8366S_PORT_STATUS_SPEED_MASK); 
    738762        switch (speed) { 
    739763        case 0: 
    740                 return "10baseT"; 
     764                link->speed = SWITCH_PORT_SPEED_10; 
     765                break; 
    741766        case 1: 
    742                 return "100baseT"; 
     767                link->speed = SWITCH_PORT_SPEED_100; 
     768                break; 
    743769        case 2: 
    744                 return "1000baseT"; 
    745         } 
    746  
    747         return "unknown"; 
    748 } 
    749  
    750 static int rtl8366s_sw_get_port_link(struct switch_dev *dev, 
    751                                      const struct switch_attr *attr, 
    752                                      struct switch_val *val) 
    753 { 
    754         struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev); 
    755         u32 len = 0, data = 0; 
    756  
    757         if (val->port_vlan >= RTL8366S_NUM_PORTS) 
    758                 return -EINVAL; 
    759  
    760         memset(smi->buf, '\0', sizeof(smi->buf)); 
    761         rtl8366_smi_read_reg(smi, RTL8366S_PORT_LINK_STATUS_BASE + 
    762                              (val->port_vlan / 2), &data); 
    763  
    764         if (val->port_vlan % 2) 
    765                 data = data >> 8; 
    766  
    767         if (data & RTL8366S_PORT_STATUS_LINK_MASK) { 
    768                 len = snprintf(smi->buf, sizeof(smi->buf), 
    769                                 "port:%d link:up speed:%s %s-duplex %s%s%s", 
    770                                 val->port_vlan, 
    771                                 rtl8366s_speed_str(data & 
    772                                           RTL8366S_PORT_STATUS_SPEED_MASK), 
    773                                 (data & RTL8366S_PORT_STATUS_DUPLEX_MASK) ? 
    774                                         "full" : "half", 
    775                                 (data & RTL8366S_PORT_STATUS_TXPAUSE_MASK) ? 
    776                                         "tx-pause ": "", 
    777                                 (data & RTL8366S_PORT_STATUS_RXPAUSE_MASK) ? 
    778                                         "rx-pause " : "", 
    779                                 (data & RTL8366S_PORT_STATUS_AN_MASK) ? 
    780                                         "nway ": ""); 
    781         } else { 
    782                 len = snprintf(smi->buf, sizeof(smi->buf), "port:%d link: down", 
    783                                 val->port_vlan); 
    784         } 
    785  
    786         val->value.s = smi->buf; 
    787         val->len = len; 
     770                link->speed = SWITCH_PORT_SPEED_1000; 
     771                break; 
     772        default: 
     773                link->speed = SWITCH_PORT_SPEED_UNKNOWN; 
     774                break; 
     775        } 
    788776 
    789777        return 0; 
     
    920908static struct switch_attr rtl8366s_port[] = { 
    921909        { 
    922                 .type = SWITCH_TYPE_STRING, 
    923                 .name = "link", 
    924                 .description = "Get port link information", 
    925                 .max = 1, 
    926                 .set = NULL, 
    927                 .get = rtl8366s_sw_get_port_link, 
    928         }, { 
    929910                .type = SWITCH_TYPE_NOVAL, 
    930911                .name = "reset_mib", 
     
    985966        .set_port_pvid = rtl8366_sw_set_port_pvid, 
    986967        .reset_switch = rtl8366s_sw_reset_switch, 
     968        .get_port_link = rtl8366s_sw_get_port_link, 
    987969}; 
    988970 
Note: See TracChangeset for help on using the changeset viewer.