4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 2014 QLogic Corporation
24 * The contents of this file are subject to the terms of the
25 * QLogic End User License (the "License").
26 * You may not use this file except in compliance with the License.
28 * You can obtain a copy of the License at
29 * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
30 * QLogic_End_User_Software_License.txt
31 * See the License for the specific language governing permissions
32 * and limitations under the License.
36 * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
42 /* these are the default phy link configs */
43 BnxeLinkCfg bnxeLinkCfg
=
45 B_TRUE
, /* link_autoneg */
46 B_TRUE
, /* param_20000fdx */
47 B_TRUE
, /* param_10000fdx */
48 B_TRUE
, /* param_2500fdx */
49 B_TRUE
, /* param_1000fdx */
50 B_FALSE
, /* param_100fdx */
51 B_FALSE
, /* param_100hdx */
52 B_FALSE
, /* param_10fdx */
53 B_FALSE
, /* param_10hdx */
54 B_TRUE
, /* param_txpause */
55 B_TRUE
/* param_rxpause */
59 static void BnxeCfgGetVal(um_device_t
* pUM
,
66 #define BNXE_CFG_NAME_LEN_MAX 128
67 char name
[BNXE_CFG_NAME_LEN_MAX
];
69 /* first check if the hardcoded default has been overridden */
71 snprintf(name
, BNXE_CFG_NAME_LEN_MAX
, "default_%s", pName
);
73 val
= ddi_prop_get_int(DDI_DEV_T_ANY
,
75 (DDI_PROP_NOTPROM
| DDI_PROP_DONTPASS
),
79 /* now check for a config for this specific instance */
81 snprintf(name
, BNXE_CFG_NAME_LEN_MAX
, "bnxe%d_%s", pUM
->instance
, pName
);
83 val
= ddi_prop_get_int(DDI_DEV_T_ANY
,
85 (DDI_PROP_NOTPROM
| DDI_PROP_DONTPASS
),
91 *((boolean_t
*)pVal
) = (val
) ? B_TRUE
: B_FALSE
;
100 void BnxeCfg_LLDP_DCBX(um_device_t
* pUM
)
102 lm_device_t
* pLM
= &pUM
->lm_dev
;
106 /* DCBX defaults configuration: DCBX not supported by default. */
107 pLM
->params
.dcbx_port_params
.dcbx_enabled
= FALSE
;
109 /* DCBX defaults configuration: PFC not supported. */
110 pLM
->params
.dcbx_port_params
.pfc
.enabled
= FALSE
;
112 for (i
= 0; i
< LLFC_DRIVER_TRAFFIC_TYPE_MAX
; i
++)
114 pLM
->params
.dcbx_port_params
.app
.traffic_type_priority
[i
] =
115 INVALID_TRAFFIC_TYPE_PRIORITY
;
118 pLM
->params
.dcbx_port_params
.pfc
.priority_non_pauseable_mask
= 0;
120 memset(&pLM
->params
.lldp_config_params
, 0xFF,
121 sizeof(pLM
->params
.lldp_config_params
));
122 memset(&pLM
->params
.dcbx_config_params
, 0xFF,
123 sizeof(pLM
->params
.dcbx_config_params
));
125 pLM
->params
.dcbx_config_params
.dcb_enable
= 1;
126 pLM
->params
.dcbx_config_params
.admin_dcbx_enable
= 1;
128 BnxeCfgGetVal(pUM
, "lldp_overwrite_settings",
129 &pLM
->params
.lldp_config_params
.overwrite_settings
,
130 pLM
->params
.lldp_config_params
.overwrite_settings
,
133 BnxeCfgGetVal(pUM
, "lldp_msg_tx_hold",
134 &pLM
->params
.lldp_config_params
.msg_tx_hold
,
135 pLM
->params
.lldp_config_params
.msg_tx_hold
,
138 BnxeCfgGetVal(pUM
, "lldp_msg_fast_tx",
139 &pLM
->params
.lldp_config_params
.msg_fast_tx
,
140 pLM
->params
.lldp_config_params
.msg_fast_tx
,
143 BnxeCfgGetVal(pUM
, "lldp_tx_credit_max",
144 &pLM
->params
.lldp_config_params
.tx_credit_max
,
145 pLM
->params
.lldp_config_params
.tx_credit_max
,
148 BnxeCfgGetVal(pUM
, "lldp_msg_tx_interval",
149 &pLM
->params
.lldp_config_params
.msg_tx_interval
,
150 pLM
->params
.lldp_config_params
.msg_tx_interval
,
153 BnxeCfgGetVal(pUM
, "lldp_tx_fast",
154 &pLM
->params
.lldp_config_params
.tx_fast
,
155 pLM
->params
.lldp_config_params
.tx_fast
,
158 BnxeCfgGetVal(pUM
, "dcbx_dcb_enable",
159 &pLM
->params
.dcbx_config_params
.dcb_enable
,
160 pLM
->params
.dcbx_config_params
.dcb_enable
,
163 BnxeCfgGetVal(pUM
, "dcbx_admin_dcbx_enable",
164 &pLM
->params
.dcbx_config_params
.admin_dcbx_enable
,
165 pLM
->params
.dcbx_config_params
.admin_dcbx_enable
,
168 BnxeCfgGetVal(pUM
, "dcbx_overwrite_settings",
169 &pLM
->params
.dcbx_config_params
.overwrite_settings
,
170 pLM
->params
.dcbx_config_params
.overwrite_settings
,
173 BnxeCfgGetVal(pUM
, "dcbx_admin_dcbx_version",
174 &pLM
->params
.dcbx_config_params
.admin_dcbx_version
,
175 pLM
->params
.dcbx_config_params
.admin_dcbx_version
,
178 BnxeCfgGetVal(pUM
, "dcbx_admin_ets_enable",
179 &pLM
->params
.dcbx_config_params
.admin_ets_enable
,
180 pLM
->params
.dcbx_config_params
.admin_ets_enable
,
183 BnxeCfgGetVal(pUM
, "dcbx_admin_pfc_enable",
184 &pLM
->params
.dcbx_config_params
.admin_pfc_enable
,
185 pLM
->params
.dcbx_config_params
.admin_pfc_enable
,
188 BnxeCfgGetVal(pUM
, "dcbx_admin_tc_supported_tx_enable",
189 &pLM
->params
.dcbx_config_params
.admin_tc_supported_tx_enable
,
190 pLM
->params
.dcbx_config_params
.admin_tc_supported_tx_enable
,
193 BnxeCfgGetVal(pUM
, "dcbx_admin_ets_configuration_tx_enable",
194 &pLM
->params
.dcbx_config_params
.admin_ets_configuration_tx_enable
,
195 pLM
->params
.dcbx_config_params
.admin_ets_configuration_tx_enable
,
198 BnxeCfgGetVal(pUM
, "dcbx_admin_ets_recommendation_tx_enable",
199 &pLM
->params
.dcbx_config_params
.admin_ets_recommendation_tx_enable
,
200 pLM
->params
.dcbx_config_params
.admin_ets_recommendation_tx_enable
,
203 BnxeCfgGetVal(pUM
, "dcbx_admin_pfc_tx_enable",
204 &pLM
->params
.dcbx_config_params
.admin_pfc_tx_enable
,
205 pLM
->params
.dcbx_config_params
.admin_pfc_tx_enable
,
208 BnxeCfgGetVal(pUM
, "dcbx_admin_application_priority_tx_enable",
209 &pLM
->params
.dcbx_config_params
.admin_application_priority_tx_enable
,
210 pLM
->params
.dcbx_config_params
.admin_application_priority_tx_enable
,
213 BnxeCfgGetVal(pUM
, "dcbx_admin_ets_willing",
214 &pLM
->params
.dcbx_config_params
.admin_ets_willing
,
215 pLM
->params
.dcbx_config_params
.admin_ets_willing
,
218 BnxeCfgGetVal(pUM
, "dcbx_admin_pfc_willing",
219 &pLM
->params
.dcbx_config_params
.admin_pfc_willing
,
220 pLM
->params
.dcbx_config_params
.admin_pfc_willing
,
223 BnxeCfgGetVal(pUM
, "dcbx_admin_ets_reco_valid",
224 &pLM
->params
.dcbx_config_params
.admin_ets_reco_valid
,
225 pLM
->params
.dcbx_config_params
.admin_ets_reco_valid
,
228 BnxeCfgGetVal(pUM
, "dcbx_admin_app_priority_willing",
229 &pLM
->params
.dcbx_config_params
.admin_app_priority_willing
,
230 pLM
->params
.dcbx_config_params
.admin_app_priority_willing
,
233 for (i
= 0; i
< 8; i
++)
235 snprintf(name
, sizeof(name
), "dcbx_admin_configuration_bw_percentage_%d", i
);
236 BnxeCfgGetVal(pUM
, name
,
237 &pLM
->params
.dcbx_config_params
.admin_configuration_bw_percentage
[i
],
238 pLM
->params
.dcbx_config_params
.admin_configuration_bw_percentage
[i
],
242 for (i
= 0; i
< 8; i
++)
244 snprintf(name
, sizeof(name
), "dcbx_admin_configuration_ets_pg_%d", i
);
245 BnxeCfgGetVal(pUM
, name
,
246 &pLM
->params
.dcbx_config_params
.admin_configuration_ets_pg
[i
],
247 pLM
->params
.dcbx_config_params
.admin_configuration_ets_pg
[i
],
251 for (i
= 0; i
< 8; i
++)
253 snprintf(name
, sizeof(name
), "dcbx_admin_recommendation_bw_percentage_%d", i
);
254 BnxeCfgGetVal(pUM
, name
,
255 &pLM
->params
.dcbx_config_params
.admin_recommendation_bw_percentage
[i
],
256 pLM
->params
.dcbx_config_params
.admin_recommendation_bw_percentage
[i
],
260 for (i
= 0; i
< 8; i
++)
262 snprintf(name
, sizeof(name
), "dcbx_admin_recommendation_ets_pg_%d", i
);
263 BnxeCfgGetVal(pUM
, name
,
264 &pLM
->params
.dcbx_config_params
.admin_recommendation_ets_pg
[i
],
265 pLM
->params
.dcbx_config_params
.admin_recommendation_ets_pg
[i
],
269 BnxeCfgGetVal(pUM
, "dcbx_admin_pfc_bitmap",
270 &pLM
->params
.dcbx_config_params
.admin_pfc_bitmap
,
271 pLM
->params
.dcbx_config_params
.admin_pfc_bitmap
,
274 for (i
= 0; i
< 4; i
++)
276 snprintf(name
, sizeof(name
), "dcbx_admin_priority_app_table_%d_valid", i
);
277 BnxeCfgGetVal(pUM
, name
,
278 &pLM
->params
.dcbx_config_params
.admin_priority_app_table
[i
].valid
,
279 pLM
->params
.dcbx_config_params
.admin_priority_app_table
[i
].valid
,
282 snprintf(name
, sizeof(name
), "dcbx_admin_priority_app_table_%d_priority", i
);
283 BnxeCfgGetVal(pUM
, name
,
284 &pLM
->params
.dcbx_config_params
.admin_priority_app_table
[i
].priority
,
285 pLM
->params
.dcbx_config_params
.admin_priority_app_table
[i
].priority
,
288 snprintf(name
, sizeof(name
), "dcbx_admin_priority_app_table_%d_traffic_type", i
);
289 BnxeCfgGetVal(pUM
, name
,
290 &pLM
->params
.dcbx_config_params
.admin_priority_app_table
[i
].traffic_type
,
291 pLM
->params
.dcbx_config_params
.admin_priority_app_table
[i
].traffic_type
,
294 snprintf(name
, sizeof(name
), "dcbx_admin_priority_app_table_%d_app_id", i
);
295 BnxeCfgGetVal(pUM
, name
,
296 &pLM
->params
.dcbx_config_params
.admin_priority_app_table
[i
].app_id
,
297 pLM
->params
.dcbx_config_params
.admin_priority_app_table
[i
].app_id
,
301 BnxeCfgGetVal(pUM
, "dcbx_admin_default_priority",
302 &pLM
->params
.dcbx_config_params
.admin_default_priority
,
303 pLM
->params
.dcbx_config_params
.admin_default_priority
,
308 void BnxeCfgInit(um_device_t
* pUM
)
312 /* set the defaults */
313 bcopy(&bnxeLinkCfg
, &pUM
->hwinit
.lnkcfg
, sizeof(BnxeLinkCfg
));
315 pUM
->hwinit
.flow_autoneg
= B_TRUE
;
316 pUM
->devParams
.checksum
= USER_OPTION_CKSUM_DEFAULT
;
317 pUM
->devParams
.enabled_oflds
= LM_OFFLOAD_NONE
;
318 pUM
->devParams
.mtu
[LM_CLI_IDX_NDIS
] = USER_OPTION_MTU_DEFAULT
;
319 pUM
->devParams
.numRings
= USER_OPTION_NUM_RINGS_DEFAULT
;
320 pUM
->devParams
.numRxDesc
[LM_CLI_IDX_NDIS
] = USER_OPTION_RX_BDS_DEFAULT
;
321 pUM
->devParams
.numTxDesc
[LM_CLI_IDX_NDIS
] = USER_OPTION_TX_BDS_DEFAULT
;
322 pUM
->devParams
.maxRxFree
= USER_OPTION_RX_MAX_FREE_DEFAULT
;
323 pUM
->devParams
.maxTxFree
= USER_OPTION_TX_MAX_FREE_DEFAULT
;
324 pUM
->devParams
.rxCopyThreshold
= USER_OPTION_RX_DCOPY_THRESH_DEFAULT
;
325 pUM
->devParams
.txCopyThreshold
= USER_OPTION_TX_DCOPY_THRESH_DEFAULT
;
326 pUM
->devParams
.intrCoalesce
= B_TRUE
;
327 pUM
->devParams
.intrRxPerSec
= USER_OPTION_INTR_COALESCE_RX_DEFAULT
;
328 pUM
->devParams
.intrTxPerSec
= USER_OPTION_INTR_COALESCE_TX_DEFAULT
;
329 pUM
->devParams
.disableMsix
= B_FALSE
;
330 pUM
->devParams
.l2_fw_flow_ctrl
= B_FALSE
;
331 pUM
->devParams
.autogreeenEnable
= B_TRUE
;
332 pUM
->devParams
.lsoEnable
= B_TRUE
;
333 pUM
->devParams
.logEnable
= B_TRUE
;
334 pUM
->devParams
.routeTxRingPolicy
= BNXE_ROUTE_RING_TCPUDP
;
335 pUM
->devParams
.fcoeEnable
= B_FALSE
;
336 pUM
->devParams
.linkRemoteFaultDetect
= B_TRUE
;
338 /* set the LLDP/DCBX defaults and get settings from bnxe.conf */
339 BnxeCfg_LLDP_DCBX(pUM
);
341 /* override the defaults based on what is set in bnxe.conf */
343 BnxeCfgGetVal(pUM
, "adv_autoneg_cap",
344 &pUM
->hwinit
.lnkcfg
.link_autoneg
,
345 pUM
->hwinit
.lnkcfg
.link_autoneg
,
348 BnxeCfgGetVal(pUM
, "adv_20000fdx_cap",
349 &pUM
->hwinit
.lnkcfg
.param_20000fdx
,
350 pUM
->hwinit
.lnkcfg
.param_20000fdx
,
353 BnxeCfgGetVal(pUM
, "adv_10000fdx_cap",
354 &pUM
->hwinit
.lnkcfg
.param_10000fdx
,
355 pUM
->hwinit
.lnkcfg
.param_10000fdx
,
358 BnxeCfgGetVal(pUM
, "adv_2500fdx_cap",
359 &pUM
->hwinit
.lnkcfg
.param_2500fdx
,
360 pUM
->hwinit
.lnkcfg
.param_2500fdx
,
363 BnxeCfgGetVal(pUM
, "adv_1000fdx_cap",
364 &pUM
->hwinit
.lnkcfg
.param_1000fdx
,
365 pUM
->hwinit
.lnkcfg
.param_1000fdx
,
368 BnxeCfgGetVal(pUM
, "adv_100fdx_cap",
369 &pUM
->hwinit
.lnkcfg
.param_100fdx
,
370 pUM
->hwinit
.lnkcfg
.param_100fdx
,
373 BnxeCfgGetVal(pUM
, "adv_100hdx_cap",
374 &pUM
->hwinit
.lnkcfg
.param_100hdx
,
375 pUM
->hwinit
.lnkcfg
.param_100hdx
,
378 BnxeCfgGetVal(pUM
, "adv_10fdx_cap",
379 &pUM
->hwinit
.lnkcfg
.param_10fdx
,
380 pUM
->hwinit
.lnkcfg
.param_10fdx
,
383 BnxeCfgGetVal(pUM
, "adv_10hdx_cap",
384 &pUM
->hwinit
.lnkcfg
.param_10hdx
,
385 pUM
->hwinit
.lnkcfg
.param_10hdx
,
388 BnxeCfgGetVal(pUM
, "txpause_cap",
389 &pUM
->hwinit
.lnkcfg
.param_txpause
,
390 pUM
->hwinit
.lnkcfg
.param_txpause
,
393 BnxeCfgGetVal(pUM
, "rxpause_cap",
394 &pUM
->hwinit
.lnkcfg
.param_rxpause
,
395 pUM
->hwinit
.lnkcfg
.param_rxpause
,
398 BnxeCfgGetVal(pUM
, "autoneg_flow",
399 &pUM
->hwinit
.flow_autoneg
,
400 pUM
->hwinit
.flow_autoneg
,
403 BnxeCfgGetVal(pUM
, "checksum",
404 &pUM
->devParams
.checksum
,
405 pUM
->devParams
.checksum
,
407 switch (pUM
->devParams
.checksum
)
409 case USER_OPTION_CKSUM_L3
:
410 pUM
->devParams
.enabled_oflds
= (LM_OFFLOAD_TX_IP_CKSUM
|
411 LM_OFFLOAD_RX_IP_CKSUM
);
414 case USER_OPTION_CKSUM_L3_L4
:
415 pUM
->devParams
.enabled_oflds
= (LM_OFFLOAD_TX_IP_CKSUM
|
416 LM_OFFLOAD_RX_IP_CKSUM
|
417 LM_OFFLOAD_TX_TCP_CKSUM
|
418 LM_OFFLOAD_RX_TCP_CKSUM
|
419 LM_OFFLOAD_TX_UDP_CKSUM
|
420 LM_OFFLOAD_RX_UDP_CKSUM
);
423 case USER_OPTION_CKSUM_NONE
:
425 pUM
->devParams
.enabled_oflds
= LM_OFFLOAD_NONE
;
429 BnxeCfgGetVal(pUM
, "mtu",
431 pUM
->devParams
.mtu
[LM_CLI_IDX_NDIS
],
433 pUM
->devParams
.mtu
[LM_CLI_IDX_NDIS
] =
434 (option
< USER_OPTION_MTU_MIN
) ?
435 USER_OPTION_MTU_MIN
:
436 (option
> USER_OPTION_MTU_MAX
) ?
437 USER_OPTION_MTU_MAX
:
439 pUM
->lm_dev
.params
.mtu
[LM_CLI_IDX_NDIS
] = pUM
->devParams
.mtu
[LM_CLI_IDX_NDIS
];
441 pUM
->devParams
.mtu
[LM_CLI_IDX_FCOE
] = LM_MTU_FCOE_DEFAULT
;
442 pUM
->lm_dev
.params
.mtu
[LM_CLI_IDX_FCOE
] = LM_MTU_FCOE_DEFAULT
;
444 pUM
->lm_dev
.params
.mtu_max
= (pUM
->lm_dev
.params
.mtu
[LM_CLI_IDX_NDIS
] >
445 pUM
->lm_dev
.params
.mtu
[LM_CLI_IDX_FCOE
]) ?
446 pUM
->lm_dev
.params
.mtu
[LM_CLI_IDX_NDIS
] :
447 pUM
->lm_dev
.params
.mtu
[LM_CLI_IDX_FCOE
];
449 BnxeCfgGetVal(pUM
, "route_tx_ring_policy",
450 &pUM
->devParams
.routeTxRingPolicy
,
451 pUM
->devParams
.routeTxRingPolicy
,
453 if ((pUM
->devParams
.routeTxRingPolicy
!= BNXE_ROUTE_RING_NONE
) &&
454 (pUM
->devParams
.routeTxRingPolicy
!= BNXE_ROUTE_RING_TCPUDP
) &&
455 (pUM
->devParams
.routeTxRingPolicy
!= BNXE_ROUTE_RING_DEST_MAC
) &&
456 (pUM
->devParams
.routeTxRingPolicy
!= BNXE_ROUTE_RING_MSG_PRIO
))
458 pUM
->devParams
.routeTxRingPolicy
= BNXE_ROUTE_RING_TCPUDP
;
461 BnxeCfgGetVal(pUM
, "num_rings",
463 pUM
->devParams
.numRings
,
465 pUM
->devParams
.numRings
= (option
< USER_OPTION_NUM_RINGS_MIN
) ?
466 USER_OPTION_NUM_RINGS_MIN
:
467 (option
> USER_OPTION_NUM_RINGS_MAX
) ?
468 USER_OPTION_NUM_RINGS_MAX
:
471 /* adjust for function mode defaults */
472 if (pUM
->devParams
.numRings
== USER_OPTION_NUM_RINGS_DEFAULT
)
474 pUM
->devParams
.numRings
= (IS_MULTI_VNIC(&pUM
->lm_dev
)) ?
475 USER_OPTION_NUM_RINGS_DEFAULT_MF
:
476 USER_OPTION_NUM_RINGS_DEFAULT_SF
;
479 /* numRings must be a power of two and <= max rss chains allowed */
480 for (i
= 1; pUM
->devParams
.numRings
>> i
; i
++) { ; }
481 pUM
->devParams
.numRings
= (1 << (i
- 1));
482 if (pUM
->devParams
.numRings
> LM_MAX_RSS_CHAINS(&pUM
->lm_dev
))
484 pUM
->devParams
.numRings
= LM_MAX_RSS_CHAINS(&pUM
->lm_dev
);
487 BnxeCfgGetVal(pUM
, "rx_descs",
489 pUM
->devParams
.numRxDesc
[LM_CLI_IDX_NDIS
],
491 pUM
->devParams
.numRxDesc
[LM_CLI_IDX_NDIS
] =
492 (option
< USER_OPTION_BDS_MIN
) ?
493 USER_OPTION_BDS_MIN
:
494 (option
> USER_OPTION_BDS_MAX
) ?
495 USER_OPTION_BDS_MAX
:
498 BnxeCfgGetVal(pUM
, "tx_descs",
500 pUM
->devParams
.numTxDesc
[LM_CLI_IDX_NDIS
],
502 pUM
->devParams
.numTxDesc
[LM_CLI_IDX_NDIS
] =
503 (option
< USER_OPTION_BDS_MIN
) ?
504 USER_OPTION_BDS_MIN
:
505 (option
> USER_OPTION_BDS_MAX
) ?
506 USER_OPTION_BDS_MAX
:
509 BnxeCfgGetVal(pUM
, "rx_free_reclaim",
511 pUM
->devParams
.maxRxFree
,
513 pUM
->devParams
.maxRxFree
=
516 (option
> pUM
->devParams
.numRxDesc
[LM_CLI_IDX_NDIS
]) ?
517 pUM
->devParams
.numRxDesc
[LM_CLI_IDX_NDIS
] :
520 BnxeCfgGetVal(pUM
, "tx_free_reclaim",
522 pUM
->devParams
.maxTxFree
,
524 pUM
->devParams
.maxTxFree
=
527 (option
> pUM
->devParams
.numTxDesc
[LM_CLI_IDX_NDIS
]) ?
528 pUM
->devParams
.numTxDesc
[LM_CLI_IDX_NDIS
] :
531 /* threshold to enable double copy of receive packet */
532 BnxeCfgGetVal(pUM
, "rx_copy_threshold",
533 &pUM
->devParams
.rxCopyThreshold
,
534 pUM
->devParams
.rxCopyThreshold
,
537 /* threshold to enable double copy of transmit packet */
538 BnxeCfgGetVal(pUM
, "tx_copy_threshold",
539 &pUM
->devParams
.txCopyThreshold
,
540 pUM
->devParams
.txCopyThreshold
,
543 BnxeCfgGetVal(pUM
, "interrupt_coalesce",
544 &pUM
->devParams
.intrCoalesce
,
545 pUM
->devParams
.intrCoalesce
,
548 BnxeCfgGetVal(pUM
, "rx_interrupt_coalesce_usec",
550 pUM
->devParams
.intrRxPerSec
,
552 option
= (option
< USER_OPTION_INTR_COALESCE_MIN
) ?
553 USER_OPTION_INTR_COALESCE_MIN
:
554 (option
> USER_OPTION_INTR_COALESCE_MAX
) ?
555 USER_OPTION_INTR_COALESCE_MAX
:
557 pUM
->devParams
.intrRxPerSec
= (1000000 / option
); /* intrs per sec */
559 BnxeCfgGetVal(pUM
, "tx_interrupt_coalesce_usec",
561 pUM
->devParams
.intrTxPerSec
,
563 option
= (option
< USER_OPTION_INTR_COALESCE_MIN
) ?
564 USER_OPTION_INTR_COALESCE_MIN
:
565 (option
> USER_OPTION_INTR_COALESCE_MAX
) ?
566 USER_OPTION_INTR_COALESCE_MAX
:
568 pUM
->devParams
.intrTxPerSec
= (1000000 / option
); /* intrs per sec */
570 BnxeCfgGetVal(pUM
, "disable_msix",
571 &pUM
->devParams
.disableMsix
,
572 pUM
->devParams
.disableMsix
,
575 BnxeCfgGetVal(pUM
, "l2_fw_flow_ctrl",
576 &pUM
->devParams
.l2_fw_flow_ctrl
,
577 pUM
->devParams
.l2_fw_flow_ctrl
,
580 BnxeCfgGetVal(pUM
, "autogreeen_enable",
581 &pUM
->devParams
.autogreeenEnable
,
582 pUM
->devParams
.autogreeenEnable
,
584 pUM
->lm_dev
.params
.autogreeen
=
585 (pUM
->devParams
.autogreeenEnable
) ?
586 LM_AUTOGREEEN_NVRAM
/* maybe enabled or disabled */ :
587 LM_AUTOGREEEN_DISABLED
;
589 BnxeCfgGetVal(pUM
, "lso_enable",
590 &pUM
->devParams
.lsoEnable
,
591 pUM
->devParams
.lsoEnable
,
594 /* Only allow LSO if Tx TCP checksum is turned on. */
595 if (!(pUM
->devParams
.enabled_oflds
& LM_OFFLOAD_TX_TCP_CKSUM
))
597 pUM
->devParams
.lsoEnable
= B_FALSE
;
600 BnxeCfgGetVal(pUM
, "log_enable",
601 &pUM
->devParams
.logEnable
,
602 pUM
->devParams
.logEnable
,
605 BnxeCfgGetVal(pUM
, "fcoe_enable",
606 &pUM
->devParams
.fcoeEnable
,
607 pUM
->devParams
.fcoeEnable
,
610 BnxeCfgGetVal(pUM
, "link_remote_fault_detect",
611 &pUM
->devParams
.linkRemoteFaultDetect
,
612 pUM
->devParams
.linkRemoteFaultDetect
,
615 if (!pUM
->devParams
.linkRemoteFaultDetect
)
617 SET_FLAGS(pUM
->lm_dev
.params
.link
.feature_config_flags
,
618 ELINK_FEATURE_CONFIG_DISABLE_REMOTE_FAULT_DET
);
621 BnxeCfgGetVal(pUM
, "debug_level",
623 pUM
->devParams
.debug_level
,
625 pUM
->devParams
.debug_level
=
628 ((uint32_t)option
> (CP_ALL
| LV_MASK
)) ?
632 /* Adjust the number of rx/tx descriptors if in multi-function mode. */
634 if (IS_MULTI_VNIC(&pUM
->lm_dev
))
636 if (!(pUM
->devParams
.numRxDesc
[LM_CLI_IDX_NDIS
] /=
637 USER_OPTION_MF_BDS_DIVISOR
))
639 pUM
->devParams
.numRxDesc
[LM_CLI_IDX_NDIS
] = USER_OPTION_BDS_MIN
;
642 if (!(pUM
->devParams
.numTxDesc
[LM_CLI_IDX_NDIS
] /=
643 USER_OPTION_MF_BDS_DIVISOR
))
645 pUM
->devParams
.numTxDesc
[LM_CLI_IDX_NDIS
] = USER_OPTION_BDS_MIN
;
651 void BnxeCfgReset(um_device_t
* pUM
)
653 /* reset the link status */
654 pUM
->props
.link_speed
= 0;
655 pUM
->props
.link_duplex
= B_FALSE
;
656 pUM
->props
.link_txpause
= B_FALSE
;
657 pUM
->props
.link_rxpause
= B_FALSE
;
659 /* reset the link partner status */
660 pUM
->remote
.link_autoneg
= B_FALSE
;
661 pUM
->remote
.param_20000fdx
= B_FALSE
;
662 pUM
->remote
.param_10000fdx
= B_FALSE
;
663 pUM
->remote
.param_2500fdx
= B_FALSE
;
664 pUM
->remote
.param_1000fdx
= B_FALSE
;
665 pUM
->remote
.param_100fdx
= B_FALSE
;
666 pUM
->remote
.param_100hdx
= B_FALSE
;
667 pUM
->remote
.param_10fdx
= B_FALSE
;
668 pUM
->remote
.param_10hdx
= B_FALSE
;
669 pUM
->remote
.param_txpause
= B_FALSE
;
670 pUM
->remote
.param_rxpause
= B_FALSE
;
672 /* reset the configuration from the configured hardware default */
673 bcopy(&pUM
->hwinit
, &pUM
->curcfg
, sizeof(BnxePhyCfg
));