Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
d0834509
Commit
d0834509
authored
Jul 18, 2007
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'upstream-davem' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6
parents
2dbba6f7
cfb7267a
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
173 additions
and
146 deletions
+173
-146
net/mac80211/Makefile
net/mac80211/Makefile
+1
-0
net/mac80211/debugfs_netdev.c
net/mac80211/debugfs_netdev.c
+6
-3
net/mac80211/ieee80211.c
net/mac80211/ieee80211.c
+4
-3
net/mac80211/ieee80211_i.h
net/mac80211/ieee80211_i.h
+4
-1
net/mac80211/ieee80211_ioctl.c
net/mac80211/ieee80211_ioctl.c
+0
-133
net/mac80211/ieee80211_sta.c
net/mac80211/ieee80211_sta.c
+0
-6
net/mac80211/regdomain.c
net/mac80211/regdomain.c
+158
-0
No files found.
net/mac80211/Makefile
View file @
d0834509
...
@@ -13,6 +13,7 @@ mac80211-objs := \
...
@@ -13,6 +13,7 @@ mac80211-objs := \
ieee80211_iface.o
\
ieee80211_iface.o
\
ieee80211_rate.o
\
ieee80211_rate.o
\
michael.o
\
michael.o
\
regdomain.o
\
tkip.o
\
tkip.o
\
aes_ccm.o
\
aes_ccm.o
\
wme.o
\
wme.o
\
...
...
net/mac80211/debugfs_netdev.c
View file @
d0834509
...
@@ -397,6 +397,8 @@ static int netdev_notify(struct notifier_block * nb,
...
@@ -397,6 +397,8 @@ static int netdev_notify(struct notifier_block * nb,
void
*
ndev
)
void
*
ndev
)
{
{
struct
net_device
*
dev
=
ndev
;
struct
net_device
*
dev
=
ndev
;
struct
dentry
*
dir
;
struct
ieee80211_sub_if_data
*
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
char
buf
[
10
+
IFNAMSIZ
];
char
buf
[
10
+
IFNAMSIZ
];
if
(
state
!=
NETDEV_CHANGENAME
)
if
(
state
!=
NETDEV_CHANGENAME
)
...
@@ -408,10 +410,11 @@ static int netdev_notify(struct notifier_block * nb,
...
@@ -408,10 +410,11 @@ static int netdev_notify(struct notifier_block * nb,
if
(
dev
->
ieee80211_ptr
->
wiphy
->
privid
!=
mac80211_wiphy_privid
)
if
(
dev
->
ieee80211_ptr
->
wiphy
->
privid
!=
mac80211_wiphy_privid
)
return
0
;
return
0
;
/* TODO
sprintf
(
buf
,
"netdev:%s"
,
dev
->
name
);
sprintf
(
buf
,
"netdev:%s"
,
dev
->
name
);
debugfs_rename(IEEE80211_DEV_TO_SUB_IF(dev)->debugfsdir, buf);
dir
=
sdata
->
debugfsdir
;
*/
if
(
!
debugfs_rename
(
dir
->
d_parent
,
dir
,
dir
->
d_parent
,
buf
))
printk
(
KERN_ERR
"mac80211: debugfs: failed to rename debugfs "
"dir to %s
\n
"
,
buf
);
return
0
;
return
0
;
}
}
...
...
net/mac80211/ieee80211.c
View file @
d0834509
...
@@ -4986,7 +4986,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
...
@@ -4986,7 +4986,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
* and we need some headroom for passing the frame to monitor
* and we need some headroom for passing the frame to monitor
* interfaces, but never both at the same time.
* interfaces, but never both at the same time.
*/
*/
local
->
tx_headroom
=
max
(
local
->
hw
.
extra_tx_headroom
,
local
->
tx_headroom
=
max
_t
(
unsigned
int
,
local
->
hw
.
extra_tx_headroom
,
sizeof
(
struct
ieee80211_tx_status_rtap_hdr
));
sizeof
(
struct
ieee80211_tx_status_rtap_hdr
));
debugfs_hw_add
(
local
);
debugfs_hw_add
(
local
);
...
@@ -5095,7 +5095,7 @@ int ieee80211_register_hwmode(struct ieee80211_hw *hw,
...
@@ -5095,7 +5095,7 @@ int ieee80211_register_hwmode(struct ieee80211_hw *hw,
}
}
if
(
!
(
hw
->
flags
&
IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED
))
if
(
!
(
hw
->
flags
&
IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED
))
ieee80211_
init_client
(
local
->
mdev
);
ieee80211_
set_default_regdomain
(
mode
);
return
0
;
return
0
;
}
}
...
@@ -5246,6 +5246,7 @@ static int __init ieee80211_init(void)
...
@@ -5246,6 +5246,7 @@ static int __init ieee80211_init(void)
}
}
ieee80211_debugfs_netdev_init
();
ieee80211_debugfs_netdev_init
();
ieee80211_regdomain_init
();
return
0
;
return
0
;
}
}
...
...
net/mac80211/ieee80211_i.h
View file @
d0834509
...
@@ -759,7 +759,6 @@ void ieee80211_update_default_wep_only(struct ieee80211_local *local);
...
@@ -759,7 +759,6 @@ void ieee80211_update_default_wep_only(struct ieee80211_local *local);
/* ieee80211_ioctl.c */
/* ieee80211_ioctl.c */
int
ieee80211_set_compression
(
struct
ieee80211_local
*
local
,
int
ieee80211_set_compression
(
struct
ieee80211_local
*
local
,
struct
net_device
*
dev
,
struct
sta_info
*
sta
);
struct
net_device
*
dev
,
struct
sta_info
*
sta
);
int
ieee80211_init_client
(
struct
net_device
*
dev
);
int
ieee80211_set_channel
(
struct
ieee80211_local
*
local
,
int
channel
,
int
freq
);
int
ieee80211_set_channel
(
struct
ieee80211_local
*
local
,
int
channel
,
int
freq
);
/* ieee80211_sta.c */
/* ieee80211_sta.c */
void
ieee80211_sta_timer
(
unsigned
long
data
);
void
ieee80211_sta_timer
(
unsigned
long
data
);
...
@@ -798,6 +797,10 @@ void ieee80211_if_sdata_init(struct ieee80211_sub_if_data *sdata);
...
@@ -798,6 +797,10 @@ void ieee80211_if_sdata_init(struct ieee80211_sub_if_data *sdata);
int
ieee80211_if_add_mgmt
(
struct
ieee80211_local
*
local
);
int
ieee80211_if_add_mgmt
(
struct
ieee80211_local
*
local
);
void
ieee80211_if_del_mgmt
(
struct
ieee80211_local
*
local
);
void
ieee80211_if_del_mgmt
(
struct
ieee80211_local
*
local
);
/* regdomain.c */
void
ieee80211_regdomain_init
(
void
);
void
ieee80211_set_default_regdomain
(
struct
ieee80211_hw_mode
*
mode
);
/* for wiphy privid */
/* for wiphy privid */
extern
void
*
mac80211_wiphy_privid
;
extern
void
*
mac80211_wiphy_privid
;
...
...
net/mac80211/ieee80211_ioctl.c
View file @
d0834509
...
@@ -27,20 +27,6 @@
...
@@ -27,20 +27,6 @@
#include "aes_ccm.h"
#include "aes_ccm.h"
#include "debugfs_key.h"
#include "debugfs_key.h"
static
int
ieee80211_regdom
=
0x10
;
/* FCC */
module_param
(
ieee80211_regdom
,
int
,
0444
);
MODULE_PARM_DESC
(
ieee80211_regdom
,
"IEEE 802.11 regulatory domain; 64=MKK"
);
/*
* If firmware is upgraded by the vendor, additional channels can be used based
* on the new Japanese regulatory rules. This is indicated by setting
* ieee80211_japan_5ghz module parameter to one when loading the 80211 kernel
* module.
*/
static
int
ieee80211_japan_5ghz
/* = 0 */
;
module_param
(
ieee80211_japan_5ghz
,
int
,
0444
);
MODULE_PARM_DESC
(
ieee80211_japan_5ghz
,
"Vendor-updated firmware for 5 GHz"
);
static
void
ieee80211_set_hw_encryption
(
struct
net_device
*
dev
,
static
void
ieee80211_set_hw_encryption
(
struct
net_device
*
dev
,
struct
sta_info
*
sta
,
u8
addr
[
ETH_ALEN
],
struct
sta_info
*
sta
,
u8
addr
[
ETH_ALEN
],
struct
ieee80211_key
*
key
)
struct
ieee80211_key
*
key
)
...
@@ -412,125 +398,6 @@ static int ieee80211_ioctl_giwrange(struct net_device *dev,
...
@@ -412,125 +398,6 @@ static int ieee80211_ioctl_giwrange(struct net_device *dev,
}
}
struct
ieee80211_channel_range
{
short
start_freq
;
short
end_freq
;
unsigned
char
power_level
;
unsigned
char
antenna_max
;
};
static
const
struct
ieee80211_channel_range
ieee80211_fcc_channels
[]
=
{
{
2412
,
2462
,
27
,
6
}
/* IEEE 802.11b/g, channels 1..11 */
,
{
5180
,
5240
,
17
,
6
}
/* IEEE 802.11a, channels 36..48 */
,
{
5260
,
5320
,
23
,
6
}
/* IEEE 802.11a, channels 52..64 */
,
{
5745
,
5825
,
30
,
6
}
/* IEEE 802.11a, channels 149..165, outdoor */
,
{
0
}
};
static
const
struct
ieee80211_channel_range
ieee80211_mkk_channels
[]
=
{
{
2412
,
2472
,
20
,
6
}
/* IEEE 802.11b/g, channels 1..13 */
,
{
5170
,
5240
,
20
,
6
}
/* IEEE 802.11a, channels 34..48 */
,
{
5260
,
5320
,
20
,
6
}
/* IEEE 802.11a, channels 52..64 */
,
{
0
}
};
static
const
struct
ieee80211_channel_range
*
channel_range
=
ieee80211_fcc_channels
;
static
void
ieee80211_unmask_channel
(
struct
net_device
*
dev
,
int
mode
,
struct
ieee80211_channel
*
chan
)
{
int
i
;
chan
->
flag
=
0
;
if
(
ieee80211_regdom
==
64
&&
(
mode
==
MODE_ATHEROS_TURBO
||
mode
==
MODE_ATHEROS_TURBOG
))
{
/* Do not allow Turbo modes in Japan. */
return
;
}
for
(
i
=
0
;
channel_range
[
i
].
start_freq
;
i
++
)
{
const
struct
ieee80211_channel_range
*
r
=
&
channel_range
[
i
];
if
(
r
->
start_freq
<=
chan
->
freq
&&
r
->
end_freq
>=
chan
->
freq
)
{
if
(
ieee80211_regdom
==
64
&&
!
ieee80211_japan_5ghz
&&
chan
->
freq
>=
5260
&&
chan
->
freq
<=
5320
)
{
/*
* Skip new channels in Japan since the
* firmware was not marked having been upgraded
* by the vendor.
*/
continue
;
}
if
(
ieee80211_regdom
==
0x10
&&
(
chan
->
freq
==
5190
||
chan
->
freq
==
5210
||
chan
->
freq
==
5230
))
{
/* Skip MKK channels when in FCC domain. */
continue
;
}
chan
->
flag
|=
IEEE80211_CHAN_W_SCAN
|
IEEE80211_CHAN_W_ACTIVE_SCAN
|
IEEE80211_CHAN_W_IBSS
;
chan
->
power_level
=
r
->
power_level
;
chan
->
antenna_max
=
r
->
antenna_max
;
if
(
ieee80211_regdom
==
64
&&
(
chan
->
freq
==
5170
||
chan
->
freq
==
5190
||
chan
->
freq
==
5210
||
chan
->
freq
==
5230
))
{
/*
* New regulatory rules in Japan have backwards
* compatibility with old channels in 5.15-5.25
* GHz band, but the station is not allowed to
* use active scan on these old channels.
*/
chan
->
flag
&=
~
IEEE80211_CHAN_W_ACTIVE_SCAN
;
}
if
(
ieee80211_regdom
==
64
&&
(
chan
->
freq
==
5260
||
chan
->
freq
==
5280
||
chan
->
freq
==
5300
||
chan
->
freq
==
5320
))
{
/*
* IBSS is not allowed on 5.25-5.35 GHz band
* due to radar detection requirements.
*/
chan
->
flag
&=
~
IEEE80211_CHAN_W_IBSS
;
}
break
;
}
}
}
static
int
ieee80211_unmask_channels
(
struct
net_device
*
dev
)
{
struct
ieee80211_local
*
local
=
wdev_priv
(
dev
->
ieee80211_ptr
);
struct
ieee80211_hw_mode
*
mode
;
int
c
;
list_for_each_entry
(
mode
,
&
local
->
modes_list
,
list
)
{
for
(
c
=
0
;
c
<
mode
->
num_channels
;
c
++
)
{
ieee80211_unmask_channel
(
dev
,
mode
->
mode
,
&
mode
->
channels
[
c
]);
}
}
return
0
;
}
int
ieee80211_init_client
(
struct
net_device
*
dev
)
{
if
(
ieee80211_regdom
==
0x40
)
channel_range
=
ieee80211_mkk_channels
;
ieee80211_unmask_channels
(
dev
);
return
0
;
}
static
int
ieee80211_ioctl_siwmode
(
struct
net_device
*
dev
,
static
int
ieee80211_ioctl_siwmode
(
struct
net_device
*
dev
,
struct
iw_request_info
*
info
,
struct
iw_request_info
*
info
,
__u32
*
mode
,
char
*
extra
)
__u32
*
mode
,
char
*
extra
)
...
...
net/mac80211/ieee80211_sta.c
View file @
d0834509
...
@@ -25,7 +25,6 @@
...
@@ -25,7 +25,6 @@
#include <linux/wireless.h>
#include <linux/wireless.h>
#include <linux/random.h>
#include <linux/random.h>
#include <linux/etherdevice.h>
#include <linux/etherdevice.h>
#include <linux/rtnetlink.h>
#include <net/iw_handler.h>
#include <net/iw_handler.h>
#include <asm/types.h>
#include <asm/types.h>
...
@@ -2107,12 +2106,9 @@ static int ieee80211_sta_config_auth(struct net_device *dev,
...
@@ -2107,12 +2106,9 @@ static int ieee80211_sta_config_auth(struct net_device *dev,
struct
ieee80211_sta_bss
*
bss
,
*
selected
=
NULL
;
struct
ieee80211_sta_bss
*
bss
,
*
selected
=
NULL
;
int
top_rssi
=
0
,
freq
;
int
top_rssi
=
0
,
freq
;
rtnl_lock
();
if
(
!
ifsta
->
auto_channel_sel
&&
!
ifsta
->
auto_bssid_sel
&&
if
(
!
ifsta
->
auto_channel_sel
&&
!
ifsta
->
auto_bssid_sel
&&
!
ifsta
->
auto_ssid_sel
)
{
!
ifsta
->
auto_ssid_sel
)
{
ifsta
->
state
=
IEEE80211_AUTHENTICATE
;
ifsta
->
state
=
IEEE80211_AUTHENTICATE
;
rtnl_unlock
();
ieee80211_sta_reset_auth
(
dev
,
ifsta
);
ieee80211_sta_reset_auth
(
dev
,
ifsta
);
return
0
;
return
0
;
}
}
...
@@ -2155,7 +2151,6 @@ static int ieee80211_sta_config_auth(struct net_device *dev,
...
@@ -2155,7 +2151,6 @@ static int ieee80211_sta_config_auth(struct net_device *dev,
ieee80211_sta_set_bssid
(
dev
,
selected
->
bssid
);
ieee80211_sta_set_bssid
(
dev
,
selected
->
bssid
);
ieee80211_rx_bss_put
(
dev
,
selected
);
ieee80211_rx_bss_put
(
dev
,
selected
);
ifsta
->
state
=
IEEE80211_AUTHENTICATE
;
ifsta
->
state
=
IEEE80211_AUTHENTICATE
;
rtnl_unlock
();
ieee80211_sta_reset_auth
(
dev
,
ifsta
);
ieee80211_sta_reset_auth
(
dev
,
ifsta
);
return
0
;
return
0
;
}
else
{
}
else
{
...
@@ -2166,7 +2161,6 @@ static int ieee80211_sta_config_auth(struct net_device *dev,
...
@@ -2166,7 +2161,6 @@ static int ieee80211_sta_config_auth(struct net_device *dev,
}
else
}
else
ifsta
->
state
=
IEEE80211_DISABLED
;
ifsta
->
state
=
IEEE80211_DISABLED
;
}
}
rtnl_unlock
();
return
-
1
;
return
-
1
;
}
}
...
...
net/mac80211/regdomain.c
0 → 100644
View file @
d0834509
/*
* Copyright 2002-2005, Instant802 Networks, Inc.
* Copyright 2005-2006, Devicescape Software, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
/*
* This regulatory domain control implementation is known to be incomplete
* and confusing. mac80211 regulatory domain control will be significantly
* reworked in the not-too-distant future.
*
* For now, drivers wishing to control which channels are and aren't available
* are advised as follows:
* - set the IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED flag
* - continue to include *ALL* possible channels in the modes registered
* through ieee80211_register_hwmode()
* - for each allowable ieee80211_channel structure registered in the above
* call, set the flag member to some meaningful value such as
* IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN |
* IEEE80211_CHAN_W_IBSS.
* - leave flag as 0 for non-allowable channels
*
* The usual implementation is for a driver to read a device EEPROM to
* determine which regulatory domain it should be operating under, then
* looking up the allowable channels in a driver-local table, then performing
* the above.
*/
#include <linux/module.h>
#include <linux/netdevice.h>
#include <net/mac80211.h>
#include "ieee80211_i.h"
static
int
ieee80211_regdom
=
0x10
;
/* FCC */
module_param
(
ieee80211_regdom
,
int
,
0444
);
MODULE_PARM_DESC
(
ieee80211_regdom
,
"IEEE 802.11 regulatory domain; 64=MKK"
);
/*
* If firmware is upgraded by the vendor, additional channels can be used based
* on the new Japanese regulatory rules. This is indicated by setting
* ieee80211_japan_5ghz module parameter to one when loading the 80211 kernel
* module.
*/
static
int
ieee80211_japan_5ghz
/* = 0 */
;
module_param
(
ieee80211_japan_5ghz
,
int
,
0444
);
MODULE_PARM_DESC
(
ieee80211_japan_5ghz
,
"Vendor-updated firmware for 5 GHz"
);
struct
ieee80211_channel_range
{
short
start_freq
;
short
end_freq
;
unsigned
char
power_level
;
unsigned
char
antenna_max
;
};
static
const
struct
ieee80211_channel_range
ieee80211_fcc_channels
[]
=
{
{
2412
,
2462
,
27
,
6
}
/* IEEE 802.11b/g, channels 1..11 */
,
{
5180
,
5240
,
17
,
6
}
/* IEEE 802.11a, channels 36..48 */
,
{
5260
,
5320
,
23
,
6
}
/* IEEE 802.11a, channels 52..64 */
,
{
5745
,
5825
,
30
,
6
}
/* IEEE 802.11a, channels 149..165, outdoor */
,
{
0
}
};
static
const
struct
ieee80211_channel_range
ieee80211_mkk_channels
[]
=
{
{
2412
,
2472
,
20
,
6
}
/* IEEE 802.11b/g, channels 1..13 */
,
{
5170
,
5240
,
20
,
6
}
/* IEEE 802.11a, channels 34..48 */
,
{
5260
,
5320
,
20
,
6
}
/* IEEE 802.11a, channels 52..64 */
,
{
0
}
};
static
const
struct
ieee80211_channel_range
*
channel_range
=
ieee80211_fcc_channels
;
static
void
ieee80211_unmask_channel
(
int
mode
,
struct
ieee80211_channel
*
chan
)
{
int
i
;
chan
->
flag
=
0
;
if
(
ieee80211_regdom
==
64
&&
(
mode
==
MODE_ATHEROS_TURBO
||
mode
==
MODE_ATHEROS_TURBOG
))
{
/* Do not allow Turbo modes in Japan. */
return
;
}
for
(
i
=
0
;
channel_range
[
i
].
start_freq
;
i
++
)
{
const
struct
ieee80211_channel_range
*
r
=
&
channel_range
[
i
];
if
(
r
->
start_freq
<=
chan
->
freq
&&
r
->
end_freq
>=
chan
->
freq
)
{
if
(
ieee80211_regdom
==
64
&&
!
ieee80211_japan_5ghz
&&
chan
->
freq
>=
5260
&&
chan
->
freq
<=
5320
)
{
/*
* Skip new channels in Japan since the
* firmware was not marked having been upgraded
* by the vendor.
*/
continue
;
}
if
(
ieee80211_regdom
==
0x10
&&
(
chan
->
freq
==
5190
||
chan
->
freq
==
5210
||
chan
->
freq
==
5230
))
{
/* Skip MKK channels when in FCC domain. */
continue
;
}
chan
->
flag
|=
IEEE80211_CHAN_W_SCAN
|
IEEE80211_CHAN_W_ACTIVE_SCAN
|
IEEE80211_CHAN_W_IBSS
;
chan
->
power_level
=
r
->
power_level
;
chan
->
antenna_max
=
r
->
antenna_max
;
if
(
ieee80211_regdom
==
64
&&
(
chan
->
freq
==
5170
||
chan
->
freq
==
5190
||
chan
->
freq
==
5210
||
chan
->
freq
==
5230
))
{
/*
* New regulatory rules in Japan have backwards
* compatibility with old channels in 5.15-5.25
* GHz band, but the station is not allowed to
* use active scan on these old channels.
*/
chan
->
flag
&=
~
IEEE80211_CHAN_W_ACTIVE_SCAN
;
}
if
(
ieee80211_regdom
==
64
&&
(
chan
->
freq
==
5260
||
chan
->
freq
==
5280
||
chan
->
freq
==
5300
||
chan
->
freq
==
5320
))
{
/*
* IBSS is not allowed on 5.25-5.35 GHz band
* due to radar detection requirements.
*/
chan
->
flag
&=
~
IEEE80211_CHAN_W_IBSS
;
}
break
;
}
}
}
void
ieee80211_set_default_regdomain
(
struct
ieee80211_hw_mode
*
mode
)
{
int
c
;
for
(
c
=
0
;
c
<
mode
->
num_channels
;
c
++
)
ieee80211_unmask_channel
(
mode
->
mode
,
&
mode
->
channels
[
c
]);
}
void
ieee80211_regdomain_init
(
void
)
{
if
(
ieee80211_regdom
==
0x40
)
channel_range
=
ieee80211_mkk_channels
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment