flash.c
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:4k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. //
  2. // Copyright (c) Microsoft Corporation.  All rights reserved.
  3. //
  4. //
  5. // Use of this source code is subject to the terms of the Microsoft end-user
  6. // license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
  7. // If you did not accept the terms of the EULA, you are not authorized to use
  8. // this source code. For a copy of the EULA, please see the LICENSE.RTF on your
  9. // install media.
  10. //
  11. /*++
  12. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  13. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  14. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  15. PARTICULAR PURPOSE.
  16. Module Name:
  17.     ethdown.c
  18. Abstract:
  19.     This contains an example of a registered TFTP server
  20.     process.  It is the EthDown() routine that handles the download
  21.     of .BIN files to RAM.
  22. Functions:
  23. Notes:
  24. --*/
  25. #include <windows.h>
  26. #include <halether.h>
  27. #include <pehdr.h>
  28. #include "loader.h"
  29. #include "blcommon.h"
  30. #include "warning.h"
  31. extern const PTOC g_pTOC;
  32. extern DWORD g_dwTocEntry;
  33. extern DWORD g_ImageType;
  34. extern MultiBINInfo g_BINRegionInfo;
  35. //
  36. //  Stub function so that we can use blcommon
  37. //
  38. /*
  39.     @func   BOOL | OEMIsFlashAddr | Tests whether the address provided resides in NOR flash.
  40.     @rdesc  TRUE = Specified address resides in flash, FALSE = Specified address doesn't reside in flash.
  41.     @comm
  42.     @xref
  43. */
  44. BOOL OEMIsFlashAddr( DWORD dwPhysStart )
  45. {
  46.     //EdbgOutputDebugString("OEMIsFlashAddr: 0x%x, %drn", dwPhysStart, bRc);
  47.     return FALSE;
  48. }
  49. /*
  50.     @func   LPBYTE | OEMMapMemAddr | Remaps a specified address to a file cache location.
  51.             The file cache is used as a temporary store for flash images before they're written to flash.
  52.     @rdesc  Corresponding address within a file cache area.
  53.     @comm
  54.     @xref
  55. */
  56. LPBYTE OEMMapMemAddr( DWORD dwImageStart, DWORD dwAddr )
  57. {
  58.     //EdbgOutputDebugString("OEMMapMemAddr: 0x%x, 0x%x, ", dwImageStart, dwAddr);
  59.     if ( g_ImageType & IMAGE_TYPE_MXIP )
  60.     {
  61.         DWORD i, Length=0;
  62.         // we don't know the segments length, so parse our BIN table for the length
  63.         for ( i = 0; i < g_BINRegionInfo.dwNumRegions; i++ )
  64.         {
  65.             if ( (dwAddr >= g_BINRegionInfo.Region[i].dwRegionStart) &&
  66.                  (dwAddr <  g_BINRegionInfo.Region[i].dwRegionStart + g_BINRegionInfo.Region[i].dwRegionLength) )
  67.             {
  68.                 dwAddr = (dwAddr - g_BINRegionInfo.Region[i].dwRegionStart) + FLASH_CACHE + Length;
  69.                 break;
  70.             }
  71.             // bump length
  72.             Length += g_BINRegionInfo.Region[i].dwRegionLength;
  73.         }
  74.     }
  75.     //EdbgOutputDebugString("0x%x rn", dwAddr);
  76.     return (LPBYTE)dwAddr;
  77. }
  78. /*
  79.     @func   BOOL | OEMStartEraseFlash | Called at the start of image download, this routine begins the flash erase process.
  80.     @rdesc  TRUE = Success, FALSE = Failure.
  81.     @comm
  82.     @xref
  83. */
  84. BOOL OEMStartEraseFlash( DWORD dwStartAddr, DWORD dwLength )
  85. {
  86.     //EdbgOutputDebugString( "OEMStartEraseFlash: Addr:0x%x Len:0x%xn", dwStartAddr, dwLength);
  87.     return TRUE;
  88. }
  89. /*
  90.     @func   void | OEMContinueEraseFlash | Called frequenty during image download, this routine continues the flash erase process.
  91.     @rdesc  N/A.
  92.     @comm
  93.     @xref
  94. */
  95. void OEMContinueEraseFlash()
  96. {
  97.     //EdbgOutputDebugString("OEMContinueEraseFlashrn");
  98. }
  99. /*
  100.     @func   BOOL | OEMFinishEraseFlash | Called following the image download, this routine completes the flash erase process.
  101.     @rdesc  TRUE = Success, FALSE = Failure.
  102.     @comm
  103.     @xref
  104. */
  105. BOOL OEMFinishEraseFlash()
  106. {
  107.     //EdbgOutputDebugString("OEMFinishEraseFlashrn");
  108.     return TRUE;
  109. }
  110. /*
  111.     @func   BOOL | OEMWriteFlash | Writes data to flash (the source location is determined using OEMMapMemAddr).
  112.     @rdesc  TRUE = Success, FALSE = Failure.
  113.     @comm
  114.     @xref
  115. */
  116. BOOL OEMWriteFlash (DWORD dwStartAddr, DWORD dwLength)
  117. {
  118.     //EdbgOutputDebugString("OEMWriteFlash 0x%x 0x%xrn", dwStartAddr, dwLength);
  119.     return TRUE;
  120. }