cfg80211: add firmware and hardware version to wiphy
authorKalle Valo <kalle.valo@nokia.com>
Thu, 24 Sep 2009 18:02:42 +0000 (11:02 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 7 Oct 2009 20:39:46 +0000 (16:39 -0400)
It's useful to provide firmware and hardware version to user space and have a
generic interface to retrieve them. Users can provide the version information
in bug reports etc.

Add fields for firmware and hardware version to struct wiphy.

(Dropped nl80211 bits for now and modified remaining bits in favor of
ethtool. -- JWL)

Cc: Kalle Valo <kalle.valo@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
include/net/cfg80211.h
net/wireless/ethtool.c

index 241ea14d6df886ef1434a2efe40bf53bf19a9a72..6f4862b3ec2ca03a7bd5d542ef6e229b8db5e170 100644 (file)
@@ -1142,6 +1142,9 @@ struct wiphy {
        u32 frag_threshold;
        u32 rts_threshold;
 
+       char fw_version[ETHTOOL_BUSINFO_LEN];
+       u32 hw_version;
+
        /* If multiple wiphys are registered and you're handed e.g.
         * a regular netdev with assigned ieee80211_ptr, you won't
         * know whether it points to a wiphy your driver has registered
index 80d6d0d31f128dc82514652158ecb5fb9895804a..ca4c825be93d263687e1a4635c1352e807ed7c3e 100644 (file)
@@ -12,13 +12,34 @@ static void cfg80211_get_drvinfo(struct net_device *dev,
 
        strlcpy(info->version, init_utsname()->release, sizeof(info->version));
 
-       strlcpy(info->fw_version, "N/A", sizeof(info->fw_version));
+       if (wdev->wiphy->fw_version[0])
+               strncpy(info->fw_version, wdev->wiphy->fw_version,
+                       sizeof(info->fw_version));
+       else
+               strncpy(info->fw_version, "N/A", sizeof(info->fw_version));
 
        strlcpy(info->bus_info, dev_name(wiphy_dev(wdev->wiphy)),
                sizeof(info->bus_info));
 }
 
+static int cfg80211_get_regs_len(struct net_device *dev)
+{
+       /* For now, return 0... */
+       return 0;
+}
+
+static void cfg80211_get_regs(struct net_device *dev, struct ethtool_regs *regs,
+                       void *data)
+{
+       struct wireless_dev *wdev = dev->ieee80211_ptr;
+
+       regs->version = wdev->wiphy->hw_version;
+       regs->len = 0;
+}
+
 const struct ethtool_ops cfg80211_ethtool_ops = {
        .get_drvinfo = cfg80211_get_drvinfo,
+       .get_regs_len = cfg80211_get_regs_len,
+       .get_regs = cfg80211_get_regs,
        .get_link = ethtool_op_get_link,
 };