Merge commit 'v2.6.34-rc6'
[safe/jmp/linux-2.6] / net / wireless / sysfs.c
index 26a72b0..9f2cef3 100644 (file)
@@ -31,12 +31,32 @@ static ssize_t name ## _show(struct device *dev,                    \
        return sprintf(buf, fmt "\n", dev_to_rdev(dev)->member);        \
 }
 
-SHOW_FMT(index, "%d", idx);
+SHOW_FMT(index, "%d", wiphy_idx);
 SHOW_FMT(macaddress, "%pM", wiphy.perm_addr);
+SHOW_FMT(address_mask, "%pM", wiphy.addr_mask);
+
+static ssize_t addresses_show(struct device *dev,
+                             struct device_attribute *attr,
+                             char *buf)
+{
+       struct wiphy *wiphy = &dev_to_rdev(dev)->wiphy;
+       char *start = buf;
+       int i;
+
+       if (!wiphy->addresses)
+               return sprintf(buf, "%pM\n", wiphy->perm_addr);
+
+       for (i = 0; i < wiphy->n_addresses; i++)
+               buf += sprintf(buf, "%pM\n", &wiphy->addresses[i].addr);
+
+       return buf - start;
+}
 
 static struct device_attribute ieee80211_dev_attrs[] = {
        __ATTR_RO(index),
        __ATTR_RO(macaddress),
+       __ATTR_RO(address_mask),
+       __ATTR_RO(addresses),
        {}
 };
 
@@ -60,6 +80,8 @@ static int wiphy_suspend(struct device *dev, pm_message_t state)
        struct cfg80211_registered_device *rdev = dev_to_rdev(dev);
        int ret = 0;
 
+       rdev->suspend_at = get_seconds();
+
        if (rdev->ops->suspend) {
                rtnl_lock();
                ret = rdev->ops->suspend(&rdev->wiphy);
@@ -74,6 +96,11 @@ static int wiphy_resume(struct device *dev)
        struct cfg80211_registered_device *rdev = dev_to_rdev(dev);
        int ret = 0;
 
+       /* Age scan results with time spent in suspend */
+       spin_lock_bh(&rdev->bss_lock);
+       cfg80211_bss_age(rdev, get_seconds() - rdev->suspend_at);
+       spin_unlock_bh(&rdev->bss_lock);
+
        if (rdev->ops->resume) {
                rtnl_lock();
                ret = rdev->ops->resume(&rdev->wiphy);