Statistics
| Branch: | Revision:

root / target-ppc / kvm_ppc.h @ 5b50e790

History | View | Annotate | Download (3.9 kB)

1
/*
2
 * Copyright 2008 IBM Corporation.
3
 * Authors: Hollis Blanchard <hollisb@us.ibm.com>
4
 *
5
 * This work is licensed under the GNU GPL license version 2 or later.
6
 *
7
 */
8

    
9
#ifndef __KVM_PPC_H__
10
#define __KVM_PPC_H__
11

    
12
#define TYPE_HOST_POWERPC_CPU "host-" TYPE_POWERPC_CPU
13

    
14
void kvmppc_init(void);
15

    
16
#ifdef CONFIG_KVM
17

    
18
uint32_t kvmppc_get_tbfreq(void);
19
uint64_t kvmppc_get_clockfreq(void);
20
uint32_t kvmppc_get_vmx(void);
21
uint32_t kvmppc_get_dfp(void);
22
int kvmppc_get_hasidle(CPUPPCState *env);
23
int kvmppc_get_hypercall(CPUPPCState *env, uint8_t *buf, int buf_len);
24
int kvmppc_set_interrupt(PowerPCCPU *cpu, int irq, int level);
25
void kvmppc_set_papr(PowerPCCPU *cpu);
26
void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy);
27
int kvmppc_smt_threads(void);
28
int kvmppc_clear_tsr_bits(PowerPCCPU *cpu, uint32_t tsr_bits);
29
int kvmppc_or_tsr_bits(PowerPCCPU *cpu, uint32_t tsr_bits);
30
int kvmppc_set_tcr(PowerPCCPU *cpu);
31
int kvmppc_booke_watchdog_enable(PowerPCCPU *cpu);
32
#ifndef CONFIG_USER_ONLY
33
off_t kvmppc_alloc_rma(const char *name, MemoryRegion *sysmem);
34
void *kvmppc_create_spapr_tce(uint32_t liobn, uint32_t window_size, int *pfd);
35
int kvmppc_remove_spapr_tce(void *table, int pfd, uint32_t window_size);
36
int kvmppc_reset_htab(int shift_hint);
37
uint64_t kvmppc_rma_size(uint64_t current_size, unsigned int hash_shift);
38
#endif /* !CONFIG_USER_ONLY */
39
int kvmppc_fixup_cpu(PowerPCCPU *cpu);
40
bool kvmppc_has_cap_epr(void);
41

    
42
#else
43

    
44
static inline uint32_t kvmppc_get_tbfreq(void)
45
{
46
    return 0;
47
}
48

    
49
static inline uint64_t kvmppc_get_clockfreq(void)
50
{
51
    return 0;
52
}
53

    
54
static inline uint32_t kvmppc_get_vmx(void)
55
{
56
    return 0;
57
}
58

    
59
static inline uint32_t kvmppc_get_dfp(void)
60
{
61
    return 0;
62
}
63

    
64
static inline int kvmppc_get_hasidle(CPUPPCState *env)
65
{
66
    return 0;
67
}
68

    
69
static inline int kvmppc_get_hypercall(CPUPPCState *env, uint8_t *buf, int buf_len)
70
{
71
    return -1;
72
}
73

    
74
static inline int kvmppc_read_segment_page_sizes(uint32_t *prop, int maxcells)
75
{
76
    return -1;
77
}
78

    
79
static inline int kvmppc_set_interrupt(PowerPCCPU *cpu, int irq, int level)
80
{
81
    return -1;
82
}
83

    
84
static inline void kvmppc_set_papr(PowerPCCPU *cpu)
85
{
86
}
87

    
88
static inline void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy)
89
{
90
}
91

    
92
static inline int kvmppc_smt_threads(void)
93
{
94
    return 1;
95
}
96

    
97
static inline int kvmppc_or_tsr_bits(PowerPCCPU *cpu, uint32_t tsr_bits)
98
{
99
    return 0;
100
}
101

    
102
static inline int kvmppc_clear_tsr_bits(PowerPCCPU *cpu, uint32_t tsr_bits)
103
{
104
    return 0;
105
}
106

    
107
static inline int kvmppc_set_tcr(PowerPCCPU *cpu)
108
{
109
    return 0;
110
}
111

    
112
static inline int kvmppc_booke_watchdog_enable(PowerPCCPU *cpu)
113
{
114
    return -1;
115
}
116

    
117
#ifndef CONFIG_USER_ONLY
118
static inline off_t kvmppc_alloc_rma(const char *name, MemoryRegion *sysmem)
119
{
120
    return 0;
121
}
122

    
123
static inline void *kvmppc_create_spapr_tce(uint32_t liobn,
124
                                            uint32_t window_size, int *fd)
125
{
126
    return NULL;
127
}
128

    
129
static inline int kvmppc_remove_spapr_tce(void *table, int pfd,
130
                                          uint32_t window_size)
131
{
132
    return -1;
133
}
134

    
135
static inline int kvmppc_reset_htab(int shift_hint)
136
{
137
    return -1;
138
}
139

    
140
static inline uint64_t kvmppc_rma_size(uint64_t current_size,
141
                                       unsigned int hash_shift)
142
{
143
    return ram_size;
144
}
145

    
146
static inline int kvmppc_update_sdr1(CPUPPCState *env)
147
{
148
    return 0;
149
}
150

    
151
#endif /* !CONFIG_USER_ONLY */
152

    
153
static inline int kvmppc_fixup_cpu(PowerPCCPU *cpu)
154
{
155
    return -1;
156
}
157

    
158
static inline bool kvmppc_has_cap_epr(void)
159
{
160
    return false;
161
}
162
#endif
163

    
164
#ifndef CONFIG_KVM
165
#define kvmppc_eieio() do { } while (0)
166
#else
167
#define kvmppc_eieio() \
168
    do {                                          \
169
        if (kvm_enabled()) {                          \
170
            asm volatile("eieio" : : : "memory"); \
171
        } \
172
    } while (0)
173
#endif
174

    
175
#ifndef KVM_INTERRUPT_SET
176
#define KVM_INTERRUPT_SET -1
177
#endif
178

    
179
#ifndef KVM_INTERRUPT_UNSET
180
#define KVM_INTERRUPT_UNSET -2
181
#endif
182

    
183
#ifndef KVM_INTERRUPT_SET_LEVEL
184
#define KVM_INTERRUPT_SET_LEVEL -3
185
#endif
186

    
187
#endif /* __KVM_PPC_H__ */