DPDK  18.02.2
rte_bbdev_op.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Intel Corporation
3  */
4 
5 #ifndef _RTE_BBDEV_OP_H_
6 #define _RTE_BBDEV_OP_H_
7 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 #include <stdint.h>
22 
23 #include <rte_common.h>
24 #include <rte_mbuf.h>
25 #include <rte_memory.h>
26 #include <rte_mempool.h>
27 
28 #define RTE_BBDEV_MAX_CODE_BLOCKS 64
29 
87  RTE_BBDEV_TURBO_MAP_DEC = (1ULL << 14),
89  RTE_BBDEV_TURBO_DEC_SCATTER_GATHER = (1ULL << 15)
90 };
91 
105  RTE_BBDEV_TURBO_ENC_SCATTER_GATHER = (1ULL << 5)
106 };
107 
109 struct rte_bbdev_op_data {
139  struct rte_mbuf *data;
147  uint32_t offset;
160  uint32_t length;
161 };
162 
163 struct rte_bbdev_op_dec_cb_params {
169  uint16_t k;
173  uint32_t e;
174 };
175 
180  uint16_t k_neg;
184  uint16_t k_pos;
186  uint8_t c_neg;
188  uint8_t c;
190  uint8_t cab;
194  uint32_t ea;
198  uint32_t eb;
199 };
200 
229 struct rte_bbdev_op_turbo_dec {
231  struct rte_bbdev_op_data input;
235  struct rte_bbdev_op_data hard_output;
237  struct rte_bbdev_op_data soft_output;
238 
239  uint32_t op_flags;
240  uint8_t rv_index;
244  uint8_t iter_min:4;
248  uint8_t iter_max:4;
252  uint8_t iter_count;
254  uint8_t ext_scale;
258  uint8_t num_maps;
259 
260  uint8_t code_block_mode;
261  union {
263  struct rte_bbdev_op_dec_cb_params cb_params;
265  struct rte_bbdev_op_dec_tb_params tb_params;
266  };
267 };
268 
269 struct rte_bbdev_op_enc_cb_params {
275  uint16_t k;
279  uint32_t e;
283  uint16_t ncb;
284 };
285 
292  uint16_t k_neg;
298  uint16_t k_pos;
300  uint8_t c_neg;
302  uint8_t c;
304  uint8_t cab;
308  uint32_t ea;
312  uint32_t eb;
316  uint16_t ncb_neg;
320  uint16_t ncb_pos;
322  uint8_t r;
323 };
324 
346  struct rte_bbdev_op_data input;
348  struct rte_bbdev_op_data output;
349 
350  uint32_t op_flags;
351  uint8_t rv_index;
353  uint8_t code_block_mode;
354  union {
356  struct rte_bbdev_op_enc_cb_params cb_params;
358  struct rte_bbdev_op_enc_tb_params tb_params;
359  };
360 };
361 
366  uint8_t num_buffers_src;
368  uint8_t num_buffers_hard_out;
370  uint8_t num_buffers_soft_out;
371 };
372 
374 struct rte_bbdev_op_cap_turbo_enc {
376  uint32_t capability_flags;
377  uint8_t num_buffers_src;
378  uint8_t num_buffers_dst;
379 };
380 
387 };
388 
390 enum {
391  RTE_BBDEV_DRV_ERROR,
392  RTE_BBDEV_DATA_ERROR,
393  RTE_BBDEV_CRC_ERROR,
394 };
395 
398  int status;
400  void *opaque_data;
402  struct rte_bbdev_op_turbo_enc turbo_enc;
403 };
404 
407  int status;
409  void *opaque_data;
411  struct rte_bbdev_op_turbo_dec turbo_dec;
412 };
413 
415 struct rte_bbdev_op_cap {
416  enum rte_bbdev_op_type type;
417  union {
418  struct rte_bbdev_op_cap_turbo_dec turbo_dec;
419  struct rte_bbdev_op_cap_turbo_enc turbo_enc;
420  } cap;
421 };
422 
424 struct rte_bbdev_op_pool_private {
425  enum rte_bbdev_op_type type;
426 };
427 
438 const char*
440 
461 struct rte_mempool *
462 rte_bbdev_op_pool_create(const char *name, enum rte_bbdev_op_type type,
463  unsigned int num_elements, unsigned int cache_size,
464  int socket_id);
465 
480 static inline int
482  struct rte_bbdev_enc_op **ops, uint16_t num_ops)
483 {
484  struct rte_bbdev_op_pool_private *priv;
485  int ret;
486 
487  /* Check type */
488  priv = (struct rte_bbdev_op_pool_private *)
489  rte_mempool_get_priv(mempool);
490  if (unlikely(priv->type != RTE_BBDEV_OP_TURBO_ENC))
491  return -EINVAL;
492 
493  /* Get elements */
494  ret = rte_mempool_get_bulk(mempool, (void **)ops, num_ops);
495  if (unlikely(ret < 0))
496  return ret;
497 
498  return 0;
499 }
500 
515 static inline int
517  struct rte_bbdev_dec_op **ops, uint16_t num_ops)
518 {
519  struct rte_bbdev_op_pool_private *priv;
520  int ret;
521 
522  /* Check type */
523  priv = (struct rte_bbdev_op_pool_private *)
524  rte_mempool_get_priv(mempool);
525  if (unlikely(priv->type != RTE_BBDEV_OP_TURBO_DEC))
526  return -EINVAL;
527 
528  /* Get elements */
529  ret = rte_mempool_get_bulk(mempool, (void **)ops, num_ops);
530  if (unlikely(ret < 0))
531  return ret;
532 
533  return 0;
534 }
535 
546 static inline void
547 rte_bbdev_dec_op_free_bulk(struct rte_bbdev_dec_op **ops, unsigned int num_ops)
548 {
549  if (num_ops > 0)
550  rte_mempool_put_bulk(ops[0]->mempool, (void **)ops, num_ops);
551 }
552 
563 static inline void
564 rte_bbdev_enc_op_free_bulk(struct rte_bbdev_enc_op **ops, unsigned int num_ops)
565 {
566  if (num_ops > 0)
567  rte_mempool_put_bulk(ops[0]->mempool, (void **)ops, num_ops);
568 }
569 
570 #ifdef __cplusplus
571 }
572 #endif
573 
574 #endif /* _RTE_BBDEV_OP_H_ */