xref: /openbmc/linux/drivers/net/ethernet/huawei/hinic/hinic_tx.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
12025cf9eSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2c3e79bafSAviad Krawczyk /*
3c3e79bafSAviad Krawczyk  * Huawei HiNIC PCI Express Linux driver
4c3e79bafSAviad Krawczyk  * Copyright(c) 2017 Huawei Technologies Co., Ltd
5c3e79bafSAviad Krawczyk  */
6c3e79bafSAviad Krawczyk 
7c3e79bafSAviad Krawczyk #ifndef HINIC_TX_H
8c3e79bafSAviad Krawczyk #define HINIC_TX_H
9c3e79bafSAviad Krawczyk 
10c3e79bafSAviad Krawczyk #include <linux/types.h>
11c3e79bafSAviad Krawczyk #include <linux/netdevice.h>
1200e57a6dSAviad Krawczyk #include <linux/skbuff.h>
13c3e79bafSAviad Krawczyk #include <linux/u64_stats_sync.h>
14c3e79bafSAviad Krawczyk 
1500e57a6dSAviad Krawczyk #include "hinic_common.h"
16c3e79bafSAviad Krawczyk #include "hinic_hw_qp.h"
17c3e79bafSAviad Krawczyk 
18c3e79bafSAviad Krawczyk struct hinic_txq_stats {
19c3e79bafSAviad Krawczyk 	u64     pkts;
20c3e79bafSAviad Krawczyk 	u64     bytes;
21c3e79bafSAviad Krawczyk 	u64     tx_busy;
22c3e79bafSAviad Krawczyk 	u64     tx_wake;
23c3e79bafSAviad Krawczyk 	u64     tx_dropped;
24e54fbbdfSXue Chaojing 	u64	big_frags_pkts;
25c3e79bafSAviad Krawczyk 
26c3e79bafSAviad Krawczyk 	struct u64_stats_sync   syncp;
27c3e79bafSAviad Krawczyk };
28c3e79bafSAviad Krawczyk 
29c3e79bafSAviad Krawczyk struct hinic_txq {
30c3e79bafSAviad Krawczyk 	struct net_device       *netdev;
31c3e79bafSAviad Krawczyk 	struct hinic_sq         *sq;
32c3e79bafSAviad Krawczyk 
33c3e79bafSAviad Krawczyk 	struct hinic_txq_stats  txq_stats;
3400e57a6dSAviad Krawczyk 
3500e57a6dSAviad Krawczyk 	int                     max_sges;
3600e57a6dSAviad Krawczyk 	struct hinic_sge        *sges;
3700e57a6dSAviad Krawczyk 	struct hinic_sge        *free_sges;
3800e57a6dSAviad Krawczyk 
3900e57a6dSAviad Krawczyk 	char                    *irq_name;
4000e57a6dSAviad Krawczyk 	struct napi_struct      napi;
41c3e79bafSAviad Krawczyk };
42c3e79bafSAviad Krawczyk 
43edd384f6SAviad Krawczyk void hinic_txq_get_stats(struct hinic_txq *txq, struct hinic_txq_stats *stats);
44edd384f6SAviad Krawczyk 
45*4aa218a4SLuo bin netdev_tx_t hinic_lb_xmit_frame(struct sk_buff *skb, struct net_device *netdev);
46*4aa218a4SLuo bin 
4700e57a6dSAviad Krawczyk netdev_tx_t hinic_xmit_frame(struct sk_buff *skb, struct net_device *netdev);
4800e57a6dSAviad Krawczyk 
49c3e79bafSAviad Krawczyk int hinic_init_txq(struct hinic_txq *txq, struct hinic_sq *sq,
50c3e79bafSAviad Krawczyk 		   struct net_device *netdev);
51c3e79bafSAviad Krawczyk 
52c3e79bafSAviad Krawczyk void hinic_clean_txq(struct hinic_txq *txq);
53c3e79bafSAviad Krawczyk 
54c3e79bafSAviad Krawczyk #endif
55