]> git.ipfire.org Git - thirdparty/openssl.git/blobdiff - include/crypto/riscv_arch.def
riscv: use hwprobe syscall for capability detection
[thirdparty/openssl.git] / include / crypto / riscv_arch.def
index 70b0647ae2aed98822a19eff5419c16a0eea103b..23d46b4a8b1fa9512af3f5380135b32c9e0faff8 100644 (file)
  * second argument as the index in the array where the capability will be stored
  * and third argument as the index of the bit to be used to encode the
  * capability.
- * RISCV_DEFINE_CAP(EXTENSION NAME, array index, bit index) */
+ *
+ * The fourth and the fifth arguments are copied from linux header asm/hwprobe.h.
+ * Directly coping values instead of macro names comes from the fact
+ * that an old version may lack definition of some macro.
+ * When there is no hwprobe key/value pair for a capability, the key is set to -1
+ * and the value is set to 0, as when the hwprobe syscall returns a key of -1,
+ * the value is set to 0 and the corresponding capability would not be enabled.
+ *
+ * RISCV_DEFINE_CAP(EXTENSION NAME, array index, bit index, hwprobe key, hwprobe value) */
 
-RISCV_DEFINE_CAP(ZBA, 0, 0)
-RISCV_DEFINE_CAP(ZBB, 0, 1)
-RISCV_DEFINE_CAP(ZBC, 0, 2)
-RISCV_DEFINE_CAP(ZBS, 0, 3)
-RISCV_DEFINE_CAP(ZBKB, 0, 4)
-RISCV_DEFINE_CAP(ZBKC, 0, 5)
-RISCV_DEFINE_CAP(ZBKX, 0, 6)
-RISCV_DEFINE_CAP(ZKND, 0, 7)
-RISCV_DEFINE_CAP(ZKNE, 0, 8)
-RISCV_DEFINE_CAP(ZKNH, 0, 9)
-RISCV_DEFINE_CAP(ZKSED, 0, 10)
-RISCV_DEFINE_CAP(ZKSH, 0, 11)
-RISCV_DEFINE_CAP(ZKR, 0, 12)
-RISCV_DEFINE_CAP(ZKT, 0, 13)
-RISCV_DEFINE_CAP(V, 0, 14)
-RISCV_DEFINE_CAP(ZVBB, 0, 15)
-RISCV_DEFINE_CAP(ZVBC, 0, 16)
-RISCV_DEFINE_CAP(ZVKB, 0, 17)
-RISCV_DEFINE_CAP(ZVKG, 0, 18)
-RISCV_DEFINE_CAP(ZVKNED, 0, 19)
-RISCV_DEFINE_CAP(ZVKNHA, 0, 20)
-RISCV_DEFINE_CAP(ZVKNHB, 0, 21)
-RISCV_DEFINE_CAP(ZVKSED, 0, 22)
-RISCV_DEFINE_CAP(ZVKSH, 0, 23)
+RISCV_DEFINE_CAP(ZBA, 0, 0, 4, (1 << 3))
+RISCV_DEFINE_CAP(ZBB, 0, 1, 4, (1 << 4))
+RISCV_DEFINE_CAP(ZBC, 0, 2, 4, (1 << 7))
+RISCV_DEFINE_CAP(ZBS, 0, 3, 4, (1 << 5))
+RISCV_DEFINE_CAP(ZBKB, 0, 4, 4, (1 << 8))
+RISCV_DEFINE_CAP(ZBKC, 0, 5, 4, (1 << 9))
+RISCV_DEFINE_CAP(ZBKX, 0, 6, 4, (1 << 10))
+RISCV_DEFINE_CAP(ZKND, 0, 7, 4, (1 << 11))
+RISCV_DEFINE_CAP(ZKNE, 0, 8, 4, (1 << 12))
+RISCV_DEFINE_CAP(ZKNH, 0, 9, 4, (1 << 13))
+RISCV_DEFINE_CAP(ZKSED, 0, 10, 4, (1 << 14))
+RISCV_DEFINE_CAP(ZKSH, 0, 11, 4, (1 << 15))
+RISCV_DEFINE_CAP(ZKR, 0, 12, -1, 0)
+RISCV_DEFINE_CAP(ZKT, 0, 13, 4, (1 << 16))
+RISCV_DEFINE_CAP(V, 0, 14, 4, (1 << 2))
+RISCV_DEFINE_CAP(ZVBB, 0, 15, 4, (1 << 17))
+RISCV_DEFINE_CAP(ZVBC, 0, 16, 4, (1 << 18))
+RISCV_DEFINE_CAP(ZVKB, 0, 17, 4, (1 << 19))
+RISCV_DEFINE_CAP(ZVKG, 0, 18, 4, (1 << 20))
+RISCV_DEFINE_CAP(ZVKNED, 0, 19, 4, (1 << 21))
+RISCV_DEFINE_CAP(ZVKNHA, 0, 20, 4, (1 << 22))
+RISCV_DEFINE_CAP(ZVKNHB, 0, 21, 4, (1 << 23))
+RISCV_DEFINE_CAP(ZVKSED, 0, 22, 4, (1 << 24))
+RISCV_DEFINE_CAP(ZVKSH, 0, 23, 4, (1 << 25))
 
 /*
  * In the future ...
- * RISCV_DEFINE_CAP(ZFOO, 0, 31)
- * RISCV_DEFINE_CAP(ZBAR, 1, 0)
+ * RISCV_DEFINE_CAP(ZFOO, 0, 31, ..., ...)
+ * RISCV_DEFINE_CAP(ZBAR, 1, 0, ..., ...)
  * ... and so on.
  */