当前位置:  技术问答>linux和unix

在读取硬件寄存器时completion如何工作的?

    来源: 互联网  发布时间:2016-11-12

    本文导语:  下面的代码是Linux2.6.36网卡fec驱动读取硬件寄存器, completion如何工作的,如何知道寄存器读取完毕?completion如何超时? static int fec_enet_mdio_read(struct mii_bus *bus, int mii_id, int regnum) { struct fec_enet_private *fep = bus->...

下面的代码是Linux2.6.36网卡fec驱动读取硬件寄存器,
completion如何工作的,如何知道寄存器读取完毕?completion如何超时?
static int fec_enet_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
{
struct fec_enet_private *fep = bus->priv;
unsigned long time_left;

fep->mii_timeout = 0;
init_completion(&fep->mdio_done);

/* start a read op */
writel(FEC_MMFR_ST | FEC_MMFR_OP_READ |
FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(regnum) |
FEC_MMFR_TA, fep->hwp + FEC_MII_DATA);

/* wait for end of transfer */
time_left = wait_for_completion_timeout(&fep->mdio_done,
usecs_to_jiffies(FEC_MII_TIMEOUT));
if (time_left == 0) {
fep->mii_timeout = 1;
printk(KERN_ERR "wsy::fec_enet_mdio_read: MDIO read timeoutn");
return -ETIMEDOUT;
}

  returnFEC_MMFR_DATA(readl(fep->hwp + FEC_MII_DATA));
}

|
completion是一种同步的机制。

使用的API为
init_completion()
wait_for_completion_timeout()  -- 等待某个事件发生,未发生该进程休眠
complete()   -- 告知事件已发生,唤醒等待该事件的进程。通常你会看到在中断处理程序里调用它。(也有可能通过轮询,也就是读状态寄存器来判断了)


|
在你的中断处理函数里,有具体的实现代码,比如要读取100个字节,当读到硬件发来的第100个字节后,就调用completion()通知等待队列上等待这个事件的进程,completion()的具体实现就是wake_up(),跟代码就可以看到。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 getline():读取一行字符
  • read函数读取文件时如何一行一行的读取,请指教!
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • linux 下使用 FREETDS 访问数据库 image 字段的问题, 仅能读取 64K ,超出部分读取不到?
  • C++ I/O 成员 ignore():读取字符并忽略指定字符
  • java中读取.txt和读取.ini文件的方式和命令是否一样
  • C++ I/O 成员 read():读取字条符
  • 上传文件时,如何在读取文件内容之前中断读取,并返回客户端错误信息?
  • C++ I/O 成员 gcount():返回读取的最后一次输入的字符数
  • 光驱中有一张光盘,成功读取,现在想换另一张光盘并读取,该如何做
  • C++ I/O 成员 get():读取字符
  • 请问在Java程序中能否直接读取ini文件,如何读取?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 高手帮忙:如何用java读取数据(从ftp服务器上一个文本文件)但不采用get的方式直接读取,打印数据内容(web方式)
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • python读取浮点数和读取文本文件示例
  • 读取spring配置文件的方法(spring读取资源文件)
  • 串口读取数据的问题
  • 能否读取一个二进制文件的大小
  • c语言读取csv文件和c++读取csv文件示例分享
  • linux下的mib读取问题?大虾帮解答下


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3