xref: /linux/arch/loongarch/include/asm/kvm_ipi.h (revision 60675d4ca1ef0857e44eba5849b74a3a998d0c0f)
1c532de5aSXianglai Li /* SPDX-License-Identifier: GPL-2.0 */
2c532de5aSXianglai Li /*
3c532de5aSXianglai Li  * Copyright (C) 2024 Loongson Technology Corporation Limited
4c532de5aSXianglai Li  */
5c532de5aSXianglai Li 
6c532de5aSXianglai Li #ifndef __ASM_KVM_IPI_H
7c532de5aSXianglai Li #define __ASM_KVM_IPI_H
8c532de5aSXianglai Li 
9c532de5aSXianglai Li #include <kvm/iodev.h>
10c532de5aSXianglai Li 
11c532de5aSXianglai Li #define LARCH_INT_IPI			12
12c532de5aSXianglai Li 
13c532de5aSXianglai Li struct loongarch_ipi {
14c532de5aSXianglai Li 	spinlock_t lock;
15c532de5aSXianglai Li 	struct kvm *kvm;
16c532de5aSXianglai Li 	struct kvm_io_device device;
17c532de5aSXianglai Li };
18c532de5aSXianglai Li 
19c532de5aSXianglai Li struct ipi_state {
20c532de5aSXianglai Li 	spinlock_t lock;
21c532de5aSXianglai Li 	uint32_t status;
22c532de5aSXianglai Li 	uint32_t en;
23c532de5aSXianglai Li 	uint32_t set;
24c532de5aSXianglai Li 	uint32_t clear;
25c532de5aSXianglai Li 	uint64_t buf[4];
26c532de5aSXianglai Li };
27c532de5aSXianglai Li 
28c532de5aSXianglai Li #define IOCSR_IPI_BASE		0x1000
29c532de5aSXianglai Li #define IOCSR_IPI_SIZE		0x160
30c532de5aSXianglai Li 
31*daee2f9cSXianglai Li #define IOCSR_IPI_STATUS	0x000
32*daee2f9cSXianglai Li #define IOCSR_IPI_EN		0x004
33*daee2f9cSXianglai Li #define IOCSR_IPI_SET		0x008
34*daee2f9cSXianglai Li #define IOCSR_IPI_CLEAR		0x00c
35*daee2f9cSXianglai Li #define IOCSR_IPI_BUF_20	0x020
36*daee2f9cSXianglai Li #define IOCSR_IPI_BUF_28	0x028
37*daee2f9cSXianglai Li #define IOCSR_IPI_BUF_30	0x030
38*daee2f9cSXianglai Li #define IOCSR_IPI_BUF_38	0x038
39*daee2f9cSXianglai Li #define IOCSR_IPI_SEND		0x040
40*daee2f9cSXianglai Li #define IOCSR_MAIL_SEND		0x048
41*daee2f9cSXianglai Li #define IOCSR_ANY_SEND		0x158
42*daee2f9cSXianglai Li 
43c532de5aSXianglai Li int kvm_loongarch_register_ipi_device(void);
44c532de5aSXianglai Li 
45c532de5aSXianglai Li #endif
46