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