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 15c3347ed0SJanosch Frank #ifdef CONFIG_KVM 16fbc1384cSChristian Borntraeger #include "cpu.h" 17c3347ed0SJanosch Frank #include "hw/s390x/s390-virtio-ccw.h" 18c3347ed0SJanosch Frank 19c3347ed0SJanosch Frank static inline bool s390_is_pv(void) 20c3347ed0SJanosch Frank { 21c3347ed0SJanosch Frank static S390CcwMachineState *ccw; 22c3347ed0SJanosch Frank Object *obj; 23c3347ed0SJanosch Frank 24c3347ed0SJanosch Frank if (ccw) { 25c3347ed0SJanosch Frank return ccw->pv; 26c3347ed0SJanosch Frank } 27c3347ed0SJanosch Frank 28c3347ed0SJanosch Frank /* we have to bail out for the "none" machine */ 29c3347ed0SJanosch Frank obj = object_dynamic_cast(qdev_get_machine(), 30c3347ed0SJanosch Frank TYPE_S390_CCW_MACHINE); 31c3347ed0SJanosch Frank if (!obj) { 32c3347ed0SJanosch Frank return false; 33c3347ed0SJanosch Frank } 34c3347ed0SJanosch Frank ccw = S390_CCW_MACHINE(obj); 35c3347ed0SJanosch Frank return ccw->pv; 36c3347ed0SJanosch Frank } 37c3347ed0SJanosch Frank 38c3347ed0SJanosch Frank int s390_pv_vm_enable(void); 39c3347ed0SJanosch Frank void s390_pv_vm_disable(void); 40c3347ed0SJanosch Frank int s390_pv_set_sec_parms(uint64_t origin, uint64_t length); 41c3347ed0SJanosch Frank int s390_pv_unpack(uint64_t addr, uint64_t size, uint64_t tweak); 42c3347ed0SJanosch Frank void s390_pv_perf_clear_reset(void); 43c3347ed0SJanosch Frank int s390_pv_verify(void); 44c3347ed0SJanosch Frank void s390_pv_unshare(void); 45fbc1384cSChristian Borntraeger void s390_pv_inject_reset_error(CPUState *cs); 46c3347ed0SJanosch Frank #else /* CONFIG_KVM */ 47c3347ed0SJanosch Frank static inline bool s390_is_pv(void) { return false; } 48c3347ed0SJanosch Frank static inline int s390_pv_vm_enable(void) { return 0; } 49c3347ed0SJanosch Frank static inline void s390_pv_vm_disable(void) {} 50c3347ed0SJanosch Frank static inline int s390_pv_set_sec_parms(uint64_t origin, uint64_t length) { return 0; } 51c3347ed0SJanosch Frank static inline int s390_pv_unpack(uint64_t addr, uint64_t size, uint64_t tweak) { return 0; } 52c3347ed0SJanosch Frank static inline void s390_pv_perf_clear_reset(void) {} 53c3347ed0SJanosch Frank static inline int s390_pv_verify(void) { return 0; } 54c3347ed0SJanosch Frank static inline void s390_pv_unshare(void) {} 55fbc1384cSChristian Borntraeger static inline void s390_pv_inject_reset_error(CPUState *cs) {}; 56c3347ed0SJanosch Frank #endif /* CONFIG_KVM */ 57c3347ed0SJanosch Frank 58c3347ed0SJanosch Frank #endif /* HW_S390_PV_H */ 59