Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
65574866
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
65574866
编写于
6月 14, 2013
作者:
J
John W. Linville
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-john' of
git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next
上级
b70727e8
adaf6918
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
58 addition
and
90 deletion
+58
-90
drivers/net/wireless/iwlwifi/Makefile
drivers/net/wireless/iwlwifi/Makefile
+4
-2
drivers/net/wireless/iwlwifi/dvm/main.c
drivers/net/wireless/iwlwifi/dvm/main.c
+0
-7
drivers/net/wireless/iwlwifi/iwl-config.h
drivers/net/wireless/iwlwifi/iwl-config.h
+4
-0
drivers/net/wireless/iwlwifi/iwl-debug.h
drivers/net/wireless/iwlwifi/iwl-debug.h
+4
-0
drivers/net/wireless/iwlwifi/iwl-modparams.h
drivers/net/wireless/iwlwifi/iwl-modparams.h
+2
-0
drivers/net/wireless/iwlwifi/iwl-phy-db.c
drivers/net/wireless/iwlwifi/iwl-phy-db.c
+3
-33
drivers/net/wireless/iwlwifi/mvm/d3.c
drivers/net/wireless/iwlwifi/mvm/d3.c
+7
-8
drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h
drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h
+5
-4
drivers/net/wireless/iwlwifi/mvm/tx.c
drivers/net/wireless/iwlwifi/mvm/tx.c
+2
-3
drivers/net/wireless/iwlwifi/pcie/drv.c
drivers/net/wireless/iwlwifi/pcie/drv.c
+4
-0
drivers/net/wireless/iwlwifi/pcie/internal.h
drivers/net/wireless/iwlwifi/pcie/internal.h
+2
-0
drivers/net/wireless/iwlwifi/pcie/rx.c
drivers/net/wireless/iwlwifi/pcie/rx.c
+16
-28
drivers/net/wireless/iwlwifi/pcie/tx.c
drivers/net/wireless/iwlwifi/pcie/tx.c
+5
-5
未找到文件。
drivers/net/wireless/iwlwifi/Makefile
浏览文件 @
65574866
...
...
@@ -7,14 +7,16 @@ iwlwifi-objs += iwl-notif-wait.o
iwlwifi-objs
+=
iwl-eeprom-read.o iwl-eeprom-parse.o
iwlwifi-objs
+=
iwl-phy-db.o iwl-nvm-parse.o
iwlwifi-objs
+=
pcie/drv.o pcie/rx.o pcie/tx.o pcie/trans.o
iwlwifi-objs
+=
iwl-1000.o iwl-2000.o iwl-5000.o iwl-6000.o iwl-7000.o
iwlwifi-$(CONFIG_IWLDVM)
+=
iwl-1000.o iwl-2000.o iwl-5000.o iwl-6000.o
iwlwifi-$(CONFIG_IWLMVM)
+=
iwl-7000.o
iwlwifi-objs
+=
$
(
iwlwifi-m
)
iwlwifi-$(CONFIG_IWLWIFI_DEVICE_TRACING)
+=
iwl-devtrace.o
iwlwifi-$(CONFIG_IWLWIFI_DEVICE_TESTMODE)
+=
iwl-test.o
ccflags-y
+=
-D__CHECK_ENDIAN__
-I
$(src)
obj-$(CONFIG_IWLDVM)
+=
dvm/
obj-$(CONFIG_IWLMVM)
+=
mvm/
...
...
drivers/net/wireless/iwlwifi/dvm/main.c
浏览文件 @
65574866
...
...
@@ -1859,14 +1859,9 @@ int iwl_dump_nic_event_log(struct iwl_priv *priv, bool full_log,
return
pos
;
}
#ifdef CONFIG_IWLWIFI_DEBUG
if
(
!
(
iwl_have_debug_level
(
IWL_DL_FW_ERRORS
))
&&
!
full_log
)
size
=
(
size
>
DEFAULT_DUMP_EVENT_LOG_ENTRIES
)
?
DEFAULT_DUMP_EVENT_LOG_ENTRIES
:
size
;
#else
size
=
(
size
>
DEFAULT_DUMP_EVENT_LOG_ENTRIES
)
?
DEFAULT_DUMP_EVENT_LOG_ENTRIES
:
size
;
#endif
IWL_ERR
(
priv
,
"Start IWL Event Log Dump: display last %u entries
\n
"
,
size
);
...
...
@@ -1910,10 +1905,8 @@ static void iwlagn_fw_error(struct iwl_priv *priv, bool ondemand)
unsigned
int
reload_msec
;
unsigned
long
reload_jiffies
;
#ifdef CONFIG_IWLWIFI_DEBUG
if
(
iwl_have_debug_level
(
IWL_DL_FW_ERRORS
))
iwl_print_rx_config_cmd
(
priv
,
IWL_RXON_CTX_BSS
);
#endif
/* uCode is no longer loaded. */
priv
->
ucode_loaded
=
false
;
...
...
drivers/net/wireless/iwlwifi/iwl-config.h
浏览文件 @
65574866
...
...
@@ -237,6 +237,7 @@ struct iwl_cfg {
/*
* This list declares the config structures for all devices.
*/
#if IS_ENABLED(CONFIG_IWLDVM)
extern
const
struct
iwl_cfg
iwl5300_agn_cfg
;
extern
const
struct
iwl_cfg
iwl5100_agn_cfg
;
extern
const
struct
iwl_cfg
iwl5350_agn_cfg
;
...
...
@@ -278,11 +279,14 @@ extern const struct iwl_cfg iwl6035_2agn_cfg;
extern
const
struct
iwl_cfg
iwl105_bgn_cfg
;
extern
const
struct
iwl_cfg
iwl105_bgn_d_cfg
;
extern
const
struct
iwl_cfg
iwl135_bgn_cfg
;
#endif
/* CONFIG_IWLDVM */
#if IS_ENABLED(CONFIG_IWLMVM)
extern
const
struct
iwl_cfg
iwl7260_2ac_cfg
;
extern
const
struct
iwl_cfg
iwl7260_2n_cfg
;
extern
const
struct
iwl_cfg
iwl7260_n_cfg
;
extern
const
struct
iwl_cfg
iwl3160_2ac_cfg
;
extern
const
struct
iwl_cfg
iwl3160_2n_cfg
;
extern
const
struct
iwl_cfg
iwl3160_n_cfg
;
#endif
/* CONFIG_IWLMVM */
#endif
/* __IWL_CONFIG_H__ */
drivers/net/wireless/iwlwifi/iwl-debug.h
浏览文件 @
65574866
...
...
@@ -34,7 +34,11 @@
static
inline
bool
iwl_have_debug_level
(
u32
level
)
{
#ifdef CONFIG_IWLWIFI_DEBUG
return
iwlwifi_mod_params
.
debug_level
&
level
;
#else
return
false
;
#endif
}
void
__iwl_err
(
struct
device
*
dev
,
bool
rfkill_prefix
,
bool
only_trace
,
...
...
drivers/net/wireless/iwlwifi/iwl-modparams.h
浏览文件 @
65574866
...
...
@@ -115,7 +115,9 @@ struct iwl_mod_params {
int
led_mode
;
bool
power_save
;
int
power_level
;
#ifdef CONFIG_IWLWIFI_DEBUG
u32
debug_level
;
#endif
int
ant_coupling
;
bool
bt_ch_announce
;
bool
auto_agg
;
...
...
drivers/net/wireless/iwlwifi/iwl-phy-db.c
浏览文件 @
65574866
...
...
@@ -92,20 +92,16 @@ struct iwl_phy_db_entry {
struct
iwl_phy_db
{
struct
iwl_phy_db_entry
cfg
;
struct
iwl_phy_db_entry
calib_nch
;
struct
iwl_phy_db_entry
calib_ch
;
struct
iwl_phy_db_entry
calib_ch_group_papd
[
IWL_NUM_PAPD_CH_GROUPS
];
struct
iwl_phy_db_entry
calib_ch_group_txp
[
IWL_NUM_TXP_CH_GROUPS
];
u32
channel_num
;
u32
channel_size
;
struct
iwl_trans
*
trans
;
};
enum
iwl_phy_db_section_type
{
IWL_PHY_DB_CFG
=
1
,
IWL_PHY_DB_CALIB_NCH
,
IWL_PHY_DB_
CALIB_CH
,
IWL_PHY_DB_
UNUSED
,
IWL_PHY_DB_CALIB_CHG_PAPD
,
IWL_PHY_DB_CALIB_CHG_TXP
,
IWL_PHY_DB_MAX
...
...
@@ -169,8 +165,6 @@ iwl_phy_db_get_section(struct iwl_phy_db *phy_db,
return
&
phy_db
->
cfg
;
case
IWL_PHY_DB_CALIB_NCH
:
return
&
phy_db
->
calib_nch
;
case
IWL_PHY_DB_CALIB_CH
:
return
&
phy_db
->
calib_ch
;
case
IWL_PHY_DB_CALIB_CHG_PAPD
:
if
(
chg_id
>=
IWL_NUM_PAPD_CH_GROUPS
)
return
NULL
;
...
...
@@ -208,7 +202,6 @@ void iwl_phy_db_free(struct iwl_phy_db *phy_db)
iwl_phy_db_free_section
(
phy_db
,
IWL_PHY_DB_CFG
,
0
);
iwl_phy_db_free_section
(
phy_db
,
IWL_PHY_DB_CALIB_NCH
,
0
);
iwl_phy_db_free_section
(
phy_db
,
IWL_PHY_DB_CALIB_CH
,
0
);
for
(
i
=
0
;
i
<
IWL_NUM_PAPD_CH_GROUPS
;
i
++
)
iwl_phy_db_free_section
(
phy_db
,
IWL_PHY_DB_CALIB_CHG_PAPD
,
i
);
for
(
i
=
0
;
i
<
IWL_NUM_TXP_CH_GROUPS
;
i
++
)
...
...
@@ -248,13 +241,6 @@ int iwl_phy_db_set_section(struct iwl_phy_db *phy_db, struct iwl_rx_packet *pkt,
entry
->
size
=
size
;
if
(
type
==
IWL_PHY_DB_CALIB_CH
)
{
phy_db
->
channel_num
=
le32_to_cpup
((
__le32
*
)
phy_db_notif
->
data
);
phy_db
->
channel_size
=
(
size
-
CHANNEL_NUM_SIZE
)
/
phy_db
->
channel_num
;
}
IWL_DEBUG_INFO
(
phy_db
->
trans
,
"%s(%d): [PHYDB]SET: Type %d , Size: %d
\n
"
,
__func__
,
__LINE__
,
type
,
size
);
...
...
@@ -328,10 +314,7 @@ int iwl_phy_db_get_section_data(struct iwl_phy_db *phy_db,
u32
type
,
u8
**
data
,
u16
*
size
,
u16
ch_id
)
{
struct
iwl_phy_db_entry
*
entry
;
u32
channel_num
;
u32
channel_size
;
u16
ch_group_id
=
0
;
u16
index
;
if
(
!
phy_db
)
return
-
EINVAL
;
...
...
@@ -346,21 +329,8 @@ int iwl_phy_db_get_section_data(struct iwl_phy_db *phy_db,
if
(
!
entry
)
return
-
EINVAL
;
if
(
type
==
IWL_PHY_DB_CALIB_CH
)
{
index
=
ch_id_to_ch_index
(
ch_id
);
channel_num
=
phy_db
->
channel_num
;
channel_size
=
phy_db
->
channel_size
;
if
(
index
>=
channel_num
)
{
IWL_ERR
(
phy_db
->
trans
,
"Wrong channel number %d
\n
"
,
ch_id
);
return
-
EINVAL
;
}
*
data
=
entry
->
data
+
CHANNEL_NUM_SIZE
+
index
*
channel_size
;
*
size
=
channel_size
;
}
else
{
*
data
=
entry
->
data
;
*
size
=
entry
->
size
;
}
*
data
=
entry
->
data
;
*
size
=
entry
->
size
;
IWL_DEBUG_INFO
(
phy_db
->
trans
,
"%s(%d): [PHYDB] GET: Type %d , Size: %d
\n
"
,
...
...
drivers/net/wireless/iwlwifi/mvm/d3.c
浏览文件 @
65574866
...
...
@@ -420,8 +420,7 @@ static __le16 pseudo_hdr_check(int len, __be32 saddr, __be32 daddr)
return
cpu_to_le16
(
be16_to_cpu
((
__force
__be16
)
check
));
}
static
void
iwl_mvm_build_tcp_packet
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
static
void
iwl_mvm_build_tcp_packet
(
struct
ieee80211_vif
*
vif
,
struct
cfg80211_wowlan_tcp
*
tcp
,
void
*
_pkt
,
u8
*
mask
,
__le16
*
pseudo_hdr_csum
,
...
...
@@ -567,21 +566,21 @@ static int iwl_mvm_send_remote_wake_cfg(struct iwl_mvm *mvm,
/* SYN (TX) */
iwl_mvm_build_tcp_packet
(
mvm
,
vif
,
tcp
,
cfg
->
syn_tx
.
data
,
NULL
,
vif
,
tcp
,
cfg
->
syn_tx
.
data
,
NULL
,
&
cfg
->
syn_tx
.
info
.
tcp_pseudo_header_checksum
,
MVM_TCP_TX_SYN
);
cfg
->
syn_tx
.
info
.
tcp_payload_length
=
0
;
/* SYN/ACK (RX) */
iwl_mvm_build_tcp_packet
(
mvm
,
vif
,
tcp
,
cfg
->
synack_rx
.
data
,
cfg
->
synack_rx
.
rx_mask
,
vif
,
tcp
,
cfg
->
synack_rx
.
data
,
cfg
->
synack_rx
.
rx_mask
,
&
cfg
->
synack_rx
.
info
.
tcp_pseudo_header_checksum
,
MVM_TCP_RX_SYNACK
);
cfg
->
synack_rx
.
info
.
tcp_payload_length
=
0
;
/* KEEPALIVE/ACK (TX) */
iwl_mvm_build_tcp_packet
(
mvm
,
vif
,
tcp
,
cfg
->
keepalive_tx
.
data
,
NULL
,
vif
,
tcp
,
cfg
->
keepalive_tx
.
data
,
NULL
,
&
cfg
->
keepalive_tx
.
info
.
tcp_pseudo_header_checksum
,
MVM_TCP_TX_DATA
);
cfg
->
keepalive_tx
.
info
.
tcp_payload_length
=
...
...
@@ -605,7 +604,7 @@ static int iwl_mvm_send_remote_wake_cfg(struct iwl_mvm *mvm,
/* ACK (RX) */
iwl_mvm_build_tcp_packet
(
mvm
,
vif
,
tcp
,
cfg
->
keepalive_ack_rx
.
data
,
vif
,
tcp
,
cfg
->
keepalive_ack_rx
.
data
,
cfg
->
keepalive_ack_rx
.
rx_mask
,
&
cfg
->
keepalive_ack_rx
.
info
.
tcp_pseudo_header_checksum
,
MVM_TCP_RX_ACK
);
...
...
@@ -613,7 +612,7 @@ static int iwl_mvm_send_remote_wake_cfg(struct iwl_mvm *mvm,
/* WAKEUP (RX) */
iwl_mvm_build_tcp_packet
(
mvm
,
vif
,
tcp
,
cfg
->
wake_rx
.
data
,
cfg
->
wake_rx
.
rx_mask
,
vif
,
tcp
,
cfg
->
wake_rx
.
data
,
cfg
->
wake_rx
.
rx_mask
,
&
cfg
->
wake_rx
.
info
.
tcp_pseudo_header_checksum
,
MVM_TCP_RX_WAKE
);
cfg
->
wake_rx
.
info
.
tcp_payload_length
=
...
...
@@ -621,7 +620,7 @@ static int iwl_mvm_send_remote_wake_cfg(struct iwl_mvm *mvm,
/* FIN */
iwl_mvm_build_tcp_packet
(
mvm
,
vif
,
tcp
,
cfg
->
fin_tx
.
data
,
NULL
,
vif
,
tcp
,
cfg
->
fin_tx
.
data
,
NULL
,
&
cfg
->
fin_tx
.
info
.
tcp_pseudo_header_checksum
,
MVM_TCP_TX_FIN
);
cfg
->
fin_tx
.
info
.
tcp_payload_length
=
0
;
...
...
drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h
浏览文件 @
65574866
...
...
@@ -228,10 +228,11 @@ struct iwl_tx_cmd {
__le16
len
;
__le16
next_frame_len
;
__le32
tx_flags
;
/* DRAM_SCRATCH_API_U_VER_1 */
u8
try_cnt
;
u8
btkill_cnt
;
__le16
reserved
;
struct
{
u8
try_cnt
;
u8
btkill_cnt
;
__le16
reserved
;
}
scratch
;
/* DRAM_SCRATCH_API_U_VER_1 */
__le32
rate_n_flags
;
u8
sta_id
;
u8
sec_ctl
;
...
...
drivers/net/wireless/iwlwifi/mvm/tx.c
浏览文件 @
65574866
...
...
@@ -407,7 +407,6 @@ int iwl_mvm_tx_skb(struct iwl_mvm *mvm, struct sk_buff *skb,
IWL_DEBUG_TX
(
mvm
,
"TX to [%d|%d] Q:%d - seq: 0x%x
\n
"
,
mvmsta
->
sta_id
,
tid
,
txq_id
,
seq_number
);
/* NOTE: aggregation will need changes here (for txq id) */
if
(
iwl_trans_tx
(
mvm
->
trans
,
skb
,
dev_cmd
,
txq_id
))
goto
drop_unlock_sta
;
...
...
@@ -609,8 +608,8 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
!
(
info
->
flags
&
IEEE80211_TX_STAT_ACK
))
info
->
flags
|=
IEEE80211_TX_STAT_AMPDU_NO_BACK
;
/* W/A FW bug: seq_ctl is wrong when the
queue is flushed
*/
if
(
status
==
TX_STATUS_FAIL_FIFO_FLUSHED
)
{
/* W/A FW bug: seq_ctl is wrong when the
status isn't success
*/
if
(
status
!=
TX_STATUS_SUCCESS
)
{
struct
ieee80211_hdr
*
hdr
=
(
void
*
)
skb
->
data
;
seq_ctl
=
le16_to_cpu
(
hdr
->
seq_ctrl
);
}
...
...
drivers/net/wireless/iwlwifi/pcie/drv.c
浏览文件 @
65574866
...
...
@@ -78,6 +78,7 @@
/* Hardware specific file defines the PCI IDs table for that hardware module */
static
DEFINE_PCI_DEVICE_TABLE
(
iwl_hw_card_ids
)
=
{
#if IS_ENABLED(CONFIG_IWLDVM)
{
IWL_PCI_DEVICE
(
0x4232
,
0x1201
,
iwl5100_agn_cfg
)},
/* Mini Card */
{
IWL_PCI_DEVICE
(
0x4232
,
0x1301
,
iwl5100_agn_cfg
)},
/* Half Mini Card */
{
IWL_PCI_DEVICE
(
0x4232
,
0x1204
,
iwl5100_agn_cfg
)},
/* Mini Card */
...
...
@@ -253,7 +254,9 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
{
IWL_PCI_DEVICE
(
0x0892
,
0x0062
,
iwl135_bgn_cfg
)},
{
IWL_PCI_DEVICE
(
0x0893
,
0x0262
,
iwl135_bgn_cfg
)},
{
IWL_PCI_DEVICE
(
0x0892
,
0x0462
,
iwl135_bgn_cfg
)},
#endif
/* CONFIG_IWLDVM */
#if IS_ENABLED(CONFIG_IWLMVM)
/* 7000 Series */
{
IWL_PCI_DEVICE
(
0x08B1
,
0x4070
,
iwl7260_2ac_cfg
)},
{
IWL_PCI_DEVICE
(
0x08B1
,
0x4170
,
iwl7260_2ac_cfg
)},
...
...
@@ -304,6 +307,7 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
{
IWL_PCI_DEVICE
(
0x08B3
,
0x8062
,
iwl3160_n_cfg
)},
{
IWL_PCI_DEVICE
(
0x08B4
,
0x8270
,
iwl3160_2ac_cfg
)},
{
IWL_PCI_DEVICE
(
0x08B3
,
0x8470
,
iwl3160_2ac_cfg
)},
#endif
/* CONFIG_IWLMVM */
{
0
}
}
;
...
...
drivers/net/wireless/iwlwifi/pcie/internal.h
浏览文件 @
65574866
...
...
@@ -217,6 +217,7 @@ struct iwl_pcie_txq_scratch_buf {
* @trans_pcie: pointer back to transport (for timer)
* @need_update: indicates need to update read/write index
* @active: stores if queue is active
* @ampdu: true if this queue is an ampdu queue for an specific RA/TID
*
* A Tx queue consists of circular buffer of BDs (a.k.a. TFDs, transmit frame
* descriptors) and required locking structures.
...
...
@@ -232,6 +233,7 @@ struct iwl_txq {
struct
iwl_trans_pcie
*
trans_pcie
;
u8
need_update
;
u8
active
;
bool
ampdu
;
};
static
inline
dma_addr_t
...
...
drivers/net/wireless/iwlwifi/pcie/rx.c
浏览文件 @
65574866
...
...
@@ -802,9 +802,6 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
u32
handled
=
0
;
unsigned
long
flags
;
u32
i
;
#ifdef CONFIG_IWLWIFI_DEBUG
u32
inta_mask
;
#endif
lock_map_acquire
(
&
trans
->
sync_cmd_lockdep_map
);
...
...
@@ -826,14 +823,9 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
inta
=
trans_pcie
->
inta
;
#ifdef CONFIG_IWLWIFI_DEBUG
if
(
iwl_have_debug_level
(
IWL_DL_ISR
))
{
/* just for debug */
inta_mask
=
iwl_read32
(
trans
,
CSR_INT_MASK
);
if
(
iwl_have_debug_level
(
IWL_DL_ISR
))
IWL_DEBUG_ISR
(
trans
,
"inta 0x%08x, enabled 0x%08x
\n
"
,
inta
,
inta_mask
);
}
#endif
inta
,
iwl_read32
(
trans
,
CSR_INT_MASK
));
/* saved interrupt in inta variable now we can reset trans_pcie->inta */
trans_pcie
->
inta
=
0
;
...
...
@@ -855,12 +847,11 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
goto
out
;
}
#ifdef CONFIG_IWLWIFI_DEBUG
if
(
iwl_have_debug_level
(
IWL_DL_ISR
))
{
/* NIC fires this, but we don't use it, redundant with WAKEUP */
if
(
inta
&
CSR_INT_BIT_SCD
)
{
IWL_DEBUG_ISR
(
trans
,
"Scheduler finished to transmit "
"the frame/frames.
\n
"
);
IWL_DEBUG_ISR
(
trans
,
"
Scheduler finished to transmit
the frame/frames.
\n
"
);
isr_stats
->
sch
++
;
}
...
...
@@ -870,7 +861,7 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
isr_stats
->
alive
++
;
}
}
#endif
/* Safely ignore these bits for debug checks below */
inta
&=
~
(
CSR_INT_BIT_SCD
|
CSR_INT_BIT_ALIVE
);
...
...
@@ -1118,9 +1109,6 @@ static irqreturn_t iwl_pcie_isr(int irq, void *data)
struct
iwl_trans
*
trans
=
data
;
struct
iwl_trans_pcie
*
trans_pcie
=
IWL_TRANS_GET_PCIE_TRANS
(
trans
);
u32
inta
,
inta_mask
;
#ifdef CONFIG_IWLWIFI_DEBUG
u32
inta_fh
;
#endif
lockdep_assert_held
(
&
trans_pcie
->
irq_lock
);
...
...
@@ -1159,13 +1147,11 @@ static irqreturn_t iwl_pcie_isr(int irq, void *data)
return
IRQ_HANDLED
;
}
#ifdef CONFIG_IWLWIFI_DEBUG
if
(
iwl_have_debug_level
(
IWL_DL_ISR
))
{
inta_fh
=
iwl_read32
(
trans
,
CSR_FH_INT_STATUS
);
IWL_DEBUG_ISR
(
trans
,
"ISR inta 0x%08x, enabled 0x%08x, "
"fh 0x%08x
\n
"
,
inta
,
inta_mask
,
inta_fh
);
}
#endif
if
(
iwl_have_debug_level
(
IWL_DL_ISR
))
IWL_DEBUG_ISR
(
trans
,
"ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x
\n
"
,
inta
,
inta_mask
,
iwl_read32
(
trans
,
CSR_FH_INT_STATUS
));
trans_pcie
->
inta
|=
inta
;
/* the thread will service interrupts and re-enable them */
...
...
@@ -1198,7 +1184,7 @@ irqreturn_t iwl_pcie_isr_ict(int irq, void *data)
{
struct
iwl_trans
*
trans
=
data
;
struct
iwl_trans_pcie
*
trans_pcie
;
u32
inta
,
inta_mask
;
u32
inta
;
u32
val
=
0
;
u32
read
;
unsigned
long
flags
;
...
...
@@ -1226,7 +1212,6 @@ irqreturn_t iwl_pcie_isr_ict(int irq, void *data)
* If we have something to service, the tasklet will re-enable ints.
* If we *don't* have something, we'll re-enable before leaving here.
*/
inta_mask
=
iwl_read32
(
trans
,
CSR_INT_MASK
);
iwl_write32
(
trans
,
CSR_INT_MASK
,
0x00000000
);
/* Ignore interrupt if there's nothing in NIC to service.
...
...
@@ -1271,8 +1256,11 @@ irqreturn_t iwl_pcie_isr_ict(int irq, void *data)
val
|=
0x8000
;
inta
=
(
0xff
&
val
)
|
((
0xff00
&
val
)
<<
16
);
IWL_DEBUG_ISR
(
trans
,
"ISR inta 0x%08x, enabled 0x%08x ict 0x%08x
\n
"
,
inta
,
inta_mask
,
val
);
IWL_DEBUG_ISR
(
trans
,
"ISR inta 0x%08x, enabled(sw) 0x%08x ict 0x%08x
\n
"
,
inta
,
trans_pcie
->
inta_mask
,
val
);
if
(
iwl_have_debug_level
(
IWL_DL_ISR
))
IWL_DEBUG_ISR
(
trans
,
"enabled(hw) 0x%08x
\n
"
,
iwl_read32
(
trans
,
CSR_INT_MASK
));
inta
&=
trans_pcie
->
inta_mask
;
trans_pcie
->
inta
|=
inta
;
...
...
drivers/net/wireless/iwlwifi/pcie/tx.c
浏览文件 @
65574866
...
...
@@ -1073,6 +1073,7 @@ void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
/* enable aggregations for the queue */
iwl_set_bits_prph
(
trans
,
SCD_AGGR_SEL
,
BIT
(
txq_id
));
trans_pcie
->
txq
[
txq_id
].
ampdu
=
true
;
}
else
{
/*
* disable aggregations for the queue, this will also make the
...
...
@@ -1129,6 +1130,7 @@ void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int txq_id)
ARRAY_SIZE
(
zero_val
));
iwl_pcie_txq_unmap
(
trans
,
txq_id
);
trans_pcie
->
txq
[
txq_id
].
ampdu
=
false
;
IWL_DEBUG_TX_QUEUES
(
trans
,
"Deactivate queue %d
\n
"
,
txq_id
);
}
...
...
@@ -1599,7 +1601,7 @@ int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
u8
wait_write_ptr
=
0
;
__le16
fc
=
hdr
->
frame_control
;
u8
hdr_len
=
ieee80211_hdrlen
(
fc
);
u16
__maybe_unused
wifi_seq
;
u16
wifi_seq
;
txq
=
&
trans_pcie
->
txq
[
txq_id
];
q
=
&
txq
->
q
;
...
...
@@ -1616,13 +1618,11 @@ int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
* the BA.
* Check here that the packets are in the right place on the ring.
*/
#ifdef CONFIG_IWLWIFI_DEBUG
wifi_seq
=
IEEE80211_SEQ_TO_SN
(
le16_to_cpu
(
hdr
->
seq_ctrl
));
WARN_ONCE
(
(
iwl_read_prph
(
trans
,
SCD_AGGR_SEL
)
&
BIT
(
txq_id
))
&&
(
(
wifi_seq
&
0xff
)
!=
q
->
write_ptr
)
,
WARN_ONCE
(
trans_pcie
->
txq
[
txq_id
].
ampdu
&&
(
wifi_seq
&
0xff
)
!=
q
->
write_ptr
,
"Q: %d WiFi Seq %d tfdNum %d"
,
txq_id
,
wifi_seq
,
q
->
write_ptr
);
#endif
/* Set up driver data for this TFD */
txq
->
entries
[
q
->
write_ptr
].
skb
=
skb
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录