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