dpdk/drivers/dma/skeleton/skeleton_dmadev.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(c) 2021 HiSilicon Limited
   3 */
   4
   5#ifndef SKELETON_DMADEV_H
   6#define SKELETON_DMADEV_H
   7
   8#include <pthread.h>
   9
  10#include <rte_ring.h>
  11
  12#define SKELDMA_ARG_LCORE       "lcore"
  13
  14struct skeldma_desc {
  15        void *src;
  16        void *dst;
  17        uint32_t len;
  18        uint16_t ridx; /* ring idx */
  19};
  20
  21struct skeldma_hw {
  22        int lcore_id; /* cpucopy task affinity core */
  23        int socket_id;
  24        pthread_t thread; /* cpucopy task thread */
  25        volatile int exit_flag; /* cpucopy task exit flag */
  26
  27        struct skeldma_desc *desc_mem;
  28
  29        /* Descriptor ring state machine:
  30         *
  31         *  -----------     enqueue without submit     -----------
  32         *  |  empty  |------------------------------->| pending |
  33         *  -----------\                               -----------
  34         *       ^      \------------                       |
  35         *       |                  |                       |submit doorbell
  36         *       |                  |                       |
  37         *       |                  |enqueue with submit    |
  38         *       |get completed     |------------------|    |
  39         *       |                                     |    |
  40         *       |                                     v    v
  41         *  -----------     cpucopy thread working     -----------
  42         *  |completed|<-------------------------------| running |
  43         *  -----------                                -----------
  44         */
  45        struct rte_ring *desc_empty;
  46        struct rte_ring *desc_pending;
  47        struct rte_ring *desc_running;
  48        struct rte_ring *desc_completed;
  49
  50        /* Cache delimiter for dataplane API's operation data */
  51        char cache1 __rte_cache_aligned;
  52        uint16_t ridx;  /* ring idx */
  53        uint16_t last_ridx;
  54        uint64_t submitted_count;
  55
  56        /* Cache delimiter for cpucopy thread's operation data */
  57        char cache2 __rte_cache_aligned;
  58        volatile uint32_t zero_req_count;
  59        uint64_t completed_count;
  60};
  61
  62#endif /* SKELETON_DMADEV_H */
  63