| 2472 | } |
| 2473 | |
| 2474 | static uint32_t |
| 2475 | sfc_efx_caps_to_fec(uint32_t caps, bool is_25g) |
| 2476 | { |
| 2477 | bool rs_req = caps & EFX_PHY_CAP_FEC_BIT(RS_FEC_REQUESTED); |
| 2478 | bool rs = caps & EFX_PHY_CAP_FEC_BIT(RS_FEC); |
| 2479 | bool baser_req; |
| 2480 | bool baser; |
| 2481 | |
| 2482 | if (is_25g) { |
| 2483 | baser = caps & EFX_PHY_CAP_FEC_BIT(25G_BASER_FEC); |
| 2484 | baser_req = caps & EFX_PHY_CAP_FEC_BIT(25G_BASER_FEC_REQUESTED); |
| 2485 | } else { |
| 2486 | baser = caps & EFX_PHY_CAP_FEC_BIT(BASER_FEC); |
| 2487 | baser_req = caps & EFX_PHY_CAP_FEC_BIT(BASER_FEC_REQUESTED); |
| 2488 | } |
| 2489 | |
| 2490 | if (!baser && !rs) |
| 2491 | return RTE_ETH_FEC_MODE_TO_CAPA(RTE_ETH_FEC_NOFEC); |
| 2492 | |
| 2493 | if (rs_req) |
| 2494 | return RTE_ETH_FEC_MODE_TO_CAPA(RTE_ETH_FEC_RS); |
| 2495 | |
| 2496 | if (baser_req) |
| 2497 | return RTE_ETH_FEC_MODE_TO_CAPA(RTE_ETH_FEC_BASER); |
| 2498 | |
| 2499 | return 0; |
| 2500 | } |
| 2501 | |
| 2502 | static int |
| 2503 | sfc_fec_get(struct rte_eth_dev *dev, uint32_t *fec_capa) |