cvmx-zip.c revision 210284
1206376Srpaulo/***********************license start*************** 2206376Srpaulo * Copyright (c) 2003-2008 Cavium Networks (support@cavium.com). All rights 3206376Srpaulo * reserved. 4206376Srpaulo * 5206376Srpaulo * 6206376Srpaulo * Redistribution and use in source and binary forms, with or without 7206376Srpaulo * modification, are permitted provided that the following conditions are 8206376Srpaulo * met: 9206376Srpaulo * 10206376Srpaulo * * Redistributions of source code must retain the above copyright 11206376Srpaulo * notice, this list of conditions and the following disclaimer. 12206376Srpaulo * 13206376Srpaulo * * Redistributions in binary form must reproduce the above 14206376Srpaulo * copyright notice, this list of conditions and the following 15206376Srpaulo * disclaimer in the documentation and/or other materials provided 16206376Srpaulo * with the distribution. 17206376Srpaulo * 18206376Srpaulo * * Neither the name of Cavium Networks nor the names of 19206376Srpaulo * its contributors may be used to endorse or promote products 20206376Srpaulo * derived from this software without specific prior written 21206376Srpaulo * permission. 22206376Srpaulo * 23206376Srpaulo * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" 24206376Srpaulo * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS 25206376Srpaulo * OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH 26206376Srpaulo * RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY 27206376Srpaulo * REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT 28206376Srpaulo * DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES 29206376Srpaulo * OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR 30206376Srpaulo * PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET 31243977Srpaulo * POSSESSION OR CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT 32206376Srpaulo * OF USE OR PERFORMANCE OF THE SOFTWARE LIES WITH YOU. 33235153Savg * 34206376Srpaulo * 35243977Srpaulo * For any questions regarding licensing please contact marketing@caviumnetworks.com 36243977Srpaulo * 37243977Srpaulo ***********************license end**************************************/ 38243977Srpaulo 39243977Srpaulo 40243977Srpaulo 41243977Srpaulo 42243977Srpaulo 43243977Srpaulo 44243977Srpaulo/** 45206376Srpaulo * @file 46243977Srpaulo * 47206376Srpaulo * Source file for the zip (deflate) block 48206376Srpaulo * 49243977Srpaulo * <hr>$Revision: 41586 $<hr> 50206376Srpaulo */ 51206376Srpaulo 52206376Srpaulo#include "executive-config.h" 53206376Srpaulo#include "cvmx-config.h" 54243977Srpaulo#include "cvmx.h" 55243977Srpaulo#include "cvmx-cmd-queue.h" 56206376Srpaulo#include "cvmx-zip.h" 57206376Srpaulo 58206376Srpaulo#ifdef CVMX_ENABLE_PKO_FUNCTIONS 59206376Srpaulo 60206376Srpaulo/** 61206376Srpaulo * Initialize the ZIP block 62206376Srpaulo * 63206376Srpaulo * @return Zero on success, negative on failure 64258719Semaste */ 65243977Srpauloint cvmx_zip_initialize(void) 66243977Srpaulo{ 67206376Srpaulo cvmx_zip_cmd_buf_t zip_cmd_buf; 68206376Srpaulo cvmx_cmd_queue_result_t result; 69206376Srpaulo result = cvmx_cmd_queue_initialize(CVMX_CMD_QUEUE_ZIP, 0, 70243977Srpaulo CVMX_FPA_OUTPUT_BUFFER_POOL, 71206376Srpaulo CVMX_FPA_OUTPUT_BUFFER_POOL_SIZE); 72206376Srpaulo if (result != CVMX_CMD_QUEUE_SUCCESS) 73206376Srpaulo return -1; 74243977Srpaulo 75206376Srpaulo zip_cmd_buf.u64 = 0; 76206376Srpaulo zip_cmd_buf.s.dwb = CVMX_FPA_OUTPUT_BUFFER_POOL_SIZE/128; 77206376Srpaulo zip_cmd_buf.s.pool = CVMX_FPA_OUTPUT_BUFFER_POOL; 78206376Srpaulo zip_cmd_buf.s.size = CVMX_FPA_OUTPUT_BUFFER_POOL_SIZE/8; 79206376Srpaulo zip_cmd_buf.s.ptr = cvmx_ptr_to_phys(cvmx_cmd_queue_buffer(CVMX_CMD_QUEUE_ZIP))>>7; 80206376Srpaulo cvmx_write_csr(CVMX_ZIP_CMD_BUF, zip_cmd_buf.u64); 81206376Srpaulo cvmx_write_csr(CVMX_ZIP_ERROR, 1); 82206376Srpaulo cvmx_read_csr(CVMX_ZIP_CMD_BUF); /* Read to make sure setup is complete */ 83206376Srpaulo return 0; 84206376Srpaulo} 85206376Srpaulo 86206376Srpaulo/** 87206376Srpaulo * Shutdown the ZIP block. ZIP must be idle when 88206376Srpaulo * this function is called. 89206376Srpaulo * 90243977Srpaulo * @return Zero on success, negative on failure 91206376Srpaulo */ 92206376Srpauloint cvmx_zip_shutdown(void) 93206376Srpaulo{ 94206376Srpaulo cvmx_zip_cmd_ctl_t zip_cmd_ctl; 95206376Srpaulo 96206376Srpaulo if (cvmx_cmd_queue_length(CVMX_CMD_QUEUE_ZIP)) 97206376Srpaulo { 98206376Srpaulo cvmx_dprintf("ERROR: cvmx_zip_shutdown: ZIP not idle.\n"); 99206376Srpaulo return -1; 100206376Srpaulo } 101243977Srpaulo 102206376Srpaulo zip_cmd_ctl.u64 = cvmx_read_csr(CVMX_ZIP_CMD_CTL); 103243977Srpaulo zip_cmd_ctl.s.reset = 1; 104206376Srpaulo cvmx_write_csr(CVMX_ZIP_CMD_CTL, zip_cmd_ctl.u64); 105206376Srpaulo cvmx_wait(100); 106206376Srpaulo 107206376Srpaulo cvmx_cmd_queue_shutdown(CVMX_CMD_QUEUE_ZIP); 108 return 0; 109} 110 111/** 112 * Submit a command to the ZIP block 113 * 114 * @param command Zip command to submit 115 * 116 * @return Zero on success, negative on failure 117 */ 118int cvmx_zip_submit(cvmx_zip_command_t *command) 119{ 120 cvmx_cmd_queue_result_t result = cvmx_cmd_queue_write(CVMX_CMD_QUEUE_ZIP, 1, 8, command->u64); 121 if (result == CVMX_CMD_QUEUE_SUCCESS) 122 cvmx_write_csr(CVMX_ADDR_DID(CVMX_FULL_DID(7, 0)), 8); 123 return result; 124} 125 126#endif 127 128