RISC-V 硬件探测接口¶
RISC-V 硬件探测接口基于单个系统调用,该系统调用在 <asm/hwprobe.h> 中定义。
struct riscv_hwprobe {
__s64 key;
__u64 value;
};
long sys_riscv_hwprobe(struct riscv_hwprobe *pairs, size_t pair_count,
size_t cpusetsize, cpu_set_t *cpus,
unsigned int flags);
参数分为三组:键值对数组、CPU 集合和一些标志。键值对以计数提供。用户空间必须预先填充每个元素的键字段,如果内核识别该键,则内核将填充值。如果内核不知道某个键,则其键字段将被清除为 -1,其值设置为 0。CPU 集合由 CPU_SET(3) 定义,大小为 cpusetsize
字节。对于类似值的键(例如,vendor、arch、impl),仅当给定集合中的所有 CPU 具有相同的值时,返回的值才有效。否则,将返回 -1。对于类似布尔值的键,返回的值将是指定 CPU 值的逻辑与。用户模式可以为 cpus
提供 NULL,为 cpusetsize
提供 0,作为所有在线 CPU 的快捷方式。当前支持的标志是
RISCV_HWPROBE_WHICH_CPUS
:此标志基本上反转了 sys_riscv_hwprobe() 的行为。sys_riscv_hwprobe() 不会填充给定 CPU 集合的键的值,而是给出每个键的值,并且 CPU 集合会被 sys_riscv_hwprobe() 缩减到仅与每个键值对匹配的 CPU。匹配方式取决于键类型。对于类似值的键,匹配意味着与该值完全相同。对于类似布尔值的键,匹配意味着该对的值与 CPU 的值的逻辑与的结果与该对的值完全相同。此外,当cpus
是空集时,它将初始化为适合它的所有在线 CPU,即返回的 CPU 集合是可以由大小为cpusetsize
的 CPU 集合表示的所有在线 CPU 的缩减结果。
所有其他标志都保留供将来兼容使用,必须为零。
成功时返回 0,失败时返回负错误代码。
定义了以下键
RISCV_HWPROBE_KEY_MVENDORID
:包含mvendorid
的值,如 RISC-V 特权架构规范中所定义。RISCV_HWPROBE_KEY_MARCHID
:包含marchid
的值,如 RISC-V 特权架构规范中所定义。RISCV_HWPROBE_KEY_MIMPID
:包含mimpid
的值,如 RISC-V 特权架构规范中所定义。RISCV_HWPROBE_KEY_BASE_BEHAVIOR
:一个位掩码,包含此内核支持的基本用户可见行为。定义了以下基本用户 ABIRISCV_HWPROBE_BASE_BEHAVIOR_IMA
:支持 rv32ima 或 rv64ima,如用户 ISA 的 2.2 版本和特权 ISA 的 1.10 版本中所定义,具有以下已知例外情况(可能会添加更多例外情况,但前提是可以证明用户 ABI 未损坏)fence.i
指令不能由用户空间程序直接执行(它仍然可以通过内核控制的机制(例如 vDSO)在用户空间中执行)。
RISCV_HWPROBE_KEY_IMA_EXT_0
:一个位掩码,包含与RISCV_HWPROBE_BASE_BEHAVIOR_IMA
:基本系统行为兼容的扩展。RISCV_HWPROBE_IMA_FD
:支持 F 和 D 扩展,如 RISC-V ISA 手册的提交 cd20cee(“FMIN/FMAX 现在实现 minimumNumber/maximumNumber,而不是 minNum/maxNum”)中所定义。RISCV_HWPROBE_IMA_C
:支持 C 扩展,如 RISC-V ISA 手册的 2.2 版本中所定义。RISCV_HWPROBE_IMA_V
:支持 V 扩展,如 RISC-V 向量扩展手册的 1.0 版本中所定义。RISCV_HWPROBE_EXT_ZBA
:Zba 地址生成扩展是支持的,如位操作 ISA 扩展的 1.0 版本中所定义。
RISCV_HWPROBE_EXT_ZBB
:支持 Zbb 扩展,如在位操作 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZBS
:支持 Zbs 扩展,如在位操作 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZICBOZ
:支持 Zicboz 扩展,如在 riscv-CMOs 的提交 3dd606f(“创建 cmobase-v1.0.pdf”)中批准。
RISCV_HWPROBE_EXT_ZBC
支持 Zbc 扩展,如定义在位操作 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZBKB
支持 Zbkb 扩展,如在标量加密 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZBKC
支持 Zbkc 扩展,如在标量加密 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZBKX
支持 Zbkx 扩展,如在标量加密 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZKND
支持 Zknd 扩展,如在标量加密 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZKNE
支持 Zkne 扩展,如在标量加密 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZKNH
支持 Zknh 扩展,如在标量加密 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZKSED
支持 Zksed 扩展,如在标量加密 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZKSH
支持 Zksh 扩展,如在标量加密 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZKT
支持 Zkt 扩展,如定义在标量加密 ISA 扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZVBB
:支持 Zvbb 扩展,如在 RISC-V 加密扩展卷 II 的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZVBC
:支持 Zvbc 扩展,如在 RISC-V 加密扩展卷 II 的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZVKB
:支持 Zvkb 扩展,如在 RISC-V 加密扩展卷 II 的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZVKG
:支持 Zvkg 扩展,如在 RISC-V 加密扩展卷 II 的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZVKNED
:支持 Zvkned 扩展,如在 RISC-V 加密扩展卷 II 的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZVKNHA
:支持 Zvknha 扩展,如在 RISC-V 加密扩展卷 II 的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZVKNHB
:支持 Zvknhb 扩展,如在 RISC-V 加密扩展卷 II 的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZVKSED
:支持 Zvksed 扩展,如在 RISC-V 加密扩展卷 II 的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZVKSH
:支持 Zvksh 扩展,如在 RISC-V 加密扩展卷 II 的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZVKT
:支持 Zvkt 扩展,如在 RISC-V 加密扩展卷 II 的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZFH
:支持 Zfh 扩展版本 1.0如 RISC-V ISA 手册中所定义。
RISCV_HWPROBE_EXT_ZFHMIN
:Zfhmin 扩展版本 1.0 是支持的,如 RISC-V ISA 手册中所定义。
RISCV_HWPROBE_EXT_ZIHINTNTL
:Zihintntl 扩展版本 1.0是支持的,如 RISC-V ISA 手册中所定义。
RISCV_HWPROBE_EXT_ZVFH
:支持 Zvfh 扩展,如在 RISC-V 向量手册中定义,从 commit e2ccd0548d6c (“Remove draft warnings from Zvfh[min]”) 开始。
RISCV_HWPROBE_EXT_ZVFHMIN
:支持 Zvfhmin 扩展,如在 RISC-V 向量手册中定义,从 commit e2ccd0548d6c (“Remove draft warnings from Zvfh[min]”) 开始。
RISCV_HWPROBE_EXT_ZFA
:支持 Zfa 扩展,如在 RISC-V ISA 手册中定义,从 commit 056b6ff467c7 (“Zfa is ratified”) 开始。
RISCV_HWPROBE_EXT_ZTSO
:支持 Ztso 扩展,如在 RISC-V ISA 手册中定义,从 commit 5618fb5a216b (“Ztso is now ratified.”) 开始。
RISCV_HWPROBE_EXT_ZACAS
:支持 Zacas 扩展,如在原子比较和交换 (CAS) 指令手册中定义,从 commit 5059e0ca641c (“update to ratified”) 开始。
RISCV_HWPROBE_EXT_ZICNTR
:Zicntr 扩展版本 2.0是支持的,如 RISC-V ISA 手册中所定义。
RISCV_HWPROBE_EXT_ZICOND
:支持 Zicond 扩展,如在 RISC-V 整数条件 (Zicond) 操作扩展手册中定义,从 commit 95cf1f9 (“Add changes requested by Ved during signoff”) 开始
RISCV_HWPROBE_EXT_ZIHINTPAUSE
:Zihintpause 扩展是支持的,如 RISC-V ISA 手册中定义,从 commit d8ab5c78c207 (“Zihintpause is ratified”) 开始。
RISCV_HWPROBE_EXT_ZIHPM
:Zihpm 扩展版本 2.0是支持的,如 RISC-V ISA 手册中所定义。
RISCV_HWPROBE_EXT_ZVE32X
:向量子扩展 Zve32x 受支持,如 RISC-V 向量扩展手册的 1.0 版本中所定义。RISCV_HWPROBE_EXT_ZVE32F
:向量子扩展 Zve32f 受支持,如 RISC-V 向量扩展手册的 1.0 版本中所定义。RISCV_HWPROBE_EXT_ZVE64X
:向量子扩展 Zve64x 受支持,如 RISC-V 向量扩展手册的 1.0 版本中所定义。RISCV_HWPROBE_EXT_ZVE64F
:向量子扩展 Zve64f 受支持,如 RISC-V 向量扩展手册的 1.0 版本中所定义。RISCV_HWPROBE_EXT_ZVE64D
:向量子扩展 Zve64d 受支持,如 RISC-V 向量扩展手册的 1.0 版本中所定义。RISCV_HWPROBE_EXT_ZIMOP
:支持 Zimop May-Be-Operations 扩展如 RISC-V ISA 手册中定义,从 commit 58220614a5f (“Zimop is ratified/1.0”) 开始。
RISCV_HWPROBE_EXT_ZCA
:Zca 扩展是 Zc* 标准的一部分用于减小代码大小的扩展,如 riscv-code-size-reduction 的 commit 8be3419c1c0 (“Zcf doesn’t exist on RV64 as it contains no instructions”) 中批准。
RISCV_HWPROBE_EXT_ZCB
:Zcb 扩展是 Zc* 标准的一部分用于减小代码大小的扩展,如 riscv-code-size-reduction 的 commit 8be3419c1c0 (“Zcf doesn’t exist on RV64 as it contains no instructions”) 中批准。
RISCV_HWPROBE_EXT_ZCD
:Zcd 扩展是 Zc* 标准的一部分用于减小代码大小的扩展,如 riscv-code-size-reduction 的 commit 8be3419c1c0 (“Zcf doesn’t exist on RV64 as it contains no instructions”) 中批准。
RISCV_HWPROBE_EXT_ZCF
:Zcf 扩展是 Zc* 标准的一部分用于减小代码大小的扩展,如 riscv-code-size-reduction 的 commit 8be3419c1c0 (“Zcf doesn’t exist on RV64 as it contains no instructions”) 中批准。
RISCV_HWPROBE_EXT_ZCMOP
:支持 Zcmop May-Be-Operations 扩展如 RISC-V ISA 手册中定义,从 commit c732a4f39a4 (“Zcmop is ratified/1.0”) 开始。
RISCV_HWPROBE_EXT_ZAWRS
:支持 Zawrs 扩展,如在 riscv-isa-manual 的 commit 98918c844281 (“Merge pull request #1217 from riscv/zawrs”) 中批准。
RISCV_HWPROBE_EXT_ZAAMO
:支持 Zaamo 扩展,如在 RISC-V ISA 手册中定义,从 commit e87412e621f1 (“integrate Zaamo and Zalrsc text (#1304)”) 开始。
RISCV_HWPROBE_EXT_ZALRSC
:支持 Zalrsc 扩展,如在 RISC-V ISA 手册中定义,从 commit e87412e621f1 (“integrate Zaamo and Zalrsc text (#1304)”) 开始。
RISCV_HWPROBE_EXT_SUPM
:支持 Supm 扩展,如在 RISC-V 指针掩码扩展的 1.0 版本中定义。
RISCV_HWPROBE_EXT_ZFBFMIN
:支持 Zfbfmin 扩展,如在 RISC-V ISA 手册中定义,从 commit 4dc23d6229de (“Added Chapter title to BF16”) 开始。
RISCV_HWPROBE_EXT_ZVFBFMIN
:支持 Zvfbfmin 扩展,如在 RISC-V ISA 手册中定义,从 commit 4dc23d6229de (“Added Chapter title to BF16”) 开始。
RISCV_HWPROBE_EXT_ZVFBFWMA
:支持 Zvfbfwma 扩展,如在 RISC-V ISA 手册中定义,从 commit 4dc23d6229de (“Added Chapter title to BF16”) 开始。
RISCV_HWPROBE_EXT_ZICBOM
:支持 Zicbom 扩展,如在 riscv-CMOs 的提交 3dd606f(“创建 cmobase-v1.0.pdf”)中批准。
RISCV_HWPROBE_EXT_ZABHA
:支持 Zabha 扩展,如在 riscv-zabha 的 commit 49f49c842ff9 (“Update to Rafified state”) 中批准。
RISCV_HWPROBE_KEY_CPUPERF_0
:已弃用。返回与RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF
类似的值,但该键被错误地归类为位掩码而不是值。
RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF
:一个枚举值,描述了在选定的处理器集合上,未对齐的标量原生字访问的性能。RISCV_HWPROBE_MISALIGNED_SCALAR_UNKNOWN
:未对齐的标量访问的性能未知。RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED
:未对齐的标量访问通过软件在内核中或内核以下进行仿真。这些访问总是非常慢。RISCV_HWPROBE_MISALIGNED_SCALAR_SLOW
:未对齐的标量原生字大小的访问比等量的字节访问慢。未对齐的访问可能直接在硬件中支持,或者由软件捕获和仿真。RISCV_HWPROBE_MISALIGNED_SCALAR_FAST
:未对齐的标量原生字大小的访问比等量的字节访问快。RISCV_HWPROBE_MISALIGNED_SCALAR_UNSUPPORTED
:完全不支持未对齐的标量访问,并且将生成未对齐的地址错误。
RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE
:一个无符号整数,表示 Zicboz 块的大小(以字节为单位)。RISCV_HWPROBE_KEY_HIGHEST_VIRT_ADDRESS
:一个无符号长整型,表示可用的最高用户空间虚拟地址。RISCV_HWPROBE_KEY_TIME_CSR_FREQ
:time CSR 的频率(以 Hz 为单位)。RISCV_HWPROBE_KEY_MISALIGNED_VECTOR_PERF
:一个枚举值,描述了在选定的处理器集合上,未对齐的向量访问的性能。
RISCV_HWPROBE_MISALIGNED_VECTOR_UNKNOWN
:未对齐的向量访问的性能未知。RISCV_HWPROBE_MISALIGNED_VECTOR_SLOW
:使用向量寄存器的 32 位未对齐访问比通过向量寄存器进行的等量字节访问慢。未对齐的访问可能直接在硬件中支持,或者由软件捕获和仿真。RISCV_HWPROBE_MISALIGNED_VECTOR_FAST
:使用向量寄存器的 32 位未对齐访问比通过向量寄存器进行的等量字节访问快。RISCV_HWPROBE_MISALIGNED_VECTOR_UNSUPPORTED
:完全不支持未对齐的向量访问,并且将生成未对齐的地址错误。
RISCV_HWPROBE_KEY_VENDOR_EXT_THEAD_0
:一个位掩码,包含与RISCV_HWPROBE_BASE_BEHAVIOR_IMA
:基本系统行为兼容的 thead 供应商扩展。T-HEAD
RISCV_HWPROBE_VENDOR_EXT_XTHEADVECTOR
:xtheadvector 供应商支持 T-Head ISA 扩展规范中的扩展,从 commit a18c801634 (“Add T-Head VECTOR vendor extension. “) 开始。
RISCV_HWPROBE_KEY_ZICBOM_BLOCK_SIZE
:一个无符号整数,表示 Zicbom 块的大小(以字节为单位)。RISCV_HWPROBE_KEY_VENDOR_EXT_SIFIVE_0
:一个位掩码,包含与RISCV_HWPROBE_BASE_BEHAVIOR_IMA
:基本系统行为兼容的 sifive 供应商扩展。SIFIVE
RISCV_HWPROBE_VENDOR_EXT_XSFVQMACCDOD
:Xsfqmaccdod 供应商支持 SiFive Int8 矩阵乘法扩展规范的 1.1 版本中的扩展。
RISCV_HWPROBE_VENDOR_EXT_XSFVQMACCQOQ
:Xsfqmaccqoq 供应商支持 SiFive Int8 矩阵乘法指令扩展规范的 1.1 版本中的扩展。
RISCV_HWPROBE_VENDOR_EXT_XSFVFNRCLIPXFQF
:Xsfvfnrclipxfqf支持 SiFive FP32-to-int8 范围剪辑指令扩展规范的 1.0 版本中的供应商扩展。
RISCV_HWPROBE_VENDOR_EXT_XSFVFWMACCQQQ
:Xsfvfwmaccqqq支持矩阵乘法累加指令扩展规范的 1.0 版本中的供应商扩展。