cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ultravisor.h (2101B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Ultravisor definitions
      4 *
      5 * Copyright 2019, IBM Corporation.
      6 *
      7 */
      8#ifndef _ASM_POWERPC_ULTRAVISOR_H
      9#define _ASM_POWERPC_ULTRAVISOR_H
     10
     11#include <asm/asm-prototypes.h>
     12#include <asm/ultravisor-api.h>
     13#include <asm/firmware.h>
     14
     15int early_init_dt_scan_ultravisor(unsigned long node, const char *uname,
     16				  int depth, void *data);
     17
     18/*
     19 * In ultravisor enabled systems, PTCR becomes ultravisor privileged only for
     20 * writing and an attempt to write to it will cause a Hypervisor Emulation
     21 * Assistance interrupt.
     22 */
     23static inline void set_ptcr_when_no_uv(u64 val)
     24{
     25	if (!firmware_has_feature(FW_FEATURE_ULTRAVISOR))
     26		mtspr(SPRN_PTCR, val);
     27}
     28
     29static inline int uv_register_pate(u64 lpid, u64 dw0, u64 dw1)
     30{
     31	return ucall_norets(UV_WRITE_PATE, lpid, dw0, dw1);
     32}
     33
     34static inline int uv_share_page(u64 pfn, u64 npages)
     35{
     36	return ucall_norets(UV_SHARE_PAGE, pfn, npages);
     37}
     38
     39static inline int uv_unshare_page(u64 pfn, u64 npages)
     40{
     41	return ucall_norets(UV_UNSHARE_PAGE, pfn, npages);
     42}
     43
     44static inline int uv_unshare_all_pages(void)
     45{
     46	return ucall_norets(UV_UNSHARE_ALL_PAGES);
     47}
     48
     49static inline int uv_page_in(u64 lpid, u64 src_ra, u64 dst_gpa, u64 flags,
     50			     u64 page_shift)
     51{
     52	return ucall_norets(UV_PAGE_IN, lpid, src_ra, dst_gpa, flags,
     53			    page_shift);
     54}
     55
     56static inline int uv_page_out(u64 lpid, u64 dst_ra, u64 src_gpa, u64 flags,
     57			      u64 page_shift)
     58{
     59	return ucall_norets(UV_PAGE_OUT, lpid, dst_ra, src_gpa, flags,
     60			    page_shift);
     61}
     62
     63static inline int uv_register_mem_slot(u64 lpid, u64 start_gpa, u64 size,
     64				       u64 flags, u64 slotid)
     65{
     66	return ucall_norets(UV_REGISTER_MEM_SLOT, lpid, start_gpa,
     67			    size, flags, slotid);
     68}
     69
     70static inline int uv_unregister_mem_slot(u64 lpid, u64 slotid)
     71{
     72	return ucall_norets(UV_UNREGISTER_MEM_SLOT, lpid, slotid);
     73}
     74
     75static inline int uv_page_inval(u64 lpid, u64 gpa, u64 page_shift)
     76{
     77	return ucall_norets(UV_PAGE_INVAL, lpid, gpa, page_shift);
     78}
     79
     80static inline int uv_svm_terminate(u64 lpid)
     81{
     82	return ucall_norets(UV_SVM_TERMINATE, lpid);
     83}
     84
     85#endif	/* _ASM_POWERPC_ULTRAVISOR_H */