九阳神功爱喝茶 发表于 2014-12-26 21:39

无线网卡驱动ath9k的一个函数不理解,求大神看看

本帖最后由 九阳神功爱喝茶 于 2014-12-26 21:44 编辑

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

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

abutter 发表于 2014-12-27 20:06

九阳神功爱喝茶 发表于 2014-12-26 21:39 static/image/common/back.gif
小弟被导师拉去搞网络协议,基本就我一个人在研究,还请各位看看。新手第一次发帖。如上所是,这是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 static/image/common/back.gif
这应该是发送包的方式,要么用 EDMA 方式把 memory 中的包内容传到 WMAC;另外是一种队列的模式,当可以 ...

abutter 发表于 2014-12-28 10:46

九阳神功爱喝茶 发表于 2014-12-27 23:47 static/image/common/back.gif
那为什么在不用EDMA机制下要总是重新使能允许?只使能一次不可以吗?回复 2# abutter

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

abutter 发表于 2014-12-28 10:46

九阳神功爱喝茶 发表于 2014-12-27 23:55 static/image/common/back.gif
还请前辈说说什么事WMAC模式啊

Wireless MAC

九阳神功爱喝茶 发表于 2014-12-28 11:54

再次麻烦你了,使能不就是把相应的寄存器为设置为1,然后数据就发送出去了吗?为什么还和中断有关了,怎么触发的中断?abutter 发表于 2014-12-28 10:46 static/image/common/back.gif
发送使能是只要有空闲就会来中断,你填充新的描述符之后当然要再次使能了。

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 static/image/common/back.gif
回复 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);,怎么去设置内核,才能将里面的消息在用户终端显示?


   
页: [1] 2
查看完整版本: 无线网卡驱动ath9k的一个函数不理解,求大神看看