• B_QuRT_User_Guide(35)


    B_QuRT_User_Guide(35)

    21.35 qurt_mem_region_attr_set_bus_attr()

    21.35.1 功能文档

    21.35.1.1 static void qurt_mem_region_attr_set_bus_attr ( qurt_mem_region_attr_t ∗ attr, unsigned abits )

    设置指定内存区域属性结构中的 (A1, A0) 总线属性位。

    相关数据类型
    qurt_mem_region_attr_t

    参数

    in,outattr指向内存区域属性结构的指针。
    inattr与内存区域一起使用的 (A1, A0) 位,表示为 2 位二进制数。

    返回值
    None.

    依赖项
    None.

    21.36 qurt_mem_region_attr_set_cache_mode()

    21.36.1 功能文档

    21.36.1.1 static void qurt_mem_region_attr_set_cache_mode ( qurt_mem_region_attr_t ∗ attr, qurt_mem_cache_mode_t mode )

    在指定的内存区域属性结构中设置缓存操作模式。

    相关数据类型
    qurt_mem_region_attr_t
    qurt_mem_cache_mode_t

    参数

    in,outattr指向内存区域属性结构的指针。
    inmode缓存模式。返回值:

    QURT_MEM_CACHE_WRITEBACK

    QURT_MEM_CACHE_WRITETHROUGH

    QURT_MEM_CACHE_WRITEBACK_
    NONL2CACHEABLE

    QURT_MEM_CACHE_WRITETHROUGH_
    NONL2CACHEABLE

    QURT_MEM_CACHE_WRITEBACK_L2CACHEABLE

    QURT_MEM_CACHE_WRITETHROUGH_
    L2CACHEABLE

    QURT_MEM_CACHE_NONE

    返回值
    None.

    依赖项
    None.

    21.37 qurt_mem_region_attr_set_mapping()

    21.37.1 功能文档

    21.37.1.1 static void qurt_mem_region_attr_set_mapping ( qurt_mem_region_attr_t ∗ attr, qurt_mem_mapping_t mapping )

    在指定的内存区域属性结构中设置内存映射。
    映射值指示内存区域在虚拟内存中的映射方式。

    相关数据类型
    qurt_mem_region_attr_t
    qurt_mem_mapping_t

    参数

    in,outattr指向内存区域属性结构的指针。
    inmapping映射。 返回值:

    QURT_MEM_MAPPING_VIRTUAL

    QURT_MEM_MAPPING_PHYS_CONTIGUOUS

    QURT_MEM_MAPPING_IDEMPOTENT

    QURT_MEM_MAPPING_VIRTUAL_FIXED

    QURT_MEM_MAPPING_NONE

    QURT_MEM_MAPPING_VIRTUAL_RANDOM

    QURT_MEM_MAPPING_INVALID

    返回值
    None.

    依赖项
    None.

    21.38 qurt_mem_region_attr_set_physaddr()

    21.38.1 功能文档

    21.38.1.1 static void qurt_mem_region_attr_set_physaddr ( qurt_mem_region_attr_t ∗ attr, qurt_paddr_t addr )

    在指定的内存属性结构中设置内存区域的 32 位物理地址。

    注意:物理地址属性仅针对具有物理连续映射的内存区域显式设置。  否则 QuRT 在创建内存区域时自动设置它。
    
    • 1

    相关数据类型
    qurt_mem_region_attr_t
    qurt_paddr_t

    参数

    in,outattr指向内存区域属性结构的指针。
    inaddr内存区域物理地址。

    返回值
    None.

    21.39 qurt_mem_region_attr_set_physaddr_64()

    21.39.1 功能文档

    21.39.1.1 static void qurt_mem_region_attr_set_physaddr_64 ( qurt_mem_region_attr_t ∗ attr, qurt_paddr_64_t addr_64 )

    在指定的内存属性结构中设置内存区域的 64 位物理地址。

    注意:物理地址属性仅针对具有物理连续映射的内存区域显式设置。  否则,它会在创建内存区域时由 QuRT 自动设置。
    
    • 1

    相关数据类型
    qurt_mem_region_attr_t
    qurt_paddr_64_t

    参数

    in,outattr指向内存区域属性结构的指针。
    inaddr_64内存区域 64 位物理地址。

    返回值
    None.

    21.40 qurt_mem_region_attr_set_type()

    21.40.1 功能文档

    21.40.1.1 static void qurt_mem_region_attr_set_type ( qurt_mem_region_attr_t ∗ attr,qurt_mem_region_type_t type )

    在指定的内存区域属性结构中设置内存类型。
    类型指示内存区域是应用程序本地的还是应用程序之间共享的。

    相关数据类型
    qurt_mem_region_attr_t
    qurt_mem_region_type_t

    参数

    in,outattr指向内存区域属性结构的指针。
    intype内存类型。 返回值:

    QURT_MEM_REGION_LOCAL

    QURT_MEM_REGION_SHARED

    返回值
    None.

    依赖项
    None.

    21.41 qurt_mem_region_attr_set_virtaddr()

    21.41.1 功能文档

    21.41.1.1 static void qurt_mem_region_attr_set_virtaddr ( qurt_mem_region_attr_t ∗ attr, qurt_addr_t addr )

    在指定的内存属性结构中设置内存区域虚拟地址。

    相关数据类型
    qurt_mem_region_attr_t
    qurt_addr_t

    参数

    in,outattr指向内存区域属性结构的指针。
    inaddr内存区域虚拟地址。

    返回值
    None.

    依赖项
    None.

    21.42 qurt_mem_region_create()

    21.42.1 功能文档

    21.42.1.1 int qurt_mem_region_create ( qurt_mem_region_t ∗ region, qurt_size_t size, qurt_mem_pool_t pool, qurt_mem_region_attr_t ∗ attr )

    创建具有指定属性的内存区域。

    应用程序使用 qurt_mem_region_attr_init() 和 qurt_mem_region_attr_set_bus_attr() 初始化内存区域属性结构。

    如果虚拟地址属性设置为其默认值(第 21.34.1.1 节),则内存区域的虚拟地址会自动分配任何可用的虚拟地址值。
    如果内存映射属性设置为虚拟映射,则内存区域的物理地址也会自动分配。

    注意:物理地址属性在属性结构中显式设置,仅适用于具有物理连续映射映射的内存区域。
    
    • 1

    内存区域总是分配给内存池。 pool 值指定内存区域分配到的内存池。

    注意:如果 attr 指定为 NULL,则使用默认属性值创建内存区域(第 21.34.1.1 节)。  QuRT 预定义了内存池对象 qurt_mem_default_pool(第 21 节),它在 SMI 内存中分配内存区域。
    
    • 1

    相关数据类型
    qurt_mem_region_t
    qurt_size_t
    qurt_mem_pool_t
    qurt_mem_region_attr_t

    参数

    outregion指向内存区域对象的指针。
    insize内存区域大小(以字节为单位)。 如果 size 不是 4K 的整数倍,则向上舍入到 4K 边界。
    inpool区域的内存池。
    inattr指向内存区域属性结构的指针。

    返回值
    QURT_EOK – 内存区域成功创建。
    QURT_EMEM – 没有足够的内存来创建区域。

    依赖项
    None.

    21.43 qurt_mem_region_delete()

    21.43.1 功能文档

    21.43.1.1 int qurt_mem_region_delete ( qurt_mem_region_t region )

    删除指定的内存区域。

    如果调用者应用程序创建了内存区域,则将其删除并且系统回收其分配的内存。

    如果不同的应用程序创建内存区域(并与调用者应用程序共享),则仅删除到该区域的本地内存映射; 系统不回收内存。

    相关数据类型
    qurt_mem_region_t

    参数

    inregion内存区域对象。

    返回值
    QURT_EOK – Region successfully deleted.

    依赖项
    None.

    21.44 qurt_mem_region_query()

    21.44.1 功能文档

    21.44.1.1 int qurt_mem_region_query (qurt_mem_region_t * region_handle, qurt_addr_t vaddr, qurt_paddr_t paddr)

    查询内存区域。
    此函数确定指定的虚拟或物理地址是否存在动态创建的内存区域(第 21.42.1.1 节)。 一旦确定内存区域存在,它的属性就可以访问(第 21.25.1.1 节)。

    注意:如果 QURT_EINVALID 被传递给 vaddr 和 paddr(或两者都不传递),此函数返回 QURT_EFATAL。
    
    • 1

    相关数据类型
    qurt_mem_region_t
    qurt_paddr_t

    参数

    outregion_handle指向内存区域对象(如果存在)的指针。
    invaddr要查询的虚拟地址; 如果指定了 vaddr,则必须将 paddr 设置为值 QURT_EINVALID。
    inpaddr要查询的物理地址; 如果指定了 paddr,则必须将 vaddr 设置为值 QURT_EINVALID。

    返回值
    QURT_EOK – 查询成功执行。
    QURT_EMEM – 未找到指定地址的区域。
    QURT_EFATAL – 输入参数无效。

    依赖项
    None.

    21.45 qurt_mem_region_query_64()

    21.45.1 功能文档

    21.45.1.1 int qurt_mem_region_query_64 ( qurt_mem_region_t ∗ region_handle,qurt_addr_t vaddr, qurt_paddr_64_t paddr_64 )

    确定指定的虚拟或物理地址是否存在动态创建的内存区域(第 21.42.1.1 节)。 一旦确定内存区域存在,它的属性就可以访问(第 21.25.1.1 节)。

    注意:如果将 QURT_EINVALID 传递给 vaddr 和 paddr(或两者都不传递),则此函数返回 QURT_EFATAL。
    
    • 1

    相关数据类型
    qurt_mem_region_t
    qurt_addr_t
    qurt_paddr_64_t

    参数

    outregion_handle指向内存区域对象(如果存在)的指针。
    invaddr要查询的虚拟地址; 如果指定了 vaddr,则必须将 paddr 设置为值 QURT_EINVALID。
    inpaddr_6464位物理地址查询; 如果指定了 paddr,则必须将 vaddr 设置为值 QURT_EINVALID。

    返回值
    QURT_EOK – 成功。
    QURT_EMEM – 未找到指定地址的区域。
    QURT_EFATAL – 输入参数无效。

    依赖项
    None.

    21.46 qurt_mem_syncht()

    21.46.1 功能文档

    21.46.1.1 static void qurt_mem_syncht ( void )

    执行内存事务的重量级同步。

    直到源自当前线程的所有先前内存事务(缓存和未缓存的加载/存储、mem_locked 等)都完成并且全局可观察,此操作才会返回。

    注意:注意:此操作是作为 Hexagon syncht 指令的包装器实现的。
    
    • 1

    返回值
    None.

    依赖项
    None.

    21.47 数据类型

    本节介绍内存管理服务的数据类型。

    • 内存池在 QuRT 中表示为 qurt_mem_pool_t 类型的对象。
    • 内存区域表示为qurt_mem_region_t 类型的对象。
    • 内存区域属性存储在qurt_mem_region_attr_t 类型的结构中。
    • 内存区域类型存储为qurt_mem_region_type_t 类型的值。
    • 内存区域映射被指定为qurt_mem_mapping_t 类型的值。
    • 缓存类型被指定为qurt_mem_cache_type_t 类型的值。
    • 缓存模式被指定为qurt_mem_cache_mode_t 类型的值。
    • 高速缓存操作码被指定为qurt_mem_cache_op_t 类型的值。

    21.47.1 Define 文档

    21.47.1.1 #define QURT_POOL_REMOVE_ALL_OR_NONE 1

    21.47.1.2 #define PAGE_SHIFT_AMT 12

    ent 上的 QuRT MMU 条目提取宏:tlbhi_tlblo

    21.47.1.3 #define QURT_MMU_EXTRACT_PPAGE( ent )

    Value:
    ((((unsigned long long)ent >> 1) & 0x7FFFFF) | (((unsigned long long)ent >> 38) & 0x800000))

    21.47.2 数据结构文档

    21.47.2.1 struct qurt_mem_region_attr_t

    QuRT 内存区域属性类型。

    21.47.2.2 struct qurt_mem_pool_attr_t

    QuRT 用户物理内存池类型。

    21.47.3 Typedef 定义文档

    21.47.3.1 typedef unsigned int qurt_addr_t

    QuRT 地址类型。

    21.47.3.2 typedef unsigned int qurt_paddr_t

    QuRT 物理内存地址类型。

    21.47.3.3 typedef unsigned long long qurt_paddr_64_t

    QuRT 64 位物理内存地址类型。

    21.47.3.4 typedef unsigned int qurt_mem_region_t

    QuRT 内存区域类型。

    21.47.3.5 typedef unsigned int qurt_mem_fs_region_t

    QuRT 内存 FS 区域类型。

    21.47.3.6 typedef unsigned int qurt_mem_pool_t

    QuRT 内存池类型。

    21.47.3.7 typedef unsigned int qurt_size_t

    QuRT size类型。

    21.47.4 枚举类型文档

    21.47.4.1 enum qurt_mem_mapping_t

    QuRT 内存区域映射类型。
    Enumerator:
    * QURT_MEM_MAPPING_VIRTUAL: 默认模式。 区域虚拟地址范围映射到物理内存的可用连续区域。 QuRT 系统选择物理内存中的基地址。 这可以最有效地使用虚拟内存,并且适用于大多数内存用例。
    * QURT_MEM_MAPPING_PHYS_CONTIGUOUS: 区域虚拟地址空间必须映射到物理内存的连续区域。 当内存区域被绕过 Hexagon 虚拟内存寻址的外部设备访问时,这是必要的。 必须明确指定物理内存中的基地址。
    * QURT_MEM_MAPPING_IDEMPOTENT: 区域虚拟地址空间映射到物理内存的相同区域。
    * QURT_MEM_MAPPING_VIRTUAL_FIXED: 区域虚拟地址空间映射到物理内存的指定区域或(如果未指定区域)到任何可用的物理内存。 使用此映射从通过使用映射调用 qurt_mem_region_create() 保留的虚拟空间创建区域。
    * QURT_MEM_MAPPING_NONE: 保留一个虚拟内存区域 (VMA)。 如果不先删除内存区域,则不允许重新映射虚拟范围。 当这样一个区域被删除时,其对应的虚拟内存地址保持不变。
    * QURT_MEM_MAPPING_VIRTUAL_RANDOM: 系统选择一个随机虚拟地址并将其映射到可用的连续物理地址。
    * QURT_MEM_MAPPING_PHYS_DISCONTIGUOUS: 在虚拟内存连续时分配不连续的物理内存块。 当有比请求大小更小的连续块时,这会有所帮助。 物理地址不作为 get_attr 调用的一部分提供。
    * QURT_MEM_MAPPING_INVALID: 保留为无效的映射类型。

    21.47.4.2 enum qurt_mem_cache_mode_t

    QuRT 缓存类型模式。

    Enumerator:
    * QURT_MEM_CACHE_WRITEBACK: 回写。
    * QURT_MEM_CACHE_NONE_SHARED: 可以与其他子系统共享的普通未缓存内存。
    * QURT_MEM_CACHE_WRITETHROUGH: 通写.
    * QURT_MEM_CACHE_WRITEBACK_NONL2CACHEABLE: 回写非 L2 缓存
    * QURT_MEM_CACHE_WRITETHROUGH_NONL2CACHEABLE: 通写非 L2 缓存写入。
    * QURT_MEM_CACHE_WRITEBACK_L2CACHEABLE: 回写L2 缓存
    * QURT_MEM_CACHE_WRITETHROUGH_L2CACHEABLE: 通写 L2 缓存写入。
    * QURT_MEM_CACHE_DEVICE: 易失性内存映射设备。 无法通过中断、重新排序或重放来取消对设备内存的访问。
    * QURT_MEM_CACHE_NONE: 已弃用 - 改用 QURT_MEM_CACHE_DEVICE。
    * QURT_MEM_CACHE_DEVICE_SFC: 启用对未完成事务数量的限制。
    * QURT_MEM_CACHE_INVALID: 保留为无效的缓存类型。

    21.47.4.3 enum qurt_perm_t

    内存访问权限。

    Enumerator:
    * QURT_PERM_READ: 读取权限。
    * QURT_PERM_WRITE: 写权限。
    * QURT_PERM_EXECUTE: 执行权限。
    * QURT_PERM_NODUMP: 跳过转储映射。 在进程域转储期间,必须跳过主机内存上的一些映射,以避免内存从主机中删除并且 DSP 进程在删除映射之前崩溃的竞争条件。
    * QURT_PERM_FULL: 读取、写入和执行权限。

    21.47.4.4 enum qurt_mem_cache_type_t

    QuRT 缓存类型; 指定数据缓存或指令缓存。

    Enumerator:
    * QRT_MEM_ICACHE: 指令缓存。
    * QURT_MEM_DCACHE: 数据缓存。

    21.47.4.5 enum qurt_mem_cache_op_t

    QuRT 缓存操作码类型。

    Enumerator:
    * QURT_MEM_CACHE_FLUSH: 刷新
    * QURT_MEM_CACHE_INVALIDATE: 无效
    * QURT_MEM_CACHE_FLUSH_INVALIDATE: 刷新无效
    * QURT_MEM_CACHE_FLUSH_ALL: 刷新全部
    * QURT_MEM_CACHE_FLUSH_INVALIDATE_ALL: 所有刷新均无效
    * QURT_MEM_CACHE_TABLE_FLUSH_INVALIDATE: 表刷新无效

    21.47.4.6 enum qurt_mem_region_type_t

    QuRT 内存区域类型。

    Enumerator:
    * QURT_MEM_REGION_LOCAL: 局部
    * QURT_MEM_REGION_LOCAL: 共享
    * QURT_MEM_REGION_LOCAL: 用户访问
    * QURT_MEM_REGION_LOCAL: FS
    * QURT_MEM_REGION_LOCAL: 保留为无效的区域类型

    21.47.4.7 enum qurt_cache_type_t

    Enumerator:
    * HEXAGON_L1_I_CACHE: Hexagon L1 指令缓存
    * HEXAGON_L1_D_CACHE: Hexagon L1 数据缓存
    * HEXAGON_L2_CACHE: Hexagon L2 缓存

    21.47.4.8 enum qurt_cache_partition_size_t

    Enumerator:
    * FULL_SIZE: 完全共享缓存,无需分区
    * HALF_SIZE: 1/2 为主要,1/2 为辅助。
    * THREE_QUARTER_SIZE: 3/4 为主要,1/4 为辅助。
    * SEVEN_EIGHTHS_SIZE: 主用7/8,辅用1/8; 仅适用于 L2 缓存。

    21.47.5 变量文档

    21.47.5.1 qurt_mem_pool_t qurt_mem_default_pool

    内存池对象。

    21.48 宏

    本节介绍内存管理服务的宏。

    21.48.1 Define 定义文档

    21.48.1.1 #define QURT_SYSTEM_ALLOC_VIRTUAL 1

    在所有进程的地址空间中分配可用的虚拟内存。

  • 相关阅读:
    SpringBoot+Vue+Element-UI实现鞋类秒杀商城
    C++-openssl-aes-cbc-pkcs5
    [深入理解SSD] 总目录
    用于交通事件前检测的实时视频监控系统
    【Web安全】跨站点请求伪造CSRF
    Prompt 指北:如何写好 Prompt,让 GPT 的回答更加精准
    centos7安装mysql5.7步骤(图解版)
    MQTT网关读取西门子PLC数据传输到阿里云平台案例教程
    c++学习---第四部分下
    SpringBoot项目配置热部署启动 及 热部署失效的问题解决
  • 原文地址:https://blog.csdn.net/weixin_38498942/article/details/125539003