| 1508 | } |
| 1509 | |
| 1510 | int |
| 1511 | ionic_lif_set_features(struct ionic_lif *lif) |
| 1512 | { |
| 1513 | struct ionic_admin_ctx ctx = { |
| 1514 | .pending_work = true, |
| 1515 | .cmd.lif_setattr = { |
| 1516 | .opcode = IONIC_CMD_LIF_SETATTR, |
| 1517 | .attr = IONIC_LIF_ATTR_FEATURES, |
| 1518 | .features = rte_cpu_to_le_64(lif->features), |
| 1519 | }, |
| 1520 | }; |
| 1521 | int err; |
| 1522 | |
| 1523 | err = ionic_adminq_post_wait(lif, &ctx); |
| 1524 | if (err) |
| 1525 | return err; |
| 1526 | |
| 1527 | lif->hw_features = rte_le_to_cpu_64(ctx.cmd.lif_setattr.features & |
| 1528 | ctx.comp.lif_setattr.features); |
| 1529 | |
| 1530 | if (lif->hw_features & IONIC_ETH_HW_VLAN_TX_TAG) |
| 1531 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_VLAN_TX_TAG"); |
| 1532 | if (lif->hw_features & IONIC_ETH_HW_VLAN_RX_STRIP) |
| 1533 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_VLAN_RX_STRIP"); |
| 1534 | if (lif->hw_features & IONIC_ETH_HW_VLAN_RX_FILTER) |
| 1535 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_VLAN_RX_FILTER"); |
| 1536 | if (lif->hw_features & IONIC_ETH_HW_RX_HASH) |
| 1537 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_RX_HASH"); |
| 1538 | if (lif->hw_features & IONIC_ETH_HW_TX_SG) |
| 1539 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_TX_SG"); |
| 1540 | if (lif->hw_features & IONIC_ETH_HW_RX_SG) |
| 1541 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_RX_SG"); |
| 1542 | if (lif->hw_features & IONIC_ETH_HW_TX_CSUM) |
| 1543 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_TX_CSUM"); |
| 1544 | if (lif->hw_features & IONIC_ETH_HW_RX_CSUM) |
| 1545 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_RX_CSUM"); |
| 1546 | if (lif->hw_features & IONIC_ETH_HW_TSO) |
| 1547 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_TSO"); |
| 1548 | if (lif->hw_features & IONIC_ETH_HW_TSO_IPV6) |
| 1549 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_TSO_IPV6"); |
| 1550 | if (lif->hw_features & IONIC_ETH_HW_TSO_ECN) |
| 1551 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_TSO_ECN"); |
| 1552 | if (lif->hw_features & IONIC_ETH_HW_TSO_GRE) |
| 1553 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_TSO_GRE"); |
| 1554 | if (lif->hw_features & IONIC_ETH_HW_TSO_GRE_CSUM) |
| 1555 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_TSO_GRE_CSUM"); |
| 1556 | if (lif->hw_features & IONIC_ETH_HW_TSO_IPXIP4) |
| 1557 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_TSO_IPXIP4"); |
| 1558 | if (lif->hw_features & IONIC_ETH_HW_TSO_IPXIP6) |
| 1559 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_TSO_IPXIP6"); |
| 1560 | if (lif->hw_features & IONIC_ETH_HW_TSO_UDP) |
| 1561 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_TSO_UDP"); |
| 1562 | if (lif->hw_features & IONIC_ETH_HW_TSO_UDP_CSUM) |
| 1563 | IONIC_PRINT(DEBUG, "feature IONIC_ETH_HW_TSO_UDP_CSUM"); |
| 1564 | |
| 1565 | return 0; |
| 1566 | } |
| 1567 |
no test coverage detected