Lines Matching refs:cmd

1347 				 struct ethtool_rxnfc *cmd)  in mlx4_en_validate_flow()  argument
1353 if (cmd->fs.location >= MAX_NUM_OF_FS_RULES) in mlx4_en_validate_flow()
1356 if (cmd->fs.flow_type & FLOW_MAC_EXT) { in mlx4_en_validate_flow()
1358 if (!is_broadcast_ether_addr(cmd->fs.m_ext.h_dest)) in mlx4_en_validate_flow()
1362 switch (cmd->fs.flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) { in mlx4_en_validate_flow()
1365 if (cmd->fs.m_u.tcp_ip4_spec.tos) in mlx4_en_validate_flow()
1367 l4_mask = &cmd->fs.m_u.tcp_ip4_spec; in mlx4_en_validate_flow()
1376 l3_mask = &cmd->fs.m_u.usr_ip4_spec; in mlx4_en_validate_flow()
1378 cmd->fs.h_u.usr_ip4_spec.ip_ver != ETH_RX_NFC_IP4 || in mlx4_en_validate_flow()
1385 eth_mask = &cmd->fs.m_u.ether_spec; in mlx4_en_validate_flow()
1401 if ((cmd->fs.flow_type & FLOW_EXT)) { in mlx4_en_validate_flow()
1402 if (cmd->fs.m_ext.vlan_etype || in mlx4_en_validate_flow()
1403 !((cmd->fs.m_ext.vlan_tci & cpu_to_be16(VLAN_VID_MASK)) == in mlx4_en_validate_flow()
1405 (cmd->fs.m_ext.vlan_tci & cpu_to_be16(VLAN_VID_MASK)) == in mlx4_en_validate_flow()
1409 if (cmd->fs.m_ext.vlan_tci) { in mlx4_en_validate_flow()
1410 if (be16_to_cpu(cmd->fs.h_ext.vlan_tci) >= VLAN_N_VID) in mlx4_en_validate_flow()
1419 static int mlx4_en_ethtool_add_mac_rule(struct ethtool_rxnfc *cmd, in mlx4_en_ethtool_add_mac_rule() argument
1430 if ((cmd->fs.flow_type & FLOW_EXT) && in mlx4_en_ethtool_add_mac_rule()
1431 (cmd->fs.m_ext.vlan_tci & cpu_to_be16(VLAN_VID_MASK))) { in mlx4_en_ethtool_add_mac_rule()
1432 spec_l2->eth.vlan_id = cmd->fs.h_ext.vlan_tci; in mlx4_en_ethtool_add_mac_rule()
1442 struct ethtool_rxnfc *cmd, in mlx4_en_ethtool_add_mac_rule_by_ipv4() argument
1451 if (cmd->fs.flow_type & FLOW_MAC_EXT) in mlx4_en_ethtool_add_mac_rule_by_ipv4()
1452 memcpy(&mac, cmd->fs.h_ext.h_dest, ETH_ALEN); in mlx4_en_ethtool_add_mac_rule_by_ipv4()
1459 return mlx4_en_ethtool_add_mac_rule(cmd, rule_list_h, spec_l2, &mac[0]); in mlx4_en_ethtool_add_mac_rule_by_ipv4()
1466 struct ethtool_rxnfc *cmd, in add_ip_rule() argument
1472 struct ethtool_usrip4_spec *l3_mask = &cmd->fs.m_u.usr_ip4_spec; in add_ip_rule()
1481 err = mlx4_en_ethtool_add_mac_rule_by_ipv4(priv, cmd, list_h, spec_l2, in add_ip_rule()
1482 cmd->fs.h_u. in add_ip_rule()
1487 spec_l3->ipv4.src_ip = cmd->fs.h_u.usr_ip4_spec.ip4src; in add_ip_rule()
1490 spec_l3->ipv4.dst_ip = cmd->fs.h_u.usr_ip4_spec.ip4dst; in add_ip_rule()
1504 struct ethtool_rxnfc *cmd, in add_tcp_udp_rule() argument
1511 struct ethtool_tcpip4_spec *l4_mask = &cmd->fs.m_u.tcp_ip4_spec; in add_tcp_udp_rule()
1524 err = mlx4_en_ethtool_add_mac_rule_by_ipv4(priv, cmd, list_h, in add_tcp_udp_rule()
1526 cmd->fs.h_u. in add_tcp_udp_rule()
1531 spec_l3->ipv4.src_ip = cmd->fs.h_u.tcp_ip4_spec.ip4src; in add_tcp_udp_rule()
1532 spec_l3->ipv4.dst_ip = cmd->fs.h_u.tcp_ip4_spec.ip4dst; in add_tcp_udp_rule()
1533 spec_l4->tcp_udp.src_port = cmd->fs.h_u.tcp_ip4_spec.psrc; in add_tcp_udp_rule()
1534 spec_l4->tcp_udp.dst_port = cmd->fs.h_u.tcp_ip4_spec.pdst; in add_tcp_udp_rule()
1536 err = mlx4_en_ethtool_add_mac_rule_by_ipv4(priv, cmd, list_h, in add_tcp_udp_rule()
1538 cmd->fs.h_u. in add_tcp_udp_rule()
1543 spec_l3->ipv4.src_ip = cmd->fs.h_u.udp_ip4_spec.ip4src; in add_tcp_udp_rule()
1544 spec_l3->ipv4.dst_ip = cmd->fs.h_u.udp_ip4_spec.ip4dst; in add_tcp_udp_rule()
1545 spec_l4->tcp_udp.src_port = cmd->fs.h_u.udp_ip4_spec.psrc; in add_tcp_udp_rule()
1546 spec_l4->tcp_udp.dst_port = cmd->fs.h_u.udp_ip4_spec.pdst; in add_tcp_udp_rule()
1572 struct ethtool_rxnfc *cmd, in mlx4_en_ethtool_to_net_trans_rule() argument
1580 err = mlx4_en_validate_flow(dev, cmd); in mlx4_en_ethtool_to_net_trans_rule()
1584 switch (cmd->fs.flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) { in mlx4_en_ethtool_to_net_trans_rule()
1590 eth_spec = &cmd->fs.h_u.ether_spec; in mlx4_en_ethtool_to_net_trans_rule()
1591 mlx4_en_ethtool_add_mac_rule(cmd, rule_list_h, spec_l2, in mlx4_en_ethtool_to_net_trans_rule()
1598 err = add_ip_rule(priv, cmd, rule_list_h); in mlx4_en_ethtool_to_net_trans_rule()
1601 err = add_tcp_udp_rule(priv, cmd, rule_list_h, TCP_V4_FLOW); in mlx4_en_ethtool_to_net_trans_rule()
1604 err = add_tcp_udp_rule(priv, cmd, rule_list_h, UDP_V4_FLOW); in mlx4_en_ethtool_to_net_trans_rule()
1612 struct ethtool_rxnfc *cmd) in mlx4_en_flow_replace() argument
1629 rule.priority = MLX4_DOMAIN_ETHTOOL | cmd->fs.location; in mlx4_en_flow_replace()
1633 if (cmd->fs.ring_cookie == RX_CLS_FLOW_DISC) in mlx4_en_flow_replace()
1635 else if (cmd->fs.ring_cookie & EN_ETHTOOL_QP_ATTACH) { in mlx4_en_flow_replace()
1636 qpn = cmd->fs.ring_cookie & (EN_ETHTOOL_QP_ATTACH - 1); in mlx4_en_flow_replace()
1638 if (cmd->fs.ring_cookie >= priv->rx_ring_num) { in mlx4_en_flow_replace()
1640 cmd->fs.ring_cookie); in mlx4_en_flow_replace()
1643 qpn = priv->rss_map.qps[cmd->fs.ring_cookie].qpn; in mlx4_en_flow_replace()
1646 cmd->fs.ring_cookie); in mlx4_en_flow_replace()
1651 err = mlx4_en_ethtool_to_net_trans_rule(dev, cmd, &rule.list); in mlx4_en_flow_replace()
1655 loc_rule = &priv->ethtool_rules[cmd->fs.location]; in mlx4_en_flow_replace()
1660 cmd->fs.location, loc_rule->id); in mlx4_en_flow_replace()
1671 cmd->fs.location); in mlx4_en_flow_replace()
1675 memcpy(&loc_rule->flow_spec, &cmd->fs, in mlx4_en_flow_replace()
1688 struct ethtool_rxnfc *cmd) in mlx4_en_flow_detach() argument
1694 if (cmd->fs.location >= MAX_NUM_OF_FS_RULES) in mlx4_en_flow_detach()
1697 rule = &priv->ethtool_rules[cmd->fs.location]; in mlx4_en_flow_detach()
1706 cmd->fs.location, rule->id); in mlx4_en_flow_detach()
1717 static int mlx4_en_get_flow(struct net_device *dev, struct ethtool_rxnfc *cmd, in mlx4_en_get_flow() argument
1729 memcpy(&cmd->fs, &rule->flow_spec, in mlx4_en_get_flow()
1749 static int mlx4_en_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd, in mlx4_en_get_rxnfc() argument
1757 if ((cmd->cmd == ETHTOOL_GRXCLSRLCNT || in mlx4_en_get_rxnfc()
1758 cmd->cmd == ETHTOOL_GRXCLSRULE || in mlx4_en_get_rxnfc()
1759 cmd->cmd == ETHTOOL_GRXCLSRLALL) && in mlx4_en_get_rxnfc()
1764 switch (cmd->cmd) { in mlx4_en_get_rxnfc()
1766 cmd->data = priv->rx_ring_num; in mlx4_en_get_rxnfc()
1769 cmd->rule_cnt = mlx4_en_get_num_flows(priv); in mlx4_en_get_rxnfc()
1772 err = mlx4_en_get_flow(dev, cmd, cmd->fs.location); in mlx4_en_get_rxnfc()
1775 cmd->data = MAX_NUM_OF_FS_RULES; in mlx4_en_get_rxnfc()
1776 while ((!err || err == -ENOENT) && priority < cmd->rule_cnt) { in mlx4_en_get_rxnfc()
1777 err = mlx4_en_get_flow(dev, cmd, i); in mlx4_en_get_rxnfc()
1792 static int mlx4_en_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd) in mlx4_en_set_rxnfc() argument
1802 switch (cmd->cmd) { in mlx4_en_set_rxnfc()
1804 err = mlx4_en_flow_replace(dev, cmd); in mlx4_en_set_rxnfc()
1807 err = mlx4_en_flow_detach(dev, cmd); in mlx4_en_set_rxnfc()
1810 en_warn(priv, "Unsupported ethtool command. (%d)\n", cmd->cmd); in mlx4_en_set_rxnfc()