qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

pv.h (3261B)


      1 /*
      2  * Protected Virtualization header
      3  *
      4  * Copyright IBM Corp. 2020
      5  * Author(s):
      6  *  Janosch Frank <frankja@linux.ibm.com>
      7  *
      8  * This work is licensed under the terms of the GNU GPL, version 2 or (at
      9  * your option) any later version. See the COPYING file in the top-level
     10  * directory.
     11  */
     12 #ifndef HW_S390_PV_H
     13 #define HW_S390_PV_H
     14 
     15 #include "qapi/error.h"
     16 #include "sysemu/kvm.h"
     17 
     18 #ifdef CONFIG_KVM
     19 #include "cpu.h"
     20 #include "hw/s390x/s390-virtio-ccw.h"
     21 
     22 static inline bool s390_is_pv(void)
     23 {
     24     static S390CcwMachineState *ccw;
     25     Object *obj;
     26 
     27     if (ccw) {
     28         return ccw->pv;
     29     }
     30 
     31     /* we have to bail out for the "none" machine */
     32     obj = object_dynamic_cast(qdev_get_machine(),
     33                               TYPE_S390_CCW_MACHINE);
     34     if (!obj) {
     35         return false;
     36     }
     37     ccw = S390_CCW_MACHINE(obj);
     38     return ccw->pv;
     39 }
     40 
     41 int s390_pv_query_info(void);
     42 int s390_pv_vm_enable(void);
     43 void s390_pv_vm_disable(void);
     44 int s390_pv_set_sec_parms(uint64_t origin, uint64_t length);
     45 int s390_pv_unpack(uint64_t addr, uint64_t size, uint64_t tweak);
     46 void s390_pv_prep_reset(void);
     47 int s390_pv_verify(void);
     48 void s390_pv_unshare(void);
     49 void s390_pv_inject_reset_error(CPUState *cs);
     50 uint64_t kvm_s390_pv_dmp_get_size_cpu(void);
     51 uint64_t kvm_s390_pv_dmp_get_size_mem_state(void);
     52 uint64_t kvm_s390_pv_dmp_get_size_completion_data(void);
     53 bool kvm_s390_pv_info_basic_valid(void);
     54 int kvm_s390_dump_init(void);
     55 int kvm_s390_dump_cpu(S390CPU *cpu, void *buff);
     56 int kvm_s390_dump_mem_state(uint64_t addr, size_t len, void *dest);
     57 int kvm_s390_dump_completion_data(void *buff);
     58 #else /* CONFIG_KVM */
     59 static inline bool s390_is_pv(void) { return false; }
     60 static inline int s390_pv_query_info(void) { return 0; }
     61 static inline int s390_pv_vm_enable(void) { return 0; }
     62 static inline void s390_pv_vm_disable(void) {}
     63 static inline int s390_pv_set_sec_parms(uint64_t origin, uint64_t length) { return 0; }
     64 static inline int s390_pv_unpack(uint64_t addr, uint64_t size, uint64_t tweak) { return 0; }
     65 static inline void s390_pv_prep_reset(void) {}
     66 static inline int s390_pv_verify(void) { return 0; }
     67 static inline void s390_pv_unshare(void) {}
     68 static inline void s390_pv_inject_reset_error(CPUState *cs) {};
     69 static inline uint64_t kvm_s390_pv_dmp_get_size_cpu(void) { return 0; }
     70 static inline uint64_t kvm_s390_pv_dmp_get_size_mem_state(void) { return 0; }
     71 static inline uint64_t kvm_s390_pv_dmp_get_size_completion_data(void) { return 0; }
     72 static inline bool kvm_s390_pv_info_basic_valid(void) { return false; }
     73 static inline int kvm_s390_dump_init(void) { return 0; }
     74 static inline int kvm_s390_dump_cpu(S390CPU *cpu, void *buff) { return 0; }
     75 static inline int kvm_s390_dump_mem_state(uint64_t addr, size_t len,
     76                                           void *dest) { return 0; }
     77 static inline int kvm_s390_dump_completion_data(void *buff) { return 0; }
     78 #endif /* CONFIG_KVM */
     79 
     80 int s390_pv_kvm_init(ConfidentialGuestSupport *cgs, Error **errp);
     81 static inline int s390_pv_init(ConfidentialGuestSupport *cgs, Error **errp)
     82 {
     83     if (!cgs) {
     84         return 0;
     85     }
     86     if (kvm_enabled()) {
     87         return s390_pv_kvm_init(cgs, errp);
     88     }
     89 
     90     error_setg(errp, "Protected Virtualization requires KVM");
     91     return -1;
     92 }
     93 
     94 #endif /* HW_S390_PV_H */