On 22/06/15 13:16, Wei Liu wrote:
+#pragma GCC diagnostic ignored "-Wcast-qual"
+#include <mini-os/mm.h>
+#pragma GCC diagnostic error "-Wcast-qual"
+static int...
+xenprivcmd_ioctl(void *v)
+{
+ switch (cmd) {
+ case IOCTL_PRIVCMD_HYPERCALL:
+ {
+ privcmd_hypercall_t *hc = (privcmd_hypercall_t *)ap->a_data;
+
+ if (hc->op >= (PAGE_SIZE >> 5))
+ return EINVAL;
+#if defined(__i386__)
+# define L1_PROT (0x001ULL /*_PAGE_PRESENT*/ | \
+ 0x002ULL /*_PAGE_RW*/ | \
+ 0x020ULL /*_PAGE_ACCESSED*/)
+#elif defined(__x86_64__)
+# define L1_PROT (0x001ULL /*_PAGE_PRESENT*/ | \
+ 0x002ULL /*_PAGE_RW*/ | \
+ 0x020ULL /*_PAGE_ACCESSED*/| \
+ 0x004ULL /*_PAGE_USER*/)
+#endif
+ case IOCTL_PRIVCMD_MMAP:
+ {
+ int i;
+ privcmd_mmap_t *mcmd = ap->a_data;
+ privcmd_mmap_entry_t mentry;
+
+ for (i = 0; i < mcmd->num; i++) {
+ err = copyin(&mcmd->entry[i], &mentry, sizeof(mentry));
+ if (err)
+ return err;
+
+ if (mentry.npages == 0)
+ return EINVAL;
+
+ KASSERT(!(mentry.va & PAGE_MASK));
+ /* Call with err argument == NULL will just abort the
+ * whole program if failed
+ */
+ minios_map_frames(mentry.va, &mentry.mfn, mentry.npages,
+ 0, 0, mcmd->dom, NULL, L1_PROT);
+ }
+
+ err = 0;
+ break;
+ }
+ case IOCTL_PRIVCMD_MMAPBATCH:
+ {
+ privcmd_mmapbatch_t *pmb = ap->a_data;
+
+ if (pmb->num == 0)
+ return EINVAL;
+ KASSERT(!(pmb->addr & PAGE_MASK));
+ KERNFS_ALLOCENTRY(dkt, M_TEMP, M_WAITOK);
+ /* XXX: Take VREG value from sys/vnode.h. Including vnode.h
+ * opens a can of worms. Remember to update that value if
+ * vnode.h changes.
+ */
diff --git a/platform/xen/rumpxendev/xenio.h b/platform/xen/rumpxendev/xenio.h...
new file mode 100644
index 0000000..6b25733
--- /dev/null
+++ b/platform/xen/rumpxendev/xenio.h
+#if defined(_KERNEL)
+/* compat */
+#define IOCTL_PRIVCMD_INITDOMAIN_EVTCHN_OLD \
+ _IO('P', 1)