Blame view

net/wireless/debugfs.c 3.04 KB
1ac61302d   Luis R. Rodriguez   mac80211/cfg80211...
1
2
3
4
5
6
7
8
9
10
  /*
   * cfg80211 debugfs
   *
   * Copyright 2009	Luis R. Rodriguez <lrodriguez@atheros.com>
   * Copyright 2007	Johannes Berg <johannes@sipsolutions.net>
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
5a0e3ad6a   Tejun Heo   include cleanup: ...
11
  #include <linux/slab.h>
1ac61302d   Luis R. Rodriguez   mac80211/cfg80211...
12
13
  #include "core.h"
  #include "debugfs.h"
1ac61302d   Luis R. Rodriguez   mac80211/cfg80211...
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  #define DEBUGFS_READONLY_FILE(name, buflen, fmt, value...)		\
  static ssize_t name## _read(struct file *file, char __user *userbuf,	\
  			    size_t count, loff_t *ppos)			\
  {									\
  	struct wiphy *wiphy= file->private_data;		\
  	char buf[buflen];						\
  	int res;							\
  									\
  	res = scnprintf(buf, buflen, fmt "
  ", ##value);		\
  	return simple_read_from_buffer(userbuf, count, ppos, buf, res);	\
  }									\
  									\
  static const struct file_operations name## _ops = {			\
  	.read = name## _read,						\
234e34058   Stephen Boyd   simple_open: auto...
29
  	.open = simple_open,						\
2b18ab36c   Arnd Bergmann   net/wireless: use...
30
  	.llseek = generic_file_llseek,					\
1ac61302d   Luis R. Rodriguez   mac80211/cfg80211...
31
32
33
34
35
36
37
38
39
40
  };
  
  DEBUGFS_READONLY_FILE(rts_threshold, 20, "%d",
  		      wiphy->rts_threshold)
  DEBUGFS_READONLY_FILE(fragmentation_threshold, 20, "%d",
  		      wiphy->frag_threshold);
  DEBUGFS_READONLY_FILE(short_retry_limit, 20, "%d",
  		      wiphy->retry_short)
  DEBUGFS_READONLY_FILE(long_retry_limit, 20, "%d",
  		      wiphy->retry_long);
80a3511d7   Luis R. Rodriguez   cfg80211: add deb...
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
  static int ht_print_chan(struct ieee80211_channel *chan,
  			 char *buf, int buf_size, int offset)
  {
  	if (WARN_ON(offset > buf_size))
  		return 0;
  
  	if (chan->flags & IEEE80211_CHAN_DISABLED)
  		return snprintf(buf + offset,
  				buf_size - offset,
  				"%d Disabled
  ",
  				chan->center_freq);
  
  	return snprintf(buf + offset,
  			buf_size - offset,
  			"%d HT40 %c%c
  ",
  			chan->center_freq,
  			(chan->flags & IEEE80211_CHAN_NO_HT40MINUS) ? ' ' : '-',
  			(chan->flags & IEEE80211_CHAN_NO_HT40PLUS)  ? ' ' : '+');
  }
  
  static ssize_t ht40allow_map_read(struct file *file,
  				  char __user *user_buf,
  				  size_t count, loff_t *ppos)
  {
  	struct wiphy *wiphy = file->private_data;
  	char *buf;
  	unsigned int offset = 0, buf_size = PAGE_SIZE, i, r;
  	enum ieee80211_band band;
  	struct ieee80211_supported_band *sband;
  
  	buf = kzalloc(buf_size, GFP_KERNEL);
  	if (!buf)
  		return -ENOMEM;
  
  	mutex_lock(&cfg80211_mutex);
  
  	for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
  		sband = wiphy->bands[band];
  		if (!sband)
  			continue;
  		for (i = 0; i < sband->n_channels; i++)
  			offset += ht_print_chan(&sband->channels[i],
  						buf, buf_size, offset);
  	}
  
  	mutex_unlock(&cfg80211_mutex);
  
  	r = simple_read_from_buffer(user_buf, count, ppos, buf, offset);
  
  	kfree(buf);
  
  	return r;
  }
  
  static const struct file_operations ht40allow_map_ops = {
  	.read = ht40allow_map_read,
234e34058   Stephen Boyd   simple_open: auto...
99
  	.open = simple_open,
6038f373a   Arnd Bergmann   llseek: automatic...
100
  	.llseek = default_llseek,
80a3511d7   Luis R. Rodriguez   cfg80211: add deb...
101
  };
1ac61302d   Luis R. Rodriguez   mac80211/cfg80211...
102
  #define DEBUGFS_ADD(name)						\
7bcfaf2f4   Johannes Berg   cfg80211/mac80211...
103
  	debugfs_create_file(#name, S_IRUGO, phyd, &rdev->wiphy, &name## _ops);
1ac61302d   Luis R. Rodriguez   mac80211/cfg80211...
104

79c97e97a   Johannes Berg   cfg80211: clean u...
105
  void cfg80211_debugfs_rdev_add(struct cfg80211_registered_device *rdev)
1ac61302d   Luis R. Rodriguez   mac80211/cfg80211...
106
  {
79c97e97a   Johannes Berg   cfg80211: clean u...
107
  	struct dentry *phyd = rdev->wiphy.debugfsdir;
1ac61302d   Luis R. Rodriguez   mac80211/cfg80211...
108
109
110
111
112
  
  	DEBUGFS_ADD(rts_threshold);
  	DEBUGFS_ADD(fragmentation_threshold);
  	DEBUGFS_ADD(short_retry_limit);
  	DEBUGFS_ADD(long_retry_limit);
80a3511d7   Luis R. Rodriguez   cfg80211: add deb...
113
  	DEBUGFS_ADD(ht40allow_map);
1ac61302d   Luis R. Rodriguez   mac80211/cfg80211...
114
  }