1*53ee8cc1Swenshuai.xi #include <linux/kernel.h>
2*53ee8cc1Swenshuai.xi #include <linux/string.h>
3*53ee8cc1Swenshuai.xi #include <linux/slab.h>
4*53ee8cc1Swenshuai.xi
5*53ee8cc1Swenshuai.xi
6*53ee8cc1Swenshuai.xi #include "MsTypes.h"
7*53ee8cc1Swenshuai.xi #include "utopia.h"
8*53ee8cc1Swenshuai.xi #include "drvBDMA.h"
9*53ee8cc1Swenshuai.xi #include "drvBDMA_v2.h"
10*53ee8cc1Swenshuai.xi #include "BDMA_adp.h"
11*53ee8cc1Swenshuai.xi #include "utopia_adp.h"
12*53ee8cc1Swenshuai.xi
13*53ee8cc1Swenshuai.xi
14*53ee8cc1Swenshuai.xi extern void* spt_MS_U32;
15*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(BDMA_Status);
16*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(BDMA_MOBF_PS);
17*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(BDMA_CRC32_PARAM);
18*53ee8cc1Swenshuai.xi UADP_SPT_0NXT_DEF(BDMA_MEMCOPY_PARAM);
19*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_BDMA_INIT_PARAM[10];
20*53ee8cc1Swenshuai.xi UADP_STRUCT_POINTER_TABLE spt_BDMA_COPYHND_PARAM[10];
21*53ee8cc1Swenshuai.xi
22*53ee8cc1Swenshuai.xi #ifdef MOBF_ENABLE
23*53ee8cc1Swenshuai.xi //UADP_SDT_0_DEF(MS_PHY_phy64Addr);
24*53ee8cc1Swenshuai.xi UADP_SDT_0_DEF(BDMA_MOBF_PS_pMobfPsCfg);
25*53ee8cc1Swenshuai.xi //UADP_SDT_0_DEF(MS_PHY_phy64SearchAddr);
26*53ee8cc1Swenshuai.xi UADP_SDT_1_DEF(BDMA_MOBFSEARCH_PARAM_PRIVATE);
27*53ee8cc1Swenshuai.xi #endif
28*53ee8cc1Swenshuai.xi
29*53ee8cc1Swenshuai.xi UADP_SDT_0_DEF(MS_PHYADDR_u32Addr);
30*53ee8cc1Swenshuai.xi UADP_SDT_1_DEF(BDMA_SEARCH_PARAM_PRIVATE);
31*53ee8cc1Swenshuai.xi
32*53ee8cc1Swenshuai.xi UADP_SDT_0_DEF(BDMA_Status_pStatus);
33*53ee8cc1Swenshuai.xi UADP_SDT_1_DEF(BDMA_GETSTATUS_PARAM_PRIVATE);
34*53ee8cc1Swenshuai.xi
35*53ee8cc1Swenshuai.xi UADP_SDT_0_DEF(MS_PHYADDR_u32FlashAddr);
36*53ee8cc1Swenshuai.xi UADP_SDT_0_DEF(MS_PHYADDR_u32DramAddr);
37*53ee8cc1Swenshuai.xi UADP_SDT_2_DEF(BDMA_FLASHCOPY2DRAM_PARAM_PRIVATE);
38*53ee8cc1Swenshuai.xi
39*53ee8cc1Swenshuai.xi //UADP_SDT_0_DEF(MS_PHY_phy64SrcAddr);
40*53ee8cc1Swenshuai.xi //UADP_SDT_0_DEF(MS_PHY_phy64DstAddr);
41*53ee8cc1Swenshuai.xi //UADP_SDT_2_DEF(BDMA_MEMCOPY_PARAM_PRIVATE);
42*53ee8cc1Swenshuai.xi
43*53ee8cc1Swenshuai.xi UADP_SDT_0_DEF(MS_PHYADDR_u32Addr);
44*53ee8cc1Swenshuai.xi UADP_SDT_1_DEF(BDMA_PATTERN_FILL_PARAM_PRIVATE);
45*53ee8cc1Swenshuai.xi
46*53ee8cc1Swenshuai.xi //UADP_SDT_0_DEF(MS_PHY_phy64Addr);
47*53ee8cc1Swenshuai.xi //UADP_SDT_1_DEF(BDMA_CRC32_PARAM_PRIVATE);
48*53ee8cc1Swenshuai.xi
49*53ee8cc1Swenshuai.xi
50*53ee8cc1Swenshuai.xi
BDMA_adp_Init(FUtopiaIOctl * pIoctl)51*53ee8cc1Swenshuai.xi MS_U32 BDMA_adp_Init(FUtopiaIOctl* pIoctl)
52*53ee8cc1Swenshuai.xi {
53*53ee8cc1Swenshuai.xi //member of struct
54*53ee8cc1Swenshuai.xi //set table
55*53ee8cc1Swenshuai.xi UADP_SPT_0NXT(BDMA_CRC32_PARAM);
56*53ee8cc1Swenshuai.xi UADP_SPT_0NXT(BDMA_MEMCOPY_PARAM);
57*53ee8cc1Swenshuai.xi
58*53ee8cc1Swenshuai.xi UADP_SDT_NAME0(MS_PHYADDR_u32Addr,MS_PHYADDR);
59*53ee8cc1Swenshuai.xi UADP_SDT_NAME1(BDMA_SEARCH_PARAM_PRIVATE,BDMA_SEARCH_PARAM,UADP_SDT_AT ,u32Addr,MS_PHYADDR_u32Addr);
60*53ee8cc1Swenshuai.xi
61*53ee8cc1Swenshuai.xi UADP_SDT_NAME0(BDMA_Status_pStatus,BDMA_Status);
62*53ee8cc1Swenshuai.xi UADP_SDT_NAME1(BDMA_GETSTATUS_PARAM_PRIVATE,BDMA_GETSTATUS_PARAM,UADP_SDT_P2N,pStatus,BDMA_Status_pStatus);
63*53ee8cc1Swenshuai.xi
64*53ee8cc1Swenshuai.xi UADP_SDT_NAME0(MS_PHYADDR_u32FlashAddr,MS_PHYADDR);
65*53ee8cc1Swenshuai.xi UADP_SDT_NAME0(MS_PHYADDR_u32DramAddr,MS_PHYADDR);
66*53ee8cc1Swenshuai.xi UADP_SDT_NAME2(BDMA_FLASHCOPY2DRAM_PARAM_PRIVATE,BDMA_FLASHCOPY2DRAM_PARAM,UADP_SDT_AT ,u32FlashAddr,MS_PHYADDR_u32FlashAddr,UADP_SDT_AT,u32DramAddr,MS_PHYADDR_u32DramAddr);
67*53ee8cc1Swenshuai.xi
68*53ee8cc1Swenshuai.xi //UADP_SDT_NAME0(MS_PHY_phy64SrcAddr,MS_PHY);
69*53ee8cc1Swenshuai.xi //UADP_SDT_NAME0(MS_PHY_phy64DstAddr,MS_PHY);
70*53ee8cc1Swenshuai.xi //UADP_SDT_NAME2(BDMA_MEMCOPY_PARAM_PRIVATE,BDMA_MEMCOPY_PARAM,UADP_SDT_AT ,phy64SrcAddr,MS_PHY_phy64SrcAddr,UADP_SDT_AT,phy64DstAddr,MS_PHY_phy64DstAddr);
71*53ee8cc1Swenshuai.xi
72*53ee8cc1Swenshuai.xi UADP_SDT_NAME0(MS_PHYADDR_u32Addr,MS_PHYADDR);
73*53ee8cc1Swenshuai.xi UADP_SDT_NAME1(BDMA_PATTERN_FILL_PARAM_PRIVATE,BDMA_PATTERN_FILL_PARAM,UADP_SDT_AT,u32Addr,MS_PHYADDR_u32Addr);
74*53ee8cc1Swenshuai.xi
75*53ee8cc1Swenshuai.xi //UADP_SDT_NAME0(MS_PHY_phy64Addr,MS_PHY);
76*53ee8cc1Swenshuai.xi //UADP_SDT_NAME1(BDMA_CRC32_PARAM_PRIVATE,BDMA_CRC32_PARAM,UADP_SDT_AT,phy64Addr,MS_PHY_phy64Addr);
77*53ee8cc1Swenshuai.xi
78*53ee8cc1Swenshuai.xi #ifdef MOBF_ENABLE
79*53ee8cc1Swenshuai.xi //UADP_SDT_NAME0(MS_PHY_phy64Addr,MS_PHY);
80*53ee8cc1Swenshuai.xi UADP_SDT_NAME0(BDMA_MOBF_PS_pMobfPsCfg,BDMA_MOBF_PS);
81*53ee8cc1Swenshuai.xi //UADP_SDT_NAME0(MS_PHY_phy64SearchAddr,MS_PHY);
82*53ee8cc1Swenshuai.xi UADP_SDT_NAME1(BDMA_MOBFSEARCH_PARAM_PRIVATE,BDMA_MOBFSEARCH_PARAM,UADP_SDT_P2N,pMobfPsCfg,BDMA_MOBF_PS_pMobfPsCfg);
83*53ee8cc1Swenshuai.xi #endif
84*53ee8cc1Swenshuai.xi
85*53ee8cc1Swenshuai.xi UADPBypassSetSPT(&spt_BDMA_INIT_PARAM[0],UADP_SPT_SELF_SIZE,0, sizeof(BDMA_INIT_PARAM));
86*53ee8cc1Swenshuai.xi UADPBypassSetSPT(&spt_BDMA_INIT_PARAM[1],UADP_SPT_END , 0, 0);
87*53ee8cc1Swenshuai.xi
88*53ee8cc1Swenshuai.xi UADPBypassSetSPT(&spt_BDMA_COPYHND_PARAM[0],UADP_SPT_SELF_SIZE,0, sizeof(BDMA_COPYHND_PARAM));
89*53ee8cc1Swenshuai.xi UADPBypassSetSPT(&spt_BDMA_COPYHND_PARAM[1],UADP_SPT_END , 0, 0);
90*53ee8cc1Swenshuai.xi
91*53ee8cc1Swenshuai.xi *pIoctl= (FUtopiaIOctl)BDMA_adp_Ioctl;
92*53ee8cc1Swenshuai.xi return 0;
93*53ee8cc1Swenshuai.xi }
94*53ee8cc1Swenshuai.xi
BDMA_adp_Ioctl(void * pInstanceTmp,MS_U32 u32Cmd,void * const pArgs)95*53ee8cc1Swenshuai.xi MS_U32 BDMA_adp_Ioctl(void* pInstanceTmp, MS_U32 u32Cmd, void* const pArgs)
96*53ee8cc1Swenshuai.xi {
97*53ee8cc1Swenshuai.xi MS_U32 u32Ret=0;
98*53ee8cc1Swenshuai.xi char buffer_arg[2048];
99*53ee8cc1Swenshuai.xi switch(u32Cmd)
100*53ee8cc1Swenshuai.xi {
101*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_Init:
102*53ee8cc1Swenshuai.xi u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_BDMA_INIT_PARAM, NULL,buffer_arg,sizeof(buffer_arg));
103*53ee8cc1Swenshuai.xi break;
104*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_CopyHnd:
105*53ee8cc1Swenshuai.xi u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_BDMA_COPYHND_PARAM, NULL,buffer_arg,sizeof(buffer_arg));
106*53ee8cc1Swenshuai.xi break;
107*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_MemCopy:
108*53ee8cc1Swenshuai.xi u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_BDMA_MEMCOPY_PARAM, NULL,buffer_arg,sizeof(buffer_arg));
109*53ee8cc1Swenshuai.xi break;
110*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_Search:
111*53ee8cc1Swenshuai.xi u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_BDMA_SEARCH_PARAM_PRIVATE, spt_BDMA_SEARCH_PARAM_PRIVATE,buffer_arg,sizeof(buffer_arg));
112*53ee8cc1Swenshuai.xi break;
113*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_CRC32:
114*53ee8cc1Swenshuai.xi u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_BDMA_CRC32_PARAM, spt_BDMA_CRC32_PARAM,buffer_arg,sizeof(buffer_arg));
115*53ee8cc1Swenshuai.xi break;
116*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_Pattern_Fill:
117*53ee8cc1Swenshuai.xi u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_BDMA_PATTERN_FILL_PARAM_PRIVATE, spt_BDMA_PATTERN_FILL_PARAM_PRIVATE,buffer_arg,sizeof(buffer_arg));
118*53ee8cc1Swenshuai.xi break;
119*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_FlashCopy2Dram:
120*53ee8cc1Swenshuai.xi u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_BDMA_FLASHCOPY2DRAM_PARAM_PRIVATE, NULL, buffer_arg,sizeof(buffer_arg));
121*53ee8cc1Swenshuai.xi break;
122*53ee8cc1Swenshuai.xi #ifdef MOBF_ENABLE
123*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_MOBFSearch:
124*53ee8cc1Swenshuai.xi u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_BDMA_MOBFSEARCH_PARAM_PRIVATE, spt_BDMA_MOBFSEARCH_PARAM_PRIVATE, buffer_arg,sizeof(buffer_arg));
125*53ee8cc1Swenshuai.xi break;
126*53ee8cc1Swenshuai.xi #endif
127*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_GetStatus:
128*53ee8cc1Swenshuai.xi u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,NULL, spt_BDMA_GETSTATUS_PARAM_PRIVATE, buffer_arg,sizeof(buffer_arg));
129*53ee8cc1Swenshuai.xi break;
130*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_GetInfo:
131*53ee8cc1Swenshuai.xi break;
132*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_GetLibVer:
133*53ee8cc1Swenshuai.xi break;
134*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_GetMinSize:
135*53ee8cc1Swenshuai.xi break;
136*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_SetDbgLevel:
137*53ee8cc1Swenshuai.xi break;
138*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_SetSPIOffsetForMCU:
139*53ee8cc1Swenshuai.xi case MDrv_CMD_BDMA_WaitFlashDone:
140*53ee8cc1Swenshuai.xi u32Ret=UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
141*53ee8cc1Swenshuai.xi break;
142*53ee8cc1Swenshuai.xi default:
143*53ee8cc1Swenshuai.xi break;
144*53ee8cc1Swenshuai.xi }
145*53ee8cc1Swenshuai.xi return u32Ret;
146*53ee8cc1Swenshuai.xi }
147*53ee8cc1Swenshuai.xi
148