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