net/af_packet: advertise Tx offload capabilities
[dpdk.git] / drivers / raw / dpaa2_qdma / rte_pmd_dpaa2_qdma.h
index 29a1e4b..4e1268c 100644 (file)
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2018 NXP
+ * Copyright 2018-2019 NXP
  */
 
 #ifndef __RTE_PMD_DPAA2_QDMA_H__
@@ -12,6 +12,9 @@
  *
  */
 
+/** Maximum qdma burst size */
+#define RTE_QDMA_BURST_NB_MAX 256
+
 /** Determines the mode of operation */
 enum {
        /**
@@ -30,8 +33,14 @@ enum {
        RTE_QDMA_MODE_VIRTUAL
 };
 
+/** Determines the format of FD */
+enum {
+       RTE_QDMA_LONG_FORMAT,
+       RTE_QDMA_ULTRASHORT_FORMAT,
+};
+
 /**
- * If user has configued a Virtual Queue mode, but for some particular VQ
+ * If user has configured a Virtual Queue mode, but for some particular VQ
  * user needs an exclusive H/W queue associated (for better performance
  * on that particular VQ), then user can pass this flag while creating the
  * Virtual Queue. A H/W queue will be allocated corresponding to
@@ -59,6 +68,8 @@ struct rte_qdma_config {
        uint16_t max_vqs;
        /** mode of operation - physical(h/w) or virtual */
        uint8_t mode;
+       /** FD format */
+       uint8_t format;
        /**
         * User provides this as input to the driver as a size of the FLE pool.
         * FLE's (and corresponding source/destination descriptors) are
@@ -70,6 +81,40 @@ struct rte_qdma_config {
        int fle_pool_count;
 };
 
+struct rte_qdma_rbp {
+       uint32_t use_ultrashort:1;
+       uint32_t enable:1;
+       /**
+        * dportid:
+        * 0000 PCI-Express 1
+        * 0001 PCI-Express 2
+        * 0010 PCI-Express 3
+        * 0011 PCI-Express 4
+        * 0100 PCI-Express 5
+        * 0101 PCI-Express 6
+        */
+       uint32_t dportid:4;
+       uint32_t dpfid:2;
+       uint32_t dvfid:6;
+       /*using route by port for destination */
+       uint32_t drbp:1;
+       /**
+        * sportid:
+        * 0000 PCI-Express 1
+        * 0001 PCI-Express 2
+        * 0010 PCI-Express 3
+        * 0011 PCI-Express 4
+        * 0100 PCI-Express 5
+        * 0101 PCI-Express 6
+        */
+       uint32_t sportid:4;
+       uint32_t spfid:2;
+       uint32_t svfid:6;
+       /* using route by port for source */
+       uint32_t srbp:1;
+       uint32_t rsv:4;
+};
+
 /** Provides QDMA device statistics */
 struct rte_qdma_vq_stats {
        /** States if this vq has exclusively associated hw queue */
@@ -102,8 +147,11 @@ struct rte_qdma_job {
        /**
         * Status of the transaction.
         * This is filled in the dequeue operation by the driver.
+        * upper 8bits acc_err for route by port.
+        * lower 8bits fd error
         */
-       uint8_t status;
+       uint16_t status;
+       uint16_t vq_id;
 };
 
 /**
@@ -113,7 +161,7 @@ struct rte_qdma_job {
  *   - 0: Success.
  *   - <0: Error code.
  */
-int __rte_experimental
+int
 rte_qdma_init(void);
 
 /**
@@ -122,7 +170,7 @@ rte_qdma_init(void);
  * @param qdma_attr
  *   QDMA attributes providing total number of hw queues etc.
  */
-void __rte_experimental
+void
 rte_qdma_attr_get(struct rte_qdma_attr *qdma_attr);
 
 /**
@@ -134,7 +182,7 @@ rte_qdma_attr_get(struct rte_qdma_attr *qdma_attr);
  *   - 0: Success.
  *   - <0: Error code.
  */
-int __rte_experimental
+int
 rte_qdma_reset(void);
 
 /**
@@ -144,7 +192,7 @@ rte_qdma_reset(void);
  *   - 0: Success.
  *   - <0: Error code.
  */
-int __rte_experimental
+int
 rte_qdma_configure(struct rte_qdma_config *qdma_config);
 
 /**
@@ -154,7 +202,7 @@ rte_qdma_configure(struct rte_qdma_config *qdma_config);
  *   - 0: Success.
  *   - <0: Error code.
  */
-int __rte_experimental
+int
 rte_qdma_start(void);
 
 /**
@@ -171,9 +219,85 @@ rte_qdma_start(void);
  *   - >= 0: Virtual queue ID.
  *   - <0: Error code.
  */
-int __rte_experimental
+int
 rte_qdma_vq_create(uint32_t lcore_id, uint32_t flags);
 
+/*create vq for route-by-port*/
+int
+rte_qdma_vq_create_rbp(uint32_t lcore_id, uint32_t flags,
+                       struct rte_qdma_rbp *rbp);
+
+/**
+ * Enqueue multiple jobs to a Virtual Queue.
+ * If the enqueue is successful, the H/W will perform DMA operations
+ * on the basis of the QDMA jobs provided.
+ *
+ * @param vq_id
+ *   Virtual Queue ID.
+ * @param job
+ *   List of QDMA Jobs containing relevant information related to DMA.
+ * @param nb_jobs
+ *   Number of QDMA jobs provided by the user.
+ *
+ * @returns
+ *   - >=0: Number of jobs successfully submitted
+ *   - <0: Error code.
+ */
+int
+rte_qdma_vq_enqueue_multi(uint16_t vq_id,
+                         struct rte_qdma_job **job,
+                         uint16_t nb_jobs);
+
+/**
+ * Enqueue a single job to a Virtual Queue.
+ * If the enqueue is successful, the H/W will perform DMA operations
+ * on the basis of the QDMA job provided.
+ *
+ * @param vq_id
+ *   Virtual Queue ID.
+ * @param job
+ *   A QDMA Job containing relevant information related to DMA.
+ *
+ * @returns
+ *   - >=0: Number of jobs successfully submitted
+ *   - <0: Error code.
+ */
+int
+rte_qdma_vq_enqueue(uint16_t vq_id,
+                   struct rte_qdma_job *job);
+
+/**
+ * Dequeue multiple completed jobs from a Virtual Queue.
+ * Provides the list of completed jobs capped by nb_jobs.
+ *
+ * @param vq_id
+ *   Virtual Queue ID.
+ * @param job
+ *   List of QDMA Jobs returned from the API.
+ * @param nb_jobs
+ *   Number of QDMA jobs requested for dequeue by the user.
+ *
+ * @returns
+ *   - >=0: Number of jobs successfully received
+ *   - <0: Error code.
+ */
+int
+rte_qdma_vq_dequeue_multi(uint16_t vq_id,
+                         struct rte_qdma_job **job,
+                         uint16_t nb_jobs);
+
+/**
+ * Dequeue a single completed jobs from a Virtual Queue.
+ *
+ * @param vq_id
+ *   Virtual Queue ID.
+ *
+ * @returns
+ *   - A completed job or NULL if no job is there.
+ */
+struct rte_qdma_job *
+rte_qdma_vq_dequeue(uint16_t vq_id);
+
 /**
  * Get a Virtual Queue statistics.
  *
@@ -182,7 +306,7 @@ rte_qdma_vq_create(uint32_t lcore_id, uint32_t flags);
  * @param vq_stats
  *   VQ statistics structure which will be filled in by the driver.
  */
-void __rte_experimental
+void
 rte_qdma_vq_stats(uint16_t vq_id,
                  struct rte_qdma_vq_stats *vq_stats);
 
@@ -192,25 +316,40 @@ rte_qdma_vq_stats(uint16_t vq_id,
  * VQ's at runtime.
  *
  * @param vq_id
- *   Virtual Queue ID which needs to be deinialized.
+ *   Virtual Queue ID which needs to be uninitialized.
  *
  * @returns
  *   - 0: Success.
  *   - <0: Error code.
  */
-int __rte_experimental
+int
 rte_qdma_vq_destroy(uint16_t vq_id);
 
+/**
+ * Destroy the RBP specific Virtual Queue specified by vq_id.
+ * This API can be called from any thread/core. User can create/destroy
+ * VQ's at runtime.
+ *
+ * @param vq_id
+ *   RBP based Virtual Queue ID which needs to be uninitialized.
+ *
+ * @returns
+ *   - 0: Success.
+ *   - <0: Error code.
+ */
+
+int
+rte_qdma_vq_destroy_rbp(uint16_t vq_id);
 /**
  * Stop QDMA device.
  */
-void __rte_experimental
+void
 rte_qdma_stop(void);
 
 /**
  * Destroy the QDMA device.
  */
-void __rte_experimental
+void
 rte_qdma_destroy(void);
 
 #endif /* __RTE_PMD_DPAA2_QDMA_H__*/