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