Changeset 27989


Ignore:
Timestamp:
2011-08-15T16:11:41+02:00 (6 years ago)
Author:
juhosg
Message:

generic: ar8216: add support for get link status

File:
1 edited

Legend:

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

    r26778 r27989  
    4747        bool initialized; 
    4848        bool port4_phy; 
     49        char buf[80]; 
    4950 
    5051        /* all fields below are cleared on reset */ 
     
    218219} 
    219220 
     221static const char *ar8216_speed_str(unsigned speed) 
     222{ 
     223        switch (speed) { 
     224        case AR8216_PORT_SPEED_10M: 
     225                return "10baseT"; 
     226        case AR8216_PORT_SPEED_100M: 
     227                return "100baseT"; 
     228        case AR8216_PORT_SPEED_1000M: 
     229                return "1000baseT"; 
     230        } 
     231 
     232        return "unknown"; 
     233} 
     234 
     235static int ar8216_port_get_link(struct switch_dev *dev, 
     236                                const struct switch_attr *attr, 
     237                                struct switch_val *val) 
     238{ 
     239        struct ar8216_priv *priv = to_ar8216(dev); 
     240        u32 len; 
     241        u32 status; 
     242        int port; 
     243 
     244        port = val->port_vlan; 
     245 
     246        memset(priv->buf, '\0', sizeof(priv->buf)); 
     247        status = priv->read(priv, AR8216_REG_PORT_STATUS(port)); 
     248 
     249        if (status & AR8216_PORT_STATUS_LINK_UP) { 
     250                len = snprintf(priv->buf, sizeof(priv->buf), 
     251                                "port:%d link:up speed:%s %s-duplex %s%s%s", 
     252                                port, 
     253                                ar8216_speed_str((status & 
     254                                                  AR8216_PORT_STATUS_SPEED) >> 
     255                                                 AR8216_PORT_STATUS_SPEED_S), 
     256                                (status & AR8216_PORT_STATUS_DUPLEX) ? 
     257                                        "full" : "half", 
     258                                (status & AR8216_PORT_STATUS_TXFLOW) ? 
     259                                        "txflow ": "", 
     260                                (status & AR8216_PORT_STATUS_RXFLOW) ? 
     261                                        "rxflow " : "", 
     262                                (status & AR8216_PORT_STATUS_LINK_AUTO) ? 
     263                                        "auto ": ""); 
     264        } else { 
     265                len = snprintf(priv->buf, sizeof(priv->buf), "port:%d link:down", 
     266                                port); 
     267        } 
     268 
     269        val->value.s = priv->buf; 
     270        val->len = len; 
     271 
     272        return 0; 
     273} 
    220274 
    221275static int 
     
    328382 
    329383static struct switch_attr ar8216_port[] = { 
     384        { 
     385                .type = SWITCH_TYPE_STRING, 
     386                .name = "link", 
     387                .description = "Get port link information", 
     388                .max = 1, 
     389                .set = NULL, 
     390                .get = ar8216_port_get_link, 
     391        }, 
    330392}; 
    331393 
Note: See TracChangeset for help on using the changeset viewer.