• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/sys/dev/qlnx/qlnxe/

Lines Matching defs:p_hwfn

157 static bool ecore_dcbx_iwarp_tlv(struct ecore_hwfn *p_hwfn, u32 app_info_bitmap,
162 if (!p_hwfn->p_dcbx_info->iwarp_port)
171 return !!(port && (proto_id == p_hwfn->p_dcbx_info->iwarp_port));
175 ecore_dcbx_dp_protocol(struct ecore_hwfn *p_hwfn,
181 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB, "DCBX negotiated: %d\n",
187 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
191 p_data->arr[id].tc, p_hwfn->hw_info.num_active_tc,
197 u8 ecore_dcbx_get_dscp_value(struct ecore_hwfn *p_hwfn, u8 pri)
199 struct ecore_dcbx_dscp_params *dscp = &p_hwfn->p_dcbx_info->get.dscp;
214 struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
223 p_data->arr[type].dscp_val = ecore_dcbx_get_dscp_value(p_hwfn, prio);
233 if (OSAL_TEST_BIT(ECORE_MF_UFP_SPECIFIC, &p_hwfn->p_dev->mf_bits))
237 if (p_hwfn->hw_info.personality == personality)
238 p_hwfn->hw_info.offload_tc = tc;
241 if (OSAL_TEST_BIT(ECORE_MF_UFP_SPECIFIC, &p_hwfn->p_dev->mf_bits) &&
243 ecore_wr(p_hwfn, p_ptt, DORQ_REG_TAG1_OVRD_MODE, 1);
244 ecore_wr(p_hwfn, p_ptt, DORQ_REG_PF_PCP_BB_K2, prio << 1);
251 struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
267 ecore_dcbx_set_params(p_data, p_hwfn, p_ptt, enable,
302 ecore_dcbx_get_app_protocol_type(struct ecore_hwfn *p_hwfn,
316 } else if (ecore_dcbx_iwarp_tlv(p_hwfn, app_prio_bitmap, id, ieee)) {
320 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
333 ecore_dcbx_process_tlv(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
346 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
357 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB, "Id = 0x%x pri_map = %u\n",
361 DP_ERR(p_hwfn, "Invalid priority\n");
366 if (ecore_dcbx_get_app_protocol_type(p_hwfn, p_tbl[i].entry,
381 ecore_dcbx_update_app_info(p_data, p_hwfn, p_ptt,
388 &p_hwfn->p_dev->mf_bits) && !eth_tlv)
389 p_data->arr[DCBX_PROTOCOL_ETH].tc = p_hwfn->ufp_info.tc;
404 ecore_dcbx_update_app_info(p_data, p_hwfn, p_ptt, false,
415 ecore_dcbx_process_mib_info(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt)
427 flags = p_hwfn->p_dcbx_info->operational.flags;
430 p_app = &p_hwfn->p_dcbx_info->operational.features.app;
433 p_ets = &p_hwfn->p_dcbx_info->operational.features.ets;
436 p_info = &p_hwfn->hw_info;
439 rc = ecore_dcbx_process_tlv(p_hwfn, p_ptt, &data, p_tbl, pri_tc_tbl,
445 p_hwfn->qm_info.ooo_tc = GET_MFW_FIELD(p_ets->flags, DCBX_OOO_TC);
446 data.pf_id = p_hwfn->rel_pf_id;
449 ecore_dcbx_dp_protocol(p_hwfn, &data);
451 OSAL_MEMCPY(&p_hwfn->p_dcbx_info->results, &data,
458 ecore_dcbx_copy_mib(struct ecore_hwfn *p_hwfn,
472 ecore_memcpy_from(p_hwfn, p_ptt, p_data->lldp_remote,
477 ecore_memcpy_from(p_hwfn, p_ptt, p_data->lldp_tlvs,
483 ecore_memcpy_from(p_hwfn, p_ptt, p_data->mib,
490 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
497 DP_ERR(p_hwfn,
507 ecore_dcbx_get_priority_info(struct ecore_hwfn *p_hwfn,
540 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
547 ecore_dcbx_get_app_data(struct ecore_hwfn *p_hwfn,
600 ecore_dcbx_get_app_protocol_type(p_hwfn, p_tbl[i].entry,
605 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
612 ecore_dcbx_get_pfc_data(struct ecore_hwfn *p_hwfn,
630 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
637 ecore_dcbx_get_ets_data(struct ecore_hwfn *p_hwfn,
648 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
656 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
672 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
680 ecore_dcbx_get_common_params(struct ecore_hwfn *p_hwfn,
687 ecore_dcbx_get_app_data(p_hwfn, p_app, p_tbl, p_params, ieee);
688 ecore_dcbx_get_ets_data(p_hwfn, p_ets, p_params);
689 ecore_dcbx_get_pfc_data(p_hwfn, pfc, p_params);
693 ecore_dcbx_get_local_params(struct ecore_hwfn *p_hwfn,
698 p_feat = &p_hwfn->p_dcbx_info->local_admin.features;
699 ecore_dcbx_get_common_params(p_hwfn, &p_feat->app,
706 ecore_dcbx_get_remote_params(struct ecore_hwfn *p_hwfn,
711 p_feat = &p_hwfn->p_dcbx_info->remote.features;
712 ecore_dcbx_get_common_params(p_hwfn, &p_feat->app,
719 static void ecore_dcbx_get_dscp_params(struct ecore_hwfn *p_hwfn,
728 p_dscp_map = &p_hwfn->p_dcbx_info->dscp_map;
736 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB, "elem %d pri_map 0x%x\n",
745 ecore_dcbx_get_operational_params(struct ecore_hwfn *p_hwfn,
755 flags = p_hwfn->p_dcbx_info->operational.flags;
766 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB, "Dcbx is disabled\n");
770 p_feat = &p_hwfn->p_dcbx_info->operational.features;
771 p_results = &p_hwfn->p_dcbx_info->results;
785 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
790 ecore_dcbx_get_common_params(p_hwfn, &p_feat->app,
794 ecore_dcbx_get_priority_info(p_hwfn, &p_operational->app_prio,
802 static void ecore_dcbx_get_local_lldp_params(struct ecore_hwfn *p_hwfn,
807 p_local = &p_hwfn->p_dcbx_info->lldp_local[LLDP_NEAREST_BRIDGE];
816 static void ecore_dcbx_get_remote_lldp_params(struct ecore_hwfn *p_hwfn,
821 p_remote = &p_hwfn->p_dcbx_info->lldp_remote[LLDP_NEAREST_BRIDGE];
831 ecore_dcbx_get_params(struct ecore_hwfn *p_hwfn,
837 ecore_dcbx_get_remote_params(p_hwfn, p_params);
840 ecore_dcbx_get_local_params(p_hwfn, p_params);
843 ecore_dcbx_get_operational_params(p_hwfn, p_params);
846 ecore_dcbx_get_remote_lldp_params(p_hwfn, p_params);
849 ecore_dcbx_get_local_lldp_params(p_hwfn, p_params);
852 DP_ERR(p_hwfn, "MIB read err, unknown mib type %d\n", type);
860 ecore_dcbx_read_local_lldp_mib(struct ecore_hwfn *p_hwfn,
867 data.addr = p_hwfn->mcp_info->port_addr + offsetof(struct public_port,
869 data.lldp_local = p_hwfn->p_dcbx_info->lldp_local;
871 ecore_memcpy_from(p_hwfn, p_ptt, data.lldp_local, data.addr, data.size);
877 ecore_dcbx_read_remote_lldp_mib(struct ecore_hwfn *p_hwfn,
885 data.addr = p_hwfn->mcp_info->port_addr + offsetof(struct public_port,
887 data.lldp_remote = p_hwfn->p_dcbx_info->lldp_remote;
889 rc = ecore_dcbx_copy_mib(p_hwfn, p_ptt, &data, type);
895 ecore_dcbx_read_operational_mib(struct ecore_hwfn *p_hwfn,
903 data.addr = p_hwfn->mcp_info->port_addr +
905 data.mib = &p_hwfn->p_dcbx_info->operational;
907 rc = ecore_dcbx_copy_mib(p_hwfn, p_ptt, &data, type);
913 ecore_dcbx_read_remote_mib(struct ecore_hwfn *p_hwfn,
921 data.addr = p_hwfn->mcp_info->port_addr +
923 data.mib = &p_hwfn->p_dcbx_info->remote;
925 rc = ecore_dcbx_copy_mib(p_hwfn, p_ptt, &data, type);
931 ecore_dcbx_read_local_mib(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt)
937 data.addr = p_hwfn->mcp_info->port_addr +
939 data.local_admin = &p_hwfn->p_dcbx_info->local_admin;
941 ecore_memcpy_from(p_hwfn, p_ptt, data.local_admin,
948 ecore_dcbx_read_dscp_mib(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt)
952 data.addr = p_hwfn->mcp_info->port_addr +
954 data.dscp_map = &p_hwfn->p_dcbx_info->dscp_map;
956 ecore_memcpy_from(p_hwfn, p_ptt, data.dscp_map, data.addr, data.size);
959 static enum _ecore_status_t ecore_dcbx_read_mib(struct ecore_hwfn *p_hwfn,
967 ecore_dcbx_read_dscp_mib(p_hwfn, p_ptt);
968 rc = ecore_dcbx_read_operational_mib(p_hwfn, p_ptt, type);
971 rc = ecore_dcbx_read_remote_mib(p_hwfn, p_ptt, type);
974 rc = ecore_dcbx_read_local_mib(p_hwfn, p_ptt);
977 rc = ecore_dcbx_read_remote_lldp_mib(p_hwfn, p_ptt, type);
980 rc = ecore_dcbx_read_local_lldp_mib(p_hwfn, p_ptt);
983 DP_ERR(p_hwfn, "MIB read err, unknown mib type %d\n", type);
995 ecore_dcbx_mib_update_event(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
1000 rc = ecore_dcbx_read_mib(p_hwfn, p_ptt, type);
1005 ecore_dcbx_get_dscp_params(p_hwfn, &p_hwfn->p_dcbx_info->get);
1007 rc = ecore_dcbx_process_mib_info(p_hwfn, p_ptt);
1012 ecore_qm_reconf(p_hwfn, p_ptt);
1015 ecore_sp_pf_update_dcbx(p_hwfn);
1021 if (ECORE_IS_ROCE_PERSONALITY(p_hwfn))
1022 ecore_roce_dpm_dcbx(p_hwfn, p_ptt);
1027 ecore_dcbx_get_params(p_hwfn, &p_hwfn->p_dcbx_info->get, type);
1034 if (p_hwfn->p_dcbx_info->dscp_nig_update) {
1035 u8 val = !!p_hwfn->p_dcbx_info->get.dscp.enabled;
1038 rc = ecore_all_ppfids_wr(p_hwfn, p_ptt, addr, val);
1040 DP_NOTICE(p_hwfn, false,
1045 p_hwfn->p_dcbx_info->dscp_nig_update = false;
1051 p_data = &p_hwfn->p_dcbx_info->results;
1056 ecore_wr(p_hwfn, p_ptt, NIG_REG_TX_EDPM_CTRL, val);
1059 OSAL_DCBX_AEN(p_hwfn, type);
1064 enum _ecore_status_t ecore_dcbx_info_alloc(struct ecore_hwfn *p_hwfn)
1075 p_hwfn->p_dcbx_info = OSAL_ZALLOC(p_hwfn->p_dev, GFP_KERNEL,
1076 sizeof(*p_hwfn->p_dcbx_info));
1077 if (!p_hwfn->p_dcbx_info) {
1078 DP_NOTICE(p_hwfn, false,
1083 p_hwfn->p_dcbx_info->iwarp_port =
1084 p_hwfn->pf_params.rdma_pf_params.iwarp_port;
1089 void ecore_dcbx_info_free(struct ecore_hwfn *p_hwfn)
1091 OSAL_FREE(p_hwfn->p_dev, p_hwfn->p_dcbx_info);
1092 p_hwfn->p_dcbx_info = OSAL_NULL;
1145 enum _ecore_status_t ecore_dcbx_query_params(struct ecore_hwfn *p_hwfn,
1152 if (IS_VF(p_hwfn->p_dev))
1155 p_ptt = ecore_ptt_acquire(p_hwfn);
1159 rc = ecore_dcbx_read_mib(p_hwfn, p_ptt, type);
1163 ecore_dcbx_get_dscp_params(p_hwfn, p_get);
1165 rc = ecore_dcbx_get_params(p_hwfn, p_get, type);
1168 ecore_ptt_release(p_hwfn, p_ptt);
1173 ecore_dcbx_set_pfc_data(struct ecore_hwfn *p_hwfn,
1200 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB, "pfc = 0x%x\n", *pfc);
1204 ecore_dcbx_set_ets_data(struct ecore_hwfn *p_hwfn,
1247 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
1255 ecore_dcbx_set_app_data(struct ecore_hwfn *p_hwfn,
1324 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB, "flags = 0x%x\n", p_app->flags);
1328 ecore_dcbx_set_local_params(struct ecore_hwfn *p_hwfn,
1336 &p_hwfn->p_dcbx_info->operational.features,
1345 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB, "Dcbx version = %d\n",
1349 ecore_dcbx_set_pfc_data(p_hwfn, &local_admin->features.pfc,
1353 ecore_dcbx_set_ets_data(p_hwfn, &local_admin->features.ets,
1357 ecore_dcbx_set_app_data(p_hwfn, &local_admin->features.app,
1362 ecore_dcbx_set_dscp_params(struct ecore_hwfn *p_hwfn,
1369 OSAL_MEMCPY(p_dscp_map, &p_hwfn->p_dcbx_info->dscp_map,
1385 p_hwfn->p_dcbx_info->dscp_nig_update = true;
1387 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB, "flags = 0x%x\n", p_dscp_map->flags);
1388 DP_VERBOSE(p_hwfn, ECORE_MSG_DCB,
1398 enum _ecore_status_t ecore_dcbx_config_params(struct ecore_hwfn *p_hwfn,
1409 OSAL_MEMCPY(&p_hwfn->p_dcbx_info->set, params,
1410 sizeof(p_hwfn->p_dcbx_info->set));
1415 ecore_dcbx_set_local_params(p_hwfn, &local_admin, params);
1417 data.addr = p_hwfn->mcp_info->port_addr +
1421 ecore_memcpy_to(p_hwfn, p_ptt, data.addr, data.local_admin, data.size);
1425 ecore_dcbx_set_dscp_params(p_hwfn, &dscp_map, params);
1427 data.addr = p_hwfn->mcp_info->port_addr +
1431 ecore_memcpy_to(p_hwfn, p_ptt, data.addr, data.dscp_map,
1435 rc = ecore_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_SET_DCBX,
1438 DP_NOTICE(p_hwfn, false,
1444 enum _ecore_status_t ecore_dcbx_get_config_params(struct ecore_hwfn *p_hwfn,
1450 if (p_hwfn->p_dcbx_info->set.config.valid) {
1451 OSAL_MEMCPY(params, &p_hwfn->p_dcbx_info->set,
1456 dcbx_info = OSAL_ALLOC(p_hwfn->p_dev, GFP_KERNEL,
1462 rc = ecore_dcbx_query_params(p_hwfn, dcbx_info,
1465 OSAL_FREE(p_hwfn->p_dev, dcbx_info);
1468 p_hwfn->p_dcbx_info->set.override_flags = 0;
1470 p_hwfn->p_dcbx_info->set.ver_num = DCBX_CONFIG_VERSION_DISABLED;
1472 p_hwfn->p_dcbx_info->set.ver_num |= DCBX_CONFIG_VERSION_CEE;
1474 p_hwfn->p_dcbx_info->set.ver_num |= DCBX_CONFIG_VERSION_IEEE;
1476 p_hwfn->p_dcbx_info->set.ver_num |= DCBX_CONFIG_VERSION_STATIC;
1478 p_hwfn->p_dcbx_info->set.enabled = dcbx_info->operational.enabled;
1479 OSAL_MEMCPY(&p_hwfn->p_dcbx_info->set.dscp,
1480 &p_hwfn->p_dcbx_info->get.dscp,
1482 OSAL_MEMCPY(&p_hwfn->p_dcbx_info->set.config.params,
1484 sizeof(p_hwfn->p_dcbx_info->set.config.params));
1485 p_hwfn->p_dcbx_info->set.config.valid = true;
1487 OSAL_MEMCPY(params, &p_hwfn->p_dcbx_info->set,
1490 OSAL_FREE(p_hwfn->p_dev, dcbx_info);
1495 enum _ecore_status_t ecore_lldp_register_tlv(struct ecore_hwfn *p_hwfn,
1514 DP_ERR(p_hwfn, "Invalid agent type %d\n", agent);
1521 rc = ecore_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_REGISTER_LLDP_TLVS_RX,
1524 DP_NOTICE(p_hwfn, false, "Failed to register TLV\n");
1530 ecore_lldp_mib_update_event(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt)
1539 data.addr = p_hwfn->mcp_info->port_addr +
1543 rc = ecore_dcbx_copy_mib(p_hwfn, p_ptt, &data,
1546 DP_NOTICE(p_hwfn, false, "Failed to read lldp TLVs\n");
1557 OSAL_LLDP_RX_TLVS(p_hwfn, tlvs.tlvs_buffer, tlvs.length);
1564 ecore_lldp_get_params(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
1582 DP_ERR(p_hwfn, "Invalid agent type %d\n", p_params->agent);
1586 addr = p_hwfn->mcp_info->port_addr +
1589 ecore_memcpy_from(p_hwfn, p_ptt, &lldp_params, addr,
1618 ecore_lldp_set_params(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
1638 DP_ERR(p_hwfn, "Invalid agent type %d\n", p_params->agent);
1643 addr = p_hwfn->mcp_info->port_addr +
1669 ecore_memcpy_to(p_hwfn, p_ptt, addr, &lldp_params, sizeof(lldp_params));
1671 rc = ecore_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_SET_LLDP,
1674 DP_NOTICE(p_hwfn, false, "SET_LLDP failed, error = %d\n", rc);
1680 ecore_lldp_set_system_tlvs(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
1703 addr = p_hwfn->mcp_info->port_addr +
1705 ecore_memcpy_to(p_hwfn, p_ptt, addr, &lld_tlv_buf, sizeof(lld_tlv_buf));
1708 addr = p_hwfn->mcp_info->port_addr +
1710 ecore_memcpy_to(p_hwfn, p_ptt, addr, &p_params->buf[len],
1714 rc = ecore_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_SET_LLDP,
1717 DP_NOTICE(p_hwfn, false, "SET_LLDP failed, error = %d\n", rc);
1723 ecore_dcbx_get_dscp_priority(struct ecore_hwfn *p_hwfn,
1730 DP_ERR(p_hwfn, "Invalid dscp index %d\n", dscp_index);
1734 p_dcbx_info = OSAL_ALLOC(p_hwfn->p_dev, GFP_KERNEL,
1740 rc = ecore_dcbx_query_params(p_hwfn, p_dcbx_info,
1743 OSAL_FREE(p_hwfn->p_dev, p_dcbx_info);
1748 OSAL_FREE(p_hwfn->p_dev, p_dcbx_info);
1754 ecore_dcbx_set_dscp_priority(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
1762 DP_ERR(p_hwfn, "Invalid dscp params: index = %d pri = %d\n",
1768 rc = ecore_dcbx_get_config_params(p_hwfn, &dcbx_set);
1775 return ecore_dcbx_config_params(p_hwfn, p_ptt, &dcbx_set, 1);
1779 ecore_lldp_get_stats(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
1797 DP_ERR(p_hwfn, "Invalid agent type %d\n", p_params->agent);
1801 rc = ecore_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_GET_LLDP_STATS,
1805 DP_ERR(p_hwfn, "GET_LLDP_STATS failed, error = %d\n", rc);
1809 addr = p_hwfn->mcp_info->drv_mb_addr +
1812 ecore_memcpy_from(p_hwfn, p_ptt, &lldp_stats, addr, sizeof(lldp_stats));