【QCA】寄存器操作函数
2017-07-07 09:00
211 查看
Atheros有线驱动中有一个比较迷惑人的地方:寄存器的操作函数非常多,比如ar7240_reg_wr(), ar7240_reg_wr_nf(), ag7240_reg_wr(), ag7240_mii_write(), s26_wr_phy().....不知如此多的操作函数是由于这套驱动是由多个人完成,每个人均桀骜不驯,不肯使用别人的一点东西,还是出于商业机密的 原因,或者Atheros的芯片方案确实根骨奇特,不同类的寄存器需要不同的函数来操作,才能做到最好的性能。且罢,让我们来给其进行稍微归类,以便在编
写测试代码时能脑子清晰,速度快,用地准。欢迎各种插楼补充~
注:这里仅以write类函数作为代表。
ar7240_reg_wr_nf(addr, value)
sysRegWrite(addr, value)
这一类函数的特点主要是直接操作虚拟地址,比如初始化GPIO,Flash,Uart,以及以太网大部分寄存器,都是可以使用这类函数进行操作。它的操作也比较简单,直接将DataSheet里面的address填入即可操作。
在Datasheet中,可以用此类函数的寄存器有一个比较明显的特点:即是address必须是如(0x1a000000)这样的32位地址。
这类函数采用一个base+offset模式来进行操作。具体为在有线驱动初始化时,会选择将GE0或GE1的首地址作为base,在操作时,将 需要操作的mac填入其中。由于ar9331芯片中包含两个GMAC设备,为了在操作寄存器时不会因为GMAC0或GMAC1的因素而导致错误,这类操作 函数应运而生。
正因为这类函数需要填入mac,导致其使用范围比较有限,仅限于DataSheet中的Ethernet Register。
ag7240_mii_write(unit, phy_addr, reg, data)
phy_reg_write(unit, phy_addr, reg, data)
关于mii的解释,具体说来就是网络设备底层设备间协商时使用的一种协议。具体包括速率协商,流控等(请达人补充)。而我们这几个函数 中,athrs26_reg_write是针对DataSheet中ethernet switch register的,其中涉及switch的各个port的功能设置,比如是否打开流控,是否增加VLAN tag,是否打开MAC地址自学习功能,并可以给各个port划分一下vlan等。ag7240_mii_write函数主要是被
athrs26_reg_write调用,完成芯片的设置。
在switch的最下面,是和物理的RJ45口相连接的PHY,对于phy口,前面提及的速率协商(10、100Mbps,全、半双工等),以及如网口连接状态判断等,均是调用此函数进行操作
写测试代码时能脑子清晰,速度快,用地准。欢迎各种插楼补充~
注:这里仅以write类函数作为代表。
1.直接操作虚拟地址类
ar7240_reg_wr(addr, value)ar7240_reg_wr_nf(addr, value)
sysRegWrite(addr, value)
这一类函数的特点主要是直接操作虚拟地址,比如初始化GPIO,Flash,Uart,以及以太网大部分寄存器,都是可以使用这类函数进行操作。它的操作也比较简单,直接将DataSheet里面的address填入即可操作。
在Datasheet中,可以用此类函数的寄存器有一个比较明显的特点:即是address必须是如(0x1a000000)这样的32位地址。
2.通过mac来操作的函数类
ag7240_reg_wr(mac, reg, value)这类函数采用一个base+offset模式来进行操作。具体为在有线驱动初始化时,会选择将GE0或GE1的首地址作为base,在操作时,将 需要操作的mac填入其中。由于ar9331芯片中包含两个GMAC设备,为了在操作寄存器时不会因为GMAC0或GMAC1的因素而导致错误,这类操作 函数应运而生。
正因为这类函数需要填入mac,导致其使用范围比较有限,仅限于DataSheet中的Ethernet Register。
3.mii操作寄存器
athrs26_reg_write(s26_address, s26_write_data)ag7240_mii_write(unit, phy_addr, reg, data)
phy_reg_write(unit, phy_addr, reg, data)
关于mii的解释,具体说来就是网络设备底层设备间协商时使用的一种协议。具体包括速率协商,流控等(请达人补充)。而我们这几个函数 中,athrs26_reg_write是针对DataSheet中ethernet switch register的,其中涉及switch的各个port的功能设置,比如是否打开流控,是否增加VLAN tag,是否打开MAC地址自学习功能,并可以给各个port划分一下vlan等。ag7240_mii_write函数主要是被
athrs26_reg_write调用,完成芯片的设置。
4.phy类操作寄存器
s26_wr_phy(phy_addr, reg_addr, data)在switch的最下面,是和物理的RJ45口相连接的PHY,对于phy口,前面提及的速率协商(10、100Mbps,全、半双工等),以及如网口连接状态判断等,均是调用此函数进行操作
相关文章推荐
- X86-64寄存器和栈帧--牛掰降解汇编函数寄存器相关操作
- ioremap 函数映射操作已知的物理地址(寄存器、端口、IO)
- ARM内核寄存器的操作函数
- 函数实现数据库操作部分
- 几个ASP+操作日期的函数
- 几个asp+操作日期的函数
- MFC中几个有用的字符串操作函数
- 循环队列的基本函数操作
- openssl之BIO系列之6---BIO的IO操作函数
- 几个asp+操作日期的函数
- php+odbc+access 数据库操作函数,在windows下测试通过
- 一组有用的操作Excel的函数
- 对数据库操作的常用函数大全
- 对mouse_even模拟鼠标操作函数的一点认识
- c语言写的*.dbf文件的操作函数库
- 通知php使用自定义的session处理函数来操作session,而不使用php预置的方法
- VC函数中的延时操作
- 标准C++库的原子操作函数
- SQL Server 2005: 利用新的ranking函数实现高效的数据分页操作
- 数据库操作常用函数大全(Sql Server 2000 oracle9i)