免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9282 | 回复: 16
打印 上一主题 下一主题

[网络子系统] 无线网卡驱动ath9k的一个函数不理解,求大神看看 [复制链接]

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-26 21:39 |只看该作者 |倒序浏览
本帖最后由 九阳神功爱喝茶 于 2014-12-26 21:44 编辑

      小弟被导师拉去搞网络协议,基本就我一个人在研究,还请各位看看。新手第一次发帖。
  1.         if (puttxbuf) {
  2.                 TX_STAT_INC(txq->axq_qnum, puttxbuf);
  3.                 ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
  4.                 ath_dbg(common, XMIT, "TXDP[%u] = %llx (%p)\n",
  5.                         txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc);
  6.         }

  7.         if (!edma || sc->tx99_state) {
  8.                 TX_STAT_INC(txq->axq_qnum, txstart);
  9.                 ath9k_hw_txstart(ah, txq->axq_qnum);
  10.         }
复制代码
如上所是,这是ath9k无线网卡驱动源代码的数据包发送的最后一个函数,我很不理解的是为什么采用edma方式的就不需要使能相应队列(注:ath9k_hw_txstart即为使能相应队列,如下代码所示),而不采用的就需要。还有就是不论用不用EDMA机制我想的,只要一次允许然后不关闭不就不用再次使能允许了?还是怎么的呢?我没看见有地方关闭这个队列的使能啊。非常疑惑,还请各位看看,无限感谢。
  1. void ath9k_hw_txstart(struct ath_hw *ah, u32 q)
  2. {
  3.         ath_dbg(ath9k_hw_common(ah), QUEUE, "Enable TXE on queue: %u\n", q);
  4.         REG_WRITE(ah, AR_Q_TXE, 1 << q);
  5. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2014-12-27 20:06 |只看该作者
九阳神功爱喝茶 发表于 2014-12-26 21:39
小弟被导师拉去搞网络协议,基本就我一个人在研究,还请各位看看。新手第一次发帖。如上所是,这是at ...


这应该是发送包的方式,要么用 EDMA 方式把 memory 中的包内容传到 WMAC;另外是一种队列的模式,当可以发送数据报文的时候,用中断方式通知 CPU。

第二种方式,发送包只是把包放到队列里面,然后等 WMAC 发送空闲的时候就产生中断。不发包的时候当然不需要此中断了。

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
3 [报告]
发表于 2014-12-27 23:47 |只看该作者
那为什么在不用EDMA机制下要总是重新使能允许?只使能一次不可以吗?回复 2# abutter


   

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
4 [报告]
发表于 2014-12-27 23:55 |只看该作者
还请前辈说说什么事WMAC模式啊
abutter 发表于 2014-12-27 20:06
这应该是发送包的方式,要么用 EDMA 方式把 memory 中的包内容传到 WMAC;另外是一种队列的模式,当可以 ...

论坛徽章:
0
5 [报告]
发表于 2014-12-28 10:46 |只看该作者
九阳神功爱喝茶 发表于 2014-12-27 23:47
那为什么在不用EDMA机制下要总是重新使能允许?只使能一次不可以吗?回复 2# abutter


发送使能是只要有空闲就会来中断,你填充新的描述符之后当然要再次使能了。

论坛徽章:
0
6 [报告]
发表于 2014-12-28 10:46 |只看该作者
九阳神功爱喝茶 发表于 2014-12-27 23:55
还请前辈说说什么事WMAC模式啊


Wireless MAC

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
7 [报告]
发表于 2014-12-28 11:54 |只看该作者
再次麻烦你了,使能不就是把相应的寄存器为设置为1,然后数据就发送出去了吗?为什么还和中断有关了,怎么触发的中断?
abutter 发表于 2014-12-28 10:46
发送使能是只要有空闲就会来中断,你填充新的描述符之后当然要再次使能了。

论坛徽章:
0
8 [报告]
发表于 2014-12-28 12:20 |只看该作者
回复 7# 九阳神功爱喝茶

我的猜测是:这个中断是发送空闲中断,意思是可以发送新的包的时候就产生中断,有硬件产生的。

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
9 [报告]
发表于 2014-12-28 12:30 |只看该作者
兄弟你的意思是ath9k_hw_txstart(ah, txq->axq_qnum);之后还不能把数据发送出去,还要等到信道空闲然后才能发送出去,然后触发中断通知CPU清除使能?那这句话起到的作用又是啥呢?ath9k_hw_txstart(ah, txq->axq_qnum);
abutter 发表于 2014-12-28 12:20
回复 7# 九阳神功爱喝茶

我的猜测是:这个中断是发送空闲中断,意思是可以发送新的包的时候就产生中断, ...

论坛徽章:
0
10 [报告]
发表于 2015-02-09 22:53 |只看该作者
回复 5# abutter

想问您一个问题,函数中的语句ath_dbg(common, XMIT, "TXDP[%u] = %llx (%p)\n", txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc);,怎么去设置内核,才能将里面的消息在用户终端显示?


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP