• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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