Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
rte_event_timer_adapter.h(3)	     DPDK	  rte_event_timer_adapter.h(3)

NAME
       rte_event_timer_adapter.h

SYNOPSIS
       #include	'rte_eventdev.h'
       #include	'rte_eventdev_trace_fp.h'

   Data	Structures
       struct rte_event_timer_adapter_conf
       struct rte_event_timer_adapter_stats
       struct rte_event_timer_adapter_info
       struct rte_event_timer

   Macros
       #define RTE_EVENT_TIMER_ADAPTER_F_ADJUST_RES   (1ULL << 0)
       #define RTE_EVENT_TIMER_ADAPTER_F_SP_PUT	  (1ULL	<< 1)
       #define RTE_EVENT_TIMER_ADAPTER_F_PERIODIC   (1ULL << 2)

   Typedefs
       typedef int(* rte_event_timer_adapter_port_conf_cb_t) (uint16_t id,
	   uint8_t event_dev_id, uint8_t *event_port_id, void *conf_arg)

   Enumerations
       enum rte_event_timer_adapter_clk_src { RTE_EVENT_TIMER_ADAPTER_CPU_CLK,
	   RTE_EVENT_TIMER_ADAPTER_EXT_CLK0, RTE_EVENT_TIMER_ADAPTER_EXT_CLK1,
	   RTE_EVENT_TIMER_ADAPTER_EXT_CLK2, RTE_EVENT_TIMER_ADAPTER_EXT_CLK3
	   }
       enum rte_event_timer_state { RTE_EVENT_TIMER_NOT_ARMED =	0,
	   RTE_EVENT_TIMER_ARMED = 1, RTE_EVENT_TIMER_CANCELED = 2,
	   RTE_EVENT_TIMER_ERROR = -1, RTE_EVENT_TIMER_ERROR_TOOEARLY =	-2,
	   RTE_EVENT_TIMER_ERROR_TOOLATE = -3 }

   Functions
       struct rte_event_timer_adapter *	rte_event_timer_adapter_create (const
	   struct rte_event_timer_adapter_conf *conf)
       struct rte_event_timer_adapter *	rte_event_timer_adapter_create_ext
	   (const struct rte_event_timer_adapter_conf *conf,
	   rte_event_timer_adapter_port_conf_cb_t conf_cb, void	*conf_arg)
       int rte_event_timer_adapter_get_info (const struct
	   rte_event_timer_adapter *adapter, struct
	   rte_event_timer_adapter_info	*adapter_info)
       int rte_event_timer_adapter_start (const	struct rte_event_timer_adapter
	   *adapter)
       int rte_event_timer_adapter_stop	(const struct rte_event_timer_adapter
	   *adapter)
       struct rte_event_timer_adapter *	rte_event_timer_adapter_lookup
	   (uint16_t adapter_id)
       int rte_event_timer_adapter_free	(struct	rte_event_timer_adapter
	   *adapter)
       int rte_event_timer_adapter_service_id_get (struct
	   rte_event_timer_adapter *adapter, uint32_t *service_id)
       int rte_event_timer_adapter_stats_get (struct rte_event_timer_adapter
	   *adapter, struct rte_event_timer_adapter_stats *stats)
       int rte_event_timer_adapter_stats_reset (struct rte_event_timer_adapter
	   *adapter)
       static uint16_t rte_event_timer_arm_burst (const	struct
	   rte_event_timer_adapter *adapter, struct rte_event_timer **evtims,
	   uint16_t nb_evtims)
       static uint16_t rte_event_timer_arm_tmo_tick_burst (const struct
	   rte_event_timer_adapter *adapter, struct rte_event_timer **evtims,
	   const uint64_t timeout_ticks, const uint16_t	nb_evtims)
       static uint16_t rte_event_timer_cancel_burst (const struct
	   rte_event_timer_adapter *adapter, struct rte_event_timer **evtims,
	   uint16_t nb_evtims)
       __rte_experimental int rte_event_timer_remaining_ticks_get (const
	   struct rte_event_timer_adapter *adapter, const struct
	   rte_event_timer *evtim, uint64_t *ticks_remaining)

