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 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 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 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 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