privcmd.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /******************************************************************************
  2. * privcmd.h
  3. *
  4. * Interface to /proc/xen/privcmd.
  5. *
  6. * Copyright (c) 2003-2005, K A Fraser
  7. *
  8. * This program is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License version 2
  10. * as published by the Free Software Foundation; or, when distributed
  11. * separately from the Linux kernel or incorporated into other
  12. * software packages, subject to the following license:
  13. *
  14. * Permission is hereby granted, free of charge, to any person obtaining a copy
  15. * of this source file (the "Software"), to deal in the Software without
  16. * restriction, including without limitation the rights to use, copy, modify,
  17. * merge, publish, distribute, sublicense, and/or sell copies of the Software,
  18. * and to permit persons to whom the Software is furnished to do so, subject to
  19. * the following conditions:
  20. *
  21. * The above copyright notice and this permission notice shall be included in
  22. * all copies or substantial portions of the Software.
  23. *
  24. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  25. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  26. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  27. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  28. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  29. * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  30. * IN THE SOFTWARE.
  31. */
  32. #ifndef __LINUX_PUBLIC_PRIVCMD_H__
  33. #define __LINUX_PUBLIC_PRIVCMD_H__
  34. #include <linux/types.h>
  35. #include <linux/compiler.h>
  36. typedef unsigned long xen_pfn_t;
  37. struct privcmd_hypercall {
  38. __u64 op;
  39. __u64 arg[5];
  40. };
  41. struct privcmd_mmap_entry {
  42. __u64 va;
  43. __u64 mfn;
  44. __u64 npages;
  45. };
  46. struct privcmd_mmap {
  47. int num;
  48. domid_t dom; /* target domain */
  49. struct privcmd_mmap_entry __user *entry;
  50. };
  51. struct privcmd_mmapbatch {
  52. int num; /* number of pages to populate */
  53. domid_t dom; /* target domain */
  54. __u64 addr; /* virtual address */
  55. xen_pfn_t __user *arr; /* array of mfns - top nibble set on err */
  56. };
  57. /*
  58. * @cmd: IOCTL_PRIVCMD_HYPERCALL
  59. * @arg: &privcmd_hypercall_t
  60. * Return: Value returned from execution of the specified hypercall.
  61. */
  62. #define IOCTL_PRIVCMD_HYPERCALL \
  63. _IOC(_IOC_NONE, 'P', 0, sizeof(struct privcmd_hypercall))
  64. #define IOCTL_PRIVCMD_MMAP \
  65. _IOC(_IOC_NONE, 'P', 2, sizeof(struct privcmd_mmap))
  66. #define IOCTL_PRIVCMD_MMAPBATCH \
  67. _IOC(_IOC_NONE, 'P', 3, sizeof(struct privcmd_mmapbatch))
  68. #endif /* __LINUX_PUBLIC_PRIVCMD_H__ */