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