~ubuntu-branches/debian/experimental/linux-tools/experimental

« back to all changes in this revision

Viewing changes to arch/powerpc/include/asm/kvm_ppc.h

  • Committer: Package Import Robot
  • Author(s): Ben Hutchings
  • Date: 2014-02-02 16:57:49 UTC
  • mfrom: (1.1.10) (0.1.21 sid)
  • Revision ID: package-import@ubuntu.com-20140202165749-tw94o9t1t0a8txk6
Tags: 3.13-1~exp2
Merge changes from sid up to 3.12.6-3

Show diffs side-by-side

added added

removed removed

Lines of Context:
106
106
                                       struct kvm_interrupt *irq);
107
107
extern void kvmppc_core_dequeue_external(struct kvm_vcpu *vcpu);
108
108
extern void kvmppc_core_flush_tlb(struct kvm_vcpu *vcpu);
109
 
 
110
 
extern int kvmppc_core_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu,
111
 
                                  unsigned int op, int *advance);
112
 
extern int kvmppc_core_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn,
113
 
                                     ulong val);
114
 
extern int kvmppc_core_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn,
115
 
                                     ulong *val);
116
109
extern int kvmppc_core_check_requests(struct kvm_vcpu *vcpu);
117
110
 
118
111
extern int kvmppc_booke_init(void);
135
128
                                struct kvm_create_spapr_tce *args);
136
129
extern long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
137
130
                             unsigned long ioba, unsigned long tce);
138
 
extern long kvm_vm_ioctl_allocate_rma(struct kvm *kvm,
139
 
                                struct kvm_allocate_rma *rma);
140
131
extern struct kvm_rma_info *kvm_alloc_rma(void);
141
132
extern void kvm_release_rma(struct kvm_rma_info *ri);
142
133
extern struct page *kvm_alloc_hpt(unsigned long nr_pages);
143
134
extern void kvm_release_hpt(struct page *page, unsigned long nr_pages);
144
135
extern int kvmppc_core_init_vm(struct kvm *kvm);
145
136
extern void kvmppc_core_destroy_vm(struct kvm *kvm);
146
 
