130495f54SYong Zhang /* SPDX-License-Identifier: BSD-3-Clause 230495f54SYong Zhang * Copyright 2024 ZTE Corporation 330495f54SYong Zhang */ 430495f54SYong Zhang 530495f54SYong Zhang #ifndef GDTC_RAWDEV_H 630495f54SYong Zhang #define GDTC_RAWDEV_H 730495f54SYong Zhang 830495f54SYong Zhang #include <stdint.h> 930495f54SYong Zhang #include <rte_log.h> 1030495f54SYong Zhang #include <rte_common.h> 1130495f54SYong Zhang #include <generic/rte_spinlock.h> 1230495f54SYong Zhang 1330495f54SYong Zhang extern int zxdh_gdma_rawdev_logtype; 1430495f54SYong Zhang #define RTE_LOGTYPE_ZXDH_GDMA zxdh_gdma_rawdev_logtype 1530495f54SYong Zhang 1630495f54SYong Zhang #define ZXDH_PMD_LOG(level, ...) \ 1730495f54SYong Zhang RTE_LOG_LINE_PREFIX(level, ZXDH_GDMA, \ 1830495f54SYong Zhang "%s() line %u: ", __func__ RTE_LOG_COMMA __LINE__, __VA_ARGS__) 1930495f54SYong Zhang 2030495f54SYong Zhang #define ZXDH_GDMA_VENDORID 0x1cf2 2130495f54SYong Zhang #define ZXDH_GDMA_DEVICEID 0x8044 2230495f54SYong Zhang 2330495f54SYong Zhang #define ZXDH_GDMA_TOTAL_CHAN_NUM 58 2430495f54SYong Zhang #define ZXDH_GDMA_QUEUE_SIZE 16384 2530495f54SYong Zhang #define ZXDH_GDMA_RING_SIZE 32768 2630495f54SYong Zhang 27*a73d74c2SYong Zhang /* States if the source addresses is physical. */ 28*a73d74c2SYong Zhang #define ZXDH_GDMA_JOB_SRC_PHY (1UL) 29*a73d74c2SYong Zhang 30*a73d74c2SYong Zhang /* States if the destination addresses is physical. */ 31*a73d74c2SYong Zhang #define ZXDH_GDMA_JOB_DEST_PHY (1UL << 1) 32*a73d74c2SYong Zhang 33*a73d74c2SYong Zhang /* ZF->HOST */ 34*a73d74c2SYong Zhang #define ZXDH_GDMA_JOB_DIR_TX (1UL << 2) 35*a73d74c2SYong Zhang 36*a73d74c2SYong Zhang /* HOST->ZF */ 37*a73d74c2SYong Zhang #define ZXDH_GDMA_JOB_DIR_RX (1UL << 3) 38*a73d74c2SYong Zhang 39*a73d74c2SYong Zhang #define ZXDH_GDMA_JOB_DIR_MASK (ZXDH_GDMA_JOB_DIR_TX | ZXDH_GDMA_JOB_DIR_RX) 40*a73d74c2SYong Zhang 4130495f54SYong Zhang enum zxdh_gdma_device_state { 4230495f54SYong Zhang ZXDH_GDMA_DEV_RUNNING, 4330495f54SYong Zhang ZXDH_GDMA_DEV_STOPPED 4430495f54SYong Zhang }; 4530495f54SYong Zhang 4630495f54SYong Zhang struct zxdh_gdma_buff_desc { 4730495f54SYong Zhang uint32_t SrcAddr_L; 4830495f54SYong Zhang uint32_t DstAddr_L; 4930495f54SYong Zhang uint32_t Xpara; 5030495f54SYong Zhang uint32_t ZY_para; 5130495f54SYong Zhang uint32_t ZY_SrcStep; 5230495f54SYong Zhang uint32_t ZY_DstStep; 5330495f54SYong Zhang uint32_t ExtAddr; 5430495f54SYong Zhang uint32_t LLI_Addr_L; 5530495f54SYong Zhang uint32_t LLI_Addr_H; 5630495f54SYong Zhang uint32_t ChCont; 5730495f54SYong Zhang uint32_t LLI_User; 5830495f54SYong Zhang uint32_t ErrAddr; 5930495f54SYong Zhang uint32_t Control; 6030495f54SYong Zhang uint32_t SrcAddr_H; 6130495f54SYong Zhang uint32_t DstAddr_H; 6230495f54SYong Zhang uint32_t Reserved; 6330495f54SYong Zhang }; 6430495f54SYong Zhang 6530495f54SYong Zhang struct zxdh_gdma_job { 6630495f54SYong Zhang uint64_t src; 6730495f54SYong Zhang uint64_t dest; 6830495f54SYong Zhang uint32_t len; 6930495f54SYong Zhang uint32_t flags; 7030495f54SYong Zhang uint64_t cnxt; 7130495f54SYong Zhang uint16_t status; 7230495f54SYong Zhang uint16_t vq_id; 7330495f54SYong Zhang void *usr_elem; 7430495f54SYong Zhang uint8_t ep_id; 7530495f54SYong Zhang uint8_t pf_id; 7630495f54SYong Zhang uint16_t vf_id; 7730495f54SYong Zhang }; 7830495f54SYong Zhang 7930495f54SYong Zhang struct zxdh_gdma_queue { 8030495f54SYong Zhang uint8_t enable; 8130495f54SYong Zhang uint8_t is_txq; 8230495f54SYong Zhang uint16_t vq_id; 8330495f54SYong Zhang uint16_t queue_size; 8430495f54SYong Zhang /* 0:GDMA needs to be configured through the APB interface */ 8530495f54SYong Zhang uint16_t flag; 8630495f54SYong Zhang uint32_t user; 8730495f54SYong Zhang uint16_t tc_cnt; 8830495f54SYong Zhang rte_spinlock_t enqueue_lock; 8930495f54SYong Zhang struct { 9030495f54SYong Zhang uint16_t avail_idx; 9130495f54SYong Zhang uint16_t last_avail_idx; 9230495f54SYong Zhang rte_iova_t ring_mem; 9330495f54SYong Zhang const struct rte_memzone *ring_mz; 9430495f54SYong Zhang struct zxdh_gdma_buff_desc *desc; 9530495f54SYong Zhang } ring; 9630495f54SYong Zhang struct { 9730495f54SYong Zhang uint16_t free_cnt; 9830495f54SYong Zhang uint16_t deq_cnt; 9930495f54SYong Zhang uint16_t pend_cnt; 10030495f54SYong Zhang uint16_t enq_idx; 10130495f54SYong Zhang uint16_t deq_idx; 10230495f54SYong Zhang uint16_t used_idx; 10330495f54SYong Zhang struct zxdh_gdma_job **job; 10430495f54SYong Zhang } sw_ring; 10530495f54SYong Zhang }; 10630495f54SYong Zhang 10730495f54SYong Zhang struct zxdh_gdma_rawdev { 10830495f54SYong Zhang struct rte_device *device; 10930495f54SYong Zhang struct rte_rawdev *rawdev; 11030495f54SYong Zhang uintptr_t base_addr; 11130495f54SYong Zhang uint8_t queue_num; /* total queue num */ 11230495f54SYong Zhang uint8_t used_num; /* used queue num */ 11330495f54SYong Zhang enum zxdh_gdma_device_state device_state; 11430495f54SYong Zhang struct zxdh_gdma_queue vqs[ZXDH_GDMA_TOTAL_CHAN_NUM]; 11530495f54SYong Zhang }; 11630495f54SYong Zhang 117*a73d74c2SYong Zhang struct zxdh_gdma_enqdeq { 118*a73d74c2SYong Zhang uint16_t vq_id; 119*a73d74c2SYong Zhang struct zxdh_gdma_job **job; 120*a73d74c2SYong Zhang }; 121*a73d74c2SYong Zhang 122648001aaSYong Zhang struct zxdh_gdma_config { 123648001aaSYong Zhang uint16_t max_hw_queues_per_core; 124648001aaSYong Zhang uint16_t max_vqs; 125648001aaSYong Zhang int queue_pool_cnt; 126648001aaSYong Zhang }; 127648001aaSYong Zhang 128d373c66eSYong Zhang struct zxdh_gdma_rbp { 129d373c66eSYong Zhang uint32_t use_ultrashort:1; 130d373c66eSYong Zhang uint32_t enable:1; 131d373c66eSYong Zhang uint32_t dportid:3; 132d373c66eSYong Zhang uint32_t dpfid:3; 133d373c66eSYong Zhang uint32_t dvfid:8; /* using route by port for destination */ 134d373c66eSYong Zhang uint32_t drbp:1; 135d373c66eSYong Zhang uint32_t sportid:3; 136d373c66eSYong Zhang uint32_t spfid:3; 137d373c66eSYong Zhang uint32_t svfid:8; 138d373c66eSYong Zhang uint32_t srbp:1; 139d373c66eSYong Zhang }; 140d373c66eSYong Zhang 141d373c66eSYong Zhang struct zxdh_gdma_queue_config { 142d373c66eSYong Zhang uint32_t lcore_id; 143d373c66eSYong Zhang uint32_t flags; 144d373c66eSYong Zhang struct zxdh_gdma_rbp *rbp; 145d373c66eSYong Zhang }; 146d373c66eSYong Zhang 147648001aaSYong Zhang struct zxdh_gdma_attr { 148648001aaSYong Zhang uint16_t num_hw_queues; 149648001aaSYong Zhang }; 150648001aaSYong Zhang 15130495f54SYong Zhang #endif /* GDTC_RAWDEV_H */ 152