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