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