diff options
author | David S. Miller <davem@davemloft.net> | 2009-06-07 07:24:21 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-06-07 07:24:21 -0400 |
commit | b1bc81a0ef86b86fa410dd303d84c8c7bd09a64d (patch) | |
tree | a0d2e6dd179e5d057776edd0ed865bc744dfa54d /include | |
parent | a93958ac980f0ce594ad90657ecbc595ff157a40 (diff) | |
parent | 0c0c9e7076b69f93678e4ec711e2bf237398e623 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-generic/errno.h | 2 | ||||
-rw-r--r-- | include/linux/Kbuild | 1 | ||||
-rw-r--r-- | include/linux/ieee80211.h | 1 | ||||
-rw-r--r-- | include/linux/notifier.h | 1 | ||||
-rw-r--r-- | include/linux/rfkill.h | 381 | ||||
-rw-r--r-- | include/net/cfg80211.h | 51 | ||||
-rw-r--r-- | include/net/mac80211.h | 26 | ||||
-rw-r--r-- | include/net/wimax.h | 8 |
8 files changed, 376 insertions, 95 deletions
diff --git a/include/asm-generic/errno.h b/include/asm-generic/errno.h index e8852c092fea..28cc03bf19e6 100644 --- a/include/asm-generic/errno.h +++ b/include/asm-generic/errno.h | |||
@@ -106,4 +106,6 @@ | |||
106 | #define EOWNERDEAD 130 /* Owner died */ | 106 | #define EOWNERDEAD 130 /* Owner died */ |
107 | #define ENOTRECOVERABLE 131 /* State not recoverable */ | 107 | #define ENOTRECOVERABLE 131 /* State not recoverable */ |
108 | 108 | ||
109 | #define ERFKILL 132 /* Operation not possible due to RF-kill */ | ||
110 | |||
109 | #endif | 111 | #endif |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 3f0eaa397ef5..7e09c5c1ed02 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -311,6 +311,7 @@ unifdef-y += ptrace.h | |||
311 | unifdef-y += qnx4_fs.h | 311 | unifdef-y += qnx4_fs.h |
312 | unifdef-y += quota.h | 312 | unifdef-y += quota.h |
313 | unifdef-y += random.h | 313 | unifdef-y += random.h |
314 | unifdef-y += rfkill.h | ||
314 | unifdef-y += irqnr.h | 315 | unifdef-y += irqnr.h |
315 | unifdef-y += reboot.h | 316 | unifdef-y += reboot.h |
316 | unifdef-y += reiserfs_fs.h | 317 | unifdef-y += reiserfs_fs.h |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 34de8b21f6d4..a9173d5434d1 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -1092,6 +1092,7 @@ enum ieee80211_key_len { | |||
1092 | WLAN_KEY_LEN_WEP104 = 13, | 1092 | WLAN_KEY_LEN_WEP104 = 13, |
1093 | WLAN_KEY_LEN_CCMP = 16, | 1093 | WLAN_KEY_LEN_CCMP = 16, |
1094 | WLAN_KEY_LEN_TKIP = 32, | 1094 | WLAN_KEY_LEN_TKIP = 32, |
1095 | WLAN_KEY_LEN_AES_CMAC = 16, | ||
1095 | }; | 1096 | }; |
1096 | 1097 | ||
1097 | /* | 1098 | /* |
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index b86fa2ffca0c..81bc252dc8ac 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
@@ -198,6 +198,7 @@ static inline int notifier_to_errno(int ret) | |||
198 | #define NETDEV_CHANGENAME 0x000A | 198 | #define NETDEV_CHANGENAME 0x000A |
199 | #define NETDEV_FEAT_CHANGE 0x000B | 199 | #define NETDEV_FEAT_CHANGE 0x000B |
200 | #define NETDEV_BONDING_FAILOVER 0x000C | 200 | #define NETDEV_BONDING_FAILOVER 0x000C |
201 | #define NETDEV_PRE_UP 0x000D | ||
201 | 202 | ||
202 | #define SYS_DOWN 0x0001 /* Notify of system down */ | 203 | #define SYS_DOWN 0x0001 /* Notify of system down */ |
203 | #define SYS_RESTART SYS_DOWN | 204 | #define SYS_RESTART SYS_DOWN |
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h index de18ef227e00..ee3eddea8568 100644 --- a/include/linux/rfkill.h +++ b/include/linux/rfkill.h | |||
@@ -4,6 +4,7 @@ | |||
4 | /* | 4 | /* |
5 | * Copyright (C) 2006 - 2007 Ivo van Doorn | 5 | * Copyright (C) 2006 - 2007 Ivo van Doorn |
6 | * Copyright (C) 2007 Dmitry Torokhov | 6 | * Copyright (C) 2007 Dmitry Torokhov |
7 | * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> | ||
7 | * | 8 | * |
8 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by | 10 | * it under the terms of the GNU General Public License as published by |
@@ -22,117 +23,341 @@ | |||
22 | */ | 23 | */ |
23 | 24 | ||
24 | #include <linux/types.h> | 25 | #include <linux/types.h> |
25 | #include <linux/kernel.h> | 26 | |
26 | #include <linux/list.h> | 27 | /* define userspace visible states */ |
27 | #include <linux/mutex.h> | 28 | #define RFKILL_STATE_SOFT_BLOCKED 0 |
28 | #include <linux/device.h> | 29 | #define RFKILL_STATE_UNBLOCKED 1 |
29 | #include <linux/leds.h> | 30 | #define RFKILL_STATE_HARD_BLOCKED 2 |
30 | 31 | ||
31 | /** | 32 | /** |
32 | * enum rfkill_type - type of rfkill switch. | 33 | * enum rfkill_type - type of rfkill switch. |
33 | * RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. | 34 | * |
34 | * RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. | 35 | * @RFKILL_TYPE_ALL: toggles all switches (userspace only) |
35 | * RFKILL_TYPE_UWB: switch is on a ultra wideband device. | 36 | * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. |
36 | * RFKILL_TYPE_WIMAX: switch is on a WiMAX device. | 37 | * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. |
37 | * RFKILL_TYPE_WWAN: switch is on a wireless WAN device. | 38 | * @RFKILL_TYPE_UWB: switch is on a ultra wideband device. |
39 | * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device. | ||
40 | * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device. | ||
41 | * @NUM_RFKILL_TYPES: number of defined rfkill types | ||
38 | */ | 42 | */ |
39 | enum rfkill_type { | 43 | enum rfkill_type { |
40 | RFKILL_TYPE_WLAN , | 44 | RFKILL_TYPE_ALL = 0, |
45 | RFKILL_TYPE_WLAN, | ||
41 | RFKILL_TYPE_BLUETOOTH, | 46 | RFKILL_TYPE_BLUETOOTH, |
42 | RFKILL_TYPE_UWB, | 47 | RFKILL_TYPE_UWB, |
43 | RFKILL_TYPE_WIMAX, | 48 | RFKILL_TYPE_WIMAX, |
44 | RFKILL_TYPE_WWAN, | 49 | RFKILL_TYPE_WWAN, |
45 | RFKILL_TYPE_MAX, | 50 | NUM_RFKILL_TYPES, |
46 | }; | 51 | }; |
47 | 52 | ||
48 | enum rfkill_state { | 53 | /** |
49 | RFKILL_STATE_SOFT_BLOCKED = 0, /* Radio output blocked */ | 54 | * enum rfkill_operation - operation types |
50 | RFKILL_STATE_UNBLOCKED = 1, /* Radio output allowed */ | 55 | * @RFKILL_OP_ADD: a device was added |
51 | RFKILL_STATE_HARD_BLOCKED = 2, /* Output blocked, non-overrideable */ | 56 | * @RFKILL_OP_DEL: a device was removed |
52 | RFKILL_STATE_MAX, /* marker for last valid state */ | 57 | * @RFKILL_OP_CHANGE: a device's state changed -- userspace changes one device |
58 | * @RFKILL_OP_CHANGE_ALL: userspace changes all devices (of a type, or all) | ||
59 | */ | ||
60 | enum rfkill_operation { | ||
61 | RFKILL_OP_ADD = 0, | ||
62 | RFKILL_OP_DEL, | ||
63 | RFKILL_OP_CHANGE, | ||
64 | RFKILL_OP_CHANGE_ALL, | ||
53 | }; | 65 | }; |
54 | 66 | ||
55 | /** | 67 | /** |
56 | * struct rfkill - rfkill control structure. | 68 | * struct rfkill_event - events for userspace on /dev/rfkill |
57 | * @name: Name of the switch. | 69 | * @idx: index of dev rfkill |
58 | * @type: Radio type which the button controls, the value stored | 70 | * @type: type of the rfkill struct |
59 | * here should be a value from enum rfkill_type. | 71 | * @op: operation code |
60 | * @state: State of the switch, "UNBLOCKED" means radio can operate. | 72 | * @hard: hard state (0/1) |
61 | * @mutex: Guards switch state transitions. It serializes callbacks | 73 | * @soft: soft state (0/1) |
62 | * and also protects the state. | 74 | * |
63 | * @data: Pointer to the RF button drivers private data which will be | 75 | * Structure used for userspace communication on /dev/rfkill, |
64 | * passed along when toggling radio state. | 76 | * used for events from the kernel and control to the kernel. |
65 | * @toggle_radio(): Mandatory handler to control state of the radio. | 77 | */ |
66 | * only RFKILL_STATE_SOFT_BLOCKED and RFKILL_STATE_UNBLOCKED are | 78 | struct rfkill_event { |
67 | * valid parameters. | 79 | __u32 idx; |
68 | * @get_state(): handler to read current radio state from hardware, | 80 | __u8 type; |
69 | * may be called from atomic context, should return 0 on success. | 81 | __u8 op; |
70 | * Either this handler OR judicious use of rfkill_force_state() is | 82 | __u8 soft, hard; |
71 | * MANDATORY for any driver capable of RFKILL_STATE_HARD_BLOCKED. | 83 | } __packed; |
72 | * @led_trigger: A LED trigger for this button's LED. | ||
73 | * @dev: Device structure integrating the switch into device tree. | ||
74 | * @node: Used to place switch into list of all switches known to the | ||
75 | * the system. | ||
76 | * | ||
77 | * This structure represents a RF switch located on a network device. | ||
78 | */ | ||
79 | struct rfkill { | ||
80 | const char *name; | ||
81 | enum rfkill_type type; | ||
82 | |||
83 | /* the mutex serializes callbacks and also protects | ||
84 | * the state */ | ||
85 | struct mutex mutex; | ||
86 | enum rfkill_state state; | ||
87 | void *data; | ||
88 | int (*toggle_radio)(void *data, enum rfkill_state state); | ||
89 | int (*get_state)(void *data, enum rfkill_state *state); | ||
90 | 84 | ||
91 | #ifdef CONFIG_RFKILL_LEDS | 85 | /* ioctl for turning off rfkill-input (if present) */ |
92 | struct led_trigger led_trigger; | 86 | #define RFKILL_IOC_MAGIC 'R' |
93 | #endif | 87 | #define RFKILL_IOC_NOINPUT 1 |
88 | #define RFKILL_IOCTL_NOINPUT _IO(RFKILL_IOC_MAGIC, RFKILL_IOC_NOINPUT) | ||
94 | 89 | ||
95 | struct device dev; | 90 | /* and that's all userspace gets */ |
96 | struct list_head node; | 91 | #ifdef __KERNEL__ |
97 | enum rfkill_state state_for_resume; | 92 | /* don't allow anyone to use these in the kernel */ |
93 | enum rfkill_user_states { | ||
94 | RFKILL_USER_STATE_SOFT_BLOCKED = RFKILL_STATE_SOFT_BLOCKED, | ||
95 | RFKILL_USER_STATE_UNBLOCKED = RFKILL_STATE_UNBLOCKED, | ||
96 | RFKILL_USER_STATE_HARD_BLOCKED = RFKILL_STATE_HARD_BLOCKED, | ||
98 | }; | 97 | }; |
99 | #define to_rfkill(d) container_of(d, struct rfkill, dev) | 98 | #undef RFKILL_STATE_SOFT_BLOCKED |
99 | #undef RFKILL_STATE_UNBLOCKED | ||
100 | #undef RFKILL_STATE_HARD_BLOCKED | ||
101 | |||
102 | #include <linux/types.h> | ||
103 | #include <linux/kernel.h> | ||
104 | #include <linux/list.h> | ||
105 | #include <linux/mutex.h> | ||
106 | #include <linux/device.h> | ||
107 | #include <linux/leds.h> | ||
108 | |||
109 | /* this is opaque */ | ||
110 | struct rfkill; | ||
111 | |||
112 | /** | ||
113 | * struct rfkill_ops - rfkill driver methods | ||
114 | * | ||
115 | * @poll: poll the rfkill block state(s) -- only assign this method | ||
116 | * when you need polling. When called, simply call one of the | ||
117 | * rfkill_set{,_hw,_sw}_state family of functions. If the hw | ||
118 | * is getting unblocked you need to take into account the return | ||
119 | * value of those functions to make sure the software block is | ||
120 | * properly used. | ||
121 | * @query: query the rfkill block state(s) and call exactly one of the | ||
122 | * rfkill_set{,_hw,_sw}_state family of functions. Assign this | ||
123 | * method if input events can cause hardware state changes to make | ||
124 | * the rfkill core query your driver before setting a requested | ||
125 | * block. | ||
126 | * @set_block: turn the transmitter on (blocked == false) or off | ||
127 | * (blocked == true) -- ignore and return 0 when hard blocked. | ||
128 | * This callback must be assigned. | ||
129 | */ | ||
130 | struct rfkill_ops { | ||
131 | void (*poll)(struct rfkill *rfkill, void *data); | ||
132 | void (*query)(struct rfkill *rfkill, void *data); | ||
133 | int (*set_block)(void *data, bool blocked); | ||
134 | }; | ||
135 | |||
136 | #if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE) | ||
137 | /** | ||
138 | * rfkill_alloc - allocate rfkill structure | ||
139 | * @name: name of the struct -- the string is not copied internally | ||
140 | * @parent: device that has rf switch on it | ||
141 | * @type: type of the switch (RFKILL_TYPE_*) | ||
142 | * @ops: rfkill methods | ||
143 | * @ops_data: data passed to each method | ||
144 | * | ||
145 | * This function should be called by the transmitter driver to allocate an | ||
146 | * rfkill structure. Returns %NULL on failure. | ||
147 | */ | ||
148 | struct rfkill * __must_check rfkill_alloc(const char *name, | ||
149 | struct device *parent, | ||
150 | const enum rfkill_type type, | ||
151 | const struct rfkill_ops *ops, | ||
152 | void *ops_data); | ||
100 | 153 | ||
101 | struct rfkill * __must_check rfkill_allocate(struct device *parent, | 154 | /** |
102 | enum rfkill_type type); | 155 | * rfkill_register - Register a rfkill structure. |
103 | void rfkill_free(struct rfkill *rfkill); | 156 | * @rfkill: rfkill structure to be registered |
157 | * | ||
158 | * This function should be called by the transmitter driver to register | ||
159 | * the rfkill structure needs to be registered. Before calling this function | ||
160 | * the driver needs to be ready to service method calls from rfkill. | ||
161 | */ | ||
104 | int __must_check rfkill_register(struct rfkill *rfkill); | 162 | int __must_check rfkill_register(struct rfkill *rfkill); |
163 | |||
164 | /** | ||
165 | * rfkill_pause_polling(struct rfkill *rfkill) | ||
166 | * | ||
167 | * Pause polling -- say transmitter is off for other reasons. | ||
168 | * NOTE: not necessary for suspend/resume -- in that case the | ||
169 | * core stops polling anyway | ||
170 | */ | ||
171 | void rfkill_pause_polling(struct rfkill *rfkill); | ||
172 | |||
173 | /** | ||
174 | * rfkill_resume_polling(struct rfkill *rfkill) | ||
175 | * | ||
176 | * Pause polling -- say transmitter is off for other reasons. | ||
177 | * NOTE: not necessary for suspend/resume -- in that case the | ||
178 | * core stops polling anyway | ||
179 | */ | ||
180 | void rfkill_resume_polling(struct rfkill *rfkill); | ||
181 | |||
182 | |||
183 | /** | ||
184 | * rfkill_unregister - Unregister a rfkill structure. | ||
185 | * @rfkill: rfkill structure to be unregistered | ||
186 | * | ||
187 | * This function should be called by the network driver during device | ||
188 | * teardown to destroy rfkill structure. Until it returns, the driver | ||
189 | * needs to be able to service method calls. | ||
190 | */ | ||
105 | void rfkill_unregister(struct rfkill *rfkill); | 191 | void rfkill_unregister(struct rfkill *rfkill); |
106 | 192 | ||
107 | int rfkill_force_state(struct rfkill *rfkill, enum rfkill_state state); | 193 | /** |
108 | int rfkill_set_default(enum rfkill_type type, enum rfkill_state state); | 194 | * rfkill_destroy - free rfkill structure |
195 | * @rfkill: rfkill structure to be destroyed | ||
196 | * | ||
197 | * Destroys the rfkill structure. | ||
198 | */ | ||
199 | void rfkill_destroy(struct rfkill *rfkill); | ||
200 | |||
201 | /** | ||
202 | * rfkill_set_hw_state - Set the internal rfkill hardware block state | ||
203 | * @rfkill: pointer to the rfkill class to modify. | ||
204 | * @state: the current hardware block state to set | ||
205 | * | ||
206 | * rfkill drivers that get events when the hard-blocked state changes | ||
207 | * use this function to notify the rfkill core (and through that also | ||
208 | * userspace) of the current state -- they should also use this after | ||
209 | * resume if the state could have changed. | ||
210 | * | ||
211 | * You need not (but may) call this function if poll_state is assigned. | ||
212 | * | ||
213 | * This function can be called in any context, even from within rfkill | ||
214 | * callbacks. | ||
215 | * | ||
216 | * The function returns the combined block state (true if transmitter | ||
217 | * should be blocked) so that drivers need not keep track of the soft | ||
218 | * block state -- which they might not be able to. | ||
219 | */ | ||
220 | bool __must_check rfkill_set_hw_state(struct rfkill *rfkill, bool blocked); | ||
221 | |||
222 | /** | ||
223 | * rfkill_set_sw_state - Set the internal rfkill software block state | ||
224 | * @rfkill: pointer to the rfkill class to modify. | ||
225 | * @state: the current software block state to set | ||
226 | * | ||
227 | * rfkill drivers that get events when the soft-blocked state changes | ||
228 | * (yes, some platforms directly act on input but allow changing again) | ||
229 | * use this function to notify the rfkill core (and through that also | ||
230 | * userspace) of the current state -- they should also use this after | ||
231 | * resume if the state could have changed. | ||
232 | * | ||
233 | * This function can be called in any context, even from within rfkill | ||
234 | * callbacks. | ||
235 | * | ||
236 | * The function returns the combined block state (true if transmitter | ||
237 | * should be blocked). | ||
238 | */ | ||
239 | bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked); | ||
240 | |||
241 | /** | ||
242 | * rfkill_set_states - Set the internal rfkill block states | ||
243 | * @rfkill: pointer to the rfkill class to modify. | ||
244 | * @sw: the current software block state to set | ||
245 | * @hw: the current hardware block state to set | ||
246 | * | ||
247 | * This function can be called in any context, even from within rfkill | ||
248 | * callbacks. | ||
249 | */ | ||
250 | void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw); | ||
109 | 251 | ||
110 | /** | 252 | /** |
111 | * rfkill_state_complement - return complementar state | 253 | * rfkill_set_global_sw_state - set global sw block default |
112 | * @state: state to return the complement of | 254 | * @type: rfkill type to set default for |
255 | * @blocked: default to set | ||
113 | * | 256 | * |
114 | * Returns RFKILL_STATE_SOFT_BLOCKED if @state is RFKILL_STATE_UNBLOCKED, | 257 | * This function sets the global default -- use at boot if your platform has |
115 | * returns RFKILL_STATE_UNBLOCKED otherwise. | 258 | * an rfkill switch. If not early enough this call may be ignored. |
259 | * | ||
260 | * XXX: instead of ignoring -- how about just updating all currently | ||
261 | * registered drivers? | ||
116 | */ | 262 | */ |
117 | static inline enum rfkill_state rfkill_state_complement(enum rfkill_state state) | 263 | void rfkill_set_global_sw_state(const enum rfkill_type type, bool blocked); |
264 | |||
265 | /** | ||
266 | * rfkill_blocked - query rfkill block | ||
267 | * | ||
268 | * @rfkill: rfkill struct to query | ||
269 | */ | ||
270 | bool rfkill_blocked(struct rfkill *rfkill); | ||
271 | #else /* !RFKILL */ | ||
272 | static inline struct rfkill * __must_check | ||
273 | rfkill_alloc(const char *name, | ||
274 | struct device *parent, | ||
275 | const enum rfkill_type type, | ||
276 | const struct rfkill_ops *ops, | ||
277 | void *ops_data) | ||
278 | { | ||
279 | return ERR_PTR(-ENODEV); | ||
280 | } | ||
281 | |||
282 | static inline int __must_check rfkill_register(struct rfkill *rfkill) | ||
283 | { | ||
284 | if (rfkill == ERR_PTR(-ENODEV)) | ||
285 | return 0; | ||
286 | return -EINVAL; | ||
287 | } | ||
288 | |||
289 | static inline void rfkill_pause_polling(struct rfkill *rfkill) | ||
290 | { | ||
291 | } | ||
292 | |||
293 | static inline void rfkill_resume_polling(struct rfkill *rfkill) | ||
294 | { | ||
295 | } | ||
296 | |||
297 | static inline void rfkill_unregister(struct rfkill *rfkill) | ||
298 | { | ||
299 | } | ||
300 | |||
301 | static inline void rfkill_destroy(struct rfkill *rfkill) | ||
302 | { | ||
303 | } | ||
304 | |||
305 | static inline bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked) | ||
306 | { | ||
307 | return blocked; | ||
308 | } | ||
309 | |||
310 | static inline bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked) | ||
311 | { | ||
312 | return blocked; | ||
313 | } | ||
314 | |||
315 | static inline void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw) | ||
118 | { | 316 | { |
119 | return (state == RFKILL_STATE_UNBLOCKED) ? | ||
120 | RFKILL_STATE_SOFT_BLOCKED : RFKILL_STATE_UNBLOCKED; | ||
121 | } | 317 | } |
122 | 318 | ||
319 | static inline void rfkill_set_global_sw_state(const enum rfkill_type type, | ||
320 | bool blocked) | ||
321 | { | ||
322 | } | ||
323 | |||
324 | static inline bool rfkill_blocked(struct rfkill *rfkill) | ||
325 | { | ||
326 | return false; | ||
327 | } | ||
328 | #endif /* RFKILL || RFKILL_MODULE */ | ||
329 | |||
330 | |||
331 | #ifdef CONFIG_RFKILL_LEDS | ||
123 | /** | 332 | /** |
124 | * rfkill_get_led_name - Get the LED trigger name for the button's LED. | 333 | * rfkill_get_led_trigger_name - Get the LED trigger name for the button's LED. |
125 | * This function might return a NULL pointer if registering of the | 334 | * This function might return a NULL pointer if registering of the |
126 | * LED trigger failed. | 335 | * LED trigger failed. Use this as "default_trigger" for the LED. |
127 | * Use this as "default_trigger" for the LED. | ||
128 | */ | 336 | */ |
129 | static inline char *rfkill_get_led_name(struct rfkill *rfkill) | 337 | const char *rfkill_get_led_trigger_name(struct rfkill *rfkill); |
130 | { | 338 | |
131 | #ifdef CONFIG_RFKILL_LEDS | 339 | /** |
132 | return (char *)(rfkill->led_trigger.name); | 340 | * rfkill_set_led_trigger_name -- set the LED trigger name |
341 | * @rfkill: rfkill struct | ||
342 | * @name: LED trigger name | ||
343 | * | ||
344 | * This function sets the LED trigger name of the radio LED | ||
345 | * trigger that rfkill creates. It is optional, but if called | ||
346 | * must be called before rfkill_register() to be effective. | ||
347 | */ | ||
348 | void rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name); | ||
133 | #else | 349 | #else |
350 | static inline const char *rfkill_get_led_trigger_name(struct rfkill *rfkill) | ||
351 | { | ||
134 | return NULL; | 352 | return NULL; |
135 | #endif | ||
136 | } | 353 | } |
137 | 354 | ||
355 | static inline void | ||
356 | rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name) | ||
357 | { | ||
358 | } | ||
359 | #endif | ||
360 | |||
361 | #endif /* __KERNEL__ */ | ||
362 | |||
138 | #endif /* RFKILL_H */ | 363 | #endif /* RFKILL_H */ |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index f20da7d63b1e..1a21895b732b 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -752,6 +752,19 @@ enum wiphy_params_flags { | |||
752 | }; | 752 | }; |
753 | 753 | ||
754 | /** | 754 | /** |
755 | * enum tx_power_setting - TX power adjustment | ||
756 | * | ||
757 | * @TX_POWER_AUTOMATIC: the dbm parameter is ignored | ||
758 | * @TX_POWER_LIMITED: limit TX power by the dbm parameter | ||
759 | * @TX_POWER_FIXED: fix TX power to the dbm parameter | ||
760 | */ | ||
761 | enum tx_power_setting { | ||
762 | TX_POWER_AUTOMATIC, | ||
763 | TX_POWER_LIMITED, | ||
764 | TX_POWER_FIXED, | ||
765 | }; | ||
766 | |||
767 | /** | ||
755 | * struct cfg80211_ops - backend description for wireless configuration | 768 | * struct cfg80211_ops - backend description for wireless configuration |
756 | * | 769 | * |
757 | * This struct is registered by fullmac card drivers and/or wireless stacks | 770 | * This struct is registered by fullmac card drivers and/or wireless stacks |
@@ -837,6 +850,13 @@ enum wiphy_params_flags { | |||
837 | * @changed bitfield (see &enum wiphy_params_flags) describes which values | 850 | * @changed bitfield (see &enum wiphy_params_flags) describes which values |
838 | * have changed. The actual parameter values are available in | 851 | * have changed. The actual parameter values are available in |
839 | * struct wiphy. If returning an error, no value should be changed. | 852 | * struct wiphy. If returning an error, no value should be changed. |
853 | * | ||
854 | * @set_tx_power: set the transmit power according to the parameters | ||
855 | * @get_tx_power: store the current TX power into the dbm variable; | ||
856 | * return 0 if successful | ||
857 | * | ||
858 | * @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting | ||
859 | * functions to adjust rfkill hw state | ||
840 | */ | 860 | */ |
841 | struct cfg80211_ops { | 861 | struct cfg80211_ops { |
842 | int (*suspend)(struct wiphy *wiphy); | 862 | int (*suspend)(struct wiphy *wiphy); |
@@ -928,6 +948,12 @@ struct cfg80211_ops { | |||
928 | int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev); | 948 | int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev); |
929 | 949 | ||
930 | int (*set_wiphy_params)(struct wiphy *wiphy, u32 changed); | 950 | int (*set_wiphy_params)(struct wiphy *wiphy, u32 changed); |
951 | |||
952 | int (*set_tx_power)(struct wiphy *wiphy, | ||
953 | enum tx_power_setting type, int dbm); | ||
954 | int (*get_tx_power)(struct wiphy *wiphy, int *dbm); | ||
955 | |||
956 | void (*rfkill_poll)(struct wiphy *wiphy); | ||
931 | }; | 957 | }; |
932 | 958 | ||
933 | /* | 959 | /* |
@@ -1451,6 +1477,12 @@ int cfg80211_wext_siwencode(struct net_device *dev, | |||
1451 | int cfg80211_wext_giwencode(struct net_device *dev, | 1477 | int cfg80211_wext_giwencode(struct net_device *dev, |
1452 | struct iw_request_info *info, | 1478 | struct iw_request_info *info, |
1453 | struct iw_point *erq, char *keybuf); | 1479 | struct iw_point *erq, char *keybuf); |
1480 | int cfg80211_wext_siwtxpower(struct net_device *dev, | ||
1481 | struct iw_request_info *info, | ||
1482 | union iwreq_data *data, char *keybuf); | ||
1483 | int cfg80211_wext_giwtxpower(struct net_device *dev, | ||
1484 | struct iw_request_info *info, | ||
1485 | union iwreq_data *data, char *keybuf); | ||
1454 | 1486 | ||
1455 | /* | 1487 | /* |
1456 | * callbacks for asynchronous cfg80211 methods, notification | 1488 | * callbacks for asynchronous cfg80211 methods, notification |
@@ -1636,4 +1668,23 @@ void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, | |||
1636 | */ | 1668 | */ |
1637 | void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp); | 1669 | void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp); |
1638 | 1670 | ||
1671 | /** | ||
1672 | * wiphy_rfkill_set_hw_state - notify cfg80211 about hw block state | ||
1673 | * @wiphy: the wiphy | ||
1674 | * @blocked: block status | ||
1675 | */ | ||
1676 | void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked); | ||
1677 | |||
1678 | /** | ||
1679 | * wiphy_rfkill_start_polling - start polling rfkill | ||
1680 | * @wiphy: the wiphy | ||
1681 | */ | ||
1682 | void wiphy_rfkill_start_polling(struct wiphy *wiphy); | ||
1683 | |||
1684 | /** | ||
1685 | * wiphy_rfkill_stop_polling - stop polling rfkill | ||
1686 | * @wiphy: the wiphy | ||
1687 | */ | ||
1688 | void wiphy_rfkill_stop_polling(struct wiphy *wiphy); | ||
1689 | |||
1639 | #endif /* __NET_CFG80211_H */ | 1690 | #endif /* __NET_CFG80211_H */ |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index d72346ff3247..17d61d19d912 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -526,8 +526,7 @@ enum ieee80211_conf_flags { | |||
526 | /** | 526 | /** |
527 | * enum ieee80211_conf_changed - denotes which configuration changed | 527 | * enum ieee80211_conf_changed - denotes which configuration changed |
528 | * | 528 | * |
529 | * @IEEE80211_CONF_CHANGE_RADIO_ENABLED: the value of radio_enabled changed | 529 | * @_IEEE80211_CONF_CHANGE_RADIO_ENABLED: DEPRECATED |
530 | * @_IEEE80211_CONF_CHANGE_BEACON_INTERVAL: DEPRECATED | ||
531 | * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed | 530 | * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed |
532 | * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed | 531 | * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed |
533 | * @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed | 532 | * @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed |
@@ -537,8 +536,7 @@ enum ieee80211_conf_flags { | |||
537 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed | 536 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed |
538 | */ | 537 | */ |
539 | enum ieee80211_conf_changed { | 538 | enum ieee80211_conf_changed { |
540 | IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0), | 539 | _IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0), |
541 | _IEEE80211_CONF_CHANGE_BEACON_INTERVAL = BIT(1), | ||
542 | IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), | 540 | IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), |
543 | IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3), | 541 | IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3), |
544 | IEEE80211_CONF_CHANGE_PS = BIT(4), | 542 | IEEE80211_CONF_CHANGE_PS = BIT(4), |
@@ -549,12 +547,12 @@ enum ieee80211_conf_changed { | |||
549 | }; | 547 | }; |
550 | 548 | ||
551 | static inline __deprecated enum ieee80211_conf_changed | 549 | static inline __deprecated enum ieee80211_conf_changed |
552 | __IEEE80211_CONF_CHANGE_BEACON_INTERVAL(void) | 550 | __IEEE80211_CONF_CHANGE_RADIO_ENABLED(void) |
553 | { | 551 | { |
554 | return _IEEE80211_CONF_CHANGE_BEACON_INTERVAL; | 552 | return _IEEE80211_CONF_CHANGE_RADIO_ENABLED; |
555 | } | 553 | } |
556 | #define IEEE80211_CONF_CHANGE_BEACON_INTERVAL \ | 554 | #define IEEE80211_CONF_CHANGE_RADIO_ENABLED \ |
557 | __IEEE80211_CONF_CHANGE_BEACON_INTERVAL() | 555 | __IEEE80211_CONF_CHANGE_RADIO_ENABLED() |
558 | 556 | ||
559 | /** | 557 | /** |
560 | * struct ieee80211_conf - configuration of the device | 558 | * struct ieee80211_conf - configuration of the device |
@@ -564,7 +562,7 @@ __IEEE80211_CONF_CHANGE_BEACON_INTERVAL(void) | |||
564 | * @flags: configuration flags defined above | 562 | * @flags: configuration flags defined above |
565 | * | 563 | * |
566 | * @radio_enabled: when zero, driver is required to switch off the radio. | 564 | * @radio_enabled: when zero, driver is required to switch off the radio. |
567 | * @beacon_int: beacon interval (TODO make interface config) | 565 | * @beacon_int: DEPRECATED, DO NOT USE |
568 | * | 566 | * |
569 | * @listen_interval: listen interval in units of beacon interval | 567 | * @listen_interval: listen interval in units of beacon interval |
570 | * @max_sleep_period: the maximum number of beacon intervals to sleep for | 568 | * @max_sleep_period: the maximum number of beacon intervals to sleep for |
@@ -589,13 +587,13 @@ __IEEE80211_CONF_CHANGE_BEACON_INTERVAL(void) | |||
589 | * number of transmissions not the number of retries | 587 | * number of transmissions not the number of retries |
590 | */ | 588 | */ |
591 | struct ieee80211_conf { | 589 | struct ieee80211_conf { |
592 | int beacon_int; | 590 | int __deprecated beacon_int; |
593 | u32 flags; | 591 | u32 flags; |
594 | int power_level, dynamic_ps_timeout; | 592 | int power_level, dynamic_ps_timeout; |
595 | int max_sleep_period; | 593 | int max_sleep_period; |
596 | 594 | ||
597 | u16 listen_interval; | 595 | u16 listen_interval; |
598 | bool radio_enabled; | 596 | bool __deprecated radio_enabled; |
599 | 597 | ||
600 | u8 long_frame_max_tx_count, short_frame_max_tx_count; | 598 | u8 long_frame_max_tx_count, short_frame_max_tx_count; |
601 | 599 | ||
@@ -1406,6 +1404,10 @@ enum ieee80211_ampdu_mlme_action { | |||
1406 | * is the first frame we expect to perform the action on. Notice | 1404 | * is the first frame we expect to perform the action on. Notice |
1407 | * that TX/RX_STOP can pass NULL for this parameter. | 1405 | * that TX/RX_STOP can pass NULL for this parameter. |
1408 | * Returns a negative error code on failure. | 1406 | * Returns a negative error code on failure. |
1407 | * | ||
1408 | * @rfkill_poll: Poll rfkill hardware state. If you need this, you also | ||
1409 | * need to set wiphy->rfkill_poll to %true before registration, | ||
1410 | * and need to call wiphy_rfkill_set_hw_state() in the callback. | ||
1409 | */ | 1411 | */ |
1410 | struct ieee80211_ops { | 1412 | struct ieee80211_ops { |
1411 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); | 1413 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); |
@@ -1454,6 +1456,8 @@ struct ieee80211_ops { | |||
1454 | int (*ampdu_action)(struct ieee80211_hw *hw, | 1456 | int (*ampdu_action)(struct ieee80211_hw *hw, |
1455 | enum ieee80211_ampdu_mlme_action action, | 1457 | enum ieee80211_ampdu_mlme_action action, |
1456 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); | 1458 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); |
1459 | |||
1460 | void (*rfkill_poll)(struct ieee80211_hw *hw); | ||
1457 | }; | 1461 | }; |
1458 | 1462 | ||
1459 | /** | 1463 | /** |
diff --git a/include/net/wimax.h b/include/net/wimax.h index 6b3824edb39e..2af7bf839f23 100644 --- a/include/net/wimax.h +++ b/include/net/wimax.h | |||
@@ -253,7 +253,6 @@ | |||
253 | struct net_device; | 253 | struct net_device; |
254 | struct genl_info; | 254 | struct genl_info; |
255 | struct wimax_dev; | 255 | struct wimax_dev; |
256 | struct input_dev; | ||
257 | 256 | ||
258 | /** | 257 | /** |
259 | * struct wimax_dev - Generic WiMAX device | 258 | * struct wimax_dev - Generic WiMAX device |
@@ -293,8 +292,8 @@ struct input_dev; | |||
293 | * See wimax_reset()'s documentation. | 292 | * See wimax_reset()'s documentation. |
294 | * | 293 | * |
295 | * @name: [fill] A way to identify this device. We need to register a | 294 | * @name: [fill] A way to identify this device. We need to register a |
296 | * name with many subsystems (input for RFKILL, workqueue | 295 | * name with many subsystems (rfkill, workqueue creation, etc). |
297 | * creation, etc). We can't use the network device name as that | 296 | * We can't use the network device name as that |
298 | * might change and in some instances we don't know it yet (until | 297 | * might change and in some instances we don't know it yet (until |
299 | * we don't call register_netdev()). So we generate an unique one | 298 | * we don't call register_netdev()). So we generate an unique one |
300 | * using the driver name and device bus id, place it here and use | 299 | * using the driver name and device bus id, place it here and use |
@@ -316,9 +315,6 @@ struct input_dev; | |||
316 | * | 315 | * |
317 | * @rfkill: [private] integration into the RF-Kill infrastructure. | 316 | * @rfkill: [private] integration into the RF-Kill infrastructure. |
318 | * | 317 | * |
319 | * @rfkill_input: [private] virtual input device to process the | ||
320 | * hardware RF Kill switches. | ||
321 | * | ||
322 | * @rf_sw: [private] State of the software radio switch (OFF/ON) | 318 | * @rf_sw: [private] State of the software radio switch (OFF/ON) |
323 | * | 319 | * |
324 | * @rf_hw: [private] State of the hardware radio switch (OFF/ON) | 320 | * @rf_hw: [private] State of the hardware radio switch (OFF/ON) |