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
17struct 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
34struct 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#define BNXT_CRASH_DUMP_LEN (8 << 20)
72
73#define COREDUMP_LIST_BUF_LEN 2048
74#define COREDUMP_RETRIEVE_BUF_LEN 4096
75
76struct bnxt_coredump {
77 void *data;
78 int data_size;
79 u16 total_segs;
80};
81
82#define BNXT_COREDUMP_BUF_LEN(len) ((len) - sizeof(struct bnxt_coredump_record))
83
84struct bnxt_hwrm_dbg_dma_info {
85 void *dest_buf;
86 int dest_buf_size;
87 u16 dma_len;
88 u16 seq_off;
89 u16 data_len_off;
90 u16 segs;
91 u32 seg_start;
92 u32 buf_len;
93};
94
95struct hwrm_dbg_cmn_input {
96 __le16 req_type;
97 __le16 cmpl_ring;
98 __le16 seq_id;
99 __le16 target_id;
100 __le64 resp_addr;
101 __le64 host_dest_addr;
102 __le32 host_buf_len;
103};
104
105struct hwrm_dbg_cmn_output {
106 __le16 error_code;
107 __le16 req_type;
108 __le16 seq_id;
109 __le16 resp_len;
110 u8 flags;
111 #define HWRM_DBG_CMN_FLAGS_MORE 1
112};
113
114int bnxt_get_coredump(struct bnxt *bp, u16 dump_type, void *buf, u32 *dump_len);
115u32 bnxt_get_coredump_length(struct bnxt *bp, u16 dump_type);
116
117#endif
118

source code of linux/drivers/net/ethernet/broadcom/bnxt/bnxt_coredump.h