Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
788df732
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
788df732
编写于
10月 01, 2008
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
上级
6e50e8a2
0d5f0316
变更
26
展开全部
显示空白变更内容
内联
并排
Showing
26 changed file
with
782 addition
and
409 deletion
+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
未找到文件。
drivers/net/wireless/ath5k/ath5k.h
浏览文件 @
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
浏览文件 @
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
/* 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
);
/* 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_phy_spending
=
AR5K_PHY_SPENDING_RF5111
;
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
;
break
;
case
AR5K_SREV_RAD_2413
:
ah
->
ah_radio
=
AR5K_RF2413
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF2413
;
break
;
case
AR5K_SREV_RAD_5413
:
ah
->
ah_radio
=
AR5K_RF5413
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF5413
;
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_single_chip
=
false
;
ah
->
ah_radio
=
AR5K_RF5413
;
ah
->
ah_single_chip
=
true
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF5413
;
}
/* Single chip radio */
if
(
ah
->
ah_radio_2ghz_revision
==
ah
->
ah_radio_5ghz_revision
)
ah
->
ah_radio_2ghz_revision
=
0
;
/* Identify the radio chip*/
break
;
default:
/* Identify radio based on mac/phy srev */
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_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
(
ah
->
ah_radio_5ghz_revision
<
AR5K_SREV_RAD_5112
)
{
ah
->
ah_radio
=
AR5K_RF5111
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF5111
;
}
else
if
(
ah
->
ah_radio_5ghz_revision
<
AR5K_SREV_RAD_SC0
)
{
}
else
if
(
srev
==
AR5K_SREV_AR5213A
&&
ah
->
ah_phy_revision
==
AR5K_SREV_PHY_2112B
)
{
ah
->
ah_radio
=
AR5K_RF5112
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF5112
;
}
else
if
(
ah
->
ah_radio_5ghz_revision
<
AR5K_SREV_RAD_SC1
)
{
ah
->
ah_radio
=
AR5K_RF2413
;
ah
->
ah_phy_spending
=
AR5K_PHY_SPENDING_RF2413
;
}
else
if
(
ah
->
ah_radio_5ghz_revision
<
AR5K_SREV_RAD_SC2
)
{
ah
->
ah_radio
=
AR5K_RF5413
;
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
)
{
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
;
/* AR2424 */
}
else
{
ah
->
ah_radio
=
AR5K_RF2413
;
/* For testing */
}
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
788df732
此差异已折叠。
点击以展开。
drivers/net/wireless/ath5k/reset.c
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
788df732
drivers/net/wireless/iwlwifi/iwl-fh.h
浏览文件 @
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,6 +260,7 @@
#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_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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录