_raw_readl() 與 ioread32()

在使用這兩個函數的時候,想了想他們之間的不同,從函數的功能來看,他們都是在驅動代碼中讀虛擬地址。但是通過他們的實現的源碼,可以看到,他們之間是有不同的;

在ARM架構下他們的實現:
#define __raw_readl(a)        (__chk_io_ptr(a), *(volatile unsigned int __force   *)(a)) 
#define ioread32(p)    ({ unsigned int __v = le32_to_cpu((__force __le32)__raw_readl(p)); __v; }) 

___raw_readl() 不進行端序的檢查,ioread32()會檢查體系機構的端序。其中__force作用如下: 
# define __force __attribute__((force)) 
  表示所定義的變量類型是可以做強制類型轉換的,在進行Sparse分析的時候,使其不用產生告警信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章