These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / include / linux / hyperv.h
index 902c37a..ae6a711 100644 (file)
@@ -26,6 +26,7 @@
 #define _HYPERV_H
 
 #include <uapi/linux/hyperv.h>
+#include <uapi/asm/hyperv.h>
 
 #include <linux/types.h>
 #include <linux/scatterlist.h>
@@ -160,16 +161,18 @@ hv_get_ringbuffer_availbytes(struct hv_ring_buffer_info *rbi,
  * 1 . 1  (Windows 7)
  * 2 . 4  (Windows 8)
  * 3 . 0  (Windows 8 R2)
+ * 4 . 0  (Windows 10)
  */
 
 #define VERSION_WS2008  ((0 << 16) | (13))
 #define VERSION_WIN7    ((1 << 16) | (1))
 #define VERSION_WIN8    ((2 << 16) | (4))
 #define VERSION_WIN8_1    ((3 << 16) | (0))
+#define VERSION_WIN10  ((4 << 16) | (0))
 
 #define VERSION_INVAL -1
 
-#define VERSION_CURRENT VERSION_WIN8_1
+#define VERSION_CURRENT VERSION_WIN10
 
 /* Make maximum size of pipe payload of 16K */
 #define MAX_PIPE_DATA_PAYLOAD          (sizeof(u8) * 16384)
@@ -389,10 +392,7 @@ enum vmbus_channel_message_type {
        CHANNELMSG_INITIATE_CONTACT             = 14,
        CHANNELMSG_VERSION_RESPONSE             = 15,
        CHANNELMSG_UNLOAD                       = 16,
-#ifdef VMBUS_FEATURE_PARENT_OR_PEER_MEMORY_MAPPED_INTO_A_CHILD
-       CHANNELMSG_VIEWRANGE_ADD                = 17,
-       CHANNELMSG_VIEWRANGE_REMOVE             = 18,
-#endif
+       CHANNELMSG_UNLOAD_RESPONSE              = 17,
        CHANNELMSG_COUNT
 };
 
@@ -549,21 +549,6 @@ struct vmbus_channel_gpadl_torndown {
        u32 gpadl;
 } __packed;
 
-#ifdef VMBUS_FEATURE_PARENT_OR_PEER_MEMORY_MAPPED_INTO_A_CHILD
-struct vmbus_channel_view_range_add {
-       struct vmbus_channel_message_header header;
-       PHYSICAL_ADDRESS viewrange_base;
-       u64 viewrange_length;
-       u32 child_relid;
-} __packed;
-
-struct vmbus_channel_view_range_remove {
-       struct vmbus_channel_message_header header;
-       PHYSICAL_ADDRESS viewrange_base;
-       u32 child_relid;
-} __packed;
-#endif
-
 struct vmbus_channel_relid_released {
        struct vmbus_channel_message_header header;
        u32 child_relid;
@@ -645,6 +630,11 @@ struct hv_input_signal_event_buffer {
        struct hv_input_signal_event event;
 };
 
+enum hv_signal_policy {
+       HV_SIGNAL_POLICY_DEFAULT = 0,
+       HV_SIGNAL_POLICY_EXPLICIT,
+};
+
 struct vmbus_channel {
        /* Unique channel id */
        int id;
@@ -712,6 +702,11 @@ struct vmbus_channel {
        u32 target_vp;
        /* The corresponding CPUID in the guest */
        u32 target_cpu;
+       /*
+        * State to manage the CPU affiliation of channels.
+        */
+       struct cpumask alloced_cpus_in_node;
+       int numa_node;
        /*
         * Support for sub-channels. For high performance devices,
         * it will be useful to have multiple sub-channels to support
@@ -744,6 +739,15 @@ struct vmbus_channel {
         * All Sub-channels of a primary channel are linked here.
         */
        struct list_head sc_list;
+       /*
+        * Current number of sub-channels.
+        */
+       int num_sc;
+       /*
+        * Number of a sub-channel (position within sc_list) which is supposed
+        * to be used as the next outgoing channel.
+        */
+       int next_oc;
        /*
         * The primary channel this sub-channel belongs to.
         * This will be NULL for the primary channel.
@@ -758,11 +762,21 @@ struct vmbus_channel {
         * link up channels based on their CPU affinity.
         */
        struct list_head percpu_list;
-
-       int num_sc;
-       int next_oc;
+       /*
+        * Host signaling policy: The default policy will be
+        * based on the ring buffer state. We will also support
+        * a policy where the client driver can have explicit
+        * signaling control.
+        */
+       enum hv_signal_policy  signal_policy;
 };
 
+static inline void set_channel_signal_state(struct vmbus_channel *c,
+                                           enum hv_signal_policy policy)
+{
+       c->signal_policy = policy;
+}
+
 static inline void set_channel_read_state(struct vmbus_channel *c, bool state)
 {
        c->batched_reading = state;
@@ -982,6 +996,11 @@ int __must_check __vmbus_driver_register(struct hv_driver *hv_driver,
                                         const char *mod_name);
 void vmbus_driver_unregister(struct hv_driver *hv_driver);
 
+int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj,
+                       resource_size_t min, resource_size_t max,
+                       resource_size_t size, resource_size_t align,
+                       bool fb_overlap_ok);
+
 /**
  * VMBUS_DEVICE - macro used to describe a specific hyperv vmbus device
  *
@@ -1236,17 +1255,8 @@ extern bool vmbus_prep_negotiate_resp(struct icmsg_hdr *,
                                        struct icmsg_negotiate *, u8 *, int,
                                        int);
 
-int hv_kvp_init(struct hv_util_service *);
-void hv_kvp_deinit(void);
-void hv_kvp_onchannelcallback(void *);
-
-int hv_vss_init(struct hv_util_service *);
-void hv_vss_deinit(void);
-void hv_vss_onchannelcallback(void *);
 void hv_process_channel_removal(struct vmbus_channel *channel, u32 relid);
 
-extern struct resource hyperv_mmio;
-
 /*
  * Negotiated version with the Host.
  */