xref: /utopia/UTPA2-700.0.x/modules/flash/drv/flash/serial/mdrvSERFLASH.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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