hubpi.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:142k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. bdrkreg_t gba_rsvd   : 52;
  2. bdrkreg_t gba_gfx_bias   : 12;
  3. } pi_gfx_bias_a_fld_s;
  4. } pi_gfx_bias_a_u_t;
  5. #endif
  6. /************************************************************************
  7.  *                                                                      *
  8.  * Description:  There is one of these registers for each CPU. When     *
  9.  * this counter reaches the value of the GFX_INT_CMP register, an       *
  10.  * interrupt is sent to the associated processor. At each clock         *
  11.  * cycle, the value in this register can be changed by any one of the   *
  12.  * following actions:                                                   *
  13.  * - Written by software.                                               *
  14.  * - Loaded with the value of GFX_INT_CMP, when an interrupt, NMI, or   *
  15.  * soft reset occurs, thus preventing an additional interrupt.          *
  16.  * - Zeroed, when the GFX_CREDIT_CNTR rises above the bias value.       *
  17.  * - Incremented (by one at each clock) for each clock that the         *
  18.  * GFX_CREDIT_CNTR is less than or equal to zero.                       *
  19.  *                                                                      *
  20.  ************************************************************************/
  21. #ifdef LITTLE_ENDIAN
  22. typedef union pi_gfx_int_cntr_a_u {
  23. bdrkreg_t pi_gfx_int_cntr_a_regval;
  24. struct  {
  25. bdrkreg_t gica_gfx_int_cntr         : 26;
  26. bdrkreg_t       gica_rsvd                 :     38;
  27. } pi_gfx_int_cntr_a_fld_s;
  28. } pi_gfx_int_cntr_a_u_t;
  29. #else
  30. typedef union pi_gfx_int_cntr_a_u {
  31. bdrkreg_t pi_gfx_int_cntr_a_regval;
  32. struct {
  33. bdrkreg_t gica_rsvd   : 38;
  34. bdrkreg_t gica_gfx_int_cntr   : 26;
  35. } pi_gfx_int_cntr_a_fld_s;
  36. } pi_gfx_int_cntr_a_u_t;
  37. #endif
  38. /************************************************************************
  39.  *                                                                      *
  40.  *  There is one of these registers for each CPU. The value in this     *
  41.  * register is loaded into the GFX_INT_CNTR register when an            *
  42.  * interrupt, NMI, or soft reset is sent to the processor. The value    *
  43.  * in this register is compared to the value of GFX_INT_CNTR and an     *
  44.  * interrupt is sent when they become equal.                            *
  45.  *                                                                      *
  46.  ************************************************************************/
  47. #ifdef LINUX
  48. typedef union pi_gfx_int_cmp_a_u {
  49. bdrkreg_t pi_gfx_int_cmp_a_regval;
  50. struct  {
  51. bdrkreg_t gica_gfx_int_cmp          : 26;
  52. bdrkreg_t       gica_rsvd                 :     38;
  53. } pi_gfx_int_cmp_a_fld_s;
  54. } pi_gfx_int_cmp_a_u_t;
  55. #else
  56. typedef union pi_gfx_int_cmp_a_u {
  57. bdrkreg_t pi_gfx_int_cmp_a_regval;
  58. struct {
  59. bdrkreg_t gica_rsvd   : 38;
  60. bdrkreg_t gica_gfx_int_cmp   : 26;
  61. } pi_gfx_int_cmp_a_fld_s;
  62. } pi_gfx_int_cmp_a_u_t;
  63. #endif
  64. /************************************************************************
  65.  *                                                                      *
  66.  *  There is one of these registers for each CPU. This register         *
  67.  * specifies the value of the Graphics Page. Uncached writes into the   *
  68.  * Graphics Page (with uncached attribute of IO) are done with GFXWS    *
  69.  * commands rather than the normal PWRI commands. GFXWS commands are    *
  70.  * tracked with the graphics credit counters.                           *
  71.  *                                                                      *
  72.  ************************************************************************/
  73. #ifdef LITTLE_ENDIAN
  74. typedef union pi_gfx_page_b_u {
  75. bdrkreg_t pi_gfx_page_b_regval;
  76. struct  {
  77. bdrkreg_t gpb_rsvd_1                : 17;
  78.                 bdrkreg_t       gpb_gfx_page_addr         :     23;
  79.                 bdrkreg_t       gpb_en_gfx_page           :      1;
  80.                 bdrkreg_t       gpb_rsvd                  :     23;
  81. } pi_gfx_page_b_fld_s;
  82. } pi_gfx_page_b_u_t;
  83. #else
  84. typedef union pi_gfx_page_b_u {
  85. bdrkreg_t pi_gfx_page_b_regval;
  86. struct {
  87. bdrkreg_t gpb_rsvd   : 23;
  88. bdrkreg_t gpb_en_gfx_page   :  1;
  89. bdrkreg_t gpb_gfx_page_addr   : 23;
  90. bdrkreg_t gpb_rsvd_1   : 17;
  91. } pi_gfx_page_b_fld_s;
  92. } pi_gfx_page_b_u_t;
  93. #endif
  94. /************************************************************************
  95.  *                                                                      *
  96.  *  There is one of these registers for each CPU. This register         *
  97.  * counts graphics credits. This counter is decremented for each        *
  98.  * doubleword sent to graphics with GFXWS or GFXWL commands. It is      *
  99.  * incremented for each doubleword acknowledge from graphics. When      *
  100.  * this counter has a smaller value than the GFX_BIAS register,         *
  101.  * SysWrRdy_L is deasserted, an interrupt is sent to the processor,     *
  102.  * and SysWrRdy_L is allowed to be asserted again. This is the basic    *
  103.  * mechanism for flow-controlling graphics writes.                      *
  104.  *                                                                      *
  105.  ************************************************************************/
  106. #ifdef LITTLE_ENDIAN
  107. typedef union pi_gfx_credit_cntr_b_u {
  108. bdrkreg_t pi_gfx_credit_cntr_b_regval;
  109. struct  {
  110. bdrkreg_t gccb_gfx_credit_cntr      : 12;
  111. bdrkreg_t       gccb_rsvd                 :     52;
  112. } pi_gfx_credit_cntr_b_fld_s;
  113. } pi_gfx_credit_cntr_b_u_t;
  114. #else
  115. typedef union pi_gfx_credit_cntr_b_u {
  116. bdrkreg_t pi_gfx_credit_cntr_b_regval;
  117. struct {
  118. bdrkreg_t gccb_rsvd   : 52;
  119. bdrkreg_t gccb_gfx_credit_cntr   : 12;
  120. } pi_gfx_credit_cntr_b_fld_s;
  121. } pi_gfx_credit_cntr_b_u_t;
  122. #endif
  123. /************************************************************************
  124.  *                                                                      *
  125.  *  There is one of these registers for each CPU. When the graphics     *
  126.  * credit counter is less than or equal to this value, a flow control   *
  127.  * interrupt is sent.                                                   *
  128.  *                                                                      *
  129.  ************************************************************************/
  130. #ifdef LITTLE_ENDIAN
  131. typedef union pi_gfx_bias_b_u {
  132. bdrkreg_t pi_gfx_bias_b_regval;
  133. struct  {
  134. bdrkreg_t gbb_gfx_bias              : 12;
  135. bdrkreg_t       gbb_rsvd                  :     52;
  136. } pi_gfx_bias_b_fld_s;
  137. } pi_gfx_bias_b_u_t;
  138. #else
  139. typedef union pi_gfx_bias_b_u {
  140. bdrkreg_t pi_gfx_bias_b_regval;
  141. struct {
  142. bdrkreg_t gbb_rsvd   : 52;
  143. bdrkreg_t gbb_gfx_bias   : 12;
  144. } pi_gfx_bias_b_fld_s;
  145. } pi_gfx_bias_b_u_t;
  146. #endif
  147. /************************************************************************
  148.  *                                                                      *
  149.  * Description:  There is one of these registers for each CPU. When     *
  150.  * this counter reaches the value of the GFX_INT_CMP register, an       *
  151.  * interrupt is sent to the associated processor. At each clock         *
  152.  * cycle, the value in this register can be changed by any one of the   *
  153.  * following actions:                                                   *
  154.  * - Written by software.                                               *
  155.  * - Loaded with the value of GFX_INT_CMP, when an interrupt, NMI, or   *
  156.  * soft reset occurs, thus preventing an additional interrupt.          *
  157.  * - Zeroed, when the GFX_CREDIT_CNTR rises above the bias value.       *
  158.  * - Incremented (by one at each clock) for each clock that the         *
  159.  * GFX_CREDIT_CNTR is less than or equal to zero.                       *
  160.  *                                                                      *
  161.  ************************************************************************/
  162. #ifdef LITTLE_ENDIAN
  163. typedef union pi_gfx_int_cntr_b_u {
  164. bdrkreg_t pi_gfx_int_cntr_b_regval;
  165. struct  {
  166. bdrkreg_t gicb_gfx_int_cntr         : 26;
  167. bdrkreg_t       gicb_rsvd                 :     38;
  168. } pi_gfx_int_cntr_b_fld_s;
  169. } pi_gfx_int_cntr_b_u_t;
  170. #else
  171. typedef union pi_gfx_int_cntr_b_u {
  172. bdrkreg_t pi_gfx_int_cntr_b_regval;
  173. struct {
  174. bdrkreg_t gicb_rsvd   : 38;
  175. bdrkreg_t gicb_gfx_int_cntr   : 26;
  176. } pi_gfx_int_cntr_b_fld_s;
  177. } pi_gfx_int_cntr_b_u_t;
  178. #endif
  179. /************************************************************************
  180.  *                                                                      *
  181.  *  There is one of these registers for each CPU. The value in this     *
  182.  * register is loaded into the GFX_INT_CNTR register when an            *
  183.  * interrupt, NMI, or soft reset is sent to the processor. The value    *
  184.  * in this register is compared to the value of GFX_INT_CNTR and an     *
  185.  * interrupt is sent when they become equal.                            *
  186.  *                                                                      *
  187.  ************************************************************************/
  188. #ifdef LITTLE_ENDIAN
  189. typedef union pi_gfx_int_cmp_b_u {
  190. bdrkreg_t pi_gfx_int_cmp_b_regval;
  191. struct  {
  192. bdrkreg_t gicb_gfx_int_cmp          : 26;
  193. bdrkreg_t       gicb_rsvd                 :     38;
  194. } pi_gfx_int_cmp_b_fld_s;
  195. } pi_gfx_int_cmp_b_u_t;
  196. #else
  197. typedef union pi_gfx_int_cmp_b_u {
  198. bdrkreg_t pi_gfx_int_cmp_b_regval;
  199. struct {
  200. bdrkreg_t gicb_rsvd   : 38;
  201. bdrkreg_t gicb_gfx_int_cmp   : 26;
  202. } pi_gfx_int_cmp_b_fld_s;
  203. } pi_gfx_int_cmp_b_u_t;
  204. #endif
  205. /************************************************************************
  206.  *                                                                      *
  207.  * Description:  A read of this register returns all sources of         *
  208.  * Bedrock Error Interrupts. Storing to the write-with-clear location   *
  209.  * clears any bit for which a one appears on the data bus. Storing to   *
  210.  * the writable location does a direct write to all unreserved bits     *
  211.  * (except for MEM_UNC).                                                *
  212.  * In Synergy mode, the processor that is the source of the command     *
  213.  * that got an error is independent of the A or B SysAD bus. So in      *
  214.  * Synergy mode, Synergy provides the source processor number in bit    *
  215.  * 52 of the SysAD bus in all commands. The PI saves this in the RRB    *
  216.  * or WRB entry, and uses that value to determine which error bit (A    *
  217.  * or B) to set, as well as which ERR_STATUS and spool registers to     *
  218.  * use, for all error types in this register that are specified as an   *
  219.  * error to CPU_A or CPU_B.                                             *
  220.  * This register is not cleared at reset.                               *
  221.  *                                                                      *
  222.  ************************************************************************/
  223. #ifdef LITTLE_ENDIAN
  224. typedef union pi_err_int_pend_wr_u {
  225. bdrkreg_t pi_err_int_pend_wr_regval;
  226. struct  {
  227. bdrkreg_t eipw_spool_comp_b         :  1;
  228.                 bdrkreg_t       eipw_spool_comp_a         :      1;
  229.                 bdrkreg_t       eipw_spurious_b           :      1;
  230.                 bdrkreg_t       eipw_spurious_a           :      1;
  231.                 bdrkreg_t       eipw_wrb_terr_b           :      1;
  232.                 bdrkreg_t       eipw_wrb_terr_a           :      1;
  233.                 bdrkreg_t       eipw_wrb_werr_b           :      1;
  234.                 bdrkreg_t       eipw_wrb_werr_a           :      1;
  235.                 bdrkreg_t       eipw_sysstate_par_b       :      1;
  236.                 bdrkreg_t       eipw_sysstate_par_a       :      1;
  237.                 bdrkreg_t       eipw_sysad_data_ecc_b     :      1;
  238.                 bdrkreg_t       eipw_sysad_data_ecc_a     :      1;
  239.                 bdrkreg_t       eipw_sysad_addr_ecc_b     :      1;
  240.                 bdrkreg_t       eipw_sysad_addr_ecc_a     :      1;
  241.                 bdrkreg_t       eipw_syscmd_data_par_b    :      1;
  242.                 bdrkreg_t       eipw_syscmd_data_par_a    :      1;
  243.                 bdrkreg_t       eipw_syscmd_addr_par_b    :      1;
  244.                 bdrkreg_t       eipw_syscmd_addr_par_a    :      1;
  245.                 bdrkreg_t       eipw_spool_err_b          :      1;
  246.                 bdrkreg_t       eipw_spool_err_a          :      1;
  247.                 bdrkreg_t       eipw_ue_uncached_b        :      1;
  248.                 bdrkreg_t       eipw_ue_uncached_a        :      1;
  249.                 bdrkreg_t       eipw_sysstate_tag_b       :      1;
  250.                 bdrkreg_t       eipw_sysstate_tag_a       :      1;
  251.                 bdrkreg_t       eipw_mem_unc              :      1;
  252.                 bdrkreg_t       eipw_sysad_bad_data_b     :      1;
  253.                 bdrkreg_t       eipw_sysad_bad_data_a     :      1;
  254.                 bdrkreg_t       eipw_ue_cached_b          :      1;
  255.                 bdrkreg_t       eipw_ue_cached_a          :      1;
  256.                 bdrkreg_t       eipw_pkt_len_err_b        :      1;
  257.                 bdrkreg_t       eipw_pkt_len_err_a        :      1;
  258.                 bdrkreg_t       eipw_irb_err_b            :      1;
  259.                 bdrkreg_t       eipw_irb_err_a            :      1;
  260.                 bdrkreg_t       eipw_irb_timeout_b        :      1;
  261.                 bdrkreg_t       eipw_irb_timeout_a        :      1;
  262.                 bdrkreg_t       eipw_rsvd                 :     29;
  263. } pi_err_int_pend_wr_fld_s;
  264. } pi_err_int_pend_wr_u_t;
  265. #else
  266. typedef union pi_err_int_pend_wr_u {
  267. bdrkreg_t pi_err_int_pend_wr_regval;
  268. struct {
  269. bdrkreg_t eipw_rsvd   : 29;
  270. bdrkreg_t eipw_irb_timeout_a   :  1;
  271. bdrkreg_t eipw_irb_timeout_b   :  1;
  272. bdrkreg_t eipw_irb_err_a   :  1;
  273. bdrkreg_t eipw_irb_err_b   :  1;
  274. bdrkreg_t eipw_pkt_len_err_a   :  1;
  275. bdrkreg_t eipw_pkt_len_err_b   :  1;
  276. bdrkreg_t eipw_ue_cached_a   :  1;
  277. bdrkreg_t eipw_ue_cached_b   :  1;
  278. bdrkreg_t eipw_sysad_bad_data_a   :  1;
  279. bdrkreg_t eipw_sysad_bad_data_b   :  1;
  280. bdrkreg_t eipw_mem_unc   :  1;
  281. bdrkreg_t eipw_sysstate_tag_a   :  1;
  282. bdrkreg_t eipw_sysstate_tag_b   :  1;
  283. bdrkreg_t eipw_ue_uncached_a   :  1;
  284. bdrkreg_t eipw_ue_uncached_b   :  1;
  285. bdrkreg_t eipw_spool_err_a   :  1;
  286. bdrkreg_t eipw_spool_err_b   :  1;
  287. bdrkreg_t eipw_syscmd_addr_par_a   :  1;
  288. bdrkreg_t eipw_syscmd_addr_par_b   :  1;
  289. bdrkreg_t eipw_syscmd_data_par_a   :  1;
  290. bdrkreg_t eipw_syscmd_data_par_b   :  1;
  291. bdrkreg_t eipw_sysad_addr_ecc_a   :  1;
  292. bdrkreg_t eipw_sysad_addr_ecc_b   :  1;
  293. bdrkreg_t eipw_sysad_data_ecc_a   :  1;
  294. bdrkreg_t eipw_sysad_data_ecc_b   :  1;
  295. bdrkreg_t eipw_sysstate_par_a   :  1;
  296. bdrkreg_t eipw_sysstate_par_b   :  1;
  297. bdrkreg_t eipw_wrb_werr_a   :  1;
  298. bdrkreg_t eipw_wrb_werr_b   :  1;
  299. bdrkreg_t eipw_wrb_terr_a   :  1;
  300. bdrkreg_t eipw_wrb_terr_b   :  1;
  301. bdrkreg_t eipw_spurious_a   :  1;
  302. bdrkreg_t eipw_spurious_b   :  1;
  303. bdrkreg_t eipw_spool_comp_a   :  1;
  304. bdrkreg_t eipw_spool_comp_b   :  1;
  305. } pi_err_int_pend_wr_fld_s;
  306. } pi_err_int_pend_wr_u_t;
  307. #endif
  308. /************************************************************************
  309.  *                                                                      *
  310.  * Description:  A read of this register returns all sources of         *
  311.  * Bedrock Error Interrupts. Storing to the write-with-clear location   *
  312.  * clears any bit for which a one appears on the data bus. Storing to   *
  313.  * the writable location does a direct write to all unreserved bits     *
  314.  * (except for MEM_UNC).                                                *
  315.  * In Synergy mode, the processor that is the source of the command     *
  316.  * that got an error is independent of the A or B SysAD bus. So in      *
  317.  * Synergy mode, Synergy provides the source processor number in bit    *
  318.  * 52 of the SysAD bus in all commands. The PI saves this in the RRB    *
  319.  * or WRB entry, and uses that value to determine which error bit (A    *
  320.  * or B) to set, as well as which ERR_STATUS and spool registers to     *
  321.  * use, for all error types in this register that are specified as an   *
  322.  * error to CPU_A or CPU_B.                                             *
  323.  * This register is not cleared at reset.                               *
  324.  *                                                                      *
  325.  ************************************************************************/
  326. #ifdef LITTLE_ENDIAN
  327. typedef union pi_err_int_pend_u {
  328. bdrkreg_t pi_err_int_pend_regval;
  329. struct  {
  330. bdrkreg_t eip_spool_comp_b          :  1;
  331.                 bdrkreg_t       eip_spool_comp_a          :      1;
  332.                 bdrkreg_t       eip_spurious_b            :      1;
  333.                 bdrkreg_t       eip_spurious_a            :      1;
  334.                 bdrkreg_t       eip_wrb_terr_b            :      1;
  335.                 bdrkreg_t       eip_wrb_terr_a            :      1;
  336.                 bdrkreg_t       eip_wrb_werr_b            :      1;
  337.                 bdrkreg_t       eip_wrb_werr_a            :      1;
  338.                 bdrkreg_t       eip_sysstate_par_b        :      1;
  339.                 bdrkreg_t       eip_sysstate_par_a        :      1;
  340.                 bdrkreg_t       eip_sysad_data_ecc_b      :      1;
  341.                 bdrkreg_t       eip_sysad_data_ecc_a      :      1;
  342.                 bdrkreg_t       eip_sysad_addr_ecc_b      :      1;
  343.                 bdrkreg_t       eip_sysad_addr_ecc_a      :      1;
  344.                 bdrkreg_t       eip_syscmd_data_par_b     :      1;
  345.                 bdrkreg_t       eip_syscmd_data_par_a     :      1;
  346.                 bdrkreg_t       eip_syscmd_addr_par_b     :      1;
  347.                 bdrkreg_t       eip_syscmd_addr_par_a     :      1;
  348.                 bdrkreg_t       eip_spool_err_b           :      1;
  349.                 bdrkreg_t       eip_spool_err_a           :      1;
  350.                 bdrkreg_t       eip_ue_uncached_b         :      1;
  351.                 bdrkreg_t       eip_ue_uncached_a         :      1;
  352.                 bdrkreg_t       eip_sysstate_tag_b        :      1;
  353.                 bdrkreg_t       eip_sysstate_tag_a        :      1;
  354.                 bdrkreg_t       eip_mem_unc               :      1;
  355.                 bdrkreg_t       eip_sysad_bad_data_b      :      1;
  356.                 bdrkreg_t       eip_sysad_bad_data_a      :      1;
  357.                 bdrkreg_t       eip_ue_cached_b           :      1;
  358.                 bdrkreg_t       eip_ue_cached_a           :      1;
  359.                 bdrkreg_t       eip_pkt_len_err_b         :      1;
  360.                 bdrkreg_t       eip_pkt_len_err_a         :      1;
  361.                 bdrkreg_t       eip_irb_err_b             :      1;
  362.                 bdrkreg_t       eip_irb_err_a             :      1;
  363.                 bdrkreg_t       eip_irb_timeout_b         :      1;
  364.                 bdrkreg_t       eip_irb_timeout_a         :      1;
  365.                 bdrkreg_t       eip_rsvd                  :     29;
  366. } pi_err_int_pend_fld_s;
  367. } pi_err_int_pend_u_t;
  368. #else
  369. typedef union pi_err_int_pend_u {
  370. bdrkreg_t pi_err_int_pend_regval;
  371. struct {
  372. bdrkreg_t eip_rsvd   : 29;
  373. bdrkreg_t eip_irb_timeout_a   :  1;
  374. bdrkreg_t eip_irb_timeout_b   :  1;
  375. bdrkreg_t eip_irb_err_a   :  1;
  376. bdrkreg_t eip_irb_err_b   :  1;
  377. bdrkreg_t eip_pkt_len_err_a   :  1;
  378. bdrkreg_t eip_pkt_len_err_b   :  1;
  379. bdrkreg_t eip_ue_cached_a   :  1;
  380. bdrkreg_t eip_ue_cached_b   :  1;
  381. bdrkreg_t eip_sysad_bad_data_a   :  1;
  382. bdrkreg_t eip_sysad_bad_data_b   :  1;
  383. bdrkreg_t eip_mem_unc   :  1;
  384. bdrkreg_t eip_sysstate_tag_a   :  1;
  385. bdrkreg_t eip_sysstate_tag_b   :  1;
  386. bdrkreg_t eip_ue_uncached_a   :  1;
  387. bdrkreg_t eip_ue_uncached_b   :  1;
  388. bdrkreg_t eip_spool_err_a   :  1;
  389. bdrkreg_t eip_spool_err_b   :  1;
  390. bdrkreg_t eip_syscmd_addr_par_a   :  1;
  391. bdrkreg_t eip_syscmd_addr_par_b   :  1;
  392. bdrkreg_t eip_syscmd_data_par_a   :  1;
  393. bdrkreg_t eip_syscmd_data_par_b   :  1;
  394. bdrkreg_t eip_sysad_addr_ecc_a   :  1;
  395. bdrkreg_t eip_sysad_addr_ecc_b   :  1;
  396. bdrkreg_t eip_sysad_data_ecc_a   :  1;
  397. bdrkreg_t eip_sysad_data_ecc_b   :  1;
  398. bdrkreg_t eip_sysstate_par_a   :  1;
  399. bdrkreg_t eip_sysstate_par_b   :  1;
  400. bdrkreg_t eip_wrb_werr_a   :  1;
  401. bdrkreg_t eip_wrb_werr_b   :  1;
  402. bdrkreg_t eip_wrb_terr_a   :  1;
  403. bdrkreg_t eip_wrb_terr_b   :  1;
  404. bdrkreg_t eip_spurious_a   :  1;
  405. bdrkreg_t eip_spurious_b   :  1;
  406. bdrkreg_t eip_spool_comp_a   :  1;
  407. bdrkreg_t eip_spool_comp_b   :  1;
  408. } pi_err_int_pend_fld_s;
  409. } pi_err_int_pend_u_t;
  410. #endif
  411. /************************************************************************
  412.  *                                                                      *
  413.  *  There is one of these registers for each CPU. This read/write       *
  414.  * register masks the contents of ERR_INT_PEND to determine which       *
  415.  * conditions cause a Level-6 interrupt to CPU_A or CPU_B. A bit set    *
  416.  * allows the interrupt. Only one processor in a Bedrock should         *
  417.  * enable the Memory/Directory Uncorrectable Error bit.                 *
  418.  *                                                                      *
  419.  ************************************************************************/
  420. #ifdef LITTLE_ENDIAN
  421. typedef union pi_err_int_mask_a_u {
  422. bdrkreg_t pi_err_int_mask_a_regval;
  423. struct  {
  424. bdrkreg_t eima_mask                 : 35;
  425. bdrkreg_t       eima_rsvd                 :     29;
  426. } pi_err_int_mask_a_fld_s;
  427. } pi_err_int_mask_a_u_t;
  428. #else
  429. typedef union pi_err_int_mask_a_u {
  430. bdrkreg_t pi_err_int_mask_a_regval;
  431. struct {
  432. bdrkreg_t eima_rsvd   : 29;
  433. bdrkreg_t eima_mask   : 35;
  434. } pi_err_int_mask_a_fld_s;
  435. } pi_err_int_mask_a_u_t;
  436. #endif
  437. /************************************************************************
  438.  *                                                                      *
  439.  *  There is one of these registers for each CPU. This read/write       *
  440.  * register masks the contents of ERR_INT_PEND to determine which       *
  441.  * conditions cause a Level-6 interrupt to CPU_A or CPU_B. A bit set    *
  442.  * allows the interrupt. Only one processor in a Bedrock should         *
  443.  * enable the Memory/Directory Uncorrectable Error bit.                 *
  444.  *                                                                      *
  445.  ************************************************************************/
  446. #ifdef LITTLE_ENDIAN
  447. typedef union pi_err_int_mask_b_u {
  448. bdrkreg_t pi_err_int_mask_b_regval;
  449. struct  {
  450. bdrkreg_t eimb_mask                 : 35;
  451. bdrkreg_t       eimb_rsvd                 :     29;
  452. } pi_err_int_mask_b_fld_s;
  453. } pi_err_int_mask_b_u_t;
  454. #else
  455. typedef union pi_err_int_mask_b_u {
  456. bdrkreg_t pi_err_int_mask_b_regval;
  457. struct {
  458. bdrkreg_t eimb_rsvd   : 29;
  459. bdrkreg_t eimb_mask   : 35;
  460. } pi_err_int_mask_b_fld_s;
  461. } pi_err_int_mask_b_u_t;
  462. #endif
  463. /************************************************************************
  464.  *                                                                      *
  465.  * Description:  There is one of these registers for each CPU. This     *
  466.  * register is the address of the next write to the error stack. This   *
  467.  * register is incremented after each such write. Only the low N bits   *
  468.  * are incremented, where N is defined by the size of the error stack   *
  469.  * specified in the ERR_STACK_SIZE register.                            *
  470.  * This register is not reset by a soft reset.                          *
  471.  *                                                                      *
  472.  ************************************************************************/
  473. #ifdef LITTLE_ENDIAN
  474. typedef union pi_err_stack_addr_a_u {
  475. bdrkreg_t pi_err_stack_addr_a_regval;
  476. struct  {
  477. bdrkreg_t esaa_rsvd_1               :  3;
  478.                 bdrkreg_t       esaa_addr                 :     30;
  479.                 bdrkreg_t       esaa_rsvd                 :     31;
  480. } pi_err_stack_addr_a_fld_s;
  481. } pi_err_stack_addr_a_u_t;
  482. #else
  483. typedef union pi_err_stack_addr_a_u {
  484. bdrkreg_t pi_err_stack_addr_a_regval;
  485. struct {
  486. bdrkreg_t esaa_rsvd   : 31;
  487. bdrkreg_t esaa_addr   : 30;
  488. bdrkreg_t esaa_rsvd_1   :  3;
  489. } pi_err_stack_addr_a_fld_s;
  490. } pi_err_stack_addr_a_u_t;
  491. #endif
  492. /************************************************************************
  493.  *                                                                      *
  494.  * Description:  There is one of these registers for each CPU. This     *
  495.  * register is the address of the next write to the error stack. This   *
  496.  * register is incremented after each such write. Only the low N bits   *
  497.  * are incremented, where N is defined by the size of the error stack   *
  498.  * specified in the ERR_STACK_SIZE register.                            *
  499.  * This register is not reset by a soft reset.                          *
  500.  *                                                                      *
  501.  ************************************************************************/
  502. #ifdef LITTLE_ENDIAN
  503. typedef union pi_err_stack_addr_b_u {
  504. bdrkreg_t pi_err_stack_addr_b_regval;
  505. struct  {
  506. bdrkreg_t esab_rsvd_1               :  3;
  507.                 bdrkreg_t       esab_addr                 :     30;
  508.                 bdrkreg_t       esab_rsvd                 :     31;
  509. } pi_err_stack_addr_b_fld_s;
  510. } pi_err_stack_addr_b_u_t;
  511. #else
  512. typedef union pi_err_stack_addr_b_u {
  513. bdrkreg_t pi_err_stack_addr_b_regval;
  514. struct {
  515. bdrkreg_t esab_rsvd   : 31;
  516. bdrkreg_t esab_addr   : 30;
  517. bdrkreg_t esab_rsvd_1   :  3;
  518. } pi_err_stack_addr_b_fld_s;
  519. } pi_err_stack_addr_b_u_t;
  520. #endif
  521. /************************************************************************
  522.  *                                                                      *
  523.  * Description:  Sets the size (number of 64-bit entries) in the        *
  524.  * error stack that is spooled to local memory when an error occurs.    *
  525.  * Table16 defines the format of each entry in the spooled error        *
  526.  * stack.                                                               *
  527.  * This register is not reset by a soft reset.                          *
  528.  *                                                                      *
  529.  ************************************************************************/
  530. #ifdef LITTLE_ENDIAN
  531. typedef union pi_err_stack_size_u {
  532. bdrkreg_t pi_err_stack_size_regval;
  533. struct  {
  534. bdrkreg_t ess_size                  :  4;
  535.                 bdrkreg_t       ess_rsvd                  :     60;
  536. } pi_err_stack_size_fld_s;
  537. } pi_err_stack_size_u_t;
  538. #else
  539. typedef union pi_err_stack_size_u {
  540. bdrkreg_t pi_err_stack_size_regval;
  541. struct {
  542. bdrkreg_t ess_rsvd   : 60;
  543. bdrkreg_t ess_size   :  4;
  544. } pi_err_stack_size_fld_s;
  545. } pi_err_stack_size_u_t;
  546. #endif
  547. /************************************************************************
  548.  *                                                                      *
  549.  *  This register is not cleared at reset. Writing this register with   *
  550.  * the Write-clear address (with any data) clears both the              *
  551.  * ERR_STATUS0_A and ERR_STATUS1_A registers.                           *
  552.  *                                                                      *
  553.  ************************************************************************/
  554. #ifdef LITTLE_ENDIAN
  555. typedef union pi_err_status0_a_u {
  556. bdrkreg_t pi_err_status0_a_regval;
  557. struct  {
  558. bdrkreg_t esa_error_type            :  3;
  559.                 bdrkreg_t       esa_proc_req_num          :      3;
  560.                 bdrkreg_t       esa_supplemental          :     11;
  561.                 bdrkreg_t       esa_cmd                   :      8;
  562.                 bdrkreg_t       esa_addr                  :     37;
  563.                 bdrkreg_t       esa_over_run              :      1;
  564.                 bdrkreg_t       esa_valid                 :      1;
  565. } pi_err_status0_a_fld_s;
  566. } pi_err_status0_a_u_t;
  567. #else
  568. typedef union pi_err_status0_a_u {
  569. bdrkreg_t pi_err_status0_a_regval;
  570. struct {
  571. bdrkreg_t esa_valid   :  1;
  572. bdrkreg_t esa_over_run   :  1;
  573. bdrkreg_t esa_addr   : 37;
  574. bdrkreg_t esa_cmd   :  8;
  575. bdrkreg_t esa_supplemental   : 11;
  576. bdrkreg_t esa_proc_req_num   :  3;
  577. bdrkreg_t esa_error_type   :  3;
  578. } pi_err_status0_a_fld_s;
  579. } pi_err_status0_a_u_t;
  580. #endif
  581. /************************************************************************
  582.  *                                                                      *
  583.  *  This register is not cleared at reset. Writing this register with   *
  584.  * the Write-clear address (with any data) clears both the              *
  585.  * ERR_STATUS0_A and ERR_STATUS1_A registers.                           *
  586.  *                                                                      *
  587.  ************************************************************************/
  588. #ifdef LITTLE_ENDIAN
  589. typedef union pi_err_status0_a_clr_u {
  590. bdrkreg_t pi_err_status0_a_clr_regval;
  591. struct  {
  592. bdrkreg_t esac_error_type           :  3;
  593.                 bdrkreg_t       esac_proc_req_num         :      3;
  594.                 bdrkreg_t       esac_supplemental         :     11;
  595.                 bdrkreg_t       esac_cmd                  :      8;
  596.                 bdrkreg_t       esac_addr                 :     37;
  597.                 bdrkreg_t       esac_over_run             :      1;
  598.                 bdrkreg_t       esac_valid                :      1;
  599. } pi_err_status0_a_clr_fld_s;
  600. } pi_err_status0_a_clr_u_t;
  601. #else
  602. typedef union pi_err_status0_a_clr_u {
  603. bdrkreg_t pi_err_status0_a_clr_regval;
  604. struct {
  605. bdrkreg_t esac_valid   :  1;
  606. bdrkreg_t esac_over_run   :  1;
  607. bdrkreg_t esac_addr   : 37;
  608. bdrkreg_t esac_cmd   :  8;
  609. bdrkreg_t esac_supplemental   : 11;
  610. bdrkreg_t esac_proc_req_num   :  3;
  611. bdrkreg_t esac_error_type   :  3;
  612. } pi_err_status0_a_clr_fld_s;
  613. } pi_err_status0_a_clr_u_t;
  614. #endif
  615. /************************************************************************
  616.  *                                                                      *
  617.  *  This register is not cleared at reset. Writing this register with   *
  618.  * the Write-clear address (with any data) clears both the              *
  619.  * ERR_STATUS0_A and ERR_STATUS1_A registers.                           *
  620.  *                                                                      *
  621.  ************************************************************************/
  622. #ifdef LITTLE_ENDIAN
  623. typedef union pi_err_status1_a_u {
  624. bdrkreg_t pi_err_status1_a_regval;
  625. struct  {
  626. bdrkreg_t esa_spool_count           : 21;
  627.                 bdrkreg_t       esa_time_out_count        :      8;
  628.                 bdrkreg_t       esa_inval_count           :     10;
  629.                 bdrkreg_t       esa_crb_num               :      3;
  630.                 bdrkreg_t       esa_wrb                   :      1;
  631.                 bdrkreg_t       esa_e_bits                :      2;
  632.                 bdrkreg_t       esa_t_bit                 :      1;
  633.                 bdrkreg_t       esa_i_bit                 :      1;
  634.                 bdrkreg_t       esa_h_bit                 :      1;
  635.                 bdrkreg_t       esa_w_bit                 :      1;
  636.                 bdrkreg_t       esa_a_bit                 :      1;
  637.                 bdrkreg_t       esa_r_bit                 :      1;
  638.                 bdrkreg_t       esa_v_bit                 :      1;
  639.                 bdrkreg_t       esa_p_bit                 :      1;
  640.                 bdrkreg_t       esa_source                :     11;
  641. } pi_err_status1_a_fld_s;
  642. } pi_err_status1_a_u_t;
  643. #else
  644. typedef union pi_err_status1_a_u {
  645. bdrkreg_t pi_err_status1_a_regval;
  646. struct {
  647. bdrkreg_t esa_source   : 11;
  648. bdrkreg_t esa_p_bit   :  1;
  649. bdrkreg_t esa_v_bit   :  1;
  650. bdrkreg_t esa_r_bit   :  1;
  651. bdrkreg_t esa_a_bit   :  1;
  652. bdrkreg_t esa_w_bit   :  1;
  653. bdrkreg_t esa_h_bit   :  1;
  654. bdrkreg_t esa_i_bit   :  1;
  655. bdrkreg_t esa_t_bit   :  1;
  656. bdrkreg_t esa_e_bits   :  2;
  657. bdrkreg_t esa_wrb   :  1;
  658. bdrkreg_t esa_crb_num   :  3;
  659. bdrkreg_t esa_inval_count   : 10;
  660. bdrkreg_t esa_time_out_count   :  8;
  661. bdrkreg_t esa_spool_count   : 21;
  662. } pi_err_status1_a_fld_s;
  663. } pi_err_status1_a_u_t;
  664. #endif
  665. /************************************************************************
  666.  *                                                                      *
  667.  *  This register is not cleared at reset. Writing this register with   *
  668.  * the Write-clear address (with any data) clears both the              *
  669.  * ERR_STATUS0_A and ERR_STATUS1_A registers.                           *
  670.  *                                                                      *
  671.  ************************************************************************/
  672. #ifdef LITTLE_ENDIAN
  673. typedef union pi_err_status1_a_clr_u {
  674. bdrkreg_t pi_err_status1_a_clr_regval;
  675. struct  {
  676. bdrkreg_t esac_spool_count          : 21;
  677.                 bdrkreg_t       esac_time_out_count       :      8;
  678.                 bdrkreg_t       esac_inval_count          :     10;
  679.                 bdrkreg_t       esac_crb_num              :      3;
  680.                 bdrkreg_t       esac_wrb                  :      1;
  681.                 bdrkreg_t       esac_e_bits               :      2;
  682.                 bdrkreg_t       esac_t_bit                :      1;
  683.                 bdrkreg_t       esac_i_bit                :      1;
  684.                 bdrkreg_t       esac_h_bit                :      1;
  685.                 bdrkreg_t       esac_w_bit                :      1;
  686.                 bdrkreg_t       esac_a_bit                :      1;
  687.                 bdrkreg_t       esac_r_bit                :      1;
  688.                 bdrkreg_t       esac_v_bit                :      1;
  689.                 bdrkreg_t       esac_p_bit                :      1;
  690.                 bdrkreg_t       esac_source               :     11;
  691. } pi_err_status1_a_clr_fld_s;
  692. } pi_err_status1_a_clr_u_t;
  693. #else
  694. typedef union pi_err_status1_a_clr_u {
  695. bdrkreg_t pi_err_status1_a_clr_regval;
  696. struct {
  697. bdrkreg_t esac_source   : 11;
  698. bdrkreg_t esac_p_bit   :  1;
  699. bdrkreg_t esac_v_bit   :  1;
  700. bdrkreg_t esac_r_bit   :  1;
  701. bdrkreg_t esac_a_bit   :  1;
  702. bdrkreg_t esac_w_bit   :  1;
  703. bdrkreg_t esac_h_bit   :  1;
  704. bdrkreg_t esac_i_bit   :  1;
  705. bdrkreg_t esac_t_bit   :  1;
  706. bdrkreg_t esac_e_bits   :  2;
  707. bdrkreg_t esac_wrb   :  1;
  708. bdrkreg_t esac_crb_num   :  3;
  709. bdrkreg_t esac_inval_count   : 10;
  710. bdrkreg_t esac_time_out_count   :  8;
  711. bdrkreg_t esac_spool_count   : 21;
  712. } pi_err_status1_a_clr_fld_s;
  713. } pi_err_status1_a_clr_u_t;
  714. #endif
  715. /************************************************************************
  716.  *                                                                      *
  717.  *  This register is not cleared at reset. Writing this register with   *
  718.  * the Write-clear address (with any data) clears both the              *
  719.  * ERR_STATUS0_B and ERR_STATUS1_B registers.                           *
  720.  *                                                                      *
  721.  ************************************************************************/
  722. #ifdef LITTLE_ENDIAN
  723. typedef union pi_err_status0_b_u {
  724. bdrkreg_t pi_err_status0_b_regval;
  725. struct  {
  726. bdrkreg_t esb_error_type            :  3;
  727.                 bdrkreg_t       esb_proc_request_number   :      3;
  728.                 bdrkreg_t       esb_supplemental          :     11;
  729.                 bdrkreg_t       esb_cmd                   :      8;
  730.                 bdrkreg_t       esb_addr                  :     37;
  731.                 bdrkreg_t       esb_over_run              :      1;
  732.                 bdrkreg_t       esb_valid                 :      1;
  733. } pi_err_status0_b_fld_s;
  734. } pi_err_status0_b_u_t;
  735. #else
  736. typedef union pi_err_status0_b_u {
  737. bdrkreg_t pi_err_status0_b_regval;
  738. struct {
  739. bdrkreg_t esb_valid   :  1;
  740. bdrkreg_t esb_over_run   :  1;
  741. bdrkreg_t esb_addr   : 37;
  742. bdrkreg_t esb_cmd   :  8;
  743. bdrkreg_t esb_supplemental   : 11;
  744. bdrkreg_t esb_proc_request_number   :  3;
  745. bdrkreg_t esb_error_type   :  3;
  746. } pi_err_status0_b_fld_s;
  747. } pi_err_status0_b_u_t;
  748. #endif
  749. /************************************************************************
  750.  *                                                                      *
  751.  *  This register is not cleared at reset. Writing this register with   *
  752.  * the Write-clear address (with any data) clears both the              *
  753.  * ERR_STATUS0_B and ERR_STATUS1_B registers.                           *
  754.  *                                                                      *
  755.  ************************************************************************/
  756. #ifdef LITTLE_ENDIAN
  757. typedef union pi_err_status0_b_clr_u {
  758. bdrkreg_t pi_err_status0_b_clr_regval;
  759. struct  {
  760. bdrkreg_t esbc_error_type           :  3;
  761.                 bdrkreg_t       esbc_proc_request_number  :      3;
  762.                 bdrkreg_t       esbc_supplemental         :     11;
  763.                 bdrkreg_t       esbc_cmd                  :      8;
  764.                 bdrkreg_t       esbc_addr                 :     37;
  765.                 bdrkreg_t       esbc_over_run             :      1;
  766.                 bdrkreg_t       esbc_valid                :      1;
  767. } pi_err_status0_b_clr_fld_s;
  768. } pi_err_status0_b_clr_u_t;
  769. #else
  770. typedef union pi_err_status0_b_clr_u {
  771. bdrkreg_t pi_err_status0_b_clr_regval;
  772. struct {
  773. bdrkreg_t esbc_valid   :  1;
  774. bdrkreg_t esbc_over_run   :  1;
  775. bdrkreg_t esbc_addr   : 37;
  776. bdrkreg_t esbc_cmd   :  8;
  777. bdrkreg_t esbc_supplemental   : 11;
  778. bdrkreg_t esbc_proc_request_number  :  3;
  779. bdrkreg_t esbc_error_type   :  3;
  780. } pi_err_status0_b_clr_fld_s;
  781. } pi_err_status0_b_clr_u_t;
  782. #endif
  783. /************************************************************************
  784.  *                                                                      *
  785.  *  This register is not cleared at reset. Writing this register with   *
  786.  * the Write-clear address (with any data) clears both the              *
  787.  * ERR_STATUS0_B and ERR_STATUS1_B registers.                           *
  788.  *                                                                      *
  789.  ************************************************************************/
  790. #ifdef LITTLE_ENDIAN
  791. typedef union pi_err_status1_b_u {
  792. bdrkreg_t pi_err_status1_b_regval;
  793. struct  {
  794. bdrkreg_t esb_spool_count           : 21;
  795.                 bdrkreg_t       esb_time_out_count        :      8;
  796.                 bdrkreg_t       esb_inval_count           :     10;
  797.                 bdrkreg_t       esb_crb_num               :      3;
  798.                 bdrkreg_t       esb_wrb                   :      1;
  799.                 bdrkreg_t       esb_e_bits                :      2;
  800.                 bdrkreg_t       esb_t_bit                 :      1;
  801.                 bdrkreg_t       esb_i_bit                 :      1;
  802.                 bdrkreg_t       esb_h_bit                 :      1;
  803.                 bdrkreg_t       esb_w_bit                 :      1;
  804.                 bdrkreg_t       esb_a_bit                 :      1;
  805.                 bdrkreg_t       esb_r_bit                 :      1;
  806.                 bdrkreg_t       esb_v_bit                 :      1;
  807.                 bdrkreg_t       esb_p_bit                 :      1;
  808.                 bdrkreg_t       esb_source                :     11;
  809. } pi_err_status1_b_fld_s;
  810. } pi_err_status1_b_u_t;
  811. #else
  812. typedef union pi_err_status1_b_u {
  813. bdrkreg_t pi_err_status1_b_regval;
  814. struct {
  815. bdrkreg_t esb_source   : 11;
  816. bdrkreg_t esb_p_bit   :  1;
  817. bdrkreg_t esb_v_bit   :  1;
  818. bdrkreg_t esb_r_bit   :  1;
  819. bdrkreg_t esb_a_bit   :  1;
  820. bdrkreg_t esb_w_bit   :  1;
  821. bdrkreg_t esb_h_bit   :  1;
  822. bdrkreg_t esb_i_bit   :  1;
  823. bdrkreg_t esb_t_bit   :  1;
  824. bdrkreg_t esb_e_bits   :  2;
  825. bdrkreg_t esb_wrb   :  1;
  826. bdrkreg_t esb_crb_num   :  3;
  827. bdrkreg_t esb_inval_count   : 10;
  828. bdrkreg_t esb_time_out_count   :  8;
  829. bdrkreg_t esb_spool_count   : 21;
  830. } pi_err_status1_b_fld_s;
  831. } pi_err_status1_b_u_t;
  832. #endif
  833. /************************************************************************
  834.  *                                                                      *
  835.  *  This register is not cleared at reset. Writing this register with   *
  836.  * the Write-clear address (with any data) clears both the              *
  837.  * ERR_STATUS0_B and ERR_STATUS1_B registers.                           *
  838.  *                                                                      *
  839.  ************************************************************************/
  840. #ifdef LITTLE_ENDIAN
  841. typedef union pi_err_status1_b_clr_u {
  842. bdrkreg_t pi_err_status1_b_clr_regval;
  843. struct  {
  844. bdrkreg_t esbc_spool_count          : 21;
  845.                 bdrkreg_t       esbc_time_out_count       :      8;
  846.                 bdrkreg_t       esbc_inval_count          :     10;
  847.                 bdrkreg_t       esbc_crb_num              :      3;
  848.                 bdrkreg_t       esbc_wrb                  :      1;
  849.                 bdrkreg_t       esbc_e_bits               :      2;
  850.                 bdrkreg_t       esbc_t_bit                :      1;
  851.                 bdrkreg_t       esbc_i_bit                :      1;
  852.                 bdrkreg_t       esbc_h_bit                :      1;
  853.                 bdrkreg_t       esbc_w_bit                :      1;
  854.                 bdrkreg_t       esbc_a_bit                :      1;
  855.                 bdrkreg_t       esbc_r_bit                :      1;
  856.                 bdrkreg_t       esbc_v_bit                :      1;
  857.                 bdrkreg_t       esbc_p_bit                :      1;
  858.                 bdrkreg_t       esbc_source               :     11;
  859. } pi_err_status1_b_clr_fld_s;
  860. } pi_err_status1_b_clr_u_t;
  861. #else
  862. typedef union pi_err_status1_b_clr_u {
  863. bdrkreg_t pi_err_status1_b_clr_regval;
  864. struct {
  865. bdrkreg_t esbc_source   : 11;
  866. bdrkreg_t esbc_p_bit   :  1;
  867. bdrkreg_t esbc_v_bit   :  1;
  868. bdrkreg_t esbc_r_bit   :  1;
  869. bdrkreg_t esbc_a_bit   :  1;
  870. bdrkreg_t esbc_w_bit   :  1;
  871. bdrkreg_t esbc_h_bit   :  1;
  872. bdrkreg_t esbc_i_bit   :  1;
  873. bdrkreg_t esbc_t_bit   :  1;
  874. bdrkreg_t esbc_e_bits   :  2;
  875. bdrkreg_t esbc_wrb   :  1;
  876. bdrkreg_t esbc_crb_num   :  3;
  877. bdrkreg_t esbc_inval_count   : 10;
  878. bdrkreg_t esbc_time_out_count   :  8;
  879. bdrkreg_t esbc_spool_count   : 21;
  880. } pi_err_status1_b_clr_fld_s;
  881. } pi_err_status1_b_clr_u_t;
  882. #endif
  883. /************************************************************************
  884.  *                                                                      *
  885.  *  There is one of these registers for each CPU.                       *
  886.  *                                                                      *
  887.  ************************************************************************/
  888. #ifdef LITTLE_ENDIAN
  889. typedef union pi_spool_cmp_a_u {
  890. bdrkreg_t pi_spool_cmp_a_regval;
  891. struct  {
  892. bdrkreg_t sca_compare               : 20;
  893. bdrkreg_t       sca_rsvd                  :     44;
  894. } pi_spool_cmp_a_fld_s;
  895. } pi_spool_cmp_a_u_t;
  896. #else
  897. typedef union pi_spool_cmp_a_u {
  898. bdrkreg_t pi_spool_cmp_a_regval;
  899. struct {
  900. bdrkreg_t sca_rsvd   : 44;
  901. bdrkreg_t sca_compare   : 20;
  902. } pi_spool_cmp_a_fld_s;
  903. } pi_spool_cmp_a_u_t;
  904. #endif
  905. /************************************************************************
  906.  *                                                                      *
  907.  *  There is one of these registers for each CPU.                       *
  908.  *                                                                      *
  909.  ************************************************************************/
  910. #ifdef LITTLE_ENDIAN
  911. typedef union pi_spool_cmp_b_u {
  912. bdrkreg_t pi_spool_cmp_b_regval;
  913. struct  {
  914. bdrkreg_t scb_compare               : 20;
  915. bdrkreg_t       scb_rsvd                  :     44;
  916. } pi_spool_cmp_b_fld_s;
  917. } pi_spool_cmp_b_u_t;
  918. #else
  919. typedef union pi_spool_cmp_b_u {
  920. bdrkreg_t pi_spool_cmp_b_regval;
  921. struct {
  922. bdrkreg_t scb_rsvd   : 44;
  923. bdrkreg_t scb_compare   : 20;
  924. } pi_spool_cmp_b_fld_s;
  925. } pi_spool_cmp_b_u_t;
  926. #endif
  927. /************************************************************************
  928.  *                                                                      *
  929.  *  There is one of these registers for each CPU. A timeout can be      *
  930.  * forced by writing one(s).                                            *
  931.  *                                                                      *
  932.  ************************************************************************/
  933. #ifdef LITTLE_ENDIAN
  934. typedef union pi_crb_timeout_a_u {
  935. bdrkreg_t pi_crb_timeout_a_regval;
  936. struct  {
  937. bdrkreg_t cta_rrb                   :  4;
  938.                 bdrkreg_t       cta_wrb                   :      8;
  939.                 bdrkreg_t       cta_rsvd                  :     52;
  940. } pi_crb_timeout_a_fld_s;
  941. } pi_crb_timeout_a_u_t;
  942. #else
  943. typedef union pi_crb_timeout_a_u {
  944. bdrkreg_t pi_crb_timeout_a_regval;
  945. struct {
  946. bdrkreg_t cta_rsvd   : 52;
  947. bdrkreg_t cta_wrb   :  8;
  948. bdrkreg_t cta_rrb   :  4;
  949. } pi_crb_timeout_a_fld_s;
  950. } pi_crb_timeout_a_u_t;
  951. #endif
  952. /************************************************************************
  953.  *                                                                      *
  954.  *  There is one of these registers for each CPU. A timeout can be      *
  955.  * forced by writing one(s).                                            *
  956.  *                                                                      *
  957.  ************************************************************************/
  958. #ifdef LITTLE_ENDIAN
  959. typedef union pi_crb_timeout_b_u {
  960. bdrkreg_t pi_crb_timeout_b_regval;
  961. struct  {
  962. bdrkreg_t ctb_rrb                   :  4;
  963.                 bdrkreg_t       ctb_wrb                   :      8;
  964.                 bdrkreg_t       ctb_rsvd                  :     52;
  965. } pi_crb_timeout_b_fld_s;
  966. } pi_crb_timeout_b_u_t;
  967. #else
  968. typedef union pi_crb_timeout_b_u {
  969. bdrkreg_t pi_crb_timeout_b_regval;
  970. struct {
  971. bdrkreg_t ctb_rsvd   : 52;
  972. bdrkreg_t ctb_wrb   :  8;
  973. bdrkreg_t ctb_rrb   :  4;
  974. } pi_crb_timeout_b_fld_s;
  975. } pi_crb_timeout_b_u_t;
  976. #endif
  977. /************************************************************************
  978.  *                                                                      *
  979.  *  This register controls error checking and forwarding of SysAD       *
  980.  * errors.                                                              *
  981.  *                                                                      *
  982.  ************************************************************************/
  983. #ifdef LITTLE_ENDIAN
  984. typedef union pi_sysad_errchk_en_u {
  985. bdrkreg_t pi_sysad_errchk_en_regval;
  986. struct  {
  987. bdrkreg_t see_ecc_gen_en            :  1;
  988.                 bdrkreg_t       see_qual_gen_en           :      1;
  989.                 bdrkreg_t       see_sadp_chk_en           :      1;
  990.                 bdrkreg_t       see_cmdp_chk_en           :      1;
  991.                 bdrkreg_t       see_state_chk_en          :      1;
  992.                 bdrkreg_t       see_qual_chk_en           :      1;
  993.                 bdrkreg_t       see_rsvd                  :     58;
  994. } pi_sysad_errchk_en_fld_s;
  995. } pi_sysad_errchk_en_u_t;
  996. #else
  997. typedef union pi_sysad_errchk_en_u {
  998. bdrkreg_t pi_sysad_errchk_en_regval;
  999. struct {
  1000. bdrkreg_t see_rsvd   : 58;
  1001. bdrkreg_t see_qual_chk_en   :  1;
  1002. bdrkreg_t see_state_chk_en   :  1;
  1003. bdrkreg_t see_cmdp_chk_en   :  1;
  1004. bdrkreg_t see_sadp_chk_en   :  1;
  1005. bdrkreg_t see_qual_gen_en   :  1;
  1006. bdrkreg_t see_ecc_gen_en   :  1;
  1007. } pi_sysad_errchk_en_fld_s;
  1008. } pi_sysad_errchk_en_u_t;
  1009. #endif
  1010. /************************************************************************
  1011.  *                                                                      *
  1012.  *  There is one of these registers for each CPU. If any bit in this    *
  1013.  * register is set, then whenever reply data arrives with the UE        *
  1014.  * (uncorrectable error) indication set, the check-bits that are        *
  1015.  * generated and sent to the SysAD will be inverted corresponding to    *
  1016.  * the bits set in the register. This will also prevent the assertion   *
  1017.  * of the data quality indicator.                                       *
  1018.  *                                                                      *
  1019.  ************************************************************************/
  1020. #ifdef LITTLE_ENDIAN
  1021. typedef union pi_force_bad_check_bit_a_u {
  1022. bdrkreg_t pi_force_bad_check_bit_a_regval;
  1023. struct  {
  1024. bdrkreg_t fbcba_bad_check_bit       :  8;
  1025. bdrkreg_t       fbcba_rsvd                :     56;
  1026. } pi_force_bad_check_bit_a_fld_s;
  1027. } pi_force_bad_check_bit_a_u_t;
  1028. #else
  1029. typedef union pi_force_bad_check_bit_a_u {
  1030. bdrkreg_t pi_force_bad_check_bit_a_regval;
  1031. struct {
  1032. bdrkreg_t fbcba_rsvd   : 56;
  1033. bdrkreg_t fbcba_bad_check_bit   :  8;
  1034. } pi_force_bad_check_bit_a_fld_s;
  1035. } pi_force_bad_check_bit_a_u_t;
  1036. #endif
  1037. /************************************************************************
  1038.  *                                                                      *
  1039.  *  There is one of these registers for each CPU. If any bit in this    *
  1040.  * register is set, then whenever reply data arrives with the UE        *
  1041.  * (uncorrectable error) indication set, the check-bits that are        *
  1042.  * generated and sent to the SysAD will be inverted corresponding to    *
  1043.  * the bits set in the register. This will also prevent the assertion   *
  1044.  * of the data quality indicator.                                       *
  1045.  *                                                                      *
  1046.  ************************************************************************/
  1047. #ifdef LITTLE_ENDIAN
  1048. typedef union pi_force_bad_check_bit_b_u {
  1049. bdrkreg_t pi_force_bad_check_bit_b_regval;
  1050. struct  {
  1051. bdrkreg_t fbcbb_bad_check_bit       :  8;
  1052. bdrkreg_t       fbcbb_rsvd                :     56;
  1053. } pi_force_bad_check_bit_b_fld_s;
  1054. } pi_force_bad_check_bit_b_u_t;
  1055. #else
  1056. typedef union pi_force_bad_check_bit_b_u {
  1057. bdrkreg_t pi_force_bad_check_bit_b_regval;
  1058. struct {
  1059. bdrkreg_t fbcbb_rsvd   : 56;
  1060. bdrkreg_t fbcbb_bad_check_bit   :  8;
  1061. } pi_force_bad_check_bit_b_fld_s;
  1062. } pi_force_bad_check_bit_b_u_t;
  1063. #endif
  1064. /************************************************************************
  1065.  *                                                                      *
  1066.  *  There is one of these registers for each CPU. When a counter is     *
  1067.  * enabled, it increments each time a DNACK reply is received. The      *
  1068.  * counter is cleared when any other reply is received. The register    *
  1069.  * is cleared when the CNT_EN bit is zero. If a DNACK reply is          *
  1070.  * received when the counter equals the value in the NACK_CMP           *
  1071.  * register, the counter is cleared, an error response is sent to the   *
  1072.  * CPU instead of a nack response, and the NACK_INT_A/B bit is set in   *
  1073.  * INT_PEND1.                                                           *
  1074.  *                                                                      *
  1075.  ************************************************************************/
  1076. #ifdef LITTLE_ENDIAN
  1077. typedef union pi_nack_cnt_a_u {
  1078. bdrkreg_t pi_nack_cnt_a_regval;
  1079. struct  {
  1080. bdrkreg_t nca_nack_cnt              : 20;
  1081.                 bdrkreg_t       nca_cnt_en                :      1;
  1082.                 bdrkreg_t       nca_rsvd                  :     43;
  1083. } pi_nack_cnt_a_fld_s;
  1084. } pi_nack_cnt_a_u_t;
  1085. #else
  1086. typedef union pi_nack_cnt_a_u {
  1087. bdrkreg_t pi_nack_cnt_a_regval;
  1088. struct {
  1089. bdrkreg_t nca_rsvd   : 43;
  1090. bdrkreg_t nca_cnt_en   :  1;
  1091. bdrkreg_t nca_nack_cnt   : 20;
  1092. } pi_nack_cnt_a_fld_s;
  1093. } pi_nack_cnt_a_u_t;
  1094. #endif
  1095. /************************************************************************
  1096.  *                                                                      *
  1097.  *  There is one of these registers for each CPU. When a counter is     *
  1098.  * enabled, it increments each time a DNACK reply is received. The      *
  1099.  * counter is cleared when any other reply is received. The register    *
  1100.  * is cleared when the CNT_EN bit is zero. If a DNACK reply is          *
  1101.  * received when the counter equals the value in the NACK_CMP           *
  1102.  * register, the counter is cleared, an error response is sent to the   *
  1103.  * CPU instead of a nack response, and the NACK_INT_A/B bit is set in   *
  1104.  * INT_PEND1.                                                           *
  1105.  *                                                                      *
  1106.  ************************************************************************/
  1107. #ifdef LITTLE_ENDIAN
  1108. typedef union pi_nack_cnt_b_u {
  1109. bdrkreg_t pi_nack_cnt_b_regval;
  1110. struct  {
  1111. bdrkreg_t ncb_nack_cnt              : 20;
  1112.                 bdrkreg_t       ncb_cnt_en                :      1;
  1113.                 bdrkreg_t       ncb_rsvd                  :     43;
  1114. } pi_nack_cnt_b_fld_s;
  1115. } pi_nack_cnt_b_u_t;
  1116. #else
  1117. typedef union pi_nack_cnt_b_u {
  1118. bdrkreg_t pi_nack_cnt_b_regval;
  1119. struct {
  1120. bdrkreg_t ncb_rsvd   : 43;
  1121. bdrkreg_t ncb_cnt_en   :  1;
  1122. bdrkreg_t ncb_nack_cnt   : 20;
  1123. } pi_nack_cnt_b_fld_s;
  1124. } pi_nack_cnt_b_u_t;
  1125. #endif
  1126. /************************************************************************
  1127.  *                                                                      *
  1128.  *  The setting of this register affects both CPUs on this PI.          *
  1129.  *                                                                      *
  1130.  ************************************************************************/
  1131. #ifdef LITTLE_ENDIAN
  1132. typedef union pi_nack_cmp_u {
  1133. bdrkreg_t pi_nack_cmp_regval;
  1134. struct  {
  1135. bdrkreg_t nc_nack_cmp               : 20;
  1136. bdrkreg_t       nc_rsvd                   :     44;
  1137. } pi_nack_cmp_fld_s;
  1138. } pi_nack_cmp_u_t;
  1139. #else
  1140. typedef union pi_nack_cmp_u {
  1141. bdrkreg_t pi_nack_cmp_regval;
  1142. struct {
  1143. bdrkreg_t nc_rsvd   : 44;
  1144. bdrkreg_t nc_nack_cmp   : 20;
  1145. } pi_nack_cmp_fld_s;
  1146. } pi_nack_cmp_u_t;
  1147. #endif
  1148. /************************************************************************
  1149.  *                                                                      *
  1150.  *  This register controls which errors are spooled. When a bit in      *
  1151.  * this register is set, the corresponding error is spooled. The        *
  1152.  * setting of this register affects both CPUs on this PI.               *
  1153.  *                                                                      *
  1154.  ************************************************************************/
  1155. #ifdef LITTLE_ENDIAN
  1156. typedef union pi_spool_mask_u {
  1157. bdrkreg_t pi_spool_mask_regval;
  1158. struct  {
  1159. bdrkreg_t sm_access_err             :  1;
  1160.                 bdrkreg_t       sm_uncached_err           :      1;
  1161.                 bdrkreg_t       sm_dir_err                :      1;
  1162.                 bdrkreg_t       sm_timeout_err            :      1;
  1163.                 bdrkreg_t       sm_poison_err             :      1;
  1164.                 bdrkreg_t       sm_nack_oflow_err         :      1;
  1165.                 bdrkreg_t       sm_rsvd                   :     58;
  1166. } pi_spool_mask_fld_s;
  1167. } pi_spool_mask_u_t;
  1168. #else
  1169. typedef union pi_spool_mask_u {
  1170. bdrkreg_t pi_spool_mask_regval;
  1171. struct {
  1172. bdrkreg_t sm_rsvd   : 58;
  1173. bdrkreg_t sm_nack_oflow_err   :  1;
  1174. bdrkreg_t sm_poison_err   :  1;
  1175. bdrkreg_t sm_timeout_err   :  1;
  1176. bdrkreg_t sm_dir_err   :  1;
  1177. bdrkreg_t sm_uncached_err   :  1;
  1178. bdrkreg_t sm_access_err   :  1;
  1179. } pi_spool_mask_fld_s;
  1180. } pi_spool_mask_u_t;
  1181. #endif
  1182. /************************************************************************
  1183.  *                                                                      *
  1184.  *  This register is not cleared at reset. When the VALID bit is        *
  1185.  * zero, this register (along with SPURIOUS_HDR_1) will capture the     *
  1186.  * header of an incoming spurious message received from the XBar. A     *
  1187.  * spurious message is a message that does not match up with any of     *
  1188.  * the CRB entries. This is a read/write register, so it is cleared     *
  1189.  * by writing of all zeros.                                             *
  1190.  *                                                                      *
  1191.  ************************************************************************/
  1192. #ifdef LITTLE_ENDIAN
  1193. typedef union pi_spurious_hdr_0_u {
  1194. bdrkreg_t pi_spurious_hdr_0_regval;
  1195. struct  {
  1196. bdrkreg_t sh0_prev_valid_b          :  1;
  1197.                 bdrkreg_t       sh0_prev_valid_a          :      1;
  1198.                 bdrkreg_t       sh0_rsvd                  :      4;
  1199.                 bdrkreg_t       sh0_supplemental          :     11;
  1200.                 bdrkreg_t       sh0_cmd                   :      8;
  1201.                 bdrkreg_t       sh0_addr                  :     37;
  1202.                 bdrkreg_t       sh0_tail                  :      1;
  1203.                 bdrkreg_t       sh0_valid                 :      1;
  1204. } pi_spurious_hdr_0_fld_s;
  1205. } pi_spurious_hdr_0_u_t;
  1206. #else
  1207. typedef union pi_spurious_hdr_0_u {
  1208. bdrkreg_t pi_spurious_hdr_0_regval;
  1209. struct {
  1210. bdrkreg_t sh0_valid   :  1;
  1211. bdrkreg_t sh0_tail   :  1;
  1212. bdrkreg_t sh0_addr   : 37;
  1213. bdrkreg_t sh0_cmd   :  8;
  1214. bdrkreg_t sh0_supplemental   : 11;
  1215. bdrkreg_t sh0_rsvd   :  4;
  1216. bdrkreg_t sh0_prev_valid_a   :  1;
  1217. bdrkreg_t sh0_prev_valid_b   :  1;
  1218. } pi_spurious_hdr_0_fld_s;
  1219. } pi_spurious_hdr_0_u_t;
  1220. #endif
  1221. /************************************************************************
  1222.  *                                                                      *
  1223.  *  This register is not cleared at reset. When the VALID bit in        *
  1224.  * SPURIOUS_HDR_0 is zero, this register (along with SPURIOUS_HDR_0)    *
  1225.  * will capture the header of an incoming spurious message received     *
  1226.  * from the XBar. A spurious message is a message that does not match   *
  1227.  * up with any of the CRB entries. This is a read/write register, so    *
  1228.  * it is cleared by writing of all zeros.                               *
  1229.  *                                                                      *
  1230.  ************************************************************************/
  1231. #ifdef LITTLE_ENDIAN
  1232. typedef union pi_spurious_hdr_1_u {
  1233. bdrkreg_t pi_spurious_hdr_1_regval;
  1234. struct  {
  1235. bdrkreg_t sh1_rsvd                  : 53;
  1236. bdrkreg_t       sh1_source                :     11;
  1237. } pi_spurious_hdr_1_fld_s;
  1238. } pi_spurious_hdr_1_u_t;
  1239. #else
  1240. typedef union pi_spurious_hdr_1_u {
  1241. bdrkreg_t pi_spurious_hdr_1_regval;
  1242. struct {
  1243. bdrkreg_t sh1_source   : 11;
  1244. bdrkreg_t sh1_rsvd   : 53;
  1245. } pi_spurious_hdr_1_fld_s;
  1246. } pi_spurious_hdr_1_u_t;
  1247. #endif
  1248. /************************************************************************
  1249.  *                                                                      *
  1250.  * Description:  This register controls the injection of errors in      *
  1251.  * outbound SysAD transfers. When a write sets a bit in this            *
  1252.  * register, the PI logic is "armed" to inject that error. At the       *
  1253.  * first transfer of the specified type, the error is injected and      *
  1254.  * the bit in this register is cleared. Writing to this register does   *
  1255.  * not cause a transaction to occur. A bit in this register will        *
  1256.  * remain set until a transaction of the specified type occurs as a     *
  1257.  * result of normal system activity. This register can be polled to     *
  1258.  * determine if an error has been injected or is still "armed".         *
  1259.  * This register does not control injection of data quality bad         *
  1260.  * indicator on a data cycle. This type of error can be created by      *
  1261.  * reading from a memory location that has an uncorrectable ECC         *
  1262.  * error.                                                               *
  1263.  *                                                                      *
  1264.  ************************************************************************/
  1265. #ifdef LITTLE_ENDIAN
  1266. typedef union pi_err_inject_u {
  1267. bdrkreg_t pi_err_inject_regval;
  1268. struct  {
  1269. bdrkreg_t ei_cmd_syscmd_par_a       :  1;
  1270.                 bdrkreg_t       ei_data_syscmd_par_a      :      1;
  1271.                 bdrkreg_t       ei_cmd_sysad_corecc_a     :      1;
  1272.                 bdrkreg_t       ei_data_sysad_corecc_a    :      1;
  1273.                 bdrkreg_t       ei_cmd_sysad_uncecc_a     :      1;
  1274.                 bdrkreg_t       ei_data_sysad_uncecc_a    :      1;
  1275.                 bdrkreg_t       ei_sysresp_par_a          :      1;
  1276.                 bdrkreg_t       ei_reserved_1             :     25;
  1277.                 bdrkreg_t       ei_cmd_syscmd_par_b       :      1;
  1278.                 bdrkreg_t       ei_data_syscmd_par_b      :      1;
  1279.                 bdrkreg_t       ei_cmd_sysad_corecc_b     :      1;
  1280.                 bdrkreg_t       ei_data_sysad_corecc_b    :      1;
  1281.                 bdrkreg_t       ei_cmd_sysad_uncecc_b     :      1;
  1282.                 bdrkreg_t       ei_data_sysad_uncecc_b    :      1;
  1283.                 bdrkreg_t       ei_sysresp_par_b          :      1;
  1284.                 bdrkreg_t       ei_reserved               :     25;
  1285. } pi_err_inject_fld_s;
  1286. } pi_err_inject_u_t;
  1287. #else
  1288. typedef union pi_err_inject_u {
  1289. bdrkreg_t pi_err_inject_regval;
  1290. struct {
  1291. bdrkreg_t ei_reserved   : 25;
  1292. bdrkreg_t ei_sysresp_par_b   :  1;
  1293. bdrkreg_t ei_data_sysad_uncecc_b   :  1;
  1294. bdrkreg_t ei_cmd_sysad_uncecc_b   :  1;
  1295. bdrkreg_t ei_data_sysad_corecc_b   :  1;
  1296. bdrkreg_t ei_cmd_sysad_corecc_b   :  1;
  1297. bdrkreg_t ei_data_syscmd_par_b   :  1;
  1298. bdrkreg_t ei_cmd_syscmd_par_b   :  1;
  1299. bdrkreg_t ei_reserved_1   : 25;
  1300. bdrkreg_t ei_sysresp_par_a   :  1;
  1301. bdrkreg_t ei_data_sysad_uncecc_a   :  1;
  1302. bdrkreg_t ei_cmd_sysad_uncecc_a   :  1;
  1303. bdrkreg_t ei_data_sysad_corecc_a   :  1;
  1304. bdrkreg_t ei_cmd_sysad_corecc_a   :  1;
  1305. bdrkreg_t ei_data_syscmd_par_a   :  1;
  1306. bdrkreg_t ei_cmd_syscmd_par_a   :  1;
  1307. } pi_err_inject_fld_s;
  1308. } pi_err_inject_u_t;
  1309. #endif
  1310. /************************************************************************
  1311.  *                                                                      *
  1312.  *  This Read/Write location determines at what point the TRex+ is      *
  1313.  * stopped from issuing requests, based on the number of entries in     *
  1314.  * the incoming reply FIFO. When the number of entries in the Reply     *
  1315.  * FIFO is greater than the value of this register, the PI will         *
  1316.  * deassert both SysWrRdy and SysRdRdy to both processors. The Reply    *
  1317.  * FIFO has a depth of 0x3F entries, so setting this register to 0x3F   *
  1318.  * effectively disables this feature, allowing requests to be issued    *
  1319.  * always. Setting this register to 0x00 effectively lowers the         *
  1320.  * TRex+'s priority below the reply FIFO, disabling TRex+ requests      *
  1321.  * any time there is an entry waiting in the incoming FIFO.This         *
  1322.  * register is in its own 64KB page so that it can be mapped to user    *
  1323.  * space.                                                               *
  1324.  *                                                                      *
  1325.  ************************************************************************/
  1326. #ifdef LITTLE_ENDIAN
  1327. typedef union pi_reply_level_u {
  1328. bdrkreg_t pi_reply_level_regval;
  1329. struct  {
  1330. bdrkreg_t rl_reply_level            :  6;
  1331. bdrkreg_t rl_rsvd   : 58;
  1332. } pi_reply_level_fld_s;
  1333. } pi_reply_level_u_t;
  1334. #else
  1335. typedef union pi_reply_level_u {
  1336. bdrkreg_t pi_reply_level_regval;
  1337. struct {
  1338. bdrkreg_t rl_rsvd   : 58;
  1339. bdrkreg_t rl_reply_level   :  6;
  1340. } pi_reply_level_fld_s;
  1341. } pi_reply_level_u_t;
  1342. #endif
  1343. /************************************************************************
  1344.  *                                                                      *
  1345.  *  This register is used to change the graphics credit counter         *
  1346.  * operation from "Doubleword" mode to "Transaction" mode. This         *
  1347.  * register is in its own 64KB page so that it can be mapped to user    *
  1348.  * space.                                                               *
  1349.  *                                                                      *
  1350.  ************************************************************************/
  1351. #ifdef LITTLE_ENDIAN
  1352. typedef union pi_gfx_credit_mode_u {
  1353. bdrkreg_t pi_gfx_credit_mode_regval;
  1354. struct  {
  1355. bdrkreg_t gcm_trans_mode            :  1;
  1356. bdrkreg_t       gcm_rsvd                  :     63;
  1357. } pi_gfx_credit_mode_fld_s;
  1358. } pi_gfx_credit_mode_u_t;
  1359. #else
  1360. typedef union pi_gfx_credit_mode_u {
  1361. bdrkreg_t pi_gfx_credit_mode_regval;
  1362. struct {
  1363. bdrkreg_t gcm_rsvd   : 63;
  1364. bdrkreg_t gcm_trans_mode   :  1;
  1365. } pi_gfx_credit_mode_fld_s;
  1366. } pi_gfx_credit_mode_u_t;
  1367. #endif
  1368. /************************************************************************
  1369.  *                                                                      *
  1370.  *  This location contains a 55-bit read/write counter that wraps to    *
  1371.  * zero when the maximum value is reached. This counter is              *
  1372.  * incremented at each rising edge of the global clock (GCLK). This     *
  1373.  * register is in its own 64KB page so that it can be mapped to user    *
  1374.  * space.                                                               *
  1375.  *                                                                      *
  1376.  ************************************************************************/
  1377. #ifdef LITTLE_ENDIAN
  1378. typedef union pi_rt_counter_u {
  1379. bdrkreg_t pi_rt_counter_regval;
  1380. struct  {
  1381. bdrkreg_t rc_count                  : 55;
  1382. bdrkreg_t       rc_rsvd                   :      9;
  1383. } pi_rt_counter_fld_s;
  1384. } pi_rt_counter_u_t;
  1385. #else
  1386. typedef union pi_rt_counter_u {
  1387. bdrkreg_t pi_rt_counter_regval;
  1388. struct {
  1389. bdrkreg_t rc_rsvd   :  9;
  1390. bdrkreg_t rc_count   : 55;
  1391. } pi_rt_counter_fld_s;
  1392. } pi_rt_counter_u_t;
  1393. #endif
  1394. /************************************************************************
  1395.  *                                                                      *
  1396.  *  This register controls the performance counters for one CPU.        *
  1397.  * There are two counters for each CPU. Each counter can be             *
  1398.  * configured to count a variety of events. The performance counter     *
  1399.  * registers for each processor are in their own 64KB page so that      *
  1400.  * they can be mapped to user space.                                    *
  1401.  *                                                                      *
  1402.  ************************************************************************/
  1403. #ifdef LITTLE_ENDIAN
  1404. typedef union pi_perf_cntl_a_u {
  1405. bdrkreg_t pi_perf_cntl_a_regval;
  1406. struct  {
  1407. bdrkreg_t pca_cntr_0_select         : 28;
  1408.                 bdrkreg_t       pca_cntr_0_mode           :      3;
  1409.                 bdrkreg_t       pca_cntr_0_enable         :      1;
  1410.                 bdrkreg_t       pca_cntr_1_select         :     28;
  1411.                 bdrkreg_t       pca_cntr_1_mode           :      3;
  1412.                 bdrkreg_t       pca_cntr_1_enable         :      1;
  1413. } pi_perf_cntl_a_fld_s;
  1414. } pi_perf_cntl_a_u_t;
  1415. #else
  1416. typedef union pi_perf_cntl_a_u {
  1417. bdrkreg_t pi_perf_cntl_a_regval;
  1418. struct {
  1419. bdrkreg_t pca_cntr_1_enable   :  1;
  1420. bdrkreg_t pca_cntr_1_mode   :  3;
  1421. bdrkreg_t pca_cntr_1_select   : 28;
  1422. bdrkreg_t pca_cntr_0_enable   :  1;
  1423. bdrkreg_t pca_cntr_0_mode   :  3;
  1424. bdrkreg_t pca_cntr_0_select   : 28;
  1425. } pi_perf_cntl_a_fld_s;
  1426. } pi_perf_cntl_a_u_t;
  1427. #endif
  1428. /************************************************************************
  1429.  *                                                                      *
  1430.  *  This register accesses the performance counter 0 for each CPU.      *
  1431.  * Each performance counter is 40-bits wide. On overflow, It wraps to   *
  1432.  * zero, sets the overflow bit in this register, and sets the           *
  1433.  * PERF_CNTR_OFLOW bit in the INT_PEND1 register.                       *
  1434.  *                                                                      *
  1435.  ************************************************************************/
  1436. #ifdef LITTLE_ENDIAN
  1437. typedef union pi_perf_cntr0_a_u {
  1438. bdrkreg_t pi_perf_cntr0_a_regval;
  1439. struct  {
  1440. bdrkreg_t pca_count_value           : 40;
  1441.                 bdrkreg_t       pca_overflow              :      1;
  1442.                 bdrkreg_t       pca_rsvd                  :     23;
  1443. } pi_perf_cntr0_a_fld_s;
  1444. } pi_perf_cntr0_a_u_t;
  1445. #else
  1446. typedef union pi_perf_cntr0_a_u {
  1447. bdrkreg_t pi_perf_cntr0_a_regval;
  1448. struct {
  1449. bdrkreg_t pca_rsvd   : 23;
  1450. bdrkreg_t pca_overflow   :  1;
  1451. bdrkreg_t pca_count_value   : 40;
  1452. } pi_perf_cntr0_a_fld_s;
  1453. } pi_perf_cntr0_a_u_t;
  1454. #endif
  1455. /************************************************************************
  1456.  *                                                                      *
  1457.  *  This register accesses the performance counter 1for each CPU.       *
  1458.  * Each performance counter is 40-bits wide. On overflow, It wraps to   *
  1459.  * zero, sets the overflow bit in this register, and sets the           *
  1460.  * PERF_CNTR_OFLOW bit in the INT_PEND1 register.                       *
  1461.  *                                                                      *
  1462.  ************************************************************************/
  1463. #ifdef LITTLE_ENDIAN
  1464. typedef union pi_perf_cntr1_a_u {
  1465. bdrkreg_t pi_perf_cntr1_a_regval;
  1466. struct  {
  1467. bdrkreg_t pca_count_value           : 40;
  1468.                 bdrkreg_t       pca_overflow              :      1;
  1469.                 bdrkreg_t       pca_rsvd                  :     23;
  1470. } pi_perf_cntr1_a_fld_s;
  1471. } pi_perf_cntr1_a_u_t;
  1472. #else
  1473. typedef union pi_perf_cntr1_a_u {
  1474. bdrkreg_t pi_perf_cntr1_a_regval;
  1475. struct {
  1476. bdrkreg_t pca_rsvd   : 23;
  1477. bdrkreg_t pca_overflow   :  1;
  1478. bdrkreg_t pca_count_value   : 40;
  1479. } pi_perf_cntr1_a_fld_s;
  1480. } pi_perf_cntr1_a_u_t;
  1481. #endif
  1482. /************************************************************************
  1483.  *                                                                      *
  1484.  *  This register controls the performance counters for one CPU.        *
  1485.  * There are two counters for each CPU. Each counter can be             *
  1486.  * configured to count a variety of events. The performance counter     *
  1487.  * registers for each processor are in their own 64KB page so that      *
  1488.  * they can be mapped to user space.                                    *
  1489.  *                                                                      *
  1490.  ************************************************************************/
  1491. #ifdef LITTLE_ENDIAN
  1492. typedef union pi_perf_cntl_b_u {
  1493. bdrkreg_t pi_perf_cntl_b_regval;
  1494. struct  {
  1495. bdrkreg_t pcb_cntr_0_select         : 28;
  1496.                 bdrkreg_t       pcb_cntr_0_mode           :      3;
  1497.                 bdrkreg_t       pcb_cntr_0_enable         :      1;
  1498.                 bdrkreg_t       pcb_cntr_1_select         :     28;
  1499.                 bdrkreg_t       pcb_cntr_1_mode           :      3;
  1500.                 bdrkreg_t       pcb_cntr_1_enable         :      1;
  1501. } pi_perf_cntl_b_fld_s;
  1502. } pi_perf_cntl_b_u_t;
  1503. #else
  1504. typedef union pi_perf_cntl_b_u {
  1505. bdrkreg_t pi_perf_cntl_b_regval;
  1506. struct {
  1507. bdrkreg_t pcb_cntr_1_enable   :  1;
  1508. bdrkreg_t pcb_cntr_1_mode   :  3;
  1509. bdrkreg_t pcb_cntr_1_select   : 28;
  1510. bdrkreg_t pcb_cntr_0_enable   :  1;
  1511. bdrkreg_t pcb_cntr_0_mode   :  3;
  1512. bdrkreg_t pcb_cntr_0_select   : 28;
  1513. } pi_perf_cntl_b_fld_s;
  1514. } pi_perf_cntl_b_u_t;
  1515. #endif
  1516. /************************************************************************
  1517.  *                                                                      *
  1518.  *  This register accesses the performance counter 0 for each CPU.      *
  1519.  * Each performance counter is 40-bits wide. On overflow, It wraps to   *
  1520.  * zero, sets the overflow bit in this register, and sets the           *
  1521.  * PERF_CNTR_OFLOW bit in the INT_PEND1 register.                       *
  1522.  *                                                                      *
  1523.  ************************************************************************/
  1524. #ifdef LITTLE_ENDIAN
  1525. typedef union pi_perf_cntr0_b_u {
  1526. bdrkreg_t pi_perf_cntr0_b_regval;
  1527. struct  {
  1528. bdrkreg_t pcb_count_value           : 40;
  1529.                 bdrkreg_t       pcb_overflow              :      1;
  1530.                 bdrkreg_t       pcb_rsvd                  :     23;
  1531. } pi_perf_cntr0_b_fld_s;
  1532. } pi_perf_cntr0_b_u_t;
  1533. #else
  1534. typedef union pi_perf_cntr0_b_u {
  1535. bdrkreg_t pi_perf_cntr0_b_regval;
  1536. struct {
  1537. bdrkreg_t pcb_rsvd   : 23;
  1538. bdrkreg_t pcb_overflow   :  1;
  1539. bdrkreg_t pcb_count_value   : 40;
  1540. } pi_perf_cntr0_b_fld_s;
  1541. } pi_perf_cntr0_b_u_t;
  1542. #endif
  1543. /************************************************************************
  1544.  *                                                                      *
  1545.  *  This register accesses the performance counter 1for each CPU.       *
  1546.  * Each performance counter is 40-bits wide. On overflow, It wraps to   *
  1547.  * zero, sets the overflow bit in this register, and sets the           *
  1548.  * PERF_CNTR_OFLOW bit in the INT_PEND1 register.                       *
  1549.  *                                                                      *
  1550.  ************************************************************************/
  1551. #ifdef LITTLE_ENDIAN
  1552. typedef union pi_perf_cntr1_b_u {
  1553. bdrkreg_t pi_perf_cntr1_b_regval;
  1554. struct  {
  1555. bdrkreg_t pcb_count_value           : 40;
  1556.                 bdrkreg_t       pcb_overflow              :      1;
  1557.                 bdrkreg_t       pcb_rsvd                  :     23;
  1558. } pi_perf_cntr1_b_fld_s;
  1559. } pi_perf_cntr1_b_u_t;
  1560. #else
  1561. typedef union pi_perf_cntr1_b_u {
  1562. bdrkreg_t pi_perf_cntr1_b_regval;
  1563. struct {
  1564. bdrkreg_t pcb_rsvd   : 23;
  1565. bdrkreg_t pcb_overflow   :  1;
  1566. bdrkreg_t pcb_count_value   : 40;
  1567. } pi_perf_cntr1_b_fld_s;
  1568. } pi_perf_cntr1_b_u_t;
  1569. #endif
  1570. #endif /* __ASSEMBLY__ */
  1571. /************************************************************************
  1572.  *                                                                      *
  1573.  *               MAKE ALL ADDITIONS AFTER THIS LINE                     *
  1574.  *                                                                      *
  1575.  ************************************************************************/
  1576. #define PI_GFX_OFFSET (PI_GFX_PAGE_B - PI_GFX_PAGE_A)
  1577. #define PI_GFX_PAGE_ENABLE 0x0000010000000000LL
  1578. #endif /* _ASM_IA64_SN_SN1_HUBPI_H */