xref: /utopia/UTPA2-700.0.x/modules/msos/utopia_core/utopia.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
2*53ee8cc1Swenshuai.xi #include "stdlib.h"
3*53ee8cc1Swenshuai.xi #endif
4*53ee8cc1Swenshuai.xi #include "MsTypes.h"
5*53ee8cc1Swenshuai.xi 
6*53ee8cc1Swenshuai.xi #ifndef _UTOPIA_H_
7*53ee8cc1Swenshuai.xi #define _UTOPIA_H_
8*53ee8cc1Swenshuai.xi 
9*53ee8cc1Swenshuai.xi #ifdef __cplusplus
10*53ee8cc1Swenshuai.xi extern "C"
11*53ee8cc1Swenshuai.xi {
12*53ee8cc1Swenshuai.xi #endif
13*53ee8cc1Swenshuai.xi 
14*53ee8cc1Swenshuai.xi #include "utopia_driver_id.h"
15*53ee8cc1Swenshuai.xi 
16*53ee8cc1Swenshuai.xi /*******************************************************************************
17*53ee8cc1Swenshuai.xi Status define rule:
18*53ee8cc1Swenshuai.xi 0xMMRRRRSS  //M:Module, R:Reserve(please keep 0), S:Status code
19*53ee8cc1Swenshuai.xi MM = 0 for common status.
20*53ee8cc1Swenshuai.xi MM = 1 for Utopia Framwork and Utopia module
21*53ee8cc1Swenshuai.xi 
22*53ee8cc1Swenshuai.xi Will support GetErrorStr(Status, *str);
23*53ee8cc1Swenshuai.xi *******************************************************************************/
24*53ee8cc1Swenshuai.xi /*! \defgroup UTPA UTOPIA CORE Interface
25*53ee8cc1Swenshuai.xi 
26*53ee8cc1Swenshuai.xi   <b> Features </b>
27*53ee8cc1Swenshuai.xi   -# Move driver gloable variable to Instant / Module / Resource layer.
28*53ee8cc1Swenshuai.xi   -# Unify call entry to ioctl()
29*53ee8cc1Swenshuai.xi   -# trace support
30*53ee8cc1Swenshuai.xi   -# debug support
31*53ee8cc1Swenshuai.xi   -# multi-process with Share memory method (SHM)
32*53ee8cc1Swenshuai.xi   -# multi-process interrupt handle
33*53ee8cc1Swenshuai.xi   -# Polimorphism
34*53ee8cc1Swenshuai.xi   -# Version control
35*53ee8cc1Swenshuai.xi   -# STR/STD solution
36*53ee8cc1Swenshuai.xi 
37*53ee8cc1Swenshuai.xi   \image html utopia2_pic1.png
38*53ee8cc1Swenshuai.xi   \image html utopia2_pic2.png
39*53ee8cc1Swenshuai.xi 
40*53ee8cc1Swenshuai.xi   We allow each driver to put their private data struce into each layer, like following:
41*53ee8cc1Swenshuai.xi   -# pInstant->private
42*53ee8cc1Swenshuai.xi   -# pModule->private
43*53ee8cc1Swenshuai.xi   -# pModuleShm private as resource been put into Resource
44*53ee8cc1Swenshuai.xi Ex: treat device interrupt status a resource, please see multi-process interrupt for detail
45*53ee8cc1Swenshuai.xi   -# pResource->private
46*53ee8cc1Swenshuai.xi 
47*53ee8cc1Swenshuai.xi   \image html utopia2_pic3.png
48*53ee8cc1Swenshuai.xi 
49*53ee8cc1Swenshuai.xi   <b>Operation Flow</b>
50*53ee8cc1Swenshuai.xi   -# UtopiaInit();
51*53ee8cc1Swenshuai.xi   -# UtopiaOpen(MS_U32 u32ModuleID, void** pInstant, MS_U32 u32ModuleVersion, void* pvAttribute);
52*53ee8cc1Swenshuai.xi   -# UtopiaIoctl(void* pInstant, MS_U32 u32Cmd, MS_U32* pu32Args);
53*53ee8cc1Swenshuai.xi   -# UtopiaClose(void* pInstant);
54*53ee8cc1Swenshuai.xi 
55*53ee8cc1Swenshuai.xi  * */
56*53ee8cc1Swenshuai.xi 
57*53ee8cc1Swenshuai.xi 
58*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_SUCCESS               0x00000000
59*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_FAIL                  0x00000001
60*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_NOT_SUPPORTED         0x00000002
61*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_PARAMETER_ERROR       0x00000003
62*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_DONT_CARE             0x00000004
63*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_SYS               0x00000005       ///< operating system call failure
64*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_INV               0x00000006       ///< invalid argument passed
65*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_TIMEDOUT          0x00000007       ///< timeout occured
66*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_DEFERRED          0x00000008       ///< action has been deferred
67*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_UNIMPLEM          0x00000009       ///< Unimplemented service
68*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_LOCKED            0x00000010       ///< object locked
69*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_DELETED           0x00000011       ///< Object has been deleted
70*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_HEAP              0x00000012       ///< Heap full
71*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_UNINIT            0x00000013       ///< module is not initialised
72*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_UNIQUE            0x00000014       ///< unique id needed
73*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_STATE             0x00000015       ///< invalid state to invoke function
74*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_DEV               0x00000016       ///< no valid device exists
75*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_NOT_FOUND         0x00000017       ///< Not found
76*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_EOL               0x00000018       ///< a list traversal has ended
77*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_TERM              0x00000019       ///< module has terminated
78*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_LIMIT             0x00000020       ///< System limit was reached.
79*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_RESOURCE          0x00000021       ///< insufficient resources for request
80*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_NOT_AVAIL         0x00000022       ///< resources not available
81*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_BAD_DATA          0x00000023       ///< Bad data in transport stream
82*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_INLINE_SUCCESS    0x00000024
83*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_DEFERRED_SUCCESS  0x00000025
84*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_IN_USE            0x00000026       ///< Object is in use.
85*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_INTERMEDIATE      0x00000027       ///< Intermediate return 0x0000000 successful but not complete
86*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_OVERRUN           0x00000028       ///< Buffer overrun occured (e.g. in filters).
87*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_ABORT             0x00000029       ///< Request not supported.
88*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_NOTIMPLEMENTED    0x00000030       ///< Request not implemented.
89*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_INVALID_HANDLE    0x00000031
90*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_NOMEM             0x00000032       ///< No Memory
91*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_SHM_EXIST             0x00000033       ///< target share memory already exists
92*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_RPOOL_ESTABLISHED     0x00000034       ///< target resource pool is already established
93*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_NO_RESOURCE           0x00000035       ///< try to obtain resource but fail
94*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_SIGNAL_OK             0x00000036
95*53ee8cc1Swenshuai.xi #define UTOPIA_STATUS_ERR_USER              0x00000099       ///< start of subsystem specific errors
96*53ee8cc1Swenshuai.xi 
97*53ee8cc1Swenshuai.xi #define MS_MODULE_NULL 0
98*53ee8cc1Swenshuai.xi //#define MS_MODULE_UTOPIA 0xFFFF0000
99*53ee8cc1Swenshuai.xi #define MS_UTOPIA_DB_LEVEL_TRACE 0x80000000
100*53ee8cc1Swenshuai.xi 
101*53ee8cc1Swenshuai.xi #define utopia_malloc malloc
102*53ee8cc1Swenshuai.xi #define utopia_free free
103*53ee8cc1Swenshuai.xi 
104*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
105*53ee8cc1Swenshuai.xi #define free kfree
106*53ee8cc1Swenshuai.xi #define malloc(size) kmalloc((size), GFP_KERNEL)
107*53ee8cc1Swenshuai.xi #endif
108*53ee8cc1Swenshuai.xi 
109*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
110*53ee8cc1Swenshuai.xi MS_U32 MdbPrint(MS_U64* u64ReqHdl, const char* fmt, ...);
111*53ee8cc1Swenshuai.xi #endif
112*53ee8cc1Swenshuai.xi 
113*53ee8cc1Swenshuai.xi #define KERNEL_MODE 0x80000000
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi #define UTOPIA_IOC_MAGIC  'U'
116*53ee8cc1Swenshuai.xi #define UTOPIA_IOCTL_SetMODULE   _IOWR(UTOPIA_IOC_MAGIC, 1, UTOPIA_DDI_OPEN_ARG)
117*53ee8cc1Swenshuai.xi #define UTOPIA_IOCTL_OpenMODULE  _IOWR(UTOPIA_IOC_MAGIC, 2, int)
118*53ee8cc1Swenshuai.xi #define UTOPIA_IOCTL_IoctlMODULE  _IOWR(UTOPIA_IOC_MAGIC, 3, UTOPIA_DDI_IOCTL_ARG)
119*53ee8cc1Swenshuai.xi #define UTOPIA_IOCTL_CloseMODULE  _IOWR(UTOPIA_IOC_MAGIC, 4, int)
120*53ee8cc1Swenshuai.xi 
121*53ee8cc1Swenshuai.xi #define UTOPIA_IOCTL_MODULE_DYNAMIC_MAPPING  _IOWR(UTOPIA_IOC_MAGIC, 5,KDrvMPool_Info_t)
122*53ee8cc1Swenshuai.xi #define UTOPIA_IOCTL_AUTH_SetIPCheck  _IOWR(UTOPIA_IOC_MAGIC, 6, UTOPIA_AUTH_IPCHECK_ARG)
123*53ee8cc1Swenshuai.xi #define UTOPIA_IOCTL_AUTH_SetHashInfo  _IOWR(UTOPIA_IOC_MAGIC, 7, UTOPIA_AUTH_HASHINFO_ARG)
124*53ee8cc1Swenshuai.xi 
125*53ee8cc1Swenshuai.xi #if defined(CONFIG_COMPAT)
126*53ee8cc1Swenshuai.xi #define UTOPIA_IOCTL_SetMODULE_COMPAT   _IOWR(UTOPIA_IOC_MAGIC, 1, UTOPIA_DDI_OPEN_ARG_32)
127*53ee8cc1Swenshuai.xi #define UTOPIA_IOCTL_IoctlMODULE_COMPAT  _IOWR(UTOPIA_IOC_MAGIC, 3, UTOPIA_DDI_IOCTL_ARG_32)
128*53ee8cc1Swenshuai.xi #define UTOPIA_IOCTL_MODULE_DYNAMIC_MAPPING_COMPAT  _IOWR(UTOPIA_IOC_MAGIC, 5,KDrvMPool_Info_t)
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi #endif
131*53ee8cc1Swenshuai.xi 
132*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
133*53ee8cc1Swenshuai.xi /// UTOPIA core driver initialize
134*53ee8cc1Swenshuai.xi /// @ingroup UTPA
135*53ee8cc1Swenshuai.xi /// @return UTOPIA_STATUS_SUCCESS - Success
136*53ee8cc1Swenshuai.xi /// @return UTOPIA_STATUS_FAIL - Failure
137*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
138*53ee8cc1Swenshuai.xi MS_U32 UtopiaInit(void);
139*53ee8cc1Swenshuai.xi 
140*53ee8cc1Swenshuai.xi #ifdef CONFIG_MBOOT
141*53ee8cc1Swenshuai.xi MS_U32 UtopiaInit_str(void);
142*53ee8cc1Swenshuai.xi #endif
143*53ee8cc1Swenshuai.xi 
144*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
145*53ee8cc1Swenshuai.xi /// UTOPIA core driver open by Module ID
146*53ee8cc1Swenshuai.xi /// @ingroup UTPA
147*53ee8cc1Swenshuai.xi /// @param  u32ModuleID                \b IN: Module ID
148*53ee8cc1Swenshuai.xi /// @param  pInstant                   \b IN: Instant from Open
149*53ee8cc1Swenshuai.xi /// @param  u32ModuleVersion           \b IN: The Module Version if needed
150*53ee8cc1Swenshuai.xi /// @param  pAttribte                  \b IN: Module Attrubite
151*53ee8cc1Swenshuai.xi /// @return UTOPIA_STATUS_SUCCESS - Success
152*53ee8cc1Swenshuai.xi /// @return UTOPIA_STATUS_FAIL - Failure
153*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
154*53ee8cc1Swenshuai.xi MS_U32 UtopiaOpen(MS_U32 u32ModuleID, void** pInstant, MS_U32 u32ModuleVersion,
155*53ee8cc1Swenshuai.xi 		const void* const pAttribte);
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
158*53ee8cc1Swenshuai.xi /// UTOPIA core driver all operation control by Ioctl
159*53ee8cc1Swenshuai.xi /// @ingroup UTPA
160*53ee8cc1Swenshuai.xi /// @param  pInstant                   \b IN: Instant that refer to a Module
161*53ee8cc1Swenshuai.xi /// @param  u32Cmd                     \b IN: The module command
162*53ee8cc1Swenshuai.xi /// @param  pArgs                      \b IN: Command arguments
163*53ee8cc1Swenshuai.xi /// @return UTOPIA_STATUS_SUCCESS - Success
164*53ee8cc1Swenshuai.xi /// @return UTOPIA_STATUS_FAIL - Failure
165*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
166*53ee8cc1Swenshuai.xi MS_U32 UtopiaIoctl(void* pInstant, MS_U32 u32Cmd, void* const pArgs);
167*53ee8cc1Swenshuai.xi 
168*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
169*53ee8cc1Swenshuai.xi /// UTOPIA core driver close
170*53ee8cc1Swenshuai.xi /// @ingroup UTPA
171*53ee8cc1Swenshuai.xi /// @param  pInstant                   \b IN: Instant for close
172*53ee8cc1Swenshuai.xi /// @return UTOPIA_STATUS_SUCCESS - Success
173*53ee8cc1Swenshuai.xi /// @return UTOPIA_STATUS_FAIL - Failure
174*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
175*53ee8cc1Swenshuai.xi MS_U32 UtopiaClose(void* pInstant);
176*53ee8cc1Swenshuai.xi 
177*53ee8cc1Swenshuai.xi #ifdef __cplusplus
178*53ee8cc1Swenshuai.xi }
179*53ee8cc1Swenshuai.xi #endif
180*53ee8cc1Swenshuai.xi 
181*53ee8cc1Swenshuai.xi #endif
182