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

Linux/Unix编程

开发平台:

Unix_Linux

  1. } ii_iprte2a_fld_s;
  2. } ii_iprte2a_u_t;
  3. /************************************************************************
  4.  *                                                                      *
  5.  *  There are 8 instances of this register. This register contains      *
  6.  * the information that the II has to remember once it has launched a   *
  7.  * PIO Read operation. The contents are used to form the correct        *
  8.  * Router Network packet and direct the Crosstalk reply to the          *
  9.  * appropriate processor.                                               *
  10.  *                                                                      *
  11.  ************************************************************************/
  12. typedef union ii_iprte3a_u {
  13. shubreg_t ii_iprte3a_regval;
  14. struct  {
  15. shubreg_t i_rsvd_1                  : 54;
  16. shubreg_t i_widget   :  4;
  17. shubreg_t i_to_cnt   :  5;
  18. shubreg_t i_vld   :  1;
  19. } ii_iprte3a_fld_s;
  20. } ii_iprte3a_u_t;
  21. /************************************************************************
  22.  *                                                                      *
  23.  *  There are 8 instances of this register. This register contains      *
  24.  * the information that the II has to remember once it has launched a   *
  25.  * PIO Read operation. The contents are used to form the correct        *
  26.  * Router Network packet and direct the Crosstalk reply to the          *
  27.  * appropriate processor.                                               *
  28.  *                                                                      *
  29.  ************************************************************************/
  30. typedef union ii_iprte4a_u {
  31. shubreg_t ii_iprte4a_regval;
  32. struct {
  33. shubreg_t i_rsvd_1   : 54;
  34. shubreg_t i_widget   :  4;
  35. shubreg_t i_to_cnt   :  5;
  36. shubreg_t i_vld   :  1;
  37. } ii_iprte4a_fld_s;
  38. } ii_iprte4a_u_t;
  39. /************************************************************************
  40.  *                                                                      *
  41.  *  There are 8 instances of this register. This register contains      *
  42.  * the information that the II has to remember once it has launched a   *
  43.  * PIO Read operation. The contents are used to form the correct        *
  44.  * Router Network packet and direct the Crosstalk reply to the          *
  45.  * appropriate processor.                                               *
  46.  *                                                                      *
  47.  ************************************************************************/
  48. typedef union ii_iprte5a_u {
  49. shubreg_t ii_iprte5a_regval;
  50. struct {
  51. shubreg_t i_rsvd_1   : 54;
  52. shubreg_t i_widget   :  4;
  53. shubreg_t i_to_cnt   :  5;
  54. shubreg_t i_vld   :  1;
  55. } ii_iprte5a_fld_s;
  56. } ii_iprte5a_u_t;
  57. /************************************************************************
  58.  *                                                                      *
  59.  *  There are 8 instances of this register. This register contains      *
  60.  * the information that the II has to remember once it has launched a   *
  61.  * PIO Read operation. The contents are used to form the correct        *
  62.  * Router Network packet and direct the Crosstalk reply to the          *
  63.  * appropriate processor.                                               *
  64.  *                                                                      *
  65.  ************************************************************************/
  66. typedef union ii_iprte6a_u {
  67. shubreg_t ii_iprte6a_regval;
  68. struct {
  69. shubreg_t i_rsvd_1   : 54;
  70. shubreg_t i_widget   :  4;
  71. shubreg_t i_to_cnt   :  5;
  72. shubreg_t i_vld   :  1;
  73. } ii_iprte6a_fld_s;
  74. } ii_iprte6a_u_t;
  75. /************************************************************************
  76.  *                                                                      *
  77.  *  There are 8 instances of this register. This register contains      *
  78.  * the information that the II has to remember once it has launched a   *
  79.  * PIO Read operation. The contents are used to form the correct        *
  80.  * Router Network packet and direct the Crosstalk reply to the          *
  81.  * appropriate processor.                                               *
  82.  *                                                                      *
  83.  ************************************************************************/
  84. typedef union ii_iprte7a_u {
  85.         shubreg_t       ii_iprte7a_regval;
  86.         struct  {
  87.                 shubreg_t       i_rsvd_1                  :     54;
  88.                 shubreg_t       i_widget                  :      4;
  89.                 shubreg_t       i_to_cnt                  :      5;
  90.                 shubreg_t       i_vld                     :      1;
  91.         } ii_iprtea7_fld_s;
  92. } ii_iprte7a_u_t;
  93. /************************************************************************
  94.  *                                                                      *
  95.  *  There are 8 instances of this register. This register contains      *
  96.  * the information that the II has to remember once it has launched a   *
  97.  * PIO Read operation. The contents are used to form the correct        *
  98.  * Router Network packet and direct the Crosstalk reply to the          *
  99.  * appropriate processor.                                               *
  100.  *                                                                      *
  101.  ************************************************************************/
  102. typedef union ii_iprte0b_u {
  103. shubreg_t ii_iprte0b_regval;
  104. struct  {
  105. shubreg_t i_rsvd_1                  :  3;
  106. shubreg_t i_address   : 47;
  107. shubreg_t i_init   :  3;
  108. shubreg_t       i_source                  :     11;
  109. } ii_iprte0b_fld_s;
  110. } ii_iprte0b_u_t;
  111. /************************************************************************
  112.  *                                                                      *
  113.  *  There are 8 instances of this register. This register contains      *
  114.  * the information that the II has to remember once it has launched a   *
  115.  * PIO Read operation. The contents are used to form the correct        *
  116.  * Router Network packet and direct the Crosstalk reply to the          *
  117.  * appropriate processor.                                               *
  118.  *                                                                      *
  119.  ************************************************************************/
  120. typedef union ii_iprte1b_u {
  121. shubreg_t ii_iprte1b_regval;
  122. struct  {
  123. shubreg_t i_rsvd_1                  :  3;
  124. shubreg_t i_address   : 47;
  125. shubreg_t i_init   :  3;
  126. shubreg_t       i_source                  :     11;
  127. } ii_iprte1b_fld_s;
  128. } ii_iprte1b_u_t;
  129. /************************************************************************
  130.  *                                                                      *
  131.  *  There are 8 instances of this register. This register contains      *
  132.  * the information that the II has to remember once it has launched a   *
  133.  * PIO Read operation. The contents are used to form the correct        *
  134.  * Router Network packet and direct the Crosstalk reply to the          *
  135.  * appropriate processor.                                               *
  136.  *                                                                      *
  137.  ************************************************************************/
  138. typedef union ii_iprte2b_u {
  139. shubreg_t ii_iprte2b_regval;
  140. struct  {
  141. shubreg_t i_rsvd_1                  :  3;
  142. shubreg_t i_address   : 47;
  143. shubreg_t i_init   :  3;
  144. shubreg_t       i_source                  :     11;
  145. } ii_iprte2b_fld_s;
  146. } ii_iprte2b_u_t;
  147. /************************************************************************
  148.  *                                                                      *
  149.  *  There are 8 instances of this register. This register contains      *
  150.  * the information that the II has to remember once it has launched a   *
  151.  * PIO Read operation. The contents are used to form the correct        *
  152.  * Router Network packet and direct the Crosstalk reply to the          *
  153.  * appropriate processor.                                               *
  154.  *                                                                      *
  155.  ************************************************************************/
  156. typedef union ii_iprte3b_u {
  157. shubreg_t ii_iprte3b_regval;
  158. struct  {
  159. shubreg_t i_rsvd_1                  :  3;
  160. shubreg_t i_address   : 47;
  161. shubreg_t i_init   :  3;
  162. shubreg_t       i_source                  :     11;
  163. } ii_iprte3b_fld_s;
  164. } ii_iprte3b_u_t;
  165. /************************************************************************
  166.  *                                                                      *
  167.  *  There are 8 instances of this register. This register contains      *
  168.  * the information that the II has to remember once it has launched a   *
  169.  * PIO Read operation. The contents are used to form the correct        *
  170.  * Router Network packet and direct the Crosstalk reply to the          *
  171.  * appropriate processor.                                               *
  172.  *                                                                      *
  173.  ************************************************************************/
  174. typedef union ii_iprte4b_u {
  175. shubreg_t ii_iprte4b_regval;
  176. struct {
  177. shubreg_t i_rsvd_1                  :  3;
  178. shubreg_t i_address   : 47;
  179. shubreg_t i_init   :  3;
  180. shubreg_t       i_source                  :     11;
  181. } ii_iprte4b_fld_s;
  182. } ii_iprte4b_u_t;
  183. /************************************************************************
  184.  *                                                                      *
  185.  *  There are 8 instances of this register. This register contains      *
  186.  * the information that the II has to remember once it has launched a   *
  187.  * PIO Read operation. The contents are used to form the correct        *
  188.  * Router Network packet and direct the Crosstalk reply to the          *
  189.  * appropriate processor.                                               *
  190.  *                                                                      *
  191.  ************************************************************************/
  192. typedef union ii_iprte5b_u {
  193. shubreg_t ii_iprte5b_regval;
  194. struct {
  195. shubreg_t i_rsvd_1                  :  3;
  196. shubreg_t i_address   : 47;
  197. shubreg_t i_init   :  3;
  198. shubreg_t       i_source                  :     11;
  199. } ii_iprte5b_fld_s;
  200. } ii_iprte5b_u_t;
  201. /************************************************************************
  202.  *                                                                      *
  203.  *  There are 8 instances of this register. This register contains      *
  204.  * the information that the II has to remember once it has launched a   *
  205.  * PIO Read operation. The contents are used to form the correct        *
  206.  * Router Network packet and direct the Crosstalk reply to the          *
  207.  * appropriate processor.                                               *
  208.  *                                                                      *
  209.  ************************************************************************/
  210. typedef union ii_iprte6b_u {
  211. shubreg_t ii_iprte6b_regval;
  212. struct {
  213. shubreg_t i_rsvd_1                  :  3;
  214. shubreg_t i_address   : 47;
  215. shubreg_t i_init   :  3;
  216. shubreg_t       i_source                  :     11;
  217. } ii_iprte6b_fld_s;
  218. } ii_iprte6b_u_t;
  219. /************************************************************************
  220.  *                                                                      *
  221.  *  There are 8 instances of this register. This register contains      *
  222.  * the information that the II has to remember once it has launched a   *
  223.  * PIO Read operation. The contents are used to form the correct        *
  224.  * Router Network packet and direct the Crosstalk reply to the          *
  225.  * appropriate processor.                                               *
  226.  *                                                                      *
  227.  ************************************************************************/
  228. typedef union ii_iprte7b_u {
  229.         shubreg_t       ii_iprte7b_regval;
  230.         struct  {
  231. shubreg_t i_rsvd_1                  :  3;
  232. shubreg_t i_address   : 47;
  233. shubreg_t i_init   :  3;
  234. shubreg_t       i_source                  :     11;
  235.         } ii_iprte7b_fld_s;
  236. } ii_iprte7b_u_t;
  237. /************************************************************************
  238.  *                                                                      *
  239.  * Description:  SHub II contains a feature which did not exist in      *
  240.  * the Hub which automatically cleans up after a Read Response          *
  241.  * timeout, including deallocation of the IPRTE and recovery of IBuf    *
  242.  * space. The inclusion of this register in SHub is for backward        *
  243.  * compatibility                                                        *
  244.  * A write to this register causes an entry from the table of           *
  245.  * outstanding PIO Read Requests to be freed and returned to the        *
  246.  * stack of free entries. This register is used in handling the         *
  247.  * timeout errors that result in a PIO Reply never returning from       *
  248.  * Crosstalk.                                                           *
  249.  * Note that this register does not affect the contents of the IPRTE    *
  250.  * registers. The Valid bits in those registers have to be              *
  251.  * specifically turned off by software.                                 *
  252.  *                                                                      *
  253.  ************************************************************************/
  254. typedef union ii_ipdr_u {
  255. shubreg_t ii_ipdr_regval;
  256. struct  {
  257. shubreg_t i_te                      :  3;
  258. shubreg_t i_rsvd_1   :  1;
  259. shubreg_t i_pnd   :  1;
  260. shubreg_t i_init_rpcnt   :  1;
  261. shubreg_t i_rsvd   : 58;
  262. } ii_ipdr_fld_s;
  263. } ii_ipdr_u_t;
  264. /************************************************************************
  265.  *                                                                      *
  266.  *  A write to this register causes a CRB entry to be returned to the   *
  267.  * queue of free CRBs. The entry should have previously been cleared    *
  268.  * (mark bit) via backdoor access to the pertinent CRB entry. This      *
  269.  * register is used in the last step of handling the errors that are    *
  270.  * captured and marked in CRB entries.  Briefly: 1) first error for     *
  271.  * DMA write from a particular device, and first error for a            *
  272.  * particular BTE stream, lead to a marked CRB entry, and processor     *
  273.  * interrupt, 2) software reads the error information captured in the   *
  274.  * CRB entry, and presumably takes some corrective action, 3)           *
  275.  * software clears the mark bit, and finally 4) software writes to      *
  276.  * the ICDR register to return the CRB entry to the list of free CRB    *
  277.  * entries.                                                             *
  278.  *                                                                      *
  279.  ************************************************************************/
  280. typedef union ii_icdr_u {
  281. shubreg_t ii_icdr_regval;
  282. struct  {
  283. shubreg_t i_crb_num                 :  4;
  284. shubreg_t i_pnd   :  1;
  285. shubreg_t       i_rsvd                    :     59;
  286. } ii_icdr_fld_s;
  287. } ii_icdr_u_t;
  288. /************************************************************************
  289.  *                                                                      *
  290.  *  This register provides debug access to two FIFOs inside of II.      *
  291.  * Both IOQ_MAX* fields of this register contain the instantaneous      *
  292.  * depth (in units of the number of available entries) of the           *
  293.  * associated IOQ FIFO.  A read of this register will return the        *
  294.  * number of free entries on each FIFO at the time of the read.  So     *
  295.  * when a FIFO is idle, the associated field contains the maximum       *
  296.  * depth of the FIFO.  This register is writable for debug reasons      *
  297.  * and is intended to be written with the maximum desired FIFO depth    *
  298.  * while the FIFO is idle. Software must assure that II is idle when    *
  299.  * this register is written. If there are any active entries in any     *
  300.  * of these FIFOs when this register is written, the results are        *
  301.  * undefined.                                                           *
  302.  *                                                                      *
  303.  ************************************************************************/
  304. typedef union ii_ifdr_u {
  305. shubreg_t ii_ifdr_regval;
  306. struct  {
  307. shubreg_t i_ioq_max_rq              :  7;
  308. shubreg_t i_set_ioq_rq   :  1;
  309. shubreg_t i_ioq_max_rp   :  7;
  310. shubreg_t i_set_ioq_rp   :  1;
  311. shubreg_t i_rsvd   : 48;
  312. } ii_ifdr_fld_s;
  313. } ii_ifdr_u_t;
  314. /************************************************************************
  315.  *                                                                      *
  316.  *  This register allows the II to become sluggish in removing          *
  317.  * messages from its inbound queue (IIQ). This will cause messages to   *
  318.  * back up in either virtual channel. Disabling the "molasses" mode     *
  319.  * subsequently allows the II to be tested under stress. In the         *
  320.  * sluggish ("Molasses") mode, the localized effects of congestion      *
  321.  * can be observed.                                                     *
  322.  *                                                                      *
  323.  ************************************************************************/
  324. typedef union ii_iiap_u {
  325.         shubreg_t       ii_iiap_regval;
  326.         struct  {
  327.                 shubreg_t       i_rq_mls                  :      6;
  328. shubreg_t i_rsvd_1   :  2;
  329. shubreg_t i_rp_mls   :  6;
  330. shubreg_t       i_rsvd                    :     50;
  331.         } ii_iiap_fld_s;
  332. } ii_iiap_u_t;
  333. /************************************************************************
  334.  *                                                                      *
  335.  *  This register allows several parameters of CRB operation to be      *
  336.  * set. Note that writing to this register can have catastrophic side   *
  337.  * effects, if the CRB is not quiescent, i.e. if the CRB is             *
  338.  * processing protocol messages when the write occurs.                  *
  339.  *                                                                      *
  340.  ************************************************************************/
  341. typedef union ii_icmr_u {
  342. shubreg_t ii_icmr_regval;
  343. struct  {
  344. shubreg_t i_sp_msg                  :  1;
  345. shubreg_t i_rd_hdr   :  1;
  346. shubreg_t i_rsvd_4   :  2;
  347. shubreg_t i_c_cnt   :  4;
  348. shubreg_t i_rsvd_3   :  4;
  349. shubreg_t i_clr_rqpd   :  1;
  350. shubreg_t i_clr_rppd   :  1;
  351. shubreg_t i_rsvd_2   :  2;
  352. shubreg_t i_fc_cnt   :  4;
  353. shubreg_t i_crb_vld   : 15;
  354. shubreg_t i_crb_mark   : 15;
  355. shubreg_t i_rsvd_1   :  2;
  356. shubreg_t i_precise   :  1;
  357. shubreg_t i_rsvd   : 11;
  358. } ii_icmr_fld_s;
  359. } ii_icmr_u_t;
  360. /************************************************************************
  361.  *                                                                      *
  362.  *  This register allows control of the table portion of the CRB        *
  363.  * logic via software. Control operations from this register have       *
  364.  * priority over all incoming Crosstalk or BTE requests.                *
  365.  *                                                                      *
  366.  ************************************************************************/
  367. typedef union ii_iccr_u {
  368. shubreg_t ii_iccr_regval;
  369. struct  {
  370. shubreg_t i_crb_num                 :  4;
  371. shubreg_t i_rsvd_1   :  4;
  372. shubreg_t i_cmd   :  8;
  373. shubreg_t i_pending   :  1;
  374. shubreg_t i_rsvd   : 47;
  375. } ii_iccr_fld_s;
  376. } ii_iccr_u_t;
  377. /************************************************************************
  378.  *                                                                      *
  379.  *  This register allows the maximum timeout value to be programmed.    *
  380.  *                                                                      *
  381.  ************************************************************************/
  382. typedef union ii_icto_u {
  383. shubreg_t ii_icto_regval;
  384. struct  {
  385. shubreg_t i_timeout                 :  8;
  386. shubreg_t i_rsvd   : 56;
  387. } ii_icto_fld_s;
  388. } ii_icto_u_t;
  389. /************************************************************************
  390.  *                                                                      *
  391.  *  This register allows the timeout prescalar to be programmed. An     *
  392.  * internal counter is associated with this register. When the          *
  393.  * internal counter reaches the value of the PRESCALE field, the        *
  394.  * timer registers in all valid CRBs are incremented (CRBx_D[TIMEOUT]   *
  395.  * field). The internal counter resets to zero, and then continues      *
  396.  * counting.                                                            *
  397.  *                                                                      *
  398.  ************************************************************************/
  399. typedef union ii_ictp_u {
  400. shubreg_t ii_ictp_regval;
  401. struct  {
  402. shubreg_t i_prescale                : 24;
  403. shubreg_t i_rsvd   : 40;
  404. } ii_ictp_fld_s;
  405. } ii_ictp_u_t;
  406. /************************************************************************
  407.  *                                                                      *
  408.  * Description:  There are 15 CRB Entries (ICRB0 to ICRBE) that are     *
  409.  * used for Crosstalk operations (both cacheline and partial            *
  410.  * operations) or BTE/IO. Because the CRB entries are very wide, five   *
  411.  * registers (_A to _E) are required to read and write each entry.      *
  412.  * The CRB Entry registers can be conceptualized as rows and columns    *
  413.  * (illustrated in the table above). Each row contains the 4            *
  414.  * registers required for a single CRB Entry. The first doubleword      *
  415.  * (column) for each entry is labeled A, and the second doubleword      *
  416.  * (higher address) is labeled B, the third doubleword is labeled C,    *
  417.  * the fourth doubleword is labeled D and the fifth doubleword is       *
  418.  * labeled E. All CRB entries have their addresses on a quarter         *
  419.  * cacheline aligned boundary.                   *
  420.  * Upon reset, only the following fields are initialized: valid         *
  421.  * (VLD), priority count, timeout, timeout valid, and context valid.    *
  422.  * All other bits should be cleared by software before use (after       *
  423.  * recovering any potential error state from before the reset).         *
  424.  * The following four tables summarize the format for the four          *
  425.  * registers that are used for each ICRB# Entry.                        *
  426.  *                                                                      *
  427.  ************************************************************************/
  428. typedef union ii_icrb0_a_u {
  429. shubreg_t ii_icrb0_a_regval;
  430. struct  {
  431. shubreg_t ia_iow                    :  1;
  432. shubreg_t ia_vld   :  1;
  433. shubreg_t ia_addr   : 47;
  434. shubreg_t ia_tnum   :  5;
  435. shubreg_t ia_sidn   :  4;
  436. shubreg_t       ia_rsvd                   :      6;
  437. } ii_icrb0_a_fld_s;
  438. } ii_icrb0_a_u_t;
  439. /************************************************************************
  440.  *                                                                      *
  441.  * Description:  There are 15 CRB Entries (ICRB0 to ICRBE) that are     *
  442.  * used for Crosstalk operations (both cacheline and partial            *
  443.  * operations) or BTE/IO. Because the CRB entries are very wide, five   *
  444.  * registers (_A to _E) are required to read and write each entry.      *
  445.  *                                                                      *
  446.  ************************************************************************/
  447. typedef union ii_icrb0_b_u {
  448. shubreg_t ii_icrb0_b_regval;
  449. struct {
  450. shubreg_t ib_xt_err   :  1;
  451. shubreg_t ib_mark   :  1;
  452. shubreg_t ib_ln_uce   :  1;
  453. shubreg_t ib_errcode   :  3;
  454. shubreg_t ib_error   :  1;
  455. shubreg_t ib_stall__bte_1   :  1;
  456. shubreg_t ib_stall__bte_0   :  1;
  457. shubreg_t ib_stall__intr   :  1;
  458. shubreg_t ib_stall_ib   :  1;
  459. shubreg_t ib_intvn   :  1;
  460. shubreg_t ib_wb   :  1;
  461. shubreg_t ib_hold   :  1;
  462. shubreg_t ib_ack   :  1;
  463. shubreg_t ib_resp   :  1;
  464. shubreg_t ib_ack_cnt   : 11;
  465. shubreg_t ib_rsvd   :  7;
  466. shubreg_t ib_exc   :  5;
  467. shubreg_t ib_init   :  3;
  468. shubreg_t ib_imsg   :  8;
  469. shubreg_t ib_imsgtype   :  2;
  470. shubreg_t ib_use_old   :  1;
  471. shubreg_t ib_rsvd_1   : 11;
  472. } ii_icrb0_b_fld_s;
  473. } ii_icrb0_b_u_t;
  474. /************************************************************************
  475.  *                                                                      *
  476.  * Description:  There are 15 CRB Entries (ICRB0 to ICRBE) that are     *
  477.  * used for Crosstalk operations (both cacheline and partial            *
  478.  * operations) or BTE/IO. Because the CRB entries are very wide, five   *
  479.  * registers (_A to _E) are required to read and write each entry.      *
  480.  *                                                                      *
  481.  ************************************************************************/
  482. typedef union ii_icrb0_c_u {
  483. shubreg_t ii_icrb0_c_regval;
  484. struct {
  485. shubreg_t ic_source   : 15;
  486. shubreg_t ic_size   :  2;
  487. shubreg_t ic_ct   :  1;
  488. shubreg_t ic_bte_num   :  1;
  489. shubreg_t ic_gbr   :  1;
  490. shubreg_t ic_resprqd   :  1;
  491. shubreg_t ic_bo   :  1;
  492. shubreg_t ic_suppl   : 15;
  493. shubreg_t ic_rsvd   : 27;
  494. } ii_icrb0_c_fld_s;
  495. } ii_icrb0_c_u_t;
  496. /************************************************************************
  497.  *                                                                      *
  498.  * Description:  There are 15 CRB Entries (ICRB0 to ICRBE) that are     *
  499.  * used for Crosstalk operations (both cacheline and partial            *
  500.  * operations) or BTE/IO. Because the CRB entries are very wide, five   *
  501.  * registers (_A to _E) are required to read and write each entry.      *
  502.  *                                                                      *
  503.  ************************************************************************/
  504. typedef union ii_icrb0_d_u {
  505. shubreg_t ii_icrb0_d_regval;
  506. struct  {
  507. shubreg_t id_pa_be                  : 43;
  508. shubreg_t id_bte_op   :  1;
  509. shubreg_t id_pr_psc   :  4;
  510. shubreg_t id_pr_cnt   :  4;
  511. shubreg_t id_sleep   :  1;
  512. shubreg_t id_rsvd   : 11;
  513. } ii_icrb0_d_fld_s;
  514. } ii_icrb0_d_u_t;
  515. /************************************************************************
  516.  *                                                                      *
  517.  * Description:  There are 15 CRB Entries (ICRB0 to ICRBE) that are     *
  518.  * used for Crosstalk operations (both cacheline and partial            *
  519.  * operations) or BTE/IO. Because the CRB entries are very wide, five   *
  520.  * registers (_A to _E) are required to read and write each entry.      *
  521.  *                                                                      *
  522.  ************************************************************************/
  523. typedef union ii_icrb0_e_u {
  524. shubreg_t ii_icrb0_e_regval;
  525. struct  {
  526. shubreg_t ie_timeout                :  8;
  527. shubreg_t ie_context   : 15;
  528. shubreg_t ie_rsvd   :  1;
  529. shubreg_t ie_tvld   :  1;
  530. shubreg_t ie_cvld   :  1;
  531. shubreg_t ie_rsvd_0   : 38;
  532. } ii_icrb0_e_fld_s;
  533. } ii_icrb0_e_u_t;
  534. /************************************************************************
  535.  *                                                                      *
  536.  *  This register contains the lower 64 bits of the header of the       *
  537.  * spurious message captured by II. Valid when the SP_MSG bit in ICMR   *
  538.  * register is set.                                                     *
  539.  *                                                                      *
  540.  ************************************************************************/
  541. typedef union ii_icsml_u {
  542. shubreg_t ii_icsml_regval;
  543. struct  {
  544. shubreg_t i_tt_addr                 : 47;
  545. shubreg_t i_newsuppl_ex   : 14;
  546. shubreg_t i_reserved   :  2;
  547. shubreg_t       i_overflow                :      1;
  548. } ii_icsml_fld_s;
  549. } ii_icsml_u_t;
  550. /************************************************************************
  551.  *                                                                      *
  552.  *  This register contains the middle 64 bits of the header of the      *
  553.  * spurious message captured by II. Valid when the SP_MSG bit in ICMR   *
  554.  * register is set.                                                     *
  555.  *                                                                      *
  556.  ************************************************************************/
  557. typedef union ii_icsmm_u {
  558. shubreg_t ii_icsmm_regval;
  559. struct  {
  560. shubreg_t i_tt_ack_cnt              : 11;
  561. shubreg_t i_reserved   : 53;
  562. } ii_icsmm_fld_s;
  563. } ii_icsmm_u_t;
  564. /************************************************************************
  565.  *                                                                      *
  566.  *  This register contains the microscopic state, all the inputs to     *
  567.  * the protocol table, captured with the spurious message. Valid when   *
  568.  * the SP_MSG bit in the ICMR register is set.                          *
  569.  *                                                                      *
  570.  ************************************************************************/
  571. typedef union ii_icsmh_u {
  572. shubreg_t ii_icsmh_regval;
  573. struct  {
  574. shubreg_t i_tt_vld                  :  1;
  575. shubreg_t i_xerr   :  1;
  576. shubreg_t i_ft_cwact_o   :  1;
  577. shubreg_t i_ft_wact_o   :  1;
  578. shubreg_t       i_ft_active_o             :      1;
  579. shubreg_t i_sync   :  1;
  580. shubreg_t i_mnusg   :  1;
  581. shubreg_t i_mnusz   :  1;
  582. shubreg_t i_plusz   :  1;
  583. shubreg_t i_plusg   :  1;
  584. shubreg_t i_tt_exc   :  5;
  585. shubreg_t i_tt_wb   :  1;
  586. shubreg_t i_tt_hold   :  1;
  587. shubreg_t i_tt_ack   :  1;
  588. shubreg_t i_tt_resp   :  1;
  589. shubreg_t i_tt_intvn   :  1;
  590. shubreg_t i_g_stall_bte1   :  1;
  591. shubreg_t i_g_stall_bte0   :  1;
  592. shubreg_t i_g_stall_il   :  1;
  593. shubreg_t i_g_stall_ib   :  1;
  594. shubreg_t i_tt_imsg   :  8;
  595. shubreg_t i_tt_imsgtype   :  2;
  596. shubreg_t i_tt_use_old   :  1;
  597. shubreg_t i_tt_respreqd   :  1;
  598. shubreg_t i_tt_bte_num   :  1;
  599. shubreg_t i_cbn   :  1;
  600. shubreg_t i_match   :  1;
  601. shubreg_t i_rpcnt_lt_34   :  1;
  602. shubreg_t i_rpcnt_ge_34   :  1;
  603. shubreg_t i_rpcnt_lt_18   :  1;
  604. shubreg_t i_rpcnt_ge_18   :  1;
  605. shubreg_t       i_rpcnt_lt_2              :      1;
  606. shubreg_t i_rpcnt_ge_2   :  1;
  607. shubreg_t i_rqcnt_lt_18   :  1;
  608. shubreg_t i_rqcnt_ge_18   :  1;
  609. shubreg_t i_rqcnt_lt_2   :  1;
  610. shubreg_t i_rqcnt_ge_2   :  1;
  611. shubreg_t i_tt_device   :  7;
  612. shubreg_t i_tt_init   :  3;
  613. shubreg_t i_reserved   :  5;
  614. } ii_icsmh_fld_s;
  615. } ii_icsmh_u_t;
  616. /************************************************************************
  617.  *                                                                      *
  618.  *  The Shub DEBUG unit provides a 3-bit selection signal to the        *
  619.  * II core and a 3-bit selection signal to the fsbclk domain in the II  *
  620.  * wrapper.                                                             *
  621.  *                                                                      *
  622.  ************************************************************************/
  623. typedef union ii_idbss_u {
  624. shubreg_t ii_idbss_regval;
  625. struct  {
  626. shubreg_t i_iioclk_core_submenu     :  3;
  627. shubreg_t i_rsvd   :  5;
  628. shubreg_t i_fsbclk_wrapper_submenu  :  3;
  629. shubreg_t i_rsvd_1   :  5;
  630. shubreg_t i_iioclk_menu   :  5;
  631. shubreg_t i_rsvd_2   : 43;
  632. } ii_idbss_fld_s;
  633. } ii_idbss_u_t;
  634. /************************************************************************
  635.  *                                                                      *
  636.  * Description:  This register is used to set up the length for a       *
  637.  * transfer and then to monitor the progress of that transfer. This     *
  638.  * register needs to be initialized before a transfer is started. A     *
  639.  * legitimate write to this register will set the Busy bit, clear the   *
  640.  * Error bit, and initialize the length to the value desired.           *
  641.  * While the transfer is in progress, hardware will decrement the       *
  642.  * length field with each successful block that is copied. Once the     *
  643.  * transfer completes, hardware will clear the Busy bit. The length     *
  644.  * field will also contain the number of cache lines left to be         *
  645.  * transferred.                                                         *
  646.  *                                                                      *
  647.  ************************************************************************/
  648. typedef union ii_ibls0_u {
  649. shubreg_t ii_ibls0_regval;
  650. struct {
  651. shubreg_t i_length   : 16;
  652. shubreg_t i_error   :  1;
  653. shubreg_t i_rsvd_1   :  3;
  654. shubreg_t i_busy   :  1;
  655. shubreg_t       i_rsvd                    :     43;
  656. } ii_ibls0_fld_s;
  657. } ii_ibls0_u_t;
  658. /************************************************************************
  659.  *                                                                      *
  660.  *  This register should be loaded before a transfer is started. The    *
  661.  * address to be loaded in bits 39:0 is the 40-bit TRex+ physical       *
  662.  * address as described in Section 1.3, Figure2 and Figure3. Since      *
  663.  * the bottom 7 bits of the address are always taken to be zero, BTE    *
  664.  * transfers are always cacheline-aligned.                              *
  665.  *                                                                      *
  666.  ************************************************************************/
  667. typedef union ii_ibsa0_u {
  668. shubreg_t ii_ibsa0_regval;
  669. struct  {
  670. shubreg_t i_rsvd_1                  :  7;
  671. shubreg_t i_addr   : 42;
  672. shubreg_t       i_rsvd                    :     15;
  673. } ii_ibsa0_fld_s;
  674. } ii_ibsa0_u_t;
  675. /************************************************************************
  676.  *                                                                      *
  677.  *  This register should be loaded before a transfer is started. The    *
  678.  * address to be loaded in bits 39:0 is the 40-bit TRex+ physical       *
  679.  * address as described in Section 1.3, Figure2 and Figure3. Since      *
  680.  * the bottom 7 bits of the address are always taken to be zero, BTE    *
  681.  * transfers are always cacheline-aligned.                              *
  682.  *                                                                      *
  683.  ************************************************************************/
  684. typedef union ii_ibda0_u {
  685. shubreg_t ii_ibda0_regval;
  686. struct  {
  687. shubreg_t i_rsvd_1                  :  7;
  688. shubreg_t i_addr   : 42;
  689. shubreg_t i_rsvd   : 15;
  690. } ii_ibda0_fld_s;
  691. } ii_ibda0_u_t;
  692. /************************************************************************
  693.  *                                                                      *
  694.  *  Writing to this register sets up the attributes of the transfer     *
  695.  * and initiates the transfer operation. Reading this register has      *
  696.  * the side effect of terminating any transfer in progress. Note:       *
  697.  * stopping a transfer midstream could have an adverse impact on the    *
  698.  * other BTE. If a BTE stream has to be stopped (due to error           *
  699.  * handling for example), both BTE streams should be stopped and        *
  700.  * their transfers discarded.                                           *
  701.  *                                                                      *
  702.  ************************************************************************/
  703. typedef union ii_ibct0_u {
  704. shubreg_t ii_ibct0_regval;
  705. struct  {
  706. shubreg_t i_zerofill                :  1;
  707. shubreg_t i_rsvd_2   :  3;
  708. shubreg_t i_notify   :  1;
  709. shubreg_t i_rsvd_1   :  3;
  710. shubreg_t       i_poison                  :      1;
  711. shubreg_t       i_rsvd                    :     55;
  712. } ii_ibct0_fld_s;
  713. } ii_ibct0_u_t;
  714. /************************************************************************
  715.  *                                                                      *
  716.  *  This register contains the address to which the WINV is sent.       *
  717.  * This address has to be cache line aligned.                           *
  718.  *                                                                      *
  719.  ************************************************************************/
  720. typedef union ii_ibna0_u {
  721. shubreg_t ii_ibna0_regval;
  722. struct  {
  723. shubreg_t i_rsvd_1                  :  7;
  724. shubreg_t i_addr   : 42;
  725. shubreg_t i_rsvd   : 15;
  726. } ii_ibna0_fld_s;
  727. } ii_ibna0_u_t;
  728. /************************************************************************
  729.  *                                                                      *
  730.  *  This register contains the programmable level as well as the node   *
  731.  * ID and PI unit of the processor to which the interrupt will be       *
  732.  * sent.                                                                *
  733.  *                                                                      *
  734.  ************************************************************************/
  735. typedef union ii_ibia0_u {
  736. shubreg_t ii_ibia0_regval;
  737. struct  {
  738. shubreg_t i_rsvd_2                   :  1;
  739. shubreg_t i_node_id   : 11;
  740. shubreg_t i_rsvd_1   :  4;
  741. shubreg_t i_level   :  7;
  742. shubreg_t       i_rsvd                    :     41;
  743. } ii_ibia0_fld_s;
  744. } ii_ibia0_u_t;
  745. /************************************************************************
  746.  *                                                                      *
  747.  * Description:  This register is used to set up the length for a       *
  748.  * transfer and then to monitor the progress of that transfer. This     *
  749.  * register needs to be initialized before a transfer is started. A     *
  750.  * legitimate write to this register will set the Busy bit, clear the   *
  751.  * Error bit, and initialize the length to the value desired.           *
  752.  * While the transfer is in progress, hardware will decrement the       *
  753.  * length field with each successful block that is copied. Once the     *
  754.  * transfer completes, hardware will clear the Busy bit. The length     *
  755.  * field will also contain the number of cache lines left to be         *
  756.  * transferred.                                                         *
  757.  *                                                                      *
  758.  ************************************************************************/
  759. typedef union ii_ibls1_u {
  760. shubreg_t ii_ibls1_regval;
  761. struct  {
  762. shubreg_t i_length                  : 16;
  763. shubreg_t i_error   :  1;
  764. shubreg_t i_rsvd_1   :  3;
  765. shubreg_t i_busy   :  1;
  766. shubreg_t       i_rsvd                    :     43;
  767. } ii_ibls1_fld_s;
  768. } ii_ibls1_u_t;
  769. /************************************************************************
  770.  *                                                                      *
  771.  *  This register should be loaded before a transfer is started. The    *
  772.  * address to be loaded in bits 39:0 is the 40-bit TRex+ physical       *
  773.  * address as described in Section 1.3, Figure2 and Figure3. Since      *
  774.  * the bottom 7 bits of the address are always taken to be zero, BTE    *
  775.  * transfers are always cacheline-aligned.                              *
  776.  *                                                                      *
  777.  ************************************************************************/
  778. typedef union ii_ibsa1_u {
  779. shubreg_t ii_ibsa1_regval;
  780. struct  {
  781. shubreg_t i_rsvd_1                  :  7;
  782. shubreg_t i_addr   : 33;
  783. shubreg_t i_rsvd   : 24;
  784. } ii_ibsa1_fld_s;
  785. } ii_ibsa1_u_t;
  786. /************************************************************************
  787.  *                                                                      *
  788.  *  This register should be loaded before a transfer is started. The    *
  789.  * address to be loaded in bits 39:0 is the 40-bit TRex+ physical       *
  790.  * address as described in Section 1.3, Figure2 and Figure3. Since      *
  791.  * the bottom 7 bits of the address are always taken to be zero, BTE    *
  792.  * transfers are always cacheline-aligned.                              *
  793.  *                                                                      *
  794.  ************************************************************************/
  795. typedef union ii_ibda1_u {
  796. shubreg_t ii_ibda1_regval;
  797. struct  {
  798. shubreg_t i_rsvd_1                  :  7;
  799. shubreg_t i_addr   : 33;
  800. shubreg_t i_rsvd   : 24;
  801. } ii_ibda1_fld_s;
  802. } ii_ibda1_u_t;
  803. /************************************************************************
  804.  *                                                                      *
  805.  *  Writing to this register sets up the attributes of the transfer     *
  806.  * and initiates the transfer operation. Reading this register has      *
  807.  * the side effect of terminating any transfer in progress. Note:       *
  808.  * stopping a transfer midstream could have an adverse impact on the    *
  809.  * other BTE. If a BTE stream has to be stopped (due to error           *
  810.  * handling for example), both BTE streams should be stopped and        *
  811.  * their transfers discarded.                                           *
  812.  *                                                                      *
  813.  ************************************************************************/
  814. typedef union ii_ibct1_u {
  815. shubreg_t ii_ibct1_regval;
  816. struct  {
  817. shubreg_t i_zerofill                :  1;
  818. shubreg_t i_rsvd_2   :  3;
  819. shubreg_t i_notify   :  1;
  820. shubreg_t i_rsvd_1   :  3;
  821. shubreg_t i_poison   :  1;
  822. shubreg_t i_rsvd   : 55;
  823. } ii_ibct1_fld_s;
  824. } ii_ibct1_u_t;
  825. /************************************************************************
  826.  *                                                                      *
  827.  *  This register contains the address to which the WINV is sent.       *
  828.  * This address has to be cache line aligned.                           *
  829.  *                                                                      *
  830.  ************************************************************************/
  831. typedef union ii_ibna1_u {
  832. shubreg_t ii_ibna1_regval;
  833. struct  {
  834. shubreg_t i_rsvd_1                  :  7;
  835. shubreg_t i_addr   : 33;
  836. shubreg_t       i_rsvd                    :     24;
  837. } ii_ibna1_fld_s;
  838. } ii_ibna1_u_t;
  839. /************************************************************************
  840.  *                                                                      *
  841.  *  This register contains the programmable level as well as the node   *
  842.  * ID and PI unit of the processor to which the interrupt will be       *
  843.  * sent.                                                                *
  844.  *                                                                      *
  845.  ************************************************************************/
  846. typedef union ii_ibia1_u {
  847. shubreg_t ii_ibia1_regval;
  848. struct  {
  849. shubreg_t i_pi_id                   :  1;
  850. shubreg_t i_node_id   :  8;
  851. shubreg_t i_rsvd_1   :  7;
  852. shubreg_t i_level   :  7;
  853. shubreg_t i_rsvd   : 41;
  854. } ii_ibia1_fld_s;
  855. } ii_ibia1_u_t;
  856. /************************************************************************
  857.  *                                                                      *
  858.  *  This register defines the resources that feed information into      *
  859.  * the two performance counters located in the IO Performance           *
  860.  * Profiling Register. There are 17 different quantities that can be    *
  861.  * measured. Given these 17 different options, the two performance      *
  862.  * counters have 15 of them in common; menu selections 0 through 0xE    *
  863.  * are identical for each performance counter. As for the other two     *
  864.  * options, one is available from one performance counter and the       *
  865.  * other is available from the other performance counter. Hence, the    *
  866.  * II supports all 17*16=272 possible combinations of quantities to     *
  867.  * measure.                                                             *
  868.  *                                                                      *
  869.  ************************************************************************/
  870. typedef union ii_ipcr_u {
  871. shubreg_t ii_ipcr_regval;
  872. struct  {
  873. shubreg_t i_ippr0_c                 :  4;
  874. shubreg_t i_ippr1_c   :  4;
  875. shubreg_t i_icct   :  8;
  876. shubreg_t       i_rsvd                    :     48;
  877. } ii_ipcr_fld_s;
  878. } ii_ipcr_u_t;
  879. /************************************************************************
  880.  *                                                                      *
  881.  *                                                                      *
  882.  *                                                                      *
  883.  ************************************************************************/
  884. typedef union ii_ippr_u {
  885. shubreg_t ii_ippr_regval;
  886. struct  {
  887. shubreg_t i_ippr0                   : 32;
  888. shubreg_t i_ippr1   : 32;
  889. } ii_ippr_fld_s;
  890. } ii_ippr_u_t;
  891. #endif /* __ASSEMBLY__ */
  892. /**************************************************************************
  893.  *                                                                        *
  894.  * The following defines which were not formed into structures are        *
  895.  * probably indentical to another register, and the name of the           *
  896.  * register is provided against each of these registers. This             *
  897.  * information needs to be checked carefully                              *
  898.  *                                                                        *
  899.  *           IIO_ICRB1_A                IIO_ICRB0_A                       *
  900.  *           IIO_ICRB1_B                IIO_ICRB0_B                       *
  901.  *           IIO_ICRB1_C                IIO_ICRB0_C                       *
  902.  *           IIO_ICRB1_D                IIO_ICRB0_D                       *
  903.  *           IIO_ICRB1_E                IIO_ICRB0_E                       *
  904.  *           IIO_ICRB2_A                IIO_ICRB0_A                       *
  905.  *           IIO_ICRB2_B                IIO_ICRB0_B                       *
  906.  *           IIO_ICRB2_C                IIO_ICRB0_C                       *
  907.  *           IIO_ICRB2_D                IIO_ICRB0_D                       *
  908.  *           IIO_ICRB2_E                IIO_ICRB0_E                       *
  909.  *           IIO_ICRB3_A                IIO_ICRB0_A                       *
  910.  *           IIO_ICRB3_B                IIO_ICRB0_B                       *
  911.  *           IIO_ICRB3_C                IIO_ICRB0_C                       *
  912.  *           IIO_ICRB3_D                IIO_ICRB0_D                       *
  913.  *           IIO_ICRB3_E                IIO_ICRB0_E                       *
  914.  *           IIO_ICRB4_A                IIO_ICRB0_A                       *
  915.  *           IIO_ICRB4_B                IIO_ICRB0_B                       *
  916.  *           IIO_ICRB4_C                IIO_ICRB0_C                       *
  917.  *           IIO_ICRB4_D                IIO_ICRB0_D                       *
  918.  *           IIO_ICRB4_E                IIO_ICRB0_E                       *
  919.  *           IIO_ICRB5_A                IIO_ICRB0_A                       *
  920.  *           IIO_ICRB5_B                IIO_ICRB0_B                       *
  921.  *           IIO_ICRB5_C                IIO_ICRB0_C                       *
  922.  *           IIO_ICRB5_D                IIO_ICRB0_D                       *
  923.  *           IIO_ICRB5_E                IIO_ICRB0_E                       *
  924.  *           IIO_ICRB6_A                IIO_ICRB0_A                       *
  925.  *           IIO_ICRB6_B                IIO_ICRB0_B                       *
  926.  *           IIO_ICRB6_C                IIO_ICRB0_C                       *
  927.  *           IIO_ICRB6_D                IIO_ICRB0_D                       *
  928.  *           IIO_ICRB6_E                IIO_ICRB0_E                       *
  929.  *           IIO_ICRB7_A                IIO_ICRB0_A                       *
  930.  *           IIO_ICRB7_B                IIO_ICRB0_B                       *
  931.  *           IIO_ICRB7_C                IIO_ICRB0_C                       *
  932.  *           IIO_ICRB7_D                IIO_ICRB0_D                       *
  933.  *           IIO_ICRB7_E                IIO_ICRB0_E                       *
  934.  *           IIO_ICRB8_A                IIO_ICRB0_A                       *
  935.  *           IIO_ICRB8_B                IIO_ICRB0_B                       *
  936.  *           IIO_ICRB8_C                IIO_ICRB0_C                       *
  937.  *           IIO_ICRB8_D                IIO_ICRB0_D                       *
  938.  *           IIO_ICRB8_E                IIO_ICRB0_E                       *
  939.  *           IIO_ICRB9_A                IIO_ICRB0_A                       *
  940.  *           IIO_ICRB9_B                IIO_ICRB0_B                       *
  941.  *           IIO_ICRB9_C                IIO_ICRB0_C                       *
  942.  *           IIO_ICRB9_D                IIO_ICRB0_D                       *
  943.  *           IIO_ICRB9_E                IIO_ICRB0_E                       *
  944.  *           IIO_ICRBA_A                IIO_ICRB0_A                       *
  945.  *           IIO_ICRBA_B                IIO_ICRB0_B                       *
  946.  *           IIO_ICRBA_C                IIO_ICRB0_C                       *
  947.  *           IIO_ICRBA_D                IIO_ICRB0_D                       *
  948.  *           IIO_ICRBA_E                IIO_ICRB0_E                       *
  949.  *           IIO_ICRBB_A                IIO_ICRB0_A                       *
  950.  *           IIO_ICRBB_B                IIO_ICRB0_B                       *
  951.  *           IIO_ICRBB_C                IIO_ICRB0_C                       *
  952.  *           IIO_ICRBB_D                IIO_ICRB0_D                       *
  953.  *           IIO_ICRBB_E                IIO_ICRB0_E                       *
  954.  *           IIO_ICRBC_A                IIO_ICRB0_A                       *
  955.  *           IIO_ICRBC_B                IIO_ICRB0_B                       *
  956.  *           IIO_ICRBC_C                IIO_ICRB0_C                       *
  957.  *           IIO_ICRBC_D                IIO_ICRB0_D                       *
  958.  *           IIO_ICRBC_E                IIO_ICRB0_E                       *
  959.  *           IIO_ICRBD_A                IIO_ICRB0_A                       *
  960.  *           IIO_ICRBD_B                IIO_ICRB0_B                       *
  961.  *           IIO_ICRBD_C                IIO_ICRB0_C                       *
  962.  *           IIO_ICRBD_D                IIO_ICRB0_D                       *
  963.  *           IIO_ICRBD_E                IIO_ICRB0_E                       *
  964.  *           IIO_ICRBE_A                IIO_ICRB0_A                       *
  965.  *           IIO_ICRBE_B                IIO_ICRB0_B                       *
  966.  *           IIO_ICRBE_C                IIO_ICRB0_C                       *
  967.  *           IIO_ICRBE_D                IIO_ICRB0_D                       *
  968.  *           IIO_ICRBE_E                IIO_ICRB0_E                       *
  969.  *                                                                        *
  970.  **************************************************************************/
  971. /*
  972.  * Slightly friendlier names for some common registers.
  973.  */
  974. #define IIO_WIDGET              IIO_WID      /* Widget identification */
  975. #define IIO_WIDGET_STAT         IIO_WSTAT    /* Widget status register */
  976. #define IIO_WIDGET_CTRL         IIO_WCR      /* Widget control register */
  977. #define IIO_PROTECT             IIO_ILAPR    /* IO interface protection */
  978. #define IIO_PROTECT_OVRRD       IIO_ILAPO    /* IO protect override */
  979. #define IIO_OUTWIDGET_ACCESS    IIO_IOWA     /* Outbound widget access */
  980. #define IIO_INWIDGET_ACCESS     IIO_IIWA     /* Inbound widget access */
  981. #define IIO_INDEV_ERR_MASK      IIO_IIDEM    /* Inbound device error mask */
  982. #define IIO_LLP_CSR             IIO_ILCSR    /* LLP control and status */
  983. #define IIO_LLP_LOG             IIO_ILLR     /* LLP log */
  984. #define IIO_XTALKCC_TOUT        IIO_IXCC     /* Xtalk credit count timeout*/
  985. #define IIO_XTALKTT_TOUT        IIO_IXTT     /* Xtalk tail timeout */
  986. #define IIO_IO_ERR_CLR          IIO_IECLR    /* IO error clear */
  987. #define IIO_IGFX_0  IIO_IGFX0
  988. #define IIO_IGFX_1  IIO_IGFX1
  989. #define IIO_IBCT_0 IIO_IBCT0
  990. #define IIO_IBCT_1 IIO_IBCT1
  991. #define IIO_IBLS_0 IIO_IBLS0
  992. #define IIO_IBLS_1 IIO_IBLS1
  993. #define IIO_IBSA_0 IIO_IBSA0
  994. #define IIO_IBSA_1 IIO_IBSA1
  995. #define IIO_IBDA_0 IIO_IBDA0
  996. #define IIO_IBDA_1 IIO_IBDA1
  997. #define IIO_IBNA_0 IIO_IBNA0
  998. #define IIO_IBNA_1 IIO_IBNA1
  999. #define IIO_IBIA_0 IIO_IBIA0
  1000. #define IIO_IBIA_1 IIO_IBIA1
  1001. #define IIO_IOPRB_0 IIO_IPRB0
  1002. #define IIO_PRTE_A(_x) (IIO_IPRTE0_A + (8 * (_x)))
  1003. #define IIO_PRTE_B(_x) (IIO_IPRTE0_B + (8 * (_x)))
  1004. #define IIO_NUM_PRTES 8 /* Total number of PRB table entries */
  1005. #define IIO_WIDPRTE_A(x) IIO_PRTE_A(((x) - 8)) /* widget ID to its PRTE num */
  1006. #define IIO_WIDPRTE_B(x) IIO_PRTE_B(((x) - 8)) /* widget ID to its PRTE num */
  1007. #define IIO_NUM_IPRBS  (9) 
  1008. #define IIO_LLP_CSR_IS_UP               0x00002000
  1009. #define IIO_LLP_CSR_LLP_STAT_MASK       0x00003000
  1010. #define IIO_LLP_CSR_LLP_STAT_SHFT       12
  1011. #define IIO_LLP_CB_MAX  0xffff /* in ILLR CB_CNT, Max Check Bit errors */
  1012. #define IIO_LLP_SN_MAX  0xffff /* in ILLR SN_CNT, Max Sequence Number errors */
  1013. /* key to IIO_PROTECT_OVRRD */
  1014. #define IIO_PROTECT_OVRRD_KEY   0x53474972756c6573ull   /* "SGIrules" */
  1015. /* BTE register names */
  1016. #define IIO_BTE_STAT_0          IIO_IBLS_0   /* Also BTE length/status 0 */
  1017. #define IIO_BTE_SRC_0           IIO_IBSA_0   /* Also BTE source address  0 */
  1018. #define IIO_BTE_DEST_0          IIO_IBDA_0   /* Also BTE dest. address 0 */
  1019. #define IIO_BTE_CTRL_0          IIO_IBCT_0   /* Also BTE control/terminate 0 */
  1020. #define IIO_BTE_NOTIFY_0        IIO_IBNA_0   /* Also BTE notification 0 */
  1021. #define IIO_BTE_INT_0           IIO_IBIA_0   /* Also BTE interrupt 0 */
  1022. #define IIO_BTE_OFF_0           0            /* Base offset from BTE 0 regs. */
  1023. #define IIO_BTE_OFF_1    (IIO_IBLS_1 - IIO_IBLS_0) /* Offset from base to BTE 1 */
  1024. /* BTE register offsets from base */
  1025. #define BTEOFF_STAT             0
  1026. #define BTEOFF_SRC              (IIO_BTE_SRC_0 - IIO_BTE_STAT_0)
  1027. #define BTEOFF_DEST             (IIO_BTE_DEST_0 - IIO_BTE_STAT_0)
  1028. #define BTEOFF_CTRL             (IIO_BTE_CTRL_0 - IIO_BTE_STAT_0)
  1029. #define BTEOFF_NOTIFY           (IIO_BTE_NOTIFY_0 - IIO_BTE_STAT_0)
  1030. #define BTEOFF_INT              (IIO_BTE_INT_0 - IIO_BTE_STAT_0)
  1031. /* names used in shub diags */
  1032. #define IIO_BASE_BTE0   IIO_IBLS_0
  1033. #define IIO_BASE_BTE1   IIO_IBLS_1
  1034. /*
  1035.  * Macro which takes the widget number, and returns the
  1036.  * IO PRB address of that widget.
  1037.  * value _x is expected to be a widget number in the range
  1038.  * 0, 8 - 0xF
  1039.  */
  1040. #define IIO_IOPRB(_x)   (IIO_IOPRB_0 + ( ( (_x) < HUB_WIDGET_ID_MIN ? 
  1041.                         (_x) : 
  1042.                         (_x) - (HUB_WIDGET_ID_MIN-1)) << 3) )
  1043. /* GFX Flow Control Node/Widget Register */
  1044. #define IIO_IGFX_W_NUM_BITS 4 /* size of widget num field */
  1045. #define IIO_IGFX_W_NUM_MASK ((1<<IIO_IGFX_W_NUM_BITS)-1)
  1046. #define IIO_IGFX_W_NUM_SHIFT 0
  1047. #define IIO_IGFX_PI_NUM_BITS 1 /* size of PI num field */
  1048. #define IIO_IGFX_PI_NUM_MASK ((1<<IIO_IGFX_PI_NUM_BITS)-1)
  1049. #define IIO_IGFX_PI_NUM_SHIFT 4
  1050. #define IIO_IGFX_N_NUM_BITS 8 /* size of node num field */
  1051. #define IIO_IGFX_N_NUM_MASK ((1<<IIO_IGFX_N_NUM_BITS)-1)
  1052. #define IIO_IGFX_N_NUM_SHIFT 5
  1053. #define IIO_IGFX_P_NUM_BITS 1 /* size of processor num field */
  1054. #define IIO_IGFX_P_NUM_MASK ((1<<IIO_IGFX_P_NUM_BITS)-1)
  1055. #define IIO_IGFX_P_NUM_SHIFT 16
  1056. #define IIO_IGFX_INIT(widget, pi, node, cpu) (
  1057. (((widget) & IIO_IGFX_W_NUM_MASK) << IIO_IGFX_W_NUM_SHIFT) |  
  1058. (((pi)     & IIO_IGFX_PI_NUM_MASK)<< IIO_IGFX_PI_NUM_SHIFT)|  
  1059. (((node)   & IIO_IGFX_N_NUM_MASK) << IIO_IGFX_N_NUM_SHIFT) |  
  1060. (((cpu)    & IIO_IGFX_P_NUM_MASK) << IIO_IGFX_P_NUM_SHIFT))
  1061. /* Scratch registers (all bits available) */
  1062. #define IIO_SCRATCH_REG0        IIO_ISCR0
  1063. #define IIO_SCRATCH_REG1        IIO_ISCR1
  1064. #define IIO_SCRATCH_MASK        0xffffffffffffffff
  1065. #define IIO_SCRATCH_BIT0_0      0x0000000000000001
  1066. #define IIO_SCRATCH_BIT0_1      0x0000000000000002
  1067. #define IIO_SCRATCH_BIT0_2      0x0000000000000004
  1068. #define IIO_SCRATCH_BIT0_3      0x0000000000000008
  1069. #define IIO_SCRATCH_BIT0_4      0x0000000000000010
  1070. #define IIO_SCRATCH_BIT0_5      0x0000000000000020
  1071. #define IIO_SCRATCH_BIT0_6      0x0000000000000040
  1072. #define IIO_SCRATCH_BIT0_7      0x0000000000000080
  1073. #define IIO_SCRATCH_BIT0_8      0x0000000000000100
  1074. #define IIO_SCRATCH_BIT0_9      0x0000000000000200
  1075. #define IIO_SCRATCH_BIT0_A      0x0000000000000400
  1076. #define IIO_SCRATCH_BIT1_0      0x0000000000000001
  1077. #define IIO_SCRATCH_BIT1_1      0x0000000000000002
  1078. /* IO Translation Table Entries */
  1079. #define IIO_NUM_ITTES   7               /* ITTEs numbered 0..6 */
  1080.                                         /* Hw manuals number them 1..7! */
  1081. /*
  1082.  * IIO_IMEM Register fields.
  1083.  */
  1084. #define IIO_IMEM_W0ESD  0x1             /* Widget 0 shut down due to error */
  1085. #define IIO_IMEM_B0ESD  (1 << 4)        /* BTE 0 shut down due to error */
  1086. #define IIO_IMEM_B1ESD  (1 << 8)        /* BTE 1 Shut down due to error */
  1087. /*
  1088.  * As a permanent workaround for a bug in the PI side of the shub, we've
  1089.  * redefined big window 7 as small window 0.
  1090.  XXX does this still apply for SN1??
  1091.  */
  1092. #define HUB_NUM_BIG_WINDOW      (IIO_NUM_ITTES - 1)
  1093. /*
  1094.  * Use the top big window as a surrogate for the first small window
  1095.  */
  1096. #define SWIN0_BIGWIN            HUB_NUM_BIG_WINDOW
  1097. #define ILCSR_WARM_RESET        0x100
  1098. /*
  1099.  * CRB manipulation macros
  1100.  *      The CRB macros are slightly complicated, since there are up to
  1101.  *      four registers associated with each CRB entry.
  1102.  */
  1103. #define IIO_NUM_CRBS            15      /* Number of CRBs */
  1104. #define IIO_NUM_PC_CRBS         4       /* Number of partial cache CRBs */
  1105. #define IIO_ICRB_OFFSET         8
  1106. #define IIO_ICRB_0              IIO_ICRB0_A
  1107. #define IIO_ICRB_ADDR_SHFT 2 /* Shift to get proper address */
  1108. /* XXX - This is now tuneable:
  1109.         #define IIO_FIRST_PC_ENTRY 12
  1110.  */
  1111. #define IIO_ICRB_A(_x)  (IIO_ICRB_0 + (6 * IIO_ICRB_OFFSET * (_x)))
  1112. #define IIO_ICRB_B(_x)  (IIO_ICRB_A(_x) + 1*IIO_ICRB_OFFSET)
  1113. #define IIO_ICRB_C(_x)  (IIO_ICRB_A(_x) + 2*IIO_ICRB_OFFSET)
  1114. #define IIO_ICRB_D(_x)  (IIO_ICRB_A(_x) + 3*IIO_ICRB_OFFSET)
  1115. #define IIO_ICRB_E(_x)  (IIO_ICRB_A(_x) + 4*IIO_ICRB_OFFSET)
  1116. #define TNUM_TO_WIDGET_DEV(_tnum) (_tnum & 0x7)
  1117. /*
  1118.  * values for "ecode" field
  1119.  */
  1120. #define IIO_ICRB_ECODE_DERR     0       /* Directory error due to IIO access */
  1121. #define IIO_ICRB_ECODE_PERR     1       /* Poison error on IO access */
  1122. #define IIO_ICRB_ECODE_WERR     2       /* Write error by IIO access
  1123.                                          * e.g. WINV to a Read only line. */
  1124. #define IIO_ICRB_ECODE_AERR     3       /* Access error caused by IIO access */
  1125. #define IIO_ICRB_ECODE_PWERR    4       /* Error on partial write       */
  1126. #define IIO_ICRB_ECODE_PRERR    5       /* Error on partial read        */
  1127. #define IIO_ICRB_ECODE_TOUT     6       /* CRB timeout before deallocating */
  1128. #define IIO_ICRB_ECODE_XTERR    7       /* Incoming xtalk pkt had error bit */
  1129. /*
  1130.  * Values for field imsgtype
  1131.  */
  1132. #define IIO_ICRB_IMSGT_XTALK    0       /* Incoming Meessage from Xtalk */
  1133. #define IIO_ICRB_IMSGT_BTE      1       /* Incoming message from BTE    */
  1134. #define IIO_ICRB_IMSGT_SN1NET   2       /* Incoming message from SN1 net */
  1135. #define IIO_ICRB_IMSGT_CRB      3       /* Incoming message from CRB ???  */
  1136. /*
  1137.  * values for field initiator.
  1138.  */
  1139. #define IIO_ICRB_INIT_XTALK     0       /* Message originated in xtalk  */
  1140. #define IIO_ICRB_INIT_BTE0      0x1     /* Message originated in BTE 0  */
  1141. #define IIO_ICRB_INIT_SN1NET    0x2     /* Message originated in SN1net */
  1142. #define IIO_ICRB_INIT_CRB       0x3     /* Message originated in CRB ?  */
  1143. #define IIO_ICRB_INIT_BTE1      0x5     /* MEssage originated in BTE 1  */
  1144. /*
  1145.  * Number of credits Hub widget has while sending req/response to
  1146.  * xbow.
  1147.  * Value of 3 is required by Xbow 1.1
  1148.  * We may be able to increase this to 4 with Xbow 1.2.
  1149.  */
  1150. #define       HUBII_XBOW_CREDIT       3
  1151. #define       HUBII_XBOW_REV2_CREDIT  4
  1152. /*
  1153.  * Number of credits that xtalk devices should use when communicating
  1154.  * with a SHub (depth of SHub's queue).
  1155.  */
  1156. #define HUB_CREDIT 4
  1157. /*
  1158.  * Some IIO_PRB fields
  1159.  */
  1160. #define IIO_PRB_MULTI_ERR (1LL << 63)
  1161. #define IIO_PRB_SPUR_RD (1LL << 51)
  1162. #define IIO_PRB_SPUR_WR (1LL << 50)
  1163. #define IIO_PRB_RD_TO (1LL << 49)
  1164. #define IIO_PRB_ERROR (1LL << 48)
  1165. /*************************************************************************
  1166.  Some of the IIO field masks and shifts are defined here.
  1167.  This is in order to maintain compatibility in SN0 and SN1 code
  1168.  
  1169. **************************************************************************/
  1170. /*
  1171.  * ICMR register fields
  1172.  * (Note: the IIO_ICMR_P_CNT and IIO_ICMR_PC_VLD from Hub are not
  1173.  * present in SHub)
  1174.  */
  1175. #define IIO_ICMR_CRB_VLD_SHFT   20
  1176. #define IIO_ICMR_CRB_VLD_MASK   (0x7fffUL << IIO_ICMR_CRB_VLD_SHFT)
  1177. #define IIO_ICMR_FC_CNT_SHFT    16
  1178. #define IIO_ICMR_FC_CNT_MASK    (0xf << IIO_ICMR_FC_CNT_SHFT)
  1179. #define IIO_ICMR_C_CNT_SHFT     4
  1180. #define IIO_ICMR_C_CNT_MASK     (0xf << IIO_ICMR_C_CNT_SHFT)
  1181. #define IIO_ICMR_PRECISE        (1UL << 52)
  1182. #define IIO_ICMR_CLR_RPPD       (1UL << 13)
  1183. #define IIO_ICMR_CLR_RQPD       (1UL << 12)
  1184. /*
  1185.  * IIO PIO Deallocation register field masks : (IIO_IPDR)
  1186.  XXX present but not needed in bedrock?  See the manual.
  1187.  */
  1188. #define IIO_IPDR_PND    (1 << 4)
  1189. /*
  1190.  * IIO CRB deallocation register field masks: (IIO_ICDR)
  1191.  */
  1192. #define IIO_ICDR_PND    (1 << 4)
  1193. /* 
  1194.  * IO BTE Length/Status (IIO_IBLS) register bit field definitions
  1195.  */
  1196. #define IBLS_BUSY (0x1 << 20)
  1197. #define IBLS_ERROR_SHFT 16
  1198. #define IBLS_ERROR (0x1 << IBLS_ERROR_SHFT)
  1199. #define IBLS_LENGTH_MASK 0xffff
  1200. /*
  1201.  * IO BTE Control/Terminate register (IBCT) register bit field definitions
  1202.  */
  1203. #define IBCT_POISON (0x1 << 8)
  1204. #define IBCT_NOTIFY (0x1 << 4)
  1205. #define IBCT_ZFIL_MODE (0x1 << 0)
  1206. /*
  1207.  * IIO Incoming Error Packet Header (IIO_IIEPH1/IIO_IIEPH2)
  1208.  */
  1209. #define IIEPH1_VALID (1 << 44)
  1210. #define IIEPH1_OVERRUN (1 << 40)
  1211. #define IIEPH1_ERR_TYPE_SHFT 32
  1212. #define IIEPH1_ERR_TYPE_MASK 0xf
  1213. #define IIEPH1_SOURCE_SHFT 20
  1214. #define IIEPH1_SOURCE_MASK 11
  1215. #define IIEPH1_SUPPL_SHFT 8
  1216. #define IIEPH1_SUPPL_MASK 11
  1217. #define IIEPH1_CMD_SHFT 0
  1218. #define IIEPH1_CMD_MASK 7
  1219. #define IIEPH2_TAIL (1 << 40)
  1220. #define IIEPH2_ADDRESS_SHFT 0
  1221. #define IIEPH2_ADDRESS_MASK 38
  1222. #define IIEPH1_ERR_SHORT_REQ 2
  1223. #define IIEPH1_ERR_SHORT_REPLY 3
  1224. #define IIEPH1_ERR_LONG_REQ 4
  1225. #define IIEPH1_ERR_LONG_REPLY 5
  1226. /*
  1227.  * IO Error Clear register bit field definitions
  1228.  */
  1229. #define IECLR_PI1_FWD_INT (1 << 31)  /* clear PI1_FORWARD_INT in iidsr */
  1230. #define IECLR_PI0_FWD_INT (1 << 30)  /* clear PI0_FORWARD_INT in iidsr */
  1231. #define IECLR_SPUR_RD_HDR (1 << 29)  /* clear valid bit in ixss reg */
  1232. #define IECLR_BTE1 (1 << 18)  /* clear bte error 1 */
  1233. #define IECLR_BTE0 (1 << 17)  /* clear bte error 0 */
  1234. #define IECLR_CRAZY (1 << 16)  /* clear crazy bit in wstat reg */
  1235. #define IECLR_PRB_F (1 << 15)  /* clear err bit in PRB_F reg */
  1236. #define IECLR_PRB_E (1 << 14)  /* clear err bit in PRB_E reg */
  1237. #define IECLR_PRB_D (1 << 13)  /* clear err bit in PRB_D reg */
  1238. #define IECLR_PRB_C (1 << 12)  /* clear err bit in PRB_C reg */
  1239. #define IECLR_PRB_B (1 << 11)  /* clear err bit in PRB_B reg */
  1240. #define IECLR_PRB_A (1 << 10)  /* clear err bit in PRB_A reg */
  1241. #define IECLR_PRB_9 (1 << 9)   /* clear err bit in PRB_9 reg */
  1242. #define IECLR_PRB_8 (1 << 8)   /* clear err bit in PRB_8 reg */
  1243. #define IECLR_PRB_0 (1 << 0)   /* clear err bit in PRB_0 reg */
  1244. /*
  1245.  * IIO CRB control register Fields: IIO_ICCR 
  1246.  */
  1247. #define IIO_ICCR_PENDING (0x10000)
  1248. #define IIO_ICCR_CMD_MASK (0xFF)
  1249. #define IIO_ICCR_CMD_SHFT (7)
  1250. #define IIO_ICCR_CMD_NOP (0x0) /* No Op */
  1251. #define IIO_ICCR_CMD_WAKE (0x100) /* Reactivate CRB entry and process */
  1252. #define IIO_ICCR_CMD_TIMEOUT (0x200) /* Make CRB timeout & mark invalid */
  1253. #define IIO_ICCR_CMD_EJECT (0x400) /* Contents of entry written to memory 
  1254.  * via a WB
  1255.  */
  1256. #define IIO_ICCR_CMD_FLUSH (0x800)
  1257. /*
  1258.  *
  1259.  * CRB Register description.
  1260.  *
  1261.  * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING
  1262.  * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING
  1263.  * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING
  1264.  * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING
  1265.  * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING
  1266.  *
  1267.  * Many of the fields in CRB are status bits used by hardware
  1268.  * for implementation of the protocol. It's very dangerous to
  1269.  * mess around with the CRB registers.
  1270.  *
  1271.  * It's OK to read the CRB registers and try to make sense out of the
  1272.  * fields in CRB.
  1273.  *
  1274.  * Updating CRB requires all activities in Hub IIO to be quiesced.
  1275.  * otherwise, a write to CRB could corrupt other CRB entries.
  1276.  * CRBs are here only as a back door peek to shub IIO's status.
  1277.  * Quiescing implies  no dmas no PIOs
  1278.  * either directly from the cpu or from sn0net.
  1279.  * this is not something that can be done easily. So, AVOID updating
  1280.  * CRBs.
  1281.  */
  1282. #ifndef __ASSEMBLY__
  1283. /*
  1284.  * Easy access macros for CRBs, all 4 registers (A-D)
  1285.  */
  1286. typedef ii_icrb0_a_u_t icrba_t;
  1287. #define a_lnetuce       ii_icrb0_a_fld_s.ia_ln_uce
  1288. #define a_mark          ii_icrb0_a_fld_s.ia_mark
  1289. #define a_xerr          ii_icrb0_a_fld_s.ia_xt_err
  1290. #define a_sidn          ii_icrb0_a_fld_s.ia_sidn
  1291. #define a_tnum          ii_icrb0_a_fld_s.ia_tnum
  1292. #define a_addr          ii_icrb0_a_fld_s.ia_addr
  1293. #define a_valid         ii_icrb0_a_fld_s.ia_vld
  1294. #define a_iow           ii_icrb0_a_fld_s.ia_iow
  1295. #define a_regvalue ii_icrb0_a_regval
  1296. typedef ii_icrb0_b_u_t icrbb_t;
  1297. #define b_error         ii_icrb0_b_fld_s.ib_error
  1298. #define b_ecode         ii_icrb0_b_fld_s.ib_errcode
  1299. #define b_cohtrans      ii_icrb0_b_fld_s.ib_ct
  1300. #define b_xtsize        ii_icrb0_b_fld_s.ib_size
  1301. #define b_source        ii_icrb0_b_fld_s.ib_source
  1302. #define b_imsgtype      ii_icrb0_b_fld_s.ib_imsgtype
  1303. #define b_imsg          ii_icrb0_b_fld_s.ib_imsg
  1304. #define b_initiator     ii_icrb0_b_fld_s.ib_init
  1305. #define b_regvalue ii_icrb0_b_regval
  1306. typedef ii_icrb0_c_u_t icrbc_t;
  1307. #define c_btenum        ii_icrb0_c_fld_s.ic_bte_num
  1308. #define c_pricnt        ii_icrb0_c_fld_s.ic_pr_cnt
  1309. #define c_pripsc        ii_icrb0_c_fld_s.ic_pr_psc
  1310. #define c_bteaddr       ii_icrb0_c_fld_s.ic_pa_be /* ic_pa_be fld has 2 names*/
  1311. #define c_benable       ii_icrb0_c_fld_s.ic_pa_be /* ic_pa_be fld has 2 names*/
  1312. #define c_suppl         ii_icrb0_c_fld_s.ic_suppl
  1313. #define c_barrop        ii_icrb0_c_fld_s.ic_bo
  1314. #define c_doresp        ii_icrb0_c_fld_s.ic_resprqd
  1315. #define c_gbr           ii_icrb0_c_fld_s.ic_gbr
  1316. #define c_regvalue ii_icrb0_c_regval
  1317. typedef ii_icrb0_d_u_t icrbd_t;
  1318. #define d_bteop         ii_icrb0_d_fld_s.id_bte_op
  1319. #define icrbd_ctxtvld   ii_icrb0_d_fld_s.id_cvld
  1320. #define icrbd_toutvld   ii_icrb0_d_fld_s.id_tvld
  1321. #define icrbd_context   ii_icrb0_d_fld_s.id_context
  1322. #define d_regvalue ii_icrb0_d_regval
  1323. #endif /* __ASSEMBLY__ */
  1324. /* Number of widgets supported by shub */
  1325. #define HUB_NUM_WIDGET          9
  1326. #define HUB_WIDGET_ID_MIN       0x8
  1327. #define HUB_WIDGET_ID_MAX       0xf
  1328. #define HUB_WIDGET_PART_NUM     0xc120
  1329. #define MAX_HUBS_PER_XBOW       2
  1330. #ifndef __ASSEMBLY__
  1331. /* A few more #defines for backwards compatibility */
  1332. #define iprb_t          ii_iprb0_u_t
  1333. #define iprb_regval     ii_iprb0_regval
  1334. #define iprb_mult_err ii_iprb0_fld_s.i_mult_err
  1335. #define iprb_spur_rd ii_iprb0_fld_s.i_spur_rd
  1336. #define iprb_spur_wr ii_iprb0_fld_s.i_spur_wr
  1337. #define iprb_rd_to ii_iprb0_fld_s.i_rd_to
  1338. #define iprb_ovflow     ii_iprb0_fld_s.i_of_cnt
  1339. #define iprb_error      ii_iprb0_fld_s.i_error
  1340. #define iprb_ff         ii_iprb0_fld_s.i_f
  1341. #define iprb_mode       ii_iprb0_fld_s.i_m
  1342. #define iprb_bnakctr    ii_iprb0_fld_s.i_nb
  1343. #define iprb_anakctr    ii_iprb0_fld_s.i_na
  1344. #define iprb_xtalkctr   ii_iprb0_fld_s.i_c
  1345. #endif
  1346. #define LNK_STAT_WORKING        0x2 /* LLP is working */
  1347. #define IIO_WSTAT_ECRAZY        (1ULL << 32)    /* Hub gone crazy */
  1348. #define IIO_WSTAT_TXRETRY       (1ULL << 9)     /* Hub Tx Retry timeout */
  1349. #define IIO_WSTAT_TXRETRY_MASK  (0x7F)   /* should be 0xFF?? */
  1350. #define IIO_WSTAT_TXRETRY_SHFT  (16)
  1351. #define IIO_WSTAT_TXRETRY_CNT(w)        (((w) >> IIO_WSTAT_TXRETRY_SHFT) & 
  1352.                                           IIO_WSTAT_TXRETRY_MASK)
  1353. /* Number of II perf. counters we can multiplex at once */
  1354. #define IO_PERF_SETS 32
  1355. #if __KERNEL__
  1356. #ifndef __ASSEMBLY__
  1357. #include <asm/sn/alenlist.h>
  1358. #include <asm/sn/dmamap.h>
  1359. #include <asm/sn/driver.h>
  1360. #include <asm/sn/xtalk/xtalk.h>
  1361. /* Bit for the widget in inbound access register */
  1362. #define IIO_IIWA_WIDGET(_w)     ((uint64_t)(1ULL << _w))
  1363. /* Bit for the widget in outbound access register */
  1364. #define IIO_IOWA_WIDGET(_w)     ((uint64_t)(1ULL << _w))
  1365. /* NOTE: The following define assumes that we are going to get
  1366.  * widget numbers from 8 thru F and the device numbers within
  1367.  * widget from 0 thru 7.
  1368.  */
  1369. #define IIO_IIDEM_WIDGETDEV_MASK(w, d)  ((uint64_t)(1ULL << (8 * ((w) - 8) + (d))))
  1370. /* IO Interrupt Destination Register */
  1371. #define IIO_IIDSR_SENT_SHIFT    28
  1372. #define IIO_IIDSR_SENT_MASK     0x30000000
  1373. #define IIO_IIDSR_ENB_SHIFT     24
  1374. #define IIO_IIDSR_ENB_MASK      0x01000000
  1375. #define IIO_IIDSR_NODE_SHIFT    9
  1376. #define IIO_IIDSR_NODE_MASK     0x000ff700
  1377. #define IIO_IIDSR_PI_ID_SHIFT   8
  1378. #define IIO_IIDSR_PI_ID_MASK    0x00000100
  1379. #define IIO_IIDSR_LVL_SHIFT     0
  1380. #define IIO_IIDSR_LVL_MASK      0x000000ff
  1381. /* Xtalk timeout threshhold register (IIO_IXTT) */
  1382. #define IXTT_RRSP_TO_SHFT 55    /* read response timeout */
  1383. #define IXTT_RRSP_TO_MASK (0x1FULL << IXTT_RRSP_TO_SHFT)
  1384. #define IXTT_RRSP_PS_SHFT 32    /* read responsed TO prescalar */
  1385. #define IXTT_RRSP_PS_MASK (0x7FFFFFULL << IXTT_RRSP_PS_SHFT)
  1386. #define IXTT_TAIL_TO_SHFT 0    /* tail timeout counter threshold */
  1387. #define IXTT_TAIL_TO_MASK (0x3FFFFFFULL << IXTT_TAIL_TO_SHFT)
  1388. /*
  1389.  * The IO LLP control status register and widget control register
  1390.  */
  1391. typedef union hubii_wcr_u {
  1392.         uint64_t      wcr_reg_value;
  1393.         struct {
  1394.   uint64_t wcr_widget_id:   4,     /* LLP crossbar credit */
  1395. wcr_tag_mode:  1, /* Tag mode */
  1396. wcr_rsvd1:  8, /* Reserved */
  1397. wcr_xbar_crd:  3, /* LLP crossbar credit */
  1398. wcr_f_bad_pkt:  1, /* Force bad llp pkt enable */
  1399. wcr_dir_con:  1, /* widget direct connect */
  1400. wcr_e_thresh:  5, /* elasticity threshold */
  1401. wcr_rsvd: 41; /* unused */
  1402.         } wcr_fields_s;
  1403. } hubii_wcr_t;
  1404. #define iwcr_dir_con    wcr_fields_s.wcr_dir_con
  1405. /* The structures below are defined to extract and modify the ii
  1406. performance registers */
  1407. /* io_perf_sel allows the caller to specify what tests will be
  1408.    performed */
  1409. typedef union io_perf_sel {
  1410.         uint64_t perf_sel_reg;
  1411.         struct {
  1412.                uint64_t perf_ippr0 :  4,
  1413. perf_ippr1 :  4,
  1414. perf_icct  :  8,
  1415. perf_rsvd  : 48;
  1416.         } perf_sel_bits;
  1417. } io_perf_sel_t;
  1418. /* io_perf_cnt is to extract the count from the shub registers. Due to
  1419.    hardware problems there is only one counter, not two. */
  1420. typedef union io_perf_cnt {
  1421.         uint64_t      perf_cnt;
  1422.         struct {
  1423.                uint64_t perf_cnt   : 20,
  1424. perf_rsvd2 : 12,
  1425. perf_rsvd1 : 32;
  1426.         } perf_cnt_bits;
  1427. } io_perf_cnt_t;
  1428. typedef union iprte_a {
  1429. shubreg_t entry;
  1430. struct {
  1431. shubreg_t i_rsvd_1                  :  3;
  1432. shubreg_t i_addr   : 38;
  1433. shubreg_t i_init   :  3;
  1434. shubreg_t i_source   :  8;
  1435. shubreg_t i_rsvd   :  2;
  1436. shubreg_t i_widget   :  4;
  1437. shubreg_t i_to_cnt   :  5;
  1438. shubreg_t       i_vld                     :      1;
  1439. } iprte_fields;
  1440. } iprte_a_t;
  1441. /* PIO MANAGEMENT */
  1442. typedef struct hub_piomap_s *hub_piomap_t;
  1443. extern hub_piomap_t
  1444. hub_piomap_alloc(devfs_handle_t dev,      /* set up mapping for this device */
  1445.                 device_desc_t dev_desc, /* device descriptor */
  1446.                 iopaddr_t xtalk_addr,   /* map for this xtalk_addr range */
  1447.                 size_t byte_count,
  1448.                 size_t byte_count_max,  /* maximum size of a mapping */
  1449.                 unsigned flags);                /* defined in sys/pio.h */
  1450. extern void hub_piomap_free(hub_piomap_t hub_piomap);
  1451. extern caddr_t
  1452. hub_piomap_addr(hub_piomap_t hub_piomap,        /* mapping resources */
  1453.                 iopaddr_t xtalk_addr,           /* map for this xtalk addr */
  1454.                 size_t byte_count);             /* map this many bytes */
  1455. extern void
  1456. hub_piomap_done(hub_piomap_t hub_piomap);
  1457. extern caddr_t
  1458. hub_piotrans_addr(      devfs_handle_t dev,       /* translate to this device */
  1459.                         device_desc_t dev_desc, /* device descriptor */
  1460.                         iopaddr_t xtalk_addr,   /* Crosstalk address */
  1461.                         size_t byte_count,      /* map this many bytes */
  1462.                         unsigned flags);        /* (currently unused) */
  1463. /* DMA MANAGEMENT */
  1464. typedef struct hub_dmamap_s *hub_dmamap_t;
  1465. extern hub_dmamap_t
  1466. hub_dmamap_alloc(       devfs_handle_t dev,       /* set up mappings for dev */
  1467.                         device_desc_t dev_desc, /* device descriptor */
  1468.                         size_t byte_count_max,  /* max size of a mapping */
  1469.                         unsigned flags);        /* defined in dma.h */
  1470. extern void
  1471. hub_dmamap_free(hub_dmamap_t dmamap);
  1472. extern iopaddr_t
  1473. hub_dmamap_addr(        hub_dmamap_t dmamap,    /* use mapping resources */
  1474.                         paddr_t paddr,          /* map for this address */
  1475.                         size_t byte_count);     /* map this many bytes */
  1476. extern alenlist_t
  1477. hub_dmamap_list(        hub_dmamap_t dmamap,    /* use mapping resources */
  1478.                         alenlist_t alenlist,    /* map this Addr/Length List */
  1479.                         unsigned flags);
  1480. extern void
  1481. hub_dmamap_done(        hub_dmamap_t dmamap);   /* done w/ mapping resources */
  1482. extern iopaddr_t
  1483. hub_dmatrans_addr(      devfs_handle_t dev,       /* translate for this device */
  1484.                         device_desc_t dev_desc, /* device descriptor */
  1485.                         paddr_t paddr,          /* system physical address */
  1486.                         size_t byte_count,      /* length */
  1487.                         unsigned flags);                /* defined in dma.h */
  1488. extern alenlist_t
  1489. hub_dmatrans_list(      devfs_handle_t dev,       /* translate for this device */
  1490.                         device_desc_t dev_desc, /* device descriptor */
  1491.                         alenlist_t palenlist,   /* system addr/length list */
  1492.                         unsigned flags);                /* defined in dma.h */
  1493. extern void
  1494. hub_dmamap_drain(       hub_dmamap_t map);
  1495. extern void
  1496. hub_dmaaddr_drain(      devfs_handle_t vhdl,
  1497.                         paddr_t addr,
  1498.                         size_t bytes);
  1499. extern void
  1500. hub_dmalist_drain(      devfs_handle_t vhdl,
  1501.                         alenlist_t list);
  1502. /* INTERRUPT MANAGEMENT */
  1503. typedef struct hub_intr_s *hub_intr_t;
  1504. extern hub_intr_t
  1505. hub_intr_alloc( devfs_handle_t dev,               /* which device */
  1506.                 device_desc_t dev_desc,         /* device descriptor */
  1507.                 devfs_handle_t owner_dev);        /* owner of this interrupt */
  1508. extern hub_intr_t
  1509. hub_intr_alloc_nothd(devfs_handle_t dev,          /* which device */
  1510.                 device_desc_t dev_desc,         /* device descriptor */
  1511.                 devfs_handle_t owner_dev);        /* owner of this interrupt */
  1512. extern void
  1513. hub_intr_free(hub_intr_t intr_hdl);
  1514. extern int
  1515. hub_intr_connect(       hub_intr_t intr_hdl,    /* xtalk intr resource hndl */
  1516.                         xtalk_intr_setfunc_t setfunc,
  1517.                                                 /* func to set intr hw */
  1518.                         void *setfunc_arg);     /* arg to setfunc */
  1519. extern void
  1520. hub_intr_disconnect(hub_intr_t intr_hdl);
  1521. extern devfs_handle_t
  1522. hub_intr_cpu_get(hub_intr_t intr_hdl);
  1523. /* CONFIGURATION MANAGEMENT */
  1524. extern void
  1525. hub_provider_startup(devfs_handle_t hub);
  1526. extern void
  1527. hub_provider_shutdown(devfs_handle_t hub);
  1528. #define HUB_PIO_CONVEYOR        0x1     /* PIO in conveyor belt mode */
  1529. #define HUB_PIO_FIRE_N_FORGET   0x2     /* PIO in fire-and-forget mode */
  1530. /* Flags that make sense to hub_widget_flags_set */
  1531. #define HUB_WIDGET_FLAGS        (                               
  1532.  HUB_PIO_CONVEYOR       |       
  1533.  HUB_PIO_FIRE_N_FORGET          
  1534. )
  1535. typedef int     hub_widget_flags_t;
  1536. /* Set the PIO mode for a widget.  These two functions perform the
  1537.  * same operation, but hub_device_flags_set() takes a hardware graph
  1538.  * vertex while hub_widget_flags_set() takes a nasid and widget
  1539.  * number.  In most cases, hub_device_flags_set() should be used.
  1540.  */
  1541. extern int      hub_widget_flags_set(nasid_t            nasid,
  1542.                                      xwidgetnum_t       widget_num,
  1543.                                      hub_widget_flags_t flags);
  1544. /* Depending on the flags set take the appropriate actions */
  1545. extern int      hub_device_flags_set(devfs_handle_t       widget_dev,
  1546.                                      hub_widget_flags_t flags);
  1547.                                                     
  1548. /* Error Handling. */
  1549. extern int hub_ioerror_handler(devfs_handle_t, int, int, struct io_error_s *);
  1550. extern int kl_ioerror_handler(cnodeid_t, cnodeid_t, cpuid_t,
  1551.                               int, paddr_t, caddr_t, ioerror_mode_t);
  1552. extern void hub_widget_reset(devfs_handle_t, xwidgetnum_t);
  1553. extern int hub_error_devenable(devfs_handle_t, int, int);
  1554. extern void hub_widgetdev_enable(devfs_handle_t, int);
  1555. extern void hub_widgetdev_shutdown(devfs_handle_t, int);
  1556. extern int  hub_dma_enabled(devfs_handle_t);
  1557. /* hubdev */
  1558. extern void hubdev_init(void);
  1559. extern void hubdev_register(int (*attach_method)(devfs_handle_t));
  1560. extern int hubdev_unregister(int (*attach_method)(devfs_handle_t));
  1561. extern int hubdev_docallouts(devfs_handle_t hub);
  1562. extern caddr_t hubdev_prombase_get(devfs_handle_t hub);
  1563. extern cnodeid_t hubdev_cnodeid_get(devfs_handle_t hub);
  1564. #endif /* __ASSEMBLY__ */
  1565. #endif /* _KERNEL */
  1566. #endif /* _ASM_IA64_SN_SN2_SHUBIO_H */