summaryrefslogtreecommitdiff
path: root/arch/riscv/include/uapi/asm/hwprobe.h
blob: e6a394fbe7fce926fecdae5428ea7e438c9b5036 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
 * Copyright 2023-2024 Rivos, Inc
 */

#ifndef _UAPI_ASM_HWPROBE_H
#define _UAPI_ASM_HWPROBE_H

#include <linux/types.h>
#include <linux/const.h>

/*
 * Interface for probing hardware capabilities from userspace, see
 * Documentation/arch/riscv/hwprobe.rst for more information.
 */
struct riscv_hwprobe {
	__s64 key;
	__u64 value;
};

#define RISCV_HWPROBE_KEY_MVENDORID	0
#define RISCV_HWPROBE_KEY_MARCHID	1
#define RISCV_HWPROBE_KEY_MIMPID	2
#define RISCV_HWPROBE_KEY_BASE_BEHAVIOR	3
#define		RISCV_HWPROBE_BASE_BEHAVIOR_IMA	_BITULL(0)
#define RISCV_HWPROBE_KEY_IMA_EXT_0	4
#define		RISCV_HWPROBE_IMA_FD		_BITULL(0)
#define		RISCV_HWPROBE_IMA_C		_BITULL(1)
#define		RISCV_HWPROBE_IMA_V		_BITULL(2)
#define		RISCV_HWPROBE_EXT_ZBA		_BITULL(3)
#define		RISCV_HWPROBE_EXT_ZBB		_BITULL(4)
#define		RISCV_HWPROBE_EXT_ZBS		_BITULL(5)
#define		RISCV_HWPROBE_EXT_ZICBOZ	_BITULL(6)
#define		RISCV_HWPROBE_EXT_ZBC		_BITULL(7)
#define		RISCV_HWPROBE_EXT_ZBKB		_BITULL(8)
#define		RISCV_HWPROBE_EXT_ZBKC		_BITULL(9)
#define		RISCV_HWPROBE_EXT_ZBKX		_BITULL(10)
#define		RISCV_HWPROBE_EXT_ZKND		_BITULL(11)
#define		RISCV_HWPROBE_EXT_ZKNE		_BITULL(12)
#define		RISCV_HWPROBE_EXT_ZKNH		_BITULL(13)
#define		RISCV_HWPROBE_EXT_ZKSED		_BITULL(14)
#define		RISCV_HWPROBE_EXT_ZKSH		_BITULL(15)
#define		RISCV_HWPROBE_EXT_ZKT		_BITULL(16)
#define		RISCV_HWPROBE_EXT_ZVBB		_BITULL(17)
#define		RISCV_HWPROBE_EXT_ZVBC		_BITULL(18)
#define		RISCV_HWPROBE_EXT_ZVKB		_BITULL(19)
#define		RISCV_HWPROBE_EXT_ZVKG		_BITULL(20)
#define		RISCV_HWPROBE_EXT_ZVKNED	_BITULL(21)
#define		RISCV_HWPROBE_EXT_ZVKNHA	_BITULL(22)
#define		RISCV_HWPROBE_EXT_ZVKNHB	_BITULL(23)
#define		RISCV_HWPROBE_EXT_ZVKSED	_BITULL(24)
#define		RISCV_HWPROBE_EXT_ZVKSH		_BITULL(25)
#define		RISCV_HWPROBE_EXT_ZVKT		_BITULL(26)
#define		RISCV_HWPROBE_EXT_ZFH		_BITULL(27)
#define		RISCV_HWPROBE_EXT_ZFHMIN	_BITULL(28)
#define		RISCV_HWPROBE_EXT_ZIHINTNTL	_BITULL(29)
#define		RISCV_HWPROBE_EXT_ZVFH		_BITULL(30)
#define		RISCV_HWPROBE_EXT_ZVFHMIN	_BITULL(31)
#define		RISCV_HWPROBE_EXT_ZFA		_BITULL(32)
#define		RISCV_HWPROBE_EXT_ZTSO		_BITULL(33)
#define		RISCV_HWPROBE_EXT_ZACAS		_BITULL(34)
#define		RISCV_HWPROBE_EXT_ZICOND	_BITULL(35)
#define		RISCV_HWPROBE_EXT_ZIHINTPAUSE	_BITULL(36)
#define		RISCV_HWPROBE_EXT_ZVE32X	_BITULL(37)
#define		RISCV_HWPROBE_EXT_ZVE32F	_BITULL(38)
#define		RISCV_HWPROBE_EXT_ZVE64X	_BITULL(39)
#define		RISCV_HWPROBE_EXT_ZVE64F	_BITULL(40)
#define		RISCV_HWPROBE_EXT_ZVE64D	_BITULL(41)
#define		RISCV_HWPROBE_EXT_ZIMOP		_BITULL(42)
#define		RISCV_HWPROBE_EXT_ZCA		_BITULL(43)
#define		RISCV_HWPROBE_EXT_ZCB		_BITULL(44)
#define		RISCV_HWPROBE_EXT_ZCD		_BITULL(45)
#define		RISCV_HWPROBE_EXT_ZCF		_BITULL(46)
#define		RISCV_HWPROBE_EXT_ZCMOP		_BITULL(47)
#define		RISCV_HWPROBE_EXT_ZAWRS		_BITULL(48)
#define		RISCV_HWPROBE_EXT_SUPM		_BITULL(49)
#define		RISCV_HWPROBE_EXT_ZICNTR	_BITULL(50)
#define		RISCV_HWPROBE_EXT_ZIHPM		_BITULL(51)
#define		RISCV_HWPROBE_EXT_ZFBFMIN	_BITULL(52)
#define		RISCV_HWPROBE_EXT_ZVFBFMIN	_BITULL(53)
#define		RISCV_HWPROBE_EXT_ZVFBFWMA	_BITULL(54)
#define		RISCV_HWPROBE_EXT_ZICBOM	_BITULL(55)
#define		RISCV_HWPROBE_EXT_ZAAMO		_BITULL(56)
#define		RISCV_HWPROBE_EXT_ZALRSC	_BITULL(57)
#define		RISCV_HWPROBE_EXT_ZABHA		_BITULL(58)
#define		RISCV_HWPROBE_EXT_ZALASR	_BITULL(59)
#define		RISCV_HWPROBE_EXT_ZICBOP	_BITULL(60)
#define		RISCV_HWPROBE_EXT_ZILSD		_BITULL(61)
#define		RISCV_HWPROBE_EXT_ZCLSD		_BITULL(62)
#define		RISCV_HWPROBE_EXT_ZICFILP	_BITULL(63)

