Chinaunix

标题: readl与__raw_readl差别 [打印本页]

作者: bensenq    时间: 2013-05-15 21:13
标题: readl与__raw_readl差别
本帖最后由 bensenq 于 2013-05-15 21:15 编辑

个人对readl、__readl、raw_readl和__raw_readl的差别理解:http://unichris.com/wordpress/archives/117。 欢迎讨论拍传。
进行Linux驱动方面开发的程序员,经常需要使用readl/writel系列函数进行iomem读写。那么readl、__readl、raw_readl、__raw_readl几个函数的具体语义有何差别呢?

内核中关于这几个函数的说明非常有限,根据stackoverflow上的这个问答,我们可以学习到:

1. raw前缀只与byteorder相关,即readl/writel是linux默认的小端操作,而raw_readl/raw_writel是native访问。也就是说:如果是小端系统,raw_readl与readl相同,如果是大端系统,raw_readl与readl的有字节序差别。

2. __前缀与指令保序相关,即readl/writel包含存储器栅栏指令(mb),能够保证IO读写顺序,而__readl/__writel则不能保证。

另外,有的体系结构还会定义readl_relaxed/writel_relaxed接口,其含义应该与__readl/__writel相同,表示小端、不带存储器栅栏的读写。
作者: hanshu830    时间: 2013-06-04 11:09
谢谢分享, 学习了!




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