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