1c3347ed0SJanosch Frank /*
2c3347ed0SJanosch Frank * Protected Virtualization header
3c3347ed0SJanosch Frank *
4c3347ed0SJanosch Frank * Copyright IBM Corp. 2020
5c3347ed0SJanosch Frank * Author(s):
6c3347ed0SJanosch Frank * Janosch Frank <frankja@linux.ibm.com>
7c3347ed0SJanosch Frank *
8c3347ed0SJanosch Frank * This work is licensed under the terms of the GNU GPL, version 2 or (at
9c3347ed0SJanosch Frank * your option) any later version. See the COPYING file in the top-level
10c3347ed0SJanosch Frank * directory.
11c3347ed0SJanosch Frank */
12c3347ed0SJanosch Frank #ifndef HW_S390_PV_H
13c3347ed0SJanosch Frank #define HW_S390_PV_H
14c3347ed0SJanosch Frank
15651615d9SDavid Gibson #include "qapi/error.h"
1632cad1ffSPhilippe Mathieu-Daudé #include "system/kvm.h"
1788693ab2SClaudio Imbrenda #include "hw/s390x/s390-virtio-ccw.h"
18651615d9SDavid Gibson
19*55a494e5SGautam Gala struct S390PVResponse {
20*55a494e5SGautam Gala uint16_t cmd;
21*55a494e5SGautam Gala uint16_t rrc;
22*55a494e5SGautam Gala uint16_t rc;
23*55a494e5SGautam Gala };
24*55a494e5SGautam Gala
25c3347ed0SJanosch Frank #ifdef CONFIG_KVM
26fbc1384cSChristian Borntraeger #include "cpu.h"
27c3347ed0SJanosch Frank
s390_is_pv(void)28c3347ed0SJanosch Frank static inline bool s390_is_pv(void)
29c3347ed0SJanosch Frank {
30c3347ed0SJanosch Frank static S390CcwMachineState *ccw;
31c3347ed0SJanosch Frank Object *obj;
32c3347ed0SJanosch Frank
33c3347ed0SJanosch Frank if (ccw) {
34c3347ed0SJanosch Frank return ccw->pv;
35c3347ed0SJanosch Frank }
36c3347ed0SJanosch Frank
37c3347ed0SJanosch Frank /* we have to bail out for the "none" machine */
38c3347ed0SJanosch Frank obj = object_dynamic_cast(qdev_get_machine(),
39c3347ed0SJanosch Frank TYPE_S390_CCW_MACHINE);
40c3347ed0SJanosch Frank if (!obj) {
41c3347ed0SJanosch Frank return false;
42c3347ed0SJanosch Frank }
43c3347ed0SJanosch Frank ccw = S390_CCW_MACHINE(obj);
44c3347ed0SJanosch Frank return ccw->pv;
45c3347ed0SJanosch Frank }
46c3347ed0SJanosch Frank
4703d83ecfSJanosch Frank int s390_pv_query_info(void);
48c3347ed0SJanosch Frank int s390_pv_vm_enable(void);
49c3347ed0SJanosch Frank void s390_pv_vm_disable(void);
5088693ab2SClaudio Imbrenda bool s390_pv_vm_try_disable_async(S390CcwMachineState *ms);
51*55a494e5SGautam Gala int s390_pv_set_sec_parms(uint64_t origin, uint64_t length,
52*55a494e5SGautam Gala struct S390PVResponse *pv_resp, Error **errp);
53*55a494e5SGautam Gala int s390_pv_unpack(uint64_t addr, uint64_t size, uint64_t tweak,
54*55a494e5SGautam Gala struct S390PVResponse *pv_resp);
559a432597SJanosch Frank void s390_pv_prep_reset(void);
56*55a494e5SGautam Gala int s390_pv_verify(struct S390PVResponse *pv_resp);
57c3347ed0SJanosch Frank void s390_pv_unshare(void);
58*55a494e5SGautam Gala void s390_pv_inject_reset_error(CPUState *cs,
59*55a494e5SGautam Gala struct S390PVResponse pv_resp);
6003d83ecfSJanosch Frank uint64_t kvm_s390_pv_dmp_get_size_cpu(void);
6103d83ecfSJanosch Frank uint64_t kvm_s390_pv_dmp_get_size_mem_state(void);
6203d83ecfSJanosch Frank uint64_t kvm_s390_pv_dmp_get_size_completion_data(void);
6303d83ecfSJanosch Frank bool kvm_s390_pv_info_basic_valid(void);
64753ca06fSJanosch Frank int kvm_s390_dump_init(void);
65753ca06fSJanosch Frank int kvm_s390_dump_cpu(S390CPU *cpu, void *buff);
66753ca06fSJanosch Frank int kvm_s390_dump_mem_state(uint64_t addr, size_t len, void *dest);
67753ca06fSJanosch Frank int kvm_s390_dump_completion_data(void *buff);
68c3347ed0SJanosch Frank #else /* CONFIG_KVM */
s390_is_pv(void)69c3347ed0SJanosch Frank static inline bool s390_is_pv(void) { return false; }
s390_pv_query_info(void)7003d83ecfSJanosch Frank static inline int s390_pv_query_info(void) { return 0; }
s390_pv_vm_enable(void)71c3347ed0SJanosch Frank static inline int s390_pv_vm_enable(void) { return 0; }
s390_pv_vm_disable(void)72c3347ed0SJanosch Frank static inline void s390_pv_vm_disable(void) {}
s390_pv_vm_try_disable_async(S390CcwMachineState * ms)7388693ab2SClaudio Imbrenda static inline bool s390_pv_vm_try_disable_async(S390CcwMachineState *ms) { return false; }
s390_pv_set_sec_parms(uint64_t origin,uint64_t length,struct S390PVResponse * pv_resp,Error ** errp)747af51621SThomas Huth static inline int s390_pv_set_sec_parms(uint64_t origin, uint64_t length,
75*55a494e5SGautam Gala struct S390PVResponse *pv_resp,
767af51621SThomas Huth Error **errp) { return 0; }
s390_pv_unpack(uint64_t addr,uint64_t size,uint64_t tweak,struct S390PVResponse * pv_resp)77*55a494e5SGautam Gala static inline int s390_pv_unpack(uint64_t addr, uint64_t size, uint64_t tweak,
78*55a494e5SGautam Gala struct S390PVResponse *pv_resp) { return 0; }
s390_pv_prep_reset(void)799a432597SJanosch Frank static inline void s390_pv_prep_reset(void) {}
s390_pv_verify(struct S390PVResponse * pv_resp)80*55a494e5SGautam Gala static inline int s390_pv_verify(struct S390PVResponse *pv_resp) { return 0; }
s390_pv_unshare(void)81c3347ed0SJanosch Frank static inline void s390_pv_unshare(void) {}
s390_pv_inject_reset_error(CPUState * cs,struct S390PVResponse pv_resp)82*55a494e5SGautam Gala static inline void s390_pv_inject_reset_error(CPUState *cs,
83*55a494e5SGautam Gala struct S390PVResponse pv_resp) {};
kvm_s390_pv_dmp_get_size_cpu(void)8403d83ecfSJanosch Frank static inline uint64_t kvm_s390_pv_dmp_get_size_cpu(void) { return 0; }
kvm_s390_pv_dmp_get_size_mem_state(void)8503d83ecfSJanosch Frank static inline uint64_t kvm_s390_pv_dmp_get_size_mem_state(void) { return 0; }
kvm_s390_pv_dmp_get_size_completion_data(void)8603d83ecfSJanosch Frank static inline uint64_t kvm_s390_pv_dmp_get_size_completion_data(void) { return 0; }
kvm_s390_pv_info_basic_valid(void)8703d83ecfSJanosch Frank static inline bool kvm_s390_pv_info_basic_valid(void) { return false; }
kvm_s390_dump_init(void)88753ca06fSJanosch Frank static inline int kvm_s390_dump_init(void) { return 0; }
kvm_s390_dump_cpu(S390CPU * cpu,void * buff)89753ca06fSJanosch Frank static inline int kvm_s390_dump_cpu(S390CPU *cpu, void *buff) { return 0; }
kvm_s390_dump_mem_state(uint64_t addr,size_t len,void * dest)90753ca06fSJanosch Frank static inline int kvm_s390_dump_mem_state(uint64_t addr, size_t len,
91753ca06fSJanosch Frank void *dest) { return 0; }
kvm_s390_dump_completion_data(void * buff)92753ca06fSJanosch Frank static inline int kvm_s390_dump_completion_data(void *buff) { return 0; }
93c3347ed0SJanosch Frank #endif /* CONFIG_KVM */
94c3347ed0SJanosch Frank
95c3347ed0SJanosch Frank #endif /* HW_S390_PV_H */
96