Detailed Description
       RTE Event Timer Adapter

       An event	timer adapter has the following	abstract working model:

				 timer_tick_ns
				     +
			+-------+    |
			|	|    |
		+-------+ bkt 0	+----v---+
		|	|	|	 |
		|	+-------+	 |
	    +---+---+		     +---+---+	+---+---+---+---+
	    |	    |		     |	     |	|   |	|   |	|
	    | bkt n |		     | bkt 1 |<-> t0| t1| t2| tn|
	    |	    |		     |	     |	|   |	|   |	|
	    +---+---+		     +---+---+	+---+---+---+---+
		|     Timer adapter	 |
	    +---+---+		     +---+---+
	    |	    |		     |	     |
	    | bkt 4 |		     | bkt 2 |<--- Current bucket
	    |	    |		     |	     |
	    +---+---+		     +---+---+
		 |	+-------+	|
		 |	|	|	|
		 +------+ bkt 3	+-------+
			|	|
			+-------+

        It  has a virtual monotonically increasing 64-bit timer adapter clock
	 based on enum rte_event_timer_adapter_clk_src clock source. The clock
	 source	could be a CPU clock, or a platform dependent external clock.

        The application creates a timer adapter instance with given the clock
	 source, the total number of event timers, and a  resolution(expressed
	 in ns)	to traverse between the	buckets.

        Each  timer  adapter  may have	0 to n buckets based on	the configured
	 max timeout(max_tmo_ns) and resolution(timer_tick_ns).	Upon  starting
	 the  timer  adapter,  the  adapter  starts  ticking  at timer_tick_ns
	 resolution.

        The application arms an event timer that  will	 expire	 timer_tick_ns
	 from now.

        The  application  can cancel an armed timer and no timer expiry event
	 will be generated.

        If a timer expires then the library injects the timer expiry event in
	 the designated	event queue.

        The	timer	 expiry	   event    will    be	  received     through
	 rte_event_dequeue_burst.

        The application frees the timer adapter instance.

       Multiple	 timer	adapters  can  be  created  with  a  varying  level of
       resolution for various expiry use cases that run	in parallel.

       Before using the	timer adapter,	the  application  has  to  create  and
       configure an event device along with the	event port. Based on the event
       device capability it might require creating an additional event port to
       be used by the timer adapter.

       The   application   creates   the   event   timer   adapter  using  the
       rte_event_timer_adapter_create(). The event device id is	passed to this
       function, inside	this function the event	device capability is  checked,
       and  if	an  in-built  port  is absent the application uses the default
       function	to create a new	producer port.

       The	application	 may	  also	    use	     the      function
       rte_event_timer_adapter_create_ext()  to	 have  granular	 control  over
       producer	port creation in a case	where the in-built port	is absent.

       After creating the timer	adapter, the application has to	start it using
       rte_event_timer_adapter_start().	The buckets are	traversed from 0 to n;
       when the	adapter	ticks, the next	bucket is visited. Each	time, the list
       per bucket is processed,	and  timer  expiry  events  are	 sent  to  the
       designated event	queue.

       The   application   can	 arm  one  or  more  event  timers  using  the
       rte_event_timer_arm_burst(). The	timeout_ticks represents the number of
       timer_tick_ns after which the timer has to expire. The timeout at which
       the timers expire can be	grouped	or be independent of each event	 timer
       instance.  rte_event_timer_arm_tmo_tick_burst()	addresses  the	former
       case and	rte_event_timer_arm_burst() addresses the latter case.

       The  application	 can  cancel  the  timers  from	 expiring  using   the
       rte_event_timer_cancel_burst().

       On  the secondary process, rte_event_timer_adapter_lookup() can be used
       to get the timer	adapter	pointer	from its  id  and  use	it  to	invoke
       fastpath	operations such	as arm and cancel.

       Some of the use cases of	event timer adapter are	Beacon Timers, Generic
       SW  Timeout,  Wireless  MAC  Scheduling,	 3G  Frame  Protocols,	Packet
       Scheduling, Protocol Retransmission  Timers,  Supervision  Timers.  All
       these use cases require high resolution and low time drift.

       Definition in file rte_event_timer_adapter.h.

