if (QLC_DEV_CLR_REF_CNT(ref_count, adapter->ahw.pci_func))
goto err_npar;
- for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) {
- id = adapter->npars[i].id;
- if (adapter->npars[i].type != QLCNIC_TYPE_NIC ||
- id == adapter->ahw.pci_func)
- continue;
- data |= (qlcnic_config_npars & QLC_DEV_SET_DRV(0xf, id));
+ if (qlcnic_config_npars) {
+ for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) {
+ id = adapter->npars[i].id;
+ if (adapter->npars[i].type != QLCNIC_TYPE_NIC ||
+ id == adapter->ahw.pci_func)
+ continue;
+ data |= (qlcnic_config_npars &
+ QLC_DEV_SET_DRV(0xf, id));
+ }
+ } else {
+ data = readl(priv_op);
+ data = (data & ~QLC_DEV_SET_DRV(0xf, adapter->ahw.pci_func)) |
+ (QLC_DEV_SET_DRV(QLCNIC_MGMT_FUNC,
+ adapter->ahw.pci_func));
}
writel(data, priv_op);
-
err_npar:
qlcnic_api_unlock(adapter);
err_lock:
return ret;
}
-static u8
-qlcnic_set_mgmt_driver(struct qlcnic_adapter *adapter)
-{
- u8 i, ret = 0;
-
- if (qlcnic_get_pci_info(adapter))
- return ret;
- /* Set the eswitch */
- for (i = 0; i < QLCNIC_NIU_MAX_XG_PORTS; i++) {
- if (!qlcnic_get_eswitch_capabilities(adapter, i,
- &adapter->eswitch[i])) {
- ret++;
- qlcnic_toggle_eswitch(adapter, i, ret);
- }
- }
- return ret;
-}
-
static u32
qlcnic_get_driver_mode(struct qlcnic_adapter *adapter)
{
adapter->nic_ops = &qlcnic_ops;
adapter->fw_hal_version = QLCNIC_FW_BASE;
adapter->ahw.pci_func = PCI_FUNC(adapter->pdev->devfn);
+ adapter->capabilities = QLCRD32(adapter, CRB_FW_CAPABILITIES_1);
dev_info(&adapter->pdev->dev,
"FW does not support nic partion\n");
return adapter->fw_hal_version;
func = (func - msix_base)/QLCNIC_MSIX_TBL_PGSIZE;
adapter->ahw.pci_func = func;
+ qlcnic_get_nic_info(adapter, adapter->ahw.pci_func);
+
+ if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED)) {
+ adapter->nic_ops = &qlcnic_ops;
+ return adapter->fw_hal_version;
+ }
+
/* Determine function privilege level */
priv_op = adapter->ahw.pci_base0 + QLCNIC_DRV_OP_MODE;
op_mode = readl(priv_op);
- if (op_mode == QLC_DEV_DRV_DEFAULT) {
+ if (op_mode == QLC_DEV_DRV_DEFAULT)
priv_level = QLCNIC_MGMT_FUNC;
- if (qlcnic_api_lock(adapter))
- return 0;
- op_mode = (op_mode & ~QLC_DEV_SET_DRV(0xf, func)) |
- (QLC_DEV_SET_DRV(QLCNIC_MGMT_FUNC, func));
- writel(op_mode, priv_op);
- qlcnic_api_unlock(adapter);
-
- } else
+ else
priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw.pci_func);
switch (priv_level) {
case QLCNIC_MGMT_FUNC:
adapter->op_mode = QLCNIC_MGMT_FUNC;
adapter->nic_ops = &qlcnic_pf_ops;
+ qlcnic_get_pci_info(adapter);
/* Set privilege level for other functions */
- if (qlcnic_config_npars)
- qlcnic_set_function_modes(adapter);
- qlcnic_dev_set_npar_ready(adapter);
+ qlcnic_set_function_modes(adapter);
dev_info(&adapter->pdev->dev,
"HAL Version: %d, Management function\n",
adapter->fw_hal_version);
dev_info(&pdev->dev, "firmware v%d.%d.%d\n",
fw_major, fw_minor, fw_build);
- if (adapter->fw_hal_version == QLCNIC_FW_NPAR)
- qlcnic_get_nic_info(adapter, adapter->ahw.pci_func);
- else
- adapter->capabilities = QLCRD32(adapter, CRB_FW_CAPABILITIES_1);
-
adapter->flags &= ~QLCNIC_LRO_ENABLED;
if (adapter->ahw.port_type == QLCNIC_XGBE) {
adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G;
}
+ qlcnic_get_nic_info(adapter, adapter->ahw.pci_func);
+
adapter->msix_supported = !!use_msi_x;
adapter->rss_supported = !!use_msi_x;
QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_READY);
qlcnic_idc_debug_info(adapter, 1);
- qlcnic_dev_set_npar_ready(adapter);
-
qlcnic_check_options(adapter);
- if (adapter->fw_hal_version != QLCNIC_FW_BASE &&
- adapter->op_mode == QLCNIC_MGMT_FUNC)
- qlcnic_set_mgmt_driver(adapter);
+ if (adapter->flags & QLCNIC_ESWITCH_ENABLED &&
+ adapter->op_mode != QLCNIC_NON_PRIV_FUNC)
+ qlcnic_dev_set_npar_ready(adapter);
adapter->need_fw_reset = 0;
{
u32 state;
- if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC ||
- adapter->fw_hal_version == QLCNIC_FW_BASE)
- return;
-
if (qlcnic_api_lock(adapter))
return;