1bb04ffe8SClaudio Carvalho /* SPDX-License-Identifier: GPL-2.0 */
2bb04ffe8SClaudio Carvalho /*
3bb04ffe8SClaudio Carvalho * Ultravisor definitions
4bb04ffe8SClaudio Carvalho *
5bb04ffe8SClaudio Carvalho * Copyright 2019, IBM Corporation.
6bb04ffe8SClaudio Carvalho *
7bb04ffe8SClaudio Carvalho */
8bb04ffe8SClaudio Carvalho #ifndef _ASM_POWERPC_ULTRAVISOR_H
9bb04ffe8SClaudio Carvalho #define _ASM_POWERPC_ULTRAVISOR_H
10bb04ffe8SClaudio Carvalho
11139a1d28SMichael Anderson #include <asm/asm-prototypes.h>
12139a1d28SMichael Anderson #include <asm/ultravisor-api.h>
1352231340SClaudio Carvalho #include <asm/firmware.h>
14139a1d28SMichael Anderson
15bb04ffe8SClaudio Carvalho int early_init_dt_scan_ultravisor(unsigned long node, const char *uname,
16bb04ffe8SClaudio Carvalho int depth, void *data);
17bb04ffe8SClaudio Carvalho
1852231340SClaudio Carvalho /*
1952231340SClaudio Carvalho * In ultravisor enabled systems, PTCR becomes ultravisor privileged only for
2052231340SClaudio Carvalho * writing and an attempt to write to it will cause a Hypervisor Emulation
2152231340SClaudio Carvalho * Assistance interrupt.
2252231340SClaudio Carvalho */
set_ptcr_when_no_uv(u64 val)2352231340SClaudio Carvalho static inline void set_ptcr_when_no_uv(u64 val)
2452231340SClaudio Carvalho {
2552231340SClaudio Carvalho if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR))
2652231340SClaudio Carvalho mtspr(SPRN_PTCR, val);
2752231340SClaudio Carvalho }
2852231340SClaudio Carvalho
uv_register_pate(u64 lpid,u64 dw0,u64 dw1)29139a1d28SMichael Anderson static inline int uv_register_pate(u64 lpid, u64 dw0, u64 dw1)
30139a1d28SMichael Anderson {
31139a1d28SMichael Anderson return ucall_norets(UV_WRITE_PATE, lpid, dw0, dw1);
32139a1d28SMichael Anderson }
33139a1d28SMichael Anderson
uv_share_page(u64 pfn,u64 npages)34f7777e00SRam Pai static inline int uv_share_page(u64 pfn, u64 npages)
35f7777e00SRam Pai {
36f7777e00SRam Pai return ucall_norets(UV_SHARE_PAGE, pfn, npages);
37f7777e00SRam Pai }
38f7777e00SRam Pai
uv_unshare_page(u64 pfn,u64 npages)39f7777e00SRam Pai static inline int uv_unshare_page(u64 pfn, u64 npages)
40f7777e00SRam Pai {
41f7777e00SRam Pai return ucall_norets(UV_UNSHARE_PAGE, pfn, npages);
42f7777e00SRam Pai }
43f7777e00SRam Pai
uv_unshare_all_pages(void)44256ba2c1SRam Pai static inline int uv_unshare_all_pages(void)
45256ba2c1SRam Pai {
46256ba2c1SRam Pai return ucall_norets(UV_UNSHARE_ALL_PAGES);
47256ba2c1SRam Pai }
48256ba2c1SRam Pai
uv_page_in(u64 lpid,u64 src_ra,u64 dst_gpa,u64 flags,u64 page_shift)49ca9f4942SBharata B Rao static inline int uv_page_in(u64 lpid, u64 src_ra, u64 dst_gpa, u64 flags,
50ca9f4942SBharata B Rao u64 page_shift)
51ca9f4942SBharata B Rao {
52ca9f4942SBharata B Rao return ucall_norets(UV_PAGE_IN, lpid, src_ra, dst_gpa, flags,
53ca9f4942SBharata B Rao page_shift);
54ca9f4942SBharata B Rao }
55ca9f4942SBharata B Rao
uv_page_out(u64 lpid,u64 dst_ra,u64 src_gpa,u64 flags,u64 page_shift)56ca9f4942SBharata B Rao static inline int uv_page_out(u64 lpid, u64 dst_ra, u64 src_gpa, u64 flags,
57ca9f4942SBharata B Rao u64 page_shift)
58ca9f4942SBharata B Rao {
59ca9f4942SBharata B Rao return ucall_norets(UV_PAGE_OUT, lpid, dst_ra, src_gpa, flags,
60ca9f4942SBharata B Rao page_shift);
61ca9f4942SBharata B Rao }
62ca9f4942SBharata B Rao
uv_register_mem_slot(u64 lpid,u64 start_gpa,u64 size,u64 flags,u64 slotid)63ca9f4942SBharata B Rao static inline int uv_register_mem_slot(u64 lpid, u64 start_gpa, u64 size,
64ca9f4942SBharata B Rao u64 flags, u64 slotid)
65ca9f4942SBharata B Rao {
66ca9f4942SBharata B Rao return ucall_norets(UV_REGISTER_MEM_SLOT, lpid, start_gpa,
67ca9f4942SBharata B Rao size, flags, slotid);
68ca9f4942SBharata B Rao }
69ca9f4942SBharata B Rao
uv_unregister_mem_slot(u64 lpid,u64 slotid)70c3262257SBharata B Rao static inline int uv_unregister_mem_slot(u64 lpid, u64 slotid)
71c3262257SBharata B Rao {
72c3262257SBharata B Rao return ucall_norets(UV_UNREGISTER_MEM_SLOT, lpid, slotid);
73c3262257SBharata B Rao }
74c3262257SBharata B Rao
uv_page_inval(u64 lpid,u64 gpa,u64 page_shift)75008e359cSBharata B Rao static inline int uv_page_inval(u64 lpid, u64 gpa, u64 page_shift)
76008e359cSBharata B Rao {
77008e359cSBharata B Rao return ucall_norets(UV_PAGE_INVAL, lpid, gpa, page_shift);
78008e359cSBharata B Rao }
79008e359cSBharata B Rao
uv_svm_terminate(u64 lpid)80*22945688SBharata B Rao static inline int uv_svm_terminate(u64 lpid)
81*22945688SBharata B Rao {
82*22945688SBharata B Rao return ucall_norets(UV_SVM_TERMINATE, lpid);
83*22945688SBharata B Rao }
84*22945688SBharata B Rao
85bb04ffe8SClaudio Carvalho #endif /* _ASM_POWERPC_ULTRAVISOR_H */
86