Macro Definition Documentation
   #define RTE_EVENT_TIMER_ADAPTER_F_ADJUST_RES	  (1ULL	<< 0)
       The  event  timer  adapter  implementation  may have constraints	on the
       resolution (timer_tick_ns) and maximum timer expiry timeout(max_tmo_ns)
       based on	the given timer	adapter	or system. If this flag	 is  set,  the
       implementation  adjusts	the resolution and maximum timeout to the best
       possible	configuration.	On  successful	timer  adapter	creation,  the
       application  can	 get  the  configured  resolution and max timeout with
       rte_event_timer_adapter_get_info().

       See also
	   struct rte_event_timer_adapter_info::min_resolution_ns

	   struct rte_event_timer_adapter_info::max_tmo_ns

       Definition at line 145 of file rte_event_timer_adapter.h.

   #define RTE_EVENT_TIMER_ADAPTER_F_SP_PUT   (1ULL << 1)
       rte_event_timer_arm_burst() API to be used in single producer mode.

       See also
	   struct rte_event_timer_adapter_conf::flags

       Definition at line 150 of file rte_event_timer_adapter.h.

   #define RTE_EVENT_TIMER_ADAPTER_F_PERIODIC	(1ULL << 2)
       Flag to configure an event timer	adapter	in periodic mode; non-periodic
       mode is the default. A timer will fire once or periodically  until  the
       timer is	cancelled based	on the adapter mode.

       See also
	   struct rte_event_timer_adapter_conf::flags

       Definition at line 158 of file rte_event_timer_adapter.h.

Typedef	Documentation
   typedef int(* rte_event_timer_adapter_port_conf_cb_t) (uint16_t id, uint8_t
       event_dev_id, uint8_t *event_port_id, void *conf_arg)
       Callback	function type for producer port	creation.

       Definition at line 205 of file rte_event_timer_adapter.h.

Enumeration Type Documentation
   enum	rte_event_timer_adapter_clk_src
       Timer adapter clock source

       Enumerator

       RTE_EVENT_TIMER_ADAPTER_CPU_CLK
	      Use CPU clock as the clock source.

       RTE_EVENT_TIMER_ADAPTER_EXT_CLK0
	      Platform dependent external clock	source 0.

       RTE_EVENT_TIMER_ADAPTER_EXT_CLK1
	      Platform dependent external clock	source 1.

       RTE_EVENT_TIMER_ADAPTER_EXT_CLK2
	      Platform dependent external clock	source 2.

       RTE_EVENT_TIMER_ADAPTER_EXT_CLK3
	      Platform dependent external clock	source 3.

       Definition at line 121 of file rte_event_timer_adapter.h.

   enum	rte_event_timer_state
       Event timer state.

       Enumerator

       RTE_EVENT_TIMER_NOT_ARMED
	      Event timer not armed.

       RTE_EVENT_TIMER_ARMED
	      Event timer successfully armed.

       RTE_EVENT_TIMER_CANCELED
	      Event timer successfully canceled.

       RTE_EVENT_TIMER_ERROR
	      Generic event timer error.

       RTE_EVENT_TIMER_ERROR_TOOEARLY
	      Event  timer  timeout tick value is too small for	the adapter to
	      handle, given its	configured resolution.

       RTE_EVENT_TIMER_ERROR_TOOLATE
	      Event timer timeout tick is greater than the maximum timeout.

       Definition at line 455 of file rte_event_timer_adapter.h.

