hubpi_next.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:12k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id$
  2.  *
  3.  * This file is subject to the terms and conditions of the GNU General Public
  4.  * License.  See the file "COPYING" in the main directory of this archive
  5.  * for more details.
  6.  *
  7.  * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc.
  8.  * Copyright (C) 2000 by Colin Ngam
  9.  */
  10. #ifndef _ASM_SN_SN1_HUBPI_NEXT_H
  11. #define _ASM_SN_SN1_HUBPI_NEXT_H
  12. /* define for remote PI_1 space. It is always half of a node_addressspace
  13.  * from PI_0. The normal REMOTE_HUB space for PI registers access
  14.  * the PI_0 space, unless they are qualified by PI_1.
  15.  */
  16. #define PI_0(x) (x)
  17. #define PI_1(x) ((x) + 0x200000)
  18. #define PIREG(x,sn) ((sn) ? PI_1(x) : PI_0(x))
  19. #define PI_MIN_STACK_SIZE 4096  /* For figuring out the size to set */
  20. #define PI_STACK_SIZE_SHFT      12      /* 4k */
  21. #define PI_STACKADDR_OFFSET     (PI_ERR_STACK_ADDR_B - PI_ERR_STACK_ADDR_A)
  22. #define PI_ERRSTAT_OFFSET       (PI_ERR_STATUS0_B - PI_ERR_STATUS0_A)
  23. #define PI_RDCLR_OFFSET         (PI_ERR_STATUS0_A_RCLR - PI_ERR_STATUS0_A)
  24. /* these macros are correct, but fix their users to understand two PIs
  25.    and 4 CPUs (slices) per bedrock */
  26. #define PI_INT_MASK_OFFSET      (PI_INT_MASK0_B - PI_INT_MASK0_A)
  27. #define PI_INT_SET_OFFSET       (PI_CC_PEND_CLR_B - PI_CC_PEND_CLR_A)
  28. #define PI_NMI_OFFSET (PI_NMI_B - PI_NMI_A)
  29. #define ERR_STACK_SIZE_BYTES(_sz) 
  30.        ((_sz) ? (PI_MIN_STACK_SIZE << ((_sz) - 1)) : 0)
  31. #define PI_CRB_STS_P (1 << 9)  /* "P" (partial word read/write) bit */
  32. #define PI_CRB_STS_V (1 << 8) /* "V" (valid) bit */
  33. #define PI_CRB_STS_R (1 << 7) /* "R" (response data sent to CPU) */
  34. #define PI_CRB_STS_A (1 << 6) /* "A" (data ack. received) bit */
  35. #define PI_CRB_STS_W (1 << 5) /* "W" (waiting for write compl.) */
  36. #define PI_CRB_STS_H (1 << 4) /* "H" (gathering invalidates) bit */
  37. #define PI_CRB_STS_I (1 << 3) /* "I" (targ. inbound invalidate) */
  38. #define PI_CRB_STS_T (1 << 2) /* "T" (targ. inbound intervention) */
  39. #define PI_CRB_STS_E (0x3) /* "E" (coherent read type) */
  40. /* When the "P" bit is set in the sk_crb_sts field of an error stack
  41.  * entry, the "R," "A," "H," and "I" bits are actually bits 6..3 of
  42.  * the address.  This macro extracts those address bits and shifts
  43.  * them to their proper positions, ready to be ORed in to the rest of
  44.  * the address (which is calculated as sk_addr << 7).
  45.  */
  46. #define PI_CRB_STS_ADDR_BITS(sts) 
  47.     ((sts) & (PI_CRB_STS_I | PI_CRB_STS_H) | 
  48.      ((sts) & (PI_CRB_STS_A | PI_CRB_STS_R)) >> 1)
  49. #ifdef _LANGUAGE_C
  50. /*
  51.  * format of error stack and error status registers.
  52.  */
  53. #ifdef LITTLE_ENDIAN
  54. struct err_stack_format {
  55.         uint64_t      sk_err_type:  3,   /* error type        */
  56.                         sk_suppl   :  3,   /* lowest 3 bit of supplemental */
  57.                         sk_t5_req  :  3,   /* RRB T5 request number */
  58.                         sk_crb_num :  3,   /* WRB (0 to 7) or RRB (0 to 4) */
  59.                         sk_rw_rb   :  1,   /* RRB == 0, WRB == 1 */
  60.                         sk_crb_sts : 10,   /* status from RRB or WRB */
  61.                         sk_cmd     :  8,   /* message command */
  62. sk_addr    : 33;   /* address */
  63. };
  64. #else
  65. struct err_stack_format {
  66. uint64_t sk_addr    : 33,   /* address */
  67. sk_cmd    :  8,   /* message command */
  68. sk_crb_sts : 10,   /* status from RRB or WRB */
  69. sk_rw_rb   :  1,   /* RRB == 0, WRB == 1 */
  70. sk_crb_num :  3,   /* WRB (0 to 7) or RRB (0 to 4) */
  71. sk_t5_req  :  3,   /* RRB T5 request number */
  72. sk_suppl   :  3,   /* lowest 3 bit of supplemental */
  73. sk_err_type:  3;   /* error type */
  74. };
  75. #endif
  76. typedef union pi_err_stack {
  77.         uint64_t      pi_stk_word;
  78.         struct  err_stack_format pi_stk_fmt;
  79. } pi_err_stack_t;
  80. /* Simplified version of pi_err_status0_a_u_t (PI_ERR_STATUS0_A) */
  81. #ifdef LITTLE_ENDIAN
  82. struct err_status0_format {
  83. uint64_t s0_err_type :  3, /* Encoded error cause */
  84.                         s0_proc_req_num :  3,   /* Request number for RRB only */
  85.                         s0_supplemental : 11,   /* ncoming message sup field */
  86.                         s0_cmd          :  8,   /* Incoming message command */
  87.                         s0_addr         : 37,   /* Address */
  88.                         s0_over_run     :  1,   /* Subsequent errors spooled */
  89. s0_valid        :  1;   /* error is valid */
  90. };
  91. #else
  92. struct err_status0_format {
  93. uint64_t s0_valid :  1, /* error is valid */
  94. s0_over_run :  1, /* Subsequent errors spooled */
  95. s0_addr : 37, /* Address */
  96. s0_cmd :  8, /* Incoming message command */
  97. s0_supplemental : 11, /* ncoming message sup field */
  98. s0_proc_req_num :  3, /* Request number for RRB only */
  99. s0_err_type :  3; /* Encoded error cause */
  100. };
  101. #endif
  102. typedef union pi_err_stat0 {
  103. uint64_t pi_stat0_word;
  104.         struct err_status0_format pi_stat0_fmt;
  105. } pi_err_stat0_t;
  106. /* Simplified version of pi_err_status1_a_u_t (PI_ERR_STATUS1_A) */
  107. #ifdef LITTLE_ENDIAN
  108. struct err_status1_format {
  109.  uint64_t s1_spl_cnt : 21,   /* number spooled to memory */
  110.                         s1_to_cnt  :  8,   /* crb timeout counter */
  111.                         s1_inval_cnt:10,   /* signed invalidate counter RRB */
  112.                         s1_crb_num :  3,   /* WRB (0 to 7) or RRB (0 to 4) */
  113.                         s1_rw_rb   :  1,   /* RRB == 0, WRB == 1 */
  114.                         s1_crb_sts : 10,   /* status from RRB or WRB */
  115. s1_src     : 11;   /* message source */
  116. };
  117. #else
  118. struct err_status1_format {
  119. uint64_t s1_src    : 11,   /* message source */
  120. s1_crb_sts : 10,   /* status from RRB or WRB */
  121. s1_rw_rb   :  1,   /* RRB == 0, WRB == 1 */
  122. s1_crb_num :  3,   /* WRB (0 to 7) or RRB (0 to 4) */
  123. s1_inval_cnt:10,   /* signed invalidate counter RRB */
  124. s1_to_cnt  :  8,   /* crb timeout counter */
  125. s1_spl_cnt : 21;   /* number spooled to memory */
  126. };
  127. #endif
  128. typedef union pi_err_stat1 {
  129. uint64_t pi_stat1_word;
  130. struct err_status1_format pi_stat1_fmt;
  131. } pi_err_stat1_t;
  132. #endif
  133. /* Error stack types (sk_err_type) for reads: */
  134. #define PI_ERR_RD_AERR 0 /* Read Access Error */
  135. #define PI_ERR_RD_PRERR         1 /* Uncached Partitial Read */
  136. #define PI_ERR_RD_DERR          2 /* Directory Error */
  137. #define PI_ERR_RD_TERR          3 /* read timeout */
  138. #define PI_ERR_RD_PERR 4 /* Poison Access Violation */
  139. #define PI_ERR_RD_NACK 5 /* Excessive NACKs */
  140. #define PI_ERR_RD_RDE 6 /* Response Data Error */
  141. #define PI_ERR_RD_PLERR 7 /* Packet Length Error */
  142. /* Error stack types (sk_err_type) for writes: */
  143. #define PI_ERR_WR_WERR          0 /* Write Access Error */
  144. #define PI_ERR_WR_PWERR         1 /* Uncached Write Error */
  145. #define PI_ERR_WR_TERR          3 /* write timeout */
  146. #define PI_ERR_WR_RDE 6 /* Response Data Error */
  147. #define PI_ERR_WR_PLERR 7 /* Packet Length Error */
  148. /* For backwards compatibility */
  149. #define PI_RT_COUNT PI_RT_COUNTER    /* Real Time Counter      */
  150. #define PI_RT_EN_A PI_RT_INT_EN_A   /* RT int for CPU A enable         */
  151. #define PI_RT_EN_B PI_RT_INT_EN_B   /* RT int for CPU B enable         */
  152. #define PI_PROF_EN_A PI_PROF_INT_EN_A /* PROF int for CPU A enable       */
  153. #define PI_PROF_EN_B PI_PROF_INT_EN_B /* PROF int for CPU B enable       */
  154. #define PI_RT_PEND_A    PI_RT_INT_PEND_A /* RT interrupt pending      */
  155. #define PI_RT_PEND_B    PI_RT_INT_PEND_B /* RT interrupt pending      */
  156. #define PI_PROF_PEND_A  PI_PROF_INT_PEND_A /* Profiling interrupt pending   */
  157. #define PI_PROF_PEND_B  PI_PROF_INT_PEND_B /* Profiling interrupt pending   */
  158. /* Bits in PI_SYSAD_ERRCHK_EN */
  159. #define PI_SYSAD_ERRCHK_ECCGEN  0x01    /* Enable ECC generation            */
  160. #define PI_SYSAD_ERRCHK_QUALGEN 0x02    /* Enable data quality signal gen.  */
  161. #define PI_SYSAD_ERRCHK_SADP    0x04    /* Enable SysAD parity checking     */
  162. #define PI_SYSAD_ERRCHK_CMDP    0x08    /* Enable SysCmd parity checking    */
  163. #define PI_SYSAD_ERRCHK_STATE   0x10    /* Enable SysState parity checking  */
  164. #define PI_SYSAD_ERRCHK_QUAL    0x20    /* Enable data quality checking     */
  165. #define PI_SYSAD_CHECK_ALL      0x3f    /* Generate and check all signals.  */
  166. /* CALIAS values */
  167. #define PI_CALIAS_SIZE_0        0
  168. #define PI_CALIAS_SIZE_4K       1
  169. #define PI_CALIAS_SIZE_8K       2
  170. #define PI_CALIAS_SIZE_16K      3
  171. #define PI_CALIAS_SIZE_32K      4
  172. #define PI_CALIAS_SIZE_64K      5
  173. #define PI_CALIAS_SIZE_128K     6
  174. #define PI_CALIAS_SIZE_256K     7
  175. #define PI_CALIAS_SIZE_512K     8
  176. #define PI_CALIAS_SIZE_1M       9
  177. #define PI_CALIAS_SIZE_2M       10
  178. #define PI_CALIAS_SIZE_4M       11
  179. #define PI_CALIAS_SIZE_8M       12
  180. #define PI_CALIAS_SIZE_16M      13
  181. #define PI_CALIAS_SIZE_32M      14
  182. #define PI_CALIAS_SIZE_64M      15
  183. /* Fields in PI_ERR_STATUS0_[AB] */
  184. #define PI_ERR_ST0_VALID_MASK 0x8000000000000000
  185. #define PI_ERR_ST0_VALID_SHFT 63
  186. /* Fields in PI_SPURIOUS_HDR_0 */
  187. #define PI_SPURIOUS_HDR_VALID_MASK 0x8000000000000000
  188. #define PI_SPURIOUS_HDR_VALID_SHFT 63
  189. /* Fields in PI_NACK_CNT_A/B */
  190. #define PI_NACK_CNT_EN_SHFT 20
  191. #define PI_NACK_CNT_EN_MASK 0x100000
  192. #define PI_NACK_CNT_MASK 0x0fffff
  193. #define PI_NACK_CNT_MAX 0x0fffff
  194. /* Bits in PI_ERR_INT_PEND */
  195. #define PI_ERR_SPOOL_CMP_B 0x000000001 /* Spool end hit high water */
  196. #define PI_ERR_SPOOL_CMP_A 0x000000002
  197. #define PI_ERR_SPUR_MSG_B 0x000000004 /* Spurious message intr.   */
  198. #define PI_ERR_SPUR_MSG_A 0x000000008
  199. #define PI_ERR_WRB_TERR_B 0x000000010 /* WRB TERR     */
  200. #define PI_ERR_WRB_TERR_A 0x000000020
  201. #define PI_ERR_WRB_WERR_B 0x000000040 /* WRB WERR      */
  202. #define PI_ERR_WRB_WERR_A 0x000000080
  203. #define PI_ERR_SYSSTATE_B 0x000000100 /* SysState parity error    */
  204. #define PI_ERR_SYSSTATE_A 0x000000200
  205. #define PI_ERR_SYSAD_DATA_B 0x000000400 /* SysAD data parity error  */
  206. #define PI_ERR_SYSAD_DATA_A 0x000000800
  207. #define PI_ERR_SYSAD_ADDR_B 0x000001000 /* SysAD addr parity error  */
  208. #define PI_ERR_SYSAD_ADDR_A 0x000002000
  209. #define PI_ERR_SYSCMD_DATA_B 0x000004000 /* SysCmd data parity error */
  210. #define PI_ERR_SYSCMD_DATA_A 0x000008000
  211. #define PI_ERR_SYSCMD_ADDR_B 0x000010000 /* SysCmd addr parity error */
  212. #define PI_ERR_SYSCMD_ADDR_A 0x000020000
  213. #define PI_ERR_BAD_SPOOL_B 0x000040000 /* Error spooling to memory */
  214. #define PI_ERR_BAD_SPOOL_A 0x000080000
  215. #define PI_ERR_UNCAC_UNCORR_B 0x000100000 /* Uncached uncorrectable   */
  216. #define PI_ERR_UNCAC_UNCORR_A 0x000200000
  217. #define PI_ERR_SYSSTATE_TAG_B 0x000400000 /* SysState tag parity error */
  218. #define PI_ERR_SYSSTATE_TAG_A 0x000800000
  219. #define PI_ERR_MD_UNCORR 0x001000000 /* Must be cleared in MD    */
  220. #define PI_ERR_SYSAD_BAD_DATA_B 0x002000000 /* SysAD Data quality bad   */
  221. #define PI_ERR_SYSAD_BAD_DATA_A 0x004000000
  222. #define PI_ERR_UE_CACHED_B 0x008000000 /* UE during cached load    */
  223. #define PI_ERR_UE_CACHED_A 0x010000000
  224. #define PI_ERR_PKT_LEN_ERR_B 0x020000000 /* Xbar data too long/short */
  225. #define PI_ERR_PKT_LEN_ERR_A 0x040000000
  226. #define PI_ERR_IRB_ERR_B 0x080000000 /* Protocol error           */
  227. #define PI_ERR_IRB_ERR_A 0x100000000
  228. #define PI_ERR_IRB_TIMEOUT_B 0x200000000 /* IRB_B got a timeout      */
  229. #define PI_ERR_IRB_TIMEOUT_A 0x400000000
  230. #define PI_ERR_CLEAR_ALL_A 0x554aaaaaa
  231. #define PI_ERR_CLEAR_ALL_B 0x2aa555555
  232. /*
  233.  * The following three macros define all possible error int pends. 
  234.  */
  235. #define PI_FATAL_ERR_CPU_A (PI_ERR_IRB_TIMEOUT_A | 
  236.  PI_ERR_IRB_ERR_A | 
  237.  PI_ERR_PKT_LEN_ERR_A | 
  238.  PI_ERR_SYSSTATE_TAG_A  | 
  239.  PI_ERR_BAD_SPOOL_A  | 
  240.  PI_ERR_SYSCMD_ADDR_A  | 
  241.  PI_ERR_SYSCMD_DATA_A  | 
  242.  PI_ERR_SYSAD_ADDR_A  | 
  243.  PI_ERR_SYSAD_DATA_A | 
  244.  PI_ERR_SYSSTATE_A)
  245. #define PI_MISC_ERR_CPU_A (PI_ERR_UE_CACHED_A | 
  246.  PI_ERR_SYSAD_BAD_DATA_A| 
  247.  PI_ERR_UNCAC_UNCORR_A  | 
  248.  PI_ERR_WRB_WERR_A  | 
  249.  PI_ERR_WRB_TERR_A  | 
  250.  PI_ERR_SPUR_MSG_A  | 
  251.  PI_ERR_SPOOL_CMP_A)
  252. #define PI_FATAL_ERR_CPU_B (PI_ERR_IRB_TIMEOUT_B | 
  253.  PI_ERR_IRB_ERR_B | 
  254.  PI_ERR_PKT_LEN_ERR_B | 
  255.  PI_ERR_SYSSTATE_TAG_B  | 
  256.  PI_ERR_BAD_SPOOL_B  | 
  257.  PI_ERR_SYSCMD_ADDR_B  | 
  258.  PI_ERR_SYSCMD_DATA_B  | 
  259.  PI_ERR_SYSAD_ADDR_B  | 
  260.  PI_ERR_SYSAD_DATA_B | 
  261.  PI_ERR_SYSSTATE_B)
  262. #define PI_MISC_ERR_CPU_B (PI_ERR_UE_CACHED_B | 
  263.  PI_ERR_SYSAD_BAD_DATA_B| 
  264.  PI_ERR_UNCAC_UNCORR_B  | 
  265.  PI_ERR_WRB_WERR_B  | 
  266.  PI_ERR_WRB_TERR_B  | 
  267.  PI_ERR_SPUR_MSG_B  | 
  268.  PI_ERR_SPOOL_CMP_B)
  269. #define PI_ERR_GENERIC (PI_ERR_MD_UNCORR)
  270. /* Values for PI_MAX_CRB_TIMEOUT and PI_CRB_SFACTOR */
  271. #define PMCT_MAX 0xff
  272. #define PCS_MAX 0xffffff
  273. /* pi_err_status0_a_u_t address shift */
  274. #define ERR_STAT0_ADDR_SHFT     3
  275. /* PI error read/write bit (RRB == 0, WRB == 1) */
  276. /* pi_err_status1_a_u_t.pi_err_status1_a_fld_s.esa_wrb */
  277. #define PI_ERR_RRB 0
  278. #define PI_ERR_WRB 1
  279. /* Error stack address shift, for use with pi_stk_fmt.sk_addr */
  280. #define ERR_STK_ADDR_SHFT 3
  281. #endif /* _ASM_SN_SN1_HUBPI_NEXT_H */