xref: /utopia/UTPA2-700.0.x/modules/graphic/api/gopscd/apiGOPSCD_v2.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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