1 /* Broadcom NetXtreme-C/E network driver. 2 * 3 * Copyright (c) 2018 Broadcom Inc 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation. 8 */ 9 10 #ifndef BNXT_COREDUMP_H 11 #define BNXT_COREDUMP_H 12 13 #include <linux/utsname.h> 14 #include <linux/time.h> 15 #include <linux/rtc.h> 16 17 struct bnxt_coredump_segment_hdr { 18 __u8 signature[4]; 19 __le32 component_id; 20 __le32 segment_id; 21 __le32 flags; 22 __u8 low_version; 23 __u8 high_version; 24 __le16 function_id; 25 __le32 offset; 26 __le32 length; 27 __le32 status; 28 __le32 duration; 29 __le32 data_offset; 30 __le32 instance; 31 __le32 rsvd[5]; 32 }; 33 34 struct bnxt_coredump_record { 35 __u8 signature[4]; 36 __le32 flags; 37 __u8 low_version; 38 __u8 high_version; 39 __u8 asic_state; 40 __u8 rsvd0[5]; 41 char system_name[32]; 42 __le16 year; 43 __le16 month; 44 __le16 day; 45 __le16 hour; 46 __le16 minute; 47 __le16 second; 48 __le16 utc_bias; 49 __le16 rsvd1; 50 char commandline[256]; 51 __le32 total_segments; 52 __le32 os_ver_major; 53 __le32 os_ver_minor; 54 __le32 rsvd2; 55 char os_name[32]; 56 __le16 end_year; 57 __le16 end_month; 58 __le16 end_day; 59 __le16 end_hour; 60 __le16 end_minute; 61 __le16 end_second; 62 __le16 end_utc_bias; 63 __le32 asic_id1; 64 __le32 asic_id2; 65 __le32 coredump_status; 66 __u8 ioctl_low_version; 67 __u8 ioctl_high_version; 68 __le16 rsvd3[313]; 69 }; 70 71 struct bnxt_driver_segment_record { 72 __le32 max_entries; 73 __le32 entry_size; 74 __le32 offset; 75 __u8 wrapped:1; 76 __u8 unused[3]; 77 }; 78 79 #define BNXT_VER_GET_COMP_ID 2 80 #define BNXT_DRV_COMP_ID 0xd 81 82 #define BNXT_CTX_MEM_SEG_ID_START 0x200 83 84 #define BNXT_CTX_MEM_SEG_QP (BNXT_CTX_MEM_SEG_ID_START + BNXT_CTX_QP) 85 #define BNXT_CTX_MEM_SEG_SRQ (BNXT_CTX_MEM_SEG_ID_START + BNXT_CTX_SRQ) 86 #define BNXT_CTX_MEM_SEG_CQ (BNXT_CTX_MEM_SEG_ID_START + BNXT_CTX_CQ) 87 #define BNXT_CTX_MEM_SEG_VNIC (BNXT_CTX_MEM_SEG_ID_START + BNXT_CTX_VNIC) 88 #define BNXT_CTX_MEM_SEG_STAT (BNXT_CTX_MEM_SEG_ID_START + BNXT_CTX_STAT) 89 #define BNXT_CTX_MEM_SEG_STQM (BNXT_CTX_MEM_SEG_ID_START + BNXT_CTX_STQM) 90 #define BNXT_CTX_MEM_SEG_FTQM (BNXT_CTX_MEM_SEG_ID_START + BNXT_CTX_FTQM) 91 #define BNXT_CTX_MEM_SEG_MRAV (BNXT_CTX_MEM_SEG_ID_START + BNXT_CTX_MRAV) 92 #define BNXT_CTX_MEM_SEG_TIM (BNXT_CTX_MEM_SEG_ID_START + BNXT_CTX_TIM) 93 94 #define BNXT_CTX_MEM_SEG_SRT 0x1 95 #define BNXT_CTX_MEM_SEG_SRT2 0x2 96 #define BNXT_CTX_MEM_SEG_CRT 0x3 97 #define BNXT_CTX_MEM_SEG_CRT2 0x4 98 #define BNXT_CTX_MEM_SEG_RIGP0 0x5 99 #define BNXT_CTX_MEM_SEG_L2HWRM 0x6 100 #define BNXT_CTX_MEM_SEG_REHWRM 0x7 101 #define BNXT_CTX_MEM_SEG_CA0 0x8 102 #define BNXT_CTX_MEM_SEG_CA1 0x9 103 #define BNXT_CTX_MEM_SEG_CA2 0xa 104 #define BNXT_CTX_MEM_SEG_RIGP1 0xb 105 #define BNXT_CTX_MEM_SEG_QPC 0xc 106 #define BNXT_CTX_MEM_SEG_KONG 0xd 107 108 #define BNXT_CRASH_DUMP_LEN (8 << 20) 109 110 #define COREDUMP_LIST_BUF_LEN 2048 111 #define COREDUMP_RETRIEVE_BUF_LEN 4096 112 113 #define BNXT_SEG_HDR_LEN sizeof(struct bnxt_coredump_segment_hdr) 114 #define BNXT_SEG_RCD_LEN sizeof(struct bnxt_driver_segment_record) 115 116 struct bnxt_coredump { 117 void *data; 118 int data_size; 119 u16 total_segs; 120 }; 121 122 #define BNXT_COREDUMP_BUF_LEN(len) ((len) - sizeof(struct bnxt_coredump_record)) 123 124 struct bnxt_hwrm_dbg_dma_info { 125 void *dest_buf; 126 int dest_buf_size; 127 u16 dma_len; 128 u16 seq_off; 129 u16 data_len_off; 130 u16 segs; 131 u32 seg_start; 132 u32 buf_len; 133 }; 134 135 struct hwrm_dbg_cmn_input { 136 __le16 req_type; 137 __le16 cmpl_ring; 138 __le16 seq_id; 139 __le16 target_id; 140 __le64 resp_addr; 141 __le64 host_dest_addr; 142 __le32 host_buf_len; 143 }; 144 145 struct hwrm_dbg_cmn_output { 146 __le16 error_code; 147 __le16 req_type; 148 __le16 seq_id; 149 __le16 resp_len; 150 u8 flags; 151 #define HWRM_DBG_CMN_FLAGS_MORE 1 152 }; 153 154 #define BNXT_DBG_FL_CR_DUMP_SIZE_SOC \ 155 DBG_QCFG_REQ_FLAGS_CRASHDUMP_SIZE_FOR_DEST_DEST_SOC_DDR 156 #define BNXT_DBG_FL_CR_DUMP_SIZE_HOST \ 157 DBG_QCFG_REQ_FLAGS_CRASHDUMP_SIZE_FOR_DEST_DEST_HOST_DDR 158 #define BNXT_DBG_CR_DUMP_MDM_CFG_DDR \ 159 DBG_CRASHDUMP_MEDIUM_CFG_REQ_TYPE_DDR 160 161 void bnxt_fill_coredump_seg_hdr(struct bnxt *bp, 162 struct bnxt_coredump_segment_hdr *seg_hdr, 163 struct coredump_segment_record *seg_rec, 164 u32 seg_len, int status, u32 duration, 165 u32 instance, u32 comp_id, u32 seg_id); 166 int bnxt_get_coredump(struct bnxt *bp, u16 dump_type, void *buf, u32 *dump_len); 167 int bnxt_hwrm_get_dump_len(struct bnxt *bp, u16 dump_type, u32 *dump_len); 168 u32 bnxt_get_coredump_length(struct bnxt *bp, u16 dump_type); 169 170 #endif 171