xref: /illumos-gate/usr/src/uts/common/io/bnxe/bnxe_cfg.c (revision d14abf15)
1*d14abf15SRobert Mustacchi /*
2*d14abf15SRobert Mustacchi  * CDDL HEADER START
3*d14abf15SRobert Mustacchi  *
4*d14abf15SRobert Mustacchi  * The contents of this file are subject to the terms of the
5*d14abf15SRobert Mustacchi  * Common Development and Distribution License (the "License").
6*d14abf15SRobert Mustacchi  * You may not use this file except in compliance with the License.
7*d14abf15SRobert Mustacchi  *
8*d14abf15SRobert Mustacchi  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*d14abf15SRobert Mustacchi  * or http://www.opensolaris.org/os/licensing.
10*d14abf15SRobert Mustacchi  * See the License for the specific language governing permissions
11*d14abf15SRobert Mustacchi  * and limitations under the License.
12*d14abf15SRobert Mustacchi  *
13*d14abf15SRobert Mustacchi  * When distributing Covered Code, include this CDDL HEADER in each
14*d14abf15SRobert Mustacchi  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*d14abf15SRobert Mustacchi  * If applicable, add the following below this CDDL HEADER, with the
16*d14abf15SRobert Mustacchi  * fields enclosed by brackets "[]" replaced with your own identifying
17*d14abf15SRobert Mustacchi  * information: Portions Copyright [yyyy] [name of copyright owner]
18*d14abf15SRobert Mustacchi  *
19*d14abf15SRobert Mustacchi  * CDDL HEADER END
20*d14abf15SRobert Mustacchi  */
21*d14abf15SRobert Mustacchi 
22*d14abf15SRobert Mustacchi /*
23*d14abf15SRobert Mustacchi  * Copyright 2014 QLogic Corporation
24*d14abf15SRobert Mustacchi  * The contents of this file are subject to the terms of the
25*d14abf15SRobert Mustacchi  * QLogic End User License (the "License").
26*d14abf15SRobert Mustacchi  * You may not use this file except in compliance with the License.
27*d14abf15SRobert Mustacchi  *
28*d14abf15SRobert Mustacchi  * You can obtain a copy of the License at
29*d14abf15SRobert Mustacchi  * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
30*d14abf15SRobert Mustacchi  * QLogic_End_User_Software_License.txt
31*d14abf15SRobert Mustacchi  * See the License for the specific language governing permissions
32*d14abf15SRobert Mustacchi  * and limitations under the License.
33*d14abf15SRobert Mustacchi  */
34*d14abf15SRobert Mustacchi 
35*d14abf15SRobert Mustacchi /*
36*d14abf15SRobert Mustacchi  * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
37*d14abf15SRobert Mustacchi  */
38*d14abf15SRobert Mustacchi 
39*d14abf15SRobert Mustacchi #include "bnxe.h"
40*d14abf15SRobert Mustacchi 
41*d14abf15SRobert Mustacchi 
42*d14abf15SRobert Mustacchi /* these are the default phy link configs */
43*d14abf15SRobert Mustacchi BnxeLinkCfg bnxeLinkCfg =
44*d14abf15SRobert Mustacchi {
45*d14abf15SRobert Mustacchi     B_TRUE,  /* link_autoneg   */
46*d14abf15SRobert Mustacchi     B_TRUE,  /* param_20000fdx */
47*d14abf15SRobert Mustacchi     B_TRUE,  /* param_10000fdx */
48*d14abf15SRobert Mustacchi     B_TRUE,  /* param_2500fdx  */
49*d14abf15SRobert Mustacchi     B_TRUE,  /* param_1000fdx  */
50*d14abf15SRobert Mustacchi     B_FALSE, /* param_100fdx   */
51*d14abf15SRobert Mustacchi     B_FALSE, /* param_100hdx   */
52*d14abf15SRobert Mustacchi     B_FALSE, /* param_10fdx    */
53*d14abf15SRobert Mustacchi     B_FALSE, /* param_10hdx    */
54*d14abf15SRobert Mustacchi     B_TRUE,  /* param_txpause  */
55*d14abf15SRobert Mustacchi     B_TRUE   /* param_rxpause  */
56*d14abf15SRobert Mustacchi };
57*d14abf15SRobert Mustacchi 
58*d14abf15SRobert Mustacchi 
BnxeCfgGetVal(um_device_t * pUM,char * pName,void * pVal,int defaultVal,boolean_t boolVal)59*d14abf15SRobert Mustacchi static void BnxeCfgGetVal(um_device_t * pUM,
60*d14abf15SRobert Mustacchi                           char *        pName,
61*d14abf15SRobert Mustacchi                           void *        pVal,
62*d14abf15SRobert Mustacchi                           int           defaultVal,
63*d14abf15SRobert Mustacchi                           boolean_t     boolVal)
64*d14abf15SRobert Mustacchi {
65*d14abf15SRobert Mustacchi     int val;
66*d14abf15SRobert Mustacchi     #define BNXE_CFG_NAME_LEN_MAX 128
67*d14abf15SRobert Mustacchi     char name[BNXE_CFG_NAME_LEN_MAX];
68*d14abf15SRobert Mustacchi 
69*d14abf15SRobert Mustacchi     /* first check if the hardcoded default has been overridden */
70*d14abf15SRobert Mustacchi 
71*d14abf15SRobert Mustacchi     snprintf(name, BNXE_CFG_NAME_LEN_MAX, "default_%s", pName);
72*d14abf15SRobert Mustacchi 
73*d14abf15SRobert Mustacchi     val = ddi_prop_get_int(DDI_DEV_T_ANY,
74*d14abf15SRobert Mustacchi                            pUM->pDev,
75*d14abf15SRobert Mustacchi                            (DDI_PROP_NOTPROM | DDI_PROP_DONTPASS),
76*d14abf15SRobert Mustacchi                            name,
77*d14abf15SRobert Mustacchi                            defaultVal);
78*d14abf15SRobert Mustacchi 
79*d14abf15SRobert Mustacchi     /* now check for a config for this specific instance */
80*d14abf15SRobert Mustacchi 
81*d14abf15SRobert Mustacchi     snprintf(name, BNXE_CFG_NAME_LEN_MAX, "bnxe%d_%s", pUM->instance, pName);
82*d14abf15SRobert Mustacchi 
83*d14abf15SRobert Mustacchi     val = ddi_prop_get_int(DDI_DEV_T_ANY,
84*d14abf15SRobert Mustacchi                            pUM->pDev,
85*d14abf15SRobert Mustacchi                            (DDI_PROP_NOTPROM | DDI_PROP_DONTPASS),
86*d14abf15SRobert Mustacchi                            name,
87*d14abf15SRobert Mustacchi                            val);
88*d14abf15SRobert Mustacchi 
89*d14abf15SRobert Mustacchi     if (boolVal)
90*d14abf15SRobert Mustacchi     {
91*d14abf15SRobert Mustacchi         *((boolean_t *)pVal) = (val) ? B_TRUE : B_FALSE;
92*d14abf15SRobert Mustacchi     }
93*d14abf15SRobert Mustacchi     else
94*d14abf15SRobert Mustacchi     {
95*d14abf15SRobert Mustacchi         *((int *)pVal) = val;
96*d14abf15SRobert Mustacchi     }
97*d14abf15SRobert Mustacchi }
98*d14abf15SRobert Mustacchi 
99*d14abf15SRobert Mustacchi 
BnxeCfg_LLDP_DCBX(um_device_t * pUM)100*d14abf15SRobert Mustacchi void BnxeCfg_LLDP_DCBX(um_device_t * pUM)
101*d14abf15SRobert Mustacchi {
102*d14abf15SRobert Mustacchi     lm_device_t * pLM = &pUM->lm_dev;
103*d14abf15SRobert Mustacchi     char name[64];
104*d14abf15SRobert Mustacchi     int i;
105*d14abf15SRobert Mustacchi 
106*d14abf15SRobert Mustacchi     /* DCBX defaults configuration: DCBX not supported by default. */
107*d14abf15SRobert Mustacchi     pLM->params.dcbx_port_params.dcbx_enabled = FALSE;
108*d14abf15SRobert Mustacchi 
109*d14abf15SRobert Mustacchi     /* DCBX defaults configuration: PFC not supported. */
110*d14abf15SRobert Mustacchi     pLM->params.dcbx_port_params.pfc.enabled = FALSE;
111*d14abf15SRobert Mustacchi 
112*d14abf15SRobert Mustacchi     for (i = 0; i < LLFC_DRIVER_TRAFFIC_TYPE_MAX; i++)
113*d14abf15SRobert Mustacchi     {
114*d14abf15SRobert Mustacchi         pLM->params.dcbx_port_params.app.traffic_type_priority[i] =
115*d14abf15SRobert Mustacchi             INVALID_TRAFFIC_TYPE_PRIORITY;
116*d14abf15SRobert Mustacchi     }
117*d14abf15SRobert Mustacchi 
118*d14abf15SRobert Mustacchi     pLM->params.dcbx_port_params.pfc.priority_non_pauseable_mask = 0;
119*d14abf15SRobert Mustacchi 
120*d14abf15SRobert Mustacchi     memset(&pLM->params.lldp_config_params, 0xFF,
121*d14abf15SRobert Mustacchi            sizeof(pLM->params.lldp_config_params));
122*d14abf15SRobert Mustacchi     memset(&pLM->params.dcbx_config_params, 0xFF,
123*d14abf15SRobert Mustacchi            sizeof(pLM->params.dcbx_config_params));
124*d14abf15SRobert Mustacchi 
125*d14abf15SRobert Mustacchi     pLM->params.dcbx_config_params.dcb_enable        = 1;
126*d14abf15SRobert Mustacchi     pLM->params.dcbx_config_params.admin_dcbx_enable = 1;
127*d14abf15SRobert Mustacchi 
128*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "lldp_overwrite_settings",
129*d14abf15SRobert Mustacchi                   &pLM->params.lldp_config_params.overwrite_settings,
130*d14abf15SRobert Mustacchi                   pLM->params.lldp_config_params.overwrite_settings,
131*d14abf15SRobert Mustacchi                   B_FALSE);
132*d14abf15SRobert Mustacchi 
133*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "lldp_msg_tx_hold",
134*d14abf15SRobert Mustacchi                   &pLM->params.lldp_config_params.msg_tx_hold,
135*d14abf15SRobert Mustacchi                   pLM->params.lldp_config_params.msg_tx_hold,
136*d14abf15SRobert Mustacchi                   B_FALSE);
137*d14abf15SRobert Mustacchi 
138*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "lldp_msg_fast_tx",
139*d14abf15SRobert Mustacchi                   &pLM->params.lldp_config_params.msg_fast_tx,
140*d14abf15SRobert Mustacchi                   pLM->params.lldp_config_params.msg_fast_tx,
141*d14abf15SRobert Mustacchi                   B_FALSE);
142*d14abf15SRobert Mustacchi 
143*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "lldp_tx_credit_max",
144*d14abf15SRobert Mustacchi                   &pLM->params.lldp_config_params.tx_credit_max,
145*d14abf15SRobert Mustacchi                   pLM->params.lldp_config_params.tx_credit_max,
146*d14abf15SRobert Mustacchi                   B_FALSE);
147*d14abf15SRobert Mustacchi 
148*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "lldp_msg_tx_interval",
149*d14abf15SRobert Mustacchi                   &pLM->params.lldp_config_params.msg_tx_interval,
150*d14abf15SRobert Mustacchi                   pLM->params.lldp_config_params.msg_tx_interval,
151*d14abf15SRobert Mustacchi                   B_FALSE);
152*d14abf15SRobert Mustacchi 
153*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "lldp_tx_fast",
154*d14abf15SRobert Mustacchi                   &pLM->params.lldp_config_params.tx_fast,
155*d14abf15SRobert Mustacchi                   pLM->params.lldp_config_params.tx_fast,
156*d14abf15SRobert Mustacchi                   B_FALSE);
157*d14abf15SRobert Mustacchi 
158*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_dcb_enable",
159*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.dcb_enable,
160*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.dcb_enable,
161*d14abf15SRobert Mustacchi                   B_FALSE);
162*d14abf15SRobert Mustacchi 
163*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_dcbx_enable",
164*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_dcbx_enable,
165*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_dcbx_enable,
166*d14abf15SRobert Mustacchi                   B_FALSE);
167*d14abf15SRobert Mustacchi 
168*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_overwrite_settings",
169*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.overwrite_settings,
170*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.overwrite_settings,
171*d14abf15SRobert Mustacchi                   B_FALSE);
172*d14abf15SRobert Mustacchi 
173*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_dcbx_version",
174*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_dcbx_version,
175*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_dcbx_version,
176*d14abf15SRobert Mustacchi                   B_FALSE);
177*d14abf15SRobert Mustacchi 
178*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_ets_enable",
179*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_ets_enable,
180*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_ets_enable,
181*d14abf15SRobert Mustacchi                   B_FALSE);
182*d14abf15SRobert Mustacchi 
183*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_pfc_enable",
184*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_pfc_enable,
185*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_pfc_enable,
186*d14abf15SRobert Mustacchi                   B_FALSE);
187*d14abf15SRobert Mustacchi 
188*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_tc_supported_tx_enable",
189*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_tc_supported_tx_enable,
190*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_tc_supported_tx_enable,
191*d14abf15SRobert Mustacchi                   B_FALSE);
192*d14abf15SRobert Mustacchi 
193*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_ets_configuration_tx_enable",
194*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_ets_configuration_tx_enable,
195*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_ets_configuration_tx_enable,
196*d14abf15SRobert Mustacchi                   B_FALSE);
197*d14abf15SRobert Mustacchi 
198*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_ets_recommendation_tx_enable",
199*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_ets_recommendation_tx_enable,
200*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_ets_recommendation_tx_enable,
201*d14abf15SRobert Mustacchi                   B_FALSE);
202*d14abf15SRobert Mustacchi 
203*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_pfc_tx_enable",
204*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_pfc_tx_enable,
205*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_pfc_tx_enable,
206*d14abf15SRobert Mustacchi                   B_FALSE);
207*d14abf15SRobert Mustacchi 
208*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_application_priority_tx_enable",
209*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_application_priority_tx_enable,
210*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_application_priority_tx_enable,
211*d14abf15SRobert Mustacchi                   B_FALSE);
212*d14abf15SRobert Mustacchi 
213*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_ets_willing",
214*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_ets_willing,
215*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_ets_willing,
216*d14abf15SRobert Mustacchi                   B_FALSE);
217*d14abf15SRobert Mustacchi 
218*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_pfc_willing",
219*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_pfc_willing,
220*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_pfc_willing,
221*d14abf15SRobert Mustacchi                   B_FALSE);
222*d14abf15SRobert Mustacchi 
223*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_ets_reco_valid",
224*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_ets_reco_valid,
225*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_ets_reco_valid,
226*d14abf15SRobert Mustacchi                   B_FALSE);
227*d14abf15SRobert Mustacchi 
228*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_app_priority_willing",
229*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_app_priority_willing,
230*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_app_priority_willing,
231*d14abf15SRobert Mustacchi                   B_FALSE);
232*d14abf15SRobert Mustacchi 
233*d14abf15SRobert Mustacchi     for (i = 0; i < 8; i++)
234*d14abf15SRobert Mustacchi     {
235*d14abf15SRobert Mustacchi         snprintf(name, sizeof(name), "dcbx_admin_configuration_bw_percentage_%d", i);
236*d14abf15SRobert Mustacchi         BnxeCfgGetVal(pUM, name,
237*d14abf15SRobert Mustacchi                       &pLM->params.dcbx_config_params.admin_configuration_bw_percentage[i],
238*d14abf15SRobert Mustacchi                       pLM->params.dcbx_config_params.admin_configuration_bw_percentage[i],
239*d14abf15SRobert Mustacchi                       B_FALSE);
240*d14abf15SRobert Mustacchi     }
241*d14abf15SRobert Mustacchi 
242*d14abf15SRobert Mustacchi     for (i = 0; i < 8; i++)
243*d14abf15SRobert Mustacchi     {
244*d14abf15SRobert Mustacchi         snprintf(name, sizeof(name), "dcbx_admin_configuration_ets_pg_%d", i);
245*d14abf15SRobert Mustacchi         BnxeCfgGetVal(pUM, name,
246*d14abf15SRobert Mustacchi                       &pLM->params.dcbx_config_params.admin_configuration_ets_pg[i],
247*d14abf15SRobert Mustacchi                       pLM->params.dcbx_config_params.admin_configuration_ets_pg[i],
248*d14abf15SRobert Mustacchi                       B_FALSE);
249*d14abf15SRobert Mustacchi     }
250*d14abf15SRobert Mustacchi 
251*d14abf15SRobert Mustacchi     for (i = 0; i < 8; i++)
252*d14abf15SRobert Mustacchi     {
253*d14abf15SRobert Mustacchi         snprintf(name, sizeof(name), "dcbx_admin_recommendation_bw_percentage_%d", i);
254*d14abf15SRobert Mustacchi         BnxeCfgGetVal(pUM, name,
255*d14abf15SRobert Mustacchi                       &pLM->params.dcbx_config_params.admin_recommendation_bw_percentage[i],
256*d14abf15SRobert Mustacchi                       pLM->params.dcbx_config_params.admin_recommendation_bw_percentage[i],
257*d14abf15SRobert Mustacchi                       B_FALSE);
258*d14abf15SRobert Mustacchi     }
259*d14abf15SRobert Mustacchi 
260*d14abf15SRobert Mustacchi     for (i = 0; i < 8; i++)
261*d14abf15SRobert Mustacchi     {
262*d14abf15SRobert Mustacchi         snprintf(name, sizeof(name), "dcbx_admin_recommendation_ets_pg_%d", i);
263*d14abf15SRobert Mustacchi         BnxeCfgGetVal(pUM, name,
264*d14abf15SRobert Mustacchi                       &pLM->params.dcbx_config_params.admin_recommendation_ets_pg[i],
265*d14abf15SRobert Mustacchi                       pLM->params.dcbx_config_params.admin_recommendation_ets_pg[i],
266*d14abf15SRobert Mustacchi                       B_FALSE);
267*d14abf15SRobert Mustacchi     }
268*d14abf15SRobert Mustacchi 
269*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_pfc_bitmap",
270*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_pfc_bitmap,
271*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_pfc_bitmap,
272*d14abf15SRobert Mustacchi                   B_FALSE);
273*d14abf15SRobert Mustacchi 
274*d14abf15SRobert Mustacchi     for (i = 0; i < 4; i++)
275*d14abf15SRobert Mustacchi     {
276*d14abf15SRobert Mustacchi         snprintf(name, sizeof(name), "dcbx_admin_priority_app_table_%d_valid", i);
277*d14abf15SRobert Mustacchi         BnxeCfgGetVal(pUM, name,
278*d14abf15SRobert Mustacchi                       &pLM->params.dcbx_config_params.admin_priority_app_table[i].valid,
279*d14abf15SRobert Mustacchi                       pLM->params.dcbx_config_params.admin_priority_app_table[i].valid,
280*d14abf15SRobert Mustacchi                       B_FALSE);
281*d14abf15SRobert Mustacchi 
282*d14abf15SRobert Mustacchi         snprintf(name, sizeof(name), "dcbx_admin_priority_app_table_%d_priority", i);
283*d14abf15SRobert Mustacchi         BnxeCfgGetVal(pUM, name,
284*d14abf15SRobert Mustacchi                       &pLM->params.dcbx_config_params.admin_priority_app_table[i].priority,
285*d14abf15SRobert Mustacchi                       pLM->params.dcbx_config_params.admin_priority_app_table[i].priority,
286*d14abf15SRobert Mustacchi                       B_FALSE);
287*d14abf15SRobert Mustacchi 
288*d14abf15SRobert Mustacchi         snprintf(name, sizeof(name), "dcbx_admin_priority_app_table_%d_traffic_type", i);
289*d14abf15SRobert Mustacchi         BnxeCfgGetVal(pUM, name,
290*d14abf15SRobert Mustacchi                       &pLM->params.dcbx_config_params.admin_priority_app_table[i].traffic_type,
291*d14abf15SRobert Mustacchi                       pLM->params.dcbx_config_params.admin_priority_app_table[i].traffic_type,
292*d14abf15SRobert Mustacchi                       B_FALSE);
293*d14abf15SRobert Mustacchi 
294*d14abf15SRobert Mustacchi         snprintf(name, sizeof(name), "dcbx_admin_priority_app_table_%d_app_id", i);
295*d14abf15SRobert Mustacchi         BnxeCfgGetVal(pUM, name,
296*d14abf15SRobert Mustacchi                       &pLM->params.dcbx_config_params.admin_priority_app_table[i].app_id,
297*d14abf15SRobert Mustacchi                       pLM->params.dcbx_config_params.admin_priority_app_table[i].app_id,
298*d14abf15SRobert Mustacchi                       B_FALSE);
299*d14abf15SRobert Mustacchi     }
300*d14abf15SRobert Mustacchi 
301*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "dcbx_admin_default_priority",
302*d14abf15SRobert Mustacchi                   &pLM->params.dcbx_config_params.admin_default_priority,
303*d14abf15SRobert Mustacchi                   pLM->params.dcbx_config_params.admin_default_priority,
304*d14abf15SRobert Mustacchi                   B_FALSE);
305*d14abf15SRobert Mustacchi }
306*d14abf15SRobert Mustacchi 
307*d14abf15SRobert Mustacchi 
BnxeCfgInit(um_device_t * pUM)308*d14abf15SRobert Mustacchi void BnxeCfgInit(um_device_t * pUM)
309*d14abf15SRobert Mustacchi {
310*d14abf15SRobert Mustacchi     int option, i;
311*d14abf15SRobert Mustacchi 
312*d14abf15SRobert Mustacchi     /* set the defaults */
313*d14abf15SRobert Mustacchi     bcopy(&bnxeLinkCfg, &pUM->hwinit.lnkcfg, sizeof(BnxeLinkCfg));
314*d14abf15SRobert Mustacchi 
315*d14abf15SRobert Mustacchi     pUM->hwinit.flow_autoneg                  = B_TRUE;
316*d14abf15SRobert Mustacchi     pUM->devParams.checksum                   = USER_OPTION_CKSUM_DEFAULT;
317*d14abf15SRobert Mustacchi     pUM->devParams.enabled_oflds              = LM_OFFLOAD_NONE;
318*d14abf15SRobert Mustacchi     pUM->devParams.mtu[LM_CLI_IDX_NDIS]       = USER_OPTION_MTU_DEFAULT;
319*d14abf15SRobert Mustacchi     pUM->devParams.numRings                   = USER_OPTION_NUM_RINGS_DEFAULT;
320*d14abf15SRobert Mustacchi     pUM->devParams.numRxDesc[LM_CLI_IDX_NDIS] = USER_OPTION_RX_BDS_DEFAULT;
321*d14abf15SRobert Mustacchi     pUM->devParams.numTxDesc[LM_CLI_IDX_NDIS] = USER_OPTION_TX_BDS_DEFAULT;
322*d14abf15SRobert Mustacchi     pUM->devParams.maxRxFree                  = USER_OPTION_RX_MAX_FREE_DEFAULT;
323*d14abf15SRobert Mustacchi     pUM->devParams.maxTxFree                  = USER_OPTION_TX_MAX_FREE_DEFAULT;
324*d14abf15SRobert Mustacchi     pUM->devParams.rxCopyThreshold            = USER_OPTION_RX_DCOPY_THRESH_DEFAULT;
325*d14abf15SRobert Mustacchi     pUM->devParams.txCopyThreshold            = USER_OPTION_TX_DCOPY_THRESH_DEFAULT;
326*d14abf15SRobert Mustacchi     pUM->devParams.intrCoalesce               = B_TRUE;
327*d14abf15SRobert Mustacchi     pUM->devParams.intrRxPerSec               = USER_OPTION_INTR_COALESCE_RX_DEFAULT;
328*d14abf15SRobert Mustacchi     pUM->devParams.intrTxPerSec               = USER_OPTION_INTR_COALESCE_TX_DEFAULT;
329*d14abf15SRobert Mustacchi     pUM->devParams.disableMsix                = B_FALSE;
330*d14abf15SRobert Mustacchi     pUM->devParams.l2_fw_flow_ctrl            = B_FALSE;
331*d14abf15SRobert Mustacchi     pUM->devParams.autogreeenEnable           = B_TRUE;
332*d14abf15SRobert Mustacchi     pUM->devParams.lsoEnable                  = B_TRUE;
333*d14abf15SRobert Mustacchi     pUM->devParams.logEnable                  = B_TRUE;
334*d14abf15SRobert Mustacchi     pUM->devParams.routeTxRingPolicy          = BNXE_ROUTE_RING_TCPUDP;
335*d14abf15SRobert Mustacchi     pUM->devParams.fcoeEnable                 = B_FALSE;
336*d14abf15SRobert Mustacchi     pUM->devParams.linkRemoteFaultDetect      = B_TRUE;
337*d14abf15SRobert Mustacchi 
338*d14abf15SRobert Mustacchi     /* set the LLDP/DCBX defaults and get settings from bnxe.conf */
339*d14abf15SRobert Mustacchi     BnxeCfg_LLDP_DCBX(pUM);
340*d14abf15SRobert Mustacchi 
341*d14abf15SRobert Mustacchi     /* override the defaults based on what is set in bnxe.conf */
342*d14abf15SRobert Mustacchi 
343*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "adv_autoneg_cap",
344*d14abf15SRobert Mustacchi                   &pUM->hwinit.lnkcfg.link_autoneg,
345*d14abf15SRobert Mustacchi                   pUM->hwinit.lnkcfg.link_autoneg,
346*d14abf15SRobert Mustacchi                   B_TRUE);
347*d14abf15SRobert Mustacchi 
348*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "adv_20000fdx_cap",
349*d14abf15SRobert Mustacchi                   &pUM->hwinit.lnkcfg.param_20000fdx,
350*d14abf15SRobert Mustacchi                   pUM->hwinit.lnkcfg.param_20000fdx,
351*d14abf15SRobert Mustacchi                   B_TRUE);
352*d14abf15SRobert Mustacchi 
353*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "adv_10000fdx_cap",
354*d14abf15SRobert Mustacchi                   &pUM->hwinit.lnkcfg.param_10000fdx,
355*d14abf15SRobert Mustacchi                   pUM->hwinit.lnkcfg.param_10000fdx,
356*d14abf15SRobert Mustacchi                   B_TRUE);
357*d14abf15SRobert Mustacchi 
358*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "adv_2500fdx_cap",
359*d14abf15SRobert Mustacchi                   &pUM->hwinit.lnkcfg.param_2500fdx,
360*d14abf15SRobert Mustacchi                   pUM->hwinit.lnkcfg.param_2500fdx,
361*d14abf15SRobert Mustacchi                   B_TRUE);
362*d14abf15SRobert Mustacchi 
363*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "adv_1000fdx_cap",
364*d14abf15SRobert Mustacchi                   &pUM->hwinit.lnkcfg.param_1000fdx,
365*d14abf15SRobert Mustacchi                   pUM->hwinit.lnkcfg.param_1000fdx,
366*d14abf15SRobert Mustacchi                   B_TRUE);
367*d14abf15SRobert Mustacchi 
368*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "adv_100fdx_cap",
369*d14abf15SRobert Mustacchi                   &pUM->hwinit.lnkcfg.param_100fdx,
370*d14abf15SRobert Mustacchi                   pUM->hwinit.lnkcfg.param_100fdx,
371*d14abf15SRobert Mustacchi                   B_TRUE);
372*d14abf15SRobert Mustacchi 
373*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "adv_100hdx_cap",
374*d14abf15SRobert Mustacchi                   &pUM->hwinit.lnkcfg.param_100hdx,
375*d14abf15SRobert Mustacchi                   pUM->hwinit.lnkcfg.param_100hdx,
376*d14abf15SRobert Mustacchi                   B_TRUE);
377*d14abf15SRobert Mustacchi 
378*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "adv_10fdx_cap",
379*d14abf15SRobert Mustacchi                   &pUM->hwinit.lnkcfg.param_10fdx,
380*d14abf15SRobert Mustacchi                   pUM->hwinit.lnkcfg.param_10fdx,
381*d14abf15SRobert Mustacchi                   B_TRUE);
382*d14abf15SRobert Mustacchi 
383*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "adv_10hdx_cap",
384*d14abf15SRobert Mustacchi                   &pUM->hwinit.lnkcfg.param_10hdx,
385*d14abf15SRobert Mustacchi                   pUM->hwinit.lnkcfg.param_10hdx,
386*d14abf15SRobert Mustacchi                   B_TRUE);
387*d14abf15SRobert Mustacchi 
388*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "txpause_cap",
389*d14abf15SRobert Mustacchi                   &pUM->hwinit.lnkcfg.param_txpause,
390*d14abf15SRobert Mustacchi                   pUM->hwinit.lnkcfg.param_txpause,
391*d14abf15SRobert Mustacchi                   B_TRUE);
392*d14abf15SRobert Mustacchi 
393*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "rxpause_cap",
394*d14abf15SRobert Mustacchi                   &pUM->hwinit.lnkcfg.param_rxpause,
395*d14abf15SRobert Mustacchi                   pUM->hwinit.lnkcfg.param_rxpause,
396*d14abf15SRobert Mustacchi                   B_TRUE);
397*d14abf15SRobert Mustacchi 
398*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "autoneg_flow",
399*d14abf15SRobert Mustacchi                   &pUM->hwinit.flow_autoneg,
400*d14abf15SRobert Mustacchi                   pUM->hwinit.flow_autoneg,
401*d14abf15SRobert Mustacchi                   B_TRUE);
402*d14abf15SRobert Mustacchi 
403*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "checksum",
404*d14abf15SRobert Mustacchi                   &pUM->devParams.checksum,
405*d14abf15SRobert Mustacchi                   pUM->devParams.checksum,
406*d14abf15SRobert Mustacchi                   B_FALSE);
407*d14abf15SRobert Mustacchi     switch (pUM->devParams.checksum)
408*d14abf15SRobert Mustacchi     {
409*d14abf15SRobert Mustacchi     case USER_OPTION_CKSUM_L3:
410*d14abf15SRobert Mustacchi         pUM->devParams.enabled_oflds = (LM_OFFLOAD_TX_IP_CKSUM |
411*d14abf15SRobert Mustacchi                                         LM_OFFLOAD_RX_IP_CKSUM);
412*d14abf15SRobert Mustacchi         break;
413*d14abf15SRobert Mustacchi 
414*d14abf15SRobert Mustacchi     case USER_OPTION_CKSUM_L3_L4:
415*d14abf15SRobert Mustacchi         pUM->devParams.enabled_oflds = (LM_OFFLOAD_TX_IP_CKSUM  |
416*d14abf15SRobert Mustacchi                                         LM_OFFLOAD_RX_IP_CKSUM  |
417*d14abf15SRobert Mustacchi                                         LM_OFFLOAD_TX_TCP_CKSUM |
418*d14abf15SRobert Mustacchi                                         LM_OFFLOAD_RX_TCP_CKSUM |
419*d14abf15SRobert Mustacchi                                         LM_OFFLOAD_TX_UDP_CKSUM |
420*d14abf15SRobert Mustacchi                                         LM_OFFLOAD_RX_UDP_CKSUM);
421*d14abf15SRobert Mustacchi         break;
422*d14abf15SRobert Mustacchi 
423*d14abf15SRobert Mustacchi     case USER_OPTION_CKSUM_NONE:
424*d14abf15SRobert Mustacchi     default:
425*d14abf15SRobert Mustacchi         pUM->devParams.enabled_oflds = LM_OFFLOAD_NONE;
426*d14abf15SRobert Mustacchi         break;
427*d14abf15SRobert Mustacchi     }
428*d14abf15SRobert Mustacchi 
429*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "mtu",
430*d14abf15SRobert Mustacchi                   &option,
431*d14abf15SRobert Mustacchi                   pUM->devParams.mtu[LM_CLI_IDX_NDIS],
432*d14abf15SRobert Mustacchi                   B_FALSE);
433*d14abf15SRobert Mustacchi     pUM->devParams.mtu[LM_CLI_IDX_NDIS] =
434*d14abf15SRobert Mustacchi         (option < USER_OPTION_MTU_MIN) ?
435*d14abf15SRobert Mustacchi             USER_OPTION_MTU_MIN :
436*d14abf15SRobert Mustacchi             (option > USER_OPTION_MTU_MAX) ?
437*d14abf15SRobert Mustacchi                 USER_OPTION_MTU_MAX :
438*d14abf15SRobert Mustacchi                 option;
439*d14abf15SRobert Mustacchi     pUM->lm_dev.params.mtu[LM_CLI_IDX_NDIS] = pUM->devParams.mtu[LM_CLI_IDX_NDIS];
440*d14abf15SRobert Mustacchi 
441*d14abf15SRobert Mustacchi     pUM->devParams.mtu[LM_CLI_IDX_FCOE]     = LM_MTU_FCOE_DEFAULT;
442*d14abf15SRobert Mustacchi     pUM->lm_dev.params.mtu[LM_CLI_IDX_FCOE] = LM_MTU_FCOE_DEFAULT;
443*d14abf15SRobert Mustacchi 
444*d14abf15SRobert Mustacchi     pUM->lm_dev.params.mtu_max = (pUM->lm_dev.params.mtu[LM_CLI_IDX_NDIS] >
445*d14abf15SRobert Mustacchi                                   pUM->lm_dev.params.mtu[LM_CLI_IDX_FCOE]) ?
446*d14abf15SRobert Mustacchi                                      pUM->lm_dev.params.mtu[LM_CLI_IDX_NDIS] :
447*d14abf15SRobert Mustacchi                                      pUM->lm_dev.params.mtu[LM_CLI_IDX_FCOE];
448*d14abf15SRobert Mustacchi 
449*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "route_tx_ring_policy",
450*d14abf15SRobert Mustacchi                   &pUM->devParams.routeTxRingPolicy,
451*d14abf15SRobert Mustacchi                   pUM->devParams.routeTxRingPolicy,
452*d14abf15SRobert Mustacchi                   B_FALSE);
453*d14abf15SRobert Mustacchi     if ((pUM->devParams.routeTxRingPolicy != BNXE_ROUTE_RING_NONE) &&
454*d14abf15SRobert Mustacchi         (pUM->devParams.routeTxRingPolicy != BNXE_ROUTE_RING_TCPUDP) &&
455*d14abf15SRobert Mustacchi         (pUM->devParams.routeTxRingPolicy != BNXE_ROUTE_RING_DEST_MAC) &&
456*d14abf15SRobert Mustacchi         (pUM->devParams.routeTxRingPolicy != BNXE_ROUTE_RING_MSG_PRIO))
457*d14abf15SRobert Mustacchi     {
458*d14abf15SRobert Mustacchi         pUM->devParams.routeTxRingPolicy = BNXE_ROUTE_RING_TCPUDP;
459*d14abf15SRobert Mustacchi     }
460*d14abf15SRobert Mustacchi 
461*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "num_rings",
462*d14abf15SRobert Mustacchi                   &option,
463*d14abf15SRobert Mustacchi                   pUM->devParams.numRings,
464*d14abf15SRobert Mustacchi                   B_FALSE);
465*d14abf15SRobert Mustacchi     pUM->devParams.numRings = (option < USER_OPTION_NUM_RINGS_MIN) ?
466*d14abf15SRobert Mustacchi                                   USER_OPTION_NUM_RINGS_MIN :
467*d14abf15SRobert Mustacchi                                   (option > USER_OPTION_NUM_RINGS_MAX) ?
468*d14abf15SRobert Mustacchi                                       USER_OPTION_NUM_RINGS_MAX :
469*d14abf15SRobert Mustacchi                                       option;
470*d14abf15SRobert Mustacchi 
471*d14abf15SRobert Mustacchi     /* adjust for function mode defaults */
472*d14abf15SRobert Mustacchi     if (pUM->devParams.numRings == USER_OPTION_NUM_RINGS_DEFAULT)
473*d14abf15SRobert Mustacchi     {
474*d14abf15SRobert Mustacchi         pUM->devParams.numRings = (IS_MULTI_VNIC(&pUM->lm_dev)) ?
475*d14abf15SRobert Mustacchi                                       USER_OPTION_NUM_RINGS_DEFAULT_MF :
476*d14abf15SRobert Mustacchi                                       USER_OPTION_NUM_RINGS_DEFAULT_SF;
477*d14abf15SRobert Mustacchi     }
478*d14abf15SRobert Mustacchi 
479*d14abf15SRobert Mustacchi     /* numRings must be a power of two and <= max rss chains allowed */
480*d14abf15SRobert Mustacchi     for (i = 1; pUM->devParams.numRings >> i; i++) { ; }
481*d14abf15SRobert Mustacchi     pUM->devParams.numRings = (1 << (i - 1));
482*d14abf15SRobert Mustacchi     if (pUM->devParams.numRings > LM_MAX_RSS_CHAINS(&pUM->lm_dev))
483*d14abf15SRobert Mustacchi     {
484*d14abf15SRobert Mustacchi         pUM->devParams.numRings = LM_MAX_RSS_CHAINS(&pUM->lm_dev);
485*d14abf15SRobert Mustacchi     }
486*d14abf15SRobert Mustacchi 
487*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "rx_descs",
488*d14abf15SRobert Mustacchi                   &option,
489*d14abf15SRobert Mustacchi                   pUM->devParams.numRxDesc[LM_CLI_IDX_NDIS],
490*d14abf15SRobert Mustacchi                   B_FALSE);
491*d14abf15SRobert Mustacchi     pUM->devParams.numRxDesc[LM_CLI_IDX_NDIS] =
492*d14abf15SRobert Mustacchi         (option < USER_OPTION_BDS_MIN) ?
493*d14abf15SRobert Mustacchi             USER_OPTION_BDS_MIN :
494*d14abf15SRobert Mustacchi             (option > USER_OPTION_BDS_MAX) ?
495*d14abf15SRobert Mustacchi                 USER_OPTION_BDS_MAX :
496*d14abf15SRobert Mustacchi                 option;
497*d14abf15SRobert Mustacchi 
498*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "tx_descs",
499*d14abf15SRobert Mustacchi                   &option,
500*d14abf15SRobert Mustacchi                   pUM->devParams.numTxDesc[LM_CLI_IDX_NDIS],
501*d14abf15SRobert Mustacchi                   B_FALSE);
502*d14abf15SRobert Mustacchi     pUM->devParams.numTxDesc[LM_CLI_IDX_NDIS] =
503*d14abf15SRobert Mustacchi         (option < USER_OPTION_BDS_MIN) ?
504*d14abf15SRobert Mustacchi             USER_OPTION_BDS_MIN :
505*d14abf15SRobert Mustacchi             (option > USER_OPTION_BDS_MAX) ?
506*d14abf15SRobert Mustacchi                 USER_OPTION_BDS_MAX :
507*d14abf15SRobert Mustacchi                 option;
508*d14abf15SRobert Mustacchi 
509*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "rx_free_reclaim",
510*d14abf15SRobert Mustacchi                   &option,
511*d14abf15SRobert Mustacchi                   pUM->devParams.maxRxFree,
512*d14abf15SRobert Mustacchi                   B_FALSE);
513*d14abf15SRobert Mustacchi     pUM->devParams.maxRxFree =
514*d14abf15SRobert Mustacchi         (option < 0) ?
515*d14abf15SRobert Mustacchi             0 :
516*d14abf15SRobert Mustacchi             (option > pUM->devParams.numRxDesc[LM_CLI_IDX_NDIS]) ?
517*d14abf15SRobert Mustacchi                 pUM->devParams.numRxDesc[LM_CLI_IDX_NDIS] :
518*d14abf15SRobert Mustacchi                 option;
519*d14abf15SRobert Mustacchi 
520*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "tx_free_reclaim",
521*d14abf15SRobert Mustacchi                   &option,
522*d14abf15SRobert Mustacchi                   pUM->devParams.maxTxFree,
523*d14abf15SRobert Mustacchi                   B_FALSE);
524*d14abf15SRobert Mustacchi     pUM->devParams.maxTxFree =
525*d14abf15SRobert Mustacchi         (option < 0) ?
526*d14abf15SRobert Mustacchi             0 :
527*d14abf15SRobert Mustacchi             (option > pUM->devParams.numTxDesc[LM_CLI_IDX_NDIS]) ?
528*d14abf15SRobert Mustacchi                 pUM->devParams.numTxDesc[LM_CLI_IDX_NDIS] :
529*d14abf15SRobert Mustacchi                 option;
530*d14abf15SRobert Mustacchi 
531*d14abf15SRobert Mustacchi     /* threshold to enable double copy of receive packet */
532*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "rx_copy_threshold",
533*d14abf15SRobert Mustacchi                   &pUM->devParams.rxCopyThreshold,
534*d14abf15SRobert Mustacchi                   pUM->devParams.rxCopyThreshold,
535*d14abf15SRobert Mustacchi                   B_FALSE);
536*d14abf15SRobert Mustacchi 
537*d14abf15SRobert Mustacchi     /* threshold to enable double copy of transmit packet */
538*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "tx_copy_threshold",
539*d14abf15SRobert Mustacchi                   &pUM->devParams.txCopyThreshold,
540*d14abf15SRobert Mustacchi                   pUM->devParams.txCopyThreshold,
541*d14abf15SRobert Mustacchi                   B_FALSE);
542*d14abf15SRobert Mustacchi 
543*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "interrupt_coalesce",
544*d14abf15SRobert Mustacchi                   &pUM->devParams.intrCoalesce,
545*d14abf15SRobert Mustacchi                   pUM->devParams.intrCoalesce,
546*d14abf15SRobert Mustacchi                   B_TRUE);
547*d14abf15SRobert Mustacchi 
548*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "rx_interrupt_coalesce_usec",
549*d14abf15SRobert Mustacchi                   &option,
550*d14abf15SRobert Mustacchi                   pUM->devParams.intrRxPerSec,
551*d14abf15SRobert Mustacchi                   B_FALSE);
552*d14abf15SRobert Mustacchi     option = (option < USER_OPTION_INTR_COALESCE_MIN) ?
553*d14abf15SRobert Mustacchi                   USER_OPTION_INTR_COALESCE_MIN :
554*d14abf15SRobert Mustacchi                   (option > USER_OPTION_INTR_COALESCE_MAX) ?
555*d14abf15SRobert Mustacchi                       USER_OPTION_INTR_COALESCE_MAX :
556*d14abf15SRobert Mustacchi                       option;
557*d14abf15SRobert Mustacchi     pUM->devParams.intrRxPerSec = (1000000 / option); /* intrs per sec */
558*d14abf15SRobert Mustacchi 
559*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "tx_interrupt_coalesce_usec",
560*d14abf15SRobert Mustacchi                   &option,
561*d14abf15SRobert Mustacchi                   pUM->devParams.intrTxPerSec,
562*d14abf15SRobert Mustacchi                   B_FALSE);
563*d14abf15SRobert Mustacchi     option = (option < USER_OPTION_INTR_COALESCE_MIN) ?
564*d14abf15SRobert Mustacchi                  USER_OPTION_INTR_COALESCE_MIN :
565*d14abf15SRobert Mustacchi                  (option > USER_OPTION_INTR_COALESCE_MAX) ?
566*d14abf15SRobert Mustacchi                      USER_OPTION_INTR_COALESCE_MAX :
567*d14abf15SRobert Mustacchi                      option;
568*d14abf15SRobert Mustacchi     pUM->devParams.intrTxPerSec = (1000000 / option); /* intrs per sec */
569*d14abf15SRobert Mustacchi 
570*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "disable_msix",
571*d14abf15SRobert Mustacchi                   &pUM->devParams.disableMsix,
572*d14abf15SRobert Mustacchi                   pUM->devParams.disableMsix,
573*d14abf15SRobert Mustacchi                   B_TRUE);
574*d14abf15SRobert Mustacchi 
575*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "l2_fw_flow_ctrl",
576*d14abf15SRobert Mustacchi                   &pUM->devParams.l2_fw_flow_ctrl,
577*d14abf15SRobert Mustacchi                   pUM->devParams.l2_fw_flow_ctrl,
578*d14abf15SRobert Mustacchi                   B_TRUE);
579*d14abf15SRobert Mustacchi 
580*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "autogreeen_enable",
581*d14abf15SRobert Mustacchi                   &pUM->devParams.autogreeenEnable,
582*d14abf15SRobert Mustacchi                   pUM->devParams.autogreeenEnable,
583*d14abf15SRobert Mustacchi                   B_TRUE);
584*d14abf15SRobert Mustacchi     pUM->lm_dev.params.autogreeen =
585*d14abf15SRobert Mustacchi         (pUM->devParams.autogreeenEnable) ?
586*d14abf15SRobert Mustacchi             LM_AUTOGREEEN_NVRAM /* maybe enabled or disabled */ :
587*d14abf15SRobert Mustacchi             LM_AUTOGREEEN_DISABLED;
588*d14abf15SRobert Mustacchi 
589*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "lso_enable",
590*d14abf15SRobert Mustacchi                   &pUM->devParams.lsoEnable,
591*d14abf15SRobert Mustacchi                   pUM->devParams.lsoEnable,
592*d14abf15SRobert Mustacchi                   B_TRUE);
593*d14abf15SRobert Mustacchi 
594*d14abf15SRobert Mustacchi     /* Only allow LSO if Tx TCP checksum is turned on. */
595*d14abf15SRobert Mustacchi     if (!(pUM->devParams.enabled_oflds & LM_OFFLOAD_TX_TCP_CKSUM))
596*d14abf15SRobert Mustacchi     {
597*d14abf15SRobert Mustacchi         pUM->devParams.lsoEnable = B_FALSE;
598*d14abf15SRobert Mustacchi     }
599*d14abf15SRobert Mustacchi 
600*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "log_enable",
601*d14abf15SRobert Mustacchi                   &pUM->devParams.logEnable,
602*d14abf15SRobert Mustacchi                   pUM->devParams.logEnable,
603*d14abf15SRobert Mustacchi                   B_TRUE);
604*d14abf15SRobert Mustacchi 
605*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "fcoe_enable",
606*d14abf15SRobert Mustacchi                   &pUM->devParams.fcoeEnable,
607*d14abf15SRobert Mustacchi                   pUM->devParams.fcoeEnable,
608*d14abf15SRobert Mustacchi                   B_TRUE);
609*d14abf15SRobert Mustacchi 
610*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "link_remote_fault_detect",
611*d14abf15SRobert Mustacchi                   &pUM->devParams.linkRemoteFaultDetect,
612*d14abf15SRobert Mustacchi                   pUM->devParams.linkRemoteFaultDetect,
613*d14abf15SRobert Mustacchi                   B_TRUE);
614*d14abf15SRobert Mustacchi 
615*d14abf15SRobert Mustacchi     if (!pUM->devParams.linkRemoteFaultDetect)
616*d14abf15SRobert Mustacchi     {
617*d14abf15SRobert Mustacchi         SET_FLAGS(pUM->lm_dev.params.link.feature_config_flags,
618*d14abf15SRobert Mustacchi                   ELINK_FEATURE_CONFIG_DISABLE_REMOTE_FAULT_DET);
619*d14abf15SRobert Mustacchi     }
620*d14abf15SRobert Mustacchi 
621*d14abf15SRobert Mustacchi     BnxeCfgGetVal(pUM, "debug_level",
622*d14abf15SRobert Mustacchi                   &option,
623*d14abf15SRobert Mustacchi                   pUM->devParams.debug_level,
624*d14abf15SRobert Mustacchi                   B_FALSE);
625*d14abf15SRobert Mustacchi     pUM->devParams.debug_level =
626*d14abf15SRobert Mustacchi         (option < 0) ?
627*d14abf15SRobert Mustacchi             0 :
628*d14abf15SRobert Mustacchi             ((uint32_t)option > (CP_ALL | LV_MASK)) ?
629*d14abf15SRobert Mustacchi                 (CP_ALL | LV_MASK) :
630*d14abf15SRobert Mustacchi                 (uint32_t)option;
631*d14abf15SRobert Mustacchi 
632*d14abf15SRobert Mustacchi     /* Adjust the number of rx/tx descriptors if in multi-function mode. */
633*d14abf15SRobert Mustacchi 
634*d14abf15SRobert Mustacchi     if (IS_MULTI_VNIC(&pUM->lm_dev))
635*d14abf15SRobert Mustacchi     {
636*d14abf15SRobert Mustacchi         if (!(pUM->devParams.numRxDesc[LM_CLI_IDX_NDIS] /=
637*d14abf15SRobert Mustacchi               USER_OPTION_MF_BDS_DIVISOR))
638*d14abf15SRobert Mustacchi         {
639*d14abf15SRobert Mustacchi             pUM->devParams.numRxDesc[LM_CLI_IDX_NDIS] = USER_OPTION_BDS_MIN;
640*d14abf15SRobert Mustacchi         }
641*d14abf15SRobert Mustacchi 
642*d14abf15SRobert Mustacchi         if (!(pUM->devParams.numTxDesc[LM_CLI_IDX_NDIS] /=
643*d14abf15SRobert Mustacchi               USER_OPTION_MF_BDS_DIVISOR))
644*d14abf15SRobert Mustacchi         {
645*d14abf15SRobert Mustacchi             pUM->devParams.numTxDesc[LM_CLI_IDX_NDIS] = USER_OPTION_BDS_MIN;
646*d14abf15SRobert Mustacchi         }
647*d14abf15SRobert Mustacchi     }
648*d14abf15SRobert Mustacchi }
649*d14abf15SRobert Mustacchi 
650*d14abf15SRobert Mustacchi 
BnxeCfgReset(um_device_t * pUM)651*d14abf15SRobert Mustacchi void BnxeCfgReset(um_device_t * pUM)
652*d14abf15SRobert Mustacchi {
653*d14abf15SRobert Mustacchi     /* reset the link status */
654*d14abf15SRobert Mustacchi     pUM->props.link_speed   = 0;
655*d14abf15SRobert Mustacchi     pUM->props.link_duplex  = B_FALSE;
656*d14abf15SRobert Mustacchi     pUM->props.link_txpause = B_FALSE;
657*d14abf15SRobert Mustacchi     pUM->props.link_rxpause = B_FALSE;
658*d14abf15SRobert Mustacchi 
659*d14abf15SRobert Mustacchi     /* reset the link partner status */
660*d14abf15SRobert Mustacchi     pUM->remote.link_autoneg   = B_FALSE;
661*d14abf15SRobert Mustacchi     pUM->remote.param_20000fdx = B_FALSE;
662*d14abf15SRobert Mustacchi     pUM->remote.param_10000fdx = B_FALSE;
663*d14abf15SRobert Mustacchi     pUM->remote.param_2500fdx  = B_FALSE;
664*d14abf15SRobert Mustacchi     pUM->remote.param_1000fdx  = B_FALSE;
665*d14abf15SRobert Mustacchi     pUM->remote.param_100fdx   = B_FALSE;
666*d14abf15SRobert Mustacchi     pUM->remote.param_100hdx   = B_FALSE;
667*d14abf15SRobert Mustacchi     pUM->remote.param_10fdx    = B_FALSE;
668*d14abf15SRobert Mustacchi     pUM->remote.param_10hdx    = B_FALSE;
669*d14abf15SRobert Mustacchi     pUM->remote.param_txpause  = B_FALSE;
670*d14abf15SRobert Mustacchi     pUM->remote.param_rxpause  = B_FALSE;
671*d14abf15SRobert Mustacchi 
672*d14abf15SRobert Mustacchi     /* reset the configuration from the configured hardware default */
673*d14abf15SRobert Mustacchi     bcopy(&pUM->hwinit, &pUM->curcfg, sizeof(BnxePhyCfg));
674*d14abf15SRobert Mustacchi }
675*d14abf15SRobert Mustacchi 
676