Changeset 30839


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

generic: swconfig: add a generic get_port_link implementation

Location:
trunk/target/linux/generic/files
Files:
2 edited

Legend:

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

    r29627 r30839  
    130130} 
    131131 
     132static const char * 
     133swconfig_speed_str(enum switch_port_speed speed) 
     134{ 
     135        switch (speed) { 
     136        case SWITCH_PORT_SPEED_10: 
     137                return "10baseT"; 
     138        case SWITCH_PORT_SPEED_100: 
     139                return "100baseT"; 
     140        case SWITCH_PORT_SPEED_1000: 
     141                return "1000baseT"; 
     142        default: 
     143                break; 
     144        } 
     145 
     146        return "unknown"; 
     147} 
     148 
     149static int 
     150swconfig_get_link(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val) 
     151{ 
     152        struct switch_port_link link; 
     153        int len; 
     154        int ret; 
     155 
     156        if (val->port_vlan >= dev->ports) 
     157                return -EINVAL; 
     158 
     159        if (!dev->ops->get_port_link) 
     160                return -EOPNOTSUPP; 
     161 
     162        memset(&link, 0, sizeof(link)); 
     163        ret = dev->ops->get_port_link(dev, val->port_vlan, &link); 
     164        if (ret) 
     165                return ret; 
     166 
     167        memset(dev->buf, 0, sizeof(dev->buf)); 
     168 
     169        if (link.link) 
     170                len = snprintf(dev->buf, sizeof(dev->buf), 
     171                               "port:%d link:up speed:%s %s-duplex %s%s%s", 
     172                               val->port_vlan, 
     173                               swconfig_speed_str(link.speed), 
     174                               link.duplex ? "full" : "half", 
     175                               link.tx_flow ? "txflow ": "", 
     176                               link.rx_flow ?   "rxflow " : "", 
     177                               link.aneg ? "auto" : ""); 
     178        else 
     179                len = snprintf(dev->buf, sizeof(dev->buf), "port:%d link:down", 
     180                               val->port_vlan); 
     181 
     182        val->value.s = dev->buf; 
     183        val->len = len; 
     184 
     185        return 0; 
     186} 
     187 
    132188static int 
    133189swconfig_apply_config(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val) 
     
    161217enum port_defaults { 
    162218        PORT_PVID, 
     219        PORT_LINK, 
    163220}; 
    164221 
     
    185242                .set = swconfig_set_pvid, 
    186243                .get = swconfig_get_pvid, 
     244        }, 
     245        [PORT_LINK] = { 
     246                .type = SWITCH_TYPE_STRING, 
     247                .name = "link", 
     248                .description = "Get port link information", 
     249                .set = NULL, 
     250                .get = swconfig_get_link, 
    187251        } 
    188252}; 
     
    198262}; 
    199263 
     264static const struct switch_attr * 
     265swconfig_find_attr_by_name(const struct switch_attrlist *alist, const char *name) 
     266{ 
     267        int i; 
     268 
     269        for (i = 0; i < alist->n_attr; i++) 
     270                if (strcmp(name, alist->attr[i].name) == 0) 
     271                        return &alist->attr[i]; 
     272 
     273        return NULL; 
     274} 
    200275 
    201276static void swconfig_defaults_init(struct switch_dev *dev) 
     
    212287        if (ops->get_port_pvid || ops->set_port_pvid) 
    213288                set_bit(PORT_PVID, &dev->def_port); 
     289 
     290        if (ops->get_port_link && 
     291            !swconfig_find_attr_by_name(&ops->attr_port, "link")) 
     292                set_bit(PORT_LINK, &dev->def_port); 
    214293 
    215294        /* always present, can be no-op */ 
  • trunk/target/linux/generic/files/include/linux/switch.h

    r29627 r30839  
    195195        struct switch_port *portbuf; 
    196196 
     197        char buf[128]; 
     198 
    197199#ifdef CONFIG_SWCONFIG_LEDS 
    198200        struct switch_led_trigger *led_trigger; 
Note: See TracChangeset for help on using the changeset viewer.