Merge branch 'arrakis'
[barrelfish] / include / arch / x86_64 / barrelfish / invocations_arch.h
index e3f6ec3..38ed895 100644 (file)
@@ -250,6 +250,23 @@ static inline errval_t invoke_frame_identify(struct capref frame,
     return sysret.error;
 }
 
+static inline errval_t invoke_vnode_identify(struct capref vnode,
+                                            struct vnode_identity *ret)
+{
+    struct sysret sysret = cap_invoke1(vnode, VNodeCmd_Identify);
+
+    assert(ret != NULL);
+    if (err_is_ok(sysret.error)) {
+        ret->base = sysret.value & (~BASE_PAGE_MASK);
+       ret->type = sysret.value & BASE_PAGE_MASK;
+        return sysret.error;
+    }
+
+    ret->base = 0;
+    ret->type = 0;
+    return sysret.error;
+}
+
 /**
  * \brief Modify mapping flags on parts of a mapped frame
  *
@@ -322,6 +339,61 @@ invoke_dispatcher(struct capref dispatcher, struct capref domdispatcher,
 }
 
 /**
+ * \brief Execute vmread on the VMCS of the VM guest DCB
+ *
+ * The VMCS must be current and active.
+ *
+ * \param dcb       Dispatcher capability
+ * \param encoding  Encoding of the field to read from the VMCS
+ * \param addr      The address to write the value of the field to.
+ */
+static inline errval_t invoke_dispatcher_vmread(struct capref dispatcher, 
+                                               uintptr_t encoding, 
+                                               lvaddr_t *addr)
+{
+    return cap_invoke3(dispatcher, DispatcherCmd_Vmread, 
+                      encoding, (uintptr_t)addr).error; 
+}
+
+/**
+ * \brief Execute vmwrite on the VMCS of the VM guest DCB
+ *
+ * The VMCS must be current and active.
+ *
+ * \param dcb       Dispatcher capability
+ * \param encoding  Encoding of the field to write to the VMCS.
+ * \param value     Value of the field to write.
+ */
+
+static inline errval_t invoke_dispatcher_vmwrite(struct capref dispatcher, 
+                                                uintptr_t encoding, 
+                                                uintptr_t value)
+{
+    return cap_invoke3(dispatcher, DispatcherCmd_Vmwrite, 
+                      encoding, value).error; 
+}
+
+/**
+ * \brief Execute vmptrld on the VMCS of the VM guest DCB
+ *
+ * \param dcb       Dispatcher capability
+ */
+static inline errval_t invoke_dispatcher_vmptrld(struct capref dispatcher)
+{
+    return cap_invoke1(dispatcher, DispatcherCmd_Vmptrld).error; 
+}
+
+/**
+ * \brief Execute vmclear on the VMCS of the VM guest DCB
+ *   
+ * \param dcb       Dispatcher capability
+ */
+static inline errval_t invoke_dispatcher_vmclear(struct capref dispatcher)
+{
+    return cap_invoke1(dispatcher, DispatcherCmd_Vmclear).error; 
+}
+
+/**
  * \brief Setup a VM guest DCB
  *
  * \param dcb       Dispatcher capability