无线网卡驱动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);
} 九阳神功爱喝茶 发表于 2014-12-26 21:39 static/image/common/back.gif
小弟被导师拉去搞网络协议,基本就我一个人在研究,还请各位看看。新手第一次发帖。如上所是,这是at ...
这应该是发送包的方式,要么用 EDMA 方式把 memory 中的包内容传到 WMAC;另外是一种队列的模式,当可以发送数据报文的时候,用中断方式通知 CPU。
第二种方式,发送包只是把包放到队列里面,然后等 WMAC 发送空闲的时候就产生中断。不发包的时候当然不需要此中断了。 那为什么在不用EDMA机制下要总是重新使能允许?只使能一次不可以吗?回复 2# abutter
还请前辈说说什么事WMAC模式啊abutter 发表于 2014-12-27 20:06 static/image/common/back.gif
这应该是发送包的方式,要么用 EDMA 方式把 memory 中的包内容传到 WMAC;另外是一种队列的模式,当可以 ... 九阳神功爱喝茶 发表于 2014-12-27 23:47 static/image/common/back.gif
那为什么在不用EDMA机制下要总是重新使能允许?只使能一次不可以吗?回复 2# abutter
发送使能是只要有空闲就会来中断,你填充新的描述符之后当然要再次使能了。 九阳神功爱喝茶 发表于 2014-12-27 23:55 static/image/common/back.gif
还请前辈说说什么事WMAC模式啊
Wireless MAC 再次麻烦你了,使能不就是把相应的寄存器为设置为1,然后数据就发送出去了吗?为什么还和中断有关了,怎么触发的中断?abutter 发表于 2014-12-28 10:46 static/image/common/back.gif
发送使能是只要有空闲就会来中断,你填充新的描述符之后当然要再次使能了。 回复 7# 九阳神功爱喝茶
我的猜测是:这个中断是发送空闲中断,意思是可以发送新的包的时候就产生中断,有硬件产生的。 兄弟你的意思是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# 九阳神功爱喝茶
我的猜测是:这个中断是发送空闲中断,意思是可以发送新的包的时候就产生中断, ... 回复 5# abutter
想问您一个问题,函数中的语句ath_dbg(common, XMIT, "TXDP[%u] = %llx (%p)\n", txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc);,怎么去设置内核,才能将里面的消息在用户终端显示?
页:
[1]
2