关于 __raw_writel()的问题

yel617 2010-03-24 04:15:01
在2.6内核 include/asm-arm/io.h里 对__raw_writel()是这么定义的
#define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v))
对这个函数我知道怎么用,就是对这个定义有点不明白
__chk_io_ptr(a) 这个是什么意识
*(volatile unsigned int __force *)(a) = (v) 这个是什么意识
请高人给以解答 谢谢
...全文
1575 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
袁保康 2012-10-31
  • 打赏
  • 举报
回复
学习了……,
不过我是在s3c-ts.c中看到的:
__raw_writel (0x00,ts_base+S3C_ADCCLRWK);
chenxin20084809 2011-05-19
  • 打赏
  • 举报
回复
#define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v))


我个人的意见应该是这样:
__chk_io_ptr(a), 这个应该是检验指针a的有效性
lkncjy 2010-03-25
  • 打赏
  • 举报
回复
__raw_writel(v,a)
参数v是要写进寄存器的数据,参数a是硬件物理地址。。。
qihuanfengyun 2010-03-25
  • 打赏
  • 举报
回复
哦,没接触过啊!
lvyinghong 2010-03-25
  • 打赏
  • 举报
回复
a不就是io地址来的了吗?
看名字好像检查io 指针 是不是合法的? arm里面的io地址和普通的内存地址不是共用一个地址空间?还是怎么表示的?
UN_ChairMan 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hallowwar 的回复:]
__chk_io_ptr(a) : 应该是个函数,得到a的地址。

*(volatile unsigned int __force *)(a) = (v) : 把a的地址进行(volatile unsigned int __force *) 强制转化后 赋值 *(force *)(a) = v;
[/Quote]

同意LS说法,期待更佳答案
hallowwar 2010-03-25
  • 打赏
  • 举报
回复
__chk_io_ptr(a) : 应该是个函数,得到a的地址。

*(volatile unsigned int __force *)(a) = (v) : 把a的地址进行(volatile unsigned int __force *) 强制转化后 赋值 *(force *)(a) = v;
yel617 2010-03-25
  • 打赏
  • 举报
回复
不知道是不是这样,还想听听高人的意见,暂时不结贴
yel617 2010-03-25
  • 打赏
  • 举报
回复
__chk_io_ptr()是编译器为了更细致地检查参数的属性,用于调试,正常编译时没有作用。
volatile为了防止Compiler优化。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