|
@@ -63,10 +63,6 @@ enum hv_cpuid_function {
|
|
|
/* Define version of the synthetic interrupt controller. */
|
|
|
#define HV_SYNIC_VERSION (1)
|
|
|
|
|
|
-/* Define synthetic interrupt controller message constants. */
|
|
|
-#define HV_MESSAGE_SIZE (256)
|
|
|
-#define HV_MESSAGE_PAYLOAD_BYTE_COUNT (240)
|
|
|
-#define HV_MESSAGE_PAYLOAD_QWORD_COUNT (30)
|
|
|
#define HV_ANY_VP (0xFFFFFFFF)
|
|
|
|
|
|
/* Define synthetic interrupt controller flag constants. */
|
|
@@ -74,46 +70,9 @@ enum hv_cpuid_function {
|
|
|
#define HV_EVENT_FLAGS_BYTE_COUNT (256)
|
|
|
#define HV_EVENT_FLAGS_DWORD_COUNT (256 / sizeof(u32))
|
|
|
|
|
|
-/* Define hypervisor message types. */
|
|
|
-enum hv_message_type {
|
|
|
- HVMSG_NONE = 0x00000000,
|
|
|
-
|
|
|
- /* Memory access messages. */
|
|
|
- HVMSG_UNMAPPED_GPA = 0x80000000,
|
|
|
- HVMSG_GPA_INTERCEPT = 0x80000001,
|
|
|
-
|
|
|
- /* Timer notification messages. */
|
|
|
- HVMSG_TIMER_EXPIRED = 0x80000010,
|
|
|
-
|
|
|
- /* Error messages. */
|
|
|
- HVMSG_INVALID_VP_REGISTER_VALUE = 0x80000020,
|
|
|
- HVMSG_UNRECOVERABLE_EXCEPTION = 0x80000021,
|
|
|
- HVMSG_UNSUPPORTED_FEATURE = 0x80000022,
|
|
|
-
|
|
|
- /* Trace buffer complete messages. */
|
|
|
- HVMSG_EVENTLOG_BUFFERCOMPLETE = 0x80000040,
|
|
|
-
|
|
|
- /* Platform-specific processor intercept messages. */
|
|
|
- HVMSG_X64_IOPORT_INTERCEPT = 0x80010000,
|
|
|
- HVMSG_X64_MSR_INTERCEPT = 0x80010001,
|
|
|
- HVMSG_X64_CPUID_INTERCEPT = 0x80010002,
|
|
|
- HVMSG_X64_EXCEPTION_INTERCEPT = 0x80010003,
|
|
|
- HVMSG_X64_APIC_EOI = 0x80010004,
|
|
|
- HVMSG_X64_LEGACY_FP_ERROR = 0x80010005
|
|
|
-};
|
|
|
-
|
|
|
/* Define invalid partition identifier. */
|
|
|
#define HV_PARTITION_ID_INVALID ((u64)0x0)
|
|
|
|
|
|
-/* Define port identifier type. */
|
|
|
-union hv_port_id {
|
|
|
- u32 asu32;
|
|
|
- struct {
|
|
|
- u32 id:24;
|
|
|
- u32 reserved:8;
|
|
|
- } u ;
|
|
|
-};
|
|
|
-
|
|
|
/* Define port type. */
|
|
|
enum hv_port_type {
|
|
|
HVPORT_MSG = 1,
|
|
@@ -161,27 +120,6 @@ struct hv_connection_info {
|
|
|
};
|
|
|
};
|
|
|
|
|
|
-/* Define synthetic interrupt controller message flags. */
|
|
|
-union hv_message_flags {
|
|
|
- u8 asu8;
|
|
|
- struct {
|
|
|
- u8 msg_pending:1;
|
|
|
- u8 reserved:7;
|
|
|
- };
|
|
|
-};
|
|
|
-
|
|
|
-/* Define synthetic interrupt controller message header. */
|
|
|
-struct hv_message_header {
|
|
|
- u32 message_type;
|
|
|
- u8 payload_size;
|
|
|
- union hv_message_flags message_flags;
|
|
|
- u8 reserved[2];
|
|
|
- union {
|
|
|
- u64 sender;
|
|
|
- union hv_port_id port;
|
|
|
- };
|
|
|
-};
|
|
|
-
|
|
|
/*
|
|
|
* Timer configuration register.
|
|
|
*/
|
|
@@ -207,22 +145,9 @@ struct hv_timer_message_payload {
|
|
|
u64 delivery_time; /* When the message was delivered */
|
|
|
};
|
|
|
|
|
|
-/* Define synthetic interrupt controller message format. */
|
|
|
-struct hv_message {
|
|
|
- struct hv_message_header header;
|
|
|
- union {
|
|
|
- u64 payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT];
|
|
|
- } u ;
|
|
|
-};
|
|
|
-
|
|
|
/* Define the number of message buffers associated with each port. */
|
|
|
#define HV_PORT_MESSAGE_BUFFER_COUNT (16)
|
|
|
|
|
|
-/* Define the synthetic interrupt message page layout. */
|
|
|
-struct hv_message_page {
|
|
|
- struct hv_message sint_message[HV_SYNIC_SINT_COUNT];
|
|
|
-};
|
|
|
-
|
|
|
/* Define the synthetic interrupt controller event flags format. */
|
|
|
union hv_synic_event_flags {
|
|
|
u8 flags8[HV_EVENT_FLAGS_BYTE_COUNT];
|