当前位置: 技术问答>linux和unix
网卡寄存器读写:X86 vs ARM
来源: 互联网 发布时间:2016-09-11
本文导语: 小弟现在需要将基于X86写的一段网卡驱动程序移植到ARM,碰到了问题,其中一个问题是X86代码中对寄存器的读写在ARM板子 上无法正常运行,会产生随机错误,导致Oops。 基于X86的代码中读写寄存器的宏定义为: #define ...
小弟现在需要将基于X86写的一段网卡驱动程序移植到ARM,碰到了问题,其中一个问题是X86代码中对寄存器的读写在ARM板子
上无法正常运行,会产生随机错误,导致Oops。
基于X86的代码中读写寄存器的宏定义为:
#define EDRV_REGDW_WRITE(dwReg, dwVal) writel(dwVal, EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGW_WRITE(dwReg, wVal) writew(wVal, EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGB_WRITE(dwReg, bVal) writeb(bVal, EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGDW_READ(dwReg) readl(EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGW_READ(dwReg) readw(EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGB_READ(dwReg) readb(EdrvInstance_l.m_pIoAddr + dwReg)
然后我把网卡驱动程序跑在ARM中时,发现总是在写寄存器时会crash,读写哪个寄存器时crash是不固定的。
在初步比较了ARM平台上读写寄存器的方式,感觉跟X86的这段宏其实质是一样的,但不是很确定,请高手指点迷津,多谢!
上无法正常运行,会产生随机错误,导致Oops。
基于X86的代码中读写寄存器的宏定义为:
#define EDRV_REGDW_WRITE(dwReg, dwVal) writel(dwVal, EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGW_WRITE(dwReg, wVal) writew(wVal, EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGB_WRITE(dwReg, bVal) writeb(bVal, EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGDW_READ(dwReg) readl(EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGW_READ(dwReg) readw(EdrvInstance_l.m_pIoAddr + dwReg)
#define EDRV_REGB_READ(dwReg) readb(EdrvInstance_l.m_pIoAddr + dwReg)
然后我把网卡驱动程序跑在ARM中时,发现总是在写寄存器时会crash,读写哪个寄存器时crash是不固定的。
在初步比较了ARM平台上读写寄存器的方式,感觉跟X86的这段宏其实质是一样的,但不是很确定,请高手指点迷津,多谢!
|
ARM下的writeb和X86下的好像不一样,ARM下的你要用ioremap映射完以后才能wirteb我理解。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。