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:一個位掩碼,包含此核心支援的基本使用者可見行為。定義了以下基本使用者 ABI

    • RISCV_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_FREQtime 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 版本中的供應商擴充套件。