DPDK  18.11.11
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 /* Number of columns in sub-block interleaver (36.212, section 5.1.4.1.1) */
29 #define RTE_BBDEV_C_SUBBLOCK (32)
30 /* Maximum size of Transport Block (36.213, Table, Table 7.1.7.2.5-1) */
31 #define RTE_BBDEV_MAX_TB_SIZE (391656)
32 /* Maximum size of Code Block (36.212, Table 5.1.3-3) */
33 #define RTE_BBDEV_MAX_CB_SIZE (6144)
34 /* Minimum size of Code Block (36.212, Table 5.1.3-3) */
35 #define RTE_BBDEV_MIN_CB_SIZE (40)
36 /* Maximum size of circular buffer */
37 #define RTE_BBDEV_MAX_KW (18528)
38 /*
39  * Maximum number of Code Blocks in Transport Block. It is calculated based on
40  * maximum size of one Code Block and one Transport Block (considering CRC24A
41  * and CRC24B):
42  * (391656 + 24) / (6144 - 24) = 64
43  */
44 #define RTE_BBDEV_MAX_CODE_BLOCKS (64)
45 
51  RTE_BBDEV_TURBO_CRC_TYPE_24B = (1ULL << 1),
53  RTE_BBDEV_TURBO_EQUALIZER = (1ULL << 2),
65  RTE_BBDEV_TURBO_SOFT_OUTPUT = (1ULL << 6),
69  RTE_BBDEV_TURBO_DEC_INTERRUPTS = (1ULL << 9),
76  RTE_BBDEV_TURBO_POS_LLR_1_BIT_IN = (1ULL << 10),
83  RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN = (1ULL << 11),
103  RTE_BBDEV_TURBO_MAP_DEC = (1ULL << 14),
105  RTE_BBDEV_TURBO_DEC_SCATTER_GATHER = (1ULL << 15),
109  RTE_BBDEV_TURBO_DEC_TB_CRC_24B_KEEP = (1ULL << 16)
110 };
111 
115  RTE_BBDEV_TURBO_RV_INDEX_BYPASS = (1ULL << 0),
117  RTE_BBDEV_TURBO_RATE_MATCH = (1ULL << 1),
119  RTE_BBDEV_TURBO_CRC_24B_ATTACH = (1ULL << 2),
121  RTE_BBDEV_TURBO_CRC_24A_ATTACH = (1ULL << 3),
123  RTE_BBDEV_TURBO_ENC_INTERRUPTS = (1ULL << 4),
125  RTE_BBDEV_TURBO_ENC_SCATTER_GATHER = (1ULL << 5)
126 };
127 
129 struct rte_bbdev_op_data {
159  struct rte_mbuf *data;
167  uint32_t offset;
180  uint32_t length;
181 };
182 
183 struct rte_bbdev_op_dec_cb_params {
189  uint16_t k;
193  uint32_t e;
194 };
195 
200  uint16_t k_neg;
204  uint16_t k_pos;
206  uint8_t c_neg;
208  uint8_t c;
210  uint8_t cab;
214  uint32_t ea;
218  uint32_t eb;
219 };
220 
249 struct rte_bbdev_op_turbo_dec {
251  struct rte_bbdev_op_data input;
255  struct rte_bbdev_op_data hard_output;
257  struct rte_bbdev_op_data soft_output;
258 
259  uint32_t op_flags;
260  uint8_t rv_index;
264  uint8_t iter_min:4;
268  uint8_t iter_max:4;
272  uint8_t iter_count;
274  uint8_t ext_scale;
278  uint8_t num_maps;
279 
281  uint8_t code_block_mode;
282  union {
284  struct rte_bbdev_op_dec_cb_params cb_params;
286  struct rte_bbdev_op_dec_tb_params tb_params;
287  };
288 };
289 
290 struct rte_bbdev_op_enc_cb_params {
296  uint16_t k;
300  uint32_t e;
304  uint16_t ncb;
305 };
306 
313  uint16_t k_neg;
319  uint16_t k_pos;
321  uint8_t c_neg;
323  uint8_t c;
325  uint8_t cab;
329  uint32_t ea;
333  uint32_t eb;
337  uint16_t ncb_neg;
341  uint16_t ncb_pos;
343  uint8_t r;
344 };
345 
367  struct rte_bbdev_op_data input;
369  struct rte_bbdev_op_data output;
370 
371  uint32_t op_flags;
372  uint8_t rv_index;
374  uint8_t code_block_mode;
375  union {
377  struct rte_bbdev_op_enc_cb_params cb_params;
379  struct rte_bbdev_op_enc_tb_params tb_params;
380  };
381 };
382 
391  uint8_t num_buffers_src;
395  uint8_t num_buffers_soft_out;
396 };
397 
399 struct rte_bbdev_op_cap_turbo_enc {
401  uint32_t capability_flags;
402  uint8_t num_buffers_src;
403  uint8_t num_buffers_dst;
404 };
405 
412 };
413 
415 enum {
416  RTE_BBDEV_DRV_ERROR,
417  RTE_BBDEV_DATA_ERROR,
418  RTE_BBDEV_CRC_ERROR,
419 };
420 
424  int status;
428  void *opaque_data;
431 };
432 
435  int status;
437  void *opaque_data;
439  struct rte_bbdev_op_turbo_dec turbo_dec;
440 };
441 
443 struct rte_bbdev_op_cap {
444  enum rte_bbdev_op_type type;
445  union {
446  struct rte_bbdev_op_cap_turbo_dec turbo_dec;
447  struct rte_bbdev_op_cap_turbo_enc turbo_enc;
448  } cap;
449 };
450 
452 struct rte_bbdev_op_pool_private {
453  enum rte_bbdev_op_type type;
454 };
455 
466 const char*
468 
489 struct rte_mempool *
491  unsigned int num_elements, unsigned int cache_size,
492  int socket_id);
493 
508 static inline int
510  struct rte_bbdev_enc_op **ops, uint16_t num_ops)
511 {
512  struct rte_bbdev_op_pool_private *priv;
513  int ret;
514 
515  /* Check type */
516  priv = (struct rte_bbdev_op_pool_private *)
517  rte_mempool_get_priv(mempool);
518  if (unlikely(priv->type != RTE_BBDEV_OP_TURBO_ENC))
519  return -EINVAL;
520 
521  /* Get elements */
522  ret = rte_mempool_get_bulk(mempool, (void **)ops, num_ops);
523  if (unlikely(ret < 0))
524  return ret;
525 
526  return 0;
527 }
528 
543 static inline int
545  struct rte_bbdev_dec_op **ops, uint16_t num_ops)
546 {
547  struct rte_bbdev_op_pool_private *priv;
548  int ret;
549 
550  /* Check type */
551  priv = (struct rte_bbdev_op_pool_private *)
552  rte_mempool_get_priv(mempool);
553  if (unlikely(priv->type != RTE_BBDEV_OP_TURBO_DEC))
554  return -EINVAL;
555 
556  /* Get elements */
557  ret = rte_mempool_get_bulk(mempool, (void **)ops, num_ops);
558  if (unlikely(ret < 0))
559  return ret;
560 
561  return 0;
562 }
563 
574 static inline void
575 rte_bbdev_dec_op_free_bulk(struct rte_bbdev_dec_op **ops, unsigned int num_ops)
576 {
577  if (num_ops > 0)
578  rte_mempool_put_bulk(ops[0]->mempool, (void **)ops, num_ops);
579 }
580 
591 static inline void
592 rte_bbdev_enc_op_free_bulk(struct rte_bbdev_enc_op **ops, unsigned int num_ops)
593 {
594  if (num_ops > 0)
595  rte_mempool_put_bulk(ops[0]->mempool, (void **)ops, num_ops);
596 }
597 
598 #ifdef __cplusplus
599 }
600 #endif
601 
602 #endif /* _RTE_BBDEV_OP_H_ */
rte_bbdev_op_enc_tb_params::eb
uint32_t eb
Definition: rte_bbdev_op.h:333
rte_bbdev_op_turbo_enc::cb_params
struct rte_bbdev_op_enc_cb_params cb_params
Definition: rte_bbdev_op.h:377
rte_bbdev_dec_op_free_bulk
static void rte_bbdev_dec_op_free_bulk(struct rte_bbdev_dec_op **ops, unsigned int num_ops)
Definition: rte_bbdev_op.h:575
RTE_BBDEV_TURBO_SOFT_OUT_SATURATE
@ RTE_BBDEV_TURBO_SOFT_OUT_SATURATE
Definition: rte_bbdev_op.h:55
RTE_BBDEV_TURBO_CRC_24B_ATTACH
@ RTE_BBDEV_TURBO_CRC_24B_ATTACH
Definition: rte_bbdev_op.h:119
RTE_BBDEV_OP_NONE
@ RTE_BBDEV_OP_NONE
Definition: rte_bbdev_op.h:408
rte_bbdev_op_turbo_enc::code_block_mode
uint8_t code_block_mode
Definition: rte_bbdev_op.h:374
rte_bbdev_op_enc_tb_params::c_neg
uint8_t c_neg
Definition: rte_bbdev_op.h:321
RTE_BBDEV_TURBO_POS_LLR_1_BIT_SOFT_OUT
@ RTE_BBDEV_TURBO_POS_LLR_1_BIT_SOFT_OUT
Definition: rte_bbdev_op.h:91
rte_mempool_get_priv
static void * rte_mempool_get_priv(struct rte_mempool *mp)
Definition: rte_mempool.h:1637
rte_memory.h
rte_bbdev_op_dec_tb_params::k_pos
uint16_t k_pos
Definition: rte_bbdev_op.h:204
unlikely
#define unlikely(x)
Definition: rte_branch_prediction.h:38
RTE_BBDEV_TURBO_SUBBLOCK_DEINTERLEAVE
@ RTE_BBDEV_TURBO_SUBBLOCK_DEINTERLEAVE
Definition: rte_bbdev_op.h:49
rte_bbdev_op_dec_tb_params::cab
uint8_t cab
Definition: rte_bbdev_op.h:210
RTE_BBDEV_OP_TURBO_DEC
@ RTE_BBDEV_OP_TURBO_DEC
Definition: rte_bbdev_op.h:409
rte_mempool::name
char name[RTE_MEMZONE_NAMESIZE]
Definition: rte_mempool.h:219
rte_bbdev_dec_op::mempool
struct rte_mempool * mempool
Definition: rte_bbdev_op.h:436
rte_bbdev_dec_op_alloc_bulk
static int rte_bbdev_dec_op_alloc_bulk(struct rte_mempool *mempool, struct rte_bbdev_dec_op **ops, uint16_t num_ops)
Definition: rte_bbdev_op.h:544
RTE_BBDEV_TURBO_NEG_LLR_1_BIT_SOFT_OUT
@ RTE_BBDEV_TURBO_NEG_LLR_1_BIT_SOFT_OUT
Definition: rte_bbdev_op.h:99
RTE_BBDEV_OP_TYPE_COUNT
@ RTE_BBDEV_OP_TYPE_COUNT
Definition: rte_bbdev_op.h:411
rte_bbdev_op_dec_tb_params::c
uint8_t c
Definition: rte_bbdev_op.h:208
rte_bbdev_op_enc_tb_params::k_pos
uint16_t k_pos
Definition: rte_bbdev_op.h:319
rte_bbdev_op_dec_tb_params
Definition: rte_bbdev_op.h:196
rte_bbdev_enc_op
Definition: rte_bbdev_op.h:422
rte_bbdev_op_enc_tb_params::ea
uint32_t ea
Definition: rte_bbdev_op.h:329
RTE_BBDEV_TURBO_MAP_DEC
@ RTE_BBDEV_TURBO_MAP_DEC
Definition: rte_bbdev_op.h:103
RTE_BBDEV_TURBO_POS_LLR_1_BIT_IN
@ RTE_BBDEV_TURBO_POS_LLR_1_BIT_IN
Definition: rte_bbdev_op.h:76
rte_bbdev_op_te_flag_bitmasks
rte_bbdev_op_te_flag_bitmasks
Definition: rte_bbdev_op.h:113
rte_bbdev_op_turbo_enc
Definition: rte_bbdev_op.h:365
rte_mbuf
Definition: rte_mbuf.h:478
rte_bbdev_op_enc_tb_params::r
uint8_t r
Definition: rte_bbdev_op.h:343
RTE_BBDEV_TURBO_ENC_INTERRUPTS
@ RTE_BBDEV_TURBO_ENC_INTERRUPTS
Definition: rte_bbdev_op.h:123
rte_bbdev_op_type
rte_bbdev_op_type
Definition: rte_bbdev_op.h:407
rte_bbdev_op_dec_tb_params::k_neg
uint16_t k_neg
Definition: rte_bbdev_op.h:200
rte_bbdev_enc_op::mempool
struct rte_mempool * mempool
Definition: rte_bbdev_op.h:426
rte_bbdev_enc_op::status
int status
Definition: rte_bbdev_op.h:424
rte_bbdev_op_cap_turbo_dec::num_buffers_src
uint8_t num_buffers_src
Definition: rte_bbdev_op.h:391
rte_bbdev_op_cap_turbo_dec::num_buffers_hard_out
uint8_t num_buffers_hard_out
Definition: rte_bbdev_op.h:393
rte_bbdev_op_turbo_enc::rv_index
uint8_t rv_index
Definition: rte_bbdev_op.h:372
rte_bbdev_enc_op_free_bulk
static void rte_bbdev_enc_op_free_bulk(struct rte_bbdev_enc_op **ops, unsigned int num_ops)
Definition: rte_bbdev_op.h:592
RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN
@ RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN
Definition: rte_bbdev_op.h:83
rte_bbdev_dec_op
Definition: rte_bbdev_op.h:434
rte_bbdev_op_dec_tb_params::c_neg
uint8_t c_neg
Definition: rte_bbdev_op.h:206
rte_bbdev_op_enc_tb_params::c
uint8_t c
Definition: rte_bbdev_op.h:323
rte_bbdev_op_enc_tb_params::ncb_neg
uint16_t ncb_neg
Definition: rte_bbdev_op.h:337
rte_bbdev_dec_op::opaque_data
void * opaque_data
Definition: rte_bbdev_op.h:437
rte_common.h
RTE_BBDEV_TURBO_EQUALIZER
@ RTE_BBDEV_TURBO_EQUALIZER
Definition: rte_bbdev_op.h:53
RTE_BBDEV_TURBO_EARLY_TERMINATION
@ RTE_BBDEV_TURBO_EARLY_TERMINATION
Definition: rte_bbdev_op.h:67
rte_bbdev_op_turbo_enc::op_flags
uint32_t op_flags
Definition: rte_bbdev_op.h:371
rte_bbdev_op_cap_turbo_dec
Definition: rte_bbdev_op.h:384
RTE_BBDEV_TURBO_DEC_SCATTER_GATHER
@ RTE_BBDEV_TURBO_DEC_SCATTER_GATHER
Definition: rte_bbdev_op.h:105
rte_bbdev_op_dec_tb_params::ea
uint32_t ea
Definition: rte_bbdev_op.h:214
RTE_BBDEV_TURBO_SOFT_OUTPUT
@ RTE_BBDEV_TURBO_SOFT_OUTPUT
Definition: rte_bbdev_op.h:65
rte_bbdev_enc_op_alloc_bulk
static int rte_bbdev_enc_op_alloc_bulk(struct rte_mempool *mempool, struct rte_bbdev_enc_op **ops, uint16_t num_ops)
Definition: rte_bbdev_op.h:509
rte_mempool
Definition: rte_mempool.h:213
rte_bbdev_op_enc_tb_params::k_neg
uint16_t k_neg
Definition: rte_bbdev_op.h:313
RTE_BBDEV_TURBO_CRC_24A_ATTACH
@ RTE_BBDEV_TURBO_CRC_24A_ATTACH
Definition: rte_bbdev_op.h:121
rte_bbdev_enc_op::opaque_data
void * opaque_data
Definition: rte_bbdev_op.h:428
rte_bbdev_op_cap_turbo_dec::max_llr_modulus
int8_t max_llr_modulus
Definition: rte_bbdev_op.h:390
rte_bbdev_op_enc_tb_params
Definition: rte_bbdev_op.h:307
rte_mempool_get_bulk
static __rte_always_inline int rte_mempool_get_bulk(struct rte_mempool *mp, void **obj_table, unsigned int n)
Definition: rte_mempool.h:1455
rte_bbdev_op_type_str
const char * rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type)
RTE_BBDEV_TURBO_CONTINUE_CRC_MATCH
@ RTE_BBDEV_TURBO_CONTINUE_CRC_MATCH
Definition: rte_bbdev_op.h:63
rte_mempool.h
RTE_BBDEV_TURBO_RV_INDEX_BYPASS
@ RTE_BBDEV_TURBO_RV_INDEX_BYPASS
Definition: rte_bbdev_op.h:115
rte_mempool_put_bulk
static __rte_always_inline void rte_mempool_put_bulk(struct rte_mempool *mp, void *const *obj_table, unsigned int n)
Definition: rte_mempool.h:1303
rte_bbdev_op_enc_tb_params::cab
uint8_t cab
Definition: rte_bbdev_op.h:325
rte_bbdev_op_td_flag_bitmasks
rte_bbdev_op_td_flag_bitmasks
Definition: rte_bbdev_op.h:47
rte_mbuf.h
rte_bbdev_op_cap_turbo_dec::capability_flags
uint32_t capability_flags
Definition: rte_bbdev_op.h:386
rte_bbdev_dec_op::status
int status
Definition: rte_bbdev_op.h:435
rte_bbdev_op_pool_create
struct rte_mempool * rte_bbdev_op_pool_create(const char *name, enum rte_bbdev_op_type type, unsigned int num_elements, unsigned int cache_size, int socket_id)
rte_bbdev_enc_op::turbo_enc
struct rte_bbdev_op_turbo_enc turbo_enc
Definition: rte_bbdev_op.h:430
rte_bbdev_op_turbo_enc::input
struct rte_bbdev_op_data input
Definition: rte_bbdev_op.h:367
RTE_BBDEV_OP_TURBO_ENC
@ RTE_BBDEV_OP_TURBO_ENC
Definition: rte_bbdev_op.h:410
rte_mempool::cache_size
uint32_t cache_size
Definition: rte_mempool.h:230
RTE_BBDEV_TURBO_HALF_ITERATION_EVEN
@ RTE_BBDEV_TURBO_HALF_ITERATION_EVEN
Definition: rte_bbdev_op.h:59
RTE_BBDEV_TURBO_DEC_INTERRUPTS
@ RTE_BBDEV_TURBO_DEC_INTERRUPTS
Definition: rte_bbdev_op.h:69
rte_mempool::socket_id
int socket_id
Definition: rte_mempool.h:228
RTE_BBDEV_TURBO_RATE_MATCH
@ RTE_BBDEV_TURBO_RATE_MATCH
Definition: rte_bbdev_op.h:117
RTE_BBDEV_TURBO_CRC_TYPE_24B
@ RTE_BBDEV_TURBO_CRC_TYPE_24B
Definition: rte_bbdev_op.h:51