Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
82cc4f5c
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
82cc4f5c
编写于
12月 15, 2010
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
上级
2a27a03d
56e6417b
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
148 addition
and
10 deletion
+148
-10
drivers/bluetooth/hci_ldisc.c
drivers/bluetooth/hci_ldisc.c
+4
-2
drivers/net/wireless/iwlwifi/iwl-1000.c
drivers/net/wireless/iwlwifi/iwl-1000.c
+2
-0
drivers/net/wireless/iwlwifi/iwl-6000.c
drivers/net/wireless/iwlwifi/iwl-6000.c
+12
-0
drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c
drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c
+86
-2
drivers/net/wireless/iwlwifi/iwl-agn-lib.c
drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+6
-0
drivers/net/wireless/iwlwifi/iwl-core.h
drivers/net/wireless/iwlwifi/iwl-core.h
+1
-0
drivers/net/wireless/iwlwifi/iwl-eeprom.h
drivers/net/wireless/iwlwifi/iwl-eeprom.h
+21
-4
drivers/net/wireless/libertas/cfg.c
drivers/net/wireless/libertas/cfg.c
+1
-1
drivers/net/wireless/p54/p54usb.c
drivers/net/wireless/p54/p54usb.c
+6
-0
net/bluetooth/rfcomm/core.c
net/bluetooth/rfcomm/core.c
+1
-0
net/mac80211/ibss.c
net/mac80211/ibss.c
+4
-0
net/mac80211/work.c
net/mac80211/work.c
+4
-1
未找到文件。
drivers/bluetooth/hci_ldisc.c
浏览文件 @
82cc4f5c
...
...
@@ -311,8 +311,10 @@ static void hci_uart_tty_close(struct tty_struct *tty)
if
(
test_and_clear_bit
(
HCI_UART_PROTO_SET
,
&
hu
->
flags
))
{
hu
->
proto
->
close
(
hu
);
hci_unregister_dev
(
hdev
);
hci_free_dev
(
hdev
);
if
(
hdev
)
{
hci_unregister_dev
(
hdev
);
hci_free_dev
(
hdev
);
}
}
}
}
...
...
drivers/net/wireless/iwlwifi/iwl-1000.c
浏览文件 @
82cc4f5c
...
...
@@ -315,6 +315,7 @@ struct iwl_cfg iwl100_bgn_cfg = {
.
mod_params
=
&
iwlagn_mod_params
,
.
base_params
=
&
iwl1000_base_params
,
.
ht_params
=
&
iwl1000_ht_params
,
.
use_new_eeprom_reading
=
true
,
};
struct
iwl_cfg
iwl100_bg_cfg
=
{
...
...
@@ -330,6 +331,7 @@ struct iwl_cfg iwl100_bg_cfg = {
.
ops
=
&
iwl1000_ops
,
.
mod_params
=
&
iwlagn_mod_params
,
.
base_params
=
&
iwl1000_base_params
,
.
use_new_eeprom_reading
=
true
,
};
MODULE_FIRMWARE
(
IWL1000_MODULE_FIRMWARE
(
IWL1000_UCODE_API_MAX
));
...
...
drivers/net/wireless/iwlwifi/iwl-6000.c
浏览文件 @
82cc4f5c
...
...
@@ -561,6 +561,7 @@ struct iwl_cfg iwl6000g2a_2agn_cfg = {
.
ht_params
=
&
iwl6000_ht_params
,
.
need_dc_calib
=
true
,
.
need_temp_offset_calib
=
true
,
.
use_new_eeprom_reading
=
true
,
};
struct
iwl_cfg
iwl6000g2a_2abg_cfg
=
{
...
...
@@ -578,6 +579,7 @@ struct iwl_cfg iwl6000g2a_2abg_cfg = {
.
base_params
=
&
iwl6000_base_params
,
.
need_dc_calib
=
true
,
.
need_temp_offset_calib
=
true
,
.
use_new_eeprom_reading
=
true
,
};
struct
iwl_cfg
iwl6000g2a_2bg_cfg
=
{
...
...
@@ -595,6 +597,7 @@ struct iwl_cfg iwl6000g2a_2bg_cfg = {
.
base_params
=
&
iwl6000_base_params
,
.
need_dc_calib
=
true
,
.
need_temp_offset_calib
=
true
,
.
use_new_eeprom_reading
=
true
,
};
struct
iwl_cfg
iwl6000g2b_2agn_cfg
=
{
...
...
@@ -616,6 +619,7 @@ struct iwl_cfg iwl6000g2b_2agn_cfg = {
.
need_temp_offset_calib
=
true
,
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
.
scan_tx_antennas
[
IEEE80211_BAND_2GHZ
]
=
ANT_A
,
.
use_new_eeprom_reading
=
true
,
};
struct
iwl_cfg
iwl6000g2b_2abg_cfg
=
{
...
...
@@ -636,6 +640,7 @@ struct iwl_cfg iwl6000g2b_2abg_cfg = {
.
need_temp_offset_calib
=
true
,
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
.
scan_tx_antennas
[
IEEE80211_BAND_2GHZ
]
=
ANT_A
,
.
use_new_eeprom_reading
=
true
,
};
struct
iwl_cfg
iwl6000g2b_2bgn_cfg
=
{
...
...
@@ -657,6 +662,7 @@ struct iwl_cfg iwl6000g2b_2bgn_cfg = {
.
need_temp_offset_calib
=
true
,
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
.
scan_tx_antennas
[
IEEE80211_BAND_2GHZ
]
=
ANT_A
,
.
use_new_eeprom_reading
=
true
,
};
struct
iwl_cfg
iwl6000g2b_2bg_cfg
=
{
...
...
@@ -677,6 +683,7 @@ struct iwl_cfg iwl6000g2b_2bg_cfg = {
.
need_temp_offset_calib
=
true
,
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
.
scan_tx_antennas
[
IEEE80211_BAND_2GHZ
]
=
ANT_A
,
.
use_new_eeprom_reading
=
true
,
};
struct
iwl_cfg
iwl6000g2b_bgn_cfg
=
{
...
...
@@ -698,6 +705,7 @@ struct iwl_cfg iwl6000g2b_bgn_cfg = {
.
need_temp_offset_calib
=
true
,
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
.
scan_tx_antennas
[
IEEE80211_BAND_2GHZ
]
=
ANT_A
,
.
use_new_eeprom_reading
=
true
,
};
struct
iwl_cfg
iwl6000g2b_bg_cfg
=
{
...
...
@@ -718,6 +726,7 @@ struct iwl_cfg iwl6000g2b_bg_cfg = {
.
need_temp_offset_calib
=
true
,
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
.
scan_tx_antennas
[
IEEE80211_BAND_2GHZ
]
=
ANT_A
,
.
use_new_eeprom_reading
=
true
,
};
/*
...
...
@@ -804,6 +813,7 @@ struct iwl_cfg iwl6050g2_bgn_cfg = {
.
base_params
=
&
iwl6050_base_params
,
.
ht_params
=
&
iwl6000_ht_params
,
.
need_dc_calib
=
true
,
.
use_new_eeprom_reading
=
true
,
};
struct
iwl_cfg
iwl6050_2abg_cfg
=
{
...
...
@@ -857,6 +867,7 @@ struct iwl_cfg iwl130_bgn_cfg = {
.
need_dc_calib
=
true
,
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
.
scan_tx_antennas
[
IEEE80211_BAND_2GHZ
]
=
ANT_A
,
.
use_new_eeprom_reading
=
true
,
};
struct
iwl_cfg
iwl130_bg_cfg
=
{
...
...
@@ -876,6 +887,7 @@ struct iwl_cfg iwl130_bg_cfg = {
.
need_dc_calib
=
true
,
/* Due to bluetooth, we transmit 2.4 GHz probes only on antenna A */
.
scan_tx_antennas
[
IEEE80211_BAND_2GHZ
]
=
ANT_A
,
.
use_new_eeprom_reading
=
true
,
};
MODULE_FIRMWARE
(
IWL6000_MODULE_FIRMWARE
(
IWL6000_UCODE_API_MAX
));
...
...
drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c
浏览文件 @
82cc4f5c
...
...
@@ -392,7 +392,7 @@ static s8 iwl_update_channel_txpower(struct iwl_priv *priv,
/**
* iwlcore_eeprom_enhanced_txpower: process enhanced tx power info
*/
void
iwlcore_eeprom_enhanced_txpower
(
struct
iwl_priv
*
priv
)
static
void
iwlcore_eeprom_enhanced_txpower_old
(
struct
iwl_priv
*
priv
)
{
int
eeprom_section_count
=
0
;
int
section
,
element
;
...
...
@@ -419,7 +419,8 @@ void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv)
* always check for valid entry before process
* the information
*/
if
(
!
enhanced_txpower
->
common
||
enhanced_txpower
->
reserved
)
if
(
!
(
enhanced_txpower
->
flags
||
enhanced_txpower
->
channel
)
||
enhanced_txpower
->
delta_20_in_40
)
continue
;
for
(
element
=
0
;
element
<
eeprom_section_count
;
element
++
)
{
...
...
@@ -452,3 +453,86 @@ void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv)
}
}
}
static
void
iwlcore_eeprom_enh_txp_read_element
(
struct
iwl_priv
*
priv
,
struct
iwl_eeprom_enhanced_txpwr
*
txp
,
s8
max_txpower_avg
)
{
int
ch_idx
;
bool
is_ht40
=
txp
->
flags
&
IWL_EEPROM_ENH_TXP_FL_40MHZ
;
enum
ieee80211_band
band
;
band
=
txp
->
flags
&
IWL_EEPROM_ENH_TXP_FL_BAND_52G
?
IEEE80211_BAND_5GHZ
:
IEEE80211_BAND_2GHZ
;
for
(
ch_idx
=
0
;
ch_idx
<
priv
->
channel_count
;
ch_idx
++
)
{
struct
iwl_channel_info
*
ch_info
=
&
priv
->
channel_info
[
ch_idx
];
/* update matching channel or from common data only */
if
(
txp
->
channel
!=
0
&&
ch_info
->
channel
!=
txp
->
channel
)
continue
;
/* update matching band only */
if
(
band
!=
ch_info
->
band
)
continue
;
if
(
ch_info
->
max_power_avg
<
max_txpower_avg
&&
!
is_ht40
)
{
ch_info
->
max_power_avg
=
max_txpower_avg
;
ch_info
->
curr_txpow
=
max_txpower_avg
;
ch_info
->
scan_power
=
max_txpower_avg
;
}
if
(
is_ht40
&&
ch_info
->
ht40_max_power_avg
<
max_txpower_avg
)
ch_info
->
ht40_max_power_avg
=
max_txpower_avg
;
}
}
#define EEPROM_TXP_OFFS (0x00 | INDIRECT_ADDRESS | INDIRECT_TXP_LIMIT)
#define EEPROM_TXP_ENTRY_LEN sizeof(struct iwl_eeprom_enhanced_txpwr)
#define EEPROM_TXP_SZ_OFFS (0x00 | INDIRECT_ADDRESS | INDIRECT_TXP_LIMIT_SIZE)
static
void
iwlcore_eeprom_enhanced_txpower_new
(
struct
iwl_priv
*
priv
)
{
struct
iwl_eeprom_enhanced_txpwr
*
txp_array
,
*
txp
;
int
idx
,
entries
;
__le16
*
txp_len
;
s8
max_txp_avg
,
max_txp_avg_halfdbm
;
BUILD_BUG_ON
(
sizeof
(
struct
iwl_eeprom_enhanced_txpwr
)
!=
8
);
/* the length is in 16-bit words, but we want entries */
txp_len
=
(
__le16
*
)
iwlagn_eeprom_query_addr
(
priv
,
EEPROM_TXP_SZ_OFFS
);
entries
=
le16_to_cpup
(
txp_len
)
*
2
/
EEPROM_TXP_ENTRY_LEN
;
txp_array
=
(
void
*
)
iwlagn_eeprom_query_addr
(
priv
,
EEPROM_TXP_OFFS
);
for
(
idx
=
0
;
idx
<
entries
;
idx
++
)
{
txp
=
&
txp_array
[
idx
];
/* skip invalid entries */
if
(
!
(
txp
->
flags
&
IWL_EEPROM_ENH_TXP_FL_VALID
))
continue
;
max_txp_avg
=
iwl_get_max_txpower_avg
(
priv
,
txp_array
,
idx
,
&
max_txp_avg_halfdbm
);
/*
* Update the user limit values values to the highest
* power supported by any channel
*/
if
(
max_txp_avg
>
priv
->
tx_power_user_lmt
)
priv
->
tx_power_user_lmt
=
max_txp_avg
;
if
(
max_txp_avg_halfdbm
>
priv
->
tx_power_lmt_in_half_dbm
)
priv
->
tx_power_lmt_in_half_dbm
=
max_txp_avg_halfdbm
;
iwlcore_eeprom_enh_txp_read_element
(
priv
,
txp
,
max_txp_avg
);
}
}
void
iwlcore_eeprom_enhanced_txpower
(
struct
iwl_priv
*
priv
)
{
if
(
priv
->
cfg
->
use_new_eeprom_reading
)
iwlcore_eeprom_enhanced_txpower_new
(
priv
);
else
iwlcore_eeprom_enhanced_txpower_old
(
priv
);
}
drivers/net/wireless/iwlwifi/iwl-agn-lib.c
浏览文件 @
82cc4f5c
...
...
@@ -569,6 +569,12 @@ static u32 eeprom_indirect_address(const struct iwl_priv *priv, u32 address)
case
INDIRECT_REGULATORY
:
offset
=
iwl_eeprom_query16
(
priv
,
EEPROM_LINK_REGULATORY
);
break
;
case
INDIRECT_TXP_LIMIT
:
offset
=
iwl_eeprom_query16
(
priv
,
EEPROM_LINK_TXP_LIMIT
);
break
;
case
INDIRECT_TXP_LIMIT_SIZE
:
offset
=
iwl_eeprom_query16
(
priv
,
EEPROM_LINK_TXP_LIMIT_SIZE
);
break
;
case
INDIRECT_CALIBRATION
:
offset
=
iwl_eeprom_query16
(
priv
,
EEPROM_LINK_CALIBRATION
);
break
;
...
...
drivers/net/wireless/iwlwifi/iwl-core.h
浏览文件 @
82cc4f5c
...
...
@@ -390,6 +390,7 @@ struct iwl_cfg {
const
bool
need_temp_offset_calib
;
/* if used set to true */
u8
scan_rx_antennas
[
IEEE80211_NUM_BANDS
];
u8
scan_tx_antennas
[
IEEE80211_NUM_BANDS
];
const
bool
use_new_eeprom_reading
;
/* temporary, remove later */
};
/***************************
...
...
drivers/net/wireless/iwlwifi/iwl-eeprom.h
浏览文件 @
82cc4f5c
...
...
@@ -120,6 +120,17 @@ struct iwl_eeprom_channel {
s8
max_power_avg
;
/* max power (dBm) on this chnl, limit 31 */
}
__packed
;
enum
iwl_eeprom_enhanced_txpwr_flags
{
IWL_EEPROM_ENH_TXP_FL_VALID
=
BIT
(
0
),
IWL_EEPROM_ENH_TXP_FL_BAND_52G
=
BIT
(
1
),
IWL_EEPROM_ENH_TXP_FL_OFDM
=
BIT
(
2
),
IWL_EEPROM_ENH_TXP_FL_40MHZ
=
BIT
(
3
),
IWL_EEPROM_ENH_TXP_FL_HT_AP
=
BIT
(
4
),
IWL_EEPROM_ENH_TXP_FL_RES1
=
BIT
(
5
),
IWL_EEPROM_ENH_TXP_FL_RES2
=
BIT
(
6
),
IWL_EEPROM_ENH_TXP_FL_COMMON_TYPE
=
BIT
(
7
),
};
/**
* iwl_eeprom_enhanced_txpwr structure
* This structure presents the enhanced regulatory tx power limit layout
...
...
@@ -127,21 +138,23 @@ struct iwl_eeprom_channel {
* Enhanced regulatory tx power portion of eeprom image can be broken down
* into individual structures; each one is 8 bytes in size and contain the
* following information
* @common: (desc + channel) not used by driver, should _NOT_ be "zero"
* @flags: entry flags
* @channel: channel number
* @chain_a_max_pwr: chain a max power in 1/2 dBm
* @chain_b_max_pwr: chain b max power in 1/2 dBm
* @chain_c_max_pwr: chain c max power in 1/2 dBm
* @
reserved: not used, should be "zero"
* @
delta_20_in_40: 20-in-40 deltas (hi/lo)
* @mimo2_max_pwr: mimo2 max power in 1/2 dBm
* @mimo3_max_pwr: mimo3 max power in 1/2 dBm
*
*/
struct
iwl_eeprom_enhanced_txpwr
{
__le16
common
;
u8
flags
;
u8
channel
;
s8
chain_a_max
;
s8
chain_b_max
;
s8
chain_c_max
;
s8
reserved
;
u8
delta_20_in_40
;
s8
mimo2_max
;
s8
mimo3_max
;
}
__packed
;
...
...
@@ -186,6 +199,8 @@ struct iwl_eeprom_enhanced_txpwr {
#define EEPROM_LINK_CALIBRATION (2*0x67)
#define EEPROM_LINK_PROCESS_ADJST (2*0x68)
#define EEPROM_LINK_OTHERS (2*0x69)
#define EEPROM_LINK_TXP_LIMIT (2*0x6a)
#define EEPROM_LINK_TXP_LIMIT_SIZE (2*0x6b)
/* agn regulatory - indirect access */
#define EEPROM_REG_BAND_1_CHANNELS ((0x08)\
...
...
@@ -389,6 +404,8 @@ struct iwl_eeprom_calib_info {
#define INDIRECT_CALIBRATION 0x00040000
#define INDIRECT_PROCESS_ADJST 0x00050000
#define INDIRECT_OTHERS 0x00060000
#define INDIRECT_TXP_LIMIT 0x00070000
#define INDIRECT_TXP_LIMIT_SIZE 0x00080000
#define INDIRECT_ADDRESS 0x00100000
/* General */
...
...
drivers/net/wireless/libertas/cfg.c
浏览文件 @
82cc4f5c
...
...
@@ -619,7 +619,7 @@ static int lbs_ret_scan(struct lbs_private *priv, unsigned long dummy,
print_ssid
(
ssid_buf
,
ssid
,
ssid_len
),
LBS_SCAN_RSSI_TO_MBM
(
rssi
)
/
100
);
if
(
channel
||
if
(
channel
&&
!
(
channel
->
flags
&
IEEE80211_CHAN_DISABLED
))
cfg80211_inform_bss
(
wiphy
,
channel
,
bssid
,
le64_to_cpu
(
*
(
__le64
*
)
tsfdesc
),
...
...
drivers/net/wireless/p54/p54usb.c
浏览文件 @
82cc4f5c
...
...
@@ -43,6 +43,7 @@ MODULE_FIRMWARE("isl3887usb");
static
struct
usb_device_id
p54u_table
[]
__devinitdata
=
{
/* Version 1 devices (pci chip + net2280) */
{
USB_DEVICE
(
0x0411
,
0x0050
)},
/* Buffalo WLI2-USB2-G54 */
{
USB_DEVICE
(
0x045e
,
0x00c2
)},
/* Microsoft MN-710 */
{
USB_DEVICE
(
0x0506
,
0x0a11
)},
/* 3COM 3CRWE254G72 */
{
USB_DEVICE
(
0x06b9
,
0x0120
)},
/* Thomson SpeedTouch 120g */
...
...
@@ -56,9 +57,13 @@ static struct usb_device_id p54u_table[] __devinitdata = {
{
USB_DEVICE
(
0x0846
,
0x4220
)},
/* Netgear WG111 */
{
USB_DEVICE
(
0x09aa
,
0x1000
)},
/* Spinnaker Proto board */
{
USB_DEVICE
(
0x0cde
,
0x0006
)},
/* Medion 40900, Roper Europe */
{
USB_DEVICE
(
0x0db0
,
0x6826
)},
/* MSI UB54G (MS-6826) */
{
USB_DEVICE
(
0x107b
,
0x55f2
)},
/* Gateway WGU-210 (Gemtek) */
{
USB_DEVICE
(
0x124a
,
0x4023
)},
/* Shuttle PN15, Airvast WM168g, IOGear GWU513 */
{
USB_DEVICE
(
0x1435
,
0x0210
)},
/* Inventel UR054G */
{
USB_DEVICE
(
0x15a9
,
0x0002
)},
/* Gemtek WUBI-100GW 802.11g */
{
USB_DEVICE
(
0x1630
,
0x0005
)},
/* 2Wire 802.11g USB (v1) / Z-Com */
{
USB_DEVICE
(
0x182d
,
0x096b
)},
/* Sitecom WL-107 */
{
USB_DEVICE
(
0x1915
,
0x2234
)},
/* Linksys WUSB54G OEM */
{
USB_DEVICE
(
0x1915
,
0x2235
)},
/* Linksys WUSB54G Portable OEM */
{
USB_DEVICE
(
0x2001
,
0x3701
)},
/* DLink DWL-G120 Spinnaker */
...
...
@@ -94,6 +99,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
{
USB_DEVICE
(
0x1435
,
0x0427
)},
/* Inventel UR054G */
{
USB_DEVICE
(
0x1668
,
0x1050
)},
/* Actiontec 802UIG-1 */
{
USB_DEVICE
(
0x2001
,
0x3704
)},
/* DLink DWL-G122 rev A2 */
{
USB_DEVICE
(
0x2001
,
0x3705
)},
/* D-Link DWL-G120 rev C1 */
{
USB_DEVICE
(
0x413c
,
0x5513
)},
/* Dell WLA3310 USB Wireless Adapter */
{
USB_DEVICE
(
0x413c
,
0x8102
)},
/* Spinnaker DUT */
{
USB_DEVICE
(
0x413c
,
0x8104
)},
/* Cohiba Proto board */
...
...
net/bluetooth/rfcomm/core.c
浏览文件 @
82cc4f5c
...
...
@@ -311,6 +311,7 @@ static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)
d
->
state
=
BT_OPEN
;
d
->
flags
=
0
;
d
->
mscex
=
0
;
d
->
sec_level
=
BT_SECURITY_LOW
;
d
->
mtu
=
RFCOMM_DEFAULT_MTU
;
d
->
v24_sig
=
RFCOMM_V24_RTC
|
RFCOMM_V24_RTR
|
RFCOMM_V24_DV
;
...
...
net/mac80211/ibss.c
浏览文件 @
82cc4f5c
...
...
@@ -780,6 +780,9 @@ void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
mutex_lock
(
&
sdata
->
u
.
ibss
.
mtx
);
if
(
!
sdata
->
u
.
ibss
.
ssid_len
)
goto
mgmt_out
;
/* not ready to merge yet */
switch
(
fc
&
IEEE80211_FCTL_STYPE
)
{
case
IEEE80211_STYPE_PROBE_REQ
:
ieee80211_rx_mgmt_probe_req
(
sdata
,
mgmt
,
skb
->
len
);
...
...
@@ -797,6 +800,7 @@ void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
break
;
}
mgmt_out:
mutex_unlock
(
&
sdata
->
u
.
ibss
.
mtx
);
}
...
...
net/mac80211/work.c
浏览文件 @
82cc4f5c
...
...
@@ -1051,11 +1051,13 @@ void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata)
{
struct
ieee80211_local
*
local
=
sdata
->
local
;
struct
ieee80211_work
*
wk
;
bool
cleanup
=
false
;
mutex_lock
(
&
local
->
mtx
);
list_for_each_entry
(
wk
,
&
local
->
work_list
,
list
)
{
if
(
wk
->
sdata
!=
sdata
)
continue
;
cleanup
=
true
;
wk
->
type
=
IEEE80211_WORK_ABORT
;
wk
->
started
=
true
;
wk
->
timeout
=
jiffies
;
...
...
@@ -1063,7 +1065,8 @@ void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata)
mutex_unlock
(
&
local
->
mtx
);
/* run cleanups etc. */
ieee80211_work_work
(
&
local
->
work_work
);
if
(
cleanup
)
ieee80211_work_work
(
&
local
->
work_work
);
mutex_lock
(
&
local
->
mtx
);
list_for_each_entry
(
wk
,
&
local
->
work_list
,
list
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录