extern void kvmppc_core_free_memslot(struct kvm_memory_slot *free,
 
137
extern void kvmppc_core_free_memslot(struct kvm *kvm,
 
138
                                     struct kvm_memory_slot *free,
147
139
                                     struct kvm_memory_slot *dont);
148
 
extern int kvmppc_core_create_memslot(struct kvm_memory_slot *slot,
 
140
extern int kvmppc_core_create_memslot(struct kvm *kvm,
 
141
                                      struct kvm_memory_slot *slot,
149
142
                                      unsigned long npages);
150
143
extern int kvmppc_core_prepare_memory_region(struct kvm *kvm,
151
144
                                struct kvm_memory_slot *memslot,
177
170
extern int kvmppc_xics_int_on(struct kvm *kvm, u32 irq);
178
171
extern int kvmppc_xics_int_off(struct kvm *kvm, u32 irq);
179
172
 
 
173
union kvmppc_one_reg {
 
174
        u32     wval;
 
175
        u64     dval;
 
176
        vector128 vval;
 
177
        u64     vsxval[2];
 
178
        struct {
 
179
                u64     addr;
 
180
                u64     length;
 
181
        }       vpaval;
 
182
};
 
183
 
 
184
struct kvmppc_ops {
 
185
        struct module *owner;
 
186
        int (*get_sregs)(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs);
 
187
        int (*set_sregs)(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs);
 
188
        int (*get_one_reg)(struct kvm_vcpu *vcpu, u64 id,
 
189
                           union kvmppc_one_reg *val);
 
190
        int (*set_one_reg)(struct kvm_vcpu *vcpu, u64 id,
 
191
                           union kvmppc_one_reg *val);
 
192
        void (*vcpu_load)(struct kvm_vcpu *vcpu, int cpu);
 
193
        void (*vcpu_put)(struct kvm_vcpu *vcpu);
 
194
        void (*set_msr)(struct kvm_vcpu *vcpu, u64 msr);
 
195
        int (*vcpu_run)(struct kvm_run *run, struct kvm_vcpu *vcpu);
 
196
        struct kvm_vcpu *(*vcpu_create)(struct kvm *kvm, unsigned int id);
 
197
        void (*vcpu_free)(struct kvm_vcpu *vcpu);
 
198
        int (*check_requests)(struct kvm_vcpu *vcpu);
 
199
        int (*get_dirty_log)(struct kvm *kvm, struct kvm_dirty_log *log);
 
200
        void (*flush_memslot)(struct kvm *kvm, struct kvm_memory_slot *memslot);
 
201
        int (*prepare_memory_region)(struct kvm *kvm,
 
202
                                     struct kvm_memory_slot *memslot,
 
203
                                     struct kvm_userspace_memory_region *mem);
 
204
        void (*commit_memory_region)(struct kvm *kvm,
 
205
                                     struct kvm_userspace_memory_region *mem,
 
206
                                     const struct kvm_memory_slot *old);
 
207
        int (*unmap_hva)(struct kvm *kvm, unsigned long hva);
 
208
        int (*unmap_hva_range)(struct kvm *kvm, unsigned long start,
 
209
                           unsigned long end);
 
210
        int (*age_hva)(struct kvm *kvm, unsigned long hva);
 
211
        int (*test_age_hva)(struct kvm *kvm, unsigned long hva);
 
212
        void (*set_spte_hva)(struct kvm *kvm, unsigned long hva, pte_t pte);
 
213
        void (*mmu_destroy)(struct kvm_vcpu *vcpu);
 
214
        void (*free_memslot)(struct kvm_memory_slot *free,
 
215
                             struct kvm_memory_slot *dont);
 
216
        int (*create_memslot)(struct kvm_memory_slot *slot,
 
217
                              unsigned long npages);
 
218
        int (*init_vm)(struct kvm *kvm);
 
219
        void (*destroy_vm)(struct kvm *kvm);
 
220
        int (*get_smmu_info)(struct kvm *kvm, struct kvm_ppc_smmu_info *info);
 
221
        int (*emulate_op)(struct kvm_run *run, struct kvm_vcpu *vcpu,
 
222
                          unsigned int inst, int *advance);
 
223
        int (*emulate_mtspr)(struct kvm_vcpu *vcpu, int sprn, ulong spr_val);
 
224
        int (*emulate_mfspr)(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val);
 
225
        void (*fast_vcpu_kick)(struct kvm_vcpu *vcpu);
 
226
        long (*arch_vm_ioctl)(struct file *filp, unsigned int ioctl,
 
227
                              unsigned long arg);
 
228
 
 
229
};
 
230
 
 
231
extern struct kvmppc_ops *kvmppc_hv_ops;
 
232
extern struct kvmppc_ops *kvmppc_pr_ops;
 
233
 
 
234
static inline bool is_kvmppc_hv_enabled(struct kvm *kvm)
 
235
{
 
236
        return kvm->arch.kvm_ops == kvmppc_hv_ops;
 
237
}
 
238
 
180
239
/*
181
240
 * Cuts out inst bits with ordering according to spec.
182
241
 * That means the leftmost bit is zero. All given bits are included.
210
269
        return r;
211
270
}
212
271
 
213
 
union kvmppc_one_reg {
214
 
        u32     wval;
215
 
        u64     dval;
216
 
        vector128 vval;
217
 
        u64     vsxval[2];
218
 
        struct {
219
 
                u64     addr;
220
 
                u64     length;
221
 
        }       vpaval;
222
 
};
223
 
 
224
272
#define one_reg_size(id)        \
225
273
        (1ul << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
226
274
 
245
293
        __v;                                    \
246
294
})
247
295
 
248
 
void kvmppc_core_get_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs);
 
296
int kvmppc_core_get_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs);
249
297
int kvmppc_core_set_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs);
250
298
 
251
 
void kvmppc_get_sregs_ivor(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs);
 
299
int kvmppc_get_sregs_ivor(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs);
252
300
int kvmppc_set_sregs_ivor(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs);
253
301
 
254
302
int kvm_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg);
260
308
 
261
309
struct openpic;
262
310
 
263
 
#ifdef CONFIG_KVM_BOOK3S_64_HV
 
311
#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
264
312
extern void kvm_cma_reserve(void) __init;
265
313
static inline void kvmppc_set_xics_phys(int cpu, unsigned long addr)
266
314
{
269
317
 
270
318
static inline u32 kvmppc_get_xics_latch(void)
271
319
{
272
 
        u32 xirr = get_paca()->kvm_hstate.saved_xirr;
 
320
        u32 xirr;
273
321
 
 
322
        xirr = get_paca()->kvm_hstate.saved_xirr;
274
323
        get_paca()->kvm_hstate.saved_xirr = 0;
275
 
 
276
324
        return xirr;
277
325
}
278
326
 
281
329
        paca[cpu].kvm_hstate.host_ipi = host_ipi;
282
330
}
283
331
 
284
 
extern void kvmppc_fast_vcpu_kick(struct kvm_vcpu *vcpu);
 
332
static inline void kvmppc_fast_vcpu_kick(struct kvm_vcpu *vcpu)
 
333
{
 
334
        vcpu->kvm->arch.kvm_ops->fast_vcpu_kick(vcpu);
 
335
}
285
336
 
286
337
#else
287
338
static inline void __init kvm_cma_reserve(void)