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_RX_H 8c3e79bafSAviad Krawczyk #define HINIC_RX_H 9c3e79bafSAviad Krawczyk 10c3e79bafSAviad Krawczyk #include <linux/types.h> 11c3e79bafSAviad Krawczyk #include <linux/netdevice.h> 12c3e79bafSAviad Krawczyk #include <linux/u64_stats_sync.h> 13e2585ea7SAviad Krawczyk #include <linux/interrupt.h> 14c3e79bafSAviad Krawczyk 15c3e79bafSAviad Krawczyk #include "hinic_hw_qp.h" 16c3e79bafSAviad Krawczyk 174a61abb1SXue Chaojing #define HINIC_RX_CSUM_OFFLOAD_EN 0xFFF 184a61abb1SXue Chaojing #define HINIC_RX_CSUM_HW_CHECK_NONE BIT(7) 194a61abb1SXue Chaojing #define HINIC_RX_CSUM_IPSU_OTHER_ERR BIT(8) 204a61abb1SXue Chaojing 21c3e79bafSAviad Krawczyk struct hinic_rxq_stats { 22c3e79bafSAviad Krawczyk u64 pkts; 23c3e79bafSAviad Krawczyk u64 bytes; 24e54fbbdfSXue Chaojing u64 errors; 25e54fbbdfSXue Chaojing u64 csum_errors; 26e54fbbdfSXue Chaojing u64 other_errors; 27e54fbbdfSXue Chaojing u64 alloc_skb_err; 28c3e79bafSAviad Krawczyk struct u64_stats_sync syncp; 29c3e79bafSAviad Krawczyk }; 30c3e79bafSAviad Krawczyk 31c3e79bafSAviad Krawczyk struct hinic_rxq { 32c3e79bafSAviad Krawczyk struct net_device *netdev; 33c3e79bafSAviad Krawczyk struct hinic_rq *rq; 34c3e79bafSAviad Krawczyk 35c3e79bafSAviad Krawczyk struct hinic_rxq_stats rxq_stats; 36e2585ea7SAviad Krawczyk 37e2585ea7SAviad Krawczyk char *irq_name; 381e007181SXue Chaojing u16 buf_len; 391e007181SXue Chaojing u32 rx_buff_shift; 40e2585ea7SAviad Krawczyk 41e2585ea7SAviad Krawczyk struct napi_struct napi; 42c3e79bafSAviad Krawczyk }; 43c3e79bafSAviad Krawczyk 44edd384f6SAviad Krawczyk void hinic_rxq_get_stats(struct hinic_rxq *rxq, struct hinic_rxq_stats *stats); 45edd384f6SAviad Krawczyk 46c3e79bafSAviad Krawczyk int hinic_init_rxq(struct hinic_rxq *rxq, struct hinic_rq *rq, 47c3e79bafSAviad Krawczyk struct net_device *netdev); 48c3e79bafSAviad Krawczyk 49c3e79bafSAviad Krawczyk void hinic_clean_rxq(struct hinic_rxq *rxq); 50c3e79bafSAviad Krawczyk 51c3e79bafSAviad Krawczyk #endif 52