1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 /*
3  * Copyright 2023 Rivos, Inc
4  */
5 
6 #ifndef _UAPI_ASM_HWPROBE_H
7 #define _UAPI_ASM_HWPROBE_H
8 
9 #include <linux/types.h>
10 
11 /*
12  * Interface for probing hardware capabilities from userspace, see
13  * Documentation/riscv/hwprobe.rst for more information.
14  */
15 struct riscv_hwprobe {
16 	__s64 key;
17 	__u64 value;
18 };
19 
20 #define RISCV_HWPROBE_KEY_MVENDORID	0
21 #define RISCV_HWPROBE_KEY_MARCHID	1
22 #define RISCV_HWPROBE_KEY_MIMPID	2
23 #define RISCV_HWPROBE_KEY_BASE_BEHAVIOR	3
24 #define		RISCV_HWPROBE_BASE_BEHAVIOR_IMA	(1 << 0)
25 #define RISCV_HWPROBE_KEY_IMA_EXT_0	4
26 #define		RISCV_HWPROBE_IMA_FD		(1 << 0)
27 #define		RISCV_HWPROBE_IMA_C		(1 << 1)
28 #define		RISCV_HWPROBE_IMA_V		(1 << 2)
29 #define		RISCV_HWPROBE_EXT_ZBA		(1 << 3)
30 #define		RISCV_HWPROBE_EXT_ZBB		(1 << 4)
31 #define		RISCV_HWPROBE_EXT_ZBS		(1 << 5)
32 #define RISCV_HWPROBE_KEY_CPUPERF_0	5
33 #define		RISCV_HWPROBE_MISALIGNED_UNKNOWN	(0 << 0)
34 #define		RISCV_HWPROBE_MISALIGNED_EMULATED	(1 << 0)
35 #define		RISCV_HWPROBE_MISALIGNED_SLOW		(2 << 0)
36 #define		RISCV_HWPROBE_MISALIGNED_FAST		(3 << 0)
37 #define		RISCV_HWPROBE_MISALIGNED_UNSUPPORTED	(4 << 0)
38 #define		RISCV_HWPROBE_MISALIGNED_MASK		(7 << 0)
39 /* Increase RISCV_HWPROBE_MAX_KEY when adding items. */
40 
41 #endif
42