Author: sephe
Date: Tue Oct 11 08:01:43 2016
New Revision: 307026
URL: https://svnweb.freebsd.org/changeset/base/307026

Log:
  MFC 302733,302737,302801-302806
  
  302733
      hyperv/vmbus: Remove unused code
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7089
  
  302737
      hyperv/vmbus: Cleanup channel rescind
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7090
  
  302801
      hyperv/vmbus: Remove unused bits
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7091
  
  302802
      hyperv: hv_guid -> struct hyperv_guid.
  
      This paves way for the further cleanup/disentangle.
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7092
  
  302803
      hyperv/vmbus: Move channel offer message definition to vmbus_reg.h
  
      - Avoid bit fields.
      - Avoid unnecessary indirection.
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7093
  
  302804
      hyperv/vmbus: Switch to vmbus channel message macros
  
      Prepare for more cleanup.
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7094
  
  302805
      hyperv/vmbus: Remove unused bits
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7095
  
  302806
      hyperv/vmbus: Get rid of rel{_id,id}, use channel id consistently.
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7100

Modified:
  stable/10/sys/dev/hyperv/include/hyperv.h
  stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
  stable/10/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
  stable/10/sys/dev/hyperv/utilities/hv_heartbeat.c
  stable/10/sys/dev/hyperv/utilities/hv_kvp.c
  stable/10/sys/dev/hyperv/utilities/hv_shutdown.c
  stable/10/sys/dev/hyperv/utilities/hv_timesync.c
  stable/10/sys/dev/hyperv/vmbus/hv_channel.c
  stable/10/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
  stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
  stable/10/sys/dev/hyperv/vmbus/hyperv.c
  stable/10/sys/dev/hyperv/vmbus/vmbus.c
  stable/10/sys/dev/hyperv/vmbus/vmbus_if.m
  stable/10/sys/dev/hyperv/vmbus/vmbus_reg.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/hyperv/include/hyperv.h
==============================================================================
--- stable/10/sys/dev/hyperv/include/hyperv.h   Tue Oct 11 07:50:09 2016        
(r307025)
+++ stable/10/sys/dev/hyperv/include/hyperv.h   Tue Oct 11 08:01:43 2016        
(r307026)
@@ -82,32 +82,6 @@ typedef uint8_t      hv_bool_uint8_t;
 #define VMBUS_VERSION_MAJOR(ver)       (((uint32_t)(ver)) >> 16)
 #define VMBUS_VERSION_MINOR(ver)       (((uint32_t)(ver)) & 0xffff)
 
-/*
- * Make maximum size of pipe payload of 16K
- */
-
-#define HV_MAX_PIPE_DATA_PAYLOAD       (sizeof(BYTE) * 16384)
-
-/*
- * Define pipe_mode values
- */
-
-#define HV_VMBUS_PIPE_TYPE_BYTE                0x00000000
-#define HV_VMBUS_PIPE_TYPE_MESSAGE     0x00000004
-
-/*
- * The size of the user defined data buffer for non-pipe offers
- */
-
-#define HV_MAX_USER_DEFINED_BYTES      120
-
-/*
- *  The size of the user defined data buffer for pipe offers
- */
-
-#define HV_MAX_PIPE_USER_DEFINED_BYTES 116
-
-
 #define HV_MAX_PAGE_BUFFER_COUNT       32
 #define HV_MAX_MULTIPAGE_BUFFER_COUNT  32
 
@@ -121,68 +95,13 @@ typedef uint8_t    hv_bool_uint8_t;
                ((HV_ALIGN_UP(addr+len, PAGE_SIZE) -                    \
                    HV_ALIGN_DOWN(addr, PAGE_SIZE)) >> PAGE_SHIFT )
 
-typedef struct hv_guid {
-       uint8_t data[16];
-} __packed hv_guid;
+struct hyperv_guid {
+       uint8_t         hv_guid[16];
+} __packed;
 
 #define HYPERV_GUID_STRLEN     40
 
