From a1392aaa1d146d105ebf7a6528b91d5746dc0b89 Mon Sep 17 00:00:00 2001 From: Michael Lauer Date: Mon, 22 Aug 2005 10:30:30 +0000 Subject: add support for the Sharp SL-C3100 (Borzoi) --- .../defconfig-spitz | 10 +- packages/linux/linux-openzaurus_2.6.13-rc5-mm1.bb | 1 + .../.mtn2git_empty | 0 .../1764-1.patch | 16 + .../CPAR050218.patch | 422 + .../P01-C3000-clockup_050221.patch | 202 + .../P02++050226.patch | 221 + .../P02-C3000-voltage_050221.patch | 179 + .../P03-C3000-SIGSTOP_FIX_041207.patch | 195 + .../P04-C3000-UNICON_041206.patch | 40089 +++++++++++++++++++ .../P05-C3000-TSPRESSURE_041207.patch | 235 + .../P06-C3000-WRITETS_041206.patch | 107 + .../P07-C3000-KBDDEV_041206.patch | 115 + .../P08-rtc-mremap-mremap2nd-fix_041213.patch | 140 + .../P09-ext3-isofs-fix_041216.patch | 359 + .../P10-ntfs-fix_041216.patch | 25 + .../P11-bluetooth-mh18_041216.patch | 16593 ++++++++ .../P12-fbcon-fix_041219.patch | 51 + .../P14-lowlatency_041221.patch | 1677 + .../P17-bvdd_050222.patch | 1506 + .../P18-detailed_battery_050309.patch | 102 + .../add-oz-release-string.patch | 24 + .../armdeffix.patch | 13 + .../bluecard_cs.patch | 11 + .../compile.patch | 14 + .../corgi-default-brightness.patch | 19 + .../corgi-fbcon-logo.patch | 281 + .../defconfig-akita | 1311 + .../defconfig-borzoi | 1310 + .../defconfig-spitz | 1309 + .../deviceinfo.patch | 26 + .../disable-pcmcia-probe.patch | 17 + .../idecs.patch | 78 + .../initsh.patch | 14 + .../logo.patch | 2598 ++ .../saner-spitz-keymap.patch | 225 + .../swap-performance.patch | 19 + .../tosa_ts.patch | 207 + ...penzaurus-pxa27x_2.4.20-rmk2-embedix20050228.bb | 2 + ...penzaurus-pxa27x_2.4.20-rmk2-embedix20050602.bb | 99 + 40 files changed, 69819 insertions(+), 3 deletions(-) create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/.mtn2git_empty create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/1764-1.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/CPAR050218.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P01-C3000-clockup_050221.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02++050226.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02-C3000-voltage_050221.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P03-C3000-SIGSTOP_FIX_041207.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P04-C3000-UNICON_041206.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P05-C3000-TSPRESSURE_041207.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P06-C3000-WRITETS_041206.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P07-C3000-KBDDEV_041206.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P08-rtc-mremap-mremap2nd-fix_041213.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P09-ext3-isofs-fix_041216.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P10-ntfs-fix_041216.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P11-bluetooth-mh18_041216.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P12-fbcon-fix_041219.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P14-lowlatency_041221.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P17-bvdd_050222.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P18-detailed_battery_050309.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/add-oz-release-string.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/armdeffix.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/bluecard_cs.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/compile.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/corgi-default-brightness.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/corgi-fbcon-logo.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-akita create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-borzoi create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-spitz create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/deviceinfo.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/disable-pcmcia-probe.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/idecs.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/initsh.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/logo.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/saner-spitz-keymap.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/swap-performance.patch create mode 100644 packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/tosa_ts.patch create mode 100644 packages/linux/openzaurus-pxa27x_2.4.20-rmk2-embedix20050602.bb (limited to 'packages/linux') diff --git a/packages/linux/linux-openzaurus-2.6.13-rc5-mm1/defconfig-spitz b/packages/linux/linux-openzaurus-2.6.13-rc5-mm1/defconfig-spitz index a388797b6e..641852472c 100644 --- a/packages/linux/linux-openzaurus-2.6.13-rc5-mm1/defconfig-spitz +++ b/packages/linux/linux-openzaurus-2.6.13-rc5-mm1/defconfig-spitz @@ -256,6 +256,7 @@ CONFIG_IRDA=m # IrDA protocols # CONFIG_IRLAN=m +CONFIG_IRNET=m CONFIG_IRCOMM=m # CONFIG_IRDA_ULTRA is not set @@ -554,7 +555,7 @@ CONFIG_NET_PCMCIA=y # CONFIG_PCMCIA_3C589 is not set # CONFIG_PCMCIA_3C574 is not set # CONFIG_PCMCIA_FMVJ18X is not set -# CONFIG_PCMCIA_PCNET is not set +CONFIG_PCMCIA_PCNET=m # CONFIG_PCMCIA_NMCLAN is not set # CONFIG_PCMCIA_SMC91C92 is not set # CONFIG_PCMCIA_XIRC2PS is not set @@ -631,8 +632,11 @@ CONFIG_HW_CONSOLE=y # # Serial drivers -# -# CONFIG_SERIAL_8250 is not set +# +CONFIG_SERIAL_8250=m +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set # # Non-8250 serial port support diff --git a/packages/linux/linux-openzaurus_2.6.13-rc5-mm1.bb b/packages/linux/linux-openzaurus_2.6.13-rc5-mm1.bb index e624b8a1d5..cb40aad03a 100644 --- a/packages/linux/linux-openzaurus_2.6.13-rc5-mm1.bb +++ b/packages/linux/linux-openzaurus_2.6.13-rc5-mm1.bb @@ -132,6 +132,7 @@ COMPATIBLE_HOST = "arm.*-linux" CMDLINE_CON = "console=ttyS0,115200n8 console=tty1 noinitrd" CMDLINE_ROOT = "root=/dev/mtdblock2 rootfstype=jffs2 " CMDLINE_ROOT_poodle = "root=/dev/mtdblock1 rootfstype=jffs2 " +CMDLINE_ROOT_spitz = "root=/dev/hda1 rootfstype=ext3 " ############################################################## # Configure memory/ramdisk split for collie diff --git a/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/.mtn2git_empty b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/1764-1.patch b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/1764-1.patch new file mode 100644 index 0000000000..0b660f3521 --- /dev/null +++ b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/1764-1.patch @@ -0,0 +1,16 @@ +__arch_strncpy_from_user needs to be exported if you build the framebuffer console driver as a module. + +Cheers, + +Ian. + +--- linux-2.6-bkpxa.orig/arch/arm/kernel/armksyms.c 2004-02-27 10:35:29.000000000 +0000 ++++ linux-2.6-bkpxa/arch/arm/kernel/armksyms.c 2004-02-27 14:55:02.000000000 +0000 +@@ -187,6 +187,7 @@ + EXPORT_SYMBOL(__arch_copy_to_user); + EXPORT_SYMBOL(__arch_clear_user); + EXPORT_SYMBOL(__arch_strnlen_user); ++EXPORT_SYMBOL(__arch_strncpy_from_user); + + /* consistent area handling */ + EXPORT_SYMBOL(consistent_alloc); diff --git a/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/CPAR050218.patch b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/CPAR050218.patch new file mode 100644 index 0000000000..a0b866219b --- /dev/null +++ b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/CPAR050218.patch @@ -0,0 +1,422 @@ +--- 050125/include/asm-arm/proc-armv/ptrace.h Tue Jan 25 00:22:44 2005 ++++ 050218/include/asm-arm/proc-armv/ptrace.h Thu Feb 17 16:13:54 2005 +@@ -40,6 +40,10 @@ + + struct pt_regs { + long uregs[18]; ++#if defined(CONFIG_CPU_PXA27X) ++ long cpar; ++ long mmx[ 16*2 + 6 + 1 ]; ++#endif + }; + + #define ARM_cpsr uregs[16] +--- 050125/include/asm-arm/sigcontext.h Tue Jan 25 00:22:42 2005 ++++ 050218/include/asm-arm/sigcontext.h Thu Feb 17 18:16:28 2005 +@@ -28,6 +28,10 @@ + unsigned long arm_pc; + unsigned long arm_cpsr; + unsigned long fault_address; ++#if defined(CONFIG_CPU_PXA27X) ++ unsigned long arm_cpar; ++ unsigned long arm_mmx[ 16*2 + 6 + 1 ]; ++#endif + }; + + +--- 050125/include/asm-arm/elf.h Tue Jan 25 00:54:49 2005 ++++ 050218/include/asm-arm/elf.h Thu Feb 17 16:19:02 2005 +@@ -1,6 +1,8 @@ + #ifndef __ASMARM_ELF_H + #define __ASMARM_ELF_H + ++#include ++ + /* + * ELF register definitions.. + */ +@@ -14,6 +16,7 @@ + + #define EM_ARM 40 + #define EF_ARM_APCS26 0x08 ++#define EF_ARM_SOFT_FLOAT 0x200 + + #define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t)) + typedef elf_greg_t elf_gregset_t[ELF_NGREG]; +--- 050125/arch/arm/kernel/entry-armv.S Tue Jan 25 00:21:45 2005 ++++ 050218/arch/arm/kernel/entry-armv.S Fri Feb 18 07:29:34 2005 +@@ -271,7 +271,7 @@ + tst \irqstat, #IRQ_MASK_DOORBELLHOST + movne \irqnr, #IRQ_DOORBELLHOST + bne 1001f +- ++ + tst \irqstat, #IRQ_MASK_I2OINPOST + movne \irqnr, #IRQ_I2OINPOST + bne 1001f +@@ -494,12 +494,12 @@ + + #elif defined(CONFIG_ARCH_L7200) + #include +- ++ + .equ irq_base_addr, IO_BASE_2 + + .macro disable_fiq + .endm +- ++ + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp + mov \irqstat, #irq_base_addr @ Virt addr IRQ regs + add \irqstat, \irqstat, #0x00001000 @ Status reg +@@ -589,7 +589,7 @@ + .endm + + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp +- ++ + /* Read all interrupts pending... */ + ldr \irqnr, =IO_ADDRESS(PLAT_PERIPHERAL_BASE) + OMAHA_INTPND + ldr \irqstat, [\irqnr] /* INTPND */ +@@ -607,7 +607,7 @@ + .endm + + .macro irq_prio_table +- .endm ++ .endm + + #elif defined(CONFIG_ARCH_CLPS711X) + +@@ -654,23 +654,23 @@ + + .macro irq_prio_table + .endm +- ++ + #elif defined (CONFIG_ARCH_CAMELOT) + #include + #undef IRQ_MODE /* same name defined in asm/proc/ptrace.h */ + #include +- ++ + .macro disable_fiq + .endm + + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp +- ++ + ldr \irqstat, =INT_ID(IO_ADDRESS(EXC_INT_CTRL00_BASE)) +- ldr \irqnr,[\irqstat] ++ ldr \irqnr,[\irqstat] + cmp \irqnr,#0 + subne \irqnr,\irqnr,#1 + +- ++ + .endm + + .macro irq_prio_table +@@ -910,7 +910,7 @@ + mov pc, r7 @ check, if this is a relevant code + cmp r0, #0 @ check return value + beq 1f @ else let linux do what it has to do +-2: ++2: + #endif + #ifndef CONFIG_KGDB + adrsvc al, r9, 1f @ r9 = normal FP return +@@ -977,6 +977,9 @@ + stmia r5, {r2 - r4} @ Save USR pc, cpsr, old_r0 + stmdb r5, {sp, lr}^ + alignment_trap r7, r7, __temp_abt ++#ifdef CONFIG_CPU_PXA27X ++ save_user_mmx ++#endif + zero_fp + mov r0, r2 @ remove once everyones in sync + #ifdef MULTI_CPU +@@ -1001,6 +1004,9 @@ + stmia r8, {r5 - r7} @ save pc, psr, old_r0 + stmdb r8, {sp, lr}^ + alignment_trap r4, r7, __temp_irq ++#ifdef CONFIG_CPU_PXA27X ++ save_user_mmx ++#endif + zero_fp + get_current_task tsk + #ifdef CONFIG_PREEMPT +@@ -1039,6 +1045,9 @@ + stmia r8, {r5 - r7} @ Save USR pc, cpsr, old_r0 + stmdb r8, {sp, lr}^ @ Save user sp, lr + alignment_trap r4, r7, __temp_und ++#ifdef CONFIG_CPU_PXA27X ++ save_user_mmx ++#endif + zero_fp + tst r6, #T_BIT @ Thumb mode + bne fpundefinstr +@@ -1068,6 +1077,9 @@ + stmia r8, {r5 - r7} @ Save USR pc, cpsr, old_r0 + stmdb r8, {sp, lr}^ @ Save sp_usr lr_usr + alignment_trap r4, r7, __temp_abt ++#ifdef CONFIG_CPU_PXA27X ++ save_user_mmx ++#endif + zero_fp + mov r0, #MODE_SVC + msr cpsr_c, r0 @ Enable interrupts +@@ -1394,7 +1406,7 @@ + stmfd sp!, {r4, r5} + #endif + mrc p15, 0, r2, c3, c0 +- str r2, [sp, #-4]! ++ str r2, [sp, #-4]! + + ldr r2, [r0] + str sp, [r2] +--- 050125/arch/arm/kernel/entry-header.S Tue Jan 25 00:21:45 2005 ++++ 050218/arch/arm/kernel/entry-header.S Thu Feb 17 20:15:24 2005 +@@ -42,9 +42,44 @@ + @ Stack format (ensured by USER_* and SVC_*) + @ + #ifdef CONFIG_CPU_32 +-#define S_FRAME_SIZE 72 +-#define S_OLD_R0 68 +-#define S_PSR 64 ++#ifdef CONFIG_CPU_PXA27X ++ #define S_MMX 80 ++ ++ #define MMX_WR0 (0x00) ++ #define MMX_WR1 (0x08) ++ #define MMX_WR2 (0x10) ++ #define MMX_WR3 (0x18) ++ #define MMX_WR4 (0x20) ++ #define MMX_WR5 (0x28) ++ #define MMX_WR6 (0x30) ++ #define MMX_WR7 (0x38) ++ #define MMX_WR8 (0x40) ++ #define MMX_WR9 (0x48) ++ #define MMX_WR10 (0x50) ++ #define MMX_WR11 (0x58) ++ #define MMX_WR12 (0x60) ++ #define MMX_WR13 (0x68) ++ #define MMX_WR14 (0x70) ++ #define MMX_WR15 (0x78) ++ #define MMX_WCSSF (0x80) ++ #define MMX_WCASF (0x84) ++ #define MMX_WCGR0 (0x88) ++ #define MMX_WCGR1 (0x8C) ++ #define MMX_WCGR2 (0x90) ++ #define MMX_WCGR3 (0x94) ++ ++ #define MMX_SIZE (0x98) ++ ++ #define S_FRAME_SIZE (76+4+MMX_SIZE) ++ ++ #define S_CPAR 72 ++ #define S_OLD_R0 68 ++ #define S_PSR 64 ++#else ++ #define S_FRAME_SIZE 72 ++ #define S_OLD_R0 68 ++ #define S_PSR 64 ++#endif + #else + #define S_FRAME_SIZE 68 + #define S_OLD_R0 64 +@@ -88,6 +123,43 @@ + set_cpsr_c \temp, #MODE_SVC + .endm + ++#ifdef CONFIG_CPU_PXA27X ++ .macro save_user_mmx ++ mrc p15, 0, r0, c15, c1, 0 ++ str r0, [sp, #S_CPAR] @ Save CPAR ++ cmp r0, #3 ++ bne 1f ++ add r0,sp,#S_MMX @ StoreMMX ++ bic r0, r0, #7 ++ wstrw wCSSF, [r0, #MMX_WCSSF] ++ wstrw wCASF, [r0, #MMX_WCASF] ++ wstrw wCGR0, [r0, #MMX_WCGR0] ++ wstrw wCGR1, [r0, #MMX_WCGR1] ++ wstrw wCGR2, [r0, #MMX_WCGR2] ++ wstrw wCGR3, [r0, #MMX_WCGR3] ++ wstrd wR0, [r0, #MMX_WR0] ++ wstrd wR1, [r0, #MMX_WR1] ++ wstrd wR2, [r0, #MMX_WR2] ++ wstrd wR3, [r0, #MMX_WR3] ++ wstrd wR4, [r0, #MMX_WR4] ++ wstrd wR5, [r0, #MMX_WR5] ++ wstrd wR6, [r0, #MMX_WR6] ++ wstrd wR7, [r0, #MMX_WR7] ++ wstrd wR8, [r0, #MMX_WR8] ++ wstrd wR9, [r0, #MMX_WR9] ++ wstrd wR10, [r0, #MMX_WR10] ++ wstrd wR11, [r0, #MMX_WR11] ++ wstrd wR12, [r0, #MMX_WR12] ++ wstrd wR13, [r0, #MMX_WR13] ++ wstrd wR14, [r0, #MMX_WR14] ++ wstrd wR15, [r0, #MMX_WR15] ++1: ++ mov r0, #1 ++ mcr p15, 0, r0, c15, c1, 0 @ CP0 Only. ++ ldr r0, [sp] @ Restore R0 ++ .endm ++#endif ++ + .macro save_user_regs + sub sp, sp, #S_FRAME_SIZE + stmia sp, {r0 - r12} @ Calling r0 - r12 +@@ -97,12 +169,44 @@ + str lr, [sp, #S_PC] @ Save calling PC + str r8, [sp, #S_PSR] @ Save CPSR + str r0, [sp, #S_OLD_R0] @ Save OLD_R0 ++ save_user_mmx + .endm + + /* + * Must be called with IRQs already disabled. + */ + .macro restore_user_regs ++#ifdef CONFIG_CPU_PXA27X ++ ldr r1, [sp, #S_CPAR] ++ mcr p15, 0, r1, c15, c1, 0 ++ cmp r1, #3 ++ bne 2f ++ add r1,sp,#S_MMX @ LoadMMX ++ bic r1, r1, #7 ++ wldrd wR0, [r1, #MMX_WR0] ++ wldrd wR1, [r1, #MMX_WR1] ++ wldrd wR2, [r1, #MMX_WR2] ++ wldrd wR3, [r1, #MMX_WR3] ++ wldrd wR4, [r1, #MMX_WR4] ++ wldrd wR5, [r1, #MMX_WR5] ++ wldrd wR6, [r1, #MMX_WR6] ++ wldrd wR7, [r1, #MMX_WR7] ++ wldrd wR8, [r1, #MMX_WR8] ++ wldrd wR9, [r1, #MMX_WR9] ++ wldrd wR10, [r1, #MMX_WR10] ++ wldrd wR11, [r1, #MMX_WR11] ++ wldrd wR12, [r1, #MMX_WR12] ++ wldrd wR13, [r1, #MMX_WR13] ++ wldrd wR14, [r1, #MMX_WR14] ++ wldrd wR15, [r1, #MMX_WR15] ++ wldrw wCSSF, [r1, #MMX_WCSSF] ++ wldrw wCASF, [r1, #MMX_WCASF] ++ wldrw wCGR0, [r1, #MMX_WCGR0] ++ wldrw wCGR1, [r1, #MMX_WCGR1] ++ wldrw wCGR2, [r1, #MMX_WCGR2] ++ wldrw wCGR3, [r1, #MMX_WCGR3] ++2: ++#endif + ldr r1, [sp, #S_PSR] @ Get calling cpsr + ldr lr, [sp, #S_PC]! @ Get PC + msr spsr, r1 @ save in spsr_svc +@@ -116,6 +220,37 @@ + * Must be called with IRQs already disabled. + */ + .macro fast_restore_user_regs ++#ifdef CONFIG_CPU_PXA27X ++ ldr r1, [sp, #S_OFF + S_CPAR] ++ mcr p15, 0, r1, c15, c1, 0 ++ cmp r1, #3 ++ bne 3f ++ add r1,sp,#S_OFF + S_MMX @ LoadMMX ++ bic r1, r1, #7 ++ wldrd wR0, [r1, #MMX_WR0] ++ wldrd wR1, [r1, #MMX_WR1] ++ wldrd wR2, [r1, #MMX_WR2] ++ wldrd wR3, [r1, #MMX_WR3] ++ wldrd wR4, [r1, #MMX_WR4] ++ wldrd wR5, [r1, #MMX_WR5] ++ wldrd wR6, [r1, #MMX_WR6] ++ wldrd wR7, [r1, #MMX_WR7] ++ wldrd wR8, [r1, #MMX_WR8] ++ wldrd wR9, [r1, #MMX_WR9] ++ wldrd wR10, [r1, #MMX_WR10] ++ wldrd wR11, [r1, #MMX_WR11] ++ wldrd wR12, [r1, #MMX_WR12] ++ wldrd wR13, [r1, #MMX_WR13] ++ wldrd wR14, [r1, #MMX_WR14] ++ wldrd wR15, [r1, #MMX_WR15] ++ wldrw wCSSF, [r1, #MMX_WCSSF] ++ wldrw wCASF, [r1, #MMX_WCASF] ++ wldrw wCGR0, [r1, #MMX_WCGR0] ++ wldrw wCGR1, [r1, #MMX_WCGR1] ++ wldrw wCGR2, [r1, #MMX_WCGR2] ++ wldrw wCGR3, [r1, #MMX_WCGR3] ++3: ++#endif + ldr r1, [sp, #S_OFF + S_PSR] @ get calling cpsr + ldr lr, [sp, #S_OFF + S_PC]! @ get pc + msr spsr, r1 @ save in spsr_svc +--- 050125/arch/arm/kernel/signal.c Tue Jan 25 00:21:45 2005 ++++ 050218/arch/arm/kernel/signal.c Thu Feb 17 18:22:10 2005 +@@ -198,6 +198,13 @@ + { + int err = 0; + ++#if defined(CONFIG_CPU_PXA27X) ++ int _m; ++ __get_user_error(regs->cpar, &sc->arm_cpar, err); ++ for( _m=0; _m<16*2 + 6 + 1; ++_m ) { ++ __get_user_error(regs->mmx[ _m ], &sc->arm_mmx[ _m ], err); ++ } ++#endif + __get_user_error(regs->ARM_r0, &sc->arm_r0, err); + __get_user_error(regs->ARM_r1, &sc->arm_r1, err); + __get_user_error(regs->ARM_r2, &sc->arm_r2, err); +@@ -312,6 +319,13 @@ + { + int err = 0; + ++#if defined(CONFIG_CPU_PXA27X) ++ int _m; ++ __put_user_error(regs->cpar, &sc->arm_cpar, err); ++ for( _m=0; _m<16*2 + 6 + 1; ++_m ) { ++ __put_user_error(regs->mmx[ _m ], &sc->arm_mmx[ _m ], err); ++ } ++#endif + __put_user_error(regs->ARM_r0, &sc->arm_r0, err); + __put_user_error(regs->ARM_r1, &sc->arm_r1, err); + __put_user_error(regs->ARM_r2, &sc->arm_r2, err); +--- 050125/arch/arm/Makefile Tue Jan 25 00:21:44 2005 ++++ 050218/arch/arm/Makefile Thu Feb 17 09:38:40 2005 +@@ -69,7 +69,8 @@ + + ifeq ($(CONFIG_ARCH_SHARP_SL),y) + CROSS_COMPILE = arm-linux- +-arch-y :=-D__LINUX_ARM_ARCH__=4 -march=armv4 -Wa,-mxscale ++#arch-y :=-D__LINUX_ARM_ARCH__=4 -march=armv4 -Wa,-mxscale ++arch-y :=-D__LINUX_ARM_ARCH__=4 -Wa,-mcpu=iwmmxt + tune-y :=-mtune=strongarm + endif + +@@ -212,7 +213,7 @@ + MACHINE = omaha + endif + +-ifeq ($(CONFIG_XIP_KERNEL),y) ++ifeq ($(CONFIG_XIP_KERNEL),y) + DATAADDR := $(TEXTADDR) + # Replace phys addr with virt addr while keeping offset from base. + # Virt base addr also defined in include/asm-arm/arch-*/hardware.h +--- 050125/fs/binfmt_elf.c Tue Jan 25 00:22:37 2005 ++++ 050218/fs/binfmt_elf.c Thu Feb 17 08:52:54 2005 +@@ -815,6 +815,15 @@ + ELF_PLAT_INIT(regs); + #endif + ++#if defined(CONFIG_CPU_PXA27X) ++ if( elf_ex.e_flags & EF_ARM_SOFT_FLOAT ) { ++ regs->cpar = 0x03; //CP0 CP1 Used. ++ } ++ else { ++ regs->cpar = 0x01; //CP0 Only. ++ } ++#endif ++ + start_thread(regs, elf_entry, bprm->p); + if (current->ptrace & PT_PTRACED) + send_sig(SIGTRAP, current, 0); diff --git a/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P01-C3000-clockup_050221.patch b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P01-C3000-clockup_050221.patch new file mode 100644 index 0000000000..d193f23733 --- /dev/null +++ b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P01-C3000-clockup_050221.patch @@ -0,0 +1,202 @@ +diff -Nur c3000_org/linux/arch/arm/config.in c3000_work/linux/arch/arm/config.in +--- c3000_org/linux/arch/arm/config.in 2004-08-21 09:48:07.000000000 +0900 ++++ c3000_work/linux/arch/arm/config.in 2005-02-21 21:41:40.000000000 +0900 +@@ -195,7 +195,7 @@ + dep_bool ' SHARP Spitz' CONFIG_ARCH_PXA_SPITZ $CONFIG_ARCH_PXA_BOXER + dep_bool ' Using Trial 0' CONFIG_SPITZ_TR0 $CONFIG_ARCH_PXA_SPITZ + dep_bool ' Using Trial 0.5' CONFIG_SPITZ_TR0_5 $CONFIG_ARCH_PXA_SPITZ +-dep_bool ' SHARP Tosa' CONFIG_ARCH_PXA_TOSA ++dep_bool ' SHARP Tosa' CONFIG_ARCH_PXA_TOSA $CONFIG_ARCH_PXA + dep_bool ' SHARP Tosa skipping' CONFIG_ARCH_PXA_TOSA_SKIP $CONFIG_ARCH_PXA_TOSA + + if [ "$CONFIG_SABINAL_DISCOVERY" = "y" -o "$CONFIG_ARCH_PXA_POODLE" = "y" -o \ +@@ -475,6 +475,9 @@ + if [ "$CONFIG_ARCH_PXA_SPITZ" = "y" ]; then + define_bool CONFIG_CPU_PXA27X y + fi ++ if [ "$CONFIG_ARCH_PXA_SPITZ" = "y" ]; then ++ bool 'Use clock change(cccr_change) enable (EXPERIMENTAL)' CONFIG_SL_CCCR_CHANGE ++ fi + if [ "$CONFIG_ARCH_SHARP_SL" = "y" ]; then + define_bool CONFIG_BATT y + fi +@@ -557,7 +560,7 @@ + # bool ' Real-Time Scheduling support' CONFIG_RTSCHED + define_bool CONFIG_RTSCHED y + if [ "$CONFIG_RTSCHED" = "y" ]; then +- int ' MAX PTHREAD (int)' CONFIG_RTH_PTHREAD_MAX 128 ++ int ' MAX PTHREAD (int)' CONFIG_RTH_PTHREAD_MAX 128 + hex ' RT MEMORY SIZE (hex)' CONFIG_RT_MEM_SIZE 80000 + bool ' Real-Time Calibrate support' CONFIG_RTHAL_CALIBRATION + if [ "$CONFIG_RTHAL_CALIBRATION" != "y" ]; then +@@ -615,7 +618,7 @@ + hex 'Compressed ROM boot loader BSS address' CONFIG_ZBOOT_ROM_BSS 0 + else + define_hex CONFIG_ZBOOT_ROM_TEXT 0 +- define_hex CONFIG_ZBOOT_ROM_BSS 0 ++ define_hex CONFIG_ZBOOT_ROM_BSS 0 + fi + + if [ "$CONFIG_ARCH_SA1100" = "y" -o \ +diff -Nur c3000_org/linux/arch/arm/mach-pxa/sharpsl_apm.c c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c +--- c3000_org/linux/arch/arm/mach-pxa/sharpsl_apm.c 2004-11-16 15:31:06.000000000 +0900 ++++ c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c 2005-02-21 21:44:13.000000000 +0900 +@@ -130,6 +130,11 @@ + extern int HWR_flag; + #endif + ++#if defined(CONFIG_SL_CCCR_CHANGE) ++extern unsigned int CCCR_ValAdr_high; ++struct proc_dir_entry *proc_zaurus; ++#endif ++ + #if defined(CONFIG_SABINAL_DISCOVERY) + #define SHARPSL_AC_LINE_STATUS (( ASIC3_GPIO_PSTS_D & AC_IN )? APM_AC_OFFLINE : APM_AC_ONLINE) + #define BACKPACK_IN_DETECT() ( ASIC3_GPIO_PSTS_D & BACKPACK_DETECT ) /* 0: exist , 1: not in */ +@@ -974,6 +979,63 @@ + + EXPORT_SYMBOL(lock_FCS); + ++#if defined(CONFIG_SL_CCCR_CHANGE) ++ ++void write_cccr(int cccr) ++{ ++ printk("Change CCCR = %x.\n",cccr); ++ CCCR_ValAdr_high = cccr; ++ sharpsl_chg_freq = cccr; ++ cpu_xscale_sl_change_speed_high(); ++ cccr_reg = CCCR; ++ printk("Changed CCCR = %x.\n",cccr_reg); ++ return; ++} ++ ++int read_cccr(void) ++{ ++ return CCCR_ValAdr_high; ++} ++ ++static ssize_t cccr_change_read_params(struct file *file, char *buf, ++ size_t nbytes, loff_t *ppos) ++{ ++ char outputbuf[32]; ++ int count; ++ ++ if (*ppos>0) /* Assume reading completed in previous read*/ ++ return 0; ++ count = sprintf(outputbuf, "0x%08X\n", read_cccr()); ++ count++; ++ *ppos += count; ++ if (count>nbytes)/* Assume output can be read at one time */ ++ return -EINVAL; ++ if (copy_to_user(buf, outputbuf, count+1)) ++ return -EFAULT; ++ return count; ++} ++ ++static ssize_t cccr_change_write_params(struct file *file, const char *buf, ++ size_t nbytes, loff_t *ppos) ++{ ++ unsigned int param=0; ++ ++ sscanf(buf,"%x",¶m); ++ if (param) { ++ write_cccr(param); ++ } ++ return nbytes; ++} ++ ++static struct file_operations proc_cccr_change_params_operations = { ++ read:cccr_change_read_params, ++ write:cccr_change_write_params, ++}; ++ ++EXPORT_SYMBOL(read_cccr); ++EXPORT_SYMBOL(write_cccr); ++#endif ++ + #ifdef CONFIG_APM_CPU_IDLE + #ifdef SHARPSL_NEW_IDLE + static int save_icmr; +@@ -2786,6 +2848,7 @@ + struct proc_dir_entry *apm_proc; + struct proc_dir_entry *lock_fcs_proc; + struct proc_dir_entry *power_mode_proc; ++ struct proc_dir_entry *cccr_change_proc; + + apm_info.bios = apm_bios_info; + if (apm_info.bios.version == 0) { +@@ -2822,6 +2885,9 @@ + printk("FCS : CCCR = %x\n",cccr_reg); + #if defined(CONFIG_CPU_PXA27X) + sharpsl_chg_freq = cccr_reg; ++#if defined(CONFIG_SL_CCCR_CHANGE) ++ CCCR_ValAdr_high = sharpsl_chg_freq; ++#endif + #endif + #endif + +@@ -2902,6 +2968,19 @@ + power_mode_proc->proc_fops = &proc_power_mode_params_operations; + } + ++#if defined(CONFIG_SL_CCCR_CHANGE) ++ proc_zaurus = proc_mkdir("zaurus", NULL); ++ if (proc_zaurus == NULL) { ++ unregister_chrdev(228, "zaurus"); ++ printk(KERN_ERR "proc: can't create /proc/zaurus\n"); ++ return -ENOMEM; ++ } ++ ++ cccr_change_proc = create_proc_entry("zaurus/CCCR", 0, NULL); ++ if (cccr_change_proc) { ++ cccr_change_proc->proc_fops = &proc_cccr_change_params_operations; ++ } ++#endif + kernel_thread(apm_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD); + + #if defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_TOSA) +diff -Nur c3000_org/linux/arch/arm/mach-pxa/sharpsl_suspend.S c3000_work/linux/arch/arm/mach-pxa/sharpsl_suspend.S +--- c3000_org/linux/arch/arm/mach-pxa/sharpsl_suspend.S 2004-11-09 14:30:36.000000000 +0900 ++++ c3000_work/linux/arch/arm/mach-pxa/sharpsl_suspend.S 2005-02-21 21:41:40.000000000 +0900 +@@ -64,7 +64,7 @@ + + sleep_param: .word 0 @ virtual address of parameter array + sleep_param_p: .word 0 @ physical address of parameter array +- ++ + IC_BASE: .word io_p2v(0x40D00000) + + +@@ -1109,6 +1109,9 @@ + + #else /* CONFIG_CPU_PXA27X */ + ++#if defined(CONFIG_SL_CCCR_CHANGE) ++ .global CCCR_ValAdr_high ++#endif + CCCR_ValAdr_high: .word 0x02000210 + MSC0_ValAdr_high: .word 0x7ff02DD8 + MSC1_ValAdr_high: .word 0x7ff434D4 +@@ -1305,8 +1308,12 @@ + stmfd sp!, {r0, r1, r2, r3, r4, lr} + + ldr r0, CMR_BASE ++#if defined(CONFIG_SL_CCCR_CHANGE) ++ ldr r1, CCCR_ValAdr_high ++#else + ldr r1, CCCR_ValAdr_208 +- str r1, [r0, #CMR_CCCR] ++#endif ++ str r1, [r0, #CMR_CCCR] + + ldr r0, MD_BASE + ldr r4, MDREFR_ValAdr_208 +@@ -1333,7 +1340,7 @@ + + .align 5 + .text +- ++ + ENTRY(pxa27x_get_ccnt) + mrc p14, 0, r0, c1, c1, 0 + mov pc, lr @ return diff --git a/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02++050226.patch b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02++050226.patch new file mode 100644 index 0000000000..d9c94e5ac1 --- /dev/null +++ b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02++050226.patch @@ -0,0 +1,221 @@ +--- BASE/arch/arm/mach-pxa/pxa27x_power.c Sat Feb 26 01:35:47 2005 ++++ 050226/arch/arm/mach-pxa/pxa27x_power.c Sat Feb 26 02:01:45 2005 +@@ -152,6 +152,10 @@ + + #if defined(CONFIG_CHANGE_CORE_VOLT) + static unsigned char current_core_voltage = 0x1a; ++static unsigned char core_voltage_value = 0; ++extern unsigned int CCCR_ValAdr_high; ++#include ++static DECLARE_MUTEX(core_voltage_sem); + #endif + + void PrintParamTable(void); +@@ -397,9 +401,9 @@ + } + #endif //DEBUG + ++#if !defined(CONFIG_CHANGE_CORE_VOLT) + static void cpu_xscale_voltage_low(void) + { +- + pwr_i2c_open(); + pwr_i2c_write( 0x0c, 0x13 ); // 1.00V - SlewRate 1 + //pwr_i2c_write( 0x0c, 0x12 ); // 0.95V - SlewRate 1 +@@ -409,38 +413,90 @@ + static void cpu_xscale_voltage_high(void) + { + pwr_i2c_open(); +-#if defined(CONFIG_CHANGE_CORE_VOLT) +- pwr_i2c_write( 0x0c, current_core_voltage ); +- pwr_i2c_close(); +- printk("current voltage %x\n", current_core_voltage ); +-#else + pwr_i2c_write( 0x0c, 0x1a ); // 1.35V - SlewRate 1 + pwr_i2c_close(); +-#endif + } ++#endif + + #if defined(CONFIG_CHANGE_CORE_VOLT) ++static void cpu_xscale_voltage_change(unsigned char value) ++{ ++ if(core_voltage_value!=value) { ++ core_voltage_value = value; ++ pwr_i2c_open(); ++ pwr_i2c_write( 0x0c, current_core_voltage ); ++ pwr_i2c_close(); ++ } ++} ++ ++void cpu_xscale_voltage_high(void) ++{ ++ down(&core_voltage_sem); ++ cpu_xscale_voltage_change(current_core_voltage); ++ up(&core_voltage_sem); ++} + void cpu_xscale_voltage_write(unsigned char value) + { + if (value > 0x10 ) + return; + value += 0x10; ++ down(&core_voltage_sem); ++ core_voltage_value = value; + pwr_i2c_open(); + pwr_i2c_write( 0x0c, value ); + pwr_i2c_close(); + current_core_voltage = value; ++ up(&core_voltage_sem); + printk("current voltage %x\n", current_core_voltage ); + + } ++ ++void cpu_xscale_sl_change_speed_high(void) ++{ ++ down(&core_voltage_sem); ++ cpu_xscale_voltage_change(current_core_voltage); ++ _cpu_xscale_sl_change_speed_high(); ++ up(&core_voltage_sem); ++} ++void cpu_xscale_sl_change_speed_low(void) ++{ ++ down(&core_voltage_sem); ++ _cpu_xscale_sl_change_speed_low(); ++ cpu_xscale_voltage_change(0x13); ++ up(&core_voltage_sem); ++} ++void cpu_xscale_sl_change_speed_91(void) ++{ ++ down(&core_voltage_sem); ++ _cpu_xscale_sl_change_speed_91(); ++ core_voltage_value = 0x13; ++ pwr_i2c_open(); ++ pwr_i2c_write( 0x0c, core_voltage_value ); ++ pwr_i2c_close(); ++ up(&core_voltage_sem); ++} ++void cpu_xscale_sl_change_speed_208(void) ++{ ++ down(&core_voltage_sem); ++ core_voltage_value = current_core_voltage; ++ pwr_i2c_open(); ++ pwr_i2c_write( 0x0c, core_voltage_value ); ++ pwr_i2c_close(); ++ _cpu_xscale_sl_change_speed_208(); ++ up(&core_voltage_sem); ++} ++ + #endif + + #if defined(DEBUG) || defined(CONFIG_CHANGE_CORE_VOLT) + unsigned char cpu_xscale_voltage_read(void) + { + unsigned char value=0xff; ++ down(&core_voltage_sem); + pwr_i2c_open(); + pwr_i2c_read( 0x0c, &value ); + pwr_i2c_close(); ++ up(&core_voltage_sem); + return value; + } + #endif +@@ -520,7 +576,7 @@ + sys_ctx.oier = OIER; + + #if defined(CONFIG_CPU_PXA27X) +- if ( CCCR != 0x02000210 ) { ++ if ( CCCR != CCCR_ValAdr_high ) { //0x02000210 ) { + cpu_xscale_sl_change_speed_high(); + } + #endif +@@ -571,8 +627,10 @@ + cpu_xscale_sl_disable_fastbus_mode(); + udelay(1); + cpu_xscale_sl_change_speed_91(); ++#if !defined(CONFIG_CHANGE_CORE_VOLT) + cpu_xscale_voltage_low(); + #endif ++#endif + + /* Scoop suspend */ + sharpsl_check_scoop_reg(); +@@ -790,7 +848,9 @@ + SCP2_REG_GPWR = sys_ctx.scp2_gpwr; + + #if defined(PXA27X_SUSPEND) ++#if !defined(CONFIG_CHANGE_CORE_VOLT) + cpu_xscale_voltage_high(); ++#endif + cpu_xscale_sl_change_speed_208(); + udelay(1); + cpu_xscale_sl_enable_fastbus_mode(); +--- BASE/arch/arm/mach-pxa/sharpsl_apm.c Sat Feb 26 01:35:52 2005 ++++ 050226/arch/arm/mach-pxa/sharpsl_apm.c Sat Feb 26 01:54:16 2005 +@@ -143,6 +143,7 @@ + #if defined(CONFIG_CHANGE_CORE_VOLT) + extern unsigned char cpu_xscale_voltage_read(void); + extern void cpu_xscale_voltage_write(unsigned char); ++extern void cpu_xscale_voltage_high(void); + #endif + + #if defined(CONFIG_SABINAL_DISCOVERY) +@@ -1389,6 +1390,9 @@ + + #if defined(CONFIG_CPU_PXA27X) + #if defined(CONFIG_FB_SHARPSL_PXA) ++#if defined(CONFIG_CHANGE_CORE_VOLT) ++ cpu_xscale_voltage_high(); ++#endif + while (1) { + if (!(LCCR0 & 0x1) || (GPLR(GPIO74_LCD_FCLK) & + GPIO_bit(GPIO74_LCD_FCLK))) +--- BASE/arch/arm/mach-pxa/sharpsl_suspend.S Sat Feb 26 01:35:42 2005 ++++ 050226/arch/arm/mach-pxa/sharpsl_suspend.S Sat Feb 26 01:54:16 2005 +@@ -1119,7 +1119,11 @@ + MDREFR_ValAdr_high_pre: .word 0x001BC00B + MDREFR_ValAdr_high: .word 0x001BC030 + ++#if defined(CONFIG_CHANGE_CORE_VOLT) ++ENTRY(_cpu_xscale_sl_change_speed_high) ++#else + ENTRY(cpu_xscale_sl_change_speed_high) ++#endif + stmfd sp!, {r0, r1, r2, r3, r4, lr} + + ldr r0, CMR_BASE +@@ -1168,7 +1172,11 @@ + @MDREFR_ValAdr_low: .word 0x0019C017 + MDREFR_ValAdr_low: .word 0x001BC017 + ++#if defined(CONFIG_CHANGE_CORE_VOLT) ++ENTRY(_cpu_xscale_sl_change_speed_low) ++#else + ENTRY(cpu_xscale_sl_change_speed_low) ++#endif + stmfd sp!, {r0, r1, r2, r3, r4, lr} + + ldr r0, CMR_BASE +@@ -1261,7 +1269,11 @@ + MDREFR_ValAdr_91_pre: .word 0x001BC00B + MDREFR_ValAdr_91: .word 0x001BC013 + ++#if defined(CONFIG_CHANGE_CORE_VOLT) ++ENTRY(_cpu_xscale_sl_change_speed_91) ++#else + ENTRY(cpu_xscale_sl_change_speed_91) ++#endif + stmfd sp!, {r0, r1, r2, r3, r4, lr} + + ldr r0, CMR_BASE +@@ -1304,7 +1316,11 @@ + MSC2_ValAdr_208: .word 0x7FF034D4 + MDREFR_ValAdr_208: .word 0x001BC00B + ++#if defined(CONFIG_CHANGE_CORE_VOLT) ++ENTRY(_cpu_xscale_sl_change_speed_208) ++#else + ENTRY(cpu_xscale_sl_change_speed_208) ++#endif + stmfd sp!, {r0, r1, r2, r3, r4, lr} + + ldr r0, CMR_BASE diff --git a/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02-C3000-voltage_050221.patch b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02-C3000-voltage_050221.patch new file mode 100644 index 0000000000..1663304aae --- /dev/null +++ b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02-C3000-voltage_050221.patch @@ -0,0 +1,179 @@ +diff -Nur c3000_pre/linux/arch/arm/config.in c3000_work/linux/arch/arm/config.in +--- c3000_pre/linux/arch/arm/config.in 2005-02-21 21:41:40.000000000 +0900 ++++ c3000_work/linux/arch/arm/config.in 2005-02-21 22:25:37.000000000 +0900 +@@ -478,6 +478,9 @@ + if [ "$CONFIG_ARCH_PXA_SPITZ" = "y" ]; then + bool 'Use clock change(cccr_change) enable (EXPERIMENTAL)' CONFIG_SL_CCCR_CHANGE + fi ++ if [ "$CONFIG_SL_CCCR_CHANGE" = "y" ]; then ++ bool 'Core voltage change enable (EXPERIMENTAL)' CONFIG_CHANGE_CORE_VOLT ++ fi + if [ "$CONFIG_ARCH_SHARP_SL" = "y" ]; then + define_bool CONFIG_BATT y + fi +diff -Nur c3000_pre/linux/arch/arm/mach-pxa/pxa27x_power.c c3000_work/linux/arch/arm/mach-pxa/pxa27x_power.c +--- c3000_pre/linux/arch/arm/mach-pxa/pxa27x_power.c 2004-11-04 14:13:54.000000000 +0900 ++++ c3000_work/linux/arch/arm/mach-pxa/pxa27x_power.c 2005-02-21 22:25:37.000000000 +0900 +@@ -150,6 +150,10 @@ + extern int sharpsl_main_bk_flag; + int sharpsl_request_off = 0; + ++#if defined(CONFIG_CHANGE_CORE_VOLT) ++static unsigned char current_core_voltage = 0x1a; ++#endif ++ + void PrintParamTable(void); + + int sharpsl_restart(void) +@@ -324,7 +328,7 @@ + return -1; + } + +-#ifdef DEBUG ++#if defined(DEBUG) || defined(CONFIG_CHANGE_CORE_VOLT) + int pwr_i2c_read( unsigned char device, unsigned char *value ) + { + unsigned long r; +@@ -405,12 +409,33 @@ + static void cpu_xscale_voltage_high(void) + { + pwr_i2c_open(); ++#if defined(CONFIG_CHANGE_CORE_VOLT) ++ pwr_i2c_write( 0x0c, current_core_voltage ); ++ pwr_i2c_close(); ++ printk("current voltage %x\n", current_core_voltage ); ++#else + pwr_i2c_write( 0x0c, 0x1a ); // 1.35V - SlewRate 1 + pwr_i2c_close(); ++#endif ++} ++ ++#if defined(CONFIG_CHANGE_CORE_VOLT) ++void cpu_xscale_voltage_write(unsigned char value) ++{ ++ if (value > 0x10 ) ++ return; ++ value += 0x10; ++ pwr_i2c_open(); ++ pwr_i2c_write( 0x0c, value ); ++ pwr_i2c_close(); ++ current_core_voltage = value; ++ printk("current voltage %x\n", current_core_voltage ); ++ + } ++#endif + +-#ifdef DEBUG +-static unsigned char cpu_xscale_voltage_read(void) ++#if defined(DEBUG) || defined(CONFIG_CHANGE_CORE_VOLT) ++unsigned char cpu_xscale_voltage_read(void) + { + unsigned char value=0xff; + pwr_i2c_open(); +@@ -418,7 +443,9 @@ + pwr_i2c_close(); + return value; + } ++#endif + ++#if defined(DEBUG) + #define CLKCFG(a) asm("mrc p14, 0, %0, C6, C0, 0" : "=r"(a)) + static void __debug_printk(void) + { +diff -Nur c3000_pre/linux/arch/arm/mach-pxa/sharpsl_apm.c c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c +--- c3000_pre/linux/arch/arm/mach-pxa/sharpsl_apm.c 2005-02-21 21:44:13.000000000 +0900 ++++ c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c 2005-02-21 22:29:17.000000000 +0900 +@@ -135,6 +135,11 @@ + struct proc_dir_entry *proc_zaurus; + #endif + ++#if defined(CONFIG_CHANGE_CORE_VOLT) ++extern unsigned char cpu_xscale_voltage_read(void); ++extern void cpu_xscale_voltage_write(unsigned char); ++#endif ++ + #if defined(CONFIG_SABINAL_DISCOVERY) + #define SHARPSL_AC_LINE_STATUS (( ASIC3_GPIO_PSTS_D & AC_IN )? APM_AC_OFFLINE : APM_AC_ONLINE) + #define BACKPACK_IN_DETECT() ( ASIC3_GPIO_PSTS_D & BACKPACK_DETECT ) /* 0: exist , 1: not in */ +@@ -1036,6 +1041,58 @@ + EXPORT_SYMBOL(write_cccr); + #endif + ++#if defined(CONFIG_CHANGE_CORE_VOLT) ++ ++void write_vcore(int vcore) ++{ ++ printk("Change Core voltage = %x.\n", vcore); ++ cpu_xscale_voltage_write(vcore); ++ return; ++} ++ ++int read_vcore(void) ++{ ++ return cpu_xscale_voltage_read(); ++} ++ ++static ssize_t core_volt_read_params(struct file *file, char *buf, ++ size_t nbytes, loff_t *ppos) ++{ ++ char outputbuf[32]; ++ int count; ++ ++ if (*ppos>0) /* Assume reading completed in previous read*/ ++ return 0; ++ count = sprintf(outputbuf, "0x%02X\n", (unsigned int) cpu_xscale_voltage_read() ); ++ count++; ++ *ppos += count; ++ if (count>nbytes)/* Assume output can be read at one time */ ++ return -EINVAL; ++ if (copy_to_user(buf, outputbuf, count+1)) ++ return -EFAULT; ++ return count; ++} ++ ++static ssize_t core_volt_write_params(struct file *file, const char *buf, ++ size_t nbytes, loff_t *ppos) ++{ ++ unsigned int param=0; ++ ++ sscanf(buf,"%x",¶m); ++ if (param) { ++ write_vcore(param); ++ } ++ return nbytes; ++} ++ ++static struct file_operations proc_core_volt_params_operations = { ++ read:core_volt_read_params, ++ write:core_volt_write_params, ++}; ++EXPORT_SYMBOL(read_vcore); ++EXPORT_SYMBOL(write_vcore); ++#endif ++ + #ifdef CONFIG_APM_CPU_IDLE + #ifdef SHARPSL_NEW_IDLE + static int save_icmr; +@@ -2849,6 +2906,7 @@ + struct proc_dir_entry *lock_fcs_proc; + struct proc_dir_entry *power_mode_proc; + struct proc_dir_entry *cccr_change_proc; ++ struct proc_dir_entry *core_volt_proc; + + apm_info.bios = apm_bios_info; + if (apm_info.bios.version == 0) { +@@ -2981,6 +3039,14 @@ + cccr_change_proc->proc_fops = &proc_cccr_change_params_operations; + } + #endif ++ ++#if defined(CONFIG_CHANGE_CORE_VOLT) ++ core_volt_proc = create_proc_entry("zaurus/VCORE", 0, NULL); ++ if (core_volt_proc) { ++ core_volt_proc->proc_fops = &proc_core_volt_params_operations; ++ } ++#endif ++ + kernel_thread(apm_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD); + + #if defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_TOSA) diff --git a/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P03-C3000-SIGSTOP_FIX_041207.patch b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P03-C3000-SIGSTOP_FIX_041207.patch new file mode 100644 index 0000000000..332f52f939 --- /dev/null +++ b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P03-C3000-SIGSTOP_FIX_041207.patch @@ -0,0 +1,195 @@ +diff -Nur c3000_pre/linux/arch/arm/config.in c3000_work/linux/arch/arm/config.in +--- c3000_pre/linux/arch/arm/config.in 2004-12-05 22:17:18.000000000 +0900 ++++ c3000_work/linux/arch/arm/config.in 2004-12-06 01:13:03.000000000 +0900 +@@ -481,6 +481,7 @@ + if [ "$CONFIG_SL_CCCR_CHANGE" = "y" ]; then + bool 'Core voltage change enable (EXPERIMENTAL)' CONFIG_CHANGE_CORE_VOLT + fi ++ bool 'Fix send SIGSTOP to all tasks at suspend (EXPERIMENTAL)' CONFIG_SL_SIGSTOP_FIX + if [ "$CONFIG_ARCH_SHARP_SL" = "y" ]; then + define_bool CONFIG_BATT y + fi +diff -Nur c3000_pre/linux/arch/arm/mach-pxa/sharpsl_apm.c c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c +--- c3000_pre/linux/arch/arm/mach-pxa/sharpsl_apm.c 2004-12-05 22:17:18.000000000 +0900 ++++ c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c 2004-12-06 23:48:35.000000000 +0900 +@@ -75,6 +75,11 @@ + #include + #include + ++extern int errno; ++// unistd.h is included for the configuration ioctl stuff ++#define __KERNEL_SYSCALLS__ 1 ++#include ++ + #ifdef CONFIG_ARCH_SHARP_SL + #include + #include +@@ -363,6 +368,8 @@ + }; + #define ERROR_COUNT (sizeof(error_table)/sizeof(lookup_t)) + ++#define APP_NAME_LIST "/etc/suspend.lst" ++ + /* + * Function + */ +@@ -650,14 +657,81 @@ + struct task_struct* p = NULL; + struct task_struct* tsk = current; + ++#if defined(CONFIG_SL_SIGSTOP_FIX) ++ int fd,x; ++ mm_segment_t old_fs = get_fs (); ++ char line_buffer[256]; ++ + if (! spin_trylock(&lock)) + return; ++ ++ // Try opening the send sig application name list ++ ++ set_fs(KERNEL_DS); ++ fd = open(APP_NAME_LIST, O_RDONLY, 0); ++ set_fs(old_fs); + + /* send signal to all procs except for kernel-threads */ + read_lock(&tasklist_lock); ++ ++ if(fd < 0){ ++ for_each_task(p) { ++ struct siginfo si; ++ ++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p)) ++ continue; ++ if (!strcmp(p->comm,"cardmgr")) { //Send sig to cardmgr ++ si.si_signo = signo; ++ si.si_errno = 0; ++ si.si_code = SI_KERNEL; ++ si.si_pid = tsk->pid; ++ si.si_uid = tsk->uid; ++ send_sig_info(signo, &si, p); ++ } ++ } ++ ++ }else { ++ for(;;){ ++ memset(line_buffer, '\0', 256); ++ set_fs(KERNEL_DS); ++ for (x = 0; x < 256; x++) { ++ if (!read(fd, &line_buffer[x], 1)) ++ goto sig_send_done; ++ if (line_buffer[x] == '\n' || line_buffer[x] == '\r') ++ break; ++ } ++ set_fs(old_fs); ++ ++ for_each_task(p) { ++ struct siginfo si; ++ ++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p)) ++ continue; ++ if (!strncmp(p->comm,line_buffer,strlen(p->comm))) { //Send sig to cardmgr ++// printk ("Send SIG to application\n"); ++ si.si_signo = signo; ++ si.si_errno = 0; ++ si.si_code = SI_KERNEL; ++ si.si_pid = tsk->pid; ++ si.si_uid = tsk->uid; ++ send_sig_info(signo, &si, p); ++ } ++ } ++ } ++ sig_send_done: ++ ++ close(fd); ++ ++ } ++#else ++ if (! spin_trylock(&lock)) ++ return; ++ ++ /* send signal to all procs except for kernel-threads */ ++ read_lock(&tasklist_lock); + for_each_task(p) { + struct siginfo si; +- ++ + if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p)) + continue; + +@@ -667,7 +741,8 @@ + si.si_pid = tsk->pid; + si.si_uid = tsk->uid; + send_sig_info(signo, &si, p); +- } ++ } ++#endif + read_unlock(&tasklist_lock); + + if (signo == SIGSTOP) { +@@ -679,6 +754,58 @@ + schedule(); + set_current_state(state); + ++#if defined(CONFIG_SL_SIGSTOP_FIX) ++ set_fs(KERNEL_DS); ++ fd = open(APP_NAME_LIST, O_RDONLY, 0); ++ set_fs(old_fs); ++ ++ read_lock(&tasklist_lock); ++ if(fd < 0){ ++ for_each_task(p) { ++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p)) ++ continue; ++ if (!strcmp(p->comm,"cardmgr")) { ++// printk ("Check application stopped\n"); ++ ++ if (p->state != TASK_STOPPED) { ++ read_unlock(&tasklist_lock); ++ goto retry; ++ } ++ } ++ } ++ }else { ++ ++ for(;;){ ++ memset(line_buffer, '\0', 256); ++ old_fs = get_fs(); ++ set_fs(KERNEL_DS); ++ for (x = 0; x < 256; x++) { ++ if (!read(fd, &line_buffer[x], 1)) ++ goto sig_stop_done; ++ if (line_buffer[x] == '\n' || line_buffer[x] == '\r') ++ break; ++ } ++ set_fs(old_fs); ++ ++ for_each_task(p) { ++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p)) ++ continue; ++ if (!strncmp(p->comm,line_buffer,strlen(p->comm))) { ++ ++ if (p->state != TASK_STOPPED) { ++ read_unlock(&tasklist_lock); ++ goto retry; ++ } ++ } ++ } ++ } ++ sig_stop_done: ++ close(fd); ++ } ++ ++ read_unlock(&tasklist_lock); ++ } ++#else + read_lock(&tasklist_lock); + for_each_task(p) { + if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p)) +@@ -691,6 +818,7 @@ + } + read_unlock(&tasklist_lock); + } ++#endif + + spin_unlock(&lock); + } diff --git a/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P04-C3000-UNICON_041206.patch b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P04-C3000-UNICON_041206.patch new file mode 100644 index 0000000000..eaa56faf42 --- /dev/null +++ b/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P04-C3000-UNICON_041206.patch @@ -0,0 +1,40089 @@ +diff -Nur c3000_pre/linux/drivers/char/Makefile c3000_work/linux/drivers/char/Makefile +--- c3000_pre/linux/drivers/char/Makefile 2004-08-21 09:48:25.000000000 +0900 ++++ c3000_work/linux/drivers/char/Makefile 2004-12-06 09:25:00.000000000 +0900 +@@ -12,7 +12,8 @@ + # + # This file contains the font map for the default (hardware) font + # +-FONTMAPFILE = cp437.uni ++#FONTMAPFILE = cp437.uni ++FONTMAPFILE = direct.uni + + O_TARGET := char.o + +diff -Nur c3000_pre/linux/drivers/char/console.c c3000_work/linux/drivers/char/console.c +--- c3000_pre/linux/drivers/char/console.c 2004-08-21 09:48:25.000000000 +0900 ++++ c3000_work/linux/drivers/char/console.c 2004-12-06 09:44:28.000000000 +0900 +@@ -88,6 +88,11 @@ + #include + #include + #include ++ ++#ifdef CONFIG_UNICON ++#include ++#endif ++ + #include + #include + #include +@@ -112,7 +117,10 @@ + + #include "console_macros.h" + +- ++#ifdef CONFIG_UNICON ++#define video_erase_char_ext ((video_erase_char)&0xff) ++extern unsigned short translations[][256]; ++#endif + const struct consw *conswitchp; + + /* A bitmap for codes <32. A bit of 1 indicates that the code +@@ -242,6 +250,20 @@ + p = sw->con_screen_pos(vc_cons[currcons].d, offset); + return p; + } ++#ifdef CONFIG_UNICON ++static inline unsigned short *screenpos_ext(int currcons, int offset, int viewed) ++{ ++ unsigned short *p; ++ ++ if (!viewed) ++ p = (unsigned short *)(origin + offset + screenbuf_size); ++ else if (!sw->con_screen_pos) ++ p = (unsigned short *)(visible_origin + offset + screenbuf_size); ++ else ++ p = sw->con_screen_pos(vc_cons[currcons].d, -offset-1); ++ return p; ++} ++#endif + + static inline void scrolldelta(int lines) + { +@@ -268,6 +290,14 @@ + s = (unsigned short *) (origin+video_size_row*(t+nr)); + scr_memcpyw(d, s, (b-t-nr) * video_size_row); + scr_memsetw(d + (b-t-nr) * video_num_columns, video_erase_char, video_size_row*nr); ++ ++#ifdef CONFIG_UNICON ++ d += (screenbuf_size>>1); ++ s += (screenbuf_size>>1); ++ scr_memcpyw(d, s, (b-t-nr) * video_size_row); ++ scr_memsetw(d + (b-t-nr) * video_num_columns, video_erase_char_ext, video_size_row*nr); ++#endif ++ + } + + static void +@@ -286,6 +316,11 @@ + step = video_num_columns * nr; + scr_memmovew(s + step, s, (b-t-nr)*video_size_row); + scr_memsetw(s, video_erase_char, 2*step); ++#ifdef CONFIG_UNICON ++ s += (screenbuf_size>>1); ++ scr_memmovew(s + step, s, (b-t-nr)*video_size_row); ++ scr_memsetw(s, video_erase_char_ext, 2*step); ++#endif + } + + static void do_update_region(int currcons, unsigned long start, int count) +@@ -309,6 +344,10 @@ + int startx = xx; + u16 *q = p; + while (xx < video_num_columns && count) { ++#ifdef CONFIG_UNICON ++ //line by line, so the following putcs will be assured to ++ //handle only in-line string. ++#endif + if (attrib != (scr_readw(p) & 0xff00)) { + if (p > q) + sw->con_putcs(vc_cons[currcons].d, q, p-q, yy, startx); +@@ -438,6 +477,39 @@ + } + + /* used by selection: complement pointer position */ ++#ifdef CONFIG_UNICON ++void complement_pos(int currcons, int offset) ++{ ++ static unsigned short *p = NULL; ++ static unsigned short old = 0; ++ static unsigned short oldx = 0, oldy = 0; ++ static unsigned short *p_ext = NULL; ++ static unsigned short old_ext = 0; ++ ++ if (p) { ++ scr_writew(old, p); ++ //scr_writew(old_ext, p_ext); ++ if (DO_UPDATE) ++ sw->con_putc(vc_cons[currcons].d, (old_ext<<16)| old, oldy, oldx); ++ } ++ if (offset == -1) ++ p = NULL; ++ else { ++ unsigned short new; ++ p = screenpos(currcons, offset, 1); ++ p_ext = screenpos_ext(currcons, offset, 1); ++ old = scr_readw(p); ++ old_ext = scr_readw(p_ext); ++ new = old ^ complement_mask; ++ scr_writew(new, p); ++ if (DO_UPDATE) { ++ oldx = (offset >> 1) % video_num_columns; ++ oldy = (offset >> 1) / video_num_columns; ++ sw->con_putc(vc_cons[currcons].d, (old_ext<<16) | new, oldy, oldx); ++ } ++ } ++} ++#else + void complement_pos(int currcons, int offset) + { + static unsigned short *p; +@@ -464,15 +536,23 @@ + } + } + } +- ++#endif + static void insert_char(int currcons, unsigned int nr) + { + unsigned short *p, *q = (unsigned short *) pos; + + p = q + video_num_columns - nr - x; +- while (--p >= q) ++ while (--p >= q) { + scr_writew(scr_readw(p), p + nr); ++#ifdef CONFIG_UNICON ++ scr_writew(scr_readw(p+(screenbuf_size>>1)),p+(screenbuf_size>>1)+nr); ++#endif ++ } + scr_memsetw(q, video_erase_char, nr*2); ++#ifdef CONFIG_UNICON ++ scr_memsetw(q+(screenbuf_size>>1),video_erase_char_ext,nr*2); ++#endif ++ + need_wrap = 0; + if (DO_UPDATE) { + unsigned short oldattr = attr; +@@ -480,8 +560,9 @@ + video_num_columns-x-nr); + attr = video_erase_char >> 8; + while (nr--) +- sw->con_putc(vc_cons[currcons].d, ++ sw->con_putc(vc_cons[currcons].d, + video_erase_char,y,x+nr); ++ + attr = oldattr; + } + } +@@ -490,12 +571,17 @@ + { + unsigned int i = x; + unsigned short *p = (unsigned short *) pos; +- + while (++i <= video_num_columns - nr) { + scr_writew(scr_readw(p+nr), p); ++#ifdef CONFIG_UNICON ++ scr_writew(scr_readw(p+nr+(screenbuf_size>>1)),p+(screenbuf_size>>1)); ++#endif + p++; + } + scr_memsetw(p, video_erase_char, nr*2); ++#ifdef CONFIG_UNICON ++ scr_memsetw(p+(screenbuf_size>>1), video_erase_char_ext, nr*2); ++#endif + need_wrap = 0; + if (DO_UPDATE) { + unsigned short oldattr = attr; +@@ -504,8 +590,8 @@ + attr = video_erase_char >> 8; + while (nr--) + sw->con_putc(vc_cons[currcons].d, +- video_erase_char, y, +- video_num_columns-1-nr); ++ video_erase_char, y, ++ video_num_columns-1-nr); + attr = oldattr; + } + } +@@ -526,7 +612,11 @@ + if ((type & 0x40) && ((i & 0x700) == ((i & 0x7000) >> 4))) i ^= 0x0700; + scr_writew(i, (u16 *) pos); + if (DO_UPDATE) ++#ifndef CONFIG_UNICON + sw->con_putc(vc_cons[currcons].d, i, y, x); ++#else ++ sw->con_putc(vc_cons[currcons].d, scr_readw((u16 *) pos+ (screenbuf_size>>1))<<16 | (i & 0xffff), y, x); ++#endif + } + + static void hide_cursor(int currcons) +@@ -536,7 +626,11 @@ + if (softcursor_original != -1) { + scr_writew(softcursor_original,(u16 *) pos); + if (DO_UPDATE) ++#ifndef CONFIG_UNICON + sw->con_putc(vc_cons[currcons].d, softcursor_original, y, x); ++#else ++ sw->con_putc(vc_cons[currcons].d, scr_readw((u16 *) pos+ (screenbuf_size>>1))<<16 | softcursor_original, y, x); ++#endif + softcursor_original = -1; + } + sw->con_cursor(vc_cons[currcons].d,CM_ERASE); +@@ -683,7 +777,11 @@ + visual_init(currcons, 1); + if (!*vc_cons[currcons].d->vc_uni_pagedir_loc) + con_set_default_unimap(currcons); ++#ifndef CONFIG_UNICON + q = (long)kmalloc(screenbuf_size, GFP_KERNEL); ++#else ++ q = (long)kmalloc(screenbuf_size*2,GFP_KERNEL); ++#endif + if (!q) { + kfree((char *) p); + vc_cons[currcons].d = NULL; +@@ -725,7 +823,11 @@ + (cc == video_num_columns && ll == video_num_lines)) + newscreens[currcons] = NULL; + else { ++#ifndef CONFIG_UNICON + unsigned short *p = (unsigned short *) kmalloc(ss, GFP_USER); ++#else ++ unsigned short *p = (unsigned short *) kmalloc(ss*2, GFP_USER); ++#endif + if (!p) { + for (i = first; i < currcons; i++) + if (newscreens[i]) +@@ -767,13 +869,23 @@ + + while (ol < scr_end) { + scr_memcpyw((unsigned short *) nl, (unsigned short *) ol, rlth); ++#ifdef CONFIG_UNICON ++ scr_memcpyw((unsigned short *) (nl + ss), (unsigned short*) (ol + oss), rlth); ++#endif + if (rrem) + scr_memsetw((void *)(nl + rlth), video_erase_char, rrem); ++#ifdef CONFIG_UNICON ++ if (rrem) ++ scr_memsetw((void *)(nl + rlth + ss), video_erase_char_ext, rrem); ++#endif + ol += osr; + nl += sr; + } + if (nlend > nl) + scr_memsetw((void *) nl, video_erase_char, nlend - nl); ++#ifdef CONFIG_UNICON ++ scr_memsetw((void *) (nl + ss), video_erase_char_ext, nlend - nl); ++#endif + if (kmalloced) + kfree(screenbuf); + screenbuf = newscreens[currcons]; +@@ -996,6 +1108,9 @@ + return; + } + scr_memsetw(start, video_erase_char, 2*count); ++#ifdef CONFIG_UNICON ++ scr_memsetw(start + (screenbuf_size>>1), video_erase_char_ext, 2*count); ++#endif + need_wrap = 0; + } + +@@ -1030,6 +1145,9 @@ + return; + } + scr_memsetw(start, video_erase_char, 2 * count); ++#ifdef CONFIG_UNICON ++ scr_memsetw(start + (screenbuf_size>>1), video_erase_char_ext, 2*count); ++#endif + need_wrap = 0; + } + +@@ -1042,6 +1160,9 @@ + count = (vpar > video_num_columns-x) ? (video_num_columns-x) : vpar; + + scr_memsetw((unsigned short *) pos, video_erase_char, 2 * count); ++#ifdef CONFIG_UNICON ++ scr_memsetw((unsigned short *) pos + (screenbuf_size>>1), video_erase_char_ext, 2*count); ++#endif + if (DO_UPDATE) + sw->con_clear(vc_cons[currcons].d, y, x, 1, count); + need_wrap = 0; +@@ -1638,7 +1759,13 @@ + if (ques) { + clear_selection(); + if (par[0]) +- complement_mask = par[0]<<8 | par[1]; ++#ifndef CONFIG_UNICON ++ complement_mask = par[0]<<8 | par[1]; ++#else ++ // force the low byte to be zero ++ complement_mask = par[0]<<8; ++#endif ++ + else + complement_mask = s_complement_mask; + return; +@@ -1856,6 +1983,11 @@ + const unsigned char *orig_buf = NULL; + int orig_count; + ++#ifdef CONFIG_UNICON ++#define GB_LEFT 0x8000 ++#define GB_RIGHT 0xc000 ++#endif ++ + if (in_interrupt()) + return count; + +@@ -1996,6 +2128,56 @@ + ((attr << 8) & ~himask) + ((tc & 0x100) ? himask : 0) + (tc & 0xff) : + (attr << 8) + tc, + (u16 *) pos); ++#ifdef CONFIG_UNICON ++#define HIGH_WORD ((u16 *) ((long)pos + screenbuf_size)) ++#define HIGH_WORD_PREV ((u16 *) ((long)pos - 2 + screenbuf_size)) ++#define HIGH_WORD_NEXT ((u16 *) ((long)pos + 2 + screenbuf_size)) ++ /* ++ * following condiction we do not tread the char as ++ * double byte. ++ * 1. default encoding is NULL. The encode module not ++ * install yet. ++ * 2. Current char set is not the default one. We are ++ * possible drawing a table lines right now. ++ * -Chris ++ */ ++ ++ if (doublebyte_default && translate == translations[0] ++ && (pos==origin||!(scr_readw(HIGH_WORD_PREV)&DB_HALF_MASK)) ++ && doublebyte_default->is_left(tc)){ ++ /*possible the left char of the Double Byte ++ , but we don't know yet, because the right ++ char is unknow right now. So mark it as ++ Half char, the possible candidate ++ -Chris ++ */ ++ scr_writew(DB_HALF_MASK,HIGH_WORD); ++ ++ } else if(doublebyte_default&& translate == translations ++ && scr_readw(HIGH_WORD_PREV)==DB_HALF_MASK ++ && doublebyte_default->is_right(tc)) { ++ scr_writew(DB_LEFT|(tc & 0xff),HIGH_WORD_PREV); ++ scr_writew(DB_RIGHT|(scr_readw((u16*)(pos-2))&0xff),HIGH_WORD); ++ if (DO_UPDATE && draw_x < 0) { ++ draw_from = pos-2 ; ++ if (x>0) { ++ draw_x = x-1; ++ } else { ++ draw_to = pos; ++ draw_x = video_num_columns -1; ++ y--; ++ FLUSH ++ y++; ++ draw_x = 0; ++ draw_from = pos; ++ } ++ } ++ } else { ++ /*normal ASCII or table lines, clean hight byte*/ ++ scr_writew(0,HIGH_WORD); ++ } ++ ++#endif + if (DO_UPDATE && draw_x < 0) { + draw_x = x; + draw_from = pos; +@@ -2154,6 +2336,9 @@ + continue; + } + scr_writew((attr << 8) + c, (unsigned short *) pos); ++#ifdef CONFIG_UNICON ++ scr_writew(0,(unsigned short *) pos + (screenbuf_size>>1)); ++#endif + cnt++; + if (myx == video_num_columns - 1) { + need_wrap = 1; +@@ -2510,7 +2695,11 @@ + vt_cons[currcons] = (struct vt_struct *) + alloc_bootmem(sizeof(struct vt_struct)); + visual_init(currcons, 1); ++#ifdef CONFIG_UNICON ++ screenbuf = (unsigned short *) alloc_bootmem(screenbuf_size * 2); ++#else + screenbuf = (unsigned short *) alloc_bootmem(screenbuf_size); ++#endif + kmalloced = 0; + vc_init(currcons, video_num_lines, video_num_columns, + currcons || !sw->con_save_screen); +@@ -2983,7 +3172,12 @@ + gotoxy(currcons, p[0], p[1]); + set_cursor(currcons); + } +- ++#ifdef CONFIG_UNICON ++/* ++Now, the unicon doesn't support vcs! ++To support it, first change the vc_screen.c! ++*/ ++#endif + u16 vcs_scr_readw(int currcons, const u16 *org) + { + if ((unsigned long)org == pos && softcursor_original != -1) +@@ -3025,6 +3219,15 @@ + /* + * Visible symbols for modules + */ ++#ifdef CONFIG_UNICON ++int (*Unicon_fnKeyHook) ++ (struct tty_struct *tty, unsigned char ch, char flag) = NULL; ++int (*Unicon_fnLowerKeyHook) (unsigned char ch) = NULL; ++ ++EXPORT_SYMBOL(Unicon_fnLowerKeyHook); ++EXPORT_SYMBOL(Unicon_fnKeyHook); ++EXPORT_SYMBOL(vc_cons); ++#endif + + EXPORT_SYMBOL(color_table); + EXPORT_SYMBOL(default_red); +diff -Nur c3000_pre/linux/drivers/char/consolemap.c c3000_work/linux/drivers/char/consolemap.c +--- c3000_pre/linux/drivers/char/consolemap.c 2004-08-21 09:48:25.000000000 +0900 ++++ c3000_work/linux/drivers/char/consolemap.c 2004-12-06 09:25:00.000000000 +0900 +@@ -22,7 +22,11 @@ + #include + #include + ++#ifndef CONFIG_UNICON + static unsigned short translations[][256] = { ++#else ++unsigned short translations[][256] = { ++#endif + /* 8-bit Latin-1 mapped to Unicode -- trivial mapping */ + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, +diff -Nur c3000_pre/linux/drivers/char/direct.uni c3000_work/linux/drivers/char/direct.uni +--- c3000_pre/linux/drivers/char/direct.uni 1970-01-01 09:00:00.000000000 +0900 ++++ c3000_work/linux/drivers/char/direct.uni 2004-12-06 09:25:00.000000000 +0900 +@@ -0,0 +1,259 @@ ++0x00 U+0000 ++0x20 U+0020 ++0x21 U+0021 ++0x22 U+0022 ++0x23 U+0023 ++0x24 U+0024 ++0x25 U+0025 ++0x26 U+0026 ++0x27 U+0027 ++0x28 U+0028 ++0x29 U+0029 ++0x2a U+002a ++0x2b U+002b ++0x2c U+002c ++0x2d U+002d ++0x2e U+002e ++0x2f U+002f ++0x30 U+0030 ++0x31 U+0031 ++0x32 U+0032 ++0x33 U+0033 ++0x34 U+0034 ++0x35 U+0035 ++0x36 U+0036 ++0x37 U+0037 ++0x38 U+0038 ++0x39 U+0039 ++0x3a U+003a ++0x3b U+003b ++0x3c U+003c ++0x3d U+003d ++0x3e U+003e ++0x3f U+003f ++0x40 U+0040 ++0x41 U+0041 ++0x42 U+0042 ++0x43 U+0043 ++0x44 U+0044 ++0x45 U+0045 ++0x46 U+0046 ++0x47 U+0047 ++0x48 U+0048 ++0x49 U+0049 ++0x4a U+004a ++0x4b U+004b ++0x4c U+004c ++0x4d U+004d ++0x4e U+004e ++0x4f U+004f ++0x50 U+0050 ++0x51 U+0051 ++0x52 U+0052 ++0x53 U+0053 ++0x54 U+0054 ++0x55 U+0055 ++0x56 U+0056 ++0x57 U+0057 ++0x58 U+0058 ++0x59 U+0059 ++0x5a U+005a ++0x5b U+005b ++0x5c U+005c ++0x5d U+005d ++0x5e U+005e ++0x5f U+005f ++0x60 U+0060 ++0x61 U+0061 ++0x62 U+0062 ++0x63 U+0063 ++0x64 U+0064 ++0x65 U+0065 ++0x66 U+0066 ++0x67 U+0067 ++0x68 U+0068 ++0x69 U+0069 ++0x6a U+006a ++0x6b U+006b ++0x6c U+006c ++0x6d U+006d ++0x6e U+006e ++0x6f U+006f ++0x70 U+0070 ++0x71 U+0071 ++0x72 U+0072 ++0x73 U+0073 ++0x74 U+0074 ++0x75 U+0075 ++0x76 U+0076 ++0x77 U+0077 ++0x78 U+0078 ++0x79 U+0079 ++0x7a U+007a ++0x7b U+007b ++0x7c U+007c ++0x7d U+007d ++0x7e U+007e ++0x7f U+007f ++0x80 U+0080 ++0x81 U+0081 ++0x82 U+0082 ++0x83 U+0083 ++0x84 U+0084 ++0x85 U+0085 ++0x86 U+0086 ++0x87 U+0087 ++0x88 U+0088 ++0x89 U+0089 ++0x8a U+008a ++0x8b U+008b ++0x8c U+008c ++0x8d U+008d ++0x8e U+008e ++0x8f U+008f ++0x90 U+0090 ++0x91 U+0091 ++0x92 U+0092 ++0x93 U+0093 ++0x94 U+0094 ++0x95 U+0095 ++0x96 U+0096 ++0x97 U+0097 ++0x98 U+0098 ++0x99 U+0099 ++0x9a U+009a ++0x9b U+009b ++0x9c U+009c ++0x9d U+009d ++0x9e U+009e ++0x9f U+009f ++0xa0 U+00a0 ++0xa1 U+00a1 ++0xa2 U+00a2 ++0xa3 U+00a3 ++0xa4 U+00a4 ++0xa5 U+00a5 ++0xa6 U+00a6 ++0xa7 U+00a7 ++0xa8 U+00a8 ++0xa9 U+00a9 ++0xaa U+00aa ++0xab U+00ab ++0xac U+00ac ++0xad U+00ad ++0xae U+00ae ++0xaf U+00af ++0xb0 U+00b0 ++0xb1 U+00b1 ++0xb2 U+00b2 ++0xb3 U+00b3 ++0xb4 U+00b4 ++0xb5 U+00b5 ++0xb6 U+00b6 ++0xb7 U+00b7 ++0xb8 U+00b8 ++0xb9 U+00b9 ++0xba U+00ba ++0xbb U+00bb ++0xbc U+00bc ++0xbd U+00bd ++0xbe U+00be ++0xbf U+00bf ++0xc0 U+00c0 ++0xc1 U+00c1 ++0xc2 U+00c2 ++0xc3 U+00c3 ++0xc4 U+00c4 ++0xc5 U+00c5 ++0xc6 U+00c6 ++0xc7 U+00c7 ++0xc8 U+00c8 ++0xc9 U+00c9 ++0xca U+00ca ++0xcb U+00cb ++0xcc U+00cc ++0xcd U+00cd ++0xce U+00ce ++0xcf U+00cf ++0xd0 U+00d0 ++0xd1 U+00d1 ++0xd2 U+00d2 ++0xd3 U+00d3 ++0xd4 U+00d4 ++0xd5 U+00d5 ++0xd6 U+00d6 ++0xd7 U+00d7 ++0xd8 U+00d8 ++0xd9 U+00d9 ++0xda U+00da ++0xdb U+00db ++0xdc U+00dc ++0xdd U+00dd ++0xde U+00de ++0xdf U+00df ++0xe0 U+00e0 ++0xe1 U+00e1 ++0xe2 U+00e2 ++0xe3 U+00e3 ++0xe4 U+00e4 ++0xe5 U+00e5 ++0xe6 U+00e6 ++0xe7 U+00e7 ++0xe8 U+00e8 ++0xe9 U+00e9 ++0xea U+00ea ++0xeb U+00eb ++0xec U+00ec ++0xed U+00ed ++0xee U+00ee ++0xef U+00ef ++0xf0 U+00f0 ++0xf1 U+00f1 ++0xf2 U+00f2 ++0xf3 U+00f3 ++0xf4 U+00f4 ++0xf5 U+00f5 ++0xf6 U+00f6 ++0xf7 U+00f7 ++0xf8 U+00f8 ++0xf9 U+00f9 ++0xfa U+00fa ++0xfb U+00fb ++0xfc U+00fc ++0xfd U+00fd ++0xfe U+00fe ++0xff U+00ff ++0x07 U+2022 ++0x13 U+203c ++0x4b U+212a ++0x1b U+2190 ++0x18 U+2191 ++0x1a U+2192 ++0x19 U+2193 ++0x1d U+2194 ++0x12 U+2195 ++0x17 U+21a8 ++0x1c U+221f ++0x16 U+25ac ++0x1e U+25b2 ++0x10 U+25b6 ++0x10 U+25ba ++0x1f U+25bc ++0x11 U+25c0 ++0x11 U+25c4 ++0x04 U+25c6 ++0x09 U+25cb ++0x08 U+25d8 ++0x0a U+25d9 ++0x01 U+263a ++0x02 U+263b ++0x0f U+263c ++0x0c U+2640 ++0x0b U+2642 ++0x06 U+2660 ++0x05 U+2663 ++0x03 U+2665 ++0x04 U+2666 ++0x0d U+266a ++0x0e U+266b ++0x5f U+f804 +diff -Nur c3000_pre/linux/drivers/char/pc_keyb.c c3000_work/linux/drivers/char/pc_keyb.c +--- c3000_pre/linux/drivers/char/pc_keyb.c 2004-08-21 09:48:25.000000000 +0900 ++++ c3000_work/linux/drivers/char/pc_keyb.c 2004-12-06 09:25:01.000000000 +0900 +@@ -467,14 +467,36 @@ + + static unsigned char kbd_exists = 1; + +-static inline void handle_keyboard_event(unsigned char scancode) ++#ifdef CONFIG_UNICON ++extern int (*Unicon_fnLowerKeyHook) (unsigned char ch); ++extern int (*Unicon_fnKeyHook) (struct tty_struct *tty, \ ++ unsigned char ch, char flag); ++#endif ++static inline int handle_keyboard_event(unsigned char scancode) + { + #ifdef CONFIG_VT + kbd_exists = 1; +- if (do_acknowledge(scancode)) +- handle_scancode(scancode, !(scancode & 0x80)); ++ if (do_acknowledge(scancode)){ ++#ifdef CONFIG_UNICON ++ if (Unicon_fnLowerKeyHook != NULL){ ++ /* return 1 ==> processed by kernel ++ return 0 ==> processed by app */ ++ if (scancode == 0x58){ /* F12 kill unicode */ ++ Unicon_fnKeyHook = NULL; ++ Unicon_fnLowerKeyHook = NULL; ++ return 1; ++ } ++ if ((*Unicon_fnLowerKeyHook) (scancode) == 1) ++ return 1; ++ else ++ handle_scancode(scancode,!(scancode & 0x80)); ++ } else ++#endif ++ handle_scancode(scancode, !(scancode & 0x80)); ++ } + #endif + tasklet_schedule(&keyboard_tasklet); ++ return 0; + } + + /* +@@ -504,7 +526,8 @@ + if (status