1 #include "MsTypes.h"
2 #include <stdio.h>
3 #include "utopia_dapi.h"
4 #include "utopia.h"
5 #include "drvSERFLASH.h"
6 #include "drvSERFLASH_private.h"
7 #include "MsOS.h"
8
9 #include "ULog.h"
10
11 #define TAG_SERFLASH "SERFLASH"
12
13 enum
14 {
15 FLASH_POOL_ID_SERFLASH=0
16 } eFlashPoolID;
17
FLASHRegisterToUtopia(FUtopiaOpen ModuleType)18 void FLASHRegisterToUtopia(FUtopiaOpen ModuleType)
19 {
20 // 1. deal with module
21 void* pUtopiaModule = NULL;
22 UtopiaModuleCreate(MODULE_FLASH, 8, &pUtopiaModule);
23 UtopiaModuleRegister(pUtopiaModule);
24 UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)FLASHOpen, (FUtopiaClose)FLASHClose, (FUtopiaIOctl)FLASHIoctl);
25
26 // 2. deal with resource
27 void* psResource = NULL;
28 UtopiaModuleAddResourceStart(pUtopiaModule, FLASH_POOL_ID_SERFLASH);
29 UtopiaResourceCreate("SERFLASH", sizeof(SERFLASH_RESOURCE_PRIVATE), &psResource);
30 UtopiaResourceRegister(pUtopiaModule, psResource, FLASH_POOL_ID_SERFLASH);
31 UtopiaModuleAddResourceEnd(pUtopiaModule, FLASH_POOL_ID_SERFLASH);
32
33 }
34
FLASHOpen(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)35 MS_U32 FLASHOpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
36 {
37 ULOGD(TAG_SERFLASH, "\n[SERFLASH INFO] spi flash open \n");
38
39 SERFLASH_INSTANT_PRIVATE *pSERFlashPri = NULL;
40 UtopiaInstanceCreate(sizeof(SERFLASH_INSTANT_PRIVATE), ppInstance);
41 UtopiaInstanceGetPrivate(*ppInstance, (void**)&pSERFlashPri);
42 #if (SERFLASH_UTOPIA20)
43 pSERFlashPri->fpSERFLASHGetInfo = MDrv_SERFLASH_GetInfo;
44 pSERFlashPri->fpSERFLASHGetLibVer = MDrv_SERFLASH_GetLibVer;
45 pSERFlashPri->fpSERFLASHGetStatus = MDrv_SERFLASH_GetStatus;
46 pSERFlashPri->fpSERFLASHSetDbgLevel = _MDrv_SERFLASH_SetDbgLevel;
47 pSERFlashPri->fpSERFLASHSetWPInfo = _MDrv_SERFLASH_SetWPInfo;
48 pSERFlashPri->fpSERFLASHSetMcuCSCallBack = _MDrv_SERFLASH_SetMcuCSCallBack;
49 pSERFlashPri->fpSERFLASHSetFlashWPCallBack = _MDrv_SERFLASH_SetFlashWPCallBack;
50 pSERFlashPri->fpSERFLASHDetectType = _MDrv_SERFLASH_DetectType;
51 pSERFlashPri->fpSERFLASHDetectSize = _MDrv_SERFLASH_DetectSize;
52 pSERFlashPri->fpSERFLASHSet2XRead = _MDrv_SERFLASH_Set2XRead;
53 pSERFlashPri->fpSERFLASHSetCKG = _MDrv_SERFLASH_SetCKG;
54 pSERFlashPri->fpSERFLASHClkDiv = _MDrv_SERFLASH_ClkDiv;
55 pSERFlashPri->fpSERFLASHSetMode = _MDrv_SERFLASH_SetMode;
56 pSERFlashPri->fpSERFLASHReadUID = _MDrv_SERFLASH_ReadUID;
57 pSERFlashPri->fpSERFLASHChipSelect = _MDrv_SERFLASH_ChipSelect;
58 pSERFlashPri->fpSERFLASHInit = MDrv_SERFLASH_Init;
59 pSERFlashPri->fpSERFLASHReadID = _MDrv_SERFLASH_ReadID;
60 pSERFlashPri->fpSERFLASHRead = _MDrv_SERFLASH_Read;
61 pSERFlashPri->fpSERFLASHEraseChip = _MDrv_SERFLASH_EraseChip;
62 pSERFlashPri->fpSERFLASHAddressToBlock = _MDrv_SERFLASH_AddressToBlock;
63 pSERFlashPri->fpSERFLASHBlockToAddress = _MDrv_SERFLASH_BlockToAddress;
64 pSERFlashPri->fpSERFLASHAddressErase = _MDrv_SERFLASH_AddressErase;
65 pSERFlashPri->fpSERFLASHBlockErase = _MDrv_SERFLASH_BlockErase;
66 pSERFlashPri->fpSERFLASHSectorErase = _MDrv_SERFLASH_SectorErase;
67 pSERFlashPri->fpSERFLASHCheckWriteDone = _MDrv_SERFLASH_CheckWriteDone;
68 pSERFlashPri->fpSERFLASHWrite = _MDrv_SERFLASH_Write;
69 pSERFlashPri->fpSERFLASHDMA = _MDrv_SERFLASH_DMA;
70 pSERFlashPri->fpSERFLASHWriteProtect = _MDrv_SERFLASH_WriteProtect;
71 pSERFlashPri->fpSERFLASHWriteProtectEnableAllRange = _MDrv_SERFLASH_WriteProtect_Enable_All_Range;
72 pSERFlashPri->fpSERFLASHWriteProtectDisableAllRange = _MDrv_SERFLASH_WriteProtect_Disable_All_Range;
73 pSERFlashPri->fpSERFLASHWriteProtectDisableRangeSet = _MDrv_SERFLASH_WriteProtect_Disable_Range_Set;
74 pSERFlashPri->fpSERFLASHWriteProtectArea = _MDrv_SERFLASH_WriteProtect_Area;
75 pSERFlashPri->fpSERFLASHReadStatusRegister = _MDrv_SERFLASH_ReadStatusRegister;
76 pSERFlashPri->fpSERFLASHReadStatusRegister2 = _MDrv_SERFLASH_ReadStatusRegister2;
77 pSERFlashPri->fpSERFLASHWriteStatusRegister = _MDrv_SERFLASH_WriteStatusRegister;
78 pSERFlashPri->fpSERFLASHCopyHnd = _MDrv_SERFLASH_CopyHnd;
79 pSERFlashPri->fpSERFLASHSetGPIO = _MDrv_SERFLASH_SetGPIO;
80 #else
81 pSERFlashPri->fpSERFLASHGetInfo = MDrv_SERFLASH_GetInfo;
82 pSERFlashPri->fpSERFLASHGetLibVer = MDrv_SERFLASH_GetLibVer;
83 pSERFlashPri->fpSERFLASHGetStatus = MDrv_SERFLASH_GetStatus;
84 pSERFlashPri->fpSERFLASHSetDbgLevel = MDrv_SERFLASH_SetDbgLevel;
85 pSERFlashPri->fpSERFLASHSetWPInfo = MDrv_SERFLASH_SetWPInfo;
86 pSERFlashPri->fpSERFLASHSetMcuCSCallBack = MDrv_SERFLASH_SetMcuCSCallBack;
87 pSERFlashPri->fpSERFLASHSetFlashWPCallBack = MDrv_SERFLASH_SetFlashWPCallBack;
88 pSERFlashPri->fpSERFLASHDetectType = MDrv_SERFLASH_DetectType;
89 pSERFlashPri->fpSERFLASHDetectSize = MDrv_SERFLASH_DetectSize;
90 pSERFlashPri->fpSERFLASHSet2XRead = MDrv_SERFLASH_Set2XRead;
91 pSERFlashPri->fpSERFLASHSetCKG = MDrv_SERFLASH_SetCKG;
92 pSERFlashPri->fpSERFLASHClkDiv = MDrv_SERFLASH_ClkDiv;
93 pSERFlashPri->fpSERFLASHSetMode = MDrv_SERFLASH_SetMode;
94 pSERFlashPri->fpSERFLASHReadUID = MDrv_SERFLASH_ReadUID;
95 pSERFlashPri->fpSERFLASHChipSelect = MDrv_SERFLASH_ChipSelect;
96 pSERFlashPri->fpSERFLASHInit = MDrv_SERFLASH_Init;
97 pSERFlashPri->fpSERFLASHReadID = MDrv_SERFLASH_ReadID;
98 pSERFlashPri->fpSERFLASHRead = MDrv_SERFLASH_Read;
99 pSERFlashPri->fpSERFLASHEraseChip = MDrv_SERFLASH_EraseChip;
100 pSERFlashPri->fpSERFLASHAddressToBlock = MDrv_SERFLASH_AddressToBlock;
101 pSERFlashPri->fpSERFLASHBlockToAddress = MDrv_SERFLASH_BlockToAddress;
102 pSERFlashPri->fpSERFLASHAddressErase = MDrv_SERFLASH_AddressErase;
103 pSERFlashPri->fpSERFLASHBlockErase = MDrv_SERFLASH_BlockErase;
104 pSERFlashPri->fpSERFLASHSectorErase = MDrv_SERFLASH_SectorErase;
105 pSERFlashPri->fpSERFLASHCheckWriteDone = MDrv_SERFLASH_CheckWriteDone;
106 pSERFlashPri->fpSERFLASHWrite = MDrv_SERFLASH_Write;
107 pSERFlashPri->fpSERFLASHDMA = MDrv_SERFLASH_DMA;
108 pSERFlashPri->fpSERFLASHWriteProtect = MDrv_SERFLASH_WriteProtect;
109 pSERFlashPri->fpSERFLASHWriteProtectEnableAllRange = MDrv_SERFLASH_WriteProtect_Enable_All_Range;
110 pSERFlashPri->fpSERFLASHWriteProtectDisableAllRange = MDrv_SERFLASH_WriteProtect_Disable_All_Range;
111 pSERFlashPri->fpSERFLASHWriteProtectDisableRangeSet = MDrv_SERFLASH_WriteProtect_Disable_Range_Set;
112 pSERFlashPri->fpSERFLASHWriteProtectArea = MDrv_SERFLASH_WriteProtect_Area;
113 pSERFlashPri->fpSERFLASHReadStatusRegister = MDrv_SERFLASH_ReadStatusRegister;
114 pSERFlashPri->fpSERFLASHReadStatusRegister2 = MDrv_SERFLASH_ReadStatusRegister2;
115 pSERFlashPri->fpSERFLASHWriteStatusRegister = MDrv_SERFLASH_WriteStatusRegister;
116 pSERFlashPri->fpSERFLASHCopyHnd = MDrv_SERFLASH_CopyHnd;
117 pSERFlashPri->fpSERFLASHSetGPIO = MDrv_SERFLASH_SetGPIO;
118 #endif
119
120 return TRUE;
121 }
122
123 // FIXME: why static?
FLASHIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)124 MS_U32 FLASHIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
125 {
126 MS_U32 u32Ret = 0;
127 void* pModule = NULL;
128 UtopiaInstanceGetModule(pInstance, &pModule);
129 void* pResource = NULL;
130 PSERFLASH_GETLIBVER pGetLibVerParam = NULL;
131 PSERFLASH_GETSTATUS pGetStatusParam = NULL;
132 PSERFLASH_SETDBGLEVEL pSetDbgLevelParam = NULL;
133 PSERFLASH_SETWPINFO pSetWPInfoParam = NULL;
134 PSERFLASH_SETMCUCSCB pSetMcuCSCBParam = NULL;
135 PSERFLASH_SETFLASHWPCB pSetFlashWPCBParam = NULL;
136 PSERFLASH_DETECTSIZE pDetectSizeParam = NULL;
137 PSERFLASH_SET2XREAD pSet2XReadParam = NULL;
138 PSERFLASH_SETCKG pSetCkgParam = NULL;
139 PSERFLASH_CLKDIV pClkDivParam = NULL;
140 PSERFLASH_SETMODE pSetModeParam = NULL;
141 PSERFLASH_CHIPSELECT pChipSelectParam = NULL;
142 PSERFLASH_READSTATUSREG pReadStatusRegParam = NULL;
143 PSERFLASH_READSTATUSREG2 pReadStatusReg2Param = NULL;
144 PSERFLASH_WRITESTATUSREG pWriteStatusRegParam = NULL;
145 PSERFLASH_SETGPIO pSetGPIOParam = NULL;
146 PSERFLASH_READID pReadIDParam = NULL;
147 PSERFLASH_READ pReadParam = NULL;
148 PSERFLASH_ADDRTOBLK pAddr2BlkParam = NULL;
149 PSERFLASH_BLKTOADDR pBlk2AddrParam = NULL;
150 PSERFLASH_ADDRERASE pAddrEraseParam = NULL;
151 PSERFLASH_BLKERASE pBlkEraseParam = NULL;
152 PSERFLASH_SECERASE pSecEraseParam = NULL;
153 PSERFLASH_WRITE pWriteParam = NULL;
154 PSERFLASH_DMA pDMAParam = NULL;
155 PSERFLASH_WP pWPParam = NULL;
156 PSERFLASH_WPDISABLERANGESET pWPDisableRangeSetParam = NULL;
157 PSERFLASH_WPAREA pWPAreaParam = NULL;
158 PSERFLASH_COPYHND pCopyHndParam = NULL;
159 SERFLASH_INSTANT_PRIVATE* psSERFLASHInstPri = NULL;
160 UtopiaInstanceGetPrivate(pInstance, (void**)&psSERFLASHInstPri);
161
162 switch(u32Cmd)
163 {
164 case MDrv_CMD_SERFLASH_GetInfo:
165 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_GetInfo\n");
166 // this function won't occupy h/w, so don't need to call UtopiaResourceObtainToInstant
167 u32Ret = (MS_VIRT)psSERFLASHInstPri->fpSERFLASHGetInfo();
168 return u32Ret;
169 case MDrv_CMD_SERFLASH_GetLibVer:
170 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_GetLibVer\n");
171 pGetLibVerParam = (PSERFLASH_GETLIBVER)pArgs;
172 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHGetLibVer(pGetLibVerParam->ppVersion);
173 return u32Ret;
174 case MDrv_CMD_SERFLASH_GetStatus:
175 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_GetStatus\n");
176 pGetStatusParam = (PSERFLASH_GETSTATUS)pArgs;
177 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHGetStatus(pGetStatusParam->pDrvStatus);
178 return u32Ret;
179 case MDrv_CMD_SERFLASH_SetDbgLevel:
180 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_SetDbgLevel\n");
181 pSetDbgLevelParam = (PSERFLASH_SETDBGLEVEL)pArgs;
182 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHSetDbgLevel(pSetDbgLevelParam->u8DbgLevel);
183 return u32Ret;
184 case MDrv_CMD_SERFLASH_SetWPInfo:
185 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_SetWPInfo\n");
186 pSetWPInfoParam = (PSERFLASH_SETWPINFO)pArgs;
187 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHSetWPInfo(pSetWPInfoParam->bWPInfo);
188 break;
189 case MDrv_CMD_SERFLASH_SetMcuCSCallBack:
190 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_SetMcuCSCallBack\n");
191 pSetMcuCSCBParam = (PSERFLASH_SETMCUCSCB)pArgs;
192 psSERFLASHInstPri->fpSERFLASHSetMcuCSCallBack(pSetMcuCSCBParam->ChipSel_cb);
193 return 0;
194
195 case MDrv_CMD_SERFLASH_SetFlashWPCallBack:
196 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_SetFlashWPCallBack\n");
197 pSetFlashWPCBParam = (PSERFLASH_SETFLASHWPCB)pArgs;
198 psSERFLASHInstPri->fpSERFLASHSetFlashWPCallBack(pSetFlashWPCBParam->FlashWP_cb);
199 return 0;
200 case MDrv_CMD_SERFLASH_DetectType:
201 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_DetectType\n");
202 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
203 {
204 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
205 return 0xFFFFFFFF;
206 }
207 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHDetectType();
208 UtopiaResourceRelease(pResource);
209 return 0;
210 case MDrv_CMD_SERFLASH_DetectSize:
211 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_DetectSize\n");
212 pDetectSizeParam = (PSERFLASH_DETECTSIZE)pArgs;
213 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
214 {
215 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
216 return 0xFFFFFFFF;
217 }
218 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHDetectSize(pDetectSizeParam->u32FlashSize);
219 UtopiaResourceRelease(pResource);
220 return 0;
221 case MDrv_CMD_SERFLASH_Set2XRead:
222 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_Set2XRead\n");
223 pSet2XReadParam = (PSERFLASH_SET2XREAD)pArgs;
224 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
225 {
226 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
227 return 0xFFFFFFFF;
228 }
229 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHSet2XRead(pSet2XReadParam->b2XMode);
230 UtopiaResourceRelease(pResource);
231 return 0;
232 case MDrv_CMD_SERFLASH_SetCKG:
233 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_SetCKG\n");
234 pSetCkgParam = (PSERFLASH_SETCKG)pArgs;
235 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
236 {
237 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
238 return 0xFFFFFFFF;
239 }
240 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHSetCKG(pSetCkgParam->eCKGspi);
241 UtopiaResourceRelease(pResource);
242 return 0;
243 case MDrv_CMD_SERFLASH_ClkDiv:
244 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_ClkDiv\n");
245 pClkDivParam = (PSERFLASH_CLKDIV)pArgs;
246 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
247 {
248 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
249 return 0xFFFFFFFF;
250 }
251 psSERFLASHInstPri->fpSERFLASHClkDiv(pClkDivParam->eClkDivspi);
252 UtopiaResourceRelease(pResource);
253 return 0;
254 case MDrv_CMD_SERFLASH_SetMode:
255 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_SetMode\n");
256 pSetModeParam = (PSERFLASH_SETMODE)pArgs;
257 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
258 {
259 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
260 return 0xFFFFFFFF;
261 }
262 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHSetMode(pSetModeParam->bXiuRiu);
263 UtopiaResourceRelease(pResource);
264 return 0;
265 case MDrv_CMD_SERFLASH_ReadUID:
266 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_ReadUID\n");
267 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
268 {
269 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
270 return 0xFFFFFFFF;
271 }
272 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHReadUID();
273 UtopiaResourceRelease(pResource);
274 return 0;
275 case MDrv_CMD_SERFLASH_ChipSelect:
276 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_ChipSelect\n");
277 pChipSelectParam = (PSERFLASH_CHIPSELECT)pArgs;
278 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
279 {
280 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
281 return 0xFFFFFFFF;
282 }
283 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHChipSelect(pChipSelectParam->u8FlashIndex);
284 UtopiaResourceRelease(pResource);
285 return 0;
286 case MDrv_CMD_SERFLASH_Init:
287 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_Init\n");
288 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
289 {
290 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
291 return 0xFFFFFFFF;
292 }
293 psSERFLASHInstPri->fpSERFLASHInit();
294 UtopiaResourceRelease(pResource);
295 return 0;
296 case MDrv_CMD_SERFLASH_ReadID:
297 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_ReadID\n");
298 pReadIDParam = (PSERFLASH_READID)pArgs;
299 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
300 {
301 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
302 return 0xFFFFFFFF;
303 }
304 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHReadID(pReadIDParam->pu8FlashID,pReadIDParam->u32IDSize);
305 UtopiaResourceRelease(pResource);
306 return 0;
307 case MDrv_CMD_SERFLASH_Read:
308 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_Read\n");
309 pReadParam = (PSERFLASH_READ)pArgs;
310 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
311 {
312 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
313 return 0xFFFFFFFF;
314 }
315 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHRead(pReadParam->u32FlashAddr,pReadParam->u32FlashSize,pReadParam->user_buffer);
316 UtopiaResourceRelease(pResource);
317 return 0;
318 case MDrv_CMD_SERFLASH_EraseChip:
319 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_EraseChip\n");
320 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
321 {
322 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
323 return 0xFFFFFFFF;
324 }
325 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHEraseChip();
326 UtopiaResourceRelease(pResource);
327 return 0;
328 case MDrv_CMD_SERFLASH_AddressToBlock:
329 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_AddressToBlock\n");
330 pAddr2BlkParam = (PSERFLASH_ADDRTOBLK)pArgs;
331 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
332 {
333 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
334 return 0xFFFFFFFF;
335 }
336 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHAddressToBlock(pAddr2BlkParam->u32FlashAddr,pAddr2BlkParam->pu32BlockIndex);
337 UtopiaResourceRelease(pResource);
338 return 0;
339 case MDrv_CMD_SERFLASH_BlockToAddress:
340 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_BlockToAddress\n");
341 pBlk2AddrParam = (PSERFLASH_BLKTOADDR)pArgs;
342 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
343 {
344 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
345 return 0xFFFFFFFF;
346 }
347 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHBlockToAddress(pBlk2AddrParam->u32BlockIndex,pBlk2AddrParam->pu32FlashAddr);
348 UtopiaResourceRelease(pResource);
349 return 0;
350 case MDrv_CMD_SERFLASH_AddressErase:
351 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_AddressErase\n");
352 pAddrEraseParam = (PSERFLASH_ADDRERASE)pArgs;
353 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
354 {
355 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
356 return 0xFFFFFFFF;
357 }
358 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHAddressErase(pAddrEraseParam->u32StartAddr,pAddrEraseParam->u32EraseSize,pAddrEraseParam->bWait);
359 UtopiaResourceRelease(pResource);
360 return 0;
361 case MDrv_CMD_SERFLASH_BlockErase:
362 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_BlockErase\n");
363 pBlkEraseParam = (PSERFLASH_BLKERASE)pArgs;
364 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
365 {
366 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
367 return 0xFFFFFFFF;
368 }
369 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHBlockErase(pBlkEraseParam->u32StartBlock,pBlkEraseParam->u32EndBlock,pBlkEraseParam->bWait);
370 UtopiaResourceRelease(pResource);
371 return 0;
372 case MDrv_CMD_SERFLASH_SectorErase:
373 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_SectorErase\n");
374 pSecEraseParam = (PSERFLASH_SECERASE)pArgs;
375 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
376 {
377 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
378 return 0xFFFFFFFF;
379 }
380 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHSectorErase(pSecEraseParam->u32StartAddr,pSecEraseParam->u32EndAddr);
381 UtopiaResourceRelease(pResource);
382 return 0;
383 case MDrv_CMD_SERFLASH_CheckWriteDone:
384 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_CheckWriteDone\n");
385 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
386 {
387 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
388 return 0xFFFFFFFF;
389 }
390 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHCheckWriteDone();
391 UtopiaResourceRelease(pResource);
392 return 0;
393 case MDrv_CMD_SERFLASH_Write:
394 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_Write\n");
395 pWriteParam = (PSERFLASH_WRITE)pArgs;
396 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
397 {
398 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
399 return 0xFFFFFFFF;
400 }
401 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHWrite(pWriteParam->u32FlashAddr,pWriteParam->u32FlashSize,pWriteParam->user_buffer);
402 UtopiaResourceRelease(pResource);
403 return 0;
404 case MDrv_CMD_SERFLASH_DMA:
405 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_DMA\n");
406 pDMAParam = (PSERFLASH_DMA)pArgs;
407 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
408 {
409 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
410 return 0xFFFFFFFF;
411 }
412 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHDMA(pDMAParam->u32FlashStart,pDMAParam->u32DRAMStart,pDMAParam->u32Size);
413 UtopiaResourceRelease(pResource);
414 return 0;
415 case MDrv_CMD_SERFLASH_WriteProtect:
416 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_WriteProtect\n");
417 pWPParam = (PSERFLASH_WP)pArgs;
418 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
419 {
420 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
421 return 0xFFFFFFFF;
422 }
423 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHWriteProtect(pWPParam->bEnable);
424 UtopiaResourceRelease(pResource);
425 return 0;
426 case MDrv_CMD_SERFLASH_WriteProtect_Enable_All_Range:
427 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_WriteProtect_Enable_All_Range\n");
428 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
429 {
430 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
431 return 0xFFFFFFFF;
432 }
433 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHWriteProtectEnableAllRange();
434 UtopiaResourceRelease(pResource);
435 return 0;
436 case MDrv_CMD_SERFLASH_WriteProtect_Disable_All_Range:
437 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_WriteProtect_Disable_All_Range\n");
438 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
439 {
440 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
441 return 0xFFFFFFFF;
442 }
443 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHWriteProtectDisableAllRange();
444 UtopiaResourceRelease(pResource);
445 return 0;
446 case MDrv_CMD_SERFLASH_WriteProtect_Disable_Range_Set:
447 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_WriteProtect_Disable_Range_Set\n");
448 pWPDisableRangeSetParam = (PSERFLASH_WPDISABLERANGESET)pArgs;
449 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
450 {
451 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
452 return 0xFFFFFFFF;
453 }
454 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHWriteProtectDisableRangeSet(pWPDisableRangeSetParam->u32DisableLowerBound,pWPDisableRangeSetParam->u32DisableSize);
455 UtopiaResourceRelease(pResource);
456 return 0;
457 case MDrv_CMD_SERFLASH_WriteProtect_Area:
458 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_WriteProtect_Disable_Range_Set\n");
459 pWPAreaParam = (PSERFLASH_WPAREA)pArgs;
460 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
461 {
462 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
463 return 0xFFFFFFFF;
464 }
465 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHWriteProtectArea(pWPAreaParam->bEnableAllArea,pWPAreaParam->u8BlockProtectBits);
466 UtopiaResourceRelease(pResource);
467 return 0;
468 case MDrv_CMD_SERFLASH_ReadStatusRegister:
469 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_ReadStatusRegister\n");
470 pReadStatusRegParam = (PSERFLASH_READSTATUSREG)pArgs;
471 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
472 {
473 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
474 return 0xFFFFFFFF;
475 }
476 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHReadStatusRegister(pReadStatusRegParam->pu8StatusReg);
477 UtopiaResourceRelease(pResource);
478 return 0;
479 case MDrv_CMD_SERFLASH_ReadStatusRegister2:
480 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_ReadStatusRegister2\n");
481 pReadStatusReg2Param = (PSERFLASH_READSTATUSREG2)pArgs;
482 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
483 {
484 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
485 return 0xFFFFFFFF;
486 }
487 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHReadStatusRegister2(pReadStatusReg2Param->pu8StatusReg);
488 UtopiaResourceRelease(pResource);
489 return 0;
490 case MDrv_CMD_SERFLASH_WriteStatusRegister:
491 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_WriteStatusRegister\n");
492 pWriteStatusRegParam = (PSERFLASH_WRITESTATUSREG)pArgs;
493 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
494 {
495 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
496 return 0xFFFFFFFF;
497 }
498 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHWriteStatusRegister(pWriteStatusRegParam->u16StatusReg);
499 UtopiaResourceRelease(pResource);
500 return 0;
501 case MDrv_CMD_SERFLASH_CopyHnd:
502 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_CopyHnd\n");
503 pCopyHndParam = (PSERFLASH_COPYHND)pArgs;
504 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
505 {
506 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
507 return 0xFFFFFFFF;
508 }
509 u32Ret = (MS_U32)psSERFLASHInstPri->fpSERFLASHCopyHnd(pCopyHndParam->u32FlashAddr,
510 pCopyHndParam->u32DstAddr,
511 pCopyHndParam->u32Len,
512 pCopyHndParam->eDstDev,
513 pCopyHndParam->u8OpCfg);
514 UtopiaResourceRelease(pResource);
515 return 0;
516 case MDrv_CMD_SERFLASH_SetGPIO:
517 ULOGD(TAG_SERFLASH,"FLASHIoctl - MDrv_CMD_SERFLASH_SetGPIO\n");
518 pSetGPIOParam = (PSERFLASH_SETGPIO)pArgs;
519 if(UtopiaResourceObtain(pModule, FLASH_POOL_ID_SERFLASH, &pResource) != 0)
520 {
521 ULOGE(TAG_SERFLASH,"UtopiaResourceObtainToInstant fail\n");
522 return 0xFFFFFFFF;
523 }
524 psSERFLASHInstPri->fpSERFLASHSetGPIO(pSetGPIOParam->bSwitch);
525 UtopiaResourceRelease(pResource);
526 return 0;
527 default:
528 break;
529 };
530
531 return 0; // FIXME: error code
532 }
533
FLASHClose(void * pInstance)534 MS_U32 FLASHClose(void* pInstance)
535 {
536 UtopiaInstanceDelete(pInstance);
537
538 return TRUE;
539 }
540
541
542
543