From patchwork Wed Oct 26 19:46:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Miller X-Patchwork-Id: 119178 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A5185A04FD; Wed, 26 Oct 2022 21:47:38 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 65CAF42BC3; Wed, 26 Oct 2022 21:46:50 +0200 (CEST) Received: from mail-io1-f49.google.com (mail-io1-f49.google.com [209.85.166.49]) by mails.dpdk.org (Postfix) with ESMTP id A81DD42BAF for ; Wed, 26 Oct 2022 21:46:44 +0200 (CEST) Received: by mail-io1-f49.google.com with SMTP id l127so14455242iof.12 for ; Wed, 26 Oct 2022 12:46:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=atomicrules-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LnVjMq5w4uF+BGPTL0pxH6FUU5464U2rFvFQFELIytU=; b=3hBqfAlexHoKwRu+sycovaL/cBFTs4VfN2nadsUJLoGOgM3d8iFvNcuVYLKL6xvjgJ AmcCX3PPUMemolTe6OH3xLhKrq6OMablTgF5yomLaba0PLKM3X40AocAVsYxYWM3nDdQ NRIGr3DkkmJKEQCumpM953MhMhYC6CNPWcQ4UVR4Akyv5dSXZxtYaR4cK0xWMETYG46T HSf0Ek02yMGFuZsX60mRft+X+YTzcZapAIakELZsgcH75fatAEPvmHxcYLCdCKKQhudL hr0vqQ9xA+QesMEwPwadPc+6cLx9abHXELplBjSfTXwdrK2p7qnymr5u7+xKvqAcGCqG 9Rng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LnVjMq5w4uF+BGPTL0pxH6FUU5464U2rFvFQFELIytU=; b=a11aoZxikT6o20rw0VXPzSzRO6DyHyEjP2RJNJ/MJs/66rXkjAfHiHyEyYz70fe8I1 A7gIeKw8QcWs4vk5lLyyEx9l2MZULnZFVS2AKL0WIBU3oGR75yqyFJiDsfZm1Il7peDi UjhfxvrhTjUWvlIT3h6JuIG0gmmp7woKzEZDZS+nXx5s73E5ZdlQzPFb5EMREXd0nOWK nfl2ZJ835DejGwNKUOiwGKLHLjTK8xckz+wl9E9rAQe1+QkuSppgPiXa4bfgEwMzxE98 x5XoWacZQNo9IRkaFMAGVb3NQN1Tz/cedtotJ8V3lkhMcLL8fzGun5Pjzas/OCyBx2hp lMcA== X-Gm-Message-State: ACrzQf03NcNGlMY+Ip+V3nazyxM853NUkMLHiZBAmtLgqfUg6f9V4Mjt e1pEgyiWiAliCtMD9hrkuY1/mxQzsIjvKA== X-Google-Smtp-Source: AMsMyM75vnn9jMWEwVZH2q0wqCrXg290hHDDiKxcrRKB6BGv09XUoODWSJdsIMfEEawUTOd7XmDfBA== X-Received: by 2002:a05:6638:2392:b0:363:de4d:d135 with SMTP id q18-20020a056638239200b00363de4dd135mr30610148jat.131.1666813604066; Wed, 26 Oct 2022 12:46:44 -0700 (PDT) Received: from john-System-Product-Name.tds (h64-35-205-155.cntcnh.broadband.dynamic.tds.net. [64.35.205.155]) by smtp.googlemail.com with ESMTPSA id m1-20020a056e020de100b002faecf63c48sm2336169ilj.79.2022.10.26.12.46.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Oct 2022 12:46:43 -0700 (PDT) From: John Miller To: nicolas.chautru@intel.com Cc: dev@dpdk.org, ed.czeck@atomicrules.com, shepard.siegel@atomicrules.com, John Miller Subject: [PATCH 12/14] baseband/ark: introduce ark baseband driver common functions Date: Wed, 26 Oct 2022 15:46:11 -0400 Message-Id: <20221026194613.1008232-12-john.miller@atomicrules.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221026194613.1008232-1-john.miller@atomicrules.com> References: <20221026194613.1008232-1-john.miller@atomicrules.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This patch introduces the Arkville baseband device driver common functions. Signed-off-by: John Miller --- 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 + +#include +#include + +#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