On Fri, Jun 16, 2017 at 5:49 AM, Petri Savolainen
<petri.savolai...@linaro.org> wrote:
> Event subtype gives more detailed information about the event.
> Two subtypes (basic and IPSEC packet) are introduced initially.
> Later on, other packet producing APIs (crypto, comp, etc) may
> also produce packet events with additional subtypes.
>
> Signed-off-by: Petri Savolainen <petri.savolai...@linaro.org>
> ---
>  include/odp/api/spec/event.h                       | 80 
> ++++++++++++++++++++--
>  include/odp/arch/default/api/abi/event.h           |  9 ++-
>  .../include/odp/api/plat/event_types.h             |  8 ++-
>  3 files changed, 89 insertions(+), 8 deletions(-)
>
> diff --git a/include/odp/api/spec/event.h b/include/odp/api/spec/event.h
> index f22efce5..2ad3ce84 100644
> --- a/include/odp/api/spec/event.h
> +++ b/include/odp/api/spec/event.h
> @@ -37,21 +37,91 @@ extern "C" {
>
>  /**
>   * @typedef odp_event_type_t
> - * ODP event types:
> - * ODP_EVENT_BUFFER, ODP_EVENT_PACKET, ODP_EVENT_TIMEOUT,
> - * ODP_EVENT_CRYPTO_COMPL, ODP_EVENT_IPSEC_RESULT, ODP_EVENT_IPSEC_STATUS
> + * Event type
> + *
> + * Event type specifies purpose and general format of an event. It can be
> + * checked with odp_event_type() or odp_event_types(). Each event type has
> + * functions (e.g. odp_buffer_from_event()) to convert between the generic 
> event
> + * handle (odp_event_t) and the type specific handle (e.g. odp_buffer_t).
> + * Results are undefined, if conversion function of a wrong event type is 
> used.
> + * Application cannot change event type by chaining conversion functions.
> + *
> + * List of event types:
> + * - ODP_EVENT_BUFFER
> + *     - Buffer event (odp_buffer_t) for simple data storage and message 
> passing
> + * - ODP_EVENT_PACKET
> + *     - Packet event (odp_packet_t) containing packet data and plenty of

Why "plenty of"? "containing packet data and associated metadata"
seems sufficient.

> + *       packet processing related metadata
> + * - ODP_EVENT_TIMEOUT
> + *     - Timeout event (odp_timeout_t) from a timer
> + * - ODP_EVENT_CRYPTO_COMPL
> + *     - Crypto completion event (odp_crypto_compl_t)
> + * - ODP_EVENT_IPSEC_STATUS
> + *     - IPSEC status update event (odp_ipsec_status_t)
>   */
>
>  /**
> - * Get event type
> + * @typedef odp_event_subtype_t
> + * Event subtype
>   *
> - * @param event    Event handle
> + * Event subtype expands event type specification by providing more detailed
> + * purpose and format of an event. It can be checked with 
> odp_event_subtype() or
> + * odp_event_types(). Each event subtype may define specific functions
> + * (e.g. odp_ipsec_packet_from_event()) to convert between the generic event
> + * handle (odp_event_t) and event type specific handle (e.g. odp_packet_t). 
> When
> + * subtype is known, these subtype specific functions should be preferred 
> over
> + * the event type general function (e.g. odp_packet_from_event()). Results 
> are
> + * undefined, if conversion function of a wrong event subtype is used.
> + * Application cannot change event subtype by chaining conversion functions.
> + *
> + *  List of event subtypes:
> + * - ODP_EVENT_PACKET_BASIC
> + *     - Packet event (odp_packet_t) with basic packet metadata
> + * - ODP_EVENT_PACKET_IPSEC
> + *     - Packet event (odp_packet_t) generated as a result of an IPsec
> + *       operation. It contains IPSEC specific metadata in addition to the 
> basic
> + *       packet metadata.
> + * - ODP_EVENT_NO_SUBTYPE
> + *     - An event type does not have any subtypes defined
> + */
> +
> +/**
> + * Event type of an event
> + *
> + * Event type specifies purpose and general format of an event.
> + *
> + * @param      event    Event handle
>   *
>   * @return Event type
>   */
>  odp_event_type_t odp_event_type(odp_event_t event);
>
>  /**
> + * Event subtype of an event
> + *
> + * Event subtype expands event type specification by providing more detailed
> + * purpose and format of an event.
> + *
> + * @param      event    Event handle
> + *
> + * @return Event subtype
> + */
> +odp_event_subtype_t odp_event_subtype(odp_event_t event);
> +
> +/**
> + * Event type and subtype of an event
> + *
> + * Returns event type and outputs event subtype.
> + *
> + * @param      event    Event handle
> + * @param[out] subtype  Pointer to event subtype for output
> + *
> + * @return Event type
> + */
> +odp_event_type_t odp_event_types(odp_event_t event,
> +                                odp_event_subtype_t *subtype);
> +
> +/**
>   * Get printable value for an odp_event_t
>   *
>   * @param hdl  odp_event_t handle to be printed
> diff --git a/include/odp/arch/default/api/abi/event.h 
> b/include/odp/arch/default/api/abi/event.h
> index 87220d63..ab3c0f75 100644
> --- a/include/odp/arch/default/api/abi/event.h
> +++ b/include/odp/arch/default/api/abi/event.h
> @@ -29,10 +29,15 @@ typedef enum odp_event_type_t {
>         ODP_EVENT_PACKET       = 2,
>         ODP_EVENT_TIMEOUT      = 3,
>         ODP_EVENT_CRYPTO_COMPL = 4,
> -       ODP_EVENT_IPSEC_RESULT = 5,
> -       ODP_EVENT_IPSEC_STATUS = 6
> +       ODP_EVENT_IPSEC_STATUS = 5
>  } odp_event_type_t;
>
> +typedef enum odp_event_subtype_t {
> +       ODP_EVENT_NO_SUBTYPE   = 0,
> +       ODP_EVENT_PACKET_BASIC = 1,
> +       ODP_EVENT_PACKET_IPSEC = 2
> +} odp_event_subtype_t;
> +
>  /**
>   * @}
>   */
> diff --git a/platform/linux-generic/include/odp/api/plat/event_types.h 
> b/platform/linux-generic/include/odp/api/plat/event_types.h
> index 0f517834..5b3a07e3 100644
> --- a/platform/linux-generic/include/odp/api/plat/event_types.h
> +++ b/platform/linux-generic/include/odp/api/plat/event_types.h
> @@ -39,9 +39,15 @@ typedef enum odp_event_type_t {
>         ODP_EVENT_PACKET       = 2,
>         ODP_EVENT_TIMEOUT      = 3,
>         ODP_EVENT_CRYPTO_COMPL = 4,
> -       ODP_EVENT_IPSEC_RESULT = 5
> +       ODP_EVENT_IPSEC_STATUS = 5
>  } odp_event_type_t;
>
> +typedef enum odp_event_subtype_t {
> +       ODP_EVENT_NO_SUBTYPE   = 0,
> +       ODP_EVENT_PACKET_BASIC = 1,
> +       ODP_EVENT_PACKET_IPSEC = 2
> +} odp_event_subtype_t;
> +
>  /**
>   * @}
>   */
> --
> 2.13.0
>

Reply via email to