diff -urN /home/sakamoto/source-open/c700/linux/arch/arm/kernel/signal.c linux/arch/arm/kernel/signal.c --- /home/sakamoto/source-open/c700/linux/arch/arm/kernel/signal.c Thu Aug 29 12:27:19 2002 +++ linux/arch/arm/kernel/signal.c Mon Mar 17 13:42:57 2003 @@ -569,7 +569,7 @@ case SIGQUIT: case SIGILL: case SIGTRAP: case SIGABRT: case SIGFPE: case SIGSEGV: case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ: - printk("signal = %d\n", signr); + printk("process %s(%d) signal = %d\n", current->comm, current->pid, signr); show_regs(regs); break; default: diff -urN /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/discovery_battery.c linux/arch/arm/mach-pxa/discovery_battery.c --- /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/discovery_battery.c Wed Dec 18 19:27:22 2002 +++ linux/arch/arm/mach-pxa/discovery_battery.c Thu Jan 30 18:59:14 2003 @@ -30,6 +30,7 @@ * ChangeLog: * 27-AUG-2002 Steve Lin for Discovery * 31-Jul-2002 Lineo Japan, Inc. for ARCH_PXA + * 16-Jan-2003 SHARP named kernel threads * * modify: TX/RX I2C for DEMO data is ok. * @@ -460,6 +461,10 @@ static void discovery_minute(void) { + daemonize(); + strcpy(current->comm, "kminuted"); + //sigfillset(¤t->blocked); + while(1) { interruptible_sleep_on_timeout((wait_queue_head_t*)&minute_cnt, DISCOVERY_MINUTE_TICKTIME ); @@ -537,6 +542,10 @@ unsigned long Voltage, Imin, Temper; unsigned long period; + // daemonize(); + strcpy(current->comm, "kbattd"); + // sigfillset(¤t->blocked); + while(1) { short dTx,nowTx=0,Pd_k; /* maybe negative */ @@ -1362,8 +1371,11 @@ static int backpack_detect_check(void *unused) { + daemonize(); + strcpy(current->comm, "kbpchkd"); + sigfillset(¤t->blocked); while(1){ - sleep_on(&bp_detect); + interruptible_sleep_on(&bp_detect); if (need_delay) mdelay(500); diff -urN /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/poodle_buzzer.c linux/arch/arm/mach-pxa/poodle_buzzer.c --- /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/poodle_buzzer.c Sat Nov 9 10:58:04 2002 +++ linux/arch/arm/mach-pxa/poodle_buzzer.c Thu Jan 30 18:59:14 2003 @@ -18,6 +18,7 @@ * GNU General Public License for more details. * * ChangeLog: + * 16-Jan-2003 SHARP sleep_on -> interruptible_sleep_on * */ #include @@ -165,12 +166,14 @@ static void poodle_buzzer_thread(void) { + // daemonize(); strcpy(current->comm, "buzzer"); + sigfillset(¤t->blocked); while(1) { if (buzzer_soundid==0) { //while(buzzer_soundid==0) - sleep_on(&buzzer_proc); + interruptible_sleep_on(&buzzer_proc); } else { if (wm8731_busy()) { if (buzzer_soundid==SHARP_BUZ_SCHEDULE_ALARM) { diff -urN /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/sharpsl_apm.c linux/arch/arm/mach-pxa/sharpsl_apm.c --- /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/sharpsl_apm.c Tue Jan 14 12:07:55 2003 +++ linux/arch/arm/mach-pxa/sharpsl_apm.c Thu Feb 27 11:47:28 2003 @@ -47,6 +47,7 @@ * 31-Jul-2002 Lineo Japan, Inc. for ARCH_PXA * 07-Aug-2002 Lineo Japan, Inc. for Poodle * 12-Dec-2002 Sharp Corporation for Poodle and Corgi + * 16-Jan-2003 SHARP sleep_on -> interruptible_sleep_on */ #include @@ -1043,7 +1044,7 @@ // clock_slowed = 1; //} - if (!ICPR) { + if (!ICPR && (((signed long)(OSCR - OSMR0)) < 0)) { MDREFR |= MDREFR_APD; cpu_xscale_idle_sl(); } @@ -1115,7 +1116,7 @@ signed long passcount; int i = 0; passcount = OSCR - OSMR0; - if (passcount >= 0) { + if ((passcount >= 0) || ( ( idletick != 0) && (passcount < -(idletick+1) * LATCH)) ) { // timer irq has occured (*(unsigned long *)&jiffies)+=idletick; if ((OSSR & OSSR_M0) == 0) { @@ -1124,15 +1125,15 @@ oscr = OSCR; osmr0 = OSMR0; ossr = OSSR; - printk("OS timer IRQ error !!!\n"); - printk("-- OSCR %x OSMR0 %x OSSR %x\n", (unsigned int)oscr, (unsigned int)osmr0, (unsigned int)ossr); + //printk("OS timer IRQ error !!!\n"); + //printk("-- OSCR %x OSMR0 %x OSSR %x\n", (unsigned int)oscr, (unsigned int)osmr0, (unsigned int)ossr); while ((passcount >= 0) && ((OSSR & OSSR_M0) == 0)) { OSMR0 += LATCH; (*(unsigned long *)&jiffies)++; i++; passcount = OSCR - OSMR0; } - printk("-- added OSMR0 %d ticks\n", i); + //printk("-- added OSMR0 %d ticks\n", i); } idletick = 1; } @@ -1143,7 +1144,7 @@ passtick = idletick + (passcount / LATCH); (*(unsigned long *)&jiffies)+=passtick; OSMR0 += LATCH * (passtick - idletick); - while ((unsigned long)(OSMR0 - OSCR) < 0) { + while (((signed long)(OSMR0 - OSCR)) < 0) { OSMR0 = OSCR + LATCH; (*(unsigned long *)&jiffies)++; } @@ -2434,9 +2435,13 @@ static int discovery_key_check(void *unused) { + daemonize(); + strcpy(current->comm, "kkeychkd"); + sigfillset(¤t->blocked); + while(1) { - sleep_on(&fl_key); + interruptiblee_sleep_on(&fl_key); while(1) { interruptible_sleep_on_timeout((wait_queue_head_t*)&queue, KEY_TICK ); diff -urN /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/sharpsl_battery.c linux/arch/arm/mach-pxa/sharpsl_battery.c --- /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/sharpsl_battery.c Tue Jan 14 12:07:55 2003 +++ linux/arch/arm/mach-pxa/sharpsl_battery.c Thu Feb 27 11:47:28 2003 @@ -22,6 +22,7 @@ * 12-Nov-2001 Lineo Japan, Inc. * 21-Aug-2002 Lineo Japan, Inc. for 2.4.18 * 12-Dec-2002 Sharp Corporation for Poodle and Corgi + * 16-Jan-2003 SHARP sleep_on -> interruptible_sleep_on * */ @@ -395,13 +396,7 @@ static int sharpsl_main_status_bk = SHARPSL_BATTERY_STATUS_HIGH; static int sharpsl_main_percent_bk = 100; static int sharpsl_check_ac_err = 0; -#if defined(CONFIG_ARCH_PXA_POODLE) && !defined(CONFIG_ARCH_SHARP_SL_J) -int sharpsl_main_bk_flag = 1; -#elif defined(CONFIG_ARCH_PXA_POODLE) && defined(CONFIG_ARCH_SHARP_SL_J) -int sharpsl_main_bk_flag = 0; -#elif defined(CONFIG_ARCH_PXA_CORGI) int sharpsl_main_bk_flag = 0; -#endif static struct timer_list ac_kick_timer; @@ -480,7 +475,9 @@ if ( charge_status ) { *battery_status = APM_BATTERY_STATUS_CHARGING; *battery_flag = (1 << 3); - *battery_percentage = sharpsl_main_charge_battery; + // charging now, so can not get battery percentage. + //*battery_percentage = sharpsl_main_charge_battery; + *battery_percentage = -1; } // set battery life @@ -556,7 +553,6 @@ // get main battery sharpsl_get_main_battery(); -#if !defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_SHARP_SL_J) // if battery is low , backlight driver become to save power. if ( ( ( sharpsl_main_battery == SHARPSL_BATTERY_STATUS_VERYLOW ) || ( sharpsl_main_battery == SHARPSL_BATTERY_STATUS_CRITICAL ) ) && @@ -567,7 +563,6 @@ SHARPSL_LIMIT_CONTRAST(SHARPSL_RESET_CONTRAST); } back_battery_status = sharpsl_main_battery; -#endif // good or ac in --> GOOD_COUNT // low or very low --> NOGOOD_COUNT @@ -647,19 +642,19 @@ /*** battery charge thread ***********************************************************/ void sharpsl_charge_start(void) { - #if !defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_SHARP_SL_J) sharpsl_charge_on_time = jiffies; #endif -#if !defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_SHARP_SL_J) if ( sharpsl_check_battery(1) ) { /* error led on */ CHARGE_LED_ERR(); CHARGE_OFF(); /* charge status flag reset */ charge_status = 0; +#if !defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_SHARP_SL_J) sharpsl_charge_on_time = 0; +#endif } else { /* led on */ CHARGE_LED_OFF(); @@ -671,25 +666,6 @@ /* charge status flag set */ charge_status = 1; } -#else - if ( sharpsl_check_battery(1) ) { - /* error led on */ - CHARGE_LED_ERR(); - CHARGE_OFF(); - /* charge status flag reset */ - charge_status = 0; - } else { - /* led on */ - CHARGE_LED_OFF(); - CHARGE_LED_ON(); - /* Charge ON */ - CHARGE_OFF(); - mdelay(SHARPSL_CHARGE_WAIT_TIME); - CHARGE_ON(); - /* charge status flag set */ - charge_status = 1; - } -#endif sharpsl_change_battery_status = 1; wake_up_interruptible(&battery_waitqueue); @@ -699,12 +675,13 @@ static int sharpsl_charge_on(void* unused) { + // daemonize(); strcpy(current->comm, "battchrgon"); - + sigfillset(¤t->blocked); while(1) { - sleep_on(&wq_on); + interruptible_sleep_on(&wq_on); // if ac is not insert, so stop charge start proc. if ( ( GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN) ) == 0 ) continue; @@ -735,11 +712,13 @@ static int sharpsl_charge_off(void* unused) { + // daemonize(); strcpy(current->comm, "battchrgoff"); + sigfillset(¤t->blocked); while(1) { - sleep_on(&wq_off); + interruptible_sleep_on(&wq_off); DPRINTK("charge off\n"); DPRINTK("charge off mode = %d\n",charge_off_mode); @@ -932,7 +911,7 @@ voltage = sharpsl_cnv_value(voltage); thresh = GetMainLevel(voltage); -#if !defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_SHARP_SL_J) + // if battery is low , backlight driver become to save power. if ( ( ( thresh->status == SHARPSL_BATTERY_STATUS_VERYLOW ) || ( thresh->status == SHARPSL_BATTERY_STATUS_CRITICAL ) || @@ -940,7 +919,7 @@ ( !sharpsl_main_bk_flag ) ) { SHARPSL_LIMIT_CONTRAST(SHARPSL_CAUTION_CONTRAST); } -#endif + if ( sharpsl_main_bk_flag == 0 ) { return sharpsl_main_battery; } @@ -1213,10 +1192,9 @@ // disable charge CHARGE_OFF(); -#if defined(CONFIG_ARCH_PXA_CORGI) // enable discharge DISCHARGE_ON(); -#endif + mdelay(SHARPSL_WAIT_DISCHARGE_ON*10); // Check Voltage : check full charging @@ -1225,10 +1203,8 @@ mdelay(SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT*10); } -#if defined(CONFIG_ARCH_PXA_CORGI) // disable discharge DISCHARGE_OFF(); -#endif DPRINTK("volt\n"); temp = get_select_val(buff); @@ -1352,7 +1328,6 @@ break; case PM_RESUME: - //printk("set fatal_off\n"); sharpsl_fatal_off = 1; FattCnt = 0; sharpsl_charge_state = CHARGE_STEP1; @@ -1372,6 +1347,13 @@ charge_off_mode = 1; wake_up(&wq_off); } +#else + if ( charge_status ) { + /* Charge ON */ + CHARGE_OFF(); + mdelay(SHARPSL_CHARGE_WAIT_TIME); + CHARGE_ON(); + } #endif sharpsl_kick_battery_check_queue(); break; @@ -1789,7 +1771,9 @@ /* Set transition detect */ set_GPIO_IRQ_edge( GPIO_AC_IN , GPIO_BOTH_EDGES ); /* AC IN */ +#if defined(CONFIG_ARCH_PXA_POODLE) && !defined(CONFIG_ARCH_SHARP_SL_J) set_GPIO_IRQ_edge( GPIO_CO , GPIO_RISING_EDGE ); /* CHRG FULL */ +#endif /* Register interrupt handler. */ if ((err = request_irq(IRQ_GPIO_AC_IN, Sharpsl_ac_interrupt, diff -urN /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/sharpsl_power.c linux/arch/arm/mach-pxa/sharpsl_power.c --- /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/sharpsl_power.c Tue Jan 14 12:07:55 2003 +++ linux/arch/arm/mach-pxa/sharpsl_power.c Thu Feb 27 11:47:28 2003 @@ -32,6 +32,7 @@ * 27-AUG-2002 Steve Lin for Discovery * 12-Dec-2002 Lineo Japan, Inc. * 12-Dec-2002 Sharp Corporation for Poodle and Corgi + * 16-Jan-2003 SHARP sleep_on -> interruptible_sleep_on * */ @@ -243,7 +244,12 @@ gplr = GPLR0; apm_wakeup_factor = PEDR & WAKEUP_SRC & apm_wakeup_src_mask; +#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) + apm_wakeup_factor &= ~0x80000000; /* clear ALARM */ + if ( ( RTSR & 0x1 ) && ( RTSR & RTSR_ALE ) ) +#else if ( RTSR & 0x1 ) +#endif apm_wakeup_factor |= 0x80000000; /* ALARM */ PEDR = WAKEUP_SRC; @@ -1193,10 +1199,12 @@ { int time_cnt = 0; + // daemonize(); strcpy(current->comm, "off_thread"); + sigfillset(¤t->blocked); while(1) { - sleep_on(&wq_off); + interruptible_sleep_on(&wq_off); DPRINTK("start off sequence ! \n"); sharpsl_off_mode = 1; diff -urN /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/sharpsl_suspend.S linux/arch/arm/mach-pxa/sharpsl_suspend.S --- /home/sakamoto/source-open/c700/linux/arch/arm/mach-pxa/sharpsl_suspend.S Tue Jan 14 12:07:55 2003 +++ linux/arch/arm/mach-pxa/sharpsl_suspend.S Thu Feb 27 11:47:28 2003 @@ -212,6 +212,7 @@ str r1, [r0, #UVIR_PWR_PCFR] #endif + #if defined(CONFIG_SABINAL_DISCOVERY) ldr r0, GPCRx mvn r1, #0 diff -urN /home/sakamoto/source-open/c700/linux/arch/arm/mm/proc-xscale.S linux/arch/arm/mm/proc-xscale.S --- /home/sakamoto/source-open/c700/linux/arch/arm/mm/proc-xscale.S Thu Oct 31 19:44:25 2002 +++ linux/arch/arm/mm/proc-xscale.S Thu Mar 20 17:04:02 2003 @@ -21,6 +21,8 @@ * * Change Log * 31-Jul-2002 Lineo Japan, Inc. for ARCH_PXA + * 16-Jan-2003 SHARP enable non-cached bufferable page + * 20-Mar-2003 SHARP supported PXA255 */ #include @@ -816,7 +818,8 @@ orreq r2, r2, #PTE_EXT_TEX(1) #if CACHE_WRITE_THROUGH - bic r2, r2, #L_PTE_BUFFERABLE + tst r1, #L_PTE_CACHEABLE + bicne r2, r2, #L_PTE_BUFFERABLE @ clear B only if C is set #else @ @ Errata 40: The B bit must be cleared for a user read-only @@ -900,11 +903,14 @@ cpu_80200_name: .asciz "XScale-80200" +cpu_pxa210_name: + .asciz "XScale-PXA210" + cpu_pxa250_name: .asciz "XScale-PXA250" -cpu_pxa210_name: - .asciz "XScale-PXA210" +cpu_pxa255_name: + .asciz "XScale-PXA255" .align @@ -989,21 +995,27 @@ .long cpu_80200_name .size cpu_80200_info, . - cpu_80200_info + .type cpu_pxa210_info, #object +cpu_pxa210_info: + .long cpu_manu_name + .long cpu_pxa210_name + .size cpu_pxa210_info, . - cpu_pxa210_info + .type cpu_pxa250_info, #object cpu_pxa250_info: .long cpu_manu_name .long cpu_pxa250_name .size cpu_pxa250_info, . - cpu_pxa250_info - .type cpu_pxa210_info, #object -cpu_pxa210_info: + .type cpu_pxa255_info, #object +cpu_pxa255_info: .long cpu_manu_name - .long cpu_pxa210_name - .size cpu_pxa210_info, . - cpu_pxa210_info + .long cpu_pxa255_name + .size cpu_pxa255_info, . - cpu_pxa255_info .type cpu_arch_name, #object cpu_arch_name: - .asciz "armv5" + .asciz "armv5te" .size cpu_arch_name, . - cpu_arch_name .type cpu_elf_name, #object @@ -1031,6 +1043,23 @@ .long xscale_processor_functions .size __80200_proc_info, . - __80200_proc_info + .type __pxa210_proc_info,#object +__pxa210_proc_info: + .long 0x69052920 + .long 0xfffffff0 +#if CACHE_WRITE_THROUGH + .long 0x00000c0a +#else + .long 0x00000c0e +#endif + b __xscale_setup + .long cpu_arch_name + .long cpu_elf_name + .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP + .long cpu_pxa210_info + .long xscale_processor_functions + .size __pxa210_proc_info, . - __pxa210_proc_info + .type __pxa250_proc_info,#object __pxa250_proc_info: .long 0x69052100 @@ -1048,10 +1077,10 @@ .long xscale_processor_functions .size __pxa250_proc_info, . - __pxa250_proc_info - .type __pxa210_proc_info,#object -__pxa210_proc_info: - .long 0x69052900 - .long 0xffffff00 + .type __pxa255_proc_info,#object +__pxa255_proc_info: + .long 0x69052d00 + .long 0xfffffff0 #if CACHE_WRITE_THROUGH .long 0x00000c0a #else @@ -1061,7 +1090,7 @@ .long cpu_arch_name .long cpu_elf_name .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP - .long cpu_pxa210_info + .long cpu_pxa255_info .long xscale_processor_functions - .size __pxa210_proc_info, . - __pxa210_proc_info + .size __pxa255_proc_info, . - __pxa255_proc_info diff -urN /home/sakamoto/source-open/c700/linux/drivers/block/Makefile linux/drivers/block/Makefile --- /home/sakamoto/source-open/c700/linux/drivers/block/Makefile Wed Jan 22 14:17:33 2003 +++ linux/drivers/block/Makefile Tue Jul 8 20:41:33 2003 @@ -30,6 +30,7 @@ obj-$(CONFIG_BLK_CPQ_CISS_DA) += cciss.o obj-$(CONFIG_BLK_DEV_DAC960) += DAC960.o + obj-$(CONFIG_BLK_DEV_NBD) += nbd.o subdir-$(CONFIG_PARIDE) += paride @@ -41,3 +42,4 @@ endif include $(TOPDIR)/Rules.make + diff -urN /home/sakamoto/source-open/c700/linux/drivers/char/ads7846_ts.c linux/drivers/char/ads7846_ts.c --- /home/sakamoto/source-open/c700/linux/drivers/char/ads7846_ts.c Tue Jan 14 12:07:55 2003 +++ linux/drivers/char/ads7846_ts.c Thu Feb 27 11:47:30 2003 @@ -1056,8 +1056,14 @@ res_y = 320; cal_ok = 1; + +#if defined(CONFIG_ARCH_SHARP_SL_J) x_rev = 1; y_rev = 0; +#else + x_rev = 0; + y_rev = 1; +#endif xyswap = 1; #else res_x = 240; diff -urN /home/sakamoto/source-open/c700/linux/drivers/char/cotulla-rtc.c linux/drivers/char/cotulla-rtc.c --- /home/sakamoto/source-open/c700/linux/drivers/char/cotulla-rtc.c Wed Dec 18 19:27:57 2002 +++ linux/drivers/char/cotulla-rtc.c Thu Jan 30 18:59:16 2003 @@ -19,6 +19,9 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. + * + * Change log: + * 16-Jan-2003 SHARP modify RTC_ALM_SET */ @@ -344,6 +347,37 @@ decodetime (RTAR, &tm); break; case RTC_ALM_SET: +#ifdef CONFIG_ARCH_SHARP_SL + { + struct rtc_time rtc_tm; + unsigned char mon, day, hrs, min, sec; + unsigned int yrs; + + if (copy_from_user(&rtc_tm, (struct rtc_time*)arg, + sizeof(struct rtc_time))) + return -EFAULT; + + yrs = rtc_tm.tm_year + 1900; + mon = rtc_tm.tm_mon + 1; /* tm_mon starts at zero */ + day = rtc_tm.tm_mday; + hrs = rtc_tm.tm_hour; + min = rtc_tm.tm_min; + sec = rtc_tm.tm_sec; + + if ((yrs < 1970) || (yrs > 2037)) + return -EINVAL; + if ((mon > 12) || (day == 0)) + return -EINVAL; + if (day > (days_in_mo[mon-1] + ((mon == 2) && is_leap(yrs)))) + return -EINVAL; + if ((hrs >= 24) || (min >= 60) || (sec >= 60)) + return -EINVAL; + + RTAR = mktime(yrs, mon, day, hrs, min, sec); + + return 0; + } +#else if (copy_from_user (&tm2, (struct rtc_time*)arg, sizeof (tm2))) return -EFAULT; decodetime (RCNR, &tm); @@ -356,6 +390,7 @@ RTAR = mktime ( tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); return 0; +#endif case RTC_RD_TIME: decodetime (RCNR, &tm); break; diff -urN /home/sakamoto/source-open/c700/linux/drivers/char/pcmcia/serial_cs.c linux/drivers/char/pcmcia/serial_cs.c --- /home/sakamoto/source-open/c700/linux/drivers/char/pcmcia/serial_cs.c Mon Aug 26 14:38:38 2002 +++ linux/drivers/char/pcmcia/serial_cs.c Thu Feb 27 13:28:45 2003 @@ -29,6 +29,9 @@ the provisions above, a recipient may use your version of this file under either the MPL or the GPL. + Change Log + 07-Feb-2003 Sharp Corporation + ======================================================================*/ #include @@ -487,7 +490,7 @@ int i, last_ret, last_fn; DEBUG(0, "serial_config(0x%p)\n", link); - + tuple.TupleData = (cisdata_t *)buf; tuple.TupleOffset = 0; tuple.TupleDataMax = 255; tuple.Attributes = 0; @@ -495,8 +498,30 @@ tuple.DesiredTuple = CISTPL_CONFIG; last_ret = first_tuple(handle, &tuple, &parse); if (last_ret != CS_SUCCESS) { +#ifdef CONFIG_ARCH_SHARP_SL + /* Retry for 1 sec. */ + for( i=0; i<20; i++ ){ + /* Report error (clear cis cache) */ + cs_error(link->handle, ParseTuple, last_ret); + current->state = TASK_INTERRUPTIBLE; + schedule_timeout((5 * HZ)/100); + + tuple.TupleData = (cisdata_t *)buf; + tuple.TupleOffset = 0; tuple.TupleDataMax = 255; + tuple.Attributes = 0; + /* Get configuration register information */ + tuple.DesiredTuple = CISTPL_CONFIG; + last_ret = first_tuple(handle, &tuple, &parse); + if (last_ret == CS_SUCCESS) break; + } + if (last_ret != CS_SUCCESS) { + last_fn = ParseTuple; + goto cs_failed; + } +#else last_fn = ParseTuple; goto cs_failed; +#endif } link->conf.ConfigBase = parse.config.base; link->conf.Present = parse.config.rmask[0]; @@ -529,6 +554,32 @@ (parse.funcid.func == CISTPL_FUNCID_MULTI) || (parse.funcid.func == CISTPL_FUNCID_SERIAL))) { tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; +#ifdef CONFIG_ARCH_SHARP_SL + { + int ret; + + ret = first_tuple(handle, &tuple, &parse); + if(ret == CS_BAD_TUPLE){ + /* Retry for 3 times */ + for( i=0; i<3; i++ ){ + /* Report error (clear cis cache) */ + cs_error(link->handle, ParseTuple, ret); + current->state = TASK_INTERRUPTIBLE; + schedule_timeout((5 * HZ)/100); + + ret = first_tuple(handle, &tuple, &parse); + if(ret != CS_BAD_TUPLE) break; + } + } + if (ret == CS_SUCCESS) { + if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0)) + info->multi = cf->io.win[0].len >> 3; + if ((cf->io.nwin == 2) && (cf->io.win[0].len == 8) && + (cf->io.win[1].len == 8)) + info->multi = 2; + } + } +#else if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) { if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0)) info->multi = cf->io.win[0].len >> 3; @@ -536,6 +587,7 @@ (cf->io.win[1].len == 8)) info->multi = 2; } +#endif } if (info->multi > 1) diff -urN /home/sakamoto/source-open/c700/linux/drivers/char/serial_pxa200.c linux/drivers/char/serial_pxa200.c --- /home/sakamoto/source-open/c700/linux/drivers/char/serial_pxa200.c Tue Jan 14 12:07:55 2003 +++ linux/drivers/char/serial_pxa200.c Wed Jan 29 16:14:45 2003 @@ -59,7 +59,7 @@ * * Change Log * 12-Dec-2002 Sharp Corporation for Poodle and Corgi - */ + */ static char *serial_version = "5.05c"; static char *serial_revdate = "2001-07-08"; @@ -414,6 +414,10 @@ #define CONFIG_DISCOVERY_DVT +#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) +#define CONFIG_SHARPSL_PXA +#endif + #include #define xpa2X0_is_ff_uart(iomem) ((iomem) == (void *)&FFUART) @@ -529,8 +533,28 @@ #endif case SERIAL_IO_MEM: #if defined(CONFIG_ARCH_SHARP_SL) + +#ifdef CONFIG_SHARPSL_PXA + { + unsigned int read; + + read = readl((unsigned long) info->iomem_base + (offset<iomem_reg_shift)); + if ( offset == UART_MSR ) { + if ( read & UART_MSR_CTS ) + read &= ~UART_MSR_CTS; + else + read |= UART_MSR_CTS; + if ( read & UART_MSR_DSR ) + read &= ~UART_MSR_DSR; + else + read |= UART_MSR_DSR; + } + return read; + } +#else return readl((unsigned long) info->iomem_base + (offset<iomem_reg_shift)); +#endif #else return readb((unsigned long) info->iomem_base + (offset<iomem_reg_shift)); @@ -560,8 +584,23 @@ #endif case SERIAL_IO_MEM: #if defined(CONFIG_ARCH_SHARP_SL) + +#ifdef CONFIG_SHARPSL_PXA + if ( offset == UART_MCR ) { + if ( value & UART_MCR_RTS ) + value &= ~UART_MCR_RTS; + else + value |= UART_MCR_RTS; + + if ( value & UART_MCR_DTR ) + value &= ~UART_MCR_DTR; + else + value |= UART_MCR_DTR; + } +#endif writel(value, (unsigned long) info->iomem_base + (offset<iomem_reg_shift)); + #else writeb(value, (unsigned long) info->iomem_base + (offset<iomem_reg_shift)); @@ -1095,7 +1134,7 @@ } if (info->flags & ASYNC_CTS_FLOW) { if (info->tty->hw_stopped) { -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) // if (!(status & UART_MSR_CTS)) { if( !(status & UART_MSR_CTS) ^ !(info->io_type == SERIAL_IO_MEM) ){ @@ -1112,7 +1151,7 @@ return; } } else { -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) // if (status & UART_MSR_CTS) { if( !(status & UART_MSR_CTS) ^ (info->io_type == SERIAL_IO_MEM) ){ @@ -1775,7 +1814,7 @@ info->MCR = 0; if (info->tty->termios->c_cflag & CBAUD) -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) {if(info->io_type == SERIAL_IO_MEM) info->MCR = UART_MCR_DTR & ~(UART_MCR_RTS); else info->MCR = UART_MCR_DTR | UART_MCR_RTS;} @@ -1971,7 +2010,7 @@ serial_out(info, UART_LCR, serial_inp(info, UART_LCR) & ~UART_LCR_SBC); if (!info->tty || (info->tty->termios->c_cflag & HUPCL)) -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) {if(info->io_type == SERIAL_IO_MEM){ info->MCR &= ~(UART_MCR_DTR); info->MCR |= (UART_MCR_RTS); @@ -2518,7 +2557,7 @@ rs_send_xchar(tty, STOP_CHAR(tty)); if (tty->termios->c_cflag & CRTSCTS) -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) {if(info->io_type == SERIAL_IO_MEM) info->MCR |= UART_MCR_RTS; else info->MCR &= ~UART_MCR_RTS;} @@ -2552,7 +2591,7 @@ rs_send_xchar(tty, START_CHAR(tty)); } if (tty->termios->c_cflag & CRTSCTS) -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) {if(info->io_type == SERIAL_IO_MEM) info->MCR &= ~(UART_MCR_RTS); else info->MCR |= UART_MCR_RTS;} @@ -2796,7 +2835,7 @@ restore_flags(flags); if(info->io_type == SERIAL_IO_MEM){ -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) result = (!(control & UART_MCR_RTS) ? TIOCM_RTS : 0) #else result = ((control & UART_MCR_RTS) ? TIOCM_RTS : 0) @@ -2813,7 +2852,7 @@ | ((status & UART_MSR_DCD) ? TIOCM_CAR : 0) | ((status & UART_MSR_RI) ? TIOCM_RNG : 0) | ((status & UART_MSR_DSR) ? TIOCM_DSR : 0) -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) | (!(status & UART_MSR_CTS) ? TIOCM_CTS : 0); #else | ((status & UART_MSR_CTS) ? TIOCM_CTS : 0); @@ -2851,7 +2890,7 @@ if (arg & TIOCM_RTS) { if(info->io_type == SERIAL_IO_MEM){ if (!xpa2X0_is_st_uart(info->iomem_base)) -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) info->MCR &= ~(UART_MCR_RTS); #else info->MCR |= UART_MCR_RTS; @@ -2881,7 +2920,7 @@ if (arg & TIOCM_RTS) {if(info->io_type == SERIAL_IO_MEM){ if (!xpa2X0_is_st_uart(info->iomem_base)) -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) info->MCR |= UART_MCR_RTS; #else info->MCR &= ~UART_MCR_RTS; @@ -2908,7 +2947,7 @@ break; case TIOCMSET: if(info->io_type == SERIAL_IO_MEM){ -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) info->MCR = ((info->MCR | UART_MCR_RTS & ~( #else info->MCR = ((info->MCR & ~(UART_MCR_RTS | @@ -2924,7 +2963,7 @@ #endif UART_MCR_LOOP | UART_MCR_DTR)) -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) | ((arg & TIOCM_RTS) ? (info->MCR & ~(UART_MCR_RTS)) : ( 0 | UART_MCR_RTS ) ) #else | ((arg & TIOCM_RTS) ? UART_MCR_RTS : 0) @@ -3328,7 +3367,7 @@ /* Handle transition to B0 status */ if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD)) { -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) info->MCR &= ~(UART_MCR_DTR); info->MCR |= (UART_MCR_RTS); #else @@ -3345,7 +3384,7 @@ info->MCR |= UART_MCR_DTR; if (!(tty->termios->c_cflag & CRTSCTS) || !test_bit(TTY_THROTTLED, &tty->flags)) { -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) info->MCR &= ~UART_MCR_RTS; #else info->MCR |= UART_MCR_RTS; @@ -3694,7 +3733,7 @@ (tty->termios->c_cflag & CBAUD)) serial_out(info, UART_MCR, serial_inp(info, UART_MCR) | -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) ( (info->io_type == SERIAL_IO_MEM) ? ((UART_MCR_DTR) & ~(UART_MCR_RTS)): ((UART_MCR_DTR | UART_MCR_RTS)) @@ -3867,6 +3906,14 @@ #endif } +#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) + xpa210_discovery_serial_power_on(); + if (xpa2X0_is_ff_uart(info->iomem_base)) { + CKEN |= CKEN6_FFUART; + if ( !change_power_mode(LOCK_FCS_FFUART, 1) ) return -EAGAIN; + } +#endif + /* * Start up serial port */ @@ -3904,7 +3951,7 @@ info->session = current->session; info->pgrp = current->pgrp; -#if (defined(CONFIG_SABINAL_DISCOVERY) && (CONFIG_DISCOVERY_EVT2)) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) +#if (defined(CONFIG_SABINAL_DISCOVERY) && (CONFIG_DISCOVERY_EVT2)) xpa210_discovery_serial_power_on(); if (xpa2X0_is_ff_uart(info->iomem_base)) { CKEN |= CKEN6_FFUART; @@ -3975,13 +4022,13 @@ stat_buf[0] = 0; stat_buf[1] = 0; -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) if (!(control & UART_MCR_RTS)) #else if (control & UART_MCR_RTS) #endif strcat(stat_buf, "|RTS"); -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) if (!(status & UART_MSR_CTS)) #else if (status & UART_MSR_CTS) @@ -4163,6 +4210,7 @@ irqs = probe_irq_on(); serial_outp(&scr_info, UART_MCR, 0); udelay (10); +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) if (state->flags & ASYNC_FOURPORT) { if( scr_info.io_type == SERIAL_IO_MEM ) serial_outp(&scr_info, UART_MCR, @@ -4199,6 +4247,15 @@ else serial_outp(&scr_info, UART_MCR, UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2); } +#else + if (state->flags & ASYNC_FOURPORT) { + serial_outp(&scr_info, UART_MCR, + UART_MCR_DTR | UART_MCR_RTS); + } else { + serial_outp(&scr_info, UART_MCR, + UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2); + } +#endif serial_outp(&scr_info, UART_IER, 0x0f); /* enable all intrs */ (void)serial_inp(&scr_info, UART_LSR); (void)serial_inp(&scr_info, UART_RX); @@ -6663,7 +6720,7 @@ if (info->flags & ASYNC_CONS_FLOW) { tmout = 1000000; while (--tmout && -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) ((serial_in(info, UART_MSR) & UART_MSR_CTS) == 1)); #else ((serial_in(info, UART_MSR) & UART_MSR_CTS) == 0)); @@ -6892,7 +6949,7 @@ #else serial_out(info, UART_IER, 0); #endif -#ifdef CONFIG_DISCOVERY_DVT +#if defined(CONFIG_DISCOVERY_DVT) && !defined(CONFIG_SHARPSL_PXA) serial_out(info, UART_MCR, UART_MCR_DTR & ~(UART_MCR_RTS)); #else serial_out(info, UART_MCR, UART_MCR_DTR | UART_MCR_RTS); diff -urN /home/sakamoto/source-open/c700/linux/drivers/pcmcia/cs.c linux/drivers/pcmcia/cs.c --- /home/sakamoto/source-open/c700/linux/drivers/pcmcia/cs.c Tue Jan 14 12:07:55 2003 +++ linux/drivers/pcmcia/cs.c Thu Feb 27 13:28:33 2003 @@ -34,7 +34,8 @@ 06-13-2002 Richard Rau 30-Jul-2002 Lineo Japan, Inc. for 2.4.18 12-Dec-2002 Sharp Corporation for Poodle and Corgi - + 07-Feb-2003 Sharp Corporation + ======================================================================*/ #include @@ -2393,6 +2394,18 @@ printk("%s: %s\n", serv, error_table[i].msg); else printk("%s: Unknown error code %#x\n", serv, err->retcode); +#ifdef CONFIG_ARCH_SHARP_SL + /* for P-in m@ster */ + if(( err->func == ParseTuple )&&( err->retcode != CS_SUCCESS )){ + /* clear cis cache here... */ + if (!CHECK_HANDLE(handle)){ + socket_info_t *s; + + s = SOCKET(handle); + s->cis_used = 0; + } + } +#endif return CS_SUCCESS; } /* report_error */ diff -urN /home/sakamoto/source-open/c700/linux/drivers/sound/pxa-i2s.c linux/drivers/sound/pxa-i2s.c --- /home/sakamoto/source-open/c700/linux/drivers/sound/pxa-i2s.c Fri Dec 6 23:23:33 2002 +++ linux/drivers/sound/pxa-i2s.c Thu Jan 30 18:59:16 2003 @@ -20,6 +20,7 @@ * GNU General Public License for more details. * * Change Log + * 16-Jan-2003 SHARP sleep_on -> interruptible_sleep_on * */ #include @@ -1963,11 +1964,13 @@ int state; audio_state_t *audio_state = &pxa_audio_state; + // daemonize(); strcpy(current->comm, "snd_hp"); + sigfillset(¤t->blocked); while(1) { - sleep_on(&hp_proc); + interruptible_sleep_on(&hp_proc); isChkHPstatus = 1; diff -urN /home/sakamoto/source-open/c700/linux/drivers/sound/pxa-i2s_corgi.c linux/drivers/sound/pxa-i2s_corgi.c --- /home/sakamoto/source-open/c700/linux/drivers/sound/pxa-i2s_corgi.c Fri Dec 6 23:23:33 2002 +++ linux/drivers/sound/pxa-i2s_corgi.c Thu Jan 30 18:59:16 2003 @@ -20,6 +20,7 @@ * GNU General Public License for more details. * * Change Log + * 16-Jan-2003 SHARP sleep_on -> interruptible_sleep_on * */ #include @@ -2098,12 +2099,14 @@ int state; audio_state_t *audio_state = &pxa_audio_state; + // daemonize(); strcpy(current->comm, "snd_hp"); + sigfillset(¤t->blocked); while(1) { isChkHPstatus = 0; - sleep_on(&hp_proc); + interruptible_sleep_on(&hp_proc); isChkHPstatus = 1; diff -urN /home/sakamoto/source-open/c700/linux/drivers/video/poodleLogoMsg.c linux/drivers/video/poodleLogoMsg.c --- /home/sakamoto/source-open/c700/linux/drivers/video/poodleLogoMsg.c Wed Dec 4 11:40:12 2002 +++ linux/drivers/video/poodleLogoMsg.c Wed Jan 29 14:45:03 2003 @@ -21,212 +21,212 @@ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x8c51,0xffff,0xffff,0xbdd7,0x4228,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x8c51,0xffff,0xffff,0xbdd7,0x4228,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x632c,0xffff,0xffff,0x9cd3,0x52aa,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x31a6,0x31a6,0x4228,0x1082,0xce79,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xef7d,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xce79,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x7bcf,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xbdd7,0x7bcf,0x4228,0x4228,0x632c,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xad55,0x1082,0x8c51,0x8c51,0x31a6,0x8c51,0x31a6,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x4228,0xad55,0xffff,0xbdd7,0x4228,0xffff,0xef7d,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x632c,0x7bcf,0xffff,0xbdd7,0x4228,0xffff,0x9cd3,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xef7d,0x632c,0x4228,0xbdd7,0x0000,0x0000,0x2104,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xbdd7,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x1082,0x31a6,0x31a6,0xef7d,0xbdd7,0x2104,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x8c51,0xffff,0x8c51,0x632c,0xffff,0x8c51,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xce79,0x2104,0xffff,0xef7d,0x1082,0xef7d,0xad55,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0x7bcf,0x52aa,0xffff,0xce79,0x52aa,0x632c,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x31a6,0xce79,0xffff,0x31a6,0xad55,0x632c,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x7bcf,0xffff,0x9cd3,0x8c51,0xffff,0xad55,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0x1082,0x4228,0x31a6,0xffff,0xce79,0x1082,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xef7d,0xbdd7,0xffff,0xffff,0xef7d,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xbdd7,0xbdd7,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xef7d,0x4228,0x1082,0x31a6,0x1082,0x1082,0x2104,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x632c,0x632c,0xffff,0xbdd7,0x4228,0xffff,0x9cd3,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x4228,0xad55,0xffff,0xbdd7,0x4228,0xffff,0xef7d,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xad55,0x2104,0x9cd3,0xbdd7,0x2104,0x8c51,0x31a6,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xdefb,0x9cd3,0xce79,0x4228,0x632c,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0x7bcf,0x31a6,0x0000,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x4228,0x0000,0x4228,0x8c51,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x632c,0x2104,0x2104,0x632c,0x9cd3,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x8c51,0x2104,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0x9cd3,0x632c,0x2104,0x31a6,0x7bcf,0xad55,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x1082,0x0000,0x7bcf,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0x8c51,0x4228,0x0000,0x4228,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xad55,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0x9cd3,0x8c51,0xdefb,0xffff,0xef7d,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x31a6,0x7bcf,0x2104,0xce79,0xce79,0x1082,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x7bcf,0xffff,0x9cd3,0x4228,0xffff,0xad55,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0x1082,0xbdd7,0xbdd7,0x1082,0xad55,0x8c51,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x4228,0x4228,0x4228,0x4228,0x4228,0x632c,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0x8c51,0x4228,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xce79,0x4228,0x4228,0x4228,0x4228,0x4228,0x31a6,0x1082,0x4228,0x7bcf,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x8c51,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0x8c51,0x31a6,0xbdd7,0xce79,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x4228,0x4228,0x4228,0x4228,0x4228,0x31a6,0x1082,0x4228,0xbdd7,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0x8c51,0x31a6,0xad55,0x4228,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xdefb,0x7bcf,0x4228,0x4228,0x632c,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0x2104,0x8c51,0xbdd7,0xbdd7,0x8c51,0x1082,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xad55,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x4228,0xef7d,0xffff,0xffff,0xffff,0x632c,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0x7bcf,0x1082,0x4228,0x4228,0x1082,0x4228,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x1082,0x31a6,0x31a6,0xef7d,0xbdd7,0x2104,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x8c51,0xffff,0x8c51,0x632c,0xffff,0x8c51,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xce79,0x2104,0xffff,0xef7d,0x1082,0xef7d,0xad55,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0x9cd3,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xdefb,0xad55,0x2104,0x7bcf,0xbdd7,0xbdd7,0x9cd3,0x2104,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xad55,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x31a6,0xef7d,0xffff,0xffff,0xffff,0x7bcf,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0x7bcf,0x0000,0x4228,0x4228,0x1082,0x4228,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xbdd7,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xbdd7,0x8c51,0x1082,0x31a6,0x8c51,0x8c51,0x632c,0x0000,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x632c,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x52aa,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xef7d,0x31a6,0x31a6,0x8c51,0x8c51,0x52aa,0x1082,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0x8c51,0x8c51,0x9cd3,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xbdd7,0xbdd7,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0x7bcf,0x1082,0x4228,0x4228,0x1082,0x4228,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x4228,0xef7d,0xffff,0xffff,0xffff,0x632c,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xad55,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0x2104,0x8c51,0xbdd7,0xbdd7,0x8c51,0x1082,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xdefb,0x8c51,0x4228,0x4228,0x7bcf,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x4228,0xbdd7,0xffff,0xffff,0xffff,0x9cd3,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xbdd7,0x4228,0x52aa,0xad55,0x4228,0x4228,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x31a6,0x0000,0x52aa,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xef7d,0x8c51,0x2104,0x9cd3,0xef7d,0x8c51,0x2104,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x8c51,0xef7d,0xffff,0xffff,0xffff,0xef7d,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0x8c51,0x4228,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x4228,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x52aa,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x31a6,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x4228,0x4228,0x4228,0x4228,0x4228,0x2104,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x1082,0x31a6,0x31a6,0xef7d,0xbdd7,0x2104,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x8c51,0xffff,0x8c51,0x632c,0xffff,0x8c51,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xce79,0x2104,0xffff,0xef7d,0x1082,0xef7d,0xad55,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xad55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xbdd7,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xbdd7,0x7bcf,0x4228,0x4228,0x632c,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xad55,0x1082,0x8c51,0x8c51,0x31a6,0x8c51,0x31a6,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x4228,0xad55,0xffff,0xbdd7,0x4228,0xffff,0xef7d,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x632c,0x7bcf,0xffff,0xbdd7,0x4228,0xffff,0x9cd3,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xef7d,0x632c,0x4228,0xbdd7,0x0000,0x0000,0x2104,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xbdd7,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xce79,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x7bcf,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xce79,0xef7d,0xffff,0xffff,0xffff,0xdefb,0x8c51,0x31a6,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0x4228,0xad55,0xce79,0x8c51,0x31a6,0x31a6,0x8c51,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xad55,0x1082,0x0000,0x52aa,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xef7d,0x8c51,0x52aa,0x0000,0x52aa,0x9cd3,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xad55,0x632c,0x2104,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xbdd7,0x52aa,0x9cd3,0xffff,0xffff,0xdefb,0x8c51,0xce79,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x1082,0x8c51,0xdefb,0xffff,0xffff,0xdefb,0x8c51,0x1082,0xad55,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x8c51,0xffff,0xffff,0xbdd7,0x4228,0xffff,0xffff,0xad55,0x4228,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x52aa,0xffff,0xffff,0x8c51,0x2104,0xef7d,0xffff,0x9cd3,0x52aa,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xef7d,0x4228,0x31a6,0x31a6,0x31a6,0x8c51,0x2104,0x4228,0x1082,0xce79,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0xbdd7,0xffff,0xffff,0xdefb,0xbdd7,0xef7d,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad55,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0x8c51,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x4228,0x4228,0x4228,0x4228,0x4228,0x52aa,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x7bcf,0x9cd3,0x7bcf,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xce79,0xdefb,0xce79,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x9cd3,0x4228,0x4228,0x4228,0x4228,0x4228,0x0000,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xef7d,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xce79,0x1082,0x31a6,0x4228,0x4228,0x4228,0x4228,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x4228,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xef7d,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x632c,0x2104,0x8c51,0x9cd3,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x52aa,0x8c51,0x8c51,0x8c51,0x8c51,0x632c,0x2104,0x8c51,0x9cd3,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xef7d,0xffff,0xffff,0xffff,0xffff,0xdefb,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xef7d,0xad55,0x8c51,0x8c51,0x9cd3,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xce79,0x1082,0x52aa,0x632c,0x2104,0x52aa,0x1082,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x52aa,0x8c51,0xffff,0xbdd7,0x4228,0xffff,0xce79,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x52aa,0x9cd3,0xffff,0xbdd7,0x4228,0xffff,0xce79,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xce79,0x2104,0x7bcf,0xbdd7,0x1082,0x4228,0x1082,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0xdefb,0x8c51,0x9cd3,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xef7d,0x31a6,0x4228,0xffff,0x9cd3,0x1082,0x2104,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x52aa,0xffff,0xef7d,0x31a6,0xef7d,0x8c51,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x52aa,0xffff,0x7bcf,0xad55,0xffff,0x8c51,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xef7d,0x4228,0x0000,0x7bcf,0xffff,0xbdd7,0x1082,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x8c51,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x8c51,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xbdd7,0x8c51,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0x8c51,0x0000,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, - 0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0xbdd7,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0xbdd7,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0xbdd7,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x3186,0xbdd7,0x73ae,0x4228,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x4228,0x632c,0xef7d,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xef7d,0x8c51,0x4228,0x4228,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x632c,0x52aa,0x8c51,0x3186,0x632c,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xef7d,0xbdd7,0x4228,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x1082,0xce79,0xbdd7,0x4228,0xce79,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x9cd3,0x2104,0xbdd7,0x1082,0x2104,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xef7d,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xdefb,0x8c51,0xbdd7,0xffff,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x2104,0x632c,0x1082,0xdefb,0x2104,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xffff,0x73ae,0x8c51,0xef7d,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0xbdd7,0x8c51,0x73ae,0xef7d,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x1082,0x3186,0x1082,0x2104,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x9cd3,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xef7d,0xad55,0xffff,0xef7d,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x52aa,0xef7d,0x1082,0x3186,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xef7d,0x9cd3,0x3186,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x1082,0xce79,0x4228,0x8c51,0x9cd3,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x9cd3,0x1082,0x2104,0xef7d,0x8c51,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xce79,0x52aa,0x0000,0x0000,0x52aa,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x8c51,0xbdd7,0x4228,0x9cd3,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xffff,0xbdd7,0x4228,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x2104,0x9cd3,0xbdd7,0x4228,0x9cd3,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xce79,0x4228,0xbdd7,0x0000,0x52aa,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0x73ae,0x1082,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x73ae,0x2104,0x4228,0x8c51,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x3186,0x3186,0x73ae,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x9cd3,0x632c,0x2104,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xef7d,0x9cd3,0x632c,0x2104,0x3186,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0x3186,0x9cd3,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xbdd7,0x632c,0x1082,0x52aa,0x9cd3,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad55,0x52aa,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xad55,0x4228,0x8c51,0xffff,0xad55,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x1082,0x9cd3,0x2104,0xce79,0x4228,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xffff,0x8c51,0x8c51,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x73ae,0x8c51,0x9cd3,0x632c,0xce79,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x1082,0x0000,0x0000,0x0000,0x0000,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x9cd3,0xffff,0x8c51,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x9cd3,0xffff,0x8c51,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x73ae,0x4228,0x4228,0x4228,0x3186,0x1082,0x4228,0xad55,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xbdd7,0xbdd7,0xbdd7,0x8c51,0x3186,0xbdd7,0xce79,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x4228,0x4228,0x4228,0x3186,0x1082,0x4228,0x9cd3,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0x8c51,0x3186,0xad55,0x0000,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xef7d,0xce79,0xffff,0x4228,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xad55,0x1082,0x4228,0x4228,0x1082,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x2104,0xbdd7,0xffff,0xffff,0xbdd7,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xef7d,0xffff,0xffff,0xef7d,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x632c,0x52aa,0xbdd7,0xbdd7,0x52aa,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xef7d,0x8c51,0x4228,0x4228,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x4228,0x4228,0x4228,0x4228,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0x632c,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x3186,0x1082,0xef7d,0x3186,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xef7d,0x632c,0x9cd3,0xbdd7,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x2104,0xdefb,0x8c51,0x8c51,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x632c,0x3186,0x632c,0x2104,0x52aa,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x632c,0x8c51,0x8c51,0x8c51,0x8c51,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xbdd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x73ae,0x8c51,0xffff,0xef7d,0x73ae,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x8c51,0xffff,0xffff,0x8c51,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xef7d,0x52aa,0x0000,0x0000,0x52aa,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xce79,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xef7d,0xbdd7,0xbdd7,0x632c,0x52aa,0xbdd7,0xad55,0x4228,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x1082,0xef7d,0xffff,0xffff,0xef7d,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x2104,0xbdd7,0xffff,0xffff,0xbdd7,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xce79,0x1082,0x4228,0x4228,0x1082,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x4228,0x4228,0x4228,0x4228,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0x632c,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xef7d,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xad55,0x1082,0x4228,0x4228,0x1082,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x2104,0xbdd7,0xffff,0xffff,0xbdd7,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xef7d,0xffff,0xffff,0xef7d,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x632c,0x52aa,0xbdd7,0xbdd7,0x52aa,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xef7d,0x8c51,0x4228,0x4228,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x3186,0x632c,0xef7d,0xef7d,0x632c,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0x73ae,0x2104,0x2104,0x73ae,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x1082,0x1082,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x52aa,0xef7d,0xef7d,0x4228,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0xffff,0xffff,0xffff,0xffff,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x9cd3,0xffff,0x8c51,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x9cd3,0xffff,0x8c51,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0x8c51,0x8c51,0x8c51,0x52aa,0x3186,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0x8c51,0x8c51,0x8c51,0x2104,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0x0000,0x4228,0xffff,0x73ae,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xdefb,0x4228,0xad55,0x8c51,0x3186,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x1082,0xef7d,0x8c51,0x8c51,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x73ae,0x632c,0x8c51,0x4228,0x8c51,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x2104,0x4228,0x4228,0x4228,0x4228,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xad55,0x8c51,0x8c51,0x8c51,0x632c,0x2104,0x8c51,0xce79,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0x8c51,0x8c51,0x8c51,0x632c,0x2104,0x8c51,0xad55,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x9cd3,0xffff,0xffff,0xffff,0xef7d,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xce79,0x52aa,0x0000,0x0000,0x52aa,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x8c51,0xbdd7,0x4228,0x9cd3,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xffff,0xbdd7,0x4228,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x2104,0x9cd3,0xbdd7,0x4228,0x9cd3,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xce79,0x4228,0xbdd7,0x0000,0x52aa,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0x8c51,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xbdd7,0x3186,0xffff,0xffff,0xef7d,0x8c51,0x2104,0x3186,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xef7d,0x3186,0x4228,0x632c,0x0000,0x632c,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0x9cd3,0x52aa,0x2104,0x632c,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x9cd3,0x3186,0x1082,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x1082,0xad55,0xffff,0xffff,0xffff,0xbdd7,0x632c,0xef7d,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0x3186,0x9cd3,0xffff,0xffff,0xdefb,0x632c,0x4228,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xef7d,0x3186,0x9cd3,0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xffff,0xef7d,0x3186,0x8c51,0xffff,0xad55,0x2104,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0xef7d,0x632c,0x0000,0x2104,0xce79,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x4228,0x4228,0x4228,0x0000,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x4228,0x4228,0x4228,0x2104,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0x52aa,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0x8c51,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x4228,0x4228,0x4228,0x4228,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xce79,0xffff,0xbdd7,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x4228,0x4228,0x4228,0x4228,0x73ae,0xffff,0x4228,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x4228,0x4228,0x4228,0x4228,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0x52aa,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xbdd7,0xbdd7,0xbdd7,0xbdd7,0x8c51,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x4228,0x4228,0x4228,0x52aa,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xdefb,0x8c51,0x8c51,0x8c51,0x8c51,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x52aa,0x8c51,0x8c51,0x8c51,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xdefb,0xbdd7,0xbdd7,0xbdd7,0x8c51,0x3186,0xbdd7,0xef7d,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x1082,0x4228,0x4228,0x4228,0x3186,0x1082,0x4228,0x8c51,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x632c,0xffff,0xffff,0xffff,0xdefb,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xef7d,0x8c51,0x4228,0x4228,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x632c,0x52aa,0x8c51,0x3186,0x632c,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xef7d,0xbdd7,0x4228,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x1082,0xce79,0xbdd7,0x4228,0xce79,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x9cd3,0x2104,0xbdd7,0x1082,0x2104,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xef7d,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xef7d,0xad55,0xffff,0xef7d,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x4228,0x52aa,0xef7d,0x1082,0x3186,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x0000,0xef7d,0x9cd3,0x3186,0xffff,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x1082,0xce79,0x4228,0x8c51,0x9cd3,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x9cd3,0x1082,0x2104,0xef7d,0x8c51,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, + 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, diff -urN /home/sakamoto/source-open/c700/linux/drivers/video/w100fb.c linux/drivers/video/w100fb.c --- /home/sakamoto/source-open/c700/linux/drivers/video/w100fb.c Wed Jan 22 14:03:57 2003 +++ linux/drivers/video/w100fb.c Thu Mar 20 08:55:05 2003 @@ -19,7 +19,8 @@ * drivers/video/skeletonfb.c * * ChangeLog: - * + * 28-02-2003 SHARP supported VRAM image cache for ver.1.3 + * 19-03-2003 SHARP disabled VRAM image cache for ver.1.3 */ // define this here because unistd.h needs it @@ -55,6 +56,8 @@ #include "w100fb.h" #include +//#define _IMAGE_CACHE_SUPPORT // for image cache on video memory + #ifdef CONFIG_PM #include static struct pm_dev *w100_pm_dev; @@ -94,7 +97,11 @@ #define W100_PHYS_ADDRESS 0x08000000 #define W100_REG_BASE (W100_PHYS_ADDRESS+REG_OFFSET) #define W100_FB_BASE (W100_PHYS_ADDRESS+MEM_EXT_BASE_VALUE) +#ifdef _IMAGE_CACHE_SUPPORT +#define REMAPPED_FB_LEN 0x200000 +#else //_IMAGE_CACHE_SUPPORT #define REMAPPED_FB_LEN 0x15ffff +#endif //_IMAGE_CACHE_SUPPORT #define REMAPPED_CFG_LEN 0x10 #define REMAPPED_MMR_LEN 0x2000 #define W100_PHYS_ADR_LEN 0x1000000 @@ -112,6 +119,7 @@ #define W100INIT_ITEM_WITH_VAL 2 #define W100FB_POWERDOWN 0x57415201 /* WAL\01 */ +#define W100FB_CONFIG_EX 0x57415202 /* WAL\02 */ // General frame buffer data structures struct w100fb_info { @@ -175,11 +183,37 @@ static u16 *gSaveImagePtr[640] = {NULL}; #define SAVE_IMAGE_MAX_SIZE ((640 * 480 * BITS_PER_PIXEL) / 8) +#ifdef _IMAGE_CACHE_SUPPORT // for image cache on video memory + +#define IMG_CACHE_MALLOC_SIZE 0x1000 +#define IMG_CACHE_OFFSET_VGA (0x97008) +#define IMG_CACHE_TOTAL_SIZE_VGA (0x200000-0x4000-IMG_CACHE_OFFSET_VGA) +#define IMG_CACHE_SKIP_MARK (0xffffffff) + +static u32 *save_img_cache_ptr=NULL; +static u32 save_img_alloc_num=0; +#define __PRINTK(arg...) //printk(arg) +#undef __SUM //for debug + +static u32* save_image_cache(u32 *alloc_num); +static int restore_image_cache(u32 *img_src,u32 alloc_num); +static int cleanup_image_cache(u32 *img_src,u32 alloc_num); + +// defalut don't skip +static int start_skip_save_image_no = (-1); +static int end_skip_save_image_no = (-1); +#endif //_IMAGE_CACHE_SUPPORT + int w100fb_isblank = 0; static int fb_blank_normal = 0; static int isSuspended_tg_only = 0; +#if defined(CONFIG_ARCH_SHARP_SL) +// checking in mm/omm_kill.c +int disable_signal_to_mm = 0; +#endif + int w100fb_init(void); int w100fb_setup(char*); static int w100_encode_var(struct fb_var_screeninfo *var, @@ -755,6 +789,25 @@ temp32 |= 0x00800000; writel(temp32, remapped_regs+mmDISP_DEBUG2); +#ifdef _IMAGE_CACHE_SUPPORT // FOR RESOLUTION CHANGE + // VGA only + if(LCD_MODE_480 == w100fb_lcdMode){ + __PRINTK("RESOLUTION CHANGE: save image cache ... "); + + if(save_img_cache_ptr || save_img_alloc_num){ + __PRINTK("ERROR!\n"); + }else{ + save_img_cache_ptr = save_image_cache(&save_img_alloc_num); + + if(save_img_cache_ptr && save_img_alloc_num){ + __PRINTK("SUCCESS!\n"); + }else{ + __PRINTK("ERROR!!\n"); + } + } + } +#endif //_IMAGE_CACHE_SUPPORT + switch(w100fb_lcdMode){ case LCD_MODE_480: if(current_par.xres == 320 && current_par.yres == 240){ @@ -798,7 +851,7 @@ w100_clear_screen(LCD_SHARP_QVGA,NULL); writel(0xBFFFA000, remapped_regs+mmMC_EXT_MEM_LOCATION); w100_InitExtMem(LCD_SHARP_VGA); - w100_clear_screen(LCD_SHARP_VGA,0xF1A00000); + w100_clear_screen(LCD_SHARP_VGA,(void*)0xF1A00000); w100_vsync(); w100_init_sharp_lcd(LCD_SHARP_VGA); lcdtg_lcd_change(LCD_SHARP_VGA); @@ -824,7 +877,7 @@ w100_clear_screen(LCD_SHARP_QVGA,NULL); writel(0xBFFFA000, remapped_regs+mmMC_EXT_MEM_LOCATION); w100_InitExtMem(LCD_SHARP_VGA); - w100_clear_screen(LCD_SHARP_VGA,0xF1A00000); + w100_clear_screen(LCD_SHARP_VGA,(void*)0xF1A00000); w100_vsync(); w100_init_sharp_lcd(LCD_SHARP_VGA); lcdtg_lcd_change(LCD_SHARP_VGA); @@ -852,6 +905,27 @@ break; } +#ifdef _IMAGE_CACHE_SUPPORT // FOR RESOLUTION CHANGE + if(LCD_MODE_480 == w100fb_lcdMode){ + + __PRINTK("RESOLUTION CHANGE: restore image cache ... "); + if(save_img_cache_ptr != NULL && + save_img_alloc_num != 0){ + + if(!restore_image_cache(save_img_cache_ptr,save_img_alloc_num)){ + save_img_cache_ptr = NULL; + save_img_alloc_num = 0; + __PRINTK("SUCCESS!\n"); + }else{ + __PRINTK("ERROR!!\n"); + } + + }else{ + __PRINTK("ERROR!\n"); + } + } +#endif //_IMAGE_CACHE_SUPPORT + // Set the initial contrast to something sane w100_gamma_init(); @@ -1013,6 +1087,13 @@ } } isRemapped = 0; + +#ifdef _IMAGE_CACHE_SUPPORT //FOR CLEANUP + cleanup_image_cache(save_img_cache_ptr, + save_img_alloc_num); + save_img_cache_ptr = NULL; + save_img_alloc_num = 0; +#endif //_IMAGE_CACHE_SUPPORT } #ifdef MODULE @@ -1081,6 +1162,87 @@ } } break; + +#if defined(CONFIG_ARCH_SHARP_SL) + case W100FB_CONFIG_EX: + { + int *setup_arg = (int*)arg; + int mode; + + // a)arg = NULL: check this ioctl. + // b)arg[0] = 0: disable memory check (disable signal). + // c)arg[0] = 1: enable memory check (enable signal). + // d)arg[0] = 2: set image cache info. + if(setup_arg == NULL) + return 0; + + mode = setup_arg[0]; + switch(mode){ + case 0: + if(disable_signal_to_mm == 0){ + + //printk("[w100fb] set the image cache info!\n"); + + // disable memory check + disable_signal_to_mm = 1; + + return 0; + } + break; + case 1: + if(disable_signal_to_mm == 1){ + + //printk("[w100fb] reset the image cache info!\n"); + + // enable memory check + disable_signal_to_mm = 0; + return 0; + + } + break; +#ifdef _IMAGE_CACHE_SUPPORT + case 2: + { + u32 start,end; + start = (u32)setup_arg[1]; + end = (u32)setup_arg[2]; + + if(start < 0 || end > (REMAPPED_FB_LEN-1) || start > end){ + // error ... don't skip. + start_skip_save_image_no = (-1); + end_skip_save_image_no = (-1); + return -EINVAL; + } + + __PRINTK("[w100fb] start=%x, end=%x\n",start,end); + + if(start != 0 || end != 0){ + start = start/IMG_CACHE_MALLOC_SIZE + 1; + end = end/IMG_CACHE_MALLOC_SIZE - 1; + + __PRINTK("[w100fb] start_no=%x, end_no=%x\n",start,end); + + if(start <= end){ + // do skip. + start_skip_save_image_no = start; + end_skip_save_image_no = end; + return 0; + } + } + // don't skip. + start_skip_save_image_no = (-1); + end_skip_save_image_no = (-1); + return 0; + } +#endif //_IMAGE_CACHE_SUPPORT + default: + break; + } + } + return -EINVAL; + break; +#endif + default: return -EINVAL; } @@ -3204,6 +3366,260 @@ lcdtg_ssp_send( RESCTL_ADRS, RESCTL_QVGA ); } +#ifdef _IMAGE_CACHE_SUPPORT // + +// vga only +//#undef __PRINTK +//#define __PRINTK(arg...) printk(arg) +//#define __SUM +static u32* save_image_cache(u32 *alloc_num) +{ + u32 *img_src=NULL; + u32 *img_dst=NULL; + u32 img_size=0; + u32 img_kmalloc_num=0; + int i,j; +#ifdef __SUM + u32 sum=0; +#endif + +#if defined(CONFIG_ARCH_SHARP_SL) + // checking in mm/omm_kill.c + //disable_signal_to_mm = 1; //@DEBUG +#endif + + __PRINTK("save image cache\n"); + img_src = (u32*)remapped_fbuf + IMG_CACHE_OFFSET_VGA/sizeof(u32); + img_size = IMG_CACHE_TOTAL_SIZE_VGA; + + __PRINTK(" - remapped_fbuf = %x\n",(int)remapped_fbuf); + __PRINTK(" - img_src = %x\n",(int)img_src); + __PRINTK(" - img_size = %x\n",img_size); + + img_kmalloc_num = (img_size+IMG_CACHE_MALLOC_SIZE)/IMG_CACHE_MALLOC_SIZE; + img_dst = kmalloc(img_kmalloc_num*sizeof(u32),GFP_KERNEL); + if(img_dst == NULL) + goto save_img_cache_err; + + __PRINTK(" - img_kmalloc_num = %d\n",img_kmalloc_num); + __PRINTK(" - img_dst = %x\n",(int)img_dst); + + for(i=0;i end_skip_save_image_no || + start_skip_save_image_no < 0 || end_skip_save_image_no < 0){ + img_dst[i] = (u32)kmalloc(IMG_CACHE_MALLOC_SIZE,GFP_KERNEL); + }else{ + img_dst[i] = IMG_CACHE_SKIP_MARK; + } +#else + img_dst[i] = (u32)kmalloc(IMG_CACHE_MALLOC_SIZE,GFP_KERNEL); +#endif + + __PRINTK(" - malloc[%d] = %x\n",i,(int)img_dst[i]); + + if(img_dst[i] == (u32)NULL){ + img_kmalloc_num = i; + for(i=0;inodemerge_list and c->very_dirty_list + * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility and c->nodemerge_list + * correct indentation + * 29-Oct-2002 Lineo Japan, Inc. add reserved blocks for badblock + * add c->cont_gc_count + * 24-Oct-2002 Lineo Japan, Inc. add min. available blocks + * + * ChangeLog: * 05-Dec-2002 SHARP adjust gc-end conditions * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode * 25-Nov-2002 Lineo Japan, Inc. end GC when jffs2_garbage_collect_pass diff -urN /home/sakamoto/source-open/c700/linux/fs/jffs2/erase.c linux/fs/jffs2/erase.c --- /home/sakamoto/source-open/c700/linux/fs/jffs2/erase.c Tue Jan 14 14:39:49 2003 +++ linux/fs/jffs2/erase.c Thu Feb 27 11:47:31 2003 @@ -11,6 +11,9 @@ * * ChangeLog: * 29-Oct-2002 Lineo Japan, Inc. add member struct jffs2_sb_info#nr_bad_blocks + * + * ChangeLog: + * 29-Oct-2002 Lineo Japan, Inc. add member struct jffs2_sb_info#nr_bad_blocks * 24-Nov-2002 SHARP add erasing_dirty_size * */ diff -urN /home/sakamoto/source-open/c700/linux/fs/jffs2/fs.c linux/fs/jffs2/fs.c --- /home/sakamoto/source-open/c700/linux/fs/jffs2/fs.c Tue Jan 14 14:39:49 2003 +++ linux/fs/jffs2/fs.c Thu Feb 27 11:47:31 2003 @@ -11,6 +11,11 @@ * * ChangeLog: * 19-Nov-2002 Lineo Japan, Inc. add function jffs2_get_nr_inodes() + * 09-Nov-2002 Lineo Japan, Inc. add code to do avail = 0 when cannot reserve space + * 01-Nov-2002 Lineo Japan, Inc. involve nr_bad_blocks in USED calc. + * + * ChangeLog: + * 19-Nov-2002 Lineo Japan, Inc. add function jffs2_get_nr_inodes() * 24-Nov-2002 SHARP modify storage-avail calculation, and add erasing_dirty_size * 09-Nov-2002 Lineo Japan, Inc. add code to do avail = 0 when cannot reserve space * 01-Nov-2002 Lineo Japan, Inc. involve nr_bad_blocks in USED calc. diff -urN /home/sakamoto/source-open/c700/linux/fs/jffs2/gc.c linux/fs/jffs2/gc.c --- /home/sakamoto/source-open/c700/linux/fs/jffs2/gc.c Tue Jan 14 14:39:49 2003 +++ linux/fs/jffs2/gc.c Thu Feb 27 11:47:31 2003 @@ -10,6 +10,22 @@ * $Id: gc.c,v 1.84 2002/09/06 16:46:29 dwmw2 Exp $ * * ChangeLog: + * 03-Dec-2002 Lineo Japan, Inc. add LockPage + * 30-Nov-2002 Lineo Japan, Inc. fix deadlock between lock_page and f->sem + * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode + * 25-Nov-2002 Lineo Japan, Inc. remove warning message when there is + * no gcblock + * 23-Nov-2002 Lineo Japan, Inc. correct JFFS2_RESERVED_BLOCKS_GCMERGE + * condition expression in connection with NR_AVAIL_BLOCKS() + * take max dirty size from c->dirty_list + * return -ENOSPC when find_gc_block + * returns NULL + * don't take gcblock from clean_list + * when NR_AVAIL_BLOCKS < JFFS2_RESERVED_BLOCKS_CLEAN + * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree + * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility + * + * ChangeLog: * 05-Dec-2002 SHARP adjust gcblock selection * 03-Dec-2002 Lineo Japan, Inc. add LockPage * 30-Nov-2002 Lineo Japan, Inc. fix deadlock between lock_page and f->sem diff -urN /home/sakamoto/source-open/c700/linux/fs/jffs2/nodelist.h linux/fs/jffs2/nodelist.h --- /home/sakamoto/source-open/c700/linux/fs/jffs2/nodelist.h Tue Jan 14 14:39:49 2003 +++ linux/fs/jffs2/nodelist.h Thu Feb 27 11:47:31 2003 @@ -10,6 +10,15 @@ * $Id: nodelist.h,v 1.83 2002/09/06 16:46:29 dwmw2 Exp $ * * ChangeLog: + * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode + * 23-Nov-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_DIRTY + * add JFFS2_RESERVED_BLOCKS_CLEAN + * 19-Nov-2002 Lineo Japan, Inc. add counter of fragtree elements + * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree + * 11-Nov-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_ROOT + * 29-Oct-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_BAD and JFFS2_MAX_CONT_GC + * + * ChangeLog: * 05-Dec-2002 SHARP adjust REVERVED_BLOCKS values for storage-full * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode * 23-Nov-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_DIRTY diff -urN /home/sakamoto/source-open/c700/linux/fs/jffs2/nodemgmt.c linux/fs/jffs2/nodemgmt.c --- /home/sakamoto/source-open/c700/linux/fs/jffs2/nodemgmt.c Tue Jan 14 14:39:49 2003 +++ linux/fs/jffs2/nodemgmt.c Thu Feb 27 11:47:31 2003 @@ -11,6 +11,15 @@ * * ChangeLog: * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode + * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility + * 11-Nov-2002 Lineo Japan, Inc. add reserved blocks for superuser + * 29-Oct-2002 Lineo Japan, Inc. add reserved blocks for badblocks + * add c->cont_gc_count + * 24-Oct-2002 Lineo Japan, Inc. separate jffs2_reserve_space into + * *_normal and *_deletion + * + * ChangeLog: + * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode * 24-Nov-2002 SHARP modify storage-full conditions, and add erasing_dirty_size * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility * 11-Nov-2002 Lineo Japan, Inc. add reserved blocks for superuser diff -urN /home/sakamoto/source-open/c700/linux/fs/jffs2/readinode.c linux/fs/jffs2/readinode.c --- /home/sakamoto/source-open/c700/linux/fs/jffs2/readinode.c Tue Jan 14 14:39:49 2003 +++ linux/fs/jffs2/readinode.c Thu Feb 27 11:47:31 2003 @@ -10,6 +10,11 @@ * $Id: readinode.c,v 1.90 2002/09/06 16:46:29 dwmw2 Exp $ * * ChangeLog: + * 19-Nov-2002 Lineo Japan, Inc. add counter of fragtree elements + * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree + * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility + * + * ChangeLog: * 05-Dec-2002 SHARP nodemerge-thershold is changable * 19-Nov-2002 Lineo Japan, Inc. add counter of fragtree elements * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree diff -urN /home/sakamoto/source-open/c700/linux/fs/jffs2/wbuf.c linux/fs/jffs2/wbuf.c --- /home/sakamoto/source-open/c700/linux/fs/jffs2/wbuf.c Tue Jan 14 14:39:49 2003 +++ linux/fs/jffs2/wbuf.c Thu Feb 27 11:47:31 2003 @@ -10,6 +10,15 @@ * $Id: wbuf.c,v 1.17 2002/08/29 21:45:54 gleixner Exp $ * * ChangeLog: + * 25-Oct-2002 Lineo Japan, Inc. deal with 1bit corruption of oob area + * 08-Oct-2002 Lineo Japan, Inc. move failure counter pos in oob + * 04-Oct-2002 Lineo Japan, Inc. correct jeb->bad_count value when + * failure count is 0xff + * 25-Sep-2002 Lineo Japan, Inc. take hamming distance for oob value + * into consideration + * 17-Sep-2002 Lineo Japan, Inc. add code for post-badblock + * + * ChangeLog: * 24-Nov-2002 SHARP add erasing_dirty_size * 25-Oct-2002 Lineo Japan, Inc. deal with 1bit corruption of oob area * 08-Oct-2002 Lineo Japan, Inc. move failure counter pos in oob diff -urN /home/sakamoto/source-open/c700/linux/include/asm-arm/proc-armv/locks.h linux/include/asm-arm/proc-armv/locks.h --- /home/sakamoto/source-open/c700/linux/include/asm-arm/proc-armv/locks.h Mon Aug 26 14:37:55 2002 +++ linux/include/asm-arm/proc-armv/locks.h Thu Jan 30 18:59:16 2003 @@ -8,6 +8,9 @@ * published by the Free Software Foundation. * * Interrupt safe locking assembler. + * + * Change log + * 16-Jan-2003 SHARP semaphore down bug fix */ #ifndef __ASM_PROC_LOCKS_H #define __ASM_PROC_LOCKS_H @@ -27,7 +30,7 @@ " blmi " SYMBOL_NAME_STR(fail) \ : \ : "r" (ptr), "I" (1) \ - : "ip", "lr", "cc"); \ + : "ip", "lr", "cc", "memory"); \ }) #define __down_op_ret(ptr,fail) \ @@ -48,7 +51,7 @@ " mov %0, ip" \ : "=&r" (ret) \ : "r" (ptr), "I" (1) \ - : "ip", "lr", "cc"); \ + : "ip", "lr", "cc", "memory"); \ ret; \ }) @@ -94,7 +97,7 @@ " blne " SYMBOL_NAME_STR(fail) \ : \ : "r" (ptr), "I" (RW_LOCK_BIAS) \ - : "ip", "lr", "cc"); \ + : "ip", "lr", "cc", "memory"); \ }) #define __up_op_write(ptr,wake) \ diff -urN /home/sakamoto/source-open/c700/linux/include/linux/jffs2_fs_sb.h linux/include/linux/jffs2_fs_sb.h --- /home/sakamoto/source-open/c700/linux/include/linux/jffs2_fs_sb.h Tue Jan 14 14:40:57 2003 +++ linux/include/linux/jffs2_fs_sb.h Thu Feb 27 11:47:33 2003 @@ -3,6 +3,15 @@ /* * ChangeLog: * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode + * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility + * 05-Nov-2002 Lineo Japan, Inc. modify nr_bad_blocks type + * 29-Oct-2002 Lineo Japan, Inc. add member nr_bad_blocks and cont_gc_count + * + */ + +/* + * ChangeLog: + * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode * 24-Nov-2002 SHARP add erasing_dirty_size * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility * 05-Nov-2002 Lineo Japan, Inc. modify nr_bad_blocks type diff -urN /home/sakamoto/source-open/c700/linux/include/linux/mm.h linux/include/linux/mm.h --- /home/sakamoto/source-open/c700/linux/include/linux/mm.h Mon Aug 26 14:43:30 2002 +++ linux/include/linux/mm.h Wed Jan 29 14:45:03 2003 @@ -115,6 +115,11 @@ extern int vm_min_readahead; extern int vm_max_readahead; +#ifdef CONFIG_ARCH_SHARP_SL +/* switch to enable vm for no swap system */ +extern int vm_without_swap; +#endif + /* * mapping from the currently active vm_flags protection bits (the * low four bits) to a page protection mask.. diff -urN /home/sakamoto/source-open/c700/linux/include/linux/mtd/mtd.h linux/include/linux/mtd/mtd.h --- /home/sakamoto/source-open/c700/linux/include/linux/mtd/mtd.h Tue Jan 14 14:40:57 2003 +++ linux/include/linux/mtd/mtd.h Thu Feb 27 11:47:33 2003 @@ -4,6 +4,12 @@ /* * ChangeLog: * 19-Sep-2002 Lineo Japan, Inc. add erase-by-force mode + * + */ + +/* + * ChangeLog: + * 19-Sep-2002 Lineo Japan, Inc. add erase-by-force mode * 23-Oct-2002 SHARP add definitions for CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS * */ diff -urN /home/sakamoto/source-open/c700/linux/include/linux/sysctl.h linux/include/linux/sysctl.h --- /home/sakamoto/source-open/c700/linux/include/linux/sysctl.h Fri Sep 6 19:07:41 2002 +++ linux/include/linux/sysctl.h Thu Jan 30 18:59:16 2003 @@ -22,6 +22,7 @@ * * Change Log * 12-Nov-2001 Lineo Japan, Inc. + * 16-Jan-2003 SHARP add VM switch */ #ifndef _LINUX_SYSCTL_H @@ -149,6 +150,10 @@ #ifdef CONFIG_FREEPG_SIGNAL , VM_FREEPG_SIGNAL_PROC=14 +#endif +#ifdef CONFIG_ARCH_SHARP_SL + , + VM_WITHOUT_SWAP=15 /* switch to enable vm for no swap */ #endif }; diff -urN /home/sakamoto/source-open/c700/linux/kernel/sysctl.c linux/kernel/sysctl.c --- /home/sakamoto/source-open/c700/linux/kernel/sysctl.c Fri Sep 6 19:07:39 2002 +++ linux/kernel/sysctl.c Thu Jan 30 18:59:16 2003 @@ -19,6 +19,7 @@ * * Change Log * 12-Nov-2001 Lineo Japan, Inc. + * 16-Jan-2003 SHARP add VM switch */ #include @@ -283,6 +284,10 @@ #ifdef CONFIG_FREEPG_SIGNAL {VM_FREEPG_SIGNAL_PROC, "freepg_signal_proc", freepg_signal_proc, sizeof freepg_signal_proc, 0644, NULL, &proc_dostring}, +#endif +#ifdef CONFIG_ARCH_SHARP_SL + {VM_WITHOUT_SWAP, "vm-without-swap", + &vm_without_swap, sizeof(int), 0644, NULL, &proc_dointvec}, #endif {0} }; diff -urN /home/sakamoto/source-open/c700/linux/mm/oom_kill.c linux/mm/oom_kill.c --- /home/sakamoto/source-open/c700/linux/mm/oom_kill.c Tue Jan 14 14:54:41 2003 +++ linux/mm/oom_kill.c Fri Feb 28 15:47:28 2003 @@ -17,6 +17,8 @@ * Change Log * 12-Nov-2001 Lineo Japan, Inc. * 13-Nov-2002 SHARP + * 16-Jan-2003 SHARP add VM switch + * 24-Feb-2003 SHARP modify check out of memory function */ #include @@ -291,6 +293,10 @@ #endif #if defined(CONFIG_ARCH_SHARP_SL) +#if defined(CONFIG_ARCH_PXA_CORGI) +//03.02.24 for signal control (see video/w100fb.c) +extern int disable_signal_to_mm; +#endif void check_out_of_memory(void) { int pgsize = atomic_read(&page_cache_size); @@ -321,6 +327,13 @@ } if ((prev_level < 2) && (pgsize < MIN_SIGNAL_PG_CACHE_SIZE)) { // printk("oom_min()! %d\n", pgsize); + +#if defined(CONFIG_ARCH_PXA_CORGI) // 03.02.24 disable the signal + if (disable_signal_to_mm){ + //printk("W100FB: oom_min()! %d\n", pgsize); + return; + } +#endif prev_level = 2; prev_action = now; freepg_signal_min(); @@ -328,13 +341,21 @@ } else if ((prev_level < 1) && (pgsize < LOW_SIGNAL_PG_CACHE_SIZE)) { // printk("oom_low()! %d\n", pgsize); + +#if defined(CONFIG_ARCH_PXA_CORGI) // 03.02.24 disable the signal + if (disable_signal_to_mm){ + //printk("W100FB: oom_low()! %d\n", pgsize); + return; + } +#endif prev_level = 1; prev_action = now; freepg_signal_low(); return; } } -#else +#endif + /** * out_of_memory - is the system out of memory? */ @@ -420,7 +441,6 @@ retry_count = 0; #endif } -#endif #ifdef FREEPG_DEBUG diff -urN /home/sakamoto/source-open/c700/linux/mm/vmscan.c linux/mm/vmscan.c --- /home/sakamoto/source-open/c700/linux/mm/vmscan.c Tue Jan 14 14:54:41 2003 +++ linux/mm/vmscan.c Thu Jan 30 18:59:16 2003 @@ -13,6 +13,7 @@ * ChangLog: * 09-Nov-2002 SHARP reduce active pages * 19-Nov-2002 Lineo Japan, Inc. shrink JFFS2 inode cache + * 16-Jan-2003 SHARP add VM switch */ #include @@ -29,6 +30,11 @@ #include +#ifdef CONFIG_ARCH_SHARP_SL +/* switvch to enable vm for no swap system */ +int vm_without_swap=1; +#endif + /* * The "priority" of VM scanning is how much of the queues we * will scan in one go. A value of 6 for DEF_PRIORITY implies @@ -581,6 +587,9 @@ /* try to keep the active list 2/3 of the size of the cache */ #if defined(CONFIG_ARCH_SHARP_SL) ratio = (unsigned long) nr_pages * nr_active_pages; + if (!vm_without_swap) { + ratio /= ((nr_inactive_pages + 1) * 2); + } #else ratio = (unsigned long) nr_pages * nr_active_pages / ((nr_inactive_pages + 1) * 2); #endif @@ -613,7 +622,11 @@ #else if (nr_pages <= 0) { #if defined(CONFIG_ARCH_SHARP_SL) - check_out_of_memory(); + if (vm_without_swap) { + check_out_of_memory(); + } else { + reset_out_of_memory_condition(); + } #else reset_out_of_memory_condition(); #endif @@ -627,7 +640,11 @@ * Mhwahahhaha! This is the part I really like. Giggle. */ #if defined(CONFIG_ARCH_SHARP_SL) - check_out_of_memory(); + if (vm_without_swap) { + check_out_of_memory(); + } else { + out_of_memory(); + } #else out_of_memory(); #endif diff -urN /home/sakamoto/source-open/c700/linux/net/irda/irda_device.c linux/net/irda/irda_device.c --- /home/sakamoto/source-open/c700/linux/net/irda/irda_device.c Mon Aug 26 14:38:07 2002 +++ linux/net/irda/irda_device.c Thu Mar 6 20:24:56 2003 @@ -605,3 +605,21 @@ release_dma_lock(flags); } + +#ifdef CONFIG_PM +void irda_task_suspend(void) +{ + struct irda_task *task; + + task = (struct irda_task *) hashbin_get_first( tasks ); + while (task != NULL) { + ASSERT(task->magic == IRDA_TASK_MAGIC, break;); + + del_timer(&task->timer); + task = (struct irda_task *) hashbin_get_next(tasks); + IRDA_DEBUG(2, __FUNCTION__"() delete task timers\n"); + } + + return; +} +#endif diff -urN /home/sakamoto/source-open/c700/linux/net/irda/iriap.c linux/net/irda/iriap.c --- /home/sakamoto/source-open/c700/linux/net/irda/iriap.c Tue Oct 8 12:56:09 2002 +++ linux/net/irda/iriap.c Thu Mar 6 20:24:56 2003 @@ -1043,3 +1043,19 @@ } #endif /* PROC_FS */ + +#ifdef CONFIG_PM +void iriap_suspend(void) +{ + struct iriap_cb *self; + + self = (struct iriap_cb *) hashbin_get_first( iriap ); + while (self != NULL) { + ASSERT(self->magic == IAS_MAGIC, break;); + + del_timer(&self->watchdog_timer); + self = (struct iriap_cb *) hashbin_get_next(iriap); + IRDA_DEBUG(2, __FUNCTION__"() delete iap timers\n"); + } return; +} +#endif diff -urN /home/sakamoto/source-open/c700/linux/net/irda/irsyms.c linux/net/irda/irsyms.c --- /home/sakamoto/source-open/c700/linux/net/irda/irsyms.c Mon Aug 26 14:38:07 2002 +++ linux/net/irda/irsyms.c Thu Mar 6 20:24:56 2003 @@ -44,6 +44,10 @@ #include #include #include +#ifdef CONFIG_PM +#include +#include +#endif extern struct proc_dir_entry *proc_irda; @@ -169,6 +173,14 @@ EXPORT_SYMBOL(irtty_set_packet_mode); #endif +#ifdef CONFIG_PM +static struct pm_dev *irda_pm_dev; +static int irda_pm_callback(struct pm_dev* pm_dev, pm_request_t req, void* data); +static void irda_suspend(void); +static void irda_resume(void); +#endif + + int __init irda_init(void) { IRDA_DEBUG(0, __FUNCTION__ "()\n"); @@ -195,6 +207,9 @@ ircomm_init(); ircomm_tty_init(); #endif +#ifdef CONFIG_PM + irda_pm_dev = pm_register(PM_COTULLA_DEV, 0, irda_pm_callback); +#endif return 0; } @@ -238,3 +253,95 @@ strncpy(notify->name, "Unknown", NOTIFY_MAX_NAME); } +#ifdef CONFIG_PM +static int irda_pm_callback(struct pm_dev* pm_dev, pm_request_t req, void* data) +{ + switch (req) { + case PM_SUSPEND: + irda_suspend(); + break; + case PM_RESUME: + irda_resume(); + break; + + } + + return 0; +} + +extern struct irlmp_cb *irlmp; +extern hashbin_t *irlap; +extern void irda_task_suspend(void); +extern void irttp_suspend(void); +extern void iriap_suspend(void); + +static void irda_suspend(void) +{ + unsigned long flags; + struct irlap_cb *self_lap; + struct lsap_cb *self_lsap; + struct lap_cb *lap; + + IRDA_DEBUG(1, __FUNCTION__"()\n"); + + // kill timers + del_timer(&irlmp->discovery_timer); + IRDA_DEBUG(2, __FUNCTION__"() delete discovery timer\n"); + + save_flags(flags); + cli(); + self_lap = (struct irlap_cb *) hashbin_get_first(irlap); + while (self_lap != NULL) { + ASSERT(self_lap->magic == LAP_MAGIC, break;); + + del_timer(&self_lap->slot_timer); + del_timer(&self_lap->query_timer); + del_timer(&self_lap->discovery_timer); + del_timer(&self_lap->final_timer); + del_timer(&self_lap->poll_timer); + del_timer(&self_lap->wd_timer); + del_timer(&self_lap->backoff_timer); + del_timer(&self_lap->media_busy_timer); + IRDA_DEBUG(2, __FUNCTION__"() delete irlap timers\n"); + + self_lap = (struct irlap_cb *) hashbin_get_next(irlap); + } + + self_lsap = (struct lsap_cb *) hashbin_get_first( irlmp->unconnected_lsaps); + while (self_lsap != NULL) { + ASSERT(self_lsap->magic == LMP_LSAP_MAGIC, break;); + + del_timer(&self_lsap->watchdog_timer); + self_lsap = (struct lsap_cb *) hashbin_get_next( + irlmp->unconnected_lsaps); + IRDA_DEBUG(2, __FUNCTION__"() delete lsap timers\n"); + } + + lap = (struct lap_cb *) hashbin_get_first(irlmp->links); + while (lap != NULL) { + ASSERT(lap->magic == LMP_LAP_MAGIC, return;); + + del_timer(&lap->idle_timer); + lap = (struct lap_cb *) hashbin_get_next(irlmp->links); + IRDA_DEBUG(2, __FUNCTION__"() delete lap timers\n"); + } + + irda_task_suspend(); + irttp_suspend(); + + restore_flags(flags); + + return; +} + +static void irda_resume(void) +{ + IRDA_DEBUG(1, __FUNCTION__"()\n"); + + // start timers + init_timer(&irlmp->discovery_timer); + irlmp_start_discovery_timer(irlmp, sysctl_discovery_timeout*HZ); + + return; +} +#endif diff -urN /home/sakamoto/source-open/c700/linux/net/irda/irttp.c linux/net/irda/irttp.c --- /home/sakamoto/source-open/c700/linux/net/irda/irttp.c Tue Oct 8 12:56:09 2002 +++ linux/net/irda/irttp.c Thu Mar 6 20:24:56 2003 @@ -18,7 +18,7 @@ * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * - * Neither Dag Brattli nor University of Troms,Ax(B admit liability nor + * Neither Dag Brattli nor University of Troms.ANx admit liability nor * provide warranty for any of this software. This material is * provided "AS-IS" and at no charge. * @@ -1672,3 +1672,23 @@ } #endif /* PROC_FS */ + +#ifdef CONFIG_PM +void irttp_suspend(void) +{ + struct tsap_cb *self; + + /* Check for main structure */ + ASSERT(irttp != NULL, return;); + ASSERT(irttp->magic == TTP_MAGIC, return;); + + self = (struct tsap_cb *) hashbin_get_first( irttp->tsaps ); + while (self != NULL) { + ASSERT(self->magic == TTP_TSAP_MAGIC, break;); + + del_timer(&self->todo_timer); + self = (struct tsap_cb *) hashbin_get_next(irttp->tsaps); + IRDA_DEBUG(2, __FUNCTION__"() delete tsap timers\n"); + } return; +} +#endif