1*53ee8cc1Swenshuai.xi #include "MsTypes.h"
2*53ee8cc1Swenshuai.xi #include <stdio.h>
3*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
4*53ee8cc1Swenshuai.xi #include "drvCH34.h"
5*53ee8cc1Swenshuai.xi #include "drvCH34_private.h"
6*53ee8cc1Swenshuai.xi #include "drvCH34_v2.h"
7*53ee8cc1Swenshuai.xi #include "MsOS.h"
8*53ee8cc1Swenshuai.xi #include "utopia.h"
9*53ee8cc1Swenshuai.xi
10*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
11*53ee8cc1Swenshuai.xi // Include Files
12*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
13*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
14*53ee8cc1Swenshuai.xi
15*53ee8cc1Swenshuai.xi #include <stdio.h>
16*53ee8cc1Swenshuai.xi #include <string.h>
17*53ee8cc1Swenshuai.xi #endif
18*53ee8cc1Swenshuai.xi
19*53ee8cc1Swenshuai.xi #include "MsCommon.h"
20*53ee8cc1Swenshuai.xi #include "MsVersion.h"
21*53ee8cc1Swenshuai.xi
22*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
23*53ee8cc1Swenshuai.xi // Local Compiler Options
24*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
25*53ee8cc1Swenshuai.xi
26*53ee8cc1Swenshuai.xi
27*53ee8cc1Swenshuai.xi //Below is dbg msg for some important dbg function, like:setmux, set gop dst, atexit,etc...
28*53ee8cc1Swenshuai.xi
29*53ee8cc1Swenshuai.xi
30*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
31*53ee8cc1Swenshuai.xi // Local Defines
32*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
33*53ee8cc1Swenshuai.xi
34*53ee8cc1Swenshuai.xi // this func will be call to init by utopia20 framework
CH34RegisterToUtopia(FUtopiaOpen ModuleType)35*53ee8cc1Swenshuai.xi void CH34RegisterToUtopia(FUtopiaOpen ModuleType)
36*53ee8cc1Swenshuai.xi {
37*53ee8cc1Swenshuai.xi // 1. deal with module
38*53ee8cc1Swenshuai.xi void* pUtopiaModule = NULL;
39*53ee8cc1Swenshuai.xi UtopiaModuleCreate(MODULE_CH34, 8, &pUtopiaModule);
40*53ee8cc1Swenshuai.xi UtopiaModuleRegister(pUtopiaModule);
41*53ee8cc1Swenshuai.xi // register func for module, after register here, then ap call UtopiaOpen/UtopiaIoctl/UtopiaClose can call to these registered standard func
42*53ee8cc1Swenshuai.xi UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)CH34Open, (FUtopiaClose)CH34Close, (FUtopiaIOctl)CH34Ioctl);
43*53ee8cc1Swenshuai.xi
44*53ee8cc1Swenshuai.xi //No globle veriable, no need resource?
45*53ee8cc1Swenshuai.xi #if 0
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("ch34", 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 #endif
57*53ee8cc1Swenshuai.xi
58*53ee8cc1Swenshuai.xi }
59*53ee8cc1Swenshuai.xi
CH34Open(void ** ppInstance,const void * const pAttribute)60*53ee8cc1Swenshuai.xi MS_U32 CH34Open(void** ppInstance, const void* const pAttribute)
61*53ee8cc1Swenshuai.xi {
62*53ee8cc1Swenshuai.xi CH34_INSTANT_PRIVATE *pCH34Pri = 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(CH34_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**)&pCH34Pri);
69*53ee8cc1Swenshuai.xi
70*53ee8cc1Swenshuai.xi pCH34Pri->fpCH34Init = (IOCTL_CH34_INIT)MDrv_Ch34_Init_U2;
71*53ee8cc1Swenshuai.xi pCH34Pri->fpCH34SetMode = (IOCTL_CH34_SET_MODE)MDrv_Ch34_SetMode_U2;
72*53ee8cc1Swenshuai.xi pCH34Pri->fpCH34WriteTable = (IOCTL_CH34_WRITE_TABLE)MDrv_Ch34_WriteCH34Table_U2;
73*53ee8cc1Swenshuai.xi pCH34Pri->fpCH34TurnOnOff = (IOCTL_CH34_TURN_ONOFF)MDrv_Ch34_TurnOnOff_U2;
74*53ee8cc1Swenshuai.xi
75*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
76*53ee8cc1Swenshuai.xi }
77*53ee8cc1Swenshuai.xi
CH34Ioctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)78*53ee8cc1Swenshuai.xi MS_U32 CH34Ioctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
79*53ee8cc1Swenshuai.xi {
80*53ee8cc1Swenshuai.xi MS_U32 u32Ret = En_Drv_CH34_OK;
81*53ee8cc1Swenshuai.xi CH34_INSTANT_PRIVATE* psCH34InstPri = NULL;
82*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psCH34InstPri);
83*53ee8cc1Swenshuai.xi
84*53ee8cc1Swenshuai.xi //printf("[%s] cmd:%lx\n",__FUNCTION__,u32Cmd);
85*53ee8cc1Swenshuai.xi switch(u32Cmd)
86*53ee8cc1Swenshuai.xi {
87*53ee8cc1Swenshuai.xi case MAPI_CMD_CH34_INIT:
88*53ee8cc1Swenshuai.xi {
89*53ee8cc1Swenshuai.xi PCH34_INIT_INFO ptr = (PCH34_INIT_INFO)pArgs;
90*53ee8cc1Swenshuai.xi ptr->bReturnValue = psCH34InstPri->fpCH34Init();
91*53ee8cc1Swenshuai.xi break;
92*53ee8cc1Swenshuai.xi }
93*53ee8cc1Swenshuai.xi case MAPI_CMD_CH34_SETMODE:
94*53ee8cc1Swenshuai.xi {
95*53ee8cc1Swenshuai.xi PCH34_SET_MODE_INFO ptr = (PCH34_SET_MODE_INFO)pArgs;
96*53ee8cc1Swenshuai.xi ptr->bReturnValue = psCH34InstPri->fpCH34SetMode(ptr->channel,ptr->videosys,ptr->audiosys);
97*53ee8cc1Swenshuai.xi
98*53ee8cc1Swenshuai.xi break;
99*53ee8cc1Swenshuai.xi
100*53ee8cc1Swenshuai.xi }
101*53ee8cc1Swenshuai.xi case MAPI_CMD_CH34_WRITETABLE:
102*53ee8cc1Swenshuai.xi {
103*53ee8cc1Swenshuai.xi PCH34_WRITE_TABLE_INFO ptr = (PCH34_WRITE_TABLE_INFO)pArgs;
104*53ee8cc1Swenshuai.xi ptr->bReturnValue = psCH34InstPri->fpCH34WriteTable(ptr->pTable);
105*53ee8cc1Swenshuai.xi
106*53ee8cc1Swenshuai.xi break;
107*53ee8cc1Swenshuai.xi
108*53ee8cc1Swenshuai.xi }
109*53ee8cc1Swenshuai.xi case MAPI_CMD_CH34_TURNONOFF:
110*53ee8cc1Swenshuai.xi {
111*53ee8cc1Swenshuai.xi PCH34_TURN_ONOFF_INFO ptr = (PCH34_TURN_ONOFF_INFO)pArgs;
112*53ee8cc1Swenshuai.xi ptr->bReturnValue = psCH34InstPri->fpCH34TurnOnOff(ptr->bOn);
113*53ee8cc1Swenshuai.xi
114*53ee8cc1Swenshuai.xi break;
115*53ee8cc1Swenshuai.xi
116*53ee8cc1Swenshuai.xi }
117*53ee8cc1Swenshuai.xi default:
118*53ee8cc1Swenshuai.xi break;
119*53ee8cc1Swenshuai.xi };
120*53ee8cc1Swenshuai.xi
121*53ee8cc1Swenshuai.xi if(u32Ret != En_Drv_CH34_OK)
122*53ee8cc1Swenshuai.xi {
123*53ee8cc1Swenshuai.xi printf("[%s] ERROR on cmd:%d\n",__FUNCTION__,u32Cmd);
124*53ee8cc1Swenshuai.xi }
125*53ee8cc1Swenshuai.xi
126*53ee8cc1Swenshuai.xi //printf("(%s) Done\n\n",__FUNCTION__);
127*53ee8cc1Swenshuai.xi
128*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
129*53ee8cc1Swenshuai.xi }
130*53ee8cc1Swenshuai.xi
CH34Close(void * pInstance)131*53ee8cc1Swenshuai.xi MS_U32 CH34Close(void* pInstance)
132*53ee8cc1Swenshuai.xi {
133*53ee8cc1Swenshuai.xi UtopiaInstanceDelete(pInstance);
134*53ee8cc1Swenshuai.xi
135*53ee8cc1Swenshuai.xi return TRUE;
136*53ee8cc1Swenshuai.xi }
137*53ee8cc1Swenshuai.xi
138*53ee8cc1Swenshuai.xi
139