mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-17 21:26:13 -07:00
linux-headers: Update to Linux v6.15-rc3
Update headers to retrieve uapi information for vfio-ap Signed-off-by: Rorie Reyes <rreyes@linux.ibm.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/qemu-devel/20250425052401.8287-3-rreyes@linux.ibm.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
f4df9f2618
commit
1cab5a02ab
34 changed files with 301 additions and 36 deletions
|
|
@ -4,13 +4,9 @@
|
|||
#ifndef _LINUX_BITS_H
|
||||
#define _LINUX_BITS_H
|
||||
|
||||
#define __GENMASK(h, l) \
|
||||
(((~_UL(0)) - (_UL(1) << (l)) + 1) & \
|
||||
(~_UL(0) >> (__BITS_PER_LONG - 1 - (h))))
|
||||
#define __GENMASK(h, l) (((~_UL(0)) << (l)) & (~_UL(0) >> (BITS_PER_LONG - 1 - (h))))
|
||||
|
||||
#define __GENMASK_ULL(h, l) \
|
||||
(((~_ULL(0)) - (_ULL(1) << (l)) + 1) & \
|
||||
(~_ULL(0) >> (__BITS_PER_LONG_LONG - 1 - (h))))
|
||||
#define __GENMASK_ULL(h, l) (((~_ULL(0)) << (l)) & (~_ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
|
||||
|
||||
#define __GENMASK_U128(h, l) \
|
||||
((_BIT128((h)) << 1) - (_BIT128(l)))
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
* Missing __asm__ support
|
||||
*
|
||||
* __BIT128() would not work in the __asm__ code, as it shifts an
|
||||
* 'unsigned __init128' data type as direct representation of
|
||||
* 'unsigned __int128' data type as direct representation of
|
||||
* 128 bit constants is not supported in the gcc compiler, as
|
||||
* they get silently truncated.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ enum {
|
|||
IOMMUFD_CMD_VIOMMU_ALLOC = 0x90,
|
||||
IOMMUFD_CMD_VDEVICE_ALLOC = 0x91,
|
||||
IOMMUFD_CMD_IOAS_CHANGE_PROCESS = 0x92,
|
||||
IOMMUFD_CMD_VEVENTQ_ALLOC = 0x93,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -392,6 +393,9 @@ struct iommu_vfio_ioas {
|
|||
* Any domain attached to the non-PASID part of the
|
||||
* device must also be flagged, otherwise attaching a
|
||||
* PASID will blocked.
|
||||
* For the user that wants to attach PASID, ioas is
|
||||
* not recommended for both the non-PASID part
|
||||
* and PASID part of the device.
|
||||
* If IOMMU does not support PASID it will return
|
||||
* error (-EOPNOTSUPP).
|
||||
*/
|
||||
|
|
@ -608,9 +612,17 @@ enum iommu_hw_info_type {
|
|||
* IOMMU_HWPT_GET_DIRTY_BITMAP
|
||||
* IOMMU_HWPT_SET_DIRTY_TRACKING
|
||||
*
|
||||
* @IOMMU_HW_CAP_PCI_PASID_EXEC: Execute Permission Supported, user ignores it
|
||||
* when the struct
|
||||
* iommu_hw_info::out_max_pasid_log2 is zero.
|
||||
* @IOMMU_HW_CAP_PCI_PASID_PRIV: Privileged Mode Supported, user ignores it
|
||||
* when the struct
|
||||
* iommu_hw_info::out_max_pasid_log2 is zero.
|
||||
*/
|
||||
enum iommufd_hw_capabilities {
|
||||
IOMMU_HW_CAP_DIRTY_TRACKING = 1 << 0,
|
||||
IOMMU_HW_CAP_PCI_PASID_EXEC = 1 << 1,
|
||||
IOMMU_HW_CAP_PCI_PASID_PRIV = 1 << 2,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -626,6 +638,9 @@ enum iommufd_hw_capabilities {
|
|||
* iommu_hw_info_type.
|
||||
* @out_capabilities: Output the generic iommu capability info type as defined
|
||||
* in the enum iommu_hw_capabilities.
|
||||
* @out_max_pasid_log2: Output the width of PASIDs. 0 means no PASID support.
|
||||
* PCI devices turn to out_capabilities to check if the
|
||||
* specific capabilities is supported or not.
|
||||
* @__reserved: Must be 0
|
||||
*
|
||||
* Query an iommu type specific hardware information data from an iommu behind
|
||||
|
|
@ -649,7 +664,8 @@ struct iommu_hw_info {
|
|||
__u32 data_len;
|
||||
__aligned_u64 data_uptr;
|
||||
__u32 out_data_type;
|
||||
__u32 __reserved;
|
||||
__u8 out_max_pasid_log2;
|
||||
__u8 __reserved[3];
|
||||
__aligned_u64 out_capabilities;
|
||||
};
|
||||
#define IOMMU_GET_HW_INFO _IO(IOMMUFD_TYPE, IOMMUFD_CMD_GET_HW_INFO)
|
||||
|
|
@ -1014,4 +1030,115 @@ struct iommu_ioas_change_process {
|
|||
#define IOMMU_IOAS_CHANGE_PROCESS \
|
||||
_IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_CHANGE_PROCESS)
|
||||
|
||||
/**
|
||||
* enum iommu_veventq_flag - flag for struct iommufd_vevent_header
|
||||
* @IOMMU_VEVENTQ_FLAG_LOST_EVENTS: vEVENTQ has lost vEVENTs
|
||||
*/
|
||||
enum iommu_veventq_flag {
|
||||
IOMMU_VEVENTQ_FLAG_LOST_EVENTS = (1U << 0),
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iommufd_vevent_header - Virtual Event Header for a vEVENTQ Status
|
||||
* @flags: Combination of enum iommu_veventq_flag
|
||||
* @sequence: The sequence index of a vEVENT in the vEVENTQ, with a range of
|
||||
* [0, INT_MAX] where the following index of INT_MAX is 0
|
||||
*
|
||||
* Each iommufd_vevent_header reports a sequence index of the following vEVENT:
|
||||
*
|
||||
* +----------------------+-------+----------------------+-------+---+-------+
|
||||
* | header0 {sequence=0} | data0 | header1 {sequence=1} | data1 |...| dataN |
|
||||
* +----------------------+-------+----------------------+-------+---+-------+
|
||||
*
|
||||
* And this sequence index is expected to be monotonic to the sequence index of
|
||||
* the previous vEVENT. If two adjacent sequence indexes has a delta larger than
|
||||
* 1, it means that delta - 1 number of vEVENTs has lost, e.g. two lost vEVENTs:
|
||||
*
|
||||
* +-----+----------------------+-------+----------------------+-------+-----+
|
||||
* | ... | header3 {sequence=3} | data3 | header6 {sequence=6} | data6 | ... |
|
||||
* +-----+----------------------+-------+----------------------+-------+-----+
|
||||
*
|
||||
* If a vEVENT lost at the tail of the vEVENTQ and there is no following vEVENT
|
||||
* providing the next sequence index, an IOMMU_VEVENTQ_FLAG_LOST_EVENTS header
|
||||
* would be added to the tail, and no data would follow this header:
|
||||
*
|
||||
* +--+----------------------+-------+-----------------------------------------+
|
||||
* |..| header3 {sequence=3} | data3 | header4 {flags=LOST_EVENTS, sequence=4} |
|
||||
* +--+----------------------+-------+-----------------------------------------+
|
||||
*/
|
||||
struct iommufd_vevent_header {
|
||||
__u32 flags;
|
||||
__u32 sequence;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum iommu_veventq_type - Virtual Event Queue Type
|
||||
* @IOMMU_VEVENTQ_TYPE_DEFAULT: Reserved for future use
|
||||
* @IOMMU_VEVENTQ_TYPE_ARM_SMMUV3: ARM SMMUv3 Virtual Event Queue
|
||||
*/
|
||||
enum iommu_veventq_type {
|
||||
IOMMU_VEVENTQ_TYPE_DEFAULT = 0,
|
||||
IOMMU_VEVENTQ_TYPE_ARM_SMMUV3 = 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iommu_vevent_arm_smmuv3 - ARM SMMUv3 Virtual Event
|
||||
* (IOMMU_VEVENTQ_TYPE_ARM_SMMUV3)
|
||||
* @evt: 256-bit ARM SMMUv3 Event record, little-endian.
|
||||
* Reported event records: (Refer to "7.3 Event records" in SMMUv3 HW Spec)
|
||||
* - 0x04 C_BAD_STE
|
||||
* - 0x06 F_STREAM_DISABLED
|
||||
* - 0x08 C_BAD_SUBSTREAMID
|
||||
* - 0x0a C_BAD_CD
|
||||
* - 0x10 F_TRANSLATION
|
||||
* - 0x11 F_ADDR_SIZE
|
||||
* - 0x12 F_ACCESS
|
||||
* - 0x13 F_PERMISSION
|
||||
*
|
||||
* StreamID field reports a virtual device ID. To receive a virtual event for a
|
||||
* device, a vDEVICE must be allocated via IOMMU_VDEVICE_ALLOC.
|
||||
*/
|
||||
struct iommu_vevent_arm_smmuv3 {
|
||||
__aligned_le64 evt[4];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iommu_veventq_alloc - ioctl(IOMMU_VEVENTQ_ALLOC)
|
||||
* @size: sizeof(struct iommu_veventq_alloc)
|
||||
* @flags: Must be 0
|
||||
* @viommu_id: virtual IOMMU ID to associate the vEVENTQ with
|
||||
* @type: Type of the vEVENTQ. Must be defined in enum iommu_veventq_type
|
||||
* @veventq_depth: Maximum number of events in the vEVENTQ
|
||||
* @out_veventq_id: The ID of the new vEVENTQ
|
||||
* @out_veventq_fd: The fd of the new vEVENTQ. User space must close the
|
||||
* successfully returned fd after using it
|
||||
* @__reserved: Must be 0
|
||||
*
|
||||
* Explicitly allocate a virtual event queue interface for a vIOMMU. A vIOMMU
|
||||
* can have multiple FDs for different types, but is confined to one per @type.
|
||||
* User space should open the @out_veventq_fd to read vEVENTs out of a vEVENTQ,
|
||||
* if there are vEVENTs available. A vEVENTQ will lose events due to overflow,
|
||||
* if the number of the vEVENTs hits @veventq_depth.
|
||||
*
|
||||
* Each vEVENT in a vEVENTQ encloses a struct iommufd_vevent_header followed by
|
||||
* a type-specific data structure, in a normal case:
|
||||
*
|
||||
* +-+---------+-------+---------+-------+-----+---------+-------+-+
|
||||
* | | header0 | data0 | header1 | data1 | ... | headerN | dataN | |
|
||||
* +-+---------+-------+---------+-------+-----+---------+-------+-+
|
||||
*
|
||||
* unless a tailing IOMMU_VEVENTQ_FLAG_LOST_EVENTS header is logged (refer to
|
||||
* struct iommufd_vevent_header).
|
||||
*/
|
||||
struct iommu_veventq_alloc {
|
||||
__u32 size;
|
||||
__u32 flags;
|
||||
__u32 viommu_id;
|
||||
__u32 type;
|
||||
__u32 veventq_depth;
|
||||
__u32 out_veventq_id;
|
||||
__u32 out_veventq_fd;
|
||||
__u32 __reserved;
|
||||
};
|
||||
#define IOMMU_VEVENTQ_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VEVENTQ_ALLOC)
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -921,6 +921,7 @@ struct kvm_enable_cap {
|
|||
#define KVM_CAP_PRE_FAULT_MEMORY 236
|
||||
#define KVM_CAP_X86_APIC_BUS_CYCLES_NS 237
|
||||
#define KVM_CAP_X86_GUEST_MODE 238
|
||||
#define KVM_CAP_ARM_WRITABLE_IMP_ID_REGS 239
|
||||
|
||||
struct kvm_irq_routing_irqchip {
|
||||
__u32 irqchip;
|
||||
|
|
|
|||
|
|
@ -73,13 +73,20 @@ typedef enum {
|
|||
SEV_RET_INVALID_PARAM,
|
||||
SEV_RET_RESOURCE_LIMIT,
|
||||
SEV_RET_SECURE_DATA_INVALID,
|
||||
SEV_RET_INVALID_KEY = 0x27,
|
||||
SEV_RET_INVALID_PAGE_SIZE,
|
||||
SEV_RET_INVALID_PAGE_STATE,
|
||||
SEV_RET_INVALID_MDATA_ENTRY,
|
||||
SEV_RET_INVALID_PAGE_OWNER,
|
||||
SEV_RET_INVALID_PAGE_AEAD_OFLOW,
|
||||
SEV_RET_RMP_INIT_REQUIRED,
|
||||
SEV_RET_INVALID_PAGE_SIZE = 0x0019,
|
||||
SEV_RET_INVALID_PAGE_STATE = 0x001A,
|
||||
SEV_RET_INVALID_MDATA_ENTRY = 0x001B,
|
||||
SEV_RET_INVALID_PAGE_OWNER = 0x001C,
|
||||
SEV_RET_AEAD_OFLOW = 0x001D,
|
||||
SEV_RET_EXIT_RING_BUFFER = 0x001F,
|
||||
SEV_RET_RMP_INIT_REQUIRED = 0x0020,
|
||||
SEV_RET_BAD_SVN = 0x0021,
|
||||
SEV_RET_BAD_VERSION = 0x0022,
|
||||
SEV_RET_SHUTDOWN_REQUIRED = 0x0023,
|
||||
SEV_RET_UPDATE_FAILED = 0x0024,
|
||||
SEV_RET_RESTORE_REQUIRED = 0x0025,
|
||||
SEV_RET_RMP_INITIALIZATION_FAILED = 0x0026,
|
||||
SEV_RET_INVALID_KEY = 0x0027,
|
||||
SEV_RET_MAX,
|
||||
} sev_ret_code;
|
||||
|
||||
|
|
|
|||
|
|
@ -70,4 +70,6 @@
|
|||
#define __counted_by_be(m)
|
||||
#endif
|
||||
|
||||
#define __kernel_nonstring
|
||||
|
||||
#endif /* _LINUX_STDDEF_H */
|
||||
|
|
|
|||
|
|
@ -671,6 +671,7 @@ enum {
|
|||
*/
|
||||
enum {
|
||||
VFIO_AP_REQ_IRQ_INDEX,
|
||||
VFIO_AP_CFG_CHG_IRQ_INDEX,
|
||||
VFIO_AP_NUM_IRQS
|
||||
};
|
||||
|
||||
|
|
@ -931,29 +932,34 @@ struct vfio_device_bind_iommufd {
|
|||
* VFIO_DEVICE_ATTACH_IOMMUFD_PT - _IOW(VFIO_TYPE, VFIO_BASE + 19,
|
||||
* struct vfio_device_attach_iommufd_pt)
|
||||
* @argsz: User filled size of this data.
|
||||
* @flags: Must be 0.
|
||||
* @flags: Flags for attach.
|
||||
* @pt_id: Input the target id which can represent an ioas or a hwpt
|
||||
* allocated via iommufd subsystem.
|
||||
* Output the input ioas id or the attached hwpt id which could
|
||||
* be the specified hwpt itself or a hwpt automatically created
|
||||
* for the specified ioas by kernel during the attachment.
|
||||
* @pasid: The pasid to be attached, only meaningful when
|
||||
* VFIO_DEVICE_ATTACH_PASID is set in @flags
|
||||
*
|
||||
* Associate the device with an address space within the bound iommufd.
|
||||
* Undo by VFIO_DEVICE_DETACH_IOMMUFD_PT or device fd close. This is only
|
||||
* allowed on cdev fds.
|
||||
*
|
||||
* If a vfio device is currently attached to a valid hw_pagetable, without doing
|
||||
* a VFIO_DEVICE_DETACH_IOMMUFD_PT, a second VFIO_DEVICE_ATTACH_IOMMUFD_PT ioctl
|
||||
* passing in another hw_pagetable (hwpt) id is allowed. This action, also known
|
||||
* as a hw_pagetable replacement, will replace the device's currently attached
|
||||
* hw_pagetable with a new hw_pagetable corresponding to the given pt_id.
|
||||
* If a vfio device or a pasid of this device is currently attached to a valid
|
||||
* hw_pagetable (hwpt), without doing a VFIO_DEVICE_DETACH_IOMMUFD_PT, a second
|
||||
* VFIO_DEVICE_ATTACH_IOMMUFD_PT ioctl passing in another hwpt id is allowed.
|
||||
* This action, also known as a hw_pagetable replacement, will replace the
|
||||
* currently attached hwpt of the device or the pasid of this device with a new
|
||||
* hwpt corresponding to the given pt_id.
|
||||
*
|
||||
* Return: 0 on success, -errno on failure.
|
||||
*/
|
||||
struct vfio_device_attach_iommufd_pt {
|
||||
__u32 argsz;
|
||||
__u32 flags;
|
||||
#define VFIO_DEVICE_ATTACH_PASID (1 << 0)
|
||||
__u32 pt_id;
|
||||
__u32 pasid;
|
||||
};
|
||||
|
||||
#define VFIO_DEVICE_ATTACH_IOMMUFD_PT _IO(VFIO_TYPE, VFIO_BASE + 19)
|
||||
|
|
@ -962,17 +968,21 @@ struct vfio_device_attach_iommufd_pt {
|
|||
* VFIO_DEVICE_DETACH_IOMMUFD_PT - _IOW(VFIO_TYPE, VFIO_BASE + 20,
|
||||
* struct vfio_device_detach_iommufd_pt)
|
||||
* @argsz: User filled size of this data.
|
||||
* @flags: Must be 0.
|
||||
* @flags: Flags for detach.
|
||||
* @pasid: The pasid to be detached, only meaningful when
|
||||
* VFIO_DEVICE_DETACH_PASID is set in @flags
|
||||
*
|
||||
* Remove the association of the device and its current associated address
|
||||
* space. After it, the device should be in a blocking DMA state. This is only
|
||||
* allowed on cdev fds.
|
||||
* Remove the association of the device or a pasid of the device and its current
|
||||
* associated address space. After it, the device or the pasid should be in a
|
||||
* blocking DMA state. This is only allowed on cdev fds.
|
||||
*
|
||||
* Return: 0 on success, -errno on failure.
|
||||
*/
|
||||
struct vfio_device_detach_iommufd_pt {
|
||||
__u32 argsz;
|
||||
__u32 flags;
|
||||
#define VFIO_DEVICE_DETACH_PASID (1 << 0)
|
||||
__u32 pasid;
|
||||
};
|
||||
|
||||
#define VFIO_DEVICE_DETACH_IOMMUFD_PT _IO(VFIO_TYPE, VFIO_BASE + 20)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue