#ifndef MSOS_TYPE_LINUX_KERNEL #include "stdlib.h" #endif #include "MsTypes.h" #ifndef _UTOPIA_H_ #define _UTOPIA_H_ #ifdef __cplusplus extern "C" { #endif #include "utopia_driver_id.h" /******************************************************************************* Status define rule: 0xMMRRRRSS //M:Module, R:Reserve(please keep 0), S:Status code MM = 0 for common status. MM = 1 for Utopia Framwork and Utopia module Will support GetErrorStr(Status, *str); *******************************************************************************/ /*! \defgroup UTPA UTOPIA CORE Interface Features -# Move driver gloable variable to Instant / Module / Resource layer. -# Unify call entry to ioctl() -# trace support -# debug support -# multi-process with Share memory method (SHM) -# multi-process interrupt handle -# Polimorphism -# Version control -# STR/STD solution \image html utopia2_pic1.png \image html utopia2_pic2.png We allow each driver to put their private data struce into each layer, like following: -# pInstant->private -# pModule->private -# pModuleShm private as resource been put into Resource Ex: treat device interrupt status a resource, please see multi-process interrupt for detail -# pResource->private \image html utopia2_pic3.png Operation Flow -# UtopiaInit(); -# UtopiaOpen(MS_U32 u32ModuleID, void** pInstant, MS_U32 u32ModuleVersion, void* pvAttribute); -# UtopiaIoctl(void* pInstant, MS_U32 u32Cmd, MS_U32* pu32Args); -# UtopiaClose(void* pInstant); * */ #define UTOPIA_STATUS_SUCCESS 0x00000000 #define UTOPIA_STATUS_FAIL 0x00000001 #define UTOPIA_STATUS_NOT_SUPPORTED 0x00000002 #define UTOPIA_STATUS_PARAMETER_ERROR 0x00000003 #define UTOPIA_STATUS_DONT_CARE 0x00000004 #define UTOPIA_STATUS_ERR_SYS 0x00000005 ///< operating system call failure #define UTOPIA_STATUS_ERR_INV 0x00000006 ///< invalid argument passed #define UTOPIA_STATUS_ERR_TIMEDOUT 0x00000007 ///< timeout occured #define UTOPIA_STATUS_ERR_DEFERRED 0x00000008 ///< action has been deferred #define UTOPIA_STATUS_ERR_UNIMPLEM 0x00000009 ///< Unimplemented service #define UTOPIA_STATUS_ERR_LOCKED 0x00000010 ///< object locked #define UTOPIA_STATUS_ERR_DELETED 0x00000011 ///< Object has been deleted #define UTOPIA_STATUS_ERR_HEAP 0x00000012 ///< Heap full #define UTOPIA_STATUS_ERR_UNINIT 0x00000013 ///< module is not initialised #define UTOPIA_STATUS_ERR_UNIQUE 0x00000014 ///< unique id needed #define UTOPIA_STATUS_ERR_STATE 0x00000015 ///< invalid state to invoke function #define UTOPIA_STATUS_ERR_DEV 0x00000016 ///< no valid device exists #define UTOPIA_STATUS_ERR_NOT_FOUND 0x00000017 ///< Not found #define UTOPIA_STATUS_ERR_EOL 0x00000018 ///< a list traversal has ended #define UTOPIA_STATUS_ERR_TERM 0x00000019 ///< module has terminated #define UTOPIA_STATUS_ERR_LIMIT 0x00000020 ///< System limit was reached. #define UTOPIA_STATUS_ERR_RESOURCE 0x00000021 ///< insufficient resources for request #define UTOPIA_STATUS_ERR_NOT_AVAIL 0x00000022 ///< resources not available #define UTOPIA_STATUS_ERR_BAD_DATA 0x00000023 ///< Bad data in transport stream #define UTOPIA_STATUS_ERR_INLINE_SUCCESS 0x00000024 #define UTOPIA_STATUS_ERR_DEFERRED_SUCCESS 0x00000025 #define UTOPIA_STATUS_ERR_IN_USE 0x00000026 ///< Object is in use. #define UTOPIA_STATUS_ERR_INTERMEDIATE 0x00000027 ///< Intermediate return 0x0000000 successful but not complete #define UTOPIA_STATUS_ERR_OVERRUN 0x00000028 ///< Buffer overrun occured (e.g. in filters). #define UTOPIA_STATUS_ERR_ABORT 0x00000029 ///< Request not supported. #define UTOPIA_STATUS_ERR_NOTIMPLEMENTED 0x00000030 ///< Request not implemented. #define UTOPIA_STATUS_ERR_INVALID_HANDLE 0x00000031 #define UTOPIA_STATUS_ERR_NOMEM 0x00000032 ///< No Memory #define UTOPIA_STATUS_SHM_EXIST 0x00000033 ///< target share memory already exists #define UTOPIA_STATUS_RPOOL_ESTABLISHED 0x00000034 ///< target resource pool is already established #define UTOPIA_STATUS_NO_RESOURCE 0x00000035 ///< try to obtain resource but fail #define UTOPIA_STATUS_SIGNAL_OK 0x00000036 #define UTOPIA_STATUS_ERR_USER 0x00000099 ///< start of subsystem specific errors #define MS_MODULE_NULL 0 //#define MS_MODULE_UTOPIA 0xFFFF0000 #define MS_UTOPIA_DB_LEVEL_TRACE 0x80000000 #define utopia_malloc malloc #define utopia_free free #if defined(MSOS_TYPE_LINUX_KERNEL) #define free kfree #define malloc(size) kmalloc((size), GFP_KERNEL) #endif #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT MS_U32 MdbPrint(MS_U64* u64ReqHdl, const char* fmt, ...); #endif #define KERNEL_MODE 0x80000000 #define UTOPIA_IOC_MAGIC 'U' #define UTOPIA_IOCTL_SetMODULE _IOWR(UTOPIA_IOC_MAGIC, 1, UTOPIA_DDI_OPEN_ARG) #define UTOPIA_IOCTL_OpenMODULE _IOWR(UTOPIA_IOC_MAGIC, 2, int) #define UTOPIA_IOCTL_IoctlMODULE _IOWR(UTOPIA_IOC_MAGIC, 3, UTOPIA_DDI_IOCTL_ARG) #define UTOPIA_IOCTL_CloseMODULE _IOWR(UTOPIA_IOC_MAGIC, 4, int) #define UTOPIA_IOCTL_MODULE_DYNAMIC_MAPPING _IOWR(UTOPIA_IOC_MAGIC, 5,KDrvMPool_Info_t) #define UTOPIA_IOCTL_AUTH_SetIPCheck _IOWR(UTOPIA_IOC_MAGIC, 6, UTOPIA_AUTH_IPCHECK_ARG) #define UTOPIA_IOCTL_AUTH_SetHashInfo _IOWR(UTOPIA_IOC_MAGIC, 7, UTOPIA_AUTH_HASHINFO_ARG) #if defined(CONFIG_COMPAT) #define UTOPIA_IOCTL_SetMODULE_COMPAT _IOWR(UTOPIA_IOC_MAGIC, 1, UTOPIA_DDI_OPEN_ARG_32) #define UTOPIA_IOCTL_IoctlMODULE_COMPAT _IOWR(UTOPIA_IOC_MAGIC, 3, UTOPIA_DDI_IOCTL_ARG_32) #define UTOPIA_IOCTL_MODULE_DYNAMIC_MAPPING_COMPAT _IOWR(UTOPIA_IOC_MAGIC, 5,KDrvMPool_Info_t) #endif //------------------------------------------------------------------------------------------------- /// UTOPIA core driver initialize /// @ingroup UTPA /// @return UTOPIA_STATUS_SUCCESS - Success /// @return UTOPIA_STATUS_FAIL - Failure //------------------------------------------------------------------------------------------------- MS_U32 UtopiaInit(void); #ifdef CONFIG_MBOOT MS_U32 UtopiaInit_str(void); #endif //------------------------------------------------------------------------------------------------- /// UTOPIA core driver open by Module ID /// @ingroup UTPA /// @param u32ModuleID \b IN: Module ID /// @param pInstant \b IN: Instant from Open /// @param u32ModuleVersion \b IN: The Module Version if needed /// @param pAttribte \b IN: Module Attrubite /// @return UTOPIA_STATUS_SUCCESS - Success /// @return UTOPIA_STATUS_FAIL - Failure //------------------------------------------------------------------------------------------------- MS_U32 UtopiaOpen(MS_U32 u32ModuleID, void** pInstant, MS_U32 u32ModuleVersion, const void* const pAttribte); //------------------------------------------------------------------------------------------------- /// UTOPIA core driver all operation control by Ioctl /// @ingroup UTPA /// @param pInstant \b IN: Instant that refer to a Module /// @param u32Cmd \b IN: The module command /// @param pArgs \b IN: Command arguments /// @return UTOPIA_STATUS_SUCCESS - Success /// @return UTOPIA_STATUS_FAIL - Failure //------------------------------------------------------------------------------------------------- MS_U32 UtopiaIoctl(void* pInstant, MS_U32 u32Cmd, void* const pArgs); //------------------------------------------------------------------------------------------------- /// UTOPIA core driver close /// @ingroup UTPA /// @param pInstant \b IN: Instant for close /// @return UTOPIA_STATUS_SUCCESS - Success /// @return UTOPIA_STATUS_FAIL - Failure //------------------------------------------------------------------------------------------------- MS_U32 UtopiaClose(void* pInstant); #ifdef __cplusplus } #endif #endif