svn commit: r305729 - head/sys/dev/hyperv/netvsc
Sepherosa Ziehau
sephe at FreeBSD.org
Mon Sep 12 05:59:41 UTC 2016
Author: sephe
Date: Mon Sep 12 05:59:39 2016
New Revision: 305729
URL: https://svnweb.freebsd.org/changeset/base/305729
Log:
hyperv/hn: Reorganize RNDIS attach
MFC after: 1 week
Sponsored by: Microsoft
Differential Revision: https://reviews.freebsd.org/D7830
Modified:
head/sys/dev/hyperv/netvsc/hv_rndis_filter.c
Modified: head/sys/dev/hyperv/netvsc/hv_rndis_filter.c
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_rndis_filter.c Mon Sep 12 05:37:44 2016 (r305728)
+++ head/sys/dev/hyperv/netvsc/hv_rndis_filter.c Mon Sep 12 05:59:39 2016 (r305729)
@@ -78,7 +78,6 @@ static void hv_rf_receive_data(struct hn
static int hv_rf_query_device_mac(struct hn_softc *sc, uint8_t *eaddr);
static int hv_rf_query_device_link_status(struct hn_softc *sc,
uint32_t *link_status);
-static int hv_rf_init_device(struct hn_softc *sc);
static int hn_rndis_query(struct hn_softc *sc, uint32_t oid,
const void *idata, size_t idlen, void *odata, size_t *odlen0);
@@ -922,11 +921,8 @@ hn_rndis_set_rxfilter(struct hn_softc *s
return (error);
}
-/*
- * RNDIS filter init device
- */
static int
-hv_rf_init_device(struct hn_softc *sc)
+hn_rndis_init(struct hn_softc *sc)
{
struct rndis_init_req *req;
const struct rndis_init_comp *comp;
@@ -1007,9 +1003,26 @@ hv_rf_halt_device(struct hn_softc *sc)
return (0);
}
-/*
- * RNDIS filter on device add
- */
+static int
+hn_rndis_attach(struct hn_softc *sc)
+{
+ int error;
+
+ /*
+ * Initialize RNDIS.
+ */
+ error = hn_rndis_init(sc);
+ if (error)
+ return (error);
+
+ /*
+ * Configure NDIS offload settings.
+ * XXX no offloading, if error happened?
+ */
+ hn_rndis_conf_offload(sc);
+ return (0);
+}
+
int
hv_rf_on_device_add(struct hn_softc *sc, void *additl_info,
int *nchan0, int mtu)
@@ -1023,28 +1036,15 @@ hv_rf_on_device_add(struct hn_softc *sc,
if (ret != 0)
return (ret);
- /*
- * Initialize the rndis device
- */
-
- /* Send the rndis initialization message */
- ret = hv_rf_init_device(sc);
- if (ret != 0) {
- /*
- * TODO: If rndis init failed, we will need to shut down
- * the channel
- */
- }
+ ret = hn_rndis_attach(sc);
+ if (ret != 0)
+ return (ret);
/* Get the mac address */
ret = hv_rf_query_device_mac(sc, dev_info->mac_addr);
if (ret != 0) {
/* TODO: shut down rndis device and the channel */
}
-
- /* Configure NDIS offload settings */
- hn_rndis_conf_offload(sc);
-
hv_rf_query_device_link_status(sc, &dev_info->link_state);
if (sc->hn_ndis_ver < HN_NDIS_VERSION_6_30 || nchan == 1) {
More information about the svn-src-all
mailing list