linux/arch/x86/kvm/ioapic.h

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __KVM_IO_APIC_H
#define __KVM_IO_APIC_H

#include <linux/kvm_host.h>
#include <kvm/iodev.h>
#include "irq.h"

struct kvm;
struct kvm_vcpu;

#define IOAPIC_NUM_PINS
#define MAX_NR_RESERVED_IOAPIC_PINS
#define IOAPIC_VERSION_ID
#define IOAPIC_EDGE_TRIG
#define IOAPIC_LEVEL_TRIG

#define IOAPIC_DEFAULT_BASE_ADDRESS
#define IOAPIC_MEM_LENGTH

/* Direct registers. */
#define IOAPIC_REG_SELECT
#define IOAPIC_REG_WINDOW

/* Indirect registers. */
#define IOAPIC_REG_APIC_ID
#define IOAPIC_REG_VERSION
#define IOAPIC_REG_ARB_ID

/*ioapic delivery mode*/
#define IOAPIC_FIXED
#define IOAPIC_LOWEST_PRIORITY
#define IOAPIC_PMI
#define IOAPIC_NMI
#define IOAPIC_INIT
#define IOAPIC_EXTINT

#define RTC_GSI

struct dest_map {};


struct rtc_status {};

kvm_ioapic_redirect_entry;

struct kvm_ioapic {};

#ifdef DEBUG
#define ASSERT
#else
#define ASSERT(x)
#endif

static inline int ioapic_in_kernel(struct kvm *kvm)
{}

void kvm_rtc_eoi_tracking_restore_one(struct kvm_vcpu *vcpu);
void kvm_ioapic_update_eoi(struct kvm_vcpu *vcpu, int vector,
			int trigger_mode);
int kvm_ioapic_init(struct kvm *kvm);
void kvm_ioapic_destroy(struct kvm *kvm);
int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int irq_source_id,
		       int level, bool line_status);
void kvm_ioapic_clear_all(struct kvm_ioapic *ioapic, int irq_source_id);
void kvm_get_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state);
void kvm_set_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state);
void kvm_ioapic_scan_entry(struct kvm_vcpu *vcpu,
			   ulong *ioapic_handled_vectors);
void kvm_scan_ioapic_routes(struct kvm_vcpu *vcpu,
			    ulong *ioapic_handled_vectors);
#endif