1 /****************************************************************************
2  ****************************************************************************
3  ***
4  ***   This header was automatically generated from a Linux kernel header
5  ***   of the same name, to make information necessary for userspace to
6  ***   call into the kernel available to libc.  It contains only constants,
7  ***   structures, and macros generated from the original header, and thus,
8  ***   contains no copyrightable information.
9  ***
10  ***   To edit the content of this header, modify the corresponding
11  ***   source file (e.g. under external/kernel-headers/original/) then
12  ***   run bionic/libc/kernel/tools/update_all.py
13  ***
14  ***   Any manual change here will be lost the next time this script will
15  ***   be run. You've been warned!
16  ***
17  ****************************************************************************
18  ****************************************************************************/
19 #ifndef _ASM_SGI_SN_SN0_HUBIO_H
20 #define _ASM_SGI_SN_SN0_HUBIO_H
21 #define IIO_WIDGET IIO_WID
22 #define IIO_WIDGET_STAT IIO_WSTAT
23 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
24 #define IIO_WIDGET_CTRL IIO_WCR
25 #define IIO_WIDGET_TOUT IIO_WRTO
26 #define IIO_WIDGET_FLUSH IIO_WTFR
27 #define IIO_PROTECT IIO_ILAPR
28 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
29 #define IIO_PROTECT_OVRRD IIO_ILAPO
30 #define IIO_OUTWIDGET_ACCESS IIO_IOWA
31 #define IIO_INWIDGET_ACCESS IIO_IIWA
32 #define IIO_INDEV_ERR_MASK IIO_IIDEM
33 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
34 #define IIO_LLP_CSR IIO_ILCSR
35 #define IIO_LLP_LOG IIO_ILLR
36 #define IIO_XTALKCC_TOUT IIO_IXCC
37 #define IIO_XTALKTT_TOUT IIO_IXTT
38 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
39 #define IIO_IO_ERR_CLR IIO_IECLR
40 #define IIO_BTE_CRB_CNT IIO_IBCN
41 #define IIO_LLP_CSR_IS_UP 0x00002000
42 #define IIO_LLP_CSR_LLP_STAT_MASK 0x00003000
43 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
44 #define IIO_LLP_CSR_LLP_STAT_SHFT 12
45 #define IIO_PROTECT_OVRRD_KEY 0x53474972756c6573ull
46 #define IIO_BTE_STAT_0 IIO_IBLS_0
47 #define IIO_BTE_SRC_0 IIO_IBSA_0
48 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
49 #define IIO_BTE_DEST_0 IIO_IBDA_0
50 #define IIO_BTE_CTRL_0 IIO_IBCT_0
51 #define IIO_BTE_NOTIFY_0 IIO_IBNA_0
52 #define IIO_BTE_INT_0 IIO_IBIA_0
53 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
54 #define IIO_BTE_OFF_0 0
55 #define IIO_BTE_OFF_1 IIO_IBLS_1 - IIO_IBLS_0
56 #define BTEOFF_STAT 0
57 #define BTEOFF_SRC (IIO_BTE_SRC_0 - IIO_BTE_STAT_0)
58 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
59 #define BTEOFF_DEST (IIO_BTE_DEST_0 - IIO_BTE_STAT_0)
60 #define BTEOFF_CTRL (IIO_BTE_CTRL_0 - IIO_BTE_STAT_0)
61 #define BTEOFF_NOTIFY (IIO_BTE_NOTIFY_0 - IIO_BTE_STAT_0)
62 #define BTEOFF_INT (IIO_BTE_INT_0 - IIO_BTE_STAT_0)
63 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
64 #define IIO_BASE 0x400000
65 #define IIO_BASE_BTE0 0x410000
66 #define IIO_BASE_BTE1 0x420000
67 #define IIO_BASE_PERF 0x430000
68 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
69 #define IIO_PERF_CNT 0x430008
70 #define IO_PERF_SETS 32
71 #define IIO_WID 0x400000
72 #define IIO_WSTAT 0x400008
73 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
74 #define IIO_WCR 0x400020
75 #define IIO_WSTAT_ECRAZY (1ULL << 32)
76 #define IIO_WSTAT_TXRETRY (1ULL << 9)
77 #define IIO_WSTAT_TXRETRY_MASK (0x7F)
78 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
79 #define IIO_WSTAT_TXRETRY_SHFT (16)
80 #define IIO_WSTAT_TXRETRY_CNT(w) (((w) >> IIO_WSTAT_TXRETRY_SHFT) &   IIO_WSTAT_TXRETRY_MASK)
81 #define IIO_ILAPR 0x400100
82 #define IIO_ILAPO 0x400108
83 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
84 #define IIO_IOWA 0x400110
85 #define IIO_IIWA 0x400118
86 #define IIO_IIDEM 0x400120
87 #define IIO_ILCSR 0x400128
88 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
89 #define IIO_ILLR 0x400130
90 #define IIO_IIDSR 0x400138
91 #define IIO_IIBUSERR 0x1400208
92 #define IIO_IIDSR_SENT_SHIFT 28
93 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
94 #define IIO_IIDSR_SENT_MASK 0x10000000
95 #define IIO_IIDSR_ENB_SHIFT 24
96 #define IIO_IIDSR_ENB_MASK 0x01000000
97 #define IIO_IIDSR_NODE_SHIFT 8
98 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
99 #define IIO_IIDSR_NODE_MASK 0x0000ff00
100 #define IIO_IIDSR_LVL_SHIFT 0
101 #define IIO_IIDSR_LVL_MASK 0x0000003f
102 #define IIO_IGFX_0 0x400140
103 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
104 #define IIO_IGFX_1 0x400148
105 #define IIO_IGFX_W_NUM_BITS 4
106 #define IIO_IGFX_W_NUM_MASK ((1<<IIO_IGFX_W_NUM_BITS)-1)
107 #define IIO_IGFX_W_NUM_SHIFT 0
108 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
109 #define IIO_IGFX_N_NUM_BITS 9
110 #define IIO_IGFX_N_NUM_MASK ((1<<IIO_IGFX_N_NUM_BITS)-1)
111 #define IIO_IGFX_N_NUM_SHIFT 4
112 #define IIO_IGFX_P_NUM_BITS 1
113 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
114 #define IIO_IGFX_P_NUM_MASK ((1<<IIO_IGFX_P_NUM_BITS)-1)
115 #define IIO_IGFX_P_NUM_SHIFT 16
116 #define IIO_IGFX_VLD_BITS 1
117 #define IIO_IGFX_VLD_MASK ((1<<IIO_IGFX_VLD_BITS)-1)
118 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
119 #define IIO_IGFX_VLD_SHIFT 20
120 #define IIO_IGFX_INIT(widget, node, cpu, valid) (  (((widget) & IIO_IGFX_W_NUM_MASK) << IIO_IGFX_W_NUM_SHIFT) |   (((node) & IIO_IGFX_N_NUM_MASK) << IIO_IGFX_N_NUM_SHIFT) |   (((cpu) & IIO_IGFX_P_NUM_MASK) << IIO_IGFX_P_NUM_SHIFT) |   (((valid) & IIO_IGFX_VLD_MASK) << IIO_IGFX_VLD_SHIFT) )
121 #define IIO_SCRATCH_REG0 0x400150
122 #define IIO_SCRATCH_REG1 0x400158
123 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
124 #define IIO_SCRATCH_MASK 0x0000000f00f11fff
125 #define IIO_SCRATCH_BIT0_0 0x0000000800000000
126 #define IIO_SCRATCH_BIT0_1 0x0000000400000000
127 #define IIO_SCRATCH_BIT0_2 0x0000000200000000
128 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
129 #define IIO_SCRATCH_BIT0_3 0x0000000100000000
130 #define IIO_SCRATCH_BIT0_4 0x0000000000800000
131 #define IIO_SCRATCH_BIT0_5 0x0000000000400000
132 #define IIO_SCRATCH_BIT0_6 0x0000000000200000
133 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
134 #define IIO_SCRATCH_BIT0_7 0x0000000000100000
135 #define IIO_SCRATCH_BIT0_8 0x0000000000010000
136 #define IIO_SCRATCH_BIT0_9 0x0000000000001000
137 #define IIO_SCRATCH_BIT0_R 0x0000000000000fff
138 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
139 #define IIO_NUM_ITTES 7
140 #define HUB_NUM_BIG_WINDOW IIO_NUM_ITTES - 1
141 #define SWIN0_BIGWIN HUB_NUM_BIG_WINDOW
142 #define ILCSR_WARM_RESET 0x100
143 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
144 #ifndef __ASSEMBLY__
145 typedef union hubii_wid_u {
146  u64 wid_reg_value;
147  struct {
148 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
149  u64 wid_rsvd: 32,
150  wid_rev_num: 4,
151  wid_part_num: 16,
152  wid_mfg_num: 11,
153 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
154  wid_rsvd1: 1;
155  } wid_fields_s;
156 } hubii_wid_t;
157 typedef union hubii_wcr_u {
158 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
159  u64 wcr_reg_value;
160  struct {
161  u64 wcr_rsvd: 41,
162  wcr_e_thresh: 5,
163 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
164  wcr_dir_con: 1,
165  wcr_f_bad_pkt: 1,
166  wcr_xbar_crd: 3,
167  wcr_rsvd1: 8,
168 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
169  wcr_tag_mode: 1,
170  wcr_widget_id: 4;
171  } wcr_fields_s;
172 } hubii_wcr_t;
173 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
174 #define iwcr_dir_con wcr_fields_s.wcr_dir_con
175 typedef union hubii_wstat_u {
176  u64 reg_value;
177  struct {
178 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
179  u64 rsvd1: 31,
180  crazy: 1,
181  rsvd2: 8,
182  llp_tx_cnt: 8,
183 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
184  rsvd3: 6,
185  tx_max_rtry: 1,
186  rsvd4: 2,
187  xt_tail_to: 1,
188 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
189  xt_crd_to: 1,
190  pending: 4;
191  } wstat_fields_s;
192 } hubii_wstat_t;
193 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
194 typedef union hubii_ilcsr_u {
195  u64 icsr_reg_value;
196  struct {
197  u64 icsr_rsvd: 22,
198 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
199  icsr_max_burst: 10,
200  icsr_rsvd4: 6,
201  icsr_max_retry: 10,
202  icsr_rsvd3: 2,
203 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
204  icsr_lnk_stat: 2,
205  icsr_bm8: 1,
206  icsr_llp_en: 1,
207  icsr_rsvd2: 1,
208 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
209  icsr_wrm_reset: 1,
210  icsr_rsvd1: 2,
211  icsr_null_to: 6;
212  } icsr_fields_s;
213 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
214 } hubii_ilcsr_t;
215 typedef union hubii_iowa_u {
216  u64 iowa_reg_value;
217  struct {
218 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
219  u64 iowa_rsvd: 48,
220  iowa_wxoac: 8,
221  iowa_rsvd1: 7,
222  iowa_w0oac: 1;
223 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
224  } iowa_fields_s;
225 } hubii_iowa_t;
226 typedef union hubii_iiwa_u {
227  u64 iiwa_reg_value;
228 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
229  struct {
230  u64 iiwa_rsvd: 48,
231  iiwa_wxiac: 8,
232  iiwa_rsvd1: 7,
233 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
234  iiwa_w0iac: 1;
235  } iiwa_fields_s;
236 } hubii_iiwa_t;
237 typedef union hubii_illr_u {
238 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
239  u64 illr_reg_value;
240  struct {
241  u64 illr_rsvd: 32,
242  illr_cb_cnt: 16,
243 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
244  illr_sn_cnt: 16;
245  } illr_fields_s;
246 } hubii_illr_t;
247 typedef union io_perf_sel {
248 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
249  u64 perf_sel_reg;
250  struct {
251  u64 perf_rsvd : 48,
252  perf_icct : 8,
253 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
254  perf_ippr1 : 4,
255  perf_ippr0 : 4;
256  } perf_sel_bits;
257 } io_perf_sel_t;
258 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
259 typedef union io_perf_cnt {
260  u64 perf_cnt;
261  struct {
262  u64 perf_rsvd1 : 32,
263 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
264  perf_rsvd2 : 12,
265  perf_cnt : 20;
266  } perf_cnt_bits;
267 } io_perf_cnt_t;
268 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
269 #endif
270 #define LNK_STAT_WORKING 0x2
271 #define IIO_LLP_CB_MAX 0xffff
272 #define IIO_LLP_SN_MAX 0xffff
273 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
274 #define IIO_NUM_IPRBS (9)
275 #define IIO_IOPRB_0 0x400198
276 #define IIO_IOPRB_8 0x4001a0
277 #define IIO_IOPRB_9 0x4001a8
278 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
279 #define IIO_IOPRB_A 0x4001b0
280 #define IIO_IOPRB_B 0x4001b8
281 #define IIO_IOPRB_C 0x4001c0
282 #define IIO_IOPRB_D 0x4001c8
283 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
284 #define IIO_IOPRB_E 0x4001d0
285 #define IIO_IOPRB_F 0x4001d8
286 #define IIO_IXCC 0x4001e0
287 #define IIO_IXTCC IIO_IXCC
288 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
289 #define IIO_IMEM 0x4001e8
290 #define IIO_IXTT 0x4001f0
291 #define IIO_IECLR 0x4001f8
292 #define IIO_IBCN 0x400200
293 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
294 #define IIO_IMEM_W0ESD 0x1
295 #define IIO_IMEM_B0ESD (1 << 4)
296 #define IIO_IMEM_B1ESD (1 << 8)
297 #define IIO_IPCA 0x400300
298 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
299 #define IIO_NUM_PRTES 8
300 #define IIO_PRTE_0 0x400308
301 #define IIO_PRTE(_x) (IIO_PRTE_0 + (8 * (_x)))
302 #define IIO_WIDPRTE(x) IIO_PRTE(((x) - 8))
303 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
304 #define IIO_IPDR 0x400388
305 #define IIO_ICDR 0x400390
306 #define IIO_IFDR 0x400398
307 #define IIO_IIAP 0x4003a0
308 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
309 #define IIO_IMMR IIO_IIAP
310 #define IIO_ICMR 0x4003a8
311 #define IIO_ICCR 0x4003b0
312 #define IIO_ICTO 0x4003b8
313 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
314 #define IIO_ICTP 0x4003c0
315 #define IIO_ICMR_PC_VLD_SHFT 36
316 #define IIO_ICMR_PC_VLD_MASK (0x7fffUL << IIO_ICMR_PC_VLD_SHFT)
317 #define IIO_ICMR_CRB_VLD_SHFT 20
318 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
319 #define IIO_ICMR_CRB_VLD_MASK (0x7fffUL << IIO_ICMR_CRB_VLD_SHFT)
320 #define IIO_ICMR_FC_CNT_SHFT 16
321 #define IIO_ICMR_FC_CNT_MASK (0xf << IIO_ICMR_FC_CNT_SHFT)
322 #define IIO_ICMR_C_CNT_SHFT 4
323 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
324 #define IIO_ICMR_C_CNT_MASK (0xf << IIO_ICMR_C_CNT_SHFT)
325 #define IIO_ICMR_P_CNT_SHFT 0
326 #define IIO_ICMR_P_CNT_MASK (0xf << IIO_ICMR_P_CNT_SHFT)
327 #define IIO_ICMR_PRECISE (1UL << 52)
328 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
329 #define IIO_ICMR_CLR_RPPD (1UL << 13)
330 #define IIO_ICMR_CLR_RQPD (1UL << 12)
331 #define IIO_IPDR_PND (1 << 4)
332 #define IIO_ICDR_PND (1 << 4)
333 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
334 #define IIO_ICCR_PENDING (0x10000)
335 #define IIO_ICCR_CMD_MASK (0xFF)
336 #define IIO_ICCR_CMD_SHFT (7)
337 #define IIO_ICCR_CMD_NOP (0x0)
338 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
339 #define IIO_ICCR_CMD_WAKE (0x100)
340 #define IIO_ICCR_CMD_TIMEOUT (0x200)
341 #define IIO_ICCR_CMD_EJECT (0x400)
342 #define IIO_ICCR_CMD_FLUSH (0x800)
343 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
344 #define IIO_NUM_CRBS 15
345 #define IIO_NUM_NORMAL_CRBS 12
346 #define IIO_NUM_PC_CRBS 4
347 #define IIO_ICRB_OFFSET 8
348 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
349 #define IIO_ICRB_0 0x400400
350 #define IIO_ICRB_A(_x) (IIO_ICRB_0 + (4 * IIO_ICRB_OFFSET * (_x)))
351 #define IIO_ICRB_B(_x) (IIO_ICRB_A(_x) + 1*IIO_ICRB_OFFSET)
352 #define IIO_ICRB_C(_x) (IIO_ICRB_A(_x) + 2*IIO_ICRB_OFFSET)
353 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
354 #define IIO_ICRB_D(_x) (IIO_ICRB_A(_x) + 3*IIO_ICRB_OFFSET)
355 #ifndef __ASSEMBLY__
356 typedef union icrba_u {
357  u64 reg_value;
358 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
359  struct {
360  u64 resvd: 6,
361  stall_bte0: 1,
362  stall_bte1: 1,
363 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
364  error: 1,
365  ecode: 3,
366  lnetuce: 1,
367  mark: 1,
368 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
369  xerr: 1,
370  sidn: 4,
371  tnum: 5,
372  addr: 38,
373 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
374  valid: 1,
375  iow: 1;
376  } icrba_fields_s;
377 } icrba_t;
378 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
379 typedef union h1_icrba_u {
380  u64 reg_value;
381  struct {
382  u64 resvd: 6,
383 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
384  unused: 1,
385  error: 1,
386  ecode: 4,
387  lnetuce: 1,
388 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
389  mark: 1,
390  xerr: 1,
391  sidn: 4,
392  tnum: 5,
393 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
394  addr: 38,
395  valid: 1,
396  iow: 1;
397  } h1_icrba_fields_s;
398 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
399 } h1_icrba_t;
400 #define ICRBN_A_CERR_SHFT 54
401 #define ICRBN_A_ERR_MASK 0x3ff
402 #endif
403 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
404 #define IIO_ICRB_ADDR_SHFT 2
405 #define IIO_ICRB_ECODE_DERR 0
406 #define IIO_ICRB_ECODE_PERR 1
407 #define IIO_ICRB_ECODE_WERR 2
408 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
409 #define IIO_ICRB_ECODE_AERR 3
410 #define IIO_ICRB_ECODE_PWERR 4
411 #define IIO_ICRB_ECODE_PRERR 5
412 #define IIO_ICRB_ECODE_TOUT 6
413 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
414 #define IIO_ICRB_ECODE_XTERR 7
415 #ifndef __ASSEMBLY__
416 typedef union icrbb_u {
417  u64 reg_value;
418 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
419  struct {
420  u64 rsvd1: 5,
421  btenum: 1,
422  cohtrans: 1,
423 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
424  xtsize: 2,
425  srcnode: 9,
426  srcinit: 2,
427  useold: 1,
428 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
429  imsgtype: 2,
430  imsg: 8,
431  initator: 3,
432  reqtype: 5,
433 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
434  rsvd2: 7,
435  ackcnt: 11,
436  resp: 1,
437  ack: 1,
438 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
439  hold: 1,
440  wb_pend:1,
441  intvn: 1,
442  stall_ib: 1,
443 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
444  stall_intr: 1;
445  } icrbb_field_s;
446 } icrbb_t;
447 typedef union h1_icrbb_u {
448 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
449  u64 reg_value;
450  struct {
451  u64 rsvd1: 5,
452  btenum: 1,
453 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
454  cohtrans: 1,
455  xtsize: 2,
456  srcnode: 9,
457  srcinit: 2,
458 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
459  useold: 1,
460  imsgtype: 2,
461  imsg: 8,
462  initator: 3,
463 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
464  rsvd2: 1,
465  pcache: 1,
466  reqtype: 5,
467  stl_ib: 1,
468 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
469  stl_intr: 1,
470  stl_bte0: 1,
471  stl_bte1: 1,
472  intrvn: 1,
473 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
474  ackcnt: 11,
475  resp: 1,
476  ack: 1,
477  hold: 1,
478 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
479  wb_pend:1,
480  sleep: 1,
481  pnd_reply: 1,
482  pnd_req: 1;
483 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
484  } h1_icrbb_field_s;
485 } h1_icrbb_t;
486 #define b_imsgtype icrbb_field_s.imsgtype
487 #define b_btenum icrbb_field_s.btenum
488 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
489 #define b_cohtrans icrbb_field_s.cohtrans
490 #define b_xtsize icrbb_field_s.xtsize
491 #define b_srcnode icrbb_field_s.srcnode
492 #define b_srcinit icrbb_field_s.srcinit
493 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
494 #define b_imsgtype icrbb_field_s.imsgtype
495 #define b_imsg icrbb_field_s.imsg
496 #define b_initiator icrbb_field_s.initiator
497 #endif
498 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
499 #define IIO_ICRB_XTSIZE_DW 0
500 #define IIO_ICRB_XTSIZE_32 1
501 #define IIO_ICRB_XTSIZE_128 2
502 #define IIO_ICRB_PROC0 0
503 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
504 #define IIO_ICRB_PROC1 1
505 #define IIO_ICRB_GB_REQ 2
506 #define IIO_ICRB_IO_REQ 3
507 #define IIO_ICRB_IMSGT_XTALK 0
508 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
509 #define IIO_ICRB_IMSGT_BTE 1
510 #define IIO_ICRB_IMSGT_SN0NET 2
511 #define IIO_ICRB_IMSGT_CRB 3
512 #define IIO_ICRB_INIT_XTALK 0
513 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
514 #define IIO_ICRB_INIT_BTE0 0x1
515 #define IIO_ICRB_INIT_SN0NET 0x2
516 #define IIO_ICRB_INIT_CRB 0x3
517 #define IIO_ICRB_INIT_BTE1 0x5
518 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
519 #define IIO_ICRB_REQ_DWRD 0
520 #define IIO_ICRB_REQ_QCLRD 1
521 #define IIO_ICRB_REQ_BLKRD 2
522 #define IIO_ICRB_REQ_RSHU 6
523 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
524 #define IIO_ICRB_REQ_REXU 7
525 #define IIO_ICRB_REQ_RDEX 8
526 #define IIO_ICRB_REQ_WINC 9
527 #define IIO_ICRB_REQ_BWINV 10
528 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
529 #define IIO_ICRB_REQ_PIORD 11
530 #define IIO_ICRB_REQ_PIOWR 12
531 #define IIO_ICRB_REQ_PRDM 13
532 #define IIO_ICRB_REQ_PWRM 14
533 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
534 #define IIO_ICRB_REQ_PTPWR 15
535 #define IIO_ICRB_REQ_WB 16
536 #define IIO_ICRB_REQ_DEX 17
537 #ifndef __ASSEMBLY__
538 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
539 typedef union icrbc_s {
540  u64 reg_value;
541  struct {
542  u64 rsvd: 6,
543 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
544  sleep: 1,
545  pricnt: 4,
546  pripsc: 4,
547  bteop: 1,
548 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
549  push_be: 34,
550  suppl: 11,
551  barrop: 1,
552  doresp: 1,
553 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
554  gbr: 1;
555  } icrbc_field_s;
556 } icrbc_t;
557 #define c_pricnt icrbc_field_s.pricnt
558 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
559 #define c_pripsc icrbc_field_s.pripsc
560 #define c_bteop icrbc_field_s.bteop
561 #define c_bteaddr icrbc_field_s.push_be
562 #define c_benable icrbc_field_s.push_be
563 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
564 #define c_suppl icrbc_field_s.suppl
565 #define c_barrop icrbc_field_s.barrop
566 #define c_doresp icrbc_field_s.doresp
567 #define c_gbr icrbc_field_s.gbr
568 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
569 #endif
570 #ifndef __ASSEMBLY__
571 typedef union icrbd_s {
572  u64 reg_value;
573 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
574  struct {
575  u64 rsvd: 38,
576  toutvld: 1,
577  ctxtvld: 1,
578 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
579  rsvd2: 1,
580  context: 15,
581  timeout: 8;
582  } icrbd_field_s;
583 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
584 } icrbd_t;
585 #define icrbd_toutvld icrbd_field_s.toutvld
586 #define icrbd_ctxtvld icrbd_field_s.ctxtvld
587 #define icrbd_context icrbd_field_s.context
588 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
589 typedef union hubii_ifdr_u {
590  u64 hi_ifdr_value;
591  struct {
592  u64 ifdr_rsvd: 49,
593 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
594  ifdr_maxrp: 7,
595  ifdr_rsvd1: 1,
596  ifdr_maxrq: 7;
597  } hi_ifdr_fields;
598 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
599 } hubii_ifdr_t;
600 #endif
601 #define IIO_IBLS_0 0x410000
602 #define IIO_IBSA_0 0x410008
603 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
604 #define IIO_IBDA_0 0x410010
605 #define IIO_IBCT_0 0x410018
606 #define IIO_IBNA_0 0x410020
607 #define IIO_IBNR_0 IIO_IBNA_0
608 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
609 #define IIO_IBIA_0 0x410028
610 #define IIO_IBLS_1 0x420000
611 #define IIO_IBSA_1 0x420008
612 #define IIO_IBDA_1 0x420010
613 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
614 #define IIO_IBCT_1 0x420018
615 #define IIO_IBNA_1 0x420020
616 #define IIO_IBNR_1 IIO_IBNA_1
617 #define IIO_IBIA_1 0x420028
618 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
619 #define IIO_IPCR 0x430000
620 #define IIO_IPPR 0x430008
621 #define IECLR_BTE1 (1 << 18)
622 #define IECLR_BTE0 (1 << 17)
623 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
624 #define IECLR_CRAZY (1 << 16)
625 #define IECLR_PRB_F (1 << 15)
626 #define IECLR_PRB_E (1 << 14)
627 #define IECLR_PRB_D (1 << 13)
628 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
629 #define IECLR_PRB_C (1 << 12)
630 #define IECLR_PRB_B (1 << 11)
631 #define IECLR_PRB_A (1 << 10)
632 #define IECLR_PRB_9 (1 << 9)
633 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
634 #define IECLR_PRB_8 (1 << 8)
635 #define IECLR_PRB_0 (1 << 0)
636 #ifndef __ASSEMBLY__
637 typedef union iprte_a {
638 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
639  u64 entry;
640  struct {
641  u64 rsvd1 : 7,
642  valid : 1,
643 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
644  rsvd2 : 1,
645  srcnode : 9,
646  initiator : 2,
647  rsvd3 : 3,
648 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
649  addr : 38,
650  rsvd4 : 3;
651  } iprte_fields;
652 } iprte_a_t;
653 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
654 #define iprte_valid iprte_fields.valid
655 #define iprte_timeout iprte_fields.timeout
656 #define iprte_srcnode iprte_fields.srcnode
657 #define iprte_init iprte_fields.initiator
658 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
659 #define iprte_addr iprte_fields.addr
660 #endif
661 #define IPRTE_ADDRSHFT 3
662 #ifndef __ASSEMBLY__
663 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
664 typedef union iprb_u {
665  u64 reg_value;
666  struct {
667  u64 rsvd1: 15,
668 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
669  error: 1,
670  ovflow: 5,
671  fire_and_forget: 1,
672  mode: 2,
673 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
674  rsvd2: 2,
675  bnakctr: 14,
676  rsvd3: 2,
677  anakctr: 14,
678 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
679  xtalkctr: 8;
680  } iprb_fields_s;
681 } iprb_t;
682 #define iprb_regval reg_value
683 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
684 #define iprb_error iprb_fields_s.error
685 #define iprb_ovflow iprb_fields_s.ovflow
686 #define iprb_ff iprb_fields_s.fire_and_forget
687 #define iprb_mode iprb_fields_s.mode
688 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
689 #define iprb_bnakctr iprb_fields_s.bnakctr
690 #define iprb_anakctr iprb_fields_s.anakctr
691 #define iprb_xtalkctr iprb_fields_s.xtalkctr
692 #endif
693 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
694 #define IPRB_MODE_NORMAL (0)
695 #define IPRB_MODE_COLLECT_A (1)
696 #define IPRB_MODE_SERVICE_A (2)
697 #define IPRB_MODE_SERVICE_B (3)
698 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
699 #ifndef __ASSEMBLY__
700 typedef union icrbp_a {
701  u64 ip_reg;
702  struct {
703 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
704  u64 error: 1,
705  ln_uce: 1,
706  ln_ae: 1,
707  ln_werr:1,
708 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
709  ln_aerr:1,
710  ln_perr:1,
711  timeout:1,
712  l_bdpkt:1,
713 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
714  c_bdpkt:1,
715  c_err: 1,
716  rsvd1: 12,
717  valid: 1,
718 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
719  sidn: 4,
720  tnum: 5,
721  bo: 1,
722  resprqd:1,
723 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
724  gbr: 1,
725  size: 2,
726  excl: 4,
727  stall: 3,
728 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
729  intvn: 1,
730  resp: 1,
731  ack: 1,
732  hold: 1,
733 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
734  wb: 1,
735  ack_cnt:11,
736  tscaler:4;
737  } ip_fmt;
738 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
739 } icrbp_a_t;
740 #endif
741 #define ICRBP_A_CERR_SHFT 54
742 #define ICRBP_A_ERR_MASK 0x3ff
743 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
744 #ifndef __ASSEMBLY__
745 typedef union hubii_idsr {
746  u64 iin_reg;
747  struct {
748 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
749  u64 rsvd1 : 35,
750  isent : 1,
751  rsvd2 : 3,
752  ienable: 1,
753 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
754  rsvd : 7,
755  node : 9,
756  rsvd4 : 1,
757  level : 7;
758 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
759  } iin_fmt;
760 } hubii_idsr_t;
761 #endif
762 #define IBLS_BUSY (0x1 << 20)
763 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
764 #define IBLS_ERROR_SHFT 16
765 #define IBLS_ERROR (0x1 << IBLS_ERROR_SHFT)
766 #define IBLS_LENGTH_MASK 0xffff
767 #define IBCT_POISON (0x1 << 8)
768 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
769 #define IBCT_NOTIFY (0x1 << 4)
770 #define IBCT_ZFIL_MODE (0x1 << 0)
771 #define IBIA_LEVEL_SHFT 16
772 #define IBIA_LEVEL_MASK (0x7f << IBIA_LEVEL_SHFT)
773 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
774 #define IBIA_NODE_ID_SHFT 0
775 #define IBIA_NODE_ID_MASK (0x1ff)
776 #define HUB_NUM_WIDGET 9
777 #define HUB_WIDGET_ID_MIN 0x8
778 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
779 #define HUB_WIDGET_ID_MAX 0xf
780 #define HUB_WIDGET_PART_NUM 0xc101
781 #define MAX_HUBS_PER_XBOW 2
782 #define IIO_WCR_WID_GET(nasid) (REMOTE_HUB_L(nasid, III_WCR) & 0xf)
783 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
784 #define IIO_WST_ERROR_MASK (UINT64_CAST 1 << 32)
785 #define HUBII_XBOW_CREDIT 3
786 #define HUBII_XBOW_REV2_CREDIT 4
787 #endif
788 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
789