File Index
Files and directories
Sign in
FILE

vendor_hwprobe.h

File preview with syntax highlighting.

linux-6.19.14/arch/riscv/include/asm/vendor_extensions/vendor_hwprobe.h C
 1/* SPDX-License-Identifier: GPL-2.0 */
 2/*
 3 * Copyright 2024 Rivos, Inc
 4 */
 5
 6#ifndef _ASM_RISCV_SYS_HWPROBE_H
 7#define _ASM_RISCV_SYS_HWPROBE_H
 8
 9#include <asm/cpufeature.h>
10
11#define VENDOR_EXT_KEY(ext)								\
12	do {										\
13		if (__riscv_isa_extension_available(isainfo->isa, RISCV_ISA_VENDOR_EXT_##ext)) \
14			pair->value |= RISCV_HWPROBE_VENDOR_EXT_##ext;			\
15		else									\
16			missing |= RISCV_HWPROBE_VENDOR_EXT_##ext;			\
17	} while (false)
18
19/*
20 * Loop through and record extensions that 1) anyone has, and 2) anyone
21 * doesn't have.
22 *
23 * _extension_checks is an arbitrary C block to set the values of pair->value
24 * and missing. It should be filled with VENDOR_EXT_KEY expressions.
25 */
26#define VENDOR_EXTENSION_SUPPORTED(pair, cpus, per_hart_vendor_bitmap, _extension_checks)	\
27	do {											\
28		int cpu;									\
29		u64 missing = 0;								\
30		for_each_cpu(cpu, (cpus)) {							\
31			struct riscv_isavendorinfo *isainfo = &(per_hart_vendor_bitmap)[cpu];	\
32			_extension_checks							\
33		}										\
34		(pair)->value &= ~missing;							\
35	} while (false)										\
36
37#endif /* _ASM_RISCV_SYS_HWPROBE_H */
~/ Read-only file preview.