107ac63dcSJanosch Frank /* SPDX-License-Identifier: GPL-2.0-or-later */ 2eb5a1bbaSCornelia Huck #ifndef _S390X_UV_H_ 3eb5a1bbaSCornelia Huck #define _S390X_UV_H_ 407ac63dcSJanosch Frank 5f4f97af0SJanosch Frank #include <sie.h> 673950a25SJanosch Frank #include <asm/pgtable.h> 7*95a94088SNicholas Piggin #include <vmalloc.h> 8f4f97af0SJanosch Frank 907ac63dcSJanosch Frank bool uv_os_is_guest(void); 1007ac63dcSJanosch Frank bool uv_os_is_host(void); 11ec6683adSJanosch Frank bool uv_host_requirement_checks(void); 1207ac63dcSJanosch Frank bool uv_query_test_call(unsigned int nr); 1326184212SSteffen Eiden const struct uv_cb_qui *uv_get_query_data(void); 14f4f97af0SJanosch Frank void uv_init(void); 1507ac63dcSJanosch Frank int uv_setup(void); 16f4f97af0SJanosch Frank void uv_create_guest(struct vm *vm); 17f4f97af0SJanosch Frank void uv_destroy_guest(struct vm *vm); 18f4f97af0SJanosch Frank int uv_unpack(struct vm *vm, uint64_t addr, uint64_t len, uint64_t tweak); 19f4f97af0SJanosch Frank void uv_verify_load(struct vm *vm); 2007ac63dcSJanosch Frank 2173950a25SJanosch Frank /* 2273950a25SJanosch Frank * To run PV guests we need to setup a few things: 2373950a25SJanosch Frank * - A valid primary ASCE that contains the guest memory and has the P bit set. 2473950a25SJanosch Frank * - A valid home space ASCE for the UV calls that use home space addresses. 2573950a25SJanosch Frank */ uv_setup_asces(void)2673950a25SJanosch Frankstatic inline void uv_setup_asces(void) 2773950a25SJanosch Frank { 2873950a25SJanosch Frank uint64_t asce; 2973950a25SJanosch Frank 3073950a25SJanosch Frank /* We need to have a valid primary ASCE to run guests. */ 3173950a25SJanosch Frank setup_vm(); 3273950a25SJanosch Frank 339e3cff66SJanosch Frank /* Grab the ASCE which setup_vm() just set up */ 349e3cff66SJanosch Frank asce = stctg(1); 3573950a25SJanosch Frank 3673950a25SJanosch Frank /* Copy ASCE into home space CR */ 3773950a25SJanosch Frank lctlg(13, asce); 3873950a25SJanosch Frank } 3973950a25SJanosch Frank uv_validity_check(struct vm * vm)40c3b0743fSJanosch Frankstatic inline bool uv_validity_check(struct vm *vm) 41c3b0743fSJanosch Frank { 42c3b0743fSJanosch Frank uint16_t vir = sie_get_validity(vm); 43c3b0743fSJanosch Frank 44c3b0743fSJanosch Frank return vm->sblk->icptcode == ICPT_VALIDITY && (vir & 0xff00) == 0x2000; 45c3b0743fSJanosch Frank } 46c3b0743fSJanosch Frank 4707ac63dcSJanosch Frank #endif /* UV_H */ 48