Chinaunix

标题: 无线网卡驱动ath9k的一个函数不理解,求大神看看 [打印本页]

作者: 九阳神功爱喝茶    时间: 2014-12-26 21:39
标题: 无线网卡驱动ath9k的一个函数不理解,求大神看看
本帖最后由 九阳神功爱喝茶 于 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. }
复制代码

作者: abutter    时间: 2014-12-27 20:06
九阳神功爱喝茶 发表于 2014-12-26 21:39
小弟被导师拉去搞网络协议,基本就我一个人在研究,还请各位看看。新手第一次发帖。如上所是,这是at ...


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

第二种方式,发送包只是把包放到队列里面,然后等 WMAC 发送空闲的时候就产生中断。不发包的时候当然不需要此中断了。
作者: 九阳神功爱喝茶    时间: 2014-12-27 23:47
那为什么在不用EDMA机制下要总是重新使能允许?只使能一次不可以吗?回复 2# abutter


   
作者: 九阳神功爱喝茶    时间: 2014-12-27 23:55
还请前辈说说什么事WMAC模式啊
abutter 发表于 2014-12-27 20:06
这应该是发送包的方式,要么用 EDMA 方式把 memory 中的包内容传到 WMAC;另外是一种队列的模式,当可以 ...

作者: abutter    时间: 2014-12-28 10:46
九阳神功爱喝茶 发表于 2014-12-27 23:47
那为什么在不用EDMA机制下要总是重新使能允许?只使能一次不可以吗?回复 2# abutter


发送使能是只要有空闲就会来中断,你填充新的描述符之后当然要再次使能了。
作者: abutter    时间: 2014-12-28 10:46
九阳神功爱喝茶 发表于 2014-12-27 23:55
还请前辈说说什么事WMAC模式啊


Wireless MAC
作者: 九阳神功爱喝茶    时间: 2014-12-28 11:54
再次麻烦你了,使能不就是把相应的寄存器为设置为1,然后数据就发送出去了吗?为什么还和中断有关了,怎么触发的中断?
abutter 发表于 2014-12-28 10:46
发送使能是只要有空闲就会来中断,你填充新的描述符之后当然要再次使能了。

作者: abutter    时间: 2014-12-28 12:20
回复 7# 九阳神功爱喝茶

我的猜测是:这个中断是发送空闲中断,意思是可以发送新的包的时候就产生中断,有硬件产生的。
作者: 九阳神功爱喝茶    时间: 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# 九阳神功爱喝茶

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

作者: yjcheng08    时间: 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);,怎么去设置内核,才能将里面的消息在用户终端显示?


   
作者: 九阳神功爱喝茶    时间: 2015-03-10 12:45
C问题解决了吗?怎么做我也想知道,我一直都是打印的回复 10# yjcheng08


   
作者: 1shuangtl1    时间: 2015-04-29 10:32
您驱动代码差不多都能看懂吗?我最近刚接触这个,啥也不会呀!!回复 1# 九阳神功爱喝茶


   
作者: 九阳神功爱喝茶    时间: 2015-04-29 10:35
部分懂回复 12# 1shuangtl1


   
作者: 1shuangtl1    时间: 2015-04-29 10:45
求推荐指导些资料或必备技能,小本不胜感激!!!!回复 13# 九阳神功爱喝茶


   
作者: 九阳神功爱喝茶    时间: 2015-04-29 16:00
我看讲这个的好像很少,所以我每次都是自己摸索着自己试试的回复 14# 1shuangtl1


   
作者: Greatandy4321    时间: 2015-06-05 16:46
回复 10# yjcheng08

解决了么?我也想知道

   
作者: root_nm    时间: 2016-06-09 09:15
同学你好,我研究80211也有一段时间了,关于无线方面的资料在网内的网站上线能够找到的比较少。
我做的是关于无线网络性能提升这块,需要在内核态修改部分代码,可否相互交流一下,共同学习!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2