xref: /dpdk/drivers/vdpa/sfc/sfc_vdpa_ops.h (revision a7ba40b2b1bf7ab11fda4050a585d2ca3b159f19)
16dad9a73SVijay Kumar Srivastava /* SPDX-License-Identifier: BSD-3-Clause
26dad9a73SVijay Kumar Srivastava  * Copyright(c) 2020-2021 Xilinx, Inc.
36dad9a73SVijay Kumar Srivastava  */
46dad9a73SVijay Kumar Srivastava 
56dad9a73SVijay Kumar Srivastava #ifndef _SFC_VDPA_OPS_H
66dad9a73SVijay Kumar Srivastava #define _SFC_VDPA_OPS_H
76dad9a73SVijay Kumar Srivastava 
86dad9a73SVijay Kumar Srivastava #include <rte_vdpa.h>
9*a7ba40b2SThomas Monjalon #include <rte_thread.h>
106dad9a73SVijay Kumar Srivastava 
11f2c0e634SAbhimanyu Saini #define SFC_VDPA_MAX_QUEUE_PAIRS		8
126dad9a73SVijay Kumar Srivastava 
136dad9a73SVijay Kumar Srivastava enum sfc_vdpa_context {
146dad9a73SVijay Kumar Srivastava 	SFC_VDPA_AS_VF
156dad9a73SVijay Kumar Srivastava };
166dad9a73SVijay Kumar Srivastava 
176dad9a73SVijay Kumar Srivastava enum sfc_vdpa_state {
186dad9a73SVijay Kumar Srivastava 	SFC_VDPA_STATE_UNINITIALIZED = 0,
196dad9a73SVijay Kumar Srivastava 	SFC_VDPA_STATE_INITIALIZED,
20b1196136SVijay Kumar Srivastava 	SFC_VDPA_STATE_CONFIGURING,
21b1196136SVijay Kumar Srivastava 	SFC_VDPA_STATE_CONFIGURED,
22b1196136SVijay Kumar Srivastava 	SFC_VDPA_STATE_CLOSING,
23b1196136SVijay Kumar Srivastava 	SFC_VDPA_STATE_CLOSED,
24b1196136SVijay Kumar Srivastava 	SFC_VDPA_STATE_STARTING,
25b1196136SVijay Kumar Srivastava 	SFC_VDPA_STATE_STARTED,
26b1196136SVijay Kumar Srivastava 	SFC_VDPA_STATE_STOPPING,
276dad9a73SVijay Kumar Srivastava };
286dad9a73SVijay Kumar Srivastava 
29b1196136SVijay Kumar Srivastava struct sfc_vdpa_vring_info {
30b1196136SVijay Kumar Srivastava 	uint64_t	desc;
31b1196136SVijay Kumar Srivastava 	uint64_t	avail;
32b1196136SVijay Kumar Srivastava 	uint64_t	used;
33b1196136SVijay Kumar Srivastava 	uint64_t	size;
34b1196136SVijay Kumar Srivastava 	uint16_t	last_avail_idx;
35b1196136SVijay Kumar Srivastava 	uint16_t	last_used_idx;
36b1196136SVijay Kumar Srivastava };
37b1196136SVijay Kumar Srivastava 
38b1196136SVijay Kumar Srivastava typedef struct sfc_vdpa_vq_context_s {
39d9a1ef20SAbhimanyu Saini 	volatile void			*doorbell;
40b1196136SVijay Kumar Srivastava 	uint8_t				enable;
41b1196136SVijay Kumar Srivastava 	uint32_t			pidx;
42b1196136SVijay Kumar Srivastava 	uint32_t			cidx;
43b1196136SVijay Kumar Srivastava 	efx_virtio_vq_t			*vq;
44b1196136SVijay Kumar Srivastava } sfc_vdpa_vq_context_t;
45b1196136SVijay Kumar Srivastava 
466dad9a73SVijay Kumar Srivastava struct sfc_vdpa_ops_data {
476dad9a73SVijay Kumar Srivastava 	void				*dev_handle;
48b1196136SVijay Kumar Srivastava 	int				vid;
496dad9a73SVijay Kumar Srivastava 	struct rte_vdpa_device		*vdpa_dev;
506dad9a73SVijay Kumar Srivastava 	enum sfc_vdpa_context		vdpa_context;
516dad9a73SVijay Kumar Srivastava 	enum sfc_vdpa_state		state;
52*a7ba40b2SThomas Monjalon 	rte_thread_t			notify_tid;
53630be406SVijay Kumar Srivastava 	bool				is_notify_thread_started;
54f66a66e6SVijay Kumar Srivastava 
55f66a66e6SVijay Kumar Srivastava 	uint64_t			dev_features;
56f66a66e6SVijay Kumar Srivastava 	uint64_t			drv_features;
57b1196136SVijay Kumar Srivastava 	uint64_t			req_features;
58b1196136SVijay Kumar Srivastava 
59b1196136SVijay Kumar Srivastava 	uint16_t			vq_count;
60b1196136SVijay Kumar Srivastava 	struct sfc_vdpa_vq_context_s	vq_cxt[SFC_VDPA_MAX_QUEUE_PAIRS * 2];
616dad9a73SVijay Kumar Srivastava };
626dad9a73SVijay Kumar Srivastava 
636dad9a73SVijay Kumar Srivastava struct sfc_vdpa_ops_data *
646dad9a73SVijay Kumar Srivastava sfc_vdpa_device_init(void *adapter, enum sfc_vdpa_context context);
656dad9a73SVijay Kumar Srivastava void
666dad9a73SVijay Kumar Srivastava sfc_vdpa_device_fini(struct sfc_vdpa_ops_data *ops_data);
676dad9a73SVijay Kumar Srivastava 
686dad9a73SVijay Kumar Srivastava #endif /* _SFC_VDPA_OPS_H */
69