From patchwork Tue Dec 6 03:52:16 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 17688 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 4E4DA5582; Tue, 6 Dec 2016 04:53:33 +0100 (CET) Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0064.outbound.protection.outlook.com [104.47.33.64]) by dpdk.org (Postfix) with ESMTP id 7D5572BFF for ; Tue, 6 Dec 2016 04:52:44 +0100 (CET) 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=1834majzNbL/N7/soKvzss7qE7igNxCbVFQ48a1PMNE=; b=eEbXe0zCYaCJVrcdhNrJBM3COGhC3nSA8eEz+Vk38X01cCYYIvgrpLFIeoVGhC8RfsXxyUM8stKwRJuoENFZ6QClFIe9KWAQg4/sRYW0kSJE1G58fRLZamioBk458/2K5xmaU3O4c2yK9+G7tDb5UySzJgiT9ucWac2xN76rgdc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerin.Jacob@cavium.com; Received: from localhost.caveonetworks.com (50.233.148.156) by BY1PR0701MB1723.namprd07.prod.outlook.com (10.162.111.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.693.12; Tue, 6 Dec 2016 03:52:41 +0000 From: Jerin Jacob To: CC: , , , , , Jerin Jacob Date: Tue, 6 Dec 2016 09:22:16 +0530 Message-ID: <1480996340-29871-3-git-send-email-jerin.jacob@caviumnetworks.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1480996340-29871-1-git-send-email-jerin.jacob@caviumnetworks.com> References: <1479447902-3700-2-git-send-email-jerin.jacob@caviumnetworks.com> <1480996340-29871-1-git-send-email-jerin.jacob@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: BLUPR13CA0014.namprd13.prod.outlook.com (10.160.191.24) To BY1PR0701MB1723.namprd07.prod.outlook.com (10.162.111.142) X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1723; 2:SAsWAlh145Tmn4RM+pa0OFNmQP64UCnLj1r2qpgHtfeI7ReDQA4yKGaQ+kPY6ayj0ArlyDgUJawz4v4rfLgqG1jGfYi3O9Xk0aO+T5fEQu6yKU8k7s8QUJm28+fT+bY9uOvAN1MOOtDTU0h9123KdyATQtnawbJ8GcZVyHHztUQ=; 3:opwM3lyVtFcm7uXNvZ0XS5Y61vbqsFWklyPjI01k8/tUTeK4MDtdnGWLsSDgC0RIzGXlQwtY45AzdDdBk6a7B7c8ajE/zNGfklsyVoqEYEeSbOFZ+1oZ5Ev4DBFNivzq/7m64YFscgtJlHiXIliCLtC0oeiPDOQfxwdqYdlkXNk=; 25:3lOWTG3RaXcm0qBEZPsywgokcAcrkx7rytXfj/fr/d5weQTaV+2piUPWzYy+1HZrJP1C77164U5zGY0oZ2h66hFfEBAEfHW6M9cJAPqi2pM2BB97mCBVGs3V10TFAw5IGFAvAtQkkCDkGdZA014oLsBp9TbGcS4aW7U+Lu7FIXy7Fr/YBKNQ89u/QbZxHkhaSS+3L37GDpnZHAYhkV095dKrp0YN567V7yd9K4zUlaB35eWAjkRatVNii0MIeokrOMkdXs7GmNRrBH7anpAjVc6sBZu5aWtPuA4Mk6TqBJPYEWGwOCvaM7IZ7+3AW+oljzpEQkVbKKVMf4tiatSETyGozpLDDWAVBK6ZOZgSOMOD5bnOIJV7eZ2aljCJxvBSO+ye4xQe6DkreqwwOQXRyjoDZX3uZ8tabWH1COH3SbMn4etfrB1KMDhPSI4GWWwKfTDGxidOHxM7GjOwR+kkMA== X-MS-Office365-Filtering-Correlation-Id: 039e3866-a33a-4725-81b4-08d41d8b54af X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BY1PR0701MB1723; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1723; 31:nzyLfVsGoYMwpXtQzp+AwLYhqdm4lwhdIK+WVsipQpg+knk8AGLjDiY0ZjsTL79Xbim12M8yGuzZsqN65pHt0GS3KeRmS44bLnCLnDWhRB6t2DnO/YLTAuDsbjWC9+lSWffvGt7WqvzINaokhEfCgXXGo32Usu0JcxMgJBdXbjyi538T62JIMMvWDr9Xn9121L312blnjaaIC8Ell5WDXnphx8gimFiCw5jNojgwjUvqmiy54Blqd95oLw9pqw58; 20:Yawwfl5BY/3FbYpUVD5l8DzpFQ9F9cpifoKSwuc4JdHCdHegvjJ22i7xPre0r6T8+g3St9hiOmRrDwUEFE89ZfYDGzYBnKxVFlozqK6uo+6wUc56PZQgzPTBROFIgGJsLakzs5MSiprQSwrU9/zwFcnHsa6URVPWGZYh2s4bmIqy1tfxbkoxQ79a4IJZfa6yXEiY/J9gngdtYJVQxiR78wpwC3qxm7HtbX9S2F0mpUC40qTaLOnrT38scHoFJyabB4xk0bLDqyQu2LbNpZxrEoFvWSW52r7lh5MLUlnq74gBJCGbiOjZ1Ka3RWh6jvsgM9D1dvdg8EMpt67Cp7ER8e/4uA+jrquv9JRrzXcoL72J3P6O70LY0Ug5wYqi7O2TX+4uvgO2MZmScE+hLBXaYfW9s2TBe4taXsmeabGf90jRuOL2BSVtAh7+1B1aKOMSJBiyc1cimTAvbNn1VIYc8BIvG72gxRHLYGOYdihuDenqMBPLUTAn36sgZOn9od+MaB4mBv38D4LHdDj1k4tRihC+DtRpuDx5VUp7i1kJkMTZeMVYmf8JKFnxL7yTPCFJEc9OtoHFShcmbf5mFTrrCzpj/rIn8Q7nTtspDd+2eBc= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(278428928389397); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041248)(20161123555025)(20161123564025)(20161123562025)(20161123560025)(6072148); SRVR:BY1PR0701MB1723; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1723; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1723; 4:a3dKVJaXBho5qgaKpIxxy6Cej5sOK5tB+AnJJzUAsb5g0jZDyrhAIIjhFo427uE6117YQJGZAMNedpJS49zIDqSLBPUW8mKEoIcUygUsTH/oNpBc0p24TIs50COqx51tArCrgWty+44pEQdeAZq6SJItofwqt245fAjzy6PfreJXGLX3sw2oOivS34UL5SwDkGCXlCoCynpIAWVa8Fz638+zNNSqtOIQThyPWDlw0Pqy8Yio9ILvl4SUajs0P8p5w44+4xTikN8qJHXT6rglHuJ1JC67drH9fjvjFjHZzxhr16g9ux9FvODiowjpuguxrCgHeYWQXc5YjWsOqRA2e2rHcxBZBn8icDh13kuBh2G+pkKQlyp8VOUsSzTZoek7iVRDy6YR8FPG6aQsJNRZdFGCNd0BKKLF6Beh5qOlm1ccznQyhJ9dRCWW80Ulx3WwppxuW3CNEubZcm0amFIVuItOr1pAM4w+KCqBsV4lYSTIAdurlHltr8DNzbEEf2tERHkRL4n9SfB2NphIh6r9fO3Ncy2hrYCZOVCFSr1GEDAhUMNPpDuYeXYweTdDZUigEtPzO4wentyrEyzINS56mNuDh6mi+SS32UcPYnyBXMZaAWr3FcFFHSQhAFFs2A/w X-Forefront-PRVS: 01480965DA X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(199003)(189002)(101416001)(110136003)(6916009)(69596002)(4326007)(8666005)(106356001)(76176999)(2351001)(47776003)(97736004)(2906002)(107886002)(7846002)(5660300001)(92566002)(305945005)(48376002)(733004)(42882006)(68736007)(50986999)(39850400001)(50466002)(6666003)(36756003)(2950100002)(81156014)(105586002)(42186005)(3846002)(33646002)(81166006)(8676002)(5003940100001)(6512006)(6506006)(6486002)(53416004)(7736002)(189998001)(38730400001)(4001430100002)(6116002)(50226002)(39840400001)(39450400002)(39410400001)(66066001)(76506005)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1723; H:localhost.caveonetworks.com; 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; BY1PR0701MB1723; 23:c5Ucgn5MGZUjMOuahsigpz7tgfZPkCNSus1y7eU?= =?us-ascii?Q?0DazGhzidGZUPY6RabVnoORkDjyoKgxMyqzr7PQZ+F7eeHhPu6oT35WY63MD?= =?us-ascii?Q?4flJAzzuMLAE7AeLq7YbAR43Rzh7d+yo9wO+iGHaiBuzSo4Fi1K5ZSQJi1O1?= =?us-ascii?Q?4Y9hLWSGmEhtp1b3SFhkOpq3M8Tv/HWKN+LC2ECJQrSYcjovPLrAxvQhijTY?= =?us-ascii?Q?EW14v3QIu/RJ9XKZS+wTrk8D5Ofw+xS1lZWqwZ/3hdbDbb6LuLgKtRoMF/1Y?= =?us-ascii?Q?/SMnA4pCr2oI0eHrv3G1cgWQgn7CY7Pns4be4LXv5qpFVF/u/4vQyOAJnKwY?= =?us-ascii?Q?rN0JR6MapnfrjVLXej+uVV2GuA/GhDUE5+OkkQB4+stF45l02jgOD8BwR3vM?= =?us-ascii?Q?KReesXgRGQMdNPKRFGIVg89EM1hwKpENTuOHLr8ucgHpE+R61wzX0Qv7SL2W?= =?us-ascii?Q?8cOElz4nfKAwdmSmnC+zXm3VucdTYMepOWS2Zx8yJRAPZcPdoG13K/ejRzU7?= =?us-ascii?Q?85OMIl9FbqHt4dwatQ9HcdxyT6uxmHm2RUSeVNazK309McDgBAS4JMijSnrb?= =?us-ascii?Q?c/TKNas89GwzNMXJ496cYLcR55t5phAdms+c8Bol7CG+UWESl/y8QcI+M5lZ?= =?us-ascii?Q?eSBkqQA4d4tWJV8V7XwCHFSQPeh1eqqx6ZS922otv01gZNFC7N3vpUhRoEDi?= =?us-ascii?Q?RqmdnAZ+hKCY2AoeS+WKfgrL465vC3go7haVR4lv1MtEa0VBsrV746bqFdX1?= =?us-ascii?Q?0PUMeBTH5fb3WUH/n4FiD8IRBWyp61eC1dFFj1uVjKxIP4mftYjjXqu5jNs2?= =?us-ascii?Q?YTo32frmhKAmjNIE97RQ37WQBsmjUnV4Ac70Znl5OQYEtGbCnbEah8nnTzCa?= =?us-ascii?Q?bBJzLsGpnEHeq19mMeUcp8zhYZzSsj2bVBb35JMaF1UZPnZN59LqJ9aXHKvs?= =?us-ascii?Q?s+Kci9XLdqNv6YkiwF6eZKxUjWkE6fNxlUHLvLN1S91YXaKjWrQ8TdCODLOA?= =?us-ascii?Q?UjqXbvkgx/AcfuvuIF1lJypYnmW+lk0WZIS0pugJyqkPtDSOovRJunI4xYzE?= =?us-ascii?Q?5L+ctdDxe3jnXUnnznb+d6BtaJZtZLLFUlmEDtgv69cHeKsOxE5qCLkr+iTP?= =?us-ascii?Q?oB9E46608TXuqJuhcm17jnHIT0gC+ILfNcdt5VlpXGhSIgeuHcobXHmc7Fe8?= =?us-ascii?Q?wcE8sUhCUexGS80q9OuInwHKA2HZ7neeB/2KVnX2/DZelYQcF6h85jIo0+Nl?= =?us-ascii?Q?c4nPToJNfuBT1KnlKtUXLwOsk/YY2eGM24ejvhKBAlqia2kAXD7hIsqzbd3W?= =?us-ascii?Q?Pmp7hNnZMDy+/PxQTRviX3JZq1vy+5iNs7RjMRHeF4ArvBhhfxkRUOH2fagB?= =?us-ascii?Q?wiocMqPrFrXeVbp8Ad89PmaWenHkuQFLm0HNFlzGTZjCnn5bJ?= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1723; 6:WbWQBYaCOpITAN588SON56XFH2Ag0elrnQP2v+XjrBSRs/exTTaf03sXWbhSrjx3ekAeyh4+CFC90liwVIeAKU3i/bhj+yCqt5QiCzf/HVw6dHLUE4nsRowBFXNVDU5roHA6AWKkCxe3ppNWHE8XIbaaXpd/h8WXbbX3XJ6mQfF/4f9li9ogD5rFS9eZv/4340sJDO2cs2LLt7/HmRWSoFJeTyQb1YvKOhUfNHK/LfXDlANEpAoY4GgxOJNBePbGBL3mmIZ1fLZDBp/I3a9MqbwMs3rLa3cgj59MH6qjY5E3CZ9hck6MyFdxBv+9TyJKxNzLIJu//kmGbyZ1Lwtby3QEquLqc5dhLJ0wD2XXr1M=; 5:KJ2N1bj3MMXcGyVI8RAIHF3DdsoCOEoDEpPi0SO9MtYmp3Cwtl3TdcTujch0pzLuaECiN7ISXQcHAVdgZbQwoU1hImzemUshaAziHTrw9Lh5GCR1HVcvLVIxkq4rKXZjQWtPmTiMSERw/bxjIfrMew==; 24:OZnhMnKo9zCyfCJ6wJ4+PADq7OtzZx5+J/+b8ydjhEdREcpTw9Ccx/cEC52dlxYRt7hONG/oAVHuWOhX5wdpijgXlw1O8jftIBtQqJRh0M4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1723; 7:bF4nDPmYW7cPCFXD2IgplrnVtJwW48vC0EsHb3ltQjk+9XfAQ/yLkHfhIthI2HFwu+FQG7+OHnMbA29xqM+i6/Imb1TtUAliUQOzG29ivussPgo9AJ9Mr5n+WDwAf0wWiVbVSa5i3J5OlwF6Q+lDWl4HrVW/EnygWp4aGFLPKpHpmqOa3wjKsJZ5heSy5rGrZReVkQPein+jY0HH4oyXUL/Bzoz35OebWn7lqZgzu9UfDaIFdtJh8mPRwOBKxPkCejDf4VR01cRADECY6xyg1bxtAbyWZLcW2PGlEworJbH/KbGZeed3klv82dmP3N2b6C6pm9WDqUAYh889P4ZJUfSqpNfx8h06DD0+uac79z8= X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Dec 2016 03:52:41.2409 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1723 Subject: [dpdk-dev] [PATCH v2 2/6] eventdev: define southbound driver interface 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" Signed-off-by: Jerin Jacob --- lib/librte_eventdev/rte_eventdev.h | 38 +++++ lib/librte_eventdev/rte_eventdev_pmd.h | 286 +++++++++++++++++++++++++++++++++ 2 files changed, 324 insertions(+) create mode 100644 lib/librte_eventdev/rte_eventdev_pmd.h diff --git a/lib/librte_eventdev/rte_eventdev.h b/lib/librte_eventdev/rte_eventdev.h index 72f5b87..451bb5d 100644 --- a/lib/librte_eventdev/rte_eventdev.h +++ b/lib/librte_eventdev/rte_eventdev.h @@ -970,6 +970,44 @@ struct rte_event { }; }; +struct rte_eventdev_ops; +struct rte_eventdev; + +typedef void (*event_schedule_t)(struct rte_eventdev *dev); +/**< @internal Schedule one or more events in the event dev. */ + +typedef uint16_t (*event_enqueue_t)(void *port, struct rte_event *ev); +/**< @internal Enqueue event on port of a device */ + +typedef uint16_t (*event_enqueue_burst_t)(void *port, struct rte_event ev[], + uint16_t nb_events); +/**< @internal Enqueue burst of events on port of a device */ + +typedef uint16_t (*event_dequeue_t)(void *port, struct rte_event *ev, + uint64_t timeout_ticks); +/**< @internal Dequeue event from port of a device */ + +typedef uint16_t (*event_dequeue_burst_t)(void *port, struct rte_event ev[], + uint16_t nb_events, uint64_t timeout_ticks); +/**< @internal Dequeue burst of events from port of a device */ + + +/** @internal The data structure associated with each event device. */ +struct rte_eventdev { + event_schedule_t schedule; + /**< Pointer to PMD schedule function. */ + event_enqueue_t enqueue; + /**< Pointer to PMD enqueue function. */ + event_enqueue_burst_t enqueue_burst; + /**< Pointer to PMD enqueue burst function. */ + event_dequeue_t dequeue; + /**< Pointer to PMD dequeue function. */ + event_dequeue_burst_t dequeue_burst; + /**< Pointer to PMD dequeue burst function. */ + +} __rte_cache_aligned; + + /** * Schedule one or more events in the event dev. * diff --git a/lib/librte_eventdev/rte_eventdev_pmd.h b/lib/librte_eventdev/rte_eventdev_pmd.h new file mode 100644 index 0000000..0b04ab7 --- /dev/null +++ b/lib/librte_eventdev/rte_eventdev_pmd.h @@ -0,0 +1,286 @@ +/* + * + * Copyright(c) 2016 Cavium networks. 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 _RTE_EVENTDEV_PMD_H_ +#define _RTE_EVENTDEV_PMD_H_ + +/** @file + * RTE Event PMD APIs + * + * @note + * These API are from event PMD only and user applications should not call + * them directly. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "rte_eventdev.h" + +/** + * Definitions of all functions exported by a driver through the + * the generic structure of type *event_dev_ops* supplied in the + * *rte_eventdev* structure associated with a device. + */ + +/** + * Get device information of a device. + * + * @param dev + * Event device pointer + * @param dev_info + * Event device information structure + * + * @return + * Returns 0 on success + */ +typedef void (*eventdev_info_get_t)(struct rte_eventdev *dev, + struct rte_event_dev_info *dev_info); + +/** + * Configure a device. + * + * @param dev + * Event device pointer + * + * @return + * Returns 0 on success + */ +typedef int (*eventdev_configure_t)(const struct rte_eventdev *dev); + +/** + * Start a configured device. + * + * @param dev + * Event device pointer + * + * @return + * Returns 0 on success + */ +typedef int (*eventdev_start_t)(struct rte_eventdev *dev); + +/** + * Stop a configured device. + * + * @param dev + * Event device pointer + */ +typedef void (*eventdev_stop_t)(struct rte_eventdev *dev); + +/** + * Close a configured device. + * + * @param dev + * Event device pointer + * + * @return + * - 0 on success + * - (-EAGAIN) if can't close as device is busy + */ +typedef int (*eventdev_close_t)(struct rte_eventdev *dev); + +/** + * Retrieve the default event queue configuration. + * + * @param dev + * Event device pointer + * @param queue_id + * Event queue index + * @param[out] queue_conf + * Event queue configuration structure + * + */ +typedef void (*eventdev_queue_default_conf_get_t)(struct rte_eventdev *dev, + uint8_t queue_id, struct rte_event_queue_conf *queue_conf); + +/** + * Setup an event queue. + * + * @param dev + * Event device pointer + * @param queue_id + * Event queue index + * @param queue_conf + * Event queue configuration structure + * + * @return + * Returns 0 on success. + */ +typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev, + uint8_t queue_id, + const struct rte_event_queue_conf *queue_conf); + +/** + * Release memory resources allocated by given event queue. + * + * @param queue + * Event queue pointer + * + */ +typedef void (*eventdev_queue_release_t)(void *queue); + +/** + * Retrieve the default event port configuration. + * + * @param dev + * Event device pointer + * @param port_id + * Event port index + * @param[out] port_conf + * Event port configuration structure + * + */ +typedef void (*eventdev_port_default_conf_get_t)(struct rte_eventdev *dev, + uint8_t port_id, struct rte_event_port_conf *port_conf); + +/** + * Setup an event port. + * + * @param dev + * Event device pointer + * @param port_id + * Event port index + * @param port_conf + * Event port configuration structure + * + * @return + * Returns 0 on success. + */ +typedef int (*eventdev_port_setup_t)(struct rte_eventdev *dev, + uint8_t port_id, + const struct rte_event_port_conf *port_conf); + +/** + * Release memory resources allocated by given event port. + * + * @param port + * Event port pointer + * + */ +typedef void (*eventdev_port_release_t)(void *port); + +/** + * Link multiple source event queues to destination event port. + * + * @param port + * Event port pointer + * @param link + * An array of *nb_links* pointers to *rte_event_queue_link* structure + * @param nb_links + * The number of links to establish + * + * @return + * Returns 0 on success. + * + */ +typedef int (*eventdev_port_link_t)(void *port, + const struct rte_event_queue_link link[], uint16_t nb_links); + +/** + * Unlink multiple source event queues from destination event port. + * + * @param port + * Event port pointer + * @param queues + * An array of *nb_unlinks* event queues to be unlinked from the event port. + * @param nb_unlinks + * The number of unlinks to establish + * + * @return + * Returns 0 on success. + * + */ +typedef int (*eventdev_port_unlink_t)(void *port, + uint8_t queues[], uint16_t nb_unlinks); + +/** + * Converts nanoseconds to *timeout_ticks* value for rte_event_dequeue() + * + * @param dev + * Event device pointer + * @param ns + * Wait time in nanosecond + * @param[out] timeout_ticks + * Value for the *timeout_ticks* parameter in rte_event_dequeue() function + * + */ +typedef void (*eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev, + uint64_t ns, uint64_t *timeout_ticks); + +/** + * Dump internal information + * + * @param dev + * Event device pointer + * @param f + * A pointer to a file for output + * + */ +typedef void (*eventdev_dump_t)(struct rte_eventdev *dev, FILE *f); + +/** Event device operations function pointer table */ +struct rte_eventdev_ops { + eventdev_info_get_t dev_infos_get; /**< Get device info. */ + eventdev_configure_t dev_configure; /**< Configure device. */ + eventdev_start_t dev_start; /**< Start device. */ + eventdev_stop_t dev_stop; /**< Stop device. */ + eventdev_close_t dev_close; /**< Close device. */ + + eventdev_queue_default_conf_get_t queue_def_conf; + /**< Get default queue configuration. */ + eventdev_queue_setup_t queue_setup; + /**< Set up an event queue. */ + eventdev_queue_release_t queue_release; + /**< Release an event queue. */ + + eventdev_port_default_conf_get_t port_def_conf; + /**< Get default port configuration. */ + eventdev_port_setup_t port_setup; + /**< Set up an event port. */ + eventdev_port_release_t port_release; + /**< Release an event port. */ + + eventdev_port_link_t port_link; + /**< Link event queues to an event port. */ + eventdev_port_unlink_t port_unlink; + /**< Unlink event queues from an event port. */ + eventdev_dequeue_timeout_ticks_t timeout_ticks; + /**< Converts ns to *timeout_ticks* value for rte_event_dequeue() */ + eventdev_dump_t dump; + /* Dump internal information */ +}; + +#ifdef __cplusplus +} +#endif + +#endif /* _RTE_EVENTDEV_PMD_H_ */