The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/hyperv/vmbus/vmbus_chanvar.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2016 Microsoft Corp.
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice unmodified, this list of conditions, and the following
   10  *    disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  *
   15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   25  *
   26  * $FreeBSD$
   27  */
   28 
   29 #ifndef _VMBUS_CHANVAR_H_
   30 #define _VMBUS_CHANVAR_H_
   31 
   32 #include <sys/param.h>
   33 #include <sys/callout.h>
   34 #include <sys/lock.h>
   35 #include <sys/mutex.h>
   36 #include <sys/queue.h>
   37 #include <sys/sysctl.h>
   38 #include <sys/sx.h>
   39 #include <sys/taskqueue.h>
   40 
   41 #include <dev/hyperv/include/hyperv.h>
   42 #include <dev/hyperv/include/hyperv_busdma.h>
   43 #include <dev/hyperv/include/vmbus.h>
   44 #include <dev/hyperv/vmbus/vmbus_brvar.h>
   45 
   46 struct vmbus_channel {
   47         /*
   48          * NOTE:
   49          * Fields before ch_txbr are only accessed on this channel's
   50          * target CPU.
   51          */
   52         uint32_t                        ch_flags;       /* VMBUS_CHAN_FLAG_ */
   53         int                             ch_poll_flags;  /* callout flags */
   54 
   55         /*
   56          * RX bufring; immediately following ch_txbr.
   57          */
   58         struct vmbus_rxbr               ch_rxbr;
   59 
   60         struct taskqueue                *ch_tq;
   61         struct task                     ch_task;
   62         struct task                     ch_poll_task;
   63         sbintime_t                      ch_poll_intvl;
   64         struct callout                  ch_poll_timeo;
   65         vmbus_chan_callback_t           ch_cb;
   66         void                            *ch_cbarg;
   67 
   68         /*
   69          * TX bufring; at the beginning of ch_bufring.
   70          *
   71          * NOTE:
   72          * Put TX bufring and the following MNF/evtflag to a new
   73          * cacheline, since they will be accessed on all CPUs by
   74          * locking ch_txbr first.
   75          *
   76          * XXX
   77          * TX bufring and following MNF/evtflags do _not_ fit in
   78          * one 64B cacheline.
   79          */
   80         struct vmbus_txbr               ch_txbr __aligned(CACHE_LINE_SIZE);
   81         uint32_t                        ch_txflags;     /* VMBUS_CHAN_TXF_ */
   82 
   83         /*
   84          * These are based on the vmbus_chanmsg_choffer.chm_montrig.
   85          * Save it here for easy access.
   86          */
   87         uint32_t                        ch_montrig_mask;/* MNF trig mask */
   88         volatile uint32_t               *ch_montrig;    /* MNF trigger loc. */
   89 
   90         /*
   91          * These are based on the vmbus_chanmsg_choffer.chm_chanid.
   92          * Save it here for easy access.
   93          */
   94         u_long                          ch_evtflag_mask;/* event flag */
   95         volatile u_long                 *ch_evtflag;    /* event flag loc. */
   96 
   97         /*
   98          * Rarely used fields.
   99          */
  100 
  101         struct hyperv_mon_param         *ch_monprm;
  102         struct hyperv_dma               ch_monprm_dma;
  103 
  104         uint32_t                        ch_id;          /* channel id */
  105         device_t                        ch_dev;
  106         struct vmbus_softc              *ch_vmbus;
  107 
  108         int                             ch_cpuid;       /* owner cpu */
  109         /*
  110          * Virtual cpuid for ch_cpuid; it is used to communicate cpuid
  111          * related information w/ Hyper-V.  If MSR_HV_VP_INDEX does not
  112          * exist, ch_vcpuid will always be 0 for compatibility.
  113          */
  114         uint32_t                        ch_vcpuid;
  115 
  116         /*
  117          * If this is a primary channel, ch_subchan* fields
  118          * contain sub-channels belonging to this primary
  119          * channel.
  120          */
  121         struct mtx                      ch_subchan_lock;
  122         TAILQ_HEAD(, vmbus_channel)     ch_subchans;
  123         int                             ch_subchan_cnt;
  124 
  125         /* If this is a sub-channel */
  126         TAILQ_ENTRY(vmbus_channel)      ch_sublink;     /* sub-channel link */
  127         struct vmbus_channel            *ch_prichan;    /* owner primary chan */
  128 
  129         void                            *ch_bufring;    /* TX+RX bufrings */
  130         struct hyperv_dma               ch_bufring_dma;
  131         uint32_t                        ch_bufring_gpadl;
  132 
  133         struct task                     ch_attach_task; /* run in ch_mgmt_tq */
  134         struct task                     ch_detach_task; /* run in ch_mgmt_tq */
  135         struct taskqueue                *ch_mgmt_tq;
  136 
  137         /* If this is a primary channel */
  138         TAILQ_ENTRY(vmbus_channel)      ch_prilink;     /* primary chan link */
  139 
  140         TAILQ_ENTRY(vmbus_channel)      ch_link;        /* channel link */
  141         uint32_t                        ch_subidx;      /* subchan index */
  142         volatile uint32_t               ch_stflags;     /* atomic-op */
  143                                                         /* VMBUS_CHAN_ST_ */
  144         struct hyperv_guid              ch_guid_type;
  145         struct hyperv_guid              ch_guid_inst;
  146 
  147         struct sx                       ch_orphan_lock;
  148         struct vmbus_xact_ctx           *ch_orphan_xact;
  149 
  150         int                             ch_refs;
  151 
  152         /*
  153          * These are for HyperV socket channel only
  154          */
  155         bool                            ch_is_hvs;
  156         uint8_t                         ch_hvs_conn_from_host;
  157 
  158         struct sysctl_ctx_list          ch_sysctl_ctx;
  159 } __aligned(CACHE_LINE_SIZE);
  160 
  161 #define VMBUS_CHAN_ISPRIMARY(chan)      ((chan)->ch_subidx == 0)
  162 
  163 /*
  164  * If this flag is set, this channel's interrupt will be masked in ISR,
  165  * and the RX bufring will be drained before this channel's interrupt is
  166  * unmasked.
  167  *
  168  * This flag is turned on by default.  Drivers can turn it off according
  169  * to their own requirement.
  170  */
  171 #define VMBUS_CHAN_FLAG_BATCHREAD       0x0002
  172 
  173 #define VMBUS_CHAN_TXF_HASMNF           0x0001
  174 
  175 #define VMBUS_CHAN_ST_OPENED_SHIFT      0
  176 #define VMBUS_CHAN_ST_ONPRIL_SHIFT      1
  177 #define VMBUS_CHAN_ST_ONSUBL_SHIFT      2
  178 #define VMBUS_CHAN_ST_ONLIST_SHIFT      3
  179 #define VMBUS_CHAN_ST_REVOKED_SHIFT     4       /* sticky */
  180 #define VMBUS_CHAN_ST_OPENED            (1 << VMBUS_CHAN_ST_OPENED_SHIFT)
  181 #define VMBUS_CHAN_ST_ONPRIL            (1 << VMBUS_CHAN_ST_ONPRIL_SHIFT)
  182 #define VMBUS_CHAN_ST_ONSUBL            (1 << VMBUS_CHAN_ST_ONSUBL_SHIFT)
  183 #define VMBUS_CHAN_ST_ONLIST            (1 << VMBUS_CHAN_ST_ONLIST_SHIFT)
  184 #define VMBUS_CHAN_ST_REVOKED           (1 << VMBUS_CHAN_ST_REVOKED_SHIFT)
  185 
  186 struct vmbus_softc;
  187 struct vmbus_message;
  188 
  189 void            vmbus_event_proc(struct vmbus_softc *, int);
  190 void            vmbus_event_proc_compat(struct vmbus_softc *, int);
  191 void            vmbus_chan_msgproc(struct vmbus_softc *,
  192                     const struct vmbus_message *);
  193 void            vmbus_chan_destroy_all(struct vmbus_softc *);
  194 
  195 #endif  /* !_VMBUS_CHANVAR_H_ */

Cache object: 7ce0ca7b4c94e7a96c5d495ec9897402


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.