]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/vnic/q_struct.h
Implement pci_enable_msi() and pci_disable_msi() in the LinuxKPI.
[FreeBSD/FreeBSD.git] / sys / dev / vnic / q_struct.h
1 /*
2  * Copyright (C) 2015 Cavium Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  *
28  */
29
30 #ifndef Q_STRUCT_H
31 #define Q_STRUCT_H
32
33 #define __LITTLE_ENDIAN_BITFIELD
34
35 /* Load transaction types for reading segment bytes specified by
36  * NIC_SEND_GATHER_S[LD_TYPE].
37  */
38 enum nic_send_ld_type_e {
39         NIC_SEND_LD_TYPE_E_LDD = 0x0,
40         NIC_SEND_LD_TYPE_E_LDT = 0x1,
41         NIC_SEND_LD_TYPE_E_LDWB = 0x2,
42         NIC_SEND_LD_TYPE_E_ENUM_LAST = 0x3,
43 };
44
45 enum ether_type_algorithm {
46         ETYPE_ALG_NONE = 0x0,
47         ETYPE_ALG_SKIP = 0x1,
48         ETYPE_ALG_ENDPARSE = 0x2,
49         ETYPE_ALG_VLAN = 0x3,
50         ETYPE_ALG_VLAN_STRIP = 0x4,
51 };
52
53 enum layer3_type {
54         L3TYPE_NONE = 0x00,
55         L3TYPE_GRH = 0x01,
56         L3TYPE_IPV4 = 0x04,
57         L3TYPE_IPV4_OPTIONS = 0x05,
58         L3TYPE_IPV6 = 0x06,
59         L3TYPE_IPV6_OPTIONS = 0x07,
60         L3TYPE_ET_STOP = 0x0D,
61         L3TYPE_OTHER = 0x0E,
62 };
63
64 enum layer4_type {
65         L4TYPE_NONE = 0x00,
66         L4TYPE_IPSEC_ESP = 0x01,
67         L4TYPE_IPFRAG = 0x02,
68         L4TYPE_IPCOMP = 0x03,
69         L4TYPE_TCP = 0x04,
70         L4TYPE_UDP = 0x05,
71         L4TYPE_SCTP = 0x06,
72         L4TYPE_GRE = 0x07,
73         L4TYPE_ROCE_BTH = 0x08,
74         L4TYPE_OTHER = 0x0E,
75 };
76
77 /* CPI and RSSI configuration */
78 enum cpi_algorithm_type {
79         CPI_ALG_NONE = 0x0,
80         CPI_ALG_VLAN = 0x1,
81         CPI_ALG_VLAN16 = 0x2,
82         CPI_ALG_DIFF = 0x3,
83 };
84
85 enum rss_algorithm_type {
86         RSS_ALG_NONE = 0x00,
87         RSS_ALG_PORT = 0x01,
88         RSS_ALG_IP = 0x02,
89         RSS_ALG_TCP_IP = 0x03,
90         RSS_ALG_UDP_IP = 0x04,
91         RSS_ALG_SCTP_IP = 0x05,
92         RSS_ALG_GRE_IP = 0x06,
93         RSS_ALG_ROCE = 0x07,
94 };
95
96 enum rss_hash_cfg {
97         RSS_HASH_L2ETC = 0x00,
98         RSS_HASH_IP = 0x01,
99         RSS_HASH_TCP = 0x02,
100         RSS_HASH_TCP_SYN_DIS = 0x03,
101         RSS_HASH_UDP = 0x04,
102         RSS_HASH_L4ETC = 0x05,
103         RSS_HASH_ROCE = 0x06,
104         RSS_L3_BIDI = 0x07,
105         RSS_L4_BIDI = 0x08,
106 };
107
108 /* Completion queue entry types */
109 enum cqe_type {
110         CQE_TYPE_INVALID = 0x0,
111         CQE_TYPE_RX = 0x2,
112         CQE_TYPE_RX_SPLIT = 0x3,
113         CQE_TYPE_RX_TCP = 0x4,
114         CQE_TYPE_SEND = 0x8,
115         CQE_TYPE_SEND_PTP = 0x9,
116 };
117
118 enum cqe_rx_tcp_status {
119         CQE_RX_STATUS_VALID_TCP_CNXT = 0x00,
120         CQE_RX_STATUS_INVALID_TCP_CNXT = 0x0F,
121 };
122
123 enum cqe_send_status {
124         CQE_SEND_STATUS_GOOD = 0x00,
125         CQE_SEND_STATUS_DESC_FAULT = 0x01,
126         CQE_SEND_STATUS_HDR_CONS_ERR = 0x11,
127         CQE_SEND_STATUS_SUBDESC_ERR = 0x12,
128         CQE_SEND_STATUS_IMM_SIZE_OFLOW = 0x80,
129         CQE_SEND_STATUS_CRC_SEQ_ERR = 0x81,
130         CQE_SEND_STATUS_DATA_SEQ_ERR = 0x82,
131         CQE_SEND_STATUS_MEM_SEQ_ERR = 0x83,
132         CQE_SEND_STATUS_LOCK_VIOL = 0x84,
133         CQE_SEND_STATUS_LOCK_UFLOW = 0x85,
134         CQE_SEND_STATUS_DATA_FAULT = 0x86,
135         CQE_SEND_STATUS_TSTMP_CONFLICT = 0x87,
136         CQE_SEND_STATUS_TSTMP_TIMEOUT = 0x88,
137         CQE_SEND_STATUS_MEM_FAULT = 0x89,
138         CQE_SEND_STATUS_CSUM_OVERLAP = 0x8A,
139         CQE_SEND_STATUS_CSUM_OVERFLOW = 0x8B,
140 };
141
142 enum cqe_rx_tcp_end_reason {
143         CQE_RX_TCP_END_FIN_FLAG_DET = 0,
144         CQE_RX_TCP_END_INVALID_FLAG = 1,
145         CQE_RX_TCP_END_TIMEOUT = 2,
146         CQE_RX_TCP_END_OUT_OF_SEQ = 3,
147         CQE_RX_TCP_END_PKT_ERR = 4,
148         CQE_RX_TCP_END_QS_DISABLED = 0x0F,
149 };
150
151 /* Packet protocol level error enumeration */
152 enum cqe_rx_err_level {
153         CQE_RX_ERRLVL_RE = 0x0,
154         CQE_RX_ERRLVL_L2 = 0x1,
155         CQE_RX_ERRLVL_L3 = 0x2,
156         CQE_RX_ERRLVL_L4 = 0x3,
157 };
158
159 /* Packet protocol level error type enumeration */
160 enum cqe_rx_err_opcode {
161         CQE_RX_ERR_RE_NONE = 0x0,
162         CQE_RX_ERR_RE_PARTIAL = 0x1,
163         CQE_RX_ERR_RE_JABBER = 0x2,
164         CQE_RX_ERR_RE_FCS = 0x7,
165         CQE_RX_ERR_RE_TERMINATE = 0x9,
166         CQE_RX_ERR_RE_RX_CTL = 0xb,
167         CQE_RX_ERR_PREL2_ERR = 0x1f,
168         CQE_RX_ERR_L2_FRAGMENT = 0x20,
169         CQE_RX_ERR_L2_OVERRUN = 0x21,
170         CQE_RX_ERR_L2_PFCS = 0x22,
171         CQE_RX_ERR_L2_PUNY = 0x23,
172         CQE_RX_ERR_L2_MAL = 0x24,
173         CQE_RX_ERR_L2_OVERSIZE = 0x25,
174         CQE_RX_ERR_L2_UNDERSIZE = 0x26,
175         CQE_RX_ERR_L2_LENMISM = 0x27,
176         CQE_RX_ERR_L2_PCLP = 0x28,
177         CQE_RX_ERR_IP_NOT = 0x41,
178         CQE_RX_ERR_IP_CHK = 0x42,
179         CQE_RX_ERR_IP_MAL = 0x43,
180         CQE_RX_ERR_IP_MALD = 0x44,
181         CQE_RX_ERR_IP_HOP = 0x45,
182         CQE_RX_ERR_L3_ICRC = 0x46,
183         CQE_RX_ERR_L3_PCLP = 0x47,
184         CQE_RX_ERR_L4_MAL = 0x61,
185         CQE_RX_ERR_L4_CHK = 0x62,
186         CQE_RX_ERR_UDP_LEN = 0x63,
187         CQE_RX_ERR_L4_PORT = 0x64,
188         CQE_RX_ERR_TCP_FLAG = 0x65,
189         CQE_RX_ERR_TCP_OFFSET = 0x66,
190         CQE_RX_ERR_L4_PCLP = 0x67,
191         CQE_RX_ERR_RBDR_TRUNC = 0x70,
192 };
193
194 struct cqe_rx_t {
195 #if defined(__BIG_ENDIAN_BITFIELD)
196         uint64_t   cqe_type:4; /* W0 */
197         uint64_t   stdn_fault:1;
198         uint64_t   rsvd0:1;
199         uint64_t   rq_qs:7;
200         uint64_t   rq_idx:3;
201         uint64_t   rsvd1:12;
202         uint64_t   rss_alg:4;
203         uint64_t   rsvd2:4;
204         uint64_t   rb_cnt:4;
205         uint64_t   vlan_found:1;
206         uint64_t   vlan_stripped:1;
207         uint64_t   vlan2_found:1;
208         uint64_t   vlan2_stripped:1;
209         uint64_t   l4_type:4;
210         uint64_t   l3_type:4;
211         uint64_t   l2_present:1;
212         uint64_t   err_level:3;
213         uint64_t   err_opcode:8;
214
215         uint64_t   pkt_len:16; /* W1 */
216         uint64_t   l2_ptr:8;
217         uint64_t   l3_ptr:8;
218         uint64_t   l4_ptr:8;
219         uint64_t   cq_pkt_len:8;
220         uint64_t   align_pad:3;
221         uint64_t   rsvd3:1;
222         uint64_t   chan:12;
223
224         uint64_t   rss_tag:32; /* W2 */
225         uint64_t   vlan_tci:16;
226         uint64_t   vlan_ptr:8;
227         uint64_t   vlan2_ptr:8;
228
229         uint64_t   rb3_sz:16; /* W3 */
230         uint64_t   rb2_sz:16;
231         uint64_t   rb1_sz:16;
232         uint64_t   rb0_sz:16;
233
234         uint64_t   rb7_sz:16; /* W4 */
235         uint64_t   rb6_sz:16;
236         uint64_t   rb5_sz:16;
237         uint64_t   rb4_sz:16;
238
239         uint64_t   rb11_sz:16; /* W5 */
240         uint64_t   rb10_sz:16;
241         uint64_t   rb9_sz:16;
242         uint64_t   rb8_sz:16;
243 #elif defined(__LITTLE_ENDIAN_BITFIELD)
244         uint64_t   err_opcode:8;
245         uint64_t   err_level:3;
246         uint64_t   l2_present:1;
247         uint64_t   l3_type:4;
248         uint64_t   l4_type:4;
249         uint64_t   vlan2_stripped:1;
250         uint64_t   vlan2_found:1;
251         uint64_t   vlan_stripped:1;
252         uint64_t   vlan_found:1;
253         uint64_t   rb_cnt:4;
254         uint64_t   rsvd2:4;
255         uint64_t   rss_alg:4;
256         uint64_t   rsvd1:12;
257         uint64_t   rq_idx:3;
258         uint64_t   rq_qs:7;
259         uint64_t   rsvd0:1;
260         uint64_t   stdn_fault:1;
261         uint64_t   cqe_type:4; /* W0 */
262         uint64_t   chan:12;
263         uint64_t   rsvd3:1;
264         uint64_t   align_pad:3;
265         uint64_t   cq_pkt_len:8;
266         uint64_t   l4_ptr:8;
267         uint64_t   l3_ptr:8;
268         uint64_t   l2_ptr:8;
269         uint64_t   pkt_len:16; /* W1 */
270         uint64_t   vlan2_ptr:8;
271         uint64_t   vlan_ptr:8;
272         uint64_t   vlan_tci:16;
273         uint64_t   rss_tag:32; /* W2 */
274         uint64_t   rb0_sz:16;
275         uint64_t   rb1_sz:16;
276         uint64_t   rb2_sz:16;
277         uint64_t   rb3_sz:16; /* W3 */
278         uint64_t   rb4_sz:16;
279         uint64_t   rb5_sz:16;
280         uint64_t   rb6_sz:16;
281         uint64_t   rb7_sz:16; /* W4 */
282         uint64_t   rb8_sz:16;
283         uint64_t   rb9_sz:16;
284         uint64_t   rb10_sz:16;
285         uint64_t   rb11_sz:16; /* W5 */
286 #endif
287         uint64_t   rb0_ptr:64;
288         uint64_t   rb1_ptr:64;
289         uint64_t   rb2_ptr:64;
290         uint64_t   rb3_ptr:64;
291         uint64_t   rb4_ptr:64;
292         uint64_t   rb5_ptr:64;
293         uint64_t   rb6_ptr:64;
294         uint64_t   rb7_ptr:64;
295         uint64_t   rb8_ptr:64;
296         uint64_t   rb9_ptr:64;
297         uint64_t   rb10_ptr:64;
298         uint64_t   rb11_ptr:64;
299 };
300
301 struct cqe_rx_tcp_err_t {
302 #if defined(__BIG_ENDIAN_BITFIELD)
303         uint64_t   cqe_type:4; /* W0 */
304         uint64_t   rsvd0:60;
305
306         uint64_t   rsvd1:4; /* W1 */
307         uint64_t   partial_first:1;
308         uint64_t   rsvd2:27;
309         uint64_t   rbdr_bytes:8;
310         uint64_t   rsvd3:24;
311 #elif defined(__LITTLE_ENDIAN_BITFIELD)
312         uint64_t   rsvd0:60;
313         uint64_t   cqe_type:4;
314
315         uint64_t   rsvd3:24;
316         uint64_t   rbdr_bytes:8;
317         uint64_t   rsvd2:27;
318         uint64_t   partial_first:1;
319         uint64_t   rsvd1:4;
320 #endif
321 };
322
323 struct cqe_rx_tcp_t {
324 #if defined(__BIG_ENDIAN_BITFIELD)
325         uint64_t   cqe_type:4; /* W0 */
326         uint64_t   rsvd0:52;
327         uint64_t   cq_tcp_status:8;
328
329         uint64_t   rsvd1:32; /* W1 */
330         uint64_t   tcp_cntx_bytes:8;
331         uint64_t   rsvd2:8;
332         uint64_t   tcp_err_bytes:16;
333 #elif defined(__LITTLE_ENDIAN_BITFIELD)
334         uint64_t   cq_tcp_status:8;
335         uint64_t   rsvd0:52;
336         uint64_t   cqe_type:4; /* W0 */
337
338         uint64_t   tcp_err_bytes:16;
339         uint64_t   rsvd2:8;
340         uint64_t   tcp_cntx_bytes:8;
341         uint64_t   rsvd1:32; /* W1 */
342 #endif
343 };
344
345 struct cqe_send_t {
346 #if defined(__BIG_ENDIAN_BITFIELD)
347         uint64_t   cqe_type:4; /* W0 */
348         uint64_t   rsvd0:4;
349         uint64_t   sqe_ptr:16;
350         uint64_t   rsvd1:4;
351         uint64_t   rsvd2:10;
352         uint64_t   sq_qs:7;
353         uint64_t   sq_idx:3;
354         uint64_t   rsvd3:8;
355         uint64_t   send_status:8;
356
357         uint64_t   ptp_timestamp:64; /* W1 */
358 #elif defined(__LITTLE_ENDIAN_BITFIELD)
359         uint64_t   send_status:8;
360         uint64_t   rsvd3:8;
361         uint64_t   sq_idx:3;
362         uint64_t   sq_qs:7;
363         uint64_t   rsvd2:10;
364         uint64_t   rsvd1:4;
365         uint64_t   sqe_ptr:16;
366         uint64_t   rsvd0:4;
367         uint64_t   cqe_type:4; /* W0 */
368
369         uint64_t   ptp_timestamp:64; /* W1 */
370 #endif
371 };
372
373 union cq_desc_t {
374         uint64_t    u[64];
375         struct cqe_send_t snd_hdr;
376         struct cqe_rx_t rx_hdr;
377         struct cqe_rx_tcp_t rx_tcp_hdr;
378         struct cqe_rx_tcp_err_t rx_tcp_err_hdr;
379 };
380
381 struct rbdr_entry_t {
382 #if defined(__BIG_ENDIAN_BITFIELD)
383         uint64_t   rsvd0:15;
384         uint64_t   buf_addr:42;
385         uint64_t   cache_align:7;
386 #elif defined(__LITTLE_ENDIAN_BITFIELD)
387         uint64_t   cache_align:7;
388         uint64_t   buf_addr:42;
389         uint64_t   rsvd0:15;
390 #endif
391 };
392
393 /* TCP reassembly context */
394 struct rbe_tcp_cnxt_t {
395 #if defined(__BIG_ENDIAN_BITFIELD)
396         uint64_t   tcp_pkt_cnt:12;
397         uint64_t   rsvd1:4;
398         uint64_t   align_hdr_bytes:4;
399         uint64_t   align_ptr_bytes:4;
400         uint64_t   ptr_bytes:16;
401         uint64_t   rsvd2:24;
402         uint64_t   cqe_type:4;
403         uint64_t   rsvd0:54;
404         uint64_t   tcp_end_reason:2;
405         uint64_t   tcp_status:4;
406 #elif defined(__LITTLE_ENDIAN_BITFIELD)
407         uint64_t   tcp_status:4;
408         uint64_t   tcp_end_reason:2;
409         uint64_t   rsvd0:54;
410         uint64_t   cqe_type:4;
411         uint64_t   rsvd2:24;
412         uint64_t   ptr_bytes:16;
413         uint64_t   align_ptr_bytes:4;
414         uint64_t   align_hdr_bytes:4;
415         uint64_t   rsvd1:4;
416         uint64_t   tcp_pkt_cnt:12;
417 #endif
418 };
419
420 /* Always Big endian */
421 struct rx_hdr_t {
422         uint64_t   opaque:32;
423         uint64_t   rss_flow:8;
424         uint64_t   skip_length:6;
425         uint64_t   disable_rss:1;
426         uint64_t   disable_tcp_reassembly:1;
427         uint64_t   nodrop:1;
428         uint64_t   dest_alg:2;
429         uint64_t   rsvd0:2;
430         uint64_t   dest_rq:11;
431 };
432
433 enum send_l4_csum_type {
434         SEND_L4_CSUM_DISABLE = 0x00,
435         SEND_L4_CSUM_UDP = 0x01,
436         SEND_L4_CSUM_TCP = 0x02,
437         SEND_L4_CSUM_SCTP = 0x03,
438 };
439
440 enum send_crc_alg {
441         SEND_CRCALG_CRC32 = 0x00,
442         SEND_CRCALG_CRC32C = 0x01,
443         SEND_CRCALG_ICRC = 0x02,
444 };
445
446 enum send_load_type {
447         SEND_LD_TYPE_LDD = 0x00,
448         SEND_LD_TYPE_LDT = 0x01,
449         SEND_LD_TYPE_LDWB = 0x02,
450 };
451
452 enum send_mem_alg_type {
453         SEND_MEMALG_SET = 0x00,
454         SEND_MEMALG_ADD = 0x08,
455         SEND_MEMALG_SUB = 0x09,
456         SEND_MEMALG_ADDLEN = 0x0A,
457         SEND_MEMALG_SUBLEN = 0x0B,
458 };
459
460 enum send_mem_dsz_type {
461         SEND_MEMDSZ_B64 = 0x00,
462         SEND_MEMDSZ_B32 = 0x01,
463         SEND_MEMDSZ_B8 = 0x03,
464 };
465
466 enum sq_subdesc_type {
467         SQ_DESC_TYPE_INVALID = 0x00,
468         SQ_DESC_TYPE_HEADER = 0x01,
469         SQ_DESC_TYPE_CRC = 0x02,
470         SQ_DESC_TYPE_IMMEDIATE = 0x03,
471         SQ_DESC_TYPE_GATHER = 0x04,
472         SQ_DESC_TYPE_MEMORY = 0x05,
473 };
474
475 struct sq_crc_subdesc {
476 #if defined(__BIG_ENDIAN_BITFIELD)
477         uint64_t    rsvd1:32;
478         uint64_t    crc_ival:32;
479         uint64_t    subdesc_type:4;
480         uint64_t    crc_alg:2;
481         uint64_t    rsvd0:10;
482         uint64_t    crc_insert_pos:16;
483         uint64_t    hdr_start:16;
484         uint64_t    crc_len:16;
485 #elif defined(__LITTLE_ENDIAN_BITFIELD)
486         uint64_t    crc_len:16;
487         uint64_t    hdr_start:16;
488         uint64_t    crc_insert_pos:16;
489         uint64_t    rsvd0:10;
490         uint64_t    crc_alg:2;
491         uint64_t    subdesc_type:4;
492         uint64_t    crc_ival:32;
493         uint64_t    rsvd1:32;
494 #endif
495 };
496
497 struct sq_gather_subdesc {
498 #if defined(__BIG_ENDIAN_BITFIELD)
499         uint64_t    subdesc_type:4; /* W0 */
500         uint64_t    ld_type:2;
501         uint64_t    rsvd0:42;
502         uint64_t    size:16;
503
504         uint64_t    rsvd1:15; /* W1 */
505         uint64_t    addr:49;
506 #elif defined(__LITTLE_ENDIAN_BITFIELD)
507         uint64_t    size:16;
508         uint64_t    rsvd0:42;
509         uint64_t    ld_type:2;
510         uint64_t    subdesc_type:4; /* W0 */
511
512         uint64_t    addr:49;
513         uint64_t    rsvd1:15; /* W1 */
514 #endif
515 };
516
517 /* SQ immediate subdescriptor */
518 struct sq_imm_subdesc {
519 #if defined(__BIG_ENDIAN_BITFIELD)
520         uint64_t    subdesc_type:4; /* W0 */
521         uint64_t    rsvd0:46;
522         uint64_t    len:14;
523
524         uint64_t    data:64; /* W1 */
525 #elif defined(__LITTLE_ENDIAN_BITFIELD)
526         uint64_t    len:14;
527         uint64_t    rsvd0:46;
528         uint64_t    subdesc_type:4; /* W0 */
529
530         uint64_t    data:64; /* W1 */
531 #endif
532 };
533
534 struct sq_mem_subdesc {
535 #if defined(__BIG_ENDIAN_BITFIELD)
536         uint64_t    subdesc_type:4; /* W0 */
537         uint64_t    mem_alg:4;
538         uint64_t    mem_dsz:2;
539         uint64_t    wmem:1;
540         uint64_t    rsvd0:21;
541         uint64_t    offset:32;
542
543         uint64_t    rsvd1:15; /* W1 */
544         uint64_t    addr:49;
545 #elif defined(__LITTLE_ENDIAN_BITFIELD)
546         uint64_t    offset:32;
547         uint64_t    rsvd0:21;
548         uint64_t    wmem:1;
549         uint64_t    mem_dsz:2;
550         uint64_t    mem_alg:4;
551         uint64_t    subdesc_type:4; /* W0 */
552
553         uint64_t    addr:49;
554         uint64_t    rsvd1:15; /* W1 */
555 #endif
556 };
557
558 struct sq_hdr_subdesc {
559 #if defined(__BIG_ENDIAN_BITFIELD)
560         uint64_t    subdesc_type:4;
561         uint64_t    tso:1;
562         uint64_t    post_cqe:1; /* Post CQE on no error also */
563         uint64_t    dont_send:1;
564         uint64_t    tstmp:1;
565         uint64_t    subdesc_cnt:8;
566         uint64_t    csum_l4:2;
567         uint64_t    csum_l3:1;
568         uint64_t    csum_inner_l4:2;
569         uint64_t    csum_inner_l3:1;
570         uint64_t    rsvd0:2;
571         uint64_t    l4_offset:8;
572         uint64_t    l3_offset:8;
573         uint64_t    rsvd1:4;
574         uint64_t    tot_len:20; /* W0 */
575
576         uint64_t    rsvd2:24;
577         uint64_t    inner_l4_offset:8;
578         uint64_t    inner_l3_offset:8;
579         uint64_t    tso_start:8;
580         uint64_t    rsvd3:2;
581         uint64_t    tso_max_paysize:14; /* W1 */
582 #elif defined(__LITTLE_ENDIAN_BITFIELD)
583         uint64_t    tot_len:20;
584         uint64_t    rsvd1:4;
585         uint64_t    l3_offset:8;
586         uint64_t    l4_offset:8;
587         uint64_t    rsvd0:2;
588         uint64_t    csum_inner_l3:1;
589         uint64_t    csum_inner_l4:2;
590         uint64_t    csum_l3:1;
591         uint64_t    csum_l4:2;
592         uint64_t    subdesc_cnt:8;
593         uint64_t    tstmp:1;
594         uint64_t    dont_send:1;
595         uint64_t    post_cqe:1; /* Post CQE on no error also */
596         uint64_t    tso:1;
597         uint64_t    subdesc_type:4; /* W0 */
598
599         uint64_t    tso_max_paysize:14;
600         uint64_t    rsvd3:2;
601         uint64_t    tso_start:8;
602         uint64_t    inner_l3_offset:8;
603         uint64_t    inner_l4_offset:8;
604         uint64_t    rsvd2:24;
605 #endif
606 };
607
608 /* Queue config register formats */
609 struct rq_cfg {
610 #if defined(__BIG_ENDIAN_BITFIELD)
611         uint64_t reserved_2_63:62;
612         uint64_t ena:1;
613         uint64_t tcp_ena:1;
614 #elif defined(__LITTLE_ENDIAN_BITFIELD)
615         uint64_t tcp_ena:1;
616         uint64_t ena:1;
617         uint64_t reserved_2_63:62;
618 #endif
619 };
620
621 struct cq_cfg {
622 #if defined(__BIG_ENDIAN_BITFIELD)
623         uint64_t reserved_43_63:21;
624         uint64_t ena:1;
625         uint64_t reset:1;
626         uint64_t caching:1;
627         uint64_t reserved_35_39:5;
628         uint64_t qsize:3;
629         uint64_t reserved_25_31:7;
630         uint64_t avg_con:9;
631         uint64_t reserved_0_15:16;
632 #elif defined(__LITTLE_ENDIAN_BITFIELD)
633         uint64_t reserved_0_15:16;
634         uint64_t avg_con:9;
635         uint64_t reserved_25_31:7;
636         uint64_t qsize:3;
637         uint64_t reserved_35_39:5;
638         uint64_t caching:1;
639         uint64_t reset:1;
640         uint64_t ena:1;
641         uint64_t reserved_43_63:21;
642 #endif
643 };
644
645 struct sq_cfg {
646 #if defined(__BIG_ENDIAN_BITFIELD)
647         uint64_t reserved_20_63:44;
648         uint64_t ena:1;
649         uint64_t reserved_18_18:1;
650         uint64_t reset:1;
651         uint64_t ldwb:1;
652         uint64_t reserved_11_15:5;
653         uint64_t qsize:3;
654         uint64_t reserved_3_7:5;
655         uint64_t tstmp_bgx_intf:3;
656 #elif defined(__LITTLE_ENDIAN_BITFIELD)
657         uint64_t tstmp_bgx_intf:3;
658         uint64_t reserved_3_7:5;
659         uint64_t qsize:3;
660         uint64_t reserved_11_15:5;
661         uint64_t ldwb:1;
662         uint64_t reset:1;
663         uint64_t reserved_18_18:1;
664         uint64_t ena:1;
665         uint64_t reserved_20_63:44;
666 #endif
667 };
668
669 struct rbdr_cfg {
670 #if defined(__BIG_ENDIAN_BITFIELD)
671         uint64_t reserved_45_63:19;
672         uint64_t ena:1;
673         uint64_t reset:1;
674         uint64_t ldwb:1;
675         uint64_t reserved_36_41:6;
676         uint64_t qsize:4;
677         uint64_t reserved_25_31:7;
678         uint64_t avg_con:9;
679         uint64_t reserved_12_15:4;
680         uint64_t lines:12;
681 #elif defined(__LITTLE_ENDIAN_BITFIELD)
682         uint64_t lines:12;
683         uint64_t reserved_12_15:4;
684         uint64_t avg_con:9;
685         uint64_t reserved_25_31:7;
686         uint64_t qsize:4;
687         uint64_t reserved_36_41:6;
688         uint64_t ldwb:1;
689         uint64_t reset:1;
690         uint64_t ena: 1;
691         uint64_t reserved_45_63:19;
692 #endif
693 };
694
695 struct qs_cfg {
696 #if defined(__BIG_ENDIAN_BITFIELD)
697         uint64_t reserved_32_63:32;
698         uint64_t ena:1;
699         uint64_t reserved_27_30:4;
700         uint64_t sq_ins_ena:1;
701         uint64_t sq_ins_pos:6;
702         uint64_t lock_ena:1;
703         uint64_t lock_viol_cqe_ena:1;
704         uint64_t send_tstmp_ena:1;
705         uint64_t be:1;
706         uint64_t reserved_7_15:9;
707         uint64_t vnic:7;
708 #elif defined(__LITTLE_ENDIAN_BITFIELD)
709         uint64_t vnic:7;
710         uint64_t reserved_7_15:9;
711         uint64_t be:1;
712         uint64_t send_tstmp_ena:1;
713         uint64_t lock_viol_cqe_ena:1;
714         uint64_t lock_ena:1;
715         uint64_t sq_ins_pos:6;
716         uint64_t sq_ins_ena:1;
717         uint64_t reserved_27_30:4;
718         uint64_t ena:1;
719         uint64_t reserved_32_63:32;
720 #endif
721 };
722
723 #endif /* Q_STRUCT_H */