doc: add Meson coding style to contributors guide
[dpdk.git] / lib / librte_bbdev / rte_bbdev.c
index 8a053e3..5ba891c 100644 (file)
@@ -6,6 +6,7 @@
 #include <string.h>
 #include <stdbool.h>
 
+#include <rte_compat.h>
 #include <rte_common.h>
 #include <rte_errno.h>
 #include <rte_log.h>
 #define DEV_NAME "BBDEV"
 
 
+/* BBDev library logging ID */
+RTE_LOG_REGISTER(bbdev_logtype, lib.bbdev, NOTICE);
+
+/* Helper macro for logging */
+#define rte_bbdev_log(level, fmt, ...) \
+       rte_log(RTE_LOG_ ## level, bbdev_logtype, fmt "\n", ##__VA_ARGS__)
+
+#define rte_bbdev_log_debug(fmt, ...) \
+       rte_bbdev_log(DEBUG, RTE_STR(__LINE__) ":%s() " fmt, __func__, \
+               ##__VA_ARGS__)
+
 /* Helper macro to check dev_id is valid */
 #define VALID_DEV_OR_RET_ERR(dev, dev_id) do { \
        if (dev == NULL) { \
@@ -198,7 +210,7 @@ rte_bbdev_allocate(const char *name)
                return NULL;
        }
 
-       rte_atomic16_inc(&bbdev->data->process_cnt);
+       __atomic_add_fetch(&bbdev->data->process_cnt, 1, __ATOMIC_RELAXED);
        bbdev->data->dev_id = dev_id;
        bbdev->state = RTE_BBDEV_INITIALIZED;
 
@@ -240,7 +252,8 @@ rte_bbdev_release(struct rte_bbdev *bbdev)
        }
 
        /* clear shared BBDev Data if no process is using the device anymore */
-       if (rte_atomic16_dec_and_test(&bbdev->data->process_cnt))
+       if (__atomic_sub_fetch(&bbdev->data->process_cnt, 1,
+                             __ATOMIC_RELAXED) == 0)
                memset(bbdev->data, 0, sizeof(*bbdev->data));
 
        memset(bbdev, 0, sizeof(*bbdev));
@@ -483,11 +496,20 @@ rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id,
                                        conf->queue_size, queue_id, dev_id);
                        return -EINVAL;
                }
-               if (conf->priority > dev_info.max_queue_priority) {
+               if (conf->op_type == RTE_BBDEV_OP_TURBO_DEC &&
+                       conf->priority > dev_info.max_ul_queue_priority) {
                        rte_bbdev_log(ERR,
-                                       "Priority (%u) of queue %u of bdev %u must be <= %u",
+                                       "Priority (%u) of queue %u of bbdev %u must be <= %u",
                                        conf->priority, queue_id, dev_id,
-                                       dev_info.max_queue_priority);
+                                       dev_info.max_ul_queue_priority);
+                       return -EINVAL;
+               }
+               if (conf->op_type == RTE_BBDEV_OP_TURBO_ENC &&
+                       conf->priority > dev_info.max_dl_queue_priority) {
+                       rte_bbdev_log(ERR,
+                                       "Priority (%u) of queue %u of bbdev %u must be <= %u",
+                                       conf->priority, queue_id, dev_id,
+                                       dev_info.max_dl_queue_priority);
                        return -EINVAL;
                }
        }
@@ -774,7 +796,7 @@ rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info)
        memset(dev_info, 0, sizeof(*dev_info));
        dev_info->dev_name = dev->data->name;
        dev_info->num_queues = dev->data->num_queues;
-       dev_info->bus = rte_bus_find_by_device(dev->device);
+       dev_info->device = dev->device;
        dev_info->socket_id = dev->data->socket_id;
        dev_info->started = dev->data->started;
 
@@ -825,6 +847,12 @@ get_bbdev_op_size(enum rte_bbdev_op_type type)
        case RTE_BBDEV_OP_TURBO_ENC:
                result = sizeof(struct rte_bbdev_enc_op);
                break;
+       case RTE_BBDEV_OP_LDPC_DEC:
+               result = sizeof(struct rte_bbdev_dec_op);
+               break;
+       case RTE_BBDEV_OP_LDPC_ENC:
+               result = sizeof(struct rte_bbdev_enc_op);
+               break;
        default:
                break;
        }
@@ -839,11 +867,12 @@ bbdev_op_init(struct rte_mempool *mempool, void *arg, void *element,
 {
        enum rte_bbdev_op_type type = *(enum rte_bbdev_op_type *)arg;
 
-       if (type == RTE_BBDEV_OP_TURBO_DEC) {
+       if (type == RTE_BBDEV_OP_TURBO_DEC || type == RTE_BBDEV_OP_LDPC_DEC) {
                struct rte_bbdev_dec_op *op = element;
                memset(op, 0, mempool->elt_size);
                op->mempool = mempool;
-       } else if (type == RTE_BBDEV_OP_TURBO_ENC) {
+       } else if (type == RTE_BBDEV_OP_TURBO_ENC ||
+                       type == RTE_BBDEV_OP_LDPC_ENC) {
                struct rte_bbdev_enc_op *op = element;
                memset(op, 0, mempool->elt_size);
                op->mempool = mempool;
@@ -1095,6 +1124,8 @@ rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type)
                "RTE_BBDEV_OP_NONE",
                "RTE_BBDEV_OP_TURBO_DEC",
                "RTE_BBDEV_OP_TURBO_ENC",
+               "RTE_BBDEV_OP_LDPC_DEC",
+               "RTE_BBDEV_OP_LDPC_ENC",
        };
 
        if (op_type < RTE_BBDEV_OP_TYPE_COUNT)
@@ -1103,15 +1134,3 @@ rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type)
        rte_bbdev_log(ERR, "Invalid operation type");
        return NULL;
 }
-
-
-int bbdev_logtype;
-
-RTE_INIT(rte_bbdev_init_log);
-static void
-rte_bbdev_init_log(void)
-{
-       bbdev_logtype = rte_log_register("lib.bbdev");
-       if (bbdev_logtype >= 0)
-               rte_log_set_level(bbdev_logtype, RTE_LOG_NOTICE);
-}