GNU Linux-libre 4.19.264-gnu1
[releases.git] / drivers / net / wireless / quantenna / qtnfmac / pearl / pcie_bus_priv.h
1 /*
2  * Copyright (c) 2015-2016 Quantenna Communications, Inc.
3  * All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16
17 #ifndef _QTN_FMAC_PCIE_H_
18 #define _QTN_FMAC_PCIE_H_
19
20 #include <linux/dma-mapping.h>
21 #include <linux/io.h>
22
23 #include "pcie_regs_pearl.h"
24 #include "pcie_ipc.h"
25 #include "shm_ipc.h"
26
27 struct bus;
28
29 struct qtnf_pcie_bus_priv {
30         struct pci_dev  *pdev;
31
32         /* lock for irq configuration changes */
33         spinlock_t irq_lock;
34
35         /* lock for tx reclaim operations */
36         spinlock_t tx_reclaim_lock;
37         /* lock for tx0 operations */
38         spinlock_t tx0_lock;
39         u8 msi_enabled;
40         u8 tx_stopped;
41         int mps;
42
43         struct workqueue_struct *workqueue;
44         struct tasklet_struct reclaim_tq;
45
46         void __iomem *sysctl_bar;
47         void __iomem *epmem_bar;
48         void __iomem *dmareg_bar;
49
50         struct qtnf_shm_ipc shm_ipc_ep_in;
51         struct qtnf_shm_ipc shm_ipc_ep_out;
52
53         struct qtnf_pcie_bda __iomem *bda;
54         void __iomem *pcie_reg_base;
55
56         u16 tx_bd_num;
57         u16 rx_bd_num;
58
59         struct sk_buff **tx_skb;
60         struct sk_buff **rx_skb;
61
62         struct qtnf_tx_bd *tx_bd_vbase;
63         dma_addr_t tx_bd_pbase;
64
65         struct qtnf_rx_bd *rx_bd_vbase;
66         dma_addr_t rx_bd_pbase;
67
68         dma_addr_t bd_table_paddr;
69         void *bd_table_vaddr;
70         u32 bd_table_len;
71
72         u32 rx_bd_w_index;
73         u32 rx_bd_r_index;
74
75         u32 tx_bd_w_index;
76         u32 tx_bd_r_index;
77
78         u32 pcie_irq_mask;
79
80         /* diagnostics stats */
81         u32 pcie_irq_count;
82         u32 pcie_irq_rx_count;
83         u32 pcie_irq_tx_count;
84         u32 pcie_irq_uf_count;
85         u32 tx_full_count;
86         u32 tx_done_count;
87         u32 tx_reclaim_done;
88         u32 tx_reclaim_req;
89 };
90
91 #endif /* _QTN_FMAC_PCIE_H_ */