This patch introduces the Arkville baseband device driver common functions.

Signed-off-by: John Miller <john.mil...@atomicrules.com>
---
 drivers/baseband/ark/ark_bbdev_common.c | 109 ++++++++++++++++++++++++
 drivers/baseband/ark/ark_bbdev_common.h | 100 ++++++++++++++++++++++
 2 files changed, 209 insertions(+)
 create mode 100644 drivers/baseband/ark/ark_bbdev_common.c
 create mode 100644 drivers/baseband/ark/ark_bbdev_common.h

diff --git a/drivers/baseband/ark/ark_bbdev_common.c 
b/drivers/baseband/ark/ark_bbdev_common.c
new file mode 100644
index 0000000000..b980dd7159
--- /dev/null
+++ b/drivers/baseband/ark/ark_bbdev_common.c
@@ -0,0 +1,109 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2016-2021 Atomic Rules LLC
+ */
+
+#include <string.h>
+
+#include <rte_kvargs.h>
+#include <rte_log.h>
+
+#include "ark_bbdev_common.h"
+
+int ark_bbdev_logtype;
+RTE_LOG_REGISTER_DEFAULT(ark_bbdev_logtype, DEBUG);
+
+static const char * const ark_bbdev_valid_params[] = {
+       ARK_BBDEV_PKTDIR_ARG,
+       ARK_BBDEV_PKTGEN_ARG,
+       ARK_BBDEV_PKTCHKR_ARG,
+       NULL
+};
+
+static inline int
+process_pktdir_arg(const char *key, const char *value,
+                  void *extra_args)
+{
+       uint32_t *u32 = extra_args;
+       ARK_BBDEV_LOG(DEBUG, "key = %s, value = %s", key, value);
+
+       *u32 = strtol(value, NULL, 0);
+       ARK_BBDEV_LOG(DEBUG, "pkt_dir_v = 0x%x", *u32);
+       return 0;
+}
+
+static inline int
+process_file_args(const char *key, const char *value, void *extra_args)
+{
+       char *args = (char *)extra_args;
+       ARK_BBDEV_LOG(DEBUG, "key = %s, value = %s", key, value);
+
+       /* Open the configuration file */
+       FILE *file = fopen(value, "r");
+       char line[ARK_MAX_ARG_LEN];
+       int  size = 0;
+       int first = 1;
+
+       if (file == NULL) {
+               ARK_BBDEV_LOG(ERR, "Unable to open config file %s",
+                             value);
+               return -1;
+       }
+
+       while (fgets(line, sizeof(line), file)) {
+               size += strlen(line);
+               if (size >= ARK_MAX_ARG_LEN) {
+                       ARK_BBDEV_LOG(ERR, "Unable to parse file %s args, "
+                                     "parameter list is too long", value);
+                       fclose(file);
+                       return -1;
+               }
+               if (first) {
+                       strncpy(args, line, ARK_MAX_ARG_LEN);
+                       first = 0;
+               } else {
+                       strncat(args, line, ARK_MAX_ARG_LEN);
+               }
+       }
+       ARK_BBDEV_LOG(DEBUG, "file = %s", args);
+       fclose(file);
+       return 0;
+}
+
+
+/* Parse parameters used to create device */
+int
+parse_ark_bbdev_params(const char *input_args,
+                      struct ark_bbdevice *ark_bb)
+{
+       struct rte_kvargs *kvlist = NULL;
+       int ret = 0;
+
+       if (ark_bb == NULL)
+               return -EINVAL;
+       if (input_args == NULL)
+               return ret;
+
+       kvlist = rte_kvargs_parse(input_args, ark_bbdev_valid_params);
+       if (kvlist == NULL)
+               return -EFAULT;
+
+       ret = rte_kvargs_process(kvlist, ARK_BBDEV_PKTDIR_ARG,
+                                 &process_pktdir_arg, &ark_bb->pkt_dir_v);
+       if (ret < 0)
+               goto exit;
+
+       ret = rte_kvargs_process(kvlist, ARK_BBDEV_PKTGEN_ARG,
+                                &process_file_args, &ark_bb->pkt_gen_args);
+       if (ret < 0)
+               goto exit;
+
+       ret = rte_kvargs_process(kvlist, ARK_BBDEV_PKTCHKR_ARG,
+                                &process_file_args, &ark_bb->pkt_chkr_args);
+       if (ret < 0)
+               goto exit;
+
+ exit:
+       if (kvlist)
+               rte_kvargs_free(kvlist);
+       return ret;
+}
diff --git a/drivers/baseband/ark/ark_bbdev_common.h 
b/drivers/baseband/ark/ark_bbdev_common.h
new file mode 100644
index 0000000000..9240a11669
--- /dev/null
+++ b/drivers/baseband/ark/ark_bbdev_common.h
@@ -0,0 +1,100 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2016-2021 Atomic Rules LLC
+ */
+
+#ifndef _ARK_BBDEV_COMMON_H_
+#define _ARK_BBDEV_COMMON_H_
+
+#include "ark_pktchkr.h"
+#include "ark_pktdir.h"
+#include "ark_pktgen.h"
+#include "ark_bbext.h"
+
+#define ARK_MAX_ARG_LEN 256
+
+/* Acceptable params for ark BBDEV devices */
+/*
+ * The packet generator is a functional block used to generate packet
+ * patterns for testing.  It is not intended for nominal use.
+ */
+#define ARK_BBDEV_PKTGEN_ARG "Pkt_gen"
+
+/*
+ * The packet checker is a functional block used to verify packet
+ * patterns for testing.  It is not intended for nominal use.
+ */
+#define ARK_BBDEV_PKTCHKR_ARG "Pkt_chkr"
+
+/*
+ * The packet director is used to select the internal ingress and
+ * egress packets paths during testing.  It is not intended for
+ * nominal use.
+ */
+#define ARK_BBDEV_PKTDIR_ARG "Pkt_dir"
+
+
+#define def_ptr(type, name) \
+       union type {               \
+               uint64_t *t64;     \
+               uint32_t *t32;     \
+               uint16_t *t16;     \
+               uint8_t  *t8;      \
+               void     *v;       \
+       } name
+
+/*
+ * Structure to store private data for each PF/VF instance.
+ */
+struct ark_bbdevice {
+       /* Our Bar 0 */
+       uint8_t *bar0;
+
+       /* Application Bar needed for extensions */
+       uint8_t *a_bar;
+
+       /* rte baseband device */
+       struct rte_bbdev *bbdev;
+
+       /* Arkville hardware block offsets */
+       def_ptr(sys_ctrl, sysctrl);
+       def_ptr(pkt_gen, pktgen);
+       def_ptr(mpu_rx, mpurx);
+       def_ptr(UDM, udm);
+       def_ptr(mpu_tx, mputx);
+       def_ptr(DDM, ddm);
+       def_ptr(pkt_dir, pktdir);
+       def_ptr(pkt_chkr, pktchkr);
+       struct ark_rqpace_t *rqpacing;
+
+       /* Pointers to packet generator and checker */
+       int start_pg;
+       ark_pkt_gen_t pg;
+       ark_pkt_chkr_t pc;
+       ark_pkt_dir_t pd;
+
+       /* Packet generator/checker args */
+       char pkt_gen_args[ARK_MAX_ARG_LEN];
+       char pkt_chkr_args[ARK_MAX_ARG_LEN];
+       uint32_t pkt_dir_v;
+
+       int started;
+       unsigned int max_nb_queues;  /**< Max number of queues */
+
+       void *d_handle;
+       struct arkbb_user_ext user_ext;
+       void *user_data;
+
+};
+
+
+/* Log message for baseband PMD */
+extern int ark_bbdev_logtype;
+
+/* Helper macro for logging */
+#define ARK_BBDEV_LOG(level, fmt, ...) \
+       rte_log(RTE_LOG_ ## level, ark_bbdev_logtype, \
+               "ARK_BBD: " fmt "\n", ##__VA_ARGS__)
+
+int parse_ark_bbdev_params(const char *argv, struct ark_bbdevice *dev);
+
+#endif
-- 
2.25.1

Reply via email to