xref: /dpdk/drivers/net/mlx5/windows/mlx5_ethdev_os.c (revision a687c3e658c2d889052089af8340bc0b9299c856)
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>
8df96fd0dSBruce Richardson #include <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>
1799d7c45cSTal Shnaiderman #include <mlx5_utils.h>
1893cc4f0dSTal Shnaiderman 
1993cc4f0dSTal Shnaiderman /**
2093cc4f0dSTal Shnaiderman  * Get MAC address by querying netdevice.
2193cc4f0dSTal Shnaiderman  *
2293cc4f0dSTal Shnaiderman  * @param[in] dev
2393cc4f0dSTal Shnaiderman  *   Pointer to Ethernet device.
2493cc4f0dSTal Shnaiderman  * @param[out] mac
2593cc4f0dSTal Shnaiderman  *   MAC address output buffer.
2693cc4f0dSTal Shnaiderman  *
2793cc4f0dSTal Shnaiderman  * @return
2893cc4f0dSTal Shnaiderman  *   0 on success, a negative errno value otherwise and rte_errno is set.
2993cc4f0dSTal Shnaiderman  */
3093cc4f0dSTal Shnaiderman int
mlx5_get_mac(struct rte_eth_dev * dev,uint8_t (* mac)[RTE_ETHER_ADDR_LEN])3193cc4f0dSTal Shnaiderman mlx5_get_mac(struct rte_eth_dev *dev, uint8_t (*mac)[RTE_ETHER_ADDR_LEN])
3293cc4f0dSTal Shnaiderman {
3393cc4f0dSTal Shnaiderman 	struct mlx5_priv *priv;
3493cc4f0dSTal Shnaiderman 	mlx5_context_st *context_obj;
3593cc4f0dSTal Shnaiderman 
3693cc4f0dSTal Shnaiderman 	if (!dev) {
3793cc4f0dSTal Shnaiderman 		rte_errno = EINVAL;
3893cc4f0dSTal Shnaiderman 		return -rte_errno;
3993cc4f0dSTal Shnaiderman 	}
4093cc4f0dSTal Shnaiderman 	priv = dev->data->dev_private;
41ca1418ceSMichael Baum 	context_obj = (mlx5_context_st *)priv->sh->cdev->ctx;
4293cc4f0dSTal Shnaiderman 	memcpy(mac, context_obj->mlx5_dev.eth_mac, RTE_ETHER_ADDR_LEN);
4393cc4f0dSTal Shnaiderman 	return 0;
4493cc4f0dSTal Shnaiderman }
45b653ce1dSOphir Munk 
46b653ce1dSOphir Munk /**
4749c797f8STal Shnaiderman  * Get interface name from private structure.
4849c797f8STal Shnaiderman  *
4949c797f8STal Shnaiderman  *
5049c797f8STal Shnaiderman  * @param[in] dev
5149c797f8STal Shnaiderman  *   Pointer to Ethernet device.
5249c797f8STal Shnaiderman  * @param[out] ifname
5349c797f8STal Shnaiderman  *   Interface name output buffer.
5449c797f8STal Shnaiderman  *
5549c797f8STal Shnaiderman  * @return
5649c797f8STal Shnaiderman  *   0 on success, a negative errno value otherwise and rte_errno is set.
5749c797f8STal Shnaiderman  */
5849c797f8STal Shnaiderman int
mlx5_get_ifname(const struct rte_eth_dev * dev,char (* ifname)[MLX5_NAMESIZE])5928743807STal Shnaiderman mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[MLX5_NAMESIZE])
6049c797f8STal Shnaiderman {
6149c797f8STal Shnaiderman 	struct mlx5_priv *priv;
6249c797f8STal Shnaiderman 	mlx5_context_st *context_obj;
6349c797f8STal Shnaiderman 
6449c797f8STal Shnaiderman 	if (!dev) {
6549c797f8STal Shnaiderman 		rte_errno = EINVAL;
6649c797f8STal Shnaiderman 		return -rte_errno;
6749c797f8STal Shnaiderman 	}
6849c797f8STal Shnaiderman 	priv = dev->data->dev_private;
69ca1418ceSMichael Baum 	context_obj = (mlx5_context_st *)priv->sh->cdev->ctx;
7028743807STal Shnaiderman 	strncpy(*ifname, context_obj->mlx5_dev.name, MLX5_NAMESIZE);
7149c797f8STal Shnaiderman 	return 0;
7249c797f8STal Shnaiderman }
7349c797f8STal Shnaiderman 
7449c797f8STal Shnaiderman /**
7507cae8ffSTal Shnaiderman  * Get device MTU.
7607cae8ffSTal Shnaiderman  *
7707cae8ffSTal Shnaiderman  * @param dev
7807cae8ffSTal Shnaiderman  *   Pointer to Ethernet device.
7907cae8ffSTal Shnaiderman  * @param[out] mtu
8007cae8ffSTal Shnaiderman  *   MTU value output buffer.
8107cae8ffSTal Shnaiderman  *
8207cae8ffSTal Shnaiderman  * @return
8307cae8ffSTal Shnaiderman  *   0 on success, a negative errno value otherwise and rte_errno is set.
8407cae8ffSTal Shnaiderman  */
8507cae8ffSTal Shnaiderman int
mlx5_get_mtu(struct rte_eth_dev * dev,uint16_t * mtu)8607cae8ffSTal Shnaiderman mlx5_get_mtu(struct rte_eth_dev *dev, uint16_t *mtu)
8707cae8ffSTal Shnaiderman {
88cb91f12fSAdham Masarwah 	int err;
89cb91f12fSAdham Masarwah 	uint32_t curr_mtu;
9007cae8ffSTal Shnaiderman 	struct mlx5_priv *priv;
9107cae8ffSTal Shnaiderman 	mlx5_context_st *context_obj;
9207cae8ffSTal Shnaiderman 
9307cae8ffSTal Shnaiderman 	if (!dev) {
9407cae8ffSTal Shnaiderman 		rte_errno = EINVAL;
9507cae8ffSTal Shnaiderman 		return -rte_errno;
9607cae8ffSTal Shnaiderman 	}
9707cae8ffSTal Shnaiderman 	priv = dev->data->dev_private;
98ca1418ceSMichael Baum 	context_obj = (mlx5_context_st *)priv->sh->cdev->ctx;
99cb91f12fSAdham Masarwah 
100cb91f12fSAdham Masarwah 	err = mlx5_glue->devx_get_mtu(context_obj, &curr_mtu);
101cb91f12fSAdham Masarwah 	if (err != 0) {
102cb91f12fSAdham Masarwah 		DRV_LOG(WARNING, "Could not get the MTU!");
103cb91f12fSAdham Masarwah 		return err;
104cb91f12fSAdham Masarwah 	}
105cb91f12fSAdham Masarwah 	*mtu = (uint16_t)curr_mtu;
106cb91f12fSAdham Masarwah 
10707cae8ffSTal Shnaiderman 	return 0;
10807cae8ffSTal Shnaiderman }
10907cae8ffSTal Shnaiderman 
11007cae8ffSTal Shnaiderman /**
111b653ce1dSOphir Munk  * Set device MTU.
112b653ce1dSOphir Munk  *
113b653ce1dSOphir Munk  * @param dev
114b653ce1dSOphir Munk  *   Pointer to Ethernet device.
115b653ce1dSOphir Munk  * @param mtu
116b653ce1dSOphir Munk  *   MTU value to set.
117b653ce1dSOphir Munk  *
118b653ce1dSOphir Munk  * @return
119b653ce1dSOphir Munk  *   0 on success, a negative errno value otherwise and rte_errno is set.
120b653ce1dSOphir Munk  */
121b653ce1dSOphir Munk int
mlx5_set_mtu(struct rte_eth_dev * dev,uint16_t mtu)122b653ce1dSOphir Munk mlx5_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
123b653ce1dSOphir Munk {
124cb91f12fSAdham Masarwah 	int err;
125cb91f12fSAdham Masarwah 	struct mlx5_priv *priv;
126cb91f12fSAdham Masarwah 	mlx5_context_st *context_obj;
127cb91f12fSAdham Masarwah 
128cb91f12fSAdham Masarwah 	if (!dev) {
129cb91f12fSAdham Masarwah 		rte_errno = EINVAL;
130cb91f12fSAdham Masarwah 		return -rte_errno;
131cb91f12fSAdham Masarwah 	}
132cb91f12fSAdham Masarwah 	priv = dev->data->dev_private;
133cb91f12fSAdham Masarwah 	context_obj = (mlx5_context_st *)priv->sh->cdev->ctx;
134cb91f12fSAdham Masarwah 
135cb91f12fSAdham Masarwah 	err = mlx5_glue->devx_set_mtu(context_obj, mtu);
136cb91f12fSAdham Masarwah 	if (err != 0) {
137cb91f12fSAdham Masarwah 		DRV_LOG(WARNING, "Could not set the MTU!");
138cb91f12fSAdham Masarwah 		return err;
139cb91f12fSAdham Masarwah 	}
140cb91f12fSAdham Masarwah 	return 0;
141b653ce1dSOphir Munk }
142b653ce1dSOphir Munk 
143b653ce1dSOphir Munk /**
144b653ce1dSOphir Munk  * DPDK callback to get flow control status.
145b653ce1dSOphir Munk  *
146b653ce1dSOphir Munk  * @param dev
147b653ce1dSOphir Munk  *   Pointer to Ethernet device structure.
148b653ce1dSOphir Munk  * @param[out] fc_conf
149b653ce1dSOphir Munk  *   Flow control output buffer.
150b653ce1dSOphir Munk  *
151b653ce1dSOphir Munk  * @return
152b653ce1dSOphir Munk  *   0 on success, a negative errno value otherwise and rte_errno is set.
153b653ce1dSOphir Munk  */
154b653ce1dSOphir Munk int
mlx5_dev_get_flow_ctrl(struct rte_eth_dev * dev,struct rte_eth_fc_conf * fc_conf)155b653ce1dSOphir Munk mlx5_dev_get_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
156b653ce1dSOphir Munk {
157b653ce1dSOphir Munk 	RTE_SET_USED(dev);
158b653ce1dSOphir Munk 	RTE_SET_USED(fc_conf);
159b653ce1dSOphir Munk 	return -ENOTSUP;
160b653ce1dSOphir Munk }
161b653ce1dSOphir Munk 
162b653ce1dSOphir Munk /**
163b653ce1dSOphir Munk  * DPDK callback to modify flow control parameters.
164b653ce1dSOphir Munk  *
165b653ce1dSOphir Munk  * @param dev
166b653ce1dSOphir Munk  *   Pointer to Ethernet device structure.
167b653ce1dSOphir Munk  * @param[in] fc_conf
168b653ce1dSOphir Munk  *   Flow control parameters.
169b653ce1dSOphir Munk  *
170b653ce1dSOphir Munk  * @return
171b653ce1dSOphir Munk  *   0 on success, a negative errno value otherwise and rte_errno is set.
172b653ce1dSOphir Munk  */
173b653ce1dSOphir Munk int
mlx5_dev_set_flow_ctrl(struct rte_eth_dev * dev,struct rte_eth_fc_conf * fc_conf)174b653ce1dSOphir Munk mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
175b653ce1dSOphir Munk {
176b653ce1dSOphir Munk 	RTE_SET_USED(dev);
177b653ce1dSOphir Munk 	RTE_SET_USED(fc_conf);
178b653ce1dSOphir Munk 	return -ENOTSUP;
179b653ce1dSOphir Munk }
180b653ce1dSOphir Munk 
181*a687c3e6SBing Zhao /*
182b653ce1dSOphir Munk  * Query the number of statistics provided by ETHTOOL.
183b653ce1dSOphir Munk  *
184b653ce1dSOphir Munk  * @param dev
185b653ce1dSOphir Munk  *   Pointer to Ethernet device.
186*a687c3e6SBing Zhao  * @param bond_master
187*a687c3e6SBing Zhao  *   Indicate if the device is a bond master.
188*a687c3e6SBing Zhao  * @param n_stats
189*a687c3e6SBing Zhao  *   Pointer to number of stats to store.
190*a687c3e6SBing Zhao  * @param n_stats_sec
191*a687c3e6SBing Zhao  *   Pointer to number of stats to store for the 2nd port of the bond.
192b653ce1dSOphir Munk  *
193b653ce1dSOphir Munk  * @return
194*a687c3e6SBing Zhao  *   0 on success, negative errno value otherwise and rte_errno is set.
195b653ce1dSOphir Munk  */
196b653ce1dSOphir Munk int
mlx5_os_get_stats_n(struct rte_eth_dev * dev,bool bond_master,uint16_t * n_stats,uint16_t * n_stats_sec)197*a687c3e6SBing Zhao mlx5_os_get_stats_n(struct rte_eth_dev *dev, bool bond_master,
198*a687c3e6SBing Zhao 		    uint16_t *n_stats, uint16_t *n_stats_sec)
199b653ce1dSOphir Munk {
200b653ce1dSOphir Munk 	RTE_SET_USED(dev);
201*a687c3e6SBing Zhao 	RTE_SET_USED(bond_master);
202*a687c3e6SBing Zhao 	RTE_SET_USED(n_stats);
203*a687c3e6SBing Zhao 	RTE_SET_USED(n_stats_sec);
204b653ce1dSOphir Munk 	return -ENOTSUP;
205b653ce1dSOphir Munk }
206b653ce1dSOphir Munk 
207b653ce1dSOphir Munk /**
208b653ce1dSOphir Munk  * Init the structures to read device counters.
209b653ce1dSOphir Munk  *
210b653ce1dSOphir Munk  * @param dev
211b653ce1dSOphir Munk  *   Pointer to Ethernet device.
212b653ce1dSOphir Munk  */
213b653ce1dSOphir Munk void
mlx5_os_stats_init(struct rte_eth_dev * dev)214b653ce1dSOphir Munk mlx5_os_stats_init(struct rte_eth_dev *dev)
215b653ce1dSOphir Munk {
216e50fe91aSTal Shnaiderman 	struct mlx5_priv *priv = dev->data->dev_private;
217e50fe91aSTal Shnaiderman 	struct mlx5_stats_ctrl *stats_ctrl = &priv->stats_ctrl;
218e50fe91aSTal Shnaiderman 	int ret;
219e50fe91aSTal Shnaiderman 
220e50fe91aSTal Shnaiderman 	/* Copy to base at first time. */
221e50fe91aSTal Shnaiderman 	ret = mlx5_os_read_dev_stat(priv, "out_of_buffer", &stats_ctrl->imissed_base);
222e50fe91aSTal Shnaiderman 	if (ret)
223e50fe91aSTal Shnaiderman 		DRV_LOG(ERR, "port %u cannot read device counters: %s",
224e50fe91aSTal Shnaiderman 			dev->data->port_id, strerror(rte_errno));
225e50fe91aSTal Shnaiderman 	stats_ctrl->imissed = 0;
226b653ce1dSOphir Munk }
227b653ce1dSOphir Munk 
228b653ce1dSOphir Munk /**
229b653ce1dSOphir Munk  * Read device counters table.
230b653ce1dSOphir Munk  *
231b653ce1dSOphir Munk  * @param dev
232b653ce1dSOphir Munk  *   Pointer to Ethernet device.
233*a687c3e6SBing Zhao  * @param bond_master
234*a687c3e6SBing Zhao  *   Indicate if the device is a bond master.
235b653ce1dSOphir Munk  * @param[out] stats
236b653ce1dSOphir Munk  *   Counters table output buffer.
237b653ce1dSOphir Munk  *
238b653ce1dSOphir Munk  * @return
239b653ce1dSOphir Munk  *   0 on success and stats is filled, negative errno value otherwise and
240b653ce1dSOphir Munk  *   rte_errno is set.
241b653ce1dSOphir Munk  */
242b653ce1dSOphir Munk int
mlx5_os_read_dev_counters(struct rte_eth_dev * dev,bool bond_master,uint64_t * stats)243*a687c3e6SBing Zhao mlx5_os_read_dev_counters(struct rte_eth_dev *dev, bool bond_master, uint64_t *stats)
244b653ce1dSOphir Munk {
245b653ce1dSOphir Munk 	RTE_SET_USED(dev);
246*a687c3e6SBing Zhao 	RTE_SET_USED(bond_master);
247b653ce1dSOphir Munk 	RTE_SET_USED(stats);
248b653ce1dSOphir Munk 	return -ENOTSUP;
249b653ce1dSOphir Munk }
250b653ce1dSOphir Munk 
251b653ce1dSOphir Munk /**
2526fbd7370STal Shnaiderman  * DPDK callback to retrieve physical link information.
2536fbd7370STal Shnaiderman  *
2546fbd7370STal Shnaiderman  * @param dev
2556fbd7370STal Shnaiderman  *   Pointer to Ethernet device structure.
2566fbd7370STal Shnaiderman  * @param wait_to_complete
2576fbd7370STal Shnaiderman  *   Wait for request completion.
2586fbd7370STal Shnaiderman  *
2596fbd7370STal Shnaiderman  * @return
2606fbd7370STal Shnaiderman  *   0 if link status was not updated, positive if it was, a negative errno
2616fbd7370STal Shnaiderman  *   value otherwise and rte_errno is set.
2626fbd7370STal Shnaiderman  */
2636fbd7370STal Shnaiderman int
mlx5_link_update(struct rte_eth_dev * dev,int wait_to_complete)2646fbd7370STal Shnaiderman mlx5_link_update(struct rte_eth_dev *dev, int wait_to_complete)
2656fbd7370STal Shnaiderman {
2666fbd7370STal Shnaiderman 	RTE_SET_USED(wait_to_complete);
2676fbd7370STal Shnaiderman 	struct mlx5_priv *priv;
2686fbd7370STal Shnaiderman 	mlx5_context_st *context_obj;
2696fbd7370STal Shnaiderman 	struct rte_eth_link dev_link;
2706fbd7370STal Shnaiderman 	int ret;
2716fbd7370STal Shnaiderman 
2726fbd7370STal Shnaiderman 	ret = 0;
2736fbd7370STal Shnaiderman 	if (!dev) {
2746fbd7370STal Shnaiderman 		rte_errno = EINVAL;
2756fbd7370STal Shnaiderman 		return -rte_errno;
2766fbd7370STal Shnaiderman 	}
2776fbd7370STal Shnaiderman 	priv = dev->data->dev_private;
278ca1418ceSMichael Baum 	context_obj = (mlx5_context_st *)priv->sh->cdev->ctx;
279d5003573STal Shnaiderman 	dev_link.link_speed = context_obj->mlx5_dev.link_speed / (1000 * 1000);
2806fbd7370STal Shnaiderman 	dev_link.link_status =
2816fbd7370STal Shnaiderman 	      (context_obj->mlx5_dev.link_state == 1 && !mlx5_is_removed(dev))
2826fbd7370STal Shnaiderman 	      ? 1 : 0;
2836fbd7370STal Shnaiderman 	dev_link.link_duplex = 1;
2846fbd7370STal Shnaiderman 	if (dev->data->dev_link.link_speed != dev_link.link_speed ||
2856fbd7370STal Shnaiderman 	    dev->data->dev_link.link_duplex != dev_link.link_duplex ||
2866fbd7370STal Shnaiderman 	    dev->data->dev_link.link_autoneg != dev_link.link_autoneg ||
2876fbd7370STal Shnaiderman 	    dev->data->dev_link.link_status != dev_link.link_status)
2886fbd7370STal Shnaiderman 		ret = 1;
2896fbd7370STal Shnaiderman 	else
2906fbd7370STal Shnaiderman 		ret = 0;
2916fbd7370STal Shnaiderman 	dev->data->dev_link = dev_link;
2926fbd7370STal Shnaiderman 	return ret;
2936fbd7370STal Shnaiderman }
2946fbd7370STal Shnaiderman 
2956fbd7370STal Shnaiderman /**
296b653ce1dSOphir Munk  * DPDK callback to bring the link DOWN.
297b653ce1dSOphir Munk  *
298b653ce1dSOphir Munk  * @param dev
299b653ce1dSOphir Munk  *   Pointer to Ethernet device structure.
300b653ce1dSOphir Munk  *
301b653ce1dSOphir Munk  * @return
302b653ce1dSOphir Munk  *   0 on success, a negative errno value otherwise
303b653ce1dSOphir Munk  */
304b653ce1dSOphir Munk int
mlx5_set_link_down(struct rte_eth_dev * dev)305b653ce1dSOphir Munk mlx5_set_link_down(struct rte_eth_dev *dev)
306b653ce1dSOphir Munk {
307b653ce1dSOphir Munk 	RTE_SET_USED(dev);
308b653ce1dSOphir Munk 	return -ENOTSUP;
309b653ce1dSOphir Munk }
310b653ce1dSOphir Munk 
311b653ce1dSOphir Munk /**
312b653ce1dSOphir Munk  * DPDK callback to bring the link UP.
313b653ce1dSOphir Munk  *
314b653ce1dSOphir Munk  * @param dev
315b653ce1dSOphir Munk  *   Pointer to Ethernet device structure.
316b653ce1dSOphir Munk  *
317b653ce1dSOphir Munk  * @return
318b653ce1dSOphir Munk  *   0 on success, a negative errno value otherwise
319b653ce1dSOphir Munk  */
320b653ce1dSOphir Munk int
mlx5_set_link_up(struct rte_eth_dev * dev)321b653ce1dSOphir Munk mlx5_set_link_up(struct rte_eth_dev *dev)
322b653ce1dSOphir Munk {
323b653ce1dSOphir Munk 	RTE_SET_USED(dev);
324b653ce1dSOphir Munk 	return -ENOTSUP;
325b653ce1dSOphir Munk }
326b653ce1dSOphir Munk 
327b653ce1dSOphir Munk /**
328b653ce1dSOphir Munk  * DPDK callback to retrieve plug-in module EEPROM information (type and size).
329b653ce1dSOphir Munk  *
330b653ce1dSOphir Munk  * @param dev
331b653ce1dSOphir Munk  *   Pointer to Ethernet device structure.
332b653ce1dSOphir Munk  * @param[out] modinfo
333b653ce1dSOphir Munk  *   Storage for plug-in module EEPROM information.
334b653ce1dSOphir Munk  *
335b653ce1dSOphir Munk  * @return
336b653ce1dSOphir Munk  *   0 on success, a negative errno value otherwise and rte_errno is set.
337b653ce1dSOphir Munk  */
338b653ce1dSOphir Munk int
mlx5_get_module_info(struct rte_eth_dev * dev,struct rte_eth_dev_module_info * modinfo)339b653ce1dSOphir Munk mlx5_get_module_info(struct rte_eth_dev *dev,
340b653ce1dSOphir Munk 		     struct rte_eth_dev_module_info *modinfo)
341b653ce1dSOphir Munk {
342b653ce1dSOphir Munk 	RTE_SET_USED(dev);
343b653ce1dSOphir Munk 	RTE_SET_USED(modinfo);
344b653ce1dSOphir Munk 	return -ENOTSUP;
345b653ce1dSOphir Munk }
346b653ce1dSOphir Munk 
347b653ce1dSOphir Munk /**
348b653ce1dSOphir Munk  * DPDK callback to retrieve plug-in module EEPROM data.
349b653ce1dSOphir Munk  *
350b653ce1dSOphir Munk  * @param dev
351b653ce1dSOphir Munk  *   Pointer to Ethernet device structure.
352b653ce1dSOphir Munk  * @param[out] info
353b653ce1dSOphir Munk  *   Storage for plug-in module EEPROM data.
354b653ce1dSOphir Munk  *
355b653ce1dSOphir Munk  * @return
356b653ce1dSOphir Munk  *   0 on success, a negative errno value otherwise and rte_errno is set.
357b653ce1dSOphir Munk  */
mlx5_get_module_eeprom(struct rte_eth_dev * dev,struct rte_dev_eeprom_info * info)358b653ce1dSOphir Munk int mlx5_get_module_eeprom(struct rte_eth_dev *dev,
359b653ce1dSOphir Munk 			   struct rte_dev_eeprom_info *info)
360b653ce1dSOphir Munk {
361b653ce1dSOphir Munk 	RTE_SET_USED(dev);
362b653ce1dSOphir Munk 	RTE_SET_USED(info);
363b653ce1dSOphir Munk 	return -ENOTSUP;
364b653ce1dSOphir Munk }
36599d7c45cSTal Shnaiderman 
36699d7c45cSTal Shnaiderman /**
36799d7c45cSTal Shnaiderman  * Get device current raw clock counter
36899d7c45cSTal Shnaiderman  *
36999d7c45cSTal Shnaiderman  * @param dev
37099d7c45cSTal Shnaiderman  *   Pointer to Ethernet device structure.
37199d7c45cSTal Shnaiderman  * @param[out] time
37299d7c45cSTal Shnaiderman  *   Current raw clock counter of the device.
37399d7c45cSTal Shnaiderman  *
37499d7c45cSTal Shnaiderman  * @return
37599d7c45cSTal Shnaiderman  *   0 if the clock has correctly been read
37699d7c45cSTal Shnaiderman  *   The value of errno in case of error
37799d7c45cSTal Shnaiderman  */
37899d7c45cSTal Shnaiderman int
mlx5_read_clock(struct rte_eth_dev * dev,uint64_t * clock)37999d7c45cSTal Shnaiderman mlx5_read_clock(struct rte_eth_dev *dev, uint64_t *clock)
38099d7c45cSTal Shnaiderman {
38199d7c45cSTal Shnaiderman 	int err;
38299d7c45cSTal Shnaiderman 	struct mlx5_devx_clock mlx5_clock;
38399d7c45cSTal Shnaiderman 	struct mlx5_priv *priv = dev->data->dev_private;
384ca1418ceSMichael Baum 	mlx5_context_st *context_obj = (mlx5_context_st *)priv->sh->cdev->ctx;
38599d7c45cSTal Shnaiderman 
38699d7c45cSTal Shnaiderman 	err = mlx5_glue->query_rt_values(context_obj, &mlx5_clock);
38799d7c45cSTal Shnaiderman 	if (err != 0) {
38899d7c45cSTal Shnaiderman 		DRV_LOG(WARNING, "Could not query the clock");
38999d7c45cSTal Shnaiderman 		return err;
39099d7c45cSTal Shnaiderman 	}
39199d7c45cSTal Shnaiderman 	*clock = *(uint64_t volatile *)mlx5_clock.p_iseg_internal_timer;
39299d7c45cSTal Shnaiderman 	return 0;
39399d7c45cSTal Shnaiderman }
394165e5d07STal Shnaiderman 
395165e5d07STal Shnaiderman /**
396165e5d07STal Shnaiderman  * Check if mlx5 device was removed.
397165e5d07STal Shnaiderman  *
398165e5d07STal Shnaiderman  * @param dev
399165e5d07STal Shnaiderman  *   Pointer to Ethernet device structure.
400165e5d07STal Shnaiderman  *
401165e5d07STal Shnaiderman  * @return
402165e5d07STal Shnaiderman  *   1 when device is removed, otherwise 0.
403165e5d07STal Shnaiderman  */
404165e5d07STal Shnaiderman int
mlx5_is_removed(struct rte_eth_dev * dev)405165e5d07STal Shnaiderman mlx5_is_removed(struct rte_eth_dev *dev)
406165e5d07STal Shnaiderman {
407165e5d07STal Shnaiderman 	struct mlx5_priv *priv = dev->data->dev_private;
408ca1418ceSMichael Baum 	mlx5_context_st *context_obj = (mlx5_context_st *)priv->sh->cdev->ctx;
409165e5d07STal Shnaiderman 
410165e5d07STal Shnaiderman 	if (*context_obj->shutdown_event_obj.p_flag)
411165e5d07STal Shnaiderman 		return 1;
412165e5d07STal Shnaiderman 	return 0;
413165e5d07STal Shnaiderman }
414e8482187SBing Zhao 
415e8482187SBing Zhao /*
416e8482187SBing Zhao  * Query dropless_rq private flag value provided by ETHTOOL.
417e8482187SBing Zhao  *
418e8482187SBing Zhao  * @param dev
419e8482187SBing Zhao  *   Pointer to Ethernet device.
420e8482187SBing Zhao  *
421e8482187SBing Zhao  * @return
422e8482187SBing Zhao  *   - 0 on success, flag is not set.
423e8482187SBing Zhao  *   - 1 on success, flag is set.
424e8482187SBing Zhao  *   - negative errno value otherwise and rte_errno is set.
425e8482187SBing Zhao  */
mlx5_get_flag_dropless_rq(struct rte_eth_dev * dev)426e8482187SBing Zhao int mlx5_get_flag_dropless_rq(struct rte_eth_dev *dev)
427e8482187SBing Zhao {
428e8482187SBing Zhao 	RTE_SET_USED(dev);
429e8482187SBing Zhao 	return -ENOTSUP;
430e8482187SBing Zhao }
4319b31fc90SViacheslav Ovsiienko 
4329b31fc90SViacheslav Ovsiienko /**
4339b31fc90SViacheslav Ovsiienko  * Unmaps HCA PCI BAR from the current process address space.
4349b31fc90SViacheslav Ovsiienko  *
4359b31fc90SViacheslav Ovsiienko  * @param dev
4369b31fc90SViacheslav Ovsiienko  *   Pointer to Ethernet device structure.
4379b31fc90SViacheslav Ovsiienko  */
mlx5_txpp_unmap_hca_bar(struct rte_eth_dev * dev)4389b31fc90SViacheslav Ovsiienko void mlx5_txpp_unmap_hca_bar(struct rte_eth_dev *dev)
4399b31fc90SViacheslav Ovsiienko {
4409b31fc90SViacheslav Ovsiienko 	RTE_SET_USED(dev);
4419b31fc90SViacheslav Ovsiienko }
4429b31fc90SViacheslav Ovsiienko 
4439b31fc90SViacheslav Ovsiienko /**
4449b31fc90SViacheslav Ovsiienko  * Maps HCA PCI BAR to the current process address space.
4459b31fc90SViacheslav Ovsiienko  * Stores pointer in the process private structure allowing
4469b31fc90SViacheslav Ovsiienko  * to read internal and real time counter directly from the HW.
4479b31fc90SViacheslav Ovsiienko  *
4489b31fc90SViacheslav Ovsiienko  * @param dev
4499b31fc90SViacheslav Ovsiienko  *   Pointer to Ethernet device structure.
4509b31fc90SViacheslav Ovsiienko  *
4519b31fc90SViacheslav Ovsiienko  * @return
4529b31fc90SViacheslav Ovsiienko  *   0 on success and not NULL pointer to mapped area in process structure.
4539b31fc90SViacheslav Ovsiienko  *   negative otherwise and NULL pointer
4549b31fc90SViacheslav Ovsiienko  */
mlx5_txpp_map_hca_bar(struct rte_eth_dev * dev)4559b31fc90SViacheslav Ovsiienko int mlx5_txpp_map_hca_bar(struct rte_eth_dev *dev)
4569b31fc90SViacheslav Ovsiienko {
4579b31fc90SViacheslav Ovsiienko 	RTE_SET_USED(dev);
4589b31fc90SViacheslav Ovsiienko 	rte_errno = ENOTSUP;
4599b31fc90SViacheslav Ovsiienko 	return -ENOTSUP;
4609b31fc90SViacheslav Ovsiienko }
461