#include <linux/if_vlan.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/u64_stats_sync.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/pci.h>
#include <linux/device.h>
#include <linux/dma-mapping.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/skbuff.h>
#include <linux/smp.h>
#include <asm/byteorder.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/sctp.h>
#include <linux/ipv6.h>
#include <net/ipv6.h>
#include <net/checksum.h>
#include <net/ip6_checksum.h>
#include "hinic_common.h"
#include "hinic_hw_if.h"
#include "hinic_hw_wqe.h"
#include "hinic_hw_wq.h"
#include "hinic_hw_qp.h"
#include "hinic_hw_dev.h"
#include "hinic_dev.h"
#include "hinic_tx.h"
#define TX_IRQ_NO_PENDING …
#define TX_IRQ_NO_COALESC …
#define TX_IRQ_NO_LLI_TIMER …
#define TX_IRQ_NO_CREDIT …
#define TX_IRQ_NO_RESEND_TIMER …
#define CI_UPDATE_NO_PENDING …
#define CI_UPDATE_NO_COALESC …
#define HW_CONS_IDX(sq) …
#define MIN_SKB_LEN …
#define MAX_PAYLOAD_OFFSET …
#define TRANSPORT_OFFSET(l4_hdr, skb) …
hinic_l3;
hinic_l4;
enum hinic_offload_type { … };
static void hinic_txq_clean_stats(struct hinic_txq *txq)
{ … }
void hinic_txq_get_stats(struct hinic_txq *txq, struct hinic_txq_stats *stats)
{ … }
static void txq_stats_init(struct hinic_txq *txq)
{ … }
static int tx_map_skb(struct hinic_dev *nic_dev, struct sk_buff *skb,
struct hinic_sge *sges)
{ … }
static void tx_unmap_skb(struct hinic_dev *nic_dev, struct sk_buff *skb,
struct hinic_sge *sges)
{ … }
static void get_inner_l3_l4_type(struct sk_buff *skb, union hinic_l3 *ip,
union hinic_l4 *l4,
enum hinic_offload_type offload_type,
enum hinic_l3_offload_type *l3_type,
u8 *l4_proto)
{ … }
static void get_inner_l4_info(struct sk_buff *skb, union hinic_l4 *l4,
enum hinic_offload_type offload_type, u8 l4_proto,
enum hinic_l4_offload_type *l4_offload,
u32 *l4_len, u32 *offset)
{ … }
static __sum16 csum_magic(union hinic_l3 *ip, unsigned short proto)
{ … }
static int offload_tso(struct hinic_sq_task *task, u32 *queue_info,
struct sk_buff *skb)
{ … }
static int offload_csum(struct hinic_sq_task *task, u32 *queue_info,
struct sk_buff *skb)
{ … }
static void offload_vlan(struct hinic_sq_task *task, u32 *queue_info,
u16 vlan_tag, u16 vlan_pri)
{ … }
static int hinic_tx_offload(struct sk_buff *skb, struct hinic_sq_task *task,
u32 *queue_info)
{ … }
netdev_tx_t hinic_lb_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
{ … }
netdev_tx_t hinic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
{ … }
static void tx_free_skb(struct hinic_dev *nic_dev, struct sk_buff *skb,
struct hinic_sge *sges)
{ … }
static void free_all_tx_skbs(struct hinic_txq *txq)
{ … }
static int free_tx_poll(struct napi_struct *napi, int budget)
{ … }
static irqreturn_t tx_irq(int irq, void *data)
{ … }
static int tx_request_irq(struct hinic_txq *txq)
{ … }
static void tx_free_irq(struct hinic_txq *txq)
{ … }
int hinic_init_txq(struct hinic_txq *txq, struct hinic_sq *sq,
struct net_device *netdev)
{ … }
void hinic_clean_txq(struct hinic_txq *txq)
{ … }