On 2 June 2015 at 08:53, Jerin Jacob <[email protected]> wrote:
> 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. > Just a thought, but if it is not a HW abstraction that makes it a candidate for a helper, assuming the API can support capabilities the helper will need. > 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 <[email protected]> > > >--- > > >(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 > > [email protected] > > https://lists.linaro.org/mailman/listinfo/lng-odp > _______________________________________________ > lng-odp mailing list > [email protected] > https://lists.linaro.org/mailman/listinfo/lng-odp > -- Mike Holmes Technical Manager - Linaro Networking Group Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs
_______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
