1*d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause 2*d30ea906Sjfb8856606 * Copyright(c) 2017-2018 Intel Corporation. 3*d30ea906Sjfb8856606 * All rights reserved. 4*d30ea906Sjfb8856606 */ 5*d30ea906Sjfb8856606 6*d30ea906Sjfb8856606 #ifndef __RTE_EVENT_TIMER_ADAPTER_PMD_H__ 7*d30ea906Sjfb8856606 #define __RTE_EVENT_TIMER_ADAPTER_PMD_H__ 8*d30ea906Sjfb8856606 9*d30ea906Sjfb8856606 /** 10*d30ea906Sjfb8856606 * @file 11*d30ea906Sjfb8856606 * RTE Event Timer Adapter API (PMD Side) 12*d30ea906Sjfb8856606 * 13*d30ea906Sjfb8856606 * @note 14*d30ea906Sjfb8856606 * This file provides implementation helpers for internal use by PMDs. They 15*d30ea906Sjfb8856606 * are not intended to be exposed to applications and are not subject to ABI 16*d30ea906Sjfb8856606 * versioning. 17*d30ea906Sjfb8856606 * 18*d30ea906Sjfb8856606 */ 19*d30ea906Sjfb8856606 20*d30ea906Sjfb8856606 #ifdef __cplusplus 21*d30ea906Sjfb8856606 extern "C" { 22*d30ea906Sjfb8856606 #endif 23*d30ea906Sjfb8856606 24*d30ea906Sjfb8856606 #include "rte_event_timer_adapter.h" 25*d30ea906Sjfb8856606 26*d30ea906Sjfb8856606 /* 27*d30ea906Sjfb8856606 * Definitions of functions exported by an event timer adapter implementation 28*d30ea906Sjfb8856606 * through *rte_event_timer_adapter_ops* structure supplied in the 29*d30ea906Sjfb8856606 * *rte_event_timer_adapter* structure associated with an event timer adapter. 30*d30ea906Sjfb8856606 */ 31*d30ea906Sjfb8856606 32*d30ea906Sjfb8856606 typedef int (*rte_event_timer_adapter_init_t)( 33*d30ea906Sjfb8856606 struct rte_event_timer_adapter *adapter); 34*d30ea906Sjfb8856606 /**< @internal Event timer adapter implementation setup */ 35*d30ea906Sjfb8856606 typedef int (*rte_event_timer_adapter_uninit_t)( 36*d30ea906Sjfb8856606 struct rte_event_timer_adapter *adapter); 37*d30ea906Sjfb8856606 /**< @internal Event timer adapter implementation teardown */ 38*d30ea906Sjfb8856606 typedef int (*rte_event_timer_adapter_start_t)( 39*d30ea906Sjfb8856606 const struct rte_event_timer_adapter *adapter); 40*d30ea906Sjfb8856606 /**< @internal Start running event timer adapter */ 41*d30ea906Sjfb8856606 typedef int (*rte_event_timer_adapter_stop_t)( 42*d30ea906Sjfb8856606 const struct rte_event_timer_adapter *adapter); 43*d30ea906Sjfb8856606 /**< @internal Stop running event timer adapter */ 44*d30ea906Sjfb8856606 typedef void (*rte_event_timer_adapter_get_info_t)( 45*d30ea906Sjfb8856606 const struct rte_event_timer_adapter *adapter, 46*d30ea906Sjfb8856606 struct rte_event_timer_adapter_info *adapter_info); 47*d30ea906Sjfb8856606 /**< @internal Get contextual information for event timer adapter */ 48*d30ea906Sjfb8856606 typedef int (*rte_event_timer_adapter_stats_get_t)( 49*d30ea906Sjfb8856606 const struct rte_event_timer_adapter *adapter, 50*d30ea906Sjfb8856606 struct rte_event_timer_adapter_stats *stats); 51*d30ea906Sjfb8856606 /**< @internal Get statistics for event timer adapter */ 52*d30ea906Sjfb8856606 typedef int (*rte_event_timer_adapter_stats_reset_t)( 53*d30ea906Sjfb8856606 const struct rte_event_timer_adapter *adapter); 54*d30ea906Sjfb8856606 /**< @internal Reset statistics for event timer adapter */ 55*d30ea906Sjfb8856606 56*d30ea906Sjfb8856606 /** 57*d30ea906Sjfb8856606 * @internal Structure containing the functions exported by an event timer 58*d30ea906Sjfb8856606 * adapter implementation. 59*d30ea906Sjfb8856606 */ 60*d30ea906Sjfb8856606 struct rte_event_timer_adapter_ops { 61*d30ea906Sjfb8856606 rte_event_timer_adapter_init_t init; /**< Set up adapter */ 62*d30ea906Sjfb8856606 rte_event_timer_adapter_uninit_t uninit;/**< Tear down adapter */ 63*d30ea906Sjfb8856606 rte_event_timer_adapter_start_t start; /**< Start adapter */ 64*d30ea906Sjfb8856606 rte_event_timer_adapter_stop_t stop; /**< Stop adapter */ 65*d30ea906Sjfb8856606 rte_event_timer_adapter_get_info_t get_info; 66*d30ea906Sjfb8856606 /**< Get info from driver */ 67*d30ea906Sjfb8856606 rte_event_timer_adapter_stats_get_t stats_get; 68*d30ea906Sjfb8856606 /**< Get adapter statistics */ 69*d30ea906Sjfb8856606 rte_event_timer_adapter_stats_reset_t stats_reset; 70*d30ea906Sjfb8856606 /**< Reset adapter statistics */ 71*d30ea906Sjfb8856606 rte_event_timer_arm_burst_t arm_burst; 72*d30ea906Sjfb8856606 /**< Arm one or more event timers */ 73*d30ea906Sjfb8856606 rte_event_timer_arm_tmo_tick_burst_t arm_tmo_tick_burst; 74*d30ea906Sjfb8856606 /**< Arm event timers with same expiration time */ 75*d30ea906Sjfb8856606 rte_event_timer_cancel_burst_t cancel_burst; 76*d30ea906Sjfb8856606 /**< Cancel one or more event timers */ 77*d30ea906Sjfb8856606 }; 78*d30ea906Sjfb8856606 79*d30ea906Sjfb8856606 /** 80*d30ea906Sjfb8856606 * @internal Adapter data; structure to be placed in shared memory to be 81*d30ea906Sjfb8856606 * accessible by various processes in a multi-process configuration. 82*d30ea906Sjfb8856606 */ 83*d30ea906Sjfb8856606 struct rte_event_timer_adapter_data { 84*d30ea906Sjfb8856606 uint8_t id; 85*d30ea906Sjfb8856606 /**< Event timer adapter ID */ 86*d30ea906Sjfb8856606 uint8_t event_dev_id; 87*d30ea906Sjfb8856606 /**< Event device ID */ 88*d30ea906Sjfb8856606 uint32_t socket_id; 89*d30ea906Sjfb8856606 /**< Socket ID where memory is allocated */ 90*d30ea906Sjfb8856606 uint8_t event_port_id; 91*d30ea906Sjfb8856606 /**< Optional: event port ID used when the inbuilt port is absent */ 92*d30ea906Sjfb8856606 const struct rte_memzone *mz; 93*d30ea906Sjfb8856606 /**< Event timer adapter memzone pointer */ 94*d30ea906Sjfb8856606 struct rte_event_timer_adapter_conf conf; 95*d30ea906Sjfb8856606 /**< Configuration used to configure the adapter. */ 96*d30ea906Sjfb8856606 uint32_t caps; 97*d30ea906Sjfb8856606 /**< Adapter capabilities */ 98*d30ea906Sjfb8856606 void *adapter_priv; 99*d30ea906Sjfb8856606 /**< Timer adapter private data*/ 100*d30ea906Sjfb8856606 uint8_t service_inited; 101*d30ea906Sjfb8856606 /**< Service initialization state */ 102*d30ea906Sjfb8856606 uint32_t service_id; 103*d30ea906Sjfb8856606 /**< Service ID*/ 104*d30ea906Sjfb8856606 105*d30ea906Sjfb8856606 RTE_STD_C11 106*d30ea906Sjfb8856606 uint8_t started : 1; 107*d30ea906Sjfb8856606 /**< Flag to indicate adapter started. */ 108*d30ea906Sjfb8856606 } __rte_cache_aligned; 109*d30ea906Sjfb8856606 110*d30ea906Sjfb8856606 #ifdef __cplusplus 111*d30ea906Sjfb8856606 } 112*d30ea906Sjfb8856606 #endif 113*d30ea906Sjfb8856606 114*d30ea906Sjfb8856606 #endif /* __RTE_EVENT_TIMER_ADAPTER_PMD_H__ */ 115