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