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