1 1.4 andvar /* $NetBSD: if_hvnreg.h,v 1.4 2024/02/09 22:08:34 andvar 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.4 andvar * NVS message transaction 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