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