Function Documentation
   struct  rte_event_timer_adapter  *  rte_event_timer_adapter_create	(const
       struct rte_event_timer_adapter_conf * conf)
       Create an event timer adapter.

       This  function  must  be	invoked	first before any other function	in the
       API.

       When   this   API   is	used   for    creating	  adapter    instance,
       rte_event_dev_config::nb_event_ports  is	automatically incremented, and
       the event device	is reconfigured	 with  additional  event  port	during
       service	initialization.	 This  event  device  reconfigure  logic  also
       increments  the	rte_event_dev_config::nb_single_link_event_port_queues
       parameter   if	the   adapter	event	port   config	is   of	  type
       RTE_EVENT_PORT_CFG_SINGLE_LINK.

       Application     no      longer	   needs      to      account	   for
       rte_event_dev_config::nb_event_ports				   and
       rte_event_dev_config::nb_single_link_event_port_queues	    parameters
       required	 for  Timer  adapter  in  event	 device	configuration when the
       adapter is created with this API.

       Parameters
	   conf	The event timer	adapter	configuration structure.

       Returns
	   A pointer to	the new	allocated event	timer adapter on success. NULL
	   on error  with  rte_errno  set  appropriately.  Possible  rte_errno
	   values include:

	    ERANGE: timer_tick_ns is not in supported range.

	    ENOMEM:   unable	to  allocate  sufficient  memory  for  adapter
	     instances

	    EINVAL: invalid event device identifier specified in config

	    ENOSPC: maximum number of adapters	already	created

	    EIO: event	device reconfiguration and restart error. The  adapter
	     reconfigures  the event device with an additional port by default
	     if	it is required to use a	 service  to  manage  timers.  If  the
	     device  had  been	started	 before	 this  call,  this  error code
	     indicates	an  error   in	 restart   following   an   error   in
	     reconfiguration, i.e., a combination of the two error codes.

   struct  rte_event_timer_adapter * rte_event_timer_adapter_create_ext	(const
       struct	       rte_event_timer_adapter_conf	     *		 conf,
       rte_event_timer_adapter_port_conf_cb_t conf_cb, void * conf_arg)
       Create a	timer adapter with the supplied	callback.

       This  function  can  be	used  to have a	more granular control over the
       timer adapter creation. If a built-in port is absent, then the function
       uses the	callback provided to create and	get the	port id	to be used  as
       a producer port.

       Parameters
	   conf	The timer adapter configuration	structure
	   conf_cb The port config callback function.
	   conf_arg Opaque pointer to the argument for the callback function

       Returns
	   A pointer to	the new	allocated event	timer adapter on success. NULL
	   on  error  with  rte_errno  set  appropriately.  Possible rte_errno
	   values include:

	    ERANGE: timer_tick_ns is not in supported range.

	    ENOMEM:  unable  to  allocate  sufficient	memory	 for   adapter
	     instances

	    EINVAL: invalid event device identifier specified in config

	    ENOSPC: maximum number of adapters	already	created

   int	rte_event_timer_adapter_get_info (const	struct rte_event_timer_adapter
       * adapter, struct rte_event_timer_adapter_info *	adapter_info)
       Retrieve	the contextual information of an event timer adapter.

       Parameters
	   adapter A pointer to	the event timer	adapter	structure.
	   adapter_info	   A	pointer	   to	 a    structure	   of	  type
	   rte_event_timer_adapter_info	 to  be	 filled	 with  the  contextual
	   information of the adapter.

       Returns

	    0:	Success, driver	updates	 the  contextual  information  of  the
	     timer adapter

	    <0: Error code returned by	the driver info	get function.

	    -EINVAL: adapter identifier invalid

       See also
	   RTE_EVENT_TIMER_ADAPTER_F_ADJUST_RES,			struct
	   rte_event_timer_adapter_info

   int rte_event_timer_adapter_start (const struct  rte_event_timer_adapter  *
       adapter)
       Start a timer adapter.

       The  adapter  start  step  is  the last one and consists	of setting the
       timer adapter to	start accepting	the  timers  and  schedules  to	 event
       queues.

       On  success,  all basic functions exported by the API (timer arm, timer
       cancel and so on) can be	invoked.

       Parameters
	   adapter A pointer to	the event timer	adapter	structure.

       Returns

	    0:	Success, adapter started.

	    <0: Error code returned by	the driver start function.

	    -EINVAL if	adapter	identifier invalid

	    -ENOENT if	software adapter but no	service	core mapped

	    -ENOTSUP if software adapter  and	more  than  one	 service  core
	     mapped

	    -EALREADY if adapter has already been started

       Note
	   The eventdev	to which the event_timer_adapter is connected needs to
	   be started before calling rte_event_timer_adapter_start().

   int	rte_event_timer_adapter_stop  (const  struct rte_event_timer_adapter *
       adapter)
       Stop an event timer adapter.

       The    adapter	 can	be    restarted	    with     a	   call	    to
       rte_event_timer_adapter_start().

       Parameters
	   adapter A pointer to	the event timer	adapter	structure.

       Returns

	    0:	Success, adapter stopped.

	    <0: Error code returned by	the driver stop	function.

	    -EINVAL if	adapter	identifier invalid

   struct  rte_event_timer_adapter  * rte_event_timer_adapter_lookup (uint16_t
       adapter_id)
       Lookup an event timer adapter using its identifier.

       If an event timer adapter was created in	another	process	with the  same
       identifier, this	function will locate its state and set up access to it
       so that it can be used in this process.

       Parameters
	   adapter_id The event	timer adapter identifier.

       Returns
	   A  pointer  to  the	event timer adapter matching the identifier on
	   success. NULL on error with rte_errno set  appropriately.  Possible
	   rte_errno values include:

	    ENOENT - requested	entry not available to return.

   int rte_event_timer_adapter_free (struct rte_event_timer_adapter * adapter)

       Free an event timer adapter.

       Destroy an event	timer adapter, freeing all resources.

       Before  invoking	 this  function, the application must wait for all the
       armed timers to expire or cancel	the outstanding	armed timers.

       Parameters
	   adapter A pointer to	an event timer adapter structure.

       Returns

	    0:	Successfully freed the event timer adapter resources.

	    <0: Failed	to free	the event timer	adapter	resources.

	    -EAGAIN: adapter is busy; timers outstanding

	    -EBUSY: stop hasn't been called for this adapter yet

	    -EINVAL: adapter id invalid, or adapter invalid

   int rte_event_timer_adapter_service_id_get (struct  rte_event_timer_adapter
       * adapter, uint32_t * service_id)
       Retrieve	 the  service  ID  of  the event timer adapter.	If the adapter
       doesn't use an rte_service function, this function returns -ESRCH.

       Parameters
	   adapter A pointer to	an event timer adapter.
	   service_id A	pointer	to a  uint32_t,	 to  be	 filled	 in  with  the
	   service id.

       Returns

	    0:	Success

	    <0: Error code on failure

	    -ESRCH: the adapter does not require a service to operate

   int	rte_event_timer_adapter_stats_get  (struct  rte_event_timer_adapter  *
       adapter,	struct rte_event_timer_adapter_stats * stats)
       Retrieve	statistics for an event	timer adapter instance.

       Parameters
	   adapter A pointer to	an event timer adapter structure.
	   stats A pointer to a	structure to fill with statistics.

       Returns

	    0:	Successfully retrieved.

	    <0: Failure; error	code returned.

   int rte_event_timer_adapter_stats_reset (struct  rte_event_timer_adapter  *
       adapter)
       Reset statistics	for an event timer adapter instance.

       Parameters
	   adapter A pointer to	an event timer adapter structure.

       Returns

	    0:	Successfully reset;

	    <0: Failure; error	code returned.

   static      uint16_t	     rte_event_timer_arm_burst	    (const	struct
       rte_event_timer_adapter * adapter, struct  rte_event_timer  **  evtims,
       uint16_t	nb_evtims) [inline],  [static]
       Arm  a  burst of	event timers with separate expiration timeout tick for
       each event timer.

       Before  calling	this  function,	 the  application   allocates	struct
       rte_event_timer	objects	 from  mempool or huge page backed application
       buffers of desired size.	On successful allocation, application  updates
       the  struct rte_event_timer attributes such as expiry event attributes,
       timeout ticks from now. This  function  submits	the  event  timer  arm
       requests	 to  the event timer adapter and on expiry, the	events will be
       injected	to  designated	event  queue.  Timer  expiry  events  will  be
       generated  once or periodically until cancellation based	on the adapter
       mode.

       Parameters
	   adapter A pointer to	an event timer adapter structure.
	   evtims Pointer to an	 array	of  objects  of	 type  rte_event_timer
	   structure.
	   nb_evtims Number of event timers in the supplied array.

       Returns
	   The number of successfully armed event timers. The return value can
	   be  less  than  the value of	the nb_evtims parameter. If the	return
	   value is less than nb_evtims, the remaining event timers at the end
	   of evtims are not consumed, and the caller  has  to	take  care  of
	   them,  and  rte_errno  is  set  accordingly.	 Possible errno	values
	   include:

	    EINVAL Invalid timer adapter, expiry event	queue ID  is  invalid,
	     or	an expiry event's sched	type doesn't match the capabilities of
	     the destination event queue.

	    EAGAIN Specified timer adapter is not running

	    EALREADY A	timer was encountered that was already armed

       See also
	   RTE_EVENT_TIMER_ADAPTER_F_PERIODIC

       Definition at line 598 of file rte_event_timer_adapter.h.

   static    uint16_t	 rte_event_timer_arm_tmo_tick_burst    (const	struct
       rte_event_timer_adapter * adapter, struct  rte_event_timer  **  evtims,
       const  uint64_t	timeout_ticks,	const  uint16_t	 nb_evtims)  [inline],
       [static]
       Arm a burst of event timers with	same expiration	timeout	tick.

       Provides	the same functionality as rte_event_timer_arm_burst(),	except
       that  application  can  use this	API when all the event timers have the
       same timeout expiration tick. This specialized function can provide the
       additional hint to the adapter implementation and optimize if possible.

       Parameters
	   adapter A pointer to	an event timer adapter structure.
	   evtims Points to  an	 array	of  objects  of	 type  rte_event_timer
	   structure.
	   timeout_ticks  The  number  of  ticks  in  which  the timers	should
	   expire.
	   nb_evtims Number of event timers in the supplied array.

       Returns
	   The number of successfully armed event timers. The return value can
	   be less than	the value of the nb_evtims parameter.  If  the	return
	   value is less than nb_evtims, the remaining event timers at the end
	   of  evtims  are  not	 consumed,  and	the caller has to take care of
	   them, and rte_errno	is  set	 accordingly.  Possible	 errno	values
	   include:

	    EINVAL  Invalid  timer adapter, expiry event queue	ID is invalid,
	     or	an expiry event's sched	type doesn't match the capabilities of
	     the destination event queue.

	    EAGAIN Specified event timer adapter is not running

	    EALREADY A	timer was encountered that was already armed

       Definition at line 641 of file rte_event_timer_adapter.h.

   static     uint16_t	   rte_event_timer_cancel_burst	    (const	struct
       rte_event_timer_adapter	*  adapter,  struct rte_event_timer ** evtims,
       uint16_t	nb_evtims) [inline],  [static]
       Cancel a	burst of event	timers	from  being  scheduled	to  the	 event
       device.

       Parameters
	   adapter A pointer to	an event timer adapter structure.
	   evtims  Points  to  an  array  of  objects  of type rte_event_timer
	   structure
	   nb_evtims Number of event timer instances in	the supplied array.

       Returns
	   The number of successfully canceled event timers. The return	 value
	   can	be  less  than	the  value  of the nb_evtims parameter.	If the
	   return value	is less	than nb_evtims,	the remaining event timers  at
	   the end of evtims are not consumed, and the caller has to take care
	   of  them,  and  rte_errno is	set accordingly. Possible errno	values
	   include:

	    EINVAL Invalid timer adapter identifier

	    EAGAIN Specified timer adapter is not running

	    EALREADY A	timer was encountered that was already canceled

       Definition at line 678 of file rte_event_timer_adapter.h.

   __rte_experimental int  rte_event_timer_remaining_ticks_get	(const	struct
       rte_event_timer_adapter	*  adapter,  const  struct  rte_event_timer  *
       evtim, uint64_t * ticks_remaining)
       Get the number of ticks remaining until event timer expiry.

       Parameters
	   adapter A pointer to	an event timer adapter structure
	   evtim A pointer to an rte_event_timer structure
	   ticks_remaining Pointer to variable into which to write the	number
	   of ticks remaining until event timer	expiry

       Returns

	    0:	Success

	    -EINVAL  Invalid  timer  adapter identifier or the	event timer is
	     not in the	armed state or ticks_remaining is NULL

	    -ENOTSUP The timer	adapter	implementation does not	 support  this
	     API.

Author
       Generated automatically by Doxygen for DPDK from	the source code.

Version	25.11.0			Thu Jun	11 2026	  rte_event_timer_adapter.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=rte_event_timer_adapter_free&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help