| .. | .. |
|---|
| 33 | 33 | #ifndef _GVT_HYPERCALL_H_ |
|---|
| 34 | 34 | #define _GVT_HYPERCALL_H_ |
|---|
| 35 | 35 | |
|---|
| 36 | +#include <linux/types.h> |
|---|
| 37 | + |
|---|
| 38 | +struct device; |
|---|
| 39 | + |
|---|
| 40 | +enum hypervisor_type { |
|---|
| 41 | + INTEL_GVT_HYPERVISOR_XEN = 0, |
|---|
| 42 | + INTEL_GVT_HYPERVISOR_KVM, |
|---|
| 43 | +}; |
|---|
| 44 | + |
|---|
| 36 | 45 | /* |
|---|
| 37 | 46 | * Specific GVT-g MPT modules function collections. Currently GVT-g supports |
|---|
| 38 | 47 | * both Xen and KVM by providing dedicated hypervisor-related MPT modules. |
|---|
| 39 | 48 | */ |
|---|
| 40 | 49 | struct intel_gvt_mpt { |
|---|
| 50 | + enum hypervisor_type type; |
|---|
| 41 | 51 | int (*host_init)(struct device *dev, void *gvt, const void *ops); |
|---|
| 42 | | - void (*host_exit)(struct device *dev, void *gvt); |
|---|
| 52 | + void (*host_exit)(struct device *dev); |
|---|
| 43 | 53 | int (*attach_vgpu)(void *vgpu, unsigned long *handle); |
|---|
| 44 | | - void (*detach_vgpu)(unsigned long handle); |
|---|
| 54 | + void (*detach_vgpu)(void *vgpu); |
|---|
| 45 | 55 | int (*inject_msi)(unsigned long handle, u32 addr, u16 data); |
|---|
| 46 | 56 | unsigned long (*from_virt_to_mfn)(void *p); |
|---|
| 47 | 57 | int (*enable_page_track)(unsigned long handle, u64 gfn); |
|---|
| .. | .. |
|---|
| 56 | 66 | unsigned long size, dma_addr_t *dma_addr); |
|---|
| 57 | 67 | void (*dma_unmap_guest_page)(unsigned long handle, dma_addr_t dma_addr); |
|---|
| 58 | 68 | |
|---|
| 69 | + int (*dma_pin_guest_page)(unsigned long handle, dma_addr_t dma_addr); |
|---|
| 70 | + |
|---|
| 59 | 71 | int (*map_gfn_to_mfn)(unsigned long handle, unsigned long gfn, |
|---|
| 60 | 72 | unsigned long mfn, unsigned int nr, bool map); |
|---|
| 61 | 73 | int (*set_trap_area)(unsigned long handle, u64 start, u64 end, |
|---|
| 62 | 74 | bool map); |
|---|
| 63 | 75 | int (*set_opregion)(void *vgpu); |
|---|
| 76 | + int (*set_edid)(void *vgpu, int port_num); |
|---|
| 64 | 77 | int (*get_vfio_device)(void *vgpu); |
|---|
| 65 | 78 | void (*put_vfio_device)(void *vgpu); |
|---|
| 66 | 79 | bool (*is_valid_gfn)(unsigned long handle, unsigned long gfn); |
|---|
| 67 | 80 | }; |
|---|
| 68 | | - |
|---|
| 69 | | -extern struct intel_gvt_mpt xengt_mpt; |
|---|
| 70 | | -extern struct intel_gvt_mpt kvmgt_mpt; |
|---|
| 71 | 81 | |
|---|
| 72 | 82 | #endif /* _GVT_HYPERCALL_H_ */ |
|---|