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