Lines Matching refs:cmd
729 struct ethtool_cmd *cmd) in ethtool_get_ptys_settings() argument
757 cmd->supported = 0; in ethtool_get_ptys_settings()
758 cmd->advertising = 0; in ethtool_get_ptys_settings()
760 cmd->supported |= ptys_get_supported_port(&ptys_reg); in ethtool_get_ptys_settings()
763 cmd->supported |= ptys2ethtool_link_modes(eth_proto, SUPPORTED); in ethtool_get_ptys_settings()
766 cmd->advertising |= ptys2ethtool_link_modes(eth_proto, ADVERTISED); in ethtool_get_ptys_settings()
768 cmd->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; in ethtool_get_ptys_settings()
769 cmd->advertising |= (priv->prof->tx_pause) ? ADVERTISED_Pause : 0; in ethtool_get_ptys_settings()
771 cmd->advertising |= (priv->prof->tx_pause ^ priv->prof->rx_pause) ? in ethtool_get_ptys_settings()
774 cmd->port = ptys_get_active_port(&ptys_reg); in ethtool_get_ptys_settings()
775 cmd->transceiver = (SUPPORTED_TP & cmd->supported) ? in ethtool_get_ptys_settings()
779 cmd->supported |= SUPPORTED_Autoneg; in ethtool_get_ptys_settings()
780 cmd->advertising |= ADVERTISED_Autoneg; in ethtool_get_ptys_settings()
783 cmd->autoneg = (priv->port_state.flags & MLX4_EN_PORT_ANC) ? in ethtool_get_ptys_settings()
787 cmd->lp_advertising = ptys2ethtool_link_modes(eth_proto, ADVERTISED); in ethtool_get_ptys_settings()
789 cmd->lp_advertising |= (priv->port_state.flags & MLX4_EN_PORT_ANC) ? in ethtool_get_ptys_settings()
792 cmd->phy_address = 0; in ethtool_get_ptys_settings()
793 cmd->mdio_support = 0; in ethtool_get_ptys_settings()
794 cmd->maxtxpkt = 0; in ethtool_get_ptys_settings()
795 cmd->maxrxpkt = 0; in ethtool_get_ptys_settings()
796 cmd->eth_tp_mdix = ETH_TP_MDI_INVALID; in ethtool_get_ptys_settings()
797 cmd->eth_tp_mdix_ctrl = ETH_TP_MDI_AUTO; in ethtool_get_ptys_settings()
803 struct ethtool_cmd *cmd) in ethtool_get_default_settings() argument
808 cmd->autoneg = AUTONEG_DISABLE; in ethtool_get_default_settings()
809 cmd->supported = SUPPORTED_10000baseT_Full; in ethtool_get_default_settings()
810 cmd->advertising = ADVERTISED_10000baseT_Full; in ethtool_get_default_settings()
814 cmd->port = PORT_FIBRE; in ethtool_get_default_settings()
815 cmd->transceiver = XCVR_EXTERNAL; in ethtool_get_default_settings()
816 cmd->supported |= SUPPORTED_FIBRE; in ethtool_get_default_settings()
817 cmd->advertising |= ADVERTISED_FIBRE; in ethtool_get_default_settings()
819 cmd->port = PORT_TP; in ethtool_get_default_settings()
820 cmd->transceiver = XCVR_INTERNAL; in ethtool_get_default_settings()
821 cmd->supported |= SUPPORTED_TP; in ethtool_get_default_settings()
822 cmd->advertising |= ADVERTISED_TP; in ethtool_get_default_settings()
824 cmd->port = -1; in ethtool_get_default_settings()
825 cmd->transceiver = -1; in ethtool_get_default_settings()
829 static int mlx4_en_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) in mlx4_en_get_settings() argument
842 ret = ethtool_get_ptys_settings(dev, cmd); in mlx4_en_get_settings()
844 ethtool_get_default_settings(dev, cmd); in mlx4_en_get_settings()
847 ethtool_cmd_speed_set(cmd, priv->port_state.link_speed); in mlx4_en_get_settings()
848 cmd->duplex = DUPLEX_FULL; in mlx4_en_get_settings()
850 ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN); in mlx4_en_get_settings()
851 cmd->duplex = DUPLEX_UNKNOWN; in mlx4_en_get_settings()
875 static int mlx4_en_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) in mlx4_en_set_settings() argument
882 u32 ptys_adv = ethtool2ptys_link_modes(cmd->advertising, ADVERTISED); in mlx4_en_set_settings()
883 int speed = ethtool_cmd_speed(cmd); in mlx4_en_set_settings()
886 speed, cmd->advertising, cmd->autoneg, cmd->duplex); in mlx4_en_set_settings()
889 (cmd->duplex == DUPLEX_HALF)) in mlx4_en_set_settings()
903 proto_admin = cmd->autoneg == AUTONEG_ENABLE ? in mlx4_en_set_settings()
1225 struct ethtool_rxnfc *cmd) in mlx4_en_validate_flow() argument
1231 if (cmd->fs.location >= MAX_NUM_OF_FS_RULES) in mlx4_en_validate_flow()
1234 if (cmd->fs.flow_type & FLOW_MAC_EXT) { in mlx4_en_validate_flow()
1236 if (!is_broadcast_ether_addr(cmd->fs.m_ext.h_dest)) in mlx4_en_validate_flow()
1240 switch (cmd->fs.flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) { in mlx4_en_validate_flow()
1243 if (cmd->fs.m_u.tcp_ip4_spec.tos) in mlx4_en_validate_flow()
1245 l4_mask = &cmd->fs.m_u.tcp_ip4_spec; in mlx4_en_validate_flow()
1254 l3_mask = &cmd->fs.m_u.usr_ip4_spec; in mlx4_en_validate_flow()
1256 cmd->fs.h_u.usr_ip4_spec.ip_ver != ETH_RX_NFC_IP4 || in mlx4_en_validate_flow()
1263 eth_mask = &cmd->fs.m_u.ether_spec; in mlx4_en_validate_flow()
1279 if ((cmd->fs.flow_type & FLOW_EXT)) { in mlx4_en_validate_flow()
1280 if (cmd->fs.m_ext.vlan_etype || in mlx4_en_validate_flow()
1281 !((cmd->fs.m_ext.vlan_tci & cpu_to_be16(VLAN_VID_MASK)) == in mlx4_en_validate_flow()
1283 (cmd->fs.m_ext.vlan_tci & cpu_to_be16(VLAN_VID_MASK)) == in mlx4_en_validate_flow()
1287 if (cmd->fs.m_ext.vlan_tci) { in mlx4_en_validate_flow()
1288 if (be16_to_cpu(cmd->fs.h_ext.vlan_tci) >= VLAN_N_VID) in mlx4_en_validate_flow()
1297 static int mlx4_en_ethtool_add_mac_rule(struct ethtool_rxnfc *cmd, in mlx4_en_ethtool_add_mac_rule() argument
1309 if ((cmd->fs.flow_type & FLOW_EXT) && in mlx4_en_ethtool_add_mac_rule()
1310 (cmd->fs.m_ext.vlan_tci & cpu_to_be16(VLAN_VID_MASK))) { in mlx4_en_ethtool_add_mac_rule()
1311 spec_l2->eth.vlan_id = cmd->fs.h_ext.vlan_tci; in mlx4_en_ethtool_add_mac_rule()
1321 struct ethtool_rxnfc *cmd, in mlx4_en_ethtool_add_mac_rule_by_ipv4() argument
1330 if (cmd->fs.flow_type & FLOW_MAC_EXT) in mlx4_en_ethtool_add_mac_rule_by_ipv4()
1331 memcpy(&mac, cmd->fs.h_ext.h_dest, ETH_ALEN); in mlx4_en_ethtool_add_mac_rule_by_ipv4()
1338 return mlx4_en_ethtool_add_mac_rule(cmd, rule_list_h, spec_l2, &mac[0]); in mlx4_en_ethtool_add_mac_rule_by_ipv4()
1345 struct ethtool_rxnfc *cmd, in add_ip_rule() argument
1351 struct ethtool_usrip4_spec *l3_mask = &cmd->fs.m_u.usr_ip4_spec; in add_ip_rule()
1360 err = mlx4_en_ethtool_add_mac_rule_by_ipv4(priv, cmd, list_h, spec_l2, in add_ip_rule()
1361 cmd->fs.h_u. in add_ip_rule()
1366 spec_l3->ipv4.src_ip = cmd->fs.h_u.usr_ip4_spec.ip4src; in add_ip_rule()
1369 spec_l3->ipv4.dst_ip = cmd->fs.h_u.usr_ip4_spec.ip4dst; in add_ip_rule()
1383 struct ethtool_rxnfc *cmd, in add_tcp_udp_rule() argument
1390 struct ethtool_tcpip4_spec *l4_mask = &cmd->fs.m_u.tcp_ip4_spec; in add_tcp_udp_rule()
1403 err = mlx4_en_ethtool_add_mac_rule_by_ipv4(priv, cmd, list_h, in add_tcp_udp_rule()
1405 cmd->fs.h_u. in add_tcp_udp_rule()
1410 spec_l3->ipv4.src_ip = cmd->fs.h_u.tcp_ip4_spec.ip4src; in add_tcp_udp_rule()
1411 spec_l3->ipv4.dst_ip = cmd->fs.h_u.tcp_ip4_spec.ip4dst; in add_tcp_udp_rule()
1412 spec_l4->tcp_udp.src_port = cmd->fs.h_u.tcp_ip4_spec.psrc; in add_tcp_udp_rule()
1413 spec_l4->tcp_udp.dst_port = cmd->fs.h_u.tcp_ip4_spec.pdst; in add_tcp_udp_rule()
1415 err = mlx4_en_ethtool_add_mac_rule_by_ipv4(priv, cmd, list_h, in add_tcp_udp_rule()
1417 cmd->fs.h_u. in add_tcp_udp_rule()
1422 spec_l3->ipv4.src_ip = cmd->fs.h_u.udp_ip4_spec.ip4src; in add_tcp_udp_rule()
1423 spec_l3->ipv4.dst_ip = cmd->fs.h_u.udp_ip4_spec.ip4dst; in add_tcp_udp_rule()
1424 spec_l4->tcp_udp.src_port = cmd->fs.h_u.udp_ip4_spec.psrc; in add_tcp_udp_rule()
1425 spec_l4->tcp_udp.dst_port = cmd->fs.h_u.udp_ip4_spec.pdst; in add_tcp_udp_rule()
1451 struct ethtool_rxnfc *cmd, in mlx4_en_ethtool_to_net_trans_rule() argument
1459 err = mlx4_en_validate_flow(dev, cmd); in mlx4_en_ethtool_to_net_trans_rule()
1463 switch (cmd->fs.flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) { in mlx4_en_ethtool_to_net_trans_rule()
1469 eth_spec = &cmd->fs.h_u.ether_spec; in mlx4_en_ethtool_to_net_trans_rule()
1470 mlx4_en_ethtool_add_mac_rule(cmd, rule_list_h, spec_l2, in mlx4_en_ethtool_to_net_trans_rule()
1477 err = add_ip_rule(priv, cmd, rule_list_h); in mlx4_en_ethtool_to_net_trans_rule()
1480 err = add_tcp_udp_rule(priv, cmd, rule_list_h, TCP_V4_FLOW); in mlx4_en_ethtool_to_net_trans_rule()
1483 err = add_tcp_udp_rule(priv, cmd, rule_list_h, UDP_V4_FLOW); in mlx4_en_ethtool_to_net_trans_rule()
1491 struct ethtool_rxnfc *cmd) in mlx4_en_flow_replace() argument
1508 rule.priority = MLX4_DOMAIN_ETHTOOL | cmd->fs.location; in mlx4_en_flow_replace()
1512 if (cmd->fs.ring_cookie == RX_CLS_FLOW_DISC) in mlx4_en_flow_replace()
1514 else if (cmd->fs.ring_cookie & EN_ETHTOOL_QP_ATTACH) { in mlx4_en_flow_replace()
1515 qpn = cmd->fs.ring_cookie & (EN_ETHTOOL_QP_ATTACH - 1); in mlx4_en_flow_replace()
1517 if (cmd->fs.ring_cookie >= priv->rx_ring_num) { in mlx4_en_flow_replace()
1519 cmd->fs.ring_cookie); in mlx4_en_flow_replace()
1522 qpn = priv->rss_map.qps[cmd->fs.ring_cookie].qpn; in mlx4_en_flow_replace()
1525 cmd->fs.ring_cookie); in mlx4_en_flow_replace()
1530 err = mlx4_en_ethtool_to_net_trans_rule(dev, cmd, &rule.list); in mlx4_en_flow_replace()
1534 loc_rule = &priv->ethtool_rules[cmd->fs.location]; in mlx4_en_flow_replace()
1539 cmd->fs.location, loc_rule->id); in mlx4_en_flow_replace()
1550 cmd->fs.location); in mlx4_en_flow_replace()
1554 memcpy(&loc_rule->flow_spec, &cmd->fs, in mlx4_en_flow_replace()
1567 struct ethtool_rxnfc *cmd) in mlx4_en_flow_detach() argument
1573 if (cmd->fs.location >= MAX_NUM_OF_FS_RULES) in mlx4_en_flow_detach()
1576 rule = &priv->ethtool_rules[cmd->fs.location]; in mlx4_en_flow_detach()
1585 cmd->fs.location, rule->id); in mlx4_en_flow_detach()
1596 static int mlx4_en_get_flow(struct net_device *dev, struct ethtool_rxnfc *cmd, in mlx4_en_get_flow() argument
1608 memcpy(&cmd->fs, &rule->flow_spec, in mlx4_en_get_flow()
1628 static int mlx4_en_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd, in mlx4_en_get_rxnfc() argument
1636 if ((cmd->cmd == ETHTOOL_GRXCLSRLCNT || in mlx4_en_get_rxnfc()
1637 cmd->cmd == ETHTOOL_GRXCLSRULE || in mlx4_en_get_rxnfc()
1638 cmd->cmd == ETHTOOL_GRXCLSRLALL) && in mlx4_en_get_rxnfc()
1643 switch (cmd->cmd) { in mlx4_en_get_rxnfc()
1645 cmd->data = priv->rx_ring_num; in mlx4_en_get_rxnfc()
1648 cmd->rule_cnt = mlx4_en_get_num_flows(priv); in mlx4_en_get_rxnfc()
1651 err = mlx4_en_get_flow(dev, cmd, cmd->fs.location); in mlx4_en_get_rxnfc()
1654 while ((!err || err == -ENOENT) && priority < cmd->rule_cnt) { in mlx4_en_get_rxnfc()
1655 err = mlx4_en_get_flow(dev, cmd, i); in mlx4_en_get_rxnfc()
1670 static int mlx4_en_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd) in mlx4_en_set_rxnfc() argument
1680 switch (cmd->cmd) { in mlx4_en_set_rxnfc()
1682 err = mlx4_en_flow_replace(dev, cmd); in mlx4_en_set_rxnfc()
1685 err = mlx4_en_flow_detach(dev, cmd); in mlx4_en_set_rxnfc()
1688 en_warn(priv, "Unsupported ethtool command. (%d)\n", cmd->cmd); in mlx4_en_set_rxnfc()