设置指定内存区域属性结构中的 (A1, A0) 总线属性位。
相关数据类型
qurt_mem_region_attr_t
参数
in,out | attr | 指向内存区域属性结构的指针。 |
in | attr | 与内存区域一起使用的 (A1, A0) 位,表示为 2 位二进制数。 |
返回值
None.
依赖项
None.
在指定的内存区域属性结构中设置缓存操作模式。
相关数据类型
qurt_mem_region_attr_t
qurt_mem_cache_mode_t
参数
in,out | attr | 指向内存区域属性结构的指针。 |
in | mode | 缓存模式。返回值: |
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.
在指定的内存区域属性结构中设置内存映射。
映射值指示内存区域在虚拟内存中的映射方式。
相关数据类型
qurt_mem_region_attr_t
qurt_mem_mapping_t
参数
in,out | attr | 指向内存区域属性结构的指针。 |
in | mapping | 映射。 返回值: |
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.
在指定的内存属性结构中设置内存区域的 32 位物理地址。
注意:物理地址属性仅针对具有物理连续映射的内存区域显式设置。 否则 QuRT 在创建内存区域时自动设置它。
相关数据类型
qurt_mem_region_attr_t
qurt_paddr_t
参数
in,out | attr | 指向内存区域属性结构的指针。 |
in | addr | 内存区域物理地址。 |
返回值
None.
在指定的内存属性结构中设置内存区域的 64 位物理地址。
注意:物理地址属性仅针对具有物理连续映射的内存区域显式设置。 否则,它会在创建内存区域时由 QuRT 自动设置。
相关数据类型
qurt_mem_region_attr_t
qurt_paddr_64_t
参数
in,out | attr | 指向内存区域属性结构的指针。 |
in | addr_64 | 内存区域 64 位物理地址。 |
返回值
None.
在指定的内存区域属性结构中设置内存类型。
类型指示内存区域是应用程序本地的还是应用程序之间共享的。
相关数据类型
qurt_mem_region_attr_t
qurt_mem_region_type_t
参数
in,out | attr | 指向内存区域属性结构的指针。 |
in | type | 内存类型。 返回值: |
QURT_MEM_REGION_LOCAL | ||
QURT_MEM_REGION_SHARED |
返回值
None.
依赖项
None.
在指定的内存属性结构中设置内存区域虚拟地址。
相关数据类型
qurt_mem_region_attr_t
qurt_addr_t
参数
in,out | attr | 指向内存区域属性结构的指针。 |
in | addr | 内存区域虚拟地址。 |
返回值
None.
依赖项
None.
创建具有指定属性的内存区域。
应用程序使用 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
参数
out | region | 指向内存区域对象的指针。 |
in | size | 内存区域大小(以字节为单位)。 如果 size 不是 4K 的整数倍,则向上舍入到 4K 边界。 |
in | pool | 区域的内存池。 |
in | attr | 指向内存区域属性结构的指针。 |
返回值
QURT_EOK – 内存区域成功创建。
QURT_EMEM – 没有足够的内存来创建区域。
依赖项
None.
删除指定的内存区域。
如果调用者应用程序创建了内存区域,则将其删除并且系统回收其分配的内存。
如果不同的应用程序创建内存区域(并与调用者应用程序共享),则仅删除到该区域的本地内存映射; 系统不回收内存。
相关数据类型
qurt_mem_region_t
参数
in | region | 内存区域对象。 |
返回值
QURT_EOK – Region successfully deleted.
依赖项
None.
查询内存区域。
此函数确定指定的虚拟或物理地址是否存在动态创建的内存区域(第 21.42.1.1 节)。 一旦确定内存区域存在,它的属性就可以访问(第 21.25.1.1 节)。
注意:如果 QURT_EINVALID 被传递给 vaddr 和 paddr(或两者都不传递),此函数返回 QURT_EFATAL。
相关数据类型
qurt_mem_region_t
qurt_paddr_t
参数
out | region_handle | 指向内存区域对象(如果存在)的指针。 |
in | vaddr | 要查询的虚拟地址; 如果指定了 vaddr,则必须将 paddr 设置为值 QURT_EINVALID。 |
in | paddr | 要查询的物理地址; 如果指定了 paddr,则必须将 vaddr 设置为值 QURT_EINVALID。 |
返回值
QURT_EOK – 查询成功执行。
QURT_EMEM – 未找到指定地址的区域。
QURT_EFATAL – 输入参数无效。
依赖项
None.
确定指定的虚拟或物理地址是否存在动态创建的内存区域(第 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
参数
out | region_handle | 指向内存区域对象(如果存在)的指针。 |
in | vaddr | 要查询的虚拟地址; 如果指定了 vaddr,则必须将 paddr 设置为值 QURT_EINVALID。 |
in | paddr_64 | 64位物理地址查询; 如果指定了 paddr,则必须将 vaddr 设置为值 QURT_EINVALID。 |
返回值
QURT_EOK – 成功。
QURT_EMEM – 未找到指定地址的区域。
QURT_EFATAL – 输入参数无效。
依赖项
None.
执行内存事务的重量级同步。
直到源自当前线程的所有先前内存事务(缓存和未缓存的加载/存储、mem_locked 等)都完成并且全局可观察,此操作才会返回。
注意:注意:此操作是作为 Hexagon syncht 指令的包装器实现的。
返回值
None.
依赖项
None.
本节介绍内存管理服务的数据类型。
ent 上的 QuRT MMU 条目提取宏:tlbhi_tlblo
Value:
((((unsigned long long)ent >> 1) & 0x7FFFFF) | (((unsigned long long)ent >> 38) & 0x800000))
QuRT 内存区域属性类型。
QuRT 用户物理内存池类型。
QuRT 地址类型。
QuRT 物理内存地址类型。
QuRT 64 位物理内存地址类型。
QuRT 内存区域类型。
QuRT 内存 FS 区域类型。
QuRT 内存池类型。
QuRT size类型。
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: 保留为无效的映射类型。
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: 保留为无效的缓存类型。
内存访问权限。
Enumerator:
* QURT_PERM_READ: 读取权限。
* QURT_PERM_WRITE: 写权限。
* QURT_PERM_EXECUTE: 执行权限。
* QURT_PERM_NODUMP: 跳过转储映射。 在进程域转储期间,必须跳过主机内存上的一些映射,以避免内存从主机中删除并且 DSP 进程在删除映射之前崩溃的竞争条件。
* QURT_PERM_FULL: 读取、写入和执行权限。
QuRT 缓存类型; 指定数据缓存或指令缓存。
Enumerator:
* QRT_MEM_ICACHE: 指令缓存。
* QURT_MEM_DCACHE: 数据缓存。
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: 表刷新无效
QuRT 内存区域类型。
Enumerator:
* QURT_MEM_REGION_LOCAL: 局部
* QURT_MEM_REGION_LOCAL: 共享
* QURT_MEM_REGION_LOCAL: 用户访问
* QURT_MEM_REGION_LOCAL: FS
* QURT_MEM_REGION_LOCAL: 保留为无效的区域类型
Enumerator:
* HEXAGON_L1_I_CACHE: Hexagon L1 指令缓存
* HEXAGON_L1_D_CACHE: Hexagon L1 数据缓存
* HEXAGON_L2_CACHE: Hexagon L2 缓存
Enumerator:
* FULL_SIZE: 完全共享缓存,无需分区
* HALF_SIZE: 1/2 为主要,1/2 为辅助。
* THREE_QUARTER_SIZE: 3/4 为主要,1/4 为辅助。
* SEVEN_EIGHTHS_SIZE: 主用7/8,辅用1/8; 仅适用于 L2 缓存。
内存池对象。
本节介绍内存管理服务的宏。
在所有进程的地址空间中分配可用的虚拟内存。