1*7e6ad469SVishal Kulkarni /* 2*7e6ad469SVishal Kulkarni * This file and its contents are supplied under the terms of the 3*7e6ad469SVishal Kulkarni * Common Development and Distribution License ("CDDL"), version 1.0. 4*7e6ad469SVishal Kulkarni * You may only use this file in accordance with the terms of version 5*7e6ad469SVishal Kulkarni * 1.0 of the CDDL. 6*7e6ad469SVishal Kulkarni * 7*7e6ad469SVishal Kulkarni * A full copy of the text of the CDDL should have accompanied this 8*7e6ad469SVishal Kulkarni * source. A copy of the CDDL is also available via the Internet at 9*7e6ad469SVishal Kulkarni * http://www.illumos.org/license/CDDL. 10*7e6ad469SVishal Kulkarni */ 11*7e6ad469SVishal Kulkarni 12*7e6ad469SVishal Kulkarni /*- 13*7e6ad469SVishal Kulkarni * Copyright (c) 2017 Chelsio Communications, Inc. 14*7e6ad469SVishal Kulkarni * All rights reserved. 15*7e6ad469SVishal Kulkarni * 16*7e6ad469SVishal Kulkarni * Redistribution and use in source and binary forms, with or without 17*7e6ad469SVishal Kulkarni * modification, are permitted provided that the following conditions 18*7e6ad469SVishal Kulkarni * are met: 19*7e6ad469SVishal Kulkarni * 1. Redistributions of source code must retain the above copyright 20*7e6ad469SVishal Kulkarni * notice, this list of conditions and the following disclaimer. 21*7e6ad469SVishal Kulkarni * 2. Redistributions in binary form must reproduce the above copyright 22*7e6ad469SVishal Kulkarni * notice, this list of conditions and the following disclaimer in the 23*7e6ad469SVishal Kulkarni * documentation and/or other materials provided with the distribution. 24*7e6ad469SVishal Kulkarni * 25*7e6ad469SVishal Kulkarni * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 26*7e6ad469SVishal Kulkarni * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27*7e6ad469SVishal Kulkarni * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28*7e6ad469SVishal Kulkarni * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 29*7e6ad469SVishal Kulkarni * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30*7e6ad469SVishal Kulkarni * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31*7e6ad469SVishal Kulkarni * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32*7e6ad469SVishal Kulkarni * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33*7e6ad469SVishal Kulkarni * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34*7e6ad469SVishal Kulkarni * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35*7e6ad469SVishal Kulkarni * SUCH DAMAGE. 36*7e6ad469SVishal Kulkarni * 37*7e6ad469SVishal Kulkarni */ 38*7e6ad469SVishal Kulkarni 39*7e6ad469SVishal Kulkarni #ifndef __CUDBG_LIB_COMMON_H__ 40*7e6ad469SVishal Kulkarni #define __CUDBG_LIB_COMMON_H__ 41*7e6ad469SVishal Kulkarni 42*7e6ad469SVishal Kulkarni #define CUDBG_EXT_DATA_BIT 0 43*7e6ad469SVishal Kulkarni #define CUDBG_EXT_DATA_VALID (1 << CUDBG_EXT_DATA_BIT) 44*7e6ad469SVishal Kulkarni 45*7e6ad469SVishal Kulkarni #ifdef _KERNEL 46*7e6ad469SVishal Kulkarni #include "common/t4_hw.h" 47*7e6ad469SVishal Kulkarni 48*7e6ad469SVishal Kulkarni #define CUDBG_SF_MAX_SECTOR (FLASH_CUDBG_START_SEC + FLASH_CUDBG_NSECS) 49*7e6ad469SVishal Kulkarni #define CUDBG_SF_SECTOR_SIZE SF_SEC_SIZE 50*7e6ad469SVishal Kulkarni #define CUDBG_START_SEC FLASH_CUDBG_START_SEC 51*7e6ad469SVishal Kulkarni #define CUDBG_FLASH_SIZE FLASH_CUDBG_MAX_SIZE 52*7e6ad469SVishal Kulkarni 53*7e6ad469SVishal Kulkarni struct cudbg_flash_sec_info { 54*7e6ad469SVishal Kulkarni int par_sec; /* Represent partially filled sector no */ 55*7e6ad469SVishal Kulkarni int par_sec_offset; /* Offset in partially filled sector */ 56*7e6ad469SVishal Kulkarni int cur_seq_no; 57*7e6ad469SVishal Kulkarni u32 max_seq_no; 58*7e6ad469SVishal Kulkarni u32 max_seq_sec; 59*7e6ad469SVishal Kulkarni u32 hdr_data_len; /* Total data */ 60*7e6ad469SVishal Kulkarni u32 skip_size; /* Total size of large entities. */ 61*7e6ad469SVishal Kulkarni u64 max_timestamp; 62*7e6ad469SVishal Kulkarni char sec_data[CUDBG_SF_SECTOR_SIZE]; 63*7e6ad469SVishal Kulkarni u8 sec_bitmap[8]; 64*7e6ad469SVishal Kulkarni }; 65*7e6ad469SVishal Kulkarni 66*7e6ad469SVishal Kulkarni void update_skip_size(struct cudbg_flash_sec_info *, u32); 67*7e6ad469SVishal Kulkarni #endif 68*7e6ad469SVishal Kulkarni #include "osdep.h" 69*7e6ad469SVishal Kulkarni 70*7e6ad469SVishal Kulkarni struct cudbg_hdr { 71*7e6ad469SVishal Kulkarni u32 signature; 72*7e6ad469SVishal Kulkarni u32 hdr_len; 73*7e6ad469SVishal Kulkarni u16 major_ver; 74*7e6ad469SVishal Kulkarni u16 minor_ver; 75*7e6ad469SVishal Kulkarni u32 data_len; 76*7e6ad469SVishal Kulkarni u32 hdr_flags; 77*7e6ad469SVishal Kulkarni u16 max_entities; 78*7e6ad469SVishal Kulkarni u8 chip_ver; 79*7e6ad469SVishal Kulkarni u8 reserved1; 80*7e6ad469SVishal Kulkarni u32 reserved[8]; 81*7e6ad469SVishal Kulkarni }; 82*7e6ad469SVishal Kulkarni 83*7e6ad469SVishal Kulkarni struct cudbg_entity_hdr { 84*7e6ad469SVishal Kulkarni u32 entity_type; 85*7e6ad469SVishal Kulkarni u32 start_offset; 86*7e6ad469SVishal Kulkarni u32 size; 87*7e6ad469SVishal Kulkarni int hdr_flags; 88*7e6ad469SVishal Kulkarni u32 sys_warn; 89*7e6ad469SVishal Kulkarni u32 sys_err; 90*7e6ad469SVishal Kulkarni u8 num_pad; 91*7e6ad469SVishal Kulkarni u8 flag; /* bit 0 is used to indicate ext data */ 92*7e6ad469SVishal Kulkarni u8 reserved1[2]; 93*7e6ad469SVishal Kulkarni u32 next_ext_offset; /* pointer to next extended entity meta data */ 94*7e6ad469SVishal Kulkarni u32 reserved[5]; 95*7e6ad469SVishal Kulkarni }; 96*7e6ad469SVishal Kulkarni 97*7e6ad469SVishal Kulkarni struct cudbg_ver_hdr { 98*7e6ad469SVishal Kulkarni u32 signature; 99*7e6ad469SVishal Kulkarni u16 revision; 100*7e6ad469SVishal Kulkarni u16 size; 101*7e6ad469SVishal Kulkarni }; 102*7e6ad469SVishal Kulkarni 103*7e6ad469SVishal Kulkarni struct cudbg_buffer { 104*7e6ad469SVishal Kulkarni u32 size; 105*7e6ad469SVishal Kulkarni u32 offset; 106*7e6ad469SVishal Kulkarni char *data; 107*7e6ad469SVishal Kulkarni }; 108*7e6ad469SVishal Kulkarni 109*7e6ad469SVishal Kulkarni struct cudbg_error { 110*7e6ad469SVishal Kulkarni int sys_err; 111*7e6ad469SVishal Kulkarni int sys_warn; 112*7e6ad469SVishal Kulkarni int app_err; 113*7e6ad469SVishal Kulkarni }; 114*7e6ad469SVishal Kulkarni 115*7e6ad469SVishal Kulkarni #define HTONL_NIBBLE(data) ( \ 116*7e6ad469SVishal Kulkarni (((uint32_t)(data) >> 28) & 0x0000000F) | \ 117*7e6ad469SVishal Kulkarni (((uint32_t)(data) >> 20) & 0x000000F0) | \ 118*7e6ad469SVishal Kulkarni (((uint32_t)(data) >> 12) & 0x00000F00) | \ 119*7e6ad469SVishal Kulkarni (((uint32_t)(data) >> 4) & 0x0000F000) | \ 120*7e6ad469SVishal Kulkarni (((uint32_t)(data) << 4) & 0x000F0000) | \ 121*7e6ad469SVishal Kulkarni (((uint32_t)(data) << 12) & 0x00F00000) | \ 122*7e6ad469SVishal Kulkarni (((uint32_t)(data) << 20) & 0x0F000000) | \ 123*7e6ad469SVishal Kulkarni (((uint32_t)(data) << 28) & 0xF0000000)) 124*7e6ad469SVishal Kulkarni 125*7e6ad469SVishal Kulkarni #define CDUMP_MAX_COMP_BUF_SIZE ((64 * 1024) - 1) 126*7e6ad469SVishal Kulkarni #define CUDBG_CHUNK_SIZE ((CDUMP_MAX_COMP_BUF_SIZE/1024) * 1024) 127*7e6ad469SVishal Kulkarni 128*7e6ad469SVishal Kulkarni #define CUDBG_LEGACY_SIGNATURE 123 129*7e6ad469SVishal Kulkarni #define CUDBG_SIGNATURE 67856866 /* CUDB in ascii */ 130*7e6ad469SVishal Kulkarni #define CUDBG_FL_SIGNATURE 0x4355464c /* CUFL in ascii */ 131*7e6ad469SVishal Kulkarni 132*7e6ad469SVishal Kulkarni #define CUDBG_FL_MAJOR_VERSION 1 133*7e6ad469SVishal Kulkarni #define CUDBG_FL_MINOR_VERSION 1 134*7e6ad469SVishal Kulkarni #define CUDBG_FL_BUILD_VERSION 0 135*7e6ad469SVishal Kulkarni 136*7e6ad469SVishal Kulkarni int write_compression_hdr(struct cudbg_buffer *, struct cudbg_buffer *); 137*7e6ad469SVishal Kulkarni int compress_buff(struct cudbg_buffer *, struct cudbg_buffer *); 138*7e6ad469SVishal Kulkarni int get_scratch_buff(struct cudbg_buffer *, u32, struct cudbg_buffer *); 139*7e6ad469SVishal Kulkarni void release_scratch_buff(struct cudbg_buffer *, struct cudbg_buffer *); 140*7e6ad469SVishal Kulkarni int decompress_buffer(struct cudbg_buffer *, struct cudbg_buffer *); 141*7e6ad469SVishal Kulkarni int validate_buffer(struct cudbg_buffer *compressed_buffer); 142*7e6ad469SVishal Kulkarni int decompress_buffer_wrapper(struct cudbg_buffer *pc_buff, 143*7e6ad469SVishal Kulkarni struct cudbg_buffer *pdc_buff); 144*7e6ad469SVishal Kulkarni int get_entity_rev(struct cudbg_ver_hdr *ver_hdr); 145*7e6ad469SVishal Kulkarni void sort_t(void *base, int num, int size, 146*7e6ad469SVishal Kulkarni int (*cmp_func)(const void *, const void *), 147*7e6ad469SVishal Kulkarni void (*swap_func)(void *, void *, int size)); 148*7e6ad469SVishal Kulkarni int cudbg_read_flash(void *handle, void *data, u32 size, int data_flag); 149*7e6ad469SVishal Kulkarni int cudbg_write_flash(void *handle, u64 timestamp, void *data, 150*7e6ad469SVishal Kulkarni u32 start_offset, u32 start_hdr_offset, 151*7e6ad469SVishal Kulkarni u32 cur_entity_size, 152*7e6ad469SVishal Kulkarni u32 ext_size); 153*7e6ad469SVishal Kulkarni #endif 154