From patchwork Thu Aug 31 14:54:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 28176 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id E01C27D2F; Thu, 31 Aug 2017 16:55:51 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0062.outbound.protection.outlook.com [104.47.36.62]) by dpdk.org (Postfix) with ESMTP id 03B7E7CC6 for ; Thu, 31 Aug 2017 16:55:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=GcgTf4DZYNgDqN/nZmiFRfCIcbpYhQGY06Rp5VbWU9M=; b=Jqj6vafGxbmM+gTNFJcFWMasLNiGaxNX8+b1rzUxBGPp6lAnqHgj3wll+sdn5wTZSutY9U78Vk16cqCJTL41p+V2wDFutmLh3zp8AvYRpMDfsIZkjjpAcY2iloc8mjbNY0fyokaWQh7/AMkyUNozc7xBFi+ppixZjnO9RVhKvcI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerin.JacobKollanukkaran@cavium.com; Received: from jerin.domain.name (171.76.126.71) by SN2PR07MB2526.namprd07.prod.outlook.com (2603:10b6:804:6::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.13.10; Thu, 31 Aug 2017 14:55:44 +0000 From: Jerin Jacob To: dev@dpdk.org Cc: ferruh.yigit@intel.com, santosh.shukla@caviumnetworks.com, Jerin Jacob Date: Thu, 31 Aug 2017 20:24:21 +0530 Message-Id: <20170831145436.5397-12-jerin.jacob@caviumnetworks.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20170831145436.5397-1-jerin.jacob@caviumnetworks.com> References: <20170831145436.5397-1-jerin.jacob@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [171.76.126.71] X-ClientProxiedBy: MA1PR01CA0109.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::25) To SN2PR07MB2526.namprd07.prod.outlook.com (2603:10b6:804:6::26) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e420dc79-ec37-4497-634e-08d4f0805c08 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:SN2PR07MB2526; X-Microsoft-Exchange-Diagnostics: 1; SN2PR07MB2526; 3:75YTn4iHIdcIk6bPfolP1H16w2ss+2aMP/BMxI6LwvVeHXYmb7IZHnU8HWzFicgQbhGw2gJKdaf5GWdX5xHzwXXm9jE5lNCaVjRRkRhGArB1Kb/R1R7nWik6WqMrpctI6XBeUbWctZMsClZw/IOesq2U72WSec8zsSdHx8uEP2pM1yORXcsoHhaGeeOCcjYfbuPtkAdyotVsShRPxT4fekMR8DY5u2fD4SI9cqxOWkwv2UQNY4ZsJbXzHalE4vdV; 25:UyJ+kT4NLOnAdSg86an8IjvTZRVIlvjRk0owhG0PE0UX5nL7YCCiWggXbYnkj45W4ISzqkHfu3+v1Vdp4wWcYOKKzqk8AuvT9kmfOm+7cfV6WQKY4C5MMW4+YzDBjyOm6F55eyAe6tHGSyoA0+cUFHEB/1MrM4XpvqdeEOquUxq/tFpilRGUnv8JnqyYxchkPNa4psXxCKDugzPaHeJNGuujYZNbAeTBENcewNQwrsbFGSF3A4/BCnSsDfcFyxZXf98RZIEZ3OtFhJEymmIJBnIeHUgXozuKIWzHpYMio5+SqZ3ZIOabLhC22yCSPZN6dzAin/04DKbUARlnLSpGJw==; 31:yz7OEJWl5pn6DrCE3/5JQmN21Sv6IqW2n4pft00dhBtlA7eX5SMibTgau9+OOMvXoYMibtZphgN9gttau2XbUiIjPlm3CuKX9Ob3firO7FuFaiCiMFqcX8lWuFM11iDqi/XSMXE7nj02Bjetqpk8zKztrhl5R6Z1S5PHpw/AEioCcEE471nf7XGFpejrNCUxGw7PZpnvap3QMCijCPq1M4PjcAiVwS0lWo/Oup/TcgE= X-MS-TrafficTypeDiagnostic: SN2PR07MB2526: X-Microsoft-Exchange-Diagnostics: 1; SN2PR07MB2526; 20:zpxdM3hEyyw8QPLi4zXPhMuWY5EeVdHDCTCsLC4R3YPu6+Ww5w3nNZFRGpcSjAtlrik+ypo0hf1rGMK5JpEFrw/eP6agLPRZcv4H4eRK3XRQThqnCDJm8jcT+d002zAYTrY1xHTCklGGL8wzZT6Xd4K5/KXr6NYEjFgqQcFvgdR3vVpovEPXWu/sriO5EIAm0BJ2OSnxfVJT3x6FnCgoz1/L3FQFDzlhDIh5cjlvZmfQUIQLypubWlWanU4so5NYg9eCiqmpjIApIuz/KKNLdVUSlGu79dEZFrxQCWAjffEz7qTs3RE5HWa/hkJf0Md9KNuJNyJ5xKcEEq4Z4pTyT81YtIexzb932VPZsUfoHlFZphw2tPEsmojm3adbByMynjK8OzfPTvxjRO3eCjHDmJVCw/QCTHEwnDDa4BtQdxsdLZurq8wydo2fFIUp75nMRNxW3MBVO1b1ytVyiHjHp+yMB+kOrs9R4tohXac/hQI+gs7847VcULomKfqIw71L7LTdUkXi6LzL9WniJuwmf5W6GIAsKQojrboyvQ+9LqOXg0GGnBicYGCaRi+/S6AL/bYlQSpDfFMJryJhg0NWu8vxi2f+myLJtlOe7BDsW4s=; 4:mK2BeBNu52k8K8Bm6xaZvpbz/ciK3VVBhUXsFyrFn4HO1iD17gKWdEku6d2FqUddqgoCItXh+KAoGdbdKxMafMHa4S8zyaNd9w6NeoYxVOddoGIPrNWniSTn/yrAOCL6hsX4ihdnRymat7IZkNaYEfNM3KnHXpKjkEk1vLBRGlaN+Zs0edx4G1/z+uB5FSlotxQ9/ei7HJnX1aqKiJEbMQV9QuV/KmLMiNgcxSm2E5LU2K05qP9J5dbdNigzQgu/ X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(100000703101)(100105400095)(10201501046)(3002001)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123564025)(20161123562025)(20161123560025)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:SN2PR07MB2526; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:SN2PR07MB2526; X-Forefront-PRVS: 04163EF38A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(199003)(189002)(25786009)(1076002)(53936002)(3846002)(6116002)(575784001)(478600001)(110136004)(72206003)(7736002)(6666003)(107886003)(6512007)(305945005)(6506006)(36756003)(6486002)(68736007)(5003940100001)(189998001)(50986999)(42882006)(106356001)(101416001)(76176999)(2950100002)(6916009)(5660300001)(2361001)(33646002)(2351001)(2906002)(4326008)(97736004)(105586002)(48376002)(50466002)(81166006)(66066001)(69596002)(8936002)(47776003)(53416004)(8676002)(50226002)(81156014)(42186005); DIR:OUT; SFP:1101; SCL:1; SRVR:SN2PR07MB2526; H:jerin.domain.name; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN2PR07MB2526; 23:G7JcPD7DEXDmJE+kfzuNjAQ8QICeXaDJWOqsejWfR?= ZFrPJNEDo4MHMQzJYqs4UF82TqGNHN71NAj9wRm/op3quGMhVa7Q7/r8c1uyKXdEFsmp1dyfxOduiuJY41S/bIOUaSLdrQGzSe+nhsiQYQ/o+8EM6KB8aytKObUXuN7Hqq5+AucZ0p2dRyMSDVMWcB9LTV3D2mq6Nw6JqVAegK5MsJQyyP762ehbPkQCgK4uJKyDebr/f+PYcgZ97DSy02VA6HFXaIfAbhjnJOJiFK0nVNX+uJmcvITOr/yhPc/npz576uRT7Ub8lhqYex1MR6LY72R5AkbU81TNU+6ysf3Ef1uQacLdfuB0TQcb55LeFiLE87/9roCafZ2ZQaYUL3kBaB/KwMgfhx47tv3aZSXE3Q5ZB4Twjr0H/iF8jNLKJyl9AYUF6iLJs5m73jlC9PXwxyue3pgzRYL1w8eTzoY7Jzy7dk5P8o9jxB1dDRrFCCtOvP/fIfih3VVQ+ML158PekiKJX7Kp8ydKx3xRRTmSVXndzFZDzOBq7baVN2xUhQqqP3BXPR/1qJMGcn9gFfeDttvLT4HObsk4w8SsAwWvlETp0/rQIdbccxzJE3G4MfGj8sktjTbgP/wVRkvb/bxoTqkxf3wAUUn5ZsAV93KwlWmj4dB4NNeJhx+ceTB5EflgFwt5Xll6ReEjUB1YUn8B98Ou4kPdL7CF/LxKQcsAYsJTkmGZBC+Yy4RJ5xHz7bydcQ8ul9XEM0sOLpJvZGrJ6bSVipq5CVA2jwEGLPax+dw+ESx1HPju6uU8A9GkaubGqaKO0pFi5X2IeddrhDV1KYktXcWe3W6jWzQAeHk1qqOgomfWKyJtHcAK2FgNKoQn8KOb20BqTyICXg7xLRCwt0VG8GjYymw+WlPfPyxYUMYJi9AvY3zP6CmzRyAlrjhIQmQRtpY00LPUBhsq2X8Q8ZEMi2j/W6GcIXPhOO4R/bxj0JK9pzT29UaWa6+OAizuwFtBaIOh0h6fdwoIj7C6Xx8MUd1zMRPWGUHg2q6eMukhez/W5YwgG6Fhb0RHrCIFtEc3oMoQEvLVcM14rgnS2JJdnrEiWwlTH5kVKZD702V3gnsOsEzzOZWZlZeYkSqZrIPix8B1UwvaZAeXZBkguPEWHHHj/+b22/np4p54f4w02KEZlcTKCDlS21+0oU= X-Microsoft-Exchange-Diagnostics: 1; SN2PR07MB2526; 6:MnKRnQo4JjTitvZF11lhd3qGEWE38P5+LcrgCDYfNghanaFtuPLVl58ZK81KvzCK5U4GAsHDi+FCuDoazBrwz7mDT2J5egn0kmA/RC09VxAqNBAUqJ6qqid9UvgpgCkXOLT4gkCi7LcJULqT5UL5UZvx8Lt35pFpjOg1zp3qr5Yo8KEv/QlKojwb7w+ig2rw1dIRD7TFKGe4L0rrUrEnmB0tGQnI+LPQdVPpysmMI1WkN3MY/Um9oLwDZq3/FTNev0Hxq9rqxN41vMaUliUKeo781H4b8QgNgmu6QkbmCydm6rCElZ/R9KJcV+xT2ogogh6SyRJaxRXZ0t4DWO1HuQ==; 5:dGU97e/jUiRMue7zSsYvqD2TugxtGSdcU0oQTL9PUI92wmEWh9fu9KpYMqOqwGe4m2IrXi/j3vhbnwFaxoULSD+fWEjR8Ovsoya9bJVFnYdQPwLSO14pJJcCBLcm/dP9wOz7tLWs54UMwcHX+dd2gw==; 24:gqILQMQc3kGkp65VLctpYjz6CMZEvmdNfnIBFuiKQ4ryLoAErwVx3uAnxkME0bxhp1V3UUp4aQTxOOpO+IghdUr8mhpTrC3N53OioTFoEmc=; 7:cn6CYvmhWz0D1u/0t2ni65fvWzexAwbYCpCVdnxt2kcg+jcnMO5Tr3w/b2IyWDXMSoOF2QNe3Jjms3h8NVxbRXqRJsSRihsYjLizc8i+YELG4hnJRMFzXMH94otwZ8RT9es+F0dSeAbbK7dJpMh7+zkVbUNt3JlPaPiT4xJomd5Azu6RdHVFfYp7hfRqa9WU0vxuBhUd7jLY4JoaBJ/l9duIZqPwPnx5Ipjpn+ITWSw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2017 14:55:44.1616 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN2PR07MB2526 Subject: [dpdk-dev] [PATCH 11/26] net/octeontx: add eth device probe and remove X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" An octeontx ethdev device consists of multiple PKO VF devices, a PKI VF device and multiple SSOVF devices which shared between eventdev. This patch adds a vdev based device called "eth_octeontx" which will create multiple ethernet ports based on "nr_port" or maximum physical ports are available in the system. Signed-off-by: Jerin Jacob Co-authored-by: Santosh Shukla --- drivers/net/octeontx/Makefile | 1 + drivers/net/octeontx/octeontx_ethdev.c | 321 +++++++++++++++++++++++++++++++++ drivers/net/octeontx/octeontx_ethdev.h | 94 ++++++++++ 3 files changed, 416 insertions(+) create mode 100644 drivers/net/octeontx/octeontx_ethdev.c create mode 100644 drivers/net/octeontx/octeontx_ethdev.h diff --git a/drivers/net/octeontx/Makefile b/drivers/net/octeontx/Makefile index 65de34c87..e0eaf059c 100644 --- a/drivers/net/octeontx/Makefile +++ b/drivers/net/octeontx/Makefile @@ -53,6 +53,7 @@ VPATH += $(SRCDIR)/base SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_PMD) += octeontx_pkovf.c SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_PMD) += octeontx_pkivf.c SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_PMD) += octeontx_bgx.c +SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_PMD) += octeontx_ethdev.c LDLIBS += -lrte_eventdev LDLIBS += -lrte_pmd_octeontx_ssovf diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c new file mode 100644 index 000000000..621035233 --- /dev/null +++ b/drivers/net/octeontx/octeontx_ethdev.c @@ -0,0 +1,321 @@ +/* + * BSD LICENSE + * + * Copyright (C) Cavium Inc. 2017. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Cavium networks nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "octeontx_ethdev.h" +#include "octeontx_logs.h" + +struct octeontx_vdev_init_params { + uint8_t nr_port; +}; + +/* Parse integer from integer argument */ +static int +parse_integer_arg(const char *key __rte_unused, + const char *value, void *extra_args) +{ + int *i = (int *)extra_args; + + *i = atoi(value); + if (*i < 0) { + octeontx_log_err("argument has to be positive."); + return -1; + } + + return 0; +} + +static int +octeontx_parse_vdev_init_params(struct octeontx_vdev_init_params *params, + struct rte_vdev_device *dev) +{ + struct rte_kvargs *kvlist = NULL; + int ret = 0; + + static const char * const octeontx_vdev_valid_params[] = { + OCTEONTX_VDEV_NR_PORT_ARG, + NULL + }; + + const char *input_args = rte_vdev_device_args(dev); + if (params == NULL) + return -EINVAL; + + + if (input_args) { + kvlist = rte_kvargs_parse(input_args, + octeontx_vdev_valid_params); + if (kvlist == NULL) + return -1; + + ret = rte_kvargs_process(kvlist, + OCTEONTX_VDEV_NR_PORT_ARG, + &parse_integer_arg, + ¶ms->nr_port); + if (ret < 0) + goto free_kvlist; + } + +free_kvlist: + rte_kvargs_free(kvlist); + return ret; +} + +static inline void +devconf_set_default_sane_values(struct rte_event_dev_config *dev_conf, + struct rte_event_dev_info *info) +{ + memset(dev_conf, 0, sizeof(struct rte_event_dev_config)); + dev_conf->dequeue_timeout_ns = info->min_dequeue_timeout_ns; + + dev_conf->nb_event_ports = info->max_event_ports; + dev_conf->nb_event_queues = info->max_event_queues; + + dev_conf->nb_event_queue_flows = info->max_event_queue_flows; + dev_conf->nb_event_port_dequeue_depth = + info->max_event_port_dequeue_depth; + dev_conf->nb_event_port_enqueue_depth = + info->max_event_port_enqueue_depth; + dev_conf->nb_event_port_enqueue_depth = + info->max_event_port_enqueue_depth; + dev_conf->nb_events_limit = + info->max_num_events; +} + +/* Create Ethdev interface per BGX LMAC ports */ +static int +octeontx_create(struct rte_vdev_device *dev, int port, uint8_t evdev, + int socket_id) +{ + RTE_SET_USED(dev); + RTE_SET_USED(port); + RTE_SET_USED(evdev); + RTE_SET_USED(socket_id); + + return -ENODEV; +} + +/* Un initialize octeontx device */ +static int +octeontx_remove(struct rte_vdev_device *dev) +{ + char octtx_name[OCTEONTX_MAX_NAME_LEN]; + struct rte_eth_dev *eth_dev = NULL; + struct octeontx_nic *nic = NULL; + int i; + + if (dev == NULL) + return -EINVAL; + + for (i = 0; i < OCTEONTX_VDEV_DEFAULT_MAX_NR_PORT; i++) { + sprintf(octtx_name, "eth_octeontx_%d", i); + + /* reserve an ethdev entry */ + eth_dev = rte_eth_dev_allocated(octtx_name); + if (eth_dev == NULL) + return -ENODEV; + + nic = octeontx_pmd_priv(eth_dev); + rte_event_dev_stop(nic->evdev); + PMD_INIT_LOG(INFO, "Closing octeontx device %s", octtx_name); + + rte_free(eth_dev->data->mac_addrs); + rte_free(eth_dev->data->dev_private); + rte_free(eth_dev->data); + rte_eth_dev_release_port(eth_dev); + rte_event_dev_close(nic->evdev); + } + + /* Free FC resource */ + octeontx_pko_fc_free(); + + return 0; +} + +/* Initialize octeontx device */ +static int +octeontx_probe(struct rte_vdev_device *dev) +{ + const char *dev_name; + static int probe_once; + uint8_t socket_id, qlist; + int tx_vfcnt, port_id, evdev, qnum, pnum, res, i; + struct rte_event_dev_config dev_conf; + const char *eventdev_name = "event_octeontx"; + struct rte_event_dev_info info; + + struct octeontx_vdev_init_params init_params = { + OCTEONTX_VDEV_DEFAULT_MAX_NR_PORT + }; + + dev_name = rte_vdev_device_name(dev); + res = octeontx_parse_vdev_init_params(&init_params, dev); + if (res < 0) + return -EINVAL; + + if (init_params.nr_port > OCTEONTX_VDEV_DEFAULT_MAX_NR_PORT) { + octeontx_log_err("nr_port (%d) > max (%d)", init_params.nr_port, + OCTEONTX_VDEV_DEFAULT_MAX_NR_PORT); + return -ENOTSUP; + } + + PMD_INIT_LOG(DEBUG, "initializing %s pmd", dev_name); + + socket_id = rte_socket_id(); + + tx_vfcnt = octeontx_pko_vf_count(); + + if (tx_vfcnt < init_params.nr_port) { + octeontx_log_err("not enough PKO (%d) for port number (%d)", + tx_vfcnt, init_params.nr_port); + return -EINVAL; + } + evdev = rte_event_dev_get_dev_id(eventdev_name); + if (evdev < 0) { + octeontx_log_err("eventdev %s not found", eventdev_name); + return -ENODEV; + } + + res = rte_event_dev_info_get(evdev, &info); + if (res < 0) { + octeontx_log_err("failed to eventdev info %d", res); + return -EINVAL; + } + + PMD_INIT_LOG(DEBUG, "max_queue %d max_port %d", + info.max_event_queues, info.max_event_ports); + + if (octeontx_pko_init_fc(tx_vfcnt)) + return -ENOMEM; + + devconf_set_default_sane_values(&dev_conf, &info); + res = rte_event_dev_configure(evdev, &dev_conf); + if (res < 0) + goto parse_error; + + qnum = rte_event_queue_count(evdev); + pnum = rte_event_port_count(evdev); + if (pnum < qnum) { + octeontx_log_err("too few event ports (%d) for event_q(%d)", + pnum, qnum); + res = -EINVAL; + goto parse_error; + } + if (pnum > qnum) { + /* + * We don't poll on event ports + * that do not have any queues assigned. + */ + pnum = qnum; + PMD_INIT_LOG(INFO, + "reducing number of active event ports to %d", pnum); + } + for (i = 0; i < qnum; i++) { + res = rte_event_queue_setup(evdev, i, NULL); + if (res < 0) { + octeontx_log_err("failed to setup event_q(%d): res %d", + i, res); + goto parse_error; + } + } + + for (i = 0; i < pnum; i++) { + res = rte_event_port_setup(evdev, i, NULL); + if (res < 0) { + res = -ENODEV; + octeontx_log_err("failed to setup ev port(%d) res=%d", + i, res); + goto parse_error; + } + /* Link one queue to one event port */ + qlist = i; + res = rte_event_port_link(evdev, i, &qlist, NULL, 1); + if (res < 0) { + res = -ENODEV; + octeontx_log_err("failed to link port (%d): res=%d", + i, res); + goto parse_error; + } + } + + /* Create ethdev interface */ + for (i = 0; i < init_params.nr_port; i++) { + port_id = octeontx_create(dev, i, evdev, socket_id); + if (port_id < 0) { + octeontx_log_err("failed to create device %s", + dev_name); + res = -ENODEV; + goto parse_error; + } + + PMD_INIT_LOG(INFO, "created ethdev %s for port %d", dev_name, + port_id); + } + + if (probe_once) { + octeontx_log_err("interface %s not supported", dev_name); + octeontx_remove(dev); + res = -ENOTSUP; + goto parse_error; + } + probe_once = 1; + + return 0; + +parse_error: + octeontx_pko_fc_free(); + return res; +} + +static struct rte_vdev_driver octeontx_pmd_drv = { + .probe = octeontx_probe, + .remove = octeontx_remove, +}; + +RTE_PMD_REGISTER_VDEV(OCTEONTX_PMD, octeontx_pmd_drv); +RTE_PMD_REGISTER_ALIAS(OCTEONTX_PMD, eth_octeontx); +RTE_PMD_REGISTER_PARAM_STRING(OCTEONTX_PMD, "nr_port= "); diff --git a/drivers/net/octeontx/octeontx_ethdev.h b/drivers/net/octeontx/octeontx_ethdev.h new file mode 100644 index 000000000..4c880f187 --- /dev/null +++ b/drivers/net/octeontx/octeontx_ethdev.h @@ -0,0 +1,94 @@ +/* + * BSD LICENSE + * + * Copyright (C) Cavium Inc. 2017. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Cavium networks nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef __OCTEONTX_ETHDEV_H__ +#define __OCTEONTX_ETHDEV_H__ + +#include + +#include +#include +#include +#include +#include + +#include + +#include "base/octeontx_bgx.h" +#include "base/octeontx_pki_var.h" +#include "base/octeontx_pkivf.h" +#include "base/octeontx_pkovf.h" +#include "base/octeontx_io.h" + +#define OCTEONTX_VDEV_DEFAULT_MAX_NR_PORT 12 +#define OCTEONTX_VDEV_NR_PORT_ARG ("nr_port") +#define OCTEONTX_MAX_NAME_LEN 32 + +static inline struct octeontx_nic * +octeontx_pmd_priv(struct rte_eth_dev *dev) +{ + return dev->data->dev_private; +} + +/* Octeontx ethdev nic */ +struct octeontx_nic { + struct rte_eth_dev *dev; + int node; + int port_id; + int port_ena; + int base_ichan; + int num_ichans; + int base_ochan; + int num_ochans; + uint8_t evdev; + uint8_t bpen; + uint8_t fcs_strip; + uint8_t bcast_mode; + uint8_t mcast_mode; + uint16_t num_tx_queues; + uint64_t hwcap; + uint8_t link_up; + uint8_t duplex; + uint8_t speed; + uint16_t mtu; + uint8_t mac_addr[ETHER_ADDR_LEN]; + /* Rx port parameters */ + struct { + bool classifier_enable; + bool hash_enable; + bool initialized; + } pki; + + uint16_t ev_queues; + uint16_t ev_ports; +} __rte_cache_aligned; + +#endif /* __OCTEONTX_ETHDEV_H__ */