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
42fe95ca
Commit
42fe95ca
authored
Feb 15, 2008
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'fixes' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6
parents
997b37da
6fff1c64
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
291 additions
and
146 deletions
+291
-146
drivers/net/wireless/ath5k/base.c
drivers/net/wireless/ath5k/base.c
+2
-2
drivers/net/wireless/ath5k/hw.c
drivers/net/wireless/ath5k/hw.c
+20
-14
drivers/net/wireless/b43/b43.h
drivers/net/wireless/b43/b43.h
+6
-0
drivers/net/wireless/b43/main.c
drivers/net/wireless/b43/main.c
+35
-5
drivers/net/wireless/b43legacy/b43legacy.h
drivers/net/wireless/b43legacy/b43legacy.h
+4
-0
drivers/net/wireless/b43legacy/dma.c
drivers/net/wireless/b43legacy/dma.c
+105
-62
drivers/net/wireless/b43legacy/dma.h
drivers/net/wireless/b43legacy/dma.h
+8
-25
drivers/net/wireless/b43legacy/main.c
drivers/net/wireless/b43legacy/main.c
+36
-5
drivers/net/wireless/ipw2200.c
drivers/net/wireless/ipw2200.c
+34
-11
drivers/net/wireless/iwlwifi/iwl3945-base.c
drivers/net/wireless/iwlwifi/iwl3945-base.c
+15
-4
drivers/net/wireless/iwlwifi/iwl4965-base.c
drivers/net/wireless/iwlwifi/iwl4965-base.c
+13
-4
drivers/net/wireless/rndis_wlan.c
drivers/net/wireless/rndis_wlan.c
+5
-9
drivers/net/wireless/rt2x00/rt2500usb.c
drivers/net/wireless/rt2x00/rt2500usb.c
+1
-1
drivers/net/wireless/wavelan.h
drivers/net/wireless/wavelan.h
+3
-3
net/mac80211/ieee80211.c
net/mac80211/ieee80211.c
+4
-1
No files found.
drivers/net/wireless/ath5k/base.c
View file @
42fe95ca
...
...
@@ -1256,7 +1256,7 @@ ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf,
if
(
ctl
->
flags
&
IEEE80211_TXCTL_NO_ACK
)
flags
|=
AR5K_TXDESC_NOACK
;
pktlen
=
skb
->
len
+
FCS_LEN
;
pktlen
=
skb
->
len
;
if
(
!
(
ctl
->
flags
&
IEEE80211_TXCTL_DO_NOT_ENCRYPT
))
{
keyidx
=
ctl
->
key_idx
;
...
...
@@ -1952,7 +1952,7 @@ ath5k_beacon_setup(struct ath5k_softc *sc, struct ath5k_buf *bf,
}
ds
->
ds_data
=
bf
->
skbaddr
;
ret
=
ah
->
ah_setup_tx_desc
(
ah
,
ds
,
skb
->
len
+
FCS_LEN
,
ret
=
ah
->
ah_setup_tx_desc
(
ah
,
ds
,
skb
->
len
,
ieee80211_get_hdrlen_from_skb
(
skb
),
AR5K_PKT_TYPE_BEACON
,
(
ctl
->
power_level
*
2
),
ctl
->
tx_rate
,
1
,
AR5K_TXKEYIX_INVALID
,
antenna
,
flags
,
0
,
0
);
...
...
drivers/net/wireless/ath5k/hw.c
View file @
42fe95ca
...
...
@@ -3506,7 +3506,7 @@ ath5k_hw_setup_2word_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc,
{
u32
frame_type
;
struct
ath5k_hw_2w_tx_desc
*
tx_desc
;
unsigned
int
buff
_len
;
unsigned
int
frame
_len
;
tx_desc
=
(
struct
ath5k_hw_2w_tx_desc
*
)
&
desc
->
ds_ctl0
;
...
...
@@ -3537,22 +3537,25 @@ ath5k_hw_setup_2word_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc,
/* Setup control descriptor */
/* Verify and set frame length */
if
(
pkt_len
&
~
AR5K_2W_TX_DESC_CTL0_FRAME_LEN
)
/* remove padding we might have added before */
frame_len
=
pkt_len
-
(
hdr_len
&
3
)
+
FCS_LEN
;
if
(
frame_len
&
~
AR5K_2W_TX_DESC_CTL0_FRAME_LEN
)
return
-
EINVAL
;
tx_desc
->
tx_control_0
=
pkt
_len
&
AR5K_2W_TX_DESC_CTL0_FRAME_LEN
;
tx_desc
->
tx_control_0
=
frame
_len
&
AR5K_2W_TX_DESC_CTL0_FRAME_LEN
;
/* Verify and set buffer length */
buff_len
=
pkt_len
-
FCS_LEN
;
/* NB: beacon's BufLen must be a multiple of 4 bytes */
if
(
type
==
AR5K_PKT_TYPE_BEACON
)
buff_len
=
roundup
(
buff
_len
,
4
);
pkt_len
=
roundup
(
pkt
_len
,
4
);
if
(
buff
_len
&
~
AR5K_2W_TX_DESC_CTL1_BUF_LEN
)
if
(
pkt
_len
&
~
AR5K_2W_TX_DESC_CTL1_BUF_LEN
)
return
-
EINVAL
;
tx_desc
->
tx_control_1
=
buff
_len
&
AR5K_2W_TX_DESC_CTL1_BUF_LEN
;
tx_desc
->
tx_control_1
=
pkt
_len
&
AR5K_2W_TX_DESC_CTL1_BUF_LEN
;
/*
* Verify and set header length
...
...
@@ -3634,7 +3637,7 @@ static int ath5k_hw_setup_4word_tx_desc(struct ath5k_hw *ah,
{
struct
ath5k_hw_4w_tx_desc
*
tx_desc
;
struct
ath5k_hw_tx_status
*
tx_status
;
unsigned
int
buff
_len
;
unsigned
int
frame
_len
;
ATH5K_TRACE
(
ah
->
ah_sc
);
tx_desc
=
(
struct
ath5k_hw_4w_tx_desc
*
)
&
desc
->
ds_ctl0
;
...
...
@@ -3669,22 +3672,25 @@ static int ath5k_hw_setup_4word_tx_desc(struct ath5k_hw *ah,
/* Setup control descriptor */
/* Verify and set frame length */
if
(
pkt_len
&
~
AR5K_4W_TX_DESC_CTL0_FRAME_LEN
)
/* remove padding we might have added before */
frame_len
=
pkt_len
-
(
hdr_len
&
3
)
+
FCS_LEN
;
if
(
frame_len
&
~
AR5K_4W_TX_DESC_CTL0_FRAME_LEN
)
return
-
EINVAL
;
tx_desc
->
tx_control_0
=
pkt
_len
&
AR5K_4W_TX_DESC_CTL0_FRAME_LEN
;
tx_desc
->
tx_control_0
=
frame
_len
&
AR5K_4W_TX_DESC_CTL0_FRAME_LEN
;
/* Verify and set buffer length */
buff_len
=
pkt_len
-
FCS_LEN
;
/* NB: beacon's BufLen must be a multiple of 4 bytes */
if
(
type
==
AR5K_PKT_TYPE_BEACON
)
buff_len
=
roundup
(
buff
_len
,
4
);
pkt_len
=
roundup
(
pkt
_len
,
4
);
if
(
buff
_len
&
~
AR5K_4W_TX_DESC_CTL1_BUF_LEN
)
if
(
pkt
_len
&
~
AR5K_4W_TX_DESC_CTL1_BUF_LEN
)
return
-
EINVAL
;
tx_desc
->
tx_control_1
=
buff
_len
&
AR5K_4W_TX_DESC_CTL1_BUF_LEN
;
tx_desc
->
tx_control_1
=
pkt
_len
&
AR5K_4W_TX_DESC_CTL1_BUF_LEN
;
tx_desc
->
tx_control_0
|=
AR5K_REG_SM
(
tx_power
,
AR5K_4W_TX_DESC_CTL0_XMIT_POWER
)
|
...
...
drivers/net/wireless/b43/b43.h
View file @
42fe95ca
...
...
@@ -14,6 +14,12 @@
#include "lo.h"
#include "phy.h"
/* The unique identifier of the firmware that's officially supported by
* this driver version. */
#define B43_SUPPORTED_FIRMWARE_ID "FW13"
#ifdef CONFIG_B43_DEBUG
# define B43_DEBUG 1
#else
...
...
drivers/net/wireless/b43/main.c
View file @
42fe95ca
...
...
@@ -58,6 +58,8 @@ MODULE_AUTHOR("Stefano Brivio");
MODULE_AUTHOR
(
"Michael Buesch"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_FIRMWARE
(
B43_SUPPORTED_FIRMWARE_ID
);
static
int
modparam_bad_frames_preempt
;
module_param_named
(
bad_frames_preempt
,
modparam_bad_frames_preempt
,
int
,
0444
);
...
...
@@ -1859,11 +1861,11 @@ static int b43_upload_microcode(struct b43_wldev *dev)
err
=
-
EOPNOTSUPP
;
goto
error
;
}
b43
dbg
(
dev
->
wl
,
"Loading firmware version %u.%u "
"(20%.2i-%.2i-%.2i %.2i:%.2i:%.2i)
\n
"
,
fwrev
,
fwpatch
,
(
fwdate
>>
12
)
&
0xF
,
(
fwdate
>>
8
)
&
0xF
,
fwdate
&
0xFF
,
(
fwtime
>>
11
)
&
0x1F
,
(
fwtime
>>
5
)
&
0x3F
,
fwtime
&
0x1F
);
b43
info
(
dev
->
wl
,
"Loading firmware version %u.%u "
"(20%.2i-%.2i-%.2i %.2i:%.2i:%.2i)
\n
"
,
fwrev
,
fwpatch
,
(
fwdate
>>
12
)
&
0xF
,
(
fwdate
>>
8
)
&
0xF
,
fwdate
&
0xFF
,
(
fwtime
>>
11
)
&
0x1F
,
(
fwtime
>>
5
)
&
0x3F
,
fwtime
&
0x1F
);
dev
->
fw
.
rev
=
fwrev
;
dev
->
fw
.
patch
=
fwpatch
;
...
...
@@ -4200,6 +4202,33 @@ static struct ssb_driver b43_ssb_driver = {
.
resume
=
b43_resume
,
};
static
void
b43_print_driverinfo
(
void
)
{
const
char
*
feat_pci
=
""
,
*
feat_pcmcia
=
""
,
*
feat_nphy
=
""
,
*
feat_leds
=
""
,
*
feat_rfkill
=
""
;
#ifdef CONFIG_B43_PCI_AUTOSELECT
feat_pci
=
"P"
;
#endif
#ifdef CONFIG_B43_PCMCIA
feat_pcmcia
=
"M"
;
#endif
#ifdef CONFIG_B43_NPHY
feat_nphy
=
"N"
;
#endif
#ifdef CONFIG_B43_LEDS
feat_leds
=
"L"
;
#endif
#ifdef CONFIG_B43_RFKILL
feat_rfkill
=
"R"
;
#endif
printk
(
KERN_INFO
"Broadcom 43xx driver loaded "
"[ Features: %s%s%s%s%s, Firmware-ID: "
B43_SUPPORTED_FIRMWARE_ID
" ]
\n
"
,
feat_pci
,
feat_pcmcia
,
feat_nphy
,
feat_leds
,
feat_rfkill
);
}
static
int
__init
b43_init
(
void
)
{
int
err
;
...
...
@@ -4211,6 +4240,7 @@ static int __init b43_init(void)
err
=
ssb_driver_register
(
&
b43_ssb_driver
);
if
(
err
)
goto
err_pcmcia_exit
;
b43_print_driverinfo
();
return
err
;
...
...
drivers/net/wireless/b43legacy/b43legacy.h
View file @
42fe95ca
...
...
@@ -23,6 +23,10 @@
#include "phy.h"
/* The unique identifier of the firmware that's officially supported by this
* driver version. */
#define B43legacy_SUPPORTED_FIRMWARE_ID "FW10"
#define B43legacy_IRQWAIT_MAX_RETRIES 20
#define B43legacy_RX_MAX_SSI 60
/* best guess at max ssi */
...
...
drivers/net/wireless/b43legacy/dma.c
View file @
42fe95ca
This diff is collapsed.
Click to expand it.
drivers/net/wireless/b43legacy/dma.h
View file @
42fe95ca
...
...
@@ -218,6 +218,12 @@ struct b43legacy_dma_ops {
void
(
*
set_current_rxslot
)(
struct
b43legacy_dmaring
*
ring
,
int
slot
);
};
enum
b43legacy_dmatype
{
B43legacy_DMA_30BIT
=
30
,
B43legacy_DMA_32BIT
=
32
,
B43legacy_DMA_64BIT
=
64
,
};
struct
b43legacy_dmaring
{
/* Lowlevel DMA ops. */
const
struct
b43legacy_dma_ops
*
ops
;
...
...
@@ -250,8 +256,8 @@ struct b43legacy_dmaring {
int
index
;
/* Boolean. Is this a TX ring? */
bool
tx
;
/*
Boolean. 64bit DMA if true, 32bit DMA otherwise
. */
bool
dma64
;
/*
The type of DMA engine used
. */
enum
b43legacy_dmatype
type
;
/* Boolean. Is this ring stopped at ieee80211 level? */
bool
stopped
;
/* Lock, only used for TX. */
...
...
@@ -284,15 +290,6 @@ void b43legacy_dma_write(struct b43legacy_dmaring *ring,
int
b43legacy_dma_init
(
struct
b43legacy_wldev
*
dev
);
void
b43legacy_dma_free
(
struct
b43legacy_wldev
*
dev
);
int
b43legacy_dmacontroller_rx_reset
(
struct
b43legacy_wldev
*
dev
,
u16
dmacontroller_mmio_base
,
int
dma64
);
int
b43legacy_dmacontroller_tx_reset
(
struct
b43legacy_wldev
*
dev
,
u16
dmacontroller_mmio_base
,
int
dma64
);
u16
b43legacy_dmacontroller_base
(
int
dma64bit
,
int
dmacontroller_idx
);
void
b43legacy_dma_tx_suspend
(
struct
b43legacy_wldev
*
dev
);
void
b43legacy_dma_tx_resume
(
struct
b43legacy_wldev
*
dev
);
...
...
@@ -320,20 +317,6 @@ void b43legacy_dma_free(struct b43legacy_wldev *dev)
{
}
static
inline
int
b43legacy_dmacontroller_rx_reset
(
struct
b43legacy_wldev
*
dev
,
u16
dmacontroller_mmio_base
,
int
dma64
)
{
return
0
;
}
static
inline
int
b43legacy_dmacontroller_tx_reset
(
struct
b43legacy_wldev
*
dev
,
u16
dmacontroller_mmio_base
,
int
dma64
)
{
return
0
;
}
static
inline
void
b43legacy_dma_get_tx_stats
(
struct
b43legacy_wldev
*
dev
,
struct
ieee80211_tx_queue_stats
*
stats
)
{
...
...
drivers/net/wireless/b43legacy/main.c
View file @
42fe95ca
...
...
@@ -3,7 +3,7 @@
* Broadcom B43legacy wireless driver
*
* Copyright (c) 2005 Martin Langer <martin-langer@gmx.de>
* Copyright (c) 2005-200
7
Stefano Brivio <stefano.brivio@polimi.it>
* Copyright (c) 2005-200
8
Stefano Brivio <stefano.brivio@polimi.it>
* Copyright (c) 2005, 2006 Michael Buesch <mb@bu3sch.de>
* Copyright (c) 2005 Danny van Dyk <kugelfang@gentoo.org>
* Copyright (c) 2005 Andreas Jaggi <andreas.jaggi@waterwave.ch>
...
...
@@ -60,6 +60,8 @@ MODULE_AUTHOR("Stefano Brivio");
MODULE_AUTHOR
(
"Michael Buesch"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_FIRMWARE
(
B43legacy_SUPPORTED_FIRMWARE_ID
);
#if defined(CONFIG_B43LEGACY_DMA) && defined(CONFIG_B43LEGACY_PIO)
static
int
modparam_pio
;
module_param_named
(
pio
,
modparam_pio
,
int
,
0444
);
...
...
@@ -1640,10 +1642,11 @@ static int b43legacy_upload_microcode(struct b43legacy_wldev *dev)
err
=
-
EOPNOTSUPP
;
goto
error
;
}
b43legacydbg
(
dev
->
wl
,
"Loading firmware version 0x%X, patch level %u "
"(20%.2i-%.2i-%.2i %.2i:%.2i:%.2i)
\n
"
,
fwrev
,
fwpatch
,
(
fwdate
>>
12
)
&
0xF
,
(
fwdate
>>
8
)
&
0xF
,
fwdate
&
0xFF
,
(
fwtime
>>
11
)
&
0x1F
,
(
fwtime
>>
5
)
&
0x3F
,
fwtime
&
0x1F
);
b43legacyinfo
(
dev
->
wl
,
"Loading firmware version 0x%X, patch level %u "
"(20%.2i-%.2i-%.2i %.2i:%.2i:%.2i)
\n
"
,
fwrev
,
fwpatch
,
(
fwdate
>>
12
)
&
0xF
,
(
fwdate
>>
8
)
&
0xF
,
fwdate
&
0xFF
,
(
fwtime
>>
11
)
&
0x1F
,
(
fwtime
>>
5
)
&
0x3F
,
fwtime
&
0x1F
);
dev
->
fw
.
rev
=
fwrev
;
dev
->
fw
.
patch
=
fwpatch
;
...
...
@@ -3806,6 +3809,32 @@ static struct ssb_driver b43legacy_ssb_driver = {
.
resume
=
b43legacy_resume
,
};
static
void
b43legacy_print_driverinfo
(
void
)
{
const
char
*
feat_pci
=
""
,
*
feat_leds
=
""
,
*
feat_rfkill
=
""
,
*
feat_pio
=
""
,
*
feat_dma
=
""
;
#ifdef CONFIG_B43LEGACY_PCI_AUTOSELECT
feat_pci
=
"P"
;
#endif
#ifdef CONFIG_B43LEGACY_LEDS
feat_leds
=
"L"
;
#endif
#ifdef CONFIG_B43LEGACY_RFKILL
feat_rfkill
=
"R"
;
#endif
#ifdef CONFIG_B43LEGACY_PIO
feat_pio
=
"I"
;
#endif
#ifdef CONFIG_B43LEGACY_DMA
feat_dma
=
"D"
;
#endif
printk
(
KERN_INFO
"Broadcom 43xx driver loaded "
"[ Features: %s%s%s%s%s, Firmware-ID: "
B43legacy_SUPPORTED_FIRMWARE_ID
" ]
\n
"
,
feat_pci
,
feat_leds
,
feat_rfkill
,
feat_pio
,
feat_dma
);
}
static
int
__init
b43legacy_init
(
void
)
{
int
err
;
...
...
@@ -3816,6 +3845,8 @@ static int __init b43legacy_init(void)
if
(
err
)
goto
err_dfs_exit
;
b43legacy_print_driverinfo
();
return
err
;
err_dfs_exit:
...
...
drivers/net/wireless/ipw2200.c
View file @
42fe95ca
...
...
@@ -3365,7 +3365,6 @@ static void ipw_rx_queue_reset(struct ipw_priv *priv,
/* Set us so that we have processed and used all buffers, but have
* not restocked the Rx queue with fresh buffers */
rxq
->
read
=
rxq
->
write
=
0
;
rxq
->
processed
=
RX_QUEUE_SIZE
-
1
;
rxq
->
free_count
=
0
;
spin_unlock_irqrestore
(
&
rxq
->
lock
,
flags
);
}
...
...
@@ -3607,7 +3606,22 @@ static int ipw_load(struct ipw_priv *priv)
* Driver allocates buffers of this size for Rx
*/
static
inline
int
ipw_queue_space
(
const
struct
clx2_queue
*
q
)
/**
* ipw_rx_queue_space - Return number of free slots available in queue.
*/
static
int
ipw_rx_queue_space
(
const
struct
ipw_rx_queue
*
q
)
{
int
s
=
q
->
read
-
q
->
write
;
if
(
s
<=
0
)
s
+=
RX_QUEUE_SIZE
;
/* keep some buffer to not confuse full and empty queue */
s
-=
2
;
if
(
s
<
0
)
s
=
0
;
return
s
;
}
static
inline
int
ipw_tx_queue_space
(
const
struct
clx2_queue
*
q
)
{
int
s
=
q
->
last_used
-
q
->
first_empty
;
if
(
s
<=
0
)
...
...
@@ -4947,7 +4961,7 @@ static int ipw_queue_tx_reclaim(struct ipw_priv *priv,
priv
->
tx_packets
++
;
}
done:
if
((
ipw_queue_space
(
q
)
>
q
->
low_mark
)
&&
if
((
ipw_
tx_
queue_space
(
q
)
>
q
->
low_mark
)
&&
(
qindex
>=
0
)
&&
(
priv
->
status
&
STATUS_ASSOCIATED
)
&&
netif_running
(
priv
->
net_dev
))
netif_wake_queue
(
priv
->
net_dev
);
...
...
@@ -4965,7 +4979,7 @@ static int ipw_queue_tx_hcmd(struct ipw_priv *priv, int hcmd, void *buf,
struct
clx2_queue
*
q
=
&
txq
->
q
;
struct
tfd_frame
*
tfd
;
if
(
ipw_queue_space
(
q
)
<
(
sync
?
1
:
2
))
{
if
(
ipw_
tx_
queue_space
(
q
)
<
(
sync
?
1
:
2
))
{
IPW_ERROR
(
"No space for Tx
\n
"
);
return
-
EBUSY
;
}
...
...
@@ -5070,7 +5084,7 @@ static void ipw_rx_queue_restock(struct ipw_priv *priv)
spin_lock_irqsave
(
&
rxq
->
lock
,
flags
);
write
=
rxq
->
write
;
while
((
rxq
->
write
!=
rxq
->
processed
)
&&
(
rxq
->
free_count
))
{
while
((
ipw_rx_queue_space
(
rxq
)
>
0
)
&&
(
rxq
->
free_count
))
{
element
=
rxq
->
rx_free
.
next
;
rxb
=
list_entry
(
element
,
struct
ipw_rx_mem_buffer
,
list
);
list_del
(
element
);
...
...
@@ -5187,7 +5201,6 @@ static struct ipw_rx_queue *ipw_rx_queue_alloc(struct ipw_priv *priv)
/* Set us so that we have processed and used all buffers, but have
* not restocked the Rx queue with fresh buffers */
rxq
->
read
=
rxq
->
write
=
0
;
rxq
->
processed
=
RX_QUEUE_SIZE
-
1
;
rxq
->
free_count
=
0
;
return
rxq
;
...
...
@@ -8223,13 +8236,17 @@ static void ipw_rx(struct ipw_priv *priv)
struct
ieee80211_hdr_4addr
*
header
;
u32
r
,
w
,
i
;
u8
network_packet
;
u8
fill_rx
=
0
;
DECLARE_MAC_BUF
(
mac
);
DECLARE_MAC_BUF
(
mac2
);
DECLARE_MAC_BUF
(
mac3
);
r
=
ipw_read32
(
priv
,
IPW_RX_READ_INDEX
);
w
=
ipw_read32
(
priv
,
IPW_RX_WRITE_INDEX
);
i
=
(
priv
->
rxq
->
processed
+
1
)
%
RX_QUEUE_SIZE
;
i
=
priv
->
rxq
->
read
;
if
(
ipw_rx_queue_space
(
priv
->
rxq
)
>
(
RX_QUEUE_SIZE
/
2
))
fill_rx
=
1
;
while
(
i
!=
r
)
{
rxb
=
priv
->
rxq
->
queue
[
i
];
...
...
@@ -8404,11 +8421,17 @@ static void ipw_rx(struct ipw_priv *priv)
list_add_tail
(
&
rxb
->
list
,
&
priv
->
rxq
->
rx_used
);
i
=
(
i
+
1
)
%
RX_QUEUE_SIZE
;
/* If there are a lot of unsued frames, restock the Rx queue
* so the ucode won't assert */
if
(
fill_rx
)
{
priv
->
rxq
->
read
=
i
;
ipw_rx_queue_replenish
(
priv
);
}
}
/* Backtrack one entry */
priv
->
rxq
->
processed
=
(
i
?
i
:
RX_QUEUE_SIZE
)
-
1
;
priv
->
rxq
->
read
=
i
;
ipw_rx_queue_restock
(
priv
);
}
...
...
@@ -10336,7 +10359,7 @@ static int ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb,
q
->
first_empty
=
ipw_queue_inc_wrap
(
q
->
first_empty
,
q
->
n_bd
);
ipw_write32
(
priv
,
q
->
reg_w
,
q
->
first_empty
);
if
(
ipw_queue_space
(
q
)
<
q
->
high_mark
)
if
(
ipw_
tx_
queue_space
(
q
)
<
q
->
high_mark
)
netif_stop_queue
(
priv
->
net_dev
);
return
NETDEV_TX_OK
;
...
...
@@ -10357,7 +10380,7 @@ static int ipw_net_is_queue_full(struct net_device *dev, int pri)
struct
clx2_tx_queue
*
txq
=
&
priv
->
txq
[
0
];
#endif
/* CONFIG_IPW2200_QOS */
if
(
ipw_queue_space
(
&
txq
->
q
)
<
txq
->
q
.
high_mark
)
if
(
ipw_
tx_
queue_space
(
&
txq
->
q
)
<
txq
->
q
.
high_mark
)
return
1
;
return
0
;
...
...
drivers/net/wireless/iwlwifi/iwl3945-base.c
View file @
42fe95ca
...
...
@@ -687,6 +687,12 @@ static int iwl3945_enqueue_hcmd(struct iwl3945_priv *priv, struct iwl3945_host_c
BUG_ON
((
fix_size
>
TFD_MAX_PAYLOAD_SIZE
)
&&
!
(
cmd
->
meta
.
flags
&
CMD_SIZE_HUGE
));
if
(
iwl3945_is_rfkill
(
priv
))
{
IWL_DEBUG_INFO
(
"Not sending command - RF KILL"
);
return
-
EIO
;
}
if
(
iwl3945_queue_space
(
q
)
<
((
cmd
->
meta
.
flags
&
CMD_ASYNC
)
?
2
:
1
))
{
IWL_ERROR
(
"No space for Tx
\n
"
);
return
-
ENOSPC
;
...
...
@@ -1580,7 +1586,7 @@ static inline int iwl3945_eeprom_acquire_semaphore(struct iwl3945_priv *priv)
*/
int
iwl3945_eeprom_init
(
struct
iwl3945_priv
*
priv
)
{
__le16
*
e
=
(
__le
16
*
)
&
priv
->
eeprom
;
u16
*
e
=
(
u
16
*
)
&
priv
->
eeprom
;
u32
gp
=
iwl3945_read32
(
priv
,
CSR_EEPROM_GP
);
u32
r
;
int
sz
=
sizeof
(
priv
->
eeprom
);
...
...
@@ -1623,7 +1629,7 @@ int iwl3945_eeprom_init(struct iwl3945_priv *priv)
IWL_ERROR
(
"Time out reading EEPROM[%d]"
,
addr
);
return
-
ETIMEDOUT
;
}
e
[
addr
/
2
]
=
cpu_to_le16
(
r
>>
16
);
e
[
addr
/
2
]
=
le16_to_cpu
((
__force
__le16
)(
r
>>
16
)
);
}
return
0
;
...
...
@@ -2806,7 +2812,8 @@ static int iwl3945_tx_skb(struct iwl3945_priv *priv,
#endif
/* drop all data frame if we are not associated */
if
((
!
iwl3945_is_associated
(
priv
)
||
!
priv
->
assoc_id
)
&&
if
((
!
iwl3945_is_associated
(
priv
)
||
((
priv
->
iw_mode
==
IEEE80211_IF_TYPE_STA
)
&&
!
priv
->
assoc_id
))
&&
((
fc
&
IEEE80211_FCTL_FTYPE
)
==
IEEE80211_FTYPE_DATA
))
{
IWL_DEBUG_DROP
(
"Dropping - !iwl3945_is_associated
\n
"
);
goto
drop_unlock
;
...
...
@@ -4281,7 +4288,7 @@ static void iwl3945_rx_handle(struct iwl3945_priv *priv)
int
reclaim
;
unsigned
long
flags
;
u8
fill_rx
=
0
;
u32
count
=
0
;
u32
count
=
8
;
/* uCode's read index (stored in shared DRAM) indicates the last Rx
* buffer that the driver may process (last buffer filled by ucode). */
...
...
@@ -6256,6 +6263,8 @@ static void __iwl3945_down(struct iwl3945_priv *priv)
STATUS_RF_KILL_HW
|
test_bit
(
STATUS_RF_KILL_SW
,
&
priv
->
status
)
<<
STATUS_RF_KILL_SW
|
test_bit
(
STATUS_GEO_CONFIGURED
,
&
priv
->
status
)
<<
STATUS_GEO_CONFIGURED
|
test_bit
(
STATUS_IN_SUSPEND
,
&
priv
->
status
)
<<
STATUS_IN_SUSPEND
;
goto
exit
;
...
...
@@ -6267,6 +6276,8 @@ static void __iwl3945_down(struct iwl3945_priv *priv)
STATUS_RF_KILL_HW
|
test_bit
(
STATUS_RF_KILL_SW
,
&
priv
->
status
)
<<
STATUS_RF_KILL_SW
|
test_bit
(
STATUS_GEO_CONFIGURED
,
&
priv
->
status
)
<<
STATUS_GEO_CONFIGURED
|
test_bit
(
STATUS_IN_SUSPEND
,
&
priv
->
status
)
<<
STATUS_IN_SUSPEND
|
test_bit
(
STATUS_FW_ERROR
,
&
priv
->
status
)
<<
...
...
drivers/net/wireless/iwlwifi/iwl4965-base.c
View file @
42fe95ca
...
...
@@ -692,6 +692,11 @@ static int iwl4965_enqueue_hcmd(struct iwl4965_priv *priv, struct iwl4965_host_c
BUG_ON
((
fix_size
>
TFD_MAX_PAYLOAD_SIZE
)
&&
!
(
cmd
->
meta
.
flags
&
CMD_SIZE_HUGE
));
if
(
iwl4965_is_rfkill
(
priv
))
{
IWL_DEBUG_INFO
(
"Not sending command - RF KILL"
);
return
-
EIO
;
}
if
(
iwl4965_queue_space
(
q
)
<
((
cmd
->
meta
.
flags
&
CMD_ASYNC
)
?
2
:
1
))
{
IWL_ERROR
(
"No space for Tx
\n
"
);
return
-
ENOSPC
;
...
...
@@ -1654,7 +1659,7 @@ static inline void iwl4965_eeprom_release_semaphore(struct iwl4965_priv *priv)
*/
int
iwl4965_eeprom_init
(
struct
iwl4965_priv
*
priv
)
{
__le16
*
e
=
(
__le
16
*
)
&
priv
->
eeprom
;
u16
*
e
=
(
u
16
*
)
&
priv
->
eeprom
;
u32
gp
=
iwl4965_read32
(
priv
,
CSR_EEPROM_GP
);
u32
r
;
int
sz
=
sizeof
(
priv
->
eeprom
);
...
...
@@ -1698,7 +1703,7 @@ int iwl4965_eeprom_init(struct iwl4965_priv *priv)
rc
=
-
ETIMEDOUT
;
goto
done
;
}
e
[
addr
/
2
]
=
cpu_to_le16
(
r
>>
16
);
e
[
addr
/
2
]
=
le16_to_cpu
((
__force
__le16
)(
r
>>
16
)
);
}
rc
=
0
;
...
...
@@ -2935,7 +2940,7 @@ static int iwl4965_tx_skb(struct iwl4965_priv *priv,
/* drop all data frame if we are not associated */
if
(((
fc
&
IEEE80211_FCTL_FTYPE
)
==
IEEE80211_FTYPE_DATA
)
&&
(
!
iwl4965_is_associated
(
priv
)
||
!
priv
->
assoc_id
||
((
priv
->
iw_mode
==
IEEE80211_IF_TYPE_STA
)
&&
!
priv
->
assoc_id
)
||
!
priv
->
assoc_station_added
))
{
IWL_DEBUG_DROP
(
"Dropping - !iwl4965_is_associated
\n
"
);
goto
drop_unlock
;
...
...
@@ -4664,7 +4669,7 @@ static void iwl4965_rx_handle(struct iwl4965_priv *priv)
int
reclaim
;
unsigned
long
flags
;
u8
fill_rx
=
0
;
u32
count
=
0
;
u32
count
=
8
;
/* uCode's read index (stored in shared DRAM) indicates the last Rx
* buffer that the driver may process (last buffer filled by ucode). */
...
...
@@ -6680,6 +6685,8 @@ static void __iwl4965_down(struct iwl4965_priv *priv)
STATUS_RF_KILL_HW
|
test_bit
(
STATUS_RF_KILL_SW
,
&
priv
->
status
)
<<
STATUS_RF_KILL_SW
|
test_bit
(
STATUS_GEO_CONFIGURED
,
&
priv
->
status
)
<<
STATUS_GEO_CONFIGURED
|
test_bit
(
STATUS_IN_SUSPEND
,
&
priv
->
status
)
<<
STATUS_IN_SUSPEND
;
goto
exit
;
...
...
@@ -6691,6 +6698,8 @@ static void __iwl4965_down(struct iwl4965_priv *priv)
STATUS_RF_KILL_HW
|
test_bit
(
STATUS_RF_KILL_SW
,
&
priv
->
status
)
<<
STATUS_RF_KILL_SW
|
test_bit
(
STATUS_GEO_CONFIGURED
,
&
priv
->
status
)
<<
STATUS_GEO_CONFIGURED
|
test_bit
(
STATUS_IN_SUSPEND
,
&
priv
->
status
)
<<
STATUS_IN_SUSPEND
|
test_bit
(
STATUS_FW_ERROR
,
&
priv
->
status
)
<<
...
...
drivers/net/wireless/rndis_wlan.c
View file @
42fe95ca
...
...
@@ -2300,7 +2300,7 @@ static void rndis_update_wireless_stats(struct work_struct *work)
struct
usbnet
*
usbdev
=
priv
->
usbdev
;
struct
iw_statistics
iwstats
;
__le32
rssi
,
tmp
;
int
len
,
ret
,
bitrate
,
j
;
int
len
,
ret
,
j
;
unsigned
long
flags
;
int
update_jiffies
=
STATS_UPDATE_JIFFIES
;
void
*
buf
;
...
...
@@ -2352,14 +2352,10 @@ static void rndis_update_wireless_stats(struct work_struct *work)
if
(
ret
==
0
)
iwstats
.
discard
.
misc
+=
le32_to_cpu
(
tmp
);
/* Workaround transfer stalls on poor quality links. */
len
=
sizeof
(
tmp
);
ret
=
rndis_query_oid
(
usbdev
,
OID_GEN_LINK_SPEED
,
&
tmp
,
&
len
);
if
(
ret
==
0
)
{
bitrate
=
le32_to_cpu
(
tmp
)
*
100
;
if
(
bitrate
>
11000000
)
goto
end
;
/* Workaround transfer stalls on poor quality links.
* TODO: find right way to fix these stalls (as stalls do not happen
* with ndiswrapper/windows driver). */
if
(
iwstats
.
qual
.
qual
<=
25
)
{
/* Decrease stats worker interval to catch stalls.
* faster. Faster than 400-500ms causes packet loss,
* Slower doesn't catch stalls fast enough.
...
...
drivers/net/wireless/rt2x00/rt2500usb.c
View file @
42fe95ca
...
...
@@ -1839,11 +1839,11 @@ static struct usb_device_id rt2500usb_device_table[] = {
/* Hercules */
{
USB_DEVICE
(
0x06f8
,
0xe000
),
USB_DEVICE_DATA
(
&
rt2500usb_ops
)
},
/* Melco */
{
USB_DEVICE
(
0x0411
,
0x005e
),
USB_DEVICE_DATA
(
&
rt2500usb_ops
)
},
{
USB_DEVICE
(
0x0411
,
0x0066
),
USB_DEVICE_DATA
(
&
rt2500usb_ops
)
},
{
USB_DEVICE
(
0x0411
,
0x0067
),
USB_DEVICE_DATA
(
&
rt2500usb_ops
)
},
{
USB_DEVICE
(
0x0411
,
0x008b
),
USB_DEVICE_DATA
(
&
rt2500usb_ops
)
},
{
USB_DEVICE
(
0x0411
,
0x0097
),
USB_DEVICE_DATA
(
&
rt2500usb_ops
)
},
/* MSI */
{
USB_DEVICE
(
0x0db0
,
0x6861
),
USB_DEVICE_DATA
(
&
rt2500usb_ops
)
},
{
USB_DEVICE
(
0x0db0
,
0x6865
),
USB_DEVICE_DATA
(
&
rt2500usb_ops
)
},
...
...
drivers/net/wireless/wavelan.h
View file @
42fe95ca
...
...
@@ -85,7 +85,7 @@ union hacs_u
#define HASR_MMC_INTR 0x0002
/* Interrupt request from MMC */
#define HASR_MMC_BUSY 0x0004
/* MMC busy indication */
#define HASR_PSA_BUSY 0x0008
/* LAN parameter storage area busy */
};
}
__attribute__
((
packed
))
;
typedef
struct
ha_t
ha_t
;
struct
ha_t
...
...
@@ -292,7 +292,7 @@ struct mmw_t
#define MMW_EXT_ANT_INTERNAL 0x00
/* Internal antenna */
#define MMW_EXT_ANT_EXTERNAL 0x03
/* External antenna */
#define MMW_EXT_ANT_IQ_TEST 0x1C
/* IQ test pattern (set to 0) */
};
}
__attribute__
((
packed
))
;
#define MMW_SIZE 37
...
...
@@ -347,7 +347,7 @@ struct mmr_t
unsigned
char
mmr_unused4
[
1
];
/* unused */
unsigned
char
mmr_fee_data_l
;
/* Read data from EEPROM (low) */
unsigned
char
mmr_fee_data_h
;
/* Read data from EEPROM (high) */
};
}
__attribute__
((
packed
))
;
#define MMR_SIZE 36
...
...
net/mac80211/ieee80211.c
View file @
42fe95ca
...
...
@@ -165,6 +165,7 @@ static int ieee80211_open(struct net_device *dev)
struct
ieee80211_local
*
local
=
wdev_priv
(
dev
->
ieee80211_ptr
);
struct
ieee80211_if_init_conf
conf
;
int
res
;
bool
need_hw_reconfig
=
0
;
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
...
...
@@ -218,7 +219,7 @@ static int ieee80211_open(struct net_device *dev)
res
=
local
->
ops
->
start
(
local_to_hw
(
local
));
if
(
res
)
return
res
;
ieee80211_hw_config
(
local
)
;
need_hw_reconfig
=
1
;
ieee80211_led_radio
(
local
,
local
->
hw
.
conf
.
radio_enabled
);
}
...
...
@@ -282,6 +283,8 @@ static int ieee80211_open(struct net_device *dev)
atomic_inc
(
&
local
->
iff_promiscs
);
local
->
open_count
++
;
if
(
need_hw_reconfig
)
ieee80211_hw_config
(
local
);
netif_start_queue
(
dev
);
...
...
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