diff options
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/cmd.c | 22 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_rx.c | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/eq.c | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/fw.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/intf.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/main.c | 11 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/mr.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/qp.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | 2 | ||||
-rw-r--r-- | include/linux/mlx4/cmd.h | 2 | ||||
-rw-r--r-- | include/linux/mlx4/driver.h | 10 |
13 files changed, 49 insertions, 27 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c index a49072b4fa52..e8c105164931 100644 --- a/drivers/net/ethernet/mellanox/mlx4/cmd.c +++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c | |||
@@ -43,6 +43,7 @@ | |||
43 | #include <linux/semaphore.h> | 43 | #include <linux/semaphore.h> |
44 | #include <rdma/ib_smi.h> | 44 | #include <rdma/ib_smi.h> |
45 | #include <linux/delay.h> | 45 | #include <linux/delay.h> |
46 | #include <linux/etherdevice.h> | ||
46 | 47 | ||
47 | #include <asm/io.h> | 48 | #include <asm/io.h> |
48 | 49 | ||
@@ -2955,7 +2956,7 @@ static bool mlx4_valid_vf_state_change(struct mlx4_dev *dev, int port, | |||
2955 | return false; | 2956 | return false; |
2956 | } | 2957 | } |
2957 | 2958 | ||
2958 | int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac) | 2959 | int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u8 *mac) |
2959 | { | 2960 | { |
2960 | struct mlx4_priv *priv = mlx4_priv(dev); | 2961 | struct mlx4_priv *priv = mlx4_priv(dev); |
2961 | struct mlx4_vport_state *s_info; | 2962 | struct mlx4_vport_state *s_info; |
@@ -2964,13 +2965,22 @@ int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac) | |||
2964 | if (!mlx4_is_master(dev)) | 2965 | if (!mlx4_is_master(dev)) |
2965 | return -EPROTONOSUPPORT; | 2966 | return -EPROTONOSUPPORT; |
2966 | 2967 | ||
2968 | if (is_multicast_ether_addr(mac)) | ||
2969 | return -EINVAL; | ||
2970 | |||
2967 | slave = mlx4_get_slave_indx(dev, vf); | 2971 | slave = mlx4_get_slave_indx(dev, vf); |
2968 | if (slave < 0) | 2972 | if (slave < 0) |
2969 | return -EINVAL; | 2973 | return -EINVAL; |
2970 | 2974 | ||
2971 | port = mlx4_slaves_closest_port(dev, slave, port); | 2975 | port = mlx4_slaves_closest_port(dev, slave, port); |
2972 | s_info = &priv->mfunc.master.vf_admin[slave].vport[port]; | 2976 | s_info = &priv->mfunc.master.vf_admin[slave].vport[port]; |
2973 | s_info->mac = mac; | 2977 | |
2978 | if (s_info->spoofchk && is_zero_ether_addr(mac)) { | ||
2979 | mlx4_info(dev, "MAC invalidation is not allowed when spoofchk is on\n"); | ||
2980 | return -EPERM; | ||
2981 | } | ||
2982 | |||
2983 | s_info->mac = mlx4_mac_to_u64(mac); | ||
2974 | mlx4_info(dev, "default mac on vf %d port %d to %llX will take effect only after vf restart\n", | 2984 | mlx4_info(dev, "default mac on vf %d port %d to %llX will take effect only after vf restart\n", |
2975 | vf, port, s_info->mac); | 2985 | vf, port, s_info->mac); |
2976 | return 0; | 2986 | return 0; |
@@ -3143,6 +3153,7 @@ int mlx4_set_vf_spoofchk(struct mlx4_dev *dev, int port, int vf, bool setting) | |||
3143 | struct mlx4_priv *priv = mlx4_priv(dev); | 3153 | struct mlx4_priv *priv = mlx4_priv(dev); |
3144 | struct mlx4_vport_state *s_info; | 3154 | struct mlx4_vport_state *s_info; |
3145 | int slave; | 3155 | int slave; |
3156 | u8 mac[ETH_ALEN]; | ||
3146 | 3157 | ||
3147 | if ((!mlx4_is_master(dev)) || | 3158 | if ((!mlx4_is_master(dev)) || |
3148 | !(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_FSM)) | 3159 | !(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_FSM)) |
@@ -3154,6 +3165,13 @@ int mlx4_set_vf_spoofchk(struct mlx4_dev *dev, int port, int vf, bool setting) | |||
3154 | 3165 | ||
3155 | port = mlx4_slaves_closest_port(dev, slave, port); | 3166 | port = mlx4_slaves_closest_port(dev, slave, port); |
3156 | s_info = &priv->mfunc.master.vf_admin[slave].vport[port]; | 3167 | s_info = &priv->mfunc.master.vf_admin[slave].vport[port]; |
3168 | |||
3169 | mlx4_u64_to_mac(mac, s_info->mac); | ||
3170 | if (setting && !is_valid_ether_addr(mac)) { | ||
3171 | mlx4_info(dev, "Illegal MAC with spoofchk\n"); | ||
3172 | return -EPERM; | ||
3173 | } | ||
3174 | |||
3157 | s_info->spoofchk = setting; | 3175 | s_info->spoofchk = setting; |
3158 | 3176 | ||
3159 | return 0; | 3177 | return 0; |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c b/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c index b04760a5034b..1dae8e40fb25 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c | |||
@@ -319,7 +319,7 @@ static int mlx4_en_ets_validate(struct mlx4_en_priv *priv, struct ieee_ets *ets) | |||
319 | default: | 319 | default: |
320 | en_err(priv, "TC[%d]: Not supported TSA: %d\n", | 320 | en_err(priv, "TC[%d]: Not supported TSA: %d\n", |
321 | i, ets->tc_tsa[i]); | 321 | i, ets->tc_tsa[i]); |
322 | return -ENOTSUPP; | 322 | return -EOPNOTSUPP; |
323 | } | 323 | } |
324 | } | 324 | } |
325 | 325 | ||
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index afe4444e5434..61420473fe5f 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | |||
@@ -2485,12 +2485,8 @@ static int mlx4_en_set_vf_mac(struct net_device *dev, int queue, u8 *mac) | |||
2485 | { | 2485 | { |
2486 | struct mlx4_en_priv *en_priv = netdev_priv(dev); | 2486 | struct mlx4_en_priv *en_priv = netdev_priv(dev); |
2487 | struct mlx4_en_dev *mdev = en_priv->mdev; | 2487 | struct mlx4_en_dev *mdev = en_priv->mdev; |
2488 | u64 mac_u64 = mlx4_mac_to_u64(mac); | ||
2489 | 2488 | ||
2490 | if (is_multicast_ether_addr(mac)) | 2489 | return mlx4_set_vf_mac(mdev->dev, en_priv->port, queue, mac); |
2491 | return -EINVAL; | ||
2492 | |||
2493 | return mlx4_set_vf_mac(mdev->dev, en_priv->port, queue, mac_u64); | ||
2494 | } | 2490 | } |
2495 | 2491 | ||
2496 | static int mlx4_en_set_vf_vlan(struct net_device *dev, int vf, u16 vlan, u8 qos, | 2492 | static int mlx4_en_set_vf_vlan(struct net_device *dev, int vf, u16 vlan, u8 qos, |
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index d85e6446f9d9..867292880c07 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c | |||
@@ -604,10 +604,10 @@ static int mlx4_en_complete_rx_desc(struct mlx4_en_priv *priv, | |||
604 | dma_sync_single_for_cpu(priv->ddev, dma, frag_info->frag_size, | 604 | dma_sync_single_for_cpu(priv->ddev, dma, frag_info->frag_size, |
605 | DMA_FROM_DEVICE); | 605 | DMA_FROM_DEVICE); |
606 | 606 | ||
607 | /* Save page reference in skb */ | 607 | __skb_fill_page_desc(skb, nr, frags[nr].page, |
608 | __skb_frag_set_page(&skb_frags_rx[nr], frags[nr].page); | 608 | frags[nr].page_offset, |
609 | skb_frag_size_set(&skb_frags_rx[nr], frag_info->frag_size); | 609 | frag_info->frag_size); |
610 | skb_frags_rx[nr].page_offset = frags[nr].page_offset; | 610 | |
611 | skb->truesize += frag_info->frag_stride; | 611 | skb->truesize += frag_info->frag_stride; |
612 | frags[nr].page = NULL; | 612 | frags[nr].page = NULL; |
613 | } | 613 | } |
diff --git a/drivers/net/ethernet/mellanox/mlx4/eq.c b/drivers/net/ethernet/mellanox/mlx4/eq.c index 39232b6a974f..07406cf2eacd 100644 --- a/drivers/net/ethernet/mellanox/mlx4/eq.c +++ b/drivers/net/ethernet/mellanox/mlx4/eq.c | |||
@@ -1249,9 +1249,8 @@ int mlx4_init_eq_table(struct mlx4_dev *dev) | |||
1249 | mlx4_warn(dev, "Failed adding irq rmap\n"); | 1249 | mlx4_warn(dev, "Failed adding irq rmap\n"); |
1250 | } | 1250 | } |
1251 | #endif | 1251 | #endif |
1252 | err = mlx4_create_eq(dev, dev->caps.num_cqs - | 1252 | err = mlx4_create_eq(dev, dev->quotas.cq + |
1253 | dev->caps.reserved_cqs + | 1253 | MLX4_NUM_SPARE_EQE, |
1254 | MLX4_NUM_SPARE_EQE, | ||
1255 | (dev->flags & MLX4_FLAG_MSI_X) ? | 1254 | (dev->flags & MLX4_FLAG_MSI_X) ? |
1256 | i + 1 - !!(i > MLX4_EQ_ASYNC) : 0, | 1255 | i + 1 - !!(i > MLX4_EQ_ASYNC) : 0, |
1257 | eq); | 1256 | eq); |
diff --git a/drivers/net/ethernet/mellanox/mlx4/fw.c b/drivers/net/ethernet/mellanox/mlx4/fw.c index 3fe885ce1902..37e84a59e751 100644 --- a/drivers/net/ethernet/mellanox/mlx4/fw.c +++ b/drivers/net/ethernet/mellanox/mlx4/fw.c | |||
@@ -2436,7 +2436,7 @@ int mlx4_config_dev_retrieval(struct mlx4_dev *dev, | |||
2436 | #define CONFIG_DEV_RX_CSUM_MODE_PORT2_BIT_OFFSET 4 | 2436 | #define CONFIG_DEV_RX_CSUM_MODE_PORT2_BIT_OFFSET 4 |
2437 | 2437 | ||
2438 | if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_CONFIG_DEV)) | 2438 | if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_CONFIG_DEV)) |
2439 | return -ENOTSUPP; | 2439 | return -EOPNOTSUPP; |
2440 | 2440 | ||
2441 | err = mlx4_CONFIG_DEV_get(dev, &config_dev); | 2441 | err = mlx4_CONFIG_DEV_get(dev, &config_dev); |
2442 | if (err) | 2442 | if (err) |
diff --git a/drivers/net/ethernet/mellanox/mlx4/intf.c b/drivers/net/ethernet/mellanox/mlx4/intf.c index 8258d08acd8c..e00f627331cb 100644 --- a/drivers/net/ethernet/mellanox/mlx4/intf.c +++ b/drivers/net/ethernet/mellanox/mlx4/intf.c | |||
@@ -136,7 +136,7 @@ int mlx4_do_bond(struct mlx4_dev *dev, bool enable) | |||
136 | LIST_HEAD(bond_list); | 136 | LIST_HEAD(bond_list); |
137 | 137 | ||
138 | if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_PORT_REMAP)) | 138 | if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_PORT_REMAP)) |
139 | return -ENOTSUPP; | 139 | return -EOPNOTSUPP; |
140 | 140 | ||
141 | ret = mlx4_disable_rx_port_check(dev, enable); | 141 | ret = mlx4_disable_rx_port_check(dev, enable); |
142 | if (ret) { | 142 | if (ret) { |
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c index 15ef787e71ba..21377c315083 100644 --- a/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/drivers/net/ethernet/mellanox/mlx4/main.c | |||
@@ -841,8 +841,6 @@ static int mlx4_slave_cap(struct mlx4_dev *dev) | |||
841 | return -EINVAL; | 841 | return -EINVAL; |
842 | } | 842 | } |
843 | 843 | ||
844 | mlx4_log_num_mgm_entry_size = hca_param.log_mc_entry_sz; | ||
845 | |||
846 | dev->caps.hca_core_clock = hca_param.hca_core_clock; | 844 | dev->caps.hca_core_clock = hca_param.hca_core_clock; |
847 | 845 | ||
848 | memset(&dev_cap, 0, sizeof(dev_cap)); | 846 | memset(&dev_cap, 0, sizeof(dev_cap)); |
@@ -1447,7 +1445,7 @@ int mlx4_port_map_set(struct mlx4_dev *dev, struct mlx4_port_map *v2p) | |||
1447 | int err; | 1445 | int err; |
1448 | 1446 | ||
1449 | if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_PORT_REMAP)) | 1447 | if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_PORT_REMAP)) |
1450 | return -ENOTSUPP; | 1448 | return -EOPNOTSUPP; |
1451 | 1449 | ||
1452 | mutex_lock(&priv->bond_mutex); | 1450 | mutex_lock(&priv->bond_mutex); |
1453 | 1451 | ||
@@ -1884,7 +1882,7 @@ int mlx4_get_internal_clock_params(struct mlx4_dev *dev, | |||
1884 | struct mlx4_priv *priv = mlx4_priv(dev); | 1882 | struct mlx4_priv *priv = mlx4_priv(dev); |
1885 | 1883 | ||
1886 | if (mlx4_is_slave(dev)) | 1884 | if (mlx4_is_slave(dev)) |
1887 | return -ENOTSUPP; | 1885 | return -EOPNOTSUPP; |
1888 | 1886 | ||
1889 | if (!params) | 1887 | if (!params) |
1890 | return -EINVAL; | 1888 | return -EINVAL; |
@@ -2384,7 +2382,7 @@ static int mlx4_init_hca(struct mlx4_dev *dev) | |||
2384 | 2382 | ||
2385 | /* Query CONFIG_DEV parameters */ | 2383 | /* Query CONFIG_DEV parameters */ |
2386 | err = mlx4_config_dev_retrieval(dev, ¶ms); | 2384 | err = mlx4_config_dev_retrieval(dev, ¶ms); |
2387 | if (err && err != -ENOTSUPP) { | 2385 | if (err && err != -EOPNOTSUPP) { |
2388 | mlx4_err(dev, "Failed to query CONFIG_DEV parameters\n"); | 2386 | mlx4_err(dev, "Failed to query CONFIG_DEV parameters\n"); |
2389 | } else if (!err) { | 2387 | } else if (!err) { |
2390 | dev->caps.rx_checksum_flags_port[1] = params.rx_csum_flags_port_1; | 2388 | dev->caps.rx_checksum_flags_port[1] = params.rx_csum_flags_port_1; |
@@ -3503,6 +3501,8 @@ slave_start: | |||
3503 | goto err_disable_msix; | 3501 | goto err_disable_msix; |
3504 | } | 3502 | } |
3505 | 3503 | ||
3504 | mlx4_init_quotas(dev); | ||
3505 | |||
3506 | err = mlx4_setup_hca(dev); | 3506 | err = mlx4_setup_hca(dev); |
3507 | if (err == -EBUSY && (dev->flags & MLX4_FLAG_MSI_X) && | 3507 | if (err == -EBUSY && (dev->flags & MLX4_FLAG_MSI_X) && |
3508 | !mlx4_is_mfunc(dev)) { | 3508 | !mlx4_is_mfunc(dev)) { |
@@ -3515,7 +3515,6 @@ slave_start: | |||
3515 | if (err) | 3515 | if (err) |
3516 | goto err_steer; | 3516 | goto err_steer; |
3517 | 3517 | ||
3518 | mlx4_init_quotas(dev); | ||
3519 | /* When PF resources are ready arm its comm channel to enable | 3518 | /* When PF resources are ready arm its comm channel to enable |
3520 | * getting commands | 3519 | * getting commands |
3521 | */ | 3520 | */ |
diff --git a/drivers/net/ethernet/mellanox/mlx4/mr.c b/drivers/net/ethernet/mellanox/mlx4/mr.c index 395b5463cfd9..db65f72879e9 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mr.c +++ b/drivers/net/ethernet/mellanox/mlx4/mr.c | |||
@@ -823,7 +823,7 @@ int mlx4_mw_alloc(struct mlx4_dev *dev, u32 pd, enum mlx4_mw_type type, | |||
823 | !(dev->caps.flags & MLX4_DEV_CAP_FLAG_MEM_WINDOW)) || | 823 | !(dev->caps.flags & MLX4_DEV_CAP_FLAG_MEM_WINDOW)) || |
824 | (type == MLX4_MW_TYPE_2 && | 824 | (type == MLX4_MW_TYPE_2 && |
825 | !(dev->caps.bmme_flags & MLX4_BMME_FLAG_TYPE_2_WIN))) | 825 | !(dev->caps.bmme_flags & MLX4_BMME_FLAG_TYPE_2_WIN))) |
826 | return -ENOTSUPP; | 826 | return -EOPNOTSUPP; |
827 | 827 | ||
828 | index = mlx4_mpt_reserve(dev); | 828 | index = mlx4_mpt_reserve(dev); |
829 | if (index == -1) | 829 | if (index == -1) |
diff --git a/drivers/net/ethernet/mellanox/mlx4/qp.c b/drivers/net/ethernet/mellanox/mlx4/qp.c index d1cd9c32a9ae..2d6abd4662b1 100644 --- a/drivers/net/ethernet/mellanox/mlx4/qp.c +++ b/drivers/net/ethernet/mellanox/mlx4/qp.c | |||
@@ -447,7 +447,7 @@ int mlx4_update_qp(struct mlx4_dev *dev, u32 qpn, | |||
447 | & MLX4_DEV_CAP_FLAG2_UPDATE_QP_SRC_CHECK_LB)) { | 447 | & MLX4_DEV_CAP_FLAG2_UPDATE_QP_SRC_CHECK_LB)) { |
448 | mlx4_warn(dev, | 448 | mlx4_warn(dev, |
449 | "Trying to set src check LB, but it isn't supported\n"); | 449 | "Trying to set src check LB, but it isn't supported\n"); |
450 | err = -ENOTSUPP; | 450 | err = -EOPNOTSUPP; |
451 | goto out; | 451 | goto out; |
452 | } | 452 | } |
453 | pri_addr_path_mask |= | 453 | pri_addr_path_mask |= |
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c index 6fe9f76ae656..d8d5d161b8c7 100644 --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | |||
@@ -4297,7 +4297,7 @@ int mlx4_UPDATE_QP_wrapper(struct mlx4_dev *dev, int slave, | |||
4297 | MLX4_DEV_CAP_FLAG2_UPDATE_QP_SRC_CHECK_LB)) { | 4297 | MLX4_DEV_CAP_FLAG2_UPDATE_QP_SRC_CHECK_LB)) { |
4298 | mlx4_warn(dev, "Src check LB for slave %d isn't supported\n", | 4298 | mlx4_warn(dev, "Src check LB for slave %d isn't supported\n", |
4299 | slave); | 4299 | slave); |
4300 | return -ENOTSUPP; | 4300 | return -EOPNOTSUPP; |
4301 | } | 4301 | } |
4302 | 4302 | ||
4303 | /* Just change the smac for the QP */ | 4303 | /* Just change the smac for the QP */ |
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h index 1f3568694a57..7b74afcbbab2 100644 --- a/include/linux/mlx4/cmd.h +++ b/include/linux/mlx4/cmd.h | |||
@@ -308,7 +308,7 @@ int mlx4_get_counter_stats(struct mlx4_dev *dev, int counter_index, | |||
308 | int mlx4_get_vf_stats(struct mlx4_dev *dev, int port, int vf_idx, | 308 | int mlx4_get_vf_stats(struct mlx4_dev *dev, int port, int vf_idx, |
309 | struct ifla_vf_stats *vf_stats); | 309 | struct ifla_vf_stats *vf_stats); |
310 | u32 mlx4_comm_get_version(void); | 310 | u32 mlx4_comm_get_version(void); |
311 | int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac); | 311 | int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u8 *mac); |
312 | int mlx4_set_vf_vlan(struct mlx4_dev *dev, int port, int vf, u16 vlan, | 312 | int mlx4_set_vf_vlan(struct mlx4_dev *dev, int port, int vf, u16 vlan, |
313 | u8 qos, __be16 proto); | 313 | u8 qos, __be16 proto); |
314 | int mlx4_set_vf_rate(struct mlx4_dev *dev, int port, int vf, int min_tx_rate, | 314 | int mlx4_set_vf_rate(struct mlx4_dev *dev, int port, int vf, int min_tx_rate, |
diff --git a/include/linux/mlx4/driver.h b/include/linux/mlx4/driver.h index bd0e7075ea6d..e965e5090d96 100644 --- a/include/linux/mlx4/driver.h +++ b/include/linux/mlx4/driver.h | |||
@@ -104,4 +104,14 @@ static inline u64 mlx4_mac_to_u64(u8 *addr) | |||
104 | return mac; | 104 | return mac; |
105 | } | 105 | } |
106 | 106 | ||
107 | static inline void mlx4_u64_to_mac(u8 *addr, u64 mac) | ||
108 | { | ||
109 | int i; | ||
110 | |||
111 | for (i = ETH_ALEN; i > 0; i--) { | ||
112 | addr[i - 1] = mac && 0xFF; | ||
113 | mac >>= 8; | ||
114 | } | ||
115 | } | ||
116 | |||
107 | #endif /* MLX4_DRIVER_H */ | 117 | #endif /* MLX4_DRIVER_H */ |