193cc4f0dSTal Shnaiderman /* SPDX-License-Identifier: BSD-3-Clause 293cc4f0dSTal Shnaiderman * Copyright 2020 Mellanox Technologies, Ltd 393cc4f0dSTal Shnaiderman */ 493cc4f0dSTal Shnaiderman #include <stdio.h> 593cc4f0dSTal Shnaiderman 693cc4f0dSTal Shnaiderman #include <rte_errno.h> 793cc4f0dSTal Shnaiderman #include <rte_ether.h> 893cc4f0dSTal Shnaiderman #include <rte_ethdev_driver.h> 993cc4f0dSTal Shnaiderman #include <rte_interrupts.h> 1093cc4f0dSTal Shnaiderman 1193cc4f0dSTal Shnaiderman #include <mlx5_glue.h> 1293cc4f0dSTal Shnaiderman #include <mlx5_devx_cmds.h> 1393cc4f0dSTal Shnaiderman #include <mlx5_common.h> 1493cc4f0dSTal Shnaiderman #include <mlx5_win_ext.h> 1593cc4f0dSTal Shnaiderman #include <mlx5_malloc.h> 1693cc4f0dSTal Shnaiderman #include <mlx5.h> 1793cc4f0dSTal Shnaiderman 1893cc4f0dSTal Shnaiderman /** 1993cc4f0dSTal Shnaiderman * Get MAC address by querying netdevice. 2093cc4f0dSTal Shnaiderman * 2193cc4f0dSTal Shnaiderman * @param[in] dev 2293cc4f0dSTal Shnaiderman * Pointer to Ethernet device. 2393cc4f0dSTal Shnaiderman * @param[out] mac 2493cc4f0dSTal Shnaiderman * MAC address output buffer. 2593cc4f0dSTal Shnaiderman * 2693cc4f0dSTal Shnaiderman * @return 2793cc4f0dSTal Shnaiderman * 0 on success, a negative errno value otherwise and rte_errno is set. 2893cc4f0dSTal Shnaiderman */ 2993cc4f0dSTal Shnaiderman int 3093cc4f0dSTal Shnaiderman mlx5_get_mac(struct rte_eth_dev *dev, uint8_t (*mac)[RTE_ETHER_ADDR_LEN]) 3193cc4f0dSTal Shnaiderman { 3293cc4f0dSTal Shnaiderman struct mlx5_priv *priv; 3393cc4f0dSTal Shnaiderman mlx5_context_st *context_obj; 3493cc4f0dSTal Shnaiderman 3593cc4f0dSTal Shnaiderman if (!dev) { 3693cc4f0dSTal Shnaiderman rte_errno = EINVAL; 3793cc4f0dSTal Shnaiderman return -rte_errno; 3893cc4f0dSTal Shnaiderman } 3993cc4f0dSTal Shnaiderman priv = dev->data->dev_private; 4093cc4f0dSTal Shnaiderman context_obj = (mlx5_context_st *)priv->sh->ctx; 4193cc4f0dSTal Shnaiderman memcpy(mac, context_obj->mlx5_dev.eth_mac, RTE_ETHER_ADDR_LEN); 4293cc4f0dSTal Shnaiderman return 0; 4393cc4f0dSTal Shnaiderman } 44*b653ce1dSOphir Munk 45*b653ce1dSOphir Munk /** 46*b653ce1dSOphir Munk * Set device MTU. 47*b653ce1dSOphir Munk * 48*b653ce1dSOphir Munk * @param dev 49*b653ce1dSOphir Munk * Pointer to Ethernet device. 50*b653ce1dSOphir Munk * @param mtu 51*b653ce1dSOphir Munk * MTU value to set. 52*b653ce1dSOphir Munk * 53*b653ce1dSOphir Munk * @return 54*b653ce1dSOphir Munk * 0 on success, a negative errno value otherwise and rte_errno is set. 55*b653ce1dSOphir Munk */ 56*b653ce1dSOphir Munk int 57*b653ce1dSOphir Munk mlx5_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) 58*b653ce1dSOphir Munk { 59*b653ce1dSOphir Munk RTE_SET_USED(dev); 60*b653ce1dSOphir Munk RTE_SET_USED(mtu); 61*b653ce1dSOphir Munk return -ENOTSUP; 62*b653ce1dSOphir Munk } 63*b653ce1dSOphir Munk 64*b653ce1dSOphir Munk /* 65*b653ce1dSOphir Munk * Unregister callback handler safely. The handler may be active 66*b653ce1dSOphir Munk * while we are trying to unregister it, in this case code -EAGAIN 67*b653ce1dSOphir Munk * is returned by rte_intr_callback_unregister(). This routine checks 68*b653ce1dSOphir Munk * the return code and tries to unregister handler again. 69*b653ce1dSOphir Munk * 70*b653ce1dSOphir Munk * @param handle 71*b653ce1dSOphir Munk * interrupt handle 72*b653ce1dSOphir Munk * @param cb_fn 73*b653ce1dSOphir Munk * pointer to callback routine 74*b653ce1dSOphir Munk * @cb_arg 75*b653ce1dSOphir Munk * opaque callback parameter 76*b653ce1dSOphir Munk */ 77*b653ce1dSOphir Munk void 78*b653ce1dSOphir Munk mlx5_intr_callback_unregister(const struct rte_intr_handle *handle, 79*b653ce1dSOphir Munk rte_intr_callback_fn cb_fn, void *cb_arg) 80*b653ce1dSOphir Munk { 81*b653ce1dSOphir Munk RTE_SET_USED(handle); 82*b653ce1dSOphir Munk RTE_SET_USED(cb_fn); 83*b653ce1dSOphir Munk RTE_SET_USED(cb_arg); 84*b653ce1dSOphir Munk } 85*b653ce1dSOphir Munk 86*b653ce1dSOphir Munk /** 87*b653ce1dSOphir Munk * DPDK callback to get flow control status. 88*b653ce1dSOphir Munk * 89*b653ce1dSOphir Munk * @param dev 90*b653ce1dSOphir Munk * Pointer to Ethernet device structure. 91*b653ce1dSOphir Munk * @param[out] fc_conf 92*b653ce1dSOphir Munk * Flow control output buffer. 93*b653ce1dSOphir Munk * 94*b653ce1dSOphir Munk * @return 95*b653ce1dSOphir Munk * 0 on success, a negative errno value otherwise and rte_errno is set. 96*b653ce1dSOphir Munk */ 97*b653ce1dSOphir Munk int 98*b653ce1dSOphir Munk mlx5_dev_get_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) 99*b653ce1dSOphir Munk { 100*b653ce1dSOphir Munk RTE_SET_USED(dev); 101*b653ce1dSOphir Munk RTE_SET_USED(fc_conf); 102*b653ce1dSOphir Munk return -ENOTSUP; 103*b653ce1dSOphir Munk } 104*b653ce1dSOphir Munk 105*b653ce1dSOphir Munk /** 106*b653ce1dSOphir Munk * DPDK callback to modify flow control parameters. 107*b653ce1dSOphir Munk * 108*b653ce1dSOphir Munk * @param dev 109*b653ce1dSOphir Munk * Pointer to Ethernet device structure. 110*b653ce1dSOphir Munk * @param[in] fc_conf 111*b653ce1dSOphir Munk * Flow control parameters. 112*b653ce1dSOphir Munk * 113*b653ce1dSOphir Munk * @return 114*b653ce1dSOphir Munk * 0 on success, a negative errno value otherwise and rte_errno is set. 115*b653ce1dSOphir Munk */ 116*b653ce1dSOphir Munk int 117*b653ce1dSOphir Munk mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) 118*b653ce1dSOphir Munk { 119*b653ce1dSOphir Munk RTE_SET_USED(dev); 120*b653ce1dSOphir Munk RTE_SET_USED(fc_conf); 121*b653ce1dSOphir Munk return -ENOTSUP; 122*b653ce1dSOphir Munk } 123*b653ce1dSOphir Munk 124*b653ce1dSOphir Munk /** 125*b653ce1dSOphir Munk * Query the number of statistics provided by ETHTOOL. 126*b653ce1dSOphir Munk * 127*b653ce1dSOphir Munk * @param dev 128*b653ce1dSOphir Munk * Pointer to Ethernet device. 129*b653ce1dSOphir Munk * 130*b653ce1dSOphir Munk * @return 131*b653ce1dSOphir Munk * Number of statistics on success, negative errno value otherwise and 132*b653ce1dSOphir Munk * rte_errno is set. 133*b653ce1dSOphir Munk */ 134*b653ce1dSOphir Munk int 135*b653ce1dSOphir Munk mlx5_os_get_stats_n(struct rte_eth_dev *dev) 136*b653ce1dSOphir Munk { 137*b653ce1dSOphir Munk RTE_SET_USED(dev); 138*b653ce1dSOphir Munk return -ENOTSUP; 139*b653ce1dSOphir Munk } 140*b653ce1dSOphir Munk 141*b653ce1dSOphir Munk /** 142*b653ce1dSOphir Munk * Init the structures to read device counters. 143*b653ce1dSOphir Munk * 144*b653ce1dSOphir Munk * @param dev 145*b653ce1dSOphir Munk * Pointer to Ethernet device. 146*b653ce1dSOphir Munk */ 147*b653ce1dSOphir Munk void 148*b653ce1dSOphir Munk mlx5_os_stats_init(struct rte_eth_dev *dev) 149*b653ce1dSOphir Munk { 150*b653ce1dSOphir Munk RTE_SET_USED(dev); 151*b653ce1dSOphir Munk } 152*b653ce1dSOphir Munk 153*b653ce1dSOphir Munk /** 154*b653ce1dSOphir Munk * Read device counters table. 155*b653ce1dSOphir Munk * 156*b653ce1dSOphir Munk * @param dev 157*b653ce1dSOphir Munk * Pointer to Ethernet device. 158*b653ce1dSOphir Munk * @param[out] stats 159*b653ce1dSOphir Munk * Counters table output buffer. 160*b653ce1dSOphir Munk * 161*b653ce1dSOphir Munk * @return 162*b653ce1dSOphir Munk * 0 on success and stats is filled, negative errno value otherwise and 163*b653ce1dSOphir Munk * rte_errno is set. 164*b653ce1dSOphir Munk */ 165*b653ce1dSOphir Munk int 166*b653ce1dSOphir Munk mlx5_os_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats) 167*b653ce1dSOphir Munk { 168*b653ce1dSOphir Munk RTE_SET_USED(dev); 169*b653ce1dSOphir Munk RTE_SET_USED(stats); 170*b653ce1dSOphir Munk return -ENOTSUP; 171*b653ce1dSOphir Munk } 172*b653ce1dSOphir Munk 173*b653ce1dSOphir Munk /** 174*b653ce1dSOphir Munk * DPDK callback to bring the link DOWN. 175*b653ce1dSOphir Munk * 176*b653ce1dSOphir Munk * @param dev 177*b653ce1dSOphir Munk * Pointer to Ethernet device structure. 178*b653ce1dSOphir Munk * 179*b653ce1dSOphir Munk * @return 180*b653ce1dSOphir Munk * 0 on success, a negative errno value otherwise 181*b653ce1dSOphir Munk */ 182*b653ce1dSOphir Munk int 183*b653ce1dSOphir Munk mlx5_set_link_down(struct rte_eth_dev *dev) 184*b653ce1dSOphir Munk { 185*b653ce1dSOphir Munk RTE_SET_USED(dev); 186*b653ce1dSOphir Munk return -ENOTSUP; 187*b653ce1dSOphir Munk } 188*b653ce1dSOphir Munk 189*b653ce1dSOphir Munk /** 190*b653ce1dSOphir Munk * DPDK callback to bring the link UP. 191*b653ce1dSOphir Munk * 192*b653ce1dSOphir Munk * @param dev 193*b653ce1dSOphir Munk * Pointer to Ethernet device structure. 194*b653ce1dSOphir Munk * 195*b653ce1dSOphir Munk * @return 196*b653ce1dSOphir Munk * 0 on success, a negative errno value otherwise 197*b653ce1dSOphir Munk */ 198*b653ce1dSOphir Munk int 199*b653ce1dSOphir Munk mlx5_set_link_up(struct rte_eth_dev *dev) 200*b653ce1dSOphir Munk { 201*b653ce1dSOphir Munk RTE_SET_USED(dev); 202*b653ce1dSOphir Munk return -ENOTSUP; 203*b653ce1dSOphir Munk } 204*b653ce1dSOphir Munk 205*b653ce1dSOphir Munk /** 206*b653ce1dSOphir Munk * DPDK callback to retrieve plug-in module EEPROM information (type and size). 207*b653ce1dSOphir Munk * 208*b653ce1dSOphir Munk * @param dev 209*b653ce1dSOphir Munk * Pointer to Ethernet device structure. 210*b653ce1dSOphir Munk * @param[out] modinfo 211*b653ce1dSOphir Munk * Storage for plug-in module EEPROM information. 212*b653ce1dSOphir Munk * 213*b653ce1dSOphir Munk * @return 214*b653ce1dSOphir Munk * 0 on success, a negative errno value otherwise and rte_errno is set. 215*b653ce1dSOphir Munk */ 216*b653ce1dSOphir Munk int 217*b653ce1dSOphir Munk mlx5_get_module_info(struct rte_eth_dev *dev, 218*b653ce1dSOphir Munk struct rte_eth_dev_module_info *modinfo) 219*b653ce1dSOphir Munk { 220*b653ce1dSOphir Munk RTE_SET_USED(dev); 221*b653ce1dSOphir Munk RTE_SET_USED(modinfo); 222*b653ce1dSOphir Munk return -ENOTSUP; 223*b653ce1dSOphir Munk } 224*b653ce1dSOphir Munk 225*b653ce1dSOphir Munk /** 226*b653ce1dSOphir Munk * DPDK callback to retrieve plug-in module EEPROM data. 227*b653ce1dSOphir Munk * 228*b653ce1dSOphir Munk * @param dev 229*b653ce1dSOphir Munk * Pointer to Ethernet device structure. 230*b653ce1dSOphir Munk * @param[out] info 231*b653ce1dSOphir Munk * Storage for plug-in module EEPROM data. 232*b653ce1dSOphir Munk * 233*b653ce1dSOphir Munk * @return 234*b653ce1dSOphir Munk * 0 on success, a negative errno value otherwise and rte_errno is set. 235*b653ce1dSOphir Munk */ 236*b653ce1dSOphir Munk int mlx5_get_module_eeprom(struct rte_eth_dev *dev, 237*b653ce1dSOphir Munk struct rte_dev_eeprom_info *info) 238*b653ce1dSOphir Munk { 239*b653ce1dSOphir Munk RTE_SET_USED(dev); 240*b653ce1dSOphir Munk RTE_SET_USED(info); 241*b653ce1dSOphir Munk return -ENOTSUP; 242*b653ce1dSOphir Munk } 243