1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
4 */
5
6#include <linux/debugfs.h>
7#include <linux/kvm_host.h>
8#include <linux/seq_file.h>
9#include "kvmcpu.h"
10#include "ls3a_ext_irq.h"
11#include "ls7a_irq.h"
12
13#ifdef CONFIG_DEBUG_FS
14static int irqchip_state_show(struct seq_file *m, void *v)
15{
16	struct kvm *kvm = m->private;
17
18	kvm_get_kvm(kvm);
19	kvm_dump_ls3a_extirq_state(m, kvm->arch.v_extirq);
20	kvm_dump_ls7a_ioapic_state(m, kvm->arch.v_ioapic);
21	kvm_put_kvm(kvm);
22
23	return 0;
24}
25
26static int irqchip_debug_open(struct inode *inode, struct file *file)
27{
28	return single_open(file, irqchip_state_show, inode->i_private);
29}
30
31static const struct file_operations irqchip_debug_fops = {
32	.open       = irqchip_debug_open,
33	.read       = seq_read,
34	.llseek     = seq_lseek,
35	.release    = single_release,
36};
37
38void irqchip_debug_init(struct kvm *kvm)
39{
40	debugfs_create_file("irqchip-state", 0444, kvm->debugfs_dentry, kvm,
41			    &irqchip_debug_fops);
42}
43#else
44
45void irqchip_debug_init(struct kvm *kvm) {}
46#endif
47void irqchip_debug_destroy(struct kvm *kvm)
48{
49}
50