1 /*
2 * Copyright (C) 2021 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 */
18 #include "drv_hdmi_debug.h"
19 #ifndef HDMI_LITEOS_SUPPORT
20 #include <linux/errno.h>
21 #include <linux/kernel.h>
22 #include <linux/fs.h>
23 #include <linux/file.h>
24 #include <linux/major.h>
25 #include <asm/uaccess.h>
26 #endif
27 #include "drv_hdmi_common.h"
28 #include "drv_hdmi_intf.h"
29 #include "drv_hdmi_event.h"
30 #include "drv_hdmi_edid.h"
31 #include "drv_hdmi_common.h"
32 #include "drv_hdmi_frl.h"
33 #include "hdmi_osal.h"
34 #include "drv_hdmi_compatibility.h"
35 #ifdef HDMI_FRL_SUPPORT
36 #include "hdmi_hal_timer.h"
37 #endif
38
39 #define DEBUG_MAX_CMD_CHAR_NUM 128
40 #define DEBUG_MAX_ARGV_NUM 10
41 #define DEBUG_CHAR_SPACE 0x20
42 #define DEBUG_CHAR_TAB 0x09
43 #define DEBUG_CHAR_END 0x0a
44 #define DEBUG_MAX_EDIDBUF_SIZE 1024
45 #define DEBUG_PROC_BUFFER_SIZE 1024
46 #define SERIAL_MAJOR 204
47 #define DEBUG_FRL_CTRL_TYPE_MAX 0x3
48 #define STR_SUCC "success"
49 #define STR_FAIL "fail"
50 #define DEBUG_CMD_ARGC_COUNT_1 2
51 #define DEBUG_CMD_ARGC_COUNT_2 3
52 #define DEBUG_CMD_ARGC_COUNT_3 4
53 #define DEBUG_MAX_DATA_SIZE 5000
54 #define DEBUG_TIME_TEST_MAX 10
55 #define SCDC_SET_WAIT 90
56 #define SCDC_GET_WAIT 3000
57 #define FRL_CRC_WAIT 1000
58 #define FRL_WAIT 50
59 #define DEBUG_MAX_FRL_TIME 5000
60 #define DEBUG_NUM_2 2
61 #define DEBUG_NUM_3 3
62 #define DEBUG_NUM_5 5
63 #define DEBUG_NUM_8 8
64 #define DEBUG_THOUSAND 1000
65 #define DEBUG_RC_MAX 4
66
67 #ifndef tolower
68 #define tolower(x) ((x) | 0x20)
69 #endif
70
71 #define hdmi_dbg_err(param...) \
72 do { \
73 hdmi_dbg_print("[HDMI DBG ERROR]: %s [%u],", __func__, (hi_u32)__LINE__); \
74 hdmi_dbg_print(param); \
75 } while (0)
76
77 #define debug_null_check_return(p) \
78 do { \
79 if ((p) == HI_NULL) { \
80 hdmi_warn("%s null pointer!\n", #p); \
81 hdmi_dbg_err("%s null pointer!\n", #p); \
82 return HI_FAILURE; \
83 } \
84 } while (0)
85
86 #define debug_failure_check_return(ret) \
87 do { \
88 if ((ret) != HI_SUCCESS) { \
89 hdmi_warn("return failure!\n"); \
90 hdmi_dbg_err("return failure!\n"); \
91 return HI_FAILURE; \
92 } \
93 } while (0)
94
95 typedef struct {
96 hi_bool data_valid;
97 hi_s32 len;
98 hi_u8 data[HDMI_EDID_TOTAL_SIZE];
99 } hdmi_debug_edid;
100
101 static hdmi_debug_edid g_debug_edid = {0};
102
103 static const char *g_event_str_table[] = {
104 "HPD", // HDMI_EVENT_HOTPLUG 0x10
105 "HOTUNPLUG", // HDMI_EVENT_HOTUNPLUG
106 "EDID_FAIL", // HDMI_EVENT_EDID_FAIL
107 "HDCP_FAIL", // HDMI_EVENT_HDCP_FAIL
108 "HDCP_SUCCESS", // HDMI_EVENT_HDCP_SUCCESS
109 "RSEN_CONNECT", // HDMI_EVENT_RSEN_CONNECT
110 "RSEN_DISCONNECT", // HDMI_EVENT_RSEN_DISCONNECT
111 "HDCP_USERSETTING", // HDMI_EVENT_HDCP_USERSETTING
112 "HDCP_OFF", // HDMI_EVENT_HDCP_OFF
113 "SCRAMBLE_FAIL", // HDMI_EVENT_SCRAMBLE_FAIL
114 "SCRAMBLE_SUCCESS", // HDMI_EVENT_SCRAMBLE_SUCCESS
115 "ZERO_DRM_TIMEOUT", // HDMI_EVENT_ZERO_DRMIF_TIMEOUT
116 "HDR_SWITCH_TIMEOUT" // HDMI_EVENT_SWITCH_TO_HDRMODE_TIMEOUT
117 };
118
119 typedef struct {
120 hi_u32 ddc_reg_cfg;
121 hi_u32 approximate_value;
122 hi_char *read_value;
123 } hdmi_ddc_freq;
124
125 hdmi_ddc_freq g_ddc_freq[] = {
126 { 0x45, 20, " 19.89" },
127 { 0x29, 30, " 29.97" },
128 { 0x21, 40, " 40.06" },
129 { 0x1a, 50, " 49.90" },
130 { 0x15, 60, " 60.53" },
131 { 0x12, 70, " 69.42" },
132 { 0x0f, 80, " 81.38" },
133 { 0x0d, 90, " 91.87" },
134 { 0x0c, 100, " 98.11" },
135 { 0x0a, 110, "113.78" },
136 { 0x07, 150, "149.85" },
137 { 0x04, 220, "219.43" }
138 };
139
140 #ifdef HDMI_FRL_SUPPORT
141 static hi_u32 g_timer_test;
142 #endif
143
144 typedef enum {
145 HDMI_DEBUG_BASE_OSD = 8,
146 HDMI_DEBUG_BASE_DEC = 10,
147 HDMI_DEBUG_BASE_HEX = 16
148 } hdmi_debug_base;
149
150 typedef struct {
151 hdmi_device_id hdmi_id;
152 hi_char *argv[DEBUG_MAX_ARGV_NUM];
153 hi_u32 argc;
154 hi_u32 remain_len;
155 } hdmi_debug_cmd_arg;
156
157 typedef hi_s32 (*cmd_func)(hdmi_debug_cmd_arg *cmd_arg);
158
159 typedef struct {
160 hi_char *name;
161 hi_char *short_name;
162 cmd_func fn_cmd_func;
163 hi_char *comment_help;
164 } hdmi_debug_cmd_info;
165
166 static hi_s32 debug_print_help(hdmi_debug_cmd_arg *cmd_arg);
167
debug_echo_helper_vargs(hi_char * buf,hi_u32 size,const hi_char * fmt,osal_va_list args)168 static hi_void debug_echo_helper_vargs(hi_char *buf, hi_u32 size, const hi_char *fmt, osal_va_list args)
169 {
170 #define DEFAULT_ECHO_DEVICE_HANDLE 0
171
172 hi_s32 ret;
173 struct kstat stat = {0};
174
175 if (size == 0) {
176 return;
177 }
178
179 ret = vfs_fstat(DEFAULT_ECHO_DEVICE_HANDLE, &stat);
180 if (ret) {
181 hdmi_err("default echo device handle(%u) invalid!\n", DEFAULT_ECHO_DEVICE_HANDLE);
182 return;
183 }
184
185 ret = vsnprintf_s(buf, size, size - 1, fmt, args);
186 if (ret < 0) {
187 hdmi_err("vsnprintf_s err\n");
188 return;
189 }
190
191 /* echo device must be chrdev and major number must be SERIAL_MAJOR or TTYAUX_MAJOR or UNIX98_PTY_SLAVE_MAJOR */
192 if (S_ISCHR(stat.mode) &&
193 (MAJOR(stat.rdev) == SERIAL_MAJOR || MAJOR(stat.rdev) == TTYAUX_MAJOR ||
194 MAJOR(stat.rdev) == UNIX98_PTY_SLAVE_MAJOR)) {
195 struct file *f = fget(DEFAULT_ECHO_DEVICE_HANDLE);
196 if (f != HI_NULL) {
197 /* file pos is invalid for chrdev */
198 hdmi_osal_file_write(f, buf, osal_strlen(buf));
199 fput(f);
200 }
201 } else {
202 hdmi_err("default echo device is invalid!\n");
203 }
204 }
205
hdmi_dbg_print(const hi_char * fmt,...)206 static hi_void hdmi_dbg_print(const hi_char *fmt, ...)
207 {
208 osal_va_list args;
209 hi_char *buf = HI_NULL;
210
211 if (fmt == HI_NULL) {
212 hdmi_err("invalid argument fmt!\n");
213 return;
214 }
215 buf = osal_vmalloc(DEBUG_PROC_BUFFER_SIZE);
216 if (buf == HI_NULL) {
217 hdmi_err("memory allocate failed for proc\n");
218 return;
219 }
220 (hi_void)memset_s(buf, DEBUG_PROC_BUFFER_SIZE, 0, DEBUG_PROC_BUFFER_SIZE);
221
222 osal_va_start(args, fmt);
223 debug_echo_helper_vargs(buf, DEBUG_PROC_BUFFER_SIZE, fmt, args);
224 osal_va_end(args);
225
226 osal_vfree(buf);
227 buf = HI_NULL;
228 }
229
is_hex_space(hi_char a)230 static hi_bool is_hex_space(hi_char a)
231 {
232 hi_bool is_space = HI_FALSE;
233 is_space = (a == DEBUG_CHAR_SPACE || a == DEBUG_CHAR_TAB ||
234 a == ',' || a == ';' || a == '\0' || a == '\n' || a == '\r');
235 return is_space;
236 }
237
is_hex_char(hi_char a)238 static hi_bool is_hex_char(hi_char a)
239 {
240 hi_bool is_char = HI_FALSE;
241 is_char = ((a >= '0' && a <= '9') || (a >= 'a' && a <= 'f') || (a >= 'A' && a <= 'F'));
242 return is_char;
243 }
244
hex_value_get(hi_char a)245 static hi_u8 hex_value_get(hi_char a)
246 {
247 if ((a >= '0' && a <= '9')) {
248 return a - '0';
249 } else if (a >= 'a' && a <= 'f') {
250 return a - 'a' + 0xa;
251 } else if (a >= 'A' && a <= 'F') {
252 return a - 'A' + 0xa;
253 } else {
254 return 0xff;
255 }
256 }
257
is_hex_start(hi_char * p,hi_char ** end)258 static hi_bool is_hex_start(hi_char *p, hi_char **end)
259 {
260 debug_null_check_return(p);
261
262 if (*p == '0' && (p[1] == 'x' || p[1] == 'X')) {
263 if (end != HI_NULL) {
264 *end = p + 2; /* P + 2, mean 16 hex value addr */
265 }
266
267 return HI_TRUE;
268 } else if (is_hex_char(p[0]) && (is_hex_space(p[1]) || (is_hex_char(p[1]) && is_hex_space(p[2])))) {
269 if (end != HI_NULL) {
270 *end = p;
271 }
272 return HI_TRUE;
273 } else {
274 if (end != HI_NULL) {
275 *end = p;
276 }
277 return HI_FALSE;
278 }
279 }
280
debug_str_to_hex(hi_char * dest,hi_s32 dlen,hi_char * src,hi_u32 slen)281 static hi_s32 debug_str_to_hex(hi_char *dest, hi_s32 dlen, hi_char *src, hi_u32 slen)
282 {
283 hi_u8 result;
284 hi_char *p = src;
285 hi_s32 old_len = dlen;
286
287 while (p < (src + slen) && dlen) {
288 if (is_hex_start(p, &p) == HI_FALSE) {
289 p++;
290 continue;
291 }
292 if (is_hex_char(p[0]) == HI_FALSE) {
293 return HI_FAILURE;
294 }
295 result = hex_value_get(p[0]);
296 p++;
297 if (is_hex_char(p[0])) {
298 result <<= 4; /* 4, means get the high 8 bit data of 16 bit data */
299 result |= hex_value_get(p[0]);
300 p++;
301 }
302
303 if (dest != HI_NULL) {
304 *dest++ = result;
305 dlen--;
306 }
307 }
308
309 return old_len - dlen;
310 }
311
debug_base_get(const hi_char * str)312 static hdmi_debug_base debug_base_get(const hi_char *str)
313 {
314 if (str[0] == '0') {
315 if (tolower((hi_u32)str[1]) == 'x') {
316 return HDMI_DEBUG_BASE_HEX;
317 }
318 return HDMI_DEBUG_BASE_OSD;
319 }
320 return HDMI_DEBUG_BASE_DEC;
321 }
322
debug_str_to_u32(const hi_char * str,hi_char ** end,hdmi_debug_base base)323 static hi_u32 debug_str_to_u32(const hi_char *str, hi_char **end, hdmi_debug_base base)
324 {
325 hi_u32 result = 0;
326
327 debug_null_check_return(str);
328
329 if (base != HDMI_DEBUG_BASE_OSD && base != HDMI_DEBUG_BASE_DEC && base != HDMI_DEBUG_BASE_HEX) {
330 base = debug_base_get(str);
331 }
332
333 if (base == HDMI_DEBUG_BASE_HEX && str[0] == '0' && tolower((hi_u8)str[1]) == 'x') {
334 str += 2; /* str + 2, mean 16 hex value addr */
335 }
336
337 while (*str) {
338 hi_u32 value;
339
340 value = ((*str >= '0') && (*str <= '9')) ?
341 *str - '0' : tolower((hi_u8)(*str)) - 'a' + 10; /* value size of 10 - 15 */
342 if (value >= base) {
343 break;
344 }
345 result = result * base + value;
346 str++;
347 }
348 if (end != HI_NULL) {
349 *end = (hi_char *)str;
350 }
351
352 return result;
353 }
354
debug_file_open(const char * filename,int flags,int mode)355 static struct file *debug_file_open(const char *filename, int flags, int mode)
356 {
357 return osal_klib_fopen(filename, flags, mode);
358 }
359
debug_file_close(struct file * filp)360 static void debug_file_close(struct file *filp)
361 {
362 if (filp != HI_NULL) {
363 osal_klib_fclose(filp);
364 }
365 }
366
debug_file_read(char * buf,unsigned int len,struct file * filp)367 static int debug_file_read(char *buf, unsigned int len, struct file *filp)
368 {
369 int readlen;
370 /* use osal public interface. */
371 readlen = osal_klib_fread(buf, len, filp);
372 return readlen;
373 }
374
debug_thread(hdmi_debug_cmd_arg * cmd_arg)375 static hi_s32 debug_thread(hdmi_debug_cmd_arg *cmd_arg)
376 {
377 hi_s32 ret = HI_FAILURE;
378 hdmi_device *hdmi_dev = HI_NULL;
379
380 debug_null_check_return(cmd_arg);
381 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
382 debug_null_check_return(hdmi_dev);
383
384 if (cmd_arg->argc != DEBUG_CMD_ARGC_COUNT_1 || cmd_arg->argv[1] == HI_NULL) {
385 hdmi_dbg_err("error argcs!\n");
386 goto usage_error;
387 }
388
389 if (is_str_equal(cmd_arg->argv[1], "0")) {
390 ret = get_hdmi_thread_state_set(hdmi_dev, HDMI_THREAD_STATE_STOP);
391 hdmi_dbg_print("\n thread set OFF %s! \n\n", ret != HI_SUCCESS ? STR_FAIL : STR_SUCC);
392 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
393 ret = get_hdmi_thread_state_set(hdmi_dev, HDMI_THREAD_STATE_RUN);
394 hdmi_dbg_print("\n thread set ON %s! \n\n", ret != HI_SUCCESS ? STR_FAIL : STR_SUCC);
395 } else {
396 hdmi_dbg_err("error argvs!\n");
397 goto usage_error;
398 }
399
400 return ret;
401
402 usage_error:
403 hdmi_dbg_print("[usage ]: echo thread argv1 > /proc/umap/hdmi0\n");
404 hdmi_dbg_print("[argv1 ]: 0\t--thread off.\n"
405 " 1\t--thread on.\n");
406 hdmi_dbg_print("[example]: echo thread 1 > /proc/umap/hdmi0 \n");
407
408 return HI_FAILURE;
409 }
410
debug_oe(hdmi_debug_cmd_arg * cmd_arg)411 static hi_s32 debug_oe(hdmi_debug_cmd_arg *cmd_arg)
412 {
413 hdmi_device *hdmi_dev = HI_NULL;
414 hdmi_black_frame_info black_info = {0};
415
416 debug_null_check_return(cmd_arg);
417 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
418 debug_null_check_return(hdmi_dev);
419
420 if (cmd_arg->argc != DEBUG_CMD_ARGC_COUNT_1 || cmd_arg->argv[1] == HI_NULL) {
421 hdmi_dbg_err("error argcs!\n");
422 goto usage_error;
423 }
424
425 black_info.in_bit_depth = hdmi_dev->attr.vo_attr.in_bit_depth;
426 black_info.in_color_space = hdmi_dev->attr.vo_attr.in_color_space;
427 black_info.in_quantization = (black_info.in_color_space == HDMI_COLORSPACE_RGB) ?
428 hdmi_dev->attr.vo_attr.rgb_quantization : hdmi_dev->attr.vo_attr.ycc_quantization;
429
430 if (is_str_equal(cmd_arg->argv[1], "0")) {
431 hal_call_void(hal_hdmi_phy_output_enable_set, hdmi_dev->hal, HI_FALSE);
432 hdmi_dbg_print("\n oe set OFF %s! \n\n", STR_SUCC);
433 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
434 hal_call_void(hal_hdmi_phy_output_enable_set, hdmi_dev->hal, HI_TRUE);
435 hdmi_dbg_print("\n oe set ON %s! \n\n", STR_SUCC);
436 } else {
437 hdmi_dbg_err("error argvs!\n");
438 goto usage_error;
439 }
440
441 return HI_SUCCESS;
442
443 usage_error:
444 hdmi_dbg_print("[usage ]: echo oe argv1 > /proc/umap/hdmi0 \n");
445 hdmi_dbg_print("[argv1 ]: 0\t--oe off.\n"
446 " 1\t--oe on.\n");
447 hdmi_dbg_print("[example]: echo oe 1 > /proc/umap/hdmi0 \n");
448
449 return HI_FAILURE;
450 }
451
debug_event(hdmi_debug_cmd_arg * cmd_arg)452 static hi_s32 debug_event(hdmi_debug_cmd_arg *cmd_arg)
453 {
454 hi_s32 ret = HI_FAILURE;
455 hdmi_event event;
456 hdmi_device *hdmi_dev = HI_NULL;
457 hi_char *str = HI_NULL;
458
459 debug_null_check_return(cmd_arg);
460 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
461 debug_null_check_return(hdmi_dev);
462 debug_null_check_return(hdmi_dev->hal);
463
464 str = cmd_arg->argv[1];
465
466 if (cmd_arg->argc != DEBUG_CMD_ARGC_COUNT_1 || str == HI_NULL) {
467 hdmi_dbg_err("error argcs!\n");
468 goto usage_error;
469 }
470
471 event = (hdmi_event)debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
472 if ((event >= HDMI_EVENT_HOTPLUG) &&
473 (event < HDMI_EVENT_BUTT)) {
474 ret = drv_hdmi_event_pool_write(cmd_arg->hdmi_id, event);
475 if ((event - HDMI_EVENT_HOTPLUG) < hdmi_array_size(g_event_str_table)) {
476 hdmi_dbg_print("hardware event %s simulate %s.\n",
477 g_event_str_table[event - HDMI_EVENT_HOTPLUG], ret != HI_SUCCESS ? STR_FAIL : STR_SUCC);
478 }
479 } else {
480 goto usage_error;
481 }
482
483 return ret;
484
485 usage_error:
486 hdmi_dbg_print("[usage ]: echo event argv1 > /proc/umap/hdmi0 \n");
487 hdmi_dbg_print("[argv1 ]: event type(DECMICAL) as follow\n");
488 for (event = HDMI_EVENT_HOTPLUG;
489 event < HDMI_EVENT_BUTT && ((event - HDMI_EVENT_HOTPLUG) < hdmi_array_size(g_event_str_table));
490 event++) {
491 hdmi_dbg_print("%-10s %u\t-- (0x%02x)%s\n", "", event, event,
492 g_event_str_table[event - HDMI_EVENT_HOTPLUG]);
493 }
494 hdmi_dbg_print("[example]: echo event 16 > /proc/umap/hdmi0 \n");
495
496 return HI_FAILURE;
497 }
498
debug_edid_from_file(hdmi_device * hdmi_dev,hdmi_debug_cmd_arg * cmd_arg)499 static hi_s32 debug_edid_from_file(hdmi_device *hdmi_dev, hdmi_debug_cmd_arg *cmd_arg)
500 {
501 struct file *f;
502 hi_u8 *buf = HI_NULL;
503 hi_s32 len = 0;
504 hdmi_debug_edid *dbg_edid = &g_debug_edid;
505
506 f = debug_file_open(cmd_arg->argv[2], OSAL_O_RDONLY, 0);
507 if (f == HI_NULL) {
508 hdmi_dbg_err("open file %s fail!\n", cmd_arg->argv[2]);
509 return HI_FAILURE;
510 }
511
512 buf = (hi_u8 *)osal_vmalloc(DEBUG_MAX_EDIDBUF_SIZE);
513 if (buf != HI_NULL) {
514 (hi_void)memset_s(buf, DEBUG_MAX_EDIDBUF_SIZE, 0, DEBUG_MAX_EDIDBUF_SIZE);
515 (hi_void)memset_s(dbg_edid, sizeof(hdmi_debug_edid), 0, sizeof(hdmi_debug_edid));
516 len = debug_file_read(buf, DEBUG_MAX_EDIDBUF_SIZE, f);
517 if (len <= 0) {
518 hdmi_dbg_print("read file size = %d!\n", len);
519 } else {
520 len = debug_str_to_hex(dbg_edid->data, HDMI_EDID_TOTAL_SIZE, buf, (hi_u32)len);
521 if (len < 0) {
522 hdmi_dbg_err("string convert to hex error!\n");
523 } else {
524 dbg_edid->data_valid = HI_TRUE;
525 dbg_edid->len += len;
526 drv_hdmi_edid_update(&hdmi_dev->edid_info, HDMI_EDID_UPDATE_DEBUG);
527 }
528 }
529 osal_vfree(buf);
530 buf = HI_NULL;
531 } else {
532 hdmi_dbg_err("vmalloc error!\n");
533 }
534 debug_file_close(f);
535
536 if (len < 0) {
537 hdmi_dbg_err("error hex raw data format!\n");
538 return HI_FAILURE;
539 }
540
541 return HI_SUCCESS;
542 }
543
print_raw_edid(hdmi_edid_info * edid_info)544 static hi_void print_raw_edid(hdmi_edid_info *edid_info)
545 {
546 hi_s32 i;
547 hi_s32 ret;
548 hi_u8 *buf = HI_NULL;
549
550 buf = (hi_u8 *)osal_vmalloc(HDMI_EDID_TOTAL_SIZE);
551 if (buf != HI_NULL) {
552 (hi_void)memset_s(buf, HDMI_EDID_TOTAL_SIZE, 0, HDMI_EDID_TOTAL_SIZE);
553 ret = drv_hdmi_edid_raw_get(edid_info, buf, HDMI_EDID_TOTAL_SIZE);
554 for (i = 0; (i < ret) && (i < HDMI_EDID_TOTAL_SIZE); i++) {
555 if (!(i % 16)) { /* each Line length of 16 characters */
556 hdmi_dbg_print("\n");
557 }
558 hdmi_dbg_print(" %02x", buf[i]);
559 }
560
561 hdmi_dbg_print("\n\n");
562 osal_vfree(buf);
563 } else {
564 hdmi_dbg_err("vmalloc fail!\n");
565 }
566
567 return;
568 }
569
debug_edid(hdmi_debug_cmd_arg * cmd_arg)570 static hi_s32 debug_edid(hdmi_debug_cmd_arg *cmd_arg)
571 {
572 hi_s32 ret = HI_FAILURE;
573 hdmi_device *hdmi_dev = HI_NULL;
574 hdmi_debug_edid *dbg_edid = &g_debug_edid;
575
576 debug_null_check_return(cmd_arg);
577 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
578 debug_null_check_return(hdmi_dev);
579 debug_null_check_return(hdmi_dev->hal);
580
581 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_1) {
582 hdmi_dbg_err("error argcs!\n");
583 goto usage_error;
584 }
585
586 debug_null_check_return(cmd_arg->argv[1]);
587
588 if (is_str_equal(cmd_arg->argv[1], "s") ||
589 is_str_equal(cmd_arg->argv[1], "0")) {
590 (hi_void)memset_s(dbg_edid, sizeof(hdmi_debug_edid), 0, sizeof(hdmi_debug_edid));
591 ret = drv_hdmi_edid_update(&hdmi_dev->edid_info, HDMI_EDID_UPDATE_SINK);
592 if (ret != HI_SUCCESS) {
593 hdmi_dbg_err("update edid from sink fail!make sure cable connect!\n");
594 }
595 } else if (is_str_equal(cmd_arg->argv[1], "f") ||
596 is_str_equal(cmd_arg->argv[1], "1")) {
597 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_2) {
598 hdmi_dbg_err("error argcs!\n");
599 goto usage_error;
600 }
601 debug_null_check_return(cmd_arg->argv[2]);
602 ret = debug_edid_from_file(hdmi_dev, cmd_arg);
603 debug_failure_check_return(ret);
604 } else {
605 hdmi_dbg_err("error argvs!\n");
606 goto usage_error;
607 }
608
609 hdmi_dbg_print(" edid load %s! \n", ret < 0 ? STR_FAIL : STR_SUCC);
610 hdmi_dbg_print("[edid data]:");
611 print_raw_edid(&hdmi_dev->edid_info);
612
613 return HI_SUCCESS;
614
615 usage_error:
616 hdmi_dbg_print("[usage ]: echo edid argv1 argv2 > /proc/umap/hdmi0\n");
617 hdmi_dbg_print("[argv1 ]: edid operation mode as below\n");
618 hdmi_dbg_print("%10s 0(s) --finish using debug edid and read from sink.\n", "");
619 hdmi_dbg_print("%10s 1(f) --read debug edid from argv2(a hex-string-file-path).\n", "");
620 hdmi_dbg_print("[argv2 ]: you have to use at least 1 character of 'SPACE|TAB|,|0x' between 2 hex-bytes.\n");
621 hdmi_dbg_print("[example]: echo edid s > /proc/umap/hdmi0 \n");
622 hdmi_dbg_print("[example]: echo edid f /mnt/edid_skyworth_300m.txt > /proc/umap/hdmi0 \n");
623
624 return HI_FAILURE;
625 }
626
debug_avmute(hdmi_debug_cmd_arg * cmd_arg)627 static hi_s32 debug_avmute(hdmi_debug_cmd_arg *cmd_arg)
628 {
629 hdmi_device *hdmi_dev = HI_NULL;
630
631 debug_null_check_return(cmd_arg);
632 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
633 debug_null_check_return(hdmi_dev);
634 debug_null_check_return(hdmi_dev->hal);
635
636 if (cmd_arg->argc != DEBUG_CMD_ARGC_COUNT_1 || cmd_arg->argv[1] == HI_NULL) {
637 hdmi_dbg_err("error argcs!\n");
638 goto usage_error;
639 }
640
641 if (is_str_equal(cmd_arg->argv[1], "0")) {
642 drv_hdmi_avmute_set(hdmi_dev, HI_FALSE);
643 hdmi_dbg_print("\n avmute set OFF %s! \n\n", STR_SUCC);
644 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
645 drv_hdmi_avmute_set(hdmi_dev, HI_TRUE);
646 hdmi_dbg_print("\n avmute set ON %s! \n\n", STR_SUCC);
647 } else {
648 hdmi_dbg_err("error argvs!\n");
649 goto usage_error;
650 }
651
652 return HI_SUCCESS;
653
654 usage_error:
655 hdmi_dbg_print("[usage ]: echo avmute argv1 > /proc/umap/hdmi0 \n");
656 hdmi_dbg_print("[argv1 ]: 0\t--avmute off.\n"
657 " 1\t--avmute on.\n");
658 hdmi_dbg_print("[example]: echo avmute 1 > /proc/umap/hdmi0 \n");
659
660 return HI_FAILURE;
661 }
662
debug_cbar(hdmi_debug_cmd_arg * cmd_arg)663 static hi_s32 debug_cbar(hdmi_debug_cmd_arg *cmd_arg)
664 {
665 hdmi_device *hdmi_dev = HI_NULL;
666 hi_bool enable = HI_FALSE;
667
668 debug_null_check_return(cmd_arg);
669 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
670 debug_null_check_return(hdmi_dev);
671
672 if (cmd_arg->argc != DEBUG_CMD_ARGC_COUNT_1 || cmd_arg->argv[1] == HI_NULL) {
673 hdmi_dbg_err("error argcs!\n");
674 goto usage_error;
675 }
676
677 if (is_str_equal(cmd_arg->argv[1], "0")) {
678 enable = HI_FALSE;
679 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_COLOR_BAR, &enable);
680 hdmi_dbg_print("\n color_bar is OFF %s! \n\n", STR_SUCC);
681 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
682 enable = HI_TRUE;
683 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_COLOR_BAR, &enable);
684 hdmi_dbg_print("\n color_bar is ON %s! \n\n", STR_SUCC);
685 } else {
686 hdmi_dbg_err("error argvs!\n");
687 goto usage_error;
688 }
689
690 return HI_SUCCESS;
691
692 usage_error:
693 hdmi_dbg_print("[usage ]: echo cbar argv1 > /proc/umap/hdmi0 \n");
694 hdmi_dbg_print("[argv1 ]: 0\t--colorbar off.\n"
695 " 1\t--colorbar on.\n");
696 hdmi_dbg_print("[example]: echo cbar 1 > /proc/umap/hdmi0 \n");
697
698 return HI_FAILURE;
699 }
700
701 #ifdef HDMI_SCDC_SUPPORT
debug_scdc_off(const hdmi_device * hdmi_dev,hdmi_scdc_status * status)702 static hi_s32 debug_scdc_off(const hdmi_device *hdmi_dev, hdmi_scdc_status *status)
703 {
704 status->source_scramble_on = HI_FALSE;
705 status->sink_scramble_on = HI_FALSE;
706 status->tmds_bit_clk_ratio = SCDC_TMDS_BIT_CLK_RATIO_10X;
707 hal_call_void(hal_hdmi_phy_output_enable_set, hdmi_dev->hal, HI_FALSE);
708
709 hal_call_void(hal_hdmi_scdc_status_set, hdmi_dev->hal, status);
710 osal_msleep(SCDC_SET_WAIT);
711 hal_call_void(hal_hdmi_phy_output_enable_set, hdmi_dev->hal, HI_TRUE);
712
713 (hi_void)memset_s(status, sizeof(hdmi_scdc_status), 0, sizeof(hdmi_scdc_status));
714 osal_msleep(SCDC_GET_WAIT);
715 hal_call_void(hal_hdmi_scdc_status_get, hdmi_dev->hal, status);
716 hdmi_dbg_print("\n scdc set OFF %s! \n\n",
717 (status->source_scramble_on == HI_FALSE) && (status->sink_scramble_on == HI_FALSE) &&
718 (status->tmds_bit_clk_ratio == SCDC_TMDS_BIT_CLK_RATIO_10X) ? STR_SUCC : STR_FAIL);
719
720 return HI_SUCCESS;
721 }
722
debug_scdc_on(const hdmi_device * hdmi_dev,hdmi_scdc_status * status)723 static hi_s32 debug_scdc_on(const hdmi_device *hdmi_dev, hdmi_scdc_status *status)
724 {
725 status->source_scramble_on = HI_TRUE;
726 status->sink_scramble_on = HI_TRUE;
727 status->tmds_bit_clk_ratio = SCDC_TMDS_BIT_CLK_RATIO_40X;
728 hal_call_void(hal_hdmi_phy_output_enable_set, hdmi_dev->hal, HI_FALSE);
729 hal_call_void(hal_hdmi_scdc_status_set, hdmi_dev->hal, status);
730 osal_msleep(SCDC_SET_WAIT);
731 hal_call_void(hal_hdmi_phy_output_enable_set, hdmi_dev->hal, HI_TRUE);
732
733 (hi_void)memset_s(status, sizeof(hdmi_scdc_status), 0, sizeof(hdmi_scdc_status));
734 osal_msleep(SCDC_GET_WAIT);
735 hal_call_void(hal_hdmi_scdc_status_get, hdmi_dev->hal, status);
736
737 hdmi_dbg_print("\n scdc set ON %s! \n\n", (status->source_scramble_on == HI_TRUE) &&
738 (status->sink_scramble_on == HI_TRUE) &&
739 (status->tmds_bit_clk_ratio == SCDC_TMDS_BIT_CLK_RATIO_40X) ? STR_SUCC : STR_FAIL);
740
741 return HI_SUCCESS;
742 }
743
debug_scdc_status_get(const hdmi_device * hdmi_dev,hdmi_scdc_status * status)744 static hi_s32 debug_scdc_status_get(const hdmi_device *hdmi_dev, hdmi_scdc_status *status)
745 {
746 hal_call_void(hal_hdmi_scdc_status_get, hdmi_dev->hal, status);
747 hdmi_dbg_print("scdc get source_scramble_on[%u] \n"
748 " sink_scramble_on[%u] \n"
749 " tmds_bit_clk_ratio[%u] \n\n",
750 status->source_scramble_on,
751 status->sink_scramble_on,
752 status->tmds_bit_clk_ratio);
753
754 return HI_SUCCESS;
755 }
756
757
758 #ifdef HDMI_FRL_SUPPORT
debug_scdc_read(const hdmi_device * hdmi_dev,const hdmi_debug_cmd_arg * cmd_arg,hi_u8 * value)759 static hi_s32 debug_scdc_read(const hdmi_device *hdmi_dev, const hdmi_debug_cmd_arg *cmd_arg, hi_u8 *value)
760 {
761 hi_u8 offset;
762 hi_s32 ret;
763 hi_char *debug_char = HI_NULL;
764
765 debug_char = cmd_arg->argv[2];
766 debug_null_check_return(debug_char);
767 offset = debug_str_to_u32(debug_char, &debug_char, HDMI_DEBUG_BASE_HEX);
768 ret = scdc_read_trim(hdmi_dev->hdmi_dev_id, offset, value, 1);
769 hdmi_dbg_print("scdc read offset(0x%x), val:0x%x\n\n", offset, *value);
770
771 return ret;
772 }
773
debug_scdc_write(const hdmi_device * hdmi_dev,const hdmi_debug_cmd_arg * cmd_arg,hi_u8 * value)774 static hi_s32 debug_scdc_write(const hdmi_device *hdmi_dev, const hdmi_debug_cmd_arg *cmd_arg, hi_u8 *value)
775 {
776 hi_u8 offset;
777 hi_s32 ret;
778 hi_char *debug_char = HI_NULL;
779
780 debug_char = cmd_arg->argv[2];
781 offset = debug_str_to_u32(debug_char, &debug_char, HDMI_DEBUG_BASE_HEX);
782 debug_char = cmd_arg->argv[3];
783 *value = debug_str_to_u32(debug_char, &debug_char, HDMI_DEBUG_BASE_HEX);
784 ret = scdc_write_trim(hdmi_dev->hdmi_dev_id, offset, value, 1);
785 hdmi_dbg_print("SCDC write offset(0x%x), val:0x%x\n\n", offset, *value);
786
787 return ret;
788 }
789
debug_scdc_time_test(const hdmi_device * hdmi_dev)790 static hi_void debug_scdc_time_test(const hdmi_device *hdmi_dev)
791 {
792 hi_u64 time1;
793 hi_u64 time2;
794 hi_u32 i;
795 hi_u32 j = 0;
796 hi_u8 data[10] = {0};
797
798 for (i = 0; j < 20; j++) { /* 20, osal get llu time count */
799 time1 = hdmi_osal_get_time_in_us();
800
801 for (i = 0; i < 1000; i++) { /* 1000, scdc read count */
802 scdc_read_trim(hdmi_dev->hdmi_dev_id, 0x01, &data[0], 1); /* 0x01 & 1, scdc offset value and read len */
803 if (data[0] != 0x01) {
804 hdmi_dbg_print("scdc read err(0x%x)\n", data[0]);
805 }
806 data[0] = 0;
807 }
808 time2 = hdmi_osal_get_time_in_us();
809 hdmi_dbg_print("time1: %llu, time2: %llu, %uus\n", time1, time2, (time2 - time1));
810 }
811 return;
812 }
813 #endif
814
debug_scdc_print(hi_void)815 static hi_void debug_scdc_print(hi_void)
816 {
817 hdmi_dbg_print("[usage ]: echo scdc argv1 > /proc/umap/hdmi0 \n");
818 hdmi_dbg_print("[argv1 ]: 0\t--scdc off.\n"
819 " 1\t--scdc on.\n"
820 " 2\t--scdc status get.\n");
821 #ifdef HDMI_FRL_SUPPORT
822 hdmi_dbg_print(" 3\t--scdc read. offset.\n"
823 " 4\t--scdc write. offset, data.\n"
824 " 5\t--simplified SCDC time test.\n");
825 #endif
826 hdmi_dbg_print("[example]: echo scdc 1 > /proc/umap/hdmi0 \n");
827
828 return;
829 }
830
debug_scdc(hdmi_debug_cmd_arg * cmd_arg)831 static hi_s32 debug_scdc(hdmi_debug_cmd_arg *cmd_arg)
832 {
833 hdmi_device *hdmi_dev = HI_NULL;
834 hdmi_scdc_status status = {0};
835 hi_s32 ret;
836 #ifdef HDMI_FRL_SUPPORT
837 hi_u8 value;
838 #endif
839
840 debug_null_check_return(cmd_arg);
841 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
842 debug_null_check_return(hdmi_dev);
843
844 if (cmd_arg->argc > DEBUG_CMD_ARGC_COUNT_3 || cmd_arg->argv[1] == HI_NULL) {
845 goto usage_error;
846 }
847
848 if (is_str_equal(cmd_arg->argv[1], "0")) {
849 ret = debug_scdc_off(hdmi_dev, &status);
850 debug_failure_check_return(ret);
851 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
852 ret = debug_scdc_on(hdmi_dev, &status);
853 debug_failure_check_return(ret);
854 } else if (is_str_equal(cmd_arg->argv[1], "2")) {
855 ret = debug_scdc_status_get(hdmi_dev, &status);
856 debug_failure_check_return(ret);
857 } else if (is_str_equal(cmd_arg->argv[1], "3")) {
858 #ifdef HDMI_FRL_SUPPORT
859 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_2) {
860 goto usage_error;
861 }
862 ret = debug_scdc_read(hdmi_dev, cmd_arg, &value);
863 debug_failure_check_return(ret);
864 } else if (is_str_equal(cmd_arg->argv[1], "4")) {
865 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_3) {
866 goto usage_error;
867 }
868 ret = debug_scdc_write(hdmi_dev, cmd_arg, &value);
869 debug_failure_check_return(ret);
870 } else if (is_str_equal(cmd_arg->argv[1], "5")) {
871 debug_scdc_time_test(hdmi_dev);
872 #endif
873 } else {
874 goto usage_error;
875 }
876
877 return HI_SUCCESS;
878
879 usage_error:
880 hdmi_dbg_err("error argvs!\n");
881 debug_scdc_print();
882
883 return HI_FAILURE;
884 }
885 #endif
886
debug_ddc(hdmi_debug_cmd_arg * cmd_arg)887 static hi_s32 debug_ddc(hdmi_debug_cmd_arg *cmd_arg)
888 {
889 hi_u32 ddc_freq;
890 hdmi_device *hdmi_dev = HI_NULL;
891 hi_char *str = HI_NULL;
892
893 debug_null_check_return(cmd_arg);
894 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
895 debug_null_check_return(hdmi_dev);
896 debug_null_check_return(hdmi_dev->hal);
897
898 if (cmd_arg->argc != DEBUG_CMD_ARGC_COUNT_1 || cmd_arg->argv[1] == HI_NULL) {
899 hdmi_dbg_err("error argcs!\n");
900 goto usage_error;
901 }
902
903 str = cmd_arg->argv[1];
904
905 ddc_freq = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
906 if (ddc_freq > 300 || ddc_freq == 0) { /* ddc frequency extent is 1-300 kHz */
907 goto usage_error;
908 }
909
910 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_DDC_FREQ, &ddc_freq);
911 hdmi_dbg_print("\n ddc frequency set %u_k_hz! \n\n", ddc_freq);
912
913 return HI_SUCCESS;
914
915 usage_error:
916 hdmi_dbg_print("[usage ]: echo ddc argv1 > /proc/msp/hdmi0\n");
917 hdmi_dbg_print("[argv1 ]: ddc frequency [1,300] k_hz\n");
918
919 return HI_FAILURE;
920 }
921
debug_hdmi_mode(hdmi_debug_cmd_arg * cmd_arg)922 static hi_s32 debug_hdmi_mode(hdmi_debug_cmd_arg *cmd_arg)
923 {
924 hdmi_device *hdmi_dev = HI_NULL;
925
926 debug_null_check_return(cmd_arg);
927 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
928 debug_null_check_return(hdmi_dev);
929 debug_null_check_return(hdmi_dev->hal);
930
931 if (cmd_arg->argc != DEBUG_CMD_ARGC_COUNT_1 || cmd_arg->argv[1] == HI_NULL) {
932 hdmi_dbg_err("error argcs!\n");
933 goto usage_error;
934 }
935
936 if (is_str_equal(cmd_arg->argv[1], "0")) {
937 hal_call_void(hal_hdmi_tmds_mode_set, hdmi_dev->hal, HDMI_TMDS_MODE_DVI);
938 hdmi_dbg_print("\n hdmi tmds mode set DVI %s! \n\n", STR_SUCC);
939 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
940 hal_call_void(hal_hdmi_tmds_mode_set, hdmi_dev->hal, HDMI_TMDS_MODE_HDMI_1_4);
941 hdmi_dbg_print("\n hdmi tmds mode set HDMI1.4 %s! \n\n", STR_SUCC);
942 } else if (is_str_equal(cmd_arg->argv[1], "2")) {
943 hal_call_void(hal_hdmi_tmds_mode_set, hdmi_dev->hal, HDMI_TMDS_MODE_HDMI_2_0);
944 hdmi_dbg_print("\n hdmi tmds mode set HDMI2.0 %s! \n\n", STR_SUCC);
945 } else {
946 hdmi_dbg_err("error argvs!\n");
947 goto usage_error;
948 }
949
950 return HI_SUCCESS;
951
952 usage_error:
953 hdmi_dbg_print("[usage ]: echo hdmimode argv1 > /proc/umap/hdmi0 \n");
954 hdmi_dbg_print("[argv1 ]: 0\t--DVI.\n"
955 " 1\t--HDMI1.4.\n"
956 " 2\t--HDMI2.0.\n");
957 hdmi_dbg_print("[example]: echo hdmimode 1 > /proc/umap/hdmi0 \n");
958
959 return HI_FAILURE;
960 }
961
debug_out_color_space(hdmi_debug_cmd_arg * cmd_arg)962 static hi_s32 debug_out_color_space(hdmi_debug_cmd_arg *cmd_arg)
963 {
964 hi_s32 ret;
965 hi_u32 old_mode;
966 hdmi_attr attr = {0};
967 hdmi_device *hdmi_dev = HI_NULL;
968
969 debug_null_check_return(cmd_arg);
970 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
971 debug_null_check_return(hdmi_dev);
972 debug_null_check_return(hdmi_dev->hal);
973
974 if (cmd_arg->argc != DEBUG_CMD_ARGC_COUNT_1 || cmd_arg->argv[1] == HI_NULL) {
975 hdmi_dbg_err("error argcs!\n");
976 goto usage_error;
977 }
978
979 ret = drv_hdmi_attr_get(hdmi_dev, &attr);
980 debug_failure_check_return(ret);
981 old_mode = (hi_u32)attr.app_attr.out_color_space;
982
983 if (is_str_equal(cmd_arg->argv[1], "0")) {
984 attr.app_attr.out_color_space = HDMI_COLORSPACE_RGB;
985 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
986 attr.app_attr.out_color_space = HDMI_COLORSPACE_YCBCR422;
987 } else if (is_str_equal(cmd_arg->argv[1], "2")) {
988 attr.app_attr.out_color_space = HDMI_COLORSPACE_YCBCR444;
989 } else if (is_str_equal(cmd_arg->argv[1], "3")) {
990 attr.app_attr.out_color_space = HDMI_COLORSPACE_YCBCR420;
991 } else {
992 hdmi_dbg_err("error argvs!\n");
993 goto usage_error;
994 }
995
996 drv_hdmi_stop(hdmi_dev);
997 ret = drv_hdmi_attr_set(hdmi_dev, &attr);
998 drv_hdmi_start(hdmi_dev);
999 hdmi_dbg_print("\n output colorspace mode %u->%u %s! \n\n", old_mode,
1000 attr.app_attr.out_color_space, ret == HI_SUCCESS ? STR_SUCC : STR_FAIL);
1001
1002 return HI_SUCCESS;
1003
1004 usage_error:
1005 hdmi_dbg_print("[usage ]: echo outclrspace argv1 > /proc/umap/hdmi0 \n");
1006 hdmi_dbg_print("[argv1 ]: 0\t--RGB.\n"
1007 " 1\t--YUV422.\n"
1008 " 2\t--YUV444.\n"
1009 " 3\t--YUV420.\n");
1010 hdmi_dbg_print("[example]: echo outclrspace 1 > /proc/umap/hdmi0 \n");
1011
1012 return HI_FAILURE;
1013 }
1014
debug_deep_color(hdmi_debug_cmd_arg * cmd_arg)1015 static hi_s32 debug_deep_color(hdmi_debug_cmd_arg *cmd_arg)
1016 {
1017 hi_s32 ret;
1018 hdmi_device *hdmi_dev = HI_NULL;
1019 hdmi_attr attr = {0};
1020 hi_u32 old_mode;
1021
1022 debug_null_check_return(cmd_arg);
1023 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
1024 debug_null_check_return(hdmi_dev);
1025 debug_null_check_return(hdmi_dev->hal);
1026
1027 if (cmd_arg->argc != DEBUG_CMD_ARGC_COUNT_1 || cmd_arg->argv[1] == HI_NULL) {
1028 hdmi_dbg_err("error argcs!\n");
1029 goto usage_error;
1030 }
1031
1032 ret = drv_hdmi_attr_get(hdmi_dev, &attr);
1033 debug_failure_check_return(ret);
1034 old_mode = (hi_u32)attr.app_attr.deep_color_mode;
1035
1036 if (attr.app_attr.out_color_space == HDMI_COLORSPACE_YCBCR422) {
1037 hdmi_dbg_err("colorspace YUV422 not support deepcolor set! force set\n");
1038 }
1039
1040 if (is_str_equal(cmd_arg->argv[1], "0")) {
1041 attr.app_attr.deep_color_mode = HDMI_DEEP_COLOR_24BIT;
1042 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
1043 attr.app_attr.deep_color_mode = HDMI_DEEP_COLOR_30BIT;
1044 } else if (is_str_equal(cmd_arg->argv[1], "2")) {
1045 attr.app_attr.deep_color_mode = HDMI_DEEP_COLOR_36BIT;
1046 } else {
1047 hdmi_dbg_err("error argvs!\n");
1048 goto usage_error;
1049 }
1050
1051 drv_hdmi_stop(hdmi_dev);
1052 ret = drv_hdmi_attr_set(hdmi_dev, &attr);
1053 drv_hdmi_start(hdmi_dev);
1054 hdmi_dbg_print("\n deppcolor colorspace mode %u->%u %s! \n\n", old_mode,
1055 attr.app_attr.deep_color_mode, ret == HI_SUCCESS ? STR_SUCC : STR_FAIL);
1056
1057 return HI_SUCCESS;
1058
1059 usage_error:
1060 hdmi_dbg_print("[usage ]: echo deepclr argv1 > /proc/umap/hdmi0 \n");
1061 hdmi_dbg_print("[argv1 ]: 0\t--08 bit.\n"
1062 " 1\t--10 bit.\n"
1063 " 2\t--12 bit.\n");
1064 hdmi_dbg_print("[example]: echo deepclr 1 > /proc/umap/hdmi0 \n");
1065
1066 return HI_FAILURE;
1067 }
1068
1069 #ifndef HDMI_PRODUCT_HI3559A
debug_dither(hdmi_debug_cmd_arg * cmd_arg)1070 static hi_s32 debug_dither(hdmi_debug_cmd_arg *cmd_arg)
1071 {
1072 hdmi_device *hdmi_dev = HI_NULL;
1073 hdmi_video_dither dither_mode = HDMI_VIDEO_DITHER_DISABLE;
1074
1075 debug_null_check_return(cmd_arg);
1076 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
1077 debug_null_check_return(hdmi_dev);
1078 debug_null_check_return(hdmi_dev->hal);
1079
1080 if (cmd_arg->argc != DEBUG_CMD_ARGC_COUNT_1 || cmd_arg->argv[1] == HI_NULL) {
1081 hdmi_dbg_err("error argcs!\n");
1082 goto usage_error;
1083 }
1084
1085 if (is_str_equal(cmd_arg->argv[1], "0")) {
1086 dither_mode = HDMI_VIDEO_DITHER_DISABLE;
1087
1088 hdmi_dbg_print("\n dither is disable %s! \n\n", STR_SUCC);
1089 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
1090 dither_mode = HDMI_VIDEO_DITHER_10_8;
1091 hdmi_dbg_print("\n dither is enable 10_08 %s! \n\n", STR_SUCC);
1092 } else if (is_str_equal(cmd_arg->argv[1], "2")) {
1093 dither_mode = HDMI_VIDEO_DITHER_12_8;
1094 hdmi_dbg_print("\n dither is enable 12_08 %s! \n\n", STR_SUCC);
1095 } else if (is_str_equal(cmd_arg->argv[1], "3")) {
1096 dither_mode = HDMI_VIDEO_DITHER_12_10;
1097 hdmi_dbg_print("\n dither is enable 12_10 %s! \n\n", STR_SUCC);
1098 } else {
1099 hdmi_dbg_err("error argvs!\n");
1100 goto usage_error;
1101 }
1102
1103 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_DITHER, &dither_mode);
1104
1105 return HI_SUCCESS;
1106
1107 usage_error:
1108 hdmi_dbg_print("[usage ]: echo dither argv1 > /proc/umap/hdmi0\n");
1109 hdmi_dbg_print("[argv1 ]: 0\t--dither disable.\n"
1110 " 1\t--10_08.\n"
1111 " 2\t--12_08.\n"
1112 " 3\t--12_10.\n");
1113 hdmi_dbg_print("[example]: echo dither 1 > /proc/umap/hdmi0 \n");
1114
1115 return HI_FAILURE;
1116 }
1117 #endif
1118
debug_authenticate(hdmi_debug_cmd_arg * cmd_arg)1119 static hi_s32 debug_authenticate(hdmi_debug_cmd_arg *cmd_arg)
1120 {
1121 hdmi_device *hdmi_dev = HI_NULL;
1122
1123 debug_null_check_return(cmd_arg);
1124 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
1125 debug_null_check_return(hdmi_dev);
1126 debug_null_check_return(hdmi_dev->hal);
1127
1128 if (cmd_arg->argc != DEBUG_CMD_ARGC_COUNT_1 || cmd_arg->argv[1] == HI_NULL) {
1129 hdmi_dbg_err("error argcs!\n");
1130 goto usage_error;
1131 }
1132
1133 if (is_str_equal(cmd_arg->argv[1], "0")) {
1134 hdmi_dev->attr.app_attr.auth_mode = HI_FALSE;
1135 hdmi_dbg_print("\n aut disable %s! \n\n", STR_SUCC);
1136 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
1137 hdmi_dev->attr.app_attr.auth_mode = HI_TRUE;
1138 hdmi_dbg_print("\n aut enable %s! \n\n", STR_SUCC);
1139 } else if (is_str_equal(cmd_arg->argv[1], "2")) {
1140 hdmi_dbg_print("\n aut status %u! \n\n", hdmi_dev->attr.app_attr.auth_mode);
1141 } else {
1142 hdmi_dbg_err("error argcs!\n");
1143 goto usage_error;
1144 }
1145
1146 return HI_SUCCESS;
1147
1148 usage_error:
1149 hdmi_dbg_print("[usage ]: echo aut argv1 > /proc/umap/hdmi0 \n");
1150 hdmi_dbg_print("[argv1 ]: 0\t--aut off.\n"
1151 " 1\t--aut on.\n"
1152 " 2\t--aut status get.\n");
1153 hdmi_dbg_print("[example]: echo aut 1 > /proc/umap/hdmi0 \n");
1154
1155 return HI_FAILURE;
1156 }
1157
debug_cmd_help(hi_void)1158 static hi_void debug_cmd_help(hi_void)
1159 {
1160 hdmi_dbg_err("error args!\n");
1161 hdmi_dbg_print("[usage ]: echo cmd argv1 argv2(optional) > /proc/umap/hdmi0 \n");
1162 hdmi_dbg_print("[argv1 ]: 0\t--hdmi stop.\n"
1163 " 1\t--hdmi start.\n"
1164 " 2\t--black frame enable.\n"
1165 " 3\t--black frame disable.\n"
1166 " 4\t--PCB length set (must set argv2).\n");
1167 hdmi_dbg_print("[example]: echo cmd 1 > /proc/umap/hdmi0 \n");
1168 return;
1169 }
1170
debug_cmd(hdmi_debug_cmd_arg * cmd_arg)1171 static hi_s32 debug_cmd(hdmi_debug_cmd_arg *cmd_arg)
1172 {
1173 hdmi_device *hdmi_dev = HI_NULL;
1174 hdmi_black_frame_info black_info = {0};
1175 hi_u32 data;
1176 hi_char *str = HI_NULL;
1177
1178 debug_null_check_return(cmd_arg);
1179 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
1180 debug_null_check_return(hdmi_dev);
1181 debug_null_check_return(hdmi_dev->hal);
1182
1183 (hi_void)memset_s(&black_info, sizeof(hdmi_black_frame_info), 0, sizeof(hdmi_black_frame_info));
1184 black_info.in_bit_depth = hdmi_dev->attr.vo_attr.in_bit_depth;
1185 black_info.in_color_space = hdmi_dev->attr.vo_attr.in_color_space;
1186 black_info.in_quantization = (black_info.in_color_space == HDMI_COLORSPACE_RGB) ?
1187 hdmi_dev->attr.vo_attr.rgb_quantization : hdmi_dev->attr.vo_attr.ycc_quantization;
1188 /* input require argc is 2, argv 1 is none null */
1189 if ((cmd_arg->argc < 2) || (cmd_arg->argc > 3) || cmd_arg->argv[1] == HI_NULL) {
1190 goto usage_error;
1191 }
1192
1193 if (is_str_equal(cmd_arg->argv[1], "0")) {
1194 drv_hdmi_stop(hdmi_dev);
1195 hdmi_dbg_print("\n HDMI stop %s! \n\n", STR_SUCC);
1196 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
1197 drv_hdmi_start(hdmi_dev);
1198 hdmi_dbg_print("\n HDMI start %s! \n\n", STR_SUCC);
1199 } else if (is_str_equal(cmd_arg->argv[1], "2")) {
1200 black_info.black_enable = HI_TRUE;
1201 hal_call_void(hal_hdmi_black_data_set, hdmi_dev->hal, &black_info);
1202 hdmi_dbg_print("\n black frame enable %s! \n\n", STR_SUCC);
1203 } else if (is_str_equal(cmd_arg->argv[1], "3")) {
1204 black_info.black_enable = HI_FALSE;
1205 hal_call_void(hal_hdmi_black_data_set, hdmi_dev->hal, &black_info);
1206 hdmi_dbg_print("\n black frame disable %s! \n\n", STR_SUCC);
1207 } else if (is_str_equal(cmd_arg->argv[1], "4")) {
1208 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_2) {
1209 goto usage_error;
1210 }
1211
1212 str = cmd_arg->argv[2];
1213 debug_null_check_return(str);
1214 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
1215 data = (data > HDMI_TRACE_LEN_1) ? HDMI_TRACE_LEN_1 : data;
1216 hdmi_dbg_print("\n PCB trace len old(%u)->new(%u)! \n\n", hdmi_dev->mode_param.trace_len, data);
1217 hdmi_dev->mode_param.trace_len = (hdmi_trace_len)data;
1218 } else {
1219 goto usage_error;
1220 }
1221
1222 return HI_SUCCESS;
1223
1224 usage_error:
1225 debug_cmd_help();
1226
1227 return HI_FAILURE;
1228 }
1229
1230 #ifdef HDMI_HDR_SUPPORT
debug_hdr_mode_set(hdmi_device * hdmi_dev,hdmi_debug_cmd_arg * cmd_arg)1231 static hi_s32 debug_hdr_mode_set(hdmi_device *hdmi_dev, hdmi_debug_cmd_arg *cmd_arg)
1232 {
1233 hi_s32 ret;
1234 hi_u32 old_mode;
1235 hdmi_attr attr = {0};
1236 drv_hdmi_hdr_attr *hdr_attr = HI_NULL;
1237
1238 hdr_attr = &(hdmi_dev->attr.hdr_attr);
1239 old_mode = hdr_attr->user_hdr_mode;
1240
1241 debug_null_check_return(cmd_arg->argv[2]);
1242 if (is_str_equal(cmd_arg->argv[2], "1")) {
1243 hdr_attr->user_hdr_mode = HDMI_HDR_USERMODE_HDR10;
1244 } else if (is_str_equal(cmd_arg->argv[2], "2")) {
1245 hdr_attr->user_hdr_mode = HDMI_HDR_USERMODE_DOLBY;
1246 } else {
1247 hdr_attr->user_hdr_mode = HDMI_HDR_USERMODE_SDR;
1248 }
1249
1250 ret = drv_hdmi_attr_get(hdmi_dev, &attr);
1251 debug_failure_check_return(ret);
1252
1253 drv_hdmi_stop(hdmi_dev);
1254 ret = drv_hdmi_attr_set(hdmi_dev, &attr);
1255 drv_hdmi_start(hdmi_dev);
1256
1257 hdmi_dbg_print("\n user hdr mode change %u->%u %s! \n\n", old_mode,
1258 attr.hdr_attr.user_hdr_mode, ret == HI_SUCCESS ? STR_SUCC : STR_FAIL);
1259
1260 return HI_SUCCESS;
1261 }
1262
debug_hdr_hdr10(hdmi_debug_cmd_arg * cmd_arg,drv_hdmi_hdr_info * hdr_info)1263 static hi_void debug_hdr_hdr10(hdmi_debug_cmd_arg *cmd_arg, drv_hdmi_hdr_info *hdr_info)
1264 {
1265 if (is_str_equal(cmd_arg->argv[2], "1")) {
1266 hdr_info->hdr_debug_mode = HDMI_HDR_DEBUG_MODE_OE;
1267 } else if (is_str_equal(cmd_arg->argv[2], "2")) {
1268 hdr_info->hdr_debug_mode = HDMI_HDR_DEBUG_MODE_AVMUTE;
1269 } else {
1270 hdr_info->hdr_debug_mode = HDMI_HDR_DEBUG_MODE_NONE;
1271 }
1272 hdmi_dbg_print("\n debug mode set %u! \n\n", hdr_info->hdr_debug_mode);
1273
1274 return;
1275 }
1276
debug_hdr_delay_set(hdmi_debug_cmd_arg * cmd_arg,drv_hdmi_hdr_info * hdr_info)1277 static hi_s32 debug_hdr_delay_set(hdmi_debug_cmd_arg *cmd_arg, drv_hdmi_hdr_info *hdr_info)
1278 {
1279 hi_u32 time;
1280 hi_char *str = cmd_arg->argv[2];
1281
1282 debug_null_check_return(str);
1283 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_2) {
1284 return HI_FAILURE;
1285 }
1286 time = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
1287 if (time < 1 || time > 10000) { /* OE delay time extent 1~10000 */
1288 return HI_FAILURE;
1289 }
1290 hdmi_dbg_print("\n debug OE delay time change %u->%u! \n\n", hdr_info->hdr_mode_chn_timer.time, time);
1291 hdr_info->hdr_mode_chn_timer.time = time;
1292
1293 return HI_SUCCESS;
1294 }
1295
debug_hdr_print(hi_void)1296 static hi_void debug_hdr_print(hi_void)
1297 {
1298 hdmi_dbg_print("[usage ]: echo hdr argv1 argv2 > /proc/umap/hdmi0 \n");
1299 hdmi_dbg_print("[argv1 ]: HDR debug command.\n");
1300 hdmi_dbg_print(" 0\t--debug HDR mode set (argv2 = 1-HDR10, 2-dolby, else-SDR).\n"
1301 " 1\t--debug mode set when the HDR mode change to HDR10"
1302 "(argv2 = 1-OE, 2-AVMUTE, else-disable.)\n"
1303 " 2\t--debug mode delay time(1~10000ms, default 100ms).\n"
1304 " 3\t--zero DRM infoframe send time(1-10000ms, default 2000ms).\n");
1305
1306 hdmi_dbg_print("[argv2 ]: command param.\n");
1307 hdmi_dbg_print("[example]: echo hdr 0 1 > /proc/umap/hdmi0\n");
1308 hdmi_dbg_print("[example]: echo hdr 1 2 > /proc/umap/hdmi0\n");
1309 hdmi_dbg_print("[example]: echo hdr 2 500 > /proc/umap/hdmi0\n");
1310 hdmi_dbg_print("[example]: echo hdr 3 3000 > /proc/umap/hdmi0\n");
1311
1312 return;
1313 }
1314
debug_hdr(hdmi_debug_cmd_arg * cmd_arg)1315 static hi_s32 debug_hdr(hdmi_debug_cmd_arg *cmd_arg)
1316 {
1317 hi_s32 ret;
1318 hi_u32 time;
1319 hi_char *str = HI_NULL;
1320 hdmi_device *hdmi_dev = HI_NULL;
1321 drv_hdmi_hdr_info *hdr_info = HI_NULL;
1322
1323 debug_null_check_return(cmd_arg);
1324 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
1325 debug_null_check_return(hdmi_dev);
1326 debug_null_check_return(hdmi_dev->hal);
1327
1328 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_1 || cmd_arg->argv[1] == HI_NULL) {
1329 hdmi_dbg_err("error argcs!\n");
1330 goto usage_error;
1331 }
1332
1333 hdr_info = &(hdmi_dev->hdr_info);
1334
1335 if (is_str_equal(cmd_arg->argv[1], "0")) {
1336 /* HDR mode set. */
1337 ret = debug_hdr_mode_set(hdmi_dev, cmd_arg);
1338 debug_failure_check_return(ret);
1339 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
1340 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_2 || cmd_arg->argv[2] == HI_NULL) {
1341 goto usage_error;
1342 }
1343 debug_hdr_hdr10(cmd_arg, hdr_info);
1344 } else if (is_str_equal(cmd_arg->argv[1], "2")) {
1345 if (debug_hdr_delay_set(cmd_arg, hdr_info) != HI_SUCCESS) {
1346 goto usage_error;
1347 }
1348 } else if (is_str_equal(cmd_arg->argv[1], "3")) {
1349 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_2) {
1350 goto usage_error;
1351 }
1352
1353 str = cmd_arg->argv[2];
1354 debug_null_check_return(str);
1355
1356 time = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
1357 if (time < 1 || time > 10000) { /* DRM send time extent 1~10000 */
1358 goto usage_error;
1359 }
1360 hdmi_dbg_print("\n debug zero DRM infoframe send time change %u->%u! \n\n",
1361 hdr_info->zero_drm_if_timer.time, time);
1362 hdr_info->zero_drm_if_timer.time = time;
1363 } else {
1364 hdmi_dbg_err("error argvs!\n");
1365 goto usage_error;
1366 }
1367
1368 return HI_SUCCESS;
1369
1370 usage_error:
1371 debug_hdr_print();
1372
1373 return HI_FAILURE;
1374 }
1375 #endif
1376
1377 #ifdef HDMI_FRL_SUPPORT
debug_timer_isr(hi_void * param)1378 hi_void debug_timer_isr(hi_void *param)
1379 {
1380 hi_u8 data = 0;
1381
1382 hi_unused(param);
1383 g_timer_test++;
1384
1385 scdc_read_trim(0, 0x01, &data, 1);
1386 if (g_timer_test <= DEBUG_TIME_TEST_MAX) {
1387 hal_timer_start();
1388 } else {
1389 hal_timer_stop();
1390 }
1391 return;
1392 }
1393
1394 frl_rx_crc_check g_rx_table[] = {
1395 { 0x11143820, 0x1 }, { 0x11143824, 0x940000 }, { 0x11143828, 0x0 }, { 0x11143824, 0x6b0000 },
1396 { 0x11143828, 0x0 }, { 0x11143824, 0x8c0000 }, { 0x11143828, 0x1 }, { 0x11143824, 0x730000 },
1397 { 0x11143828, 0x1 }, { 0x11143824, 0x4c0000 }, { 0x11143828, 0x2 }, { 0x11143824, 0xb30000 },
1398 { 0x11143828, 0x2 }, { 0x11143824, 0xc80000 }, { 0x11143828, 0x3 }, { 0x11143824, 0x370000 },
1399 { 0x11143828, 0x3 }, { 0x11143824, 0x2c0000 }, { 0x11143828, 0x4 }, { 0x11143824, 0xd30000 },
1400 { 0x11143828, 0x4 }, { 0x11143824, 0xa80000 }, { 0x11143828, 0x5 }, { 0x11143824, 0x570000 },
1401 { 0x11143828, 0x5 }, { 0x11143824, 0x680000 }, { 0x11143828, 0x6 }, { 0x11143824, 0x970000 },
1402 { 0x11143828, 0x6 }, { 0x11143824, 0xe10000 }, { 0x11143828, 0x7 }, { 0x11143824, 0xe10000 },
1403 { 0x11143828, 0x7 }, { 0x11143824, 0x920000 }, { 0x11143828, 0x8 }, { 0x11143824, 0x6d0000 },
1404 { 0x11143828, 0x8 }, { 0x11143824, 0x980000 }, { 0x11143828, 0x9 }, { 0x11143824, 0x670000 },
1405 { 0x11143828, 0x9 }, { 0x11143824, 0x580000 }, { 0x11143828, 0xa }, { 0x11143824, 0xa70000 },
1406 { 0x11143828, 0xa }, { 0x11143824, 0xd10000 }, { 0x11143828, 0xb }, { 0x11143824, 0xd10000 },
1407 { 0x11143828, 0xb }, { 0x11143824, 0x380000 }, { 0x11143828, 0xc }, { 0x11143824, 0xc70000 },
1408 { 0x11143828, 0xc }, { 0x11143824, 0xb10000 }, { 0x11143828, 0xd }, { 0x11143824, 0xb10000 },
1409 { 0x11143828, 0xd }, { 0x11143824, 0x710000 }, { 0x11143828, 0xe }, { 0x11143824, 0x710000 },
1410 { 0x11143828, 0xe }, { 0x11143824, 0xf0000 }, { 0x11143828, 0xf }, { 0x11143824, 0xf00000 },
1411 { 0x11143828, 0xf }, { 0x11143824, 0x8a0000 }, { 0x11143828, 0x10 }, { 0x11143824, 0x750000 },
1412 { 0x11143828, 0x10 }, { 0x11143824, 0x880000 }, { 0x11143828, 0x11 }, { 0x11143824, 0x770000 },
1413 { 0x11143828, 0x11 }, { 0x11143824, 0x480000 }, { 0x11143828, 0x12 }, { 0x11143824, 0xb70000 },
1414 { 0x11143828, 0x12 }, { 0x11143824, 0xc90000 }, { 0x11143828, 0x13 }, { 0x11143824, 0xc90000 },
1415 { 0x11143828, 0x13 }, { 0x11143824, 0x280000 }, { 0x11143828, 0x14 }, { 0x11143824, 0xd70000 },
1416 { 0x11143828, 0x14 }, { 0x11143824, 0xa90000 }, { 0x11143828, 0x15 }, { 0x11143824, 0xa90000 },
1417 { 0x11143828, 0x15 }, { 0x11143824, 0x690000 }, { 0x11143828, 0x16 }, { 0x11143824, 0x690000 },
1418 { 0x11143828, 0x16 }, { 0x11143824, 0xe80000 }, { 0x11143828, 0x17 }, { 0x11143824, 0xe80000 },
1419 { 0x11143828, 0x17 }, { 0x11143824, 0x180000 }, { 0x11143828, 0x18 }, { 0x11143824, 0xe70000 },
1420 { 0x11143828, 0x18 }, { 0x11143824, 0x990000 }, { 0x11143828, 0x19 }, { 0x11143824, 0x990000 },
1421 { 0x11143828, 0x19 }, { 0x11143824, 0x590000 }, { 0x11143828, 0x1a }, { 0x11143824, 0x590000 },
1422 { 0x11143828, 0x1a }, { 0x11143824, 0xd80000 }, { 0x11143828, 0x1b }, { 0x11143824, 0xd80000 },
1423 { 0x11143828, 0x1b }, { 0x11143824, 0x390000 }, { 0x11143828, 0x1c }, { 0x11143824, 0x390000 },
1424 { 0x11143828, 0x1c }, { 0x11143824, 0xb80000 }, { 0x11143828, 0x1d }, { 0x11143824, 0xb80000 },
1425 { 0x11143828, 0x1d }, { 0x11143824, 0x780000 }, { 0x11143828, 0x1e }, { 0x11143824, 0x780000 },
1426 { 0x11143828, 0x1e }, { 0x11143824, 0x160000 }, { 0x11143828, 0x1f }, { 0x11143824, 0xe90000 },
1427 { 0x11143828, 0x1f }, { 0x11143824, 0x540000 }, { 0x11143828, 0x20 }, { 0x11143824, 0xab0000 },
1428 { 0x11143828, 0x20 }, { 0x11143824, 0x840000 }, { 0x11143828, 0x21 }, { 0x11143824, 0x7b0000 },
1429 { 0x11143828, 0x21 }, { 0x11143824, 0x440000 }, { 0x11143828, 0x22 }, { 0x11143824, 0xbb0000 },
1430 { 0x11143828, 0x22 }, { 0x11143824, 0xc50000 }, { 0x11143828, 0x23 }, { 0x11143824, 0xc50000 },
1431 { 0x11143828, 0x23 }, { 0x11143824, 0x240000 }, { 0x11143828, 0x24 }, { 0x11143824, 0xdb0000 },
1432 { 0x11143828, 0x24 }, { 0x11143824, 0xa50000 }, { 0x11143828, 0x25 }, { 0x11143824, 0xa50000 },
1433 { 0x11143828, 0x25 }, { 0x11143824, 0x650000 }, { 0x11143828, 0x26 }, { 0x11143824, 0x650000 },
1434 { 0x11143828, 0x26 }, { 0x11143824, 0xe40000 }, { 0x11143828, 0x27 }, { 0x11143824, 0xe40000 },
1435 { 0x11143828, 0x27 }, { 0x11143824, 0x140000 }, { 0x11143828, 0x28 }, { 0x11143824, 0xeb0000 },
1436 { 0x11143828, 0x28 }, { 0x11143824, 0x950000 }, { 0x11143828, 0x29 }, { 0x11143824, 0x950000 },
1437 { 0x11143828, 0x29 }, { 0x11143824, 0x550000 }, { 0x11143828, 0x2a }, { 0x11143824, 0x550000 },
1438 { 0x11143828, 0x2a }, { 0x11143824, 0xd40000 }, { 0x11143828, 0x2b }, { 0x11143824, 0xd40000 },
1439 { 0x11143828, 0x2b }, { 0x11143824, 0x350000 }, { 0x11143828, 0x2c }, { 0x11143824, 0x350000 },
1440 { 0x11143828, 0x2c }, { 0x11143824, 0xb40000 }, { 0x11143828, 0x2d }, { 0x11143824, 0xb40000 },
1441 { 0x11143828, 0x2d }, { 0x11143824, 0x740000 }, { 0x11143828, 0x2e }, { 0x11143824, 0x740000 },
1442 { 0x11143828, 0x2e }, { 0x11143824, 0x1a0000 }, { 0x11143828, 0x2f }, { 0x11143824, 0xe50000 },
1443 { 0x11143828, 0x2f }, { 0x11143824, 0xc40000 }, { 0x11143828, 0x30 }, { 0x11143824, 0x3b0000 },
1444 { 0x11143828, 0x30 }, { 0x11143824, 0x8d0000 }, { 0x11143828, 0x31 }, { 0x11143824, 0x8d0000 },
1445 { 0x11143828, 0x31 }, { 0x11143824, 0x4d0000 }, { 0x11143828, 0x32 }, { 0x11143824, 0x4d0000 },
1446 { 0x11143828, 0x32 }, { 0x11143824, 0xcc0000 }, { 0x11143828, 0x33 }, { 0x11143824, 0xcc0000 },
1447 { 0x11143828, 0x33 }, { 0x11143824, 0x2d0000 }, { 0x11143828, 0x34 }, { 0x11143824, 0x2d0000 },
1448 { 0x11143828, 0x34 }, { 0x11143824, 0xac0000 }, { 0x11143828, 0x35 }, { 0x11143824, 0xac0000 },
1449 { 0x11143828, 0x35 }, { 0x11143824, 0x6c0000 }, { 0x11143828, 0x36 }, { 0x11143824, 0x6c0000 },
1450 { 0x11143828, 0x36 }, { 0x11143824, 0x130000 }, { 0x11143828, 0x37 }, { 0x11143824, 0xec0000 },
1451 { 0x11143828, 0x37 }, { 0x11143824, 0x1d0000 }, { 0x11143828, 0x38 }, { 0x11143824, 0x1d0000 },
1452 { 0x11143828, 0x38 }, { 0x11143824, 0x9c0000 }, { 0x11143828, 0x39 }, { 0x11143824, 0x9c0000 },
1453 { 0x11143828, 0x39 }, { 0x11143824, 0x5c0000 }, { 0x11143828, 0x3a }, { 0x11143824, 0x5c0000 },
1454 { 0x11143828, 0x3a }, { 0x11143824, 0x230000 }, { 0x11143828, 0x3b }, { 0x11143824, 0xdc0000 },
1455 { 0x11143828, 0x3b }, { 0x11143824, 0x3c0000 }, { 0x11143828, 0x3c }, { 0x11143824, 0x3c0000 },
1456 { 0x11143828, 0x3c }, { 0x11143824, 0x430000 }, { 0x11143828, 0x3d }, { 0x11143824, 0xbc0000 },
1457 { 0x11143828, 0x3d }, { 0x11143824, 0x830000 }, { 0x11143828, 0x3e }, { 0x11143824, 0x7c0000 },
1458 { 0x11143828, 0x3e }, { 0x11143824, 0x340000 }, { 0x11143828, 0x3f }, { 0x11143824, 0xcb0000 },
1459 { 0x11143828, 0x3f }, { 0x11143824, 0x520000 }, { 0x11143828, 0x40 }, { 0x11143824, 0xad0000 },
1460 { 0x11143828, 0x40 }, { 0x11143824, 0x820000 }, { 0x11143828, 0x41 }, { 0x11143824, 0x7d0000 },
1461 { 0x11143828, 0x41 }, { 0x11143824, 0x420000 }, { 0x11143828, 0x42 }, { 0x11143824, 0xbd0000 },
1462 { 0x11143828, 0x42 }, { 0x11143824, 0xc30000 }, { 0x11143828, 0x43 }, { 0x11143824, 0xc30000 },
1463 { 0x11143828, 0x43 }, { 0x11143824, 0x220000 }, { 0x11143828, 0x44 }, { 0x11143824, 0xdd0000 },
1464 { 0x11143828, 0x44 }, { 0x11143824, 0xa30000 }, { 0x11143828, 0x45 }, { 0x11143824, 0xa30000 },
1465 { 0x11143828, 0x45 }, { 0x11143824, 0x630000 }, { 0x11143828, 0x46 }, { 0x11143824, 0x630000 },
1466 { 0x11143828, 0x46 }, { 0x11143824, 0xe20000 }, { 0x11143828, 0x47 }, { 0x11143824, 0xe20000 },
1467 { 0x11143828, 0x47 }, { 0x11143824, 0x120000 }, { 0x11143828, 0x48 }, { 0x11143824, 0xed0000 },
1468 { 0x11143828, 0x48 }, { 0x11143824, 0x930000 }, { 0x11143828, 0x49 }, { 0x11143824, 0x930000 },
1469 { 0x11143828, 0x49 }, { 0x11143824, 0x530000 }, { 0x11143828, 0x4a }, { 0x11143824, 0x530000 },
1470 { 0x11143828, 0x4a }, { 0x11143824, 0xd20000 }, { 0x11143828, 0x4b }, { 0x11143824, 0xd20000 },
1471 { 0x11143828, 0x4b }, { 0x11143824, 0x330000 }, { 0x11143828, 0x4c }, { 0x11143824, 0x330000 },
1472 { 0x11143828, 0x4c }, { 0x11143824, 0xb20000 }, { 0x11143828, 0x4d }, { 0x11143824, 0xb20000 },
1473 { 0x11143828, 0x4d }, { 0x11143824, 0x720000 }, { 0x11143828, 0x4e }, { 0x11143824, 0x720000 },
1474 { 0x11143828, 0x4e }, { 0x11143824, 0x1c0000 }, { 0x11143828, 0x4f }, { 0x11143824, 0xe30000 },
1475 { 0x11143828, 0x4f }, { 0x11143824, 0xc20000 }, { 0x11143828, 0x50 }, { 0x11143824, 0x3d0000 },
1476 { 0x11143828, 0x50 }, { 0x11143824, 0x8b0000 }, { 0x11143828, 0x51 }, { 0x11143824, 0x8b0000 },
1477 { 0x11143828, 0x51 }, { 0x11143824, 0x4b0000 }, { 0x11143828, 0x52 }, { 0x11143824, 0x4b0000 },
1478 { 0x11143828, 0x52 }, { 0x11143824, 0xca0000 }, { 0x11143828, 0x53 }, { 0x11143824, 0xca0000 },
1479 { 0x11143828, 0x53 }, { 0x11143824, 0x2b0000 }, { 0x11143828, 0x54 }, { 0x11143824, 0x2b0000 },
1480 { 0x11143828, 0x54 }, { 0x11143824, 0xaa0000 }, { 0x11143828, 0x55 }, { 0x11143824, 0xaa0000 },
1481 { 0x11143828, 0x55 }, { 0x11143824, 0x6a0000 }, { 0x11143828, 0x56 }, { 0x11143824, 0x6a0000 },
1482 { 0x11143828, 0x56 }, { 0x11143824, 0x150000 }, { 0x11143828, 0x57 }, { 0x11143824, 0xea0000 },
1483 { 0x11143828, 0x57 }, { 0x11143824, 0x1b0000 }, { 0x11143828, 0x58 }, { 0x11143824, 0x1b0000 },
1484 { 0x11143828, 0x58 }, { 0x11143824, 0x9a0000 }, { 0x11143828, 0x59 }, { 0x11143824, 0x9a0000 },
1485 { 0x11143828, 0x59 }, { 0x11143824, 0x5a0000 }, { 0x11143828, 0x5a }, { 0x11143824, 0x5a0000 },
1486 { 0x11143828, 0x5a }, { 0x11143824, 0x250000 }, { 0x11143828, 0x5b }, { 0x11143824, 0xda0000 },
1487 { 0x11143828, 0x5b }, { 0x11143824, 0x3a0000 }, { 0x11143828, 0x5c }, { 0x11143824, 0x3a0000 },
1488 { 0x11143828, 0x5c }, { 0x11143824, 0x450000 }, { 0x11143828, 0x5d }, { 0x11143824, 0xba0000 },
1489 { 0x11143828, 0x5d }, { 0x11143824, 0x850000 }, { 0x11143828, 0x5e }, { 0x11143824, 0x7a0000 },
1490 { 0x11143828, 0x5e }, { 0x11143824, 0x620000 }, { 0x11143828, 0x5f }, { 0x11143824, 0x9d0000 },
1491 { 0x11143828, 0x5f }, { 0x11143824, 0x260000 }, { 0x11143828, 0x60 }, { 0x11143824, 0xd90000 },
1492 { 0x11143828, 0x60 }, { 0x11143824, 0x870000 }, { 0x11143828, 0x61 }, { 0x11143824, 0x870000 },
1493 { 0x11143828, 0x61 }, { 0x11143824, 0x470000 }, { 0x11143828, 0x62 }, { 0x11143824, 0x470000 },
1494 { 0x11143828, 0x62 }, { 0x11143824, 0xc60000 }, { 0x11143828, 0x63 }, { 0x11143824, 0xc60000 },
1495 { 0x11143828, 0x63 }, { 0x11143824, 0x270000 }, { 0x11143828, 0x64 }, { 0x11143824, 0x270000 },
1496 { 0x11143828, 0x64 }, { 0x11143824, 0xa60000 }, { 0x11143828, 0x65 }, { 0x11143824, 0xa60000 },
1497 { 0x11143828, 0x65 }, { 0x11143824, 0x660000 }, { 0x11143828, 0x66 }, { 0x11143824, 0x660000 },
1498 { 0x11143828, 0x66 }, { 0x11143824, 0x190000 }, { 0x11143828, 0x67 }, { 0x11143824, 0xe60000 },
1499 { 0x11143828, 0x67 }, { 0x11143824, 0x170000 }, { 0x11143828, 0x68 }, { 0x11143824, 0x170000 },
1500 { 0x11143828, 0x68 }, { 0x11143824, 0x960000 }, { 0x11143828, 0x69 }, { 0x11143824, 0x960000 },
1501 { 0x11143828, 0x69 }, { 0x11143824, 0x560000 }, { 0x11143828, 0x6a }, { 0x11143824, 0x560000 },
1502 { 0x11143828, 0x6a }, { 0x11143824, 0x290000 }, { 0x11143828, 0x6b }, { 0x11143824, 0xd60000 },
1503 { 0x11143828, 0x6b }, { 0x11143824, 0x360000 }, { 0x11143828, 0x6c }, { 0x11143824, 0x360000 },
1504 { 0x11143828, 0x6c }, { 0x11143824, 0x490000 }, { 0x11143828, 0x6d }, { 0x11143824, 0xb60000 },
1505 { 0x11143828, 0x6d }, { 0x11143824, 0x890000 }, { 0x11143828, 0x6e }, { 0x11143824, 0x760000 },
1506 { 0x11143828, 0x6e }, { 0x11143824, 0x320000 }, { 0x11143828, 0x6f }, { 0x11143824, 0xcd0000 },
1507 { 0x11143828, 0x6f }, { 0x11143824, 0x4a0000 }, { 0x11143828, 0x70 }, { 0x11143824, 0xb50000 },
1508 { 0x11143828, 0x70 }, { 0x11143824, 0x8e0000 }, { 0x11143828, 0x71 }, { 0x11143824, 0x8e0000 },
1509 { 0x11143828, 0x71 }, { 0x11143824, 0x4e0000 }, { 0x11143828, 0x72 }, { 0x11143824, 0x4e0000 },
1510 { 0x11143828, 0x72 }, { 0x11143824, 0x310000 }, { 0x11143828, 0x73 }, { 0x11143824, 0xce0000 },
1511 { 0x11143828, 0x73 }, { 0x11143824, 0x2e0000 }, { 0x11143828, 0x74 }, { 0x11143824, 0x2e0000 },
1512 { 0x11143828, 0x74 }, { 0x11143824, 0x510000 }, { 0x11143828, 0x75 }, { 0x11143824, 0xae0000 },
1513 { 0x11143828, 0x75 }, { 0x11143824, 0x910000 }, { 0x11143828, 0x76 }, { 0x11143824, 0x6e0000 },
1514 { 0x11143828, 0x76 }, { 0x11143824, 0x2a0000 }, { 0x11143828, 0x77 }, { 0x11143824, 0xd50000 },
1515 { 0x11143828, 0x77 }, { 0x11143824, 0x1e0000 }, { 0x11143828, 0x78 }, { 0x11143824, 0x1e0000 },
1516 { 0x11143828, 0x78 }, { 0x11143824, 0x610000 }, { 0x11143828, 0x79 }, { 0x11143824, 0x9e0000 },
1517 { 0x11143828, 0x79 }, { 0x11143824, 0xa10000 }, { 0x11143828, 0x7a }, { 0x11143824, 0x5e0000 },
1518 { 0x11143828, 0x7a }, { 0x11143824, 0x860000 }, { 0x11143828, 0x7b }, { 0x11143824, 0x790000 },
1519 { 0x11143828, 0x7b }, { 0x11143824, 0xc10000 }, { 0x11143828, 0x7c }, { 0x11143824, 0x3e0000 },
1520 { 0x11143828, 0x7c }, { 0x11143824, 0xa40000 }, { 0x11143828, 0x7d }, { 0x11143824, 0x5b0000 },
1521 { 0x11143828, 0x7d }, { 0x11143824, 0x640000 }, { 0x11143828, 0x7e }, { 0x11143824, 0x9b0000 },
1522 { 0x11143828, 0x7e }, { 0x11143824, 0xa20000 }, { 0x11143828, 0x7f }, { 0x11143824, 0x5d0000 },
1523 { 0x11143828, 0x7f }, { 0x11143824, 0xd20010 }, { 0x11143828, 0x0 }, { 0x11143824, 0x32d0010 },
1524 { 0x11143828, 0x0 }, { 0x11143824, 0x22c0010 }, { 0x11143828, 0x1 }, { 0x11143824, 0x1d30010 },
1525 { 0x11143828, 0x1 }, { 0x11143824, 0x14a0010 }, { 0x11143828, 0x2 }, { 0x11143824, 0x2b50010 },
1526 { 0x11143828, 0x2 }, { 0x11143824, 0x3060010 }, { 0x11143828, 0x3 }, { 0x11143824, 0xf90010 },
1527 { 0x11143828, 0x3 }, { 0x11143824, 0x18a0010 }, { 0x11143828, 0x4 }, { 0x11143824, 0x2750010 },
1528 { 0x11143828, 0x4 }, { 0x11143824, 0x2860010 }, { 0x11143828, 0x5 }, { 0x11143824, 0x1790010 },
1529 { 0x11143828, 0x5 }, { 0x11143824, 0x1860010 }, { 0x11143828, 0x6 }, { 0x11143824, 0x2790010 },
1530 { 0x11143828, 0x6 }, { 0x11143824, 0x3820010 }, { 0x11143828, 0x7 }, { 0x11143824, 0x7d0010 },
1531 { 0x11143828, 0x7 }, { 0x11143824, 0xca0010 }, { 0x11143828, 0x8 }, { 0x11143824, 0x3350010 },
1532 { 0x11143828, 0x8 }, { 0x11143824, 0x2460010 }, { 0x11143828, 0x9 }, { 0x11143824, 0x1b90010 },
1533 { 0x11143828, 0x9 }, { 0x11143824, 0x1460010 }, { 0x11143828, 0xa }, { 0x11143824, 0x2b90010 },
1534 { 0x11143828, 0xa }, { 0x11143824, 0x3420010 }, { 0x11143828, 0xb }, { 0x11143824, 0xbd0010 },
1535 { 0x11143828, 0xb }, { 0x11143824, 0xc60010 }, { 0x11143828, 0xc }, { 0x11143824, 0x3390010 },
1536 { 0x11143828, 0xc }, { 0x11143824, 0x2c20010 }, { 0x11143828, 0xd }, { 0x11143824, 0x13d0010 },
1537 { 0x11143828, 0xd }, { 0x11143824, 0x1c80010 }, { 0x11143828, 0xe }, { 0x11143824, 0x2370010 },
1538 { 0x11143828, 0xe }, { 0x11143824, 0x3440010 }, { 0x11143828, 0xf }, { 0x11143824, 0xbb0010 },
1539 { 0x11143828, 0xf }, { 0x11143824, 0x2340010 }, { 0x11143828, 0x10 }, { 0x11143824, 0x1cb0010 },
1540 { 0x11143828, 0x10 }, { 0x11143824, 0x2260010 }, { 0x11143828, 0x11 }, { 0x11143824, 0x1d90010 },
1541 { 0x11143828, 0x11 }, { 0x11143824, 0x1260010 }, { 0x11143828, 0x12 }, { 0x11143824, 0x2d90010 },
1542 { 0x11143828, 0x12 }, { 0x11143824, 0x3220010 }, { 0x11143828, 0x13 }, { 0x11143824, 0xdd0010 },
1543 { 0x11143828, 0x13 }, { 0x11143824, 0xa60010 }, { 0x11143828, 0x14 }, { 0x11143824, 0x3590010 },
1544 { 0x11143828, 0x14 }, { 0x11143824, 0x2a20010 }, { 0x11143828, 0x15 }, { 0x11143824, 0x15d0010 },
1545 { 0x11143828, 0x15 }, { 0x11143824, 0x1920010 }, { 0x11143828, 0x16 }, { 0x11143824, 0x26d0010 },
1546 { 0x11143828, 0x16 }, { 0x11143824, 0x3a10010 }, { 0x11143828, 0x17 }, { 0x11143824, 0x3a10010 },
1547 { 0x11143828, 0x17 }, { 0x11143824, 0x660010 }, { 0x11143828, 0x18 }, { 0x11143824, 0x3990010 },
1548 { 0x11143828, 0x18 }, { 0x11143824, 0x2620010 }, { 0x11143828, 0x19 }, { 0x11143824, 0x19d0010 },
1549 { 0x11143828, 0x19 }, { 0x11143824, 0x1620010 }, { 0x11143828, 0x1a }, { 0x11143824, 0x29d0010 },
1550 { 0x11143828, 0x1a }, { 0x11143824, 0x3610010 }, { 0x11143828, 0x1b }, { 0x11143824, 0x3610010 },
1551 { 0x11143828, 0x1b }, { 0x11143824, 0xe20010 }, { 0x11143828, 0x1c }, { 0x11143824, 0x31d0010 },
1552 { 0x11143828, 0x1c }, { 0x11143824, 0x2e10010 }, { 0x11143828, 0x1d }, { 0x11143824, 0x2e10010 },
1553 { 0x11143828, 0x1d }, { 0x11143824, 0x1e10010 }, { 0x11143828, 0x1e }, { 0x11143824, 0x1e10010 },
1554 { 0x11143828, 0x1e }, { 0x11143824, 0x3480010 }, { 0x11143828, 0x1f }, { 0x11143824, 0xb70010 },
1555 { 0x11143828, 0x1f }, { 0x11143824, 0x2320010 }, { 0x11143828, 0x20 }, { 0x11143824, 0x1cd0010 },
1556 { 0x11143828, 0x20 }, { 0x11143824, 0x2160010 }, { 0x11143828, 0x21 }, { 0x11143824, 0x1e90010 },
1557 { 0x11143828, 0x21 }, { 0x11143824, 0x1160010 }, { 0x11143828, 0x22 }, { 0x11143824, 0x2e90010 },
1558 { 0x11143828, 0x22 }, { 0x11143824, 0x3100010 }, { 0x11143828, 0x23 }, { 0x11143824, 0xef0010 },
1559 { 0x11143828, 0x23 }, { 0x11143824, 0x960010 }, { 0x11143828, 0x24 }, { 0x11143824, 0x3690010 },
1560 { 0x11143828, 0x24 }, { 0x11143824, 0x2900010 }, { 0x11143828, 0x25 }, { 0x11143824, 0x16f0010 },
1561 { 0x11143828, 0x25 }, { 0x11143824, 0x1900010 }, { 0x11143828, 0x26 }, { 0x11143824, 0x26f0010 },
1562 { 0x11143828, 0x26 }, { 0x11143824, 0x3910010 }, { 0x11143828, 0x27 }, { 0x11143824, 0x3910010 },
1563 { 0x11143828, 0x27 }, { 0x11143824, 0x560010 }, { 0x11143828, 0x28 }, { 0x11143824, 0x3a90010 },
1564 { 0x11143828, 0x28 }, { 0x11143824, 0x2500010 }, { 0x11143828, 0x29 }, { 0x11143824, 0x1af0010 },
1565 { 0x11143828, 0x29 }, { 0x11143824, 0x1500010 }, { 0x11143828, 0x2a }, { 0x11143824, 0x2af0010 },
1566 { 0x11143828, 0x2a }, { 0x11143824, 0x3510010 }, { 0x11143828, 0x2b }, { 0x11143824, 0x3510010 },
1567 { 0x11143828, 0x2b }, { 0x11143824, 0xd00010 }, { 0x11143828, 0x2c }, { 0x11143824, 0x32f0010 },
1568 { 0x11143828, 0x2c }, { 0x11143824, 0x2d10010 }, { 0x11143828, 0x2d }, { 0x11143824, 0x2d10010 },
1569 { 0x11143828, 0x2d }, { 0x11143824, 0x1d10010 }, { 0x11143828, 0x2e }, { 0x11143824, 0x1d10010 },
1570 { 0x11143828, 0x2e }, { 0x11143824, 0x2f0010 }, { 0x11143828, 0x2f }, { 0x11143824, 0x3d00010 },
1571 { 0x11143828, 0x2f }, { 0x11143824, 0xb80010 }, { 0x11143828, 0x30 }, { 0x11143824, 0x3470010 },
1572 { 0x11143828, 0x30 }, { 0x11143824, 0x2300010 }, { 0x11143828, 0x31 }, { 0x11143824, 0x1cf0010 },
1573 { 0x11143828, 0x31 }, { 0x11143824, 0x1300010 }, { 0x11143828, 0x32 }, { 0x11143824, 0x2cf0010 },
1574 { 0x11143828, 0x32 }, { 0x11143824, 0x3310010 }, { 0x11143828, 0x33 }, { 0x11143824, 0x3310010 },
1575 { 0x11143828, 0x33 }, { 0x11143824, 0xb00010 }, { 0x11143828, 0x34 }, { 0x11143824, 0x34f0010 },
1576 { 0x11143828, 0x34 }, { 0x11143824, 0x2b10010 }, { 0x11143828, 0x35 }, { 0x11143824, 0x2b10010 },
1577 { 0x11143828, 0x35 }, { 0x11143824, 0x1b10010 }, { 0x11143828, 0x36 }, { 0x11143824, 0x1b10010 },
1578 { 0x11143828, 0x36 }, { 0x11143824, 0x4f0010 }, { 0x11143828, 0x37 }, { 0x11143824, 0x3b00010 },
1579 { 0x11143828, 0x37 }, { 0x11143824, 0x700010 }, { 0x11143828, 0x38 }, { 0x11143824, 0x38f0010 },
1580 { 0x11143828, 0x38 }, { 0x11143824, 0x2710010 }, { 0x11143828, 0x39 }, { 0x11143824, 0x2710010 },
1581 { 0x11143828, 0x39 }, { 0x11143824, 0x1710010 }, { 0x11143828, 0x3a }, { 0x11143824, 0x1710010 },
1582 { 0x11143828, 0x3a }, { 0x11143824, 0x8f0010 }, { 0x11143828, 0x3b }, { 0x11143824, 0x3700010 },
1583 { 0x11143828, 0x3b }, { 0x11143824, 0xf10010 }, { 0x11143828, 0x3c }, { 0x11143824, 0xf10010 },
1584 { 0x11143828, 0x3c }, { 0x11143824, 0x10f0010 }, { 0x11143828, 0x3d }, { 0x11143824, 0x2f00010 },
1585 { 0x11143828, 0x3d }, { 0x11143824, 0x20f0010 }, { 0x11143828, 0x3e }, { 0x11143824, 0x1f00010 },
1586 { 0x11143828, 0x3e }, { 0x11143824, 0x1c20010 }, { 0x11143828, 0x3f }, { 0x11143824, 0x23d0010 },
1587 { 0x11143828, 0x3f }, { 0x11143824, 0x1380010 }, { 0x11143828, 0x40 }, { 0x11143824, 0x2c70010 },
1588 { 0x11143828, 0x40 }, { 0x11143824, 0x2580010 }, { 0x11143828, 0x41 }, { 0x11143824, 0x1a70010 },
1589 { 0x11143828, 0x41 }, { 0x11143824, 0x1580010 }, { 0x11143828, 0x42 }, { 0x11143824, 0x2a70010 },
1590 { 0x11143828, 0x42 }, { 0x11143824, 0x3080010 }, { 0x11143828, 0x43 }, { 0x11143824, 0xf70010 },
1591 { 0x11143828, 0x43 }, { 0x11143824, 0xd80010 }, { 0x11143828, 0x44 }, { 0x11143824, 0x3270010 },
1592 { 0x11143828, 0x44 }, { 0x11143824, 0x2880010 }, { 0x11143828, 0x45 }, { 0x11143824, 0x1770010 },
1593 { 0x11143828, 0x45 }, { 0x11143824, 0x1880010 }, { 0x11143828, 0x46 }, { 0x11143824, 0x2770010 },
1594 { 0x11143828, 0x46 }, { 0x11143824, 0x3890010 }, { 0x11143828, 0x47 }, { 0x11143824, 0x3890010 },
1595 { 0x11143828, 0x47 }, { 0x11143824, 0x14c0010 }, { 0x11143828, 0x48 }, { 0x11143824, 0x2b30010 },
1596 { 0x11143828, 0x48 }, { 0x11143824, 0x2480010 }, { 0x11143828, 0x49 }, { 0x11143824, 0x1b70010 },
1597 { 0x11143828, 0x49 }, { 0x11143824, 0x1480010 }, { 0x11143828, 0x4a }, { 0x11143824, 0x2b70010 },
1598 { 0x11143828, 0x4a }, { 0x11143824, 0x3490010 }, { 0x11143828, 0x4b }, { 0x11143824, 0x3490010 },
1599 { 0x11143828, 0x4b }, { 0x11143824, 0xc80010 }, { 0x11143828, 0x4c }, { 0x11143824, 0x3370010 },
1600 { 0x11143828, 0x4c }, { 0x11143824, 0x2c90010 }, { 0x11143828, 0x4d }, { 0x11143824, 0x2c90010 },
1601 { 0x11143828, 0x4d }, { 0x11143824, 0x1c90010 }, { 0x11143828, 0x4e }, { 0x11143824, 0x1c90010 },
1602 { 0x11143828, 0x4e }, { 0x11143824, 0x370010 }, { 0x11143828, 0x4f }, { 0x11143824, 0x3c80010 },
1603 { 0x11143828, 0x4f }, { 0x11143824, 0x3280010 }, { 0x11143828, 0x50 }, { 0x11143824, 0xd70010 },
1604 { 0x11143828, 0x50 }, { 0x11143824, 0x2280010 }, { 0x11143828, 0x51 }, { 0x11143824, 0x1d70010 },
1605 { 0x11143828, 0x51 }, { 0x11143824, 0x1280010 }, { 0x11143828, 0x52 }, { 0x11143824, 0x2d70010 },
1606 { 0x11143828, 0x52 }, { 0x11143824, 0x3290010 }, { 0x11143828, 0x53 }, { 0x11143824, 0x3290010 },
1607 { 0x11143828, 0x53 }, { 0x11143824, 0xa80010 }, { 0x11143828, 0x54 }, { 0x11143824, 0x3570010 },
1608 { 0x11143828, 0x54 }, { 0x11143824, 0x2a90010 }, { 0x11143828, 0x55 }, { 0x11143824, 0x2a90010 },
1609 { 0x11143828, 0x55 }, { 0x11143824, 0x1a90010 }, { 0x11143828, 0x56 }, { 0x11143824, 0x1a90010 },
1610 { 0x11143828, 0x56 }, { 0x11143824, 0x3a80010 }, { 0x11143828, 0x57 }, { 0x11143824, 0x3a80010 },
1611 { 0x11143828, 0x57 }, { 0x11143824, 0x680010 }, { 0x11143828, 0x58 }, { 0x11143824, 0x3970010 },
1612 { 0x11143828, 0x58 }, { 0x11143824, 0x2690010 }, { 0x11143828, 0x59 }, { 0x11143824, 0x2690010 },
1613 { 0x11143828, 0x59 }, { 0x11143824, 0x1690010 }, { 0x11143828, 0x5a }, { 0x11143824, 0x1690010 },
1614 { 0x11143828, 0x5a }, { 0x11143824, 0x3680010 }, { 0x11143828, 0x5b }, { 0x11143824, 0x3680010 },
1615 { 0x11143828, 0x5b }, { 0x11143824, 0xe90010 }, { 0x11143828, 0x5c }, { 0x11143824, 0xe90010 },
1616 { 0x11143828, 0x5c }, { 0x11143824, 0x2e80010 }, { 0x11143828, 0x5d }, { 0x11143824, 0x2e80010 },
1617 { 0x11143828, 0x5d }, { 0x11143824, 0x1e80010 }, { 0x11143828, 0x5e }, { 0x11143824, 0x1e80010 },
1618 { 0x11143828, 0x5e }, { 0x11143824, 0x1a80010 }, { 0x11143828, 0x5f }, { 0x11143824, 0x2570010 },
1619 { 0x11143828, 0x5f }, { 0x11143824, 0x3180010 }, { 0x11143828, 0x60 }, { 0x11143824, 0xe70010 },
1620 { 0x11143828, 0x60 }, { 0x11143824, 0x2180010 }, { 0x11143828, 0x61 }, { 0x11143824, 0x1e70010 },
1621 { 0x11143828, 0x61 }, { 0x11143824, 0x1180010 }, { 0x11143828, 0x62 }, { 0x11143824, 0x2e70010 },
1622 { 0x11143828, 0x62 }, { 0x11143824, 0x3190010 }, { 0x11143828, 0x63 }, { 0x11143824, 0x3190010 },
1623 { 0x11143828, 0x63 }, { 0x11143824, 0x980010 }, { 0x11143828, 0x64 }, { 0x11143824, 0x3670010 },
1624 { 0x11143828, 0x64 }, { 0x11143824, 0x2990010 }, { 0x11143828, 0x65 }, { 0x11143824, 0x2990010 },
1625 { 0x11143828, 0x65 }, { 0x11143824, 0x1990010 }, { 0x11143828, 0x66 }, { 0x11143824, 0x1990010 },
1626 { 0x11143828, 0x66 }, { 0x11143824, 0x3980010 }, { 0x11143828, 0x67 }, { 0x11143824, 0x3980010 },
1627 { 0x11143828, 0x67 }, { 0x11143824, 0x580010 }, { 0x11143828, 0x68 }, { 0x11143824, 0x3a70010 },
1628 { 0x11143828, 0x68 }, { 0x11143824, 0x2590010 }, { 0x11143828, 0x69 }, { 0x11143824, 0x2590010 },
1629 { 0x11143828, 0x69 }, { 0x11143824, 0x1590010 }, { 0x11143828, 0x6a }, { 0x11143824, 0x1590010 },
1630 { 0x11143828, 0x6a }, { 0x11143824, 0x3580010 }, { 0x11143828, 0x6b }, { 0x11143824, 0x3580010 },
1631 { 0x11143828, 0x6b }, { 0x11143824, 0xd90010 }, { 0x11143828, 0x6c }, { 0x11143824, 0xd90010 },
1632 { 0x11143828, 0x6c }, { 0x11143824, 0x2d80010 }, { 0x11143828, 0x6d }, { 0x11143824, 0x2d80010 },
1633 { 0x11143828, 0x6d }, { 0x11143824, 0x1d80010 }, { 0x11143828, 0x6e }, { 0x11143824, 0x1d80010 },
1634 { 0x11143828, 0x6e }, { 0x11143824, 0x2980010 }, { 0x11143828, 0x6f }, { 0x11143824, 0x1670010 },
1635 { 0x11143828, 0x6f }, { 0x11143824, 0x380010 }, { 0x11143828, 0x70 }, { 0x11143824, 0x3c70010 },
1636 { 0x11143828, 0x70 }, { 0x11143824, 0x2390010 }, { 0x11143828, 0x71 }, { 0x11143824, 0x2390010 },
1637 { 0x11143828, 0x71 }, { 0x11143824, 0x1390010 }, { 0x11143828, 0x72 }, { 0x11143824, 0x1390010 },
1638 { 0x11143828, 0x72 }, { 0x11143824, 0x3380010 }, { 0x11143828, 0x73 }, { 0x11143824, 0x3380010 },
1639 { 0x11143828, 0x73 }, { 0x11143824, 0xb90010 }, { 0x11143828, 0x74 }, { 0x11143824, 0xb90010 },
1640 { 0x11143828, 0x74 }, { 0x11143824, 0x2b80010 }, { 0x11143828, 0x75 }, { 0x11143824, 0x2b80010 },
1641 { 0x11143828, 0x75 }, { 0x11143824, 0x1b80010 }, { 0x11143828, 0x76 }, { 0x11143824, 0x1b80010 },
1642 { 0x11143828, 0x76 }, { 0x11143824, 0x470010 }, { 0x11143828, 0x77 }, { 0x11143824, 0x3b80010 },
1643 { 0x11143828, 0x77 }, { 0x11143824, 0x790010 }, { 0x11143828, 0x78 }, { 0x11143824, 0x790010 },
1644 { 0x11143828, 0x78 }, { 0x11143824, 0x2780010 }, { 0x11143828, 0x79 }, { 0x11143824, 0x2780010 },
1645 { 0x11143828, 0x79 }, { 0x11143824, 0x1780010 }, { 0x11143828, 0x7a }, { 0x11143824, 0x1780010 },
1646 { 0x11143828, 0x7a }, { 0x11143824, 0x870010 }, { 0x11143828, 0x7b }, { 0x11143824, 0x3780010 },
1647 { 0x11143828, 0x7b }, { 0x11143824, 0xf80010 }, { 0x11143828, 0x7c }, { 0x11143824, 0xf80010 },
1648 { 0x11143828, 0x7c }, { 0x11143824, 0x1070010 }, { 0x11143828, 0x7d }, { 0x11143824, 0x2f80010 },
1649 { 0x11143828, 0x7d }, { 0x11143824, 0x2070010 }, { 0x11143828, 0x7e }, { 0x11143824, 0x1f80010 },
1650 { 0x11143828, 0x7e }, { 0x11143824, 0x2680010 }, { 0x11143828, 0x7f }, { 0x11143824, 0x1970010 },
1651 { 0x11143828, 0x7f }, { 0x11143824, 0x1340010 }, { 0x11143828, 0x80 }, { 0x11143824, 0x2cb0010 },
1652 { 0x11143828, 0x80 }, { 0x11143824, 0x21c0010 }, { 0x11143828, 0x81 }, { 0x11143824, 0x1e30010 },
1653 { 0x11143828, 0x81 }, { 0x11143824, 0x11c0010 }, { 0x11143828, 0x82 }, { 0x11143824, 0x2e30010 },
1654 { 0x11143828, 0x82 }, { 0x11143824, 0x3040010 }, { 0x11143828, 0x83 }, { 0x11143824, 0xfb0010 },
1655 { 0x11143828, 0x83 }, { 0x11143824, 0x9c0010 }, { 0x11143828, 0x84 }, { 0x11143824, 0x3630010 },
1656 { 0x11143828, 0x84 }, { 0x11143824, 0x2840010 }, { 0x11143828, 0x85 }, { 0x11143824, 0x17b0010 },
1657 { 0x11143828, 0x85 }, { 0x11143824, 0x1840010 }, { 0x11143828, 0x86 }, { 0x11143824, 0x27b0010 },
1658 { 0x11143828, 0x86 }, { 0x11143824, 0x3850010 }, { 0x11143828, 0x87 }, { 0x11143824, 0x3850010 },
1659 { 0x11143828, 0x87 }, { 0x11143824, 0x5c0010 }, { 0x11143828, 0x88 }, { 0x11143824, 0x3a30010 },
1660 { 0x11143828, 0x88 }, { 0x11143824, 0x2440010 }, { 0x11143828, 0x89 }, { 0x11143824, 0x1bb0010 },
1661 { 0x11143828, 0x89 }, { 0x11143824, 0x1440010 }, { 0x11143828, 0x8a }, { 0x11143824, 0x2bb0010 },
1662 { 0x11143828, 0x8a }, { 0x11143824, 0x3450010 }, { 0x11143828, 0x8b }, { 0x11143824, 0x3450010 },
1663 { 0x11143828, 0x8b }, { 0x11143824, 0xc40010 }, { 0x11143828, 0x8c }, { 0x11143824, 0x33b0010 },
1664 { 0x11143828, 0x8c }, { 0x11143824, 0x2c50010 }, { 0x11143828, 0x8d }, { 0x11143824, 0x2c50010 },
1665 { 0x11143828, 0x8d }, { 0x11143824, 0x1c50010 }, { 0x11143828, 0x8e }, { 0x11143824, 0x1c50010 },
1666 { 0x11143828, 0x8e }, { 0x11143824, 0x3b0010 }, { 0x11143828, 0x8f }, { 0x11143824, 0x3c40010 },
1667 { 0x11143828, 0x8f }, { 0x11143824, 0x3240010 }, { 0x11143828, 0x90 }, { 0x11143824, 0xdb0010 },
1668 { 0x11143828, 0x90 }, { 0x11143824, 0x2240010 }, { 0x11143828, 0x91 }, { 0x11143824, 0x1db0010 },
1669 { 0x11143828, 0x91 }, { 0x11143824, 0x1240010 }, { 0x11143828, 0x92 }, { 0x11143824, 0x2db0010 },
1670 { 0x11143828, 0x92 }, { 0x11143824, 0x3250010 }, { 0x11143828, 0x93 }, { 0x11143824, 0x3250010 },
1671 { 0x11143828, 0x93 }, { 0x11143824, 0xa40010 }, { 0x11143828, 0x94 }, { 0x11143824, 0x35b0010 },
1672 { 0x11143828, 0x94 }, { 0x11143824, 0x2a50010 }, { 0x11143828, 0x95 }, { 0x11143824, 0x2a50010 },
1673 { 0x11143828, 0x95 }, { 0x11143824, 0x1a50010 }, { 0x11143828, 0x96 }, { 0x11143824, 0x1a50010 },
1674 { 0x11143828, 0x96 }, { 0x11143824, 0x3a40010 }, { 0x11143828, 0x97 }, { 0x11143824, 0x3a40010 },
1675 { 0x11143828, 0x97 }, { 0x11143824, 0x640010 }, { 0x11143828, 0x98 }, { 0x11143824, 0x39b0010 },
1676 { 0x11143828, 0x98 }, { 0x11143824, 0x2650010 }, { 0x11143828, 0x99 }, { 0x11143824, 0x2650010 },
1677 { 0x11143828, 0x99 }, { 0x11143824, 0x1650010 }, { 0x11143828, 0x9a }, { 0x11143824, 0x1650010 },
1678 { 0x11143828, 0x9a }, { 0x11143824, 0x3640010 }, { 0x11143828, 0x9b }, { 0x11143824, 0x3640010 },
1679 { 0x11143828, 0x9b }, { 0x11143824, 0xe50010 }, { 0x11143828, 0x9c }, { 0x11143824, 0xe50010 },
1680 { 0x11143828, 0x9c }, { 0x11143824, 0x2e40010 }, { 0x11143828, 0x9d }, { 0x11143824, 0x2e40010 },
1681 { 0x11143828, 0x9d }, { 0x11143824, 0x1e40010 }, { 0x11143828, 0x9e }, { 0x11143824, 0x1e40010 },
1682 { 0x11143828, 0x9e }, { 0x11143824, 0x1a40010 }, { 0x11143828, 0x9f }, { 0x11143824, 0x25b0010 },
1683 { 0x11143828, 0x9f }, { 0x11143824, 0x3140010 }, { 0x11143828, 0xa0 }, { 0x11143824, 0xeb0010 },
1684 { 0x11143828, 0xa0 }, { 0x11143824, 0x2140010 }, { 0x11143828, 0xa1 }, { 0x11143824, 0x1eb0010 },
1685 { 0x11143828, 0xa1 }, { 0x11143824, 0x1140010 }, { 0x11143828, 0xa2 }, { 0x11143824, 0x2eb0010 },
1686 { 0x11143828, 0xa2 }, { 0x11143824, 0x3150010 }, { 0x11143828, 0xa3 }, { 0x11143824, 0x3150010 },
1687 { 0x11143828, 0xa3 }, { 0x11143824, 0x940010 }, { 0x11143828, 0xa4 }, { 0x11143824, 0x36b0010 },
1688 { 0x11143828, 0xa4 }, { 0x11143824, 0x2950010 }, { 0x11143828, 0xa5 }, { 0x11143824, 0x2950010 },
1689 { 0x11143828, 0xa5 }, { 0x11143824, 0x1950010 }, { 0x11143828, 0xa6 }, { 0x11143824, 0x1950010 },
1690 { 0x11143828, 0xa6 }, { 0x11143824, 0x3940010 }, { 0x11143828, 0xa7 }, { 0x11143824, 0x3940010 },
1691 { 0x11143828, 0xa7 }, { 0x11143824, 0x540010 }, { 0x11143828, 0xa8 }, { 0x11143824, 0x3ab0010 },
1692 { 0x11143828, 0xa8 }, { 0x11143824, 0x2550010 }, { 0x11143828, 0xa9 }, { 0x11143824, 0x2550010 },
1693 { 0x11143828, 0xa9 }, { 0x11143824, 0x1550010 }, { 0x11143828, 0xaa }, { 0x11143824, 0x1550010 },
1694 { 0x11143828, 0xaa }, { 0x11143824, 0x3540010 }, { 0x11143828, 0xab }, { 0x11143824, 0x3540010 },
1695 { 0x11143828, 0xab }, { 0x11143824, 0xd50010 }, { 0x11143828, 0xac }, { 0x11143824, 0xd50010 },
1696 { 0x11143828, 0xac }, { 0x11143824, 0x2d40010 }, { 0x11143828, 0xad }, { 0x11143824, 0x2d40010 },
1697 { 0x11143828, 0xad }, { 0x11143824, 0x1d40010 }, { 0x11143828, 0xae }, { 0x11143824, 0x1d40010 },
1698 { 0x11143828, 0xae }, { 0x11143824, 0x2940010 }, { 0x11143828, 0xaf }, { 0x11143824, 0x16b0010 },
1699 { 0x11143828, 0xaf }, { 0x11143824, 0x340010 }, { 0x11143828, 0xb0 }, { 0x11143824, 0x3cb0010 },
1700 { 0x11143828, 0xb0 }, { 0x11143824, 0x2350010 }, { 0x11143828, 0xb1 }, { 0x11143824, 0x2350010 },
1701 { 0x11143828, 0xb1 }, { 0x11143824, 0x1350010 }, { 0x11143828, 0xb2 }, { 0x11143824, 0x1350010 },
1702 { 0x11143828, 0xb2 }, { 0x11143824, 0x3340010 }, { 0x11143828, 0xb3 }, { 0x11143824, 0x3340010 },
1703 { 0x11143828, 0xb3 }, { 0x11143824, 0xb50010 }, { 0x11143828, 0xb4 }, { 0x11143824, 0xb50010 },
1704 { 0x11143828, 0xb4 }, { 0x11143824, 0x2b40010 }, { 0x11143828, 0xb5 }, { 0x11143824, 0x2b40010 },
1705 { 0x11143828, 0xb5 }, { 0x11143824, 0x1b40010 }, { 0x11143828, 0xb6 }, { 0x11143824, 0x1b40010 },
1706 { 0x11143828, 0xb6 }, { 0x11143824, 0x4b0010 }, { 0x11143828, 0xb7 }, { 0x11143824, 0x3b40010 },
1707 { 0x11143828, 0xb7 }, { 0x11143824, 0x750010 }, { 0x11143828, 0xb8 }, { 0x11143824, 0x750010 },
1708 { 0x11143828, 0xb8 }, { 0x11143824, 0x2740010 }, { 0x11143828, 0xb9 }, { 0x11143824, 0x2740010 },
1709 { 0x11143828, 0xb9 }, { 0x11143824, 0x1740010 }, { 0x11143828, 0xba }, { 0x11143824, 0x1740010 },
1710 { 0x11143828, 0xba }, { 0x11143824, 0x8b0010 }, { 0x11143828, 0xbb }, { 0x11143824, 0x3740010 },
1711 { 0x11143828, 0xbb }, { 0x11143824, 0xf40010 }, { 0x11143828, 0xbc }, { 0x11143824, 0xf40010 },
1712 { 0x11143828, 0xbc }, { 0x11143824, 0x10b0010 }, { 0x11143828, 0xbd }, { 0x11143824, 0x2f40010 },
1713 { 0x11143828, 0xbd }, { 0x11143824, 0x20b0010 }, { 0x11143828, 0xbe }, { 0x11143824, 0x1f40010 },
1714 { 0x11143828, 0xbe }, { 0x11143824, 0x2640010 }, { 0x11143828, 0xbf }, { 0x11143824, 0x19b0010 },
1715 { 0x11143828, 0xbf }, { 0x11143824, 0x30c0010 }, { 0x11143828, 0xc0 }, { 0x11143824, 0xf30010 },
1716 { 0x11143828, 0xc0 }, { 0x11143824, 0x20c0010 }, { 0x11143828, 0xc1 }, { 0x11143824, 0x1f30010 },
1717 { 0x11143828, 0xc1 }, { 0x11143824, 0x10c0010 }, { 0x11143828, 0xc2 }, { 0x11143824, 0x2f30010 },
1718 { 0x11143828, 0xc2 }, { 0x11143824, 0x30d0010 }, { 0x11143828, 0xc3 }, { 0x11143824, 0x30d0010 },
1719 { 0x11143828, 0xc3 }, { 0x11143824, 0x8c0010 }, { 0x11143828, 0xc4 }, { 0x11143824, 0x3730010 },
1720 { 0x11143828, 0xc4 }, { 0x11143824, 0x28d0010 }, { 0x11143828, 0xc5 }, { 0x11143824, 0x28d0010 },
1721 { 0x11143828, 0xc5 }, { 0x11143824, 0x18d0010 }, { 0x11143828, 0xc6 }, { 0x11143824, 0x18d0010 },
1722 { 0x11143828, 0xc6 }, { 0x11143824, 0x38c0010 }, { 0x11143828, 0xc7 }, { 0x11143824, 0x38c0010 },
1723 { 0x11143828, 0xc7 }, { 0x11143824, 0x4c0010 }, { 0x11143828, 0xc8 }, { 0x11143824, 0x3b30010 },
1724 { 0x11143828, 0xc8 }, { 0x11143824, 0x24d0010 }, { 0x11143828, 0xc9 }, { 0x11143824, 0x24d0010 },
1725 { 0x11143828, 0xc9 }, { 0x11143824, 0x14d0010 }, { 0x11143828, 0xca }, { 0x11143824, 0x14d0010 },
1726 { 0x11143828, 0xca }, { 0x11143824, 0x34c0010 }, { 0x11143828, 0xcb }, { 0x11143824, 0x34c0010 },
1727 { 0x11143828, 0xcb }, { 0x11143824, 0xcd0010 }, { 0x11143828, 0xcc }, { 0x11143824, 0xcd0010 },
1728 { 0x11143828, 0xcc }, { 0x11143824, 0x2cc0010 }, { 0x11143828, 0xcd }, { 0x11143824, 0x2cc0010 },
1729 { 0x11143828, 0xcd }, { 0x11143824, 0x1cc0010 }, { 0x11143828, 0xce }, { 0x11143824, 0x1cc0010 },
1730 { 0x11143828, 0xce }, { 0x11143824, 0x28c0010 }, { 0x11143828, 0xcf }, { 0x11143824, 0x1730010 },
1731 { 0x11143828, 0xcf }, { 0x11143824, 0x2c0010 }, { 0x11143828, 0xd0 }, { 0x11143824, 0x3d30010 },
1732 { 0x11143828, 0xd0 }, { 0x11143824, 0x22d0010 }, { 0x11143828, 0xd1 }, { 0x11143824, 0x22d0010 },
1733 { 0x11143828, 0xd1 }, { 0x11143824, 0x12d0010 }, { 0x11143828, 0xd2 }, { 0x11143824, 0x12d0010 },
1734 { 0x11143828, 0xd2 }, { 0x11143824, 0x32c0010 }, { 0x11143828, 0xd3 }, { 0x11143824, 0x32c0010 },
1735 { 0x11143828, 0xd3 }, { 0x11143824, 0xad0010 }, { 0x11143828, 0xd4 }, { 0x11143824, 0xad0010 },
1736 { 0x11143828, 0xd4 }, { 0x11143824, 0x2ac0010 }, { 0x11143828, 0xd5 }, { 0x11143824, 0x2ac0010 },
1737 { 0x11143828, 0xd5 }, { 0x11143824, 0x1ac0010 }, { 0x11143828, 0xd6 }, { 0x11143824, 0x1ac0010 },
1738 { 0x11143828, 0xd6 }, { 0x11143824, 0x530010 }, { 0x11143828, 0xd7 }, { 0x11143824, 0x3ac0010 },
1739 { 0x11143828, 0xd7 }, { 0x11143824, 0x6d0010 }, { 0x11143828, 0xd8 }, { 0x11143824, 0x6d0010 },
1740 { 0x11143828, 0xd8 }, { 0x11143824, 0x26c0010 }, { 0x11143828, 0xd9 }, { 0x11143824, 0x26c0010 },
1741 { 0x11143828, 0xd9 }, { 0x11143824, 0x16c0010 }, { 0x11143828, 0xda }, { 0x11143824, 0x16c0010 },
1742 { 0x11143828, 0xda }, { 0x11143824, 0x930010 }, { 0x11143828, 0xdb }, { 0x11143824, 0x36c0010 },
1743 { 0x11143828, 0xdb }, { 0x11143824, 0xec0010 }, { 0x11143828, 0xdc }, { 0x11143824, 0xec0010 },
1744 { 0x11143828, 0xdc }, { 0x11143824, 0x1130010 }, { 0x11143828, 0xdd }, { 0x11143824, 0x2ec0010 },
1745 { 0x11143828, 0xdd }, { 0x11143824, 0x2130010 }, { 0x11143828, 0xde }, { 0x11143824, 0x1ec0010 },
1746 { 0x11143828, 0xde }, { 0x11143824, 0x24c0010 }, { 0x11143828, 0xdf }, { 0x11143824, 0x1b30010 },
1747 { 0x11143828, 0xdf }, { 0x11143824, 0xac0010 }, { 0x11143828, 0xe0 }, { 0x11143824, 0x3530010 },
1748 { 0x11143828, 0xe0 }, { 0x11143824, 0x21d0010 }, { 0x11143828, 0xe1 }, { 0x11143824, 0x21d0010 },
1749 { 0x11143828, 0xe1 }, { 0x11143824, 0x11d0010 }, { 0x11143828, 0xe2 }, { 0x11143824, 0x11d0010 },
1750 { 0x11143828, 0xe2 }, { 0x11143824, 0x31c0010 }, { 0x11143828, 0xe3 }, { 0x11143824, 0x31c0010 },
1751 { 0x11143828, 0xe3 }, { 0x11143824, 0x9d0010 }, { 0x11143828, 0xe4 }, { 0x11143824, 0x9d0010 },
1752 { 0x11143828, 0xe4 }, { 0x11143824, 0x29c0010 }, { 0x11143828, 0xe5 }, { 0x11143824, 0x29c0010 },
1753 { 0x11143828, 0xe5 }, { 0x11143824, 0x19c0010 }, { 0x11143828, 0xe6 }, { 0x11143824, 0x19c0010 },
1754 { 0x11143828, 0xe6 }, { 0x11143824, 0x630010 }, { 0x11143828, 0xe7 }, { 0x11143824, 0x39c0010 },
1755 { 0x11143828, 0xe7 }, { 0x11143824, 0x5d0010 }, { 0x11143828, 0xe8 }, { 0x11143824, 0x5d0010 },
1756 { 0x11143828, 0xe8 }, { 0x11143824, 0x25c0010 }, { 0x11143828, 0xe9 }, { 0x11143824, 0x25c0010 },
1757 { 0x11143828, 0xe9 }, { 0x11143824, 0x15c0010 }, { 0x11143828, 0xea }, { 0x11143824, 0x15c0010 },
1758 { 0x11143828, 0xea }, { 0x11143824, 0xa30010 }, { 0x11143828, 0xeb }, { 0x11143824, 0x35c0010 },
1759 { 0x11143828, 0xeb }, { 0x11143824, 0xdc0010 }, { 0x11143828, 0xec }, { 0x11143824, 0xdc0010 },
1760 { 0x11143828, 0xec }, { 0x11143824, 0x1230010 }, { 0x11143828, 0xed }, { 0x11143824, 0x2dc0010 },
1761 { 0x11143828, 0xed }, { 0x11143824, 0x2230010 }, { 0x11143828, 0xee }, { 0x11143824, 0x1dc0010 },
1762 { 0x11143828, 0xee }, { 0x11143824, 0xcc0010 }, { 0x11143828, 0xef }, { 0x11143824, 0x3330010 },
1763 { 0x11143828, 0xef }, { 0x11143824, 0x720010 }, { 0x11143828, 0xf0 }, { 0x11143824, 0x38d0010 },
1764 { 0x11143828, 0xf0 }, { 0x11143824, 0x23c0010 }, { 0x11143828, 0xf1 }, { 0x11143824, 0x23c0010 },
1765 { 0x11143828, 0xf1 }, { 0x11143824, 0x13c0010 }, { 0x11143828, 0xf2 }, { 0x11143824, 0x13c0010 },
1766 { 0x11143828, 0xf2 }, { 0x11143824, 0xc30010 }, { 0x11143828, 0xf3 }, { 0x11143824, 0x33c0010 },
1767 { 0x11143828, 0xf3 }, { 0x11143824, 0xbc0010 }, { 0x11143828, 0xf4 }, { 0x11143824, 0xbc0010 },
1768 { 0x11143828, 0xf4 }, { 0x11143824, 0x1430010 }, { 0x11143828, 0xf5 }, { 0x11143824, 0x2bc0010 },
1769 { 0x11143828, 0xf5 }, { 0x11143824, 0x2430010 }, { 0x11143828, 0xf6 }, { 0x11143824, 0x1bc0010 },
1770 { 0x11143828, 0xf6 }, { 0x11143824, 0x430010 }, { 0x11143828, 0xf7 }, { 0x11143824, 0x3bc0010 },
1771 { 0x11143828, 0xf7 }, { 0x11143824, 0x7c0010 }, { 0x11143828, 0xf8 }, { 0x11143824, 0x7c0010 },
1772 { 0x11143828, 0xf8 }, { 0x11143824, 0x1830010 }, { 0x11143828, 0xf9 }, { 0x11143824, 0x27c0010 },
1773 { 0x11143828, 0xf9 }, { 0x11143824, 0x2830010 }, { 0x11143828, 0xfa }, { 0x11143824, 0x17c0010 },
1774 { 0x11143828, 0xfa }, { 0x11143824, 0x830010 }, { 0x11143828, 0xfb }, { 0x11143824, 0x37c0010 },
1775 { 0x11143828, 0xfb }, { 0x11143824, 0x3030010 }, { 0x11143828, 0xfc }, { 0x11143824, 0xfc0010 },
1776 { 0x11143828, 0xfc }, { 0x11143824, 0x1030010 }, { 0x11143828, 0xfd }, { 0x11143824, 0x2fc0010 },
1777 { 0x11143828, 0xfd }, { 0x11143824, 0x2030010 }, { 0x11143828, 0xfe }, { 0x11143824, 0x1fc0010 },
1778 { 0x11143828, 0xfe }, { 0x11143824, 0x2a40010 }, { 0x11143828, 0xff }, { 0x11143824, 0x15b0010 },
1779 { 0x11143828, 0xff }, { 0x11143824, 0xaa0010 }, { 0x11143828, 0x100 }, { 0x11143824, 0x3550010 },
1780 { 0x11143828, 0x100 }, { 0x11143824, 0x21a0010 }, { 0x11143828, 0x101 }, { 0x11143824, 0x1e50010 },
1781 { 0x11143828, 0x101 }, { 0x11143824, 0x11a0010 }, { 0x11143828, 0x102 }, { 0x11143824, 0x2e50010 },
1782 { 0x11143828, 0x102 }, { 0x11143824, 0x3020010 }, { 0x11143828, 0x103 }, { 0x11143824, 0xfd0010 },
1783 { 0x11143828, 0x103 }, { 0x11143824, 0x9a0010 }, { 0x11143828, 0x104 }, { 0x11143824, 0x3650010 },
1784 { 0x11143828, 0x104 }, { 0x11143824, 0x2820010 }, { 0x11143828, 0x105 }, { 0x11143824, 0x17d0010 },
1785 { 0x11143828, 0x105 }, { 0x11143824, 0x1820010 }, { 0x11143828, 0x106 }, { 0x11143824, 0x27d0010 },
1786 { 0x11143828, 0x106 }, { 0x11143824, 0x3830010 }, { 0x11143828, 0x107 }, { 0x11143824, 0x3830010 },
1787 { 0x11143828, 0x107 }, { 0x11143824, 0x5a0010 }, { 0x11143828, 0x108 }, { 0x11143824, 0x3a50010 },
1788 { 0x11143828, 0x108 }, { 0x11143824, 0x2420010 }, { 0x11143828, 0x109 }, { 0x11143824, 0x1bd0010 },
1789 { 0x11143828, 0x109 }, { 0x11143824, 0x1420010 }, { 0x11143828, 0x10a }, { 0x11143824, 0x2bd0010 },
1790 { 0x11143828, 0x10a }, { 0x11143824, 0x3430010 }, { 0x11143828, 0x10b }, { 0x11143824, 0x3430010 },
1791 { 0x11143828, 0x10b }, { 0x11143824, 0xc20010 }, { 0x11143828, 0x10c }, { 0x11143824, 0x33d0010 },
1792 { 0x11143828, 0x10c }, { 0x11143824, 0x2c30010 }, { 0x11143828, 0x10d }, { 0x11143824, 0x2c30010 },
1793 { 0x11143828, 0x10d }, { 0x11143824, 0x1c30010 }, { 0x11143828, 0x10e }, { 0x11143824, 0x1c30010 },
1794 { 0x11143828, 0x10e }, { 0x11143824, 0x3d0010 }, { 0x11143828, 0x10f }, { 0x11143824, 0x3c20010 },
1795 { 0x11143828, 0x10f }, { 0x11143824, 0x22a0010 }, { 0x11143828, 0x110 }, { 0x11143824, 0x1d50010 },
1796 { 0x11143828, 0x110 }, { 0x11143824, 0x2220010 }, { 0x11143828, 0x111 }, { 0x11143824, 0x1dd0010 },
1797 { 0x11143828, 0x111 }, { 0x11143824, 0x1220010 }, { 0x11143828, 0x112 }, { 0x11143824, 0x2dd0010 },
1798 { 0x11143828, 0x112 }, { 0x11143824, 0x3230010 }, { 0x11143828, 0x113 }, { 0x11143824, 0x3230010 },
1799 { 0x11143828, 0x113 }, { 0x11143824, 0xa20010 }, { 0x11143828, 0x114 }, { 0x11143824, 0x35d0010 },
1800 { 0x11143828, 0x114 }, { 0x11143824, 0x2a30010 }, { 0x11143828, 0x115 }, { 0x11143824, 0x2a30010 },
1801 { 0x11143828, 0x115 }, { 0x11143824, 0x1a30010 }, { 0x11143828, 0x116 }, { 0x11143824, 0x1a30010 },
1802 { 0x11143828, 0x116 }, { 0x11143824, 0x3a20010 }, { 0x11143828, 0x117 }, { 0x11143824, 0x3a20010 },
1803 { 0x11143828, 0x117 }, { 0x11143824, 0x620010 }, { 0x11143828, 0x118 }, { 0x11143824, 0x39d0010 },
1804 { 0x11143828, 0x118 }, { 0x11143824, 0x2630010 }, { 0x11143828, 0x119 }, { 0x11143824, 0x2630010 },
1805 { 0x11143828, 0x119 }, { 0x11143824, 0x1630010 }, { 0x11143828, 0x11a }, { 0x11143824, 0x1630010 },
1806 { 0x11143828, 0x11a }, { 0x11143824, 0x3620010 }, { 0x11143828, 0x11b }, { 0x11143824, 0x3620010 },
1807 { 0x11143828, 0x11b }, { 0x11143824, 0xe30010 }, { 0x11143828, 0x11c }, { 0x11143824, 0xe30010 },
1808 { 0x11143828, 0x11c }, { 0x11143824, 0x2e20010 }, { 0x11143828, 0x11d }, { 0x11143824, 0x2e20010 },
1809 { 0x11143828, 0x11d }, { 0x11143824, 0x1e20010 }, { 0x11143828, 0x11e }, { 0x11143824, 0x1e20010 },
1810 { 0x11143828, 0x11e }, { 0x11143824, 0x1a20010 }, { 0x11143828, 0x11f }, { 0x11143824, 0x25d0010 },
1811 { 0x11143828, 0x11f }, { 0x11143824, 0x3120010 }, { 0x11143828, 0x120 }, { 0x11143824, 0xed0010 },
1812 { 0x11143828, 0x120 }, { 0x11143824, 0x2120010 }, { 0x11143828, 0x121 }, { 0x11143824, 0x1ed0010 },
1813 { 0x11143828, 0x121 }, { 0x11143824, 0x1120010 }, { 0x11143828, 0x122 }, { 0x11143824, 0x2ed0010 },
1814 { 0x11143828, 0x122 }, { 0x11143824, 0x3130010 }, { 0x11143828, 0x123 }, { 0x11143824, 0x3130010 },
1815 { 0x11143828, 0x123 }, { 0x11143824, 0x920010 }, { 0x11143828, 0x124 }, { 0x11143824, 0x36d0010 },
1816 { 0x11143828, 0x124 }, { 0x11143824, 0x2930010 }, { 0x11143828, 0x125 }, { 0x11143824, 0x2930010 },
1817 { 0x11143828, 0x125 }, { 0x11143824, 0x1930010 }, { 0x11143828, 0x126 }, { 0x11143824, 0x1930010 },
1818 { 0x11143828, 0x126 }, { 0x11143824, 0x3920010 }, { 0x11143828, 0x127 }, { 0x11143824, 0x3920010 },
1819 { 0x11143828, 0x127 }, { 0x11143824, 0x520010 }, { 0x11143828, 0x128 }, { 0x11143824, 0x3ad0010 },
1820 { 0x11143828, 0x128 }, { 0x11143824, 0x2530010 }, { 0x11143828, 0x129 }, { 0x11143824, 0x2530010 },
1821 { 0x11143828, 0x129 }, { 0x11143824, 0x1530010 }, { 0x11143828, 0x12a }, { 0x11143824, 0x1530010 },
1822 { 0x11143828, 0x12a }, { 0x11143824, 0x3520010 }, { 0x11143828, 0x12b }, { 0x11143824, 0x3520010 },
1823 { 0x11143828, 0x12b }, { 0x11143824, 0xd30010 }, { 0x11143828, 0x12c }, { 0x11143824, 0xd30010 },
1824 { 0x11143828, 0x12c }, { 0x11143824, 0x2d20010 }, { 0x11143828, 0x12d }, { 0x11143824, 0x2d20010 },
1825 { 0x11143828, 0x12d }, { 0x11143824, 0x1d20010 }, { 0x11143828, 0x12e }, { 0x11143824, 0x1d20010 },
1826 { 0x11143828, 0x12e }, { 0x11143824, 0x2920010 }, { 0x11143828, 0x12f }, { 0x11143824, 0x16d0010 },
1827 { 0x11143828, 0x12f }, { 0x11143824, 0x320010 }, { 0x11143828, 0x130 }, { 0x11143824, 0x3cd0010 },
1828 { 0x11143828, 0x130 }, { 0x11143824, 0x2330010 }, { 0x11143828, 0x131 }, { 0x11143824, 0x2330010 },
1829 { 0x11143828, 0x131 }, { 0x11143824, 0x1330010 }, { 0x11143828, 0x132 }, { 0x11143824, 0x1330010 },
1830 { 0x11143828, 0x132 }, { 0x11143824, 0x3320010 }, { 0x11143828, 0x133 }, { 0x11143824, 0x3320010 },
1831 { 0x11143828, 0x133 }, { 0x11143824, 0xb30010 }, { 0x11143828, 0x134 }, { 0x11143824, 0xb30010 },
1832 { 0x11143828, 0x134 }, { 0x11143824, 0x2b20010 }, { 0x11143828, 0x135 }, { 0x11143824, 0x2b20010 },
1833 { 0x11143828, 0x135 }, { 0x11143824, 0x1b20010 }, { 0x11143828, 0x136 }, { 0x11143824, 0x1b20010 },
1834 { 0x11143828, 0x136 }, { 0x11143824, 0x4d0010 }, { 0x11143828, 0x137 }, { 0x11143824, 0x3b20010 },
1835 { 0x11143828, 0x137 }, { 0x11143824, 0x730010 }, { 0x11143828, 0x138 }, { 0x11143824, 0x730010 },
1836 { 0x11143828, 0x138 }, { 0x11143824, 0x2720010 }, { 0x11143828, 0x139 }, { 0x11143824, 0x2720010 },
1837 { 0x11143828, 0x139 }, { 0x11143824, 0x1720010 }, { 0x11143828, 0x13a }, { 0x11143824, 0x1720010 },
1838 { 0x11143828, 0x13a }, { 0x11143824, 0x8d0010 }, { 0x11143828, 0x13b }, { 0x11143824, 0x3720010 },
1839 { 0x11143828, 0x13b }, { 0x11143824, 0xf20010 }, { 0x11143828, 0x13c }, { 0x11143824, 0xf20010 },
1840 { 0x11143828, 0x13c }, { 0x11143824, 0x10d0010 }, { 0x11143828, 0x13d }, { 0x11143824, 0x2f20010 },
1841 { 0x11143828, 0x13d }, { 0x11143824, 0x20d0010 }, { 0x11143828, 0x13e }, { 0x11143824, 0x1f20010 },
1842 { 0x11143828, 0x13e }, { 0x11143824, 0x2520010 }, { 0x11143828, 0x13f }, { 0x11143824, 0x1ad0010 },
1843 { 0x11143828, 0x13f }, { 0x11143824, 0x30a0010 }, { 0x11143828, 0x140 }, { 0x11143824, 0xf50010 },
1844 { 0x11143828, 0x140 }, { 0x11143824, 0x20a0010 }, { 0x11143828, 0x141 }, { 0x11143824, 0x1f50010 },
1845 { 0x11143828, 0x141 }, { 0x11143824, 0x10a0010 }, { 0x11143828, 0x142 }, { 0x11143824, 0x2f50010 },
1846 { 0x11143828, 0x142 }, { 0x11143824, 0x30b0010 }, { 0x11143828, 0x143 }, { 0x11143824, 0x30b0010 },
1847 { 0x11143828, 0x143 }, { 0x11143824, 0x8a0010 }, { 0x11143828, 0x144 }, { 0x11143824, 0x3750010 },
1848 { 0x11143828, 0x144 }, { 0x11143824, 0x28b0010 }, { 0x11143828, 0x145 }, { 0x11143824, 0x28b0010 },
1849 { 0x11143828, 0x145 }, { 0x11143824, 0x18b0010 }, { 0x11143828, 0x146 }, { 0x11143824, 0x18b0010 },
1850 { 0x11143828, 0x146 }, { 0x11143824, 0x38a0010 }, { 0x11143828, 0x147 }, { 0x11143824, 0x38a0010 },
1851 { 0x11143828, 0x147 }, { 0x11143824, 0x4a0010 }, { 0x11143828, 0x148 }, { 0x11143824, 0x3b50010 },
1852 { 0x11143828, 0x148 }, { 0x11143824, 0x24b0010 }, { 0x11143828, 0x149 }, { 0x11143824, 0x24b0010 },
1853 { 0x11143828, 0x149 }, { 0x11143824, 0x14b0010 }, { 0x11143828, 0x14a }, { 0x11143824, 0x14b0010 },
1854 { 0x11143828, 0x14a }, { 0x11143824, 0x34a0010 }, { 0x11143828, 0x14b }, { 0x11143824, 0x34a0010 },
1855 { 0x11143828, 0x14b }, { 0x11143824, 0xcb0010 }, { 0x11143828, 0x14c }, { 0x11143824, 0xcb0010 },
1856 { 0x11143828, 0x14c }, { 0x11143824, 0x2ca0010 }, { 0x11143828, 0x14d }, { 0x11143824, 0x2ca0010 },
1857 { 0x11143828, 0x14d }, { 0x11143824, 0x1ca0010 }, { 0x11143828, 0x14e }, { 0x11143824, 0x1ca0010 },
1858 { 0x11143828, 0x14e }, { 0x11143824, 0x3880010 }, { 0x11143828, 0x14f }, { 0x11143824, 0x770010 },
1859 { 0x11143828, 0x14f }, { 0x11143824, 0x2a0010 }, { 0x11143828, 0x150 }, { 0x11143824, 0x3d50010 },
1860 { 0x11143828, 0x150 }, { 0x11143824, 0x22b0010 }, { 0x11143828, 0x151 }, { 0x11143824, 0x22b0010 },
1861 { 0x11143828, 0x151 }, { 0x11143824, 0x12b0010 }, { 0x11143828, 0x152 }, { 0x11143824, 0x12b0010 },
1862 { 0x11143828, 0x152 }, { 0x11143824, 0x32a0010 }, { 0x11143828, 0x153 }, { 0x11143824, 0x32a0010 },
1863 { 0x11143828, 0x153 }, { 0x11143824, 0xab0010 }, { 0x11143828, 0x154 }, { 0x11143824, 0xab0010 },
1864 { 0x11143828, 0x154 }, { 0x11143824, 0x2aa0010 }, { 0x11143828, 0x155 }, { 0x11143824, 0x2aa0010 },
1865 { 0x11143828, 0x155 }, { 0x11143824, 0x1aa0010 }, { 0x11143828, 0x156 }, { 0x11143824, 0x1aa0010 },
1866 { 0x11143828, 0x156 }, { 0x11143824, 0x550010 }, { 0x11143828, 0x157 }, { 0x11143824, 0x3aa0010 },
1867 { 0x11143828, 0x157 }, { 0x11143824, 0x6b0010 }, { 0x11143828, 0x158 }, { 0x11143824, 0x6b0010 },
1868 { 0x11143828, 0x158 }, { 0x11143824, 0x26a0010 }, { 0x11143828, 0x159 }, { 0x11143824, 0x26a0010 },
1869 { 0x11143828, 0x159 }, { 0x11143824, 0x16a0010 }, { 0x11143828, 0x15a }, { 0x11143824, 0x16a0010 },
1870 { 0x11143828, 0x15a }, { 0x11143824, 0x950010 }, { 0x11143828, 0x15b }, { 0x11143824, 0x36a0010 },
1871 { 0x11143828, 0x15b }, { 0x11143824, 0xea0010 }, { 0x11143828, 0x15c }, { 0x11143824, 0xea0010 },
1872 { 0x11143828, 0x15c }, { 0x11143824, 0x1150010 }, { 0x11143828, 0x15d }, { 0x11143824, 0x2ea0010 },
1873 { 0x11143828, 0x15d }, { 0x11143824, 0x2150010 }, { 0x11143828, 0x15e }, { 0x11143824, 0x1ea0010 },
1874 { 0x11143828, 0x15e }, { 0x11143824, 0x24a0010 }, { 0x11143828, 0x15f }, { 0x11143824, 0x1b50010 },
1875 { 0x11143828, 0x15f }, { 0x11143824, 0x28a0010 }, { 0x11143828, 0x160 }, { 0x11143824, 0x1750010 },
1876 { 0x11143828, 0x160 }, { 0x11143824, 0x21b0010 }, { 0x11143828, 0x161 }, { 0x11143824, 0x21b0010 },
1877 { 0x11143828, 0x161 }, { 0x11143824, 0x11b0010 }, { 0x11143828, 0x162 }, { 0x11143824, 0x11b0010 },
1878 { 0x11143828, 0x162 }, { 0x11143824, 0x31a0010 }, { 0x11143828, 0x163 }, { 0x11143824, 0x31a0010 },
1879 { 0x11143828, 0x163 }, { 0x11143824, 0x9b0010 }, { 0x11143828, 0x164 }, { 0x11143824, 0x9b0010 },
1880 { 0x11143828, 0x164 }, { 0x11143824, 0x29a0010 }, { 0x11143828, 0x165 }, { 0x11143824, 0x29a0010 },
1881 { 0x11143828, 0x165 }, { 0x11143824, 0x19a0010 }, { 0x11143828, 0x166 }, { 0x11143824, 0x19a0010 },
1882 { 0x11143828, 0x166 }, { 0x11143824, 0x650010 }, { 0x11143828, 0x167 }, { 0x11143824, 0x39a0010 },
1883 { 0x11143828, 0x167 }, { 0x11143824, 0x5b0010 }, { 0x11143828, 0x168 }, { 0x11143824, 0x5b0010 },
1884 { 0x11143828, 0x168 }, { 0x11143824, 0x25a0010 }, { 0x11143828, 0x169 }, { 0x11143824, 0x25a0010 },
1885 { 0x11143828, 0x169 }, { 0x11143824, 0x15a0010 }, { 0x11143828, 0x16a }, { 0x11143824, 0x15a0010 },
1886 { 0x11143828, 0x16a }, { 0x11143824, 0xa50010 }, { 0x11143828, 0x16b }, { 0x11143824, 0x35a0010 },
1887 { 0x11143828, 0x16b }, { 0x11143824, 0xda0010 }, { 0x11143828, 0x16c }, { 0x11143824, 0xda0010 },
1888 { 0x11143828, 0x16c }, { 0x11143824, 0x1250010 }, { 0x11143828, 0x16d }, { 0x11143824, 0x2da0010 },
1889 { 0x11143828, 0x16d }, { 0x11143824, 0x2250010 }, { 0x11143828, 0x16e }, { 0x11143824, 0x1da0010 },
1890 { 0x11143828, 0x16e }, { 0x11143824, 0x250010 }, { 0x11143828, 0x16f }, { 0x11143824, 0x3da0010 },
1891 { 0x11143828, 0x16f }, { 0x11143824, 0x780010 }, { 0x11143828, 0x170 }, { 0x11143824, 0x3870010 },
1892 { 0x11143828, 0x170 }, { 0x11143824, 0x23a0010 }, { 0x11143828, 0x171 }, { 0x11143824, 0x23a0010 },
1893 { 0x11143828, 0x171 }, { 0x11143824, 0x13a0010 }, { 0x11143828, 0x172 }, { 0x11143824, 0x13a0010 },
1894 { 0x11143828, 0x172 }, { 0x11143824, 0xc50010 }, { 0x11143828, 0x173 }, { 0x11143824, 0x33a0010 },
1895 { 0x11143828, 0x173 }, { 0x11143824, 0xba0010 }, { 0x11143828, 0x174 }, { 0x11143824, 0xba0010 },
1896 { 0x11143828, 0x174 }, { 0x11143824, 0x1450010 }, { 0x11143828, 0x175 }, { 0x11143824, 0x2ba0010 },
1897 { 0x11143828, 0x175 }, { 0x11143824, 0x2450010 }, { 0x11143828, 0x176 }, { 0x11143824, 0x1ba0010 },
1898 { 0x11143828, 0x176 }, { 0x11143824, 0x450010 }, { 0x11143828, 0x177 }, { 0x11143824, 0x3ba0010 },
1899 { 0x11143828, 0x177 }, { 0x11143824, 0x7a0010 }, { 0x11143828, 0x178 }, { 0x11143824, 0x7a0010 },
1900 { 0x11143828, 0x178 }, { 0x11143824, 0x1850010 }, { 0x11143828, 0x179 }, { 0x11143824, 0x27a0010 },
1901 { 0x11143828, 0x179 }, { 0x11143824, 0x2850010 }, { 0x11143828, 0x17a }, { 0x11143824, 0x17a0010 },
1902 { 0x11143828, 0x17a }, { 0x11143824, 0x850010 }, { 0x11143828, 0x17b }, { 0x11143824, 0x37a0010 },
1903 { 0x11143828, 0x17b }, { 0x11143824, 0x3050010 }, { 0x11143828, 0x17c }, { 0x11143824, 0xfa0010 },
1904 { 0x11143828, 0x17c }, { 0x11143824, 0x1050010 }, { 0x11143828, 0x17d }, { 0x11143824, 0x2fa0010 },
1905 { 0x11143828, 0x17d }, { 0x11143824, 0x2050010 }, { 0x11143828, 0x17e }, { 0x11143824, 0x1fa0010 },
1906 { 0x11143828, 0x17e }, { 0x11143824, 0x2a80010 }, { 0x11143828, 0x17f }, { 0x11143824, 0x1570010 },
1907 { 0x11143828, 0x17f }, { 0x11143824, 0x1520010 }, { 0x11143828, 0x180 }, { 0x11143824, 0x2ad0010 },
1908 { 0x11143828, 0x180 }, { 0x11143824, 0x2060010 }, { 0x11143828, 0x181 }, { 0x11143824, 0x1f90010 },
1909 { 0x11143828, 0x181 }, { 0x11143824, 0x1060010 }, { 0x11143828, 0x182 }, { 0x11143824, 0x2f90010 },
1910 { 0x11143828, 0x182 }, { 0x11143824, 0x3070010 }, { 0x11143828, 0x183 }, { 0x11143824, 0x3070010 },
1911 { 0x11143828, 0x183 }, { 0x11143824, 0x860010 }, { 0x11143828, 0x184 }, { 0x11143824, 0x3790010 },
1912 { 0x11143828, 0x184 }, { 0x11143824, 0x2870010 }, { 0x11143828, 0x185 }, { 0x11143824, 0x2870010 },
1913 { 0x11143828, 0x185 }, { 0x11143824, 0x1870010 }, { 0x11143828, 0x186 }, { 0x11143824, 0x1870010 },
1914 { 0x11143828, 0x186 }, { 0x11143824, 0x3860010 }, { 0x11143828, 0x187 }, { 0x11143824, 0x3860010 },
1915 { 0x11143828, 0x187 }, { 0x11143824, 0x460010 }, { 0x11143828, 0x188 }, { 0x11143824, 0x3b90010 },
1916 { 0x11143828, 0x188 }, { 0x11143824, 0x2470010 }, { 0x11143828, 0x189 }, { 0x11143824, 0x2470010 },
1917 { 0x11143828, 0x189 }, { 0x11143824, 0x1470010 }, { 0x11143828, 0x18a }, { 0x11143824, 0x1470010 },
1918 { 0x11143828, 0x18a }, { 0x11143824, 0x3460010 }, { 0x11143828, 0x18b }, { 0x11143824, 0x3460010 },
1919 { 0x11143828, 0x18b }, { 0x11143824, 0xc70010 }, { 0x11143828, 0x18c }, { 0x11143824, 0xc70010 },
1920 { 0x11143828, 0x18c }, { 0x11143824, 0x2c60010 }, { 0x11143828, 0x18d }, { 0x11143824, 0x2c60010 },
1921 { 0x11143828, 0x18d }, { 0x11143824, 0x1c60010 }, { 0x11143828, 0x18e }, { 0x11143824, 0x1c60010 },
1922 { 0x11143828, 0x18e }, { 0x11143824, 0x3840010 }, { 0x11143828, 0x18f }, { 0x11143824, 0x7b0010 },
1923 { 0x11143828, 0x18f }, { 0x11143824, 0x260010 }, { 0x11143828, 0x190 }, { 0x11143824, 0x3d90010 },
1924 { 0x11143828, 0x190 }, { 0x11143824, 0x2270010 }, { 0x11143828, 0x191 }, { 0x11143824, 0x2270010 },
1925 { 0x11143828, 0x191 }, { 0x11143824, 0x1270010 }, { 0x11143828, 0x192 }, { 0x11143824, 0x1270010 },
1926 { 0x11143828, 0x192 }, { 0x11143824, 0x3260010 }, { 0x11143828, 0x193 }, { 0x11143824, 0x3260010 },
1927 { 0x11143828, 0x193 }, { 0x11143824, 0xa70010 }, { 0x11143828, 0x194 }, { 0x11143824, 0xa70010 },
1928 { 0x11143828, 0x194 }, { 0x11143824, 0x2a60010 }, { 0x11143828, 0x195 }, { 0x11143824, 0x2a60010 },
1929 { 0x11143828, 0x195 }, { 0x11143824, 0x1a60010 }, { 0x11143828, 0x196 }, { 0x11143824, 0x1a60010 },
1930 { 0x11143828, 0x196 }, { 0x11143824, 0x590010 }, { 0x11143828, 0x197 }, { 0x11143824, 0x3a60010 },
1931 { 0x11143828, 0x197 }, { 0x11143824, 0x670010 }, { 0x11143828, 0x198 }, { 0x11143824, 0x670010 },
1932 { 0x11143828, 0x198 }, { 0x11143824, 0x2660010 }, { 0x11143828, 0x199 }, { 0x11143824, 0x2660010 },
1933 { 0x11143828, 0x199 }, { 0x11143824, 0x1660010 }, { 0x11143828, 0x19a }, { 0x11143824, 0x1660010 },
1934 { 0x11143828, 0x19a }, { 0x11143824, 0x990010 }, { 0x11143828, 0x19b }, { 0x11143824, 0x3660010 },
1935 { 0x11143828, 0x19b }, { 0x11143824, 0xe60010 }, { 0x11143828, 0x19c }, { 0x11143824, 0xe60010 },
1936 { 0x11143828, 0x19c }, { 0x11143824, 0x1190010 }, { 0x11143828, 0x19d }, { 0x11143824, 0x2e60010 },
1937 { 0x11143828, 0x19d }, { 0x11143824, 0x2190010 }, { 0x11143828, 0x19e }, { 0x11143824, 0x1e60010 },
1938 { 0x11143828, 0x19e }, { 0x11143824, 0xe40010 }, { 0x11143828, 0x19f }, { 0x11143824, 0x31b0010 },
1939 { 0x11143828, 0x19f }, { 0x11143824, 0x2540010 }, { 0x11143828, 0x1a0 }, { 0x11143824, 0x1ab0010 },
1940 { 0x11143828, 0x1a0 }, { 0x11143824, 0x2170010 }, { 0x11143828, 0x1a1 }, { 0x11143824, 0x2170010 },
1941 { 0x11143828, 0x1a1 }, { 0x11143824, 0x1170010 }, { 0x11143828, 0x1a2 }, { 0x11143824, 0x1170010 },
1942 { 0x11143828, 0x1a2 }, { 0x11143824, 0x3160010 }, { 0x11143828, 0x1a3 }, { 0x11143824, 0x3160010 },
1943 { 0x11143828, 0x1a3 }, { 0x11143824, 0x970010 }, { 0x11143828, 0x1a4 }, { 0x11143824, 0x970010 },
1944 { 0x11143828, 0x1a4 }, { 0x11143824, 0x2960010 }, { 0x11143828, 0x1a5 }, { 0x11143824, 0x2960010 },
1945 { 0x11143828, 0x1a5 }, { 0x11143824, 0x1960010 }, { 0x11143828, 0x1a6 }, { 0x11143824, 0x1960010 },
1946 { 0x11143828, 0x1a6 }, { 0x11143824, 0x690010 }, { 0x11143828, 0x1a7 }, { 0x11143824, 0x3960010 },
1947 { 0x11143828, 0x1a7 }, { 0x11143824, 0x570010 }, { 0x11143828, 0x1a8 }, { 0x11143824, 0x570010 },
1948 { 0x11143828, 0x1a8 }, { 0x11143824, 0x2560010 }, { 0x11143828, 0x1a9 }, { 0x11143824, 0x2560010 },
1949 { 0x11143828, 0x1a9 }, { 0x11143824, 0x1560010 }, { 0x11143828, 0x1aa }, { 0x11143824, 0x1560010 },
1950 { 0x11143828, 0x1aa }, { 0x11143824, 0xa90010 }, { 0x11143828, 0x1ab }, { 0x11143824, 0x3560010 },
1951 { 0x11143828, 0x1ab }, { 0x11143824, 0xd60010 }, { 0x11143828, 0x1ac }, { 0x11143824, 0xd60010 },
1952 { 0x11143828, 0x1ac }, { 0x11143824, 0x1290010 }, { 0x11143828, 0x1ad }, { 0x11143824, 0x2d60010 },
1953 { 0x11143828, 0x1ad }, { 0x11143824, 0x2290010 }, { 0x11143828, 0x1ae }, { 0x11143824, 0x1d60010 },
1954 { 0x11143828, 0x1ae }, { 0x11143824, 0x290010 }, { 0x11143828, 0x1af }, { 0x11143824, 0x3d60010 },
1955 { 0x11143828, 0x1af }, { 0x11143824, 0x740010 }, { 0x11143828, 0x1b0 }, { 0x11143824, 0x38b0010 },
1956 { 0x11143828, 0x1b0 }, { 0x11143824, 0x2360010 }, { 0x11143828, 0x1b1 }, { 0x11143824, 0x2360010 },
1957 { 0x11143828, 0x1b1 }, { 0x11143824, 0x1360010 }, { 0x11143828, 0x1b2 }, { 0x11143824, 0x1360010 },
1958 { 0x11143828, 0x1b2 }, { 0x11143824, 0xc90010 }, { 0x11143828, 0x1b3 }, { 0x11143824, 0x3360010 },
1959 { 0x11143828, 0x1b3 }, { 0x11143824, 0xb60010 }, { 0x11143828, 0x1b4 }, { 0x11143824, 0xb60010 },
1960 { 0x11143828, 0x1b4 }, { 0x11143824, 0x1490010 }, { 0x11143828, 0x1b5 }, { 0x11143824, 0x2b60010 },
1961 { 0x11143828, 0x1b5 }, { 0x11143824, 0x2490010 }, { 0x11143828, 0x1b6 }, { 0x11143824, 0x1b60010 },
1962 { 0x11143828, 0x1b6 }, { 0x11143824, 0x490010 }, { 0x11143828, 0x1b7 }, { 0x11143824, 0x3b60010 },
1963 { 0x11143828, 0x1b7 }, { 0x11143824, 0x760010 }, { 0x11143828, 0x1b8 }, { 0x11143824, 0x760010 },
1964 { 0x11143828, 0x1b8 }, { 0x11143824, 0x1890010 }, { 0x11143828, 0x1b9 }, { 0x11143824, 0x2760010 },
1965 { 0x11143828, 0x1b9 }, { 0x11143824, 0x2890010 }, { 0x11143828, 0x1ba }, { 0x11143824, 0x1760010 },
1966 { 0x11143828, 0x1ba }, { 0x11143824, 0x890010 }, { 0x11143828, 0x1bb }, { 0x11143824, 0x3760010 },
1967 { 0x11143828, 0x1bb }, { 0x11143824, 0x3090010 }, { 0x11143828, 0x1bc }, { 0x11143824, 0xf60010 },
1968 { 0x11143828, 0x1bc }, { 0x11143824, 0x1090010 }, { 0x11143828, 0x1bd }, { 0x11143824, 0x2f60010 },
1969 { 0x11143828, 0x1bd }, { 0x11143824, 0x2090010 }, { 0x11143828, 0x1be }, { 0x11143824, 0x1f60010 },
1970 { 0x11143828, 0x1be }, { 0x11143824, 0x1c40010 }, { 0x11143828, 0x1bf }, { 0x11143824, 0x23b0010 },
1971 { 0x11143828, 0x1bf }, { 0x11143824, 0x6a0010 }, { 0x11143828, 0x1c0 }, { 0x11143824, 0x3950010 },
1972 { 0x11143828, 0x1c0 }, { 0x11143824, 0x20e0010 }, { 0x11143828, 0x1c1 }, { 0x11143824, 0x1f10010 },
1973 { 0x11143828, 0x1c1 }, { 0x11143824, 0x10e0010 }, { 0x11143828, 0x1c2 }, { 0x11143824, 0x2f10010 },
1974 { 0x11143828, 0x1c2 }, { 0x11143824, 0x30e0010 }, { 0x11143828, 0x1c3 }, { 0x11143824, 0x30e0010 },
1975 { 0x11143828, 0x1c3 }, { 0x11143824, 0x8e0010 }, { 0x11143828, 0x1c4 }, { 0x11143824, 0x3710010 },
1976 { 0x11143828, 0x1c4 }, { 0x11143824, 0x28e0010 }, { 0x11143828, 0x1c5 }, { 0x11143824, 0x28e0010 },
1977 { 0x11143828, 0x1c5 }, { 0x11143824, 0x18e0010 }, { 0x11143828, 0x1c6 }, { 0x11143824, 0x18e0010 },
1978 { 0x11143828, 0x1c6 }, { 0x11143824, 0x710010 }, { 0x11143828, 0x1c7 }, { 0x11143824, 0x38e0010 },
1979 { 0x11143828, 0x1c7 }, { 0x11143824, 0x4e0010 }, { 0x11143828, 0x1c8 }, { 0x11143824, 0x3b10010 },
1980 { 0x11143828, 0x1c8 }, { 0x11143824, 0x24e0010 }, { 0x11143828, 0x1c9 }, { 0x11143824, 0x24e0010 },
1981 { 0x11143828, 0x1c9 }, { 0x11143824, 0x14e0010 }, { 0x11143828, 0x1ca }, { 0x11143824, 0x14e0010 },
1982 { 0x11143828, 0x1ca }, { 0x11143824, 0xb10010 }, { 0x11143828, 0x1cb }, { 0x11143824, 0x34e0010 },
1983 { 0x11143828, 0x1cb }, { 0x11143824, 0xce0010 }, { 0x11143828, 0x1cc }, { 0x11143824, 0xce0010 },
1984 { 0x11143828, 0x1cc }, { 0x11143824, 0x1310010 }, { 0x11143828, 0x1cd }, { 0x11143824, 0x2ce0010 },
1985 { 0x11143828, 0x1cd }, { 0x11143824, 0x2310010 }, { 0x11143828, 0x1ce }, { 0x11143824, 0x1ce0010 },
1986 { 0x11143828, 0x1ce }, { 0x11143824, 0x310010 }, { 0x11143828, 0x1cf }, { 0x11143824, 0x3ce0010 },
1987 { 0x11143828, 0x1cf }, { 0x11143824, 0x6c0010 }, { 0x11143828, 0x1d0 }, { 0x11143824, 0x3930010 },
1988 { 0x11143828, 0x1d0 }, { 0x11143824, 0x22e0010 }, { 0x11143828, 0x1d1 }, { 0x11143824, 0x22e0010 },
1989 { 0x11143828, 0x1d1 }, { 0x11143824, 0x12e0010 }, { 0x11143828, 0x1d2 }, { 0x11143824, 0x12e0010 },
1990 { 0x11143828, 0x1d2 }, { 0x11143824, 0xd10010 }, { 0x11143828, 0x1d3 }, { 0x11143824, 0x32e0010 },
1991 { 0x11143828, 0x1d3 }, { 0x11143824, 0xae0010 }, { 0x11143828, 0x1d4 }, { 0x11143824, 0xae0010 },
1992 { 0x11143828, 0x1d4 }, { 0x11143824, 0x1510010 }, { 0x11143828, 0x1d5 }, { 0x11143824, 0x2ae0010 },
1993 { 0x11143828, 0x1d5 }, { 0x11143824, 0x2510010 }, { 0x11143828, 0x1d6 }, { 0x11143824, 0x1ae0010 },
1994 { 0x11143828, 0x1d6 }, { 0x11143824, 0x510010 }, { 0x11143828, 0x1d7 }, { 0x11143824, 0x3ae0010 },
1995 { 0x11143828, 0x1d7 }, { 0x11143824, 0x6e0010 }, { 0x11143828, 0x1d8 }, { 0x11143824, 0x6e0010 },
1996 { 0x11143828, 0x1d8 }, { 0x11143824, 0x1910010 }, { 0x11143828, 0x1d9 }, { 0x11143824, 0x26e0010 },
1997 { 0x11143828, 0x1d9 }, { 0x11143824, 0x2910010 }, { 0x11143828, 0x1da }, { 0x11143824, 0x16e0010 },
1998 { 0x11143828, 0x1da }, { 0x11143824, 0x910010 }, { 0x11143828, 0x1db }, { 0x11143824, 0x36e0010 },
1999 { 0x11143828, 0x1db }, { 0x11143824, 0x3110010 }, { 0x11143828, 0x1dc }, { 0x11143824, 0xee0010 },
2000 { 0x11143828, 0x1dc }, { 0x11143824, 0x1110010 }, { 0x11143828, 0x1dd }, { 0x11143824, 0x2ee0010 },
2001 { 0x11143828, 0x1dd }, { 0x11143824, 0x2110010 }, { 0x11143828, 0x1de }, { 0x11143824, 0x1ee0010 },
2002 { 0x11143828, 0x1de }, { 0x11143824, 0x2c80010 }, { 0x11143828, 0x1df }, { 0x11143824, 0x1370010 },
2003 { 0x11143828, 0x1df }, { 0x11143824, 0x2380010 }, { 0x11143828, 0x1e0 }, { 0x11143824, 0x1c70010 },
2004 { 0x11143828, 0x1e0 }, { 0x11143824, 0x21e0010 }, { 0x11143828, 0x1e1 }, { 0x11143824, 0x21e0010 },
2005 { 0x11143828, 0x1e1 }, { 0x11143824, 0x11e0010 }, { 0x11143828, 0x1e2 }, { 0x11143824, 0x11e0010 },
2006 { 0x11143828, 0x1e2 }, { 0x11143824, 0xe10010 }, { 0x11143828, 0x1e3 }, { 0x11143824, 0x31e0010 },
2007 { 0x11143828, 0x1e3 }, { 0x11143824, 0x9e0010 }, { 0x11143828, 0x1e4 }, { 0x11143824, 0x9e0010 },
2008 { 0x11143828, 0x1e4 }, { 0x11143824, 0x1610010 }, { 0x11143828, 0x1e5 }, { 0x11143824, 0x29e0010 },
2009 { 0x11143828, 0x1e5 }, { 0x11143824, 0x2610010 }, { 0x11143828, 0x1e6 }, { 0x11143824, 0x19e0010 },
2010 { 0x11143828, 0x1e6 }, { 0x11143824, 0x610010 }, { 0x11143828, 0x1e7 }, { 0x11143824, 0x39e0010 },
2011 { 0x11143828, 0x1e7 }, { 0x11143824, 0x5e0010 }, { 0x11143828, 0x1e8 }, { 0x11143824, 0x5e0010 },
2012 { 0x11143828, 0x1e8 }, { 0x11143824, 0x1a10010 }, { 0x11143828, 0x1e9 }, { 0x11143824, 0x25e0010 },
2013 { 0x11143828, 0x1e9 }, { 0x11143824, 0x2a10010 }, { 0x11143828, 0x1ea }, { 0x11143824, 0x15e0010 },
2014 { 0x11143828, 0x1ea }, { 0x11143824, 0xa10010 }, { 0x11143828, 0x1eb }, { 0x11143824, 0x35e0010 },
2015 { 0x11143828, 0x1eb }, { 0x11143824, 0x3210010 }, { 0x11143828, 0x1ec }, { 0x11143824, 0xde0010 },
2016 { 0x11143828, 0x1ec }, { 0x11143824, 0x1210010 }, { 0x11143828, 0x1ed }, { 0x11143824, 0x2de0010 },
2017 { 0x11143828, 0x1ed }, { 0x11143824, 0x2210010 }, { 0x11143828, 0x1ee }, { 0x11143824, 0x1de0010 },
2018 { 0x11143828, 0x1ee }, { 0x11143824, 0xd40010 }, { 0x11143828, 0x1ef }, { 0x11143824, 0x32b0010 },
2019 { 0x11143828, 0x1ef }, { 0x11143824, 0x3e0010 }, { 0x11143828, 0x1f0 }, { 0x11143824, 0x3c10010 },
2020 { 0x11143828, 0x1f0 }, { 0x11143824, 0x1c10010 }, { 0x11143828, 0x1f1 }, { 0x11143824, 0x23e0010 },
2021 { 0x11143828, 0x1f1 }, { 0x11143824, 0x2c10010 }, { 0x11143828, 0x1f2 }, { 0x11143824, 0x13e0010 },
2022 { 0x11143828, 0x1f2 }, { 0x11143824, 0xc10010 }, { 0x11143828, 0x1f3 }, { 0x11143824, 0x33e0010 },
2023 { 0x11143828, 0x1f3 }, { 0x11143824, 0x3410010 }, { 0x11143828, 0x1f4 }, { 0x11143824, 0xbe0010 },
2024 { 0x11143828, 0x1f4 }, { 0x11143824, 0x1410010 }, { 0x11143828, 0x1f5 }, { 0x11143824, 0x2be0010 },
2025 { 0x11143828, 0x1f5 }, { 0x11143824, 0x2410010 }, { 0x11143828, 0x1f6 }, { 0x11143824, 0x1be0010 },
2026 { 0x11143828, 0x1f6 }, { 0x11143824, 0x12a0010 }, { 0x11143828, 0x1f7 }, { 0x11143824, 0x2d50010 },
2027 { 0x11143828, 0x1f7 }, { 0x11143824, 0x3810010 }, { 0x11143828, 0x1f8 }, { 0x11143824, 0x7e0010 },
2028 { 0x11143828, 0x1f8 }, { 0x11143824, 0x1810010 }, { 0x11143828, 0x1f9 }, { 0x11143824, 0x27e0010 },
2029 { 0x11143828, 0x1f9 }, { 0x11143824, 0x2810010 }, { 0x11143828, 0x1fa }, { 0x11143824, 0x17e0010 },
2030 { 0x11143828, 0x1fa }, { 0x11143824, 0x1320010 }, { 0x11143828, 0x1fb }, { 0x11143824, 0x2cd0010 },
2031 { 0x11143828, 0x1fb }, { 0x11143824, 0xe80010 }, { 0x11143828, 0x1fc }, { 0x11143824, 0x3170010 },
2032 { 0x11143828, 0x1fc }, { 0x11143824, 0xb20010 }, { 0x11143828, 0x1fd }, { 0x11143824, 0x34d0010 },
2033 { 0x11143828, 0x1fd }, { 0x11143824, 0xb40010 }, { 0x11143828, 0x1fe }, { 0x11143824, 0x34b0010 },
2034 { 0x11143828, 0x1fe }, { 0x11143824, 0x1680010 }, { 0x11143828, 0x1ff }, { 0x11143824, 0x2970010 },
2035 { 0x11143828, 0x1ff }, { 0x11143820, 0x3 }, { 0x11143820, 0x3 }
2036 };
2037
frl_rx_lm_table_set(hi_void)2038 hi_void frl_rx_lm_table_set(hi_void)
2039 {
2040 hi_u32 i;
2041 frl_rx_crc_check *rc_table = HI_NULL;
2042
2043 rc_table = &g_rx_table[0];
2044 /* 4L-0x01, 3L-0x00 */
2045 for (i = 0; i < hdmi_array_size(g_rx_table); i++, rc_table++) {
2046 hdmi_reg_write_u32(rc_table->addr, rc_table->value);
2047 }
2048
2049 return;
2050 }
2051
debug_frl_attr_help(hi_void)2052 static hi_void debug_frl_attr_help(hi_void)
2053 {
2054 hdmi_dbg_print("[usage ]: echo frlinfo argv1 argv2 argv3 > /proc/umap/hdmi0 \n");
2055 hdmi_dbg_print("[argv1 ]: FRL debug command.\n");
2056 hdmi_dbg_print(" 0\t--FRL rate strategy [argv2: 0--little, 1--big]\n"
2057 " 1\t--HDMI2.1 strategy [argv2: 0--(>600M), 1--(>340M), 2--(p-format)])\n");
2058 hdmi_dbg_print(" 2\t--max train fail times[argv2: 1 < times <= 5000]\n");
2059 hdmi_dbg_print(" 3\t--train exception bp [argv2: b0(readychk) b1(resultchk) b2(retrain)]\n");
2060 hdmi_dbg_print(" 4\t--FRL fail strategy [argv2: [0-none, 1-TMDS, 2-notify]\n");
2061 hdmi_dbg_print(" 5\t--FRL machine mode [argv2: 0-step, 1-timeout]\n");
2062 hdmi_dbg_print(" 6\t--FRL flt outtime [argv2: 0-time(ms)]\n");
2063
2064 return;
2065 }
2066
frl_attr_parse(hdmi_frl_info * frl_info,const char * cmd,hi_u32 data)2067 static hi_s32 frl_attr_parse(hdmi_frl_info *frl_info, const char *cmd, hi_u32 data)
2068 {
2069 if (is_str_equal(cmd, "0")) {
2070 if (data >= HDMI_FRL_RATE_SELECT_BUTT) {
2071 return HI_FAILURE;
2072 }
2073 frl_info->rate_select = (hdmi_frl_rate_select)data;
2074 hdmi_dbg_print("set FRL rete strategy %s.\n", (data == HDMI_FRL_RATE_SELECT_BIG) ? "BIG" : "LITTLE");
2075 } else if (is_str_equal(cmd, "1")) {
2076 if (data >= HDMI_FRL_STRATEGY_MODE_BUTT) {
2077 return HI_FAILURE;
2078 }
2079 hdmi_dbg_print("set 2.1 strategy old(%u)->new(%u).\n", frl_info->strategy_mode, data);
2080 frl_info->strategy_mode = (hdmi_frl_strategy_mode)data;
2081 } else if (is_str_equal(cmd, "2")) {
2082 if (data == 0 || data > DEBUG_MAX_DATA_SIZE) {
2083 return HI_FAILURE;
2084 }
2085 hdmi_dbg_print("set max training fail times: old(%u)->new(%u).\n", frl_info->max_fail_times, data);
2086 frl_info->max_fail_times = data;
2087 } else if (is_str_equal(cmd, "3")) {
2088 frl_info->bypass = (data & 0x7);
2089 hdmi_dbg_print("bypass: 0x%x.\n", frl_info->bypass);
2090 } else if (is_str_equal(cmd, "4")) {
2091 data = (data >= HDMI_FRL_FAIL_BUTT) ? HDMI_FRL_FAIL_BUTT : data;
2092 hdmi_dbg_print("FRL fail strategy old(%u)->new(%u).\n", frl_info->fail_strategy, data);
2093 frl_info->fail_strategy = data;
2094 } else if (is_str_equal(cmd, "5")) {
2095 data = (data >= HDMI_FRL_MACH_MODE_TIMEOUT) ? HDMI_FRL_MACH_MODE_TIMEOUT : data;
2096 hdmi_dbg_print("FRL mach change old(%u)->new(%u).\n", frl_info->state_mach_info.mach_mode, data);
2097 frl_info->state_mach_info.mach_mode = data;
2098 } else if (is_str_equal(cmd, "6")) {
2099 data = (data >= 1000) ? 1000 : data; /* cmd argv[1] is 14, restrict data size to 1000 */
2100 hdmi_dbg_print("FRL link training timeout old(%llu)->new(%llu).\n",
2101 frl_info->state_mach_info.train_timeout, data);
2102 frl_info->state_mach_info.train_timeout = data;
2103 } else {
2104 hdmi_dbg_err("error argvs!\n");
2105 return HI_FAILURE;
2106 }
2107
2108 return HI_SUCCESS;
2109 }
2110
debug_frl_attr(hdmi_debug_cmd_arg * cmd_arg)2111 static hi_s32 debug_frl_attr(hdmi_debug_cmd_arg *cmd_arg)
2112 {
2113 hi_u32 data;
2114 hi_s32 ret;
2115 hdmi_device *hdmi_dev = HI_NULL;
2116 hdmi_frl_info *frl_info = HI_NULL;
2117
2118 debug_null_check_return(cmd_arg);
2119 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
2120 debug_null_check_return(hdmi_dev);
2121 frl_info = &hdmi_dev->frl_info;
2122
2123 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_2 || cmd_arg->argv[1] == HI_NULL) {
2124 hdmi_dbg_err("error argcs!\n");
2125 goto info_error;
2126 }
2127 debug_null_check_return(cmd_arg->argv[2]);
2128 data = debug_str_to_u32(cmd_arg->argv[2], &cmd_arg->argv[2], HDMI_DEBUG_BASE_DEC);
2129 ret = frl_attr_parse(frl_info, cmd_arg->argv[1], data);
2130 if (ret != HI_SUCCESS) {
2131 goto info_error;
2132 }
2133
2134 return HI_SUCCESS;
2135
2136 info_error:
2137 debug_frl_attr_help();
2138
2139 return HI_FAILURE;
2140 }
2141
debug_frl_cfg_help(hi_void)2142 static hi_void debug_frl_cfg_help(hi_void)
2143 {
2144 hdmi_dbg_print("[usage ]: echo frlcfg argv1 argv2 argv3 > /proc/umap/hdmi0 \n");
2145 hdmi_dbg_print("[argv1 ]: FRL debug command.\n");
2146 hdmi_dbg_print(" 0\t--LM table get [argv2: 0--unused]\n");
2147 hdmi_dbg_print(" 1\t--FRL training break [argv2: 0-hold, 1-break]\n");
2148 hdmi_dbg_print(" 2\t--FRL sw train mode [argv2: 0--delay, 1-timer]\n");
2149 hdmi_dbg_print(" 3\t--train delay interval[argv2: time(ms)]\n");
2150 hdmi_dbg_print(" 4\t--training pattern set[argv2: lane_id(0~3) argv3:lt_px(1~8)]\n");
2151 hdmi_dbg_print(" 5\t--set LTS3 timeout [argv2: timeout interval.(1ms default).\n");
2152 hdmi_dbg_print(" 6\t--set control compress [argv2: 0-all, 3-none, 1/2-hw.\n");
2153
2154 return;
2155 }
2156
frl_cfg_parse(hdmi_device * hdmi_dev,hdmi_debug_cmd_arg * cmd_arg,hi_u32 data)2157 static hi_s32 frl_cfg_parse(hdmi_device *hdmi_dev, hdmi_debug_cmd_arg *cmd_arg, hi_u32 data)
2158 {
2159 hi_char *str = HI_NULL;
2160 frl_debug frl_cfg = {0};
2161
2162 if (is_str_equal(cmd_arg->argv[1], "0")) {
2163 frl_cfg.debug_cmd = FRL_DEBUG_LM_TABLE_GET;
2164 hdmi_dbg_print("get LM table success.\n");
2165 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
2166 hdmi_dbg_print("FRL training break(%u).\n", data);
2167 frl_cfg.training_break = (hi_u8)data;
2168 frl_cfg.debug_cmd = FRL_DEBUG_TRAINING_BREAK;
2169 } else if (is_str_equal(cmd_arg->argv[1], "2")) {
2170 frl_cfg.sw_train_mode = (data == 0) ? FRL_SW_TRAIN_DELAY : FRL_SW_TRAIN_TIMER;
2171 hdmi_dbg_print("set SW training mode to %s.\n", (data == 0) ? "delay" : "timer");
2172 frl_cfg.debug_cmd = FRL_DEBUG_SW_TRAIN_SEL;
2173 hdmi_dev->frl_info.state_mach_info.sw_train_mode = frl_cfg.sw_train_mode;
2174 } else if (is_str_equal(cmd_arg->argv[1], "3")) {
2175 data = (data >= 1000) ? 1000 : data; /* cmd argv[1] is 17, restrict interval time to 1000ms */
2176 hdmi_dbg_print("set LTS3 interval %ums.\n", data);
2177 frl_cfg.lts3_interval = data;
2178 frl_cfg.debug_cmd = FRL_DEBUG_LTS3_INTERVAL;
2179 } else if (is_str_equal(cmd_arg->argv[1], "4")) {
2180 frl_cfg.lane_idx = (data > 3) ? 3 : data; /* cmd argv[1] is 19, restrict lane_idx data size to 3 */
2181 hdmi_dbg_print("lane_idx: %u\n", frl_cfg.lane_idx);
2182 str = cmd_arg->argv[3];
2183 debug_null_check_return(str);
2184 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2185 frl_cfg.ltp = (data > 8) ? 8 : data; /* cmd argv[1] is 19, restrict lane_idx data size to 8 */
2186 frl_cfg.debug_cmd = FRL_DEBUG_LTP_PATTERN;
2187 hdmi_dbg_print("LTP: %u\n", frl_cfg.ltp);
2188 } else if (is_str_equal(cmd_arg->argv[1], "5")) {
2189 data = (data >= 1000) ? 1000 : data; /* cmd argv[1] is 22, restrict LTS3 timeout data size to 1000 */
2190 hdmi_dbg_print("set LTS3 timeout %u.\n", data);
2191 frl_cfg.lts3_timeout = data;
2192 frl_cfg.debug_cmd = FRL_DEBUG_LTS3_TIMEOUT;
2193 } else if (is_str_equal(cmd_arg->argv[1], "6")) {
2194 data = (data > DEBUG_FRL_CTRL_TYPE_MAX) ? DEBUG_FRL_CTRL_TYPE_MAX : data;
2195 frl_cfg.crtl_type_config = data;
2196 frl_cfg.debug_cmd = FRL_DEBUG_CTRL_TYPE_CONFIG;
2197 hdmi_dbg_print("set RC to %u.\n", data);
2198 } else {
2199 hdmi_dbg_err("error argvs!\n");
2200 return HI_FAILURE;
2201 }
2202
2203 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_FRL, &frl_cfg);
2204
2205 return HI_SUCCESS;
2206 }
2207
debug_frl_cfg(hdmi_debug_cmd_arg * cmd_arg)2208 static hi_s32 debug_frl_cfg(hdmi_debug_cmd_arg *cmd_arg)
2209 {
2210 hi_u32 data;
2211 hi_s32 ret;
2212 hdmi_device *hdmi_dev = HI_NULL;
2213 hi_char *str = HI_NULL;
2214
2215 debug_null_check_return(cmd_arg);
2216 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
2217 debug_null_check_return(hdmi_dev);
2218
2219 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_2 || cmd_arg->argv[1] == HI_NULL) {
2220 hdmi_dbg_err("error argcs!\n");
2221 goto cfg_error;
2222 }
2223 str = cmd_arg->argv[2];
2224 debug_null_check_return(str);
2225 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2226 ret = frl_cfg_parse(hdmi_dev, cmd_arg, data);
2227 if (ret != HI_SUCCESS) {
2228 goto cfg_error;
2229 }
2230
2231 return HI_SUCCESS;
2232
2233 cfg_error:
2234 debug_frl_cfg_help();
2235
2236 return HI_FAILURE;
2237 }
2238
debug_frl_mach_help(hi_void)2239 static hi_void debug_frl_mach_help(hi_void)
2240 {
2241 hdmi_dbg_print("[usage ]: echo frlmach argv1 argv2 argv3 > /proc/umap/hdmi0 \n");
2242 hdmi_dbg_print("[argv1 ]: FRL debug command.\n");
2243 hdmi_dbg_print(" 0\t--train machine start [argv2: 0--stop, other--start].\n");
2244 hdmi_dbg_print(" 1\t--wait handle time [argv2: 1 < time <= 5000]\n"
2245 " 2\t--wait ready time [argv2: 1 < time <= 5000]\n"
2246 " 3\t--wait retrain time [argv2: 1 < time <= 5000]\n");
2247
2248 return;
2249 }
2250
debug_frl_mach(hdmi_debug_cmd_arg * cmd_arg)2251 static hi_s32 debug_frl_mach(hdmi_debug_cmd_arg *cmd_arg)
2252 {
2253 hi_u32 data;
2254 hdmi_device *hdmi_dev = HI_NULL;
2255 hdmi_frl_info *frl_info = HI_NULL;
2256 hdmi_frl_state_mach_info *mach_info = HI_NULL;
2257
2258 debug_null_check_return(cmd_arg);
2259 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
2260 debug_null_check_return(hdmi_dev);
2261
2262 frl_info = &hdmi_dev->frl_info;
2263 mach_info = &frl_info->state_mach_info;
2264
2265 debug_null_check_return(frl_info);
2266 debug_null_check_return(mach_info);
2267
2268 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_2 || cmd_arg->argv[1] == HI_NULL) {
2269 hdmi_dbg_err("error argcs!\n");
2270 goto mach_error;
2271 }
2272 debug_null_check_return(cmd_arg->argv[2]);
2273 data = debug_str_to_u32(cmd_arg->argv[2], &cmd_arg->argv[2], HDMI_DEBUG_BASE_DEC);
2274 if (is_str_equal(cmd_arg->argv[1], "0")) {
2275 hdmi_dbg_print("set FRL machine old(%s)->new(%s).\n",
2276 (mach_info->start_mach == HI_TRUE) ? "start" : "stop", (data == 0) ? "stop" : "start");
2277 mach_info->start_mach = (data == 0) ? HI_FALSE : HI_TRUE;
2278 } else if (is_str_equal(cmd_arg->argv[1], "1")) {
2279 if (data == 0 || data > DEBUG_MAX_DATA_SIZE) {
2280 goto mach_error;
2281 }
2282 hdmi_dbg_print("set wait handle time: old(%u)->new(%u).\n", mach_info->wait_handle_ms, data);
2283 mach_info->wait_handle_ms = data;
2284 } else if (is_str_equal(cmd_arg->argv[1], "2")) {
2285 if (data == 0 || data > DEBUG_MAX_DATA_SIZE) {
2286 goto mach_error;
2287 }
2288 hdmi_dbg_print("set wait ready time: old(%u)->new(%u).\n", mach_info->wait_ready_ms, data);
2289 mach_info->wait_ready_ms = data;
2290 } else if (is_str_equal(cmd_arg->argv[1], "3")) {
2291 if (data == 0 || data > DEBUG_MAX_DATA_SIZE) {
2292 goto mach_error;
2293 }
2294 hdmi_dbg_print("set wait retrain time: old(%u)->new(%u).\n", mach_info->wait_retrain_ms, data);
2295 mach_info->wait_retrain_ms = data;
2296 } else {
2297 hdmi_dbg_err("error argvs!\n");
2298 goto mach_error;
2299 }
2300
2301 mach_error:
2302 debug_frl_mach_help();
2303
2304 return HI_FAILURE;
2305 }
2306
debug_compat(hdmi_debug_cmd_arg * cmd_arg)2307 static hi_s32 debug_compat(hdmi_debug_cmd_arg *cmd_arg)
2308 {
2309 hi_u32 data;
2310 hi_char *str = HI_NULL;
2311 hdmi_device *hdmi_dev = HI_NULL;
2312 compatibility_info *compat_info = HI_NULL;
2313
2314 debug_null_check_return(cmd_arg);
2315 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
2316 debug_null_check_return(hdmi_dev);
2317
2318 compat_info = compat_info_get(hdmi_dev->hdmi_dev_id);
2319 debug_null_check_return(compat_info);
2320
2321 if (cmd_arg->argc < DEBUG_CMD_ARGC_COUNT_2 || cmd_arg->argv[1] == HI_NULL) {
2322 hdmi_dbg_err("error argcs!\n");
2323 goto avi_error;
2324 }
2325 str = cmd_arg->argv[2];
2326 debug_null_check_return(str);
2327 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2328
2329 hdmi_dbg_print("set AVI by gen5 old(%u)->new(%u).\n", compat_info->avi_use_gen5, data);
2330 compat_info->avi_use_gen5 = (data == 0) ? HI_FALSE : HI_TRUE;
2331
2332 avi_error:
2333 hdmi_dbg_print("[usage ]: echo frlavi argv1 > /proc/umap/hdmi0 \n");
2334 hdmi_dbg_print("[argv1 ]: FRL debug command.\n");
2335 hdmi_dbg_print(" \t--set AVI send by gen5 [argv1: 0-avi, others-gen5.\n");
2336
2337 return HI_FAILURE;
2338 }
2339
debug_frl_help(hi_void)2340 static hi_void debug_frl_help(hi_void)
2341 {
2342 hdmi_dbg_print("[Usage ]: echo frl argv1 argv2 argv3 > /proc/umap/hdmi0 \n");
2343 hdmi_dbg_print("[argv1 ]: FRL debug command.\n");
2344 hdmi_dbg_print(" 0\t--Train machine start [argv2: 0--stop, other--start].\n"
2345 " 1\t--FRL rate strategy [argv2: 0--little, 1--big]\n"
2346 " 2\t--HDMI2.1 strategy [argv2: 0--(>600M), 1--(>340M), 2--(p-format)])\n");
2347 hdmi_dbg_print(" 3\t--Max train fail times [argv2: 1 < times <= 5000]\n"
2348 " 4\t--Wait handle time [argv2: 1 < time <= 5000]\n"
2349 " 5\t--Wait ready time [argv2: 1 < time <= 5000]\n"
2350 " 6\t--Wait retrain time [argv2: 1 < time <= 5000]\n");
2351 hdmi_dbg_print(" 7\t--Forcible FRL/TMDS [argv2:(TMDS/FRL) argv3:(Rate)\n");
2352 hdmi_dbg_print(" 8\t--Train exception bp [argv2: b0(readychk) b1(resultchk) b2(retrain)]\n");
2353 hdmi_dbg_print(" 9\t--Timer test [argv2: 0--unused]\n");
2354 hdmi_dbg_print(" 10\t--LM table get [argv2: 0--unused]\n");
2355 hdmi_dbg_print(" 11\t--FRL fail strategy [argv2: [0-none, 1-TMDS, 2-notify]\n");
2356 hdmi_dbg_print(" 12\t--Inner RX CRC check [argv2: 0--unused]\n");
2357 hdmi_dbg_print(" 13\t--FRL machine mode [argv2: 0-step, 1-timeout]\n");
2358 hdmi_dbg_print(" 14\t--FRL Flt outtime [argv2: 0-time(ms)]\n");
2359 hdmi_dbg_print(" 15\t--FRL Training break [argv2: 0-hold, 1-break]\n");
2360 hdmi_dbg_print(" 16\t--FRL sw train mode [argv2: 0--delay, 1-timer]\n");
2361 hdmi_dbg_print(" 17\t--Train delay interval [argv2: time(ms)]\n");
2362 hdmi_dbg_print(" 18\t--FRL rate set [argv2: rate(maximum 6)]\n");
2363 hdmi_dbg_print(" 19\t--Training Pattern set [argv2: LaneId(0~3) argv3:LTPx(1~8)]\n");
2364 hdmi_dbg_print(" 20\t--Select FRL debug channel [argv2: 0:FRLTX--PHY 1:FRLTX-FRLRX--TMDS\n");
2365 hdmi_dbg_print(" 21\t--FFE level set [argv2-4: lane0-3 FFE level(0~3)\n");
2366 hdmi_dbg_print(" 22\t--Set LTS3 timeout [argv2: Timeout interval.(1ms default).\n");
2367 hdmi_dbg_print(" 23\t--Set AVI send by gen5 [argv2: 0-avi, 1-gen5, others-disable debug.\n");
2368 hdmi_dbg_print(" 24\t--Set control compress [argv2: 0-all, 3-none, 1/2-hw.\n");
2369 hdmi_dbg_print(" 25\t--Set max frl rate [argv2: 0 < rate <= 6.\n");
2370
2371 return;
2372 }
2373
2374 typedef hi_s32 (*debug_func)(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev);
2375 typedef struct {
2376 hi_char cmd_index;
2377 debug_func cmd_func;
2378 } frl_debug_func;
2379
debug_frl_machine(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2380 static hi_s32 debug_frl_machine(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2381 {
2382 hi_u32 data;
2383 hi_char *str = HI_NULL;
2384 hdmi_frl_info *frl_info = HI_NULL;
2385 hdmi_frl_state_mach_info *mach_info = HI_NULL;
2386
2387 frl_info = &hdmi_dev->frl_info;
2388 mach_info = &frl_info->state_mach_info;
2389
2390 str = cmd_arg->argv[2];
2391 debug_null_check_return(str);
2392 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2393
2394 hdmi_dbg_print("set frl machine old(%s)->new(%s).\n",
2395 (mach_info->start_mach == HI_TRUE) ? "start" : "stop", (data == 0) ? "stop" : "start");
2396
2397 mach_info->start_mach = (data == 0) ? HI_FALSE : HI_TRUE;
2398
2399 return HI_SUCCESS;
2400 }
2401
debug_frl_rete_strategy(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2402 static hi_s32 debug_frl_rete_strategy(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2403 {
2404 hi_u32 data;
2405 hi_char *str = HI_NULL;
2406 hdmi_frl_info *frl_info = HI_NULL;
2407
2408 frl_info = &hdmi_dev->frl_info;
2409
2410 str = cmd_arg->argv[2];
2411 debug_null_check_return(str);
2412 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2413 if (data >= HDMI_FRL_RATE_SELECT_BUTT) {
2414 return HI_FAILURE;
2415 }
2416 frl_info->rate_select = (hdmi_frl_rate_select)data;
2417 hdmi_dbg_print("set frl rete strategy %s.\n", (data == HDMI_FRL_RATE_SELECT_BIG) ? "BIG" : "LITTLE");
2418
2419 return HI_SUCCESS;
2420 }
2421
debug_frl_strategy_mode(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2422 static hi_s32 debug_frl_strategy_mode(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2423 {
2424 hi_u32 data;
2425 hi_char *str = HI_NULL;
2426 hdmi_frl_info *frl_info = HI_NULL;
2427
2428 frl_info = &hdmi_dev->frl_info;
2429
2430 str = cmd_arg->argv[2];
2431 debug_null_check_return(str);
2432 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2433 if (data >= HDMI_FRL_STRATEGY_MODE_BUTT) {
2434 return HI_FAILURE;
2435 }
2436
2437 hdmi_dbg_print("set 2.1 strategy old(%d)->new(%d).\n", frl_info->strategy_mode, data);
2438 frl_info->strategy_mode = (hdmi_frl_strategy_mode)data;
2439
2440 return HI_SUCCESS;
2441 }
2442
debug_frl_max_training_times(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2443 static hi_s32 debug_frl_max_training_times(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2444 {
2445 hi_u32 data;
2446 hi_char *str = HI_NULL;
2447 hdmi_frl_info *frl_info = HI_NULL;
2448
2449 frl_info = &hdmi_dev->frl_info;
2450
2451 str = cmd_arg->argv[2];
2452 debug_null_check_return(str);
2453 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2454 if (data == 0 || data > DEBUG_MAX_FRL_TIME) {
2455 return HI_FAILURE;
2456 }
2457
2458 hdmi_dbg_print("set max training fail times: old(%d)->new(%d).\n", frl_info->max_fail_times, data);
2459 frl_info->max_fail_times = data;
2460
2461 return HI_SUCCESS;
2462 }
2463
debug_frl_wait_handle_time(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2464 static hi_s32 debug_frl_wait_handle_time(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2465 {
2466 hi_u32 data;
2467 hi_char *str = HI_NULL;
2468 hdmi_frl_info *frl_info = HI_NULL;
2469 hdmi_frl_state_mach_info *mach_info = HI_NULL;
2470
2471 frl_info = &hdmi_dev->frl_info;
2472 mach_info = &frl_info->state_mach_info;
2473
2474 str = cmd_arg->argv[2];
2475 debug_null_check_return(str);
2476 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2477 if (data >= DEBUG_MAX_FRL_TIME) {
2478 return HI_FAILURE;
2479 }
2480
2481 hdmi_dbg_print("set wait handle time: old(%d)->new(%d).\n", mach_info->wait_handle_ms, data);
2482 mach_info->wait_handle_ms = data;
2483
2484 return HI_SUCCESS;
2485 }
2486
debug_frl_wait_ready_time(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2487 static hi_s32 debug_frl_wait_ready_time(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2488 {
2489 hi_u32 data;
2490 hi_char *str = HI_NULL;
2491 hdmi_frl_info *frl_info = HI_NULL;
2492 hdmi_frl_state_mach_info *mach_info = HI_NULL;
2493
2494 frl_info = &hdmi_dev->frl_info;
2495 mach_info = &frl_info->state_mach_info;
2496
2497 str = cmd_arg->argv[2];
2498 debug_null_check_return(str);
2499 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2500 if (data == 0 || data > DEBUG_MAX_FRL_TIME) {
2501 return HI_FAILURE;
2502 }
2503
2504 hdmi_dbg_print("set wait ready time: old(%d)->new(%d).\n", mach_info->wait_ready_ms, data);
2505 mach_info->wait_ready_ms = data;
2506
2507 return HI_SUCCESS;
2508 }
2509
debug_frl_wait_retrain_time(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2510 static hi_s32 debug_frl_wait_retrain_time(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2511 {
2512 hi_u32 data;
2513 hi_char *str = HI_NULL;
2514 hdmi_frl_info *frl_info = HI_NULL;
2515 hdmi_frl_state_mach_info *mach_info = HI_NULL;
2516
2517 frl_info = &hdmi_dev->frl_info;
2518 mach_info = &frl_info->state_mach_info;
2519
2520 str = cmd_arg->argv[2];
2521 debug_null_check_return(str);
2522 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2523 if (data == 0 || data > DEBUG_MAX_FRL_TIME) {
2524 return HI_FAILURE;
2525 }
2526
2527 hdmi_dbg_print("set wait retrain time: old(%d)->new(%d).\n", mach_info->wait_retrain_ms, data);
2528 mach_info->wait_retrain_ms = data;
2529
2530 return HI_SUCCESS;
2531 }
2532
debug_frl_mode(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2533 static hi_s32 debug_frl_mode(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2534 {
2535 hi_s32 ret;
2536 hi_u32 data;
2537 hi_char *str = HI_NULL;
2538 hdmi_frl_debug debug = {0};
2539
2540 str = cmd_arg->argv[2];
2541 debug_null_check_return(str);
2542 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2543 debug.hdmi_mode = (data == 1) ? HDMI_FRL_MODE_FRL : HDMI_FRL_MODE_TMDS;
2544 if (debug.hdmi_mode == HDMI_FRL_MODE_FRL) {
2545 if (cmd_arg->argc < DEBUG_NUM_3) {
2546 return HI_FAILURE;
2547 }
2548
2549 str = cmd_arg->argv[3];
2550 debug_null_check_return(str);
2551 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2552 debug.rate = (data >= FRL_WORK_MODE_4L12G) ? FRL_WORK_MODE_4L12G : data;
2553 }
2554
2555 ret = drv_hdmi_frl_mode_change(hdmi_dev->hdmi_dev_id, &debug);
2556 hdmi_dbg_print("frl debug: %s.\n", (ret == HI_SUCCESS) ? STR_SUCC : STR_FAIL);
2557
2558 return ret;
2559 }
2560
debug_frl_bypass(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2561 static hi_s32 debug_frl_bypass(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2562 {
2563 hi_u32 data;
2564 hi_char *str = HI_NULL;
2565 hdmi_frl_info *frl_info = HI_NULL;
2566
2567 frl_info = &hdmi_dev->frl_info;
2568
2569 str = cmd_arg->argv[2];
2570 debug_null_check_return(str);
2571 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2572
2573 frl_info->bypass = (data & 0x7);
2574 hdmi_dbg_print("bypass: 0x%x.\n", frl_info->bypass);
2575
2576 return HI_SUCCESS;
2577 }
2578
debug_frl_timer_test(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2579 static hi_s32 debug_frl_timer_test(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2580 {
2581 timer_config config = {0};
2582
2583 hi_unused(cmd_arg);
2584 hi_unused(hdmi_dev);
2585 g_timer_test = 0;
2586 config.start_time = hdmi_osal_get_time_in_ms();
2587 config.isr = debug_timer_isr;
2588 config.delay_ms = DEBUG_NUM_2;
2589
2590 hal_timer_deinit();
2591 hal_timer_init(&config);
2592 hal_timer_start();
2593 osal_msleep(FRL_WAIT);
2594 hdmi_dbg_print("timer test: %s.\n", (g_timer_test > DEBUG_TIME_TEST_MAX) ? STR_SUCC : STR_FAIL);
2595 osal_msleep(FRL_WAIT);
2596 hal_timer_deinit();
2597
2598 return HI_SUCCESS;
2599 }
2600
debug_frl_get_lm_table(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2601 static hi_s32 debug_frl_get_lm_table(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2602 {
2603 frl_debug debug = {0};
2604
2605 hi_unused(cmd_arg);
2606 debug.debug_cmd = FRL_DEBUG_LM_TABLE_GET;
2607 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_FRL, &debug);
2608 hdmi_dbg_print("get lm table success.\n");
2609
2610 return HI_SUCCESS;
2611 }
2612
debug_frl_fail_strategy(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2613 static hi_s32 debug_frl_fail_strategy(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2614 {
2615 hi_u32 data;
2616 hi_char *str = HI_NULL;
2617 hdmi_frl_info *frl_info = HI_NULL;
2618
2619 frl_info = &hdmi_dev->frl_info;
2620
2621 str = cmd_arg->argv[2];
2622 debug_null_check_return(str);
2623 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2624
2625 data = (data >= HDMI_FRL_FAIL_BUTT) ? HDMI_FRL_FAIL_BUTT : data;
2626 hdmi_dbg_print("frl fail strategy old(%d)->new(%d).\n", frl_info->fail_strategy, data);
2627 frl_info->fail_strategy = data;
2628
2629 return HI_SUCCESS;
2630 }
2631
debug_frl_crc_check(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2632 static hi_s32 debug_frl_crc_check(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2633 {
2634 hi_u32 crc[2] = {0};
2635
2636 hi_unused(cmd_arg);
2637 /* 4L-0x01, 3L-0x00 */
2638 hdmi_reg_write_u32(0x11143830, (hdmi_dev->frl_info.rate_info.cur_rate > FRL_WORK_MODE_3L6G) ? 0x01 : 0x00);
2639 frl_rx_lm_table_set();
2640 /* MSB */
2641 hdmi_reg_write_u32(0x11143204, 0x01010f0f); /* RX use MSB */
2642 osal_msleep(FRL_CRC_WAIT);
2643 crc[0] = hdmi_reg_read_u32(0x11143838);
2644 crc[1] = hdmi_reg_read_u32(0x11143180);
2645 /* LSB */
2646 hdmi_reg_write_u32(0x11143204, 0x81010f0f); /* TX use LSB */
2647 hdmi_dbg_print("CRC TX:0x%x, RX:0x%x\n", crc[1], crc[0]);
2648
2649 return HI_SUCCESS;
2650 }
2651
debug_frl_mach_change(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2652 static hi_s32 debug_frl_mach_change(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2653 {
2654 hi_u32 data;
2655 hi_char *str = HI_NULL;
2656 hdmi_frl_info *frl_info = HI_NULL;
2657
2658 frl_info = &hdmi_dev->frl_info;
2659
2660 str = cmd_arg->argv[2];
2661 debug_null_check_return(str);
2662 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2663 data = (data >= HDMI_FRL_MACH_MODE_TIMEOUT) ? HDMI_FRL_MACH_MODE_TIMEOUT : data;
2664 hdmi_dbg_print("frl mach change old(%d)->new(%d).\n",
2665 frl_info->state_mach_info.mach_mode, data);
2666 frl_info->state_mach_info.mach_mode = data;
2667
2668 return HI_SUCCESS;
2669 }
2670
debug_frl_link_training_timeout(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2671 static hi_s32 debug_frl_link_training_timeout(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2672 {
2673 hi_u32 data;
2674 hi_char *str = HI_NULL;
2675 hdmi_frl_info *frl_info = HI_NULL;
2676
2677 frl_info = &hdmi_dev->frl_info;
2678
2679 str = cmd_arg->argv[2];
2680 debug_null_check_return(str);
2681 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2682 data = (data > DEBUG_THOUSAND) ? DEBUG_THOUSAND : data;
2683 hdmi_dbg_print("frl link training timeout old(%llu)->new(%llu).\n",
2684 frl_info->state_mach_info.train_timeout, data);
2685 frl_info->state_mach_info.train_timeout = data;
2686
2687 return HI_SUCCESS;
2688 }
2689
debug_frl_training_break(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2690 static hi_s32 debug_frl_training_break(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2691 {
2692 hi_u32 data;
2693 hi_char *str = HI_NULL;
2694 frl_debug debug = {0};
2695
2696 str = cmd_arg->argv[2];
2697 debug_null_check_return(str);
2698 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2699
2700 hdmi_dbg_print("frl training break(%u).\n", data);
2701 debug.training_break = (hi_u8)data;
2702 debug.debug_cmd = FRL_DEBUG_TRAINING_BREAK;
2703 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_FRL, &debug);
2704
2705 return HI_SUCCESS;
2706 }
2707
debug_frl_sw_training_mode(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2708 static hi_s32 debug_frl_sw_training_mode(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2709 {
2710 hi_u32 data;
2711 frl_debug debug = {0};
2712 hi_char *str = HI_NULL;
2713 hdmi_frl_info *frl_info = HI_NULL;
2714
2715 frl_info = &hdmi_dev->frl_info;
2716
2717 str = cmd_arg->argv[2];
2718 debug_null_check_return(str);
2719 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2720
2721 debug.sw_train_mode = (data == 0) ? FRL_SW_TRAIN_DELAY : FRL_SW_TRAIN_TIMER;
2722 hdmi_dbg_print("set sw training mode to %s.\n", (data == 0) ? "delay" : "timer");
2723 debug.debug_cmd = FRL_DEBUG_SW_TRAIN_SEL;
2724 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_FRL, &debug);
2725 frl_info->state_mach_info.sw_train_mode = debug.sw_train_mode;
2726
2727 return HI_SUCCESS;
2728 }
2729
debug_frl_lts3_interval(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2730 static hi_s32 debug_frl_lts3_interval(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2731 {
2732 hi_u32 data;
2733 hi_char *str = HI_NULL;
2734 frl_debug debug = {0};
2735
2736 str = cmd_arg->argv[2];
2737 debug_null_check_return(str);
2738 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2739
2740 hdmi_dbg_print("set lts3 interval %ums.\n", data);
2741 debug.lts3_interval = data;
2742 debug.debug_cmd = FRL_DEBUG_LTS3_INTERVAL;
2743 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_FRL, &debug);
2744
2745 return HI_SUCCESS;
2746 }
2747
debug_frl_training_rate(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2748 static hi_s32 debug_frl_training_rate(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2749 {
2750 hi_u32 data;
2751 hi_char *str = HI_NULL;
2752
2753 str = cmd_arg->argv[2];
2754 debug_null_check_return(str);
2755 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2756 if (data > FRL_WORK_MODE_4L12G) {
2757 hdmi_dbg_err("error argcs!\n");
2758 return HI_FAILURE;
2759 }
2760 hdmi_dbg_print("training rate old(%u)->new(%u).\n",
2761 hdmi_dev->frl_info.rate_info.cur_rate, data);
2762 hdmi_dev->frl_info.rate_info.debug_rate = data;
2763 drv_hdmi_stop(hdmi_dev);
2764 drv_hdmi_vo_attr_set(hdmi_dev, &hdmi_dev->attr.vo_attr);
2765 drv_hdmi_start(hdmi_dev);
2766
2767 return HI_SUCCESS;
2768 }
2769
debug_frl_ltp_pattern(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2770 static hi_s32 debug_frl_ltp_pattern(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2771 {
2772 hi_u32 data;
2773 hi_char *str = HI_NULL;
2774 frl_debug debug = {0};
2775
2776 str = cmd_arg->argv[2];
2777 debug_null_check_return(str);
2778 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2779
2780 debug.lane_idx = (data > DEBUG_NUM_3) ? DEBUG_NUM_3 : data;
2781 hdmi_dbg_print("lane_idx: %d\n", debug.lane_idx);
2782 if (cmd_arg->argc < DEBUG_NUM_3) {
2783 return HI_FAILURE;
2784 }
2785
2786 str = cmd_arg->argv[3];
2787 debug_null_check_return(str);
2788 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2789 debug.ltp = (data > DEBUG_NUM_8) ? DEBUG_NUM_8 : data;
2790 debug.debug_cmd = FRL_DEBUG_LTP_PATTERN;
2791 hdmi_dbg_print("LTP: %d\n", debug.ltp);
2792
2793 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_FRL, &debug);
2794
2795 return HI_SUCCESS;
2796 }
2797
debug_frl_channel_sel(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2798 static hi_s32 debug_frl_channel_sel(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2799 {
2800 hi_u32 data;
2801 frl_debug debug = {0};
2802 hdmi_frl_debug frl_cfg = {0};
2803 hi_char *str = HI_NULL;
2804
2805 str = cmd_arg->argv[2];
2806 debug_null_check_return(str);
2807 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2808
2809 hdmi_dbg_print("select FRL CHANNEL %s.\n",
2810 (data == 0) ? "FRLTX--PHY" : "FRLTX-FRLRX--TMDS");
2811 debug.channel_sel = (data == 0) ? FRL_CHL_SEL_NORMAL : FRL_CHL_SEL_RX_TMDS;
2812 if (debug.channel_sel == FRL_CHL_SEL_RX_TMDS) {
2813 hal_call_void(hal_hdmi_frl_enable, hdmi_dev->hal, HI_FALSE);
2814 debug.rate = hdmi_dev->frl_info.rate_info.cur_rate;
2815 debug.debug_cmd = FRL_DEBUG_SELECT_CHANNEL;
2816 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_FRL, &debug);
2817 frl_rx_lm_table_set();
2818 frl_cfg.hdmi_mode = HDMI_FRL_MODE_TMDS;
2819 drv_hdmi_frl_mode_change(cmd_arg->hdmi_id, &frl_cfg);
2820
2821 debug.debug_cmd = FRL_DEBUG_RATE;
2822 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_FRL, &debug);
2823 hal_call_void(hal_hdmi_frl_enable, hdmi_dev->hal, HI_TRUE);
2824 } else {
2825 hdmi_dev->frl_info.mode = HDMI_FRL_MODE_FRL;
2826 debug.debug_cmd = FRL_DEBUG_SELECT_CHANNEL;
2827 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_FRL, &debug);
2828 drv_hdmi_stop(hdmi_dev);
2829 drv_hdmi_start(hdmi_dev);
2830 }
2831
2832 return HI_SUCCESS;
2833 }
2834
debug_frl_ffe(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2835 static hi_s32 debug_frl_ffe(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2836 {
2837 hi_u32 data;
2838 hi_char *str = HI_NULL;
2839 hdmi_phy_cfg phy_cfg = {0};
2840
2841 if (cmd_arg->argc < DEBUG_NUM_5) {
2842 return HI_FAILURE;
2843 }
2844
2845 str = cmd_arg->argv[2];
2846 debug_null_check_return(str);
2847 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2848
2849 phy_cfg.aen_tx_ffe[0] = data;
2850 str = cmd_arg->argv[3];
2851 debug_null_check_return(str);
2852 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2853 phy_cfg.aen_tx_ffe[1] = data;
2854 str = cmd_arg->argv[4];
2855 debug_null_check_return(str);
2856 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2857 phy_cfg.aen_tx_ffe[2] = data;
2858 str = cmd_arg->argv[5];
2859 debug_null_check_return(str);
2860 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2861 phy_cfg.aen_tx_ffe[3] = data;
2862
2863 if (phy_cfg.aen_tx_ffe[0] > FRL_TXFFE_MODE_3 ||
2864 phy_cfg.aen_tx_ffe[1] > FRL_TXFFE_MODE_3 ||
2865 phy_cfg.aen_tx_ffe[2] > FRL_TXFFE_MODE_3 ||
2866 phy_cfg.aen_tx_ffe[3] > FRL_TXFFE_MODE_3) {
2867 return HI_FAILURE;
2868 }
2869
2870 hdmi_dbg_print("FFE lane0:%d lane1:%d lane2:%d lane3:%d\n",
2871 phy_cfg.aen_tx_ffe[0], phy_cfg.aen_tx_ffe[1], phy_cfg.aen_tx_ffe[2], phy_cfg.aen_tx_ffe[3]);
2872 phy_cfg.rate = hdmi_dev->frl_info.rate_info.cur_rate;
2873 phy_cfg.mode_cfg = HDMI_PHY_MODE_CFG_TXFFE;
2874 hal_call_void(hal_hdmi_phy_set, hdmi_dev->hal, &phy_cfg);
2875
2876 return HI_SUCCESS;
2877 }
2878
debug_frl_lts3_timeout(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2879 static hi_s32 debug_frl_lts3_timeout(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2880 {
2881 hi_u32 data;
2882 frl_debug debug = {0};
2883 hi_char *str = HI_NULL;
2884
2885 str = cmd_arg->argv[2];
2886 debug_null_check_return(str);
2887 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2888 hdmi_dbg_print("set LTS3 timeout %u.\n", data);
2889 debug.lts3_timeout = data;
2890 debug.debug_cmd = FRL_DEBUG_LTS3_TIMEOUT;
2891 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_FRL, &debug);
2892
2893 return HI_SUCCESS;
2894 }
2895
debug_frl_avi_debug(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2896 static hi_s32 debug_frl_avi_debug(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2897 {
2898 hi_u32 data;
2899 hi_char *str = HI_NULL;
2900 compatibility_info *compat_info = HI_NULL;
2901
2902 compat_info = compat_info_get(hdmi_dev->hdmi_dev_id);
2903 debug_null_check_return(compat_info);
2904
2905 str = cmd_arg->argv[2];
2906 debug_null_check_return(str);
2907 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2908 if (data == 0) {
2909 compat_info->avi_use_gen5_debug = HI_TRUE;
2910 compat_info->avi_use_gen5 = HI_FALSE;
2911 } else if (data == 1) {
2912 compat_info->avi_use_gen5_debug = HI_TRUE;
2913 compat_info->avi_use_gen5 = HI_TRUE;
2914 } else {
2915 compat_info->avi_use_gen5_debug = HI_FALSE;
2916 }
2917
2918 hdmi_dbg_print("set AVI debug(%d), use(%d).\n",
2919 compat_info->avi_use_gen5_debug, compat_info->avi_use_gen5);
2920
2921 return HI_SUCCESS;
2922 }
2923
debug_frl_rc(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2924 static hi_s32 debug_frl_rc(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2925 {
2926 hi_u32 data;
2927 frl_debug debug = {0};
2928 hi_char *str = HI_NULL;
2929 compatibility_info *compat_info = HI_NULL;
2930
2931 compat_info = compat_info_get(hdmi_dev->hdmi_dev_id);
2932 debug_null_check_return(compat_info);
2933
2934 str = cmd_arg->argv[2];
2935 debug_null_check_return(str);
2936 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2937 if (data > DEBUG_RC_MAX) {
2938 data = DEBUG_RC_MAX;
2939 }
2940 hdmi_dbg_print("set rc to %d.\n", data);
2941
2942 if (data == DEBUG_RC_MAX) { /* set default cfg. */
2943 compat_info->ctl_type_config = FRL_CTRL_TYPE_COMPRESS_HW;
2944 } else {
2945 compat_info->ctl_type_config = data | HDMI_FRL_COMPRESS_DEBUG_MASK;
2946 }
2947
2948 debug.crtl_type_config = compat_info->ctl_type_config;
2949 debug.debug_cmd = FRL_DEBUG_CTRL_TYPE_CONFIG;
2950 hal_call_void(hal_hdmi_debug, hdmi_dev->hal, HDMI_DEBUG_CMD_FRL, &debug);
2951
2952 return HI_SUCCESS;
2953 }
2954
debug_frl_max_rate(hdmi_debug_cmd_arg * cmd_arg,hdmi_device * hdmi_dev)2955 static hi_s32 debug_frl_max_rate(hdmi_debug_cmd_arg *cmd_arg, hdmi_device *hdmi_dev)
2956 {
2957 hi_u32 data;
2958 hi_u8 old_max_rate;
2959 hi_char *str = HI_NULL;
2960 hdmi_frl_info *frl_info = HI_NULL;
2961 hdmi_tx_capability_data tx_cap = {0};
2962
2963 hal_call_void(hal_hdmi_tx_capability_get, hdmi_dev->hal, &tx_cap);
2964
2965 frl_info = &hdmi_dev->frl_info;
2966 old_max_rate = frl_info->rate_info.max_rate;
2967
2968 str = cmd_arg->argv[2];
2969 debug_null_check_return(str);
2970 data = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
2971 if (data > FRL_WORK_MODE_4L12G) {
2972 hdmi_dbg_print("err! exceed the tx_max_frl_rate. force to tx max rate.\n");
2973 data = FRL_WORK_MODE_4L12G;
2974 }
2975 hdmi_dbg_print("set max rate: %d->%d.\n", old_max_rate, data);
2976
2977 frl_info->rate_info.max_rate = data;
2978
2979 return HI_SUCCESS;
2980 }
2981
2982 static frl_debug_func g_frl_debug[] = {
2983 {0, debug_frl_machine},
2984 {1, debug_frl_rete_strategy},
2985 {2, debug_frl_strategy_mode},
2986 {3, debug_frl_max_training_times},
2987 {4, debug_frl_wait_handle_time},
2988 {5, debug_frl_wait_ready_time},
2989 {6, debug_frl_wait_retrain_time},
2990 {7, debug_frl_mode},
2991 {8, debug_frl_bypass},
2992 {9, debug_frl_timer_test},
2993 {10, debug_frl_get_lm_table},
2994 {11, debug_frl_fail_strategy},
2995 {12, debug_frl_crc_check},
2996 {13, debug_frl_mach_change},
2997 {14, debug_frl_link_training_timeout},
2998 {15, debug_frl_training_break},
2999 {16, debug_frl_sw_training_mode},
3000 {17, debug_frl_lts3_interval},
3001 {18, debug_frl_training_rate},
3002 {19, debug_frl_ltp_pattern},
3003 {20, debug_frl_channel_sel},
3004 {21, debug_frl_ffe},
3005 {22, debug_frl_lts3_timeout},
3006 {23, debug_frl_avi_debug},
3007 {24, debug_frl_rc},
3008 {25, debug_frl_max_rate}
3009 };
3010
debug_frl(hdmi_debug_cmd_arg * cmd_arg)3011 static hi_s32 debug_frl(hdmi_debug_cmd_arg *cmd_arg)
3012 {
3013 hi_u32 i;
3014 hi_s32 cmd_index;
3015 hi_s32 ret = HI_FAILURE;
3016 hi_char *str = HI_NULL;
3017 hdmi_device *hdmi_dev = HI_NULL;
3018
3019 debug_null_check_return(cmd_arg);
3020 hdmi_dev = get_hdmi_device(cmd_arg->hdmi_id);
3021 debug_null_check_return(hdmi_dev);
3022
3023 if (cmd_arg->argc < DEBUG_NUM_3 || cmd_arg->argv[1] == HI_NULL) {
3024 hdmi_dbg_err("error argcs!\n");
3025 goto usage_error;
3026 }
3027
3028 str = cmd_arg->argv[1];
3029 cmd_index = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
3030 for (i = 0; i < hdmi_array_size(g_frl_debug); i++) {
3031 if (cmd_index == g_frl_debug[i].cmd_index) {
3032 ret = g_frl_debug[i].cmd_func(cmd_arg, hdmi_dev);
3033 break;
3034 }
3035 }
3036
3037 if (ret != HI_SUCCESS || i >= hdmi_array_size(g_frl_debug)) {
3038 goto usage_error;
3039 }
3040
3041 return HI_SUCCESS;
3042
3043 usage_error:
3044 debug_frl_help();
3045
3046 return HI_FAILURE;
3047 }
3048 #endif
3049
3050 static const hdmi_debug_cmd_info g_cmd_table[] = {
3051 /* name short name func help info */
3052 { "help", "h", debug_print_help, "print these help info." },
3053 { "thread", "t", debug_thread, "thread status set on/off." },
3054 { "oe", "o", debug_oe, "phyoutput enable(oe) set on/off." },
3055 { "event", "e", debug_event, "hardware event [16,25] simulate." },
3056 { "edid", "ed", debug_edid, "edid raw data load." },
3057 { "avmute", "a", debug_avmute, "audio & video mute set on/off." },
3058 { "cbar", "c", debug_cbar, "colorbar set on/off." },
3059 #ifdef HDMI_SCDC_SUPPORT
3060 { "scdc", "sc", debug_scdc, "scdc set on/off." },
3061 #endif
3062 { "ddc", "dd", debug_ddc, "ddc frequency set in range [0,11]." },
3063 { "hdmimode", "m", debug_hdmi_mode, "hdmi tmds mode set dvi/1.4/2.0." },
3064 { "outclrspace", "oc", debug_out_color_space, "output colorspace mode set rgb/yuv422/yuv444/yuv420." },
3065 { "deepclr", "d", debug_deep_color, "output color depth set 08/10/12bit." },
3066 #ifndef HDMI_PRODUCT_HI3559A
3067 /* 59A is not support dither */
3068 { "dither", "di", debug_dither, "dither set on/off." },
3069 #endif
3070 { "aut", "au", debug_authenticate, "authentication mode set on/off." },
3071 { "cmd", "cmd", debug_cmd, "cmd set ." },
3072 #ifdef HDMI_HDR_SUPPORT
3073 { "hdr", "hm", debug_hdr, "hdr debug info set." },
3074 #endif
3075 #ifdef HDMI_FRL_SUPPORT
3076 { "frl", "fr", debug_frl, "FRL training test." },
3077 { "frlcfg", "cfg", debug_frl_cfg, "FRL cfg training test." },
3078 { "frlattr", "attr", debug_frl_attr, "FRL attr training test." },
3079 { "frlmach", "ma", debug_frl_mach, "FRL mach training test." },
3080 { "compat", "cmp", debug_compat, "compat training test." }
3081 #endif
3082 };
3083
debug_print_help(hdmi_debug_cmd_arg * cmd_arg)3084 static hi_s32 debug_print_help(hdmi_debug_cmd_arg *cmd_arg)
3085 {
3086 hi_u32 i;
3087
3088 hi_unused(cmd_arg);
3089 for (i = 0; i < hdmi_array_size(g_cmd_table); i++) {
3090 if (g_cmd_table[i].comment_help && g_cmd_table[i].name) {
3091 hdmi_dbg_print(" %02u. %-20s", i, g_cmd_table[i].name);
3092 hdmi_dbg_print("--[%-2s]%s\n", g_cmd_table[i].short_name, g_cmd_table[i].comment_help);
3093 } else {
3094 hdmi_dbg_err("g_cmd_table[%u].comment_help or name is null!\n", i);
3095 }
3096 }
3097
3098 hdmi_dbg_print("\n");
3099 hdmi_dbg_print(" you can use 'echo cmd argv... > /proc/umap/hdmi0' execute a debug command.\n"
3100 " you can use 'echo cmd > /proc/umap/hdmi0' for more details about each command.\n"
3101 " here, 'cmd' refers to NO./complete-name/short-name above.\n");
3102
3103 return HI_SUCCESS;
3104 }
3105
debug_cmd_handle(hdmi_debug_cmd_arg * cmd_arg)3106 static hi_s32 debug_cmd_handle(hdmi_debug_cmd_arg *cmd_arg)
3107 {
3108 hi_u32 i = 0;
3109 hi_u32 cmd_num;
3110 hi_char *str = HI_NULL;
3111
3112 str = cmd_arg->argv[0];
3113 if (str == HI_NULL) {
3114 goto error_help;
3115 }
3116
3117 if (cmd_arg->argc > 0) {
3118 cmd_num = debug_str_to_u32(str, &str, HDMI_DEBUG_BASE_DEC);
3119 for (i = 0; i < hdmi_array_size(g_cmd_table); i++) {
3120 if (g_cmd_table[i].name == HI_NULL) {
3121 hdmi_dbg_err("g_cmd_table[%u].name null\n", i);
3122 goto error_help;
3123 }
3124 if (((cmd_num != i) || (*str != '\0')) &&
3125 (is_str_equal(g_cmd_table[i].name, cmd_arg->argv[0]) == HI_FALSE) &&
3126 (is_str_equal(g_cmd_table[i].short_name, cmd_arg->argv[0]) == HI_FALSE)) {
3127 continue;
3128 }
3129 if (g_cmd_table[i].fn_cmd_func != HI_NULL) {
3130 g_cmd_table[i].fn_cmd_func(cmd_arg);
3131 } else {
3132 hdmi_dbg_err("g_cmd_table[%u].fn_cmd_func null\n", i);
3133 goto error_help;
3134 }
3135 break;
3136 }
3137 }
3138
3139 if (i == hdmi_array_size(g_cmd_table)) {
3140 goto error_help;
3141 }
3142
3143 return HI_SUCCESS;
3144
3145 error_help:
3146
3147 return debug_print_help(cmd_arg);
3148 }
3149
debug_cmd_line_parse(hi_char * cmd_str,hi_u32 len,hdmi_debug_cmd_arg * cmd_arg)3150 static hi_s32 debug_cmd_line_parse(hi_char *cmd_str, hi_u32 len, hdmi_debug_cmd_arg *cmd_arg)
3151 {
3152 hi_u32 i;
3153 hi_u32 tmp_argc = 0;
3154 hi_char *tmp_str = NULL;
3155
3156 if (len == 0 || len >= DEBUG_MAX_CMD_CHAR_NUM) {
3157 hdmi_dbg_err("invalid param!\n");
3158 return HI_FAILURE;
3159 }
3160
3161 tmp_str = cmd_str;
3162 cmd_arg->argc = 0;
3163
3164 for (i = 0; i < DEBUG_MAX_ARGV_NUM; i++) {
3165 cmd_arg->argv[i] = HI_NULL;
3166 }
3167
3168 if ((*tmp_str != DEBUG_CHAR_SPACE) && (*tmp_str != DEBUG_CHAR_TAB)) {
3169 cmd_arg->argv[tmp_argc] = tmp_str;
3170 tmp_argc++;
3171 tmp_str++;
3172 }
3173
3174 for (i = 0; i < len; tmp_str++, i++) {
3175 if ((*tmp_str == DEBUG_CHAR_SPACE) || (*tmp_str == DEBUG_CHAR_TAB)) {
3176 *tmp_str = '\0';
3177
3178 if ((*(tmp_str + 1) == DEBUG_CHAR_SPACE) || (*(tmp_str + 1) == DEBUG_CHAR_TAB)) {
3179 continue;
3180 }
3181 cmd_arg->argv[tmp_argc] = tmp_str + 1;
3182 tmp_argc++;
3183
3184 if (tmp_argc == 3) { /* 3, is tmp argument cont */
3185 cmd_arg->remain_len = len - i;
3186 }
3187 if (tmp_argc >= DEBUG_MAX_ARGV_NUM) {
3188 hdmi_dbg_print(" too much argcs.max argc = %u\n", DEBUG_MAX_ARGV_NUM);
3189 tmp_argc = DEBUG_MAX_ARGV_NUM;
3190 break;
3191 }
3192 }
3193 }
3194
3195 cmd_arg->argc = tmp_argc;
3196
3197 return HI_SUCCESS;
3198 }
3199
drv_hdmi_debug_edid_raw_read(hdmi_edid_updata_mode mode,hi_u8 * data,hi_u32 len)3200 hi_s32 drv_hdmi_debug_edid_raw_read(hdmi_edid_updata_mode mode, hi_u8 *data, hi_u32 len)
3201 {
3202 errno_t ret;
3203 hdmi_debug_edid *dbg_edid = &g_debug_edid;
3204
3205 if ((mode != HDMI_EDID_UPDATE_DEBUG) || (dbg_edid->data_valid == HI_FALSE) ||
3206 (data == HI_NULL) || (len > HDMI_EDID_TOTAL_SIZE)) {
3207 hdmi_err("debug edid read fail,data_valid=%u !\n", dbg_edid->data_valid);
3208 return HI_FAILURE;
3209 }
3210 ret = memcpy_s(data, len, dbg_edid->data, dbg_edid->len);
3211 hdmi_unequal_eok_return(ret, HI_ERR_HDMI_INVALID_PARA);
3212
3213 return dbg_edid->len;
3214 }
3215
drv_hdmi_debug_source_write(hdmi_proc_entry * file,const char * buf,hi_u32 count,hi_s64 * data)3216 hi_s32 drv_hdmi_debug_source_write(hdmi_proc_entry *file, const char *buf, hi_u32 count, hi_s64 *data)
3217 {
3218 hi_s32 ret;
3219 hi_char *tmp_buf = HI_NULL;
3220 hdmi_debug_cmd_arg cmd_arg;
3221 hdmi_device *hdmi_dev = HI_NULL;
3222
3223 debug_null_check_return(buf);
3224 debug_null_check_return(data);
3225 debug_null_check_return(file);
3226
3227 (hi_void)memset_s(&cmd_arg, sizeof(hdmi_debug_cmd_arg), 0, sizeof(hdmi_debug_cmd_arg));
3228 cmd_arg.hdmi_id = HDMI_DEVICE_ID0;
3229
3230 hdmi_dev = get_hdmi_device(cmd_arg.hdmi_id);
3231 debug_null_check_return(hdmi_dev);
3232
3233 tmp_buf = (hi_char *)osal_vmalloc(DEBUG_MAX_CMD_CHAR_NUM);
3234 if (tmp_buf == HI_NULL) {
3235 hdmi_dbg_err("vmalloc fail!\n");
3236 return EFAULT;
3237 }
3238 (hi_void)memset_s(tmp_buf, DEBUG_MAX_CMD_CHAR_NUM, '\0', DEBUG_MAX_CMD_CHAR_NUM);
3239
3240 if (count >= DEBUG_MAX_CMD_CHAR_NUM || count == 0) {
3241 hdmi_dbg_err("\n echo chars err. count=%lu, max cnt=%u\n", count, DEBUG_MAX_CMD_CHAR_NUM);
3242 goto error;
3243 }
3244 if (osal_copy_from_user(tmp_buf, buf, count)) {
3245 hdmi_dbg_err("\n copy from user failed. \n");
3246 goto error;
3247 }
3248 tmp_buf[count - 1] = '\0';
3249 ret = debug_cmd_line_parse(tmp_buf, count - 1, &cmd_arg);
3250 if (ret != HI_SUCCESS) {
3251 goto error;
3252 }
3253
3254 hdmi_mutex_lock(hdmi_dev->mutex_proc);
3255 if (hdmi_dev->user_cnt == 0 && hdmi_dev->kernel_cnt == 0) {
3256 hdmi_mutex_unlock(hdmi_dev->mutex_proc);
3257 hdmi_dbg_err("\n HDMI not open! \n");
3258 goto error;
3259 }
3260
3261 ret = debug_cmd_handle(&cmd_arg);
3262 hdmi_mutex_unlock(hdmi_dev->mutex_proc);
3263
3264 if (ret != HI_SUCCESS) {
3265 hdmi_dbg_err("\n cmd handle error \n");
3266 goto error;
3267 }
3268
3269 osal_vfree(tmp_buf);
3270 return count;
3271
3272 error:
3273 osal_vfree(tmp_buf);
3274
3275 return -EFAULT;
3276 }
3277
3278