#define RISCV_HWPROBE_KEY_CPUPERF_0	5
#define		RISCV_HWPROBE_MISALIGNED_UNKNOWN	0
#define		RISCV_HWPROBE_MISALIGNED_EMULATED	1
#define		RISCV_HWPROBE_MISALIGNED_SLOW		2
#define		RISCV_HWPROBE_MISALIGNED_FAST		3
#define		RISCV_HWPROBE_MISALIGNED_UNSUPPORTED	4
#define		RISCV_HWPROBE_MISALIGNED_MASK		7
#define RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE	6
#define RISCV_HWPROBE_KEY_HIGHEST_VIRT_ADDRESS	7
#define RISCV_HWPROBE_KEY_TIME_CSR_FREQ	8
#define RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF	9
#define		RISCV_HWPROBE_MISALIGNED_SCALAR_UNKNOWN		0
#define		RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED	1
#define		RISCV_HWPROBE_MISALIGNED_SCALAR_SLOW		2
#define		RISCV_HWPROBE_MISALIGNED_SCALAR_FAST		3
#define		RISCV_HWPROBE_MISALIGNED_SCALAR_UNSUPPORTED	4
#define RISCV_HWPROBE_KEY_MISALIGNED_VECTOR_PERF	10
#define		RISCV_HWPROBE_MISALIGNED_VECTOR_UNKNOWN		0
#define		RISCV_HWPROBE_MISALIGNED_VECTOR_SLOW		2
#define		RISCV_HWPROBE_MISALIGNED_VECTOR_FAST		3
#define		RISCV_HWPROBE_MISALIGNED_VECTOR_UNSUPPORTED	4
#define RISCV_HWPROBE_KEY_VENDOR_EXT_THEAD_0	11
#define RISCV_HWPROBE_KEY_ZICBOM_BLOCK_SIZE	12
#define RISCV_HWPROBE_KEY_VENDOR_EXT_SIFIVE_0	13
#define RISCV_HWPROBE_KEY_VENDOR_EXT_MIPS_0	14
#define RISCV_HWPROBE_KEY_ZICBOP_BLOCK_SIZE	15
#define RISCV_HWPROBE_KEY_IMA_EXT_1		16
#define		RISCV_HWPROBE_EXT_ZICFISS	_BITULL(0)
#define		RISCV_HWPROBE_EXT_ZICCLSM	_BITULL(1)
#define		RISCV_HWPROBE_EXT_ZICCAMOA	_BITULL(2)
#define		RISCV_HWPROBE_EXT_ZICCIF	_BITULL(3)
#define		RISCV_HWPROBE_EXT_ZICCRSE	_BITULL(4)
#define		RISCV_HWPROBE_EXT_ZA64RS	_BITULL(5)

/* Increase RISCV_HWPROBE_MAX_KEY when adding items. */

/* Flags */
#define RISCV_HWPROBE_WHICH_CPUS	_BITUL(0)

#endif