^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /***********************license start************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * Copyright (c) 2003-2017 Cavium, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * License: one of 'Cavium License' or 'GNU General Public License Version 2'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * This file is provided under the terms of the Cavium License (see below)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * or under the terms of GNU General Public License, Version 2, as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * published by the Free Software Foundation. When using or redistributing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * this file, you may do so under either license.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * Cavium License: Redistribution and use in source and binary forms, with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * or without modification, are permitted provided that the following
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * conditions are met:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * * Redistributions of source code must retain the above copyright
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * notice, this list of conditions and the following disclaimer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * * Redistributions in binary form must reproduce the above
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * copyright notice, this list of conditions and the following
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * disclaimer in the documentation and/or other materials provided
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * with the distribution.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * * Neither the name of Cavium Inc. nor the names of its contributors may be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * used to endorse or promote products derived from this software without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * specific prior written permission.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * This Software, including technical data, may be subject to U.S. export
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * control laws, including the U.S. Export Administration Act and its
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * associated regulations, and may be subject to export or import
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * regulations in other countries.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) * OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) * RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) * REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) * DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) * WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) * PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) * ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE TO DESCRIPTION. THE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) * ENTIRE RISK ARISING OUT OF USE OR PERFORMANCE OF THE SOFTWARE LIES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) * WITH YOU.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) ***********************license end**************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #ifndef __COMMON_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define __COMMON_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #include <linux/delay.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #include <linux/interrupt.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #include <linux/io.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #include <linux/pci.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #include <linux/seq_file.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #include <linux/string.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #include <linux/version.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) /* Device specific zlib function definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #include "zip_device.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) /* ZIP device definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #include "zip_main.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) /* ZIP memory allocation/deallocation related definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #include "zip_mem.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) /* Device specific structure definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #include "zip_regs.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define ZIP_ERROR -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define ZIP_FLUSH_FINISH 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define RAW_FORMAT 0 /* for rawpipe */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define ZLIB_FORMAT 1 /* for zpipe */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define GZIP_FORMAT 2 /* for gzpipe */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define LZS_FORMAT 3 /* for lzspipe */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) /* Max number of ZIP devices supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define MAX_ZIP_DEVICES 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) /* Configures the number of zip queues to be used */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define ZIP_NUM_QUEUES 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define DYNAMIC_STOP_EXCESS 1024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) /* Maximum buffer sizes in direct mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define MAX_INPUT_BUFFER_SIZE (64 * 1024)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define MAX_OUTPUT_BUFFER_SIZE (64 * 1024)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) * struct zip_operation - common data structure for comp and decomp operations
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) * @input: Next input byte is read from here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) * @output: Next output byte written here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) * @ctx_addr: Inflate context buffer address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) * @history: Pointer to the history buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) * @input_len: Number of bytes available at next_in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) * @input_total_len: Total number of input bytes read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) * @output_len: Remaining free space at next_out
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) * @output_total_len: Total number of bytes output so far
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) * @csum: Checksum value of the uncompressed data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) * @flush: Flush flag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) * @format: Format (depends on stream's wrap)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) * @speed: Speed depends on stream's level
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) * @ccode: Compression code ( stream's strategy)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) * @lzs_flag: Flag for LZS support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) * @begin_file: Beginning of file indication for inflate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) * @history_len: Size of the history data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) * @end_file: Ending of the file indication for inflate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) * @compcode: Completion status of the ZIP invocation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) * @bytes_read: Input bytes read in current instruction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) * @bits_processed: Total bits processed for entire file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) * @sizeofptr: To distinguish between ILP32 and LP64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) * @sizeofzops: Optional just for padding
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) * This structure is used to maintain the required meta data for the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) * comp and decomp operations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) struct zip_operation {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) u8 *input;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) u8 *output;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) u64 ctx_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) u64 history;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) u32 input_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) u32 input_total_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) u32 output_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) u32 output_total_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) u32 csum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) u32 flush;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) u32 format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) u32 speed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) u32 ccode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) u32 lzs_flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) u32 begin_file;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) u32 history_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) u32 end_file;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) u32 compcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) u32 bytes_read;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) u32 bits_processed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) u32 sizeofptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) u32 sizeofzops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) static inline int zip_poll_result(union zip_zres_s *result)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) int retries = 1000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) while (!result->s.compcode) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) if (!--retries) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) pr_err("ZIP ERR: request timed out");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) return -ETIMEDOUT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) udelay(10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) * Force re-reading of compcode which is updated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) * by the ZIP coprocessor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) rmb();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) /* error messages */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #define zip_err(fmt, args...) pr_err("ZIP ERR:%s():%d: " \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) fmt "\n", __func__, __LINE__, ## args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #ifdef MSG_ENABLE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) /* Enable all messages */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) #define zip_msg(fmt, args...) pr_info("ZIP_MSG:" fmt "\n", ## args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) #define zip_msg(fmt, args...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #if defined(ZIP_DEBUG_ENABLE) && defined(MSG_ENABLE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #ifdef DEBUG_LEVEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) #define FILE_NAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #if DEBUG_LEVEL >= 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #define zip_dbg(fmt, args...) pr_info("ZIP DBG: %s: %s() : %d: " \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) fmt "\n", FILE_NAME, __func__, __LINE__, ## args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #elif DEBUG_LEVEL >= 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define zip_dbg(fmt, args...) pr_info("ZIP DBG: %s: %s() : %d: " \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) fmt "\n", FILE_NAME, __func__, __LINE__, ## args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #elif DEBUG_LEVEL >= 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define zip_dbg(fmt, args...) pr_info("ZIP DBG: %s() : %d: " \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) fmt "\n", __func__, __LINE__, ## args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define zip_dbg(fmt, args...) pr_info("ZIP DBG:" fmt "\n", ## args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #endif /* DEBUG LEVEL >=4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #define zip_dbg(fmt, args...) pr_info("ZIP DBG:" fmt "\n", ## args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) #endif /* DEBUG_LEVEL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define zip_dbg(fmt, args...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) #endif /* ZIP_DEBUG_ENABLE && MSG_ENABLE*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) #endif