From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3D18FA04A7; Sun, 30 Jan 2022 19:00:05 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id ABD4941165; Sun, 30 Jan 2022 18:59:58 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 3D76D4115B for ; Sun, 30 Jan 2022 18:59:57 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 20UHfKNG029524; Sun, 30 Jan 2022 09:59:54 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=a2q1VjaDmYBUb613dNBegAPQdbk1fZEeyz31uSJb/iA=; b=X/xPClx//01Z1q1L6QsADs4kIpKFnIkosE55nvbI7indBlUH1zzh/kG+V5mOGFGVjvPe /OemHlpoaUMvPqUs+kWEKWAAu3vyypJPOWASswt1k92cNsd63yQktb72XiqiUt5JerPL XTdbp4vQ0bC+nlCoD0n8NdlI8gwtteLm3IPQJtNwTHNcHFH06GElALqYtxBdMNOAYrpi vKmaiYCqVNJWOZ390wZyuWa0q+uSUznXYZNWT82V6/3yta/jmrIFATptaDX1/tjdhLoU pQE2mO6snJllyJAFNuzol/FVLl+yiWqcrklag3ttOD0INmxsqSyuUIPFsENYOL5exSL6 XA== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3dw5yqjfwb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Sun, 30 Jan 2022 09:59:53 -0800 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sun, 30 Jan 2022 09:59:51 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Sun, 30 Jan 2022 09:59:51 -0800 Received: from localhost.localdomain (unknown [10.28.48.55]) by maili.marvell.com (Postfix) with ESMTP id 0C3113F70A8; Sun, 30 Jan 2022 09:59:47 -0800 (PST) From: Akhil Goyal To: CC: , , , , , , , , , , Akhil Goyal Subject: [PATCH v3 2/4] ethdev: add dev op to set/get IP reassembly configuration Date: Sun, 30 Jan 2022 23:29:33 +0530 Message-ID: <20220130175935.1947730-3-gakhil@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220130175935.1947730-1-gakhil@marvell.com> References: <20220120162627.4155695-1-gakhil@marvell.com> <20220130175935.1947730-1-gakhil@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-ORIG-GUID: KQXEGoYne0qLAlOBhUjxIu4CN_KYN9rQ X-Proofpoint-GUID: KQXEGoYne0qLAlOBhUjxIu4CN_KYN9rQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.816,Hydra:6.0.425,FMLib:17.11.62.513 definitions=2022-01-30_05,2022-01-28_01,2021-12-02_01 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 A new Ethernet device op is added to give application control over the IP reassembly configuration. This operation is an optional call from the application, default/max values are set by PMD and exposed via rte_eth_dev_info. Application should always first retrieve the capabilities from rte_eth_dev_info and then set the fields accordingly. The set API should be called before the starting the device. User can get the currently set values using the get API. Signed-off-by: Akhil Goyal --- doc/guides/nics/features.rst | 1 + lib/ethdev/ethdev_driver.h | 37 +++++++++++++++++ lib/ethdev/rte_ethdev.c | 80 ++++++++++++++++++++++++++++++++++++ lib/ethdev/rte_ethdev.h | 51 +++++++++++++++++++++++ lib/ethdev/version.map | 4 ++ 5 files changed, 173 insertions(+) diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst index b45bce4a78..2a3cf09066 100644 --- a/doc/guides/nics/features.rst +++ b/doc/guides/nics/features.rst @@ -611,6 +611,7 @@ Supports IP reassembly in hardware. * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY``. * **[provides] rte_eth_dev_info**: ``reass_capa``. +* **[provides] eth_dev_ops**: ``ip_reassembly_conf_get:ip_reassembly_conf_set``. .. _nic_features_shared_rx_queue: diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h index d95605a355..a310001648 100644 --- a/lib/ethdev/ethdev_driver.h +++ b/lib/ethdev/ethdev_driver.h @@ -990,6 +990,38 @@ typedef int (*eth_representor_info_get_t)(struct rte_eth_dev *dev, typedef int (*eth_rx_metadata_negotiate_t)(struct rte_eth_dev *dev, uint64_t *features); +/** + * @internal + * Get IP reassembly offload configuration parameters set in PMD. + * + * @param dev + * Port (ethdev) handle + * + * @param[out] conf + * Configuration parameters for IP reassembly. + * + * @return + * Negative errno value on error, zero otherwise + */ +typedef int (*eth_ip_reassembly_conf_get_t)(struct rte_eth_dev *dev, + struct rte_eth_ip_reass_params *conf); + +/** + * @internal + * Set configuration parameters for enabling IP reassembly offload in hardware. + * + * @param dev + * Port (ethdev) handle + * + * @param[in] conf + * Configuration parameters for IP reassembly. + * + * @return + * Negative errno value on error, zero otherwise + */ +typedef int (*eth_ip_reassembly_conf_set_t)(struct rte_eth_dev *dev, + struct rte_eth_ip_reass_params *conf); + /** * @internal A structure containing the functions exported by an Ethernet driver. */ @@ -1186,6 +1218,11 @@ struct eth_dev_ops { * kinds of metadata to the PMD */ eth_rx_metadata_negotiate_t rx_metadata_negotiate; + + /** Get IP reassembly configuration */ + eth_ip_reassembly_conf_get_t ip_reassembly_conf_get; + /** Set IP reassembly configuration */ + eth_ip_reassembly_conf_set_t ip_reassembly_conf_set; }; /** diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index d9a03f12f9..6e9a8cf33b 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c @@ -6473,6 +6473,86 @@ rte_eth_rx_metadata_negotiate(uint16_t port_id, uint64_t *features) (*dev->dev_ops->rx_metadata_negotiate)(dev, features)); } +int +rte_eth_ip_reassembly_conf_get(uint16_t port_id, + struct rte_eth_ip_reass_params *conf) +{ + struct rte_eth_dev *dev; + + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); + dev = &rte_eth_devices[port_id]; + + if (dev->data->dev_configured == 0) { + RTE_ETHDEV_LOG(ERR, + "Device with port_id=%"PRIu16" is not configured.\n", + port_id); + return -EINVAL; + } + + if ((dev->data->dev_conf.rxmode.offloads & + RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY) == 0) { + RTE_ETHDEV_LOG(ERR, + "The port (ID=%"PRIu16") is not configured for IP reassembly\n", + port_id); + return -EINVAL; + } + + if (conf == NULL) { + RTE_ETHDEV_LOG(ERR, "Cannot get reassembly info to NULL"); + return -EINVAL; + } + + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->ip_reassembly_conf_get, + -ENOTSUP); + memset(conf, 0, sizeof(struct rte_eth_ip_reass_params)); + return eth_err(port_id, + (*dev->dev_ops->ip_reassembly_conf_get)(dev, conf)); +} + +int +rte_eth_ip_reassembly_conf_set(uint16_t port_id, + struct rte_eth_ip_reass_params *conf) +{ + struct rte_eth_dev *dev; + + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); + dev = &rte_eth_devices[port_id]; + + if (dev->data->dev_configured == 0) { + RTE_ETHDEV_LOG(ERR, + "Device with port_id=%"PRIu16" is not configured.\n", + port_id); + return -EINVAL; + } + + if (dev->data->dev_started != 0) { + RTE_ETHDEV_LOG(ERR, + "Device with port_id=%"PRIu16" started,\n" + "cannot configure IP reassembly params.\n", + port_id); + return -EINVAL; + } + + if ((dev->data->dev_conf.rxmode.offloads & + RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY) == 0) { + RTE_ETHDEV_LOG(ERR, + "The port (ID=%"PRIu16") is not configured for IP reassembly\n", + port_id); + return -EINVAL; + } + + if (conf == NULL) { + RTE_ETHDEV_LOG(ERR, + "Invalid IP reassembly configuration (NULL)\n"); + return -EINVAL; + } + + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->ip_reassembly_conf_set, + -ENOTSUP); + return eth_err(port_id, + (*dev->dev_ops->ip_reassembly_conf_set)(dev, conf)); +} + RTE_LOG_REGISTER_DEFAULT(rte_eth_dev_logtype, INFO); RTE_INIT(ethdev_init_telemetry) diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h index cfaf7a5afc..e3532591f4 100644 --- a/lib/ethdev/rte_ethdev.h +++ b/lib/ethdev/rte_ethdev.h @@ -5214,6 +5214,57 @@ int rte_eth_representor_info_get(uint16_t port_id, __rte_experimental int rte_eth_rx_metadata_negotiate(uint16_t port_id, uint64_t *features); +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice + * + * Get IP reassembly configuration parameters currently set in PMD, + * if device Rx offload flag (RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY) is + * enabled and the PMD supports IP reassembly offload. + * + * @param port_id + * The port identifier of the device. + * @param conf + * A pointer to rte_eth_ip_reass_params structure. + * @return + * - (-ENOTSUP) if offload configuration is not supported by device. + * - (-EINVAL) if offload is not enabled in rte_eth_conf. + * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. + * - (0) on success. + */ +__rte_experimental +int rte_eth_ip_reassembly_conf_get(uint16_t port_id, + struct rte_eth_ip_reass_params *conf); + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice + * + * Set IP reassembly configuration parameters if device Rx offload + * flag (RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY) is enabled and the PMD + * supports IP reassembly offload. User should first check the + * reass_capa in rte_eth_dev_info before setting the configuration. + * The values of configuration parameters must not exceed the device + * capabilities. The use of this API is optional and if called, it + * should be called before rte_eth_dev_start(). + * + * @param port_id + * The port identifier of the device. + * @param conf + * A pointer to rte_eth_ip_reass_params structure. + * @return + * - (-ENOTSUP) if offload configuration is not supported by device. + * - (-EINVAL) if offload is not enabled in rte_eth_conf. + * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. + * - (0) on success. + */ +__rte_experimental +int rte_eth_ip_reassembly_conf_set(uint16_t port_id, + struct rte_eth_ip_reass_params *conf); + + #include /** diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map index c2fb0669a4..ad829dd47e 100644 --- a/lib/ethdev/version.map +++ b/lib/ethdev/version.map @@ -256,6 +256,10 @@ EXPERIMENTAL { rte_flow_flex_item_create; rte_flow_flex_item_release; rte_flow_pick_transfer_proxy; + + #added in 22.03 + rte_eth_ip_reassembly_conf_get; + rte_eth_ip_reassembly_conf_set; }; INTERNAL { -- 2.25.1