Home | History | Annotate | Line # | Download | only in pci
if_wmreg.h revision 1.105.2.1
      1  1.105.2.1  pgoyette /*	$NetBSD: if_wmreg.h,v 1.105.2.1 2018/04/16 01:59:58 pgoyette Exp $	*/
      2        1.1   thorpej 
      3        1.1   thorpej /*
      4        1.1   thorpej  * Copyright (c) 2001 Wasabi Systems, Inc.
      5        1.1   thorpej  * All rights reserved.
      6        1.1   thorpej  *
      7        1.1   thorpej  * Written by Jason R. Thorpe for Wasabi Systems, Inc.
      8        1.1   thorpej  *
      9        1.1   thorpej  * Redistribution and use in source and binary forms, with or without
     10        1.1   thorpej  * modification, are permitted provided that the following conditions
     11        1.1   thorpej  * are met:
     12        1.1   thorpej  * 1. Redistributions of source code must retain the above copyright
     13        1.1   thorpej  *    notice, this list of conditions and the following disclaimer.
     14        1.1   thorpej  * 2. Redistributions in binary form must reproduce the above copyright
     15        1.1   thorpej  *    notice, this list of conditions and the following disclaimer in the
     16        1.1   thorpej  *    documentation and/or other materials provided with the distribution.
     17        1.1   thorpej  * 3. All advertising materials mentioning features or use of this software
     18        1.1   thorpej  *    must display the following acknowledgement:
     19        1.1   thorpej  *	This product includes software developed for the NetBSD Project by
     20        1.1   thorpej  *	Wasabi Systems, Inc.
     21        1.1   thorpej  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
     22        1.1   thorpej  *    or promote products derived from this software without specific prior
     23        1.1   thorpej  *    written permission.
     24        1.1   thorpej  *
     25        1.1   thorpej  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
     26        1.1   thorpej  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     27        1.1   thorpej  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     28        1.1   thorpej  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
     29        1.1   thorpej  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     30        1.1   thorpej  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     31        1.1   thorpej  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     32        1.1   thorpej  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     33        1.1   thorpej  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     34        1.1   thorpej  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     35        1.1   thorpej  * POSSIBILITY OF SUCH DAMAGE.
     36        1.1   thorpej  */
     37        1.1   thorpej 
     38       1.53   msaitoh /******************************************************************************
     39       1.53   msaitoh 
     40       1.53   msaitoh   Copyright (c) 2001-2012, Intel Corporation
     41       1.53   msaitoh   All rights reserved.
     42       1.53   msaitoh 
     43       1.53   msaitoh   Redistribution and use in source and binary forms, with or without
     44       1.53   msaitoh   modification, are permitted provided that the following conditions are met:
     45       1.53   msaitoh 
     46       1.53   msaitoh    1. Redistributions of source code must retain the above copyright notice,
     47       1.53   msaitoh       this list of conditions and the following disclaimer.
     48       1.53   msaitoh 
     49       1.53   msaitoh    2. Redistributions in binary form must reproduce the above copyright
     50       1.53   msaitoh       notice, this list of conditions and the following disclaimer in the
     51       1.53   msaitoh       documentation and/or other materials provided with the distribution.
     52       1.53   msaitoh 
     53       1.53   msaitoh    3. Neither the name of the Intel Corporation nor the names of its
     54       1.53   msaitoh       contributors may be used to endorse or promote products derived from
     55       1.53   msaitoh       this software without specific prior written permission.
     56       1.53   msaitoh 
     57       1.53   msaitoh   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     58       1.53   msaitoh   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     59       1.53   msaitoh   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     60       1.53   msaitoh   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
     61       1.53   msaitoh   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     62       1.53   msaitoh   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     63       1.53   msaitoh   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     64       1.53   msaitoh   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     65       1.53   msaitoh   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     66       1.53   msaitoh   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     67       1.53   msaitoh   POSSIBILITY OF SUCH DAMAGE.
     68       1.53   msaitoh 
     69       1.53   msaitoh ******************************************************************************/
     70       1.53   msaitoh 
     71        1.1   thorpej /*
     72        1.4      yamt  * Register description for the Intel i82542 (``Wiseman''),
     73        1.1   thorpej  * i82543 (``Livengood''), and i82544 (``Cordova'') Gigabit
     74        1.1   thorpej  * Ethernet chips.
     75        1.1   thorpej  */
     76        1.1   thorpej 
     77        1.1   thorpej /*
     78        1.1   thorpej  * The wiseman supports 64-bit PCI addressing.  This structure
     79        1.1   thorpej  * describes the address in descriptors.
     80        1.1   thorpej  */
     81        1.1   thorpej typedef struct wiseman_addr {
     82        1.1   thorpej 	uint32_t	wa_low;		/* low-order 32 bits */
     83        1.1   thorpej 	uint32_t	wa_high;	/* high-order 32 bits */
     84       1.24     perry } __packed wiseman_addr_t;
     85        1.1   thorpej 
     86        1.1   thorpej /*
     87        1.1   thorpej  * The Wiseman receive descriptor.
     88        1.1   thorpej  *
     89        1.1   thorpej  * The receive descriptor ring must be aligned to a 4K boundary,
     90        1.1   thorpej  * and there must be an even multiple of 8 descriptors in the ring.
     91        1.1   thorpej  */
     92        1.1   thorpej typedef struct wiseman_rxdesc {
     93       1.46    dyoung 	volatile wiseman_addr_t	wrx_addr;	/* buffer address */
     94        1.1   thorpej 
     95       1.46    dyoung 	volatile uint16_t	wrx_len;	/* buffer length */
     96       1.46    dyoung 	volatile uint16_t	wrx_cksum;	/* checksum (starting at PCSS)*/
     97        1.1   thorpej 
     98       1.46    dyoung 	volatile uint8_t	wrx_status;	/* Rx status */
     99       1.46    dyoung 	volatile uint8_t	wrx_errors;	/* Rx errors */
    100       1.46    dyoung 	volatile uint16_t	wrx_special;	/* special field (VLAN, etc.) */
    101       1.24     perry } __packed wiseman_rxdesc_t;
    102        1.1   thorpej 
    103        1.1   thorpej /* wrx_status bits */
    104        1.1   thorpej #define	WRX_ST_DD	(1U << 0)	/* descriptor done */
    105        1.1   thorpej #define	WRX_ST_EOP	(1U << 1)	/* end of packet */
    106       1.15      yamt #define	WRX_ST_IXSM	(1U << 2)	/* ignore checksum indication */
    107        1.1   thorpej #define	WRX_ST_VP	(1U << 3)	/* VLAN packet */
    108        1.1   thorpej #define	WRX_ST_BPDU	(1U << 4)	/* ??? */
    109        1.1   thorpej #define	WRX_ST_TCPCS	(1U << 5)	/* TCP checksum performed */
    110        1.1   thorpej #define	WRX_ST_IPCS	(1U << 6)	/* IP checksum performed */
    111        1.1   thorpej #define	WRX_ST_PIF	(1U << 7)	/* passed in-exact filter */
    112        1.1   thorpej 
    113        1.1   thorpej /* wrx_error bits */
    114        1.1   thorpej #define	WRX_ER_CE	(1U << 0)	/* CRC error */
    115        1.1   thorpej #define	WRX_ER_SE	(1U << 1)	/* symbol error */
    116        1.1   thorpej #define	WRX_ER_SEQ	(1U << 2)	/* sequence error */
    117        1.1   thorpej #define	WRX_ER_ICE	(1U << 3)	/* ??? */
    118        1.1   thorpej #define	WRX_ER_CXE	(1U << 4)	/* carrier extension error */
    119        1.1   thorpej #define	WRX_ER_TCPE	(1U << 5)	/* TCP checksum error */
    120        1.1   thorpej #define	WRX_ER_IPE	(1U << 6)	/* IP checksum error */
    121        1.1   thorpej #define	WRX_ER_RXE	(1U << 7)	/* Rx data error */
    122        1.1   thorpej 
    123        1.1   thorpej /* wrx_special field for VLAN packets */
    124        1.1   thorpej #define	WRX_VLAN_ID(x)	((x) & 0x0fff)	/* VLAN identifier */
    125        1.1   thorpej #define	WRX_VLAN_CFI	(1U << 12)	/* Canonical Form Indicator */
    126        1.1   thorpej #define	WRX_VLAN_PRI(x)	(((x) >> 13) & 7)/* VLAN priority field */
    127        1.1   thorpej 
    128       1.95  knakahar /* extended RX descriptor for 82574 */
    129       1.95  knakahar typedef union ext_rxdesc {
    130       1.96  knakahar 	struct {
    131       1.96  knakahar 		uint64_t erxd_addr;	/* Packet Buffer Address */
    132       1.96  knakahar 		uint64_t erxd_dd;	/* 63:1 reserved, 0 DD */
    133       1.96  knakahar 	} erx_data;
    134       1.96  knakahar 	struct {
    135       1.96  knakahar 		uint32_t erxc_mrq;	/*
    136       1.96  knakahar 					 * 31:13 reserved
    137       1.96  knakahar 					 * 12:8 Rx queue associated with the packet
    138       1.96  knakahar 					 * 7:4 reserved 3:0 RSS Type
    139       1.96  knakahar 					 */
    140       1.96  knakahar 		uint32_t erxc_rsshash;	/* RSS Hash or {Fragment Checksum, IP identification } */
    141       1.96  knakahar 		uint32_t erxc_err_stat;	/* 31:20 Extended Error, 19:0 Extened Status */
    142       1.96  knakahar 		uint16_t erxc_pktlen;	/* PKT_LEN */
    143       1.96  knakahar 		uint16_t erxc_vlan;	/* VLAN Tag */
    144       1.96  knakahar 	} erx_ctx;
    145       1.95  knakahar } __packed ext_rxdesc_t;
    146       1.95  knakahar 
    147       1.95  knakahar #define EXTRXD_DD_MASK		__BIT(0)
    148       1.95  knakahar 
    149       1.95  knakahar /*
    150       1.95  knakahar  * erxc_rsshash is used for below 2 patterns
    151       1.95  knakahar  *     (1) Fragment Checksum and IP identification
    152       1.95  knakahar  *         - Fragment Checksum is valid
    153       1.95  knakahar  *           when RXCSUM.PCSD cleared and RXCSUM.IPPCSE bit is set
    154       1.95  knakahar  *         - IP identification is valid
    155       1.95  knakahar  *           when RXCSUM.PCSD cleared and RXCSUM.IPPCSE bit is set
    156       1.95  knakahar  *     (2) RSS Hash
    157       1.95  knakahar  *         when RXCSUM.PCSD bit is set
    158       1.95  knakahar  */
    159       1.95  knakahar #define EXTRXC_IP_ID_MASK	__BITS(15,0)
    160       1.95  knakahar #define EXTRXC_FRAG_CSUM_MASK	__BITS(31,16)
    161       1.95  knakahar #define EXTRXC_IP_ID(rsshash)	__SHIFTOUT(rsshash,ERXC_IP_ID_MASK)
    162       1.95  knakahar #define EXTRXC_FRAG_CSUM(rsshash) __SHIFTOUT(rsshash,ERXC_FRAG_CSUM_MASK)
    163       1.95  knakahar 
    164       1.95  knakahar /* macros for nrxc_mrq */
    165       1.95  knakahar #define EXTRXC_RSS_TYPE_MASK		__BITS(3,0)
    166       1.95  knakahar /* __BITS(7,4) is reserved */
    167       1.95  knakahar #define EXTRXC_QUEUE_MASK		__BITS(12,8)
    168       1.95  knakahar /* __BITS(31,13) is reserved */
    169       1.95  knakahar #define EXTRXC_RSS_TYPE(mrq)	__SHIFTOUT(mrq,EXTRXC_RSS_TYPE_MASK)
    170       1.95  knakahar #define EXTRXC_QUEUE(mrq)	__SHIFTOUT(mrq,EXTRXC_QUEUE_MASK)
    171       1.95  knakahar 
    172       1.95  knakahar #define EXTRXC_RSS_TYPE_NONE		0x0 /* No hash computation done. */
    173       1.95  knakahar #define EXTRXC_RSS_TYPE_TCP_IPV4	0x1
    174       1.95  knakahar #define EXTRXC_RSS_TYPE_IPV4		0x2
    175       1.95  knakahar #define EXTRXC_RSS_TYPE_TCP_IPV6	0x3
    176       1.95  knakahar #define EXTRXC_RSS_TYPE_IPV6_EX		0x4
    177       1.95  knakahar #define EXTRXC_RSS_TYPE_IPV6		0x5
    178       1.95  knakahar /*0x6:0xF is reserved. */
    179       1.95  knakahar 
    180       1.95  knakahar #define EXTRXC_STATUS_MASK	__BITS(19,0)
    181       1.95  knakahar #define EXTRXC_ERROR_MASK	__BITS(31,20)
    182       1.95  knakahar #define EXTRXC_STATUS(err_stat)	__SHIFTOUT(err_stat,EXTRXC_STATUS_MASK)
    183       1.95  knakahar #define EXTRXC_ERROR(err_stat)	__SHIFTOUT(err_stat,EXTRXC_ERROR_MASK)
    184       1.95  knakahar 
    185       1.95  knakahar /* 3:0 is reserved. */
    186       1.95  knakahar #define EXTRXC_ERROR_CE		__BIT(4) /* The same as WRX_ER_CE. */
    187       1.95  knakahar #define EXTRXC_ERROR_SE		__BIT(5) /* The same as WRX_ER_SE. */
    188       1.95  knakahar #define EXTRXC_ERROR_SEQ	__BIT(6) /* The same as WRX_ER_SEQ. */
    189       1.95  knakahar /* 7 is reserved. */
    190       1.95  knakahar #define EXTRXC_ERROR_CXE	__BIT(8) /* The same as WRX_ER_CXE. */
    191       1.95  knakahar #define EXTRXC_ERROR_TCPE	__BIT(9) /* The same as WRX_ER_TCPE. */
    192       1.95  knakahar #define EXTRXC_ERROR_IPE	__BIT(10) /* The same as WRX_ER_IPE. */
    193       1.95  knakahar #define EXTRXC_ERROR_RXE	__BIT(11) /* The same as WRX_ER_RXE. */
    194       1.95  knakahar 
    195       1.95  knakahar #define EXTRXC_STATUS_DD		__BIT(0) /* The same as WRX_ST_DD. */
    196       1.95  knakahar #define EXTRXC_STATUS_EOP		__BIT(1) /* The same as WRX_ST_EOP. */
    197       1.95  knakahar /* 2 is reserved. */
    198       1.95  knakahar #define EXTRXC_STATUS_VP		__BIT(3) /* The same as WRX_ST_VP. */
    199       1.95  knakahar #define EXTRXC_STATUS_UDPCS		__BIT(4) /* UDP checksum calculated on packet. */
    200       1.95  knakahar #define EXTRXC_STATUS_TCPCS		__BIT(5) /* The same as WRX_ST_TCPCS. */
    201       1.95  knakahar #define EXTRXC_STATUS_IPCS		__BIT(6) /* The same as WRX_ST_IPCS. */
    202       1.95  knakahar /* 7 is reserved. */
    203       1.95  knakahar #define EXTRXC_STATUS_TST		__BIT(8) /* Time stamp taken. */
    204       1.95  knakahar #define EXTRXC_STATUS_IPIDV		__BIT(9) /* IP identification valid. */
    205       1.95  knakahar #define EXTRXC_STATUS_UDPV		__BIT(10) /* Valid UDP XSUM. */
    206       1.95  knakahar /* 14:11 is reserved. */
    207       1.95  knakahar #define EXTRXC_STATUS_ACK		__BIT(15) /* ACK packet indication. */
    208       1.95  knakahar #define EXTRXC_STATUS_PKTTYPE_MASK	__BITS(19,16)
    209       1.95  knakahar #define EXTRXC_STATUS_PKTTYPE(status)	__SHIFTOUT(status,EXTRXC_STATUS_PKTTYPE_MASK)
    210       1.95  knakahar 
    211       1.95  knakahar /* advanced RX descriptor for 82575 and newer */
    212       1.95  knakahar typedef union nq_rxdesc {
    213       1.96  knakahar 	struct {
    214       1.96  knakahar 		uint64_t nrxd_paddr;	/* 63:1 Packet Buffer Address, 0 A0/NSE */
    215       1.96  knakahar 		uint64_t nrxd_haddr;	/* 63:1 HEader Buffer Address, 0 DD */
    216       1.96  knakahar 	} nqrx_data;
    217       1.96  knakahar 	struct {
    218       1.96  knakahar 		uint32_t nrxc_misc;	/*
    219       1.96  knakahar 					 * 31: SPH, 30:21 HDR_LEN[9:0],
    220       1.96  knakahar 					 * 20:19 HDR_LEN[11:10], 18:17 RSV,
    221       1.96  knakahar 					 * 16:4 Packet Type 3:0 RSS Type
    222       1.96  knakahar 					 */
    223       1.96  knakahar 		uint32_t nrxc_rsshash;	/* RSS Hash or {Fragment Checksum, IP identification } */
    224       1.96  knakahar 		uint32_t nrxc_err_stat;	/* 31:20 Extended Error, 19:0 Extened Status */
    225       1.96  knakahar 		uint16_t nrxc_pktlen;	/* PKT_LEN */
    226       1.96  knakahar 		uint16_t nrxc_vlan;	/* VLAN Tag */
    227       1.96  knakahar 	} nqrx_ctx;
    228       1.95  knakahar } __packed nq_rxdesc_t;
    229       1.95  knakahar 
    230       1.95  knakahar /* for nrxd_paddr macros */
    231       1.95  knakahar #define NQRXD_A0_MASK		__BIT(0)
    232       1.95  knakahar #define NQRXD_NSE_MASK		__BIT(0)
    233       1.95  knakahar #define NQRXD_ADDR_MASK		__BITS(63,1)
    234       1.95  knakahar /* for nrxd_haddr macros */
    235       1.95  knakahar #define NQRXD_DD_MASK		__BIT(0)
    236       1.95  knakahar 
    237       1.95  knakahar /*
    238       1.95  knakahar  * nrxc_rsshash is used for below 2 patterns
    239       1.95  knakahar  *     (1) Fragment Checksum and IP identification
    240       1.95  knakahar  *         - Fragment Checksum is valid
    241       1.95  knakahar  *           when RXCSUM.PCSD cleared and RXCSUM.IPPCSE bit is set
    242       1.95  knakahar  *         - IP identification is valid
    243       1.95  knakahar  *           when RXCSUM.PCSD cleared and RXCSUM.IPPCSE bit is set
    244       1.95  knakahar  *     (2) RSS Hash
    245       1.95  knakahar  *         when RXCSUM.PCSD bit is set
    246       1.95  knakahar  */
    247       1.95  knakahar #define NQRXC_IP_ID_MASK	__BITS(15,0)
    248       1.95  knakahar #define NQRXC_FRAG_CSUM_MASK	__BITS(31,16)
    249       1.95  knakahar #define NQRXC_IP_ID(rsshash)	__SHIFTOUT(rsshash,NRXC_IP_ID_MASK)
    250       1.95  knakahar #define NQRXC_FRAG_CSUM(rsshash) __SHIFTOUT(rsshash,NRXC_FRAG_CSUM_MASK)
    251       1.95  knakahar 
    252       1.95  knakahar /* macros for nrxc_misc */
    253       1.95  knakahar #define NQRXC_RSS_TYPE_MASK		__BITS(3,0)
    254       1.95  knakahar #define NQRXC_PKT_TYPE_ID_MASK		__BITS(11,4)
    255       1.95  knakahar #define NQRXC_PKT_TYPE_ETQF_INDEX_MASK	__BITS(11,4)
    256       1.95  knakahar #define NQRXC_PKT_TYPE_ETQF_VALID_MASK	__BIT(15)
    257       1.95  knakahar #define NQRXC_PKT_TYPE_VLAN_MASK 	__BIT(16)
    258       1.95  knakahar #define NQRXC_PKT_TYPE_MASK		__BITS(16,4)
    259       1.95  knakahar /* __BITS(18,17) is reserved */
    260       1.95  knakahar #define NQRXC_HDRLEN_HIGH_MASK		__BITS(20,19)
    261       1.95  knakahar #define NQRXC_HDRLEN_LOW_MASK		__BITS(30,21)
    262       1.95  knakahar #define NQRXC_SPH_MASK			__BIT(31)
    263       1.95  knakahar 
    264       1.95  knakahar #define NQRXC_RSS_TYPE(misc)	__SHIFTOUT(misc,NQRXC_RSS_TYPE_MASK)
    265       1.95  knakahar #define NQRXC_PKT_TYPE_ID(pkttype) \
    266       1.95  knakahar 		__SHIFTOUT(pkttype,NQRXC_PKT_TYPE_ID_MASK)
    267       1.95  knakahar #define NQRXC_PKT_TYPE(misc)	__SHIFTOUT(misc,NQRXC_PKT_TYPE_MASK)
    268       1.95  knakahar #define NQRXC_PKT_TYPE_ETQF_INDEX(pkttype) \
    269       1.95  knakahar 		__SHIFTOUT(pkttype,NQRXC_PKT_TYPE_ETQF_INDEX_MASK)
    270       1.95  knakahar #define NQRXC_PKT_TYPE_ETQF_VALID NQRXC_PKT_TYPE_ETQF_VALID_MASK
    271       1.95  knakahar #define NQRXC_PKT_TYPE_VLAN	NQRXC_PKT_TYPE_VLAN_MASK
    272       1.95  knakahar #define NQRXC_HEADER_LEN(misc)	(__SHIFTOUT(misc,NQRXC_HDRLEN_LOW_MASK) \
    273       1.95  knakahar 		| __SHIFTOUT(misc,NQRXC_HDRLEN_HIGH_MASK) << 10)
    274       1.95  knakahar #define NQRXC_SPH		NQRXC_SPH_MASK
    275       1.95  knakahar 
    276       1.95  knakahar #define NQRXC_RSS_TYPE_NONE		0x0 /* No hash computation done. */
    277       1.95  knakahar #define NQRXC_RSS_TYPE_TCP_IPV4		0x1
    278       1.95  knakahar #define NQRXC_RSS_TYPE_IPV4		0x2
    279       1.95  knakahar #define NQRXC_RSS_TYPE_TCP_IPV6		0x3
    280       1.95  knakahar #define NQRXC_RSS_TYPE_IPV6_EX		0x4
    281       1.95  knakahar #define NQRXC_RSS_TYPE_IPV6		0x5
    282       1.95  knakahar #define NQRXC_RSS_TYPE_TCP_IPV6_EX	0x6
    283       1.95  knakahar #define NQRXC_RSS_TYPE_UDP_IPV4		0x7
    284       1.95  knakahar #define NQRXC_RSS_TYPE_UDP_IPV6		0x8
    285       1.95  knakahar #define NQRXC_RSS_TYPE_UDP_IPV6_EX	0x9
    286       1.95  knakahar /*0xA:0xF is reserved. */
    287       1.95  knakahar 
    288       1.95  knakahar #define NQRXC_PKT_TYPE_IPV4		__BIT(0)
    289       1.95  knakahar #define NQRXC_PKT_TYPE_IPV4E		__BIT(1)
    290       1.95  knakahar #define NQRXC_PKT_TYPE_IPV6		__BIT(2)
    291       1.95  knakahar #define NQRXC_PKT_TYPE_IPV6E		__BIT(3)
    292       1.95  knakahar #define NQRXC_PKT_TYPE_TCP		__BIT(4)
    293       1.95  knakahar #define NQRXC_PKT_TYPE_UDP		__BIT(5)
    294       1.95  knakahar #define NQRXC_PKT_TYPE_SCTP		__BIT(6)
    295       1.95  knakahar #define NQRXC_PKT_TYPE_NFS		__BIT(7)
    296       1.95  knakahar 
    297       1.95  knakahar #define NQRXC_STATUS_MASK	__BITS(19,0)
    298       1.95  knakahar #define NQRXC_ERROR_MASK	__BITS(31,20)
    299       1.95  knakahar #define NQRXC_STATUS(err_stat)	__SHIFTOUT(err_stat,NQRXC_STATUS_MASK)
    300       1.95  knakahar #define NQRXC_ERROR(err_stat)	__SHIFTOUT(err_stat,NQRXC_ERROR_MASK)
    301       1.95  knakahar 
    302       1.95  knakahar /* 2:0 is reserved. */
    303       1.95  knakahar #define NQRXC_ERROR_HB0		__BIT(3) /* Header Buffer Overflow. */
    304       1.95  knakahar /* 6:4 is reserved. */
    305       1.95  knakahar /* 8:7 is reserved. */
    306       1.95  knakahar #define NQRXC_ERROR_L4E		__BIT(9) /* L4 error indication. */
    307       1.95  knakahar #define NQRXC_ERROR_IPE		__BIT(10) /* The same as WRX_ER_IPE. */
    308       1.95  knakahar #define NQRXC_ERROR_RXE		__BIT(11) /* The same as WRX_ER_RXE. */
    309       1.95  knakahar /* XXX Where is WRX_ER_CE, WRX_ER_SE, WRX_ER_SEQ, WRX_ER_CXE error? */
    310       1.95  knakahar 
    311       1.95  knakahar #define NQRXC_STATUS_DD		__BIT(0) /* The same as WRX_ST_DD. */
    312       1.95  knakahar #define NQRXC_STATUS_EOP	__BIT(1) /* The same as WRX_ST_EOP. */
    313       1.95  knakahar /* 2 is reserved */
    314       1.95  knakahar #define NQRXC_STATUS_VP		__BIT(3) /* The same as WRX_ST_VP. */
    315       1.95  knakahar #define NQRXC_STATUS_UDPCS	__BIT(4) /* UDP checksum or IP payload checksum. */
    316       1.95  knakahar 					 /* XXX in I210 spec, this bit is the same as WRX_ST_BPDU(is "???" comment) */
    317       1.95  knakahar #define NQRXC_STATUS_L4I	__BIT(5) /* L4 integrity check was done. */
    318       1.95  knakahar #define NQRXC_STATUS_IPCS	__BIT(6) /* The same as WRX_ST_IPCS. */
    319       1.95  knakahar #define NQRXC_STATUS_PIF	__BIT(7) /* The same as WRX_ST_PIF. */
    320       1.95  knakahar /* 8 is reserved */
    321       1.95  knakahar #define NQRXC_STATUS_VEXT	__BIT(9) /* First VLAN is found on a bouble VLAN packet. */
    322       1.95  knakahar #define NQRXC_STATUS_UDPV	__BIT(10) /* The packet contains a valid checksum field in a first fragment UDP IPv4 packet. */
    323       1.95  knakahar #define NQRXC_STATUS_LLINT	__BIT(11) /* The packet caused an immediate interrupt. */
    324       1.95  knakahar #define NQRXC_STATUS_STRIPCRC	__BIT(12) /* Ethernet CRC is stripped. */
    325       1.95  knakahar /* 14:13 is reserved */
    326       1.95  knakahar #define NQRXC_STATUS_TSIP	__BIT(15) /* Timestamp in packet. */
    327       1.95  knakahar #define NQRXC_STATUS_TS		__BIT(16) /* Time stamped packet. */
    328       1.95  knakahar /* 17 is reserved */
    329       1.95  knakahar #define NQRXC_STATUS_LB		__BIT(18) /* Sent by a local virtual machine (VM to VM switch indication). */
    330       1.95  knakahar #define NQRXC_STATUS_MC		__BIT(19) /* Packet received from Manageability Controller */
    331       1.95  knakahar 					  /* "MBC" in i350 spec */
    332       1.95  knakahar 
    333        1.1   thorpej /*
    334        1.1   thorpej  * The Wiseman transmit descriptor.
    335        1.1   thorpej  *
    336        1.1   thorpej  * The transmit descriptor ring must be aligned to a 4K boundary,
    337        1.1   thorpej  * and there must be an even multiple of 8 descriptors in the ring.
    338        1.1   thorpej  */
    339        1.9   tsutsui typedef struct wiseman_tx_fields {
    340        1.9   tsutsui 	uint8_t wtxu_status;		/* Tx status */
    341        1.9   tsutsui 	uint8_t wtxu_options;		/* options */
    342        1.9   tsutsui 	uint16_t wtxu_vlan;		/* VLAN info */
    343       1.24     perry } __packed wiseman_txfields_t;
    344        1.1   thorpej typedef struct wiseman_txdesc {
    345        1.1   thorpej 	wiseman_addr_t	wtx_addr;	/* buffer address */
    346        1.1   thorpej 	uint32_t	wtx_cmdlen;	/* command and length */
    347        1.1   thorpej 	wiseman_txfields_t wtx_fields;	/* fields; see below */
    348       1.24     perry } __packed wiseman_txdesc_t;
    349        1.1   thorpej 
    350        1.9   tsutsui /* Commands for wtx_cmdlen */
    351        1.1   thorpej #define	WTX_CMD_EOP	(1U << 24)	/* end of packet */
    352        1.1   thorpej #define	WTX_CMD_IFCS	(1U << 25)	/* insert FCS */
    353        1.1   thorpej #define	WTX_CMD_RS	(1U << 27)	/* report status */
    354        1.1   thorpej #define	WTX_CMD_RPS	(1U << 28)	/* report packet sent */
    355        1.1   thorpej #define	WTX_CMD_DEXT	(1U << 29)	/* descriptor extension */
    356        1.1   thorpej #define	WTX_CMD_VLE	(1U << 30)	/* VLAN enable */
    357        1.1   thorpej #define	WTX_CMD_IDE	(1U << 31)	/* interrupt delay enable */
    358        1.1   thorpej 
    359        1.1   thorpej /* Descriptor types (if DEXT is set) */
    360        1.9   tsutsui #define	WTX_DTYP_C	(0U << 20)	/* context */
    361       1.10   thorpej #define	WTX_DTYP_D	(1U << 20)	/* data */
    362        1.1   thorpej 
    363        1.1   thorpej /* wtx_fields status bits */
    364        1.1   thorpej #define	WTX_ST_DD	(1U << 0)	/* descriptor done */
    365        1.1   thorpej #define	WTX_ST_EC	(1U << 1)	/* excessive collisions */
    366        1.1   thorpej #define	WTX_ST_LC	(1U << 2)	/* late collision */
    367        1.1   thorpej #define	WTX_ST_TU	(1U << 3)	/* transmit underrun */
    368        1.1   thorpej 
    369        1.9   tsutsui /* wtx_fields option bits for IP/TCP/UDP checksum offload */
    370        1.9   tsutsui #define	WTX_IXSM	(1U << 0)	/* IP checksum offload */
    371        1.9   tsutsui #define	WTX_TXSM	(1U << 1)	/* TCP/UDP checksum offload */
    372        1.1   thorpej 
    373       1.13   thorpej /* Maximum payload per Tx descriptor */
    374       1.13   thorpej #define	WTX_MAX_LEN	4096
    375       1.13   thorpej 
    376        1.1   thorpej /*
    377        1.1   thorpej  * The Livengood TCP/IP context descriptor.
    378        1.1   thorpej  */
    379        1.1   thorpej struct livengood_tcpip_ctxdesc {
    380        1.1   thorpej 	uint32_t	tcpip_ipcs;	/* IP checksum context */
    381        1.1   thorpej 	uint32_t	tcpip_tucs;	/* TCP/UDP checksum context */
    382        1.1   thorpej 	uint32_t	tcpip_cmdlen;
    383        1.1   thorpej 	uint32_t	tcpip_seg;	/* TCP segmentation context */
    384        1.1   thorpej };
    385        1.1   thorpej 
    386        1.1   thorpej /* commands for context descriptors */
    387        1.2   thorpej #define	WTX_TCPIP_CMD_TCP	(1U << 24)	/* 1 = TCP, 0 = UDP */
    388        1.2   thorpej #define	WTX_TCPIP_CMD_IP	(1U << 25)	/* 1 = IPv4, 0 = IPv6 */
    389        1.1   thorpej #define	WTX_TCPIP_CMD_TSE	(1U << 26)	/* segmentation context valid */
    390        1.1   thorpej 
    391        1.1   thorpej #define	WTX_TCPIP_IPCSS(x)	((x) << 0)	/* checksum start */
    392        1.1   thorpej #define	WTX_TCPIP_IPCSO(x)	((x) << 8)	/* checksum value offset */
    393        1.1   thorpej #define	WTX_TCPIP_IPCSE(x)	((x) << 16)	/* checksum end */
    394        1.1   thorpej 
    395        1.1   thorpej #define	WTX_TCPIP_TUCSS(x)	((x) << 0)	/* checksum start */
    396        1.1   thorpej #define	WTX_TCPIP_TUCSO(x)	((x) << 8)	/* checksum value offset */
    397        1.1   thorpej #define	WTX_TCPIP_TUCSE(x)	((x) << 16)	/* checksum end */
    398        1.1   thorpej 
    399        1.1   thorpej #define	WTX_TCPIP_SEG_STATUS(x)	((x) << 0)
    400        1.1   thorpej #define	WTX_TCPIP_SEG_HDRLEN(x)	((x) << 8)
    401        1.1   thorpej #define	WTX_TCPIP_SEG_MSS(x)	((x) << 16)
    402        1.1   thorpej 
    403        1.1   thorpej /*
    404        1.1   thorpej  * PCI config registers used by the Wiseman.
    405        1.1   thorpej  */
    406        1.1   thorpej #define	WM_PCI_MMBA	PCI_MAPREG_START
    407       1.22    bouyer /* registers for FLASH access on ICH8 */
    408       1.22    bouyer #define WM_ICH8_FLASH	0x0014
    409        1.1   thorpej 
    410       1.92   msaitoh #define WM_PCI_LTR_CAP_LPT	0xa8
    411       1.92   msaitoh 
    412       1.89   msaitoh /* XXX Only for PCH_SPT? */
    413       1.89   msaitoh #define WM_PCI_DESCRING_STATUS	0xe4
    414       1.89   msaitoh #define DESCRING_STATUS_FLUSH_REQ	__BIT(8)
    415       1.89   msaitoh 
    416        1.1   thorpej /*
    417        1.1   thorpej  * Wiseman Control/Status Registers.
    418        1.1   thorpej  */
    419        1.1   thorpej #define	WMREG_CTRL	0x0000	/* Device Control Register */
    420        1.1   thorpej #define	CTRL_FD		(1U << 0)	/* full duplex */
    421        1.1   thorpej #define	CTRL_BEM	(1U << 1)	/* big-endian mode */
    422        1.1   thorpej #define	CTRL_PRIOR	(1U << 2)	/* 0 = receive, 1 = fair */
    423       1.56   msaitoh #define	CTRL_GIO_M_DIS	(1U << 2)	/* disabl PCI master access */
    424        1.1   thorpej #define	CTRL_LRST	(1U << 3)	/* link reset */
    425        1.1   thorpej #define	CTRL_ASDE	(1U << 5)	/* auto speed detect enable */
    426        1.1   thorpej #define	CTRL_SLU	(1U << 6)	/* set link up */
    427        1.1   thorpej #define	CTRL_ILOS	(1U << 7)	/* invert loss of signal */
    428        1.1   thorpej #define	CTRL_SPEED(x)	((x) << 8)	/* speed (Livengood) */
    429        1.1   thorpej #define	CTRL_SPEED_10	CTRL_SPEED(0)
    430        1.1   thorpej #define	CTRL_SPEED_100	CTRL_SPEED(1)
    431        1.1   thorpej #define	CTRL_SPEED_1000	CTRL_SPEED(2)
    432        1.1   thorpej #define	CTRL_SPEED_MASK	CTRL_SPEED(3)
    433        1.1   thorpej #define	CTRL_FRCSPD	(1U << 11)	/* force speed (Livengood) */
    434        1.1   thorpej #define	CTRL_FRCFDX	(1U << 12)	/* force full-duplex (Livengood) */
    435       1.20    bouyer #define CTRL_D_UD_EN	(1U << 13)	/* Dock/Undock enable */
    436       1.20    bouyer #define CTRL_D_UD_POL	(1U << 14)	/* Defined polarity of Dock/Undock indication in SDP[0] */
    437       1.20    bouyer #define CTRL_F_PHY_R 	(1U << 15)	/* Reset both PHY ports, through PHYRST_N pin */
    438       1.20    bouyer #define CTRL_EXT_LINK_EN (1U << 16)	/* enable link status from external LINK_0 and LINK_1 pins */
    439       1.45   msaitoh #define CTRL_LANPHYPC_OVERRIDE (1U << 16) /* SW control of LANPHYPC */
    440       1.45   msaitoh #define CTRL_LANPHYPC_VALUE (1U << 17)	/* SW value of LANPHYPC */
    441        1.1   thorpej #define	CTRL_SWDPINS_SHIFT	18
    442        1.1   thorpej #define	CTRL_SWDPINS_MASK	0x0f
    443        1.1   thorpej #define	CTRL_SWDPIN(x)		(1U << (CTRL_SWDPINS_SHIFT + (x)))
    444        1.1   thorpej #define	CTRL_SWDPIO_SHIFT	22
    445        1.1   thorpej #define	CTRL_SWDPIO_MASK	0x0f
    446        1.1   thorpej #define	CTRL_SWDPIO(x)		(1U << (CTRL_SWDPIO_SHIFT + (x)))
    447       1.90   msaitoh #define CTRL_MEHE	(1U << 19)	/* Memory Error Handling Enable(I217)*/
    448        1.1   thorpej #define	CTRL_RST	(1U << 26)	/* device reset */
    449        1.1   thorpej #define	CTRL_RFCE	(1U << 27)	/* Rx flow control enable */
    450        1.1   thorpej #define	CTRL_TFCE	(1U << 28)	/* Tx flow control enable */
    451        1.1   thorpej #define	CTRL_VME	(1U << 30)	/* VLAN Mode Enable */
    452        1.1   thorpej #define	CTRL_PHY_RESET	(1U << 31)	/* PHY reset (Cordova) */
    453        1.1   thorpej 
    454        1.7   thorpej #define	WMREG_CTRL_SHADOW 0x0004	/* Device Control Register (shadow) */
    455        1.6   thorpej 
    456        1.1   thorpej #define	WMREG_STATUS	0x0008	/* Device Status Register */
    457        1.1   thorpej #define	STATUS_FD	(1U << 0)	/* full duplex */
    458        1.1   thorpej #define	STATUS_LU	(1U << 1)	/* link up */
    459        1.1   thorpej #define	STATUS_TCKOK	(1U << 2)	/* Tx clock running */
    460        1.1   thorpej #define	STATUS_RBCOK	(1U << 3)	/* Rx clock running */
    461        1.3   thorpej #define	STATUS_FUNCID_SHIFT 2		/* 82546 function ID */
    462        1.3   thorpej #define	STATUS_FUNCID_MASK  3		/* ... */
    463        1.1   thorpej #define	STATUS_TXOFF	(1U << 4)	/* Tx paused */
    464        1.1   thorpej #define	STATUS_TBIMODE	(1U << 5)	/* fiber mode (Livengood) */
    465       1.92   msaitoh #define	STATUS_SPEED	__BITS(7, 6)	/* speed indication */
    466       1.92   msaitoh #define	STATUS_SPEED_10	  0
    467       1.92   msaitoh #define	STATUS_SPEED_100  1
    468       1.92   msaitoh #define	STATUS_SPEED_1000 2
    469        1.1   thorpej #define	STATUS_ASDV(x)	((x) << 8)	/* auto speed det. val. (Livengood) */
    470       1.32   msaitoh #define	STATUS_LAN_INIT_DONE (1U << 9)	/* Lan Init Completion by NVM */
    471        1.1   thorpej #define	STATUS_MTXCKOK	(1U << 10)	/* MTXD clock running */
    472       1.33   msaitoh #define	STATUS_PHYRA	(1U << 10)	/* PHY Reset Asserted (PCH) */
    473        1.1   thorpej #define	STATUS_PCI66	(1U << 11)	/* 66MHz bus (Livengood) */
    474        1.1   thorpej #define	STATUS_BUS64	(1U << 12)	/* 64-bit bus (Livengood) */
    475       1.94   msaitoh #define	STATUS_2P5_SKU	__BIT(12)	/* Value of the 2.5GBE SKU strap */
    476        1.1   thorpej #define	STATUS_PCIX_MODE (1U << 13)	/* PCIX mode (Cordova) */
    477       1.94   msaitoh #define	STATUS_2P5_SKU_OVER __BIT(13)	/* Value of the 2.5GBE SKU override */
    478        1.1   thorpej #define	STATUS_PCIXSPD(x) ((x) << 14)	/* PCIX speed indication (Cordova) */
    479        1.1   thorpej #define	STATUS_PCIXSPD_50_66   STATUS_PCIXSPD(0)
    480        1.1   thorpej #define	STATUS_PCIXSPD_66_100  STATUS_PCIXSPD(1)
    481        1.1   thorpej #define	STATUS_PCIXSPD_100_133 STATUS_PCIXSPD(2)
    482        1.8   thorpej #define	STATUS_PCIXSPD_MASK    STATUS_PCIXSPD(3)
    483       1.41   msaitoh #define	STATUS_GIO_M_ENA (1U << 19)	/* GIO master enable */
    484       1.42   msaitoh #define	STATUS_DEV_RST_SET (1U << 20)	/* Device Reset Set */
    485        1.1   thorpej 
    486       1.89   msaitoh /* Strapping Option Register (PCH_SPT and newer) */
    487       1.89   msaitoh #define WMREG_STRAP	0x000c
    488       1.89   msaitoh #define STRAP_NVMSIZE	__BITS(1, 6)
    489       1.89   msaitoh #define STRAP_FREQ	__BITS(12, 13)
    490       1.89   msaitoh #define STRAP_SMBUSADDR	__BITS(17, 23)
    491       1.89   msaitoh 
    492        1.1   thorpej #define	WMREG_EECD	0x0010	/* EEPROM Control Register */
    493        1.1   thorpej #define	EECD_SK		(1U << 0)	/* clock */
    494        1.1   thorpej #define	EECD_CS		(1U << 1)	/* chip select */
    495        1.1   thorpej #define	EECD_DI		(1U << 2)	/* data in */
    496        1.1   thorpej #define	EECD_DO		(1U << 3)	/* data out */
    497        1.1   thorpej #define	EECD_FWE(x)	((x) << 4)	/* flash write enable control */
    498        1.1   thorpej #define	EECD_FWE_DISABLED EECD_FWE(1)
    499        1.1   thorpej #define	EECD_FWE_ENABLED  EECD_FWE(2)
    500        1.3   thorpej #define	EECD_EE_REQ	(1U << 6)	/* (shared) EEPROM request */
    501        1.3   thorpej #define	EECD_EE_GNT	(1U << 7)	/* (shared) EEPROM grant */
    502        1.3   thorpej #define	EECD_EE_PRES	(1U << 8)	/* EEPROM present */
    503        1.3   thorpej #define	EECD_EE_SIZE	(1U << 9)	/* EEPROM size
    504        1.3   thorpej 					   (0 = 64 word, 1 = 256 word) */
    505       1.20    bouyer #define	EECD_EE_AUTORD	(1U << 9)	/* auto read done */
    506        1.6   thorpej #define	EECD_EE_ABITS	(1U << 10)	/* EEPROM address bits
    507        1.6   thorpej 					   (based on type) */
    508       1.62   msaitoh #define	EECD_EE_SIZE_EX_MASK __BITS(14,11) /* EEPROM size for new devices */
    509        1.6   thorpej #define	EECD_EE_TYPE	(1U << 13)	/* EEPROM type
    510        1.6   thorpej 					   (0 = Microwire, 1 = SPI) */
    511       1.22    bouyer #define EECD_SEC1VAL	(1U << 22)	/* Sector One Valid */
    512       1.50   msaitoh #define EECD_SEC1VAL_VALMASK (EECD_EE_AUTORD | EECD_EE_PRES) /* Valid Mask */
    513        1.1   thorpej 
    514  1.105.2.1  pgoyette #define	WMREG_FEXTNVM6	0x0010	/* Future Extended NVM 6 */
    515  1.105.2.1  pgoyette #define	FEXTNVM6_K1_OFF_ENABLE	__BIT(31)
    516  1.105.2.1  pgoyette 
    517       1.17   msaitoh #define	WMREG_EERD	0x0014	/* EEPROM read */
    518       1.17   msaitoh #define	EERD_DONE	0x02    /* done bit */
    519       1.17   msaitoh #define	EERD_START	0x01	/* First bit for telling part to start operation */
    520       1.17   msaitoh #define	EERD_ADDR_SHIFT	2	/* Shift to the address bits */
    521       1.17   msaitoh #define	EERD_DATA_SHIFT	16	/* Offset to data in EEPROM read/write registers */
    522       1.17   msaitoh 
    523        1.1   thorpej #define	WMREG_CTRL_EXT	0x0018	/* Extended Device Control Register */
    524       1.78   msaitoh #define	CTRL_EXT_NSICR		__BIT(0) /* Non Interrupt clear on read */
    525        1.1   thorpej #define	CTRL_EXT_GPI_EN(x)	(1U << (x)) /* gpin interrupt enable */
    526       1.89   msaitoh #define CTRL_EXT_NVMVS		__BITS(0, 1) /* NVM valid sector */
    527       1.93   msaitoh #define CTRL_EXT_LPCD		__BIT(2) /* LCD Power Cycle Done */
    528        1.1   thorpej #define	CTRL_EXT_SWDPINS_SHIFT	4
    529        1.1   thorpej #define	CTRL_EXT_SWDPINS_MASK	0x0d
    530       1.42   msaitoh /* The bit order of the SW Definable pin is not 6543 but 3654! */
    531       1.42   msaitoh #define	CTRL_EXT_SWDPIN(x)	(1U << (CTRL_EXT_SWDPINS_SHIFT \
    532       1.42   msaitoh 		+ ((x) == 3 ? 3 : ((x) - 4))))
    533        1.1   thorpej #define	CTRL_EXT_SWDPIO_SHIFT	8
    534        1.1   thorpej #define	CTRL_EXT_SWDPIO_MASK	0x0d
    535       1.42   msaitoh #define	CTRL_EXT_SWDPIO(x)	(1U << (CTRL_EXT_SWDPIO_SHIFT \
    536       1.42   msaitoh 		+ ((x) == 3 ? 3 : ((x) - 4))))
    537       1.89   msaitoh #define	CTRL_EXT_FORCE_SMBUS	__BIT(11)  /* Force SMBus mode */
    538        1.1   thorpej #define	CTRL_EXT_ASDCHK		(1U << 12) /* ASD check */
    539        1.1   thorpej #define	CTRL_EXT_EE_RST		(1U << 13) /* EEPROM reset */
    540        1.1   thorpej #define	CTRL_EXT_IPS		(1U << 14) /* invert power state bit 0 */
    541        1.1   thorpej #define	CTRL_EXT_SPD_BYPS	(1U << 15) /* speed select bypass */
    542        1.1   thorpej #define	CTRL_EXT_IPS1		(1U << 16) /* invert power state bit 1 */
    543        1.1   thorpej #define	CTRL_EXT_RO_DIS		(1U << 17) /* relaxed ordering disabled */
    544       1.77   msaitoh #define	CTRL_EXT_SDLPE		(1U << 18) /* SerDes Low Power Enable */
    545       1.70   msaitoh #define	CTRL_EXT_DMA_DYN_CLK	(1U << 19) /* DMA Dynamic Gating Enable */
    546       1.87   msaitoh #define	CTRL_EXT_PHYPDEN	__BIT(20)
    547  1.105.2.1  pgoyette #define	CTRL_EXT_LINK_MODE_MASK		0x00c00000
    548       1.38   msaitoh #define	CTRL_EXT_LINK_MODE_GMII		0x00000000
    549       1.38   msaitoh #define	CTRL_EXT_LINK_MODE_KMRN		0x00000000
    550       1.38   msaitoh #define	CTRL_EXT_LINK_MODE_1000KX	0x00400000
    551       1.38   msaitoh #define	CTRL_EXT_LINK_MODE_SGMII	0x00800000
    552       1.38   msaitoh #define	CTRL_EXT_LINK_MODE_PCIX_SERDES	0x00800000
    553  1.105.2.1  pgoyette #define	CTRL_EXT_LINK_MODE_TBI		0x00c00000
    554  1.105.2.1  pgoyette #define	CTRL_EXT_LINK_MODE_PCIE_SERDES	0x00c00000
    555       1.78   msaitoh #define	CTRL_EXT_EIAME		__BIT(24) /* Extended Interrupt Auto Mask En */
    556       1.38   msaitoh #define CTRL_EXT_I2C_ENA	0x02000000  /* I2C enable */
    557       1.26   msaitoh #define	CTRL_EXT_DRV_LOAD	0x10000000
    558       1.78   msaitoh #define	CTRL_EXT_PBA		__BIT(31) /* PBA Support */
    559       1.20    bouyer 
    560        1.1   thorpej #define	WMREG_MDIC	0x0020	/* MDI Control Register */
    561        1.1   thorpej #define	MDIC_DATA(x)	((x) & 0xffff)
    562        1.1   thorpej #define	MDIC_REGADD(x)	((x) << 16)
    563       1.55   msaitoh #define	MDIC_PHY_SHIFT	21
    564       1.55   msaitoh #define	MDIC_PHY_MASK	__BITS(25, 21)
    565        1.1   thorpej #define	MDIC_PHYADD(x)	((x) << 21)
    566        1.1   thorpej #define	MDIC_OP_WRITE	(1U << 26)
    567        1.1   thorpej #define	MDIC_OP_READ	(2U << 26)
    568        1.1   thorpej #define	MDIC_READY	(1U << 28)
    569        1.1   thorpej #define	MDIC_I		(1U << 29)	/* interrupt on MDI complete */
    570        1.1   thorpej #define	MDIC_E		(1U << 30)	/* MDI error */
    571       1.55   msaitoh #define	MDIC_DEST	(1U << 31)	/* Destination */
    572        1.1   thorpej 
    573       1.38   msaitoh #define WMREG_SCTL	0x0024	/* SerDes Control - RW */
    574       1.38   msaitoh /*
    575       1.38   msaitoh  * These 4 macros are also used for other 8bit control registers on the
    576       1.38   msaitoh  * 82575
    577       1.38   msaitoh  */
    578       1.38   msaitoh #define SCTL_CTL_READY  (1U << 31)
    579       1.38   msaitoh #define SCTL_CTL_DATA_MASK 0x000000ff
    580       1.38   msaitoh #define SCTL_CTL_ADDR_SHIFT 8
    581       1.38   msaitoh #define SCTL_CTL_POLL_TIMEOUT 640
    582       1.60   msaitoh #define SCTL_DISABLE_SERDES_LOOPBACK 0x0400
    583       1.38   msaitoh 
    584       1.92   msaitoh #define WMREG_FEXTNVM4	0x0024	/* Future Extended NVM 4 - RW */
    585       1.92   msaitoh #define FEXTNVM4_BEACON_DURATION	__BITS(2, 0)
    586       1.92   msaitoh #define FEXTNVM4_BEACON_DURATION_8US	0x7
    587       1.92   msaitoh #define FEXTNVM4_BEACON_DURATION_16US	0x3
    588       1.92   msaitoh 
    589        1.1   thorpej #define	WMREG_FCAL	0x0028	/* Flow Control Address Low */
    590        1.1   thorpej #define	FCAL_CONST	0x00c28001	/* Flow Control MAC addr low */
    591        1.1   thorpej 
    592      1.102   msaitoh #define	WMREG_FEXTNVM	0x0028	/* Future Extended NVM register */
    593  1.105.2.1  pgoyette #define	FEXTNVM_SW_CONFIG	__BIT(0)  /* SW PHY Config En (ICH8 B0) */
    594  1.105.2.1  pgoyette #define	FEXTNVM_SW_CONFIG_ICH8M	__BIT(27) /* SW PHY Config En (>= ICH8 B1) */
    595      1.102   msaitoh 
    596        1.1   thorpej #define	WMREG_FCAH	0x002c	/* Flow Control Address High */
    597        1.1   thorpej #define	FCAH_CONST	0x00000100	/* Flow Control MAC addr high */
    598        1.1   thorpej 
    599        1.1   thorpej #define	WMREG_FCT	0x0030	/* Flow Control Type */
    600        1.1   thorpej 
    601       1.58   msaitoh #define	WMREG_KUMCTRLSTA 0x0034	/* MAC-PHY interface - RW */
    602  1.105.2.1  pgoyette #define	KUMCTRLSTA_MASK			0x0000ffff
    603  1.105.2.1  pgoyette #define	KUMCTRLSTA_OFFSET		0x001f0000
    604       1.58   msaitoh #define	KUMCTRLSTA_OFFSET_SHIFT		16
    605       1.58   msaitoh #define	KUMCTRLSTA_REN			0x00200000
    606       1.58   msaitoh 
    607       1.58   msaitoh #define	KUMCTRLSTA_OFFSET_FIFO_CTRL	0x00000000
    608       1.58   msaitoh #define	KUMCTRLSTA_OFFSET_CTRL		0x00000001
    609       1.58   msaitoh #define	KUMCTRLSTA_OFFSET_INB_CTRL	0x00000002
    610       1.58   msaitoh #define	KUMCTRLSTA_OFFSET_DIAG		0x00000003
    611       1.58   msaitoh #define	KUMCTRLSTA_OFFSET_TIMEOUTS	0x00000004
    612       1.58   msaitoh #define	KUMCTRLSTA_OFFSET_K1_CONFIG	0x00000007
    613       1.58   msaitoh #define	KUMCTRLSTA_OFFSET_INB_PARAM	0x00000009
    614       1.58   msaitoh #define	KUMCTRLSTA_OFFSET_HD_CTRL	0x00000010
    615  1.105.2.1  pgoyette #define	KUMCTRLSTA_OFFSET_M2P_SERDES	0x0000001e
    616  1.105.2.1  pgoyette #define	KUMCTRLSTA_OFFSET_M2P_MODES	0x0000001f
    617       1.58   msaitoh 
    618       1.58   msaitoh /* FIFO Control */
    619      1.103   msaitoh #define	KUMCTRLSTA_FIFO_CTRL_RX_BYPASS	0x0008
    620      1.103   msaitoh #define	KUMCTRLSTA_FIFO_CTRL_TX_BYPASS	0x0800
    621       1.58   msaitoh 
    622       1.58   msaitoh /* In-Band Control */
    623      1.103   msaitoh #define	KUMCTRLSTA_INB_CTRL_LINK_TMOUT_DFLT 0x0500
    624      1.103   msaitoh #define	KUMCTRLSTA_INB_CTRL_DIS_PADDING	0x0010
    625       1.58   msaitoh 
    626       1.58   msaitoh /* Diag */
    627       1.58   msaitoh #define	KUMCTRLSTA_DIAG_NELPBK	0x1000
    628       1.58   msaitoh 
    629       1.58   msaitoh /* K1 Config */
    630       1.58   msaitoh #define	KUMCTRLSTA_K1_ENABLE	0x0002
    631       1.58   msaitoh 
    632       1.58   msaitoh /* Half-Duplex Control */
    633      1.103   msaitoh #define	KUMCTRLSTA_HD_CTRL_10_100_DEFAULT 0x0004
    634      1.103   msaitoh #define	KUMCTRLSTA_HD_CTRL_1000_DEFAULT	0x0000
    635      1.103   msaitoh 
    636      1.103   msaitoh /* M2P Modes */
    637      1.103   msaitoh #define	KUMCTRLSTA_OPMODE_MASK	0x000c
    638      1.103   msaitoh #define	KUMCTRLSTA_OPMODE_INBAND_MDIO 0x0004
    639       1.58   msaitoh 
    640        1.1   thorpej #define	WMREG_VET	0x0038	/* VLAN Ethertype */
    641  1.105.2.1  pgoyette #define	WMREG_MDPHYA	0x003c	/* PHY address - RW */
    642       1.93   msaitoh 
    643       1.93   msaitoh #define WMREG_FEXTNVM3	0x003c	/* Future Extended NVM 3 */
    644       1.93   msaitoh #define FEXTNVM3_PHY_CFG_COUNTER_MASK	__BITS(27, 26)
    645       1.93   msaitoh #define FEXTNVM3_PHY_CFG_COUNTER_50MS	__BIT(27)
    646       1.93   msaitoh 
    647       1.99   msaitoh #define	WMREG_RAL(x)		(0x0040	+ ((x) * 8)) /* Receive Address List */
    648       1.99   msaitoh #define	WMREG_RAH(x)		(WMREG_RAL(x) + 4)
    649       1.99   msaitoh #define	WMREG_CORDOVA_RAL(x)	(((x) <= 15) ? (0x5400 + ((x) * 8)) : \
    650       1.99   msaitoh 	    (0x54e0 + (((x) - 16) * 8)))
    651       1.99   msaitoh #define	WMREG_CORDOVA_RAH(x)	(WMREG_CORDOVA_RAL(x) + 4)
    652       1.99   msaitoh #define	WMREG_SHRAL(x)		(0x5438 + ((x) * 8))
    653       1.99   msaitoh #define	WMREG_SHRAH(x)		(WMREG_PCH_LPT_SHRAL(x) + 4)
    654       1.99   msaitoh #define	WMREG_PCH_LPT_SHRAL(x)	(0x5408 + ((x) * 8))
    655       1.99   msaitoh #define	WMREG_PCH_LPT_SHRAH(x)	(WMREG_PCH_LPT_SHRAL(x) + 4)
    656        1.1   thorpej #define	WMREG_RAL_LO(b, x) ((b) + ((x) << 3))
    657        1.1   thorpej #define	WMREG_RAL_HI(b, x) (WMREG_RAL_LO(b, x) + 4)
    658        1.1   thorpej 	/*
    659        1.1   thorpej 	 * Receive Address List: The LO part is the low-order 32-bits
    660        1.1   thorpej 	 * of the MAC address.  The HI part is the high-order 16-bits
    661        1.1   thorpej 	 * along with a few control bits.
    662        1.1   thorpej 	 */
    663        1.1   thorpej #define	RAL_AS(x)	((x) << 16)	/* address select */
    664        1.1   thorpej #define	RAL_AS_DEST	RAL_AS(0)	/* (cordova?) */
    665        1.1   thorpej #define	RAL_AS_SOURCE	RAL_AS(1)	/* (cordova?) */
    666        1.1   thorpej #define	RAL_RDR1	(1U << 30)	/* put packet in alt. rx ring */
    667        1.1   thorpej #define	RAL_AV		(1U << 31)	/* entry is valid */
    668        1.1   thorpej 
    669       1.49   msaitoh #define	WM_RAL_TABSIZE		15	/* RAL size for old devices */
    670       1.49   msaitoh #define	WM_RAL_TABSIZE_ICH8	7	/* RAL size for ICH* and PCH* */
    671       1.88   msaitoh #define	WM_RAL_TABSIZE_PCH2	5	/* RAL size for PCH2 */
    672       1.88   msaitoh #define	WM_RAL_TABSIZE_PCH_LPT	12	/* RAL size for PCH_LPT */
    673       1.49   msaitoh #define	WM_RAL_TABSIZE_82575	16	/* RAL size for 82575 */
    674       1.49   msaitoh #define	WM_RAL_TABSIZE_82576	24	/* RAL size for 82576 and 82580 */
    675       1.49   msaitoh #define	WM_RAL_TABSIZE_I350	32	/* RAL size for I350 */
    676        1.1   thorpej 
    677        1.1   thorpej #define	WMREG_ICR	0x00c0	/* Interrupt Cause Register */
    678        1.1   thorpej #define	ICR_TXDW	(1U << 0)	/* Tx desc written back */
    679        1.1   thorpej #define	ICR_TXQE	(1U << 1)	/* Tx queue empty */
    680        1.1   thorpej #define	ICR_LSC		(1U << 2)	/* link status change */
    681        1.1   thorpej #define	ICR_RXSEQ	(1U << 3)	/* receive sequence error */
    682        1.1   thorpej #define	ICR_RXDMT0	(1U << 4)	/* Rx ring 0 nearly empty */
    683        1.1   thorpej #define	ICR_RXO		(1U << 6)	/* Rx overrun */
    684        1.1   thorpej #define	ICR_RXT0	(1U << 7)	/* Rx ring 0 timer */
    685        1.1   thorpej #define	ICR_MDAC	(1U << 9)	/* MDIO access complete */
    686        1.1   thorpej #define	ICR_RXCFG	(1U << 10)	/* Receiving /C/ */
    687        1.1   thorpej #define	ICR_GPI(x)	(1U << (x))	/* general purpose interrupts */
    688       1.83  knakahar #define	ICR_RXQ(x)	__BIT(20+(x))	/* 82574: Rx queue x interrupt x=0,1 */
    689       1.83  knakahar #define	ICR_TXQ(x)	__BIT(22+(x))	/* 82574: Tx queue x interrupt x=0,1 */
    690       1.78   msaitoh #define	ICR_OTHER	__BIT(24)	/* 82574: Other interrupt */
    691       1.20    bouyer #define	ICR_INT		(1U << 31)	/* device generated an interrupt */
    692        1.1   thorpej 
    693       1.14    briggs #define WMREG_ITR	0x00c4	/* Interrupt Throttling Register */
    694       1.14    briggs #define ITR_IVAL_MASK	0xffff		/* Interval mask */
    695       1.14    briggs #define ITR_IVAL_SHIFT	0		/* Interval shift */
    696       1.14    briggs 
    697        1.1   thorpej #define	WMREG_ICS	0x00c8	/* Interrupt Cause Set Register */
    698        1.1   thorpej 	/* See ICR bits. */
    699        1.1   thorpej 
    700       1.91   msaitoh #define	WMREG_IMS	0x00d0	/* Interrupt Mask Set Register */
    701       1.91   msaitoh 	/* See ICR bits. */
    702       1.91   msaitoh 
    703       1.91   msaitoh #define	WMREG_IMC	0x00d8	/* Interrupt Mask Clear Register */
    704       1.91   msaitoh 	/* See ICR bits. */
    705       1.91   msaitoh 
    706       1.91   msaitoh #define	WMREG_EIAC_82574 0x00dc	/* Interrupt Auto Clear Register */
    707       1.91   msaitoh #define	WMREG_EIAC_82574_MSIX_MASK	(ICR_RXQ(0) | ICR_RXQ(1)	\
    708       1.91   msaitoh 	    | ICR_TXQ(0) | ICR_TXQ(1) | ICR_OTHER)
    709       1.91   msaitoh 
    710       1.93   msaitoh #define WMREG_FEXTNVM7	0x00e4  /* Future Extended NVM 7 */
    711       1.93   msaitoh #define FEXTNVM7_SIDE_CLK_UNGATE __BIT(2)
    712       1.93   msaitoh #define FEXTNVM7_DIS_SMB_PERST	__BIT(5)
    713       1.93   msaitoh #define FEXTNVM7_DIS_PB_READ	__BIT(18)
    714       1.93   msaitoh 
    715       1.78   msaitoh #define WMREG_IVAR	0x00e4  /* Interrupt Vector Allocation Register */
    716       1.78   msaitoh #define WMREG_IVAR0	0x01700 /* Interrupt Vector Allocation */
    717       1.78   msaitoh #define IVAR_ALLOC_MASK  __BITS(0, 6)	/* Bit 5 and 6 are reserved */
    718       1.78   msaitoh #define IVAR_VALID       __BIT(7)
    719       1.78   msaitoh /* IVAR definitions for 82580 and newer */
    720       1.81  knakahar #define WMREG_IVAR_Q(x)	(WMREG_IVAR0 + ((x) / 2) * 4)
    721       1.78   msaitoh #define IVAR_TX_MASK_Q(x) (0x000000ff << (((x) % 2) == 0 ? 8 : 24))
    722       1.78   msaitoh #define IVAR_RX_MASK_Q(x) (0x000000ff << (((x) % 2) == 0 ? 0 : 16))
    723       1.78   msaitoh /* IVAR definitions for 82576 */
    724       1.78   msaitoh #define WMREG_IVAR_Q_82576(x)	(WMREG_IVAR0 + ((x) & 0x7) * 4)
    725       1.78   msaitoh #define IVAR_TX_MASK_Q_82576(x) (0x000000ff << (((x) / 8) == 0 ? 8 : 24))
    726       1.78   msaitoh #define IVAR_RX_MASK_Q_82576(x) (0x000000ff << (((x) / 8) == 0 ? 0 : 16))
    727       1.78   msaitoh /* IVAR definitions for 82574 */
    728       1.78   msaitoh #define IVAR_ALLOC_MASK_82574	__BITS(0, 2)
    729       1.78   msaitoh #define IVAR_VALID_82574	__BIT(3)
    730       1.78   msaitoh #define IVAR_TX_MASK_Q_82574(x) (0x0000000f << ((x) == 0 ? 8 : 12))
    731       1.78   msaitoh #define IVAR_RX_MASK_Q_82574(x) (0x0000000f << ((x) == 0 ? 0 : 4))
    732       1.78   msaitoh #define IVAR_OTHER_MASK		__BITS(16, 19)
    733       1.78   msaitoh #define IVAR_INT_ON_ALL_WB	__BIT(31)
    734       1.78   msaitoh 
    735       1.78   msaitoh #define WMREG_IVAR_MISC	0x01740 /* IVAR for other causes */
    736       1.78   msaitoh #define IVAR_MISC_TCPTIMER __BITS(0, 7)
    737       1.78   msaitoh #define IVAR_MISC_OTHER	__BITS(8, 15)
    738       1.78   msaitoh 
    739      1.100   msaitoh #define	WMREG_SVCR	0x00f0
    740      1.100   msaitoh #define	SVCR_OFF_EN		__BIT(0)
    741      1.100   msaitoh #define	SVCR_OFF_MASKINT	__BIT(12)
    742      1.100   msaitoh 
    743      1.100   msaitoh #define	WMREG_SVT	0x00f4
    744      1.100   msaitoh #define	SVT_OFF_HWM		__BITS(4, 0)
    745      1.100   msaitoh 
    746       1.92   msaitoh #define	WMREG_LTRV	0x00f8	/* Latency Tolerance Reporting */
    747       1.92   msaitoh #define	LTRV_VALUE	__BITS(9, 0)
    748       1.92   msaitoh #define	LTRV_SCALE	__BITS(12, 10)
    749       1.92   msaitoh #define	LTRV_SCALE_MAX	5
    750       1.92   msaitoh #define	LTRV_SNOOP_REQ	__BIT(15)
    751       1.92   msaitoh #define	LTRV_SEND	__BIT(30)
    752       1.92   msaitoh #define	LTRV_NONSNOOP	__BITS(31, 16)
    753       1.92   msaitoh #define	LTRV_NONSNOOP_REQ __BIT(31)
    754       1.92   msaitoh 
    755        1.1   thorpej #define	WMREG_RCTL	0x0100	/* Receive Control */
    756        1.1   thorpej #define	RCTL_EN		(1U << 1)	/* receiver enable */
    757        1.1   thorpej #define	RCTL_SBP	(1U << 2)	/* store bad packets */
    758        1.1   thorpej #define	RCTL_UPE	(1U << 3)	/* unicast promisc. enable */
    759        1.1   thorpej #define	RCTL_MPE	(1U << 4)	/* multicast promisc. enable */
    760        1.1   thorpej #define	RCTL_LPE	(1U << 5)	/* large packet enable */
    761        1.1   thorpej #define	RCTL_LBM(x)	((x) << 6)	/* loopback mode */
    762        1.1   thorpej #define	RCTL_LBM_NONE	RCTL_LBM(0)
    763        1.1   thorpej #define	RCTL_LBM_PHY	RCTL_LBM(3)
    764        1.1   thorpej #define	RCTL_RDMTS(x)	((x) << 8)	/* receive desc. min thresh size */
    765        1.1   thorpej #define	RCTL_RDMTS_1_2	RCTL_RDMTS(0)
    766        1.1   thorpej #define	RCTL_RDMTS_1_4	RCTL_RDMTS(1)
    767        1.1   thorpej #define	RCTL_RDMTS_1_8	RCTL_RDMTS(2)
    768        1.1   thorpej #define	RCTL_RDMTS_MASK	RCTL_RDMTS(3)
    769       1.95  knakahar #define RCTL_DTYP_MASK	__BITS(11,10)	/* descriptor type. 82574 only */
    770       1.95  knakahar #define RCTL_DTYP(x)	__SHIFTIN(x,RCTL_DTYP_MASK)
    771       1.95  knakahar #define RCTL_DTYP_ONEBUF RCTL_DTYP(0)	/* use one buffer(not split header). */
    772       1.95  knakahar #define RCTL_DTYP_SPH	RCTL_DTYP(1)	/* split header buffer. */
    773       1.95  knakahar 					/* RCTL_DTYP(2) and RCTL_DTYP(3) are reserved. */
    774        1.1   thorpej #define	RCTL_MO(x)	((x) << 12)	/* multicast offset */
    775        1.1   thorpej #define	RCTL_BAM	(1U << 15)	/* broadcast accept mode */
    776       1.89   msaitoh #define	RCTL_RDMTS_HEX	__BIT(16)
    777        1.1   thorpej #define	RCTL_2k		(0 << 16)	/* 2k Rx buffers */
    778        1.1   thorpej #define	RCTL_1k		(1 << 16)	/* 1k Rx buffers */
    779        1.1   thorpej #define	RCTL_512	(2 << 16)	/* 512 byte Rx buffers */
    780        1.1   thorpej #define	RCTL_256	(3 << 16)	/* 256 byte Rx buffers */
    781        1.1   thorpej #define	RCTL_BSEX_16k	(1 << 16)	/* 16k Rx buffers (BSEX) */
    782        1.1   thorpej #define	RCTL_BSEX_8k	(2 << 16)	/* 8k Rx buffers (BSEX) */
    783        1.1   thorpej #define	RCTL_BSEX_4k	(3 << 16)	/* 4k Rx buffers (BSEX) */
    784        1.1   thorpej #define	RCTL_DPF	(1U << 22)	/* discard pause frames */
    785        1.1   thorpej #define	RCTL_PMCF	(1U << 23)	/* pass MAC control frames */
    786        1.1   thorpej #define	RCTL_BSEX	(1U << 25)	/* buffer size extension (Livengood) */
    787        1.1   thorpej #define	RCTL_SECRC	(1U << 26)	/* strip Ethernet CRC */
    788        1.1   thorpej 
    789        1.1   thorpej #define	WMREG_OLD_RDTR0	0x0108	/* Receive Delay Timer (ring 0) */
    790        1.1   thorpej #define	WMREG_RDTR	0x2820
    791        1.1   thorpej #define	RDTR_FPD	(1U << 31)	/* flush partial descriptor */
    792        1.1   thorpej 
    793       1.58   msaitoh #define WMREG_LTRC	0x01a0	/* Latency Tolerance Reportiong Control */
    794       1.14    briggs 
    795        1.1   thorpej #define	WMREG_OLD_RDBAL0 0x0110	/* Receive Descriptor Base Low (ring 0) */
    796       1.83  knakahar #define	WMREG_RDBAL(x) \
    797       1.83  knakahar 	((x) < 4 ? (0x02800 + ((x) * 0x100)) :	\
    798  1.105.2.1  pgoyette 	    (0x0c000 + ((x) * 0x40)))
    799        1.1   thorpej 
    800        1.1   thorpej #define	WMREG_OLD_RDBAH0 0x0114	/* Receive Descriptor Base High (ring 0) */
    801       1.83  knakahar #define	WMREG_RDBAH(x) \
    802       1.83  knakahar 	((x) < 4 ? (0x02804 + ((x) * 0x100)) :	\
    803       1.83  knakahar 	    (0x0c004 + ((x) * 0x40)))
    804        1.1   thorpej 
    805        1.1   thorpej #define	WMREG_OLD_RDLEN0 0x0118	/* Receive Descriptor Length (ring 0) */
    806       1.83  knakahar #define	WMREG_RDLEN(x) \
    807       1.83  knakahar 	((x) < 4 ? (0x02808 + ((x) * 0x100)) :  \
    808       1.83  knakahar 	    (0x0c008 + ((x) * 0x40)))
    809       1.83  knakahar 
    810       1.83  knakahar #define	WMREG_SRRCTL(x) \
    811       1.83  knakahar 	((x) < 4 ? (0x0280c + ((x) * 0x100)) :	\
    812       1.83  knakahar 	    (0x0c00c + ((x) * 0x40)))	/* additional recv control used in 82575 ... */
    813       1.58   msaitoh #define SRRCTL_BSIZEPKT_MASK		0x0000007f
    814       1.38   msaitoh #define SRRCTL_BSIZEPKT_SHIFT		10	/* Shift _right_ */
    815       1.58   msaitoh #define SRRCTL_BSIZEHDRSIZE_MASK	0x00000f00
    816       1.38   msaitoh #define SRRCTL_BSIZEHDRSIZE_SHIFT	2	/* Shift _left_ */
    817       1.58   msaitoh #define SRRCTL_DESCTYPE_LEGACY		0x00000000
    818       1.58   msaitoh #define SRRCTL_DESCTYPE_ADV_ONEBUF	(1U << 25)
    819       1.58   msaitoh #define SRRCTL_DESCTYPE_HDR_SPLIT	(2U << 25)
    820       1.58   msaitoh #define SRRCTL_DESCTYPE_HDR_REPLICATION	(3U << 25)
    821       1.58   msaitoh #define SRRCTL_DESCTYPE_HDR_REPLICATION_LARGE_PKT (4U << 25)
    822       1.58   msaitoh #define SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS (5U << 25) /* 82575 only */
    823       1.58   msaitoh #define SRRCTL_DESCTYPE_MASK		(7U << 25)
    824       1.58   msaitoh #define SRRCTL_DROP_EN			0x80000000
    825        1.1   thorpej 
    826        1.1   thorpej #define	WMREG_OLD_RDH0	0x0120	/* Receive Descriptor Head (ring 0) */
    827       1.83  knakahar #define	WMREG_RDH(x) \
    828       1.83  knakahar 	((x) < 4 ? (0x02810 + ((x) * 0x100)) :  \
    829  1.105.2.1  pgoyette 	    (0x0c010 + ((x) * 0x40)))
    830        1.1   thorpej 
    831        1.1   thorpej #define	WMREG_OLD_RDT0	0x0128	/* Receive Descriptor Tail (ring 0) */
    832       1.83  knakahar #define	WMREG_RDT(x) \
    833       1.83  knakahar 	((x) < 4 ? (0x02818 + ((x) * 0x100)) :	\
    834  1.105.2.1  pgoyette 	    (0x0c018 + ((x) * 0x40)))
    835       1.83  knakahar 
    836       1.83  knakahar #define	WMREG_RXDCTL(x) \
    837       1.83  knakahar 	((x) < 4 ? (0x02828 + ((x) * 0x100)) :	\
    838       1.83  knakahar 	    (0x0c028 + ((x) * 0x40)))	/* Receive Descriptor Control */
    839        1.1   thorpej #define	RXDCTL_PTHRESH(x) ((x) << 0)	/* prefetch threshold */
    840        1.1   thorpej #define	RXDCTL_HTHRESH(x) ((x) << 8)	/* host threshold */
    841        1.1   thorpej #define	RXDCTL_WTHRESH(x) ((x) << 16)	/* write back threshold */
    842        1.1   thorpej #define	RXDCTL_GRAN	(1U << 24)	/* 0 = cacheline, 1 = descriptor */
    843       1.38   msaitoh /* flags used starting with 82575 ... */
    844       1.38   msaitoh #define RXDCTL_QUEUE_ENABLE  0x02000000 /* Enable specific Tx Queue */
    845       1.38   msaitoh #define RXDCTL_SWFLSH        0x04000000 /* Rx Desc. write-back flushing */
    846        1.1   thorpej 
    847        1.1   thorpej #define	WMREG_OLD_RDTR1	0x0130	/* Receive Delay Timer (ring 1) */
    848        1.1   thorpej #define	WMREG_OLD_RDBA1_LO 0x0138 /* Receive Descriptor Base Low (ring 1) */
    849        1.1   thorpej #define	WMREG_OLD_RDBA1_HI 0x013c /* Receive Descriptor Base High (ring 1) */
    850        1.1   thorpej #define	WMREG_OLD_RDLEN1 0x0140	/* Receive Drscriptor Length (ring 1) */
    851        1.1   thorpej #define	WMREG_OLD_RDH1	0x0148
    852        1.1   thorpej #define	WMREG_OLD_RDT1	0x0150
    853        1.1   thorpej #define	WMREG_OLD_FCRTH 0x0160	/* Flow Control Rx Threshold Hi (OLD) */
    854  1.105.2.1  pgoyette #define	WMREG_FCRTH	0x2168	/* Flow Control Rx Threhsold Hi */
    855        1.1   thorpej #define	FCRTH_DFLT	0x00008000
    856        1.1   thorpej 
    857        1.1   thorpej #define	WMREG_OLD_FCRTL 0x0168	/* Flow Control Rx Threshold Lo (OLD) */
    858  1.105.2.1  pgoyette #define	WMREG_FCRTL	0x2160	/* Flow Control Rx Threshold Lo */
    859        1.1   thorpej #define	FCRTL_DFLT	0x00004000
    860       1.11   thorpej #define	FCRTL_XONE	0x80000000	/* Enable XON frame transmission */
    861        1.1   thorpej 
    862        1.1   thorpej #define	WMREG_FCTTV	0x0170	/* Flow Control Transmit Timer Value */
    863       1.11   thorpej #define	FCTTV_DFLT	0x00000600
    864        1.1   thorpej 
    865        1.1   thorpej #define	WMREG_TXCW	0x0178	/* Transmit Configuration Word (TBI mode) */
    866        1.1   thorpej 	/* See MII ANAR_X bits. */
    867       1.60   msaitoh #define	TXCW_FD		(1U << 5)	/* Full Duplex */
    868       1.60   msaitoh #define	TXCW_HD		(1U << 6)	/* Half Duplex */
    869       1.27   msaitoh #define	TXCW_SYM_PAUSE	(1U << 7)	/* sym pause request */
    870       1.27   msaitoh #define	TXCW_ASYM_PAUSE	(1U << 8)	/* asym pause request */
    871        1.1   thorpej #define	TXCW_TxConfig	(1U << 30)	/* Tx Config */
    872        1.1   thorpej #define	TXCW_ANE	(1U << 31)	/* Autonegotiate */
    873        1.1   thorpej 
    874        1.1   thorpej #define	WMREG_RXCW	0x0180	/* Receive Configuration Word (TBI mode) */
    875        1.1   thorpej 	/* See MII ANLPAR_X bits. */
    876        1.1   thorpej #define	RXCW_NC		(1U << 26)	/* no carrier */
    877        1.1   thorpej #define	RXCW_IV		(1U << 27)	/* config invalid */
    878        1.1   thorpej #define	RXCW_CC		(1U << 28)	/* config change */
    879        1.1   thorpej #define	RXCW_C		(1U << 29)	/* /C/ reception */
    880        1.1   thorpej #define	RXCW_SYNCH	(1U << 30)	/* synchronized */
    881        1.1   thorpej #define	RXCW_ANC	(1U << 31)	/* autonegotiation complete */
    882        1.1   thorpej 
    883        1.1   thorpej #define	WMREG_MTA	0x0200	/* Multicast Table Array */
    884        1.1   thorpej #define	WMREG_CORDOVA_MTA 0x5200
    885        1.1   thorpej 
    886        1.1   thorpej #define	WMREG_TCTL	0x0400	/* Transmit Control Register */
    887        1.1   thorpej #define	TCTL_EN		(1U << 1)	/* transmitter enable */
    888        1.1   thorpej #define	TCTL_PSP	(1U << 3)	/* pad short packets */
    889        1.1   thorpej #define	TCTL_CT(x)	(((x) & 0xff) << 4)   /* 4:11 - collision threshold */
    890        1.1   thorpej #define	TCTL_COLD(x)	(((x) & 0x3ff) << 12) /* 12:21 - collision distance */
    891        1.1   thorpej #define	TCTL_SWXOFF	(1U << 22)	/* software XOFF */
    892        1.1   thorpej #define	TCTL_RTLC	(1U << 24)	/* retransmit on late collision */
    893        1.1   thorpej #define	TCTL_NRTU	(1U << 25)	/* no retransmit on underrun */
    894       1.19   msaitoh #define	TCTL_MULR	(1U << 28)	/* multiple request */
    895        1.1   thorpej 
    896        1.1   thorpej #define	TX_COLLISION_THRESHOLD		15
    897       1.17   msaitoh #define	TX_COLLISION_DISTANCE_HDX	512
    898       1.17   msaitoh #define	TX_COLLISION_DISTANCE_FDX	64
    899        1.1   thorpej 
    900       1.20    bouyer #define	WMREG_TCTL_EXT	0x0404	/* Transmit Control Register */
    901  1.105.2.1  pgoyette #define	TCTL_EXT_BST_MASK	0x000003ff /* Backoff Slot Time */
    902  1.105.2.1  pgoyette #define	TCTL_EXT_GCEX_MASK	0x000ffc00 /* Gigabit Carry Extend Padding */
    903       1.20    bouyer 
    904       1.20    bouyer #define	DEFAULT_80003ES2LAN_TCTL_EXT_GCEX 0x00010000
    905       1.20    bouyer 
    906        1.1   thorpej #define	WMREG_TIPG	0x0410	/* Transmit IPG Register */
    907        1.1   thorpej #define	TIPG_IPGT(x)	(x)		/* IPG transmit time */
    908        1.1   thorpej #define	TIPG_IPGR1(x)	((x) << 10)	/* IPG receive time 1 */
    909        1.1   thorpej #define	TIPG_IPGR2(x)	((x) << 20)	/* IPG receive time 2 */
    910        1.1   thorpej #define	TIPG_WM_DFLT	(TIPG_IPGT(0x0a) | TIPG_IPGR1(0x02) | TIPG_IPGR2(0x0a))
    911        1.1   thorpej #define	TIPG_LG_DFLT	(TIPG_IPGT(0x06) | TIPG_IPGR1(0x08) | TIPG_IPGR2(0x06))
    912        1.1   thorpej #define	TIPG_1000T_DFLT	(TIPG_IPGT(0x08) | TIPG_IPGR1(0x08) | TIPG_IPGR2(0x06))
    913       1.20    bouyer #define	TIPG_1000T_80003_DFLT \
    914       1.20    bouyer     (TIPG_IPGT(0x08) | TIPG_IPGR1(0x02) | TIPG_IPGR2(0x07))
    915       1.20    bouyer #define	TIPG_10_100_80003_DFLT \
    916       1.20    bouyer     (TIPG_IPGT(0x09) | TIPG_IPGR1(0x02) | TIPG_IPGR2(0x07))
    917        1.1   thorpej 
    918        1.1   thorpej #define	WMREG_TQC	0x0418
    919        1.1   thorpej 
    920       1.44   msaitoh #define	WMREG_OLD_TDBAL	0x0420	/* Transmit Descriptor Base Lo */
    921       1.83  knakahar #define	WMREG_TDBAL(x) \
    922       1.83  knakahar 	((x) < 4 ? (0x03800 + ((x) * 0x100)) :	\
    923  1.105.2.1  pgoyette 	    (0x0e000 + ((x) * 0x40)))
    924        1.1   thorpej 
    925       1.44   msaitoh #define	WMREG_OLD_TDBAH	0x0424	/* Transmit Descriptor Base Hi */
    926       1.83  knakahar #define	WMREG_TDBAH(x)\
    927       1.83  knakahar 	((x) < 4 ? (0x03804 + ((x) * 0x100)) :	\
    928  1.105.2.1  pgoyette 	    (0x0e004 + ((x) * 0x40)))
    929        1.1   thorpej 
    930        1.1   thorpej #define	WMREG_OLD_TDLEN	0x0428	/* Transmit Descriptor Length */
    931       1.83  knakahar #define	WMREG_TDLEN(x) \
    932       1.83  knakahar 	((x) < 4 ? (0x03808 + ((x) * 0x100)) :	\
    933  1.105.2.1  pgoyette 	    (0x0e008 + ((x) * 0x40)))
    934        1.1   thorpej 
    935        1.1   thorpej #define	WMREG_OLD_TDH	0x0430	/* Transmit Descriptor Head */
    936       1.83  knakahar #define	WMREG_TDH(x) \
    937       1.83  knakahar 	((x) < 4 ? (0x03810 + ((x) * 0x100)) :	\
    938  1.105.2.1  pgoyette 	    (0x0e010 + ((x) * 0x40)))
    939        1.1   thorpej 
    940        1.1   thorpej #define	WMREG_OLD_TDT	0x0438	/* Transmit Descriptor Tail */
    941       1.83  knakahar #define WMREG_TDT(x) \
    942       1.83  knakahar 	((x) < 4 ? (0x03818 + ((x) * 0x100)) :	\
    943  1.105.2.1  pgoyette 	    (0x0e018 + ((x) * 0x40)))
    944        1.1   thorpej 
    945        1.1   thorpej #define	WMREG_OLD_TIDV	0x0440	/* Transmit Delay Interrupt Value */
    946        1.1   thorpej #define	WMREG_TIDV	0x3820
    947        1.1   thorpej 
    948        1.1   thorpej #define	WMREG_AIT	0x0458	/* Adaptive IFS Throttle */
    949        1.1   thorpej #define	WMREG_VFTA	0x0600
    950        1.1   thorpej 
    951      1.102   msaitoh #define	WMREG_LEDCTL	0x0e00	/* LED Control - RW */
    952      1.102   msaitoh 
    953       1.55   msaitoh #define	WMREG_MDICNFG	0x0e04	/* MDC/MDIO Configuration Register */
    954       1.55   msaitoh #define MDICNFG_PHY_SHIFT	21
    955       1.55   msaitoh #define MDICNFG_PHY_MASK	__BITS(25, 21)
    956       1.55   msaitoh #define MDICNFG_COM_MDIO	__BIT(30)
    957       1.55   msaitoh #define MDICNFG_DEST		__BIT(31)
    958       1.55   msaitoh 
    959        1.1   thorpej #define	WM_MC_TABSIZE	128
    960       1.22    bouyer #define	WM_ICH8_MC_TABSIZE 32
    961        1.1   thorpej #define	WM_VLAN_TABSIZE	128
    962        1.1   thorpej 
    963       1.59   msaitoh #define	WMREG_PHPM	0x0e14	/* PHY Power Management */
    964      1.101   msaitoh #define	PHPM_SPD_EN		__BIT(0)	/* Smart Power Down */
    965      1.101   msaitoh #define	PHPM_D0A_LPLU		__BIT(1)	/* D0 Low Power Link Up */
    966      1.101   msaitoh #define	PHPM_NOND0A_LPLU	__BIT(2)	/* D0 Low Power Link Up */
    967      1.101   msaitoh #define	PHPM_NOND0A_GBE_DIS	__BIT(3)	/* D0 Low Power Link Up */
    968       1.59   msaitoh #define	PHPM_GO_LINK_D		__BIT(5)	/* Go Link Disconnect */
    969       1.59   msaitoh 
    970       1.58   msaitoh #define WMREG_EEER	0x0e30	/* Energy Efficiency Ethernet "EEE" */
    971       1.58   msaitoh #define EEER_TX_LPI_EN		0x00010000 /* EEER Tx LPI Enable */
    972       1.58   msaitoh #define EEER_RX_LPI_EN		0x00020000 /* EEER Rx LPI Enable */
    973       1.58   msaitoh #define EEER_LPI_FC		0x00040000 /* EEER Ena on Flow Cntrl */
    974       1.58   msaitoh #define EEER_EEER_NEG		0x20000000 /* EEER capability nego */
    975       1.58   msaitoh #define EEER_EEER_RX_LPI_STATUS	0x40000000 /* EEER Rx in LPI state */
    976       1.58   msaitoh #define EEER_EEER_TX_LPI_STATUS	0x80000000 /* EEER Tx in LPI state */
    977       1.58   msaitoh #define WMREG_EEE_SU	0x0e34	/* EEE Setup */
    978       1.58   msaitoh #define WMREG_IPCNFG	0x0e38	/* Internal PHY Configuration */
    979       1.72   msaitoh #define IPCNFG_10BASE_TE	0x00000002 /* IPCNFG 10BASE-Te low power op. */
    980       1.58   msaitoh #define IPCNFG_EEE_100M_AN	0x00000004 /* IPCNFG EEE Ena 100M AN */
    981       1.58   msaitoh #define IPCNFG_EEE_1G_AN	0x00000008 /* IPCNFG EEE Ena 1G AN */
    982       1.58   msaitoh 
    983       1.58   msaitoh #define WMREG_EXTCNFCTR	0x0f00  /* Extended Configuration Control */
    984       1.58   msaitoh #define EXTCNFCTR_PCIE_WRITE_ENABLE	0x00000001
    985      1.102   msaitoh #define EXTCNFCTR_OEM_WRITE_ENABLE	0x00000008
    986       1.58   msaitoh #define EXTCNFCTR_MDIO_SW_OWNERSHIP	0x00000020
    987       1.58   msaitoh #define EXTCNFCTR_MDIO_HW_OWNERSHIP	0x00000040
    988       1.58   msaitoh #define EXTCNFCTR_GATE_PHY_CFG		0x00000080
    989  1.105.2.1  pgoyette #define EXTCNFCTR_EXT_CNF_POINTER	0x0fff0000
    990       1.58   msaitoh 
    991      1.102   msaitoh #define WMREG_EXTCNFSIZE 0x0f08  /* Extended Configuration Size */
    992      1.102   msaitoh #define EXTCNFSIZE_LENGTH	__BITS(23, 16)
    993      1.102   msaitoh 
    994       1.58   msaitoh #define	WMREG_PHY_CTRL	0x0f10	/* PHY control */
    995       1.58   msaitoh #define	PHY_CTRL_SPD_EN		(1 << 0)
    996       1.58   msaitoh #define	PHY_CTRL_D0A_LPLU	(1 << 1)
    997       1.58   msaitoh #define	PHY_CTRL_NOND0A_LPLU	(1 << 2)
    998       1.58   msaitoh #define	PHY_CTRL_NOND0A_GBE_DIS	(1 << 3)
    999       1.86   msaitoh #define	PHY_CTRL_GBE_DIS	(1 << 6)
   1000       1.58   msaitoh 
   1001       1.92   msaitoh #define	WMREG_PCIEANACFG 0x0f18	/* PCIE Analog Config */
   1002       1.92   msaitoh 
   1003       1.89   msaitoh #define	WMREG_IOSFPC	0x0f28	/* Tx corrupted data */
   1004       1.89   msaitoh 
   1005        1.1   thorpej #define	WMREG_PBA	0x1000	/* Packet Buffer Allocation */
   1006       1.12   thorpej #define	PBA_BYTE_SHIFT	10		/* KB -> bytes */
   1007       1.12   thorpej #define	PBA_ADDR_SHIFT	7		/* KB -> quadwords */
   1008       1.22    bouyer #define	PBA_8K		0x0008
   1009       1.23   msaitoh #define	PBA_10K		0x000a
   1010       1.19   msaitoh #define	PBA_12K		0x000c
   1011       1.68   msaitoh #define	PBA_14K		0x000e
   1012       1.12   thorpej #define	PBA_16K		0x0010		/* 16K, default Tx allocation */
   1013       1.29   msaitoh #define	PBA_20K		0x0014
   1014       1.12   thorpej #define	PBA_22K		0x0016
   1015       1.12   thorpej #define	PBA_24K		0x0018
   1016       1.45   msaitoh #define	PBA_26K		0x001a
   1017       1.12   thorpej #define	PBA_30K		0x001e
   1018       1.19   msaitoh #define	PBA_32K		0x0020
   1019       1.51   msaitoh #define	PBA_34K		0x0022
   1020       1.38   msaitoh #define	PBA_35K		0x0023
   1021       1.12   thorpej #define	PBA_40K		0x0028
   1022       1.12   thorpej #define	PBA_48K		0x0030		/* 48K, default Rx allocation */
   1023       1.38   msaitoh #define	PBA_64K		0x0040
   1024       1.92   msaitoh #define	PBA_RXA_MASK	__BITS(15, 0)
   1025        1.1   thorpej 
   1026       1.31   msaitoh #define	WMREG_PBS	0x1008	/* Packet Buffer Size (ICH) */
   1027       1.22    bouyer 
   1028       1.53   msaitoh #define	WMREG_PBECCSTS	0x100c	/* Packet Buffer ECC Status (PCH_LPT) */
   1029       1.53   msaitoh #define	PBECCSTS_CORR_ERR_CNT_MASK	0x000000ff
   1030       1.53   msaitoh #define	PBECCSTS_UNCORR_ERR_CNT_MASK	0x0000ff00
   1031       1.53   msaitoh #define	PBECCSTS_UNCORR_ECC_ENABLE	0x00010000
   1032       1.53   msaitoh 
   1033       1.32   msaitoh #define WMREG_EEMNGCTL	0x1010	/* MNG EEprom Control */
   1034       1.32   msaitoh #define EEMNGCTL_CFGDONE_0 0x040000	/* MNG config cycle done */
   1035       1.32   msaitoh #define EEMNGCTL_CFGDONE_1 0x080000	/*  2nd port */
   1036       1.32   msaitoh 
   1037       1.38   msaitoh #define WMREG_I2CCMD	0x1028	/* SFPI2C Command Register - RW */
   1038       1.38   msaitoh #define I2CCMD_REG_ADDR_SHIFT	16
   1039       1.38   msaitoh #define I2CCMD_REG_ADDR		0x00ff0000
   1040       1.38   msaitoh #define I2CCMD_PHY_ADDR_SHIFT	24
   1041       1.38   msaitoh #define I2CCMD_PHY_ADDR		0x07000000
   1042       1.38   msaitoh #define I2CCMD_OPCODE_READ	0x08000000
   1043       1.38   msaitoh #define I2CCMD_OPCODE_WRITE	0x00000000
   1044       1.38   msaitoh #define I2CCMD_RESET		0x10000000
   1045       1.38   msaitoh #define I2CCMD_READY		0x20000000
   1046       1.38   msaitoh #define I2CCMD_INTERRUPT_ENA	0x40000000
   1047       1.38   msaitoh #define I2CCMD_ERROR		0x80000000
   1048       1.38   msaitoh #define MAX_SGMII_PHY_REG_ADDR	255
   1049       1.38   msaitoh #define I2CCMD_PHY_TIMEOUT	200
   1050       1.38   msaitoh 
   1051       1.58   msaitoh #define	WMREG_EEWR	0x102c	/* EEPROM write */
   1052       1.58   msaitoh 
   1053       1.53   msaitoh #define WMREG_PBA_ECC	0x01100	/* PBA ECC */
   1054       1.53   msaitoh #define PBA_ECC_COUNTER_MASK	0xfff00000 /* ECC counter mask */
   1055       1.53   msaitoh #define PBA_ECC_COUNTER_SHIFT	20	   /* ECC counter shift value */
   1056       1.53   msaitoh #define	PBA_ECC_CORR_EN		0x00000001 /* Enable ECC error correction */
   1057       1.53   msaitoh #define	PBA_ECC_STAT_CLR	0x00000002 /* Clear ECC error counter */
   1058       1.53   msaitoh #define	PBA_ECC_INT_EN		0x00000004 /* Enable ICR bit 5 on ECC error */
   1059       1.53   msaitoh 
   1060       1.78   msaitoh #define WMREG_GPIE	0x01514 /* General Purpose Interrupt Enable */
   1061       1.78   msaitoh #define GPIE_NSICR	__BIT(0)	/* Non Selective Interrupt Clear */
   1062       1.78   msaitoh #define GPIE_MULTI_MSIX	__BIT(4)	/* Multiple MSIX */
   1063       1.78   msaitoh #define GPIE_EIAME	__BIT(30)	/* Extended Interrupt Auto Mask Ena. */
   1064       1.78   msaitoh #define GPIE_PBA	__BIT(31)	/* PBA support */
   1065       1.78   msaitoh 
   1066       1.38   msaitoh #define WMREG_EICS	0x01520  /* Ext. Interrupt Cause Set - WO */
   1067       1.38   msaitoh #define WMREG_EIMS	0x01524  /* Ext. Interrupt Mask Set/Read - RW */
   1068       1.38   msaitoh #define WMREG_EIMC	0x01528  /* Ext. Interrupt Mask Clear - WO */
   1069  1.105.2.1  pgoyette #define WMREG_EIAC	0x0152c  /* Ext. Interrupt Auto Clear - RW */
   1070       1.38   msaitoh #define WMREG_EIAM	0x01530  /* Ext. Interrupt Ack Auto Clear Mask - RW */
   1071       1.38   msaitoh 
   1072       1.38   msaitoh #define WMREG_EICR	0x01580  /* Ext. Interrupt Cause Read - R/clr */
   1073       1.38   msaitoh 
   1074       1.78   msaitoh #define WMREG_MSIXBM(x)	(0x1600 + (x) * 4) /* MSI-X Allocation */
   1075       1.78   msaitoh 
   1076       1.83  knakahar #define EITR_RX_QUEUE(x)	__BIT(0+(x)) /* Rx Queue x Interrupt x=[0-3] */
   1077       1.83  knakahar #define EITR_TX_QUEUE(x)	__BIT(8+(x)) /* Tx Queue x Interrupt x=[0-3] */
   1078       1.38   msaitoh #define EITR_TCP_TIMER	0x40000000 /* TCP Timer */
   1079       1.38   msaitoh #define EITR_OTHER	0x80000000 /* Interrupt Cause Active */
   1080       1.38   msaitoh 
   1081       1.38   msaitoh #define WMREG_EITR(x)	(0x01680 + (0x4 * (x)))
   1082       1.98  knakahar #define EITR_ITR_INT_MASK	__BITS(14,2)
   1083       1.98  knakahar #define EITR_COUNTER_MASK_82575	__BITS(31,16)
   1084       1.98  knakahar #define EITR_CNT_INGR		__BIT(31) /* does not overwrite counter */
   1085       1.98  knakahar 
   1086  1.105.2.1  pgoyette #define WMREG_EITR_82574(x)	(0x000e8 + (0x4 * (x)))
   1087       1.98  knakahar #define EITR_ITR_INT_MASK_82574	__BITS(15, 0)
   1088       1.38   msaitoh 
   1089       1.69   msaitoh #define	WMREG_RXPBS	0x2404	/* Rx Packet Buffer Size  */
   1090  1.105.2.1  pgoyette #define RXPBS_SIZE_MASK_82576	0x0000007f
   1091       1.69   msaitoh 
   1092       1.58   msaitoh #define	WMREG_RDFH	0x2410	/* Receive Data FIFO Head */
   1093       1.58   msaitoh #define	WMREG_RDFT	0x2418	/* Receive Data FIFO Tail */
   1094       1.58   msaitoh #define	WMREG_RDFHS	0x2420	/* Receive Data FIFO Head Saved */
   1095       1.58   msaitoh #define	WMREG_RDFTS	0x2428	/* Receive Data FIFO Tail Saved */
   1096       1.58   msaitoh #define	WMREG_RADV	0x282c	/* Receive Interrupt Absolute Delay Timer */
   1097       1.58   msaitoh 
   1098        1.1   thorpej #define	WMREG_TXDMAC	0x3000	/* Transfer DMA Control */
   1099        1.1   thorpej #define	TXDMAC_DPP	(1U << 0)	/* disable packet prefetch */
   1100        1.1   thorpej 
   1101       1.28   msaitoh #define WMREG_KABGTXD	0x3004	/* AFE and Gap Transmit Ref Data */
   1102       1.28   msaitoh #define	KABGTXD_BGSQLBIAS 0x00050000
   1103       1.28   msaitoh 
   1104       1.58   msaitoh #define	WMREG_TDFH	0x3410	/* Transmit Data FIFO Head */
   1105       1.58   msaitoh #define	WMREG_TDFT	0x3418	/* Transmit Data FIFO Tail */
   1106       1.58   msaitoh #define	WMREG_TDFHS	0x3420	/* Transmit Data FIFO Head Saved */
   1107       1.58   msaitoh #define	WMREG_TDFTS	0x3428	/* Transmit Data FIFO Tail Saved */
   1108       1.58   msaitoh #define	WMREG_TDFPC	0x3430	/* Transmit Data FIFO Packet Count */
   1109       1.58   msaitoh 
   1110       1.66   msaitoh #define	WMREG_TXDCTL(n)		/* Trandmit Descriptor Control */ \
   1111       1.66   msaitoh 	(((n) < 4) ? (0x3828 + ((n) * 0x100)) : (0xe028 + ((n) * 0x40)))
   1112       1.58   msaitoh #define	TXDCTL_PTHRESH(x) ((x) << 0)	/* prefetch threshold */
   1113       1.58   msaitoh #define	TXDCTL_HTHRESH(x) ((x) << 8)	/* host threshold */
   1114       1.58   msaitoh #define	TXDCTL_WTHRESH(x) ((x) << 16)	/* write back threshold */
   1115       1.58   msaitoh /* flags used starting with 82575 ... */
   1116       1.66   msaitoh #define TXDCTL_COUNT_DESC	__BIT(22) /* Enable the counting of desc.
   1117       1.66   msaitoh 					   still to be processed. */
   1118       1.58   msaitoh #define TXDCTL_QUEUE_ENABLE  0x02000000 /* Enable specific Tx Queue */
   1119       1.58   msaitoh #define TXDCTL_SWFLSH        0x04000000 /* Tx Desc. write-back flushing */
   1120       1.58   msaitoh #define TXDCTL_PRIORITY      0x08000000
   1121       1.58   msaitoh 
   1122       1.58   msaitoh #define	WMREG_TADV	0x382c	/* Transmit Absolute Interrupt Delay Timer */
   1123        1.1   thorpej #define	WMREG_TSPMT	0x3830	/* TCP Segmentation Pad and Minimum
   1124        1.1   thorpej 				   Threshold (Cordova) */
   1125        1.1   thorpej #define	TSPMT_TSMT(x)	(x)		/* TCP seg min transfer */
   1126        1.1   thorpej #define	TSPMT_TSPBP(x)	((x) << 16)	/* TCP seg pkt buf padding */
   1127        1.1   thorpej 
   1128       1.66   msaitoh #define	WMREG_TARC0	0x3840	/* Tx arbitration count (0) */
   1129       1.66   msaitoh #define	WMREG_TARC1	0x3940	/* Tx arbitration count (1) */
   1130       1.66   msaitoh 
   1131       1.36   msaitoh #define	WMREG_CRCERRS	0x4000	/* CRC Error Count */
   1132       1.36   msaitoh #define	WMREG_ALGNERRC	0x4004	/* Alignment Error Count */
   1133       1.36   msaitoh #define	WMREG_SYMERRC	0x4008	/* Symbol Error Count */
   1134       1.36   msaitoh #define	WMREG_RXERRC	0x400c	/* receive error Count - R/clr */
   1135       1.36   msaitoh #define	WMREG_MPC	0x4010	/* Missed Packets Count - R/clr */
   1136       1.20    bouyer #define	WMREG_COLC	0x4028	/* collision Count - R/clr */
   1137       1.36   msaitoh #define	WMREG_SEC	0x4038	/* Sequence Error Count */
   1138       1.36   msaitoh #define	WMREG_CEXTERR	0x403c	/* Carrier Extension Error Count */
   1139       1.36   msaitoh #define	WMREG_RLEC	0x4040	/* Receive Length Error Count */
   1140       1.11   thorpej #define	WMREG_XONRXC	0x4048	/* XON Rx Count - R/clr */
   1141       1.11   thorpej #define	WMREG_XONTXC	0x404c	/* XON Tx Count - R/clr */
   1142       1.11   thorpej #define	WMREG_XOFFRXC	0x4050	/* XOFF Rx Count - R/clr */
   1143       1.11   thorpej #define	WMREG_XOFFTXC	0x4054	/* XOFF Tx Count - R/clr */
   1144       1.11   thorpej #define	WMREG_FCRUC	0x4058	/* Flow Control Rx Unsupported Count - R/clr */
   1145       1.36   msaitoh #define WMREG_RNBC	0x40a0	/* Receive No Buffers Count */
   1146       1.58   msaitoh #define WMREG_TLPIC	0x4148	/* EEE Tx LPI Count */
   1147       1.58   msaitoh #define WMREG_RLPIC	0x414c	/* EEE Rx LPI Count */
   1148       1.20    bouyer 
   1149       1.73   msaitoh #define	WMREG_PCS_CFG	0x4200	/* PCS Configuration */
   1150       1.73   msaitoh #define	PCS_CFG_PCS_EN	__BIT(3)
   1151       1.73   msaitoh 
   1152       1.73   msaitoh #define	WMREG_PCS_LCTL	0x4208	/* PCS Link Control */
   1153       1.73   msaitoh #define	PCS_LCTL_FSV_1000 __BIT(2)	/* AN Timeout Enable */
   1154       1.73   msaitoh #define	PCS_LCTL_FDV_FULL __BIT(3)	/* AN Timeout Enable */
   1155       1.73   msaitoh #define	PCS_LCTL_FSD __BIT(4)	/* AN Timeout Enable */
   1156       1.73   msaitoh #define	PCS_LCTL_FORCE_FC __BIT(7)	/* AN Timeout Enable */
   1157       1.73   msaitoh #define	PCS_LCTL_AN_ENABLE __BIT(16)	/* AN Timeout Enable */
   1158       1.73   msaitoh #define	PCS_LCTL_AN_RESTART __BIT(17)	/* AN Timeout Enable */
   1159       1.73   msaitoh #define	PCS_LCTL_AN_TIMEOUT __BIT(18)	/* AN Timeout Enable */
   1160       1.73   msaitoh 
   1161       1.73   msaitoh #define	WMREG_PCS_LSTS	0x420c	/* PCS Link Status */
   1162       1.73   msaitoh #define PCS_LSTS_LINKOK	__BIT(0)
   1163       1.94   msaitoh #define PCS_LSTS_SPEED	__BITS(2, 1)
   1164       1.94   msaitoh #define PCS_LSTS_SPEED_10	0
   1165       1.94   msaitoh #define PCS_LSTS_SPEED_100	1
   1166       1.94   msaitoh #define PCS_LSTS_SPEED_1000	2
   1167       1.73   msaitoh #define PCS_LSTS_FDX	__BIT(3)
   1168       1.73   msaitoh #define PCS_LSTS_AN_COMP __BIT(16)
   1169       1.73   msaitoh 
   1170       1.73   msaitoh #define	WMREG_PCS_ANADV	0x4218	/* AN Advertsement */
   1171       1.73   msaitoh #define	WMREG_PCS_LPAB	0x421c	/* Link Partnet Ability */
   1172       1.73   msaitoh 
   1173       1.38   msaitoh #define	WMREG_RXCSUM	0x5000	/* Receive Checksum register */
   1174       1.38   msaitoh #define	RXCSUM_PCSS	0x000000ff	/* Packet Checksum Start */
   1175       1.38   msaitoh #define	RXCSUM_IPOFL	(1U << 8)	/* IP checksum offload */
   1176       1.38   msaitoh #define	RXCSUM_TUOFL	(1U << 9)	/* TCP/UDP checksum offload */
   1177       1.38   msaitoh #define	RXCSUM_IPV6OFL	(1U << 10)	/* IPv6 checksum offload */
   1178       1.85  knakahar #define	RXCSUM_CRCOFL	(1U << 11)	/* SCTP CRC32 checksum offload */
   1179       1.84  knakahar #define	RXCSUM_IPPCSE	(1U << 12)	/* IP payload checksum enable */
   1180       1.84  knakahar #define	RXCSUM_PCSD	(1U << 13)	/* packet checksum disabled */
   1181       1.38   msaitoh 
   1182       1.38   msaitoh #define WMREG_RLPML	0x5004	/* Rx Long Packet Max Length */
   1183       1.38   msaitoh 
   1184       1.66   msaitoh #define WMREG_RFCTL	0x5008	/* Receive Filter Control */
   1185       1.66   msaitoh #define WMREG_RFCTL_NFSWDIS	__BIT(6)  /* NFS Write Disable */
   1186       1.66   msaitoh #define WMREG_RFCTL_NFSRDIS	__BIT(7)  /* NFS Read Disable */
   1187       1.82   msaitoh #define WMREG_RFCTL_ACKDIS	__BIT(12) /* ACK Accelerate Disable */
   1188       1.82   msaitoh #define WMREG_RFCTL_ACKD_DIS	__BIT(13) /* ACK data Disable */
   1189       1.95  knakahar #define WMREG_RFCTL_EXSTEN	__BIT(15) /* Extended status Enable. 82574 only. */
   1190       1.66   msaitoh #define WMREG_RFCTL_IPV6EXDIS	__BIT(16) /* IPv6 Extension Header Disable */
   1191       1.66   msaitoh #define WMREG_RFCTL_NEWIPV6EXDIS __BIT(17) /* New IPv6 Extension Header */
   1192       1.66   msaitoh 
   1193       1.38   msaitoh #define	WMREG_WUC	0x5800	/* Wakeup Control */
   1194       1.40   msaitoh #define	WUC_APME		0x00000001 /* APM Enable */
   1195       1.40   msaitoh #define	WUC_PME_EN		0x00000002 /* PME Enable */
   1196       1.40   msaitoh 
   1197       1.97   msaitoh #define	WMREG_WUFC	0x5808	/* Wakeup Filter Control */
   1198       1.40   msaitoh #define WUFC_MAG		0x00000002 /* Magic Packet Wakeup Enable */
   1199       1.40   msaitoh #define WUFC_EX			0x00000004 /* Directed Exact Wakeup Enable */
   1200       1.40   msaitoh #define WUFC_MC			0x00000008 /* Directed Multicast Wakeup En */
   1201       1.40   msaitoh #define WUFC_BC			0x00000010 /* Broadcast Wakeup Enable */
   1202       1.40   msaitoh #define WUFC_ARP		0x00000020 /* ARP Request Packet Wakeup En */
   1203       1.40   msaitoh #define WUFC_IPV4		0x00000040 /* Directed IPv4 Packet Wakeup En */
   1204       1.40   msaitoh #define WUFC_IPV6		0x00000080 /* Directed IPv6 Packet Wakeup En */
   1205       1.38   msaitoh 
   1206       1.84  knakahar #define WMREG_MRQC	0x5818	/* Multiple Receive Queues Command */
   1207       1.84  knakahar #define MRQC_DISABLE_RSS	0x00000000
   1208       1.84  knakahar #define MRQC_ENABLE_RSS_MQ_82574	__BIT(0) /* enable RSS for 82574 */
   1209       1.84  knakahar #define MRQC_ENABLE_RSS_MQ	__BIT(1) /* enable hardware max RSS without VMDq */
   1210       1.84  knakahar #define MRQC_ENABLE_RSS_VMDQ	__BITS(1, 0) /* enable RSS with VMDq */
   1211       1.84  knakahar #define MRQC_DEFQ_MASK		__BITS(5, 3)
   1212       1.84  knakahar 				/*
   1213       1.84  knakahar 				 * Defines the default queue in non VMDq
   1214       1.84  knakahar 				 * mode according to value of the Multiple Receive
   1215       1.84  knakahar 				 * Queues Enable field.
   1216       1.84  knakahar 				 */
   1217       1.84  knakahar #define MRQC_DEFQ_NOT_RSS_FLT	__SHFTIN(__BIT(1), MRQC_DEFQ_MASK)
   1218       1.84  knakahar 				/*
   1219       1.84  knakahar 				 * the destination of all packets
   1220       1.84  knakahar 				 * not forwarded by RSS or filters
   1221       1.84  knakahar 				 */
   1222       1.84  knakahar #define MRQC_DEFQ_NOT_MAC_ETH	__SHFTIN(__BITS(1, 0), MRQC_DEFQ_MASK)
   1223       1.84  knakahar 				/*
   1224       1.84  knakahar 				 * Def_Q field is ignored. Queueing
   1225       1.84  knakahar 				 * decision of all packets not forwarded
   1226       1.84  knakahar 				 * by MAC address and Ether-type filters
   1227       1.84  knakahar 				 * is according to VT_CTL.DEF_PL field.
   1228       1.84  knakahar 				 */
   1229       1.84  knakahar #define MRQC_DEFQ_IGNORED1	__SHFTIN(__BIT(2), MRQC_DEFQ_MASK)
   1230       1.84  knakahar 				/* Def_Q field is ignored */
   1231       1.84  knakahar #define MRQC_DEFQ_IGNORED2	__SHFTIN(__BIT(2)|__BIT(0), MRQC_DEFQ_MASK)
   1232       1.84  knakahar 				/* Def_Q field is ignored */
   1233       1.84  knakahar #define MRQC_DEFQ_VMDQ		__SHFTIN(__BITS(2, 1), MRQC_DEFQ_MASK)
   1234       1.84  knakahar 				/* for VMDq mode */
   1235       1.84  knakahar #define MRQC_RSS_FIELD_IPV4_TCP		__BIT(16)
   1236       1.84  knakahar #define MRQC_RSS_FIELD_IPV4		__BIT(17)
   1237       1.84  knakahar #define MRQC_RSS_FIELD_IPV6_TCP_EX	__BIT(18)
   1238       1.84  knakahar #define MRQC_RSS_FIELD_IPV6_EX		__BIT(19)
   1239       1.84  knakahar #define MRQC_RSS_FIELD_IPV6		__BIT(20)
   1240       1.84  knakahar #define MRQC_RSS_FIELD_IPV6_TCP		__BIT(21)
   1241       1.84  knakahar #define MRQC_RSS_FIELD_IPV4_UDP		__BIT(22)
   1242       1.84  knakahar #define MRQC_RSS_FIELD_IPV6_UDP		__BIT(23)
   1243       1.84  knakahar #define MRQC_RSS_FIELD_IPV6_UDP_EX	__BIT(24)
   1244       1.84  knakahar 
   1245       1.84  knakahar #define WMREG_RETA_Q(x)		(0x5c00 + ((x) >> 2) * 4) /* Redirection Table */
   1246       1.84  knakahar #define RETA_NUM_ENTRIES	128
   1247       1.84  knakahar #define RETA_ENTRY_MASK_Q(x)	(0x000000ff << (((x) % 4) * 8)) /* Redirection Table */
   1248       1.84  knakahar #define RETA_ENT_QINDEX_MASK		__BITS(3,0) /*queue index for 82580 and newer */
   1249       1.84  knakahar #define RETA_ENT_QINDEX0_MASK_82575	__BITS(3,2) /*queue index for pool0 */
   1250       1.84  knakahar #define RETA_ENT_QINDEX1_MASK_82575	__BITS(7,6) /*queue index for pool1 and regular RSS */
   1251       1.84  knakahar #define RETA_ENT_QINDEX_MASK_82574	__BIT(7) /*queue index for 82574 */
   1252       1.84  knakahar 
   1253       1.84  knakahar #define WMREG_RSSRK(x)		(0x5c80 + (x) * 4) /* RSS Random Key Register */
   1254       1.84  knakahar #define RSSRK_NUM_REGS		10
   1255       1.84  knakahar 
   1256       1.32   msaitoh #define	WMREG_MANC	0x5820	/* Management Control */
   1257       1.40   msaitoh #define	MANC_SMBUS_EN		0x00000001
   1258       1.40   msaitoh #define	MANC_ASF_EN		0x00000002
   1259       1.40   msaitoh #define	MANC_ARP_EN		0x00002000
   1260       1.54   msaitoh #define	MANC_RECV_TCO_RESET	0x00010000
   1261       1.40   msaitoh #define	MANC_RECV_TCO_EN	0x00020000
   1262       1.32   msaitoh #define	MANC_BLK_PHY_RST_ON_IDE	0x00040000
   1263       1.54   msaitoh #define	MANC_RECV_ALL		0x00080000
   1264       1.40   msaitoh #define	MANC_EN_MAC_ADDR_FILTER	0x00100000
   1265       1.40   msaitoh #define	MANC_EN_MNG2HOST	0x00200000
   1266       1.32   msaitoh 
   1267       1.88   msaitoh #define	WMREG_MANC2H	0x5860	/* Management Control To Host - RW */
   1268       1.40   msaitoh #define MANC2H_PORT_623		(1 << 5)
   1269       1.40   msaitoh #define MANC2H_PORT_624		(1 << 6)
   1270       1.20    bouyer 
   1271       1.38   msaitoh #define WMREG_GCR	0x5b00	/* PCIe Control */
   1272       1.38   msaitoh #define GCR_RXD_NO_SNOOP	0x00000001
   1273       1.38   msaitoh #define GCR_RXDSCW_NO_SNOOP	0x00000002
   1274       1.38   msaitoh #define GCR_RXDSCR_NO_SNOOP	0x00000004
   1275       1.38   msaitoh #define GCR_TXD_NO_SNOOP	0x00000008
   1276       1.38   msaitoh #define GCR_TXDSCW_NO_SNOOP	0x00000010
   1277       1.38   msaitoh #define GCR_TXDSCR_NO_SNOOP	0x00000020
   1278       1.38   msaitoh #define GCR_CMPL_TMOUT_MASK	0x0000f000
   1279       1.38   msaitoh #define GCR_CMPL_TMOUT_10MS	0x00001000
   1280       1.38   msaitoh #define GCR_CMPL_TMOUT_RESEND	0x00010000
   1281       1.38   msaitoh #define GCR_CAP_VER2		0x00040000
   1282       1.80   msaitoh #define GCR_L1_ACT_WITHOUT_L0S_RX 0x08000000
   1283       1.40   msaitoh 
   1284       1.40   msaitoh #define WMREG_FACTPS	0x5b30	/* Function Active and Power State to MNG */
   1285       1.40   msaitoh #define FACTPS_MNGCG		0x20000000
   1286       1.40   msaitoh #define FACTPS_LFS		0x40000000	/* LAN Function Select */
   1287       1.40   msaitoh 
   1288       1.38   msaitoh #define WMREG_GIOCTL	0x5b44	/* GIO Analog Control Register */
   1289       1.38   msaitoh #define WMREG_CCMCTL	0x5b48	/* CCM Control Register */
   1290       1.38   msaitoh #define WMREG_SCCTL	0x5b4c	/* PCIc PLL Configuration Register */
   1291       1.38   msaitoh 
   1292       1.18  uebayasi #define	WMREG_SWSM	0x5b50	/* SW Semaphore */
   1293       1.17   msaitoh #define	SWSM_SMBI	0x00000001	/* Driver Semaphore bit */
   1294       1.17   msaitoh #define	SWSM_SWESMBI	0x00000002	/* FW Semaphore bit */
   1295       1.17   msaitoh #define	SWSM_WMNG	0x00000004	/* Wake MNG Clock */
   1296       1.17   msaitoh #define	SWSM_DRV_LOAD	0x00000008	/* Driver Loaded Bit */
   1297       1.93   msaitoh /* Intel driver defines H2ME register at 0x5b50 */
   1298       1.93   msaitoh #define	WMREG_H2ME	0x5b50	/* SW Semaphore */
   1299       1.93   msaitoh #define H2ME_ULP		__BIT(11)
   1300       1.93   msaitoh #define H2ME_ENFORCE_SETTINGS	__BIT(12)
   1301       1.20    bouyer 
   1302       1.26   msaitoh #define	WMREG_FWSM	0x5b54	/* FW Semaphore */
   1303       1.88   msaitoh #define	FWSM_MODE		__BITS(1, 3)
   1304       1.40   msaitoh #define	MNG_ICH_IAMT_MODE	0x2	/* PT mode? */
   1305       1.26   msaitoh #define	MNG_IAMT_MODE		0x3
   1306       1.88   msaitoh #define FWSM_RSPCIPHY		__BIT(6)  /* Reset PHY on PCI reset */
   1307       1.99   msaitoh #define FWSM_WLOCK_MAC		__BITS(7, 9)
   1308       1.93   msaitoh #define FWSM_ULP_CFG_DONE	__BIT(10)
   1309       1.88   msaitoh #define FWSM_FW_VALID		__BIT(15) /* FW established a valid mode */
   1310       1.26   msaitoh 
   1311       1.57   msaitoh #define	WMREG_SWSM2	0x5b58	/* SW Semaphore 2 */
   1312       1.57   msaitoh #define SWSM2_LOCK		0x00000002 /* Secondary driver semaphore bit */
   1313       1.57   msaitoh 
   1314       1.20    bouyer #define	WMREG_SW_FW_SYNC 0x5b5c	/* software-firmware semaphore */
   1315       1.20    bouyer #define	SWFW_EEP_SM		0x0001 /* eeprom access */
   1316       1.20    bouyer #define	SWFW_PHY0_SM		0x0002 /* first ctrl phy access */
   1317       1.20    bouyer #define	SWFW_PHY1_SM		0x0004 /* second ctrl phy access */
   1318       1.20    bouyer #define	SWFW_MAC_CSR_SM		0x0008
   1319       1.38   msaitoh #define	SWFW_PHY2_SM		0x0020 /* first ctrl phy access */
   1320       1.38   msaitoh #define	SWFW_PHY3_SM		0x0040 /* first ctrl phy access */
   1321       1.20    bouyer #define	SWFW_SOFT_SHIFT		0	/* software semaphores */
   1322       1.20    bouyer #define	SWFW_FIRM_SHIFT		16	/* firmware semaphores */
   1323       1.22    bouyer 
   1324       1.66   msaitoh #define WMREG_GCR2	0x5b64	/* 3GPIO Control Register 2 */
   1325       1.89   msaitoh #define WMREG_FEXTNVM9	0x5bb4	/* Future Extended NVM 9 */
   1326      1.100   msaitoh #define FEXTNVM9_IOSFSB_CLKGATE_DIS __BIT(11)
   1327      1.100   msaitoh #define FEXTNVM9_IOSFSB_CLKREQ_DIS __BIT(12)
   1328       1.89   msaitoh #define WMREG_FEXTNVM11	0x5bbc	/* Future Extended NVM 11 */
   1329       1.89   msaitoh #define FEXTNVM11_DIS_MULRFIX	__BIT(13)	/* Disable MULR fix */
   1330       1.66   msaitoh 
   1331       1.58   msaitoh #define WMREG_CRC_OFFSET 0x5f50
   1332       1.58   msaitoh 
   1333       1.71   msaitoh #define WMREG_EEC	0x12010
   1334       1.71   msaitoh #define EEC_FLASH_DETECTED (1U << 19)	/* FLASH */
   1335       1.71   msaitoh #define EEC_FLUPD	(1U << 23)	/* Update FLASH */
   1336       1.71   msaitoh 
   1337       1.77   msaitoh #define WMREG_EEARBC_I210 0x12024
   1338       1.71   msaitoh 
   1339       1.58   msaitoh /*
   1340       1.58   msaitoh  * NVM related values.
   1341       1.58   msaitoh  *  Microwire, SPI, and flash
   1342       1.58   msaitoh  */
   1343       1.58   msaitoh #define	UWIRE_OPC_ERASE	0x04		/* MicroWire "erase" opcode */
   1344       1.58   msaitoh #define	UWIRE_OPC_WRITE	0x05		/* MicroWire "write" opcode */
   1345       1.58   msaitoh #define	UWIRE_OPC_READ	0x06		/* MicroWire "read" opcode */
   1346       1.58   msaitoh 
   1347       1.58   msaitoh #define	SPI_OPC_WRITE	0x02		/* SPI "write" opcode */
   1348       1.58   msaitoh #define	SPI_OPC_READ	0x03		/* SPI "read" opcode */
   1349       1.58   msaitoh #define	SPI_OPC_A8	0x08		/* opcode bit 3 == address bit 8 */
   1350       1.58   msaitoh #define	SPI_OPC_WREN	0x06		/* SPI "set write enable" opcode */
   1351       1.58   msaitoh #define	SPI_OPC_WRDI	0x04		/* SPI "clear write enable" opcode */
   1352       1.58   msaitoh #define	SPI_OPC_RDSR	0x05		/* SPI "read status" opcode */
   1353       1.58   msaitoh #define	SPI_OPC_WRSR	0x01		/* SPI "write status" opcode */
   1354       1.58   msaitoh #define	SPI_MAX_RETRIES	5000		/* max wait of 5ms for RDY signal */
   1355       1.58   msaitoh 
   1356       1.58   msaitoh #define	SPI_SR_RDY	0x01
   1357       1.58   msaitoh #define	SPI_SR_WEN	0x02
   1358       1.58   msaitoh #define	SPI_SR_BP0	0x04
   1359       1.58   msaitoh #define	SPI_SR_BP1	0x08
   1360       1.58   msaitoh #define	SPI_SR_WPEN	0x80
   1361       1.58   msaitoh 
   1362       1.61   msaitoh #define NVM_CHECKSUM		0xBABA
   1363       1.61   msaitoh #define NVM_SIZE		0x0040
   1364       1.62   msaitoh #define NVM_WORD_SIZE_BASE_SHIFT 6
   1365       1.61   msaitoh 
   1366       1.71   msaitoh #define	NVM_OFF_MACADDR		0x0000	/* MAC address offset 0 */
   1367       1.71   msaitoh #define	NVM_OFF_MACADDR1	0x0001	/* MAC address offset 1 */
   1368       1.71   msaitoh #define	NVM_OFF_MACADDR2	0x0002	/* MAC address offset 2 */
   1369       1.61   msaitoh #define NVM_OFF_COMPAT		0x0003
   1370       1.71   msaitoh #define NVM_OFF_ID_LED_SETTINGS	0x0004
   1371       1.76   msaitoh #define NVM_OFF_VERSION		0x0005
   1372       1.61   msaitoh #define	NVM_OFF_CFG1		0x000a	/* config word 1 */
   1373       1.61   msaitoh #define	NVM_OFF_CFG2		0x000f	/* config word 2 */
   1374       1.62   msaitoh #define	NVM_OFF_EEPROM_SIZE	0x0012	/* NVM SIZE */
   1375       1.71   msaitoh #define	NVM_OFF_CFG4		0x0013	/* config word 4 */
   1376       1.61   msaitoh #define	NVM_OFF_CFG3_PORTB	0x0014	/* config word 3 */
   1377       1.61   msaitoh #define NVM_OFF_FUTURE_INIT_WORD1 0x0019
   1378       1.61   msaitoh #define	NVM_OFF_INIT_3GIO_3	0x001a	/* PCIe Initial Configuration Word 3 */
   1379       1.61   msaitoh #define	NVM_OFF_K1_CONFIG	0x001b	/* NVM K1 Config */
   1380       1.71   msaitoh #define	NVM_OFF_LED_1_CFG	0x001c
   1381       1.71   msaitoh #define	NVM_OFF_LED_0_2_CFG	0x001f
   1382       1.61   msaitoh #define	NVM_OFF_SWDPIN		0x0020	/* SWD Pins (Cordova) */
   1383       1.61   msaitoh #define	NVM_OFF_CFG3_PORTA	0x0024	/* config word 3 */
   1384       1.61   msaitoh #define NVM_OFF_ALT_MAC_ADDR_PTR 0x0037	/* to the alternative MAC addresses */
   1385       1.76   msaitoh #define NVM_OFF_COMB_VER_PTR	0x003d
   1386       1.76   msaitoh #define NVM_OFF_IMAGE_UID0	0x0042
   1387       1.76   msaitoh #define NVM_OFF_IMAGE_UID1	0x0043
   1388       1.61   msaitoh 
   1389       1.61   msaitoh #define NVM_COMPAT_VALID_CHECKSUM	0x0001
   1390       1.61   msaitoh 
   1391       1.61   msaitoh #define	NVM_CFG1_LVDID		(1U << 0)
   1392       1.61   msaitoh #define	NVM_CFG1_LSSID		(1U << 1)
   1393       1.61   msaitoh #define	NVM_CFG1_PME_CLOCK	(1U << 2)
   1394       1.61   msaitoh #define	NVM_CFG1_PM		(1U << 3)
   1395       1.61   msaitoh #define	NVM_CFG1_ILOS		(1U << 4)
   1396       1.61   msaitoh #define	NVM_CFG1_SWDPIO_SHIFT	5
   1397       1.61   msaitoh #define	NVM_CFG1_SWDPIO_MASK	(0xf << NVM_CFG1_SWDPIO_SHIFT)
   1398       1.61   msaitoh #define	NVM_CFG1_IPS1		(1U << 8)
   1399       1.61   msaitoh #define	NVM_CFG1_LRST		(1U << 9)
   1400       1.61   msaitoh #define	NVM_CFG1_FD		(1U << 10)
   1401       1.61   msaitoh #define	NVM_CFG1_FRCSPD		(1U << 11)
   1402       1.61   msaitoh #define	NVM_CFG1_IPS0		(1U << 12)
   1403       1.61   msaitoh #define	NVM_CFG1_64_32_BAR	(1U << 13)
   1404       1.61   msaitoh 
   1405       1.61   msaitoh #define	NVM_CFG2_CSR_RD_SPLIT	(1U << 1)
   1406       1.61   msaitoh #define	NVM_CFG2_82544_APM_EN	(1U << 2)
   1407       1.61   msaitoh #define	NVM_CFG2_64_BIT		(1U << 3)
   1408       1.61   msaitoh #define	NVM_CFG2_MAX_READ	(1U << 4)
   1409       1.61   msaitoh #define	NVM_CFG2_DMCR_MAP	(1U << 5)
   1410       1.61   msaitoh #define	NVM_CFG2_133_CAP	(1U << 6)
   1411       1.61   msaitoh #define	NVM_CFG2_MSI_DIS	(1U << 7)
   1412       1.61   msaitoh #define	NVM_CFG2_FLASH_DIS	(1U << 8)
   1413       1.61   msaitoh #define	NVM_CFG2_FLASH_SIZE(x)	(((x) & 3) >> 9)
   1414       1.61   msaitoh #define	NVM_CFG2_APM_EN		(1U << 10)
   1415       1.61   msaitoh #define	NVM_CFG2_ANE		(1U << 11)
   1416       1.61   msaitoh #define	NVM_CFG2_PAUSE(x)	(((x) & 3) >> 12)
   1417       1.61   msaitoh #define	NVM_CFG2_ASDE		(1U << 14)
   1418       1.61   msaitoh #define	NVM_CFG2_APM_PME	(1U << 15)
   1419       1.61   msaitoh #define	NVM_CFG2_SWDPIO_SHIFT	4
   1420       1.61   msaitoh #define	NVM_CFG2_SWDPIO_MASK	(0xf << NVM_CFG2_SWDPIO_SHIFT)
   1421       1.61   msaitoh #define	NVM_CFG2_MNGM_SHIFT	13	/* Manageability Operation mode */
   1422       1.61   msaitoh #define	NVM_CFG2_MNGM_MASK	(3U << NVM_CFG2_MNGM_SHIFT)
   1423       1.61   msaitoh #define	NVM_CFG2_MNGM_DIS	0
   1424       1.61   msaitoh #define	NVM_CFG2_MNGM_NCSI	1
   1425       1.61   msaitoh #define	NVM_CFG2_MNGM_PT	2
   1426       1.61   msaitoh 
   1427       1.73   msaitoh #define	NVM_COMPAT_SERDES_FORCE_MODE	__BIT(14) /* Don't use autonego */
   1428       1.73   msaitoh 
   1429       1.61   msaitoh #define NVM_FUTURE_INIT_WORD1_VALID_CHECKSUM	0x0040
   1430       1.61   msaitoh 
   1431       1.61   msaitoh #define	NVM_K1_CONFIG_ENABLE	0x01
   1432       1.61   msaitoh 
   1433       1.61   msaitoh #define	NVM_SWDPIN_MASK		0xdf
   1434       1.61   msaitoh #define	NVM_SWDPIN_SWDPIN_SHIFT 0
   1435       1.61   msaitoh #define	NVM_SWDPIN_SWDPIO_SHIFT 8
   1436       1.61   msaitoh 
   1437       1.61   msaitoh #define NVM_3GIO_3_ASPM_MASK	(0x3 << 2)	/* Active State PM Support */
   1438       1.61   msaitoh 
   1439       1.61   msaitoh #define NVM_CFG3_APME		(1U << 10)
   1440       1.73   msaitoh #define NVM_CFG3_PORTA_EXT_MDIO	(1U << 2)	/* External MDIO Interface */
   1441       1.73   msaitoh #define NVM_CFG3_PORTA_COM_MDIO	(1U << 3)	/* MDIO Interface is shared */
   1442       1.61   msaitoh 
   1443       1.64   msaitoh #define	NVM_OFF_MACADDR_82571(x)	(3 * (x))
   1444       1.34   msaitoh 
   1445       1.58   msaitoh /*
   1446       1.58   msaitoh  * EEPROM Partitioning. See Table 6-1, "EEPROM Top Level Partitioning"
   1447       1.58   msaitoh  * in 82580's datasheet.
   1448       1.58   msaitoh  */
   1449       1.65   msaitoh #define NVM_OFF_LAN_FUNC_82580(x)	((x) ? (0x40 + (0x40 * (x))) : 0)
   1450       1.47   msaitoh 
   1451       1.76   msaitoh #define NVM_COMBO_VER_OFF	0x0083
   1452       1.76   msaitoh 
   1453       1.76   msaitoh #define NVM_MAJOR_MASK		0xf000
   1454       1.76   msaitoh #define NVM_MAJOR_SHIFT		12
   1455       1.76   msaitoh #define NVM_MINOR_MASK		0x0ff0
   1456       1.76   msaitoh #define NVM_MINOR_SHIFT		4
   1457       1.76   msaitoh #define NVM_BUILD_MASK		0x000f
   1458       1.76   msaitoh #define NVM_UID_VALID		0x8000
   1459       1.76   msaitoh 
   1460       1.71   msaitoh /* iNVM Registers for i21[01] */
   1461       1.77   msaitoh #define WM_INVM_DATA_REG(reg)	(0x12120 + 4*(reg))
   1462       1.71   msaitoh #define INVM_SIZE			64 /* Number of INVM Data Registers */
   1463       1.71   msaitoh 
   1464       1.71   msaitoh /* iNVM default vaule */
   1465       1.71   msaitoh #define NVM_INIT_CTRL_2_DEFAULT_I211	0x7243
   1466       1.71   msaitoh #define NVM_INIT_CTRL_4_DEFAULT_I211	0x00c1
   1467       1.71   msaitoh #define NVM_LED_1_CFG_DEFAULT_I211	0x0184
   1468       1.71   msaitoh #define NVM_LED_0_2_CFG_DEFAULT_I211	0x200c
   1469       1.71   msaitoh #define NVM_RESERVED_WORD		0xffff
   1470       1.71   msaitoh 
   1471       1.71   msaitoh #define INVM_DWORD_TO_RECORD_TYPE(dword)	((dword) & 0x7)
   1472       1.71   msaitoh #define INVM_DWORD_TO_WORD_ADDRESS(dword)	(((dword) & 0x0000FE00) >> 9)
   1473       1.71   msaitoh #define INVM_DWORD_TO_WORD_DATA(dword)		(((dword) & 0xFFFF0000) >> 16)
   1474       1.71   msaitoh 
   1475       1.71   msaitoh #define INVM_UNINITIALIZED_STRUCTURE		0x0
   1476       1.71   msaitoh #define INVM_WORD_AUTOLOAD_STRUCTURE		0x1
   1477       1.71   msaitoh #define INVM_CSR_AUTOLOAD_STRUCTURE		0x2
   1478       1.71   msaitoh #define INVM_PHY_REGISTER_AUTOLOAD_STRUCTURE	0x3
   1479       1.71   msaitoh #define INVM_RSA_KEY_SHA256_STRUCTURE		0x4
   1480       1.77   msaitoh #define INVM_INVALIDATED_STRUCTURE		0xf
   1481       1.71   msaitoh 
   1482       1.71   msaitoh #define INVM_RSA_KEY_SHA256_DATA_SIZE_IN_DWORDS	8
   1483       1.71   msaitoh #define INVM_CSR_AUTOLOAD_DATA_SIZE_IN_DWORDS	1
   1484       1.71   msaitoh 
   1485       1.77   msaitoh #define INVM_DEFAULT_AL		0x202f
   1486       1.77   msaitoh #define INVM_AUTOLOAD		0x0a
   1487       1.77   msaitoh #define INVM_PLL_WO_VAL		0x0010
   1488       1.77   msaitoh 
   1489       1.79   msaitoh /* Version and Image Type field */
   1490       1.79   msaitoh #define INVM_VER_1	__BITS(12,3)
   1491       1.79   msaitoh #define INVM_VER_2	__BITS(22,13)
   1492       1.79   msaitoh #define INVM_IMGTYPE	__BITS(28,23)
   1493       1.79   msaitoh #define INVM_MINOR	__BITS(3,0)
   1494       1.79   msaitoh #define INVM_MAJOR	__BITS(9,4)
   1495       1.79   msaitoh 
   1496       1.71   msaitoh /* Word definitions for ID LED Settings */
   1497  1.105.2.1  pgoyette #define ID_LED_RESERVED_FFFF 0xffff
   1498       1.71   msaitoh 
   1499       1.22    bouyer /* ich8 flash control */
   1500       1.22    bouyer #define ICH_FLASH_COMMAND_TIMEOUT            5000    /* 5000 uSecs - adjusted */
   1501       1.22    bouyer #define ICH_FLASH_ERASE_TIMEOUT              3000000 /* Up to 3 seconds - worst case */
   1502       1.22    bouyer #define ICH_FLASH_CYCLE_REPEAT_COUNT         10      /* 10 cycles */
   1503       1.22    bouyer #define ICH_FLASH_SEG_SIZE_256               256
   1504       1.22    bouyer #define ICH_FLASH_SEG_SIZE_4K                4096
   1505       1.22    bouyer #define ICH_FLASH_SEG_SIZE_64K               65536
   1506       1.22    bouyer 
   1507       1.22    bouyer #define ICH_CYCLE_READ                       0x0
   1508       1.22    bouyer #define ICH_CYCLE_RESERVED                   0x1
   1509       1.22    bouyer #define ICH_CYCLE_WRITE                      0x2
   1510       1.22    bouyer #define ICH_CYCLE_ERASE                      0x3
   1511       1.22    bouyer 
   1512       1.22    bouyer #define ICH_FLASH_GFPREG   0x0000
   1513       1.22    bouyer #define ICH_FLASH_HSFSTS   0x0004 /* Flash Status Register */
   1514       1.22    bouyer #define HSFSTS_DONE		0x0001 /* Flash Cycle Done */
   1515       1.22    bouyer #define HSFSTS_ERR		0x0002 /* Flash Cycle Error */
   1516       1.22    bouyer #define HSFSTS_DAEL		0x0004 /* Direct Access error Log */
   1517       1.22    bouyer #define HSFSTS_ERSZ_MASK	0x0018 /* Block/Sector Erase Size */
   1518       1.22    bouyer #define HSFSTS_ERSZ_SHIFT	3
   1519       1.22    bouyer #define HSFSTS_FLINPRO		0x0020 /* flash SPI cycle in Progress */
   1520       1.22    bouyer #define HSFSTS_FLDVAL		0x4000 /* Flash Descriptor Valid */
   1521       1.22    bouyer #define HSFSTS_FLLK		0x8000 /* Flash Configuration Lock-Down */
   1522       1.22    bouyer #define ICH_FLASH_HSFCTL   0x0006 /* Flash control Register */
   1523       1.22    bouyer #define HSFCTL_GO		0x0001 /* Flash Cycle Go */
   1524       1.22    bouyer #define HSFCTL_CYCLE_MASK	0x0006 /* Flash Cycle */
   1525       1.22    bouyer #define HSFCTL_CYCLE_SHIFT	1
   1526       1.22    bouyer #define HSFCTL_BCOUNT_MASK	0x0300 /* Data Byte Count */
   1527       1.22    bouyer #define HSFCTL_BCOUNT_SHIFT	8
   1528       1.22    bouyer #define ICH_FLASH_FADDR    0x0008
   1529       1.22    bouyer #define ICH_FLASH_FDATA0   0x0010
   1530       1.22    bouyer #define ICH_FLASH_FRACC    0x0050
   1531       1.22    bouyer #define ICH_FLASH_FREG0    0x0054
   1532       1.22    bouyer #define ICH_FLASH_FREG1    0x0058
   1533  1.105.2.1  pgoyette #define ICH_FLASH_FREG2    0x005c
   1534       1.22    bouyer #define ICH_FLASH_FREG3    0x0060
   1535       1.22    bouyer #define ICH_FLASH_FPR0     0x0074
   1536       1.22    bouyer #define ICH_FLASH_FPR1     0x0078
   1537       1.22    bouyer #define ICH_FLASH_SSFSTS   0x0090
   1538       1.22    bouyer #define ICH_FLASH_SSFCTL   0x0092
   1539       1.22    bouyer #define ICH_FLASH_PREOP    0x0094
   1540       1.22    bouyer #define ICH_FLASH_OPTYPE   0x0096
   1541       1.22    bouyer #define ICH_FLASH_OPMENU   0x0098
   1542       1.22    bouyer 
   1543  1.105.2.1  pgoyette #define ICH_FLASH_REG_MAPSIZE      0x00a0
   1544       1.22    bouyer #define ICH_FLASH_SECTOR_SIZE      4096
   1545  1.105.2.1  pgoyette #define ICH_GFPREG_BASE_MASK       0x1fff
   1546  1.105.2.1  pgoyette #define ICH_FLASH_LINEAR_ADDR_MASK 0x00ffffff
   1547       1.25   msaitoh 
   1548       1.25   msaitoh #define ICH_NVM_SIG_WORD	0x13
   1549       1.25   msaitoh #define ICH_NVM_SIG_MASK	0xc000
   1550       1.50   msaitoh #define ICH_NVM_VALID_SIG_MASK	0xc0
   1551       1.50   msaitoh #define ICH_NVM_SIG_VALUE	0x80
   1552       1.38   msaitoh 
   1553       1.89   msaitoh #define NVM_SIZE_MULTIPLIER 4096	/* multiplier for NVMS field */
   1554       1.89   msaitoh #define WM_PCH_SPT_FLASHOFFSET	0xe000	/* offset of NVM access regs(PCH_SPT)*/
   1555       1.89   msaitoh 
   1556       1.38   msaitoh /* for PCI express Capability registers */
   1557       1.52   msaitoh #define	WM_PCIE_DCSR2_16MS	0x00000005
   1558       1.48    bouyer 
   1559       1.63   msaitoh /* SFF SFP ROM data */
   1560       1.63   msaitoh #define SFF_SFP_ID_OFF		0x00
   1561       1.63   msaitoh #define SFF_SFP_ID_UNKNOWN	0x00	/* Unknown */
   1562       1.63   msaitoh #define SFF_SFP_ID_SFF		0x02	/* Module soldered to motherboard */
   1563       1.63   msaitoh #define SFF_SFP_ID_SFP		0x03	/* SFP transceiver */
   1564       1.63   msaitoh 
   1565       1.63   msaitoh #define SFF_SFP_ETH_FLAGS_OFF	0x06
   1566       1.63   msaitoh #define SFF_SFP_ETH_FLAGS_1000SX	0x01
   1567       1.63   msaitoh #define SFF_SFP_ETH_FLAGS_1000LX	0x02
   1568       1.63   msaitoh #define SFF_SFP_ETH_FLAGS_1000CX	0x04
   1569       1.63   msaitoh #define SFF_SFP_ETH_FLAGS_1000T		0x08
   1570       1.63   msaitoh #define SFF_SFP_ETH_FLAGS_100FX		0x10
   1571       1.63   msaitoh 
   1572       1.77   msaitoh /* I21[01] PHY related definitions */
   1573       1.77   msaitoh #define GS40G_PAGE_SELECT	0x16
   1574       1.77   msaitoh #define GS40G_PAGE_SHIFT	16
   1575       1.77   msaitoh #define GS40G_OFFSET_MASK	0xffff
   1576       1.77   msaitoh #define GS40G_PHY_PLL_FREQ_PAGE	0xfc0000
   1577       1.77   msaitoh #define GS40G_PHY_PLL_FREQ_REG	0x000e
   1578       1.77   msaitoh #define GS40G_PHY_PLL_UNCONF	0xff
   1579       1.63   msaitoh 
   1580       1.48    bouyer /* advanced TX descriptor for 82575 and newer */
   1581       1.48    bouyer typedef union nq_txdesc {
   1582       1.48    bouyer 	struct {
   1583       1.48    bouyer 		uint64_t nqtxd_addr;
   1584       1.48    bouyer 		uint32_t nqtxd_cmdlen;
   1585       1.48    bouyer 		uint32_t nqtxd_fields;
   1586       1.48    bouyer 	} nqtx_data;
   1587       1.48    bouyer 	struct {
   1588       1.48    bouyer 		uint32_t nqtxc_vl_len;
   1589       1.48    bouyer 		uint32_t nqtxc_sn;
   1590       1.48    bouyer 		uint32_t nqtxc_cmd;
   1591       1.48    bouyer 		uint32_t nqtxc_mssidx;
   1592       1.48    bouyer 	} nqrx_ctx;
   1593       1.48    bouyer } __packed nq_txdesc_t;
   1594       1.48    bouyer 
   1595       1.48    bouyer 
   1596       1.48    bouyer /* Commands for nqtxd_cmdlen and nqtxc_cmd */
   1597       1.48    bouyer #define	NQTX_CMD_EOP	(1U << 24)	/* end of packet */
   1598       1.48    bouyer #define	NQTX_CMD_IFCS	(1U << 25)	/* insert FCS */
   1599       1.48    bouyer #define	NQTX_CMD_RS	(1U << 27)	/* report status */
   1600       1.48    bouyer #define	NQTX_CMD_DEXT	(1U << 29)	/* descriptor extension */
   1601       1.48    bouyer #define	NQTX_CMD_VLE	(1U << 30)	/* VLAN enable */
   1602       1.48    bouyer #define	NQTX_CMD_TSE	(1U << 31)	/* TCP segmentation enable */
   1603       1.48    bouyer 
   1604       1.48    bouyer /* Descriptor types (if DEXT is set) */
   1605       1.48    bouyer #define	NQTX_DTYP_C	(2U << 20)	/* context */
   1606       1.48    bouyer #define	NQTX_DTYP_D	(3U << 20)	/* data */
   1607       1.48    bouyer 
   1608       1.48    bouyer #define NQTXD_FIELDS_IDX_SHIFT		4	/* context index shift */
   1609       1.48    bouyer #define NQTXD_FIELDS_IDX_MASK		0xf
   1610       1.48    bouyer #define NQTXD_FIELDS_PAYLEN_SHIFT	14	/* payload len shift */
   1611       1.48    bouyer #define NQTXD_FIELDS_PAYLEN_MASK	0x3ffff
   1612       1.48    bouyer 
   1613       1.48    bouyer #define NQTXD_FIELDS_IXSM		(1U << 8) /* do IP checksum */
   1614       1.48    bouyer #define NQTXD_FIELDS_TUXSM		(1U << 9) /* do TCP/UDP checksum */
   1615       1.48    bouyer 
   1616       1.48    bouyer #define NQTXC_VLLEN_IPLEN_SHIFT		0	/* IP header len */
   1617       1.48    bouyer #define NQTXC_VLLEN_IPLEN_MASK		0x1ff
   1618       1.48    bouyer #define NQTXC_VLLEN_MACLEN_SHIFT	9	/* MAC header len */
   1619       1.48    bouyer #define NQTXC_VLLEN_MACLEN_MASK		0x7f
   1620       1.48    bouyer #define NQTXC_VLLEN_VLAN_SHIFT		16	/* vlan number */
   1621       1.48    bouyer #define NQTXC_VLLEN_VLAN_MASK		0xffff
   1622       1.48    bouyer 
   1623       1.48    bouyer #define NQTXC_CMD_MKRLOC_SHIFT		0	/* IP checksum offset */
   1624       1.48    bouyer #define NQTXC_CMD_MKRLOC_MASK		0x1ff
   1625       1.48    bouyer #define NQTXC_CMD_SNAP			(1U << 9)
   1626       1.48    bouyer #define NQTXC_CMD_IP4			(1U << 10)
   1627       1.48    bouyer #define NQTXC_CMD_IP6			(0U << 10)
   1628       1.48    bouyer #define NQTXC_CMD_TCP			(1U << 11)
   1629       1.48    bouyer #define NQTXC_CMD_UDP			(0U << 11)
   1630       1.48    bouyer #define NQTXC_MSSIDX_IDX_SHIFT		4	/* context index shift */
   1631       1.48    bouyer #define NQTXC_MSSIDX_IDX_MASK		0xf
   1632       1.48    bouyer #define NQTXC_MSSIDX_L4LEN_SHIFT	8	/* L4 header len shift */
   1633       1.48    bouyer #define NQTXC_MSSIDX_L4LEN_MASK		0xff
   1634       1.48    bouyer #define NQTXC_MSSIDX_MSS_SHIFT		16	/* MSS */
   1635       1.48    bouyer #define NQTXC_MSSIDX_MSS_MASK		0xffff
   1636