跳转至

cache

cache 提供数据缓存操作功能,支持按地址范围对 DCache (Data Cache) 进行刷新、无效化和清理操作,用于维护 CPU 与 DMA (Direct Memory Access) 之间的数据一致性。

头文件清单

#include "include/osal/memory/osal_cache.h"

接口清单

接口名称 功能简述
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

void osal_dcache_region_wb(void *kvirt, unsigned long phys_addr, unsigned long size)

头文件清单

#include "include/osal/memory/osal_cache.h"

功能说明

  • 按指定地址范围刷新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

void osal_dcache_region_inv(void *addr, unsigned long size)

头文件清单

#include "include/osal/memory/osal_cache.h"

功能说明

  • 按指定地址范围无效化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

void osal_dcache_region_clean(void *addr, unsigned int size)

头文件清单

#include "include/osal/memory/osal_cache.h"

功能说明

  • 按指定地址范围清理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

void osal_arch_dcache_flush_by_va(void *base_addr, unsigned int size)

头文件清单

#include "include/osal/memory/osal_cache.h"

功能说明

  • 按虚拟地址刷新DCache,将指定地址范围的Cache数据写回主存并无效化
  • 适用于seliteos系统下的Cache一致性维护场景
  • 基于虚拟地址直接操作,无需提供物理地址

前置条件

  • 调用上下文:支持seliteos系统
  • base_addr必须指向有效虚拟内存区域

入参

名称 参数类型 详细说明 约束取值范围
base_addr void * 需要刷新的起始虚拟地址 非NULL,指向有效虚拟内存区域
size unsigned int 需要刷新的内存大小(字节) 大于0

osal_arch_dcahce_inv_by_va

void osal_arch_dcahce_inv_by_va(void *base_addr, unsigned int size)

头文件清单

#include "include/osal/memory/osal_cache.h"

功能说明

  • 按虚拟地址无效化DCache,丢弃Cache中指定地址范围的数据,后续读取从主存获取
  • 适用于seliteos系统下DMA接收完成后的Cache一致性维护
  • 基于虚拟地址直接操作,无需提供物理地址

前置条件

  • 调用上下文:支持seliteos系统
  • base_addr必须指向有效虚拟内存区域

入参

名称 参数类型 详细说明 约束取值范围
base_addr void * 需要无效化的起始虚拟地址 非NULL,指向有效虚拟内存区域
size unsigned int 需要无效化的内存大小(字节) 大于0