f4bbf90376c8b1fae3ae32391a5d161afdd40400
[ipc/ipcdev.git] / linux / include / ti / ipc / interfaces / ITransport.h
1 /*
2  * Copyright (c) 2014-2015 Texas Instruments Incorporated - http://www.ti.com
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * *  Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * *  Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * *  Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
33 /**
34  *  @file linux/include/ti/ipc/interfaces/ITransport.h
35  *
36  *  @brief Base interface for all message transports
37  *
38  *  All message transport interfaces must inherit from this base class.
39  *
40  *  The ITransport interface includes the following instance methods:
41  *
42  *  itype - return the derived interface type
43  */
45 /*
46  *  ======== ITransport.h ========
47  */
49 #ifndef ITRANSPORT_H
50 #define ITRANSPORT_H
52 #if defined (__cplusplus)
53 extern "C" {
54 #endif
56 /*!
57  *  @brief  Interface type ID
58  *
59  *  When adding a new interface type, please ensure to define a
60  *  unique ID value for each new type.
61  */
62 #define ITransport_TypeId 0x01
64 /*!
65  *  @brief ITransport_Handle type
66  *
67  *  An opaque instance handle.
68  */
69 typedef struct ITransport_Object *ITransport_Handle;
71 /*!
72  *  @brief The instance object definition for ITransport
73  */
74 typedef struct ITransport_Object {
76     Int interfaceType;
77     /*!< Interface type ID
78      *
79      *  This field is initialized by the constructor of the derived
80      *  implementation. It should be assigned the interface type ID
81      *  which is being implemented.
82      */
83 } ITransport_Object;
85 /*!
86  *  @brief Identify the derived interface type
87  *
88  *  Identify the interface type which is implemented by the instance
89  *  object. Transport users (e.g. MessageQ) would use this method to
90  *  identify the interface type and then downcast the ITransport_Handle
91  *  to that interface type.
92  *
93  *  @param[in]  inst        Instance handle
94  *
95  *  @return     Derived interface type ID
96  */
97 static inline
98 Int ITransport_itype(ITransport_Handle inst)
99 {
100     ITransport_Object *obj = (ITransport_Object *)inst;
101     return obj->interfaceType;
104 #if defined (__cplusplus)
106 #endif
107 #endif /* ITRANSPORT_H */