xref: /dpdk/drivers/net/mlx5/windows/mlx5_ethdev_os.c (revision b653ce1dae97090f97b9dff3bf8a8284c80fc85c)
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