#include <rte_memory.h>
#include <rte_mempool.h>
-#define RTE_BBDEV_MAX_CODE_BLOCKS 64
-
-extern int bbdev_logtype;
-
-/**
- * Helper macro for logging
- *
- * @param level
- * Log level: EMERG, ALERT, CRIT, ERR, WARNING, NOTICE, INFO, or DEBUG
- * @param fmt
- * The format string, as in printf(3).
- * @param ...
- * The variable arguments required by the format string.
- *
- * @return
- * - 0 on success
- * - Negative on error
- */
-#define rte_bbdev_log(level, fmt, ...) \
- rte_log(RTE_LOG_ ## level, bbdev_logtype, fmt "\n", ##__VA_ARGS__)
-
-/**
- * Helper macro for debug logging with extra source info
- *
- * @param fmt
- * The format string, as in printf(3).
- * @param ...
- * The variable arguments required by the format string.
- *
- * @return
- * - 0 on success
- * - Negative on error
+/* Number of columns in sub-block interleaver (36.212, section 5.1.4.1.1) */
+#define RTE_BBDEV_C_SUBBLOCK (32)
+/* Maximum size of Transport Block (36.213, Table, Table 7.1.7.2.5-1) */
+#define RTE_BBDEV_MAX_TB_SIZE (391656)
+/* Maximum size of Code Block (36.212, Table 5.1.3-3) */
+#define RTE_BBDEV_MAX_CB_SIZE (6144)
+/* Minimum size of Code Block (36.212, Table 5.1.3-3) */
+#define RTE_BBDEV_MIN_CB_SIZE (40)
+/* Maximum size of circular buffer */
+#define RTE_BBDEV_MAX_KW (18528)
+/*
+ * Maximum number of Code Blocks in Transport Block. It is calculated based on
+ * maximum size of one Code Block and one Transport Block (considering CRC24A
+ * and CRC24B):
+ * (391656 + 24) / (6144 - 24) = 64
*/
-#define rte_bbdev_log_debug(fmt, ...) \
- rte_bbdev_log(DEBUG, RTE_STR(__LINE__) ":%s() " fmt, __func__, \
- ##__VA_ARGS__)
-
-/**
- * Helper macro for extra conditional logging from datapath
- *
- * @param fmt
- * The format string, as in printf(3).
- * @param ...
- * The variable arguments required by the format string.
- *
- * @return
- * - 0 on success
- * - Negative on error
- */
-#define rte_bbdev_log_verbose(fmt, ...) \
- (void)((RTE_LOG_DEBUG <= RTE_LOG_DP_LEVEL) ? \
- rte_log(RTE_LOG_DEBUG, \
- bbdev_logtype, ": " fmt "\n", ##__VA_ARGS__) : 0)
+#define RTE_BBDEV_MAX_CODE_BLOCKS (64)
/** Flags for turbo decoder operation and capability structure */
enum rte_bbdev_op_td_flag_bitmasks {
*/
RTE_BBDEV_TURBO_MAP_DEC = (1ULL << 14),
/**< Set if a device supports scatter-gather functionality */
- RTE_BBDEV_TURBO_DEC_SCATTER_GATHER = (1ULL << 15)
+ RTE_BBDEV_TURBO_DEC_SCATTER_GATHER = (1ULL << 15),
+ /**< Set to keep CRC24B bits appended while decoding. Only usable when
+ * decoding Transport Blocks (code_block_mode = 0).
+ */
+ RTE_BBDEV_TURBO_DEC_TB_CRC_24B_KEEP = (1ULL << 16)
};
/** Flags for turbo encoder operation and capability structure */
* operation when r >= cab
*/
uint32_t eb;
+ /**< The index of the first CB in the inbound mbuf data, default is 0 */
+ uint8_t r;
};
/**< Operation structure for Turbo decode.
struct rte_bbdev_op_cap_turbo_dec {
/**< Flags from rte_bbdev_op_td_flag_bitmasks */
uint32_t capability_flags;
+ /** Maximal LLR absolute value. Acceptable LLR values lie in range
+ * [-max_llr_modulus, max_llr_modulus].
+ */
+ int8_t max_llr_modulus;
uint8_t num_buffers_src; /**< Num input code block buffers */
/**< Num hard output code block buffers */
uint8_t num_buffers_hard_out;
* Operation type as string or NULL if op_type is invalid
*
*/
-const char*
+const char* __rte_experimental
rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type);
/**
* - Pointer to a mempool on success,
* - NULL pointer on failure.
*/
-struct rte_mempool *
+struct rte_mempool * __rte_experimental
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);
* - 0 on success
* - EINVAL if invalid mempool is provided
*/
-static inline int
+static inline int __rte_experimental
rte_bbdev_enc_op_alloc_bulk(struct rte_mempool *mempool,
struct rte_bbdev_enc_op **ops, uint16_t num_ops)
{
if (unlikely(ret < 0))
return ret;
- rte_bbdev_log_verbose("%u encode ops allocated from %s\n",
- num_ops, mempool->name);
-
return 0;
}
* - 0 on success
* - EINVAL if invalid mempool is provided
*/
-static inline int
+static inline int __rte_experimental
rte_bbdev_dec_op_alloc_bulk(struct rte_mempool *mempool,
struct rte_bbdev_dec_op **ops, uint16_t num_ops)
{
if (unlikely(ret < 0))
return ret;
- rte_bbdev_log_verbose("%u encode ops allocated from %s\n",
- num_ops, mempool->name);
-
return 0;
}
* @param num_ops
* Number of structures
*/
-static inline void
+static inline void __rte_experimental
rte_bbdev_dec_op_free_bulk(struct rte_bbdev_dec_op **ops, unsigned int num_ops)
{
- if (num_ops > 0) {
+ if (num_ops > 0)
rte_mempool_put_bulk(ops[0]->mempool, (void **)ops, num_ops);
- rte_bbdev_log_verbose("%u decode ops freed to %s\n", num_ops,
- ops[0]->mempool->name);
- }
}
/**
* @param num_ops
* Number of structures
*/
-static inline void
+static inline void __rte_experimental
rte_bbdev_enc_op_free_bulk(struct rte_bbdev_enc_op **ops, unsigned int num_ops)
{
- if (num_ops > 0) {
+ if (num_ops > 0)
rte_mempool_put_bulk(ops[0]->mempool, (void **)ops, num_ops);
- rte_bbdev_log_verbose("%u encode ops freed to %s\n", num_ops,
- ops[0]->mempool->name);
- }
}
#ifdef __cplusplus