Lines Matching defs:pfvf

15 static int otx2_mcam_entry_init(struct otx2_nic *pfvf);
35 static void otx2_clear_ntuple_flow_info(struct otx2_nic *pfvf, struct otx2_flow_config *flow_cfg)
37 devm_kfree(pfvf->dev, flow_cfg->flow_ent);
42 static int otx2_free_ntuple_mcam_entries(struct otx2_nic *pfvf)
44 struct otx2_flow_config *flow_cfg = pfvf->flow_cfg;
51 mutex_lock(&pfvf->mbox.lock);
53 req = otx2_mbox_alloc_msg_npc_mcam_free_entry(&pfvf->mbox);
60 err = otx2_sync_mbox_msg(&pfvf->mbox);
64 mutex_unlock(&pfvf->mbox.lock);
65 otx2_clear_ntuple_flow_info(pfvf, flow_cfg);
74 int otx2_alloc_mcam_entries(struct otx2_nic *pfvf, u16 count)
76 struct otx2_flow_config *flow_cfg = pfvf->flow_cfg;
82 otx2_free_ntuple_mcam_entries(pfvf);
87 flow_cfg->flow_ent = devm_kmalloc_array(pfvf->dev, count,
90 netdev_err(pfvf->netdev,
96 mutex_lock(&pfvf->mbox.lock);
102 req = otx2_mbox_alloc_msg_npc_mcam_alloc_entry(&pfvf->mbox);
113 if (!is_otx2_vf(pfvf->pcifunc)) {
119 if (otx2_sync_mbox_msg(&pfvf->mbox))
123 (&pfvf->mbox.mbox, 0, &req->hdr);
147 mutex_unlock(&pfvf->mbox.lock);
152 pfvf->flags |= OTX2_FLAG_MCAM_ENTRIES_ALLOC;
153 pfvf->flags |= OTX2_FLAG_NTUPLE_SUPPORT;
157 netdev_info(pfvf->netdev,
164 static int otx2_mcam_entry_init(struct otx2_nic *pfvf)
166 struct otx2_flow_config *flow_cfg = pfvf->flow_cfg;
174 vf_vlan_max_flows = pfvf->total_vfs * OTX2_PER_VF_VLAN_FLOWS;
178 flow_cfg->def_ent = devm_kmalloc_array(pfvf->dev, count,
183 mutex_lock(&pfvf->mbox.lock);
185 req = otx2_mbox_alloc_msg_npc_mcam_alloc_entry(&pfvf->mbox);
187 mutex_unlock(&pfvf->mbox.lock);
195 if (otx2_sync_mbox_msg(&pfvf->mbox)) {
196 mutex_unlock(&pfvf->mbox.lock);
201 (&pfvf->mbox.mbox, 0, &req->hdr);
204 netdev_info(pfvf->netdev,
206 mutex_unlock(&pfvf->mbox.lock);
207 devm_kfree(pfvf->dev, flow_cfg->def_ent);
218 pfvf->flags |= OTX2_FLAG_UCAST_FLTR_SUPPORT;
223 freq = otx2_mbox_alloc_msg_npc_get_field_status(&pfvf->mbox);
225 mutex_unlock(&pfvf->mbox.lock);
230 if (otx2_sync_mbox_msg(&pfvf->mbox)) {
231 mutex_unlock(&pfvf->mbox.lock);
236 (&pfvf->mbox.mbox, 0, &freq->hdr);
239 pfvf->flags |= OTX2_FLAG_RX_VLAN_SUPPORT;
240 pfvf->flags |= OTX2_FLAG_VF_VLAN_SUPPORT;
243 pfvf->flags |= OTX2_FLAG_MCAM_ENTRIES_ALLOC;
244 mutex_unlock(&pfvf->mbox.lock);
247 count = otx2_alloc_mcam_entries(pfvf, OTX2_DEFAULT_FLOWCOUNT);
249 otx2_clear_ntuple_flow_info(pfvf, flow_cfg);
253 pfvf->flags |= OTX2_FLAG_TC_FLOWER_SUPPORT;
261 int otx2vf_mcam_flow_init(struct otx2_nic *pfvf)
265 pfvf->flow_cfg = devm_kzalloc(pfvf->dev,
268 if (!pfvf->flow_cfg)
271 pfvf->flow_cfg->dmacflt_bmap = devm_kcalloc(pfvf->dev,
274 if (!pfvf->flow_cfg->dmacflt_bmap)
277 flow_cfg = pfvf->flow_cfg;
449 static struct otx2_flow *otx2_find_flow(struct otx2_nic *pfvf, u32 location)
453 list_for_each_entry(iter, &pfvf->flow_cfg->flow_list, list) {
461 static void otx2_add_flow_to_list(struct otx2_nic *pfvf, struct otx2_flow *flow)
463 struct list_head *head = &pfvf->flow_cfg->flow_list;
466 list_for_each_entry(iter, &pfvf->flow_cfg->flow_list, list) {
489 int otx2_get_flow(struct otx2_nic *pfvf, struct ethtool_rxnfc *nfc,
494 if (location >= otx2_get_maxflows(pfvf->flow_cfg))
497 list_for_each_entry(iter, &pfvf->flow_cfg->flow_list, list) {
508 int otx2_get_all_flows(struct otx2_nic *pfvf, struct ethtool_rxnfc *nfc,
516 nfc->data = otx2_get_maxflows(pfvf->flow_cfg);
518 err = otx2_get_flow(pfvf, nfc, location);
940 static int otx2_is_flow_rule_dmacfilter(struct otx2_nic *pfvf,
948 if (!(pfvf->flags & OTX2_FLAG_DMACFLTR_SUPPORT))
966 static int otx2_add_flow_msg(struct otx2_nic *pfvf, struct otx2_flow *flow)
975 mutex_lock(&pfvf->mbox.lock);
976 req = otx2_mbox_alloc_msg_npc_install_flow(&pfvf->mbox);
978 mutex_unlock(&pfvf->mbox.lock);
985 otx2_mbox_reset(&pfvf->mbox.mbox, 0);
986 mutex_unlock(&pfvf->mbox.lock);
993 req->channel = pfvf->hw.rx_chan_base;
1003 req->flow_key_alg = pfvf->hw.flowkey_alg_idx;
1009 if (vf > pci_num_vf(pfvf->pdev)) {
1010 mutex_unlock(&pfvf->mbox.lock);
1017 pfvf->pfc_en && req->op != NIX_RX_ACTIONOP_RSS) {
1025 if (pfvf->pfc_en & BIT(vlan_prio)) {
1041 err = otx2_sync_mbox_msg(&pfvf->mbox);
1045 otx2_update_bpid_in_rqctx(pfvf, vlan_prio, qidx, true);
1048 mutex_unlock(&pfvf->mbox.lock);
1052 static int otx2_add_flow_with_pfmac(struct otx2_nic *pfvf,
1064 pf_mac->location = pfvf->flow_cfg->max_flows;
1071 ether_addr_copy(eth_hdr->h_dest, pfvf->netdev->dev_addr);
1074 otx2_dmacflt_add(pfvf, eth_hdr->h_dest, 0);
1076 otx2_add_flow_to_list(pfvf, pf_mac);
1077 pfvf->flow_cfg->nr_flows++;
1078 set_bit(0, pfvf->flow_cfg->dmacflt_bmap);
1083 int otx2_add_flow(struct otx2_nic *pfvf, struct ethtool_rxnfc *nfc)
1085 struct otx2_flow_config *flow_cfg = pfvf->flow_cfg;
1095 netdev_err(pfvf->netdev,
1101 if (!(pfvf->flags & OTX2_FLAG_NTUPLE_SUPPORT))
1117 if (!is_otx2_vf(pfvf->pcifunc) && !vf_num &&
1118 ring >= pfvf->hw.rx_queues && fsp->ring_cookie != RX_CLS_FLOW_DISC)
1124 flow = otx2_find_flow(pfvf, fsp->location);
1139 if (otx2_is_flow_rule_dmacfilter(pfvf, &flow->flow_spec)) {
1144 return otx2_dmacflt_update(pfvf, eth_hdr->h_dest,
1149 netdev_warn(pfvf->netdev,
1162 otx2_add_flow_with_pfmac(pfvf, flow);
1172 otx2_dmacflt_add(pfvf, eth_hdr->h_dest, flow->entry);
1175 if (flow->location >= pfvf->flow_cfg->max_flows) {
1176 netdev_warn(pfvf->netdev,
1182 err = otx2_add_flow_msg(pfvf, flow);
1196 otx2_add_flow_to_list(pfvf, flow);
1201 netdev_info(pfvf->netdev,
1206 static int otx2_remove_flow_msg(struct otx2_nic *pfvf, u16 entry, bool all)
1211 mutex_lock(&pfvf->mbox.lock);
1212 req = otx2_mbox_alloc_msg_npc_delete_flow(&pfvf->mbox);
1214 mutex_unlock(&pfvf->mbox.lock);
1223 err = otx2_sync_mbox_msg(&pfvf->mbox);
1224 mutex_unlock(&pfvf->mbox.lock);
1228 static void otx2_update_rem_pfmac(struct otx2_nic *pfvf, int req)
1234 list_for_each_entry(iter, &pfvf->flow_cfg->flow_list, list) {
1238 otx2_dmacflt_remove(pfvf, eth_hdr->h_dest,
1240 clear_bit(0, pfvf->flow_cfg->dmacflt_bmap);
1244 pfvf->netdev->dev_addr);
1246 otx2_dmacflt_update(pfvf, eth_hdr->h_dest, 0);
1255 pfvf->flow_cfg->nr_flows--;
1259 int otx2_remove_flow(struct otx2_nic *pfvf, u32 location)
1261 struct otx2_flow_config *flow_cfg = pfvf->flow_cfg;
1268 flow = otx2_find_flow(pfvf, location);
1276 if (ether_addr_equal(pfvf->netdev->dev_addr, eth_hdr->h_dest))
1279 err = otx2_dmacflt_remove(pfvf, eth_hdr->h_dest,
1288 otx2_update_rem_pfmac(pfvf, DMAC_ADDR_DEL);
1292 otx2_update_bpid_in_rqctx(pfvf, 0,
1297 err = otx2_remove_flow_msg(pfvf, flow->entry, false);
1310 void otx2_rss_ctx_flow_del(struct otx2_nic *pfvf, int ctx_id)
1315 list_for_each_entry_safe(flow, tmp, &pfvf->flow_cfg->flow_list, list) {
1318 err = otx2_remove_flow(pfvf, flow->location);
1320 netdev_warn(pfvf->netdev,
1326 int otx2_destroy_ntuple_flows(struct otx2_nic *pfvf)
1328 struct otx2_flow_config *flow_cfg = pfvf->flow_cfg;
1333 if (!(pfvf->flags & OTX2_FLAG_NTUPLE_SUPPORT))
1339 mutex_lock(&pfvf->mbox.lock);
1340 req = otx2_mbox_alloc_msg_npc_delete_flow(&pfvf->mbox);
1342 mutex_unlock(&pfvf->mbox.lock);
1348 err = otx2_sync_mbox_msg(&pfvf->mbox);
1349 mutex_unlock(&pfvf->mbox.lock);
1359 int otx2_destroy_mcam_flows(struct otx2_nic *pfvf)
1361 struct otx2_flow_config *flow_cfg = pfvf->flow_cfg;
1366 if (!(pfvf->flags & OTX2_FLAG_MCAM_ENTRIES_ALLOC))
1370 err = otx2_remove_flow_msg(pfvf, 0, true);
1380 mutex_lock(&pfvf->mbox.lock);
1381 req = otx2_mbox_alloc_msg_npc_mcam_free_entry(&pfvf->mbox);
1383 mutex_unlock(&pfvf->mbox.lock);
1389 err = otx2_sync_mbox_msg(&pfvf->mbox);
1391 mutex_unlock(&pfvf->mbox.lock);
1395 pfvf->flags &= ~OTX2_FLAG_MCAM_ENTRIES_ALLOC;
1396 mutex_unlock(&pfvf->mbox.lock);
1401 int otx2_install_rxvlan_offload_flow(struct otx2_nic *pfvf)
1403 struct otx2_flow_config *flow_cfg = pfvf->flow_cfg;
1407 mutex_lock(&pfvf->mbox.lock);
1408 req = otx2_mbox_alloc_msg_npc_install_flow(&pfvf->mbox);
1410 mutex_unlock(&pfvf->mbox.lock);
1416 ether_addr_copy(req->packet.dmac, pfvf->netdev->dev_addr);
1418 req->channel = pfvf->hw.rx_chan_base;
1425 err = otx2_sync_mbox_msg(&pfvf->mbox);
1426 mutex_unlock(&pfvf->mbox.lock);
1430 static int otx2_delete_rxvlan_offload_flow(struct otx2_nic *pfvf)
1432 struct otx2_flow_config *flow_cfg = pfvf->flow_cfg;
1436 mutex_lock(&pfvf->mbox.lock);
1437 req = otx2_mbox_alloc_msg_npc_delete_flow(&pfvf->mbox);
1439 mutex_unlock(&pfvf->mbox.lock);
1445 err = otx2_sync_mbox_msg(&pfvf->mbox);
1446 mutex_unlock(&pfvf->mbox.lock);
1514 void otx2_dmacflt_update_pfmac_flow(struct otx2_nic *pfvf)
1516 otx2_update_rem_pfmac(pfvf, DMAC_ADDR_UPDATE);