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