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