From 87879fc871e1208d5d04de4aab6dcaaef2296555 Mon Sep 17 00:00:00 2001
From: Kimihiro Nonaka <nonakap@gmail.com>
Date: Wed, 2 May 2018 20:49:20 +0900
Subject: [PATCH 4/5] urndis(4): move RNDIS register definitions to
 sys/dev/ic/rndisreg.h.

share with Hyper-V NetVSC.
---
 sys/dev/{usb/if_urndisreg.h => ic/rndisreg.h} |  83 ++++---------
 sys/dev/usb/if_urndis.c                       | 117 ++++++++++++------
 2 files changed, 104 insertions(+), 96 deletions(-)
 rename sys/dev/{usb/if_urndisreg.h => ic/rndisreg.h} (82%)

diff --git a/sys/dev/usb/if_urndisreg.h b/sys/dev/ic/rndisreg.h
similarity index 82%
rename from sys/dev/usb/if_urndisreg.h
rename to sys/dev/ic/rndisreg.h
index 78415e61f6a..2c4f67d067c 100644
--- a/sys/dev/usb/if_urndisreg.h
+++ b/sys/dev/ic/rndisreg.h
@@ -1,4 +1,5 @@
-/*	$NetBSD: if_urndisreg.h,v 1.3 2016/12/04 10:12:35 skrll Exp $ */
+/*	$NetBSD$ */
+/*	NetBSD: if_urndisreg.h,v 1.3 2016/12/04 10:12:35 skrll Exp */
 /*	$OpenBSD: if_urndisreg.h,v 1.14 2010/07/08 18:22:01 ckuethe Exp $ */
 
 /*
@@ -20,50 +21,8 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#define RNDIS_RX_LIST_CNT	1
-#define RNDIS_TX_LIST_CNT	1
-#define RNDIS_BUFSZ		1562
-
-struct urndis_chain {
-	struct urndis_softc	*sc_softc;
-	struct usbd_xfer	*sc_xfer;
-	char			*sc_buf;
-	struct mbuf		*sc_mbuf;
-	int			 sc_idx;
-};
-
-struct urndis_cdata {
-	struct urndis_chain	sc_rx_chain[RNDIS_RX_LIST_CNT];
-	struct urndis_chain	sc_tx_chain[RNDIS_TX_LIST_CNT];
-	int			sc_tx_cnt;
-};
-
-#define GET_IFP(sc) (&(sc)->sc_ec.ec_if)
-struct urndis_softc {
-	device_t			sc_dev;
-
-	char				sc_attached;
-	int				sc_dying;
-	struct ethercom			sc_ec;
-
-	/* RNDIS device info */
-	uint32_t			sc_lim_pktsz;
-	uint32_t			sc_filter;
-
-	/* USB goo */
-	struct usbd_device *		sc_udev;
-	int				sc_ifaceno_ctl;
-	struct usbd_interface *		sc_iface_ctl;
-	struct usbd_interface *		sc_iface_data;
-
-	struct timeval			sc_rx_notice;
-	int				sc_bulkin_no;
-	struct usbd_pipe *		sc_bulkin_pipe;
-	int				sc_bulkout_no;
-	struct usbd_pipe *		sc_bulkout_pipe;
-
-	struct urndis_cdata		sc_data;
-};
+#ifndef _DEV_IC_RNDISREG_H_
+#define _DEV_IC_RNDISREG_H_
 
 #define RNDIS_STATUS_BUFFER_OVERFLOW 	0x80000005L
 #define RNDIS_STATUS_FAILURE 		0xC0000001L
