aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKalle Valo <kalle.valo@nokia.com>2009-09-24 14:02:42 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-10-07 16:39:46 -0400
commitdfce95f51fe34fa18c87a7d0bea53594b9bf1b9a (patch)
tree2a5ad730134289b6a792af8a2cbd9d1aa3507f55
parent4890e3beddfb4a6859c4bb782c9cd05dd94ead82 (diff)
cfg80211: add firmware and hardware version to wiphy
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>
-rw-r--r--include/net/cfg80211.h3
-rw-r--r--net/wireless/ethtool.c23
2 files changed, 25 insertions, 1 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 241ea14d6df8..6f4862b3ec2c 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1142,6 +1142,9 @@ struct wiphy {
1142 u32 frag_threshold; 1142 u32 frag_threshold;
1143 u32 rts_threshold; 1143 u32 rts_threshold;
1144 1144
1145 char fw_version[ETHTOOL_BUSINFO_LEN];
1146 u32 hw_version;
1147
1145 /* If multiple wiphys are registered and you're handed e.g. 1148 /* If multiple wiphys are registered and you're handed e.g.
1146 * a regular netdev with assigned ieee80211_ptr, you won't 1149 * a regular netdev with assigned ieee80211_ptr, you won't
1147 * know whether it points to a wiphy your driver has registered 1150 * know whether it points to a wiphy your driver has registered
diff --git a/net/wireless/ethtool.c b/net/wireless/ethtool.c
index 80d6d0d31f12..ca4c825be93d 100644
--- a/net/wireless/ethtool.c
+++ b/net/wireless/ethtool.c
@@ -12,13 +12,34 @@ static void cfg80211_get_drvinfo(struct net_device *dev,
12 12
13 strlcpy(info->version, init_utsname()->release, sizeof(info->version)); 13 strlcpy(info->version, init_utsname()->release, sizeof(info->version));
14 14
15 strlcpy(info->fw_version, "N/A", sizeof(info->fw_version)); 15 if (wdev->wiphy->fw_version[0])
16 strncpy(info->fw_version, wdev->wiphy->fw_version,
17 sizeof(info->fw_version));
18 else
19 strncpy(info->fw_version, "N/A", sizeof(info->fw_version));
16 20
17 strlcpy(info->bus_info, dev_name(wiphy_dev(wdev->wiphy)), 21 strlcpy(info->bus_info, dev_name(wiphy_dev(wdev->wiphy)),
18 sizeof(info->bus_info)); 22 sizeof(info->bus_info));
19} 23}
20 24
25static int cfg80211_get_regs_len(struct net_device *dev)
26{
27 /* For now, return 0... */
28 return 0;
29}
30
31static void cfg80211_get_regs(struct net_device *dev, struct ethtool_regs *regs,
32 void *data)
33{
34 struct wireless_dev *wdev = dev->ieee80211_ptr;
35
36 regs->version = wdev->wiphy->hw_version;
37 regs->len = 0;
38}
39
21const struct ethtool_ops cfg80211_ethtool_ops = { 40const struct ethtool_ops cfg80211_ethtool_ops = {
22 .get_drvinfo = cfg80211_get_drvinfo, 41 .get_drvinfo = cfg80211_get_drvinfo,
42 .get_regs_len = cfg80211_get_regs_len,
43 .get_regs = cfg80211_get_regs,
23 .get_link = ethtool_op_get_link, 44 .get_link = ethtool_op_get_link,
24}; 45};