From 87879fc871e1208d5d04de4aab6dcaaef2296555 Mon Sep 17 00:00:00 2001 From: Kimihiro Nonaka 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 #include -#include +#include + +#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