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
788df732
Commit
788df732
authored
Oct 01, 2008
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-next-2.6
parents
6e50e8a2
0d5f0316
Changes
26
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
782 additions
and
409 deletions
+782
-409
drivers/net/wireless/ath5k/ath5k.h
drivers/net/wireless/ath5k/ath5k.h
+36
-23
drivers/net/wireless/ath5k/attach.c
drivers/net/wireless/ath5k/attach.c
+114
-70
drivers/net/wireless/ath5k/base.c
drivers/net/wireless/ath5k/base.c
+36
-25
drivers/net/wireless/ath5k/dma.c
drivers/net/wireless/ath5k/dma.c
+44
-5
drivers/net/wireless/ath5k/pcu.c
drivers/net/wireless/ath5k/pcu.c
+13
-1
drivers/net/wireless/ath5k/qcu.c
drivers/net/wireless/ath5k/qcu.c
+4
-4
drivers/net/wireless/ath5k/reg.h
drivers/net/wireless/ath5k/reg.h
+405
-172
drivers/net/wireless/ath5k/reset.c
drivers/net/wireless/ath5k/reset.c
+4
-4
drivers/net/wireless/b43/main.c
drivers/net/wireless/b43/main.c
+4
-2
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl-agn.c
+11
-4
drivers/net/wireless/iwlwifi/iwl-csr.h
drivers/net/wireless/iwlwifi/iwl-csr.h
+1
-1
drivers/net/wireless/iwlwifi/iwl-fh.h
drivers/net/wireless/iwlwifi/iwl-fh.h
+5
-4
drivers/net/wireless/iwlwifi/iwl-rx.c
drivers/net/wireless/iwlwifi/iwl-rx.c
+19
-11
drivers/net/wireless/libertas/cmd.c
drivers/net/wireless/libertas/cmd.c
+1
-1
drivers/net/wireless/libertas/cmd.h
drivers/net/wireless/libertas/cmd.h
+6
-0
drivers/net/wireless/libertas/defs.h
drivers/net/wireless/libertas/defs.h
+0
-1
drivers/net/wireless/libertas/wext.c
drivers/net/wireless/libertas/wext.c
+12
-0
drivers/net/wireless/p54/p54common.c
drivers/net/wireless/p54/p54common.c
+18
-15
drivers/net/wireless/p54/p54common.h
drivers/net/wireless/p54/p54common.h
+2
-1
drivers/net/wireless/p54/p54usb.c
drivers/net/wireless/p54/p54usb.c
+4
-4
drivers/net/wireless/rt2x00/Kconfig
drivers/net/wireless/rt2x00/Kconfig
+34
-35
include/net/ieee80211.h
include/net/ieee80211.h
+0
-4
net/mac80211/iface.c
net/mac80211/iface.c
+4
-5
net/mac80211/rx.c
net/mac80211/rx.c
+1
-1
net/mac80211/sta_info.h
net/mac80211/sta_info.h
+0
-12
net/mac80211/wme.c
net/mac80211/wme.c
+4
-4
No files found.
drivers/net/wireless/ath5k/ath5k.h
View file @
788df732
...
...
@@ -281,7 +281,9 @@ enum ath5k_radio {
AR5K_RF5112
=
2
,
AR5K_RF2413
=
3
,
AR5K_RF5413
=
4
,
AR5K_RF2425
=
5
,
AR5K_RF2316
=
5
,
AR5K_RF2317
=
6
,
AR5K_RF2425
=
7
,
};
/*
...
...
@@ -289,7 +291,7 @@ enum ath5k_radio {
*/
enum
ath5k_srev_type
{
AR5K_VERSION_
VER
,
AR5K_VERSION_
MAC
,
AR5K_VERSION_RAD
,
};
...
...
@@ -301,23 +303,24 @@ struct ath5k_srev_name {
#define AR5K_SREV_UNKNOWN 0xffff
#define AR5K_SREV_VER_AR5210 0x00
#define AR5K_SREV_VER_AR5311 0x10
#define AR5K_SREV_VER_AR5311A 0x20
#define AR5K_SREV_VER_AR5311B 0x30
#define AR5K_SREV_VER_AR5211 0x40
#define AR5K_SREV_VER_AR5212 0x50
#define AR5K_SREV_VER_AR5213 0x55
#define AR5K_SREV_VER_AR5213A 0x59
#define AR5K_SREV_VER_AR2413 0x78
#define AR5K_SREV_VER_AR2414 0x79
#define AR5K_SREV_VER_AR2424 0xa0
/* PCI-E */
#define AR5K_SREV_VER_AR5424 0xa3
/* PCI-E */
#define AR5K_SREV_VER_AR5413 0xa4
#define AR5K_SREV_VER_AR5414 0xa5
#define AR5K_SREV_VER_AR5416 0xc0
/* PCI-E */
#define AR5K_SREV_VER_AR5418 0xca
/* PCI-E */
#define AR5K_SREV_VER_AR2425 0xe2
/* PCI-E */
#define AR5K_SREV_AR5210 0x00
/* Crete */
#define AR5K_SREV_AR5311 0x10
/* Maui 1 */
#define AR5K_SREV_AR5311A 0x20
/* Maui 2 */
#define AR5K_SREV_AR5311B 0x30
/* Spirit */
#define AR5K_SREV_AR5211 0x40
/* Oahu */
#define AR5K_SREV_AR5212 0x50
/* Venice */
#define AR5K_SREV_AR5213 0x55
/* ??? */
#define AR5K_SREV_AR5213A 0x59
/* Hainan */
#define AR5K_SREV_AR2413 0x78
/* Griffin lite */
#define AR5K_SREV_AR2414 0x70
/* Griffin */
#define AR5K_SREV_AR5424 0x90
/* Condor */
#define AR5K_SREV_AR5413 0xa4
/* Eagle lite */
#define AR5K_SREV_AR5414 0xa0
/* Eagle */
#define AR5K_SREV_AR2415 0xb0
/* Cobra */
#define AR5K_SREV_AR5416 0xc0
/* PCI-E */
#define AR5K_SREV_AR5418 0xca
/* PCI-E */
#define AR5K_SREV_AR2425 0xe0
/* Swan */
#define AR5K_SREV_AR2417 0xf0
/* Nala */
#define AR5K_SREV_RAD_5110 0x00
#define AR5K_SREV_RAD_5111 0x10
...
...
@@ -329,10 +332,20 @@ struct ath5k_srev_name {
#define AR5K_SREV_RAD_2112 0x40
#define AR5K_SREV_RAD_2112A 0x45
#define AR5K_SREV_RAD_2112B 0x46
#define AR5K_SREV_RAD_SC0 0x50
/* Found on 2413/2414 */
#define AR5K_SREV_RAD_SC1 0x60
/* Found on 5413/5414 */
#define AR5K_SREV_RAD_SC2 0xa0
/* Found on 2424-5/5424 */
#define AR5K_SREV_RAD_5133 0xc0
/* MIMO found on 5418 */
#define AR5K_SREV_RAD_2413 0x50
#define AR5K_SREV_RAD_5413 0x60
#define AR5K_SREV_RAD_2316 0x70
#define AR5K_SREV_RAD_2317 0x80
#define AR5K_SREV_RAD_5424 0xa0
/* Mostly same as 5413 */
#define AR5K_SREV_RAD_2425 0xa2
#define AR5K_SREV_RAD_5133 0xc0
#define AR5K_SREV_PHY_5211 0x30
#define AR5K_SREV_PHY_5212 0x41
#define AR5K_SREV_PHY_2112B 0x43
#define AR5K_SREV_PHY_2413 0x45
#define AR5K_SREV_PHY_5413 0x61
#define AR5K_SREV_PHY_2425 0x70
/* IEEE defs */
#define IEEE80211_MAX_LEN 2500
...
...
drivers/net/wireless/ath5k/attach.c
View file @
788df732
...
...
@@ -137,7 +137,7 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version)
ah
->
ah_ant_diversity
=
AR5K_TUNE_ANT_DIVERSITY
;
/*
* Set the mac
revi
sion based on the pci id
* Set the mac
ver
sion based on the pci id
*/
ah
->
ah_version
=
mac_version
;
...
...
@@ -160,87 +160,132 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version)
0xffffffff
;
ah
->
ah_radio_5ghz_revision
=
ath5k_hw_radio_revision
(
ah
,
CHANNEL_5GHZ
);
ah
->
ah_phy
=
AR5K_PHY
(
0
);
if
(
ah
->
ah_version
==
AR5K_AR5210
)
ah
->
ah_radio_2ghz_revision
=
0
;
else
ah
->
ah_radio_2ghz_revision
=
ath5k_hw_radio_revision
(
ah
,
CHANNEL_2GHZ
);
/* Return on unsuported chips (unsupported eeprom etc) */
if
((
srev
>=
AR5K_SREV_VER_AR5416
)
&&
(
srev
<
AR5K_SREV_VER_AR2425
))
{
ATH5K_ERR
(
sc
,
"Device not yet supported.
\n
"
);
ret
=
-
ENODEV
;
goto
err_free
;
}
else
if
(
srev
==
AR5K_SREV_VER_AR2425
)
{
ATH5K_WARN
(
sc
,
"Support for RF2425 is under development.
\n
"
);
}
/* Identify single chip solutions */
if
(((
srev
<=
AR5K_SREV_VER_AR5414
)
&&
(
srev
>=
AR5K_SREV_VER_AR2413
))
||
(
srev
==
AR5K_SREV_VER_AR2425
))
{
ah
->
ah_single_chip
=
true
;
}
else
{
ah
->
ah_single_chip
=
false
;
}
/* Single chip radio */
if
(
ah
->
ah_radio_2ghz_revision
==
ah
->
ah_radio_5ghz_revision
)
ah
->
ah_radio_2ghz_revision
=
0
;
/* Identify the radio chip*/
if
(
ah
->
ah_version
==
AR5K_AR5210
)
{
ah
->
ah_radio
=
AR5K_RF5110
;
/*
* Register returns 0x0/0x04 for radio revision
* so ath5k_hw_radio_revision doesn't parse the value
* correctly. For now we are based on mac's srev to
* identify RF2425 radio.
*/
}
else
if
(
srev
==
AR5K_SREV_VER_AR2425
)
{
ah
->
ah_radio
=
AR5K_RF2425
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF2425
;
}
else
if
(
ah
->
ah_radio_5ghz_revision
<
AR5K_SREV_RAD_5112
)
{
/* Try to identify radio chip based on it's srev */
switch
(
ah
->
ah_radio_5ghz_revision
&
0xf0
)
{
case
AR5K_SREV_RAD_5111
:
ah
->
ah_radio
=
AR5K_RF5111
;
ah
->
ah_single_chip
=
false
;
ah
->
ah_radio_2ghz_revision
=
ath5k_hw_radio_revision
(
ah
,
CHANNEL_2GHZ
);
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF5111
;
}
else
if
(
ah
->
ah_radio_5ghz_revision
<
AR5K_SREV_RAD_SC0
)
{
break
;
case
AR5K_SREV_RAD_5112
:
case
AR5K_SREV_RAD_2112
:
ah
->
ah_radio
=
AR5K_RF5112
;
ah
->
ah_single_chip
=
false
;
ah
->
ah_radio_2ghz_revision
=
ath5k_hw_radio_revision
(
ah
,
CHANNEL_2GHZ
);
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF5112
;
}
else
if
(
ah
->
ah_radio_5ghz_revision
<
AR5K_SREV_RAD_SC1
)
{
break
;
case
AR5K_SREV_RAD_2413
:
ah
->
ah_radio
=
AR5K_RF2413
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF2413
;
}
else
if
(
ah
->
ah_radio_5ghz_revision
<
AR5K_SREV_RAD_SC2
)
{
break
;
case
AR5K_SREV_RAD_5413
:
ah
->
ah_radio
=
AR5K_RF5413
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF5413
;
}
else
if
(
ah
->
ah_radio_5ghz_revision
<
AR5K_SREV_RAD_5133
)
{
/* AR5424 */
if
(
srev
>=
AR5K_SREV_VER_AR5424
)
{
break
;
case
AR5K_SREV_RAD_2316
:
ah
->
ah_radio
=
AR5K_RF2316
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF2316
;
break
;
case
AR5K_SREV_RAD_2317
:
ah
->
ah_radio
=
AR5K_RF2317
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF2317
;
break
;
case
AR5K_SREV_RAD_5424
:
if
(
ah
->
ah_mac_version
==
AR5K_SREV_AR2425
||
ah
->
ah_mac_version
==
AR5K_SREV_AR2417
){
ah
->
ah_radio
=
AR5K_RF2425
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF2425
;
}
else
{
ah
->
ah_radio
=
AR5K_RF5413
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF5413
;
/* AR2424 */
}
else
{
ah
->
ah_radio
=
AR5K_RF2413
;
/* For testing */
}
break
;
default:
/* Identify radio based on mac/phy srev */
if
(
ah
->
ah_version
==
AR5K_AR5210
)
{
ah
->
ah_radio
=
AR5K_RF5110
;
ah
->
ah_single_chip
=
false
;
}
else
if
(
ah
->
ah_version
==
AR5K_AR5211
)
{
ah
->
ah_radio
=
AR5K_RF5111
;
ah
->
ah_single_chip
=
false
;
ah
->
ah_radio_2ghz_revision
=
ath5k_hw_radio_revision
(
ah
,
CHANNEL_2GHZ
);
}
else
if
(
ah
->
ah_mac_version
==
(
AR5K_SREV_AR2425
>>
4
)
||
ah
->
ah_mac_version
==
(
AR5K_SREV_AR2417
>>
4
)
||
ah
->
ah_phy_revision
==
AR5K_SREV_PHY_2425
)
{
ah
->
ah_radio
=
AR5K_RF2425
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_radio_5ghz_revision
=
AR5K_SREV_RAD_2425
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF2425
;
}
else
if
(
srev
==
AR5K_SREV_AR5213A
&&
ah
->
ah_phy_revision
==
AR5K_SREV_PHY_2112B
)
{
ah
->
ah_radio
=
AR5K_RF5112
;
ah
->
ah_single_chip
=
false
;
ah
->
ah_radio_5ghz_revision
=
AR5K_SREV_RAD_2112B
;
}
else
if
(
ah
->
ah_mac_version
==
(
AR5K_SREV_AR2415
>>
4
))
{
ah
->
ah_radio
=
AR5K_RF2316
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_radio_5ghz_revision
=
AR5K_SREV_RAD_2316
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF2316
;
}
else
if
(
ah
->
ah_mac_version
==
(
AR5K_SREV_AR5414
>>
4
)
||
ah
->
ah_phy_revision
==
AR5K_SREV_PHY_5413
)
{
ah
->
ah_radio
=
AR5K_RF5413
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_radio_5ghz_revision
=
AR5K_SREV_RAD_5413
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF5413
;
}
else
if
(
ah
->
ah_mac_version
==
(
AR5K_SREV_AR2414
>>
4
)
||
ah
->
ah_phy_revision
==
AR5K_SREV_PHY_2413
)
{
ah
->
ah_radio
=
AR5K_RF2413
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_radio_5ghz_revision
=
AR5K_SREV_RAD_2413
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF2413
;
}
else
{
ATH5K_ERR
(
sc
,
"Couldn't identify radio revision.
\n
"
);
ret
=
-
ENODEV
;
goto
err_free
;
}
}
ah
->
ah_phy
=
AR5K_PHY
(
0
);
/* Return on unsuported chips (unsupported eeprom etc) */
if
((
srev
>=
AR5K_SREV_AR5416
)
&&
(
srev
<
AR5K_SREV_AR2425
))
{
ATH5K_ERR
(
sc
,
"Device not yet supported.
\n
"
);
ret
=
-
ENODEV
;
goto
err_free
;
}
/*
* Write PCI-E power save settings
*/
if
((
ah
->
ah_version
==
AR5K_AR5212
)
&&
(
pdev
->
is_pcie
))
{
ath5k_hw_reg_write
(
ah
,
0x9248fc00
,
0x4080
);
ath5k_hw_reg_write
(
ah
,
0x24924924
,
0x4080
);
ath5k_hw_reg_write
(
ah
,
0x28000039
,
0x4080
);
ath5k_hw_reg_write
(
ah
,
0x53160824
,
0x4080
);
ath5k_hw_reg_write
(
ah
,
0xe5980579
,
0x4080
);
ath5k_hw_reg_write
(
ah
,
0x001defff
,
0x4080
);
ath5k_hw_reg_write
(
ah
,
0x1aaabe40
,
0x4080
);
ath5k_hw_reg_write
(
ah
,
0xbe105554
,
0x4080
);
ath5k_hw_reg_write
(
ah
,
0x000e3007
,
0x4080
);
ath5k_hw_reg_write
(
ah
,
0x00000000
,
0x4084
);
ath5k_hw_reg_write
(
ah
,
0x9248fc00
,
AR5K_PCIE_SERDES
);
ath5k_hw_reg_write
(
ah
,
0x24924924
,
AR5K_PCIE_SERDES
);
/* Shut off RX when elecidle is asserted */
ath5k_hw_reg_write
(
ah
,
0x28000039
,
AR5K_PCIE_SERDES
);
ath5k_hw_reg_write
(
ah
,
0x53160824
,
AR5K_PCIE_SERDES
);
/* TODO: EEPROM work */
ath5k_hw_reg_write
(
ah
,
0xe5980579
,
AR5K_PCIE_SERDES
);
/* Shut off PLL and CLKREQ active in L1 */
ath5k_hw_reg_write
(
ah
,
0x001defff
,
AR5K_PCIE_SERDES
);
/* Preserce other settings */
ath5k_hw_reg_write
(
ah
,
0x1aaabe40
,
AR5K_PCIE_SERDES
);
ath5k_hw_reg_write
(
ah
,
0xbe105554
,
AR5K_PCIE_SERDES
);
ath5k_hw_reg_write
(
ah
,
0x000e3007
,
AR5K_PCIE_SERDES
);
/* Reset SERDES to load new settings */
ath5k_hw_reg_write
(
ah
,
0x00000000
,
AR5K_PCIE_SERDES_RESET
);
mdelay
(
1
);
}
/*
...
...
@@ -250,14 +295,13 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version)
if
(
ret
)
goto
err_free
;
/* Write AR5K_PCICFG_UNK on 2112B and later chips */
if
(
ah
->
ah_radio_5ghz_revision
>
AR5K_SREV_RAD_2112B
||
srev
>
AR5K_SREV_VER_AR2413
)
{
ath5k_hw_reg_write
(
ah
,
AR5K_PCICFG_UNK
,
AR5K_PCICFG
);
}
/* Enable pci core retry fix on Hainan (5213A) and later chips */
if
(
srev
>=
AR5K_SREV_AR5213A
)
ath5k_hw_reg_write
(
ah
,
AR5K_PCICFG_RETRY_FIX
,
AR5K_PCICFG
);
/*
* Get card capabilities, values, ...
* Get card capabilities, calibration values etc
* TODO: EEPROM work
*/
ret
=
ath5k_eeprom_init
(
ah
);
if
(
ret
)
{
...
...
@@ -273,7 +317,7 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version)
goto
err_free
;
}
/*
G
et MAC address */
/*
S
et MAC address */
ret
=
ath5k_eeprom_read_mac
(
ah
,
mac
);
if
(
ret
)
{
ATH5K_ERR
(
sc
,
"unable to read address from EEPROM: 0x%04x
\n
"
,
...
...
drivers/net/wireless/ath5k/base.c
View file @
788df732
...
...
@@ -72,7 +72,7 @@ MODULE_AUTHOR("Nick Kossifidis");
MODULE_DESCRIPTION
(
"Support for 5xxx series of Atheros 802.11 wireless LAN cards."
);
MODULE_SUPPORTED_DEVICE
(
"Atheros 5xxx WLAN cards"
);
MODULE_LICENSE
(
"Dual BSD/GPL"
);
MODULE_VERSION
(
"0.
5
.0 (EXPERIMENTAL)"
);
MODULE_VERSION
(
"0.
6
.0 (EXPERIMENTAL)"
);
/* Known PCI ids */
...
...
@@ -93,41 +93,48 @@ static struct pci_device_id ath5k_pci_id_table[] __devinitdata = {
{
PCI_VDEVICE
(
ATHEROS
,
0x0019
),
.
driver_data
=
AR5K_AR5212
},
/* 5212 combatible */
{
PCI_VDEVICE
(
ATHEROS
,
0x001a
),
.
driver_data
=
AR5K_AR5212
},
/* 2413 Griffin-lite */
{
PCI_VDEVICE
(
ATHEROS
,
0x001b
),
.
driver_data
=
AR5K_AR5212
},
/* 5413 Eagle */
{
PCI_VDEVICE
(
ATHEROS
,
0x001c
),
.
driver_data
=
AR5K_AR5212
},
/* 5424 Condor (PCI-E)*/
{
PCI_VDEVICE
(
ATHEROS
,
0x001c
),
.
driver_data
=
AR5K_AR5212
},
/* PCI-E cards */
{
PCI_VDEVICE
(
ATHEROS
,
0x001d
),
.
driver_data
=
AR5K_AR5212
},
/* 2417 Nala */
{
0
}
};
MODULE_DEVICE_TABLE
(
pci
,
ath5k_pci_id_table
);
/* Known SREVs */
static
struct
ath5k_srev_name
srev_names
[]
=
{
{
"5210"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5210
},
{
"5311"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5311
},
{
"5311A"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5311A
},
{
"5311B"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5311B
},
{
"5211"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5211
},
{
"5212"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5212
},
{
"5213"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5213
},
{
"5213A"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5213A
},
{
"2413"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR2413
},
{
"2414"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR2414
},
{
"2424"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR2424
},
{
"5424"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5424
},
{
"5413"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5413
},
{
"5414"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5414
},
{
"5416"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5416
},
{
"5418"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR5418
},
{
"2425"
,
AR5K_VERSION_VER
,
AR5K_SREV_VER_AR2425
},
{
"xxxxx"
,
AR5K_VERSION_VER
,
AR5K_SREV_UNKNOWN
},
{
"5210"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5210
},
{
"5311"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5311
},
{
"5311A"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5311A
},
{
"5311B"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5311B
},
{
"5211"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5211
},
{
"5212"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5212
},
{
"5213"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5213
},
{
"5213A"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5213A
},
{
"2413"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR2413
},
{
"2414"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR2414
},
{
"5424"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5424
},
{
"5413"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5413
},
{
"5414"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5414
},
{
"2415"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR2415
},
{
"5416"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5416
},
{
"5418"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR5418
},
{
"2425"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR2425
},
{
"2417"
,
AR5K_VERSION_MAC
,
AR5K_SREV_AR2417
},
{
"xxxxx"
,
AR5K_VERSION_MAC
,
AR5K_SREV_UNKNOWN
},
{
"5110"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_5110
},
{
"5111"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_5111
},
{
"5111A"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_5111A
},
{
"2111"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_2111
},
{
"5112"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_5112
},
{
"5112A"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_5112A
},
{
"5112B"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_5112B
},
{
"2112"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_2112
},
{
"2112A"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_2112A
},
{
"SChip"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_SC0
},
{
"SChip"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_SC1
},
{
"SChip"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_SC2
},
{
"2112B"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_2112B
},
{
"2413"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_2413
},
{
"5413"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_5413
},
{
"2316"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_2316
},
{
"2317"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_2317
},
{
"5424"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_5424
},
{
"5133"
,
AR5K_VERSION_RAD
,
AR5K_SREV_RAD_5133
},
{
"xxxxx"
,
AR5K_VERSION_RAD
,
AR5K_SREV_UNKNOWN
},
};
...
...
@@ -390,7 +397,11 @@ ath5k_chip_name(enum ath5k_srev_type type, u_int16_t val)
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
srev_names
);
i
++
)
{
if
(
srev_names
[
i
].
sr_type
!=
type
)
continue
;
if
((
val
&
0xff
)
<
srev_names
[
i
+
1
].
sr_val
)
{
if
((
val
&
0xf0
)
==
srev_names
[
i
].
sr_val
)
name
=
srev_names
[
i
].
sr_name
;
if
((
val
&
0xff
)
==
srev_names
[
i
].
sr_val
)
{
name
=
srev_names
[
i
].
sr_name
;
break
;
}
...
...
@@ -536,7 +547,7 @@ ath5k_pci_probe(struct pci_dev *pdev,
goto
err_ah
;
ATH5K_INFO
(
sc
,
"Atheros AR%s chip found (MAC: 0x%x, PHY: 0x%x)
\n
"
,
ath5k_chip_name
(
AR5K_VERSION_
VER
,
sc
->
ah
->
ah_mac_srev
),
ath5k_chip_name
(
AR5K_VERSION_
MAC
,
sc
->
ah
->
ah_mac_srev
),
sc
->
ah
->
ah_mac_srev
,
sc
->
ah
->
ah_phy_revision
);
...
...
drivers/net/wireless/ath5k/dma.c
View file @
788df732
...
...
@@ -68,7 +68,7 @@ int ath5k_hw_stop_rx_dma(struct ath5k_hw *ah)
/*
* It may take some time to disable the DMA receive unit
*/
for
(
i
=
2
000
;
i
>
0
&&
for
(
i
=
1
000
;
i
>
0
&&
(
ath5k_hw_reg_read
(
ah
,
AR5K_CR
)
&
AR5K_CR_RXE
)
!=
0
;
i
--
)
udelay
(
10
);
...
...
@@ -182,11 +182,10 @@ int ath5k_hw_start_tx_dma(struct ath5k_hw *ah, unsigned int queue)
* have any pending frames. Returns -EBUSY if we still have pending frames,
* -EINVAL if queue number is out of range.
*
* TODO: Test queue drain code
*/
int
ath5k_hw_stop_tx_dma
(
struct
ath5k_hw
*
ah
,
unsigned
int
queue
)
{
unsigned
int
i
=
10
0
;
unsigned
int
i
=
4
0
;
u32
tx_queue
,
pending
;
ATH5K_TRACE
(
ah
->
ah_sc
);
...
...
@@ -233,13 +232,53 @@ int ath5k_hw_stop_tx_dma(struct ath5k_hw *ah, unsigned int queue)
udelay
(
100
);
}
while
(
--
i
&&
pending
);
/* For 2413+ order PCU to drop packets using
* QUIET mechanism */
if
(
ah
->
ah_mac_version
>=
(
AR5K_SREV_AR2414
>>
4
)
&&
pending
){
/* Set periodicity and duration */
ath5k_hw_reg_write
(
ah
,
AR5K_REG_SM
(
100
,
AR5K_QUIET_CTL2_QT_PER
)
|
AR5K_REG_SM
(
10
,
AR5K_QUIET_CTL2_QT_DUR
),
AR5K_QUIET_CTL2
);
/* Enable quiet period for current TSF */
ath5k_hw_reg_write
(
ah
,
AR5K_QUIET_CTL1_QT_EN
|
AR5K_REG_SM
(
ath5k_hw_reg_read
(
ah
,
AR5K_TSF_L32_5211
)
>>
10
,
AR5K_QUIET_CTL1_NEXT_QT_TSF
),
AR5K_QUIET_CTL1
);
/* Force channel idle high */
AR5K_REG_ENABLE_BITS
(
ah
,
AR5K_DIAG_SW_5211
,
AR5K_DIAG_SW_CHANEL_IDLE_HIGH
);
/* Wait a while and disable mechanism */
udelay
(
200
);
AR5K_REG_DISABLE_BITS
(
ah
,
AR5K_QUIET_CTL1
,
AR5K_QUIET_CTL1_QT_EN
);
/* Re-check for pending frames */
i
=
40
;
do
{
pending
=
ath5k_hw_reg_read
(
ah
,
AR5K_QUEUE_STATUS
(
queue
))
&
AR5K_QCU_STS_FRMPENDCNT
;
udelay
(
100
);
}
while
(
--
i
&&
pending
);
AR5K_REG_DISABLE_BITS
(
ah
,
AR5K_DIAG_SW_5211
,
AR5K_DIAG_SW_CHANEL_IDLE_HIGH
);
}
/* Clear register */
ath5k_hw_reg_write
(
ah
,
0
,
AR5K_QCU_TXD
);
if
(
pending
)
return
-
EBUSY
;
}
/* TODO: Check for success else return error */
/* TODO: Check for success
on 5210
else return error */
return
0
;
}
...
...
@@ -415,7 +454,7 @@ int ath5k_hw_update_tx_triglevel(struct ath5k_hw *ah, bool increase)
bool
ath5k_hw_is_intr_pending
(
struct
ath5k_hw
*
ah
)
{
ATH5K_TRACE
(
ah
->
ah_sc
);
return
ath5k_hw_reg_read
(
ah
,
AR5K_INTPEND
);
return
ath5k_hw_reg_read
(
ah
,
AR5K_INTPEND
)
==
1
?
1
:
0
;
}
/**
...
...
drivers/net/wireless/ath5k/pcu.c
View file @
788df732
...
...
@@ -633,8 +633,20 @@ u64 ath5k_hw_get_tsf64(struct ath5k_hw *ah)
*/
void
ath5k_hw_reset_tsf
(
struct
ath5k_hw
*
ah
)
{
u32
val
;
ATH5K_TRACE
(
ah
->
ah_sc
);
AR5K_REG_ENABLE_BITS
(
ah
,
AR5K_BEACON
,
AR5K_BEACON_RESET_TSF
);
val
=
ath5k_hw_reg_read
(
ah
,
AR5K_BEACON
)
|
AR5K_BEACON_RESET_TSF
;
/*
* Each write to the RESET_TSF bit toggles a hardware internal
* signal to reset TSF, but if left high it will cause a TSF reset
* on the next chip reset as well. Thus we always write the value
* twice to clear the signal.
*/
ath5k_hw_reg_write
(
ah
,
val
,
AR5K_BEACON
);
ath5k_hw_reg_write
(
ah
,
val
,
AR5K_BEACON
);
}
/*
...
...
drivers/net/wireless/ath5k/qcu.c
View file @
788df732
...
...
@@ -375,7 +375,7 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue)
case
AR5K_TX_QUEUE_BEACON
:
AR5K_REG_ENABLE_BITS
(
ah
,
AR5K_QUEUE_MISC
(
queue
),
AR5K_QCU_MISC_FRSHED_DBA_GT
|
AR5K_QCU_MISC_CBREXP_BCN
|
AR5K_QCU_MISC_CBREXP_BCN
_DIS
|
AR5K_QCU_MISC_BCN_ENABLE
);
AR5K_REG_ENABLE_BITS
(
ah
,
AR5K_QUEUE_DFS_MISC
(
queue
),
...
...
@@ -395,8 +395,8 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue)
case
AR5K_TX_QUEUE_CAB
:
AR5K_REG_ENABLE_BITS
(
ah
,
AR5K_QUEUE_MISC
(
queue
),
AR5K_QCU_MISC_FRSHED_DBA_GT
|
AR5K_QCU_MISC_CBREXP
|
AR5K_QCU_MISC_CBREXP_BCN
);
AR5K_QCU_MISC_CBREXP
_DIS
|
AR5K_QCU_MISC_CBREXP_BCN
_DIS
);
AR5K_REG_ENABLE_BITS
(
ah
,
AR5K_QUEUE_DFS_MISC
(
queue
),
(
AR5K_DCU_MISC_ARBLOCK_CTL_GLOBAL
<<
...
...
@@ -405,7 +405,7 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue)
case
AR5K_TX_QUEUE_UAPSD
:
AR5K_REG_ENABLE_BITS
(
ah
,
AR5K_QUEUE_MISC
(
queue
),
AR5K_QCU_MISC_CBREXP
);
AR5K_QCU_MISC_CBREXP
_DIS
);
break
;
case
AR5K_TX_QUEUE_DATA
:
...
...
drivers/net/wireless/ath5k/reg.h
View file @
788df732
This diff is collapsed.
Click to expand it.
drivers/net/wireless/ath5k/reset.c
View file @
788df732
...
...
@@ -543,13 +543,13 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
ath5k_hw_reg_write
(
ah
,
0x0002a002
,
0x982c
);
if
(
channel
->
hw_value
==
CHANNEL_G
)
if
(
ah
->
ah_mac_srev
<
AR5K_SREV_
VER_
AR2413
)
if
(
ah
->
ah_mac_srev
<
AR5K_SREV_AR2413
)
ath5k_hw_reg_write
(
ah
,
0x00f80d80
,
0x994c
);
else
if
(
ah
->
ah_mac_srev
<
AR5K_SREV_
VER_AR2
424
)
else
if
(
ah
->
ah_mac_srev
<
AR5K_SREV_
AR5
424
)
ath5k_hw_reg_write
(
ah
,
0x00380140
,
0x994c
);
else
if
(
ah
->
ah_mac_srev
<
AR5K_SREV_
VER_
AR2425
)
else
if
(
ah
->
ah_mac_srev
<
AR5K_SREV_AR2425
)
ath5k_hw_reg_write
(
ah
,
0x00fc0ec0
,
0x994c
);
else
/* 2425 */
...
...
@@ -915,7 +915,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
ath5k_hw_reg_write
(
ah
,
0x000100aa
,
0x8118
);
ath5k_hw_reg_write
(
ah
,
0x00003210
,
0x811c
);
ath5k_hw_reg_write
(
ah
,
0x00000052
,
0x8108
);
if
(
ah
->
ah_mac_srev
>=
AR5K_SREV_
VER_
AR2413
)
if
(
ah
->
ah_mac_srev
>=
AR5K_SREV_AR2413
)
ath5k_hw_reg_write
(
ah
,
0x00000004
,
0x8120
);
}
...
...
drivers/net/wireless/b43/main.c
View file @
788df732
...
...
@@ -815,7 +815,7 @@ void b43_dummy_transmission(struct b43_wldev *dev)
break
;
udelay
(
10
);
}
for
(
i
=
0x00
;
i
<
0x
0A
;
i
++
)
{
for
(
i
=
0x00
;
i
<
0x
19
;
i
++
)
{
value
=
b43_read16
(
dev
,
0x0690
);
if
(
!
(
value
&
0x0100
))
break
;
...
...
@@ -4543,9 +4543,11 @@ static void b43_sprom_fixup(struct ssb_bus *bus)
pdev
=
bus
->
host_pci
;
if
(
IS_PDEV
(
pdev
,
BROADCOM
,
0x4318
,
ASUSTEK
,
0x100F
)
||
IS_PDEV
(
pdev
,
BROADCOM
,
0x4320
,
DELL
,
0x0003
)
||
IS_PDEV
(
pdev
,
BROADCOM
,
0x4320
,
HP
,
0x12f8
)
||
IS_PDEV
(
pdev
,
BROADCOM
,
0x4320
,
LINKSYS
,
0x0015
)
||
IS_PDEV
(
pdev
,
BROADCOM
,
0x4320
,
LINKSYS
,
0x0014
)
||
IS_PDEV
(
pdev
,
BROADCOM
,
0x4320
,
LINKSYS
,
0x0013
))
IS_PDEV
(
pdev
,
BROADCOM
,
0x4320
,
LINKSYS
,
0x0013
)
||
IS_PDEV
(
pdev
,
BROADCOM
,
0x4320
,
MOTOROLA
,
0x7010
))
bus
->
sprom
.
boardflags_lo
&=
~
B43_BFL_BTCOEXIST
;
}
}
...
...
drivers/net/wireless/iwlwifi/iwl-agn.c
View file @
788df732
...
...
@@ -2875,6 +2875,13 @@ static int iwl4965_mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *co
goto
out
;
}
if
(
conf
->
flags
&
IEEE80211_CONF_PS
)
ret
=
iwl_power_set_user_mode
(
priv
,
IWL_POWER_INDEX_3
);
else
ret
=
iwl_power_set_user_mode
(
priv
,
IWL_POWER_MODE_CAM
);
if
(
ret
)
IWL_DEBUG_MAC80211
(
"Error setting power level
\n
"
);
IWL_DEBUG_MAC80211
(
"TX Power old=%d new=%d
\n
"
,
priv
->
tx_power_user_lmt
,
conf
->
power_level
);
...
...
@@ -4236,13 +4243,13 @@ static int iwl4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
pci_set_master
(
pdev
);
err
=
pci_set_dma_mask
(
pdev
,
DMA_
64BIT_MASK
);
err
=
pci_set_dma_mask
(
pdev
,
DMA_
BIT_MASK
(
36
)
);
if
(
!
err
)
err
=
pci_set_consistent_dma_mask
(
pdev
,
DMA_
64BIT_MASK
);
err
=
pci_set_consistent_dma_mask
(
pdev
,
DMA_
BIT_MASK
(
36
)
);
if
(
err
)
{
err
=
pci_set_dma_mask
(
pdev
,
DMA_
32BIT_MASK
);
err
=
pci_set_dma_mask
(
pdev
,
DMA_
BIT_MASK
(
32
)
);
if
(
!
err
)
err
=
pci_set_consistent_dma_mask
(
pdev
,
DMA_
32BIT_MASK
);
err
=
pci_set_consistent_dma_mask
(
pdev
,
DMA_
BIT_MASK
(
32
)
);
/* both attempts failed: */
if
(
err
)
{
printk
(
KERN_WARNING
"%s: No suitable DMA available.
\n
"
,
...
...
drivers/net/wireless/iwlwifi/iwl-csr.h
View file @
788df732
...
...
@@ -64,7 +64,7 @@
#define CSR_BASE (0x000)
#define CSR_HW_IF_CONFIG_REG (CSR_BASE+0x000)
/* hardware interface config */
#define CSR_INT_COALESCING
(CSR_BASE+0x004)
/* accum ints, 32-usec units */
#define CSR_INT_COALESCING (CSR_BASE+0x004)
/* accum ints, 32-usec units */
#define CSR_INT (CSR_BASE+0x008)
/* host interrupt status/ack */
#define CSR_INT_MASK (CSR_BASE+0x00c)
/* host interrupt enable */
#define CSR_FH_INT_STATUS (CSR_BASE+0x010)
/* busmaster int status/ack*/
...
...
drivers/net/wireless/iwlwifi/iwl-fh.h
View file @
788df732
...
...
@@ -247,8 +247,8 @@
#define FH_RCSR_CHNL0_RX_CONFIG_RBDBC_SIZE_MSK (0x00F00000)
/* bits 20-23 */
#define FH_RCSR_CHNL0_RX_CONFIG_DMA_CHNL_EN_MSK (0xC0000000)
/* bits 30-31*/
#define FH_RCSR_RX_CONFIG_RBDCB_SIZE_
BITSHIFT
(20)
#define FH_RCSR_RX_CONFIG_REG_IRQ_RBTH_
BITSHIFT
(4)
#define FH_RCSR_RX_CONFIG_RBDCB_SIZE_
POS
(20)
#define FH_RCSR_RX_CONFIG_REG_IRQ_RBTH_
POS
(4)
#define RX_RB_TIMEOUT (0x10)
#define FH_RCSR_RX_CONFIG_CHNL_EN_PAUSE_VAL (0x00000000)
...
...
@@ -260,8 +260,9 @@
#define FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_12K (0x00020000)
#define FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_16K (0x00030000)
#define FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_NO_INT_VAL (0x00000000)
#define FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_INT_HOST_VAL (0x00001000)
#define FH_RCSR_CHNL0_RX_IGNORE_RXF_EMPTY (0x00000004)
#define FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_NO_INT_VAL (0x00000000)
#define FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_INT_HOST_VAL (0x00001000)
/**
...
...
drivers/net/wireless/iwlwifi/iwl-rx.c
View file @
788df732
...
...
@@ -376,7 +376,9 @@ int iwl_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
{
int
ret
;
unsigned
long
flags
;
unsigned
int
rb_size
;
u32
rb_size
;
const
u32
rfdnlog
=
RX_QUEUE_SIZE_LOG
;
/* 256 RBDs */
const
u32
rb_timeout
=
0
;
/* FIXME: RX_RB_TIMEOUT why this stalls RX */
spin_lock_irqsave
(
&
priv
->
lock
,
flags
);
ret
=
iwl_grab_nic_access
(
priv
);
...
...
@@ -398,26 +400,32 @@ int iwl_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
/* Tell device where to find RBD circular buffer in DRAM */
iwl_write_direct32
(
priv
,
FH_RSCSR_CHNL0_RBDCB_BASE_REG
,
rxq
->
dma_addr
>>
8
);
(
u32
)(
rxq
->
dma_addr
>>
8
)
);
/* Tell device where in DRAM to update its Rx status */
iwl_write_direct32
(
priv
,
FH_RSCSR_CHNL0_STTS_WPTR_REG
,
(
priv
->
shared_phys
+
priv
->
rb_closed_offset
)
>>
4
);
/* Enable Rx DMA, enable host interrupt, Rx buffer size 4k, 256 RBDs */
/* Enable Rx DMA
* FH_RCSR_CHNL0_RX_IGNORE_RXF_EMPTY is set becuase of HW bug in
* the credit mechanism in 5000 HW RX FIFO
* Direct rx interrupts to hosts
* Rx buffer size 4 or 8k
* RB timeout 0x10
* 256 RBDs
*/
iwl_write_direct32
(
priv
,
FH_MEM_RCSR_CHNL0_CONFIG_REG
,
FH_RCSR_RX_CONFIG_CHNL_EN_ENABLE_VAL
|
FH_RCSR_CHNL0_RX_IGNORE_RXF_EMPTY
|
FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_INT_HOST_VAL
|
rb_size
|
/* 0x10 << 4 | */
(
RX_QUEUE_SIZE_LOG
<<
FH_RCSR_RX_CONFIG_RBDCB_SIZE_BITSHIFT
));
/*
* iwl_write32(priv,CSR_INT_COAL_REG,0);
*/
rb_size
|
(
rb_timeout
<<
FH_RCSR_RX_CONFIG_REG_IRQ_RBTH_POS
)
|
(
rfdnlog
<<
FH_RCSR_RX_CONFIG_RBDCB_SIZE_POS
));
iwl_release_nic_access
(
priv
);
iwl_write32
(
priv
,
CSR_INT_COALESCING
,
0x40
);
spin_unlock_irqrestore
(
&
priv
->
lock
,
flags
);
return
0
;
...
...
drivers/net/wireless/libertas/cmd.c
View file @
788df732
...
...
@@ -1949,7 +1949,7 @@ int lbs_set_tpc_cfg(struct lbs_private *priv, int enable, int8_t p0, int8_t p1,
cmd
.
hdr
.
size
=
cpu_to_le16
(
sizeof
(
cmd
));
cmd
.
action
=
cpu_to_le16
(
CMD_ACT_SET
);
cmd
.
enable
=
!!
enable
;
cmd
.
usesnr
=
!!
enable
;
cmd
.
usesnr
=
!!
usesnr
;
cmd
.
P0
=
p0
;
cmd
.
P1
=
p1
;
cmd
.
P2
=
p2
;
...
...
drivers/net/wireless/libertas/cmd.h
View file @
788df732
...
...
@@ -32,6 +32,12 @@ int lbs_set_power_adapt_cfg(struct lbs_private *priv, int enable, int8_t p0,
int
lbs_set_tpc_cfg
(
struct
lbs_private
*
priv
,
int
enable
,
int8_t
p0
,
int8_t
p1
,
int8_t
p2
,
int
usesnr
);
int
lbs_set_power_adapt_cfg
(
struct
lbs_private
*
priv
,
int
enable
,
int8_t
p0
,
int8_t
p1
,
int8_t
p2
);
int
lbs_set_tpc_cfg
(
struct
lbs_private
*
priv
,
int
enable
,
int8_t
p0
,
int8_t
p1
,
int8_t
p2
,
int
usesnr
);
int
lbs_cmd_copyback
(
struct
lbs_private
*
priv
,
unsigned
long
extra
,
struct
cmd_header
*
resp
);
...
...
drivers/net/wireless/libertas/defs.h
View file @
788df732
...
...
@@ -189,7 +189,6 @@ static inline void lbs_deb_hex(unsigned int grp, const char *prompt, u8 *buf, in
#define MRVDRV_CMD_UPLD_RDY 0x0008
#define MRVDRV_CARDEVENT 0x0010
/* Automatic TX control default levels */
#define POW_ADAPT_DEFAULT_P0 13
#define POW_ADAPT_DEFAULT_P1 15
...
...
drivers/net/wireless/libertas/wext.c
View file @
788df732
...
...
@@ -1025,6 +1025,18 @@ static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info,
new_rate
);
goto
out
;
}
if
(
priv
->
fwrelease
<
0x09000000
)
{
ret
=
lbs_set_power_adapt_cfg
(
priv
,
0
,
POW_ADAPT_DEFAULT_P0
,
POW_ADAPT_DEFAULT_P1
,
POW_ADAPT_DEFAULT_P2
);
if
(
ret
)
goto
out
;
}
ret
=
lbs_set_tpc_cfg
(
priv
,
0
,
TPC_DEFAULT_P0
,
TPC_DEFAULT_P1
,
TPC_DEFAULT_P2
,
1
);
if
(
ret
)
goto
out
;
}
/* Try the newer command first (Firmware Spec 5.1 and above) */
...
...
drivers/net/wireless/p54/p54common.c
View file @
788df732
...
...
@@ -149,7 +149,8 @@ int p54_parse_firmware(struct ieee80211_hw *dev, const struct firmware *fw)
u32
code
=
le32_to_cpu
(
bootrec
->
code
);
switch
(
code
)
{
case
BR_CODE_COMPONENT_ID
:
priv
->
fw_interface
=
be32_to_cpup
(
bootrec
->
data
);
priv
->
fw_interface
=
be32_to_cpup
((
__be32
*
)
bootrec
->
data
);
switch
(
priv
->
fw_interface
)
{
case
FW_FMAC
:
printk
(
KERN_INFO
"p54: FreeMAC firmware
\n
"
);
...
...
@@ -181,9 +182,8 @@ int p54_parse_firmware(struct ieee80211_hw *dev, const struct firmware *fw)
priv
->
rx_end
=
le32_to_cpu
(
desc
->
rx_end
)
-
0x3500
;
priv
->
headroom
=
desc
->
headroom
;
priv
->
tailroom
=
desc
->
tailroom
;
if
(
bootrec
->
len
==
11
)
priv
->
rx_mtu
=
(
size_t
)
le16_to_cpu
(
(
__le16
)
bootrec
->
data
[
10
]);
if
(
le32_to_cpu
(
bootrec
->
len
)
==
11
)
priv
->
rx_mtu
=
le16_to_cpu
(
bootrec
->
rx_mtu
);
else
priv
->
rx_mtu
=
(
size_t
)
0x620
-
priv
->
tx_hdr_len
;
...
...
@@ -306,11 +306,11 @@ static int p54_convert_rev1(struct ieee80211_hw *dev,
return
0
;
}
const
char
*
p54_rf_chips
[]
=
{
"NULL"
,
"Indigo?"
,
"Duette"
,
static
const
char
*
p54_rf_chips
[]
=
{
"NULL"
,
"Indigo?"
,
"Duette"
,
"Frisbee"
,
"Xbow"
,
"Longbow"
};
static
int
p54_init_xbow_synth
(
struct
ieee80211_hw
*
dev
);
int
p54_parse_eeprom
(
struct
ieee80211_hw
*
dev
,
void
*
eeprom
,
int
len
)
static
int
p54_parse_eeprom
(
struct
ieee80211_hw
*
dev
,
void
*
eeprom
,
int
len
)
{
struct
p54_common
*
priv
=
dev
->
priv
;
struct
eeprom_pda_wrap
*
wrap
=
NULL
;
...
...
@@ -617,7 +617,7 @@ static void p54_rx_eeprom_readback(struct ieee80211_hw *dev,
if
(
!
priv
->
eeprom
)
return
;
memcpy
(
priv
->
eeprom
,
eeprom
->
data
,
eeprom
->
len
);
memcpy
(
priv
->
eeprom
,
eeprom
->
data
,
le16_to_cpu
(
eeprom
->
len
)
);
complete
(
&
priv
->
eeprom_comp
);
}
...
...
@@ -777,8 +777,9 @@ int p54_read_eeprom(struct ieee80211_hw *dev)
hdr
->
len
=
cpu_to_le16
(
blocksize
+
sizeof
(
*
eeprom_hdr
));
eeprom_hdr
->
offset
=
cpu_to_le16
(
offset
);
eeprom_hdr
->
len
=
cpu_to_le16
(
blocksize
);
p54_assign_address
(
dev
,
NULL
,
hdr
,
hdr
->
len
+
sizeof
(
*
hdr
));
priv
->
tx
(
dev
,
hdr
,
hdr
->
len
+
sizeof
(
*
hdr
),
0
);
p54_assign_address
(
dev
,
NULL
,
hdr
,
le16_to_cpu
(
hdr
->
len
)
+
sizeof
(
*
hdr
));
priv
->
tx
(
dev
,
hdr
,
le16_to_cpu
(
hdr
->
len
)
+
sizeof
(
*
hdr
),
0
);
if
(
!
wait_for_completion_interruptible_timeout
(
&
priv
->
eeprom_comp
,
HZ
))
{
printk
(
KERN_ERR
"%s: device does not respond!
\n
"
,
...
...
@@ -1247,18 +1248,20 @@ static void p54_configure_filter(struct ieee80211_hw *dev,
if
(
changed_flags
&
FIF_BCN_PRBRESP_PROMISC
)
{
if
(
*
total_flags
&
FIF_BCN_PRBRESP_PROMISC
)
p54_set_filter
(
dev
,
priv
->
filter_type
,
NULL
);
p54_set_filter
(
dev
,
le16_to_cpu
(
priv
->
filter_type
),
NULL
);
else
p54_set_filter
(
dev
,
priv
->
filter_type
,
priv
->
bssid
);
p54_set_filter
(
dev
,
le16_to_cpu
(
priv
->
filter_type
),
priv
->
bssid
);
}
if
(
changed_flags
&
FIF_PROMISC_IN_BSS
)
{
if
(
*
total_flags
&
FIF_PROMISC_IN_BSS
)
p54_set_filter
(
dev
,
priv
->
filter_type
|
cpu_to_le16
(
0x8
)
,
NULL
);
p54_set_filter
(
dev
,
le16_to_cpu
(
priv
->
filter_type
)
|
0x8
,
NULL
);
else
p54_set_filter
(
dev
,
priv
->
filter_type
&
~
cpu_to_le16
(
0x8
)
,
priv
->
bssid
);
p54_set_filter
(
dev
,
le16_to_cpu
(
priv
->
filter_type
)
&
~
0x8
,
priv
->
bssid
);
}
}
...
...
drivers/net/wireless/p54/p54common.h
View file @
788df732
...
...
@@ -18,7 +18,8 @@
struct
bootrec
{
__le32
code
;
__le32
len
;
u32
data
[
0
];
u32
data
[
10
];
__le16
rx_mtu
;
}
__attribute__
((
packed
));
struct
bootrec_exp_if
{
...
...
drivers/net/wireless/p54/p54usb.c
View file @
788df732
...
...
@@ -218,17 +218,17 @@ static void p54u_tx_3887(struct ieee80211_hw *dev, struct p54_control_hdr *data,
usb_submit_urb
(
data_urb
,
GFP_ATOMIC
);
}
__le32
p54u_lm87_chksum
(
const
u32
*
data
,
size_t
length
)
static
__le32
p54u_lm87_chksum
(
const
u32
*
data
,
size_t
length
)
{
__le
32
chk
=
0
;
u
32
chk
=
0
;
length
>>=
2
;
while
(
length
--
)
{
chk
^=
cpu_to_le32
(
*
data
++
)
;
chk
^=
*
data
++
;
chk
=
(
chk
>>
5
)
^
(
chk
<<
3
);
}
return
c
hk
;
return
c
pu_to_le32
(
chk
)
;
}
static
void
p54u_tx_lm87
(
struct
ieee80211_hw
*
dev
,
...
...
drivers/net/wireless/rt2x00/Kconfig
View file @
788df732
config RT2X00
tristate
"Ralink driver support"
menu
config RT2X00
bool
"Ralink driver support"
depends on MAC80211 && WLAN_80211 && EXPERIMENTAL
---help---
This will enable the experimental support for the Ralink drivers,
...
...
@@ -17,39 +17,6 @@ config RT2X00
if RT2X00
config RT2X00_LIB
tristate
config RT2X00_LIB_PCI
tristate
select RT2X00_LIB
config RT2X00_LIB_USB
tristate
select RT2X00_LIB
config RT2X00_LIB_FIRMWARE
boolean
depends on RT2X00_LIB
select FW_LOADER
config RT2X00_LIB_CRYPTO
boolean
depends on RT2X00_LIB
config RT2X00_LIB_RFKILL
boolean
depends on RT2X00_LIB
depends on RFKILL
default y
config RT2X00_LIB_LEDS
boolean
depends on RT2X00_LIB
depends on NEW_LEDS
depends on LEDS_CLASS
default y
config RT2400PCI
tristate "Ralink rt2400 (PCI/PCMCIA) support"
depends on PCI
...
...
@@ -109,6 +76,38 @@ config RT73USB
When compiled as a module, this driver will be called "rt73usb.ko".
config RT2X00_LIB_PCI
tristate
select RT2X00_LIB
config RT2X00_LIB_USB
tristate
select RT2X00_LIB
config RT2X00_LIB
tristate
config RT2X00_LIB_FIRMWARE
boolean
select FW_LOADER
config RT2X00_LIB_CRYPTO
boolean
config RT2X00_LIB_RFKILL
boolean
default y if (RT2X00_LIB=y && RFKILL=y) || (RT2X00_LIB=m && RFKILL!=n)
comment "rt2x00 rfkill support disabled due to modularized RFKILL and built-in rt2x00"
depends on RT2X00_LIB=y && RFKILL=m
config RT2X00_LIB_LEDS
boolean
default y if (RT2X00_LIB=y && LEDS_CLASS=y) || (RT2X00_LIB=m && LEDS_CLASS!=n)
comment "rt2x00 leds support disabled due to modularized LEDS_CLASS and built-in rt2x00"
depends on RT2X00_LIB=y && LEDS_CLASS=m
config RT2X00_LIB_DEBUGFS
bool "Ralink debugfs support"
depends on RT2X00_LIB && MAC80211_DEBUGFS
...
...
include/net/ieee80211.h
View file @
788df732
...
...
@@ -190,10 +190,6 @@ const char *escape_essid(const char *essid, u8 essid_len);
#endif
#include <net/iw_handler.h>
/* new driver API */
#ifndef ETH_P_PAE
#define ETH_P_PAE 0x888E
/* Port Access Entity (IEEE 802.1X) */
#endif
/* ETH_P_PAE */
#define ETH_P_PREAUTH 0x88C7
/* IEEE 802.11i pre-authentication */
#ifndef ETH_P_80211_RAW
...
...
net/mac80211/iface.c
View file @
788df732
...
...
@@ -58,8 +58,9 @@ static inline int identical_mac_addr_allowed(int type1, int type2)
static
int
ieee80211_open
(
struct
net_device
*
dev
)
{
struct
ieee80211_sub_if_data
*
sdata
,
*
nsdata
;
struct
ieee80211_local
*
local
=
wdev_priv
(
dev
->
ieee80211_ptr
);
struct
ieee80211_sub_if_data
*
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
struct
ieee80211_sub_if_data
*
nsdata
;
struct
ieee80211_local
*
local
=
sdata
->
local
;
struct
sta_info
*
sta
;
struct
ieee80211_if_init_conf
conf
;
u32
changed
=
0
;
...
...
@@ -67,8 +68,6 @@ static int ieee80211_open(struct net_device *dev)
bool
need_hw_reconfig
=
0
;
u8
null_addr
[
ETH_ALEN
]
=
{
0
};
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
/* fail early if user set an invalid address */
if
(
compare_ether_addr
(
dev
->
dev_addr
,
null_addr
)
&&
!
is_valid_ether_addr
(
dev
->
dev_addr
))
...
...
@@ -512,8 +511,8 @@ static int ieee80211_stop(struct net_device *dev)
static
void
ieee80211_set_multicast_list
(
struct
net_device
*
dev
)
{
struct
ieee80211_local
*
local
=
wdev_priv
(
dev
->
ieee80211_ptr
);
struct
ieee80211_sub_if_data
*
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
struct
ieee80211_local
*
local
=
sdata
->
local
;
int
allmulti
,
promisc
,
sdata_allmulti
,
sdata_promisc
;
allmulti
=
!!
(
dev
->
flags
&
IFF_ALLMULTI
);
...
...
net/mac80211/rx.c
View file @
788df732
...
...
@@ -1379,7 +1379,7 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
return
RX_QUEUED
;
}
static
ieee80211_rx_result
debug_noinline
static
ieee80211_rx_result
ieee80211_rx_h_mesh_fwding
(
struct
ieee80211_rx_data
*
rx
)
{
struct
ieee80211_hdr
*
hdr
;
...
...
net/mac80211/sta_info.h
View file @
788df732
...
...
@@ -189,7 +189,6 @@ struct sta_ampdu_mlme {
* @last_qual: qual of last received frame from this STA
* @last_noise: noise of last received frame from this STA
* @last_seq_ctrl: last received seq/frag number from this STA (per RX queue)
* @wme_rx_queue: TBD
* @tx_filtered_count: TBD
* @tx_retry_failed: TBD
* @tx_retry_count: TBD
...
...
@@ -199,7 +198,6 @@ struct sta_ampdu_mlme {
* @tx_fragments: number of transmitted MPDUs
* @last_txrate_idx: Index of the last used transmit rate
* @tid_seq: TBD
* @wme_tx_queue: TBD
* @ampdu_mlme: TBD
* @timer_to_tid: identity mapping to ID timers
* @tid_to_tx_q: map tid to tx queue
...
...
@@ -258,9 +256,6 @@ struct sta_info {
int
last_qual
;
int
last_noise
;
__le16
last_seq_ctrl
[
NUM_RX_DATA_QUEUES
];
#ifdef CONFIG_MAC80211_DEBUG_COUNTERS
unsigned
int
wme_rx_queue
[
NUM_RX_DATA_QUEUES
];
#endif
/* Updated from TX status path only, no locking requirements */
unsigned
long
tx_filtered_count
;
...
...
@@ -274,9 +269,6 @@ struct sta_info {
unsigned
long
tx_fragments
;
unsigned
int
last_txrate_idx
;
u16
tid_seq
[
IEEE80211_QOS_CTL_TID_MASK
+
1
];
#ifdef CONFIG_MAC80211_DEBUG_COUNTERS
unsigned
int
wme_tx_queue
[
NUM_RX_DATA_QUEUES
];
#endif
/*
* Aggregation information, locked with lock.
...
...
@@ -307,10 +299,6 @@ struct sta_info {
struct
dentry
*
num_ps_buf_frames
;
struct
dentry
*
inactive_ms
;
struct
dentry
*
last_seq_ctrl
;
#ifdef CONFIG_MAC80211_DEBUG_COUNTERS
struct
dentry
*
wme_rx_queue
;
struct
dentry
*
wme_tx_queue
;
#endif
struct
dentry
*
agg_status
;
}
debugfs
;
#endif
...
...
net/mac80211/wme.c
View file @
788df732
...
...
@@ -73,9 +73,8 @@ static int wme_downgrade_ac(struct sk_buff *skb)
/* Indicate which queue to use. */
static
u16
classify80211
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
static
u16
classify80211
(
struct
ieee80211_local
*
local
,
struct
sk_buff
*
skb
)
{
struct
ieee80211_local
*
local
=
wdev_priv
(
dev
->
ieee80211_ptr
);
struct
ieee80211_hdr
*
hdr
=
(
struct
ieee80211_hdr
*
)
skb
->
data
;
if
(
!
ieee80211_is_data
(
hdr
->
frame_control
))
{
...
...
@@ -113,14 +112,15 @@ static u16 classify80211(struct sk_buff *skb, struct net_device *dev)
u16
ieee80211_select_queue
(
struct
net_device
*
dev
,
struct
sk_buff
*
skb
)
{
struct
ieee80211_master_priv
*
mpriv
=
netdev_priv
(
dev
);
struct
ieee80211_local
*
local
=
mpriv
->
local
;
struct
ieee80211_hdr
*
hdr
=
(
struct
ieee80211_hdr
*
)
skb
->
data
;
struct
ieee80211_local
*
local
=
wdev_priv
(
dev
->
ieee80211_ptr
);
struct
ieee80211_tx_info
*
info
=
IEEE80211_SKB_CB
(
skb
);
struct
sta_info
*
sta
;
u16
queue
;
u8
tid
;
queue
=
classify80211
(
skb
,
dev
);
queue
=
classify80211
(
local
,
skb
);
if
(
unlikely
(
queue
>=
local
->
hw
.
queues
))
queue
=
local
->
hw
.
queues
-
1
;
...
...
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