dm: Add vhm ioeventfd and irqfd interfaces

ioeventfd and irqfd support for vhm was introduced in kernel vhm module.
We provide the interfaces of them for DM users.

Tracked-On: #1329
Signed-off-by: Shuo Liu <shuo.a.liu@intel.com>
Acked-by: Yu Wang <yu1.wang@intel.com>
This commit is contained in:
Shuo Liu 2018-07-13 15:47:18 +08:00 committed by lijinxia
parent a189be26ff
commit 94513ab724
3 changed files with 38 additions and 0 deletions

View File

@ -657,3 +657,15 @@ vm_intr_monitor(struct vmctx *ctx, void *intr_buf)
{ {
return ioctl(ctx->fd, IC_VM_INTR_MONITOR, intr_buf); return ioctl(ctx->fd, IC_VM_INTR_MONITOR, intr_buf);
} }
int
vm_ioeventfd(struct vmctx *ctx, struct acrn_ioeventfd *args)
{
return ioctl(ctx->fd, IC_EVENT_IOEVENTFD, args);
}
int
vm_irqfd(struct vmctx *ctx, struct acrn_irqfd *args)
{
return ioctl(ctx->fd, IC_EVENT_IRQFD, args);
}

View File

@ -112,6 +112,11 @@
#define VM_MEMMAP_SYSMEM 0 #define VM_MEMMAP_SYSMEM 0
#define VM_MMIO 1 #define VM_MMIO 1
/* VHM eventfd */
#define IC_ID_EVENT_BASE 0x70UL
#define IC_EVENT_IOEVENTFD _IC_ID(IC_ID, IC_ID_EVENT_BASE + 0x00)
#define IC_EVENT_IRQFD _IC_ID(IC_ID, IC_ID_EVENT_BASE + 0x01)
/** /**
* struct vm_memmap - EPT memory mapping info for guest * struct vm_memmap - EPT memory mapping info for guest
*/ */
@ -204,4 +209,22 @@ struct api_version {
uint32_t minor_version; uint32_t minor_version;
}; };
#define ACRN_IOEVENTFD_FLAG_PIO 0x01
#define ACRN_IOEVENTFD_FLAG_DATAMATCH 0x02
#define ACRN_IOEVENTFD_FLAG_DEASSIGN 0x04
struct acrn_ioeventfd {
int32_t fd;
uint32_t flags;
uint64_t addr;
uint32_t len;
uint32_t reserved;
uint64_t data;
};
#define ACRN_IRQFD_FLAG_DEASSIGN 0x01
struct acrn_irqfd {
int32_t fd;
uint32_t flags;
struct acrn_msi_entry msi;
};
#endif /* VHM_IOCTL_DEFS_H */ #endif /* VHM_IOCTL_DEFS_H */

View File

@ -155,4 +155,7 @@ int vm_get_cpu_state(struct vmctx *ctx, void *state_buf);
int vm_intr_monitor(struct vmctx *ctx, void *intr_buf); int vm_intr_monitor(struct vmctx *ctx, void *intr_buf);
void vm_stop_watchdog(struct vmctx *ctx); void vm_stop_watchdog(struct vmctx *ctx);
void vm_reset_watchdog(struct vmctx *ctx); void vm_reset_watchdog(struct vmctx *ctx);
int vm_ioeventfd(struct vmctx *ctx, struct acrn_ioeventfd *args);
int vm_irqfd(struct vmctx *ctx, struct acrn_irqfd *args);
#endif /* _VMMAPI_H_ */ #endif /* _VMMAPI_H_ */