Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
fe537c0e
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
fe537c0e
编写于
10月 17, 2007
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'fixes-davem' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6
上级
c9547709
107acb23
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
77 addition
and
48 deletion
+77
-48
drivers/ssb/Kconfig
drivers/ssb/Kconfig
+2
-2
drivers/ssb/driver_mipscore.c
drivers/ssb/driver_mipscore.c
+2
-1
net/ieee80211/ieee80211_crypt_tkip.c
net/ieee80211/ieee80211_crypt_tkip.c
+1
-1
net/mac80211/ieee80211_ioctl.c
net/mac80211/ieee80211_ioctl.c
+28
-17
net/mac80211/ieee80211_sta.c
net/mac80211/ieee80211_sta.c
+44
-27
未找到文件。
drivers/ssb/Kconfig
浏览文件 @
fe537c0e
...
...
@@ -22,7 +22,7 @@ config SSB
config SSB_PCIHOST_POSSIBLE
bool
depends on SSB &&
PCI
depends on SSB &&
(PCI = y || PCI = SSB)
default y
config SSB_PCIHOST
...
...
@@ -37,7 +37,7 @@ config SSB_PCIHOST
config SSB_PCMCIAHOST_POSSIBLE
bool
depends on SSB &&
PCMCIA
&& EXPERIMENTAL
depends on SSB &&
(PCMCIA = y || PCMCIA = SSB)
&& EXPERIMENTAL
default y
config SSB_PCMCIAHOST
...
...
drivers/ssb/driver_mipscore.c
浏览文件 @
fe537c0e
...
...
@@ -173,7 +173,7 @@ u32 ssb_cpu_clock(struct ssb_mipscore *mcore)
void
ssb_mipscore_init
(
struct
ssb_mipscore
*
mcore
)
{
struct
ssb_bus
*
bus
=
mcore
->
dev
->
bus
;
struct
ssb_bus
*
bus
;
struct
ssb_device
*
dev
;
unsigned
long
hz
,
ns
;
unsigned
int
irq
,
i
;
...
...
@@ -183,6 +183,7 @@ void ssb_mipscore_init(struct ssb_mipscore *mcore)
ssb_dprintk
(
KERN_INFO
PFX
"Initializing MIPS core...
\n
"
);
bus
=
mcore
->
dev
->
bus
;
hz
=
ssb_clockspeed
(
bus
);
if
(
!
hz
)
hz
=
100000000
;
...
...
net/ieee80211/ieee80211_crypt_tkip.c
浏览文件 @
fe537c0e
...
...
@@ -586,7 +586,7 @@ static void michael_mic_hdr(struct sk_buff *skb, u8 * hdr)
if
(
stype
&
IEEE80211_STYPE_QOS_DATA
)
{
const
struct
ieee80211_hdr_3addrqos
*
qoshdr
=
(
struct
ieee80211_hdr_3addrqos
*
)
skb
->
data
;
hdr
[
12
]
=
qoshdr
->
qos_ctl
&
cpu_to_le16
(
IEEE80211_QCTL_TID
)
;
hdr
[
12
]
=
le16_to_cpu
(
qoshdr
->
qos_ctl
)
&
IEEE80211_QCTL_TID
;
}
else
hdr
[
12
]
=
0
;
/* priority */
...
...
net/mac80211/ieee80211_ioctl.c
浏览文件 @
fe537c0e
...
...
@@ -306,9 +306,12 @@ int ieee80211_set_channel(struct ieee80211_local *local, int channel, int freq)
((
chan
->
chan
==
channel
)
||
(
chan
->
freq
==
freq
)))
{
local
->
oper_channel
=
chan
;
local
->
oper_hw_mode
=
mode
;
set
++
;
set
=
1
;
break
;
}
}
if
(
set
)
break
;
}
if
(
set
)
{
...
...
@@ -508,32 +511,40 @@ static int ieee80211_ioctl_giwap(struct net_device *dev,
static
int
ieee80211_ioctl_siwscan
(
struct
net_device
*
dev
,
struct
iw_request_info
*
info
,
struct
iw_point
*
data
,
char
*
extra
)
union
iwreq_data
*
wrqu
,
char
*
extra
)
{
struct
ieee80211_local
*
local
=
wdev_priv
(
dev
->
ieee80211_ptr
);
struct
ieee80211_sub_if_data
*
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
struct
iw_scan_req
*
req
=
NULL
;
u8
*
ssid
=
NULL
;
size_t
ssid_len
=
0
;
if
(
!
netif_running
(
dev
))
return
-
ENETDOWN
;
switch
(
sdata
->
type
)
{
case
IEEE80211_IF_TYPE_STA
:
case
IEEE80211_IF_TYPE_IBSS
:
if
(
local
->
scan_flags
&
IEEE80211_SCAN_MATCH_SSID
)
{
ssid
=
sdata
->
u
.
sta
.
ssid
;
ssid_len
=
sdata
->
u
.
sta
.
ssid_len
;
}
break
;
case
IEEE80211_IF_TYPE_AP
:
if
(
local
->
scan_flags
&
IEEE80211_SCAN_MATCH_SSID
)
{
ssid
=
sdata
->
u
.
ap
.
ssid
;
ssid_len
=
sdata
->
u
.
ap
.
ssid_len
;
if
(
wrqu
->
data
.
length
==
sizeof
(
struct
iw_scan_req
)
&&
wrqu
->
data
.
flags
&
IW_SCAN_THIS_ESSID
)
{
req
=
(
struct
iw_scan_req
*
)
extra
;
ssid
=
req
->
essid
;
ssid_len
=
req
->
essid_len
;
}
else
{
switch
(
sdata
->
type
)
{
case
IEEE80211_IF_TYPE_STA
:
case
IEEE80211_IF_TYPE_IBSS
:
if
(
local
->
scan_flags
&
IEEE80211_SCAN_MATCH_SSID
)
{
ssid
=
sdata
->
u
.
sta
.
ssid
;
ssid_len
=
sdata
->
u
.
sta
.
ssid_len
;
}
break
;
case
IEEE80211_IF_TYPE_AP
:
if
(
local
->
scan_flags
&
IEEE80211_SCAN_MATCH_SSID
)
{
ssid
=
sdata
->
u
.
ap
.
ssid
;
ssid_len
=
sdata
->
u
.
ap
.
ssid_len
;
}
break
;
default:
return
-
EOPNOTSUPP
;
}
break
;
default:
return
-
EOPNOTSUPP
;
}
return
ieee80211_sta_req_scan
(
dev
,
ssid
,
ssid_len
);
...
...
net/mac80211/ieee80211_sta.c
浏览文件 @
fe537c0e
...
...
@@ -12,7 +12,6 @@
*/
/* TODO:
* BSS table: use <BSSID,SSID> as the key to support multi-SSID APs
* order BSS list by RSSI(?) ("quality of AP")
* scan result table filtering (by capability (privacy, IBSS/BSS, WPA/RSN IE,
* SSID)
...
...
@@ -61,7 +60,8 @@
static
void
ieee80211_send_probe_req
(
struct
net_device
*
dev
,
u8
*
dst
,
u8
*
ssid
,
size_t
ssid_len
);
static
struct
ieee80211_sta_bss
*
ieee80211_rx_bss_get
(
struct
net_device
*
dev
,
u8
*
bssid
);
ieee80211_rx_bss_get
(
struct
net_device
*
dev
,
u8
*
bssid
,
int
channel
,
u8
*
ssid
,
u8
ssid_len
);
static
void
ieee80211_rx_bss_put
(
struct
net_device
*
dev
,
struct
ieee80211_sta_bss
*
bss
);
static
int
ieee80211_sta_find_ibss
(
struct
net_device
*
dev
,
...
...
@@ -427,7 +427,9 @@ static void ieee80211_set_associated(struct net_device *dev,
if
(
sdata
->
type
!=
IEEE80211_IF_TYPE_STA
)
return
;
bss
=
ieee80211_rx_bss_get
(
dev
,
ifsta
->
bssid
);
bss
=
ieee80211_rx_bss_get
(
dev
,
ifsta
->
bssid
,
local
->
hw
.
conf
.
channel
,
ifsta
->
ssid
,
ifsta
->
ssid_len
);
if
(
bss
)
{
if
(
bss
->
has_erp_value
)
ieee80211_handle_erp_ie
(
dev
,
bss
->
erp_value
);
...
...
@@ -574,7 +576,8 @@ static void ieee80211_send_assoc(struct net_device *dev,
capab
|=
WLAN_CAPABILITY_SHORT_SLOT_TIME
|
WLAN_CAPABILITY_SHORT_PREAMBLE
;
}
bss
=
ieee80211_rx_bss_get
(
dev
,
ifsta
->
bssid
);
bss
=
ieee80211_rx_bss_get
(
dev
,
ifsta
->
bssid
,
local
->
hw
.
conf
.
channel
,
ifsta
->
ssid
,
ifsta
->
ssid_len
);
if
(
bss
)
{
if
(
bss
->
capability
&
WLAN_CAPABILITY_PRIVACY
)
capab
|=
WLAN_CAPABILITY_PRIVACY
;
...
...
@@ -722,6 +725,7 @@ static void ieee80211_send_disassoc(struct net_device *dev,
static
int
ieee80211_privacy_mismatch
(
struct
net_device
*
dev
,
struct
ieee80211_if_sta
*
ifsta
)
{
struct
ieee80211_local
*
local
=
wdev_priv
(
dev
->
ieee80211_ptr
);
struct
ieee80211_sta_bss
*
bss
;
int
res
=
0
;
...
...
@@ -729,7 +733,8 @@ static int ieee80211_privacy_mismatch(struct net_device *dev,
ifsta
->
key_management_enabled
)
return
0
;
bss
=
ieee80211_rx_bss_get
(
dev
,
ifsta
->
bssid
);
bss
=
ieee80211_rx_bss_get
(
dev
,
ifsta
->
bssid
,
local
->
hw
.
conf
.
channel
,
ifsta
->
ssid
,
ifsta
->
ssid_len
);
if
(
!
bss
)
return
0
;
...
...
@@ -1203,15 +1208,11 @@ static void ieee80211_rx_mgmt_assoc_resp(struct net_device *dev,
capab_info
=
le16_to_cpu
(
mgmt
->
u
.
assoc_resp
.
capab_info
);
status_code
=
le16_to_cpu
(
mgmt
->
u
.
assoc_resp
.
status_code
);
aid
=
le16_to_cpu
(
mgmt
->
u
.
assoc_resp
.
aid
);
if
((
aid
&
(
BIT
(
15
)
|
BIT
(
14
)))
!=
(
BIT
(
15
)
|
BIT
(
14
)))
printk
(
KERN_DEBUG
"%s: invalid aid value %d; bits 15:14 not "
"set
\n
"
,
dev
->
name
,
aid
);
aid
&=
~
(
BIT
(
15
)
|
BIT
(
14
));
printk
(
KERN_DEBUG
"%s: RX %sssocResp from %s (capab=0x%x "
"status=%d aid=%d)
\n
"
,
dev
->
name
,
reassoc
?
"Rea"
:
"A"
,
print_mac
(
mac
,
mgmt
->
sa
),
capab_info
,
status_code
,
aid
);
capab_info
,
status_code
,
aid
&
~
(
BIT
(
15
)
|
BIT
(
14
))
);
if
(
status_code
!=
WLAN_STATUS_SUCCESS
)
{
printk
(
KERN_DEBUG
"%s: AP denied association (code=%d)
\n
"
,
...
...
@@ -1223,6 +1224,11 @@ static void ieee80211_rx_mgmt_assoc_resp(struct net_device *dev,
return
;
}
if
((
aid
&
(
BIT
(
15
)
|
BIT
(
14
)))
!=
(
BIT
(
15
)
|
BIT
(
14
)))
printk
(
KERN_DEBUG
"%s: invalid aid value %d; bits 15:14 not "
"set
\n
"
,
dev
->
name
,
aid
);
aid
&=
~
(
BIT
(
15
)
|
BIT
(
14
));
pos
=
mgmt
->
u
.
assoc_resp
.
variable
;
if
(
ieee802_11_parse_elems
(
pos
,
len
-
(
pos
-
(
u8
*
)
mgmt
),
&
elems
)
==
ParseFailed
)
{
...
...
@@ -1241,7 +1247,9 @@ static void ieee80211_rx_mgmt_assoc_resp(struct net_device *dev,
* update our stored copy */
if
(
elems
.
erp_info
&&
elems
.
erp_info_len
>=
1
)
{
struct
ieee80211_sta_bss
*
bss
=
ieee80211_rx_bss_get
(
dev
,
ifsta
->
bssid
);
=
ieee80211_rx_bss_get
(
dev
,
ifsta
->
bssid
,
local
->
hw
.
conf
.
channel
,
ifsta
->
ssid
,
ifsta
->
ssid_len
);
if
(
bss
)
{
bss
->
erp_value
=
elems
.
erp_info
[
0
];
bss
->
has_erp_value
=
1
;
...
...
@@ -1271,7 +1279,9 @@ static void ieee80211_rx_mgmt_assoc_resp(struct net_device *dev,
" AP
\n
"
,
dev
->
name
);
return
;
}
bss
=
ieee80211_rx_bss_get
(
dev
,
ifsta
->
bssid
);
bss
=
ieee80211_rx_bss_get
(
dev
,
ifsta
->
bssid
,
local
->
hw
.
conf
.
channel
,
ifsta
->
ssid
,
ifsta
->
ssid_len
);
if
(
bss
)
{
sta
->
last_rssi
=
bss
->
rssi
;
sta
->
last_signal
=
bss
->
signal
;
...
...
@@ -1347,7 +1357,8 @@ static void __ieee80211_rx_bss_hash_del(struct net_device *dev,
static
struct
ieee80211_sta_bss
*
ieee80211_rx_bss_add
(
struct
net_device
*
dev
,
u8
*
bssid
)
ieee80211_rx_bss_add
(
struct
net_device
*
dev
,
u8
*
bssid
,
int
channel
,
u8
*
ssid
,
u8
ssid_len
)
{
struct
ieee80211_local
*
local
=
wdev_priv
(
dev
->
ieee80211_ptr
);
struct
ieee80211_sta_bss
*
bss
;
...
...
@@ -1358,6 +1369,11 @@ ieee80211_rx_bss_add(struct net_device *dev, u8 *bssid)
atomic_inc
(
&
bss
->
users
);
atomic_inc
(
&
bss
->
users
);
memcpy
(
bss
->
bssid
,
bssid
,
ETH_ALEN
);
bss
->
channel
=
channel
;
if
(
ssid
&&
ssid_len
<=
IEEE80211_MAX_SSID_LEN
)
{
memcpy
(
bss
->
ssid
,
ssid
,
ssid_len
);
bss
->
ssid_len
=
ssid_len
;
}
spin_lock_bh
(
&
local
->
sta_bss_lock
);
/* TODO: order by RSSI? */
...
...
@@ -1369,7 +1385,8 @@ ieee80211_rx_bss_add(struct net_device *dev, u8 *bssid)
static
struct
ieee80211_sta_bss
*
ieee80211_rx_bss_get
(
struct
net_device
*
dev
,
u8
*
bssid
)
ieee80211_rx_bss_get
(
struct
net_device
*
dev
,
u8
*
bssid
,
int
channel
,
u8
*
ssid
,
u8
ssid_len
)
{
struct
ieee80211_local
*
local
=
wdev_priv
(
dev
->
ieee80211_ptr
);
struct
ieee80211_sta_bss
*
bss
;
...
...
@@ -1377,7 +1394,10 @@ ieee80211_rx_bss_get(struct net_device *dev, u8 *bssid)
spin_lock_bh
(
&
local
->
sta_bss_lock
);
bss
=
local
->
sta_bss_hash
[
STA_HASH
(
bssid
)];
while
(
bss
)
{
if
(
memcmp
(
bss
->
bssid
,
bssid
,
ETH_ALEN
)
==
0
)
{
if
(
!
memcmp
(
bss
->
bssid
,
bssid
,
ETH_ALEN
)
&&
bss
->
channel
==
channel
&&
bss
->
ssid_len
==
ssid_len
&&
(
ssid_len
==
0
||
!
memcmp
(
bss
->
ssid
,
ssid
,
ssid_len
)))
{
atomic_inc
(
&
bss
->
users
);
break
;
}
...
...
@@ -1545,9 +1565,11 @@ static void ieee80211_rx_bss_info(struct net_device *dev,
else
channel
=
rx_status
->
channel
;
bss
=
ieee80211_rx_bss_get
(
dev
,
mgmt
->
bssid
);
bss
=
ieee80211_rx_bss_get
(
dev
,
mgmt
->
bssid
,
channel
,
elems
.
ssid
,
elems
.
ssid_len
);
if
(
!
bss
)
{
bss
=
ieee80211_rx_bss_add
(
dev
,
mgmt
->
bssid
);
bss
=
ieee80211_rx_bss_add
(
dev
,
mgmt
->
bssid
,
channel
,
elems
.
ssid
,
elems
.
ssid_len
);
if
(
!
bss
)
return
;
}
else
{
...
...
@@ -1573,10 +1595,6 @@ static void ieee80211_rx_bss_info(struct net_device *dev,
bss
->
beacon_int
=
le16_to_cpu
(
mgmt
->
u
.
beacon
.
beacon_int
);
bss
->
capability
=
le16_to_cpu
(
mgmt
->
u
.
beacon
.
capab_info
);
if
(
elems
.
ssid
&&
elems
.
ssid_len
<=
IEEE80211_MAX_SSID_LEN
)
{
memcpy
(
bss
->
ssid
,
elems
.
ssid
,
elems
.
ssid_len
);
bss
->
ssid_len
=
elems
.
ssid_len
;
}
bss
->
supp_rates_len
=
0
;
if
(
elems
.
supp_rates
)
{
...
...
@@ -1647,7 +1665,6 @@ static void ieee80211_rx_bss_info(struct net_device *dev,
bss
->
hw_mode
=
rx_status
->
phymode
;
bss
->
channel
=
channel
;
bss
->
freq
=
rx_status
->
freq
;
if
(
channel
!=
rx_status
->
channel
&&
(
bss
->
hw_mode
==
MODE_IEEE80211G
||
...
...
@@ -2375,7 +2392,7 @@ static int ieee80211_sta_create_ibss(struct net_device *dev,
{
struct
ieee80211_local
*
local
=
wdev_priv
(
dev
->
ieee80211_ptr
);
struct
ieee80211_sta_bss
*
bss
;
struct
ieee80211_sub_if_data
*
sdata
;
struct
ieee80211_sub_if_data
*
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
)
;
struct
ieee80211_hw_mode
*
mode
;
u8
bssid
[
ETH_ALEN
],
*
pos
;
int
i
;
...
...
@@ -2398,18 +2415,17 @@ static int ieee80211_sta_create_ibss(struct net_device *dev,
printk
(
KERN_DEBUG
"%s: Creating new IBSS network, BSSID %s
\n
"
,
dev
->
name
,
print_mac
(
mac
,
bssid
));
bss
=
ieee80211_rx_bss_add
(
dev
,
bssid
);
bss
=
ieee80211_rx_bss_add
(
dev
,
bssid
,
local
->
hw
.
conf
.
channel
,
sdata
->
u
.
sta
.
ssid
,
sdata
->
u
.
sta
.
ssid_len
);
if
(
!
bss
)
return
-
ENOMEM
;
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
mode
=
local
->
oper_hw_mode
;
if
(
local
->
hw
.
conf
.
beacon_int
==
0
)
local
->
hw
.
conf
.
beacon_int
=
100
;
bss
->
beacon_int
=
local
->
hw
.
conf
.
beacon_int
;
bss
->
hw_mode
=
local
->
hw
.
conf
.
phymode
;
bss
->
channel
=
local
->
hw
.
conf
.
channel
;
bss
->
freq
=
local
->
hw
.
conf
.
freq
;
bss
->
last_update
=
jiffies
;
bss
->
capability
=
WLAN_CAPABILITY_IBSS
;
...
...
@@ -2469,7 +2485,8 @@ static int ieee80211_sta_find_ibss(struct net_device *dev,
"%s
\n
"
,
print_mac
(
mac
,
bssid
),
print_mac
(
mac2
,
ifsta
->
bssid
));
#endif
/* CONFIG_MAC80211_IBSS_DEBUG */
if
(
found
&&
memcmp
(
ifsta
->
bssid
,
bssid
,
ETH_ALEN
)
!=
0
&&
(
bss
=
ieee80211_rx_bss_get
(
dev
,
bssid
)))
{
(
bss
=
ieee80211_rx_bss_get
(
dev
,
bssid
,
local
->
hw
.
conf
.
channel
,
ifsta
->
ssid
,
ifsta
->
ssid_len
)))
{
printk
(
KERN_DEBUG
"%s: Selected IBSS BSSID %s"
" based on configured SSID
\n
"
,
dev
->
name
,
print_mac
(
mac
,
bssid
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录