blob: 99607e7905138e530e74eeb23f1ea503e00194aa [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001/* Copyright (c) 2009-2011, Code Aurora Forum. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 */
13
14#include <linux/module.h>
15#include <linux/kernel.h>
16#include <linux/sched.h>
17#include <linux/time.h>
18#include <linux/init.h>
19#include <linux/interrupt.h>
20#include <linux/spinlock.h>
21#include <linux/hrtimer.h>
22#include <linux/clk.h>
23#include <linux/io.h>
24#include <linux/debugfs.h>
25#include <linux/semaphore.h>
26#include <linux/uaccess.h>
27#include <asm/system.h>
28#include <asm/mach-types.h>
29#include <mach/hardware.h>
30#include "mdp.h"
31#include "msm_fb.h"
32#include "mdp4.h"
33
34struct mdp4_statistic mdp4_stat;
35
36unsigned is_mdp4_hw_reset(void)
37{
38 unsigned hw_reset = 0;
39
40 /* Only revisions > v2.1 may be reset or powered off/on at runtime */
41 if (mdp_hw_revision > MDP4_REVISION_V2_1) {
42 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
43 hw_reset = !inpdw(MDP_BASE + 0x003c);
44 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
45 }
46
47 return hw_reset;
48}
49
50void mdp4_sw_reset(ulong bits)
51{
52 /* MDP cmd block enable */
53 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
54
55 bits &= 0x1f; /* 5 bits */
56 outpdw(MDP_BASE + 0x001c, bits); /* MDP_SW_RESET */
57
58 while (inpdw(MDP_BASE + 0x001c) & bits) /* self clear when complete */
59 ;
60 /* MDP cmd block disable */
61 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
62
63 MSM_FB_DEBUG("mdp4_sw_reset: 0x%x\n", (int)bits);
64}
65
66void mdp4_overlay_cfg(int overlayer, int blt_mode, int refresh, int direct_out)
67{
68 ulong bits = 0;
69
70 if (blt_mode)
71 bits |= (1 << 3);
72 refresh &= 0x03; /* 2 bites */
73 bits |= (refresh << 1);
74 direct_out &= 0x01;
75 bits |= direct_out;
76 /* MDP cmd block enable */
77 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
78
79
80 if (overlayer == MDP4_MIXER0)
81 outpdw(MDP_BASE + 0x10004, bits); /* MDP_OVERLAY0_CFG */
82 else
83 outpdw(MDP_BASE + 0x18004, bits); /* MDP_OVERLAY1_CFG */
84
85 MSM_FB_DEBUG("mdp4_overlay_cfg: 0x%x\n",
86 (int)inpdw(MDP_BASE + 0x10004));
87 /* MDP cmd block disable */
88 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
89}
90
91void mdp4_display_intf_sel(int output, ulong intf)
92{
93 ulong bits, mask, data;
94 /* MDP cmd block enable */
95 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
96
97 bits = inpdw(MDP_BASE + 0x0038); /* MDP_DISP_INTF_SEL */
98
99 if (intf == DSI_VIDEO_INTF) {
100 data = 0x40; /* bit 6 */
101 intf = MDDI_LCDC_INTF;
102 if (output == SECONDARY_INTF_SEL) {
103 MSM_FB_INFO("%s: Illegal INTF selected, output=%d \
104 intf=%d\n", __func__, output, (int)intf);
105 }
106 } else if (intf == DSI_CMD_INTF) {
107 data = 0x80; /* bit 7 */
108 intf = MDDI_INTF;
109 if (output == EXTERNAL_INTF_SEL) {
110 MSM_FB_INFO("%s: Illegal INTF selected, output=%d \
111 intf=%d\n", __func__, output, (int)intf);
112 }
113 } else
114 data = 0;
115
116 mask = 0x03; /* 2 bits */
117 intf &= 0x03; /* 2 bits */
118
119 switch (output) {
120 case EXTERNAL_INTF_SEL:
121 intf <<= 4;
122 mask <<= 4;
123 break;
124 case SECONDARY_INTF_SEL:
125 intf &= 0x02; /* only MDDI and EBI2 support */
126 intf <<= 2;
127 mask <<= 2;
128 break;
129 default:
130 break;
131 }
132
133 intf |= data;
134 mask |= data;
135
136 bits &= ~mask;
137 bits |= intf;
138
139 outpdw(MDP_BASE + 0x0038, bits); /* MDP_DISP_INTF_SEL */
140 /* MDP cmd block disable */
141 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
142
143 MSM_FB_DEBUG("mdp4_display_intf_sel: 0x%x\n", (int)inpdw(MDP_BASE + 0x0038));
144}
145
146unsigned long mdp4_display_status(void)
147{
148 ulong status;
149 /* MDP cmd block enable */
150 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
151
152 status = inpdw(MDP_BASE + 0x0018) & 0x3ff; /* MDP_DISPLAY_STATUS */
153
154 /* MDP cmd block disable */
155 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
156 return status;
157}
158
159void mdp4_ebi2_lcd_setup(int lcd, ulong base, int ystride)
160{
161 /* always use memory map */
162 ystride &= 0x01fff; /* 13 bits */
163 /* MDP cmd block enable */
164 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
165
166 if (lcd == EBI2_LCD0) {
167 outpdw(MDP_BASE + 0x0060, base);/* MDP_EBI2_LCD0 */
168 outpdw(MDP_BASE + 0x0068, ystride);/* MDP_EBI2_LCD0_YSTRIDE */
169 } else {
170 outpdw(MDP_BASE + 0x0064, base);/* MDP_EBI2_LCD1 */
171 outpdw(MDP_BASE + 0x006c, ystride);/* MDP_EBI2_LCD1_YSTRIDE */
172 }
173 /* MDP cmd block disable */
174 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
175}
176
177void mdp4_mddi_setup(int mddi, unsigned long id)
178{
179 ulong bits;
180
181 if (mddi == MDDI_EXTERNAL_SET)
182 bits = 0x02;
183 else if (mddi == MDDI_SECONDARY_SET)
184 bits = 0x01;
185 else
186 bits = 0; /* PRIMARY_SET */
187
188 id <<= 16;
189
190 bits |= id;
191 /* MDP cmd block enable */
192 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
193
194 outpdw(MDP_BASE + 0x0090, bits); /* MDP_MDDI_PARAM_WR_SEL */
195 /* MDP cmd block disable */
196 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
197}
198
199int mdp_ppp_blit(struct fb_info *info, struct mdp_blit_req *req)
200{
201
202 /* not implemented yet */
203 return -1;
204}
205
206void mdp4_fetch_cfg(uint32 core_clk)
207{
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700208 uint32 dmap_data, vg_data;
209 char *base;
210 int i;
211 /* MDP cmd block enable */
212 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
213
Adrian Salido-Moreno3436dae2011-08-08 12:13:07 -0700214 if (mdp_rev >= MDP_REV_41 || core_clk >= 90000000) { /* 90 Mhz */
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700215 dmap_data = 0x47; /* 16 bytes-burst x 8 req */
216 vg_data = 0x47; /* 16 bytes-burs x 8 req */
217 } else {
218 dmap_data = 0x27; /* 8 bytes-burst x 8 req */
219 vg_data = 0x43; /* 16 bytes-burst x 4 req */
220 }
221
222 MSM_FB_DEBUG("mdp4_fetch_cfg: dmap=%x vg=%x\n",
223 dmap_data, vg_data);
224
225 /* dma_p fetch config */
226 outpdw(MDP_BASE + 0x91004, dmap_data);
227 /* dma_e fetch config */
228 outpdw(MDP_BASE + 0xB1004, dmap_data);
229
230 /*
231 * set up two vg pipes and two rgb pipes
232 */
233 base = MDP_BASE + MDP4_VIDEO_BASE;
234 for (i = 0; i < 4; i++) {
235 outpdw(base + 0x1004, vg_data);
236 base += MDP4_VIDEO_OFF;
237 }
238 /* MDP cmd block disable */
239 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
240}
241
242void mdp4_hw_init(void)
243{
244 ulong bits;
Ravishangar Kalyanam419051b2011-08-31 19:07:53 -0700245 uint32 clk_rate;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700246
247 /* MDP cmd block enable */
248 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
249
Nagamalleswararao Ganji074ee022011-09-02 12:06:37 -0700250 mdp4_update_perf_level(OVERLAY_PERF_LEVEL4);
251
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700252#ifdef MDP4_ERROR
253 /*
254 * Issue software reset on DMA_P will casue DMA_P dma engine stall
255 * on LCDC mode. However DMA_P does not stall at MDDI mode.
256 * This need further investigation.
257 */
258 mdp4_sw_reset(0x17);
259#endif
260
261 mdp4_clear_lcdc();
262
263 mdp4_mixer_blend_init(0);
264 mdp4_mixer_blend_init(1);
265 mdp4_vg_qseed_init(0);
266 mdp4_vg_qseed_init(1);
267
Nagamalleswararao Ganji4b991722011-01-28 13:24:34 -0800268 mdp4_vg_csc_setup(0);
269 mdp4_vg_csc_setup(1);
270 mdp4_mixer1_csc_setup();
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700271
Ravishangar Kalyaname7833e22011-07-22 16:20:19 -0700272 if (mdp_rev <= MDP_REV_41) {
273 mdp4_mixer_gc_lut_setup(0);
274 mdp4_mixer_gc_lut_setup(1);
275 }
276
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700277 mdp4_vg_igc_lut_setup(0);
278 mdp4_vg_igc_lut_setup(1);
279
280 mdp4_rgb_igc_lut_setup(0);
281 mdp4_rgb_igc_lut_setup(1);
282
283 outp32(MDP_EBI2_PORTMAP_MODE, 0x3);
284
285 /* system interrupts */
286
287 bits = mdp_intr_mask;
288 outpdw(MDP_BASE + 0x0050, bits);/* enable specififed interrupts */
289
290 /* histogram */
291 MDP_OUTP(MDP_BASE + 0x95010, 1); /* auto clear HIST */
292
293 /* enable histogram interrupts */
294 outpdw(MDP_BASE + 0x9501c, INTR_HIST_DONE);
295
296 /* For the max read pending cmd config below, if the MDP clock */
297 /* is less than the AXI clock, then we must use 3 pending */
298 /* pending requests. Otherwise, we should use 8 pending requests. */
299 /* In the future we should do this detection automatically. */
300
301 /* max read pending cmd config */
302 outpdw(MDP_BASE + 0x004c, 0x02222); /* 3 pending requests */
303
304#ifndef CONFIG_FB_MSM_OVERLAY
305 /* both REFRESH_MODE and DIRECT_OUT are ignored at BLT mode */
306 mdp4_overlay_cfg(MDP4_MIXER0, OVERLAY_MODE_BLT, 0, 0);
307 mdp4_overlay_cfg(MDP4_MIXER1, OVERLAY_MODE_BLT, 0, 0);
308#endif
309
Ravishangar Kalyanam419051b2011-08-31 19:07:53 -0700310 clk_rate = mdp_get_core_clk();
311 mdp4_fetch_cfg(clk_rate);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700312
313 /* Mark hardware as initialized. Only revisions > v2.1 have a register
314 * for tracking core reset status. */
315 if (mdp_hw_revision > MDP4_REVISION_V2_1)
316 outpdw(MDP_BASE + 0x003c, 1);
Ravishangar Kalyanam419051b2011-08-31 19:07:53 -0700317
318 /* MDP cmd block disable */
319 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700320}
321
322
323void mdp4_clear_lcdc(void)
324{
325 uint32 bits;
326
327 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
328
329 bits = inpdw(MDP_BASE + 0xc0000);
330 if (bits & 0x01) { /* enabled already */
331 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
332 return;
333 }
334
335 outpdw(MDP_BASE + 0xc0004, 0); /* vsync ctrl out */
336 outpdw(MDP_BASE + 0xc0008, 0); /* vsync period */
337 outpdw(MDP_BASE + 0xc000c, 0); /* vsync pusle width */
338 outpdw(MDP_BASE + 0xc0010, 0); /* lcdc display HCTL */
339 outpdw(MDP_BASE + 0xc0014, 0); /* lcdc display v start */
340 outpdw(MDP_BASE + 0xc0018, 0); /* lcdc display v end */
341 outpdw(MDP_BASE + 0xc001c, 0); /* lcdc active hctl */
342 outpdw(MDP_BASE + 0xc0020, 0); /* lcdc active v start */
343 outpdw(MDP_BASE + 0xc0024, 0); /* lcdc active v end */
344 outpdw(MDP_BASE + 0xc0028, 0); /* lcdc board color */
345 outpdw(MDP_BASE + 0xc002c, 0); /* lcdc underflow ctrl */
346 outpdw(MDP_BASE + 0xc0030, 0); /* lcdc hsync skew */
347 outpdw(MDP_BASE + 0xc0034, 0); /* lcdc test ctl */
348 outpdw(MDP_BASE + 0xc0038, 0); /* lcdc ctl polarity */
349
350 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
351}
352
353irqreturn_t mdp4_isr(int irq, void *ptr)
354{
355 uint32 isr, mask, panel;
356 struct mdp_dma_data *dma;
357
358 mdp_is_in_isr = TRUE;
359
360 /* complete all the reads before reading the interrupt
361 * status register - eliminate effects of speculative
362 * reads by the cpu
363 */
364 rmb();
365 isr = inpdw(MDP_INTR_STATUS);
366 if (isr == 0)
367 goto out;
368
369 mdp4_stat.intr_tot++;
370 mask = inpdw(MDP_INTR_ENABLE);
371 outpdw(MDP_INTR_CLEAR, isr);
372
373 if (isr & INTR_PRIMARY_INTF_UDERRUN) {
374 mdp4_stat.intr_underrun_p++;
375 /* When underun occurs mdp clear the histogram registers
376 that are set before in hw_init so restore them back so
377 that histogram works.*/
378 MDP_OUTP(MDP_BASE + 0x95010, 1);
379 outpdw(MDP_BASE + 0x9501c, INTR_HIST_DONE);
380 if (mdp_is_hist_start == TRUE) {
381 MDP_OUTP(MDP_BASE + 0x95004,
Ravishangar Kalyanam8fef09a2011-08-09 17:36:23 -0700382 mdp_hist_frame_cnt);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700383 MDP_OUTP(MDP_BASE + 0x95000, 1);
384 }
385 }
386
387 if (isr & INTR_EXTERNAL_INTF_UDERRUN)
388 mdp4_stat.intr_underrun_e++;
389
390 isr &= mask;
391
392 if (isr == 0)
393 goto out;
394
395 panel = mdp4_overlay_panel_list();
396 if (isr & INTR_PRIMARY_VSYNC) {
397 dma = &dma2_data;
398 spin_lock(&mdp_spin_lock);
399 mdp_intr_mask &= ~INTR_PRIMARY_VSYNC;
400 outp32(MDP_INTR_ENABLE, mdp_intr_mask);
401 dma->waiting = FALSE;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700402 if (panel & MDP4_PANEL_LCDC)
403 mdp4_primary_vsync_lcdc();
404#ifdef CONFIG_FB_MSM_MIPI_DSI
405 else if (panel & MDP4_PANEL_DSI_VIDEO)
406 mdp4_primary_vsync_dsi_video();
407#endif
kuogee hsieh3de11f32011-07-08 14:09:11 -0700408 spin_unlock(&mdp_spin_lock);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700409 }
410#ifdef CONFIG_FB_MSM_DTV
411 if (isr & INTR_EXTERNAL_VSYNC) {
412 dma = &dma_e_data;
413 spin_lock(&mdp_spin_lock);
414 mdp_intr_mask &= ~INTR_EXTERNAL_VSYNC;
415 outp32(MDP_INTR_ENABLE, mdp_intr_mask);
416 dma->waiting = FALSE;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700417 if (panel & MDP4_PANEL_DTV)
418 mdp4_external_vsync_dtv();
kuogee hsieh3de11f32011-07-08 14:09:11 -0700419 spin_unlock(&mdp_spin_lock);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700420 }
421#endif
422 if (isr & INTR_DMA_P_DONE) {
423 mdp4_stat.intr_dma_p++;
424 dma = &dma2_data;
425 if (panel & MDP4_PANEL_LCDC) {
426 /* disable LCDC interrupt */
427 spin_lock(&mdp_spin_lock);
428 mdp_intr_mask &= ~INTR_DMA_P_DONE;
429 outp32(MDP_INTR_ENABLE, mdp_intr_mask);
430 dma->waiting = FALSE;
kuogee hsiehc4b8b2f2011-07-12 13:32:14 -0700431 mdp4_dma_p_done_lcdc();
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700432 spin_unlock(&mdp_spin_lock);
kuogee hsiehc4b8b2f2011-07-12 13:32:14 -0700433 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700434#ifdef CONFIG_FB_MSM_OVERLAY
435#ifdef CONFIG_FB_MSM_MIPI_DSI
kuogee hsiehc4b8b2f2011-07-12 13:32:14 -0700436 else if (panel & MDP4_PANEL_DSI_VIDEO) {
437 /* disable LCDC interrupt */
438 spin_lock(&mdp_spin_lock);
439 mdp_intr_mask &= ~INTR_DMA_P_DONE;
440 outp32(MDP_INTR_ENABLE, mdp_intr_mask);
441 dma->waiting = FALSE;
442 mdp4_dma_p_done_dsi_video();
443 spin_unlock(&mdp_spin_lock);
444 } else if (panel & MDP4_PANEL_DSI_CMD) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700445 mdp4_dma_p_done_dsi(dma);
kuogee hsiehc4b8b2f2011-07-12 13:32:14 -0700446 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700447#else
kuogee hsiehc4b8b2f2011-07-12 13:32:14 -0700448 else { /* MDDI */
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700449 mdp4_dma_p_done_mddi();
450 mdp_pipe_ctrl(MDP_DMA2_BLOCK,
451 MDP_BLOCK_POWER_OFF, TRUE);
kuogee hsiehc4b8b2f2011-07-12 13:32:14 -0700452 complete(&dma->comp);
453 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700454#endif
455#else
kuogee hsiehc4b8b2f2011-07-12 13:32:14 -0700456 else {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700457 spin_lock(&mdp_spin_lock);
458 dma->busy = FALSE;
459 spin_unlock(&mdp_spin_lock);
kuogee hsiehc4b8b2f2011-07-12 13:32:14 -0700460 complete(&dma->comp);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700461 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700462#endif
463 }
464 if (isr & INTR_DMA_S_DONE) {
465 mdp4_stat.intr_dma_s++;
466#if defined(CONFIG_FB_MSM_OVERLAY) && defined(CONFIG_FB_MSM_MDDI)
467 dma = &dma2_data;
468#else
469 dma = &dma_s_data;
470#endif
471
472 dma->busy = FALSE;
473 mdp_pipe_ctrl(MDP_DMA_S_BLOCK,
474 MDP_BLOCK_POWER_OFF, TRUE);
475 complete(&dma->comp);
476 }
477 if (isr & INTR_DMA_E_DONE) {
478 mdp4_stat.intr_dma_e++;
479 dma = &dma_e_data;
480 spin_lock(&mdp_spin_lock);
481 mdp_intr_mask &= ~INTR_DMA_E_DONE;
482 outp32(MDP_INTR_ENABLE, mdp_intr_mask);
483 dma->busy = FALSE;
484
485 if (dma->waiting) {
486 dma->waiting = FALSE;
487 complete(&dma->comp);
488 }
489 spin_unlock(&mdp_spin_lock);
490 }
491#ifdef CONFIG_FB_MSM_OVERLAY
492 if (isr & INTR_OVERLAY0_DONE) {
493 mdp4_stat.intr_overlay0++;
494 dma = &dma2_data;
495 if (panel & (MDP4_PANEL_LCDC | MDP4_PANEL_DSI_VIDEO)) {
496 /* disable LCDC interrupt */
497 spin_lock(&mdp_spin_lock);
498 mdp_intr_mask &= ~INTR_OVERLAY0_DONE;
499 outp32(MDP_INTR_ENABLE, mdp_intr_mask);
500 dma->waiting = FALSE;
501 spin_unlock(&mdp_spin_lock);
502 if (panel & MDP4_PANEL_LCDC)
kuogee hsieh21ef2fe2011-08-18 17:12:42 -0700503 mdp4_overlay0_done_lcdc(dma);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700504#ifdef CONFIG_FB_MSM_MIPI_DSI
505 else if (panel & MDP4_PANEL_DSI_VIDEO)
kuogee hsieh21ef2fe2011-08-18 17:12:42 -0700506 mdp4_overlay0_done_dsi_video(dma);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700507#endif
508 } else { /* MDDI, DSI_CMD */
509#ifdef CONFIG_FB_MSM_MIPI_DSI
510 if (panel & MDP4_PANEL_DSI_CMD)
511 mdp4_overlay0_done_dsi_cmd(dma);
512#else
513 if (panel & MDP4_PANEL_MDDI)
514 mdp4_overlay0_done_mddi(dma);
515#endif
516 }
517 mdp_hw_cursor_done();
518 }
519 if (isr & INTR_OVERLAY1_DONE) {
520 mdp4_stat.intr_overlay1++;
521 /* disable DTV interrupt */
522 dma = &dma_e_data;
523 spin_lock(&mdp_spin_lock);
524 mdp_intr_mask &= ~INTR_OVERLAY1_DONE;
525 outp32(MDP_INTR_ENABLE, mdp_intr_mask);
526 dma->waiting = FALSE;
527 spin_unlock(&mdp_spin_lock);
528#if defined(CONFIG_FB_MSM_DTV)
529 if (panel & MDP4_PANEL_DTV)
530 mdp4_overlay1_done_dtv();
531#endif
532#if defined(CONFIG_FB_MSM_TVOUT)
533 if (panel & MDP4_PANEL_ATV)
534 mdp4_overlay1_done_atv();
535#endif
536 }
537#endif /* OVERLAY */
538 if (isr & INTR_DMA_P_HISTOGRAM) {
539 isr = inpdw(MDP_DMA_P_HIST_INTR_STATUS);
540 mask = inpdw(MDP_DMA_P_HIST_INTR_ENABLE);
541 outpdw(MDP_DMA_P_HIST_INTR_CLEAR, isr);
Ravishangar Kalyanam115d7972011-08-09 12:52:14 -0700542 mb();
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700543 isr &= mask;
Carl Vanderlipe2833e92011-09-27 13:26:01 -0700544 if (isr & INTR_HIST_DONE) {
545 if (waitqueue_active(&(mdp_hist_comp.wait))) {
546 complete(&mdp_hist_comp);
547 } else {
548 if (mdp_is_hist_start == TRUE) {
549 MDP_OUTP(MDP_BASE + 0x95004,
550 mdp_hist_frame_cnt);
551 MDP_OUTP(MDP_BASE + 0x95000, 1);
552 }
553 }
554 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700555 }
556
557out:
558 mdp_is_in_isr = FALSE;
559
560 return IRQ_HANDLED;
561}
562
563
564/*
565 * QSEED tables
566 */
567
568static uint32 vg_qseed_table0[] = {
569 0x5556aaff, 0x00000000, 0x00000000, 0x00000000
570};
571
572static uint32 vg_qseed_table1[] = {
573 0x76543210, 0xfedcba98
574};
575
576static uint32 vg_qseed_table2[] = {
577 0x02000000, 0x00000000, 0x01ff0ff9, 0x00000008,
578 0x01fb0ff2, 0x00000013, 0x01f50fed, 0x0ffe0020,
579 0x01ed0fe8, 0x0ffd002e, 0x01e30fe4, 0x0ffb003e,
580 0x01d80fe1, 0x0ff9004e, 0x01cb0fde, 0x0ff70060,
581 0x01bc0fdc, 0x0ff40074, 0x01ac0fdb, 0x0ff20087,
582 0x019a0fdb, 0x0fef009c, 0x01870fdb, 0x0fed00b1,
583 0x01740fdb, 0x0fea00c7, 0x01600fdc, 0x0fe700dd,
584 0x014b0fdd, 0x0fe500f3, 0x01350fdf, 0x0fe30109,
585 0x01200fe0, 0x0fe00120, 0x01090fe3, 0x0fdf0135,
586 0x00f30fe5, 0x0fdd014b, 0x00dd0fe7, 0x0fdc0160,
587 0x00c70fea, 0x0fdb0174, 0x00b10fed, 0x0fdb0187,
588 0x009c0fef, 0x0fdb019a, 0x00870ff2, 0x0fdb01ac,
589 0x00740ff4, 0x0fdc01bc, 0x00600ff7, 0x0fde01cb,
590 0x004e0ff9, 0x0fe101d8, 0x003e0ffb, 0x0fe401e3,
591 0x002e0ffd, 0x0fe801ed, 0x00200ffe, 0x0fed01f5,
592 0x00130000, 0x0ff201fb, 0x00080000, 0x0ff901ff,
593
594 0x02000000, 0x00000000, 0x02000000, 0x00000000,
595 0x02000000, 0x00000000, 0x02000000, 0x00000000,
596 0x02000000, 0x00000000, 0x02000000, 0x00000000,
597 0x02000000, 0x00000000, 0x02000000, 0x00000000,
598 0x02000000, 0x00000000, 0x02000000, 0x00000000,
599 0x02000000, 0x00000000, 0x02000000, 0x00000000,
600 0x02000000, 0x00000000, 0x02000000, 0x00000000,
601 0x02000000, 0x00000000, 0x02000000, 0x00000000,
602 0x02000000, 0x00000000, 0x02000000, 0x00000000,
603 0x02000000, 0x00000000, 0x02000000, 0x00000000,
604 0x02000000, 0x00000000, 0x02000000, 0x00000000,
605 0x02000000, 0x00000000, 0x02000000, 0x00000000,
606 0x02000000, 0x00000000, 0x02000000, 0x00000000,
607 0x02000000, 0x00000000, 0x02000000, 0x00000000,
608 0x02000000, 0x00000000, 0x02000000, 0x00000000,
609 0x02000000, 0x00000000, 0x02000000, 0x00000000,
610
611 0x02000000, 0x00000000, 0x01fc0ff9, 0x0ffe000d,
612 0x01f60ff3, 0x0ffb001c, 0x01ef0fed, 0x0ff9002b,
613 0x01e60fe8, 0x0ff6003c, 0x01dc0fe4, 0x0ff3004d,
614 0x01d00fe0, 0x0ff1005f, 0x01c30fde, 0x0fee0071,
615 0x01b50fdb, 0x0feb0085, 0x01a70fd9, 0x0fe80098,
616 0x01960fd8, 0x0fe600ac, 0x01850fd7, 0x0fe300c1,
617 0x01730fd7, 0x0fe100d5, 0x01610fd7, 0x0fdf00e9,
618 0x014e0fd8, 0x0fdd00fd, 0x013b0fd8, 0x0fdb0112,
619 0x01250fda, 0x0fda0127, 0x01120fdb, 0x0fd8013b,
620 0x00fd0fdd, 0x0fd8014e, 0x00e90fdf, 0x0fd70161,
621 0x00d50fe1, 0x0fd70173, 0x00c10fe3, 0x0fd70185,
622 0x00ac0fe6, 0x0fd80196, 0x00980fe8, 0x0fd901a7,
623 0x00850feb, 0x0fdb01b5, 0x00710fee, 0x0fde01c3,
624 0x005f0ff1, 0x0fe001d0, 0x004d0ff3, 0x0fe401dc,
625 0x003c0ff6, 0x0fe801e6, 0x002b0ff9, 0x0fed01ef,
626 0x001c0ffb, 0x0ff301f6, 0x000d0ffe, 0x0ff901fc,
627
628 0x020f0034, 0x0f7a0043, 0x01e80023, 0x0fa8004d,
629 0x01d30016, 0x0fbe0059, 0x01c6000a, 0x0fc90067,
630 0x01bd0000, 0x0fce0075, 0x01b50ff7, 0x0fcf0085,
631 0x01ae0fee, 0x0fcf0095, 0x01a70fe6, 0x0fcd00a6,
632 0x019d0fe0, 0x0fcb00b8, 0x01940fd9, 0x0fc900ca,
633 0x01890fd4, 0x0fc700dc, 0x017d0fcf, 0x0fc600ee,
634 0x01700fcc, 0x0fc40100, 0x01620fc9, 0x0fc40111,
635 0x01540fc6, 0x0fc30123, 0x01430fc5, 0x0fc40134,
636 0x01340fc4, 0x0fc50143, 0x01230fc3, 0x0fc60154,
637 0x01110fc4, 0x0fc90162, 0x01000fc4, 0x0fcc0170,
638 0x00ee0fc6, 0x0fcf017d, 0x00dc0fc7, 0x0fd40189,
639 0x00ca0fc9, 0x0fd90194, 0x00b80fcb, 0x0fe0019d,
640 0x00a60fcd, 0x0fe601a7, 0x00950fcf, 0x0fee01ae,
641 0x00850fcf, 0x0ff701b5, 0x00750fce, 0x000001bd,
642 0x00670fc9, 0x000a01c6, 0x00590fbe, 0x001601d3,
643 0x004d0fa8, 0x002301e8, 0x00430f7a, 0x0034020f,
644
645 0x015c005e, 0x0fde0068, 0x015c0054, 0x0fdd0073,
646 0x015b004b, 0x0fdc007e, 0x015a0042, 0x0fdb0089,
647 0x01590039, 0x0fda0094, 0x01560030, 0x0fda00a0,
648 0x01530028, 0x0fda00ab, 0x014f0020, 0x0fda00b7,
649 0x014a0019, 0x0fdb00c2, 0x01450011, 0x0fdc00ce,
650 0x013e000b, 0x0fde00d9, 0x01390004, 0x0fdf00e4,
651 0x01310ffe, 0x0fe200ef, 0x01290ff9, 0x0fe400fa,
652 0x01200ff4, 0x0fe80104, 0x01180fef, 0x0feb010e,
653 0x010e0feb, 0x0fef0118, 0x01040fe8, 0x0ff40120,
654 0x00fa0fe4, 0x0ff90129, 0x00ef0fe2, 0x0ffe0131,
655 0x00e40fdf, 0x00040139, 0x00d90fde, 0x000b013e,
656 0x00ce0fdc, 0x00110145, 0x00c20fdb, 0x0019014a,
657 0x00b70fda, 0x0020014f, 0x00ab0fda, 0x00280153,
658 0x00a00fda, 0x00300156, 0x00940fda, 0x00390159,
659 0x00890fdb, 0x0042015a, 0x007e0fdc, 0x004b015b,
660 0x00730fdd, 0x0054015c, 0x00680fde, 0x005e015c,
661
662 0x01300068, 0x0ff80070, 0x01300060, 0x0ff80078,
663 0x012f0059, 0x0ff80080, 0x012d0052, 0x0ff80089,
664 0x012b004b, 0x0ff90091, 0x01290044, 0x0ff9009a,
665 0x0126003d, 0x0ffa00a3, 0x01220037, 0x0ffb00ac,
666 0x011f0031, 0x0ffc00b4, 0x011a002b, 0x0ffe00bd,
667 0x01150026, 0x000000c5, 0x010f0021, 0x000200ce,
668 0x010a001c, 0x000400d6, 0x01030018, 0x000600df,
669 0x00fd0014, 0x000900e6, 0x00f60010, 0x000c00ee,
670 0x00ee000c, 0x001000f6, 0x00e60009, 0x001400fd,
671 0x00df0006, 0x00180103, 0x00d60004, 0x001c010a,
672 0x00ce0002, 0x0021010f, 0x00c50000, 0x00260115,
673 0x00bd0ffe, 0x002b011a, 0x00b40ffc, 0x0031011f,
674 0x00ac0ffb, 0x00370122, 0x00a30ffa, 0x003d0126,
675 0x009a0ff9, 0x00440129, 0x00910ff9, 0x004b012b,
676 0x00890ff8, 0x0052012d, 0x00800ff8, 0x0059012f,
677 0x00780ff8, 0x00600130, 0x00700ff8, 0x00680130,
678
679 0x01050079, 0x0003007f, 0x01040073, 0x00030086,
680 0x0103006d, 0x0004008c, 0x01030066, 0x00050092,
681 0x01010060, 0x00060099, 0x0100005a, 0x0007009f,
682 0x00fe0054, 0x000900a5, 0x00fa004f, 0x000b00ac,
683 0x00f80049, 0x000d00b2, 0x00f50044, 0x000f00b8,
684 0x00f2003f, 0x001200bd, 0x00ef0039, 0x001500c3,
685 0x00ea0035, 0x001800c9, 0x00e60030, 0x001c00ce,
686 0x00e3002b, 0x001f00d3, 0x00dd0027, 0x002300d9,
687 0x00d90023, 0x002700dd, 0x00d3001f, 0x002b00e3,
688 0x00ce001c, 0x003000e6, 0x00c90018, 0x003500ea,
689 0x00c30015, 0x003900ef, 0x00bd0012, 0x003f00f2,
690 0x00b8000f, 0x004400f5, 0x00b2000d, 0x004900f8,
691 0x00ac000b, 0x004f00fa, 0x00a50009, 0x005400fe,
692 0x009f0007, 0x005a0100, 0x00990006, 0x00600101,
693 0x00920005, 0x00660103, 0x008c0004, 0x006d0103,
694 0x00860003, 0x00730104, 0x007f0003, 0x00790105,
695
696 0x00cf0088, 0x001d008c, 0x00ce0084, 0x0020008e,
697 0x00cd0080, 0x00210092, 0x00cd007b, 0x00240094,
698 0x00ca0077, 0x00270098, 0x00c90073, 0x0029009b,
699 0x00c8006f, 0x002c009d, 0x00c6006b, 0x002f00a0,
700 0x00c50067, 0x003200a2, 0x00c30062, 0x003600a5,
701 0x00c0005f, 0x003900a8, 0x00c0005b, 0x003b00aa,
702 0x00be0057, 0x003e00ad, 0x00ba0054, 0x004200b0,
703 0x00b90050, 0x004500b2, 0x00b7004c, 0x004900b4,
704 0x00b40049, 0x004c00b7, 0x00b20045, 0x005000b9,
705 0x00b00042, 0x005400ba, 0x00ad003e, 0x005700be,
706 0x00aa003b, 0x005b00c0, 0x00a80039, 0x005f00c0,
707 0x00a50036, 0x006200c3, 0x00a20032, 0x006700c5,
708 0x00a0002f, 0x006b00c6, 0x009d002c, 0x006f00c8,
709 0x009b0029, 0x007300c9, 0x00980027, 0x007700ca,
710 0x00940024, 0x007b00cd, 0x00920021, 0x008000cd,
711 0x008e0020, 0x008400ce, 0x008c001d, 0x008800cf,
712
713 0x008e0083, 0x006b0084, 0x008d0083, 0x006c0084,
714 0x008d0082, 0x006d0084, 0x008d0081, 0x006d0085,
715 0x008d0080, 0x006e0085, 0x008c007f, 0x006f0086,
716 0x008b007f, 0x00700086, 0x008b007e, 0x00710086,
717 0x008b007d, 0x00720086, 0x008a007d, 0x00730086,
718 0x008a007c, 0x00730087, 0x008a007b, 0x00740087,
719 0x0089007b, 0x00750087, 0x008a0079, 0x00750088,
720 0x008a0078, 0x00760088, 0x008a0077, 0x00770088,
721 0x00880077, 0x0077008a, 0x00880076, 0x0078008a,
722 0x00880075, 0x0079008a, 0x00870075, 0x007b0089,
723 0x00870074, 0x007b008a, 0x00870073, 0x007c008a,
724 0x00860073, 0x007d008a, 0x00860072, 0x007d008b,
725 0x00860071, 0x007e008b, 0x00860070, 0x007f008b,
726 0x0086006f, 0x007f008c, 0x0085006e, 0x0080008d,
727 0x0085006d, 0x0081008d, 0x0084006d, 0x0082008d,
728 0x0084006c, 0x0083008d, 0x0084006b, 0x0083008e,
729
730 0x023c0fe2, 0x00000fe2, 0x023a0fdb, 0x00000feb,
731 0x02360fd3, 0x0fff0ff8, 0x022e0fcf, 0x0ffc0007,
732 0x02250fca, 0x0ffa0017, 0x021a0fc6, 0x0ff70029,
733 0x020c0fc4, 0x0ff4003c, 0x01fd0fc1, 0x0ff10051,
734 0x01eb0fc0, 0x0fed0068, 0x01d80fc0, 0x0fe9007f,
735 0x01c30fc1, 0x0fe50097, 0x01ac0fc2, 0x0fe200b0,
736 0x01960fc3, 0x0fdd00ca, 0x017e0fc5, 0x0fd900e4,
737 0x01650fc8, 0x0fd500fe, 0x014b0fcb, 0x0fd20118,
738 0x01330fcd, 0x0fcd0133, 0x01180fd2, 0x0fcb014b,
739 0x00fe0fd5, 0x0fc80165, 0x00e40fd9, 0x0fc5017e,
740 0x00ca0fdd, 0x0fc30196, 0x00b00fe2, 0x0fc201ac,
741 0x00970fe5, 0x0fc101c3, 0x007f0fe9, 0x0fc001d8,
742 0x00680fed, 0x0fc001eb, 0x00510ff1, 0x0fc101fd,
743 0x003c0ff4, 0x0fc4020c, 0x00290ff7, 0x0fc6021a,
744 0x00170ffa, 0x0fca0225, 0x00070ffc, 0x0fcf022e,
745 0x0ff80fff, 0x0fd30236, 0x0feb0000, 0x0fdb023a,
746
747 0x02780fc4, 0x00000fc4, 0x02770fbc, 0x0fff0fce,
748 0x02710fb5, 0x0ffe0fdc, 0x02690fb0, 0x0ffa0fed,
749 0x025f0fab, 0x0ff70fff, 0x02500fa8, 0x0ff30015,
750 0x02410fa6, 0x0fef002a, 0x022f0fa4, 0x0feb0042,
751 0x021a0fa4, 0x0fe5005d, 0x02040fa5, 0x0fe10076,
752 0x01eb0fa7, 0x0fdb0093, 0x01d20fa9, 0x0fd600af,
753 0x01b80fab, 0x0fd000cd, 0x019d0faf, 0x0fca00ea,
754 0x01810fb2, 0x0fc50108, 0x01620fb7, 0x0fc10126,
755 0x01440fbb, 0x0fbb0146, 0x01260fc1, 0x0fb70162,
756 0x01080fc5, 0x0fb20181, 0x00ea0fca, 0x0faf019d,
757 0x00cd0fd0, 0x0fab01b8, 0x00af0fd6, 0x0fa901d2,
758 0x00930fdb, 0x0fa701eb, 0x00760fe1, 0x0fa50204,
759 0x005d0fe5, 0x0fa4021a, 0x00420feb, 0x0fa4022f,
760 0x002a0fef, 0x0fa60241, 0x00150ff3, 0x0fa80250,
761 0x0fff0ff7, 0x0fab025f, 0x0fed0ffa, 0x0fb00269,
762 0x0fdc0ffe, 0x0fb50271, 0x0fce0fff, 0x0fbc0277,
763
764 0x02a00fb0, 0x00000fb0, 0x029e0fa8, 0x0fff0fbb,
765 0x02980fa1, 0x0ffd0fca, 0x028f0f9c, 0x0ff90fdc,
766 0x02840f97, 0x0ff50ff0, 0x02740f94, 0x0ff10007,
767 0x02640f92, 0x0fec001e, 0x02500f91, 0x0fe70038,
768 0x023a0f91, 0x0fe00055, 0x02220f92, 0x0fdb0071,
769 0x02080f95, 0x0fd4008f, 0x01ec0f98, 0x0fce00ae,
770 0x01cf0f9b, 0x0fc700cf, 0x01b10f9f, 0x0fc100ef,
771 0x01920fa4, 0x0fbb010f, 0x01710faa, 0x0fb50130,
772 0x01520fae, 0x0fae0152, 0x01300fb5, 0x0faa0171,
773 0x010f0fbb, 0x0fa40192, 0x00ef0fc1, 0x0f9f01b1,
774 0x00cf0fc7, 0x0f9b01cf, 0x00ae0fce, 0x0f9801ec,
775 0x008f0fd4, 0x0f950208, 0x00710fdb, 0x0f920222,
776 0x00550fe0, 0x0f91023a, 0x00380fe7, 0x0f910250,
777 0x001e0fec, 0x0f920264, 0x00070ff1, 0x0f940274,
778 0x0ff00ff5, 0x0f970284, 0x0fdc0ff9, 0x0f9c028f,
779 0x0fca0ffd, 0x0fa10298, 0x0fbb0fff, 0x0fa8029e,
780
781 0x02c80f9c, 0x00000f9c, 0x02c70f94, 0x0ffe0fa7,
782 0x02c10f8c, 0x0ffc0fb7, 0x02b70f87, 0x0ff70fcb,
783 0x02aa0f83, 0x0ff30fe0, 0x02990f80, 0x0fee0ff9,
784 0x02870f7f, 0x0fe80012, 0x02720f7e, 0x0fe2002e,
785 0x025a0f7e, 0x0fdb004d, 0x02400f80, 0x0fd5006b,
786 0x02230f84, 0x0fcd008c, 0x02050f87, 0x0fc700ad,
787 0x01e60f8b, 0x0fbf00d0, 0x01c60f90, 0x0fb700f3,
788 0x01a30f96, 0x0fb00117, 0x01800f9c, 0x0faa013a,
789 0x015d0fa2, 0x0fa2015f, 0x013a0faa, 0x0f9c0180,
790 0x01170fb0, 0x0f9601a3, 0x00f30fb7, 0x0f9001c6,
791 0x00d00fbf, 0x0f8b01e6, 0x00ad0fc7, 0x0f870205,
792 0x008c0fcd, 0x0f840223, 0x006b0fd5, 0x0f800240,
793 0x004d0fdb, 0x0f7e025a, 0x002e0fe2, 0x0f7e0272,
794 0x00120fe8, 0x0f7f0287, 0x0ff90fee, 0x0f800299,
795 0x0fe00ff3, 0x0f8302aa, 0x0fcb0ff7, 0x0f8702b7,
796 0x0fb70ffc, 0x0f8c02c1, 0x0fa70ffe, 0x0f9402c7,
797
798 0x02f00f88, 0x00000f88, 0x02ee0f80, 0x0ffe0f94,
799 0x02e70f78, 0x0ffc0fa5, 0x02dd0f73, 0x0ff60fba,
800 0x02ce0f6f, 0x0ff20fd1, 0x02be0f6c, 0x0feb0feb,
801 0x02aa0f6b, 0x0fe50006, 0x02940f6a, 0x0fde0024,
802 0x02790f6c, 0x0fd60045, 0x025e0f6e, 0x0fcf0065,
803 0x023f0f72, 0x0fc60089, 0x021d0f77, 0x0fbf00ad,
804 0x01fd0f7b, 0x0fb600d2, 0x01da0f81, 0x0fad00f8,
805 0x01b50f87, 0x0fa6011e, 0x018f0f8f, 0x0f9e0144,
806 0x016b0f95, 0x0f95016b, 0x01440f9e, 0x0f8f018f,
807 0x011e0fa6, 0x0f8701b5, 0x00f80fad, 0x0f8101da,
808 0x00d20fb6, 0x0f7b01fd, 0x00ad0fbf, 0x0f77021d,
809 0x00890fc6, 0x0f72023f, 0x00650fcf, 0x0f6e025e,
810 0x00450fd6, 0x0f6c0279, 0x00240fde, 0x0f6a0294,
811 0x00060fe5, 0x0f6b02aa, 0x0feb0feb, 0x0f6c02be,
812 0x0fd10ff2, 0x0f6f02ce, 0x0fba0ff6, 0x0f7302dd,
813 0x0fa50ffc, 0x0f7802e7, 0x0f940ffe, 0x0f8002ee,
814
815 0x03180f74, 0x00000f74, 0x03160f6b, 0x0ffe0f81,
816 0x030e0f64, 0x0ffb0f93, 0x03030f5f, 0x0ff50fa9,
817 0x02f40f5b, 0x0ff00fc1, 0x02e20f58, 0x0fe90fdd,
818 0x02cd0f57, 0x0fe20ffa, 0x02b60f57, 0x0fda0019,
819 0x02990f59, 0x0fd1003d, 0x027b0f5c, 0x0fc90060,
820 0x02590f61, 0x0fc00086, 0x02370f66, 0x0fb700ac,
821 0x02130f6b, 0x0fae00d4, 0x01ee0f72, 0x0fa400fc,
822 0x01c70f79, 0x0f9b0125, 0x019f0f81, 0x0f93014d,
823 0x01760f89, 0x0f890178, 0x014d0f93, 0x0f81019f,
824 0x01250f9b, 0x0f7901c7, 0x00fc0fa4, 0x0f7201ee,
825 0x00d40fae, 0x0f6b0213, 0x00ac0fb7, 0x0f660237,
826 0x00860fc0, 0x0f610259, 0x00600fc9, 0x0f5c027b,
827 0x003d0fd1, 0x0f590299, 0x00190fda, 0x0f5702b6,
828 0x0ffa0fe2, 0x0f5702cd, 0x0fdd0fe9, 0x0f5802e2,
829 0x0fc10ff0, 0x0f5b02f4, 0x0fa90ff5, 0x0f5f0303,
830 0x0f930ffb, 0x0f64030e, 0x0f810ffe, 0x0f6b0316,
831
832 0x03400f60, 0x00000f60, 0x033e0f57, 0x0ffe0f6d,
833 0x03370f4f, 0x0ffa0f80, 0x032a0f4b, 0x0ff30f98,
834 0x031a0f46, 0x0fee0fb2, 0x03070f44, 0x0fe60fcf,
835 0x02f10f44, 0x0fde0fed, 0x02d70f44, 0x0fd6000f,
836 0x02b80f46, 0x0fcc0036, 0x02990f4a, 0x0fc3005a,
837 0x02750f4f, 0x0fb90083, 0x02500f55, 0x0fb000ab,
838 0x022a0f5b, 0x0fa500d6, 0x02020f63, 0x0f9a0101,
839 0x01d80f6b, 0x0f91012c, 0x01ae0f74, 0x0f870157,
840 0x01840f7c, 0x0f7c0184, 0x01570f87, 0x0f7401ae,
841 0x012c0f91, 0x0f6b01d8, 0x01010f9a, 0x0f630202,
842 0x00d60fa5, 0x0f5b022a, 0x00ab0fb0, 0x0f550250,
843 0x00830fb9, 0x0f4f0275, 0x005a0fc3, 0x0f4a0299,
844 0x00360fcc, 0x0f4602b8, 0x000f0fd6, 0x0f4402d7,
845 0x0fed0fde, 0x0f4402f1, 0x0fcf0fe6, 0x0f440307,
846 0x0fb20fee, 0x0f46031a, 0x0f980ff3, 0x0f4b032a,
847 0x0f800ffa, 0x0f4f0337, 0x0f6d0ffe, 0x0f57033e,
848
849 0x02000000, 0x00000000, 0x01ff0ff9, 0x00000008,
850 0x01fb0ff2, 0x00000013, 0x01f50fed, 0x0ffe0020,
851 0x01ed0fe8, 0x0ffd002e, 0x01e30fe4, 0x0ffb003e,
852 0x01d80fe1, 0x0ff9004e, 0x01cb0fde, 0x0ff70060,
853 0x01bc0fdc, 0x0ff40074, 0x01ac0fdb, 0x0ff20087,
854 0x019a0fdb, 0x0fef009c, 0x01870fdb, 0x0fed00b1,
855 0x01740fdb, 0x0fea00c7, 0x01600fdc, 0x0fe700dd,
856 0x014b0fdd, 0x0fe500f3, 0x01350fdf, 0x0fe30109,
857 0x01200fe0, 0x0fe00120, 0x01090fe3, 0x0fdf0135,
858 0x00f30fe5, 0x0fdd014b, 0x00dd0fe7, 0x0fdc0160,
859 0x00c70fea, 0x0fdb0174, 0x00b10fed, 0x0fdb0187,
860 0x009c0fef, 0x0fdb019a, 0x00870ff2, 0x0fdb01ac,
861 0x00740ff4, 0x0fdc01bc, 0x00600ff7, 0x0fde01cb,
862 0x004e0ff9, 0x0fe101d8, 0x003e0ffb, 0x0fe401e3,
863 0x002e0ffd, 0x0fe801ed, 0x00200ffe, 0x0fed01f5,
864 0x00130000, 0x0ff201fb, 0x00080000, 0x0ff901ff,
865
866 0x02000000, 0x00000000, 0x02000000, 0x00000000,
867 0x02000000, 0x00000000, 0x02000000, 0x00000000,
868 0x02000000, 0x00000000, 0x02000000, 0x00000000,
869 0x02000000, 0x00000000, 0x02000000, 0x00000000,
870 0x02000000, 0x00000000, 0x02000000, 0x00000000,
871 0x02000000, 0x00000000, 0x02000000, 0x00000000,
872 0x02000000, 0x00000000, 0x02000000, 0x00000000,
873 0x02000000, 0x00000000, 0x02000000, 0x00000000,
874 0x02000000, 0x00000000, 0x02000000, 0x00000000,
875 0x02000000, 0x00000000, 0x02000000, 0x00000000,
876 0x02000000, 0x00000000, 0x02000000, 0x00000000,
877 0x02000000, 0x00000000, 0x02000000, 0x00000000,
878 0x02000000, 0x00000000, 0x02000000, 0x00000000,
879 0x02000000, 0x00000000, 0x02000000, 0x00000000,
880 0x02000000, 0x00000000, 0x02000000, 0x00000000,
881 0x02000000, 0x00000000, 0x02000000, 0x00000000,
882
883 0x02000000, 0x00000000, 0x01fc0ff9, 0x0ffe000d,
884 0x01f60ff3, 0x0ffb001c, 0x01ef0fed, 0x0ff9002b,
885 0x01e60fe8, 0x0ff6003c, 0x01dc0fe4, 0x0ff3004d,
886 0x01d00fe0, 0x0ff1005f, 0x01c30fde, 0x0fee0071,
887 0x01b50fdb, 0x0feb0085, 0x01a70fd9, 0x0fe80098,
888 0x01960fd8, 0x0fe600ac, 0x01850fd7, 0x0fe300c1,
889 0x01730fd7, 0x0fe100d5, 0x01610fd7, 0x0fdf00e9,
890 0x014e0fd8, 0x0fdd00fd, 0x013b0fd8, 0x0fdb0112,
891 0x01250fda, 0x0fda0127, 0x01120fdb, 0x0fd8013b,
892 0x00fd0fdd, 0x0fd8014e, 0x00e90fdf, 0x0fd70161,
893 0x00d50fe1, 0x0fd70173, 0x00c10fe3, 0x0fd70185,
894 0x00ac0fe6, 0x0fd80196, 0x00980fe8, 0x0fd901a7,
895 0x00850feb, 0x0fdb01b5, 0x00710fee, 0x0fde01c3,
896 0x005f0ff1, 0x0fe001d0, 0x004d0ff3, 0x0fe401dc,
897 0x003c0ff6, 0x0fe801e6, 0x002b0ff9, 0x0fed01ef,
898 0x001c0ffb, 0x0ff301f6, 0x000d0ffe, 0x0ff901fc,
899
900 0x020f0034, 0x0f7a0043, 0x01e80023, 0x0fa8004d,
901 0x01d30016, 0x0fbe0059, 0x01c6000a, 0x0fc90067,
902 0x01bd0000, 0x0fce0075, 0x01b50ff7, 0x0fcf0085,
903 0x01ae0fee, 0x0fcf0095, 0x01a70fe6, 0x0fcd00a6,
904 0x019d0fe0, 0x0fcb00b8, 0x01940fd9, 0x0fc900ca,
905 0x01890fd4, 0x0fc700dc, 0x017d0fcf, 0x0fc600ee,
906 0x01700fcc, 0x0fc40100, 0x01620fc9, 0x0fc40111,
907 0x01540fc6, 0x0fc30123, 0x01430fc5, 0x0fc40134,
908 0x01340fc4, 0x0fc50143, 0x01230fc3, 0x0fc60154,
909 0x01110fc4, 0x0fc90162, 0x01000fc4, 0x0fcc0170,
910 0x00ee0fc6, 0x0fcf017d, 0x00dc0fc7, 0x0fd40189,
911 0x00ca0fc9, 0x0fd90194, 0x00b80fcb, 0x0fe0019d,
912 0x00a60fcd, 0x0fe601a7, 0x00950fcf, 0x0fee01ae,
913 0x00850fcf, 0x0ff701b5, 0x00750fce, 0x000001bd,
914 0x00670fc9, 0x000a01c6, 0x00590fbe, 0x001601d3,
915 0x004d0fa8, 0x002301e8, 0x00430f7a, 0x0034020f,
916
917 0x015c005e, 0x0fde0068, 0x015c0054, 0x0fdd0073,
918 0x015b004b, 0x0fdc007e, 0x015a0042, 0x0fdb0089,
919 0x01590039, 0x0fda0094, 0x01560030, 0x0fda00a0,
920 0x01530028, 0x0fda00ab, 0x014f0020, 0x0fda00b7,
921 0x014a0019, 0x0fdb00c2, 0x01450011, 0x0fdc00ce,
922 0x013e000b, 0x0fde00d9, 0x01390004, 0x0fdf00e4,
923 0x01310ffe, 0x0fe200ef, 0x01290ff9, 0x0fe400fa,
924 0x01200ff4, 0x0fe80104, 0x01180fef, 0x0feb010e,
925 0x010e0feb, 0x0fef0118, 0x01040fe8, 0x0ff40120,
926 0x00fa0fe4, 0x0ff90129, 0x00ef0fe2, 0x0ffe0131,
927 0x00e40fdf, 0x00040139, 0x00d90fde, 0x000b013e,
928 0x00ce0fdc, 0x00110145, 0x00c20fdb, 0x0019014a,
929 0x00b70fda, 0x0020014f, 0x00ab0fda, 0x00280153,
930 0x00a00fda, 0x00300156, 0x00940fda, 0x00390159,
931 0x00890fdb, 0x0042015a, 0x007e0fdc, 0x004b015b,
932 0x00730fdd, 0x0054015c, 0x00680fde, 0x005e015c,
933
934 0x01300068, 0x0ff80070, 0x01300060, 0x0ff80078,
935 0x012f0059, 0x0ff80080, 0x012d0052, 0x0ff80089,
936 0x012b004b, 0x0ff90091, 0x01290044, 0x0ff9009a,
937 0x0126003d, 0x0ffa00a3, 0x01220037, 0x0ffb00ac,
938 0x011f0031, 0x0ffc00b4, 0x011a002b, 0x0ffe00bd,
939 0x01150026, 0x000000c5, 0x010f0021, 0x000200ce,
940 0x010a001c, 0x000400d6, 0x01030018, 0x000600df,
941 0x00fd0014, 0x000900e6, 0x00f60010, 0x000c00ee,
942 0x00ee000c, 0x001000f6, 0x00e60009, 0x001400fd,
943 0x00df0006, 0x00180103, 0x00d60004, 0x001c010a,
944 0x00ce0002, 0x0021010f, 0x00c50000, 0x00260115,
945 0x00bd0ffe, 0x002b011a, 0x00b40ffc, 0x0031011f,
946 0x00ac0ffb, 0x00370122, 0x00a30ffa, 0x003d0126,
947 0x009a0ff9, 0x00440129, 0x00910ff9, 0x004b012b,
948 0x00890ff8, 0x0052012d, 0x00800ff8, 0x0059012f,
949 0x00780ff8, 0x00600130, 0x00700ff8, 0x00680130,
950
951 0x01050079, 0x0003007f, 0x01040073, 0x00030086,
952 0x0103006d, 0x0004008c, 0x01030066, 0x00050092,
953 0x01010060, 0x00060099, 0x0100005a, 0x0007009f,
954 0x00fe0054, 0x000900a5, 0x00fa004f, 0x000b00ac,
955 0x00f80049, 0x000d00b2, 0x00f50044, 0x000f00b8,
956 0x00f2003f, 0x001200bd, 0x00ef0039, 0x001500c3,
957 0x00ea0035, 0x001800c9, 0x00e60030, 0x001c00ce,
958 0x00e3002b, 0x001f00d3, 0x00dd0027, 0x002300d9,
959 0x00d90023, 0x002700dd, 0x00d3001f, 0x002b00e3,
960 0x00ce001c, 0x003000e6, 0x00c90018, 0x003500ea,
961 0x00c30015, 0x003900ef, 0x00bd0012, 0x003f00f2,
962 0x00b8000f, 0x004400f5, 0x00b2000d, 0x004900f8,
963 0x00ac000b, 0x004f00fa, 0x00a50009, 0x005400fe,
964 0x009f0007, 0x005a0100, 0x00990006, 0x00600101,
965 0x00920005, 0x00660103, 0x008c0004, 0x006d0103,
966 0x00860003, 0x00730104, 0x007f0003, 0x00790105,
967
968 0x00cf0088, 0x001d008c, 0x00ce0084, 0x0020008e,
969 0x00cd0080, 0x00210092, 0x00cd007b, 0x00240094,
970 0x00ca0077, 0x00270098, 0x00c90073, 0x0029009b,
971 0x00c8006f, 0x002c009d, 0x00c6006b, 0x002f00a0,
972 0x00c50067, 0x003200a2, 0x00c30062, 0x003600a5,
973 0x00c0005f, 0x003900a8, 0x00c0005b, 0x003b00aa,
974 0x00be0057, 0x003e00ad, 0x00ba0054, 0x004200b0,
975 0x00b90050, 0x004500b2, 0x00b7004c, 0x004900b4,
976 0x00b40049, 0x004c00b7, 0x00b20045, 0x005000b9,
977 0x00b00042, 0x005400ba, 0x00ad003e, 0x005700be,
978 0x00aa003b, 0x005b00c0, 0x00a80039, 0x005f00c0,
979 0x00a50036, 0x006200c3, 0x00a20032, 0x006700c5,
980 0x00a0002f, 0x006b00c6, 0x009d002c, 0x006f00c8,
981 0x009b0029, 0x007300c9, 0x00980027, 0x007700ca,
982 0x00940024, 0x007b00cd, 0x00920021, 0x008000cd,
983 0x008e0020, 0x008400ce, 0x008c001d, 0x008800cf,
984
985 0x008e0083, 0x006b0084, 0x008d0083, 0x006c0084,
986 0x008d0082, 0x006d0084, 0x008d0081, 0x006d0085,
987 0x008d0080, 0x006e0085, 0x008c007f, 0x006f0086,
988 0x008b007f, 0x00700086, 0x008b007e, 0x00710086,
989 0x008b007d, 0x00720086, 0x008a007d, 0x00730086,
990 0x008a007c, 0x00730087, 0x008a007b, 0x00740087,
991 0x0089007b, 0x00750087, 0x008a0079, 0x00750088,
992 0x008a0078, 0x00760088, 0x008a0077, 0x00770088,
993 0x00880077, 0x0077008a, 0x00880076, 0x0078008a,
994 0x00880075, 0x0079008a, 0x00870075, 0x007b0089,
995 0x00870074, 0x007b008a, 0x00870073, 0x007c008a,
996 0x00860073, 0x007d008a, 0x00860072, 0x007d008b,
997 0x00860071, 0x007e008b, 0x00860070, 0x007f008b,
998 0x0086006f, 0x007f008c, 0x0085006e, 0x0080008d,
999 0x0085006d, 0x0081008d, 0x0084006d, 0x0082008d,
1000 0x0084006c, 0x0083008d, 0x0084006b, 0x0083008e,
1001
1002 0x023c0fe2, 0x00000fe2, 0x023a0fdb, 0x00000feb,
1003 0x02360fd3, 0x0fff0ff8, 0x022e0fcf, 0x0ffc0007,
1004 0x02250fca, 0x0ffa0017, 0x021a0fc6, 0x0ff70029,
1005 0x020c0fc4, 0x0ff4003c, 0x01fd0fc1, 0x0ff10051,
1006 0x01eb0fc0, 0x0fed0068, 0x01d80fc0, 0x0fe9007f,
1007 0x01c30fc1, 0x0fe50097, 0x01ac0fc2, 0x0fe200b0,
1008 0x01960fc3, 0x0fdd00ca, 0x017e0fc5, 0x0fd900e4,
1009 0x01650fc8, 0x0fd500fe, 0x014b0fcb, 0x0fd20118,
1010 0x01330fcd, 0x0fcd0133, 0x01180fd2, 0x0fcb014b,
1011 0x00fe0fd5, 0x0fc80165, 0x00e40fd9, 0x0fc5017e,
1012 0x00ca0fdd, 0x0fc30196, 0x00b00fe2, 0x0fc201ac,
1013 0x00970fe5, 0x0fc101c3, 0x007f0fe9, 0x0fc001d8,
1014 0x00680fed, 0x0fc001eb, 0x00510ff1, 0x0fc101fd,
1015 0x003c0ff4, 0x0fc4020c, 0x00290ff7, 0x0fc6021a,
1016 0x00170ffa, 0x0fca0225, 0x00070ffc, 0x0fcf022e,
1017 0x0ff80fff, 0x0fd30236, 0x0feb0000, 0x0fdb023a,
1018
1019 0x02780fc4, 0x00000fc4, 0x02770fbc, 0x0fff0fce,
1020 0x02710fb5, 0x0ffe0fdc, 0x02690fb0, 0x0ffa0fed,
1021 0x025f0fab, 0x0ff70fff, 0x02500fa8, 0x0ff30015,
1022 0x02410fa6, 0x0fef002a, 0x022f0fa4, 0x0feb0042,
1023 0x021a0fa4, 0x0fe5005d, 0x02040fa5, 0x0fe10076,
1024 0x01eb0fa7, 0x0fdb0093, 0x01d20fa9, 0x0fd600af,
1025 0x01b80fab, 0x0fd000cd, 0x019d0faf, 0x0fca00ea,
1026 0x01810fb2, 0x0fc50108, 0x01620fb7, 0x0fc10126,
1027 0x01440fbb, 0x0fbb0146, 0x01260fc1, 0x0fb70162,
1028 0x01080fc5, 0x0fb20181, 0x00ea0fca, 0x0faf019d,
1029 0x00cd0fd0, 0x0fab01b8, 0x00af0fd6, 0x0fa901d2,
1030 0x00930fdb, 0x0fa701eb, 0x00760fe1, 0x0fa50204,
1031 0x005d0fe5, 0x0fa4021a, 0x00420feb, 0x0fa4022f,
1032 0x002a0fef, 0x0fa60241, 0x00150ff3, 0x0fa80250,
1033 0x0fff0ff7, 0x0fab025f, 0x0fed0ffa, 0x0fb00269,
1034 0x0fdc0ffe, 0x0fb50271, 0x0fce0fff, 0x0fbc0277,
1035
1036 0x02a00fb0, 0x00000fb0, 0x029e0fa8, 0x0fff0fbb,
1037 0x02980fa1, 0x0ffd0fca, 0x028f0f9c, 0x0ff90fdc,
1038 0x02840f97, 0x0ff50ff0, 0x02740f94, 0x0ff10007,
1039 0x02640f92, 0x0fec001e, 0x02500f91, 0x0fe70038,
1040 0x023a0f91, 0x0fe00055, 0x02220f92, 0x0fdb0071,
1041 0x02080f95, 0x0fd4008f, 0x01ec0f98, 0x0fce00ae,
1042 0x01cf0f9b, 0x0fc700cf, 0x01b10f9f, 0x0fc100ef,
1043 0x01920fa4, 0x0fbb010f, 0x01710faa, 0x0fb50130,
1044 0x01520fae, 0x0fae0152, 0x01300fb5, 0x0faa0171,
1045 0x010f0fbb, 0x0fa40192, 0x00ef0fc1, 0x0f9f01b1,
1046 0x00cf0fc7, 0x0f9b01cf, 0x00ae0fce, 0x0f9801ec,
1047 0x008f0fd4, 0x0f950208, 0x00710fdb, 0x0f920222,
1048 0x00550fe0, 0x0f91023a, 0x00380fe7, 0x0f910250,
1049 0x001e0fec, 0x0f920264, 0x00070ff1, 0x0f940274,
1050 0x0ff00ff5, 0x0f970284, 0x0fdc0ff9, 0x0f9c028f,
1051 0x0fca0ffd, 0x0fa10298, 0x0fbb0fff, 0x0fa8029e,
1052
1053 0x02c80f9c, 0x00000f9c, 0x02c70f94, 0x0ffe0fa7,
1054 0x02c10f8c, 0x0ffc0fb7, 0x02b70f87, 0x0ff70fcb,
1055 0x02aa0f83, 0x0ff30fe0, 0x02990f80, 0x0fee0ff9,
1056 0x02870f7f, 0x0fe80012, 0x02720f7e, 0x0fe2002e,
1057 0x025a0f7e, 0x0fdb004d, 0x02400f80, 0x0fd5006b,
1058 0x02230f84, 0x0fcd008c, 0x02050f87, 0x0fc700ad,
1059 0x01e60f8b, 0x0fbf00d0, 0x01c60f90, 0x0fb700f3,
1060 0x01a30f96, 0x0fb00117, 0x01800f9c, 0x0faa013a,
1061 0x015d0fa2, 0x0fa2015f, 0x013a0faa, 0x0f9c0180,
1062 0x01170fb0, 0x0f9601a3, 0x00f30fb7, 0x0f9001c6,
1063 0x00d00fbf, 0x0f8b01e6, 0x00ad0fc7, 0x0f870205,
1064 0x008c0fcd, 0x0f840223, 0x006b0fd5, 0x0f800240,
1065 0x004d0fdb, 0x0f7e025a, 0x002e0fe2, 0x0f7e0272,
1066 0x00120fe8, 0x0f7f0287, 0x0ff90fee, 0x0f800299,
1067 0x0fe00ff3, 0x0f8302aa, 0x0fcb0ff7, 0x0f8702b7,
1068 0x0fb70ffc, 0x0f8c02c1, 0x0fa70ffe, 0x0f9402c7,
1069
1070 0x02f00f88, 0x00000f88, 0x02ee0f80, 0x0ffe0f94,
1071 0x02e70f78, 0x0ffc0fa5, 0x02dd0f73, 0x0ff60fba,
1072 0x02ce0f6f, 0x0ff20fd1, 0x02be0f6c, 0x0feb0feb,
1073 0x02aa0f6b, 0x0fe50006, 0x02940f6a, 0x0fde0024,
1074 0x02790f6c, 0x0fd60045, 0x025e0f6e, 0x0fcf0065,
1075 0x023f0f72, 0x0fc60089, 0x021d0f77, 0x0fbf00ad,
1076 0x01fd0f7b, 0x0fb600d2, 0x01da0f81, 0x0fad00f8,
1077 0x01b50f87, 0x0fa6011e, 0x018f0f8f, 0x0f9e0144,
1078 0x016b0f95, 0x0f95016b, 0x01440f9e, 0x0f8f018f,
1079 0x011e0fa6, 0x0f8701b5, 0x00f80fad, 0x0f8101da,
1080 0x00d20fb6, 0x0f7b01fd, 0x00ad0fbf, 0x0f77021d,
1081 0x00890fc6, 0x0f72023f, 0x00650fcf, 0x0f6e025e,
1082 0x00450fd6, 0x0f6c0279, 0x00240fde, 0x0f6a0294,
1083 0x00060fe5, 0x0f6b02aa, 0x0feb0feb, 0x0f6c02be,
1084 0x0fd10ff2, 0x0f6f02ce, 0x0fba0ff6, 0x0f7302dd,
1085 0x0fa50ffc, 0x0f7802e7, 0x0f940ffe, 0x0f8002ee,
1086
1087 0x03180f74, 0x00000f74, 0x03160f6b, 0x0ffe0f81,
1088 0x030e0f64, 0x0ffb0f93, 0x03030f5f, 0x0ff50fa9,
1089 0x02f40f5b, 0x0ff00fc1, 0x02e20f58, 0x0fe90fdd,
1090 0x02cd0f57, 0x0fe20ffa, 0x02b60f57, 0x0fda0019,
1091 0x02990f59, 0x0fd1003d, 0x027b0f5c, 0x0fc90060,
1092 0x02590f61, 0x0fc00086, 0x02370f66, 0x0fb700ac,
1093 0x02130f6b, 0x0fae00d4, 0x01ee0f72, 0x0fa400fc,
1094 0x01c70f79, 0x0f9b0125, 0x019f0f81, 0x0f93014d,
1095 0x01760f89, 0x0f890178, 0x014d0f93, 0x0f81019f,
1096 0x01250f9b, 0x0f7901c7, 0x00fc0fa4, 0x0f7201ee,
1097 0x00d40fae, 0x0f6b0213, 0x00ac0fb7, 0x0f660237,
1098 0x00860fc0, 0x0f610259, 0x00600fc9, 0x0f5c027b,
1099 0x003d0fd1, 0x0f590299, 0x00190fda, 0x0f5702b6,
1100 0x0ffa0fe2, 0x0f5702cd, 0x0fdd0fe9, 0x0f5802e2,
1101 0x0fc10ff0, 0x0f5b02f4, 0x0fa90ff5, 0x0f5f0303,
1102 0x0f930ffb, 0x0f64030e, 0x0f810ffe, 0x0f6b0316,
1103
1104 0x03400f60, 0x00000f60, 0x033e0f57, 0x0ffe0f6d,
1105 0x03370f4f, 0x0ffa0f80, 0x032a0f4b, 0x0ff30f98,
1106 0x031a0f46, 0x0fee0fb2, 0x03070f44, 0x0fe60fcf,
1107 0x02f10f44, 0x0fde0fed, 0x02d70f44, 0x0fd6000f,
1108 0x02b80f46, 0x0fcc0036, 0x02990f4a, 0x0fc3005a,
1109 0x02750f4f, 0x0fb90083, 0x02500f55, 0x0fb000ab,
1110 0x022a0f5b, 0x0fa500d6, 0x02020f63, 0x0f9a0101,
1111 0x01d80f6b, 0x0f91012c, 0x01ae0f74, 0x0f870157,
1112 0x01840f7c, 0x0f7c0184, 0x01570f87, 0x0f7401ae,
1113 0x012c0f91, 0x0f6b01d8, 0x01010f9a, 0x0f630202,
1114 0x00d60fa5, 0x0f5b022a, 0x00ab0fb0, 0x0f550250,
1115 0x00830fb9, 0x0f4f0275, 0x005a0fc3, 0x0f4a0299,
1116 0x00360fcc, 0x0f4602b8, 0x000f0fd6, 0x0f4402d7,
1117 0x0fed0fde, 0x0f4402f1, 0x0fcf0fe6, 0x0f440307,
1118 0x0fb20fee, 0x0f46031a, 0x0f980ff3, 0x0f4b032a,
1119 0x0f800ffa, 0x0f4f0337, 0x0f6d0ffe, 0x0f57033e
1120};
1121
1122
1123#define MDP4_QSEED_TABLE0_OFF 0x8100
1124#define MDP4_QSEED_TABLE1_OFF 0x8200
1125#define MDP4_QSEED_TABLE2_OFF 0x9000
1126
1127void mdp4_vg_qseed_init(int vp_num)
1128{
1129 uint32 *off;
1130 int i, voff;
1131
1132 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1133
1134 voff = MDP4_VIDEO_OFF * vp_num;
1135 off = (uint32 *)(MDP_BASE + MDP4_VIDEO_BASE + voff +
1136 MDP4_QSEED_TABLE0_OFF);
1137 for (i = 0; i < (sizeof(vg_qseed_table0) / sizeof(uint32)); i++) {
1138 outpdw(off, vg_qseed_table0[i]);
1139 off++;
1140 /* This code is added to workaround the 1K Boundary AXI
1141 Interleave operations from Scorpion that can potentially
1142 corrupt the QSEED table. The idea is to complete the prevous
1143 to the buffer before making the next write when address is
1144 1KB aligned to ensure the write has been committed prior to
1145 next instruction write that can go out from the secondary AXI
1146 port.This happens also because of the expected write sequence
1147 from QSEED table, where LSP has to be written first then the
1148 MSP to trigger both to write out to SRAM, if this has not been
1149 the expectation, then corruption wouldn't have happened.*/
1150
1151 if (!((uint32)off & 0x3FF))
1152 wmb();
1153 }
1154
1155 off = (uint32 *)(MDP_BASE + MDP4_VIDEO_BASE + voff +
1156 MDP4_QSEED_TABLE1_OFF);
1157 for (i = 0; i < (sizeof(vg_qseed_table1) / sizeof(uint32)); i++) {
1158 outpdw(off, vg_qseed_table1[i]);
1159 off++;
1160 if (!((uint32)off & 0x3FF))
1161 wmb();
1162 }
1163
1164 off = (uint32 *)(MDP_BASE + MDP4_VIDEO_BASE + voff +
1165 MDP4_QSEED_TABLE2_OFF);
1166 for (i = 0; i < (sizeof(vg_qseed_table2) / sizeof(uint32)); i++) {
1167 outpdw(off, vg_qseed_table2[i]);
1168 off++;
1169 if (!((uint32)off & 0x3FF))
1170 wmb();
1171 }
1172
1173 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1174
1175}
1176
1177void mdp4_mixer_blend_init(mixer_num)
1178{
1179 unsigned char *overlay_base;
1180 int off;
1181
1182 if (mixer_num) /* mixer number, /dev/fb0, /dev/fb1 */
1183 overlay_base = MDP_BASE + MDP4_OVERLAYPROC1_BASE;/* 0x18000 */
1184 else
1185 overlay_base = MDP_BASE + MDP4_OVERLAYPROC0_BASE;/* 0x10000 */
1186
1187 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1188
1189 /* stage 0 to stage 2 */
1190 off = 0;
1191 outpdw(overlay_base + off + 0x104, 0x010);
1192 outpdw(overlay_base + off + 0x108, 0xff);/* FG */
1193 outpdw(overlay_base + off + 0x10c, 0x00);/* BG */
1194
1195 off += 0x20;
1196 outpdw(overlay_base + off + 0x104, 0x010);
1197 outpdw(overlay_base + off + 0x108, 0xff);/* FG */
1198 outpdw(overlay_base + off + 0x10c, 0x00);/* BG */
1199
1200 off += 0x20;
1201 outpdw(overlay_base + off + 0x104, 0x010);
1202 outpdw(overlay_base + off + 0x108, 0xff);/* FG */
1203 outpdw(overlay_base + off + 0x10c, 0x00);/* BG */
1204
1205 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1206}
1207
1208
Nagamalleswararao Ganji4b991722011-01-28 13:24:34 -08001209struct mdp4_csc_matrix {
1210uint32 csc_mv[9];
1211uint32 csc_pre_bv[3];
1212uint32 csc_post_bv[3];
1213uint32 csc_pre_lv[6];
1214uint32 csc_post_lv[6];
1215} csc_matrix[2] = {
1216 {
1217 {
1218 0x0254, 0x0000, 0x0331,
1219 0x0254, 0xff37, 0xfe60,
1220 0x0254, 0x0409, 0x0000,
1221 },
1222 {
1223 0xfff0, 0xff80, 0xff80,
1224 },
1225 {
1226 0, 0, 0,
1227 },
1228 {
1229 0, 0xff, 0, 0xff, 0, 0xff,
1230 },
1231 {
1232 0, 0xff, 0, 0xff, 0, 0xff,
1233 },
1234 },
1235 {
1236 {
1237 0x0254, 0x0000, 0x0331,
1238 0x0254, 0xff37, 0xfe60,
1239 0x0254, 0x0409, 0x0000,
1240 },
1241 {
1242 0xfff0, 0xff80, 0xff80,
1243 },
1244 {
1245 0, 0, 0,
1246 },
1247 {
1248 0, 0xff, 0, 0xff, 0, 0xff,
1249 },
1250 {
1251 0, 0xff, 0, 0xff, 0, 0xff,
1252 },
1253 },
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001254};
1255
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001256
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001257
1258#define MDP4_CSC_MV_OFF 0x4400
1259#define MDP4_CSC_PRE_BV_OFF 0x4500
1260#define MDP4_CSC_POST_BV_OFF 0x4580
1261#define MDP4_CSC_PRE_LV_OFF 0x4600
1262#define MDP4_CSC_POST_LV_OFF 0x4680
1263
1264void mdp4_vg_csc_mv_setup(int vp_num)
1265{
1266 uint32 *off;
1267 int i, voff;
1268
1269 voff = MDP4_VIDEO_OFF * vp_num;
1270 off = (uint32 *)(MDP_BASE + MDP4_VIDEO_BASE + voff +
1271 MDP4_CSC_MV_OFF);
1272
1273 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1274 for (i = 0; i < 9; i++) {
Nagamalleswararao Ganji4b991722011-01-28 13:24:34 -08001275 outpdw(off, csc_matrix[vp_num].csc_mv[i]);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001276 off++;
1277 }
1278 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1279}
1280
1281void mdp4_vg_csc_pre_bv_setup(int vp_num)
1282{
1283 uint32 *off;
1284 int i, voff;
1285
1286 voff = MDP4_VIDEO_OFF * vp_num;
1287 off = (uint32 *)(MDP_BASE + MDP4_VIDEO_BASE + voff +
1288 MDP4_CSC_PRE_BV_OFF);
1289
1290 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1291 for (i = 0; i < 3; i++) {
Nagamalleswararao Ganji4b991722011-01-28 13:24:34 -08001292 outpdw(off, csc_matrix[vp_num].csc_pre_bv[i]);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001293 off++;
1294 }
1295 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1296}
1297
1298void mdp4_vg_csc_post_bv_setup(int vp_num)
1299{
1300 uint32 *off;
1301 int i, voff;
1302
1303 voff = MDP4_VIDEO_OFF * vp_num;
1304 off = (uint32 *)(MDP_BASE + MDP4_VIDEO_BASE + voff +
1305 MDP4_CSC_POST_BV_OFF);
1306
1307 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1308 for (i = 0; i < 3; i++) {
Nagamalleswararao Ganji4b991722011-01-28 13:24:34 -08001309 outpdw(off, csc_matrix[vp_num].csc_post_bv[i]);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001310 off++;
1311 }
1312 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1313}
1314
1315void mdp4_vg_csc_pre_lv_setup(int vp_num)
1316{
1317 uint32 *off;
1318 int i, voff;
1319
1320 voff = MDP4_VIDEO_OFF * vp_num;
1321 off = (uint32 *)(MDP_BASE + MDP4_VIDEO_BASE + voff +
1322 MDP4_CSC_PRE_LV_OFF);
1323
1324 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1325 for (i = 0; i < 6; i++) {
Nagamalleswararao Ganji4b991722011-01-28 13:24:34 -08001326 outpdw(off, csc_matrix[vp_num].csc_pre_lv[i]);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001327 off++;
1328 }
1329 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1330}
1331
1332void mdp4_vg_csc_post_lv_setup(int vp_num)
1333{
1334 uint32 *off;
1335 int i, voff;
1336
1337 voff = MDP4_VIDEO_OFF * vp_num;
1338 off = (uint32 *)(MDP_BASE + MDP4_VIDEO_BASE + voff +
1339 MDP4_CSC_POST_LV_OFF);
1340
1341 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1342 for (i = 0; i < 6; i++) {
Nagamalleswararao Ganji4b991722011-01-28 13:24:34 -08001343 outpdw(off, csc_matrix[vp_num].csc_post_lv[i]);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001344 off++;
1345 }
1346 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1347}
1348
Nagamalleswararao Ganji4b991722011-01-28 13:24:34 -08001349void mdp4_vg_csc_setup(int vp_num)
1350{
1351 /* yuv2rgb */
1352 mdp4_vg_csc_mv_setup(vp_num);
1353 mdp4_vg_csc_pre_bv_setup(vp_num);
1354 mdp4_vg_csc_post_bv_setup(vp_num);
1355 mdp4_vg_csc_pre_lv_setup(vp_num);
1356 mdp4_vg_csc_post_lv_setup(vp_num);
1357}
1358void mdp4_vg_csc_update(struct mdp_csc *p)
1359{
1360 struct mdp4_overlay_pipe *pipe;
1361 int vp_num;
1362
1363 pipe = mdp4_overlay_ndx2pipe(p->id);
1364 if (pipe == NULL) {
1365 pr_err("%s: p->id = %d Error\n", __func__, p->id);
1366 return;
1367 }
1368
1369 vp_num = pipe->pipe_num - OVERLAY_PIPE_VG1;
1370
1371 if (vp_num == 0 || vp_num == 1) {
1372 memcpy(csc_matrix[vp_num].csc_mv, p->csc_mv, sizeof(p->csc_mv));
1373 memcpy(csc_matrix[vp_num].csc_pre_bv, p->csc_pre_bv,
1374 sizeof(p->csc_pre_bv));
1375 memcpy(csc_matrix[vp_num].csc_post_bv, p->csc_post_bv,
1376 sizeof(p->csc_post_bv));
1377 memcpy(csc_matrix[vp_num].csc_pre_lv, p->csc_pre_lv,
1378 sizeof(p->csc_pre_lv));
1379 memcpy(csc_matrix[vp_num].csc_post_lv, p->csc_post_lv,
1380 sizeof(p->csc_post_lv));
1381 mdp4_vg_csc_setup(vp_num);
1382 }
1383}
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001384static uint32 csc_rgb2yuv_matrix_tab[9] = {
1385 0x0083, 0x0102, 0x0032,
1386 0x1fb5, 0x1f6c, 0x00e1,
1387 0x00e1, 0x1f45, 0x1fdc
1388};
1389
1390static uint32 csc_rgb2yuv_pre_bv_tab[3] = {0, 0, 0};
1391
1392static uint32 csc_rgb2yuv_post_bv_tab[3] = {0x0010, 0x0080, 0x0080};
1393
1394static uint32 csc_rgb2yuv_pre_lv_tab[6] = {
1395 0x00, 0xff, 0x00,
1396 0xff, 0x00, 0xff
1397};
1398
1399static uint32 csc_rgb2yuv_post_lv_tab[6] = {
1400 0x0010, 0x00eb, 0x0010,
1401 0x00f0, 0x0010, 0x00f0
1402};
1403
1404void mdp4_mixer1_csc_mv_setup(void)
1405{
1406 uint32 *off;
1407 int i;
1408
1409 off = (uint32 *)(MDP_BASE + MDP4_OVERLAYPROC1_BASE + 0x2400);
1410
1411 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1412 for (i = 0; i < 9; i++) {
1413 outpdw(off, csc_rgb2yuv_matrix_tab[i]);
1414 off++;
1415 }
1416 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1417}
1418
1419void mdp4_mixer1_csc_pre_bv_setup(void)
1420{
1421 uint32 *off;
1422 int i;
1423
1424 off = (uint32 *)(MDP_BASE + MDP4_OVERLAYPROC1_BASE + 0x2500);
1425
1426 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1427 for (i = 0; i < 3; i++) {
1428 outpdw(off, csc_rgb2yuv_pre_bv_tab[i]);
1429 off++;
1430 }
1431 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1432}
1433
1434void mdp4_mixer1_csc_post_bv_setup(void)
1435{
1436 uint32 *off;
1437 int i;
1438
1439 off = (uint32 *)(MDP_BASE + MDP4_OVERLAYPROC1_BASE + 0x2580);
1440
1441 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1442 for (i = 0; i < 3; i++) {
1443 outpdw(off, csc_rgb2yuv_post_bv_tab[i]);
1444 off++;
1445 }
1446 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1447}
1448
1449void mdp4_mixer1_csc_pre_lv_setup(void)
1450{
1451 uint32 *off;
1452 int i;
1453
1454 off = (uint32 *)(MDP_BASE + MDP4_OVERLAYPROC1_BASE + 0x2600);
1455
1456 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1457 for (i = 0; i < 6; i++) {
1458 outpdw(off, csc_rgb2yuv_pre_lv_tab[i]);
1459 off++;
1460 }
1461 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1462}
1463
1464void mdp4_mixer1_csc_post_lv_setup(void)
1465{
1466 uint32 *off;
1467 int i;
1468
1469 off = (uint32 *)(MDP_BASE + MDP4_OVERLAYPROC1_BASE + 0x2680);
1470
1471 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
1472 for (i = 0; i < 6; i++) {
1473 outpdw(off, csc_rgb2yuv_post_lv_tab[i]);
1474 off++;
1475 }
1476 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
1477}
1478
Nagamalleswararao Ganji4b991722011-01-28 13:24:34 -08001479void mdp4_mixer1_csc_setup(void)
1480{
1481 /* rgb2yuv */
1482 mdp4_mixer1_csc_mv_setup();
1483 mdp4_mixer1_csc_pre_bv_setup();
1484 mdp4_mixer1_csc_post_bv_setup();
1485 mdp4_mixer1_csc_pre_lv_setup();
1486 mdp4_mixer1_csc_post_lv_setup();
1487}
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001488
1489char gc_lut[] = {
1490 0x0, 0x1, 0x2, 0x2, 0x3, 0x4, 0x5, 0x6,
1491 0x6, 0x7, 0x8, 0x9, 0xA, 0xA, 0xB, 0xC,
1492 0xD, 0xD, 0xE, 0xF, 0xF, 0x10, 0x10, 0x11,
1493 0x12, 0x12, 0x13, 0x13, 0x14, 0x14, 0x15, 0x15,
1494 0x16, 0x16, 0x17, 0x17, 0x17, 0x18, 0x18, 0x19,
1495 0x19, 0x19, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1C,
1496 0x1C, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1F,
1497 0x1F, 0x1F, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21,
1498 0x22, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23, 0x24,
1499 0x24, 0x24, 0x25, 0x25, 0x25, 0x25, 0x26, 0x26,
1500 0x26, 0x26, 0x27, 0x27, 0x27, 0x28, 0x28, 0x28,
1501 0x28, 0x29, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A,
1502 0x2A, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2C, 0x2C,
1503 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2E,
1504 0x2E, 0x2E, 0x2E, 0x2F, 0x2F, 0x2F, 0x2F, 0x30,
1505 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31, 0x31,
1506 0x31, 0x32, 0x32, 0x32, 0x32, 0x32, 0x33, 0x33,
1507 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x34, 0x34,
1508 0x35, 0x35, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36,
1509 0x36, 0x36, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37,
1510 0x38, 0x38, 0x38, 0x38, 0x38, 0x39, 0x39, 0x39,
1511 0x39, 0x39, 0x39, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A,
1512 0x3A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3C,
1513 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3D, 0x3D, 0x3D,
1514 0x3D, 0x3D, 0x3D, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E,
1515 0x3E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x40,
1516 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41,
1517 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42,
1518 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43,
1519 0x43, 0x43, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
1520 0x44, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45,
1521 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x47,
1522 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x48, 0x48,
1523 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x49, 0x49,
1524 0x49, 0x49, 0x49, 0x49, 0x49, 0x4A, 0x4A, 0x4A,
1525 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4B, 0x4B, 0x4B,
1526 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4C, 0x4C, 0x4C,
1527 0x4C, 0x4C, 0x4C, 0x4C, 0x4D, 0x4D, 0x4D, 0x4D,
1528 0x4D, 0x4D, 0x4D, 0x4D, 0x4E, 0x4E, 0x4E, 0x4E,
1529 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4F, 0x4F, 0x4F,
1530 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x50, 0x50, 0x50,
1531 0x50, 0x50, 0x50, 0x50, 0x50, 0x51, 0x51, 0x51,
1532 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x52, 0x52,
1533 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53,
1534 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x54,
1535 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1536 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
1537 0x55, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56,
1538 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
1539 0x57, 0x57, 0x57, 0x58, 0x58, 0x58, 0x58, 0x58,
1540 0x58, 0x58, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59,
1541 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x5A, 0x5A,
1542 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
1543 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
1544 0x5B, 0x5B, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
1545 0x5C, 0x5C, 0x5C, 0x5C, 0x5D, 0x5D, 0x5D, 0x5D,
1546 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5E, 0x5E,
1547 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E,
1548 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
1549 0x5F, 0x5F, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
1550 0x60, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1551 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x62,
1552 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62,
1553 0x62, 0x62, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
1554 0x63, 0x63, 0x63, 0x63, 0x63, 0x64, 0x64, 0x64,
1555 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
1556 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65,
1557 0x65, 0x65, 0x65, 0x66, 0x66, 0x66, 0x66, 0x66,
1558 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x67, 0x67,
1559 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
1560 0x67, 0x67, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68,
1561 0x68, 0x68, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69,
1562 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69,
1563 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A,
1564 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6B, 0x6B, 0x6B,
1565 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
1566 0x6B, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
1567 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6D, 0x6D, 0x6D,
1568 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D,
1569 0x6D, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E,
1570 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6F, 0x6F, 0x6F,
1571 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F,
1572 0x6F, 0x6F, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
1573 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x71, 0x71,
1574 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71,
1575 0x71, 0x71, 0x71, 0x72, 0x72, 0x72, 0x72, 0x72,
1576 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
1577 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73,
1578 0x73, 0x73, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74,
1579 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
1580 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
1581 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
1582 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76,
1583 0x76, 0x76, 0x76, 0x76, 0x76, 0x77, 0x77, 0x77,
1584 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
1585 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x78, 0x78,
1586 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
1587 0x78, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79,
1588 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x7A, 0x7A,
1589 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A,
1590 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7B, 0x7B, 0x7B,
1591 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
1592 0x7B, 0x7B, 0x7B, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C,
1593 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C,
1594 0x7C, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D,
1595 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D,
1596 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E,
1597 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7F, 0x7F,
1598 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
1599 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x80, 0x80, 0x80,
1600 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
1601 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81,
1602 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
1603 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82, 0x82,
1604 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
1605 0x82, 0x82, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
1606 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
1607 0x83, 0x83, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
1608 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
1609 0x84, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
1610 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
1611 0x85, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
1612 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
1613 0x86, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
1614 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
1615 0x87, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
1616 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
1617 0x88, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
1618 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
1619 0x89, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
1620 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
1621 0x8A, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
1622 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
1623 0x8B, 0x8B, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
1624 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
1625 0x8C, 0x8C, 0x8C, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
1626 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
1627 0x8D, 0x8D, 0x8D, 0x8D, 0x8E, 0x8E, 0x8E, 0x8E,
1628 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
1629 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F, 0x8F, 0x8F,
1630 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
1631 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x90, 0x90,
1632 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
1633 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x91,
1634 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
1635 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
1636 0x91, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
1637 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
1638 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
1639 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
1640 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
1641 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
1642 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x95, 0x95,
1643 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
1644 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
1645 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
1646 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
1647 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x97, 0x97,
1648 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
1649 0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1650 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
1651 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
1652 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
1653 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
1654 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
1655 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
1656 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9B, 0x9B, 0x9B,
1657 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
1658 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
1659 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
1660 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
1661 0x9C, 0x9C, 0x9C, 0x9C, 0x9D, 0x9D, 0x9D, 0x9D,
1662 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
1663 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9E,
1664 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
1665 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
1666 0x9E, 0x9E, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
1667 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
1668 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0xA0, 0xA0,
1669 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
1670 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
1671 0xA0, 0xA0, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
1672 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
1673 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA2, 0xA2,
1674 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
1675 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
1676 0xA2, 0xA2, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
1677 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
1678 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA4, 0xA4,
1679 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
1680 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
1681 0xA4, 0xA4, 0xA4, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
1682 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
1683 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
1684 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
1685 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
1686 0xA6, 0xA6, 0xA6, 0xA6, 0xA7, 0xA7, 0xA7, 0xA7,
1687 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
1688 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
1689 0xA7, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
1690 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
1691 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA9,
1692 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
1693 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
1694 0xA9, 0xA9, 0xA9, 0xA9, 0xAA, 0xAA, 0xAA, 0xAA,
1695 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
1696 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
1697 0xAA, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
1698 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
1699 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAC,
1700 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
1701 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
1702 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAD, 0xAD, 0xAD,
1703 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
1704 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
1705 0xAD, 0xAD, 0xAD, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
1706 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
1707 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
1708 0xAE, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
1709 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
1710 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xB0,
1711 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
1712 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
1713 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB1, 0xB1,
1714 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
1715 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
1716 0xB1, 0xB1, 0xB1, 0xB1, 0xB2, 0xB2, 0xB2, 0xB2,
1717 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
1718 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
1719 0xB2, 0xB2, 0xB2, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,
1720 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,
1721 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,
1722 0xB3, 0xB3, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
1723 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
1724 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
1725 0xB4, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
1726 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
1727 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
1728 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
1729 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
1730 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
1731 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,
1732 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,
1733 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB8,
1734 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
1735 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
1736 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB9,
1737 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
1738 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
1739 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xBA,
1740 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
1741 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
1742 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBB,
1743 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
1744 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
1745 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
1746 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,
1747 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,
1748 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,
1749 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,
1750 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,
1751 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,
1752 0xBD, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
1753 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
1754 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
1755 0xBE, 0xBE, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
1756 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
1757 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
1758 0xBF, 0xBF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
1759 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
1760 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
1761 0xC0, 0xC0, 0xC0, 0xC0, 0xC1, 0xC1, 0xC1, 0xC1,
1762 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1,
1763 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1,
1764 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC2, 0xC2, 0xC2,
1765 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2,
1766 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2,
1767 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC3, 0xC3,
1768 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
1769 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
1770 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
1771 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4,
1772 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4,
1773 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4,
1774 0xC4, 0xC4, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5,
1775 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5,
1776 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5,
1777 0xC5, 0xC5, 0xC5, 0xC5, 0xC6, 0xC6, 0xC6, 0xC6,
1778 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
1779 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
1780 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC7, 0xC7,
1781 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7,
1782 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7,
1783 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7,
1784 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8,
1785 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8,
1786 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8,
1787 0xC8, 0xC8, 0xC8, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9,
1788 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9,
1789 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9,
1790 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xCA, 0xCA,
1791 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA,
1792 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA,
1793 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA,
1794 0xCA, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB,
1795 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB,
1796 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB,
1797 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCC, 0xCC, 0xCC,
1798 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
1799 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
1800 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCD,
1801 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD,
1802 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD,
1803 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD,
1804 0xCD, 0xCD, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE,
1805 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE,
1806 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE,
1807 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCF, 0xCF,
1808 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF,
1809 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF,
1810 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF,
1811 0xCF, 0xCF, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0,
1812 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0,
1813 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0,
1814 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD1, 0xD1, 0xD1,
1815 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1,
1816 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1,
1817 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1,
1818 0xD1, 0xD1, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2,
1819 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2,
1820 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2,
1821 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2, 0xD3, 0xD3,
1822 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD3,
1823 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD3,
1824 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD3,
1825 0xD3, 0xD3, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4,
1826 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4,
1827 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4,
1828 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD5,
1829 0xD5, 0xD5, 0xD5, 0xD5, 0xD5, 0xD5, 0xD5, 0xD5,
1830 0xD5, 0xD5, 0xD5, 0xD5, 0xD5, 0xD5, 0xD5, 0xD5,
1831 0xD5, 0xD5, 0xD5, 0xD5, 0xD5, 0xD5, 0xD5, 0xD5,
1832 0xD5, 0xD5, 0xD5, 0xD5, 0xD6, 0xD6, 0xD6, 0xD6,
1833 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6,
1834 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6,
1835 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6,
1836 0xD6, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7,
1837 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7,
1838 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7,
1839 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD8, 0xD8,
1840 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8,
1841 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8,
1842 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8,
1843 0xD8, 0xD8, 0xD8, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9,
1844 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9,
1845 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9,
1846 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9,
1847 0xD9, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA,
1848 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA,
1849 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA,
1850 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDB, 0xDB,
1851 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB,
1852 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB,
1853 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB,
1854 0xDB, 0xDB, 0xDB, 0xDB, 0xDC, 0xDC, 0xDC, 0xDC,
1855 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC,
1856 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC,
1857 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC,
1858 0xDC, 0xDC, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
1859 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
1860 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
1861 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
1862 0xDD, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE,
1863 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE,
1864 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE,
1865 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, 0xDF,
1866 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF,
1867 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF,
1868 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF,
1869 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xE0, 0xE0,
1870 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
1871 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
1872 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
1873 0xE0, 0xE0, 0xE0, 0xE0, 0xE1, 0xE1, 0xE1, 0xE1,
1874 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1,
1875 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1,
1876 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1,
1877 0xE1, 0xE1, 0xE1, 0xE2, 0xE2, 0xE2, 0xE2, 0xE2,
1878 0xE2, 0xE2, 0xE2, 0xE2, 0xE2, 0xE2, 0xE2, 0xE2,
1879 0xE2, 0xE2, 0xE2, 0xE2, 0xE2, 0xE2, 0xE2, 0xE2,
1880 0xE2, 0xE2, 0xE2, 0xE2, 0xE2, 0xE2, 0xE2, 0xE2,
1881 0xE2, 0xE2, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3,
1882 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3,
1883 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3,
1884 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3,
1885 0xE3, 0xE3, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4,
1886 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4,
1887 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4,
1888 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4,
1889 0xE4, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
1890 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
1891 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
1892 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
1893 0xE5, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6,
1894 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6,
1895 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6,
1896 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6, 0xE6,
1897 0xE6, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7,
1898 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7,
1899 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7,
1900 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7,
1901 0xE7, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8,
1902 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8,
1903 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8,
1904 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8, 0xE8,
1905 0xE8, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9,
1906 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9,
1907 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9,
1908 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9, 0xE9,
1909 0xE9, 0xE9, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA,
1910 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA,
1911 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA,
1912 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA,
1913 0xEA, 0xEA, 0xEB, 0xEB, 0xEB, 0xEB, 0xEB, 0xEB,
1914 0xEB, 0xEB, 0xEB, 0xEB, 0xEB, 0xEB, 0xEB, 0xEB,
1915 0xEB, 0xEB, 0xEB, 0xEB, 0xEB, 0xEB, 0xEB, 0xEB,
1916 0xEB, 0xEB, 0xEB, 0xEB, 0xEB, 0xEB, 0xEB, 0xEB,
1917 0xEB, 0xEB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
1918 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
1919 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
1920 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
1921 0xEC, 0xEC, 0xEC, 0xEC, 0xED, 0xED, 0xED, 0xED,
1922 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED,
1923 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED,
1924 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED,
1925 0xED, 0xED, 0xED, 0xED, 0xED, 0xEE, 0xEE, 0xEE,
1926 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
1927 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
1928 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
1929 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEF, 0xEF,
1930 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
1931 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
1932 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
1933 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
1934 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
1935 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
1936 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
1937 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
1938 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1,
1939 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1,
1940 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1,
1941 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1,
1942 0xF1, 0xF1, 0xF1, 0xF1, 0xF2, 0xF2, 0xF2, 0xF2,
1943 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2,
1944 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2,
1945 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2,
1946 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF3, 0xF3,
1947 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3,
1948 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3,
1949 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3,
1950 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0xF3,
1951 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4,
1952 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4,
1953 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4,
1954 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4, 0xF4,
1955 0xF4, 0xF4, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5,
1956 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5,
1957 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5,
1958 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5,
1959 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF6, 0xF6, 0xF6,
1960 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6,
1961 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6,
1962 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6,
1963 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6,
1964 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7,
1965 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7,
1966 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7,
1967 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7,
1968 0xF7, 0xF7, 0xF7, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
1969 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
1970 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
1971 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
1972 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF9, 0xF9,
1973 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9,
1974 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9,
1975 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9,
1976 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9, 0xF9,
1977 0xF9, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
1978 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
1979 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
1980 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA,
1981 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFB, 0xFB, 0xFB,
1982 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB,
1983 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB,
1984 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB,
1985 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB,
1986 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
1987 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
1988 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
1989 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
1990 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFD, 0xFD, 0xFD,
1991 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD,
1992 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD,
1993 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD,
1994 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD,
1995 0xFD, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
1996 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
1997 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
1998 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
1999 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF,
2000 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
2001 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
2002};
2003
2004void mdp4_mixer_gc_lut_setup(int mixer_num)
2005{
2006 unsigned char *base;
2007 uint32 data;
2008 char val;
2009 int i, off;
2010
2011 if (mixer_num) /* mixer number, /dev/fb0, /dev/fb1 */
2012 base = MDP_BASE + MDP4_OVERLAYPROC1_BASE;/* 0x18000 */
2013 else
2014 base = MDP_BASE + MDP4_OVERLAYPROC0_BASE;/* 0x10000 */
2015
2016 base += 0x4000; /* GC_LUT offset */
2017
2018 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
2019 off = 0;
2020 for (i = 0; i < 4096; i++) {
2021 val = gc_lut[i];
2022 data = (val << 16 | val << 8 | val); /* R, B, and G are same */
2023 outpdw(base + off, data);
2024 off += 4;
2025 }
2026 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
2027}
2028
2029uint32 igc_video_lut[] = { /* non linear */
2030 0x0, 0x1, 0x2, 0x4, 0x5, 0x6, 0x7, 0x9,
2031 0xA, 0xB, 0xC, 0xE, 0xF, 0x10, 0x12, 0x14,
2032 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F, 0x21, 0x23,
2033 0x25, 0x28, 0x2A, 0x2D, 0x30, 0x32, 0x35, 0x38,
2034 0x3B, 0x3E, 0x42, 0x45, 0x48, 0x4C, 0x4F, 0x53,
2035 0x57, 0x5B, 0x5F, 0x63, 0x67, 0x6B, 0x70, 0x74,
2036 0x79, 0x7E, 0x83, 0x88, 0x8D, 0x92, 0x97, 0x9C,
2037 0xA2, 0xA8, 0xAD, 0xB3, 0xB9, 0xBF, 0xC5, 0xCC,
2038 0xD2, 0xD8, 0xDF, 0xE6, 0xED, 0xF4, 0xFB, 0x102,
2039 0x109, 0x111, 0x118, 0x120, 0x128, 0x130, 0x138, 0x140,
2040 0x149, 0x151, 0x15A, 0x162, 0x16B, 0x174, 0x17D, 0x186,
2041 0x190, 0x199, 0x1A3, 0x1AC, 0x1B6, 0x1C0, 0x1CA, 0x1D5,
2042 0x1DF, 0x1EA, 0x1F4, 0x1FF, 0x20A, 0x215, 0x220, 0x22B,
2043 0x237, 0x242, 0x24E, 0x25A, 0x266, 0x272, 0x27F, 0x28B,
2044 0x298, 0x2A4, 0x2B1, 0x2BE, 0x2CB, 0x2D8, 0x2E6, 0x2F3,
2045 0x301, 0x30F, 0x31D, 0x32B, 0x339, 0x348, 0x356, 0x365,
2046 0x374, 0x383, 0x392, 0x3A1, 0x3B1, 0x3C0, 0x3D0, 0x3E0,
2047 0x3F0, 0x400, 0x411, 0x421, 0x432, 0x443, 0x454, 0x465,
2048 0x476, 0x487, 0x499, 0x4AB, 0x4BD, 0x4CF, 0x4E1, 0x4F3,
2049 0x506, 0x518, 0x52B, 0x53E, 0x551, 0x565, 0x578, 0x58C,
2050 0x5A0, 0x5B3, 0x5C8, 0x5DC, 0x5F0, 0x605, 0x61A, 0x62E,
2051 0x643, 0x659, 0x66E, 0x684, 0x699, 0x6AF, 0x6C5, 0x6DB,
2052 0x6F2, 0x708, 0x71F, 0x736, 0x74D, 0x764, 0x77C, 0x793,
2053 0x7AB, 0x7C3, 0x7DB, 0x7F3, 0x80B, 0x824, 0x83D, 0x855,
2054 0x86F, 0x888, 0x8A1, 0x8BB, 0x8D4, 0x8EE, 0x908, 0x923,
2055 0x93D, 0x958, 0x973, 0x98E, 0x9A9, 0x9C4, 0x9DF, 0x9FB,
2056 0xA17, 0xA33, 0xA4F, 0xA6C, 0xA88, 0xAA5, 0xAC2, 0xADF,
2057 0xAFC, 0xB19, 0xB37, 0xB55, 0xB73, 0xB91, 0xBAF, 0xBCE,
2058 0xBEC, 0xC0B, 0xC2A, 0xC4A, 0xC69, 0xC89, 0xCA8, 0xCC8,
2059 0xCE8, 0xD09, 0xD29, 0xD4A, 0xD6B, 0xD8C, 0xDAD, 0xDCF,
2060 0xDF0, 0xE12, 0xE34, 0xE56, 0xE79, 0xE9B, 0xEBE, 0xEE1,
2061 0xF04, 0xF27, 0xF4B, 0xF6E, 0xF92, 0xFB6, 0xFDB, 0xFFF,
2062};
2063
2064void mdp4_vg_igc_lut_setup(int vp_num)
2065{
2066 unsigned char *base;
2067 int i, voff, off;
2068 uint32 data, val;
2069
2070 voff = MDP4_VIDEO_OFF * vp_num;
2071 base = MDP_BASE + MDP4_VIDEO_BASE + voff + 0x5000;
2072
2073 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
2074 off = 0;
2075 for (i = 0; i < 256; i++) {
2076 val = igc_video_lut[i];
2077 data = (val << 16 | val); /* color 0 and 1 */
2078 outpdw(base + off, data);
2079 outpdw(base + off + 0x800, val); /* color 2 */
2080 off += 4;
2081 }
2082 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
2083}
2084
2085uint32 igc_rgb_lut[] = { /* linear */
2086 0x0, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
2087 0x80, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1,
2088 0x101, 0x111, 0x121, 0x131, 0x141, 0x151, 0x161, 0x171,
2089 0x181, 0x191, 0x1A2, 0x1B2, 0x1C2, 0x1D2, 0x1E2, 0x1F2,
2090 0x202, 0x212, 0x222, 0x232, 0x242, 0x252, 0x262, 0x272,
2091 0x282, 0x292, 0x2A2, 0x2B3, 0x2C3, 0x2D3, 0x2E3, 0x2F3,
2092 0x303, 0x313, 0x323, 0x333, 0x343, 0x353, 0x363, 0x373,
2093 0x383, 0x393, 0x3A3, 0x3B3, 0x3C4, 0x3D4, 0x3E4, 0x3F4,
2094 0x404, 0x414, 0x424, 0x434, 0x444, 0x454, 0x464, 0x474,
2095 0x484, 0x494, 0x4A4, 0x4B4, 0x4C4, 0x4D5, 0x4E5, 0x4F5,
2096 0x505, 0x515, 0x525, 0x535, 0x545, 0x555, 0x565, 0x575,
2097 0x585, 0x595, 0x5A5, 0x5B5, 0x5C5, 0x5D5, 0x5E6, 0x5F6,
2098 0x606, 0x616, 0x626, 0x636, 0x646, 0x656, 0x666, 0x676,
2099 0x686, 0x696, 0x6A6, 0x6B6, 0x6C6, 0x6D6, 0x6E6, 0x6F7,
2100 0x707, 0x717, 0x727, 0x737, 0x747, 0x757, 0x767, 0x777,
2101 0x787, 0x797, 0x7A7, 0x7B7, 0x7C7, 0x7D7, 0x7E7, 0x7F7,
2102 0x808, 0x818, 0x828, 0x838, 0x848, 0x858, 0x868, 0x878,
2103 0x888, 0x898, 0x8A8, 0x8B8, 0x8C8, 0x8D8, 0x8E8, 0x8F8,
2104 0x908, 0x919, 0x929, 0x939, 0x949, 0x959, 0x969, 0x979,
2105 0x989, 0x999, 0x9A9, 0x9B9, 0x9C9, 0x9D9, 0x9E9, 0x9F9,
2106 0xA09, 0xA19, 0xA2A, 0xA3A, 0xA4A, 0xA5A, 0xA6A, 0xA7A,
2107 0xA8A, 0xA9A, 0xAAA, 0xABA, 0xACA, 0xADA, 0xAEA, 0xAFA,
2108 0xB0A, 0xB1A, 0xB2A, 0xB3B, 0xB4B, 0xB5B, 0xB6B, 0xB7B,
2109 0xB8B, 0xB9B, 0xBAB, 0xBBB, 0xBCB, 0xBDB, 0xBEB, 0xBFB,
2110 0xC0B, 0xC1B, 0xC2B, 0xC3B, 0xC4C, 0xC5C, 0xC6C, 0xC7C,
2111 0xC8C, 0xC9C, 0xCAC, 0xCBC, 0xCCC, 0xCDC, 0xCEC, 0xCFC,
2112 0xD0C, 0xD1C, 0xD2C, 0xD3C, 0xD4C, 0xD5D, 0xD6D, 0xD7D,
2113 0xD8D, 0xD9D, 0xDAD, 0xDBD, 0xDCD, 0xDDD, 0xDED, 0xDFD,
2114 0xE0D, 0xE1D, 0xE2D, 0xE3D, 0xE4D, 0xE5D, 0xE6E, 0xE7E,
2115 0xE8E, 0xE9E, 0xEAE, 0xEBE, 0xECE, 0xEDE, 0xEEE, 0xEFE,
2116 0xF0E, 0xF1E, 0xF2E, 0xF3E, 0xF4E, 0xF5E, 0xF6E, 0xF7F,
2117 0xF8F, 0xF9F, 0xFAF, 0xFBF, 0xFCF, 0xFDF, 0xFEF, 0xFFF,
2118};
2119
2120void mdp4_rgb_igc_lut_setup(int num)
2121{
2122 unsigned char *base;
2123 int i, voff, off;
2124 uint32 data, val;
2125
2126 voff = MDP4_RGB_OFF * num;
2127 base = MDP_BASE + MDP4_RGB_BASE + voff + 0x5000;
2128
2129 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
2130 off = 0;
2131 for (i = 0; i < 256; i++) {
2132 val = igc_rgb_lut[i];
2133 data = (val << 16 | val); /* color 0 and 1 */
2134 outpdw(base + off, data);
2135 outpdw(base + off + 0x800, val); /* color 2 */
2136 off += 4;
2137 }
2138 mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
2139}
2140
2141uint32 mdp4_rgb_igc_lut_cvt(uint32 ndx)
2142{
2143 return igc_rgb_lut[ndx & 0x0ff];
2144}
2145
2146uint32_t mdp4_ss_table_value(int8_t value, int8_t index)
2147{
2148 uint32_t out = 0x0;
2149 int8_t level = -1;
2150 uint32_t mask = 0xffffffff;
2151
2152 if (value < 0) {
2153 if (value == -128)
2154 value = 127;
2155 else
2156 value = -value;
2157 out = 0x11111111;
2158 } else {
2159 out = 0x88888888;
2160 mask = 0x0fffffff;
2161 }
2162
2163 if (value == 0)
2164 level = 0;
2165 else {
2166 while (value > 0 && level < 7) {
2167 level++;
2168 value -= 16;
2169 }
2170 }
2171
2172 if (level == 0) {
2173 if (index == 0)
2174 out = 0x0;
2175 else
2176 out = 0x20000000;
2177 } else {
2178 out += (0x11111111 * level);
2179 if (index == 1)
2180 out &= mask;
2181 }
2182
2183 return out;
2184}
2185