Merge from Etherboot 5.4
[people/meteger/gpxe.git] / src / drivers / net / mlx_ipoib / MT23108_PRM.h
1 /*
2   This software is available to you under a choice of one of two
3   licenses.  You may choose to be licensed under the terms of the GNU
4   General Public License (GPL) Version 2, available at
5   <http://www.fsf.org/copyleft/gpl.html>, or the OpenIB.org BSD
6   license, available in the LICENSE.TXT file accompanying this
7   software.  These details are also available at
8   <http://openib.org/license.html>.
9
10   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
11   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
13   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
14   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
15   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
16   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17   SOFTWARE.
18
19   Copyright (c) 2004 Mellanox Technologies Ltd.  All rights reserved.
20 */
21
22 /***
23  *** This file was generated at "Tue Sep  6 09:14:00 2005"
24  *** by:
25  ***    % csp_bf -copyright=/mswg/misc/license-header.txt -prefix tavorprm_ -bits -fixnames MT23108_PRM.csp
26  ***/
27
28 #ifndef H_prefix_tavorprm_bits_fixnames_MT23108_PRM_csp_H
29 #define H_prefix_tavorprm_bits_fixnames_MT23108_PRM_csp_H
30
31 #include "bit_ops.h"
32
33 /* Send doorbell */
34
35 struct tavorprm_send_doorbell_st {      /* Little Endian */
36     pseudo_bit_t        nopcode[0x00005];      /* Opcode of descriptor to be executed */
37     pseudo_bit_t        f[0x00001];            /* Fence bit. If set, descriptor is fenced */
38     pseudo_bit_t        nda[0x0001a];          /* Bits 31:6 of descriptors virtual address */
39 /* -------------- */
40     pseudo_bit_t        nds[0x00006];          /* Next descriptor size (in 16-byte chunks) */
41     pseudo_bit_t        reserved0[0x00002];
42     pseudo_bit_t        qpn[0x00018];          /* QP number this doorbell is rung on */
43 /* -------------- */
44 }; 
45
46 /* ACCESS_DDR_inject_errors_input_modifier */
47
48 struct tavorprm_access_ddr_inject_errors_input_modifier_st {    /* Little Endian */
49     pseudo_bit_t        index3[0x00007];
50     pseudo_bit_t        q3[0x00001];
51     pseudo_bit_t        index2[0x00007];
52     pseudo_bit_t        q2[0x00001];
53     pseudo_bit_t        index1[0x00007];
54     pseudo_bit_t        q1[0x00001];
55     pseudo_bit_t        index0[0x00007];
56     pseudo_bit_t        q0[0x00001];
57 /* -------------- */
58 }; 
59
60 /* ACCESS_DDR_inject_errors_input_parameter */
61
62 struct tavorprm_access_ddr_inject_errors_input_parameter_st {   /* Little Endian */
63     pseudo_bit_t        ba[0x00002];           /* Bank Address */
64     pseudo_bit_t        da[0x00002];           /* Dimm Address */
65     pseudo_bit_t        reserved0[0x0001c];
66 /* -------------- */
67     pseudo_bit_t        ra[0x00010];           /* Row Address */
68     pseudo_bit_t        ca[0x00010];           /* Column Address */
69 /* -------------- */
70 }; 
71
72 /* Address Path */
73
74 struct tavorprm_address_path_st {       /* Little Endian */
75     pseudo_bit_t        pkey_index[0x00007];   /* PKey table index */
76     pseudo_bit_t        reserved0[0x00011];
77     pseudo_bit_t        port_number[0x00002];  /* Specific port associated with this QP/EE.
78                                                  1 - Port 1
79                                                  2 - Port 2
80                                                  other - reserved */
81     pseudo_bit_t        reserved1[0x00006];
82 /* -------------- */
83     pseudo_bit_t        rlid[0x00010];         /* Remote (Destination) LID */
84     pseudo_bit_t        my_lid_path_bits[0x00007];/* Source LID - the lower 7 bits (upper bits are taken from PortInfo) */
85     pseudo_bit_t        g[0x00001];            /* Global address enable - if set, GRH will be formed for packet header */
86     pseudo_bit_t        reserved2[0x00005];
87     pseudo_bit_t        rnr_retry[0x00003];    /* RNR retry count (see C9-132 in IB spec Vol 1)
88                                                  0-6 - number of retries
89                                                  7    - infinite */
90 /* -------------- */
91     pseudo_bit_t        hop_limit[0x00008];    /* IPv6 hop limit */
92     pseudo_bit_t        max_stat_rate[0x00003];/* Maximum static rate control. 
93                                                  0 - 4X injection rate
94                                                  1 - 1X injection rate
95                                                  other - reserved
96                                                   */
97     pseudo_bit_t        reserved3[0x00005];
98     pseudo_bit_t        mgid_index[0x00006];   /* Index to port GID table */
99     pseudo_bit_t        reserved4[0x00005];
100     pseudo_bit_t        ack_timeout[0x00005];  /* Local ACK timeout - Transport timer for activation of retransmission mechanism. Refer to IB spec Vol1 9.7.6.1.3 for further details.
101                                                  The transport timer is set to 4.096us*2^ack_timeout, if ack_timeout is 0 then transport timer is disabled. */
102 /* -------------- */
103     pseudo_bit_t        flow_label[0x00014];   /* IPv6 flow label */
104     pseudo_bit_t        tclass[0x00008];       /* IPv6 TClass */
105     pseudo_bit_t        sl[0x00004];           /* InfiniBand Service Level (SL) */
106 /* -------------- */
107     pseudo_bit_t        rgid_127_96[0x00020];  /* Remote GID[127:96] */
108 /* -------------- */
109     pseudo_bit_t        rgid_95_64[0x00020];   /* Remote GID[95:64] */
110 /* -------------- */
111     pseudo_bit_t        rgid_63_32[0x00020];   /* Remote GID[63:32] */
112 /* -------------- */
113     pseudo_bit_t        rgid_31_0[0x00020];    /* Remote GID[31:0] */
114 /* -------------- */
115 }; 
116
117 /* HCA Command Register (HCR) */
118
119 struct tavorprm_hca_command_register_st {       /* Little Endian */
120     pseudo_bit_t        in_param_h[0x00020];   /* Input Parameter: parameter[63:32] or pointer[63:32] to input mailbox (see command description) */
121 /* -------------- */
122     pseudo_bit_t        in_param_l[0x00020];   /* Input Parameter: parameter[31:0] or pointer[31:0] to input mailbox (see command description) */
123 /* -------------- */
124     pseudo_bit_t        input_modifier[0x00020];/* Input Parameter Modifier */
125 /* -------------- */
126     pseudo_bit_t        out_param_h[0x00020];  /* Output Parameter: parameter[63:32] or pointer[63:32] to output mailbox (see command description) */
127 /* -------------- */
128     pseudo_bit_t        out_param_l[0x00020];  /* Output Parameter: parameter[31:0] or pointer[31:0] to output mailbox (see command description) */
129 /* -------------- */
130     pseudo_bit_t        reserved0[0x00010];
131     pseudo_bit_t        token[0x00010];        /* Software assigned token to the command, to uniquely identify it. The token is returned to the software in the EQE reported. */
132 /* -------------- */
133     pseudo_bit_t        opcode[0x0000c];       /* Command opcode */
134     pseudo_bit_t        opcode_modifier[0x00004];/* Opcode Modifier, see specific description for each command. */
135     pseudo_bit_t        reserved1[0x00006];
136     pseudo_bit_t        e[0x00001];            /* Event Request
137                                                  0 - Don't report event (software will poll the GO bit)
138                                                  1 - Report event to EQ when the command completes */
139     pseudo_bit_t        go[0x00001];           /* Go (0=Software ownership for the HCR, 1=Hardware ownership for the HCR)
140                                                  Software can write to the HCR only if Go bit is cleared.
141                                                  Software must set the Go bit to trigger the HW to execute the command. Software must not write to this register value other than 1 for the Go bit. */
142     pseudo_bit_t        status[0x00008];       /* Command execution status report. Valid only if command interface in under SW ownership (Go bit is cleared)
143                                                  0 - command completed without error. If different than zero, command execution completed with error. Syndrom encoding is depended on command executed and is defined for each command */
144 /* -------------- */
145 }; 
146
147 /* EQ Doorbell */
148
149 struct tavorprm_eq_cmd_doorbell_st {    /* Little Endian */
150     pseudo_bit_t        eqn[0x00006];          /* EQ accessed */
151     pseudo_bit_t        reserved0[0x00012];
152     pseudo_bit_t        eq_cmd[0x00008];       /* Command to be executed on EQ
153                                                  01 - increment Consumer_indx by one
154                                                  02 - Request notification for next event (Arm EQ)
155                                                  03 - Disarm CQ (CQ number is specified in EQ_param)
156                                                  04 - set Consumer_indx to value of EQ_param
157                                                  05 - move EQ to Always Armed state
158                                                  other - reserved */
159 /* -------------- */
160     pseudo_bit_t        eq_param[0x00020];     /* parameter to be used by EQ commands 03 and 04. Reserved for other commands. */
161 /* -------------- */
162 }; 
163
164 /* CQ Doorbell */
165
166 struct tavorprm_cq_cmd_doorbell_st {    /* Little Endian */
167     pseudo_bit_t        cqn[0x00018];          /* CQ number accessed */
168     pseudo_bit_t        cq_cmd[0x00008];       /* Command to be executed on CQ
169                                                  01 - Increment Consumer_indx by cq_param plus 1
170                                                  02 - Request notification for next Solicited or Unsolicited completion event. CQ_param must contain last succesfully polled consumer index. For newly generated CQs the CQ_param should  contain (initial consumer index-1) modulu CQ size. When working with CQs with overrun detection, CQ_param can be set to 0xFFFFFFFF (HW will use the last polled index). 
171                                                  03 - Request notification for next Solicited completion event CQ_param must contain last succesfully polled consumer index. For newly generated CQs the CQ_param should  contain (initial consumer index-1) modulu CQ size. When working with CQs with overrun detection, CQ_param can be set to 0xFFFFFFFF (HW will use the last polled index).
172                                                  04 - Set Consumer_indx to value of CQ_param
173                                                  05 - Request notification for multiple completions (see Advanced Topics chater)
174                                                  other - reserved */
175 /* -------------- */
176     pseudo_bit_t        cq_param[0x00020];     /* parameter to be used by CQ command */
177 /* -------------- */
178 }; 
179
180 /* Receive doorbell */
181
182 struct tavorprm_receive_doorbell_st {   /* Little Endian */
183     pseudo_bit_t        nds[0x00006];          /* Next descriptor size (in 16-byte chunks)
184                                                  Must be zero for SRQ doorbells */
185     pseudo_bit_t        nda[0x0001a];          /* Bits 31:6 of descriptors virtual address */
186 /* -------------- */
187     pseudo_bit_t        credits[0x00008];      /* Amount of credits ((length of the chain) posted with the doorbell on receive queue. Chain of up to 256 descriptors can be linked with single doorbell. Zero value in this field means 256. */
188     pseudo_bit_t        qpn[0x00018];          /* QP number or SRQ number this doorbell is rung on */
189 /* -------------- */
190 }; 
191
192 /* RD-send doorbell */
193
194 struct tavorprm_rd_send_doorbell_st {   /* Little Endian */
195     pseudo_bit_t        reserved0[0x00008];
196     pseudo_bit_t        een[0x00018];          /* End-to-end context number (reliable datagram)
197                                                  Must be zero for Nop and Bind operations */
198 /* -------------- */
199     pseudo_bit_t        reserved1[0x00008];
200     pseudo_bit_t        qpn[0x00018];          /* QP number this doorbell is rung on */
201 /* -------------- */
202     struct tavorprm_send_doorbell_st    snd_params;/* Send parameters */
203 /* -------------- */
204 }; 
205
206 /* Multicast Group Member QP */
207
208 struct tavorprm_mgmqp_st {      /* Little Endian */
209     pseudo_bit_t        qpn_i[0x00018];        /* QPN_i: QP number which is a member in this multicast group. Valid only if Qi bit is set. Length of the QPN_i list is set in INIT_HCA */
210     pseudo_bit_t        reserved0[0x00007];
211     pseudo_bit_t        qi[0x00001];           /* Qi: QPN_i is valid */
212 /* -------------- */
213 }; 
214
215 /* vsd */
216
217 struct tavorprm_vsd_st {        /* Little Endian */
218     pseudo_bit_t        vsd_dw0[0x00020];
219 /* -------------- */
220     pseudo_bit_t        vsd_dw1[0x00020];
221 /* -------------- */
222     pseudo_bit_t        vsd_dw2[0x00020];
223 /* -------------- */
224     pseudo_bit_t        vsd_dw3[0x00020];
225 /* -------------- */
226     pseudo_bit_t        vsd_dw4[0x00020];
227 /* -------------- */
228     pseudo_bit_t        vsd_dw5[0x00020];
229 /* -------------- */
230     pseudo_bit_t        vsd_dw6[0x00020];
231 /* -------------- */
232     pseudo_bit_t        vsd_dw7[0x00020];
233 /* -------------- */
234     pseudo_bit_t        vsd_dw8[0x00020];
235 /* -------------- */
236     pseudo_bit_t        vsd_dw9[0x00020];
237 /* -------------- */
238     pseudo_bit_t        vsd_dw10[0x00020];
239 /* -------------- */
240     pseudo_bit_t        vsd_dw11[0x00020];
241 /* -------------- */
242     pseudo_bit_t        vsd_dw12[0x00020];
243 /* -------------- */
244     pseudo_bit_t        vsd_dw13[0x00020];
245 /* -------------- */
246     pseudo_bit_t        vsd_dw14[0x00020];
247 /* -------------- */
248     pseudo_bit_t        vsd_dw15[0x00020];
249 /* -------------- */
250     pseudo_bit_t        vsd_dw16[0x00020];
251 /* -------------- */
252     pseudo_bit_t        vsd_dw17[0x00020];
253 /* -------------- */
254     pseudo_bit_t        vsd_dw18[0x00020];
255 /* -------------- */
256     pseudo_bit_t        vsd_dw19[0x00020];
257 /* -------------- */
258     pseudo_bit_t        vsd_dw20[0x00020];
259 /* -------------- */
260     pseudo_bit_t        vsd_dw21[0x00020];
261 /* -------------- */
262     pseudo_bit_t        vsd_dw22[0x00020];
263 /* -------------- */
264     pseudo_bit_t        vsd_dw23[0x00020];
265 /* -------------- */
266     pseudo_bit_t        vsd_dw24[0x00020];
267 /* -------------- */
268     pseudo_bit_t        vsd_dw25[0x00020];
269 /* -------------- */
270     pseudo_bit_t        vsd_dw26[0x00020];
271 /* -------------- */
272     pseudo_bit_t        vsd_dw27[0x00020];
273 /* -------------- */
274     pseudo_bit_t        vsd_dw28[0x00020];
275 /* -------------- */
276     pseudo_bit_t        vsd_dw29[0x00020];
277 /* -------------- */
278     pseudo_bit_t        vsd_dw30[0x00020];
279 /* -------------- */
280     pseudo_bit_t        vsd_dw31[0x00020];
281 /* -------------- */
282     pseudo_bit_t        vsd_dw32[0x00020];
283 /* -------------- */
284     pseudo_bit_t        vsd_dw33[0x00020];
285 /* -------------- */
286     pseudo_bit_t        vsd_dw34[0x00020];
287 /* -------------- */
288     pseudo_bit_t        vsd_dw35[0x00020];
289 /* -------------- */
290     pseudo_bit_t        vsd_dw36[0x00020];
291 /* -------------- */
292     pseudo_bit_t        vsd_dw37[0x00020];
293 /* -------------- */
294     pseudo_bit_t        vsd_dw38[0x00020];
295 /* -------------- */
296     pseudo_bit_t        vsd_dw39[0x00020];
297 /* -------------- */
298     pseudo_bit_t        vsd_dw40[0x00020];
299 /* -------------- */
300     pseudo_bit_t        vsd_dw41[0x00020];
301 /* -------------- */
302     pseudo_bit_t        vsd_dw42[0x00020];
303 /* -------------- */
304     pseudo_bit_t        vsd_dw43[0x00020];
305 /* -------------- */
306     pseudo_bit_t        vsd_dw44[0x00020];
307 /* -------------- */
308     pseudo_bit_t        vsd_dw45[0x00020];
309 /* -------------- */
310     pseudo_bit_t        vsd_dw46[0x00020];
311 /* -------------- */
312     pseudo_bit_t        vsd_dw47[0x00020];
313 /* -------------- */
314     pseudo_bit_t        vsd_dw48[0x00020];
315 /* -------------- */
316     pseudo_bit_t        vsd_dw49[0x00020];
317 /* -------------- */
318     pseudo_bit_t        vsd_dw50[0x00020];
319 /* -------------- */
320     pseudo_bit_t        vsd_dw51[0x00020];
321 /* -------------- */
322     pseudo_bit_t        vsd_dw52[0x00020];
323 /* -------------- */
324     pseudo_bit_t        vsd_dw53[0x00020];
325 /* -------------- */
326     pseudo_bit_t        vsd_dw54[0x00020];
327 /* -------------- */
328     pseudo_bit_t        vsd_dw55[0x00020];
329 /* -------------- */
330 }; 
331
332 /* ACCESS_DDR_inject_errors */
333
334 struct tavorprm_access_ddr_inject_errors_st {   /* Little Endian */
335     struct tavorprm_access_ddr_inject_errors_input_parameter_st access_ddr_inject_errors_input_parameter;
336 /* -------------- */
337     struct tavorprm_access_ddr_inject_errors_input_modifier_st  access_ddr_inject_errors_input_modifier;
338 /* -------------- */
339     pseudo_bit_t        reserved0[0x00020];
340 /* -------------- */
341 }; 
342
343 /* Logical DIMM Information */
344
345 struct tavorprm_dimminfo_st {   /* Little Endian */
346     pseudo_bit_t        dimmsize[0x00010];     /* Size of DIMM in units of 2^20 Bytes. This value is valid only when DIMMStatus is 0. */
347     pseudo_bit_t        reserved0[0x00008];
348     pseudo_bit_t        dimmstatus[0x00001];   /* DIMM Status
349                                                  0 - Enabled
350                                                  1 - Disabled
351                                                   */
352     pseudo_bit_t        dh[0x00001];           /* When set, the DIMM is Hidden and can not be accessed from the PCI bus. */
353     pseudo_bit_t        wo[0x00001];           /* When set, the DIMM is write only.
354                                                  If data integrity is configured (other than none), the DIMM must be
355                                                  only targeted by write transactions where the address and size are multiples of 16 bytes. */
356     pseudo_bit_t        reserved1[0x00005];
357 /* -------------- */
358     pseudo_bit_t        spd[0x00001];          /* 0 - DIMM SPD was read from DIMM
359                                                  1 - DIMM SPD was read from InfiniHost NVMEM */
360     pseudo_bit_t        sladr[0x00003];        /* SPD Slave Address 3 LSBits. 
361                                                  Valid only if spd bit is 0. */
362     pseudo_bit_t        sock_num[0x00002];     /* DIMM socket number (for double sided DIMM one of the two numbers will be reported) */
363     pseudo_bit_t        syn[0x00004];          /* Error syndrome (valid regardless of status value)
364                                                  0 - DIMM has no error
365                                                  1 - SPD error (e.g. checksum error, no response, error while reading)
366                                                  2 - DIMM out of bounds (e.g. DIMM rows number is not between 7 and 14, DIMM type is not 2)
367                                                  3 - DIMM conflict (e.g. mix of registered and unbuffered DIMMs, CAS latency conflict)
368                                                  5 - DIMM size trimmed due to configuration (size exceeds)
369                                                  other - Error, reserved
370                                                   */
371     pseudo_bit_t        reserved2[0x00016];
372 /* -------------- */
373     pseudo_bit_t        vendor_id_h[0x00020];  /* JDEC Manufacturer ID[63:32] */
374 /* -------------- */
375     pseudo_bit_t        vendor_id_l[0x00020];  /* JDEC Manufacturer ID[31:0] */
376 /* -------------- */
377     pseudo_bit_t        dimm_start_adr_h[0x00020];/* DIMM memory start address [63:32].  This value is valid only when DIMMStatus is 0. */
378 /* -------------- */
379     pseudo_bit_t        dimm_start_adr_l[0x00020];/* DIMM memory start address [31:0].  This value is valid only when DIMMStatus is 0. */
380 /* -------------- */
381     pseudo_bit_t        reserved3[0x00040];
382 /* -------------- */
383 }; 
384
385 /* UAR Parameters */
386
387 struct tavorprm_uar_params_st { /* Little Endian */
388     pseudo_bit_t        uar_base_addr_h[0x00020];/* UAR Base Address [63:32] (QUERY_HCA only) */
389 /* -------------- */
390     pseudo_bit_t        reserved0[0x00014];
391     pseudo_bit_t        uar_base_addr_l[0x0000c];/* UAR Base Address [31:20] (QUERY_HCA only) */
392 /* -------------- */
393     pseudo_bit_t        uar_page_sz[0x00008];  /* This field defines the size of each UAR page.
394                                                  Size of UAR Page is 4KB*2^UAR_Page_Size */
395     pseudo_bit_t        reserved1[0x00018];
396 /* -------------- */
397     pseudo_bit_t        reserved2[0x00020];
398 /* -------------- */
399     pseudo_bit_t        uar_scratch_base_addr_h[0x00020];/* Base address of UAR scratchpad [63:32].
400                                                  Number of entries in table is UAR BAR size divided by UAR Page Size. 
401                                                  Table must be aligned to entry size. */
402 /* -------------- */
403     pseudo_bit_t        uar_scratch_base_addr_l[0x00020];/* Base address of UAR scratchpad [31:0].
404                                                  Number of entries in table is UAR BAR size divided by UAR Page Size. 
405                                                  Table must be aligned to entry size. */
406 /* -------------- */
407     pseudo_bit_t        reserved3[0x00040];
408 /* -------------- */
409 }; 
410
411 /* Translation and Protection Tables Parameters */
412
413 struct tavorprm_tptparams_st {  /* Little Endian */
414     pseudo_bit_t        mpt_base_adr_h[0x00020];/* MPT - Memory Protection Table base physical address [63:32].
415                                                  Entry size is 64 bytes.
416                                                  Table must be aligned to its size.
417                                                  Address may be set to zero if address translation and protection is not supported. */
418 /* -------------- */
419     pseudo_bit_t        mpt_base_adr_l[0x00020];/* MPT - Memory Protection Table base physical address [31:0].
420                                                  Entry size is 64 bytes.
421                                                  Table must be aligned to its size.
422                                                  Address may be set to zero if address translation and protection is not supported. */
423 /* -------------- */
424     pseudo_bit_t        log_mpt_sz[0x00006];   /* Log (base 2) of the number of region/windows entries in the MPT table. */
425     pseudo_bit_t        reserved0[0x00002];
426     pseudo_bit_t        pfto[0x00005];         /* Page Fault RNR Timeout  - 
427                                                  The field returned in RNR Naks generated when a page fault is detected.
428                                                  It has no effect when on-demand-paging is not used. */
429     pseudo_bit_t        reserved1[0x00003];
430     pseudo_bit_t        mtt_segment_size[0x00003];/* The size of MTT segment is 64*2^MTT_Segment_Size bytes */
431     pseudo_bit_t        reserved2[0x0000d];
432 /* -------------- */
433     pseudo_bit_t        mtt_version[0x00008];  /* Version of MTT page walk. Must be zero */
434     pseudo_bit_t        reserved3[0x00018];
435 /* -------------- */
436     pseudo_bit_t        mtt_base_addr_h[0x00020];/* MTT - Memory Translation table base physical address [63:32].
437                                                  Table must be aligned to its size.
438                                                  Address may be set to zero if address translation and protection is not supported. */
439 /* -------------- */
440     pseudo_bit_t        mtt_base_addr_l[0x00020];/* MTT - Memory Translation table base physical address [31:0].
441                                                  Table must be aligned to its size.
442                                                  Address may be set to zero if address translation and protection is not supported. */
443 /* -------------- */
444     pseudo_bit_t        reserved4[0x00040];
445 /* -------------- */
446 }; 
447
448 /* Multicast Support Parameters */
449
450 struct tavorprm_multicastparam_st {     /* Little Endian */
451     pseudo_bit_t        mc_base_addr_h[0x00020];/* Base Address of the Multicast Table [63:32].
452                                                  The base address must be aligned to the entry size.
453                                                  Address may be set to zero if multicast is not supported. */
454 /* -------------- */
455     pseudo_bit_t        mc_base_addr_l[0x00020];/* Base Address of the Multicast Table [31:0]. 
456                                                  The base address must be aligned to the entry size.
457                                                  Address may be set to zero if multicast is not supported. */
458 /* -------------- */
459     pseudo_bit_t        reserved0[0x00040];
460 /* -------------- */
461     pseudo_bit_t        log_mc_table_entry_sz[0x00010];/* Log2 of the Size of multicast group member (MGM) entry.
462                                                  Must be greater than 5 (to allow CTRL and GID sections). 
463                                                  That implies the number of QPs per MC table entry. */
464     pseudo_bit_t        reserved1[0x00010];
465 /* -------------- */
466     pseudo_bit_t        mc_table_hash_sz[0x00011];/* Number of entries in multicast DGID hash table (must be power of 2)
467                                                  INIT_HCA - the required number of entries
468                                                  QUERY_HCA - the actual number of entries assigned by firmware (will be less than or equal to the amount required in INIT_HCA) */
469     pseudo_bit_t        reserved2[0x0000f];
470 /* -------------- */
471     pseudo_bit_t        log_mc_table_sz[0x00005];/* Log2 of the overall number of MC entries in the MCG table (includes both hash and auxiliary tables) */
472     pseudo_bit_t        reserved3[0x00013];
473     pseudo_bit_t        mc_hash_fn[0x00003];   /* Multicast hash function
474                                                  0 - Default hash function
475                                                  other - reserved */
476     pseudo_bit_t        reserved4[0x00005];
477 /* -------------- */
478     pseudo_bit_t        reserved5[0x00020];
479 /* -------------- */
480 }; 
481
482 /* Memory Access Parameters for UD Address Vector Table */
483
484 struct tavorprm_udavtable_memory_parameters_st {        /* Little Endian */
485     pseudo_bit_t        l_key[0x00020];        /* L_Key used to access TPT */
486 /* -------------- */
487     pseudo_bit_t        pd[0x00018];           /* PD used by TPT for matching against PD of region entry being accessed. */
488     pseudo_bit_t        reserved0[0x00005];
489     pseudo_bit_t        xlation_en[0x00001];   /* When cleared, address is physical address and no translation will be done. When set, address is virtual. TPT will be accessed in both cases for address decoding purposes. */
490     pseudo_bit_t        reserved1[0x00002];
491 /* -------------- */
492 }; 
493
494 /* QPC/EEC/CQC/EQC/RDB Parameters */
495
496 struct tavorprm_qpcbaseaddr_st {        /* Little Endian */
497     pseudo_bit_t        reserved0[0x00080];
498 /* -------------- */
499     pseudo_bit_t        qpc_base_addr_h[0x00020];/* QPC Base Address [63:32]
500                                                  Table must be aligned on its size */
501 /* -------------- */
502     pseudo_bit_t        log_num_of_qp[0x00005];/* Log base 2 of number of supported QPs */
503     pseudo_bit_t        reserved1[0x00002];
504     pseudo_bit_t        qpc_base_addr_l[0x00019];/* QPC Base Address [31:7]
505                                                  Table must be aligned on its size */
506 /* -------------- */
507     pseudo_bit_t        reserved2[0x00040];
508 /* -------------- */
509     pseudo_bit_t        eec_base_addr_h[0x00020];/* EEC Base Address [63:32]
510                                                  Table must be aligned on its size.
511                                                  Address may be set to zero if RD is not supported. */
512 /* -------------- */
513     pseudo_bit_t        log_num_of_ee[0x00005];/* Log base 2 of number of supported EEs. */
514     pseudo_bit_t        reserved3[0x00002];
515     pseudo_bit_t        eec_base_addr_l[0x00019];/* EEC Base Address [31:7]
516                                                  Table must be aligned on its size
517                                                  Address may be set to zero if RD is not supported. */
518 /* -------------- */
519     pseudo_bit_t        srqc_base_addr_h[0x00020];/* SRQ Context Base Address [63:32]
520                                                  Table must be aligned on its size
521                                                  Address may be set to zero if SRQ is not supported. */
522 /* -------------- */
523     pseudo_bit_t        log_num_of_srq[0x00005];/* Log base 2 of number of supported SRQs. */
524     pseudo_bit_t        srqc_base_addr_l[0x0001b];/* SRQ Context Base Address [31:5]
525                                                  Table must be aligned on its size
526                                                  Address may be set to zero if SRQ is not supported. */
527 /* -------------- */
528     pseudo_bit_t        cqc_base_addr_h[0x00020];/* CQC Base Address [63:32]
529                                                  Table must be aligned on its size */
530 /* -------------- */
531     pseudo_bit_t        log_num_of_cq[0x00005];/* Log base 2 of number of supported CQs. */
532     pseudo_bit_t        reserved4[0x00001];
533     pseudo_bit_t        cqc_base_addr_l[0x0001a];/* CQC Base Address [31:6]
534                                                  Table must be aligned on its size */
535 /* -------------- */
536     pseudo_bit_t        reserved5[0x00040];
537 /* -------------- */
538     pseudo_bit_t        eqpc_base_addr_h[0x00020];/* Extended QPC Base Address [63:32]
539                                                  Table has same number of entries as QPC table.
540                                                  Table must be aligned to entry size. */
541 /* -------------- */
542     pseudo_bit_t        eqpc_base_addr_l[0x00020];/* Extended QPC Base Address [31:0]
543                                                  Table has same number of entries as QPC table.
544                                                  Table must be aligned to entry size. */
545 /* -------------- */
546     pseudo_bit_t        reserved6[0x00040];
547 /* -------------- */
548     pseudo_bit_t        eeec_base_addr_h[0x00020];/* Extended EEC Base Address [63:32]
549                                                  Table has same number of entries as EEC table.
550                                                  Table must be aligned to entry size.
551                                                  Address may be set to zero if RD is not supported. */
552 /* -------------- */
553     pseudo_bit_t        eeec_base_addr_l[0x00020];/* Extended EEC Base Address [31:0]
554                                                  Table has same number of entries as EEC table.
555                                                  Table must be aligned to entry size.
556                                                  Address may be set to zero if RD is not supported. */
557 /* -------------- */
558     pseudo_bit_t        reserved7[0x00040];
559 /* -------------- */
560     pseudo_bit_t        eqc_base_addr_h[0x00020];/* EQC Base Address [63:32]
561                                                  Address may be set to zero if EQs are not supported.
562                                                  Table must be aligned to entry size. */
563 /* -------------- */
564     pseudo_bit_t        log_num_eq[0x00004];   /* Log base 2 of number of supported EQs.
565                                                  Must be 6 or less in InfiniHost. */
566     pseudo_bit_t        reserved8[0x00002];
567     pseudo_bit_t        eqc_base_addr_l[0x0001a];/* EQC Base Address [31:6]
568                                                  Address may be set to zero if EQs are not supported.
569                                                  Table must be aligned to entry size. */
570 /* -------------- */
571     pseudo_bit_t        reserved9[0x00040];
572 /* -------------- */
573     pseudo_bit_t        rdb_base_addr_h[0x00020];/* Base address of table that holds remote read and remote atomic requests [63:32]. 
574                                                  Table must be aligned to RDB entry size (32 bytes).
575                                                  Address may be set to zero if remote RDMA reads are not supported.
576                                                  Please refer to QP and EE chapter for further explanation on RDB allocation. */
577 /* -------------- */
578     pseudo_bit_t        rdb_base_addr_l[0x00020];/* Base address of table that holds remote read and remote atomic requests [31:0]. 
579                                                  Table must be aligned to RDB entry size (32 bytes).
580                                                  This field must always be zero. 
581                                                  Please refer to QP and EE chapter for further explanation on RDB allocation. */
582 /* -------------- */
583     pseudo_bit_t        reserved10[0x00040];
584 /* -------------- */
585 }; 
586
587 /* Performance Monitors */
588
589 struct tavorprm_performance_monitors_st {       /* Little Endian */
590     pseudo_bit_t        e0[0x00001];           /* Enables counting of respective performance counter */
591     pseudo_bit_t        e1[0x00001];           /* Enables counting of respective performance counter */
592     pseudo_bit_t        e2[0x00001];           /* Enables counting of respective performance counter */
593     pseudo_bit_t        reserved0[0x00001];
594     pseudo_bit_t        r0[0x00001];           /* If written to as '1 - resets respective performance counter, if written to az '0 - no change to matter */
595     pseudo_bit_t        r1[0x00001];           /* If written to as '1 - resets respective performance counter, if written to az '0 - no change to matter */
596     pseudo_bit_t        r2[0x00001];           /* If written to as '1 - resets respective performance counter, if written to az '0 - no change to matter */
597     pseudo_bit_t        reserved1[0x00001];
598     pseudo_bit_t        i0[0x00001];           /* Interrupt enable on respective counter overflow. '1 - interrupt enabled, '0 - interrupt disabled. */
599     pseudo_bit_t        i1[0x00001];           /* Interrupt enable on respective counter overflow. '1 - interrupt enabled, '0 - interrupt disabled. */
600     pseudo_bit_t        i2[0x00001];           /* Interrupt enable on respective counter overflow. '1 - interrupt enabled, '0 - interrupt disabled. */
601     pseudo_bit_t        reserved2[0x00001];
602     pseudo_bit_t        f0[0x00001];           /* Overflow flag. If set, overflow occurred on respective counter. Cleared if written to as '1 */
603     pseudo_bit_t        f1[0x00001];           /* Overflow flag. If set, overflow occurred on respective counter. Cleared if written to as '1 */
604     pseudo_bit_t        f2[0x00001];           /* Overflow flag. If set, overflow occurred on respective counter. Cleared if written to as '1 */
605     pseudo_bit_t        reserved3[0x00001];
606     pseudo_bit_t        ev_cnt1[0x00005];      /* Specifies event to be counted by Event_counter1 See XXX for events' definition. */
607     pseudo_bit_t        reserved4[0x00003];
608     pseudo_bit_t        ev_cnt2[0x00005];      /* Specifies event to be counted by Event_counter2 See XXX for events' definition. */
609     pseudo_bit_t        reserved5[0x00003];
610 /* -------------- */
611     pseudo_bit_t        clock_counter[0x00020];
612 /* -------------- */
613     pseudo_bit_t        event_counter1[0x00020];
614 /* -------------- */
615     pseudo_bit_t        event_counter2[0x00020];/* Read/write event counter, counting events specified by EvCntl and EvCnt2 fields repsectively. When the event counter reaches is maximum value of 0xFFFFFF, the next event will cause it to roll over to zero, set F1 or F2 bit respectively and generate interrupt by I1 I2 bit respectively. */
616 /* -------------- */
617 }; 
618
619 /* QP and EE Context Entry */
620
621 struct tavorprm_queue_pair_ee_context_entry_st {        /* Little Endian */
622     pseudo_bit_t        reserved0[0x00008];
623     pseudo_bit_t        de[0x00001];           /* Send/Receive Descriptor Event enable - if set, events can be generated upon descriptors' completion on send/receive queue (controlled by E bit in WQE). Invalid in EE context */
624     pseudo_bit_t        reserved1[0x00002];
625     pseudo_bit_t        pm_state[0x00002];     /* Path migration state (Migrated, Armed or Rearm)
626                                                  11-Migrated
627                                                  00-Armed
628                                                  01-Rearm
629                                                  10-Reserved
630                                                  Should be set to 11 for UD QPs and for QPs which do not support APM */
631     pseudo_bit_t        reserved2[0x00003];
632     pseudo_bit_t        st[0x00003];           /* Service type (invalid in EE context):
633                                                  000-Reliable Connection
634                                                  001-Unreliable Connection
635                                                  010-Reliable Datagram (Not supported for InfiniHost MT23108)
636                                                  011-Unreliable Datagram
637                                                  111-MLX transport (raw bits injection). Used for management QPs and RAW */
638     pseudo_bit_t        reserved3[0x00009];
639     pseudo_bit_t        state[0x00004];        /* QP/EE state:
640                                                  0 - RST
641                                                  1 - INIT
642                                                  2 - RTR
643                                                  3 - RTS
644                                                  4 - SQEr
645                                                  5 - SQD (Send Queue Drained)
646                                                  6 - ERR
647                                                  7 - Send Queue Draining
648                                                  8 - F - RESERVED
649                                                  (Valid for QUERY_QPEE and ERR2RST_QPEE commands only) */
650 /* -------------- */
651     pseudo_bit_t        sched_queue[0x00004];  /* Schedule queue to be used for WQE scheduling to execution. Determines QOS for this QP. */
652     pseudo_bit_t        reserved4[0x0001c];
653 /* -------------- */
654     pseudo_bit_t        reserved5[0x00018];
655     pseudo_bit_t        msg_max[0x00005];      /* Max message size allowed on the QP. Maximum message size is 2^msg_Max.
656                                                  Must be equal to MTU for UD and MLX QPs. */
657     pseudo_bit_t        mtu[0x00003];          /* MTU of the QP (Must be the same for both paths: primary and alternative):
658                                                  0x1 - 256 bytes
659                                                  0x2 - 512
660                                                  0x3 - 1024
661                                                  0x4 - 2048
662                                                  other - reserved
663                                                  
664                                                  Should be configured to 0x4 for UD and MLX QPs. */
665 /* -------------- */
666     pseudo_bit_t        usr_page[0x00018];     /* Index (offset) of user page allocated for this QP (see "non_privileged Access to the HCA Hardware"). Not valid (reserved) in EE context. */
667     pseudo_bit_t        reserved6[0x00008];
668 /* -------------- */
669     pseudo_bit_t        local_qpn_een[0x00018];/* Local QP/EE number Lower bits determine position of this record in QPC table, and - thus - constrained
670                                                  This field is valid for QUERY and ERR2RST commands only. */
671     pseudo_bit_t        reserved7[0x00008];
672 /* -------------- */
673     pseudo_bit_t        remote_qpn_een[0x00018];/* Remote QP/EE number */
674     pseudo_bit_t        reserved8[0x00008];
675 /* -------------- */
676     pseudo_bit_t        reserved9[0x00040];
677 /* -------------- */
678     struct tavorprm_address_path_st     primary_address_path;/* Primary address path for the QP/EE */
679 /* -------------- */
680     struct tavorprm_address_path_st     alternative_address_path;/* Alternate address path for the QP/EE */
681 /* -------------- */
682     pseudo_bit_t        rdd[0x00018];          /* Reliable Datagram Domain */
683     pseudo_bit_t        reserved10[0x00008];
684 /* -------------- */
685     pseudo_bit_t        pd[0x00018];           /* QP protection domain.  Not valid (reserved) in EE context. */
686     pseudo_bit_t        reserved11[0x00008];
687 /* -------------- */
688     pseudo_bit_t        wqe_base_adr[0x00020]; /* Bits 63:32 of WQE address for both SQ and RQ. 
689                                                  Reserved for EE context. */
690 /* -------------- */
691     pseudo_bit_t        wqe_lkey[0x00020];     /* memory key (L-Key) to be used to access WQEs. Not valid (reserved) in EE context. */
692 /* -------------- */
693     pseudo_bit_t        reserved12[0x00003];
694     pseudo_bit_t        ssc[0x00001];          /* Send Signaled Completion
695                                                  1 - all send WQEs generate CQEs. 
696                                                  0 - only send WQEs with C bit set generate completion. 
697                                                  Not valid (reserved) in EE context. */
698     pseudo_bit_t        sic[0x00001];          /* If set - Ignore end to end credits on send queue. Not valid (reserved) in EE context. */
699     pseudo_bit_t        cur_retry_cnt[0x00003];/* Current transport retry counter (QUERY_QPEE only).
700                                                  The current transport retry counter can vary from retry_count down to 1, where 1 means that the last retry attempt is currently executing. */
701     pseudo_bit_t        cur_rnr_retry[0x00003];/* Current RNR retry counter (QUERY_QPEE only).
702                                                  The current RNR retry counter can vary from rnr_retry to 1, where 1 means that the last retry attempt is currently executing. */
703     pseudo_bit_t        reserved13[0x00002];
704     pseudo_bit_t        sae[0x00001];          /* If set - Atomic operations enabled on send queue. Not valid (reserved) in EE context. */
705     pseudo_bit_t        swe[0x00001];          /* If set - RDMA - write enabled on send queue. Not valid (reserved) in EE context. */
706     pseudo_bit_t        sre[0x00001];          /* If set - RDMA - read enabled on send queue. Not valid (reserved) in EE context. */
707     pseudo_bit_t        retry_count[0x00003];  /* Transport timeout Retry count */
708     pseudo_bit_t        reserved14[0x00002];
709     pseudo_bit_t        sra_max[0x00003];      /* Maximum number of outstanding RDMA-read/Atomic operations allowed in the send queue. Maximum number is 2^SRA_Max. Must be zero in EE context. */
710     pseudo_bit_t        flight_lim[0x00004];   /* Number of outstanding (in-flight) messages on the wire allowed for this send queue. 
711                                                  Number of outstanding messages is 2^Flight_Lim. 
712                                                  Use 0xF for unlimited number of outstanding messages. */
713     pseudo_bit_t        ack_req_freq[0x00004]; /* ACK required frequency. ACK required bit will be set in every 2^AckReqFreq packets at least.  Not valid for RD QP. */
714 /* -------------- */
715     pseudo_bit_t        reserved15[0x00020];
716 /* -------------- */
717     pseudo_bit_t        next_send_psn[0x00018];/* Next PSN to be sent */
718     pseudo_bit_t        reserved16[0x00008];
719 /* -------------- */
720     pseudo_bit_t        cqn_snd[0x00018];      /* CQ number completions from the send queue to be reported to.  Not valid (reserved) in EE context. */
721     pseudo_bit_t        reserved17[0x00008];
722 /* -------------- */
723     pseudo_bit_t        next_snd_wqe_0[0x00020];/* Pointer and properties of next WQE on send queue. The format is same as next segment (first 8 bytes) in the WQE. This field is read-only and provided for debug purposes.  Not valid (reserved) in EE context. */
724 /* -------------- */
725     pseudo_bit_t        next_snd_wqe_1[0x00020];/* Pointer and properties of next WQE on send queue. The format is same as next segment (first 8 bytes) in the WQE. This field is read-only and provided for debug purposes.  Not valid (reserved) in EE context. */
726 /* -------------- */
727     pseudo_bit_t        last_acked_psn[0x00018];/* The last acknowledged PSN for the requester (QUERY_QPEE only) */
728     pseudo_bit_t        reserved18[0x00008];
729 /* -------------- */
730     pseudo_bit_t        ssn[0x00018];          /* Requester Send Sequence Number (QUERY_QPEE only) */
731     pseudo_bit_t        reserved19[0x00008];
732 /* -------------- */
733     pseudo_bit_t        reserved20[0x00003];
734     pseudo_bit_t        rsc[0x00001];          /* 1 - all receive WQEs generate CQEs. 
735                                                  0 - only receive WQEs with C bit set generate completion. 
736                                                  Not valid (reserved) in EE context.
737                                                   */
738     pseudo_bit_t        ric[0x00001];          /* Invalid Credits. 
739                                                  1 - place "Invalid Credits" to ACKs sent from this queue.
740                                                  0 - ACKs report the actual number of end to end credits on the connection.  
741                                                  Not valid (reserved) in EE context.
742                                                  Must be set to 1 on QPs which are attached to SRQ. */
743     pseudo_bit_t        reserved21[0x00008];
744     pseudo_bit_t        rae[0x00001];          /* If set - Atomic operations enabled. on receive queue. Not valid (reserved) in EE context. */
745     pseudo_bit_t        rwe[0x00001];          /* If set - RDMA - write enabled on receive queue. Not valid (reserved) in EE context. */
746     pseudo_bit_t        rre[0x00001];          /* If set - RDMA - read enabled on receive queue. Not valid (reserved) in EE context. */
747     pseudo_bit_t        reserved22[0x00005];
748     pseudo_bit_t        rra_max[0x00003];      /* Maximum number of outstanding RDMA-read/Atomic operations allowed on receive queue is 2^RRA_Max. 
749                                                  Must be 0 for EE context. */
750     pseudo_bit_t        reserved23[0x00008];
751 /* -------------- */
752     pseudo_bit_t        next_rcv_psn[0x00018]; /* Next (expected) PSN on receive */
753     pseudo_bit_t        min_rnr_nak[0x00005];  /* Minimum RNR NAK timer value (TTTTT field encoding according to the IB spec Vol1 9.7.5.2.8). 
754                                                  Not valid (reserved) in EE context. */
755     pseudo_bit_t        reserved24[0x00003];
756 /* -------------- */
757     pseudo_bit_t        reserved25[0x00005];
758     pseudo_bit_t        ra_buff_indx[0x0001b]; /* Index to outstanding read/atomic buffer. 
759                                                  This field constructs the address to the RDB for maintaining the incoming RDMA read and atomic requests. */
760 /* -------------- */
761     pseudo_bit_t        cqn_rcv[0x00018];      /* CQ number completions from receive queue to be reported to. Not valid (reserved) in EE context. */
762     pseudo_bit_t        reserved26[0x00008];
763 /* -------------- */
764     pseudo_bit_t        next_rcv_wqe_0[0x00020];/* Pointer and properties of next WQE on the receive queue. This format is same as next segment (first 8 bytes) in the WQE.This field is read-only and provided for debug purposes. Not valid (reserved) in EE context. */
765 /* -------------- */
766     pseudo_bit_t        next_rcv_wqe_1[0x00020];/* Pointer and properties of next WQE on the receive queue. This format is same as next segment (first 8 bytes) in the WQE.This field is read-only and provided for debug purposes. Not valid (reserved) in EE context. */
767 /* -------------- */
768     pseudo_bit_t        q_key[0x00020];        /* Q_Key to be validated against received datagrams.
769                                                  On send datagrams,  if Q_Key[31] specified in the WQE is set, then this Q_Key will be transmitted in the outgoing message.
770                                                  Not valid (reserved) in EE context. */
771 /* -------------- */
772     pseudo_bit_t        srqn[0x00018];         /* SRQN - Shared Receive Queue Number - specifies the SRQ number from which the QP dequeues receive descriptors. 
773                                                  SRQN is valid only if SRQ bit is set. Not valid (reserved) in EE context. */
774     pseudo_bit_t        srq[0x00001];          /* SRQ - Shared Receive Queue. If this bit is set, then the QP is associated with a SRQ. Not valid (reserved) in EE context. */
775     pseudo_bit_t        reserved27[0x00007];
776 /* -------------- */
777     pseudo_bit_t        rmsn[0x00018];         /* Responder current message sequence number (QUERY_QPEE only) */
778     pseudo_bit_t        reserved28[0x00008];
779 /* -------------- */
780     pseudo_bit_t        reserved29[0x00260];
781 /* -------------- */
782 }; 
783
784 /* MOD_STAT_CFG */
785
786 struct tavorprm_mod_stat_cfg_st {       /* Little Endian */
787     pseudo_bit_t        log_max_srqs[0x00005]; /* Log (base 2) of the number of SRQs to allocate (0 if no SRQs are required), valid only if srq bit is set. */
788     pseudo_bit_t        reserved0[0x00001];
789     pseudo_bit_t        srq[0x00001];          /* When set SRQs are supported */
790     pseudo_bit_t        srq_m[0x00001];        /* Modify SRQ parameters */
791     pseudo_bit_t        reserved1[0x00018];
792 /* -------------- */
793     pseudo_bit_t        reserved2[0x007e0];
794 /* -------------- */
795 }; 
796
797 /* SRQ Context */
798
799 struct tavorprm_srq_context_st {        /* Little Endian */
800     pseudo_bit_t        wqe_addr_h[0x00020];   /* WQE base address for the SRQ [63:32]
801                                                  Must be set at SW2HW_SRQ */
802 /* -------------- */
803     pseudo_bit_t        ds[0x00006];           /* Descriptor Size on the SRQ in units of 16 bytes */
804     pseudo_bit_t        next_wqe_addr_l[0x0001a];/* Next WQE address for the SRQ [31:6] 
805                                                  Valid only on QUERY_SRQ and HW2SW_SRQ commands. */
806 /* -------------- */
807     pseudo_bit_t        pd[0x00018];           /* SRQ PD - used for descriptor fetching on the SRQ and for data scatter on send operations on QPs attached to SRQ.
808                                                  In InfiniHost MT23108 SRQ.PD must be equal to the PD of all QPs which are attached to the SRQ */
809     pseudo_bit_t        reserved0[0x00004];
810     pseudo_bit_t        state[0x00004];        /* SRQ State:
811                                                  1111 - SW Ownership
812                                                  0000 - HW Ownership
813                                                  0001 - Error
814                                                  Valid only on QUERY_SRQ and HW2SW_SRQ commands. */
815 /* -------------- */
816     pseudo_bit_t        l_key[0x00020];        /* L_Key for descriptor fetching on the SRQ */
817 /* -------------- */
818     pseudo_bit_t        uar[0x00018];          /* SRQ User Access Region - Index (offset) of user page allocated for the SRQ (see "Non Privileged Access to the HCA HW"). */
819     pseudo_bit_t        reserved1[0x00008];
820 /* -------------- */
821     pseudo_bit_t        wqe_cnt[0x00010];      /* WQE count on the SRQ. 
822                                                  Valid only on QUERY_SRQ and HW2SW_SRQ commands. */
823     pseudo_bit_t        lwm[0x00010];          /* Limit Water Mark - if the LWM is not zero, and the wqe_cnt drops below LWM when a WQE is dequeued from the SRQ, then a SRQ limit event is fired and the LWM is set to zero. */
824 /* -------------- */
825     pseudo_bit_t        reserved2[0x00010];
826     pseudo_bit_t        reserved3[0x00010];
827 /* -------------- */
828     pseudo_bit_t        reserved4[0x00020];
829 /* -------------- */
830 }; 
831
832 /* InfiniHost Configuration Registers */
833
834 struct tavorprm_mt23108_configuration_registers_st {    /* Little Endian */
835     pseudo_bit_t        reserved0[0x403400];
836 /* -------------- */
837     struct tavorprm_hca_command_register_st     hca_command_interface_register;/* HCA Command Register */
838 /* -------------- */
839     pseudo_bit_t        reserved1[0x00320];
840 /* -------------- */
841     pseudo_bit_t        ecr_h[0x00020];        /* Event Cause Register[63:32]. Each bit in the ECR corresponds to one of the 64 Event Queues in InfiniHost. If bit is set, interrupt was asserted due to event reported on corresponding event queue. This register is read-only; writing to this register will cause undefined results
842                                                   */
843 /* -------------- */
844     pseudo_bit_t        ecr_l[0x00020];        /* Event Cause Register[31:0]. Each bit in the ECR corresponds to one of the 64 Event Queues in InfiniHost. If bit is set, interrupt was asserted due to event reported on corresponding event queue. This register is read-only; writing to this register will cause undefined results
845                                                   */
846 /* -------------- */
847     pseudo_bit_t        clr_ecr_h[0x00020];    /* Clear Event Cause Register[63:32]. 
848                                                  This register is used to clear bits in ECR register. Each set bit in data written to this register clears corresponding bit in the ECR register, Each bit written with zero has no effect. This register is write-only. Reading from this register will cause undefined result
849                                                   */
850 /* -------------- */
851     pseudo_bit_t        clr_ecr_l[0x00020];    /* Clear Event Cause Register[31:0]. 
852                                                  This register is used to clear bits in ECR register. Each set bit in data written to this register clears corresponding bit in the ECR register, Each bit written with zero has no effect. This register is write-only. Reading from this register will cause undefined result
853                                                   */
854 /* -------------- */
855     pseudo_bit_t        reserved2[0x4c780];
856 /* -------------- */
857     pseudo_bit_t        reserved3[0x01000];
858 /* -------------- */
859     pseudo_bit_t        reserved4[0x32f6c0];
860 /* -------------- */
861     pseudo_bit_t        clr_int_h[0x00020];    /* Clear Interrupt [63:32]
862                                                  This register is used to clear (de-assert) interrupt output pins of InfiniHost. The value to be written in this register is obtained by executing QUERY_ADAPTER command on command interface after system boot. This register is write-only. Reading from this register will cause undefined result */
863 /* -------------- */
864     pseudo_bit_t        clr_int_l[0x00020];    /* Clear Interrupt [31:0]
865                                                  This register is used to clear (de-assert) interrupt output pins of InfiniHost. The value to be written in this register is obtained by executing QUERY_ADAPTER command on command interface after system boot. This register is write-only. Reading from this register will cause undefined result */
866 /* -------------- */
867     pseudo_bit_t        reserved5[0x7f900];
868 /* -------------- */
869 }; 
870
871 /* Schedule queues configuration */
872
873 struct tavorprm_cfg_schq_st {   /* Little Endian */
874     pseudo_bit_t        quota[0x00008];        /* Number of WQEs that are executed until preemption of the scheduling queue and switching to the next schedule queue */
875     pseudo_bit_t        reserved0[0x00018];
876 /* -------------- */
877     pseudo_bit_t        rqsq0[0x00008];        /* Weight for requestor schedule queue */
878     pseudo_bit_t        rssq0[0x00008];        /* Weight for responder schedule queue */
879     pseudo_bit_t        rqsq1[0x00008];        /* Weight for requestor schedule queue */
880     pseudo_bit_t        rssq1[0x00008];        /* Weight for responder schedule queue */
881 /* -------------- */
882     pseudo_bit_t        rqsq2[0x00008];        /* Weight for requestor schedule queue */
883     pseudo_bit_t        rssq2[0x00008];        /* Weight for responder schedule queue */
884     pseudo_bit_t        rqsq3[0x00008];        /* Weight for requestor schedule queue */
885     pseudo_bit_t        rssq3[0x00008];        /* Weight for responder schedule queue */
886 /* -------------- */
887     pseudo_bit_t        rqsq4[0x00008];        /* Weight for requestor schedule queue */
888     pseudo_bit_t        rssq4[0x00008];        /* Weight for responder schedule queue */
889     pseudo_bit_t        rqsq5[0x00008];        /* Weight for requestor schedule queue */
890     pseudo_bit_t        rssq5[0x00008];        /* Weight for responder schedule queue */
891 /* -------------- */
892     pseudo_bit_t        rqsq6[0x00008];        /* Weight for requestor schedule queue */
893     pseudo_bit_t        rssq6[0x00008];        /* Weight for responder schedule queue */
894     pseudo_bit_t        rqsq7[0x00008];        /* Weight for requestor schedule queue */
895     pseudo_bit_t        rssq7[0x00008];        /* Weight for responder schedule queue */
896 /* -------------- */
897     pseudo_bit_t        rqsq8[0x00008];        /* Weight for requestor schedule queue */
898     pseudo_bit_t        rssq8[0x00008];        /* Weight for responder schedule queue */
899     pseudo_bit_t        rqsq9[0x00008];        /* Weight for requestor schedule queue */
900     pseudo_bit_t        rssq9[0x00008];        /* Weight for responder schedule queue */
901 /* -------------- */
902     pseudo_bit_t        rqsq10[0x00008];       /* Weight for requestor schedule queue */
903     pseudo_bit_t        rssq10[0x00008];       /* Weight for responder schedule queue */
904     pseudo_bit_t        rqsq11[0x00008];       /* Weight for requestor schedule queue */
905     pseudo_bit_t        rssq11[0x00008];       /* Weight for responder schedule queue */
906 /* -------------- */
907     pseudo_bit_t        rqsq12[0x00008];       /* Weight for requestor schedule queue */
908     pseudo_bit_t        rssq12[0x00008];       /* Weight for responder schedule queue */
909     pseudo_bit_t        rqsq13[0x00008];       /* Weight for requestor schedule queue */
910     pseudo_bit_t        rssq13[0x00008];       /* Weight for responder schedule queue */
911 /* -------------- */
912     pseudo_bit_t        rqsq14[0x00008];       /* Weight for requestor schedule queue */
913     pseudo_bit_t        rssq14[0x00008];       /* Weight for responder schedule queue */
914     pseudo_bit_t        rqsq15[0x00008];       /* Weight for requestor schedule queue */
915     pseudo_bit_t        rssq15[0x00008];       /* Weight for responder schedule queue */
916 /* -------------- */
917     pseudo_bit_t        rqsq16[0x00008];       /* Weight for requestor schedule queue */
918     pseudo_bit_t        rssq16[0x00008];       /* Weight for responder schedule queue */
919     pseudo_bit_t        rqsq17[0x00008];       /* Weight for requestor schedule queue */
920     pseudo_bit_t        rssq17[0x00008];       /* Weight for responder schedule queue */
921 /* -------------- */
922     pseudo_bit_t        rqsq18[0x00008];       /* Weight for requestor schedule queue */
923     pseudo_bit_t        rssq18[0x00008];       /* Weight for responder schedule queue */
924     pseudo_bit_t        rqsq19[0x00008];       /* Weight for requestor schedule queue */
925     pseudo_bit_t        rssq19[0x00008];       /* Weight for responder schedule queue */
926 /* -------------- */
927     pseudo_bit_t        rqsq20[0x00008];       /* Weight for requestor schedule queue */
928     pseudo_bit_t        rssq20[0x00008];       /* Weight for responder schedule queue */
929     pseudo_bit_t        rqsq21[0x00008];       /* Weight for requestor schedule queue */
930     pseudo_bit_t        rssq21[0x00008];       /* Weight for responder schedule queue */
931 /* -------------- */
932     pseudo_bit_t        rqsq22[0x00008];       /* Weight for requestor schedule queue */
933     pseudo_bit_t        rssq22[0x00008];       /* Weight for responder schedule queue */
934     pseudo_bit_t        rqsq23[0x00008];       /* Weight for requestor schedule queue */
935     pseudo_bit_t        rssq23[0x00008];       /* Weight for responder schedule queue */
936 /* -------------- */
937     pseudo_bit_t        rqsq24[0x00008];       /* Weight for requestor schedule queue */
938     pseudo_bit_t        rssq24[0x00008];       /* Weight for responder schedule queue */
939     pseudo_bit_t        rqsq25[0x00008];       /* Weight for requestor schedule queue */
940     pseudo_bit_t        rssq25[0x00008];       /* Weight for responder schedule queue */
941 /* -------------- */
942     pseudo_bit_t        rqsq26[0x00008];       /* Weight for requestor schedule queue */
943     pseudo_bit_t        rssq26[0x00008];       /* Weight for responder schedule queue */
944     pseudo_bit_t        rqsq27[0x00008];       /* Weight for requestor schedule queue */
945     pseudo_bit_t        rssq27[0x00008];       /* Weight for responder schedule queue */
946 /* -------------- */
947     pseudo_bit_t        rqsq28[0x00008];       /* Weight for requestor schedule queue */
948     pseudo_bit_t        rssq28[0x00008];       /* Weight for responder schedule queue */
949     pseudo_bit_t        rqsq29[0x00008];       /* Weight for requestor schedule queue */
950     pseudo_bit_t        rssq29[0x00008];       /* Weight for responder schedule queue */
951 /* -------------- */
952     pseudo_bit_t        rqsq30[0x00008];       /* Weight for requestor schedule queue */
953     pseudo_bit_t        rssq30[0x00008];       /* Weight for responder schedule queue */
954     pseudo_bit_t        rqsq31[0x00008];       /* Weight for requestor schedule queue */
955     pseudo_bit_t        rssq31[0x00008];       /* Weight for responder schedule queue */
956 /* -------------- */
957     pseudo_bit_t        reserved1[0x005e0];
958 /* -------------- */
959 }; 
960
961 /* Query BAR */
962
963 struct tavorprm_query_bar_st {  /* Little Endian */
964     pseudo_bit_t        bar_base_h[0x00020];   /* BAR base [63:32] */
965 /* -------------- */
966     pseudo_bit_t        reserved0[0x00014];
967     pseudo_bit_t        bar_base_l[0x0000c];   /* BAR base [31:20] */
968 /* -------------- */
969 }; 
970
971 /* Performance Counters */
972
973 struct tavorprm_performance_counters_st {       /* Little Endian */
974     pseudo_bit_t        sqpc_access_cnt[0x00020];/* SQPC cache access count */
975 /* -------------- */
976     pseudo_bit_t        sqpc_miss_cnt[0x00020];/* SQPC cache miss count */
977 /* -------------- */
978     pseudo_bit_t        reserved0[0x00040];
979 /* -------------- */
980     pseudo_bit_t        rqpc_access_cnt[0x00020];/* RQPC cache access count */
981 /* -------------- */
982     pseudo_bit_t        rqpc_miss_cnt[0x00020];/* RQPC cache miss count */
983 /* -------------- */
984     pseudo_bit_t        reserved1[0x00040];
985 /* -------------- */
986     pseudo_bit_t        cqc_access_cnt[0x00020];/* CQC cache access count */
987 /* -------------- */
988     pseudo_bit_t        cqc_miss_cnt[0x00020]; /* CQC cache miss count */
989 /* -------------- */
990     pseudo_bit_t        reserved2[0x00040];
991 /* -------------- */
992     pseudo_bit_t        tpt_access_cnt[0x00020];/* TPT cache access count */
993 /* -------------- */
994     pseudo_bit_t        mpt_miss_cnt[0x00020]; /* MPT cache miss count */
995 /* -------------- */
996     pseudo_bit_t        mtt_miss_cnt[0x00020]; /* MTT cache miss count */
997 /* -------------- */
998     pseudo_bit_t        reserved3[0x00620];
999 /* -------------- */
1000 }; 
1001
1002 /* Transport and CI Error Counters */
1003
1004 struct tavorprm_transport_and_ci_error_counters_st {    /* Little Endian */
1005     pseudo_bit_t        rq_num_lle[0x00020];   /* Responder - number of local length errors.
1006                                                  Local Length Errors: Inbound "Send" request message exceeded the responders available buffer space. */
1007 /* -------------- */
1008     pseudo_bit_t        sq_num_lle[0x00020];   /* Requester - number of local length errors.
1009                                                  Length Errors: RDMA READ response message contained too much or too little payload data. */
1010 /* -------------- */
1011     pseudo_bit_t        rq_num_lqpoe[0x00020]; /* Responder - number local QP operation error.
1012                                                  1. Malformed WQE:  Responder detected a malformed Receive Queue WQE while processing the packet.
1013                                                  2. Local QP Error:  Responder detected a local QP related error while executing the request message. The local error  prevented the responder from completing the request. */
1014 /* -------------- */
1015     pseudo_bit_t        sq_num_lqpoe[0x00020]; /* Requester - number local QP operation error
1016                                                  1. Local Operation Error: (WQE gather, affiliated or unaffiliated): An error occurred in the requesters local channel interface that either cannot be associated with a certain WQE, or occurred when reading a WQE.
1017                                                   */
1018 /* -------------- */
1019     pseudo_bit_t        rq_num_leeoe[0x00020]; /* Responder - number local EE operation error.
1020                                                  RD */
1021 /* -------------- */
1022     pseudo_bit_t        sq_num_leeoe[0x00020]; /* Requester - number local EE operation error.
1023                                                  RD */
1024 /* -------------- */
1025     pseudo_bit_t        rq_num_lpe[0x00020];   /* Responder - number of local protection errors.
1026                                                  Local QP (Protection) Error: Responder detected a local access violation error while executing a send request message. The error  prevented the responder from completing the request. */
1027 /* -------------- */
1028     pseudo_bit_t        sq_num_lpe[0x00020];   /* Requester - number of local protection errors.
1029                                                  Local Memory Protection Error: Requester detected a memory translation/protection (TPT) error.
1030                                                   */
1031 /* -------------- */
1032     pseudo_bit_t        rq_num_wrfe[0x00020];  /* Responder - number of CQEs with error generated. */
1033 /* -------------- */
1034     pseudo_bit_t        sq_num_wrfe[0x00020];  /* Requester - number of CQEs with error generated. */
1035 /* -------------- */
1036     pseudo_bit_t        reserved0[0x00020];
1037 /* -------------- */
1038     pseudo_bit_t        sq_num_mwbe[0x00020];  /* Requester - number of memory window bind errors. */
1039 /* -------------- */
1040     pseudo_bit_t        reserved1[0x00020];
1041 /* -------------- */
1042     pseudo_bit_t        sq_num_bre[0x00020];   /* Requester - number of bad response errors.
1043                                                  Bad response: Unexpected opcode for the response packet received at the expected response PSN. */
1044 /* -------------- */
1045     pseudo_bit_t        rq_num_lae[0x00020];   /* Responder - number of local access errors.
1046                                                  Unused. */
1047 /* -------------- */
1048     pseudo_bit_t        reserved2[0x00040];
1049 /* -------------- */
1050     pseudo_bit_t        sq_num_rire[0x00020];  /* Requester - number of remote invalid request errors.
1051                                                  NAK-Invalid Request on:
1052                                                   1. Unsupported OpCode:   Responder detected an unsupported OpCode.
1053                                                   2. Unexpected OpCode:  Responder detected an error in the sequence of OpCodes, such as a missing "Last" packet.
1054                                                     Note: there is no PSN error, thus this does not indicate a dropped packet. */
1055 /* -------------- */
1056     pseudo_bit_t        rq_num_rire[0x00020];  /* Responder - number of remote invalid request errors.
1057                                                  NAK may or may not be sent.
1058                                                   1. Unsupported or Reserved OpCode:  Inbound request OpCode was either reserved, or was for a function not supported by this QP. (E.G. RDMA or ATOMIC on QP not set up for this). For RC this is "QP Async affiliated".
1059                                                   2. Misaligned ATOMIC:  VA does not point to an aligned address on an atomic operation.
1060                                                   3. Too many RDMA READ or ATOMIC Requests:  There were more requests received and not ACKed than allowed for the connection.
1061                                                   4. Out of Sequence OpCode, current packet is "first" or "Only":  The Responder detected an error in the sequence of OpCodes; a missing "Last" packet
1062                                                   5. Out of Sequence OpCode, current packet is not "first" or "Only":  The Responder detected an error in the sequence of OpCodes; a missing "First" packet
1063                                                   6. Local Length Error: Inbound "Send" request message exceeded the responder.s available buffer space.
1064                                                   7. Length error:  RDMA WRITE request message contained too much or too little payload data compared to the DMA length advertised in the first or only packet.
1065                                                   8. Length error: Payload length was not consistent with the opcode: 
1066                                                      a: 0 byte <= "only" <= PMTU bytes
1067                                                      b: ("first" or "middle") == PMTU bytes
1068                                                     c: 1byte <= "last" <= PMTU bytes 
1069                                                   9. Length error: Inbound message exceeded the size supported by the CA port. */
1070 /* -------------- */
1071     pseudo_bit_t        sq_num_rae[0x00020];   /* Requester - number of remote access errors.
1072                                                  NAK-Remote Access Error on:
1073                                                   R_Key Violation:   Responder detected an invalid R_Key while executing an RDMA Request. */
1074 /* -------------- */
1075     pseudo_bit_t        rq_num_rae[0x00020];   /* Responder - number of remote access errors.
1076                                                  R_Key Violation   Responder detected an R_Key violation  while executing an RDMA request.
1077                                                  NAK may or may not be sent. */
1078 /* -------------- */
1079     pseudo_bit_t        sq_num_roe[0x00020];   /* Requester - number of remote operation errors.
1080                                                  NAK-Remote Operation Error on:
1081                                                  Remote Operation Error:   Responder encountered an error, (local to the responder), which prevented it from completing the request. */
1082 /* -------------- */
1083     pseudo_bit_t        rq_num_roe[0x00020];   /* Responder - number of remote operation errors.
1084                                                  NAK-Remote Operation Error on:
1085                                                   1. Malformed WQE:  Responder detected a malformed Receive Queue WQE while processing the packet.
1086                                                   2. Remote Operation Error:   Responder encountered an error, (local to the responder), which prevented it from completing the request. */
1087 /* -------------- */
1088     pseudo_bit_t        sq_num_tree[0x00020];  /* Requester - number of transport retries exceeded errors.
1089                                                   1. Packet sequence error: Retry limit exceeded. Responder detected a PSN larger than it expected. The requestor performed retries, and automatic path migration and additional retries, if applicable, but all attempts failed.
1090                                                   2. Implied NAK sequence error: Retry limit exceeded.  Requestor detected an ACK with a PSN larger than the expected PSN for an RDMA READ or atomic response. The requestor performed retries, and automatic path migration and additional retries, if applicable, but all attempts failed.
1091                                                   3. Local Ack Timeout error: Retry limit exceeded. No ACK response within timer interval. The requestor performed retries, and automatic path migration and additional retries, but all attempts failed. */
1092 /* -------------- */
1093     pseudo_bit_t        reserved3[0x00020];
1094 /* -------------- */
1095     pseudo_bit_t        sq_num_rree[0x00020];  /* Requester - number of RNR nak retries exceeded errors.
1096                                                   RNR NAK Retry error. Retry limit exceeded. Excessive RNR NAKs returned by the responder:  Requestor retried the request "n" times, but received RNR NAK each time. */
1097 /* -------------- */
1098     pseudo_bit_t        reserved4[0x00020];
1099 /* -------------- */
1100     pseudo_bit_t        sq_num_lrdve[0x00020]; /* Requester - number of local RDD violation errors.
1101                                                  RD only. */
1102 /* -------------- */
1103     pseudo_bit_t        rq_num_rirdre[0x00020];/* Responder - number of remote invalid RD request errors.
1104                                                  RD only. */
1105 /* -------------- */
1106     pseudo_bit_t        reserved5[0x00040];
1107 /* -------------- */
1108     pseudo_bit_t        sq_num_rabrte[0x00020];/* Requester - number of remote aborted errors.
1109                                                  RD only. */
1110 /* -------------- */
1111     pseudo_bit_t        reserved6[0x00020];
1112 /* -------------- */
1113     pseudo_bit_t        sq_num_ieecne[0x00020];/* Requester - number of invalid EE context number errors.
1114                                                  RD only. */
1115 /* -------------- */
1116     pseudo_bit_t        reserved7[0x00020];
1117 /* -------------- */
1118     pseudo_bit_t        sq_num_ieecse[0x00020];/* Requester - invalid EE context state errors.
1119                                                  RD only. */
1120 /* -------------- */
1121     pseudo_bit_t        reserved8[0x00380];
1122 /* -------------- */
1123     pseudo_bit_t        rq_num_oos[0x00020];   /* Responder - number of out of sequence requests received.
1124                                                  Out of Sequence Request Packet: Packet PSN of the inbound request is outside the responders valid PSN window.
1125                                                  NAK may or may not be sent. */
1126 /* -------------- */
1127     pseudo_bit_t        sq_num_oos[0x00020];   /* Requester - number of out of sequence Naks received.
1128                                                  NAK-Sequence Error on:
1129                                                   1. Packet sequence error. Retry limit not exceeded: Responder detected a PSN larger than it expected. Requester may retry the request.
1130                                                   2. Packet sequence error. Retry limit exceeded: Responder detected a PSN larger than it expected. The requestor performed retries, and automatic path migration and additional retries, if applicable, but all attempts failed. */
1131 /* -------------- */
1132     pseudo_bit_t        rq_num_mce[0x00020];   /* Responder - number of bad multicast packets received.
1133                                                  Missing GID or bad GID. */
1134 /* -------------- */
1135     pseudo_bit_t        reserved9[0x00020];
1136 /* -------------- */
1137     pseudo_bit_t        rq_num_rsync[0x00020]; /* Responder - number of RESYNC operations.
1138                                                  RD only. */
1139 /* -------------- */
1140     pseudo_bit_t        sq_num_rsync[0x00020]; /* Requester - number of RESYNC operations.
1141                                                  RD only. */
1142 /* -------------- */
1143     pseudo_bit_t        rq_num_udsdprd[0x00020];/* The number of UD packets silently discarded on the receive queue due to lack of receive descriptor.
1144                                                  Resources Not Ready Error: A UD WQE is not currently available. */
1145 /* -------------- */
1146     pseudo_bit_t        reserved10[0x00020];
1147 /* -------------- */
1148     pseudo_bit_t        rq_num_ucsdprd[0x00020];/* The number of UC packets silently discarded on the receive queue due to lack of receive descriptor.
1149                                                  Resources Not Ready Error: A UC WQE is not currently available. */
1150 /* -------------- */
1151     pseudo_bit_t        reserved11[0x003e0];
1152 /* -------------- */
1153     pseudo_bit_t        num_cqovf[0x00020];    /* Number of CQ overflows.
1154                                                  Incremented each time a completion is discarded due CQ overflow. */
1155 /* -------------- */
1156     pseudo_bit_t        num_eqovf[0x00020];    /* Number of EQ overflows.
1157                                                   Incremented each time EQ enters the overflow state. */
1158 /* -------------- */
1159     pseudo_bit_t        num_baddb[0x00020];    /* Number of bad doorbells.
1160                                                   Doorbell dropped due to UAR violation or bad resource state. */
1161 /* -------------- */
1162     pseudo_bit_t        reserved12[0x002a0];
1163 /* -------------- */
1164 }; 
1165
1166 /* Event_data Field - HCR Completion Event */
1167
1168 struct tavorprm_hcr_completion_event_st {       /* Little Endian */
1169     pseudo_bit_t        token[0x00010];        /* HCR Token */
1170     pseudo_bit_t        reserved0[0x00010];
1171 /* -------------- */
1172     pseudo_bit_t        reserved1[0x00020];
1173 /* -------------- */
1174     pseudo_bit_t        status[0x00008];       /* HCR Status */
1175     pseudo_bit_t        reserved2[0x00018];
1176 /* -------------- */
1177     pseudo_bit_t        out_param_h[0x00020];  /* HCR Output Parameter [63:32] */
1178 /* -------------- */
1179     pseudo_bit_t        out_param_l[0x00020];  /* HCR Output Parameter [31:0] */
1180 /* -------------- */
1181     pseudo_bit_t        reserved3[0x00020];
1182 /* -------------- */
1183 }; 
1184
1185 /* Completion with Error CQE */
1186
1187 struct tavorprm_completion_with_error_st {      /* Little Endian */
1188     pseudo_bit_t        myqpn[0x00018];        /* Indicates the QP for which completion is being reported */
1189     pseudo_bit_t        reserved0[0x00008];
1190 /* -------------- */
1191     pseudo_bit_t        reserved1[0x00060];
1192 /* -------------- */
1193     pseudo_bit_t        db_cnt[0x00010];       /* Doorbell count */
1194     pseudo_bit_t        reserved2[0x00008];
1195     pseudo_bit_t        syndrome[0x00008];     /* Completion with error syndrome:
1196                                                          0x01 - Local Length Error
1197                                                          0x02 - Local QP Operation Error
1198                                                          0x03 - Local EE Context Operation Error
1199                                                          0x04 - Local Protection Error
1200                                                          0x05 - Work Request Flushed Error 
1201                                                          0x06 - Memory Window Bind Error
1202                                                          0x10 - Bad Response Error
1203                                                          0x11 - Local Access Error
1204                                                          0x12 - Remote Invalid Request Error
1205                                                          0x13 - Remote Access Error
1206                                                          0x14 - Remote Operation Error
1207                                                          0x15 - Transport Retry Counter Exceeded
1208                                                          0x16 - RNR Retry Counter Exceeded
1209                                                          0x20 - Local RDD Violation Error
1210                                                          0x21 - Remote Invalid RD Request
1211                                                          0x22 - Remote Aborted Error
1212                                                          0x23 - Invalid EE Context Number
1213                                                          0x24 - Invalid EE Context State
1214                                                          other - Reserved
1215                                                  Syndrome is defined according to the IB specification volume 1. For detailed explanation of the syndromes, refer to chapters 10-11 of the IB specification rev 1.1. */
1216 /* -------------- */
1217     pseudo_bit_t        reserved3[0x00020];
1218 /* -------------- */
1219     pseudo_bit_t        wqe_size[0x00006];     /* Size (in 16-byte chunks) of WQE completion is reported for */
1220     pseudo_bit_t        wqe_addr[0x0001a];     /* Bits 31:6 of WQE virtual address completion is reported for. The 6 least significant bits are zero. */
1221 /* -------------- */
1222     pseudo_bit_t        reserved4[0x00007];
1223     pseudo_bit_t        owner[0x00001];        /* Owner field. Zero value of this field means SW ownership of CQE. */
1224     pseudo_bit_t        reserved5[0x00010];
1225     pseudo_bit_t        opcode[0x00008];       /* The opcode of WQE completion is reported for.
1226                                                  
1227                                                  The following values are reported in case of completion with error:
1228                                                  0xFE - For completion with error on Receive Queues
1229                                                  0xFF - For completion with error on Send Queues */
1230 /* -------------- */
1231 }; 
1232
1233 /* Resize CQ Input Mailbox */
1234
1235 struct tavorprm_resize_cq_st {  /* Little Endian */
1236     pseudo_bit_t        reserved0[0x00020];
1237 /* -------------- */
1238     pseudo_bit_t        start_addr_h[0x00020]; /* Start address of CQ[63:32]. 
1239                                                  Must be aligned on CQE size (32 bytes) */
1240 /* -------------- */
1241     pseudo_bit_t        start_addr_l[0x00020]; /* Start address of CQ[31:0]. 
1242                                                  Must be aligned on CQE size (32 bytes) */
1243 /* -------------- */
1244     pseudo_bit_t        reserved1[0x00018];
1245     pseudo_bit_t        log_cq_size[0x00005];  /* Log (base 2) of the CQ size (in entries) */
1246     pseudo_bit_t        reserved2[0x00003];
1247 /* -------------- */
1248     pseudo_bit_t        reserved3[0x00060];
1249 /* -------------- */
1250     pseudo_bit_t        l_key[0x00020];        /* Memory key (L_Key) to be used to access CQ */
1251 /* -------------- */
1252     pseudo_bit_t        reserved4[0x00100];
1253 /* -------------- */
1254 }; 
1255
1256 /* SYS_EN Output Parameter */
1257
1258 struct tavorprm_sys_en_out_param_st {   /* Little Endian */
1259     pseudo_bit_t        reserved0[0x00020];
1260 /* -------------- */
1261     pseudo_bit_t        spd[0x00001];          /* 0 - DIMM SPD was read from DIMM
1262                                                  1 - DIMM SPD was read from InfiniHost NVMEM */
1263     pseudo_bit_t        sladr[0x00003];        /* SPD Slave Address 3 LSBits. 
1264                                                  Valid only if spd bit is 0. */
1265     pseudo_bit_t        sock_num[0x00002];     /* DIMM socket number (for double sided DIMM one of the two numbers will be reported) */
1266     pseudo_bit_t        syn[0x00004];          /* Error Syndrome
1267                                                  0 - reserved
1268                                                  1 - SPD error (e.g. checksum error, no response, error while reading)
1269                                                  2 - DIMM out of bounds (e.g. DIMM rows number is not between 7 and 14, DIMM type is not 2)
1270                                                  3 - DIMM conflict (e.g. mix of registered and unbuffered DIMMs, CAS latency conflict)
1271                                                  4 - Calibration error
1272                                                  5 - reserved
1273                                                  6- DDR Memory check failed
1274                                                  other - Error, reserved */
1275     pseudo_bit_t        reserved1[0x00016];
1276 /* -------------- */
1277 }; 
1278
1279 /* Query Debug Message */
1280
1281 struct tavorprm_query_debug_msg_st {    /* Little Endian */
1282     pseudo_bit_t        base_addr_h[0x00020];  /* Debug Buffers Base Address [63:32] */
1283 /* -------------- */
1284     pseudo_bit_t        base_addr_l[0x00020];  /* Debug Buffers Base Address [31:0] */
1285 /* -------------- */
1286     pseudo_bit_t        buf_sz[0x00020];       /* Debug Buffer Size (in bytes) */
1287 /* -------------- */
1288     pseudo_bit_t        reserved0[0x00020];
1289 /* -------------- */
1290     pseudo_bit_t        trc_hdr_sz[0x00020];   /* Trace message header size in dwords. */
1291 /* -------------- */
1292     pseudo_bit_t        trc_arg_num[0x00020];  /* The number of arguments per trace message. */
1293 /* -------------- */
1294     pseudo_bit_t        reserved1[0x000c0];
1295 /* -------------- */
1296     pseudo_bit_t        dbg_msk_h[0x00020];    /* Debug messages mask [63:32] */
1297 /* -------------- */
1298     pseudo_bit_t        dbg_msk_l[0x00020];    /* Debug messages mask [31:0] */
1299 /* -------------- */
1300     pseudo_bit_t        reserved2[0x00040];
1301 /* -------------- */
1302     pseudo_bit_t        fs_base_addr0_h[0x00020];/* Base address for format string for irisc 0 bits[63:32] */
1303 /* -------------- */
1304     pseudo_bit_t        fs_base_addr0_l[0x00020];/* Base address for format string for irisc 0 bits[31:0] */
1305 /* -------------- */
1306     pseudo_bit_t        fs_base_addr1_h[0x00020];/* Base address for format string for irisc 1 bits[63:32] */
1307 /* -------------- */
1308     pseudo_bit_t        fs_base_addr1_l[0x00020];/* Base address for format string for irisc 1 bits[31:0] */
1309 /* -------------- */
1310     pseudo_bit_t        fs_base_addr2_h[0x00020];/* Base address for format string for irisc 2 bits[63:32] */
1311 /* -------------- */
1312     pseudo_bit_t        fs_base_addr2_l[0x00020];/* Base address for format string for irisc 2 bits[31:0] */
1313 /* -------------- */
1314     pseudo_bit_t        fs_base_addr3_h[0x00020];/* Base address for format string for irisc 3 bits[63:32] */
1315 /* -------------- */
1316     pseudo_bit_t        fs_base_addr3_l[0x00020];/* Base address for format string for irisc 3 bits[31:0] */
1317 /* -------------- */
1318     pseudo_bit_t        fs_base_addr4_h[0x00020];/* Base address for format string for irisc 4 bits[63:32] */
1319 /* -------------- */
1320     pseudo_bit_t        fs_base_addr4_l[0x00020];/* Base address for format string for irisc 4 bits[31:0] */
1321 /* -------------- */
1322     pseudo_bit_t        fs_base_addr5_h[0x00020];/* Base address for format string for irisc 5 bits[63:32] */
1323 /* -------------- */
1324     pseudo_bit_t        fs_base_addr5_l[0x00020];/* Base address for format string for irisc 5 bits[31:0] */
1325 /* -------------- */
1326     pseudo_bit_t        reserved3[0x00480];
1327 /* -------------- */
1328 }; 
1329
1330 /* User Access Region */
1331
1332 struct tavorprm_uar_st {        /* Little Endian */
1333     struct tavorprm_rd_send_doorbell_st rd_send_doorbell;/* Reliable Datagram SQ Doorbell */
1334 /* -------------- */
1335     struct tavorprm_send_doorbell_st    send_doorbell;/* SQ Doorbell */
1336 /* -------------- */
1337     struct tavorprm_receive_doorbell_st receive_doorbell;/* RQ Doorbell */
1338 /* -------------- */
1339     struct tavorprm_cq_cmd_doorbell_st  cq_command_doorbell;/* CQ Doorbell */
1340 /* -------------- */
1341     struct tavorprm_eq_cmd_doorbell_st  eq_command_doorbell;/* EQ Doorbell */
1342 /* -------------- */
1343     pseudo_bit_t        reserved0[0x01e80];
1344 /* -------------- */
1345     pseudo_bit_t        infini_blast[256][0x00020];/* InfiniBlast buffer (same format as WQE format)
1346                                                  Infiniblast is not supported by InfiniHost MT23108 */
1347 /* -------------- */
1348 }; 
1349
1350 /* SET_IB Parameters */
1351
1352 struct tavorprm_set_ib_st {     /* Little Endian */
1353     pseudo_bit_t        rqk[0x00001];          /* Reset QKey Violation Counter */
1354     pseudo_bit_t        reserved0[0x00011];
1355     pseudo_bit_t        sig[0x00001];          /* Set System Image GUID to system_image_guid specified.
1356                                                  system_image_guid and sig must be the same for all ports. */
1357     pseudo_bit_t        reserved1[0x0000d];
1358 /* -------------- */
1359     pseudo_bit_t        capability_mask[0x00020];/* PortInfo Capability Mask */
1360 /* -------------- */
1361     pseudo_bit_t        system_image_guid_h[0x00020];/* System Image GUID[63:32], takes effect only if the SIG bit is set
1362                                                  Must be the same for both ports. */
1363 /* -------------- */
1364     pseudo_bit_t        system_image_guid_l[0x00020];/* System Image GUID[31:0], takes effect only if the SIG bit is set
1365                                                  Must be the same for both ports. */
1366 /* -------------- */
1367     pseudo_bit_t        reserved2[0x00180];
1368 /* -------------- */
1369 }; 
1370
1371 /* Multicast Group Member */
1372
1373 struct tavorprm_mgm_entry_st {  /* Little Endian */
1374     pseudo_bit_t        reserved0[0x00006];
1375     pseudo_bit_t        next_gid_index[0x0001a];/* Index of next Multicast Group Member whose GID maps to same MGID_HASH number.
1376                                                  The index is into the Multicast Group Table, which is the comprised the MGHT and AMGM tables.
1377                                                  next_gid_index=0 means end of the chain. */
1378 /* -------------- */
1379     pseudo_bit_t        reserved1[0x00060];
1380 /* -------------- */
1381     pseudo_bit_t        mgid_128_96[0x00020];  /* Multicast group GID[128:96] in big endian format.
1382                                                  Use the Reserved GID 0:0:0:0:0:0:0:0 for an invalid entry. */
1383 /* -------------- */
1384     pseudo_bit_t        mgid_95_64[0x00020];   /* Multicast group GID[95:64] in big endian format.
1385                                                  Use the Reserved GID 0:0:0:0:0:0:0:0 for an invalid entry. */
1386 /* -------------- */
1387     pseudo_bit_t        mgid_63_32[0x00020];   /* Multicast group GID[63:32] in big endian format.
1388                                                  Use the Reserved GID 0:0:0:0:0:0:0:0 for an invalid entry. */
1389 /* -------------- */
1390     pseudo_bit_t        mgid_31_0[0x00020];    /* Multicast group GID[31:0] in big endian format.
1391                                                  Use the Reserved GID 0:0:0:0:0:0:0:0 for an invalid entry. */
1392 /* -------------- */
1393     struct tavorprm_mgmqp_st    mgmqp_0;   /* Multicast Group Member QP */
1394 /* -------------- */
1395     struct tavorprm_mgmqp_st    mgmqp_1;   /* Multicast Group Member QP */
1396 /* -------------- */
1397     struct tavorprm_mgmqp_st    mgmqp_2;   /* Multicast Group Member QP */
1398 /* -------------- */
1399     struct tavorprm_mgmqp_st    mgmqp_3;   /* Multicast Group Member QP */
1400 /* -------------- */
1401     struct tavorprm_mgmqp_st    mgmqp_4;   /* Multicast Group Member QP */
1402 /* -------------- */
1403     struct tavorprm_mgmqp_st    mgmqp_5;   /* Multicast Group Member QP */
1404 /* -------------- */
1405     struct tavorprm_mgmqp_st    mgmqp_6;   /* Multicast Group Member QP */
1406 /* -------------- */
1407     struct tavorprm_mgmqp_st    mgmqp_7;   /* Multicast Group Member QP */
1408 /* -------------- */
1409 }; 
1410
1411 /* INIT_IB Parameters */
1412
1413 struct tavorprm_init_ib_st {    /* Little Endian */
1414     pseudo_bit_t        reserved0[0x00004];
1415     pseudo_bit_t        vl_cap[0x00004];       /* Maximum VLs supported on the port, excluding VL15.
1416                                                  Legal values are 1,2,4 and 8. */
1417     pseudo_bit_t        port_width_cap[0x00004];/* IB Port Width
1418                                                  1   - 1x
1419                                                  3   - 1x, 4x
1420                                                  11 - 1x, 4x or 12x (must not be used in InfiniHost MT23108)
1421                                                  else - Reserved */
1422     pseudo_bit_t        mtu_cap[0x00004];      /* Maximum MTU Supported
1423                                                  0x0 - Reserved
1424                                                  0x1 - 256
1425                                                  0x2 - 512
1426                                                  0x3 - 1024
1427                                                  0x4 - 2048
1428                                                  0x5 - 0xF Reserved */
1429     pseudo_bit_t        g0[0x00001];           /* Set port GUID0 to GUID0 specified */
1430     pseudo_bit_t        ng[0x00001];           /* Set node GUID to node_guid specified.
1431                                                  node_guid and ng must be the same for all ports. */
1432     pseudo_bit_t        sig[0x00001];          /* Set System Image GUID to system_image_guid specified.
1433                                                  system_image_guid and sig must be the same for all ports. */
1434     pseudo_bit_t        reserved1[0x0000d];
1435 /* -------------- */
1436     pseudo_bit_t        max_gid[0x00010];      /* Maximum number of GIDs for the port */
1437     pseudo_bit_t        reserved2[0x00010];
1438 /* -------------- */
1439     pseudo_bit_t        max_pkey[0x00010];     /* Maximum pkeys for the port.
1440                                                  Must be the same for both ports. */
1441     pseudo_bit_t        reserved3[0x00010];
1442 /* -------------- */
1443     pseudo_bit_t        reserved4[0x00020];
1444 /* -------------- */
1445     pseudo_bit_t        guid0_h[0x00020];      /* EUI-64 GUID assigned by the manufacturer, takes effect only if the G0 bit is set (bits 63:32) */
1446 /* -------------- */
1447     pseudo_bit_t        guid0_l[0x00020];      /* EUI-64 GUID assigned by the manufacturer, takes effect only if the G0 bit is set (bits 31:0) */
1448 /* -------------- */
1449     pseudo_bit_t        node_guid_h[0x00020];  /* Node GUID[63:32], takes effect only if the NG bit is set
1450                                                  Must be the same for both ports. */
1451 /* -------------- */
1452     pseudo_bit_t        node_guid_l[0x00020];  /* Node GUID[31:0], takes effect only if the NG bit is set
1453                                                  Must be the same for both ports. */
1454 /* -------------- */
1455     pseudo_bit_t        system_image_guid_h[0x00020];/* System Image GUID[63:32], takes effect only if the SIG bit is set
1456                                                  Must be the same for both ports. */
1457 /* -------------- */
1458     pseudo_bit_t        system_image_guid_l[0x00020];/* System Image GUID[31:0], takes effect only if the SIG bit is set
1459                                                  Must be the same for both ports. */
1460 /* -------------- */
1461     pseudo_bit_t        reserved5[0x006c0];
1462 /* -------------- */
1463 }; 
1464
1465 /* Query Device Limitations */
1466
1467 struct tavorprm_query_dev_lim_st {      /* Little Endian */
1468     pseudo_bit_t        reserved0[0x00080];
1469 /* -------------- */
1470     pseudo_bit_t        log_max_qp[0x00005];   /* Log2 of the Maximum number of QPs supported */
1471     pseudo_bit_t        reserved1[0x00003];
1472     pseudo_bit_t        log2_rsvd_qps[0x00004];/* Log (base 2) of the number of QPs reserved for firmware use
1473                                                  The reserved resources are numbered from 0 to 2^log2_rsvd_qps-1 */
1474     pseudo_bit_t        reserved2[0x00004];
1475     pseudo_bit_t        log_max_qp_sz[0x00008];/* The maximum number of WQEs allowed on the RQ or the SQ is 2^log_max_qp_sz-1 */
1476     pseudo_bit_t        log_max_srq_sz[0x00008];/* The maximum number of WQEs allowed on the SRQ is 2^log_max_srq_sz-1 */
1477 /* -------------- */
1478     pseudo_bit_t        log_max_ee[0x00005];   /* Log2 of the Maximum number of EE contexts supported */
1479     pseudo_bit_t        reserved3[0x00003];
1480     pseudo_bit_t        log2_rsvd_ees[0x00004];/* Log (base 2) of the number of EECs reserved for firmware use
1481                                                  The reserved resources are numbered from 0 to 2^log2_rsvd_ees-1 */
1482     pseudo_bit_t        reserved4[0x00004];
1483     pseudo_bit_t        log_max_srqs[0x00005]; /* Log base 2 of the maximum number of SRQs supported, valid only if SRQ bit is set.
1484                                                   */
1485     pseudo_bit_t        reserved5[0x00007];
1486     pseudo_bit_t        log2_rsvd_srqs[0x00004];/* Log (base 2) of the number of reserved SRQs for firmware use
1487                                                  The reserved resources are numbered from 0 to 2^log2_rsvd_srqs-1
1488                                                  This parameter is valid only if the SRQ bit is set. */
1489 /* -------------- */
1490     pseudo_bit_t        log_max_cq[0x00005];   /* Log2 of the Maximum number of CQs supported */
1491     pseudo_bit_t        reserved6[0x00003];
1492     pseudo_bit_t        log2_rsvd_cqs[0x00004];/* Log (base 2) of the number of CQs reserved for firmware use
1493                                                  The reserved resources are numbered from 0 to 2^log2_rsrvd_cqs-1 */
1494     pseudo_bit_t        reserved7[0x00004];
1495     pseudo_bit_t        log_max_cq_sz[0x00008];/* Log2 of the Maximum CQEs allowed in a CQ */
1496     pseudo_bit_t        reserved8[0x00008];
1497 /* -------------- */
1498     pseudo_bit_t        log_max_eq[0x00003];   /* Log2 of the Maximum number of EQs */
1499     pseudo_bit_t        reserved9[0x00005];
1500     pseudo_bit_t        num_rsvd_eqs[0x00004]; /* The number of EQs reserved for firmware use
1501                                                  The reserved resources are numbered from 0 to num_rsvd_eqs-1
1502                                                  If 0 - no resources are reserved. */
1503     pseudo_bit_t        reserved10[0x00004];
1504     pseudo_bit_t        log_max_mpts[0x00006]; /* Log (base 2) of the maximum number of MPT entries (the number of Regions/Windows) */
1505     pseudo_bit_t        reserved11[0x0000a];
1506 /* -------------- */
1507     pseudo_bit_t        log_max_mtt_seg[0x00006];/* Log2 of the Maximum number of MTT segments */
1508     pseudo_bit_t        reserved12[0x00002];
1509     pseudo_bit_t        log2_rsvd_mrws[0x00004];/* Log (base 2) of the number of MPTs reserved for firmware use
1510                                                  The reserved resources are numbered from 0 to 2^log2_rsvd_mrws-1 */
1511     pseudo_bit_t        reserved13[0x00004];
1512     pseudo_bit_t        log_max_mrw_sz[0x00008];/* Log2 of the Maximum Size of Memory Region/Window */
1513     pseudo_bit_t        reserved14[0x00004];
1514     pseudo_bit_t        log2_rsvd_mtts[0x00004];/* Log (base 2) of the number of MTT segments reserved for firmware use
1515                                                  The reserved resources are numbered from 0 to 2^log2_rsvd_mtts-1
1516                                                   */
1517 /* -------------- */
1518     pseudo_bit_t        log_max_av[0x00006];   /* Log2 of the Maximum number of Address Vectors */
1519     pseudo_bit_t        reserved15[0x0001a];
1520 /* -------------- */
1521     pseudo_bit_t        log_max_ra_res_qp[0x00006];/* Log2 of the Maximum number of outstanding RDMA read/Atomic per QP as a responder */
1522     pseudo_bit_t        reserved16[0x0000a];
1523     pseudo_bit_t        log_max_ra_req_qp[0x00006];/* Log2 of the maximum number of outstanding RDMA read/Atomic per QP as a requester */
1524     pseudo_bit_t        reserved17[0x0000a];
1525 /* -------------- */
1526     pseudo_bit_t        log_max_ra_res_global[0x00006];/* Log2 of the maximum number of RDMA read/atomic operations the HCA responder can support globally. That implies the RDB table size. */
1527     pseudo_bit_t        reserved18[0x0001a];
1528 /* -------------- */
1529     pseudo_bit_t        reserved19[0x00020];
1530 /* -------------- */
1531     pseudo_bit_t        num_ports[0x00004];    /* Number of IB ports. */
1532     pseudo_bit_t        max_vl[0x00004];       /* Maximum VLs supported on each port, excluding VL15 */
1533     pseudo_bit_t        max_port_width[0x00004];/* IB Port Width
1534                                                  1   - 1x
1535                                                  3   - 1x, 4x
1536                                                  11 - 1x, 4x or 12x
1537                                                  else - Reserved */
1538     pseudo_bit_t        max_mtu[0x00004];      /* Maximum MTU Supported
1539                                                  0x0 - Reserved
1540                                                  0x1 - 256
1541                                                  0x2 - 512
1542                                                  0x3 - 1024
1543                                                  0x4 - 2048
1544                                                  0x5 - 0xF Reserved */
1545     pseudo_bit_t        local_ca_ack_delay[0x00005];/* The Local CA ACK Delay. This is the value recommended to be returned in Query HCA verb.
1546                                                  The delay value in microseconds is computed using 4.096us * 2^(Local_CA_ACK_Delay). */
1547     pseudo_bit_t        reserved20[0x0000b];
1548 /* -------------- */
1549     pseudo_bit_t        log_max_gid[0x00004];  /* Log2 of the maximum number of GIDs per port */
1550     pseudo_bit_t        reserved21[0x0001c];
1551 /* -------------- */
1552     pseudo_bit_t        log_max_pkey[0x00004]; /* Log2 of the max PKey Table Size (per IB port) */
1553     pseudo_bit_t        reserved22[0x0001c];
1554 /* -------------- */
1555     pseudo_bit_t        reserved23[0x00020];
1556 /* -------------- */
1557     pseudo_bit_t        rc[0x00001];           /* RC Transport supported */
1558     pseudo_bit_t        uc[0x00001];           /* UC Transport Supported */
1559     pseudo_bit_t        ud[0x00001];           /* UD Transport Supported */
1560     pseudo_bit_t        rd[0x00001];           /* RD Transport Supported
1561                                                  RD is not supported in InfiniHost MT23108 */
1562     pseudo_bit_t        raw_ipv6[0x00001];     /* Raw IPv6 Transport Supported */
1563     pseudo_bit_t        raw_ether[0x00001];    /* Raw Ethertype Transport Supported */
1564     pseudo_bit_t        srq[0x00001];          /* SRQ is supported
1565                                                   */
1566     pseudo_bit_t        reserved24[0x00001];
1567     pseudo_bit_t        pkv[0x00001];          /* PKey Violation Counter Supported */
1568     pseudo_bit_t        qkv[0x00001];          /* QKey Violation Coutner Supported */
1569     pseudo_bit_t        reserved25[0x00006];
1570     pseudo_bit_t        mw[0x00001];           /* Memory windows supported */
1571     pseudo_bit_t        apm[0x00001];          /* Automatic Path Migration Supported */
1572     pseudo_bit_t        atm[0x00001];          /* Atomic operations supported (atomicity is guaranteed between QPs on this HCA) */
1573     pseudo_bit_t        rm[0x00001];           /* Raw Multicast Supported */
1574     pseudo_bit_t        avp[0x00001];          /* Address Vector Port checking supported */
1575     pseudo_bit_t        udm[0x00001];          /* UD Multicast Supported */
1576     pseudo_bit_t        reserved26[0x00002];
1577     pseudo_bit_t        pg[0x00001];           /* Paging on demand supported */
1578     pseudo_bit_t        r[0x00001];            /* Router mode supported */
1579     pseudo_bit_t        reserved27[0x00006];
1580 /* -------------- */
1581     pseudo_bit_t        log_pg_sz[0x00008];    /* Minimum system page size supported (log2) . 
1582                                                  For proper operation it must be less than or equal the hosting platform (CPU) minimum page size. */
1583     pseudo_bit_t        reserved28[0x00008];
1584     pseudo_bit_t        uar_sz[0x00006];       /* UAR Area Size = 1MB * 2^uar_sz */
1585     pseudo_bit_t        reserved29[0x00006];
1586     pseudo_bit_t        num_rsvd_uars[0x00004];/* The number of UARs reserved for firmware use
1587                                                  The reserved resources are numbered from 0 to num_reserved_uars-1
1588                                                  Note that UAR 1 is always for the kernel
1589                                                  If 0 - no resources are reserved. */
1590 /* -------------- */
1591     pseudo_bit_t        reserved30[0x00020];
1592 /* -------------- */
1593     pseudo_bit_t        max_desc_sz[0x00010];  /* Max descriptor size in bytes */
1594     pseudo_bit_t        max_sg[0x00008];       /* The maximum S/G list elements in a WQE (max_desc_sz/16 - 3) */
1595     pseudo_bit_t        reserved31[0x00008];
1596 /* -------------- */
1597     pseudo_bit_t        reserved32[0x00060];
1598 /* -------------- */
1599     pseudo_bit_t        log_max_mcg[0x00008];  /* Log2 of the maximum number of multicast groups */
1600     pseudo_bit_t        num_rsvd_mcgs[0x00004];/* The number of MGMs reserved for firmware use in the MGHT.
1601                                                  The reserved resources are numbered from 0 to num_reserved_mcgs-1
1602                                                  If 0 - no resources are reserved. */
1603     pseudo_bit_t        reserved33[0x00004];
1604     pseudo_bit_t        log_max_qp_mcg[0x00008];/* Log2 of the maximum number of QPs per multicast group */
1605     pseudo_bit_t        reserved34[0x00008];
1606 /* -------------- */
1607     pseudo_bit_t        log_max_rdds[0x00006]; /* Log2 of the maximum number of RDDs */
1608     pseudo_bit_t        reserved35[0x00006];
1609     pseudo_bit_t        num_rsvd_rdds[0x00004];/* The number of RDDs reserved for firmware use
1610                                                  The reserved resources are numbered from 0 to num_reserved_rdds-1.
1611                                                  If 0 - no resources are reserved. */
1612     pseudo_bit_t        log_max_pd[0x00006];   /* Log2 of the maximum number of PDs */
1613     pseudo_bit_t        reserved36[0x00006];
1614     pseudo_bit_t        num_rsvd_pds[0x00004]; /* The number of PDs reserved for firmware use
1615                                                  The reserved resources are numbered from 0 to num_reserved_pds-1
1616                                                  If 0 - no resources are reserved. */
1617 /* -------------- */
1618     pseudo_bit_t        reserved37[0x000c0];
1619 /* -------------- */
1620     pseudo_bit_t        qpc_entry_sz[0x00010]; /* QPC Entry Size for the device
1621                                                  For the InfiniHost MT23108 entry size is 256 bytes */
1622     pseudo_bit_t        eec_entry_sz[0x00010]; /* EEC Entry Size for the device
1623                                                  For  the InfiniHost MT23108 entry size is 256 bytes */
1624 /* -------------- */
1625     pseudo_bit_t        eqpc_entry_sz[0x00010];/* Extended QPC entry size for the device
1626                                                  For  the InfiniHost MT23108 entry size is 32 bytes */
1627     pseudo_bit_t        eeec_entry_sz[0x00010];/* Extended EEC entry size for the device
1628                                                  For  the InfiniHost MT23108 entry size is 32 bytes */
1629 /* -------------- */
1630     pseudo_bit_t        cqc_entry_sz[0x00010]; /* CQC entry size for the device
1631                                                  For  the InfiniHost MT23108 entry size is 64 bytes */
1632     pseudo_bit_t        eqc_entry_sz[0x00010]; /* EQ context entry size for the device
1633                                                  For  the InfiniHost MT23108 entry size is 64 bytes */
1634 /* -------------- */
1635     pseudo_bit_t        uar_scratch_entry_sz[0x00010];/* UAR Scratchpad Entry Size
1636                                                  For  the InfiniHost MT23108 entry size is 32 bytes */
1637     pseudo_bit_t        srq_entry_sz[0x00010]; /* SRQ context entry size for the device
1638                                                  For  the InfiniHost MT23108 entry size is 32 bytes */
1639 /* -------------- */
1640     pseudo_bit_t        reserved38[0x00380];
1641 /* -------------- */
1642 }; 
1643
1644 /* QUERY_ADAPTER Parameters Block */
1645
1646 struct tavorprm_query_adapter_st {      /* Little Endian */
1647     pseudo_bit_t        vendor_id[0x00020];    /* Adapter vendor ID */
1648 /* -------------- */
1649     pseudo_bit_t        device_id[0x00020];    /* Adapter Device ID */
1650 /* -------------- */
1651     pseudo_bit_t        revision_id[0x00020];  /* Adapter Revision ID */
1652 /* -------------- */
1653     pseudo_bit_t        reserved0[0x00020];
1654 /* -------------- */
1655     pseudo_bit_t        reserved1[0x00018];
1656     pseudo_bit_t        intapin[0x00008];      /* Interrupt Signal ID of HCA device pin that is connected to the INTA trace in the HCA board.
1657                                                  0..39 and 63 are valid values
1658                                                  255 means INTA trace in board is not connected to the HCA device.
1659                                                  All other values are reserved */
1660 /* -------------- */
1661     pseudo_bit_t        mode_pci[0x00001];     /* Set when the device is operating in conventional PCI mode (as opposed to PCI-X/PCI-Express). */
1662     pseudo_bit_t        mode_32bit[0x00001];   /* Set when the device is operating in 32 bit mode (the sampled bus width is 32 bit). */
1663     pseudo_bit_t        reserved2[0x0001e];
1664 /* -------------- */
1665     pseudo_bit_t        reserved3[0x00040];
1666 /* -------------- */
1667     struct tavorprm_vsd_st      vsd;
1668 /* -------------- */
1669 }; 
1670
1671 /* QUERY_FW Parameters Block */
1672
1673 struct tavorprm_query_fw_st {   /* Little Endian */
1674     pseudo_bit_t        fw_rev_major[0x00010]; /* Firmware Revision - Major */
1675     pseudo_bit_t        reserved0[0x00010];
1676 /* -------------- */
1677     pseudo_bit_t        fw_rev_minor[0x00010]; /* Firmware Revision - Minor */
1678     pseudo_bit_t        fw_rev_subminor[0x00010];/* Firmware Sub-minor version (Patch level). */
1679 /* -------------- */
1680     pseudo_bit_t        cmd_interface_rev[0x00010];/* Command Interface Interpreter Revision ID */
1681     pseudo_bit_t        reserved1[0x00010];
1682 /* -------------- */
1683     pseudo_bit_t        log_max_outstanding_cmd[0x00008];/* Log2 of the maximum number of commands the HCR can support simultaneously */
1684     pseudo_bit_t        reserved2[0x00017];
1685     pseudo_bit_t        dt[0x00001];           /* Debug Trace Support
1686                                                  0 - Debug trace is not supported 
1687                                                  1 - Debug trace is supported */
1688 /* -------------- */
1689     pseudo_bit_t        cmd_interface_db[0x00001];/* Set if the device accepts commands by means of special doorbells. */
1690     pseudo_bit_t        reserved3[0x0001f];
1691 /* -------------- */
1692     pseudo_bit_t        reserved4[0x00060];
1693 /* -------------- */
1694     pseudo_bit_t        fw_base_addr_h[0x00020];/* Physical Address of Firmware Area in DDR Memory [63:32] */
1695 /* -------------- */
1696     pseudo_bit_t        fw_base_addr_l[0x00020];/* Physical Address of Firmware Area in DDR Memory [31:0] */
1697 /* -------------- */
1698     pseudo_bit_t        fw_end_addr_h[0x00020];/* End of firmware address in DDR memory [63:32] */
1699 /* -------------- */
1700     pseudo_bit_t        fw_end_addr_l[0x00020];/* End of firmware address in DDR memory [31:0] */
1701 /* -------------- */
1702     pseudo_bit_t        error_buf_start_h[0x00020];/* Read Only buffer for catastrofic error reports. */
1703 /* -------------- */
1704     pseudo_bit_t        error_buf_start_l[0x00020];
1705 /* -------------- */
1706     pseudo_bit_t        error_buf_size[0x00020];/* Size in words */
1707 /* -------------- */
1708     pseudo_bit_t        reserved5[0x000a0];
1709 /* -------------- */
1710     pseudo_bit_t        cmd_db_dw1[0x00010];   /* offset in bytes from cmd_db_addr_base where DWord 1 of a Command Interface Doorbell should be written. Valid only if CmdInterfaceDb bit is '1' */
1711     pseudo_bit_t        cmd_db_dw0[0x00010];   /* offset in bytes from cmd_db_addr_base where DWord 0 of a Command Interface Doorbell should be written. Valid only if CmdInterfaceDb bit is '1' */
1712 /* -------------- */
1713     pseudo_bit_t        cmd_db_dw3[0x00010];   /* offset in bytes from cmd_db_addr_base where DWord 3 of a Command Interface Doorbell should be written. Valid only if CmdInterfaceDb bit is '1' */
1714     pseudo_bit_t        cmd_db_dw2[0x00010];   /* offset in bytes from cmd_db_addr_base where DWord 2 of a Command Interface Doorbell should be written. Valid only if CmdInterfaceDb bit is '1' */
1715 /* -------------- */
1716     pseudo_bit_t        cmd_db_dw5[0x00010];   /* offset in bytes from cmd_db_addr_base where DWord 5 of a Command Interface Doorbell should be written. Valid only if CmdInterfaceDb bit is '1' */
1717     pseudo_bit_t        cmd_db_dw4[0x00010];   /* offset in bytes from cmd_db_addr_base where DWord 4 of a Command Interface Doorbell should be written. Valid only if CmdInterfaceDb bit is '1' */
1718 /* -------------- */
1719     pseudo_bit_t        cmd_db_dw7[0x00010];   /* offset in bytes from cmd_db_addr_base where DWord 7 of a Command Interface Doorbell should be written. Valid only if CmdInterfaceDb bit is '1' */
1720     pseudo_bit_t        cmd_db_dw6[0x00010];   /* offset in bytes from cmd_db_addr_base where DWord 6 of a Command Interface Doorbell should be written. Valid only if CmdInterfaceDb bit is '1' */
1721 /* -------------- */
1722     pseudo_bit_t        cmd_db_addr_base_h[0x00020];/* High bits of cmd_db_addr_base, which cmd_db_dw offsets refer to. Valid only if CmdInterfaceDb bit is '1' */
1723 /* -------------- */
1724     pseudo_bit_t        cmd_db_addr_base_l[0x00020];/* Low  bits of cmd_db_addr_base, which cmd_db_dw offsets refer to. Valid only if CmdInterfaceDb bit is '1' */
1725 /* -------------- */
1726     pseudo_bit_t        reserved6[0x004c0];
1727 /* -------------- */
1728 }; 
1729
1730 /* ACCESS_DDR */
1731
1732 struct tavorprm_access_ddr_st { /* Little Endian */
1733     struct tavorprm_access_ddr_inject_errors_st access_ddr_inject_errors;
1734 /* -------------- */
1735     pseudo_bit_t        reserved0[0x00080];
1736 /* -------------- */
1737 }; 
1738
1739 /* QUERY_DDR Parameters Block */
1740
1741 struct tavorprm_query_ddr_st {  /* Little Endian */
1742     pseudo_bit_t        ddr_start_adr_h[0x00020];/* DDR memory start address [63:32] */
1743 /* -------------- */
1744     pseudo_bit_t        ddr_start_adr_l[0x00020];/* DDR memory start address [31:0] */
1745 /* -------------- */
1746     pseudo_bit_t        ddr_end_adr_h[0x00020];/* DDR memory end address [63:32] */
1747 /* -------------- */
1748     pseudo_bit_t        ddr_end_adr_l[0x00020];/* DDR memory end address [31:0] */
1749 /* -------------- */
1750     pseudo_bit_t        di[0x00002];           /* Data Integrity Configuration:
1751                                                  00 - none
1752                                                  01 - Parity
1753                                                  10 - ECC Detection Only
1754                                                  11 - ECC With Correction */
1755     pseudo_bit_t        ap[0x00002];           /* Auto Precharge Mode
1756                                                  00 - No auto precharge
1757                                                  01 - Auto precharge per transaction
1758                                                  10 - Auto precharge per 64 bytes
1759                                                  11 - reserved */
1760     pseudo_bit_t        dh[0x00001];           /* When set, DDR is Hidden and can not be accessed from the PCI bus. */
1761     pseudo_bit_t        reserved0[0x0001b];
1762 /* -------------- */
1763     pseudo_bit_t        reserved1[0x00160];
1764 /* -------------- */
1765     struct tavorprm_dimminfo_st dimm0;  /* Logical DIMM 0 Parameters */
1766 /* -------------- */
1767     struct tavorprm_dimminfo_st dimm1;  /* Logical DIMM 1 Parameters */
1768 /* -------------- */
1769     struct tavorprm_dimminfo_st dimm2;  /* Logical DIMM 2 Parameters */
1770 /* -------------- */
1771     struct tavorprm_dimminfo_st dimm3;  /* Logical DIMM 3 Parameters */
1772 /* -------------- */
1773     pseudo_bit_t        reserved2[0x00200];
1774 /* -------------- */
1775 }; 
1776
1777 /* INIT_HCA & QUERY_HCA Parameters Block */
1778
1779 struct tavorprm_init_hca_st {   /* Little Endian */
1780     pseudo_bit_t        reserved0[0x00060];
1781 /* -------------- */
1782     pseudo_bit_t        reserved1[0x00018];
1783     pseudo_bit_t        hca_core_clock[0x00008];/* Internal Clock Period (in units of 1/16 ns) (QUERY_HCA only) */
1784 /* -------------- */
1785     pseudo_bit_t        reserved2[0x00008];
1786     pseudo_bit_t        router_qp[0x00010];    /* Upper 16 bit to be used as a QP number for router mode. Low order 8 bits are taken from the TClass field of the incoming packet.
1787                                                  Valid only if RE bit is set */
1788     pseudo_bit_t        reserved3[0x00007];
1789     pseudo_bit_t        re[0x00001];           /* Router Mode Enable
1790                                                  If this bit is set, entire packet (including all headers and ICRC) will be considered as a data payload and will be scattered to memory as specified in the descriptor that is posted on the QP matching the TClass field of packet. */
1791 /* -------------- */
1792     pseudo_bit_t        udp[0x00001];          /* UD Port Check Enable
1793                                                  0 - Port field in Address Vector is ignored
1794                                                  1 - HCA will check the port field in AV entry (fetched for UD descriptor) against the Port of the UD QP executing the descriptor. */
1795     pseudo_bit_t        he[0x00001];           /* Host Endianess - Used for Atomic Operations
1796                                                  0 - Host is Little Endian
1797                                                  1 - Host is Big endian
1798                                                   */
1799     pseudo_bit_t        ud[0x00001];           /* Force UD address vector protection check. If this bit is set, Passing address vector as immediate data in WQE is suppressed and privileged memory key will be used by hardware to access UD address vector table. */
1800     pseudo_bit_t        reserved4[0x00005];
1801     pseudo_bit_t        responder_exu[0x00004];/* How many execution engines are dedicated to the responder. Legal values are 0x0-0xF. 0 is "auto" */
1802     pseudo_bit_t        reserved5[0x00004];
1803     pseudo_bit_t        wqe_quota[0x0000f];    /* Maximum number of WQEs that are executed prior to preemption of execution unit. 0 - reserved. */
1804     pseudo_bit_t        wqe_quota_en[0x00001]; /* If set - wqe_quota field is used. If cleared - WQE quota is set to "auto" value */
1805 /* -------------- */
1806     pseudo_bit_t        reserved6[0x00040];
1807 /* -------------- */
1808     struct tavorprm_qpcbaseaddr_st      qpc_eec_cqc_eqc_rdb_parameters;
1809 /* -------------- */
1810     pseudo_bit_t        reserved7[0x00080];
1811 /* -------------- */
1812     struct tavorprm_udavtable_memory_parameters_st      udavtable_memory_parameters;/* Memory Access Parameters for UD Address Vector Table. Used for QPs/EEc that are configured to use protected Address Vectors. */
1813 /* -------------- */
1814     pseudo_bit_t        reserved8[0x00040];
1815 /* -------------- */
1816     struct tavorprm_multicastparam_st   multicast_parameters;
1817 /* -------------- */
1818     pseudo_bit_t        reserved9[0x00080];
1819 /* -------------- */
1820     struct tavorprm_tptparams_st        tpt_parameters;
1821 /* -------------- */
1822     pseudo_bit_t        reserved10[0x00080];
1823 /* -------------- */
1824     struct tavorprm_uar_params_st       uar_parameters;/* UAR Parameters */
1825 /* -------------- */
1826     pseudo_bit_t        reserved11[0x00600];
1827 /* -------------- */
1828 }; 
1829
1830 /* Event Queue Context Table Entry */
1831
1832 struct tavorprm_eqc_st {        /* Little Endian */
1833     pseudo_bit_t        reserved0[0x00008];
1834     pseudo_bit_t        st[0x00002];           /* Event delivery state machine
1835                                                  01 - Armed
1836                                                  10 - Fired
1837                                                  11 - Always_Armed (auto-rearm)
1838                                                  00 - Reserved */
1839     pseudo_bit_t        reserved1[0x00007];
1840     pseudo_bit_t        oi[0x00001];           /* Ignore overrun on this EQ if this bit is set */
1841     pseudo_bit_t        tr[0x00001];           /* Translation Required. If set - EQ access undergo address translation. */
1842     pseudo_bit_t        reserved2[0x00005];
1843     pseudo_bit_t        owner[0x00004];        /* 0 - SW ownership
1844                                                  1 - HW ownership
1845                                                  Valid for the QUERY_EQ and HW2SW_EQ commands only */
1846     pseudo_bit_t        status[0x00004];       /* EQ status:
1847                                                  0000 - OK
1848                                                  1001 - EQ overflow
1849                                                  1010 - EQ write failure
1850                                                  Valid for the QUERY_EQ and HW2SW_EQ commands only */
1851 /* -------------- */
1852     pseudo_bit_t        start_address_h[0x00020];/* Start Address of Event Queue[63:32]. 
1853                                                  Must be aligned on 32-byte boundary */
1854 /* -------------- */
1855     pseudo_bit_t        start_address_l[0x00020];/* Start Address of Event Queue[31:0]. 
1856                                                  Must be aligned on 32-byte boundary */
1857 /* -------------- */
1858     pseudo_bit_t        usr_page[0x00018];
1859     pseudo_bit_t        log_eq_size[0x00005];  /* Amount of entries in this EQ is 2^log_eq_size.
1860                                                  Log_eq_size must be bigger than 1 */
1861     pseudo_bit_t        reserved3[0x00003];
1862 /* -------------- */
1863     pseudo_bit_t        pd[0x00018];           /* PD to be used to access EQ */
1864     pseudo_bit_t        reserved4[0x00008];
1865 /* -------------- */
1866     pseudo_bit_t        intr[0x00008];         /* Interrupt (message) to be generated to report event to INT layer.
1867                                                  00iiiiii - specifies GPIO pin to be asserted (according to INTA given in QUERY_ADAPTER)
1868                                                  10jjjjjj - specificies type of interrupt message to be generated (total 64 different messages supported).
1869                                                  
1870                                                  If interrupt generation is not required one of the two following options should be set:
1871                                                  1. ST must be set on creation to Fired state and not EQ arming doorbell should be performed. In this case hardware will not generate any interrupt.
1872                                                  2. intr should be set to 60 decimal
1873                                                   */
1874     pseudo_bit_t        reserved5[0x00018];
1875 /* -------------- */
1876     pseudo_bit_t        lost_count[0x00020];   /* Number of events lost due to EQ overrun */
1877 /* -------------- */
1878     pseudo_bit_t        lkey[0x00020];         /* Memory key (L-Key) to be used to access EQ */
1879 /* -------------- */
1880     pseudo_bit_t        reserved6[0x00040];
1881 /* -------------- */
1882     pseudo_bit_t        consumer_indx[0x00020];/* Contains next entry to be read upon polling the event queue.
1883                                                  Must be initalized to '0 while opening EQ */
1884 /* -------------- */
1885     pseudo_bit_t        producer_indx[0x00020];/* Contains next entry in EQ to be written by the HCA.
1886                                                  Must be initalized to '0 while opening EQ. */
1887 /* -------------- */
1888     pseudo_bit_t        reserved7[0x00080];
1889 /* -------------- */
1890 }; 
1891
1892 /* Memory Translation Table (MTT) Entry */
1893
1894 struct tavorprm_mtt_st {        /* Little Endian */
1895     pseudo_bit_t        ptag_h[0x00020];       /* High-order bits of physical tag. The size of the field depends on the page size of the region. Maximum PTAG size is 52 bits. */
1896 /* -------------- */
1897     pseudo_bit_t        p[0x00001];            /* Present bit. If set, page entry is valid. If cleared, access to this page will generate 'non-present page access fault'. */
1898     pseudo_bit_t        reserved0[0x0000b];
1899     pseudo_bit_t        ptag_l[0x00014];       /* Low-order bits of Physical tag. The size of the field depends on the page size of the region. Maximum PTAG size is 52 bits. */
1900 /* -------------- */
1901 }; 
1902
1903 /* Memory Protection Table (MPT) Entry */
1904
1905 struct tavorprm_mpt_st {        /* Little Endian */
1906     pseudo_bit_t        ver[0x00004];          /* Version. Must be zero for InfiniHost */
1907     pseudo_bit_t        reserved0[0x00004];
1908     pseudo_bit_t        r_w[0x00001];          /* Defines whether this entry is Region (1) or Window (0) */
1909     pseudo_bit_t        pa[0x00001];           /* Physical address. If set, no virtual-to-physical address translation will be performed for this region */
1910     pseudo_bit_t        lr[0x00001];           /* If set - local read access enabled */
1911     pseudo_bit_t        lw[0x00001];           /* If set - local write access enabled */
1912     pseudo_bit_t        rr[0x00001];           /* If set - Remote read access enabled. */
1913     pseudo_bit_t        rw[0x00001];           /* If set - remote write access enabled */
1914     pseudo_bit_t        a[0x00001];            /* If set - Remote Atomic access is enabled */
1915     pseudo_bit_t        eb[0x00001];           /* If set - Bind is enabled. Valid for region entry only. */
1916     pseudo_bit_t        reserved1[0x00001];
1917     pseudo_bit_t        m_io[0x00001];         /* Memory / I/O
1918                                                  1 - Memory commands used on the uplink bus
1919                                                  0 - I/O commands used on the uplink bus
1920                                                  Must be 1 for the InfiniHost MT23108. */
1921     pseudo_bit_t        reserved2[0x0000a];
1922     pseudo_bit_t        status[0x00004];       /* Regios/Window Status
1923                                                  0xF - not valid (SW ownership)
1924                                                  else - HW ownership
1925                                                  Note that an unbound Window is denoted by the reg_wnd_len field equals zero. */
1926 /* -------------- */
1927     pseudo_bit_t        page_size[0x00005];    /* Page size used for the region. Actual size is [4K]*2^Page_size bytes.
1928                                                  page_size should be less than 20. */
1929     pseudo_bit_t        reserved3[0x00002];
1930     pseudo_bit_t        reserved4[0x00001];
1931     pseudo_bit_t        reserved5[0x00018];
1932 /* -------------- */
1933     pseudo_bit_t        mem_key[0x00020];      /* The memory Key. This field is compared to key used to access the region/window. Lower-order bits are restricted (index to the table). */
1934 /* -------------- */
1935     pseudo_bit_t        pd[0x00018];           /* Protection Domain */
1936     pseudo_bit_t        reserved6[0x00001];
1937     pseudo_bit_t        reserved7[0x00001];
1938     pseudo_bit_t        reserved8[0x00001];
1939     pseudo_bit_t        reserved9[0x00001];
1940     pseudo_bit_t        reserved10[0x00001];
1941     pseudo_bit_t        reserved11[0x00003];
1942 /* -------------- */
1943     pseudo_bit_t        start_address_h[0x00020];/* Start Address[63:32] - Virtual Address where this region/window starts */
1944 /* -------------- */
1945     pseudo_bit_t        start_address_l[0x00020];/* Start Address[31:0] - Virtual Address where this region/window starts */
1946 /* -------------- */
1947     pseudo_bit_t        reg_wnd_len_h[0x00020];/* Region/Window Length[63:32] */
1948 /* -------------- */
1949     pseudo_bit_t        reg_wnd_len_l[0x00020];/* Region/Window Length[31:0] */
1950 /* -------------- */
1951     pseudo_bit_t        lkey[0x00020];         /* Must be 0 for SW2HW_MPT.
1952                                                  On QUERY_MPT and HW2SW_MPT commands for Memory Window it reflects the LKey of the Region that the Window is bound to. */
1953 /* -------------- */
1954     pseudo_bit_t        win_cnt[0x00020];      /* Number of windows bound to this region. Valid for regions only.
1955                                                  The field is valid only for the QUERY_MPT and HW2SW_MPT commands. */
1956 /* -------------- */
1957     pseudo_bit_t        win_cnt_limit[0x00020];/* The number of windows (limit) that can be bound to this region. If a bind operation is attempted when WIN_CNT == WIN_CNT_LIMIT, the operation will be aborted, a CQE with error will be generated, and the QP will be moved into the error state.
1958                                                  Zero means no limit.
1959                                                  Note that for best hardware performance, win_cnt_limit should be set to zero. */
1960 /* -------------- */
1961     pseudo_bit_t        mtt_seg_adr_h[0x00020];/* Base (first) address of the MTT segment, aligned on segment_size boundary (bits 63:31). */
1962 /* -------------- */
1963     pseudo_bit_t        reserved12[0x00006];
1964     pseudo_bit_t        mtt_seg_adr_l[0x0001a];/* Base (first) address of the MTT segment, aligned on segment_size boundary (bits 31:6). */
1965 /* -------------- */
1966     pseudo_bit_t        reserved13[0x00060];
1967 /* -------------- */
1968 }; 
1969
1970 /* Completion Queue Context Table Entry */
1971
1972 struct tavorprm_completion_queue_context_st {   /* Little Endian */
1973     pseudo_bit_t        reserved0[0x00008];
1974     pseudo_bit_t        st[0x00004];           /* Event delivery state machine
1975                                                  0x0 - DISARMED
1976                                                  0x1 - ARMED (Request for Notification)
1977                                                  0x4 - ARMED SOLICITED (Request Solicited Notification)
1978                                                  0xA - FIRED
1979                                                  other - reserved */
1980     pseudo_bit_t        reserved1[0x00005];
1981     pseudo_bit_t        oi[0x00001];           /* Ignore overrun of this CQ if this bit is set */
1982     pseudo_bit_t        tr[0x00001];           /* Translation Required
1983                                                  1 - accesses to CQ will undergo address translation
1984                                                  0 - accesses to CQ will not undergo address translation */
1985     pseudo_bit_t        reserved2[0x00009];
1986     pseudo_bit_t        status[0x00004];       /* CQ status
1987                                                  0000 -  OK
1988                                                  1001 - CQ overflow
1989                                                  1010 - CQ write failure
1990                                                  Valid for the QUERY_CQ and HW2SW_CQ commands only */
1991 /* -------------- */
1992     pseudo_bit_t        start_address_h[0x00020];/* Start address of CQ[63:32]. 
1993                                                  Must be aligned on CQE size (32 bytes) */
1994 /* -------------- */
1995     pseudo_bit_t        start_address_l[0x00020];/* Start address of CQ[31:0]. 
1996                                                  Must be aligned on CQE size (32 bytes) */
1997 /* -------------- */
1998     pseudo_bit_t        usr_page[0x00018];     /* UAR page this CQ can be accessed through (ringinig CQ doorbells) */
1999     pseudo_bit_t        log_cq_size[0x00005];  /* Log (base 2) of the CQ size (in entries).
2000                                                  Maximum CQ size is 128K CQEs (max log_cq_size is 17) */
2001     pseudo_bit_t        reserved3[0x00003];
2002 /* -------------- */
2003     pseudo_bit_t        e_eqn[0x00008];        /* Event Queue this CQ reports errors to (e.g. CQ overflow)
2004                                                  Valid values are 0 to 63
2005                                                  If configured to value other than 0-63, error events will not be reported on the CQ. */
2006     pseudo_bit_t        reserved4[0x00018];
2007 /* -------------- */
2008     pseudo_bit_t        c_eqn[0x00008];        /* Event Queue this CQ reports completion events to.
2009                                                  Valid values are 0 to 63
2010                                                  If configured to value other than 0-63, completion events will not be reported on the CQ. */
2011     pseudo_bit_t        reserved5[0x00018];
2012 /* -------------- */
2013     pseudo_bit_t        pd[0x00018];           /* Protection Domain to be used to access CQ.
2014                                                  Must be the same PD of the CQ L_Key. */
2015     pseudo_bit_t        reserved6[0x00008];
2016 /* -------------- */
2017     pseudo_bit_t        l_key[0x00020];        /* Memory key (L_Key) to be used to access CQ */
2018 /* -------------- */
2019     pseudo_bit_t        last_notified_indx[0x00020];/* Maintained by HW.
2020                                                  Valid for QUERY_CQ and HW2SW_CQ commands only. */
2021 /* -------------- */
2022     pseudo_bit_t        solicit_producer_indx[0x00020];/* Maintained by HW.
2023                                                  Valid for QUERY_CQ and HW2SW_CQ commands only. 
2024                                                   */
2025 /* -------------- */
2026     pseudo_bit_t        consumer_indx[0x00020];/* Contains index to the next entry to be read upon poll for completion. The first completion after passing ownership of CQ from software to hardware will be reported to value passed in this field. Only the low log_cq_size bits may be non-zero. */
2027 /* -------------- */
2028     pseudo_bit_t        producer_indx[0x00020];/* Points to the next entry to be written to by Hardware. CQ overrun is reported if Producer_indx + 1 equals to Consumer_indx. 
2029                                                  Maintained by HW (valid for the QUERY_CQ and HW2SW_CQ commands only) */
2030 /* -------------- */
2031     pseudo_bit_t        cqn[0x00018];          /* CQ number. Least significant bits are constrained by the position of this CQ in CQC table
2032                                                  Valid for the QUERY_CQ and HW2SW_CQ commands only */
2033     pseudo_bit_t        reserved7[0x00008];
2034 /* -------------- */
2035     pseudo_bit_t        reserved8[0x00060];
2036 /* -------------- */
2037 }; 
2038
2039 /* UD Address Vector */
2040
2041 struct tavorprm_ud_address_vector_st {  /* Little Endian */
2042     pseudo_bit_t        pd[0x00018];           /* Protection Domain */
2043     pseudo_bit_t        port_number[0x00002];  /* Port number
2044                                                  1 - Port 1
2045                                                  2 - Port 2
2046                                                  other - reserved */
2047     pseudo_bit_t        reserved0[0x00006];
2048 /* -------------- */
2049     pseudo_bit_t        rlid[0x00010];         /* Remote (Destination) LID */
2050     pseudo_bit_t        my_lid_path_bits[0x00007];/* Source LID - the lower 7 bits (upper bits are taken from PortInfo) */
2051     pseudo_bit_t        g[0x00001];            /* Global address enable - if set, GRH will be formed for packet header */
2052     pseudo_bit_t        reserved1[0x00008];
2053 /* -------------- */
2054     pseudo_bit_t        hop_limit[0x00008];    /* IPv6 hop limit */
2055     pseudo_bit_t        max_stat_rate[0x00003];/* Maximum static rate control. 
2056                                                  0 - 4X injection rate
2057                                                  1 - 1X injection rate
2058                                                  other - reserved
2059                                                   */
2060     pseudo_bit_t        reserved2[0x00001];
2061     pseudo_bit_t        msg[0x00002];          /* Max Message size, size is 256*2^MSG bytes */
2062     pseudo_bit_t        reserved3[0x00002];
2063     pseudo_bit_t        mgid_index[0x00006];   /* Index to port GID table
2064                                                  mgid_index = (port_number-1) * 2^log_max_gid + gid_index
2065                                                  Where:
2066                                                  1. log_max_gid is taken from QUERY_DEV_LIM command
2067                                                  2. gid_index is the index to the GID table */
2068     pseudo_bit_t        reserved4[0x0000a];
2069 /* -------------- */
2070     pseudo_bit_t        flow_label[0x00014];   /* IPv6 flow label */
2071     pseudo_bit_t        tclass[0x00008];       /* IPv6 TClass */
2072     pseudo_bit_t        sl[0x00004];           /* InfiniBand Service Level (SL) */
2073 /* -------------- */
2074     pseudo_bit_t        rgid_127_96[0x00020];  /* Remote GID[127:96] */
2075 /* -------------- */
2076     pseudo_bit_t        rgid_95_64[0x00020];   /* Remote GID[95:64] */
2077 /* -------------- */
2078     pseudo_bit_t        rgid_63_32[0x00020];   /* Remote GID[63:32] */
2079 /* -------------- */
2080     pseudo_bit_t        rgid_31_0[0x00020];    /* Remote GID[31:0] */
2081 /* -------------- */
2082 }; 
2083
2084 /* GPIO_event_data */
2085
2086 struct tavorprm_gpio_event_data_st {    /* Little Endian */
2087     pseudo_bit_t        reserved0[0x00060];
2088 /* -------------- */
2089     pseudo_bit_t        gpio_event_hi[0x00020];/* If any bit is set to 1, then a rising/falling event has occurred on the corrsponding GPIO pin. */
2090 /* -------------- */
2091     pseudo_bit_t        gpio_event_lo[0x00020];/* If any bit is set to 1, then a rising/falling event has occurred on the corrsponding GPIO pin. */
2092 /* -------------- */
2093     pseudo_bit_t        reserved1[0x00020];
2094 /* -------------- */
2095 }; 
2096
2097 /* Event_data Field - QP/EE Events */
2098
2099 struct tavorprm_qp_ee_event_st {        /* Little Endian */
2100     pseudo_bit_t        qpn_een[0x00018];      /* QP/EE/SRQ number event is reported for */
2101     pseudo_bit_t        reserved0[0x00008];
2102 /* -------------- */
2103     pseudo_bit_t        reserved1[0x00020];
2104 /* -------------- */
2105     pseudo_bit_t        reserved2[0x0001c];
2106     pseudo_bit_t        e_q[0x00001];          /* If set - EEN if cleared - QP in the QPN/EEN field
2107                                                  Not valid on SRQ events */
2108     pseudo_bit_t        reserved3[0x00003];
2109 /* -------------- */
2110     pseudo_bit_t        reserved4[0x00060];
2111 /* -------------- */
2112 }; 
2113
2114 /* InfiniHost Type0 Configuration Header */
2115
2116 struct tavorprm_mt23108_type0_st {      /* Little Endian */
2117     pseudo_bit_t        vendor_id[0x00010];    /* Hardwired to 0x15B3 */
2118     pseudo_bit_t        device_id[0x00010];    /* hardwired to 23108 */
2119 /* -------------- */
2120     pseudo_bit_t        command[0x00010];      /* PCI Command Register */
2121     pseudo_bit_t        status[0x00010];       /* PCI Status Register */
2122 /* -------------- */
2123     pseudo_bit_t        revision_id[0x00008];
2124     pseudo_bit_t        class_code_hca_class_code[0x00018];
2125 /* -------------- */
2126     pseudo_bit_t        cache_line_size[0x00008];/* Cache Line Size */
2127     pseudo_bit_t        latency_timer[0x00008];
2128     pseudo_bit_t        header_type[0x00008];  /* hardwired to zero */
2129     pseudo_bit_t        bist[0x00008];
2130 /* -------------- */
2131     pseudo_bit_t        bar0_ctrl[0x00004];    /* hard-wired to '0100 */
2132     pseudo_bit_t        reserved0[0x00010];
2133     pseudo_bit_t        bar0_l[0x0000c];       /* Lower bits of BAR0 (configuration space) */
2134 /* -------------- */
2135     pseudo_bit_t        bar0_h[0x00020];       /* Upper 32 bits of BAR0 (configuration space) */
2136 /* -------------- */
2137     pseudo_bit_t        bar1_ctrl[0x00004];    /* Hardwired to '1100 */
2138     pseudo_bit_t        reserved1[0x00010];
2139     pseudo_bit_t        bar1_l[0x0000c];       /* Lower bits of BAR1 */
2140 /* -------------- */
2141     pseudo_bit_t        bar1_h[0x00020];       /* upper 32 bits of BAR1 (User Access Revion - UAR - space) */
2142 /* -------------- */
2143     pseudo_bit_t        bar2_ctrl[0x00004];    /* Hardwired to '1100 */
2144     pseudo_bit_t        reserved2[0x00010];
2145     pseudo_bit_t        bar2_l[0x0000c];       /* Lower bits of BAR2 */
2146 /* -------------- */
2147     pseudo_bit_t        bar2_h[0x00020];       /* Upper 32 bits of BAR2 - DDR (attached memory) BAR */
2148 /* -------------- */
2149     pseudo_bit_t        cardbus_cis_pointer[0x00020];
2150 /* -------------- */
2151     pseudo_bit_t        subsystem_vendor_id[0x00010];/* Specified by the device NVMEM configuration */
2152     pseudo_bit_t        subsystem_id[0x00010]; /* Specified by the device NVMEM configuration */
2153 /* -------------- */
2154     pseudo_bit_t        expansion_rom_enable[0x00001];/* Expansion ROM Enable. Hardwired to 0 if expansion ROM is disabled in the device NVMEM configuration. */
2155     pseudo_bit_t        reserved3[0x0000a];
2156     pseudo_bit_t        expansion_rom_base_address[0x00015];/* Expansion ROM Base Address (upper 21 bit). Hardwired to 0 if expansion ROM is disabled in the device NVMEM configuration. */
2157 /* -------------- */
2158     pseudo_bit_t        capabilities_pointer[0x00008];/* Specified by the device NVMEM configuration */
2159     pseudo_bit_t        reserved4[0x00018];
2160 /* -------------- */
2161     pseudo_bit_t        reserved5[0x00020];
2162 /* -------------- */
2163     pseudo_bit_t        interrupt_line[0x00008];
2164     pseudo_bit_t        interrupt_pin[0x00008];
2165     pseudo_bit_t        min_gnt[0x00008];
2166     pseudo_bit_t        max_latency[0x00008];
2167 /* -------------- */
2168     pseudo_bit_t        reserved6[0x00100];
2169 /* -------------- */
2170     pseudo_bit_t        msi_cap_id[0x00008];
2171     pseudo_bit_t        msi_next_cap_ptr[0x00008];
2172     pseudo_bit_t        msi_en[0x00001];
2173     pseudo_bit_t        multiple_msg_cap[0x00003];
2174     pseudo_bit_t        multiple_msg_en[0x00003];
2175     pseudo_bit_t        cap_64_bit_addr[0x00001];
2176     pseudo_bit_t        reserved7[0x00008];
2177 /* -------------- */
2178     pseudo_bit_t        msg_addr_l[0x00020];
2179 /* -------------- */
2180     pseudo_bit_t        msg_addr_h[0x00020];
2181 /* -------------- */
2182     pseudo_bit_t        msg_data[0x00010];
2183     pseudo_bit_t        reserved8[0x00010];
2184 /* -------------- */
2185     pseudo_bit_t        pcix_cap_id[0x00008];
2186     pseudo_bit_t        pcix_next_cap_ptr[0x00008];
2187     pseudo_bit_t        pcix_command_reg[0x00010];/* PCIX command register */
2188 /* -------------- */
2189     pseudo_bit_t        pcix_status_reg[0x00020];/* PCIX Status Register */
2190 /* -------------- */
2191     pseudo_bit_t        reserved9[0x00440];
2192 /* -------------- */
2193 }; 
2194
2195 /* NTU QP Map Table Entry */
2196
2197 struct tavorprm_ntu_qpm_st {    /* Little Endian */
2198     pseudo_bit_t        va_h[0x00020];         /* Bits 63:32 of the virtual address to be used in IB request, Number of bits to be actually used depends on the page size (eg. will use all 52 for 4K page, 51 for 8K page etc). */
2199 /* -------------- */
2200     pseudo_bit_t        wm[0x00002];           /* Amount of data to fill in to the read response buffer prior to delivering read response to uplink
2201                                                  00 - forward
2202                                                  01 - MTU
2203                                                  10 - full message
2204                                                  11 - Reserved */
2205     pseudo_bit_t        mtu[0x00002];          /* MTUI of the channel to be used by this page, value is 256*2MU bytes */
2206     pseudo_bit_t        rd_len[0x00003];       /* Length of speculative prefetch for read, value is 16*2RD_Len bytes */
2207     pseudo_bit_t        fence[0x00002];
2208     pseudo_bit_t        reserved0[0x00002];
2209     pseudo_bit_t        err_fence[0x00001];    /* 0,00 - No action in NTU - normal flow
2210                                                  0,01 - Reserved (fence bits value of "01" is not defined)
2211                                                  0,10 - Enter PCU transaction to Error fifo, NO fence trap to consequent transaction
2212                                                  0,11 - Enter PCU transaction to Error fifo, fence trap to consequent transactions
2213                                                  1,xx - Enter PCU transaction to Error fifo, mark QRM indication in error fifo. */
2214     pseudo_bit_t        va_l[0x00014];         /* Bits 31:12 of the virtual address to be used in IB request, Number of bits to be actually used depends on the page size (eg. will use all 52 for 4K page, 51 for 8K page etc). */
2215 /* -------------- */
2216     pseudo_bit_t        rkey[0x00020];         /* RKey to be places for RDMA IB requests message */
2217 /* -------------- */
2218     pseudo_bit_t        my_qpn[0x00018];       /* Local QO this page is mapped  to */
2219     pseudo_bit_t        s[0x00001];            /* Force solicit event bit in the descriptor */
2220     pseudo_bit_t        e[0x00001];            /* Force E-bit in the descriptor */
2221     pseudo_bit_t        s_r[0x00001];          /* S/R# - generate Send as a result of write hit to this page */
2222     pseudo_bit_t        b[0x00001];            /* Breakpoint - ptransfer control to firmware for every cycle that hits this page */
2223     pseudo_bit_t        reserved1[0x00002];
2224     pseudo_bit_t        ce[0x00001];           /* Cache Enable - entry can be cached if this bit is set. */
2225     pseudo_bit_t        v[0x00001];            /* Valid bit - the entry is valid only if this bit is set */
2226 /* -------------- */
2227 }; 
2228
2229 /* Event Data Field - Performance Monitor */
2230
2231 struct tavorprm_performance_monitor_event_st {  /* Little Endian */
2232     struct tavorprm_performance_monitors_st     performance_monitor_snapshot;/* Performance monitor snapshot */
2233 /* -------------- */
2234     pseudo_bit_t        monitor_number[0x00008];/* 0x01 - SQPC
2235                                                  0x02 - RQPC
2236                                                  0x03 - CQC
2237                                                  0x04 - Rkey
2238                                                  0x05 - TLB
2239                                                  0x06 - port0
2240                                                  0x07 - port1 */
2241     pseudo_bit_t        reserved0[0x00018];
2242 /* -------------- */
2243     pseudo_bit_t        reserved1[0x00040];
2244 /* -------------- */
2245 }; 
2246
2247 /* Event_data Field - Page Faults */
2248
2249 struct tavorprm_page_fault_event_data_st {      /* Little Endian */
2250     pseudo_bit_t        reserved0[0x00040];
2251 /* -------------- */
2252     pseudo_bit_t        s_r[0x00001];          /* Send (1) or Receive (0) queue caused page fault */
2253     pseudo_bit_t        r_l[0x00001];          /* Remote (1) or local (0) access caused fault */
2254     pseudo_bit_t        w_d[0x00001];          /* WQE (1) or data (0) access caused fault */
2255     pseudo_bit_t        wqv[0x00001];          /* Indicates whether message caused fault consumes descriptor (valid for receive queue only). */
2256     pseudo_bit_t        fault_type[0x00004];   /* 0000-0111  - RESERVED
2257                                                  1000 - Translation page not present
2258                                                  1001 - RESERVED
2259                                                  1010 - Page write access violation
2260                                                  1011 - 1101  -  RESERVED
2261                                                  1110 - Unsupported non-present page fault
2262                                                  1111 - unsupported write access fault */
2263     pseudo_bit_t        reserved1[0x00018];
2264 /* -------------- */
2265     pseudo_bit_t        va_h[0x00020];         /* Virtual address that caused access fault[63:32] */
2266 /* -------------- */
2267     pseudo_bit_t        va_l[0x00020];         /* Virtual address that caused access fault[31:0] */
2268 /* -------------- */
2269     pseudo_bit_t        mem_key[0x00020];      /* Memory Key used for address translation */
2270 /* -------------- */
2271 }; 
2272
2273 /* Event_data Field - Port State Change */
2274
2275 struct tavorprm_port_state_change_st {  /* Little Endian */
2276     pseudo_bit_t        reserved0[0x00040];
2277 /* -------------- */
2278     pseudo_bit_t        reserved1[0x0001c];
2279     pseudo_bit_t        p[0x00002];            /* Port number (1 or 2) */
2280     pseudo_bit_t        reserved2[0x00002];
2281 /* -------------- */
2282     pseudo_bit_t        reserved3[0x00060];
2283 /* -------------- */
2284 }; 
2285
2286 /* Event_data Field - Completion Queue Error */
2287
2288 struct tavorprm_completion_queue_error_st {     /* Little Endian */
2289     pseudo_bit_t        cqn[0x00018];          /* CQ number event is reported for */
2290     pseudo_bit_t        reserved0[0x00008];
2291 /* -------------- */
2292     pseudo_bit_t        reserved1[0x00020];
2293 /* -------------- */
2294     pseudo_bit_t        syndrome[0x00008];     /* Error syndrome
2295                                                  0x01 - CQ overrun
2296                                                  0x02 - CQ access violation error */
2297     pseudo_bit_t        reserved2[0x00018];
2298 /* -------------- */
2299     pseudo_bit_t        reserved3[0x00060];
2300 /* -------------- */
2301 }; 
2302
2303 /* Event_data Field - Completion Event */
2304
2305 struct tavorprm_completion_event_st {   /* Little Endian */
2306     pseudo_bit_t        cqn[0x00018];          /* CQ number event is reported for */
2307     pseudo_bit_t        reserved0[0x00008];
2308 /* -------------- */
2309     pseudo_bit_t        reserved1[0x000a0];
2310 /* -------------- */
2311 }; 
2312
2313 /* Event Queue Entry */
2314
2315 struct tavorprm_event_queue_entry_st {  /* Little Endian */
2316     pseudo_bit_t        event_sub_type[0x00008];/* Event Sub Type. 
2317                                                  Defined for events which have sub types, zero elsewhere. */
2318     pseudo_bit_t        reserved0[0x00008];
2319     pseudo_bit_t        event_type[0x00008];   /* Event Type */
2320     pseudo_bit_t        reserved1[0x00008];
2321 /* -------------- */
2322     pseudo_bit_t        event_data[6][0x00020];/* Delivers auxilary data to handle event. */
2323 /* -------------- */
2324     pseudo_bit_t        reserved2[0x00007];
2325     pseudo_bit_t        owner[0x00001];        /* Owner of the entry 
2326                                                  0 SW 
2327                                                  1 HW */
2328     pseudo_bit_t        reserved3[0x00018];
2329 /* -------------- */
2330 }; 
2331
2332 /* QP/EE State Transitions Command Parameters */
2333
2334 struct tavorprm_qp_ee_state_transitions_st {    /* Little Endian */
2335     pseudo_bit_t        opt_param_mask[0x00020];/* This field defines which optional parameters are passed. Each bit specifies whether optional parameter is passed (set) or not (cleared). The optparammask is defined for each QP/EE command. */
2336 /* -------------- */
2337     pseudo_bit_t        reserved0[0x00020];
2338 /* -------------- */
2339     struct tavorprm_queue_pair_ee_context_entry_st      qpc_eec_data;/* QPC/EEC data */
2340 /* -------------- */
2341     pseudo_bit_t        reserved1[0x007c0];
2342 /* -------------- */
2343 }; 
2344
2345 /* Completion Queue Entry Format */
2346
2347 struct tavorprm_completion_queue_entry_st {     /* Little Endian */
2348     pseudo_bit_t        my_qpn[0x00018];       /* Indicates the QP for which completion is being reported */
2349     pseudo_bit_t        reserved0[0x00004];
2350     pseudo_bit_t        ver[0x00004];          /* CQE version. 
2351                                                  0 for InfiniHost */
2352 /* -------------- */
2353     pseudo_bit_t        my_ee[0x00018];        /* EE context (for RD only).
2354                                                  Invalid for Bind and Nop operation on RD. */
2355     pseudo_bit_t        reserved1[0x00008];
2356 /* -------------- */
2357     pseudo_bit_t        rqpn[0x00018];         /* Remote (source) QP number. Valid in Responder CQE only for Datagram QP. */
2358     pseudo_bit_t        reserved2[0x00008];
2359 /* -------------- */
2360     pseudo_bit_t        rlid[0x00010];         /* Remote (source) LID of the message. Valid in Responder of UD QP CQE only. */
2361     pseudo_bit_t        ml_path[0x00007];      /* My (destination) LID path bits - these are the lowemost LMC bits of the DLID in an incoming UD packet, higher bits of this field, that are not part of the LMC bits are zeroed by HW.
2362                                                  Valid in responder of UD QP CQE only.
2363                                                  Invalid if incoming message DLID is the permissive LID or incoming message is multicast. */
2364     pseudo_bit_t        g[0x00001];            /* GRH present indicator. Valid in Responder of UD QP CQE only. */
2365     pseudo_bit_t        reserved3[0x00001];
2366     pseudo_bit_t        reserved4[0x00003];
2367     pseudo_bit_t        sl[0x00004];           /* Service Level of the message. Valid in Responder of UD QP CQE only. */
2368 /* -------------- */
2369     pseudo_bit_t        immediate_ethertype_pkey_indx_eecredits[0x00020];/* Valid for receive queue completion only. 
2370                                                  If Opcode field indicates that this was send/write with immediate, this field contains immediate field of the packet. 
2371                                                  If completion corresponds to RAW receive queue, bits 15:0 contain Ethertype field of the packet. 
2372                                                  If completion corresponds to GSI receive queue, bits 31:16 contain index in PKey table that matches PKey of the message arrived. 
2373                                                  For CQE of send queue of the reliable connection service, bits [4:0] of this field contain the encoded EEcredits received in last ACK of the message.
2374                                                   */
2375 /* -------------- */
2376     pseudo_bit_t        byte_cnt[0x00020];     /* Byte count of data actually transferred (valid for receive queue completions only) */
2377 /* -------------- */
2378     pseudo_bit_t        wqe_size[0x00006];     /* Size (in 16-byte chunks) of WQE completion is reported for */
2379     pseudo_bit_t        wqe_adr[0x0001a];      /* Bits 31:6 of WQE virtual address completion is reported for. The 6 least significant bits are zero. */
2380 /* -------------- */
2381     pseudo_bit_t        reserved5[0x00007];
2382     pseudo_bit_t        owner[0x00001];        /* Owner field. Zero value of this field means SW ownership of CQE. */
2383     pseudo_bit_t        reserved6[0x0000d];
2384     pseudo_bit_t        reserved7[0x00001];
2385     pseudo_bit_t        reserved8[0x00001];
2386     pseudo_bit_t        s[0x00001];            /* If set, completion is reported for Send queue, if cleared - receive queue. */
2387     pseudo_bit_t        opcode[0x00008];       /* The opcode of WQE completion is reported for.
2388                                                  For CQEs corresponding to send completion, NOPCODE field of the WQE is copied to this field.
2389                                                  For CQEs corresponding to receive completions, opcode field of last packet in the message copied to this field.
2390                                                  For CQEs corresponding to the receive queue of QPs mapped to QP1, the opcode will be SEND with Immediate (messages are guaranteed to be SEND only)
2391                                                  
2392                                                  The following values are reported in case of completion with error:
2393                                                  0xFE - For completion with error on Receive Queues
2394                                                  0xFF - For completion with error on Send Queues */
2395 /* -------------- */
2396 }; 
2397
2398 /*  */
2399
2400 struct tavorprm_ecc_detect_event_data_st {      /* Little Endian */
2401     pseudo_bit_t        reserved0[0x00080];
2402 /* -------------- */
2403     pseudo_bit_t        cause_lsb[0x00001];
2404     pseudo_bit_t        reserved1[0x00002];
2405     pseudo_bit_t        cause_msb[0x00001];
2406     pseudo_bit_t        reserved2[0x00002];
2407     pseudo_bit_t        err_rmw[0x00001];
2408     pseudo_bit_t        err_src_id[0x00003];
2409     pseudo_bit_t        err_da[0x00002];
2410     pseudo_bit_t        err_ba[0x00002];
2411     pseudo_bit_t        reserved3[0x00011];
2412     pseudo_bit_t        overflow[0x00001];
2413 /* -------------- */
2414     pseudo_bit_t        err_ra[0x00010];
2415     pseudo_bit_t        err_ca[0x00010];
2416 /* -------------- */
2417 }; 
2418
2419 /* MAD_IFC Input Mailbox */
2420
2421 struct tavorprm_mad_ifc_st {    /* Little Endian */
2422     pseudo_bit_t        request_mad_packet[64][0x00020];/* Request MAD Packet (256bytes) */
2423 /* -------------- */
2424     pseudo_bit_t        my_qpn[0x00018];       /* Destination QP number from the received MAD. 
2425                                                  This field is reserved if Mad_extended_info indication in the input modifier is clear. */
2426     pseudo_bit_t        reserved0[0x00008];
2427 /* -------------- */
2428     pseudo_bit_t        rqpn[0x00018];         /* Remote (source) QP number  from the received MAD.
2429                                                  This field is reserved if Mad_extended_info indication in the input modifier is clear. */
2430     pseudo_bit_t        reserved1[0x00008];
2431 /* -------------- */
2432     pseudo_bit_t        rlid[0x00010];         /* Remote (source) LID  from the received MAD.
2433                                                  This field is reserved if Mad_extended_info indication in the input modifier is clear. */
2434     pseudo_bit_t        ml_path[0x00007];      /* My (destination) LID path bits  from the received MAD.
2435                                                  This field is reserved if Mad_extended_info indication in the input modifier is clear. */
2436     pseudo_bit_t        g[0x00001];            /* If set, the GRH field in valid. 
2437                                                  This field is reserved if Mad_extended_info indication in the input modifier is clear. */
2438     pseudo_bit_t        reserved2[0x00004];
2439     pseudo_bit_t        sl[0x00004];           /* Service Level of the received MAD.
2440                                                  This field is reserved if Mad_extended_info indication in the input modifier is clear. */
2441 /* -------------- */
2442     pseudo_bit_t        pkey_indx[0x00010];    /* Index in PKey table that matches PKey of the received MAD. 
2443                                                  This field is reserved if Mad_extended_info indication in the input modifier is clear. */
2444     pseudo_bit_t        reserved3[0x00010];
2445 /* -------------- */
2446     pseudo_bit_t        reserved4[0x00180];
2447 /* -------------- */
2448     pseudo_bit_t        grh[10][0x00020];      /* The GRH field of the MAD packet that was scattered to the first 40 bytes pointed to by the scatter list. 
2449                                                  Valid if Mad_extended_info bit (in the input modifier) and g bit are set. 
2450                                                  Otherwise this field is reserved. */
2451 /* -------------- */
2452     pseudo_bit_t        reserved5[0x004c0];
2453 /* -------------- */
2454 }; 
2455
2456 /* Event_data Field - ECC Detection Event */
2457
2458 struct tavorprm_scrubbing_event_st {    /* Little Endian */
2459     pseudo_bit_t        reserved0[0x00080];
2460 /* -------------- */
2461     pseudo_bit_t        cause_lsb[0x00001];    /* data integrity error cause:
2462                                                  single ECC error in the 64bit lsb data, on the rise edge of the clock */
2463     pseudo_bit_t        reserved1[0x00002];
2464     pseudo_bit_t        cause_msb[0x00001];    /* data integrity error cause:
2465                                                  single ECC error in the 64bit msb data, on the fall edge of the clock */
2466     pseudo_bit_t        reserved2[0x00002];
2467     pseudo_bit_t        err_rmw[0x00001];      /* transaction type:
2468                                                  0 - read
2469                                                  1 - read/modify/write */
2470     pseudo_bit_t        err_src_id[0x00003];   /* source of the transaction: 0x4 - PCI, other - internal or IB */
2471     pseudo_bit_t        err_da[0x00002];       /* Error DIMM address */
2472     pseudo_bit_t        err_ba[0x00002];       /* Error bank address */
2473     pseudo_bit_t        reserved3[0x00011];
2474     pseudo_bit_t        overflow[0x00001];     /* Fatal: ECC error FIFO overflow - ECC errors were detected, which may or may not have been corrected by InfiniHost */
2475 /* -------------- */
2476     pseudo_bit_t        err_ra[0x00010];       /* Error row address */
2477     pseudo_bit_t        err_ca[0x00010];       /* Error column address */
2478 /* -------------- */
2479 }; 
2480
2481 /* PBL */
2482
2483 struct tavorprm_pbl_st {        /* Little Endian */
2484     pseudo_bit_t        mtt_0_h[0x00020];      /* First MTT[63:32] */
2485 /* -------------- */
2486     pseudo_bit_t        mtt_0_l[0x00020];      /* First MTT[31:0] */
2487 /* -------------- */
2488     pseudo_bit_t        mtt_1_h[0x00020];      /* Second MTT[63:32] */
2489 /* -------------- */
2490     pseudo_bit_t        mtt_1_l[0x00020];      /* Second MTT[31:0] */
2491 /* -------------- */
2492     pseudo_bit_t        mtt_2_h[0x00020];      /* Third MTT[63:32] */
2493 /* -------------- */
2494     pseudo_bit_t        mtt_2_l[0x00020];      /* Third MTT[31:0] */
2495 /* -------------- */
2496     pseudo_bit_t        mtt_3_h[0x00020];      /* Fourth MTT[63:32] */
2497 /* -------------- */
2498     pseudo_bit_t        mtt_3_l[0x00020];      /* Fourth MTT[31:0] */
2499 /* -------------- */
2500 }; 
2501
2502 /* Miscellaneous Counters */
2503
2504 struct tavorprm_misc_counters_st {      /* Little Endian */
2505     pseudo_bit_t        ddr_scan_cnt[0x00020]; /* Number of times whole of DDR was scanned */
2506 /* -------------- */
2507     pseudo_bit_t        reserved0[0x007e0];
2508 /* -------------- */
2509 }; 
2510
2511 /* MAD_IFC Opcode Modifier */
2512
2513 struct tavorprm_mad_ifc_opcode_modifier_st {    /* Little Endian */
2514     pseudo_bit_t        mkey[0x00001];         /* Enable MKey validation. */
2515     pseudo_bit_t        bkey[0x00001];         /* Enable BKey validation. */
2516     pseudo_bit_t        reserved0[0x0001d];
2517     pseudo_bit_t        mad_extended_info[0x00001];/* Mad_Extended_Info valid bit.
2518                                                  Requeried for for trap generation when BKey check is enabled. */
2519 /* -------------- */
2520 }; 
2521
2522 /* MAD_IFC Input Modifier */
2523
2524 struct tavorprm_mad_ifc_input_modifier_st {     /* Little Endian */
2525     pseudo_bit_t        port_number[0x00008];  /* Port number (1 or 2). */
2526     pseudo_bit_t        reserved0[0x00008];
2527     pseudo_bit_t        rlid[0x00001];         /* Remote (source) LID  from the received MAD.
2528                                                  This field is required for trap generation upon MKey/BKey validation. */
2529     pseudo_bit_t        reserved1[0x0000f];
2530 /* -------------- */
2531 }; 
2532
2533 /* Fast_Registration_Segment */
2534
2535 struct tavorprm_fast_registration_segment_st {  /* Little Endian */
2536     pseudo_bit_t        reserved0[0x0001b];
2537     pseudo_bit_t        lr[0x00001];           /* If set - Local Read access will be enabled */
2538     pseudo_bit_t        lw[0x00001];           /* If set - Local Write access will be enabled */
2539     pseudo_bit_t        rr[0x00001];           /* If set - Remote Read access will be enabled */
2540     pseudo_bit_t        rw[0x00001];           /* If set - Remote Write access will be enabled */
2541     pseudo_bit_t        a[0x00001];            /* If set - Remote Atomic access will be enabled */
2542 /* -------------- */
2543     pseudo_bit_t        pbl_ptr_63_32[0x00020];/* Physical address pointer [63:32] to the physical block list */
2544 /* -------------- */
2545     pseudo_bit_t        mem_key[0x00020];      /* Memory Key on which the fast registration is executed on. */
2546 /* -------------- */
2547     pseudo_bit_t        page_size[0x00005];    /* Page size used for the region. Actual size is [4K]*2^Page_size bytes.
2548                                                  page_size should be less than 20. */
2549     pseudo_bit_t        reserved1[0x00002];
2550     pseudo_bit_t        zb[0x00001];           /* Zero Based Region */
2551     pseudo_bit_t        pbl_ptr_31_8[0x00018]; /* Physical address pointer [31:8] to the physical block list */
2552 /* -------------- */
2553     pseudo_bit_t        start_address_h[0x00020];/* Start Address[63:32] - Virtual Address where this region starts */
2554 /* -------------- */
2555     pseudo_bit_t        start_address_l[0x00020];/* Start Address[31:0] - Virtual Address where this region starts */
2556 /* -------------- */
2557     pseudo_bit_t        reg_len_h[0x00020];    /* Region Length[63:32] */
2558 /* -------------- */
2559     pseudo_bit_t        reg_len_l[0x00020];    /* Region Length[31:0] */
2560 /* -------------- */
2561 }; 
2562
2563 /* 0 */
2564
2565 struct tavorprm_tavor_prm_st {  /* Little Endian */
2566     struct tavorprm_completion_queue_entry_st   completion_queue_entry;/* Completion Queue Entry Format */
2567 /* -------------- */
2568     pseudo_bit_t        reserved0[0x7ff00];
2569 /* -------------- */
2570     struct tavorprm_qp_ee_state_transitions_st  qp_ee_state_transitions;/* QP/EE State Transitions Command Parameters */
2571 /* -------------- */
2572     pseudo_bit_t        reserved1[0x7f000];
2573 /* -------------- */
2574     struct tavorprm_event_queue_entry_st        event_queue_entry;/* Event Queue Entry */
2575 /* -------------- */
2576     pseudo_bit_t        reserved2[0x7ff00];
2577 /* -------------- */
2578     struct tavorprm_completion_event_st completion_event;/* Event_data Field - Completion Event */
2579 /* -------------- */
2580     pseudo_bit_t        reserved3[0x7ff40];
2581 /* -------------- */
2582     struct tavorprm_completion_queue_error_st   completion_queue_error;/* Event_data Field - Completion Queue Error */
2583 /* -------------- */
2584     pseudo_bit_t        reserved4[0x7ff40];
2585 /* -------------- */
2586     struct tavorprm_port_state_change_st        port_state_change;/* Event_data Field - Port State Change */
2587 /* -------------- */
2588     pseudo_bit_t        reserved5[0xfff40];
2589 /* -------------- */
2590     struct tavorprm_page_fault_event_data_st    page_fault_event_data;/* Event_data Field - Page Faults */
2591 /* -------------- */
2592     pseudo_bit_t        reserved6[0x7ff40];
2593 /* -------------- */
2594     struct tavorprm_performance_monitor_event_st        performance_monitor_event;/* Event Data Field - Performance Monitor */
2595 /* -------------- */
2596     pseudo_bit_t        reserved7[0x7ff20];
2597 /* -------------- */
2598     struct tavorprm_ntu_qpm_st  ntu_qpm; /* NTU QP Map Table Entry */
2599 /* -------------- */
2600     pseudo_bit_t        reserved8[0x7ff80];
2601 /* -------------- */
2602     struct tavorprm_mt23108_type0_st    mt23108_type0;/* InfiniHost Type0 Configuration Header */
2603 /* -------------- */
2604     pseudo_bit_t        reserved9[0x7f800];
2605 /* -------------- */
2606     struct tavorprm_qp_ee_event_st      qp_ee_event;/* Event_data Field - QP/EE Events */
2607 /* -------------- */
2608     pseudo_bit_t        reserved10[0x00040];
2609 /* -------------- */
2610     struct tavorprm_gpio_event_data_st  gpio_event_data;
2611 /* -------------- */
2612     pseudo_bit_t        reserved11[0x7fe40];
2613 /* -------------- */
2614     struct tavorprm_ud_address_vector_st        ud_address_vector;/* UD Address Vector */
2615 /* -------------- */
2616     pseudo_bit_t        reserved12[0x7ff00];
2617 /* -------------- */
2618     struct tavorprm_queue_pair_ee_context_entry_st      queue_pair_ee_context_entry;/* QP and EE Context Entry */
2619 /* -------------- */
2620     pseudo_bit_t        reserved13[0x7f800];
2621 /* -------------- */
2622     struct tavorprm_address_path_st     address_path;/* Address Path */
2623 /* -------------- */
2624     pseudo_bit_t        reserved14[0x7ff00];
2625 /* -------------- */
2626     struct tavorprm_completion_queue_context_st completion_queue_context;/* Completion Queue Context Table Entry */
2627 /* -------------- */
2628     pseudo_bit_t        reserved15[0x7fe00];
2629 /* -------------- */
2630     struct tavorprm_mpt_st      mpt;         /* Memory Protection Table (MPT) Entry */
2631 /* -------------- */
2632     pseudo_bit_t        reserved16[0x7fe00];
2633 /* -------------- */
2634     struct tavorprm_mtt_st      mtt;         /* Memory Translation Table (MTT) Entry */
2635 /* -------------- */
2636     pseudo_bit_t        reserved17[0x7ffc0];
2637 /* -------------- */
2638     struct tavorprm_eqc_st      eqc;         /* Event Queue Context Table Entry */
2639 /* -------------- */
2640     pseudo_bit_t        reserved18[0x7fe00];
2641 /* -------------- */
2642     struct tavorprm_performance_monitors_st     performance_monitors;/* Performance Monitors */
2643 /* -------------- */
2644     pseudo_bit_t        reserved19[0x7ff80];
2645 /* -------------- */
2646     struct tavorprm_hca_command_register_st     hca_command_register;/* HCA Command Register (HCR) */
2647 /* -------------- */
2648     pseudo_bit_t        reserved20[0xfff20];
2649 /* -------------- */
2650     struct tavorprm_init_hca_st init_hca;/* INIT_HCA & QUERY_HCA Parameters Block */
2651 /* -------------- */
2652     pseudo_bit_t        reserved21[0x7f000];
2653 /* -------------- */
2654     struct tavorprm_qpcbaseaddr_st      qpcbaseaddr;/* QPC/EEC/CQC/EQC/RDB Parameters */
2655 /* -------------- */
2656     pseudo_bit_t        reserved22[0x7fc00];
2657 /* -------------- */
2658     struct tavorprm_udavtable_memory_parameters_st      udavtable_memory_parameters;/* Memory Access Parameters for UD Address Vector Table */
2659 /* -------------- */
2660     pseudo_bit_t        reserved23[0x7ffc0];
2661 /* -------------- */
2662     struct tavorprm_multicastparam_st   multicastparam;/* Multicast Support Parameters */
2663 /* -------------- */
2664     pseudo_bit_t        reserved24[0x7ff00];
2665 /* -------------- */
2666     struct tavorprm_tptparams_st        tptparams;/* Translation and Protection Tables Parameters */
2667 /* -------------- */
2668     pseudo_bit_t        reserved25[0x7ff00];
2669 /* -------------- */
2670     struct tavorprm_query_ddr_st        query_ddr;/* QUERY_DDR Parameters Block */
2671 /* -------------- */
2672     struct tavorprm_access_ddr_st       access_ddr;
2673 /* -------------- */
2674     pseudo_bit_t        reserved26[0x7f700];
2675 /* -------------- */
2676     struct tavorprm_dimminfo_st dimminfo;/* Logical DIMM Information */
2677 /* -------------- */
2678     pseudo_bit_t        reserved27[0x7ff00];
2679 /* -------------- */
2680     struct tavorprm_query_fw_st query_fw;/* QUERY_FW Parameters Block */
2681 /* -------------- */
2682     pseudo_bit_t        reserved28[0x7f800];
2683 /* -------------- */
2684     struct tavorprm_query_adapter_st    query_adapter;/* QUERY_ADAPTER Parameters Block */
2685 /* -------------- */
2686     pseudo_bit_t        reserved29[0x7f800];
2687 /* -------------- */
2688     struct tavorprm_query_dev_lim_st    query_dev_lim;/* Query Device Limitations */
2689 /* -------------- */
2690     pseudo_bit_t        reserved30[0x7f800];
2691 /* -------------- */
2692     struct tavorprm_uar_params_st       uar_params;/* UAR Parameters */
2693 /* -------------- */
2694     pseudo_bit_t        reserved31[0x7ff00];
2695 /* -------------- */
2696     struct tavorprm_init_ib_st  init_ib; /* INIT_IB Parameters */
2697 /* -------------- */
2698     pseudo_bit_t        reserved32[0x7f800];
2699 /* -------------- */
2700     struct tavorprm_mgm_entry_st        mgm_entry;/* Multicast Group Member */
2701 /* -------------- */
2702     pseudo_bit_t        reserved33[0x7fe00];
2703 /* -------------- */
2704     struct tavorprm_set_ib_st   set_ib;   /* SET_IB Parameters */
2705 /* -------------- */
2706     pseudo_bit_t        reserved34[0x7fe00];
2707 /* -------------- */
2708     struct tavorprm_rd_send_doorbell_st rd_send_doorbell;/* RD-send doorbell */
2709 /* -------------- */
2710     pseudo_bit_t        reserved35[0x7ff80];
2711 /* -------------- */
2712     struct tavorprm_send_doorbell_st    send_doorbell;/* Send doorbell */
2713 /* -------------- */
2714     pseudo_bit_t        reserved36[0x7ffc0];
2715 /* -------------- */
2716     struct tavorprm_receive_doorbell_st receive_doorbell;/* Receive doorbell */
2717 /* -------------- */
2718     pseudo_bit_t        reserved37[0x7ffc0];
2719 /* -------------- */
2720     struct tavorprm_cq_cmd_doorbell_st  cq_cmd_doorbell;/* CQ Doorbell */
2721 /* -------------- */
2722     pseudo_bit_t        reserved38[0x7ffc0];
2723 /* -------------- */
2724     struct tavorprm_eq_cmd_doorbell_st  eq_cmd_doorbell;/* EQ Doorbell */
2725 /* -------------- */
2726     pseudo_bit_t        reserved39[0x7ffc0];
2727 /* -------------- */
2728     struct tavorprm_uar_st      uar;         /* User Access Region */
2729 /* -------------- */
2730     pseudo_bit_t        reserved40[0x7c000];
2731 /* -------------- */
2732     struct tavorprm_mgmqp_st    mgmqp;     /* Multicast Group Member QP */
2733 /* -------------- */
2734     pseudo_bit_t        reserved41[0x7ffe0];
2735 /* -------------- */
2736     struct tavorprm_query_debug_msg_st  query_debug_msg;/* Query Debug Message */
2737 /* -------------- */
2738     pseudo_bit_t        reserved42[0x7f800];
2739 /* -------------- */
2740     struct tavorprm_sys_en_out_param_st sys_en_out_param;/* SYS_EN Output Parameter */
2741 /* -------------- */
2742     pseudo_bit_t        reserved43[0x7ffc0];
2743 /* -------------- */
2744     struct tavorprm_resize_cq_st        resize_cq;/* Resize CQ Input Mailbox */
2745 /* -------------- */
2746     pseudo_bit_t        reserved44[0x7fe00];
2747 /* -------------- */
2748     struct tavorprm_completion_with_error_st    completion_with_error;/* Completion with Error CQE */
2749 /* -------------- */
2750     pseudo_bit_t        reserved45[0x7ff00];
2751 /* -------------- */
2752     struct tavorprm_hcr_completion_event_st     hcr_completion_event;/* Event_data Field - HCR Completion Event */
2753 /* -------------- */
2754     pseudo_bit_t        reserved46[0x7ff40];
2755 /* -------------- */
2756     struct tavorprm_transport_and_ci_error_counters_st  transport_and_ci_error_counters;/* Transport and CI Error Counters */
2757 /* -------------- */
2758     pseudo_bit_t        reserved47[0x7f000];
2759 /* -------------- */
2760     struct tavorprm_performance_counters_st     performance_counters;/* Performance Counters */
2761 /* -------------- */
2762     pseudo_bit_t        reserved48[0x7f800];
2763 /* -------------- */
2764     struct tavorprm_query_bar_st        query_bar;/* Query BAR */
2765 /* -------------- */
2766     pseudo_bit_t        reserved49[0x7ffc0];
2767 /* -------------- */
2768     struct tavorprm_cfg_schq_st cfg_schq;/* Schedule queues configuration */
2769 /* -------------- */
2770     pseudo_bit_t        reserved50[0x7f800];
2771 /* -------------- */
2772     struct tavorprm_mt23108_configuration_registers_st  mt23108_configuration_registers;/* InfiniHost Configuration Registers - Used in Mem-Free mode only */
2773 /* -------------- */
2774     pseudo_bit_t        reserved51[0x80000];
2775 /* -------------- */
2776     pseudo_bit_t        reserved52[0x00100];
2777 /* -------------- */
2778     pseudo_bit_t        reserved53[0x7ff00];
2779 /* -------------- */
2780     pseudo_bit_t        reserved54[0x00100];
2781 /* -------------- */
2782     pseudo_bit_t        reserved55[0x7ff00];
2783 /* -------------- */
2784     struct tavorprm_srq_context_st      srq_context;/* SRQ Context */
2785 /* -------------- */
2786     pseudo_bit_t        reserved56[0x7ff00];
2787 /* -------------- */
2788     struct tavorprm_mod_stat_cfg_st     mod_stat_cfg;/* MOD_STAT_CFG */
2789 /* -------------- */
2790     pseudo_bit_t        reserved57[0x00080];
2791 /* -------------- */
2792     pseudo_bit_t        reserved58[0x00040];
2793 /* -------------- */
2794     pseudo_bit_t        reserved59[0x1bff740];
2795 /* -------------- */
2796 }; 
2797
2798 #include "MT23108_PRM_append.h"
2799
2800 #endif /* H_prefix_tavorprm_bits_fixnames_MT23108_PRM_csp_H */