|
@@ -41,66 +41,11 @@
|
|
#define HV_UTIL_NEGO_TIMEOUT 55
|
|
#define HV_UTIL_NEGO_TIMEOUT 55
|
|
|
|
|
|
|
|
|
|
-/* Define version of the synthetic interrupt controller. */
|
|
|
|
-#define HV_SYNIC_VERSION (1)
|
|
|
|
|
|
|
|
-#define HV_ANY_VP (0xFFFFFFFF)
|
|
|
|
|
|
|
|
-/* Define synthetic interrupt controller flag constants. */
|
|
|
|
-#define HV_EVENT_FLAGS_COUNT (256 * 8)
|
|
|
|
#define HV_EVENT_FLAGS_BYTE_COUNT (256)
|
|
#define HV_EVENT_FLAGS_BYTE_COUNT (256)
|
|
#define HV_EVENT_FLAGS_DWORD_COUNT (256 / sizeof(u32))
|
|
#define HV_EVENT_FLAGS_DWORD_COUNT (256 / sizeof(u32))
|
|
|
|
|
|
-/* Define invalid partition identifier. */
|
|
|
|
-#define HV_PARTITION_ID_INVALID ((u64)0x0)
|
|
|
|
-
|
|
|
|
-/* Define port type. */
|
|
|
|
-enum hv_port_type {
|
|
|
|
- HVPORT_MSG = 1,
|
|
|
|
- HVPORT_EVENT = 2,
|
|
|
|
- HVPORT_MONITOR = 3
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-/* Define port information structure. */
|
|
|
|
-struct hv_port_info {
|
|
|
|
- enum hv_port_type port_type;
|
|
|
|
- u32 padding;
|
|
|
|
- union {
|
|
|
|
- struct {
|
|
|
|
- u32 target_sint;
|
|
|
|
- u32 target_vp;
|
|
|
|
- u64 rsvdz;
|
|
|
|
- } message_port_info;
|
|
|
|
- struct {
|
|
|
|
- u32 target_sint;
|
|
|
|
- u32 target_vp;
|
|
|
|
- u16 base_flag_number;
|
|
|
|
- u16 flag_count;
|
|
|
|
- u32 rsvdz;
|
|
|
|
- } event_port_info;
|
|
|
|
- struct {
|
|
|
|
- u64 monitor_address;
|
|
|
|
- u64 rsvdz;
|
|
|
|
- } monitor_port_info;
|
|
|
|
- };
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-struct hv_connection_info {
|
|
|
|
- enum hv_port_type port_type;
|
|
|
|
- u32 padding;
|
|
|
|
- union {
|
|
|
|
- struct {
|
|
|
|
- u64 rsvdz;
|
|
|
|
- } message_connection_info;
|
|
|
|
- struct {
|
|
|
|
- u64 rsvdz;
|
|
|
|
- } event_connection_info;
|
|
|
|
- struct {
|
|
|
|
- u64 monitor_address;
|
|
|
|
- } monitor_connection_info;
|
|
|
|
- };
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Timer configuration register.
|
|
* Timer configuration register.
|
|
*/
|
|
*/
|
|
@@ -117,8 +62,6 @@ union hv_timer_config {
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
|
|
-/* Define the number of message buffers associated with each port. */
|
|
|
|
-#define HV_PORT_MESSAGE_BUFFER_COUNT (16)
|
|
|
|
|
|
|
|
/* Define the synthetic interrupt controller event flags format. */
|
|
/* Define the synthetic interrupt controller event flags format. */
|
|
union hv_synic_event_flags {
|
|
union hv_synic_event_flags {
|
|
@@ -126,11 +69,6 @@ union hv_synic_event_flags {
|
|
u32 flags32[HV_EVENT_FLAGS_DWORD_COUNT];
|
|
u32 flags32[HV_EVENT_FLAGS_DWORD_COUNT];
|
|
};
|
|
};
|
|
|
|
|
|
-/* Define the synthetic interrupt flags page layout. */
|
|
|
|
-struct hv_synic_event_flags_page {
|
|
|
|
- union hv_synic_event_flags sintevent_flags[HV_SYNIC_SINT_COUNT];
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
/* Define SynIC control register. */
|
|
/* Define SynIC control register. */
|
|
union hv_synic_scontrol {
|
|
union hv_synic_scontrol {
|
|
u64 as_uint64;
|
|
u64 as_uint64;
|
|
@@ -232,6 +170,8 @@ struct hv_monitor_page {
|
|
u8 rsvdz4[1984];
|
|
u8 rsvdz4[1984];
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+#define HV_HYPERCALL_PARAM_ALIGN sizeof(u64)
|
|
|
|
+
|
|
/* Definition of the hv_post_message hypercall input structure. */
|
|
/* Definition of the hv_post_message hypercall input structure. */
|
|
struct hv_input_post_message {
|
|
struct hv_input_post_message {
|
|
union hv_connection_id connectionid;
|
|
union hv_connection_id connectionid;
|
|
@@ -241,41 +181,6 @@ struct hv_input_post_message {
|
|
u64 payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT];
|
|
u64 payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT];
|
|
};
|
|
};
|
|
|
|
|
|
-/*
|
|
|
|
- * Versioning definitions used for guests reporting themselves to the
|
|
|
|
- * hypervisor, and visa versa.
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
-/* Version info reported by guest OS's */
|
|
|
|
-enum hv_guest_os_vendor {
|
|
|
|
- HVGUESTOS_VENDOR_MICROSOFT = 0x0001
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-enum hv_guest_os_microsoft_ids {
|
|
|
|
- HVGUESTOS_MICROSOFT_UNDEFINED = 0x00,
|
|
|
|
- HVGUESTOS_MICROSOFT_MSDOS = 0x01,
|
|
|
|
- HVGUESTOS_MICROSOFT_WINDOWS3X = 0x02,
|
|
|
|
- HVGUESTOS_MICROSOFT_WINDOWS9X = 0x03,
|
|
|
|
- HVGUESTOS_MICROSOFT_WINDOWSNT = 0x04,
|
|
|
|
- HVGUESTOS_MICROSOFT_WINDOWSCE = 0x05
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-/*
|
|
|
|
- * Declare the MSR used to identify the guest OS.
|
|
|
|
- */
|
|
|
|
-#define HV_X64_MSR_GUEST_OS_ID 0x40000000
|
|
|
|
-
|
|
|
|
-union hv_x64_msr_guest_os_id_contents {
|
|
|
|
- u64 as_uint64;
|
|
|
|
- struct {
|
|
|
|
- u64 build_number:16;
|
|
|
|
- u64 service_version:8; /* Service Pack, etc. */
|
|
|
|
- u64 minor_version:8;
|
|
|
|
- u64 major_version:8;
|
|
|
|
- u64 os_id:8; /* enum hv_guest_os_microsoft_ids (if Vendor=MS) */
|
|
|
|
- u64 vendor_id:16; /* enum hv_guest_os_vendor */
|
|
|
|
- };
|
|
|
|
-};
|
|
|
|
|
|
|
|
enum {
|
|
enum {
|
|
VMBUS_MESSAGE_CONNECTION_ID = 1,
|
|
VMBUS_MESSAGE_CONNECTION_ID = 1,
|
|
@@ -287,55 +192,6 @@ enum {
|
|
VMBUS_MESSAGE_SINT = 2,
|
|
VMBUS_MESSAGE_SINT = 2,
|
|
};
|
|
};
|
|
|
|
|
|
-/* #defines */
|
|
|
|
-
|
|
|
|
-#define HV_PRESENT_BIT 0x80000000
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-#define HV_CPU_POWER_MANAGEMENT (1 << 0)
|
|
|
|
-#define HV_RECOMMENDATIONS_MAX 4
|
|
|
|
-
|
|
|
|
-#define HV_X64_MAX 5
|
|
|
|
-#define HV_CAPS_MAX 8
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-#define HV_HYPERCALL_PARAM_ALIGN sizeof(u64)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-/* Service definitions */
|
|
|
|
-
|
|
|
|
-#define HV_SERVICE_PARENT_PORT (0)
|
|
|
|
-#define HV_SERVICE_PARENT_CONNECTION (0)
|
|
|
|
-
|
|
|
|
-#define HV_SERVICE_CONNECT_RESPONSE_SUCCESS (0)
|
|
|
|
-#define HV_SERVICE_CONNECT_RESPONSE_INVALID_PARAMETER (1)
|
|
|
|
-#define HV_SERVICE_CONNECT_RESPONSE_UNKNOWN_SERVICE (2)
|
|
|
|
-#define HV_SERVICE_CONNECT_RESPONSE_CONNECTION_REJECTED (3)
|
|
|
|
-
|
|
|
|
-#define HV_SERVICE_CONNECT_REQUEST_MESSAGE_ID (1)
|
|
|
|
-#define HV_SERVICE_CONNECT_RESPONSE_MESSAGE_ID (2)
|
|
|
|
-#define HV_SERVICE_DISCONNECT_REQUEST_MESSAGE_ID (3)
|
|
|
|
-#define HV_SERVICE_DISCONNECT_RESPONSE_MESSAGE_ID (4)
|
|
|
|
-#define HV_SERVICE_MAX_MESSAGE_ID (4)
|
|
|
|
-
|
|
|
|
-#define HV_SERVICE_PROTOCOL_VERSION (0x0010)
|
|
|
|
-#define HV_CONNECT_PAYLOAD_BYTE_COUNT 64
|
|
|
|
-
|
|
|
|
-/* #define VMBUS_REVISION_NUMBER 6 */
|
|
|
|
-
|
|
|
|
-/* Our local vmbus's port and connection id. Anything >0 is fine */
|
|
|
|
-/* #define VMBUS_PORT_ID 11 */
|
|
|
|
-
|
|
|
|
-/* 628180B8-308D-4c5e-B7DB-1BEB62E62EF4 */
|
|
|
|
-static const uuid_le VMBUS_SERVICE_ID = {
|
|
|
|
- .b = {
|
|
|
|
- 0xb8, 0x80, 0x81, 0x62, 0x8d, 0x30, 0x5e, 0x4c,
|
|
|
|
- 0xb7, 0xdb, 0x1b, 0xeb, 0x62, 0xe6, 0x2e, 0xf4
|
|
|
|
- },
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
struct hv_context {
|
|
struct hv_context {
|
|
/* We only support running on top of Hyper-V
|
|
/* We only support running on top of Hyper-V
|
|
* So at this point this really can only contain the Hyper-V ID
|
|
* So at this point this really can only contain the Hyper-V ID
|
|
@@ -531,10 +387,6 @@ struct hv_device *vmbus_device_create(const uuid_le *type,
|
|
int vmbus_device_register(struct hv_device *child_device_obj);
|
|
int vmbus_device_register(struct hv_device *child_device_obj);
|
|
void vmbus_device_unregister(struct hv_device *device_obj);
|
|
void vmbus_device_unregister(struct hv_device *device_obj);
|
|
|
|
|
|
-/* static void */
|
|
|
|
-/* VmbusChildDeviceDestroy( */
|
|
|
|
-/* struct hv_device *); */
|
|
|
|
-
|
|
|
|
struct vmbus_channel *relid2channel(u32 relid);
|
|
struct vmbus_channel *relid2channel(u32 relid);
|
|
|
|
|
|
void vmbus_free_channels(void);
|
|
void vmbus_free_channels(void);
|