1 /******************************************************************************
2 *
3 * Copyright(c) 2019 Realtek Corporation.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 *****************************************************************************/
15 #define _HAL_API_EFUSE_C_
16 #include "hal_headers.h"
17 #include "efuse/hal_efuse_export.h"
18
19 /*WIFI Efuse*/
20 enum rtw_hal_status
rtw_hal_efuse_shadow_load(struct hal_info_t * hal_info,bool is_limit)21 rtw_hal_efuse_shadow_load(struct hal_info_t *hal_info, bool is_limit)
22 {
23 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
24
25 status = rtw_efuse_shadow_load(hal_info->efuse, is_limit);
26
27 return status;
28 }
29
30 enum rtw_hal_status
rtw_hal_efuse_shadow_update(struct hal_info_t * hal_info,bool is_limit)31 rtw_hal_efuse_shadow_update(struct hal_info_t *hal_info, bool is_limit)
32 {
33 enum rtw_hal_status status = RTW_HAL_STATUS_EFUSE_PG_FAIL;
34
35 status = rtw_efuse_shadow_update(hal_info->efuse, is_limit);
36
37 return status;
38 }
39
40 enum rtw_hal_status
rtw_hal_efuse_shadow_read(struct hal_info_t * hal_info,u8 byte_count,u16 offset,u32 * value,bool is_limit)41 rtw_hal_efuse_shadow_read(struct hal_info_t *hal_info, u8 byte_count,
42 u16 offset, u32 *value, bool is_limit)
43 {
44 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
45
46 status = rtw_efuse_shadow_read(hal_info->efuse, byte_count, offset, value,
47 is_limit);
48
49 return status;
50 }
51
52 enum rtw_hal_status
rtw_hal_efuse_shadow_write(struct hal_info_t * hal_info,u8 byte_count,u16 offset,u32 value,bool is_limit)53 rtw_hal_efuse_shadow_write(struct hal_info_t *hal_info, u8 byte_count,
54 u16 offset, u32 value, bool is_limit)
55 {
56 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
57
58 status = rtw_efuse_shadow_write(hal_info->efuse, byte_count, offset, value,
59 is_limit);
60 return status;
61 }
62
63 enum rtw_hal_status
rtw_hal_efuse_shadow2buf(struct hal_info_t * hal_info,u8 * pbuf,u16 buflen)64 rtw_hal_efuse_shadow2buf(struct hal_info_t *hal_info, u8 *pbuf, u16 buflen)
65 {
66 enum rtw_hal_status status = RTW_HAL_STATUS_SUCCESS;
67
68 status = rtw_efuse_shadow2buf(hal_info->efuse, pbuf, buflen);
69
70 return status;
71 }
72
rtw_hal_efuse_file_map_load(struct hal_info_t * hal_info,char * file_path,u8 is_limit)73 enum rtw_hal_status rtw_hal_efuse_file_map_load(
74 struct hal_info_t *hal_info, char *file_path, u8 is_limit)
75 {
76 enum rtw_hal_status hal_status = RTW_HAL_STATUS_FAILURE;
77
78 hal_status = rtw_efuse_file_map_load(hal_info->efuse, file_path ,is_limit);
79
80 return hal_status;
81 }
82
rtw_hal_efuse_file_mask_load(struct hal_info_t * hal_info,char * file_path,u8 is_limit)83 enum rtw_hal_status rtw_hal_efuse_file_mask_load(
84 struct hal_info_t *hal_info, char *file_path, u8 is_limit)
85 {
86 enum rtw_hal_status hal_status = RTW_HAL_STATUS_FAILURE;
87
88 hal_status = rtw_efuse_file_mask_load(hal_info->efuse, file_path, is_limit);
89
90 return hal_status;
91 }
92
93 /* usage = used percentage(1 Byte) + used bytes(2 Bytes) */
rtw_hal_efuse_get_usage(struct hal_info_t * hal_info,u32 * usage)94 enum rtw_hal_status rtw_hal_efuse_get_usage(struct hal_info_t *hal_info,
95 u32 *usage)
96 {
97 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
98
99 status = rtw_efuse_get_usage(hal_info->efuse, usage);
100
101 return status;
102 }
103
rtw_hal_efuse_get_logical_size(struct hal_info_t * hal_info,u32 * size)104 enum rtw_hal_status rtw_hal_efuse_get_logical_size(struct hal_info_t *hal_info,
105 u32 *size)
106 {
107 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
108
109 status = rtw_efuse_get_logical_size(hal_info->efuse, size, true);
110
111 return status;
112 }
113
rtw_hal_efuse_get_size(struct hal_info_t * hal_info,u32 * size)114 enum rtw_hal_status rtw_hal_efuse_get_size(struct hal_info_t *hal_info,
115 u32 *size)
116 {
117 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
118
119 status = rtw_efuse_get_size(hal_info->efuse, size);
120
121 return status;
122 }
123
rtw_hal_efuse_get_avl(struct hal_info_t * hal_info,u32 * size)124 enum rtw_hal_status rtw_hal_efuse_get_avl(struct hal_info_t *hal_info,
125 u32 *size)
126 {
127 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
128
129 status = rtw_efuse_get_avl(hal_info->efuse, size);
130
131 return status;
132 }
133
rtw_hal_efuse_get_shadowmap_from(struct hal_info_t * hal_info,u8 * val)134 enum rtw_hal_status rtw_hal_efuse_get_shadowmap_from(struct hal_info_t *hal_info,
135 u8 *val)
136 {
137 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
138
139 status = rtw_efuse_get_shadowmap_from(hal_info->efuse, val);
140
141 return status;
142 }
143
rtw_hal_efuse_get_offset_mask(struct hal_info_t * hal_info,u16 offset,u8 * mask)144 enum rtw_hal_status rtw_hal_efuse_get_offset_mask(struct hal_info_t *hal_info,
145 u16 offset, u8 *mask)
146 {
147 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
148
149 status = rtw_efuse_get_offset_mask(hal_info->efuse, offset, mask);
150
151 return status;
152 }
153
rtw_hal_efuse_get_mask_buf(struct hal_info_t * hal_info,u8 * destbuf,u32 * buflen)154 enum rtw_hal_status rtw_hal_efuse_get_mask_buf(struct hal_info_t *hal_info,
155 u8 *destbuf, u32 *buflen)
156 {
157 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
158
159 status = rtw_efuse_get_mask_buf(hal_info->efuse, destbuf, buflen);
160
161 return status;
162 }
163
164 enum rtw_hal_status
rtw_hal_efuse_get_info(struct rtw_hal_com_t * hal_com,enum rtw_efuse_info info_type,void * value,u8 size)165 rtw_hal_efuse_get_info(struct rtw_hal_com_t *hal_com,
166 enum rtw_efuse_info info_type,
167 void *value,
168 u8 size)
169 {
170 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
171 struct hal_info_t *hal_info = hal_com->hal_priv;
172
173 status = rtw_efuse_get_info(hal_info->efuse, info_type, value, size);
174
175 return status;
176 }
177
178 /* API export to PHL : rtw_hal_get_efuse_info */
179 enum rtw_hal_status
rtw_hal_get_efuse_info(void * hal,enum rtw_efuse_info info_type,void * value,u8 size)180 rtw_hal_get_efuse_info(void *hal,
181 enum rtw_efuse_info info_type,
182 void *value,
183 u8 size)
184 {
185 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
186 struct hal_info_t *hal_info = (struct hal_info_t *)hal;
187
188 status = rtw_efuse_get_info(hal_info->efuse, info_type, value, size);
189
190 return status;
191 }
192
rtw_hal_efuse_process(struct hal_info_t * hal_info,char * ic_name)193 void rtw_hal_efuse_process(struct hal_info_t *hal_info, char *ic_name)
194 {
195 rtw_efuse_process(hal_info->efuse, ic_name);
196 }
197
rtw_hal_efuse_init(struct rtw_phl_com_t * phl_com,struct hal_info_t * hal_info)198 enum rtw_hal_status rtw_hal_efuse_init(struct rtw_phl_com_t *phl_com,
199 struct hal_info_t *hal_info)
200 {
201 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
202 struct rtw_hal_com_t *hal_com = hal_info->hal_com;
203
204 status = rtw_efuse_init(phl_com, hal_com, &(hal_info->efuse));
205
206 return status;
207 }
208
rtw_hal_efuse_deinit(struct rtw_phl_com_t * phl_com,struct hal_info_t * hal_info)209 void rtw_hal_efuse_deinit(struct rtw_phl_com_t *phl_com,
210 struct hal_info_t *hal_info)
211 {
212 struct rtw_hal_com_t *hal_com = hal_info->hal_com;
213
214 rtw_efuse_deinit(hal_com, hal_info->efuse);
215 }
216
217
218 enum rtw_hal_status
rtw_hal_efuse_bt_shadow_load(struct hal_info_t * hal_info)219 rtw_hal_efuse_bt_shadow_load(struct hal_info_t *hal_info)
220 {
221 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
222
223 status = rtw_efuse_bt_shadow_load(hal_info->efuse);
224
225 return status;
226 }
227
228 enum rtw_hal_status
rtw_hal_efuse_bt_shadow_update(struct hal_info_t * hal_info)229 rtw_hal_efuse_bt_shadow_update(struct hal_info_t *hal_info)
230 {
231 enum rtw_hal_status status = RTW_HAL_STATUS_EFUSE_PG_FAIL;
232
233 status = rtw_efuse_bt_shadow_update(hal_info->efuse);
234
235 return status;
236 }
237
238 enum rtw_hal_status
rtw_hal_efuse_bt_shadow_read(struct hal_info_t * hal_info,u8 byte_count,u16 offset,u32 * value)239 rtw_hal_efuse_bt_shadow_read(struct hal_info_t *hal_info, u8 byte_count,
240 u16 offset, u32 *value)
241 {
242 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
243
244 status = rtw_efuse_bt_shadow_read(hal_info->efuse, byte_count, offset, value);
245
246 return status;
247 }
248
249 enum rtw_hal_status
rtw_hal_efuse_bt_shadow_write(struct hal_info_t * hal_info,u8 byte_count,u16 offset,u32 value)250 rtw_hal_efuse_bt_shadow_write(struct hal_info_t *hal_info, u8 byte_count,
251 u16 offset, u32 value)
252 {
253 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
254
255 status = rtw_efuse_bt_shadow_write(hal_info->efuse, byte_count, offset, value);
256 return status;
257 }
258
259
260 enum rtw_hal_status
rtw_hal_efuse_bt_shadow2buf(struct hal_info_t * hal_info,u8 * pbuf,u16 buflen)261 rtw_hal_efuse_bt_shadow2buf(struct hal_info_t *hal_info, u8 *pbuf, u16 buflen)
262 {
263 enum rtw_hal_status status = RTW_HAL_STATUS_SUCCESS;
264
265 status = rtw_efuse_bt_shadow2buf(hal_info->efuse, pbuf, buflen);
266
267 return status;
268 }
269
rtw_hal_efuse_bt_file_map_load(struct hal_info_t * hal_info,char * file_path)270 enum rtw_hal_status rtw_hal_efuse_bt_file_map_load(
271 struct hal_info_t *hal_info, char *file_path)
272 {
273 enum rtw_hal_status hal_status = RTW_HAL_STATUS_FAILURE;
274
275 hal_status = rtw_efuse_bt_file_map_load(hal_info->efuse, file_path);
276
277 return hal_status;
278 }
279
280
rtw_hal_efuse_bt_file_mask_load(struct hal_info_t * hal_info,char * file_path)281 enum rtw_hal_status rtw_hal_efuse_bt_file_mask_load(
282 struct hal_info_t *hal_info, char *file_path)
283 {
284 enum rtw_hal_status hal_status = RTW_HAL_STATUS_FAILURE;
285
286 hal_status = rtw_efuse_bt_file_mask_load(hal_info->efuse, file_path);
287
288 return hal_status;
289 }
290
291 /* usage = used percentage(1 Byte) + used bytes(2 Bytes) */
rtw_hal_efuse_bt_get_usage(struct hal_info_t * hal_info,u32 * usage)292 enum rtw_hal_status rtw_hal_efuse_bt_get_usage(struct hal_info_t *hal_info,
293 u32 *usage)
294 {
295 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
296
297 status = rtw_efuse_get_usage(hal_info->efuse, usage);
298
299 return status;
300 }
301
rtw_hal_efuse_bt_get_logical_size(struct hal_info_t * hal_info,u32 * size)302 enum rtw_hal_status rtw_hal_efuse_bt_get_logical_size(struct hal_info_t *hal_info,
303 u32 *size)
304 {
305 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
306
307 status = rtw_efuse_bt_get_logical_size(hal_info->efuse, size);
308
309 return status;
310 }
311
rtw_hal_efuse_bt_get_size(struct hal_info_t * hal_info,u32 * size)312 enum rtw_hal_status rtw_hal_efuse_bt_get_size(struct hal_info_t *hal_info,
313 u32 *size)
314 {
315 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
316
317 status = rtw_efuse_bt_get_size(hal_info->efuse, size);
318
319 return status;
320 }
321
rtw_hal_efuse_bt_get_avl(struct hal_info_t * hal_info,u32 * size)322 enum rtw_hal_status rtw_hal_efuse_bt_get_avl(struct hal_info_t *hal_info,
323 u32 *size)
324 {
325 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
326
327 status = rtw_efuse_bt_get_avl(hal_info->efuse, size);
328
329 return status;
330 }
331
332
rtw_hal_efuse_bt_get_offset_mask(struct hal_info_t * hal_info,u16 offset,u8 * mask)333 enum rtw_hal_status rtw_hal_efuse_bt_get_offset_mask(struct hal_info_t *hal_info,
334 u16 offset, u8 *mask)
335 {
336 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
337
338 status = rtw_efuse_bt_get_offset_mask(hal_info->efuse, offset, mask);
339
340 return status;
341 }
342
rtw_hal_efuse_bt_get_mask_buf(struct hal_info_t * hal_info,u8 * destbuf,u32 * buflen)343 enum rtw_hal_status rtw_hal_efuse_bt_get_mask_buf(struct hal_info_t *hal_info,
344 u8 *destbuf, u32 *buflen)
345 {
346 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
347
348 status = rtw_efuse_bt_get_mask_buf(hal_info->efuse, destbuf, buflen);
349
350 return status;
351 }
rtw_hal_efuse_bt_read_hidden(struct hal_info_t * hal_info,u32 addr,u32 size,u8 * val)352 enum rtw_hal_status rtw_hal_efuse_bt_read_hidden(
353 struct hal_info_t *hal_info, u32 addr, u32 size, u8 *val)
354 {
355 enum rtw_hal_status hal_status = RTW_HAL_STATUS_FAILURE;
356
357 hal_status = rtw_efuse_bt_read_hidden(hal_info->efuse, addr, size, val);
358
359 return hal_status;
360 }
361
rtw_hal_efuse_bt_write_hidden(struct hal_info_t * hal_info,u32 addr,u8 val)362 enum rtw_hal_status rtw_hal_efuse_bt_write_hidden(
363 struct hal_info_t *hal_info, u32 addr, u8 val)
364 {
365 enum rtw_hal_status hal_status = RTW_HAL_STATUS_FAILURE;
366
367 hal_status = rtw_efuse_bt_write_hidden(hal_info->efuse, addr, val);
368
369 return hal_status;
370 }
371
rtw_hal_efuse_read_phy_efuse(struct hal_info_t * hal_info,u32 addr,u32 size,u8 * data,u8 type)372 enum rtw_hal_status rtw_hal_efuse_read_phy_efuse(
373 struct hal_info_t *hal_info, u32 addr, u32 size, u8 *data, u8 type)
374 {
375 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
376
377 status = rtw_efuse_read_phy_wifi(hal_info->efuse, addr, size, data, type);
378
379 return status;
380 }
381
rtw_hal_efuse_renew(struct hal_info_t * hal_info,u8 type)382 enum rtw_hal_status rtw_hal_efuse_renew(
383 struct hal_info_t *hal_info, u8 type)
384 {
385 enum rtw_hal_status status = RTW_HAL_STATUS_FAILURE;
386
387 status = rtw_efuse_renew(hal_info->efuse, type);
388
389 return status;
390 }
391
hal_efuse_dump_wifi_map(struct hal_info_t * hal_info,u32 * used_len,char * output,u32 * out_len)392 void hal_efuse_dump_wifi_map(
393 struct hal_info_t *hal_info,
394 u32 *used_len,
395 char *output,
396 u32 *out_len
397 )
398 {
399 void *d = hal_info->hal_com->drv_priv;
400 u32 _used_len = *used_len;
401 u32 _out_len = *out_len;
402 u32 map_len = 0;
403 u32 i = 0, j = 0;
404 u8 *buf = NULL;
405
406 rtw_efuse_get_logical_size(hal_info->efuse, &map_len, true);
407
408 if(map_len == 0){
409 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len,
410 _out_len - _used_len, "map length is 0!\n");
411 goto exit;
412 }
413
414 buf = _os_mem_alloc(d, map_len);
415
416 if(buf == NULL){
417 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len,
418 _out_len - _used_len, "Allocate buffer fail!\n");
419 goto exit;
420 }
421 rtw_efuse_shadow2buf(hal_info->efuse, buf, (u16)map_len);
422
423 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len, _out_len - _used_len,
424 "EFUSE Wifi shadow map from %s\n\n",
425 rtw_efuse_get_shadowmap_from_to_str(hal_info->efuse));
426
427 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len, _out_len - _used_len,
428 "%14s%-6s%-6s%-6s%-6s%-6s%-6s%-6s%-6s\n",
429 " ", "00", "02", "04", "06", "08", "0A", "0C", "0E");
430 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len, _out_len - _used_len,
431 "%14s%s\n",
432 " ", "================================================\n");
433 for(i = 0; i < map_len; i+=16){
434 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len,
435 _out_len - _used_len, "0x%08X%4s", i, "");
436 for(j = 0; j<16;j++){
437 if((i+j) >= map_len)
438 break;
439 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len,
440 _out_len - _used_len, "%02X ", buf[i+j]);
441 }
442 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len,
443 _out_len - _used_len, "\n");
444 }
445 if(buf)
446 _os_mem_free(d, buf, map_len);
447 exit:
448 *used_len = _used_len;
449 *out_len = _out_len;
450 }
451
hal_efuse_dump_wifi_logic_map(struct hal_info_t * hal_info,u32 * used_len,char * output,u32 * out_len)452 void hal_efuse_dump_wifi_logic_map(
453 struct hal_info_t *hal_info,
454 u32 *used_len,
455 char *output,
456 u32 *out_len
457 )
458 {
459 void *d = hal_info->hal_com->drv_priv;
460 u32 _used_len = *used_len;
461 u32 _out_len = *out_len;
462 u32 map_len = 0;
463 u32 i = 0, j = 0;
464 u8 *data = NULL;
465
466 rtw_efuse_get_logical_size(hal_info->efuse, &map_len, true);
467
468 if(map_len == 0){
469 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len,
470 _out_len - _used_len, "map length is 0!\n");
471 goto exit;
472 }
473
474 data = _os_mem_alloc(d, map_len);
475
476 if(data == NULL){
477 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len,
478 _out_len - _used_len, "Allocate buffer fail!\n");
479 goto exit;
480 }
481
482 rtw_efuse_logicmap_buf_load(hal_info->efuse, data, false);
483
484 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len, _out_len - _used_len,
485 "EFUSE Wifi map from HW\n");
486
487 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len, _out_len - _used_len,
488 "%14s%-6s%-6s%-6s%-6s%-6s%-6s%-6s%-6s\n",
489 " ", "00", "02", "04", "06", "08", "0A", "0C", "0E");
490 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len, _out_len - _used_len,
491 "%14s%s\n",
492 " ", "================================================\n");
493 for(i = 0; i < map_len; i+=16){
494 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len,
495 _out_len - _used_len, "0x%08X%4s", i, "");
496 for(j = 0; j<16;j++){
497 if((i+j) >= map_len)
498 break;
499 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len,
500 _out_len - _used_len, "%02X ", data[i+j]);
501 }
502 PHL_DBG_OUTBUF(_out_len, _used_len, output + _used_len,
503 _out_len - _used_len, "\n");
504 }
505 if(data)
506 _os_mem_free(d, data, map_len);
507 exit:
508 *used_len = _used_len;
509 *out_len = _out_len;
510 }
511
hal_efuse_cmd_parser(struct hal_info_t * hal_info,char input[][MAX_ARGV],u32 input_num,char * output,u32 out_len)512 void hal_efuse_cmd_parser(
513 struct hal_info_t *hal_info,
514 char input[][MAX_ARGV],
515 u32 input_num,
516 char *output,
517 u32 out_len
518 )
519 {
520 u32 hal_cmd_ary_size = sizeof(hal_efuse_cmd_i) / sizeof(struct hal_cmd_info);
521 u32 i = 0;
522 u8 id = 0;
523 u32 used = 0;
524
525 PHL_DBG_OUTBUF(out_len, used, output + used, out_len - used, "\n");
526
527 if (hal_cmd_ary_size == 0)
528 return;
529
530 /* Parsing Cmd ID */
531 if (input_num) {
532 for (i = 0; i < hal_cmd_ary_size; i++) {
533 if (_os_strcmp(hal_efuse_cmd_i[i].name, input[0]) == 0) {
534 id = hal_efuse_cmd_i[i].id;
535 PHL_INFO("enter EFUSE cmd %s\n", hal_efuse_cmd_i[i].name);
536 break;
537 }
538 }
539 if (i == hal_cmd_ary_size) {
540 PHL_DBG_OUTBUF(out_len, used, output + used,
541 out_len - used,
542 "EFUSE command not found!\n");
543 return;
544 }
545 }
546
547 switch (id) {
548 case HAL_EFUSE_HELP:
549 PHL_DBG_OUTBUF(out_len, used, output + used,
550 out_len - used,
551 "EFUSE cmd =>\n");
552 for (i = 0; i < hal_cmd_ary_size - 1; i++)
553 PHL_DBG_OUTBUF(out_len, used, output + used,
554 out_len - used," %s\n", hal_efuse_cmd_i[i].name);
555 break;
556 case HAL_EFUSE_WIFI_DUMP_MAP:
557 hal_efuse_dump_wifi_map(hal_info, &used, output, &out_len);
558 break;
559 case HAL_EFUSE_WIFI_LOGIC_DUMP_MAP:
560 hal_efuse_dump_wifi_logic_map(hal_info, &used, output, &out_len);
561 break;
562 default:
563 PHL_DBG_OUTBUF(out_len, used, output + used,
564 out_len - used,"Do not support this command\n");
565 break;
566 }
567 }
568
hal_efuse_cmd(struct hal_info_t * hal_info,char * input,char * output,u32 out_len)569 s32 hal_efuse_cmd(
570 struct hal_info_t *hal_info,
571 char *input,
572 char *output,
573 u32 out_len
574 )
575 {
576 char *token;
577 u32 argc = 0;
578 char argv[MAX_ARGC][MAX_ARGV];
579
580 do {
581 token = _os_strsep(&input, ", ");
582 if (token) {
583 if (_os_strlen((u8*)token) <= MAX_ARGV)
584 _os_strcpy(argv[argc], token);
585
586 argc++;
587 } else {
588 break;
589 }
590 } while (argc < MAX_ARGC);
591
592 hal_efuse_cmd_parser(hal_info, argv, argc, output, out_len);
593
594 return 0;
595 }
596
rtw_hal_efuse_proc_cmd(struct hal_info_t * hal_info,struct rtw_proc_cmd * incmd,char * output,u32 out_len)597 bool rtw_hal_efuse_proc_cmd(
598 struct hal_info_t *hal_info,
599 struct rtw_proc_cmd *incmd,
600 char *output,
601 u32 out_len
602 )
603 {
604 if(incmd->in_type == RTW_ARG_TYPE_BUF)
605 hal_efuse_cmd(hal_info, incmd->in.buf, output, out_len);
606 else if(incmd->in_type == RTW_ARG_TYPE_ARRAY){
607 hal_efuse_cmd_parser(hal_info, incmd->in.vector,
608 incmd->in_cnt_len, output, out_len);
609 }
610
611 return true;
612 }