~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/kvm/ioapic.h

Version: ~ [ linux-5.6-rc7 ] ~ [ linux-5.5.11 ] ~ [ linux-5.4.27 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.112 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.174 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.217 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.217 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.82 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef __KVM_IO_APIC_H
  2 #define __KVM_IO_APIC_H
  3 
  4 #include <linux/kvm_host.h>
  5 
  6 #include <kvm/iodev.h>
  7 
  8 struct kvm;
  9 struct kvm_vcpu;
 10 
 11 #define IOAPIC_NUM_PINS  KVM_IOAPIC_NUM_PINS
 12 #define MAX_NR_RESERVED_IOAPIC_PINS KVM_MAX_IRQ_ROUTES
 13 #define IOAPIC_VERSION_ID 0x11  /* IOAPIC version */
 14 #define IOAPIC_EDGE_TRIG  0
 15 #define IOAPIC_LEVEL_TRIG 1
 16 
 17 #define IOAPIC_DEFAULT_BASE_ADDRESS  0xfec00000
 18 #define IOAPIC_MEM_LENGTH            0x100
 19 
 20 /* Direct registers. */
 21 #define IOAPIC_REG_SELECT  0x00
 22 #define IOAPIC_REG_WINDOW  0x10
 23 
 24 /* Indirect registers. */
 25 #define IOAPIC_REG_APIC_ID 0x00 /* x86 IOAPIC only */
 26 #define IOAPIC_REG_VERSION 0x01
 27 #define IOAPIC_REG_ARB_ID  0x02 /* x86 IOAPIC only */
 28 
 29 /*ioapic delivery mode*/
 30 #define IOAPIC_FIXED                    0x0
 31 #define IOAPIC_LOWEST_PRIORITY          0x1
 32 #define IOAPIC_PMI                      0x2
 33 #define IOAPIC_NMI                      0x4
 34 #define IOAPIC_INIT                     0x5
 35 #define IOAPIC_EXTINT                   0x7
 36 
 37 #ifdef CONFIG_X86
 38 #define RTC_GSI 8
 39 #else
 40 #define RTC_GSI -1U
 41 #endif
 42 
 43 struct rtc_status {
 44         int pending_eoi;
 45         DECLARE_BITMAP(dest_map, KVM_MAX_VCPUS);
 46 };
 47 
 48 union kvm_ioapic_redirect_entry {
 49         u64 bits;
 50         struct {
 51                 u8 vector;
 52                 u8 delivery_mode:3;
 53                 u8 dest_mode:1;
 54                 u8 delivery_status:1;
 55                 u8 polarity:1;
 56                 u8 remote_irr:1;
 57                 u8 trig_mode:1;
 58                 u8 mask:1;
 59                 u8 reserve:7;
 60                 u8 reserved[4];
 61                 u8 dest_id;
 62         } fields;
 63 };
 64 
 65 struct kvm_ioapic {
 66         u64 base_address;
 67         u32 ioregsel;
 68         u32 id;
 69         u32 irr;
 70         u32 pad;
 71         union kvm_ioapic_redirect_entry redirtbl[IOAPIC_NUM_PINS];
 72         unsigned long irq_states[IOAPIC_NUM_PINS];
 73         struct kvm_io_device dev;
 74         struct kvm *kvm;
 75         void (*ack_notifier)(void *opaque, int irq);
 76         spinlock_t lock;
 77         struct rtc_status rtc_status;
 78         struct delayed_work eoi_inject;
 79         u32 irq_eoi[IOAPIC_NUM_PINS];
 80         u32 irr_delivered;
 81 };
 82 
 83 #ifdef DEBUG
 84 #define ASSERT(x)                                                       \
 85 do {                                                                    \
 86         if (!(x)) {                                                     \
 87                 printk(KERN_EMERG "assertion failed %s: %d: %s\n",      \
 88                        __FILE__, __LINE__, #x);                         \
 89                 BUG();                                                  \
 90         }                                                               \
 91 } while (0)
 92 #else
 93 #define ASSERT(x) do { } while (0)
 94 #endif
 95 
 96 static inline struct kvm_ioapic *ioapic_irqchip(struct kvm *kvm)
 97 {
 98         return kvm->arch.vioapic;
 99 }
100 
101 static inline int ioapic_in_kernel(struct kvm *kvm)
102 {
103         int ret;
104 
105         ret = (ioapic_irqchip(kvm) != NULL);
106         return ret;
107 }
108 
109 void kvm_rtc_eoi_tracking_restore_one(struct kvm_vcpu *vcpu);
110 bool kvm_apic_match_dest(struct kvm_vcpu *vcpu, struct kvm_lapic *source,
111                 int short_hand, unsigned int dest, int dest_mode);
112 int kvm_apic_compare_prio(struct kvm_vcpu *vcpu1, struct kvm_vcpu *vcpu2);
113 void kvm_ioapic_update_eoi(struct kvm_vcpu *vcpu, int vector,
114                         int trigger_mode);
115 int kvm_ioapic_init(struct kvm *kvm);
116 void kvm_ioapic_destroy(struct kvm *kvm);
117 int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int irq_source_id,
118                        int level, bool line_status);
119 void kvm_ioapic_clear_all(struct kvm_ioapic *ioapic, int irq_source_id);
120 int kvm_irq_delivery_to_apic(struct kvm *kvm, struct kvm_lapic *src,
121                 struct kvm_lapic_irq *irq, unsigned long *dest_map);
122 int kvm_get_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state);
123 int kvm_set_ioapic(struct kvm *kvm, struct kvm_ioapic_state *state);
124 void kvm_ioapic_scan_entry(struct kvm_vcpu *vcpu,
125                            ulong *ioapic_handled_vectors);
126 void kvm_scan_ioapic_routes(struct kvm_vcpu *vcpu,
127                             ulong *ioapic_handled_vectors);
128 #endif
129 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp