Edit

IABSD.fr/src/sys/dev/pv/ndis.h

Branch :

  • Show log

    Commit

  • Author : mikeb
    Date : 2016-09-23 11:32:13
    Hash : dd708439
    Message : Fixup the NDIS_OFFLOAD_PARAMS_SIZE_6_1 definition

  • sys/dev/pv/ndis.h
  • /*-
     * Copyright (c) 2016 Microsoft Corp.
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     * 1. Redistributions of source code must retain the above copyright
     *    notice unmodified, this list of conditions, and the following
     *    disclaimer.
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    #ifndef _DEV_PV_NDIS_H_
    #define _DEV_PV_NDIS_H_
    
    /*
     * NDIS protocol version numbers
     */
    #define	NDIS_VERSION_5_0			0x00050000
    #define	NDIS_VERSION_5_1			0x00050001
    #define	NDIS_VERSION_6_0			0x00060000
    #define	NDIS_VERSION_6_1			0x00060001
    #define	NDIS_VERSION_6_30			0x0006001e
    
    #define	NDIS_MEDIA_STATE_CONNECTED	0
    #define	NDIS_MEDIA_STATE_DISCONNECTED	1
    
    #define	NDIS_OBJTYPE_DEFAULT		0x80
    #define	NDIS_OBJTYPE_RSS_CAPS		0x88
    #define	NDIS_OBJTYPE_RSS_PARAMS		0x89
    
    struct ndis_object_hdr {
    	uint8_t			ndis_type;	/* NDIS_OBJTYPE_ */
    	uint8_t			ndis_rev;	/* type specific */
    	uint16_t		ndis_size;	/* incl. this hdr */
    };
    
    /*
     * OID_TCP_OFFLOAD_PARAMETERS
     * ndis_type: NDIS_OBJTYPE_DEFAULT
     */
    struct ndis_offload_params {
    	struct ndis_object_hdr	ndis_hdr;
    	uint8_t			ndis_ip4csum;	/* NDIS_OFFLOAD_PARAM_ */
    	uint8_t			ndis_tcp4csum;	/* NDIS_OFFLOAD_PARAM_ */
    	uint8_t			ndis_udp4csum;	/* NDIS_OFFLOAD_PARAM_ */
    	uint8_t			ndis_tcp6csum;	/* NDIS_OFFLOAD_PARAM_ */
    	uint8_t			ndis_udp6csum;	/* NDIS_OFFLOAD_PARAM_ */
    	uint8_t			ndis_lsov1;	/* NDIS_OFFLOAD_PARAM_ */
    	uint8_t			ndis_ipsecv1;	/* NDIS_OFFLOAD_IPSECV1_ */
    	uint8_t			ndis_lsov2_ip4;	/* NDIS_OFFLOAD_LSOV2_ */
    	uint8_t			ndis_lsov2_ip6;	/* NDIS_OFFLOAD_LSOV2_ */
    	uint8_t			ndis_tcp4conn;	/* 0 */
    	uint8_t			ndis_tcp6conn;	/* 0 */
    	uint32_t		ndis_flags;	/* 0 */
    	/* NDIS >= 6.1 */
    	uint8_t			ndis_ipsecv2;	/* NDIS_OFFLOAD_IPSECV2_ */
    	uint8_t			ndis_ipsecv2_ip4;/* NDIS_OFFLOAD_IPSECV2_ */
    	/* NDIS >= 6.30 */
    	uint8_t			ndis_rsc_ip4;	/* NDIS_OFFLOAD_RSC_ */
    	uint8_t			ndis_rsc_ip6;	/* NDIS_OFFLOAD_RSC_ */
    	uint8_t			ndis_encap;	/* NDIS_OFFLOAD_SET_ */
    	uint8_t			ndis_encap_types;/* NDIS_ENCAP_TYPE_ */
    };
    
    #define	NDIS_OFFLOAD_PARAMS_SIZE	sizeof(struct ndis_offload_params)
    #define	NDIS_OFFLOAD_PARAMS_SIZE_6_1	\
    	offsetof(struct ndis_offload_params, ndis_rsc_ip4)
    
    #define	NDIS_OFFLOAD_PARAMS_REV_2	2	/* NDIS 6.1 */
    #define	NDIS_OFFLOAD_PARAMS_REV_3	3	/* NDIS 6.30 */
    
    #define	NDIS_OFFLOAD_PARAM_NOCHG	0	/* common */
    #define	NDIS_OFFLOAD_PARAM_OFF		1
    #define	NDIS_OFFLOAD_PARAM_TX		2
    #define	NDIS_OFFLOAD_PARAM_RX		3
    #define	NDIS_OFFLOAD_PARAM_TXRX		4
    
    /* NDIS_OFFLOAD_PARAM_NOCHG */
    #define	NDIS_OFFLOAD_LSOV1_OFF		1
    #define	NDIS_OFFLOAD_LSOV1_ON		2
    
    /* NDIS_OFFLOAD_PARAM_NOCHG */
    #define	NDIS_OFFLOAD_IPSECV1_OFF	1
    #define	NDIS_OFFLOAD_IPSECV1_AH		2
    #define	NDIS_OFFLOAD_IPSECV1_ESP	3
    #define	NDIS_OFFLOAD_IPSECV1_AH_ESP	4
    
    /* NDIS_OFFLOAD_PARAM_NOCHG */
    #define	NDIS_OFFLOAD_LSOV2_OFF		1
    #define	NDIS_OFFLOAD_LSOV2_ON		2
    
    /* NDIS_OFFLOAD_PARAM_NOCHG */
    #define	NDIS_OFFLOAD_IPSECV2_OFF	1
    #define	NDIS_OFFLOAD_IPSECV2_AH		2
    #define	NDIS_OFFLOAD_IPSECV2_ESP	3
    #define	NDIS_OFFLOAD_IPSECV2_AH_ESP	4
    
    /* NDIS_OFFLOAD_PARAM_NOCHG */
    #define	NDIS_OFFLOAD_RSC_OFF		1
    #define	NDIS_OFFLOAD_RSC_ON		2
    
    /*
     * Per-packet-info
     */
    
    /* VLAN */
    #define	NDIS_VLAN_INFO_SIZE		sizeof(uint32_t)
    #define	NDIS_VLAN_INFO_PRI_MASK		0x0007
    #define	NDIS_VLAN_INFO_ID_MASK		0xfff0
    #define	NDIS_VLAN_INFO(id, pri)			\
    	(((pri) & NDIS_VLAN_INFO_PRI_MASK) | (((id) & 0xfff) << 4))
    #define	NDIS_VLAN_INFO_ID(inf)		(((inf) & NDIS_VLAN_INFO_ID_MASK) >> 4)
    #define	NDIS_VLAN_INFO_PRI(inf)		( (inf) & NDIS_VLAN_INFO_PRI_MASK)
    
    /* Reception checksum */
    #define	NDIS_RXCSUM_INFO_SIZE		sizeof(uint32_t)
    #define	NDIS_RXCSUM_INFO_TCPCS_FAILED	0x0001
    #define	NDIS_RXCSUM_INFO_UDPCS_FAILED	0x0002
    #define	NDIS_RXCSUM_INFO_IPCS_FAILED	0x0004
    #define	NDIS_RXCSUM_INFO_TCPCS_OK	0x0008
    #define	NDIS_RXCSUM_INFO_UDPCS_OK	0x0010
    #define	NDIS_RXCSUM_INFO_IPCS_OK	0x0020
    #define	NDIS_RXCSUM_INFO_LOOPBACK	0x0040
    #define	NDIS_RXCSUM_INFO_TCPCS_INVAL	0x0080
    #define	NDIS_RXCSUM_INFO_IPCS_INVAL	0x0100
    
    /* Transmission checksum */
    #define	NDIS_TXCSUM_INFO_SIZE		sizeof(uint32_t)
    #define	NDIS_TXCSUM_INFO_IPV4		0x00000001
    #define	NDIS_TXCSUM_INFO_IPV6		0x00000002
    #define	NDIS_TXCSUM_INFO_TCPCS		0x00000004
    #define	NDIS_TXCSUM_INFO_UDPCS		0x00000008
    #define	NDIS_TXCSUM_INFO_IPCS		0x00000010
    #define	NDIS_TXCSUM_INFO_THOFF		0x03ff0000
    
    #endif	/* _DEV_PV_NDIS_H_ */