[发明专利]一种低速接口的缓存方法与装置有效
申请号: | 201811293225.5 | 申请日: | 2018-11-01 |
公开(公告)号: | CN109408429B | 公开(公告)日: | 2020-10-16 |
发明(设计)人: | 王鹏 | 申请(专利权)人: | 苏州浪潮智能科技有限公司 |
主分类号: | G06F13/36 | 分类号: | G06F13/36 |
代理公司: | 北京连和连知识产权代理有限公司 11278 | 代理人: | 刘小峰 |
地址: | 215100 江苏省苏州市吴*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 低速 接口 缓存 方法 装置 | ||
本发明公开了一种低速接口的缓存方法与装置,包括:在iomap层读写外部寄存器,获取并封装外部寄存器的硬件信息;在iocache层针对硬件信息而加载相应的缓存,并根据缓存发出访问硬件设备的指令;在bus层通过相应的总线根据该指令与硬件设备交互;在iocache层按需卸载相应的缓存。本发明的技术方案能够针对不同寄存器或不同类型的寄存器进行对低速接口的缓存,降低了驱动读写外设寄存器的逻辑操作复杂度,提高了低速I/O设备的访问效率。
技术领域
本发明涉及计算机领域,并且更具体地,特别是涉及一种低速接口的缓存方法与装置。
背景技术
现有的内核驱动中,操作硬件寄存器的一般逻辑如图1所示。操作寄存器的逻辑大量存在于现有linux内核驱动代码中,它不会因为内核子系统的不同而出现差异,是当前内核中一种普遍适用的寄存器操作逻辑。当前内核的低速设备子系统发起访问硬件寄存器操作时,并没有做更精细化的缓存操作,而是统一使用了线性数组缓存,因此在硬件寄存器的访问效率上还有优化空间。比如编写一个I2C接口的临时传感器驱动时,因为寄存器数量有限,所以使用线性数组缓存寄存器没有问题;但比如像MMC控制器这样的复杂硬件逻辑,涉及的寄存器数量多,再采用线性数组做缓存的策略就会浪费过多的内存空间,而且更重要的是采用线性索引的方式去大量寄存器中查找要访问的某一寄存器的速度会不理想;再比如像NIC这种对访问延迟敏感的设备,寄存器的快速访问更显得尤为重要。由此可见,现有技术的方法破坏了驱动本身的简洁性,降低了代码的逻辑清晰度;而且相同代码逻辑不得不重复出现在每份驱动代码中,从软件设计上讲也不合理。
针对现有技术中操作逻辑重复和寄存器访问速度慢导致延时长、效率低的问题,目前尚未有有效的解决方案。
发明内容
有鉴于此,本发明实施例的目的在于提出一种低速接口的缓存方法与装置,能够针对不同寄存器或不同类型的寄存器进行对低速接口的缓存,降低了驱动读写外设寄存器的逻辑操作复杂度,提高了低速I/O设备的访问效率。
基于上述目的,本发明实施例的一方面提供了一种低速接口的缓存方法,包括以下步骤:
在iomap层读写外部寄存器,以获取并封装外部寄存器的硬件信息;
在iocache层针对硬件信息而加载相应的缓存,并根据缓存发出访问硬件设备的指令;
在bus层通过相应的总线根据该指令与硬件设备交互;
在iocache层按需卸载相应的缓存。
在一些实施方式中,外部寄存器为外部驱动器的寄存器,外部驱动器用于驱动硬件设备;外部寄存器的硬件信息包括以下至少之一:寄存器数量、位宽、书写属性、缓存类型。
在一些实施方式中,在iomap层获取并封装外部寄存器的硬件信息包括:实例化负责封装硬件信息的struct iomap_config并调用iomap_init_xxx将硬件信息传输到iocache层。
在一些实施方式中,在iomap层读写外部寄存器包括:调用iomap_read/iomap_write读写外部寄存器。
在一些实施方式中,在iocache层根据缓存发出访问硬件设备的指令包括:确定缓存的缓存类型、并根据缓存类型来发出访问硬件设备的指令。
在一些实施方式中,缓存类型为以下之一:flat、lzo、rbtree,其中在外部寄存器较少时确定缓存类型为flat,在外部寄存器适中时确定缓存类型为lzo,在外部寄存器较多时确定缓存类型为rbtree。
在一些实施方式中,确定缓存类型包括以下步骤:
在读写外部寄存器时检测cache_type是否赋值和cache_bypass是否需要绕过;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州浪潮智能科技有限公司,未经苏州浪潮智能科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811293225.5/2.html,转载请声明来源钻瓜专利网。