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/vmware/vmxnet3/if_vmxreg.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) 2013 Tsubai Masanari
    3  *
    4  * Permission to use, copy, modify, and distribute this software for any
    5  * purpose with or without fee is hereby granted, provided that the above
    6  * copyright notice and this permission notice appear in all copies.
    7  *
    8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   15  *
   16  * $OpenBSD: src/sys/dev/pci/if_vmxreg.h,v 1.2 2013/06/12 01:07:33 uebayasi Exp $
   17  *
   18  * $FreeBSD$
   19  */
   20 
   21 #ifndef _IF_VMXREG_H
   22 #define _IF_VMXREG_H
   23 
   24 struct UPT1_TxStats {
   25         uint64_t        TSO_packets;
   26         uint64_t        TSO_bytes;
   27         uint64_t        ucast_packets;
   28         uint64_t        ucast_bytes;
   29         uint64_t        mcast_packets;
   30         uint64_t        mcast_bytes;
   31         uint64_t        bcast_packets;
   32         uint64_t        bcast_bytes;
   33         uint64_t        error;
   34         uint64_t        discard;
   35 } __packed;
   36 
   37 struct UPT1_RxStats {
   38         uint64_t        LRO_packets;
   39         uint64_t        LRO_bytes;
   40         uint64_t        ucast_packets;
   41         uint64_t        ucast_bytes;
   42         uint64_t        mcast_packets;
   43         uint64_t        mcast_bytes;
   44         uint64_t        bcast_packets;
   45         uint64_t        bcast_bytes;
   46         uint64_t        nobuffer;
   47         uint64_t        error;
   48 } __packed;
   49 
   50 /* Interrupt moderation levels */
   51 #define UPT1_IMOD_NONE          0       /* No moderation */
   52 #define UPT1_IMOD_HIGHEST       7       /* Least interrupts */
   53 #define UPT1_IMOD_ADAPTIVE      8       /* Adaptive interrupt moderation */
   54 
   55 /* Hardware features */
   56 #define UPT1_F_CSUM     0x0001          /* Rx checksum verification */
   57 #define UPT1_F_RSS      0x0002          /* Receive side scaling */
   58 #define UPT1_F_VLAN     0x0004          /* VLAN tag stripping */
   59 #define UPT1_F_LRO      0x0008          /* Large receive offloading */
   60 
   61 #define VMXNET3_BAR0_IMASK(irq) (0x000 + (irq) * 8)     /* Interrupt mask */
   62 #define VMXNET3_BAR0_TXH(q)     (0x600 + (q) * 8)       /* Tx head */
   63 #define VMXNET3_BAR0_RXH1(q)    (0x800 + (q) * 8)       /* Ring1 Rx head */
   64 #define VMXNET3_BAR0_RXH2(q)    (0xA00 + (q) * 8)       /* Ring2 Rx head */
   65 #define VMXNET3_BAR1_VRRS       0x000   /* VMXNET3 revision report selection */
   66 #define VMXNET3_BAR1_UVRS       0x008   /* UPT version report selection */
   67 #define VMXNET3_BAR1_DSL        0x010   /* Driver shared address low */
   68 #define VMXNET3_BAR1_DSH        0x018   /* Driver shared address high */
   69 #define VMXNET3_BAR1_CMD        0x020   /* Command */
   70 #define VMXNET3_BAR1_MACL       0x028   /* MAC address low */
   71 #define VMXNET3_BAR1_MACH       0x030   /* MAC address high */
   72 #define VMXNET3_BAR1_INTR       0x038   /* Interrupt status */
   73 #define VMXNET3_BAR1_EVENT      0x040   /* Event status */
   74 
   75 #define VMXNET3_CMD_ENABLE      0xCAFE0000      /* Enable VMXNET3 */
   76 #define VMXNET3_CMD_DISABLE     0xCAFE0001      /* Disable VMXNET3 */
   77 #define VMXNET3_CMD_RESET       0xCAFE0002      /* Reset device */
   78 #define VMXNET3_CMD_SET_RXMODE  0xCAFE0003      /* Set interface flags */
   79 #define VMXNET3_CMD_SET_FILTER  0xCAFE0004      /* Set address filter */
   80 #define VMXNET3_CMD_VLAN_FILTER 0xCAFE0005      /* Set VLAN filter */
   81 #define VMXNET3_CMD_GET_STATUS  0xF00D0000      /* Get queue errors */
   82 #define VMXNET3_CMD_GET_STATS   0xF00D0001      /* Get queue statistics */
   83 #define VMXNET3_CMD_GET_LINK    0xF00D0002      /* Get link status */
   84 #define VMXNET3_CMD_GET_MACL    0xF00D0003      /* Get MAC address low */
   85 #define VMXNET3_CMD_GET_MACH    0xF00D0004      /* Get MAC address high */
   86 #define VMXNET3_CMD_GET_INTRCFG 0xF00D0008      /* Get interrupt config */
   87 
   88 #define VMXNET3_DMADESC_ALIGN   128
   89 #define VMXNET3_INIT_GEN        1
   90 
   91 struct vmxnet3_txdesc {
   92         uint64_t        addr;
   93 
   94         uint32_t        len:14;
   95         uint32_t        gen:1;          /* Generation */
   96         uint32_t        pad1:1;
   97         uint32_t        dtype:1;        /* Descriptor type */
   98         uint32_t        pad2:1;
   99         uint32_t        offload_pos:14; /* Offloading position */
  100 
  101         uint32_t        hlen:10;        /* Header len */
  102         uint32_t        offload_mode:2; /* Offloading mode */
  103         uint32_t        eop:1;          /* End of packet */
  104         uint32_t        compreq:1;      /* Completion request */
  105         uint32_t        pad3:1;
  106         uint32_t        vtag_mode:1;    /* VLAN tag insertion mode */
  107         uint32_t        vtag:16;        /* VLAN tag */
  108 } __packed;
  109 
  110 /* Offloading modes */
  111 #define VMXNET3_OM_NONE 0
  112 #define VMXNET3_OM_CSUM 2
  113 #define VMXNET3_OM_TSO  3
  114 
  115 struct vmxnet3_txcompdesc {
  116         uint32_t        eop_idx:12;     /* EOP index in Tx ring */
  117         uint32_t        pad1:20;
  118 
  119         uint32_t        pad2:32;
  120         uint32_t        pad3:32;
  121 
  122         uint32_t        rsvd:24;
  123         uint32_t        type:7;
  124         uint32_t        gen:1;
  125 } __packed;
  126 
  127 struct vmxnet3_rxdesc {
  128         uint64_t        addr;
  129 
  130         uint32_t        len:14;
  131         uint32_t        btype:1;        /* Buffer type */
  132         uint32_t        dtype:1;        /* Descriptor type */
  133         uint32_t        rsvd:15;
  134         uint32_t        gen:1;
  135 
  136         uint32_t        pad1:32;
  137 } __packed;
  138 
  139 /* Buffer types */
  140 #define VMXNET3_BTYPE_HEAD      0       /* Head only */
  141 #define VMXNET3_BTYPE_BODY      1       /* Body only */
  142 
  143 struct vmxnet3_rxcompdesc {
  144         uint32_t        rxd_idx:12;     /* Rx descriptor index */
  145         uint32_t        pad1:2;
  146         uint32_t        eop:1;          /* End of packet */
  147         uint32_t        sop:1;          /* Start of packet */
  148         uint32_t        qid:10;
  149         uint32_t        rss_type:4;
  150         uint32_t        no_csum:1;      /* No checksum calculated */
  151         uint32_t        pad2:1;
  152 
  153         uint32_t        rss_hash:32;    /* RSS hash value */
  154 
  155         uint32_t        len:14;
  156         uint32_t        error:1;
  157         uint32_t        vlan:1;         /* 802.1Q VLAN frame */
  158         uint32_t        vtag:16;        /* VLAN tag */
  159 
  160         uint32_t        csum:16;
  161         uint32_t        csum_ok:1;      /* TCP/UDP checksum ok */
  162         uint32_t        udp:1;
  163         uint32_t        tcp:1;
  164         uint32_t        ipcsum_ok:1;    /* IP checksum OK */
  165         uint32_t        ipv6:1;
  166         uint32_t        ipv4:1;
  167         uint32_t        fragment:1;     /* IP fragment */
  168         uint32_t        fcs:1;          /* Frame CRC correct */
  169         uint32_t        type:7;
  170         uint32_t        gen:1;
  171 } __packed;
  172 
  173 #define VMXNET3_RCD_RSS_TYPE_NONE       0
  174 #define VMXNET3_RCD_RSS_TYPE_IPV4       1
  175 #define VMXNET3_RCD_RSS_TYPE_TCPIPV4    2
  176 #define VMXNET3_RCD_RSS_TYPE_IPV6       3
  177 #define VMXNET3_RCD_RSS_TYPE_TCPIPV6    4
  178 
  179 #define VMXNET3_REV1_MAGIC      0XBABEFEE1
  180 
  181 #define VMXNET3_GOS_UNKNOWN     0x00
  182 #define VMXNET3_GOS_LINUX       0x04
  183 #define VMXNET3_GOS_WINDOWS     0x08
  184 #define VMXNET3_GOS_SOLARIS     0x0C
  185 #define VMXNET3_GOS_FREEBSD     0x10
  186 #define VMXNET3_GOS_PXE         0x14
  187 
  188 #define VMXNET3_GOS_32BIT       0x01
  189 #define VMXNET3_GOS_64BIT       0x02
  190 
  191 #define VMXNET3_MAX_TX_QUEUES   8
  192 #define VMXNET3_MAX_RX_QUEUES   16
  193 #define VMXNET3_MAX_INTRS \
  194     (VMXNET3_MAX_TX_QUEUES + VMXNET3_MAX_RX_QUEUES + 1)
  195 
  196 #define VMXNET3_ICTRL_DISABLE_ALL       0x01
  197 
  198 #define VMXNET3_RXMODE_UCAST    0x01
  199 #define VMXNET3_RXMODE_MCAST    0x02
  200 #define VMXNET3_RXMODE_BCAST    0x04
  201 #define VMXNET3_RXMODE_ALLMULTI 0x08
  202 #define VMXNET3_RXMODE_PROMISC  0x10
  203 
  204 #define VMXNET3_EVENT_RQERROR   0x01
  205 #define VMXNET3_EVENT_TQERROR   0x02
  206 #define VMXNET3_EVENT_LINK      0x04
  207 #define VMXNET3_EVENT_DIC       0x08
  208 #define VMXNET3_EVENT_DEBUG     0x10
  209 
  210 #define VMXNET3_MIN_MTU         60
  211 #define VMXNET3_MAX_MTU         9000
  212 
  213 /* Interrupt mask mode. */
  214 #define VMXNET3_IMM_AUTO        0x00
  215 #define VMXNET3_IMM_ACTIVE      0x01
  216 #define VMXNET3_IMM_LAZY        0x02
  217 
  218 /* Interrupt type. */
  219 #define VMXNET3_IT_AUTO         0x00
  220 #define VMXNET3_IT_LEGACY       0x01
  221 #define VMXNET3_IT_MSI          0x02
  222 #define VMXNET3_IT_MSIX         0x03
  223 
  224 struct vmxnet3_driver_shared {
  225         uint32_t        magic;
  226         uint32_t        pad1;
  227 
  228         /* Misc. control */
  229         uint32_t        version;                /* Driver version */
  230         uint32_t        guest;                  /* Guest OS */
  231         uint32_t        vmxnet3_revision;       /* Supported VMXNET3 revision */
  232         uint32_t        upt_version;            /* Supported UPT version */
  233         uint64_t        upt_features;
  234         uint64_t        driver_data;
  235         uint64_t        queue_shared;
  236         uint32_t        driver_data_len;
  237         uint32_t        queue_shared_len;
  238         uint32_t        mtu;
  239         uint16_t        nrxsg_max;
  240         uint8_t         ntxqueue;
  241         uint8_t         nrxqueue;
  242         uint32_t        reserved1[4];
  243 
  244         /* Interrupt control */
  245         uint8_t         automask;
  246         uint8_t         nintr;
  247         uint8_t         evintr;
  248         uint8_t         modlevel[VMXNET3_MAX_INTRS];
  249         uint32_t        ictrl;
  250         uint32_t        reserved2[2];
  251 
  252         /* Receive filter parameters */
  253         uint32_t        rxmode;
  254         uint16_t        mcast_tablelen;
  255         uint16_t        pad2;
  256         uint64_t        mcast_table;
  257         uint32_t        vlan_filter[4096 / 32];
  258 
  259         struct {
  260                 uint32_t version;
  261                 uint32_t len;
  262                 uint64_t paddr;
  263         }               rss, pm, plugin;
  264 
  265         uint32_t        event;
  266         uint32_t        reserved3[5];
  267 } __packed;
  268 
  269 struct vmxnet3_txq_shared {
  270         /* Control */
  271         uint32_t        npending;
  272         uint32_t        intr_threshold;
  273         uint64_t        reserved1;
  274 
  275         /* Config */
  276         uint64_t        cmd_ring;
  277         uint64_t        data_ring;
  278         uint64_t        comp_ring;
  279         uint64_t        driver_data;
  280         uint64_t        reserved2;
  281         uint32_t        cmd_ring_len;
  282         uint32_t        data_ring_len;
  283         uint32_t        comp_ring_len;
  284         uint32_t        driver_data_len;
  285         uint8_t         intr_idx;
  286         uint8_t         pad1[7];
  287 
  288         /* Queue status */
  289         uint8_t         stopped;
  290         uint8_t         pad2[3];
  291         uint32_t        error;
  292 
  293         struct          UPT1_TxStats stats;
  294 
  295         uint8_t         pad3[88];
  296 } __packed;
  297 
  298 struct vmxnet3_rxq_shared {
  299         uint8_t         update_rxhead;
  300         uint8_t         pad1[7];
  301         uint64_t        reserved1;
  302 
  303         uint64_t        cmd_ring[2];
  304         uint64_t        comp_ring;
  305         uint64_t        driver_data;
  306         uint64_t        reserved2;
  307         uint32_t        cmd_ring_len[2];
  308         uint32_t        comp_ring_len;
  309         uint32_t        driver_data_len;
  310         uint8_t         intr_idx;
  311         uint8_t         pad2[7];
  312 
  313         uint8_t         stopped;
  314         uint8_t         pad3[3];
  315         uint32_t        error;
  316 
  317         struct          UPT1_RxStats stats;
  318 
  319         uint8_t         pad4[88];
  320 } __packed;
  321 
  322 #define UPT1_RSS_HASH_TYPE_NONE         0x00
  323 #define UPT1_RSS_HASH_TYPE_IPV4         0x01
  324 #define UPT1_RSS_HASH_TYPE_TCP_IPV4     0x02
  325 #define UPT1_RSS_HASH_TYPE_IPV6         0x04
  326 #define UPT1_RSS_HASH_TYPE_TCP_IPV6     0x08
  327 
  328 #define UPT1_RSS_HASH_FUNC_NONE         0x00
  329 #define UPT1_RSS_HASH_FUNC_TOEPLITZ     0x01
  330 
  331 #define UPT1_RSS_MAX_KEY_SIZE           40
  332 #define UPT1_RSS_MAX_IND_TABLE_SIZE     128
  333 
  334 struct vmxnet3_rss_shared {
  335         uint16_t                hash_type;
  336         uint16_t                hash_func;
  337         uint16_t                hash_key_size;
  338         uint16_t                ind_table_size;
  339         uint8_t                 hash_key[UPT1_RSS_MAX_KEY_SIZE];
  340         uint8_t                 ind_table[UPT1_RSS_MAX_IND_TABLE_SIZE];
  341 } __packed;
  342 
  343 #endif /* _IF_VMXREG_H */

Cache object: 7e2bd5f25e45127213887779a2c78e26


[ 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.