1 /* Broadcom NetXtreme-C/E network driver.
3 * Copyright (c) 2018 Broadcom Inc
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.
10 #ifndef BNXT_COREDUMP_H
11 #define BNXT_COREDUMP_H
13 #include <linux/utsname.h>
14 #include <linux/time.h>
15 #include <linux/rtc.h>
17 struct bnxt_coredump_segment_hdr
{
34 struct bnxt_coredump_record
{
50 char commandline
[256];
51 __le32 total_segments
;
65 __le32 coredump_status
;
66 __u8 ioctl_low_version
;
67 __u8 ioctl_high_version
;
71 struct bnxt_driver_segment_record
{
79 #define BNXT_VER_GET_COMP_ID 2
80 #define BNXT_DRV_COMP_ID 0xd
82 #define BNXT_CTX_MEM_SEG_ID_START 0x200
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)
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
106 #define BNXT_CRASH_DUMP_LEN (8 << 20)
108 #define COREDUMP_LIST_BUF_LEN 2048
109 #define COREDUMP_RETRIEVE_BUF_LEN 4096
111 #define BNXT_SEG_HDR_LEN sizeof(struct bnxt_coredump_segment_hdr)
112 #define BNXT_SEG_RCD_LEN sizeof(struct bnxt_driver_segment_record)
114 struct bnxt_coredump
{
120 #define BNXT_COREDUMP_BUF_LEN(len) ((len) - sizeof(struct bnxt_coredump_record))
122 struct bnxt_hwrm_dbg_dma_info
{
133 struct hwrm_dbg_cmn_input
{
139 __le64 host_dest_addr
;
143 struct hwrm_dbg_cmn_output
{
149 #define HWRM_DBG_CMN_FLAGS_MORE 1
152 #define BNXT_DBG_FL_CR_DUMP_SIZE_SOC \
153 DBG_QCFG_REQ_FLAGS_CRASHDUMP_SIZE_FOR_DEST_DEST_SOC_DDR
154 #define BNXT_DBG_FL_CR_DUMP_SIZE_HOST \
155 DBG_QCFG_REQ_FLAGS_CRASHDUMP_SIZE_FOR_DEST_DEST_HOST_DDR
156 #define BNXT_DBG_CR_DUMP_MDM_CFG_DDR \
157 DBG_CRASHDUMP_MEDIUM_CFG_REQ_TYPE_DDR
159 void bnxt_fill_coredump_seg_hdr(struct bnxt
*bp
,
160 struct bnxt_coredump_segment_hdr
*seg_hdr
,
161 struct coredump_segment_record
*seg_rec
,
162 u32 seg_len
, int status
, u32 duration
,
163 u32 instance
, u32 comp_id
, u32 seg_id
);
164 int bnxt_get_coredump(struct bnxt
*bp
, u16 dump_type
, void *buf
, u32
*dump_len
);
165 int bnxt_hwrm_get_dump_len(struct bnxt
*bp
, u16 dump_type
, u32
*dump_len
);
166 u32
bnxt_get_coredump_length(struct bnxt
*bp
, u16 dump_type
);