]> git.proxmox.com Git - mirror_qemu.git/blame - linux-headers/asm-loongarch/kvm.h
target/loongarch/kvm: Enable LSX/LASX extension
[mirror_qemu.git] / linux-headers / asm-loongarch / kvm.h
CommitLineData
efb91426
DHB
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * Copyright (C) 2020-2023 Loongson Technology Corporation Limited
4 */
5
6#ifndef __UAPI_ASM_LOONGARCH_KVM_H
7#define __UAPI_ASM_LOONGARCH_KVM_H
8
9#include <linux/types.h>
10
11/*
12 * KVM LoongArch specific structures and definitions.
13 *
14 * Some parts derived from the x86 version of this file.
15 */
16
17#define __KVM_HAVE_READONLY_MEM
18
19#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
20#define KVM_DIRTY_LOG_PAGE_OFFSET 64
21
22/*
23 * for KVM_GET_REGS and KVM_SET_REGS
24 */
25struct kvm_regs {
26 /* out (KVM_GET_REGS) / in (KVM_SET_REGS) */
27 __u64 gpr[32];
28 __u64 pc;
29};
30
31/*
32 * for KVM_GET_FPU and KVM_SET_FPU
33 */
34struct kvm_fpu {
35 __u32 fcsr;
36 __u64 fcc; /* 8x8 */
37 struct kvm_fpureg {
38 __u64 val64[4];
39 } fpr[32];
40};
41
42/*
43 * For LoongArch, we use KVM_SET_ONE_REG and KVM_GET_ONE_REG to access various
44 * registers. The id field is broken down as follows:
45 *
46 * bits[63..52] - As per linux/kvm.h
47 * bits[51..32] - Must be zero.
48 * bits[31..16] - Register set.
49 *
50 * Register set = 0: GP registers from kvm_regs (see definitions below).
51 *
52 * Register set = 1: CSR registers.
53 *
54 * Register set = 2: KVM specific registers (see definitions below).
55 *
56 * Register set = 3: FPU / SIMD registers (see definitions below).
57 *
58 * Other sets registers may be added in the future. Each set would
59 * have its own identifier in bits[31..16].
60 */
61
62#define KVM_REG_LOONGARCH_GPR (KVM_REG_LOONGARCH | 0x00000ULL)
63#define KVM_REG_LOONGARCH_CSR (KVM_REG_LOONGARCH | 0x10000ULL)
64#define KVM_REG_LOONGARCH_KVM (KVM_REG_LOONGARCH | 0x20000ULL)
65#define KVM_REG_LOONGARCH_FPSIMD (KVM_REG_LOONGARCH | 0x30000ULL)
66#define KVM_REG_LOONGARCH_CPUCFG (KVM_REG_LOONGARCH | 0x40000ULL)
67#define KVM_REG_LOONGARCH_MASK (KVM_REG_LOONGARCH | 0x70000ULL)
68#define KVM_CSR_IDX_MASK 0x7fff
69#define KVM_CPUCFG_IDX_MASK 0x7fff
70
71/*
72 * KVM_REG_LOONGARCH_KVM - KVM specific control registers.
73 */
74
75#define KVM_REG_LOONGARCH_COUNTER (KVM_REG_LOONGARCH_KVM | KVM_REG_SIZE_U64 | 1)
76#define KVM_REG_LOONGARCH_VCPU_RESET (KVM_REG_LOONGARCH_KVM | KVM_REG_SIZE_U64 | 2)
77
78#define LOONGARCH_REG_SHIFT 3
79#define LOONGARCH_REG_64(TYPE, REG) (TYPE | KVM_REG_SIZE_U64 | (REG << LOONGARCH_REG_SHIFT))
80#define KVM_IOC_CSRID(REG) LOONGARCH_REG_64(KVM_REG_LOONGARCH_CSR, REG)
81#define KVM_IOC_CPUCFG(REG) LOONGARCH_REG_64(KVM_REG_LOONGARCH_CPUCFG, REG)
fc700996 82#define KVM_LOONGARCH_VCPU_CPUCFG 0
efb91426
DHB
83
84struct kvm_debug_exit_arch {
85};
86
87/* for KVM_SET_GUEST_DEBUG */
88struct kvm_guest_debug_arch {
89};
90
91/* definition of registers in kvm_run */
92struct kvm_sync_regs {
93};
94
95/* dummy definition */
96struct kvm_sregs {
97};
98
99struct kvm_iocsr_entry {
100 __u32 addr;
101 __u32 pad;
102 __u64 data;
103};
104
105#define KVM_NR_IRQCHIPS 1
106#define KVM_IRQCHIP_NUM_PINS 64
107#define KVM_MAX_CORES 256
108
109#endif /* __UAPI_ASM_LOONGARCH_KVM_H */