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
a1b97440
Commit
a1b97440
authored
Jul 30, 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
27fed417
89c3a8ac
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
63 additions
and
45 deletions
+63
-45
drivers/net/wireless/airo.c
drivers/net/wireless/airo.c
+6
-7
drivers/net/wireless/ath/ath9k/eeprom.c
drivers/net/wireless/ath/ath9k/eeprom.c
+2
-2
drivers/net/wireless/iwlwifi/iwl-3945.h
drivers/net/wireless/iwlwifi/iwl-3945.h
+1
-1
drivers/net/wireless/iwlwifi/iwl-dev.h
drivers/net/wireless/iwlwifi/iwl-dev.h
+4
-2
drivers/net/wireless/iwlwifi/iwl-tx.c
drivers/net/wireless/iwlwifi/iwl-tx.c
+8
-6
drivers/net/wireless/iwlwifi/iwl3945-base.c
drivers/net/wireless/iwlwifi/iwl3945-base.c
+2
-2
drivers/net/wireless/iwmc3200wifi/netdev.c
drivers/net/wireless/iwmc3200wifi/netdev.c
+2
-4
drivers/net/wireless/libertas/assoc.c
drivers/net/wireless/libertas/assoc.c
+8
-10
drivers/net/wireless/libertas/scan.c
drivers/net/wireless/libertas/scan.c
+2
-1
net/mac80211/mlme.c
net/mac80211/mlme.c
+1
-1
net/mac80211/pm.c
net/mac80211/pm.c
+15
-9
net/mac80211/rx.c
net/mac80211/rx.c
+12
-0
No files found.
drivers/net/wireless/airo.c
View file @
a1b97440
...
...
@@ -5918,20 +5918,19 @@ static int airo_set_essid(struct net_device *dev,
readSsidRid
(
local
,
&
SSID_rid
);
/* Check if we asked for `any' */
if
(
dwrq
->
flags
==
0
)
{
if
(
dwrq
->
flags
==
0
)
{
/* Just send an empty SSID list */
memset
(
&
SSID_rid
,
0
,
sizeof
(
SSID_rid
));
}
else
{
int
index
=
(
dwrq
->
flags
&
IW_ENCODE_INDEX
)
-
1
;
unsigned
index
=
(
dwrq
->
flags
&
IW_ENCODE_INDEX
)
-
1
;
/* Check the size of the string */
if
(
dwrq
->
length
>
IW_ESSID_MAX_SIZE
)
{
if
(
dwrq
->
length
>
IW_ESSID_MAX_SIZE
)
return
-
E2BIG
;
}
/* Check if index is valid */
if
((
index
<
0
)
||
(
index
>=
4
))
{
if
(
index
>=
ARRAY_SIZE
(
SSID_rid
.
ssids
))
return
-
EINVAL
;
}
/* Set the SSID */
memset
(
SSID_rid
.
ssids
[
index
].
ssid
,
0
,
...
...
@@ -6819,7 +6818,7 @@ static int airo_set_txpow(struct net_device *dev,
return
-
EINVAL
;
}
clear_bit
(
FLAG_RADIO_OFF
,
&
local
->
flags
);
for
(
i
=
0
;
cap_rid
.
txPowerLevels
[
i
]
&&
(
i
<
8
)
;
i
++
)
for
(
i
=
0
;
i
<
8
&&
cap_rid
.
txPowerLevels
[
i
]
;
i
++
)
if
(
v
==
cap_rid
.
txPowerLevels
[
i
])
{
readConfigRid
(
local
,
1
);
local
->
config
.
txPower
=
v
;
...
...
drivers/net/wireless/ath/ath9k/eeprom.c
View file @
a1b97440
...
...
@@ -460,7 +460,7 @@ static int ath9k_hw_4k_check_eeprom(struct ath_hw *ah)
integer
=
swab32
(
eep
->
modalHeader
.
antCtrlCommon
);
eep
->
modalHeader
.
antCtrlCommon
=
integer
;
for
(
i
=
0
;
i
<
AR5416_MAX_CHAINS
;
i
++
)
{
for
(
i
=
0
;
i
<
AR5416_
EEP4K_
MAX_CHAINS
;
i
++
)
{
integer
=
swab32
(
eep
->
modalHeader
.
antCtrlChain
[
i
]);
eep
->
modalHeader
.
antCtrlChain
[
i
]
=
integer
;
}
...
...
@@ -914,7 +914,7 @@ static void ath9k_hw_set_4k_power_per_rate_table(struct ath_hw *ah,
ctlMode
,
numCtlModes
,
isHt40CtlMode
,
(
pCtlMode
[
ctlMode
]
&
EXT_ADDITIVE
));
for
(
i
=
0
;
(
i
<
AR5416_NUM_CTLS
)
&&
for
(
i
=
0
;
(
i
<
AR5416_
EEP4K_
NUM_CTLS
)
&&
pEepData
->
ctlIndex
[
i
];
i
++
)
{
DPRINTF
(
ah
->
ah_sc
,
ATH_DBG_EEPROM
,
" LOOP-Ctlidx %d: cfgCtl 0x%2.2x "
...
...
drivers/net/wireless/iwlwifi/iwl-3945.h
View file @
a1b97440
...
...
@@ -112,7 +112,7 @@ enum iwl3945_antenna {
#define IWL_TX_FIFO_NONE 7
/* Minimum number of queues. MAX_NUM is defined in hw specific files */
#define IWL_MIN_NUM_QUEUES 4
#define IWL
39
_MIN_NUM_QUEUES 4
#define IEEE80211_DATA_LEN 2304
#define IEEE80211_4ADDR_LEN 30
...
...
drivers/net/wireless/iwlwifi/iwl-dev.h
View file @
a1b97440
...
...
@@ -258,8 +258,10 @@ struct iwl_channel_info {
#define IWL_TX_FIFO_HCCA_2 6
#define IWL_TX_FIFO_NONE 7
/* Minimum number of queues. MAX_NUM is defined in hw specific files */
#define IWL_MIN_NUM_QUEUES 4
/* Minimum number of queues. MAX_NUM is defined in hw specific files.
* Set the minimum to accommodate the 4 standard TX queues, 1 command
* queue, 2 (unused) HCCA queues, and 4 HT queues (one for each AC) */
#define IWL_MIN_NUM_QUEUES 10
/* Power management (not Tx power) structures */
...
...
drivers/net/wireless/iwlwifi/iwl-tx.c
View file @
a1b97440
...
...
@@ -720,8 +720,6 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
goto
drop_unlock
;
}
spin_unlock_irqrestore
(
&
priv
->
lock
,
flags
);
hdr_len
=
ieee80211_hdrlen
(
fc
);
/* Find (or create) index into station table for destination station */
...
...
@@ -729,7 +727,7 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
if
(
sta_id
==
IWL_INVALID_STATION
)
{
IWL_DEBUG_DROP
(
priv
,
"Dropping - INVALID STATION: %pM
\n
"
,
hdr
->
addr1
);
goto
drop
;
goto
drop
_unlock
;
}
IWL_DEBUG_TX
(
priv
,
"station Id %d
\n
"
,
sta_id
);
...
...
@@ -750,14 +748,17 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
txq_id
=
priv
->
stations
[
sta_id
].
tid
[
tid
].
agg
.
txq_id
;
swq_id
=
iwl_virtual_agg_queue_num
(
swq_id
,
txq_id
);
}
priv
->
stations
[
sta_id
].
tid
[
tid
].
tfds_in_queue
++
;
}
txq
=
&
priv
->
txq
[
txq_id
];
q
=
&
txq
->
q
;
txq
->
swq_id
=
swq_id
;
spin_lock_irqsave
(
&
priv
->
lock
,
flags
);
if
(
unlikely
(
iwl_queue_space
(
q
)
<
q
->
high_mark
))
goto
drop_unlock
;
if
(
ieee80211_is_data_qos
(
fc
))
priv
->
stations
[
sta_id
].
tid
[
tid
].
tfds_in_queue
++
;
/* Set up driver data for this TFD */
memset
(
&
(
txq
->
txb
[
q
->
write_ptr
]),
0
,
sizeof
(
struct
iwl_tx_info
));
...
...
@@ -902,7 +903,6 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
drop_unlock:
spin_unlock_irqrestore
(
&
priv
->
lock
,
flags
);
drop:
return
-
1
;
}
EXPORT_SYMBOL
(
iwl_tx_skb
);
...
...
@@ -1171,6 +1171,8 @@ int iwl_tx_agg_start(struct iwl_priv *priv, const u8 *ra, u16 tid, u16 *ssn)
IWL_ERR
(
priv
,
"Start AGG on invalid station
\n
"
);
return
-
ENXIO
;
}
if
(
unlikely
(
tid
>=
MAX_TID_COUNT
))
return
-
EINVAL
;
if
(
priv
->
stations
[
sta_id
].
tid
[
tid
].
agg
.
state
!=
IWL_AGG_OFF
)
{
IWL_ERR
(
priv
,
"Start AGG when state is not IWL_AGG_OFF !
\n
"
);
...
...
drivers/net/wireless/iwlwifi/iwl3945-base.c
View file @
a1b97440
...
...
@@ -4018,10 +4018,10 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
SET_IEEE80211_DEV
(
hw
,
&
pdev
->
dev
);
if
((
iwl3945_mod_params
.
num_of_queues
>
IWL39_MAX_NUM_QUEUES
)
||
(
iwl3945_mod_params
.
num_of_queues
<
IWL_MIN_NUM_QUEUES
))
{
(
iwl3945_mod_params
.
num_of_queues
<
IWL
39
_MIN_NUM_QUEUES
))
{
IWL_ERR
(
priv
,
"invalid queues_num, should be between %d and %d
\n
"
,
IWL_MIN_NUM_QUEUES
,
IWL39_MAX_NUM_QUEUES
);
IWL
39
_MIN_NUM_QUEUES
,
IWL39_MAX_NUM_QUEUES
);
err
=
-
EINVAL
;
goto
out_ieee80211_free_hw
;
}
...
...
drivers/net/wireless/iwmc3200wifi/netdev.c
View file @
a1b97440
...
...
@@ -106,10 +106,8 @@ void *iwm_if_alloc(int sizeof_bus, struct device *dev,
int
ret
=
0
;
wdev
=
iwm_wdev_alloc
(
sizeof_bus
,
dev
);
if
(
!
wdev
)
{
dev_err
(
dev
,
"no memory for wireless device instance
\n
"
);
return
ERR_PTR
(
-
ENOMEM
);
}
if
(
IS_ERR
(
wdev
))
return
wdev
;
iwm
=
wdev_to_iwm
(
wdev
);
iwm
->
bus_ops
=
if_ops
;
...
...
drivers/net/wireless/libertas/assoc.c
View file @
a1b97440
/* Copyright (C) 2006, Red Hat, Inc. */
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/etherdevice.h>
#include <linux/ieee80211.h>
#include <linux/if_arp.h>
...
...
@@ -43,21 +44,21 @@ static int get_common_rates(struct lbs_private *priv,
u16
*
rates_size
)
{
u8
*
card_rates
=
lbs_bg_rates
;
size_t
num_card_rates
=
sizeof
(
lbs_bg_rates
);
int
ret
=
0
,
i
,
j
;
u8
tmp
[
30
];
u8
tmp
[
(
ARRAY_SIZE
(
lbs_bg_rates
)
-
1
)
*
(
*
rates_size
-
1
)
];
size_t
tmp_size
=
0
;
/* For each rate in card_rates that exists in rate1, copy to tmp */
for
(
i
=
0
;
card_rates
[
i
]
&&
(
i
<
num_card_rates
)
;
i
++
)
{
for
(
j
=
0
;
rates
[
j
]
&&
(
j
<
*
rates_size
)
;
j
++
)
{
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
lbs_bg_rates
)
&&
card_rates
[
i
]
;
i
++
)
{
for
(
j
=
0
;
j
<
*
rates_size
&&
rates
[
j
]
;
j
++
)
{
if
(
rates
[
j
]
==
card_rates
[
i
])
tmp
[
tmp_size
++
]
=
card_rates
[
i
];
}
}
lbs_deb_hex
(
LBS_DEB_JOIN
,
"AP rates "
,
rates
,
*
rates_size
);
lbs_deb_hex
(
LBS_DEB_JOIN
,
"card rates "
,
card_rates
,
num_card_rates
);
lbs_deb_hex
(
LBS_DEB_JOIN
,
"card rates "
,
card_rates
,
ARRAY_SIZE
(
lbs_bg_rates
));
lbs_deb_hex
(
LBS_DEB_JOIN
,
"common rates"
,
tmp
,
tmp_size
);
lbs_deb_join
(
"TX data rate 0x%02x
\n
"
,
priv
->
cur_rate
);
...
...
@@ -69,10 +70,7 @@ static int get_common_rates(struct lbs_private *priv,
lbs_pr_alert
(
"Previously set fixed data rate %#x isn't "
"compatible with the network.
\n
"
,
priv
->
cur_rate
);
ret
=
-
1
;
goto
done
;
}
ret
=
0
;
done:
memset
(
rates
,
0
,
*
rates_size
);
*
rates_size
=
min_t
(
int
,
tmp_size
,
*
rates_size
);
...
...
@@ -322,7 +320,7 @@ static int lbs_associate(struct lbs_private *priv,
rates
=
(
struct
mrvl_ie_rates_param_set
*
)
pos
;
rates
->
header
.
type
=
cpu_to_le16
(
TLV_TYPE_RATES
);
memcpy
(
&
rates
->
rates
,
&
bss
->
rates
,
MAX_RATES
);
tmplen
=
MAX_RATES
;
tmplen
=
min_t
(
u16
,
ARRAY_SIZE
(
rates
->
rates
),
MAX_RATES
)
;
if
(
get_common_rates
(
priv
,
rates
->
rates
,
&
tmplen
))
{
ret
=
-
1
;
goto
done
;
...
...
@@ -598,7 +596,7 @@ static int lbs_adhoc_join(struct lbs_private *priv,
/* Copy Data rates from the rates recorded in scan response */
memset
(
cmd
.
bss
.
rates
,
0
,
sizeof
(
cmd
.
bss
.
rates
));
ratesize
=
min_t
(
u16
,
sizeof
(
cmd
.
bss
.
rates
),
MAX_RATES
);
ratesize
=
min_t
(
u16
,
ARRAY_SIZE
(
cmd
.
bss
.
rates
),
MAX_RATES
);
memcpy
(
cmd
.
bss
.
rates
,
bss
->
rates
,
ratesize
);
if
(
get_common_rates
(
priv
,
cmd
.
bss
.
rates
,
&
ratesize
))
{
lbs_deb_join
(
"ADHOC_JOIN: get_common_rates returned error.
\n
"
);
...
...
drivers/net/wireless/libertas/scan.c
View file @
a1b97440
...
...
@@ -5,6 +5,7 @@
* for sending scan commands to the firmware.
*/
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/etherdevice.h>
#include <linux/if_arp.h>
#include <asm/unaligned.h>
...
...
@@ -876,7 +877,7 @@ static inline char *lbs_translate_scan(struct lbs_private *priv,
iwe
.
u
.
bitrate
.
disabled
=
0
;
iwe
.
u
.
bitrate
.
value
=
0
;
for
(
j
=
0
;
bss
->
rates
[
j
]
&&
(
j
<
sizeof
(
bss
->
rates
))
;
j
++
)
{
for
(
j
=
0
;
j
<
ARRAY_SIZE
(
bss
->
rates
)
&&
bss
->
rates
[
j
]
;
j
++
)
{
/* Bit rate given in 500 kb/s units */
iwe
.
u
.
bitrate
.
value
=
bss
->
rates
[
j
]
*
500000
;
current_val
=
iwe_stream_add_value
(
info
,
start
,
current_val
,
...
...
net/mac80211/mlme.c
View file @
a1b97440
...
...
@@ -721,7 +721,7 @@ void ieee80211_dynamic_ps_timer(unsigned long data)
{
struct
ieee80211_local
*
local
=
(
void
*
)
data
;
if
(
local
->
quiescing
)
if
(
local
->
quiescing
||
local
->
suspended
)
return
;
queue_work
(
local
->
hw
.
workqueue
,
&
local
->
dynamic_ps_enable_work
);
...
...
net/mac80211/pm.c
View file @
a1b97440
...
...
@@ -55,15 +55,6 @@ int __ieee80211_suspend(struct ieee80211_hw *hw)
rcu_read_unlock
();
/* flush again, in case driver queued work */
flush_workqueue
(
local
->
hw
.
workqueue
);
/* stop hardware - this must stop RX */
if
(
local
->
open_count
)
{
ieee80211_led_radio
(
local
,
false
);
drv_stop
(
local
);
}
/* remove STAs */
spin_lock_irqsave
(
&
local
->
sta_lock
,
flags
);
list_for_each_entry
(
sta
,
&
local
->
sta_list
,
list
)
{
...
...
@@ -111,7 +102,22 @@ int __ieee80211_suspend(struct ieee80211_hw *hw)
drv_remove_interface
(
local
,
&
conf
);
}
/* stop hardware - this must stop RX */
if
(
local
->
open_count
)
{
ieee80211_led_radio
(
local
,
false
);
drv_stop
(
local
);
}
/*
* flush again, in case driver queued work -- it
* shouldn't be doing (or cancel everything in the
* stop callback) that but better safe than sorry.
*/
flush_workqueue
(
local
->
hw
.
workqueue
);
local
->
suspended
=
true
;
/* need suspended to be visible before quiescing is false */
barrier
();
local
->
quiescing
=
false
;
return
0
;
...
...
net/mac80211/rx.c
View file @
a1b97440
...
...
@@ -2453,6 +2453,18 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb,
return
;
}
/*
* If we're suspending, it is possible although not too likely
* that we'd be receiving frames after having already partially
* quiesced the stack. We can't process such frames then since
* that might, for example, cause stations to be added or other
* driver callbacks be invoked.
*/
if
(
unlikely
(
local
->
quiescing
||
local
->
suspended
))
{
kfree_skb
(
skb
);
return
;
}
if
(
status
->
flag
&
RX_FLAG_HT
)
{
/* rate_idx is MCS index */
if
(
WARN_ON
(
status
->
rate_idx
<
0
||
...
...
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