xref: /utopia/UTPA2-700.0.x/modules/sar/drv/sar/mdrvSAR.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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(&param->privateKpd_GetKeyCode.u8Key,
85                                                     &param->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