xref: /utopia/UTPA2-700.0.x/modules/ch34/drv/ch34/drvCH34_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 "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