PCI: hv: Move retarget related structures into tlfs header
Currently, retarget_msi_interrupt and other structures it relys on are defined in pci-hyperv.c. However, those structures are actually defined in Hypervisor Top-Level Functional Specification [1] and may be different in sizes of fields or layout from architecture to architecture. Let's move those definitions into x86's tlfs header file to support virtual PCI on non-x86 architectures in the future. Note that "__packed" attribute is added to these structures during the movement for the same reason as we use the attribute for other TLFS structures in the header file: make sure the structures meet the specification and avoid anything unexpected from the compilers. Additionally, rename struct retarget_msi_interrupt to hv_retarget_msi_interrupt for the consistent naming convention, also mirroring the name in TLFS. [1]: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/tlfs Signed-off-by: Boqun Feng (Microsoft) <boqun.feng@gmail.com> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Reviewed-by: Dexuan Cui <decui@microsoft.com>
This commit is contained in:
		
				
					committed by
					
						 Lorenzo Pieralisi
						Lorenzo Pieralisi
					
				
			
			
				
	
			
			
			
						parent
						
							b00f80fcfa
						
					
				
				
					commit
					61bfd920ab
				
			| @@ -912,4 +912,35 @@ struct hv_tlb_flush_ex { | ||||
| struct hv_partition_assist_pg { | ||||
| 	u32 tlb_lock_count; | ||||
| }; | ||||
| 
 | ||||
| struct hv_interrupt_entry { | ||||
| 	u32 source;			/* 1 for MSI(-X) */ | ||||
| 	u32 reserved1; | ||||
| 	u32 address; | ||||
| 	u32 data; | ||||
| } __packed; | ||||
| 
 | ||||
| /*
 | ||||
|  * flags for hv_device_interrupt_target.flags | ||||
|  */ | ||||
| #define HV_DEVICE_INTERRUPT_TARGET_MULTICAST		1 | ||||
| #define HV_DEVICE_INTERRUPT_TARGET_PROCESSOR_SET	2 | ||||
| 
 | ||||
| struct hv_device_interrupt_target { | ||||
| 	u32 vector; | ||||
| 	u32 flags; | ||||
| 	union { | ||||
| 		u64 vp_mask; | ||||
| 		struct hv_vpset vp_set; | ||||
| 	}; | ||||
| } __packed; | ||||
| 
 | ||||
| /* HvRetargetDeviceInterrupt hypercall */ | ||||
| struct hv_retarget_device_interrupt { | ||||
| 	u64 partition_id;		/* use "self" */ | ||||
| 	u64 device_id; | ||||
| 	struct hv_interrupt_entry int_entry; | ||||
| 	u64 reserved2; | ||||
| 	struct hv_device_interrupt_target int_target; | ||||
| } __packed __aligned(8); | ||||
| #endif | ||||
|   | ||||
		Reference in New Issue
	
	Block a user