B_QuRT_User_Guide(35)

281 篇文章 30 订阅

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 在创建内存区域时自动设置它。

相关数据类型
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 自动设置。

相关数据类型
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 节),则内存区域的虚拟地址会自动分配任何可用的虚拟地址值。
如果内存映射属性设置为虚拟映射,则内存区域的物理地址也会自动分配。

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

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

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

相关数据类型
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。

相关数据类型
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。

相关数据类型
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 指令的包装器实现的。

返回值
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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值