~ubuntu-branches/ubuntu/hardy/kvm/hardy-backports

« back to all changes in this revision

Viewing changes to kernel/tmp/ioapic.h

  • Committer: Bazaar Package Importer
  • Author(s): Soren Hansen
  • Date: 2008-01-03 10:39:25 UTC
  • mfrom: (1.1.16 upstream)
  • Revision ID: james.westby@ubuntu.com-20080103103925-8480u7sq2646hvbh
Tags: 1:59+dfsg-0ubuntu1
* New upstream release
* Build with alsa support (cherry pick from 57+dfsg-2)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#ifndef __KVM_IO_APIC_H
2
 
#define __KVM_IO_APIC_H
3
 
 
4
 
#include <linux/kvm_host.h>
5
 
 
6
 
#include "iodev.h"
7
 
 
8
 
struct kvm;
9
 
struct kvm_vcpu;
10
 
 
11
 
#define IOAPIC_NUM_PINS  KVM_IOAPIC_NUM_PINS
12
 
#define IOAPIC_VERSION_ID 0x11  /* IOAPIC version */
13
 
#define IOAPIC_EDGE_TRIG  0
14
 
#define IOAPIC_LEVEL_TRIG 1
15
 
 
16
 
#define IOAPIC_DEFAULT_BASE_ADDRESS  0xfec00000
17
 
#define IOAPIC_MEM_LENGTH            0x100
18
 
 
19
 
/* Direct registers. */
20
 
#define IOAPIC_REG_SELECT  0x00
21
 
#define IOAPIC_REG_WINDOW  0x10
22
 
#define IOAPIC_REG_EOI     0x40 /* IA64 IOSAPIC only */
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
 
struct kvm_ioapic {
38
 
        u64 base_address;
39
 
        u32 ioregsel;
40
 
        u32 id;
41
 
        u32 irr;
42
 
        u32 pad;
43
 
        union ioapic_redir_entry {
44
 
                u64 bits;
45
 
                struct {
46
 
                        u8 vector;
47
 
                        u8 delivery_mode:3;
48
 
                        u8 dest_mode:1;
49
 
                        u8 delivery_status:1;
50
 
                        u8 polarity:1;
51
 
                        u8 remote_irr:1;
52
 
                        u8 trig_mode:1;
53
 
                        u8 mask:1;
54
 
                        u8 reserve:7;
55
 
                        u8 reserved[4];
56
 
                        u8 dest_id;
57
 
                } fields;
58
 
        } redirtbl[IOAPIC_NUM_PINS];
59
 
        struct kvm_io_device dev;
60
 
        struct kvm *kvm;
61
 
};
62
 
 
63
 
#ifdef DEBUG
64
 
#define ASSERT(x)                                                       \
65
 
do {                                                                    \
66
 
        if (!(x)) {                                                     \
67
 
                printk(KERN_EMERG "assertion failed %s: %d: %s\n",      \
68
 
                       __FILE__, __LINE__, #x);                         \
69
 
                BUG();                                                  \
70
 
        }                                                               \
71
 
} while (0)
72
 
#else
73
 
#define ASSERT(x) do { } while (0)
74
 
#endif
75
 
 
76
 
static inline struct kvm_ioapic *ioapic_irqchip(struct kvm *kvm)
77
 
{
78
 
        return kvm->arch.vioapic;
79
 
}
80
 
 
81
 
#ifdef CONFIG_IA64
82
 
static inline int irqchip_in_kernel(struct kvm *kvm)
83
 
{
84
 
        return 1;
85
 
}
86
 
#endif
87
 
 
88
 
struct kvm_vcpu *kvm_get_lowest_prio_vcpu(struct kvm *kvm, u8 vector,
89
 
                                       unsigned long bitmap);
90
 
void kvm_ioapic_update_eoi(struct kvm *kvm, int vector);
91
 
int kvm_ioapic_init(struct kvm *kvm);
92
 
void kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int level);
93
 
void kvm_ioapic_reset(struct kvm_ioapic *ioapic);
94
 
 
95
 
#endif