| 2353 | } |
| 2354 | |
| 2355 | static void |
| 2356 | iavf_init_proto_xtr(struct rte_eth_dev *dev) |
| 2357 | { |
| 2358 | struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); |
| 2359 | struct iavf_adapter *ad = |
| 2360 | IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); |
| 2361 | const struct iavf_proto_xtr_ol *xtr_ol; |
| 2362 | bool proto_xtr_enable = false; |
| 2363 | int offset; |
| 2364 | uint16_t i; |
| 2365 | |
| 2366 | vf->proto_xtr = rte_zmalloc("vf proto xtr", |
| 2367 | vf->vsi_res->num_queue_pairs, 0); |
| 2368 | if (unlikely(!(vf->proto_xtr))) { |
| 2369 | PMD_DRV_LOG(ERR, "no memory for setting up proto_xtr's table"); |
| 2370 | return; |
| 2371 | } |
| 2372 | |
| 2373 | for (i = 0; i < vf->vsi_res->num_queue_pairs; i++) { |
| 2374 | vf->proto_xtr[i] = ad->devargs.proto_xtr[i] != |
| 2375 | IAVF_PROTO_XTR_NONE ? |
| 2376 | ad->devargs.proto_xtr[i] : |
| 2377 | ad->devargs.proto_xtr_dflt; |
| 2378 | |
| 2379 | if (vf->proto_xtr[i] != IAVF_PROTO_XTR_NONE) { |
| 2380 | uint8_t type = vf->proto_xtr[i]; |
| 2381 | |
| 2382 | iavf_proto_xtr_params[type].required = true; |
| 2383 | proto_xtr_enable = true; |
| 2384 | } |
| 2385 | } |
| 2386 | |
| 2387 | if (likely(!proto_xtr_enable)) |
| 2388 | return; |
| 2389 | |
| 2390 | offset = rte_mbuf_dynfield_register(&iavf_proto_xtr_metadata_param); |
| 2391 | if (unlikely(offset == -1)) { |
| 2392 | PMD_DRV_LOG(ERR, |
| 2393 | "failed to extract protocol metadata, error %d", |
| 2394 | -rte_errno); |
| 2395 | return; |
| 2396 | } |
| 2397 | |
| 2398 | PMD_DRV_LOG(DEBUG, |
| 2399 | "proto_xtr metadata offset in mbuf is : %d", |
| 2400 | offset); |
| 2401 | rte_pmd_ifd_dynfield_proto_xtr_metadata_offs = offset; |
| 2402 | |
| 2403 | for (i = 0; i < RTE_DIM(iavf_proto_xtr_params); i++) { |
| 2404 | xtr_ol = &iavf_proto_xtr_params[i]; |
| 2405 | |
| 2406 | uint8_t rxdid = iavf_proto_xtr_type_to_rxdid((uint8_t)i); |
| 2407 | |
| 2408 | if (!xtr_ol->required) |
| 2409 | continue; |
| 2410 | |
| 2411 | if (!(vf->supported_rxdid & BIT(rxdid))) { |
| 2412 | PMD_DRV_LOG(ERR, |
no test coverage detected