Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
b90af3b8
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
b90af3b8
编写于
2月 14, 2013
作者:
J
John W. Linville
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
Conflicts: drivers/net/wireless/iwlwifi/dvm/tx.c
上级
5171f7a0
d786f67e
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
142 addition
and
92 deletion
+142
-92
drivers/bcma/bcma_private.h
drivers/bcma/bcma_private.h
+5
-0
drivers/bcma/driver_chipcommon_nflash.c
drivers/bcma/driver_chipcommon_nflash.c
+1
-1
drivers/bcma/driver_gpio.c
drivers/bcma/driver_gpio.c
+5
-0
drivers/bcma/main.c
drivers/bcma/main.c
+7
-0
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
+21
-14
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.h
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.h
+2
-1
drivers/net/wireless/brcm80211/brcmsmac/main.c
drivers/net/wireless/brcm80211/brcmsmac/main.c
+12
-28
drivers/net/wireless/brcm80211/brcmsmac/pub.h
drivers/net/wireless/brcm80211/brcmsmac/pub.h
+1
-2
drivers/net/wireless/iwlwifi/dvm/tx.c
drivers/net/wireless/iwlwifi/dvm/tx.c
+7
-10
drivers/net/wireless/mwifiex/scan.c
drivers/net/wireless/mwifiex/scan.c
+5
-4
drivers/net/wireless/mwl8k.c
drivers/net/wireless/mwl8k.c
+18
-18
drivers/net/wireless/rtlwifi/base.c
drivers/net/wireless/rtlwifi/base.c
+4
-3
drivers/net/wireless/rtlwifi/usb.c
drivers/net/wireless/rtlwifi/usb.c
+2
-2
drivers/ssb/driver_gpio.c
drivers/ssb/driver_gpio.c
+12
-0
drivers/ssb/main.c
drivers/ssb/main.c
+9
-0
drivers/ssb/ssb_private.h
drivers/ssb/ssb_private.h
+5
-0
net/bluetooth/hci_conn.c
net/bluetooth/hci_conn.c
+3
-3
net/bluetooth/smp.c
net/bluetooth/smp.c
+13
-0
net/mac80211/cfg.c
net/mac80211/cfg.c
+2
-1
net/mac80211/mlme.c
net/mac80211/mlme.c
+7
-4
net/wireless/scan.c
net/wireless/scan.c
+1
-1
未找到文件。
drivers/bcma/bcma_private.h
浏览文件 @
b90af3b8
...
...
@@ -97,11 +97,16 @@ void __devinit bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc);
#ifdef CONFIG_BCMA_DRIVER_GPIO
/* driver_gpio.c */
int
bcma_gpio_init
(
struct
bcma_drv_cc
*
cc
);
int
bcma_gpio_unregister
(
struct
bcma_drv_cc
*
cc
);
#else
static
inline
int
bcma_gpio_init
(
struct
bcma_drv_cc
*
cc
)
{
return
-
ENOTSUPP
;
}
static
inline
int
bcma_gpio_unregister
(
struct
bcma_drv_cc
*
cc
)
{
return
0
;
}
#endif
/* CONFIG_BCMA_DRIVER_GPIO */
#endif
drivers/bcma/driver_chipcommon_nflash.c
浏览文件 @
b90af3b8
...
...
@@ -21,7 +21,7 @@ int bcma_nflash_init(struct bcma_drv_cc *cc)
struct
bcma_bus
*
bus
=
cc
->
core
->
bus
;
if
(
bus
->
chipinfo
.
id
!=
BCMA_CHIP_ID_BCM4706
&&
cc
->
core
->
id
.
rev
!=
0x
38
)
{
cc
->
core
->
id
.
rev
!=
38
)
{
bcma_err
(
bus
,
"NAND flash on unsupported board!
\n
"
);
return
-
ENOTSUPP
;
}
...
...
drivers/bcma/driver_gpio.c
浏览文件 @
b90af3b8
...
...
@@ -107,3 +107,8 @@ int bcma_gpio_init(struct bcma_drv_cc *cc)
return
gpiochip_add
(
chip
);
}
int
bcma_gpio_unregister
(
struct
bcma_drv_cc
*
cc
)
{
return
gpiochip_remove
(
&
cc
->
gpio
);
}
drivers/bcma/main.c
浏览文件 @
b90af3b8
...
...
@@ -276,6 +276,13 @@ int __devinit bcma_bus_register(struct bcma_bus *bus)
void
bcma_bus_unregister
(
struct
bcma_bus
*
bus
)
{
struct
bcma_device
*
cores
[
3
];
int
err
;
err
=
bcma_gpio_unregister
(
&
bus
->
drv_cc
);
if
(
err
==
-
EBUSY
)
bcma_err
(
bus
,
"Some GPIOs are still in use.
\n
"
);
else
if
(
err
)
bcma_err
(
bus
,
"Can not unregister GPIO driver: %i
\n
"
,
err
);
cores
[
0
]
=
bcma_find_core
(
bus
,
BCMA_CORE_MIPS_74K
);
cores
[
1
]
=
bcma_find_core
(
bus
,
BCMA_CORE_PCIE
);
...
...
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
浏览文件 @
b90af3b8
...
...
@@ -36,6 +36,7 @@
#include "debug.h"
#define N_TX_QUEUES 4
/* #tx queues on mac80211<->driver interface */
#define BRCMS_FLUSH_TIMEOUT 500
/* msec */
/* Flags we support */
#define MAC_FILTERS (FIF_PROMISC_IN_BSS | \
...
...
@@ -712,16 +713,29 @@ static void brcms_ops_rfkill_poll(struct ieee80211_hw *hw)
wiphy_rfkill_set_hw_state
(
wl
->
pub
->
ieee_hw
->
wiphy
,
blocked
);
}
static
bool
brcms_tx_flush_completed
(
struct
brcms_info
*
wl
)
{
bool
result
;
spin_lock_bh
(
&
wl
->
lock
);
result
=
brcms_c_tx_flush_completed
(
wl
->
wlc
);
spin_unlock_bh
(
&
wl
->
lock
);
return
result
;
}
static
void
brcms_ops_flush
(
struct
ieee80211_hw
*
hw
,
bool
drop
)
{
struct
brcms_info
*
wl
=
hw
->
priv
;
int
ret
;
no_printk
(
"%s: drop = %s
\n
"
,
__func__
,
drop
?
"true"
:
"false"
);
/* wait for packet queue and dma fifos to run empty */
spin_lock_bh
(
&
wl
->
lock
);
brcms_c_wait_for_tx_completion
(
wl
->
wlc
,
drop
);
spin_unlock_bh
(
&
wl
->
lock
);
ret
=
wait_event_timeout
(
wl
->
tx_flush_wq
,
brcms_tx_flush_completed
(
wl
),
msecs_to_jiffies
(
BRCMS_FLUSH_TIMEOUT
));
brcms_dbg_mac80211
(
wl
->
wlc
->
hw
->
d11core
,
"ret=%d
\n
"
,
jiffies_to_msecs
(
ret
));
}
static
const
struct
ieee80211_ops
brcms_ops
=
{
...
...
@@ -776,6 +790,7 @@ void brcms_dpc(unsigned long data)
done:
spin_unlock_bh
(
&
wl
->
lock
);
wake_up
(
&
wl
->
tx_flush_wq
);
}
/*
...
...
@@ -1024,6 +1039,8 @@ static struct brcms_info *brcms_attach(struct bcma_device *pdev)
atomic_set
(
&
wl
->
callbacks
,
0
);
init_waitqueue_head
(
&
wl
->
tx_flush_wq
);
/* setup the bottom half handler */
tasklet_init
(
&
wl
->
tasklet
,
brcms_dpc
,
(
unsigned
long
)
wl
);
...
...
@@ -1613,13 +1630,3 @@ bool brcms_rfkill_set_hw_state(struct brcms_info *wl)
spin_lock_bh
(
&
wl
->
lock
);
return
blocked
;
}
/*
* precondition: perimeter lock has been acquired
*/
void
brcms_msleep
(
struct
brcms_info
*
wl
,
uint
ms
)
{
spin_unlock_bh
(
&
wl
->
lock
);
msleep
(
ms
);
spin_lock_bh
(
&
wl
->
lock
);
}
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.h
浏览文件 @
b90af3b8
...
...
@@ -68,6 +68,8 @@ struct brcms_info {
spinlock_t
lock
;
/* per-device perimeter lock */
spinlock_t
isr_lock
;
/* per-device ISR synchronization lock */
/* tx flush */
wait_queue_head_t
tx_flush_wq
;
/* timer related fields */
atomic_t
callbacks
;
/* # outstanding callback functions */
...
...
@@ -100,7 +102,6 @@ extern struct brcms_timer *brcms_init_timer(struct brcms_info *wl,
extern
void
brcms_free_timer
(
struct
brcms_timer
*
timer
);
extern
void
brcms_add_timer
(
struct
brcms_timer
*
timer
,
uint
ms
,
int
periodic
);
extern
bool
brcms_del_timer
(
struct
brcms_timer
*
timer
);
extern
void
brcms_msleep
(
struct
brcms_info
*
wl
,
uint
ms
);
extern
void
brcms_dpc
(
unsigned
long
data
);
extern
void
brcms_timer
(
struct
brcms_timer
*
t
);
extern
void
brcms_fatal_error
(
struct
brcms_info
*
wl
);
...
...
drivers/net/wireless/brcm80211/brcmsmac/main.c
浏览文件 @
b90af3b8
...
...
@@ -1025,7 +1025,6 @@ brcms_c_dotxstatus(struct brcms_c_info *wlc, struct tx_status *txs)
static
bool
brcms_b_txstatus
(
struct
brcms_hardware
*
wlc_hw
,
bool
bound
,
bool
*
fatal
)
{
bool
morepending
=
false
;
struct
bcma_device
*
core
;
struct
tx_status
txstatus
,
*
txs
;
u32
s1
,
s2
;
...
...
@@ -1039,23 +1038,20 @@ brcms_b_txstatus(struct brcms_hardware *wlc_hw, bool bound, bool *fatal)
txs
=
&
txstatus
;
core
=
wlc_hw
->
d11core
;
*
fatal
=
false
;
s1
=
bcma_read32
(
core
,
D11REGOFFS
(
frmtxstatus
));
while
(
!
(
*
fatal
)
&&
(
s1
&
TXS_V
))
{
/* !give others some time to run! */
if
(
n
>=
max_tx_num
)
{
morepending
=
true
;
break
;
}
while
(
n
<
max_tx_num
)
{
s1
=
bcma_read32
(
core
,
D11REGOFFS
(
frmtxstatus
));
if
(
s1
==
0xffffffff
)
{
brcms_err
(
core
,
"wl%d: %s: dead chip
\n
"
,
wlc_hw
->
unit
,
__func__
);
*
fatal
=
true
;
return
false
;
}
s2
=
bcma_read32
(
core
,
D11REGOFFS
(
frmtxstatus2
));
/* only process when valid */
if
(
!
(
s1
&
TXS_V
))
break
;
s2
=
bcma_read32
(
core
,
D11REGOFFS
(
frmtxstatus2
));
txs
->
status
=
s1
&
TXS_STATUS_MASK
;
txs
->
frameid
=
(
s1
&
TXS_FID_MASK
)
>>
TXS_FID_SHIFT
;
txs
->
sequence
=
s2
&
TXS_SEQ_MASK
;
...
...
@@ -1063,15 +1059,12 @@ brcms_b_txstatus(struct brcms_hardware *wlc_hw, bool bound, bool *fatal)
txs
->
lasttxtime
=
0
;
*
fatal
=
brcms_c_dotxstatus
(
wlc_hw
->
wlc
,
txs
);
s1
=
bcma_read32
(
core
,
D11REGOFFS
(
frmtxstatus
))
;
if
(
*
fatal
==
true
)
return
false
;
n
++
;
}
if
(
*
fatal
)
return
false
;
return
morepending
;
return
n
>=
max_tx_num
;
}
static
void
brcms_c_tbtt
(
struct
brcms_c_info
*
wlc
)
...
...
@@ -7520,25 +7513,16 @@ int brcms_c_get_curband(struct brcms_c_info *wlc)
return
wlc
->
band
->
bandunit
;
}
void
brcms_c_wait_for_tx_completion
(
struct
brcms_c_info
*
wlc
,
bool
drop
)
bool
brcms_c_tx_flush_completed
(
struct
brcms_c_info
*
wlc
)
{
int
timeout
=
20
;
int
i
;
/* Kick DMA to send any pending AMPDU */
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
wlc
->
hw
->
di
);
i
++
)
if
(
wlc
->
hw
->
di
[
i
])
dma_txflush
(
wlc
->
hw
->
di
[
i
]);
/* wait for queue and DMA fifos to run dry */
while
(
brcms_txpktpendtot
(
wlc
)
>
0
)
{
brcms_msleep
(
wlc
->
wl
,
1
);
if
(
--
timeout
==
0
)
break
;
}
dma_kick_tx
(
wlc
->
hw
->
di
[
i
]);
WARN_ON_ONCE
(
timeout
==
0
);
return
!
brcms_txpktpendtot
(
wlc
);
}
void
brcms_c_set_beacon_listen_interval
(
struct
brcms_c_info
*
wlc
,
u8
interval
)
...
...
drivers/net/wireless/brcm80211/brcmsmac/pub.h
浏览文件 @
b90af3b8
...
...
@@ -314,8 +314,6 @@ extern void brcms_c_associate_upd(struct brcms_c_info *wlc, bool state);
extern
void
brcms_c_scan_start
(
struct
brcms_c_info
*
wlc
);
extern
void
brcms_c_scan_stop
(
struct
brcms_c_info
*
wlc
);
extern
int
brcms_c_get_curband
(
struct
brcms_c_info
*
wlc
);
extern
void
brcms_c_wait_for_tx_completion
(
struct
brcms_c_info
*
wlc
,
bool
drop
);
extern
int
brcms_c_set_channel
(
struct
brcms_c_info
*
wlc
,
u16
channel
);
extern
int
brcms_c_set_rate_limit
(
struct
brcms_c_info
*
wlc
,
u16
srl
,
u16
lrl
);
extern
void
brcms_c_get_current_rateset
(
struct
brcms_c_info
*
wlc
,
...
...
@@ -332,5 +330,6 @@ extern int brcms_c_set_tx_power(struct brcms_c_info *wlc, int txpwr);
extern
int
brcms_c_get_tx_power
(
struct
brcms_c_info
*
wlc
);
extern
bool
brcms_c_check_radio_disabled
(
struct
brcms_c_info
*
wlc
);
extern
void
brcms_c_mute
(
struct
brcms_c_info
*
wlc
,
bool
on
);
extern
bool
brcms_c_tx_flush_completed
(
struct
brcms_c_info
*
wlc
);
#endif
/* _BRCM_PUB_H_ */
drivers/net/wireless/iwlwifi/dvm/tx.c
浏览文件 @
b90af3b8
...
...
@@ -1145,6 +1145,13 @@ int iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb,
next_reclaimed
=
ssn
;
}
if
(
tid
!=
IWL_TID_NON_QOS
)
{
priv
->
tid_data
[
sta_id
][
tid
].
next_reclaimed
=
next_reclaimed
;
IWL_DEBUG_TX_REPLY
(
priv
,
"Next reclaimed packet:%d
\n
"
,
next_reclaimed
);
}
iwl_trans_reclaim
(
priv
->
trans
,
txq_id
,
ssn
,
&
skbs
);
iwlagn_check_ratid_empty
(
priv
,
sta_id
,
tid
);
...
...
@@ -1195,16 +1202,6 @@ int iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb,
if
(
!
is_agg
)
iwlagn_non_agg_tx_status
(
priv
,
ctx
,
hdr
->
addr1
);
/*
* W/A for FW bug - the seq_ctl isn't updated when the
* queues are flushed. Fetch it from the packet itself
*/
if
(
!
is_agg
&&
status
==
TX_STATUS_FAIL_FIFO_FLUSHED
)
{
next_reclaimed
=
le16_to_cpu
(
hdr
->
seq_ctrl
);
next_reclaimed
=
SEQ_TO_SN
(
next_reclaimed
+
0x10
);
}
is_offchannel_skb
=
(
info
->
flags
&
IEEE80211_TX_CTL_TX_OFFCHAN
);
freed
++
;
...
...
drivers/net/wireless/mwifiex/scan.c
浏览文件 @
b90af3b8
...
...
@@ -1563,7 +1563,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
dev_err
(
adapter
->
dev
,
"SCAN_RESP: too many AP returned (%d)
\n
"
,
scan_rsp
->
number_of_sets
);
ret
=
-
1
;
goto
done
;
goto
check_next_scan
;
}
bytes_left
=
le16_to_cpu
(
scan_rsp
->
bss_descript_size
);
...
...
@@ -1634,7 +1634,8 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
if
(
!
beacon_size
||
beacon_size
>
bytes_left
)
{
bss_info
+=
bytes_left
;
bytes_left
=
0
;
return
-
1
;
ret
=
-
1
;
goto
check_next_scan
;
}
/* Initialize the current working beacon pointer for this BSS
...
...
@@ -1690,7 +1691,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
dev_err
(
priv
->
adapter
->
dev
,
"%s: bytes left < IE length
\n
"
,
__func__
);
goto
done
;
goto
check_next_scan
;
}
if
(
element_id
==
WLAN_EID_DS_PARAMS
)
{
channel
=
*
(
current_ptr
+
sizeof
(
struct
ieee_types_header
));
...
...
@@ -1753,6 +1754,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
}
}
check_next_scan:
spin_lock_irqsave
(
&
adapter
->
scan_pending_q_lock
,
flags
);
if
(
list_empty
(
&
adapter
->
scan_pending_q
))
{
spin_unlock_irqrestore
(
&
adapter
->
scan_pending_q_lock
,
flags
);
...
...
@@ -1813,7 +1815,6 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
}
}
done:
return
ret
;
}
...
...
drivers/net/wireless/mwl8k.c
浏览文件 @
b90af3b8
...
...
@@ -334,20 +334,20 @@ struct mwl8k_sta {
#define MWL8K_STA(_sta) ((struct mwl8k_sta *)&((_sta)->drv_priv))
static
const
struct
ieee80211_channel
mwl8k_channels_24
[]
=
{
{
.
center_freq
=
2412
,
.
hw_value
=
1
,
},
{
.
center_freq
=
2417
,
.
hw_value
=
2
,
},
{
.
center_freq
=
2422
,
.
hw_value
=
3
,
},
{
.
center_freq
=
2427
,
.
hw_value
=
4
,
},
{
.
center_freq
=
2432
,
.
hw_value
=
5
,
},
{
.
center_freq
=
2437
,
.
hw_value
=
6
,
},
{
.
center_freq
=
2442
,
.
hw_value
=
7
,
},
{
.
center_freq
=
2447
,
.
hw_value
=
8
,
},
{
.
center_freq
=
2452
,
.
hw_value
=
9
,
},
{
.
center_freq
=
2457
,
.
hw_value
=
10
,
},
{
.
center_freq
=
2462
,
.
hw_value
=
11
,
},
{
.
center_freq
=
2467
,
.
hw_value
=
12
,
},
{
.
center_freq
=
2472
,
.
hw_value
=
13
,
},
{
.
center_freq
=
2484
,
.
hw_value
=
14
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2412
,
.
hw_value
=
1
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2417
,
.
hw_value
=
2
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2422
,
.
hw_value
=
3
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2427
,
.
hw_value
=
4
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2432
,
.
hw_value
=
5
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2437
,
.
hw_value
=
6
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2442
,
.
hw_value
=
7
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2447
,
.
hw_value
=
8
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2452
,
.
hw_value
=
9
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2457
,
.
hw_value
=
10
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2462
,
.
hw_value
=
11
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2467
,
.
hw_value
=
12
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2472
,
.
hw_value
=
13
,
},
{
.
band
=
IEEE80211_BAND_2GHZ
,
.
center_freq
=
2484
,
.
hw_value
=
14
,
},
};
static
const
struct
ieee80211_rate
mwl8k_rates_24
[]
=
{
...
...
@@ -368,10 +368,10 @@ static const struct ieee80211_rate mwl8k_rates_24[] = {
};
static
const
struct
ieee80211_channel
mwl8k_channels_50
[]
=
{
{
.
center_freq
=
5180
,
.
hw_value
=
36
,
},
{
.
center_freq
=
5200
,
.
hw_value
=
40
,
},
{
.
center_freq
=
5220
,
.
hw_value
=
44
,
},
{
.
center_freq
=
5240
,
.
hw_value
=
48
,
},
{
.
band
=
IEEE80211_BAND_5GHZ
,
.
center_freq
=
5180
,
.
hw_value
=
36
,
},
{
.
band
=
IEEE80211_BAND_5GHZ
,
.
center_freq
=
5200
,
.
hw_value
=
40
,
},
{
.
band
=
IEEE80211_BAND_5GHZ
,
.
center_freq
=
5220
,
.
hw_value
=
44
,
},
{
.
band
=
IEEE80211_BAND_5GHZ
,
.
center_freq
=
5240
,
.
hw_value
=
48
,
},
};
static
const
struct
ieee80211_rate
mwl8k_rates_50
[]
=
{
...
...
drivers/net/wireless/rtlwifi/base.c
浏览文件 @
b90af3b8
...
...
@@ -1004,7 +1004,8 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
is_tx
?
"Tx"
:
"Rx"
);
if
(
is_tx
)
{
rtl_lps_leave
(
hw
);
schedule_work
(
&
rtlpriv
->
works
.
lps_leave_work
);
ppsc
->
last_delaylps_stamp_jiffies
=
jiffies
;
}
...
...
@@ -1014,7 +1015,7 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
}
}
else
if
(
ETH_P_ARP
==
ether_type
)
{
if
(
is_tx
)
{
rtl_lps_leave
(
hw
);
schedule_work
(
&
rtlpriv
->
works
.
lps_leave_work
);
ppsc
->
last_delaylps_stamp_jiffies
=
jiffies
;
}
...
...
@@ -1024,7 +1025,7 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
"802.1X %s EAPOL pkt!!
\n
"
,
is_tx
?
"Tx"
:
"Rx"
);
if
(
is_tx
)
{
rtl_lps_leave
(
hw
);
schedule_work
(
&
rtlpriv
->
works
.
lps_leave_work
);
ppsc
->
last_delaylps_stamp_jiffies
=
jiffies
;
}
...
...
drivers/net/wireless/rtlwifi/usb.c
浏览文件 @
b90af3b8
...
...
@@ -542,8 +542,8 @@ static void _rtl_rx_pre_process(struct ieee80211_hw *hw, struct sk_buff *skb)
WARN_ON
(
skb_queue_empty
(
&
rx_queue
));
while
(
!
skb_queue_empty
(
&
rx_queue
))
{
_skb
=
skb_dequeue
(
&
rx_queue
);
_rtl_usb_rx_process_agg
(
hw
,
skb
);
ieee80211_rx_irqsafe
(
hw
,
skb
);
_rtl_usb_rx_process_agg
(
hw
,
_
skb
);
ieee80211_rx_irqsafe
(
hw
,
_
skb
);
}
}
...
...
drivers/ssb/driver_gpio.c
浏览文件 @
b90af3b8
...
...
@@ -196,3 +196,15 @@ int ssb_gpio_init(struct ssb_bus *bus)
return
-
1
;
}
int
ssb_gpio_unregister
(
struct
ssb_bus
*
bus
)
{
if
(
ssb_chipco_available
(
&
bus
->
chipco
)
||
ssb_extif_available
(
&
bus
->
extif
))
{
return
gpiochip_remove
(
&
bus
->
gpio
);
}
else
{
SSB_WARN_ON
(
1
);
}
return
-
1
;
}
drivers/ssb/main.c
浏览文件 @
b90af3b8
...
...
@@ -443,6 +443,15 @@ static void ssb_devices_unregister(struct ssb_bus *bus)
void
ssb_bus_unregister
(
struct
ssb_bus
*
bus
)
{
int
err
;
err
=
ssb_gpio_unregister
(
bus
);
if
(
err
==
-
EBUSY
)
ssb_dprintk
(
KERN_ERR
PFX
"Some GPIOs are still in use.
\n
"
);
else
if
(
err
)
ssb_dprintk
(
KERN_ERR
PFX
"Can not unregister GPIO driver: %i
\n
"
,
err
);
ssb_buses_lock
();
ssb_devices_unregister
(
bus
);
list_del
(
&
bus
->
list
);
...
...
drivers/ssb/ssb_private.h
浏览文件 @
b90af3b8
...
...
@@ -267,11 +267,16 @@ static inline void ssb_extif_init(struct ssb_extif *extif)
#ifdef CONFIG_SSB_DRIVER_GPIO
extern
int
ssb_gpio_init
(
struct
ssb_bus
*
bus
);
extern
int
ssb_gpio_unregister
(
struct
ssb_bus
*
bus
);
#else
/* CONFIG_SSB_DRIVER_GPIO */
static
inline
int
ssb_gpio_init
(
struct
ssb_bus
*
bus
)
{
return
-
ENOTSUPP
;
}
static
inline
int
ssb_gpio_unregister
(
struct
ssb_bus
*
bus
)
{
return
0
;
}
#endif
/* CONFIG_SSB_DRIVER_GPIO */
#endif
/* LINUX_SSB_PRIVATE_H_ */
net/bluetooth/hci_conn.c
浏览文件 @
b90af3b8
...
...
@@ -249,12 +249,12 @@ static void hci_conn_disconnect(struct hci_conn *conn)
__u8
reason
=
hci_proto_disconn_ind
(
conn
);
switch
(
conn
->
type
)
{
case
ACL_LINK
:
hci_acl_disconn
(
conn
,
reason
);
break
;
case
AMP_LINK
:
hci_amp_disconn
(
conn
,
reason
);
break
;
default:
hci_acl_disconn
(
conn
,
reason
);
break
;
}
}
...
...
net/bluetooth/smp.c
浏览文件 @
b90af3b8
...
...
@@ -859,6 +859,19 @@ int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
skb_pull
(
skb
,
sizeof
(
code
));
/*
* The SMP context must be initialized for all other PDUs except
* pairing and security requests. If we get any other PDU when
* not initialized simply disconnect (done if this function
* returns an error).
*/
if
(
code
!=
SMP_CMD_PAIRING_REQ
&&
code
!=
SMP_CMD_SECURITY_REQ
&&
!
conn
->
smp_chan
)
{
BT_ERR
(
"Unexpected SMP command 0x%02x. Disconnecting."
,
code
);
kfree_skb
(
skb
);
return
-
ENOTSUPP
;
}
switch
(
code
)
{
case
SMP_CMD_PAIRING_REQ
:
reason
=
smp_cmd_pairing_req
(
conn
,
skb
);
...
...
net/mac80211/cfg.c
浏览文件 @
b90af3b8
...
...
@@ -2085,7 +2085,8 @@ static int ieee80211_set_mcast_rate(struct wiphy *wiphy, struct net_device *dev,
{
struct
ieee80211_sub_if_data
*
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
memcpy
(
sdata
->
vif
.
bss_conf
.
mcast_rate
,
rate
,
sizeof
(
rate
));
memcpy
(
sdata
->
vif
.
bss_conf
.
mcast_rate
,
rate
,
sizeof
(
int
)
*
IEEE80211_NUM_BANDS
);
return
0
;
}
...
...
net/mac80211/mlme.c
浏览文件 @
b90af3b8
...
...
@@ -3462,6 +3462,7 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
ret
=
0
;
out:
while
(
!
cfg80211_chandef_usable
(
sdata
->
local
->
hw
.
wiphy
,
chandef
,
IEEE80211_CHAN_DISABLED
))
{
if
(
WARN_ON
(
chandef
->
width
==
NL80211_CHAN_WIDTH_20_NOHT
))
{
...
...
@@ -3470,14 +3471,13 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
goto
out
;
}
ret
=
chandef_downgrade
(
chandef
);
ret
|
=
chandef_downgrade
(
chandef
);
}
if
(
chandef
->
width
!=
vht_chandef
.
width
)
sdata_info
(
sdata
,
"
local
regulatory prevented using AP HT/VHT configuration, downgraded
\n
"
);
"
capabilities/
regulatory prevented using AP HT/VHT configuration, downgraded
\n
"
);
out:
WARN_ON_ONCE
(
!
cfg80211_chandef_valid
(
chandef
));
return
ret
;
}
...
...
@@ -3591,8 +3591,11 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
*/
ret
=
ieee80211_vif_use_channel
(
sdata
,
&
chandef
,
IEEE80211_CHANCTX_SHARED
);
while
(
ret
&&
chandef
.
width
!=
NL80211_CHAN_WIDTH_20_NOHT
)
while
(
ret
&&
chandef
.
width
!=
NL80211_CHAN_WIDTH_20_NOHT
)
{
ifmgd
->
flags
|=
chandef_downgrade
(
&
chandef
);
ret
=
ieee80211_vif_use_channel
(
sdata
,
&
chandef
,
IEEE80211_CHANCTX_SHARED
);
}
return
ret
;
}
...
...
net/wireless/scan.c
浏览文件 @
b90af3b8
...
...
@@ -1404,7 +1404,7 @@ ieee80211_bss(struct wiphy *wiphy, struct iw_request_info *info,
&
iwe
,
IW_EV_UINT_LEN
);
}
buf
=
kmalloc
(
3
0
,
GFP_ATOMIC
);
buf
=
kmalloc
(
3
1
,
GFP_ATOMIC
);
if
(
buf
)
{
memset
(
&
iwe
,
0
,
sizeof
(
iwe
));
iwe
.
cmd
=
IWEVCUSTOM
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录