typedef struct start_info start_info_t;
#endif
+/* MMU UPDATE operations */
+#ifndef __ASSEMBLY__
+struct mmu_update {
+#define MMU_NORMAL_PT_UPDATE 0 /* checked '*ptr = val'. ptr is MA. */
+#define MMU_MACHPHYS_UPDATE 1 /* ptr = MA of frame to modify entry for */
+#define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr = val | (*ptr&(A|D)) */
+ uint64_t ptr; /* Machine address of PTE. */
+ uint64_t val; /* New contents of PTE. */
+};
+typedef struct mmu_update mmu_update_t;
+#endif
+
/*
* MMU EXTENDED OPERATIONS
*
return HYPERCALL1(long, __HYPERVISOR_set_trap_table, ti);
}
+static inline long hypercall_mmu_update(const mmu_update_t reqs[],
+ unsigned int count,
+ unsigned int *done,
+ unsigned int foreigndom)
+{
+ return HYPERCALL4(long, __HYPERVISOR_mmu_update,
+ reqs, count, done, foreigndom);
+}
+
static inline long hypercall_stack_switch(const unsigned int ss, const void *sp)
{
return HYPERCALL2(long, __HYPERVISOR_stack_switch, ss, sp);