1cb7dd712SShinas Rasheed /* SPDX-License-Identifier: GPL-2.0 */
2cb7dd712SShinas Rasheed /* Marvell Octeon EP (EndPoint) VF Ethernet Driver
3cb7dd712SShinas Rasheed  *
4cb7dd712SShinas Rasheed  * Copyright (C) 2020 Marvell.
5cb7dd712SShinas Rasheed  *
6cb7dd712SShinas Rasheed  */
7cb7dd712SShinas Rasheed 
8cb7dd712SShinas Rasheed #ifndef _OCTEP_VF_MAIN_H_
9cb7dd712SShinas Rasheed #define _OCTEP_VF_MAIN_H_
10cb7dd712SShinas Rasheed 
11cb7dd712SShinas Rasheed #include "octep_vf_tx.h"
12cb7dd712SShinas Rasheed #include "octep_vf_rx.h"
13cb7dd712SShinas Rasheed #include "octep_vf_mbox.h"
14cb7dd712SShinas Rasheed 
15cb7dd712SShinas Rasheed #define OCTEP_VF_DRV_NAME	"octeon_ep_vf"
16cb7dd712SShinas Rasheed #define OCTEP_VF_DRV_STRING	"Marvell Octeon EndPoint NIC VF Driver"
17cb7dd712SShinas Rasheed 
18cb7dd712SShinas Rasheed #define  OCTEP_PCI_DEVICE_ID_CN93_VF   0xB203    //93xx VF
19cb7dd712SShinas Rasheed #define  OCTEP_PCI_DEVICE_ID_CNF95N_VF 0xB403    //95N VF
20cb7dd712SShinas Rasheed #define  OCTEP_PCI_DEVICE_ID_CN98_VF	0xB103
21cb7dd712SShinas Rasheed #define  OCTEP_PCI_DEVICE_ID_CN10KA_VF  0xB903
22cb7dd712SShinas Rasheed #define  OCTEP_PCI_DEVICE_ID_CNF10KA_VF 0xBA03
23cb7dd712SShinas Rasheed #define  OCTEP_PCI_DEVICE_ID_CNF10KB_VF 0xBC03
24cb7dd712SShinas Rasheed #define  OCTEP_PCI_DEVICE_ID_CN10KB_VF  0xBD03
25cb7dd712SShinas Rasheed 
26cb7dd712SShinas Rasheed #define  OCTEP_VF_MAX_QUEUES   63
27cb7dd712SShinas Rasheed #define  OCTEP_VF_MAX_IQ       OCTEP_VF_MAX_QUEUES
28cb7dd712SShinas Rasheed #define  OCTEP_VF_MAX_OQ       OCTEP_VF_MAX_QUEUES
29cb7dd712SShinas Rasheed 
30cb7dd712SShinas Rasheed #define OCTEP_VF_MAX_MSIX_VECTORS OCTEP_VF_MAX_OQ
31cb7dd712SShinas Rasheed 
32cb7dd712SShinas Rasheed #define  OCTEP_VF_IQ_INTR_RESEND_BIT  59
33cb7dd712SShinas Rasheed #define  OCTEP_VF_OQ_INTR_RESEND_BIT  59
34cb7dd712SShinas Rasheed 
35cb7dd712SShinas Rasheed #define  IQ_INSTR_PENDING(iq)  ({ typeof(iq) iq__ = (iq); \
36cb7dd712SShinas Rasheed 				  ((iq__)->host_write_index - (iq__)->flush_index) & \
37cb7dd712SShinas Rasheed 				  (iq__)->ring_size_mask; \
38cb7dd712SShinas Rasheed 				})
39cb7dd712SShinas Rasheed #define  IQ_INSTR_SPACE(iq)    ({ typeof(iq) iq_ = (iq); \
40cb7dd712SShinas Rasheed 				  (iq_)->max_count - IQ_INSTR_PENDING(iq_); \
41cb7dd712SShinas Rasheed 				})
42cb7dd712SShinas Rasheed 
43cb7dd712SShinas Rasheed /* PCI address space mapping information.
44cb7dd712SShinas Rasheed  * Each of the 3 address spaces given by BAR0, BAR2 and BAR4 of
45cb7dd712SShinas Rasheed  * Octeon gets mapped to different physical address spaces in
46cb7dd712SShinas Rasheed  * the kernel.
47cb7dd712SShinas Rasheed  */
48cb7dd712SShinas Rasheed struct octep_vf_mmio {
49cb7dd712SShinas Rasheed 	/* The physical address to which the PCI address space is mapped. */
50cb7dd712SShinas Rasheed 	u8 __iomem *hw_addr;
51cb7dd712SShinas Rasheed 
52cb7dd712SShinas Rasheed 	/* Flag indicating the mapping was successful. */
53cb7dd712SShinas Rasheed 	int mapped;
54cb7dd712SShinas Rasheed };
55cb7dd712SShinas Rasheed 
56cb7dd712SShinas Rasheed struct octep_vf_hw_ops {
57cb7dd712SShinas Rasheed 	void (*setup_iq_regs)(struct octep_vf_device *oct, int q);
58cb7dd712SShinas Rasheed 	void (*setup_oq_regs)(struct octep_vf_device *oct, int q);
59cb7dd712SShinas Rasheed 	void (*setup_mbox_regs)(struct octep_vf_device *oct, int mbox);
60cb7dd712SShinas Rasheed 
61cb7dd712SShinas Rasheed 	irqreturn_t (*non_ioq_intr_handler)(void *ioq_vector);
62cb7dd712SShinas Rasheed 	irqreturn_t (*ioq_intr_handler)(void *ioq_vector);
63cb7dd712SShinas Rasheed 	void (*reinit_regs)(struct octep_vf_device *oct);
64cb7dd712SShinas Rasheed 	u32  (*update_iq_read_idx)(struct octep_vf_iq *iq);
65cb7dd712SShinas Rasheed 
66cb7dd712SShinas Rasheed 	void (*enable_interrupts)(struct octep_vf_device *oct);
67cb7dd712SShinas Rasheed 	void (*disable_interrupts)(struct octep_vf_device *oct);
68cb7dd712SShinas Rasheed 
69cb7dd712SShinas Rasheed 	void (*enable_io_queues)(struct octep_vf_device *oct);
70cb7dd712SShinas Rasheed 	void (*disable_io_queues)(struct octep_vf_device *oct);
71cb7dd712SShinas Rasheed 	void (*enable_iq)(struct octep_vf_device *oct, int q);
72cb7dd712SShinas Rasheed 	void (*disable_iq)(struct octep_vf_device *oct, int q);
73cb7dd712SShinas Rasheed 	void (*enable_oq)(struct octep_vf_device *oct, int q);
74cb7dd712SShinas Rasheed 	void (*disable_oq)(struct octep_vf_device *oct, int q);
75cb7dd712SShinas Rasheed 	void (*reset_io_queues)(struct octep_vf_device *oct);
76cb7dd712SShinas Rasheed 	void (*dump_registers)(struct octep_vf_device *oct);
77cb7dd712SShinas Rasheed };
78cb7dd712SShinas Rasheed 
79cb7dd712SShinas Rasheed /* Octeon mailbox data */
80cb7dd712SShinas Rasheed struct octep_vf_mbox_data {
81cb7dd712SShinas Rasheed 	/* Holds the offset of received data via mailbox. */
82cb7dd712SShinas Rasheed 	u32 data_index;
83cb7dd712SShinas Rasheed 
84cb7dd712SShinas Rasheed 	/* Holds the received data via mailbox. */
85cb7dd712SShinas Rasheed 	u8 recv_data[OCTEP_PFVF_MBOX_MAX_DATA_BUF_SIZE];
86cb7dd712SShinas Rasheed };
87cb7dd712SShinas Rasheed 
88cb7dd712SShinas Rasheed /* wrappers around work structs */
89cb7dd712SShinas Rasheed struct octep_vf_mbox_wk {
90cb7dd712SShinas Rasheed 	struct work_struct work;
91cb7dd712SShinas Rasheed 	void *ctxptr;
92cb7dd712SShinas Rasheed };
93cb7dd712SShinas Rasheed 
94cb7dd712SShinas Rasheed /* Octeon device mailbox */
95cb7dd712SShinas Rasheed struct octep_vf_mbox {
96cb7dd712SShinas Rasheed 	/* A mutex to protect access to this q_mbox. */
97cb7dd712SShinas Rasheed 	struct mutex lock;
98cb7dd712SShinas Rasheed 
99cb7dd712SShinas Rasheed 	u32 state;
100cb7dd712SShinas Rasheed 
101cb7dd712SShinas Rasheed 	/* SLI_MAC_PF_MBOX_INT for PF, SLI_PKT_MBOX_INT for VF. */
102cb7dd712SShinas Rasheed 	u8 __iomem *mbox_int_reg;
103cb7dd712SShinas Rasheed 
104cb7dd712SShinas Rasheed 	/* SLI_PKT_PF_VF_MBOX_SIG(0) for PF,
105cb7dd712SShinas Rasheed 	 * SLI_PKT_PF_VF_MBOX_SIG(1) for VF.
106cb7dd712SShinas Rasheed 	 */
107cb7dd712SShinas Rasheed 	u8 __iomem *mbox_write_reg;
108cb7dd712SShinas Rasheed 
109cb7dd712SShinas Rasheed 	/* SLI_PKT_PF_VF_MBOX_SIG(1) for PF,
110cb7dd712SShinas Rasheed 	 * SLI_PKT_PF_VF_MBOX_SIG(0) for VF.
111cb7dd712SShinas Rasheed 	 */
112cb7dd712SShinas Rasheed 	u8 __iomem *mbox_read_reg;
113cb7dd712SShinas Rasheed 
114cb7dd712SShinas Rasheed 	/* Octeon mailbox data */
115cb7dd712SShinas Rasheed 	struct octep_vf_mbox_data mbox_data;
116cb7dd712SShinas Rasheed 
117cb7dd712SShinas Rasheed 	/* Octeon mailbox work handler to process Mbox messages */
118cb7dd712SShinas Rasheed 	struct octep_vf_mbox_wk wk;
119cb7dd712SShinas Rasheed };
120cb7dd712SShinas Rasheed 
121cb7dd712SShinas Rasheed /* Tx/Rx queue vector per interrupt. */
122cb7dd712SShinas Rasheed struct octep_vf_ioq_vector {
123cb7dd712SShinas Rasheed 	char name[OCTEP_VF_MSIX_NAME_SIZE];
124cb7dd712SShinas Rasheed 	struct napi_struct napi;
125cb7dd712SShinas Rasheed 	struct octep_vf_device *octep_vf_dev;
126cb7dd712SShinas Rasheed 	struct octep_vf_iq *iq;
127cb7dd712SShinas Rasheed 	struct octep_vf_oq *oq;
128cb7dd712SShinas Rasheed 	cpumask_t affinity_mask;
129cb7dd712SShinas Rasheed };
130cb7dd712SShinas Rasheed 
131cb7dd712SShinas Rasheed /* Octeon hardware/firmware offload capability flags. */
132cb7dd712SShinas Rasheed #define OCTEP_VF_CAP_TX_CHECKSUM BIT(0)
133cb7dd712SShinas Rasheed #define OCTEP_VF_CAP_RX_CHECKSUM BIT(1)
134cb7dd712SShinas Rasheed #define OCTEP_VF_CAP_TSO         BIT(2)
135cb7dd712SShinas Rasheed 
136cb7dd712SShinas Rasheed /* Link modes */
137cb7dd712SShinas Rasheed enum octep_vf_link_mode_bit_indices {
138cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_10GBASE_T    = 0,
139cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_10GBASE_R,
140cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_10GBASE_CR,
141cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_10GBASE_KR,
142cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_10GBASE_LR,
143cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_10GBASE_SR,
144cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_25GBASE_CR,
145cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_25GBASE_KR,
146cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_25GBASE_SR,
147cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_40GBASE_CR4,
148cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_40GBASE_KR4,
149cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_40GBASE_LR4,
150cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_40GBASE_SR4,
151cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_50GBASE_CR2,
152cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_50GBASE_KR2,
153cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_50GBASE_SR2,
154cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_50GBASE_CR,
155cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_50GBASE_KR,
156cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_50GBASE_LR,
157cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_50GBASE_SR,
158cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_100GBASE_CR4,
159cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_100GBASE_KR4,
160cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_100GBASE_LR4,
161cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_100GBASE_SR4,
162cb7dd712SShinas Rasheed 	OCTEP_VF_LINK_MODE_NBITS
163cb7dd712SShinas Rasheed };
164cb7dd712SShinas Rasheed 
165cb7dd712SShinas Rasheed /* Hardware interface link state information. */
166cb7dd712SShinas Rasheed struct octep_vf_iface_link_info {
167cb7dd712SShinas Rasheed 	/* Bitmap of Supported link speeds/modes. */
168cb7dd712SShinas Rasheed 	u64 supported_modes;
169cb7dd712SShinas Rasheed 
170cb7dd712SShinas Rasheed 	/* Bitmap of Advertised link speeds/modes. */
171cb7dd712SShinas Rasheed 	u64 advertised_modes;
172cb7dd712SShinas Rasheed 
173cb7dd712SShinas Rasheed 	/* Negotiated link speed in Mbps. */
174cb7dd712SShinas Rasheed 	u32 speed;
175cb7dd712SShinas Rasheed 
176cb7dd712SShinas Rasheed 	/* MTU */
177cb7dd712SShinas Rasheed 	u16 mtu;
178cb7dd712SShinas Rasheed 
179cb7dd712SShinas Rasheed 	/* Autonegotiation state. */
180cb7dd712SShinas Rasheed #define OCTEP_VF_LINK_MODE_AUTONEG_SUPPORTED   BIT(0)
181cb7dd712SShinas Rasheed #define OCTEP_VF_LINK_MODE_AUTONEG_ADVERTISED  BIT(1)
182cb7dd712SShinas Rasheed 	u8 autoneg;
183cb7dd712SShinas Rasheed 
184cb7dd712SShinas Rasheed 	/* Pause frames setting. */
185cb7dd712SShinas Rasheed #define OCTEP_VF_LINK_MODE_PAUSE_SUPPORTED   BIT(0)
186cb7dd712SShinas Rasheed #define OCTEP_VF_LINK_MODE_PAUSE_ADVERTISED  BIT(1)
187cb7dd712SShinas Rasheed 	u8 pause;
188cb7dd712SShinas Rasheed 
189cb7dd712SShinas Rasheed 	/* Admin state of the link (ifconfig <iface> up/down */
190cb7dd712SShinas Rasheed 	u8  admin_up;
191cb7dd712SShinas Rasheed 
192cb7dd712SShinas Rasheed 	/* Operational state of the link: physical link is up down */
193cb7dd712SShinas Rasheed 	u8  oper_up;
194cb7dd712SShinas Rasheed };
195cb7dd712SShinas Rasheed 
196cb7dd712SShinas Rasheed /* Hardware interface stats information. */
197cb7dd712SShinas Rasheed struct octep_vf_iface_rxtx_stats {
198cb7dd712SShinas Rasheed 	/* Hardware Interface Rx statistics */
199cb7dd712SShinas Rasheed 	struct octep_vf_iface_rx_stats iface_rx_stats;
200cb7dd712SShinas Rasheed 
201cb7dd712SShinas Rasheed 	/* Hardware Interface Tx statistics */
202cb7dd712SShinas Rasheed 	struct octep_vf_iface_tx_stats iface_tx_stats;
203cb7dd712SShinas Rasheed };
204cb7dd712SShinas Rasheed 
205cb7dd712SShinas Rasheed struct octep_vf_fw_info {
206cb7dd712SShinas Rasheed 	/* pkind value to be used in every Tx hardware descriptor */
207cb7dd712SShinas Rasheed 	u8 pkind;
208cb7dd712SShinas Rasheed 	/* front size data */
209cb7dd712SShinas Rasheed 	u8 fsz;
210cb7dd712SShinas Rasheed 	/* supported rx offloads OCTEP_VF_RX_OFFLOAD_* */
211cb7dd712SShinas Rasheed 	u16 rx_ol_flags;
212cb7dd712SShinas Rasheed 	/* supported tx offloads OCTEP_VF_TX_OFFLOAD_* */
213cb7dd712SShinas Rasheed 	u16 tx_ol_flags;
214cb7dd712SShinas Rasheed };
215cb7dd712SShinas Rasheed 
216cb7dd712SShinas Rasheed /* The Octeon device specific private data structure.
217cb7dd712SShinas Rasheed  * Each Octeon device has this structure to represent all its components.
218cb7dd712SShinas Rasheed  */
219cb7dd712SShinas Rasheed struct octep_vf_device {
220cb7dd712SShinas Rasheed 	struct octep_vf_config *conf;
221cb7dd712SShinas Rasheed 
222cb7dd712SShinas Rasheed 	/* Octeon Chip type. */
223cb7dd712SShinas Rasheed 	u16 chip_id;
224cb7dd712SShinas Rasheed 	u16 rev_id;
225cb7dd712SShinas Rasheed 
226cb7dd712SShinas Rasheed 	/* Device capabilities enabled */
227cb7dd712SShinas Rasheed 	u64 caps_enabled;
228cb7dd712SShinas Rasheed 	/* Device capabilities supported */
229cb7dd712SShinas Rasheed 	u64 caps_supported;
230cb7dd712SShinas Rasheed 
231cb7dd712SShinas Rasheed 	/* Pointer to basic Linux device */
232cb7dd712SShinas Rasheed 	struct device *dev;
233cb7dd712SShinas Rasheed 	/* Linux PCI device pointer */
234cb7dd712SShinas Rasheed 	struct pci_dev *pdev;
235cb7dd712SShinas Rasheed 	/* Netdev corresponding to the Octeon device */
236cb7dd712SShinas Rasheed 	struct net_device *netdev;
237cb7dd712SShinas Rasheed 
238cb7dd712SShinas Rasheed 	/* memory mapped io range */
239cb7dd712SShinas Rasheed 	struct octep_vf_mmio mmio;
240cb7dd712SShinas Rasheed 
241cb7dd712SShinas Rasheed 	/* MAC address */
242cb7dd712SShinas Rasheed 	u8 mac_addr[ETH_ALEN];
243cb7dd712SShinas Rasheed 
244cb7dd712SShinas Rasheed 	/* Tx queues (IQ: Instruction Queue) */
245cb7dd712SShinas Rasheed 	u16 num_iqs;
246cb7dd712SShinas Rasheed 	/* Pointers to Octeon Tx queues */
247cb7dd712SShinas Rasheed 	struct octep_vf_iq *iq[OCTEP_VF_MAX_IQ];
248cb7dd712SShinas Rasheed 
249cb7dd712SShinas Rasheed 	/* Rx queues (OQ: Output Queue) */
250cb7dd712SShinas Rasheed 	u16 num_oqs;
251cb7dd712SShinas Rasheed 	/* Pointers to Octeon Rx queues */
252cb7dd712SShinas Rasheed 	struct octep_vf_oq *oq[OCTEP_VF_MAX_OQ];
253cb7dd712SShinas Rasheed 
254cb7dd712SShinas Rasheed 	/* Hardware port number of the PCIe interface */
255cb7dd712SShinas Rasheed 	u16 pcie_port;
256cb7dd712SShinas Rasheed 
257cb7dd712SShinas Rasheed 	/* Hardware operations */
258cb7dd712SShinas Rasheed 	struct octep_vf_hw_ops hw_ops;
259cb7dd712SShinas Rasheed 
260cb7dd712SShinas Rasheed 	/* IRQ info */
261cb7dd712SShinas Rasheed 	u16 num_irqs;
262cb7dd712SShinas Rasheed 	u16 num_non_ioq_irqs;
263cb7dd712SShinas Rasheed 	char *non_ioq_irq_names;
264cb7dd712SShinas Rasheed 	struct msix_entry *msix_entries;
265cb7dd712SShinas Rasheed 	/* IOq information of it's corresponding MSI-X interrupt. */
266cb7dd712SShinas Rasheed 	struct octep_vf_ioq_vector *ioq_vector[OCTEP_VF_MAX_QUEUES];
267cb7dd712SShinas Rasheed 
268cb7dd712SShinas Rasheed 	/* Hardware Interface Tx statistics */
269cb7dd712SShinas Rasheed 	struct octep_vf_iface_tx_stats iface_tx_stats;
270cb7dd712SShinas Rasheed 	/* Hardware Interface Rx statistics */
271cb7dd712SShinas Rasheed 	struct octep_vf_iface_rx_stats iface_rx_stats;
272cb7dd712SShinas Rasheed 
273cb7dd712SShinas Rasheed 	/* Hardware Interface Link info like supported modes, aneg support */
274cb7dd712SShinas Rasheed 	struct octep_vf_iface_link_info link_info;
275cb7dd712SShinas Rasheed 
276cb7dd712SShinas Rasheed 	/* Mailbox to talk to VFs */
277cb7dd712SShinas Rasheed 	struct octep_vf_mbox *mbox;
278cb7dd712SShinas Rasheed 
279cb7dd712SShinas Rasheed 	/* Work entry to handle Tx timeout */
280cb7dd712SShinas Rasheed 	struct work_struct tx_timeout_task;
281cb7dd712SShinas Rasheed 
282cb7dd712SShinas Rasheed 	/* offset for iface stats */
283cb7dd712SShinas Rasheed 	u32 ctrl_mbox_ifstats_offset;
284cb7dd712SShinas Rasheed 
285cb7dd712SShinas Rasheed 	/* Negotiated Mbox version */
286cb7dd712SShinas Rasheed 	u32 mbox_neg_ver;
287cb7dd712SShinas Rasheed 
288cb7dd712SShinas Rasheed 	/* firmware info */
289cb7dd712SShinas Rasheed 	struct octep_vf_fw_info fw_info;
290cb7dd712SShinas Rasheed };
291cb7dd712SShinas Rasheed 
OCTEP_VF_MAJOR_REV(struct octep_vf_device * oct)292cb7dd712SShinas Rasheed static inline u16 OCTEP_VF_MAJOR_REV(struct octep_vf_device *oct)
293cb7dd712SShinas Rasheed {
294cb7dd712SShinas Rasheed 	u16 rev = (oct->rev_id & 0xC) >> 2;
295cb7dd712SShinas Rasheed 
296cb7dd712SShinas Rasheed 	return (rev == 0) ? 1 : rev;
297cb7dd712SShinas Rasheed }
298cb7dd712SShinas Rasheed 
OCTEP_VF_MINOR_REV(struct octep_vf_device * oct)299cb7dd712SShinas Rasheed static inline u16 OCTEP_VF_MINOR_REV(struct octep_vf_device *oct)
300cb7dd712SShinas Rasheed {
301cb7dd712SShinas Rasheed 	return (oct->rev_id & 0x3);
302cb7dd712SShinas Rasheed }
303cb7dd712SShinas Rasheed 
304cb7dd712SShinas Rasheed /* Octeon CSR read/write access APIs */
305cb7dd712SShinas Rasheed #define octep_vf_write_csr(octep_vf_dev, reg_off, value) \
306cb7dd712SShinas Rasheed 	writel(value, (octep_vf_dev)->mmio.hw_addr + (reg_off))
307cb7dd712SShinas Rasheed 
308cb7dd712SShinas Rasheed #define octep_vf_write_csr64(octep_vf_dev, reg_off, val64) \
309cb7dd712SShinas Rasheed 	writeq(val64, (octep_vf_dev)->mmio.hw_addr + (reg_off))
310cb7dd712SShinas Rasheed 
311cb7dd712SShinas Rasheed #define octep_vf_read_csr(octep_vf_dev, reg_off)         \
312cb7dd712SShinas Rasheed 	readl((octep_vf_dev)->mmio.hw_addr + (reg_off))
313cb7dd712SShinas Rasheed 
314cb7dd712SShinas Rasheed #define octep_vf_read_csr64(octep_vf_dev, reg_off)         \
315cb7dd712SShinas Rasheed 	readq((octep_vf_dev)->mmio.hw_addr + (reg_off))
316cb7dd712SShinas Rasheed 
317cb7dd712SShinas Rasheed extern struct workqueue_struct *octep_vf_wq;
318cb7dd712SShinas Rasheed 
319cb7dd712SShinas Rasheed int octep_vf_device_setup(struct octep_vf_device *oct);
320cb7dd712SShinas Rasheed int octep_vf_setup_iqs(struct octep_vf_device *oct);
321cb7dd712SShinas Rasheed void octep_vf_free_iqs(struct octep_vf_device *oct);
322cb7dd712SShinas Rasheed void octep_vf_clean_iqs(struct octep_vf_device *oct);
323cb7dd712SShinas Rasheed int octep_vf_setup_oqs(struct octep_vf_device *oct);
324cb7dd712SShinas Rasheed void octep_vf_free_oqs(struct octep_vf_device *oct);
325cb7dd712SShinas Rasheed void octep_vf_oq_dbell_init(struct octep_vf_device *oct);
326cb7dd712SShinas Rasheed void octep_vf_device_setup_cn93(struct octep_vf_device *oct);
327cb7dd712SShinas Rasheed void octep_vf_device_setup_cnxk(struct octep_vf_device *oct);
328cb7dd712SShinas Rasheed int octep_vf_iq_process_completions(struct octep_vf_iq *iq, u16 budget);
329cb7dd712SShinas Rasheed int octep_vf_oq_process_rx(struct octep_vf_oq *oq, int budget);
330*c9288159SShinas Rasheed void octep_vf_set_ethtool_ops(struct net_device *netdev);
331c5cb944dSShinas Rasheed int octep_vf_get_link_info(struct octep_vf_device *oct);
332c5cb944dSShinas Rasheed int octep_vf_get_if_stats(struct octep_vf_device *oct);
333cb7dd712SShinas Rasheed void octep_vf_mbox_work(struct work_struct *work);
334cb7dd712SShinas Rasheed #endif /* _OCTEP_VF_MAIN_H_ */
335