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