Ignore:
Timestamp:
2011-07-28T14:20:25+02:00 (5 years ago)
Author:
jogo
Message:

[backfire] swconfig: Add generic switch identifiers

Backport of r27880.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/backfire/target/linux/generic-2.6/files/drivers/net/phy/swconfig.c

    r22677 r27815  
    3232#endif 
    3333 
     34#define SWCONFIG_DEVNAME        "switch%d" 
     35 
    3436MODULE_AUTHOR("Felix Fietkau <nbd@openwrt.org>"); 
    3537MODULE_LICENSE("GPL"); 
     
    761763 
    762764        NLA_PUT_U32(msg, SWITCH_ATTR_ID, dev->id); 
     765        NLA_PUT_STRING(msg, SWITCH_ATTR_DEV_NAME, dev->devname); 
     766        NLA_PUT_STRING(msg, SWITCH_ATTR_ALIAS, dev->alias); 
    763767        NLA_PUT_STRING(msg, SWITCH_ATTR_NAME, dev->name); 
    764         NLA_PUT_STRING(msg, SWITCH_ATTR_DEV_NAME, dev->devname); 
    765768        NLA_PUT_U32(msg, SWITCH_ATTR_VLANS, dev->vlans); 
    766769        NLA_PUT_U32(msg, SWITCH_ATTR_PORTS, dev->ports); 
     
    858861register_switch(struct switch_dev *dev, struct net_device *netdev) 
    859862{ 
     863        struct switch_dev *sdev; 
     864        const int max_switches = 8 * sizeof(unsigned long); 
     865        unsigned long in_use = 0; 
     866        int i; 
     867 
    860868        INIT_LIST_HEAD(&dev->dev_list); 
    861869        if (netdev) { 
    862870                dev->netdev = netdev; 
    863                 if (!dev->devname) 
    864                         dev->devname = netdev->name; 
    865         } 
    866         BUG_ON(!dev->devname); 
     871                if (!dev->alias) 
     872                        dev->alias = netdev->name; 
     873        } 
     874        BUG_ON(!dev->alias); 
    867875 
    868876        if (dev->ports > 0) { 
     
    872880                        return -ENOMEM; 
    873881        } 
    874         dev->id = ++swdev_id; 
    875882        swconfig_defaults_init(dev); 
    876883        spin_lock_init(&dev->lock); 
    877884        swconfig_lock(); 
     885        dev->id = ++swdev_id; 
     886 
     887        list_for_each_entry(sdev, &swdevs, dev_list) { 
     888                if (!sscanf(sdev->devname, SWCONFIG_DEVNAME, &i)) 
     889                        continue; 
     890                if (i < 0 || i > max_switches) 
     891                        continue; 
     892 
     893                set_bit(i, &in_use); 
     894        } 
     895        i = find_first_zero_bit(&in_use, max_switches); 
     896 
     897        if (i == max_switches) 
     898                return -ENFILE; 
     899 
     900        /* fill device name */ 
     901        snprintf(dev->devname, IFNAMSIZ, SWCONFIG_DEVNAME, i); 
     902 
    878903        list_add(&dev->dev_list, &swdevs); 
    879904        swconfig_unlock(); 
Note: See TracChangeset for help on using the changeset viewer.