This source file includes following definitions.
- iwl_fw_runtime_free
- iwl_fw_set_current_image
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 #ifndef __iwl_fw_runtime_h__
61 #define __iwl_fw_runtime_h__
62
63 #include "iwl-config.h"
64 #include "iwl-trans.h"
65 #include "img.h"
66 #include "fw/api/debug.h"
67 #include "fw/api/paging.h"
68 #include "iwl-eeprom-parse.h"
69
70 struct iwl_fw_runtime_ops {
71 int (*dump_start)(void *ctx);
72 void (*dump_end)(void *ctx);
73 bool (*fw_running)(void *ctx);
74 int (*send_hcmd)(void *ctx, struct iwl_host_cmd *host_cmd);
75 bool (*d3_debug_enable)(void *ctx);
76 };
77
78 #define MAX_NUM_LMAC 2
79 struct iwl_fwrt_shared_mem_cfg {
80 int num_lmacs;
81 int num_txfifo_entries;
82 struct {
83 u32 txfifo_size[TX_FIFO_MAX_NUM];
84 u32 rxfifo1_size;
85 } lmac[MAX_NUM_LMAC];
86 u32 rxfifo2_size;
87 u32 internal_txfifo_addr;
88 u32 internal_txfifo_size[TX_FIFO_INTERNAL_MAX_NUM];
89 };
90
91 #define IWL_FW_RUNTIME_DUMP_WK_NUM 5
92
93
94
95
96
97
98
99
100 struct iwl_txf_iter_data {
101 int fifo;
102 int lmac;
103 u32 fifo_size;
104 u8 internal_txf;
105 };
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122 struct iwl_fw_runtime {
123 struct iwl_trans *trans;
124 const struct iwl_fw *fw;
125 struct device *dev;
126
127 const struct iwl_fw_runtime_ops *ops;
128 void *ops_ctx;
129
130
131 struct iwl_fw_paging fw_paging_db[NUM_OF_FW_PAGING_BLOCKS];
132 u16 num_of_paging_blk;
133 u16 num_of_pages_in_last_blk;
134
135 enum iwl_ucode_type cur_fw_img;
136
137
138 struct iwl_fwrt_shared_mem_cfg smem_cfg;
139
140
141 struct {
142 const struct iwl_fw_dump_desc *desc;
143 bool monitor_only;
144 struct {
145 u8 idx;
146 enum iwl_fw_ini_trigger_id ini_trig_id;
147 struct delayed_work wk;
148 } wks[IWL_FW_RUNTIME_DUMP_WK_NUM];
149 unsigned long active_wks;
150
151 u8 conf;
152
153
154 unsigned long non_collect_ts_start[IWL_FW_TRIGGER_ID_NUM];
155 u32 *d3_debug_data;
156 struct iwl_fw_ini_region_cfg *active_regs[IWL_FW_INI_MAX_REGION_ID];
157 struct iwl_fw_ini_active_triggers active_trigs[IWL_FW_TRIGGER_ID_NUM];
158 u32 lmac_err_id[MAX_NUM_LMAC];
159 u32 umac_err_id;
160
161 struct iwl_txf_iter_data txf_iter_data;
162
163 u8 img_name[IWL_FW_INI_MAX_IMG_NAME_LEN];
164 u8 internal_dbg_cfg_name[IWL_FW_INI_MAX_DBG_CFG_NAME_LEN];
165 u8 external_dbg_cfg_name[IWL_FW_INI_MAX_DBG_CFG_NAME_LEN];
166
167 struct {
168 u8 type;
169 u8 subtype;
170 u32 lmac_major;
171 u32 lmac_minor;
172 u32 umac_major;
173 u32 umac_minor;
174 } fw_ver;
175 } dump;
176 #ifdef CONFIG_IWLWIFI_DEBUGFS
177 struct {
178 struct delayed_work wk;
179 u32 delay;
180 u64 seq;
181 } timestamp;
182 #endif
183 };
184
185 void iwl_fw_runtime_init(struct iwl_fw_runtime *fwrt, struct iwl_trans *trans,
186 const struct iwl_fw *fw,
187 const struct iwl_fw_runtime_ops *ops, void *ops_ctx,
188 struct dentry *dbgfs_dir);
189
190 static inline void iwl_fw_runtime_free(struct iwl_fw_runtime *fwrt)
191 {
192 int i;
193
194 kfree(fwrt->dump.d3_debug_data);
195 fwrt->dump.d3_debug_data = NULL;
196
197 for (i = 0; i < IWL_FW_TRIGGER_ID_NUM; i++) {
198 struct iwl_fw_ini_active_triggers *active =
199 &fwrt->dump.active_trigs[i];
200
201 active->active = false;
202 active->size = 0;
203 kfree(active->trig);
204 active->trig = NULL;
205 }
206
207 iwl_dbg_tlv_del_timers(fwrt->trans);
208 for (i = 0; i < IWL_FW_RUNTIME_DUMP_WK_NUM; i++)
209 cancel_delayed_work_sync(&fwrt->dump.wks[i].wk);
210 }
211
212 void iwl_fw_runtime_suspend(struct iwl_fw_runtime *fwrt);
213
214 void iwl_fw_runtime_resume(struct iwl_fw_runtime *fwrt);
215
216 static inline void iwl_fw_set_current_image(struct iwl_fw_runtime *fwrt,
217 enum iwl_ucode_type cur_fw_img)
218 {
219 fwrt->cur_fw_img = cur_fw_img;
220 }
221
222 int iwl_init_paging(struct iwl_fw_runtime *fwrt, enum iwl_ucode_type type);
223 void iwl_free_fw_paging(struct iwl_fw_runtime *fwrt);
224
225 void iwl_get_shared_mem_conf(struct iwl_fw_runtime *fwrt);
226
227 #endif