Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
x86
kvm
irq.h
Go to the documentation of this file.
1
/*
2
* irq.h: in kernel interrupt controller related definitions
3
* Copyright (c) 2007, Intel Corporation.
4
*
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms and conditions of the GNU General Public License,
7
* version 2, as published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12
* more details.
13
*
14
* You should have received a copy of the GNU General Public License along with
15
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16
* Place - Suite 330, Boston, MA 02111-1307 USA.
17
* Authors:
18
* Yaozu (Eddie) Dong <
[email protected]
>
19
*
20
*/
21
22
#ifndef __IRQ_H
23
#define __IRQ_H
24
25
#include <
linux/mm_types.h
>
26
#include <linux/hrtimer.h>
27
#include <
linux/kvm_host.h
>
28
#include <
linux/spinlock.h
>
29
30
#include "
iodev.h
"
31
#include "
ioapic.h
"
32
#include "
lapic.h
"
33
34
#define PIC_NUM_PINS 16
35
#define SELECT_PIC(irq) \
36
((irq) < 8 ? KVM_IRQCHIP_PIC_MASTER : KVM_IRQCHIP_PIC_SLAVE)
37
38
struct
kvm
;
39
struct
kvm_vcpu
;
40
41
struct
kvm_kpic_state
{
42
u8
last_irr
;
/* edge detection */
43
u8
irr
;
/* interrupt request register */
44
u8
imr
;
/* interrupt mask register */
45
u8
isr
;
/* interrupt service register */
46
u8
priority_add
;
/* highest irq priority */
47
u8
irq_base
;
48
u8
read_reg_select
;
49
u8
poll
;
50
u8
special_mask
;
51
u8
init_state
;
52
u8
auto_eoi
;
53
u8
rotate_on_auto_eoi
;
54
u8
special_fully_nested_mode
;
55
u8
init4
;
/* true if 4 byte init */
56
u8
elcr
;
/* PIIX edge/trigger selection */
57
u8
elcr_mask
;
58
u8
isr_ack
;
/* interrupt ack detection */
59
struct
kvm_pic
*
pics_state
;
60
};
61
62
struct
kvm_pic
{
63
spinlock_t
lock
;
64
bool
wakeup_needed
;
65
unsigned
pending_acks
;
66
struct
kvm
*
kvm
;
67
struct
kvm_kpic_state
pics
[2];
/* 0 is master pic, 1 is slave pic */
68
int
output
;
/* intr from master PIC */
69
struct
kvm_io_device
dev_master
;
70
struct
kvm_io_device
dev_slave
;
71
struct
kvm_io_device
dev_eclr
;
72
void
(*
ack_notifier
)(
void
*opaque,
int
irq
);
73
unsigned
long
irq_states
[
PIC_NUM_PINS
];
74
};
75
76
struct
kvm_pic
*
kvm_create_pic
(
struct
kvm
*
kvm
);
77
void
kvm_destroy_pic
(
struct
kvm
*
kvm
);
78
int
kvm_pic_read_irq
(
struct
kvm
*
kvm
);
79
void
kvm_pic_update_irq
(
struct
kvm_pic
*
s
);
80
81
static
inline
struct
kvm_pic
*pic_irqchip(
struct
kvm
*
kvm
)
82
{
83
return
kvm->
arch
.vpic;
84
}
85
86
static
inline
int
irqchip_in_kernel(
struct
kvm
*
kvm
)
87
{
88
int
ret
;
89
90
ret = (pic_irqchip(kvm) !=
NULL
);
91
smp_rmb
();
92
return
ret
;
93
}
94
95
void
kvm_pic_reset
(
struct
kvm_kpic_state
*
s
);
96
97
void
kvm_inject_pending_timer_irqs
(
struct
kvm_vcpu
*vcpu);
98
void
kvm_inject_apic_timer_irqs
(
struct
kvm_vcpu
*vcpu);
99
void
kvm_apic_nmi_wd_deliver
(
struct
kvm_vcpu
*vcpu);
100
void
__kvm_migrate_apic_timer
(
struct
kvm_vcpu
*vcpu);
101
void
__kvm_migrate_pit_timer
(
struct
kvm_vcpu
*vcpu);
102
void
__kvm_migrate_timers
(
struct
kvm_vcpu
*vcpu);
103
104
int
apic_has_pending_timer
(
struct
kvm_vcpu
*vcpu);
105
106
#endif
Generated on Thu Jan 10 2013 12:49:53 for Linux Kernel by
1.8.2