nvm.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. /***************************************************************************************
  2. *
  3. * Copyright (c) Beceem Communications Inc.
  4. *
  5. * Module Name:
  6. * NVM.h
  7. *
  8. * Abstract:
  9. * This file has the prototypes,preprocessors and definitions various NVM libraries.
  10. *
  11. *
  12. * Revision History:
  13. * Who When What
  14. * -------- -------- ----------------------------------------------
  15. * Name Date Created/reviewed/modified
  16. *
  17. * Notes:
  18. *
  19. ****************************************************************************************/
  20. #ifndef _NVM_H_
  21. #define _NVM_H_
  22. struct bcm_flash_cs_info {
  23. u32 MagicNumber;
  24. /* let the magic number be 0xBECE-F1A5 - F1A5 for "flas-h" */
  25. u32 FlashLayoutVersion;
  26. u32 ISOImageVersion;
  27. u32 SCSIFirmwareVersion;
  28. u32 OffsetFromZeroForPart1ISOImage;
  29. u32 OffsetFromZeroForScsiFirmware;
  30. u32 SizeOfScsiFirmware;
  31. u32 OffsetFromZeroForPart2ISOImage;
  32. u32 OffsetFromZeroForCalibrationStart;
  33. u32 OffsetFromZeroForCalibrationEnd;
  34. u32 OffsetFromZeroForVSAStart;
  35. u32 OffsetFromZeroForVSAEnd;
  36. u32 OffsetFromZeroForControlSectionStart;
  37. u32 OffsetFromZeroForControlSectionData;
  38. u32 CDLessInactivityTimeout;
  39. u32 NewImageSignature;
  40. u32 FlashSectorSizeSig;
  41. u32 FlashSectorSize;
  42. u32 FlashWriteSupportSize;
  43. u32 TotalFlashSize;
  44. u32 FlashBaseAddr;
  45. u32 FlashPartMaxSize;
  46. u32 IsCDLessDeviceBootSig;
  47. /* MSC Timeout after reset to switch from MSC to NW Mode */
  48. u32 MassStorageTimeout;
  49. };
  50. #define FLASH2X_TOTAL_SIZE (64 * 1024 * 1024)
  51. #define DEFAULT_SECTOR_SIZE (64 * 1024)
  52. struct bcm_flash2x_cs_info {
  53. /* magic number as 0xBECE-F1A5 - F1A5 for "flas-h" */
  54. u32 MagicNumber;
  55. u32 FlashLayoutVersion;
  56. u32 ISOImageVersion;
  57. u32 SCSIFirmwareVersion;
  58. u32 OffsetFromZeroForPart1ISOImage;
  59. u32 OffsetFromZeroForScsiFirmware;
  60. u32 SizeOfScsiFirmware;
  61. u32 OffsetFromZeroForPart2ISOImage;
  62. u32 OffsetFromZeroForDSDStart;
  63. u32 OffsetFromZeroForDSDEnd;
  64. u32 OffsetFromZeroForVSAStart;
  65. u32 OffsetFromZeroForVSAEnd;
  66. u32 OffsetFromZeroForControlSectionStart;
  67. u32 OffsetFromZeroForControlSectionData;
  68. /* NO Data Activity timeout to switch from MSC to NW Mode */
  69. u32 CDLessInactivityTimeout;
  70. u32 NewImageSignature;
  71. u32 FlashSectorSizeSig;
  72. u32 FlashSectorSize;
  73. u32 FlashWriteSupportSize;
  74. u32 TotalFlashSize;
  75. u32 FlashBaseAddr;
  76. u32 FlashPartMaxSize;
  77. u32 IsCDLessDeviceBootSig;
  78. /* MSC Timeout after reset to switch from MSC to NW Mode */
  79. u32 MassStorageTimeout;
  80. /* Flash Map 2.0 Field */
  81. u32 OffsetISOImage1Part1Start;
  82. u32 OffsetISOImage1Part1End;
  83. u32 OffsetISOImage1Part2Start;
  84. u32 OffsetISOImage1Part2End;
  85. u32 OffsetISOImage1Part3Start;
  86. u32 OffsetISOImage1Part3End;
  87. u32 OffsetISOImage2Part1Start;
  88. u32 OffsetISOImage2Part1End;
  89. u32 OffsetISOImage2Part2Start;
  90. u32 OffsetISOImage2Part2End;
  91. u32 OffsetISOImage2Part3Start;
  92. u32 OffsetISOImage2Part3End;
  93. /* DSD Header offset from start of DSD */
  94. u32 OffsetFromDSDStartForDSDHeader;
  95. u32 OffsetFromZeroForDSD1Start;
  96. u32 OffsetFromZeroForDSD1End;
  97. u32 OffsetFromZeroForDSD2Start;
  98. u32 OffsetFromZeroForDSD2End;
  99. u32 OffsetFromZeroForVSA1Start;
  100. u32 OffsetFromZeroForVSA1End;
  101. u32 OffsetFromZeroForVSA2Start;
  102. u32 OffsetFromZeroForVSA2End;
  103. /*
  104. * ACCESS_BITS_PER_SECTOR 2
  105. * ACCESS_RW 0
  106. * ACCESS_RO 1
  107. * ACCESS_RESVD 2
  108. * ACCESS_RESVD 3
  109. */
  110. u32 SectorAccessBitMap[FLASH2X_TOTAL_SIZE / (DEFAULT_SECTOR_SIZE * 16)];
  111. /* All expansions to the control data structure should add here */
  112. };
  113. struct bcm_vendor_section_info {
  114. u32 OffsetFromZeroForSectionStart;
  115. u32 OffsetFromZeroForSectionEnd;
  116. u32 AccessFlags;
  117. u32 Reserved[16];
  118. };
  119. struct bcm_flash2x_vendor_info {
  120. struct bcm_vendor_section_info VendorSection[TOTAL_SECTIONS];
  121. u32 Reserved[16];
  122. };
  123. struct bcm_dsd_header {
  124. u32 DSDImageSize;
  125. u32 DSDImageCRC;
  126. u32 DSDImagePriority;
  127. /* We should not consider right now. Reading reserve is worthless. */
  128. u32 Reserved[252]; /* Resvd for DSD Header */
  129. u32 DSDImageMagicNumber;
  130. };
  131. struct bcm_iso_header {
  132. u32 ISOImageMagicNumber;
  133. u32 ISOImageSize;
  134. u32 ISOImageCRC;
  135. u32 ISOImagePriority;
  136. /* We should not consider right now. Reading reserve is worthless. */
  137. u32 Reserved[60]; /* Resvd for ISO Header extension */
  138. };
  139. #define EEPROM_BEGIN_CIS (0)
  140. #define EEPROM_BEGIN_NON_CIS (0x200)
  141. #define EEPROM_END (0x2000)
  142. #define INIT_PARAMS_SIGNATURE (0x95a7a597)
  143. #define MAX_INIT_PARAMS_LENGTH (2048)
  144. #define MAC_ADDRESS_OFFSET 0x200
  145. #define INIT_PARAMS_1_SIGNATURE_ADDRESS EEPROM_BEGIN_NON_CIS
  146. #define INIT_PARAMS_1_DATA_ADDRESS (INIT_PARAMS_1_SIGNATURE_ADDRESS+16)
  147. #define INIT_PARAMS_1_MACADDRESS_ADDRESS (MAC_ADDRESS_OFFSET)
  148. #define INIT_PARAMS_1_LENGTH_ADDRESS (INIT_PARAMS_1_SIGNATURE_ADDRESS+4)
  149. #define INIT_PARAMS_2_SIGNATURE_ADDRESS (EEPROM_BEGIN_NON_CIS + 2048 + 16)
  150. #define INIT_PARAMS_2_DATA_ADDRESS (INIT_PARAMS_2_SIGNATURE_ADDRESS + 16)
  151. #define INIT_PARAMS_2_MACADDRESS_ADDRESS (INIT_PARAMS_2_SIGNATURE_ADDRESS + 8)
  152. #define INIT_PARAMS_2_LENGTH_ADDRESS (INIT_PARAMS_2_SIGNATURE_ADDRESS + 4)
  153. #define EEPROM_SPI_DEV_CONFIG_REG 0x0F003000
  154. #define EEPROM_SPI_Q_STATUS1_REG 0x0F003004
  155. #define EEPROM_SPI_Q_STATUS1_MASK_REG 0x0F00300C
  156. #define EEPROM_SPI_Q_STATUS_REG 0x0F003008
  157. #define EEPROM_CMDQ_SPI_REG 0x0F003018
  158. #define EEPROM_WRITE_DATAQ_REG 0x0F00301C
  159. #define EEPROM_READ_DATAQ_REG 0x0F003020
  160. #define SPI_FLUSH_REG 0x0F00304C
  161. #define EEPROM_WRITE_ENABLE 0x06000000
  162. #define EEPROM_READ_STATUS_REGISTER 0x05000000
  163. #define EEPROM_16_BYTE_PAGE_WRITE 0xFA000000
  164. #define EEPROM_WRITE_QUEUE_EMPTY 0x00001000
  165. #define EEPROM_WRITE_QUEUE_AVAIL 0x00002000
  166. #define EEPROM_WRITE_QUEUE_FULL 0x00004000
  167. #define EEPROM_16_BYTE_PAGE_READ 0xFB000000
  168. #define EEPROM_4_BYTE_PAGE_READ 0x3B000000
  169. #define EEPROM_CMD_QUEUE_FLUSH 0x00000001
  170. #define EEPROM_WRITE_QUEUE_FLUSH 0x00000002
  171. #define EEPROM_READ_QUEUE_FLUSH 0x00000004
  172. #define EEPROM_ETH_QUEUE_FLUSH 0x00000008
  173. #define EEPROM_ALL_QUEUE_FLUSH 0x0000000f
  174. #define EEPROM_READ_ENABLE 0x06000000
  175. #define EEPROM_16_BYTE_PAGE_WRITE 0xFA000000
  176. #define EEPROM_READ_DATA_FULL 0x00000010
  177. #define EEPROM_READ_DATA_AVAIL 0x00000020
  178. #define EEPROM_READ_QUEUE_EMPTY 0x00000002
  179. #define EEPROM_CMD_QUEUE_EMPTY 0x00000100
  180. #define EEPROM_CMD_QUEUE_AVAIL 0x00000200
  181. #define EEPROM_CMD_QUEUE_FULL 0x00000400
  182. /* Most EEPROM status register bit 0 indicates if the EEPROM is busy
  183. * with a write if set 1. See the details of the EEPROM Status Register
  184. * in the EEPROM data sheet.
  185. */
  186. #define EEPROM_STATUS_REG_WRITE_BUSY 0x00000001
  187. /* We will have 1 mSec for every RETRIES_PER_DELAY count and have a max attempts of MAX_EEPROM_RETRIES
  188. * This will give us 80 mSec minimum of delay = 80mSecs
  189. */
  190. #define MAX_EEPROM_RETRIES 80
  191. #define RETRIES_PER_DELAY 64
  192. #define MAX_RW_SIZE 0x10
  193. #define MAX_READ_SIZE 0x10
  194. #define MAX_SECTOR_SIZE (512 * 1024)
  195. #define MIN_SECTOR_SIZE (1024)
  196. #define FLASH_SECTOR_SIZE_OFFSET 0xEFFFC
  197. #define FLASH_SECTOR_SIZE_SIG_OFFSET 0xEFFF8
  198. #define FLASH_SECTOR_SIZE_SIG 0xCAFEBABE
  199. #define FLASH_CS_INFO_START_ADDR 0xFF0000
  200. #define FLASH_CONTROL_STRUCT_SIGNATURE 0xBECEF1A5
  201. #define SCSI_FIRMWARE_MAJOR_VERSION 0x1
  202. #define SCSI_FIRMWARE_MINOR_VERSION 0x5
  203. #define BYTE_WRITE_SUPPORT 0x1
  204. #define FLASH_AUTO_INIT_BASE_ADDR 0xF00000
  205. #define FLASH_CONTIGIOUS_START_ADDR_AFTER_INIT 0x1C000000
  206. #define FLASH_CONTIGIOUS_START_ADDR_BEFORE_INIT 0x1F000000
  207. #define FLASH_CONTIGIOUS_START_ADDR_BCS350 0x08000000
  208. #define FLASH_CONTIGIOUS_END_ADDR_BCS350 0x08FFFFFF
  209. #define FLASH_SIZE_ADDR 0xFFFFEC
  210. #define FLASH_SPI_CMDQ_REG 0xAF003040
  211. #define FLASH_SPI_WRITEQ_REG 0xAF003044
  212. #define FLASH_SPI_READQ_REG 0xAF003048
  213. #define FLASH_CONFIG_REG 0xAF003050
  214. #define FLASH_GPIO_CONFIG_REG 0xAF000030
  215. #define FLASH_CMD_WRITE_ENABLE 0x06
  216. #define FLASH_CMD_READ_ENABLE 0x03
  217. #define FLASH_CMD_RESET_WRITE_ENABLE 0x04
  218. #define FLASH_CMD_STATUS_REG_READ 0x05
  219. #define FLASH_CMD_STATUS_REG_WRITE 0x01
  220. #define FLASH_CMD_READ_ID 0x9F
  221. #define PAD_SELECT_REGISTER 0xAF000410
  222. #define FLASH_PART_SST25VF080B 0xBF258E
  223. #define EEPROM_CAL_DATA_INTERNAL_LOC 0xbFB00008
  224. #define EEPROM_CALPARAM_START 0x200
  225. #define EEPROM_SIZE_OFFSET 524
  226. /* As Read/Write time vaires from 1.5 to 3.0 ms.
  227. * so After Ignoring the rdm/wrm time(that is dependent on many factor like interface etc.),
  228. * here time calculated meets the worst case delay, 3.0 ms
  229. */
  230. #define MAX_FLASH_RETRIES 4
  231. #define FLASH_PER_RETRIES_DELAY 16
  232. #define EEPROM_MAX_CAL_AREA_SIZE 0xF0000
  233. #define BECM ntohl(0x4245434d)
  234. #define FLASH_2X_MAJOR_NUMBER 0x2
  235. #define DSD_IMAGE_MAGIC_NUMBER 0xBECE0D5D
  236. #define ISO_IMAGE_MAGIC_NUMBER 0xBECE0150
  237. #define NON_CDLESS_DEVICE_BOOT_SIG 0xBECEB007
  238. #define MINOR_VERSION(x) ((x >> 16) & 0xFFFF)
  239. #define MAJOR_VERSION(x) (x & 0xFFFF)
  240. #define CORRUPTED_PATTERN 0x0
  241. #define UNINIT_PTR_IN_CS 0xBBBBDDDD
  242. #define VENDOR_PTR_IN_CS 0xAAAACCCC
  243. #define FLASH2X_SECTION_PRESENT (1 << 0)
  244. #define FLASH2X_SECTION_VALID (1 << 1)
  245. #define FLASH2X_SECTION_RO (1 << 2)
  246. #define FLASH2X_SECTION_ACT (1 << 3)
  247. #define SECTOR_IS_NOT_WRITABLE STATUS_FAILURE
  248. #define INVALID_OFFSET STATUS_FAILURE
  249. #define INVALID_SECTION STATUS_FAILURE
  250. #define SECTOR_1K 1024
  251. #define SECTOR_64K (64 * SECTOR_1K)
  252. #define SECTOR_128K (2 * SECTOR_64K)
  253. #define SECTOR_256k (2 * SECTOR_128K)
  254. #define SECTOR_512K (2 * SECTOR_256k)
  255. #define FLASH_PART_SIZE (16 * 1024 * 1024)
  256. #define RESET_CHIP_SELECT -1
  257. #define CHIP_SELECT_BIT12 12
  258. #define SECTOR_READWRITE_PERMISSION 0
  259. #define SECTOR_READONLY 1
  260. #define SIGNATURE_SIZE 4
  261. #define DEFAULT_BUFF_SIZE 0x10000
  262. #define FIELD_OFFSET_IN_HEADER(HeaderPointer, Field) ((u8 *)&((HeaderPointer)(NULL))->Field - (u8 *)(NULL))
  263. #endif