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