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_BASE_H_ 8*517904deSPeter Grehan #define _IGC_BASE_H_ 9*517904deSPeter Grehan 10*517904deSPeter Grehan /* forward declaration */ 11*517904deSPeter Grehan s32 igc_init_hw_base(struct igc_hw *hw); 12*517904deSPeter Grehan void igc_power_down_phy_copper_base(struct igc_hw *hw); 13*517904deSPeter Grehan extern void igc_rx_fifo_flush_base(struct igc_hw *hw); 14*517904deSPeter Grehan s32 igc_acquire_phy_base(struct igc_hw *hw); 15*517904deSPeter Grehan void igc_release_phy_base(struct igc_hw *hw); 16*517904deSPeter Grehan 17*517904deSPeter Grehan /* Transmit Descriptor - Advanced */ 18*517904deSPeter Grehan union igc_adv_tx_desc { 19*517904deSPeter Grehan struct { 20*517904deSPeter Grehan __le64 buffer_addr; /* Address of descriptor's data buf */ 21*517904deSPeter Grehan __le32 cmd_type_len; 22*517904deSPeter Grehan __le32 olinfo_status; 23*517904deSPeter Grehan } read; 24*517904deSPeter Grehan struct { 25*517904deSPeter Grehan __le64 rsvd; /* Reserved */ 26*517904deSPeter Grehan __le32 nxtseq_seed; 27*517904deSPeter Grehan __le32 status; 28*517904deSPeter Grehan } wb; 29*517904deSPeter Grehan }; 30*517904deSPeter Grehan 31*517904deSPeter Grehan /* Context descriptors */ 32*517904deSPeter Grehan struct igc_adv_tx_context_desc { 33*517904deSPeter Grehan __le32 vlan_macip_lens; 34*517904deSPeter Grehan union { 35*517904deSPeter Grehan __le32 launch_time; 36*517904deSPeter Grehan __le32 seqnum_seed; 37*517904deSPeter Grehan }; 38*517904deSPeter Grehan __le32 type_tucmd_mlhl; 39*517904deSPeter Grehan __le32 mss_l4len_idx; 40*517904deSPeter Grehan }; 41*517904deSPeter Grehan 42*517904deSPeter Grehan /* Adv Transmit Descriptor Config Masks */ 43*517904deSPeter Grehan #define IGC_ADVTXD_DTYP_CTXT 0x00200000 /* Advanced Context Descriptor */ 44*517904deSPeter Grehan #define IGC_ADVTXD_DTYP_DATA 0x00300000 /* Advanced Data Descriptor */ 45*517904deSPeter Grehan #define IGC_ADVTXD_DCMD_EOP 0x01000000 /* End of Packet */ 46*517904deSPeter Grehan #define IGC_ADVTXD_DCMD_IFCS 0x02000000 /* Insert FCS (Ethernet CRC) */ 47*517904deSPeter Grehan #define IGC_ADVTXD_DCMD_RS 0x08000000 /* Report Status */ 48*517904deSPeter Grehan #define IGC_ADVTXD_DCMD_DDTYP_ISCSI 0x10000000 /* DDP hdr type or iSCSI */ 49*517904deSPeter Grehan #define IGC_ADVTXD_DCMD_DEXT 0x20000000 /* Descriptor extension (1=Adv) */ 50*517904deSPeter Grehan #define IGC_ADVTXD_DCMD_VLE 0x40000000 /* VLAN pkt enable */ 51*517904deSPeter Grehan #define IGC_ADVTXD_DCMD_TSE 0x80000000 /* TCP Seg enable */ 52*517904deSPeter Grehan #define IGC_ADVTXD_MAC_LINKSEC 0x00040000 /* Apply LinkSec on pkt */ 53*517904deSPeter Grehan #define IGC_ADVTXD_MAC_TSTAMP 0x00080000 /* IEEE1588 Timestamp pkt */ 54*517904deSPeter Grehan #define IGC_ADVTXD_STAT_SN_CRC 0x00000002 /* NXTSEQ/SEED prsnt in WB */ 55*517904deSPeter Grehan #define IGC_ADVTXD_IDX_SHIFT 4 /* Adv desc Index shift */ 56*517904deSPeter Grehan #define IGC_ADVTXD_POPTS_ISCO_1ST 0x00000000 /* 1st TSO of iSCSI PDU */ 57*517904deSPeter Grehan #define IGC_ADVTXD_POPTS_ISCO_MDL 0x00000800 /* Middle TSO of iSCSI PDU */ 58*517904deSPeter Grehan #define IGC_ADVTXD_POPTS_ISCO_LAST 0x00001000 /* Last TSO of iSCSI PDU */ 59*517904deSPeter Grehan /* 1st & Last TSO-full iSCSI PDU*/ 60*517904deSPeter Grehan #define IGC_ADVTXD_POPTS_ISCO_FULL 0x00001800 61*517904deSPeter Grehan #define IGC_ADVTXD_POPTS_IPSEC 0x00000400 /* IPSec offload request */ 62*517904deSPeter Grehan #define IGC_ADVTXD_PAYLEN_SHIFT 14 /* Adv desc PAYLEN shift */ 63*517904deSPeter Grehan 64*517904deSPeter Grehan /* Advanced Transmit Context Descriptor Config */ 65*517904deSPeter Grehan #define IGC_ADVTXD_MACLEN_SHIFT 9 /* Adv ctxt desc mac len shift */ 66*517904deSPeter Grehan #define IGC_ADVTXD_VLAN_SHIFT 16 /* Adv ctxt vlan tag shift */ 67*517904deSPeter Grehan #define IGC_ADVTXD_TUCMD_IPV4 0x00000400 /* IP Packet Type: 1=IPv4 */ 68*517904deSPeter Grehan #define IGC_ADVTXD_TUCMD_IPV6 0x00000000 /* IP Packet Type: 0=IPv6 */ 69*517904deSPeter Grehan #define IGC_ADVTXD_TUCMD_L4T_UDP 0x00000000 /* L4 Packet TYPE of UDP */ 70*517904deSPeter Grehan #define IGC_ADVTXD_TUCMD_L4T_TCP 0x00000800 /* L4 Packet TYPE of TCP */ 71*517904deSPeter Grehan #define IGC_ADVTXD_TUCMD_L4T_SCTP 0x00001000 /* L4 Packet TYPE of SCTP */ 72*517904deSPeter Grehan #define IGC_ADVTXD_TUCMD_IPSEC_TYPE_ESP 0x00002000 /* IPSec Type ESP */ 73*517904deSPeter Grehan /* IPSec Encrypt Enable for ESP */ 74*517904deSPeter Grehan #define IGC_ADVTXD_TUCMD_IPSEC_ENCRYPT_EN 0x00004000 75*517904deSPeter Grehan /* Req requires Markers and CRC */ 76*517904deSPeter Grehan #define IGC_ADVTXD_TUCMD_MKRREQ 0x00002000 77*517904deSPeter Grehan #define IGC_ADVTXD_L4LEN_SHIFT 8 /* Adv ctxt L4LEN shift */ 78*517904deSPeter Grehan #define IGC_ADVTXD_MSS_SHIFT 16 /* Adv ctxt MSS shift */ 79*517904deSPeter Grehan /* Adv ctxt IPSec SA IDX mask */ 80*517904deSPeter Grehan #define IGC_ADVTXD_IPSEC_SA_INDEX_MASK 0x000000FF 81*517904deSPeter Grehan /* Adv ctxt IPSec ESP len mask */ 82*517904deSPeter Grehan #define IGC_ADVTXD_IPSEC_ESP_LEN_MASK 0x000000FF 83*517904deSPeter Grehan 84*517904deSPeter Grehan #define IGC_RAR_ENTRIES_BASE 16 85*517904deSPeter Grehan 86*517904deSPeter Grehan /* Receive Descriptor - Advanced */ 87*517904deSPeter Grehan union igc_adv_rx_desc { 88*517904deSPeter Grehan struct { 89*517904deSPeter Grehan __le64 pkt_addr; /* Packet buffer address */ 90*517904deSPeter Grehan __le64 hdr_addr; /* Header buffer address */ 91*517904deSPeter Grehan } read; 92*517904deSPeter Grehan struct { 93*517904deSPeter Grehan struct { 94*517904deSPeter Grehan union { 95*517904deSPeter Grehan __le32 data; 96*517904deSPeter Grehan struct { 97*517904deSPeter Grehan __le16 pkt_info; /*RSS type, Pkt type*/ 98*517904deSPeter Grehan /* Split Header, header buffer len */ 99*517904deSPeter Grehan __le16 hdr_info; 100*517904deSPeter Grehan } hs_rss; 101*517904deSPeter Grehan } lo_dword; 102*517904deSPeter Grehan union { 103*517904deSPeter Grehan __le32 rss; /* RSS Hash */ 104*517904deSPeter Grehan struct { 105*517904deSPeter Grehan __le16 ip_id; /* IP id */ 106*517904deSPeter Grehan __le16 csum; /* Packet Checksum */ 107*517904deSPeter Grehan } csum_ip; 108*517904deSPeter Grehan } hi_dword; 109*517904deSPeter Grehan } lower; 110*517904deSPeter Grehan struct { 111*517904deSPeter Grehan __le32 status_error; /* ext status/error */ 112*517904deSPeter Grehan __le16 length; /* Packet length */ 113*517904deSPeter Grehan __le16 vlan; /* VLAN tag */ 114*517904deSPeter Grehan } upper; 115*517904deSPeter Grehan } wb; /* writeback */ 116*517904deSPeter Grehan }; 117*517904deSPeter Grehan 118*517904deSPeter Grehan /* Additional Transmit Descriptor Control definitions */ 119*517904deSPeter Grehan #define IGC_TXDCTL_QUEUE_ENABLE 0x02000000 /* Ena specific Tx Queue */ 120*517904deSPeter Grehan 121*517904deSPeter Grehan /* Additional Receive Descriptor Control definitions */ 122*517904deSPeter Grehan #define IGC_RXDCTL_QUEUE_ENABLE 0x02000000 /* Ena specific Rx Queue */ 123*517904deSPeter Grehan 124*517904deSPeter Grehan /* SRRCTL bit definitions */ 125*517904deSPeter Grehan #define IGC_SRRCTL_BSIZEPKT_SHIFT 10 /* Shift _right_ */ 126*517904deSPeter Grehan #define IGC_SRRCTL_BSIZEHDRSIZE_SHIFT 2 /* Shift _left_ */ 127*517904deSPeter Grehan #define IGC_SRRCTL_DESCTYPE_ADV_ONEBUF 0x02000000 128*517904deSPeter Grehan 129*517904deSPeter Grehan #endif /* _IGC_BASE_H_ */ 130