Home | History | Annotate | Line # | Download | only in hyperv
if_hvnreg.h revision 1.3
      1  1.3  nonaka /*	$NetBSD: if_hvnreg.h,v 1.3 2022/05/20 13:55:17 nonaka Exp $	*/
      2  1.1  nonaka /*	$OpenBSD: if_hvnreg.h,v 1.3 2016/09/14 17:48:28 mikeb Exp $	*/
      3  1.1  nonaka 
      4  1.1  nonaka /*-
      5  1.1  nonaka  * Copyright (c) 2016 Microsoft Corp.
      6  1.1  nonaka  * All rights reserved.
      7  1.1  nonaka  *
      8  1.1  nonaka  * Redistribution and use in source and binary forms, with or without
      9  1.1  nonaka  * modification, are permitted provided that the following conditions
     10  1.1  nonaka  * are met:
     11  1.1  nonaka  * 1. Redistributions of source code must retain the above copyright
     12  1.1  nonaka  *    notice unmodified, this list of conditions, and the following
     13  1.1  nonaka  *    disclaimer.
     14  1.1  nonaka  * 2. Redistributions in binary form must reproduce the above copyright
     15  1.1  nonaka  *    notice, this list of conditions and the following disclaimer in the
     16  1.1  nonaka  *    documentation and/or other materials provided with the distribution.
     17  1.1  nonaka  *
     18  1.1  nonaka  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     19  1.1  nonaka  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20  1.1  nonaka  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     21  1.1  nonaka  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     22  1.1  nonaka  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     23  1.1  nonaka  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     24  1.1  nonaka  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     25  1.1  nonaka  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26  1.1  nonaka  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     27  1.1  nonaka  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28  1.1  nonaka  */
     29  1.1  nonaka 
     30  1.1  nonaka #ifndef _IF_HVNREG_H_
     31  1.1  nonaka #define _IF_HVNREG_H_
     32  1.1  nonaka 
     33  1.1  nonaka #define HVN_NVS_PROTO_VERSION_1		0x00002
     34  1.1  nonaka #define HVN_NVS_PROTO_VERSION_2		0x30002
     35  1.1  nonaka #define HVN_NVS_PROTO_VERSION_4		0x40000
     36  1.1  nonaka #define HVN_NVS_PROTO_VERSION_5		0x50000
     37  1.1  nonaka 
     38  1.1  nonaka #define HVN_NVS_RXBUF_SIG		0x2409
     39  1.1  nonaka #define HVN_NVS_CHIM_SIG		0x1984
     40  1.1  nonaka 
     41  1.1  nonaka #define HVN_NVS_CHIM_IDX_INVALID	0xffffffff
     42  1.1  nonaka 
     43  1.1  nonaka #define HVN_NVS_RNDIS_MTYPE_DATA	0
     44  1.1  nonaka #define HVN_NVS_RNDIS_MTYPE_CTRL	1
     45  1.1  nonaka 
     46  1.1  nonaka /*
     47  1.1  nonaka  * NVS message transacion status codes.
     48  1.1  nonaka  */
     49  1.1  nonaka #define HVN_NVS_STATUS_OK		1
     50  1.1  nonaka #define HVN_NVS_STATUS_FAILED		2
     51  1.1  nonaka 
     52  1.1  nonaka /*
     53  1.1  nonaka  * NVS request/response message types.
     54  1.1  nonaka  */
     55  1.1  nonaka #define HVN_NVS_TYPE_INIT		1
     56  1.1  nonaka #define HVN_NVS_TYPE_INIT_RESP		2
     57  1.1  nonaka #define HVN_NVS_TYPE_NDIS_INIT		100
     58  1.1  nonaka #define HVN_NVS_TYPE_RXBUF_CONN		101
     59  1.1  nonaka #define HVN_NVS_TYPE_RXBUF_CONNRESP	102
     60  1.1  nonaka #define HVN_NVS_TYPE_RXBUF_DISCONN	103
     61  1.1  nonaka #define HVN_NVS_TYPE_CHIM_CONN		104
     62  1.1  nonaka #define HVN_NVS_TYPE_CHIM_CONNRESP	105
     63  1.1  nonaka #define HVN_NVS_TYPE_CHIM_DISCONN	106
     64  1.1  nonaka #define HVN_NVS_TYPE_RNDIS		107
     65  1.1  nonaka #define HVN_NVS_TYPE_RNDIS_ACK		108
     66  1.1  nonaka #define HVN_NVS_TYPE_NDIS_CONF		125
     67  1.1  nonaka #define HVN_NVS_TYPE_VFASSOC_NOTE	128	/* notification */
     68  1.1  nonaka #define HVN_NVS_TYPE_SET_DATAPATH	129
     69  1.1  nonaka #define HVN_NVS_TYPE_SUBCH_REQ		133
     70  1.1  nonaka #define HVN_NVS_TYPE_SUBCH_RESP		133	/* same as SUBCH_REQ */
     71  1.1  nonaka #define HVN_NVS_TYPE_TXTBL_NOTE		134	/* notification */
     72  1.1  nonaka 
     73  1.1  nonaka /*
     74  1.1  nonaka  * Any size less than this one will _not_ work, e.g. hn_nvs_init
     75  1.1  nonaka  * only has 12B valid data, however, if only 12B data were sent,
     76  1.1  nonaka  * Hypervisor would never reply.
     77  1.1  nonaka  */
     78  1.1  nonaka #define HVN_NVS_REQSIZE_MIN		32
     79  1.1  nonaka 
     80  1.1  nonaka /* NVS message common header */
     81  1.1  nonaka struct hvn_nvs_hdr {
     82  1.1  nonaka 	uint32_t	nvs_type;
     83  1.1  nonaka } __packed;
     84  1.1  nonaka 
     85  1.1  nonaka struct hvn_nvs_init {
     86  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_INIT */
     87  1.1  nonaka 	uint32_t	nvs_ver_min;
     88  1.1  nonaka 	uint32_t	nvs_ver_max;
     89  1.1  nonaka 	uint8_t		nvs_rsvd[20];
     90  1.1  nonaka } __packed;
     91  1.1  nonaka 
     92  1.1  nonaka struct hvn_nvs_init_resp {
     93  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_INIT_RESP */
     94  1.1  nonaka 	uint32_t	nvs_ver;	/* deprecated */
     95  1.1  nonaka 	uint32_t	nvs_rsvd;
     96  1.1  nonaka 	uint32_t	nvs_status;	/* HVN_NVS_STATUS_ */
     97  1.1  nonaka } __packed;
     98  1.1  nonaka 
     99  1.2  andvar /* No response */
    100  1.1  nonaka struct hvn_nvs_ndis_conf {
    101  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_NDIS_CONF */
    102  1.1  nonaka 	uint32_t	nvs_mtu;
    103  1.1  nonaka 	uint32_t	nvs_rsvd;
    104  1.1  nonaka 	uint64_t	nvs_caps;	/* HVN_NVS_NDIS_CONF_ */
    105  1.1  nonaka 	uint8_t		nvs_rsvd1[12];
    106  1.1  nonaka } __packed;
    107  1.1  nonaka 
    108  1.1  nonaka #define HVN_NVS_NDIS_CONF_SRIOV		0x0004
    109  1.1  nonaka #define HVN_NVS_NDIS_CONF_VLAN		0x0008
    110  1.1  nonaka 
    111  1.1  nonaka /* No response */
    112  1.1  nonaka struct hvn_nvs_ndis_init {
    113  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_NDIS_INIT */
    114  1.1  nonaka 	uint32_t	nvs_ndis_major;	/* NDIS_VERSION_MAJOR_ */
    115  1.1  nonaka 	uint32_t	nvs_ndis_minor;	/* NDIS_VERSION_MINOR_ */
    116  1.1  nonaka 	uint8_t		nvs_rsvd[20];
    117  1.1  nonaka } __packed;
    118  1.1  nonaka 
    119  1.1  nonaka struct hvn_nvs_rxbuf_conn {
    120  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_RXBUF_CONN */
    121  1.1  nonaka 	uint32_t	nvs_gpadl;	/* RXBUF vmbus GPADL */
    122  1.1  nonaka 	uint16_t	nvs_sig;	/* HVN_NVS_RXBUF_SIG */
    123  1.1  nonaka 	uint8_t		nvs_rsvd[22];
    124  1.1  nonaka } __packed;
    125  1.1  nonaka 
    126  1.1  nonaka struct hvn_nvs_rxbuf_sect {
    127  1.1  nonaka 	uint32_t	nvs_start;
    128  1.1  nonaka 	uint32_t	nvs_slotsz;
    129  1.1  nonaka 	uint32_t	nvs_slotcnt;
    130  1.1  nonaka 	uint32_t	nvs_end;
    131  1.1  nonaka } __packed;
    132  1.1  nonaka 
    133  1.1  nonaka struct hvn_nvs_rxbuf_conn_resp {
    134  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_RXBUF_CONNRESP */
    135  1.1  nonaka 	uint32_t	nvs_status;	/* HVN_NVS_STATUS_ */
    136  1.1  nonaka 	uint32_t	nvs_nsect;	/* # of elem in nvs_sect */
    137  1.1  nonaka 	struct hvn_nvs_rxbuf_sect nvs_sect[0];
    138  1.1  nonaka } __packed;
    139  1.1  nonaka 
    140  1.1  nonaka /* No response */
    141  1.1  nonaka struct hvn_nvs_rxbuf_disconn {
    142  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_RXBUF_DISCONN */
    143  1.1  nonaka 	uint16_t	nvs_sig;	/* HVN_NVS_RXBUF_SIG */
    144  1.1  nonaka 	uint8_t		nvs_rsvd[26];
    145  1.1  nonaka } __packed;
    146  1.1  nonaka 
    147  1.1  nonaka struct hvn_nvs_chim_conn {
    148  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_CHIM_CONN */
    149  1.1  nonaka 	uint32_t	nvs_gpadl;	/* chimney buf vmbus GPADL */
    150  1.1  nonaka 	uint16_t	nvs_sig;	/* NDIS_NVS_CHIM_SIG */
    151  1.1  nonaka 	uint8_t		nvs_rsvd[22];
    152  1.1  nonaka } __packed;
    153  1.1  nonaka 
    154  1.1  nonaka struct hvn_nvs_chim_conn_resp {
    155  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_CHIM_CONNRESP */
    156  1.1  nonaka 	uint32_t	nvs_status;	/* HVN_NVS_STATUS_ */
    157  1.1  nonaka 	uint32_t	nvs_sectsz;	/* section size */
    158  1.1  nonaka } __packed;
    159  1.1  nonaka 
    160  1.1  nonaka /* No response */
    161  1.1  nonaka struct hvn_nvs_chim_disconn {
    162  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_CHIM_DISCONN */
    163  1.1  nonaka 	uint16_t	nvs_sig;	/* HVN_NVS_CHIM_SIG */
    164  1.1  nonaka 	uint8_t		nvs_rsvd[26];
    165  1.1  nonaka } __packed;
    166  1.1  nonaka 
    167  1.1  nonaka #define HVN_NVS_SUBCH_OP_ALLOC		1
    168  1.1  nonaka 
    169  1.1  nonaka struct hvn_nvs_subch_req {
    170  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_SUBCH_REQ */
    171  1.1  nonaka 	uint32_t	nvs_op;		/* HVN_NVS_SUBCH_OP_ */
    172  1.1  nonaka 	uint32_t	nvs_nsubch;
    173  1.1  nonaka 	uint8_t		nvs_rsvd[20];
    174  1.1  nonaka } __packed;
    175  1.1  nonaka 
    176  1.1  nonaka struct hvn_nvs_subch_resp {
    177  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_SUBCH_RESP */
    178  1.1  nonaka 	uint32_t	nvs_status;	/* HVN_NVS_STATUS_ */
    179  1.1  nonaka 	uint32_t	nvs_nsubch;
    180  1.1  nonaka } __packed;
    181  1.1  nonaka 
    182  1.1  nonaka struct hvn_nvs_rndis {
    183  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_RNDIS */
    184  1.1  nonaka 	uint32_t	nvs_rndis_mtype;/* HVN_NVS_RNDIS_MTYPE_ */
    185  1.1  nonaka 	/*
    186  1.1  nonaka 	 * Chimney sending buffer index and size.
    187  1.1  nonaka 	 *
    188  1.1  nonaka 	 * NOTE:
    189  1.1  nonaka 	 * If nvs_chim_idx is set to HVN_NVS_CHIM_IDX_INVALID
    190  1.1  nonaka 	 * and nvs_chim_sz is set to 0, then chimney sending
    191  1.1  nonaka 	 * buffer is _not_ used by this RNDIS message.
    192  1.1  nonaka 	 */
    193  1.1  nonaka 	uint32_t	nvs_chim_idx;
    194  1.1  nonaka 	uint32_t	nvs_chim_sz;
    195  1.1  nonaka 	uint8_t		nvs_rsvd[16];
    196  1.1  nonaka } __packed;
    197  1.1  nonaka 
    198  1.1  nonaka struct hvn_nvs_rndis_ack {
    199  1.1  nonaka 	uint32_t	nvs_type;	/* HVN_NVS_TYPE_RNDIS_ACK */
    200  1.1  nonaka 	uint32_t	nvs_status;	/* HVN_NVS_STATUS_ */
    201  1.1  nonaka 	uint8_t		nvs_rsvd[24];
    202  1.1  nonaka } __packed;
    203  1.1  nonaka 
    204  1.3  nonaka /*
    205  1.3  nonaka  * RNDIS extension
    206  1.3  nonaka  */
    207  1.3  nonaka 
    208  1.3  nonaka /* Per-packet hash info */
    209  1.3  nonaka #define HVN_NDIS_HASH_INFO_SIZE		sizeof(uint32_t)
    210  1.3  nonaka #define HVN_NDIS_PKTINFO_TYPE_HASHINF	NDIS_PKTINFO_TYPE_ORIG_NBLIST
    211  1.3  nonaka /* NDIS_HASH_ */
    212  1.3  nonaka 
    213  1.3  nonaka /* Per-packet hash value */
    214  1.3  nonaka #define HVN_NDIS_HASH_VALUE_SIZE		sizeof(uint32_t)
    215  1.3  nonaka #define HVN_NDIS_PKTINFO_TYPE_HASHVAL	NDIS_PKTINFO_TYPE_PKT_CANCELID
    216  1.3  nonaka 
    217  1.3  nonaka /* Per-packet-info size */
    218  1.3  nonaka #define HVN_RNDIS_PKTINFO_SIZE(dlen) \
    219  1.3  nonaka 	offsetof(struct rndis_pktinfo, rm_data[dlen])
    220  1.3  nonaka 
    221  1.1  nonaka #endif	/* _IF_HVNREG_H_ */
    222