1 #if !defined(MSOS_TYPE_LINUX_KERNEL)
2 #include <stdio.h>
3 #include <string.h>
4 #else
5 #include <linux/string.h>
6 #include <linux/slab.h>
7 #endif
8
9 #include "MsTypes.h"
10 #include "utopia_dapi.h"
11 #include "utopia.h"
12 #include "drvSAR.h"
13 #include "drvSAR_v2.h"
14 #include "drvSAR_private.h"
15 #include "MsOS.h"
16
17 enum
18 {
19 SAR_POOL_ID=0
20 } eSAR_PoolID;
21
22 #ifdef CONFIG_MSTAR_UTPA2K_SAR_ENABLE
23 void* psResource = NULL;
24 void* pUtopiaModule = NULL;
SARRegisterToUtopia(FUtopiaOpen ModuleType)25 void SARRegisterToUtopia(FUtopiaOpen ModuleType)
26 {
27 // 1. deal with module
28 SAR_RESOURCE_PRIVATE * pResPri = NULL;
29 UtopiaModuleCreate(MODULE_SAR, 8, &pUtopiaModule);
30 UtopiaModuleRegister(pUtopiaModule);
31 UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)SAROpen, (FUtopiaClose)SARClose, (FUtopiaIOctl)SARIoctl);
32
33 // 2. deal with resource
34 UtopiaModuleAddResourceStart(pUtopiaModule, SAR_POOL_ID);
35 UtopiaResourceCreate("SAR", sizeof(SAR_RESOURCE_PRIVATE), &psResource);
36 UtopiaResourceRegister(pUtopiaModule, psResource, SAR_POOL_ID);
37 UtopiaModuleAddResourceEnd(pUtopiaModule, SAR_POOL_ID);
38 if(UtopiaResourceObtain(pUtopiaModule, SAR_POOL_ID, &psResource) != 0)
39 {
40 printf("UtopiaResourceObtainToInstant fail\n");
41 }
42
43 UtopiaResourceGetPrivate(psResource, (void**)&pResPri);
44
45 UtopiaResourceRelease(psResource);
46 }
47
SAROpen(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)48 MS_U32 SAROpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
49 {
50 SAR_INSTANT_PRIVATE *pSarPri = NULL;
51 void *pSarPriVoid = NULL;
52 MS_DEBUG_MSG(printf("\n[SAR INFO]SAR open \n"));
53
54 UtopiaInstanceCreate(sizeof(SAR_INSTANT_PRIVATE), ppInstance);
55 UtopiaInstanceGetPrivate(*ppInstance, &pSarPriVoid);
56
57 pSarPri = (SAR_INSTANT_PRIVATE *)pSarPriVoid;
58 pSarPri->fpSARKpdGetKeyCode =MDrv_SAR_Kpd_GetKeyCode_U2K;
59 pSarPri->fpSARKpdConfig =MDrv_SAR_Kpd_SetChInfo_U2K;
60 MDrv_SAR_Kpd_Init();
61 return UTOPIA_STATUS_SUCCESS;
62 }
63
SARIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)64 MS_U32 SARIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
65 {
66 SAR_RESOURCE_PRIVATE * pResPri = NULL;
67 void* pModule = NULL;
68 UtopiaInstanceGetModule(pInstance, &pModule);
69 MS_U32 u32Ret = 0;
70
71
72 SAR_PRIVATE_PARAM *param = NULL;
73
74 SAR_INSTANT_PRIVATE* psSARInstPri = NULL;
75 UtopiaInstanceGetPrivate(pInstance, (void**)&psSARInstPri);
76 UtopiaResourceGetPrivate(psResource, (void**)&pResPri);
77
78 if (pArgs != NULL)
79 param= (SAR_PRIVATE_PARAM *) pArgs;
80
81 switch(u32Cmd)
82 {
83 case MDrv_CMD_Kpd_GetKeyCode:
84 u32Ret=psSARInstPri->fpSARKpdGetKeyCode(¶m->privateKpd_GetKeyCode.u8Key,
85 ¶m->privateKpd_GetKeyCode.u8Repeat);
86 param->privateKpd_GetKeyCode.u32Retn=u32Ret;
87 break;
88 case MDrv_CMD_SAR_Config:
89 pResPri->privateKpd_Config.pKeyRegCfg = param->privateKpd_Config.pKeyRegCfg;
90 u32Ret = psSARInstPri->fpSARKpdConfig(param->privateKpd_Config.pKeyRegCfg);
91 break;
92 case MDrv_CMD_SAR_GetConfig:
93 param->privateKpd_Config.pKeyRegCfg = pResPri->privateKpd_Config.pKeyRegCfg;
94 u32Ret = UTOPIA_STATUS_SUCCESS;
95 break;
96 default:
97 break;
98 };
99 return u32Ret;
100 }
101
SARClose(void * pInstance)102 MS_U32 SARClose(void* pInstance)
103 {
104 UtopiaInstanceDelete(pInstance);
105
106 return TRUE;
107 }
108 #endif
109