Lines Matching refs:cmd

714 				     struct ethtool_cmd *cmd)  in ethtool_get_ptys_settings()  argument
742 cmd->supported = 0; in ethtool_get_ptys_settings()
743 cmd->advertising = 0; in ethtool_get_ptys_settings()
745 cmd->supported |= ptys_get_supported_port(&ptys_reg); in ethtool_get_ptys_settings()
748 cmd->supported |= ptys2ethtool_link_modes(eth_proto, SUPPORTED); in ethtool_get_ptys_settings()
751 cmd->advertising |= ptys2ethtool_link_modes(eth_proto, ADVERTISED); in ethtool_get_ptys_settings()
753 cmd->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; in ethtool_get_ptys_settings()
754 cmd->advertising |= (priv->prof->tx_pause) ? ADVERTISED_Pause : 0; in ethtool_get_ptys_settings()
756 cmd->advertising |= (priv->prof->tx_pause ^ priv->prof->rx_pause) ? in ethtool_get_ptys_settings()
759 cmd->port = ptys_get_active_port(&ptys_reg); in ethtool_get_ptys_settings()
760 cmd->transceiver = (SUPPORTED_TP & cmd->supported) ? in ethtool_get_ptys_settings()
764 cmd->supported |= SUPPORTED_Autoneg; in ethtool_get_ptys_settings()
765 cmd->advertising |= ADVERTISED_Autoneg; in ethtool_get_ptys_settings()
768 cmd->autoneg = (priv->port_state.flags & MLX4_EN_PORT_ANC) ? in ethtool_get_ptys_settings()
772 cmd->lp_advertising = ptys2ethtool_link_modes(eth_proto, ADVERTISED); in ethtool_get_ptys_settings()
774 cmd->lp_advertising |= (priv->port_state.flags & MLX4_EN_PORT_ANC) ? in ethtool_get_ptys_settings()
777 cmd->phy_address = 0; in ethtool_get_ptys_settings()
778 cmd->mdio_support = 0; in ethtool_get_ptys_settings()
779 cmd->maxtxpkt = 0; in ethtool_get_ptys_settings()
780 cmd->maxrxpkt = 0; in ethtool_get_ptys_settings()
781 cmd->eth_tp_mdix = ETH_TP_MDI_INVALID; in ethtool_get_ptys_settings()
782 cmd->eth_tp_mdix_ctrl = ETH_TP_MDI_AUTO; in ethtool_get_ptys_settings()
788 struct ethtool_cmd *cmd) in ethtool_get_default_settings() argument
793 cmd->autoneg = AUTONEG_DISABLE; in ethtool_get_default_settings()
794 cmd->supported = SUPPORTED_10000baseT_Full; in ethtool_get_default_settings()
795 cmd->advertising = ADVERTISED_10000baseT_Full; in ethtool_get_default_settings()
799 cmd->port = PORT_FIBRE; in ethtool_get_default_settings()
800 cmd->transceiver = XCVR_EXTERNAL; in ethtool_get_default_settings()
801 cmd->supported |= SUPPORTED_FIBRE; in ethtool_get_default_settings()
802 cmd->advertising |= ADVERTISED_FIBRE; in ethtool_get_default_settings()
804 cmd->port = PORT_TP; in ethtool_get_default_settings()
805 cmd->transceiver = XCVR_INTERNAL; in ethtool_get_default_settings()
806 cmd->supported |= SUPPORTED_TP; in ethtool_get_default_settings()
807 cmd->advertising |= ADVERTISED_TP; in ethtool_get_default_settings()
809 cmd->port = -1; in ethtool_get_default_settings()
810 cmd->transceiver = -1; in ethtool_get_default_settings()
814 static int mlx4_en_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) in mlx4_en_get_settings() argument
827 ret = ethtool_get_ptys_settings(dev, cmd); in mlx4_en_get_settings()
829 ethtool_get_default_settings(dev, cmd); in mlx4_en_get_settings()
832 ethtool_cmd_speed_set(cmd, priv->port_state.link_speed); in mlx4_en_get_settings()
833 cmd->duplex = DUPLEX_FULL; in mlx4_en_get_settings()
835 ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN); in mlx4_en_get_settings()
836 cmd->duplex = DUPLEX_UNKNOWN; in mlx4_en_get_settings()
860 static int mlx4_en_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) in mlx4_en_set_settings() argument
867 u32 ptys_adv = ethtool2ptys_link_modes(cmd->advertising, ADVERTISED); in mlx4_en_set_settings()
868 int speed = ethtool_cmd_speed(cmd); in mlx4_en_set_settings()
871 speed, cmd->advertising, cmd->autoneg, cmd->duplex); in mlx4_en_set_settings()
874 (cmd->duplex == DUPLEX_HALF)) in mlx4_en_set_settings()
888 proto_admin = cmd->autoneg == AUTONEG_ENABLE ? in mlx4_en_set_settings()
1210 struct ethtool_rxnfc *cmd) in mlx4_en_validate_flow() argument
1216 if (cmd->fs.location >= MAX_NUM_OF_FS_RULES) in mlx4_en_validate_flow()
1219 if (cmd->fs.flow_type & FLOW_MAC_EXT) { in mlx4_en_validate_flow()
1221 if (!is_broadcast_ether_addr(cmd->fs.m_ext.h_dest)) in mlx4_en_validate_flow()
1225 switch (cmd->fs.flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) { in mlx4_en_validate_flow()
1228 if (cmd->fs.m_u.tcp_ip4_spec.tos) in mlx4_en_validate_flow()
1230 l4_mask = &cmd->fs.m_u.tcp_ip4_spec; in mlx4_en_validate_flow()
1239 l3_mask = &cmd->fs.m_u.usr_ip4_spec; in mlx4_en_validate_flow()
1241 cmd->fs.h_u.usr_ip4_spec.ip_ver != ETH_RX_NFC_IP4 || in mlx4_en_validate_flow()
1248 eth_mask = &cmd->fs.m_u.ether_spec; in mlx4_en_validate_flow()
1264 if ((cmd->fs.flow_type & FLOW_EXT)) { in mlx4_en_validate_flow()
1265 if (cmd->fs.m_ext.vlan_etype || in mlx4_en_validate_flow()
1266 !((cmd->fs.m_ext.vlan_tci & cpu_to_be16(VLAN_VID_MASK)) == in mlx4_en_validate_flow()
1268 (cmd->fs.m_ext.vlan_tci & cpu_to_be16(VLAN_VID_MASK)) == in mlx4_en_validate_flow()
1272 if (cmd->fs.m_ext.vlan_tci) { in mlx4_en_validate_flow()
1273 if (be16_to_cpu(cmd->fs.h_ext.vlan_tci) >= VLAN_N_VID) in mlx4_en_validate_flow()
1282 static int mlx4_en_ethtool_add_mac_rule(struct ethtool_rxnfc *cmd, in mlx4_en_ethtool_add_mac_rule() argument
1294 if ((cmd->fs.flow_type & FLOW_EXT) && in mlx4_en_ethtool_add_mac_rule()
1295 (cmd->fs.m_ext.vlan_tci & cpu_to_be16(VLAN_VID_MASK))) { in mlx4_en_ethtool_add_mac_rule()
1296 spec_l2->eth.vlan_id = cmd->fs.h_ext.vlan_tci; in mlx4_en_ethtool_add_mac_rule()
1306 struct ethtool_rxnfc *cmd, in mlx4_en_ethtool_add_mac_rule_by_ipv4() argument
1315 if (cmd->fs.flow_type & FLOW_MAC_EXT) in mlx4_en_ethtool_add_mac_rule_by_ipv4()
1316 memcpy(&mac, cmd->fs.h_ext.h_dest, ETH_ALEN); in mlx4_en_ethtool_add_mac_rule_by_ipv4()
1323 return mlx4_en_ethtool_add_mac_rule(cmd, rule_list_h, spec_l2, &mac[0]); in mlx4_en_ethtool_add_mac_rule_by_ipv4()
1330 struct ethtool_rxnfc *cmd, in add_ip_rule() argument
1336 struct ethtool_usrip4_spec *l3_mask = &cmd->fs.m_u.usr_ip4_spec; in add_ip_rule()
1345 err = mlx4_en_ethtool_add_mac_rule_by_ipv4(priv, cmd, list_h, spec_l2, in add_ip_rule()
1346 cmd->fs.h_u. in add_ip_rule()
1351 spec_l3->ipv4.src_ip = cmd->fs.h_u.usr_ip4_spec.ip4src; in add_ip_rule()
1354 spec_l3->ipv4.dst_ip = cmd->fs.h_u.usr_ip4_spec.ip4dst; in add_ip_rule()
1368 struct ethtool_rxnfc *cmd, in add_tcp_udp_rule() argument
1375 struct ethtool_tcpip4_spec *l4_mask = &cmd->fs.m_u.tcp_ip4_spec; in add_tcp_udp_rule()
1388 err = mlx4_en_ethtool_add_mac_rule_by_ipv4(priv, cmd, list_h, in add_tcp_udp_rule()
1390 cmd->fs.h_u. in add_tcp_udp_rule()
1395 spec_l3->ipv4.src_ip = cmd->fs.h_u.tcp_ip4_spec.ip4src; in add_tcp_udp_rule()
1396 spec_l3->ipv4.dst_ip = cmd->fs.h_u.tcp_ip4_spec.ip4dst; in add_tcp_udp_rule()
1397 spec_l4->tcp_udp.src_port = cmd->fs.h_u.tcp_ip4_spec.psrc; in add_tcp_udp_rule()
1398 spec_l4->tcp_udp.dst_port = cmd->fs.h_u.tcp_ip4_spec.pdst; in add_tcp_udp_rule()
1400 err = mlx4_en_ethtool_add_mac_rule_by_ipv4(priv, cmd, list_h, in add_tcp_udp_rule()
1402 cmd->fs.h_u. in add_tcp_udp_rule()
1407 spec_l3->ipv4.src_ip = cmd->fs.h_u.udp_ip4_spec.ip4src; in add_tcp_udp_rule()
1408 spec_l3->ipv4.dst_ip = cmd->fs.h_u.udp_ip4_spec.ip4dst; in add_tcp_udp_rule()
1409 spec_l4->tcp_udp.src_port = cmd->fs.h_u.udp_ip4_spec.psrc; in add_tcp_udp_rule()
1410 spec_l4->tcp_udp.dst_port = cmd->fs.h_u.udp_ip4_spec.pdst; in add_tcp_udp_rule()
1436 struct ethtool_rxnfc *cmd, in mlx4_en_ethtool_to_net_trans_rule() argument
1444 err = mlx4_en_validate_flow(dev, cmd); in mlx4_en_ethtool_to_net_trans_rule()
1448 switch (cmd->fs.flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) { in mlx4_en_ethtool_to_net_trans_rule()
1454 eth_spec = &cmd->fs.h_u.ether_spec; in mlx4_en_ethtool_to_net_trans_rule()
1455 mlx4_en_ethtool_add_mac_rule(cmd, rule_list_h, spec_l2, in mlx4_en_ethtool_to_net_trans_rule()
1462 err = add_ip_rule(priv, cmd, rule_list_h); in mlx4_en_ethtool_to_net_trans_rule()
1465 err = add_tcp_udp_rule(priv, cmd, rule_list_h, TCP_V4_FLOW); in mlx4_en_ethtool_to_net_trans_rule()
1468 err = add_tcp_udp_rule(priv, cmd, rule_list_h, UDP_V4_FLOW); in mlx4_en_ethtool_to_net_trans_rule()
1476 struct ethtool_rxnfc *cmd) in mlx4_en_flow_replace() argument
1493 rule.priority = MLX4_DOMAIN_ETHTOOL | cmd->fs.location; in mlx4_en_flow_replace()
1497 if (cmd->fs.ring_cookie == RX_CLS_FLOW_DISC) in mlx4_en_flow_replace()
1499 else if (cmd->fs.ring_cookie & EN_ETHTOOL_QP_ATTACH) { in mlx4_en_flow_replace()
1500 qpn = cmd->fs.ring_cookie & (EN_ETHTOOL_QP_ATTACH - 1); in mlx4_en_flow_replace()
1502 if (cmd->fs.ring_cookie >= priv->rx_ring_num) { in mlx4_en_flow_replace()
1504 cmd->fs.ring_cookie); in mlx4_en_flow_replace()
1507 qpn = priv->rss_map.qps[cmd->fs.ring_cookie].qpn; in mlx4_en_flow_replace()
1510 cmd->fs.ring_cookie); in mlx4_en_flow_replace()
1515 err = mlx4_en_ethtool_to_net_trans_rule(dev, cmd, &rule.list); in mlx4_en_flow_replace()
1519 loc_rule = &priv->ethtool_rules[cmd->fs.location]; in mlx4_en_flow_replace()
1524 cmd->fs.location, loc_rule->id); in mlx4_en_flow_replace()
1535 cmd->fs.location); in mlx4_en_flow_replace()
1539 memcpy(&loc_rule->flow_spec, &cmd->fs, in mlx4_en_flow_replace()
1552 struct ethtool_rxnfc *cmd) in mlx4_en_flow_detach() argument
1558 if (cmd->fs.location >= MAX_NUM_OF_FS_RULES) in mlx4_en_flow_detach()
1561 rule = &priv->ethtool_rules[cmd->fs.location]; in mlx4_en_flow_detach()
1570 cmd->fs.location, rule->id); in mlx4_en_flow_detach()
1581 static int mlx4_en_get_flow(struct net_device *dev, struct ethtool_rxnfc *cmd, in mlx4_en_get_flow() argument
1593 memcpy(&cmd->fs, &rule->flow_spec, in mlx4_en_get_flow()
1613 static int mlx4_en_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd, in mlx4_en_get_rxnfc() argument
1621 if ((cmd->cmd == ETHTOOL_GRXCLSRLCNT || in mlx4_en_get_rxnfc()
1622 cmd->cmd == ETHTOOL_GRXCLSRULE || in mlx4_en_get_rxnfc()
1623 cmd->cmd == ETHTOOL_GRXCLSRLALL) && in mlx4_en_get_rxnfc()
1628 switch (cmd->cmd) { in mlx4_en_get_rxnfc()
1630 cmd->data = priv->rx_ring_num; in mlx4_en_get_rxnfc()
1633 cmd->rule_cnt = mlx4_en_get_num_flows(priv); in mlx4_en_get_rxnfc()
1636 err = mlx4_en_get_flow(dev, cmd, cmd->fs.location); in mlx4_en_get_rxnfc()
1639 while ((!err || err == -ENOENT) && priority < cmd->rule_cnt) { in mlx4_en_get_rxnfc()
1640 err = mlx4_en_get_flow(dev, cmd, i); in mlx4_en_get_rxnfc()
1655 static int mlx4_en_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd) in mlx4_en_set_rxnfc() argument
1665 switch (cmd->cmd) { in mlx4_en_set_rxnfc()
1667 err = mlx4_en_flow_replace(dev, cmd); in mlx4_en_set_rxnfc()
1670 err = mlx4_en_flow_detach(dev, cmd); in mlx4_en_set_rxnfc()
1673 en_warn(priv, "Unsupported ethtool command. (%d)\n", cmd->cmd); in mlx4_en_set_rxnfc()