xref: /netbsd-src/sys/dev/ic/rndisreg.h (revision 2e0bf311b34bf9507e08ee74157213840e9994d3)
1*2e0bf311Sandvar /*	$NetBSD: rndisreg.h,v 1.6 2021/08/17 22:00:31 andvar Exp $ */
255c94440Snonaka /*	NetBSD: if_urndisreg.h,v 1.4 2018/11/09 21:57:09 maya Exp */
355c94440Snonaka /*	$OpenBSD: if_urndisreg.h,v 1.14 2010/07/08 18:22:01 ckuethe Exp $ */
455c94440Snonaka 
555c94440Snonaka /*
655c94440Snonaka  * Copyright (c) 2010 Jonathan Armani <armani@openbsd.org>
755c94440Snonaka  * Copyright (c) 2010 Fabien Romano <fabien@openbsd.org>
855c94440Snonaka  * Copyright (c) 2010 Michael Knudsen <mk@openbsd.org>
955c94440Snonaka  * All rights reserved.
1055c94440Snonaka  *
1155c94440Snonaka  * Permission to use, copy, modify, and distribute this software for any
1255c94440Snonaka  * purpose with or without fee is hereby granted, provided that the above
1355c94440Snonaka  * copyright notice and this permission notice appear in all copies.
1455c94440Snonaka  *
1555c94440Snonaka  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1655c94440Snonaka  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1755c94440Snonaka  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1855c94440Snonaka  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1955c94440Snonaka  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
2055c94440Snonaka  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
2155c94440Snonaka  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2255c94440Snonaka  */
2355c94440Snonaka 
2455c94440Snonaka #ifndef _DEV_IC_RNDISREG_H_
2555c94440Snonaka #define _DEV_IC_RNDISREG_H_
2655c94440Snonaka 
2750517e57Snonaka /* Canonical major/minor version as of 22th Aug. 2016. */
2850517e57Snonaka #define RNDIS_VERSION_MAJOR		0x00000001
2950517e57Snonaka #define RNDIS_VERSION_MINOR		0x00000000
3050517e57Snonaka 
3150517e57Snonaka #define RNDIS_STATUS_SUCCESS		0x00000000L
3250517e57Snonaka #define RNDIS_STATUS_PENDING		0x00000103L
3355c94440Snonaka #define RNDIS_STATUS_MEDIA_CONNECT	0x4001000BL
3455c94440Snonaka #define RNDIS_STATUS_MEDIA_DISCONNECT	0x4001000CL
35866b8f41Snonaka #define RNDIS_STATUS_LINK_SPEED_CHANGE	0x40010013L
36866b8f41Snonaka #define RNDIS_STATUS_NETWORK_CHANGE	0x40010018L
3750517e57Snonaka #define RNDIS_STATUS_OFFLOAD_CURRENT_CONFIG	0x40020006
3850517e57Snonaka #define RNDIS_STATUS_BUFFER_OVERFLOW	0x80000005L
3950517e57Snonaka #define RNDIS_STATUS_FAILURE		0xC0000001L
4055c94440Snonaka #define RNDIS_STATUS_RESOURCES		0xC000009AL
4150517e57Snonaka #define RNDIS_STATUS_NOT_SUPPORTED	0xC00000BBL
4250517e57Snonaka #define RNDIS_STATUS_INVALID_DATA	0xC0010015L
4355c94440Snonaka 
4455c94440Snonaka #define	OID_GEN_SUPPORTED_LIST		0x00010101
4555c94440Snonaka #define	OID_GEN_HARDWARE_STATUS		0x00010102
4655c94440Snonaka #define	OID_GEN_MEDIA_SUPPORTED		0x00010103
4755c94440Snonaka #define	OID_GEN_MEDIA_IN_USE		0x00010104
4855c94440Snonaka #define	OID_GEN_MAXIMUM_LOOKAHEAD	0x00010105
4955c94440Snonaka #define	OID_GEN_MAXIMUM_FRAME_SIZE	0x00010106
5055c94440Snonaka #define	OID_GEN_LINK_SPEED		0x00010107
5155c94440Snonaka #define	OID_GEN_TRANSMIT_BUFFER_SPACE	0x00010108
5255c94440Snonaka #define	OID_GEN_RECEIVE_BUFFER_SPACE	0x00010109
5355c94440Snonaka #define	OID_GEN_TRANSMIT_BLOCK_SIZE	0x0001010A
5455c94440Snonaka #define	OID_GEN_RECEIVE_BLOCK_SIZE	0x0001010B
5555c94440Snonaka #define	OID_GEN_VENDOR_ID		0x0001010C
5655c94440Snonaka #define	OID_GEN_VENDOR_DESCRIPTION	0x0001010D
5755c94440Snonaka #define	OID_GEN_CURRENT_PACKET_FILTER	0x0001010E
5855c94440Snonaka #define	OID_GEN_CURRENT_LOOKAHEAD	0x0001010F
5955c94440Snonaka #define	OID_GEN_DRIVER_VERSION		0x00010110
6055c94440Snonaka #define	OID_GEN_MAXIMUM_TOTAL_SIZE	0x00010111
6155c94440Snonaka #define	OID_GEN_PROTOCOL_OPTIONS	0x00010112
6255c94440Snonaka #define	OID_GEN_MAC_OPTIONS		0x00010113
6355c94440Snonaka #define	OID_GEN_MEDIA_CONNECT_STATUS	0x00010114
6455c94440Snonaka #define	OID_GEN_MAXIMUM_SEND_PACKETS	0x00010115
6555c94440Snonaka #define	OID_GEN_VENDOR_DRIVER_VERSION	0x00010116
6655c94440Snonaka #define	OID_GEN_SUPPORTED_GUIDS		0x00010117
6755c94440Snonaka #define	OID_GEN_NETWORK_LAYER_ADDRESSES	0x00010118
6855c94440Snonaka #define	OID_GEN_TRANSPORT_HEADER_OFFSET	0x00010119
69391c7a73Snonaka #define	OID_GEN_RECEIVE_SCALE_CAPABILITIES	0x00010203
70391c7a73Snonaka #define	OID_GEN_RECEIVE_SCALE_PARAMETERS	0x00010204
7155c94440Snonaka #define	OID_GEN_MACHINE_NAME		0x0001021A
7255c94440Snonaka #define	OID_GEN_RNDIS_CONFIG_PARAMETER	0x0001021B
7355c94440Snonaka #define	OID_GEN_VLAN_ID			0x0001021C
7455c94440Snonaka 
7555c94440Snonaka #define	OID_802_3_PERMANENT_ADDRESS	0x01010101
7655c94440Snonaka #define	OID_802_3_CURRENT_ADDRESS	0x01010102
7755c94440Snonaka #define	OID_802_3_MULTICAST_LIST	0x01010103
7855c94440Snonaka #define	OID_802_3_MAXIMUM_LIST_SIZE	0x01010104
7955c94440Snonaka #define	OID_802_3_MAC_OPTIONS		0x01010105
8055c94440Snonaka #define	OID_802_3_RCV_ERROR_ALIGNMENT	0x01020101
8155c94440Snonaka #define	OID_802_3_XMIT_ONE_COLLISION	0x01020102
8255c94440Snonaka #define	OID_802_3_XMIT_MORE_COLLISIONS	0x01020103
8355c94440Snonaka #define	OID_802_3_XMIT_DEFERRED		0x01020201
8455c94440Snonaka #define	OID_802_3_XMIT_MAX_COLLISIONS	0x01020202
8555c94440Snonaka #define	OID_802_3_RCV_OVERRUN		0x01020203
8655c94440Snonaka #define	OID_802_3_XMIT_UNDERRUN		0x01020204
8755c94440Snonaka #define	OID_802_3_XMIT_HEARTBEAT_FAILURE	0x01020205
8855c94440Snonaka #define	OID_802_3_XMIT_TIMES_CRS_LOST	0x01020206
8955c94440Snonaka #define	OID_802_3_XMIT_LATE_COLLISIONS	0x01020207
9055c94440Snonaka 
9150517e57Snonaka #define OID_TCP_OFFLOAD_PARAMETERS	0xFC01020C
92391c7a73Snonaka #define OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES	0xFC01020D
9350517e57Snonaka 
9455c94440Snonaka #define RNDIS_MEDIUM_802_3		0x00000000
9555c94440Snonaka 
9655c94440Snonaka #define RNDIS_MAJOR_VERSION		0x00000001U
9755c94440Snonaka #define RNDIS_MINOR_VERSION		0x00000000U
9855c94440Snonaka 
9955c94440Snonaka /* Device flags */
10055c94440Snonaka #define RNDIS_DF_CONNECTIONLESS		0x00000001
10155c94440Snonaka #define RNDIS_DF_CONNECTION_ORIENTED	0x00000002
10255c94440Snonaka 
10355c94440Snonaka /*
10450517e57Snonaka  * Common RNDIS message header.
10550517e57Snonaka  */
10650517e57Snonaka struct rndis_msghdr {
10750517e57Snonaka 	uint32_t	rm_type;
10850517e57Snonaka 	uint32_t	rm_len;
10950517e57Snonaka };
11050517e57Snonaka 
11150517e57Snonaka /*
11255c94440Snonaka  * RNDIS data message
11355c94440Snonaka  */
11455c94440Snonaka #define REMOTE_NDIS_PACKET_MSG		0x00000001
11555c94440Snonaka 
11655c94440Snonaka 
11755c94440Snonaka struct rndis_packet_msg {
11855c94440Snonaka 	uint32_t	rm_type;
11955c94440Snonaka 	uint32_t	rm_len;
12055c94440Snonaka 	uint32_t	rm_dataoffset;
12155c94440Snonaka 	uint32_t	rm_datalen;
12255c94440Snonaka 	uint32_t	rm_oobdataoffset;
12355c94440Snonaka 	uint32_t	rm_oobdatalen;
12455c94440Snonaka 	uint32_t	rm_oobdataelements;
12555c94440Snonaka 	uint32_t	rm_pktinfooffset;
12655c94440Snonaka 	uint32_t	rm_pktinfolen;
12755c94440Snonaka 	uint32_t	rm_vchandle;
12855c94440Snonaka 	uint32_t	rm_reserved;
12955c94440Snonaka };
13055c94440Snonaka 
13150517e57Snonaka /* Per-packet-info for RNDIS data message */
13250517e57Snonaka struct rndis_pktinfo {
13350517e57Snonaka 	uint32_t	rm_size;
13450517e57Snonaka 	uint32_t	rm_type;
13550517e57Snonaka 	uint32_t	rm_pktinfooffset;
13650517e57Snonaka 	uint8_t		rm_data[0];
13750517e57Snonaka };
13850517e57Snonaka 
13950517e57Snonaka #define NDIS_PKTINFO_TYPE_CSUM		0
14050517e57Snonaka #define NDIS_PKTINFO_TYPE_IPSEC		1
14150517e57Snonaka #define NDIS_PKTINFO_TYPE_LSO		2
14250517e57Snonaka #define NDIS_PKTINFO_TYPE_CLASSIFY	3
14350517e57Snonaka /* reserved 4 */
14450517e57Snonaka #define NDIS_PKTINFO_TYPE_SGLIST	5
14550517e57Snonaka #define NDIS_PKTINFO_TYPE_VLAN		6
14650517e57Snonaka #define NDIS_PKTINFO_TYPE_ORIG		7
14750517e57Snonaka #define NDIS_PKTINFO_TYPE_PKT_CANCELID	8
14850517e57Snonaka #define NDIS_PKTINFO_TYPE_ORIG_NBLIST	9
14950517e57Snonaka #define NDIS_PKTINFO_TYPE_CACHE_NBLIST	10
15050517e57Snonaka #define NDIS_PKTINFO_TYPE_PKT_PAD	11
15150517e57Snonaka 
15255c94440Snonaka /*
15355c94440Snonaka  * RNDIS control messages
15455c94440Snonaka  */
15555c94440Snonaka struct rndis_comp_hdr {
15655c94440Snonaka 	uint32_t	rm_type;
15755c94440Snonaka 	uint32_t	rm_len;
15855c94440Snonaka 	uint32_t	rm_rid;
15955c94440Snonaka 	uint32_t	rm_status;
16055c94440Snonaka };
16155c94440Snonaka 
16255c94440Snonaka /* Initialize the device. */
16355c94440Snonaka #define REMOTE_NDIS_INITIALIZE_MSG	0x00000002
16455c94440Snonaka #define REMOTE_NDIS_INITIALIZE_CMPLT	0x80000002
16555c94440Snonaka 
16655c94440Snonaka struct rndis_init_req {
16755c94440Snonaka 	uint32_t	rm_type;
16855c94440Snonaka 	uint32_t	rm_len;
16955c94440Snonaka 	uint32_t	rm_rid;
17055c94440Snonaka 	uint32_t	rm_ver_major;
17155c94440Snonaka 	uint32_t	rm_ver_minor;
17255c94440Snonaka 	uint32_t	rm_max_xfersz;
17355c94440Snonaka };
17455c94440Snonaka 
17555c94440Snonaka struct rndis_init_comp {
17655c94440Snonaka 	uint32_t	rm_type;
17755c94440Snonaka 	uint32_t	rm_len;
17855c94440Snonaka 	uint32_t	rm_rid;
17955c94440Snonaka 	uint32_t	rm_status;
18055c94440Snonaka 	uint32_t	rm_ver_major;
18155c94440Snonaka 	uint32_t	rm_ver_minor;
18255c94440Snonaka 	uint32_t	rm_devflags;
18355c94440Snonaka 	uint32_t	rm_medium;
18455c94440Snonaka 	uint32_t	rm_pktmaxcnt;
18555c94440Snonaka 	uint32_t	rm_pktmaxsz;
18655c94440Snonaka 	uint32_t	rm_align;
18755c94440Snonaka 	uint32_t	rm_aflistoffset;
18855c94440Snonaka 	uint32_t	rm_aflistsz;
18955c94440Snonaka };
19055c94440Snonaka 
19155c94440Snonaka /* Halt the device.  No response sent. */
19255c94440Snonaka #define REMOTE_NDIS_HALT_MSG		0x00000003
19355c94440Snonaka 
19455c94440Snonaka struct rndis_halt_req {
19555c94440Snonaka 	uint32_t	rm_type;
19655c94440Snonaka 	uint32_t	rm_len;
19755c94440Snonaka 	uint32_t	rm_rid;
19855c94440Snonaka };
19955c94440Snonaka 
20055c94440Snonaka /* Send a query object. */
20155c94440Snonaka #define REMOTE_NDIS_QUERY_MSG		0x00000004
20255c94440Snonaka #define REMOTE_NDIS_QUERY_CMPLT		0x80000004
20355c94440Snonaka 
20455c94440Snonaka struct rndis_query_req {
20555c94440Snonaka 	uint32_t	rm_type;
20655c94440Snonaka 	uint32_t	rm_len;
20755c94440Snonaka 	uint32_t	rm_rid;
20855c94440Snonaka 	uint32_t	rm_oid;
20955c94440Snonaka 	uint32_t	rm_infobuflen;
21055c94440Snonaka 	uint32_t	rm_infobufoffset;
21155c94440Snonaka 	uint32_t	rm_devicevchdl;
21255c94440Snonaka };
21355c94440Snonaka 
21455c94440Snonaka struct rndis_query_comp {
21555c94440Snonaka 	uint32_t	rm_type;
21655c94440Snonaka 	uint32_t	rm_len;
21755c94440Snonaka 	uint32_t	rm_rid;
21855c94440Snonaka 	uint32_t	rm_status;
21955c94440Snonaka 	uint32_t	rm_infobuflen;
22055c94440Snonaka 	uint32_t	rm_infobufoffset;
22155c94440Snonaka };
22255c94440Snonaka 
22355c94440Snonaka /* Send a set object request. */
22455c94440Snonaka #define REMOTE_NDIS_SET_MSG		0x00000005
22555c94440Snonaka #define REMOTE_NDIS_SET_CMPLT		0x80000005
22655c94440Snonaka 
22755c94440Snonaka struct rndis_set_req {
22855c94440Snonaka 	uint32_t	rm_type;
22955c94440Snonaka 	uint32_t	rm_len;
23055c94440Snonaka 	uint32_t	rm_rid;
23155c94440Snonaka 	uint32_t	rm_oid;
23255c94440Snonaka 	uint32_t	rm_infobuflen;
23355c94440Snonaka 	uint32_t	rm_infobufoffset;
23455c94440Snonaka 	uint32_t	rm_devicevchdl;
23555c94440Snonaka };
23655c94440Snonaka 
23755c94440Snonaka struct rndis_set_comp {
23855c94440Snonaka 	uint32_t	rm_type;
23955c94440Snonaka 	uint32_t	rm_len;
24055c94440Snonaka 	uint32_t	rm_rid;
24155c94440Snonaka 	uint32_t	rm_status;
24255c94440Snonaka };
24355c94440Snonaka 
24455c94440Snonaka #define REMOTE_NDIS_SET_PARAM_NUMERIC	0x00000000
24555c94440Snonaka #define REMOTE_NDIS_SET_PARAM_STRING	0x00000002
24655c94440Snonaka 
24755c94440Snonaka struct rndis_set_parameter {
24855c94440Snonaka 	uint32_t	rm_nameoffset;
24955c94440Snonaka 	uint32_t	rm_namelen;
25055c94440Snonaka 	uint32_t	rm_type;
25155c94440Snonaka 	uint32_t	rm_valueoffset;
25255c94440Snonaka 	uint32_t	rm_valuelen;
25355c94440Snonaka };
25455c94440Snonaka 
25555c94440Snonaka /* Perform a soft reset on the device. */
25655c94440Snonaka #define REMOTE_NDIS_RESET_MSG		0x00000006
25755c94440Snonaka #define REMOTE_NDIS_RESET_CMPLT		0x80000006
25855c94440Snonaka 
25955c94440Snonaka struct rndis_reset_req {
26055c94440Snonaka 	uint32_t	rm_type;
26155c94440Snonaka 	uint32_t	rm_len;
26255c94440Snonaka 	uint32_t	rm_rid;
26355c94440Snonaka };
26455c94440Snonaka 
26555c94440Snonaka struct rndis_reset_comp {
26655c94440Snonaka 	uint32_t	rm_type;
26755c94440Snonaka 	uint32_t	rm_len;
26855c94440Snonaka 	uint32_t	rm_status;
26955c94440Snonaka 	uint32_t	rm_adrreset;
27055c94440Snonaka };
27155c94440Snonaka 
27255c94440Snonaka /* 802.3 link-state or undefined message error. */
27355c94440Snonaka #define REMOTE_NDIS_INDICATE_STATUS_MSG	0x00000007
27455c94440Snonaka 
275fcd2c8f2Smaya struct rndis_status_msg {
276fcd2c8f2Smaya 	uint32_t	rm_type;
277fcd2c8f2Smaya 	uint32_t	rm_len;
278fcd2c8f2Smaya 	uint32_t	rm_status;
279fcd2c8f2Smaya 	uint32_t	rm_stbuflen;
280fcd2c8f2Smaya 	uint32_t	rm_stbufoffset;
281fcd2c8f2Smaya 	/* rndis_diag_info */
282fcd2c8f2Smaya };
283fcd2c8f2Smaya 
284*2e0bf311Sandvar /* Keepalive message.  May be sent by device. */
28555c94440Snonaka #define REMOTE_NDIS_KEEPALIVE_MSG	0x00000008
28655c94440Snonaka #define REMOTE_NDIS_KEEPALIVE_CMPLT	0x80000008
28755c94440Snonaka 
28855c94440Snonaka struct rndis_keepalive_req {
28955c94440Snonaka 	uint32_t	rm_type;
29055c94440Snonaka 	uint32_t	rm_len;
29155c94440Snonaka 	uint32_t	rm_rid;
29255c94440Snonaka };
29355c94440Snonaka 
29455c94440Snonaka struct rndis_keepalive_comp {
29555c94440Snonaka 	uint32_t	rm_type;
29655c94440Snonaka 	uint32_t	rm_len;
29755c94440Snonaka 	uint32_t	rm_rid;
29855c94440Snonaka 	uint32_t	rm_status;
29955c94440Snonaka };
30055c94440Snonaka 
30155c94440Snonaka /* packet filter bits used by OID_GEN_CURRENT_PACKET_FILTER */
30255c94440Snonaka #define RNDIS_PACKET_TYPE_DIRECTED		0x00000001
30355c94440Snonaka #define RNDIS_PACKET_TYPE_MULTICAST		0x00000002
30455c94440Snonaka #define RNDIS_PACKET_TYPE_ALL_MULTICAST		0x00000004
30555c94440Snonaka #define RNDIS_PACKET_TYPE_BROADCAST		0x00000008
30655c94440Snonaka #define RNDIS_PACKET_TYPE_SOURCE_ROUTING	0x00000010
30755c94440Snonaka #define RNDIS_PACKET_TYPE_PROMISCUOUS		0x00000020
30855c94440Snonaka #define RNDIS_PACKET_TYPE_SMT			0x00000040
30955c94440Snonaka #define RNDIS_PACKET_TYPE_ALL_LOCAL		0x00000080
31055c94440Snonaka #define RNDIS_PACKET_TYPE_GROUP			0x00001000
31155c94440Snonaka #define RNDIS_PACKET_TYPE_ALL_FUNCTIONAL	0x00002000
31255c94440Snonaka #define RNDIS_PACKET_TYPE_FUNCTIONAL		0x00004000
31355c94440Snonaka #define RNDIS_PACKET_TYPE_MAC_FRAME		0x00008000
31455c94440Snonaka 
31555c94440Snonaka /* Rndis offsets */
31650517e57Snonaka #define RNDIS_HEADER_OFFSET	(sizeof(struct rndis_msghdr))
31755c94440Snonaka #define RNDIS_DATA_OFFSET	(sizeof(struct rndis_packet_msg) - \
31850517e57Snonaka 				    RNDIS_HEADER_OFFSET)
31955c94440Snonaka 
32055c94440Snonaka #endif /* _DEV_IC_RNDISREG_H_ */
321