@@ -132,7 +91,7 @@ struct urndis_softc {
 #define REMOTE_NDIS_PACKET_MSG		0x00000001
 
 
-struct urndis_packet_msg {
+struct rndis_packet_msg {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_dataoffset;
@@ -149,7 +108,7 @@ struct urndis_packet_msg {
 /*
  * RNDIS control messages
  */
-struct urndis_comp_hdr {
+struct rndis_comp_hdr {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_rid;
@@ -160,7 +119,7 @@ struct urndis_comp_hdr {
 #define REMOTE_NDIS_INITIALIZE_MSG	0x00000002
 #define REMOTE_NDIS_INITIALIZE_CMPLT	0x80000002
 
-struct urndis_init_req {
+struct rndis_init_req {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_rid;
@@ -169,7 +128,7 @@ struct urndis_init_req {
 	uint32_t	rm_max_xfersz;
 };
 
-struct urndis_init_comp {
+struct rndis_init_comp {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_rid;
@@ -188,7 +147,7 @@ struct urndis_init_comp {
 /* Halt the device.  No response sent. */
 #define REMOTE_NDIS_HALT_MSG		0x00000003
 
-struct urndis_halt_req {
+struct rndis_halt_req {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_rid;
@@ -198,7 +157,7 @@ struct urndis_halt_req {
 #define REMOTE_NDIS_QUERY_MSG		0x00000004
 #define REMOTE_NDIS_QUERY_CMPLT		0x80000004
 
-struct urndis_query_req {
+struct rndis_query_req {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_rid;
@@ -208,7 +167,7 @@ struct urndis_query_req {
 	uint32_t	rm_devicevchdl;
 };
 
-struct urndis_query_comp {
+struct rndis_query_comp {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_rid;
@@ -221,7 +180,7 @@ struct urndis_query_comp {
 #define REMOTE_NDIS_SET_MSG		0x00000005
 #define REMOTE_NDIS_SET_CMPLT		0x80000005
 
-struct urndis_set_req {
+struct rndis_set_req {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_rid;
@@ -231,7 +190,7 @@ struct urndis_set_req {
 	uint32_t	rm_devicevchdl;
 };
 
-struct urndis_set_comp {
+struct rndis_set_comp {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_rid;
@@ -241,7 +200,7 @@ struct urndis_set_comp {
 #define REMOTE_NDIS_SET_PARAM_NUMERIC	0x00000000
 #define REMOTE_NDIS_SET_PARAM_STRING	0x00000002
 
-struct urndis_set_parameter {
+struct rndis_set_parameter {
 	uint32_t	rm_nameoffset;
 	uint32_t	rm_namelen;
 	uint32_t	rm_type;
@@ -253,13 +212,13 @@ struct urndis_set_parameter {
 #define REMOTE_NDIS_RESET_MSG		0x00000006
 #define REMOTE_NDIS_RESET_CMPLT		0x80000006
 
-struct urndis_reset_req {
+struct rndis_reset_req {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_rid;
 };
 
-struct urndis_reset_comp {
+struct rndis_reset_comp {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_status;
@@ -273,13 +232,13 @@ struct urndis_reset_comp {
 #define REMOTE_NDIS_KEEPALIVE_MSG	0x00000008
 #define REMOTE_NDIS_KEEPALIVE_CMPLT	0x80000008
 
-struct urndis_keepalive_req {
+struct rndis_keepalive_req {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_rid;
 };
 
-struct urndis_keepalive_comp {
+struct rndis_keepalive_comp {
 	uint32_t	rm_type;
 	uint32_t	rm_len;
 	uint32_t	rm_rid;
@@ -302,6 +261,8 @@ struct urndis_keepalive_comp {
 
 /* Rndis offsets */
 #define RNDIS_HEADER_OFFSET	(sizeof(uint32_t) * 2)
-#define RNDIS_DATA_OFFSET	(sizeof(struct urndis_packet_msg) - \
-				 offsetof(struct urndis_packet_msg, \
+#define RNDIS_DATA_OFFSET	(sizeof(struct rndis_packet_msg) - \
+				 offsetof(struct rndis_packet_msg, \
 				 rm_dataoffset))
+
+#endif /* _DEV_IC_RNDISREG_H_ */
diff --git a/sys/dev/usb/if_urndis.c b/sys/dev/usb/if_urndis.c
index 7d59ceb4611..268ac880774 100644
--- a/sys/dev/usb/if_urndis.c
+++ b/sys/dev/usb/if_urndis.c
@@ -53,7 +53,54 @@ __KERNEL_RCSID(0, "$NetBSD: if_urndis.c,v 1.17 2018/01/21 13:57:12 skrll Exp $")
 #include <dev/usb/usbdevs.h>
 #include <dev/usb/usbcdc.h>
 
-#include <dev/usb/if_urndisreg.h>
+#include <dev/ic/rndisreg.h>
+
+#define RNDIS_RX_LIST_CNT	1
+#define RNDIS_TX_LIST_CNT	1
+#define RNDIS_BUFSZ		1562
+
+struct urndis_softc;
+
+struct urndis_chain {
+	struct urndis_softc	*sc_softc;
+	struct usbd_xfer	*sc_xfer;
+	char			*sc_buf;
+	struct mbuf		*sc_mbuf;
+	int			 sc_idx;
+};
+
+struct urndis_cdata {
+	struct urndis_chain	sc_rx_chain[RNDIS_RX_LIST_CNT];
+	struct urndis_chain	sc_tx_chain[RNDIS_TX_LIST_CNT];
+	int			sc_tx_cnt;
+};
+
+#define GET_IFP(sc) (&(sc)->sc_ec.ec_if)
+struct urndis_softc {
+	device_t			sc_dev;
+
+	char				sc_attached;
+	int				sc_dying;
+	struct ethercom			sc_ec;
+
+	/* RNDIS device info */
+	uint32_t			sc_lim_pktsz;
+	uint32_t			sc_filter;
+
+	/* USB goo */
+	struct usbd_device *		sc_udev;
+	int				sc_ifaceno_ctl;
+	struct usbd_interface *		sc_iface_ctl;
+	struct usbd_interface *		sc_iface_data;
+
+	struct timeval			sc_rx_notice;
+	int				sc_bulkin_no;
+	struct usbd_pipe *		sc_bulkin_pipe;
+	int				sc_bulkout_no;
+	struct usbd_pipe *		sc_bulkout_pipe;
+
+	struct urndis_cdata		sc_data;
+};
 
 #ifdef URNDIS_DEBUG
 #define DPRINTF(x)      do { printf x; } while (0)
@@ -86,16 +133,16 @@ static void urndis_stop(struct ifnet *);
 static usbd_status urndis_ctrl_msg(struct urndis_softc *, uint8_t, uint8_t,
     uint16_t, uint16_t, void *, size_t);
 static usbd_status urndis_ctrl_send(struct urndis_softc *, void *, size_t);
-static struct urndis_comp_hdr *urndis_ctrl_recv(struct urndis_softc *);
+static struct rndis_comp_hdr *urndis_ctrl_recv(struct urndis_softc *);
 
 static uint32_t urndis_ctrl_handle(struct urndis_softc *,
-    struct urndis_comp_hdr *, void **, size_t *);
+    struct rndis_comp_hdr *, void **, size_t *);
 static uint32_t urndis_ctrl_handle_init(struct urndis_softc *,
-    const struct urndis_comp_hdr *);
+    const struct rndis_comp_hdr *);
 static uint32_t urndis_ctrl_handle_query(struct urndis_softc *,
-    const struct urndis_comp_hdr *, void **, size_t *);
+    const struct rndis_comp_hdr *, void **, size_t *);
 static uint32_t urndis_ctrl_handle_reset(struct urndis_softc *,
-    const struct urndis_comp_hdr *);
+    const struct rndis_comp_hdr *);
 
 static uint32_t urndis_ctrl_init(struct urndis_softc *);
 #if 0
@@ -164,10 +211,10 @@ urndis_ctrl_send(struct urndis_softc *sc, void *buf, size_t len)
 	return err;
 }
 
-static struct urndis_comp_hdr *
+static struct rndis_comp_hdr *
 urndis_ctrl_recv(struct urndis_softc *sc)
 {
-	struct urndis_comp_hdr	*hdr;
+	struct rndis_comp_hdr	*hdr;
 	char			*buf;
 	usbd_status		 err;
 
@@ -181,7 +228,7 @@ urndis_ctrl_recv(struct urndis_softc *sc)
 		return NULL;
 	}
 
-	hdr = (struct urndis_comp_hdr *)buf;
+	hdr = (struct rndis_comp_hdr *)buf;
 	DPRINTF(("%s: urndis_ctrl_recv: type 0x%x len %u\n",
 	    DEVNAME(sc),
 	    le32toh(hdr->rm_type),
@@ -200,7 +247,7 @@ urndis_ctrl_recv(struct urndis_softc *sc)
 }
 
 static uint32_t
-urndis_ctrl_handle(struct urndis_softc *sc, struct urndis_comp_hdr *hdr,
+urndis_ctrl_handle(struct urndis_softc *sc, struct rndis_comp_hdr *hdr,
     void **buf, size_t *bufsz)
 {
 	uint32_t rval;
@@ -243,11 +290,11 @@ urndis_ctrl_handle(struct urndis_softc *sc, struct urndis_comp_hdr *hdr,
 
 static uint32_t
 urndis_ctrl_handle_init(struct urndis_softc *sc,
-    const struct urndis_comp_hdr *hdr)
+    const struct rndis_comp_hdr *hdr)
 {
-	const struct urndis_init_comp	*msg;
+	const struct rndis_init_comp	*msg;
 
-	msg = (const struct urndis_init_comp *) hdr;
+	msg = (const struct rndis_init_comp *) hdr;
 
 	DPRINTF(("%s: urndis_ctrl_handle_init: len %u rid %u status 0x%x "
 	    "ver_major %u ver_minor %u devflags 0x%x medium 0x%x pktmaxcnt %u "
@@ -296,11 +343,11 @@ urndis_ctrl_handle_init(struct urndis_softc *sc,
 
 static uint32_t
 urndis_ctrl_handle_query(struct urndis_softc *sc,
-    const struct urndis_comp_hdr *hdr, void **buf, size_t *bufsz)
+    const struct rndis_comp_hdr *hdr, void **buf, size_t *bufsz)
 {
-	const struct urndis_query_comp	*msg;
+	const struct rndis_query_comp	*msg;
 
-	msg = (const struct urndis_query_comp *) hdr;
+	msg = (const struct rndis_query_comp *) hdr;
 
 	DPRINTF(("%s: urndis_ctrl_handle_query: len %u rid %u status 0x%x "
 	    "buflen %u bufoff %u\n",
@@ -354,12 +401,12 @@ urndis_ctrl_handle_query(struct urndis_softc *sc,
 
 static uint32_t
 urndis_ctrl_handle_reset(struct urndis_softc *sc,
-    const struct urndis_comp_hdr *hdr)
+    const struct rndis_comp_hdr *hdr)
 {
-	const struct urndis_reset_comp	*msg;
+	const struct rndis_reset_comp	*msg;
 	uint32_t			 rval;
 
-	msg = (const struct urndis_reset_comp *) hdr;
+	msg = (const struct rndis_reset_comp *) hdr;
 
 	rval = le32toh(msg->rm_status);
 
@@ -394,9 +441,9 @@ urndis_ctrl_handle_reset(struct urndis_softc *sc,
 static uint32_t
 urndis_ctrl_init(struct urndis_softc *sc)
 {
-	struct urndis_init_req	*msg;
+	struct rndis_init_req	*msg;
 	uint32_t		 rval;
-	struct urndis_comp_hdr	*hdr;
+	struct rndis_comp_hdr	*hdr;
 
 	msg = kmem_alloc(sizeof(*msg), KM_SLEEP);
 	msg->rm_type = htole32(REMOTE_NDIS_INITIALIZE_MSG);
@@ -437,7 +484,7 @@ urndis_ctrl_init(struct urndis_softc *sc)
 static uint32_t
 urndis_ctrl_halt(struct urndis_softc *sc)
 {
-	struct urndis_halt_req	*msg;
+	struct rndis_halt_req	*msg;
 	uint32_t		 rval;
 
 	msg = kmem_alloc(sizeof(*msg), KM_SLEEP);
@@ -466,9 +513,9 @@ urndis_ctrl_query(struct urndis_softc *sc, uint32_t oid,
     void *qbuf, size_t qlen,
     void **rbuf, size_t *rbufsz)
 {
-	struct urndis_query_req	*msg;
+	struct rndis_query_req	*msg;
 	uint32_t		 rval;
-	struct urndis_comp_hdr	*hdr;
+	struct rndis_comp_hdr	*hdr;
 
 	msg = kmem_alloc(sizeof(*msg) + qlen, KM_SLEEP);
 	msg->rm_type = htole32(REMOTE_NDIS_QUERY_MSG);
@@ -514,9 +561,9 @@ urndis_ctrl_query(struct urndis_softc *sc, uint32_t oid,
 static uint32_t
 urndis_ctrl_set(struct urndis_softc *sc, uint32_t oid, void *buf, size_t len)
 {
-	struct urndis_set_req	*msg;
+	struct rndis_set_req	*msg;
 	uint32_t		 rval;
-	struct urndis_comp_hdr	*hdr;
+	struct rndis_comp_hdr	*hdr;
 
 	msg = kmem_alloc(sizeof(*msg) + len, KM_SLEEP);
 	msg->rm_type = htole32(REMOTE_NDIS_SET_MSG);
@@ -569,7 +616,7 @@ urndis_ctrl_set_param(struct urndis_softc *sc,
     void *buf,
     size_t len)
 {
-	struct urndis_set_parameter	*param;
+	struct rndis_set_parameter	*param;
 	uint32_t			 rval;
 	size_t				 namelen, tlen;
 
@@ -614,9 +661,9 @@ urndis_ctrl_set_param(struct urndis_softc *sc,
 static uint32_t
 urndis_ctrl_reset(struct urndis_softc *sc)
 {
-	struct urndis_reset_req		*reset;
+	struct rndis_reset_req		*reset;
 	uint32_t			 rval;
-	struct urndis_comp_hdr		*hdr;
+	struct rndis_comp_hdr		*hdr;
 
 	reset = kmem_alloc(sizeof(*reset), KM_SLEEP);
 	reset->rm_type = htole32(REMOTE_NDIS_RESET_MSG);
@@ -649,9 +696,9 @@ urndis_ctrl_reset(struct urndis_softc *sc)
 static uint32_t
 urndis_ctrl_keepalive(struct urndis_softc *sc)
 {
-	struct urndis_keepalive_req	*keep;
+	struct rndis_keepalive_req	*keep;
 	uint32_t			 rval;
-	struct urndis_comp_hdr		*hdr;
+	struct rndis_comp_hdr		*hdr;
 
 	keep = kmem_alloc(sizeof(*keep), KM_SLEEP);
 	keep->rm_type = htole32(REMOTE_NDIS_KEEPALIVE_MSG);
@@ -691,11 +738,11 @@ urndis_encap(struct urndis_softc *sc, struct mbuf *m, int idx)
 {
 	struct urndis_chain		*c;
 	usbd_status			 err;
-	struct urndis_packet_msg	*msg;
+	struct rndis_packet_msg		*msg;
 
 	c = &sc->sc_data.sc_tx_chain[idx];
 
-	msg = (struct urndis_packet_msg *)c->sc_buf;
+	msg = (struct rndis_packet_msg *)c->sc_buf;
 
 	memset(msg, 0, sizeof(*msg));
 	msg->rm_type = htole32(REMOTE_NDIS_PACKET_MSG);
@@ -735,7 +782,7 @@ static void
 urndis_decap(struct urndis_softc *sc, struct urndis_chain *c, uint32_t len)
 {
 	struct mbuf		*m;
-	struct urndis_packet_msg	*msg;
+	struct rndis_packet_msg	*msg;
 	struct ifnet		*ifp;
 	int			 s;
 	int			 offset;
@@ -744,7 +791,7 @@ urndis_decap(struct urndis_softc *sc, struct urndis_chain *c, uint32_t len)
 	offset = 0;
 
 	while (len > 0) {
-		msg = (struct urndis_packet_msg *)((char*)c->sc_buf + offset);
+		msg = (struct rndis_packet_msg *)((char*)c->sc_buf + offset);
 		m = c->sc_mbuf;
 
 		DPRINTF(("%s: urndis_decap buffer size left %u\n", DEVNAME(sc),
-- 
2.17.0