-int    hyperv_guid2str(const struct hv_guid *, char *, size_t);
-
-#define HV_NIC_GUID                                                    \
-       .data = {0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46,        \
-               0x91, 0x3F, 0xF2, 0xD2, 0xF9, 0x65, 0xED, 0x0E}
-
-#define HV_IDE_GUID                                                    \
-       .data = {0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44,        \
-                0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5}
-
-#define HV_SCSI_GUID                                                   \
-       .data = {0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d,        \
-                0xb6, 0x05, 0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f}
-
-/*
- * At the center of the Channel Management library is
- * the Channel Offer. This struct contains the
- * fundamental information about an offer.
- */
-
-typedef struct hv_vmbus_channel_offer {
-       hv_guid         interface_type;
-       hv_guid         interface_instance;
-       uint64_t        interrupt_latency_in_100ns_units;
-       uint32_t        interface_revision;
-       uint32_t        server_context_area_size; /* in bytes */
-       uint16_t        channel_flags;
-       uint16_t        mmio_megabytes;           /* in bytes * 1024 * 1024 */
-       union
-       {
-        /*
-         * Non-pipes: The user has HV_MAX_USER_DEFINED_BYTES bytes.
-         */
-               struct {
-                       uint8_t user_defined[HV_MAX_USER_DEFINED_BYTES];
-               } __packed standard;
-
-        /*
-         * Pipes: The following structure is an integrated pipe protocol, which
-         *        is implemented on top of standard user-defined data. pipe
-         *        clients  have HV_MAX_PIPE_USER_DEFINED_BYTES left for their
-         *        own use.
-         */
-               struct {
-                       uint32_t        pipe_mode;
-                       uint8_t user_defined[HV_MAX_PIPE_USER_DEFINED_BYTES];
-               } __packed pipe;
-       } u;
-
-       /*
-        * Sub_channel_index, newly added in Win8.
-        */
-       uint16_t        sub_channel_index;
-       uint16_t        padding;
-
-} __packed hv_vmbus_channel_offer;
+int    hyperv_guid2str(const struct hyperv_guid *, char *, size_t);
 
 typedef struct {
        uint16_t type;
@@ -192,13 +111,6 @@ typedef struct {
        uint64_t transaction_id;
 } __packed hv_vm_packet_descriptor;
 
-typedef uint32_t hv_previous_packet_offset;
-
-typedef struct {
-       hv_previous_packet_offset       previous_packet_start_offset;
-       hv_vm_packet_descriptor         descriptor;
-} __packed hv_vm_packet_header;
-
 typedef struct {
        uint32_t byte_count;
        uint32_t byte_offset;
@@ -213,91 +125,6 @@ typedef struct {
        hv_vm_transfer_page     ranges[1];
 } __packed hv_vm_transfer_page_packet_header;
 
-typedef struct {
-       hv_vm_packet_descriptor d;
-       uint32_t                gpadl;
-       uint32_t                reserved;
-} __packed hv_vm_gpadl_packet_header;
-
-typedef struct {
-       hv_vm_packet_descriptor d;
-       uint32_t                gpadl;
-       uint16_t                transfer_page_set_id;
-       uint16_t                reserved;
-} __packed hv_vm_add_remove_transfer_page_set;
-
-/*
- * This structure defines a range in guest
- * physical space that can be made
- * to look virtually contiguous.
- */
-
-typedef struct {
-       uint32_t byte_count;
-       uint32_t byte_offset;
-       uint64_t pfn_array[0];
-} __packed hv_gpa_range;
-
-/*
- * This is the format for an Establish Gpadl packet, which contains a handle
- * by which this GPADL will be known and a set of GPA ranges associated with
- * it.  This can be converted to a MDL by the guest OS.  If there are multiple
- * GPA ranges, then the resulting MDL will be "chained," representing multiple
- * VA ranges.
- */
-
-typedef struct {
-       hv_vm_packet_descriptor d;
-       uint32_t                gpadl;
-       uint32_t                range_count;
-       hv_gpa_range            range[1];
-} __packed hv_vm_establish_gpadl;
-
-/*
- * This is the format for a Teardown Gpadl packet, which indicates that the
- * GPADL handle in the Establish Gpadl packet will never be referenced again.
- */
-
-typedef struct {
-       hv_vm_packet_descriptor d;
-       uint32_t                gpadl;
-                               /* for alignment to a 8-byte boundary */
-       uint32_t                reserved;
-} __packed hv_vm_teardown_gpadl;
-
-/*
- * This is the format for a GPA-Direct packet, which contains a set of GPA
- * ranges, in addition to commands and/or data.
- */
-
-typedef struct {
-       hv_vm_packet_descriptor d;
-       uint32_t                reserved;
-       uint32_t                range_count;
-       hv_gpa_range            range[1];
-} __packed hv_vm_data_gpa_direct;
-
-/*
- * This is the format for a Additional data Packet.
- */
-typedef struct {
-       hv_vm_packet_descriptor d;
-       uint64_t                total_bytes;
-       uint32_t                byte_offset;
-       uint32_t                byte_count;
-       uint8_t                 data[1];
-} __packed hv_vm_additional_data;
-
-typedef union {
-       hv_vm_packet_descriptor             simple_header;
-       hv_vm_transfer_page_packet_header   transfer_page_header;
-       hv_vm_gpadl_packet_header           gpadl_header;
-       hv_vm_add_remove_transfer_page_set  add_remove_transfer_page_header;
-       hv_vm_establish_gpadl               establish_gpadl_header;
-       hv_vm_teardown_gpadl                teardown_gpadl_header;
-       hv_vm_data_gpa_direct               data_gpa_direct_header;
-} __packed hv_vm_packet_largest_possible_header;
-
 typedef enum {
        HV_VMBUS_PACKET_TYPE_INVALID                            = 0x0,
        HV_VMBUS_PACKET_TYPES_SYNCH                             = 0x1,
@@ -317,86 +144,6 @@ typedef enum {
 
 #define HV_VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED    1
 
-/*
- * Version 1 messages
- */
-typedef enum {
-       HV_CHANNEL_MESSAGE_INVALID                      = 0,
-       HV_CHANNEL_MESSAGE_OFFER_CHANNEL                = 1,
-       HV_CHANNEL_MESSAGE_RESCIND_CHANNEL_OFFER        = 2,
-       HV_CHANNEL_MESSAGE_REQUEST_OFFERS               = 3,
-       HV_CHANNEL_MESSAGE_ALL_OFFERS_DELIVERED         = 4,
-       HV_CHANNEL_MESSAGE_OPEN_CHANNEL                 = 5,
-       HV_CHANNEL_MESSAGE_OPEN_CHANNEL_RESULT          = 6,
-       HV_CHANNEL_MESSAGE_CLOSE_CHANNEL                = 7,
-       HV_CHANNEL_MESSAGEL_GPADL_HEADER                = 8,
-       HV_CHANNEL_MESSAGE_GPADL_BODY                   = 9,
-       HV_CHANNEL_MESSAGE_GPADL_CREATED                = 10,
-       HV_CHANNEL_MESSAGE_GPADL_TEARDOWN               = 11,
-       HV_CHANNEL_MESSAGE_GPADL_TORNDOWN               = 12,
-       HV_CHANNEL_MESSAGE_REL_ID_RELEASED              = 13,
-       HV_CHANNEL_MESSAGE_INITIATED_CONTACT            = 14,
-       HV_CHANNEL_MESSAGE_VERSION_RESPONSE             = 15,
-       HV_CHANNEL_MESSAGE_UNLOAD                       = 16,
-       HV_CHANNEL_MESSAGE_COUNT
-} hv_vmbus_channel_msg_type;
-
-typedef struct {
-       hv_vmbus_channel_msg_type       message_type;
-       uint32_t                        padding;
-} __packed hv_vmbus_channel_msg_header;
-
-/*
- * Query VMBus Version parameters
- */
-typedef struct {
-       hv_vmbus_channel_msg_header     header;
-       uint32_t                        version;
-} __packed hv_vmbus_channel_query_vmbus_version;
-
-/*
- * Channel Offer parameters
- */
-typedef struct {
-       hv_vmbus_channel_msg_header     header;
-       hv_vmbus_channel_offer          offer;
-       uint32_t                        child_rel_id;
-       uint8_t                         monitor_id;
-       /*
-        * This field has been split into a bit field on Win7
-        * and higher.
-        */
-       uint8_t                         monitor_allocated:1;
-       uint8_t                         reserved:7;
-       /*
-        * Following fields were added in win7 and higher.
-        * Make sure to check the version before accessing these fields.
-        *
-        * If "is_dedicated_interrupt" is set, we must not set the
-        * associated bit in the channel bitmap while sending the
-        * interrupt to the host.
-        *
-        * connection_id is used in signaling the host.
-        */
-       uint16_t                        is_dedicated_interrupt:1;
-       uint16_t                        reserved1:15;
-       uint32_t                        connection_id;
-} __packed hv_vmbus_channel_offer_channel;
-
-/*
- * Rescind Offer parameters
- */
-typedef struct
-{
-    hv_vmbus_channel_msg_header        header;
-    uint32_t                   child_rel_id;
-} __packed hv_vmbus_channel_rescind_offer;
-
-typedef struct {
-       hv_vmbus_channel_msg_header     header;
-       uint32_t                        child_rel_id;
-} __packed hv_vmbus_channel_relid_released;
-
 #define HW_MACADDR_LEN 6
 
 /*
@@ -505,18 +252,6 @@ typedef enum {
        HV_CHANNEL_CLOSING_NONDESTRUCTIVE_STATE,
 } hv_vmbus_channel_state;
 
-/*
- *  Connection identifier type
- */
-typedef union {
-       uint32_t                as_uint32_t;
-       struct {
-               uint32_t        id:24;
-               uint32_t        reserved:8;
-       } u;
-
-} __packed hv_vmbus_connection_id;
-
 typedef struct hv_vmbus_channel {
        device_t                        ch_dev;
        struct vmbus_softc              *vmbus_sc;
@@ -603,8 +338,8 @@ typedef struct hv_vmbus_channel {
        TAILQ_ENTRY(hv_vmbus_channel)   ch_link;
        uint32_t                        ch_subidx;      /* subchan index */
 
-       struct hv_guid                  ch_guid_type;
-       struct hv_guid                  ch_guid_inst;
+       struct hyperv_guid              ch_guid_type;
+       struct hyperv_guid              ch_guid_inst;
 
        struct sysctl_ctx_list          ch_sysctl_ctx;
 } hv_vmbus_channel;

Modified: stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c     Tue Oct 11 
07:50:09 2016        (r307025)
+++ stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c     Tue Oct 11 
08:01:43 2016        (r307026)
@@ -403,8 +403,8 @@ hn_ifmedia_sts(struct ifnet *ifp, struct
 }
 
 /* {F8615163-DF3E-46c5-913F-F2D2F965ED0E} */
-static const hv_guid g_net_vsc_device_type = {
-       .data = {0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46,
+static const struct hyperv_guid g_net_vsc_device_type = {
+       .hv_guid = {0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46,
                0x91, 0x3F, 0xF2, 0xD2, 0xF9, 0x65, 0xED, 0x0E}
 };
 

Modified: stable/10/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
==============================================================================
--- stable/10/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c   Tue Oct 11 
07:50:09 2016        (r307025)
+++ stable/10/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c   Tue Oct 11 
08:01:43 2016        (r307026)
@@ -180,14 +180,14 @@ enum hv_storage_type {
 #define HV_STORAGE_SUPPORTS_MULTI_CHANNEL 0x1
 
 /* {ba6163d9-04a1-4d29-b605-72e2ffb1dc7f} */
-static const hv_guid gStorVscDeviceType={
-       .data = {0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d,
+static const struct hyperv_guid gStorVscDeviceType={
+       .hv_guid = {0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d,
                 0xb6, 0x05, 0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f}
 };
 
 /* {32412632-86cb-44a2-9b5c-50d1417354f5} */
-static const hv_guid gBlkVscDeviceType={
-       .data = {0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44,
+static const struct hyperv_guid gBlkVscDeviceType={
+       .hv_guid = {0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44,
                 0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5}
 };
 

Modified: stable/10/sys/dev/hyperv/utilities/hv_heartbeat.c
==============================================================================
--- stable/10/sys/dev/hyperv/utilities/hv_heartbeat.c   Tue Oct 11 07:50:09 
2016        (r307025)
+++ stable/10/sys/dev/hyperv/utilities/hv_heartbeat.c   Tue Oct 11 08:01:43 
2016        (r307026)
@@ -39,7 +39,7 @@
 #include "vmbus_if.h"
 
 /* Heartbeat Service */
-static const hv_guid service_guid = { .data =
+static const struct hyperv_guid service_guid = { .hv_guid =
        {0x39, 0x4f, 0x16, 0x57, 0x15, 0x91, 0x78, 0x4e,
        0xab, 0x55, 0x38, 0x2f, 0x3b, 0xd5, 0x42, 0x2d} };
 

Modified: stable/10/sys/dev/hyperv/utilities/hv_kvp.c
==============================================================================
--- stable/10/sys/dev/hyperv/utilities/hv_kvp.c Tue Oct 11 07:50:09 2016        
(r307025)
+++ stable/10/sys/dev/hyperv/utilities/hv_kvp.c Tue Oct 11 08:01:43 2016        
(r307026)
@@ -90,7 +90,7 @@ static int hv_kvp_log = 0;
                log(LOG_INFO, "hv_kvp: " __VA_ARGS__);          \
 } while (0)
 
-static const hv_guid service_guid = { .data =
+static const struct hyperv_guid service_guid = { .hv_guid =
        {0xe7, 0xf4, 0xa0, 0xa9, 0x45, 0x5a, 0x96, 0x4d,
        0xb8, 0x27, 0x8a, 0x84, 0x1e, 0x8c, 0x3,  0xe6} };
 

Modified: stable/10/sys/dev/hyperv/utilities/hv_shutdown.c
==============================================================================
--- stable/10/sys/dev/hyperv/utilities/hv_shutdown.c    Tue Oct 11 07:50:09 
2016        (r307025)
+++ stable/10/sys/dev/hyperv/utilities/hv_shutdown.c    Tue Oct 11 08:01:43 
2016        (r307026)
@@ -43,7 +43,7 @@
 #include "hv_util.h"
 #include "vmbus_if.h"
 
-static const hv_guid service_guid = { .data =
+static const struct hyperv_guid service_guid = { .hv_guid =
        {0x31, 0x60, 0x0B, 0X0E, 0x13, 0x52, 0x34, 0x49,
        0x81, 0x8B, 0x38, 0XD9, 0x0C, 0xED, 0x39, 0xDB} };
 

Modified: stable/10/sys/dev/hyperv/utilities/hv_timesync.c
==============================================================================
--- stable/10/sys/dev/hyperv/utilities/hv_timesync.c    Tue Oct 11 07:50:09 
2016        (r307025)
+++ stable/10/sys/dev/hyperv/utilities/hv_timesync.c    Tue Oct 11 08:01:43 
2016        (r307026)
@@ -55,7 +55,7 @@ typedef struct {
 } time_sync_data;
 
         /* Time Synch Service */
-static const hv_guid service_guid = {.data =
+static const struct hyperv_guid service_guid = {.hv_guid =
        {0x30, 0xe6, 0x27, 0x95, 0xae, 0xd0, 0x7b, 0x49,
        0xad, 0xce, 0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf } };
 

Modified: stable/10/sys/dev/hyperv/vmbus/hv_channel.c
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/hv_channel.c Tue Oct 11 07:50:09 2016        
(r307025)
+++ stable/10/sys/dev/hyperv/vmbus/hv_channel.c Tue Oct 11 08:01:43 2016        
(r307026)
@@ -897,25 +897,23 @@ vmbus_event_flags_proc(struct vmbus_soft
        int f;
 
        for (f = 0; f < flag_cnt; ++f) {
-               uint32_t rel_id_base;
+               uint32_t chid_base;
                u_long flags;
-               int bit;
+               int chid_ofs;
 
                if (event_flags[f] == 0)
                        continue;
 
                flags = atomic_swap_long(&event_flags[f], 0);
-               rel_id_base = f << VMBUS_EVTFLAG_SHIFT;
+               chid_base = f << VMBUS_EVTFLAG_SHIFT;
 
-               while ((bit = ffsl(flags)) != 0) {
+               while ((chid_ofs = ffsl(flags)) != 0) {
                        struct hv_vmbus_channel *channel;
-                       uint32_t rel_id;
 
-                       --bit;  /* NOTE: ffsl is 1-based */
-                       flags &= ~(1UL << bit);
+                       --chid_ofs; /* NOTE: ffsl is 1-based */
+                       flags &= ~(1UL << chid_ofs);
 
-                       rel_id = rel_id_base + bit;
-                       channel = sc->vmbus_chmap[rel_id];
+                       channel = sc->vmbus_chmap[chid_base + chid_ofs];
 
                        /* if channel is closed or closing */
                        if (channel == NULL || channel->rxq == NULL)

Modified: stable/10/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/hv_channel_mgmt.c    Tue Oct 11 07:50:09 
2016        (r307025)
+++ stable/10/sys/dev/hyperv/vmbus/hv_channel_mgmt.c    Tue Oct 11 08:01:43 
2016        (r307026)
@@ -45,37 +45,40 @@ typedef void        (*vmbus_chanmsg_proc_t)
 
 static struct hv_vmbus_channel *hv_vmbus_allocate_channel(struct vmbus_softc 
*);
 static void    vmbus_channel_on_offer_internal(struct vmbus_softc *,
-                   const hv_vmbus_channel_offer_channel *offer);
+                   const struct vmbus_chanmsg_choffer *);
 static void    vmbus_chan_detach_task(void *, int);
 
 static void    vmbus_channel_on_offer(struct vmbus_softc *,
                    const struct vmbus_message *);
-static void    vmbus_channel_on_offer_rescind(struct vmbus_softc *,
-                   const struct vmbus_message *);
 static void    vmbus_channel_on_offers_delivered(struct vmbus_softc *,
                    const struct vmbus_message *);
+static void    vmbus_chan_msgproc_chrescind(struct vmbus_softc *,
+                   const struct vmbus_message *);
 
-/**
- * Channel message dispatch table
+/*
+ * Vmbus channel message processing.
  */
+
+#define VMBUS_CHANMSG_PROC(name, func) \
+       [VMBUS_CHANMSG_TYPE_##name] = func
+#define VMBUS_CHANMSG_PROC_WAKEUP(name)        \
+       VMBUS_CHANMSG_PROC(name, vmbus_msghc_wakeup)
+
 static const vmbus_chanmsg_proc_t
-vmbus_chanmsg_process[HV_CHANNEL_MESSAGE_COUNT] = {
-       [HV_CHANNEL_MESSAGE_OFFER_CHANNEL] =
-               vmbus_channel_on_offer,
-       [HV_CHANNEL_MESSAGE_RESCIND_CHANNEL_OFFER] =
-               vmbus_channel_on_offer_rescind,
-       [HV_CHANNEL_MESSAGE_ALL_OFFERS_DELIVERED] =
-               vmbus_channel_on_offers_delivered,
-       [HV_CHANNEL_MESSAGE_OPEN_CHANNEL_RESULT] =
-               vmbus_msghc_wakeup,
-       [HV_CHANNEL_MESSAGE_GPADL_CREATED] =
-               vmbus_msghc_wakeup,
-       [HV_CHANNEL_MESSAGE_GPADL_TORNDOWN] =
-               vmbus_msghc_wakeup,
-       [HV_CHANNEL_MESSAGE_VERSION_RESPONSE] =
-               vmbus_msghc_wakeup
+vmbus_chanmsg_process[VMBUS_CHANMSG_TYPE_MAX] = {
+       VMBUS_CHANMSG_PROC(CHOFFER,     vmbus_channel_on_offer),
+       VMBUS_CHANMSG_PROC(CHRESCIND,   vmbus_chan_msgproc_chrescind),
+       VMBUS_CHANMSG_PROC(CHOFFER_DONE,vmbus_channel_on_offers_delivered),
+
+       VMBUS_CHANMSG_PROC_WAKEUP(CHOPEN_RESP),
+       VMBUS_CHANMSG_PROC_WAKEUP(GPADL_CONNRESP),
+       VMBUS_CHANMSG_PROC_WAKEUP(GPADL_DISCONNRESP),
+       VMBUS_CHANMSG_PROC_WAKEUP(CONNECT_RESP)
 };
 
+#undef VMBUS_CHANMSG_PROC_WAKEUP
+#undef VMBUS_CHANMSG_PROC
+
 /**
  * @brief Allocate and initialize a vmbus channel object
  */
@@ -113,27 +116,25 @@ vmbus_channel_process_offer(hv_vmbus_cha
 {
        struct vmbus_softc *sc = new_channel->vmbus_sc;
        hv_vmbus_channel*       channel;
-       uint32_t                relid;
 
-       relid = new_channel->ch_id;
        /*
         * Make sure this is a new offer
         */
        mtx_lock(&sc->vmbus_chlist_lock);
-       if (relid == 0) {
+       if (new_channel->ch_id == 0) {
                /*
                 * XXX channel0 will not be processed; skip it.
                 */
                printf("VMBUS: got channel0 offer\n");
        } else {
-               sc->vmbus_chmap[relid] = new_channel;
+               sc->vmbus_chmap[new_channel->ch_id] = new_channel;
        }
 
        TAILQ_FOREACH(channel, &sc->vmbus_chlist, ch_link) {
                if (memcmp(&channel->ch_guid_type, &new_channel->ch_guid_type,
-                   sizeof(hv_guid)) == 0 &&
+                   sizeof(struct hyperv_guid)) == 0 &&
                    memcmp(&channel->ch_guid_inst, &new_channel->ch_guid_inst,
-                   sizeof(hv_guid)) == 0)
+                   sizeof(struct hyperv_guid)) == 0)
                        break;
        }
 
@@ -270,18 +271,16 @@ vmbus_channel_select_defcpu(struct hv_vm
 static void
 vmbus_channel_on_offer(struct vmbus_softc *sc, const struct vmbus_message *msg)
 {
-       const hv_vmbus_channel_offer_channel *offer;
-
        /* New channel is offered by vmbus */
        vmbus_scan_newchan(sc);
 
-       offer = (const hv_vmbus_channel_offer_channel *)msg->msg_data;
-       vmbus_channel_on_offer_internal(sc, offer);
+       vmbus_channel_on_offer_internal(sc,
+           (const struct vmbus_chanmsg_choffer *)msg->msg_data);
 }
 
 static void
 vmbus_channel_on_offer_internal(struct vmbus_softc *sc,
-    const hv_vmbus_channel_offer_channel *offer)
+    const struct vmbus_chanmsg_choffer *offer)
 {
        hv_vmbus_channel* new_channel;
 
@@ -289,14 +288,14 @@ vmbus_channel_on_offer_internal(struct v
         * Allocate the channel object and save this offer
         */
        new_channel = hv_vmbus_allocate_channel(sc);
-       new_channel->ch_id = offer->child_rel_id;
-       new_channel->ch_subidx = offer->offer.sub_channel_index;
-       new_channel->ch_guid_type = offer->offer.interface_type;
-       new_channel->ch_guid_inst = offer->offer.interface_instance;
+       new_channel->ch_id = offer->chm_chanid;
+       new_channel->ch_subidx = offer->chm_subidx;
+       new_channel->ch_guid_type = offer->chm_chtype;
+       new_channel->ch_guid_inst = offer->chm_chinst;
 
        /* Batch reading is on by default */
        new_channel->ch_flags |= VMBUS_CHAN_FLAG_BATCHREAD;
-       if (offer->monitor_allocated)
+       if (offer->chm_flags1 & VMBUS_CHOFFER_FLAG1_HASMNF)
                new_channel->ch_flags |= VMBUS_CHAN_FLAG_HASMNF;
 
        new_channel->ch_monprm = hyperv_dmamem_alloc(
@@ -312,15 +311,15 @@ vmbus_channel_on_offer_internal(struct v
        }
        new_channel->ch_monprm->mp_connid = VMBUS_CONNID_EVENT;
        if (sc->vmbus_version != VMBUS_VERSION_WS2008)
-               new_channel->ch_monprm->mp_connid = offer->connection_id;
+               new_channel->ch_monprm->mp_connid = offer->chm_connid;
 
        if (new_channel->ch_flags & VMBUS_CHAN_FLAG_HASMNF) {
                new_channel->ch_montrig_idx =
-                   offer->monitor_id / VMBUS_MONTRIG_LEN;
+                   offer->chm_montrig / VMBUS_MONTRIG_LEN;
                if (new_channel->ch_montrig_idx >= VMBUS_MONTRIGS_MAX)
-                       panic("invalid monitor id %u", offer->monitor_id);
+                       panic("invalid monitor trigger %u", offer->chm_montrig);
                new_channel->ch_montrig_mask =
-                   1 << (offer->monitor_id % VMBUS_MONTRIG_LEN);
+                   1 << (offer->chm_montrig % VMBUS_MONTRIG_LEN);
        }
 
        /* Select default cpu for this channel. */
@@ -329,33 +328,34 @@ vmbus_channel_on_offer_internal(struct v
        vmbus_channel_process_offer(new_channel);
 }
 
-/**
- * @brief Rescind offer handler.
- *
- * We queue a work item to process this offer
- * synchronously.
- *
+/*
  * XXX pretty broken; need rework.
  */
 static void
-vmbus_channel_on_offer_rescind(struct vmbus_softc *sc,
+vmbus_chan_msgproc_chrescind(struct vmbus_softc *sc,
     const struct vmbus_message *msg)
 {
-       const hv_vmbus_channel_rescind_offer *rescind;
-       hv_vmbus_channel*               channel;
+       const struct vmbus_chanmsg_chrescind *note;
+       struct hv_vmbus_channel *chan;
+
+       note = (const struct vmbus_chanmsg_chrescind *)msg->msg_data;
+       if (note->chm_chanid > VMBUS_CHAN_MAX) {
+               device_printf(sc->vmbus_dev, "invalid rescinded chan%u\n",
+                   note->chm_chanid);
+               return;
+       }
 
-       rescind = (const hv_vmbus_channel_rescind_offer *)msg->msg_data;
        if (bootverbose) {
-               device_printf(sc->vmbus_dev, "chan%u rescind\n",
-                   rescind->child_rel_id);
+               device_printf(sc->vmbus_dev, "chan%u rescinded\n",
+                   note->chm_chanid);
        }
 
-       channel = sc->vmbus_chmap[rescind->child_rel_id];
-       if (channel == NULL)
-           return;
-       sc->vmbus_chmap[rescind->child_rel_id] = NULL;
+       chan = sc->vmbus_chmap[note->chm_chanid];
+       if (chan == NULL)
+               return;
+       sc->vmbus_chmap[note->chm_chanid] = NULL;
 
-       taskqueue_enqueue(taskqueue_thread, &channel->ch_detach_task);
+       taskqueue_enqueue(taskqueue_thread, &chan->ch_detach_task);
 }
 
 static void
@@ -566,7 +566,7 @@ vmbus_chan_msgproc(struct vmbus_softc *s
        uint32_t msg_type;
 
        msg_type = ((const struct vmbus_chanmsg_hdr *)msg->msg_data)->chm_type;
-       if (msg_type >= HV_CHANNEL_MESSAGE_COUNT) {
+       if (msg_type >= VMBUS_CHANMSG_TYPE_MAX) {
                device_printf(sc->vmbus_dev, "unknown message type 0x%x\n",
                    msg_type);
                return;

Modified: stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h      Tue Oct 11 07:50:09 
2016        (r307025)
+++ stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h      Tue Oct 11 08:01:43 
2016        (r307026)
@@ -56,8 +56,8 @@ typedef struct {
 typedef struct {
        uint32_t                rel_id;
        hv_vmbus_channel_state  state;
-       hv_guid                 interface_type;
-       hv_guid                 interface_instance;
+       struct hyperv_guid      interface_type;
+       struct hyperv_guid      interface_instance;
        uint32_t                monitor_id;
        uint32_t                server_monitor_pending;
        uint32_t                server_monitor_latency;
@@ -97,67 +97,6 @@ typedef struct hv_vmbus_channel_packet_m
        hv_vmbus_multipage_buffer       range;
 } __packed hv_vmbus_channel_packet_multipage_buffer;
 
-typedef union {
-       uint32_t as_uint32_t;
-       struct {
-               uint32_t group_enable :4;
-               uint32_t rsvd_z :28;
-       } u;
-} hv_vmbus_monitor_trigger_state;
-
-typedef union {
-       uint64_t as_uint64_t;
-       struct {
-               uint32_t pending;
-               uint32_t armed;
-       } u;
-} hv_vmbus_monitor_trigger_group;
-
-typedef struct {
-       hv_vmbus_connection_id  connection_id;
-       uint16_t                flag_number;
-       uint16_t                rsvd_z;
-} hv_vmbus_monitor_parameter;
-
-/*
- * hv_vmbus_monitor_page Layout
- * ------------------------------------------------------
- * | 0   | trigger_state (4 bytes) | Rsvd1 (4 bytes)     |
- * | 8   | trigger_group[0]                              |
- * | 10  | trigger_group[1]                              |
- * | 18  | trigger_group[2]                              |
- * | 20  | trigger_group[3]                              |
- * | 28  | Rsvd2[0]                                      |
- * | 30  | Rsvd2[1]                                      |
- * | 38  | Rsvd2[2]                                      |
- * | 40  | next_check_time[0][0] | next_check_time[0][1] |
- * | ...                                                 |
- * | 240 | latency[0][0..3]                              |
- * | 340 | Rsvz3[0]                                      |
- * | 440 | parameter[0][0]                               |
- * | 448 | parameter[0][1]                               |
- * | ...                                                 |
- * | 840 | Rsvd4[0]                                      |
- * ------------------------------------------------------
- */
-
-typedef struct {
-       hv_vmbus_monitor_trigger_state  trigger_state;
-       uint32_t                        rsvd_z1;
-
-       hv_vmbus_monitor_trigger_group  trigger_group[4];
-       uint64_t                        rsvd_z2[3];
-
-       int32_t                         next_check_time[4][32];
-
-       uint16_t                        latency[4][32];
-       uint64_t                        rsvd_z3[32];
-
-       hv_vmbus_monitor_parameter      parameter[4][32];
-
-       uint8_t                         rsvd_z4[1984];
-} hv_vmbus_monitor_page;
-
 /*
  * Private, VM Bus functions
  */

Modified: stable/10/sys/dev/hyperv/vmbus/hyperv.c
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/hyperv.c     Tue Oct 11 07:50:09 2016        
(r307025)
+++ stable/10/sys/dev/hyperv/vmbus/hyperv.c     Tue Oct 11 08:01:43 2016        
(r307026)
@@ -116,9 +116,9 @@ hypercall_signal_event(bus_addr_t monprm
 }
 
 int
-hyperv_guid2str(const struct hv_guid *guid, char *buf, size_t sz)
+hyperv_guid2str(const struct hyperv_guid *guid, char *buf, size_t sz)
 {
-       const uint8_t *d = guid->data;
+       const uint8_t *d = guid->hv_guid;
 
        return snprintf(buf, sz, "%02x%02x%02x%02x-"
            "%02x%02x-%02x%02x-%02x%02x-"

Modified: stable/10/sys/dev/hyperv/vmbus/vmbus.c
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/vmbus.c      Tue Oct 11 07:50:09 2016        
(r307025)
+++ stable/10/sys/dev/hyperv/vmbus/vmbus.c      Tue Oct 11 08:01:43 2016        
(r307026)
@@ -1131,11 +1131,12 @@ vmbus_get_version_method(device_t bus, d
 }
 
 static int
-vmbus_probe_guid_method(device_t bus, device_t dev, const struct hv_guid *guid)
+vmbus_probe_guid_method(device_t bus, device_t dev,
+    const struct hyperv_guid *guid)
 {
        const struct hv_vmbus_channel *chan = vmbus_get_channel(dev);
 
-       if (memcmp(&chan->ch_guid_type, guid, sizeof(struct hv_guid)) == 0)
+       if (memcmp(&chan->ch_guid_type, guid, sizeof(struct hyperv_guid)) == 0)
                return 0;
        return ENXIO;
 }

Modified: stable/10/sys/dev/hyperv/vmbus/vmbus_if.m
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/vmbus_if.m   Tue Oct 11 07:50:09 2016        
(r307025)
+++ stable/10/sys/dev/hyperv/vmbus/vmbus_if.m   Tue Oct 11 08:01:43 2016        
(r307026)
@@ -32,7 +32,7 @@
 INTERFACE vmbus;
 
 HEADER {
-       struct hv_guid;
+       struct hyperv_guid;
 };
 
 METHOD uint32_t get_version {
@@ -43,5 +43,5 @@ METHOD uint32_t get_version {
 METHOD int probe_guid {
        device_t bus;
        device_t dev;
-       const struct hv_guid *guid;
+       const struct hyperv_guid *guid;
 };

Modified: stable/10/sys/dev/hyperv/vmbus/vmbus_reg.h
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/vmbus_reg.h  Tue Oct 11 07:50:09 2016        
(r307025)
+++ stable/10/sys/dev/hyperv/vmbus/vmbus_reg.h  Tue Oct 11 08:01:43 2016        
(r307026)
@@ -31,6 +31,7 @@
 
 #include <sys/param.h>
 #include <dev/hyperv/vmbus/hyperv_reg.h>
+#include <dev/hyperv/include/hyperv.h> /* XXX for hyperv_guid */
 
 /*
  * Hyper-V SynIC message format.
@@ -117,11 +118,14 @@ struct vmbus_gpa_range {
 
 /*
  * Channel messages
- * - Embedded in vmbus_message.msg_data, e.g. response.
+ * - Embedded in vmbus_message.msg_data, e.g. response and notification.
  * - Embedded in hypercall_postmsg_in.hc_data, e.g. request.
  */
 
+#define VMBUS_CHANMSG_TYPE_CHOFFER             1       /* NOTE */
+#define VMBUS_CHANMSG_TYPE_CHRESCIND           2       /* NOTE */
 #define VMBUS_CHANMSG_TYPE_CHREQUEST           3       /* REQ */
+#define VMBUS_CHANMSG_TYPE_CHOFFER_DONE                4       /* NOTE */
 #define VMBUS_CHANMSG_TYPE_CHOPEN              5       /* REQ */
 #define VMBUS_CHANMSG_TYPE_CHOPEN_RESP         6       /* RESP */
 #define VMBUS_CHANMSG_TYPE_CHCLOSE             7       /* REQ */
@@ -134,6 +138,7 @@ struct vmbus_gpa_range {
 #define VMBUS_CHANMSG_TYPE_CONNECT             14      /* REQ */
 #define VMBUS_CHANMSG_TYPE_CONNECT_RESP                15      /* RESP */
 #define VMBUS_CHANMSG_TYPE_DISCONNECT          16      /* REQ */
+#define VMBUS_CHANMSG_TYPE_MAX                 22
 
 struct vmbus_chanmsg_hdr {
        uint32_t        chm_type;       /* VMBUS_CHANMSG_TYPE_ */
@@ -241,4 +246,33 @@ struct vmbus_chanmsg_chfree {
        uint32_t        chm_chanid;
 } __packed;
 
+/* VMBUS_CHANMSG_TYPE_CHRESCIND */
+struct vmbus_chanmsg_chrescind {
+       struct vmbus_chanmsg_hdr chm_hdr;
+       uint32_t        chm_chanid;
+} __packed;
+
+/* VMBUS_CHANMSG_TYPE_CHOFFER */
+struct vmbus_chanmsg_choffer {
+       struct vmbus_chanmsg_hdr chm_hdr;
+       struct hyperv_guid chm_chtype;
+       struct hyperv_guid chm_chinst;
+       uint64_t        chm_chlat;      /* unit: 100ns */
+       uint32_t        chm_chrev;
+       uint32_t        chm_svrctx_sz;
+       uint16_t        chm_chflags;
+       uint16_t        chm_mmio_sz;    /* unit: MB */
+       uint8_t         chm_udata[120];
+       uint16_t        chm_subidx;
+       uint16_t        chm_rsvd;
+       uint32_t        chm_chanid;
+       uint8_t         chm_montrig;
+       uint8_t         chm_flags1;     /* VMBUS_CHOFFER_FLAG1_ */
+       uint16_t        chm_flags2;
+       uint32_t        chm_connid;
+} __packed;
+CTASSERT(sizeof(struct vmbus_chanmsg_choffer) <= VMBUS_MSG_DSIZE_MAX);
+
+#define VMBUS_CHOFFER_FLAG1_HASMNF     0x01
+
 #endif /* !_VMBUS_REG_H_ */
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to