xref: /onnv-gate/usr/src/uts/common/io/igb/igb_82575.h (revision 12111:a462ebfcbf99)
15779Sxy150489 /*
25779Sxy150489  * CDDL HEADER START
35779Sxy150489  *
45779Sxy150489  * The contents of this file are subject to the terms of the
55779Sxy150489  * Common Development and Distribution License (the "License").
65779Sxy150489  * You may not use this file except in compliance with the License.
75779Sxy150489  *
8*12111SGuoqing.Zhu@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*12111SGuoqing.Zhu@Sun.COM  * or http://www.opensolaris.org/os/licensing.
105779Sxy150489  * See the License for the specific language governing permissions
115779Sxy150489  * and limitations under the License.
125779Sxy150489  *
13*12111SGuoqing.Zhu@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*12111SGuoqing.Zhu@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
155779Sxy150489  * If applicable, add the following below this CDDL HEADER, with the
165779Sxy150489  * fields enclosed by brackets "[]" replaced with your own identifying
175779Sxy150489  * information: Portions Copyright [yyyy] [name of copyright owner]
185779Sxy150489  *
195779Sxy150489  * CDDL HEADER END
205779Sxy150489  */
215779Sxy150489 
225779Sxy150489 /*
23*12111SGuoqing.Zhu@Sun.COM  * Copyright(c) 2007-2010 Intel Corporation. All rights reserved.
245779Sxy150489  */
255779Sxy150489 
26*12111SGuoqing.Zhu@Sun.COM /*
27*12111SGuoqing.Zhu@Sun.COM  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
28*12111SGuoqing.Zhu@Sun.COM  */
29*12111SGuoqing.Zhu@Sun.COM 
30*12111SGuoqing.Zhu@Sun.COM /* IntelVersion: 1.88.2.1 v3_3_14_3_BHSW1 */
315812Sxy150489 
325779Sxy150489 #ifndef _IGB_82575_H
335779Sxy150489 #define	_IGB_82575_H
345779Sxy150489 
355779Sxy150489 #ifdef __cplusplus
365779Sxy150489 extern "C" {
375779Sxy150489 #endif
385779Sxy150489 
398571SChenlu.Chen@Sun.COM #define	ID_LED_DEFAULT_82575_SERDES	((ID_LED_DEF1_DEF2 << 12) | \
408571SChenlu.Chen@Sun.COM 					(ID_LED_DEF1_DEF2 <<  8) | \
418571SChenlu.Chen@Sun.COM 					(ID_LED_DEF1_DEF2 <<  4) | \
428571SChenlu.Chen@Sun.COM 					(ID_LED_OFF1_ON2))
438571SChenlu.Chen@Sun.COM 
445779Sxy150489 /*
455779Sxy150489  * Receive Address Register Count
465779Sxy150489  * Number of high/low register pairs in the RAR.  The RAR (Receive Address
475779Sxy150489  * Registers) holds the directed and multicast addresses that we monitor.
485779Sxy150489  * These entries are also used for MAC-based filtering.
495779Sxy150489  */
508571SChenlu.Chen@Sun.COM /*
518571SChenlu.Chen@Sun.COM  * For 82576, there are an additional set of RARs that begin at an offset
528571SChenlu.Chen@Sun.COM  * separate from the first set of RARs.
538571SChenlu.Chen@Sun.COM  */
548571SChenlu.Chen@Sun.COM #define	E1000_RAR_ENTRIES_82575		16
558571SChenlu.Chen@Sun.COM #define	E1000_RAR_ENTRIES_82576		24
5611155SJason.Xu@Sun.COM #define	E1000_RAR_ENTRIES_82580		24
5711155SJason.Xu@Sun.COM #define	E1000_SW_SYNCH_MB		0x00000100
5811155SJason.Xu@Sun.COM #define	E1000_STAT_DEV_RST_SET		0x00100000
5911155SJason.Xu@Sun.COM #define	E1000_CTRL_DEV_RST		0x20000000
605779Sxy150489 
615779Sxy150489 #ifdef E1000_BIT_FIELDS
625779Sxy150489 struct e1000_adv_data_desc {
6311155SJason.Xu@Sun.COM 	__le64 buffer_addr;	/* Address of the descriptor's data buffer */
645779Sxy150489 	union {
655779Sxy150489 		u32 data;
665779Sxy150489 		struct {
675779Sxy150489 			u32 datalen	:16;	/* Data buffer length */
685779Sxy150489 			u32 rsvd	:4;
695779Sxy150489 			u32 dtyp	:4;	/* Descriptor type */
705779Sxy150489 			u32 dcmd	:8;	/* Descriptor command */
715779Sxy150489 		} config;
725779Sxy150489 	} lower;
735779Sxy150489 	union {
745779Sxy150489 		u32 data;
755779Sxy150489 		struct {
765779Sxy150489 			u32 status	:4;	/* Descriptor status */
775779Sxy150489 			u32 idx		:4;
785779Sxy150489 			u32 popts	:6;	/* Packet Options */
795779Sxy150489 			u32 paylen	:18;	/* Payload length */
805779Sxy150489 		} options;
815779Sxy150489 	} upper;
825779Sxy150489 };
835779Sxy150489 
845779Sxy150489 #define	E1000_TXD_DTYP_ADV_C	0x2	/* Advanced Context Descriptor */
855779Sxy150489 #define	E1000_TXD_DTYP_ADV_D	0x3	/* Advanced Data Descriptor */
865779Sxy150489 #define	E1000_ADV_TXD_CMD_DEXT	0x20	/* Descriptor extension (0 = legacy) */
875779Sxy150489 #define	E1000_ADV_TUCMD_IPV4	0x2	/* IP Packet Type: 1=IPv4 */
885779Sxy150489 #define	E1000_ADV_TUCMD_IPV6	0x0	/* IP Packet Type: 0=IPv6 */
895779Sxy150489 #define	E1000_ADV_TUCMD_L4T_UDP	0x0	/* L4 Packet TYPE of UDP */
905779Sxy150489 #define	E1000_ADV_TUCMD_L4T_TCP	0x4	/* L4 Packet TYPE of TCP */
915779Sxy150489 #define	E1000_ADV_TUCMD_MKRREQ	0x10	/* Indicates markers are required */
925779Sxy150489 #define	E1000_ADV_DCMD_EOP	0x1	/* End of Packet */
935779Sxy150489 #define	E1000_ADV_DCMD_IFCS	0x2	/* Insert FCS (Ethernet CRC) */
945779Sxy150489 #define	E1000_ADV_DCMD_RS	0x8	/* Report Status */
955779Sxy150489 #define	E1000_ADV_DCMD_VLE	0x40	/* Add VLAN tag */
965779Sxy150489 #define	E1000_ADV_DCMD_TSE	0x80	/* TCP Seg enable */
975779Sxy150489 /* Extended Device Control */
985779Sxy150489 #define	E1000_CTRL_EXT_NSICR	0x00000001 /* Disable Intr Clear all on read */
995779Sxy150489 
1005779Sxy150489 struct e1000_adv_context_desc {
1015779Sxy150489 	union {
1025779Sxy150489 		u32 ip_config;
1035779Sxy150489 		struct {
1045779Sxy150489 			u32 iplen	:9;
1055779Sxy150489 			u32 maclen	:7;
1065779Sxy150489 			u32 vlan_tag	:16;
1075779Sxy150489 		} fields;
1085779Sxy150489 	} ip_setup;
1095779Sxy150489 	u32 seq_num;
1105779Sxy150489 	union {
1115779Sxy150489 		u64 l4_config;
1125779Sxy150489 		struct {
1135779Sxy150489 			u32 mkrloc	:9;
1145779Sxy150489 			u32 tucmd	:11;
1155779Sxy150489 			u32 dtyp	:4;
1165779Sxy150489 			u32 adv		:8;
1175779Sxy150489 			u32 rsvd	:4;
1185779Sxy150489 			u32 idx		:4;
1195779Sxy150489 			u32 l4len	:8;
1205779Sxy150489 			u32 mss		:16;
1215779Sxy150489 		} fields;
1225779Sxy150489 	} l4_setup;
1235779Sxy150489 };
1245779Sxy150489 #endif
1255779Sxy150489 
1265779Sxy150489 /* SRRCTL bit definitions */
1275779Sxy150489 #define	E1000_SRRCTL_BSIZEPKT_SHIFT			10 /* Shift _right_ */
1285779Sxy150489 #define	E1000_SRRCTL_BSIZEHDRSIZE_MASK			0x00000F00
1295779Sxy150489 #define	E1000_SRRCTL_BSIZEHDRSIZE_SHIFT			2 /* Shift _left_ */
1305779Sxy150489 #define	E1000_SRRCTL_DESCTYPE_LEGACY			0x00000000
1315779Sxy150489 #define	E1000_SRRCTL_DESCTYPE_ADV_ONEBUF		0x02000000
1325779Sxy150489 #define	E1000_SRRCTL_DESCTYPE_HDR_SPLIT			0x04000000
1335779Sxy150489 #define	E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS		0x0A000000
1345779Sxy150489 #define	E1000_SRRCTL_DESCTYPE_HDR_REPLICATION		0x06000000
1355779Sxy150489 #define	E1000_SRRCTL_DESCTYPE_HDR_REPLICATION_LARGE_PKT	0x08000000
1365779Sxy150489 #define	E1000_SRRCTL_DESCTYPE_MASK			0x0E000000
13711155SJason.Xu@Sun.COM #define	E1000_SRRCTL_TIMESTAMP				0x40000000
13810319SJason.Xu@Sun.COM #define	E1000_SRRCTL_DROP_EN				0x80000000
1395779Sxy150489 
1405779Sxy150489 #define	E1000_SRRCTL_BSIZEPKT_MASK	0x0000007F
1415779Sxy150489 #define	E1000_SRRCTL_BSIZEHDR_MASK	0x00003F00
1425779Sxy150489 
1435779Sxy150489 #define	E1000_TX_HEAD_WB_ENABLE		0x1
1445779Sxy150489 #define	E1000_TX_SEQNUM_WB_ENABLE	0x2
1455779Sxy150489 
1465779Sxy150489 #define	E1000_MRQC_ENABLE_RSS_4Q		0x00000002
1478571SChenlu.Chen@Sun.COM #define	E1000_MRQC_ENABLE_VMDQ			0x00000003
14810319SJason.Xu@Sun.COM #define	E1000_MRQC_ENABLE_VMDQ_RSS_2Q		0x80000000
1495779Sxy150489 #define	E1000_MRQC_RSS_FIELD_IPV4_UDP		0x00400000
1505779Sxy150489 #define	E1000_MRQC_RSS_FIELD_IPV6_UDP		0x00800000
1515779Sxy150489 #define	E1000_MRQC_RSS_FIELD_IPV6_UDP_EX	0x01000000
15211155SJason.Xu@Sun.COM #define	E1000_MRQC_ENABLE_RSS_8Q		0x00000002
1535779Sxy150489 
1548571SChenlu.Chen@Sun.COM #define	E1000_VMRCTL_MIRROR_PORT_SHIFT		8
1558571SChenlu.Chen@Sun.COM #define	E1000_VMRCTL_MIRROR_DSTPORT_MASK (7 << E1000_VMRCTL_MIRROR_PORT_SHIFT)
1568571SChenlu.Chen@Sun.COM #define	E1000_VMRCTL_POOL_MIRROR_ENABLE		(1 << 0)
1578571SChenlu.Chen@Sun.COM #define	E1000_VMRCTL_UPLINK_MIRROR_ENABLE	(1 << 1)
1588571SChenlu.Chen@Sun.COM #define	E1000_VMRCTL_DOWNLINK_MIRROR_ENABLE	(1 << 2)
1598571SChenlu.Chen@Sun.COM 
1605779Sxy150489 #define	E1000_EICR_TX_QUEUE ( \
1615779Sxy150489     E1000_EICR_TX_QUEUE0 |    \
1625779Sxy150489     E1000_EICR_TX_QUEUE1 |    \
1635779Sxy150489     E1000_EICR_TX_QUEUE2 |    \
1645779Sxy150489     E1000_EICR_TX_QUEUE3)
1655779Sxy150489 
1665779Sxy150489 #define	E1000_EICR_RX_QUEUE ( \
1675779Sxy150489     E1000_EICR_RX_QUEUE0 |    \
1685779Sxy150489     E1000_EICR_RX_QUEUE1 |    \
1695779Sxy150489     E1000_EICR_RX_QUEUE2 |    \
1705779Sxy150489     E1000_EICR_RX_QUEUE3)
1715779Sxy150489 
1725779Sxy150489 #define	E1000_EIMS_RX_QUEUE E1000_EICR_RX_QUEUE
1735779Sxy150489 #define	E1000_EIMS_TX_QUEUE E1000_EICR_TX_QUEUE
1745779Sxy150489 
1755779Sxy150489 #define	EIMS_ENABLE_MASK ( \
1765779Sxy150489     E1000_EIMS_RX_QUEUE  | \
1775779Sxy150489     E1000_EIMS_TX_QUEUE  | \
1785779Sxy150489     E1000_EIMS_TCP_TIMER | \
1795779Sxy150489     E1000_EIMS_OTHER)
1805779Sxy150489 
1815779Sxy150489 /* Immediate Interrupt Rx (A.K.A. Low Latency Interrupt) */
1825779Sxy150489 #define	E1000_IMIR_PORT_IM_EN	0x00010000	/* TCP port enable */
1835779Sxy150489 #define	E1000_IMIR_PORT_BP	0x00020000	/* TCP port check bypass */
1845779Sxy150489 #define	E1000_IMIREXT_SIZE_BP	0x00001000	/* Packet size bypass */
1855779Sxy150489 #define	E1000_IMIREXT_CTRL_URG	0x00002000	/* Check URG bit in header */
1865779Sxy150489 #define	E1000_IMIREXT_CTRL_ACK	0x00004000	/* Check ACK bit in header */
1875779Sxy150489 #define	E1000_IMIREXT_CTRL_PSH	0x00008000	/* Check PSH bit in header */
1885779Sxy150489 #define	E1000_IMIREXT_CTRL_RST	0x00010000	/* Check RST bit in header */
1895779Sxy150489 #define	E1000_IMIREXT_CTRL_SYN	0x00020000	/* Check SYN bit in header */
1905779Sxy150489 #define	E1000_IMIREXT_CTRL_FIN	0x00040000	/* Check FIN bit in header */
1915779Sxy150489 #define	E1000_IMIREXT_CTRL_BP	0x00080000	/* Bypass check of ctrl bits */
1925779Sxy150489 
1935779Sxy150489 /* Receive Descriptor - Advanced */
1945779Sxy150489 union e1000_adv_rx_desc {
1955779Sxy150489 	struct {
19611155SJason.Xu@Sun.COM 		__le64 pkt_addr;	/* Packet buffer address */
19711155SJason.Xu@Sun.COM 		__le64 hdr_addr;	/* Header buffer address */
1985779Sxy150489 	} read;
1995779Sxy150489 	struct {
2005779Sxy150489 		struct {
2018571SChenlu.Chen@Sun.COM 			union {
20211155SJason.Xu@Sun.COM 				__le32 data;
2038571SChenlu.Chen@Sun.COM 				struct {
2048571SChenlu.Chen@Sun.COM 					/* RSS type, Packet type */
20511155SJason.Xu@Sun.COM 					__le16 pkt_info;
2068571SChenlu.Chen@Sun.COM 					/* Split Header, header buffer length */
20711155SJason.Xu@Sun.COM 					__le16 hdr_info;
2088571SChenlu.Chen@Sun.COM 				} hs_rss;
2095779Sxy150489 			} lo_dword;
2105779Sxy150489 			union {
21111155SJason.Xu@Sun.COM 				__le32 rss;	/* RSS Hash */
2125779Sxy150489 				struct {
21311155SJason.Xu@Sun.COM 					__le16 ip_id;	/* IP id */
21411155SJason.Xu@Sun.COM 					__le16 csum;	/* Packet Checksum */
2155779Sxy150489 				} csum_ip;
2165779Sxy150489 			} hi_dword;
2175779Sxy150489 		} lower;
2185779Sxy150489 		struct {
21911155SJason.Xu@Sun.COM 			__le32 status_error;	/* ext status/error */
22011155SJason.Xu@Sun.COM 			__le16 length;		/* Packet length */
22111155SJason.Xu@Sun.COM 			__le16 vlan;		/* VLAN tag */
2225779Sxy150489 		} upper;
2235779Sxy150489 	} wb;		/* writeback */
2245779Sxy150489 };
2255779Sxy150489 
22610319SJason.Xu@Sun.COM #define	E1000_RXDADV_RSSTYPE_MASK	0x0000000F
2275779Sxy150489 #define	E1000_RXDADV_RSSTYPE_SHIFT	12
2285779Sxy150489 #define	E1000_RXDADV_HDRBUFLEN_MASK	0x7FE0
2295779Sxy150489 #define	E1000_RXDADV_HDRBUFLEN_SHIFT	5
2305779Sxy150489 #define	E1000_RXDADV_SPLITHEADER_EN	0x00001000
2315779Sxy150489 #define	E1000_RXDADV_SPH		0x8000
23211155SJason.Xu@Sun.COM #define	E1000_RXDADV_STAT_TS		0x10000 /* Pkt was time stamped */
23311155SJason.Xu@Sun.COM #define	E1000_RXDADV_STAT_TSIP		0x08000 /* timestamp in packet */
2348571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_ERR_HBO		0x00800000
2355779Sxy150489 
2365779Sxy150489 /* RSS Hash results */
2375779Sxy150489 #define	E1000_RXDADV_RSSTYPE_NONE	0x00000000
2385779Sxy150489 #define	E1000_RXDADV_RSSTYPE_IPV4_TCP	0x00000001
2395779Sxy150489 #define	E1000_RXDADV_RSSTYPE_IPV4	0x00000002
2405779Sxy150489 #define	E1000_RXDADV_RSSTYPE_IPV6_TCP	0x00000003
2415779Sxy150489 #define	E1000_RXDADV_RSSTYPE_IPV6_EX	0x00000004
2425779Sxy150489 #define	E1000_RXDADV_RSSTYPE_IPV6	0x00000005
2435779Sxy150489 #define	E1000_RXDADV_RSSTYPE_IPV6_TCP_EX 0x00000006
2445779Sxy150489 #define	E1000_RXDADV_RSSTYPE_IPV4_UDP	0x00000007
2455779Sxy150489 #define	E1000_RXDADV_RSSTYPE_IPV6_UDP	0x00000008
2465779Sxy150489 #define	E1000_RXDADV_RSSTYPE_IPV6_UDP_EX 0x00000009
2475779Sxy150489 
2485779Sxy150489 /* RSS Packet Types as indicated in the receive descriptor */
2495779Sxy150489 #define	E1000_RXDADV_PKTTYPE_NONE	0x00000000
2505779Sxy150489 #define	E1000_RXDADV_PKTTYPE_IPV4	0x00000010 /* IPV4 hdr present */
2515779Sxy150489 #define	E1000_RXDADV_PKTTYPE_IPV4_EX	0x00000020 /* IPV4 hdr + extensions */
2525779Sxy150489 #define	E1000_RXDADV_PKTTYPE_IPV6	0x00000040 /* IPV6 hdr present */
2535779Sxy150489 #define	E1000_RXDADV_PKTTYPE_IPV6_EX	0x00000080 /* IPV6 hdr + extensions */
2545779Sxy150489 #define	E1000_RXDADV_PKTTYPE_TCP	0x00000100 /* TCP hdr present */
2555779Sxy150489 #define	E1000_RXDADV_PKTTYPE_UDP	0x00000200 /* UDP hdr present */
2565779Sxy150489 #define	E1000_RXDADV_PKTTYPE_SCTP	0x00000400 /* SCTP hdr present */
2575779Sxy150489 #define	E1000_RXDADV_PKTTYPE_NFS	0x00000800 /* NFS hdr present */
2585779Sxy150489 
2598571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_PKTTYPE_IPSEC_ESP	0x00001000 /* IPSec ESP */
2608571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_PKTTYPE_IPSEC_AH	0x00002000 /* IPSec AH */
2618571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_PKTTYPE_LINKSEC	0x00004000 /* LinkSec Encap */
2628571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_PKTTYPE_ETQF	0x00008000 /* PKTTYPE is ETQF index */
2638571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_PKTTYPE_ETQF_MASK	0x00000070 /* ETQF has 8 indices */
2648571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_PKTTYPE_ETQF_SHIFT	4 /* Right-shift 4 bits */
2658571SChenlu.Chen@Sun.COM 
2668571SChenlu.Chen@Sun.COM /* LinkSec results */
2678571SChenlu.Chen@Sun.COM /* Security Processing bit Indication */
2688571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_LNKSEC_STATUS_SECP		0x00020000
2698571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_LNKSEC_ERROR_BIT_MASK	0x18000000
2708571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_LNKSEC_ERROR_NO_SA_MATCH	0x08000000
2718571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_LNKSEC_ERROR_REPLAY_ERROR	0x10000000
2728571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_LNKSEC_ERROR_BAD_SIG	0x18000000
2738571SChenlu.Chen@Sun.COM 
2748571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_IPSEC_STATUS_SECP		0x00020000
2758571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_IPSEC_ERROR_BIT_MASK	0x18000000
2768571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_IPSEC_ERROR_INVALID_PROTOCOL	0x08000000
2778571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_IPSEC_ERROR_INVALID_LENGTH		0x10000000
2788571SChenlu.Chen@Sun.COM #define	E1000_RXDADV_IPSEC_ERROR_AUTHENTICATION_FAILED	0x18000000
2798571SChenlu.Chen@Sun.COM 
2805779Sxy150489 /* Transmit Descriptor - Advanced */
2815779Sxy150489 union e1000_adv_tx_desc {
2825779Sxy150489 	struct {
28311155SJason.Xu@Sun.COM 		__le64 buffer_addr;	/* Address of descriptor's data buf */
28411155SJason.Xu@Sun.COM 		__le32 cmd_type_len;
28511155SJason.Xu@Sun.COM 		__le32 olinfo_status;
2865779Sxy150489 	} read;
2875779Sxy150489 	struct {
28811155SJason.Xu@Sun.COM 		__le64 rsvd;	/* Reserved */
28911155SJason.Xu@Sun.COM 		__le32 nxtseq_seed;
29011155SJason.Xu@Sun.COM 		__le32 status;
2915779Sxy150489 	} wb;
2925779Sxy150489 };
2935779Sxy150489 
2945779Sxy150489 /* Adv Transmit Descriptor Config Masks */
2955779Sxy150489 #define	E1000_ADVTXD_DTYP_CTXT	0x00200000 /* Advanced Context Descriptor */
2965779Sxy150489 #define	E1000_ADVTXD_DTYP_DATA	0x00300000 /* Advanced Data Descriptor */
2975779Sxy150489 #define	E1000_ADVTXD_DCMD_EOP	0x01000000 /* End of Packet */
2985779Sxy150489 #define	E1000_ADVTXD_DCMD_IFCS	0x02000000 /* Insert FCS (Ethernet CRC) */
2995779Sxy150489 #define	E1000_ADVTXD_DCMD_RS	0x08000000 /* Report Status */
3005779Sxy150489 #define	E1000_ADVTXD_DCMD_DDTYP_ISCSI 0x10000000 /* DDP hdr type or iSCSI */
3015779Sxy150489 #define	E1000_ADVTXD_DCMD_DEXT	0x20000000 /* Descriptor extension (1=Adv) */
3025779Sxy150489 #define	E1000_ADVTXD_DCMD_VLE	0x40000000 /* VLAN pkt enable */
3035779Sxy150489 #define	E1000_ADVTXD_DCMD_TSE	0x80000000 /* TCP Seg enable */
3048571SChenlu.Chen@Sun.COM #define	E1000_ADVTXD_MAC_LINKSEC 0x00040000 /* Apply LinkSec on packet */
3055779Sxy150489 #define	E1000_ADVTXD_MAC_TSTAMP	0x00080000 /* IEEE1588 Timestamp packet */
3065779Sxy150489 #define	E1000_ADVTXD_STAT_SN_CRC 0x00000002 /* NXTSEQ/SEED present in WB */
3075779Sxy150489 #define	E1000_ADVTXD_IDX_SHIFT	4	/* Adv desc Index shift */
3085779Sxy150489 #define	E1000_ADVTXD_POPTS_ISCO_1ST	0x00000000 /* 1st TSO of iSCSI PDU */
3095779Sxy150489 #define	E1000_ADVTXD_POPTS_ISCO_MDL	0x00000800 /* Middle TSO of iSCSI PDU */
3105779Sxy150489 #define	E1000_ADVTXD_POPTS_ISCO_LAST	0x00001000 /* Last TSO of iSCSI PDU */
3115779Sxy150489 /* 1st&Last TSO-full iSCSI PDU */
3125779Sxy150489 #define	E1000_ADVTXD_POPTS_ISCO_FULL	0x00001800
3135779Sxy150489 #define	E1000_ADVTXD_POPTS_IPSEC	0x00000400 /* IPSec offload request */
3145779Sxy150489 #define	E1000_ADVTXD_PAYLEN_SHIFT	14	/* Adv desc PAYLEN shift */
3155779Sxy150489 
3165779Sxy150489 /* Context descriptors */
3175779Sxy150489 struct e1000_adv_tx_context_desc {
31811155SJason.Xu@Sun.COM 	__le32 vlan_macip_lens;
31911155SJason.Xu@Sun.COM 	__le32 seqnum_seed;
32011155SJason.Xu@Sun.COM 	__le32 type_tucmd_mlhl;
32111155SJason.Xu@Sun.COM 	__le32 mss_l4len_idx;
3225779Sxy150489 };
3235779Sxy150489 
3245779Sxy150489 #define	E1000_ADVTXD_MACLEN_SHIFT	9 /* Adv ctxt desc mac len shift */
3255779Sxy150489 #define	E1000_ADVTXD_VLAN_SHIFT		16 /* Adv ctxt vlan tag shift */
3265779Sxy150489 #define	E1000_ADVTXD_TUCMD_IPV4		0x00000400 /* IP Packet Type: 1=IPv4 */
3275779Sxy150489 #define	E1000_ADVTXD_TUCMD_IPV6		0x00000000 /* IP Packet Type: 0=IPv6 */
3285779Sxy150489 #define	E1000_ADVTXD_TUCMD_L4T_UDP	0x00000000 /* L4 Packet TYPE of UDP */
3295779Sxy150489 #define	E1000_ADVTXD_TUCMD_L4T_TCP	0x00000800 /* L4 Packet TYPE of TCP */
33010319SJason.Xu@Sun.COM #define	E1000_ADVTXD_TUCMD_L4T_SCTP	0x00001000 /* L4 Packet TYPE of SCTP */
3315779Sxy150489 #define	E1000_ADVTXD_TUCMD_IPSEC_TYPE_ESP	0x00002000 /* IPSec Type ESP */
3325779Sxy150489 /* IPSec Encrypt Enable for ESP */
3335779Sxy150489 #define	E1000_ADVTXD_TUCMD_IPSEC_ENCRYPT_EN	0x00004000
3345779Sxy150489 /* Req requires Markers and CRC */
3355779Sxy150489 #define	E1000_ADVTXD_TUCMD_MKRREQ	0x00002000
3365779Sxy150489 #define	E1000_ADVTXD_L4LEN_SHIFT	8	/* Adv ctxt L4LEN shift */
3375779Sxy150489 #define	E1000_ADVTXD_MSS_SHIFT		16	/* Adv ctxt MSS shift */
3385779Sxy150489 /* Adv ctxt IPSec SA IDX mask */
3395779Sxy150489 #define	E1000_ADVTXD_IPSEC_SA_INDEX_MASK	0x000000FF
3405779Sxy150489 /* Adv ctxt IPSec ESP len mask */
3415779Sxy150489 #define	E1000_ADVTXD_IPSEC_ESP_LEN_MASK		0x000000FF
3425779Sxy150489 
3435779Sxy150489 /* Additional Transmit Descriptor Control definitions */
3445779Sxy150489 /* Enable specific Tx Queue */
3455779Sxy150489 #define	E1000_TXDCTL_QUEUE_ENABLE	0x02000000
3465779Sxy150489 /* Tx Desc. write-back flushing */
3475779Sxy150489 #define	E1000_TXDCTL_SWFLSH		0x04000000
3485779Sxy150489 /* Tx Queue Arbitration Priority 0=low, 1=high */
3495779Sxy150489 #define	E1000_TXDCTL_PRIORITY		0x08000000
3505779Sxy150489 
3515779Sxy150489 /* Additional Receive Descriptor Control definitions */
3525779Sxy150489 /* Enable specific Rx Queue */
3535779Sxy150489 #define	E1000_RXDCTL_QUEUE_ENABLE	0x02000000
3545779Sxy150489 /* Rx Desc. write-back flushing */
3555779Sxy150489 #define	E1000_RXDCTL_SWFLSH		0x04000000
3565779Sxy150489 
3575779Sxy150489 /* Direct Cache Access (DCA) definitions */
3585779Sxy150489 #define	E1000_DCA_CTRL_DCA_ENABLE	0x00000000	/* DCA Enable */
3595779Sxy150489 #define	E1000_DCA_CTRL_DCA_DISABLE	0x00000001	/* DCA Disable */
3605779Sxy150489 
3615779Sxy150489 #define	E1000_DCA_CTRL_DCA_MODE_CB1	0x00	/* DCA Mode CB1 */
3625779Sxy150489 #define	E1000_DCA_CTRL_DCA_MODE_CB2	0x02	/* DCA Mode CB2 */
3635779Sxy150489 
3645779Sxy150489 #define	E1000_DCA_RXCTRL_CPUID_MASK 0x0000001F	/* Rx CPUID Mask */
3655779Sxy150489 #define	E1000_DCA_RXCTRL_DESC_DCA_EN (1 << 5) /* DCA Rx Desc enable */
3665779Sxy150489 #define	E1000_DCA_RXCTRL_HEAD_DCA_EN (1 << 6) /* DCA Rx Desc header enable */
3675779Sxy150489 #define	E1000_DCA_RXCTRL_DATA_DCA_EN (1 << 7) /* DCA Rx Desc payload enable */
3685779Sxy150489 
3695779Sxy150489 #define	E1000_DCA_TXCTRL_CPUID_MASK 0x0000001F	/* Tx CPUID Mask */
3705779Sxy150489 #define	E1000_DCA_TXCTRL_DESC_DCA_EN (1 << 5)	/* DCA Tx Desc enable */
3715779Sxy150489 #define	E1000_DCA_TXCTRL_TX_WB_RO_EN (1 << 11)	/* Tx Desc writeback RO bit */
3725779Sxy150489 
3738571SChenlu.Chen@Sun.COM #define	E1000_DCA_TXCTRL_CPUID_MASK_82576 0xFF000000 /* Tx CPUID Mask */
3748571SChenlu.Chen@Sun.COM #define	E1000_DCA_RXCTRL_CPUID_MASK_82576 0xFF000000 /* Rx CPUID Mask */
37510319SJason.Xu@Sun.COM #define	E1000_DCA_TXCTRL_CPUID_SHIFT_82576 24 /* Tx CPUID */
37610319SJason.Xu@Sun.COM #define	E1000_DCA_RXCTRL_CPUID_SHIFT_82576 24 /* Rx CPUID */
3778571SChenlu.Chen@Sun.COM 
3788571SChenlu.Chen@Sun.COM /* Additional interrupt register bit definitions */
3798571SChenlu.Chen@Sun.COM #define	E1000_ICR_LSECPNS	0x00000020	/* PN threshold - server */
3808571SChenlu.Chen@Sun.COM #define	E1000_IMS_LSECPNS	E1000_ICR_LSECPNS /* PN threshold - server */
3818571SChenlu.Chen@Sun.COM #define	E1000_ICS_LSECPNS	E1000_ICR_LSECPNS /* PN threshold - server */
3828571SChenlu.Chen@Sun.COM 
3838571SChenlu.Chen@Sun.COM /* ETQF register bit definitions */
3848571SChenlu.Chen@Sun.COM #define	E1000_ETQF_FILTER_ENABLE	(1 << 26)
3858571SChenlu.Chen@Sun.COM #define	E1000_ETQF_IMM_INT		(1 << 29)
3868571SChenlu.Chen@Sun.COM #define	E1000_ETQF_1588			(1 << 30)
3878571SChenlu.Chen@Sun.COM #define	E1000_ETQF_QUEUE_ENABLE		(1 << 31)
3888571SChenlu.Chen@Sun.COM /*
3898571SChenlu.Chen@Sun.COM  * ETQF filter list: one static filter per filter consumer. This is
3908571SChenlu.Chen@Sun.COM  *		to avoid filter collisions later. Add new filters
3918571SChenlu.Chen@Sun.COM  *		here!!
3928571SChenlu.Chen@Sun.COM  *
3938571SChenlu.Chen@Sun.COM  * Current filters:
3948571SChenlu.Chen@Sun.COM  *    EAPOL 802.1x (0x888e): Filter 0
3958571SChenlu.Chen@Sun.COM  */
3968571SChenlu.Chen@Sun.COM #define	E1000_ETQF_FILTER_EAPOL		0
3978571SChenlu.Chen@Sun.COM 
39811155SJason.Xu@Sun.COM #define	E1000_FTQF_VF_BP		0x00008000
39911155SJason.Xu@Sun.COM #define	E1000_FTQF_1588_TIME_STAMP	0x08000000
40011155SJason.Xu@Sun.COM #define	E1000_FTQF_MASK			0xF0000000
40111155SJason.Xu@Sun.COM #define	E1000_FTQF_MASK_PROTO_BP	0x10000000
40211155SJason.Xu@Sun.COM #define	E1000_FTQF_MASK_SOURCE_ADDR_BP	0x20000000
40311155SJason.Xu@Sun.COM #define	E1000_FTQF_MASK_DEST_ADDR_BP	0x40000000
40411155SJason.Xu@Sun.COM #define	E1000_FTQF_MASK_SOURCE_PORT_BP	0x80000000
40511155SJason.Xu@Sun.COM 
4068571SChenlu.Chen@Sun.COM #define	E1000_NVM_APME_82575		0x0400
4078571SChenlu.Chen@Sun.COM #define	MAX_NUM_VFS			8
4088571SChenlu.Chen@Sun.COM 
40910319SJason.Xu@Sun.COM /* Per VF MAC spoof control */
41010319SJason.Xu@Sun.COM #define	E1000_DTXSWC_MAC_SPOOF_MASK	0x000000FF
41110319SJason.Xu@Sun.COM /* Per VF VLAN spoof control */
41210319SJason.Xu@Sun.COM #define	E1000_DTXSWC_VLAN_SPOOF_MASK	0x0000FF00
4138571SChenlu.Chen@Sun.COM #define	E1000_DTXSWC_LLE_MASK		0x00FF0000 /* Per VF Local LB enables */
41410319SJason.Xu@Sun.COM #define	E1000_DTXSWC_VLAN_SPOOF_SHIFT	8
41510319SJason.Xu@Sun.COM #define	E1000_DTXSWC_LLE_SHIFT		16
41610319SJason.Xu@Sun.COM #define	E1000_DTXSWC_VMDQ_LOOPBACK_EN	((u32)1 << 31) /* global VF LB enable */
4178571SChenlu.Chen@Sun.COM 
4188571SChenlu.Chen@Sun.COM /* Easy defines for setting default pool, would normally be left a zero */
4198571SChenlu.Chen@Sun.COM #define	E1000_VT_CTL_DEFAULT_POOL_SHIFT	7
4208571SChenlu.Chen@Sun.COM #define	E1000_VT_CTL_DEFAULT_POOL_MASK	(0x7 << E1000_VT_CTL_DEFAULT_POOL_SHIFT)
4218571SChenlu.Chen@Sun.COM 
4228571SChenlu.Chen@Sun.COM /* Other useful VMD_CTL register defines */
4238571SChenlu.Chen@Sun.COM #define	E1000_VT_CTL_IGNORE_MAC		(1 << 28)
4248571SChenlu.Chen@Sun.COM #define	E1000_VT_CTL_DISABLE_DEF_POOL	(1 << 29)
4258571SChenlu.Chen@Sun.COM #define	E1000_VT_CTL_VM_REPL_EN		(1 << 30)
4268571SChenlu.Chen@Sun.COM 
4278571SChenlu.Chen@Sun.COM /* Per VM Offload register setup */
42810319SJason.Xu@Sun.COM #define	E1000_VMOLR_RLPML_MASK	0x00003FFF /* Long Packet Maximum Length mask */
4298571SChenlu.Chen@Sun.COM #define	E1000_VMOLR_LPE		0x00010000 /* Accept Long packet */
43010319SJason.Xu@Sun.COM #define	E1000_VMOLR_RSSE	0x00020000 /* Enable RSS */
4318571SChenlu.Chen@Sun.COM #define	E1000_VMOLR_AUPE	0x01000000 /* Accept untagged packets */
43210319SJason.Xu@Sun.COM #define	E1000_VMOLR_ROMPE	0x02000000 /* Accept overflow multicast */
43310319SJason.Xu@Sun.COM #define	E1000_VMOLR_ROPE	0x04000000 /* Accept overflow unicast */
4348571SChenlu.Chen@Sun.COM #define	E1000_VMOLR_BAM		0x08000000 /* Accept Broadcast packets */
4358571SChenlu.Chen@Sun.COM #define	E1000_VMOLR_MPME	0x10000000 /* Multicast promiscuous mode */
4368571SChenlu.Chen@Sun.COM #define	E1000_VMOLR_STRVLAN	0x40000000 /* Vlan stripping enable */
43710319SJason.Xu@Sun.COM #define	E1000_VMOLR_STRCRC	0x80000000 /* CRC stripping enable */
4388571SChenlu.Chen@Sun.COM 
43910319SJason.Xu@Sun.COM #define	E1000_VLVF_ARRAY_SIZE		32
44010319SJason.Xu@Sun.COM #define	E1000_VLVF_VLANID_MASK		0x00000FFF
44110319SJason.Xu@Sun.COM #define	E1000_VLVF_POOLSEL_SHIFT	12
44210319SJason.Xu@Sun.COM #define	E1000_VLVF_POOLSEL_MASK		(0xFF << E1000_VLVF_POOLSEL_SHIFT)
44310319SJason.Xu@Sun.COM #define	E1000_VLVF_LVLAN		0x00100000
44410319SJason.Xu@Sun.COM #define	E1000_VLVF_VLANID_ENABLE	0x80000000
4458571SChenlu.Chen@Sun.COM 
446*12111SGuoqing.Zhu@Sun.COM #define	E1000_VMVIR_VLANA_DEFAULT 0x40000000 /* Always use default VLAN */
447*12111SGuoqing.Zhu@Sun.COM #define	E1000_VMVIR_VLANA_NEVER   0x80000000 /* Never insert VLAN tag */
44810319SJason.Xu@Sun.COM #define	E1000_VF_INIT_TIMEOUT	200 /* Number of retries to clear RSTI */
4498571SChenlu.Chen@Sun.COM 
45010319SJason.Xu@Sun.COM #define	E1000_IOVCTL		0x05BBC
45110319SJason.Xu@Sun.COM #define	E1000_IOVCTL_REUSE_VFQ	0x00000001
4528571SChenlu.Chen@Sun.COM 
45310319SJason.Xu@Sun.COM #define	E1000_RPLOLR_STRVLAN	0x40000000
45411155SJason.Xu@Sun.COM #define	E1000_RPLOLR_STRCRC	0x80000000
45511155SJason.Xu@Sun.COM 
45611155SJason.Xu@Sun.COM #define	E1000_DTXCTL_8023LL	0x0004
45711155SJason.Xu@Sun.COM #define	E1000_DTXCTL_VLAN_ADDED	0x0008
45811155SJason.Xu@Sun.COM #define	E1000_DTXCTL_OOS_ENABLE	0x0010
45911155SJason.Xu@Sun.COM #define	E1000_DTXCTL_MDP_EN	0x0020
46011155SJason.Xu@Sun.COM #define	E1000_DTXCTL_SPOOF_INT	0x0040
4618571SChenlu.Chen@Sun.COM 
46210319SJason.Xu@Sun.COM #define	ALL_QUEUES		0xFFFF
46310319SJason.Xu@Sun.COM 
46411155SJason.Xu@Sun.COM /* RX packet buffer size defines */
46511155SJason.Xu@Sun.COM #define	E1000_RXPBS_SIZE_MASK_82576	0x0000007F
46610319SJason.Xu@Sun.COM void e1000_vmdq_set_loopback_pf(struct e1000_hw *hw, bool enable);
46710319SJason.Xu@Sun.COM void e1000_vmdq_set_replication_pf(struct e1000_hw *hw, bool enable);
46811155SJason.Xu@Sun.COM u16 e1000_rxpbs_adjust_82580(u32 data);
4695779Sxy150489 
4705779Sxy150489 #ifdef __cplusplus
4715779Sxy150489 }
4725779Sxy150489 #endif
4735779Sxy150489 
4745779Sxy150489 #endif	/* _IGB_82575_H */
475