You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

hvm.h 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #ifndef _HVM_H
  2. #define _HVM_H
  3. /** @file
  4. *
  5. * Xen HVM driver
  6. *
  7. */
  8. FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
  9. #include <stdint.h>
  10. #include <ipxe/xen.h>
  11. #include <xen/hvm/hvm_op.h>
  12. #include <xen/hvm/params.h>
  13. /** Minimum CPUID base */
  14. #define HVM_CPUID_MIN 0x40000000UL
  15. /** Maximum CPUID base */
  16. #define HVM_CPUID_MAX 0x4000ff00UL
  17. /** Increment between CPUID bases */
  18. #define HVM_CPUID_STEP 0x00000100UL
  19. /** Magic signature */
  20. #define HVM_CPUID_MAGIC "XenVMMXenVMM"
  21. /** Get Xen version */
  22. #define HVM_CPUID_VERSION 1
  23. /** Get number of hypercall pages */
  24. #define HVM_CPUID_PAGES 2
  25. /** PCI MMIO BAR */
  26. #define HVM_MMIO_BAR PCI_BASE_ADDRESS_1
  27. /** A Xen HVM device */
  28. struct hvm_device {
  29. /** Xen hypervisor */
  30. struct xen_hypervisor xen;
  31. /** CPUID base */
  32. uint32_t cpuid_base;
  33. /** Length of hypercall table */
  34. size_t hypercall_len;
  35. /** MMIO base address */
  36. unsigned long mmio;
  37. /** Current offset within MMIO address space */
  38. size_t mmio_offset;
  39. /** Length of MMIO address space */
  40. size_t mmio_len;
  41. };
  42. /**
  43. * Get HVM parameter value
  44. *
  45. * @v xen Xen hypervisor
  46. * @v index Parameter index
  47. * @v value Value to fill in
  48. * @ret xenrc Xen status code
  49. */
  50. static inline int xen_hvm_get_param ( struct xen_hypervisor *xen,
  51. unsigned int index, uint64_t *value ) {
  52. struct xen_hvm_param param;
  53. int xenrc;
  54. param.domid = DOMID_SELF;
  55. param.index = index;
  56. xenrc = xen_hypercall_2 ( xen, __HYPERVISOR_hvm_op, HVMOP_get_param,
  57. virt_to_phys ( &param ) );
  58. *value = param.value;
  59. return xenrc;
  60. }
  61. #endif /* _HVM_H */