1210284Sjmallett/***********************license start*************** 2232812Sjmallett * Copyright (c) 2003-2010 Cavium Inc. (support@cavium.com). All rights 3215990Sjmallett * reserved. 4210284Sjmallett * 5210284Sjmallett * 6215990Sjmallett * Redistribution and use in source and binary forms, with or without 7215990Sjmallett * modification, are permitted provided that the following conditions are 8215990Sjmallett * met: 9210284Sjmallett * 10215990Sjmallett * * Redistributions of source code must retain the above copyright 11215990Sjmallett * notice, this list of conditions and the following disclaimer. 12210284Sjmallett * 13215990Sjmallett * * Redistributions in binary form must reproduce the above 14215990Sjmallett * copyright notice, this list of conditions and the following 15215990Sjmallett * disclaimer in the documentation and/or other materials provided 16215990Sjmallett * with the distribution. 17215990Sjmallett 18232812Sjmallett * * Neither the name of Cavium Inc. nor the names of 19215990Sjmallett * its contributors may be used to endorse or promote products 20215990Sjmallett * derived from this software without specific prior written 21215990Sjmallett * permission. 22215990Sjmallett 23215990Sjmallett * This Software, including technical data, may be subject to U.S. export control 24215990Sjmallett * laws, including the U.S. Export Administration Act and its associated 25215990Sjmallett * regulations, and may be subject to export or import regulations in other 26215990Sjmallett * countries. 27215990Sjmallett 28215990Sjmallett * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" 29232812Sjmallett * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR 30215990Sjmallett * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO 31215990Sjmallett * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR 32215990Sjmallett * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM 33215990Sjmallett * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE, 34215990Sjmallett * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF 35215990Sjmallett * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR 36215990Sjmallett * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR 37215990Sjmallett * PERFORMANCE OF THE SOFTWARE LIES WITH YOU. 38210284Sjmallett ***********************license end**************************************/ 39210284Sjmallett 40210284Sjmallett 41210284Sjmallett 42210284Sjmallett 43210284Sjmallett 44210284Sjmallett 45215990Sjmallett 46210284Sjmallett/** 47210284Sjmallett * @file 48210284Sjmallett * 49210284Sjmallett * Header file for the zip (deflate) block 50210284Sjmallett * 51232812Sjmallett * <hr>$Revision: 70030 $<hr> 52210284Sjmallett */ 53210284Sjmallett 54210284Sjmallett#ifndef __CVMX_ZIP_H__ 55210284Sjmallett#define __CVMX_ZIP_H__ 56210284Sjmallett 57210284Sjmallett#ifdef __cplusplus 58210284Sjmallettextern "C" { 59210284Sjmallett#endif 60210284Sjmallett 61210284Sjmalletttypedef union { 62210284Sjmallett uint64_t u64; 63210284Sjmallett struct { 64232812Sjmallett#ifdef __BIG_ENDIAN_BITFIELD 65210284Sjmallett uint64_t unused : 5; 66210284Sjmallett uint64_t full_block_write : 1; 67210284Sjmallett uint64_t no_l2_alloc : 1; 68210284Sjmallett uint64_t little_endian : 1; 69210284Sjmallett uint64_t length : 16; 70210284Sjmallett uint64_t ptr : 40; 71210284Sjmallett#else 72210284Sjmallett uint64_t ptr : 40; 73210284Sjmallett uint64_t length : 16; 74210284Sjmallett uint64_t little_endian : 1; 75210284Sjmallett uint64_t no_l2_alloc : 1; 76210284Sjmallett uint64_t full_block_write : 1; 77210284Sjmallett uint64_t unused : 5; 78210284Sjmallett#endif 79210284Sjmallett } s; 80210284Sjmallett} cvmx_zip_ptr_t; 81210284Sjmallett#define CVMX_ZIP_PTR_MAX_LEN ((1 << 16) - 1) 82210284Sjmallett 83210284Sjmallett 84210284Sjmalletttypedef enum { 85210284Sjmallett CVMX_ZIP_COMPLETION_NOTDONE = 0, 86210284Sjmallett CVMX_ZIP_COMPLETION_SUCCESS = 1, 87210284Sjmallett CVMX_ZIP_COMPLETION_OTRUNC = 2, 88210284Sjmallett CVMX_ZIP_COMPLETION_STOP = 3, 89210284Sjmallett CVMX_ZIP_COMPLETION_ITRUNC = 4, 90210284Sjmallett CVMX_ZIP_COMPLETION_RBLOCK = 5, 91210284Sjmallett CVMX_ZIP_COMPLETION_NLEN = 6, 92210284Sjmallett CVMX_ZIP_COMPLETION_BADCODE = 7, 93210284Sjmallett CVMX_ZIP_COMPLETION_BADCODE2 = 8, 94210284Sjmallett CVMX_ZIP_COMPLETION_ZERO_LEN = 9, 95215990Sjmallett CVMX_ZIP_COMPLETION_PARITY = 10, 96215990Sjmallett CVMX_ZIP_COMPLETION_FATAL = 11 97210284Sjmallett} cvmx_zip_completion_code_t; 98210284Sjmallett 99210284Sjmalletttypedef union { 100210284Sjmallett uint64_t u64[3]; 101210284Sjmallett struct { 102210284Sjmallett 103210284Sjmallett // WORD 0 104232812Sjmallett#ifdef __BIG_ENDIAN_BITFIELD 105210284Sjmallett uint64_t crc32 : 32; 106210284Sjmallett uint64_t adler : 32; 107210284Sjmallett#else 108210284Sjmallett uint64_t adler : 32; 109210284Sjmallett uint64_t crc32 : 32; 110210284Sjmallett#endif 111210284Sjmallett 112210284Sjmallett // WORD 1 113232812Sjmallett#ifdef __BIG_ENDIAN_BITFIELD 114210284Sjmallett uint64_t totalbyteswritten : 32; 115210284Sjmallett uint64_t totalbytesread : 32; 116210284Sjmallett#else 117210284Sjmallett uint64_t totalbytesread : 32; 118210284Sjmallett uint64_t totalbyteswritten : 32; 119210284Sjmallett#endif 120210284Sjmallett 121210284Sjmallett // WORD 2 122232812Sjmallett#ifdef __BIG_ENDIAN_BITFIELD 123210284Sjmallett uint64_t totalbitsprocessed : 32; // decompression only 124210284Sjmallett uint64_t unused20 : 5; 125210284Sjmallett uint64_t exnum : 3; // compression only 126210284Sjmallett uint64_t unused21 : 1; 127210284Sjmallett uint64_t exbits : 7; // compression only 128210284Sjmallett uint64_t unused22 : 7; 129210284Sjmallett uint64_t eof : 1; // decompression only 130210284Sjmallett cvmx_zip_completion_code_t completioncode : 8; // If polling, SW should set this to zero and wait for non-zero 131210284Sjmallett#else 132210284Sjmallett cvmx_zip_completion_code_t completioncode : 8; // If polling, SW should set this to zero and wait for non-zero 133210284Sjmallett uint64_t eof : 1; // decompression only 134210284Sjmallett uint64_t unused22 : 7; 135210284Sjmallett uint64_t exbits : 7; // compression only 136210284Sjmallett uint64_t unused21 : 1; 137210284Sjmallett uint64_t exnum : 3; // compression only 138210284Sjmallett uint64_t unused20 : 5; 139210284Sjmallett uint64_t totalbitsprocessed : 32; // decompression only 140210284Sjmallett#endif 141210284Sjmallett } s; 142210284Sjmallett} cvmx_zip_result_t; 143210284Sjmallett 144210284Sjmalletttypedef union { 145210284Sjmallett uint64_t u64[8]; 146210284Sjmallett struct { 147210284Sjmallett 148210284Sjmallett // WORD 0 149232812Sjmallett#ifdef __BIG_ENDIAN_BITFIELD 150210284Sjmallett uint64_t unused00 : 8; 151210284Sjmallett uint64_t totaloutputlength : 24; 152210284Sjmallett uint64_t unused01 : 5; 153210284Sjmallett uint64_t exnum : 3; 154210284Sjmallett uint64_t unused02 : 1; 155210284Sjmallett uint64_t exbits : 7; 156232812Sjmallett uint64_t unused03 : 4; 157232812Sjmallett uint64_t flush : 1; 158232812Sjmallett uint64_t speed : 2; 159210284Sjmallett uint64_t forcefixed : 1; 160210284Sjmallett uint64_t forcedynamic : 1; 161210284Sjmallett uint64_t eof : 1; 162210284Sjmallett uint64_t bof : 1; 163210284Sjmallett uint64_t compress : 1; 164210284Sjmallett uint64_t unused04 : 1; 165210284Sjmallett uint64_t dscatter : 1; 166210284Sjmallett uint64_t dgather : 1; 167210284Sjmallett uint64_t hgather : 1; 168210284Sjmallett#else 169210284Sjmallett uint64_t hgather : 1; 170210284Sjmallett uint64_t dgather : 1; 171210284Sjmallett uint64_t dscatter : 1; 172210284Sjmallett uint64_t unused04 : 1; 173210284Sjmallett uint64_t compress : 1; 174210284Sjmallett uint64_t bof : 1; 175210284Sjmallett uint64_t eof : 1; 176210284Sjmallett uint64_t forcedynamic : 1; 177210284Sjmallett uint64_t forcefixed : 1; 178232812Sjmallett uint64_t speed : 2; 179232812Sjmallett uint64_t flush : 1; 180232812Sjmallett uint64_t unused03 : 4; 181210284Sjmallett uint64_t exbits : 7; 182210284Sjmallett uint64_t unused02 : 1; 183210284Sjmallett uint64_t exnum : 3; 184210284Sjmallett uint64_t unused01 : 5; 185210284Sjmallett uint64_t totaloutputlength : 24; 186210284Sjmallett uint64_t unused00 : 8; 187210284Sjmallett#endif 188210284Sjmallett 189210284Sjmallett // WORD 1 190232812Sjmallett#ifdef __BIG_ENDIAN_BITFIELD 191210284Sjmallett uint64_t historylength : 16; 192210284Sjmallett uint64_t unused10 : 16; 193210284Sjmallett uint64_t adler32 : 32; 194210284Sjmallett#else 195210284Sjmallett uint64_t adler32 : 32; 196210284Sjmallett uint64_t unused10 : 16; 197210284Sjmallett uint64_t historylength : 16; 198210284Sjmallett#endif 199210284Sjmallett 200210284Sjmallett // WORD 2 201210284Sjmallett cvmx_zip_ptr_t ctx_ptr; 202210284Sjmallett 203210284Sjmallett // WORD 3 204210284Sjmallett cvmx_zip_ptr_t hist_ptr; 205210284Sjmallett 206210284Sjmallett // WORD 4 207210284Sjmallett cvmx_zip_ptr_t in_ptr; 208210284Sjmallett 209210284Sjmallett // WORD 5 210210284Sjmallett cvmx_zip_ptr_t out_ptr; 211210284Sjmallett 212210284Sjmallett // WORD 6 213210284Sjmallett cvmx_zip_ptr_t result_ptr; 214210284Sjmallett 215210284Sjmallett // WORD 7 216210284Sjmallett cvmx_zip_ptr_t wq_ptr; 217210284Sjmallett 218210284Sjmallett } s; 219210284Sjmallett} cvmx_zip_command_t; 220210284Sjmallett 221210284Sjmallett 222210284Sjmallett/** 223210284Sjmallett * Initialize the ZIP block 224210284Sjmallett * 225210284Sjmallett * @return Zero on success, negative on failure 226210284Sjmallett */ 227210284Sjmallettint cvmx_zip_initialize(void); 228210284Sjmallett 229210284Sjmallett/** 230232812Sjmallett * Initialize the ZIP QUEUE buffer 231232812Sjmallett * 232232812Sjmallett * @param queue : ZIP instruction queue 233232812Sjmallett * @param zcoremask : ZIP coremask to use for this queue 234232812Sjmallett * 235232812Sjmallett * @return Zero on success, negative on failure 236232812Sjmallett */ 237232812Sjmallettint cvmx_zip_queue_initialize(int queue, int zcoremask); 238232812Sjmallett 239232812Sjmallett/** 240210284Sjmallett * Shutdown the ZIP block. ZIP must be idle when 241210284Sjmallett * this function is called. 242210284Sjmallett * 243210284Sjmallett * @return Zero on success, negative on failure 244210284Sjmallett */ 245210284Sjmallettint cvmx_zip_shutdown(void); 246210284Sjmallett 247210284Sjmallett/** 248232812Sjmallett * Shutdown the ZIP block for a queue. ZIP must be idle when 249232812Sjmallett * this function is called. 250232812Sjmallett * 251232812Sjmallett * @param queue Zip instruction queue of the command 252232812Sjmallett * 253232812Sjmallett * @return Zero on success, negative on failure 254232812Sjmallett */ 255232812Sjmallettint cvmx_zip_queue_shutdown(int queue); 256232812Sjmallett 257232812Sjmallett/** 258210284Sjmallett * Submit a command to the ZIP block 259210284Sjmallett * 260210284Sjmallett * @param command Zip command to submit 261210284Sjmallett * 262210284Sjmallett * @return Zero on success, negative on failure 263210284Sjmallett */ 264210284Sjmallettint cvmx_zip_submit(cvmx_zip_command_t *command); 265210284Sjmallett 266232812Sjmallett/** 267232812Sjmallett * Submit a command to the ZIP block 268232812Sjmallett * 269232812Sjmallett * @param command Zip command to submit 270232812Sjmallett * @param queue Zip instruction queue of the command 271232812Sjmallett * 272232812Sjmallett * @return Zero on success, negative on failure 273232812Sjmallett */ 274232812Sjmallettint cvmx_zip_queue_submit(cvmx_zip_command_t *command, int queue); 275232812Sjmallett 276215990Sjmallett/* CSR typedefs have been moved to cvmx-zip-defs.h */ 277210284Sjmallett 278210284Sjmallett#ifdef __cplusplus 279210284Sjmallett} 280210284Sjmallett#endif 281210284Sjmallett 282210284Sjmallett#endif /* __CVMX_ZIP_H__ */ 283