xref: /linux/drivers/net/ethernet/hisilicon/hibmcge/hbg_txrx.h (revision 60675d4ca1ef0857e44eba5849b74a3a998d0c0f)
1*40735e75SJijie Shao /* SPDX-License-Identifier: GPL-2.0+ */
2*40735e75SJijie Shao /* Copyright (c) 2024 Hisilicon Limited. */
3*40735e75SJijie Shao 
4*40735e75SJijie Shao #ifndef __HBG_TXRX_H
5*40735e75SJijie Shao #define __HBG_TXRX_H
6*40735e75SJijie Shao 
7*40735e75SJijie Shao #include <linux/etherdevice.h>
8*40735e75SJijie Shao #include "hbg_hw.h"
9*40735e75SJijie Shao 
10*40735e75SJijie Shao static inline u32 hbg_spec_max_frame_len(struct hbg_priv *priv,
11*40735e75SJijie Shao 					 enum hbg_dir dir)
12*40735e75SJijie Shao {
13*40735e75SJijie Shao 	return (dir == HBG_DIR_TX) ? priv->dev_specs.max_frame_len :
14*40735e75SJijie Shao 		priv->dev_specs.rx_buf_size;
15*40735e75SJijie Shao }
16*40735e75SJijie Shao 
17*40735e75SJijie Shao static inline u32 hbg_get_spec_fifo_max_num(struct hbg_priv *priv,
18*40735e75SJijie Shao 					    enum hbg_dir dir)
19*40735e75SJijie Shao {
20*40735e75SJijie Shao 	return (dir == HBG_DIR_TX) ? priv->dev_specs.tx_fifo_num :
21*40735e75SJijie Shao 		priv->dev_specs.rx_fifo_num;
22*40735e75SJijie Shao }
23*40735e75SJijie Shao 
24*40735e75SJijie Shao static inline bool hbg_fifo_is_full(struct hbg_priv *priv, enum hbg_dir dir)
25*40735e75SJijie Shao {
26*40735e75SJijie Shao 	return hbg_hw_get_fifo_used_num(priv, dir) >=
27*40735e75SJijie Shao 	       hbg_get_spec_fifo_max_num(priv, dir);
28*40735e75SJijie Shao }
29*40735e75SJijie Shao 
30*40735e75SJijie Shao static inline u32 hbg_get_queue_used_num(struct hbg_ring *ring)
31*40735e75SJijie Shao {
32*40735e75SJijie Shao 	return (ring->ntu + ring->len - ring->ntc) % ring->len;
33*40735e75SJijie Shao }
34*40735e75SJijie Shao 
35*40735e75SJijie Shao netdev_tx_t hbg_net_start_xmit(struct sk_buff *skb, struct net_device *netdev);
36*40735e75SJijie Shao int hbg_txrx_init(struct hbg_priv *priv);
37*40735e75SJijie Shao void hbg_txrx_uninit(struct hbg_priv *priv);
38*40735e75SJijie Shao 
39*40735e75SJijie Shao #endif
40