Deleted Added
full compact
if_em.c (295133) if_em.c (295323)
1/******************************************************************************
2
3 Copyright (c) 2001-2015, Intel Corporation
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
11
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 3. Neither the name of the Intel Corporation nor the names of its
17 contributors may be used to endorse or promote products derived from
18 this software without specific prior written permission.
19
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31
32******************************************************************************/
1/******************************************************************************
2
3 Copyright (c) 2001-2015, Intel Corporation
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
11
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 3. Neither the name of the Intel Corporation nor the names of its
17 contributors may be used to endorse or promote products derived from
18 this software without specific prior written permission.
19
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31
32******************************************************************************/
33/*$FreeBSD: head/sys/dev/e1000/if_em.c 295133 2016-02-01 23:51:30Z marius $*/
33/*$FreeBSD: head/sys/dev/e1000/if_em.c 295323 2016-02-05 17:14:37Z erj $*/
34
35#include "opt_em.h"
36#include "opt_ddb.h"
37#include "opt_inet.h"
38#include "opt_inet6.h"
39
40#ifdef HAVE_KERNEL_OPTION_HEADERS
41#include "opt_device_polling.h"
42#endif
43
44#include <sys/param.h>
45#include <sys/systm.h>
46#ifdef DDB
47#include <sys/types.h>
48#include <ddb/ddb.h>
49#endif
50#if __FreeBSD_version >= 800000
51#include <sys/buf_ring.h>
52#endif
53#include <sys/bus.h>
54#include <sys/endian.h>
55#include <sys/kernel.h>
56#include <sys/kthread.h>
57#include <sys/malloc.h>
58#include <sys/mbuf.h>
59#include <sys/module.h>
60#include <sys/rman.h>
61#include <sys/smp.h>
62#include <sys/socket.h>
63#include <sys/sockio.h>
64#include <sys/sysctl.h>
65#include <sys/taskqueue.h>
66#include <sys/eventhandler.h>
67#include <machine/bus.h>
68#include <machine/resource.h>
69
70#include <net/bpf.h>
71#include <net/ethernet.h>
72#include <net/if.h>
73#include <net/if_var.h>
74#include <net/if_arp.h>
75#include <net/if_dl.h>
76#include <net/if_media.h>
77
78#include <net/if_types.h>
79#include <net/if_vlan_var.h>
80
81#include <netinet/in_systm.h>
82#include <netinet/in.h>
83#include <netinet/if_ether.h>
84#include <netinet/ip.h>
85#include <netinet/ip6.h>
86#include <netinet/tcp.h>
87#include <netinet/udp.h>
88
89#include <machine/in_cksum.h>
90#include <dev/led/led.h>
91#include <dev/pci/pcivar.h>
92#include <dev/pci/pcireg.h>
93
94#include "e1000_api.h"
95#include "e1000_82571.h"
96#include "if_em.h"
97
98/*********************************************************************
34
35#include "opt_em.h"
36#include "opt_ddb.h"
37#include "opt_inet.h"
38#include "opt_inet6.h"
39
40#ifdef HAVE_KERNEL_OPTION_HEADERS
41#include "opt_device_polling.h"
42#endif
43
44#include <sys/param.h>
45#include <sys/systm.h>
46#ifdef DDB
47#include <sys/types.h>
48#include <ddb/ddb.h>
49#endif
50#if __FreeBSD_version >= 800000
51#include <sys/buf_ring.h>
52#endif
53#include <sys/bus.h>
54#include <sys/endian.h>
55#include <sys/kernel.h>
56#include <sys/kthread.h>
57#include <sys/malloc.h>
58#include <sys/mbuf.h>
59#include <sys/module.h>
60#include <sys/rman.h>
61#include <sys/smp.h>
62#include <sys/socket.h>
63#include <sys/sockio.h>
64#include <sys/sysctl.h>
65#include <sys/taskqueue.h>
66#include <sys/eventhandler.h>
67#include <machine/bus.h>
68#include <machine/resource.h>
69
70#include <net/bpf.h>
71#include <net/ethernet.h>
72#include <net/if.h>
73#include <net/if_var.h>
74#include <net/if_arp.h>
75#include <net/if_dl.h>
76#include <net/if_media.h>
77
78#include <net/if_types.h>
79#include <net/if_vlan_var.h>
80
81#include <netinet/in_systm.h>
82#include <netinet/in.h>
83#include <netinet/if_ether.h>
84#include <netinet/ip.h>
85#include <netinet/ip6.h>
86#include <netinet/tcp.h>
87#include <netinet/udp.h>
88
89#include <machine/in_cksum.h>
90#include <dev/led/led.h>
91#include <dev/pci/pcivar.h>
92#include <dev/pci/pcireg.h>
93
94#include "e1000_api.h"
95#include "e1000_82571.h"
96#include "if_em.h"
97
98/*********************************************************************
99 * Set this to one to display debug statistics
100 *********************************************************************/
101int em_display_debug_stats = 0;
102
103/*********************************************************************
104 * Driver version:
105 *********************************************************************/
99 * Driver version:
100 *********************************************************************/
106char em_driver_version[] = "7.4.2";
101char em_driver_version[] = "7.6.1-k";
107
108/*********************************************************************
109 * PCI Device ID Table
110 *
111 * Used by probe to select devices to load on
112 * Last field stores an index into e1000_strings
113 * Last entry must be all 0s
114 *
115 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index }
116 *********************************************************************/
117
118static em_vendor_info_t em_vendor_info_array[] =
119{
120 /* Intel(R) PRO/1000 Network Connection */
121 { 0x8086, E1000_DEV_ID_82571EB_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
122 { 0x8086, E1000_DEV_ID_82571EB_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
123 { 0x8086, E1000_DEV_ID_82571EB_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
124 { 0x8086, E1000_DEV_ID_82571EB_SERDES_DUAL,
125 PCI_ANY_ID, PCI_ANY_ID, 0},
126 { 0x8086, E1000_DEV_ID_82571EB_SERDES_QUAD,
127 PCI_ANY_ID, PCI_ANY_ID, 0},
128 { 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER,
129 PCI_ANY_ID, PCI_ANY_ID, 0},
130 { 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER_LP,
131 PCI_ANY_ID, PCI_ANY_ID, 0},
132 { 0x8086, E1000_DEV_ID_82571EB_QUAD_FIBER,
133 PCI_ANY_ID, PCI_ANY_ID, 0},
134 { 0x8086, E1000_DEV_ID_82571PT_QUAD_COPPER,
135 PCI_ANY_ID, PCI_ANY_ID, 0},
136 { 0x8086, E1000_DEV_ID_82572EI_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
137 { 0x8086, E1000_DEV_ID_82572EI_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
138 { 0x8086, E1000_DEV_ID_82572EI_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
139 { 0x8086, E1000_DEV_ID_82572EI, PCI_ANY_ID, PCI_ANY_ID, 0},
140
141 { 0x8086, E1000_DEV_ID_82573E, PCI_ANY_ID, PCI_ANY_ID, 0},
142 { 0x8086, E1000_DEV_ID_82573E_IAMT, PCI_ANY_ID, PCI_ANY_ID, 0},
143 { 0x8086, E1000_DEV_ID_82573L, PCI_ANY_ID, PCI_ANY_ID, 0},
144 { 0x8086, E1000_DEV_ID_82583V, PCI_ANY_ID, PCI_ANY_ID, 0},
145 { 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_SPT,
146 PCI_ANY_ID, PCI_ANY_ID, 0},
147 { 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_SPT,
148 PCI_ANY_ID, PCI_ANY_ID, 0},
149 { 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_DPT,
150 PCI_ANY_ID, PCI_ANY_ID, 0},
151 { 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_DPT,
152 PCI_ANY_ID, PCI_ANY_ID, 0},
153 { 0x8086, E1000_DEV_ID_ICH8_IGP_M_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
154 { 0x8086, E1000_DEV_ID_ICH8_IGP_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
155 { 0x8086, E1000_DEV_ID_ICH8_IGP_C, PCI_ANY_ID, PCI_ANY_ID, 0},
156 { 0x8086, E1000_DEV_ID_ICH8_IFE, PCI_ANY_ID, PCI_ANY_ID, 0},
157 { 0x8086, E1000_DEV_ID_ICH8_IFE_GT, PCI_ANY_ID, PCI_ANY_ID, 0},
158 { 0x8086, E1000_DEV_ID_ICH8_IFE_G, PCI_ANY_ID, PCI_ANY_ID, 0},
159 { 0x8086, E1000_DEV_ID_ICH8_IGP_M, PCI_ANY_ID, PCI_ANY_ID, 0},
160 { 0x8086, E1000_DEV_ID_ICH8_82567V_3, PCI_ANY_ID, PCI_ANY_ID, 0},
161 { 0x8086, E1000_DEV_ID_ICH9_IGP_M_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
162 { 0x8086, E1000_DEV_ID_ICH9_IGP_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
163 { 0x8086, E1000_DEV_ID_ICH9_IGP_C, PCI_ANY_ID, PCI_ANY_ID, 0},
164 { 0x8086, E1000_DEV_ID_ICH9_IGP_M, PCI_ANY_ID, PCI_ANY_ID, 0},
165 { 0x8086, E1000_DEV_ID_ICH9_IGP_M_V, PCI_ANY_ID, PCI_ANY_ID, 0},
166 { 0x8086, E1000_DEV_ID_ICH9_IFE, PCI_ANY_ID, PCI_ANY_ID, 0},
167 { 0x8086, E1000_DEV_ID_ICH9_IFE_GT, PCI_ANY_ID, PCI_ANY_ID, 0},
168 { 0x8086, E1000_DEV_ID_ICH9_IFE_G, PCI_ANY_ID, PCI_ANY_ID, 0},
169 { 0x8086, E1000_DEV_ID_ICH9_BM, PCI_ANY_ID, PCI_ANY_ID, 0},
170 { 0x8086, E1000_DEV_ID_82574L, PCI_ANY_ID, PCI_ANY_ID, 0},
171 { 0x8086, E1000_DEV_ID_82574LA, PCI_ANY_ID, PCI_ANY_ID, 0},
172 { 0x8086, E1000_DEV_ID_ICH10_R_BM_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
173 { 0x8086, E1000_DEV_ID_ICH10_R_BM_LF, PCI_ANY_ID, PCI_ANY_ID, 0},
174 { 0x8086, E1000_DEV_ID_ICH10_R_BM_V, PCI_ANY_ID, PCI_ANY_ID, 0},
175 { 0x8086, E1000_DEV_ID_ICH10_D_BM_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
176 { 0x8086, E1000_DEV_ID_ICH10_D_BM_LF, PCI_ANY_ID, PCI_ANY_ID, 0},
177 { 0x8086, E1000_DEV_ID_ICH10_D_BM_V, PCI_ANY_ID, PCI_ANY_ID, 0},
178 { 0x8086, E1000_DEV_ID_PCH_M_HV_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
179 { 0x8086, E1000_DEV_ID_PCH_M_HV_LC, PCI_ANY_ID, PCI_ANY_ID, 0},
180 { 0x8086, E1000_DEV_ID_PCH_D_HV_DM, PCI_ANY_ID, PCI_ANY_ID, 0},
181 { 0x8086, E1000_DEV_ID_PCH_D_HV_DC, PCI_ANY_ID, PCI_ANY_ID, 0},
182 { 0x8086, E1000_DEV_ID_PCH2_LV_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
183 { 0x8086, E1000_DEV_ID_PCH2_LV_V, PCI_ANY_ID, PCI_ANY_ID, 0},
184 { 0x8086, E1000_DEV_ID_PCH_LPT_I217_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
185 { 0x8086, E1000_DEV_ID_PCH_LPT_I217_V, PCI_ANY_ID, PCI_ANY_ID, 0},
186 { 0x8086, E1000_DEV_ID_PCH_LPTLP_I218_LM,
187 PCI_ANY_ID, PCI_ANY_ID, 0},
188 { 0x8086, E1000_DEV_ID_PCH_LPTLP_I218_V,
189 PCI_ANY_ID, PCI_ANY_ID, 0},
190 { 0x8086, E1000_DEV_ID_PCH_I218_LM2, PCI_ANY_ID, PCI_ANY_ID, 0},
191 { 0x8086, E1000_DEV_ID_PCH_I218_V2, PCI_ANY_ID, PCI_ANY_ID, 0},
192 { 0x8086, E1000_DEV_ID_PCH_I218_LM3, PCI_ANY_ID, PCI_ANY_ID, 0},
193 { 0x8086, E1000_DEV_ID_PCH_I218_V3, PCI_ANY_ID, PCI_ANY_ID, 0},
102
103/*********************************************************************
104 * PCI Device ID Table
105 *
106 * Used by probe to select devices to load on
107 * Last field stores an index into e1000_strings
108 * Last entry must be all 0s
109 *
110 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID, String Index }
111 *********************************************************************/
112
113static em_vendor_info_t em_vendor_info_array[] =
114{
115 /* Intel(R) PRO/1000 Network Connection */
116 { 0x8086, E1000_DEV_ID_82571EB_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
117 { 0x8086, E1000_DEV_ID_82571EB_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
118 { 0x8086, E1000_DEV_ID_82571EB_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
119 { 0x8086, E1000_DEV_ID_82571EB_SERDES_DUAL,
120 PCI_ANY_ID, PCI_ANY_ID, 0},
121 { 0x8086, E1000_DEV_ID_82571EB_SERDES_QUAD,
122 PCI_ANY_ID, PCI_ANY_ID, 0},
123 { 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER,
124 PCI_ANY_ID, PCI_ANY_ID, 0},
125 { 0x8086, E1000_DEV_ID_82571EB_QUAD_COPPER_LP,
126 PCI_ANY_ID, PCI_ANY_ID, 0},
127 { 0x8086, E1000_DEV_ID_82571EB_QUAD_FIBER,
128 PCI_ANY_ID, PCI_ANY_ID, 0},
129 { 0x8086, E1000_DEV_ID_82571PT_QUAD_COPPER,
130 PCI_ANY_ID, PCI_ANY_ID, 0},
131 { 0x8086, E1000_DEV_ID_82572EI_COPPER, PCI_ANY_ID, PCI_ANY_ID, 0},
132 { 0x8086, E1000_DEV_ID_82572EI_FIBER, PCI_ANY_ID, PCI_ANY_ID, 0},
133 { 0x8086, E1000_DEV_ID_82572EI_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
134 { 0x8086, E1000_DEV_ID_82572EI, PCI_ANY_ID, PCI_ANY_ID, 0},
135
136 { 0x8086, E1000_DEV_ID_82573E, PCI_ANY_ID, PCI_ANY_ID, 0},
137 { 0x8086, E1000_DEV_ID_82573E_IAMT, PCI_ANY_ID, PCI_ANY_ID, 0},
138 { 0x8086, E1000_DEV_ID_82573L, PCI_ANY_ID, PCI_ANY_ID, 0},
139 { 0x8086, E1000_DEV_ID_82583V, PCI_ANY_ID, PCI_ANY_ID, 0},
140 { 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_SPT,
141 PCI_ANY_ID, PCI_ANY_ID, 0},
142 { 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_SPT,
143 PCI_ANY_ID, PCI_ANY_ID, 0},
144 { 0x8086, E1000_DEV_ID_80003ES2LAN_COPPER_DPT,
145 PCI_ANY_ID, PCI_ANY_ID, 0},
146 { 0x8086, E1000_DEV_ID_80003ES2LAN_SERDES_DPT,
147 PCI_ANY_ID, PCI_ANY_ID, 0},
148 { 0x8086, E1000_DEV_ID_ICH8_IGP_M_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
149 { 0x8086, E1000_DEV_ID_ICH8_IGP_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
150 { 0x8086, E1000_DEV_ID_ICH8_IGP_C, PCI_ANY_ID, PCI_ANY_ID, 0},
151 { 0x8086, E1000_DEV_ID_ICH8_IFE, PCI_ANY_ID, PCI_ANY_ID, 0},
152 { 0x8086, E1000_DEV_ID_ICH8_IFE_GT, PCI_ANY_ID, PCI_ANY_ID, 0},
153 { 0x8086, E1000_DEV_ID_ICH8_IFE_G, PCI_ANY_ID, PCI_ANY_ID, 0},
154 { 0x8086, E1000_DEV_ID_ICH8_IGP_M, PCI_ANY_ID, PCI_ANY_ID, 0},
155 { 0x8086, E1000_DEV_ID_ICH8_82567V_3, PCI_ANY_ID, PCI_ANY_ID, 0},
156 { 0x8086, E1000_DEV_ID_ICH9_IGP_M_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
157 { 0x8086, E1000_DEV_ID_ICH9_IGP_AMT, PCI_ANY_ID, PCI_ANY_ID, 0},
158 { 0x8086, E1000_DEV_ID_ICH9_IGP_C, PCI_ANY_ID, PCI_ANY_ID, 0},
159 { 0x8086, E1000_DEV_ID_ICH9_IGP_M, PCI_ANY_ID, PCI_ANY_ID, 0},
160 { 0x8086, E1000_DEV_ID_ICH9_IGP_M_V, PCI_ANY_ID, PCI_ANY_ID, 0},
161 { 0x8086, E1000_DEV_ID_ICH9_IFE, PCI_ANY_ID, PCI_ANY_ID, 0},
162 { 0x8086, E1000_DEV_ID_ICH9_IFE_GT, PCI_ANY_ID, PCI_ANY_ID, 0},
163 { 0x8086, E1000_DEV_ID_ICH9_IFE_G, PCI_ANY_ID, PCI_ANY_ID, 0},
164 { 0x8086, E1000_DEV_ID_ICH9_BM, PCI_ANY_ID, PCI_ANY_ID, 0},
165 { 0x8086, E1000_DEV_ID_82574L, PCI_ANY_ID, PCI_ANY_ID, 0},
166 { 0x8086, E1000_DEV_ID_82574LA, PCI_ANY_ID, PCI_ANY_ID, 0},
167 { 0x8086, E1000_DEV_ID_ICH10_R_BM_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
168 { 0x8086, E1000_DEV_ID_ICH10_R_BM_LF, PCI_ANY_ID, PCI_ANY_ID, 0},
169 { 0x8086, E1000_DEV_ID_ICH10_R_BM_V, PCI_ANY_ID, PCI_ANY_ID, 0},
170 { 0x8086, E1000_DEV_ID_ICH10_D_BM_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
171 { 0x8086, E1000_DEV_ID_ICH10_D_BM_LF, PCI_ANY_ID, PCI_ANY_ID, 0},
172 { 0x8086, E1000_DEV_ID_ICH10_D_BM_V, PCI_ANY_ID, PCI_ANY_ID, 0},
173 { 0x8086, E1000_DEV_ID_PCH_M_HV_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
174 { 0x8086, E1000_DEV_ID_PCH_M_HV_LC, PCI_ANY_ID, PCI_ANY_ID, 0},
175 { 0x8086, E1000_DEV_ID_PCH_D_HV_DM, PCI_ANY_ID, PCI_ANY_ID, 0},
176 { 0x8086, E1000_DEV_ID_PCH_D_HV_DC, PCI_ANY_ID, PCI_ANY_ID, 0},
177 { 0x8086, E1000_DEV_ID_PCH2_LV_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
178 { 0x8086, E1000_DEV_ID_PCH2_LV_V, PCI_ANY_ID, PCI_ANY_ID, 0},
179 { 0x8086, E1000_DEV_ID_PCH_LPT_I217_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
180 { 0x8086, E1000_DEV_ID_PCH_LPT_I217_V, PCI_ANY_ID, PCI_ANY_ID, 0},
181 { 0x8086, E1000_DEV_ID_PCH_LPTLP_I218_LM,
182 PCI_ANY_ID, PCI_ANY_ID, 0},
183 { 0x8086, E1000_DEV_ID_PCH_LPTLP_I218_V,
184 PCI_ANY_ID, PCI_ANY_ID, 0},
185 { 0x8086, E1000_DEV_ID_PCH_I218_LM2, PCI_ANY_ID, PCI_ANY_ID, 0},
186 { 0x8086, E1000_DEV_ID_PCH_I218_V2, PCI_ANY_ID, PCI_ANY_ID, 0},
187 { 0x8086, E1000_DEV_ID_PCH_I218_LM3, PCI_ANY_ID, PCI_ANY_ID, 0},
188 { 0x8086, E1000_DEV_ID_PCH_I218_V3, PCI_ANY_ID, PCI_ANY_ID, 0},
189 { 0x8086, E1000_DEV_ID_PCH_SPT_I219_LM, PCI_ANY_ID, PCI_ANY_ID, 0},
190 { 0x8086, E1000_DEV_ID_PCH_SPT_I219_V, PCI_ANY_ID, PCI_ANY_ID, 0},
191 { 0x8086, E1000_DEV_ID_PCH_SPT_I219_LM2,
192 PCI_ANY_ID, PCI_ANY_ID, 0},
193 { 0x8086, E1000_DEV_ID_PCH_SPT_I219_V2, PCI_ANY_ID, PCI_ANY_ID, 0},
194 { 0x8086, E1000_DEV_ID_PCH_LBG_I219_LM3,
195 PCI_ANY_ID, PCI_ANY_ID, 0},
194 /* required last entry */
195 { 0, 0, 0, 0, 0}
196};
197
198/*********************************************************************
199 * Table of branding strings for all supported NICs.
200 *********************************************************************/
201
202static char *em_strings[] = {
203 "Intel(R) PRO/1000 Network Connection"
204};
205
206/*********************************************************************
207 * Function prototypes
208 *********************************************************************/
209static int em_probe(device_t);
210static int em_attach(device_t);
211static int em_detach(device_t);
212static int em_shutdown(device_t);
213static int em_suspend(device_t);
214static int em_resume(device_t);
215#ifdef EM_MULTIQUEUE
216static int em_mq_start(if_t, struct mbuf *);
217static int em_mq_start_locked(if_t,
218 struct tx_ring *);
219static void em_qflush(if_t);
220#else
221static void em_start(if_t);
222static void em_start_locked(if_t, struct tx_ring *);
223#endif
224static int em_ioctl(if_t, u_long, caddr_t);
225static uint64_t em_get_counter(if_t, ift_counter);
226static void em_init(void *);
227static void em_init_locked(struct adapter *);
228static void em_stop(void *);
229static void em_media_status(if_t, struct ifmediareq *);
230static int em_media_change(if_t);
231static void em_identify_hardware(struct adapter *);
232static int em_allocate_pci_resources(struct adapter *);
233static int em_allocate_legacy(struct adapter *);
234static int em_allocate_msix(struct adapter *);
235static int em_allocate_queues(struct adapter *);
236static int em_setup_msix(struct adapter *);
237static void em_free_pci_resources(struct adapter *);
238static void em_local_timer(void *);
239static void em_reset(struct adapter *);
240static int em_setup_interface(device_t, struct adapter *);
196 /* required last entry */
197 { 0, 0, 0, 0, 0}
198};
199
200/*********************************************************************
201 * Table of branding strings for all supported NICs.
202 *********************************************************************/
203
204static char *em_strings[] = {
205 "Intel(R) PRO/1000 Network Connection"
206};
207
208/*********************************************************************
209 * Function prototypes
210 *********************************************************************/
211static int em_probe(device_t);
212static int em_attach(device_t);
213static int em_detach(device_t);
214static int em_shutdown(device_t);
215static int em_suspend(device_t);
216static int em_resume(device_t);
217#ifdef EM_MULTIQUEUE
218static int em_mq_start(if_t, struct mbuf *);
219static int em_mq_start_locked(if_t,
220 struct tx_ring *);
221static void em_qflush(if_t);
222#else
223static void em_start(if_t);
224static void em_start_locked(if_t, struct tx_ring *);
225#endif
226static int em_ioctl(if_t, u_long, caddr_t);
227static uint64_t em_get_counter(if_t, ift_counter);
228static void em_init(void *);
229static void em_init_locked(struct adapter *);
230static void em_stop(void *);
231static void em_media_status(if_t, struct ifmediareq *);
232static int em_media_change(if_t);
233static void em_identify_hardware(struct adapter *);
234static int em_allocate_pci_resources(struct adapter *);
235static int em_allocate_legacy(struct adapter *);
236static int em_allocate_msix(struct adapter *);
237static int em_allocate_queues(struct adapter *);
238static int em_setup_msix(struct adapter *);
239static void em_free_pci_resources(struct adapter *);
240static void em_local_timer(void *);
241static void em_reset(struct adapter *);
242static int em_setup_interface(device_t, struct adapter *);
243static void em_flush_desc_rings(struct adapter *);
241
242static void em_setup_transmit_structures(struct adapter *);
243static void em_initialize_transmit_unit(struct adapter *);
244static int em_allocate_transmit_buffers(struct tx_ring *);
245static void em_free_transmit_structures(struct adapter *);
246static void em_free_transmit_buffers(struct tx_ring *);
247
248static int em_setup_receive_structures(struct adapter *);
249static int em_allocate_receive_buffers(struct rx_ring *);
250static void em_initialize_receive_unit(struct adapter *);
251static void em_free_receive_structures(struct adapter *);
252static void em_free_receive_buffers(struct rx_ring *);
253
254static void em_enable_intr(struct adapter *);
255static void em_disable_intr(struct adapter *);
256static void em_update_stats_counters(struct adapter *);
257static void em_add_hw_stats(struct adapter *adapter);
258static void em_txeof(struct tx_ring *);
259static bool em_rxeof(struct rx_ring *, int, int *);
260#ifndef __NO_STRICT_ALIGNMENT
261static int em_fixup_rx(struct rx_ring *);
262#endif
263static void em_setup_rxdesc(union e1000_rx_desc_extended *,
264 const struct em_rxbuffer *rxbuf);
265static void em_receive_checksum(uint32_t status, struct mbuf *);
266static void em_transmit_checksum_setup(struct tx_ring *, struct mbuf *, int,
267 struct ip *, u32 *, u32 *);
268static void em_tso_setup(struct tx_ring *, struct mbuf *, int, struct ip *,
269 struct tcphdr *, u32 *, u32 *);
270static void em_set_promisc(struct adapter *);
271static void em_disable_promisc(struct adapter *);
272static void em_set_multi(struct adapter *);
273static void em_update_link_status(struct adapter *);
274static void em_refresh_mbufs(struct rx_ring *, int);
275static void em_register_vlan(void *, if_t, u16);
276static void em_unregister_vlan(void *, if_t, u16);
277static void em_setup_vlan_hw_support(struct adapter *);
278static int em_xmit(struct tx_ring *, struct mbuf **);
279static int em_dma_malloc(struct adapter *, bus_size_t,
280 struct em_dma_alloc *, int);
281static void em_dma_free(struct adapter *, struct em_dma_alloc *);
282static int em_sysctl_nvm_info(SYSCTL_HANDLER_ARGS);
283static void em_print_nvm_info(struct adapter *);
284static int em_sysctl_debug_info(SYSCTL_HANDLER_ARGS);
285static void em_print_debug_info(struct adapter *);
286static int em_is_valid_ether_addr(u8 *);
287static int em_sysctl_int_delay(SYSCTL_HANDLER_ARGS);
288static void em_add_int_delay_sysctl(struct adapter *, const char *,
289 const char *, struct em_int_delay_info *, int, int);
290/* Management and WOL Support */
291static void em_init_manageability(struct adapter *);
292static void em_release_manageability(struct adapter *);
293static void em_get_hw_control(struct adapter *);
294static void em_release_hw_control(struct adapter *);
295static void em_get_wakeup(device_t);
296static void em_enable_wakeup(device_t);
297static int em_enable_phy_wakeup(struct adapter *);
298static void em_led_func(void *, int);
299static void em_disable_aspm(struct adapter *);
300
301static int em_irq_fast(void *);
302
303/* MSIX handlers */
304static void em_msix_tx(void *);
305static void em_msix_rx(void *);
306static void em_msix_link(void *);
307static void em_handle_tx(void *context, int pending);
308static void em_handle_rx(void *context, int pending);
309static void em_handle_link(void *context, int pending);
310
311#ifdef EM_MULTIQUEUE
312static void em_enable_vectors_82574(struct adapter *);
313#endif
314
315static void em_set_sysctl_value(struct adapter *, const char *,
316 const char *, int *, int);
317static int em_set_flowcntl(SYSCTL_HANDLER_ARGS);
318static int em_sysctl_eee(SYSCTL_HANDLER_ARGS);
319
320static __inline void em_rx_discard(struct rx_ring *, int);
321
322#ifdef DEVICE_POLLING
323static poll_handler_t em_poll;
324#endif /* POLLING */
325
326/*********************************************************************
327 * FreeBSD Device Interface Entry Points
328 *********************************************************************/
329
330static device_method_t em_methods[] = {
331 /* Device interface */
332 DEVMETHOD(device_probe, em_probe),
333 DEVMETHOD(device_attach, em_attach),
334 DEVMETHOD(device_detach, em_detach),
335 DEVMETHOD(device_shutdown, em_shutdown),
336 DEVMETHOD(device_suspend, em_suspend),
337 DEVMETHOD(device_resume, em_resume),
338 DEVMETHOD_END
339};
340
341static driver_t em_driver = {
342 "em", em_methods, sizeof(struct adapter),
343};
344
345devclass_t em_devclass;
346DRIVER_MODULE(em, pci, em_driver, em_devclass, 0, 0);
347MODULE_DEPEND(em, pci, 1, 1, 1);
348MODULE_DEPEND(em, ether, 1, 1, 1);
349#ifdef DEV_NETMAP
350MODULE_DEPEND(em, netmap, 1, 1, 1);
351#endif /* DEV_NETMAP */
352
353/*********************************************************************
354 * Tunable default values.
355 *********************************************************************/
356
357#define EM_TICKS_TO_USECS(ticks) ((1024 * (ticks) + 500) / 1000)
358#define EM_USECS_TO_TICKS(usecs) ((1000 * (usecs) + 512) / 1024)
359#define M_TSO_LEN 66
360
361#define MAX_INTS_PER_SEC 8000
362#define DEFAULT_ITR (1000000000/(MAX_INTS_PER_SEC * 256))
363
364/* Allow common code without TSO */
365#ifndef CSUM_TSO
366#define CSUM_TSO 0
367#endif
368
369#define TSO_WORKAROUND 4
370
371static SYSCTL_NODE(_hw, OID_AUTO, em, CTLFLAG_RD, 0, "EM driver parameters");
372
373static int em_disable_crc_stripping = 0;
374SYSCTL_INT(_hw_em, OID_AUTO, disable_crc_stripping, CTLFLAG_RDTUN,
375 &em_disable_crc_stripping, 0, "Disable CRC Stripping");
376
377static int em_tx_int_delay_dflt = EM_TICKS_TO_USECS(EM_TIDV);
378static int em_rx_int_delay_dflt = EM_TICKS_TO_USECS(EM_RDTR);
379SYSCTL_INT(_hw_em, OID_AUTO, tx_int_delay, CTLFLAG_RDTUN, &em_tx_int_delay_dflt,
380 0, "Default transmit interrupt delay in usecs");
381SYSCTL_INT(_hw_em, OID_AUTO, rx_int_delay, CTLFLAG_RDTUN, &em_rx_int_delay_dflt,
382 0, "Default receive interrupt delay in usecs");
383
384static int em_tx_abs_int_delay_dflt = EM_TICKS_TO_USECS(EM_TADV);
385static int em_rx_abs_int_delay_dflt = EM_TICKS_TO_USECS(EM_RADV);
386SYSCTL_INT(_hw_em, OID_AUTO, tx_abs_int_delay, CTLFLAG_RDTUN,
387 &em_tx_abs_int_delay_dflt, 0,
388 "Default transmit interrupt delay limit in usecs");
389SYSCTL_INT(_hw_em, OID_AUTO, rx_abs_int_delay, CTLFLAG_RDTUN,
390 &em_rx_abs_int_delay_dflt, 0,
391 "Default receive interrupt delay limit in usecs");
392
393static int em_rxd = EM_DEFAULT_RXD;
394static int em_txd = EM_DEFAULT_TXD;
395SYSCTL_INT(_hw_em, OID_AUTO, rxd, CTLFLAG_RDTUN, &em_rxd, 0,
396 "Number of receive descriptors per queue");
397SYSCTL_INT(_hw_em, OID_AUTO, txd, CTLFLAG_RDTUN, &em_txd, 0,
398 "Number of transmit descriptors per queue");
399
400static int em_smart_pwr_down = FALSE;
401SYSCTL_INT(_hw_em, OID_AUTO, smart_pwr_down, CTLFLAG_RDTUN, &em_smart_pwr_down,
402 0, "Set to true to leave smart power down enabled on newer adapters");
403
404/* Controls whether promiscuous also shows bad packets */
405static int em_debug_sbp = FALSE;
406SYSCTL_INT(_hw_em, OID_AUTO, sbp, CTLFLAG_RDTUN, &em_debug_sbp, 0,
407 "Show bad packets in promiscuous mode");
408
409static int em_enable_msix = TRUE;
410SYSCTL_INT(_hw_em, OID_AUTO, enable_msix, CTLFLAG_RDTUN, &em_enable_msix, 0,
411 "Enable MSI-X interrupts");
412
413#ifdef EM_MULTIQUEUE
414static int em_num_queues = 1;
415SYSCTL_INT(_hw_em, OID_AUTO, num_queues, CTLFLAG_RDTUN, &em_num_queues, 0,
416 "82574 only: Number of queues to configure, 0 indicates autoconfigure");
417#endif
418
419/*
420** Global variable to store last used CPU when binding queues
421** to CPUs in igb_allocate_msix. Starts at CPU_FIRST and increments when a
422** queue is bound to a cpu.
423*/
424static int em_last_bind_cpu = -1;
425
426/* How many packets rxeof tries to clean at a time */
427static int em_rx_process_limit = 100;
428SYSCTL_INT(_hw_em, OID_AUTO, rx_process_limit, CTLFLAG_RDTUN,
429 &em_rx_process_limit, 0,
430 "Maximum number of received packets to process "
431 "at a time, -1 means unlimited");
432
433/* Energy efficient ethernet - default to OFF */
434static int eee_setting = 1;
435SYSCTL_INT(_hw_em, OID_AUTO, eee_setting, CTLFLAG_RDTUN, &eee_setting, 0,
436 "Enable Energy Efficient Ethernet");
437
438/* Global used in WOL setup with multiport cards */
439static int global_quad_port_a = 0;
440
441#ifdef DEV_NETMAP /* see ixgbe.c for details */
442#include <dev/netmap/if_em_netmap.h>
443#endif /* DEV_NETMAP */
444
445/*********************************************************************
446 * Device identification routine
447 *
448 * em_probe determines if the driver should be loaded on
449 * adapter based on PCI vendor/device id of the adapter.
450 *
451 * return BUS_PROBE_DEFAULT on success, positive on failure
452 *********************************************************************/
453
454static int
455em_probe(device_t dev)
456{
457 char adapter_name[60];
458 uint16_t pci_vendor_id = 0;
459 uint16_t pci_device_id = 0;
460 uint16_t pci_subvendor_id = 0;
461 uint16_t pci_subdevice_id = 0;
462 em_vendor_info_t *ent;
463
464 INIT_DEBUGOUT("em_probe: begin");
465
466 pci_vendor_id = pci_get_vendor(dev);
467 if (pci_vendor_id != EM_VENDOR_ID)
468 return (ENXIO);
469
470 pci_device_id = pci_get_device(dev);
471 pci_subvendor_id = pci_get_subvendor(dev);
472 pci_subdevice_id = pci_get_subdevice(dev);
473
474 ent = em_vendor_info_array;
475 while (ent->vendor_id != 0) {
476 if ((pci_vendor_id == ent->vendor_id) &&
477 (pci_device_id == ent->device_id) &&
478
479 ((pci_subvendor_id == ent->subvendor_id) ||
480 (ent->subvendor_id == PCI_ANY_ID)) &&
481
482 ((pci_subdevice_id == ent->subdevice_id) ||
483 (ent->subdevice_id == PCI_ANY_ID))) {
484 sprintf(adapter_name, "%s %s",
485 em_strings[ent->index],
486 em_driver_version);
487 device_set_desc_copy(dev, adapter_name);
488 return (BUS_PROBE_DEFAULT);
489 }
490 ent++;
491 }
492
493 return (ENXIO);
494}
495
496/*********************************************************************
497 * Device initialization routine
498 *
499 * The attach entry point is called when the driver is being loaded.
500 * This routine identifies the type of hardware, allocates all resources
501 * and initializes the hardware.
502 *
503 * return 0 on success, positive on failure
504 *********************************************************************/
505
506static int
507em_attach(device_t dev)
508{
509 struct adapter *adapter;
510 struct e1000_hw *hw;
511 int error = 0;
512
513 INIT_DEBUGOUT("em_attach: begin");
514
515 if (resource_disabled("em", device_get_unit(dev))) {
516 device_printf(dev, "Disabled by device hint\n");
517 return (ENXIO);
518 }
519
520 adapter = device_get_softc(dev);
521 adapter->dev = adapter->osdep.dev = dev;
522 hw = &adapter->hw;
523 EM_CORE_LOCK_INIT(adapter, device_get_nameunit(dev));
524
525 /* SYSCTL stuff */
526 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
527 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
528 OID_AUTO, "nvm", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
529 em_sysctl_nvm_info, "I", "NVM Information");
530
531 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
532 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
533 OID_AUTO, "debug", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
534 em_sysctl_debug_info, "I", "Debug Information");
535
536 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
537 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
538 OID_AUTO, "fc", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
539 em_set_flowcntl, "I", "Flow Control");
540
541 callout_init_mtx(&adapter->timer, &adapter->core_mtx, 0);
542
543 /* Determine hardware and mac info */
544 em_identify_hardware(adapter);
545
546 /* Setup PCI resources */
547 if (em_allocate_pci_resources(adapter)) {
548 device_printf(dev, "Allocation of PCI resources failed\n");
549 error = ENXIO;
550 goto err_pci;
551 }
552
553 /*
554 ** For ICH8 and family we need to
555 ** map the flash memory, and this
556 ** must happen after the MAC is
557 ** identified
558 */
559 if ((hw->mac.type == e1000_ich8lan) ||
560 (hw->mac.type == e1000_ich9lan) ||
561 (hw->mac.type == e1000_ich10lan) ||
562 (hw->mac.type == e1000_pchlan) ||
563 (hw->mac.type == e1000_pch2lan) ||
564 (hw->mac.type == e1000_pch_lpt)) {
565 int rid = EM_BAR_TYPE_FLASH;
566 adapter->flash = bus_alloc_resource_any(dev,
567 SYS_RES_MEMORY, &rid, RF_ACTIVE);
568 if (adapter->flash == NULL) {
569 device_printf(dev, "Mapping of Flash failed\n");
570 error = ENXIO;
571 goto err_pci;
572 }
573 /* This is used in the shared code */
574 hw->flash_address = (u8 *)adapter->flash;
575 adapter->osdep.flash_bus_space_tag =
576 rman_get_bustag(adapter->flash);
577 adapter->osdep.flash_bus_space_handle =
578 rman_get_bushandle(adapter->flash);
579 }
244
245static void em_setup_transmit_structures(struct adapter *);
246static void em_initialize_transmit_unit(struct adapter *);
247static int em_allocate_transmit_buffers(struct tx_ring *);
248static void em_free_transmit_structures(struct adapter *);
249static void em_free_transmit_buffers(struct tx_ring *);
250
251static int em_setup_receive_structures(struct adapter *);
252static int em_allocate_receive_buffers(struct rx_ring *);
253static void em_initialize_receive_unit(struct adapter *);
254static void em_free_receive_structures(struct adapter *);
255static void em_free_receive_buffers(struct rx_ring *);
256
257static void em_enable_intr(struct adapter *);
258static void em_disable_intr(struct adapter *);
259static void em_update_stats_counters(struct adapter *);
260static void em_add_hw_stats(struct adapter *adapter);
261static void em_txeof(struct tx_ring *);
262static bool em_rxeof(struct rx_ring *, int, int *);
263#ifndef __NO_STRICT_ALIGNMENT
264static int em_fixup_rx(struct rx_ring *);
265#endif
266static void em_setup_rxdesc(union e1000_rx_desc_extended *,
267 const struct em_rxbuffer *rxbuf);
268static void em_receive_checksum(uint32_t status, struct mbuf *);
269static void em_transmit_checksum_setup(struct tx_ring *, struct mbuf *, int,
270 struct ip *, u32 *, u32 *);
271static void em_tso_setup(struct tx_ring *, struct mbuf *, int, struct ip *,
272 struct tcphdr *, u32 *, u32 *);
273static void em_set_promisc(struct adapter *);
274static void em_disable_promisc(struct adapter *);
275static void em_set_multi(struct adapter *);
276static void em_update_link_status(struct adapter *);
277static void em_refresh_mbufs(struct rx_ring *, int);
278static void em_register_vlan(void *, if_t, u16);
279static void em_unregister_vlan(void *, if_t, u16);
280static void em_setup_vlan_hw_support(struct adapter *);
281static int em_xmit(struct tx_ring *, struct mbuf **);
282static int em_dma_malloc(struct adapter *, bus_size_t,
283 struct em_dma_alloc *, int);
284static void em_dma_free(struct adapter *, struct em_dma_alloc *);
285static int em_sysctl_nvm_info(SYSCTL_HANDLER_ARGS);
286static void em_print_nvm_info(struct adapter *);
287static int em_sysctl_debug_info(SYSCTL_HANDLER_ARGS);
288static void em_print_debug_info(struct adapter *);
289static int em_is_valid_ether_addr(u8 *);
290static int em_sysctl_int_delay(SYSCTL_HANDLER_ARGS);
291static void em_add_int_delay_sysctl(struct adapter *, const char *,
292 const char *, struct em_int_delay_info *, int, int);
293/* Management and WOL Support */
294static void em_init_manageability(struct adapter *);
295static void em_release_manageability(struct adapter *);
296static void em_get_hw_control(struct adapter *);
297static void em_release_hw_control(struct adapter *);
298static void em_get_wakeup(device_t);
299static void em_enable_wakeup(device_t);
300static int em_enable_phy_wakeup(struct adapter *);
301static void em_led_func(void *, int);
302static void em_disable_aspm(struct adapter *);
303
304static int em_irq_fast(void *);
305
306/* MSIX handlers */
307static void em_msix_tx(void *);
308static void em_msix_rx(void *);
309static void em_msix_link(void *);
310static void em_handle_tx(void *context, int pending);
311static void em_handle_rx(void *context, int pending);
312static void em_handle_link(void *context, int pending);
313
314#ifdef EM_MULTIQUEUE
315static void em_enable_vectors_82574(struct adapter *);
316#endif
317
318static void em_set_sysctl_value(struct adapter *, const char *,
319 const char *, int *, int);
320static int em_set_flowcntl(SYSCTL_HANDLER_ARGS);
321static int em_sysctl_eee(SYSCTL_HANDLER_ARGS);
322
323static __inline void em_rx_discard(struct rx_ring *, int);
324
325#ifdef DEVICE_POLLING
326static poll_handler_t em_poll;
327#endif /* POLLING */
328
329/*********************************************************************
330 * FreeBSD Device Interface Entry Points
331 *********************************************************************/
332
333static device_method_t em_methods[] = {
334 /* Device interface */
335 DEVMETHOD(device_probe, em_probe),
336 DEVMETHOD(device_attach, em_attach),
337 DEVMETHOD(device_detach, em_detach),
338 DEVMETHOD(device_shutdown, em_shutdown),
339 DEVMETHOD(device_suspend, em_suspend),
340 DEVMETHOD(device_resume, em_resume),
341 DEVMETHOD_END
342};
343
344static driver_t em_driver = {
345 "em", em_methods, sizeof(struct adapter),
346};
347
348devclass_t em_devclass;
349DRIVER_MODULE(em, pci, em_driver, em_devclass, 0, 0);
350MODULE_DEPEND(em, pci, 1, 1, 1);
351MODULE_DEPEND(em, ether, 1, 1, 1);
352#ifdef DEV_NETMAP
353MODULE_DEPEND(em, netmap, 1, 1, 1);
354#endif /* DEV_NETMAP */
355
356/*********************************************************************
357 * Tunable default values.
358 *********************************************************************/
359
360#define EM_TICKS_TO_USECS(ticks) ((1024 * (ticks) + 500) / 1000)
361#define EM_USECS_TO_TICKS(usecs) ((1000 * (usecs) + 512) / 1024)
362#define M_TSO_LEN 66
363
364#define MAX_INTS_PER_SEC 8000
365#define DEFAULT_ITR (1000000000/(MAX_INTS_PER_SEC * 256))
366
367/* Allow common code without TSO */
368#ifndef CSUM_TSO
369#define CSUM_TSO 0
370#endif
371
372#define TSO_WORKAROUND 4
373
374static SYSCTL_NODE(_hw, OID_AUTO, em, CTLFLAG_RD, 0, "EM driver parameters");
375
376static int em_disable_crc_stripping = 0;
377SYSCTL_INT(_hw_em, OID_AUTO, disable_crc_stripping, CTLFLAG_RDTUN,
378 &em_disable_crc_stripping, 0, "Disable CRC Stripping");
379
380static int em_tx_int_delay_dflt = EM_TICKS_TO_USECS(EM_TIDV);
381static int em_rx_int_delay_dflt = EM_TICKS_TO_USECS(EM_RDTR);
382SYSCTL_INT(_hw_em, OID_AUTO, tx_int_delay, CTLFLAG_RDTUN, &em_tx_int_delay_dflt,
383 0, "Default transmit interrupt delay in usecs");
384SYSCTL_INT(_hw_em, OID_AUTO, rx_int_delay, CTLFLAG_RDTUN, &em_rx_int_delay_dflt,
385 0, "Default receive interrupt delay in usecs");
386
387static int em_tx_abs_int_delay_dflt = EM_TICKS_TO_USECS(EM_TADV);
388static int em_rx_abs_int_delay_dflt = EM_TICKS_TO_USECS(EM_RADV);
389SYSCTL_INT(_hw_em, OID_AUTO, tx_abs_int_delay, CTLFLAG_RDTUN,
390 &em_tx_abs_int_delay_dflt, 0,
391 "Default transmit interrupt delay limit in usecs");
392SYSCTL_INT(_hw_em, OID_AUTO, rx_abs_int_delay, CTLFLAG_RDTUN,
393 &em_rx_abs_int_delay_dflt, 0,
394 "Default receive interrupt delay limit in usecs");
395
396static int em_rxd = EM_DEFAULT_RXD;
397static int em_txd = EM_DEFAULT_TXD;
398SYSCTL_INT(_hw_em, OID_AUTO, rxd, CTLFLAG_RDTUN, &em_rxd, 0,
399 "Number of receive descriptors per queue");
400SYSCTL_INT(_hw_em, OID_AUTO, txd, CTLFLAG_RDTUN, &em_txd, 0,
401 "Number of transmit descriptors per queue");
402
403static int em_smart_pwr_down = FALSE;
404SYSCTL_INT(_hw_em, OID_AUTO, smart_pwr_down, CTLFLAG_RDTUN, &em_smart_pwr_down,
405 0, "Set to true to leave smart power down enabled on newer adapters");
406
407/* Controls whether promiscuous also shows bad packets */
408static int em_debug_sbp = FALSE;
409SYSCTL_INT(_hw_em, OID_AUTO, sbp, CTLFLAG_RDTUN, &em_debug_sbp, 0,
410 "Show bad packets in promiscuous mode");
411
412static int em_enable_msix = TRUE;
413SYSCTL_INT(_hw_em, OID_AUTO, enable_msix, CTLFLAG_RDTUN, &em_enable_msix, 0,
414 "Enable MSI-X interrupts");
415
416#ifdef EM_MULTIQUEUE
417static int em_num_queues = 1;
418SYSCTL_INT(_hw_em, OID_AUTO, num_queues, CTLFLAG_RDTUN, &em_num_queues, 0,
419 "82574 only: Number of queues to configure, 0 indicates autoconfigure");
420#endif
421
422/*
423** Global variable to store last used CPU when binding queues
424** to CPUs in igb_allocate_msix. Starts at CPU_FIRST and increments when a
425** queue is bound to a cpu.
426*/
427static int em_last_bind_cpu = -1;
428
429/* How many packets rxeof tries to clean at a time */
430static int em_rx_process_limit = 100;
431SYSCTL_INT(_hw_em, OID_AUTO, rx_process_limit, CTLFLAG_RDTUN,
432 &em_rx_process_limit, 0,
433 "Maximum number of received packets to process "
434 "at a time, -1 means unlimited");
435
436/* Energy efficient ethernet - default to OFF */
437static int eee_setting = 1;
438SYSCTL_INT(_hw_em, OID_AUTO, eee_setting, CTLFLAG_RDTUN, &eee_setting, 0,
439 "Enable Energy Efficient Ethernet");
440
441/* Global used in WOL setup with multiport cards */
442static int global_quad_port_a = 0;
443
444#ifdef DEV_NETMAP /* see ixgbe.c for details */
445#include <dev/netmap/if_em_netmap.h>
446#endif /* DEV_NETMAP */
447
448/*********************************************************************
449 * Device identification routine
450 *
451 * em_probe determines if the driver should be loaded on
452 * adapter based on PCI vendor/device id of the adapter.
453 *
454 * return BUS_PROBE_DEFAULT on success, positive on failure
455 *********************************************************************/
456
457static int
458em_probe(device_t dev)
459{
460 char adapter_name[60];
461 uint16_t pci_vendor_id = 0;
462 uint16_t pci_device_id = 0;
463 uint16_t pci_subvendor_id = 0;
464 uint16_t pci_subdevice_id = 0;
465 em_vendor_info_t *ent;
466
467 INIT_DEBUGOUT("em_probe: begin");
468
469 pci_vendor_id = pci_get_vendor(dev);
470 if (pci_vendor_id != EM_VENDOR_ID)
471 return (ENXIO);
472
473 pci_device_id = pci_get_device(dev);
474 pci_subvendor_id = pci_get_subvendor(dev);
475 pci_subdevice_id = pci_get_subdevice(dev);
476
477 ent = em_vendor_info_array;
478 while (ent->vendor_id != 0) {
479 if ((pci_vendor_id == ent->vendor_id) &&
480 (pci_device_id == ent->device_id) &&
481
482 ((pci_subvendor_id == ent->subvendor_id) ||
483 (ent->subvendor_id == PCI_ANY_ID)) &&
484
485 ((pci_subdevice_id == ent->subdevice_id) ||
486 (ent->subdevice_id == PCI_ANY_ID))) {
487 sprintf(adapter_name, "%s %s",
488 em_strings[ent->index],
489 em_driver_version);
490 device_set_desc_copy(dev, adapter_name);
491 return (BUS_PROBE_DEFAULT);
492 }
493 ent++;
494 }
495
496 return (ENXIO);
497}
498
499/*********************************************************************
500 * Device initialization routine
501 *
502 * The attach entry point is called when the driver is being loaded.
503 * This routine identifies the type of hardware, allocates all resources
504 * and initializes the hardware.
505 *
506 * return 0 on success, positive on failure
507 *********************************************************************/
508
509static int
510em_attach(device_t dev)
511{
512 struct adapter *adapter;
513 struct e1000_hw *hw;
514 int error = 0;
515
516 INIT_DEBUGOUT("em_attach: begin");
517
518 if (resource_disabled("em", device_get_unit(dev))) {
519 device_printf(dev, "Disabled by device hint\n");
520 return (ENXIO);
521 }
522
523 adapter = device_get_softc(dev);
524 adapter->dev = adapter->osdep.dev = dev;
525 hw = &adapter->hw;
526 EM_CORE_LOCK_INIT(adapter, device_get_nameunit(dev));
527
528 /* SYSCTL stuff */
529 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
530 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
531 OID_AUTO, "nvm", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
532 em_sysctl_nvm_info, "I", "NVM Information");
533
534 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
535 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
536 OID_AUTO, "debug", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
537 em_sysctl_debug_info, "I", "Debug Information");
538
539 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
540 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
541 OID_AUTO, "fc", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
542 em_set_flowcntl, "I", "Flow Control");
543
544 callout_init_mtx(&adapter->timer, &adapter->core_mtx, 0);
545
546 /* Determine hardware and mac info */
547 em_identify_hardware(adapter);
548
549 /* Setup PCI resources */
550 if (em_allocate_pci_resources(adapter)) {
551 device_printf(dev, "Allocation of PCI resources failed\n");
552 error = ENXIO;
553 goto err_pci;
554 }
555
556 /*
557 ** For ICH8 and family we need to
558 ** map the flash memory, and this
559 ** must happen after the MAC is
560 ** identified
561 */
562 if ((hw->mac.type == e1000_ich8lan) ||
563 (hw->mac.type == e1000_ich9lan) ||
564 (hw->mac.type == e1000_ich10lan) ||
565 (hw->mac.type == e1000_pchlan) ||
566 (hw->mac.type == e1000_pch2lan) ||
567 (hw->mac.type == e1000_pch_lpt)) {
568 int rid = EM_BAR_TYPE_FLASH;
569 adapter->flash = bus_alloc_resource_any(dev,
570 SYS_RES_MEMORY, &rid, RF_ACTIVE);
571 if (adapter->flash == NULL) {
572 device_printf(dev, "Mapping of Flash failed\n");
573 error = ENXIO;
574 goto err_pci;
575 }
576 /* This is used in the shared code */
577 hw->flash_address = (u8 *)adapter->flash;
578 adapter->osdep.flash_bus_space_tag =
579 rman_get_bustag(adapter->flash);
580 adapter->osdep.flash_bus_space_handle =
581 rman_get_bushandle(adapter->flash);
582 }
583 /*
584 ** In the new SPT device flash is not a
585 ** seperate BAR, rather it is also in BAR0,
586 ** so use the same tag and an offset handle for the
587 ** FLASH read/write macros in the shared code.
588 */
589 else if (hw->mac.type == e1000_pch_spt) {
590 adapter->osdep.flash_bus_space_tag =
591 adapter->osdep.mem_bus_space_tag;
592 adapter->osdep.flash_bus_space_handle =
593 adapter->osdep.mem_bus_space_handle
594 + E1000_FLASH_BASE_ADDR;
595 }
580
581 /* Do Shared Code initialization */
596
597 /* Do Shared Code initialization */
582 if (e1000_setup_init_funcs(hw, TRUE)) {
583 device_printf(dev, "Setup of Shared code failed\n");
598 error = e1000_setup_init_funcs(hw, TRUE);
599 if (error) {
600 device_printf(dev, "Setup of Shared code failed, error %d\n",
601 error);
584 error = ENXIO;
585 goto err_pci;
586 }
587
588 /*
589 * Setup MSI/X or MSI if PCI Express
590 */
591 adapter->msix = em_setup_msix(adapter);
592
593 e1000_get_bus_info(hw);
594
595 /* Set up some sysctls for the tunable interrupt delays */
596 em_add_int_delay_sysctl(adapter, "rx_int_delay",
597 "receive interrupt delay in usecs", &adapter->rx_int_delay,
598 E1000_REGISTER(hw, E1000_RDTR), em_rx_int_delay_dflt);
599 em_add_int_delay_sysctl(adapter, "tx_int_delay",
600 "transmit interrupt delay in usecs", &adapter->tx_int_delay,
601 E1000_REGISTER(hw, E1000_TIDV), em_tx_int_delay_dflt);
602 em_add_int_delay_sysctl(adapter, "rx_abs_int_delay",
603 "receive interrupt delay limit in usecs",
604 &adapter->rx_abs_int_delay,
605 E1000_REGISTER(hw, E1000_RADV),
606 em_rx_abs_int_delay_dflt);
607 em_add_int_delay_sysctl(adapter, "tx_abs_int_delay",
608 "transmit interrupt delay limit in usecs",
609 &adapter->tx_abs_int_delay,
610 E1000_REGISTER(hw, E1000_TADV),
611 em_tx_abs_int_delay_dflt);
612 em_add_int_delay_sysctl(adapter, "itr",
613 "interrupt delay limit in usecs/4",
614 &adapter->tx_itr,
615 E1000_REGISTER(hw, E1000_ITR),
616 DEFAULT_ITR);
617
618 /* Sysctl for limiting the amount of work done in the taskqueue */
619 em_set_sysctl_value(adapter, "rx_processing_limit",
620 "max number of rx packets to process", &adapter->rx_process_limit,
621 em_rx_process_limit);
622
623 /*
624 * Validate number of transmit and receive descriptors. It
625 * must not exceed hardware maximum, and must be multiple
626 * of E1000_DBA_ALIGN.
627 */
628 if (((em_txd * sizeof(struct e1000_tx_desc)) % EM_DBA_ALIGN) != 0 ||
629 (em_txd > EM_MAX_TXD) || (em_txd < EM_MIN_TXD)) {
630 device_printf(dev, "Using %d TX descriptors instead of %d!\n",
631 EM_DEFAULT_TXD, em_txd);
632 adapter->num_tx_desc = EM_DEFAULT_TXD;
633 } else
634 adapter->num_tx_desc = em_txd;
635
636 if (((em_rxd * sizeof(union e1000_rx_desc_extended)) % EM_DBA_ALIGN) != 0 ||
637 (em_rxd > EM_MAX_RXD) || (em_rxd < EM_MIN_RXD)) {
638 device_printf(dev, "Using %d RX descriptors instead of %d!\n",
639 EM_DEFAULT_RXD, em_rxd);
640 adapter->num_rx_desc = EM_DEFAULT_RXD;
641 } else
642 adapter->num_rx_desc = em_rxd;
643
644 hw->mac.autoneg = DO_AUTO_NEG;
645 hw->phy.autoneg_wait_to_complete = FALSE;
646 hw->phy.autoneg_advertised = AUTONEG_ADV_DEFAULT;
647
648 /* Copper options */
649 if (hw->phy.media_type == e1000_media_type_copper) {
650 hw->phy.mdix = AUTO_ALL_MODES;
651 hw->phy.disable_polarity_correction = FALSE;
652 hw->phy.ms_type = EM_MASTER_SLAVE;
653 }
654
655 /*
656 * Set the frame limits assuming
657 * standard ethernet sized frames.
658 */
659 adapter->hw.mac.max_frame_size =
660 ETHERMTU + ETHER_HDR_LEN + ETHERNET_FCS_SIZE;
661
662 /*
663 * This controls when hardware reports transmit completion
664 * status.
665 */
666 hw->mac.report_tx_early = 1;
667
668 /*
669 ** Get queue/ring memory
670 */
671 if (em_allocate_queues(adapter)) {
672 error = ENOMEM;
673 goto err_pci;
674 }
675
676 /* Allocate multicast array memory. */
677 adapter->mta = malloc(sizeof(u8) * ETH_ADDR_LEN *
678 MAX_NUM_MULTICAST_ADDRESSES, M_DEVBUF, M_NOWAIT);
679 if (adapter->mta == NULL) {
680 device_printf(dev, "Can not allocate multicast setup array\n");
681 error = ENOMEM;
682 goto err_late;
683 }
684
685 /* Check SOL/IDER usage */
686 if (e1000_check_reset_block(hw))
687 device_printf(dev, "PHY reset is blocked"
688 " due to SOL/IDER session.\n");
689
690 /* Sysctl for setting Energy Efficient Ethernet */
691 hw->dev_spec.ich8lan.eee_disable = eee_setting;
692 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
693 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
694 OID_AUTO, "eee_control", CTLTYPE_INT|CTLFLAG_RW,
695 adapter, 0, em_sysctl_eee, "I",
696 "Disable Energy Efficient Ethernet");
697
698 /*
699 ** Start from a known state, this is
700 ** important in reading the nvm and
701 ** mac from that.
702 */
703 e1000_reset_hw(hw);
704
705
706 /* Make sure we have a good EEPROM before we read from it */
707 if (e1000_validate_nvm_checksum(hw) < 0) {
708 /*
709 ** Some PCI-E parts fail the first check due to
710 ** the link being in sleep state, call it again,
711 ** if it fails a second time its a real issue.
712 */
713 if (e1000_validate_nvm_checksum(hw) < 0) {
714 device_printf(dev,
715 "The EEPROM Checksum Is Not Valid\n");
716 error = EIO;
717 goto err_late;
718 }
719 }
720
721 /* Copy the permanent MAC address out of the EEPROM */
722 if (e1000_read_mac_addr(hw) < 0) {
723 device_printf(dev, "EEPROM read error while reading MAC"
724 " address\n");
725 error = EIO;
726 goto err_late;
727 }
728
729 if (!em_is_valid_ether_addr(hw->mac.addr)) {
730 device_printf(dev, "Invalid MAC address\n");
731 error = EIO;
732 goto err_late;
733 }
734
735 /* Disable ULP support */
736 e1000_disable_ulp_lpt_lp(hw, TRUE);
737
738 /*
739 ** Do interrupt configuration
740 */
741 if (adapter->msix > 1) /* Do MSIX */
742 error = em_allocate_msix(adapter);
743 else /* MSI or Legacy */
744 error = em_allocate_legacy(adapter);
745 if (error)
746 goto err_late;
747
748 /*
749 * Get Wake-on-Lan and Management info for later use
750 */
751 em_get_wakeup(dev);
752
753 /* Setup OS specific network interface */
754 if (em_setup_interface(dev, adapter) != 0)
755 goto err_late;
756
757 em_reset(adapter);
758
759 /* Initialize statistics */
760 em_update_stats_counters(adapter);
761
762 hw->mac.get_link_status = 1;
763 em_update_link_status(adapter);
764
765 /* Register for VLAN events */
766 adapter->vlan_attach = EVENTHANDLER_REGISTER(vlan_config,
767 em_register_vlan, adapter, EVENTHANDLER_PRI_FIRST);
768 adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig,
769 em_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST);
770
771 em_add_hw_stats(adapter);
772
773 /* Non-AMT based hardware can now take control from firmware */
774 if (adapter->has_manage && !adapter->has_amt)
775 em_get_hw_control(adapter);
776
777 /* Tell the stack that the interface is not active */
778 if_setdrvflagbits(adapter->ifp, IFF_DRV_OACTIVE, IFF_DRV_RUNNING);
779
780 adapter->led_dev = led_create(em_led_func, adapter,
781 device_get_nameunit(dev));
782#ifdef DEV_NETMAP
783 em_netmap_attach(adapter);
784#endif /* DEV_NETMAP */
785
786 INIT_DEBUGOUT("em_attach: end");
787
788 return (0);
789
790err_late:
791 em_free_transmit_structures(adapter);
792 em_free_receive_structures(adapter);
793 em_release_hw_control(adapter);
794 if (adapter->ifp != (void *)NULL)
795 if_free(adapter->ifp);
796err_pci:
797 em_free_pci_resources(adapter);
798 free(adapter->mta, M_DEVBUF);
799 EM_CORE_LOCK_DESTROY(adapter);
800
801 return (error);
802}
803
804/*********************************************************************
805 * Device removal routine
806 *
807 * The detach entry point is called when the driver is being removed.
808 * This routine stops the adapter and deallocates all the resources
809 * that were allocated for driver operation.
810 *
811 * return 0 on success, positive on failure
812 *********************************************************************/
813
814static int
815em_detach(device_t dev)
816{
817 struct adapter *adapter = device_get_softc(dev);
818 if_t ifp = adapter->ifp;
819
820 INIT_DEBUGOUT("em_detach: begin");
821
822 /* Make sure VLANS are not using driver */
823 if (if_vlantrunkinuse(ifp)) {
824 device_printf(dev,"Vlan in use, detach first\n");
825 return (EBUSY);
826 }
827
828#ifdef DEVICE_POLLING
829 if (if_getcapenable(ifp) & IFCAP_POLLING)
830 ether_poll_deregister(ifp);
831#endif
832
833 if (adapter->led_dev != NULL)
834 led_destroy(adapter->led_dev);
835
836 EM_CORE_LOCK(adapter);
837 adapter->in_detach = 1;
838 em_stop(adapter);
839 EM_CORE_UNLOCK(adapter);
840 EM_CORE_LOCK_DESTROY(adapter);
841
842 e1000_phy_hw_reset(&adapter->hw);
843
844 em_release_manageability(adapter);
845 em_release_hw_control(adapter);
846
847 /* Unregister VLAN events */
848 if (adapter->vlan_attach != NULL)
849 EVENTHANDLER_DEREGISTER(vlan_config, adapter->vlan_attach);
850 if (adapter->vlan_detach != NULL)
851 EVENTHANDLER_DEREGISTER(vlan_unconfig, adapter->vlan_detach);
852
853 ether_ifdetach(adapter->ifp);
854 callout_drain(&adapter->timer);
855
856#ifdef DEV_NETMAP
857 netmap_detach(ifp);
858#endif /* DEV_NETMAP */
859
860 em_free_pci_resources(adapter);
861 bus_generic_detach(dev);
862 if_free(ifp);
863
864 em_free_transmit_structures(adapter);
865 em_free_receive_structures(adapter);
866
867 em_release_hw_control(adapter);
868 free(adapter->mta, M_DEVBUF);
869
870 return (0);
871}
872
873/*********************************************************************
874 *
875 * Shutdown entry point
876 *
877 **********************************************************************/
878
879static int
880em_shutdown(device_t dev)
881{
882 return em_suspend(dev);
883}
884
885/*
886 * Suspend/resume device methods.
887 */
888static int
889em_suspend(device_t dev)
890{
891 struct adapter *adapter = device_get_softc(dev);
892
893 EM_CORE_LOCK(adapter);
894
895 em_release_manageability(adapter);
896 em_release_hw_control(adapter);
897 em_enable_wakeup(dev);
898
899 EM_CORE_UNLOCK(adapter);
900
901 return bus_generic_suspend(dev);
902}
903
904static int
905em_resume(device_t dev)
906{
907 struct adapter *adapter = device_get_softc(dev);
908 struct tx_ring *txr = adapter->tx_rings;
909 if_t ifp = adapter->ifp;
910
911 EM_CORE_LOCK(adapter);
912 if (adapter->hw.mac.type == e1000_pch2lan)
913 e1000_resume_workarounds_pchlan(&adapter->hw);
914 em_init_locked(adapter);
915 em_init_manageability(adapter);
916
917 if ((if_getflags(ifp) & IFF_UP) &&
918 (if_getdrvflags(ifp) & IFF_DRV_RUNNING) && adapter->link_active) {
919 for (int i = 0; i < adapter->num_queues; i++, txr++) {
920 EM_TX_LOCK(txr);
921#ifdef EM_MULTIQUEUE
922 if (!drbr_empty(ifp, txr->br))
923 em_mq_start_locked(ifp, txr);
924#else
925 if (!if_sendq_empty(ifp))
926 em_start_locked(ifp, txr);
927#endif
928 EM_TX_UNLOCK(txr);
929 }
930 }
931 EM_CORE_UNLOCK(adapter);
932
933 return bus_generic_resume(dev);
934}
935
936
937#ifndef EM_MULTIQUEUE
938static void
939em_start_locked(if_t ifp, struct tx_ring *txr)
940{
941 struct adapter *adapter = if_getsoftc(ifp);
942 struct mbuf *m_head;
943
944 EM_TX_LOCK_ASSERT(txr);
945
946 if ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) !=
947 IFF_DRV_RUNNING)
948 return;
949
950 if (!adapter->link_active)
951 return;
952
953 while (!if_sendq_empty(ifp)) {
954 /* Call cleanup if number of TX descriptors low */
955 if (txr->tx_avail <= EM_TX_CLEANUP_THRESHOLD)
956 em_txeof(txr);
957 if (txr->tx_avail < EM_MAX_SCATTER) {
958 if_setdrvflagbits(ifp,IFF_DRV_OACTIVE, 0);
959 break;
960 }
961 m_head = if_dequeue(ifp);
962 if (m_head == NULL)
963 break;
964 /*
965 * Encapsulation can modify our pointer, and or make it
966 * NULL on failure. In that event, we can't requeue.
967 */
968 if (em_xmit(txr, &m_head)) {
969 if (m_head == NULL)
970 break;
971 if_sendq_prepend(ifp, m_head);
972 break;
973 }
974
975 /* Mark the queue as having work */
976 if (txr->busy == EM_TX_IDLE)
977 txr->busy = EM_TX_BUSY;
978
979 /* Send a copy of the frame to the BPF listener */
980 ETHER_BPF_MTAP(ifp, m_head);
981
982 }
983
984 return;
985}
986
987static void
988em_start(if_t ifp)
989{
990 struct adapter *adapter = if_getsoftc(ifp);
991 struct tx_ring *txr = adapter->tx_rings;
992
993 if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
994 EM_TX_LOCK(txr);
995 em_start_locked(ifp, txr);
996 EM_TX_UNLOCK(txr);
997 }
998 return;
999}
1000#else /* EM_MULTIQUEUE */
1001/*********************************************************************
1002 * Multiqueue Transmit routines
1003 *
1004 * em_mq_start is called by the stack to initiate a transmit.
1005 * however, if busy the driver can queue the request rather
1006 * than do an immediate send. It is this that is an advantage
1007 * in this driver, rather than also having multiple tx queues.
1008 **********************************************************************/
1009/*
1010** Multiqueue capable stack interface
1011*/
1012static int
1013em_mq_start(if_t ifp, struct mbuf *m)
1014{
1015 struct adapter *adapter = if_getsoftc(ifp);
1016 struct tx_ring *txr = adapter->tx_rings;
1017 unsigned int i, error;
1018
1019 if (M_HASHTYPE_GET(m) != M_HASHTYPE_NONE)
1020 i = m->m_pkthdr.flowid % adapter->num_queues;
1021 else
1022 i = curcpu % adapter->num_queues;
1023
1024 txr = &adapter->tx_rings[i];
1025
1026 error = drbr_enqueue(ifp, txr->br, m);
1027 if (error)
1028 return (error);
1029
1030 if (EM_TX_TRYLOCK(txr)) {
1031 em_mq_start_locked(ifp, txr);
1032 EM_TX_UNLOCK(txr);
1033 } else
1034 taskqueue_enqueue(txr->tq, &txr->tx_task);
1035
1036 return (0);
1037}
1038
1039static int
1040em_mq_start_locked(if_t ifp, struct tx_ring *txr)
1041{
1042 struct adapter *adapter = txr->adapter;
1043 struct mbuf *next;
1044 int err = 0, enq = 0;
1045
1046 EM_TX_LOCK_ASSERT(txr);
1047
1048 if (((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) ||
1049 adapter->link_active == 0) {
1050 return (ENETDOWN);
1051 }
1052
1053 /* Process the queue */
1054 while ((next = drbr_peek(ifp, txr->br)) != NULL) {
1055 if ((err = em_xmit(txr, &next)) != 0) {
1056 if (next == NULL) {
1057 /* It was freed, move forward */
1058 drbr_advance(ifp, txr->br);
1059 } else {
1060 /*
1061 * Still have one left, it may not be
1062 * the same since the transmit function
1063 * may have changed it.
1064 */
1065 drbr_putback(ifp, txr->br, next);
1066 }
1067 break;
1068 }
1069 drbr_advance(ifp, txr->br);
1070 enq++;
1071 if_inc_counter(ifp, IFCOUNTER_OBYTES, next->m_pkthdr.len);
1072 if (next->m_flags & M_MCAST)
1073 if_inc_counter(ifp, IFCOUNTER_OMCASTS, 1);
1074 ETHER_BPF_MTAP(ifp, next);
1075 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
1076 break;
1077 }
1078
1079 /* Mark the queue as having work */
1080 if ((enq > 0) && (txr->busy == EM_TX_IDLE))
1081 txr->busy = EM_TX_BUSY;
1082
1083 if (txr->tx_avail < EM_MAX_SCATTER)
1084 em_txeof(txr);
1085 if (txr->tx_avail < EM_MAX_SCATTER) {
1086 if_setdrvflagbits(ifp, IFF_DRV_OACTIVE,0);
1087 }
1088 return (err);
1089}
1090
1091/*
1092** Flush all ring buffers
1093*/
1094static void
1095em_qflush(if_t ifp)
1096{
1097 struct adapter *adapter = if_getsoftc(ifp);
1098 struct tx_ring *txr = adapter->tx_rings;
1099 struct mbuf *m;
1100
1101 for (int i = 0; i < adapter->num_queues; i++, txr++) {
1102 EM_TX_LOCK(txr);
1103 while ((m = buf_ring_dequeue_sc(txr->br)) != NULL)
1104 m_freem(m);
1105 EM_TX_UNLOCK(txr);
1106 }
1107 if_qflush(ifp);
1108}
1109#endif /* EM_MULTIQUEUE */
1110
1111/*********************************************************************
1112 * Ioctl entry point
1113 *
1114 * em_ioctl is called when the user wants to configure the
1115 * interface.
1116 *
1117 * return 0 on success, positive on failure
1118 **********************************************************************/
1119
1120static int
1121em_ioctl(if_t ifp, u_long command, caddr_t data)
1122{
1123 struct adapter *adapter = if_getsoftc(ifp);
1124 struct ifreq *ifr = (struct ifreq *)data;
1125#if defined(INET) || defined(INET6)
1126 struct ifaddr *ifa = (struct ifaddr *)data;
1127#endif
1128 bool avoid_reset = FALSE;
1129 int error = 0;
1130
1131 if (adapter->in_detach)
1132 return (error);
1133
1134 switch (command) {
1135 case SIOCSIFADDR:
1136#ifdef INET
1137 if (ifa->ifa_addr->sa_family == AF_INET)
1138 avoid_reset = TRUE;
1139#endif
1140#ifdef INET6
1141 if (ifa->ifa_addr->sa_family == AF_INET6)
1142 avoid_reset = TRUE;
1143#endif
1144 /*
1145 ** Calling init results in link renegotiation,
1146 ** so we avoid doing it when possible.
1147 */
1148 if (avoid_reset) {
1149 if_setflagbits(ifp,IFF_UP,0);
1150 if (!(if_getdrvflags(ifp)& IFF_DRV_RUNNING))
1151 em_init(adapter);
1152#ifdef INET
1153 if (!(if_getflags(ifp) & IFF_NOARP))
1154 arp_ifinit(ifp, ifa);
1155#endif
1156 } else
1157 error = ether_ioctl(ifp, command, data);
1158 break;
1159 case SIOCSIFMTU:
1160 {
1161 int max_frame_size;
1162
1163 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)");
1164
1165 EM_CORE_LOCK(adapter);
1166 switch (adapter->hw.mac.type) {
1167 case e1000_82571:
1168 case e1000_82572:
1169 case e1000_ich9lan:
1170 case e1000_ich10lan:
1171 case e1000_pch2lan:
1172 case e1000_pch_lpt:
602 error = ENXIO;
603 goto err_pci;
604 }
605
606 /*
607 * Setup MSI/X or MSI if PCI Express
608 */
609 adapter->msix = em_setup_msix(adapter);
610
611 e1000_get_bus_info(hw);
612
613 /* Set up some sysctls for the tunable interrupt delays */
614 em_add_int_delay_sysctl(adapter, "rx_int_delay",
615 "receive interrupt delay in usecs", &adapter->rx_int_delay,
616 E1000_REGISTER(hw, E1000_RDTR), em_rx_int_delay_dflt);
617 em_add_int_delay_sysctl(adapter, "tx_int_delay",
618 "transmit interrupt delay in usecs", &adapter->tx_int_delay,
619 E1000_REGISTER(hw, E1000_TIDV), em_tx_int_delay_dflt);
620 em_add_int_delay_sysctl(adapter, "rx_abs_int_delay",
621 "receive interrupt delay limit in usecs",
622 &adapter->rx_abs_int_delay,
623 E1000_REGISTER(hw, E1000_RADV),
624 em_rx_abs_int_delay_dflt);
625 em_add_int_delay_sysctl(adapter, "tx_abs_int_delay",
626 "transmit interrupt delay limit in usecs",
627 &adapter->tx_abs_int_delay,
628 E1000_REGISTER(hw, E1000_TADV),
629 em_tx_abs_int_delay_dflt);
630 em_add_int_delay_sysctl(adapter, "itr",
631 "interrupt delay limit in usecs/4",
632 &adapter->tx_itr,
633 E1000_REGISTER(hw, E1000_ITR),
634 DEFAULT_ITR);
635
636 /* Sysctl for limiting the amount of work done in the taskqueue */
637 em_set_sysctl_value(adapter, "rx_processing_limit",
638 "max number of rx packets to process", &adapter->rx_process_limit,
639 em_rx_process_limit);
640
641 /*
642 * Validate number of transmit and receive descriptors. It
643 * must not exceed hardware maximum, and must be multiple
644 * of E1000_DBA_ALIGN.
645 */
646 if (((em_txd * sizeof(struct e1000_tx_desc)) % EM_DBA_ALIGN) != 0 ||
647 (em_txd > EM_MAX_TXD) || (em_txd < EM_MIN_TXD)) {
648 device_printf(dev, "Using %d TX descriptors instead of %d!\n",
649 EM_DEFAULT_TXD, em_txd);
650 adapter->num_tx_desc = EM_DEFAULT_TXD;
651 } else
652 adapter->num_tx_desc = em_txd;
653
654 if (((em_rxd * sizeof(union e1000_rx_desc_extended)) % EM_DBA_ALIGN) != 0 ||
655 (em_rxd > EM_MAX_RXD) || (em_rxd < EM_MIN_RXD)) {
656 device_printf(dev, "Using %d RX descriptors instead of %d!\n",
657 EM_DEFAULT_RXD, em_rxd);
658 adapter->num_rx_desc = EM_DEFAULT_RXD;
659 } else
660 adapter->num_rx_desc = em_rxd;
661
662 hw->mac.autoneg = DO_AUTO_NEG;
663 hw->phy.autoneg_wait_to_complete = FALSE;
664 hw->phy.autoneg_advertised = AUTONEG_ADV_DEFAULT;
665
666 /* Copper options */
667 if (hw->phy.media_type == e1000_media_type_copper) {
668 hw->phy.mdix = AUTO_ALL_MODES;
669 hw->phy.disable_polarity_correction = FALSE;
670 hw->phy.ms_type = EM_MASTER_SLAVE;
671 }
672
673 /*
674 * Set the frame limits assuming
675 * standard ethernet sized frames.
676 */
677 adapter->hw.mac.max_frame_size =
678 ETHERMTU + ETHER_HDR_LEN + ETHERNET_FCS_SIZE;
679
680 /*
681 * This controls when hardware reports transmit completion
682 * status.
683 */
684 hw->mac.report_tx_early = 1;
685
686 /*
687 ** Get queue/ring memory
688 */
689 if (em_allocate_queues(adapter)) {
690 error = ENOMEM;
691 goto err_pci;
692 }
693
694 /* Allocate multicast array memory. */
695 adapter->mta = malloc(sizeof(u8) * ETH_ADDR_LEN *
696 MAX_NUM_MULTICAST_ADDRESSES, M_DEVBUF, M_NOWAIT);
697 if (adapter->mta == NULL) {
698 device_printf(dev, "Can not allocate multicast setup array\n");
699 error = ENOMEM;
700 goto err_late;
701 }
702
703 /* Check SOL/IDER usage */
704 if (e1000_check_reset_block(hw))
705 device_printf(dev, "PHY reset is blocked"
706 " due to SOL/IDER session.\n");
707
708 /* Sysctl for setting Energy Efficient Ethernet */
709 hw->dev_spec.ich8lan.eee_disable = eee_setting;
710 SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
711 SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
712 OID_AUTO, "eee_control", CTLTYPE_INT|CTLFLAG_RW,
713 adapter, 0, em_sysctl_eee, "I",
714 "Disable Energy Efficient Ethernet");
715
716 /*
717 ** Start from a known state, this is
718 ** important in reading the nvm and
719 ** mac from that.
720 */
721 e1000_reset_hw(hw);
722
723
724 /* Make sure we have a good EEPROM before we read from it */
725 if (e1000_validate_nvm_checksum(hw) < 0) {
726 /*
727 ** Some PCI-E parts fail the first check due to
728 ** the link being in sleep state, call it again,
729 ** if it fails a second time its a real issue.
730 */
731 if (e1000_validate_nvm_checksum(hw) < 0) {
732 device_printf(dev,
733 "The EEPROM Checksum Is Not Valid\n");
734 error = EIO;
735 goto err_late;
736 }
737 }
738
739 /* Copy the permanent MAC address out of the EEPROM */
740 if (e1000_read_mac_addr(hw) < 0) {
741 device_printf(dev, "EEPROM read error while reading MAC"
742 " address\n");
743 error = EIO;
744 goto err_late;
745 }
746
747 if (!em_is_valid_ether_addr(hw->mac.addr)) {
748 device_printf(dev, "Invalid MAC address\n");
749 error = EIO;
750 goto err_late;
751 }
752
753 /* Disable ULP support */
754 e1000_disable_ulp_lpt_lp(hw, TRUE);
755
756 /*
757 ** Do interrupt configuration
758 */
759 if (adapter->msix > 1) /* Do MSIX */
760 error = em_allocate_msix(adapter);
761 else /* MSI or Legacy */
762 error = em_allocate_legacy(adapter);
763 if (error)
764 goto err_late;
765
766 /*
767 * Get Wake-on-Lan and Management info for later use
768 */
769 em_get_wakeup(dev);
770
771 /* Setup OS specific network interface */
772 if (em_setup_interface(dev, adapter) != 0)
773 goto err_late;
774
775 em_reset(adapter);
776
777 /* Initialize statistics */
778 em_update_stats_counters(adapter);
779
780 hw->mac.get_link_status = 1;
781 em_update_link_status(adapter);
782
783 /* Register for VLAN events */
784 adapter->vlan_attach = EVENTHANDLER_REGISTER(vlan_config,
785 em_register_vlan, adapter, EVENTHANDLER_PRI_FIRST);
786 adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig,
787 em_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST);
788
789 em_add_hw_stats(adapter);
790
791 /* Non-AMT based hardware can now take control from firmware */
792 if (adapter->has_manage && !adapter->has_amt)
793 em_get_hw_control(adapter);
794
795 /* Tell the stack that the interface is not active */
796 if_setdrvflagbits(adapter->ifp, IFF_DRV_OACTIVE, IFF_DRV_RUNNING);
797
798 adapter->led_dev = led_create(em_led_func, adapter,
799 device_get_nameunit(dev));
800#ifdef DEV_NETMAP
801 em_netmap_attach(adapter);
802#endif /* DEV_NETMAP */
803
804 INIT_DEBUGOUT("em_attach: end");
805
806 return (0);
807
808err_late:
809 em_free_transmit_structures(adapter);
810 em_free_receive_structures(adapter);
811 em_release_hw_control(adapter);
812 if (adapter->ifp != (void *)NULL)
813 if_free(adapter->ifp);
814err_pci:
815 em_free_pci_resources(adapter);
816 free(adapter->mta, M_DEVBUF);
817 EM_CORE_LOCK_DESTROY(adapter);
818
819 return (error);
820}
821
822/*********************************************************************
823 * Device removal routine
824 *
825 * The detach entry point is called when the driver is being removed.
826 * This routine stops the adapter and deallocates all the resources
827 * that were allocated for driver operation.
828 *
829 * return 0 on success, positive on failure
830 *********************************************************************/
831
832static int
833em_detach(device_t dev)
834{
835 struct adapter *adapter = device_get_softc(dev);
836 if_t ifp = adapter->ifp;
837
838 INIT_DEBUGOUT("em_detach: begin");
839
840 /* Make sure VLANS are not using driver */
841 if (if_vlantrunkinuse(ifp)) {
842 device_printf(dev,"Vlan in use, detach first\n");
843 return (EBUSY);
844 }
845
846#ifdef DEVICE_POLLING
847 if (if_getcapenable(ifp) & IFCAP_POLLING)
848 ether_poll_deregister(ifp);
849#endif
850
851 if (adapter->led_dev != NULL)
852 led_destroy(adapter->led_dev);
853
854 EM_CORE_LOCK(adapter);
855 adapter->in_detach = 1;
856 em_stop(adapter);
857 EM_CORE_UNLOCK(adapter);
858 EM_CORE_LOCK_DESTROY(adapter);
859
860 e1000_phy_hw_reset(&adapter->hw);
861
862 em_release_manageability(adapter);
863 em_release_hw_control(adapter);
864
865 /* Unregister VLAN events */
866 if (adapter->vlan_attach != NULL)
867 EVENTHANDLER_DEREGISTER(vlan_config, adapter->vlan_attach);
868 if (adapter->vlan_detach != NULL)
869 EVENTHANDLER_DEREGISTER(vlan_unconfig, adapter->vlan_detach);
870
871 ether_ifdetach(adapter->ifp);
872 callout_drain(&adapter->timer);
873
874#ifdef DEV_NETMAP
875 netmap_detach(ifp);
876#endif /* DEV_NETMAP */
877
878 em_free_pci_resources(adapter);
879 bus_generic_detach(dev);
880 if_free(ifp);
881
882 em_free_transmit_structures(adapter);
883 em_free_receive_structures(adapter);
884
885 em_release_hw_control(adapter);
886 free(adapter->mta, M_DEVBUF);
887
888 return (0);
889}
890
891/*********************************************************************
892 *
893 * Shutdown entry point
894 *
895 **********************************************************************/
896
897static int
898em_shutdown(device_t dev)
899{
900 return em_suspend(dev);
901}
902
903/*
904 * Suspend/resume device methods.
905 */
906static int
907em_suspend(device_t dev)
908{
909 struct adapter *adapter = device_get_softc(dev);
910
911 EM_CORE_LOCK(adapter);
912
913 em_release_manageability(adapter);
914 em_release_hw_control(adapter);
915 em_enable_wakeup(dev);
916
917 EM_CORE_UNLOCK(adapter);
918
919 return bus_generic_suspend(dev);
920}
921
922static int
923em_resume(device_t dev)
924{
925 struct adapter *adapter = device_get_softc(dev);
926 struct tx_ring *txr = adapter->tx_rings;
927 if_t ifp = adapter->ifp;
928
929 EM_CORE_LOCK(adapter);
930 if (adapter->hw.mac.type == e1000_pch2lan)
931 e1000_resume_workarounds_pchlan(&adapter->hw);
932 em_init_locked(adapter);
933 em_init_manageability(adapter);
934
935 if ((if_getflags(ifp) & IFF_UP) &&
936 (if_getdrvflags(ifp) & IFF_DRV_RUNNING) && adapter->link_active) {
937 for (int i = 0; i < adapter->num_queues; i++, txr++) {
938 EM_TX_LOCK(txr);
939#ifdef EM_MULTIQUEUE
940 if (!drbr_empty(ifp, txr->br))
941 em_mq_start_locked(ifp, txr);
942#else
943 if (!if_sendq_empty(ifp))
944 em_start_locked(ifp, txr);
945#endif
946 EM_TX_UNLOCK(txr);
947 }
948 }
949 EM_CORE_UNLOCK(adapter);
950
951 return bus_generic_resume(dev);
952}
953
954
955#ifndef EM_MULTIQUEUE
956static void
957em_start_locked(if_t ifp, struct tx_ring *txr)
958{
959 struct adapter *adapter = if_getsoftc(ifp);
960 struct mbuf *m_head;
961
962 EM_TX_LOCK_ASSERT(txr);
963
964 if ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) !=
965 IFF_DRV_RUNNING)
966 return;
967
968 if (!adapter->link_active)
969 return;
970
971 while (!if_sendq_empty(ifp)) {
972 /* Call cleanup if number of TX descriptors low */
973 if (txr->tx_avail <= EM_TX_CLEANUP_THRESHOLD)
974 em_txeof(txr);
975 if (txr->tx_avail < EM_MAX_SCATTER) {
976 if_setdrvflagbits(ifp,IFF_DRV_OACTIVE, 0);
977 break;
978 }
979 m_head = if_dequeue(ifp);
980 if (m_head == NULL)
981 break;
982 /*
983 * Encapsulation can modify our pointer, and or make it
984 * NULL on failure. In that event, we can't requeue.
985 */
986 if (em_xmit(txr, &m_head)) {
987 if (m_head == NULL)
988 break;
989 if_sendq_prepend(ifp, m_head);
990 break;
991 }
992
993 /* Mark the queue as having work */
994 if (txr->busy == EM_TX_IDLE)
995 txr->busy = EM_TX_BUSY;
996
997 /* Send a copy of the frame to the BPF listener */
998 ETHER_BPF_MTAP(ifp, m_head);
999
1000 }
1001
1002 return;
1003}
1004
1005static void
1006em_start(if_t ifp)
1007{
1008 struct adapter *adapter = if_getsoftc(ifp);
1009 struct tx_ring *txr = adapter->tx_rings;
1010
1011 if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
1012 EM_TX_LOCK(txr);
1013 em_start_locked(ifp, txr);
1014 EM_TX_UNLOCK(txr);
1015 }
1016 return;
1017}
1018#else /* EM_MULTIQUEUE */
1019/*********************************************************************
1020 * Multiqueue Transmit routines
1021 *
1022 * em_mq_start is called by the stack to initiate a transmit.
1023 * however, if busy the driver can queue the request rather
1024 * than do an immediate send. It is this that is an advantage
1025 * in this driver, rather than also having multiple tx queues.
1026 **********************************************************************/
1027/*
1028** Multiqueue capable stack interface
1029*/
1030static int
1031em_mq_start(if_t ifp, struct mbuf *m)
1032{
1033 struct adapter *adapter = if_getsoftc(ifp);
1034 struct tx_ring *txr = adapter->tx_rings;
1035 unsigned int i, error;
1036
1037 if (M_HASHTYPE_GET(m) != M_HASHTYPE_NONE)
1038 i = m->m_pkthdr.flowid % adapter->num_queues;
1039 else
1040 i = curcpu % adapter->num_queues;
1041
1042 txr = &adapter->tx_rings[i];
1043
1044 error = drbr_enqueue(ifp, txr->br, m);
1045 if (error)
1046 return (error);
1047
1048 if (EM_TX_TRYLOCK(txr)) {
1049 em_mq_start_locked(ifp, txr);
1050 EM_TX_UNLOCK(txr);
1051 } else
1052 taskqueue_enqueue(txr->tq, &txr->tx_task);
1053
1054 return (0);
1055}
1056
1057static int
1058em_mq_start_locked(if_t ifp, struct tx_ring *txr)
1059{
1060 struct adapter *adapter = txr->adapter;
1061 struct mbuf *next;
1062 int err = 0, enq = 0;
1063
1064 EM_TX_LOCK_ASSERT(txr);
1065
1066 if (((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) ||
1067 adapter->link_active == 0) {
1068 return (ENETDOWN);
1069 }
1070
1071 /* Process the queue */
1072 while ((next = drbr_peek(ifp, txr->br)) != NULL) {
1073 if ((err = em_xmit(txr, &next)) != 0) {
1074 if (next == NULL) {
1075 /* It was freed, move forward */
1076 drbr_advance(ifp, txr->br);
1077 } else {
1078 /*
1079 * Still have one left, it may not be
1080 * the same since the transmit function
1081 * may have changed it.
1082 */
1083 drbr_putback(ifp, txr->br, next);
1084 }
1085 break;
1086 }
1087 drbr_advance(ifp, txr->br);
1088 enq++;
1089 if_inc_counter(ifp, IFCOUNTER_OBYTES, next->m_pkthdr.len);
1090 if (next->m_flags & M_MCAST)
1091 if_inc_counter(ifp, IFCOUNTER_OMCASTS, 1);
1092 ETHER_BPF_MTAP(ifp, next);
1093 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
1094 break;
1095 }
1096
1097 /* Mark the queue as having work */
1098 if ((enq > 0) && (txr->busy == EM_TX_IDLE))
1099 txr->busy = EM_TX_BUSY;
1100
1101 if (txr->tx_avail < EM_MAX_SCATTER)
1102 em_txeof(txr);
1103 if (txr->tx_avail < EM_MAX_SCATTER) {
1104 if_setdrvflagbits(ifp, IFF_DRV_OACTIVE,0);
1105 }
1106 return (err);
1107}
1108
1109/*
1110** Flush all ring buffers
1111*/
1112static void
1113em_qflush(if_t ifp)
1114{
1115 struct adapter *adapter = if_getsoftc(ifp);
1116 struct tx_ring *txr = adapter->tx_rings;
1117 struct mbuf *m;
1118
1119 for (int i = 0; i < adapter->num_queues; i++, txr++) {
1120 EM_TX_LOCK(txr);
1121 while ((m = buf_ring_dequeue_sc(txr->br)) != NULL)
1122 m_freem(m);
1123 EM_TX_UNLOCK(txr);
1124 }
1125 if_qflush(ifp);
1126}
1127#endif /* EM_MULTIQUEUE */
1128
1129/*********************************************************************
1130 * Ioctl entry point
1131 *
1132 * em_ioctl is called when the user wants to configure the
1133 * interface.
1134 *
1135 * return 0 on success, positive on failure
1136 **********************************************************************/
1137
1138static int
1139em_ioctl(if_t ifp, u_long command, caddr_t data)
1140{
1141 struct adapter *adapter = if_getsoftc(ifp);
1142 struct ifreq *ifr = (struct ifreq *)data;
1143#if defined(INET) || defined(INET6)
1144 struct ifaddr *ifa = (struct ifaddr *)data;
1145#endif
1146 bool avoid_reset = FALSE;
1147 int error = 0;
1148
1149 if (adapter->in_detach)
1150 return (error);
1151
1152 switch (command) {
1153 case SIOCSIFADDR:
1154#ifdef INET
1155 if (ifa->ifa_addr->sa_family == AF_INET)
1156 avoid_reset = TRUE;
1157#endif
1158#ifdef INET6
1159 if (ifa->ifa_addr->sa_family == AF_INET6)
1160 avoid_reset = TRUE;
1161#endif
1162 /*
1163 ** Calling init results in link renegotiation,
1164 ** so we avoid doing it when possible.
1165 */
1166 if (avoid_reset) {
1167 if_setflagbits(ifp,IFF_UP,0);
1168 if (!(if_getdrvflags(ifp)& IFF_DRV_RUNNING))
1169 em_init(adapter);
1170#ifdef INET
1171 if (!(if_getflags(ifp) & IFF_NOARP))
1172 arp_ifinit(ifp, ifa);
1173#endif
1174 } else
1175 error = ether_ioctl(ifp, command, data);
1176 break;
1177 case SIOCSIFMTU:
1178 {
1179 int max_frame_size;
1180
1181 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFMTU (Set Interface MTU)");
1182
1183 EM_CORE_LOCK(adapter);
1184 switch (adapter->hw.mac.type) {
1185 case e1000_82571:
1186 case e1000_82572:
1187 case e1000_ich9lan:
1188 case e1000_ich10lan:
1189 case e1000_pch2lan:
1190 case e1000_pch_lpt:
1191 case e1000_pch_spt:
1173 case e1000_82574:
1174 case e1000_82583:
1175 case e1000_80003es2lan: /* 9K Jumbo Frame size */
1176 max_frame_size = 9234;
1177 break;
1178 case e1000_pchlan:
1179 max_frame_size = 4096;
1180 break;
1181 /* Adapters that do not support jumbo frames */
1182 case e1000_ich8lan:
1183 max_frame_size = ETHER_MAX_LEN;
1184 break;
1185 default:
1186 max_frame_size = MAX_JUMBO_FRAME_SIZE;
1187 }
1188 if (ifr->ifr_mtu > max_frame_size - ETHER_HDR_LEN -
1189 ETHER_CRC_LEN) {
1190 EM_CORE_UNLOCK(adapter);
1191 error = EINVAL;
1192 break;
1193 }
1194
1195 if_setmtu(ifp, ifr->ifr_mtu);
1196 adapter->hw.mac.max_frame_size =
1197 if_getmtu(ifp) + ETHER_HDR_LEN + ETHER_CRC_LEN;
1198 em_init_locked(adapter);
1199 EM_CORE_UNLOCK(adapter);
1200 break;
1201 }
1202 case SIOCSIFFLAGS:
1203 IOCTL_DEBUGOUT("ioctl rcv'd:\
1204 SIOCSIFFLAGS (Set Interface Flags)");
1205 EM_CORE_LOCK(adapter);
1206 if (if_getflags(ifp) & IFF_UP) {
1207 if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
1208 if ((if_getflags(ifp) ^ adapter->if_flags) &
1209 (IFF_PROMISC | IFF_ALLMULTI)) {
1210 em_disable_promisc(adapter);
1211 em_set_promisc(adapter);
1212 }
1213 } else
1214 em_init_locked(adapter);
1215 } else
1216 if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
1217 em_stop(adapter);
1218 adapter->if_flags = if_getflags(ifp);
1219 EM_CORE_UNLOCK(adapter);
1220 break;
1221 case SIOCADDMULTI:
1222 case SIOCDELMULTI:
1223 IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
1224 if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
1225 EM_CORE_LOCK(adapter);
1226 em_disable_intr(adapter);
1227 em_set_multi(adapter);
1228#ifdef DEVICE_POLLING
1229 if (!(if_getcapenable(ifp) & IFCAP_POLLING))
1230#endif
1231 em_enable_intr(adapter);
1232 EM_CORE_UNLOCK(adapter);
1233 }
1234 break;
1235 case SIOCSIFMEDIA:
1236 /* Check SOL/IDER usage */
1237 EM_CORE_LOCK(adapter);
1238 if (e1000_check_reset_block(&adapter->hw)) {
1239 EM_CORE_UNLOCK(adapter);
1240 device_printf(adapter->dev, "Media change is"
1241 " blocked due to SOL/IDER session.\n");
1242 break;
1243 }
1244 EM_CORE_UNLOCK(adapter);
1245 /* falls thru */
1246 case SIOCGIFMEDIA:
1247 IOCTL_DEBUGOUT("ioctl rcv'd: \
1248 SIOCxIFMEDIA (Get/Set Interface Media)");
1249 error = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
1250 break;
1251 case SIOCSIFCAP:
1252 {
1253 int mask, reinit;
1254
1255 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)");
1256 reinit = 0;
1257 mask = ifr->ifr_reqcap ^ if_getcapenable(ifp);
1258#ifdef DEVICE_POLLING
1259 if (mask & IFCAP_POLLING) {
1260 if (ifr->ifr_reqcap & IFCAP_POLLING) {
1261 error = ether_poll_register(em_poll, ifp);
1262 if (error)
1263 return (error);
1264 EM_CORE_LOCK(adapter);
1265 em_disable_intr(adapter);
1266 if_setcapenablebit(ifp, IFCAP_POLLING, 0);
1267 EM_CORE_UNLOCK(adapter);
1268 } else {
1269 error = ether_poll_deregister(ifp);
1270 /* Enable interrupt even in error case */
1271 EM_CORE_LOCK(adapter);
1272 em_enable_intr(adapter);
1273 if_setcapenablebit(ifp, 0, IFCAP_POLLING);
1274 EM_CORE_UNLOCK(adapter);
1275 }
1276 }
1277#endif
1278 if (mask & IFCAP_HWCSUM) {
1279 if_togglecapenable(ifp,IFCAP_HWCSUM);
1280 reinit = 1;
1281 }
1282 if (mask & IFCAP_TSO4) {
1283 if_togglecapenable(ifp,IFCAP_TSO4);
1284 reinit = 1;
1285 }
1286 if (mask & IFCAP_VLAN_HWTAGGING) {
1287 if_togglecapenable(ifp,IFCAP_VLAN_HWTAGGING);
1288 reinit = 1;
1289 }
1290 if (mask & IFCAP_VLAN_HWFILTER) {
1291 if_togglecapenable(ifp, IFCAP_VLAN_HWFILTER);
1292 reinit = 1;
1293 }
1294 if (mask & IFCAP_VLAN_HWTSO) {
1295 if_togglecapenable(ifp, IFCAP_VLAN_HWTSO);
1296 reinit = 1;
1297 }
1298 if ((mask & IFCAP_WOL) &&
1299 (if_getcapabilities(ifp) & IFCAP_WOL) != 0) {
1300 if (mask & IFCAP_WOL_MCAST)
1301 if_togglecapenable(ifp, IFCAP_WOL_MCAST);
1302 if (mask & IFCAP_WOL_MAGIC)
1303 if_togglecapenable(ifp, IFCAP_WOL_MAGIC);
1304 }
1305 if (reinit && (if_getdrvflags(ifp) & IFF_DRV_RUNNING))
1306 em_init(adapter);
1307 if_vlancap(ifp);
1308 break;
1309 }
1310
1311 default:
1312 error = ether_ioctl(ifp, command, data);
1313 break;
1314 }
1315
1316 return (error);
1317}
1318
1319
1320/*********************************************************************
1321 * Init entry point
1322 *
1323 * This routine is used in two ways. It is used by the stack as
1324 * init entry point in network interface structure. It is also used
1325 * by the driver as a hw/sw initialization routine to get to a
1326 * consistent state.
1327 *
1328 * return 0 on success, positive on failure
1329 **********************************************************************/
1330
1331static void
1332em_init_locked(struct adapter *adapter)
1333{
1334 if_t ifp = adapter->ifp;
1335 device_t dev = adapter->dev;
1336
1337 INIT_DEBUGOUT("em_init: begin");
1338
1339 EM_CORE_LOCK_ASSERT(adapter);
1340
1341 em_disable_intr(adapter);
1342 callout_stop(&adapter->timer);
1343
1344 /* Get the latest mac address, User can use a LAA */
1345 bcopy(if_getlladdr(adapter->ifp), adapter->hw.mac.addr,
1346 ETHER_ADDR_LEN);
1347
1348 /* Put the address into the Receive Address Array */
1349 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0);
1350
1351 /*
1352 * With the 82571 adapter, RAR[0] may be overwritten
1353 * when the other port is reset, we make a duplicate
1354 * in RAR[14] for that eventuality, this assures
1355 * the interface continues to function.
1356 */
1357 if (adapter->hw.mac.type == e1000_82571) {
1358 e1000_set_laa_state_82571(&adapter->hw, TRUE);
1359 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr,
1360 E1000_RAR_ENTRIES - 1);
1361 }
1362
1363 /* Initialize the hardware */
1364 em_reset(adapter);
1365 em_update_link_status(adapter);
1366
1367 /* Setup VLAN support, basic and offload if available */
1368 E1000_WRITE_REG(&adapter->hw, E1000_VET, ETHERTYPE_VLAN);
1369
1370 /* Set hardware offload abilities */
1371 if_clearhwassist(ifp);
1372 if (if_getcapenable(ifp) & IFCAP_TXCSUM)
1373 if_sethwassistbits(ifp, CSUM_TCP | CSUM_UDP, 0);
1374 /*
1375 ** There have proven to be problems with TSO when not
1376 ** at full gigabit speed, so disable the assist automatically
1377 ** when at lower speeds. -jfv
1378 */
1379 if (if_getcapenable(ifp) & IFCAP_TSO4) {
1380 if (adapter->link_speed == SPEED_1000)
1381 if_sethwassistbits(ifp, CSUM_TSO, 0);
1382 }
1383
1384 /* Configure for OS presence */
1385 em_init_manageability(adapter);
1386
1387 /* Prepare transmit descriptors and buffers */
1388 em_setup_transmit_structures(adapter);
1389 em_initialize_transmit_unit(adapter);
1390
1391 /* Setup Multicast table */
1392 em_set_multi(adapter);
1393
1394 /*
1395 ** Figure out the desired mbuf
1396 ** pool for doing jumbos
1397 */
1398 if (adapter->hw.mac.max_frame_size <= 2048)
1399 adapter->rx_mbuf_sz = MCLBYTES;
1400 else if (adapter->hw.mac.max_frame_size <= 4096)
1401 adapter->rx_mbuf_sz = MJUMPAGESIZE;
1402 else
1403 adapter->rx_mbuf_sz = MJUM9BYTES;
1404
1405 /* Prepare receive descriptors and buffers */
1406 if (em_setup_receive_structures(adapter)) {
1407 device_printf(dev, "Could not setup receive structures\n");
1408 em_stop(adapter);
1409 return;
1410 }
1411 em_initialize_receive_unit(adapter);
1412
1413 /* Use real VLAN Filter support? */
1414 if (if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) {
1415 if (if_getcapenable(ifp) & IFCAP_VLAN_HWFILTER)
1416 /* Use real VLAN Filter support */
1417 em_setup_vlan_hw_support(adapter);
1418 else {
1419 u32 ctrl;
1420 ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL);
1421 ctrl |= E1000_CTRL_VME;
1422 E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl);
1423 }
1424 }
1425
1426 /* Don't lose promiscuous settings */
1427 em_set_promisc(adapter);
1428
1429 /* Set the interface as ACTIVE */
1430 if_setdrvflagbits(ifp, IFF_DRV_RUNNING, IFF_DRV_OACTIVE);
1431
1432 callout_reset(&adapter->timer, hz, em_local_timer, adapter);
1433 e1000_clear_hw_cntrs_base_generic(&adapter->hw);
1434
1435 /* MSI/X configuration for 82574 */
1436 if (adapter->hw.mac.type == e1000_82574) {
1437 int tmp;
1438 tmp = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
1439 tmp |= E1000_CTRL_EXT_PBA_CLR;
1440 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, tmp);
1441 /* Set the IVAR - interrupt vector routing. */
1442 E1000_WRITE_REG(&adapter->hw, E1000_IVAR, adapter->ivars);
1443 }
1444
1445#ifdef DEVICE_POLLING
1446 /*
1447 * Only enable interrupts if we are not polling, make sure
1448 * they are off otherwise.
1449 */
1450 if (if_getcapenable(ifp) & IFCAP_POLLING)
1451 em_disable_intr(adapter);
1452 else
1453#endif /* DEVICE_POLLING */
1454 em_enable_intr(adapter);
1455
1456 /* AMT based hardware can now take control from firmware */
1457 if (adapter->has_manage && adapter->has_amt)
1458 em_get_hw_control(adapter);
1459}
1460
1461static void
1462em_init(void *arg)
1463{
1464 struct adapter *adapter = arg;
1465
1466 EM_CORE_LOCK(adapter);
1467 em_init_locked(adapter);
1468 EM_CORE_UNLOCK(adapter);
1469}
1470
1471
1472#ifdef DEVICE_POLLING
1473/*********************************************************************
1474 *
1475 * Legacy polling routine: note this only works with single queue
1476 *
1477 *********************************************************************/
1478static int
1479em_poll(if_t ifp, enum poll_cmd cmd, int count)
1480{
1481 struct adapter *adapter = if_getsoftc(ifp);
1482 struct tx_ring *txr = adapter->tx_rings;
1483 struct rx_ring *rxr = adapter->rx_rings;
1484 u32 reg_icr;
1485 int rx_done;
1486
1487 EM_CORE_LOCK(adapter);
1488 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) {
1489 EM_CORE_UNLOCK(adapter);
1490 return (0);
1491 }
1492
1493 if (cmd == POLL_AND_CHECK_STATUS) {
1494 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1495 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1496 callout_stop(&adapter->timer);
1497 adapter->hw.mac.get_link_status = 1;
1498 em_update_link_status(adapter);
1499 callout_reset(&adapter->timer, hz,
1500 em_local_timer, adapter);
1501 }
1502 }
1503 EM_CORE_UNLOCK(adapter);
1504
1505 em_rxeof(rxr, count, &rx_done);
1506
1507 EM_TX_LOCK(txr);
1508 em_txeof(txr);
1509#ifdef EM_MULTIQUEUE
1510 if (!drbr_empty(ifp, txr->br))
1511 em_mq_start_locked(ifp, txr);
1512#else
1513 if (!if_sendq_empty(ifp))
1514 em_start_locked(ifp, txr);
1515#endif
1516 EM_TX_UNLOCK(txr);
1517
1518 return (rx_done);
1519}
1520#endif /* DEVICE_POLLING */
1521
1522
1523/*********************************************************************
1524 *
1525 * Fast Legacy/MSI Combined Interrupt Service routine
1526 *
1527 *********************************************************************/
1528static int
1529em_irq_fast(void *arg)
1530{
1531 struct adapter *adapter = arg;
1532 if_t ifp;
1533 u32 reg_icr;
1534
1535 ifp = adapter->ifp;
1536
1537 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1538
1539 /* Hot eject? */
1540 if (reg_icr == 0xffffffff)
1541 return FILTER_STRAY;
1542
1543 /* Definitely not our interrupt. */
1544 if (reg_icr == 0x0)
1545 return FILTER_STRAY;
1546
1547 /*
1548 * Starting with the 82571 chip, bit 31 should be used to
1549 * determine whether the interrupt belongs to us.
1550 */
1551 if (adapter->hw.mac.type >= e1000_82571 &&
1552 (reg_icr & E1000_ICR_INT_ASSERTED) == 0)
1553 return FILTER_STRAY;
1554
1555 em_disable_intr(adapter);
1556 taskqueue_enqueue(adapter->tq, &adapter->que_task);
1557
1558 /* Link status change */
1559 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1560 adapter->hw.mac.get_link_status = 1;
1561 taskqueue_enqueue(taskqueue_fast, &adapter->link_task);
1562 }
1563
1564 if (reg_icr & E1000_ICR_RXO)
1565 adapter->rx_overruns++;
1566 return FILTER_HANDLED;
1567}
1568
1569/* Combined RX/TX handler, used by Legacy and MSI */
1570static void
1571em_handle_que(void *context, int pending)
1572{
1573 struct adapter *adapter = context;
1574 if_t ifp = adapter->ifp;
1575 struct tx_ring *txr = adapter->tx_rings;
1576 struct rx_ring *rxr = adapter->rx_rings;
1577
1578 if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
1579 bool more = em_rxeof(rxr, adapter->rx_process_limit, NULL);
1580
1581 EM_TX_LOCK(txr);
1582 em_txeof(txr);
1583#ifdef EM_MULTIQUEUE
1584 if (!drbr_empty(ifp, txr->br))
1585 em_mq_start_locked(ifp, txr);
1586#else
1587 if (!if_sendq_empty(ifp))
1588 em_start_locked(ifp, txr);
1589#endif
1590 EM_TX_UNLOCK(txr);
1591 if (more) {
1592 taskqueue_enqueue(adapter->tq, &adapter->que_task);
1593 return;
1594 }
1595 }
1596
1597 em_enable_intr(adapter);
1598 return;
1599}
1600
1601
1602/*********************************************************************
1603 *
1604 * MSIX Interrupt Service Routines
1605 *
1606 **********************************************************************/
1607static void
1608em_msix_tx(void *arg)
1609{
1610 struct tx_ring *txr = arg;
1611 struct adapter *adapter = txr->adapter;
1612 if_t ifp = adapter->ifp;
1613
1614 ++txr->tx_irq;
1615 EM_TX_LOCK(txr);
1616 em_txeof(txr);
1617#ifdef EM_MULTIQUEUE
1618 if (!drbr_empty(ifp, txr->br))
1619 em_mq_start_locked(ifp, txr);
1620#else
1621 if (!if_sendq_empty(ifp))
1622 em_start_locked(ifp, txr);
1623#endif
1624
1625 /* Reenable this interrupt */
1626 E1000_WRITE_REG(&adapter->hw, E1000_IMS, txr->ims);
1627 EM_TX_UNLOCK(txr);
1628 return;
1629}
1630
1631/*********************************************************************
1632 *
1633 * MSIX RX Interrupt Service routine
1634 *
1635 **********************************************************************/
1636
1637static void
1638em_msix_rx(void *arg)
1639{
1640 struct rx_ring *rxr = arg;
1641 struct adapter *adapter = rxr->adapter;
1642 bool more;
1643
1644 ++rxr->rx_irq;
1645 if (!(if_getdrvflags(adapter->ifp) & IFF_DRV_RUNNING))
1646 return;
1647 more = em_rxeof(rxr, adapter->rx_process_limit, NULL);
1648 if (more)
1649 taskqueue_enqueue(rxr->tq, &rxr->rx_task);
1650 else {
1651 /* Reenable this interrupt */
1652 E1000_WRITE_REG(&adapter->hw, E1000_IMS, rxr->ims);
1653 }
1654 return;
1655}
1656
1657/*********************************************************************
1658 *
1659 * MSIX Link Fast Interrupt Service routine
1660 *
1661 **********************************************************************/
1662static void
1663em_msix_link(void *arg)
1664{
1665 struct adapter *adapter = arg;
1666 u32 reg_icr;
1667
1668 ++adapter->link_irq;
1669 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1670
1671 if (reg_icr & E1000_ICR_RXO)
1672 adapter->rx_overruns++;
1673
1674 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1675 adapter->hw.mac.get_link_status = 1;
1676 em_handle_link(adapter, 0);
1677 } else
1678 E1000_WRITE_REG(&adapter->hw, E1000_IMS,
1679 EM_MSIX_LINK | E1000_IMS_LSC);
1680 /*
1681 ** Because we must read the ICR for this interrupt
1682 ** it may clear other causes using autoclear, for
1683 ** this reason we simply create a soft interrupt
1684 ** for all these vectors.
1685 */
1686 if (reg_icr) {
1687 E1000_WRITE_REG(&adapter->hw,
1688 E1000_ICS, adapter->ims);
1689 }
1690 return;
1691}
1692
1693static void
1694em_handle_rx(void *context, int pending)
1695{
1696 struct rx_ring *rxr = context;
1697 struct adapter *adapter = rxr->adapter;
1698 bool more;
1699
1700 more = em_rxeof(rxr, adapter->rx_process_limit, NULL);
1701 if (more)
1702 taskqueue_enqueue(rxr->tq, &rxr->rx_task);
1703 else {
1704 /* Reenable this interrupt */
1705 E1000_WRITE_REG(&adapter->hw, E1000_IMS, rxr->ims);
1706 }
1707}
1708
1709static void
1710em_handle_tx(void *context, int pending)
1711{
1712 struct tx_ring *txr = context;
1713 struct adapter *adapter = txr->adapter;
1714 if_t ifp = adapter->ifp;
1715
1716 EM_TX_LOCK(txr);
1717 em_txeof(txr);
1718#ifdef EM_MULTIQUEUE
1719 if (!drbr_empty(ifp, txr->br))
1720 em_mq_start_locked(ifp, txr);
1721#else
1722 if (!if_sendq_empty(ifp))
1723 em_start_locked(ifp, txr);
1724#endif
1725 E1000_WRITE_REG(&adapter->hw, E1000_IMS, txr->ims);
1726 EM_TX_UNLOCK(txr);
1727}
1728
1729static void
1730em_handle_link(void *context, int pending)
1731{
1732 struct adapter *adapter = context;
1733 struct tx_ring *txr = adapter->tx_rings;
1734 if_t ifp = adapter->ifp;
1735
1736 if (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING))
1737 return;
1738
1739 EM_CORE_LOCK(adapter);
1740 callout_stop(&adapter->timer);
1741 em_update_link_status(adapter);
1742 callout_reset(&adapter->timer, hz, em_local_timer, adapter);
1743 E1000_WRITE_REG(&adapter->hw, E1000_IMS,
1744 EM_MSIX_LINK | E1000_IMS_LSC);
1745 if (adapter->link_active) {
1746 for (int i = 0; i < adapter->num_queues; i++, txr++) {
1747 EM_TX_LOCK(txr);
1748#ifdef EM_MULTIQUEUE
1749 if (!drbr_empty(ifp, txr->br))
1750 em_mq_start_locked(ifp, txr);
1751#else
1752 if (if_sendq_empty(ifp))
1753 em_start_locked(ifp, txr);
1754#endif
1755 EM_TX_UNLOCK(txr);
1756 }
1757 }
1758 EM_CORE_UNLOCK(adapter);
1759}
1760
1761
1762/*********************************************************************
1763 *
1764 * Media Ioctl callback
1765 *
1766 * This routine is called whenever the user queries the status of
1767 * the interface using ifconfig.
1768 *
1769 **********************************************************************/
1770static void
1771em_media_status(if_t ifp, struct ifmediareq *ifmr)
1772{
1773 struct adapter *adapter = if_getsoftc(ifp);
1774 u_char fiber_type = IFM_1000_SX;
1775
1776 INIT_DEBUGOUT("em_media_status: begin");
1777
1778 EM_CORE_LOCK(adapter);
1779 em_update_link_status(adapter);
1780
1781 ifmr->ifm_status = IFM_AVALID;
1782 ifmr->ifm_active = IFM_ETHER;
1783
1784 if (!adapter->link_active) {
1785 EM_CORE_UNLOCK(adapter);
1786 return;
1787 }
1788
1789 ifmr->ifm_status |= IFM_ACTIVE;
1790
1791 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
1792 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) {
1793 ifmr->ifm_active |= fiber_type | IFM_FDX;
1794 } else {
1795 switch (adapter->link_speed) {
1796 case 10:
1797 ifmr->ifm_active |= IFM_10_T;
1798 break;
1799 case 100:
1800 ifmr->ifm_active |= IFM_100_TX;
1801 break;
1802 case 1000:
1803 ifmr->ifm_active |= IFM_1000_T;
1804 break;
1805 }
1806 if (adapter->link_duplex == FULL_DUPLEX)
1807 ifmr->ifm_active |= IFM_FDX;
1808 else
1809 ifmr->ifm_active |= IFM_HDX;
1810 }
1811 EM_CORE_UNLOCK(adapter);
1812}
1813
1814/*********************************************************************
1815 *
1816 * Media Ioctl callback
1817 *
1818 * This routine is called when the user changes speed/duplex using
1819 * media/mediopt option with ifconfig.
1820 *
1821 **********************************************************************/
1822static int
1823em_media_change(if_t ifp)
1824{
1825 struct adapter *adapter = if_getsoftc(ifp);
1826 struct ifmedia *ifm = &adapter->media;
1827
1828 INIT_DEBUGOUT("em_media_change: begin");
1829
1830 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
1831 return (EINVAL);
1832
1833 EM_CORE_LOCK(adapter);
1834 switch (IFM_SUBTYPE(ifm->ifm_media)) {
1835 case IFM_AUTO:
1836 adapter->hw.mac.autoneg = DO_AUTO_NEG;
1837 adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT;
1838 break;
1839 case IFM_1000_LX:
1840 case IFM_1000_SX:
1841 case IFM_1000_T:
1842 adapter->hw.mac.autoneg = DO_AUTO_NEG;
1843 adapter->hw.phy.autoneg_advertised = ADVERTISE_1000_FULL;
1844 break;
1845 case IFM_100_TX:
1846 adapter->hw.mac.autoneg = FALSE;
1847 adapter->hw.phy.autoneg_advertised = 0;
1848 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
1849 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_FULL;
1850 else
1851 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_HALF;
1852 break;
1853 case IFM_10_T:
1854 adapter->hw.mac.autoneg = FALSE;
1855 adapter->hw.phy.autoneg_advertised = 0;
1856 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
1857 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_FULL;
1858 else
1859 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_HALF;
1860 break;
1861 default:
1862 device_printf(adapter->dev, "Unsupported media type\n");
1863 }
1864
1865 em_init_locked(adapter);
1866 EM_CORE_UNLOCK(adapter);
1867
1868 return (0);
1869}
1870
1871/*********************************************************************
1872 *
1873 * This routine maps the mbufs to tx descriptors.
1874 *
1875 * return 0 on success, positive on failure
1876 **********************************************************************/
1877
1878static int
1879em_xmit(struct tx_ring *txr, struct mbuf **m_headp)
1880{
1881 struct adapter *adapter = txr->adapter;
1882 bus_dma_segment_t segs[EM_MAX_SCATTER];
1883 bus_dmamap_t map;
1884 struct em_txbuffer *tx_buffer, *tx_buffer_mapped;
1885 struct e1000_tx_desc *ctxd = NULL;
1886 struct mbuf *m_head;
1887 struct ether_header *eh;
1888 struct ip *ip = NULL;
1889 struct tcphdr *tp = NULL;
1890 u32 txd_upper = 0, txd_lower = 0;
1891 int ip_off, poff;
1892 int nsegs, i, j, first, last = 0;
1893 int error;
1894 bool do_tso, tso_desc, remap = TRUE;
1895
1896 m_head = *m_headp;
1897 do_tso = (m_head->m_pkthdr.csum_flags & CSUM_TSO);
1898 tso_desc = FALSE;
1899 ip_off = poff = 0;
1900
1901 /*
1902 * Intel recommends entire IP/TCP header length reside in a single
1903 * buffer. If multiple descriptors are used to describe the IP and
1904 * TCP header, each descriptor should describe one or more
1905 * complete headers; descriptors referencing only parts of headers
1906 * are not supported. If all layer headers are not coalesced into
1907 * a single buffer, each buffer should not cross a 4KB boundary,
1908 * or be larger than the maximum read request size.
1909 * Controller also requires modifing IP/TCP header to make TSO work
1910 * so we firstly get a writable mbuf chain then coalesce ethernet/
1911 * IP/TCP header into a single buffer to meet the requirement of
1912 * controller. This also simplifies IP/TCP/UDP checksum offloading
1913 * which also has similiar restrictions.
1914 */
1915 if (do_tso || m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD) {
1916 if (do_tso || (m_head->m_next != NULL &&
1917 m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD)) {
1918 if (M_WRITABLE(*m_headp) == 0) {
1919 m_head = m_dup(*m_headp, M_NOWAIT);
1920 m_freem(*m_headp);
1921 if (m_head == NULL) {
1922 *m_headp = NULL;
1923 return (ENOBUFS);
1924 }
1925 *m_headp = m_head;
1926 }
1927 }
1928 /*
1929 * XXX
1930 * Assume IPv4, we don't have TSO/checksum offload support
1931 * for IPv6 yet.
1932 */
1933 ip_off = sizeof(struct ether_header);
1934 if (m_head->m_len < ip_off) {
1935 m_head = m_pullup(m_head, ip_off);
1936 if (m_head == NULL) {
1937 *m_headp = NULL;
1938 return (ENOBUFS);
1939 }
1940 }
1941 eh = mtod(m_head, struct ether_header *);
1942 if (eh->ether_type == htons(ETHERTYPE_VLAN)) {
1943 ip_off = sizeof(struct ether_vlan_header);
1944 if (m_head->m_len < ip_off) {
1945 m_head = m_pullup(m_head, ip_off);
1946 if (m_head == NULL) {
1947 *m_headp = NULL;
1948 return (ENOBUFS);
1949 }
1950 }
1951 }
1952 if (m_head->m_len < ip_off + sizeof(struct ip)) {
1953 m_head = m_pullup(m_head, ip_off + sizeof(struct ip));
1954 if (m_head == NULL) {
1955 *m_headp = NULL;
1956 return (ENOBUFS);
1957 }
1958 }
1959 ip = (struct ip *)(mtod(m_head, char *) + ip_off);
1960 poff = ip_off + (ip->ip_hl << 2);
1961
1962 if (do_tso || (m_head->m_pkthdr.csum_flags & CSUM_TCP)) {
1963 if (m_head->m_len < poff + sizeof(struct tcphdr)) {
1964 m_head = m_pullup(m_head, poff +
1965 sizeof(struct tcphdr));
1966 if (m_head == NULL) {
1967 *m_headp = NULL;
1968 return (ENOBUFS);
1969 }
1970 }
1971 tp = (struct tcphdr *)(mtod(m_head, char *) + poff);
1972 /*
1973 * TSO workaround:
1974 * pull 4 more bytes of data into it.
1975 */
1976 if (m_head->m_len < poff + (tp->th_off << 2)) {
1977 m_head = m_pullup(m_head, poff +
1978 (tp->th_off << 2) +
1979 TSO_WORKAROUND);
1980 if (m_head == NULL) {
1981 *m_headp = NULL;
1982 return (ENOBUFS);
1983 }
1984 }
1985 ip = (struct ip *)(mtod(m_head, char *) + ip_off);
1986 tp = (struct tcphdr *)(mtod(m_head, char *) + poff);
1987 if (do_tso) {
1988 ip->ip_len = htons(m_head->m_pkthdr.tso_segsz +
1989 (ip->ip_hl << 2) +
1990 (tp->th_off << 2));
1991 ip->ip_sum = 0;
1992 /*
1993 * The pseudo TCP checksum does not include TCP
1994 * payload length so driver should recompute
1995 * the checksum here what hardware expect to
1996 * see. This is adherence of Microsoft's Large
1997 * Send specification.
1998 */
1999 tp->th_sum = in_pseudo(ip->ip_src.s_addr,
2000 ip->ip_dst.s_addr, htons(IPPROTO_TCP));
2001 }
2002 } else if (m_head->m_pkthdr.csum_flags & CSUM_UDP) {
2003 if (m_head->m_len < poff + sizeof(struct udphdr)) {
2004 m_head = m_pullup(m_head, poff +
2005 sizeof(struct udphdr));
2006 if (m_head == NULL) {
2007 *m_headp = NULL;
2008 return (ENOBUFS);
2009 }
2010 }
2011 ip = (struct ip *)(mtod(m_head, char *) + ip_off);
2012 }
2013 *m_headp = m_head;
2014 }
2015
2016 /*
2017 * Map the packet for DMA
2018 *
2019 * Capture the first descriptor index,
2020 * this descriptor will have the index
2021 * of the EOP which is the only one that
2022 * now gets a DONE bit writeback.
2023 */
2024 first = txr->next_avail_desc;
2025 tx_buffer = &txr->tx_buffers[first];
2026 tx_buffer_mapped = tx_buffer;
2027 map = tx_buffer->map;
2028
2029retry:
2030 error = bus_dmamap_load_mbuf_sg(txr->txtag, map,
2031 *m_headp, segs, &nsegs, BUS_DMA_NOWAIT);
2032
2033 /*
2034 * There are two types of errors we can (try) to handle:
2035 * - EFBIG means the mbuf chain was too long and bus_dma ran
2036 * out of segments. Defragment the mbuf chain and try again.
2037 * - ENOMEM means bus_dma could not obtain enough bounce buffers
2038 * at this point in time. Defer sending and try again later.
2039 * All other errors, in particular EINVAL, are fatal and prevent the
2040 * mbuf chain from ever going through. Drop it and report error.
2041 */
2042 if (error == EFBIG && remap) {
2043 struct mbuf *m;
2044
2045 m = m_collapse(*m_headp, M_NOWAIT, EM_MAX_SCATTER);
2046 if (m == NULL) {
2047 adapter->mbuf_defrag_failed++;
2048 m_freem(*m_headp);
2049 *m_headp = NULL;
2050 return (ENOBUFS);
2051 }
2052 *m_headp = m;
2053
2054 /* Try it again, but only once */
2055 remap = FALSE;
2056 goto retry;
2057 } else if (error != 0) {
2058 adapter->no_tx_dma_setup++;
2059 m_freem(*m_headp);
2060 *m_headp = NULL;
2061 return (error);
2062 }
2063
2064 /*
2065 * TSO Hardware workaround, if this packet is not
2066 * TSO, and is only a single descriptor long, and
2067 * it follows a TSO burst, then we need to add a
2068 * sentinel descriptor to prevent premature writeback.
2069 */
2070 if ((!do_tso) && (txr->tx_tso == TRUE)) {
2071 if (nsegs == 1)
2072 tso_desc = TRUE;
2073 txr->tx_tso = FALSE;
2074 }
2075
2076 if (nsegs > (txr->tx_avail - EM_MAX_SCATTER)) {
2077 txr->no_desc_avail++;
2078 bus_dmamap_unload(txr->txtag, map);
2079 return (ENOBUFS);
2080 }
2081 m_head = *m_headp;
2082
2083 /* Do hardware assists */
2084 if (m_head->m_pkthdr.csum_flags & CSUM_TSO) {
2085 em_tso_setup(txr, m_head, ip_off, ip, tp,
2086 &txd_upper, &txd_lower);
2087 /* we need to make a final sentinel transmit desc */
2088 tso_desc = TRUE;
2089 } else if (m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD)
2090 em_transmit_checksum_setup(txr, m_head,
2091 ip_off, ip, &txd_upper, &txd_lower);
2092
2093 if (m_head->m_flags & M_VLANTAG) {
2094 /* Set the vlan id. */
2095 txd_upper |= htole16(if_getvtag(m_head)) << 16;
2096 /* Tell hardware to add tag */
2097 txd_lower |= htole32(E1000_TXD_CMD_VLE);
2098 }
2099
2100 i = txr->next_avail_desc;
2101
2102 /* Set up our transmit descriptors */
2103 for (j = 0; j < nsegs; j++) {
2104 bus_size_t seg_len;
2105 bus_addr_t seg_addr;
2106
2107 tx_buffer = &txr->tx_buffers[i];
2108 ctxd = &txr->tx_base[i];
2109 seg_addr = segs[j].ds_addr;
2110 seg_len = segs[j].ds_len;
2111 /*
2112 ** TSO Workaround:
2113 ** If this is the last descriptor, we want to
2114 ** split it so we have a small final sentinel
2115 */
2116 if (tso_desc && (j == (nsegs - 1)) && (seg_len > 8)) {
2117 seg_len -= TSO_WORKAROUND;
2118 ctxd->buffer_addr = htole64(seg_addr);
2119 ctxd->lower.data = htole32(
2120 adapter->txd_cmd | txd_lower | seg_len);
2121 ctxd->upper.data = htole32(txd_upper);
2122 if (++i == adapter->num_tx_desc)
2123 i = 0;
2124
2125 /* Now make the sentinel */
2126 txr->tx_avail--;
2127 ctxd = &txr->tx_base[i];
2128 tx_buffer = &txr->tx_buffers[i];
2129 ctxd->buffer_addr =
2130 htole64(seg_addr + seg_len);
2131 ctxd->lower.data = htole32(
2132 adapter->txd_cmd | txd_lower | TSO_WORKAROUND);
2133 ctxd->upper.data =
2134 htole32(txd_upper);
2135 last = i;
2136 if (++i == adapter->num_tx_desc)
2137 i = 0;
2138 } else {
2139 ctxd->buffer_addr = htole64(seg_addr);
2140 ctxd->lower.data = htole32(
2141 adapter->txd_cmd | txd_lower | seg_len);
2142 ctxd->upper.data = htole32(txd_upper);
2143 last = i;
2144 if (++i == adapter->num_tx_desc)
2145 i = 0;
2146 }
2147 tx_buffer->m_head = NULL;
2148 tx_buffer->next_eop = -1;
2149 }
2150
2151 txr->next_avail_desc = i;
2152 txr->tx_avail -= nsegs;
2153
2154 tx_buffer->m_head = m_head;
2155 /*
2156 ** Here we swap the map so the last descriptor,
2157 ** which gets the completion interrupt has the
2158 ** real map, and the first descriptor gets the
2159 ** unused map from this descriptor.
2160 */
2161 tx_buffer_mapped->map = tx_buffer->map;
2162 tx_buffer->map = map;
2163 bus_dmamap_sync(txr->txtag, map, BUS_DMASYNC_PREWRITE);
2164
2165 /*
2166 * Last Descriptor of Packet
2167 * needs End Of Packet (EOP)
2168 * and Report Status (RS)
2169 */
2170 ctxd->lower.data |=
2171 htole32(E1000_TXD_CMD_EOP | E1000_TXD_CMD_RS);
2172 /*
2173 * Keep track in the first buffer which
2174 * descriptor will be written back
2175 */
2176 tx_buffer = &txr->tx_buffers[first];
2177 tx_buffer->next_eop = last;
2178
2179 /*
2180 * Advance the Transmit Descriptor Tail (TDT), this tells the E1000
2181 * that this frame is available to transmit.
2182 */
2183 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
2184 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
2185 E1000_WRITE_REG(&adapter->hw, E1000_TDT(txr->me), i);
2186
2187 return (0);
2188}
2189
2190static void
2191em_set_promisc(struct adapter *adapter)
2192{
2193 if_t ifp = adapter->ifp;
2194 u32 reg_rctl;
2195
2196 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2197
2198 if (if_getflags(ifp) & IFF_PROMISC) {
2199 reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
2200 /* Turn this on if you want to see bad packets */
2201 if (em_debug_sbp)
2202 reg_rctl |= E1000_RCTL_SBP;
2203 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2204 } else if (if_getflags(ifp) & IFF_ALLMULTI) {
2205 reg_rctl |= E1000_RCTL_MPE;
2206 reg_rctl &= ~E1000_RCTL_UPE;
2207 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2208 }
2209}
2210
2211static void
2212em_disable_promisc(struct adapter *adapter)
2213{
2214 if_t ifp = adapter->ifp;
2215 u32 reg_rctl;
2216 int mcnt = 0;
2217
2218 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2219 reg_rctl &= (~E1000_RCTL_UPE);
2220 if (if_getflags(ifp) & IFF_ALLMULTI)
2221 mcnt = MAX_NUM_MULTICAST_ADDRESSES;
2222 else
2223 mcnt = if_multiaddr_count(ifp, MAX_NUM_MULTICAST_ADDRESSES);
2224 /* Don't disable if in MAX groups */
2225 if (mcnt < MAX_NUM_MULTICAST_ADDRESSES)
2226 reg_rctl &= (~E1000_RCTL_MPE);
2227 reg_rctl &= (~E1000_RCTL_SBP);
2228 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2229}
2230
2231
2232/*********************************************************************
2233 * Multicast Update
2234 *
2235 * This routine is called whenever multicast address list is updated.
2236 *
2237 **********************************************************************/
2238
2239static void
2240em_set_multi(struct adapter *adapter)
2241{
2242 if_t ifp = adapter->ifp;
2243 u32 reg_rctl = 0;
2244 u8 *mta; /* Multicast array memory */
2245 int mcnt = 0;
2246
2247 IOCTL_DEBUGOUT("em_set_multi: begin");
2248
2249 mta = adapter->mta;
2250 bzero(mta, sizeof(u8) * ETH_ADDR_LEN * MAX_NUM_MULTICAST_ADDRESSES);
2251
2252 if (adapter->hw.mac.type == e1000_82542 &&
2253 adapter->hw.revision_id == E1000_REVISION_2) {
2254 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2255 if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
2256 e1000_pci_clear_mwi(&adapter->hw);
2257 reg_rctl |= E1000_RCTL_RST;
2258 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2259 msec_delay(5);
2260 }
2261
2262 if_multiaddr_array(ifp, mta, &mcnt, MAX_NUM_MULTICAST_ADDRESSES);
2263
2264 if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
2265 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2266 reg_rctl |= E1000_RCTL_MPE;
2267 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2268 } else
2269 e1000_update_mc_addr_list(&adapter->hw, mta, mcnt);
2270
2271 if (adapter->hw.mac.type == e1000_82542 &&
2272 adapter->hw.revision_id == E1000_REVISION_2) {
2273 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2274 reg_rctl &= ~E1000_RCTL_RST;
2275 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2276 msec_delay(5);
2277 if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
2278 e1000_pci_set_mwi(&adapter->hw);
2279 }
2280}
2281
2282
2283/*********************************************************************
2284 * Timer routine
2285 *
2286 * This routine checks for link status and updates statistics.
2287 *
2288 **********************************************************************/
2289
2290static void
2291em_local_timer(void *arg)
2292{
2293 struct adapter *adapter = arg;
2294 if_t ifp = adapter->ifp;
2295 struct tx_ring *txr = adapter->tx_rings;
2296 struct rx_ring *rxr = adapter->rx_rings;
2297 u32 trigger = 0;
2298
2299 EM_CORE_LOCK_ASSERT(adapter);
2300
2301 em_update_link_status(adapter);
2302 em_update_stats_counters(adapter);
2303
2304 /* Reset LAA into RAR[0] on 82571 */
2305 if ((adapter->hw.mac.type == e1000_82571) &&
2306 e1000_get_laa_state_82571(&adapter->hw))
2307 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0);
2308
2309 /* Mask to use in the irq trigger */
2310 if (adapter->msix_mem) {
2311 for (int i = 0; i < adapter->num_queues; i++, rxr++)
2312 trigger |= rxr->ims;
2313 rxr = adapter->rx_rings;
2314 } else
2315 trigger = E1000_ICS_RXDMT0;
2316
2317 /*
2318 ** Check on the state of the TX queue(s), this
2319 ** can be done without the lock because its RO
2320 ** and the HUNG state will be static if set.
2321 */
2322 for (int i = 0; i < adapter->num_queues; i++, txr++) {
2323 if (txr->busy == EM_TX_HUNG)
2324 goto hung;
2325 if (txr->busy >= EM_TX_MAXTRIES)
2326 txr->busy = EM_TX_HUNG;
2327 /* Schedule a TX tasklet if needed */
2328 if (txr->tx_avail <= EM_MAX_SCATTER)
2329 taskqueue_enqueue(txr->tq, &txr->tx_task);
2330 }
2331
2332 callout_reset(&adapter->timer, hz, em_local_timer, adapter);
2333#ifndef DEVICE_POLLING
2334 /* Trigger an RX interrupt to guarantee mbuf refresh */
2335 E1000_WRITE_REG(&adapter->hw, E1000_ICS, trigger);
2336#endif
2337 return;
2338hung:
2339 /* Looks like we're hung */
2340 device_printf(adapter->dev, "Watchdog timeout Queue[%d]-- resetting\n",
2341 txr->me);
2342 em_print_debug_info(adapter);
2343 if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
2344 adapter->watchdog_events++;
2345 em_init_locked(adapter);
2346}
2347
2348
2349static void
2350em_update_link_status(struct adapter *adapter)
2351{
2352 struct e1000_hw *hw = &adapter->hw;
2353 if_t ifp = adapter->ifp;
2354 device_t dev = adapter->dev;
2355 struct tx_ring *txr = adapter->tx_rings;
2356 u32 link_check = 0;
2357
2358 /* Get the cached link value or read phy for real */
2359 switch (hw->phy.media_type) {
2360 case e1000_media_type_copper:
2361 if (hw->mac.get_link_status) {
1192 case e1000_82574:
1193 case e1000_82583:
1194 case e1000_80003es2lan: /* 9K Jumbo Frame size */
1195 max_frame_size = 9234;
1196 break;
1197 case e1000_pchlan:
1198 max_frame_size = 4096;
1199 break;
1200 /* Adapters that do not support jumbo frames */
1201 case e1000_ich8lan:
1202 max_frame_size = ETHER_MAX_LEN;
1203 break;
1204 default:
1205 max_frame_size = MAX_JUMBO_FRAME_SIZE;
1206 }
1207 if (ifr->ifr_mtu > max_frame_size - ETHER_HDR_LEN -
1208 ETHER_CRC_LEN) {
1209 EM_CORE_UNLOCK(adapter);
1210 error = EINVAL;
1211 break;
1212 }
1213
1214 if_setmtu(ifp, ifr->ifr_mtu);
1215 adapter->hw.mac.max_frame_size =
1216 if_getmtu(ifp) + ETHER_HDR_LEN + ETHER_CRC_LEN;
1217 em_init_locked(adapter);
1218 EM_CORE_UNLOCK(adapter);
1219 break;
1220 }
1221 case SIOCSIFFLAGS:
1222 IOCTL_DEBUGOUT("ioctl rcv'd:\
1223 SIOCSIFFLAGS (Set Interface Flags)");
1224 EM_CORE_LOCK(adapter);
1225 if (if_getflags(ifp) & IFF_UP) {
1226 if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
1227 if ((if_getflags(ifp) ^ adapter->if_flags) &
1228 (IFF_PROMISC | IFF_ALLMULTI)) {
1229 em_disable_promisc(adapter);
1230 em_set_promisc(adapter);
1231 }
1232 } else
1233 em_init_locked(adapter);
1234 } else
1235 if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
1236 em_stop(adapter);
1237 adapter->if_flags = if_getflags(ifp);
1238 EM_CORE_UNLOCK(adapter);
1239 break;
1240 case SIOCADDMULTI:
1241 case SIOCDELMULTI:
1242 IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
1243 if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
1244 EM_CORE_LOCK(adapter);
1245 em_disable_intr(adapter);
1246 em_set_multi(adapter);
1247#ifdef DEVICE_POLLING
1248 if (!(if_getcapenable(ifp) & IFCAP_POLLING))
1249#endif
1250 em_enable_intr(adapter);
1251 EM_CORE_UNLOCK(adapter);
1252 }
1253 break;
1254 case SIOCSIFMEDIA:
1255 /* Check SOL/IDER usage */
1256 EM_CORE_LOCK(adapter);
1257 if (e1000_check_reset_block(&adapter->hw)) {
1258 EM_CORE_UNLOCK(adapter);
1259 device_printf(adapter->dev, "Media change is"
1260 " blocked due to SOL/IDER session.\n");
1261 break;
1262 }
1263 EM_CORE_UNLOCK(adapter);
1264 /* falls thru */
1265 case SIOCGIFMEDIA:
1266 IOCTL_DEBUGOUT("ioctl rcv'd: \
1267 SIOCxIFMEDIA (Get/Set Interface Media)");
1268 error = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
1269 break;
1270 case SIOCSIFCAP:
1271 {
1272 int mask, reinit;
1273
1274 IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFCAP (Set Capabilities)");
1275 reinit = 0;
1276 mask = ifr->ifr_reqcap ^ if_getcapenable(ifp);
1277#ifdef DEVICE_POLLING
1278 if (mask & IFCAP_POLLING) {
1279 if (ifr->ifr_reqcap & IFCAP_POLLING) {
1280 error = ether_poll_register(em_poll, ifp);
1281 if (error)
1282 return (error);
1283 EM_CORE_LOCK(adapter);
1284 em_disable_intr(adapter);
1285 if_setcapenablebit(ifp, IFCAP_POLLING, 0);
1286 EM_CORE_UNLOCK(adapter);
1287 } else {
1288 error = ether_poll_deregister(ifp);
1289 /* Enable interrupt even in error case */
1290 EM_CORE_LOCK(adapter);
1291 em_enable_intr(adapter);
1292 if_setcapenablebit(ifp, 0, IFCAP_POLLING);
1293 EM_CORE_UNLOCK(adapter);
1294 }
1295 }
1296#endif
1297 if (mask & IFCAP_HWCSUM) {
1298 if_togglecapenable(ifp,IFCAP_HWCSUM);
1299 reinit = 1;
1300 }
1301 if (mask & IFCAP_TSO4) {
1302 if_togglecapenable(ifp,IFCAP_TSO4);
1303 reinit = 1;
1304 }
1305 if (mask & IFCAP_VLAN_HWTAGGING) {
1306 if_togglecapenable(ifp,IFCAP_VLAN_HWTAGGING);
1307 reinit = 1;
1308 }
1309 if (mask & IFCAP_VLAN_HWFILTER) {
1310 if_togglecapenable(ifp, IFCAP_VLAN_HWFILTER);
1311 reinit = 1;
1312 }
1313 if (mask & IFCAP_VLAN_HWTSO) {
1314 if_togglecapenable(ifp, IFCAP_VLAN_HWTSO);
1315 reinit = 1;
1316 }
1317 if ((mask & IFCAP_WOL) &&
1318 (if_getcapabilities(ifp) & IFCAP_WOL) != 0) {
1319 if (mask & IFCAP_WOL_MCAST)
1320 if_togglecapenable(ifp, IFCAP_WOL_MCAST);
1321 if (mask & IFCAP_WOL_MAGIC)
1322 if_togglecapenable(ifp, IFCAP_WOL_MAGIC);
1323 }
1324 if (reinit && (if_getdrvflags(ifp) & IFF_DRV_RUNNING))
1325 em_init(adapter);
1326 if_vlancap(ifp);
1327 break;
1328 }
1329
1330 default:
1331 error = ether_ioctl(ifp, command, data);
1332 break;
1333 }
1334
1335 return (error);
1336}
1337
1338
1339/*********************************************************************
1340 * Init entry point
1341 *
1342 * This routine is used in two ways. It is used by the stack as
1343 * init entry point in network interface structure. It is also used
1344 * by the driver as a hw/sw initialization routine to get to a
1345 * consistent state.
1346 *
1347 * return 0 on success, positive on failure
1348 **********************************************************************/
1349
1350static void
1351em_init_locked(struct adapter *adapter)
1352{
1353 if_t ifp = adapter->ifp;
1354 device_t dev = adapter->dev;
1355
1356 INIT_DEBUGOUT("em_init: begin");
1357
1358 EM_CORE_LOCK_ASSERT(adapter);
1359
1360 em_disable_intr(adapter);
1361 callout_stop(&adapter->timer);
1362
1363 /* Get the latest mac address, User can use a LAA */
1364 bcopy(if_getlladdr(adapter->ifp), adapter->hw.mac.addr,
1365 ETHER_ADDR_LEN);
1366
1367 /* Put the address into the Receive Address Array */
1368 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0);
1369
1370 /*
1371 * With the 82571 adapter, RAR[0] may be overwritten
1372 * when the other port is reset, we make a duplicate
1373 * in RAR[14] for that eventuality, this assures
1374 * the interface continues to function.
1375 */
1376 if (adapter->hw.mac.type == e1000_82571) {
1377 e1000_set_laa_state_82571(&adapter->hw, TRUE);
1378 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr,
1379 E1000_RAR_ENTRIES - 1);
1380 }
1381
1382 /* Initialize the hardware */
1383 em_reset(adapter);
1384 em_update_link_status(adapter);
1385
1386 /* Setup VLAN support, basic and offload if available */
1387 E1000_WRITE_REG(&adapter->hw, E1000_VET, ETHERTYPE_VLAN);
1388
1389 /* Set hardware offload abilities */
1390 if_clearhwassist(ifp);
1391 if (if_getcapenable(ifp) & IFCAP_TXCSUM)
1392 if_sethwassistbits(ifp, CSUM_TCP | CSUM_UDP, 0);
1393 /*
1394 ** There have proven to be problems with TSO when not
1395 ** at full gigabit speed, so disable the assist automatically
1396 ** when at lower speeds. -jfv
1397 */
1398 if (if_getcapenable(ifp) & IFCAP_TSO4) {
1399 if (adapter->link_speed == SPEED_1000)
1400 if_sethwassistbits(ifp, CSUM_TSO, 0);
1401 }
1402
1403 /* Configure for OS presence */
1404 em_init_manageability(adapter);
1405
1406 /* Prepare transmit descriptors and buffers */
1407 em_setup_transmit_structures(adapter);
1408 em_initialize_transmit_unit(adapter);
1409
1410 /* Setup Multicast table */
1411 em_set_multi(adapter);
1412
1413 /*
1414 ** Figure out the desired mbuf
1415 ** pool for doing jumbos
1416 */
1417 if (adapter->hw.mac.max_frame_size <= 2048)
1418 adapter->rx_mbuf_sz = MCLBYTES;
1419 else if (adapter->hw.mac.max_frame_size <= 4096)
1420 adapter->rx_mbuf_sz = MJUMPAGESIZE;
1421 else
1422 adapter->rx_mbuf_sz = MJUM9BYTES;
1423
1424 /* Prepare receive descriptors and buffers */
1425 if (em_setup_receive_structures(adapter)) {
1426 device_printf(dev, "Could not setup receive structures\n");
1427 em_stop(adapter);
1428 return;
1429 }
1430 em_initialize_receive_unit(adapter);
1431
1432 /* Use real VLAN Filter support? */
1433 if (if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) {
1434 if (if_getcapenable(ifp) & IFCAP_VLAN_HWFILTER)
1435 /* Use real VLAN Filter support */
1436 em_setup_vlan_hw_support(adapter);
1437 else {
1438 u32 ctrl;
1439 ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL);
1440 ctrl |= E1000_CTRL_VME;
1441 E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl);
1442 }
1443 }
1444
1445 /* Don't lose promiscuous settings */
1446 em_set_promisc(adapter);
1447
1448 /* Set the interface as ACTIVE */
1449 if_setdrvflagbits(ifp, IFF_DRV_RUNNING, IFF_DRV_OACTIVE);
1450
1451 callout_reset(&adapter->timer, hz, em_local_timer, adapter);
1452 e1000_clear_hw_cntrs_base_generic(&adapter->hw);
1453
1454 /* MSI/X configuration for 82574 */
1455 if (adapter->hw.mac.type == e1000_82574) {
1456 int tmp;
1457 tmp = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
1458 tmp |= E1000_CTRL_EXT_PBA_CLR;
1459 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, tmp);
1460 /* Set the IVAR - interrupt vector routing. */
1461 E1000_WRITE_REG(&adapter->hw, E1000_IVAR, adapter->ivars);
1462 }
1463
1464#ifdef DEVICE_POLLING
1465 /*
1466 * Only enable interrupts if we are not polling, make sure
1467 * they are off otherwise.
1468 */
1469 if (if_getcapenable(ifp) & IFCAP_POLLING)
1470 em_disable_intr(adapter);
1471 else
1472#endif /* DEVICE_POLLING */
1473 em_enable_intr(adapter);
1474
1475 /* AMT based hardware can now take control from firmware */
1476 if (adapter->has_manage && adapter->has_amt)
1477 em_get_hw_control(adapter);
1478}
1479
1480static void
1481em_init(void *arg)
1482{
1483 struct adapter *adapter = arg;
1484
1485 EM_CORE_LOCK(adapter);
1486 em_init_locked(adapter);
1487 EM_CORE_UNLOCK(adapter);
1488}
1489
1490
1491#ifdef DEVICE_POLLING
1492/*********************************************************************
1493 *
1494 * Legacy polling routine: note this only works with single queue
1495 *
1496 *********************************************************************/
1497static int
1498em_poll(if_t ifp, enum poll_cmd cmd, int count)
1499{
1500 struct adapter *adapter = if_getsoftc(ifp);
1501 struct tx_ring *txr = adapter->tx_rings;
1502 struct rx_ring *rxr = adapter->rx_rings;
1503 u32 reg_icr;
1504 int rx_done;
1505
1506 EM_CORE_LOCK(adapter);
1507 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) {
1508 EM_CORE_UNLOCK(adapter);
1509 return (0);
1510 }
1511
1512 if (cmd == POLL_AND_CHECK_STATUS) {
1513 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1514 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1515 callout_stop(&adapter->timer);
1516 adapter->hw.mac.get_link_status = 1;
1517 em_update_link_status(adapter);
1518 callout_reset(&adapter->timer, hz,
1519 em_local_timer, adapter);
1520 }
1521 }
1522 EM_CORE_UNLOCK(adapter);
1523
1524 em_rxeof(rxr, count, &rx_done);
1525
1526 EM_TX_LOCK(txr);
1527 em_txeof(txr);
1528#ifdef EM_MULTIQUEUE
1529 if (!drbr_empty(ifp, txr->br))
1530 em_mq_start_locked(ifp, txr);
1531#else
1532 if (!if_sendq_empty(ifp))
1533 em_start_locked(ifp, txr);
1534#endif
1535 EM_TX_UNLOCK(txr);
1536
1537 return (rx_done);
1538}
1539#endif /* DEVICE_POLLING */
1540
1541
1542/*********************************************************************
1543 *
1544 * Fast Legacy/MSI Combined Interrupt Service routine
1545 *
1546 *********************************************************************/
1547static int
1548em_irq_fast(void *arg)
1549{
1550 struct adapter *adapter = arg;
1551 if_t ifp;
1552 u32 reg_icr;
1553
1554 ifp = adapter->ifp;
1555
1556 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1557
1558 /* Hot eject? */
1559 if (reg_icr == 0xffffffff)
1560 return FILTER_STRAY;
1561
1562 /* Definitely not our interrupt. */
1563 if (reg_icr == 0x0)
1564 return FILTER_STRAY;
1565
1566 /*
1567 * Starting with the 82571 chip, bit 31 should be used to
1568 * determine whether the interrupt belongs to us.
1569 */
1570 if (adapter->hw.mac.type >= e1000_82571 &&
1571 (reg_icr & E1000_ICR_INT_ASSERTED) == 0)
1572 return FILTER_STRAY;
1573
1574 em_disable_intr(adapter);
1575 taskqueue_enqueue(adapter->tq, &adapter->que_task);
1576
1577 /* Link status change */
1578 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1579 adapter->hw.mac.get_link_status = 1;
1580 taskqueue_enqueue(taskqueue_fast, &adapter->link_task);
1581 }
1582
1583 if (reg_icr & E1000_ICR_RXO)
1584 adapter->rx_overruns++;
1585 return FILTER_HANDLED;
1586}
1587
1588/* Combined RX/TX handler, used by Legacy and MSI */
1589static void
1590em_handle_que(void *context, int pending)
1591{
1592 struct adapter *adapter = context;
1593 if_t ifp = adapter->ifp;
1594 struct tx_ring *txr = adapter->tx_rings;
1595 struct rx_ring *rxr = adapter->rx_rings;
1596
1597 if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
1598 bool more = em_rxeof(rxr, adapter->rx_process_limit, NULL);
1599
1600 EM_TX_LOCK(txr);
1601 em_txeof(txr);
1602#ifdef EM_MULTIQUEUE
1603 if (!drbr_empty(ifp, txr->br))
1604 em_mq_start_locked(ifp, txr);
1605#else
1606 if (!if_sendq_empty(ifp))
1607 em_start_locked(ifp, txr);
1608#endif
1609 EM_TX_UNLOCK(txr);
1610 if (more) {
1611 taskqueue_enqueue(adapter->tq, &adapter->que_task);
1612 return;
1613 }
1614 }
1615
1616 em_enable_intr(adapter);
1617 return;
1618}
1619
1620
1621/*********************************************************************
1622 *
1623 * MSIX Interrupt Service Routines
1624 *
1625 **********************************************************************/
1626static void
1627em_msix_tx(void *arg)
1628{
1629 struct tx_ring *txr = arg;
1630 struct adapter *adapter = txr->adapter;
1631 if_t ifp = adapter->ifp;
1632
1633 ++txr->tx_irq;
1634 EM_TX_LOCK(txr);
1635 em_txeof(txr);
1636#ifdef EM_MULTIQUEUE
1637 if (!drbr_empty(ifp, txr->br))
1638 em_mq_start_locked(ifp, txr);
1639#else
1640 if (!if_sendq_empty(ifp))
1641 em_start_locked(ifp, txr);
1642#endif
1643
1644 /* Reenable this interrupt */
1645 E1000_WRITE_REG(&adapter->hw, E1000_IMS, txr->ims);
1646 EM_TX_UNLOCK(txr);
1647 return;
1648}
1649
1650/*********************************************************************
1651 *
1652 * MSIX RX Interrupt Service routine
1653 *
1654 **********************************************************************/
1655
1656static void
1657em_msix_rx(void *arg)
1658{
1659 struct rx_ring *rxr = arg;
1660 struct adapter *adapter = rxr->adapter;
1661 bool more;
1662
1663 ++rxr->rx_irq;
1664 if (!(if_getdrvflags(adapter->ifp) & IFF_DRV_RUNNING))
1665 return;
1666 more = em_rxeof(rxr, adapter->rx_process_limit, NULL);
1667 if (more)
1668 taskqueue_enqueue(rxr->tq, &rxr->rx_task);
1669 else {
1670 /* Reenable this interrupt */
1671 E1000_WRITE_REG(&adapter->hw, E1000_IMS, rxr->ims);
1672 }
1673 return;
1674}
1675
1676/*********************************************************************
1677 *
1678 * MSIX Link Fast Interrupt Service routine
1679 *
1680 **********************************************************************/
1681static void
1682em_msix_link(void *arg)
1683{
1684 struct adapter *adapter = arg;
1685 u32 reg_icr;
1686
1687 ++adapter->link_irq;
1688 reg_icr = E1000_READ_REG(&adapter->hw, E1000_ICR);
1689
1690 if (reg_icr & E1000_ICR_RXO)
1691 adapter->rx_overruns++;
1692
1693 if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1694 adapter->hw.mac.get_link_status = 1;
1695 em_handle_link(adapter, 0);
1696 } else
1697 E1000_WRITE_REG(&adapter->hw, E1000_IMS,
1698 EM_MSIX_LINK | E1000_IMS_LSC);
1699 /*
1700 ** Because we must read the ICR for this interrupt
1701 ** it may clear other causes using autoclear, for
1702 ** this reason we simply create a soft interrupt
1703 ** for all these vectors.
1704 */
1705 if (reg_icr) {
1706 E1000_WRITE_REG(&adapter->hw,
1707 E1000_ICS, adapter->ims);
1708 }
1709 return;
1710}
1711
1712static void
1713em_handle_rx(void *context, int pending)
1714{
1715 struct rx_ring *rxr = context;
1716 struct adapter *adapter = rxr->adapter;
1717 bool more;
1718
1719 more = em_rxeof(rxr, adapter->rx_process_limit, NULL);
1720 if (more)
1721 taskqueue_enqueue(rxr->tq, &rxr->rx_task);
1722 else {
1723 /* Reenable this interrupt */
1724 E1000_WRITE_REG(&adapter->hw, E1000_IMS, rxr->ims);
1725 }
1726}
1727
1728static void
1729em_handle_tx(void *context, int pending)
1730{
1731 struct tx_ring *txr = context;
1732 struct adapter *adapter = txr->adapter;
1733 if_t ifp = adapter->ifp;
1734
1735 EM_TX_LOCK(txr);
1736 em_txeof(txr);
1737#ifdef EM_MULTIQUEUE
1738 if (!drbr_empty(ifp, txr->br))
1739 em_mq_start_locked(ifp, txr);
1740#else
1741 if (!if_sendq_empty(ifp))
1742 em_start_locked(ifp, txr);
1743#endif
1744 E1000_WRITE_REG(&adapter->hw, E1000_IMS, txr->ims);
1745 EM_TX_UNLOCK(txr);
1746}
1747
1748static void
1749em_handle_link(void *context, int pending)
1750{
1751 struct adapter *adapter = context;
1752 struct tx_ring *txr = adapter->tx_rings;
1753 if_t ifp = adapter->ifp;
1754
1755 if (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING))
1756 return;
1757
1758 EM_CORE_LOCK(adapter);
1759 callout_stop(&adapter->timer);
1760 em_update_link_status(adapter);
1761 callout_reset(&adapter->timer, hz, em_local_timer, adapter);
1762 E1000_WRITE_REG(&adapter->hw, E1000_IMS,
1763 EM_MSIX_LINK | E1000_IMS_LSC);
1764 if (adapter->link_active) {
1765 for (int i = 0; i < adapter->num_queues; i++, txr++) {
1766 EM_TX_LOCK(txr);
1767#ifdef EM_MULTIQUEUE
1768 if (!drbr_empty(ifp, txr->br))
1769 em_mq_start_locked(ifp, txr);
1770#else
1771 if (if_sendq_empty(ifp))
1772 em_start_locked(ifp, txr);
1773#endif
1774 EM_TX_UNLOCK(txr);
1775 }
1776 }
1777 EM_CORE_UNLOCK(adapter);
1778}
1779
1780
1781/*********************************************************************
1782 *
1783 * Media Ioctl callback
1784 *
1785 * This routine is called whenever the user queries the status of
1786 * the interface using ifconfig.
1787 *
1788 **********************************************************************/
1789static void
1790em_media_status(if_t ifp, struct ifmediareq *ifmr)
1791{
1792 struct adapter *adapter = if_getsoftc(ifp);
1793 u_char fiber_type = IFM_1000_SX;
1794
1795 INIT_DEBUGOUT("em_media_status: begin");
1796
1797 EM_CORE_LOCK(adapter);
1798 em_update_link_status(adapter);
1799
1800 ifmr->ifm_status = IFM_AVALID;
1801 ifmr->ifm_active = IFM_ETHER;
1802
1803 if (!adapter->link_active) {
1804 EM_CORE_UNLOCK(adapter);
1805 return;
1806 }
1807
1808 ifmr->ifm_status |= IFM_ACTIVE;
1809
1810 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
1811 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) {
1812 ifmr->ifm_active |= fiber_type | IFM_FDX;
1813 } else {
1814 switch (adapter->link_speed) {
1815 case 10:
1816 ifmr->ifm_active |= IFM_10_T;
1817 break;
1818 case 100:
1819 ifmr->ifm_active |= IFM_100_TX;
1820 break;
1821 case 1000:
1822 ifmr->ifm_active |= IFM_1000_T;
1823 break;
1824 }
1825 if (adapter->link_duplex == FULL_DUPLEX)
1826 ifmr->ifm_active |= IFM_FDX;
1827 else
1828 ifmr->ifm_active |= IFM_HDX;
1829 }
1830 EM_CORE_UNLOCK(adapter);
1831}
1832
1833/*********************************************************************
1834 *
1835 * Media Ioctl callback
1836 *
1837 * This routine is called when the user changes speed/duplex using
1838 * media/mediopt option with ifconfig.
1839 *
1840 **********************************************************************/
1841static int
1842em_media_change(if_t ifp)
1843{
1844 struct adapter *adapter = if_getsoftc(ifp);
1845 struct ifmedia *ifm = &adapter->media;
1846
1847 INIT_DEBUGOUT("em_media_change: begin");
1848
1849 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
1850 return (EINVAL);
1851
1852 EM_CORE_LOCK(adapter);
1853 switch (IFM_SUBTYPE(ifm->ifm_media)) {
1854 case IFM_AUTO:
1855 adapter->hw.mac.autoneg = DO_AUTO_NEG;
1856 adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT;
1857 break;
1858 case IFM_1000_LX:
1859 case IFM_1000_SX:
1860 case IFM_1000_T:
1861 adapter->hw.mac.autoneg = DO_AUTO_NEG;
1862 adapter->hw.phy.autoneg_advertised = ADVERTISE_1000_FULL;
1863 break;
1864 case IFM_100_TX:
1865 adapter->hw.mac.autoneg = FALSE;
1866 adapter->hw.phy.autoneg_advertised = 0;
1867 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
1868 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_FULL;
1869 else
1870 adapter->hw.mac.forced_speed_duplex = ADVERTISE_100_HALF;
1871 break;
1872 case IFM_10_T:
1873 adapter->hw.mac.autoneg = FALSE;
1874 adapter->hw.phy.autoneg_advertised = 0;
1875 if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX)
1876 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_FULL;
1877 else
1878 adapter->hw.mac.forced_speed_duplex = ADVERTISE_10_HALF;
1879 break;
1880 default:
1881 device_printf(adapter->dev, "Unsupported media type\n");
1882 }
1883
1884 em_init_locked(adapter);
1885 EM_CORE_UNLOCK(adapter);
1886
1887 return (0);
1888}
1889
1890/*********************************************************************
1891 *
1892 * This routine maps the mbufs to tx descriptors.
1893 *
1894 * return 0 on success, positive on failure
1895 **********************************************************************/
1896
1897static int
1898em_xmit(struct tx_ring *txr, struct mbuf **m_headp)
1899{
1900 struct adapter *adapter = txr->adapter;
1901 bus_dma_segment_t segs[EM_MAX_SCATTER];
1902 bus_dmamap_t map;
1903 struct em_txbuffer *tx_buffer, *tx_buffer_mapped;
1904 struct e1000_tx_desc *ctxd = NULL;
1905 struct mbuf *m_head;
1906 struct ether_header *eh;
1907 struct ip *ip = NULL;
1908 struct tcphdr *tp = NULL;
1909 u32 txd_upper = 0, txd_lower = 0;
1910 int ip_off, poff;
1911 int nsegs, i, j, first, last = 0;
1912 int error;
1913 bool do_tso, tso_desc, remap = TRUE;
1914
1915 m_head = *m_headp;
1916 do_tso = (m_head->m_pkthdr.csum_flags & CSUM_TSO);
1917 tso_desc = FALSE;
1918 ip_off = poff = 0;
1919
1920 /*
1921 * Intel recommends entire IP/TCP header length reside in a single
1922 * buffer. If multiple descriptors are used to describe the IP and
1923 * TCP header, each descriptor should describe one or more
1924 * complete headers; descriptors referencing only parts of headers
1925 * are not supported. If all layer headers are not coalesced into
1926 * a single buffer, each buffer should not cross a 4KB boundary,
1927 * or be larger than the maximum read request size.
1928 * Controller also requires modifing IP/TCP header to make TSO work
1929 * so we firstly get a writable mbuf chain then coalesce ethernet/
1930 * IP/TCP header into a single buffer to meet the requirement of
1931 * controller. This also simplifies IP/TCP/UDP checksum offloading
1932 * which also has similiar restrictions.
1933 */
1934 if (do_tso || m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD) {
1935 if (do_tso || (m_head->m_next != NULL &&
1936 m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD)) {
1937 if (M_WRITABLE(*m_headp) == 0) {
1938 m_head = m_dup(*m_headp, M_NOWAIT);
1939 m_freem(*m_headp);
1940 if (m_head == NULL) {
1941 *m_headp = NULL;
1942 return (ENOBUFS);
1943 }
1944 *m_headp = m_head;
1945 }
1946 }
1947 /*
1948 * XXX
1949 * Assume IPv4, we don't have TSO/checksum offload support
1950 * for IPv6 yet.
1951 */
1952 ip_off = sizeof(struct ether_header);
1953 if (m_head->m_len < ip_off) {
1954 m_head = m_pullup(m_head, ip_off);
1955 if (m_head == NULL) {
1956 *m_headp = NULL;
1957 return (ENOBUFS);
1958 }
1959 }
1960 eh = mtod(m_head, struct ether_header *);
1961 if (eh->ether_type == htons(ETHERTYPE_VLAN)) {
1962 ip_off = sizeof(struct ether_vlan_header);
1963 if (m_head->m_len < ip_off) {
1964 m_head = m_pullup(m_head, ip_off);
1965 if (m_head == NULL) {
1966 *m_headp = NULL;
1967 return (ENOBUFS);
1968 }
1969 }
1970 }
1971 if (m_head->m_len < ip_off + sizeof(struct ip)) {
1972 m_head = m_pullup(m_head, ip_off + sizeof(struct ip));
1973 if (m_head == NULL) {
1974 *m_headp = NULL;
1975 return (ENOBUFS);
1976 }
1977 }
1978 ip = (struct ip *)(mtod(m_head, char *) + ip_off);
1979 poff = ip_off + (ip->ip_hl << 2);
1980
1981 if (do_tso || (m_head->m_pkthdr.csum_flags & CSUM_TCP)) {
1982 if (m_head->m_len < poff + sizeof(struct tcphdr)) {
1983 m_head = m_pullup(m_head, poff +
1984 sizeof(struct tcphdr));
1985 if (m_head == NULL) {
1986 *m_headp = NULL;
1987 return (ENOBUFS);
1988 }
1989 }
1990 tp = (struct tcphdr *)(mtod(m_head, char *) + poff);
1991 /*
1992 * TSO workaround:
1993 * pull 4 more bytes of data into it.
1994 */
1995 if (m_head->m_len < poff + (tp->th_off << 2)) {
1996 m_head = m_pullup(m_head, poff +
1997 (tp->th_off << 2) +
1998 TSO_WORKAROUND);
1999 if (m_head == NULL) {
2000 *m_headp = NULL;
2001 return (ENOBUFS);
2002 }
2003 }
2004 ip = (struct ip *)(mtod(m_head, char *) + ip_off);
2005 tp = (struct tcphdr *)(mtod(m_head, char *) + poff);
2006 if (do_tso) {
2007 ip->ip_len = htons(m_head->m_pkthdr.tso_segsz +
2008 (ip->ip_hl << 2) +
2009 (tp->th_off << 2));
2010 ip->ip_sum = 0;
2011 /*
2012 * The pseudo TCP checksum does not include TCP
2013 * payload length so driver should recompute
2014 * the checksum here what hardware expect to
2015 * see. This is adherence of Microsoft's Large
2016 * Send specification.
2017 */
2018 tp->th_sum = in_pseudo(ip->ip_src.s_addr,
2019 ip->ip_dst.s_addr, htons(IPPROTO_TCP));
2020 }
2021 } else if (m_head->m_pkthdr.csum_flags & CSUM_UDP) {
2022 if (m_head->m_len < poff + sizeof(struct udphdr)) {
2023 m_head = m_pullup(m_head, poff +
2024 sizeof(struct udphdr));
2025 if (m_head == NULL) {
2026 *m_headp = NULL;
2027 return (ENOBUFS);
2028 }
2029 }
2030 ip = (struct ip *)(mtod(m_head, char *) + ip_off);
2031 }
2032 *m_headp = m_head;
2033 }
2034
2035 /*
2036 * Map the packet for DMA
2037 *
2038 * Capture the first descriptor index,
2039 * this descriptor will have the index
2040 * of the EOP which is the only one that
2041 * now gets a DONE bit writeback.
2042 */
2043 first = txr->next_avail_desc;
2044 tx_buffer = &txr->tx_buffers[first];
2045 tx_buffer_mapped = tx_buffer;
2046 map = tx_buffer->map;
2047
2048retry:
2049 error = bus_dmamap_load_mbuf_sg(txr->txtag, map,
2050 *m_headp, segs, &nsegs, BUS_DMA_NOWAIT);
2051
2052 /*
2053 * There are two types of errors we can (try) to handle:
2054 * - EFBIG means the mbuf chain was too long and bus_dma ran
2055 * out of segments. Defragment the mbuf chain and try again.
2056 * - ENOMEM means bus_dma could not obtain enough bounce buffers
2057 * at this point in time. Defer sending and try again later.
2058 * All other errors, in particular EINVAL, are fatal and prevent the
2059 * mbuf chain from ever going through. Drop it and report error.
2060 */
2061 if (error == EFBIG && remap) {
2062 struct mbuf *m;
2063
2064 m = m_collapse(*m_headp, M_NOWAIT, EM_MAX_SCATTER);
2065 if (m == NULL) {
2066 adapter->mbuf_defrag_failed++;
2067 m_freem(*m_headp);
2068 *m_headp = NULL;
2069 return (ENOBUFS);
2070 }
2071 *m_headp = m;
2072
2073 /* Try it again, but only once */
2074 remap = FALSE;
2075 goto retry;
2076 } else if (error != 0) {
2077 adapter->no_tx_dma_setup++;
2078 m_freem(*m_headp);
2079 *m_headp = NULL;
2080 return (error);
2081 }
2082
2083 /*
2084 * TSO Hardware workaround, if this packet is not
2085 * TSO, and is only a single descriptor long, and
2086 * it follows a TSO burst, then we need to add a
2087 * sentinel descriptor to prevent premature writeback.
2088 */
2089 if ((!do_tso) && (txr->tx_tso == TRUE)) {
2090 if (nsegs == 1)
2091 tso_desc = TRUE;
2092 txr->tx_tso = FALSE;
2093 }
2094
2095 if (nsegs > (txr->tx_avail - EM_MAX_SCATTER)) {
2096 txr->no_desc_avail++;
2097 bus_dmamap_unload(txr->txtag, map);
2098 return (ENOBUFS);
2099 }
2100 m_head = *m_headp;
2101
2102 /* Do hardware assists */
2103 if (m_head->m_pkthdr.csum_flags & CSUM_TSO) {
2104 em_tso_setup(txr, m_head, ip_off, ip, tp,
2105 &txd_upper, &txd_lower);
2106 /* we need to make a final sentinel transmit desc */
2107 tso_desc = TRUE;
2108 } else if (m_head->m_pkthdr.csum_flags & CSUM_OFFLOAD)
2109 em_transmit_checksum_setup(txr, m_head,
2110 ip_off, ip, &txd_upper, &txd_lower);
2111
2112 if (m_head->m_flags & M_VLANTAG) {
2113 /* Set the vlan id. */
2114 txd_upper |= htole16(if_getvtag(m_head)) << 16;
2115 /* Tell hardware to add tag */
2116 txd_lower |= htole32(E1000_TXD_CMD_VLE);
2117 }
2118
2119 i = txr->next_avail_desc;
2120
2121 /* Set up our transmit descriptors */
2122 for (j = 0; j < nsegs; j++) {
2123 bus_size_t seg_len;
2124 bus_addr_t seg_addr;
2125
2126 tx_buffer = &txr->tx_buffers[i];
2127 ctxd = &txr->tx_base[i];
2128 seg_addr = segs[j].ds_addr;
2129 seg_len = segs[j].ds_len;
2130 /*
2131 ** TSO Workaround:
2132 ** If this is the last descriptor, we want to
2133 ** split it so we have a small final sentinel
2134 */
2135 if (tso_desc && (j == (nsegs - 1)) && (seg_len > 8)) {
2136 seg_len -= TSO_WORKAROUND;
2137 ctxd->buffer_addr = htole64(seg_addr);
2138 ctxd->lower.data = htole32(
2139 adapter->txd_cmd | txd_lower | seg_len);
2140 ctxd->upper.data = htole32(txd_upper);
2141 if (++i == adapter->num_tx_desc)
2142 i = 0;
2143
2144 /* Now make the sentinel */
2145 txr->tx_avail--;
2146 ctxd = &txr->tx_base[i];
2147 tx_buffer = &txr->tx_buffers[i];
2148 ctxd->buffer_addr =
2149 htole64(seg_addr + seg_len);
2150 ctxd->lower.data = htole32(
2151 adapter->txd_cmd | txd_lower | TSO_WORKAROUND);
2152 ctxd->upper.data =
2153 htole32(txd_upper);
2154 last = i;
2155 if (++i == adapter->num_tx_desc)
2156 i = 0;
2157 } else {
2158 ctxd->buffer_addr = htole64(seg_addr);
2159 ctxd->lower.data = htole32(
2160 adapter->txd_cmd | txd_lower | seg_len);
2161 ctxd->upper.data = htole32(txd_upper);
2162 last = i;
2163 if (++i == adapter->num_tx_desc)
2164 i = 0;
2165 }
2166 tx_buffer->m_head = NULL;
2167 tx_buffer->next_eop = -1;
2168 }
2169
2170 txr->next_avail_desc = i;
2171 txr->tx_avail -= nsegs;
2172
2173 tx_buffer->m_head = m_head;
2174 /*
2175 ** Here we swap the map so the last descriptor,
2176 ** which gets the completion interrupt has the
2177 ** real map, and the first descriptor gets the
2178 ** unused map from this descriptor.
2179 */
2180 tx_buffer_mapped->map = tx_buffer->map;
2181 tx_buffer->map = map;
2182 bus_dmamap_sync(txr->txtag, map, BUS_DMASYNC_PREWRITE);
2183
2184 /*
2185 * Last Descriptor of Packet
2186 * needs End Of Packet (EOP)
2187 * and Report Status (RS)
2188 */
2189 ctxd->lower.data |=
2190 htole32(E1000_TXD_CMD_EOP | E1000_TXD_CMD_RS);
2191 /*
2192 * Keep track in the first buffer which
2193 * descriptor will be written back
2194 */
2195 tx_buffer = &txr->tx_buffers[first];
2196 tx_buffer->next_eop = last;
2197
2198 /*
2199 * Advance the Transmit Descriptor Tail (TDT), this tells the E1000
2200 * that this frame is available to transmit.
2201 */
2202 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
2203 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
2204 E1000_WRITE_REG(&adapter->hw, E1000_TDT(txr->me), i);
2205
2206 return (0);
2207}
2208
2209static void
2210em_set_promisc(struct adapter *adapter)
2211{
2212 if_t ifp = adapter->ifp;
2213 u32 reg_rctl;
2214
2215 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2216
2217 if (if_getflags(ifp) & IFF_PROMISC) {
2218 reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
2219 /* Turn this on if you want to see bad packets */
2220 if (em_debug_sbp)
2221 reg_rctl |= E1000_RCTL_SBP;
2222 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2223 } else if (if_getflags(ifp) & IFF_ALLMULTI) {
2224 reg_rctl |= E1000_RCTL_MPE;
2225 reg_rctl &= ~E1000_RCTL_UPE;
2226 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2227 }
2228}
2229
2230static void
2231em_disable_promisc(struct adapter *adapter)
2232{
2233 if_t ifp = adapter->ifp;
2234 u32 reg_rctl;
2235 int mcnt = 0;
2236
2237 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2238 reg_rctl &= (~E1000_RCTL_UPE);
2239 if (if_getflags(ifp) & IFF_ALLMULTI)
2240 mcnt = MAX_NUM_MULTICAST_ADDRESSES;
2241 else
2242 mcnt = if_multiaddr_count(ifp, MAX_NUM_MULTICAST_ADDRESSES);
2243 /* Don't disable if in MAX groups */
2244 if (mcnt < MAX_NUM_MULTICAST_ADDRESSES)
2245 reg_rctl &= (~E1000_RCTL_MPE);
2246 reg_rctl &= (~E1000_RCTL_SBP);
2247 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2248}
2249
2250
2251/*********************************************************************
2252 * Multicast Update
2253 *
2254 * This routine is called whenever multicast address list is updated.
2255 *
2256 **********************************************************************/
2257
2258static void
2259em_set_multi(struct adapter *adapter)
2260{
2261 if_t ifp = adapter->ifp;
2262 u32 reg_rctl = 0;
2263 u8 *mta; /* Multicast array memory */
2264 int mcnt = 0;
2265
2266 IOCTL_DEBUGOUT("em_set_multi: begin");
2267
2268 mta = adapter->mta;
2269 bzero(mta, sizeof(u8) * ETH_ADDR_LEN * MAX_NUM_MULTICAST_ADDRESSES);
2270
2271 if (adapter->hw.mac.type == e1000_82542 &&
2272 adapter->hw.revision_id == E1000_REVISION_2) {
2273 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2274 if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
2275 e1000_pci_clear_mwi(&adapter->hw);
2276 reg_rctl |= E1000_RCTL_RST;
2277 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2278 msec_delay(5);
2279 }
2280
2281 if_multiaddr_array(ifp, mta, &mcnt, MAX_NUM_MULTICAST_ADDRESSES);
2282
2283 if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
2284 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2285 reg_rctl |= E1000_RCTL_MPE;
2286 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2287 } else
2288 e1000_update_mc_addr_list(&adapter->hw, mta, mcnt);
2289
2290 if (adapter->hw.mac.type == e1000_82542 &&
2291 adapter->hw.revision_id == E1000_REVISION_2) {
2292 reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
2293 reg_rctl &= ~E1000_RCTL_RST;
2294 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, reg_rctl);
2295 msec_delay(5);
2296 if (adapter->hw.bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
2297 e1000_pci_set_mwi(&adapter->hw);
2298 }
2299}
2300
2301
2302/*********************************************************************
2303 * Timer routine
2304 *
2305 * This routine checks for link status and updates statistics.
2306 *
2307 **********************************************************************/
2308
2309static void
2310em_local_timer(void *arg)
2311{
2312 struct adapter *adapter = arg;
2313 if_t ifp = adapter->ifp;
2314 struct tx_ring *txr = adapter->tx_rings;
2315 struct rx_ring *rxr = adapter->rx_rings;
2316 u32 trigger = 0;
2317
2318 EM_CORE_LOCK_ASSERT(adapter);
2319
2320 em_update_link_status(adapter);
2321 em_update_stats_counters(adapter);
2322
2323 /* Reset LAA into RAR[0] on 82571 */
2324 if ((adapter->hw.mac.type == e1000_82571) &&
2325 e1000_get_laa_state_82571(&adapter->hw))
2326 e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0);
2327
2328 /* Mask to use in the irq trigger */
2329 if (adapter->msix_mem) {
2330 for (int i = 0; i < adapter->num_queues; i++, rxr++)
2331 trigger |= rxr->ims;
2332 rxr = adapter->rx_rings;
2333 } else
2334 trigger = E1000_ICS_RXDMT0;
2335
2336 /*
2337 ** Check on the state of the TX queue(s), this
2338 ** can be done without the lock because its RO
2339 ** and the HUNG state will be static if set.
2340 */
2341 for (int i = 0; i < adapter->num_queues; i++, txr++) {
2342 if (txr->busy == EM_TX_HUNG)
2343 goto hung;
2344 if (txr->busy >= EM_TX_MAXTRIES)
2345 txr->busy = EM_TX_HUNG;
2346 /* Schedule a TX tasklet if needed */
2347 if (txr->tx_avail <= EM_MAX_SCATTER)
2348 taskqueue_enqueue(txr->tq, &txr->tx_task);
2349 }
2350
2351 callout_reset(&adapter->timer, hz, em_local_timer, adapter);
2352#ifndef DEVICE_POLLING
2353 /* Trigger an RX interrupt to guarantee mbuf refresh */
2354 E1000_WRITE_REG(&adapter->hw, E1000_ICS, trigger);
2355#endif
2356 return;
2357hung:
2358 /* Looks like we're hung */
2359 device_printf(adapter->dev, "Watchdog timeout Queue[%d]-- resetting\n",
2360 txr->me);
2361 em_print_debug_info(adapter);
2362 if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
2363 adapter->watchdog_events++;
2364 em_init_locked(adapter);
2365}
2366
2367
2368static void
2369em_update_link_status(struct adapter *adapter)
2370{
2371 struct e1000_hw *hw = &adapter->hw;
2372 if_t ifp = adapter->ifp;
2373 device_t dev = adapter->dev;
2374 struct tx_ring *txr = adapter->tx_rings;
2375 u32 link_check = 0;
2376
2377 /* Get the cached link value or read phy for real */
2378 switch (hw->phy.media_type) {
2379 case e1000_media_type_copper:
2380 if (hw->mac.get_link_status) {
2381 if (hw->mac.type == e1000_pch_spt)
2382 msec_delay(50);
2362 /* Do the work to read phy */
2363 e1000_check_for_link(hw);
2364 link_check = !hw->mac.get_link_status;
2365 if (link_check) /* ESB2 fix */
2366 e1000_cfg_on_link_up(hw);
2367 } else
2368 link_check = TRUE;
2369 break;
2370 case e1000_media_type_fiber:
2371 e1000_check_for_link(hw);
2372 link_check = (E1000_READ_REG(hw, E1000_STATUS) &
2373 E1000_STATUS_LU);
2374 break;
2375 case e1000_media_type_internal_serdes:
2376 e1000_check_for_link(hw);
2377 link_check = adapter->hw.mac.serdes_has_link;
2378 break;
2379 default:
2380 case e1000_media_type_unknown:
2381 break;
2382 }
2383
2384 /* Now check for a transition */
2385 if (link_check && (adapter->link_active == 0)) {
2386 e1000_get_speed_and_duplex(hw, &adapter->link_speed,
2387 &adapter->link_duplex);
2388 /* Check if we must disable SPEED_MODE bit on PCI-E */
2389 if ((adapter->link_speed != SPEED_1000) &&
2390 ((hw->mac.type == e1000_82571) ||
2391 (hw->mac.type == e1000_82572))) {
2392 int tarc0;
2393 tarc0 = E1000_READ_REG(hw, E1000_TARC(0));
2394 tarc0 &= ~TARC_SPEED_MODE_BIT;
2395 E1000_WRITE_REG(hw, E1000_TARC(0), tarc0);
2396 }
2397 if (bootverbose)
2398 device_printf(dev, "Link is up %d Mbps %s\n",
2399 adapter->link_speed,
2400 ((adapter->link_duplex == FULL_DUPLEX) ?
2401 "Full Duplex" : "Half Duplex"));
2402 adapter->link_active = 1;
2403 adapter->smartspeed = 0;
2404 if_setbaudrate(ifp, adapter->link_speed * 1000000);
2405 if_link_state_change(ifp, LINK_STATE_UP);
2406 } else if (!link_check && (adapter->link_active == 1)) {
2407 if_setbaudrate(ifp, 0);
2408 adapter->link_speed = 0;
2409 adapter->link_duplex = 0;
2410 if (bootverbose)
2411 device_printf(dev, "Link is Down\n");
2412 adapter->link_active = 0;
2413 /* Link down, disable hang detection */
2414 for (int i = 0; i < adapter->num_queues; i++, txr++)
2415 txr->busy = EM_TX_IDLE;
2416 if_link_state_change(ifp, LINK_STATE_DOWN);
2417 }
2418}
2419
2420/*********************************************************************
2421 *
2422 * This routine disables all traffic on the adapter by issuing a
2423 * global reset on the MAC and deallocates TX/RX buffers.
2424 *
2425 * This routine should always be called with BOTH the CORE
2426 * and TX locks.
2427 **********************************************************************/
2428
2429static void
2430em_stop(void *arg)
2431{
2432 struct adapter *adapter = arg;
2433 if_t ifp = adapter->ifp;
2434 struct tx_ring *txr = adapter->tx_rings;
2435
2436 EM_CORE_LOCK_ASSERT(adapter);
2437
2438 INIT_DEBUGOUT("em_stop: begin");
2439
2440 em_disable_intr(adapter);
2441 callout_stop(&adapter->timer);
2442
2443 /* Tell the stack that the interface is no longer active */
2444 if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, IFF_DRV_RUNNING);
2445
2446 /* Disarm Hang Detection. */
2447 for (int i = 0; i < adapter->num_queues; i++, txr++) {
2448 EM_TX_LOCK(txr);
2449 txr->busy = EM_TX_IDLE;
2450 EM_TX_UNLOCK(txr);
2451 }
2452
2383 /* Do the work to read phy */
2384 e1000_check_for_link(hw);
2385 link_check = !hw->mac.get_link_status;
2386 if (link_check) /* ESB2 fix */
2387 e1000_cfg_on_link_up(hw);
2388 } else
2389 link_check = TRUE;
2390 break;
2391 case e1000_media_type_fiber:
2392 e1000_check_for_link(hw);
2393 link_check = (E1000_READ_REG(hw, E1000_STATUS) &
2394 E1000_STATUS_LU);
2395 break;
2396 case e1000_media_type_internal_serdes:
2397 e1000_check_for_link(hw);
2398 link_check = adapter->hw.mac.serdes_has_link;
2399 break;
2400 default:
2401 case e1000_media_type_unknown:
2402 break;
2403 }
2404
2405 /* Now check for a transition */
2406 if (link_check && (adapter->link_active == 0)) {
2407 e1000_get_speed_and_duplex(hw, &adapter->link_speed,
2408 &adapter->link_duplex);
2409 /* Check if we must disable SPEED_MODE bit on PCI-E */
2410 if ((adapter->link_speed != SPEED_1000) &&
2411 ((hw->mac.type == e1000_82571) ||
2412 (hw->mac.type == e1000_82572))) {
2413 int tarc0;
2414 tarc0 = E1000_READ_REG(hw, E1000_TARC(0));
2415 tarc0 &= ~TARC_SPEED_MODE_BIT;
2416 E1000_WRITE_REG(hw, E1000_TARC(0), tarc0);
2417 }
2418 if (bootverbose)
2419 device_printf(dev, "Link is up %d Mbps %s\n",
2420 adapter->link_speed,
2421 ((adapter->link_duplex == FULL_DUPLEX) ?
2422 "Full Duplex" : "Half Duplex"));
2423 adapter->link_active = 1;
2424 adapter->smartspeed = 0;
2425 if_setbaudrate(ifp, adapter->link_speed * 1000000);
2426 if_link_state_change(ifp, LINK_STATE_UP);
2427 } else if (!link_check && (adapter->link_active == 1)) {
2428 if_setbaudrate(ifp, 0);
2429 adapter->link_speed = 0;
2430 adapter->link_duplex = 0;
2431 if (bootverbose)
2432 device_printf(dev, "Link is Down\n");
2433 adapter->link_active = 0;
2434 /* Link down, disable hang detection */
2435 for (int i = 0; i < adapter->num_queues; i++, txr++)
2436 txr->busy = EM_TX_IDLE;
2437 if_link_state_change(ifp, LINK_STATE_DOWN);
2438 }
2439}
2440
2441/*********************************************************************
2442 *
2443 * This routine disables all traffic on the adapter by issuing a
2444 * global reset on the MAC and deallocates TX/RX buffers.
2445 *
2446 * This routine should always be called with BOTH the CORE
2447 * and TX locks.
2448 **********************************************************************/
2449
2450static void
2451em_stop(void *arg)
2452{
2453 struct adapter *adapter = arg;
2454 if_t ifp = adapter->ifp;
2455 struct tx_ring *txr = adapter->tx_rings;
2456
2457 EM_CORE_LOCK_ASSERT(adapter);
2458
2459 INIT_DEBUGOUT("em_stop: begin");
2460
2461 em_disable_intr(adapter);
2462 callout_stop(&adapter->timer);
2463
2464 /* Tell the stack that the interface is no longer active */
2465 if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, IFF_DRV_RUNNING);
2466
2467 /* Disarm Hang Detection. */
2468 for (int i = 0; i < adapter->num_queues; i++, txr++) {
2469 EM_TX_LOCK(txr);
2470 txr->busy = EM_TX_IDLE;
2471 EM_TX_UNLOCK(txr);
2472 }
2473
2474 /* I219 needs some special flushing to avoid hangs */
2475 if (adapter->hw.mac.type == e1000_pch_spt)
2476 em_flush_desc_rings(adapter);
2477
2453 e1000_reset_hw(&adapter->hw);
2454 E1000_WRITE_REG(&adapter->hw, E1000_WUC, 0);
2455
2456 e1000_led_off(&adapter->hw);
2457 e1000_cleanup_led(&adapter->hw);
2458}
2459
2460
2461/*********************************************************************
2462 *
2463 * Determine hardware revision.
2464 *
2465 **********************************************************************/
2466static void
2467em_identify_hardware(struct adapter *adapter)
2468{
2469 device_t dev = adapter->dev;
2470
2471 /* Make sure our PCI config space has the necessary stuff set */
2472 pci_enable_busmaster(dev);
2473 adapter->hw.bus.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2);
2474
2475 /* Save off the information about this board */
2476 adapter->hw.vendor_id = pci_get_vendor(dev);
2477 adapter->hw.device_id = pci_get_device(dev);
2478 adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1);
2479 adapter->hw.subsystem_vendor_id =
2480 pci_read_config(dev, PCIR_SUBVEND_0, 2);
2481 adapter->hw.subsystem_device_id =
2482 pci_read_config(dev, PCIR_SUBDEV_0, 2);
2483
2484 /* Do Shared Code Init and Setup */
2485 if (e1000_set_mac_type(&adapter->hw)) {
2486 device_printf(dev, "Setup init failure\n");
2487 return;
2488 }
2489}
2490
2491static int
2492em_allocate_pci_resources(struct adapter *adapter)
2493{
2494 device_t dev = adapter->dev;
2495 int rid;
2496
2497 rid = PCIR_BAR(0);
2498 adapter->memory = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
2499 &rid, RF_ACTIVE);
2500 if (adapter->memory == NULL) {
2501 device_printf(dev, "Unable to allocate bus resource: memory\n");
2502 return (ENXIO);
2503 }
2504 adapter->osdep.mem_bus_space_tag =
2505 rman_get_bustag(adapter->memory);
2506 adapter->osdep.mem_bus_space_handle =
2507 rman_get_bushandle(adapter->memory);
2508 adapter->hw.hw_addr = (u8 *)&adapter->osdep.mem_bus_space_handle;
2509
2510 adapter->hw.back = &adapter->osdep;
2511
2512 return (0);
2513}
2514
2515/*********************************************************************
2516 *
2517 * Setup the Legacy or MSI Interrupt handler
2518 *
2519 **********************************************************************/
2520int
2521em_allocate_legacy(struct adapter *adapter)
2522{
2523 device_t dev = adapter->dev;
2524 struct tx_ring *txr = adapter->tx_rings;
2525 int error, rid = 0;
2526
2527 /* Manually turn off all interrupts */
2528 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
2529
2530 if (adapter->msix == 1) /* using MSI */
2531 rid = 1;
2532 /* We allocate a single interrupt resource */
2533 adapter->res = bus_alloc_resource_any(dev,
2534 SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE);
2535 if (adapter->res == NULL) {
2536 device_printf(dev, "Unable to allocate bus resource: "
2537 "interrupt\n");
2538 return (ENXIO);
2539 }
2540
2541 /*
2542 * Allocate a fast interrupt and the associated
2543 * deferred processing contexts.
2544 */
2545 TASK_INIT(&adapter->que_task, 0, em_handle_que, adapter);
2546 adapter->tq = taskqueue_create_fast("em_taskq", M_NOWAIT,
2547 taskqueue_thread_enqueue, &adapter->tq);
2548 taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s que",
2549 device_get_nameunit(adapter->dev));
2550 /* Use a TX only tasklet for local timer */
2551 TASK_INIT(&txr->tx_task, 0, em_handle_tx, txr);
2552 txr->tq = taskqueue_create_fast("em_txq", M_NOWAIT,
2553 taskqueue_thread_enqueue, &txr->tq);
2554 taskqueue_start_threads(&txr->tq, 1, PI_NET, "%s txq",
2555 device_get_nameunit(adapter->dev));
2556 TASK_INIT(&adapter->link_task, 0, em_handle_link, adapter);
2557 if ((error = bus_setup_intr(dev, adapter->res, INTR_TYPE_NET,
2558 em_irq_fast, NULL, adapter, &adapter->tag)) != 0) {
2559 device_printf(dev, "Failed to register fast interrupt "
2560 "handler: %d\n", error);
2561 taskqueue_free(adapter->tq);
2562 adapter->tq = NULL;
2563 return (error);
2564 }
2565
2566 return (0);
2567}
2568
2569/*********************************************************************
2570 *
2571 * Setup the MSIX Interrupt handlers
2572 * This is not really Multiqueue, rather
2573 * its just seperate interrupt vectors
2574 * for TX, RX, and Link.
2575 *
2576 **********************************************************************/
2577int
2578em_allocate_msix(struct adapter *adapter)
2579{
2580 device_t dev = adapter->dev;
2581 struct tx_ring *txr = adapter->tx_rings;
2582 struct rx_ring *rxr = adapter->rx_rings;
2583 int error, rid, vector = 0;
2584 int cpu_id = 0;
2585
2586
2587 /* Make sure all interrupts are disabled */
2588 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
2589
2590 /* First set up ring resources */
2591 for (int i = 0; i < adapter->num_queues; i++, rxr++, vector++) {
2592
2593 /* RX ring */
2594 rid = vector + 1;
2595
2596 rxr->res = bus_alloc_resource_any(dev,
2597 SYS_RES_IRQ, &rid, RF_ACTIVE);
2598 if (rxr->res == NULL) {
2599 device_printf(dev,
2600 "Unable to allocate bus resource: "
2601 "RX MSIX Interrupt %d\n", i);
2602 return (ENXIO);
2603 }
2604 if ((error = bus_setup_intr(dev, rxr->res,
2605 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_rx,
2606 rxr, &rxr->tag)) != 0) {
2607 device_printf(dev, "Failed to register RX handler");
2608 return (error);
2609 }
2610#if __FreeBSD_version >= 800504
2611 bus_describe_intr(dev, rxr->res, rxr->tag, "rx%d", i);
2612#endif
2613 rxr->msix = vector;
2614
2615 if (em_last_bind_cpu < 0)
2616 em_last_bind_cpu = CPU_FIRST();
2617 cpu_id = em_last_bind_cpu;
2618 bus_bind_intr(dev, rxr->res, cpu_id);
2619
2620 TASK_INIT(&rxr->rx_task, 0, em_handle_rx, rxr);
2621 rxr->tq = taskqueue_create_fast("em_rxq", M_NOWAIT,
2622 taskqueue_thread_enqueue, &rxr->tq);
2623 taskqueue_start_threads(&rxr->tq, 1, PI_NET, "%s rxq (cpuid %d)",
2624 device_get_nameunit(adapter->dev), cpu_id);
2625 /*
2626 ** Set the bit to enable interrupt
2627 ** in E1000_IMS -- bits 20 and 21
2628 ** are for RX0 and RX1, note this has
2629 ** NOTHING to do with the MSIX vector
2630 */
2631 rxr->ims = 1 << (20 + i);
2632 adapter->ims |= rxr->ims;
2633 adapter->ivars |= (8 | rxr->msix) << (i * 4);
2634
2635 em_last_bind_cpu = CPU_NEXT(em_last_bind_cpu);
2636 }
2637
2638 for (int i = 0; i < adapter->num_queues; i++, txr++, vector++) {
2639 /* TX ring */
2640 rid = vector + 1;
2641 txr->res = bus_alloc_resource_any(dev,
2642 SYS_RES_IRQ, &rid, RF_ACTIVE);
2643 if (txr->res == NULL) {
2644 device_printf(dev,
2645 "Unable to allocate bus resource: "
2646 "TX MSIX Interrupt %d\n", i);
2647 return (ENXIO);
2648 }
2649 if ((error = bus_setup_intr(dev, txr->res,
2650 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_tx,
2651 txr, &txr->tag)) != 0) {
2652 device_printf(dev, "Failed to register TX handler");
2653 return (error);
2654 }
2655#if __FreeBSD_version >= 800504
2656 bus_describe_intr(dev, txr->res, txr->tag, "tx%d", i);
2657#endif
2658 txr->msix = vector;
2659
2660 if (em_last_bind_cpu < 0)
2661 em_last_bind_cpu = CPU_FIRST();
2662 cpu_id = em_last_bind_cpu;
2663 bus_bind_intr(dev, txr->res, cpu_id);
2664
2665 TASK_INIT(&txr->tx_task, 0, em_handle_tx, txr);
2666 txr->tq = taskqueue_create_fast("em_txq", M_NOWAIT,
2667 taskqueue_thread_enqueue, &txr->tq);
2668 taskqueue_start_threads(&txr->tq, 1, PI_NET, "%s txq (cpuid %d)",
2669 device_get_nameunit(adapter->dev), cpu_id);
2670 /*
2671 ** Set the bit to enable interrupt
2672 ** in E1000_IMS -- bits 22 and 23
2673 ** are for TX0 and TX1, note this has
2674 ** NOTHING to do with the MSIX vector
2675 */
2676 txr->ims = 1 << (22 + i);
2677 adapter->ims |= txr->ims;
2678 adapter->ivars |= (8 | txr->msix) << (8 + (i * 4));
2679
2680 em_last_bind_cpu = CPU_NEXT(em_last_bind_cpu);
2681 }
2682
2683 /* Link interrupt */
2684 rid = vector + 1;
2685 adapter->res = bus_alloc_resource_any(dev,
2686 SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE);
2687 if (!adapter->res) {
2688 device_printf(dev,"Unable to allocate "
2689 "bus resource: Link interrupt [%d]\n", rid);
2690 return (ENXIO);
2691 }
2692 /* Set the link handler function */
2693 error = bus_setup_intr(dev, adapter->res,
2694 INTR_TYPE_NET | INTR_MPSAFE, NULL,
2695 em_msix_link, adapter, &adapter->tag);
2696 if (error) {
2697 adapter->res = NULL;
2698 device_printf(dev, "Failed to register LINK handler");
2699 return (error);
2700 }
2701#if __FreeBSD_version >= 800504
2702 bus_describe_intr(dev, adapter->res, adapter->tag, "link");
2703#endif
2704 adapter->linkvec = vector;
2705 adapter->ivars |= (8 | vector) << 16;
2706 adapter->ivars |= 0x80000000;
2707
2708 return (0);
2709}
2710
2711
2712static void
2713em_free_pci_resources(struct adapter *adapter)
2714{
2715 device_t dev = adapter->dev;
2716 struct tx_ring *txr;
2717 struct rx_ring *rxr;
2718 int rid;
2719
2720
2721 /*
2722 ** Release all the queue interrupt resources:
2723 */
2724 for (int i = 0; i < adapter->num_queues; i++) {
2725 txr = &adapter->tx_rings[i];
2726 /* an early abort? */
2727 if (txr == NULL)
2728 break;
2729 rid = txr->msix +1;
2730 if (txr->tag != NULL) {
2731 bus_teardown_intr(dev, txr->res, txr->tag);
2732 txr->tag = NULL;
2733 }
2734 if (txr->res != NULL)
2735 bus_release_resource(dev, SYS_RES_IRQ,
2736 rid, txr->res);
2737
2738 rxr = &adapter->rx_rings[i];
2739 /* an early abort? */
2740 if (rxr == NULL)
2741 break;
2742 rid = rxr->msix +1;
2743 if (rxr->tag != NULL) {
2744 bus_teardown_intr(dev, rxr->res, rxr->tag);
2745 rxr->tag = NULL;
2746 }
2747 if (rxr->res != NULL)
2748 bus_release_resource(dev, SYS_RES_IRQ,
2749 rid, rxr->res);
2750 }
2751
2752 if (adapter->linkvec) /* we are doing MSIX */
2753 rid = adapter->linkvec + 1;
2754 else
2755 (adapter->msix != 0) ? (rid = 1):(rid = 0);
2756
2757 if (adapter->tag != NULL) {
2758 bus_teardown_intr(dev, adapter->res, adapter->tag);
2759 adapter->tag = NULL;
2760 }
2761
2762 if (adapter->res != NULL)
2763 bus_release_resource(dev, SYS_RES_IRQ, rid, adapter->res);
2764
2765
2766 if (adapter->msix)
2767 pci_release_msi(dev);
2768
2769 if (adapter->msix_mem != NULL)
2770 bus_release_resource(dev, SYS_RES_MEMORY,
2771 PCIR_BAR(EM_MSIX_BAR), adapter->msix_mem);
2772
2773 if (adapter->memory != NULL)
2774 bus_release_resource(dev, SYS_RES_MEMORY,
2775 PCIR_BAR(0), adapter->memory);
2776
2777 if (adapter->flash != NULL)
2778 bus_release_resource(dev, SYS_RES_MEMORY,
2779 EM_FLASH, adapter->flash);
2780}
2781
2782/*
2783 * Setup MSI or MSI/X
2784 */
2785static int
2786em_setup_msix(struct adapter *adapter)
2787{
2788 device_t dev = adapter->dev;
2789 int val;
2790
2791 /* Nearly always going to use one queue */
2792 adapter->num_queues = 1;
2793
2794 /*
2795 ** Try using MSI-X for Hartwell adapters
2796 */
2797 if ((adapter->hw.mac.type == e1000_82574) &&
2798 (em_enable_msix == TRUE)) {
2799#ifdef EM_MULTIQUEUE
2800 adapter->num_queues = (em_num_queues == 1) ? 1 : 2;
2801 if (adapter->num_queues > 1)
2802 em_enable_vectors_82574(adapter);
2803#endif
2804 /* Map the MSIX BAR */
2805 int rid = PCIR_BAR(EM_MSIX_BAR);
2806 adapter->msix_mem = bus_alloc_resource_any(dev,
2807 SYS_RES_MEMORY, &rid, RF_ACTIVE);
2808 if (adapter->msix_mem == NULL) {
2809 /* May not be enabled */
2810 device_printf(adapter->dev,
2811 "Unable to map MSIX table \n");
2812 goto msi;
2813 }
2814 val = pci_msix_count(dev);
2815
2816#ifdef EM_MULTIQUEUE
2817 /* We need 5 vectors in the multiqueue case */
2818 if (adapter->num_queues > 1 ) {
2819 if (val >= 5)
2820 val = 5;
2821 else {
2822 adapter->num_queues = 1;
2823 device_printf(adapter->dev,
2824 "Insufficient MSIX vectors for >1 queue, "
2825 "using single queue...\n");
2826 goto msix_one;
2827 }
2828 } else {
2829msix_one:
2830#endif
2831 if (val >= 3)
2832 val = 3;
2833 else {
2834 device_printf(adapter->dev,
2835 "Insufficient MSIX vectors, using MSI\n");
2836 goto msi;
2837 }
2838#ifdef EM_MULTIQUEUE
2839 }
2840#endif
2841
2842 if ((pci_alloc_msix(dev, &val) == 0)) {
2843 device_printf(adapter->dev,
2844 "Using MSIX interrupts "
2845 "with %d vectors\n", val);
2846 return (val);
2847 }
2848
2849 /*
2850 ** If MSIX alloc failed or provided us with
2851 ** less than needed, free and fall through to MSI
2852 */
2853 pci_release_msi(dev);
2854 }
2855msi:
2856 if (adapter->msix_mem != NULL) {
2857 bus_release_resource(dev, SYS_RES_MEMORY,
2858 PCIR_BAR(EM_MSIX_BAR), adapter->msix_mem);
2859 adapter->msix_mem = NULL;
2860 }
2861 val = 1;
2862 if (pci_alloc_msi(dev, &val) == 0) {
2863 device_printf(adapter->dev, "Using an MSI interrupt\n");
2864 return (val);
2865 }
2866 /* Should only happen due to manual configuration */
2867 device_printf(adapter->dev,"No MSI/MSIX using a Legacy IRQ\n");
2868 return (0);
2869}
2870
2871
2478 e1000_reset_hw(&adapter->hw);
2479 E1000_WRITE_REG(&adapter->hw, E1000_WUC, 0);
2480
2481 e1000_led_off(&adapter->hw);
2482 e1000_cleanup_led(&adapter->hw);
2483}
2484
2485
2486/*********************************************************************
2487 *
2488 * Determine hardware revision.
2489 *
2490 **********************************************************************/
2491static void
2492em_identify_hardware(struct adapter *adapter)
2493{
2494 device_t dev = adapter->dev;
2495
2496 /* Make sure our PCI config space has the necessary stuff set */
2497 pci_enable_busmaster(dev);
2498 adapter->hw.bus.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2);
2499
2500 /* Save off the information about this board */
2501 adapter->hw.vendor_id = pci_get_vendor(dev);
2502 adapter->hw.device_id = pci_get_device(dev);
2503 adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1);
2504 adapter->hw.subsystem_vendor_id =
2505 pci_read_config(dev, PCIR_SUBVEND_0, 2);
2506 adapter->hw.subsystem_device_id =
2507 pci_read_config(dev, PCIR_SUBDEV_0, 2);
2508
2509 /* Do Shared Code Init and Setup */
2510 if (e1000_set_mac_type(&adapter->hw)) {
2511 device_printf(dev, "Setup init failure\n");
2512 return;
2513 }
2514}
2515
2516static int
2517em_allocate_pci_resources(struct adapter *adapter)
2518{
2519 device_t dev = adapter->dev;
2520 int rid;
2521
2522 rid = PCIR_BAR(0);
2523 adapter->memory = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
2524 &rid, RF_ACTIVE);
2525 if (adapter->memory == NULL) {
2526 device_printf(dev, "Unable to allocate bus resource: memory\n");
2527 return (ENXIO);
2528 }
2529 adapter->osdep.mem_bus_space_tag =
2530 rman_get_bustag(adapter->memory);
2531 adapter->osdep.mem_bus_space_handle =
2532 rman_get_bushandle(adapter->memory);
2533 adapter->hw.hw_addr = (u8 *)&adapter->osdep.mem_bus_space_handle;
2534
2535 adapter->hw.back = &adapter->osdep;
2536
2537 return (0);
2538}
2539
2540/*********************************************************************
2541 *
2542 * Setup the Legacy or MSI Interrupt handler
2543 *
2544 **********************************************************************/
2545int
2546em_allocate_legacy(struct adapter *adapter)
2547{
2548 device_t dev = adapter->dev;
2549 struct tx_ring *txr = adapter->tx_rings;
2550 int error, rid = 0;
2551
2552 /* Manually turn off all interrupts */
2553 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
2554
2555 if (adapter->msix == 1) /* using MSI */
2556 rid = 1;
2557 /* We allocate a single interrupt resource */
2558 adapter->res = bus_alloc_resource_any(dev,
2559 SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE);
2560 if (adapter->res == NULL) {
2561 device_printf(dev, "Unable to allocate bus resource: "
2562 "interrupt\n");
2563 return (ENXIO);
2564 }
2565
2566 /*
2567 * Allocate a fast interrupt and the associated
2568 * deferred processing contexts.
2569 */
2570 TASK_INIT(&adapter->que_task, 0, em_handle_que, adapter);
2571 adapter->tq = taskqueue_create_fast("em_taskq", M_NOWAIT,
2572 taskqueue_thread_enqueue, &adapter->tq);
2573 taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s que",
2574 device_get_nameunit(adapter->dev));
2575 /* Use a TX only tasklet for local timer */
2576 TASK_INIT(&txr->tx_task, 0, em_handle_tx, txr);
2577 txr->tq = taskqueue_create_fast("em_txq", M_NOWAIT,
2578 taskqueue_thread_enqueue, &txr->tq);
2579 taskqueue_start_threads(&txr->tq, 1, PI_NET, "%s txq",
2580 device_get_nameunit(adapter->dev));
2581 TASK_INIT(&adapter->link_task, 0, em_handle_link, adapter);
2582 if ((error = bus_setup_intr(dev, adapter->res, INTR_TYPE_NET,
2583 em_irq_fast, NULL, adapter, &adapter->tag)) != 0) {
2584 device_printf(dev, "Failed to register fast interrupt "
2585 "handler: %d\n", error);
2586 taskqueue_free(adapter->tq);
2587 adapter->tq = NULL;
2588 return (error);
2589 }
2590
2591 return (0);
2592}
2593
2594/*********************************************************************
2595 *
2596 * Setup the MSIX Interrupt handlers
2597 * This is not really Multiqueue, rather
2598 * its just seperate interrupt vectors
2599 * for TX, RX, and Link.
2600 *
2601 **********************************************************************/
2602int
2603em_allocate_msix(struct adapter *adapter)
2604{
2605 device_t dev = adapter->dev;
2606 struct tx_ring *txr = adapter->tx_rings;
2607 struct rx_ring *rxr = adapter->rx_rings;
2608 int error, rid, vector = 0;
2609 int cpu_id = 0;
2610
2611
2612 /* Make sure all interrupts are disabled */
2613 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
2614
2615 /* First set up ring resources */
2616 for (int i = 0; i < adapter->num_queues; i++, rxr++, vector++) {
2617
2618 /* RX ring */
2619 rid = vector + 1;
2620
2621 rxr->res = bus_alloc_resource_any(dev,
2622 SYS_RES_IRQ, &rid, RF_ACTIVE);
2623 if (rxr->res == NULL) {
2624 device_printf(dev,
2625 "Unable to allocate bus resource: "
2626 "RX MSIX Interrupt %d\n", i);
2627 return (ENXIO);
2628 }
2629 if ((error = bus_setup_intr(dev, rxr->res,
2630 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_rx,
2631 rxr, &rxr->tag)) != 0) {
2632 device_printf(dev, "Failed to register RX handler");
2633 return (error);
2634 }
2635#if __FreeBSD_version >= 800504
2636 bus_describe_intr(dev, rxr->res, rxr->tag, "rx%d", i);
2637#endif
2638 rxr->msix = vector;
2639
2640 if (em_last_bind_cpu < 0)
2641 em_last_bind_cpu = CPU_FIRST();
2642 cpu_id = em_last_bind_cpu;
2643 bus_bind_intr(dev, rxr->res, cpu_id);
2644
2645 TASK_INIT(&rxr->rx_task, 0, em_handle_rx, rxr);
2646 rxr->tq = taskqueue_create_fast("em_rxq", M_NOWAIT,
2647 taskqueue_thread_enqueue, &rxr->tq);
2648 taskqueue_start_threads(&rxr->tq, 1, PI_NET, "%s rxq (cpuid %d)",
2649 device_get_nameunit(adapter->dev), cpu_id);
2650 /*
2651 ** Set the bit to enable interrupt
2652 ** in E1000_IMS -- bits 20 and 21
2653 ** are for RX0 and RX1, note this has
2654 ** NOTHING to do with the MSIX vector
2655 */
2656 rxr->ims = 1 << (20 + i);
2657 adapter->ims |= rxr->ims;
2658 adapter->ivars |= (8 | rxr->msix) << (i * 4);
2659
2660 em_last_bind_cpu = CPU_NEXT(em_last_bind_cpu);
2661 }
2662
2663 for (int i = 0; i < adapter->num_queues; i++, txr++, vector++) {
2664 /* TX ring */
2665 rid = vector + 1;
2666 txr->res = bus_alloc_resource_any(dev,
2667 SYS_RES_IRQ, &rid, RF_ACTIVE);
2668 if (txr->res == NULL) {
2669 device_printf(dev,
2670 "Unable to allocate bus resource: "
2671 "TX MSIX Interrupt %d\n", i);
2672 return (ENXIO);
2673 }
2674 if ((error = bus_setup_intr(dev, txr->res,
2675 INTR_TYPE_NET | INTR_MPSAFE, NULL, em_msix_tx,
2676 txr, &txr->tag)) != 0) {
2677 device_printf(dev, "Failed to register TX handler");
2678 return (error);
2679 }
2680#if __FreeBSD_version >= 800504
2681 bus_describe_intr(dev, txr->res, txr->tag, "tx%d", i);
2682#endif
2683 txr->msix = vector;
2684
2685 if (em_last_bind_cpu < 0)
2686 em_last_bind_cpu = CPU_FIRST();
2687 cpu_id = em_last_bind_cpu;
2688 bus_bind_intr(dev, txr->res, cpu_id);
2689
2690 TASK_INIT(&txr->tx_task, 0, em_handle_tx, txr);
2691 txr->tq = taskqueue_create_fast("em_txq", M_NOWAIT,
2692 taskqueue_thread_enqueue, &txr->tq);
2693 taskqueue_start_threads(&txr->tq, 1, PI_NET, "%s txq (cpuid %d)",
2694 device_get_nameunit(adapter->dev), cpu_id);
2695 /*
2696 ** Set the bit to enable interrupt
2697 ** in E1000_IMS -- bits 22 and 23
2698 ** are for TX0 and TX1, note this has
2699 ** NOTHING to do with the MSIX vector
2700 */
2701 txr->ims = 1 << (22 + i);
2702 adapter->ims |= txr->ims;
2703 adapter->ivars |= (8 | txr->msix) << (8 + (i * 4));
2704
2705 em_last_bind_cpu = CPU_NEXT(em_last_bind_cpu);
2706 }
2707
2708 /* Link interrupt */
2709 rid = vector + 1;
2710 adapter->res = bus_alloc_resource_any(dev,
2711 SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE);
2712 if (!adapter->res) {
2713 device_printf(dev,"Unable to allocate "
2714 "bus resource: Link interrupt [%d]\n", rid);
2715 return (ENXIO);
2716 }
2717 /* Set the link handler function */
2718 error = bus_setup_intr(dev, adapter->res,
2719 INTR_TYPE_NET | INTR_MPSAFE, NULL,
2720 em_msix_link, adapter, &adapter->tag);
2721 if (error) {
2722 adapter->res = NULL;
2723 device_printf(dev, "Failed to register LINK handler");
2724 return (error);
2725 }
2726#if __FreeBSD_version >= 800504
2727 bus_describe_intr(dev, adapter->res, adapter->tag, "link");
2728#endif
2729 adapter->linkvec = vector;
2730 adapter->ivars |= (8 | vector) << 16;
2731 adapter->ivars |= 0x80000000;
2732
2733 return (0);
2734}
2735
2736
2737static void
2738em_free_pci_resources(struct adapter *adapter)
2739{
2740 device_t dev = adapter->dev;
2741 struct tx_ring *txr;
2742 struct rx_ring *rxr;
2743 int rid;
2744
2745
2746 /*
2747 ** Release all the queue interrupt resources:
2748 */
2749 for (int i = 0; i < adapter->num_queues; i++) {
2750 txr = &adapter->tx_rings[i];
2751 /* an early abort? */
2752 if (txr == NULL)
2753 break;
2754 rid = txr->msix +1;
2755 if (txr->tag != NULL) {
2756 bus_teardown_intr(dev, txr->res, txr->tag);
2757 txr->tag = NULL;
2758 }
2759 if (txr->res != NULL)
2760 bus_release_resource(dev, SYS_RES_IRQ,
2761 rid, txr->res);
2762
2763 rxr = &adapter->rx_rings[i];
2764 /* an early abort? */
2765 if (rxr == NULL)
2766 break;
2767 rid = rxr->msix +1;
2768 if (rxr->tag != NULL) {
2769 bus_teardown_intr(dev, rxr->res, rxr->tag);
2770 rxr->tag = NULL;
2771 }
2772 if (rxr->res != NULL)
2773 bus_release_resource(dev, SYS_RES_IRQ,
2774 rid, rxr->res);
2775 }
2776
2777 if (adapter->linkvec) /* we are doing MSIX */
2778 rid = adapter->linkvec + 1;
2779 else
2780 (adapter->msix != 0) ? (rid = 1):(rid = 0);
2781
2782 if (adapter->tag != NULL) {
2783 bus_teardown_intr(dev, adapter->res, adapter->tag);
2784 adapter->tag = NULL;
2785 }
2786
2787 if (adapter->res != NULL)
2788 bus_release_resource(dev, SYS_RES_IRQ, rid, adapter->res);
2789
2790
2791 if (adapter->msix)
2792 pci_release_msi(dev);
2793
2794 if (adapter->msix_mem != NULL)
2795 bus_release_resource(dev, SYS_RES_MEMORY,
2796 PCIR_BAR(EM_MSIX_BAR), adapter->msix_mem);
2797
2798 if (adapter->memory != NULL)
2799 bus_release_resource(dev, SYS_RES_MEMORY,
2800 PCIR_BAR(0), adapter->memory);
2801
2802 if (adapter->flash != NULL)
2803 bus_release_resource(dev, SYS_RES_MEMORY,
2804 EM_FLASH, adapter->flash);
2805}
2806
2807/*
2808 * Setup MSI or MSI/X
2809 */
2810static int
2811em_setup_msix(struct adapter *adapter)
2812{
2813 device_t dev = adapter->dev;
2814 int val;
2815
2816 /* Nearly always going to use one queue */
2817 adapter->num_queues = 1;
2818
2819 /*
2820 ** Try using MSI-X for Hartwell adapters
2821 */
2822 if ((adapter->hw.mac.type == e1000_82574) &&
2823 (em_enable_msix == TRUE)) {
2824#ifdef EM_MULTIQUEUE
2825 adapter->num_queues = (em_num_queues == 1) ? 1 : 2;
2826 if (adapter->num_queues > 1)
2827 em_enable_vectors_82574(adapter);
2828#endif
2829 /* Map the MSIX BAR */
2830 int rid = PCIR_BAR(EM_MSIX_BAR);
2831 adapter->msix_mem = bus_alloc_resource_any(dev,
2832 SYS_RES_MEMORY, &rid, RF_ACTIVE);
2833 if (adapter->msix_mem == NULL) {
2834 /* May not be enabled */
2835 device_printf(adapter->dev,
2836 "Unable to map MSIX table \n");
2837 goto msi;
2838 }
2839 val = pci_msix_count(dev);
2840
2841#ifdef EM_MULTIQUEUE
2842 /* We need 5 vectors in the multiqueue case */
2843 if (adapter->num_queues > 1 ) {
2844 if (val >= 5)
2845 val = 5;
2846 else {
2847 adapter->num_queues = 1;
2848 device_printf(adapter->dev,
2849 "Insufficient MSIX vectors for >1 queue, "
2850 "using single queue...\n");
2851 goto msix_one;
2852 }
2853 } else {
2854msix_one:
2855#endif
2856 if (val >= 3)
2857 val = 3;
2858 else {
2859 device_printf(adapter->dev,
2860 "Insufficient MSIX vectors, using MSI\n");
2861 goto msi;
2862 }
2863#ifdef EM_MULTIQUEUE
2864 }
2865#endif
2866
2867 if ((pci_alloc_msix(dev, &val) == 0)) {
2868 device_printf(adapter->dev,
2869 "Using MSIX interrupts "
2870 "with %d vectors\n", val);
2871 return (val);
2872 }
2873
2874 /*
2875 ** If MSIX alloc failed or provided us with
2876 ** less than needed, free and fall through to MSI
2877 */
2878 pci_release_msi(dev);
2879 }
2880msi:
2881 if (adapter->msix_mem != NULL) {
2882 bus_release_resource(dev, SYS_RES_MEMORY,
2883 PCIR_BAR(EM_MSIX_BAR), adapter->msix_mem);
2884 adapter->msix_mem = NULL;
2885 }
2886 val = 1;
2887 if (pci_alloc_msi(dev, &val) == 0) {
2888 device_printf(adapter->dev, "Using an MSI interrupt\n");
2889 return (val);
2890 }
2891 /* Should only happen due to manual configuration */
2892 device_printf(adapter->dev,"No MSI/MSIX using a Legacy IRQ\n");
2893 return (0);
2894}
2895
2896
2897/*
2898** The 3 following flush routines are used as a workaround in the
2899** I219 client parts and only for them.
2900**
2901** em_flush_tx_ring - remove all descriptors from the tx_ring
2902**
2903** We want to clear all pending descriptors from the TX ring.
2904** zeroing happens when the HW reads the regs. We assign the ring itself as
2905** the data of the next descriptor. We don't care about the data we are about
2906** to reset the HW.
2907*/
2908static void
2909em_flush_tx_ring(struct adapter *adapter)
2910{
2911 struct e1000_hw *hw = &adapter->hw;
2912 struct tx_ring *txr = adapter->tx_rings;
2913 struct e1000_tx_desc *txd;
2914 u32 tctl, txd_lower = E1000_TXD_CMD_IFCS;
2915 u16 size = 512;
2916
2917 tctl = E1000_READ_REG(hw, E1000_TCTL);
2918 E1000_WRITE_REG(hw, E1000_TCTL, tctl | E1000_TCTL_EN);
2919
2920 txd = &txr->tx_base[txr->next_avail_desc++];
2921 if (txr->next_avail_desc == adapter->num_tx_desc)
2922 txr->next_avail_desc = 0;
2923
2924 /* Just use the ring as a dummy buffer addr */
2925 txd->buffer_addr = txr->txdma.dma_paddr;
2926 txd->lower.data = htole32(txd_lower | size);
2927 txd->upper.data = 0;
2928
2929 /* flush descriptors to memory before notifying the HW */
2930 wmb();
2931
2932 E1000_WRITE_REG(hw, E1000_TDT(0), txr->next_avail_desc);
2933 mb();
2934 usec_delay(250);
2935}
2936
2937/*
2938** em_flush_rx_ring - remove all descriptors from the rx_ring
2939**
2940** Mark all descriptors in the RX ring as consumed and disable the rx ring
2941*/
2942static void
2943em_flush_rx_ring(struct adapter *adapter)
2944{
2945 struct e1000_hw *hw = &adapter->hw;
2946 u32 rctl, rxdctl;
2947
2948 rctl = E1000_READ_REG(hw, E1000_RCTL);
2949 E1000_WRITE_REG(hw, E1000_RCTL, rctl & ~E1000_RCTL_EN);
2950 E1000_WRITE_FLUSH(hw);
2951 usec_delay(150);
2952
2953 rxdctl = E1000_READ_REG(hw, E1000_RXDCTL(0));
2954 /* zero the lower 14 bits (prefetch and host thresholds) */
2955 rxdctl &= 0xffffc000;
2956 /*
2957 * update thresholds: prefetch threshold to 31, host threshold to 1
2958 * and make sure the granularity is "descriptors" and not "cache lines"
2959 */
2960 rxdctl |= (0x1F | (1 << 8) | E1000_RXDCTL_THRESH_UNIT_DESC);
2961 E1000_WRITE_REG(hw, E1000_RXDCTL(0), rxdctl);
2962
2963 /* momentarily enable the RX ring for the changes to take effect */
2964 E1000_WRITE_REG(hw, E1000_RCTL, rctl | E1000_RCTL_EN);
2965 E1000_WRITE_FLUSH(hw);
2966 usec_delay(150);
2967 E1000_WRITE_REG(hw, E1000_RCTL, rctl & ~E1000_RCTL_EN);
2968}
2969
2970/*
2971** em_flush_desc_rings - remove all descriptors from the descriptor rings
2972**
2973** In i219, the descriptor rings must be emptied before resetting the HW
2974** or before changing the device state to D3 during runtime (runtime PM).
2975**
2976** Failure to do this will cause the HW to enter a unit hang state which can
2977** only be released by PCI reset on the device
2978**
2979*/
2980static void
2981em_flush_desc_rings(struct adapter *adapter)
2982{
2983 struct e1000_hw *hw = &adapter->hw;
2984 device_t dev = adapter->dev;
2985 u16 hang_state;
2986 u32 fext_nvm11, tdlen;
2987
2988 /* First, disable MULR fix in FEXTNVM11 */
2989 fext_nvm11 = E1000_READ_REG(hw, E1000_FEXTNVM11);
2990 fext_nvm11 |= E1000_FEXTNVM11_DISABLE_MULR_FIX;
2991 E1000_WRITE_REG(hw, E1000_FEXTNVM11, fext_nvm11);
2992
2993 /* do nothing if we're not in faulty state, or if the queue is empty */
2994 tdlen = E1000_READ_REG(hw, E1000_TDLEN(0));
2995 hang_state = pci_read_config(dev, PCICFG_DESC_RING_STATUS, 2);
2996 if (!(hang_state & FLUSH_DESC_REQUIRED) || !tdlen)
2997 return;
2998 em_flush_tx_ring(adapter);
2999
3000 /* recheck, maybe the fault is caused by the rx ring */
3001 hang_state = pci_read_config(dev, PCICFG_DESC_RING_STATUS, 2);
3002 if (hang_state & FLUSH_DESC_REQUIRED)
3003 em_flush_rx_ring(adapter);
3004}
3005
3006
2872/*********************************************************************
2873 *
2874 * Initialize the hardware to a configuration
2875 * as specified by the adapter structure.
2876 *
2877 **********************************************************************/
2878static void
2879em_reset(struct adapter *adapter)
2880{
2881 device_t dev = adapter->dev;
2882 if_t ifp = adapter->ifp;
2883 struct e1000_hw *hw = &adapter->hw;
2884 u16 rx_buffer_size;
2885 u32 pba;
2886
2887 INIT_DEBUGOUT("em_reset: begin");
2888
2889 /* Set up smart power down as default off on newer adapters. */
2890 if (!em_smart_pwr_down && (hw->mac.type == e1000_82571 ||
2891 hw->mac.type == e1000_82572)) {
2892 u16 phy_tmp = 0;
2893
2894 /* Speed up time to link by disabling smart power down. */
2895 e1000_read_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, &phy_tmp);
2896 phy_tmp &= ~IGP02E1000_PM_SPD;
2897 e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, phy_tmp);
2898 }
2899
2900 /*
2901 * Packet Buffer Allocation (PBA)
2902 * Writing PBA sets the receive portion of the buffer
2903 * the remainder is used for the transmit buffer.
2904 */
2905 switch (hw->mac.type) {
2906 /* Total Packet Buffer on these is 48K */
2907 case e1000_82571:
2908 case e1000_82572:
2909 case e1000_80003es2lan:
2910 pba = E1000_PBA_32K; /* 32K for Rx, 16K for Tx */
2911 break;
2912 case e1000_82573: /* 82573: Total Packet Buffer is 32K */
2913 pba = E1000_PBA_12K; /* 12K for Rx, 20K for Tx */
2914 break;
2915 case e1000_82574:
2916 case e1000_82583:
2917 pba = E1000_PBA_20K; /* 20K for Rx, 20K for Tx */
2918 break;
2919 case e1000_ich8lan:
2920 pba = E1000_PBA_8K;
2921 break;
2922 case e1000_ich9lan:
2923 case e1000_ich10lan:
2924 /* Boost Receive side for jumbo frames */
2925 if (adapter->hw.mac.max_frame_size > 4096)
2926 pba = E1000_PBA_14K;
2927 else
2928 pba = E1000_PBA_10K;
2929 break;
2930 case e1000_pchlan:
2931 case e1000_pch2lan:
2932 case e1000_pch_lpt:
3007/*********************************************************************
3008 *
3009 * Initialize the hardware to a configuration
3010 * as specified by the adapter structure.
3011 *
3012 **********************************************************************/
3013static void
3014em_reset(struct adapter *adapter)
3015{
3016 device_t dev = adapter->dev;
3017 if_t ifp = adapter->ifp;
3018 struct e1000_hw *hw = &adapter->hw;
3019 u16 rx_buffer_size;
3020 u32 pba;
3021
3022 INIT_DEBUGOUT("em_reset: begin");
3023
3024 /* Set up smart power down as default off on newer adapters. */
3025 if (!em_smart_pwr_down && (hw->mac.type == e1000_82571 ||
3026 hw->mac.type == e1000_82572)) {
3027 u16 phy_tmp = 0;
3028
3029 /* Speed up time to link by disabling smart power down. */
3030 e1000_read_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, &phy_tmp);
3031 phy_tmp &= ~IGP02E1000_PM_SPD;
3032 e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, phy_tmp);
3033 }
3034
3035 /*
3036 * Packet Buffer Allocation (PBA)
3037 * Writing PBA sets the receive portion of the buffer
3038 * the remainder is used for the transmit buffer.
3039 */
3040 switch (hw->mac.type) {
3041 /* Total Packet Buffer on these is 48K */
3042 case e1000_82571:
3043 case e1000_82572:
3044 case e1000_80003es2lan:
3045 pba = E1000_PBA_32K; /* 32K for Rx, 16K for Tx */
3046 break;
3047 case e1000_82573: /* 82573: Total Packet Buffer is 32K */
3048 pba = E1000_PBA_12K; /* 12K for Rx, 20K for Tx */
3049 break;
3050 case e1000_82574:
3051 case e1000_82583:
3052 pba = E1000_PBA_20K; /* 20K for Rx, 20K for Tx */
3053 break;
3054 case e1000_ich8lan:
3055 pba = E1000_PBA_8K;
3056 break;
3057 case e1000_ich9lan:
3058 case e1000_ich10lan:
3059 /* Boost Receive side for jumbo frames */
3060 if (adapter->hw.mac.max_frame_size > 4096)
3061 pba = E1000_PBA_14K;
3062 else
3063 pba = E1000_PBA_10K;
3064 break;
3065 case e1000_pchlan:
3066 case e1000_pch2lan:
3067 case e1000_pch_lpt:
3068 case e1000_pch_spt:
2933 pba = E1000_PBA_26K;
2934 break;
2935 default:
2936 if (adapter->hw.mac.max_frame_size > 8192)
2937 pba = E1000_PBA_40K; /* 40K for Rx, 24K for Tx */
2938 else
2939 pba = E1000_PBA_48K; /* 48K for Rx, 16K for Tx */
2940 }
2941 E1000_WRITE_REG(&adapter->hw, E1000_PBA, pba);
2942
2943 /*
2944 * These parameters control the automatic generation (Tx) and
2945 * response (Rx) to Ethernet PAUSE frames.
2946 * - High water mark should allow for at least two frames to be
2947 * received after sending an XOFF.
2948 * - Low water mark works best when it is very near the high water mark.
2949 * This allows the receiver to restart by sending XON when it has
2950 * drained a bit. Here we use an arbitary value of 1500 which will
2951 * restart after one full frame is pulled from the buffer. There
2952 * could be several smaller frames in the buffer and if so they will
2953 * not trigger the XON until their total number reduces the buffer
2954 * by 1500.
2955 * - The pause time is fairly large at 1000 x 512ns = 512 usec.
2956 */
2957 rx_buffer_size = ((E1000_READ_REG(hw, E1000_PBA) & 0xffff) << 10 );
2958 hw->fc.high_water = rx_buffer_size -
2959 roundup2(adapter->hw.mac.max_frame_size, 1024);
2960 hw->fc.low_water = hw->fc.high_water - 1500;
2961
2962 if (adapter->fc) /* locally set flow control value? */
2963 hw->fc.requested_mode = adapter->fc;
2964 else
2965 hw->fc.requested_mode = e1000_fc_full;
2966
2967 if (hw->mac.type == e1000_80003es2lan)
2968 hw->fc.pause_time = 0xFFFF;
2969 else
2970 hw->fc.pause_time = EM_FC_PAUSE_TIME;
2971
2972 hw->fc.send_xon = TRUE;
2973
2974 /* Device specific overrides/settings */
2975 switch (hw->mac.type) {
2976 case e1000_pchlan:
2977 /* Workaround: no TX flow ctrl for PCH */
2978 hw->fc.requested_mode = e1000_fc_rx_pause;
2979 hw->fc.pause_time = 0xFFFF; /* override */
2980 if (if_getmtu(ifp) > ETHERMTU) {
2981 hw->fc.high_water = 0x3500;
2982 hw->fc.low_water = 0x1500;
2983 } else {
2984 hw->fc.high_water = 0x5000;
2985 hw->fc.low_water = 0x3000;
2986 }
2987 hw->fc.refresh_time = 0x1000;
2988 break;
2989 case e1000_pch2lan:
2990 case e1000_pch_lpt:
3069 pba = E1000_PBA_26K;
3070 break;
3071 default:
3072 if (adapter->hw.mac.max_frame_size > 8192)
3073 pba = E1000_PBA_40K; /* 40K for Rx, 24K for Tx */
3074 else
3075 pba = E1000_PBA_48K; /* 48K for Rx, 16K for Tx */
3076 }
3077 E1000_WRITE_REG(&adapter->hw, E1000_PBA, pba);
3078
3079 /*
3080 * These parameters control the automatic generation (Tx) and
3081 * response (Rx) to Ethernet PAUSE frames.
3082 * - High water mark should allow for at least two frames to be
3083 * received after sending an XOFF.
3084 * - Low water mark works best when it is very near the high water mark.
3085 * This allows the receiver to restart by sending XON when it has
3086 * drained a bit. Here we use an arbitary value of 1500 which will
3087 * restart after one full frame is pulled from the buffer. There
3088 * could be several smaller frames in the buffer and if so they will
3089 * not trigger the XON until their total number reduces the buffer
3090 * by 1500.
3091 * - The pause time is fairly large at 1000 x 512ns = 512 usec.
3092 */
3093 rx_buffer_size = ((E1000_READ_REG(hw, E1000_PBA) & 0xffff) << 10 );
3094 hw->fc.high_water = rx_buffer_size -
3095 roundup2(adapter->hw.mac.max_frame_size, 1024);
3096 hw->fc.low_water = hw->fc.high_water - 1500;
3097
3098 if (adapter->fc) /* locally set flow control value? */
3099 hw->fc.requested_mode = adapter->fc;
3100 else
3101 hw->fc.requested_mode = e1000_fc_full;
3102
3103 if (hw->mac.type == e1000_80003es2lan)
3104 hw->fc.pause_time = 0xFFFF;
3105 else
3106 hw->fc.pause_time = EM_FC_PAUSE_TIME;
3107
3108 hw->fc.send_xon = TRUE;
3109
3110 /* Device specific overrides/settings */
3111 switch (hw->mac.type) {
3112 case e1000_pchlan:
3113 /* Workaround: no TX flow ctrl for PCH */
3114 hw->fc.requested_mode = e1000_fc_rx_pause;
3115 hw->fc.pause_time = 0xFFFF; /* override */
3116 if (if_getmtu(ifp) > ETHERMTU) {
3117 hw->fc.high_water = 0x3500;
3118 hw->fc.low_water = 0x1500;
3119 } else {
3120 hw->fc.high_water = 0x5000;
3121 hw->fc.low_water = 0x3000;
3122 }
3123 hw->fc.refresh_time = 0x1000;
3124 break;
3125 case e1000_pch2lan:
3126 case e1000_pch_lpt:
3127 case e1000_pch_spt:
2991 hw->fc.high_water = 0x5C20;
2992 hw->fc.low_water = 0x5048;
2993 hw->fc.pause_time = 0x0650;
2994 hw->fc.refresh_time = 0x0400;
2995 /* Jumbos need adjusted PBA */
2996 if (if_getmtu(ifp) > ETHERMTU)
2997 E1000_WRITE_REG(hw, E1000_PBA, 12);
2998 else
2999 E1000_WRITE_REG(hw, E1000_PBA, 26);
3000 break;
3001 case e1000_ich9lan:
3002 case e1000_ich10lan:
3003 if (if_getmtu(ifp) > ETHERMTU) {
3004 hw->fc.high_water = 0x2800;
3005 hw->fc.low_water = hw->fc.high_water - 8;
3006 break;
3007 }
3008 /* else fall thru */
3009 default:
3010 if (hw->mac.type == e1000_80003es2lan)
3011 hw->fc.pause_time = 0xFFFF;
3012 break;
3013 }
3014
3128 hw->fc.high_water = 0x5C20;
3129 hw->fc.low_water = 0x5048;
3130 hw->fc.pause_time = 0x0650;
3131 hw->fc.refresh_time = 0x0400;
3132 /* Jumbos need adjusted PBA */
3133 if (if_getmtu(ifp) > ETHERMTU)
3134 E1000_WRITE_REG(hw, E1000_PBA, 12);
3135 else
3136 E1000_WRITE_REG(hw, E1000_PBA, 26);
3137 break;
3138 case e1000_ich9lan:
3139 case e1000_ich10lan:
3140 if (if_getmtu(ifp) > ETHERMTU) {
3141 hw->fc.high_water = 0x2800;
3142 hw->fc.low_water = hw->fc.high_water - 8;
3143 break;
3144 }
3145 /* else fall thru */
3146 default:
3147 if (hw->mac.type == e1000_80003es2lan)
3148 hw->fc.pause_time = 0xFFFF;
3149 break;
3150 }
3151
3152 /* I219 needs some special flushing to avoid hangs */
3153 if (hw->mac.type == e1000_pch_spt)
3154 em_flush_desc_rings(adapter);
3155
3015 /* Issue a global reset */
3016 e1000_reset_hw(hw);
3017 E1000_WRITE_REG(hw, E1000_WUC, 0);
3018 em_disable_aspm(adapter);
3019 /* and a re-init */
3020 if (e1000_init_hw(hw) < 0) {
3021 device_printf(dev, "Hardware Initialization Failed\n");
3022 return;
3023 }
3024
3025 E1000_WRITE_REG(hw, E1000_VET, ETHERTYPE_VLAN);
3026 e1000_get_phy_info(hw);
3027 e1000_check_for_link(hw);
3028 return;
3029}
3030
3031/*********************************************************************
3032 *
3033 * Setup networking device structure and register an interface.
3034 *
3035 **********************************************************************/
3036static int
3037em_setup_interface(device_t dev, struct adapter *adapter)
3038{
3039 if_t ifp;
3040
3041 INIT_DEBUGOUT("em_setup_interface: begin");
3042
3043 ifp = adapter->ifp = if_gethandle(IFT_ETHER);
3044 if (ifp == 0) {
3045 device_printf(dev, "can not allocate ifnet structure\n");
3046 return (-1);
3047 }
3048 if_initname(ifp, device_get_name(dev), device_get_unit(dev));
3049 if_setdev(ifp, dev);
3050 if_setinitfn(ifp, em_init);
3051 if_setsoftc(ifp, adapter);
3052 if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
3053 if_setioctlfn(ifp, em_ioctl);
3054 if_setgetcounterfn(ifp, em_get_counter);
3055 /* TSO parameters */
3056 ifp->if_hw_tsomax = IP_MAXPACKET;
3057 ifp->if_hw_tsomaxsegcount = EM_MAX_SCATTER;
3058 ifp->if_hw_tsomaxsegsize = EM_TSO_SEG_SIZE;
3059
3060#ifdef EM_MULTIQUEUE
3061 /* Multiqueue stack interface */
3062 if_settransmitfn(ifp, em_mq_start);
3063 if_setqflushfn(ifp, em_qflush);
3064#else
3065 if_setstartfn(ifp, em_start);
3066 if_setsendqlen(ifp, adapter->num_tx_desc - 1);
3067 if_setsendqready(ifp);
3068#endif
3069
3070 ether_ifattach(ifp, adapter->hw.mac.addr);
3071
3072 if_setcapabilities(ifp, 0);
3073 if_setcapenable(ifp, 0);
3074
3075
3076 if_setcapabilitiesbit(ifp, IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM |
3077 IFCAP_TSO4, 0);
3078 /*
3079 * Tell the upper layer(s) we
3080 * support full VLAN capability
3081 */
3082 if_setifheaderlen(ifp, sizeof(struct ether_vlan_header));
3083 if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_HWTSO |
3084 IFCAP_VLAN_MTU, 0);
3085 if_setcapenable(ifp, if_getcapabilities(ifp));
3086
3087 /*
3088 ** Don't turn this on by default, if vlans are
3089 ** created on another pseudo device (eg. lagg)
3090 ** then vlan events are not passed thru, breaking
3091 ** operation, but with HW FILTER off it works. If
3092 ** using vlans directly on the em driver you can
3093 ** enable this and get full hardware tag filtering.
3094 */
3095 if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWFILTER,0);
3096
3097#ifdef DEVICE_POLLING
3098 if_setcapabilitiesbit(ifp, IFCAP_POLLING,0);
3099#endif
3100
3101 /* Enable only WOL MAGIC by default */
3102 if (adapter->wol) {
3103 if_setcapabilitiesbit(ifp, IFCAP_WOL, 0);
3104 if_setcapenablebit(ifp, IFCAP_WOL_MAGIC, 0);
3105 }
3106
3107 /*
3108 * Specify the media types supported by this adapter and register
3109 * callbacks to update media and link information
3110 */
3111 ifmedia_init(&adapter->media, IFM_IMASK,
3112 em_media_change, em_media_status);
3113 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
3114 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) {
3115 u_char fiber_type = IFM_1000_SX; /* default type */
3116
3117 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type | IFM_FDX,
3118 0, NULL);
3119 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type, 0, NULL);
3120 } else {
3121 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL);
3122 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX,
3123 0, NULL);
3124 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX,
3125 0, NULL);
3126 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX,
3127 0, NULL);
3128 if (adapter->hw.phy.type != e1000_phy_ife) {
3129 ifmedia_add(&adapter->media,
3130 IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL);
3131 ifmedia_add(&adapter->media,
3132 IFM_ETHER | IFM_1000_T, 0, NULL);
3133 }
3134 }
3135 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
3136 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
3137 return (0);
3138}
3139
3140
3141/*
3142 * Manage DMA'able memory.
3143 */
3144static void
3145em_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
3146{
3147 if (error)
3148 return;
3149 *(bus_addr_t *) arg = segs[0].ds_addr;
3150}
3151
3152static int
3153em_dma_malloc(struct adapter *adapter, bus_size_t size,
3154 struct em_dma_alloc *dma, int mapflags)
3155{
3156 int error;
3157
3158 error = bus_dma_tag_create(bus_get_dma_tag(adapter->dev), /* parent */
3159 EM_DBA_ALIGN, 0, /* alignment, bounds */
3160 BUS_SPACE_MAXADDR, /* lowaddr */
3161 BUS_SPACE_MAXADDR, /* highaddr */
3162 NULL, NULL, /* filter, filterarg */
3163 size, /* maxsize */
3164 1, /* nsegments */
3165 size, /* maxsegsize */
3166 0, /* flags */
3167 NULL, /* lockfunc */
3168 NULL, /* lockarg */
3169 &dma->dma_tag);
3170 if (error) {
3171 device_printf(adapter->dev,
3172 "%s: bus_dma_tag_create failed: %d\n",
3173 __func__, error);
3174 goto fail_0;
3175 }
3176
3177 error = bus_dmamem_alloc(dma->dma_tag, (void**) &dma->dma_vaddr,
3178 BUS_DMA_NOWAIT | BUS_DMA_COHERENT, &dma->dma_map);
3179 if (error) {
3180 device_printf(adapter->dev,
3181 "%s: bus_dmamem_alloc(%ju) failed: %d\n",
3182 __func__, (uintmax_t)size, error);
3183 goto fail_2;
3184 }
3185
3186 dma->dma_paddr = 0;
3187 error = bus_dmamap_load(dma->dma_tag, dma->dma_map, dma->dma_vaddr,
3188 size, em_dmamap_cb, &dma->dma_paddr, mapflags | BUS_DMA_NOWAIT);
3189 if (error || dma->dma_paddr == 0) {
3190 device_printf(adapter->dev,
3191 "%s: bus_dmamap_load failed: %d\n",
3192 __func__, error);
3193 goto fail_3;
3194 }
3195
3196 return (0);
3197
3198fail_3:
3199 bus_dmamap_unload(dma->dma_tag, dma->dma_map);
3200fail_2:
3201 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
3202 bus_dma_tag_destroy(dma->dma_tag);
3203fail_0:
3204 dma->dma_tag = NULL;
3205
3206 return (error);
3207}
3208
3209static void
3210em_dma_free(struct adapter *adapter, struct em_dma_alloc *dma)
3211{
3212 if (dma->dma_tag == NULL)
3213 return;
3214 if (dma->dma_paddr != 0) {
3215 bus_dmamap_sync(dma->dma_tag, dma->dma_map,
3216 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
3217 bus_dmamap_unload(dma->dma_tag, dma->dma_map);
3218 dma->dma_paddr = 0;
3219 }
3220 if (dma->dma_vaddr != NULL) {
3221 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
3222 dma->dma_vaddr = NULL;
3223 }
3224 bus_dma_tag_destroy(dma->dma_tag);
3225 dma->dma_tag = NULL;
3226}
3227
3228
3229/*********************************************************************
3230 *
3231 * Allocate memory for the transmit and receive rings, and then
3232 * the descriptors associated with each, called only once at attach.
3233 *
3234 **********************************************************************/
3235static int
3236em_allocate_queues(struct adapter *adapter)
3237{
3238 device_t dev = adapter->dev;
3239 struct tx_ring *txr = NULL;
3240 struct rx_ring *rxr = NULL;
3241 int rsize, tsize, error = E1000_SUCCESS;
3242 int txconf = 0, rxconf = 0;
3243
3244
3245 /* Allocate the TX ring struct memory */
3246 if (!(adapter->tx_rings =
3247 (struct tx_ring *) malloc(sizeof(struct tx_ring) *
3248 adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) {
3249 device_printf(dev, "Unable to allocate TX ring memory\n");
3250 error = ENOMEM;
3251 goto fail;
3252 }
3253
3254 /* Now allocate the RX */
3255 if (!(adapter->rx_rings =
3256 (struct rx_ring *) malloc(sizeof(struct rx_ring) *
3257 adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) {
3258 device_printf(dev, "Unable to allocate RX ring memory\n");
3259 error = ENOMEM;
3260 goto rx_fail;
3261 }
3262
3263 tsize = roundup2(adapter->num_tx_desc *
3264 sizeof(struct e1000_tx_desc), EM_DBA_ALIGN);
3265 /*
3266 * Now set up the TX queues, txconf is needed to handle the
3267 * possibility that things fail midcourse and we need to
3268 * undo memory gracefully
3269 */
3270 for (int i = 0; i < adapter->num_queues; i++, txconf++) {
3271 /* Set up some basics */
3272 txr = &adapter->tx_rings[i];
3273 txr->adapter = adapter;
3274 txr->me = i;
3275
3276 /* Initialize the TX lock */
3277 snprintf(txr->mtx_name, sizeof(txr->mtx_name), "%s:tx(%d)",
3278 device_get_nameunit(dev), txr->me);
3279 mtx_init(&txr->tx_mtx, txr->mtx_name, NULL, MTX_DEF);
3280
3281 if (em_dma_malloc(adapter, tsize,
3282 &txr->txdma, BUS_DMA_NOWAIT)) {
3283 device_printf(dev,
3284 "Unable to allocate TX Descriptor memory\n");
3285 error = ENOMEM;
3286 goto err_tx_desc;
3287 }
3288 txr->tx_base = (struct e1000_tx_desc *)txr->txdma.dma_vaddr;
3289 bzero((void *)txr->tx_base, tsize);
3290
3291 if (em_allocate_transmit_buffers(txr)) {
3292 device_printf(dev,
3293 "Critical Failure setting up transmit buffers\n");
3294 error = ENOMEM;
3295 goto err_tx_desc;
3296 }
3297#if __FreeBSD_version >= 800000
3298 /* Allocate a buf ring */
3299 txr->br = buf_ring_alloc(4096, M_DEVBUF,
3300 M_WAITOK, &txr->tx_mtx);
3301#endif
3302 }
3303
3304 /*
3305 * Next the RX queues...
3306 */
3307 rsize = roundup2(adapter->num_rx_desc *
3308 sizeof(union e1000_rx_desc_extended), EM_DBA_ALIGN);
3309 for (int i = 0; i < adapter->num_queues; i++, rxconf++) {
3310 rxr = &adapter->rx_rings[i];
3311 rxr->adapter = adapter;
3312 rxr->me = i;
3313
3314 /* Initialize the RX lock */
3315 snprintf(rxr->mtx_name, sizeof(rxr->mtx_name), "%s:rx(%d)",
3316 device_get_nameunit(dev), txr->me);
3317 mtx_init(&rxr->rx_mtx, rxr->mtx_name, NULL, MTX_DEF);
3318
3319 if (em_dma_malloc(adapter, rsize,
3320 &rxr->rxdma, BUS_DMA_NOWAIT)) {
3321 device_printf(dev,
3322 "Unable to allocate RxDescriptor memory\n");
3323 error = ENOMEM;
3324 goto err_rx_desc;
3325 }
3326 rxr->rx_base = (union e1000_rx_desc_extended *)rxr->rxdma.dma_vaddr;
3327 bzero((void *)rxr->rx_base, rsize);
3328
3329 /* Allocate receive buffers for the ring*/
3330 if (em_allocate_receive_buffers(rxr)) {
3331 device_printf(dev,
3332 "Critical Failure setting up receive buffers\n");
3333 error = ENOMEM;
3334 goto err_rx_desc;
3335 }
3336 }
3337
3338 return (0);
3339
3340err_rx_desc:
3341 for (rxr = adapter->rx_rings; rxconf > 0; rxr++, rxconf--)
3342 em_dma_free(adapter, &rxr->rxdma);
3343err_tx_desc:
3344 for (txr = adapter->tx_rings; txconf > 0; txr++, txconf--)
3345 em_dma_free(adapter, &txr->txdma);
3346 free(adapter->rx_rings, M_DEVBUF);
3347rx_fail:
3348#if __FreeBSD_version >= 800000
3349 buf_ring_free(txr->br, M_DEVBUF);
3350#endif
3351 free(adapter->tx_rings, M_DEVBUF);
3352fail:
3353 return (error);
3354}
3355
3356
3357/*********************************************************************
3358 *
3359 * Allocate memory for tx_buffer structures. The tx_buffer stores all
3360 * the information needed to transmit a packet on the wire. This is
3361 * called only once at attach, setup is done every reset.
3362 *
3363 **********************************************************************/
3364static int
3365em_allocate_transmit_buffers(struct tx_ring *txr)
3366{
3367 struct adapter *adapter = txr->adapter;
3368 device_t dev = adapter->dev;
3369 struct em_txbuffer *txbuf;
3370 int error, i;
3371
3372 /*
3373 * Setup DMA descriptor areas.
3374 */
3375 if ((error = bus_dma_tag_create(bus_get_dma_tag(dev),
3376 1, 0, /* alignment, bounds */
3377 BUS_SPACE_MAXADDR, /* lowaddr */
3378 BUS_SPACE_MAXADDR, /* highaddr */
3379 NULL, NULL, /* filter, filterarg */
3380 EM_TSO_SIZE, /* maxsize */
3381 EM_MAX_SCATTER, /* nsegments */
3382 PAGE_SIZE, /* maxsegsize */
3383 0, /* flags */
3384 NULL, /* lockfunc */
3385 NULL, /* lockfuncarg */
3386 &txr->txtag))) {
3387 device_printf(dev,"Unable to allocate TX DMA tag\n");
3388 goto fail;
3389 }
3390
3391 if (!(txr->tx_buffers =
3392 (struct em_txbuffer *) malloc(sizeof(struct em_txbuffer) *
3393 adapter->num_tx_desc, M_DEVBUF, M_NOWAIT | M_ZERO))) {
3394 device_printf(dev, "Unable to allocate tx_buffer memory\n");
3395 error = ENOMEM;
3396 goto fail;
3397 }
3398
3399 /* Create the descriptor buffer dma maps */
3400 txbuf = txr->tx_buffers;
3401 for (i = 0; i < adapter->num_tx_desc; i++, txbuf++) {
3402 error = bus_dmamap_create(txr->txtag, 0, &txbuf->map);
3403 if (error != 0) {
3404 device_printf(dev, "Unable to create TX DMA map\n");
3405 goto fail;
3406 }
3407 }
3408
3409 return 0;
3410fail:
3411 /* We free all, it handles case where we are in the middle */
3412 em_free_transmit_structures(adapter);
3413 return (error);
3414}
3415
3416/*********************************************************************
3417 *
3418 * Initialize a transmit ring.
3419 *
3420 **********************************************************************/
3421static void
3422em_setup_transmit_ring(struct tx_ring *txr)
3423{
3424 struct adapter *adapter = txr->adapter;
3425 struct em_txbuffer *txbuf;
3426 int i;
3427#ifdef DEV_NETMAP
3428 struct netmap_slot *slot;
3429 struct netmap_adapter *na = netmap_getna(adapter->ifp);
3430#endif /* DEV_NETMAP */
3431
3432 /* Clear the old descriptor contents */
3433 EM_TX_LOCK(txr);
3434#ifdef DEV_NETMAP
3435 slot = netmap_reset(na, NR_TX, txr->me, 0);
3436#endif /* DEV_NETMAP */
3437
3438 bzero((void *)txr->tx_base,
3439 (sizeof(struct e1000_tx_desc)) * adapter->num_tx_desc);
3440 /* Reset indices */
3441 txr->next_avail_desc = 0;
3442 txr->next_to_clean = 0;
3443
3444 /* Free any existing tx buffers. */
3445 txbuf = txr->tx_buffers;
3446 for (i = 0; i < adapter->num_tx_desc; i++, txbuf++) {
3447 if (txbuf->m_head != NULL) {
3448 bus_dmamap_sync(txr->txtag, txbuf->map,
3449 BUS_DMASYNC_POSTWRITE);
3450 bus_dmamap_unload(txr->txtag, txbuf->map);
3451 m_freem(txbuf->m_head);
3452 txbuf->m_head = NULL;
3453 }
3454#ifdef DEV_NETMAP
3455 if (slot) {
3456 int si = netmap_idx_n2k(&na->tx_rings[txr->me], i);
3457 uint64_t paddr;
3458 void *addr;
3459
3460 addr = PNMB(na, slot + si, &paddr);
3461 txr->tx_base[i].buffer_addr = htole64(paddr);
3462 /* reload the map for netmap mode */
3463 netmap_load_map(na, txr->txtag, txbuf->map, addr);
3464 }
3465#endif /* DEV_NETMAP */
3466
3467 /* clear the watch index */
3468 txbuf->next_eop = -1;
3469 }
3470
3471 /* Set number of descriptors available */
3472 txr->tx_avail = adapter->num_tx_desc;
3473 txr->busy = EM_TX_IDLE;
3474
3475 /* Clear checksum offload context. */
3476 txr->last_hw_offload = 0;
3477 txr->last_hw_ipcss = 0;
3478 txr->last_hw_ipcso = 0;
3479 txr->last_hw_tucss = 0;
3480 txr->last_hw_tucso = 0;
3481
3482 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
3483 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
3484 EM_TX_UNLOCK(txr);
3485}
3486
3487/*********************************************************************
3488 *
3489 * Initialize all transmit rings.
3490 *
3491 **********************************************************************/
3492static void
3493em_setup_transmit_structures(struct adapter *adapter)
3494{
3495 struct tx_ring *txr = adapter->tx_rings;
3496
3497 for (int i = 0; i < adapter->num_queues; i++, txr++)
3498 em_setup_transmit_ring(txr);
3499
3500 return;
3501}
3502
3503/*********************************************************************
3504 *
3505 * Enable transmit unit.
3506 *
3507 **********************************************************************/
3508static void
3509em_initialize_transmit_unit(struct adapter *adapter)
3510{
3511 struct tx_ring *txr = adapter->tx_rings;
3512 struct e1000_hw *hw = &adapter->hw;
3513 u32 tctl, txdctl = 0, tarc, tipg = 0;
3514
3515 INIT_DEBUGOUT("em_initialize_transmit_unit: begin");
3516
3517 for (int i = 0; i < adapter->num_queues; i++, txr++) {
3518 u64 bus_addr = txr->txdma.dma_paddr;
3519 /* Base and Len of TX Ring */
3520 E1000_WRITE_REG(hw, E1000_TDLEN(i),
3521 adapter->num_tx_desc * sizeof(struct e1000_tx_desc));
3522 E1000_WRITE_REG(hw, E1000_TDBAH(i),
3523 (u32)(bus_addr >> 32));
3524 E1000_WRITE_REG(hw, E1000_TDBAL(i),
3525 (u32)bus_addr);
3526 /* Init the HEAD/TAIL indices */
3527 E1000_WRITE_REG(hw, E1000_TDT(i), 0);
3528 E1000_WRITE_REG(hw, E1000_TDH(i), 0);
3529
3530 HW_DEBUGOUT2("Base = %x, Length = %x\n",
3531 E1000_READ_REG(&adapter->hw, E1000_TDBAL(i)),
3532 E1000_READ_REG(&adapter->hw, E1000_TDLEN(i)));
3533
3534 txr->busy = EM_TX_IDLE;
3535 txdctl = 0; /* clear txdctl */
3536 txdctl |= 0x1f; /* PTHRESH */
3537 txdctl |= 1 << 8; /* HTHRESH */
3538 txdctl |= 1 << 16;/* WTHRESH */
3539 txdctl |= 1 << 22; /* Reserved bit 22 must always be 1 */
3540 txdctl |= E1000_TXDCTL_GRAN;
3541 txdctl |= 1 << 25; /* LWTHRESH */
3542
3543 E1000_WRITE_REG(hw, E1000_TXDCTL(i), txdctl);
3544 }
3545
3546 /* Set the default values for the Tx Inter Packet Gap timer */
3547 switch (adapter->hw.mac.type) {
3548 case e1000_80003es2lan:
3549 tipg = DEFAULT_82543_TIPG_IPGR1;
3550 tipg |= DEFAULT_80003ES2LAN_TIPG_IPGR2 <<
3551 E1000_TIPG_IPGR2_SHIFT;
3552 break;
3553 default:
3554 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
3555 (adapter->hw.phy.media_type ==
3556 e1000_media_type_internal_serdes))
3557 tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
3558 else
3559 tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
3560 tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
3561 tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
3562 }
3563
3564 E1000_WRITE_REG(&adapter->hw, E1000_TIPG, tipg);
3565 E1000_WRITE_REG(&adapter->hw, E1000_TIDV, adapter->tx_int_delay.value);
3566
3567 if(adapter->hw.mac.type >= e1000_82540)
3568 E1000_WRITE_REG(&adapter->hw, E1000_TADV,
3569 adapter->tx_abs_int_delay.value);
3570
3571 if ((adapter->hw.mac.type == e1000_82571) ||
3572 (adapter->hw.mac.type == e1000_82572)) {
3573 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0));
3574 tarc |= TARC_SPEED_MODE_BIT;
3575 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3576 } else if (adapter->hw.mac.type == e1000_80003es2lan) {
3577 /* errata: program both queues to unweighted RR */
3578 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0));
3579 tarc |= 1;
3580 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3581 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(1));
3582 tarc |= 1;
3583 E1000_WRITE_REG(&adapter->hw, E1000_TARC(1), tarc);
3584 } else if (adapter->hw.mac.type == e1000_82574) {
3585 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0));
3586 tarc |= TARC_ERRATA_BIT;
3587 if ( adapter->num_queues > 1) {
3588 tarc |= (TARC_COMPENSATION_MODE | TARC_MQ_FIX);
3589 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3590 E1000_WRITE_REG(&adapter->hw, E1000_TARC(1), tarc);
3591 } else
3592 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3593 }
3594
3595 adapter->txd_cmd = E1000_TXD_CMD_IFCS;
3596 if (adapter->tx_int_delay.value > 0)
3597 adapter->txd_cmd |= E1000_TXD_CMD_IDE;
3598
3599 /* Program the Transmit Control Register */
3600 tctl = E1000_READ_REG(&adapter->hw, E1000_TCTL);
3601 tctl &= ~E1000_TCTL_CT;
3602 tctl |= (E1000_TCTL_PSP | E1000_TCTL_RTLC | E1000_TCTL_EN |
3603 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT));
3604
3605 if (adapter->hw.mac.type >= e1000_82571)
3606 tctl |= E1000_TCTL_MULR;
3607
3608 /* This write will effectively turn on the transmit unit. */
3609 E1000_WRITE_REG(&adapter->hw, E1000_TCTL, tctl);
3610
3156 /* Issue a global reset */
3157 e1000_reset_hw(hw);
3158 E1000_WRITE_REG(hw, E1000_WUC, 0);
3159 em_disable_aspm(adapter);
3160 /* and a re-init */
3161 if (e1000_init_hw(hw) < 0) {
3162 device_printf(dev, "Hardware Initialization Failed\n");
3163 return;
3164 }
3165
3166 E1000_WRITE_REG(hw, E1000_VET, ETHERTYPE_VLAN);
3167 e1000_get_phy_info(hw);
3168 e1000_check_for_link(hw);
3169 return;
3170}
3171
3172/*********************************************************************
3173 *
3174 * Setup networking device structure and register an interface.
3175 *
3176 **********************************************************************/
3177static int
3178em_setup_interface(device_t dev, struct adapter *adapter)
3179{
3180 if_t ifp;
3181
3182 INIT_DEBUGOUT("em_setup_interface: begin");
3183
3184 ifp = adapter->ifp = if_gethandle(IFT_ETHER);
3185 if (ifp == 0) {
3186 device_printf(dev, "can not allocate ifnet structure\n");
3187 return (-1);
3188 }
3189 if_initname(ifp, device_get_name(dev), device_get_unit(dev));
3190 if_setdev(ifp, dev);
3191 if_setinitfn(ifp, em_init);
3192 if_setsoftc(ifp, adapter);
3193 if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
3194 if_setioctlfn(ifp, em_ioctl);
3195 if_setgetcounterfn(ifp, em_get_counter);
3196 /* TSO parameters */
3197 ifp->if_hw_tsomax = IP_MAXPACKET;
3198 ifp->if_hw_tsomaxsegcount = EM_MAX_SCATTER;
3199 ifp->if_hw_tsomaxsegsize = EM_TSO_SEG_SIZE;
3200
3201#ifdef EM_MULTIQUEUE
3202 /* Multiqueue stack interface */
3203 if_settransmitfn(ifp, em_mq_start);
3204 if_setqflushfn(ifp, em_qflush);
3205#else
3206 if_setstartfn(ifp, em_start);
3207 if_setsendqlen(ifp, adapter->num_tx_desc - 1);
3208 if_setsendqready(ifp);
3209#endif
3210
3211 ether_ifattach(ifp, adapter->hw.mac.addr);
3212
3213 if_setcapabilities(ifp, 0);
3214 if_setcapenable(ifp, 0);
3215
3216
3217 if_setcapabilitiesbit(ifp, IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM |
3218 IFCAP_TSO4, 0);
3219 /*
3220 * Tell the upper layer(s) we
3221 * support full VLAN capability
3222 */
3223 if_setifheaderlen(ifp, sizeof(struct ether_vlan_header));
3224 if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_HWTSO |
3225 IFCAP_VLAN_MTU, 0);
3226 if_setcapenable(ifp, if_getcapabilities(ifp));
3227
3228 /*
3229 ** Don't turn this on by default, if vlans are
3230 ** created on another pseudo device (eg. lagg)
3231 ** then vlan events are not passed thru, breaking
3232 ** operation, but with HW FILTER off it works. If
3233 ** using vlans directly on the em driver you can
3234 ** enable this and get full hardware tag filtering.
3235 */
3236 if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWFILTER,0);
3237
3238#ifdef DEVICE_POLLING
3239 if_setcapabilitiesbit(ifp, IFCAP_POLLING,0);
3240#endif
3241
3242 /* Enable only WOL MAGIC by default */
3243 if (adapter->wol) {
3244 if_setcapabilitiesbit(ifp, IFCAP_WOL, 0);
3245 if_setcapenablebit(ifp, IFCAP_WOL_MAGIC, 0);
3246 }
3247
3248 /*
3249 * Specify the media types supported by this adapter and register
3250 * callbacks to update media and link information
3251 */
3252 ifmedia_init(&adapter->media, IFM_IMASK,
3253 em_media_change, em_media_status);
3254 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
3255 (adapter->hw.phy.media_type == e1000_media_type_internal_serdes)) {
3256 u_char fiber_type = IFM_1000_SX; /* default type */
3257
3258 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type | IFM_FDX,
3259 0, NULL);
3260 ifmedia_add(&adapter->media, IFM_ETHER | fiber_type, 0, NULL);
3261 } else {
3262 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T, 0, NULL);
3263 ifmedia_add(&adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX,
3264 0, NULL);
3265 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX,
3266 0, NULL);
3267 ifmedia_add(&adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX,
3268 0, NULL);
3269 if (adapter->hw.phy.type != e1000_phy_ife) {
3270 ifmedia_add(&adapter->media,
3271 IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL);
3272 ifmedia_add(&adapter->media,
3273 IFM_ETHER | IFM_1000_T, 0, NULL);
3274 }
3275 }
3276 ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
3277 ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
3278 return (0);
3279}
3280
3281
3282/*
3283 * Manage DMA'able memory.
3284 */
3285static void
3286em_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
3287{
3288 if (error)
3289 return;
3290 *(bus_addr_t *) arg = segs[0].ds_addr;
3291}
3292
3293static int
3294em_dma_malloc(struct adapter *adapter, bus_size_t size,
3295 struct em_dma_alloc *dma, int mapflags)
3296{
3297 int error;
3298
3299 error = bus_dma_tag_create(bus_get_dma_tag(adapter->dev), /* parent */
3300 EM_DBA_ALIGN, 0, /* alignment, bounds */
3301 BUS_SPACE_MAXADDR, /* lowaddr */
3302 BUS_SPACE_MAXADDR, /* highaddr */
3303 NULL, NULL, /* filter, filterarg */
3304 size, /* maxsize */
3305 1, /* nsegments */
3306 size, /* maxsegsize */
3307 0, /* flags */
3308 NULL, /* lockfunc */
3309 NULL, /* lockarg */
3310 &dma->dma_tag);
3311 if (error) {
3312 device_printf(adapter->dev,
3313 "%s: bus_dma_tag_create failed: %d\n",
3314 __func__, error);
3315 goto fail_0;
3316 }
3317
3318 error = bus_dmamem_alloc(dma->dma_tag, (void**) &dma->dma_vaddr,
3319 BUS_DMA_NOWAIT | BUS_DMA_COHERENT, &dma->dma_map);
3320 if (error) {
3321 device_printf(adapter->dev,
3322 "%s: bus_dmamem_alloc(%ju) failed: %d\n",
3323 __func__, (uintmax_t)size, error);
3324 goto fail_2;
3325 }
3326
3327 dma->dma_paddr = 0;
3328 error = bus_dmamap_load(dma->dma_tag, dma->dma_map, dma->dma_vaddr,
3329 size, em_dmamap_cb, &dma->dma_paddr, mapflags | BUS_DMA_NOWAIT);
3330 if (error || dma->dma_paddr == 0) {
3331 device_printf(adapter->dev,
3332 "%s: bus_dmamap_load failed: %d\n",
3333 __func__, error);
3334 goto fail_3;
3335 }
3336
3337 return (0);
3338
3339fail_3:
3340 bus_dmamap_unload(dma->dma_tag, dma->dma_map);
3341fail_2:
3342 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
3343 bus_dma_tag_destroy(dma->dma_tag);
3344fail_0:
3345 dma->dma_tag = NULL;
3346
3347 return (error);
3348}
3349
3350static void
3351em_dma_free(struct adapter *adapter, struct em_dma_alloc *dma)
3352{
3353 if (dma->dma_tag == NULL)
3354 return;
3355 if (dma->dma_paddr != 0) {
3356 bus_dmamap_sync(dma->dma_tag, dma->dma_map,
3357 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
3358 bus_dmamap_unload(dma->dma_tag, dma->dma_map);
3359 dma->dma_paddr = 0;
3360 }
3361 if (dma->dma_vaddr != NULL) {
3362 bus_dmamem_free(dma->dma_tag, dma->dma_vaddr, dma->dma_map);
3363 dma->dma_vaddr = NULL;
3364 }
3365 bus_dma_tag_destroy(dma->dma_tag);
3366 dma->dma_tag = NULL;
3367}
3368
3369
3370/*********************************************************************
3371 *
3372 * Allocate memory for the transmit and receive rings, and then
3373 * the descriptors associated with each, called only once at attach.
3374 *
3375 **********************************************************************/
3376static int
3377em_allocate_queues(struct adapter *adapter)
3378{
3379 device_t dev = adapter->dev;
3380 struct tx_ring *txr = NULL;
3381 struct rx_ring *rxr = NULL;
3382 int rsize, tsize, error = E1000_SUCCESS;
3383 int txconf = 0, rxconf = 0;
3384
3385
3386 /* Allocate the TX ring struct memory */
3387 if (!(adapter->tx_rings =
3388 (struct tx_ring *) malloc(sizeof(struct tx_ring) *
3389 adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) {
3390 device_printf(dev, "Unable to allocate TX ring memory\n");
3391 error = ENOMEM;
3392 goto fail;
3393 }
3394
3395 /* Now allocate the RX */
3396 if (!(adapter->rx_rings =
3397 (struct rx_ring *) malloc(sizeof(struct rx_ring) *
3398 adapter->num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) {
3399 device_printf(dev, "Unable to allocate RX ring memory\n");
3400 error = ENOMEM;
3401 goto rx_fail;
3402 }
3403
3404 tsize = roundup2(adapter->num_tx_desc *
3405 sizeof(struct e1000_tx_desc), EM_DBA_ALIGN);
3406 /*
3407 * Now set up the TX queues, txconf is needed to handle the
3408 * possibility that things fail midcourse and we need to
3409 * undo memory gracefully
3410 */
3411 for (int i = 0; i < adapter->num_queues; i++, txconf++) {
3412 /* Set up some basics */
3413 txr = &adapter->tx_rings[i];
3414 txr->adapter = adapter;
3415 txr->me = i;
3416
3417 /* Initialize the TX lock */
3418 snprintf(txr->mtx_name, sizeof(txr->mtx_name), "%s:tx(%d)",
3419 device_get_nameunit(dev), txr->me);
3420 mtx_init(&txr->tx_mtx, txr->mtx_name, NULL, MTX_DEF);
3421
3422 if (em_dma_malloc(adapter, tsize,
3423 &txr->txdma, BUS_DMA_NOWAIT)) {
3424 device_printf(dev,
3425 "Unable to allocate TX Descriptor memory\n");
3426 error = ENOMEM;
3427 goto err_tx_desc;
3428 }
3429 txr->tx_base = (struct e1000_tx_desc *)txr->txdma.dma_vaddr;
3430 bzero((void *)txr->tx_base, tsize);
3431
3432 if (em_allocate_transmit_buffers(txr)) {
3433 device_printf(dev,
3434 "Critical Failure setting up transmit buffers\n");
3435 error = ENOMEM;
3436 goto err_tx_desc;
3437 }
3438#if __FreeBSD_version >= 800000
3439 /* Allocate a buf ring */
3440 txr->br = buf_ring_alloc(4096, M_DEVBUF,
3441 M_WAITOK, &txr->tx_mtx);
3442#endif
3443 }
3444
3445 /*
3446 * Next the RX queues...
3447 */
3448 rsize = roundup2(adapter->num_rx_desc *
3449 sizeof(union e1000_rx_desc_extended), EM_DBA_ALIGN);
3450 for (int i = 0; i < adapter->num_queues; i++, rxconf++) {
3451 rxr = &adapter->rx_rings[i];
3452 rxr->adapter = adapter;
3453 rxr->me = i;
3454
3455 /* Initialize the RX lock */
3456 snprintf(rxr->mtx_name, sizeof(rxr->mtx_name), "%s:rx(%d)",
3457 device_get_nameunit(dev), txr->me);
3458 mtx_init(&rxr->rx_mtx, rxr->mtx_name, NULL, MTX_DEF);
3459
3460 if (em_dma_malloc(adapter, rsize,
3461 &rxr->rxdma, BUS_DMA_NOWAIT)) {
3462 device_printf(dev,
3463 "Unable to allocate RxDescriptor memory\n");
3464 error = ENOMEM;
3465 goto err_rx_desc;
3466 }
3467 rxr->rx_base = (union e1000_rx_desc_extended *)rxr->rxdma.dma_vaddr;
3468 bzero((void *)rxr->rx_base, rsize);
3469
3470 /* Allocate receive buffers for the ring*/
3471 if (em_allocate_receive_buffers(rxr)) {
3472 device_printf(dev,
3473 "Critical Failure setting up receive buffers\n");
3474 error = ENOMEM;
3475 goto err_rx_desc;
3476 }
3477 }
3478
3479 return (0);
3480
3481err_rx_desc:
3482 for (rxr = adapter->rx_rings; rxconf > 0; rxr++, rxconf--)
3483 em_dma_free(adapter, &rxr->rxdma);
3484err_tx_desc:
3485 for (txr = adapter->tx_rings; txconf > 0; txr++, txconf--)
3486 em_dma_free(adapter, &txr->txdma);
3487 free(adapter->rx_rings, M_DEVBUF);
3488rx_fail:
3489#if __FreeBSD_version >= 800000
3490 buf_ring_free(txr->br, M_DEVBUF);
3491#endif
3492 free(adapter->tx_rings, M_DEVBUF);
3493fail:
3494 return (error);
3495}
3496
3497
3498/*********************************************************************
3499 *
3500 * Allocate memory for tx_buffer structures. The tx_buffer stores all
3501 * the information needed to transmit a packet on the wire. This is
3502 * called only once at attach, setup is done every reset.
3503 *
3504 **********************************************************************/
3505static int
3506em_allocate_transmit_buffers(struct tx_ring *txr)
3507{
3508 struct adapter *adapter = txr->adapter;
3509 device_t dev = adapter->dev;
3510 struct em_txbuffer *txbuf;
3511 int error, i;
3512
3513 /*
3514 * Setup DMA descriptor areas.
3515 */
3516 if ((error = bus_dma_tag_create(bus_get_dma_tag(dev),
3517 1, 0, /* alignment, bounds */
3518 BUS_SPACE_MAXADDR, /* lowaddr */
3519 BUS_SPACE_MAXADDR, /* highaddr */
3520 NULL, NULL, /* filter, filterarg */
3521 EM_TSO_SIZE, /* maxsize */
3522 EM_MAX_SCATTER, /* nsegments */
3523 PAGE_SIZE, /* maxsegsize */
3524 0, /* flags */
3525 NULL, /* lockfunc */
3526 NULL, /* lockfuncarg */
3527 &txr->txtag))) {
3528 device_printf(dev,"Unable to allocate TX DMA tag\n");
3529 goto fail;
3530 }
3531
3532 if (!(txr->tx_buffers =
3533 (struct em_txbuffer *) malloc(sizeof(struct em_txbuffer) *
3534 adapter->num_tx_desc, M_DEVBUF, M_NOWAIT | M_ZERO))) {
3535 device_printf(dev, "Unable to allocate tx_buffer memory\n");
3536 error = ENOMEM;
3537 goto fail;
3538 }
3539
3540 /* Create the descriptor buffer dma maps */
3541 txbuf = txr->tx_buffers;
3542 for (i = 0; i < adapter->num_tx_desc; i++, txbuf++) {
3543 error = bus_dmamap_create(txr->txtag, 0, &txbuf->map);
3544 if (error != 0) {
3545 device_printf(dev, "Unable to create TX DMA map\n");
3546 goto fail;
3547 }
3548 }
3549
3550 return 0;
3551fail:
3552 /* We free all, it handles case where we are in the middle */
3553 em_free_transmit_structures(adapter);
3554 return (error);
3555}
3556
3557/*********************************************************************
3558 *
3559 * Initialize a transmit ring.
3560 *
3561 **********************************************************************/
3562static void
3563em_setup_transmit_ring(struct tx_ring *txr)
3564{
3565 struct adapter *adapter = txr->adapter;
3566 struct em_txbuffer *txbuf;
3567 int i;
3568#ifdef DEV_NETMAP
3569 struct netmap_slot *slot;
3570 struct netmap_adapter *na = netmap_getna(adapter->ifp);
3571#endif /* DEV_NETMAP */
3572
3573 /* Clear the old descriptor contents */
3574 EM_TX_LOCK(txr);
3575#ifdef DEV_NETMAP
3576 slot = netmap_reset(na, NR_TX, txr->me, 0);
3577#endif /* DEV_NETMAP */
3578
3579 bzero((void *)txr->tx_base,
3580 (sizeof(struct e1000_tx_desc)) * adapter->num_tx_desc);
3581 /* Reset indices */
3582 txr->next_avail_desc = 0;
3583 txr->next_to_clean = 0;
3584
3585 /* Free any existing tx buffers. */
3586 txbuf = txr->tx_buffers;
3587 for (i = 0; i < adapter->num_tx_desc; i++, txbuf++) {
3588 if (txbuf->m_head != NULL) {
3589 bus_dmamap_sync(txr->txtag, txbuf->map,
3590 BUS_DMASYNC_POSTWRITE);
3591 bus_dmamap_unload(txr->txtag, txbuf->map);
3592 m_freem(txbuf->m_head);
3593 txbuf->m_head = NULL;
3594 }
3595#ifdef DEV_NETMAP
3596 if (slot) {
3597 int si = netmap_idx_n2k(&na->tx_rings[txr->me], i);
3598 uint64_t paddr;
3599 void *addr;
3600
3601 addr = PNMB(na, slot + si, &paddr);
3602 txr->tx_base[i].buffer_addr = htole64(paddr);
3603 /* reload the map for netmap mode */
3604 netmap_load_map(na, txr->txtag, txbuf->map, addr);
3605 }
3606#endif /* DEV_NETMAP */
3607
3608 /* clear the watch index */
3609 txbuf->next_eop = -1;
3610 }
3611
3612 /* Set number of descriptors available */
3613 txr->tx_avail = adapter->num_tx_desc;
3614 txr->busy = EM_TX_IDLE;
3615
3616 /* Clear checksum offload context. */
3617 txr->last_hw_offload = 0;
3618 txr->last_hw_ipcss = 0;
3619 txr->last_hw_ipcso = 0;
3620 txr->last_hw_tucss = 0;
3621 txr->last_hw_tucso = 0;
3622
3623 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
3624 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
3625 EM_TX_UNLOCK(txr);
3626}
3627
3628/*********************************************************************
3629 *
3630 * Initialize all transmit rings.
3631 *
3632 **********************************************************************/
3633static void
3634em_setup_transmit_structures(struct adapter *adapter)
3635{
3636 struct tx_ring *txr = adapter->tx_rings;
3637
3638 for (int i = 0; i < adapter->num_queues; i++, txr++)
3639 em_setup_transmit_ring(txr);
3640
3641 return;
3642}
3643
3644/*********************************************************************
3645 *
3646 * Enable transmit unit.
3647 *
3648 **********************************************************************/
3649static void
3650em_initialize_transmit_unit(struct adapter *adapter)
3651{
3652 struct tx_ring *txr = adapter->tx_rings;
3653 struct e1000_hw *hw = &adapter->hw;
3654 u32 tctl, txdctl = 0, tarc, tipg = 0;
3655
3656 INIT_DEBUGOUT("em_initialize_transmit_unit: begin");
3657
3658 for (int i = 0; i < adapter->num_queues; i++, txr++) {
3659 u64 bus_addr = txr->txdma.dma_paddr;
3660 /* Base and Len of TX Ring */
3661 E1000_WRITE_REG(hw, E1000_TDLEN(i),
3662 adapter->num_tx_desc * sizeof(struct e1000_tx_desc));
3663 E1000_WRITE_REG(hw, E1000_TDBAH(i),
3664 (u32)(bus_addr >> 32));
3665 E1000_WRITE_REG(hw, E1000_TDBAL(i),
3666 (u32)bus_addr);
3667 /* Init the HEAD/TAIL indices */
3668 E1000_WRITE_REG(hw, E1000_TDT(i), 0);
3669 E1000_WRITE_REG(hw, E1000_TDH(i), 0);
3670
3671 HW_DEBUGOUT2("Base = %x, Length = %x\n",
3672 E1000_READ_REG(&adapter->hw, E1000_TDBAL(i)),
3673 E1000_READ_REG(&adapter->hw, E1000_TDLEN(i)));
3674
3675 txr->busy = EM_TX_IDLE;
3676 txdctl = 0; /* clear txdctl */
3677 txdctl |= 0x1f; /* PTHRESH */
3678 txdctl |= 1 << 8; /* HTHRESH */
3679 txdctl |= 1 << 16;/* WTHRESH */
3680 txdctl |= 1 << 22; /* Reserved bit 22 must always be 1 */
3681 txdctl |= E1000_TXDCTL_GRAN;
3682 txdctl |= 1 << 25; /* LWTHRESH */
3683
3684 E1000_WRITE_REG(hw, E1000_TXDCTL(i), txdctl);
3685 }
3686
3687 /* Set the default values for the Tx Inter Packet Gap timer */
3688 switch (adapter->hw.mac.type) {
3689 case e1000_80003es2lan:
3690 tipg = DEFAULT_82543_TIPG_IPGR1;
3691 tipg |= DEFAULT_80003ES2LAN_TIPG_IPGR2 <<
3692 E1000_TIPG_IPGR2_SHIFT;
3693 break;
3694 default:
3695 if ((adapter->hw.phy.media_type == e1000_media_type_fiber) ||
3696 (adapter->hw.phy.media_type ==
3697 e1000_media_type_internal_serdes))
3698 tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
3699 else
3700 tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
3701 tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
3702 tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
3703 }
3704
3705 E1000_WRITE_REG(&adapter->hw, E1000_TIPG, tipg);
3706 E1000_WRITE_REG(&adapter->hw, E1000_TIDV, adapter->tx_int_delay.value);
3707
3708 if(adapter->hw.mac.type >= e1000_82540)
3709 E1000_WRITE_REG(&adapter->hw, E1000_TADV,
3710 adapter->tx_abs_int_delay.value);
3711
3712 if ((adapter->hw.mac.type == e1000_82571) ||
3713 (adapter->hw.mac.type == e1000_82572)) {
3714 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0));
3715 tarc |= TARC_SPEED_MODE_BIT;
3716 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3717 } else if (adapter->hw.mac.type == e1000_80003es2lan) {
3718 /* errata: program both queues to unweighted RR */
3719 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0));
3720 tarc |= 1;
3721 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3722 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(1));
3723 tarc |= 1;
3724 E1000_WRITE_REG(&adapter->hw, E1000_TARC(1), tarc);
3725 } else if (adapter->hw.mac.type == e1000_82574) {
3726 tarc = E1000_READ_REG(&adapter->hw, E1000_TARC(0));
3727 tarc |= TARC_ERRATA_BIT;
3728 if ( adapter->num_queues > 1) {
3729 tarc |= (TARC_COMPENSATION_MODE | TARC_MQ_FIX);
3730 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3731 E1000_WRITE_REG(&adapter->hw, E1000_TARC(1), tarc);
3732 } else
3733 E1000_WRITE_REG(&adapter->hw, E1000_TARC(0), tarc);
3734 }
3735
3736 adapter->txd_cmd = E1000_TXD_CMD_IFCS;
3737 if (adapter->tx_int_delay.value > 0)
3738 adapter->txd_cmd |= E1000_TXD_CMD_IDE;
3739
3740 /* Program the Transmit Control Register */
3741 tctl = E1000_READ_REG(&adapter->hw, E1000_TCTL);
3742 tctl &= ~E1000_TCTL_CT;
3743 tctl |= (E1000_TCTL_PSP | E1000_TCTL_RTLC | E1000_TCTL_EN |
3744 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT));
3745
3746 if (adapter->hw.mac.type >= e1000_82571)
3747 tctl |= E1000_TCTL_MULR;
3748
3749 /* This write will effectively turn on the transmit unit. */
3750 E1000_WRITE_REG(&adapter->hw, E1000_TCTL, tctl);
3751
3752 if (hw->mac.type == e1000_pch_spt) {
3753 u32 reg;
3754 reg = E1000_READ_REG(hw, E1000_IOSFPC);
3755 reg |= E1000_RCTL_RDMTS_HEX;
3756 E1000_WRITE_REG(hw, E1000_IOSFPC, reg);
3757 reg = E1000_READ_REG(hw, E1000_TARC(0));
3758 reg |= E1000_TARC0_CB_MULTIQ_3_REQ;
3759 E1000_WRITE_REG(hw, E1000_TARC(0), reg);
3760 }
3611}
3612
3613
3614/*********************************************************************
3615 *
3616 * Free all transmit rings.
3617 *
3618 **********************************************************************/
3619static void
3620em_free_transmit_structures(struct adapter *adapter)
3621{
3622 struct tx_ring *txr = adapter->tx_rings;
3623
3624 for (int i = 0; i < adapter->num_queues; i++, txr++) {
3625 EM_TX_LOCK(txr);
3626 em_free_transmit_buffers(txr);
3627 em_dma_free(adapter, &txr->txdma);
3628 EM_TX_UNLOCK(txr);
3629 EM_TX_LOCK_DESTROY(txr);
3630 }
3631
3632 free(adapter->tx_rings, M_DEVBUF);
3633}
3634
3635/*********************************************************************
3636 *
3637 * Free transmit ring related data structures.
3638 *
3639 **********************************************************************/
3640static void
3641em_free_transmit_buffers(struct tx_ring *txr)
3642{
3643 struct adapter *adapter = txr->adapter;
3644 struct em_txbuffer *txbuf;
3645
3646 INIT_DEBUGOUT("free_transmit_ring: begin");
3647
3648 if (txr->tx_buffers == NULL)
3649 return;
3650
3651 for (int i = 0; i < adapter->num_tx_desc; i++) {
3652 txbuf = &txr->tx_buffers[i];
3653 if (txbuf->m_head != NULL) {
3654 bus_dmamap_sync(txr->txtag, txbuf->map,
3655 BUS_DMASYNC_POSTWRITE);
3656 bus_dmamap_unload(txr->txtag,
3657 txbuf->map);
3658 m_freem(txbuf->m_head);
3659 txbuf->m_head = NULL;
3660 if (txbuf->map != NULL) {
3661 bus_dmamap_destroy(txr->txtag,
3662 txbuf->map);
3663 txbuf->map = NULL;
3664 }
3665 } else if (txbuf->map != NULL) {
3666 bus_dmamap_unload(txr->txtag,
3667 txbuf->map);
3668 bus_dmamap_destroy(txr->txtag,
3669 txbuf->map);
3670 txbuf->map = NULL;
3671 }
3672 }
3673#if __FreeBSD_version >= 800000
3674 if (txr->br != NULL)
3675 buf_ring_free(txr->br, M_DEVBUF);
3676#endif
3677 if (txr->tx_buffers != NULL) {
3678 free(txr->tx_buffers, M_DEVBUF);
3679 txr->tx_buffers = NULL;
3680 }
3681 if (txr->txtag != NULL) {
3682 bus_dma_tag_destroy(txr->txtag);
3683 txr->txtag = NULL;
3684 }
3685 return;
3686}
3687
3688
3689/*********************************************************************
3690 * The offload context is protocol specific (TCP/UDP) and thus
3691 * only needs to be set when the protocol changes. The occasion
3692 * of a context change can be a performance detriment, and
3693 * might be better just disabled. The reason arises in the way
3694 * in which the controller supports pipelined requests from the
3695 * Tx data DMA. Up to four requests can be pipelined, and they may
3696 * belong to the same packet or to multiple packets. However all
3697 * requests for one packet are issued before a request is issued
3698 * for a subsequent packet and if a request for the next packet
3699 * requires a context change, that request will be stalled
3700 * until the previous request completes. This means setting up
3701 * a new context effectively disables pipelined Tx data DMA which
3702 * in turn greatly slow down performance to send small sized
3703 * frames.
3704 **********************************************************************/
3705static void
3706em_transmit_checksum_setup(struct tx_ring *txr, struct mbuf *mp, int ip_off,
3707 struct ip *ip, u32 *txd_upper, u32 *txd_lower)
3708{
3709 struct adapter *adapter = txr->adapter;
3710 struct e1000_context_desc *TXD = NULL;
3711 struct em_txbuffer *tx_buffer;
3712 int cur, hdr_len;
3713 u32 cmd = 0;
3714 u16 offload = 0;
3715 u8 ipcso, ipcss, tucso, tucss;
3716
3717 ipcss = ipcso = tucss = tucso = 0;
3718 hdr_len = ip_off + (ip->ip_hl << 2);
3719 cur = txr->next_avail_desc;
3720
3721 /* Setup of IP header checksum. */
3722 if (mp->m_pkthdr.csum_flags & CSUM_IP) {
3723 *txd_upper |= E1000_TXD_POPTS_IXSM << 8;
3724 offload |= CSUM_IP;
3725 ipcss = ip_off;
3726 ipcso = ip_off + offsetof(struct ip, ip_sum);
3727 /*
3728 * Start offset for header checksum calculation.
3729 * End offset for header checksum calculation.
3730 * Offset of place to put the checksum.
3731 */
3732 TXD = (struct e1000_context_desc *)&txr->tx_base[cur];
3733 TXD->lower_setup.ip_fields.ipcss = ipcss;
3734 TXD->lower_setup.ip_fields.ipcse = htole16(hdr_len);
3735 TXD->lower_setup.ip_fields.ipcso = ipcso;
3736 cmd |= E1000_TXD_CMD_IP;
3737 }
3738
3739 if (mp->m_pkthdr.csum_flags & CSUM_TCP) {
3740 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
3741 *txd_upper |= E1000_TXD_POPTS_TXSM << 8;
3742 offload |= CSUM_TCP;
3743 tucss = hdr_len;
3744 tucso = hdr_len + offsetof(struct tcphdr, th_sum);
3745 /*
3746 * The 82574L can only remember the *last* context used
3747 * regardless of queue that it was use for. We cannot reuse
3748 * contexts on this hardware platform and must generate a new
3749 * context every time. 82574L hardware spec, section 7.2.6,
3750 * second note.
3751 */
3752 if (adapter->num_queues < 2) {
3753 /*
3754 * Setting up new checksum offload context for every
3755 * frames takes a lot of processing time for hardware.
3756 * This also reduces performance a lot for small sized
3757 * frames so avoid it if driver can use previously
3758 * configured checksum offload context.
3759 */
3760 if (txr->last_hw_offload == offload) {
3761 if (offload & CSUM_IP) {
3762 if (txr->last_hw_ipcss == ipcss &&
3763 txr->last_hw_ipcso == ipcso &&
3764 txr->last_hw_tucss == tucss &&
3765 txr->last_hw_tucso == tucso)
3766 return;
3767 } else {
3768 if (txr->last_hw_tucss == tucss &&
3769 txr->last_hw_tucso == tucso)
3770 return;
3771 }
3772 }
3773 txr->last_hw_offload = offload;
3774 txr->last_hw_tucss = tucss;
3775 txr->last_hw_tucso = tucso;
3776 }
3777 /*
3778 * Start offset for payload checksum calculation.
3779 * End offset for payload checksum calculation.
3780 * Offset of place to put the checksum.
3781 */
3782 TXD = (struct e1000_context_desc *)&txr->tx_base[cur];
3783 TXD->upper_setup.tcp_fields.tucss = hdr_len;
3784 TXD->upper_setup.tcp_fields.tucse = htole16(0);
3785 TXD->upper_setup.tcp_fields.tucso = tucso;
3786 cmd |= E1000_TXD_CMD_TCP;
3787 } else if (mp->m_pkthdr.csum_flags & CSUM_UDP) {
3788 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
3789 *txd_upper |= E1000_TXD_POPTS_TXSM << 8;
3790 tucss = hdr_len;
3791 tucso = hdr_len + offsetof(struct udphdr, uh_sum);
3792 /*
3793 * The 82574L can only remember the *last* context used
3794 * regardless of queue that it was use for. We cannot reuse
3795 * contexts on this hardware platform and must generate a new
3796 * context every time. 82574L hardware spec, section 7.2.6,
3797 * second note.
3798 */
3799 if (adapter->num_queues < 2) {
3800 /*
3801 * Setting up new checksum offload context for every
3802 * frames takes a lot of processing time for hardware.
3803 * This also reduces performance a lot for small sized
3804 * frames so avoid it if driver can use previously
3805 * configured checksum offload context.
3806 */
3807 if (txr->last_hw_offload == offload) {
3808 if (offload & CSUM_IP) {
3809 if (txr->last_hw_ipcss == ipcss &&
3810 txr->last_hw_ipcso == ipcso &&
3811 txr->last_hw_tucss == tucss &&
3812 txr->last_hw_tucso == tucso)
3813 return;
3814 } else {
3815 if (txr->last_hw_tucss == tucss &&
3816 txr->last_hw_tucso == tucso)
3817 return;
3818 }
3819 }
3820 txr->last_hw_offload = offload;
3821 txr->last_hw_tucss = tucss;
3822 txr->last_hw_tucso = tucso;
3823 }
3824 /*
3825 * Start offset for header checksum calculation.
3826 * End offset for header checksum calculation.
3827 * Offset of place to put the checksum.
3828 */
3829 TXD = (struct e1000_context_desc *)&txr->tx_base[cur];
3830 TXD->upper_setup.tcp_fields.tucss = tucss;
3831 TXD->upper_setup.tcp_fields.tucse = htole16(0);
3832 TXD->upper_setup.tcp_fields.tucso = tucso;
3833 }
3834
3835 if (offload & CSUM_IP) {
3836 txr->last_hw_ipcss = ipcss;
3837 txr->last_hw_ipcso = ipcso;
3838 }
3839
3840 TXD->tcp_seg_setup.data = htole32(0);
3841 TXD->cmd_and_length =
3842 htole32(adapter->txd_cmd | E1000_TXD_CMD_DEXT | cmd);
3843 tx_buffer = &txr->tx_buffers[cur];
3844 tx_buffer->m_head = NULL;
3845 tx_buffer->next_eop = -1;
3846
3847 if (++cur == adapter->num_tx_desc)
3848 cur = 0;
3849
3850 txr->tx_avail--;
3851 txr->next_avail_desc = cur;
3852}
3853
3854
3855/**********************************************************************
3856 *
3857 * Setup work for hardware segmentation offload (TSO)
3858 *
3859 **********************************************************************/
3860static void
3861em_tso_setup(struct tx_ring *txr, struct mbuf *mp, int ip_off,
3862 struct ip *ip, struct tcphdr *tp, u32 *txd_upper, u32 *txd_lower)
3863{
3864 struct adapter *adapter = txr->adapter;
3865 struct e1000_context_desc *TXD;
3866 struct em_txbuffer *tx_buffer;
3867 int cur, hdr_len;
3868
3869 /*
3870 * In theory we can use the same TSO context if and only if
3871 * frame is the same type(IP/TCP) and the same MSS. However
3872 * checking whether a frame has the same IP/TCP structure is
3873 * hard thing so just ignore that and always restablish a
3874 * new TSO context.
3875 */
3876 hdr_len = ip_off + (ip->ip_hl << 2) + (tp->th_off << 2);
3877 *txd_lower = (E1000_TXD_CMD_DEXT | /* Extended descr type */
3878 E1000_TXD_DTYP_D | /* Data descr type */
3879 E1000_TXD_CMD_TSE); /* Do TSE on this packet */
3880
3881 /* IP and/or TCP header checksum calculation and insertion. */
3882 *txd_upper = (E1000_TXD_POPTS_IXSM | E1000_TXD_POPTS_TXSM) << 8;
3883
3884 cur = txr->next_avail_desc;
3885 tx_buffer = &txr->tx_buffers[cur];
3886 TXD = (struct e1000_context_desc *) &txr->tx_base[cur];
3887
3888 /*
3889 * Start offset for header checksum calculation.
3890 * End offset for header checksum calculation.
3891 * Offset of place put the checksum.
3892 */
3893 TXD->lower_setup.ip_fields.ipcss = ip_off;
3894 TXD->lower_setup.ip_fields.ipcse =
3895 htole16(ip_off + (ip->ip_hl << 2) - 1);
3896 TXD->lower_setup.ip_fields.ipcso = ip_off + offsetof(struct ip, ip_sum);
3897 /*
3898 * Start offset for payload checksum calculation.
3899 * End offset for payload checksum calculation.
3900 * Offset of place to put the checksum.
3901 */
3902 TXD->upper_setup.tcp_fields.tucss = ip_off + (ip->ip_hl << 2);
3903 TXD->upper_setup.tcp_fields.tucse = 0;
3904 TXD->upper_setup.tcp_fields.tucso =
3905 ip_off + (ip->ip_hl << 2) + offsetof(struct tcphdr, th_sum);
3906 /*
3907 * Payload size per packet w/o any headers.
3908 * Length of all headers up to payload.
3909 */
3910 TXD->tcp_seg_setup.fields.mss = htole16(mp->m_pkthdr.tso_segsz);
3911 TXD->tcp_seg_setup.fields.hdr_len = hdr_len;
3912
3913 TXD->cmd_and_length = htole32(adapter->txd_cmd |
3914 E1000_TXD_CMD_DEXT | /* Extended descr */
3915 E1000_TXD_CMD_TSE | /* TSE context */
3916 E1000_TXD_CMD_IP | /* Do IP csum */
3917 E1000_TXD_CMD_TCP | /* Do TCP checksum */
3918 (mp->m_pkthdr.len - (hdr_len))); /* Total len */
3919
3920 tx_buffer->m_head = NULL;
3921 tx_buffer->next_eop = -1;
3922
3923 if (++cur == adapter->num_tx_desc)
3924 cur = 0;
3925
3926 txr->tx_avail--;
3927 txr->next_avail_desc = cur;
3928 txr->tx_tso = TRUE;
3929}
3930
3931
3932/**********************************************************************
3933 *
3934 * Examine each tx_buffer in the used queue. If the hardware is done
3935 * processing the packet then free associated resources. The
3936 * tx_buffer is put back on the free queue.
3937 *
3938 **********************************************************************/
3939static void
3940em_txeof(struct tx_ring *txr)
3941{
3942 struct adapter *adapter = txr->adapter;
3943 int first, last, done, processed;
3944 struct em_txbuffer *tx_buffer;
3945 struct e1000_tx_desc *tx_desc, *eop_desc;
3946 if_t ifp = adapter->ifp;
3947
3948 EM_TX_LOCK_ASSERT(txr);
3949#ifdef DEV_NETMAP
3950 if (netmap_tx_irq(ifp, txr->me))
3951 return;
3952#endif /* DEV_NETMAP */
3953
3954 /* No work, make sure hang detection is disabled */
3955 if (txr->tx_avail == adapter->num_tx_desc) {
3956 txr->busy = EM_TX_IDLE;
3957 return;
3958 }
3959
3960 processed = 0;
3961 first = txr->next_to_clean;
3962 tx_desc = &txr->tx_base[first];
3963 tx_buffer = &txr->tx_buffers[first];
3964 last = tx_buffer->next_eop;
3965 eop_desc = &txr->tx_base[last];
3966
3967 /*
3968 * What this does is get the index of the
3969 * first descriptor AFTER the EOP of the
3970 * first packet, that way we can do the
3971 * simple comparison on the inner while loop.
3972 */
3973 if (++last == adapter->num_tx_desc)
3974 last = 0;
3975 done = last;
3976
3977 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
3978 BUS_DMASYNC_POSTREAD);
3979
3980 while (eop_desc->upper.fields.status & E1000_TXD_STAT_DD) {
3981 /* We clean the range of the packet */
3982 while (first != done) {
3983 tx_desc->upper.data = 0;
3984 tx_desc->lower.data = 0;
3985 tx_desc->buffer_addr = 0;
3986 ++txr->tx_avail;
3987 ++processed;
3988
3989 if (tx_buffer->m_head) {
3990 bus_dmamap_sync(txr->txtag,
3991 tx_buffer->map,
3992 BUS_DMASYNC_POSTWRITE);
3993 bus_dmamap_unload(txr->txtag,
3994 tx_buffer->map);
3995 m_freem(tx_buffer->m_head);
3996 tx_buffer->m_head = NULL;
3997 }
3998 tx_buffer->next_eop = -1;
3999
4000 if (++first == adapter->num_tx_desc)
4001 first = 0;
4002
4003 tx_buffer = &txr->tx_buffers[first];
4004 tx_desc = &txr->tx_base[first];
4005 }
4006 if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1);
4007 /* See if we can continue to the next packet */
4008 last = tx_buffer->next_eop;
4009 if (last != -1) {
4010 eop_desc = &txr->tx_base[last];
4011 /* Get new done point */
4012 if (++last == adapter->num_tx_desc) last = 0;
4013 done = last;
4014 } else
4015 break;
4016 }
4017 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
4018 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
4019
4020 txr->next_to_clean = first;
4021
4022 /*
4023 ** Hang detection: we know there's work outstanding
4024 ** or the entry return would have been taken, so no
4025 ** descriptor processed here indicates a potential hang.
4026 ** The local timer will examine this and do a reset if needed.
4027 */
4028 if (processed == 0) {
4029 if (txr->busy != EM_TX_HUNG)
4030 ++txr->busy;
4031 } else /* At least one descriptor was cleaned */
4032 txr->busy = EM_TX_BUSY; /* note this clears HUNG */
4033
4034 /*
4035 * If we have a minimum free, clear IFF_DRV_OACTIVE
4036 * to tell the stack that it is OK to send packets.
4037 * Notice that all writes of OACTIVE happen under the
4038 * TX lock which, with a single queue, guarantees
4039 * sanity.
4040 */
4041 if (txr->tx_avail >= EM_MAX_SCATTER) {
4042 if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
4043 }
4044
4045 /* Disable hang detection if all clean */
4046 if (txr->tx_avail == adapter->num_tx_desc)
4047 txr->busy = EM_TX_IDLE;
4048}
4049
4050/*********************************************************************
4051 *
4052 * Refresh RX descriptor mbufs from system mbuf buffer pool.
4053 *
4054 **********************************************************************/
4055static void
4056em_refresh_mbufs(struct rx_ring *rxr, int limit)
4057{
4058 struct adapter *adapter = rxr->adapter;
4059 struct mbuf *m;
4060 bus_dma_segment_t segs;
4061 struct em_rxbuffer *rxbuf;
4062 int i, j, error, nsegs;
4063 bool cleaned = FALSE;
4064
4065 i = j = rxr->next_to_refresh;
4066 /*
4067 ** Get one descriptor beyond
4068 ** our work mark to control
4069 ** the loop.
4070 */
4071 if (++j == adapter->num_rx_desc)
4072 j = 0;
4073
4074 while (j != limit) {
4075 rxbuf = &rxr->rx_buffers[i];
4076 if (rxbuf->m_head == NULL) {
4077 m = m_getjcl(M_NOWAIT, MT_DATA,
4078 M_PKTHDR, adapter->rx_mbuf_sz);
4079 /*
4080 ** If we have a temporary resource shortage
4081 ** that causes a failure, just abort refresh
4082 ** for now, we will return to this point when
4083 ** reinvoked from em_rxeof.
4084 */
4085 if (m == NULL)
4086 goto update;
4087 } else
4088 m = rxbuf->m_head;
4089
4090 m->m_len = m->m_pkthdr.len = adapter->rx_mbuf_sz;
4091 m->m_flags |= M_PKTHDR;
4092 m->m_data = m->m_ext.ext_buf;
4093
4094 /* Use bus_dma machinery to setup the memory mapping */
4095 error = bus_dmamap_load_mbuf_sg(rxr->rxtag, rxbuf->map,
4096 m, &segs, &nsegs, BUS_DMA_NOWAIT);
4097 if (error != 0) {
4098 printf("Refresh mbufs: hdr dmamap load"
4099 " failure - %d\n", error);
4100 m_free(m);
4101 rxbuf->m_head = NULL;
4102 goto update;
4103 }
4104 rxbuf->m_head = m;
4105 rxbuf->paddr = segs.ds_addr;
4106 bus_dmamap_sync(rxr->rxtag,
4107 rxbuf->map, BUS_DMASYNC_PREREAD);
4108 em_setup_rxdesc(&rxr->rx_base[i], rxbuf);
4109 cleaned = TRUE;
4110
4111 i = j; /* Next is precalulated for us */
4112 rxr->next_to_refresh = i;
4113 /* Calculate next controlling index */
4114 if (++j == adapter->num_rx_desc)
4115 j = 0;
4116 }
4117update:
4118 /*
4119 ** Update the tail pointer only if,
4120 ** and as far as we have refreshed.
4121 */
4122 if (cleaned)
4123 E1000_WRITE_REG(&adapter->hw,
4124 E1000_RDT(rxr->me), rxr->next_to_refresh);
4125
4126 return;
4127}
4128
4129
4130/*********************************************************************
4131 *
4132 * Allocate memory for rx_buffer structures. Since we use one
4133 * rx_buffer per received packet, the maximum number of rx_buffer's
4134 * that we'll need is equal to the number of receive descriptors
4135 * that we've allocated.
4136 *
4137 **********************************************************************/
4138static int
4139em_allocate_receive_buffers(struct rx_ring *rxr)
4140{
4141 struct adapter *adapter = rxr->adapter;
4142 device_t dev = adapter->dev;
4143 struct em_rxbuffer *rxbuf;
4144 int error;
4145
4146 rxr->rx_buffers = malloc(sizeof(struct em_rxbuffer) *
4147 adapter->num_rx_desc, M_DEVBUF, M_NOWAIT | M_ZERO);
4148 if (rxr->rx_buffers == NULL) {
4149 device_printf(dev, "Unable to allocate rx_buffer memory\n");
4150 return (ENOMEM);
4151 }
4152
4153 error = bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */
4154 1, 0, /* alignment, bounds */
4155 BUS_SPACE_MAXADDR, /* lowaddr */
4156 BUS_SPACE_MAXADDR, /* highaddr */
4157 NULL, NULL, /* filter, filterarg */
4158 MJUM9BYTES, /* maxsize */
4159 1, /* nsegments */
4160 MJUM9BYTES, /* maxsegsize */
4161 0, /* flags */
4162 NULL, /* lockfunc */
4163 NULL, /* lockarg */
4164 &rxr->rxtag);
4165 if (error) {
4166 device_printf(dev, "%s: bus_dma_tag_create failed %d\n",
4167 __func__, error);
4168 goto fail;
4169 }
4170
4171 rxbuf = rxr->rx_buffers;
4172 for (int i = 0; i < adapter->num_rx_desc; i++, rxbuf++) {
4173 rxbuf = &rxr->rx_buffers[i];
4174 error = bus_dmamap_create(rxr->rxtag, 0, &rxbuf->map);
4175 if (error) {
4176 device_printf(dev, "%s: bus_dmamap_create failed: %d\n",
4177 __func__, error);
4178 goto fail;
4179 }
4180 }
4181
4182 return (0);
4183
4184fail:
4185 em_free_receive_structures(adapter);
4186 return (error);
4187}
4188
4189
4190/*********************************************************************
4191 *
4192 * Initialize a receive ring and its buffers.
4193 *
4194 **********************************************************************/
4195static int
4196em_setup_receive_ring(struct rx_ring *rxr)
4197{
4198 struct adapter *adapter = rxr->adapter;
4199 struct em_rxbuffer *rxbuf;
4200 bus_dma_segment_t seg[1];
4201 int rsize, nsegs, error = 0;
4202#ifdef DEV_NETMAP
4203 struct netmap_slot *slot;
4204 struct netmap_adapter *na = netmap_getna(adapter->ifp);
4205#endif
4206
4207
4208 /* Clear the ring contents */
4209 EM_RX_LOCK(rxr);
4210 rsize = roundup2(adapter->num_rx_desc *
4211 sizeof(union e1000_rx_desc_extended), EM_DBA_ALIGN);
4212 bzero((void *)rxr->rx_base, rsize);
4213#ifdef DEV_NETMAP
4214 slot = netmap_reset(na, NR_RX, rxr->me, 0);
4215#endif
4216
4217 /*
4218 ** Free current RX buffer structs and their mbufs
4219 */
4220 for (int i = 0; i < adapter->num_rx_desc; i++) {
4221 rxbuf = &rxr->rx_buffers[i];
4222 if (rxbuf->m_head != NULL) {
4223 bus_dmamap_sync(rxr->rxtag, rxbuf->map,
4224 BUS_DMASYNC_POSTREAD);
4225 bus_dmamap_unload(rxr->rxtag, rxbuf->map);
4226 m_freem(rxbuf->m_head);
4227 rxbuf->m_head = NULL; /* mark as freed */
4228 }
4229 }
4230
4231 /* Now replenish the mbufs */
4232 for (int j = 0; j != adapter->num_rx_desc; ++j) {
4233 rxbuf = &rxr->rx_buffers[j];
4234#ifdef DEV_NETMAP
4235 if (slot) {
4236 int si = netmap_idx_n2k(&na->rx_rings[rxr->me], j);
4237 uint64_t paddr;
4238 void *addr;
4239
4240 addr = PNMB(na, slot + si, &paddr);
4241 netmap_load_map(na, rxr->rxtag, rxbuf->map, addr);
4242 em_setup_rxdesc(&rxr->rx_base[j], rxbuf);
4243 continue;
4244 }
4245#endif /* DEV_NETMAP */
4246 rxbuf->m_head = m_getjcl(M_NOWAIT, MT_DATA,
4247 M_PKTHDR, adapter->rx_mbuf_sz);
4248 if (rxbuf->m_head == NULL) {
4249 error = ENOBUFS;
4250 goto fail;
4251 }
4252 rxbuf->m_head->m_len = adapter->rx_mbuf_sz;
4253 rxbuf->m_head->m_flags &= ~M_HASFCS; /* we strip it */
4254 rxbuf->m_head->m_pkthdr.len = adapter->rx_mbuf_sz;
4255
4256 /* Get the memory mapping */
4257 error = bus_dmamap_load_mbuf_sg(rxr->rxtag,
4258 rxbuf->map, rxbuf->m_head, seg,
4259 &nsegs, BUS_DMA_NOWAIT);
4260 if (error != 0) {
4261 m_freem(rxbuf->m_head);
4262 rxbuf->m_head = NULL;
4263 goto fail;
4264 }
4265 bus_dmamap_sync(rxr->rxtag,
4266 rxbuf->map, BUS_DMASYNC_PREREAD);
4267
4268 rxbuf->paddr = seg[0].ds_addr;
4269 em_setup_rxdesc(&rxr->rx_base[j], rxbuf);
4270 }
4271 rxr->next_to_check = 0;
4272 rxr->next_to_refresh = 0;
4273 bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
4274 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
4275
4276fail:
4277 EM_RX_UNLOCK(rxr);
4278 return (error);
4279}
4280
4281/*********************************************************************
4282 *
4283 * Initialize all receive rings.
4284 *
4285 **********************************************************************/
4286static int
4287em_setup_receive_structures(struct adapter *adapter)
4288{
4289 struct rx_ring *rxr = adapter->rx_rings;
4290 int q;
4291
4292 for (q = 0; q < adapter->num_queues; q++, rxr++)
4293 if (em_setup_receive_ring(rxr))
4294 goto fail;
4295
4296 return (0);
4297fail:
4298 /*
4299 * Free RX buffers allocated so far, we will only handle
4300 * the rings that completed, the failing case will have
4301 * cleaned up for itself. 'q' failed, so its the terminus.
4302 */
4303 for (int i = 0; i < q; ++i) {
4304 rxr = &adapter->rx_rings[i];
4305 for (int n = 0; n < adapter->num_rx_desc; n++) {
4306 struct em_rxbuffer *rxbuf;
4307 rxbuf = &rxr->rx_buffers[n];
4308 if (rxbuf->m_head != NULL) {
4309 bus_dmamap_sync(rxr->rxtag, rxbuf->map,
4310 BUS_DMASYNC_POSTREAD);
4311 bus_dmamap_unload(rxr->rxtag, rxbuf->map);
4312 m_freem(rxbuf->m_head);
4313 rxbuf->m_head = NULL;
4314 }
4315 }
4316 rxr->next_to_check = 0;
4317 rxr->next_to_refresh = 0;
4318 }
4319
4320 return (ENOBUFS);
4321}
4322
4323/*********************************************************************
4324 *
4325 * Free all receive rings.
4326 *
4327 **********************************************************************/
4328static void
4329em_free_receive_structures(struct adapter *adapter)
4330{
4331 struct rx_ring *rxr = adapter->rx_rings;
4332
4333 for (int i = 0; i < adapter->num_queues; i++, rxr++) {
4334 em_free_receive_buffers(rxr);
4335 /* Free the ring memory as well */
4336 em_dma_free(adapter, &rxr->rxdma);
4337 EM_RX_LOCK_DESTROY(rxr);
4338 }
4339
4340 free(adapter->rx_rings, M_DEVBUF);
4341}
4342
4343
4344/*********************************************************************
4345 *
4346 * Free receive ring data structures
4347 *
4348 **********************************************************************/
4349static void
4350em_free_receive_buffers(struct rx_ring *rxr)
4351{
4352 struct adapter *adapter = rxr->adapter;
4353 struct em_rxbuffer *rxbuf = NULL;
4354
4355 INIT_DEBUGOUT("free_receive_buffers: begin");
4356
4357 if (rxr->rx_buffers != NULL) {
4358 for (int i = 0; i < adapter->num_rx_desc; i++) {
4359 rxbuf = &rxr->rx_buffers[i];
4360 if (rxbuf->map != NULL) {
4361 bus_dmamap_sync(rxr->rxtag, rxbuf->map,
4362 BUS_DMASYNC_POSTREAD);
4363 bus_dmamap_unload(rxr->rxtag, rxbuf->map);
4364 bus_dmamap_destroy(rxr->rxtag, rxbuf->map);
4365 }
4366 if (rxbuf->m_head != NULL) {
4367 m_freem(rxbuf->m_head);
4368 rxbuf->m_head = NULL;
4369 }
4370 }
4371 free(rxr->rx_buffers, M_DEVBUF);
4372 rxr->rx_buffers = NULL;
4373 rxr->next_to_check = 0;
4374 rxr->next_to_refresh = 0;
4375 }
4376
4377 if (rxr->rxtag != NULL) {
4378 bus_dma_tag_destroy(rxr->rxtag);
4379 rxr->rxtag = NULL;
4380 }
4381
4382 return;
4383}
4384
4385
4386/*********************************************************************
4387 *
4388 * Enable receive unit.
4389 *
4390 **********************************************************************/
4391
4392static void
4393em_initialize_receive_unit(struct adapter *adapter)
4394{
4395 struct rx_ring *rxr = adapter->rx_rings;
4396 if_t ifp = adapter->ifp;
4397 struct e1000_hw *hw = &adapter->hw;
4398 u32 rctl, rxcsum, rfctl;
4399
4400 INIT_DEBUGOUT("em_initialize_receive_units: begin");
4401
4402 /*
4403 * Make sure receives are disabled while setting
4404 * up the descriptor ring
4405 */
4406 rctl = E1000_READ_REG(hw, E1000_RCTL);
4407 /* Do not disable if ever enabled on this hardware */
4408 if ((hw->mac.type != e1000_82574) && (hw->mac.type != e1000_82583))
4409 E1000_WRITE_REG(hw, E1000_RCTL, rctl & ~E1000_RCTL_EN);
4410
4411 /* Setup the Receive Control Register */
4412 rctl &= ~(3 << E1000_RCTL_MO_SHIFT);
4413 rctl |= E1000_RCTL_EN | E1000_RCTL_BAM |
4414 E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
4415 (hw->mac.mc_filter_type << E1000_RCTL_MO_SHIFT);
4416
4417 /* Do not store bad packets */
4418 rctl &= ~E1000_RCTL_SBP;
4419
4420 /* Enable Long Packet receive */
4421 if (if_getmtu(ifp) > ETHERMTU)
4422 rctl |= E1000_RCTL_LPE;
4423 else
4424 rctl &= ~E1000_RCTL_LPE;
4425
4426 /* Strip the CRC */
4427 if (!em_disable_crc_stripping)
4428 rctl |= E1000_RCTL_SECRC;
4429
4430 E1000_WRITE_REG(&adapter->hw, E1000_RADV,
4431 adapter->rx_abs_int_delay.value);
4432
4433 E1000_WRITE_REG(&adapter->hw, E1000_RDTR,
4434 adapter->rx_int_delay.value);
4435 /*
4436 * Set the interrupt throttling rate. Value is calculated
4437 * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns)
4438 */
4439 E1000_WRITE_REG(hw, E1000_ITR, DEFAULT_ITR);
4440
4441 /* Use extended rx descriptor formats */
4442 rfctl = E1000_READ_REG(hw, E1000_RFCTL);
4443 rfctl |= E1000_RFCTL_EXTEN;
4444 /*
4445 ** When using MSIX interrupts we need to throttle
4446 ** using the EITR register (82574 only)
4447 */
4448 if (hw->mac.type == e1000_82574) {
4449 for (int i = 0; i < 4; i++)
4450 E1000_WRITE_REG(hw, E1000_EITR_82574(i),
4451 DEFAULT_ITR);
4452 /* Disable accelerated acknowledge */
4453 rfctl |= E1000_RFCTL_ACK_DIS;
4454 }
4455 E1000_WRITE_REG(hw, E1000_RFCTL, rfctl);
4456
4457 rxcsum = E1000_READ_REG(hw, E1000_RXCSUM);
4458 if (if_getcapenable(ifp) & IFCAP_RXCSUM) {
4459#ifdef EM_MULTIQUEUE
4460 rxcsum |= E1000_RXCSUM_TUOFL |
4461 E1000_RXCSUM_IPOFL |
4462 E1000_RXCSUM_PCSD;
4463#else
4464 rxcsum |= E1000_RXCSUM_TUOFL;
4465#endif
4466 } else
4467 rxcsum &= ~E1000_RXCSUM_TUOFL;
4468
4469 E1000_WRITE_REG(hw, E1000_RXCSUM, rxcsum);
4470
4471#ifdef EM_MULTIQUEUE
4472#define RSSKEYLEN 10
4473 if (adapter->num_queues > 1) {
4474 uint8_t rss_key[4 * RSSKEYLEN];
4475 uint32_t reta = 0;
4476 int i;
4477
4478 /*
4479 * Configure RSS key
4480 */
4481 arc4rand(rss_key, sizeof(rss_key), 0);
4482 for (i = 0; i < RSSKEYLEN; ++i) {
4483 uint32_t rssrk = 0;
4484
4485 rssrk = EM_RSSRK_VAL(rss_key, i);
4486 E1000_WRITE_REG(hw,E1000_RSSRK(i), rssrk);
4487 }
4488
4489 /*
4490 * Configure RSS redirect table in following fashion:
4491 * (hash & ring_cnt_mask) == rdr_table[(hash & rdr_table_mask)]
4492 */
4493 for (i = 0; i < sizeof(reta); ++i) {
4494 uint32_t q;
4495
4496 q = (i % adapter->num_queues) << 7;
4497 reta |= q << (8 * i);
4498 }
4499
4500 for (i = 0; i < 32; ++i) {
4501 E1000_WRITE_REG(hw, E1000_RETA(i), reta);
4502 }
4503
4504 E1000_WRITE_REG(hw, E1000_MRQC, E1000_MRQC_RSS_ENABLE_2Q |
4505 E1000_MRQC_RSS_FIELD_IPV4_TCP |
4506 E1000_MRQC_RSS_FIELD_IPV4 |
4507 E1000_MRQC_RSS_FIELD_IPV6_TCP_EX |
4508 E1000_MRQC_RSS_FIELD_IPV6_EX |
4509 E1000_MRQC_RSS_FIELD_IPV6);
4510 }
4511#endif
4512 /*
4513 ** XXX TEMPORARY WORKAROUND: on some systems with 82573
4514 ** long latencies are observed, like Lenovo X60. This
4515 ** change eliminates the problem, but since having positive
4516 ** values in RDTR is a known source of problems on other
4517 ** platforms another solution is being sought.
4518 */
4519 if (hw->mac.type == e1000_82573)
4520 E1000_WRITE_REG(hw, E1000_RDTR, 0x20);
4521
4522 for (int i = 0; i < adapter->num_queues; i++, rxr++) {
4523 /* Setup the Base and Length of the Rx Descriptor Ring */
4524 u64 bus_addr = rxr->rxdma.dma_paddr;
4525 u32 rdt = adapter->num_rx_desc - 1; /* default */
4526
4527 E1000_WRITE_REG(hw, E1000_RDLEN(i),
4528 adapter->num_rx_desc * sizeof(union e1000_rx_desc_extended));
4529 E1000_WRITE_REG(hw, E1000_RDBAH(i), (u32)(bus_addr >> 32));
4530 E1000_WRITE_REG(hw, E1000_RDBAL(i), (u32)bus_addr);
4531 /* Setup the Head and Tail Descriptor Pointers */
4532 E1000_WRITE_REG(hw, E1000_RDH(i), 0);
4533#ifdef DEV_NETMAP
4534 /*
4535 * an init() while a netmap client is active must
4536 * preserve the rx buffers passed to userspace.
4537 */
4538 if (if_getcapenable(ifp) & IFCAP_NETMAP) {
4539 struct netmap_adapter *na = netmap_getna(adapter->ifp);
4540 rdt -= nm_kr_rxspace(&na->rx_rings[i]);
4541 }
4542#endif /* DEV_NETMAP */
4543 E1000_WRITE_REG(hw, E1000_RDT(i), rdt);
4544 }
4545
4546 /*
4547 * Set PTHRESH for improved jumbo performance
4548 * According to 10.2.5.11 of Intel 82574 Datasheet,
4549 * RXDCTL(1) is written whenever RXDCTL(0) is written.
4550 * Only write to RXDCTL(1) if there is a need for different
4551 * settings.
4552 */
4553 if (((adapter->hw.mac.type == e1000_ich9lan) ||
4554 (adapter->hw.mac.type == e1000_pch2lan) ||
4555 (adapter->hw.mac.type == e1000_ich10lan)) &&
4556 (if_getmtu(ifp) > ETHERMTU)) {
4557 u32 rxdctl = E1000_READ_REG(hw, E1000_RXDCTL(0));
4558 E1000_WRITE_REG(hw, E1000_RXDCTL(0), rxdctl | 3);
4559 } else if (adapter->hw.mac.type == e1000_82574) {
4560 for (int i = 0; i < adapter->num_queues; i++) {
4561 u32 rxdctl = E1000_READ_REG(hw, E1000_RXDCTL(i));
4562
4563 rxdctl |= 0x20; /* PTHRESH */
4564 rxdctl |= 4 << 8; /* HTHRESH */
4565 rxdctl |= 4 << 16;/* WTHRESH */
4566 rxdctl |= 1 << 24; /* Switch to granularity */
4567 E1000_WRITE_REG(hw, E1000_RXDCTL(i), rxdctl);
4568 }
4569 }
4570
4571 if (adapter->hw.mac.type >= e1000_pch2lan) {
4572 if (if_getmtu(ifp) > ETHERMTU)
4573 e1000_lv_jumbo_workaround_ich8lan(hw, TRUE);
4574 else
4575 e1000_lv_jumbo_workaround_ich8lan(hw, FALSE);
4576 }
4577
4578 /* Make sure VLAN Filters are off */
4579 rctl &= ~E1000_RCTL_VFE;
4580
4581 if (adapter->rx_mbuf_sz == MCLBYTES)
4582 rctl |= E1000_RCTL_SZ_2048;
4583 else if (adapter->rx_mbuf_sz == MJUMPAGESIZE)
4584 rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX;
4585 else if (adapter->rx_mbuf_sz > MJUMPAGESIZE)
4586 rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX;
4587
4588 /* ensure we clear use DTYPE of 00 here */
4589 rctl &= ~0x00000C00;
4590 /* Write out the settings */
4591 E1000_WRITE_REG(hw, E1000_RCTL, rctl);
4592
4593 return;
4594}
4595
4596
4597/*********************************************************************
4598 *
4599 * This routine executes in interrupt context. It replenishes
4600 * the mbufs in the descriptor and sends data which has been
4601 * dma'ed into host memory to upper layer.
4602 *
4603 * We loop at most count times if count is > 0, or until done if
4604 * count < 0.
4605 *
4606 * For polling we also now return the number of cleaned packets
4607 *********************************************************************/
4608static bool
4609em_rxeof(struct rx_ring *rxr, int count, int *done)
4610{
4611 struct adapter *adapter = rxr->adapter;
4612 if_t ifp = adapter->ifp;
4613 struct mbuf *mp, *sendmp;
4614 u32 status = 0;
4615 u16 len;
4616 int i, processed, rxdone = 0;
4617 bool eop;
4618 union e1000_rx_desc_extended *cur;
4619
4620 EM_RX_LOCK(rxr);
4621
4622 /* Sync the ring */
4623 bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
4624 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
4625
4626
4627#ifdef DEV_NETMAP
4628 if (netmap_rx_irq(ifp, rxr->me, &processed)) {
4629 EM_RX_UNLOCK(rxr);
4630 return (FALSE);
4631 }
4632#endif /* DEV_NETMAP */
4633
4634 for (i = rxr->next_to_check, processed = 0; count != 0;) {
4635 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
4636 break;
4637
4638 cur = &rxr->rx_base[i];
4639 status = le32toh(cur->wb.upper.status_error);
4640 mp = sendmp = NULL;
4641
4642 if ((status & E1000_RXD_STAT_DD) == 0)
4643 break;
4644
4645 len = le16toh(cur->wb.upper.length);
4646 eop = (status & E1000_RXD_STAT_EOP) != 0;
4647
4648 if ((status & E1000_RXDEXT_ERR_FRAME_ERR_MASK) ||
4649 (rxr->discard == TRUE)) {
4650 adapter->dropped_pkts++;
4651 ++rxr->rx_discarded;
4652 if (!eop) /* Catch subsequent segs */
4653 rxr->discard = TRUE;
4654 else
4655 rxr->discard = FALSE;
4656 em_rx_discard(rxr, i);
4657 goto next_desc;
4658 }
4659 bus_dmamap_unload(rxr->rxtag, rxr->rx_buffers[i].map);
4660
4661 /* Assign correct length to the current fragment */
4662 mp = rxr->rx_buffers[i].m_head;
4663 mp->m_len = len;
4664
4665 /* Trigger for refresh */
4666 rxr->rx_buffers[i].m_head = NULL;
4667
4668 /* First segment? */
4669 if (rxr->fmp == NULL) {
4670 mp->m_pkthdr.len = len;
4671 rxr->fmp = rxr->lmp = mp;
4672 } else {
4673 /* Chain mbuf's together */
4674 mp->m_flags &= ~M_PKTHDR;
4675 rxr->lmp->m_next = mp;
4676 rxr->lmp = mp;
4677 rxr->fmp->m_pkthdr.len += len;
4678 }
4679
4680 if (eop) {
4681 --count;
4682 sendmp = rxr->fmp;
4683 if_setrcvif(sendmp, ifp);
4684 if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
4685 em_receive_checksum(status, sendmp);
4686#ifndef __NO_STRICT_ALIGNMENT
4687 if (adapter->hw.mac.max_frame_size >
4688 (MCLBYTES - ETHER_ALIGN) &&
4689 em_fixup_rx(rxr) != 0)
4690 goto skip;
4691#endif
4692 if (status & E1000_RXD_STAT_VP) {
4693 if_setvtag(sendmp,
4694 le16toh(cur->wb.upper.vlan));
4695 sendmp->m_flags |= M_VLANTAG;
4696 }
4697#ifndef __NO_STRICT_ALIGNMENT
4698skip:
4699#endif
4700 rxr->fmp = rxr->lmp = NULL;
4701 }
4702next_desc:
4703 /* Sync the ring */
4704 bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
4705 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
4706
4707 /* Zero out the receive descriptors status. */
4708 cur->wb.upper.status_error &= htole32(~0xFF);
4709 ++rxdone; /* cumulative for POLL */
4710 ++processed;
4711
4712 /* Advance our pointers to the next descriptor. */
4713 if (++i == adapter->num_rx_desc)
4714 i = 0;
4715
4716 /* Send to the stack */
4717 if (sendmp != NULL) {
4718 rxr->next_to_check = i;
4719 EM_RX_UNLOCK(rxr);
4720 if_input(ifp, sendmp);
4721 EM_RX_LOCK(rxr);
4722 i = rxr->next_to_check;
4723 }
4724
4725 /* Only refresh mbufs every 8 descriptors */
4726 if (processed == 8) {
4727 em_refresh_mbufs(rxr, i);
4728 processed = 0;
4729 }
4730 }
4731
4732 /* Catch any remaining refresh work */
4733 if (e1000_rx_unrefreshed(rxr))
4734 em_refresh_mbufs(rxr, i);
4735
4736 rxr->next_to_check = i;
4737 if (done != NULL)
4738 *done = rxdone;
4739 EM_RX_UNLOCK(rxr);
4740
4741 return ((status & E1000_RXD_STAT_DD) ? TRUE : FALSE);
4742}
4743
4744static __inline void
4745em_rx_discard(struct rx_ring *rxr, int i)
4746{
4747 struct em_rxbuffer *rbuf;
4748
4749 rbuf = &rxr->rx_buffers[i];
4750 bus_dmamap_unload(rxr->rxtag, rbuf->map);
4751
4752 /* Free any previous pieces */
4753 if (rxr->fmp != NULL) {
4754 rxr->fmp->m_flags |= M_PKTHDR;
4755 m_freem(rxr->fmp);
4756 rxr->fmp = NULL;
4757 rxr->lmp = NULL;
4758 }
4759 /*
4760 ** Free buffer and allow em_refresh_mbufs()
4761 ** to clean up and recharge buffer.
4762 */
4763 if (rbuf->m_head) {
4764 m_free(rbuf->m_head);
4765 rbuf->m_head = NULL;
4766 }
4767 return;
4768}
4769
4770#ifndef __NO_STRICT_ALIGNMENT
4771/*
4772 * When jumbo frames are enabled we should realign entire payload on
4773 * architecures with strict alignment. This is serious design mistake of 8254x
4774 * as it nullifies DMA operations. 8254x just allows RX buffer size to be
4775 * 2048/4096/8192/16384. What we really want is 2048 - ETHER_ALIGN to align its
4776 * payload. On architecures without strict alignment restrictions 8254x still
4777 * performs unaligned memory access which would reduce the performance too.
4778 * To avoid copying over an entire frame to align, we allocate a new mbuf and
4779 * copy ethernet header to the new mbuf. The new mbuf is prepended into the
4780 * existing mbuf chain.
4781 *
4782 * Be aware, best performance of the 8254x is achived only when jumbo frame is
4783 * not used at all on architectures with strict alignment.
4784 */
4785static int
4786em_fixup_rx(struct rx_ring *rxr)
4787{
4788 struct adapter *adapter = rxr->adapter;
4789 struct mbuf *m, *n;
4790 int error;
4791
4792 error = 0;
4793 m = rxr->fmp;
4794 if (m->m_len <= (MCLBYTES - ETHER_HDR_LEN)) {
4795 bcopy(m->m_data, m->m_data + ETHER_HDR_LEN, m->m_len);
4796 m->m_data += ETHER_HDR_LEN;
4797 } else {
4798 MGETHDR(n, M_NOWAIT, MT_DATA);
4799 if (n != NULL) {
4800 bcopy(m->m_data, n->m_data, ETHER_HDR_LEN);
4801 m->m_data += ETHER_HDR_LEN;
4802 m->m_len -= ETHER_HDR_LEN;
4803 n->m_len = ETHER_HDR_LEN;
4804 M_MOVE_PKTHDR(n, m);
4805 n->m_next = m;
4806 rxr->fmp = n;
4807 } else {
4808 adapter->dropped_pkts++;
4809 m_freem(rxr->fmp);
4810 rxr->fmp = NULL;
4811 error = ENOMEM;
4812 }
4813 }
4814
4815 return (error);
4816}
4817#endif
4818
4819static void
4820em_setup_rxdesc(union e1000_rx_desc_extended *rxd, const struct em_rxbuffer *rxbuf)
4821{
4822 rxd->read.buffer_addr = htole64(rxbuf->paddr);
4823 /* DD bits must be cleared */
4824 rxd->wb.upper.status_error= 0;
4825}
4826
4827/*********************************************************************
4828 *
4829 * Verify that the hardware indicated that the checksum is valid.
4830 * Inform the stack about the status of checksum so that stack
4831 * doesn't spend time verifying the checksum.
4832 *
4833 *********************************************************************/
4834static void
4835em_receive_checksum(uint32_t status, struct mbuf *mp)
4836{
4837 mp->m_pkthdr.csum_flags = 0;
4838
4839 /* Ignore Checksum bit is set */
4840 if (status & E1000_RXD_STAT_IXSM)
4841 return;
4842
4843 /* If the IP checksum exists and there is no IP Checksum error */
4844 if ((status & (E1000_RXD_STAT_IPCS | E1000_RXDEXT_STATERR_IPE)) ==
4845 E1000_RXD_STAT_IPCS) {
4846 mp->m_pkthdr.csum_flags = (CSUM_IP_CHECKED | CSUM_IP_VALID);
4847 }
4848
4849 /* TCP or UDP checksum */
4850 if ((status & (E1000_RXD_STAT_TCPCS | E1000_RXDEXT_STATERR_TCPE)) ==
4851 E1000_RXD_STAT_TCPCS) {
4852 mp->m_pkthdr.csum_flags |= (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
4853 mp->m_pkthdr.csum_data = htons(0xffff);
4854 }
4855 if (status & E1000_RXD_STAT_UDPCS) {
4856 mp->m_pkthdr.csum_flags |= (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
4857 mp->m_pkthdr.csum_data = htons(0xffff);
4858 }
4859}
4860
4861/*
4862 * This routine is run via an vlan
4863 * config EVENT
4864 */
4865static void
4866em_register_vlan(void *arg, if_t ifp, u16 vtag)
4867{
4868 struct adapter *adapter = if_getsoftc(ifp);
4869 u32 index, bit;
4870
4871 if ((void*)adapter != arg) /* Not our event */
4872 return;
4873
4874 if ((vtag == 0) || (vtag > 4095)) /* Invalid ID */
4875 return;
4876
4877 EM_CORE_LOCK(adapter);
4878 index = (vtag >> 5) & 0x7F;
4879 bit = vtag & 0x1F;
4880 adapter->shadow_vfta[index] |= (1 << bit);
4881 ++adapter->num_vlans;
4882 /* Re-init to load the changes */
4883 if (if_getcapenable(ifp) & IFCAP_VLAN_HWFILTER)
4884 em_init_locked(adapter);
4885 EM_CORE_UNLOCK(adapter);
4886}
4887
4888/*
4889 * This routine is run via an vlan
4890 * unconfig EVENT
4891 */
4892static void
4893em_unregister_vlan(void *arg, if_t ifp, u16 vtag)
4894{
4895 struct adapter *adapter = if_getsoftc(ifp);
4896 u32 index, bit;
4897
4898 if (adapter != arg)
4899 return;
4900
4901 if ((vtag == 0) || (vtag > 4095)) /* Invalid */
4902 return;
4903
4904 EM_CORE_LOCK(adapter);
4905 index = (vtag >> 5) & 0x7F;
4906 bit = vtag & 0x1F;
4907 adapter->shadow_vfta[index] &= ~(1 << bit);
4908 --adapter->num_vlans;
4909 /* Re-init to load the changes */
4910 if (if_getcapenable(ifp) & IFCAP_VLAN_HWFILTER)
4911 em_init_locked(adapter);
4912 EM_CORE_UNLOCK(adapter);
4913}
4914
4915static void
4916em_setup_vlan_hw_support(struct adapter *adapter)
4917{
4918 struct e1000_hw *hw = &adapter->hw;
4919 u32 reg;
4920
4921 /*
4922 ** We get here thru init_locked, meaning
4923 ** a soft reset, this has already cleared
4924 ** the VFTA and other state, so if there
4925 ** have been no vlan's registered do nothing.
4926 */
4927 if (adapter->num_vlans == 0)
4928 return;
4929
4930 /*
4931 ** A soft reset zero's out the VFTA, so
4932 ** we need to repopulate it now.
4933 */
4934 for (int i = 0; i < EM_VFTA_SIZE; i++)
4935 if (adapter->shadow_vfta[i] != 0)
4936 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA,
4937 i, adapter->shadow_vfta[i]);
4938
4939 reg = E1000_READ_REG(hw, E1000_CTRL);
4940 reg |= E1000_CTRL_VME;
4941 E1000_WRITE_REG(hw, E1000_CTRL, reg);
4942
4943 /* Enable the Filter Table */
4944 reg = E1000_READ_REG(hw, E1000_RCTL);
4945 reg &= ~E1000_RCTL_CFIEN;
4946 reg |= E1000_RCTL_VFE;
4947 E1000_WRITE_REG(hw, E1000_RCTL, reg);
4948}
4949
4950static void
4951em_enable_intr(struct adapter *adapter)
4952{
4953 struct e1000_hw *hw = &adapter->hw;
4954 u32 ims_mask = IMS_ENABLE_MASK;
4955
4956 if (hw->mac.type == e1000_82574) {
4957 E1000_WRITE_REG(hw, EM_EIAC, adapter->ims);
4958 ims_mask |= adapter->ims;
4959 }
4960 E1000_WRITE_REG(hw, E1000_IMS, ims_mask);
4961}
4962
4963static void
4964em_disable_intr(struct adapter *adapter)
4965{
4966 struct e1000_hw *hw = &adapter->hw;
4967
4968 if (hw->mac.type == e1000_82574)
4969 E1000_WRITE_REG(hw, EM_EIAC, 0);
4970 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
4971}
4972
4973/*
4974 * Bit of a misnomer, what this really means is
4975 * to enable OS management of the system... aka
4976 * to disable special hardware management features
4977 */
4978static void
4979em_init_manageability(struct adapter *adapter)
4980{
4981 /* A shared code workaround */
4982#define E1000_82542_MANC2H E1000_MANC2H
4983 if (adapter->has_manage) {
4984 int manc2h = E1000_READ_REG(&adapter->hw, E1000_MANC2H);
4985 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC);
4986
4987 /* disable hardware interception of ARP */
4988 manc &= ~(E1000_MANC_ARP_EN);
4989
4990 /* enable receiving management packets to the host */
4991 manc |= E1000_MANC_EN_MNG2HOST;
4992#define E1000_MNG2HOST_PORT_623 (1 << 5)
4993#define E1000_MNG2HOST_PORT_664 (1 << 6)
4994 manc2h |= E1000_MNG2HOST_PORT_623;
4995 manc2h |= E1000_MNG2HOST_PORT_664;
4996 E1000_WRITE_REG(&adapter->hw, E1000_MANC2H, manc2h);
4997 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc);
4998 }
4999}
5000
5001/*
5002 * Give control back to hardware management
5003 * controller if there is one.
5004 */
5005static void
5006em_release_manageability(struct adapter *adapter)
5007{
5008 if (adapter->has_manage) {
5009 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC);
5010
5011 /* re-enable hardware interception of ARP */
5012 manc |= E1000_MANC_ARP_EN;
5013 manc &= ~E1000_MANC_EN_MNG2HOST;
5014
5015 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc);
5016 }
5017}
5018
5019/*
5020 * em_get_hw_control sets the {CTRL_EXT|FWSM}:DRV_LOAD bit.
5021 * For ASF and Pass Through versions of f/w this means
5022 * that the driver is loaded. For AMT version type f/w
5023 * this means that the network i/f is open.
5024 */
5025static void
5026em_get_hw_control(struct adapter *adapter)
5027{
5028 u32 ctrl_ext, swsm;
5029
5030 if (adapter->hw.mac.type == e1000_82573) {
5031 swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM);
5032 E1000_WRITE_REG(&adapter->hw, E1000_SWSM,
5033 swsm | E1000_SWSM_DRV_LOAD);
5034 return;
5035 }
5036 /* else */
5037 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
5038 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
5039 ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
5040 return;
5041}
5042
5043/*
5044 * em_release_hw_control resets {CTRL_EXT|FWSM}:DRV_LOAD bit.
5045 * For ASF and Pass Through versions of f/w this means that
5046 * the driver is no longer loaded. For AMT versions of the
5047 * f/w this means that the network i/f is closed.
5048 */
5049static void
5050em_release_hw_control(struct adapter *adapter)
5051{
5052 u32 ctrl_ext, swsm;
5053
5054 if (!adapter->has_manage)
5055 return;
5056
5057 if (adapter->hw.mac.type == e1000_82573) {
5058 swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM);
5059 E1000_WRITE_REG(&adapter->hw, E1000_SWSM,
5060 swsm & ~E1000_SWSM_DRV_LOAD);
5061 return;
5062 }
5063 /* else */
5064 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
5065 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
5066 ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD);
5067 return;
5068}
5069
5070static int
5071em_is_valid_ether_addr(u8 *addr)
5072{
5073 char zero_addr[6] = { 0, 0, 0, 0, 0, 0 };
5074
5075 if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN))) {
5076 return (FALSE);
5077 }
5078
5079 return (TRUE);
5080}
5081
5082/*
5083** Parse the interface capabilities with regard
5084** to both system management and wake-on-lan for
5085** later use.
5086*/
5087static void
5088em_get_wakeup(device_t dev)
5089{
5090 struct adapter *adapter = device_get_softc(dev);
5091 u16 eeprom_data = 0, device_id, apme_mask;
5092
5093 adapter->has_manage = e1000_enable_mng_pass_thru(&adapter->hw);
5094 apme_mask = EM_EEPROM_APME;
5095
5096 switch (adapter->hw.mac.type) {
5097 case e1000_82573:
5098 case e1000_82583:
5099 adapter->has_amt = TRUE;
5100 /* Falls thru */
5101 case e1000_82571:
5102 case e1000_82572:
5103 case e1000_80003es2lan:
5104 if (adapter->hw.bus.func == 1) {
5105 e1000_read_nvm(&adapter->hw,
5106 NVM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
5107 break;
5108 } else
5109 e1000_read_nvm(&adapter->hw,
5110 NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
5111 break;
5112 case e1000_ich8lan:
5113 case e1000_ich9lan:
5114 case e1000_ich10lan:
5115 case e1000_pchlan:
5116 case e1000_pch2lan:
5117 apme_mask = E1000_WUC_APME;
5118 adapter->has_amt = TRUE;
5119 eeprom_data = E1000_READ_REG(&adapter->hw, E1000_WUC);
5120 break;
5121 default:
5122 e1000_read_nvm(&adapter->hw,
5123 NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
5124 break;
5125 }
5126 if (eeprom_data & apme_mask)
5127 adapter->wol = (E1000_WUFC_MAG | E1000_WUFC_MC);
5128 /*
5129 * We have the eeprom settings, now apply the special cases
5130 * where the eeprom may be wrong or the board won't support
5131 * wake on lan on a particular port
5132 */
5133 device_id = pci_get_device(dev);
5134 switch (device_id) {
5135 case E1000_DEV_ID_82571EB_FIBER:
5136 /* Wake events only supported on port A for dual fiber
5137 * regardless of eeprom setting */
5138 if (E1000_READ_REG(&adapter->hw, E1000_STATUS) &
5139 E1000_STATUS_FUNC_1)
5140 adapter->wol = 0;
5141 break;
5142 case E1000_DEV_ID_82571EB_QUAD_COPPER:
5143 case E1000_DEV_ID_82571EB_QUAD_FIBER:
5144 case E1000_DEV_ID_82571EB_QUAD_COPPER_LP:
5145 /* if quad port adapter, disable WoL on all but port A */
5146 if (global_quad_port_a != 0)
5147 adapter->wol = 0;
5148 /* Reset for multiple quad port adapters */
5149 if (++global_quad_port_a == 4)
5150 global_quad_port_a = 0;
5151 break;
5152 }
5153 return;
5154}
5155
5156
5157/*
5158 * Enable PCI Wake On Lan capability
5159 */
5160static void
5161em_enable_wakeup(device_t dev)
5162{
5163 struct adapter *adapter = device_get_softc(dev);
5164 if_t ifp = adapter->ifp;
5165 u32 pmc, ctrl, ctrl_ext, rctl;
5166 u16 status;
5167
5168 if ((pci_find_cap(dev, PCIY_PMG, &pmc) != 0))
5169 return;
5170
5171 /* Advertise the wakeup capability */
5172 ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL);
5173 ctrl |= (E1000_CTRL_SWDPIN2 | E1000_CTRL_SWDPIN3);
5174 E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl);
5175 E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
5176
5177 if ((adapter->hw.mac.type == e1000_ich8lan) ||
5178 (adapter->hw.mac.type == e1000_pchlan) ||
5179 (adapter->hw.mac.type == e1000_ich9lan) ||
5180 (adapter->hw.mac.type == e1000_ich10lan))
5181 e1000_suspend_workarounds_ich8lan(&adapter->hw);
5182
5183 /* Keep the laser running on Fiber adapters */
5184 if (adapter->hw.phy.media_type == e1000_media_type_fiber ||
5185 adapter->hw.phy.media_type == e1000_media_type_internal_serdes) {
5186 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
5187 ctrl_ext |= E1000_CTRL_EXT_SDP3_DATA;
5188 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, ctrl_ext);
5189 }
5190
5191 /*
5192 ** Determine type of Wakeup: note that wol
5193 ** is set with all bits on by default.
5194 */
5195 if ((if_getcapenable(ifp) & IFCAP_WOL_MAGIC) == 0)
5196 adapter->wol &= ~E1000_WUFC_MAG;
5197
5198 if ((if_getcapenable(ifp) & IFCAP_WOL_MCAST) == 0)
5199 adapter->wol &= ~E1000_WUFC_MC;
5200 else {
5201 rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
5202 rctl |= E1000_RCTL_MPE;
5203 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, rctl);
5204 }
5205
5206 if ((adapter->hw.mac.type == e1000_pchlan) ||
5207 (adapter->hw.mac.type == e1000_pch2lan)) {
5208 if (em_enable_phy_wakeup(adapter))
5209 return;
5210 } else {
5211 E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
5212 E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol);
5213 }
5214
5215 if (adapter->hw.phy.type == e1000_phy_igp_3)
5216 e1000_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw);
5217
5218 /* Request PME */
5219 status = pci_read_config(dev, pmc + PCIR_POWER_STATUS, 2);
5220 status &= ~(PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE);
5221 if (if_getcapenable(ifp) & IFCAP_WOL)
5222 status |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE;
5223 pci_write_config(dev, pmc + PCIR_POWER_STATUS, status, 2);
5224
5225 return;
5226}
5227
5228/*
5229** WOL in the newer chipset interfaces (pchlan)
5230** require thing to be copied into the phy
5231*/
5232static int
5233em_enable_phy_wakeup(struct adapter *adapter)
5234{
5235 struct e1000_hw *hw = &adapter->hw;
5236 u32 mreg, ret = 0;
5237 u16 preg;
5238
5239 /* copy MAC RARs to PHY RARs */
5240 e1000_copy_rx_addrs_to_phy_ich8lan(hw);
5241
5242 /* copy MAC MTA to PHY MTA */
5243 for (int i = 0; i < adapter->hw.mac.mta_reg_count; i++) {
5244 mreg = E1000_READ_REG_ARRAY(hw, E1000_MTA, i);
5245 e1000_write_phy_reg(hw, BM_MTA(i), (u16)(mreg & 0xFFFF));
5246 e1000_write_phy_reg(hw, BM_MTA(i) + 1,
5247 (u16)((mreg >> 16) & 0xFFFF));
5248 }
5249
5250 /* configure PHY Rx Control register */
5251 e1000_read_phy_reg(&adapter->hw, BM_RCTL, &preg);
5252 mreg = E1000_READ_REG(hw, E1000_RCTL);
5253 if (mreg & E1000_RCTL_UPE)
5254 preg |= BM_RCTL_UPE;
5255 if (mreg & E1000_RCTL_MPE)
5256 preg |= BM_RCTL_MPE;
5257 preg &= ~(BM_RCTL_MO_MASK);
5258 if (mreg & E1000_RCTL_MO_3)
5259 preg |= (((mreg & E1000_RCTL_MO_3) >> E1000_RCTL_MO_SHIFT)
5260 << BM_RCTL_MO_SHIFT);
5261 if (mreg & E1000_RCTL_BAM)
5262 preg |= BM_RCTL_BAM;
5263 if (mreg & E1000_RCTL_PMCF)
5264 preg |= BM_RCTL_PMCF;
5265 mreg = E1000_READ_REG(hw, E1000_CTRL);
5266 if (mreg & E1000_CTRL_RFCE)
5267 preg |= BM_RCTL_RFCE;
5268 e1000_write_phy_reg(&adapter->hw, BM_RCTL, preg);
5269
5270 /* enable PHY wakeup in MAC register */
5271 E1000_WRITE_REG(hw, E1000_WUC,
5272 E1000_WUC_PHY_WAKE | E1000_WUC_PME_EN);
5273 E1000_WRITE_REG(hw, E1000_WUFC, adapter->wol);
5274
5275 /* configure and enable PHY wakeup in PHY registers */
5276 e1000_write_phy_reg(&adapter->hw, BM_WUFC, adapter->wol);
5277 e1000_write_phy_reg(&adapter->hw, BM_WUC, E1000_WUC_PME_EN);
5278
5279 /* activate PHY wakeup */
5280 ret = hw->phy.ops.acquire(hw);
5281 if (ret) {
5282 printf("Could not acquire PHY\n");
5283 return ret;
5284 }
5285 e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
5286 (BM_WUC_ENABLE_PAGE << IGP_PAGE_SHIFT));
5287 ret = e1000_read_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, &preg);
5288 if (ret) {
5289 printf("Could not read PHY page 769\n");
5290 goto out;
5291 }
5292 preg |= BM_WUC_ENABLE_BIT | BM_WUC_HOST_WU_BIT;
5293 ret = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, preg);
5294 if (ret)
5295 printf("Could not set PHY Host Wakeup bit\n");
5296out:
5297 hw->phy.ops.release(hw);
5298
5299 return ret;
5300}
5301
5302static void
5303em_led_func(void *arg, int onoff)
5304{
5305 struct adapter *adapter = arg;
5306
5307 EM_CORE_LOCK(adapter);
5308 if (onoff) {
5309 e1000_setup_led(&adapter->hw);
5310 e1000_led_on(&adapter->hw);
5311 } else {
5312 e1000_led_off(&adapter->hw);
5313 e1000_cleanup_led(&adapter->hw);
5314 }
5315 EM_CORE_UNLOCK(adapter);
5316}
5317
5318/*
5319** Disable the L0S and L1 LINK states
5320*/
5321static void
5322em_disable_aspm(struct adapter *adapter)
5323{
5324 int base, reg;
5325 u16 link_cap,link_ctrl;
5326 device_t dev = adapter->dev;
5327
5328 switch (adapter->hw.mac.type) {
5329 case e1000_82573:
5330 case e1000_82574:
5331 case e1000_82583:
5332 break;
5333 default:
5334 return;
5335 }
5336 if (pci_find_cap(dev, PCIY_EXPRESS, &base) != 0)
5337 return;
5338 reg = base + PCIER_LINK_CAP;
5339 link_cap = pci_read_config(dev, reg, 2);
5340 if ((link_cap & PCIEM_LINK_CAP_ASPM) == 0)
5341 return;
5342 reg = base + PCIER_LINK_CTL;
5343 link_ctrl = pci_read_config(dev, reg, 2);
5344 link_ctrl &= ~PCIEM_LINK_CTL_ASPMC;
5345 pci_write_config(dev, reg, link_ctrl, 2);
5346 return;
5347}
5348
5349/**********************************************************************
5350 *
5351 * Update the board statistics counters.
5352 *
5353 **********************************************************************/
5354static void
5355em_update_stats_counters(struct adapter *adapter)
5356{
5357
5358 if(adapter->hw.phy.media_type == e1000_media_type_copper ||
5359 (E1000_READ_REG(&adapter->hw, E1000_STATUS) & E1000_STATUS_LU)) {
5360 adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, E1000_SYMERRS);
5361 adapter->stats.sec += E1000_READ_REG(&adapter->hw, E1000_SEC);
5362 }
5363 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, E1000_CRCERRS);
5364 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, E1000_MPC);
5365 adapter->stats.scc += E1000_READ_REG(&adapter->hw, E1000_SCC);
5366 adapter->stats.ecol += E1000_READ_REG(&adapter->hw, E1000_ECOL);
5367
5368 adapter->stats.mcc += E1000_READ_REG(&adapter->hw, E1000_MCC);
5369 adapter->stats.latecol += E1000_READ_REG(&adapter->hw, E1000_LATECOL);
5370 adapter->stats.colc += E1000_READ_REG(&adapter->hw, E1000_COLC);
5371 adapter->stats.dc += E1000_READ_REG(&adapter->hw, E1000_DC);
5372 adapter->stats.rlec += E1000_READ_REG(&adapter->hw, E1000_RLEC);
5373 adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, E1000_XONRXC);
5374 adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, E1000_XONTXC);
5375 adapter->stats.xoffrxc += E1000_READ_REG(&adapter->hw, E1000_XOFFRXC);
5376 adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, E1000_XOFFTXC);
5377 adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, E1000_FCRUC);
5378 adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, E1000_PRC64);
5379 adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, E1000_PRC127);
5380 adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, E1000_PRC255);
5381 adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, E1000_PRC511);
5382 adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, E1000_PRC1023);
5383 adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, E1000_PRC1522);
5384 adapter->stats.gprc += E1000_READ_REG(&adapter->hw, E1000_GPRC);
5385 adapter->stats.bprc += E1000_READ_REG(&adapter->hw, E1000_BPRC);
5386 adapter->stats.mprc += E1000_READ_REG(&adapter->hw, E1000_MPRC);
5387 adapter->stats.gptc += E1000_READ_REG(&adapter->hw, E1000_GPTC);
5388
5389 /* For the 64-bit byte counters the low dword must be read first. */
5390 /* Both registers clear on the read of the high dword */
5391
5392 adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCL) +
5393 ((u64)E1000_READ_REG(&adapter->hw, E1000_GORCH) << 32);
5394 adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCL) +
5395 ((u64)E1000_READ_REG(&adapter->hw, E1000_GOTCH) << 32);
5396
5397 adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, E1000_RNBC);
5398 adapter->stats.ruc += E1000_READ_REG(&adapter->hw, E1000_RUC);
5399 adapter->stats.rfc += E1000_READ_REG(&adapter->hw, E1000_RFC);
5400 adapter->stats.roc += E1000_READ_REG(&adapter->hw, E1000_ROC);
5401 adapter->stats.rjc += E1000_READ_REG(&adapter->hw, E1000_RJC);
5402
5403 adapter->stats.tor += E1000_READ_REG(&adapter->hw, E1000_TORH);
5404 adapter->stats.tot += E1000_READ_REG(&adapter->hw, E1000_TOTH);
5405
5406 adapter->stats.tpr += E1000_READ_REG(&adapter->hw, E1000_TPR);
5407 adapter->stats.tpt += E1000_READ_REG(&adapter->hw, E1000_TPT);
5408 adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, E1000_PTC64);
5409 adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, E1000_PTC127);
5410 adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, E1000_PTC255);
5411 adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, E1000_PTC511);
5412 adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, E1000_PTC1023);
5413 adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, E1000_PTC1522);
5414 adapter->stats.mptc += E1000_READ_REG(&adapter->hw, E1000_MPTC);
5415 adapter->stats.bptc += E1000_READ_REG(&adapter->hw, E1000_BPTC);
5416
5417 /* Interrupt Counts */
5418
5419 adapter->stats.iac += E1000_READ_REG(&adapter->hw, E1000_IAC);
5420 adapter->stats.icrxptc += E1000_READ_REG(&adapter->hw, E1000_ICRXPTC);
5421 adapter->stats.icrxatc += E1000_READ_REG(&adapter->hw, E1000_ICRXATC);
5422 adapter->stats.ictxptc += E1000_READ_REG(&adapter->hw, E1000_ICTXPTC);
5423 adapter->stats.ictxatc += E1000_READ_REG(&adapter->hw, E1000_ICTXATC);
5424 adapter->stats.ictxqec += E1000_READ_REG(&adapter->hw, E1000_ICTXQEC);
5425 adapter->stats.ictxqmtc += E1000_READ_REG(&adapter->hw, E1000_ICTXQMTC);
5426 adapter->stats.icrxdmtc += E1000_READ_REG(&adapter->hw, E1000_ICRXDMTC);
5427 adapter->stats.icrxoc += E1000_READ_REG(&adapter->hw, E1000_ICRXOC);
5428
5429 if (adapter->hw.mac.type >= e1000_82543) {
5430 adapter->stats.algnerrc +=
5431 E1000_READ_REG(&adapter->hw, E1000_ALGNERRC);
5432 adapter->stats.rxerrc +=
5433 E1000_READ_REG(&adapter->hw, E1000_RXERRC);
5434 adapter->stats.tncrs +=
5435 E1000_READ_REG(&adapter->hw, E1000_TNCRS);
5436 adapter->stats.cexterr +=
5437 E1000_READ_REG(&adapter->hw, E1000_CEXTERR);
5438 adapter->stats.tsctc +=
5439 E1000_READ_REG(&adapter->hw, E1000_TSCTC);
5440 adapter->stats.tsctfc +=
5441 E1000_READ_REG(&adapter->hw, E1000_TSCTFC);
5442 }
5443}
5444
5445static uint64_t
5446em_get_counter(if_t ifp, ift_counter cnt)
5447{
5448 struct adapter *adapter;
5449
5450 adapter = if_getsoftc(ifp);
5451
5452 switch (cnt) {
5453 case IFCOUNTER_COLLISIONS:
5454 return (adapter->stats.colc);
5455 case IFCOUNTER_IERRORS:
5456 return (adapter->dropped_pkts + adapter->stats.rxerrc +
5457 adapter->stats.crcerrs + adapter->stats.algnerrc +
5458 adapter->stats.ruc + adapter->stats.roc +
5459 adapter->stats.mpc + adapter->stats.cexterr);
5460 case IFCOUNTER_OERRORS:
5461 return (adapter->stats.ecol + adapter->stats.latecol +
5462 adapter->watchdog_events);
5463 default:
5464 return (if_get_counter_default(ifp, cnt));
5465 }
5466}
5467
5468/* Export a single 32-bit register via a read-only sysctl. */
5469static int
5470em_sysctl_reg_handler(SYSCTL_HANDLER_ARGS)
5471{
5472 struct adapter *adapter;
5473 u_int val;
5474
5475 adapter = oidp->oid_arg1;
5476 val = E1000_READ_REG(&adapter->hw, oidp->oid_arg2);
5477 return (sysctl_handle_int(oidp, &val, 0, req));
5478}
5479
5480/*
5481 * Add sysctl variables, one per statistic, to the system.
5482 */
5483static void
5484em_add_hw_stats(struct adapter *adapter)
5485{
5486 device_t dev = adapter->dev;
5487
5488 struct tx_ring *txr = adapter->tx_rings;
5489 struct rx_ring *rxr = adapter->rx_rings;
5490
5491 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(dev);
5492 struct sysctl_oid *tree = device_get_sysctl_tree(dev);
5493 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
5494 struct e1000_hw_stats *stats = &adapter->stats;
5495
5496 struct sysctl_oid *stat_node, *queue_node, *int_node;
5497 struct sysctl_oid_list *stat_list, *queue_list, *int_list;
5498
5499#define QUEUE_NAME_LEN 32
5500 char namebuf[QUEUE_NAME_LEN];
5501
5502 /* Driver Statistics */
5503 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "dropped",
5504 CTLFLAG_RD, &adapter->dropped_pkts,
5505 "Driver dropped packets");
5506 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "link_irq",
5507 CTLFLAG_RD, &adapter->link_irq,
5508 "Link MSIX IRQ Handled");
5509 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "mbuf_defrag_fail",
5510 CTLFLAG_RD, &adapter->mbuf_defrag_failed,
5511 "Defragmenting mbuf chain failed");
5512 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "tx_dma_fail",
5513 CTLFLAG_RD, &adapter->no_tx_dma_setup,
5514 "Driver tx dma failure in xmit");
5515 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "rx_overruns",
5516 CTLFLAG_RD, &adapter->rx_overruns,
5517 "RX overruns");
5518 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "watchdog_timeouts",
5519 CTLFLAG_RD, &adapter->watchdog_events,
5520 "Watchdog timeouts");
5521
5522 SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "device_control",
5523 CTLTYPE_UINT | CTLFLAG_RD, adapter, E1000_CTRL,
5524 em_sysctl_reg_handler, "IU",
5525 "Device Control Register");
5526 SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "rx_control",
5527 CTLTYPE_UINT | CTLFLAG_RD, adapter, E1000_RCTL,
5528 em_sysctl_reg_handler, "IU",
5529 "Receiver Control Register");
5530 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "fc_high_water",
5531 CTLFLAG_RD, &adapter->hw.fc.high_water, 0,
5532 "Flow Control High Watermark");
5533 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "fc_low_water",
5534 CTLFLAG_RD, &adapter->hw.fc.low_water, 0,
5535 "Flow Control Low Watermark");
5536
5537 for (int i = 0; i < adapter->num_queues; i++, txr++, rxr++) {
5538 snprintf(namebuf, QUEUE_NAME_LEN, "queue_tx_%d", i);
5539 queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, namebuf,
5540 CTLFLAG_RD, NULL, "TX Queue Name");
5541 queue_list = SYSCTL_CHILDREN(queue_node);
5542
5543 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "txd_head",
5544 CTLTYPE_UINT | CTLFLAG_RD, adapter,
5545 E1000_TDH(txr->me),
5546 em_sysctl_reg_handler, "IU",
5547 "Transmit Descriptor Head");
5548 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "txd_tail",
5549 CTLTYPE_UINT | CTLFLAG_RD, adapter,
5550 E1000_TDT(txr->me),
5551 em_sysctl_reg_handler, "IU",
5552 "Transmit Descriptor Tail");
5553 SYSCTL_ADD_ULONG(ctx, queue_list, OID_AUTO, "tx_irq",
5554 CTLFLAG_RD, &txr->tx_irq,
5555 "Queue MSI-X Transmit Interrupts");
5556 SYSCTL_ADD_ULONG(ctx, queue_list, OID_AUTO, "no_desc_avail",
5557 CTLFLAG_RD, &txr->no_desc_avail,
5558 "Queue No Descriptor Available");
5559
5560 snprintf(namebuf, QUEUE_NAME_LEN, "queue_rx_%d", i);
5561 queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, namebuf,
5562 CTLFLAG_RD, NULL, "RX Queue Name");
5563 queue_list = SYSCTL_CHILDREN(queue_node);
5564
5565 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "rxd_head",
5566 CTLTYPE_UINT | CTLFLAG_RD, adapter,
5567 E1000_RDH(rxr->me),
5568 em_sysctl_reg_handler, "IU",
5569 "Receive Descriptor Head");
5570 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "rxd_tail",
5571 CTLTYPE_UINT | CTLFLAG_RD, adapter,
5572 E1000_RDT(rxr->me),
5573 em_sysctl_reg_handler, "IU",
5574 "Receive Descriptor Tail");
5575 SYSCTL_ADD_ULONG(ctx, queue_list, OID_AUTO, "rx_irq",
5576 CTLFLAG_RD, &rxr->rx_irq,
5577 "Queue MSI-X Receive Interrupts");
5578 }
5579
5580 /* MAC stats get their own sub node */
5581
5582 stat_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "mac_stats",
5583 CTLFLAG_RD, NULL, "Statistics");
5584 stat_list = SYSCTL_CHILDREN(stat_node);
5585
5586 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "excess_coll",
5587 CTLFLAG_RD, &stats->ecol,
5588 "Excessive collisions");
5589 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "single_coll",
5590 CTLFLAG_RD, &stats->scc,
5591 "Single collisions");
5592 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "multiple_coll",
5593 CTLFLAG_RD, &stats->mcc,
5594 "Multiple collisions");
5595 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "late_coll",
5596 CTLFLAG_RD, &stats->latecol,
5597 "Late collisions");
5598 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "collision_count",
5599 CTLFLAG_RD, &stats->colc,
5600 "Collision Count");
5601 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "symbol_errors",
5602 CTLFLAG_RD, &adapter->stats.symerrs,
5603 "Symbol Errors");
5604 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "sequence_errors",
5605 CTLFLAG_RD, &adapter->stats.sec,
5606 "Sequence Errors");
5607 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "defer_count",
5608 CTLFLAG_RD, &adapter->stats.dc,
5609 "Defer Count");
5610 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "missed_packets",
5611 CTLFLAG_RD, &adapter->stats.mpc,
5612 "Missed Packets");
5613 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_no_buff",
5614 CTLFLAG_RD, &adapter->stats.rnbc,
5615 "Receive No Buffers");
5616 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_undersize",
5617 CTLFLAG_RD, &adapter->stats.ruc,
5618 "Receive Undersize");
5619 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_fragmented",
5620 CTLFLAG_RD, &adapter->stats.rfc,
5621 "Fragmented Packets Received ");
5622 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_oversize",
5623 CTLFLAG_RD, &adapter->stats.roc,
5624 "Oversized Packets Received");
5625 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_jabber",
5626 CTLFLAG_RD, &adapter->stats.rjc,
5627 "Recevied Jabber");
5628 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_errs",
5629 CTLFLAG_RD, &adapter->stats.rxerrc,
5630 "Receive Errors");
5631 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "crc_errs",
5632 CTLFLAG_RD, &adapter->stats.crcerrs,
5633 "CRC errors");
5634 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "alignment_errs",
5635 CTLFLAG_RD, &adapter->stats.algnerrc,
5636 "Alignment Errors");
5637 /* On 82575 these are collision counts */
5638 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "coll_ext_errs",
5639 CTLFLAG_RD, &adapter->stats.cexterr,
5640 "Collision/Carrier extension errors");
5641 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xon_recvd",
5642 CTLFLAG_RD, &adapter->stats.xonrxc,
5643 "XON Received");
5644 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xon_txd",
5645 CTLFLAG_RD, &adapter->stats.xontxc,
5646 "XON Transmitted");
5647 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xoff_recvd",
5648 CTLFLAG_RD, &adapter->stats.xoffrxc,
5649 "XOFF Received");
5650 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xoff_txd",
5651 CTLFLAG_RD, &adapter->stats.xofftxc,
5652 "XOFF Transmitted");
5653
5654 /* Packet Reception Stats */
5655 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "total_pkts_recvd",
5656 CTLFLAG_RD, &adapter->stats.tpr,
5657 "Total Packets Received ");
5658 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_pkts_recvd",
5659 CTLFLAG_RD, &adapter->stats.gprc,
5660 "Good Packets Received");
5661 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "bcast_pkts_recvd",
5662 CTLFLAG_RD, &adapter->stats.bprc,
5663 "Broadcast Packets Received");
5664 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mcast_pkts_recvd",
5665 CTLFLAG_RD, &adapter->stats.mprc,
5666 "Multicast Packets Received");
5667 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_64",
5668 CTLFLAG_RD, &adapter->stats.prc64,
5669 "64 byte frames received ");
5670 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_65_127",
5671 CTLFLAG_RD, &adapter->stats.prc127,
5672 "65-127 byte frames received");
5673 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_128_255",
5674 CTLFLAG_RD, &adapter->stats.prc255,
5675 "128-255 byte frames received");
5676 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_256_511",
5677 CTLFLAG_RD, &adapter->stats.prc511,
5678 "256-511 byte frames received");
5679 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_512_1023",
5680 CTLFLAG_RD, &adapter->stats.prc1023,
5681 "512-1023 byte frames received");
5682 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_1024_1522",
5683 CTLFLAG_RD, &adapter->stats.prc1522,
5684 "1023-1522 byte frames received");
5685 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_octets_recvd",
5686 CTLFLAG_RD, &adapter->stats.gorc,
5687 "Good Octets Received");
5688
5689 /* Packet Transmission Stats */
5690 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_octets_txd",
5691 CTLFLAG_RD, &adapter->stats.gotc,
5692 "Good Octets Transmitted");
5693 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "total_pkts_txd",
5694 CTLFLAG_RD, &adapter->stats.tpt,
5695 "Total Packets Transmitted");
5696 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_pkts_txd",
5697 CTLFLAG_RD, &adapter->stats.gptc,
5698 "Good Packets Transmitted");
5699 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "bcast_pkts_txd",
5700 CTLFLAG_RD, &adapter->stats.bptc,
5701 "Broadcast Packets Transmitted");
5702 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mcast_pkts_txd",
5703 CTLFLAG_RD, &adapter->stats.mptc,
5704 "Multicast Packets Transmitted");
5705 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_64",
5706 CTLFLAG_RD, &adapter->stats.ptc64,
5707 "64 byte frames transmitted ");
5708 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_65_127",
5709 CTLFLAG_RD, &adapter->stats.ptc127,
5710 "65-127 byte frames transmitted");
5711 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_128_255",
5712 CTLFLAG_RD, &adapter->stats.ptc255,
5713 "128-255 byte frames transmitted");
5714 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_256_511",
5715 CTLFLAG_RD, &adapter->stats.ptc511,
5716 "256-511 byte frames transmitted");
5717 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_512_1023",
5718 CTLFLAG_RD, &adapter->stats.ptc1023,
5719 "512-1023 byte frames transmitted");
5720 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_1024_1522",
5721 CTLFLAG_RD, &adapter->stats.ptc1522,
5722 "1024-1522 byte frames transmitted");
5723 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tso_txd",
5724 CTLFLAG_RD, &adapter->stats.tsctc,
5725 "TSO Contexts Transmitted");
5726 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tso_ctx_fail",
5727 CTLFLAG_RD, &adapter->stats.tsctfc,
5728 "TSO Contexts Failed");
5729
5730
5731 /* Interrupt Stats */
5732
5733 int_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "interrupts",
5734 CTLFLAG_RD, NULL, "Interrupt Statistics");
5735 int_list = SYSCTL_CHILDREN(int_node);
5736
5737 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "asserts",
5738 CTLFLAG_RD, &adapter->stats.iac,
5739 "Interrupt Assertion Count");
5740
5741 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_pkt_timer",
5742 CTLFLAG_RD, &adapter->stats.icrxptc,
5743 "Interrupt Cause Rx Pkt Timer Expire Count");
5744
5745 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_abs_timer",
5746 CTLFLAG_RD, &adapter->stats.icrxatc,
5747 "Interrupt Cause Rx Abs Timer Expire Count");
5748
5749 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_pkt_timer",
5750 CTLFLAG_RD, &adapter->stats.ictxptc,
5751 "Interrupt Cause Tx Pkt Timer Expire Count");
5752
5753 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_abs_timer",
5754 CTLFLAG_RD, &adapter->stats.ictxatc,
5755 "Interrupt Cause Tx Abs Timer Expire Count");
5756
5757 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_queue_empty",
5758 CTLFLAG_RD, &adapter->stats.ictxqec,
5759 "Interrupt Cause Tx Queue Empty Count");
5760
5761 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_queue_min_thresh",
5762 CTLFLAG_RD, &adapter->stats.ictxqmtc,
5763 "Interrupt Cause Tx Queue Min Thresh Count");
5764
5765 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_desc_min_thresh",
5766 CTLFLAG_RD, &adapter->stats.icrxdmtc,
5767 "Interrupt Cause Rx Desc Min Thresh Count");
5768
5769 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_overrun",
5770 CTLFLAG_RD, &adapter->stats.icrxoc,
5771 "Interrupt Cause Receiver Overrun Count");
5772}
5773
5774/**********************************************************************
5775 *
5776 * This routine provides a way to dump out the adapter eeprom,
5777 * often a useful debug/service tool. This only dumps the first
5778 * 32 words, stuff that matters is in that extent.
5779 *
5780 **********************************************************************/
5781static int
5782em_sysctl_nvm_info(SYSCTL_HANDLER_ARGS)
5783{
5784 struct adapter *adapter = (struct adapter *)arg1;
5785 int error;
5786 int result;
5787
5788 result = -1;
5789 error = sysctl_handle_int(oidp, &result, 0, req);
5790
5791 if (error || !req->newptr)
5792 return (error);
5793
5794 /*
5795 * This value will cause a hex dump of the
5796 * first 32 16-bit words of the EEPROM to
5797 * the screen.
5798 */
5799 if (result == 1)
5800 em_print_nvm_info(adapter);
5801
5802 return (error);
5803}
5804
5805static void
5806em_print_nvm_info(struct adapter *adapter)
5807{
5808 u16 eeprom_data;
5809 int i, j, row = 0;
5810
5811 /* Its a bit crude, but it gets the job done */
5812 printf("\nInterface EEPROM Dump:\n");
5813 printf("Offset\n0x0000 ");
5814 for (i = 0, j = 0; i < 32; i++, j++) {
5815 if (j == 8) { /* Make the offset block */
5816 j = 0; ++row;
5817 printf("\n0x00%x0 ",row);
5818 }
5819 e1000_read_nvm(&adapter->hw, i, 1, &eeprom_data);
5820 printf("%04x ", eeprom_data);
5821 }
5822 printf("\n");
5823}
5824
5825static int
5826em_sysctl_int_delay(SYSCTL_HANDLER_ARGS)
5827{
5828 struct em_int_delay_info *info;
5829 struct adapter *adapter;
5830 u32 regval;
5831 int error, usecs, ticks;
5832
5833 info = (struct em_int_delay_info *)arg1;
5834 usecs = info->value;
5835 error = sysctl_handle_int(oidp, &usecs, 0, req);
5836 if (error != 0 || req->newptr == NULL)
5837 return (error);
5838 if (usecs < 0 || usecs > EM_TICKS_TO_USECS(65535))
5839 return (EINVAL);
5840 info->value = usecs;
5841 ticks = EM_USECS_TO_TICKS(usecs);
5842 if (info->offset == E1000_ITR) /* units are 256ns here */
5843 ticks *= 4;
5844
5845 adapter = info->adapter;
5846
5847 EM_CORE_LOCK(adapter);
5848 regval = E1000_READ_OFFSET(&adapter->hw, info->offset);
5849 regval = (regval & ~0xffff) | (ticks & 0xffff);
5850 /* Handle a few special cases. */
5851 switch (info->offset) {
5852 case E1000_RDTR:
5853 break;
5854 case E1000_TIDV:
5855 if (ticks == 0) {
5856 adapter->txd_cmd &= ~E1000_TXD_CMD_IDE;
5857 /* Don't write 0 into the TIDV register. */
5858 regval++;
5859 } else
5860 adapter->txd_cmd |= E1000_TXD_CMD_IDE;
5861 break;
5862 }
5863 E1000_WRITE_OFFSET(&adapter->hw, info->offset, regval);
5864 EM_CORE_UNLOCK(adapter);
5865 return (0);
5866}
5867
5868static void
5869em_add_int_delay_sysctl(struct adapter *adapter, const char *name,
5870 const char *description, struct em_int_delay_info *info,
5871 int offset, int value)
5872{
5873 info->adapter = adapter;
5874 info->offset = offset;
5875 info->value = value;
5876 SYSCTL_ADD_PROC(device_get_sysctl_ctx(adapter->dev),
5877 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
5878 OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW,
5879 info, 0, em_sysctl_int_delay, "I", description);
5880}
5881
5882static void
5883em_set_sysctl_value(struct adapter *adapter, const char *name,
5884 const char *description, int *limit, int value)
5885{
5886 *limit = value;
5887 SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev),
5888 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
5889 OID_AUTO, name, CTLFLAG_RW, limit, value, description);
5890}
5891
5892
5893/*
5894** Set flow control using sysctl:
5895** Flow control values:
5896** 0 - off
5897** 1 - rx pause
5898** 2 - tx pause
5899** 3 - full
5900*/
5901static int
5902em_set_flowcntl(SYSCTL_HANDLER_ARGS)
5903{
5904 int error;
5905 static int input = 3; /* default is full */
5906 struct adapter *adapter = (struct adapter *) arg1;
5907
5908 error = sysctl_handle_int(oidp, &input, 0, req);
5909
5910 if ((error) || (req->newptr == NULL))
5911 return (error);
5912
5913 if (input == adapter->fc) /* no change? */
5914 return (error);
5915
5916 switch (input) {
5917 case e1000_fc_rx_pause:
5918 case e1000_fc_tx_pause:
5919 case e1000_fc_full:
5920 case e1000_fc_none:
5921 adapter->hw.fc.requested_mode = input;
5922 adapter->fc = input;
5923 break;
5924 default:
5925 /* Do nothing */
5926 return (error);
5927 }
5928
5929 adapter->hw.fc.current_mode = adapter->hw.fc.requested_mode;
5930 e1000_force_mac_fc(&adapter->hw);
5931 return (error);
5932}
5933
5934/*
5935** Manage Energy Efficient Ethernet:
5936** Control values:
5937** 0/1 - enabled/disabled
5938*/
5939static int
5940em_sysctl_eee(SYSCTL_HANDLER_ARGS)
5941{
5942 struct adapter *adapter = (struct adapter *) arg1;
5943 int error, value;
5944
5945 value = adapter->hw.dev_spec.ich8lan.eee_disable;
5946 error = sysctl_handle_int(oidp, &value, 0, req);
5947 if (error || req->newptr == NULL)
5948 return (error);
5949 EM_CORE_LOCK(adapter);
5950 adapter->hw.dev_spec.ich8lan.eee_disable = (value != 0);
5951 em_init_locked(adapter);
5952 EM_CORE_UNLOCK(adapter);
5953 return (0);
5954}
5955
5956static int
5957em_sysctl_debug_info(SYSCTL_HANDLER_ARGS)
5958{
5959 struct adapter *adapter;
5960 int error;
5961 int result;
5962
5963 result = -1;
5964 error = sysctl_handle_int(oidp, &result, 0, req);
5965
5966 if (error || !req->newptr)
5967 return (error);
5968
5969 if (result == 1) {
5970 adapter = (struct adapter *)arg1;
5971 em_print_debug_info(adapter);
5972 }
5973
5974 return (error);
5975}
5976
5977/*
5978** This routine is meant to be fluid, add whatever is
5979** needed for debugging a problem. -jfv
5980*/
5981static void
5982em_print_debug_info(struct adapter *adapter)
5983{
5984 device_t dev = adapter->dev;
5985 struct tx_ring *txr = adapter->tx_rings;
5986 struct rx_ring *rxr = adapter->rx_rings;
5987
5988 if (if_getdrvflags(adapter->ifp) & IFF_DRV_RUNNING)
5989 printf("Interface is RUNNING ");
5990 else
5991 printf("Interface is NOT RUNNING\n");
5992
5993 if (if_getdrvflags(adapter->ifp) & IFF_DRV_OACTIVE)
5994 printf("and INACTIVE\n");
5995 else
5996 printf("and ACTIVE\n");
5997
5998 for (int i = 0; i < adapter->num_queues; i++, txr++, rxr++) {
5999 device_printf(dev, "TX Queue %d ------\n", i);
6000 device_printf(dev, "hw tdh = %d, hw tdt = %d\n",
6001 E1000_READ_REG(&adapter->hw, E1000_TDH(i)),
6002 E1000_READ_REG(&adapter->hw, E1000_TDT(i)));
6003 device_printf(dev, "Tx Queue Status = %d\n", txr->busy);
6004 device_printf(dev, "TX descriptors avail = %d\n",
6005 txr->tx_avail);
6006 device_printf(dev, "Tx Descriptors avail failure = %ld\n",
6007 txr->no_desc_avail);
6008 device_printf(dev, "RX Queue %d ------\n", i);
6009 device_printf(dev, "hw rdh = %d, hw rdt = %d\n",
6010 E1000_READ_REG(&adapter->hw, E1000_RDH(i)),
6011 E1000_READ_REG(&adapter->hw, E1000_RDT(i)));
6012 device_printf(dev, "RX discarded packets = %ld\n",
6013 rxr->rx_discarded);
6014 device_printf(dev, "RX Next to Check = %d\n", rxr->next_to_check);
6015 device_printf(dev, "RX Next to Refresh = %d\n", rxr->next_to_refresh);
6016 }
6017}
6018
6019#ifdef EM_MULTIQUEUE
6020/*
6021 * 82574 only:
6022 * Write a new value to the EEPROM increasing the number of MSIX
6023 * vectors from 3 to 5, for proper multiqueue support.
6024 */
6025static void
6026em_enable_vectors_82574(struct adapter *adapter)
6027{
6028 struct e1000_hw *hw = &adapter->hw;
6029 device_t dev = adapter->dev;
6030 u16 edata;
6031
6032 e1000_read_nvm(hw, EM_NVM_PCIE_CTRL, 1, &edata);
6033 printf("Current cap: %#06x\n", edata);
6034 if (((edata & EM_NVM_MSIX_N_MASK) >> EM_NVM_MSIX_N_SHIFT) != 4) {
6035 device_printf(dev, "Writing to eeprom: increasing "
6036 "reported MSIX vectors from 3 to 5...\n");
6037 edata &= ~(EM_NVM_MSIX_N_MASK);
6038 edata |= 4 << EM_NVM_MSIX_N_SHIFT;
6039 e1000_write_nvm(hw, EM_NVM_PCIE_CTRL, 1, &edata);
6040 e1000_update_nvm_checksum(hw);
6041 device_printf(dev, "Writing to eeprom: done\n");
6042 }
6043}
6044#endif
6045
6046#ifdef DDB
6047DB_COMMAND(em_reset_dev, em_ddb_reset_dev)
6048{
6049 devclass_t dc;
6050 int max_em;
6051
6052 dc = devclass_find("em");
6053 max_em = devclass_get_maxunit(dc);
6054
6055 for (int index = 0; index < (max_em - 1); index++) {
6056 device_t dev;
6057 dev = devclass_get_device(dc, index);
6058 if (device_get_driver(dev) == &em_driver) {
6059 struct adapter *adapter = device_get_softc(dev);
6060 EM_CORE_LOCK(adapter);
6061 em_init_locked(adapter);
6062 EM_CORE_UNLOCK(adapter);
6063 }
6064 }
6065}
6066DB_COMMAND(em_dump_queue, em_ddb_dump_queue)
6067{
6068 devclass_t dc;
6069 int max_em;
6070
6071 dc = devclass_find("em");
6072 max_em = devclass_get_maxunit(dc);
6073
6074 for (int index = 0; index < (max_em - 1); index++) {
6075 device_t dev;
6076 dev = devclass_get_device(dc, index);
6077 if (device_get_driver(dev) == &em_driver)
6078 em_print_debug_info(device_get_softc(dev));
6079 }
6080
6081}
6082#endif
3761}
3762
3763
3764/*********************************************************************
3765 *
3766 * Free all transmit rings.
3767 *
3768 **********************************************************************/
3769static void
3770em_free_transmit_structures(struct adapter *adapter)
3771{
3772 struct tx_ring *txr = adapter->tx_rings;
3773
3774 for (int i = 0; i < adapter->num_queues; i++, txr++) {
3775 EM_TX_LOCK(txr);
3776 em_free_transmit_buffers(txr);
3777 em_dma_free(adapter, &txr->txdma);
3778 EM_TX_UNLOCK(txr);
3779 EM_TX_LOCK_DESTROY(txr);
3780 }
3781
3782 free(adapter->tx_rings, M_DEVBUF);
3783}
3784
3785/*********************************************************************
3786 *
3787 * Free transmit ring related data structures.
3788 *
3789 **********************************************************************/
3790static void
3791em_free_transmit_buffers(struct tx_ring *txr)
3792{
3793 struct adapter *adapter = txr->adapter;
3794 struct em_txbuffer *txbuf;
3795
3796 INIT_DEBUGOUT("free_transmit_ring: begin");
3797
3798 if (txr->tx_buffers == NULL)
3799 return;
3800
3801 for (int i = 0; i < adapter->num_tx_desc; i++) {
3802 txbuf = &txr->tx_buffers[i];
3803 if (txbuf->m_head != NULL) {
3804 bus_dmamap_sync(txr->txtag, txbuf->map,
3805 BUS_DMASYNC_POSTWRITE);
3806 bus_dmamap_unload(txr->txtag,
3807 txbuf->map);
3808 m_freem(txbuf->m_head);
3809 txbuf->m_head = NULL;
3810 if (txbuf->map != NULL) {
3811 bus_dmamap_destroy(txr->txtag,
3812 txbuf->map);
3813 txbuf->map = NULL;
3814 }
3815 } else if (txbuf->map != NULL) {
3816 bus_dmamap_unload(txr->txtag,
3817 txbuf->map);
3818 bus_dmamap_destroy(txr->txtag,
3819 txbuf->map);
3820 txbuf->map = NULL;
3821 }
3822 }
3823#if __FreeBSD_version >= 800000
3824 if (txr->br != NULL)
3825 buf_ring_free(txr->br, M_DEVBUF);
3826#endif
3827 if (txr->tx_buffers != NULL) {
3828 free(txr->tx_buffers, M_DEVBUF);
3829 txr->tx_buffers = NULL;
3830 }
3831 if (txr->txtag != NULL) {
3832 bus_dma_tag_destroy(txr->txtag);
3833 txr->txtag = NULL;
3834 }
3835 return;
3836}
3837
3838
3839/*********************************************************************
3840 * The offload context is protocol specific (TCP/UDP) and thus
3841 * only needs to be set when the protocol changes. The occasion
3842 * of a context change can be a performance detriment, and
3843 * might be better just disabled. The reason arises in the way
3844 * in which the controller supports pipelined requests from the
3845 * Tx data DMA. Up to four requests can be pipelined, and they may
3846 * belong to the same packet or to multiple packets. However all
3847 * requests for one packet are issued before a request is issued
3848 * for a subsequent packet and if a request for the next packet
3849 * requires a context change, that request will be stalled
3850 * until the previous request completes. This means setting up
3851 * a new context effectively disables pipelined Tx data DMA which
3852 * in turn greatly slow down performance to send small sized
3853 * frames.
3854 **********************************************************************/
3855static void
3856em_transmit_checksum_setup(struct tx_ring *txr, struct mbuf *mp, int ip_off,
3857 struct ip *ip, u32 *txd_upper, u32 *txd_lower)
3858{
3859 struct adapter *adapter = txr->adapter;
3860 struct e1000_context_desc *TXD = NULL;
3861 struct em_txbuffer *tx_buffer;
3862 int cur, hdr_len;
3863 u32 cmd = 0;
3864 u16 offload = 0;
3865 u8 ipcso, ipcss, tucso, tucss;
3866
3867 ipcss = ipcso = tucss = tucso = 0;
3868 hdr_len = ip_off + (ip->ip_hl << 2);
3869 cur = txr->next_avail_desc;
3870
3871 /* Setup of IP header checksum. */
3872 if (mp->m_pkthdr.csum_flags & CSUM_IP) {
3873 *txd_upper |= E1000_TXD_POPTS_IXSM << 8;
3874 offload |= CSUM_IP;
3875 ipcss = ip_off;
3876 ipcso = ip_off + offsetof(struct ip, ip_sum);
3877 /*
3878 * Start offset for header checksum calculation.
3879 * End offset for header checksum calculation.
3880 * Offset of place to put the checksum.
3881 */
3882 TXD = (struct e1000_context_desc *)&txr->tx_base[cur];
3883 TXD->lower_setup.ip_fields.ipcss = ipcss;
3884 TXD->lower_setup.ip_fields.ipcse = htole16(hdr_len);
3885 TXD->lower_setup.ip_fields.ipcso = ipcso;
3886 cmd |= E1000_TXD_CMD_IP;
3887 }
3888
3889 if (mp->m_pkthdr.csum_flags & CSUM_TCP) {
3890 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
3891 *txd_upper |= E1000_TXD_POPTS_TXSM << 8;
3892 offload |= CSUM_TCP;
3893 tucss = hdr_len;
3894 tucso = hdr_len + offsetof(struct tcphdr, th_sum);
3895 /*
3896 * The 82574L can only remember the *last* context used
3897 * regardless of queue that it was use for. We cannot reuse
3898 * contexts on this hardware platform and must generate a new
3899 * context every time. 82574L hardware spec, section 7.2.6,
3900 * second note.
3901 */
3902 if (adapter->num_queues < 2) {
3903 /*
3904 * Setting up new checksum offload context for every
3905 * frames takes a lot of processing time for hardware.
3906 * This also reduces performance a lot for small sized
3907 * frames so avoid it if driver can use previously
3908 * configured checksum offload context.
3909 */
3910 if (txr->last_hw_offload == offload) {
3911 if (offload & CSUM_IP) {
3912 if (txr->last_hw_ipcss == ipcss &&
3913 txr->last_hw_ipcso == ipcso &&
3914 txr->last_hw_tucss == tucss &&
3915 txr->last_hw_tucso == tucso)
3916 return;
3917 } else {
3918 if (txr->last_hw_tucss == tucss &&
3919 txr->last_hw_tucso == tucso)
3920 return;
3921 }
3922 }
3923 txr->last_hw_offload = offload;
3924 txr->last_hw_tucss = tucss;
3925 txr->last_hw_tucso = tucso;
3926 }
3927 /*
3928 * Start offset for payload checksum calculation.
3929 * End offset for payload checksum calculation.
3930 * Offset of place to put the checksum.
3931 */
3932 TXD = (struct e1000_context_desc *)&txr->tx_base[cur];
3933 TXD->upper_setup.tcp_fields.tucss = hdr_len;
3934 TXD->upper_setup.tcp_fields.tucse = htole16(0);
3935 TXD->upper_setup.tcp_fields.tucso = tucso;
3936 cmd |= E1000_TXD_CMD_TCP;
3937 } else if (mp->m_pkthdr.csum_flags & CSUM_UDP) {
3938 *txd_lower = E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
3939 *txd_upper |= E1000_TXD_POPTS_TXSM << 8;
3940 tucss = hdr_len;
3941 tucso = hdr_len + offsetof(struct udphdr, uh_sum);
3942 /*
3943 * The 82574L can only remember the *last* context used
3944 * regardless of queue that it was use for. We cannot reuse
3945 * contexts on this hardware platform and must generate a new
3946 * context every time. 82574L hardware spec, section 7.2.6,
3947 * second note.
3948 */
3949 if (adapter->num_queues < 2) {
3950 /*
3951 * Setting up new checksum offload context for every
3952 * frames takes a lot of processing time for hardware.
3953 * This also reduces performance a lot for small sized
3954 * frames so avoid it if driver can use previously
3955 * configured checksum offload context.
3956 */
3957 if (txr->last_hw_offload == offload) {
3958 if (offload & CSUM_IP) {
3959 if (txr->last_hw_ipcss == ipcss &&
3960 txr->last_hw_ipcso == ipcso &&
3961 txr->last_hw_tucss == tucss &&
3962 txr->last_hw_tucso == tucso)
3963 return;
3964 } else {
3965 if (txr->last_hw_tucss == tucss &&
3966 txr->last_hw_tucso == tucso)
3967 return;
3968 }
3969 }
3970 txr->last_hw_offload = offload;
3971 txr->last_hw_tucss = tucss;
3972 txr->last_hw_tucso = tucso;
3973 }
3974 /*
3975 * Start offset for header checksum calculation.
3976 * End offset for header checksum calculation.
3977 * Offset of place to put the checksum.
3978 */
3979 TXD = (struct e1000_context_desc *)&txr->tx_base[cur];
3980 TXD->upper_setup.tcp_fields.tucss = tucss;
3981 TXD->upper_setup.tcp_fields.tucse = htole16(0);
3982 TXD->upper_setup.tcp_fields.tucso = tucso;
3983 }
3984
3985 if (offload & CSUM_IP) {
3986 txr->last_hw_ipcss = ipcss;
3987 txr->last_hw_ipcso = ipcso;
3988 }
3989
3990 TXD->tcp_seg_setup.data = htole32(0);
3991 TXD->cmd_and_length =
3992 htole32(adapter->txd_cmd | E1000_TXD_CMD_DEXT | cmd);
3993 tx_buffer = &txr->tx_buffers[cur];
3994 tx_buffer->m_head = NULL;
3995 tx_buffer->next_eop = -1;
3996
3997 if (++cur == adapter->num_tx_desc)
3998 cur = 0;
3999
4000 txr->tx_avail--;
4001 txr->next_avail_desc = cur;
4002}
4003
4004
4005/**********************************************************************
4006 *
4007 * Setup work for hardware segmentation offload (TSO)
4008 *
4009 **********************************************************************/
4010static void
4011em_tso_setup(struct tx_ring *txr, struct mbuf *mp, int ip_off,
4012 struct ip *ip, struct tcphdr *tp, u32 *txd_upper, u32 *txd_lower)
4013{
4014 struct adapter *adapter = txr->adapter;
4015 struct e1000_context_desc *TXD;
4016 struct em_txbuffer *tx_buffer;
4017 int cur, hdr_len;
4018
4019 /*
4020 * In theory we can use the same TSO context if and only if
4021 * frame is the same type(IP/TCP) and the same MSS. However
4022 * checking whether a frame has the same IP/TCP structure is
4023 * hard thing so just ignore that and always restablish a
4024 * new TSO context.
4025 */
4026 hdr_len = ip_off + (ip->ip_hl << 2) + (tp->th_off << 2);
4027 *txd_lower = (E1000_TXD_CMD_DEXT | /* Extended descr type */
4028 E1000_TXD_DTYP_D | /* Data descr type */
4029 E1000_TXD_CMD_TSE); /* Do TSE on this packet */
4030
4031 /* IP and/or TCP header checksum calculation and insertion. */
4032 *txd_upper = (E1000_TXD_POPTS_IXSM | E1000_TXD_POPTS_TXSM) << 8;
4033
4034 cur = txr->next_avail_desc;
4035 tx_buffer = &txr->tx_buffers[cur];
4036 TXD = (struct e1000_context_desc *) &txr->tx_base[cur];
4037
4038 /*
4039 * Start offset for header checksum calculation.
4040 * End offset for header checksum calculation.
4041 * Offset of place put the checksum.
4042 */
4043 TXD->lower_setup.ip_fields.ipcss = ip_off;
4044 TXD->lower_setup.ip_fields.ipcse =
4045 htole16(ip_off + (ip->ip_hl << 2) - 1);
4046 TXD->lower_setup.ip_fields.ipcso = ip_off + offsetof(struct ip, ip_sum);
4047 /*
4048 * Start offset for payload checksum calculation.
4049 * End offset for payload checksum calculation.
4050 * Offset of place to put the checksum.
4051 */
4052 TXD->upper_setup.tcp_fields.tucss = ip_off + (ip->ip_hl << 2);
4053 TXD->upper_setup.tcp_fields.tucse = 0;
4054 TXD->upper_setup.tcp_fields.tucso =
4055 ip_off + (ip->ip_hl << 2) + offsetof(struct tcphdr, th_sum);
4056 /*
4057 * Payload size per packet w/o any headers.
4058 * Length of all headers up to payload.
4059 */
4060 TXD->tcp_seg_setup.fields.mss = htole16(mp->m_pkthdr.tso_segsz);
4061 TXD->tcp_seg_setup.fields.hdr_len = hdr_len;
4062
4063 TXD->cmd_and_length = htole32(adapter->txd_cmd |
4064 E1000_TXD_CMD_DEXT | /* Extended descr */
4065 E1000_TXD_CMD_TSE | /* TSE context */
4066 E1000_TXD_CMD_IP | /* Do IP csum */
4067 E1000_TXD_CMD_TCP | /* Do TCP checksum */
4068 (mp->m_pkthdr.len - (hdr_len))); /* Total len */
4069
4070 tx_buffer->m_head = NULL;
4071 tx_buffer->next_eop = -1;
4072
4073 if (++cur == adapter->num_tx_desc)
4074 cur = 0;
4075
4076 txr->tx_avail--;
4077 txr->next_avail_desc = cur;
4078 txr->tx_tso = TRUE;
4079}
4080
4081
4082/**********************************************************************
4083 *
4084 * Examine each tx_buffer in the used queue. If the hardware is done
4085 * processing the packet then free associated resources. The
4086 * tx_buffer is put back on the free queue.
4087 *
4088 **********************************************************************/
4089static void
4090em_txeof(struct tx_ring *txr)
4091{
4092 struct adapter *adapter = txr->adapter;
4093 int first, last, done, processed;
4094 struct em_txbuffer *tx_buffer;
4095 struct e1000_tx_desc *tx_desc, *eop_desc;
4096 if_t ifp = adapter->ifp;
4097
4098 EM_TX_LOCK_ASSERT(txr);
4099#ifdef DEV_NETMAP
4100 if (netmap_tx_irq(ifp, txr->me))
4101 return;
4102#endif /* DEV_NETMAP */
4103
4104 /* No work, make sure hang detection is disabled */
4105 if (txr->tx_avail == adapter->num_tx_desc) {
4106 txr->busy = EM_TX_IDLE;
4107 return;
4108 }
4109
4110 processed = 0;
4111 first = txr->next_to_clean;
4112 tx_desc = &txr->tx_base[first];
4113 tx_buffer = &txr->tx_buffers[first];
4114 last = tx_buffer->next_eop;
4115 eop_desc = &txr->tx_base[last];
4116
4117 /*
4118 * What this does is get the index of the
4119 * first descriptor AFTER the EOP of the
4120 * first packet, that way we can do the
4121 * simple comparison on the inner while loop.
4122 */
4123 if (++last == adapter->num_tx_desc)
4124 last = 0;
4125 done = last;
4126
4127 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
4128 BUS_DMASYNC_POSTREAD);
4129
4130 while (eop_desc->upper.fields.status & E1000_TXD_STAT_DD) {
4131 /* We clean the range of the packet */
4132 while (first != done) {
4133 tx_desc->upper.data = 0;
4134 tx_desc->lower.data = 0;
4135 tx_desc->buffer_addr = 0;
4136 ++txr->tx_avail;
4137 ++processed;
4138
4139 if (tx_buffer->m_head) {
4140 bus_dmamap_sync(txr->txtag,
4141 tx_buffer->map,
4142 BUS_DMASYNC_POSTWRITE);
4143 bus_dmamap_unload(txr->txtag,
4144 tx_buffer->map);
4145 m_freem(tx_buffer->m_head);
4146 tx_buffer->m_head = NULL;
4147 }
4148 tx_buffer->next_eop = -1;
4149
4150 if (++first == adapter->num_tx_desc)
4151 first = 0;
4152
4153 tx_buffer = &txr->tx_buffers[first];
4154 tx_desc = &txr->tx_base[first];
4155 }
4156 if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1);
4157 /* See if we can continue to the next packet */
4158 last = tx_buffer->next_eop;
4159 if (last != -1) {
4160 eop_desc = &txr->tx_base[last];
4161 /* Get new done point */
4162 if (++last == adapter->num_tx_desc) last = 0;
4163 done = last;
4164 } else
4165 break;
4166 }
4167 bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
4168 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
4169
4170 txr->next_to_clean = first;
4171
4172 /*
4173 ** Hang detection: we know there's work outstanding
4174 ** or the entry return would have been taken, so no
4175 ** descriptor processed here indicates a potential hang.
4176 ** The local timer will examine this and do a reset if needed.
4177 */
4178 if (processed == 0) {
4179 if (txr->busy != EM_TX_HUNG)
4180 ++txr->busy;
4181 } else /* At least one descriptor was cleaned */
4182 txr->busy = EM_TX_BUSY; /* note this clears HUNG */
4183
4184 /*
4185 * If we have a minimum free, clear IFF_DRV_OACTIVE
4186 * to tell the stack that it is OK to send packets.
4187 * Notice that all writes of OACTIVE happen under the
4188 * TX lock which, with a single queue, guarantees
4189 * sanity.
4190 */
4191 if (txr->tx_avail >= EM_MAX_SCATTER) {
4192 if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
4193 }
4194
4195 /* Disable hang detection if all clean */
4196 if (txr->tx_avail == adapter->num_tx_desc)
4197 txr->busy = EM_TX_IDLE;
4198}
4199
4200/*********************************************************************
4201 *
4202 * Refresh RX descriptor mbufs from system mbuf buffer pool.
4203 *
4204 **********************************************************************/
4205static void
4206em_refresh_mbufs(struct rx_ring *rxr, int limit)
4207{
4208 struct adapter *adapter = rxr->adapter;
4209 struct mbuf *m;
4210 bus_dma_segment_t segs;
4211 struct em_rxbuffer *rxbuf;
4212 int i, j, error, nsegs;
4213 bool cleaned = FALSE;
4214
4215 i = j = rxr->next_to_refresh;
4216 /*
4217 ** Get one descriptor beyond
4218 ** our work mark to control
4219 ** the loop.
4220 */
4221 if (++j == adapter->num_rx_desc)
4222 j = 0;
4223
4224 while (j != limit) {
4225 rxbuf = &rxr->rx_buffers[i];
4226 if (rxbuf->m_head == NULL) {
4227 m = m_getjcl(M_NOWAIT, MT_DATA,
4228 M_PKTHDR, adapter->rx_mbuf_sz);
4229 /*
4230 ** If we have a temporary resource shortage
4231 ** that causes a failure, just abort refresh
4232 ** for now, we will return to this point when
4233 ** reinvoked from em_rxeof.
4234 */
4235 if (m == NULL)
4236 goto update;
4237 } else
4238 m = rxbuf->m_head;
4239
4240 m->m_len = m->m_pkthdr.len = adapter->rx_mbuf_sz;
4241 m->m_flags |= M_PKTHDR;
4242 m->m_data = m->m_ext.ext_buf;
4243
4244 /* Use bus_dma machinery to setup the memory mapping */
4245 error = bus_dmamap_load_mbuf_sg(rxr->rxtag, rxbuf->map,
4246 m, &segs, &nsegs, BUS_DMA_NOWAIT);
4247 if (error != 0) {
4248 printf("Refresh mbufs: hdr dmamap load"
4249 " failure - %d\n", error);
4250 m_free(m);
4251 rxbuf->m_head = NULL;
4252 goto update;
4253 }
4254 rxbuf->m_head = m;
4255 rxbuf->paddr = segs.ds_addr;
4256 bus_dmamap_sync(rxr->rxtag,
4257 rxbuf->map, BUS_DMASYNC_PREREAD);
4258 em_setup_rxdesc(&rxr->rx_base[i], rxbuf);
4259 cleaned = TRUE;
4260
4261 i = j; /* Next is precalulated for us */
4262 rxr->next_to_refresh = i;
4263 /* Calculate next controlling index */
4264 if (++j == adapter->num_rx_desc)
4265 j = 0;
4266 }
4267update:
4268 /*
4269 ** Update the tail pointer only if,
4270 ** and as far as we have refreshed.
4271 */
4272 if (cleaned)
4273 E1000_WRITE_REG(&adapter->hw,
4274 E1000_RDT(rxr->me), rxr->next_to_refresh);
4275
4276 return;
4277}
4278
4279
4280/*********************************************************************
4281 *
4282 * Allocate memory for rx_buffer structures. Since we use one
4283 * rx_buffer per received packet, the maximum number of rx_buffer's
4284 * that we'll need is equal to the number of receive descriptors
4285 * that we've allocated.
4286 *
4287 **********************************************************************/
4288static int
4289em_allocate_receive_buffers(struct rx_ring *rxr)
4290{
4291 struct adapter *adapter = rxr->adapter;
4292 device_t dev = adapter->dev;
4293 struct em_rxbuffer *rxbuf;
4294 int error;
4295
4296 rxr->rx_buffers = malloc(sizeof(struct em_rxbuffer) *
4297 adapter->num_rx_desc, M_DEVBUF, M_NOWAIT | M_ZERO);
4298 if (rxr->rx_buffers == NULL) {
4299 device_printf(dev, "Unable to allocate rx_buffer memory\n");
4300 return (ENOMEM);
4301 }
4302
4303 error = bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */
4304 1, 0, /* alignment, bounds */
4305 BUS_SPACE_MAXADDR, /* lowaddr */
4306 BUS_SPACE_MAXADDR, /* highaddr */
4307 NULL, NULL, /* filter, filterarg */
4308 MJUM9BYTES, /* maxsize */
4309 1, /* nsegments */
4310 MJUM9BYTES, /* maxsegsize */
4311 0, /* flags */
4312 NULL, /* lockfunc */
4313 NULL, /* lockarg */
4314 &rxr->rxtag);
4315 if (error) {
4316 device_printf(dev, "%s: bus_dma_tag_create failed %d\n",
4317 __func__, error);
4318 goto fail;
4319 }
4320
4321 rxbuf = rxr->rx_buffers;
4322 for (int i = 0; i < adapter->num_rx_desc; i++, rxbuf++) {
4323 rxbuf = &rxr->rx_buffers[i];
4324 error = bus_dmamap_create(rxr->rxtag, 0, &rxbuf->map);
4325 if (error) {
4326 device_printf(dev, "%s: bus_dmamap_create failed: %d\n",
4327 __func__, error);
4328 goto fail;
4329 }
4330 }
4331
4332 return (0);
4333
4334fail:
4335 em_free_receive_structures(adapter);
4336 return (error);
4337}
4338
4339
4340/*********************************************************************
4341 *
4342 * Initialize a receive ring and its buffers.
4343 *
4344 **********************************************************************/
4345static int
4346em_setup_receive_ring(struct rx_ring *rxr)
4347{
4348 struct adapter *adapter = rxr->adapter;
4349 struct em_rxbuffer *rxbuf;
4350 bus_dma_segment_t seg[1];
4351 int rsize, nsegs, error = 0;
4352#ifdef DEV_NETMAP
4353 struct netmap_slot *slot;
4354 struct netmap_adapter *na = netmap_getna(adapter->ifp);
4355#endif
4356
4357
4358 /* Clear the ring contents */
4359 EM_RX_LOCK(rxr);
4360 rsize = roundup2(adapter->num_rx_desc *
4361 sizeof(union e1000_rx_desc_extended), EM_DBA_ALIGN);
4362 bzero((void *)rxr->rx_base, rsize);
4363#ifdef DEV_NETMAP
4364 slot = netmap_reset(na, NR_RX, rxr->me, 0);
4365#endif
4366
4367 /*
4368 ** Free current RX buffer structs and their mbufs
4369 */
4370 for (int i = 0; i < adapter->num_rx_desc; i++) {
4371 rxbuf = &rxr->rx_buffers[i];
4372 if (rxbuf->m_head != NULL) {
4373 bus_dmamap_sync(rxr->rxtag, rxbuf->map,
4374 BUS_DMASYNC_POSTREAD);
4375 bus_dmamap_unload(rxr->rxtag, rxbuf->map);
4376 m_freem(rxbuf->m_head);
4377 rxbuf->m_head = NULL; /* mark as freed */
4378 }
4379 }
4380
4381 /* Now replenish the mbufs */
4382 for (int j = 0; j != adapter->num_rx_desc; ++j) {
4383 rxbuf = &rxr->rx_buffers[j];
4384#ifdef DEV_NETMAP
4385 if (slot) {
4386 int si = netmap_idx_n2k(&na->rx_rings[rxr->me], j);
4387 uint64_t paddr;
4388 void *addr;
4389
4390 addr = PNMB(na, slot + si, &paddr);
4391 netmap_load_map(na, rxr->rxtag, rxbuf->map, addr);
4392 em_setup_rxdesc(&rxr->rx_base[j], rxbuf);
4393 continue;
4394 }
4395#endif /* DEV_NETMAP */
4396 rxbuf->m_head = m_getjcl(M_NOWAIT, MT_DATA,
4397 M_PKTHDR, adapter->rx_mbuf_sz);
4398 if (rxbuf->m_head == NULL) {
4399 error = ENOBUFS;
4400 goto fail;
4401 }
4402 rxbuf->m_head->m_len = adapter->rx_mbuf_sz;
4403 rxbuf->m_head->m_flags &= ~M_HASFCS; /* we strip it */
4404 rxbuf->m_head->m_pkthdr.len = adapter->rx_mbuf_sz;
4405
4406 /* Get the memory mapping */
4407 error = bus_dmamap_load_mbuf_sg(rxr->rxtag,
4408 rxbuf->map, rxbuf->m_head, seg,
4409 &nsegs, BUS_DMA_NOWAIT);
4410 if (error != 0) {
4411 m_freem(rxbuf->m_head);
4412 rxbuf->m_head = NULL;
4413 goto fail;
4414 }
4415 bus_dmamap_sync(rxr->rxtag,
4416 rxbuf->map, BUS_DMASYNC_PREREAD);
4417
4418 rxbuf->paddr = seg[0].ds_addr;
4419 em_setup_rxdesc(&rxr->rx_base[j], rxbuf);
4420 }
4421 rxr->next_to_check = 0;
4422 rxr->next_to_refresh = 0;
4423 bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
4424 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
4425
4426fail:
4427 EM_RX_UNLOCK(rxr);
4428 return (error);
4429}
4430
4431/*********************************************************************
4432 *
4433 * Initialize all receive rings.
4434 *
4435 **********************************************************************/
4436static int
4437em_setup_receive_structures(struct adapter *adapter)
4438{
4439 struct rx_ring *rxr = adapter->rx_rings;
4440 int q;
4441
4442 for (q = 0; q < adapter->num_queues; q++, rxr++)
4443 if (em_setup_receive_ring(rxr))
4444 goto fail;
4445
4446 return (0);
4447fail:
4448 /*
4449 * Free RX buffers allocated so far, we will only handle
4450 * the rings that completed, the failing case will have
4451 * cleaned up for itself. 'q' failed, so its the terminus.
4452 */
4453 for (int i = 0; i < q; ++i) {
4454 rxr = &adapter->rx_rings[i];
4455 for (int n = 0; n < adapter->num_rx_desc; n++) {
4456 struct em_rxbuffer *rxbuf;
4457 rxbuf = &rxr->rx_buffers[n];
4458 if (rxbuf->m_head != NULL) {
4459 bus_dmamap_sync(rxr->rxtag, rxbuf->map,
4460 BUS_DMASYNC_POSTREAD);
4461 bus_dmamap_unload(rxr->rxtag, rxbuf->map);
4462 m_freem(rxbuf->m_head);
4463 rxbuf->m_head = NULL;
4464 }
4465 }
4466 rxr->next_to_check = 0;
4467 rxr->next_to_refresh = 0;
4468 }
4469
4470 return (ENOBUFS);
4471}
4472
4473/*********************************************************************
4474 *
4475 * Free all receive rings.
4476 *
4477 **********************************************************************/
4478static void
4479em_free_receive_structures(struct adapter *adapter)
4480{
4481 struct rx_ring *rxr = adapter->rx_rings;
4482
4483 for (int i = 0; i < adapter->num_queues; i++, rxr++) {
4484 em_free_receive_buffers(rxr);
4485 /* Free the ring memory as well */
4486 em_dma_free(adapter, &rxr->rxdma);
4487 EM_RX_LOCK_DESTROY(rxr);
4488 }
4489
4490 free(adapter->rx_rings, M_DEVBUF);
4491}
4492
4493
4494/*********************************************************************
4495 *
4496 * Free receive ring data structures
4497 *
4498 **********************************************************************/
4499static void
4500em_free_receive_buffers(struct rx_ring *rxr)
4501{
4502 struct adapter *adapter = rxr->adapter;
4503 struct em_rxbuffer *rxbuf = NULL;
4504
4505 INIT_DEBUGOUT("free_receive_buffers: begin");
4506
4507 if (rxr->rx_buffers != NULL) {
4508 for (int i = 0; i < adapter->num_rx_desc; i++) {
4509 rxbuf = &rxr->rx_buffers[i];
4510 if (rxbuf->map != NULL) {
4511 bus_dmamap_sync(rxr->rxtag, rxbuf->map,
4512 BUS_DMASYNC_POSTREAD);
4513 bus_dmamap_unload(rxr->rxtag, rxbuf->map);
4514 bus_dmamap_destroy(rxr->rxtag, rxbuf->map);
4515 }
4516 if (rxbuf->m_head != NULL) {
4517 m_freem(rxbuf->m_head);
4518 rxbuf->m_head = NULL;
4519 }
4520 }
4521 free(rxr->rx_buffers, M_DEVBUF);
4522 rxr->rx_buffers = NULL;
4523 rxr->next_to_check = 0;
4524 rxr->next_to_refresh = 0;
4525 }
4526
4527 if (rxr->rxtag != NULL) {
4528 bus_dma_tag_destroy(rxr->rxtag);
4529 rxr->rxtag = NULL;
4530 }
4531
4532 return;
4533}
4534
4535
4536/*********************************************************************
4537 *
4538 * Enable receive unit.
4539 *
4540 **********************************************************************/
4541
4542static void
4543em_initialize_receive_unit(struct adapter *adapter)
4544{
4545 struct rx_ring *rxr = adapter->rx_rings;
4546 if_t ifp = adapter->ifp;
4547 struct e1000_hw *hw = &adapter->hw;
4548 u32 rctl, rxcsum, rfctl;
4549
4550 INIT_DEBUGOUT("em_initialize_receive_units: begin");
4551
4552 /*
4553 * Make sure receives are disabled while setting
4554 * up the descriptor ring
4555 */
4556 rctl = E1000_READ_REG(hw, E1000_RCTL);
4557 /* Do not disable if ever enabled on this hardware */
4558 if ((hw->mac.type != e1000_82574) && (hw->mac.type != e1000_82583))
4559 E1000_WRITE_REG(hw, E1000_RCTL, rctl & ~E1000_RCTL_EN);
4560
4561 /* Setup the Receive Control Register */
4562 rctl &= ~(3 << E1000_RCTL_MO_SHIFT);
4563 rctl |= E1000_RCTL_EN | E1000_RCTL_BAM |
4564 E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
4565 (hw->mac.mc_filter_type << E1000_RCTL_MO_SHIFT);
4566
4567 /* Do not store bad packets */
4568 rctl &= ~E1000_RCTL_SBP;
4569
4570 /* Enable Long Packet receive */
4571 if (if_getmtu(ifp) > ETHERMTU)
4572 rctl |= E1000_RCTL_LPE;
4573 else
4574 rctl &= ~E1000_RCTL_LPE;
4575
4576 /* Strip the CRC */
4577 if (!em_disable_crc_stripping)
4578 rctl |= E1000_RCTL_SECRC;
4579
4580 E1000_WRITE_REG(&adapter->hw, E1000_RADV,
4581 adapter->rx_abs_int_delay.value);
4582
4583 E1000_WRITE_REG(&adapter->hw, E1000_RDTR,
4584 adapter->rx_int_delay.value);
4585 /*
4586 * Set the interrupt throttling rate. Value is calculated
4587 * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns)
4588 */
4589 E1000_WRITE_REG(hw, E1000_ITR, DEFAULT_ITR);
4590
4591 /* Use extended rx descriptor formats */
4592 rfctl = E1000_READ_REG(hw, E1000_RFCTL);
4593 rfctl |= E1000_RFCTL_EXTEN;
4594 /*
4595 ** When using MSIX interrupts we need to throttle
4596 ** using the EITR register (82574 only)
4597 */
4598 if (hw->mac.type == e1000_82574) {
4599 for (int i = 0; i < 4; i++)
4600 E1000_WRITE_REG(hw, E1000_EITR_82574(i),
4601 DEFAULT_ITR);
4602 /* Disable accelerated acknowledge */
4603 rfctl |= E1000_RFCTL_ACK_DIS;
4604 }
4605 E1000_WRITE_REG(hw, E1000_RFCTL, rfctl);
4606
4607 rxcsum = E1000_READ_REG(hw, E1000_RXCSUM);
4608 if (if_getcapenable(ifp) & IFCAP_RXCSUM) {
4609#ifdef EM_MULTIQUEUE
4610 rxcsum |= E1000_RXCSUM_TUOFL |
4611 E1000_RXCSUM_IPOFL |
4612 E1000_RXCSUM_PCSD;
4613#else
4614 rxcsum |= E1000_RXCSUM_TUOFL;
4615#endif
4616 } else
4617 rxcsum &= ~E1000_RXCSUM_TUOFL;
4618
4619 E1000_WRITE_REG(hw, E1000_RXCSUM, rxcsum);
4620
4621#ifdef EM_MULTIQUEUE
4622#define RSSKEYLEN 10
4623 if (adapter->num_queues > 1) {
4624 uint8_t rss_key[4 * RSSKEYLEN];
4625 uint32_t reta = 0;
4626 int i;
4627
4628 /*
4629 * Configure RSS key
4630 */
4631 arc4rand(rss_key, sizeof(rss_key), 0);
4632 for (i = 0; i < RSSKEYLEN; ++i) {
4633 uint32_t rssrk = 0;
4634
4635 rssrk = EM_RSSRK_VAL(rss_key, i);
4636 E1000_WRITE_REG(hw,E1000_RSSRK(i), rssrk);
4637 }
4638
4639 /*
4640 * Configure RSS redirect table in following fashion:
4641 * (hash & ring_cnt_mask) == rdr_table[(hash & rdr_table_mask)]
4642 */
4643 for (i = 0; i < sizeof(reta); ++i) {
4644 uint32_t q;
4645
4646 q = (i % adapter->num_queues) << 7;
4647 reta |= q << (8 * i);
4648 }
4649
4650 for (i = 0; i < 32; ++i) {
4651 E1000_WRITE_REG(hw, E1000_RETA(i), reta);
4652 }
4653
4654 E1000_WRITE_REG(hw, E1000_MRQC, E1000_MRQC_RSS_ENABLE_2Q |
4655 E1000_MRQC_RSS_FIELD_IPV4_TCP |
4656 E1000_MRQC_RSS_FIELD_IPV4 |
4657 E1000_MRQC_RSS_FIELD_IPV6_TCP_EX |
4658 E1000_MRQC_RSS_FIELD_IPV6_EX |
4659 E1000_MRQC_RSS_FIELD_IPV6);
4660 }
4661#endif
4662 /*
4663 ** XXX TEMPORARY WORKAROUND: on some systems with 82573
4664 ** long latencies are observed, like Lenovo X60. This
4665 ** change eliminates the problem, but since having positive
4666 ** values in RDTR is a known source of problems on other
4667 ** platforms another solution is being sought.
4668 */
4669 if (hw->mac.type == e1000_82573)
4670 E1000_WRITE_REG(hw, E1000_RDTR, 0x20);
4671
4672 for (int i = 0; i < adapter->num_queues; i++, rxr++) {
4673 /* Setup the Base and Length of the Rx Descriptor Ring */
4674 u64 bus_addr = rxr->rxdma.dma_paddr;
4675 u32 rdt = adapter->num_rx_desc - 1; /* default */
4676
4677 E1000_WRITE_REG(hw, E1000_RDLEN(i),
4678 adapter->num_rx_desc * sizeof(union e1000_rx_desc_extended));
4679 E1000_WRITE_REG(hw, E1000_RDBAH(i), (u32)(bus_addr >> 32));
4680 E1000_WRITE_REG(hw, E1000_RDBAL(i), (u32)bus_addr);
4681 /* Setup the Head and Tail Descriptor Pointers */
4682 E1000_WRITE_REG(hw, E1000_RDH(i), 0);
4683#ifdef DEV_NETMAP
4684 /*
4685 * an init() while a netmap client is active must
4686 * preserve the rx buffers passed to userspace.
4687 */
4688 if (if_getcapenable(ifp) & IFCAP_NETMAP) {
4689 struct netmap_adapter *na = netmap_getna(adapter->ifp);
4690 rdt -= nm_kr_rxspace(&na->rx_rings[i]);
4691 }
4692#endif /* DEV_NETMAP */
4693 E1000_WRITE_REG(hw, E1000_RDT(i), rdt);
4694 }
4695
4696 /*
4697 * Set PTHRESH for improved jumbo performance
4698 * According to 10.2.5.11 of Intel 82574 Datasheet,
4699 * RXDCTL(1) is written whenever RXDCTL(0) is written.
4700 * Only write to RXDCTL(1) if there is a need for different
4701 * settings.
4702 */
4703 if (((adapter->hw.mac.type == e1000_ich9lan) ||
4704 (adapter->hw.mac.type == e1000_pch2lan) ||
4705 (adapter->hw.mac.type == e1000_ich10lan)) &&
4706 (if_getmtu(ifp) > ETHERMTU)) {
4707 u32 rxdctl = E1000_READ_REG(hw, E1000_RXDCTL(0));
4708 E1000_WRITE_REG(hw, E1000_RXDCTL(0), rxdctl | 3);
4709 } else if (adapter->hw.mac.type == e1000_82574) {
4710 for (int i = 0; i < adapter->num_queues; i++) {
4711 u32 rxdctl = E1000_READ_REG(hw, E1000_RXDCTL(i));
4712
4713 rxdctl |= 0x20; /* PTHRESH */
4714 rxdctl |= 4 << 8; /* HTHRESH */
4715 rxdctl |= 4 << 16;/* WTHRESH */
4716 rxdctl |= 1 << 24; /* Switch to granularity */
4717 E1000_WRITE_REG(hw, E1000_RXDCTL(i), rxdctl);
4718 }
4719 }
4720
4721 if (adapter->hw.mac.type >= e1000_pch2lan) {
4722 if (if_getmtu(ifp) > ETHERMTU)
4723 e1000_lv_jumbo_workaround_ich8lan(hw, TRUE);
4724 else
4725 e1000_lv_jumbo_workaround_ich8lan(hw, FALSE);
4726 }
4727
4728 /* Make sure VLAN Filters are off */
4729 rctl &= ~E1000_RCTL_VFE;
4730
4731 if (adapter->rx_mbuf_sz == MCLBYTES)
4732 rctl |= E1000_RCTL_SZ_2048;
4733 else if (adapter->rx_mbuf_sz == MJUMPAGESIZE)
4734 rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX;
4735 else if (adapter->rx_mbuf_sz > MJUMPAGESIZE)
4736 rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX;
4737
4738 /* ensure we clear use DTYPE of 00 here */
4739 rctl &= ~0x00000C00;
4740 /* Write out the settings */
4741 E1000_WRITE_REG(hw, E1000_RCTL, rctl);
4742
4743 return;
4744}
4745
4746
4747/*********************************************************************
4748 *
4749 * This routine executes in interrupt context. It replenishes
4750 * the mbufs in the descriptor and sends data which has been
4751 * dma'ed into host memory to upper layer.
4752 *
4753 * We loop at most count times if count is > 0, or until done if
4754 * count < 0.
4755 *
4756 * For polling we also now return the number of cleaned packets
4757 *********************************************************************/
4758static bool
4759em_rxeof(struct rx_ring *rxr, int count, int *done)
4760{
4761 struct adapter *adapter = rxr->adapter;
4762 if_t ifp = adapter->ifp;
4763 struct mbuf *mp, *sendmp;
4764 u32 status = 0;
4765 u16 len;
4766 int i, processed, rxdone = 0;
4767 bool eop;
4768 union e1000_rx_desc_extended *cur;
4769
4770 EM_RX_LOCK(rxr);
4771
4772 /* Sync the ring */
4773 bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
4774 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
4775
4776
4777#ifdef DEV_NETMAP
4778 if (netmap_rx_irq(ifp, rxr->me, &processed)) {
4779 EM_RX_UNLOCK(rxr);
4780 return (FALSE);
4781 }
4782#endif /* DEV_NETMAP */
4783
4784 for (i = rxr->next_to_check, processed = 0; count != 0;) {
4785 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
4786 break;
4787
4788 cur = &rxr->rx_base[i];
4789 status = le32toh(cur->wb.upper.status_error);
4790 mp = sendmp = NULL;
4791
4792 if ((status & E1000_RXD_STAT_DD) == 0)
4793 break;
4794
4795 len = le16toh(cur->wb.upper.length);
4796 eop = (status & E1000_RXD_STAT_EOP) != 0;
4797
4798 if ((status & E1000_RXDEXT_ERR_FRAME_ERR_MASK) ||
4799 (rxr->discard == TRUE)) {
4800 adapter->dropped_pkts++;
4801 ++rxr->rx_discarded;
4802 if (!eop) /* Catch subsequent segs */
4803 rxr->discard = TRUE;
4804 else
4805 rxr->discard = FALSE;
4806 em_rx_discard(rxr, i);
4807 goto next_desc;
4808 }
4809 bus_dmamap_unload(rxr->rxtag, rxr->rx_buffers[i].map);
4810
4811 /* Assign correct length to the current fragment */
4812 mp = rxr->rx_buffers[i].m_head;
4813 mp->m_len = len;
4814
4815 /* Trigger for refresh */
4816 rxr->rx_buffers[i].m_head = NULL;
4817
4818 /* First segment? */
4819 if (rxr->fmp == NULL) {
4820 mp->m_pkthdr.len = len;
4821 rxr->fmp = rxr->lmp = mp;
4822 } else {
4823 /* Chain mbuf's together */
4824 mp->m_flags &= ~M_PKTHDR;
4825 rxr->lmp->m_next = mp;
4826 rxr->lmp = mp;
4827 rxr->fmp->m_pkthdr.len += len;
4828 }
4829
4830 if (eop) {
4831 --count;
4832 sendmp = rxr->fmp;
4833 if_setrcvif(sendmp, ifp);
4834 if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
4835 em_receive_checksum(status, sendmp);
4836#ifndef __NO_STRICT_ALIGNMENT
4837 if (adapter->hw.mac.max_frame_size >
4838 (MCLBYTES - ETHER_ALIGN) &&
4839 em_fixup_rx(rxr) != 0)
4840 goto skip;
4841#endif
4842 if (status & E1000_RXD_STAT_VP) {
4843 if_setvtag(sendmp,
4844 le16toh(cur->wb.upper.vlan));
4845 sendmp->m_flags |= M_VLANTAG;
4846 }
4847#ifndef __NO_STRICT_ALIGNMENT
4848skip:
4849#endif
4850 rxr->fmp = rxr->lmp = NULL;
4851 }
4852next_desc:
4853 /* Sync the ring */
4854 bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
4855 BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
4856
4857 /* Zero out the receive descriptors status. */
4858 cur->wb.upper.status_error &= htole32(~0xFF);
4859 ++rxdone; /* cumulative for POLL */
4860 ++processed;
4861
4862 /* Advance our pointers to the next descriptor. */
4863 if (++i == adapter->num_rx_desc)
4864 i = 0;
4865
4866 /* Send to the stack */
4867 if (sendmp != NULL) {
4868 rxr->next_to_check = i;
4869 EM_RX_UNLOCK(rxr);
4870 if_input(ifp, sendmp);
4871 EM_RX_LOCK(rxr);
4872 i = rxr->next_to_check;
4873 }
4874
4875 /* Only refresh mbufs every 8 descriptors */
4876 if (processed == 8) {
4877 em_refresh_mbufs(rxr, i);
4878 processed = 0;
4879 }
4880 }
4881
4882 /* Catch any remaining refresh work */
4883 if (e1000_rx_unrefreshed(rxr))
4884 em_refresh_mbufs(rxr, i);
4885
4886 rxr->next_to_check = i;
4887 if (done != NULL)
4888 *done = rxdone;
4889 EM_RX_UNLOCK(rxr);
4890
4891 return ((status & E1000_RXD_STAT_DD) ? TRUE : FALSE);
4892}
4893
4894static __inline void
4895em_rx_discard(struct rx_ring *rxr, int i)
4896{
4897 struct em_rxbuffer *rbuf;
4898
4899 rbuf = &rxr->rx_buffers[i];
4900 bus_dmamap_unload(rxr->rxtag, rbuf->map);
4901
4902 /* Free any previous pieces */
4903 if (rxr->fmp != NULL) {
4904 rxr->fmp->m_flags |= M_PKTHDR;
4905 m_freem(rxr->fmp);
4906 rxr->fmp = NULL;
4907 rxr->lmp = NULL;
4908 }
4909 /*
4910 ** Free buffer and allow em_refresh_mbufs()
4911 ** to clean up and recharge buffer.
4912 */
4913 if (rbuf->m_head) {
4914 m_free(rbuf->m_head);
4915 rbuf->m_head = NULL;
4916 }
4917 return;
4918}
4919
4920#ifndef __NO_STRICT_ALIGNMENT
4921/*
4922 * When jumbo frames are enabled we should realign entire payload on
4923 * architecures with strict alignment. This is serious design mistake of 8254x
4924 * as it nullifies DMA operations. 8254x just allows RX buffer size to be
4925 * 2048/4096/8192/16384. What we really want is 2048 - ETHER_ALIGN to align its
4926 * payload. On architecures without strict alignment restrictions 8254x still
4927 * performs unaligned memory access which would reduce the performance too.
4928 * To avoid copying over an entire frame to align, we allocate a new mbuf and
4929 * copy ethernet header to the new mbuf. The new mbuf is prepended into the
4930 * existing mbuf chain.
4931 *
4932 * Be aware, best performance of the 8254x is achived only when jumbo frame is
4933 * not used at all on architectures with strict alignment.
4934 */
4935static int
4936em_fixup_rx(struct rx_ring *rxr)
4937{
4938 struct adapter *adapter = rxr->adapter;
4939 struct mbuf *m, *n;
4940 int error;
4941
4942 error = 0;
4943 m = rxr->fmp;
4944 if (m->m_len <= (MCLBYTES - ETHER_HDR_LEN)) {
4945 bcopy(m->m_data, m->m_data + ETHER_HDR_LEN, m->m_len);
4946 m->m_data += ETHER_HDR_LEN;
4947 } else {
4948 MGETHDR(n, M_NOWAIT, MT_DATA);
4949 if (n != NULL) {
4950 bcopy(m->m_data, n->m_data, ETHER_HDR_LEN);
4951 m->m_data += ETHER_HDR_LEN;
4952 m->m_len -= ETHER_HDR_LEN;
4953 n->m_len = ETHER_HDR_LEN;
4954 M_MOVE_PKTHDR(n, m);
4955 n->m_next = m;
4956 rxr->fmp = n;
4957 } else {
4958 adapter->dropped_pkts++;
4959 m_freem(rxr->fmp);
4960 rxr->fmp = NULL;
4961 error = ENOMEM;
4962 }
4963 }
4964
4965 return (error);
4966}
4967#endif
4968
4969static void
4970em_setup_rxdesc(union e1000_rx_desc_extended *rxd, const struct em_rxbuffer *rxbuf)
4971{
4972 rxd->read.buffer_addr = htole64(rxbuf->paddr);
4973 /* DD bits must be cleared */
4974 rxd->wb.upper.status_error= 0;
4975}
4976
4977/*********************************************************************
4978 *
4979 * Verify that the hardware indicated that the checksum is valid.
4980 * Inform the stack about the status of checksum so that stack
4981 * doesn't spend time verifying the checksum.
4982 *
4983 *********************************************************************/
4984static void
4985em_receive_checksum(uint32_t status, struct mbuf *mp)
4986{
4987 mp->m_pkthdr.csum_flags = 0;
4988
4989 /* Ignore Checksum bit is set */
4990 if (status & E1000_RXD_STAT_IXSM)
4991 return;
4992
4993 /* If the IP checksum exists and there is no IP Checksum error */
4994 if ((status & (E1000_RXD_STAT_IPCS | E1000_RXDEXT_STATERR_IPE)) ==
4995 E1000_RXD_STAT_IPCS) {
4996 mp->m_pkthdr.csum_flags = (CSUM_IP_CHECKED | CSUM_IP_VALID);
4997 }
4998
4999 /* TCP or UDP checksum */
5000 if ((status & (E1000_RXD_STAT_TCPCS | E1000_RXDEXT_STATERR_TCPE)) ==
5001 E1000_RXD_STAT_TCPCS) {
5002 mp->m_pkthdr.csum_flags |= (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
5003 mp->m_pkthdr.csum_data = htons(0xffff);
5004 }
5005 if (status & E1000_RXD_STAT_UDPCS) {
5006 mp->m_pkthdr.csum_flags |= (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
5007 mp->m_pkthdr.csum_data = htons(0xffff);
5008 }
5009}
5010
5011/*
5012 * This routine is run via an vlan
5013 * config EVENT
5014 */
5015static void
5016em_register_vlan(void *arg, if_t ifp, u16 vtag)
5017{
5018 struct adapter *adapter = if_getsoftc(ifp);
5019 u32 index, bit;
5020
5021 if ((void*)adapter != arg) /* Not our event */
5022 return;
5023
5024 if ((vtag == 0) || (vtag > 4095)) /* Invalid ID */
5025 return;
5026
5027 EM_CORE_LOCK(adapter);
5028 index = (vtag >> 5) & 0x7F;
5029 bit = vtag & 0x1F;
5030 adapter->shadow_vfta[index] |= (1 << bit);
5031 ++adapter->num_vlans;
5032 /* Re-init to load the changes */
5033 if (if_getcapenable(ifp) & IFCAP_VLAN_HWFILTER)
5034 em_init_locked(adapter);
5035 EM_CORE_UNLOCK(adapter);
5036}
5037
5038/*
5039 * This routine is run via an vlan
5040 * unconfig EVENT
5041 */
5042static void
5043em_unregister_vlan(void *arg, if_t ifp, u16 vtag)
5044{
5045 struct adapter *adapter = if_getsoftc(ifp);
5046 u32 index, bit;
5047
5048 if (adapter != arg)
5049 return;
5050
5051 if ((vtag == 0) || (vtag > 4095)) /* Invalid */
5052 return;
5053
5054 EM_CORE_LOCK(adapter);
5055 index = (vtag >> 5) & 0x7F;
5056 bit = vtag & 0x1F;
5057 adapter->shadow_vfta[index] &= ~(1 << bit);
5058 --adapter->num_vlans;
5059 /* Re-init to load the changes */
5060 if (if_getcapenable(ifp) & IFCAP_VLAN_HWFILTER)
5061 em_init_locked(adapter);
5062 EM_CORE_UNLOCK(adapter);
5063}
5064
5065static void
5066em_setup_vlan_hw_support(struct adapter *adapter)
5067{
5068 struct e1000_hw *hw = &adapter->hw;
5069 u32 reg;
5070
5071 /*
5072 ** We get here thru init_locked, meaning
5073 ** a soft reset, this has already cleared
5074 ** the VFTA and other state, so if there
5075 ** have been no vlan's registered do nothing.
5076 */
5077 if (adapter->num_vlans == 0)
5078 return;
5079
5080 /*
5081 ** A soft reset zero's out the VFTA, so
5082 ** we need to repopulate it now.
5083 */
5084 for (int i = 0; i < EM_VFTA_SIZE; i++)
5085 if (adapter->shadow_vfta[i] != 0)
5086 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA,
5087 i, adapter->shadow_vfta[i]);
5088
5089 reg = E1000_READ_REG(hw, E1000_CTRL);
5090 reg |= E1000_CTRL_VME;
5091 E1000_WRITE_REG(hw, E1000_CTRL, reg);
5092
5093 /* Enable the Filter Table */
5094 reg = E1000_READ_REG(hw, E1000_RCTL);
5095 reg &= ~E1000_RCTL_CFIEN;
5096 reg |= E1000_RCTL_VFE;
5097 E1000_WRITE_REG(hw, E1000_RCTL, reg);
5098}
5099
5100static void
5101em_enable_intr(struct adapter *adapter)
5102{
5103 struct e1000_hw *hw = &adapter->hw;
5104 u32 ims_mask = IMS_ENABLE_MASK;
5105
5106 if (hw->mac.type == e1000_82574) {
5107 E1000_WRITE_REG(hw, EM_EIAC, adapter->ims);
5108 ims_mask |= adapter->ims;
5109 }
5110 E1000_WRITE_REG(hw, E1000_IMS, ims_mask);
5111}
5112
5113static void
5114em_disable_intr(struct adapter *adapter)
5115{
5116 struct e1000_hw *hw = &adapter->hw;
5117
5118 if (hw->mac.type == e1000_82574)
5119 E1000_WRITE_REG(hw, EM_EIAC, 0);
5120 E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
5121}
5122
5123/*
5124 * Bit of a misnomer, what this really means is
5125 * to enable OS management of the system... aka
5126 * to disable special hardware management features
5127 */
5128static void
5129em_init_manageability(struct adapter *adapter)
5130{
5131 /* A shared code workaround */
5132#define E1000_82542_MANC2H E1000_MANC2H
5133 if (adapter->has_manage) {
5134 int manc2h = E1000_READ_REG(&adapter->hw, E1000_MANC2H);
5135 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC);
5136
5137 /* disable hardware interception of ARP */
5138 manc &= ~(E1000_MANC_ARP_EN);
5139
5140 /* enable receiving management packets to the host */
5141 manc |= E1000_MANC_EN_MNG2HOST;
5142#define E1000_MNG2HOST_PORT_623 (1 << 5)
5143#define E1000_MNG2HOST_PORT_664 (1 << 6)
5144 manc2h |= E1000_MNG2HOST_PORT_623;
5145 manc2h |= E1000_MNG2HOST_PORT_664;
5146 E1000_WRITE_REG(&adapter->hw, E1000_MANC2H, manc2h);
5147 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc);
5148 }
5149}
5150
5151/*
5152 * Give control back to hardware management
5153 * controller if there is one.
5154 */
5155static void
5156em_release_manageability(struct adapter *adapter)
5157{
5158 if (adapter->has_manage) {
5159 int manc = E1000_READ_REG(&adapter->hw, E1000_MANC);
5160
5161 /* re-enable hardware interception of ARP */
5162 manc |= E1000_MANC_ARP_EN;
5163 manc &= ~E1000_MANC_EN_MNG2HOST;
5164
5165 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc);
5166 }
5167}
5168
5169/*
5170 * em_get_hw_control sets the {CTRL_EXT|FWSM}:DRV_LOAD bit.
5171 * For ASF and Pass Through versions of f/w this means
5172 * that the driver is loaded. For AMT version type f/w
5173 * this means that the network i/f is open.
5174 */
5175static void
5176em_get_hw_control(struct adapter *adapter)
5177{
5178 u32 ctrl_ext, swsm;
5179
5180 if (adapter->hw.mac.type == e1000_82573) {
5181 swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM);
5182 E1000_WRITE_REG(&adapter->hw, E1000_SWSM,
5183 swsm | E1000_SWSM_DRV_LOAD);
5184 return;
5185 }
5186 /* else */
5187 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
5188 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
5189 ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
5190 return;
5191}
5192
5193/*
5194 * em_release_hw_control resets {CTRL_EXT|FWSM}:DRV_LOAD bit.
5195 * For ASF and Pass Through versions of f/w this means that
5196 * the driver is no longer loaded. For AMT versions of the
5197 * f/w this means that the network i/f is closed.
5198 */
5199static void
5200em_release_hw_control(struct adapter *adapter)
5201{
5202 u32 ctrl_ext, swsm;
5203
5204 if (!adapter->has_manage)
5205 return;
5206
5207 if (adapter->hw.mac.type == e1000_82573) {
5208 swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM);
5209 E1000_WRITE_REG(&adapter->hw, E1000_SWSM,
5210 swsm & ~E1000_SWSM_DRV_LOAD);
5211 return;
5212 }
5213 /* else */
5214 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
5215 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
5216 ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD);
5217 return;
5218}
5219
5220static int
5221em_is_valid_ether_addr(u8 *addr)
5222{
5223 char zero_addr[6] = { 0, 0, 0, 0, 0, 0 };
5224
5225 if ((addr[0] & 1) || (!bcmp(addr, zero_addr, ETHER_ADDR_LEN))) {
5226 return (FALSE);
5227 }
5228
5229 return (TRUE);
5230}
5231
5232/*
5233** Parse the interface capabilities with regard
5234** to both system management and wake-on-lan for
5235** later use.
5236*/
5237static void
5238em_get_wakeup(device_t dev)
5239{
5240 struct adapter *adapter = device_get_softc(dev);
5241 u16 eeprom_data = 0, device_id, apme_mask;
5242
5243 adapter->has_manage = e1000_enable_mng_pass_thru(&adapter->hw);
5244 apme_mask = EM_EEPROM_APME;
5245
5246 switch (adapter->hw.mac.type) {
5247 case e1000_82573:
5248 case e1000_82583:
5249 adapter->has_amt = TRUE;
5250 /* Falls thru */
5251 case e1000_82571:
5252 case e1000_82572:
5253 case e1000_80003es2lan:
5254 if (adapter->hw.bus.func == 1) {
5255 e1000_read_nvm(&adapter->hw,
5256 NVM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
5257 break;
5258 } else
5259 e1000_read_nvm(&adapter->hw,
5260 NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
5261 break;
5262 case e1000_ich8lan:
5263 case e1000_ich9lan:
5264 case e1000_ich10lan:
5265 case e1000_pchlan:
5266 case e1000_pch2lan:
5267 apme_mask = E1000_WUC_APME;
5268 adapter->has_amt = TRUE;
5269 eeprom_data = E1000_READ_REG(&adapter->hw, E1000_WUC);
5270 break;
5271 default:
5272 e1000_read_nvm(&adapter->hw,
5273 NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
5274 break;
5275 }
5276 if (eeprom_data & apme_mask)
5277 adapter->wol = (E1000_WUFC_MAG | E1000_WUFC_MC);
5278 /*
5279 * We have the eeprom settings, now apply the special cases
5280 * where the eeprom may be wrong or the board won't support
5281 * wake on lan on a particular port
5282 */
5283 device_id = pci_get_device(dev);
5284 switch (device_id) {
5285 case E1000_DEV_ID_82571EB_FIBER:
5286 /* Wake events only supported on port A for dual fiber
5287 * regardless of eeprom setting */
5288 if (E1000_READ_REG(&adapter->hw, E1000_STATUS) &
5289 E1000_STATUS_FUNC_1)
5290 adapter->wol = 0;
5291 break;
5292 case E1000_DEV_ID_82571EB_QUAD_COPPER:
5293 case E1000_DEV_ID_82571EB_QUAD_FIBER:
5294 case E1000_DEV_ID_82571EB_QUAD_COPPER_LP:
5295 /* if quad port adapter, disable WoL on all but port A */
5296 if (global_quad_port_a != 0)
5297 adapter->wol = 0;
5298 /* Reset for multiple quad port adapters */
5299 if (++global_quad_port_a == 4)
5300 global_quad_port_a = 0;
5301 break;
5302 }
5303 return;
5304}
5305
5306
5307/*
5308 * Enable PCI Wake On Lan capability
5309 */
5310static void
5311em_enable_wakeup(device_t dev)
5312{
5313 struct adapter *adapter = device_get_softc(dev);
5314 if_t ifp = adapter->ifp;
5315 u32 pmc, ctrl, ctrl_ext, rctl;
5316 u16 status;
5317
5318 if ((pci_find_cap(dev, PCIY_PMG, &pmc) != 0))
5319 return;
5320
5321 /* Advertise the wakeup capability */
5322 ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL);
5323 ctrl |= (E1000_CTRL_SWDPIN2 | E1000_CTRL_SWDPIN3);
5324 E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl);
5325 E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
5326
5327 if ((adapter->hw.mac.type == e1000_ich8lan) ||
5328 (adapter->hw.mac.type == e1000_pchlan) ||
5329 (adapter->hw.mac.type == e1000_ich9lan) ||
5330 (adapter->hw.mac.type == e1000_ich10lan))
5331 e1000_suspend_workarounds_ich8lan(&adapter->hw);
5332
5333 /* Keep the laser running on Fiber adapters */
5334 if (adapter->hw.phy.media_type == e1000_media_type_fiber ||
5335 adapter->hw.phy.media_type == e1000_media_type_internal_serdes) {
5336 ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
5337 ctrl_ext |= E1000_CTRL_EXT_SDP3_DATA;
5338 E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, ctrl_ext);
5339 }
5340
5341 /*
5342 ** Determine type of Wakeup: note that wol
5343 ** is set with all bits on by default.
5344 */
5345 if ((if_getcapenable(ifp) & IFCAP_WOL_MAGIC) == 0)
5346 adapter->wol &= ~E1000_WUFC_MAG;
5347
5348 if ((if_getcapenable(ifp) & IFCAP_WOL_MCAST) == 0)
5349 adapter->wol &= ~E1000_WUFC_MC;
5350 else {
5351 rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
5352 rctl |= E1000_RCTL_MPE;
5353 E1000_WRITE_REG(&adapter->hw, E1000_RCTL, rctl);
5354 }
5355
5356 if ((adapter->hw.mac.type == e1000_pchlan) ||
5357 (adapter->hw.mac.type == e1000_pch2lan)) {
5358 if (em_enable_phy_wakeup(adapter))
5359 return;
5360 } else {
5361 E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
5362 E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol);
5363 }
5364
5365 if (adapter->hw.phy.type == e1000_phy_igp_3)
5366 e1000_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw);
5367
5368 /* Request PME */
5369 status = pci_read_config(dev, pmc + PCIR_POWER_STATUS, 2);
5370 status &= ~(PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE);
5371 if (if_getcapenable(ifp) & IFCAP_WOL)
5372 status |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE;
5373 pci_write_config(dev, pmc + PCIR_POWER_STATUS, status, 2);
5374
5375 return;
5376}
5377
5378/*
5379** WOL in the newer chipset interfaces (pchlan)
5380** require thing to be copied into the phy
5381*/
5382static int
5383em_enable_phy_wakeup(struct adapter *adapter)
5384{
5385 struct e1000_hw *hw = &adapter->hw;
5386 u32 mreg, ret = 0;
5387 u16 preg;
5388
5389 /* copy MAC RARs to PHY RARs */
5390 e1000_copy_rx_addrs_to_phy_ich8lan(hw);
5391
5392 /* copy MAC MTA to PHY MTA */
5393 for (int i = 0; i < adapter->hw.mac.mta_reg_count; i++) {
5394 mreg = E1000_READ_REG_ARRAY(hw, E1000_MTA, i);
5395 e1000_write_phy_reg(hw, BM_MTA(i), (u16)(mreg & 0xFFFF));
5396 e1000_write_phy_reg(hw, BM_MTA(i) + 1,
5397 (u16)((mreg >> 16) & 0xFFFF));
5398 }
5399
5400 /* configure PHY Rx Control register */
5401 e1000_read_phy_reg(&adapter->hw, BM_RCTL, &preg);
5402 mreg = E1000_READ_REG(hw, E1000_RCTL);
5403 if (mreg & E1000_RCTL_UPE)
5404 preg |= BM_RCTL_UPE;
5405 if (mreg & E1000_RCTL_MPE)
5406 preg |= BM_RCTL_MPE;
5407 preg &= ~(BM_RCTL_MO_MASK);
5408 if (mreg & E1000_RCTL_MO_3)
5409 preg |= (((mreg & E1000_RCTL_MO_3) >> E1000_RCTL_MO_SHIFT)
5410 << BM_RCTL_MO_SHIFT);
5411 if (mreg & E1000_RCTL_BAM)
5412 preg |= BM_RCTL_BAM;
5413 if (mreg & E1000_RCTL_PMCF)
5414 preg |= BM_RCTL_PMCF;
5415 mreg = E1000_READ_REG(hw, E1000_CTRL);
5416 if (mreg & E1000_CTRL_RFCE)
5417 preg |= BM_RCTL_RFCE;
5418 e1000_write_phy_reg(&adapter->hw, BM_RCTL, preg);
5419
5420 /* enable PHY wakeup in MAC register */
5421 E1000_WRITE_REG(hw, E1000_WUC,
5422 E1000_WUC_PHY_WAKE | E1000_WUC_PME_EN);
5423 E1000_WRITE_REG(hw, E1000_WUFC, adapter->wol);
5424
5425 /* configure and enable PHY wakeup in PHY registers */
5426 e1000_write_phy_reg(&adapter->hw, BM_WUFC, adapter->wol);
5427 e1000_write_phy_reg(&adapter->hw, BM_WUC, E1000_WUC_PME_EN);
5428
5429 /* activate PHY wakeup */
5430 ret = hw->phy.ops.acquire(hw);
5431 if (ret) {
5432 printf("Could not acquire PHY\n");
5433 return ret;
5434 }
5435 e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
5436 (BM_WUC_ENABLE_PAGE << IGP_PAGE_SHIFT));
5437 ret = e1000_read_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, &preg);
5438 if (ret) {
5439 printf("Could not read PHY page 769\n");
5440 goto out;
5441 }
5442 preg |= BM_WUC_ENABLE_BIT | BM_WUC_HOST_WU_BIT;
5443 ret = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, preg);
5444 if (ret)
5445 printf("Could not set PHY Host Wakeup bit\n");
5446out:
5447 hw->phy.ops.release(hw);
5448
5449 return ret;
5450}
5451
5452static void
5453em_led_func(void *arg, int onoff)
5454{
5455 struct adapter *adapter = arg;
5456
5457 EM_CORE_LOCK(adapter);
5458 if (onoff) {
5459 e1000_setup_led(&adapter->hw);
5460 e1000_led_on(&adapter->hw);
5461 } else {
5462 e1000_led_off(&adapter->hw);
5463 e1000_cleanup_led(&adapter->hw);
5464 }
5465 EM_CORE_UNLOCK(adapter);
5466}
5467
5468/*
5469** Disable the L0S and L1 LINK states
5470*/
5471static void
5472em_disable_aspm(struct adapter *adapter)
5473{
5474 int base, reg;
5475 u16 link_cap,link_ctrl;
5476 device_t dev = adapter->dev;
5477
5478 switch (adapter->hw.mac.type) {
5479 case e1000_82573:
5480 case e1000_82574:
5481 case e1000_82583:
5482 break;
5483 default:
5484 return;
5485 }
5486 if (pci_find_cap(dev, PCIY_EXPRESS, &base) != 0)
5487 return;
5488 reg = base + PCIER_LINK_CAP;
5489 link_cap = pci_read_config(dev, reg, 2);
5490 if ((link_cap & PCIEM_LINK_CAP_ASPM) == 0)
5491 return;
5492 reg = base + PCIER_LINK_CTL;
5493 link_ctrl = pci_read_config(dev, reg, 2);
5494 link_ctrl &= ~PCIEM_LINK_CTL_ASPMC;
5495 pci_write_config(dev, reg, link_ctrl, 2);
5496 return;
5497}
5498
5499/**********************************************************************
5500 *
5501 * Update the board statistics counters.
5502 *
5503 **********************************************************************/
5504static void
5505em_update_stats_counters(struct adapter *adapter)
5506{
5507
5508 if(adapter->hw.phy.media_type == e1000_media_type_copper ||
5509 (E1000_READ_REG(&adapter->hw, E1000_STATUS) & E1000_STATUS_LU)) {
5510 adapter->stats.symerrs += E1000_READ_REG(&adapter->hw, E1000_SYMERRS);
5511 adapter->stats.sec += E1000_READ_REG(&adapter->hw, E1000_SEC);
5512 }
5513 adapter->stats.crcerrs += E1000_READ_REG(&adapter->hw, E1000_CRCERRS);
5514 adapter->stats.mpc += E1000_READ_REG(&adapter->hw, E1000_MPC);
5515 adapter->stats.scc += E1000_READ_REG(&adapter->hw, E1000_SCC);
5516 adapter->stats.ecol += E1000_READ_REG(&adapter->hw, E1000_ECOL);
5517
5518 adapter->stats.mcc += E1000_READ_REG(&adapter->hw, E1000_MCC);
5519 adapter->stats.latecol += E1000_READ_REG(&adapter->hw, E1000_LATECOL);
5520 adapter->stats.colc += E1000_READ_REG(&adapter->hw, E1000_COLC);
5521 adapter->stats.dc += E1000_READ_REG(&adapter->hw, E1000_DC);
5522 adapter->stats.rlec += E1000_READ_REG(&adapter->hw, E1000_RLEC);
5523 adapter->stats.xonrxc += E1000_READ_REG(&adapter->hw, E1000_XONRXC);
5524 adapter->stats.xontxc += E1000_READ_REG(&adapter->hw, E1000_XONTXC);
5525 adapter->stats.xoffrxc += E1000_READ_REG(&adapter->hw, E1000_XOFFRXC);
5526 adapter->stats.xofftxc += E1000_READ_REG(&adapter->hw, E1000_XOFFTXC);
5527 adapter->stats.fcruc += E1000_READ_REG(&adapter->hw, E1000_FCRUC);
5528 adapter->stats.prc64 += E1000_READ_REG(&adapter->hw, E1000_PRC64);
5529 adapter->stats.prc127 += E1000_READ_REG(&adapter->hw, E1000_PRC127);
5530 adapter->stats.prc255 += E1000_READ_REG(&adapter->hw, E1000_PRC255);
5531 adapter->stats.prc511 += E1000_READ_REG(&adapter->hw, E1000_PRC511);
5532 adapter->stats.prc1023 += E1000_READ_REG(&adapter->hw, E1000_PRC1023);
5533 adapter->stats.prc1522 += E1000_READ_REG(&adapter->hw, E1000_PRC1522);
5534 adapter->stats.gprc += E1000_READ_REG(&adapter->hw, E1000_GPRC);
5535 adapter->stats.bprc += E1000_READ_REG(&adapter->hw, E1000_BPRC);
5536 adapter->stats.mprc += E1000_READ_REG(&adapter->hw, E1000_MPRC);
5537 adapter->stats.gptc += E1000_READ_REG(&adapter->hw, E1000_GPTC);
5538
5539 /* For the 64-bit byte counters the low dword must be read first. */
5540 /* Both registers clear on the read of the high dword */
5541
5542 adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCL) +
5543 ((u64)E1000_READ_REG(&adapter->hw, E1000_GORCH) << 32);
5544 adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCL) +
5545 ((u64)E1000_READ_REG(&adapter->hw, E1000_GOTCH) << 32);
5546
5547 adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, E1000_RNBC);
5548 adapter->stats.ruc += E1000_READ_REG(&adapter->hw, E1000_RUC);
5549 adapter->stats.rfc += E1000_READ_REG(&adapter->hw, E1000_RFC);
5550 adapter->stats.roc += E1000_READ_REG(&adapter->hw, E1000_ROC);
5551 adapter->stats.rjc += E1000_READ_REG(&adapter->hw, E1000_RJC);
5552
5553 adapter->stats.tor += E1000_READ_REG(&adapter->hw, E1000_TORH);
5554 adapter->stats.tot += E1000_READ_REG(&adapter->hw, E1000_TOTH);
5555
5556 adapter->stats.tpr += E1000_READ_REG(&adapter->hw, E1000_TPR);
5557 adapter->stats.tpt += E1000_READ_REG(&adapter->hw, E1000_TPT);
5558 adapter->stats.ptc64 += E1000_READ_REG(&adapter->hw, E1000_PTC64);
5559 adapter->stats.ptc127 += E1000_READ_REG(&adapter->hw, E1000_PTC127);
5560 adapter->stats.ptc255 += E1000_READ_REG(&adapter->hw, E1000_PTC255);
5561 adapter->stats.ptc511 += E1000_READ_REG(&adapter->hw, E1000_PTC511);
5562 adapter->stats.ptc1023 += E1000_READ_REG(&adapter->hw, E1000_PTC1023);
5563 adapter->stats.ptc1522 += E1000_READ_REG(&adapter->hw, E1000_PTC1522);
5564 adapter->stats.mptc += E1000_READ_REG(&adapter->hw, E1000_MPTC);
5565 adapter->stats.bptc += E1000_READ_REG(&adapter->hw, E1000_BPTC);
5566
5567 /* Interrupt Counts */
5568
5569 adapter->stats.iac += E1000_READ_REG(&adapter->hw, E1000_IAC);
5570 adapter->stats.icrxptc += E1000_READ_REG(&adapter->hw, E1000_ICRXPTC);
5571 adapter->stats.icrxatc += E1000_READ_REG(&adapter->hw, E1000_ICRXATC);
5572 adapter->stats.ictxptc += E1000_READ_REG(&adapter->hw, E1000_ICTXPTC);
5573 adapter->stats.ictxatc += E1000_READ_REG(&adapter->hw, E1000_ICTXATC);
5574 adapter->stats.ictxqec += E1000_READ_REG(&adapter->hw, E1000_ICTXQEC);
5575 adapter->stats.ictxqmtc += E1000_READ_REG(&adapter->hw, E1000_ICTXQMTC);
5576 adapter->stats.icrxdmtc += E1000_READ_REG(&adapter->hw, E1000_ICRXDMTC);
5577 adapter->stats.icrxoc += E1000_READ_REG(&adapter->hw, E1000_ICRXOC);
5578
5579 if (adapter->hw.mac.type >= e1000_82543) {
5580 adapter->stats.algnerrc +=
5581 E1000_READ_REG(&adapter->hw, E1000_ALGNERRC);
5582 adapter->stats.rxerrc +=
5583 E1000_READ_REG(&adapter->hw, E1000_RXERRC);
5584 adapter->stats.tncrs +=
5585 E1000_READ_REG(&adapter->hw, E1000_TNCRS);
5586 adapter->stats.cexterr +=
5587 E1000_READ_REG(&adapter->hw, E1000_CEXTERR);
5588 adapter->stats.tsctc +=
5589 E1000_READ_REG(&adapter->hw, E1000_TSCTC);
5590 adapter->stats.tsctfc +=
5591 E1000_READ_REG(&adapter->hw, E1000_TSCTFC);
5592 }
5593}
5594
5595static uint64_t
5596em_get_counter(if_t ifp, ift_counter cnt)
5597{
5598 struct adapter *adapter;
5599
5600 adapter = if_getsoftc(ifp);
5601
5602 switch (cnt) {
5603 case IFCOUNTER_COLLISIONS:
5604 return (adapter->stats.colc);
5605 case IFCOUNTER_IERRORS:
5606 return (adapter->dropped_pkts + adapter->stats.rxerrc +
5607 adapter->stats.crcerrs + adapter->stats.algnerrc +
5608 adapter->stats.ruc + adapter->stats.roc +
5609 adapter->stats.mpc + adapter->stats.cexterr);
5610 case IFCOUNTER_OERRORS:
5611 return (adapter->stats.ecol + adapter->stats.latecol +
5612 adapter->watchdog_events);
5613 default:
5614 return (if_get_counter_default(ifp, cnt));
5615 }
5616}
5617
5618/* Export a single 32-bit register via a read-only sysctl. */
5619static int
5620em_sysctl_reg_handler(SYSCTL_HANDLER_ARGS)
5621{
5622 struct adapter *adapter;
5623 u_int val;
5624
5625 adapter = oidp->oid_arg1;
5626 val = E1000_READ_REG(&adapter->hw, oidp->oid_arg2);
5627 return (sysctl_handle_int(oidp, &val, 0, req));
5628}
5629
5630/*
5631 * Add sysctl variables, one per statistic, to the system.
5632 */
5633static void
5634em_add_hw_stats(struct adapter *adapter)
5635{
5636 device_t dev = adapter->dev;
5637
5638 struct tx_ring *txr = adapter->tx_rings;
5639 struct rx_ring *rxr = adapter->rx_rings;
5640
5641 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(dev);
5642 struct sysctl_oid *tree = device_get_sysctl_tree(dev);
5643 struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
5644 struct e1000_hw_stats *stats = &adapter->stats;
5645
5646 struct sysctl_oid *stat_node, *queue_node, *int_node;
5647 struct sysctl_oid_list *stat_list, *queue_list, *int_list;
5648
5649#define QUEUE_NAME_LEN 32
5650 char namebuf[QUEUE_NAME_LEN];
5651
5652 /* Driver Statistics */
5653 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "dropped",
5654 CTLFLAG_RD, &adapter->dropped_pkts,
5655 "Driver dropped packets");
5656 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "link_irq",
5657 CTLFLAG_RD, &adapter->link_irq,
5658 "Link MSIX IRQ Handled");
5659 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "mbuf_defrag_fail",
5660 CTLFLAG_RD, &adapter->mbuf_defrag_failed,
5661 "Defragmenting mbuf chain failed");
5662 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "tx_dma_fail",
5663 CTLFLAG_RD, &adapter->no_tx_dma_setup,
5664 "Driver tx dma failure in xmit");
5665 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "rx_overruns",
5666 CTLFLAG_RD, &adapter->rx_overruns,
5667 "RX overruns");
5668 SYSCTL_ADD_ULONG(ctx, child, OID_AUTO, "watchdog_timeouts",
5669 CTLFLAG_RD, &adapter->watchdog_events,
5670 "Watchdog timeouts");
5671
5672 SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "device_control",
5673 CTLTYPE_UINT | CTLFLAG_RD, adapter, E1000_CTRL,
5674 em_sysctl_reg_handler, "IU",
5675 "Device Control Register");
5676 SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "rx_control",
5677 CTLTYPE_UINT | CTLFLAG_RD, adapter, E1000_RCTL,
5678 em_sysctl_reg_handler, "IU",
5679 "Receiver Control Register");
5680 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "fc_high_water",
5681 CTLFLAG_RD, &adapter->hw.fc.high_water, 0,
5682 "Flow Control High Watermark");
5683 SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "fc_low_water",
5684 CTLFLAG_RD, &adapter->hw.fc.low_water, 0,
5685 "Flow Control Low Watermark");
5686
5687 for (int i = 0; i < adapter->num_queues; i++, txr++, rxr++) {
5688 snprintf(namebuf, QUEUE_NAME_LEN, "queue_tx_%d", i);
5689 queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, namebuf,
5690 CTLFLAG_RD, NULL, "TX Queue Name");
5691 queue_list = SYSCTL_CHILDREN(queue_node);
5692
5693 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "txd_head",
5694 CTLTYPE_UINT | CTLFLAG_RD, adapter,
5695 E1000_TDH(txr->me),
5696 em_sysctl_reg_handler, "IU",
5697 "Transmit Descriptor Head");
5698 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "txd_tail",
5699 CTLTYPE_UINT | CTLFLAG_RD, adapter,
5700 E1000_TDT(txr->me),
5701 em_sysctl_reg_handler, "IU",
5702 "Transmit Descriptor Tail");
5703 SYSCTL_ADD_ULONG(ctx, queue_list, OID_AUTO, "tx_irq",
5704 CTLFLAG_RD, &txr->tx_irq,
5705 "Queue MSI-X Transmit Interrupts");
5706 SYSCTL_ADD_ULONG(ctx, queue_list, OID_AUTO, "no_desc_avail",
5707 CTLFLAG_RD, &txr->no_desc_avail,
5708 "Queue No Descriptor Available");
5709
5710 snprintf(namebuf, QUEUE_NAME_LEN, "queue_rx_%d", i);
5711 queue_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, namebuf,
5712 CTLFLAG_RD, NULL, "RX Queue Name");
5713 queue_list = SYSCTL_CHILDREN(queue_node);
5714
5715 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "rxd_head",
5716 CTLTYPE_UINT | CTLFLAG_RD, adapter,
5717 E1000_RDH(rxr->me),
5718 em_sysctl_reg_handler, "IU",
5719 "Receive Descriptor Head");
5720 SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "rxd_tail",
5721 CTLTYPE_UINT | CTLFLAG_RD, adapter,
5722 E1000_RDT(rxr->me),
5723 em_sysctl_reg_handler, "IU",
5724 "Receive Descriptor Tail");
5725 SYSCTL_ADD_ULONG(ctx, queue_list, OID_AUTO, "rx_irq",
5726 CTLFLAG_RD, &rxr->rx_irq,
5727 "Queue MSI-X Receive Interrupts");
5728 }
5729
5730 /* MAC stats get their own sub node */
5731
5732 stat_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "mac_stats",
5733 CTLFLAG_RD, NULL, "Statistics");
5734 stat_list = SYSCTL_CHILDREN(stat_node);
5735
5736 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "excess_coll",
5737 CTLFLAG_RD, &stats->ecol,
5738 "Excessive collisions");
5739 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "single_coll",
5740 CTLFLAG_RD, &stats->scc,
5741 "Single collisions");
5742 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "multiple_coll",
5743 CTLFLAG_RD, &stats->mcc,
5744 "Multiple collisions");
5745 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "late_coll",
5746 CTLFLAG_RD, &stats->latecol,
5747 "Late collisions");
5748 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "collision_count",
5749 CTLFLAG_RD, &stats->colc,
5750 "Collision Count");
5751 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "symbol_errors",
5752 CTLFLAG_RD, &adapter->stats.symerrs,
5753 "Symbol Errors");
5754 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "sequence_errors",
5755 CTLFLAG_RD, &adapter->stats.sec,
5756 "Sequence Errors");
5757 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "defer_count",
5758 CTLFLAG_RD, &adapter->stats.dc,
5759 "Defer Count");
5760 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "missed_packets",
5761 CTLFLAG_RD, &adapter->stats.mpc,
5762 "Missed Packets");
5763 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_no_buff",
5764 CTLFLAG_RD, &adapter->stats.rnbc,
5765 "Receive No Buffers");
5766 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_undersize",
5767 CTLFLAG_RD, &adapter->stats.ruc,
5768 "Receive Undersize");
5769 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_fragmented",
5770 CTLFLAG_RD, &adapter->stats.rfc,
5771 "Fragmented Packets Received ");
5772 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_oversize",
5773 CTLFLAG_RD, &adapter->stats.roc,
5774 "Oversized Packets Received");
5775 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_jabber",
5776 CTLFLAG_RD, &adapter->stats.rjc,
5777 "Recevied Jabber");
5778 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_errs",
5779 CTLFLAG_RD, &adapter->stats.rxerrc,
5780 "Receive Errors");
5781 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "crc_errs",
5782 CTLFLAG_RD, &adapter->stats.crcerrs,
5783 "CRC errors");
5784 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "alignment_errs",
5785 CTLFLAG_RD, &adapter->stats.algnerrc,
5786 "Alignment Errors");
5787 /* On 82575 these are collision counts */
5788 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "coll_ext_errs",
5789 CTLFLAG_RD, &adapter->stats.cexterr,
5790 "Collision/Carrier extension errors");
5791 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xon_recvd",
5792 CTLFLAG_RD, &adapter->stats.xonrxc,
5793 "XON Received");
5794 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xon_txd",
5795 CTLFLAG_RD, &adapter->stats.xontxc,
5796 "XON Transmitted");
5797 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xoff_recvd",
5798 CTLFLAG_RD, &adapter->stats.xoffrxc,
5799 "XOFF Received");
5800 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "xoff_txd",
5801 CTLFLAG_RD, &adapter->stats.xofftxc,
5802 "XOFF Transmitted");
5803
5804 /* Packet Reception Stats */
5805 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "total_pkts_recvd",
5806 CTLFLAG_RD, &adapter->stats.tpr,
5807 "Total Packets Received ");
5808 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_pkts_recvd",
5809 CTLFLAG_RD, &adapter->stats.gprc,
5810 "Good Packets Received");
5811 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "bcast_pkts_recvd",
5812 CTLFLAG_RD, &adapter->stats.bprc,
5813 "Broadcast Packets Received");
5814 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mcast_pkts_recvd",
5815 CTLFLAG_RD, &adapter->stats.mprc,
5816 "Multicast Packets Received");
5817 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_64",
5818 CTLFLAG_RD, &adapter->stats.prc64,
5819 "64 byte frames received ");
5820 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_65_127",
5821 CTLFLAG_RD, &adapter->stats.prc127,
5822 "65-127 byte frames received");
5823 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_128_255",
5824 CTLFLAG_RD, &adapter->stats.prc255,
5825 "128-255 byte frames received");
5826 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_256_511",
5827 CTLFLAG_RD, &adapter->stats.prc511,
5828 "256-511 byte frames received");
5829 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_512_1023",
5830 CTLFLAG_RD, &adapter->stats.prc1023,
5831 "512-1023 byte frames received");
5832 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "rx_frames_1024_1522",
5833 CTLFLAG_RD, &adapter->stats.prc1522,
5834 "1023-1522 byte frames received");
5835 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_octets_recvd",
5836 CTLFLAG_RD, &adapter->stats.gorc,
5837 "Good Octets Received");
5838
5839 /* Packet Transmission Stats */
5840 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_octets_txd",
5841 CTLFLAG_RD, &adapter->stats.gotc,
5842 "Good Octets Transmitted");
5843 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "total_pkts_txd",
5844 CTLFLAG_RD, &adapter->stats.tpt,
5845 "Total Packets Transmitted");
5846 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_pkts_txd",
5847 CTLFLAG_RD, &adapter->stats.gptc,
5848 "Good Packets Transmitted");
5849 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "bcast_pkts_txd",
5850 CTLFLAG_RD, &adapter->stats.bptc,
5851 "Broadcast Packets Transmitted");
5852 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "mcast_pkts_txd",
5853 CTLFLAG_RD, &adapter->stats.mptc,
5854 "Multicast Packets Transmitted");
5855 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_64",
5856 CTLFLAG_RD, &adapter->stats.ptc64,
5857 "64 byte frames transmitted ");
5858 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_65_127",
5859 CTLFLAG_RD, &adapter->stats.ptc127,
5860 "65-127 byte frames transmitted");
5861 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_128_255",
5862 CTLFLAG_RD, &adapter->stats.ptc255,
5863 "128-255 byte frames transmitted");
5864 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_256_511",
5865 CTLFLAG_RD, &adapter->stats.ptc511,
5866 "256-511 byte frames transmitted");
5867 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_512_1023",
5868 CTLFLAG_RD, &adapter->stats.ptc1023,
5869 "512-1023 byte frames transmitted");
5870 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tx_frames_1024_1522",
5871 CTLFLAG_RD, &adapter->stats.ptc1522,
5872 "1024-1522 byte frames transmitted");
5873 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tso_txd",
5874 CTLFLAG_RD, &adapter->stats.tsctc,
5875 "TSO Contexts Transmitted");
5876 SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "tso_ctx_fail",
5877 CTLFLAG_RD, &adapter->stats.tsctfc,
5878 "TSO Contexts Failed");
5879
5880
5881 /* Interrupt Stats */
5882
5883 int_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "interrupts",
5884 CTLFLAG_RD, NULL, "Interrupt Statistics");
5885 int_list = SYSCTL_CHILDREN(int_node);
5886
5887 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "asserts",
5888 CTLFLAG_RD, &adapter->stats.iac,
5889 "Interrupt Assertion Count");
5890
5891 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_pkt_timer",
5892 CTLFLAG_RD, &adapter->stats.icrxptc,
5893 "Interrupt Cause Rx Pkt Timer Expire Count");
5894
5895 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_abs_timer",
5896 CTLFLAG_RD, &adapter->stats.icrxatc,
5897 "Interrupt Cause Rx Abs Timer Expire Count");
5898
5899 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_pkt_timer",
5900 CTLFLAG_RD, &adapter->stats.ictxptc,
5901 "Interrupt Cause Tx Pkt Timer Expire Count");
5902
5903 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_abs_timer",
5904 CTLFLAG_RD, &adapter->stats.ictxatc,
5905 "Interrupt Cause Tx Abs Timer Expire Count");
5906
5907 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_queue_empty",
5908 CTLFLAG_RD, &adapter->stats.ictxqec,
5909 "Interrupt Cause Tx Queue Empty Count");
5910
5911 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "tx_queue_min_thresh",
5912 CTLFLAG_RD, &adapter->stats.ictxqmtc,
5913 "Interrupt Cause Tx Queue Min Thresh Count");
5914
5915 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_desc_min_thresh",
5916 CTLFLAG_RD, &adapter->stats.icrxdmtc,
5917 "Interrupt Cause Rx Desc Min Thresh Count");
5918
5919 SYSCTL_ADD_UQUAD(ctx, int_list, OID_AUTO, "rx_overrun",
5920 CTLFLAG_RD, &adapter->stats.icrxoc,
5921 "Interrupt Cause Receiver Overrun Count");
5922}
5923
5924/**********************************************************************
5925 *
5926 * This routine provides a way to dump out the adapter eeprom,
5927 * often a useful debug/service tool. This only dumps the first
5928 * 32 words, stuff that matters is in that extent.
5929 *
5930 **********************************************************************/
5931static int
5932em_sysctl_nvm_info(SYSCTL_HANDLER_ARGS)
5933{
5934 struct adapter *adapter = (struct adapter *)arg1;
5935 int error;
5936 int result;
5937
5938 result = -1;
5939 error = sysctl_handle_int(oidp, &result, 0, req);
5940
5941 if (error || !req->newptr)
5942 return (error);
5943
5944 /*
5945 * This value will cause a hex dump of the
5946 * first 32 16-bit words of the EEPROM to
5947 * the screen.
5948 */
5949 if (result == 1)
5950 em_print_nvm_info(adapter);
5951
5952 return (error);
5953}
5954
5955static void
5956em_print_nvm_info(struct adapter *adapter)
5957{
5958 u16 eeprom_data;
5959 int i, j, row = 0;
5960
5961 /* Its a bit crude, but it gets the job done */
5962 printf("\nInterface EEPROM Dump:\n");
5963 printf("Offset\n0x0000 ");
5964 for (i = 0, j = 0; i < 32; i++, j++) {
5965 if (j == 8) { /* Make the offset block */
5966 j = 0; ++row;
5967 printf("\n0x00%x0 ",row);
5968 }
5969 e1000_read_nvm(&adapter->hw, i, 1, &eeprom_data);
5970 printf("%04x ", eeprom_data);
5971 }
5972 printf("\n");
5973}
5974
5975static int
5976em_sysctl_int_delay(SYSCTL_HANDLER_ARGS)
5977{
5978 struct em_int_delay_info *info;
5979 struct adapter *adapter;
5980 u32 regval;
5981 int error, usecs, ticks;
5982
5983 info = (struct em_int_delay_info *)arg1;
5984 usecs = info->value;
5985 error = sysctl_handle_int(oidp, &usecs, 0, req);
5986 if (error != 0 || req->newptr == NULL)
5987 return (error);
5988 if (usecs < 0 || usecs > EM_TICKS_TO_USECS(65535))
5989 return (EINVAL);
5990 info->value = usecs;
5991 ticks = EM_USECS_TO_TICKS(usecs);
5992 if (info->offset == E1000_ITR) /* units are 256ns here */
5993 ticks *= 4;
5994
5995 adapter = info->adapter;
5996
5997 EM_CORE_LOCK(adapter);
5998 regval = E1000_READ_OFFSET(&adapter->hw, info->offset);
5999 regval = (regval & ~0xffff) | (ticks & 0xffff);
6000 /* Handle a few special cases. */
6001 switch (info->offset) {
6002 case E1000_RDTR:
6003 break;
6004 case E1000_TIDV:
6005 if (ticks == 0) {
6006 adapter->txd_cmd &= ~E1000_TXD_CMD_IDE;
6007 /* Don't write 0 into the TIDV register. */
6008 regval++;
6009 } else
6010 adapter->txd_cmd |= E1000_TXD_CMD_IDE;
6011 break;
6012 }
6013 E1000_WRITE_OFFSET(&adapter->hw, info->offset, regval);
6014 EM_CORE_UNLOCK(adapter);
6015 return (0);
6016}
6017
6018static void
6019em_add_int_delay_sysctl(struct adapter *adapter, const char *name,
6020 const char *description, struct em_int_delay_info *info,
6021 int offset, int value)
6022{
6023 info->adapter = adapter;
6024 info->offset = offset;
6025 info->value = value;
6026 SYSCTL_ADD_PROC(device_get_sysctl_ctx(adapter->dev),
6027 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
6028 OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW,
6029 info, 0, em_sysctl_int_delay, "I", description);
6030}
6031
6032static void
6033em_set_sysctl_value(struct adapter *adapter, const char *name,
6034 const char *description, int *limit, int value)
6035{
6036 *limit = value;
6037 SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev),
6038 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
6039 OID_AUTO, name, CTLFLAG_RW, limit, value, description);
6040}
6041
6042
6043/*
6044** Set flow control using sysctl:
6045** Flow control values:
6046** 0 - off
6047** 1 - rx pause
6048** 2 - tx pause
6049** 3 - full
6050*/
6051static int
6052em_set_flowcntl(SYSCTL_HANDLER_ARGS)
6053{
6054 int error;
6055 static int input = 3; /* default is full */
6056 struct adapter *adapter = (struct adapter *) arg1;
6057
6058 error = sysctl_handle_int(oidp, &input, 0, req);
6059
6060 if ((error) || (req->newptr == NULL))
6061 return (error);
6062
6063 if (input == adapter->fc) /* no change? */
6064 return (error);
6065
6066 switch (input) {
6067 case e1000_fc_rx_pause:
6068 case e1000_fc_tx_pause:
6069 case e1000_fc_full:
6070 case e1000_fc_none:
6071 adapter->hw.fc.requested_mode = input;
6072 adapter->fc = input;
6073 break;
6074 default:
6075 /* Do nothing */
6076 return (error);
6077 }
6078
6079 adapter->hw.fc.current_mode = adapter->hw.fc.requested_mode;
6080 e1000_force_mac_fc(&adapter->hw);
6081 return (error);
6082}
6083
6084/*
6085** Manage Energy Efficient Ethernet:
6086** Control values:
6087** 0/1 - enabled/disabled
6088*/
6089static int
6090em_sysctl_eee(SYSCTL_HANDLER_ARGS)
6091{
6092 struct adapter *adapter = (struct adapter *) arg1;
6093 int error, value;
6094
6095 value = adapter->hw.dev_spec.ich8lan.eee_disable;
6096 error = sysctl_handle_int(oidp, &value, 0, req);
6097 if (error || req->newptr == NULL)
6098 return (error);
6099 EM_CORE_LOCK(adapter);
6100 adapter->hw.dev_spec.ich8lan.eee_disable = (value != 0);
6101 em_init_locked(adapter);
6102 EM_CORE_UNLOCK(adapter);
6103 return (0);
6104}
6105
6106static int
6107em_sysctl_debug_info(SYSCTL_HANDLER_ARGS)
6108{
6109 struct adapter *adapter;
6110 int error;
6111 int result;
6112
6113 result = -1;
6114 error = sysctl_handle_int(oidp, &result, 0, req);
6115
6116 if (error || !req->newptr)
6117 return (error);
6118
6119 if (result == 1) {
6120 adapter = (struct adapter *)arg1;
6121 em_print_debug_info(adapter);
6122 }
6123
6124 return (error);
6125}
6126
6127/*
6128** This routine is meant to be fluid, add whatever is
6129** needed for debugging a problem. -jfv
6130*/
6131static void
6132em_print_debug_info(struct adapter *adapter)
6133{
6134 device_t dev = adapter->dev;
6135 struct tx_ring *txr = adapter->tx_rings;
6136 struct rx_ring *rxr = adapter->rx_rings;
6137
6138 if (if_getdrvflags(adapter->ifp) & IFF_DRV_RUNNING)
6139 printf("Interface is RUNNING ");
6140 else
6141 printf("Interface is NOT RUNNING\n");
6142
6143 if (if_getdrvflags(adapter->ifp) & IFF_DRV_OACTIVE)
6144 printf("and INACTIVE\n");
6145 else
6146 printf("and ACTIVE\n");
6147
6148 for (int i = 0; i < adapter->num_queues; i++, txr++, rxr++) {
6149 device_printf(dev, "TX Queue %d ------\n", i);
6150 device_printf(dev, "hw tdh = %d, hw tdt = %d\n",
6151 E1000_READ_REG(&adapter->hw, E1000_TDH(i)),
6152 E1000_READ_REG(&adapter->hw, E1000_TDT(i)));
6153 device_printf(dev, "Tx Queue Status = %d\n", txr->busy);
6154 device_printf(dev, "TX descriptors avail = %d\n",
6155 txr->tx_avail);
6156 device_printf(dev, "Tx Descriptors avail failure = %ld\n",
6157 txr->no_desc_avail);
6158 device_printf(dev, "RX Queue %d ------\n", i);
6159 device_printf(dev, "hw rdh = %d, hw rdt = %d\n",
6160 E1000_READ_REG(&adapter->hw, E1000_RDH(i)),
6161 E1000_READ_REG(&adapter->hw, E1000_RDT(i)));
6162 device_printf(dev, "RX discarded packets = %ld\n",
6163 rxr->rx_discarded);
6164 device_printf(dev, "RX Next to Check = %d\n", rxr->next_to_check);
6165 device_printf(dev, "RX Next to Refresh = %d\n", rxr->next_to_refresh);
6166 }
6167}
6168
6169#ifdef EM_MULTIQUEUE
6170/*
6171 * 82574 only:
6172 * Write a new value to the EEPROM increasing the number of MSIX
6173 * vectors from 3 to 5, for proper multiqueue support.
6174 */
6175static void
6176em_enable_vectors_82574(struct adapter *adapter)
6177{
6178 struct e1000_hw *hw = &adapter->hw;
6179 device_t dev = adapter->dev;
6180 u16 edata;
6181
6182 e1000_read_nvm(hw, EM_NVM_PCIE_CTRL, 1, &edata);
6183 printf("Current cap: %#06x\n", edata);
6184 if (((edata & EM_NVM_MSIX_N_MASK) >> EM_NVM_MSIX_N_SHIFT) != 4) {
6185 device_printf(dev, "Writing to eeprom: increasing "
6186 "reported MSIX vectors from 3 to 5...\n");
6187 edata &= ~(EM_NVM_MSIX_N_MASK);
6188 edata |= 4 << EM_NVM_MSIX_N_SHIFT;
6189 e1000_write_nvm(hw, EM_NVM_PCIE_CTRL, 1, &edata);
6190 e1000_update_nvm_checksum(hw);
6191 device_printf(dev, "Writing to eeprom: done\n");
6192 }
6193}
6194#endif
6195
6196#ifdef DDB
6197DB_COMMAND(em_reset_dev, em_ddb_reset_dev)
6198{
6199 devclass_t dc;
6200 int max_em;
6201
6202 dc = devclass_find("em");
6203 max_em = devclass_get_maxunit(dc);
6204
6205 for (int index = 0; index < (max_em - 1); index++) {
6206 device_t dev;
6207 dev = devclass_get_device(dc, index);
6208 if (device_get_driver(dev) == &em_driver) {
6209 struct adapter *adapter = device_get_softc(dev);
6210 EM_CORE_LOCK(adapter);
6211 em_init_locked(adapter);
6212 EM_CORE_UNLOCK(adapter);
6213 }
6214 }
6215}
6216DB_COMMAND(em_dump_queue, em_ddb_dump_queue)
6217{
6218 devclass_t dc;
6219 int max_em;
6220
6221 dc = devclass_find("em");
6222 max_em = devclass_get_maxunit(dc);
6223
6224 for (int index = 0; index < (max_em - 1); index++) {
6225 device_t dev;
6226 dev = devclass_get_device(dc, index);
6227 if (device_get_driver(dev) == &em_driver)
6228 em_print_debug_info(device_get_softc(dev));
6229 }
6230
6231}
6232#endif