4 int qlcnic_83xx_enable_vnic_mode(struct qlcnic_adapter *adapter, int lock)
7 if (qlcnic_83xx_lock_driver(adapter))
10 QLCWRX(adapter->ahw, QLC_83XX_VNIC_STATE, QLCNIC_DEV_NPAR_OPER);
12 qlcnic_83xx_unlock_driver(adapter);
17 int qlcnic_83xx_disable_vnic_mode(struct qlcnic_adapter *adapter, int lock)
19 struct qlcnic_hardware_context *ahw = adapter->ahw;
22 if (qlcnic_83xx_lock_driver(adapter))
26 QLCWRX(adapter->ahw, QLC_83XX_VNIC_STATE, QLCNIC_DEV_NPAR_NON_OPER);
27 ahw->idc.vnic_state = QLCNIC_DEV_NPAR_NON_OPER;
30 qlcnic_83xx_unlock_driver(adapter);
35 static int qlcnic_83xx_set_vnic_opmode(struct qlcnic_adapter *adapter)
39 u32 data = QLCNIC_MGMT_FUNC;
40 struct qlcnic_hardware_context *ahw = adapter->ahw;
42 if (qlcnic_83xx_lock_driver(adapter))
45 if (qlcnic_config_npars) {
46 for (i = 0; i < ahw->act_pci_func; i++) {
47 id = adapter->npars[i].pci_func;
48 if (id == ahw->pci_func)
50 data |= qlcnic_config_npars &
51 QLC_83XX_SET_FUNC_OPMODE(0x3, id);
54 data = QLCRDX(adapter->ahw, QLC_83XX_DRV_OP_MODE);
55 data = (data & ~QLC_83XX_SET_FUNC_OPMODE(0x3, ahw->pci_func)) |
56 QLC_83XX_SET_FUNC_OPMODE(QLCNIC_MGMT_FUNC,
59 QLCWRX(adapter->ahw, QLC_83XX_DRV_OP_MODE, data);
61 qlcnic_83xx_unlock_driver(adapter);
67 qlcnic_83xx_config_vnic_buff_descriptors(struct qlcnic_adapter *adapter)
69 struct qlcnic_hardware_context *ahw = adapter->ahw;
71 if (ahw->port_type == QLCNIC_XGBE) {
72 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_VF;
73 adapter->max_rxd = MAX_RCV_DESCRIPTORS_VF;
74 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G;
75 adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G;
77 } else if (ahw->port_type == QLCNIC_GBE) {
78 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_1G;
79 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G;
80 adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G;
81 adapter->max_rxd = MAX_RCV_DESCRIPTORS_1G;
83 adapter->num_txd = MAX_CMD_DESCRIPTORS;
84 adapter->max_rds_rings = MAX_RDS_RINGS;
89 * qlcnic_83xx_init_mgmt_vnic
91 * @adapter: adapter structure
92 * Management virtual NIC sets the operational mode of other vNIC's and
93 * configures embedded switch (ESWITCH).
94 * Returns: Success(0) or error code.
97 static int qlcnic_83xx_init_mgmt_vnic(struct qlcnic_adapter *adapter)
101 if (!(adapter->flags & QLCNIC_ADAPTER_INITIALIZED)) {
102 if (qlcnic_init_pci_info(adapter))
105 if (qlcnic_83xx_set_vnic_opmode(adapter))
108 if (qlcnic_set_default_offload_settings(adapter))
111 if (qlcnic_reset_npar_config(adapter))
115 if (qlcnic_83xx_get_port_info(adapter))
118 qlcnic_83xx_config_vnic_buff_descriptors(adapter);
119 adapter->ahw->msix_supported = !!qlcnic_use_msi_x;
120 adapter->flags |= QLCNIC_ADAPTER_INITIALIZED;
121 qlcnic_83xx_enable_vnic_mode(adapter, 1);
123 dev_info(&adapter->pdev->dev, "HAL Version: %d, Management function\n",
124 adapter->ahw->fw_hal_version);
129 static int qlcnic_83xx_init_privileged_vnic(struct qlcnic_adapter *adapter)
133 if (qlcnic_83xx_get_port_info(adapter))
136 qlcnic_83xx_config_vnic_buff_descriptors(adapter);
137 adapter->ahw->msix_supported = !!qlcnic_use_msi_x;
138 adapter->flags |= QLCNIC_ADAPTER_INITIALIZED;
140 dev_info(&adapter->pdev->dev,
141 "HAL Version: %d, Privileged function\n",
142 adapter->ahw->fw_hal_version);
146 static int qlcnic_83xx_init_non_privileged_vnic(struct qlcnic_adapter *adapter)
150 qlcnic_83xx_get_fw_version(adapter);
151 if (qlcnic_set_eswitch_port_config(adapter))
154 if (qlcnic_83xx_get_port_info(adapter))
157 qlcnic_83xx_config_vnic_buff_descriptors(adapter);
158 adapter->ahw->msix_supported = !!qlcnic_use_msi_x;
159 adapter->flags |= QLCNIC_ADAPTER_INITIALIZED;
161 dev_info(&adapter->pdev->dev, "HAL Version: %d, Virtual function\n",
162 adapter->ahw->fw_hal_version);
168 * qlcnic_83xx_vnic_opmode
170 * @adapter: adapter structure
171 * Identify virtual NIC operational modes.
173 * Returns: Success(0) or error code.
176 int qlcnic_83xx_config_vnic_opmode(struct qlcnic_adapter *adapter)
178 u32 op_mode, priv_level;
179 struct qlcnic_hardware_context *ahw = adapter->ahw;
180 struct qlcnic_nic_template *nic_ops = adapter->nic_ops;
182 qlcnic_get_func_no(adapter);
183 op_mode = QLCRDX(adapter->ahw, QLC_83XX_DRV_OP_MODE);
185 if (op_mode == QLC_83XX_DEFAULT_OPMODE)
186 priv_level = QLCNIC_MGMT_FUNC;
188 priv_level = QLC_83XX_GET_FUNC_PRIVILEGE(op_mode,
191 if (priv_level == QLCNIC_NON_PRIV_FUNC) {
192 ahw->op_mode = QLCNIC_NON_PRIV_FUNC;
193 ahw->idc.state_entry = qlcnic_83xx_idc_ready_state_entry;
194 nic_ops->init_driver = qlcnic_83xx_init_non_privileged_vnic;
195 } else if (priv_level == QLCNIC_PRIV_FUNC) {
196 ahw->op_mode = QLCNIC_PRIV_FUNC;
197 ahw->idc.state_entry = qlcnic_83xx_idc_vnic_pf_entry;
198 nic_ops->init_driver = qlcnic_83xx_init_privileged_vnic;
199 } else if (priv_level == QLCNIC_MGMT_FUNC) {
200 ahw->op_mode = QLCNIC_MGMT_FUNC;
201 ahw->idc.state_entry = qlcnic_83xx_idc_ready_state_entry;
202 nic_ops->init_driver = qlcnic_83xx_init_mgmt_vnic;
207 if (ahw->capabilities & BIT_23)
208 adapter->flags |= QLCNIC_ESWITCH_ENABLED;
210 adapter->flags &= ~QLCNIC_ESWITCH_ENABLED;
212 adapter->ahw->idc.vnic_state = QLCNIC_DEV_NPAR_NON_OPER;
213 adapter->ahw->idc.vnic_wait_limit = QLCNIC_DEV_NPAR_OPER_TIMEO;