1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * Copyright 2023 Rivos, Inc
4 */
5
6#ifndef _ASM_HWPROBE_H
7#define _ASM_HWPROBE_H
8
9#include <uapi/asm/hwprobe.h>
10
11#define RISCV_HWPROBE_MAX_KEY 6
12
13static inline bool riscv_hwprobe_key_is_valid(__s64 key)
14{
15	return key >= 0 && key <= RISCV_HWPROBE_MAX_KEY;
16}
17
18static inline bool hwprobe_key_is_bitmask(__s64 key)
19{
20	switch (key) {
21	case RISCV_HWPROBE_KEY_BASE_BEHAVIOR:
22	case RISCV_HWPROBE_KEY_IMA_EXT_0:
23	case RISCV_HWPROBE_KEY_CPUPERF_0:
24		return true;
25	}
26
27	return false;
28}
29
30static inline bool riscv_hwprobe_pair_cmp(struct riscv_hwprobe *pair,
31					  struct riscv_hwprobe *other_pair)
32{
33	if (pair->key != other_pair->key)
34		return false;
35
36	if (hwprobe_key_is_bitmask(pair->key))
37		return (pair->value & other_pair->value) == other_pair->value;
38
39	return pair->value == other_pair->value;
40}
41
42#endif
43