Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
227d2dc1
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看板
提交
227d2dc1
编写于
7月 28, 2005
作者:
J
James Ketrenos
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Updated to support ieee80211 callback to is_queue_full for 802.11e
support. Signed-off-by:
N
James Ketrenos
<
jketreno@linux.intel.com
>
上级
d2021cb4
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
31 addition
and
9 deletion
+31
-9
drivers/net/wireless/ipw2200.c
drivers/net/wireless/ipw2200.c
+31
-9
未找到文件。
drivers/net/wireless/ipw2200.c
浏览文件 @
227d2dc1
...
...
@@ -9654,7 +9654,7 @@ modify to send one tfd per fragment instead of using chunking. otherwise
we need to heavily modify the ieee80211_skb_to_txb.
*/
static
inline
void
ipw_tx_skb
(
struct
ipw_priv
*
priv
,
struct
ieee80211_txb
*
txb
,
static
inline
int
ipw_tx_skb
(
struct
ipw_priv
*
priv
,
struct
ieee80211_txb
*
txb
,
int
pri
)
{
struct
ieee80211_hdr_3addr
*
hdr
=
(
struct
ieee80211_hdr_3addr
*
)
...
...
@@ -9672,6 +9672,11 @@ static inline void ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb,
u16
remaining_bytes
;
int
fc
;
/* If there isn't room in the queue, we return busy and let the
* network stack requeue the packet for us */
if
(
ipw_queue_space
(
q
)
<
q
->
high_mark
)
return
NETDEV_TX_BUSY
;
switch
(
priv
->
ieee
->
iw_mode
)
{
case
IW_MODE_ADHOC
:
hdr_len
=
IEEE80211_3ADDR_LEN
;
...
...
@@ -9837,14 +9842,28 @@ static inline void ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb,
q
->
first_empty
=
ipw_queue_inc_wrap
(
q
->
first_empty
,
q
->
n_bd
);
ipw_write32
(
priv
,
q
->
reg_w
,
q
->
first_empty
);
if
(
ipw_queue_space
(
q
)
<
q
->
high_mark
)
netif_stop_queue
(
priv
->
net_dev
);
return
;
return
NETDEV_TX_OK
;
drop:
IPW_DEBUG_DROP
(
"Silently dropping Tx packet.
\n
"
);
ieee80211_txb_free
(
txb
);
return
NETDEV_TX_OK
;
}
static
int
ipw_net_is_queue_full
(
struct
net_device
*
dev
,
int
pri
)
{
struct
ipw_priv
*
priv
=
ieee80211_priv
(
dev
);
#ifdef CONFIG_IPW_QOS
int
tx_id
=
ipw_get_tx_queue_number
(
priv
,
pri
);
struct
clx2_tx_queue
*
txq
=
&
priv
->
txq
[
tx_id
];
#else
struct
clx2_tx_queue
*
txq
=
&
priv
->
txq
[
0
];
#endif
/* CONFIG_IPW_QOS */
if
(
ipw_queue_space
(
&
txq
->
q
)
<
txq
->
q
.
high_mark
)
return
1
;
return
0
;
}
static
int
ipw_net_hard_start_xmit
(
struct
ieee80211_txb
*
txb
,
...
...
@@ -9852,6 +9871,7 @@ static int ipw_net_hard_start_xmit(struct ieee80211_txb *txb,
{
struct
ipw_priv
*
priv
=
ieee80211_priv
(
dev
);
unsigned
long
flags
;
int
ret
;
IPW_DEBUG_TX
(
"dev->xmit(%d bytes)
\n
"
,
txb
->
payload_size
);
spin_lock_irqsave
(
&
priv
->
lock
,
flags
);
...
...
@@ -9863,11 +9883,12 @@ static int ipw_net_hard_start_xmit(struct ieee80211_txb *txb,
goto
fail_unlock
;
}
ipw_tx_skb
(
priv
,
txb
,
pri
);
ret
=
ipw_tx_skb
(
priv
,
txb
,
pri
);
if
(
ret
==
NETDEV_TX_OK
)
__ipw_led_activity_on
(
priv
);
spin_unlock_irqrestore
(
&
priv
->
lock
,
flags
);
return
0
;
return
ret
;
fail_unlock:
spin_unlock_irqrestore
(
&
priv
->
lock
,
flags
);
...
...
@@ -10706,6 +10727,7 @@ static int ipw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
priv
->
ieee
->
hard_start_xmit
=
ipw_net_hard_start_xmit
;
priv
->
ieee
->
set_security
=
shim__set_security
;
priv
->
ieee
->
is_queue_full
=
ipw_net_is_queue_full
;
#ifdef CONFIG_IPW_QOS
priv
->
ieee
->
handle_management_frame
=
ipw_handle_management_frame
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录