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