private.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2022-2023, Advanced Micro Devices, Inc.
  4. */
  5. #ifndef VFIO_CDX_PRIVATE_H
  6. #define VFIO_CDX_PRIVATE_H
  7. #define VFIO_CDX_OFFSET_SHIFT 40
  8. static inline u64 vfio_cdx_index_to_offset(u32 index)
  9. {
  10. return ((u64)(index) << VFIO_CDX_OFFSET_SHIFT);
  11. }
  12. struct vfio_cdx_irq {
  13. u32 flags;
  14. u32 count;
  15. int irq_no;
  16. struct eventfd_ctx *trigger;
  17. char *name;
  18. };
  19. struct vfio_cdx_region {
  20. u32 flags;
  21. u32 type;
  22. u64 addr;
  23. resource_size_t size;
  24. };
  25. struct vfio_cdx_device {
  26. struct vfio_device vdev;
  27. struct vfio_cdx_region *regions;
  28. struct vfio_cdx_irq *cdx_irqs;
  29. u32 flags;
  30. #define BME_SUPPORT BIT(0)
  31. u32 msi_count;
  32. u8 config_msi;
  33. };
  34. #ifdef CONFIG_GENERIC_MSI_IRQ
  35. int vfio_cdx_set_irqs_ioctl(struct vfio_cdx_device *vdev,
  36. u32 flags, unsigned int index,
  37. unsigned int start, unsigned int count,
  38. void *data);
  39. void vfio_cdx_irqs_cleanup(struct vfio_cdx_device *vdev);
  40. #else
  41. static int vfio_cdx_set_irqs_ioctl(struct vfio_cdx_device *vdev,
  42. u32 flags, unsigned int index,
  43. unsigned int start, unsigned int count,
  44. void *data)
  45. {
  46. return -EINVAL;
  47. }
  48. static void vfio_cdx_irqs_cleanup(struct vfio_cdx_device *vdev)
  49. {
  50. }
  51. #endif
  52. #endif /* VFIO_CDX_PRIVATE_H */