hwprobe.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
  2. /*
  3. * Copyright 2023 Rivos, Inc
  4. */
  5. #ifndef _UAPI_ASM_HWPROBE_H
  6. #define _UAPI_ASM_HWPROBE_H
  7. #include <linux/types.h>
  8. /*
  9. * Interface for probing hardware capabilities from userspace, see
  10. * Documentation/arch/riscv/hwprobe.rst for more information.
  11. */
  12. struct riscv_hwprobe {
  13. __s64 key;
  14. __u64 value;
  15. };
  16. #define RISCV_HWPROBE_KEY_MVENDORID 0
  17. #define RISCV_HWPROBE_KEY_MARCHID 1
  18. #define RISCV_HWPROBE_KEY_MIMPID 2
  19. #define RISCV_HWPROBE_KEY_BASE_BEHAVIOR 3
  20. #define RISCV_HWPROBE_BASE_BEHAVIOR_IMA (1 << 0)
  21. #define RISCV_HWPROBE_KEY_IMA_EXT_0 4
  22. #define RISCV_HWPROBE_IMA_FD (1 << 0)
  23. #define RISCV_HWPROBE_IMA_C (1 << 1)
  24. #define RISCV_HWPROBE_IMA_V (1 << 2)
  25. #define RISCV_HWPROBE_EXT_ZBA (1 << 3)
  26. #define RISCV_HWPROBE_EXT_ZBB (1 << 4)
  27. #define RISCV_HWPROBE_EXT_ZBS (1 << 5)
  28. #define RISCV_HWPROBE_EXT_ZICBOZ (1 << 6)
  29. #define RISCV_HWPROBE_EXT_ZBC (1 << 7)
  30. #define RISCV_HWPROBE_EXT_ZBKB (1 << 8)
  31. #define RISCV_HWPROBE_EXT_ZBKC (1 << 9)
  32. #define RISCV_HWPROBE_EXT_ZBKX (1 << 10)
  33. #define RISCV_HWPROBE_EXT_ZKND (1 << 11)
  34. #define RISCV_HWPROBE_EXT_ZKNE (1 << 12)
  35. #define RISCV_HWPROBE_EXT_ZKNH (1 << 13)
  36. #define RISCV_HWPROBE_EXT_ZKSED (1 << 14)
  37. #define RISCV_HWPROBE_EXT_ZKSH (1 << 15)
  38. #define RISCV_HWPROBE_EXT_ZKT (1 << 16)
  39. #define RISCV_HWPROBE_EXT_ZVBB (1 << 17)
  40. #define RISCV_HWPROBE_EXT_ZVBC (1 << 18)
  41. #define RISCV_HWPROBE_EXT_ZVKB (1 << 19)
  42. #define RISCV_HWPROBE_EXT_ZVKG (1 << 20)
  43. #define RISCV_HWPROBE_EXT_ZVKNED (1 << 21)
  44. #define RISCV_HWPROBE_EXT_ZVKNHA (1 << 22)
  45. #define RISCV_HWPROBE_EXT_ZVKNHB (1 << 23)
  46. #define RISCV_HWPROBE_EXT_ZVKSED (1 << 24)
  47. #define RISCV_HWPROBE_EXT_ZVKSH (1 << 25)
  48. #define RISCV_HWPROBE_EXT_ZVKT (1 << 26)
  49. #define RISCV_HWPROBE_EXT_ZFH (1 << 27)
  50. #define RISCV_HWPROBE_EXT_ZFHMIN (1 << 28)
  51. #define RISCV_HWPROBE_EXT_ZIHINTNTL (1 << 29)
  52. #define RISCV_HWPROBE_EXT_ZVFH (1 << 30)
  53. #define RISCV_HWPROBE_EXT_ZVFHMIN (1ULL << 31)
  54. #define RISCV_HWPROBE_EXT_ZFA (1ULL << 32)
  55. #define RISCV_HWPROBE_EXT_ZTSO (1ULL << 33)
  56. #define RISCV_HWPROBE_EXT_ZACAS (1ULL << 34)
  57. #define RISCV_HWPROBE_EXT_ZICOND (1ULL << 35)
  58. #define RISCV_HWPROBE_EXT_ZIHINTPAUSE (1ULL << 36)
  59. #define RISCV_HWPROBE_EXT_ZVE32X (1ULL << 37)
  60. #define RISCV_HWPROBE_EXT_ZVE32F (1ULL << 38)
  61. #define RISCV_HWPROBE_EXT_ZVE64X (1ULL << 39)
  62. #define RISCV_HWPROBE_EXT_ZVE64F (1ULL << 40)
  63. #define RISCV_HWPROBE_EXT_ZVE64D (1ULL << 41)
  64. #define RISCV_HWPROBE_EXT_ZIMOP (1ULL << 42)
  65. #define RISCV_HWPROBE_EXT_ZCA (1ULL << 43)
  66. #define RISCV_HWPROBE_EXT_ZCB (1ULL << 44)
  67. #define RISCV_HWPROBE_EXT_ZCD (1ULL << 45)
  68. #define RISCV_HWPROBE_EXT_ZCF (1ULL << 46)
  69. #define RISCV_HWPROBE_EXT_ZCMOP (1ULL << 47)
  70. #define RISCV_HWPROBE_EXT_ZAWRS (1ULL << 48)
  71. #define RISCV_HWPROBE_KEY_CPUPERF_0 5
  72. #define RISCV_HWPROBE_MISALIGNED_UNKNOWN (0 << 0)
  73. #define RISCV_HWPROBE_MISALIGNED_EMULATED (1 << 0)
  74. #define RISCV_HWPROBE_MISALIGNED_SLOW (2 << 0)
  75. #define RISCV_HWPROBE_MISALIGNED_FAST (3 << 0)
  76. #define RISCV_HWPROBE_MISALIGNED_UNSUPPORTED (4 << 0)
  77. #define RISCV_HWPROBE_MISALIGNED_MASK (7 << 0)
  78. #define RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE 6
  79. #define RISCV_HWPROBE_KEY_HIGHEST_VIRT_ADDRESS 7
  80. #define RISCV_HWPROBE_KEY_TIME_CSR_FREQ 8
  81. #define RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF 9
  82. #define RISCV_HWPROBE_MISALIGNED_SCALAR_UNKNOWN 0
  83. #define RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED 1
  84. #define RISCV_HWPROBE_MISALIGNED_SCALAR_SLOW 2
  85. #define RISCV_HWPROBE_MISALIGNED_SCALAR_FAST 3
  86. #define RISCV_HWPROBE_MISALIGNED_SCALAR_UNSUPPORTED 4
  87. /* Increase RISCV_HWPROBE_MAX_KEY when adding items. */
  88. /* Flags */
  89. #define RISCV_HWPROBE_WHICH_CPUS (1 << 0)
  90. #endif