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
s390
kvm
kvm-s390.h
Go to the documentation of this file.
1
/*
2
* definition for kvm on s390
3
*
4
* Copyright IBM Corp. 2008, 2009
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License (version 2 only)
8
* as published by the Free Software Foundation.
9
*
10
* Author(s): Carsten Otte <
[email protected]
>
11
* Christian Borntraeger <
[email protected]
>
12
* Christian Ehrhardt <
[email protected]
>
13
*/
14
15
#ifndef ARCH_S390_KVM_S390_H
16
#define ARCH_S390_KVM_S390_H
17
18
#include <linux/hrtimer.h>
19
#include <
linux/kvm.h
>
20
#include <
linux/kvm_host.h
>
21
22
/* The current code can have up to 256 pages for virtio */
23
#define VIRTIODESCSPACE (256ul * 4096ul)
24
25
typedef
int
(*
intercept_handler_t
)(
struct
kvm_vcpu
*vcpu);
26
27
/* negativ values are error codes, positive values for internal conditions */
28
#define SIE_INTERCEPT_RERUNVCPU (1<<0)
29
#define SIE_INTERCEPT_UCONTROL (1<<1)
30
int
kvm_handle_sie_intercept
(
struct
kvm_vcpu
*vcpu);
31
32
#define VM_EVENT(d_kvm, d_loglevel, d_string, d_args...)\
33
do { \
34
debug_sprintf_event(d_kvm->arch.dbf, d_loglevel, d_string "\n", \
35
d_args); \
36
} while (0)
37
38
#define VCPU_EVENT(d_vcpu, d_loglevel, d_string, d_args...)\
39
do { \
40
debug_sprintf_event(d_vcpu->kvm->arch.dbf, d_loglevel, \
41
"%02d[%016lx-%016lx]: " d_string "\n", d_vcpu->vcpu_id, \
42
d_vcpu->arch.sie_block->gpsw.mask, d_vcpu->arch.sie_block->gpsw.addr,\
43
d_args); \
44
} while (0)
45
46
static
inline
int
__cpu_is_stopped(
struct
kvm_vcpu
*vcpu)
47
{
48
return
atomic_read
(&vcpu->
arch
.sie_block->cpuflags) &
CPUSTAT_STOP_INT
;
49
}
50
51
static
inline
int
kvm_is_ucontrol(
struct
kvm
*
kvm
)
52
{
53
#ifdef CONFIG_KVM_S390_UCONTROL
54
if
(kvm->
arch
.gmap)
55
return
0;
56
return
1;
57
#else
58
return
0;
59
#endif
60
}
61
62
static
inline
void
kvm_s390_set_prefix(
struct
kvm_vcpu
*vcpu,
u32
prefix
)
63
{
64
vcpu->
arch
.sie_block->prefix = prefix & 0x7fffe000
u
;
65
vcpu->
arch
.sie_block->ihcpu = 0xffff;
66
}
67
68
int
kvm_s390_handle_wait
(
struct
kvm_vcpu
*vcpu);
69
enum
hrtimer_restart
kvm_s390_idle_wakeup
(
struct
hrtimer
*
timer
);
70
void
kvm_s390_tasklet
(
unsigned
long
parm
);
71
void
kvm_s390_deliver_pending_interrupts
(
struct
kvm_vcpu
*vcpu);
72
int
kvm_s390_inject_vm
(
struct
kvm *kvm,
73
struct
kvm_s390_interrupt
*s390int);
74
int
kvm_s390_inject_vcpu
(
struct
kvm_vcpu
*vcpu,
75
struct
kvm_s390_interrupt
*s390int);
76
int
kvm_s390_inject_program_int
(
struct
kvm_vcpu
*vcpu,
u16
code
);
77
int
kvm_s390_inject_sigp_stop
(
struct
kvm_vcpu
*vcpu,
int
action
);
78
79
/* implemented in priv.c */
80
int
kvm_s390_handle_b2
(
struct
kvm_vcpu
*vcpu);
81
int
kvm_s390_handle_e5
(
struct
kvm_vcpu
*vcpu);
82
int
kvm_s390_handle_01
(
struct
kvm_vcpu
*vcpu);
83
84
/* implemented in sigp.c */
85
int
kvm_s390_handle_sigp
(
struct
kvm_vcpu
*vcpu);
86
87
/* implemented in kvm-s390.c */
88
int
kvm_s390_vcpu_store_status
(
struct
kvm_vcpu
*vcpu,
89
unsigned
long
addr
);
90
/* implemented in diag.c */
91
int
kvm_s390_handle_diag
(
struct
kvm_vcpu
*vcpu);
92
93
#endif
Generated on Thu Jan 10 2013 13:16:56 for Linux Kernel by
1.8.2