xref: /freebsd/sys/dev/igc/igc_i225.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1*517904deSPeter Grehan /*-
2*517904deSPeter Grehan  * Copyright 2021 Intel Corp
3*517904deSPeter Grehan  * Copyright 2021 Rubicon Communications, LLC (Netgate)
4*517904deSPeter Grehan  * SPDX-License-Identifier: BSD-3-Clause
5*517904deSPeter Grehan  */
6*517904deSPeter Grehan 
7*517904deSPeter Grehan #ifndef _IGC_I225_H_
8*517904deSPeter Grehan #define _IGC_I225_H_
9*517904deSPeter Grehan 
10*517904deSPeter Grehan bool igc_get_flash_presence_i225(struct igc_hw *hw);
11*517904deSPeter Grehan s32 igc_update_flash_i225(struct igc_hw *hw);
12*517904deSPeter Grehan s32 igc_update_nvm_checksum_i225(struct igc_hw *hw);
13*517904deSPeter Grehan s32 igc_validate_nvm_checksum_i225(struct igc_hw *hw);
14*517904deSPeter Grehan s32 igc_write_nvm_srwr_i225(struct igc_hw *hw, u16 offset,
15*517904deSPeter Grehan 			      u16 words, u16 *data);
16*517904deSPeter Grehan s32 igc_read_nvm_srrd_i225(struct igc_hw *hw, u16 offset,
17*517904deSPeter Grehan 			     u16 words, u16 *data);
18*517904deSPeter Grehan s32 igc_set_flsw_flash_burst_counter_i225(struct igc_hw *hw,
19*517904deSPeter Grehan 					    u32 burst_counter);
20*517904deSPeter Grehan s32 igc_write_erase_flash_command_i225(struct igc_hw *hw, u32 opcode,
21*517904deSPeter Grehan 					 u32 address);
22*517904deSPeter Grehan s32 igc_check_for_link_i225(struct igc_hw *hw);
23*517904deSPeter Grehan s32 igc_acquire_swfw_sync_i225(struct igc_hw *hw, u16 mask);
24*517904deSPeter Grehan void igc_release_swfw_sync_i225(struct igc_hw *hw, u16 mask);
25*517904deSPeter Grehan s32 igc_init_hw_i225(struct igc_hw *hw);
26*517904deSPeter Grehan s32 igc_setup_copper_link_i225(struct igc_hw *hw);
27*517904deSPeter Grehan s32 igc_set_d0_lplu_state_i225(struct igc_hw *hw, bool active);
28*517904deSPeter Grehan s32 igc_set_d3_lplu_state_i225(struct igc_hw *hw, bool active);
29*517904deSPeter Grehan s32 igc_set_eee_i225(struct igc_hw *hw, bool adv2p5G, bool adv1G,
30*517904deSPeter Grehan 		       bool adv100M);
31*517904deSPeter Grehan 
32*517904deSPeter Grehan #define ID_LED_DEFAULT_I225		((ID_LED_OFF1_ON2  << 8) | \
33*517904deSPeter Grehan 					 (ID_LED_DEF1_DEF2 <<  4) | \
34*517904deSPeter Grehan 					 (ID_LED_OFF1_OFF2))
35*517904deSPeter Grehan #define ID_LED_DEFAULT_I225_SERDES	((ID_LED_DEF1_DEF2 << 8) | \
36*517904deSPeter Grehan 					 (ID_LED_DEF1_DEF2 <<  4) | \
37*517904deSPeter Grehan 					 (ID_LED_OFF1_ON2))
38*517904deSPeter Grehan 
39*517904deSPeter Grehan /* NVM offset defaults for I225 devices */
40*517904deSPeter Grehan #define NVM_INIT_CTRL_2_DEFAULT_I225	0X7243
41*517904deSPeter Grehan #define NVM_INIT_CTRL_4_DEFAULT_I225	0x00C1
42*517904deSPeter Grehan #define NVM_LED_1_CFG_DEFAULT_I225	0x0184
43*517904deSPeter Grehan #define NVM_LED_0_2_CFG_DEFAULT_I225	0x200C
44*517904deSPeter Grehan 
45*517904deSPeter Grehan #define IGC_MRQC_ENABLE_RSS_4Q		0x00000002
46*517904deSPeter Grehan #define IGC_MRQC_ENABLE_VMDQ			0x00000003
47*517904deSPeter Grehan #define IGC_MRQC_ENABLE_VMDQ_RSS_2Q		0x00000005
48*517904deSPeter Grehan #define IGC_MRQC_RSS_FIELD_IPV4_UDP		0x00400000
49*517904deSPeter Grehan #define IGC_MRQC_RSS_FIELD_IPV6_UDP		0x00800000
50*517904deSPeter Grehan #define IGC_MRQC_RSS_FIELD_IPV6_UDP_EX	0x01000000
51*517904deSPeter Grehan #define IGC_I225_SHADOW_RAM_SIZE		4096
52*517904deSPeter Grehan #define IGC_I225_ERASE_CMD_OPCODE		0x02000000
53*517904deSPeter Grehan #define IGC_I225_WRITE_CMD_OPCODE		0x01000000
54*517904deSPeter Grehan #define IGC_FLSWCTL_DONE			0x40000000
55*517904deSPeter Grehan #define IGC_FLSWCTL_CMDV			0x10000000
56*517904deSPeter Grehan 
57*517904deSPeter Grehan /* SRRCTL bit definitions */
58*517904deSPeter Grehan #define IGC_SRRCTL_BSIZEHDRSIZE_MASK		0x00000F00
59*517904deSPeter Grehan #define IGC_SRRCTL_DESCTYPE_LEGACY		0x00000000
60*517904deSPeter Grehan #define IGC_SRRCTL_DESCTYPE_HDR_SPLIT		0x04000000
61*517904deSPeter Grehan #define IGC_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS	0x0A000000
62*517904deSPeter Grehan #define IGC_SRRCTL_DESCTYPE_HDR_REPLICATION	0x06000000
63*517904deSPeter Grehan #define IGC_SRRCTL_DESCTYPE_HDR_REPLICATION_LARGE_PKT 0x08000000
64*517904deSPeter Grehan #define IGC_SRRCTL_DESCTYPE_MASK		0x0E000000
65*517904deSPeter Grehan #define IGC_SRRCTL_DROP_EN			0x80000000
66*517904deSPeter Grehan #define IGC_SRRCTL_BSIZEPKT_MASK		0x0000007F
67*517904deSPeter Grehan #define IGC_SRRCTL_BSIZEHDR_MASK		0x00003F00
68*517904deSPeter Grehan 
69*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_MASK	0x0000000F
70*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_SHIFT	12
71*517904deSPeter Grehan #define IGC_RXDADV_HDRBUFLEN_MASK	0x7FE0
72*517904deSPeter Grehan #define IGC_RXDADV_HDRBUFLEN_SHIFT	5
73*517904deSPeter Grehan #define IGC_RXDADV_SPLITHEADER_EN	0x00001000
74*517904deSPeter Grehan #define IGC_RXDADV_SPH		0x8000
75*517904deSPeter Grehan #define IGC_RXDADV_STAT_TS		0x10000 /* Pkt was time stamped */
76*517904deSPeter Grehan #define IGC_RXDADV_ERR_HBO		0x00800000
77*517904deSPeter Grehan 
78*517904deSPeter Grehan /* RSS Hash results */
79*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_NONE	0x00000000
80*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_IPV4_TCP	0x00000001
81*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_IPV4	0x00000002
82*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_IPV6_TCP	0x00000003
83*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_IPV6_EX	0x00000004
84*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_IPV6	0x00000005
85*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_IPV6_TCP_EX 0x00000006
86*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_IPV4_UDP	0x00000007
87*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_IPV6_UDP	0x00000008
88*517904deSPeter Grehan #define IGC_RXDADV_RSSTYPE_IPV6_UDP_EX 0x00000009
89*517904deSPeter Grehan 
90*517904deSPeter Grehan /* RSS Packet Types as indicated in the receive descriptor */
91*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_ILMASK	0x000000F0
92*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_TLMASK	0x00000F00
93*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_NONE	0x00000000
94*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_IPV4	0x00000010 /* IPV4 hdr present */
95*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_IPV4_EX	0x00000020 /* IPV4 hdr + extensions */
96*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_IPV6	0x00000040 /* IPV6 hdr present */
97*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_IPV6_EX	0x00000080 /* IPV6 hdr + extensions */
98*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_TCP	0x00000100 /* TCP hdr present */
99*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_UDP	0x00000200 /* UDP hdr present */
100*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_SCTP	0x00000400 /* SCTP hdr present */
101*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_NFS	0x00000800 /* NFS hdr present */
102*517904deSPeter Grehan 
103*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_IPSEC_ESP	0x00001000 /* IPSec ESP */
104*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_IPSEC_AH	0x00002000 /* IPSec AH */
105*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_LINKSEC	0x00004000 /* LinkSec Encap */
106*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_ETQF	0x00008000 /* PKTTYPE is ETQF index */
107*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_ETQF_MASK	0x00000070 /* ETQF has 8 indices */
108*517904deSPeter Grehan #define IGC_RXDADV_PKTTYPE_ETQF_SHIFT	4 /* Right-shift 4 bits */
109*517904deSPeter Grehan 
110*517904deSPeter Grehan #endif
111