On Tue, Jun 02, 2015 at 02:36:47PM +0200, Benoît Ganne wrote:
> Hi Ola, all,
> 
> On 05/27/2015 10:08 AM, Ola Liljedahl wrote:
> >Here is my third attempt at a ODP API for MSGIO - asynchronous message 
> >passing
> >based IPC for a shared nothing architecture.
> 
> I understand the value of this, but I feel I need to ask the question: does
> it really belong to ODP ? My understanding so far was that ODP should not
> try to replace OS services: for example, thread or process related API were
> ruled out. This looks to me a lot like D-BUS or ZeroMQ (or <name your
> favorite solution here>). Wouldn't it be better to let the application
> select what they want to use instead of providing our own?

+1 and I am not sure how much value addition it has in hardware abstraction 
perspective.
Most of the HW accelerated platforms will map odp_msg_t as packet and 
odp_msgio_t as pktio
then it will boils down to a helper function that creates the
vlan packet/message from given message(uint8_t *), src, dst 48 bit address

> 
> ben
> 
> >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.
> >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
> >
> 
> 
> -- 
> Benoît GANNE
> Field Application Engineer, Kalray
> +33 (0)648 125 843
> _______________________________________________
> 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