If you want to use an Ethernet-like internal transport, you might was well
use a standard one like TIPC <http://tipc.sourceforge.net/> rather than
reinventing this particular wheel.

On Wed, May 27, 2015 at 4:49 AM, Ola Liljedahl <ola.liljed...@linaro.org>
wrote:

> On 27 May 2015 at 11:10, Alexandru Badicioiu <
> alexandru.badici...@linaro.org> wrote:
>
>>
>>
>> On 27 May 2015 at 11:08, Ola Liljedahl <ola.liljed...@linaro.org> wrote:
>>
>>> Here is my third attempt at a ODP API for MSGIO - asynchronous message
>>> passing
>>> based IPC for a shared nothing architecture.
>>>
>>> IPC/message passing can be separated into a number of different layers.
>>> 1) Message formats and protocols (as seen by the user).
>>> 2) API - defines syntax and semantics of MSGIO operations.
>>> 3) Transport interface - defines a binary packet format used by MSGIO
>>>    endpoints/implementations. Cf. OSI network layer.
>>> 4) Transport layer - implements the transport of message packet between
>>>    different endpoints. Cf. OSI link layer.
>>>
>>> #1 is application specific and there are many different standards (e.g.
>>> Linux
>>> Netlink, NETCONF, OpenFlow, YouNameIt) intended for different use cases.
>>> #3 may be implementation specific but is important for interoperatibility
>>> (binary compatibility). If the user message (payload), operation and
>>> parameters are encoded in a well-defined way (e.g. some kind of packet
>>> format
>>> which includes operation, sender and receiver addresses, payload etc),
>>> inter-operatibility between different ODP/MSGIO implementations may be
>>> achieved or simplified.
>>> #4 is implementation (platform) specific.
>>>
>>> This proposal focuses on the API which is fundamental for source code
>>> compatibility between different platforms (ODP implementations) - this
>>> being
>>> the primary purpose of ODP. A packet format for messages will be
>>> specified as
>>> part of the reference implementation and may be seen as a proposal for a
>>> standard packet format for binary compatibility between different
>>> ODP/MSGIO
>>> implementations.
>>>
>>> All MSGIO calls are non-blocking (with the possible exception of
>>> odp_msgio_create, odp_msgio_activate and odp_msgio_destroy). Message
>>> transfer is asynchronous so it is not possible to return any status
>>> operation concerning the eventual (or remote) result of an operation.
>>>
>>> The semantics of MSGIO message passing is that sending a message to an
>>> endpoint
>>> will always look like it succeeds. The appearance of endpoints is
>>> explicitly
>>> notified through user-defined messages specified in the
>>> odp_msgio_lookup()
>>> call. Similarly, the disappearance (e.g. death of or otherwise lost
>>> connection
>>> to endpoint) is also explicitly notified through user-defined messages
>>> specified in the odp_msgio_monitor() call. The send call does not fail
>>> because
>>> the addressed endpoint has disappeared, the message is just silently
>>> discarded.
>>>
>>> Message delivery into the recipient address space is ordered (per
>>> priority)
>>> and reliable. Delivery of message N implies delivery of all messages <N
>>> (of the same priority). All messages (accepted by MSGIO send operation)
>>> will
>>> be delivered up to the point of endpoint termination or lost connection
>>> where no more messages will be delivered. Actual reception (dequeueing)
>>> and
>>> processing by the recipient is not guaranteed (use end-to-end
>>> acknowledgements
>>> for that).
>>>
>>> MSGIO endpoints can be seen as interfaces (taps) to an internal reliable
>>> multidrop network where each endpoint has a unique address which is only
>>> valid for the lifetime of the endpoint. I.e. if an endpoint is destroyed
>>> and then recreated (with the same name), the new endpoint will have a
>>> new unique address (eventually endpoints addresses will have to be
>>> recycled
>>> but not for a very long time). Endpoints names do not necessarily have
>>> to be
>>> unique. The scope of message network is not defined but it is expected
>>> that
>>> the scope by default corresponds to an OS instance (e.g. virtual
>>> machine).
>>>
>>> Proposed transport packet for message I/O (not visible to the user):
>>> uint8_t dest_addr[6]; /* Unique address of destination endpoint */
>>> uint8_t src_addr[6]; /* Unique address of source endpoint */
>>> uint16_t frametype_o; /* Outer frametype, 0x8100 */
>>> uint16_t pcp_vid; /* 3 bits of Priority Code Point, 5 bits reserved */
>>> uint16_t frametype_i; /* Inner frametype, TBD */
>>> uint8_t payload[]; /* User message */
>>> Looks very much like a VLAN-tagged Ethernet frame so should easily be
>>> transported by and processed by Ethernet HW & SW
>>
>> Why to use Ethernet HW & SW to transport messages inside an OS instance?
>> Usually Ethernet HW & SW (drivers?) deal with sending/receiving to/from the
>> wire.
>>
> I don't say you have to. I am just suggesting that *if* we standardize the
> "packet" (message payload + metadata) format, we might as well use a
> well-known format that likely can be processed by preexisting HW and SW
> blocks. Possibly this will simplify classification, queueing and scheduling
> of messages.
>
>
>
>> An above requirement was referring to ordering which must be defined by
>> the transport layer - how this format ensures ordered delivery at the
>> destination?
>>
> The packet format is just the format of the message payload + metadata as
> passed to and from the transport layer.
>
> The transport layer can (if necessary) add its own encapsulation and state
> machine that allows for ordered reliable delivery. That's nothing that has
> to be seen by the user of the transport layer. The users of TCP don't see
> the TCP header or state machine.
>
>
> .
>>> Encoding of publish/lookup/monitor operations TBD.
>>>
>>> v3:
>>> Renamed Message Bus (MBUS) to Message I/O (MSGIO).
>>> Changed all definitions to use "msgio" instead of "mbus" prefix/infix.
>>> odp_msgio_create(): removed default input queue parameter.
>>> Removed odp_mbus_inq_setdef() and odp_mbus_inq_remdef().
>>> All input queues must now be specified using odp_msgio_inq_set() before
>>> the MSGIO endpoint is activated.
>>> Added odp_msgio_activate().
>>> Added odp_message_push_head() and odp_message_pull_head().
>>> Updated some function descriptions in msgio.h.
>>>
>>> v2:
>>> Split off all message definitions in a separate file message.h
>>> Renamed Inter Process Communication (IPC) to Message Bus (MBUS).
>>> Changed all definitions to use "mbus" instead of "ipc" prefix/infix.
>>> Renamed odp_ipc_msg_t to odp_message_t.
>>> odp_mbus_create(): Added parameter for default input queue. Explicitly
>>> state
>>> that the pool must be use type ODP_EVENT_MESSAGE.
>>> Renamed odp_ipc_resolve() to odp_mbus_lookup().
>>> odp_mbus_send(): Added priority parameter.
>>> Renamed odp_ipc_sender() to odp_message_sender().
>>> Renamed odp_ipc_data() to odp_message_data().
>>> Renamed odp_ipc_length() to odp_message_length().
>>> Renamed odp_ipc_reset() to odp_message_length_set().
>>> Renamed odp_ipc_alloc() to odp_message_alloc().
>>> Renamed odp_ipc_free() to odp_message_free().
>>> odp_message_alloc(): Corrected name of invalid message handle.
>>> Added message priorities and calls to set and remove input queues for
>>> specific priorities: odp_mbus_inq_set(), odp_mbus_inq_rem().
>>>
>>> Signed-off-by: Ola Liljedahl <ola.liljed...@linaro.org>
>>> ---
>>> (This document/code contribution attached is provided under the terms of
>>> agreement LES-LTM-21309)
>>>
>>>  include/odp/api/message.h                          | 199
>>> ++++++++++++++++++
>>>  include/odp/api/msgio.h                            | 222
>>> +++++++++++++++++++++
>>>  platform/linux-generic/include/odp/message.h       |  39 ++++
>>>  platform/linux-generic/include/odp/msgio.h         |  40 ++++
>>>  .../linux-generic/include/odp/plat/message_types.h |  47 +++++
>>>  .../linux-generic/include/odp/plat/msgio_types.h   |  59 ++++++
>>>  6 files changed, 606 insertions(+)
>>>  create mode 100644 include/odp/api/message.h
>>>  create mode 100644 include/odp/api/msgio.h
>>>  create mode 100644 platform/linux-generic/include/odp/message.h
>>>  create mode 100644 platform/linux-generic/include/odp/msgio.h
>>>  create mode 100644
>>> platform/linux-generic/include/odp/plat/message_types.h
>>>  create mode 100644 platform/linux-generic/include/odp/plat/msgio_types.h
>>>
>>> diff --git a/include/odp/api/message.h b/include/odp/api/message.h
>>> new file mode 100644
>>> index 0000000..76697fb
>>> --- /dev/null
>>> +++ b/include/odp/api/message.h
>>> @@ -0,0 +1,199 @@
>>> +/* Copyright (c) 2015, Linaro Limited
>>> + * All rights reserved.
>>> + *
>>> + * SPDX-License-Identifier:     BSD-3-Clause
>>> + */
>>> +
>>> +
>>> +/**
>>> + * @file
>>> + *
>>> + * ODP Message event type
>>> + */
>>> +
>>> +#ifndef ODP_API_MESSAGE_H_
>>> +#define ODP_API_MESSAGE_H_
>>> +
>>> +#ifdef __cplusplus
>>> +extern "C" {
>>> +#endif
>>> +
>>> +/** @defgroup odp_message ODP MESSAGE
>>> + *  @{
>>> + */
>>> +
>>> +/**
>>> + * @typedef odp_message_t
>>> + * ODP message handle
>>> + */
>>> +
>>> +
>>> +/**
>>> + * Get address of sender (source) of message
>>> + *
>>> + * @param      msg  Message handle
>>> + * @param[out] addr Buffer to hold sender address
>>> + */
>>> +void odp_message_sender(odp_message_t msg,
>>> +                       uint8_t addr[ODP_MSGIO_ADDR_SIZE]);
>>> +
>>> +/**
>>> + * Message data pointer
>>> + *
>>> + * Return a pointer to the message data
>>> + *
>>> + * @param msg Message handle
>>> + *
>>> + * @return Pointer to the message data
>>> + */
>>> +void *odp_message_data(odp_message_t msg);
>>> +
>>> +/**
>>> + * Message data length
>>> + *
>>> + * Return length of the message data.
>>> + *
>>> + * @param msg Message handle
>>> + *
>>> + * @return Message length
>>> + */
>>> +uint32_t odp_message_length(const odp_message_t msg);
>>> +
>>> +/**
>>> + * Set message length
>>> + *
>>> + * Set length of the message data.
>>> + * Increase message data length by moving message tail into message
>>> tailroom.
>>> + * The actual message data is not modified.
>>> + *
>>> + * @param msg Message handle
>>> + * @param len New length
>>> + *
>>> + * @retval 0 on success
>>> + * @retval <0 on error (e.g. no enough tailroom)
>>> + */
>>> +int odp_message_length_set(const odp_message_t msg, uint32_t len);
>>> +
>>> +/**
>>> + * Message headroom length
>>> + *
>>> + * Return length of the message headroom
>>> + *
>>> + * @param msg Message handle
>>> + *
>>> + * @return Headroom length
>>> + */
>>> +uint32_t odp_message_headroom(const odp_message_t msg);
>>> +
>>> +/**
>>> + * Push out message head
>>> + *
>>> + * Increase message data length by moving message head into message
>>> headroom.
>>> + * Message headroom is decreased with the same amount. The message head
>>> may be
>>> + * pushed out up to 'headroom' bytes. Message is not modified if
>>> there's not
>>> + * enough headroom space.
>>> + *
>>> + * odp_message_xxx:
>>> + * length   += len
>>> + * headroom -= len
>>> + * data     -= len
>>> + *
>>> + * @param msg  Message handle
>>> + * @param len  Number of bytes to push the head (0 ... headroom)
>>> + *
>>> + * @return The new data pointer
>>> + * @retval NULL  Requested offset exceeds available headroom
>>> + *
>>> + * @see odp_message_headroom(), odp_message_pull_head()
>>> + */
>>> +void *odp_message_push_head(odp_message_t msg, uint32_t len);
>>> +
>>> +/**
>>> + * Pull in message head
>>> + *
>>> + * Decrease message data length by moving message head into message
>>> data.
>>> + * Message headroom is increased with the same amount. The message head
>>> may be
>>> + * pulled in up to 'length' bytes. Message is not modified if there's
>>> not
>>> + * enough data.
>>> + *
>>> + * odp_message_xxx:
>>> + * length   -= len
>>> + * headroom += len
>>> + * data     += len
>>> + *
>>> + * @param msg  Message handle
>>> + * @param len  Number of bytes to pull the head (0 ... length)
>>> + *
>>> + * @return The new data pointer
>>> + * @retval NULL  Requested offset exceeds available data
>>> + *
>>> + * @see odp_message_headroom(), odp_message_push_head()
>>> + */
>>> +void *odp_message_pull_head(odp_message_t msg, uint32_t len);
>>> +
>>> +/**
>>> + * Allocate message
>>> + *
>>> + * Allocate a message of a specific length.
>>> + *
>>> + * @param pool Message pool to allocate message from
>>> + * @param len Length of the allocated message
>>> + *
>>> + * @return Message handle on success
>>> + * @retval ODP_MESSAGE_INVALID on failure and errno set
>>> + */
>>> +odp_message_t odp_message_alloc(odp_pool_t pool, uint32_t len);
>>> +
>>> +/**
>>> + * Free message
>>> + *
>>> + * Free message back to the message pool it was allocated from.
>>> + *
>>> + * @param msg Handle of message to free
>>> + */
>>> +void odp_message_free(odp_message_t msg);
>>> +
>>> +/**
>>> + * Get message handle from event
>>> + *
>>> + * Converts an ODP_EVENT_MESSAGE type event to a message.
>>> + *
>>> + * @param ev   Event handle representing a message.
>>> + *
>>> + * @return Message handle
>>> + *
>>> + * @see odp_event_type()
>>> + */
>>> +odp_message_t odp_message_from_event(odp_event_t ev);
>>> +
>>> +/**
>>> + * Convert message handle to event
>>> + *
>>> + * @param msg  Message handle
>>> + *
>>> + * @return Event handle
>>> + */
>>> +odp_event_t odp_message_to_event(odp_message_t msg);
>>> +
>>> +/**
>>> + * Get printable value for an odp_message_t
>>> + *
>>> + * @param msg  Message handle to be printed
>>> + * @return     uint64_t value that can be used to print/display this
>>> + *            handle
>>> + *
>>> + * @note This routine is intended to be used for diagnostic purposes
>>> + * to enable applications to generate a printable value that represents
>>> + * an odp_message_t handle.
>>> + */
>>> +uint64_t odp_message_to_u64(odp_message_t msg);
>>> +
>>> +/**
>>> + * @}
>>> + */
>>> +
>>> +#ifdef __cplusplus
>>> +}
>>> +#endif
>>> +
>>> +#endif
>>> diff --git a/include/odp/api/msgio.h b/include/odp/api/msgio.h
>>> new file mode 100644
>>> index 0000000..8d73021
>>> --- /dev/null
>>> +++ b/include/odp/api/msgio.h
>>> @@ -0,0 +1,222 @@
>>> +/* Copyright (c) 2015, Linaro Limited
>>> + * All rights reserved.
>>> + *
>>> + * SPDX-License-Identifier:     BSD-3-Clause
>>> + */
>>> +
>>> +
>>> +/**
>>> + * @file
>>> + *
>>> + * ODP Message I/O API
>>> + */
>>> +
>>> +#ifndef ODP_API_MSGIO_H_
>>> +#define ODP_API_MSGIO_H_
>>> +
>>> +#ifdef __cplusplus
>>> +extern "C" {
>>> +#endif
>>> +
>>> +/** @defgroup odp_msgio ODP MSGIO
>>> + *  @{
>>> + */
>>> +
>>> +/**
>>> + * @typedef odp_msgio_t
>>> + * ODP message I/O handle
>>> + */
>>> +
>>> +/**
>>> + * @def ODP_MSGIO_ADDR_SIZE
>>> + * Size of the address of a message I/O endpoint
>>> + */
>>> +
>>> +/**
>>> + * @typedef odp_msgio_prio_t
>>> + * ODP MSGIO message priority
>>> + */
>>> +
>>> +/**
>>> + * @def ODP_MSGIO_PRIO_HIGHEST
>>> + * Highest MSGIO message priority
>>> + */
>>> +
>>> +/**
>>> + * @def ODP_MSGIO_PRIO_NORMAL
>>> + * Normal MSGIO message priority
>>> + */
>>> +
>>> +/**
>>> + * @def ODP_MSGIO_PRIO_LOWEST
>>> + * Lowest MSGIO message priority
>>> + */
>>> +
>>> +/**
>>> + * @def ODP_MSGIO_PRIO_DEFAULT
>>> + * Default MSGIO message priority
>>> + */
>>> +
>>> +
>>> +/**
>>> + * Create message I/O endpoint
>>> + *
>>> + * Create an message I/O endpoint. The scope of the message bus is
>>> + * not defined but it is expected that it by default encompasses the OS
>>> + * instance but no more.
>>> + *
>>> + * A unique address for the endpoint is created. The addresses for other
>>> + * endpoints can be obtained using the odp_msgio_lookup() call and
>>> specified
>>> + * in the odp_msgio_send() call.
>>> + *
>>> + * @param name Name of our endpoint
>>> + * @param pool Pool (of type ODP_EVENT_MESSAGE) for incoming messages
>>> + *
>>> + * @return Message I/O handle on success
>>> + * @retval ODP_MSGIO_INVALID on failure and errno set
>>> + */
>>> +odp_msgio_t odp_msgio_create(const char *name,
>>> +                            odp_pool_t pool);
>>> +
>>> +/**
>>> + * Set the input queue for a specific message priority
>>> + *
>>> + * @param msgio  Message I/O handle
>>> + * @param prio  Message priority
>>> + * @param queue Queue handle
>>> + *
>>> + * @retval  0 on success
>>> + * @retval <0 on failure
>>> + */
>>> +int odp_msgio_inq_set(odp_msgio_t msgio,
>>> +                     odp_msgio_prio_t prio,
>>> +                     odp_queue_t queue);
>>> +
>>> +/**
>>> + * Activate message I/O endpoint
>>> + *
>>> + * Make this endpoint visible (odp_msgio_lookup() messages will be
>>> returned).
>>> + * Enable transmission and reception of messages through the endpoint.
>>> + *
>>> + * @param msgio Message I/O handle
>>> + *
>>> + * @retval 0 on success
>>> + * @retval <0 on failure
>>> + */
>>> +int odp_msgio_activate(odp_msgio_t msgio);
>>> +
>>> +/**
>>> + * Destroy message I/O endpoint
>>> + *
>>> + * @param msgio Message I/O handle
>>> + *
>>> + * @retval 0 on success
>>> + * @retval <0 on failure
>>> + */
>>> +int odp_msgio_destroy(odp_msgio_t msgio);
>>> +
>>> +/**
>>> + * Remove the input queue for a specific message priority
>>> + *
>>> + * Remove (disassociate) the matching input queue from a message I/O
>>> endpoint.
>>> + * The queue itself is not touched.
>>> + *
>>> + * @param msgio  Message I/O handle
>>> + * @param prio  Message priority
>>> + *
>>> + * @retval 0 on success
>>> + * @retval <0 on failure
>>> + */
>>> +int odp_msgio_inq_rem(odp_msgio_t msgio,
>>> +                     odp_msgio_prio_t prio);
>>> +
>>> +/**
>>> + * Lookup endpoint by name
>>> + *
>>> + * Look up a current or future endpoint by name.
>>> + * When the endpoint exists, return the specified message (not
>>> necessarily the
>>> + * same message handle) with the endpoint as the sender.
>>> + *
>>> + * @param msgio Message I/O handle
>>> + * @param name Name to look up
>>> + * @param msg Message to return
>>> + */
>>> +void odp_msgio_lookup(odp_msgio_t msgio,
>>> +                     const char *name,
>>> +                     odp_message_t msg);
>>> +
>>> +/**
>>> + * Monitor endpoint
>>> + *
>>> + * Monitor an endpoint (which may already have disappeared).
>>> + * When the endpoint disappears, return the specified message (not
>>> necessarily
>>> + * the same message handle) with the endpoint as the sender.
>>> + *
>>> + * Unrecognized or invalid endpoint addresses are treated as
>>> non-existing
>>> + * endpoints.
>>> + *
>>> + * @param     msgio Message I/O handle
>>> + * @param[in] addr  Address of monitored endpoint
>>> + * @param     msg   Message to return
>>> + */
>>> +void odp_msgio_monitor(odp_msgio_t msgio,
>>> +                      const uint8_t addr[ODP_MSGIO_ADDR_SIZE],
>>> +                      odp_message_t msg);
>>> +
>>> +/**
>>> + * Send message
>>> + *
>>> + * Send a message to an endpoint (which may no longer exist).
>>> + *
>>> + * Message delivery into the recipient address space is ordered (per
>>> priority)
>>> + * and reliable. Delivery of message N implies delivery of all messages
>>> <N
>>> + * (of the same priority).
>>> + * All messages (accepted by MSGIO) will be delivered up to the point of
>>> + * recipient endpoint termination or lost connection where no more
>>> messages
>>> + * will be delivered.
>>> + *
>>> + * Actual reception (dequeueing) and processing by the recipient is not
>>> + * guaranteed (use user level acknowledgements for that).
>>> + *
>>> + * Monitor the remote endpoint to detect the disappearance or
>>> disconnection
>>> + * of the endpoint.
>>> + *
>>> + * A message may temporarily not be accepted for transmission (e.g. due
>>> + * to out of local buffer space), -1 will be returned and ODP errno set
>>> + * to EAGAIN.
>>> + *
>>> + * @param     msgio Message I/O handle
>>> + * @param     msg   Message to send
>>> + * @param     prio  Priority of message
>>> + * @param[in] addr  Address of recipient endpoint
>>> + *
>>> + * @retval 0 on success
>>> + * @retval <0 on error
>>> + */
>>> +int odp_msgio_send(odp_msgio_t msgio,
>>> +                  odp_message_t msg,
>>> +                  odp_msgio_prio_t prio,
>>> +                  const uint8_t addr[ODP_MSGIO_ADDR_SIZE]);
>>> +
>>> +/**
>>> + * Get printable value for an odp_msgio_t
>>> + *
>>> + * @param msgio  Message I/O handle to be printed
>>> + * @return       uint64_t value that can be used to print/display this
>>> + *              handle
>>> + *
>>> + * @note This routine is intended to be used for diagnostic purposes
>>> + * to enable applications to generate a printable value that represents
>>> + * an odp_msgio_t handle.
>>> + */
>>> +uint64_t odp_msgio_to_u64(odp_msgio_t msgio);
>>> +
>>> +/**
>>> + * @}
>>> + */
>>> +
>>> +#ifdef __cplusplus
>>> +}
>>> +#endif
>>> +
>>> +#endif
>>> diff --git a/platform/linux-generic/include/odp/message.h
>>> b/platform/linux-generic/include/odp/message.h
>>> new file mode 100644
>>> index 0000000..2a29f59
>>> --- /dev/null
>>> +++ b/platform/linux-generic/include/odp/message.h
>>> @@ -0,0 +1,39 @@
>>> +/* Copyright (c) 2013, Linaro Limited
>>> + * All rights reserved.
>>> + *
>>> + * SPDX-License-Identifier:     BSD-3-Clause
>>> + */
>>> +
>>> +/**
>>> + * @file
>>> + *
>>> + * ODP Message Bus
>>> + */
>>> +
>>> +#ifndef ODP_PLAT_MESSAGE_H_
>>> +#define ODP_PLAT_MESSAGE_H_
>>> +
>>> +#ifdef __cplusplus
>>> +extern "C" {
>>> +#endif
>>> +
>>> +#include <odp/std_types.h>
>>> +#include <odp/plat/pool_types.h>
>>> +#include <odp/plat/message_types.h>
>>> +#include <odp/plat/queue_types.h>
>>> +
>>> +/** @ingroup odp_message
>>> + *  @{
>>> + */
>>> +
>>> +/**
>>> + * @}
>>> + */
>>> +
>>> +#include <odp/api/message.h>
>>> +
>>> +#ifdef __cplusplus
>>> +}
>>> +#endif
>>> +
>>> +#endif
>>> diff --git a/platform/linux-generic/include/odp/msgio.h
>>> b/platform/linux-generic/include/odp/msgio.h
>>> new file mode 100644
>>> index 0000000..f45b3a2
>>> --- /dev/null
>>> +++ b/platform/linux-generic/include/odp/msgio.h
>>> @@ -0,0 +1,40 @@
>>> +/* Copyright (c) 2013, Linaro Limited
>>> + * All rights reserved.
>>> + *
>>> + * SPDX-License-Identifier:     BSD-3-Clause
>>> + */
>>> +
>>> +/**
>>> + * @file
>>> + *
>>> + * ODP Message Bus
>>> + */
>>> +
>>> +#ifndef ODP_PLAT_MSGIO_H_
>>> +#define ODP_PLAT_MSGIO_H_
>>> +
>>> +#ifdef __cplusplus
>>> +extern "C" {
>>> +#endif
>>> +
>>> +#include <odp/std_types.h>
>>> +#include <odp/plat/pool_types.h>
>>> +#include <odp/plat/msgio_types.h>
>>> +#include <odp/plat/message_types.h>
>>> +#include <odp/plat/queue_types.h>
>>> +
>>> +/** @ingroup odp_msgio
>>> + *  @{
>>> + */
>>> +
>>> +/**
>>> + * @}
>>> + */
>>> +
>>> +#include <odp/api/msgio.h>
>>> +
>>> +#ifdef __cplusplus
>>> +}
>>> +#endif
>>> +
>>> +#endif
>>> diff --git a/platform/linux-generic/include/odp/plat/message_types.h
>>> b/platform/linux-generic/include/odp/plat/message_types.h
>>> new file mode 100644
>>> index 0000000..3a42064
>>> --- /dev/null
>>> +++ b/platform/linux-generic/include/odp/plat/message_types.h
>>> @@ -0,0 +1,47 @@
>>> +/* Copyright (c) 2015, Linaro Limited
>>> + * All rights reserved.
>>> + *
>>> + * SPDX-License-Identifier: BSD-3-Clause
>>> + */
>>> +
>>> +
>>> +/**
>>> + * @file
>>> + *
>>> + * ODP Message message type
>>> + */
>>> +
>>> +#ifndef ODP_MESSAGE_TYPES_H_
>>> +#define ODP_MESSAGE_TYPES_H_
>>> +
>>> +#ifdef __cplusplus
>>> +extern "C" {
>>> +#endif
>>> +
>>> +#include <odp/std_types.h>
>>> +#include <odp/plat/strong_types.h>
>>> +
>>> +/** @addtogroup odp_message ODP message
>>> + *  Operations on a message.
>>> + *  @{
>>> + */
>>> +
>>> +typedef ODP_HANDLE_T(odp_message_t);
>>> +
>>> +#define ODP_MESSAGE_INVALID _odp_cast_scalar(odp_message_t, 0xffffffff)
>>> +
>>> +/** Get printable format of odp_message_t */
>>> +static inline uint64_t odp_message_to_u64(odp_message_t hdl)
>>> +{
>>> +       return _odp_pri(hdl);
>>> +}
>>> +
>>> +/**
>>> + * @}
>>> + */
>>> +
>>> +#ifdef __cplusplus
>>> +}
>>> +#endif
>>> +
>>> +#endif
>>> diff --git a/platform/linux-generic/include/odp/plat/msgio_types.h
>>> b/platform/linux-generic/include/odp/plat/msgio_types.h
>>> new file mode 100644
>>> index 0000000..9d9f9da
>>> --- /dev/null
>>> +++ b/platform/linux-generic/include/odp/plat/msgio_types.h
>>> @@ -0,0 +1,59 @@
>>> +/* Copyright (c) 2015, Linaro Limited
>>> + * All rights reserved.
>>> + *
>>> + * SPDX-License-Identifier: BSD-3-Clause
>>> + */
>>> +
>>> +
>>> +/**
>>> + * @file
>>> + *
>>> + * ODP Message bus types
>>> + */
>>> +
>>> +#ifndef ODP_MSGIO_TYPES_H_
>>> +#define ODP_MSGIO_TYPES_H_
>>> +
>>> +#ifdef __cplusplus
>>> +extern "C" {
>>> +#endif
>>> +
>>> +#include <odp/std_types.h>
>>> +#include <odp/plat/strong_types.h>
>>> +
>>> +/** @addtogroup odp_msgio ODP message bus
>>> + *  Operations on a message bus.
>>> + *  @{
>>> + */
>>> +
>>> +typedef int odp_msgio_prio_t;
>>> +
>>> +#define ODP_MSGIO_PRIO_HIGHEST  0
>>> +
>>> +#define ODP_MSGIO_PRIO_NORMAL   2
>>> +
>>> +#define ODP_MSGIO_PRIO_LOWEST   3
>>> +
>>> +#define ODP_MSGIO_PRIO_DEFAULT  ODP_MSGIO_PRIO_NORMAL
>>> +
>>> +typedef ODP_HANDLE_T(odp_msgio_t);
>>> +
>>> +#define ODP_MSGIO_INVALID _odp_cast_scalar(odp_msgio_t, 0xffffffff)
>>> +
>>> +#define ODP_MSGIO_ADDR_SIZE 6
>>> +
>>> +/** Get printable format of odp_msgio_t */
>>> +static inline uint64_t odp_msgio_to_u64(odp_msgio_t hdl)
>>> +{
>>> +       return _odp_pri(hdl);
>>> +}
>>> +
>>> +/**
>>> + * @}
>>> + */
>>> +
>>> +#ifdef __cplusplus
>>> +}
>>> +#endif
>>> +
>>> +#endif
>>> --
>>> 1.9.1
>>>
>>> _______________________________________________
>>> lng-odp mailing list
>>> lng-odp@lists.linaro.org
>>> https://lists.linaro.org/mailman/listinfo/lng-odp
>>>
>>
>>
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
>
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to