xref: /dpdk/drivers/compress/octeontx/include/zip_regs.h (revision 25d11a86c56d50947af33d0b79ede622809bd8b9)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018 Cavium, Inc
3  */
4 
5 #ifndef _RTE_OCTEONTX_ZIP_REGS_H_
6 #define _RTE_OCTEONTX_ZIP_REGS_H_
7 
8 
9 /**
10  * Enumeration zip_cc
11  *
12  * ZIP compression coding Enumeration
13  * Enumerates ZIP_INST_S[CC].
14  */
15 enum zip_cc {
16 	ZIP_CC_DEFAULT = 0,
17 	ZIP_CC_DYN_HUFF,
18 	ZIP_CC_FIXED_HUFF,
19 	ZIP_CC_LZS
20 };
21 
22 /**
23  * Register (NCB) zip_vq#_ena
24  *
25  * ZIP VF Queue Enable Register
26  * If a queue is disabled, ZIP CTL stops fetching instructions from the queue.
27  */
28 typedef union {
29 	uint64_t u;
30 	struct zip_vqx_ena_s {
31 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 0 - Big Endian */
32 		uint64_t reserved_1_63         : 63;
33 		uint64_t ena                   : 1;
34 #else /* Word 0 - Little Endian */
35 		uint64_t ena                   : 1;
36 		uint64_t reserved_1_63         : 63;
37 #endif /* Word 0 - End */
38 	} s;
39 	/* struct zip_vqx_ena_s cn; */
40 } zip_vqx_ena_t;
41 
42 /**
43  * Register (NCB) zip_vq#_sbuf_addr
44  *
45  * ZIP VF Queue Starting Buffer Address Registers
46  * These registers set the buffer parameters for the instruction queues.
47  * When quiescent (i.e.
48  * outstanding doorbell count is 0), it is safe to rewrite this register
49  * to effectively reset the
50  * command buffer state machine.
51  * These registers must be programmed after software programs the
52  * corresponding ZIP_QUE()_SBUF_CTL.
53  */
54 typedef union {
55 	uint64_t u;
56 	struct zip_vqx_sbuf_addr_s {
57 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 0 - Big Endian */
58 		uint64_t reserved_49_63        : 15;
59 		uint64_t ptr                   : 42;
60 		uint64_t off                   : 7;
61 #else /* Word 0 - Little Endian */
62 		uint64_t off                   : 7;
63 		uint64_t ptr                   : 42;
64 		uint64_t reserved_49_63        : 15;
65 #endif /* Word 0 - End */
66 	} s;
67 	/* struct zip_vqx_sbuf_addr_s cn; */
68 } zip_vqx_sbuf_addr_t;
69 
70 /**
71  * Register (NCB) zip_que#_doorbell
72  *
73  * ZIP Queue Doorbell Registers
74  * Doorbells for the ZIP instruction queues.
75  */
76 typedef union {
77 	uint64_t u;
78 	struct zip_quex_doorbell_s {
79 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 0 - Big Endian */
80 		uint64_t reserved_20_63        : 44;
81 		uint64_t dbell_cnt             : 20;
82 #else /* Word 0 - Little Endian */
83 		uint64_t dbell_cnt             : 20;
84 		uint64_t reserved_20_63        : 44;
85 #endif /* Word 0 - End */
86 	} s;
87 	/* struct zip_quex_doorbell_s cn; */
88 } zip_quex_doorbell_t;
89 
90 /**
91  * Structure zip_nptr_s
92  *
93  * ZIP Instruction Next-Chunk-Buffer Pointer (NPTR) Structure
94  * This structure is used to chain all the ZIP instruction buffers
95  * together. ZIP instruction buffers are managed
96  * (allocated and released) by software.
97  */
98 union zip_nptr_s {
99 	uint64_t u;
100 	struct zip_nptr_s_s {
101 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 0 - Big Endian */
102 		uint64_t addr                  : 64;
103 #else /* Word 0 - Little Endian */
104 		uint64_t addr                  : 64;
105 #endif /* Word 0 - End */
106 	} s;
107 	/* struct zip_nptr_s_s cn83xx; */
108 };
109 
110 /**
111  * generic ptr address
112  */
113 union zip_zptr_addr_s {
114 	/** This field can be used to set/clear all bits, or do bitwise
115 	 * operations over the entire structure.
116 	 */
117 	uint64_t u;
118 	/** generic ptr address */
119 	struct {
120 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 0 - Big Endian */
121 		uint64_t addr : 64;
122 #else /* Word 0 - Little Endian */
123 		uint64_t addr : 64;
124 #endif /* Word 0 - End */
125 	} s;
126 };
127 
128 /**
129  * generic ptr ctl
130  */
131 union zip_zptr_ctl_s {
132 	/** This field can be used to set/clear all bits, or do bitwise
133 	 * operations over the entire structure.
134 	 */
135 	uint64_t u;
136 	/** generic ptr ctl */
137 	struct {
138 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 1 - Big Endian */
139 		uint64_t reserved_112_127      : 16;
140 		uint64_t length                : 16;
141 		uint64_t reserved_67_95        : 29;
142 		uint64_t fw                    : 1;
143 		uint64_t nc                    : 1;
144 		uint64_t data_be               : 1;
145 #else /* Word 1 - Little Endian */
146 		uint64_t data_be               : 1;
147 		uint64_t nc                    : 1;
148 		uint64_t fw                    : 1;
149 		uint64_t reserved_67_95        : 29;
150 		uint64_t length                : 16;
151 		uint64_t reserved_112_127      : 16;
152 #endif /* Word 1 - End */
153 	} s;
154 
155 };
156 
157 /**
158  * Structure zip_inst_s
159  *
160  * ZIP Instruction Structure
161  * Each ZIP instruction has 16 words (they are called IWORD0 to IWORD15
162  * within the structure).
163  */
164 union zip_inst_s {
165 	/** This field can be used to set/clear all bits, or do bitwise
166 	 * operations over the entire structure.
167 	 */
168 	uint64_t u[16];
169 	/** ZIP Instruction Structure */
170 	struct zip_inst_s_s {
171 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 0 - Big Endian */
172 		/** Done interrupt */
173 		uint64_t doneint               : 1;
174 		/** reserved */
175 		uint64_t reserved_56_62        : 7;
176 		/**  Total output length */
177 		uint64_t totaloutputlength     : 24;
178 		/** reserved */
179 		uint64_t reserved_27_31        : 5;
180 		/** EXNUM */
181 		uint64_t exn                   : 3;
182 		/**  HASH IV */
183 		uint64_t iv                    : 1;
184 		/** EXBITS */
185 		uint64_t exbits                : 7;
186 		/** Hash more-in-file */
187 		uint64_t hmif                  : 1;
188 		/** Hash Algorithm and enable */
189 		uint64_t halg                  : 3;
190 		/** Sync flush*/
191 		uint64_t sf                    : 1;
192 		/** Compression speed/storage */
193 		uint64_t ss                    : 2;
194 		/** Compression coding */
195 		uint64_t cc                    : 2;
196 		/** End of input data */
197 		uint64_t ef                    : 1;
198 		/** Beginning of file */
199 		uint64_t bf                    : 1;
200 		// uint64_t reserved_3_4          : 2;
201 		/** Comp/decomp operation */
202 		uint64_t op                    : 2;
203 		/** Data sactter */
204 		uint64_t ds                    : 1;
205 		/** Data gather */
206 		uint64_t dg                    : 1;
207 		/** History gather */
208 		uint64_t hg                    : 1;
209 #else /* Word 0 - Little Endian */
210 		uint64_t hg                    : 1;
211 		uint64_t dg                    : 1;
212 		uint64_t ds                    : 1;
213 		//uint64_t reserved_3_4          : 2;
214 		uint64_t op                    : 2;
215 		uint64_t bf                    : 1;
216 		uint64_t ef                    : 1;
217 		uint64_t cc                    : 2;
218 		uint64_t ss                    : 2;
219 		uint64_t sf                    : 1;
220 		uint64_t halg                  : 3;
221 		uint64_t hmif                  : 1;
222 		uint64_t exbits                : 7;
223 		uint64_t iv                    : 1;
224 		uint64_t exn                   : 3;
225 		uint64_t reserved_27_31        : 5;
226 		uint64_t totaloutputlength     : 24;
227 		uint64_t reserved_56_62        : 7;
228 		uint64_t doneint               : 1;
229 
230 #endif /* Word 0 - End */
231 
232 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 1 - Big Endian */
233 		/** History length */
234 		uint64_t historylength         : 16;
235 		/** reserved */
236 		uint64_t reserved_96_111       : 16;
237 		/** adler/crc32 checksum*/
238 		uint64_t adlercrc32            : 32;
239 #else /* Word 1 - Little Endian */
240 		uint64_t adlercrc32            : 32;
241 		uint64_t reserved_96_111       : 16;
242 		uint64_t historylength         : 16;
243 #endif /* Word 1 - End */
244 
245 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 2 - Big Endian */
246 		/** Decompression Context Pointer Address */
247 		union zip_zptr_addr_s  ctx_ptr_addr;
248 #else /* Word 2 - Little Endian */
249 		union zip_zptr_addr_s  ctx_ptr_addr;
250 #endif /* Word 2 - End */
251 
252 #if defined(__BIG_ENDIAN_BITFIELD)
253 		/** Decompression Context Pointer Control */
254 		union zip_zptr_ctl_s   ctx_ptr_ctl;
255 #else /* Word 3 - Little Endian */
256 		union zip_zptr_ctl_s   ctx_ptr_ctl;
257 #endif /* Word 3 - End */
258 
259 #if defined(__BIG_ENDIAN_BITFIELD)
260 		/** Decompression history pointer address */
261 		union zip_zptr_addr_s  his_ptr_addr;
262 #else /* Word 4 - Little Endian */
263 		union zip_zptr_addr_s  his_ptr_addr;
264 #endif /* Word 4 - End */
265 
266 #if defined(__BIG_ENDIAN_BITFIELD)
267 		/** Decompression history pointer control */
268 		union zip_zptr_ctl_s   his_ptr_ctl;
269 #else /* Word 5 - Little Endian */
270 		union zip_zptr_ctl_s   his_ptr_ctl;
271 #endif /* Word 5 - End */
272 
273 #if defined(__BIG_ENDIAN_BITFIELD)
274 		/** Input and compression history pointer address */
275 		union zip_zptr_addr_s  inp_ptr_addr;
276 #else /* Word 6 - Little Endian */
277 		union zip_zptr_addr_s  inp_ptr_addr;
278 #endif /* Word 6 - End */
279 
280 #if defined(__BIG_ENDIAN_BITFIELD)
281 		/** Input and compression history pointer control */
282 		union zip_zptr_ctl_s   inp_ptr_ctl;
283 #else /* Word 7 - Little Endian */
284 		union zip_zptr_ctl_s   inp_ptr_ctl;
285 #endif /* Word 7 - End */
286 
287 #if defined(__BIG_ENDIAN_BITFIELD)
288 		/** Output pointer address */
289 		union zip_zptr_addr_s  out_ptr_addr;
290 #else /* Word 8 - Little Endian */
291 		union zip_zptr_addr_s  out_ptr_addr;
292 #endif /* Word 8 - End */
293 
294 #if defined(__BIG_ENDIAN_BITFIELD)
295 		/** Output pointer control */
296 		union zip_zptr_ctl_s   out_ptr_ctl;
297 #else /* Word 9 - Little Endian */
298 		union zip_zptr_ctl_s   out_ptr_ctl;
299 #endif /* Word 9 - End */
300 
301 #if defined(__BIG_ENDIAN_BITFIELD)
302 		/** Result pointer address */
303 		union zip_zptr_addr_s  res_ptr_addr;
304 #else /* Word 10 - Little Endian */
305 		union zip_zptr_addr_s  res_ptr_addr;
306 #endif /* Word 10 - End */
307 
308 #if defined(__BIG_ENDIAN_BITFIELD)
309 		/** Result pointer control */
310 		union zip_zptr_ctl_s   res_ptr_ctl;
311 #else /* Word 11 - Little Endian */
312 		union zip_zptr_ctl_s   res_ptr_ctl;
313 #endif /* Word 11 - End */
314 
315 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 12 - Big Endian */
316 		/** reserved */
317 		uint64_t reserved_812_831      : 20;
318 		/** SSO guest group */
319 		uint64_t ggrp                  : 10;
320 		/** SSO tag type */
321 		uint64_t tt                    : 2;
322 		/** SSO tag */
323 		uint64_t tag                   : 32;
324 #else /* Word 12 - Little Endian */
325 		uint64_t tag                   : 32;
326 		uint64_t tt                    : 2;
327 		uint64_t ggrp                  : 10;
328 		uint64_t reserved_812_831      : 20;
329 #endif /* Word 12 - End */
330 
331 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 13 - Big Endian */
332 		/** Work queue entry pointer */
333 		uint64_t wq_ptr                : 64;
334 #else /* Word 13 - Little Endian */
335 		uint64_t wq_ptr                : 64;
336 #endif /* Word 13 - End */
337 
338 #if defined(__BIG_ENDIAN_BITFIELD)
339 		/** reserved */
340 		uint64_t reserved_896_959      : 64;
341 #else /* Word 14 - Little Endian */
342 		uint64_t reserved_896_959      : 64;
343 #endif /* Word 14 - End */
344 #if defined(__BIG_ENDIAN_BITFIELD)
345 		/** Hash structure pointer */
346 		uint64_t hash_ptr              : 64;
347 #else /* Word 15 - Little Endian */
348 		uint64_t hash_ptr              : 64;
349 #endif /* Word 15 - End */
350 	} /** ZIP 88xx Instruction Structure */zip88xx;
351 
352 	/** ZIP Instruction Structure */
353 	struct zip_inst_s_cn83xx {
354 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 0 - Big Endian */
355 		/** Done interrupt */
356 		uint64_t doneint               : 1;
357 		/** reserved */
358 		uint64_t reserved_56_62        : 7;
359 		/**  Total output length */
360 		uint64_t totaloutputlength     : 24;
361 		/** reserved */
362 		uint64_t reserved_27_31        : 5;
363 		/** EXNUM */
364 		uint64_t exn                   : 3;
365 		/**  HASH IV */
366 		uint64_t iv                    : 1;
367 		/** EXBITS */
368 		uint64_t exbits                : 7;
369 		/** Hash more-in-file */
370 		uint64_t hmif                  : 1;
371 		/** Hash Algorithm and enable */
372 		uint64_t halg                  : 3;
373 		/** Sync flush*/
374 		uint64_t sf                    : 1;
375 		/** Compression speed/storage */
376 		uint64_t ss                    : 2;
377 		/** Compression coding */
378 		uint64_t cc                    : 2;
379 		/** End of input data */
380 		uint64_t ef                    : 1;
381 		/** Beginning of file */
382 		uint64_t bf                    : 1;
383 		/** Comp/decomp operation */
384 		uint64_t op                    : 2;
385 		/** Data sactter */
386 		uint64_t ds                    : 1;
387 		/** Data gather */
388 		uint64_t dg                    : 1;
389 		/** History gather */
390 		uint64_t hg                    : 1;
391 #else /* Word 0 - Little Endian */
392 		uint64_t hg                    : 1;
393 		uint64_t dg                    : 1;
394 		uint64_t ds                    : 1;
395 		uint64_t op                    : 2;
396 		uint64_t bf                    : 1;
397 		uint64_t ef                    : 1;
398 		uint64_t cc                    : 2;
399 		uint64_t ss                    : 2;
400 		uint64_t sf                    : 1;
401 		uint64_t halg                  : 3;
402 		uint64_t hmif                  : 1;
403 		uint64_t exbits                : 7;
404 		uint64_t iv                    : 1;
405 		uint64_t exn                   : 3;
406 		uint64_t reserved_27_31        : 5;
407 		uint64_t totaloutputlength     : 24;
408 		uint64_t reserved_56_62        : 7;
409 		uint64_t doneint               : 1;
410 #endif /* Word 0 - End */
411 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 1 - Big Endian */
412 		/** History length */
413 		uint64_t historylength         : 16;
414 		/** reserved */
415 		uint64_t reserved_96_111       : 16;
416 		/** adler/crc32 checksum*/
417 		uint64_t adlercrc32            : 32;
418 #else /* Word 1 - Little Endian */
419 		uint64_t adlercrc32            : 32;
420 		uint64_t reserved_96_111       : 16;
421 		uint64_t historylength         : 16;
422 #endif /* Word 1 - End */
423 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 2 - Big Endian */
424 		/** Decompression Context Pointer Address */
425 		union zip_zptr_addr_s  ctx_ptr_addr;
426 #else /* Word 2 - Little Endian */
427 		union zip_zptr_addr_s  ctx_ptr_addr;
428 #endif /* Word 2 - End */
429 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 3 - Big Endian */
430 		/** Decompression Context Pointer Control */
431 		union zip_zptr_ctl_s   ctx_ptr_ctl;
432 #else /* Word 3 - Little Endian */
433 		union zip_zptr_ctl_s   ctx_ptr_ctl;
434 #endif /* Word 3 - End */
435 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 4 - Big Endian */
436 		/** Decompression history pointer address */
437 		union zip_zptr_addr_s  his_ptr_addr;
438 #else /* Word 4 - Little Endian */
439 		union zip_zptr_addr_s  his_ptr_addr;
440 #endif /* Word 4 - End */
441 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 5 - Big Endian */
442 		/** Decompression history pointer control */
443 		union zip_zptr_ctl_s   his_ptr_ctl;
444 #else /* Word 5 - Little Endian */
445 		union zip_zptr_ctl_s   his_ptr_ctl;
446 #endif /* Word 5 - End */
447 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 6 - Big Endian */
448 		/** Input and compression history pointer address */
449 		union zip_zptr_addr_s  inp_ptr_addr;
450 #else /* Word 6 - Little Endian */
451 		union zip_zptr_addr_s  inp_ptr_addr;
452 #endif /* Word 6 - End */
453 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 7 - Big Endian */
454 		/** Input and compression history pointer control */
455 		union zip_zptr_ctl_s   inp_ptr_ctl;
456 #else /* Word 7 - Little Endian */
457 		union zip_zptr_ctl_s   inp_ptr_ctl;
458 #endif /* Word 7 - End */
459 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 8 - Big Endian */
460 		/** Output pointer address */
461 		union zip_zptr_addr_s  out_ptr_addr;
462 #else /* Word 8 - Little Endian */
463 		union zip_zptr_addr_s  out_ptr_addr;
464 #endif /* Word 8 - End */
465 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 9 - Big Endian */
466 		/** Output pointer control */
467 		union zip_zptr_ctl_s   out_ptr_ctl;
468 #else /* Word 9 - Little Endian */
469 		union zip_zptr_ctl_s   out_ptr_ctl;
470 #endif /* Word 9 - End */
471 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 10 - Big Endian */
472 		/** Result pointer address */
473 		union zip_zptr_addr_s  res_ptr_addr;
474 #else /* Word 10 - Little Endian */
475 		union zip_zptr_addr_s  res_ptr_addr;
476 #endif /* Word 10 - End */
477 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 11 - Big Endian */
478 		/** Result pointer control */
479 		union zip_zptr_ctl_s   res_ptr_ctl;
480 #else /* Word 11 - Little Endian */
481 		union zip_zptr_ctl_s   res_ptr_ctl;
482 #endif /* Word 11 - End */
483 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 12 - Big Endian */
484 		/** reserved */
485 		uint64_t reserved_812_831      : 20;
486 		/** SSO guest group */
487 		uint64_t ggrp                  : 10;
488 		/** SSO tag type */
489 		uint64_t tt                    : 2;
490 		/** SSO tag */
491 		uint64_t tag                   : 32;
492 #else /* Word 12 - Little Endian */
493 		uint64_t tag                   : 32;
494 		uint64_t tt                    : 2;
495 		uint64_t ggrp                  : 10;
496 		uint64_t reserved_812_831      : 20;
497 #endif /* Word 12 - End */
498 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 13 - Big Endian */
499 		/** Work queue entry pointer */
500 		uint64_t wq_ptr                : 64;
501 #else /* Word 13 - Little Endian */
502 		uint64_t wq_ptr                : 64;
503 #endif /* Word 13 - End */
504 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 14 - Big Endian */
505 		/** reserved */
506 		uint64_t reserved_896_959      : 64;
507 #else /* Word 14 - Little Endian */
508 		uint64_t reserved_896_959      : 64;
509 #endif /* Word 14 - End */
510 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 15 - Big Endian */
511 		/** Hash structure pointer */
512 		uint64_t hash_ptr              : 64;
513 #else /* Word 15 - Little Endian */
514 		uint64_t hash_ptr              : 64;
515 #endif /* Word 15 - End */
516 	} /** ZIP 83xx Instruction Structure */s;
517 };
518 
519 /**
520  * Structure zip_zres_s
521  *
522  * ZIP Result Structure
523  * The ZIP coprocessor writes the result structure after it completes the
524  * invocation. The result structure is exactly 24 bytes, and each invocation
525  * of the ZIP coprocessor produces exactly one result structure.
526  */
527 union zip_zres_s {
528 	/** This field can be used to set/clear all bits, or do bitwise
529 	 * operations over the entire structure.
530 	 */
531 	uint64_t u[8];
532 	/** ZIP Result Structure */
533 	struct zip_zres_s_s {
534 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 0 - Big Endian */
535 		/** crc32 checksum of uncompressed stream */
536 		uint64_t crc32                 : 32;
537 		/** adler32 checksum of uncompressed stream*/
538 		uint64_t adler32               : 32;
539 #else /* Word 0 - Little Endian */
540 		uint64_t adler32               : 32;
541 		uint64_t crc32                 : 32;
542 #endif /* Word 0 - End */
543 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 1 - Big Endian */
544 		/** Total numer of Bytes produced in output stream */
545 		uint64_t totalbyteswritten     : 32;
546 		/** Total number of bytes processed from the input stream */
547 		uint64_t totalbytesread        : 32;
548 #else /* Word 1 - Little Endian */
549 		uint64_t totalbytesread        : 32;
550 		uint64_t totalbyteswritten     : 32;
551 #endif /* Word 1 - End */
552 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 2 - Big Endian */
553 		/** Total number of compressed input bits
554 		 * consumed to decompress all blocks in the file
555 		 */
556 		uint64_t totalbitsprocessed    : 32;
557 		/** Done interrupt*/
558 		uint64_t doneint               : 1;
559 		/** reserved */
560 		uint64_t reserved_155_158      : 4;
561 		/** EXNUM */
562 		uint64_t exn                   : 3;
563 		/** reserved */
564 		uint64_t reserved_151          : 1;
565 		/** EXBITS */
566 		uint64_t exbits                : 7;
567 		/** reserved */
568 		uint64_t reserved_137_143      : 7;
569 		/** End of file */
570 		uint64_t ef                    : 1;
571 		/** Completion/error code */
572 		uint64_t compcode              : 8;
573 #else /* Word 2 - Little Endian */
574 		uint64_t compcode              : 8;
575 		uint64_t ef                    : 1;
576 		uint64_t reserved_137_143      : 7;
577 		uint64_t exbits                : 7;
578 		uint64_t reserved_151          : 1;
579 		uint64_t exn                   : 3;
580 		uint64_t reserved_155_158      : 4;
581 		uint64_t doneint               : 1;
582 		uint64_t totalbitsprocessed    : 32;
583 #endif /* Word 2 - End */
584 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 3 - Big Endian */
585 		/** reserved */
586 		uint64_t reserved_253_255      : 3;
587 		/** Hash length in bytes */
588 		uint64_t hshlen                : 61;
589 #else /* Word 3 - Little Endian */
590 		uint64_t hshlen                : 61;
591 		uint64_t reserved_253_255      : 3;
592 #endif /* Word 3 - End */
593 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 4 - Big Endian */
594 		/** Double-word 0 of computed hash */
595 		uint64_t hash0                 : 64;
596 #else /* Word 4 - Little Endian */
597 		uint64_t hash0                 : 64;
598 #endif /* Word 4 - End */
599 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 5 - Big Endian */
600 		/** Double-word 1 of computed hash */
601 		uint64_t hash1                 : 64;
602 #else /* Word 5 - Little Endian */
603 		uint64_t hash1                 : 64;
604 #endif /* Word 5 - End */
605 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 6 - Big Endian */
606 		/** Double-word 2 of computed hash */
607 		uint64_t hash2                 : 64;
608 #else /* Word 6 - Little Endian */
609 		uint64_t hash2                 : 64;
610 #endif /* Word 6 - End */
611 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 7 - Big Endian */
612 		/** Double-word 3 of computed hash */
613 		uint64_t hash3                 : 64;
614 #else /* Word 7 - Little Endian */
615 		uint64_t hash3                 : 64;
616 #endif /* Word 7 - End */
617 	} /** ZIP Result Structure */s;
618 
619 	/* struct zip_zres_s_s cn83xx; */
620 };
621 
622 /**
623  * Structure zip_zptr_s
624  *
625  * ZIP Generic Pointer Structure
626  * This structure is the generic format of pointers in ZIP_INST_S.
627  */
628 union zip_zptr_s {
629 	/** This field can be used to set/clear all bits, or do bitwise
630 	 * operations over the entire structure.
631 	 */
632 	uint64_t u[2];
633 	/** ZIP Generic Pointer Structure */
634 	struct zip_zptr_s_s {
635 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 0 - Big Endian */
636 		/** Pointer to Data or scatter-gather list */
637 		uint64_t addr                  : 64;
638 #else /* Word 0 - Little Endian */
639 		uint64_t addr                  : 64;
640 #endif /* Word 0 - End */
641 #if defined(__BIG_ENDIAN_BITFIELD) /* Word 1 - Big Endian */
642 		/** reserved */
643 		uint64_t reserved_112_127      : 16;
644 		/** Length of Data or scatter-gather list*/
645 		uint64_t length                : 16;
646 		/** reserved */
647 		uint64_t reserved_67_95        : 29;
648 		/** Full-block write */
649 		uint64_t fw                    : 1;
650 		/** No cache allocation */
651 		uint64_t nc                    : 1;
652 		/** reserved */
653 		uint64_t data_be               : 1;
654 #else /* Word 1 - Little Endian */
655 		uint64_t data_be               : 1;
656 		uint64_t nc                    : 1;
657 		uint64_t fw                    : 1;
658 		uint64_t reserved_67_95        : 29;
659 		uint64_t length                : 16;
660 		uint64_t reserved_112_127      : 16;
661 #endif /* Word 1 - End */
662 	} /** ZIP Generic Pointer Structure */s;
663 };
664 
665 /**
666  * Enumeration zip_comp_e
667  *
668  * ZIP Completion Enumeration
669  * Enumerates the values of ZIP_ZRES_S[COMPCODE].
670  */
671 #define ZIP_COMP_E_NOTDONE       (0)
672 #define ZIP_COMP_E_SUCCESS       (1)
673 #define ZIP_COMP_E_DTRUNC        (2)
674 #define ZIP_COMP_E_DSTOP         (3)
675 #define ZIP_COMP_E_ITRUNC        (4)
676 #define ZIP_COMP_E_RBLOCK        (5)
677 #define ZIP_COMP_E_NLEN          (6)
678 #define ZIP_COMP_E_BADCODE       (7)
679 #define ZIP_COMP_E_BADCODE2      (8)
680 #define ZIP_COMP_E_ZERO_LEN      (9)
681 #define ZIP_COMP_E_PARITY        (0xa)
682 #define ZIP_COMP_E_FATAL         (0xb)
683 #define ZIP_COMP_E_TIMEOUT       (0xc)
684 #define ZIP_COMP_E_INSTR_ERR     (0xd)
685 #define ZIP_COMP_E_HCTX_ERR      (0xe)
686 #define ZIP_COMP_E_STOP          (3)
687 
688 /**
689  * Enumeration zip_op_e
690  *
691  * ZIP Operation Enumeration
692  * Enumerates ZIP_INST_S[OP].
693  * Internal:
694  */
695 #define ZIP_OP_E_DECOMP   (0)
696 #define ZIP_OP_E_NOCOMP   (1)
697 #define ZIP_OP_E_COMP     (2)
698 
699 /**
700  * Enumeration zip compression levels
701  *
702  * ZIP Compression Level Enumeration
703  * Enumerates ZIP_INST_S[SS].
704  * Internal:
705  */
706 #define ZIP_COMP_E_LEVEL_MAX  (0)
707 #define ZIP_COMP_E_LEVEL_MED  (1)
708 #define ZIP_COMP_E_LEVEL_LOW  (2)
709 #define ZIP_COMP_E_LEVEL_MIN  (3)
710 
711 #endif	/* _RTE_ZIP_REGS_H_ */
712