cache
cache 提供数据缓存操作功能,支持按地址范围对 DCache (Data Cache) 进行刷新、无效化和清理操作,用于维护 CPU 与 DMA (Direct Memory Access) 之间的数据一致性。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| osal_dcache_region_wb | 按地址范围刷新(写回并无效化)DCache |
| osal_dcache_region_inv | 按地址范围无效化DCache |
| osal_dcache_region_clean | 按地址范围清理(写回不无效化)DCache |
| osal_arch_dcache_flush_by_va | 按虚拟地址刷新DCache |
| osal_arch_dcahce_inv_by_va | 按虚拟地址无效化DCache |
Functions
osal_dcache_region_wb
头文件清单
功能说明
- 按指定地址范围刷新DCache,将Cache中脏数据写回主存并无效化对应Cache行
- 当MMU不存在且phys_addr为0时,使用kvirt作为物理地址执行刷新操作
- 基地址若未对齐到CACHE_LINE_SIZE(32字节),将被自动对齐到CACHE_LINE_SIZE边界
前置条件
- 调用上下文:支持linux、liteos、seliteos系统
- MMU未使能时,phys_addr必须为有效物理地址,或在phys_addr为0时确保kvirt指向有效地址
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| kvirt | void * | 虚拟地址指针 | 非NULL,指向有效内存区域 |
| phys_addr | unsigned long | 需要刷新的起始物理地址 | 有效物理地址;MMU不存在时若为0则使用kvirt地址 |
| size | unsigned long | 需要刷新的内存大小(字节) | 大于0 |
osal_dcache_region_inv
头文件清单
功能说明
- 按指定地址范围无效化DCache,丢弃Cache中对应数据,后续读取从主存获取
- 基地址若未对齐到CACHE_LINE_SIZE(32字节),将被自动对齐到CACHE_LINE_SIZE边界
- 适用于DMA接收完成后,使CPU读取主存中由DMA写入的最新数据
前置条件
- 调用上下文:支持linux、liteos、seliteos系统
- addr必须指向有效内存区域
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| addr | void * | 需要无效化的起始地址 | 非NULL,指向有效内存区域 |
| size | unsigned long | 需要无效化的内存大小(字节) | 大于0 |
osal_dcache_region_clean
头文件清单
功能说明
- 按指定地址范围清理DCache,将Cache中脏数据写回主存但不无效化Cache行
- 适用于DMA发送前,确保主存中数据为最新,使DMA读取到正确数据
- 与osal_dcache_region_wb的区别:clean仅写回不无效化,wb写回并无效化
前置条件
- 调用上下文:支持liteos系统
- addr必须指向有效内存区域
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| addr | void * | 需要清理的起始地址 | 非NULL,指向有效内存区域 |
| size | unsigned int | 需要清理的内存大小(字节) | 大于0 |
osal_arch_dcache_flush_by_va
头文件清单
功能说明
- 按虚拟地址刷新DCache,将指定地址范围的Cache数据写回主存并无效化
- 适用于seliteos系统下的Cache一致性维护场景
- 基于虚拟地址直接操作,无需提供物理地址
前置条件
- 调用上下文:支持seliteos系统
- base_addr必须指向有效虚拟内存区域
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| base_addr | void * | 需要刷新的起始虚拟地址 | 非NULL,指向有效虚拟内存区域 |
| size | unsigned int | 需要刷新的内存大小(字节) | 大于0 |
osal_arch_dcahce_inv_by_va
头文件清单
功能说明
- 按虚拟地址无效化DCache,丢弃Cache中指定地址范围的数据,后续读取从主存获取
- 适用于seliteos系统下DMA接收完成后的Cache一致性维护
- 基于虚拟地址直接操作,无需提供物理地址
前置条件
- 调用上下文:支持seliteos系统
- base_addr必须指向有效虚拟内存区域
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| base_addr | void * | 需要无效化的起始虚拟地址 | 非NULL,指向有效虚拟内存区域 |
| size | unsigned int | 需要无效化的内存大小(字节) | 大于0 |