blob: 655180c993ed0a1f10ef0c012d8aeeaa1561a8dd [file] [log] [blame]
Mayuresh Chitale7df8a0c2025-01-06 13:04:04 +00001/* SPDX-License-Identifier: GPL-2.0-only */
2
3#ifndef _ASM_CPUFEATURE_H
4#define _ASM_CPUFEATURE_H
5struct riscv_isa_ext_data {
6 const unsigned int id;
7 const char *name;
8 const char *property;
9 const unsigned int *subset_ext_ids;
10 const unsigned int subset_ext_size;
11 int (*validate)(const struct riscv_isa_ext_data *data, const unsigned long *isa_bitmap);
12};
13
14#define _RISCV_ISA_EXT_DATA(_name, _id, _subset_exts, _subset_exts_size, _validate) { \
15 .name = #_name, \
16 .property = #_name, \
17 .id = _id, \
18 .subset_ext_ids = _subset_exts, \
19 .subset_ext_size = _subset_exts_size, \
20 .validate = _validate \
21}
22
23#define __RISCV_ISA_EXT_DATA(_name, _id) _RISCV_ISA_EXT_DATA(_name, _id, NULL, 0, NULL)
24#define __RISCV_ISA_EXT_DATA_VALIDATE(_name, _id, _validate) \
25 _RISCV_ISA_EXT_DATA(_name, _id, NULL, 0, _validate)
26
27/* Used to declare pure "lasso" extension (Zk for instance) */
28#define __RISCV_ISA_EXT_BUNDLE(_name, _bundled_exts) \
29 _RISCV_ISA_EXT_DATA(_name, RISCV_ISA_EXT_INVALID, _bundled_exts, \
30 ARRAY_SIZE(_bundled_exts), NULL)
31
32/* Used to declare extensions that are a superset of other extensions (Zvbb for instance) */
33#define __RISCV_ISA_EXT_SUPERSET(_name, _id, _sub_exts) \
34 _RISCV_ISA_EXT_DATA(_name, _id, _sub_exts, ARRAY_SIZE(_sub_exts), NULL)
35#define __RISCV_ISA_EXT_SUPERSET_VALIDATE(_name, _id, _sub_exts, _validate) \
36 _RISCV_ISA_EXT_DATA(_name, _id, _sub_exts, ARRAY_SIZE(_sub_exts), _validate)
37#endif