1*4fa9c49fSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2ad75b7d3SRahul Lakkireddy /* 3ad75b7d3SRahul Lakkireddy * Copyright (C) 2017 Chelsio Communications. All rights reserved. 4ad75b7d3SRahul Lakkireddy */ 5ad75b7d3SRahul Lakkireddy 6ad75b7d3SRahul Lakkireddy #ifndef __CUDBG_LIB_COMMON_H__ 7ad75b7d3SRahul Lakkireddy #define __CUDBG_LIB_COMMON_H__ 8ad75b7d3SRahul Lakkireddy 9ad75b7d3SRahul Lakkireddy #define CUDBG_SIGNATURE 67856866 /* CUDB in ascii */ 10ad75b7d3SRahul Lakkireddy 11ad75b7d3SRahul Lakkireddy enum cudbg_dump_type { 12ad75b7d3SRahul Lakkireddy CUDBG_DUMP_TYPE_MINI = 1, 13ad75b7d3SRahul Lakkireddy }; 14ad75b7d3SRahul Lakkireddy 15ad75b7d3SRahul Lakkireddy enum cudbg_compression_type { 16ad75b7d3SRahul Lakkireddy CUDBG_COMPRESSION_NONE = 1, 1791c1953dSRahul Lakkireddy CUDBG_COMPRESSION_ZLIB, 18ad75b7d3SRahul Lakkireddy }; 19ad75b7d3SRahul Lakkireddy 20ad75b7d3SRahul Lakkireddy struct cudbg_hdr { 21ad75b7d3SRahul Lakkireddy u32 signature; 22ad75b7d3SRahul Lakkireddy u32 hdr_len; 23ad75b7d3SRahul Lakkireddy u16 major_ver; 24ad75b7d3SRahul Lakkireddy u16 minor_ver; 25ad75b7d3SRahul Lakkireddy u32 data_len; 26ad75b7d3SRahul Lakkireddy u32 hdr_flags; 27ad75b7d3SRahul Lakkireddy u16 max_entities; 28ad75b7d3SRahul Lakkireddy u8 chip_ver; 29ad75b7d3SRahul Lakkireddy u8 dump_type:3; 30ad75b7d3SRahul Lakkireddy u8 reserved1:1; 31ad75b7d3SRahul Lakkireddy u8 compress_type:4; 32ad75b7d3SRahul Lakkireddy u32 reserved[8]; 33ad75b7d3SRahul Lakkireddy }; 34ad75b7d3SRahul Lakkireddy 35ad75b7d3SRahul Lakkireddy struct cudbg_entity_hdr { 36ad75b7d3SRahul Lakkireddy u32 entity_type; 37ad75b7d3SRahul Lakkireddy u32 start_offset; 38ad75b7d3SRahul Lakkireddy u32 size; 39ad75b7d3SRahul Lakkireddy int hdr_flags; 40ad75b7d3SRahul Lakkireddy u32 sys_warn; 41ad75b7d3SRahul Lakkireddy u32 sys_err; 42ad75b7d3SRahul Lakkireddy u8 num_pad; 43ad75b7d3SRahul Lakkireddy u8 flag; /* bit 0 is used to indicate ext data */ 44ad75b7d3SRahul Lakkireddy u8 reserved1[2]; 45ad75b7d3SRahul Lakkireddy u32 next_ext_offset; /* pointer to next extended entity meta data */ 46ad75b7d3SRahul Lakkireddy u32 reserved[5]; 47ad75b7d3SRahul Lakkireddy }; 48ad75b7d3SRahul Lakkireddy 499030e498SRahul Lakkireddy struct cudbg_ver_hdr { 509030e498SRahul Lakkireddy u32 signature; 519030e498SRahul Lakkireddy u16 revision; 529030e498SRahul Lakkireddy u16 size; 539030e498SRahul Lakkireddy }; 549030e498SRahul Lakkireddy 55ad75b7d3SRahul Lakkireddy struct cudbg_buffer { 56ad75b7d3SRahul Lakkireddy u32 size; 57ad75b7d3SRahul Lakkireddy u32 offset; 58ad75b7d3SRahul Lakkireddy char *data; 59ad75b7d3SRahul Lakkireddy }; 60a7975a2fSRahul Lakkireddy 61a7975a2fSRahul Lakkireddy struct cudbg_error { 62a7975a2fSRahul Lakkireddy int sys_err; 63a7975a2fSRahul Lakkireddy int sys_warn; 64a7975a2fSRahul Lakkireddy int app_err; 65a7975a2fSRahul Lakkireddy }; 66a7975a2fSRahul Lakkireddy 67b33af022SRahul Lakkireddy #define CDUMP_MAX_COMP_BUF_SIZE ((64 * 1024) - 1) 68b33af022SRahul Lakkireddy #define CUDBG_CHUNK_SIZE ((CDUMP_MAX_COMP_BUF_SIZE / 1024) * 1024) 69b33af022SRahul Lakkireddy 7056cf2635SRahul Lakkireddy int cudbg_get_buff(struct cudbg_init *pdbg_init, 7156cf2635SRahul Lakkireddy struct cudbg_buffer *pdbg_buff, u32 size, 72a7975a2fSRahul Lakkireddy struct cudbg_buffer *pin_buff); 7356cf2635SRahul Lakkireddy void cudbg_put_buff(struct cudbg_init *pdbg_init, 7456cf2635SRahul Lakkireddy struct cudbg_buffer *pin_buff); 75a7975a2fSRahul Lakkireddy void cudbg_update_buff(struct cudbg_buffer *pin_buff, 76a7975a2fSRahul Lakkireddy struct cudbg_buffer *pout_buff); 77ad75b7d3SRahul Lakkireddy #endif /* __CUDBG_LIB_COMMON_H__ */ 78