Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
net
wireless
iwlwifi
dvm
agn.h
Go to the documentation of this file.
1
/******************************************************************************
2
*
3
* This file is provided under a dual BSD/GPLv2 license. When using or
4
* redistributing this file, you may do so under either license.
5
*
6
* GPL LICENSE SUMMARY
7
*
8
* Copyright(c) 2008 - 2012 Intel Corporation. All rights reserved.
9
*
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of version 2 of the GNU General Public License as
12
* published by the Free Software Foundation.
13
*
14
* This program is distributed in the hope that it will be useful, but
15
* WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
* General Public License for more details.
18
*
19
* You should have received a copy of the GNU General Public License
20
* along with this program; if not, write to the Free Software
21
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
22
* USA
23
*
24
* The full GNU General Public License is included in this distribution
25
* in the file called LICENSE.GPL.
26
*
27
* Contact Information:
28
* Intel Linux Wireless <
[email protected]
>
29
* Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
30
*
31
* BSD LICENSE
32
*
33
* Copyright(c) 2005 - 2012 Intel Corporation. All rights reserved.
34
* All rights reserved.
35
*
36
* Redistribution and use in source and binary forms, with or without
37
* modification, are permitted provided that the following conditions
38
* are met:
39
*
40
* * Redistributions of source code must retain the above copyright
41
* notice, this list of conditions and the following disclaimer.
42
* * Redistributions in binary form must reproduce the above copyright
43
* notice, this list of conditions and the following disclaimer in
44
* the documentation and/or other materials provided with the
45
* distribution.
46
* * Neither the name Intel Corporation nor the names of its
47
* contributors may be used to endorse or promote products derived
48
* from this software without specific prior written permission.
49
*
50
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
51
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
52
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
53
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
54
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
55
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
56
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
57
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
58
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
59
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
60
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
61
*****************************************************************************/
62
63
#ifndef __iwl_agn_h__
64
#define __iwl_agn_h__
65
66
#include "
iwl-config.h
"
67
68
#include "
dev.h
"
69
70
/* The first 11 queues (0-10) are used otherwise */
71
#define IWLAGN_FIRST_AMPDU_QUEUE 11
72
73
/* AUX (TX during scan dwell) queue */
74
#define IWL_AUX_QUEUE 10
75
76
/* device operations */
77
extern
struct
iwl_lib_ops
iwl1000_lib
;
78
extern
struct
iwl_lib_ops
iwl2000_lib
;
79
extern
struct
iwl_lib_ops
iwl2030_lib
;
80
extern
struct
iwl_lib_ops
iwl5000_lib
;
81
extern
struct
iwl_lib_ops
iwl5150_lib
;
82
extern
struct
iwl_lib_ops
iwl6000_lib
;
83
extern
struct
iwl_lib_ops
iwl6030_lib
;
84
85
86
#define TIME_UNIT 1024
87
88
/*****************************************************
89
* DRIVER STATUS FUNCTIONS
90
******************************************************/
91
#define STATUS_RF_KILL_HW 0
92
#define STATUS_CT_KILL 1
93
#define STATUS_ALIVE 2
94
#define STATUS_READY 3
95
#define STATUS_EXIT_PENDING 5
96
#define STATUS_STATISTICS 6
97
#define STATUS_SCANNING 7
98
#define STATUS_SCAN_ABORTING 8
99
#define STATUS_SCAN_HW 9
100
#define STATUS_FW_ERROR 10
101
#define STATUS_CHANNEL_SWITCH_PENDING 11
102
#define STATUS_SCAN_COMPLETE 12
103
#define STATUS_POWER_PMI 13
104
#define STATUS_SCAN_ROC_EXPIRED 14
105
106
struct
iwl_ucode_capabilities
;
107
108
extern
struct
ieee80211_ops
iwlagn_hw_ops
;
109
110
static
inline
void
iwl_set_calib_hdr(
struct
iwl_calib_hdr
*
hdr
,
u8
cmd
)
111
{
112
hdr->
op_code
=
cmd
;
113
hdr->
first_group
= 0;
114
hdr->
groups_num
= 1;
115
hdr->
data_valid
= 1;
116
}
117
118
void
iwl_down
(
struct
iwl_priv
*
priv
);
119
void
iwl_cancel_deferred_work
(
struct
iwl_priv
*
priv
);
120
void
iwlagn_prepare_restart
(
struct
iwl_priv
*
priv
);
121
int
__must_check
iwl_rx_dispatch
(
struct
iwl_op_mode
*op_mode,
122
struct
iwl_rx_cmd_buffer
*rxb,
123
struct
iwl_device_cmd
*
cmd
);
124
125
bool
iwl_check_for_ct_kill
(
struct
iwl_priv
*
priv
);
126
127
void
iwlagn_lift_passive_no_rx
(
struct
iwl_priv
*
priv
);
128
129
/* MAC80211 */
130
struct
ieee80211_hw
*
iwl_alloc_all
(
void
);
131
int
iwlagn_mac_setup_register
(
struct
iwl_priv
*
priv
,
132
const
struct
iwl_ucode_capabilities
*capa);
133
void
iwlagn_mac_unregister
(
struct
iwl_priv
*
priv
);
134
135
/* commands */
136
int
iwl_dvm_send_cmd
(
struct
iwl_priv
*
priv
,
struct
iwl_host_cmd
*
cmd
);
137
int
iwl_dvm_send_cmd_pdu
(
struct
iwl_priv
*
priv
,
u8
id
,
138
u32
flags
,
u16
len,
const
void
*
data
);
139
140
/* RXON */
141
void
iwl_connection_init_rx_config
(
struct
iwl_priv
*
priv
,
142
struct
iwl_rxon_context
*
ctx
);
143
int
iwlagn_set_pan_params
(
struct
iwl_priv
*
priv
);
144
int
iwlagn_commit_rxon
(
struct
iwl_priv
*
priv
,
struct
iwl_rxon_context
*
ctx
);
145
void
iwlagn_set_rxon_chain
(
struct
iwl_priv
*
priv
,
struct
iwl_rxon_context
*
ctx
);
146
int
iwlagn_mac_config
(
struct
ieee80211_hw
*
hw
,
u32
changed
);
147
void
iwlagn_bss_info_changed
(
struct
ieee80211_hw
*
hw
,
148
struct
ieee80211_vif
*vif,
149
struct
ieee80211_bss_conf
*bss_conf,
150
u32
changes);
151
void
iwlagn_config_ht40
(
struct
ieee80211_conf
*
conf
,
152
struct
iwl_rxon_context
*
ctx
);
153
void
iwl_set_rxon_ht
(
struct
iwl_priv
*
priv
,
struct
iwl_ht_config
*ht_conf);
154
void
iwl_set_rxon_channel
(
struct
iwl_priv
*
priv
,
struct
ieee80211_channel
*ch,
155
struct
iwl_rxon_context
*
ctx
);
156
void
iwl_set_flags_for_band
(
struct
iwl_priv
*
priv
,
157
struct
iwl_rxon_context
*
ctx
,
158
enum
ieee80211_band
band,
159
struct
ieee80211_vif
*vif);
160
161
/* uCode */
162
int
iwl_send_bt_env
(
struct
iwl_priv
*
priv
,
u8
action
,
u8
type
);
163
void
iwl_send_prio_tbl
(
struct
iwl_priv
*
priv
);
164
int
iwl_init_alive_start
(
struct
iwl_priv
*
priv
);
165
int
iwl_run_init_ucode
(
struct
iwl_priv
*
priv
);
166
int
iwl_load_ucode_wait_alive
(
struct
iwl_priv
*
priv
,
167
enum
iwl_ucode_type
ucode_type
);
168
int
iwl_send_calib_results
(
struct
iwl_priv
*
priv
);
169
int
iwl_calib_set
(
struct
iwl_priv
*
priv
,
170
const
struct
iwl_calib_hdr
*
cmd
,
int
len);
171
void
iwl_calib_free_results
(
struct
iwl_priv
*
priv
);
172
int
iwl_dump_nic_event_log
(
struct
iwl_priv
*
priv
,
bool
full_log,
173
char
**
buf
,
bool
display
);
174
int
iwlagn_hw_valid_rtc_data_addr
(
u32
addr
);
175
176
/* lib */
177
int
iwlagn_send_tx_power
(
struct
iwl_priv
*
priv
);
178
void
iwlagn_temperature
(
struct
iwl_priv
*
priv
);
179
int
iwlagn_txfifo_flush
(
struct
iwl_priv
*
priv
,
u16
flush_control);
180
void
iwlagn_dev_txfifo_flush
(
struct
iwl_priv
*
priv
,
u16
flush_control);
181
int
iwlagn_send_beacon_cmd
(
struct
iwl_priv
*
priv
);
182
int
iwl_send_statistics_request
(
struct
iwl_priv
*
priv
,
183
u8
flags
,
bool
clear
);
184
185
static
inline
const
struct
ieee80211_supported_band
*iwl_get_hw_mode(
186
struct
iwl_priv
*
priv
,
enum
ieee80211_band
band
)
187
{
188
return
priv->
hw
->wiphy->bands[
band
];
189
}
190
191
#ifdef CONFIG_PM_SLEEP
192
int
iwlagn_send_patterns(
struct
iwl_priv
*
priv
,
193
struct
cfg80211_wowlan
*wowlan);
194
int
iwlagn_suspend(
struct
iwl_priv
*
priv
,
struct
cfg80211_wowlan
*wowlan);
195
#endif
196
197
/* rx */
198
int
iwlagn_hwrate_to_mac80211_idx
(
u32
rate_n_flags,
enum
ieee80211_band
band
);
199
void
iwl_setup_rx_handlers
(
struct
iwl_priv
*
priv
);
200
void
iwl_chswitch_done
(
struct
iwl_priv
*
priv
,
bool
is_success);
201
202
203
/* tx */
204
int
iwlagn_tx_skb
(
struct
iwl_priv
*
priv
,
205
struct
ieee80211_sta
*sta,
206
struct
sk_buff
*
skb
);
207
int
iwlagn_tx_agg_start
(
struct
iwl_priv
*
priv
,
struct
ieee80211_vif
*vif,
208
struct
ieee80211_sta
*sta,
u16
tid,
u16
*
ssn
);
209
int
iwlagn_tx_agg_oper
(
struct
iwl_priv
*
priv
,
struct
ieee80211_vif
*vif,
210
struct
ieee80211_sta
*sta,
u16
tid,
u8
buf_size
);
211
int
iwlagn_tx_agg_stop
(
struct
iwl_priv
*
priv
,
struct
ieee80211_vif
*vif,
212
struct
ieee80211_sta
*sta,
u16
tid);
213
int
iwlagn_rx_reply_compressed_ba
(
struct
iwl_priv
*
priv
,
214
struct
iwl_rx_cmd_buffer
*rxb,
215
struct
iwl_device_cmd
*
cmd
);
216
int
iwlagn_rx_reply_tx
(
struct
iwl_priv
*
priv
,
struct
iwl_rx_cmd_buffer
*rxb,
217
struct
iwl_device_cmd
*
cmd
);
218
219
static
inline
u32
iwl_tx_status_to_mac80211(
u32
status
)
220
{
221
status &=
TX_STATUS_MSK
;
222
223
switch
(status) {
224
case
TX_STATUS_SUCCESS
:
225
case
TX_STATUS_DIRECT_DONE
:
226
return
IEEE80211_TX_STAT_ACK
;
227
case
TX_STATUS_FAIL_DEST_PS
:
228
case
TX_STATUS_FAIL_PASSIVE_NO_RX
:
229
return
IEEE80211_TX_STAT_TX_FILTERED
;
230
default
:
231
return
0;
232
}
233
}
234
235
static
inline
bool
iwl_is_tx_success(
u32
status)
236
{
237
status &=
TX_STATUS_MSK
;
238
return
(status ==
TX_STATUS_SUCCESS
) ||
239
(status ==
TX_STATUS_DIRECT_DONE
);
240
}
241
242
u8
iwl_toggle_tx_ant
(
struct
iwl_priv
*
priv
,
u8
ant_idx,
u8
valid
);
243
244
/* scan */
245
void
iwlagn_post_scan
(
struct
iwl_priv
*
priv
);
246
void
iwlagn_disable_roc
(
struct
iwl_priv
*
priv
);
247
int
iwl_force_rf_reset
(
struct
iwl_priv
*
priv
,
bool
external
);
248
void
iwl_init_scan_params
(
struct
iwl_priv
*
priv
);
249
int
iwl_scan_cancel
(
struct
iwl_priv
*
priv
);
250
void
iwl_scan_cancel_timeout
(
struct
iwl_priv
*
priv
,
unsigned
long
ms
);
251
void
iwl_force_scan_end
(
struct
iwl_priv
*
priv
);
252
void
iwl_internal_short_hw_scan
(
struct
iwl_priv
*
priv
);
253
void
iwl_setup_rx_scan_handlers
(
struct
iwl_priv
*
priv
);
254
void
iwl_setup_scan_deferred_work
(
struct
iwl_priv
*
priv
);
255
void
iwl_cancel_scan_deferred_work
(
struct
iwl_priv
*
priv
);
256
int
__must_check
iwl_scan_initiate
(
struct
iwl_priv
*
priv
,
257
struct
ieee80211_vif
*vif,
258
enum
iwl_scan_type
scan_type,
259
enum
ieee80211_band
band
);
260
261
void
iwl_scan_roc_expired
(
struct
iwl_priv
*
priv
);
262
void
iwl_scan_offchannel_skb
(
struct
iwl_priv
*
priv
);
263
void
iwl_scan_offchannel_skb_status
(
struct
iwl_priv
*
priv
);
264
265
/* For faster active scanning, scan will move to the next channel if fewer than
266
* PLCP_QUIET_THRESH packets are heard on this channel within
267
* ACTIVE_QUIET_TIME after sending probe request. This shortens the dwell
268
* time if it's a quiet channel (nothing responded to our probe, and there's
269
* no other traffic).
270
* Disable "quiet" feature by setting PLCP_QUIET_THRESH to 0. */
271
#define IWL_ACTIVE_QUIET_TIME cpu_to_le16(10)
/* msec */
272
#define IWL_PLCP_QUIET_THRESH cpu_to_le16(1)
/* packets */
273
274
#define IWL_SCAN_CHECK_WATCHDOG (HZ * 15)
275
276
277
/* bt coex */
278
void
iwlagn_send_advance_bt_config
(
struct
iwl_priv
*
priv
);
279
int
iwlagn_bt_coex_profile_notif
(
struct
iwl_priv
*
priv
,
280
struct
iwl_rx_cmd_buffer
*rxb,
281
struct
iwl_device_cmd
*
cmd
);
282
void
iwlagn_bt_rx_handler_setup
(
struct
iwl_priv
*
priv
);
283
void
iwlagn_bt_setup_deferred_work
(
struct
iwl_priv
*
priv
);
284
void
iwlagn_bt_cancel_deferred_work
(
struct
iwl_priv
*
priv
);
285
void
iwlagn_bt_coex_rssi_monitor
(
struct
iwl_priv
*
priv
);
286
void
iwlagn_bt_adjust_rssi_monitor
(
struct
iwl_priv
*
priv
,
bool
rssi_ena);
287
288
static
inline
bool
iwl_advanced_bt_coexist(
struct
iwl_priv
*
priv
)
289
{
290
return
priv->
cfg
->bt_params &&
291
priv->
cfg
->bt_params->advanced_bt_coexist;
292
}
293
294
#ifdef CONFIG_IWLWIFI_DEBUG
295
const
char
*iwl_get_tx_fail_reason(
u32
status);
296
const
char
*iwl_get_agg_tx_fail_reason(
u16
status);
297
#else
298
static
inline
const
char
*iwl_get_tx_fail_reason(
u32
status) {
return
""
; }
299
static
inline
const
char
*iwl_get_agg_tx_fail_reason(
u16
status) {
return
""
; }
300
#endif
301
302
303
/* station management */
304
int
iwlagn_manage_ibss_station
(
struct
iwl_priv
*
priv
,
305
struct
ieee80211_vif
*vif,
bool
add
);
306
#define IWL_STA_DRIVER_ACTIVE BIT(0)
/* driver entry is active */
307
#define IWL_STA_UCODE_ACTIVE BIT(1)
/* ucode entry is active */
308
#define IWL_STA_UCODE_INPROGRESS BIT(2)
/* ucode entry is in process of
309
being activated */
310
#define IWL_STA_LOCAL BIT(3)
/* station state not directed by mac80211;
311
(this is for the IBSS BSSID stations) */
312
#define IWL_STA_BCAST BIT(4)
/* this station is the special bcast station */
313
314
315
void
iwl_restore_stations
(
struct
iwl_priv
*
priv
,
struct
iwl_rxon_context
*
ctx
);
316
void
iwl_clear_ucode_stations
(
struct
iwl_priv
*
priv
,
317
struct
iwl_rxon_context
*
ctx
);
318
void
iwl_dealloc_bcast_stations
(
struct
iwl_priv
*
priv
);
319
int
iwl_get_free_ucode_key_offset
(
struct
iwl_priv
*
priv
);
320
int
iwl_send_add_sta
(
struct
iwl_priv
*
priv
,
321
struct
iwl_addsta_cmd
*sta,
u8
flags
);
322
int
iwl_add_station_common
(
struct
iwl_priv
*
priv
,
struct
iwl_rxon_context
*
ctx
,
323
const
u8
*
addr
,
bool
is_ap,
324
struct
ieee80211_sta
*sta,
u8
*sta_id_r);
325
int
iwl_remove_station
(
struct
iwl_priv
*
priv
,
const
u8
sta_id,
326
const
u8
*
addr
);
327
void
iwl_deactivate_station
(
struct
iwl_priv
*
priv
,
const
u8
sta_id,
328
const
u8
*
addr
);
329
u8
iwl_prep_station
(
struct
iwl_priv
*
priv
,
struct
iwl_rxon_context
*
ctx
,
330
const
u8
*
addr
,
bool
is_ap,
struct
ieee80211_sta
*sta);
331
332
int
iwl_send_lq_cmd
(
struct
iwl_priv
*
priv
,
struct
iwl_rxon_context
*
ctx
,
333
struct
iwl_link_quality_cmd
*lq,
u8
flags
,
bool
init
);
334
int
iwl_add_sta_callback
(
struct
iwl_priv
*
priv
,
struct
iwl_rx_cmd_buffer
*rxb,
335
struct
iwl_device_cmd
*
cmd
);
336
int
iwl_sta_update_ht
(
struct
iwl_priv
*
priv
,
struct
iwl_rxon_context
*
ctx
,
337
struct
ieee80211_sta
*sta);
338
339
bool
iwl_is_ht40_tx_allowed
(
struct
iwl_priv
*
priv
,
340
struct
iwl_rxon_context
*
ctx
,
341
struct
ieee80211_sta_ht_cap
*
ht_cap
);
342
343
static
inline
int
iwl_sta_id(
struct
ieee80211_sta
*sta)
344
{
345
if
(
WARN_ON
(!sta))
346
return
IWL_INVALID_STATION
;
347
348
return
((
struct
iwl_station_priv
*)sta->drv_priv)->sta_id;
349
}
350
351
int
iwlagn_alloc_bcast_station
(
struct
iwl_priv
*
priv
,
352
struct
iwl_rxon_context
*
ctx
);
353
int
iwlagn_add_bssid_station
(
struct
iwl_priv
*
priv
,
struct
iwl_rxon_context
*
ctx
,
354
const
u8
*
addr
,
u8
*sta_id_r);
355
int
iwl_remove_default_wep_key
(
struct
iwl_priv
*
priv
,
356
struct
iwl_rxon_context
*
ctx
,
357
struct
ieee80211_key_conf
*
key
);
358
int
iwl_set_default_wep_key
(
struct
iwl_priv
*
priv
,
359
struct
iwl_rxon_context
*
ctx
,
360
struct
ieee80211_key_conf
*
key
);
361
int
iwl_restore_default_wep_keys
(
struct
iwl_priv
*
priv
,
362
struct
iwl_rxon_context
*
ctx
);
363
int
iwl_set_dynamic_key
(
struct
iwl_priv
*
priv
,
struct
iwl_rxon_context
*
ctx
,
364
struct
ieee80211_key_conf
*
key
,
365
struct
ieee80211_sta
*sta);
366
int
iwl_remove_dynamic_key
(
struct
iwl_priv
*
priv
,
struct
iwl_rxon_context
*
ctx
,
367
struct
ieee80211_key_conf
*
key
,
368
struct
ieee80211_sta
*sta);
369
void
iwl_update_tkip_key
(
struct
iwl_priv
*
priv
,
370
struct
ieee80211_vif
*vif,
371
struct
ieee80211_key_conf
*keyconf,
372
struct
ieee80211_sta
*sta,
u32
iv32,
u16
*phase1key);
373
int
iwl_sta_tx_modify_enable_tid
(
struct
iwl_priv
*
priv
,
int
sta_id,
int
tid);
374
int
iwl_sta_rx_agg_start
(
struct
iwl_priv
*
priv
,
struct
ieee80211_sta
*sta,
375
int
tid,
u16
ssn
);
376
int
iwl_sta_rx_agg_stop
(
struct
iwl_priv
*
priv
,
struct
ieee80211_sta
*sta,
377
int
tid);
378
void
iwl_sta_modify_sleep_tx_count
(
struct
iwl_priv
*
priv
,
int
sta_id,
int
cnt
);
379
int
iwl_update_bcast_station
(
struct
iwl_priv
*
priv
,
380
struct
iwl_rxon_context
*
ctx
);
381
int
iwl_update_bcast_stations
(
struct
iwl_priv
*
priv
);
382
383
/* rate */
384
static
inline
u32
iwl_ant_idx_to_flags(
u8
ant_idx)
385
{
386
return
BIT
(ant_idx) <<
RATE_MCS_ANT_POS
;
387
}
388
389
static
inline
u8
iwl_hw_get_rate(
__le32
rate_n_flags)
390
{
391
return
le32_to_cpu
(rate_n_flags) &
RATE_MCS_RATE_MSK
;
392
}
393
394
static
inline
__le32
iwl_hw_set_rate_n_flags(
u8
rate
,
u32
flags
)
395
{
396
return
cpu_to_le32
(flags|(
u32
)rate);
397
}
398
399
extern
int
iwl_alive_start
(
struct
iwl_priv
*
priv
);
400
401
/* testmode support */
402
#ifdef CONFIG_IWLWIFI_DEVICE_TESTMODE
403
404
extern
int
iwlagn_mac_testmode_cmd
(
struct
ieee80211_hw
*
hw
,
void
*
data
,
405
int
len);
406
extern
int
iwlagn_mac_testmode_dump
(
struct
ieee80211_hw
*
hw
,
407
struct
sk_buff
*
skb
,
408
struct
netlink_callback
*
cb
,
409
void
*
data
,
int
len);
410
extern
void
iwl_testmode_init
(
struct
iwl_priv
*
priv
);
411
extern
void
iwl_testmode_free
(
struct
iwl_priv
*
priv
);
412
413
#else
414
415
static
inline
416
int
iwlagn_mac_testmode_cmd
(
struct
ieee80211_hw
*
hw
,
void
*
data
,
int
len)
417
{
418
return
-
ENOSYS
;
419
}
420
421
static
inline
422
int
iwlagn_mac_testmode_dump
(
struct
ieee80211_hw
*
hw
,
struct
sk_buff
*
skb
,
423
struct
netlink_callback
*
cb
,
424
void
*
data
,
int
len)
425
{
426
return
-
ENOSYS
;
427
}
428
429
static
inline
void
iwl_testmode_init
(
struct
iwl_priv
*
priv
)
430
{
431
}
432
433
static
inline
void
iwl_testmode_free
(
struct
iwl_priv
*
priv
)
434
{
435
}
436
#endif
437
438
#ifdef CONFIG_IWLWIFI_DEBUG
439
void
iwl_print_rx_config_cmd(
struct
iwl_priv
*
priv
,
440
enum
iwl_rxon_context_id
ctxid);
441
#else
442
static
inline
void
iwl_print_rx_config_cmd(
struct
iwl_priv
*
priv
,
443
enum
iwl_rxon_context_id
ctxid)
444
{
445
}
446
#endif
447
448
/* status checks */
449
450
static
inline
int
iwl_is_ready(
struct
iwl_priv
*
priv
)
451
{
452
/* The adapter is 'ready' if READY EXIT_PENDING is not set */
453
return
test_bit
(
STATUS_READY
, &priv->
status
) &&
454
!
test_bit
(
STATUS_EXIT_PENDING
, &priv->
status
);
455
}
456
457
static
inline
int
iwl_is_alive(
struct
iwl_priv
*
priv
)
458
{
459
return
test_bit
(
STATUS_ALIVE
, &priv->
status
);
460
}
461
462
static
inline
int
iwl_is_rfkill(
struct
iwl_priv
*
priv
)
463
{
464
return
test_bit
(
STATUS_RF_KILL_HW
, &priv->
status
);
465
}
466
467
static
inline
int
iwl_is_ctkill(
struct
iwl_priv
*
priv
)
468
{
469
return
test_bit
(
STATUS_CT_KILL
, &priv->
status
);
470
}
471
472
static
inline
int
iwl_is_ready_rf(
struct
iwl_priv
*
priv
)
473
{
474
if
(iwl_is_rfkill(priv))
475
return
0;
476
477
return
iwl_is_ready(priv);
478
}
479
480
static
inline
void
iwl_dvm_set_pmi(
struct
iwl_priv
*priv,
bool
state
)
481
{
482
if
(state)
483
set_bit
(
STATUS_POWER_PMI
, &priv->
status
);
484
else
485
clear_bit
(
STATUS_POWER_PMI
, &priv->
status
);
486
iwl_trans_set_pmi(priv->
trans
, state);
487
}
488
489
#ifdef CONFIG_IWLWIFI_DEBUGFS
490
int
iwl_dbgfs_register
(
struct
iwl_priv
*priv,
struct
dentry
*dbgfs_dir);
491
#else
492
static
inline
int
iwl_dbgfs_register
(
struct
iwl_priv
*priv,
493
struct
dentry
*dbgfs_dir)
494
{
495
return
0;
496
}
497
#endif
/* CONFIG_IWLWIFI_DEBUGFS */
498
499
#ifdef CONFIG_IWLWIFI_DEBUG
500
#define IWL_DEBUG_QUIET_RFKILL(m, fmt, args...) \
501
do { \
502
if (!iwl_is_rfkill((m))) \
503
IWL_ERR(m, fmt, ##args); \
504
else \
505
__iwl_err((m)->dev, true, \
506
!iwl_have_debug_level(IWL_DL_RADIO), \
507
fmt, ##args); \
508
} while (0)
509
#else
510
#define IWL_DEBUG_QUIET_RFKILL(m, fmt, args...) \
511
do { \
512
if (!iwl_is_rfkill((m))) \
513
IWL_ERR(m, fmt, ##args); \
514
else \
515
__iwl_err((m)->dev, true, true, fmt, ##args); \
516
} while (0)
517
#endif
/* CONFIG_IWLWIFI_DEBUG */
518
519
extern
const
char
*
iwl_dvm_cmd_strings
[
REPLY_MAX
];
520
521
static
inline
const
char
*iwl_dvm_get_cmd_string(
u8
cmd
)
522
{
523
const
char
*
s
= iwl_dvm_cmd_strings[
cmd
];
524
if
(s)
525
return
s
;
526
return
"UNKNOWN"
;
527
}
528
#endif
/* __iwl_agn_h__ */
Generated on Thu Jan 10 2013 14:11:40 for Linux Kernel by
1.8.2