svn commit: r305526 - head/sys/dev/hyperv/netvsc
Sepherosa Ziehau
sephe at FreeBSD.org
Wed Sep 7 09:20:59 UTC 2016
Author: sephe
Date: Wed Sep 7 09:20:58 2016
New Revision: 305526
URL: https://svnweb.freebsd.org/changeset/base/305526
Log:
hyperv/hn: Nuke unused bits
MFC after: 1 week
Sponsored by: Microsoft
Differential Revision: https://reviews.freebsd.org/D7795
Deleted:
head/sys/dev/hyperv/netvsc/hv_rndis.h
Modified:
head/sys/dev/hyperv/netvsc/hv_net_vsc.c
head/sys/dev/hyperv/netvsc/hv_net_vsc.h
head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
head/sys/dev/hyperv/netvsc/hv_rndis_filter.c
head/sys/dev/hyperv/netvsc/if_hnreg.h
head/sys/dev/hyperv/netvsc/if_hnvar.h
Modified: head/sys/dev/hyperv/netvsc/hv_net_vsc.c
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_net_vsc.c Wed Sep 7 06:02:29 2016 (r305525)
+++ head/sys/dev/hyperv/netvsc/hv_net_vsc.c Wed Sep 7 09:20:58 2016 (r305526)
@@ -48,9 +48,9 @@
#include <dev/hyperv/include/hyperv.h>
#include <dev/hyperv/include/vmbus_xact.h>
#include <dev/hyperv/netvsc/hv_net_vsc.h>
-#include <dev/hyperv/netvsc/hv_rndis.h>
#include <dev/hyperv/netvsc/hv_rndis_filter.h>
#include <dev/hyperv/netvsc/if_hnreg.h>
+#include <dev/hyperv/netvsc/if_hnvar.h>
MALLOC_DEFINE(M_NETVSC, "netvsc", "Hyper-V netvsc driver");
@@ -513,15 +513,15 @@ hv_nv_connect_to_vsp(struct hn_softc *sc
for (i = protocol_number - 1; i >= 0; i--) {
if (hv_nv_negotiate_nvsp_protocol(sc, protocol_list[i]) == 0) {
sc->hn_nvs_ver = protocol_list[i];
- sc->hn_ndis_ver = NDIS_VERSION_6_30;
+ sc->hn_ndis_ver = HN_NDIS_VERSION_6_30;
if (sc->hn_nvs_ver <= NVSP_PROTOCOL_VERSION_4)
- sc->hn_ndis_ver = NDIS_VERSION_6_1;
+ sc->hn_ndis_ver = HN_NDIS_VERSION_6_1;
if (bootverbose) {
if_printf(sc->hn_ifp, "NVS version 0x%x, "
"NDIS version %u.%u\n",
sc->hn_nvs_ver,
- NDIS_VERSION_MAJOR(sc->hn_ndis_ver),
- NDIS_VERSION_MINOR(sc->hn_ndis_ver));
+ HN_NDIS_VERSION_MAJOR(sc->hn_ndis_ver),
+ HN_NDIS_VERSION_MINOR(sc->hn_ndis_ver));
}
break;
}
@@ -547,8 +547,8 @@ hv_nv_connect_to_vsp(struct hn_softc *sc
memset(&ndis, 0, sizeof(ndis));
ndis.nvs_type = HN_NVS_TYPE_NDIS_INIT;
- ndis.nvs_ndis_major = NDIS_VERSION_MAJOR(sc->hn_ndis_ver);
- ndis.nvs_ndis_minor = NDIS_VERSION_MINOR(sc->hn_ndis_ver);
+ ndis.nvs_ndis_major = HN_NDIS_VERSION_MAJOR(sc->hn_ndis_ver);
+ ndis.nvs_ndis_minor = HN_NDIS_VERSION_MINOR(sc->hn_ndis_ver);
/* NOTE: No response. */
ret = hn_nvs_req_send(sc, &ndis, sizeof(ndis));
@@ -764,7 +764,7 @@ hv_nv_on_receive(struct hn_softc *sc, st
}
pkt = (const struct vmbus_chanpkt_rxbuf *)pkthdr;
- if (__predict_false(pkt->cp_rxbuf_id != NETVSC_RECEIVE_BUFFER_ID)) {
+ if (__predict_false(pkt->cp_rxbuf_id != HN_NVS_RXBUF_SIG)) {
if_printf(rxr->hn_ifp, "invalid rxbuf_id 0x%08x\n",
pkt->cp_rxbuf_id);
return;
Modified: head/sys/dev/hyperv/netvsc/hv_net_vsc.h
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_net_vsc.h Wed Sep 7 06:02:29 2016 (r305525)
+++ head/sys/dev/hyperv/netvsc/hv_net_vsc.h Wed Sep 7 09:20:58 2016 (r305526)
@@ -74,110 +74,6 @@ MALLOC_DECLARE(M_NETVSC);
#define NVSP_PROTOCOL_VERSION_2 0x30002
#define NVSP_PROTOCOL_VERSION_4 0x40000
#define NVSP_PROTOCOL_VERSION_5 0x50000
-#define NVSP_MIN_PROTOCOL_VERSION (NVSP_PROTOCOL_VERSION_1)
-#define NVSP_MAX_PROTOCOL_VERSION (NVSP_PROTOCOL_VERSION_2)
-
-#define NVSP_PROTOCOL_VERSION_CURRENT NVSP_PROTOCOL_VERSION_2
-
-#define VERSION_4_OFFLOAD_SIZE 22
-
-#define NVSP_OPERATIONAL_STATUS_OK (0x00000000)
-#define NVSP_OPERATIONAL_STATUS_DEGRADED (0x00000001)
-#define NVSP_OPERATIONAL_STATUS_NONRECOVERABLE (0x00000002)
-#define NVSP_OPERATIONAL_STATUS_NO_CONTACT (0x00000003)
-#define NVSP_OPERATIONAL_STATUS_LOST_COMMUNICATION (0x00000004)
-
-/*
- * Maximun number of transfer pages (packets) the VSP will use on a receive
- */
-#define NVSP_MAX_PACKETS_PER_RECEIVE 375
-
-/* vRSS stuff */
-#define RNDIS_OBJECT_TYPE_RSS_CAPABILITIES 0x88
-#define RNDIS_OBJECT_TYPE_RSS_PARAMETERS 0x89
-
-#define RNDIS_RECEIVE_SCALE_CAPABILITIES_REVISION_2 2
-#define RNDIS_RECEIVE_SCALE_PARAMETERS_REVISION_2 2
-
-struct rndis_obj_header {
- uint8_t type;
- uint8_t rev;
- uint16_t size;
-} __packed;
-
-/* rndis_recv_scale_cap/cap_flag */
-#define RNDIS_RSS_CAPS_MESSAGE_SIGNALED_INTERRUPTS 0x01000000
-#define RNDIS_RSS_CAPS_CLASSIFICATION_AT_ISR 0x02000000
-#define RNDIS_RSS_CAPS_CLASSIFICATION_AT_DPC 0x04000000
-#define RNDIS_RSS_CAPS_USING_MSI_X 0x08000000
-#define RNDIS_RSS_CAPS_RSS_AVAILABLE_ON_PORTS 0x10000000
-#define RNDIS_RSS_CAPS_SUPPORTS_MSI_X 0x20000000
-#define RNDIS_RSS_CAPS_HASH_TYPE_TCP_IPV4 0x00000100
-#define RNDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6 0x00000200
-#define RNDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6_EX 0x00000400
-
-/* RNDIS_RECEIVE_SCALE_CAPABILITIES */
-struct rndis_recv_scale_cap {
- struct rndis_obj_header hdr;
- uint32_t cap_flag;
- uint32_t num_int_msg;
- uint32_t num_recv_que;
- uint16_t num_indirect_tabent;
-} __packed;
-
-/* rndis_recv_scale_param flags */
-#define RNDIS_RSS_PARAM_FLAG_BASE_CPU_UNCHANGED 0x0001
-#define RNDIS_RSS_PARAM_FLAG_HASH_INFO_UNCHANGED 0x0002
-#define RNDIS_RSS_PARAM_FLAG_ITABLE_UNCHANGED 0x0004
-#define RNDIS_RSS_PARAM_FLAG_HASH_KEY_UNCHANGED 0x0008
-#define RNDIS_RSS_PARAM_FLAG_DISABLE_RSS 0x0010
-
-/* Hash info bits */
-#define RNDIS_HASH_FUNC_TOEPLITZ 0x00000001
-#define RNDIS_HASH_IPV4 0x00000100
-#define RNDIS_HASH_TCP_IPV4 0x00000200
-#define RNDIS_HASH_IPV6 0x00000400
-#define RNDIS_HASH_IPV6_EX 0x00000800
-#define RNDIS_HASH_TCP_IPV6 0x00001000
-#define RNDIS_HASH_TCP_IPV6_EX 0x00002000
-
-#define RNDIS_RSS_INDIRECTION_TABLE_MAX_SIZE_REVISION_2 (128 * 4)
-#define RNDIS_RSS_HASH_SECRET_KEY_MAX_SIZE_REVISION_2 40
-
-#define ITAB_NUM 128
-#define HASH_KEYLEN RNDIS_RSS_HASH_SECRET_KEY_MAX_SIZE_REVISION_2
-
-/* RNDIS_RECEIVE_SCALE_PARAMETERS */
-typedef struct rndis_recv_scale_param_ {
- struct rndis_obj_header hdr;
-
- /* Qualifies the rest of the information */
- uint16_t flag;
-
- /* The base CPU number to do receive processing. not used */
- uint16_t base_cpu_number;
-
- /* This describes the hash function and type being enabled */
- uint32_t hashinfo;
-
- /* The size of indirection table array */
- uint16_t indirect_tabsize;
-
- /* The offset of the indirection table from the beginning of this
- * structure
- */
- uint32_t indirect_taboffset;
-
- /* The size of the hash secret key */
- uint16_t hashkey_size;
-
- /* The offset of the secret key from the beginning of this structure */
- uint32_t hashkey_offset;
-
- uint32_t processor_masks_offset;
- uint32_t num_processor_masks;
- uint32_t processor_masks_entry_size;
-} rndis_recv_scale_param;
/*
* The following arguably belongs in a separate header file
@@ -188,18 +84,10 @@ typedef struct rndis_recv_scale_param_ {
*/
#define NETVSC_SEND_BUFFER_SIZE (1024*1024*15) /* 15M */
-#define NETVSC_SEND_BUFFER_ID 0xface
#define NETVSC_RECEIVE_BUFFER_SIZE_LEGACY (1024*1024*15) /* 15MB */
#define NETVSC_RECEIVE_BUFFER_SIZE (1024*1024*16) /* 16MB */
-#define NETVSC_RECEIVE_BUFFER_ID 0xcafe
-
-#define NETVSC_RECEIVE_SG_COUNT 1
-
-/* Preallocated receive packets */
-#define NETVSC_RECEIVE_PACKETLIST_COUNT 256
-
/*
* Maximum MTU we permit to be configured for a netvsc interface.
* When the code was developed, a max MTU of 12232 was tested and
@@ -208,7 +96,6 @@ typedef struct rndis_recv_scale_param_ {
#define NETVSC_MAX_CONFIGURABLE_MTU (9 * 1024)
#define NETVSC_PACKET_SIZE PAGE_SIZE
-#define VRSS_SEND_TABLE_SIZE 16
/*
* Data types
@@ -216,26 +103,9 @@ typedef struct rndis_recv_scale_param_ {
struct vmbus_channel;
-typedef void (*pfn_on_send_rx_completion)(struct vmbus_channel *, void *);
-
#define NETVSC_DEVICE_RING_BUFFER_SIZE (128 * PAGE_SIZE)
#define NETVSC_PACKET_MAXPAGE 32
-#define NETVSC_VLAN_PRIO_MASK 0xe000
-#define NETVSC_VLAN_PRIO_SHIFT 13
-#define NETVSC_VLAN_VID_MASK 0x0fff
-
-#define TYPE_IPV4 2
-#define TYPE_IPV6 4
-#define TYPE_TCP 2
-#define TYPE_UDP 4
-
-#define TRANSPORT_TYPE_NOT_IP 0
-#define TRANSPORT_TYPE_IPV4_TCP ((TYPE_IPV4 << 16) | TYPE_TCP)
-#define TRANSPORT_TYPE_IPV4_UDP ((TYPE_IPV4 << 16) | TYPE_UDP)
-#define TRANSPORT_TYPE_IPV6_TCP ((TYPE_IPV6 << 16) | TYPE_TCP)
-#define TRANSPORT_TYPE_IPV6_UDP ((TYPE_IPV6 << 16) | TYPE_UDP)
-
typedef struct {
uint8_t mac_addr[ETHER_ADDR_LEN];
uint32_t link_state;
Modified: head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c Wed Sep 7 06:02:29 2016 (r305525)
+++ head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c Wed Sep 7 09:20:58 2016 (r305526)
@@ -78,7 +78,7 @@ __FBSDID("$FreeBSD$");
#include <net/ethernet.h>
#include <net/if_dl.h>
#include <net/if_media.h>
-
+#include <net/rndis.h>
#include <net/bpf.h>
#include <net/if_var.h>
@@ -118,7 +118,6 @@ __FBSDID("$FreeBSD$");
#include <dev/hyperv/include/vmbus_xact.h>
#include <dev/hyperv/netvsc/hv_net_vsc.h>
-#include <dev/hyperv/netvsc/hv_rndis.h>
#include <dev/hyperv/netvsc/hv_rndis_filter.h>
#include <dev/hyperv/netvsc/ndis.h>
@@ -827,7 +826,7 @@ hn_tx_done(struct hn_send_ctx *sndc, str
}
void
-netvsc_channel_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr)
+hn_chan_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr)
{
#if defined(INET) || defined(INET6)
tcp_lro_flush_all(&rxr->hn_lro);
@@ -1263,7 +1262,7 @@ hn_lro_rx(struct lro_ctrl *lc, struct mb
* Note: This is no longer used as a callback
*/
int
-netvsc_recv(struct hn_rx_ring *rxr, const void *data, int dlen,
+hn_rxpkt(struct hn_rx_ring *rxr, const void *data, int dlen,
const struct hn_recvinfo *info)
{
struct ifnet *ifp = rxr->hn_ifp;
@@ -2089,8 +2088,8 @@ hn_ndis_version_sysctl(SYSCTL_HANDLER_AR
char verstr[16];
snprintf(verstr, sizeof(verstr), "%u.%u",
- NDIS_VERSION_MAJOR(sc->hn_ndis_ver),
- NDIS_VERSION_MINOR(sc->hn_ndis_ver));
+ HN_NDIS_VERSION_MAJOR(sc->hn_ndis_ver),
+ HN_NDIS_VERSION_MINOR(sc->hn_ndis_ver));
return sysctl_handle_string(oidp, verstr, sizeof(verstr), req);
}
Modified: head/sys/dev/hyperv/netvsc/hv_rndis_filter.c
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_rndis_filter.c Wed Sep 7 06:02:29 2016 (r305525)
+++ head/sys/dev/hyperv/netvsc/hv_rndis_filter.c Wed Sep 7 09:20:58 2016 (r305526)
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#include <net/if_arp.h>
#include <net/if_var.h>
#include <net/ethernet.h>
+#include <net/rndis.h>
#include <sys/types.h>
#include <machine/atomic.h>
#include <sys/sema.h>
@@ -48,7 +49,6 @@ __FBSDID("$FreeBSD$");
#include <dev/hyperv/include/hyperv.h>
#include <dev/hyperv/include/vmbus_xact.h>
#include <dev/hyperv/netvsc/hv_net_vsc.h>
-#include <dev/hyperv/netvsc/hv_rndis.h>
#include <dev/hyperv/netvsc/hv_rndis_filter.h>
#include <dev/hyperv/netvsc/if_hnreg.h>
#include <dev/hyperv/netvsc/ndis.h>
@@ -419,7 +419,7 @@ hv_rf_receive_data(struct hn_rx_ring *rx
pkt->rm_len, data_off, data_len);
return;
}
- netvsc_recv(rxr, ((const uint8_t *)pkt) + data_off, data_len, &info);
+ hn_rxpkt(rxr, ((const uint8_t *)pkt) + data_off, data_len, &info);
}
/*
@@ -731,7 +731,7 @@ hn_rndis_get_rsscaps(struct hn_softc *sc
/*
* Only NDIS 6.30+ is supported.
*/
- KASSERT(sc->hn_ndis_ver >= NDIS_VERSION_6_30,
+ KASSERT(sc->hn_ndis_ver >= HN_NDIS_VERSION_6_30,
("NDIS 6.30+ is required, NDIS version 0x%08x", sc->hn_ndis_ver));
*rxr_cnt = 0;
@@ -827,7 +827,7 @@ hn_rndis_conf_offload(struct hn_softc *s
memset(¶ms, 0, sizeof(params));
params.ndis_hdr.ndis_type = NDIS_OBJTYPE_DEFAULT;
- if (sc->hn_ndis_ver < NDIS_VERSION_6_30) {
+ if (sc->hn_ndis_ver < HN_NDIS_VERSION_6_30) {
params.ndis_hdr.ndis_rev = NDIS_OFFLOAD_PARAMS_REV_2;
paramsz = NDIS_OFFLOAD_PARAMS_SIZE_6_1;
} else {
@@ -839,7 +839,7 @@ hn_rndis_conf_offload(struct hn_softc *s
params.ndis_ip4csum = NDIS_OFFLOAD_PARAM_TXRX;
params.ndis_tcp4csum = NDIS_OFFLOAD_PARAM_TXRX;
params.ndis_tcp6csum = NDIS_OFFLOAD_PARAM_TXRX;
- if (sc->hn_ndis_ver >= NDIS_VERSION_6_30) {
+ if (sc->hn_ndis_ver >= HN_NDIS_VERSION_6_30) {
params.ndis_udp4csum = NDIS_OFFLOAD_PARAM_TXRX;
params.ndis_udp6csum = NDIS_OFFLOAD_PARAM_TXRX;
}
@@ -866,7 +866,7 @@ hn_rndis_conf_rss(struct hn_softc *sc, i
/*
* Only NDIS 6.30+ is supported.
*/
- KASSERT(sc->hn_ndis_ver >= NDIS_VERSION_6_30,
+ KASSERT(sc->hn_ndis_ver >= HN_NDIS_VERSION_6_30,
("NDIS 6.30+ is required, NDIS version 0x%08x", sc->hn_ndis_ver));
memset(rss, 0, sizeof(*rss));
@@ -1059,7 +1059,7 @@ hv_rf_on_device_add(struct hn_softc *sc,
hv_rf_query_device_link_status(sc, &dev_info->link_state);
- if (sc->hn_ndis_ver < NDIS_VERSION_6_30 || nchan == 1) {
+ if (sc->hn_ndis_ver < HN_NDIS_VERSION_6_30 || nchan == 1) {
/*
* Either RSS is not supported, or multiple RX/TX rings
* are not requested.
@@ -1189,5 +1189,5 @@ void
hv_rf_channel_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr)
{
- netvsc_channel_rollup(rxr, txr);
+ hn_chan_rollup(rxr, txr);
}
Modified: head/sys/dev/hyperv/netvsc/if_hnreg.h
==============================================================================
--- head/sys/dev/hyperv/netvsc/if_hnreg.h Wed Sep 7 06:02:29 2016 (r305525)
+++ head/sys/dev/hyperv/netvsc/if_hnreg.h Wed Sep 7 09:20:58 2016 (r305526)
@@ -32,6 +32,14 @@
#include <sys/param.h>
#include <sys/systm.h>
+/*
+ * NDIS protocol version numbers
+ */
+#define HN_NDIS_VERSION_6_1 0x00060001
+#define HN_NDIS_VERSION_6_30 0x0006001e
+#define HN_NDIS_VERSION_MAJOR(ver) (((ver) & 0xffff0000) >> 16)
+#define HN_NDIS_VERSION_MINOR(ver) ((ver) & 0xffff)
+
#define HN_NVS_RXBUF_SIG 0xcafe
#define HN_NVS_CHIM_SIG 0xface
Modified: head/sys/dev/hyperv/netvsc/if_hnvar.h
==============================================================================
--- head/sys/dev/hyperv/netvsc/if_hnvar.h Wed Sep 7 06:02:29 2016 (r305525)
+++ head/sys/dev/hyperv/netvsc/if_hnvar.h Wed Sep 7 09:20:58 2016 (r305526)
@@ -112,6 +112,7 @@ hn_nvs_send_sglist(struct vmbus_channel
}
struct vmbus_xact;
+struct rndis_packet_msg;
const void *hn_nvs_xact_execute(struct hn_softc *sc,
struct vmbus_xact *xact, void *req, int reqlen,
@@ -124,6 +125,10 @@ void hn_chim_free(struct hn_softc *sc,
void *hn_rndis_pktinfo_append(struct rndis_packet_msg *,
size_t pktsize, size_t pi_dlen, uint32_t pi_type);
+int hn_rxpkt(struct hn_rx_ring *rxr, const void *data, int dlen,
+ const struct hn_recvinfo *info);
+void hn_chan_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr);
+
extern struct hn_send_ctx hn_send_ctx_none;
#endif /* !_IF_HNVAR_H_ */
More information about the svn-src-head
mailing list