On 27 May 2015 at 14:39, Bill Fischofer <[email protected]> wrote:
> 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. > I don't want to use or enforce an Ethernet-like internal transport. I am just proposing a standardized message format (user payload + metadata) for connecting to the message network/bus so that ODP applications can be binary interoperable regardless of which ODP implementation they are using. Everyone seems to be misunderstanding my intention here. I could define this standard format without trying to emulate any known packet format, would that be better? I am aware of TIPC on a high level but isn't the semantics a bit different from what I propose? E.g. it uses well-known (numeric) ports for applications to listen to? Does it have a suitable packet format that can be reused? > > On Wed, May 27, 2015 at 4:49 AM, Ola Liljedahl <[email protected]> > wrote: > >> On 27 May 2015 at 11:10, Alexandru Badicioiu < >> [email protected]> wrote: >> >>> >>> >>> On 27 May 2015 at 11:08, Ola Liljedahl <[email protected]> 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 <[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 >>>> -- >>>> 1.9.1 >>>> >>>> _______________________________________________ >>>> 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 >> >> >
_______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
