From patchwork Wed Dec 21 09:25:22 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 18315 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 1FBA110BAC; Wed, 21 Dec 2016 10:26:31 +0100 (CET) Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0084.outbound.protection.outlook.com [104.47.42.84]) by dpdk.org (Postfix) with ESMTP id 3209710BA3 for ; Wed, 21 Dec 2016 10:26:26 +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=FkEbbnPJ5QstPpAamo6Y1vv/iag8NgvTLvrW1+dht3M=; b=mMqQb1SPDv1NT0z3lqPIl9ctzdFa4/eR7TQK19j6Ap3kEr+frUrH5yJkzUpcQRonkymDRY54DdxqFSVv93ZgUEx+7y3LZz4DJ1++AAgI3ItxpRKOQ2zQZexFLsR2aO9j+DNYw7aw09WRqvLjEPBH3P0+vPHfxsy28AzJPR1CLqE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerin.Jacob@cavium.com; Received: from localhost.localdomain.localdomain (14.140.2.178) by CY1PR0701MB1728.namprd07.prod.outlook.com (10.163.21.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.789.14; Wed, 21 Dec 2016 09:26:19 +0000 From: Jerin Jacob To: CC: , , , , , Jerin Jacob Date: Wed, 21 Dec 2016 14:55:22 +0530 Message-ID: <1482312326-2589-3-git-send-email-jerin.jacob@caviumnetworks.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1482312326-2589-1-git-send-email-jerin.jacob@caviumnetworks.com> References: <1480996340-29871-1-git-send-email-jerin.jacob@caviumnetworks.com> <1482312326-2589-1-git-send-email-jerin.jacob@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: PN1PR01CA0075.INDPRD01.PROD.OUTLOOK.COM (10.174.144.143) To CY1PR0701MB1728.namprd07.prod.outlook.com (10.163.21.142) X-MS-Office365-Filtering-Correlation-Id: e9de0ea0-c89d-49ce-03e8-08d429836e73 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY1PR0701MB1728; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1728; 3:3qHxexhCobJOupa8VuKUWM3cO9s4LcPSBq4NQ9qJiMLDTLIT2AZmTCGIKyCo8LSoqSJwslESaMFOM/Cial3/CdRhjrItG/hBAMA8JRssKQjBfcSrFOzrtFlhRoDuQPvQND5+8AdkWK7aoIwAJIAbdhJKNwz/jBPQmgVmN07DNxLusTSQnH3oBFvgg1tH0pSlngGWZ+gVSwQiGWxe+qnmLeGYACLW3FeMRu4dQlXX9QxWYcZ8b7bMuwW9A6PdrPRkgIcbT296iEptCpP27/cE1w== X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1728; 25:yDYbWDKs3/GrTMdqefDens6Q7iGZa+lN2uAuF4OZigRHQVRo6c5jDuKwwn0ASeOF1gYlnBgeA5J6+3soIwP46JjgIU6cU9NUnoxnCYYa6oHUvZpgcecUO86Se++ayn4/+OpoXTFGcrRT9z8PiQIUgHzKFnFutoITLGL5POzQE8sFqPI9vJxoBRHkmp1TKHxkFgdRHbvFaSn4nZOqJZ9W9UsM40lzq0n6J39efjt+itfJOEJBJNq84EdQnoYqIBSDET2TE0aRxVIw8X2ciO+MP/JEQ4F84bp4KDLNseHFBuTWuYF1AyL40yvzlSoVtL6Wky/MDldu9Yv1UbzUcrtSqn+unT/fVy9fZ+Qx80cmZBgdyGMixpKVXvQmHxe129PO0anYhbqfi3v0wcbFy2h5NNGqGeZIXikUn8LVPWpg5cK9FL96lyrh+9HPwPK9dY4Fl9vE+bJ4Os+Ju6dpk3N0K9Ba1E8R7aFG5suFZB2B15GgJuhyr09gBqJkHv1jMoTfgYxx5E0hD2Jm8O4YA1wY7N/pXb/6dAAOw975jWxEOr4W1+eS/rnsmF9wFHLrk0YmYUyZ7CvLlJ3HQmbh5wlelJJMLGJSRioG0XlsJkmfIkq2A8mCAJ3fQtIAbl5yb9HUXN5M/EBP9fbIopOxMo7Uc6stcbJXx+v6l7HiKgQpFqtrosJBjUezZCS+13oKwNNkq1yI5dLHyvsvXOqrscEhttr6TL9WEbI6LERGJOcDmnjijO1FREXGYtgxsqacNLzL2Y+NfLr9jeBGq3upfHxVg0Any/ihOpCWxNGfjHNji7hhSwqmy6nQ3FtwKRtDRFal X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1728; 31:HxxyFgoTm6TPumMucBSE0n9HB3GPFvkm2rySuzXhObSJFpFM8564lTfYXX72aA53uVjYzltAyjeEPmhRpMe8UWH5N7CG9hnjOM+T7mfH+Ih7pqiblVhMoA3H05TPjr+JqfBi85IqT44Y4qogJgtvp+79H+LHFKAnoFZnxEzbmA+Fc3HFG1zIuTkusqo42PcmcmqXUH+5LemsbD63mV5EizL6vxkhf6r/HWiaT99NFYzdUnLvmaR95aUkXd5S2edcnrsBeDdLoxnVulJjmV4ONw==; 20:nBnRJP1B8usgF4ZadiWel1tJNCce9MNxd6HZ3McDThGlNYsC0QRPeGvlFoC7K1EcZ8vLtaKIYiv9318h57uRpldi6vavBZZsq8ykccdxxGbVmNgbXJBbYCvLI1mFnYR3zizzI+hlX5w3d+rGcsG+o952xu5zNK43TKUEtMGzgTi4GR0PykQwv/yzjzvVQlDI0tvsUgxFURSnvRzZcEBryowG6vfc5Udg6UUOV8vTDCqQGLOA+zyqup8Mw3jZbKRaptScNGC849CpnyS3tW5ueLk4rTJNNc6i5JQHtGYBV1UyIbo+uxsyNXFdcrG9M8/FT9925fgfkxsJgjMMkq5ug/fORObUUYja5IxVfAP3/Zd61Qsn+/3I75MAPhDopkIfS8ALog5i4cvuaZTQ/DhU5S3sHxt8iNKCyTNxTev2SseSIoVm6OdY5QZZMXDt6thlKOVSH9BQ2iLw53pqFBVpkCS5O0rQZ72gOf7Un9MrmU9fp6bz3SX4FCJqJprV38x7ehtT7ytQOjLnlEhd5I9O1jrLi9ZhkUQTAf0Gy3KgglE0t2rPrGYqCihACMKDLVo837rp+E64Leysa9c+iCSgwgoAJLOaoeOxOuBg5Xr7Ql0= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(278428928389397)(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041248)(20161123560025)(20161123564025)(20161123562025)(20161123555025)(6072148); SRVR:CY1PR0701MB1728; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB1728; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1728; 4:VwgxZ1k8WuyFt/BP75bP86LUWl8+wfK2gPMQMkEuBNlwLCRNdtwoUBrINdUSUIWdK9II8B3S/ir104Mu1LHKclrktu4nVkA5kwa+jh6ty73IKBLNfGCjYVvzFNgrBBaK18624G77o5TufcLDmRtVRpHpj3EdtdGnwqCImfZilXUfEDIIPhZxKGIgdmohj+lrcdqgFrrUjZnqgFuzq5jkInEttoNvINBwKRnbSmBTExR/yNO5fcpxJ1uEUEMwxfddabvE5aa1zfld0D4mFy0k5dqAtuvJnNeKoh6dCZdxtyUFhj+472ou9ldYOF0d2v8d9sBU1unTxTdiKyQ/nzheQ58FFMgQlkyXdsp2bWCYrO0c+nN91tQVD47R3paSyTVzMMfzLJmV+od427vgGnTsfFBVg+0pnId+QCX3NlDw8gnwR/teAcTHfFHsLNy+v4h81jGNG2ElXcNOEGlKWv/1GeKYBRTcmHj+zeA3cOq5j1j09PU4hdhDt3Js1ViBXZvS0oMqqP4O6a6JEL3l5wAFpS6M9KVOS4ZW5RTeyq/kSo05d79iwR61a6uR4ifDTVb1nyKydRN+9JqmO4PHoojJ5ZN8nJyPKJF57ysb1ty+EPVcrxgYJ8foZTi5UK65cSFdPPWjErPDboft61fvBx5yhw== X-Forefront-PRVS: 01630974C0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(39450400003)(199003)(189002)(7736002)(68736007)(92566002)(36756003)(105586002)(38730400001)(305945005)(4001430100002)(5009440100003)(106356001)(8676002)(81166006)(50226002)(8666006)(33646002)(81156014)(42186005)(2351001)(4326007)(76176999)(66066001)(101416001)(48376002)(50466002)(189998001)(110136003)(107886002)(6116002)(5003940100001)(5660300001)(47776003)(42882006)(97736004)(6916009)(2950100002)(6506006)(6512006)(2906002)(25786008)(6486002)(50986999)(3846002)(6666003)(7099028)(110426004)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1728; H:localhost.localdomain.localdomain; 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; CY1PR0701MB1728; 23:aNguyTB14nyIRGR3xBeBGDxpDiORx2X/ztnto6B?= PE80iTmCLgythTqdZprkLqqjyiEsAbCFIrauB2A257XJLv0gzp8/yCOKbmC3Hy4YJkBu49yBaPPhXtsrRqNvuRrnW2xhjUGzB6Vj3VDjZZQoDW5YUeaXqrTSTMBFK4laXoumKwvMU84dVjAlDACq3IpfbJD+PR64ozaxa9qUJ/frmCW2DrfGgfWEwyvSnT4lfJb0VSgQNfVitfX7BH6jdjDn9lPxzslmnxGBO9j3OcLDva77NORMGpNx13MhQpEjIy3TXPE+0EMql+R/X9SadKC6yXkM7fRJqwdoehYmMwPcws2QvulCzYbn7kpsdUzRWOH4aMbXJ5SM2nUbWAPMzY0lwYEmHLlRrBFnJf4jBITjtcdMFoG9t7ONz33XjhwMpNxMLCwQO8NOW61T5zssFjvx6nsr0jy3LUt2yCrggLAfL8VEHNI/0+7VJEY4JgQh4SBxbQZOX4TrhyAodA1Nl4gX1y3jydfNpTwiJNYBIM8MKKuA3DGTwwLoYcmq5wsYqbYFSIsAAep8WRlX1FTDUB+dEO9K/DfK6WzzWcVXeWSh3jVoZ4YeKvfrn3T7kpUZsdxB0MZ61o+28iiHtvlV+qSCt6EBqYJAuvTXTdCfxIgH+1cGup+dE260V/kQI4oFg6f4f6fVrWXFLlKgDPmSNmwzOdwjma6ibmsbuZiu008RqVxZvbc8/BjKAugV6O2lRbFUfHVi/lMKfKlr/FTij3QH2H2jqeLRAs6bhlRtw1WbzeNTXGambnQLyqJCcEhirphTEO7fpzu/enq6tBKA2oRGF22WEHgWPpQu5PJJEIihiYDi53VLdGct4k9OFIrCrlNQVzX+I9eijsRAG9XMDClwQPqjMs4U/WhoV54jH14WHT8WsZSiQVOlpHyGUgReii6kPfvBBbW1SdeZg+dmAUdRgGVg2xtWrvq4+HxO8hi/y7hvF+xV2VoL2j1QwV5a/ECexnFgBCc9uzU+IQLQMLst80jyvqDpTtJw/RNjB7WaXpaCWdOXWkPcXIVzrntBtTI4yIoK4GCTdBJabviQO10RivUtuc5jq3tnOmf7mfnOl7qOCNcscSvOnTRXPmdyCaJSDDdJN2m0JAIiM5ltPBoLb6VwQ09K4V3CNxzgAMGijRFqKzpO0FW7iI2TDAqPhFZT8CvdeDIFO5SErabu9snyqz5DjfPFQLhAO7YSCWRtlSs16/zLsm03Yg5mck7OY9sQSaCvPYZZHU9U/vRkfz4p3 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1728; 6:jeznoxvVf4pIQA1omdGj3na3d9v4eAqdNiIHTkGe2dNyMQjypEu1Fvpl2RPgmLNyNPq6hjnIJNY0ovrl0HQF6rzAZqXmwQ3XegpqJH/FK3nhnbnuD759mSUw09izLJQVc1idruSZFrAtJjafCLWpLGSh0wU5Ah30D5H8YnxWiv1cZzzEFhOd/M0pIywLUihe2vruQR6lpmiJQo3d4IoOU1W2AgdI/6/m4t05K5d2dfJVGG3uDcw1Afu9zdguNH97BLwPURBDJaqKh6MkrZSF5rUD4dsEnlRRgx3sbUEu3XfmYB/nt61aLfkB7B1MJvNBjOTpyW9CthfQ5ya48aMxqB2oifqWMPkfRaqBHqT6kl7JB+prwX23+2f2xoTO33Q++KTTXDNNl9cKywHqSvWBqpq8gG0C7A9M3AC8JVHRYo8=; 5:xEFPJa4xISnIE2L5cdKNwkXNG2HV8RhLp9CqcxZJbxzF6pubyMlXzL7AxP8NBDVLxUwfAyFXl1UbGpii4X7eFLQ9ZERyJlHbTx4uN/OqQr4Am9dw9STqKf4cdIuMt6WFozur2RdkC+Gywl/+l0p2gw==; 24:J41r3dB8lbHSUhUSsr/fXl+IWEqizKmDht3Ie5sznOkcOO2aWdG0dvuRdglz6tjjxxCYZ7fVxtvqg+JB3tCdbDGkJx6djewJJ/bteyG5mEE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1728; 7:Ne7XXDMbiSfw+3Q7AMbv9uQNXwZG/nEyHRPyh7mhCpdq5kmY3u14VtmjHwxnul1i8ryCdvzwaKnHMluYvsUrfPa2SpgaPMV4owT1PDkMhHRVPgSJB8tJf7bLjR3ig9Zz7tbOVFwTxCP4q1duWN5bx5PldhO91GIuImRi6Bd1FsyNsaCsVILPfcsT8k2IMZKEhMF3UVNYPMlDyM8UvVspHqKbzR9FOa6FnXm7YWhprRqAoDxi/cUJZdwiitv4ZRUpsIe41g7Q1Dq9oCiFt8XJHCR69YdAlFqSZiH6ruc4QAUGWkwWjIr3flMOUb8N33NCXEcKZFS9B9cgymS8YH1RGfbJN6/mzImUWROHRa5ohoITlznlWYoP1z0gQ3MQu22l74zYRC7qT7ff7UFNscKKJFCtG827F5XofGzYKxTU54ZkoffBrAi1UssByK5O3rXizzKpgSADzwdvxH9/XTX/XA== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Dec 2016 09:26:19.4214 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB1728 Subject: [dpdk-dev] [PATCH v4 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 Acked-by: Bruce Richardson --- lib/librte_eventdev/rte_eventdev.h | 38 +++++ lib/librte_eventdev/rte_eventdev_pmd.h | 294 +++++++++++++++++++++++++++++++++ 2 files changed, 332 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 b2bc471..014e1ec 100644 --- a/lib/librte_eventdev/rte_eventdev.h +++ b/lib/librte_eventdev/rte_eventdev.h @@ -972,6 +972,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, const struct rte_event *ev); +/**< @internal Enqueue event on port of a device */ + +typedef uint16_t (*event_enqueue_burst_t)(void *port, + const 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..40552aa --- /dev/null +++ b/lib/librte_eventdev/rte_eventdev_pmd.h @@ -0,0 +1,294 @@ +/* + * + * 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 resources allocated by given event queue. + * + * @param dev + * Event device pointer + * @param queue_id + * Event queue index + * + */ +typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev, + uint8_t queue_id); + +/** + * 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 + * Points to an array of *nb_links* event queues to be linked + * to the event port. + * @param priorities + * Points to an array of *nb_links* service priorities associated with each + * event queue link to event port. + * @param nb_links + * The number of links to establish + * + * @return + * Returns 0 on success. + * + */ +typedef int (*eventdev_port_link_t)(void *port, + const uint8_t queues[], const uint8_t priorities[], + 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_ */