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
Kirill Smelkov
linux
Commits
86b698b8
Commit
86b698b8
authored
May 05, 2009
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
parents
bc83871e
6909268d
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
68 additions
and
49 deletions
+68
-49
drivers/net/wireless/iwlwifi/iwl-sta.c
drivers/net/wireless/iwlwifi/iwl-sta.c
+11
-10
drivers/net/wireless/iwlwifi/iwl3945-base.c
drivers/net/wireless/iwlwifi/iwl3945-base.c
+0
-1
net/mac80211/rc80211_minstrel.c
net/mac80211/rc80211_minstrel.c
+1
-1
net/mac80211/rc80211_pid_algo.c
net/mac80211/rc80211_pid_algo.c
+39
-34
net/mac80211/tx.c
net/mac80211/tx.c
+1
-1
net/wireless/reg.c
net/wireless/reg.c
+15
-2
net/wireless/scan.c
net/wireless/scan.c
+1
-0
No files found.
drivers/net/wireless/iwlwifi/iwl-sta.c
View file @
86b698b8
...
...
@@ -719,6 +719,14 @@ static int iwl_set_tkip_dynamic_key_info(struct iwl_priv *priv,
{
unsigned
long
flags
;
int
ret
=
0
;
__le16
key_flags
=
0
;
key_flags
|=
(
STA_KEY_FLG_TKIP
|
STA_KEY_FLG_MAP_KEY_MSK
);
key_flags
|=
cpu_to_le16
(
keyconf
->
keyidx
<<
STA_KEY_FLG_KEYID_POS
);
key_flags
&=
~
STA_KEY_FLG_INVALID
;
if
(
sta_id
==
priv
->
hw_params
.
bcast_sta_id
)
key_flags
|=
STA_KEY_MULTICAST_MSK
;
keyconf
->
flags
|=
IEEE80211_KEY_FLAG_GENERATE_IV
;
keyconf
->
flags
|=
IEEE80211_KEY_FLAG_GENERATE_MMIC
;
...
...
@@ -738,6 +746,9 @@ static int iwl_set_tkip_dynamic_key_info(struct iwl_priv *priv,
WARN
(
priv
->
stations
[
sta_id
].
sta
.
key
.
key_offset
==
WEP_INVALID_OFFSET
,
"no space for a new key"
);
priv
->
stations
[
sta_id
].
sta
.
key
.
key_flags
=
key_flags
;
/* This copy is acutally not needed: we get the key with each TX */
memcpy
(
priv
->
stations
[
sta_id
].
keyinfo
.
key
,
keyconf
->
key
,
16
);
...
...
@@ -754,9 +765,7 @@ void iwl_update_tkip_key(struct iwl_priv *priv,
{
u8
sta_id
=
IWL_INVALID_STATION
;
unsigned
long
flags
;
__le16
key_flags
=
0
;
int
i
;
DECLARE_MAC_BUF
(
mac
);
sta_id
=
iwl_find_station
(
priv
,
addr
);
if
(
sta_id
==
IWL_INVALID_STATION
)
{
...
...
@@ -771,16 +780,8 @@ void iwl_update_tkip_key(struct iwl_priv *priv,
return
;
}
key_flags
|=
(
STA_KEY_FLG_TKIP
|
STA_KEY_FLG_MAP_KEY_MSK
);
key_flags
|=
cpu_to_le16
(
keyconf
->
keyidx
<<
STA_KEY_FLG_KEYID_POS
);
key_flags
&=
~
STA_KEY_FLG_INVALID
;
if
(
sta_id
==
priv
->
hw_params
.
bcast_sta_id
)
key_flags
|=
STA_KEY_MULTICAST_MSK
;
spin_lock_irqsave
(
&
priv
->
sta_lock
,
flags
);
priv
->
stations
[
sta_id
].
sta
.
key
.
key_flags
=
key_flags
;
priv
->
stations
[
sta_id
].
sta
.
key
.
tkip_rx_tsc_byte2
=
(
u8
)
iv32
;
for
(
i
=
0
;
i
<
5
;
i
++
)
...
...
drivers/net/wireless/iwlwifi/iwl3945-base.c
View file @
86b698b8
...
...
@@ -1744,7 +1744,6 @@ static void iwl3945_rx_queue_free(struct iwl_priv *priv, struct iwl_rx_queue *rx
rxq
->
bd
=
NULL
;
rxq
->
rb_stts
=
NULL
;
}
EXPORT_SYMBOL
(
iwl3945_rx_queue_free
);
/* Convert linear signal-to-noise ratio into dB */
...
...
net/mac80211/rc80211_minstrel.c
View file @
86b698b8
...
...
@@ -476,7 +476,7 @@ minstrel_alloc_sta(void *priv, struct ieee80211_sta *sta, gfp_t gfp)
return
NULL
;
for
(
i
=
0
;
i
<
IEEE80211_NUM_BANDS
;
i
++
)
{
sband
=
hw
->
wiphy
->
bands
[
hw
->
conf
.
channel
->
band
];
sband
=
hw
->
wiphy
->
bands
[
i
];
if
(
sband
->
n_bitrates
>
max_rates
)
max_rates
=
sband
->
n_bitrates
;
}
...
...
net/mac80211/rc80211_pid_algo.c
View file @
86b698b8
...
...
@@ -317,13 +317,44 @@ rate_control_pid_rate_init(void *priv, struct ieee80211_supported_band *sband,
struct
ieee80211_sta
*
sta
,
void
*
priv_sta
)
{
struct
rc_pid_sta_info
*
spinfo
=
priv_sta
;
struct
rc_pid_info
*
pinfo
=
priv
;
struct
rc_pid_rateinfo
*
rinfo
=
pinfo
->
rinfo
;
struct
sta_info
*
si
;
int
i
,
j
,
tmp
;
bool
s
;
/* TODO: This routine should consider using RSSI from previous packets
* as we need to have IEEE 802.1X auth succeed immediately after assoc..
* Until that method is implemented, we will use the lowest supported
* rate as a workaround. */
/* Sort the rates. This is optimized for the most common case (i.e.
* almost-sorted CCK+OFDM rates). Kind of bubble-sort with reversed
* mapping too. */
for
(
i
=
0
;
i
<
sband
->
n_bitrates
;
i
++
)
{
rinfo
[
i
].
index
=
i
;
rinfo
[
i
].
rev_index
=
i
;
if
(
RC_PID_FAST_START
)
rinfo
[
i
].
diff
=
0
;
else
rinfo
[
i
].
diff
=
i
*
pinfo
->
norm_offset
;
}
for
(
i
=
1
;
i
<
sband
->
n_bitrates
;
i
++
)
{
s
=
0
;
for
(
j
=
0
;
j
<
sband
->
n_bitrates
-
i
;
j
++
)
if
(
unlikely
(
sband
->
bitrates
[
rinfo
[
j
].
index
].
bitrate
>
sband
->
bitrates
[
rinfo
[
j
+
1
].
index
].
bitrate
))
{
tmp
=
rinfo
[
j
].
index
;
rinfo
[
j
].
index
=
rinfo
[
j
+
1
].
index
;
rinfo
[
j
+
1
].
index
=
tmp
;
rinfo
[
rinfo
[
j
].
index
].
rev_index
=
j
;
rinfo
[
rinfo
[
j
+
1
].
index
].
rev_index
=
j
+
1
;
s
=
1
;
}
if
(
!
s
)
break
;
}
spinfo
->
txrate_idx
=
rate_lowest_index
(
sband
,
sta
);
/* HACK */
si
=
container_of
(
sta
,
struct
sta_info
,
sta
);
...
...
@@ -336,21 +367,22 @@ static void *rate_control_pid_alloc(struct ieee80211_hw *hw,
struct
rc_pid_info
*
pinfo
;
struct
rc_pid_rateinfo
*
rinfo
;
struct
ieee80211_supported_band
*
sband
;
int
i
,
j
,
tmp
;
bool
s
;
int
i
,
max_rates
=
0
;
#ifdef CONFIG_MAC80211_DEBUGFS
struct
rc_pid_debugfs_entries
*
de
;
#endif
sband
=
hw
->
wiphy
->
bands
[
hw
->
conf
.
channel
->
band
];
pinfo
=
kmalloc
(
sizeof
(
*
pinfo
),
GFP_ATOMIC
);
if
(
!
pinfo
)
return
NULL
;
/* We can safely assume that sband won't change unless we get
* reinitialized. */
rinfo
=
kmalloc
(
sizeof
(
*
rinfo
)
*
sband
->
n_bitrates
,
GFP_ATOMIC
);
for
(
i
=
0
;
i
<
IEEE80211_NUM_BANDS
;
i
++
)
{
sband
=
hw
->
wiphy
->
bands
[
i
];
if
(
sband
->
n_bitrates
>
max_rates
)
max_rates
=
sband
->
n_bitrates
;
}
rinfo
=
kmalloc
(
sizeof
(
*
rinfo
)
*
max_rates
,
GFP_ATOMIC
);
if
(
!
rinfo
)
{
kfree
(
pinfo
);
return
NULL
;
...
...
@@ -368,33 +400,6 @@ static void *rate_control_pid_alloc(struct ieee80211_hw *hw,
pinfo
->
rinfo
=
rinfo
;
pinfo
->
oldrate
=
0
;
/* Sort the rates. This is optimized for the most common case (i.e.
* almost-sorted CCK+OFDM rates). Kind of bubble-sort with reversed
* mapping too. */
for
(
i
=
0
;
i
<
sband
->
n_bitrates
;
i
++
)
{
rinfo
[
i
].
index
=
i
;
rinfo
[
i
].
rev_index
=
i
;
if
(
RC_PID_FAST_START
)
rinfo
[
i
].
diff
=
0
;
else
rinfo
[
i
].
diff
=
i
*
pinfo
->
norm_offset
;
}
for
(
i
=
1
;
i
<
sband
->
n_bitrates
;
i
++
)
{
s
=
0
;
for
(
j
=
0
;
j
<
sband
->
n_bitrates
-
i
;
j
++
)
if
(
unlikely
(
sband
->
bitrates
[
rinfo
[
j
].
index
].
bitrate
>
sband
->
bitrates
[
rinfo
[
j
+
1
].
index
].
bitrate
))
{
tmp
=
rinfo
[
j
].
index
;
rinfo
[
j
].
index
=
rinfo
[
j
+
1
].
index
;
rinfo
[
j
+
1
].
index
=
tmp
;
rinfo
[
rinfo
[
j
].
index
].
rev_index
=
j
;
rinfo
[
rinfo
[
j
+
1
].
index
].
rev_index
=
j
+
1
;
s
=
1
;
}
if
(
!
s
)
break
;
}
#ifdef CONFIG_MAC80211_DEBUGFS
de
=
&
pinfo
->
dentries
;
de
->
target
=
debugfs_create_u32
(
"target_pf"
,
S_IRUSR
|
S_IWUSR
,
...
...
net/mac80211/tx.c
View file @
86b698b8
...
...
@@ -772,7 +772,7 @@ ieee80211_tx_h_fragment(struct ieee80211_tx_data *tx)
hdrlen
=
ieee80211_hdrlen
(
hdr
->
frame_control
);
/* internal error, why is TX_FRAGMENTED set? */
if
(
WARN_ON
(
skb
->
len
<=
frag_threshold
))
if
(
WARN_ON
(
skb
->
len
+
FCS_LEN
<=
frag_threshold
))
return
TX_DROP
;
/*
...
...
net/wireless/reg.c
View file @
86b698b8
...
...
@@ -907,6 +907,7 @@ EXPORT_SYMBOL(freq_reg_info);
int
freq_reg_info
(
struct
wiphy
*
wiphy
,
u32
center_freq
,
u32
*
bandwidth
,
const
struct
ieee80211_reg_rule
**
reg_rule
)
{
assert_cfg80211_lock
();
return
freq_reg_info_regd
(
wiphy
,
center_freq
,
bandwidth
,
reg_rule
,
NULL
);
}
...
...
@@ -1133,7 +1134,8 @@ static bool reg_is_world_roaming(struct wiphy *wiphy)
if
(
is_world_regdom
(
cfg80211_regdomain
->
alpha2
)
||
(
wiphy
->
regd
&&
is_world_regdom
(
wiphy
->
regd
->
alpha2
)))
return
true
;
if
(
last_request
->
initiator
!=
NL80211_REGDOM_SET_BY_COUNTRY_IE
&&
if
(
last_request
&&
last_request
->
initiator
!=
NL80211_REGDOM_SET_BY_COUNTRY_IE
&&
wiphy
->
custom_regulatory
)
return
true
;
return
false
;
...
...
@@ -1142,6 +1144,12 @@ static bool reg_is_world_roaming(struct wiphy *wiphy)
/* Reap the advantages of previously found beacons */
static
void
reg_process_beacons
(
struct
wiphy
*
wiphy
)
{
/*
* Means we are just firing up cfg80211, so no beacons would
* have been processed yet.
*/
if
(
!
last_request
)
return
;
if
(
!
reg_is_world_roaming
(
wiphy
))
return
;
wiphy_update_beacon_reg
(
wiphy
);
...
...
@@ -1176,6 +1184,8 @@ static void handle_channel_custom(struct wiphy *wiphy,
struct
ieee80211_supported_band
*
sband
;
struct
ieee80211_channel
*
chan
;
assert_cfg80211_lock
();
sband
=
wiphy
->
bands
[
band
];
BUG_ON
(
chan_idx
>=
sband
->
n_channels
);
chan
=
&
sband
->
channels
[
chan_idx
];
...
...
@@ -1214,10 +1224,13 @@ void wiphy_apply_custom_regulatory(struct wiphy *wiphy,
const
struct
ieee80211_regdomain
*
regd
)
{
enum
ieee80211_band
band
;
mutex_lock
(
&
cfg80211_mutex
);
for
(
band
=
0
;
band
<
IEEE80211_NUM_BANDS
;
band
++
)
{
if
(
wiphy
->
bands
[
band
])
handle_band_custom
(
wiphy
,
band
,
regd
);
}
mutex_unlock
(
&
cfg80211_mutex
);
}
EXPORT_SYMBOL
(
wiphy_apply_custom_regulatory
);
...
...
@@ -1423,7 +1436,7 @@ static int __regulatory_hint(struct wiphy *wiphy,
return
call_crda
(
last_request
->
alpha2
);
}
/* This
currently only processes user and driver
regulatory hints */
/* This
processes *all*
regulatory hints */
static
void
reg_process_hint
(
struct
regulatory_request
*
reg_request
)
{
int
r
=
0
;
...
...
net/wireless/scan.c
View file @
86b698b8
...
...
@@ -395,6 +395,7 @@ cfg80211_bss_update(struct cfg80211_registered_device *dev,
memcpy
(
ies
,
res
->
pub
.
information_elements
,
ielen
);
found
->
ies_allocated
=
true
;
found
->
pub
.
information_elements
=
ies
;
found
->
pub
.
len_information_elements
=
ielen
;
}
}
}
...
...
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