hw_ddr2_mddr.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. /** ============================================================================
  2. * \file hw_ddr2_mddr.h
  3. *
  4. * \brief This file contains the Register Descriptions for DDR2/MDDR
  5. *
  6. * ============================================================================
  7. */
  8. /*
  9. * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
  10. */
  11. /*
  12. * Redistribution and use in source and binary forms, with or without
  13. * modification, are permitted provided that the following conditions
  14. * are met:
  15. *
  16. * Redistributions of source code must retain the above copyright
  17. * notice, this list of conditions and the following disclaimer.
  18. *
  19. * Redistributions in binary form must reproduce the above copyright
  20. * notice, this list of conditions and the following disclaimer in the
  21. * documentation and/or other materials provided with the
  22. * distribution.
  23. *
  24. * Neither the name of Texas Instruments Incorporated nor the names of
  25. * its contributors may be used to endorse or promote products derived
  26. * from this software without specific prior written permission.
  27. *
  28. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  29. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  30. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  31. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  32. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  33. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  34. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  35. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  36. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  37. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  38. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  39. *
  40. */
  41. #ifndef _HW_DDR2_MDDR_H_
  42. #define _HW_DDR2_MDDR_H_
  43. #ifdef __cplusplus
  44. extern "C" {
  45. #endif
  46. #define DDR2_MDDR_REVID (0x0)
  47. #define DDR2_MDDR_SDRSTAT (0x4)
  48. #define DDR2_MDDR_SDCR (0x8)
  49. #define DDR2_MDDR_SDRCR (0xC)
  50. #define DDR2_MDDR_SDTIMR1 (0x10)
  51. #define DDR2_MDDR_SDTIMR2 (0x14)
  52. #define DDR2_MDDR_SDCR2 (0x1C)
  53. #define DDR2_MDDR_PBBPR (0x20)
  54. #define DDR2_MDDR_PC1 (0x40)
  55. #define DDR2_MDDR_PC2 (0x44)
  56. #define DDR2_MDDR_PCC (0x48)
  57. #define DDR2_MDDR_PCMRS (0x4C)
  58. #define DDR2_MDDR_PCT (0x50)
  59. #define DDR2_MDDR_IRR (0xC0)
  60. #define DDR2_MDDR_IMR (0xC4)
  61. #define DDR2_MDDR_IMSR (0xC8)
  62. #define DDR2_MDDR_IMCR (0xCC)
  63. #define DDR2_MDDR_DRPYC1R (0xE4)
  64. /**************************************************************************\
  65. * Field Definition Macros
  66. \**************************************************************************/
  67. /* REVID */
  68. #define DDR2_MDDR_REVID_ID (0xFFFFFFFFu)
  69. #define DDR2_MDDR_REVID_ID_SHIFT (0x00000000u)
  70. /* SDRSTAT */
  71. #define DDR2_MDDR_SDRSTAT_DUALCLK (0x40000000u)
  72. #define DDR2_MDDR_SDRSTAT_DUALCLK_SHIFT (0x0000001Eu)
  73. #define DDR2_MDDR_SDRSTAT_PHYRDY (0x00000004u)
  74. #define DDR2_MDDR_SDRSTAT_PHYRDY_SHIFT (0x00000002u)
  75. /* SDCR */
  76. #define DDR2_MDDR_SDCR_DDR2TERM1 (0x08000000u)
  77. #define DDR2_MDDR_SDCR_DDR2TERM1_SHIFT (0x0000001Bu)
  78. /*----DDR2TERM1 Tokens----*/
  79. /* Tokens shown below should be used in conjunction with tokens for DDR2TERM0 to
  80. * generate the required temination resistor settings.
  81. * For example:
  82. * To disable termination the required value is 00 (binary), which would
  83. * require DDR2TERM0 to be 0 and DDR2TERM1 to be 0. This could be generated as
  84. * shown below:
  85. * ((DDR2_MDDR_SDCR_DDR2TERM0_CLEAR | DDR2_MDDR_SDCR_DDR2TERM0_SHIFT) |
  86. * (DDR2_MDDR_SDCR_DDR2TERM1_CLEAR | DDR2_MDDR_SDCR_DDR2TERM1_SHIFT))
  87. */
  88. #define DDR2_MDDR_SDCR_DDR2TERM1_SET (0x00000001u)
  89. #define DDR2_MDDR_SDCR_DDR2TERM1_CLEAR (0x00000000u)
  90. #define DDR2_MDDR_SDCR_IBANK_POS (0x04000000u)
  91. #define DDR2_MDDR_SDCR_IBANK_POS_SHIFT (0x0000001Au)
  92. #define DDR2_MDDR_SDCR_MSDRAMEN (0x02000000u)
  93. #define DDR2_MDDR_SDCR_MSDRAMEN_SHIFT (0x00000019u)
  94. #define DDR2_MDDR_SDCR_DDRDRIVE1 (0x01000000u)
  95. #define DDR2_MDDR_SDCR_DDRDRIVE1_SHIFT (0x00000018u)
  96. /*----DDRDRIVE1 Tokens----*/
  97. /* Tokens shown below should be used in conjunction with tokens for DDRDRIVE1 to
  98. * generate the required temination resistor settings.
  99. * For example:
  100. * For the case of weak driver streangth for DDR2 or 1/2 driver strength for mDDR
  101. * setting the required value is 01 (binary), which would require DDRDRIVE0 to
  102. * be 1 and DDRDRIVE1 to be 0. This could be generated as shown below:
  103. * ((DDR2_MDDR_SDCR_DDRDRIVE0_SET | DDR2_MDDR_SDCR_DDRDRIVE0_SHIFT) |
  104. * (DDR2_MDDR_SDCR_DDRDRIVE1_CLEAR | DDR2_MDDR_SDCR_DDRDRIVE1_SHIFT))
  105. */
  106. #define DDR2_MDDR_SDCR_DDRDRIVE1_SET (0x00000001u)
  107. #define DDR2_MDDR_SDCR_DDRDRIVE1_CLEAR (0x00000000u)
  108. #define DDR2_MDDR_SDCR_BOOTUNLOCK (0x00800000u)
  109. #define DDR2_MDDR_SDCR_BOOTUNLOCK_SHIFT (0x00000017u)
  110. #define DDR2_MDDR_SDCR_DDR2DDQS (0x00400000u)
  111. #define DDR2_MDDR_SDCR_DDR2DDQS_SHIFT (0x00000016u)
  112. #define DDR2_MDDR_SDCR_DDR2TERM0 (0x00200000u)
  113. #define DDR2_MDDR_SDCR_DDR2TERM0_SHIFT (0x00000015u)
  114. /*----DDR2TERM0 Tokens----*/
  115. /* Tokens shown below should be used in conjunction with tokens for DDR2TERM1 to
  116. * generate the required temination resistor settings.
  117. * For example:
  118. * For disable termination the required value is 00 (binary), which would
  119. * require DDR2TERM0 to be 0 and DDR2TERM1 to be 0. This could be generated as
  120. * shown below:
  121. * ((DDR2_MDDR_SDCR_DDR2TERM0_CLEAR | DDR2_MDDR_SDCR_DDR2TERM0_SHIFT) |
  122. * (DDR2_MDDR_SDCR_DDR2TERM1_CLEAR | DDR2_MDDR_SDCR_DDR2TERM1_SHIFT))
  123. */
  124. #define DDR2_MDDR_SDCR_DDR2TERM0_SET (0x00000001u)
  125. #define DDR2_MDDR_SDCR_DDR2TERM0_CLEAR (0x00000000u)
  126. #define DDR2_MDDR_SDCR_DDR2EN (0x00100000u)
  127. #define DDR2_MDDR_SDCR_DDR2EN_SHIFT (0x00000014u)
  128. #define DDR2_MDDR_SDCR_DDRDLL_DIS (0x00080000u)
  129. #define DDR2_MDDR_SDCR_DDRDLL_DIS_SHIFT (0x00000013u)
  130. #define DDR2_MDDR_SDCR_DDRDRIVE0 (0x00040000u)
  131. #define DDR2_MDDR_SDCR_DDRDRIVE0_SHIFT (0x00000012u)
  132. /*----DDRDRIVE0 Tokens----*/
  133. /* Tokens shown below should be used in conjunction with tokens for DDRDRIVE0 to
  134. * generate the required temination resistor settings.
  135. * For example:
  136. * For the case of weak driver streangth for DDR2 or 1/2 driver strength for mDDR
  137. * setting the required value is 01 (binary), which would require DDRDRIVE0 to
  138. * be 1 and DDRDRIVE1 to be 0. This could be generated as shown below:
  139. * ((DDR2_MDDR_SDCR_DDRDRIVE0_SET | DDR2_MDDR_SDCR_DDRDRIVE0_SHIFT) |
  140. * (DDR2_MDDR_SDCR_DDRDRIVE1_CLEAR | DDR2_MDDR_SDCR_DDRDRIVE1_SHIFT))
  141. */
  142. #define DDR2_MDDR_SDCR_DDRDRIVE0_SET (0x00000001u)
  143. #define DDR2_MDDR_SDCR_DDRDRIVE0_CLEAR (0x00000000u)
  144. #define DDR2_MDDR_SDCR_DDREN (0x00020000u)
  145. #define DDR2_MDDR_SDCR_DDREN_SHIFT (0x00000011u)
  146. #define DDR2_MDDR_SDCR_SDRAMEN (0x00010000u)
  147. #define DDR2_MDDR_SDCR_SDRAMEN_SHIFT (0x00000010u)
  148. #define DDR2_MDDR_SDCR_TIMUNLOCK (0x00008000u)
  149. #define DDR2_MDDR_SDCR_TIMUNLOCK_SHIFT (0x0000000Fu)
  150. #define DDR2_MDDR_SDCR_NM (0x00004000u)
  151. #define DDR2_MDDR_SDCR_NM_SHIFT (0x0000000Eu)
  152. #define DDR2_MDDR_SDCR_CL (0x00000E00u)
  153. #define DDR2_MDDR_SDCR_CL_SHIFT (0x00000009u)
  154. /*----CL Tokens----*/
  155. #define DDR2_MDDR_SDCR_CL_TWO (0x00000002u)
  156. #define DDR2_MDDR_SDCR_CL_THREE (0x00000003u)
  157. #define DDR2_MDDR_SDCR_CL_FOUR (0x00000004u)
  158. #define DDR2_MDDR_SDCR_CL_FIVE (0x00000005u)
  159. #define DDR2_MDDR_SDCR_IBANK (0x00000070u)
  160. #define DDR2_MDDR_SDCR_IBANK_SHIFT (0x00000004u)
  161. /*----IBANK Tokens----*/
  162. #define DDR2_MDDR_SDCR_IBANK_ONE (0x00000000u)
  163. #define DDR2_MDDR_SDCR_IBANK_TWO (0x00000001u)
  164. #define DDR2_MDDR_SDCR_IBANK_FOUR (0x00000002u)
  165. #define DDR2_MDDR_SDCR_IBANK_EIGHT (0x00000003u)
  166. #define DDR2_MDDR_SDCR_PAGESIZE (0x00000007u)
  167. #define DDR2_MDDR_SDCR_PAGESIZE_SHIFT (0x00000000u)
  168. /*----PAGESIZE Tokens----*/
  169. #define DDR2_MDDR_SDCR_PAGESIZE_256WORD (0x00000000u)
  170. #define DDR2_MDDR_SDCR_PAGESIZE_512WORD (0x00000001u)
  171. #define DDR2_MDDR_SDCR_PAGESIZE_1024WORD (0x00000002u)
  172. #define DDR2_MDDR_SDCR_PAGESIZE_2048WORD (0x00000003u)
  173. /* SDRCR */
  174. #define DDR2_MDDR_SDRCR_LPMODEN (0x80000000u)
  175. #define DDR2_MDDR_SDRCR_LPMODEN_SHIFT (0x0000001Fu)
  176. #define DDR2_MDDR_SDRCR_MCLKSTOPEN (0x40000000u)
  177. #define DDR2_MDDR_SDRCR_MCLKSTOPEN_SHIFT (0x0000001Eu)
  178. #define DDR2_MDDR_SDRCR_SR_PD (0x00800000u)
  179. #define DDR2_MDDR_SDRCR_SR_PD_SHIFT (0x00000017u)
  180. #define DDR2_MDDR_SDRCR_RR (0x0000FFFFu)
  181. #define DDR2_MDDR_SDRCR_RR_SHIFT (0x00000000u)
  182. /* SDTIMR1 */
  183. #define DDR2_MDDR_SDTIMR1_T_RFC (0xFE000000u)
  184. #define DDR2_MDDR_SDTIMR1_T_RFC_SHIFT (0x00000019u)
  185. #define DDR2_MDDR_SDTIMR1_T_RP (0x01C00000u)
  186. #define DDR2_MDDR_SDTIMR1_T_RP_SHIFT (0x00000016u)
  187. #define DDR2_MDDR_SDTIMR1_T_RCD (0x00380000u)
  188. #define DDR2_MDDR_SDTIMR1_T_RCD_SHIFT (0x00000013u)
  189. #define DDR2_MDDR_SDTIMR1_T_WR (0x00070000u)
  190. #define DDR2_MDDR_SDTIMR1_T_WR_SHIFT (0x00000010u)
  191. #define DDR2_MDDR_SDTIMR1_T_RAS (0x0000F800u)
  192. #define DDR2_MDDR_SDTIMR1_T_RAS_SHIFT (0x0000000Bu)
  193. #define DDR2_MDDR_SDTIMR1_T_RC (0x000007C0u)
  194. #define DDR2_MDDR_SDTIMR1_T_RC_SHIFT (0x00000006u)
  195. #define DDR2_MDDR_SDTIMR1_T_RRD (0x00000038u)
  196. #define DDR2_MDDR_SDTIMR1_T_RRD_SHIFT (0x00000003u)
  197. #define DDR2_MDDR_SDTIMR1_T_WTR (0x00000003u)
  198. #define DDR2_MDDR_SDTIMR1_T_WTR_SHIFT (0x00000000u)
  199. /* SDTIMR2 */
  200. #define DDR2_MDDR_SDTIMR2_T_RAS_MAX (0x78000000u)
  201. #define DDR2_MDDR_SDTIMR2_T_RAS_MAX_SHIFT (0x0000001Bu)
  202. #define DDR2_MDDR_SDTIMR2_T_XP (0x06000000u)
  203. #define DDR2_MDDR_SDTIMR2_T_XP_SHIFT (0x00000019u)
  204. #define DDR2_MDDR_SDTIMR2_T_XSNR (0x007F0000u)
  205. #define DDR2_MDDR_SDTIMR2_T_XSNR_SHIFT (0x00000010u)
  206. #define DDR2_MDDR_SDTIMR2_T_XSRD (0x0000FF00u)
  207. #define DDR2_MDDR_SDTIMR2_T_XSRD_SHIFT (0x00000008u)
  208. #define DDR2_MDDR_SDTIMR2_T_RTP (0x000000E0u)
  209. #define DDR2_MDDR_SDTIMR2_T_RTP_SHIFT (0x00000005u)
  210. #define DDR2_MDDR_SDTIMR2_T_CKE (0x0000001Fu)
  211. #define DDR2_MDDR_SDTIMR2_T_CKE_SHIFT (0x00000000u)
  212. /* SDCR2 */
  213. #define DDR2_MDDR_SDCR2_PASR (0x00070000u)
  214. #define DDR2_MDDR_SDCR2_PASR_SHIFT (0x00000010u)
  215. /*----PASR Tokens----*/
  216. #define DDR2_MDDR_SDCR2_PASR_4BNK (0x00000000u)
  217. #define DDR2_MDDR_SDCR2_PASR_2BNK (0x00000001u)
  218. #define DDR2_MDDR_SDCR2_PASR_1BNK (0x00000002u)
  219. #define DDR2_MDDR_SDCR2_PASR_HALFBNK (0x00000005u)
  220. #define DDR2_MDDR_SDCR2_PASR_QRTRBNK (0x00000006u)
  221. #define DDR2_MDDR_SDCR2_ROWSIZE (0x00000007u)
  222. #define DDR2_MDDR_SDCR2_ROWSIZE_SHIFT (0x00000000u)
  223. /*----ROWSIZE Tokens----*/
  224. #define DDR2_MDDR_SDCR2_ROWSIZE_9ROW (0x00000000u)
  225. #define DDR2_MDDR_SDCR2_ROWSIZE_10ROW (0x00000001u)
  226. #define DDR2_MDDR_SDCR2_ROWSIZE_11ROW (0x00000002u)
  227. #define DDR2_MDDR_SDCR2_ROWSIZE_12ROW (0x00000003u)
  228. #define DDR2_MDDR_SDCR2_ROWSIZE_13ROW (0x00000004u)
  229. #define DDR2_MDDR_SDCR2_ROWSIZE_14ROW (0x00000005u)
  230. #define DDR2_MDDR_SDCR2_ROWSIZE_15ROW (0x00000006u)
  231. #define DDR2_MDDR_SDCR2_ROWSIZE_16ROW (0x00000007u)
  232. /* PBBPR */
  233. #define DDR2_MDDR_PBBPR_PR_OLD_COUNT (0x000000FFu)
  234. #define DDR2_MDDR_PBBPR_PR_OLD_COUNT_SHIFT (0x00000000u)
  235. /* PC1 */
  236. #define DDR2_MDDR_PC1_COUNTER1 (0xFFFFFFFFu)
  237. #define DDR2_MDDR_PC1_COUNTER1_SHIFT (0x00000000u)
  238. /* PC2 */
  239. #define DDR2_MDDR_PC2_COUNTER2 (0xFFFFFFFFu)
  240. #define DDR2_MDDR_PC2_COUNTER2_SHIFT (0x00000000u)
  241. /* PCC */
  242. #define DDR2_MDDR_PCC_CNTR2_MSTID_EN (0x80000000u)
  243. #define DDR2_MDDR_PCC_CNTR2_MSTID_EN_SHIFT (0x0000001Fu)
  244. #define DDR2_MDDR_PCC_CNTR2_REGION_EN (0x40000000u)
  245. #define DDR2_MDDR_PCC_CNTR2_REGION_EN_SHIFT (0x0000001Eu)
  246. #define DDR2_MDDR_PCC_CNTR2_CFG (0x000F0000u)
  247. #define DDR2_MDDR_PCC_CNTR2_CFG_SHIFT (0x00000010u)
  248. #define DDR2_MDDR_PCC_CNTR1_MSTID_EN (0x00008000u)
  249. #define DDR2_MDDR_PCC_CNTR1_MSTID_EN_SHIFT (0x0000000Fu)
  250. #define DDR2_MDDR_PCC_CNTR1_REGION_EN (0x00004000u)
  251. #define DDR2_MDDR_PCC_CNTR1_REGION_EN_SHIFT (0x0000000Eu)
  252. #define DDR2_MDDR_PCC_CNTR1_CFG (0x0000000Fu)
  253. #define DDR2_MDDR_PCC_CNTR1_CFG_SHIFT (0x00000000u)
  254. /* PCMRS */
  255. #define DDR2_MDDR_PCMRS_MST_ID2 (0xFF000000u)
  256. #define DDR2_MDDR_PCMRS_MST_ID2_SHIFT (0x00000018u)
  257. #define DDR2_MDDR_PCMRS_REGION_SEL2 (0x000F0000u)
  258. #define DDR2_MDDR_PCMRS_REGION_SEL2_SHIFT (0x00000010u)
  259. /*----REGION_SEL2 Tokens----*/
  260. #define DDR2_MDDR_PCMRS_REGION_SEL2_DDRACCESS (0x00000000u)
  261. #define DDR2_MDDR_PCMRS_REGION_SEL2_MMRACCESS (0x00000007u)
  262. #define DDR2_MDDR_PCMRS_MST_ID1 (0x0000FF00u)
  263. #define DDR2_MDDR_PCMRS_MST_ID1_SHIFT (0x00000008u)
  264. #define DDR2_MDDR_PCMRS_REGION_SEL1 (0x0000000Fu)
  265. #define DDR2_MDDR_PCMRS_REGION_SEL1_SHIFT (0x00000000u)
  266. /*----REGION_SEL1 Tokens----*/
  267. #define DDR2_MDDR_PCMRS_REGION_SEL1_DDRACCESS (0x00000000u)
  268. #define DDR2_MDDR_PCMRS_REGION_SEL1_MMRACCESS (0x00000007u)
  269. /* PCT */
  270. #define DDR2_MDDR_PCT_TOTAL_TIME (0xFFFFFFFFu)
  271. #define DDR2_MDDR_PCT_TOTAL_TIME_SHIFT (0x00000000u)
  272. /* IRR */
  273. #define DDR2_MDDR_IRR_LT (0x00000004u)
  274. #define DDR2_MDDR_IRR_LT_SHIFT (0x00000002u)
  275. /* IMR */
  276. #define DDR2_MDDR_IMR_LTM (0x00000004u)
  277. #define DDR2_MDDR_IMR_LTM_SHIFT (0x00000002u)
  278. /* IMSR */
  279. #define DDR2_MDDR_IMSR_LTMSET (0x00000004u)
  280. #define DDR2_MDDR_IMSR_LTMSET_SHIFT (0x00000002u)
  281. /*----LTMSET Tokens----*/
  282. #define DDR2_MDDR_IMSR_LTMSET_SET (0x00000001u)
  283. /* IMCR */
  284. #define DDR2_MDDR_IMCR_LTMCLR (0x00000004u)
  285. #define DDR2_MDDR_IMCR_LTMCLR_SHIFT (0x00000002u)
  286. /* DRPYC1R */
  287. #define DDR2_MDDR_DRPYC1R_LBCKSEL (0x00800000u)
  288. #define DDR2_MDDR_DRPYC1R_LBCKSEL_SHIFT (0x00000017u)
  289. #define DDR2_MDDR_DRPYC1R_VTP_DYN_UPDT (0x00008000u)
  290. #define DDR2_MDDR_DRPYC1R_VTP_DYN_UPDT_SHIFT (0x0000000Fu)
  291. #define DDR2_MDDR_DRPYC1R_DLLMODE (0x00007000u)
  292. #define DDR2_MDDR_DRPYC1R_DLLMODE_SHIFT (0x0000000Cu)
  293. #define DDR2_MDDR_DRPYC1R_EXT_STRBEN (0x00000080u)
  294. #define DDR2_MDDR_DRPYC1R_EXT_STRBEN_SHIFT (0x00000007u)
  295. #define DDR2_MDDR_DRPYC1R_PWRDNEN (0x00000040u)
  296. #define DDR2_MDDR_DRPYC1R_PWRDNEN_SHIFT (0x00000006u)
  297. #define DDR2_MDDR_DRPYC1R_RL (0x00000007u)
  298. #define DDR2_MDDR_DRPYC1R_RL_SHIFT (0x00000000u)
  299. #ifdef __cplusplus
  300. }
  301. #endif
  302. #endif