1 #include "MsTypes.h"
2 #include <stdio.h>
3 #include "utopia_dapi.h"
4 #include "drvGOPSCD.h"
5 #include "apiGOPSC_Ex.h"
6 #include "apiGOPSCD_v2.h"
7 #include "apiGOPSCD_private.h"
8 #include "MsOS.h"
9 #include "utopia.h"
10
11
12 //-------------------------------------------------------------------------------------------------
13 // Include Files
14 //-------------------------------------------------------------------------------------------------
15 #ifndef MSOS_TYPE_LINUX_KERNEL
16
17 #include <stdio.h>
18 #include <string.h>
19 #endif
20
21 #include "MsCommon.h"
22 #include "MsVersion.h"
23
24 //-------------------------------------------------------------------------------------------------
25 // Local Compiler Options
26 //-------------------------------------------------------------------------------------------------
27
28
29 //Below is dbg msg for some important dbg function, like:setmux, set gop dst, atexit,etc...
30
31
32 //-------------------------------------------------------------------------------------------------
33 // Local Defines
34 //-------------------------------------------------------------------------------------------------
35
36 // this func will be call to init by utopia20 framework
GOPSCDRegisterToUtopia(FUtopiaOpen ModuleType)37 void GOPSCDRegisterToUtopia(FUtopiaOpen ModuleType)
38 {
39 // 1. deal with module
40 void* pUtopiaModule = NULL;
41 UtopiaModuleCreate(MODULE_GOPSCD, 8, &pUtopiaModule);
42 UtopiaModuleRegister(pUtopiaModule);
43 // register func for module, after register here, then ap call UtopiaOpen/UtopiaIoctl/UtopiaClose can call to these registered standard func
44 UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)GOPSCDOpen, (FUtopiaClose)GOPSCDClose, (FUtopiaIOctl)GOPSCDIoctl);
45
46 // 2. deal with resource
47 void* psResource = NULL;
48 // start func to add res, call once will create 2 access in resource. Also can declare BDMA_POOL_ID_BDMA1 for another channel depend on driver owner.
49 UtopiaModuleAddResourceStart(pUtopiaModule, GOPSCD_POOL);
50 // resource can alloc private for internal use, ex, BDMA_RESOURCE_PRIVATE
51 UtopiaResourceCreate("gopscd", sizeof(GOPSCD_RESOURCE_PRIVATE), &psResource);
52 // func to reg res
53 UtopiaResourceRegister(pUtopiaModule, psResource, GOPSCD_POOL);
54
55 UtopiaModuleAddResourceEnd(pUtopiaModule, GOPSCD_POOL);
56
57
58 }
59
GOPSCDOpen(void ** ppInstance,const void * const pAttribute)60 MS_U32 GOPSCDOpen(void** ppInstance, const void* const pAttribute)
61 {
62 GOPSCD_INSTANT_PRIVATE *pGopSCDPri = NULL;
63
64 //UTOPIA_TRACE(MS_UTOPIA_DB_LEVEL_TRACE,printf("enter %s %d\n",__FUNCTION__,__LINE__));
65 // instance is allocated here, also can allocate private for internal use, ex, BDMA_INSTANT_PRIVATE
66 UtopiaInstanceCreate(sizeof(GOPSCD_INSTANT_PRIVATE), ppInstance);
67 // setup func in private and assign the calling func in func ptr in instance private
68 UtopiaInstanceGetPrivate(*ppInstance, (void**)&pGopSCDPri);
69
70 pGopSCDPri->fpGOPSCDInit = (IOCTL_GOPSCD_INIT)MApi_GOPSCD_Init_U2;
71 pGopSCDPri->fpGOPSCDScaling = (IOCTL_GOPSCD_SCALING)MApi_GOPSCD_Scaling_U2;
72 pGopSCDPri->fpGOPSCDSetInfo = (IOCTL_GOPSCD_SET_INFO)MApi_GOPSC_SetGOPSCInfo_U2;
73 pGopSCDPri->fpGOPSCDGetInfo = (IOCTL_GOPSCD_GET_INFO)MApi_GOPSC_GetGOPSCInfo_U2;
74 pGopSCDPri->fpGOPSCDSetHVSP = (IOCTL_GOPSCD_SET_HVSPSIZE)MApi_GOPSC_SetHVSPSize_U2;
75 pGopSCDPri->fpGOPSCDSetSkipPixel = (IOCTL_GOPSCD_SET_SKIPPIXEL)MApi_GOPSC_SetSkipPixel_U2;
76
77 return UTOPIA_STATUS_SUCCESS;
78 }
79
GOPSCDIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)80 MS_U32 GOPSCDIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
81 {
82 void* pModule = NULL;
83 UtopiaInstanceGetModule(pInstance, &pModule);
84 MS_U32 u32Ret = En_GOPSC_OK;
85 GOPSCD_INSTANT_PRIVATE* psGOPSCDInstPri = NULL;
86 UtopiaInstanceGetPrivate(pInstance, (void**)&psGOPSCDInstPri);
87
88 if(UtopiaResourceObtain(pModule, GOPSCD_POOL, &g_pGOPSCDResource) != 0)
89 {
90 printf("UtopiaResourceObtainToInstant fail\n");
91 return UTOPIA_STATUS_FAIL;
92 }
93
94 //printf("[%s] cmd:%lx\n",__FUNCTION__,u32Cmd);
95 switch(u32Cmd)
96 {
97 case MAPI_CMD_GOPSCD_INIT:
98 {
99 PGOPSCD_INIT_INFO ptr = (PGOPSCD_INIT_INFO)pArgs;
100 ptr->bReturnValue = psGOPSCDInstPri->fpGOPSCDInit(pInstance);
101 break;
102 }
103 case MAPI_CMD_GOPSCD_SCALING:
104 {
105 PGOPSCD_SCALING ptr = (PGOPSCD_SCALING)pArgs;
106 ptr->bReturnValue = psGOPSCDInstPri->fpGOPSCDScaling(pInstance,ptr->gopscCmd,ptr->u8FrameCount);
107 break;
108
109 }
110 case MAPI_CMD_GOPSCD_SET_INFO:
111 {
112 PGOPSCD_SET_INFO ptr = (PGOPSCD_SET_INFO)pArgs;
113 ptr->bReturnValue = psGOPSCDInstPri->fpGOPSCDSetInfo(pInstance,ptr->gopscInfo);
114
115 break;
116
117 }
118 case MAPI_CMD_GOPSCD_GET_INFO:
119 {
120 PGOPSCD_GET_INFO ptr = (PGOPSCD_GET_INFO)pArgs;
121 ptr->bReturnValue = psGOPSCDInstPri->fpGOPSCDGetInfo(pInstance,ptr->gopscInfo);
122
123 break;
124 }
125 case MAPI_CMD_GOPSCD_SET_HVSPSIZE:
126 {
127 PGOPSCD_SET_HVSPSZIE ptr = (PGOPSCD_SET_HVSPSZIE)pArgs;
128 ptr->bReturnValue = psGOPSCDInstPri->fpGOPSCDSetHVSP(pInstance,ptr->sizeInfo,ptr->flag);
129
130 break;
131 }
132 case MAPI_CMD_GOPSCD_SET_SKIPPIXEL:
133 {
134 PGOPSCD_SET_SKIPPIXEL ptr = (PGOPSCD_SET_SKIPPIXEL)pArgs;
135 ptr->bReturnValue = psGOPSCDInstPri->fpGOPSCDSetSkipPixel(pInstance,ptr->skippixelInfo,ptr->flag);
136
137 break;
138 }
139 default:
140 break;
141 };
142
143 UtopiaResourceRelease(g_pGOPSCDResource);
144
145 if(u32Ret != En_GOPSC_OK)
146 {
147 printf("[%s] ERROR on cmd:%d\n",__FUNCTION__,u32Cmd);
148 }
149
150 //printf("(%s) Done\n\n",__FUNCTION__);
151
152 return UTOPIA_STATUS_SUCCESS;
153 }
154
GOPSCDClose(void * pInstance)155 MS_U32 GOPSCDClose(void* pInstance)
156 {
157 UtopiaInstanceDelete(pInstance);
158
159 return TRUE;
160 }
161
162
163