summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1998-08-25 09:12:35 +0000
committerRalf Baechle <ralf@linux-mips.org>1998-08-25 09:12:35 +0000
commitc7fc24dc4420057f103afe8fc64524ebc25c5d37 (patch)
tree3682407a599b8f9f03fc096298134cafba1c9b2f /include
parent1d793fade8b063fde3cf275bf1a5c2d381292cd9 (diff)
o Merge with Linux 2.1.116.
o New Newport console code. o New G364 console code.
Diffstat (limited to 'include')
-rw-r--r--include/asm-alpha/core_lca.h (renamed from include/asm-alpha/lca.h)284
-rw-r--r--include/asm-alpha/core_mcpcia.h (renamed from include/asm-alpha/mcpcia.h)562
-rw-r--r--include/asm-alpha/core_pyxis.h (renamed from include/asm-alpha/pyxis.h)630
-rw-r--r--include/asm-alpha/core_t2.h (renamed from include/asm-alpha/t2.h)799
-rw-r--r--include/asm-alpha/core_tsunami.h (renamed from include/asm-alpha/tsunami.h)217
-rw-r--r--include/asm-alpha/delay.h9
-rw-r--r--include/asm-alpha/dma.h22
-rw-r--r--include/asm-alpha/elf.h2
-rw-r--r--include/asm-alpha/floppy.h25
-rw-r--r--include/asm-alpha/hardirq.h1
-rw-r--r--include/asm-alpha/hwrpb.h11
-rw-r--r--include/asm-alpha/init.h6
-rw-r--r--include/asm-alpha/io.h182
-rw-r--r--include/asm-alpha/irq.h51
-rw-r--r--include/asm-alpha/jensen.h220
-rw-r--r--include/asm-alpha/linux_logo.h47
-rw-r--r--include/asm-alpha/machvec.h118
-rw-r--r--include/asm-alpha/md.h13
-rw-r--r--include/asm-alpha/mmu_context.h118
-rw-r--r--include/asm-alpha/page.h87
-rw-r--r--include/asm-alpha/pci.h48
-rw-r--r--include/asm-alpha/pgtable.h343
-rw-r--r--include/asm-alpha/posix_types.h4
-rw-r--r--include/asm-alpha/processor.h37
-rw-r--r--include/asm-alpha/serial.h2
-rw-r--r--include/asm-alpha/siginfo.h1
-rw-r--r--include/asm-alpha/signal.h21
-rw-r--r--include/asm-alpha/smp.h8
-rw-r--r--include/asm-alpha/smp_lock.h120
-rw-r--r--include/asm-alpha/smplock.h49
-rw-r--r--include/asm-alpha/string.h28
-rw-r--r--include/asm-alpha/system.h5
-rw-r--r--include/asm-alpha/timex.h11
-rw-r--r--include/asm-alpha/uaccess.h4
-rw-r--r--include/asm-alpha/unaligned.h39
-rw-r--r--include/asm-alpha/unistd.h172
-rw-r--r--include/asm-alpha/vga.h56
-rw-r--r--include/asm-arm/arch-arc/ide.h5
-rw-r--r--include/asm-arm/arch-arc/io.h13
-rw-r--r--include/asm-arm/arch-arc/irqs.h2
-rw-r--r--include/asm-arm/arch-arc/processor.h7
-rw-r--r--include/asm-arm/arch-arc/serial.h4
-rw-r--r--include/asm-arm/arch-arc/uncompress.h2
-rw-r--r--include/asm-arm/arch-ebsa110/irqs.h3
-rw-r--r--include/asm-arm/arch-ebsa110/processor.h7
-rw-r--r--include/asm-arm/arch-ebsa110/serial.h2
-rw-r--r--include/asm-arm/arch-ebsa285/hardware.h11
-rw-r--r--include/asm-arm/arch-ebsa285/io.h22
-rw-r--r--include/asm-arm/arch-ebsa285/irqs.h3
-rw-r--r--include/asm-arm/arch-ebsa285/mmu.h11
-rw-r--r--include/asm-arm/arch-ebsa285/processor.h7
-rw-r--r--include/asm-arm/arch-ebsa285/serial.h41
-rw-r--r--include/asm-arm/arch-nexuspci/a.out.h2
-rw-r--r--include/asm-arm/arch-nexuspci/dma.h13
-rw-r--r--include/asm-arm/arch-nexuspci/hardware.h24
-rw-r--r--include/asm-arm/arch-nexuspci/io.h143
-rw-r--r--include/asm-arm/arch-nexuspci/irq.h42
-rw-r--r--include/asm-arm/arch-nexuspci/irqs.h32
-rw-r--r--include/asm-arm/arch-nexuspci/mmu.h14
-rw-r--r--include/asm-arm/arch-nexuspci/processor.h7
-rw-r--r--include/asm-arm/arch-nexuspci/shmparam.h2
-rw-r--r--include/asm-arm/arch-nexuspci/system.h4
-rw-r--r--include/asm-arm/arch-nexuspci/time.h32
-rw-r--r--include/asm-arm/arch-nexuspci/timex.h8
-rw-r--r--include/asm-arm/arch-rpc/hardware.h2
-rw-r--r--include/asm-arm/arch-rpc/ide.h5
-rw-r--r--include/asm-arm/arch-rpc/irqs.h8
-rw-r--r--include/asm-arm/arch-rpc/keyboard.h4
-rw-r--r--include/asm-arm/arch-rpc/processor.h7
-rw-r--r--include/asm-arm/arch-rpc/serial.h2
-rw-r--r--include/asm-arm/arch-vnc/a.out.h16
-rw-r--r--include/asm-arm/arch-vnc/dma.h29
-rw-r--r--include/asm-arm/arch-vnc/hardware.h121
-rw-r--r--include/asm-arm/arch-vnc/ide.h1
-rw-r--r--include/asm-arm/arch-vnc/io.h176
-rw-r--r--include/asm-arm/arch-vnc/irq.h106
-rw-r--r--include/asm-arm/arch-vnc/irqs.h63
-rw-r--r--include/asm-arm/arch-vnc/keyboard.h37
-rw-r--r--include/asm-arm/arch-vnc/mm-init.h5
-rw-r--r--include/asm-arm/arch-vnc/mmu.h26
-rw-r--r--include/asm-arm/arch-vnc/oldlatches.h9
-rw-r--r--include/asm-arm/arch-vnc/processor.h31
-rw-r--r--include/asm-arm/arch-vnc/serial.h43
-rw-r--r--include/asm-arm/arch-vnc/shmparam.h5
-rw-r--r--include/asm-arm/arch-vnc/system.h24
-rw-r--r--include/asm-arm/arch-vnc/time.h40
-rw-r--r--include/asm-arm/arch-vnc/timex.h13
-rw-r--r--include/asm-arm/arch-vnc/uncompress.h33
-rw-r--r--include/asm-arm/bitops.h21
-rw-r--r--include/asm-arm/checksum.h110
-rw-r--r--include/asm-arm/ecard.h2
-rw-r--r--include/asm-arm/elf.h18
-rw-r--r--include/asm-arm/fiq.h32
-rw-r--r--include/asm-arm/floppy.h27
-rw-r--r--include/asm-arm/hardirq.h6
-rw-r--r--include/asm-arm/init.h27
-rw-r--r--include/asm-arm/io.h48
-rw-r--r--include/asm-arm/ioctl.h3
-rw-r--r--include/asm-arm/linux_logo.h27
-rw-r--r--include/asm-arm/namei.h2
-rw-r--r--include/asm-arm/page.h2
-rw-r--r--include/asm-arm/pgtable.h2
-rw-r--r--include/asm-arm/posix_types.h54
-rw-r--r--include/asm-arm/proc-armo/mm-init.h74
-rw-r--r--include/asm-arm/proc-armo/page.h12
-rw-r--r--include/asm-arm/proc-armo/pgtable.h17
-rw-r--r--include/asm-arm/proc-armo/uaccess.h2
-rw-r--r--include/asm-arm/proc-armv/mm-init.h10
-rw-r--r--include/asm-arm/proc-armv/pgtable.h49
-rw-r--r--include/asm-arm/processor.h10
-rw-r--r--include/asm-arm/procinfo.h26
-rw-r--r--include/asm-arm/siginfo.h1
-rw-r--r--include/asm-arm/signal.h18
-rw-r--r--include/asm-arm/smp.h4
-rw-r--r--include/asm-arm/smp_lock.h17
-rw-r--r--include/asm-arm/smplock.h49
-rw-r--r--include/asm-arm/spinlock.h6
-rw-r--r--include/asm-arm/stat.h36
-rw-r--r--include/asm-arm/system.h2
-rw-r--r--include/asm-generic/bitops.h22
-rw-r--r--include/asm-generic/smplock.h49
-rw-r--r--include/asm-i386/bitops.h30
-rw-r--r--include/asm-i386/bugs.h122
-rw-r--r--include/asm-i386/current.h17
-rw-r--r--include/asm-i386/debugreg.h (renamed from include/linux/debugreg.h)15
-rw-r--r--include/asm-i386/elf.h2
-rw-r--r--include/asm-i386/fixmap.h82
-rw-r--r--include/asm-i386/hardirq.h7
-rw-r--r--include/asm-i386/ioctls.h2
-rw-r--r--include/asm-i386/irq.h13
-rw-r--r--include/asm-i386/linux_logo.h47
-rw-r--r--include/asm-i386/math_emu.h4
-rw-r--r--include/asm-i386/md.h13
-rw-r--r--include/asm-i386/pgtable.h213
-rw-r--r--include/asm-i386/posix_types.h4
-rw-r--r--include/asm-i386/processor.h138
-rw-r--r--include/asm-i386/siginfo.h1
-rw-r--r--include/asm-i386/signal.h11
-rw-r--r--include/asm-i386/smp.h20
-rw-r--r--include/asm-i386/smp_lock.h91
-rw-r--r--include/asm-i386/smplock.h59
-rw-r--r--include/asm-i386/softirq.h2
-rw-r--r--include/asm-i386/spinlock.h39
-rw-r--r--include/asm-i386/string.h2
-rw-r--r--include/asm-i386/system.h138
-rw-r--r--include/asm-i386/termios.h1
-rw-r--r--include/asm-i386/timex.h15
-rw-r--r--include/asm-i386/unistd.h8
-rw-r--r--include/asm-i386/user.h2
-rw-r--r--include/asm-i386/vga.h20
-rw-r--r--include/asm-i386/vm86.h4
-rw-r--r--include/asm-m68k/adb.h75
-rw-r--r--include/asm-m68k/amigahw.h2
-rw-r--r--include/asm-m68k/amigardb.h126
-rw-r--r--include/asm-m68k/amigayle.h105
-rw-r--r--include/asm-m68k/amipcmcia.h110
-rw-r--r--include/asm-m68k/atari_SCCserial.h3
-rw-r--r--include/asm-m68k/atari_mouse.h20
-rw-r--r--include/asm-m68k/bitops.h28
-rw-r--r--include/asm-m68k/blinken.h27
-rw-r--r--include/asm-m68k/bootinfo.h54
-rw-r--r--include/asm-m68k/bvme6000hw.h129
-rw-r--r--include/asm-m68k/checksum.h4
-rw-r--r--include/asm-m68k/entry.h3
-rw-r--r--include/asm-m68k/hardirq.h2
-rw-r--r--include/asm-m68k/hwtest.h15
-rw-r--r--include/asm-m68k/ide.h182
-rw-r--r--include/asm-m68k/io.h6
-rw-r--r--include/asm-m68k/keyboard.h2
-rw-r--r--include/asm-m68k/kgdb.h83
-rw-r--r--include/asm-m68k/linux_logo.h46
-rw-r--r--include/asm-m68k/machdep.h1
-rw-r--r--include/asm-m68k/machw.h48
-rw-r--r--include/asm-m68k/macintosh.h10
-rw-r--r--include/asm-m68k/macints.h50
-rw-r--r--include/asm-m68k/md.h13
-rw-r--r--include/asm-m68k/mvme16xhw.h106
-rw-r--r--include/asm-m68k/page.h3
-rw-r--r--include/asm-m68k/pgtable.h207
-rw-r--r--include/asm-m68k/posix_types.h4
-rw-r--r--include/asm-m68k/processor.h12
-rw-r--r--include/asm-m68k/serial.h2
-rw-r--r--include/asm-m68k/setup.h28
-rw-r--r--include/asm-m68k/siginfo.h1
-rw-r--r--include/asm-m68k/signal.h21
-rw-r--r--include/asm-m68k/smp_lock.h14
-rw-r--r--include/asm-m68k/smplock.h49
-rw-r--r--include/asm-m68k/softirq.h1
-rw-r--r--include/asm-m68k/stat.h38
-rw-r--r--include/asm-m68k/system.h2
-rw-r--r--include/asm-m68k/termios.h1
-rw-r--r--include/asm-m68k/timex.h15
-rw-r--r--include/asm-m68k/uaccess.h11
-rw-r--r--include/asm-m68k/unistd.h22
-rw-r--r--include/asm-m68k/xstat.h (renamed from include/asm-arm/xstat.h)2
-rw-r--r--include/asm-mips/bitops.h21
-rw-r--r--include/asm-mips/bootinfo.h32
-rw-r--r--include/asm-mips/current.h14
-rw-r--r--include/asm-mips/gdb-stub.h14
-rw-r--r--include/asm-mips/hardirq.h15
-rw-r--r--include/asm-mips/ioctls.h5
-rw-r--r--include/asm-mips/jazz.h22
-rw-r--r--include/asm-mips/keyboard.h16
-rw-r--r--include/asm-mips/linux_logo.h69
-rw-r--r--include/asm-mips/md.h14
-rw-r--r--include/asm-mips/mipsregs.h35
-rw-r--r--include/asm-mips/ncr53c94.h121
-rw-r--r--include/asm-mips/newport.h586
-rw-r--r--include/asm-mips/offset.h51
-rw-r--r--include/asm-mips/page.h9
-rw-r--r--include/asm-mips/pci.h4
-rw-r--r--include/asm-mips/pgtable.h218
-rw-r--r--include/asm-mips/pica.h181
-rw-r--r--include/asm-mips/posix_types.h9
-rw-r--r--include/asm-mips/processor.h41
-rw-r--r--include/asm-mips/serial.h5
-rw-r--r--include/asm-mips/sgidefs.h2
-rw-r--r--include/asm-mips/siginfo.h1
-rw-r--r--include/asm-mips/signal.h29
-rw-r--r--include/asm-mips/smp_lock.h26
-rw-r--r--include/asm-mips/smplock.h52
-rw-r--r--include/asm-mips/string.h12
-rw-r--r--include/asm-mips/system.h8
-rw-r--r--include/asm-mips/termios.h1
-rw-r--r--include/asm-mips/timex.h20
-rw-r--r--include/asm-mips/unistd.h18
-rw-r--r--include/asm-mips/vga.h35
-rw-r--r--include/asm-mips/watch.h13
-rw-r--r--include/asm-ppc/amigahw.h1
-rw-r--r--include/asm-ppc/amigaints.h1
-rw-r--r--include/asm-ppc/amigappc.h69
-rw-r--r--include/asm-ppc/bitops.h34
-rw-r--r--include/asm-ppc/bootinfo.h375
-rw-r--r--include/asm-ppc/byteorder.h33
-rw-r--r--include/asm-ppc/cache.h11
-rw-r--r--include/asm-ppc/cuda.h1
-rw-r--r--include/asm-ppc/delay.h2
-rw-r--r--include/asm-ppc/dma.h1
-rw-r--r--include/asm-ppc/ide.h26
-rw-r--r--include/asm-ppc/init.h55
-rw-r--r--include/asm-ppc/io.h153
-rw-r--r--include/asm-ppc/irq.h35
-rw-r--r--include/asm-ppc/keyboard.h8
-rw-r--r--include/asm-ppc/linux_logo.h1443
-rw-r--r--include/asm-ppc/machdep.h12
-rw-r--r--include/asm-ppc/page.h3
-rw-r--r--include/asm-ppc/pgtable.h92
-rw-r--r--include/asm-ppc/pmu.h26
-rw-r--r--include/asm-ppc/posix_types.h3
-rw-r--r--include/asm-ppc/processor.h19
-rw-r--r--include/asm-ppc/residual.h15
-rw-r--r--include/asm-ppc/serial.h123
-rw-r--r--include/asm-ppc/setup.h9
-rw-r--r--include/asm-ppc/siginfo.h1
-rw-r--r--include/asm-ppc/signal.h8
-rw-r--r--include/asm-ppc/smp_lock.h49
-rw-r--r--include/asm-ppc/smplock.h49
-rw-r--r--include/asm-ppc/softirq.h4
-rw-r--r--include/asm-ppc/spinlock.h3
-rw-r--r--include/asm-ppc/stat.h36
-rw-r--r--include/asm-ppc/system.h27
-rw-r--r--include/asm-ppc/timex.h15
-rw-r--r--include/asm-ppc/traps.h1
-rw-r--r--include/asm-ppc/unistd.h239
-rw-r--r--include/asm-ppc/vc_ioctl.h43
-rw-r--r--include/asm-ppc/vga.h29
-rw-r--r--include/asm-ppc/xstat.h35
-rw-r--r--include/asm-sparc/ap1000/pgtapmmu.h1
-rw-r--r--include/asm-sparc/asm_offsets.h436
-rw-r--r--include/asm-sparc/audioio.h416
-rw-r--r--include/asm-sparc/bitops.h23
-rw-r--r--include/asm-sparc/dma.h4
-rw-r--r--include/asm-sparc/elf.h2
-rw-r--r--include/asm-sparc/fbio.h5
-rw-r--r--include/asm-sparc/irq.h21
-rw-r--r--include/asm-sparc/linux_logo.h1918
-rw-r--r--include/asm-sparc/mostek.h45
-rw-r--r--include/asm-sparc/page.h2
-rw-r--r--include/asm-sparc/pgtable.h6
-rw-r--r--include/asm-sparc/pgtsrmmu.h3
-rw-r--r--include/asm-sparc/pgtsun4.h3
-rw-r--r--include/asm-sparc/pgtsun4c.h3
-rw-r--r--include/asm-sparc/processor.h15
-rw-r--r--include/asm-sparc/sbus.h4
-rw-r--r--include/asm-sparc/siginfo.h3
-rw-r--r--include/asm-sparc/signal.h13
-rw-r--r--include/asm-sparc/smp.h21
-rw-r--r--include/asm-sparc/smp_lock.h89
-rw-r--r--include/asm-sparc/smplock.h49
-rw-r--r--include/asm-sparc/socket.h5
-rw-r--r--include/asm-sparc/softirq.h1
-rw-r--r--include/asm-sparc/spinlock.h13
-rw-r--r--include/asm-sparc/stat.h38
-rw-r--r--include/asm-sparc/sun4paddr.h43
-rw-r--r--include/asm-sparc/svr4.h2
-rw-r--r--include/asm-sparc/system.h2
-rw-r--r--include/asm-sparc/termios.h2
-rw-r--r--include/asm-sparc/timer.h2
-rw-r--r--include/asm-sparc/timex.h15
-rw-r--r--include/asm-sparc/unistd.h16
-rw-r--r--include/asm-sparc/xstat.h35
-rw-r--r--include/asm-sparc64/asm_offsets.h496
-rw-r--r--include/asm-sparc64/audioio.h416
-rw-r--r--include/asm-sparc64/bitops.h52
-rw-r--r--include/asm-sparc64/dma.h4
-rw-r--r--include/asm-sparc64/ebus.h9
-rw-r--r--include/asm-sparc64/envctrl.h17
-rw-r--r--include/asm-sparc64/fbio.h5
-rw-r--r--include/asm-sparc64/firehose.h4
-rw-r--r--include/asm-sparc64/floppy.h122
-rw-r--r--include/asm-sparc64/fpumacro.h5
-rw-r--r--include/asm-sparc64/ide.h57
-rw-r--r--include/asm-sparc64/io.h27
-rw-r--r--include/asm-sparc64/irq.h54
-rw-r--r--include/asm-sparc64/linux_logo.h1785
-rw-r--r--include/asm-sparc64/mmu_context.h66
-rw-r--r--include/asm-sparc64/page.h9
-rw-r--r--include/asm-sparc64/pbm.h47
-rw-r--r--include/asm-sparc64/pgtable.h361
-rw-r--r--include/asm-sparc64/posix_types.h4
-rw-r--r--include/asm-sparc64/processor.h73
-rw-r--r--include/asm-sparc64/sbus.h4
-rw-r--r--include/asm-sparc64/siginfo.h1
-rw-r--r--include/asm-sparc64/signal.h19
-rw-r--r--include/asm-sparc64/smp.h25
-rw-r--r--include/asm-sparc64/smp_lock.h87
-rw-r--r--include/asm-sparc64/smplock.h49
-rw-r--r--include/asm-sparc64/socket.h5
-rw-r--r--include/asm-sparc64/softirq.h1
-rw-r--r--include/asm-sparc64/spinlock.h9
-rw-r--r--include/asm-sparc64/spitfire.h6
-rw-r--r--include/asm-sparc64/stat.h52
-rw-r--r--include/asm-sparc64/string.h4
-rw-r--r--include/asm-sparc64/svr4.h2
-rw-r--r--include/asm-sparc64/system.h65
-rw-r--r--include/asm-sparc64/termios.h2
-rw-r--r--include/asm-sparc64/timex.h15
-rw-r--r--include/asm-sparc64/ttable.h14
-rw-r--r--include/asm-sparc64/uaccess.h4
-rw-r--r--include/asm-sparc64/unistd.h16
-rw-r--r--include/asm-sparc64/vaddrs.h18
-rw-r--r--include/asm-sparc64/vga.h30
-rw-r--r--include/asm-sparc64/visasm.h62
-rw-r--r--include/asm-sparc64/xstat.h58
-rw-r--r--include/linux/adfs_fs.h22
-rw-r--r--include/linux/affs_fs.h3
-rw-r--r--include/linux/amifd.h (renamed from include/asm-m68k/amifd.h)4
-rw-r--r--include/linux/amifdreg.h (renamed from include/asm-m68k/amifdreg.h)0
-rw-r--r--include/linux/arcdevice.h5
-rw-r--r--include/linux/atalk.h20
-rw-r--r--include/linux/atari_rootsec.h34
-rw-r--r--include/linux/ax25.h14
-rw-r--r--include/linux/bitops.h72
-rw-r--r--include/linux/blk.h146
-rw-r--r--include/linux/bpqether.h2
-rw-r--r--include/linux/byteorder/generic.h2
-rw-r--r--include/linux/byteorder/swab.h2
-rw-r--r--include/linux/capability.h2
-rw-r--r--include/linux/coda.h6
-rw-r--r--include/linux/coda_linux.h1
-rw-r--r--include/linux/coda_psdev.h2
-rw-r--r--include/linux/console.h57
-rw-r--r--include/linux/console_struct.h175
-rw-r--r--include/linux/consolemap.h7
-rw-r--r--include/linux/cyclades.h48
-rw-r--r--include/linux/dcache.h11
-rw-r--r--include/linux/delay.h23
-rw-r--r--include/linux/devpts_fs.h5
-rw-r--r--include/linux/dio.h204
-rw-r--r--include/linux/efs_fs.h6
-rw-r--r--include/linux/efs_fs_i.h11
-rw-r--r--include/linux/efs_fs_sb.h2
-rw-r--r--include/linux/elf.h20
-rw-r--r--include/linux/fb.h122
-rw-r--r--include/linux/fd.h4
-rw-r--r--include/linux/fs.h21
-rw-r--r--include/linux/genhd.h1
-rw-r--r--include/linux/hayesesp.h127
-rw-r--r--include/linux/hdlcdrv.h45
-rw-r--r--include/linux/hippidevice.h56
-rw-r--r--include/linux/i2c.h166
-rw-r--r--include/linux/if_ether.h1
-rw-r--r--include/linux/if_fddi.h21
-rw-r--r--include/linux/if_hippi.h157
-rw-r--r--include/linux/if_ppp.h20
-rw-r--r--include/linux/if_pppvar.h127
-rw-r--r--include/linux/if_shaper.h3
-rw-r--r--include/linux/if_tr.h41
-rw-r--r--include/linux/if_wic.h102
-rw-r--r--include/linux/in6.h1
-rw-r--r--include/linux/in_route.h1
-rw-r--r--include/linux/init.h23
-rw-r--r--include/linux/interrupt.h9
-rw-r--r--include/linux/ip_fw.h313
-rw-r--r--include/linux/ipx.h3
-rw-r--r--include/linux/iso_fs.h4
-rw-r--r--include/linux/iso_fs_sb.h7
-rw-r--r--include/linux/joystick.h46
-rw-r--r--include/linux/kbd_kern.h23
-rw-r--r--include/linux/kd.h43
-rw-r--r--include/linux/kernel_stat.h3
-rw-r--r--include/linux/keyboard.h1
-rw-r--r--include/linux/linux_logo.h1444
-rw-r--r--include/linux/loop.h3
-rw-r--r--include/linux/lp.h2
-rw-r--r--include/linux/lp_m68k.h4
-rw-r--r--include/linux/major.h13
-rw-r--r--include/linux/md.h20
-rw-r--r--include/linux/minix_fs.h2
-rw-r--r--include/linux/minix_fs_sb.h5
-rw-r--r--include/linux/mm.h42
-rw-r--r--include/linux/mount.h40
-rw-r--r--include/linux/msdos_fs_i.h2
-rw-r--r--include/linux/nbd.h37
-rw-r--r--include/linux/netdevice.h16
-rw-r--r--include/linux/nfsd/export.h6
-rw-r--r--include/linux/nfsd/nfsd.h3
-rw-r--r--include/linux/nfsd/nfsfh.h37
-rw-r--r--include/linux/nfsd/syscall.h21
-rw-r--r--include/linux/openpic.h16
-rw-r--r--include/linux/parport.h32
-rw-r--r--include/linux/parport_pc.h30
-rw-r--r--include/linux/pci.h179
-rw-r--r--include/linux/personality.h7
-rw-r--r--include/linux/pg.h63
-rw-r--r--include/linux/poll.h4
-rw-r--r--include/linux/proc_fs.h19
-rw-r--r--include/linux/quota.h94
-rw-r--r--include/linux/quotaops.h140
-rw-r--r--include/linux/radio.h134
-rw-r--r--include/linux/raid1.h2
-rw-r--r--include/linux/raid5.h2
-rw-r--r--include/linux/random.h8
-rw-r--r--include/linux/rtnetlink.h4
-rw-r--r--include/linux/sched.h93
-rw-r--r--include/linux/sdla_x25.h36
-rw-r--r--include/linux/selection.h269
-rw-r--r--include/linux/serial_reg.h2
-rw-r--r--include/linux/signal.h2
-rw-r--r--include/linux/simp.h39
-rw-r--r--include/linux/skbuff.h20
-rw-r--r--include/linux/smp.h7
-rw-r--r--include/linux/smp_lock.h13
-rw-r--r--include/linux/socket.h14
-rw-r--r--include/linux/sound.h13
-rw-r--r--include/linux/soundcard.h13
-rw-r--r--include/linux/stat.h4
-rw-r--r--include/linux/sunrpc/clnt.h3
-rw-r--r--include/linux/sunrpc/sched.h6
-rw-r--r--include/linux/sunrpc/xprt.h3
-rw-r--r--include/linux/swap.h22
-rw-r--r--include/linux/sysctl.h28
-rw-r--r--include/linux/timer.h18
-rw-r--r--include/linux/timex.h21
-rw-r--r--include/linux/trdevice.h1
-rw-r--r--include/linux/tty.h66
-rw-r--r--include/linux/tty_driver.h1
-rw-r--r--include/linux/ufs_fs.h296
-rw-r--r--include/linux/ufs_fs_i.h6
-rw-r--r--include/linux/ufs_fs_sb.h231
-rw-r--r--include/linux/umsdos_fs.h179
-rw-r--r--include/linux/umsdos_fs.p16
-rw-r--r--include/linux/umsdos_fs_i.h93
-rw-r--r--include/linux/utsname.h1
-rw-r--r--include/linux/videodev.h23
-rw-r--r--include/linux/videotext.h2
-rw-r--r--include/linux/vmalloc.h15
-rw-r--r--include/linux/vt_buffer.h86
-rw-r--r--include/linux/vt_kern.h62
-rw-r--r--include/linux/wavefront.h670
-rw-r--r--include/linux/zorro.h127
-rw-r--r--include/net/ip.h6
-rw-r--r--include/net/ip6_fib.h4
-rw-r--r--include/net/ip6_route.h1
-rw-r--r--include/net/ip_masq.h5
-rw-r--r--include/net/ipv6.h40
-rw-r--r--include/net/ndisc.h7
-rw-r--r--include/net/netbeui.h150
-rw-r--r--include/net/p8022tr.h8
-rw-r--r--include/net/p8022trcall.h3
-rw-r--r--include/net/sock.h17
-rw-r--r--include/net/tcp.h17
-rw-r--r--include/net/x25.h2
483 files changed, 18386 insertions, 10619 deletions
diff --git a/include/asm-alpha/lca.h b/include/asm-alpha/core_lca.h
index f1f8a1ad7..bce449fa4 100644
--- a/include/asm-alpha/lca.h
+++ b/include/asm-alpha/core_lca.h
@@ -1,6 +1,10 @@
#ifndef __ALPHA_LCA__H__
#define __ALPHA_LCA__H__
+#include <linux/config.h>
+#include <asm/system.h>
+#include <asm/compiler.h>
+
/*
* Low Cost Alpha (LCA) definitions (these apply to 21066 and 21068,
* for example).
@@ -52,21 +56,16 @@
* ugh).
*/
-#include <linux/config.h>
-#include <asm/system.h>
-
-#ifdef CONFIG_ALPHA_SRM_SETUP
-/* if we are using the SRM PCI setup, we'll need to use variables instead */
-#define LCA_DMA_WIN_BASE_DEFAULT (1024*1024*1024)
-#define LCA_DMA_WIN_SIZE_DEFAULT (1024*1024*1024)
-
-extern unsigned int LCA_DMA_WIN_BASE;
-extern unsigned int LCA_DMA_WIN_SIZE;
+#define LCA_DMA_WIN_BASE_DEFAULT (1024*1024*1024)
+#define LCA_DMA_WIN_SIZE_DEFAULT (1024*1024*1024)
-#else /* SRM_SETUP */
-#define LCA_DMA_WIN_BASE (1024*1024*1024)
-#define LCA_DMA_WIN_SIZE (1024*1024*1024)
-#endif /* SRM_SETUP */
+#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SRM_SETUP)
+#define LCA_DMA_WIN_BASE alpha_mv.dma_win_base
+#define LCA_DMA_WIN_SIZE alpha_mv.dma_win_size
+#else
+#define LCA_DMA_WIN_BASE LCA_DMA_WIN_BASE_DEFAULT
+#define LCA_DMA_WIN_SIZE LCA_DMA_WIN_SIZE_DEFAULT
+#endif
/*
* Memory Controller registers:
@@ -139,7 +138,7 @@ extern unsigned int LCA_DMA_WIN_SIZE;
#define LCA_IOC_STAT0_P_NBR_SHIFT 13
#define LCA_IOC_STAT0_P_NBR_MASK 0x7ffff
-#define HAE_ADDRESS LCA_IOC_HAE
+#define LCA_HAE_ADDRESS LCA_IOC_HAE
/* LCA PMR Power Management register defines */
#define LCA_PMR_ADDR (IDENT_ADDR + 0x120000098UL)
@@ -147,43 +146,87 @@ extern unsigned int LCA_DMA_WIN_SIZE;
#define LCA_PMR_ODIV 0x38 /* Override clock divisor */
#define LCA_PMR_INTO 0x40 /* Interrupt override */
#define LCA_PMR_DMAO 0x80 /* DMA override */
-#define LCA_PMR_OCCEB 0xffff0000L /* Override cycle counter - even
- bits */
-#define LCA_PMR_OCCOB 0xffff000000000000L /* Override cycle counter - even
- bits */
+#define LCA_PMR_OCCEB 0xffff0000L /* Override cycle counter - even bits */
+#define LCA_PMR_OCCOB 0xffff000000000000L /* Override cycle counter - even bits */
#define LCA_PMR_PRIMARY_MASK 0xfffffffffffffff8
+
/* LCA PMR Macros */
-#define READ_PMR (*(volatile unsigned long *)LCA_PMR_ADDR)
-#define WRITE_PMR(d) (*((volatile unsigned long *)LCA_PMR_ADDR) = (d))
+#define LCA_READ_PMR (*(volatile unsigned long *)LCA_PMR_ADDR)
+#define LCA_WRITE_PMR(d) (*((volatile unsigned long *)LCA_PMR_ADDR) = (d))
-#define GET_PRIMARY(r) ((r) & LCA_PMR_PDIV)
-#define GET_OVERRIDE(r) (((r) >> 3) & LCA_PMR_PDIV)
-#define SET_PRIMARY_CLOCK(r, c) ((r) = (((r) & LCA_PMR_PRIMARY_MASK) | (c)))
+#define LCA_GET_PRIMARY(r) ((r) & LCA_PMR_PDIV)
+#define LCA_GET_OVERRIDE(r) (((r) >> 3) & LCA_PMR_PDIV)
+#define LCA_SET_PRIMARY_CLOCK(r, c) ((r) = (((r) & LCA_PMR_PRIMARY_MASK)|(c)))
/* LCA PMR Divisor values */
-#define DIV_1 0x0
-#define DIV_1_5 0x1
-#define DIV_2 0x2
-#define DIV_4 0x3
-#define DIV_8 0x4
-#define DIV_16 0x5
-#define DIV_MIN DIV_1
-#define DIV_MAX DIV_16
+#define LCA_PMR_DIV_1 0x0
+#define LCA_PMR_DIV_1_5 0x1
+#define LCA_PMR_DIV_2 0x2
+#define LCA_PMR_DIV_4 0x3
+#define LCA_PMR_DIV_8 0x4
+#define LCA_PMR_DIV_16 0x5
+#define LCA_PMR_DIV_MIN DIV_1
+#define LCA_PMR_DIV_MAX DIV_16
+
+
+/*
+ * Data structure for handling LCA machine checks. Correctable errors
+ * result in a short logout frame, uncorrectable ones in a long one.
+ */
+struct el_lca_mcheck_short {
+ struct el_common h; /* common logout header */
+ unsigned long esr; /* error-status register */
+ unsigned long ear; /* error-address register */
+ unsigned long dc_stat; /* dcache status register */
+ unsigned long ioc_stat0; /* I/O controller status register 0 */
+ unsigned long ioc_stat1; /* I/O controller status register 1 */
+};
+
+struct el_lca_mcheck_long {
+ struct el_common h; /* common logout header */
+ unsigned long pt[31]; /* PAL temps */
+ unsigned long exc_addr; /* exception address */
+ unsigned long pad1[3];
+ unsigned long pal_base; /* PALcode base address */
+ unsigned long hier; /* hw interrupt enable */
+ unsigned long hirr; /* hw interrupt request */
+ unsigned long mm_csr; /* MMU control & status */
+ unsigned long dc_stat; /* data cache status */
+ unsigned long dc_addr; /* data cache addr register */
+ unsigned long abox_ctl; /* address box control register */
+ unsigned long esr; /* error status register */
+ unsigned long ear; /* error address register */
+ unsigned long car; /* cache control register */
+ unsigned long ioc_stat0; /* I/O controller status register 0 */
+ unsigned long ioc_stat1; /* I/O controller status register 1 */
+ unsigned long va; /* virtual address register */
+};
+union el_lca {
+ struct el_common * c;
+ struct el_lca_mcheck_long * l;
+ struct el_lca_mcheck_short * s;
+};
#ifdef __KERNEL__
+#ifndef __EXTERN_INLINE
+#define __EXTERN_INLINE extern inline
+#define __IO_EXTERN_INLINE
+#endif
+
/*
* Translate physical memory address as seen on (PCI) bus into
* a kernel virtual address and vv.
*/
-extern inline unsigned long virt_to_bus(void * address)
+
+__EXTERN_INLINE unsigned long lca_virt_to_bus(void * address)
{
return virt_to_phys(address) + LCA_DMA_WIN_BASE;
}
-extern inline void * bus_to_virt(unsigned long address)
+__EXTERN_INLINE void * lca_bus_to_virt(unsigned long address)
{
/*
* This check is a sanity check but also ensures that bus
@@ -207,46 +250,46 @@ extern inline void * bus_to_virt(unsigned long address)
* data to/from the right byte-lanes.
*/
+#define vip volatile int *
#define vuip volatile unsigned int *
+#define vulp volatile unsigned long *
-extern inline unsigned int __inb(unsigned long addr)
+__EXTERN_INLINE unsigned int lca_inb(unsigned long addr)
{
- long result = *(vuip) ((addr << 5) + LCA_IO + 0x00);
- result >>= (addr & 3) * 8;
- return 0xffUL & result;
+ long result = *(vip) ((addr << 5) + LCA_IO + 0x00);
+ return __kernel_extbl(result, addr & 3);
}
-extern inline void __outb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE void lca_outb(unsigned char b, unsigned long addr)
{
unsigned int w;
- asm ("insbl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
+ w = __kernel_insbl(b, addr & 3);
*(vuip) ((addr << 5) + LCA_IO + 0x00) = w;
mb();
}
-extern inline unsigned int __inw(unsigned long addr)
+__EXTERN_INLINE unsigned int lca_inw(unsigned long addr)
{
- long result = *(vuip) ((addr << 5) + LCA_IO + 0x08);
- result >>= (addr & 3) * 8;
- return 0xffffUL & result;
+ long result = *(vip) ((addr << 5) + LCA_IO + 0x08);
+ return __kernel_extwl(result, addr & 3);
}
-extern inline void __outw(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void lca_outw(unsigned short b, unsigned long addr)
{
unsigned int w;
- asm ("inswl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
+ w = __kernel_inswl(b, addr & 3);
*(vuip) ((addr << 5) + LCA_IO + 0x08) = w;
mb();
}
-extern inline unsigned int __inl(unsigned long addr)
+__EXTERN_INLINE unsigned int lca_inl(unsigned long addr)
{
return *(vuip) ((addr << 5) + LCA_IO + 0x18);
}
-extern inline void __outl(unsigned int b, unsigned long addr)
+__EXTERN_INLINE void lca_outl(unsigned int b, unsigned long addr)
{
*(vuip) ((addr << 5) + LCA_IO + 0x18) = b;
mb();
@@ -257,46 +300,44 @@ extern inline void __outl(unsigned int b, unsigned long addr)
* Memory functions. 64-bit and 32-bit accesses are done through
* dense memory space, everything else through sparse space.
*/
-extern inline unsigned long __readb(unsigned long addr)
+
+__EXTERN_INLINE unsigned long lca_readb(unsigned long addr)
{
- unsigned long result, shift, msb;
+ unsigned long result, msb;
- shift = (addr & 0x3) * 8;
if (addr >= (1UL << 24)) {
msb = addr & 0xf8000000;
addr -= msb;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ set_hae(msb);
}
- result = *(vuip) ((addr << 5) + LCA_SPARSE_MEM + 0x00);
- result >>= shift;
- return 0xffUL & result;
+ result = *(vip) ((addr << 5) + LCA_SPARSE_MEM + 0x00);
+ return __kernel_extbl(result, addr & 3);
}
-extern inline unsigned long __readw(unsigned long addr)
+__EXTERN_INLINE unsigned long lca_readw(unsigned long addr)
{
- unsigned long result, shift, msb;
+ unsigned long result, msb;
- shift = (addr & 0x3) * 8;
if (addr >= (1UL << 24)) {
msb = addr & 0xf8000000;
addr -= msb;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ set_hae(msb);
}
- result = *(vuip) ((addr << 5) + LCA_SPARSE_MEM + 0x08);
- result >>= shift;
- return 0xffffUL & result;
+ result = *(vip) ((addr << 5) + LCA_SPARSE_MEM + 0x08);
+ return __kernel_extwl(result, addr & 3);
}
-extern inline unsigned long __readl(unsigned long addr)
+__EXTERN_INLINE unsigned long lca_readl(unsigned long addr)
{
return *(vuip) (addr + LCA_DENSE_MEM);
}
-extern inline void __writeb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE unsigned long lca_readq(unsigned long addr)
+{
+ return *(vulp) (addr + LCA_DENSE_MEM);
+}
+
+__EXTERN_INLINE void lca_writeb(unsigned char b, unsigned long addr)
{
unsigned long msb;
unsigned int w;
@@ -304,15 +345,13 @@ extern inline void __writeb(unsigned char b, unsigned long addr)
if (addr >= (1UL << 24)) {
msb = addr & 0xf8000000;
addr -= msb;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ set_hae(msb);
}
- asm ("insbl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
+ w = __kernel_insbl(b, addr & 3);
*(vuip) ((addr << 5) + LCA_SPARSE_MEM + 0x00) = w;
}
-extern inline void __writew(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void lca_writew(unsigned short b, unsigned long addr)
{
unsigned long msb;
unsigned int w;
@@ -320,23 +359,52 @@ extern inline void __writew(unsigned short b, unsigned long addr)
if (addr >= (1UL << 24)) {
msb = addr & 0xf8000000;
addr -= msb;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ set_hae(msb);
}
- asm ("inswl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
+ w = __kernel_inswl(b, addr & 3);
*(vuip) ((addr << 5) + LCA_SPARSE_MEM + 0x08) = w;
}
-extern inline void __writel(unsigned int b, unsigned long addr)
+__EXTERN_INLINE void lca_writel(unsigned int b, unsigned long addr)
{
*(vuip) (addr + LCA_DENSE_MEM) = b;
}
-/*
- * Most of the above have so much overhead that it probably doesn't
- * make sense to have them inlined (better icache behavior).
- */
+__EXTERN_INLINE void lca_writeq(unsigned long b, unsigned long addr)
+{
+ *(vulp) (addr + LCA_DENSE_MEM) = b;
+}
+
+/* Find the DENSE memory area for a given bus address. */
+
+__EXTERN_INLINE unsigned long lca_dense_mem(unsigned long addr)
+{
+ return LCA_DENSE_MEM;
+}
+
+#undef vip
+#undef vuip
+#undef vulp
+
+#ifdef __WANT_IO_DEF
+
+#define virt_to_bus lca_virt_to_bus
+#define bus_to_virt lca_bus_to_virt
+#define __inb lca_inb
+#define __inw lca_inw
+#define __inl lca_inl
+#define __outb lca_outb
+#define __outw lca_outw
+#define __outl lca_outl
+#define __readb lca_readb
+#define __readw lca_readw
+#define __writeb lca_writeb
+#define __writew lca_writew
+#define __readl lca_readl
+#define __readq lca_readq
+#define __writel lca_writel
+#define __writeq lca_writeq
+#define dense_mem lca_dense_mem
#define inb(port) \
(__builtin_constant_p((port))?__inb(port):_inb(port))
@@ -345,55 +413,17 @@ extern inline void __writel(unsigned int b, unsigned long addr)
(__builtin_constant_p((port))?__outb((x),(port)):_outb((x),(port)))
#define readl(a) __readl((unsigned long)(a))
+#define readq(a) __readq((unsigned long)(a))
#define writel(v,a) __writel((v),(unsigned long)(a))
+#define writeq(v,a) __writeq((v),(unsigned long)(a))
-#undef vuip
+#endif /* __WANT_IO_DEF */
-extern unsigned long lca_init (unsigned long mem_start, unsigned long mem_end);
+#ifdef __IO_EXTERN_INLINE
+#undef __EXTERN_INLINE
+#undef __IO_EXTERN_INLINE
+#endif
#endif /* __KERNEL__ */
-/*
- * Data structure for handling LCA machine checks. Correctable errors
- * result in a short logout frame, uncorrectable ones in a long one.
- */
-struct el_lca_mcheck_short {
- struct el_common h; /* common logout header */
- unsigned long esr; /* error-status register */
- unsigned long ear; /* error-address register */
- unsigned long dc_stat; /* dcache status register */
- unsigned long ioc_stat0; /* I/O controller status register 0 */
- unsigned long ioc_stat1; /* I/O controller status register 1 */
-};
-
-struct el_lca_mcheck_long {
- struct el_common h; /* common logout header */
- unsigned long pt[31]; /* PAL temps */
- unsigned long exc_addr; /* exception address */
- unsigned long pad1[3];
- unsigned long pal_base; /* PALcode base address */
- unsigned long hier; /* hw interrupt enable */
- unsigned long hirr; /* hw interrupt request */
- unsigned long mm_csr; /* MMU control & status */
- unsigned long dc_stat; /* data cache status */
- unsigned long dc_addr; /* data cache addr register */
- unsigned long abox_ctl; /* address box control register */
- unsigned long esr; /* error status register */
- unsigned long ear; /* error address register */
- unsigned long car; /* cache control register */
- unsigned long ioc_stat0; /* I/O controller status register 0 */
- unsigned long ioc_stat1; /* I/O controller status register 1 */
- unsigned long va; /* virtual address register */
-};
-
-union el_lca {
- struct el_common * c;
- struct el_lca_mcheck_long * l;
- struct el_lca_mcheck_short * s;
-};
-
-#define RTC_PORT(x) (0x70 + (x))
-#define RTC_ADDR(x) (0x80 | (x))
-#define RTC_ALWAYS_BCD 0
-
#endif /* __ALPHA_LCA__H__ */
diff --git a/include/asm-alpha/mcpcia.h b/include/asm-alpha/core_mcpcia.h
index fd4d48839..8b0e03a89 100644
--- a/include/asm-alpha/mcpcia.h
+++ b/include/asm-alpha/core_mcpcia.h
@@ -4,6 +4,7 @@
#include <linux/config.h>
#include <linux/types.h>
#include <linux/pci.h>
+#include <asm/compiler.h>
/*
* MCPCIA is the internal name for a core logic chipset which provides
@@ -19,7 +20,7 @@
/*------------------------------------------------------------------------**
** **
-** I/O procedures **
+** I/O procedures **
** **
** inport[b|w|t|l], outport[b|w|t|l] 8:16:24:32 IO xfers **
** inportbxt: 8 bits only **
@@ -70,27 +71,23 @@
*
*/
-#define BYTE_ENABLE_SHIFT 5
-#define TRANSFER_LENGTH_SHIFT 3
+#define MCPCIA_MEM_R1_MASK 0x1fffffff /* SPARSE Mem region 1 mask is 29 bits */
+#define MCPCIA_MEM_R2_MASK 0x07ffffff /* SPARSE Mem region 2 mask is 27 bits */
+#define MCPCIA_MEM_R3_MASK 0x03ffffff /* SPARSE Mem region 3 mask is 26 bits */
-#define MEM_R1_MASK 0x1fffffff /* SPARSE Mem region 1 mask is 29 bits */
-#define MEM_R2_MASK 0x07ffffff /* SPARSE Mem region 2 mask is 27 bits */
-#define MEM_R3_MASK 0x03ffffff /* SPARSE Mem region 3 mask is 26 bits */
-
-#ifdef CONFIG_ALPHA_SRM_SETUP
-/* if we are using the SRM PCI setup, we'll need to use variables instead */
#define MCPCIA_DMA_WIN_BASE_DEFAULT (2*1024*1024*1024U)
#define MCPCIA_DMA_WIN_SIZE_DEFAULT (2*1024*1024*1024U)
-extern unsigned int MCPCIA_DMA_WIN_BASE;
-extern unsigned int MCPCIA_DMA_WIN_SIZE;
-
-#else /* SRM_SETUP */
-#define MCPCIA_DMA_WIN_BASE (2*1024*1024*1024UL)
-#define MCPCIA_DMA_WIN_SIZE (2*1024*1024*1024UL)
-#endif /* SRM_SETUP */
+#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SRM_SETUP)
+#define MCPCIA_DMA_WIN_BASE alpha_mv.dma_win_base
+#define MCPCIA_DMA_WIN_SIZE alpha_mv.dma_win_size
+#else
+#define MCPCIA_DMA_WIN_BASE MCPCIA_DMA_WIN_BASE_DEFAULT
+#define MCPCIA_DMA_WIN_SIZE MCPCIA_DMA_WIN_SIZE_DEFAULT
+#endif
#define HOSE(h) (((unsigned long)(h)) << 33)
+
/*
* General Registers
*/
@@ -165,22 +162,38 @@ extern unsigned int MCPCIA_DMA_WIN_SIZE;
#define MCPCIA_IO(h) (IDENT_ADDR + 0xf980000000UL + HOSE(h))
#define MCPCIA_SPARSE(h) (IDENT_ADDR + 0xf800000000UL + HOSE(h))
#define MCPCIA_DENSE(h) (IDENT_ADDR + 0xf900000000UL + HOSE(h))
-#define MCPCIA_IACK_SC(h) (IDENT_ADDR + 0xf9f0003f00UL + HOSE(h))
+#define _MCPCIA_IACK_SC(h) (IDENT_ADDR + 0xf9f0003f00UL + HOSE(h))
+
+#define MCPCIA_HAE_ADDRESS MCPCIA_HAE_MEM(0)
+#define MCPCIA_IACK_SC _MCPCIA_IACK_SC(0)
+
+/*
+ * Data structure for handling MCPCIA machine checks:
+ */
+struct el_MCPCIA_uncorrected_frame_mcheck {
+ struct el_common header;
+ struct el_common_EV5_uncorrectable_mcheck procdata;
+};
-#define HAE_ADDRESS MCPCIA_HAE_MEM(0)
#ifdef __KERNEL__
+#ifndef __EXTERN_INLINE
+#define __EXTERN_INLINE extern inline
+#define __IO_EXTERN_INLINE
+#endif
+
/*
* Translate physical memory address as seen on (PCI) bus into
* a kernel virtual address and vv.
*/
-extern inline unsigned long virt_to_bus(void * address)
+
+__EXTERN_INLINE unsigned long mcpcia_virt_to_bus(void * address)
{
return virt_to_phys(address) + MCPCIA_DMA_WIN_BASE;
}
-extern inline void * bus_to_virt(unsigned long address)
+__EXTERN_INLINE void * mcpcia_bus_to_virt(unsigned long address)
{
return phys_to_virt(address - MCPCIA_DMA_WIN_BASE);
}
@@ -196,128 +209,93 @@ extern inline void * bus_to_virt(unsigned long address)
* Unfortunately, we can't use BWIO with EV5, so for now, we always use SPARSE.
*/
+#define vucp volatile unsigned char *
+#define vusp volatile unsigned short *
+#define vip volatile int *
#define vuip volatile unsigned int *
+#define vulp volatile unsigned long *
-#ifdef DISABLE_BWIO_ENABLED
-
-extern inline unsigned int __inb(unsigned long addr)
+#if 0 /* BWIO */
+__EXTERN_INLINE unsigned int mcpcia_bw_inb(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldbu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned char *)(addr+MCPCIA_BW_IO)));
-
- return result;
+ return __kernel_ldbu(*(vucp)(addr+MCPCIA_BW_IO));
}
-extern inline void __outb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE void mcpcia_bw_outb(unsigned char b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stb %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned char *)(addr+MCPCIA_BW_IO)), "r" (b));
+ __kernel_stb(b, *(vucp)(addr+MCPCIA_BW_IO));
+ mb();
}
-extern inline unsigned int __inw(unsigned long addr)
+__EXTERN_INLINE unsigned int mcpcia_bw_inw(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldwu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned short *)(addr+MCPCIA_BW_IO)));
-
- return result;
+ return __kernel_ldwu(*(vusp)(addr+MCPCIA_BW_IO));
}
-extern inline void __outw(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void mcpcia_bw_outw(unsigned short b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stw %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned short *)(addr+MCPCIA_BW_IO)), "r" (b));
+ __kernel_stw(b, *(vusp)(addr+MCPCIA_BW_IO));
+ mb();
}
-extern inline unsigned int __inl(unsigned long addr)
+__EXTERN_INLINE unsigned int mcpcia_bw_inl(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldl %0,%1"
- : "=r" (result)
- : "m" (*(unsigned int *)(addr+MCPCIA_BW_IO)));
-
- return result;
+ return *(vuip)(addr+MCPCIA_BW_IO);
}
-extern inline void __outl(unsigned int b, unsigned long addr)
+__EXTERN_INLINE void mcpcia_bw_outl(unsigned int b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stl %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned int *)(addr+MCPCIA_BW_IO)), "r" (b));
+ *(vuip)(addr+MCPCIA_BW_IO) = b;
+ mb();
}
+#endif
-#define inb(port) __inb((port))
-#define inw(port) __inw((port))
-#define inl(port) __inl((port))
-
-#define outb(x, port) __outb((x),(port))
-#define outw(x, port) __outw((x),(port))
-#define outl(x, port) __outl((x),(port))
-
-#else /* BWIO_ENABLED */
-
-extern inline unsigned int __inb(unsigned long in_addr)
+__EXTERN_INLINE unsigned int mcpcia_inb(unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
- long result = *(vuip) ((addr << 5) + MCPCIA_IO(hose) + 0x00);
- result >>= (addr & 3) * 8;
- return 0xffUL & result;
+ long result = *(vip) ((addr << 5) + MCPCIA_IO(hose) + 0x00);
+ return __kernel_extbl(result, addr & 3);
}
-extern inline void __outb(unsigned char b, unsigned long in_addr)
+__EXTERN_INLINE void mcpcia_outb(unsigned char b, unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
unsigned int w;
- asm ("insbl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
+ w = __kernel_insbl(b, addr & 3);
*(vuip) ((addr << 5) + MCPCIA_IO(hose) + 0x00) = w;
mb();
}
-extern inline unsigned int __inw(unsigned long in_addr)
+__EXTERN_INLINE unsigned int mcpcia_inw(unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
- long result = *(vuip) ((addr << 5) + MCPCIA_IO(hose) + 0x08);
- result >>= (addr & 3) * 8;
- return 0xffffUL & result;
+ long result = *(vip) ((addr << 5) + MCPCIA_IO(hose) + 0x08);
+ return __kernel_extwl(result, addr & 3);
}
-extern inline void __outw(unsigned short b, unsigned long in_addr)
+__EXTERN_INLINE void mcpcia_outw(unsigned short b, unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
unsigned int w;
- asm ("inswl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
+ w = __kernel_inswl(b, addr & 3);
*(vuip) ((addr << 5) + MCPCIA_IO(hose) + 0x08) = w;
mb();
}
-extern inline unsigned int __inl(unsigned long in_addr)
+__EXTERN_INLINE unsigned int mcpcia_inl(unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
return *(vuip) ((addr << 5) + MCPCIA_IO(hose) + 0x18);
}
-extern inline void __outl(unsigned int b, unsigned long in_addr)
+__EXTERN_INLINE void mcpcia_outl(unsigned int b, unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
@@ -325,14 +303,6 @@ extern inline void __outl(unsigned int b, unsigned long in_addr)
mb();
}
-#define inb(port) \
-(__builtin_constant_p((port))?__inb(port):_inb(port))
-
-#define outb(x, port) \
-(__builtin_constant_p((port))?__outb((x),(port)):_outb((x),(port)))
-
-#endif /* BWIO_ENABLED */
-
/*
* Memory functions. 64-bit and 32-bit accesses are done through
@@ -366,303 +336,297 @@ extern inline void __outl(unsigned int b, unsigned long in_addr)
*
*/
-#ifdef DISABLE_BWIO_ENABLED
-
-extern inline unsigned long __readb(unsigned long addr)
+#if 0 /* BWIO */
+__EXTERN_INLINE unsigned long mcpcia_bw_readb(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldbu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned char *)(addr+MCPCIA_BW_MEM)));
-
- return result;
+ return __kernel_ldbu(*(vucp)(addr+MCPCIA_BW_MEM));
}
-extern inline unsigned long __readw(unsigned long addr)
+__EXTERN_INLINE unsigned long mcpcia_bw_readw(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldwu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned short *)(addr+MCPCIA_BW_MEM)));
-
- return result;
+ return __kernel_ldbw(*(vusp)(addr+MCPCIA_BW_MEM));
}
-extern inline unsigned long __readl(unsigned long addr)
+__EXTERN_INLINE unsigned long mcpcia_bw_readl(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldl %0,%1"
- : "=r" (result)
- : "m" (*(unsigned int *)(addr+MCPCIA_BW_MEM)));
-
- return result;
+ return *(vuip)(addr + MCPCIA_BW_MEM);
}
-extern inline void __writeb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE unsigned long mcpcia_bw_readq(unsigned long addr)
{
- __asm__ __volatile__ (
- "stb %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned char *)(addr+MCPCIA_BW_MEM)), "r" (b));
+ return *(vulp)(addr + MCPCIA_BW_MEM);
}
-extern inline void __writew(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void mcpcia_bw_writeb(unsigned char b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stw %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned short *)(addr+MCPCIA_BW_MEM)), "r" (b));
+ __kernel_stb(b, *(vucp)(addr+MCPCIA_BW_MEM));
}
-extern inline void __writel(unsigned int b, unsigned long addr)
+__EXTERN_INLINE void mcpcia_bw_writew(unsigned short b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stl %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned int *)(addr+MCPCIA_BW_MEM)), "r" (b));
+ __kernel_stw(b, *(vusp)(addr+MCPCIA_BW_MEM));
}
-#define readb(addr) __readb((addr))
-#define readw(addr) __readw((addr))
-
-#define writeb(b, addr) __writeb((b),(addr))
-#define writew(b, addr) __writew((b),(addr))
-
-#else /* BWIO_ENABLED */
-
-#ifdef CONFIG_ALPHA_SRM_SETUP
+__EXTERN_INLINE void mcpcia_bw_writel(unsigned int b, unsigned long addr)
+{
+ *(vuip)(addr+MCPCIA_BW_MEM) = b;
+}
-extern unsigned long mcpcia_sm_base_r1, mcpcia_sm_base_r2, mcpcia_sm_base_r3;
+__EXTERN_INLINE void mcpcia_bw_writeq(unsigned long b, unsigned long addr)
+{
+ *(vulp)(addr+MCPCIA_BW_MEM) = b;
+}
+#endif
-extern inline unsigned long __readb(unsigned long addr)
+__EXTERN_INLINE unsigned long mcpcia_srm_base(unsigned long addr)
{
- unsigned long result, shift, work;
+ unsigned long mask, base;
+ unsigned long hose = (addr >> 32) & 3;
- if ((addr >= mcpcia_sm_base_r1) &&
- (addr <= (mcpcia_sm_base_r1 + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + MCPCIA_SPARSE_MEM + 0x00);
- else
- if ((addr >= mcpcia_sm_base_r2) &&
- (addr <= (mcpcia_sm_base_r2 + MEM_R2_MASK)))
- work = (((addr & MEM_R2_MASK) << 5) + MCPCIA_SPARSE_MEM_R2 + 0x00);
- else
- if ((addr >= mcpcia_sm_base_r3) &&
- (addr <= (mcpcia_sm_base_r3 + MEM_R3_MASK)))
- work = (((addr & MEM_R3_MASK) << 5) + MCPCIA_SPARSE_MEM_R3 + 0x00);
+ if (addr >= alpha_mv.sm_base_r1
+ && addr <= alpha_mv.sm_base_r1 + MCPCIA_MEM_R1_MASK) {
+ mask = MCPCIA_MEM_R1_MASK;
+ base = MCPCIA_SPARSE(hose);
+ }
+#if 0
+ /* FIXME FIXME FIXME: SPARSE_MEM_R2 and R3 are not defined? */
+ else if (addr >= alpha_mv.sm_base_r2
+ && addr <= alpha_mv.sm_base_r2 + MCPCIA_MEM_R2_MASK) {
+ mask = MCPCIA_MEM_R2_MASK;
+ base = MCPCIA_SPARSE_MEM_R2;
+ }
+ else if (addr >= alpha_mv.sm_base_r3
+ && addr <= alpha_mv.sm_base_r3 + MCPCIA_MEM_R3_MASK) {
+ mask = MCPCIA_MEM_R3_MASK;
+ base = MCPCIA_SPARSE_MEM_R3;
+ }
+#endif
else
{
#if 0
- printk("__readb: address 0x%lx not covered by HAE\n", addr);
+ printk("mcpcia: address 0x%lx not covered by HAE\n", addr);
#endif
- return 0x0ffUL;
+ return 0;
}
- shift = (addr & 0x3) << 3;
- result = *(vuip) work;
- result >>= shift;
- return 0x0ffUL & result;
+
+ return ((addr & mask) << 5) + base;
}
-extern inline unsigned long __readw(unsigned long addr)
+__EXTERN_INLINE unsigned long mcpcia_srm_readb(unsigned long addr)
{
- unsigned long result, shift, work;
+ unsigned long result, work;
- if ((addr >= mcpcia_sm_base_r1) &&
- (addr <= (mcpcia_sm_base_r1 + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + MCPCIA_SPARSE_MEM + 0x08);
- else
- if ((addr >= mcpcia_sm_base_r2) &&
- (addr <= (mcpcia_sm_base_r2 + MEM_R2_MASK)))
- work = (((addr & MEM_R2_MASK) << 5) + MCPCIA_SPARSE_MEM_R2 + 0x08);
- else
- if ((addr >= mcpcia_sm_base_r3) &&
- (addr <= (mcpcia_sm_base_r3 + MEM_R3_MASK)))
- work = (((addr & MEM_R3_MASK) << 5) + MCPCIA_SPARSE_MEM_R3 + 0x08);
- else
- {
-#if 0
- printk("__readw: address 0x%lx not covered by HAE\n", addr);
-#endif
- return 0x0ffffUL;
- }
- shift = (addr & 0x3) << 3;
- result = *(vuip) work;
- result >>= shift;
- return 0x0ffffUL & result;
+ if ((work = mcpcia_srm_base(addr)) == 0)
+ return 0xff;
+ work += 0x00; /* add transfer length */
+
+ result = *(vip) work;
+ return __kernel_extbl(result, addr & 3);
}
-extern inline void __writeb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE unsigned long mcpcia_srm_readw(unsigned long addr)
{
- unsigned long work;
+ unsigned long result, work;
- if ((addr >= mcpcia_sm_base_r1) &&
- (addr <= (mcpcia_sm_base_r1 + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + MCPCIA_SPARSE_MEM + 0x00);
- else
- if ((addr >= mcpcia_sm_base_r2) &&
- (addr <= (mcpcia_sm_base_r2 + MEM_R2_MASK)))
- work = (((addr & MEM_R2_MASK) << 5) + MCPCIA_SPARSE_MEM_R2 + 0x00);
- else
- if ((addr >= mcpcia_sm_base_r3) &&
- (addr <= (mcpcia_sm_base_r3 + MEM_R3_MASK)))
- work = (((addr & MEM_R3_MASK) << 5) + MCPCIA_SPARSE_MEM_R3 + 0x00);
- else
- {
-#if 0
- printk("__writeb: address 0x%lx not covered by HAE\n", addr);
-#endif
- return;
- }
- *(vuip) work = b * 0x01010101;
+ if ((work = mcpcia_srm_base(addr)) == 0)
+ return 0xffff;
+ work += 0x08; /* add transfer length */
+
+ result = *(vip) work;
+ return __kernel_extwl(result, addr & 3);
}
-extern inline void __writew(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void mcpcia_srm_writeb(unsigned char b, unsigned long addr)
{
- unsigned long work;
-
- if ((addr >= mcpcia_sm_base_r1) &&
- (addr <= (mcpcia_sm_base_r1 + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + MCPCIA_SPARSE_MEM + 0x00);
- else
- if ((addr >= mcpcia_sm_base_r2) &&
- (addr <= (mcpcia_sm_base_r2 + MEM_R2_MASK)))
- work = (((addr & MEM_R2_MASK) << 5) + MCPCIA_SPARSE_MEM_R2 + 0x00);
- else
- if ((addr >= mcpcia_sm_base_r3) &&
- (addr <= (mcpcia_sm_base_r3 + MEM_R3_MASK)))
- work = (((addr & MEM_R3_MASK) << 5) + MCPCIA_SPARSE_MEM_R3 + 0x00);
- else
- {
-#if 0
- printk("__writew: address 0x%lx not covered by HAE\n", addr);
-#endif
- return;
+ unsigned long work = mcpcia_srm_base(addr);
+ if (work) {
+ work += 0x00; /* add transfer length */
+ *(vuip) work = b * 0x01010101;
}
- *(vuip) work = b * 0x00010001;
}
-#else /* SRM_SETUP */
+__EXTERN_INLINE void mcpcia_srm_writew(unsigned short b, unsigned long addr)
+{
+ unsigned long work = mcpcia_srm_base(addr);
+ if (work) {
+ work += 0x08; /* add transfer length */
+ *(vuip) work = b * 0x00010001;
+ }
+}
-extern inline unsigned long __readb(unsigned long in_addr)
+__EXTERN_INLINE unsigned long mcpcia_readb(unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
- unsigned long result, shift, msb, work, temp;
+ unsigned long result, msb, work, temp;
- shift = (addr & 0x3) << 3;
msb = addr & 0xE0000000UL;
- temp = addr & MEM_R1_MASK;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ temp = addr & MCPCIA_MEM_R1_MASK;
+ set_hae(msb);
+
work = ((temp << 5) + MCPCIA_SPARSE(hose) + 0x00);
- result = *(vuip) work;
- result >>= shift;
- return 0x0ffUL & result;
+ result = *(vip) work;
+ return __kernel_extbl(result, addr & 3);
}
-extern inline unsigned long __readw(unsigned long in_addr)
+__EXTERN_INLINE unsigned long mcpcia_readw(unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
- unsigned long result, shift, msb, work, temp;
+ unsigned long result, msb, work, temp;
- shift = (addr & 0x3) << 3;
msb = addr & 0xE0000000UL;
- temp = addr & MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ temp = addr & MCPCIA_MEM_R1_MASK ;
+ set_hae(msb);
+
work = ((temp << 5) + MCPCIA_SPARSE(hose) + 0x08);
- result = *(vuip) work;
- result >>= shift;
- return 0x0ffffUL & result;
+ result = *(vip) work;
+ return __kernel_extwl(result, addr & 3);
}
-extern inline void __writeb(unsigned char b, unsigned long in_addr)
+__EXTERN_INLINE void mcpcia_writeb(unsigned char b, unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
unsigned long msb;
msb = addr & 0xE0000000;
- addr &= MEM_R1_MASK;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ addr &= MCPCIA_MEM_R1_MASK;
+ set_hae(msb);
+
*(vuip) ((addr << 5) + MCPCIA_SPARSE(hose) + 0x00) = b * 0x01010101;
}
-extern inline void __writew(unsigned short b, unsigned long in_addr)
+__EXTERN_INLINE void mcpcia_writew(unsigned short b, unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
unsigned long msb ;
msb = addr & 0xE0000000 ;
- addr &= MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ addr &= MCPCIA_MEM_R1_MASK ;
+ set_hae(msb);
+
*(vuip) ((addr << 5) + MCPCIA_SPARSE(hose) + 0x08) = b * 0x00010001;
}
-#endif /* SRM_SETUP */
-extern inline unsigned long __readl(unsigned long in_addr)
+__EXTERN_INLINE unsigned long mcpcia_readl(unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
return *(vuip) (addr + MCPCIA_DENSE(hose));
}
-extern inline void __writel(unsigned int b, unsigned long in_addr)
+__EXTERN_INLINE unsigned long mcpcia_readq(unsigned long in_addr)
+{
+ unsigned long addr = in_addr & 0xffffffffUL;
+ unsigned long hose = (in_addr >> 32) & 3;
+ return *(vulp) (addr + MCPCIA_DENSE(hose));
+}
+
+__EXTERN_INLINE void mcpcia_writel(unsigned int b, unsigned long in_addr)
{
unsigned long addr = in_addr & 0xffffffffUL;
unsigned long hose = (in_addr >> 32) & 3;
*(vuip) (addr + MCPCIA_DENSE(hose)) = b;
}
-#endif /* BWIO_ENABLED */
+__EXTERN_INLINE void mcpcia_writeq(unsigned long b, unsigned long in_addr)
+{
+ unsigned long addr = in_addr & 0xffffffffUL;
+ unsigned long hose = (in_addr >> 32) & 3;
+ *(vulp) (addr + MCPCIA_DENSE(hose)) = b;
+}
-#define readl(a) __readl((unsigned long)(a))
-#define writel(v,a) __writel((v),(unsigned long)(a))
+/* Find the DENSE memory area for a given bus address. */
-#undef vuip
+__EXTERN_INLINE unsigned long mcpcia_dense_mem(unsigned long addr)
+{
+ return MCPCIA_DENSE((addr >> 32) & 3);
+}
-struct linux_hose_info {
- struct pci_bus pci_bus;
- struct linux_hose_info *next;
- unsigned long pci_io_space;
- unsigned long pci_mem_space;
- unsigned long pci_config_space;
- unsigned long pci_sparse_space;
- unsigned int pci_first_busno;
- unsigned int pci_last_busno;
- unsigned int pci_hose_index;
-};
+#undef vucp
+#undef vusp
+#undef vip
+#undef vuip
+#undef vulp
+
+#ifdef __WANT_IO_DEF
+
+#define virt_to_bus mcpcia_virt_to_bus
+#define bus_to_virt mcpcia_bus_to_virt
+
+#if 0 /* BWIO */
+# define __inb mcpcia_bw_inb
+# define __inw mcpcia_bw_inw
+# define __inl mcpcia_bw_inl
+# define __outb mcpcia_bw_outb
+# define __outw mcpcia_bw_outw
+# define __outl mcpcia_bw_outl
+# define __readb mcpcia_bw_readb
+# define __readw mcpcia_bw_readw
+# define __writeb mcpcia_bw_writeb
+# define __writew mcpcia_bw_writew
+# define __readl mcpcia_bw_readl
+# define __readq mcpcia_bw_readq
+# define __writel mcpcia_bw_writel
+# define __writeq mcpcia_bw_writeq
+#else
+# define __inb mcpcia_inb
+# define __inw mcpcia_inw
+# define __inl mcpcia_inl
+# define __outb mcpcia_outb
+# define __outw mcpcia_outw
+# define __outl mcpcia_outl
+# ifdef CONFIG_ALPHA_SRM_SETUP
+# define __readb mcpcia_srm_readb
+# define __readw mcpcia_srm_readw
+# define __writeb mcpcia_srm_writeb
+# define __writew mcpcia_srm_writew
+# else
+# define __readb mcpcia_readb
+# define __readw mcpcia_readw
+# define __writeb mcpcia_writeb
+# define __writew mcpcia_writew
+# endif
+# define __readl mcpcia_readl
+# define __readq mcpcia_readq
+# define __writel mcpcia_writel
+# define __writeq mcpcia_writeq
+#endif /* BWIO */
+
+#define dense_mem mcpcia_dense_mem
+
+#if 0 /* BWIO */
+# define inb(port) __inb((port))
+# define inw(port) __inw((port))
+# define inl(port) __inl((port))
+# define outb(x, port) __outb((x),(port))
+# define outw(x, port) __outw((x),(port))
+# define outl(x, port) __outl((x),(port))
+# define readb(addr) __readb((addr))
+# define readw(addr) __readw((addr))
+# define writeb(b, addr) __writeb((b),(addr))
+# define writew(b, addr) __writew((b),(addr))
+#else
+# define inb(port) \
+ (__builtin_constant_p((port))?__inb(port):_inb(port))
+# define outb(x, port) \
+ (__builtin_constant_p((port))?__outb((x),(port)):_outb((x),(port)))
+#endif /* BWIO */
-extern unsigned long mcpcia_init (unsigned long mem_start,
- unsigned long mem_end);
-extern unsigned long mcpcia_fixup (unsigned long mem_start,
- unsigned long mem_end);
+#define readl(a) __readl((unsigned long)(a))
+#define readq(a) __readq((unsigned long)(a))
+#define writel(v,a) __writel((v),(unsigned long)(a))
+#define writeq(v,a) __writeq((v),(unsigned long)(a))
-#endif /* __KERNEL__ */
+#endif /* __WANT_IO_DEF */
-/*
- * Data structure for handling MCPCIA machine checks:
- */
-struct el_MCPCIA_uncorrected_frame_mcheck {
- struct el_common header;
- struct el_common_EV5_uncorrectable_mcheck procdata;
-};
+#ifdef __IO_EXTERN_INLINE
+#undef __EXTERN_INLINE
+#undef __IO_EXTERN_INLINE
+#endif
-#define RTC_PORT(x) (0x70 + (x))
-#define RTC_ADDR(x) (0x80 | (x))
-#define RTC_ALWAYS_BCD 0
+#endif /* __KERNEL__ */
#endif /* __ALPHA_MCPCIA__H__ */
diff --git a/include/asm-alpha/pyxis.h b/include/asm-alpha/core_pyxis.h
index d10408bde..8b00d1356 100644
--- a/include/asm-alpha/pyxis.h
+++ b/include/asm-alpha/core_pyxis.h
@@ -3,6 +3,7 @@
#include <linux/config.h>
#include <linux/types.h>
+#include <asm/compiler.h>
/*
* PYXIS is the internal name for a core logic chipset which provides
@@ -18,7 +19,7 @@
/*------------------------------------------------------------------------**
** **
-** I/O procedures **
+** I/O procedures **
** **
** inport[b|w|t|l], outport[b|w|t|l] 8:16:24:32 IO xfers **
** inportbxt: 8 bits only **
@@ -69,25 +70,20 @@
*
*/
-#define BYTE_ENABLE_SHIFT 5
-#define TRANSFER_LENGTH_SHIFT 3
+#define PYXIS_MEM_R1_MASK 0x1fffffff /* SPARSE Mem region 1 mask is 29 bits */
+#define PYXIS_MEM_R2_MASK 0x07ffffff /* SPARSE Mem region 2 mask is 27 bits */
+#define PYXIS_MEM_R3_MASK 0x03ffffff /* SPARSE Mem region 3 mask is 26 bits */
-#define MEM_R1_MASK 0x1fffffff /* SPARSE Mem region 1 mask is 29 bits */
-#define MEM_R2_MASK 0x07ffffff /* SPARSE Mem region 2 mask is 27 bits */
-#define MEM_R3_MASK 0x03ffffff /* SPARSE Mem region 3 mask is 26 bits */
+#define PYXIS_DMA_WIN_BASE_DEFAULT (1024*1024*1024)
+#define PYXIS_DMA_WIN_SIZE_DEFAULT (1024*1024*1024)
-#ifdef CONFIG_ALPHA_SRM_SETUP
-/* if we are using the SRM PCI setup, we'll need to use variables instead */
-#define PYXIS_DMA_WIN_BASE_DEFAULT (1024*1024*1024)
-#define PYXIS_DMA_WIN_SIZE_DEFAULT (1024*1024*1024)
-
-extern unsigned int PYXIS_DMA_WIN_BASE;
-extern unsigned int PYXIS_DMA_WIN_SIZE;
-
-#else /* SRM_SETUP */
-#define PYXIS_DMA_WIN_BASE (1024*1024*1024)
-#define PYXIS_DMA_WIN_SIZE (1024*1024*1024)
-#endif /* SRM_SETUP */
+#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SRM_SETUP)
+#define PYXIS_DMA_WIN_BASE alpha_mv.dma_win_base
+#define PYXIS_DMA_WIN_SIZE alpha_mv.dma_win_size
+#else
+#define PYXIS_DMA_WIN_BASE PYXIS_DMA_WIN_BASE_DEFAULT
+#define PYXIS_DMA_WIN_SIZE PYXIS_DMA_WIN_SIZE_DEFAULT
+#endif
/*
* General Registers
@@ -200,37 +196,90 @@ extern unsigned int PYXIS_DMA_WIN_SIZE;
#define PYXIS_STAT0_P_NBR_SHIFT 13
#define PYXIS_STAT0_P_NBR_MASK 0x7ffff
-#define HAE_ADDRESS PYXIS_HAE_MEM
+#define PYXIS_HAE_ADDRESS PYXIS_HAE_MEM
+
+/*
+ * Data structure for handling PYXIS machine checks:
+ */
+struct el_PYXIS_sysdata_mcheck {
+ u_long coma_gcr;
+ u_long coma_edsr;
+ u_long coma_ter;
+ u_long coma_elar;
+ u_long coma_ehar;
+ u_long coma_ldlr;
+ u_long coma_ldhr;
+ u_long coma_base0;
+ u_long coma_base1;
+ u_long coma_base2;
+ u_long coma_cnfg0;
+ u_long coma_cnfg1;
+ u_long coma_cnfg2;
+ u_long epic_dcsr;
+ u_long epic_pear;
+ u_long epic_sear;
+ u_long epic_tbr1;
+ u_long epic_tbr2;
+ u_long epic_pbr1;
+ u_long epic_pbr2;
+ u_long epic_pmr1;
+ u_long epic_pmr2;
+ u_long epic_harx1;
+ u_long epic_harx2;
+ u_long epic_pmlt;
+ u_long epic_tag0;
+ u_long epic_tag1;
+ u_long epic_tag2;
+ u_long epic_tag3;
+ u_long epic_tag4;
+ u_long epic_tag5;
+ u_long epic_tag6;
+ u_long epic_tag7;
+ u_long epic_data0;
+ u_long epic_data1;
+ u_long epic_data2;
+ u_long epic_data3;
+ u_long epic_data4;
+ u_long epic_data5;
+ u_long epic_data6;
+ u_long epic_data7;
+};
+
#ifdef __KERNEL__
+#ifndef __EXTERN_INLINE
+#define __EXTERN_INLINE extern inline
+#define __IO_EXTERN_INLINE
+#endif
+
/*
* Translate physical memory address as seen on (PCI) bus into
* a kernel virtual address and vv.
*/
-#if defined(CONFIG_ALPHA_RUFFIAN)
+
/* Ruffian doesn't do 1G PCI window */
-extern inline unsigned long virt_to_bus(void * address)
+static inline unsigned long pyxis_ruffian_virt_to_bus(void * address)
{
return virt_to_phys(address);
}
-extern inline void * bus_to_virt(unsigned long address)
+static inline void * pyxis_ruffian_bus_to_virt(unsigned long address)
{
return phys_to_virt(address);
}
-#else /* RUFFIAN */
-extern inline unsigned long virt_to_bus(void * address)
+
+__EXTERN_INLINE unsigned long pyxis_virt_to_bus(void * address)
{
return virt_to_phys(address) + PYXIS_DMA_WIN_BASE;
}
-extern inline void * bus_to_virt(unsigned long address)
+__EXTERN_INLINE void * pyxis_bus_to_virt(unsigned long address)
{
return phys_to_virt(address - PYXIS_DMA_WIN_BASE);
}
-#endif /* RUFFIAN */
+
/*
* I/O functions:
@@ -241,131 +290,86 @@ extern inline void * bus_to_virt(unsigned long address)
* get at PCI memory and I/O.
*/
+#define vucp volatile unsigned char *
+#define vusp volatile unsigned short *
+#define vip volatile int *
#define vuip volatile unsigned int *
+#define vulp volatile unsigned long *
-#ifdef BWIO_ENABLED
-
-extern inline unsigned int __inb(unsigned long addr)
+__EXTERN_INLINE unsigned int pyxis_bw_inb(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldbu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned char *)(addr+PYXIS_BW_IO)));
-
- return result;
+ return __kernel_ldbu(*(vucp)(addr+PYXIS_BW_IO));
}
-extern inline void __outb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE void pyxis_bw_outb(unsigned char b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stb %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned char *)(addr+PYXIS_BW_IO)), "r" (b));
+ __kernel_stb(b, *(vucp)(addr+PYXIS_BW_IO));
+ mb();
}
-extern inline unsigned int __inw(unsigned long addr)
+__EXTERN_INLINE unsigned int pyxis_bw_inw(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldwu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned short *)(addr+PYXIS_BW_IO)));
-
- return result;
+ return __kernel_ldwu(*(vusp)(addr+PYXIS_BW_IO));
}
-extern inline void __outw(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void pyxis_bw_outw(unsigned short b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stw %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned short *)(addr+PYXIS_BW_IO)), "r" (b));
+ __kernel_stw(b, *(vusp)(addr+PYXIS_BW_IO));
+ mb();
}
-extern inline unsigned int __inl(unsigned long addr)
+__EXTERN_INLINE unsigned int pyxis_bw_inl(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldl %0,%1"
- : "=r" (result)
- : "m" (*(unsigned int *)(addr+PYXIS_BW_IO)));
-
- return result;
+ return *(vuip)(addr+PYXIS_BW_IO);
}
-extern inline void __outl(unsigned int b, unsigned long addr)
+__EXTERN_INLINE void pyxis_bw_outl(unsigned int b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stl %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned int *)(addr+PYXIS_BW_IO)), "r" (b));
+ *(vuip)(addr+PYXIS_BW_IO) = b;
+ mb();
}
-#define inb(port) __inb((port))
-#define inw(port) __inw((port))
-#define inl(port) __inl((port))
-
-#define outb(x, port) __outb((x),(port))
-#define outw(x, port) __outw((x),(port))
-#define outl(x, port) __outl((x),(port))
-
-#else /* BWIO_ENABLED */
-
-extern inline unsigned int __inb(unsigned long addr)
+__EXTERN_INLINE unsigned int pyxis_inb(unsigned long addr)
{
- long result = *(vuip) ((addr << 5) + PYXIS_IO + 0x00);
- result >>= (addr & 3) * 8;
- return 0xffUL & result;
+ long result = *(vip) ((addr << 5) + PYXIS_IO + 0x00);
+ return __kernel_extbl(result, addr & 3);
}
-extern inline void __outb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE void pyxis_outb(unsigned char b, unsigned long addr)
{
unsigned int w;
- asm ("insbl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
+ w = __kernel_insbl(b, addr & 3);
*(vuip) ((addr << 5) + PYXIS_IO + 0x00) = w;
mb();
}
-extern inline unsigned int __inw(unsigned long addr)
+__EXTERN_INLINE unsigned int pyxis_inw(unsigned long addr)
{
- long result = *(vuip) ((addr << 5) + PYXIS_IO + 0x08);
- result >>= (addr & 3) * 8;
- return 0xffffUL & result;
+ long result = *(vip) ((addr << 5) + PYXIS_IO + 0x08);
+ return __kernel_extwl(result, addr & 3);
}
-extern inline void __outw(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void pyxis_outw(unsigned short b, unsigned long addr)
{
unsigned int w;
- asm ("inswl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
+ w = __kernel_inswl(b, addr & 3);
*(vuip) ((addr << 5) + PYXIS_IO + 0x08) = w;
mb();
}
-extern inline unsigned int __inl(unsigned long addr)
+__EXTERN_INLINE unsigned int pyxis_inl(unsigned long addr)
{
return *(vuip) ((addr << 5) + PYXIS_IO + 0x18);
}
-extern inline void __outl(unsigned int b, unsigned long addr)
+__EXTERN_INLINE void pyxis_outl(unsigned int b, unsigned long addr)
{
*(vuip) ((addr << 5) + PYXIS_IO + 0x18) = b;
mb();
}
-#define inb(port) \
-(__builtin_constant_p((port))?__inb(port):_inb(port))
-
-#define outb(x, port) \
-(__builtin_constant_p((port))?__outb((x),(port)):_outb((x),(port)))
-
-#endif /* BWIO_ENABLED */
-
/*
* Memory functions. 64-bit and 32-bit accesses are done through
@@ -399,316 +403,282 @@ extern inline void __outl(unsigned int b, unsigned long addr)
*
*/
-#ifdef BWIO_ENABLED
-
-extern inline unsigned long __readb(unsigned long addr)
+__EXTERN_INLINE unsigned long pyxis_bw_readb(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldbu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned char *)(addr+PYXIS_BW_MEM)));
-
- return result;
+ return __kernel_ldbu(*(vucp)(addr+PYXIS_BW_MEM));
}
-extern inline unsigned long __readw(unsigned long addr)
+__EXTERN_INLINE unsigned long pyxis_bw_readw(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldwu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned short *)(addr+PYXIS_BW_MEM)));
-
- return result;
+ return __kernel_ldwu(*(vusp)(addr+PYXIS_BW_MEM));
}
-extern inline unsigned long __readl(unsigned long addr)
+__EXTERN_INLINE unsigned long pyxis_bw_readl(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldl %0,%1"
- : "=r" (result)
- : "m" (*(unsigned int *)(addr+PYXIS_BW_MEM)));
-
- return result;
+ return *(vuip)(addr+PYXIS_BW_MEM);
}
-extern inline void __writeb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE unsigned long pyxis_bw_readq(unsigned long addr)
{
- __asm__ __volatile__ (
- "stb %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned char *)(addr+PYXIS_BW_MEM)), "r" (b));
+ return *(vulp)(addr+PYXIS_BW_MEM);
}
-extern inline void __writew(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void pyxis_bw_writeb(unsigned char b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stw %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned short *)(addr+PYXIS_BW_MEM)), "r" (b));
+ __kernel_stb(b, *(vucp)(addr+PYXIS_BW_MEM));
+ mb();
}
-extern inline void __writel(unsigned int b, unsigned long addr)
+__EXTERN_INLINE void pyxis_bw_writew(unsigned short b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stl %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned int *)(addr+PYXIS_BW_MEM)), "r" (b));
+ __kernel_stw(b, *(vusp)(addr+PYXIS_BW_MEM));
+ mb();
}
-#define readb(addr) __readb((addr))
-#define readw(addr) __readw((addr))
-
-#define writeb(b, addr) __writeb((b),(addr))
-#define writew(b, addr) __writew((b),(addr))
-
-#else /* BWIO_ENABLED */
-
-#ifdef CONFIG_ALPHA_SRM_SETUP
+__EXTERN_INLINE void pyxis_bw_writel(unsigned int b, unsigned long addr)
+{
+ *(vuip)(addr+PYXIS_BW_MEM) = b;
+}
-extern unsigned long pyxis_sm_base_r1, pyxis_sm_base_r2, pyxis_sm_base_r3;
+__EXTERN_INLINE void pyxis_bw_writeq(unsigned long b, unsigned long addr)
+{
+ *(vulp)(addr+PYXIS_BW_MEM) = b;
+}
-extern inline unsigned long __readb(unsigned long addr)
+__EXTERN_INLINE unsigned long pyxis_srm_base(unsigned long addr)
{
- unsigned long result, shift, work;
+ unsigned long mask, base;
- if ((addr >= pyxis_sm_base_r1) &&
- (addr <= (pyxis_sm_base_r1 + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + PYXIS_SPARSE_MEM + 0x00);
- else
- if ((addr >= pyxis_sm_base_r2) &&
- (addr <= (pyxis_sm_base_r2 + MEM_R2_MASK)))
- work = (((addr & MEM_R2_MASK) << 5) + PYXIS_SPARSE_MEM_R2 + 0x00);
- else
- if ((addr >= pyxis_sm_base_r3) &&
- (addr <= (pyxis_sm_base_r3 + MEM_R3_MASK)))
- work = (((addr & MEM_R3_MASK) << 5) + PYXIS_SPARSE_MEM_R3 + 0x00);
+ if (addr >= alpha_mv.sm_base_r1
+ && addr <= alpha_mv.sm_base_r1 + PYXIS_MEM_R1_MASK) {
+ mask = PYXIS_MEM_R1_MASK;
+ base = PYXIS_SPARSE_MEM;
+ }
+ else if (addr >= alpha_mv.sm_base_r2
+ && addr <= alpha_mv.sm_base_r2 + PYXIS_MEM_R2_MASK) {
+ mask = PYXIS_MEM_R2_MASK;
+ base = PYXIS_SPARSE_MEM_R2;
+ }
+ else if (addr >= alpha_mv.sm_base_r3
+ && addr <= alpha_mv.sm_base_r3 + PYXIS_MEM_R3_MASK) {
+ mask = PYXIS_MEM_R3_MASK;
+ base = PYXIS_SPARSE_MEM_R3;
+ }
else
{
#if 0
- printk("__readb: address 0x%lx not covered by HAE\n", addr);
+ printk("pyxis: address 0x%lx not covered by HAE\n", addr);
#endif
- return 0x0ffUL;
+ return 0;
}
- shift = (addr & 0x3) << 3;
- result = *(vuip) work;
- result >>= shift;
- return 0x0ffUL & result;
+
+ return ((addr & mask) << 5) + base;
}
-extern inline unsigned long __readw(unsigned long addr)
+__EXTERN_INLINE unsigned long pyxis_srm_readb(unsigned long addr)
{
- unsigned long result, shift, work;
+ unsigned long result, work;
- if ((addr >= pyxis_sm_base_r1) &&
- (addr <= (pyxis_sm_base_r1 + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + PYXIS_SPARSE_MEM + 0x08);
- else
- if ((addr >= pyxis_sm_base_r2) &&
- (addr <= (pyxis_sm_base_r2 + MEM_R2_MASK)))
- work = (((addr & MEM_R2_MASK) << 5) + PYXIS_SPARSE_MEM_R2 + 0x08);
- else
- if ((addr >= pyxis_sm_base_r3) &&
- (addr <= (pyxis_sm_base_r3 + MEM_R3_MASK)))
- work = (((addr & MEM_R3_MASK) << 5) + PYXIS_SPARSE_MEM_R3 + 0x08);
- else
- {
-#if 0
- printk("__readw: address 0x%lx not covered by HAE\n", addr);
-#endif
- return 0x0ffffUL;
- }
- shift = (addr & 0x3) << 3;
- result = *(vuip) work;
- result >>= shift;
- return 0x0ffffUL & result;
+ if ((work = pyxis_srm_base(addr)) == 0)
+ return 0xff;
+ work += 0x00; /* add transfer length */
+
+ result = *(vip) work;
+ return __kernel_extbl(result, addr & 3);
}
-extern inline void __writeb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE unsigned long pyxis_srm_readw(unsigned long addr)
{
- unsigned long work;
+ unsigned long result, work;
- if ((addr >= pyxis_sm_base_r1) &&
- (addr <= (pyxis_sm_base_r1 + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + PYXIS_SPARSE_MEM + 0x00);
- else
- if ((addr >= pyxis_sm_base_r2) &&
- (addr <= (pyxis_sm_base_r2 + MEM_R2_MASK)))
- work = (((addr & MEM_R2_MASK) << 5) + PYXIS_SPARSE_MEM_R2 + 0x00);
- else
- if ((addr >= pyxis_sm_base_r3) &&
- (addr <= (pyxis_sm_base_r3 + MEM_R3_MASK)))
- work = (((addr & MEM_R3_MASK) << 5) + PYXIS_SPARSE_MEM_R3 + 0x00);
- else
- {
-#if 0
- printk("__writeb: address 0x%lx not covered by HAE\n", addr);
-#endif
- return;
- }
- *(vuip) work = b * 0x01010101;
+ if ((work = pyxis_srm_base(addr)) == 0)
+ return 0xffff;
+ work += 0x08; /* add transfer length */
+
+ result = *(vip) work;
+ return __kernel_extwl(result, addr & 3);
}
-extern inline void __writew(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void pyxis_srm_writeb(unsigned char b, unsigned long addr)
{
- unsigned long work;
-
- if ((addr >= pyxis_sm_base_r1) &&
- (addr <= (pyxis_sm_base_r1 + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + PYXIS_SPARSE_MEM + 0x00);
- else
- if ((addr >= pyxis_sm_base_r2) &&
- (addr <= (pyxis_sm_base_r2 + MEM_R2_MASK)))
- work = (((addr & MEM_R2_MASK) << 5) + PYXIS_SPARSE_MEM_R2 + 0x00);
- else
- if ((addr >= pyxis_sm_base_r3) &&
- (addr <= (pyxis_sm_base_r3 + MEM_R3_MASK)))
- work = (((addr & MEM_R3_MASK) << 5) + PYXIS_SPARSE_MEM_R3 + 0x00);
- else
- {
-#if 0
- printk("__writew: address 0x%lx not covered by HAE\n", addr);
-#endif
- return;
+ unsigned long work = pyxis_srm_base(addr);
+ if (work) {
+ work += 0x00; /* add transfer length */
+ *(vuip) work = b * 0x01010101;
}
- *(vuip) work = b * 0x00010001;
}
-#else /* SRM_SETUP */
+__EXTERN_INLINE void pyxis_srm_writew(unsigned short b, unsigned long addr)
+{
+ unsigned long work = pyxis_srm_base(addr);
+ if (work) {
+ work += 0x08; /* add transfer length */
+ *(vuip) work = b * 0x00010001;
+ }
+}
-extern inline unsigned long __readb(unsigned long addr)
+__EXTERN_INLINE unsigned long pyxis_readb(unsigned long addr)
{
- unsigned long result, shift, msb, work, temp;
+ unsigned long result, msb, work, temp;
- shift = (addr & 0x3) << 3;
msb = addr & 0xE0000000UL;
- temp = addr & MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ temp = addr & PYXIS_MEM_R1_MASK ;
+ set_hae(msb);
+
work = ((temp << 5) + PYXIS_SPARSE_MEM + 0x00);
- result = *(vuip) work;
- result >>= shift;
- return 0x0ffUL & result;
+ result = *(vip) work;
+ return __kernel_extbl(result, addr & 3);
}
-extern inline unsigned long __readw(unsigned long addr)
+__EXTERN_INLINE unsigned long pyxis_readw(unsigned long addr)
{
- unsigned long result, shift, msb, work, temp;
+ unsigned long result, msb, work, temp;
- shift = (addr & 0x3) << 3;
msb = addr & 0xE0000000UL;
- temp = addr & MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ temp = addr & PYXIS_MEM_R1_MASK ;
+ set_hae(msb);
+
work = ((temp << 5) + PYXIS_SPARSE_MEM + 0x08);
- result = *(vuip) work;
- result >>= shift;
- return 0x0ffffUL & result;
+ result = *(vip) work;
+ return __kernel_extwl(result, addr & 3);
}
-extern inline void __writeb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE void pyxis_writeb(unsigned char b, unsigned long addr)
{
unsigned long msb ;
msb = addr & 0xE0000000 ;
- addr &= MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ addr &= PYXIS_MEM_R1_MASK ;
+ set_hae(msb);
+
*(vuip) ((addr << 5) + PYXIS_SPARSE_MEM + 0x00) = b * 0x01010101;
}
-extern inline void __writew(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void pyxis_writew(unsigned short b, unsigned long addr)
{
unsigned long msb ;
msb = addr & 0xE0000000 ;
- addr &= MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
+ addr &= PYXIS_MEM_R1_MASK ;
+ set_hae(msb);
+
*(vuip) ((addr << 5) + PYXIS_SPARSE_MEM + 0x08) = b * 0x00010001;
}
-#endif /* SRM_SETUP */
-extern inline unsigned long __readl(unsigned long addr)
+__EXTERN_INLINE unsigned long pyxis_readl(unsigned long addr)
{
return *(vuip) (addr + PYXIS_DENSE_MEM);
}
-extern inline void __writel(unsigned int b, unsigned long addr)
+__EXTERN_INLINE unsigned long pyxis_readq(unsigned long addr)
+{
+ return *(vulp) (addr + PYXIS_DENSE_MEM);
+}
+
+__EXTERN_INLINE void pyxis_writel(unsigned int b, unsigned long addr)
{
*(vuip) (addr + PYXIS_DENSE_MEM) = b;
}
-#endif /* BWIO_ENABLED */
+__EXTERN_INLINE void pyxis_writeq(unsigned long b, unsigned long addr)
+{
+ *(vulp) (addr + PYXIS_DENSE_MEM) = b;
+}
-#define readl(a) __readl((unsigned long)(a))
-#define writel(v,a) __writel((v),(unsigned long)(a))
+/* Find the DENSE memory area for a given bus address. */
+__EXTERN_INLINE unsigned long pyxis_dense_mem(unsigned long addr)
+{
+ return PYXIS_DENSE_MEM;
+}
+
+#undef vucp
+#undef vusp
+#undef vip
#undef vuip
+#undef vulp
-extern unsigned long pyxis_init (unsigned long mem_start,
- unsigned long mem_end);
+#ifdef __WANT_IO_DEF
-#endif /* __KERNEL__ */
+#ifdef CONFIG_ALPHA_RUFFIAN
+#define virt_to_bus pyxis_ruffian_virt_to_bus
+#define bus_to_virt pyxis_ruffian_bus_to_virt
+#else
+#define virt_to_bus pyxis_virt_to_bus
+#define bus_to_virt pyxis_bus_to_virt
+#endif
-/*
- * Data structure for handling PYXIS machine checks:
- */
-struct el_PYXIS_sysdata_mcheck {
- u_long coma_gcr;
- u_long coma_edsr;
- u_long coma_ter;
- u_long coma_elar;
- u_long coma_ehar;
- u_long coma_ldlr;
- u_long coma_ldhr;
- u_long coma_base0;
- u_long coma_base1;
- u_long coma_base2;
- u_long coma_cnfg0;
- u_long coma_cnfg1;
- u_long coma_cnfg2;
- u_long epic_dcsr;
- u_long epic_pear;
- u_long epic_sear;
- u_long epic_tbr1;
- u_long epic_tbr2;
- u_long epic_pbr1;
- u_long epic_pbr2;
- u_long epic_pmr1;
- u_long epic_pmr2;
- u_long epic_harx1;
- u_long epic_harx2;
- u_long epic_pmlt;
- u_long epic_tag0;
- u_long epic_tag1;
- u_long epic_tag2;
- u_long epic_tag3;
- u_long epic_tag4;
- u_long epic_tag5;
- u_long epic_tag6;
- u_long epic_tag7;
- u_long epic_data0;
- u_long epic_data1;
- u_long epic_data2;
- u_long epic_data3;
- u_long epic_data4;
- u_long epic_data5;
- u_long epic_data6;
- u_long epic_data7;
-};
+#ifdef BWIO_ENABLED
+# define __inb pyxis_bw_inb
+# define __inw pyxis_bw_inw
+# define __inl pyxis_bw_inl
+# define __outb pyxis_bw_outb
+# define __outw pyxis_bw_outw
+# define __outl pyxis_bw_outl
+# define __readb pyxis_bw_readb
+# define __readw pyxis_bw_readw
+# define __writeb pyxis_bw_writeb
+# define __writew pyxis_bw_writew
+# define __readl pyxis_bw_readl
+# define __readq pyxis_bw_readq
+# define __writel pyxis_bw_writel
+# define __writeq pyxis_bw_writeq
+#else
+# define __inb pyxis_inb
+# define __inw pyxis_inw
+# define __inl pyxis_inl
+# define __outb pyxis_outb
+# define __outw pyxis_outw
+# define __outl pyxis_outl
+# ifdef CONFIG_ALPHA_SRM_SETUP
+# define __readb pyxis_srm_readb
+# define __readw pyxis_srm_readw
+# define __writeb pyxis_srm_writeb
+# define __writew pyxis_srm_writew
+# else
+# define __readb pyxis_readb
+# define __readw pyxis_readw
+# define __writeb pyxis_writeb
+# define __writew pyxis_writew
+# endif
+# define __readl pyxis_readl
+# define __readq pyxis_readq
+# define __writel pyxis_writel
+# define __writeq pyxis_writeq
+#endif /* BWIO */
+
+#define dense_mem pyxis_dense_mem
+
+#ifdef BWIO_ENABLED
+# define inb(port) __inb((port))
+# define inw(port) __inw((port))
+# define inl(port) __inl((port))
+# define outb(x, port) __outb((x),(port))
+# define outw(x, port) __outw((x),(port))
+# define outl(x, port) __outl((x),(port))
+# define readb(addr) __readb((addr))
+# define readw(addr) __readw((addr))
+# define writeb(b, addr) __writeb((b),(addr))
+# define writew(b, addr) __writew((b),(addr))
+#else
+# define inb(port) \
+ (__builtin_constant_p((port))?__inb(port):_inb(port))
+# define outb(x, port) \
+ (__builtin_constant_p((port))?__outb((x),(port)):_outb((x),(port)))
+#endif /* BWIO */
+
+#define readl(a) __readl((unsigned long)(a))
+#define readq(a) __readq((unsigned long)(a))
+#define writel(v,a) __writel((v),(unsigned long)(a))
+#define writeq(v,a) __writeq((v),(unsigned long)(a))
+
+#endif /* __WANT_IO_DEF */
-#define RTC_PORT(x) (0x70 + (x))
-#define RTC_ADDR(x) (0x80 | (x))
-#define RTC_ALWAYS_BCD 0
+#ifdef __IO_EXTERN_INLINE
+#undef __EXTERN_INLINE
+#undef __IO_EXTERN_INLINE
+#endif
+
+#endif /* __KERNEL__ */
#endif /* __ALPHA_PYXIS__H__ */
diff --git a/include/asm-alpha/t2.h b/include/asm-alpha/core_t2.h
index 524d6f765..1f0984b38 100644
--- a/include/asm-alpha/t2.h
+++ b/include/asm-alpha/core_t2.h
@@ -3,6 +3,8 @@
#include <linux/config.h>
#include <linux/types.h>
+#include <asm/compiler.h>
+
/*
* T2 is the internal name for the core logic chipset which provides
@@ -17,29 +19,29 @@
*
*/
-#define BYTE_ENABLE_SHIFT 5
-#define TRANSFER_LENGTH_SHIFT 3
-#define MEM_R1_MASK 0x03ffffff /* Mem sparse space region 1 mask is 26 bits */
-
-#ifdef CONFIG_ALPHA_SRM_SETUP
-/* if we are using the SRM PCI setup, we'll need to use variables instead */
-#define T2_DMA_WIN_BASE_DEFAULT (1024*1024*1024)
-#define T2_DMA_WIN_SIZE_DEFAULT (1024*1024*1024)
+#define T2_MEM_R1_MASK 0x03ffffff /* Mem sparse region 1 mask is 26 bits */
-extern unsigned int T2_DMA_WIN_BASE;
-extern unsigned int T2_DMA_WIN_SIZE;
+#define T2_DMA_WIN_BASE_DEFAULT (1024*1024*1024)
+#define T2_DMA_WIN_SIZE_DEFAULT (1024*1024*1024)
-#else /* SRM_SETUP */
-#define T2_DMA_WIN_BASE (1024*1024*1024)
-#define T2_DMA_WIN_SIZE (1024*1024*1024)
-#endif /* SRM_SETUP */
+#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SRM_SETUP)
+#define T2_DMA_WIN_BASE alpha_mv.dma_win_base
+#define T2_DMA_WIN_SIZE alpha_mv.dma_win_size
+#else
+#define T2_DMA_WIN_BASE T2_DMA_WIN_BASE_DEFAULT
+#define T2_DMA_WIN_SIZE T2_DMA_WIN_SIZE_DEFAULT
+#endif
/* GAMMA-SABLE is a SABLE with EV5-based CPUs */
-#ifdef CONFIG_ALPHA_GAMMA
-# define GAMMA_BIAS 0x8000000000UL
-#else /* GAMMA */
-# define GAMMA_BIAS 0x0000000000UL
-#endif /* GAMMA */
+#define _GAMMA_BIAS 0x8000000000UL
+
+#if defined(CONFIG_ALPHA_GENERIC)
+#define GAMMA_BIAS alpha_mv.sys.t2.gamma_bias
+#elif defined(CONFIG_ALPHA_GAMMA)
+#define GAMMA_BIAS _GAMMA_BIAS
+#else
+#define GAMMA_BIAS 0
+#endif
/*
* Memory spaces:
@@ -70,7 +72,7 @@ extern unsigned int T2_DMA_WIN_SIZE;
#define T2_HAE_3 (IDENT_ADDR + GAMMA_BIAS + 0x38e000240UL)
#define T2_HAE_4 (IDENT_ADDR + GAMMA_BIAS + 0x38e000260UL)
-#define HAE_ADDRESS T2_HAE_1
+#define T2_HAE_ADDRESS T2_HAE_1
/* T2 CSRs are in the non-cachable primary IO space from 3.8000.0000 to
3.8fff.ffff
@@ -105,344 +107,17 @@ extern unsigned int T2_DMA_WIN_SIZE;
*
*
*/
-#define CPU0_BASE (IDENT_ADDR + GAMMA_BIAS + 0x380000000L)
-#define CPU1_BASE (IDENT_ADDR + GAMMA_BIAS + 0x381000000L)
-#define CPU2_BASE (IDENT_ADDR + GAMMA_BIAS + 0x382000000L)
-#define CPU3_BASE (IDENT_ADDR + GAMMA_BIAS + 0x383000000L)
-#define MEM0_BASE (IDENT_ADDR + GAMMA_BIAS + 0x388000000L)
-#define MEM1_BASE (IDENT_ADDR + GAMMA_BIAS + 0x389000000L)
-#define MEM2_BASE (IDENT_ADDR + GAMMA_BIAS + 0x38a000000L)
-#define MEM3_BASE (IDENT_ADDR + GAMMA_BIAS + 0x38b000000L)
-
-#ifdef __KERNEL__
-
-/*
- * Translate physical memory address as seen on (PCI) bus into
- * a kernel virtual address and vv.
- */
-extern inline unsigned long virt_to_bus(void * address)
-{
- return virt_to_phys(address) + T2_DMA_WIN_BASE;
-}
-
-extern inline void * bus_to_virt(unsigned long address)
-{
- return phys_to_virt(address - T2_DMA_WIN_BASE);
-}
-
-/*
- * I/O functions:
- *
- * T2 (the core logic PCI/memory support chipset for the SABLE
- * series of processors uses a sparse address mapping scheme to
- * get at PCI memory and I/O.
- */
-
-#define vuip volatile unsigned int *
-
-extern inline unsigned int __inb(unsigned long addr)
-{
- long result = *(vuip) ((addr << 5) + T2_IO + 0x00);
- result >>= (addr & 3) * 8;
- return 0xffUL & result;
-}
-
-extern inline void __outb(unsigned char b, unsigned long addr)
-{
- unsigned int w;
-
- asm ("insbl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
- *(vuip) ((addr << 5) + T2_IO + 0x00) = w;
- mb();
-}
-
-extern inline unsigned int __inw(unsigned long addr)
-{
- long result = *(vuip) ((addr << 5) + T2_IO + 0x08);
- result >>= (addr & 3) * 8;
- return 0xffffUL & result;
-}
-
-extern inline void __outw(unsigned short b, unsigned long addr)
-{
- unsigned int w;
-
- asm ("inswl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
- *(vuip) ((addr << 5) + T2_IO + 0x08) = w;
- mb();
-}
-
-extern inline unsigned int __inl(unsigned long addr)
-{
- return *(vuip) ((addr << 5) + T2_IO + 0x18);
-}
-
-extern inline void __outl(unsigned int b, unsigned long addr)
-{
- *(vuip) ((addr << 5) + T2_IO + 0x18) = b;
- mb();
-}
+#define T2_CPU0_BASE (IDENT_ADDR + GAMMA_BIAS + 0x380000000L)
+#define T2_CPU1_BASE (IDENT_ADDR + GAMMA_BIAS + 0x381000000L)
+#define T2_CPU2_BASE (IDENT_ADDR + GAMMA_BIAS + 0x382000000L)
+#define T2_CPU3_BASE (IDENT_ADDR + GAMMA_BIAS + 0x383000000L)
+#define T2_MEM0_BASE (IDENT_ADDR + GAMMA_BIAS + 0x388000000L)
+#define T2_MEM1_BASE (IDENT_ADDR + GAMMA_BIAS + 0x389000000L)
+#define T2_MEM2_BASE (IDENT_ADDR + GAMMA_BIAS + 0x38a000000L)
+#define T2_MEM3_BASE (IDENT_ADDR + GAMMA_BIAS + 0x38b000000L)
/*
- * Memory functions. 64-bit and 32-bit accesses are done through
- * dense memory space, everything else through sparse space.
- *
- * For reading and writing 8 and 16 bit quantities we need to
- * go through one of the three sparse address mapping regions
- * and use the HAE_MEM CSR to provide some bits of the address.
- * The following few routines use only sparse address region 1
- * which gives 1Gbyte of accessible space which relates exactly
- * to the amount of PCI memory mapping *into* system address space.
- * See p 6-17 of the specification but it looks something like this:
- *
- * 21164 Address:
- *
- * 3 2 1
- * 9876543210987654321098765432109876543210
- * 1ZZZZ0.PCI.QW.Address............BBLL
- *
- * ZZ = SBZ
- * BB = Byte offset
- * LL = Transfer length
- *
- * PCI Address:
- *
- * 3 2 1
- * 10987654321098765432109876543210
- * HHH....PCI.QW.Address........ 00
- *
- * HHH = 31:29 HAE_MEM CSR
- *
- */
-#ifdef CONFIG_ALPHA_SRM_SETUP
-
-extern unsigned long t2_sm_base;
-
-extern inline unsigned long __readb(unsigned long addr)
-{
- unsigned long result, shift, work;
-
- if ((addr >= t2_sm_base) && (addr <= (t2_sm_base + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x00);
- else
- if ((addr >= 512*1024) && (addr < 1024*1024)) /* check HOLE */
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x00);
- else
- {
-#if 0
- printk("__readb: address 0x%lx not covered by HAE\n", addr);
-#endif
- return 0x0ffUL;
- }
- shift = (addr & 0x3) << 3;
- result = *(vuip) work;
- result >>= shift;
- return 0x0ffUL & result;
-}
-
-extern inline unsigned long __readw(unsigned long addr)
-{
- unsigned long result, shift, work;
-
- if ((addr >= t2_sm_base) && (addr <= (t2_sm_base + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x08);
- else
- if ((addr >= 512*1024) && (addr < 1024*1024)) /* check HOLE */
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x08);
- else
- {
-#if 0
- printk("__readw: address 0x%lx not covered by HAE\n", addr);
-#endif
- return 0x0ffffUL;
- }
- shift = (addr & 0x3) << 3;
- result = *(vuip) work;
- result >>= shift;
- return 0x0ffffUL & result;
-}
-
-/* on SABLE with T2, we must use SPARSE memory even for 32-bit access */
-extern inline unsigned long __readl(unsigned long addr)
-{
- unsigned long result, work;
-
- if ((addr >= t2_sm_base) && (addr <= (t2_sm_base + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x18);
- else
- if ((addr >= 512*1024) && (addr < 1024*1024)) /* check HOLE */
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x18);
- else
- {
-#if 0
- printk("__readl: address 0x%lx not covered by HAE\n", addr);
-#endif
- return 0x0ffffffffUL;
- }
- result = *(vuip) work;
- return 0xffffffffUL & result;
-}
-
-extern inline void __writeb(unsigned char b, unsigned long addr)
-{
- unsigned long work;
-
- if ((addr >= t2_sm_base) && (addr <= (t2_sm_base + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x00);
- else
- if ((addr >= 512*1024) && (addr < 1024*1024)) /* check HOLE */
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x00);
- else
- {
-#if 0
- printk("__writeb: address 0x%lx not covered by HAE\n", addr);
-#endif
- return;
- }
- *(vuip) work = b * 0x01010101;
-}
-
-extern inline void __writew(unsigned short b, unsigned long addr)
-{
- unsigned long work;
-
- if ((addr >= t2_sm_base) && (addr <= (t2_sm_base + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x08);
- else
- if ((addr >= 512*1024) && (addr < 1024*1024)) /* check HOLE */
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x08);
- else
- {
-#if 0
- printk("__writew: address 0x%lx not covered by HAE\n", addr);
-#endif
- return;
- }
- *(vuip) work = b * 0x00010001;
-}
-
-/* on SABLE with T2, we must use SPARSE memory even for 32-bit access */
-extern inline void __writel(unsigned int b, unsigned long addr)
-{
- unsigned long work;
-
- if ((addr >= t2_sm_base) && (addr <= (t2_sm_base + MEM_R1_MASK)))
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x18);
- else
- if ((addr >= 512*1024) && (addr < 1024*1024)) /* check HOLE */
- work = (((addr & MEM_R1_MASK) << 5) + T2_SPARSE_MEM + 0x18);
- {
-#if 0
- printk("__writel: address 0x%lx not covered by HAE\n", addr);
-#endif
- return;
- }
- *(vuip) work = b;
-}
-
-#else /* SRM_SETUP */
-
-extern inline unsigned long __readb(unsigned long addr)
-{
- unsigned long result, shift, msb;
-
- shift = (addr & 0x3) * 8 ;
- msb = addr & 0xE0000000 ;
- addr &= MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
- result = *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x00) ;
- result >>= shift;
- return 0xffUL & result;
-}
-
-extern inline unsigned long __readw(unsigned long addr)
-{
- unsigned long result, shift, msb;
-
- shift = (addr & 0x3) * 8;
- msb = addr & 0xE0000000 ;
- addr &= MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
- result = *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x08);
- result >>= shift;
- return 0xffffUL & result;
-}
-
-/* on SABLE with T2, we must use SPARSE memory even for 32-bit access */
-extern inline unsigned long __readl(unsigned long addr)
-{
- unsigned long result, msb;
-
- msb = addr & 0xE0000000 ;
- addr &= MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
- result = *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x18);
- return 0xffffffffUL & result;
-}
-
-extern inline void __writeb(unsigned char b, unsigned long addr)
-{
- unsigned long msb ;
-
- msb = addr & 0xE0000000 ;
- addr &= MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
- *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x00) = b * 0x01010101;
-}
-
-extern inline void __writew(unsigned short b, unsigned long addr)
-{
- unsigned long msb ;
-
- msb = addr & 0xE0000000 ;
- addr &= MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
- *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x08) = b * 0x00010001;
-}
-
-/* on SABLE with T2, we must use SPARSE memory even for 32-bit access */
-extern inline void __writel(unsigned int b, unsigned long addr)
-{
- unsigned long msb ;
-
- msb = addr & 0xE0000000 ;
- addr &= MEM_R1_MASK ;
- if (msb != hae.cache) {
- set_hae(msb);
- }
- *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x18) = b;
-}
-
-#endif /* SRM_SETUP */
-
-#define inb(port) \
-(__builtin_constant_p((port))?__inb(port):_inb(port))
-
-#define outb(x, port) \
-(__builtin_constant_p((port))?__outb((x),(port)):_outb((x),(port)))
-
-#define readl(a) __readl((unsigned long)(a))
-#define writel(v,a) __writel((v),(unsigned long)(a))
-
-#undef vuip
-
-extern unsigned long t2_init (unsigned long mem_start,
- unsigned long mem_end);
-
-#endif /* __KERNEL__ */
-
-/*
* Sable CPU Module CSRS
*
* These are CSRs for hardware other than the CPU chip on the CPU module.
@@ -452,22 +127,22 @@ extern unsigned long t2_init (unsigned long mem_start,
*/
struct sable_cpu_csr {
-unsigned long bcc; long fill_00[3]; /* Backup Cache Control */
-unsigned long bcce; long fill_01[3]; /* Backup Cache Correctable Error */
-unsigned long bccea; long fill_02[3]; /* B-Cache Corr Err Address Latch */
-unsigned long bcue; long fill_03[3]; /* B-Cache Uncorrectable Error */
-unsigned long bcuea; long fill_04[3]; /* B-Cache Uncorr Err Addr Latch */
-unsigned long dter; long fill_05[3]; /* Duplicate Tag Error */
-unsigned long cbctl; long fill_06[3]; /* CBus Control */
-unsigned long cbe; long fill_07[3]; /* CBus Error */
-unsigned long cbeal; long fill_08[3]; /* CBus Error Addr Latch low */
-unsigned long cbeah; long fill_09[3]; /* CBus Error Addr Latch high */
-unsigned long pmbx; long fill_10[3]; /* Processor Mailbox */
-unsigned long ipir; long fill_11[3]; /* Inter-Processor Int Request */
-unsigned long sic; long fill_12[3]; /* System Interrupt Clear */
-unsigned long adlk; long fill_13[3]; /* Address Lock (LDxL/STxC) */
-unsigned long madrl; long fill_14[3]; /* CBus Miss Address */
-unsigned long rev; long fill_15[3]; /* CMIC Revision */
+ unsigned long bcc; long fill_00[3]; /* Backup Cache Control */
+ unsigned long bcce; long fill_01[3]; /* Backup Cache Correctable Error */
+ unsigned long bccea; long fill_02[3]; /* B-Cache Corr Err Address Latch */
+ unsigned long bcue; long fill_03[3]; /* B-Cache Uncorrectable Error */
+ unsigned long bcuea; long fill_04[3]; /* B-Cache Uncorr Err Addr Latch */
+ unsigned long dter; long fill_05[3]; /* Duplicate Tag Error */
+ unsigned long cbctl; long fill_06[3]; /* CBus Control */
+ unsigned long cbe; long fill_07[3]; /* CBus Error */
+ unsigned long cbeal; long fill_08[3]; /* CBus Error Addr Latch low */
+ unsigned long cbeah; long fill_09[3]; /* CBus Error Addr Latch high */
+ unsigned long pmbx; long fill_10[3]; /* Processor Mailbox */
+ unsigned long ipir; long fill_11[3]; /* Inter-Processor Int Request */
+ unsigned long sic; long fill_12[3]; /* System Interrupt Clear */
+ unsigned long adlk; long fill_13[3]; /* Address Lock (LDxL/STxC) */
+ unsigned long madrl; long fill_14[3]; /* CBus Miss Address */
+ unsigned long rev; long fill_15[3]; /* CMIC Revision */
};
/*
@@ -495,7 +170,7 @@ struct el_t2_procdata_mcheck {
unsigned long elfmc_biu_stat; /* BIU Status. */
unsigned long elfmc_biu_addr; /* BUI Address. */
unsigned long elfmc_biu_ctl; /* BIU Control. */
- unsigned long elfmc_fill_syndrome; /* For correcting ECC errors. */
+ unsigned long elfmc_fill_syndrome; /* For correcting ECC errors. */
unsigned long elfmc_fill_addr;/* Cache block which was being read. */
unsigned long elfmc_va; /* Effective VA of fault or miss. */
unsigned long elfmc_bc_tag; /* Backup Cache Tag Probe Results. */
@@ -507,10 +182,10 @@ struct el_t2_procdata_mcheck {
struct el_t2_logout_header {
unsigned int elfl_size; /* size in bytes of logout area. */
- int elfl_sbz1:31; /* Should be zero. */
- char elfl_retry:1; /* Retry flag. */
- unsigned int elfl_procoffset; /* Processor-specific offset. */
- unsigned int elfl_sysoffset; /* Offset of system-specific. */
+ int elfl_sbz1:31; /* Should be zero. */
+ char elfl_retry:1; /* Retry flag. */
+ unsigned int elfl_procoffset; /* Processor-specific offset. */
+ unsigned int elfl_sysoffset; /* Offset of system-specific. */
unsigned int elfl_error_type; /* PAL error type code. */
unsigned int elfl_frame_rev; /* PAL Frame revision. */
};
@@ -554,7 +229,7 @@ struct el_t2_data_memory {
/*
- * Sable other cpu error frame - sable pfms section 3.43
+ * Sable other CPU error frame - sable pfms section 3.43
*/
struct el_t2_data_other_cpu {
short elco_cpuid; /* CPU ID */
@@ -578,7 +253,7 @@ struct el_t2_data_other_cpu {
};
/*
- * Sable other cpu error frame - sable pfms section 3.44
+ * Sable other CPU error frame - sable pfms section 3.44
*/
struct el_t2_data_t2{
struct el_t2_frame_header elct_hdr; /* ID$T2-FRAME */
@@ -647,8 +322,370 @@ struct el_t2_frame_corrected {
};
-#define RTC_PORT(x) (0x70 + (x))
-#define RTC_ADDR(x) (0x80 | (x))
-#define RTC_ALWAYS_BCD 0
+#ifdef __KERNEL__
+
+#ifndef __EXTERN_INLINE
+#define __EXTERN_INLINE extern inline
+#define __IO_EXTERN_INLINE
+#endif
+
+/*
+ * Translate physical memory address as seen on (PCI) bus into
+ * a kernel virtual address and vv.
+ */
+
+__EXTERN_INLINE unsigned long t2_virt_to_bus(void * address)
+{
+ return virt_to_phys(address) + T2_DMA_WIN_BASE;
+}
+
+__EXTERN_INLINE void * t2_bus_to_virt(unsigned long address)
+{
+ return phys_to_virt(address - T2_DMA_WIN_BASE);
+}
+
+/*
+ * I/O functions:
+ *
+ * T2 (the core logic PCI/memory support chipset for the SABLE
+ * series of processors uses a sparse address mapping scheme to
+ * get at PCI memory and I/O.
+ */
+
+#define vip volatile int *
+#define vuip volatile unsigned int *
+
+__EXTERN_INLINE unsigned int t2_inb(unsigned long addr)
+{
+ long result = *(vip) ((addr << 5) + T2_IO + 0x00);
+ return __kernel_extbl(result, addr & 3);
+}
+
+__EXTERN_INLINE void t2_outb(unsigned char b, unsigned long addr)
+{
+ unsigned long w;
+
+ w = __kernel_insbl(b, addr & 3);
+ *(vuip) ((addr << 5) + T2_IO + 0x00) = w;
+ mb();
+}
+
+__EXTERN_INLINE unsigned int t2_inw(unsigned long addr)
+{
+ long result = *(vip) ((addr << 5) + T2_IO + 0x08);
+ return __kernel_extwl(result, addr & 3);
+}
+
+__EXTERN_INLINE void t2_outw(unsigned short b, unsigned long addr)
+{
+ unsigned int w;
+
+ w = __kernel_inswl(b, addr & 3);
+ *(vuip) ((addr << 5) + T2_IO + 0x08) = w;
+ mb();
+}
+
+__EXTERN_INLINE unsigned int t2_inl(unsigned long addr)
+{
+ return *(vuip) ((addr << 5) + T2_IO + 0x18);
+}
+
+__EXTERN_INLINE void t2_outl(unsigned int b, unsigned long addr)
+{
+ *(vuip) ((addr << 5) + T2_IO + 0x18) = b;
+ mb();
+}
+
+
+/*
+ * Memory functions. 64-bit and 32-bit accesses are done through
+ * dense memory space, everything else through sparse space.
+ *
+ * For reading and writing 8 and 16 bit quantities we need to
+ * go through one of the three sparse address mapping regions
+ * and use the HAE_MEM CSR to provide some bits of the address.
+ * The following few routines use only sparse address region 1
+ * which gives 1Gbyte of accessible space which relates exactly
+ * to the amount of PCI memory mapping *into* system address space.
+ * See p 6-17 of the specification but it looks something like this:
+ *
+ * 21164 Address:
+ *
+ * 3 2 1
+ * 9876543210987654321098765432109876543210
+ * 1ZZZZ0.PCI.QW.Address............BBLL
+ *
+ * ZZ = SBZ
+ * BB = Byte offset
+ * LL = Transfer length
+ *
+ * PCI Address:
+ *
+ * 3 2 1
+ * 10987654321098765432109876543210
+ * HHH....PCI.QW.Address........ 00
+ *
+ * HHH = 31:29 HAE_MEM CSR
+ *
+ */
+
+__EXTERN_INLINE unsigned long t2_srm_base(unsigned long addr)
+{
+ if ((addr >= alpha_mv.sm_base_r1
+ && addr <= alpha_mv.sm_base_r1 + T2_MEM_R1_MASK)
+ || (addr >= 512*1024 && addr < 1024*1024)) {
+ return ((addr & T2_MEM_R1_MASK) << 5) + T2_SPARSE_MEM;
+ }
+#if 0
+ printk("T2: address 0x%lx not covered by HAE\n", addr);
+#endif
+ return 0;
+}
+
+__EXTERN_INLINE unsigned long t2_srm_readb(unsigned long addr)
+{
+ unsigned long result, work;
+
+ if ((work = t2_srm_base(addr)) == 0)
+ return 0xff;
+ work += 0x00; /* add transfer length */
+
+ result = *(vip) work;
+ return __kernel_extbl(result, addr & 3);
+}
+
+__EXTERN_INLINE unsigned long t2_srm_readw(unsigned long addr)
+{
+ unsigned long result, work;
+
+ if ((work = t2_srm_base(addr)) == 0)
+ return 0xffff;
+ work += 0x08; /* add transfer length */
+
+ result = *(vip) work;
+ return __kernel_extwl(result, addr & 3);
+}
+
+/* On SABLE with T2, we must use SPARSE memory even for 32-bit access ... */
+__EXTERN_INLINE unsigned long t2_srm_readl(unsigned long addr)
+{
+ unsigned long work;
+
+ if ((work = t2_srm_base(addr)) == 0)
+ return 0xffffffff;
+ work += 0x18; /* add transfer length */
+
+ return *(vuip) work;
+}
+
+/* ... which makes me wonder why we advertise we have DENSE memory at all.
+ Anyway, guess that means we should emulate 64-bit access as two cycles. */
+__EXTERN_INLINE unsigned long t2_srm_readq(unsigned long addr)
+{
+ unsigned long work, r0, r1;
+
+ if ((work = t2_srm_base(addr)) == 0)
+ return ~0UL;
+ work += 0x18; /* add transfer length */
+
+ r0 = *(vuip) work;
+ r1 = *(vuip) (work + (4 << 5));
+ return r1 << 32 | r0;
+}
+
+__EXTERN_INLINE void t2_srm_writeb(unsigned char b, unsigned long addr)
+{
+ unsigned long work = t2_srm_base(addr);
+ if (work) {
+ work += 0x00; /* add transfer length */
+ *(vuip) work = b * 0x01010101;
+ }
+}
+
+__EXTERN_INLINE void t2_srm_writew(unsigned short b, unsigned long addr)
+{
+ unsigned long work = t2_srm_base(addr);
+ if (work) {
+ work += 0x08; /* add transfer length */
+ *(vuip) work = b * 0x00010001;
+ }
+}
+
+/* On SABLE with T2, we must use SPARSE memory even for 32-bit access ... */
+__EXTERN_INLINE void t2_srm_writel(unsigned int b, unsigned long addr)
+{
+ unsigned long work = t2_srm_base(addr);
+ if (work) {
+ work += 0x18; /* add transfer length */
+ *(vuip) work = b;
+ }
+}
+
+/* ... which makes me wonder why we advertise we have DENSE memory at all.
+ Anyway, guess that means we should emulate 64-bit access as two cycles. */
+__EXTERN_INLINE void t2_srm_writeq(unsigned long b, unsigned long addr)
+{
+ unsigned long work = t2_srm_base(addr);
+ if (work) {
+ work += 0x18; /* add transfer length */
+ *(vuip) work = b;
+ *(vuip) (work + (4 << 5)) = b >> 32;
+ }
+}
+
+__EXTERN_INLINE unsigned long t2_readb(unsigned long addr)
+{
+ unsigned long result, msb;
+
+ msb = addr & 0xE0000000 ;
+ addr &= T2_MEM_R1_MASK ;
+ set_hae(msb);
+
+ result = *(vip) ((addr << 5) + T2_SPARSE_MEM + 0x00) ;
+ return __kernel_extbl(result, addr & 3);
+}
+
+__EXTERN_INLINE unsigned long t2_readw(unsigned long addr)
+{
+ unsigned long result, msb;
+
+ msb = addr & 0xE0000000 ;
+ addr &= T2_MEM_R1_MASK ;
+ set_hae(msb);
+
+ result = *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x08);
+ return __kernel_extwl(result, addr & 3);
+}
+
+/* On SABLE with T2, we must use SPARSE memory even for 32-bit access. */
+__EXTERN_INLINE unsigned long t2_readl(unsigned long addr)
+{
+ unsigned long msb;
+
+ msb = addr & 0xE0000000 ;
+ addr &= T2_MEM_R1_MASK ;
+ set_hae(msb);
+
+ return *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x18);
+}
+
+__EXTERN_INLINE unsigned long t2_readq(unsigned long addr)
+{
+ unsigned long r0, r1, work, msb;
+
+ msb = addr & 0xE0000000 ;
+ addr &= T2_MEM_R1_MASK ;
+ set_hae(msb);
+
+ work = (addr << 5) + T2_SPARSE_MEM + 0x18;
+ r0 = *(vuip)(work);
+ r1 = *(vuip)(work + (4 << 5));
+ return r1 << 32 | r0;
+}
+
+__EXTERN_INLINE void t2_writeb(unsigned char b, unsigned long addr)
+{
+ unsigned long msb ;
+
+ msb = addr & 0xE0000000 ;
+ addr &= T2_MEM_R1_MASK ;
+ set_hae(msb);
+
+ *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x00) = b * 0x01010101;
+}
+
+__EXTERN_INLINE void t2_writew(unsigned short b, unsigned long addr)
+{
+ unsigned long msb ;
+
+ msb = addr & 0xE0000000 ;
+ addr &= T2_MEM_R1_MASK ;
+ set_hae(msb);
+
+ *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x08) = b * 0x00010001;
+}
+
+/* On SABLE with T2, we must use SPARSE memory even for 32-bit access. */
+__EXTERN_INLINE void t2_writel(unsigned int b, unsigned long addr)
+{
+ unsigned long msb ;
+
+ msb = addr & 0xE0000000 ;
+ addr &= T2_MEM_R1_MASK ;
+ set_hae(msb);
+
+ *(vuip) ((addr << 5) + T2_SPARSE_MEM + 0x18) = b;
+}
+
+__EXTERN_INLINE void t2_writeq(unsigned long b, unsigned long addr)
+{
+ unsigned long msb, work;
+
+ msb = addr & 0xE0000000 ;
+ addr &= T2_MEM_R1_MASK ;
+ set_hae(msb);
+
+ work = (addr << 5) + T2_SPARSE_MEM + 0x18;
+ *(vuip)work = b;
+ *(vuip)(work + (4 << 5)) = b >> 32;
+}
+
+/* Find the DENSE memory area for a given bus address. */
+
+__EXTERN_INLINE unsigned long t2_dense_mem(unsigned long addr)
+{
+ return T2_DENSE_MEM;
+}
+
+#undef vip
+#undef vuip
+
+#ifdef __WANT_IO_DEF
+
+#define virt_to_bus t2_virt_to_bus
+#define bus_to_virt t2_bus_to_virt
+#define __inb t2_inb
+#define __inw t2_inw
+#define __inl t2_inl
+#define __outb t2_outb
+#define __outw t2_outw
+#define __outl t2_outl
+
+#ifdef CONFIG_ALPHA_SRM_SETUP
+#define __readb t2_srm_readb
+#define __readw t2_srm_readw
+#define __readl t2_srm_readl
+#define __readq t2_srm_readq
+#define __writeb t2_srm_writeb
+#define __writew t2_srm_writew
+#define __writel t2_srm_writel
+#define __writeq t2_srm_writeq
+#else
+#define __readb t2_readb
+#define __readw t2_readw
+#define __readl t2_readl
+#define __readq t2_readq
+#define __writeb t2_writeb
+#define __writew t2_writew
+#define __writel t2_writel
+#define __writeq t2_writeq
+#endif
+
+#define dense_mem t2_dense_mem
+
+#define inb(port) \
+(__builtin_constant_p((port))?__inb(port):_inb(port))
+
+#define outb(x, port) \
+(__builtin_constant_p((port))?__outb((x),(port)):_outb((x),(port)))
+
+#endif /* __WANT_IO_DEF */
+
+#ifdef __IO_EXTERN_INLINE
+#undef __EXTERN_INLINE
+#undef __IO_EXTERN_INLINE
+#endif
+
+#endif /* __KERNEL__ */
#endif /* __ALPHA_T2__H__ */
diff --git a/include/asm-alpha/tsunami.h b/include/asm-alpha/core_tsunami.h
index 2c6be4e23..5da9c08bb 100644
--- a/include/asm-alpha/tsunami.h
+++ b/include/asm-alpha/core_tsunami.h
@@ -3,6 +3,7 @@
#include <linux/config.h>
#include <linux/types.h>
+#include <asm/compiler.h>
/*
* TSUNAMI/TYPHOON are the internal names for the core logic chipset which
@@ -15,22 +16,18 @@
*
*/
-#define BYTE_ENABLE_SHIFT 5
-#define TRANSFER_LENGTH_SHIFT 3
-
-#ifdef CONFIG_ALPHA_SRM_SETUP
-/* if we are using the SRM PCI setup, we'll need to use variables instead */
#define TSUNAMI_DMA_WIN_BASE_DEFAULT (1024*1024*1024)
#define TSUNAMI_DMA_WIN_SIZE_DEFAULT (1024*1024*1024)
-extern unsigned int TSUNAMI_DMA_WIN_BASE;
-extern unsigned int TSUNAMI_DMA_WIN_SIZE;
-
-#else /* SRM_SETUP */
-#define TSUNAMI_DMA_WIN_BASE (1024*1024*1024)
-#define TSUNAMI_DMA_WIN_SIZE (1024*1024*1024)
-#endif /* SRM_SETUP */
+#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SRM_SETUP)
+#define TSUNAMI_DMA_WIN_BASE alpha_mv.dma_win_base
+#define TSUNAMI_DMA_WIN_SIZE alpha_mv.dma_win_size
+#else
+#define TSUNAMI_DMA_WIN_BASE TSUNAMI_DMA_WIN_BASE_DEFAULT
+#define TSUNAMI_DMA_WIN_SIZE TSUNAMI_DMA_WIN_SIZE_DEFAULT
+#endif
+/* XXX: Do we need to conditionalize on this? */
#ifdef USE_48_BIT_KSEG
#define TS_BIAS 0x80000000000UL
#else
@@ -287,20 +284,30 @@ union TPchipPERRMASK {
#define TSUNAMI_PCI1_IO (IDENT_ADDR + TS_BIAS + 0x3FC000000UL)
#define TSUNAMI_PCI1_CONF (IDENT_ADDR + TS_BIAS + 0x3FE000000UL)
-#define HAE_ADDRESS 0
+/*
+ * Data structure for handling TSUNAMI machine checks:
+ */
+struct el_TSUNAMI_sysdata_mcheck {
+};
+
#ifdef __KERNEL__
+#ifndef __EXTERN_INLINE
+#define __EXTERN_INLINE extern inline
+#define __IO_EXTERN_INLINE
+#endif
+
/*
* Translate physical memory address as seen on (PCI) bus into
* a kernel virtual address and vv.
*/
-extern inline unsigned long virt_to_bus(void * address)
+__EXTERN_INLINE unsigned long tsunami_virt_to_bus(void * address)
{
return virt_to_phys(address) + TSUNAMI_DMA_WIN_BASE;
}
-extern inline void * bus_to_virt(unsigned long address)
+__EXTERN_INLINE void * tsunami_bus_to_virt(unsigned long address)
{
return phys_to_virt(address - TSUNAMI_DMA_WIN_BASE);
}
@@ -315,138 +322,132 @@ extern inline void * bus_to_virt(unsigned long address)
/* HACK ALERT! HACK ALERT! */
/* HACK ALERT! HACK ALERT! */
-/* only using PCI bus 0 for now in all routines */
+/* Only using PCI bus 0 for now in all routines. */
+
+#define TSUNAMI_IACK_SC TSUNAMI_PCI0_IACK_SC
/* HACK ALERT! HACK ALERT! */
/* HACK ALERT! HACK ALERT! */
-
+#define vucp volatile unsigned char *
+#define vusp volatile unsigned short *
#define vuip volatile unsigned int *
+#define vulp volatile unsigned long *
-extern inline unsigned int __inb(unsigned long addr)
+__EXTERN_INLINE unsigned int tsunami_inb(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldbu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned char *)(addr+TSUNAMI_PCI0_IO)));
-
- return result;
+ return __kernel_ldbu(*(vucp)(addr + TSUNAMI_PCI0_IO));
}
-extern inline void __outb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE void tsunami_outb(unsigned char b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stb %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned char *)(addr+TSUNAMI_PCI0_IO)), "r" (b));
+ __kernel_stb(b, *(vucp)(addr + TSUNAMI_PCI0_IO));
+ mb();
}
-extern inline unsigned int __inw(unsigned long addr)
+__EXTERN_INLINE unsigned int tsunami_inw(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldwu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned short *)(addr+TSUNAMI_PCI0_IO)));
-
- return result;
+ return __kernel_ldwu(*(vusp)(addr+TSUNAMI_PCI0_IO));
}
-extern inline void __outw(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void tsunami_outw(unsigned short b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stw %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned short *)(addr+TSUNAMI_PCI0_IO)), "r" (b));
+ __kernel_stw(b, *(vusp)(addr+TSUNAMI_PCI0_IO));
+ mb();
}
-extern inline unsigned int __inl(unsigned long addr)
+__EXTERN_INLINE unsigned int tsunami_inl(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldl %0,%1"
- : "=r" (result)
- : "m" (*(unsigned int *)(addr+TSUNAMI_PCI0_IO)));
-
- return result;
+ return *(vuip)(addr+TSUNAMI_PCI0_IO);
}
-extern inline void __outl(unsigned int b, unsigned long addr)
+__EXTERN_INLINE void tsunami_outl(unsigned int b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stl %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned int *)(addr+TSUNAMI_PCI0_IO)), "r" (b));
+ *(vuip)(addr+TSUNAMI_PCI0_IO) = b;
+ mb();
}
/*
* Memory functions. all accesses are done through linear space.
*/
-extern inline unsigned long __readb(unsigned long addr)
+__EXTERN_INLINE unsigned long tsunami_readb(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldbu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned char *)(addr+TSUNAMI_PCI0_MEM)));
-
- return result;
+ return __kernel_ldbu(*(vucp)(addr+TSUNAMI_PCI0_MEM));
}
-extern inline unsigned long __readw(unsigned long addr)
+__EXTERN_INLINE unsigned long tsunami_readw(unsigned long addr)
{
- register unsigned long result;
-
- __asm__ __volatile__ (
- "ldwu %0,%1"
- : "=r" (result)
- : "m" (*(unsigned short *)(addr+TSUNAMI_PCI0_MEM)));
+ return __kernel_ldwu(*(vusp)(addr+TSUNAMI_PCI0_MEM));
+}
- return result;
+__EXTERN_INLINE unsigned long tsunami_readl(unsigned long addr)
+{
+ return *(vuip)(addr+TSUNAMI_PCI0_MEM);
}
-extern inline unsigned long __readl(unsigned long addr)
+__EXTERN_INLINE unsigned long tsunami_readq(unsigned long addr)
{
- register unsigned long result;
+ return *(vulp)(addr+TSUNAMI_PCI0_MEM);
+}
- __asm__ __volatile__ (
- "ldl %0,%1"
- : "=r" (result)
- : "m" (*(unsigned int *)(addr+TSUNAMI_PCI0_MEM)));
+__EXTERN_INLINE void tsunami_writeb(unsigned char b, unsigned long addr)
+{
+ __kernel_stb(b, *(vucp)(addr+TSUNAMI_PCI0_MEM));
+ mb();
+}
- return result;
+__EXTERN_INLINE void tsunami_writew(unsigned short b, unsigned long addr)
+{
+ __kernel_stw(b, *(vusp)(addr+TSUNAMI_PCI0_MEM));
+ mb();
}
-extern inline void __writeb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE void tsunami_writel(unsigned int b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stb %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned char *)(addr+TSUNAMI_PCI0_MEM)), "r" (b));
+ *(vuip)(addr+TSUNAMI_PCI0_MEM) = b;
+ mb();
}
-extern inline void __writew(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void tsunami_writeq(unsigned long b, unsigned long addr)
{
- __asm__ __volatile__ (
- "stw %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned short *)(addr+TSUNAMI_PCI0_MEM)), "r" (b));
+ *(vulp)(addr+TSUNAMI_PCI0_MEM) = b;
+ mb();
}
-extern inline void __writel(unsigned int b, unsigned long addr)
+/* Find the DENSE memory area for a given bus address. */
+
+__EXTERN_INLINE unsigned long tsunami_dense_mem(unsigned long addr)
{
- __asm__ __volatile__ (
- "stl %1,%0\n\t"
- "mb"
- : : "m" (*(unsigned int *)(addr+TSUNAMI_PCI0_MEM)), "r" (b));
+ return TSUNAMI_PCI0_MEM;
}
+#undef vucp
+#undef vusp
+#undef vuip
+#undef vulp
+
+#ifdef __WANT_IO_DEF
+
+#define virt_to_bus tsunami_virt_to_bus
+#define bus_to_virt tsunami_bus_to_virt
+
+#define __inb tsunami_inb
+#define __inw tsunami_inw
+#define __inl tsunami_inl
+#define __outb tsunami_outb
+#define __outw tsunami_outw
+#define __outl tsunami_outl
+#define __readb tsunami_readb
+#define __readw tsunami_readw
+#define __writeb tsunami_writeb
+#define __writew tsunami_writew
+#define __readl tsunami_readl
+#define __readq tsunami_readq
+#define __writel tsunami_writel
+#define __writeq tsunami_writeq
+#define dense_mem tsunami_dense_mem
+
#define inb(port) __inb((port))
#define inw(port) __inw((port))
#define inl(port) __inl((port))
@@ -458,26 +459,20 @@ extern inline void __writel(unsigned int b, unsigned long addr)
#define readb(a) __readb((unsigned long)(a))
#define readw(a) __readw((unsigned long)(a))
#define readl(a) __readl((unsigned long)(a))
+#define readq(a) __readq((unsigned long)(a))
#define writeb(v,a) __writeb((v),(unsigned long)(a))
#define writew(v,a) __writew((v),(unsigned long)(a))
#define writel(v,a) __writel((v),(unsigned long)(a))
+#define writeq(v,a) __writeq((v),(unsigned long)(a))
-#undef vuip
+#endif /* __WANT_IO_DEF */
-extern unsigned long tsunami_init (unsigned long mem_start,
- unsigned long mem_end);
+#ifdef __IO_EXTERN_INLINE
+#undef __EXTERN_INLINE
+#undef __IO_EXTERN_INLINE
+#endif
#endif /* __KERNEL__ */
-/*
- * Data structure for handling TSUNAMI machine checks:
- */
-struct el_TSUNAMI_sysdata_mcheck {
-};
-
-#define RTC_PORT(x) (0x70 + (x))
-#define RTC_ADDR(x) (0x80 | (x))
-#define RTC_ALWAYS_BCD 0
-
#endif /* __ALPHA_TSUNAMI__H__ */
diff --git a/include/asm-alpha/delay.h b/include/asm-alpha/delay.h
index df73028c9..87e69f657 100644
--- a/include/asm-alpha/delay.h
+++ b/include/asm-alpha/delay.h
@@ -35,13 +35,4 @@ extern __inline__ void udelay(unsigned long usecs)
__delay(usecs);
}
-/*
- * 64-bit integers means we don't have to worry about overflow as
- * on some other architectures..
- */
-extern __inline__ unsigned long muldiv(unsigned long a, unsigned long b, unsigned long c)
-{
- return (a*b)/c;
-}
-
#endif /* defined(__ALPHA_DELAY_H) */
diff --git a/include/asm-alpha/dma.h b/include/asm-alpha/dma.h
index d8077298d..686921599 100644
--- a/include/asm-alpha/dma.h
+++ b/include/asm-alpha/dma.h
@@ -19,8 +19,7 @@
#define _ASM_DMA_H
#include <linux/config.h>
-
-#include <asm/io.h> /* need byte IO */
+#include <asm/io.h>
#define dma_outb outb
#define dma_inb inb
@@ -75,7 +74,6 @@
#define MAX_DMA_CHANNELS 8
-#ifdef CONFIG_ALPHA_XL
/* The maximum address that we can perform a DMA transfer to on Alpha XL,
due to a hardware SIO (PCI<->ISA bus bridge) chip limitation, is 64MB.
See <asm/apecs.h> for more info.
@@ -86,12 +84,18 @@
We MUST coordinate the maximum with <asm/apecs.h> for consistency.
For now, this limit is set to 48Mb...
*/
-#define MAX_DMA_ADDRESS (0xfffffc0003000000UL)
-#else /* CONFIG_ALPHA_XL */
-/* The maximum address that we can perform a DMA transfer to on normal
- Alpha platforms */
-#define MAX_DMA_ADDRESS (~0UL)
-#endif /* CONFIG_ALPHA_XL */
+#define ALPHA_XL_MAX_DMA_ADDRESS (0xfffffc0003000000UL)
+#define ALPHA_MAX_DMA_ADDRESS (~0UL)
+
+#ifdef CONFIG_ALPHA_GENERIC
+# define MAX_DMA_ADDRESS (alpha_mv.max_dma_address)
+#else
+# ifdef CONFIG_ALPHA_XL
+# define MAX_DMA_ADDRESS ALPHA_XL_MAX_DMA_ADDRESS
+# else
+# define MAX_DMA_ADDRESS ALPHA_MAX_DMA_ADDRESS
+# endif
+#endif
/* 8237 DMA controllers */
#define IO_DMA1_BASE 0x00 /* 8 bit slave DMA, channels 0..3 */
diff --git a/include/asm-alpha/elf.h b/include/asm-alpha/elf.h
index 89657ba78..8d614e38f 100644
--- a/include/asm-alpha/elf.h
+++ b/include/asm-alpha/elf.h
@@ -99,7 +99,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
}
/* This yields a mask that user programs can use to figure out what
- instruction set this cpu supports. This is trivial on Alpha,
+ instruction set this CPU supports. This is trivial on Alpha,
but not so on other machines. */
#define ELF_HWCAP \
diff --git a/include/asm-alpha/floppy.h b/include/asm-alpha/floppy.h
index 39c1e491c..2f847ddb0 100644
--- a/include/asm-alpha/floppy.h
+++ b/include/asm-alpha/floppy.h
@@ -53,13 +53,24 @@ static int FDC2 = -1;
#define FLOPPY_MOTOR_MASK 0xf0
/*
- * Most Alphas have no problems with floppy DMA crossing 64k borders. Sigh...
+ * Most Alphas have no problems with floppy DMA crossing 64k borders,
+ * except for XL. It is also the only one with DMA limits, so we use
+ * that to test in the generic kernel.
*/
-#ifdef CONFIG_ALPHA_XL
-#define CROSS_64KB(a,s) \
- ((unsigned long)(a)/0x10000 != ((unsigned long)(a) + (s) - 1) / 0x10000)
-#else /* CONFIG_ALPHA_XL */
-#define CROSS_64KB(a,s) (0)
-#endif /* CONFIG_ALPHA_XL */
+
+#define __CROSS_64KB(a,s) \
+({ unsigned long __s64 = (unsigned long)(a); \
+ unsigned long __e64 = __s64 + (unsigned long)(s) - 1; \
+ (__s64 ^ __e64) & ~0xfffful; })
+
+#ifdef CONFIG_ALPHA_GENERIC
+# define CROSS_64KB(a,s) (__CROSS_64KB(a,s) && ~alpha_mv.max_dma_address)
+#else
+# ifdef CONFIG_ALPHA_XL
+# define CROSS_64KB(a,s) __CROSS_64KB(a,s)
+# else
+# define CROSS_64KB(a,s) (0)
+# endif
+#endif
#endif /* __ASM_ALPHA_FLOPPY_H */
diff --git a/include/asm-alpha/hardirq.h b/include/asm-alpha/hardirq.h
index 556e744d2..27abc50fa 100644
--- a/include/asm-alpha/hardirq.h
+++ b/include/asm-alpha/hardirq.h
@@ -4,6 +4,7 @@
#include <linux/tasks.h>
extern unsigned int local_irq_count[NR_CPUS];
+#define in_interrupt() (local_irq_count[smp_processor_id()] + local_bh_count[smp_processor_id()] != 0)
#ifndef __SMP__
diff --git a/include/asm-alpha/hwrpb.h b/include/asm-alpha/hwrpb.h
index 6909f0b6b..5aaf94223 100644
--- a/include/asm-alpha/hwrpb.h
+++ b/include/asm-alpha/hwrpb.h
@@ -1,5 +1,5 @@
-#ifndef _HWRPB_H
-#define _HWRPB_H
+#ifndef __ALPHA_HWRPB_H
+#define __ALPHA_HWRPB_H
#define INIT_HWRPB ((struct hwrpb_struct *) 0x10000000)
@@ -34,6 +34,7 @@
#define ST_DEC_AXPPCI_33 11 /* NoName system type */
#define ST_DEC_TLASER 12 /* Turbolaser systype */
#define ST_DEC_2100_A50 13 /* Avanti systype */
+#define ST_DEC_MUSTANG 14 /* Mustang systype */
#define ST_DEC_ALCOR 15 /* Alcor (EV5) systype */
#define ST_DEC_1000 17 /* Mikasa systype */
#define ST_DEC_EB64 18 /* EB64 systype */
@@ -92,7 +93,7 @@ struct percpu_struct {
unsigned long halt_pv;
unsigned long halt_reason;
unsigned long res;
- unsigned long ipc_buffer[21];
+ char ipc_buffer[168];
unsigned long palcode_avail[16];
unsigned long compatibility;
};
@@ -184,4 +185,6 @@ struct hwrpb_struct {
unsigned long dsr_offset; /* "Dynamic System Recognition Data Block Table" */
};
-#endif
+extern struct hwrpb_struct *hwrpb;
+
+#endif /* __ALPHA_HWRPB_H */
diff --git a/include/asm-alpha/init.h b/include/asm-alpha/init.h
index 9ce618965..7d769dfcd 100644
--- a/include/asm-alpha/init.h
+++ b/include/asm-alpha/init.h
@@ -7,12 +7,6 @@
__arginit __init; \
__arginit
-#if __GNUC__ >= 2 && __GNUC_MINOR__ >= 8
-#define __initlocaldata __initdata
-#else
-#define __initlocaldata
-#endif
-
/* For assembly routines */
#define __INIT .section .text.init,"ax"
#define __FINIT .previous
diff --git a/include/asm-alpha/io.h b/include/asm-alpha/io.h
index d2668b973..61da10c8e 100644
--- a/include/asm-alpha/io.h
+++ b/include/asm-alpha/io.h
@@ -2,29 +2,17 @@
#define __ALPHA_IO_H
#include <linux/config.h>
-
#include <asm/system.h>
+#include <asm/machvec.h>
-/* We don't use IO slowdowns on the alpha, but.. */
+/* We don't use IO slowdowns on the Alpha, but.. */
#define __SLOW_DOWN_IO do { } while (0)
#define SLOW_DOWN_IO do { } while (0)
/*
- * The hae (hardware address extension) register is used to
- * access high IO addresses. To avoid doing an external cycle
- * every time we need to set the hae, we have a hae cache in
- * memory. The kernel entry code makes sure that the hae is
- * preserved across interrupts, so it is safe to set the hae
- * once and then depend on it staying the same in kernel code.
- */
-extern struct hae {
- unsigned long cache;
- unsigned long *reg;
-} hae;
-
-/*
* Virtual -> physical identity mapping starts at this offset
*/
+/* XXX: Do we need to conditionalize on this? */
#ifdef USE_48_BIT_KSEG
#define IDENT_ADDR (0xffff800000000000UL)
#else
@@ -40,25 +28,34 @@ extern struct hae {
* register not being up-to-date with respect to the hardware
* value.
*/
-extern inline void set_hae(unsigned long new_hae)
+static inline void __set_hae(unsigned long new_hae)
{
unsigned long ipl = swpipl(7);
- hae.cache = new_hae;
- *hae.reg = new_hae;
+
+ alpha_mv.hae_cache = new_hae;
+ *alpha_mv.hae_register = new_hae;
mb();
- new_hae = *hae.reg; /* read to make sure it was written */
+
+ /* Re-read to make sure it was written. */
+ new_hae = *alpha_mv.hae_register;
setipl(ipl);
}
+static inline void set_hae(unsigned long new_hae)
+{
+ if (new_hae != alpha_mv.hae_cache)
+ __set_hae(new_hae);
+}
+
/*
* Change virtual addresses to physical addresses and vv.
*/
-extern inline unsigned long virt_to_phys(volatile void * address)
+static inline unsigned long virt_to_phys(volatile void * address)
{
return 0xffffffffUL & (unsigned long) address;
}
-extern inline void * phys_to_virt(unsigned long address)
+static inline void * phys_to_virt(unsigned long address)
{
return (void *) (address + IDENT_ADDR);
}
@@ -78,24 +75,77 @@ extern void _sethae (unsigned long addr); /* cached version */
/*
* There are different chipsets to interface the Alpha CPUs to the world.
*/
-#if defined(CONFIG_ALPHA_LCA)
-# include <asm/lca.h> /* get chip-specific definitions */
-#elif defined(CONFIG_ALPHA_APECS)
-# include <asm/apecs.h> /* get chip-specific definitions */
+
+#ifdef CONFIG_ALPHA_GENERIC
+
+/* In a generic kernel, we always go through the machine vector. */
+
+# define virt_to_bus(a) alpha_mv.mv_virt_to_bus(a)
+# define bus_to_virt(a) alpha_mv.mv_bus_to_virt(a)
+
+# define __inb alpha_mv.mv_inb
+# define __inw alpha_mv.mv_inw
+# define __inl alpha_mv.mv_inl
+# define __outb alpha_mv.mv_outb
+# define __outw alpha_mv.mv_outw
+# define __outl alpha_mv.mv_outl
+
+# define __readb(a) alpha_mv.mv_readb((unsigned long)(a))
+# define __readw(a) alpha_mv.mv_readw((unsigned long)(a))
+# define __readl(a) alpha_mv.mv_readl((unsigned long)(a))
+# define __readq(a) alpha_mv.mv_readq((unsigned long)(a))
+# define __writeb(v,a) alpha_mv.mv_writeb((v),(unsigned long)(a))
+# define __writew(v,a) alpha_mv.mv_writew((v),(unsigned long)(a))
+# define __writel(v,a) alpha_mv.mv_writel((v),(unsigned long)(a))
+# define __writeq(v,a) alpha_mv.mv_writeq((v),(unsigned long)(a))
+
+# define inb __inb
+# define inw __inw
+# define inl __inl
+# define outb __outb
+# define outw __outw
+# define outl __outl
+
+# define readb __readb
+# define readw __readw
+# define readl __readl
+# define readq __readq
+# define writeb __writeb
+# define writew __writew
+# define writel __writel
+# define writeq __writeq
+
+# define dense_mem(a) alpha_mv.mv_dense_mem(a)
+
+#else
+
+/* Control how and what gets defined within the core logic headers. */
+#define __WANT_IO_DEF
+
+#if defined(CONFIG_ALPHA_APECS)
+# include <asm/core_apecs.h>
#elif defined(CONFIG_ALPHA_CIA)
-# include <asm/cia.h> /* get chip-specific definitions */
-#elif defined(CONFIG_ALPHA_T2)
-# include <asm/t2.h> /* get chip-specific definitions */
+# include <asm/core_cia.h>
+#elif defined(CONFIG_ALPHA_LCA)
+# include <asm/core_lca.h>
+#elif defined(CONFIG_ALPHA_MCPCIA)
+# include <asm/core_mcpcia.h>
#elif defined(CONFIG_ALPHA_PYXIS)
-# include <asm/pyxis.h> /* get chip-specific definitions */
+# include <asm/core_pyxis.h>
+#elif defined(CONFIG_ALPHA_T2)
+# include <asm/core_t2.h>
#elif defined(CONFIG_ALPHA_TSUNAMI)
-# include <asm/tsunami.h> /* get chip-specific definitions */
-#elif defined(CONFIG_ALPHA_MCPCIA)
-# include <asm/mcpcia.h> /* get chip-specific definitions */
-#else
+# include <asm/core_tsunami.h>
+#elif defined(CONFIG_ALPHA_JENSEN)
# include <asm/jensen.h>
+#else
+#error "What system is this?"
#endif
+#undef __WANT_IO_DEF
+
+#endif /* GENERIC */
+
/*
* The convention used for inb/outb etc. is that names starting with
* two underscores are the inline versions, names starting with a
@@ -114,9 +164,11 @@ extern void _outl (unsigned int l,unsigned long port);
extern unsigned long _readb(unsigned long addr);
extern unsigned long _readw(unsigned long addr);
extern unsigned long _readl(unsigned long addr);
+extern unsigned long _readq(unsigned long addr);
extern void _writeb(unsigned char b, unsigned long addr);
extern void _writew(unsigned short b, unsigned long addr);
extern void _writel(unsigned int b, unsigned long addr);
+extern void _writeq(unsigned long b, unsigned long addr);
/*
* The platform header files may define some of these macros to use
@@ -169,12 +221,12 @@ extern void _writel(unsigned int b, unsigned long addr);
* On the alpha, we have the whole physical address space mapped at all
* times, so "ioremap()" and "iounmap()" do not need to do anything.
*/
-extern inline void * ioremap(unsigned long offset, unsigned long size)
+static inline void * ioremap(unsigned long offset, unsigned long size)
{
return (void *) offset;
}
-extern inline void iounmap(void *addr)
+static inline void iounmap(void *addr)
{
}
@@ -187,6 +239,9 @@ extern inline void iounmap(void *addr)
#ifndef readl
# define readl(a) _readl((unsigned long)(a))
#endif
+#ifndef readq
+# define readq(a) _readq((unsigned long)(a))
+#endif
#ifndef writeb
# define writeb(v,a) _writeb((v),(unsigned long)(a))
#endif
@@ -196,19 +251,29 @@ extern inline void iounmap(void *addr)
#ifndef writel
# define writel(v,a) _writel((v),(unsigned long)(a))
#endif
+#ifndef writeq
+# define writeq(v,a) _writeq((v),(unsigned long)(a))
+#endif
#ifdef __KERNEL__
/*
* String version of IO memory access ops:
*/
-extern void _memcpy_fromio(void *, unsigned long, unsigned long);
-extern void _memcpy_toio(unsigned long, void *, unsigned long);
-extern void _memset_io(unsigned long, int, unsigned long);
+extern void _memcpy_fromio(void *, unsigned long, long);
+extern void _memcpy_toio(unsigned long, void *, long);
+extern void _memset_c_io(unsigned long, unsigned long, long);
-#define memcpy_fromio(to,from,len) _memcpy_fromio((to),(unsigned long)(from),(len))
-#define memcpy_toio(to,from,len) _memcpy_toio((unsigned long)(to),(from),(len))
-#define memset_io(addr,c,len) _memset_io((unsigned long)(addr),(c),(len))
+#define memcpy_fromio(to,from,len) \
+ _memcpy_fromio((to),(unsigned long)(from),(len))
+#define memcpy_toio(to,from,len) \
+ _memcpy_toio((unsigned long)(to),(from),(len))
+#define memset_io(addr,c,len) \
+ _memset_c_io((unsigned long)(addr),0x0101010101010101UL*(u8)(c),(len))
+
+#define __HAVE_ARCH_MEMSETW_IO
+#define memsetw_io(addr,c,len) \
+ _memset_c_io((unsigned long)(addr),0x0001000100010001UL*(u16)(c),(len))
/*
* String versions of in/out ops:
@@ -223,13 +288,15 @@ extern void outsl (unsigned long port, const void *src, unsigned long count);
/*
* XXX - We don't have csum_partial_copy_fromio() yet, so we cheat here and
* just copy it. The net code will then do the checksum later. Presently
- * only used by some shared memory 8390 ethernet cards anyway.
+ * only used by some shared memory 8390 Ethernet cards anyway.
*/
-#define eth_io_copy_and_sum(skb,src,len,unused) memcpy_fromio((skb)->data,(src),(len))
+#define eth_io_copy_and_sum(skb,src,len,unused) \
+ memcpy_fromio((skb)->data,(src),(len))
-static inline int check_signature(unsigned long io_addr,
- const unsigned char *signature, int length)
+static inline int
+check_signature(unsigned long io_addr, const unsigned char *signature,
+ int length)
{
int retval = 0;
do {
@@ -244,6 +311,29 @@ out:
return retval;
}
-#endif /* __KERNEL__ */
+/*
+ * The Alpha Jensen hardware for some rather strange reason puts
+ * the RTC clock at 0x170 instead of 0x70. Probably due to some
+ * misguided idea about using 0x70 for NMI stuff.
+ *
+ * These defines will override the defaults when doing RTC queries
+ */
+#ifdef CONFIG_ALPHA_GENERIC
+# define RTC_PORT(x) ((x) + alpha_mv.rtc_port)
+# define RTC_ADDR(x) ((x) | alpha_mv.rtc_addr)
+#else
+# ifdef CONFIG_ALPHA_JENSEN
+# define RTC_PORT(x) (0x170+(x))
+# define RTC_ADDR(x) (x)
+# else
+# define RTC_PORT(x) (0x70 + (x))
+# define RTC_ADDR(x) (0x80 | (x))
+# endif
#endif
+
+#define RTC_ALWAYS_BCD 0
+
+#endif /* __KERNEL__ */
+
+#endif /* __ALPHA_IO_H */
diff --git a/include/asm-alpha/irq.h b/include/asm-alpha/irq.h
index 7140a1437..7f8853c55 100644
--- a/include/asm-alpha/irq.h
+++ b/include/asm-alpha/irq.h
@@ -10,18 +10,24 @@
#include <linux/linkage.h>
#include <linux/config.h>
-#if defined(CONFIG_ALPHA_CABRIOLET) || \
+#if defined(CONFIG_ALPHA_GENERIC)
+
+/* Here NR_IRQS is not exact, but rather an upper bound. This is used
+ many places throughout the kernel to size static arrays. That's ok,
+ we'll use alpha_mv.nr_irqs when we want the real thing. */
+
+# define NR_IRQS 64
+
+#elif defined(CONFIG_ALPHA_CABRIOLET) || \
defined(CONFIG_ALPHA_EB66P) || \
defined(CONFIG_ALPHA_EB164) || \
defined(CONFIG_ALPHA_PC164) || \
- defined(CONFIG_ALPHA_LX164)
-
+ defined(CONFIG_ALPHA_LX164)
# define NR_IRQS 35
#elif defined(CONFIG_ALPHA_EB66) || \
defined(CONFIG_ALPHA_EB64P) || \
- defined(CONFIG_ALPHA_MIKASA)
-
+ defined(CONFIG_ALPHA_MIKASA)
# define NR_IRQS 32
#elif defined(CONFIG_ALPHA_ALCOR) || \
@@ -29,29 +35,52 @@
defined(CONFIG_ALPHA_MIATA) || \
defined(CONFIG_ALPHA_RUFFIAN) || \
defined(CONFIG_ALPHA_NORITAKE)
-
# define NR_IRQS 48
#elif defined(CONFIG_ALPHA_SABLE) || \
defined(CONFIG_ALPHA_SX164)
-
# define NR_IRQS 40
#elif defined(CONFIG_ALPHA_DP264) || \
defined(CONFIG_ALPHA_RAWHIDE)
-
# define NR_IRQS 64
#elif defined(CONFIG_ALPHA_TAKARA)
-
# define NR_IRQS 20
#else /* everyone else */
-
# define NR_IRQS 16
+#endif
+
+/*
+ * PROBE_MASK is the bitset of irqs that we consider for autoprobing.
+ */
+
+/* The normal mask includes all the IRQs except the timer. */
+#define _PROBE_MASK(nr_irqs) (((1UL << (nr_irqs & 63)) - 1) & ~1UL)
+/* Mask out unused timer irq 0 and RTC irq 8. */
+#define P2K_PROBE_MASK (_PROBE_MASK(16) & ~0x101UL)
+
+/* Mask out unused timer irq 0, "irqs" 20-30, and the EISA cascade. */
+#define ALCOR_PROBE_MASK (_PROBE_MASK(48) & ~0xfff000000001UL)
+
+/* Leave timer irq 0 in the mask. */
+#define RUFFIAN_PROBE_MASK (_PROBE_MASK(48) | 1UL)
+
+#if defined(CONFIG_ALPHA_GENERIC)
+# define PROBE_MASK alpha_mv.irq_probe_mask
+#elif defined(CONFIG_ALPHA_P2K)
+# define PROBE_MASK P2K_PROBE_MASK
+#elif defined(CONFIG_ALPHA_ALCOR) || defined(CONFIG_ALPHA_XLT)
+# define PROBE_MASK ALCOR_PROBE_MASK
+#elif defined(CONFIG_ALPHA_RUFFIAN)
+# define PROBE_MASK RUFFIAN_PROBE_MASK
+#else
+# define PROBE_MASK _PROBE_MASK(NR_IRQS)
#endif
+
static __inline__ int irq_cannonicalize(int irq)
{
/*
@@ -64,4 +93,4 @@ static __inline__ int irq_cannonicalize(int irq)
extern void disable_irq(unsigned int);
extern void enable_irq(unsigned int);
-#endif
+#endif /* _ALPHA_IRQ_H */
diff --git a/include/asm-alpha/jensen.h b/include/asm-alpha/jensen.h
index 7a3b07851..75f99ea33 100644
--- a/include/asm-alpha/jensen.h
+++ b/include/asm-alpha/jensen.h
@@ -1,6 +1,8 @@
#ifndef __ALPHA_JENSEN_H
#define __ALPHA_JENSEN_H
+#include <asm/compiler.h>
+
/*
* Defines for the AlphaPC EISA IO and memory address space.
*/
@@ -66,6 +68,14 @@
*/
#define EISA_IO (IDENT_ADDR + 0x300000000UL)
+
+#ifdef __KERNEL__
+
+#ifndef __EXTERN_INLINE
+#define __EXTERN_INLINE extern inline
+#define __IO_EXTERN_INLINE
+#endif
+
/*
* Change virtual addresses to bus addresses and vv.
*
@@ -73,10 +83,16 @@
* as the bus address, but this is not necessarily true on
* other alpha hardware.
*/
-#define virt_to_bus virt_to_phys
-#define bus_to_virt phys_to_virt
+__EXTERN_INLINE unsigned long jensen_virt_to_bus(void * address)
+{
+ return virt_to_phys(address);
+}
+
+__EXTERN_INLINE void * jensen_bus_to_virt(unsigned long address)
+{
+ return phys_to_virt(address);
+}
-#define HAE_ADDRESS EISA_HAE
/*
* Handle the "host address register". This needs to be set
@@ -86,16 +102,19 @@
*
* HAE isn't needed for the local IO operations, though.
*/
-#define __HAE_MASK 0x1ffffff
-extern inline void __set_hae(unsigned long addr)
+
+#define JENSEN_HAE_ADDRESS EISA_HAE
+#define JENSEN_HAE_MASK 0x1ffffff
+
+__EXTERN_INLINE void jensen_set_hae(unsigned long addr)
{
/* hae on the Jensen is bits 31:25 shifted right */
addr >>= 25;
- if (addr != hae.cache)
+ if (addr != alpha_mv.hae_cache)
set_hae(addr);
}
-#ifdef __KERNEL__
+#define vuip volatile unsigned int *
/*
* IO functions
@@ -108,36 +127,31 @@ extern inline void __set_hae(unsigned long addr)
* gone in the PCI version. I hope I can get DEC suckered^H^H^H^H^H^H^H^H
* convinced that I need one of the newer machines.
*/
-extern inline unsigned int __local_inb(unsigned long addr)
+
+static inline unsigned int jensen_local_inb(unsigned long addr)
{
- long result = *(volatile int *) ((addr << 9) + EISA_VL82C106);
- return 0xffUL & result;
+ return 0xff & *(vuip)((addr << 9) + EISA_VL82C106);
}
-extern inline void __local_outb(unsigned char b, unsigned long addr)
+static inline void jensen_local_outb(unsigned char b, unsigned long addr)
{
- *(volatile unsigned int *) ((addr << 9) + EISA_VL82C106) = b;
+ *(vuip)((addr << 9) + EISA_VL82C106) = b;
mb();
}
-extern unsigned int _bus_inb(unsigned long addr);
-
-extern inline unsigned int __bus_inb(unsigned long addr)
+static inline unsigned int jensen_bus_inb(unsigned long addr)
{
long result;
- __set_hae(0);
- result = *(volatile int *) ((addr << 7) + EISA_IO + 0x00);
- result >>= (addr & 3) * 8;
- return 0xffUL & result;
+ jensen_set_hae(0);
+ result = *(volatile int *)((addr << 7) + EISA_IO + 0x00);
+ return __kernel_extbl(result, addr & 3);
}
-extern void _bus_outb(unsigned char b, unsigned long addr);
-
-extern inline void __bus_outb(unsigned char b, unsigned long addr)
+static inline void jensen_bus_outb(unsigned char b, unsigned long addr)
{
- __set_hae(0);
- *(volatile unsigned int *) ((addr << 7) + EISA_IO + 0x00) = b * 0x01010101;
+ jensen_set_hae(0);
+ *(vuip)((addr << 7) + EISA_IO + 0x00) = b * 0x01010101;
mb();
}
@@ -146,111 +160,165 @@ extern inline void __bus_outb(unsigned char b, unsigned long addr)
* operations that result in operations across inline functions.
* Which is why this is a macro.
*/
-#define __is_local(addr) ( \
+
+#define jensen_is_local(addr) ( \
/* keyboard */ (addr == 0x60 || addr == 0x64) || \
/* RTC */ (addr == 0x170 || addr == 0x171) || \
/* mb COM2 */ (addr >= 0x2f8 && addr <= 0x2ff) || \
/* mb LPT1 */ (addr >= 0x3bc && addr <= 0x3be) || \
/* mb COM2 */ (addr >= 0x3f8 && addr <= 0x3ff))
-extern inline unsigned int __inb(unsigned long addr)
+__EXTERN_INLINE unsigned int jensen_inb(unsigned long addr)
{
- if (__is_local(addr))
- return __local_inb(addr);
- return _bus_inb(addr);
+ if (jensen_is_local(addr))
+ return jensen_local_inb(addr);
+ else
+ return jensen_bus_inb(addr);
}
-extern inline void __outb(unsigned char b, unsigned long addr)
+__EXTERN_INLINE void jensen_outb(unsigned char b, unsigned long addr)
{
- if (__is_local(addr))
- __local_outb(b, addr);
+ if (jensen_is_local(addr))
+ jensen_local_outb(b, addr);
else
- _bus_outb(b, addr);
+ jensen_bus_outb(b, addr);
}
-extern inline unsigned int __inw(unsigned long addr)
+__EXTERN_INLINE unsigned int jensen_inw(unsigned long addr)
{
long result;
- __set_hae(0);
+ jensen_set_hae(0);
result = *(volatile int *) ((addr << 7) + EISA_IO + 0x20);
result >>= (addr & 3) * 8;
return 0xffffUL & result;
}
-extern inline unsigned int __inl(unsigned long addr)
+__EXTERN_INLINE unsigned int jensen_inl(unsigned long addr)
{
- __set_hae(0);
- return *(volatile unsigned int *) ((addr << 7) + EISA_IO + 0x60);
+ jensen_set_hae(0);
+ return *(vuip) ((addr << 7) + EISA_IO + 0x60);
}
-extern inline void __outw(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void jensen_outw(unsigned short b, unsigned long addr)
{
- __set_hae(0);
- *(volatile unsigned int *) ((addr << 7) + EISA_IO + 0x20) = b * 0x00010001;
+ jensen_set_hae(0);
+ *(vuip) ((addr << 7) + EISA_IO + 0x20) = b * 0x00010001;
mb();
}
-extern inline void __outl(unsigned int b, unsigned long addr)
+__EXTERN_INLINE void jensen_outl(unsigned int b, unsigned long addr)
{
- __set_hae(0);
- *(volatile unsigned int *) ((addr << 7) + EISA_IO + 0x60) = b;
+ jensen_set_hae(0);
+ *(vuip) ((addr << 7) + EISA_IO + 0x60) = b;
mb();
}
/*
* Memory functions.
*/
-extern inline unsigned long __readb(unsigned long addr)
+
+__EXTERN_INLINE unsigned long jensen_readb(unsigned long addr)
{
long result;
- __set_hae(addr);
- addr &= __HAE_MASK;
+ jensen_set_hae(addr);
+ addr &= JENSEN_HAE_MASK;
result = *(volatile int *) ((addr << 7) + EISA_MEM + 0x00);
result >>= (addr & 3) * 8;
return 0xffUL & result;
}
-extern inline unsigned long __readw(unsigned long addr)
+__EXTERN_INLINE unsigned long jensen_readw(unsigned long addr)
{
long result;
- __set_hae(addr);
- addr &= __HAE_MASK;
+ jensen_set_hae(addr);
+ addr &= JENSEN_HAE_MASK;
result = *(volatile int *) ((addr << 7) + EISA_MEM + 0x20);
result >>= (addr & 3) * 8;
return 0xffffUL & result;
}
-extern inline unsigned long __readl(unsigned long addr)
+__EXTERN_INLINE unsigned long jensen_readl(unsigned long addr)
+{
+ jensen_set_hae(addr);
+ addr &= JENSEN_HAE_MASK;
+ return *(vuip) ((addr << 7) + EISA_MEM + 0x60);
+}
+
+__EXTERN_INLINE unsigned long jensen_readq(unsigned long addr)
{
- __set_hae(addr);
- addr &= __HAE_MASK;
- return *(volatile unsigned int *) ((addr << 7) + EISA_MEM + 0x60);
+ unsigned long r0, r1;
+
+ jensen_set_hae(addr);
+ addr &= JENSEN_HAE_MASK;
+ addr = (addr << 7) + EISA_MEM + 0x60;
+ r0 = *(vuip) (addr);
+ r1 = *(vuip) (addr + (4 << 7));
+ return r1 << 32 | r0;
}
-extern inline void __writeb(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void jensen_writeb(unsigned char b, unsigned long addr)
{
- __set_hae(addr);
- addr &= __HAE_MASK;
- *(volatile unsigned int *) ((addr << 7) + EISA_MEM + 0x00) = b * 0x01010101;
+ jensen_set_hae(addr);
+ addr &= JENSEN_HAE_MASK;
+ *(vuip) ((addr << 7) + EISA_MEM + 0x00) = b * 0x01010101;
}
-extern inline void __writew(unsigned short b, unsigned long addr)
+__EXTERN_INLINE void jensen_writew(unsigned short b, unsigned long addr)
{
- __set_hae(addr);
- addr &= __HAE_MASK;
- *(volatile unsigned int *) ((addr << 7) + EISA_MEM + 0x20) = b * 0x00010001;
+ jensen_set_hae(addr);
+ addr &= JENSEN_HAE_MASK;
+ *(vuip) ((addr << 7) + EISA_MEM + 0x20) = b * 0x00010001;
}
-extern inline void __writel(unsigned int b, unsigned long addr)
+__EXTERN_INLINE void jensen_writel(unsigned int b, unsigned long addr)
{
- __set_hae(addr);
- addr &= __HAE_MASK;
- *(volatile unsigned int *) ((addr << 7) + EISA_MEM + 0x60) = b;
+ jensen_set_hae(addr);
+ addr &= JENSEN_HAE_MASK;
+ *(vuip) ((addr << 7) + EISA_MEM + 0x60) = b;
}
+__EXTERN_INLINE void jensen_writeq(unsigned long b, unsigned long addr)
+{
+ jensen_set_hae(addr);
+ addr &= JENSEN_HAE_MASK;
+ addr = (addr << 7) + EISA_MEM + 0x60;
+ *(vuip) (addr) = b;
+ *(vuip) (addr + (4 << 7)) = b >> 32;
+}
+
+/* Find the DENSE memory area for a given bus address.
+ Whee, there is none. */
+
+__EXTERN_INLINE unsigned long jensen_dense_mem(unsigned long addr)
+{
+ return 0;
+}
+
+#undef vuip
+
+#ifdef __WANT_IO_DEF
+
+#define virt_to_bus jensen_virt_to_bus
+#define bus_to_virt jensen_bus_to_virt
+#define __inb jensen_inb
+#define __inw jensen_inw
+#define __inl jensen_inl
+#define __outb jensen_outb
+#define __outw jensen_outw
+#define __outl jensen_outl
+#define __readb jensen_readb
+#define __readw jensen_readw
+#define __writeb jensen_writeb
+#define __writew jensen_writew
+#define __readl jensen_readl
+#define __readq jensen_readq
+#define __writel jensen_writel
+#define __writeq jensen_writeq
+#define dense_mem jensen_dense_mem
+
/*
* The above have so much overhead that it probably doesn't make
* sense to have them inlined (better icache behaviour).
@@ -261,17 +329,13 @@ extern inline void __writel(unsigned int b, unsigned long addr)
#define outb(x, port) \
(__builtin_constant_p((port))?__outb((x),(port)):_outb((x),(port)))
-#endif /* __KERNEL__ */
-
-/*
- * The Alpha Jensen hardware for some rather strange reason puts
- * the RTC clock at 0x170 instead of 0x70. Probably due to some
- * misguided idea about using 0x70 for NMI stuff.
- *
- * These defines will override the defaults when doing RTC queries
- */
-#define RTC_PORT(x) (0x170+(x))
-#define RTC_ADDR(x) (x)
-#define RTC_ALWAYS_BCD 0
+#endif /* __WANT_IO_DEF */
+#ifdef __IO_EXTERN_INLINE
+#undef __EXTERN_INLINE
+#undef __IO_EXTERN_INLINE
#endif
+
+#endif /* __KERNEL__ */
+
+#endif /* __ALPHA_JENSEN_H */
diff --git a/include/asm-alpha/linux_logo.h b/include/asm-alpha/linux_logo.h
new file mode 100644
index 000000000..c7918fb97
--- /dev/null
+++ b/include/asm-alpha/linux_logo.h
@@ -0,0 +1,47 @@
+/* $Id: linux_logo.h,v 1.3 1998/06/29 19:36:17 geert Exp $
+ * include/asm-alpha/linux_logo.h: This is a linux logo
+ * to be displayed on boot.
+ *
+ * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
+ * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
+ *
+ * You can put anything here, but:
+ * LINUX_LOGO_COLORS has to be less than 224
+ * image size has to be 80x80
+ * values have to start from 0x20
+ * (i.e. RGB(linux_logo_red[0],
+ * linux_logo_green[0],
+ * linux_logo_blue[0]) is color 0x20)
+ * BW image has to be 80x80 as well, with MS bit
+ * on the left
+ * Serial_console ascii image can be any size,
+ * but should contain %s to display the version
+ */
+
+#include <linux/init.h>
+#include <linux/version.h>
+
+#define linux_logo_banner "Linux/AXP version " UTS_RELEASE
+
+#define LINUX_LOGO_COLORS 221
+
+#ifdef INCLUDE_LINUX_LOGO_DATA
+
+#define INCLUDE_LINUX_LOGO16
+
+#include <linux/linux_logo.h>
+
+#else
+
+/* prototypes only */
+extern unsigned char linux_logo_red[];
+extern unsigned char linux_logo_green[];
+extern unsigned char linux_logo_blue[];
+extern unsigned char linux_logo[];
+extern unsigned char linux_logo_bw[];
+extern unsigned char linux_logo16_red[];
+extern unsigned char linux_logo16_green[];
+extern unsigned char linux_logo16_blue[];
+extern unsigned char linux_logo16[];
+
+#endif
diff --git a/include/asm-alpha/machvec.h b/include/asm-alpha/machvec.h
new file mode 100644
index 000000000..e3d247a9a
--- /dev/null
+++ b/include/asm-alpha/machvec.h
@@ -0,0 +1,118 @@
+#ifndef __ALPHA_MACHVEC_H
+#define __ALPHA_MACHVEC_H 1
+
+#include <linux/config.h>
+#include <linux/types.h>
+
+
+/* The following structure vectors all of the I/O and IRQ manipulation
+ from the generic kernel to the hardware specific backend. */
+
+struct task_struct;
+struct mm_struct;
+struct pt_regs;
+struct vm_area_struct;
+
+struct alpha_machine_vector
+{
+ /* This "belongs" down below with the rest of the runtime
+ variables, but it is convenient for entry.S if these
+ two slots are at the beginning of the struct. */
+ unsigned long hae_cache;
+ unsigned long *hae_register;
+
+ unsigned long max_dma_address;
+ unsigned int nr_irqs;
+ unsigned int rtc_port, rtc_addr;
+ unsigned int max_asn;
+ unsigned long mmu_context_mask;
+ unsigned long irq_probe_mask;
+ unsigned long iack_sc;
+
+ unsigned long (*mv_virt_to_bus)(void *);
+ void * (*mv_bus_to_virt)(unsigned long);
+
+ unsigned int (*mv_inb)(unsigned long);
+ unsigned int (*mv_inw)(unsigned long);
+ unsigned int (*mv_inl)(unsigned long);
+
+ void (*mv_outb)(unsigned char, unsigned long);
+ void (*mv_outw)(unsigned short, unsigned long);
+ void (*mv_outl)(unsigned int, unsigned long);
+
+ unsigned long (*mv_readb)(unsigned long);
+ unsigned long (*mv_readw)(unsigned long);
+ unsigned long (*mv_readl)(unsigned long);
+ unsigned long (*mv_readq)(unsigned long);
+
+ void (*mv_writeb)(unsigned char, unsigned long);
+ void (*mv_writew)(unsigned short, unsigned long);
+ void (*mv_writel)(unsigned int, unsigned long);
+ void (*mv_writeq)(unsigned long, unsigned long);
+
+ unsigned long (*mv_dense_mem)(unsigned long);
+
+ int (*pci_read_config_byte)(u8, u8, u8, u8 *value);
+ int (*pci_read_config_word)(u8, u8, u8, u16 *value);
+ int (*pci_read_config_dword)(u8, u8, u8, u32 *value);
+
+ int (*pci_write_config_byte)(u8, u8, u8, u8 value);
+ int (*pci_write_config_word)(u8, u8, u8, u16 value);
+ int (*pci_write_config_dword)(u8, u8, u8, u32 value);
+
+ void (*mv_get_mmu_context)(struct task_struct *);
+ void (*mv_flush_tlb_current)(struct mm_struct *);
+ void (*mv_flush_tlb_other)(struct mm_struct *);
+ void (*mv_flush_tlb_current_page)(struct mm_struct * mm,
+ struct vm_area_struct *vma,
+ unsigned long addr);
+
+ void (*update_irq_hw)(unsigned long, unsigned long, int);
+ void (*ack_irq)(unsigned long);
+ void (*device_interrupt)(unsigned long vector, struct pt_regs *regs);
+ void (*machine_check)(u64 vector, u64 la, struct pt_regs *regs);
+
+ void (*init_arch)(unsigned long *, unsigned long *);
+ void (*init_irq)(void);
+ void (*init_pit)(void);
+ void (*pci_fixup)(void);
+ void (*kill_arch)(int, char *);
+
+ const char *vector_name;
+
+ /* System specific parameters. */
+ union {
+ struct {
+ unsigned long gru_int_req_bits;
+ } cia;
+
+ struct {
+ unsigned long gamma_bias;
+ } t2;
+ } sys;
+
+ /* Runtime variables it is handy to keep close. */
+ unsigned long dma_win_base;
+ unsigned long dma_win_size;
+ unsigned long sm_base_r1, sm_base_r2, sm_base_r3;
+};
+
+extern struct alpha_machine_vector alpha_mv;
+
+#ifdef CONFIG_ALPHA_GENERIC
+extern int alpha_using_srm;
+extern int alpha_use_srm_setup;
+#else
+#ifdef CONFIG_ALPHA_SRM
+#define alpha_using_srm 1
+#else
+#define alpha_using_srm 0
+#endif
+#if defined(CONFIG_ALPHA_SRM_SETUP)
+#define alpha_use_srm_setup 1
+#else
+#define alpha_use_srm_setup 0
+#endif
+#endif /* GENERIC */
+
+#endif /* __ALPHA_MACHVEC_H */
diff --git a/include/asm-alpha/md.h b/include/asm-alpha/md.h
new file mode 100644
index 000000000..6c9b8222a
--- /dev/null
+++ b/include/asm-alpha/md.h
@@ -0,0 +1,13 @@
+/* $Id: md.h,v 1.1 1997/12/15 15:11:48 jj Exp $
+ * md.h: High speed xor_block operation for RAID4/5
+ *
+ */
+
+#ifndef __ASM_MD_H
+#define __ASM_MD_H
+
+/* #define HAVE_ARCH_XORBLOCK */
+
+#define MD_XORBLOCK_ALIGNMENT sizeof(long)
+
+#endif /* __ASM_MD_H */
diff --git a/include/asm-alpha/mmu_context.h b/include/asm-alpha/mmu_context.h
index 0d4ab6b21..af97b6740 100644
--- a/include/asm-alpha/mmu_context.h
+++ b/include/asm-alpha/mmu_context.h
@@ -9,6 +9,7 @@
#include <linux/config.h>
#include <asm/system.h>
+#include <asm/machvec.h>
/*
* The maximum ASN's the processor supports. On the EV4 this is 63
@@ -32,11 +33,17 @@
* work correctly and can thus not be used (explaining the lack of PAL-code
* support).
*/
-#ifdef CONFIG_ALPHA_EV5
-#define MAX_ASN 127
+#define EV4_MAX_ASN 63
+#define EV5_MAX_ASN 127
+
+#ifdef CONFIG_ALPHA_GENERIC
+# define MAX_ASN (alpha_mv.max_asn)
#else
-#define MAX_ASN 63
-#define BROKEN_ASN 1
+# ifdef CONFIG_ALPHA_EV4
+# define MAX_ASN EV4_MAX_ASN
+# else
+# define MAX_ASN EV5_MAX_ASN
+# endif
#endif
#ifdef __SMP__
@@ -78,26 +85,21 @@ extern unsigned long asn_cache;
* force a new asn for any other processes the next time they want to
* run.
*/
-extern inline void
-get_new_mmu_context(struct task_struct *p, struct mm_struct *mm)
+
+#ifndef __EXTERN_INLINE
+#define __EXTERN_INLINE extern inline
+#define __MMU_EXTERN_INLINE
+#endif
+
+extern void get_new_mmu_context(struct task_struct *p, struct mm_struct *mm);
+
+__EXTERN_INLINE void ev4_get_mmu_context(struct task_struct *p)
{
- unsigned long asn = asn_cache;
-
- if ((asn & HARDWARE_ASN_MASK) < MAX_ASN)
- ++asn;
- else {
- tbiap();
- imb();
- asn = (asn & ~HARDWARE_ASN_MASK) + ASN_FIRST_VERSION;
- }
- asn_cache = asn;
- mm->context = asn; /* full version + asn */
- p->tss.asn = asn & HARDWARE_ASN_MASK; /* just asn */
+ /* As described, ASN's are broken. */
}
-extern inline void get_mmu_context(struct task_struct *p)
+__EXTERN_INLINE void ev5_get_mmu_context(struct task_struct *p)
{
-#ifndef BROKEN_ASN
struct mm_struct * mm = p->mm;
if (mm) {
@@ -106,27 +108,81 @@ extern inline void get_mmu_context(struct task_struct *p)
if ((mm->context ^ asn) & ~HARDWARE_ASN_MASK)
get_new_mmu_context(p, mm);
}
-#endif
}
+#ifdef CONFIG_ALPHA_GENERIC
+# define get_mmu_context (alpha_mv.mv_get_mmu_context)
+#else
+# ifdef CONFIG_ALPHA_EV4
+# define get_mmu_context ev4_get_mmu_context
+# else
+# define get_mmu_context ev5_get_mmu_context
+# endif
+#endif
+
extern inline void init_new_context(struct mm_struct *mm)
{
mm->context = 0;
}
-#define destroy_context(mm) do { } while(0)
+extern inline void destroy_context(struct mm_struct *mm)
+{
+ /* Nothing to do. */
+}
+
/*
- * After we have set current->mm to a new value, this activates
- * the context for the new mm so we see the new mappings.
- * Ideally this would be an extern inline function, but reload_context
- * is declared in pgtable.h, which includes this file. :-(
+ * Force a context reload. This is needed when we change the page
+ * table pointer or when we update the ASN of the current process.
*/
-#define activate_context(tsk) \
- do { \
- get_mmu_context(tsk); \
- reload_context(tsk); \
- } while (0)
+#if defined(CONFIG_ALPHA_GENERIC)
+#define MASK_CONTEXT(tss) \
+ ((struct thread_struct *)((unsigned long)(tss) & alpha_mv.mmu_context_mask))
+#elif defined(CONFIG_ALPHA_DP264)
+#define MASK_CONTEXT(tss) \
+ ((struct thread_struct *)((unsigned long)(tss) & 0xfffffffffful))
+#else
+#define MASK_CONTEXT(tss) (tss)
+#endif
+
+__EXTERN_INLINE struct thread_struct *
+__reload_tss(struct thread_struct *tss)
+{
+ register struct thread_struct *a0 __asm__("$16");
+ register struct thread_struct *v0 __asm__("$0");
+
+ a0 = MASK_CONTEXT(tss);
+
+ __asm__ __volatile__(
+ "call_pal %2" : "=r"(v0), "=r"(a0)
+ : "i"(PAL_swpctx), "r"(a0)
+ : "$1", "$16", "$22", "$23", "$24", "$25");
+
+ return v0;
+}
+
+__EXTERN_INLINE void
+reload_context(struct task_struct *task)
+{
+ __reload_tss(&task->tss);
+}
+
+/*
+ * After we have set current->mm to a new value, this activates the
+ * context for the new mm so we see the new mappings.
+ */
+
+__EXTERN_INLINE void
+activate_context(struct task_struct *task)
+{
+ get_mmu_context(task);
+ reload_context(task);
+}
+
+#ifdef __MMU_EXTERN_INLINE
+#undef __EXTERN_INLINE
+#undef __MMU_EXTERN_INLINE
#endif
+#endif /* __ALPHA_MMU_CONTEXT_H */
diff --git a/include/asm-alpha/page.h b/include/asm-alpha/page.h
index e2b61494a..aa2a67ae3 100644
--- a/include/asm-alpha/page.h
+++ b/include/asm-alpha/page.h
@@ -19,54 +19,51 @@
*/
static inline void clear_page(unsigned long page)
{
- unsigned long count;
- __asm__ __volatile__(
- ".align 4\n"
- "1:\n\t"
- "stq $31,0(%1)\n\t"
- "stq $31,8(%1)\n\t"
- "stq $31,16(%1)\n\t"
- "stq $31,24(%1)\n\t"
- "subq %0,1,%0\n\t"
- "stq $31,32(%1)\n\t"
- "stq $31,40(%1)\n\t"
- "stq $31,48(%1)\n\t"
- "stq $31,56(%1)\n\t"
- "addq $1,64,$1\n\t"
- "bne %0,1b"
- :"=r" (count),"=r" (page)
- :"0" (PAGE_SIZE/64), "1" (page));
+ unsigned long count = PAGE_SIZE/64;
+ unsigned long *ptr = (unsigned long *)page;
+
+ do {
+ ptr[0] = 0;
+ ptr[1] = 0;
+ ptr[2] = 0;
+ ptr[3] = 0;
+ count--;
+ ptr[4] = 0;
+ ptr[5] = 0;
+ ptr[6] = 0;
+ ptr[7] = 0;
+ ptr += 8;
+ } while (count);
}
-static inline void copy_page(unsigned long to, unsigned long from)
+static inline void copy_page(unsigned long _to, unsigned long _from)
{
- unsigned long count;
- __asm__ __volatile__(
- ".align 4\n"
- "1:\n\t"
- "ldq $0,0(%1)\n\t"
- "ldq $1,8(%1)\n\t"
- "ldq $2,16(%1)\n\t"
- "ldq $3,24(%1)\n\t"
- "ldq $4,32(%1)\n\t"
- "ldq $5,40(%1)\n\t"
- "ldq $6,48(%1)\n\t"
- "ldq $7,56(%1)\n\t"
- "subq %0,1,%0\n\t"
- "addq %1,64,%1\n\t"
- "stq $0,0(%2)\n\t"
- "stq $1,8(%2)\n\t"
- "stq $2,16(%2)\n\t"
- "stq $3,24(%2)\n\t"
- "stq $4,32(%2)\n\t"
- "stq $5,40(%2)\n\t"
- "stq $6,48(%2)\n\t"
- "stq $7,56(%2)\n\t"
- "addq %2,64,%2\n\t"
- "bne %0,1b"
- :"=r" (count), "=r" (from), "=r" (to)
- :"0" (PAGE_SIZE/64), "1" (from), "2" (to)
- :"$0","$1","$2","$3","$4","$5","$6","$7");
+ unsigned long count = PAGE_SIZE/64;
+ unsigned long *to = (unsigned long *)_to;
+ unsigned long *from = (unsigned long *)_from;
+
+ do {
+ unsigned long a,b,c,d,e,f,g,h;
+ a = from[0];
+ b = from[1];
+ c = from[2];
+ d = from[3];
+ e = from[4];
+ f = from[5];
+ g = from[6];
+ h = from[7];
+ count--;
+ from += 8;
+ to[0] = a;
+ to[1] = b;
+ to[2] = c;
+ to[3] = d;
+ to[4] = e;
+ to[5] = f;
+ to[6] = g;
+ to[7] = h;
+ to += 8;
+ } while (count);
}
#ifdef STRICT_MM_TYPECHECKS
diff --git a/include/asm-alpha/pci.h b/include/asm-alpha/pci.h
new file mode 100644
index 000000000..2dd28c3cc
--- /dev/null
+++ b/include/asm-alpha/pci.h
@@ -0,0 +1,48 @@
+#ifndef __ALPHA_PCI_H
+#define __ALPHA_PCI_H
+
+#include <linux/config.h>
+#include <linux/pci.h>
+
+
+/*
+ * The following structure is used to manage multiple PCI busses.
+ *
+ * XXX: We should solve thos problem in an architecture independant
+ * way, rather than hacking something up here.
+ */
+
+struct linux_hose_info {
+ struct pci_bus pci_bus;
+ struct linux_hose_info *next;
+ unsigned long pci_io_space;
+ unsigned long pci_mem_space;
+ unsigned long pci_config_space;
+ unsigned long pci_sparse_space;
+ unsigned int pci_first_busno;
+ unsigned int pci_last_busno;
+ unsigned int pci_hose_index;
+};
+
+/* This is indexed by a pseudo- PCI bus number to obtain the real deal. */
+extern struct linux_hose_info *bus2hose[256];
+
+/* Create a handle that is OR-ed into the reported I/O space address
+ for a device. We use this later to find the bus a device lives on. */
+
+#if defined(CONFIG_ALPHA_GENERIC) \
+ || defined(CONFIG_ALPHA_MCPCIA) \
+ /* || defined(CONFIG_ALPHA_TSUNAMI) */
+
+#define PCI_HANDLE(bus) ((bus2hose[bus]->pci_hose_index & 3UL) << 32)
+#define DEV_IS_ON_PRIMARY(dev) \
+ (bus2hose[(dev)->bus->number]->pci_first_busno == (dev)->bus->number)
+
+#else
+
+#define PCI_HANDLE(bus) 0
+#define DEV_IS_ON_PRIMARY(dev) ((dev)->bus->number == 0)
+
+#endif /* Multiple busses */
+
+#endif /* __ALPHA_PCI_H */
diff --git a/include/asm-alpha/pgtable.h b/include/asm-alpha/pgtable.h
index 3467e6103..3cbbaa17a 100644
--- a/include/asm-alpha/pgtable.h
+++ b/include/asm-alpha/pgtable.h
@@ -3,17 +3,20 @@
/*
* This file contains the functions and defines necessary to modify and use
- * the alpha page table tree.
+ * the Alpha page table tree.
*
- * This hopefully works with any standard alpha page-size, as defined
+ * This hopefully works with any standard Alpha page-size, as defined
* in <asm/page.h> (currently 8192).
*/
#include <linux/config.h>
#include <asm/system.h>
+#include <asm/processor.h> /* For TASK_SIZE */
#include <asm/mmu_context.h>
+#include <asm/machvec.h>
-/* Caches aren't brain-dead on the alpha. */
+
+/* Caches aren't brain-dead on the Alpha. */
#define flush_cache_all() do { } while (0)
#define flush_cache_mm(mm) do { } while (0)
#define flush_cache_range(mm, start, end) do { } while (0)
@@ -22,60 +25,87 @@
#define flush_icache_range(start, end) do { } while (0)
/*
- * Force a context reload. This is needed when we
- * change the page table pointer or when we update
- * the ASN of the current process.
- */
-static inline void reload_context(struct task_struct *task)
-{
- __asm__ __volatile__(
- "bis %0,%0,$16\n\t"
-#ifdef CONFIG_ALPHA_DP264
- "zap $16,0xe0,$16\n\t"
-#endif /* DP264 */
- "call_pal %1"
- : /* no outputs */
- : "r" (&task->tss), "i" (PAL_swpctx)
- : "$0", "$1", "$16", "$22", "$23", "$24", "$25");
-}
-
-/*
* Use a few helper functions to hide the ugly broken ASN
- * numbers on early alpha's (ev4 and ev45)
+ * numbers on early Alphas (ev4 and ev45)
*/
-#ifdef BROKEN_ASN
-#define flush_tlb_current(x) tbiap()
-#define flush_tlb_other(x) do { } while (0)
+#ifndef __EXTERN_INLINE
+#define __EXTERN_INLINE extern inline
+#define __MMU_EXTERN_INLINE
+#endif
-#else
+__EXTERN_INLINE void
+ev4_flush_tlb_current(struct mm_struct *mm)
+{
+ tbiap();
+}
-extern void get_new_asn_and_reload(struct task_struct *, struct mm_struct *);
+__EXTERN_INLINE void
+ev4_flush_tlb_other(struct mm_struct *mm)
+{
+}
-#define flush_tlb_current(mm) get_new_asn_and_reload(current, mm)
-#define flush_tlb_other(mm) do { (mm)->context = 0; } while (0)
+__EXTERN_INLINE void
+ev5_flush_tlb_current(struct mm_struct *mm)
+{
+ mm->context = 0;
+ get_new_mmu_context(current, mm);
+ reload_context(current);
+}
-#endif
+__EXTERN_INLINE void
+ev5_flush_tlb_other(struct mm_struct *mm)
+{
+ mm->context = 0;
+}
/*
* Flush just one page in the current TLB set.
* We need to be very careful about the icache here, there
* is no way to invalidate a specific icache page..
*/
-static inline void flush_tlb_current_page(struct mm_struct * mm,
- struct vm_area_struct *vma,
- unsigned long addr)
+
+__EXTERN_INLINE void
+ev4_flush_tlb_current_page(struct mm_struct * mm,
+ struct vm_area_struct *vma,
+ unsigned long addr)
{
-#ifdef BROKEN_ASN
tbi(2 + ((vma->vm_flags & VM_EXEC) != 0), addr);
-#else
+}
+
+__EXTERN_INLINE void
+ev5_flush_tlb_current_page(struct mm_struct * mm,
+ struct vm_area_struct *vma,
+ unsigned long addr)
+{
if (vma->vm_flags & VM_EXEC)
- flush_tlb_current(mm);
+ ev5_flush_tlb_current(mm);
else
tbi(2, addr);
-#endif
}
+
+#ifdef CONFIG_ALPHA_GENERIC
+# define flush_tlb_current alpha_mv.mv_flush_tlb_current
+# define flush_tlb_other alpha_mv.mv_flush_tlb_other
+# define flush_tlb_current_page alpha_mv.mv_flush_tlb_current_page
+#else
+# ifdef CONFIG_ALPHA_EV4
+# define flush_tlb_current ev4_flush_tlb_current
+# define flush_tlb_other ev4_flush_tlb_other
+# define flush_tlb_current_page ev4_flush_tlb_current_page
+# else
+# define flush_tlb_current ev5_flush_tlb_current
+# define flush_tlb_other ev5_flush_tlb_other
+# define flush_tlb_current_page ev5_flush_tlb_current_page
+# endif
+#endif
+
+#ifdef __MMU_EXTERN_INLINE
+#undef __EXTERN_INLINE
+#undef __MMU_EXTERN_INLINE
+#endif
+
/*
* Flush current user mapping.
*/
@@ -125,8 +155,8 @@ static inline void flush_tlb_page(struct vm_area_struct *vma,
}
/*
- * Flush a specified range of user mapping: on the
- * alpha we flush the whole user tlb
+ * Flush a specified range of user mapping: on the
+ * Alpha we flush the whole user tlb.
*/
static inline void flush_tlb_range(struct mm_struct *mm,
unsigned long start, unsigned long end)
@@ -156,7 +186,7 @@ extern void flush_tlb_range(struct mm_struct *, unsigned long, unsigned long);
#endif /* __SMP__ */
-/* Certain architectures need to do special things when pte's
+/* Certain architectures need to do special things when PTEs
* within a page table are directly modified. Thus, the following
* hook is made available.
*/
@@ -173,20 +203,22 @@ extern void flush_tlb_range(struct mm_struct *, unsigned long, unsigned long);
#define PGDIR_MASK (~(PGDIR_SIZE-1))
/*
- * entries per page directory level: the alpha is three-level, with
+ * Entries per page directory level: the Alpha is three-level, with
* all levels having a one-page page table.
*
- * The PGD is special: the last entry is reserved for self-mapping.
+ * The PGD is special: the last entry is reserved for self-mapping.
*/
#define PTRS_PER_PTE (1UL << (PAGE_SHIFT-3))
#define PTRS_PER_PMD (1UL << (PAGE_SHIFT-3))
#define PTRS_PER_PGD ((1UL << (PAGE_SHIFT-3))-1)
+#define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE)
-/* the no. of pointers that fit on a page: this will go away */
+/* Number of pointers that fit on a page: this will go away. */
#define PTRS_PER_PAGE (1UL << (PAGE_SHIFT-3))
#define VMALLOC_START 0xFFFFFE0000000000
#define VMALLOC_VMADDR(x) ((unsigned long)(x))
+#define VMALLOC_END (~0UL)
/*
* OSF/1 PAL-code-imposed page table bits
@@ -206,7 +238,7 @@ extern void flush_tlb_range(struct mm_struct *, unsigned long, unsigned long);
#define _PAGE_ACCESSED 0x40000
/*
- * NOTE! The "accessed" bit isn't necessarily exact: it can be kept exactly
+ * NOTE! The "accessed" bit isn't necessarily exact: it can be kept exactly
* by software (use the KRE/URE/KWE/UWE bits appropriately), but I'll fake it.
* Under Linux/AXP, the "accessed" bit just means "read", and I'll just use
* the KRE/URE bits to watch for it. That way we don't need to overload the
@@ -240,7 +272,7 @@ extern void flush_tlb_range(struct mm_struct *, unsigned long, unsigned long);
#define _PAGE_S(x) _PAGE_NORMAL(x)
/*
- * The hardware can handle write-only mappings, but as the alpha
+ * The hardware can handle write-only mappings, but as the Alpha
* architecture does byte-wide writes with a read-modify-write
* sequence, it's not practical to have write-without-read privs.
* Thus the "-w- -> rw-" and "-wx -> rwx" mapping here (and in
@@ -269,7 +301,7 @@ extern void flush_tlb_range(struct mm_struct *, unsigned long, unsigned long);
* BAD_PAGETABLE is used when we need a bogus page-table, while
* BAD_PAGE is used for a bogus page.
*
- * ZERO_PAGE is a global shared page that is always zero: used
+ * ZERO_PAGE is a global shared page that is always zero: used
* for zero-mapped memory areas etc..
*/
extern pte_t __bad_page(void);
@@ -295,7 +327,7 @@ extern unsigned long __zero_page(void);
((unsigned long)(address)>>(PAGE_SHIFT-SIZEOF_PTR_LOG2)&PTR_MASK&~PAGE_MASK)
/*
- * Conversion functions: convert a page and protection to a page entry,
+ * Conversion functions: convert a page and protection to a page entry,
* and a page entry and page directory to the page they refer to.
*/
extern inline pte_t mk_pte(unsigned long page, pgprot_t pgprot)
@@ -401,132 +433,182 @@ extern inline pte_t * pte_offset(pmd_t * dir, unsigned long address)
* used to allocate a kernel page table - this turns on ASN bits
* if any.
*/
-extern inline void pte_free_kernel(pte_t * pte)
+#ifndef __SMP__
+extern struct pgtable_cache_struct {
+ unsigned long *pgd_cache;
+ unsigned long *pte_cache;
+ unsigned long pgtable_cache_sz;
+} quicklists;
+#else
+#include <asm/smp.h>
+#define quicklists cpu_data[smp_processor_id()]
+#endif
+#define pgd_quicklist (quicklists.pgd_cache)
+#define pmd_quicklist ((unsigned long *)0)
+#define pte_quicklist (quicklists.pte_cache)
+#define pgtable_cache_size (quicklists.pgtable_cache_sz)
+
+extern __inline__ pgd_t *get_pgd_slow(void)
{
- free_page((unsigned long) pte);
+ pgd_t *ret = (pgd_t *)__get_free_page(GFP_KERNEL), *init;
+
+ if (ret) {
+ init = pgd_offset(&init_mm, 0);
+ memset (ret, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
+ memcpy (ret + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD,
+ (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
+ }
+ return ret;
}
-extern inline pte_t * pte_alloc_kernel(pmd_t *pmd, unsigned long address)
+extern __inline__ pgd_t *get_pgd_fast(void)
{
- address = (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
- if (pmd_none(*pmd)) {
- pte_t *page = (pte_t *) get_free_page(GFP_KERNEL);
- if (pmd_none(*pmd)) {
- if (page) {
- pmd_set(pmd, page);
- return page + address;
- }
- pmd_set(pmd, (pte_t *) BAD_PAGETABLE);
- return NULL;
- }
- free_page((unsigned long) page);
- }
- if (pmd_bad(*pmd)) {
- printk("Bad pmd in pte_alloc: %08lx\n", pmd_val(*pmd));
- pmd_set(pmd, (pte_t *) BAD_PAGETABLE);
- return NULL;
- }
- return (pte_t *) pmd_page(*pmd) + address;
+ unsigned long *ret;
+
+ if((ret = pgd_quicklist) != NULL) {
+ pgd_quicklist = (unsigned long *)(*ret);
+ ret[0] = ret[1];
+ pgtable_cache_size--;
+ } else
+ ret = (unsigned long *)get_pgd_slow();
+ return (pgd_t *)ret;
}
-extern inline void pmd_free_kernel(pmd_t * pmd)
+extern __inline__ void free_pgd_fast(pgd_t *pgd)
{
- free_page((unsigned long) pmd);
+ *(unsigned long *)pgd = (unsigned long) pgd_quicklist;
+ pgd_quicklist = (unsigned long *) pgd;
+ pgtable_cache_size++;
}
-extern inline pmd_t * pmd_alloc_kernel(pgd_t *pgd, unsigned long address)
+extern __inline__ void free_pgd_slow(pgd_t *pgd)
{
- address = (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
- if (pgd_none(*pgd)) {
- pmd_t *page = (pmd_t *) get_free_page(GFP_KERNEL);
- if (pgd_none(*pgd)) {
- if (page) {
- pgd_set(pgd, page);
- return page + address;
- }
- pgd_set(pgd, BAD_PAGETABLE);
- return NULL;
- }
- free_page((unsigned long) page);
+ free_page((unsigned long)pgd);
+}
+
+extern pmd_t *get_pmd_slow(pgd_t *pgd, unsigned long address_premasked);
+
+extern __inline__ pmd_t *get_pmd_fast(void)
+{
+ unsigned long *ret;
+
+ if((ret = (unsigned long *)pte_quicklist) != NULL) {
+ pte_quicklist = (unsigned long *)(*ret);
+ ret[0] = ret[1];
+ pgtable_cache_size--;
}
- if (pgd_bad(*pgd)) {
- printk("Bad pgd in pmd_alloc: %08lx\n", pgd_val(*pgd));
- pgd_set(pgd, BAD_PAGETABLE);
- return NULL;
+ return (pmd_t *)ret;
+}
+
+extern __inline__ void free_pmd_fast(pmd_t *pmd)
+{
+ *(unsigned long *)pmd = (unsigned long) pte_quicklist;
+ pte_quicklist = (unsigned long *) pmd;
+ pgtable_cache_size++;
+}
+
+extern __inline__ void free_pmd_slow(pmd_t *pmd)
+{
+ free_page((unsigned long)pmd);
+}
+
+extern pte_t *get_pte_slow(pmd_t *pmd, unsigned long address_preadjusted);
+
+extern __inline__ pte_t *get_pte_fast(void)
+{
+ unsigned long *ret;
+
+ if((ret = (unsigned long *)pte_quicklist) != NULL) {
+ pte_quicklist = (unsigned long *)(*ret);
+ ret[0] = ret[1];
+ pgtable_cache_size--;
}
- return (pmd_t *) pgd_page(*pgd) + address;
+ return (pte_t *)ret;
}
-extern inline void pte_free(pte_t * pte)
+extern __inline__ void free_pte_fast(pte_t *pte)
{
- free_page((unsigned long) pte);
+ *(unsigned long *)pte = (unsigned long) pte_quicklist;
+ pte_quicklist = (unsigned long *) pte;
+ pgtable_cache_size++;
}
+extern __inline__ void free_pte_slow(pte_t *pte)
+{
+ free_page((unsigned long)pte);
+}
+
+extern void __bad_pte(pmd_t *pmd);
+extern void __bad_pmd(pgd_t *pgd);
+
+#define pte_free_kernel(pte) free_pte_fast(pte)
+#define pte_free(pte) free_pte_fast(pte)
+#define pmd_free_kernel(pmd) free_pmd_fast(pmd)
+#define pmd_free(pmd) free_pmd_fast(pmd)
+#define pgd_free(pgd) free_pgd_fast(pgd)
+#define pgd_alloc() get_pgd_fast()
+
extern inline pte_t * pte_alloc(pmd_t *pmd, unsigned long address)
{
address = (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
if (pmd_none(*pmd)) {
- pte_t *page = (pte_t *) get_free_page(GFP_KERNEL);
- if (pmd_none(*pmd)) {
- if (page) {
- pmd_set(pmd, page);
- return page + address;
- }
- pmd_set(pmd, (pte_t *) BAD_PAGETABLE);
- return NULL;
- }
- free_page((unsigned long) page);
+ pte_t *page = get_pte_fast();
+
+ if (!page)
+ return get_pte_slow(pmd, address);
+ pmd_set(pmd, page);
+ return page + address;
}
if (pmd_bad(*pmd)) {
- printk("Bad pmd in pte_alloc: %08lx\n", pmd_val(*pmd));
- pmd_set(pmd, (pte_t *) BAD_PAGETABLE);
+ __bad_pte(pmd);
return NULL;
}
return (pte_t *) pmd_page(*pmd) + address;
}
-extern inline void pmd_free(pmd_t * pmd)
-{
- free_page((unsigned long) pmd);
-}
-
extern inline pmd_t * pmd_alloc(pgd_t *pgd, unsigned long address)
{
address = (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
if (pgd_none(*pgd)) {
- pmd_t *page = (pmd_t *) get_free_page(GFP_KERNEL);
- if (pgd_none(*pgd)) {
- if (page) {
- pgd_set(pgd, page);
- return page + address;
- }
- pgd_set(pgd, BAD_PAGETABLE);
- return NULL;
- }
- free_page((unsigned long) page);
+ pmd_t *page = get_pmd_fast();
+
+ if (!page)
+ return get_pmd_slow(pgd, address);
+ pgd_set(pgd, page);
+ return page + address;
}
if (pgd_bad(*pgd)) {
- printk("Bad pgd in pmd_alloc: %08lx\n", pgd_val(*pgd));
- pgd_set(pgd, BAD_PAGETABLE);
+ __bad_pmd(pgd);
return NULL;
}
return (pmd_t *) pgd_page(*pgd) + address;
}
-extern inline void pgd_free(pgd_t * pgd)
-{
- free_page((unsigned long) pgd);
-}
+#define pte_alloc_kernel pte_alloc
+#define pmd_alloc_kernel pmd_alloc
+
+extern int do_check_pgt_cache(int, int);
-extern inline pgd_t * pgd_alloc(void)
+extern inline void set_pgdir(unsigned long address, pgd_t entry)
{
- return (pgd_t *) get_free_page(GFP_KERNEL);
+ struct task_struct * p;
+ pgd_t *pgd;
+
+ read_lock(&tasklist_lock);
+ for_each_task(p) {
+ if (!p->mm)
+ continue;
+ *pgd_offset(p->mm,address) = entry;
+ }
+ read_unlock(&tasklist_lock);
+ for (pgd = (pgd_t *)pgd_quicklist; pgd; pgd = (pgd_t *)*(unsigned long *)pgd)
+ pgd[(address >> PGDIR_SHIFT) & (PTRS_PER_PAGE - 1)] = entry;
}
extern pgd_t swapper_pg_dir[1024];
/*
- * The alpha doesn't have any external MMU info: the kernel page
+ * The Alpha doesn't have any external MMU info: the kernel page
* tables contain all the necessary information.
*/
extern inline void update_mmu_cache(struct vm_area_struct * vma,
@@ -535,8 +617,8 @@ extern inline void update_mmu_cache(struct vm_area_struct * vma,
}
/*
- * Non-present pages: high 24 bits are offset, next 8 bits type,
- * low 32 bits zero..
+ * Non-present pages: high 24 bits are offset, next 8 bits type,
+ * low 32 bits zero.
*/
extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)
{ pte_t pte; pte_val(pte) = (type << 32) | (offset << 40); return pte; }
@@ -548,4 +630,7 @@ extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)
#define module_map vmalloc
#define module_unmap vfree
+/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
+#define PageSkip(page) (0)
+
#endif /* _ALPHA_PGTABLE_H */
diff --git a/include/asm-alpha/posix_types.h b/include/asm-alpha/posix_types.h
index b98290660..3cbf6d573 100644
--- a/include/asm-alpha/posix_types.h
+++ b/include/asm-alpha/posix_types.h
@@ -34,6 +34,8 @@ typedef struct {
int val[2];
} __kernel_fsid_t;
+#ifdef __KERNEL__
+
#ifndef __GNUC__
#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
@@ -109,4 +111,6 @@ static __inline__ void __FD_ZERO(__kernel_fd_set *p)
#endif /* __GNUC__ */
+#endif /* __KERNEL__ */
+
#endif /* _ALPHA_POSIX_TYPES_H */
diff --git a/include/asm-alpha/processor.h b/include/asm-alpha/processor.h
index c36876ca8..ee6613b6a 100644
--- a/include/asm-alpha/processor.h
+++ b/include/asm-alpha/processor.h
@@ -45,14 +45,21 @@ struct thread_struct {
unsigned long pal_flags;
unsigned long res1, res2;
- /* the fields below are Linux-specific: */
- /* bit 1..5: IEEE_TRAP_ENABLE bits (see fpu.h) */
- /* bit 6..8: UAC bits (see sysinfo.h) */
- /* bit 17..21: IEEE_STATUS_MASK bits (see fpu.h) */
- /* bit 63: die_if_kernel recursion lock */
+ /*
+ * The fields below are Linux-specific:
+ *
+ * bit 1..5: IEEE_TRAP_ENABLE bits (see fpu.h)
+ * bit 6..8: UAC bits (see sysinfo.h)
+ * bit 17..21: IEEE_STATUS_MASK bits (see fpu.h)
+ * bit 63: die_if_kernel recursion lock
+ */
unsigned long flags;
- /* perform syscall argument validation (get/set_fs) */
+
+ /* Perform syscall argument validation (get/set_fs). */
mm_segment_t fs;
+
+ /* Breakpoint handling for ptrace. */
+ long debugreg[8];
};
#define INIT_MMAP { &init_mm, 0xfffffc0000000000, 0xfffffc0010000000, \
@@ -75,13 +82,23 @@ struct thread_struct {
* holds provided the thread blocked through a call to schedule() ($15
* is the frame pointer in schedule() and $15 is saved at offset 48 by
* entry.S:do_switch_stack).
+ *
+ * Under heavy swap load I've seen this loose in an ugly way. So do
+ * some extra sanity checking on the ranges we expect these pointers
+ * to be in so that we can fail gracefully. This is just for ps after
+ * all. -- r~
*/
extern inline unsigned long thread_saved_pc(struct thread_struct *t)
{
- unsigned long fp;
-
- fp = ((unsigned long*)t->ksp)[6];
- return *(unsigned long*)fp;
+ unsigned long fp, sp = t->ksp, base = (unsigned long)t;
+
+ if (sp > base && sp+6*8 < base + 16*1024) {
+ fp = ((unsigned long*)sp)[6];
+ if (fp > sp && fp < base + 16*1024)
+ return *(unsigned long *)fp;
+ }
+
+ return 0;
}
/*
diff --git a/include/asm-alpha/serial.h b/include/asm-alpha/serial.h
index 565b59dd0..7b2d9ee95 100644
--- a/include/asm-alpha/serial.h
+++ b/include/asm-alpha/serial.h
@@ -37,7 +37,7 @@
#ifdef CONFIG_SERIAL_MANY_PORTS
-#define EXTRA_SERIAL_PORT_DEFNS \
+#define EXTRA_SERIAL_PORT_DEFNS \
{ 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS }, /* ttyS4 */ \
{ 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS }, /* ttyS5 */ \
{ 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS }, /* ttyS6 */ \
diff --git a/include/asm-alpha/siginfo.h b/include/asm-alpha/siginfo.h
index b32ceb1f9..c2304b041 100644
--- a/include/asm-alpha/siginfo.h
+++ b/include/asm-alpha/siginfo.h
@@ -43,6 +43,7 @@ typedef struct siginfo {
/* SIGCHLD */
struct {
pid_t _pid; /* which child */
+ uid_t _uid; /* sender's uid */
int _status; /* exit code */
clock_t _utime;
clock_t _stime;
diff --git a/include/asm-alpha/signal.h b/include/asm-alpha/signal.h
index 80e27df1a..501f35ea5 100644
--- a/include/asm-alpha/signal.h
+++ b/include/asm-alpha/signal.h
@@ -76,7 +76,7 @@ typedef unsigned long sigset_t;
/*
* SA_FLAGS values:
*
- * SA_ONSTACK is not currently supported, but will allow sigaltstack(2).
+ * SA_ONSTACK indicates that a registered stack_t will be used.
* SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
* SA_RESTART flag to get restarting signals (which were the default long ago)
* SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
@@ -100,6 +100,16 @@ typedef unsigned long sigset_t;
#define SA_NOMASK SA_NODEFER
#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */
+/*
+ * sigaltstack controls
+ */
+#define SS_ONSTACK 1
+#define SS_DISABLE 2
+
+#define MINSIGSTKSZ 4096
+#define SIGSTKSZ 16384
+
+
#ifdef __KERNEL__
/*
* These values of sa_flags are used only by the kernel as part of the
@@ -164,6 +174,15 @@ typedef struct sigaltstack {
size_t ss_size;
} stack_t;
+/* sigstack(2) is deprecated, and will be withdrawn in a future version
+ of the X/Open CAE Specification. Use sigaltstack instead. It is only
+ implemented here for OSF/1 compatibility. */
+
+struct sigstack {
+ void *ss_sp;
+ int ss_onstack;
+};
+
#ifdef __KERNEL__
#include <asm/sigcontext.h>
#endif
diff --git a/include/asm-alpha/smp.h b/include/asm-alpha/smp.h
index 811abc297..90bfec2e2 100644
--- a/include/asm-alpha/smp.h
+++ b/include/asm-alpha/smp.h
@@ -1,8 +1,6 @@
#ifndef __ASM_SMP_H
#define __ASM_SMP_H
-#define cpu_logical_map(cpu) (cpu)
-
#ifdef __SMP__
#include <linux/tasks.h>
@@ -10,6 +8,9 @@
struct cpuinfo_alpha {
unsigned long loops_per_sec;
unsigned int next;
+ unsigned long *pgd_cache;
+ unsigned long *pte_cache;
+ unsigned long pgtable_cache_sz;
};
extern struct cpuinfo_alpha cpu_data[NR_CPUS];
@@ -44,7 +45,8 @@ extern __volatile__ int cpu_number_map[NR_CPUS];
__r0; \
})
-#define smp_processor_id() hard_smp_processor_id()
+#define smp_processor_id() hard_smp_processor_id()
+#define cpu_logical_map(cpu) (cpu)
#endif /* __SMP__ */
diff --git a/include/asm-alpha/smp_lock.h b/include/asm-alpha/smp_lock.h
deleted file mode 100644
index bd04c6fb2..000000000
--- a/include/asm-alpha/smp_lock.h
+++ /dev/null
@@ -1,120 +0,0 @@
-#ifndef __ALPHA_SMPLOCK_H
-#define __ALPHA_SMPLOCK_H
-
-#ifndef __SMP__
-
-#define lock_kernel() do { } while(0)
-#define unlock_kernel() do { } while(0)
-#define release_kernel_lock(task, cpu, depth) ((depth) = 1)
-#define reacquire_kernel_lock(task, cpu, depth) do { } while (0)
-
-#else
-
-#include <asm/system.h>
-#include <asm/current.h>
-#include <asm/bitops.h>
-#include <asm/hardirq.h>
-
-#define kernel_lock_held() \
- (klock_info.kernel_flag && (klock_info.akp == smp_processor_id()))
-
-/* Release global kernel lock and global interrupt lock */
-#define release_kernel_lock(task, cpu, depth) \
-do { \
- if ((depth = (task)->lock_depth) != 0) { \
- __cli(); \
- (task)->lock_depth = 0; \
- klock_info.akp = NO_PROC_ID; \
- klock_info.kernel_flag = 0; \
- mb(); \
- } \
- release_irqlock(cpu); \
- __sti(); \
-} while (0)
-
-#if 1
-#define DEBUG_KERNEL_LOCK
-#else
-#undef DEBUG_KERNEL_LOCK
-#endif
-
-#ifdef DEBUG_KERNEL_LOCK
-extern void ___lock_kernel(klock_info_t *klip, int cpu, long ipl);
-#else /* DEBUG_KERNEL_LOCK */
-static inline void ___lock_kernel(klock_info_t *klip, int cpu, long ipl)
-{
- long regx;
-
- __asm__ __volatile__(
- "1: ldl_l %1,%0;"
- " blbs %1,6f;"
- " or %1,1,%1;"
- " stl_c %1,%0;"
- " beq %1,6f;"
- "4: mb\n"
- ".section .text2,\"ax\"\n"
- "6: mov %4,$16;"
- " call_pal %3;"
- "7: ldl %1,%0;"
- " blbs %1,7b;"
- " bis $31,7,$16;"
- " call_pal %3;"
- " br 1b\n"
- ".previous"
- : "=m,=m" (__dummy_lock(klip)), "=&r,=&r" (regx)
- : "0,0" (__dummy_lock(klip)), "i,i" (PAL_swpipl), "i,r" (ipl)
- : "$0", "$1", "$16", "$22", "$23", "$24", "$25", "memory"
- );
-}
-#endif /* DEBUG_KERNEL_LOCK */
-
-#define reacquire_kernel_lock(task, cpu, depth) \
-do { \
- if (depth) { \
- long ipl; \
- klock_info_t *klip = &klock_info; \
- __save_and_cli(ipl); \
- ___lock_kernel(klip, cpu, ipl); \
- klip->akp = cpu; \
- (task)->lock_depth = depth; \
- __restore_flags(ipl); \
- } \
-} while (0)
-
-/* The following acquire and release the master kernel global lock,
- * the idea is that the usage of this mechanmism becomes less and less
- * as time goes on, to the point where they are no longer needed at all
- * and can thus disappear.
- */
-
-#define lock_kernel() \
-if (current->lock_depth > 0) { \
- ++current->lock_depth; \
-} else { \
- long ipl; \
- int cpu = smp_processor_id(); \
- klock_info_t *klip = &klock_info; \
- __save_and_cli(ipl); \
- ___lock_kernel(klip, cpu, ipl); \
- klip->akp = cpu; \
- current->lock_depth = 1; \
- __restore_flags(ipl); \
-}
-
-/* Release kernel global lock. */
-#define unlock_kernel() \
-if (current->lock_depth > 1) { \
- --current->lock_depth; \
-} else { \
- long ipl; \
- __save_and_cli(ipl); \
- klock_info.akp = NO_PROC_ID; \
- klock_info.kernel_flag = KLOCK_CLEAR; \
- mb(); \
- current->lock_depth = 0; \
- __restore_flags(ipl); \
-}
-
-#endif /* __SMP__ */
-
-#endif /* __ALPHA_SMPLOCK_H */
diff --git a/include/asm-alpha/smplock.h b/include/asm-alpha/smplock.h
new file mode 100644
index 000000000..e62326a10
--- /dev/null
+++ b/include/asm-alpha/smplock.h
@@ -0,0 +1,49 @@
+/*
+ * <asm/smplock.h>
+ *
+ * Default SMP lock implementation
+ */
+#include <linux/interrupt.h>
+#include <asm/spinlock.h>
+
+extern spinlock_t kernel_flag;
+
+/*
+ * Release global kernel lock and global interrupt lock
+ */
+#define release_kernel_lock(task, cpu) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_unlock(&kernel_flag); \
+ release_irqlock(cpu); \
+ __sti(); \
+} while (0)
+
+/*
+ * Re-acquire the kernel lock
+ */
+#define reacquire_kernel_lock(task) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_lock(&kernel_flag); \
+} while (0)
+
+
+/*
+ * Getting the big kernel lock.
+ *
+ * This cannot happen asynchronously,
+ * so we only need to worry about other
+ * CPU's.
+ */
+extern __inline__ void lock_kernel(void)
+{
+ if (!++current->lock_depth)
+ spin_lock(&kernel_flag);
+}
+
+extern __inline__ void unlock_kernel(void)
+{
+ if (--current->lock_depth < 0)
+ spin_unlock(&kernel_flag);
+}
diff --git a/include/asm-alpha/string.h b/include/asm-alpha/string.h
index 4b83c8291..11495a0b6 100644
--- a/include/asm-alpha/string.h
+++ b/include/asm-alpha/string.h
@@ -4,10 +4,8 @@
#ifdef __KERNEL__
/*
- * GCC of any recent vintage doesn't do stupid things with bcopy. Of
- * EGCS-devel vintage, it knows all about expanding memcpy inline.
- * For things other than EGCS-devel but still recent, GCC will expand
- * __builtin_memcpy as a simple call to memcpy.
+ * GCC of any recent vintage doesn't do stupid things with bcopy.
+ * EGCS 1.1 knows all about expanding memcpy inline, others don't.
*
* Similarly for a memset with data = 0.
*/
@@ -16,15 +14,15 @@
/* For backward compatibility with modules. Unused otherwise. */
extern void * __memcpy(void *, const void *, size_t);
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 8
+#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91
#define memcpy __builtin_memcpy
#endif
#define __HAVE_ARCH_MEMSET
-extern void * __constant_c_memset(void *, unsigned long, long);
-extern void * __memset(void *, char, size_t);
+extern void * __constant_c_memset(void *, unsigned long, size_t);
+extern void * __memset(void *, int, size_t);
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 8
+#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91
#define memset(s, c, n) \
(__builtin_constant_p(c) \
? (__builtin_constant_p(n) && (c) == 0 \
@@ -46,6 +44,20 @@ extern void * __memset(void *, char, size_t);
#define __HAVE_ARCH_STRRCHR
#define __HAVE_ARCH_STRLEN
+/* The following routine is like memset except that it writes 16-bit
+ aligned values. The DEST and COUNT parameters must be even for
+ correct operation. */
+
+#define __HAVE_ARCH_MEMSETW
+extern void * __memsetw(void *dest, unsigned short, size_t count);
+
+#define memsetw(s, c, n) \
+(__builtin_constant_p(c) \
+ ? __constant_c_memset((s),0x0001000100010001UL*(unsigned short)(c),(n)) \
+ : __memsetw((s),(c),(n)))
+
+extern int strcasecmp(const char *, const char *);
+
#endif /* __KERNEL__ */
#endif /* __ALPHA_STRING_H__ */
diff --git a/include/asm-alpha/system.h b/include/asm-alpha/system.h
index 72b91317e..a4f18c347 100644
--- a/include/asm-alpha/system.h
+++ b/include/asm-alpha/system.h
@@ -100,7 +100,7 @@ extern void wripir(unsigned long);
#define switch_to(prev,next) do { \
current = next; \
- alpha_switch_to((unsigned long) &current->tss - 0xfffffc0000000000); \
+ alpha_switch_to((unsigned long) &current->tss - IDENT_ADDR); \
} while (0)
extern void alpha_switch_to(unsigned long pctxp);
@@ -108,6 +108,9 @@ extern void alpha_switch_to(unsigned long pctxp);
#define mb() \
__asm__ __volatile__("mb": : :"memory")
+#define wmb() \
+__asm__ __volatile__("wmb": : :"memory")
+
#define imb() \
__asm__ __volatile__ ("call_pal %0" : : "i" (PAL_imb) : "memory")
diff --git a/include/asm-alpha/timex.h b/include/asm-alpha/timex.h
new file mode 100644
index 000000000..c0bfb799c
--- /dev/null
+++ b/include/asm-alpha/timex.h
@@ -0,0 +1,11 @@
+/*
+ * linux/include/asm-alpha/timex.h
+ *
+ * ALPHA architecture timex specifications
+ */
+#ifndef _ASMALPHA_TIMEX_H
+#define _ASMALPHA_TIMEX_H
+
+#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
+
+#endif
diff --git a/include/asm-alpha/uaccess.h b/include/asm-alpha/uaccess.h
index 5ab23c062..665acc313 100644
--- a/include/asm-alpha/uaccess.h
+++ b/include/asm-alpha/uaccess.h
@@ -161,7 +161,7 @@ struct __large_struct { unsigned long buf[100]; };
: "m"(__m(addr)), "1"(__gu_err))
#ifdef __HAVE_CPU_BWX
-/* Those lucky bastards with ev56 and later cpus can do byte/word moves. */
+/* Those lucky bastards with ev56 and later CPUs can do byte/word moves. */
#define __get_user_16(addr) \
__asm__("1: ldwu %0,%2\n" \
@@ -275,7 +275,7 @@ __asm__ __volatile__("1: stl %r2,%1\n" \
: "m"(__m(addr)), "rJ"(x), "0"(__pu_err))
#ifdef __HAVE_CPU_BWX
-/* Those lucky bastards with ev56 and later cpus can do byte/word moves. */
+/* Those lucky bastards with ev56 and later CPUs can do byte/word moves. */
#define __put_user_16(x,addr) \
__asm__ __volatile__("1: stw %r2,%1\n" \
diff --git a/include/asm-alpha/unaligned.h b/include/asm-alpha/unaligned.h
index 35da3d5ae..8017f6bfa 100644
--- a/include/asm-alpha/unaligned.h
+++ b/include/asm-alpha/unaligned.h
@@ -17,11 +17,24 @@
extern void bad_unaligned_access_length(void);
/*
+ * EGCS 1.1 knows about arbitrary unaligned loads. Define some
+ * packed structures to talk about such things with.
+ */
+
+struct __una_u64 { __u64 x __attribute__((packed)); };
+struct __una_u32 { __u32 x __attribute__((packed)); };
+struct __una_u16 { __u16 x __attribute__((packed)); };
+
+/*
* Elemental unaligned loads
*/
extern inline unsigned long __uldq(const unsigned long * r11)
{
+#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91
+ const struct __una_u64 *ptr = (const struct __una_u64 *) r11;
+ return ptr->x;
+#else
unsigned long r1,r2;
__asm__("ldq_u %0,%3\n\t"
"ldq_u %1,%4\n\t"
@@ -32,10 +45,15 @@ extern inline unsigned long __uldq(const unsigned long * r11)
"m" (*r11),
"m" (*(const unsigned long *)(7+(char *) r11)));
return r1 | r2;
+#endif
}
extern inline unsigned long __uldl(const unsigned int * r11)
{
+#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91
+ const struct __una_u32 *ptr = (const struct __una_u32 *) r11;
+ return ptr->x;
+#else
unsigned long r1,r2;
__asm__("ldq_u %0,%3\n\t"
"ldq_u %1,%4\n\t"
@@ -46,10 +64,15 @@ extern inline unsigned long __uldl(const unsigned int * r11)
"m" (*r11),
"m" (*(const unsigned long *)(3+(char *) r11)));
return r1 | r2;
+#endif
}
extern inline unsigned long __uldw(const unsigned short * r11)
{
+#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91
+ const struct __una_u16 *ptr = (const struct __una_u16 *) r11;
+ return ptr->x;
+#else
unsigned long r1,r2;
__asm__("ldq_u %0,%3\n\t"
"ldq_u %1,%4\n\t"
@@ -60,6 +83,7 @@ extern inline unsigned long __uldw(const unsigned short * r11)
"m" (*r11),
"m" (*(const unsigned long *)(1+(char *) r11)));
return r1 | r2;
+#endif
}
/*
@@ -68,6 +92,10 @@ extern inline unsigned long __uldw(const unsigned short * r11)
extern inline void __ustq(unsigned long r5, unsigned long * r11)
{
+#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91
+ struct __una_u64 *ptr = (struct __una_u64 *) r11;
+ ptr->x = r5;
+#else
unsigned long r1,r2,r3,r4;
__asm__("ldq_u %3,%1\n\t"
@@ -84,10 +112,15 @@ extern inline void __ustq(unsigned long r5, unsigned long * r11)
"=m" (*(unsigned long *)(7+(char *) r11)),
"=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
:"r" (r5), "r" (r11));
+#endif
}
extern inline void __ustl(unsigned long r5, unsigned int * r11)
{
+#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91
+ struct __una_u32 *ptr = (struct __una_u32 *) r11;
+ ptr->x = r5;
+#else
unsigned long r1,r2,r3,r4;
__asm__("ldq_u %3,%1\n\t"
@@ -104,10 +137,15 @@ extern inline void __ustl(unsigned long r5, unsigned int * r11)
"=m" (*(unsigned long *)(3+(char *) r11)),
"=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
:"r" (r5), "r" (r11));
+#endif
}
extern inline void __ustw(unsigned long r5, unsigned short * r11)
{
+#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91
+ struct __una_u16 *ptr = (struct __una_u16 *) r11;
+ ptr->x = r5;
+#else
unsigned long r1,r2,r3,r4;
__asm__("ldq_u %3,%1\n\t"
@@ -124,6 +162,7 @@ extern inline void __ustw(unsigned long r5, unsigned short * r11)
"=m" (*(unsigned long *)(1+(char *) r11)),
"=&r" (r1), "=&r" (r2), "=&r" (r3), "=&r" (r4)
:"r" (r5), "r" (r11));
+#endif
}
extern inline unsigned long __get_unaligned(const void *ptr, size_t size)
diff --git a/include/asm-alpha/unistd.h b/include/asm-alpha/unistd.h
index e5c3636f7..6fcf82aff 100644
--- a/include/asm-alpha/unistd.h
+++ b/include/asm-alpha/unistd.h
@@ -113,7 +113,7 @@
#define __NR_osf_old_sigblock 109 /* not implemented */
#define __NR_osf_old_sigsetmask 110 /* not implemented */
#define __NR_sigsuspend 111
-#define __NR_osf_sigstack 112 /* not implemented */
+#define __NR_osf_sigstack 112
#define __NR_recvmsg 113
#define __NR_sendmsg 114
#define __NR_osf_old_vtrace 115 /* not implemented */
@@ -205,7 +205,7 @@
#define __NR_getpgid 233
#define __NR_getsid 234
-#define __NR_osf_sigaltstack 235 /* not implemented */
+#define __NR_sigaltstack 235
#define __NR_osf_waitid 236 /* not implemented */
#define __NR_osf_priocntlset 237 /* not implemented */
#define __NR_osf_sigsendset 238 /* not implemented */
@@ -304,52 +304,188 @@
#define __NR_getrusage 364
#define __NR_wait4 365
#define __NR_adjtimex 366
-
+#define __NR_getcwd 367
+#define __NR_capget 368
+#define __NR_capset 369
#if defined(__LIBRARY__) && defined(__GNUC__)
-/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
+#define _syscall_return(type) \
+ return (_sc_err ? errno = _sc_ret, _sc_ret = -1L : 0), (type) _sc_ret
+
+#define _syscall_clobbers \
+ "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \
+ "$22", "$23", "$24", "$25", "$27", "$28" \
+
#define _syscall0(type, name) \
type name(void) \
{ \
- extern long syscall (int, ...); \
- return syscall(__NR_##name)); \
+ long _sc_ret, _sc_err; \
+ { \
+ register long _sc_0 __asm__("$0"); \
+ register long _sc_19 __asm__("$19"); \
+ \
+ _sc_0 = __NR_##name; \
+ __asm__("callsys # %0 %1 %2" \
+ : "=r"(_sc_0), "=r"(_sc_19) \
+ : "0"(_sc_0) \
+ : _syscall_clobbers); \
+ _sc_ret = _sc_0, _sc_err = _sc_19; \
+ } \
+ _syscall_return(type); \
}
#define _syscall1(type,name,type1,arg1) \
type name(type1 arg1) \
{ \
- extern long syscall (int, ...); \
- return syscall(__NR_##name, arg1); \
+ long _sc_ret, _sc_err; \
+ { \
+ register long _sc_0 __asm__("$0"); \
+ register long _sc_16 __asm__("$16"); \
+ register long _sc_19 __asm__("$19"); \
+ \
+ _sc_0 = __NR_##name; \
+ _sc_16 = (long) (arg1); \
+ __asm__("callsys # %0 %1 %2 %3" \
+ : "=r"(_sc_0), "=r"(_sc_19) \
+ : "0"(_sc_0), "r"(_sc_16) \
+ : _syscall_clobbers); \
+ _sc_ret = _sc_0, _sc_err = _sc_19; \
+ } \
+ _syscall_return(type); \
}
#define _syscall2(type,name,type1,arg1,type2,arg2) \
type name(type1 arg1,type2 arg2) \
{ \
- extern long syscall (int, ...); \
- return syscall(__NR_##name, arg1, arg2); \
+ long _sc_ret, _sc_err; \
+ { \
+ register long _sc_0 __asm__("$0"); \
+ register long _sc_16 __asm__("$16"); \
+ register long _sc_17 __asm__("$17"); \
+ register long _sc_19 __asm__("$19"); \
+ \
+ _sc_0 = __NR_##name; \
+ _sc_16 = (long) (arg1); \
+ _sc_17 = (long) (arg2); \
+ __asm__("callsys # %0 %1 %2 %3 %4" \
+ : "=r"(_sc_0), "=r"(_sc_19) \
+ : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17) \
+ : _syscall_clobbers); \
+ _sc_ret = _sc_0, _sc_err = _sc_19; \
+ } \
+ _syscall_return(type); \
}
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
type name(type1 arg1,type2 arg2,type3 arg3) \
{ \
- extern long syscall (int, ...); \
- return syscall(__NR_##name, arg1, arg2, arg3); \
+ long _sc_ret, _sc_err; \
+ { \
+ register long _sc_0 __asm__("$0"); \
+ register long _sc_16 __asm__("$16"); \
+ register long _sc_17 __asm__("$17"); \
+ register long _sc_18 __asm__("$18"); \
+ register long _sc_19 __asm__("$19"); \
+ \
+ _sc_0 = __NR_##name; \
+ _sc_16 = (long) (arg1); \
+ _sc_17 = (long) (arg2); \
+ _sc_18 = (long) (arg3); \
+ __asm__("callsys # %0 %1 %2 %3 %4 %5" \
+ : "=r"(_sc_0), "=r"(_sc_19) \
+ : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \
+ "r"(_sc_18) \
+ : _syscall_clobbers); \
+ _sc_ret = _sc_0, _sc_err = _sc_19; \
+ } \
+ _syscall_return(type); \
}
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
{ \
- extern long syscall (int, ...); \
- return syscall(__NR_##name, arg1, arg2, arg3, arg4); \
+ long _sc_ret, _sc_err; \
+ { \
+ register long _sc_0 __asm__("$0"); \
+ register long _sc_16 __asm__("$16"); \
+ register long _sc_17 __asm__("$17"); \
+ register long _sc_18 __asm__("$18"); \
+ register long _sc_19 __asm__("$19"); \
+ \
+ _sc_0 = __NR_##name; \
+ _sc_16 = (long) (arg1); \
+ _sc_17 = (long) (arg2); \
+ _sc_18 = (long) (arg3); \
+ _sc_19 = (long) (arg4); \
+ __asm__("callsys # %0 %1 %2 %3 %4 %5 %6" \
+ : "=r"(_sc_0), "=r"(_sc_19) \
+ : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \
+ "r"(_sc_18), "1"(_sc_19) \
+ : _syscall_clobbers); \
+ _sc_ret = _sc_0, _sc_err = _sc_19; \
+ } \
+ _syscall_return(type); \
}
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
type5,arg5) \
-type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
-{ \
- extern long syscall (int, ...); \
- return syscall(__NR_##name, arg1, arg2, arg3, arg4, arg5); \
+type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
+{ \
+ long _sc_ret, _sc_err; \
+ { \
+ register long _sc_0 __asm__("$0"); \
+ register long _sc_16 __asm__("$16"); \
+ register long _sc_17 __asm__("$17"); \
+ register long _sc_18 __asm__("$18"); \
+ register long _sc_19 __asm__("$19"); \
+ register long _sc_20 __asm__("$20"); \
+ \
+ _sc_0 = __NR_##name; \
+ _sc_16 = (long) (arg1); \
+ _sc_17 = (long) (arg2); \
+ _sc_18 = (long) (arg3); \
+ _sc_19 = (long) (arg4); \
+ _sc_20 = (long) (arg5); \
+ __asm__("callsys # %0 %1 %2 %3 %4 %5 %6 %7" \
+ : "=r"(_sc_0), "=r"(_sc_19) \
+ : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \
+ "r"(_sc_18), "1"(_sc_19), "r"(_sc_20) \
+ : _syscall_clobbers); \
+ _sc_ret = _sc_0, _sc_err = _sc_19; \
+ } \
+ _syscall_return(type); \
+}
+
+#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
+ type5,arg5,type6,arg6) \
+type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6)\
+{ \
+ long _sc_ret, _sc_err; \
+ { \
+ register long _sc_0 __asm__("$0"); \
+ register long _sc_16 __asm__("$16"); \
+ register long _sc_17 __asm__("$17"); \
+ register long _sc_18 __asm__("$18"); \
+ register long _sc_19 __asm__("$19"); \
+ register long _sc_20 __asm__("$20"); \
+ register long _sc_21 __asm__("$21"); \
+ \
+ _sc_0 = __NR_##name; \
+ _sc_16 = (long) (arg1); \
+ _sc_17 = (long) (arg2); \
+ _sc_18 = (long) (arg3); \
+ _sc_19 = (long) (arg4); \
+ _sc_20 = (long) (arg5); \
+ _sc_21 = (long) (arg6); \
+ __asm__("callsys # %0 %1 %2 %3 %4 %5 %6 %7 %8" \
+ : "=r"(_sc_0), "=r"(_sc_19) \
+ : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17), \
+ "r"(_sc_18), "1"(_sc_19), "r"(_sc_20), "r"(_sc_21) \
+ : _syscall_clobbers); \
+ _sc_ret = _sc_0, _sc_err = _sc_19; \
+ } \
+ _syscall_return(type); \
}
#endif /* __LIBRARY__ && __GNUC__ */
diff --git a/include/asm-alpha/vga.h b/include/asm-alpha/vga.h
new file mode 100644
index 000000000..733fe41c7
--- /dev/null
+++ b/include/asm-alpha/vga.h
@@ -0,0 +1,56 @@
+/*
+ * Access to VGA videoram
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ */
+
+#ifndef _LINUX_ASM_VGA_H_
+#define _LINUX_ASM_VGA_H_
+
+#include <asm/io.h>
+
+#define VT_BUF_HAVE_RW
+#define VT_BUF_HAVE_MEMSETW
+#define VT_BUF_HAVE_MEMCPYF
+
+extern inline void scr_writew(u16 val, u16 *addr)
+{
+ if ((long) addr < 0)
+ *addr = val;
+ else
+ writew(val, (unsigned long) addr);
+}
+
+extern inline u16 scr_readw(u16 *addr)
+{
+ if ((long) addr < 0)
+ return *addr;
+ else
+ return readw((unsigned long) addr);
+}
+
+extern inline void scr_memsetw(u16 *s, u16 c, unsigned int count)
+{
+ if ((long)s < 0)
+ memsetw(s, c, count);
+ else
+ memsetw_io(s, c, count);
+}
+
+extern inline void scr_memcpyw_from(u16 *d, u16 *s, unsigned int count)
+{
+ memcpy_fromio(d, s, count);
+}
+
+extern inline void scr_memcpyw_to(u16 *d, u16 *s, unsigned int count)
+{
+ memcpy_toio(d, s, count);
+}
+
+
+#define vga_readb readb
+#define vga_writeb writeb
+
+#define VGA_MAP_MEM(x) (x)
+
+#endif
diff --git a/include/asm-arm/arch-arc/ide.h b/include/asm-arm/arch-arc/ide.h
index 8cc1baaa4..24bc4899d 100644
--- a/include/asm-arm/arch-arc/ide.h
+++ b/include/asm-arm/arch-arc/ide.h
@@ -11,13 +11,14 @@
*/
#include <linux/config.h>
+#include <asm/irq.h>
static __inline__ int
ide_default_irq(ide_ioreg_t base)
{
#ifdef CONFIG_ARCH_A5K
if (base == 0x1f0)
- return 11;
+ return IRQ_HARDDISK;
#endif
return 0;
}
@@ -52,5 +53,5 @@ ide_init_hwif_ports (ide_ioreg_t *p, ide_ioreg_t base, int stepping, int *irq)
}
*p++ = ctrl;
if (irq != NULL)
- irq = 0;
+ *irq = 0;
}
diff --git a/include/asm-arm/arch-arc/io.h b/include/asm-arm/arch-arc/io.h
index 1639e6d46..0b77060c5 100644
--- a/include/asm-arm/arch-arc/io.h
+++ b/include/asm-arm/arch-arc/io.h
@@ -159,7 +159,18 @@ DECLARE_IO(long,l,"")
result & 0xffff; \
})
-#define __outlc(v,p) __outwc((v),(p))
+#define __outlc(value,port) \
+({ \
+ unsigned long v = value; \
+ if (__PORT_PCIO((port))) \
+ __asm__ __volatile__( \
+ "str %0, [%1, %2]" \
+ : : "r" (v), "r" (PCIO_BASE), "Jr" ((port) << 2)); \
+ else \
+ __asm__ __volatile__( \
+ "str %0, [%1, %2]" \
+ : : "r" (v), "r" (IO_BASE), "r" ((port) << 2)); \
+})
#define __inlc(port) \
({ \
diff --git a/include/asm-arm/arch-arc/irqs.h b/include/asm-arm/arch-arc/irqs.h
index 48e90b1d7..e4abc83f7 100644
--- a/include/asm-arm/arch-arc/irqs.h
+++ b/include/asm-arm/arch-arc/irqs.h
@@ -47,3 +47,5 @@
#define FIQ_FORCE 7
#define IRQ_TIMER IRQ_TIMER0
+
+#define irq_cannonicalize(i) (i)
diff --git a/include/asm-arm/arch-arc/processor.h b/include/asm-arm/arch-arc/processor.h
index 3acb4886e..314525eef 100644
--- a/include/asm-arm/arch-arc/processor.h
+++ b/include/asm-arm/arch-arc/processor.h
@@ -26,7 +26,12 @@
/* This decides where the kernel will search for a free chunk of vm
* space during mmap's.
*/
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+#if 0
+#define TASK_UNMAPPED_BASE(off) (TASK_SIZE / 3)
+#else
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+#endif
+#define TASK_UNMAPPED_ALIGN(addr, off) PAGE_ALIGN(addr)
#define INIT_MMAP \
{ &init_mm, 0, 0, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap }
diff --git a/include/asm-arm/arch-arc/serial.h b/include/asm-arm/arch-arc/serial.h
index 4fdfcdb21..763954175 100644
--- a/include/asm-arm/arch-arc/serial.h
+++ b/include/asm-arm/arch-arc/serial.h
@@ -25,7 +25,7 @@
#if defined(CONFIG_ARCH_A5K)
/* UART CLK PORT IRQ FLAGS */
-#define RS_UARTS \
+#define SERIAL_PORT_DFNS \
{ 0, BASE_BAUD, 0x3F8, 10, STD_COM_FLAGS }, /* ttyS0 */ \
{ 0, BASE_BAUD, 0x2F8, 10, STD_COM_FLAGS }, /* ttyS1 */ \
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS2 */ \
@@ -44,7 +44,7 @@
#elif defined(CONFIG_ARCH_ARC)
/* UART CLK PORT IRQ FLAGS */
-#define RS_UARTS \
+#define SERIAL_PORT_DFNS \
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS0 */ \
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS1 */ \
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS2 */ \
diff --git a/include/asm-arm/arch-arc/uncompress.h b/include/asm-arm/arch-arc/uncompress.h
index f3acb5c25..f378f1166 100644
--- a/include/asm-arm/arch-arc/uncompress.h
+++ b/include/asm-arm/arch-arc/uncompress.h
@@ -52,7 +52,7 @@ static void puts(const char *s)
}
} else {
ptr = VIDMEM + ((y*video_num_columns*params->bytes_per_char_v+x)*bytes_per_char_h);
- ll_write_char(ptr, c|(white<<8));
+ ll_write_char(ptr, c|(white<<16));
if ( ++x >= video_num_columns ) {
x = 0;
if ( ++y >= video_num_lines ) {
diff --git a/include/asm-arm/arch-ebsa110/irqs.h b/include/asm-arm/arch-ebsa110/irqs.h
index 016686df9..909a6f169 100644
--- a/include/asm-arm/arch-ebsa110/irqs.h
+++ b/include/asm-arm/arch-ebsa110/irqs.h
@@ -14,3 +14,6 @@
#define IRQ_IMMEDIATE 7
#define IRQ_TIMER IRQ_TIMER0
+
+#define irq_cannonicalize(i) (i)
+
diff --git a/include/asm-arm/arch-ebsa110/processor.h b/include/asm-arm/arch-ebsa110/processor.h
index 732c9142c..bf1f6d384 100644
--- a/include/asm-arm/arch-ebsa110/processor.h
+++ b/include/asm-arm/arch-ebsa110/processor.h
@@ -23,7 +23,12 @@
/* This decides where the kernel will search for a free chunk of vm
* space during mmap's.
*/
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+#if 0
+#define TASK_UNMAPPED_BASE(off) (TASK_SIZE / 3)
+#else
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+#endif
+#define TASK_UNMAPPED_ALIGN(addr, off) PAGE_ALIGN(addr)
#define INIT_MMAP \
{ &init_mm, 0, 0, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap }
diff --git a/include/asm-arm/arch-ebsa110/serial.h b/include/asm-arm/arch-ebsa110/serial.h
index 1d41a7c1d..7388f813b 100644
--- a/include/asm-arm/arch-ebsa110/serial.h
+++ b/include/asm-arm/arch-ebsa110/serial.h
@@ -21,7 +21,7 @@
#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
/* UART CLK PORT IRQ FLAGS */
-#define RS_UARTS \
+#define SERIAL_PORT_DFNS \
{ 0, BASE_BAUD, 0x3F8, 1, STD_COM_FLAGS }, /* ttyS0 */ \
{ 0, BASE_BAUD, 0x2F8, 2, STD_COM_FLAGS }, /* ttyS1 */ \
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS2 */ \
diff --git a/include/asm-arm/arch-ebsa285/hardware.h b/include/asm-arm/arch-ebsa285/hardware.h
index 8d6af3b1b..a9bc6f0a4 100644
--- a/include/asm-arm/arch-ebsa285/hardware.h
+++ b/include/asm-arm/arch-ebsa285/hardware.h
@@ -15,15 +15,8 @@
* 0xfd000000 0x78000000 Outbound write flush
* 0xfc000000 0x79000000 PCI IACK/special space
*
- * 0xf9030000 0x7a080000 PCI Config type 1 card 4
- * 0xf9020000 0x7a040000 PCI Config type 1 card 3
- * 0xf9010000 0x7a020000 PCI Config type 1 card 2
- * 0xf9000000 0x7a010000 PCI Config type 1 card 1
- *
- * 0xf8030000 0x7b080000 PCI Config type 0 card 4
- * 0xf8020000 0x7b040000 PCI Config type 0 card 3
- * 0xf8010000 0x7b020000 PCI Config type 0 card 2
- * 0xf8000000 0x7b010000 PCI Config type 0 card 1
+ * 0xf9000000 0x7a010000 PCI Config type 1
+ * 0xf8000000 0x7b010000 PCI Config type 0
*
*/
diff --git a/include/asm-arm/arch-ebsa285/io.h b/include/asm-arm/arch-ebsa285/io.h
index 5142e9126..f42717350 100644
--- a/include/asm-arm/arch-ebsa285/io.h
+++ b/include/asm-arm/arch-ebsa285/io.h
@@ -140,4 +140,26 @@ DECLARE_IO(long,l,"","Jr")
#define inl_t(p) \
(*(volatile unsigned long *)(p))
+/*
+ * This is not sufficient... (and it's a hack anyway)
+ */
+static inline void writeb(unsigned char b, unsigned int addr)
+{
+ *(volatile unsigned char *)(0xe0000000 + (addr)) = b;
+}
+
+static inline unsigned char readb(unsigned int addr)
+{
+ return *(volatile unsigned char *)(0xe0000000 + (addr));
+}
+
+static inline void writew(unsigned short b, unsigned int addr)
+{
+ *(volatile unsigned short *)(0xe0000000 + (addr)) = b;
+}
+
+static inline unsigned short readw(unsigned int addr)
+{
+ return *(volatile unsigned short *)(0xe0000000 + (addr));
+}
#endif
diff --git a/include/asm-arm/arch-ebsa285/irqs.h b/include/asm-arm/arch-ebsa285/irqs.h
index 108767689..f2ef06c9d 100644
--- a/include/asm-arm/arch-ebsa285/irqs.h
+++ b/include/asm-arm/arch-ebsa285/irqs.h
@@ -43,3 +43,6 @@
* Now map them to the Linux interrupts
*/
#define IRQ_TIMER IRQ_TIMER1
+
+#define irq_cannonicalize(i) (i)
+
diff --git a/include/asm-arm/arch-ebsa285/mmu.h b/include/asm-arm/arch-ebsa285/mmu.h
index 07006f82e..8e2e98ef6 100644
--- a/include/asm-arm/arch-ebsa285/mmu.h
+++ b/include/asm-arm/arch-ebsa285/mmu.h
@@ -1,26 +1,25 @@
/*
- * linux/include/asm-arm/arch-ebsa110/mmu.h
+ * linux/include/asm-arm/arch-ebsa285/mmu.h
*
* Copyright (c) 1996,1997,1998 Russell King.
*
* Changelog:
* 20-10-1996 RMK Created
* 31-12-1997 RMK Fixed definitions to reduce warnings
+ * 17-05-1998 DAG Added __virt_to_bus and __bus_to_virt functions.
*/
#ifndef __ASM_ARCH_MMU_H
#define __ASM_ARCH_MMU_H
/*
- * On ebsa, the dram is contiguous
+ * On ebsa285, the dram is contiguous
*/
#define __virt_to_phys__is_a_macro
#define __virt_to_phys(vpage) ((vpage) - PAGE_OFFSET)
#define __phys_to_virt__is_a_macro
#define __phys_to_virt(ppage) ((ppage) + PAGE_OFFSET)
-#define __virt_to_bus__is_a_macro
-#define __virt_to_bus(x) __virt_to_phys(x)
-#define __bus_to_virt__is_a_macro
-#define __bus_to_virt(x) __phys_to_virt(x)
+extern unsigned long __virt_to_bus(unsigned long);
+extern unsigned long __bus_to_virt(unsigned long);
#endif
diff --git a/include/asm-arm/arch-ebsa285/processor.h b/include/asm-arm/arch-ebsa285/processor.h
index 732c9142c..bf1f6d384 100644
--- a/include/asm-arm/arch-ebsa285/processor.h
+++ b/include/asm-arm/arch-ebsa285/processor.h
@@ -23,7 +23,12 @@
/* This decides where the kernel will search for a free chunk of vm
* space during mmap's.
*/
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+#if 0
+#define TASK_UNMAPPED_BASE(off) (TASK_SIZE / 3)
+#else
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+#endif
+#define TASK_UNMAPPED_ALIGN(addr, off) PAGE_ALIGN(addr)
#define INIT_MMAP \
{ &init_mm, 0, 0, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap }
diff --git a/include/asm-arm/arch-ebsa285/serial.h b/include/asm-arm/arch-ebsa285/serial.h
new file mode 100644
index 000000000..e824c8d31
--- /dev/null
+++ b/include/asm-arm/arch-ebsa285/serial.h
@@ -0,0 +1,41 @@
+/*
+ * linux/include/asm-arm/arch-ebsa285/serial.h
+ *
+ * Copyright (c) 1996,1997,1998 Russell King.
+ *
+ * Changelog:
+ * 15-10-1996 RMK Created
+ */
+#ifndef __ASM_ARCH_SERIAL_H
+#define __ASM_ARCH_SERIAL_H
+
+/*
+ * This assumes you have a 1.8432 MHz clock for your UART.
+ *
+ * It'd be nice if someone built a serial card with a 24.576 MHz
+ * clock, since the 16550A is capable of handling a top speed of 1.5
+ * megabits/second; but this requires the faster clock.
+ */
+#define BASE_BAUD (1843200 / 16)
+
+#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
+
+ /* UART CLK PORT IRQ FLAGS */
+#define SERIAL_PORT_DFNS \
+ { 0, BASE_BAUD, 0x3F8, 0, STD_COM_FLAGS }, /* ttyS0 */ \
+ { 0, BASE_BAUD, 0x2F8, 0, STD_COM_FLAGS }, /* ttyS1 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS2 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS3 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS4 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS5 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS6 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS7 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS8 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS9 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS10 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS11 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS12 */ \
+ { 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS13 */
+
+#endif
+
diff --git a/include/asm-arm/arch-nexuspci/a.out.h b/include/asm-arm/arch-nexuspci/a.out.h
index ad8369c4e..9051eb0c9 100644
--- a/include/asm-arm/arch-nexuspci/a.out.h
+++ b/include/asm-arm/arch-nexuspci/a.out.h
@@ -1,5 +1,5 @@
/*
- * linux/include/asm-arm/arch-ebsa/a.out.h
+ * linux/include/asm-arm/arch-nexuspci/a.out.h
*
* Copyright (C) 1996 Russell King
*/
diff --git a/include/asm-arm/arch-nexuspci/dma.h b/include/asm-arm/arch-nexuspci/dma.h
index 9b181743c..83931f566 100644
--- a/include/asm-arm/arch-nexuspci/dma.h
+++ b/include/asm-arm/arch-nexuspci/dma.h
@@ -1,17 +1,12 @@
/*
* linux/include/asm-arm/arch-nexuspci/dma.h
*
- * Architecture DMA routines
+ * Architecture DMA routines - NexusPCI has no DMA, so this file is very
+ * simple. :-)
*
* Copyright (C) 1998 Philip Blundell
*/
-#ifndef __ASM_ARCH_DMA_H
-#define __ASM_ARCH_DMA_H
-
-/* NexusPCI has no DMA */
-
-#warning No DMA on this platform
-
-#endif /* _ASM_ARCH_DMA_H */
+/* Need this to keep <asm/dma.h> happy. */
+typedef unsigned int dmamode_t;
diff --git a/include/asm-arm/arch-nexuspci/hardware.h b/include/asm-arm/arch-nexuspci/hardware.h
index c1534ade6..997569748 100644
--- a/include/asm-arm/arch-nexuspci/hardware.h
+++ b/include/asm-arm/arch-nexuspci/hardware.h
@@ -1,11 +1,19 @@
/*
* linux/include/asm-arm/arch-nexuspci/hardware.h
*
- * Copyright (C) 1997 Philip Blundell
+ * Copyright (C) 1998 Philip Blundell
*
* This file contains the hardware definitions of the Nexus PCI card.
*/
+/* Logical Physical
+ * 0xfff00000 0x10000000 SCC2691 DUART
+ * 0xffe00000 0x20000000 INTCONT
+ * 0xffd00000 0x30000000 Status
+ * 0xffc00000 0x60000000 PLX registers
+ * 0xfe000000 0x70000000 PCI I/O
+ */
+
#ifndef __ASM_ARCH_HARDWARE_H
#define __ASM_ARCH_HARDWARE_H
@@ -13,29 +21,21 @@
* What hardware must be present
*/
-#ifndef __ASSEMBLER__
+#define HAS_PCIO
+#define PCIO_BASE 0xfe000000
/*
* Mapping areas
*/
#define IO_END 0xffffffff
-#define IO_BASE 0xd0000000
+#define IO_BASE 0xfe000000
#define IO_SIZE (IO_END - IO_BASE)
-#define IO_START 0xd0000000
/*
* RAM definitions
*/
#define RAM_BASE 0x40000000
-#define MAPTOPHYS(a) ((unsigned long)(a) - PAGE_OFFSET + RAM_BASE)
#define KERNTOPHYS(a) ((unsigned long)(&a))
-#define KERNEL_BASE (0xc0008000)
#define SAFE_ADDR 0x40000000
-#else
-
-#define IO_BASE 0
-
#endif
-#endif
-
diff --git a/include/asm-arm/arch-nexuspci/io.h b/include/asm-arm/arch-nexuspci/io.h
new file mode 100644
index 000000000..5142e9126
--- /dev/null
+++ b/include/asm-arm/arch-nexuspci/io.h
@@ -0,0 +1,143 @@
+/*
+ * linux/include/asm-arm/arch-ebsa110/io.h
+ *
+ * Copyright (C) 1997,1998 Russell King
+ *
+ * Modifications:
+ * 06-Dec-1997 RMK Created.
+ */
+#ifndef __ASM_ARM_ARCH_IO_H
+#define __ASM_ARM_ARCH_IO_H
+
+/*
+ * This architecture does not require any delayed IO, and
+ * has the constant-optimised IO
+ */
+#undef ARCH_IO_DELAY
+
+/*
+ * Dynamic IO functions - let the compiler
+ * optimize the expressions
+ */
+#define DECLARE_DYN_OUT(fnsuffix,instr,typ) \
+extern __inline__ void __out##fnsuffix (unsigned int value, unsigned int port) \
+{ \
+ __asm__ __volatile__( \
+ "str" ##instr## " %0, [%1, %2]" \
+ : \
+ : "r" (value), "r" (PCIO_BASE), typ (port)); \
+}
+
+#define DECLARE_DYN_IN(sz,fnsuffix,instr,typ) \
+extern __inline__ unsigned sz __in##fnsuffix (unsigned int port) \
+{ \
+ unsigned long value; \
+ __asm__ __volatile__( \
+ "ldr" ##instr## " %0, [%1, %2]" \
+ : "=&r" (value) \
+ : "r" (PCIO_BASE), typ (port)); \
+ return (unsigned sz)value; \
+}
+
+extern __inline__ unsigned int __ioaddr (unsigned int port) \
+{ \
+ return (unsigned int)(PCIO_BASE + port); \
+}
+
+#define DECLARE_IO(sz,fnsuffix,instr,typ) \
+ DECLARE_DYN_OUT(fnsuffix,instr,typ) \
+ DECLARE_DYN_IN(sz,fnsuffix,instr,typ)
+
+DECLARE_IO(char,b,"b","Jr")
+DECLARE_IO(short,w,"h","r")
+DECLARE_IO(long,l,"","Jr")
+
+#undef DECLARE_IO
+#undef DECLARE_DYN_OUT
+#undef DECLARE_DYN_IN
+
+/*
+ * Constant address IO functions
+ *
+ * These have to be macros for the 'J' constraint to work -
+ * +/-4096 immediate operand.
+ */
+#define __outbc(value,port) \
+({ \
+ __asm__ __volatile__( \
+ "strb %0, [%1, %2]" \
+ : \
+ : "r" (value), "r" (PCIO_BASE), "Jr" (port)); \
+})
+
+#define __inbc(port) \
+({ \
+ unsigned char result; \
+ __asm__ __volatile__( \
+ "ldrb %0, [%1, %2]" \
+ : "=r" (result) \
+ : "r" (PCIO_BASE), "Jr" (port)); \
+ result; \
+})
+
+#define __outwc(value,port) \
+({ \
+ __asm__ __volatile__( \
+ "strh %0, [%1, %2]" \
+ : \
+ : "r" (value), "r" (PCIO_BASE), "r" (port)); \
+})
+
+#define __inwc(port) \
+({ \
+ unsigned short result; \
+ __asm__ __volatile__( \
+ "ldrh %0, [%1, %2]" \
+ : "=r" (result) \
+ : "r" (PCIO_BASE), "r" (port)); \
+ result & 0xffff; \
+})
+
+#define __outlc(value,port) \
+({ \
+ __asm__ __volatile__( \
+ "str %0, [%1, %2]" \
+ : \
+ : "r" (value), "r" (PCIO_BASE), "Jr" (port)); \
+})
+
+#define __inlc(port) \
+({ \
+ unsigned long result; \
+ __asm__ __volatile__( \
+ "ldr %0, [%1, %2]" \
+ : "=r" (result) \
+ : "r" (PCIO_BASE), "Jr" (port)); \
+ result; \
+})
+
+#define __ioaddrc(port) \
+({ \
+ unsigned long addr; \
+ addr = PCIO_BASE + port; \
+ addr; \
+})
+
+/*
+ * Translated address IO functions
+ *
+ * IO address has already been translated to a virtual address
+ */
+#define outb_t(v,p) \
+ (*(volatile unsigned char *)(p) = (v))
+
+#define inb_t(p) \
+ (*(volatile unsigned char *)(p))
+
+#define outl_t(v,p) \
+ (*(volatile unsigned long *)(p) = (v))
+
+#define inl_t(p) \
+ (*(volatile unsigned long *)(p))
+
+#endif
diff --git a/include/asm-arm/arch-nexuspci/irq.h b/include/asm-arm/arch-nexuspci/irq.h
index 18ddf053b..cf25a5dea 100644
--- a/include/asm-arm/arch-nexuspci/irq.h
+++ b/include/asm-arm/arch-nexuspci/irq.h
@@ -1,46 +1,38 @@
/*
- * include/asm-arm/arch-ebsa110/irq.h
+ * include/asm-arm/arch-nexuspci/irq.h
*
- * Copyright (C) 1996,1997,1998 Russell King
+ * Copyright (C) 1998 Philip Blundell
*/
-#define IRQ_MCLR ((volatile unsigned char *)0xf3000000)
-#define IRQ_MSET ((volatile unsigned char *)0xf2c00000)
-#define IRQ_MASK ((volatile unsigned char *)0xf2c00000)
+#include <asm/io.h>
-static __inline__ void mask_and_ack_irq(unsigned int irq)
-{
- if (irq < 8)
- *IRQ_MCLR = 1 << irq;
-}
+#define INTCONT 0xffe00000
+
+extern unsigned long soft_irq_mask;
static __inline__ void mask_irq(unsigned int irq)
{
- if (irq < 8)
- *IRQ_MCLR = 1 << irq;
+ writel((irq << 1), INTCONT);
+ soft_irq_mask &= ~(1<<irq);
}
+#define mask_and_ack_irq(_x) mask_irq(_x)
+
static __inline__ void unmask_irq(unsigned int irq)
{
- if (irq < 8)
- *IRQ_MSET = 1 << irq;
+ writel((irq << 1) + 1, INTCONT);
+ soft_irq_mask |= (1<<irq);
}
static __inline__ unsigned long get_enabled_irqs(void)
{
- return 0;
+ return soft_irq_mask;
}
static __inline__ void irq_init_irq(void)
{
- unsigned long flags;
-
- save_flags_cli (flags);
- *IRQ_MCLR = 0xff;
- *IRQ_MSET = 0x55;
- *IRQ_MSET = 0x00;
- if (*IRQ_MASK != 0x55)
- while (1);
- *IRQ_MCLR = 0xff; /* clear all interrupt enables */
- restore_flags (flags);
+ unsigned int i;
+ /* Disable all interrupts initially. */
+ for (i = 0; i < NR_IRQS; i++)
+ mask_irq(i);
}
diff --git a/include/asm-arm/arch-nexuspci/irqs.h b/include/asm-arm/arch-nexuspci/irqs.h
index 054d0675b..69af6e833 100644
--- a/include/asm-arm/arch-nexuspci/irqs.h
+++ b/include/asm-arm/arch-nexuspci/irqs.h
@@ -1,16 +1,32 @@
/*
* linux/include/asm-arm/arch-nexuspci/irqs.h
*
- * Copyright (C) 1997 Philip Blundell
+ * Copyright (C) 1997, 1998 Philip Blundell
*/
-#define IRQ_DUART 0
-#define IRQ_PLX 1
-#define IRQ_PCI_D 2
-#define IRQ_PCI_C 3
-#define IRQ_PCI_B 4
-#define IRQ_PCI_A 5
-#define IRQ_SYSERR 6
+/* Most of the IRQ sources can generate both FIQs and IRQs.
+ The exceptions to this are the DUART, which can only generate IRQs,
+ and the PLX SYSERR output, which can only generate FIQs. We route
+ both FIQs and IRQs through the generic IRQ handling system and the
+ choice by the driver of which to use is basically an arbitrary one. */
+
+#define TREAT_FIQS_AS_IRQS
+
+#define FIQ_PLX 0
+#define FIQ_PCI_D 1
+#define FIQ_PCI_C 2
+#define FIQ_PCI_B 3
+#define FIQ_PCI_A 4
+#define FIQ_SYSERR 5
+
+#define IRQ_DUART 6
+#define IRQ_PLX 7
+#define IRQ_PCI_D 8
+#define IRQ_PCI_C 9
+#define IRQ_PCI_B 10
+#define IRQ_PCI_A 11
/* timer is part of the DUART */
#define IRQ_TIMER IRQ_DUART
+
+#define irq_cannonicalize(i) (i)
diff --git a/include/asm-arm/arch-nexuspci/mmu.h b/include/asm-arm/arch-nexuspci/mmu.h
index 6e21320d3..9ecce067f 100644
--- a/include/asm-arm/arch-nexuspci/mmu.h
+++ b/include/asm-arm/arch-nexuspci/mmu.h
@@ -1,16 +1,26 @@
/*
* linux/include/asm-arm/arch-nexuspci/mmu.h
*
- * Copyright (c) 1997 Philip Blundell.
+ * Copyright (c) 1997, 1998 Philip Blundell.
*
*/
#ifndef __ASM_ARCH_MMU_H
#define __ASM_ARCH_MMU_H
/*
- * On NexusPCI, the dram is contiguous
+ * On NexusPCI, the DRAM is contiguous
*/
#define __virt_to_phys(vpage) ((vpage) - PAGE_OFFSET + 0x40000000)
#define __phys_to_virt(ppage) ((ppage) + PAGE_OFFSET - 0x40000000)
+#define __virt_to_phys__is_a_macro
+#define __phys_to_virt__is_a_macro
+
+/*
+ * On the PCI bus the DRAM appears at address 0
+ */
+#define __virt_to_bus__is_a_macro
+#define __virt_to_bus(x) ((x) - PAGE_OFFSET)
+#define __bus_to_virt__is_a_macro
+#define __bus_to_virt(x) ((x) + PAGE_OFFSET)
#endif
diff --git a/include/asm-arm/arch-nexuspci/processor.h b/include/asm-arm/arch-nexuspci/processor.h
index 46bf157a4..da9fdd583 100644
--- a/include/asm-arm/arch-nexuspci/processor.h
+++ b/include/asm-arm/arch-nexuspci/processor.h
@@ -24,7 +24,12 @@
/* This decides where the kernel will search for a free chunk of vm
* space during mmap's.
*/
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+#if 0
+#define TASK_UNMAPPED_BASE(off) (TASK_SIZE / 3)
+#else
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+#endif
+#define TASK_UNMAPPED_ALIGN(addr, off) PAGE_ALIGN(addr)
#define INIT_MMAP \
{ &init_mm, 0, 0, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap }
diff --git a/include/asm-arm/arch-nexuspci/shmparam.h b/include/asm-arm/arch-nexuspci/shmparam.h
index 9c36489cb..191bd514d 100644
--- a/include/asm-arm/arch-nexuspci/shmparam.h
+++ b/include/asm-arm/arch-nexuspci/shmparam.h
@@ -1,5 +1,5 @@
/*
- * linux/include/asm-arm/arch-ebsa110/shmparam.h
+ * linux/include/asm-arm/arch-nexuspci/shmparam.h
*
* Copyright (c) 1996 Russell King.
*/
diff --git a/include/asm-arm/arch-nexuspci/system.h b/include/asm-arm/arch-nexuspci/system.h
index 7a2957cae..7042dc436 100644
--- a/include/asm-arm/arch-nexuspci/system.h
+++ b/include/asm-arm/arch-nexuspci/system.h
@@ -1,5 +1,5 @@
/*
- * linux/include/asm-arm/arch-ebsa110/system.h
+ * linux/include/asm-arm/arch-nexuspci/system.h
*
* Copyright (c) 1996,1997,1998 Russell King.
*/
@@ -9,7 +9,7 @@
extern __inline__ void arch_hard_reset (void)
{
/*
- * loop endlessly
+ * loop endlessly - the watchdog will reset us if it's enabled.
*/
cli();
while (1);
diff --git a/include/asm-arm/arch-nexuspci/time.h b/include/asm-arm/arch-nexuspci/time.h
index ddbee82db..1f3fa401f 100644
--- a/include/asm-arm/arch-nexuspci/time.h
+++ b/include/asm-arm/arch-nexuspci/time.h
@@ -3,10 +3,15 @@
*
* Copyright (c) 1997 Phil Blundell.
*
- * Nexus PCI card has no real-time clock.
- *
+ * Nexus PCI card has no real-time clock. We get timer ticks from the
+ * SCC chip.
*/
+#define UART_BASE 0xfff00000
+#define INTCONT 0xffe00000
+
+#define update_rtc()
+
extern __inline__ unsigned long gettimeoffset (void)
{
return 0;
@@ -14,12 +19,31 @@ extern __inline__ unsigned long gettimeoffset (void)
extern __inline__ int reset_timer (void)
{
- return 0;
+ static int count = 50;
+ writeb(0x90, UART_BASE + 8);
+ if (--count == 0)
+ {
+ static int state = 1;
+ state ^= 1;
+ writeb(0x1a + state, INTCONT);
+ count = 50;
+ }
+ readb(UART_BASE + 0x14);
+ readb(UART_BASE + 0x14);
+ readb(UART_BASE + 0x14);
+ readb(UART_BASE + 0x14);
+ readb(UART_BASE + 0x14);
+ readb(UART_BASE + 0x14);
+ return 1;
}
extern __inline__ unsigned long setup_timer (void)
{
- reset_timer ();
+ int tick = 3686400 / 16 / 2 / 100;
+ writeb(tick & 0xff, UART_BASE + 0x1c);
+ writeb(tick >> 8, UART_BASE + 0x18);
+ writeb(0x80, UART_BASE + 8);
+ writeb(0x10, UART_BASE + 0x14);
/*
* Default the date to 1 Jan 1970 0:0:0
* You will have to run a time daemon to set the
diff --git a/include/asm-arm/arch-nexuspci/timex.h b/include/asm-arm/arch-nexuspci/timex.h
new file mode 100644
index 000000000..63d4e2cd1
--- /dev/null
+++ b/include/asm-arm/arch-nexuspci/timex.h
@@ -0,0 +1,8 @@
+/*
+ * linux/include/asm-arm/arch-nexuspci/timex.h
+ *
+ * NexusPCI StrongARM card timex specifications
+ *
+ * Copyright (C) 1998 Philip Blundell
+ */
+
diff --git a/include/asm-arm/arch-rpc/hardware.h b/include/asm-arm/arch-rpc/hardware.h
index 75e112e98..706992b78 100644
--- a/include/asm-arm/arch-rpc/hardware.h
+++ b/include/asm-arm/arch-rpc/hardware.h
@@ -53,7 +53,7 @@
/*
* Mapping areas
*/
-#define IO_END 0xe0ffffff
+#define IO_END 0xe1000000
#define IO_BASE 0xe0000000
#define IO_SIZE (IO_END - IO_BASE)
diff --git a/include/asm-arm/arch-rpc/ide.h b/include/asm-arm/arch-rpc/ide.h
index 49463bae0..311a98853 100644
--- a/include/asm-arm/arch-rpc/ide.h
+++ b/include/asm-arm/arch-rpc/ide.h
@@ -3,12 +3,13 @@
*
* Copyright (c) 1997 Russell King
*/
+#include <asm/irq.h>
static __inline__ int
ide_default_irq(ide_ioreg_t base)
{
if (base == 0x1f0)
- return 9;
+ return IRQ_HARDDISK;
return 0;
}
@@ -40,5 +41,5 @@ ide_init_hwif_ports (ide_ioreg_t *p, ide_ioreg_t base, int stepping, int *irq)
}
*p++ = ctrl;
if (irq != NULL)
- irq = 0;
+ *irq = 0;
}
diff --git a/include/asm-arm/arch-rpc/irqs.h b/include/asm-arm/arch-rpc/irqs.h
index 9adbc9c61..1faaf758e 100644
--- a/include/asm-arm/arch-rpc/irqs.h
+++ b/include/asm-arm/arch-rpc/irqs.h
@@ -1,5 +1,5 @@
/*
- * linux/include/asm-arm/arch-a5k/irqs.h
+ * linux/include/asm-arm/arch-rpc/irqs.h
*
* Copyright (C) 1996 Russell King
*/
@@ -13,9 +13,8 @@
#define IRQ_TIMER1 6
#define IRQ_IMMEDIATE 7
#define IRQ_EXPCARDFIQ 8
-#define IRQ_SOUNDCHANGE 9
+#define IRQ_HARDDISK 9
#define IRQ_SERIALPORT 10
-#define IRQ_HARDDISK 11
#define IRQ_FLOPPYDISK 12
#define IRQ_EXPANSIONCARD 13
#define IRQ_KEYBOARDTX 14
@@ -35,3 +34,6 @@
#define FIQ_FORCE 7
#define IRQ_TIMER IRQ_TIMER0
+
+#define irq_cannonicalize(i) (i)
+
diff --git a/include/asm-arm/arch-rpc/keyboard.h b/include/asm-arm/arch-rpc/keyboard.h
index 60d3f0b8c..44090e122 100644
--- a/include/asm-arm/arch-rpc/keyboard.h
+++ b/include/asm-arm/arch-rpc/keyboard.h
@@ -28,7 +28,11 @@ extern unsigned char ps2kbd_sysrq_xlate[NR_SCANCODES];
* Returns : 0 to ignore scancode, *keycode set to keycode, *up_flag
* set to 0200 if scancode indicates release
*/
+#ifdef NEW_KEYBOARD
#define kbd_translate(sc, kcp, ufp, rm) ps2kbd_translate(sc, kcp, ufp)
+#else
+#define kbd_translate(sc, kcp, rm) ({ unsigned int up_flag; ps2kbd_translate(sc, kcp, &up_flag); })
+#endif
#define kbd_unexpected_up(kc) (0200)
#define kbd_leds(leds) ps2kbd_leds(leds)
#define kbd_init_hw() ps2kbd_init_hw()
diff --git a/include/asm-arm/arch-rpc/processor.h b/include/asm-arm/arch-rpc/processor.h
index 61ab21538..cdb79eeed 100644
--- a/include/asm-arm/arch-rpc/processor.h
+++ b/include/asm-arm/arch-rpc/processor.h
@@ -26,7 +26,12 @@
/* This decides where the kernel will search for a free chunk of vm
* space during mmap's.
*/
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+#if 0
+#define TASK_UNMAPPED_BASE(off) (TASK_SIZE / 3)
+#else
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+#endif
+#define TASK_UNMAPPED_ALIGN(addr, off) PAGE_ALIGN(addr)
#define INIT_MMAP \
{ &init_mm, 0, 0, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap }
diff --git a/include/asm-arm/arch-rpc/serial.h b/include/asm-arm/arch-rpc/serial.h
index 2718276cb..8c33a7964 100644
--- a/include/asm-arm/arch-rpc/serial.h
+++ b/include/asm-arm/arch-rpc/serial.h
@@ -21,7 +21,7 @@
#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
/* UART CLK PORT IRQ FLAGS */
-#define RS_UARTS \
+#define SERIAL_PORT_DFNS \
{ 0, BASE_BAUD, 0x3F8, 10, STD_COM_FLAGS }, /* ttyS0 */ \
{ 0, BASE_BAUD, 0x2F8, 10, STD_COM_FLAGS }, /* ttyS1 */ \
{ 0, BASE_BAUD, 0 , 0, STD_COM_FLAGS }, /* ttyS2 */ \
diff --git a/include/asm-arm/arch-vnc/a.out.h b/include/asm-arm/arch-vnc/a.out.h
new file mode 100644
index 000000000..0123eb29a
--- /dev/null
+++ b/include/asm-arm/arch-vnc/a.out.h
@@ -0,0 +1,16 @@
+/*
+ * linux/include/asm-arm/arch-ebsa110/a.out.h
+ *
+ * Copyright (C) 1996 Russell King
+ */
+
+#ifndef __ASM_ARCH_A_OUT_H
+#define __ASM_ARCH_A_OUT_H
+
+#ifdef __KERNEL__
+#define STACK_TOP ((current->personality==PER_LINUX_32BIT)? 0xc0000000 : 0x04000000)
+#define LIBRARY_START_TEXT (0x00c00000)
+#endif
+
+#endif
+
diff --git a/include/asm-arm/arch-vnc/dma.h b/include/asm-arm/arch-vnc/dma.h
new file mode 100644
index 000000000..96a265927
--- /dev/null
+++ b/include/asm-arm/arch-vnc/dma.h
@@ -0,0 +1,29 @@
+/*
+ * linux/include/asm-arm/arch-ebsa110/dma.h
+ *
+ * Architecture DMA routes
+ *
+ * Copyright (C) 1997.1998 Russell King
+ */
+#ifndef __ASM_ARCH_DMA_H
+#define __ASM_ARCH_DMA_H
+
+/*
+ * This is the maximum DMA address that can be DMAd to.
+ * There should not be more than (0xd0000000 - 0xc0000000)
+ * bytes of RAM.
+ */
+#define MAX_DMA_ADDRESS 0xd0000000
+
+/*
+ * DMA modes - we have two, IN and OUT
+ */
+typedef enum {
+ DMA_MODE_READ,
+ DMA_MODE_WRITE
+} dmamode_t;
+
+#define MAX_DMA_CHANNELS 8
+
+#endif /* _ASM_ARCH_DMA_H */
+
diff --git a/include/asm-arm/arch-vnc/hardware.h b/include/asm-arm/arch-vnc/hardware.h
new file mode 100644
index 000000000..947456659
--- /dev/null
+++ b/include/asm-arm/arch-vnc/hardware.h
@@ -0,0 +1,121 @@
+/*
+ * linux/include/asm-arm/arch-vnc/hardware.h
+ *
+ * Copyright (C) 1998 Corel Computer/Russell King.
+ *
+ * This file contains the hardware definitions of the VNC.
+ */
+
+/* Logical Physical
+ * 0xfff00000 0x40000000 X-Bus
+ * 0xffe00000 0x7c000000 PCI I/O space
+ *
+ * 0xfe000000 0x42000000 CSR
+ * 0xfd000000 0x78000000 Outbound write flush
+ * 0xfc000000 0x79000000 PCI IACK/special space
+ *
+ * 0xf9030000 0x7a080000 PCI Config type 1 card 4
+ * 0xf9020000 0x7a040000 PCI Config type 1 card 3
+ * 0xf9010000 0x7a020000 PCI Config type 1 card 2
+ * 0xf9000000 0x7a010000 PCI Config type 1 card 1
+ *
+ * 0xf8030000 0x7b080000 PCI Config type 0 card 4
+ * 0xf8020000 0x7b040000 PCI Config type 0 card 3
+ * 0xf8010000 0x7b020000 PCI Config type 0 card 2
+ * 0xf8000000 0x7b010000 PCI Config type 0 card 1
+ *
+ */
+
+/*
+ * DEC21285
+ */
+#define CSR_SA110_CNTL ((volatile unsigned long *)0xfe00013c)
+#define CSR_PCIADDR_EXTN ((volatile unsigned long *)0xfe000140)
+#define CSR_PREFETCHMEMRANGE ((volatile unsigned long *)0xfe000144)
+#define CSR_XBUS_CYCLE ((volatile unsigned long *)0xfe000148)
+#define CSR_XBUS_IOSTROBE ((volatile unsigned long *)0xfe00014c)
+#define CSR_DOORBELL_PCI ((volatile unsigned long *)0xfe000150)
+#define CSR_DOORBELL_SA110 ((volatile unsigned long *)0xfe000154)
+
+
+#define CSR_UARTDR ((volatile unsigned long *)0xfe000160)
+#define CSR_RXSTAT ((volatile unsigned long *)0xfe000164)
+#define CSR_H_UBRLCR ((volatile unsigned long *)0xfe000168)
+#define CSR_M_UBRLCR ((volatile unsigned long *)0xfe00016c)
+#define CSR_L_UBRLCR ((volatile unsigned long *)0xfe000170)
+#define CSR_UARTCON ((volatile unsigned long *)0xfe000174)
+#define CSR_UARTFLG ((volatile unsigned long *)0xfe000178)
+
+#define CSR_IRQ_STATUS ((volatile unsigned long *)0xfe000180)
+#define CSR_IRQ_RAWSTATUS ((volatile unsigned long *)0xfe000184)
+#define CSR_IRQ_ENABLE ((volatile unsigned long *)0xfe000188)
+#define CSR_IRQ_DISABLE ((volatile unsigned long *)0xfe00018c)
+#define CSR_IRQ_SOFT ((volatile unsigned long *)0xfe000190)
+
+#define CSR_FIQ_STATUS ((volatile unsigned long *)0xfe000280)
+#define CSR_FIQ_RAWSTATUS ((volatile unsigned long *)0xfe000284)
+#define CSR_FIQ_ENABLE ((volatile unsigned long *)0xfe000288)
+#define CSR_FIQ_DISABLE ((volatile unsigned long *)0xfe00028c)
+#define CSR_FIQ_SOFT ((volatile unsigned long *)0xfe000290)
+
+#define CSR_TIMER1_LOAD ((volatile unsigned long *)0xfe000300)
+#define CSR_TIMER1_VALUE ((volatile unsigned long *)0xfe000304)
+#define CSR_TIMER1_CNTL ((volatile unsigned long *)0xfe000308)
+#define CSR_TIMER1_CLR ((volatile unsigned long *)0xfe00030c)
+
+#define CSR_TIMER2_LOAD ((volatile unsigned long *)0xfe000320)
+#define CSR_TIMER2_VALUE ((volatile unsigned long *)0xfe000324)
+#define CSR_TIMER2_CNTL ((volatile unsigned long *)0xfe000328)
+#define CSR_TIMER2_CLR ((volatile unsigned long *)0xfe00032c)
+
+#define CSR_TIMER3_LOAD ((volatile unsigned long *)0xfe000340)
+#define CSR_TIMER3_VALUE ((volatile unsigned long *)0xfe000344)
+#define CSR_TIMER3_CNTL ((volatile unsigned long *)0xfe000348)
+#define CSR_TIMER3_CLR ((volatile unsigned long *)0xfe00034c)
+
+#define CSR_TIMER4_LOAD ((volatile unsigned long *)0xfe000360)
+#define CSR_TIMER4_VALUE ((volatile unsigned long *)0xfe000364)
+#define CSR_TIMER4_CNTL ((volatile unsigned long *)0xfe000368)
+#define CSR_TIMER4_CLR ((volatile unsigned long *)0xfe00036c)
+
+#define TIMER_CNTL_ENABLE (1 << 7)
+#define TIMER_CNTL_AUTORELOAD (1 << 6)
+#define TIMER_CNTL_DIV1 (0)
+#define TIMER_CNTL_DIV16 (1 << 2)
+#define TIMER_CNTL_DIV256 (2 << 2)
+#define TIMER_CNTL_CNTEXT (3 << 2)
+
+/* LEDs */
+#define XBUS_LEDS ((volatile unsigned char *)0xfff12000)
+#define XBUS_LED_AMBER (1 << 0)
+#define XBUS_LED_GREEN (1 << 1)
+#define XBUS_LED_RED (1 << 2)
+#define XBUS_LED_TOGGLE (1 << 8)
+
+/* PIC irq control */
+#define PIC_LO 0x20
+#define PIC_MASK_LO 0x21
+#define PIC_HI 0xA0
+#define PIC_MASK_HI 0xA1
+
+#define IO_END 0xffffffff
+#define IO_BASE 0xe0000000
+#define IO_SIZE (IO_END - IO_BASE)
+
+#define HAS_PCIO
+
+#define XBUS_SWITCH ((volatile unsigned char *)0xfff12000)
+#define XBUS_SWITCH_SWITCH ((*XBUS_SWITCH) & 15)
+#define XBUS_SWITCH_J17_13 ((*XBUS_SWITCH) & (1 << 4))
+#define XBUS_SWITCH_J17_11 ((*XBUS_SWITCH) & (1 << 5))
+#define XBUS_SWITCH_J17_9 ((*XBUS_SWITCH) & (1 << 6))
+
+#define PCIO_BASE 0xffe00000
+
+#define KERNTOPHYS(a) ((unsigned long)(&a))
+
+#define PARAMS_OFFSET 0x0100
+#define PARAMS_BASE (PAGE_OFFSET + PARAMS_OFFSET)
+
+#define SAFE_ADDR 0x50000000
+
diff --git a/include/asm-arm/arch-vnc/ide.h b/include/asm-arm/arch-vnc/ide.h
new file mode 100644
index 000000000..35eff5c28
--- /dev/null
+++ b/include/asm-arm/arch-vnc/ide.h
@@ -0,0 +1 @@
+/* no ide */
diff --git a/include/asm-arm/arch-vnc/io.h b/include/asm-arm/arch-vnc/io.h
new file mode 100644
index 000000000..83d25d363
--- /dev/null
+++ b/include/asm-arm/arch-vnc/io.h
@@ -0,0 +1,176 @@
+/*
+ * linux/include/asm-arm/arch-ebsa110/io.h
+ *
+ * Copyright (C) 1997,1998 Russell King
+ *
+ * Modifications:
+ * 06-Dec-1997 RMK Created.
+ */
+#ifndef __ASM_ARM_ARCH_IO_H
+#define __ASM_ARM_ARCH_IO_H
+
+/*
+ * This architecture does not require any delayed IO, and
+ * has the constant-optimised IO
+ */
+#undef ARCH_IO_DELAY
+
+/*
+ * Dynamic IO functions - let the compiler
+ * optimize the expressions
+ */
+#define DECLARE_DYN_OUT(fnsuffix,instr,typ) \
+extern __inline__ void __out##fnsuffix (unsigned int value, unsigned int port) \
+{ \
+ __asm__ __volatile__( \
+ "str" ##instr## " %0, [%1, %2]" \
+ : \
+ : "r" (value), "r" (PCIO_BASE), typ (port)); \
+}
+
+#define DECLARE_DYN_IN(sz,fnsuffix,instr,typ) \
+extern __inline__ unsigned sz __in##fnsuffix (unsigned int port) \
+{ \
+ unsigned long value; \
+ __asm__ __volatile__( \
+ "ldr" ##instr## " %0, [%1, %2]" \
+ : "=&r" (value) \
+ : "r" (PCIO_BASE), typ (port)); \
+ return (unsigned sz)value; \
+}
+
+extern __inline__ unsigned int __ioaddr (unsigned int port) \
+{ \
+ return (unsigned int)(PCIO_BASE + port); \
+}
+
+#define DECLARE_IO(sz,fnsuffix,instr,typ) \
+ DECLARE_DYN_OUT(fnsuffix,instr,typ) \
+ DECLARE_DYN_IN(sz,fnsuffix,instr,typ)
+
+DECLARE_IO(char,b,"b","Jr")
+DECLARE_IO(short,w,"h","r")
+DECLARE_IO(long,l,"","Jr")
+
+#undef DECLARE_IO
+#undef DECLARE_DYN_OUT
+#undef DECLARE_DYN_IN
+
+/*
+ * Constant address IO functions
+ *
+ * These have to be macros for the 'J' constraint to work -
+ * +/-4096 immediate operand.
+ */
+#define __outbc(value,port) \
+({ \
+ __asm__ __volatile__( \
+ "strb %0, [%1, %2]" \
+ : \
+ : "r" (value), "r" (PCIO_BASE), "Jr" (port)); \
+})
+
+#define __inbc(port) \
+({ \
+ unsigned char result; \
+ __asm__ __volatile__( \
+ "ldrb %0, [%1, %2]" \
+ : "=r" (result) \
+ : "r" (PCIO_BASE), "Jr" (port)); \
+ result; \
+})
+
+#define __outwc(value,port) \
+({ \
+ __asm__ __volatile__( \
+ "strh %0, [%1, %2]" \
+ : \
+ : "r" (value), "r" (PCIO_BASE), "r" (port)); \
+})
+
+#define __inwc(port) \
+({ \
+ unsigned short result; \
+ __asm__ __volatile__( \
+ "ldrh %0, [%1, %2]" \
+ : "=r" (result) \
+ : "r" (PCIO_BASE), "r" (port)); \
+ result & 0xffff; \
+})
+
+#define __outlc(value,port) \
+({ \
+ __asm__ __volatile__( \
+ "str %0, [%1, %2]" \
+ : \
+ : "r" (value), "r" (PCIO_BASE), "Jr" (port)); \
+})
+
+#define __inlc(port) \
+({ \
+ unsigned long result; \
+ __asm__ __volatile__( \
+ "ldr %0, [%1, %2]" \
+ : "=r" (result) \
+ : "r" (PCIO_BASE), "Jr" (port)); \
+ result; \
+})
+
+#define __ioaddrc(port) \
+({ \
+ unsigned long addr; \
+ addr = PCIO_BASE + port; \
+ addr; \
+})
+
+/*
+ * Translated address IO functions
+ *
+ * IO address has already been translated to a virtual address
+ */
+#define outb_t(v,p) \
+ (*(volatile unsigned char *)(p) = (v))
+
+#define inb_t(p) \
+ (*(volatile unsigned char *)(p))
+
+#define outl_t(v,p) \
+ (*(volatile unsigned long *)(p) = (v))
+
+#define inl_t(p) \
+ (*(volatile unsigned long *)(p))
+
+/*
+ * This is not sufficient... (and it's a hack anyway)
+ */
+static inline void writeb(unsigned char b, unsigned int addr)
+{
+ *(volatile unsigned char *)(0xe0000000 + (addr)) = b;
+}
+
+static inline unsigned char readb(unsigned int addr)
+{
+ return *(volatile unsigned char *)(0xe0000000 + (addr));
+}
+
+static inline void writew(unsigned short b, unsigned int addr)
+{
+ *(volatile unsigned short *)(0xe0000000 + (addr)) = b;
+}
+
+static inline unsigned short readw(unsigned int addr)
+{
+ return *(volatile unsigned short *)(0xe0000000 + (addr));
+}
+
+static inline void writew(unsigned long b, unsigned int addr)
+{
+ *(volatile unsigned long *)(0xe0000000 + (addr)) = b;
+}
+
+static inline unsigned long readw(unsigned int addr)
+{
+ return *(volatile unsigned long *)(0xe0000000 + (addr));
+}
+
+#endif
diff --git a/include/asm-arm/arch-vnc/irq.h b/include/asm-arm/arch-vnc/irq.h
new file mode 100644
index 000000000..2273d433b
--- /dev/null
+++ b/include/asm-arm/arch-vnc/irq.h
@@ -0,0 +1,106 @@
+/*
+ * include/asm-arm/arch-vnc/irq.h
+ *
+ * Copyright (C) 1998 Russell King
+ */
+
+#include <asm/irq.h>
+
+/*
+ * FootBridge IRQ translation table
+ * Converts form our IRQ numbers into FootBridge masks (defined in irqs.h)
+ */
+static int fb_irq_mask[16] = {
+ 0,
+ IRQ_MASK_SOFTIRQ,
+ IRQ_MASK_UART_DEBUG,
+ 0,
+ IRQ_MASK_TIMER0,
+ IRQ_MASK_TIMER1,
+ IRQ_MASK_TIMER2,
+ IRQ_MASK_WATCHDOG,
+ IRQ_MASK_ETHER10,
+ IRQ_MASK_ETHER100,
+ IRQ_MASK_VIDCOMP,
+ IRQ_MASK_EXTERN_IRQ,
+ IRQ_MASK_DMA1,
+ 0,
+ 0,
+ IRQ_MASK_PCI_ERR
+};
+
+static __inline__ void mask_and_ack_irq(unsigned int irq)
+{
+ if (irq < 16)
+ *CSR_IRQ_DISABLE = fb_irq_mask[irq];
+ else {
+ unsigned int pic_mask, mask;
+
+ if (irq < 24)
+ pic_mask = PIC_MASK_LO;
+ else
+ pic_mask = PIC_MASK_HI;
+
+ mask = 1 << (irq & 7);
+
+ outb(inb(pic_mask) | mask, pic_mask);
+ }
+}
+
+static __inline__ void mask_irq(unsigned int irq)
+{
+ if (irq < 16)
+ *CSR_IRQ_DISABLE = fb_irq_mask[irq];
+ else {
+ unsigned int pic_mask, mask;
+
+ if (irq < 24)
+ pic_mask = PIC_MASK_LO;
+ else
+ pic_mask = PIC_MASK_HI;
+
+ mask = 1 << (irq & 7);
+
+ outb(inb(pic_mask) | mask, pic_mask);
+ }
+}
+
+static __inline__ void unmask_irq(unsigned int irq)
+{
+ if (irq < 16)
+ *CSR_IRQ_ENABLE = fb_irq_mask[irq];
+ else {
+ unsigned int pic_mask, mask;
+
+ if (irq < 24)
+ pic_mask = PIC_MASK_LO;
+ else
+ pic_mask = PIC_MASK_HI;
+
+ mask = 1 << (irq & 7);
+
+ outb(inb(pic_mask) & ~mask, pic_mask);
+ }
+}
+
+static __inline__ unsigned long get_enabled_irqs(void)
+{
+ return 0;
+}
+
+static __inline__ void irq_init_irq(void)
+{
+ outb(0x11, PIC_LO);
+ outb(0x10, PIC_MASK_LO);
+ outb(0x04, PIC_MASK_LO);
+ outb(1, PIC_MASK_LO);
+
+ outb(0x11, PIC_HI);
+ outb(0x18, PIC_MASK_HI);
+ outb(0x02, PIC_MASK_HI);
+ outb(1, PIC_MASK_HI);
+
+ *CSR_IRQ_DISABLE = ~IRQ_MASK_EXTERN_IRQ;
+ *CSR_IRQ_ENABLE = IRQ_MASK_EXTERN_IRQ;
+ *CSR_FIQ_DISABLE = -1;
+}
diff --git a/include/asm-arm/arch-vnc/irqs.h b/include/asm-arm/arch-vnc/irqs.h
new file mode 100644
index 000000000..53e01a1d6
--- /dev/null
+++ b/include/asm-arm/arch-vnc/irqs.h
@@ -0,0 +1,63 @@
+/*
+ * linux/include/asm-arm/arch-vnc/irqs.h
+ *
+ * Copyright (C) 1998 Russell King
+ */
+
+#define NR_IRQS 32
+
+/*
+ * This is a list of all interrupts that the 21285
+ * can generate
+ */
+#define IRQ_SOFTIRQ 1 /* from FB.1 */
+#define IRQ_CONRX 2 /* from FB.2 */
+#define IRQ_CONTX 3 /* from FB.3 */
+#define IRQ_TIMER0 4 /* from FB.4 */
+#define IRQ_TIMER1 5 /* from FB.5 */
+#define IRQ_TIMER2 6 /* from FB.6 */
+#define IRQ_WATCHDOG 7 /* from FB.7 */
+#define IRQ_ETHER10 8 /* from FB.8 */
+#define IRQ_ETHER100 9 /* from FB.9 */
+#define IRQ_VIDCOMP 10 /* from FB.10 */
+#define IRQ_EXTERN_IRQ 11 /* from FB.11: chain to IDE irq's */
+#define IRQ_DMA1 12 /* from future */
+#define IRQ_PCI_ERR 15 /* from FB.[28:31] */
+
+#define IRQ_TIMER4 16 /* from 553.0 */
+#define IRQ_KEYBOARD 17 /* from 553.1 */
+#define IRQ_PIC_HI 18 /* from 533.2: chained to 553.[8:15] */
+#define IRQ_UART2 19 /* from 553.3 */
+#define IRQ_UART 20 /* from 553.4 */
+#define IRQ_MOUSE 21 /* from 553.5 */
+#define IRQ_UART_IR 22 /* from 553.6 */
+#define IRQ_PRINTER 23 /* from 553.7 */
+#define IRQ_RTC_ALARM 24 /* from 553.8 */
+#define IRQ_POWERLOW 26 /* from 553.10 */
+#define IRQ_VGA 27 /* from 553.11 */
+#define IRQ_SOUND 28 /* from 553.12 */
+#define IRQ_HARDDISK 30 /* from 553.14 */
+
+/* These defines handle the translation from the above FB #defines
+ * into physical buts for the FootBridge IRQ registers
+ */
+#define IRQ_MASK_SOFTIRQ 0x00000002
+#define IRQ_MASK_UART_DEBUG 0x0000000C
+#define IRQ_MASK_TIMER0 0x00000010
+#define IRQ_MASK_TIMER1 0x00000020
+#define IRQ_MASK_TIMER2 0x00000040
+#define IRQ_MASK_WATCHDOG 0x00000080
+#define IRQ_MASK_ETHERH10 0x00000100
+#define IRQ_MASK_ETHERH100 0x00000200
+#define IRQ_MASK_VIDCOMP 0x00000400
+#define IRQ_MASK_EXTERN_IRQ 0x00000800
+#define IRQ_MASK_DMA1 0x00030000
+#define IRQ_MASK_PCI_ERR 0xf0000000
+
+/*
+ * Now map them to the Linux interrupts
+ */
+#define IRQ_TIMER IRQ_TIMER0
+
+#define irq_cannonicalize(i) (i)
+
diff --git a/include/asm-arm/arch-vnc/keyboard.h b/include/asm-arm/arch-vnc/keyboard.h
new file mode 100644
index 000000000..4620ff165
--- /dev/null
+++ b/include/asm-arm/arch-vnc/keyboard.h
@@ -0,0 +1,37 @@
+/*
+ * linux/include/asm-arm/arch-ebsa285/keyboard.h
+ *
+ * Keyboard driver definitions for EBSA285 architecture
+ *
+ * (C) 1998 Russell King
+ */
+
+#include <linux/config.h>
+#include <asm/irq.h>
+
+#define NR_SCANCODES 128
+
+#ifdef CONFIG_MAGIC_SYSRQ
+static unsigned char kbd_sysrq_xlate[NR_SCANCODES];
+#endif
+
+#define kbd_setkeycode(sc,kc) (-EINVAL)
+#define kbd_getkeycode(sc) (-EINVAL)
+
+/* Prototype: int kbd_pretranslate(scancode, raw_mode)
+ * Returns : 0 to ignore scancode
+ */
+#define kbd_pretranslate(sc,rm) (1)
+
+/* Prototype: int kbd_translate(scancode, *keycode, *up_flag, raw_mode)
+ * Returns : 0 to ignore scancode, *keycode set to keycode, *up_flag
+ * set to 0200 if scancode indicates release
+ */
+#define kbd_translate(sc, kcp, ufp, rm) (1)
+#define kbd_unexpected_up(kc) (0200)
+#define kbd_leds(leds)
+#define kbd_init_hw()
+//#define kbd_sysrq_xlate ps2kbd_sysrq_xlate
+#define kbd_disable_irq()
+#define kbd_enable_irq()
+
diff --git a/include/asm-arm/arch-vnc/mm-init.h b/include/asm-arm/arch-vnc/mm-init.h
new file mode 100644
index 000000000..c6937abd0
--- /dev/null
+++ b/include/asm-arm/arch-vnc/mm-init.h
@@ -0,0 +1,5 @@
+/*
+ * linux/include/asm-arm/arch-ebsa110/mmap.h
+ *
+ * Copyright (C) 1996,1997,1998 Russell King
+ */
diff --git a/include/asm-arm/arch-vnc/mmu.h b/include/asm-arm/arch-vnc/mmu.h
new file mode 100644
index 000000000..85307d717
--- /dev/null
+++ b/include/asm-arm/arch-vnc/mmu.h
@@ -0,0 +1,26 @@
+/*
+ * linux/include/asm-arm/arch-ebsa110/mmu.h
+ *
+ * Copyright (c) 1996,1997,1998 Russell King.
+ *
+ * Changelog:
+ * 20-10-1996 RMK Created
+ * 31-12-1997 RMK Fixed definitions to reduce warnings
+ */
+#ifndef __ASM_ARCH_MMU_H
+#define __ASM_ARCH_MMU_H
+
+/*
+ * On ebsa, the dram is contiguous
+ */
+#define __virt_to_phys__is_a_macro
+#define __virt_to_phys(vpage) ((vpage) - PAGE_OFFSET)
+#define __phys_to_virt__is_a_macro
+#define __phys_to_virt(ppage) ((ppage) + PAGE_OFFSET)
+
+#define __virt_to_bus__is_a_macro
+#define __virt_to_bus(x) (x)
+#define __bus_to_virt__is_a_macro
+#define __bus_to_virt(x) (x)
+
+#endif
diff --git a/include/asm-arm/arch-vnc/oldlatches.h b/include/asm-arm/arch-vnc/oldlatches.h
new file mode 100644
index 000000000..8ff6ebd67
--- /dev/null
+++ b/include/asm-arm/arch-vnc/oldlatches.h
@@ -0,0 +1,9 @@
+/*
+ * Dummy oldlatches.h
+ *
+ * Copyright (C) 1996 Russell King
+ */
+
+#ifdef __need_oldlatches
+#error "Old latches not present in this (rpc) machine"
+#endif
diff --git a/include/asm-arm/arch-vnc/processor.h b/include/asm-arm/arch-vnc/processor.h
new file mode 100644
index 000000000..5d84ad498
--- /dev/null
+++ b/include/asm-arm/arch-vnc/processor.h
@@ -0,0 +1,31 @@
+/*
+ * linux/include/asm-arm/arch-vnc/processor.h
+ *
+ * Copyright (C) 1996,1997,1998 Russell King
+ */
+
+#ifndef __ASM_ARCH_PROCESSOR_H
+#define __ASM_ARCH_PROCESSOR_H
+
+/*
+ * Bus types
+ */
+#define EISA_bus 0
+#define EISA_bus__is_a_macro /* for versions in ksyms.c */
+#define MCA_bus 0
+#define MCA_bus__is_a_macro /* for versions in ksyms.c */
+
+/*
+ * User space: 3GB
+ */
+#define TASK_SIZE (0xc0000000UL)
+
+/* This decides where the kernel will search for a free chunk of vm
+ * space during mmap's.
+ */
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+
+#define INIT_MMAP \
+{ &init_mm, 0, 0, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap }
+
+#endif
diff --git a/include/asm-arm/arch-vnc/serial.h b/include/asm-arm/arch-vnc/serial.h
new file mode 100644
index 000000000..74fea49ce
--- /dev/null
+++ b/include/asm-arm/arch-vnc/serial.h
@@ -0,0 +1,43 @@
+/*
+ * linux/include/asm-arm/arch-vnc/serial.h
+ *
+ * Copyright (c) 1996 Russell King.
+ *
+ * Changelog:
+ * 15-10-1996 RMK Created
+ * 03-05-1998 RMK Modified for Corel Video NC
+ */
+#ifndef __ASM_ARCH_SERIAL_H
+#define __ASM_ARCH_SERIAL_H
+
+#include <asm/irq.h>
+
+/*
+ * This assumes you have a 1.8432 MHz clock for your UART.
+ *
+ * It'd be nice if someone built a serial card with a 24.576 MHz
+ * clock, since the 16550A is capable of handling a top speed of 1.5
+ * megabits/second; but this requires the faster clock.
+ */
+#define BASE_BAUD (1843200 / 16)
+
+#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
+
+ /* UART CLK PORT IRQ FLAGS */
+#define SERIAL_PORT_DFNS \
+ { 0, BASE_BAUD, 0x3F8, IRQ_UART , STD_COM_FLAGS }, /* ttyS0 */ \
+ { 0, BASE_BAUD, 0x2F8, IRQ_UART2, STD_COM_FLAGS }, /* ttyS1 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS2 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS3 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS4 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS5 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS6 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS7 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS8 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS9 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS10 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS11 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS12 */ \
+ { 0, BASE_BAUD, 0 , 0 , STD_COM_FLAGS }, /* ttyS13 */
+
+#endif
diff --git a/include/asm-arm/arch-vnc/shmparam.h b/include/asm-arm/arch-vnc/shmparam.h
new file mode 100644
index 000000000..9c36489cb
--- /dev/null
+++ b/include/asm-arm/arch-vnc/shmparam.h
@@ -0,0 +1,5 @@
+/*
+ * linux/include/asm-arm/arch-ebsa110/shmparam.h
+ *
+ * Copyright (c) 1996 Russell King.
+ */
diff --git a/include/asm-arm/arch-vnc/system.h b/include/asm-arm/arch-vnc/system.h
new file mode 100644
index 000000000..a3fed312c
--- /dev/null
+++ b/include/asm-arm/arch-vnc/system.h
@@ -0,0 +1,24 @@
+/*
+ * linux/include/asm-arm/arch-ebsa285/system.h
+ *
+ * Copyright (c) 1996,1997,1998 Russell King.
+ */
+#include <asm/hardware.h>
+#include <asm/leds.h>
+
+/* To reboot, we set up the 21285 watchdog and enable it.
+ * We then wait for it to timeout.
+ */
+extern __inline__ void arch_hard_reset (void)
+{
+ cli();
+ *CSR_TIMER4_LOAD = 0x8000;
+ *CSR_TIMER4_CNTL = TIMER_CNTL_ENABLE | TIMER_CNTL_AUTORELOAD | TIMER_CNTL_DIV16;
+ *CSR_SA110_CNTL |= 1 << 13;
+ while(1);
+}
+
+#define ARCH_IDLE_OK
+
+#define arch_start_idle() leds_event(led_idle_start)
+#define arch_end_idle() leds_event(led_idle_end)
diff --git a/include/asm-arm/arch-vnc/time.h b/include/asm-arm/arch-vnc/time.h
new file mode 100644
index 000000000..73f228441
--- /dev/null
+++ b/include/asm-arm/arch-vnc/time.h
@@ -0,0 +1,40 @@
+/*
+ * linux/include/asm-arm/arch-vnc/time.h
+ *
+ * Copyright (c) 1997 Corel Computer Corp.
+ * Slight modifications to bring in line with ebsa285 port.
+ * -- Russell King.
+ */
+
+extern __inline__ unsigned long gettimeoffset (void)
+{
+ return 0;
+}
+
+extern __inline__ int reset_timer (void)
+{
+ *CSR_TIMER1_CLR = 0;
+ return 1;
+}
+
+/*
+ * We don't have a RTC to update!
+ */
+#define update_rtc()
+
+/*
+ * Set up timer interrupt, and return the current time in seconds.
+ */
+extern __inline__ unsigned long setup_timer (void)
+{
+ *CSR_TIMER1_CLR = 1;
+ *CSR_TIMER1_LOAD = LATCH;
+ *CSR_TIMER1_CNTL = TIMER_CNTL_ENABLE | TIMER_CNTL_AUTORELOAD | TIMER_CNTL_DIV16;
+
+ /*
+ * Default the date to 1 Jan 1970 00:00:00
+ * You will have to run a time daemon to set the
+ * clock correctly at bootup
+ */
+ return mktime(1970, 1, 1, 0, 0, 0);
+}
diff --git a/include/asm-arm/arch-vnc/timex.h b/include/asm-arm/arch-vnc/timex.h
new file mode 100644
index 000000000..c50f118ff
--- /dev/null
+++ b/include/asm-arm/arch-vnc/timex.h
@@ -0,0 +1,13 @@
+/*
+ * linux/include/asm-arm/arch-vnc/timex.h
+ *
+ * Corel Video NC architecture timex specifications
+ *
+ * Copyright (C) 1998 Corel Computer/Russell King
+ */
+
+/*
+ * On the VNC, the clock runs at 66MHz and is divided
+ * by a 4-bit prescaler.
+ */
+#define CLOCK_TICK_RATE (66000000 / 16)
diff --git a/include/asm-arm/arch-vnc/uncompress.h b/include/asm-arm/arch-vnc/uncompress.h
new file mode 100644
index 000000000..d5260b027
--- /dev/null
+++ b/include/asm-arm/arch-vnc/uncompress.h
@@ -0,0 +1,33 @@
+/*
+ * linux/include/asm-arm/arch-ebsa110/uncompress.h
+ *
+ * Copyright (C) 1996,1997,1998 Russell King
+ */
+
+/*
+ * This does not append a newline
+ */
+static void puts(const char *s)
+{
+ __asm__ __volatile__("
+ ldrb %0, [%2], #1
+ teq %0, #0
+ beq 3f
+1: strb %0, [%3]
+2: ldrb %1, [%3, #0x14]
+ and %1, %1, #0x60
+ teq %1, #0x60
+ bne 2b
+ teq %0, #'\n'
+ moveq %0, #'\r'
+ beq 1b
+ ldrb %0, [%2], #1
+ teq %0, #0
+ bne 1b
+3: " : : "r" (0), "r" (0), "r" (s), "r" (0xf0000be0) : "cc");
+}
+
+/*
+ * nothing to do
+ */
+#define arch_decomp_setup()
diff --git a/include/asm-arm/bitops.h b/include/asm-arm/bitops.h
index e6d942f71..5dcfe966f 100644
--- a/include/asm-arm/bitops.h
+++ b/include/asm-arm/bitops.h
@@ -55,6 +55,27 @@ extern __inline__ unsigned long ffz(unsigned long word)
#ifdef __KERNEL__
+/*
+ * ffs: find first bit set. This is defined the same way as
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+
+#define ffs(x) generic_ffs(x)
+
+/*
+ * hweightN: returns the hamming weight (i.e. the number
+ * of bits set) of a N-bit word
+ */
+
+#define hweight32(x) generic_hweight32(x)
+#define hweight16(x) generic_hweight16(x)
+#define hweight8(x) generic_hweight8(x)
+
+#endif /* __KERNEL__ */
+
+#ifdef __KERNEL__
+
#define ext2_set_bit test_and_set_bit
#define ext2_clear_bit test_and_clear_bit
#define ext2_test_bit test_bit
diff --git a/include/asm-arm/checksum.h b/include/asm-arm/checksum.h
index ccfadd761..2323bb5d9 100644
--- a/include/asm-arm/checksum.h
+++ b/include/asm-arm/checksum.h
@@ -35,14 +35,19 @@ unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum)
* better 64-bit) boundary
*/
-extern
-unsigned int csum_partial_copy_from_user (const char *src, char *dst, int len, int sum, int *err_ptr);
+unsigned int
+csum_partial_copy_nocheck(const char *src, char *dst, int len, int sum);
+unsigned int
+csum_partial_copy_from_user(const char *src, char *dst, int len, int sum, int *err_ptr);
+
+#if 0
/*
* This combination is currently not used, but possible:
*/
-extern
-unsigned int csum_partial_copy_to_user (const char *src, char *dst, int len, int sum, int *err_ptr);
+unsigned int
+csum_partial_copy_to_user(const char *src, char *dst, int len, int sum, int *err_ptr);
+#endif
/*
* These are the old (and unsafe) way of doing checksums, a warning message will be
@@ -51,7 +56,8 @@ unsigned int csum_partial_copy_to_user (const char *src, char *dst, int len, int
* these functions should go away after some time.
*/
#define csum_partial_copy_fromuser csum_partial_copy
-unsigned int csum_partial_copy(const char *src, char *dst, int len, int sum);
+unsigned int
+csum_partial_copy(const char *src, char *dst, int len, int sum);
/*
* This is a version of ip_compute_csum() optimized for IP headers,
@@ -62,8 +68,9 @@ unsigned int csum_partial_copy(const char *src, char *dst, int len, int sum);
* Note: the order that the LDM registers are loaded with respect to
* the adc's doesn't matter.
*/
-static inline unsigned short ip_fast_csum(unsigned char * iph,
- unsigned int ihl) {
+static inline unsigned short
+ip_fast_csum(unsigned char * iph, unsigned int ihl)
+{
unsigned int sum, tmp1;
__asm__ __volatile__("
@@ -92,63 +99,64 @@ static inline unsigned short ip_fast_csum(unsigned char * iph,
}
/*
- * computes the checksum of the TCP/UDP pseudo-header
- * returns a 16-bit checksum, already complemented
- */
-static inline unsigned short int csum_tcpudp_magic(unsigned long saddr,
- unsigned long daddr,
- unsigned short len,
- unsigned short proto,
- unsigned int sum) {
- __asm__ __volatile__("
- adds %0, %0, %1
- adcs %0, %0, %4
- adcs %0, %0, %5
- adc %0, %0, #0
- adds %0, %0, %0, lsl #16
- addcs %0, %0, #0x10000
- mvn %0, %0
- mov %0, %0, lsr #16
- "
- : "=&r" (sum), "=&r" (saddr)
- : "0" (daddr), "1"(saddr), "r"((ntohs(len)<<16)+proto*256), "r"(sum));
- return((unsigned short)sum);
-}
-
-/*
* Fold a partial checksum without adding pseudo headers
*/
-static inline unsigned int csum_fold(unsigned int sum)
+static inline unsigned int
+csum_fold(unsigned int sum)
{
- __asm__ __volatile__("
- adds %0, %0, %0, lsl #16
- addcs %0, %0, #0x10000
- mvn %0, %0
- mov %0, %0, lsr #16
- "
+ __asm__("
+ adds %0, %0, %0, lsl #16
+ addcs %0, %0, #0x10000"
: "=r" (sum)
: "0" (sum));
+ return (~sum) >> 16;
+}
+
+static inline unsigned long
+csum_tcpudp_nofold(unsigned long saddr, unsigned long daddr, unsigned short len,
+ unsigned short proto, unsigned int sum)
+{
+ __asm__("
+ adds %0, %0, %1
+ adcs %0, %0, %2
+ adcs %0, %0, %3
+ adc %0, %0, #0"
+ : "=&r"(sum)
+ : "r" (daddr), "r" (saddr), "r" ((ntohs(len)<<16)+proto*256), "0" (sum));
return sum;
}
-
+/*
+ * computes the checksum of the TCP/UDP pseudo-header
+ * returns a 16-bit checksum, already complemented
+ */
+static inline unsigned short int
+csum_tcpudp_magic(unsigned long saddr, unsigned long daddr, unsigned short len,
+ unsigned short proto, unsigned int sum)
+{
+ return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum));
+}
+
/*
* this routine is used for miscellaneous IP-like checksums, mainly
* in icmp.c
*/
+static inline unsigned short
+ip_compute_csum(unsigned char * buff, int len)
+{
+ return csum_fold(csum_partial(buff, len, 0));
+}
-static inline unsigned short ip_compute_csum(unsigned char * buff, int len) {
- unsigned int sum;
+#define _HAVE_ARCH_IPV6_CSUM
+extern unsigned long
+__csum_ipv6_magic(struct in6_addr *saddr, struct in6_addr *daddr, __u32 len,
+ __u32 proto, unsigned int sum);
- __asm__ __volatile__("
- adds %0, %0, %0, lsl #16
- addcs %0, %0, #0x10000
- mvn %0, %0
- mov %0, %0, lsr #16
- "
- : "=r"(sum)
- : "0" (csum_partial(buff, len, 0)));
- return(sum);
+extern __inline__ unsigned short int
+csum_ipv6_magic(struct in6_addr *saddr, struct in6_addr *daddr, __u16 len,
+ unsigned short proto, unsigned int sum)
+{
+ return csum_fold(__csum_ipv6_magic(saddr, daddr, htonl((__u32)len),
+ htonl(proto), sum));
}
-
#endif
diff --git a/include/asm-arm/ecard.h b/include/asm-arm/ecard.h
index fed84980d..afc4acc14 100644
--- a/include/asm-arm/ecard.h
+++ b/include/asm-arm/ecard.h
@@ -64,6 +64,8 @@
#define MANU_EESOX 0x0064
#define PROD_EESOX_SCSI2 0x008c
+#define MANU_YELLOWSTONE 0x0096
+#define PROD_YELLOWSTONE_RAPIDE32 0x0120
#ifdef ECARD_C
#define CONST
diff --git a/include/asm-arm/elf.h b/include/asm-arm/elf.h
index 139481831..8dd37e026 100644
--- a/include/asm-arm/elf.h
+++ b/include/asm-arm/elf.h
@@ -6,6 +6,7 @@
*/
#include <asm/ptrace.h>
+#include <asm/procinfo.h>
typedef unsigned long elf_greg_t;
@@ -39,16 +40,25 @@ typedef struct { void *null; } elf_fpregset_t;
#define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3)
/* This yields a mask that user programs can use to figure out what
- instruction set this cpu supports. This could be done in userspace,
- but it's not easy, and we've already done it here. */
+ instruction set this cpu supports. */
-#define ELF_HWCAP (0)
+#define ELF_HWCAP (armidlist[armidindex].hwcap)
/* This yields a string that ld.so will use to load implementation
specific libraries for optimization. This is more specific in
intent than poking at uname or /proc/cpuinfo. */
-#define ELF_PLATFORM (NULL)
+/* For now we just provide a fairly general string that describes the
+ processor family. This could be made more specific later if someone
+ implemented optimisations that require it. 26-bit CPUs give you
+ "v1l" for ARM2 (no SWP) and "v2l" for anything else (ARM1 isn't
+ supported). 32-bit CPUs give you "v3[lb]" for anything based on an
+ ARM6 or ARM7 core and "armv4[lb]" for anything based on a StrongARM-1
+ core. */
+
+#define ELF_PLATFORM_SIZE 8
+extern char elf_platform[];
+#define ELF_PLATFORM (elf_platform)
#ifdef __KERNEL__
#define SET_PERSONALITY(ex,ibcs2) \
diff --git a/include/asm-arm/fiq.h b/include/asm-arm/fiq.h
new file mode 100644
index 000000000..2203fa2a5
--- /dev/null
+++ b/include/asm-arm/fiq.h
@@ -0,0 +1,32 @@
+/* Support for FIQ on ARM architectures.
+ * Written by Philip Blundell <philb@gnu.org>, 1998
+ */
+
+#ifndef __ASM_FIQ_H
+#define __ASM_FIQ_H
+
+struct fiq_handler {
+ const char *name;
+ int (*callback)(void);
+};
+
+extern int claim_fiq(struct fiq_handler *f);
+extern void release_fiq(struct fiq_handler *f);
+
+#endif
+/* Support for FIQ on ARM architectures.
+ * Written by Philip Blundell <philb@gnu.org>, 1998
+ */
+
+#ifndef __ASM_FIQ_H
+#define __ASM_FIQ_H
+
+struct fiq_handler {
+ const char *name;
+ int (*callback)(void);
+};
+
+extern int claim_fiq(struct fiq_handler *f);
+extern void release_fiq(struct fiq_handler *f);
+
+#endif
diff --git a/include/asm-arm/floppy.h b/include/asm-arm/floppy.h
index e753d579b..865e54035 100644
--- a/include/asm-arm/floppy.h
+++ b/include/asm-arm/floppy.h
@@ -9,7 +9,14 @@
#include <asm/arch/floppy.h>
#endif
-#define fd_outb(val,port) outb((val),(port))
+#define fd_outb(val,port) \
+ do { \
+ if ((port) == FD_DOR) \
+ fd_setdor((val)); \
+ else \
+ outb((val),(port)); \
+ } while(0)
+
#define fd_inb(port) inb((port))
#define fd_request_irq() request_irq(IRQ_FLOPPYDISK,floppy_interrupt,\
SA_INTERRUPT|SA_SAMPLE_RANDOM,"floppy",NULL)
@@ -26,6 +33,9 @@
#define fd_set_dma_addr(addr) set_dma_addr(FLOPPY_DMA, virt_to_bus((addr)))
#define fd_set_dma_count(len) set_dma_count(FLOPPY_DMA, (len))
+/* need to clean up dma.h */
+#define DMA_FLOPPYDISK DMA_FLOPPY
+
/* Floppy_selects is the list of DOR's to select drive fd
*
* On initialisation, the floppy list is scanned, and the drives allocated
@@ -39,13 +49,14 @@ static unsigned char floppy_selects[2][4] =
{ 0x10, 0x21, 0x23, 0x33 }
};
-#define fd_setdor(dor) \
-do { \
- int new_dor = (dor); \
- if (new_dor & 0xf0) \
- fd_outb((new_dor & 0x0c) | floppy_selects[fdc][new_dor & 3], FD_DOR); \
- else \
- fd_outb((new_dor & 0x0c), FD_DOR); \
+#define fd_setdor(dor) \
+do { \
+ int new_dor = (dor); \
+ if (new_dor & 0xf0) \
+ new_dor = (new_dor & 0x0c) | floppy_selects[fdc][new_dor & 3]; \
+ else \
+ new_dor &= 0x0c; \
+ outb(new_dor, FD_DOR); \
} while (0)
/*
diff --git a/include/asm-arm/hardirq.h b/include/asm-arm/hardirq.h
index bd25d1838..588c85894 100644
--- a/include/asm-arm/hardirq.h
+++ b/include/asm-arm/hardirq.h
@@ -5,6 +5,12 @@
extern unsigned int local_irq_count[NR_CPUS];
+/*
+ * Are we in an interrupt context? Either doing bottom half
+ * or hardware interrupt processing?
+ */
+#define in_interrupt() (local_irq_count[smp_processor_id()] + local_bh_count[smp_processor_id()] != 0)
+
#ifndef __SMP__
#define hardirq_trylock(cpu) (local_irq_count[cpu] == 0)
diff --git a/include/asm-arm/init.h b/include/asm-arm/init.h
index 7c1e47360..6105bbe88 100644
--- a/include/asm-arm/init.h
+++ b/include/asm-arm/init.h
@@ -1,24 +1,29 @@
#ifndef _ASMARM_INIT_H
#define _ASMARM_INIT_H
-#if 0
+#include <linux/config.h>
+
+/* C routines */
+
+#ifdef CONFIG_BINUTILS_NEW
+
#define __init __attribute__ ((__section__ (".text.init")))
-#define __initdata __attribute__ ((__section__ (".data.init")))
#define __initfunc(__arginit) \
__arginit __init; \
__arginit
-/* For assembly routines */
-#define __INIT .section ".text.init",@alloc,@execinstr
-#define __FINIT .previous
-#define __INITDATA .section ".data.init",@alloc,@write
+
#else
+
#define __init
-#define __initdata
#define __initfunc(__arginit) __arginit
-/* For assembly routines */
-#define __INIT
-#define __FINIT
-#define __INITDATA
+
#endif
+#define __initdata __attribute__ ((__section__ (".data.init")))
+
+/* Assembly routines */
+#define __INIT .section ".text.init",@alloc,@execinstr
+#define __INITDATA .section ".data.init",@alloc,@write
+#define __FINIT .previous
+
#endif
diff --git a/include/asm-arm/io.h b/include/asm-arm/io.h
index 2451663e3..09713cda9 100644
--- a/include/asm-arm/io.h
+++ b/include/asm-arm/io.h
@@ -170,44 +170,20 @@ __IO(l,"",long)
#undef ARCH_IO_DELAY
#undef ARCH_IO_CONSTANT
+#ifdef __KERNEL__
+
/*
- * Leftovers...
+ * String version of IO memory access ops:
*/
-#if 0
-#define __outwc(value,port) \
-({ \
- if (port < 256) \
- __asm__ __volatile__( \
- "strh %0, [%1, %2]" \
- : : "r" (value), "r" (PCIO_BASE), "J" (port << 2)); \
- else if (__PORT_PCIO(port)) \
- __asm__ __volatile__( \
- "strh %0, [%1, %2]" \
- : : "r" (value), "r" (PCIO_BASE), "r" (port << 2)); \
- else \
- __asm__ __volatile__( \
- "strh %0, [%1, %2]" \
- : : "r" (value), "r" (IO_BASE), "r" (port << 2)); \
-})
-
-#define __inwc(port) \
-({ \
- unsigned short result; \
- if (port < 256) \
- __asm__ __volatile__( \
- "ldrh %0, [%1, %2]" \
- : "=r" (result) : "r" (PCIO_BASE), "J" (port << 2)); \
- else \
- if (__PORT_PCIO(port)) \
- __asm__ __volatile__( \
- "ldrh %0, [%1, %2]" \
- : "=r" (result) : "r" (PCIO_BASE), "r" (port << 2)); \
- else \
- __asm__ __volatile__( \
- "ldrh %0, [%1, %2]" \
- : "=r" (result) : "r" (IO_BASE), "r" (port << 2)); \
- result; \
-})
+extern void _memcpy_fromio(void *, unsigned long, unsigned long);
+extern void _memcpy_toio(unsigned long, void *, unsigned long);
+extern void _memset_io(unsigned long, int, unsigned long);
+
+#define memcpy_fromio(to,from,len) _memcpy_fromio((to),(unsigned long)(from),(len))
+#define memcpy_toio(to,from,len) _memcpy_toio((unsigned long)(to),(from),(len))
+#define memset_io(addr,c,len) _memset_io((unsigned long)(addr),(c),(len))
+
#endif
+
#endif
diff --git a/include/asm-arm/ioctl.h b/include/asm-arm/ioctl.h
index a45e2fadc..2cbb7d0e9 100644
--- a/include/asm-arm/ioctl.h
+++ b/include/asm-arm/ioctl.h
@@ -1,5 +1,4 @@
-/* $Id: ioctl.h,v 1.5 1993/07/19 21:53:50 root Exp root $
- *
+/*
* linux/ioctl.h for Linux by H.H. Bergman.
*/
diff --git a/include/asm-arm/linux_logo.h b/include/asm-arm/linux_logo.h
new file mode 100644
index 000000000..b10646254
--- /dev/null
+++ b/include/asm-arm/linux_logo.h
@@ -0,0 +1,27 @@
+/*
+ * linux/include/asm-arm/linux_logo.h
+ *
+ * Copyright (C) 1998 Russell King
+ *
+ * Linux console driver logo definitions for ARM
+ */
+
+#include <linux/init.h>
+#include <linux/version.h>
+
+#define linux_logo_banner "ARM Linux version " UTS_RELEASE
+
+#define LINUX_LOGO_COLORS 0
+
+unsigned char linux_logo_red[] __initdata = { };
+unsigned char linux_logo_green[] __initdata = { };
+unsigned char linux_logo_blue[] __initdata = { };
+
+unsigned char linux_logo16_red[] __initdata = { };
+unsigned char linux_logo16_green[] __initdata = { };
+unsigned char linux_logo16_blue[] __initdata = { };
+
+unsigned char linux_logo[] __initdata = { };
+unsigned char linux_logo16[] __initdata = { };
+unsigned char linux_logo_bw[] __initdata = { };
+
diff --git a/include/asm-arm/namei.h b/include/asm-arm/namei.h
index 5270c3bdc..8fcd2f5cd 100644
--- a/include/asm-arm/namei.h
+++ b/include/asm-arm/namei.h
@@ -1,4 +1,4 @@
-/* $Id: namei.h,v 1.1 1996/12/13 14:48:21 jj Exp $
+/*
* linux/include/asm-i386/namei.h
*
* Included from linux/fs/namei.c
diff --git a/include/asm-arm/page.h b/include/asm-arm/page.h
index 9a4429eb9..810aa479e 100644
--- a/include/asm-arm/page.h
+++ b/include/asm-arm/page.h
@@ -6,6 +6,8 @@
#ifdef __KERNEL__
+#define get_user_page(vaddr) __get_free_page(GFP_KERNEL)
+#define free_user_page(page, addr) free_page(addr)
#define clear_page(page) memzero((void *)(page), PAGE_SIZE)
#define copy_page(to,from) memcpy((void *)(to), (void *)(from), PAGE_SIZE)
diff --git a/include/asm-arm/pgtable.h b/include/asm-arm/pgtable.h
index 4f9e5ba4a..c447459a0 100644
--- a/include/asm-arm/pgtable.h
+++ b/include/asm-arm/pgtable.h
@@ -7,4 +7,6 @@
#define module_map vmalloc
#define module_unmap vfree
+extern int do_check_pgt_cache(int, int);
+
#endif /* _ASMARM_PGTABLE_H */
diff --git a/include/asm-arm/posix_types.h b/include/asm-arm/posix_types.h
index e32c78139..cff51a289 100644
--- a/include/asm-arm/posix_types.h
+++ b/include/asm-arm/posix_types.h
@@ -9,51 +9,61 @@
#ifndef __ARCH_ARM_POSIX_TYPES_H
#define __ARCH_ARM_POSIX_TYPES_H
+#include <linux/config.h>
+
/*
* This file is generally used by user-level software, so you need to
* be a little careful about namespace pollution etc. Also, we cannot
* assume GCC is being used.
*/
-typedef unsigned short __kernel_dev_t;
-typedef unsigned long __kernel_ino_t;
-typedef unsigned short __kernel_mode_t;
-typedef unsigned short __kernel_nlink_t;
-typedef long __kernel_off_t;
-typedef int __kernel_pid_t;
-typedef unsigned short __kernel_ipc_pid_t;
-typedef unsigned short __kernel_uid_t;
-typedef unsigned short __kernel_gid_t;
-typedef unsigned int __kernel_size_t;
-typedef int __kernel_ssize_t;
-typedef int __kernel_ptrdiff_t;
-typedef long __kernel_time_t;
-typedef long __kernel_suseconds_t;
-typedef long __kernel_clock_t;
-typedef int __kernel_daddr_t;
-typedef char * __kernel_caddr_t;
+typedef unsigned short __kernel_dev_t;
+typedef unsigned long __kernel_ino_t;
+typedef unsigned short __kernel_mode_t;
+typedef unsigned short __kernel_nlink_t;
+typedef long __kernel_off_t;
+typedef int __kernel_pid_t;
+typedef unsigned short __kernel_ipc_pid_t;
+typedef unsigned short __kernel_uid_t;
+typedef unsigned short __kernel_gid_t;
+#ifdef CONFIG_BINUTILS_NEW
+typedef long unsigned int __kernel_size_t;
+#else
+typedef unsigned int __kernel_size_t;
+#endif
+typedef int __kernel_ssize_t;
+typedef int __kernel_ptrdiff_t;
+typedef long __kernel_time_t;
+typedef long __kernel_suseconds_t;
+typedef long __kernel_clock_t;
+typedef int __kernel_daddr_t;
+typedef char * __kernel_caddr_t;
#ifdef __GNUC__
-typedef long long __kernel_loff_t;
+typedef long long __kernel_loff_t;
#endif
typedef struct {
+#if defined(__KERNEL__) || defined(__USE_ALL)
int val[2];
+#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */
+ int __val[2];
+#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
} __kernel_fsid_t;
-#undef __FD_SET
+#undef __FD_SET
#define __FD_SET(fd, fdsetp) \
(((fd_set *)fdsetp)->fds_bits[fd >> 5] |= (1<<(fd & 31)))
-#undef __FD_CLR
+#undef __FD_CLR
#define __FD_CLR(fd, fdsetp) \
(((fd_set *)fdsetp)->fds_bits[fd >> 5] &= ~(1<<(fd & 31)))
-#undef __FD_ISSET
+#undef __FD_ISSET
#define __FD_ISSET(fd, fdsetp) \
((((fd_set *)fdsetp)->fds_bits[fd >> 5] & (1<<(fd & 31))) != 0)
-#undef __FD_ZERO
+#undef __FD_ZERO
#define __FD_ZERO(fdsetp) \
(memset (fdsetp, 0, sizeof (*(fd_set *)fdsetp)))
diff --git a/include/asm-arm/proc-armo/mm-init.h b/include/asm-arm/proc-armo/mm-init.h
index 2cf40e9da..ba4db9e82 100644
--- a/include/asm-arm/proc-armo/mm-init.h
+++ b/include/asm-arm/proc-armo/mm-init.h
@@ -8,8 +8,8 @@
* some more work to get it to fit into our separate processor and
* architecture structure.
*/
-
-static unsigned long phys_screen_end;
+extern unsigned long phys_screen_end;
+extern unsigned long map_screen_mem(unsigned long log_start, unsigned long kmem, int update);
int page_nr;
#define setup_processor_functions()
@@ -20,76 +20,6 @@ static inline void setup_swapper_dir (int index, pte_t *ptep)
set_pmd (pmd_offset (swapper_pg_dir + index, 0), mk_pmd (ptep));
}
-/*
- * This routine needs more work to make it dynamically release/allocate mem!
- */
-unsigned long map_screen_mem(unsigned long log_start, unsigned long kmem, int update)
-{
- static int updated = 0;
-
- if (updated)
- return 0;
-
- updated = update;
-
- if (update) {
- unsigned long address = log_start, offset;
- pgd_t *pgdp;
-
- kmem = (kmem + 3) & ~3;
-
- pgdp = pgd_offset (&init_mm, address); /* +31 */
- offset = SCREEN_START;
- while (address < SCREEN1_END) {
- unsigned long addr_pmd, end_pmd;
- pmd_t *pmdp;
-
- /* if (pgd_none (*pgdp)) alloc pmd */
- pmdp = pmd_offset (pgdp, address); /* +0 */
- addr_pmd = address & ~PGDIR_MASK; /* 088000 */
- end_pmd = addr_pmd + SCREEN1_END - address; /* 100000 */
- if (end_pmd > PGDIR_SIZE)
- end_pmd = PGDIR_SIZE;
-
- do {
- unsigned long addr_pte, end_pte;
- pte_t *ptep;
-
- if (pmd_none (*pmdp)) {
- pte_t *new_pte = (pte_t *)kmem;
- kmem += PTRS_PER_PTE * BYTES_PER_PTR;
- memzero (new_pte, PTRS_PER_PTE * BYTES_PER_PTR);
- set_pmd (pmdp, mk_pmd(new_pte));
- }
-
- ptep = pte_offset (pmdp, addr_pmd); /* +11 */
- addr_pte = addr_pmd & ~PMD_MASK; /* 088000 */
- end_pte = addr_pte + end_pmd - addr_pmd; /* 100000 */
- if (end_pte > PMD_SIZE)
- end_pte = PMD_SIZE;
-
- do {
- set_pte (ptep, mk_pte(offset, PAGE_KERNEL));
- addr_pte += PAGE_SIZE;
- offset += PAGE_SIZE;
- ptep++;
- } while (addr_pte < end_pte);
-
- pmdp++;
- addr_pmd = (addr_pmd + PMD_SIZE) & PMD_MASK;
- } while (addr_pmd < end_pmd);
-
- address = (address + PGDIR_SIZE) & PGDIR_MASK;
- pgdp ++;
- }
-
- phys_screen_end = offset;
- flush_tlb_all ();
- update_mm_cache_all ();
- }
- return kmem;
-}
-
static inline unsigned long setup_pagetables(unsigned long start_mem, unsigned long end_mem)
{
unsigned int i;
diff --git a/include/asm-arm/proc-armo/page.h b/include/asm-arm/proc-armo/page.h
index 058d7e9bd..0e2b4501c 100644
--- a/include/asm-arm/proc-armo/page.h
+++ b/include/asm-arm/proc-armo/page.h
@@ -7,8 +7,16 @@
#ifndef __ASM_PROC_PAGE_H
#define __ASM_PROC_PAGE_H
-/* PAGE_SHIFT determines the page size */
-#define PAGE_SHIFT 15
+#include <linux/config.h>
+
+/* PAGE_SHIFT determines the page size. This is configurable. */
+#if defined(CONFIG_PAGESIZE_8)
+#define PAGE_SHIFT 13 /* 8K */
+#elif defined(CONFIG_PAGESIZE_16)
+#define PAGE_SHIFT 14 /* 16K */
+#else /* default */
+#define PAGE_SHIFT 15 /* 32K */
+#endif
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))
diff --git a/include/asm-arm/proc-armo/pgtable.h b/include/asm-arm/proc-armo/pgtable.h
index 1f27878ef..ef732f784 100644
--- a/include/asm-arm/proc-armo/pgtable.h
+++ b/include/asm-arm/proc-armo/pgtable.h
@@ -41,7 +41,7 @@
/*
* We have a mem map cache...
*/
-extern __inline__ void update_mm_cache_all(void)
+extern __inline__ void update_memc_all(void)
{
struct task_struct *p;
@@ -54,7 +54,7 @@ extern __inline__ void update_mm_cache_all(void)
processor.u.armv2._remap_memc (current);
}
-extern __inline__ void update_mm_cache_task(struct task_struct *tsk)
+extern __inline__ void update_memc_task(struct task_struct *tsk)
{
processor.u.armv2._update_map(tsk);
@@ -62,7 +62,7 @@ extern __inline__ void update_mm_cache_task(struct task_struct *tsk)
processor.u.armv2._remap_memc (tsk);
}
-extern __inline__ void update_mm_cache_mm(struct mm_struct *mm)
+extern __inline__ void update_memc_mm(struct mm_struct *mm)
{
struct task_struct *p;
@@ -77,7 +77,7 @@ extern __inline__ void update_mm_cache_mm(struct mm_struct *mm)
processor.u.armv2._remap_memc (current);
}
-extern __inline__ void update_mm_cache_mm_addr(struct mm_struct *mm, unsigned long addr, pte_t pte)
+extern __inline__ void update_memc_addr(struct mm_struct *mm, unsigned long addr, pte_t pte)
{
struct task_struct *p;
@@ -117,7 +117,7 @@ extern __inline__ void update_mm_cache_mm_addr(struct mm_struct *mm, unsigned lo
#define PTRS_PER_PTE 32
#define PTRS_PER_PMD 1
#define PTRS_PER_PGD 32
-#define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SHIFT)
+#define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE)
/* Just any arbitrary offset to the start of the vmalloc VM area: the
* current 8MB value just means that there will be a 8MB "hole" after the
@@ -407,7 +407,8 @@ extern __inline__ void free_pmd_slow(pmd_t *pmd)
{
}
-extern void __bad_pte(pmd_t *pmd);
+extern void __bad_pmd(pmd_t *pmd);
+extern void __bad_pmd_kernel(pmd_t *pmd);
#define pte_free_kernel(pte) free_pte_fast(pte)
#define pte_free(pte) free_pte_fast(pte)
@@ -427,7 +428,7 @@ extern __inline__ pte_t *pte_alloc(pmd_t * pmd, unsigned long address)
return page + address;
}
if (pmd_bad (*pmd)) {
- __bad_pte(pmd);
+ __bad_pmd(pmd);
return NULL;
}
return (pte_t *) pmd_page(*pmd) + address;
@@ -463,7 +464,7 @@ extern __inline__ void set_pgdir(unsigned long address, pgd_t entry)
}
read_unlock(&tasklist_lock);
for (pgd = (pgd_t *)pgd_quicklist; pgd; pgd = (pgd_t *)*(unsigned long *)pgd)
- pgd[address >> PGDIR_SHIFT)] = entry;
+ pgd[address >> PGDIR_SHIFT] = entry;
}
extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
diff --git a/include/asm-arm/proc-armo/uaccess.h b/include/asm-arm/proc-armo/uaccess.h
index 8d5745aed..1a6b950ed 100644
--- a/include/asm-arm/proc-armo/uaccess.h
+++ b/include/asm-arm/proc-armo/uaccess.h
@@ -33,7 +33,7 @@ extern __inline__ void set_fs (mm_segment_t fs)
#define __range_ok(addr,size) ({ \
unsigned long flag, sum; \
- __asm__ __volatile__("adds %1, %2, %3; cmpls %1, %0; movls %0, #0" \
+ __asm__ __volatile__("subs %1, %0, %3; cmpcs %1, %2; movcs %0, #0" \
: "=&r" (flag), "=&r" (sum) \
: "r" (addr), "Ir" (size), "0" (current->addr_limit) \
: "cc"); \
diff --git a/include/asm-arm/proc-armv/mm-init.h b/include/asm-arm/proc-armv/mm-init.h
index 287779258..2e861b213 100644
--- a/include/asm-arm/proc-armv/mm-init.h
+++ b/include/asm-arm/proc-armv/mm-init.h
@@ -48,12 +48,13 @@ static inline void
alloc_init_section(unsigned long *mem, unsigned long virt, unsigned long phys, int domain, int prot)
{
pgd_t *pgdp;
- pmd_t *pmdp;
+ pmd_t *pmdp, pmd;
pgdp = pgd_offset_k(virt);
pmdp = pmd_offset(pgdp, virt);
- pmd_val(*pmdp) = phys | PMD_TYPE_SECT | PMD_DOMAIN(domain) | prot;
+ pmd_val(pmd) = phys | PMD_TYPE_SECT | PMD_DOMAIN(domain) | prot;
+ set_pmd(pmdp, pmd);
}
/*
@@ -78,7 +79,7 @@ static inline void
alloc_init_page(unsigned long *mem, unsigned long virt, unsigned long phys, int domain, int prot)
{
pgd_t *pgdp;
- pmd_t *pmdp;
+ pmd_t *pmdp, pmd;
pte_t *ptep;
pgdp = pgd_offset_k(virt);
@@ -92,7 +93,8 @@ alloc_init_page(unsigned long *mem, unsigned long virt, unsigned long phys, int
ptep = (pte_t *)memory;
memzero(ptep, PTE_SIZE);
- pmd_val(*pmdp) = __virt_to_phys(memory) | PMD_TYPE_TABLE | PMD_DOMAIN(domain);
+ pmd_val(pmd) = __virt_to_phys(memory) | PMD_TYPE_TABLE | PMD_DOMAIN(domain);
+ set_pmd(pmdp, pmd);
*mem = memory + PTE_SIZE;
}
diff --git a/include/asm-arm/proc-armv/pgtable.h b/include/asm-arm/proc-armv/pgtable.h
index 288e4043a..60b670fc2 100644
--- a/include/asm-arm/proc-armv/pgtable.h
+++ b/include/asm-arm/proc-armv/pgtable.h
@@ -45,12 +45,12 @@
processor.u.armv3v4._flush_icache_area((_start), (_end))
/*
- * We don't have a mem map cache...
+ * We don't have a MEMC chip...
*/
-#define update_mm_cache_all() do { } while (0)
-#define update_mm_cache_task(tsk) do { } while (0)
-#define update_mm_cache_mm(mm) do { } while (0)
-#define update_mm_cache_mm_addr(mm,addr,pte) do { } while (0)
+#define update_memc_all() do { } while (0)
+#define update_memc_task(tsk) do { } while (0)
+#define update_memc_mm(mm) do { } while (0)
+#define update_memc_addr(mm,addr,pte) do { } while (0)
/*
* This flushes back any buffered write data. We have to clean and flush the entries
@@ -133,7 +133,7 @@
#define PTRS_PER_PTE 256
#define PTRS_PER_PMD 1
#define PTRS_PER_PGD 4096
-#define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE)
+#define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE)
/* Just any arbitrary offset to the start of the vmalloc VM area: the
* current 8MB value just means that there will be a 8MB "hole" after the
@@ -178,23 +178,22 @@
/*
* We define the bits in the page tables as follows:
- * PTE_BUFFERABLE page is writable
- * PTE_AP_WRITE page is dirty
+ * PTE_BUFFERABLE page is dirty
+ * PTE_AP_WRITE page is writable
* PTE_AP_READ page is a young (unsetting this causes faults for any access)
+ * PTE_CACHEABLE page is readable
*
- * Any page that is mapped in is assumed to be readable...
+ * A page will not be made writable without the dirty bit set.
+ * It is not legal to have a writable non-dirty page though (it breaks).
+ *
+ * A readable page is marked as being cacheable.
+ * Youngness is indicated by hardware read. If the page is old,
+ * then we will fault and make the page young again.
*/
-#if 0
#define _PTE_YOUNG PTE_AP_READ
-#define _PTE_DIRTY PTE_AP_WRITE
-#define _PTE_READ PTE_CACHEABLE
-#define _PTE_WRITE PTE_BUFFERABLE
-#else
-#define _PTE_YOUNG PTE_CACHEABLE
#define _PTE_DIRTY PTE_BUFFERABLE
-#define _PTE_READ PTE_AP_READ
+#define _PTE_READ PTE_CACHEABLE
#define _PTE_WRITE PTE_AP_WRITE
-#endif
#define PAGE_NONE __pgprot(PTE_TYPE_SMALL | _PTE_YOUNG)
#define PAGE_SHARED __pgprot(PTE_TYPE_SMALL | _PTE_YOUNG | _PTE_READ | _PTE_WRITE)
@@ -351,7 +350,7 @@ extern __inline__ int pmd_present(pmd_t pmd)
extern __inline__ int pte_write(pte_t pte)
{
- return pte_val(pte) & PTE_AP_WRITE;
+ return pte_val(pte) & _PTE_WRITE;
}
extern __inline__ int pte_dirty(pte_t pte)
@@ -366,7 +365,7 @@ extern __inline__ int pte_young(pte_t pte)
extern __inline__ pte_t pte_wrprotect(pte_t pte)
{
- pte_val(pte) &= ~PTE_AP_WRITE;
+ pte_val(pte) &= ~_PTE_WRITE;
return pte;
}
@@ -378,31 +377,31 @@ extern __inline__ pte_t pte_nocache(pte_t pte)
extern __inline__ pte_t pte_mkclean(pte_t pte)
{
- pte_val(pte) &= ~PTE_BUFFERABLE;
+ pte_val(pte) &= ~_PTE_DIRTY;
return pte;
}
extern __inline__ pte_t pte_mkold(pte_t pte)
{
- pte_val(pte) &= ~PTE_AP_READ;
+ pte_val(pte) &= ~_PTE_YOUNG;
return pte;
}
extern __inline__ pte_t pte_mkwrite(pte_t pte)
{
- pte_val(pte) |= PTE_AP_WRITE;
+ pte_val(pte) |= _PTE_WRITE;
return pte;
}
extern __inline__ pte_t pte_mkdirty(pte_t pte)
{
- pte_val(pte) |= PTE_BUFFERABLE;
+ pte_val(pte) |= _PTE_DIRTY;
return pte;
}
extern __inline__ pte_t pte_mkyoung(pte_t pte)
{
- pte_val(pte) |= PTE_AP_READ;
+ pte_val(pte) |= _PTE_YOUNG;
return pte;
}
@@ -671,7 +670,6 @@ extern __inline__ pmd_t *pmd_alloc(pgd_t *pgd, unsigned long address)
#define pmd_free_kernel pmd_free
#define pmd_alloc_kernel pmd_alloc
-#if 0
extern __inline__ void set_pgdir(unsigned long address, pgd_t entry)
{
struct task_struct * p;
@@ -687,7 +685,6 @@ extern __inline__ void set_pgdir(unsigned long address, pgd_t entry)
for (pgd = (pgd_t *)pgd_quicklist; pgd; pgd = (pgd_t *)*(unsigned long *)pgd)
pgd[address >> PGDIR_SHIFT] = entry;
}
-#endif
extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
diff --git a/include/asm-arm/processor.h b/include/asm-arm/processor.h
index a75d4a960..d12829171 100644
--- a/include/asm-arm/processor.h
+++ b/include/asm-arm/processor.h
@@ -42,9 +42,19 @@ struct thread_struct { \
EXTRA_THREAD_STRUCT_INIT \
}
+/* Forward declaration, a strange C thing */
+struct mm_struct;
+
/* Free all resources held by a thread. */
extern void release_thread(struct task_struct *);
+/* Copy and release all segment info associated with a VM */
+extern void copy_segments(int nr, struct task_struct *p, struct mm_struct * mm);
+extern void release_segments(struct mm_struct * mm);
+
+#define copy_segments(nr, tsk, mm) do { } while (0)
+#define release_segments(mm) do { } while (0)
+
#define init_task (init_task_union.task)
#define init_stack (init_task_union.stack)
diff --git a/include/asm-arm/procinfo.h b/include/asm-arm/procinfo.h
index 0d8811624..a89b7509f 100644
--- a/include/asm-arm/procinfo.h
+++ b/include/asm-arm/procinfo.h
@@ -9,23 +9,25 @@
#include <asm/proc-fns.h>
-#define F_MEMC (1<<0)
-#define F_MMU (1<<1)
-#define F_32BIT (1<<2)
-#define F_CACHE (1<<3)
-#define F_IOEB (1<<31)
-
#ifndef __ASSEMBLER__
+#define HWCAP_SWP (1 << 0)
+#define HWCAP_HALF (1 << 1)
+
struct armversions {
- unsigned long id;
- unsigned long mask;
- unsigned long features;
- const char *manu;
- const char *name;
- const struct processor *proc;
+ const unsigned long id; /* Processor ID */
+ const unsigned long mask; /* Processor ID mask */
+ const char *manu; /* Manufacturer */
+ const char *name; /* Processor name */
+ const char *arch_vsn; /* Architecture version */
+ const char *elf_vsn; /* ELF library version */
+ const int hwcap; /* ELF HWCAP */
+ const struct processor *proc; /* Processor-specific ASM */
};
+extern const struct armversions armidlist[];
+extern int armidindex;
+
#endif
#endif
diff --git a/include/asm-arm/siginfo.h b/include/asm-arm/siginfo.h
index b987a12eb..bcec2810f 100644
--- a/include/asm-arm/siginfo.h
+++ b/include/asm-arm/siginfo.h
@@ -43,6 +43,7 @@ typedef struct siginfo {
/* SIGCHLD */
struct {
pid_t _pid; /* which child */
+ uid_t _uid; /* sender's uid */
int _status; /* exit code */
clock_t _utime;
clock_t _stime;
diff --git a/include/asm-arm/signal.h b/include/asm-arm/signal.h
index 6303537f6..d171f77bf 100644
--- a/include/asm-arm/signal.h
+++ b/include/asm-arm/signal.h
@@ -6,6 +6,7 @@
/* Avoid too many header ordering problems. */
struct siginfo;
+#ifdef __KERNEL__
/* Most things should be clean enough to redefine this at will, if care
is taken to make libc match. */
@@ -19,6 +20,14 @@ typedef struct {
unsigned long sig[_NSIG_WORDS];
} sigset_t;
+#else
+/* Here we must cater to lics that poke about in kernel headers. */
+
+#define NSIG 32
+typedef unsigned long sigset_t;
+
+#endif /* __KERNEL__ */
+
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
@@ -88,6 +97,15 @@ typedef struct {
#define SA_RESTORER 0x04000000
+/*
+ * sigaltstack controls
+ */
+#define SS_ONSTACK 1
+#define SS_DISABLE 2
+
+#define MINSIGSTKSZ 2048
+#define SIGSTKSZ 8192
+
#ifdef __KERNEL__
/*
diff --git a/include/asm-arm/smp.h b/include/asm-arm/smp.h
index adcc91c05..9776bf66d 100644
--- a/include/asm-arm/smp.h
+++ b/include/asm-arm/smp.h
@@ -3,10 +3,6 @@
#ifdef __SMP__
#error SMP not supported
-#else
-
-#define cpu_logical_map(cpu) (cpu)
-
#endif
#endif
diff --git a/include/asm-arm/smp_lock.h b/include/asm-arm/smp_lock.h
deleted file mode 100644
index 2d024ed57..000000000
--- a/include/asm-arm/smp_lock.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef __I386_SMPLOCK_H
-#define __I386_SMPLOCK_H
-
-#define __STR(x) #x
-
-#ifndef __SMP__
-
-#define lock_kernel() do { } while(0)
-#define unlock_kernel() do { } while(0)
-#define release_kernel_lock(task, cpu, depth) ((depth) = 1)
-#define reacquire_kernel_lock(task, cpu, depth) do { } while(0)
-
-#else
-#error SMP not supported
-#endif /* __SMP__ */
-
-#endif /* __I386_SMPLOCK_H */
diff --git a/include/asm-arm/smplock.h b/include/asm-arm/smplock.h
new file mode 100644
index 000000000..e62326a10
--- /dev/null
+++ b/include/asm-arm/smplock.h
@@ -0,0 +1,49 @@
+/*
+ * <asm/smplock.h>
+ *
+ * Default SMP lock implementation
+ */
+#include <linux/interrupt.h>
+#include <asm/spinlock.h>
+
+extern spinlock_t kernel_flag;
+
+/*
+ * Release global kernel lock and global interrupt lock
+ */
+#define release_kernel_lock(task, cpu) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_unlock(&kernel_flag); \
+ release_irqlock(cpu); \
+ __sti(); \
+} while (0)
+
+/*
+ * Re-acquire the kernel lock
+ */
+#define reacquire_kernel_lock(task) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_lock(&kernel_flag); \
+} while (0)
+
+
+/*
+ * Getting the big kernel lock.
+ *
+ * This cannot happen asynchronously,
+ * so we only need to worry about other
+ * CPU's.
+ */
+extern __inline__ void lock_kernel(void)
+{
+ if (!++current->lock_depth)
+ spin_lock(&kernel_flag);
+}
+
+extern __inline__ void unlock_kernel(void)
+{
+ if (--current->lock_depth < 0)
+ spin_unlock(&kernel_flag);
+}
diff --git a/include/asm-arm/spinlock.h b/include/asm-arm/spinlock.h
index 376179b96..a952afe52 100644
--- a/include/asm-arm/spinlock.h
+++ b/include/asm-arm/spinlock.h
@@ -18,7 +18,7 @@ typedef struct { } spinlock_t;
#define spin_unlock_irq(lock) sti()
#define spin_lock_irqsave(lock, flags) \
- do { save_flags(flags); cli(); } while (0)
+ do { __save_flags_cli(flags); } while (0)
#define spin_unlock_irqrestore(lock, flags) \
restore_flags(flags)
@@ -45,11 +45,11 @@ typedef struct { } rwlock_t;
#define write_unlock_irq(lock) sti()
#define read_lock_irqsave(lock, flags) \
- do { save_flags(flags); cli(); } while (0)
+ do { __save_flags_cli(flags); } while (0)
#define read_unlock_irqrestore(lock, flags) \
restore_flags(flags)
#define write_lock_irqsave(lock, flags) \
- do { save_flags(flags); cli(); } while (0)
+ do { __save_flags_cli(flags); } while (0)
#define write_unlock_irqrestore(lock, flags) \
restore_flags(flags)
diff --git a/include/asm-arm/stat.h b/include/asm-arm/stat.h
index 924fabca8..76c20e28f 100644
--- a/include/asm-arm/stat.h
+++ b/include/asm-arm/stat.h
@@ -38,40 +38,4 @@ struct stat {
unsigned long __unused5;
};
-typedef struct {
- unsigned int minor;
- unsigned int major;
-} __new_dev_t;
-
-struct stat64 {
- __new_dev_t st_dev;
- __u64 st_ino;
- unsigned int st_mode;
- unsigned int st_nlink;
- unsigned int st_uid;
- unsigned int st_gid;
- __new_dev_t st_rdev;
- __s64 st_size;
- __u64 st_blocks;
- unsigned long st_atime;
- unsigned long __unused1;
- unsigned long st_mtime;
- unsigned long __unused2;
- unsigned long st_ctime;
- unsigned long __unused3;
- unsigned long st_blksize;
- unsigned long __unused4;
-};
-
-#define __XSTAT_VER_1 1
-#define __XSTAT_VER_2 2
-#define __XSTAT_VER_MASK 0xff
-
-#define __XSTAT_VER_XSTAT 0x000
-#define __XSTAT_VER_LXSTAT 0x100
-#define __XSTAT_VER_FXSTAT 0x200
-#define __XSTAT_VER_TYPEMASK 0xff00
-
-#define __XMKNOD_VER_1 1
-
#endif
diff --git a/include/asm-arm/system.h b/include/asm-arm/system.h
index 2ad6a16cd..88148d4cd 100644
--- a/include/asm-arm/system.h
+++ b/include/asm-arm/system.h
@@ -29,5 +29,7 @@ extern void arm_invalidptr(const char *, int);
#define mb() __asm__ __volatile__ ("" : : : "memory")
#define nop() __asm__ __volatile__("mov r0,r0\n\t");
+extern asmlinkage void __backtrace(void);
+
#endif
diff --git a/include/asm-generic/bitops.h b/include/asm-generic/bitops.h
index 130619840..0ae108653 100644
--- a/include/asm-generic/bitops.h
+++ b/include/asm-generic/bitops.h
@@ -50,4 +50,26 @@ extern __inline__ int test_bit(int nr, int * addr)
mask = 1 << (nr & 0x1f);
return ((mask & *addr) != 0);
}
+
+#ifdef __KERNEL__
+
+/*
+ * ffs: find first bit set. This is defined the same way as
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+
+#define ffs(x) generic_ffs(x)
+
+/*
+ * hweightN: returns the hamming weight (i.e. the number
+ * of bits set) of a N-bit word
+ */
+
+#define hweight32(x) generic_hweight32(x)
+#define hweight16(x) generic_hweight16(x)
+#define hweight8(x) generic_hweight8(x)
+
+#endif /* __KERNEL__ */
+
#endif /* _ASM_GENERIC_BITOPS_H */
diff --git a/include/asm-generic/smplock.h b/include/asm-generic/smplock.h
new file mode 100644
index 000000000..e62326a10
--- /dev/null
+++ b/include/asm-generic/smplock.h
@@ -0,0 +1,49 @@
+/*
+ * <asm/smplock.h>
+ *
+ * Default SMP lock implementation
+ */
+#include <linux/interrupt.h>
+#include <asm/spinlock.h>
+
+extern spinlock_t kernel_flag;
+
+/*
+ * Release global kernel lock and global interrupt lock
+ */
+#define release_kernel_lock(task, cpu) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_unlock(&kernel_flag); \
+ release_irqlock(cpu); \
+ __sti(); \
+} while (0)
+
+/*
+ * Re-acquire the kernel lock
+ */
+#define reacquire_kernel_lock(task) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_lock(&kernel_flag); \
+} while (0)
+
+
+/*
+ * Getting the big kernel lock.
+ *
+ * This cannot happen asynchronously,
+ * so we only need to worry about other
+ * CPU's.
+ */
+extern __inline__ void lock_kernel(void)
+{
+ if (!++current->lock_depth)
+ spin_lock(&kernel_flag);
+}
+
+extern __inline__ void unlock_kernel(void)
+{
+ if (--current->lock_depth < 0)
+ spin_unlock(&kernel_flag);
+}
diff --git a/include/asm-i386/bitops.h b/include/asm-i386/bitops.h
index 3b31d4f57..00dd9dcc8 100644
--- a/include/asm-i386/bitops.h
+++ b/include/asm-i386/bitops.h
@@ -189,6 +189,36 @@ extern __inline__ unsigned long ffz(unsigned long word)
#ifdef __KERNEL__
+/*
+ * ffs: find first bit set. This is defined the same way as
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+
+extern __inline__ int ffs(int x)
+{
+ int r;
+
+ __asm__("bsfl %1,%0\n\t"
+ "jnz 1f\n\t"
+ "movl $-1,%0\n"
+ "1:" : "=r" (r) : "g" (x));
+ return r+1;
+}
+
+/*
+ * hweightN: returns the hamming weight (i.e. the number
+ * of bits set) of a N-bit word
+ */
+
+#define hweight32(x) generic_hweight32(x)
+#define hweight16(x) generic_hweight16(x)
+#define hweight8(x) generic_hweight8(x)
+
+#endif /* __KERNEL__ */
+
+#ifdef __KERNEL__
+
#define ext2_set_bit test_and_set_bit
#define ext2_clear_bit test_and_clear_bit
#define ext2_test_bit test_bit
diff --git a/include/asm-i386/bugs.h b/include/asm-i386/bugs.h
index af144354f..ba3a969ae 100644
--- a/include/asm-i386/bugs.h
+++ b/include/asm-i386/bugs.h
@@ -2,6 +2,11 @@
* include/asm-i386/bugs.h
*
* Copyright (C) 1994 Linus Torvalds
+ *
+ * Cyrix stuff, June 1998 by:
+ * - Rafael R. Reilova (moved everything from head.S),
+ * - Channing Corn (tests & fixes),
+ * - Andrew D. Balsa (code cleanup).
*/
/*
@@ -14,10 +19,6 @@
#include <linux/config.h>
#include <asm/processor.h>
-#ifdef CONFIG_MTRR
-# include <asm/mtrr.h>
-#endif
-
#define CONFIG_BUGi386
__initfunc(static void no_halt(char *s, int *ints))
@@ -41,7 +42,7 @@ __initfunc(static void copro_timeout(void))
timer_table[COPRO_TIMER].expires = jiffies+100;
timer_active |= 1<<COPRO_TIMER;
printk(KERN_ERR "387 failed: trying to reset\n");
- send_sig(SIGFPE, last_task_used_math, 1);
+ send_sig(SIGFPE, current, 1);
outb_p(0,0xf1);
outb_p(0,0xf0);
}
@@ -83,7 +84,7 @@ __initfunc(static void check_fpu(void))
if (fpu_error)
return;
if (!ignore_irq13) {
- printk("Ok, fpu using old IRQ13 error reporting\n");
+ printk("OK, FPU using old IRQ 13 error reporting\n");
return;
}
__asm__("fninit\n\t"
@@ -98,9 +99,9 @@ __initfunc(static void check_fpu(void))
: "=m" (*&boot_cpu_data.fdiv_bug)
: "m" (*&x), "m" (*&y));
if (!boot_cpu_data.fdiv_bug)
- printk("Ok, fpu using exception 16 error reporting.\n");
+ printk("OK, FPU using exception 16 error reporting.\n");
else
- printk("Hmm, fpu using exception 16 error reporting with FDIV bug.\n");
+ printk("Hmm, FPU using exception 16 error reporting with FDIV bug.\n");
}
__initfunc(static void check_hlt(void))
@@ -111,7 +112,7 @@ __initfunc(static void check_hlt(void))
return;
}
__asm__ __volatile__("hlt ; hlt ; hlt ; hlt");
- printk("Ok.\n");
+ printk("OK.\n");
}
__initfunc(static void check_tlb(void))
@@ -145,9 +146,9 @@ __initfunc(static void check_popad(void))
: "=eax" (res)
: "edx" (inp)
: "eax", "ecx", "edx", "edi" );
- /* If this fails, it means that any user program may lock CPU hard. Too bad. */
+ /* If this fails, it means that any user program may lock the CPU hard. Too bad. */
if (res != 12345678) printk( "Buggy.\n" );
- else printk( "Ok.\n" );
+ else printk( "OK.\n" );
#endif
}
@@ -156,7 +157,7 @@ __initfunc(static void check_popad(void))
* misexecution of code under Linux. Owners of such processors should
* contact AMD for precise details and a CPU swap.
*
- * See http://www.chorus.com/~poulot/k6bug.html
+ * See http://www.mygale.com/~poulot/k6bug.html
* http://www.amd.com/K6/k6docs/revgd.html
*
* The following test is erm.. interesting. AMD neglected to up
@@ -202,7 +203,7 @@ __initfunc(static void check_amd_k6(void))
printk("system stability may be impaired when more than 32 MB are used.\n");
else
printk("probably OK (after B9730xxxx).\n");
- printk(KERN_INFO "Please see http://www.chorus.com/poulot/k6bug.html\n");
+ printk(KERN_INFO "Please see http://www.mygale.com/~poulot/k6bug.html\n");
}
}
@@ -226,13 +227,102 @@ __initfunc(static void check_pentium_f00f(void))
}
}
+/*
+ * Perform the Cyrix 5/2 test. A Cyrix won't change
+ * the flags, while other 486 chips will.
+ */
+
+static inline int test_cyrix_52div(void)
+{
+ unsigned int test;
+
+ __asm__ __volatile__(
+ "sahf\n\t" /* clear flags (%eax = 0x0005) */
+ "div %b2\n\t" /* divide 5 by 2 */
+ "lahf" /* store flags into %ah */
+ : "=a" (test)
+ : "0" (5), "q" (2)
+ : "cc");
+
+ /* AH is 0x02 on Cyrix after the divide.. */
+ return (unsigned char) (test >> 8) == 0x02;
+}
+
+/*
+ * Cyrix CPUs without cpuid or with cpuid not yet enabled can be detected
+ * by the fact that they preserve the flags across the division of 5/2.
+ * PII and PPro exhibit this behavior too, but they have cpuid available.
+ */
+
+__initfunc(static void check_cyrix_cpu(void))
+{
+ if ((boot_cpu_data.cpuid_level == -1) && (boot_cpu_data.x86 == 4)
+ && test_cyrix_52div()) {
+
+ /* default to an unknown Cx486, (we will differentiate later) */
+ /* NOTE: using 0xff since 0x00 is a valid DIR0 value */
+ strcpy(boot_cpu_data.x86_vendor_id, "CyrixInstead");
+ boot_cpu_data.x86_model = 0xff;
+ boot_cpu_data.x86_mask = 0;
+ }
+}
+
+/*
+ * Fix two problems with the Cyrix 6x86 and 6x86L:
+ * -- the cpuid is disabled on power up, enable it, use it.
+ * -- the SLOP bit needs resetting on some motherboards due to old BIOS,
+ * so that the udelay loop calibration works well. Recalibrate.
+ */
+
+extern void calibrate_delay(void) __init;
+
+__initfunc(static void check_cx686_cpuid_slop(void))
+{
+ if (boot_cpu_data.x86_vendor == X86_VENDOR_CYRIX &&
+ (boot_cpu_data.x86_model & 0xf0) == 0x30) { /* 6x86(L) */
+ int dummy;
+ unsigned char ccr3, ccr4, ccr5;
+
+ cli();
+ ccr3 = getCx86(CX86_CCR3);
+ setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN */
+ ccr4 = getCx86(CX86_CCR4);
+ setCx86(CX86_CCR4, ccr4 | 0x80); /* enable cpuid */
+ ccr5 = getCx86(CX86_CCR5);
+ if (ccr5 & 2) /* reset SLOP if needed, old BIOS do this wrong */
+ setCx86(CX86_CCR5, ccr5 & 0xfd);
+ setCx86(CX86_CCR3, ccr3); /* disable MAPEN */
+ sti();
+
+ boot_cpu_data.cpuid_level = 1; /* should cover all 6x86(L) */
+ boot_cpu_data.x86 = 5;
+
+ /* we know we have level 1 available on the 6x86(L) */
+ cpuid(1, &dummy, &dummy, &dummy,
+ &boot_cpu_data.x86_capability);
+ /*
+ * DON'T use the x86_mask and x86_model from cpuid, these are
+ * not as accurate (or the same) as those from the DIR regs.
+ * already in place after cyrix_model() in setup.c
+ */
+
+ if (ccr5 & 2) { /* possible wrong calibration done */
+ printk(KERN_INFO "Recalibrating delay loop with SLOP bit reset\n");
+ calibrate_delay();
+ boot_cpu_data.loops_per_sec = loops_per_sec;
+ }
+ }
+}
+
__initfunc(static void check_bugs(void))
{
+ check_cyrix_cpu();
identify_cpu(&boot_cpu_data);
#ifndef __SMP__
printk("CPU: ");
print_cpu_info(&boot_cpu_data);
#endif
+ check_cx686_cpuid_slop();
check_tlb();
check_fpu();
check_hlt();
@@ -240,10 +330,4 @@ __initfunc(static void check_bugs(void))
check_amd_k6();
check_pentium_f00f();
system_utsname.machine[1] = '0' + boot_cpu_data.x86;
-#if !defined(__SMP__) && defined(CONFIG_MTRR)
- /* Must be done after other processors booted: at this point we are
- called before SMP initialisation, so this is for the non-SMP case
- only. The SMP case is handled in arch/i386/kernel/smp.c */
- mtrr_init ();
-#endif
}
diff --git a/include/asm-i386/current.h b/include/asm-i386/current.h
index 976320d75..bc1496a2c 100644
--- a/include/asm-i386/current.h
+++ b/include/asm-i386/current.h
@@ -1,14 +1,15 @@
#ifndef _I386_CURRENT_H
#define _I386_CURRENT_H
-static inline unsigned long get_esp(void)
-{
- unsigned long esp;
- __asm__("movl %%esp,%0":"=r" (esp));
- return esp;
-}
-
-#define current ((struct task_struct *)(get_esp() & ~8191UL))
+struct task_struct;
+static inline struct task_struct * get_current(void)
+{
+ struct task_struct *current;
+ __asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL));
+ return current;
+ }
+
+#define current get_current()
#endif /* !(_I386_CURRENT_H) */
diff --git a/include/linux/debugreg.h b/include/asm-i386/debugreg.h
index d954a54ca..f0b2b06ae 100644
--- a/include/linux/debugreg.h
+++ b/include/asm-i386/debugreg.h
@@ -1,5 +1,5 @@
-#ifndef _LINUX_DEBUGREG_H
-#define _LINUX_DEBUGREG_H
+#ifndef _I386_DEBUGREG_H
+#define _I386_DEBUGREG_H
/* Indicate the register numbers for a number of the specific
@@ -14,10 +14,13 @@
which debugging register was responsible for the trap. The other bits
are either reserved or not of interest to us. */
-#define DR_TRAP0 (0x1) /* Trap due to db0 */
-#define DR_TRAP1 (0x2) /* Trap due to db1 */
-#define DR_TRAP2 (0x4) /* Trap due to db2 */
-#define DR_TRAP3 (0x8) /* Trap due to db3 */
+#define DR_TRAP0 (0x1) /* db0 */
+#define DR_TRAP1 (0x2) /* db1 */
+#define DR_TRAP2 (0x4) /* db2 */
+#define DR_TRAP3 (0x8) /* db3 */
+
+#define DR_STEP (0x4000) /* single-step */
+#define DR_SWITCH (0x8000) /* task switch */
/* Now define a bunch of things for manipulating the control register.
The top two bytes of the control register consist of 4 fields of 4
diff --git a/include/asm-i386/elf.h b/include/asm-i386/elf.h
index 700bb8233..65a74c5cb 100644
--- a/include/asm-i386/elf.h
+++ b/include/asm-i386/elf.h
@@ -71,7 +71,7 @@ typedef struct user_i387_struct elf_fpregset_t;
pr_reg[16] = regs->xss;
/* This yields a mask that user programs can use to figure out what
- instruction set this cpu supports. This could be done in userspace,
+ instruction set this CPU supports. This could be done in user space,
but it's not easy, and we've already done it here. */
#define ELF_HWCAP (boot_cpu_data.x86_capability)
diff --git a/include/asm-i386/fixmap.h b/include/asm-i386/fixmap.h
new file mode 100644
index 000000000..c56966f64
--- /dev/null
+++ b/include/asm-i386/fixmap.h
@@ -0,0 +1,82 @@
+/*
+ * fixmap.h: compile-time virtual memory allocation
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1998 Ingo Molnar
+ */
+
+#ifndef _ASM_FIXMAP_H
+#define _ASM_FIXMAP_H
+
+#include <asm/page.h>
+#include <linux/kernel.h>
+
+/*
+ * Here we define all the compile-time 'special' virtual
+ * addresses. The point is to have a constant address at
+ * compile time, but to set the physical address only
+ * in the boot process. We allocate these special addresses
+ * from the end of virtual memory (0xfffff000) backwards.
+ * Also this lets us do fail-safe vmalloc(), we
+ * can guarantee that these special addresses and
+ * vmalloc()-ed addresses never overlap.
+ *
+ * these 'compile-time allocated' memory buffers are
+ * fixed-size 4k pages. (or larger if used with an increment
+ * bigger than 1) use fixmap_set(idx,phys) to associate
+ * physical memory with fixmap indices.
+ *
+ * TLB entries of such buffers will not be flushed across
+ * task switches.
+ */
+
+/*
+ * on UP currently we will have no trace of the fixmap mechanizm,
+ * no page table allocations, etc. This might change in the
+ * future, say framebuffers for the console driver(s) could be
+ * fix-mapped?
+ */
+enum fixed_addresses {
+#if __SMP__
+ FIX_APIC_BASE,
+ FIX_IO_APIC_BASE,
+#endif
+ __end_of_fixed_addresses
+};
+
+extern void set_fixmap (enum fixed_addresses idx, unsigned long phys);
+
+/*
+ * used by vmalloc.c.
+ *
+ * Leave one empty page between vmalloc'ed areas and
+ * the start of the fixmap, and leave one page empty
+ * at the top of mem..
+ */
+#define FIXADDR_TOP (0xffffe000UL)
+#define FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT)
+#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
+
+/*
+ * 'index to address' translation. If anyone tries to use the idx
+ * directly without tranlation, we catch the bug with a NULL-deference
+ * kernel oops. Illegal ranges of incoming indices are caught too.
+ */
+extern inline unsigned long fix_to_virt(const unsigned int idx)
+{
+ /*
+ * this branch gets completely eliminated after inlining,
+ * except when someone tries to use fixaddr indices in an
+ * illegal way. (such as mixing up address types or using
+ * out-of-range indices)
+ */
+ if (idx >= __end_of_fixed_addresses)
+ panic("illegal fixaddr index!");
+
+ return FIXADDR_TOP - (idx << PAGE_SHIFT);
+}
+
+#endif
diff --git a/include/asm-i386/hardirq.h b/include/asm-i386/hardirq.h
index f679516bb..bfc535137 100644
--- a/include/asm-i386/hardirq.h
+++ b/include/asm-i386/hardirq.h
@@ -5,6 +5,13 @@
extern unsigned int local_irq_count[NR_CPUS];
+/*
+ * Are we in an interrupt context? Either doing bottom half
+ * or hardware interrupt processing?
+ */
+#define in_interrupt() ({ int __cpu = smp_processor_id(); \
+ (local_irq_count[__cpu] + local_bh_count[__cpu] != 0); })
+
#ifndef __SMP__
#define hardirq_trylock(cpu) (local_irq_count[cpu] == 0)
diff --git a/include/asm-i386/ioctls.h b/include/asm-i386/ioctls.h
index 1b8af73a4..9fc340a8a 100644
--- a/include/asm-i386/ioctls.h
+++ b/include/asm-i386/ioctls.h
@@ -65,6 +65,8 @@
#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
+#define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */
+#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */
/* Used for packet mode */
#define TIOCPKT_DATA 0
diff --git a/include/asm-i386/irq.h b/include/asm-i386/irq.h
index 67b1a59e5..3d9a7c46c 100644
--- a/include/asm-i386/irq.h
+++ b/include/asm-i386/irq.h
@@ -10,14 +10,15 @@
* <tomsoft@informatik.tu-chemnitz.de>
*/
-#ifndef __SMP__
-#define NR_IRQS 16
-#else
-#define NR_IRQS 24
-#endif
-
#define TIMER_IRQ 0
+/*
+ * 16 XT IRQ's, 8 potential APIC interrupt sources.
+ * Right now the APIC is only used for SMP, but this
+ * may change.
+ */
+#define NR_IRQS 64
+
static __inline__ int irq_cannonicalize(int irq)
{
return ((irq == 2) ? 9 : irq);
diff --git a/include/asm-i386/linux_logo.h b/include/asm-i386/linux_logo.h
new file mode 100644
index 000000000..6773bef77
--- /dev/null
+++ b/include/asm-i386/linux_logo.h
@@ -0,0 +1,47 @@
+/* $Id: linux_logo.h,v 1.6 1998/07/07 13:34:56 jj Exp $
+ * include/asm-i386/linux_logo.h: This is a linux logo
+ * to be displayed on boot.
+ *
+ * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
+ * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
+ *
+ * You can put anything here, but:
+ * LINUX_LOGO_COLORS has to be less than 224
+ * image size has to be 80x80
+ * values have to start from 0x20
+ * (i.e. RGB(linux_logo_red[0],
+ * linux_logo_green[0],
+ * linux_logo_blue[0]) is color 0x20)
+ * BW image has to be 80x80 as well, with MS bit
+ * on the left
+ * Serial_console ascii image can be any size,
+ * but should contain %s to display the version
+ */
+
+#include <linux/init.h>
+#include <linux/version.h>
+
+#define linux_logo_banner "Linux/ia32 version " UTS_RELEASE
+
+#define LINUX_LOGO_COLORS 221
+
+#ifdef INCLUDE_LINUX_LOGO_DATA
+
+#define INCLUDE_LINUX_LOGO16
+
+#include <linux/linux_logo.h>
+
+#else
+
+/* prototypes only */
+extern unsigned char linux_logo_red[];
+extern unsigned char linux_logo_green[];
+extern unsigned char linux_logo_blue[];
+extern unsigned char linux_logo[];
+extern unsigned char linux_logo_bw[];
+extern unsigned char linux_logo16_red[];
+extern unsigned char linux_logo16_green[];
+extern unsigned char linux_logo16_blue[];
+extern unsigned char linux_logo16[];
+
+#endif
diff --git a/include/asm-i386/math_emu.h b/include/asm-i386/math_emu.h
index 7284939fe..a5e7361e4 100644
--- a/include/asm-i386/math_emu.h
+++ b/include/asm-i386/math_emu.h
@@ -3,8 +3,8 @@
#include <asm/sigcontext.h>
-void restore_i387_soft(void *s387, struct _fpstate *buf);
-struct _fpstate * save_i387_soft(void *s387, struct _fpstate * buf);
+int restore_i387_soft(void *s387, struct _fpstate *buf);
+int save_i387_soft(void *s387, struct _fpstate * buf);
/* This structure matches the layout of the data saved to the stack
following a device-not-present interrupt, part of it saved
diff --git a/include/asm-i386/md.h b/include/asm-i386/md.h
new file mode 100644
index 000000000..0a2c5dd01
--- /dev/null
+++ b/include/asm-i386/md.h
@@ -0,0 +1,13 @@
+/* $Id: md.h,v 1.1 1997/12/15 15:11:57 jj Exp $
+ * md.h: High speed xor_block operation for RAID4/5
+ *
+ */
+
+#ifndef __ASM_MD_H
+#define __ASM_MD_H
+
+/* #define HAVE_ARCH_XORBLOCK */
+
+#define MD_XORBLOCK_ALIGNMENT sizeof(long)
+
+#endif /* __ASM_MD_H */
diff --git a/include/asm-i386/pgtable.h b/include/asm-i386/pgtable.h
index 47e1d2cfc..4a8e92c54 100644
--- a/include/asm-i386/pgtable.h
+++ b/include/asm-i386/pgtable.h
@@ -12,8 +12,11 @@
* This file contains the functions and defines necessary to modify and use
* the i386 page table tree.
*/
-
#ifndef __ASSEMBLY__
+#include <asm/processor.h>
+#include <asm/fixmap.h>
+#include <linux/tasks.h>
+
/* Caches aren't brain-dead on the intel. */
#define flush_cache_all() do { } while (0)
#define flush_cache_mm(mm) do { } while (0)
@@ -38,7 +41,7 @@
#define __flush_tlb() \
do { unsigned long tmpreg; __asm__ __volatile__("movl %%cr3,%0\n\tmovl %0,%%cr3":"=r" (tmpreg) : :"memory"); } while (0)
-#if defined(CONFIG_M386) || defined(CONFIG_AMD_K5_INVBUG)
+#ifdef CONFIG_M386
#define __flush_tlb_one(addr) flush_tlb()
#else
#define __flush_tlb_one(addr) \
@@ -97,7 +100,8 @@ static inline void flush_tlb_range(struct mm_struct *mm,
static inline void flush_tlb_current_task(void)
{
- if (current->mm->count == 1) /* just one copy of this mm */
+ /* just one copy of this mm? */
+ if (atomic_read(&current->mm->count) == 1)
local_flush_tlb(); /* and that's us, so.. */
else
smp_flush_tlb();
@@ -109,7 +113,7 @@ static inline void flush_tlb_current_task(void)
static inline void flush_tlb_mm(struct mm_struct * mm)
{
- if (mm == current->mm && mm->count == 1)
+ if (mm == current->mm && atomic_read(&mm->count) == 1)
local_flush_tlb();
else
smp_flush_tlb();
@@ -118,7 +122,7 @@ static inline void flush_tlb_mm(struct mm_struct * mm)
static inline void flush_tlb_page(struct vm_area_struct * vma,
unsigned long va)
{
- if (vma->vm_mm == current->mm && current->mm->count == 1)
+ if (vma->vm_mm == current->mm && atomic_read(&current->mm->count) == 1)
__flush_tlb_one(va);
else
smp_flush_tlb();
@@ -159,7 +163,7 @@ static inline void flush_tlb_range(struct mm_struct *mm,
#endif /* !__ASSEMBLY__ */
-/* Certain architectures need to do special things when pte's
+/* Certain architectures need to do special things when PTEs
* within a page table are directly modified. Thus, the following
* hook is made available.
*/
@@ -182,6 +186,7 @@ static inline void flush_tlb_range(struct mm_struct *mm,
#define PTRS_PER_PTE 1024
#define PTRS_PER_PMD 1
#define PTRS_PER_PGD 1024
+#define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE)
/*
* pgd entries used up by user/kernel:
@@ -203,6 +208,7 @@ static inline void flush_tlb_range(struct mm_struct *mm,
#define VMALLOC_OFFSET (8*1024*1024)
#define VMALLOC_START (((unsigned long) high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
#define VMALLOC_VMADDR(x) ((unsigned long)(x))
+#define VMALLOC_END (FIXADDR_START)
/*
* The 4MB page is guessing.. Detailed in the infamous "Chapter H"
@@ -222,6 +228,9 @@ static inline void flush_tlb_range(struct mm_struct *mm,
#define _PAGE_4M 0x080 /* 4 MB page, Pentium+.. */
#define _PAGE_GLOBAL 0x100 /* Global TLB entry PPro+ */
+#define _PAGE_READABLE (_PAGE_PRESENT)
+#define _PAGE_WRITABLE (_PAGE_PRESENT | _PAGE_RW)
+
#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
@@ -327,23 +336,27 @@ extern inline void pgd_clear(pgd_t * pgdp) { }
* Undefined behaviour if not..
*/
extern inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_USER; }
-extern inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; }
extern inline int pte_exec(pte_t pte) { return pte_val(pte) & _PAGE_USER; }
extern inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; }
extern inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; }
-extern inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &= ~_PAGE_RW; return pte; }
extern inline pte_t pte_rdprotect(pte_t pte) { pte_val(pte) &= ~_PAGE_USER; return pte; }
extern inline pte_t pte_exprotect(pte_t pte) { pte_val(pte) &= ~_PAGE_USER; return pte; }
extern inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~_PAGE_DIRTY; return pte; }
extern inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~_PAGE_ACCESSED; return pte; }
-extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= _PAGE_RW; return pte; }
extern inline pte_t pte_mkread(pte_t pte) { pte_val(pte) |= _PAGE_USER; return pte; }
extern inline pte_t pte_mkexec(pte_t pte) { pte_val(pte) |= _PAGE_USER; return pte; }
extern inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= _PAGE_DIRTY; return pte; }
extern inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= _PAGE_ACCESSED; return pte; }
/*
+ * These are harder, as writability is two bits, not one..
+ */
+extern inline int pte_write(pte_t pte) { return (pte_val(pte) & _PAGE_WRITABLE) == _PAGE_WRITABLE; }
+extern inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &= ~((pte_val(pte) & _PAGE_PRESENT) << 1); return pte; }
+extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= _PAGE_RW; return pte; }
+
+/*
* Conversion functions: convert a page and protection to a page entry,
* and a page entry and page directory to the page they refer to.
*/
@@ -385,85 +398,137 @@ extern inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
* used to allocate a kernel page table - this turns on ASN bits
* if any.
*/
-extern inline void pte_free_kernel(pte_t * pte)
+
+#define pgd_quicklist (current_cpu_data.pgd_quick)
+#define pmd_quicklist ((unsigned long *)0)
+#define pte_quicklist (current_cpu_data.pte_quick)
+#define pgtable_cache_size (current_cpu_data.pgtable_cache_sz)
+
+extern __inline__ pgd_t *get_pgd_slow(void)
{
- free_page((unsigned long) pte);
+ pgd_t *ret = (pgd_t *)__get_free_page(GFP_KERNEL), *init;
+
+ if (ret) {
+ init = pgd_offset(&init_mm, 0);
+ memset (ret, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
+ memcpy (ret + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD,
+ (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
+ }
+ return ret;
}
-extern const char bad_pmd_string[];
+extern __inline__ pgd_t *get_pgd_fast(void)
+{
+ unsigned long *ret;
+
+ if((ret = pgd_quicklist) != NULL) {
+ pgd_quicklist = (unsigned long *)(*ret);
+ ret[0] = ret[1];
+ pgtable_cache_size--;
+ } else
+ ret = (unsigned long *)get_pgd_slow();
+ return (pgd_t *)ret;
+}
-extern inline pte_t * pte_alloc_kernel(pmd_t * pmd, unsigned long address)
+extern __inline__ void free_pgd_fast(pgd_t *pgd)
{
- address = (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
- if (pmd_none(*pmd)) {
- pte_t * page = (pte_t *) get_free_page(GFP_KERNEL);
- if (pmd_none(*pmd)) {
- if (page) {
- pmd_val(*pmd) = _KERNPG_TABLE + __pa(page);
- return page + address;
- }
- pmd_val(*pmd) = _KERNPG_TABLE + __pa(BAD_PAGETABLE);
- return NULL;
- }
- free_page((unsigned long) page);
- }
- if (pmd_bad(*pmd)) {
- printk(bad_pmd_string, pmd_val(*pmd));
- pmd_val(*pmd) = _KERNPG_TABLE + __pa(BAD_PAGETABLE);
- return NULL;
+ *(unsigned long *)pgd = (unsigned long) pgd_quicklist;
+ pgd_quicklist = (unsigned long *) pgd;
+ pgtable_cache_size++;
+}
+
+extern __inline__ void free_pgd_slow(pgd_t *pgd)
+{
+ free_page((unsigned long)pgd);
+}
+
+extern pte_t *get_pte_slow(pmd_t *pmd, unsigned long address_preadjusted);
+extern pte_t *get_pte_kernel_slow(pmd_t *pmd, unsigned long address_preadjusted);
+
+extern __inline__ pte_t *get_pte_fast(void)
+{
+ unsigned long *ret;
+
+ if((ret = (unsigned long *)pte_quicklist) != NULL) {
+ pte_quicklist = (unsigned long *)(*ret);
+ ret[0] = ret[1];
+ pgtable_cache_size--;
}
- return (pte_t *) pmd_page(*pmd) + address;
+ return (pte_t *)ret;
}
-/*
- * allocating and freeing a pmd is trivial: the 1-entry pmd is
- * inside the pgd, so has no extra memory associated with it.
- */
-extern inline void pmd_free_kernel(pmd_t * pmd)
+extern __inline__ void free_pte_fast(pte_t *pte)
{
- pmd_val(*pmd) = 0;
+ *(unsigned long *)pte = (unsigned long) pte_quicklist;
+ pte_quicklist = (unsigned long *) pte;
+ pgtable_cache_size++;
}
-extern inline pmd_t * pmd_alloc_kernel(pgd_t * pgd, unsigned long address)
+extern __inline__ void free_pte_slow(pte_t *pte)
+{
+ free_page((unsigned long)pte);
+}
+
+/* We don't use pmd cache, so these are dummy routines */
+extern __inline__ pmd_t *get_pmd_fast(void)
+{
+ return (pmd_t *)0;
+}
+
+extern __inline__ void free_pmd_fast(pmd_t *pmd)
{
- return (pmd_t *) pgd;
}
-extern inline void pte_free(pte_t * pte)
+extern __inline__ void free_pmd_slow(pmd_t *pmd)
{
- free_page((unsigned long) pte);
+}
+
+extern void __bad_pte(pmd_t *pmd);
+extern void __bad_pte_kernel(pmd_t *pmd);
+
+#define pte_free_kernel(pte) free_pte_fast(pte)
+#define pte_free(pte) free_pte_fast(pte)
+#define pgd_free(pgd) free_pgd_fast(pgd)
+#define pgd_alloc() get_pgd_fast()
+
+extern inline pte_t * pte_alloc_kernel(pmd_t * pmd, unsigned long address)
+{
+ address = (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
+ if (pmd_none(*pmd)) {
+ pte_t * page = (pte_t *) get_pte_fast();
+
+ if (!page)
+ return get_pte_kernel_slow(pmd, address);
+ pmd_val(*pmd) = _KERNPG_TABLE + __pa(page);
+ return page + address;
+ }
+ if (pmd_bad(*pmd)) {
+ __bad_pte_kernel(pmd);
+ return NULL;
+ }
+ return (pte_t *) pmd_page(*pmd) + address;
}
extern inline pte_t * pte_alloc(pmd_t * pmd, unsigned long address)
{
address = (address >> (PAGE_SHIFT-2)) & 4*(PTRS_PER_PTE - 1);
-repeat:
if (pmd_none(*pmd))
goto getnew;
if (pmd_bad(*pmd))
goto fix;
return (pte_t *) (pmd_page(*pmd) + address);
-
getnew:
{
- unsigned long page = __get_free_page(GFP_KERNEL);
- if (!pmd_none(*pmd))
- goto freenew;
+ unsigned long page = (unsigned long) get_pte_fast();
+
if (!page)
- goto oom;
- memset((void *) page, 0, PAGE_SIZE);
+ return get_pte_slow(pmd, address);
pmd_val(*pmd) = _PAGE_TABLE + __pa(page);
return (pte_t *) (page + address);
-freenew:
- free_page(page);
- goto repeat;
}
-
fix:
- printk(bad_pmd_string, pmd_val(*pmd));
-oom:
- pmd_val(*pmd) = _PAGE_TABLE + __pa(BAD_PAGETABLE);
+ __bad_pte(pmd);
return NULL;
}
@@ -473,7 +538,6 @@ oom:
*/
extern inline void pmd_free(pmd_t * pmd)
{
- pmd_val(*pmd) = 0;
}
extern inline pmd_t * pmd_alloc(pgd_t * pgd, unsigned long address)
@@ -481,14 +545,36 @@ extern inline pmd_t * pmd_alloc(pgd_t * pgd, unsigned long address)
return (pmd_t *) pgd;
}
-extern inline void pgd_free(pgd_t * pgd)
-{
- free_page((unsigned long) pgd);
-}
+#define pmd_free_kernel pmd_free
+#define pmd_alloc_kernel pmd_alloc
-extern inline pgd_t * pgd_alloc(void)
+extern int do_check_pgt_cache(int, int);
+
+extern inline void set_pgdir(unsigned long address, pgd_t entry)
{
- return (pgd_t *) get_free_page(GFP_KERNEL);
+ struct task_struct * p;
+ pgd_t *pgd;
+#ifdef __SMP__
+ int i;
+#endif
+
+ read_lock(&tasklist_lock);
+ for_each_task(p) {
+ if (!p->mm)
+ continue;
+ *pgd_offset(p->mm,address) = entry;
+ }
+ read_unlock(&tasklist_lock);
+#ifndef __SMP__
+ for (pgd = (pgd_t *)pgd_quicklist; pgd; pgd = (pgd_t *)*(unsigned long *)pgd)
+ pgd[address >> PGDIR_SHIFT] = entry;
+#else
+ /* To pgd_alloc/pgd_free, one holds master kernel lock and so does our callee, so we can
+ modify pgd caches of other CPUs as well. -jj */
+ for (i = 0; i < NR_CPUS; i++)
+ for (pgd = (pgd_t *)cpu_data[i].pgd_quick; pgd; pgd = (pgd_t *)*(unsigned long *)pgd)
+ pgd[address >> PGDIR_SHIFT] = entry;
+#endif
}
extern pgd_t swapper_pg_dir[1024];
@@ -511,4 +597,7 @@ extern inline void update_mmu_cache(struct vm_area_struct * vma,
#endif /* !__ASSEMBLY__ */
+/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
+#define PageSkip(page) (0)
+
#endif /* _I386_PAGE_H */
diff --git a/include/asm-i386/posix_types.h b/include/asm-i386/posix_types.h
index aed0fd6fd..6413683c2 100644
--- a/include/asm-i386/posix_types.h
+++ b/include/asm-i386/posix_types.h
@@ -37,6 +37,8 @@ typedef struct {
#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
} __kernel_fsid_t;
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+
#undef __FD_SET
#define __FD_SET(fd,fdsetp) \
__asm__ __volatile__("btsl %1,%0": \
@@ -62,4 +64,6 @@ typedef struct {
:"a" (0), "c" (__FDSET_LONGS), \
"D" ((__kernel_fd_set *) (fdsetp)) :"cx","di")
+#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
+
#endif
diff --git a/include/asm-i386/processor.h b/include/asm-i386/processor.h
index 14706b18a..7caccbdc0 100644
--- a/include/asm-i386/processor.h
+++ b/include/asm-i386/processor.h
@@ -34,6 +34,9 @@ struct cpuinfo_x86 {
int fdiv_bug;
int f00f_bug;
unsigned long loops_per_sec;
+ unsigned long *pgd_quick;
+ unsigned long *pte_quick;
+ unsigned long pgtable_cache_sz;
};
#define X86_VENDOR_INTEL 0
@@ -44,6 +47,43 @@ struct cpuinfo_x86 {
#define X86_VENDOR_CENTAUR 5
#define X86_VENDOR_UNKNOWN 0xff
+/*
+ * capabilities of CPUs
+ */
+
+#define X86_FEATURE_FPU 0x00000001 /* onboard FPU */
+#define X86_FEATURE_VME 0x00000002 /* Virtual Mode Extensions */
+#define X86_FEATURE_DE 0x00000004 /* Debugging Extensions */
+#define X86_FEATURE_PSE 0x00000008 /* Page Size Extensions */
+#define X86_FEATURE_TSC 0x00000010 /* Time Stamp Counter */
+#define X86_FEATURE_MSR 0x00000020 /* Model-Specific Registers, RDMSR, WRMSR */
+#define X86_FEATURE_PAE 0x00000040 /* Physical Address Extensions */
+#define X86_FEATURE_MCE 0x00000080 /* Machine Check Exceptions */
+#define X86_FEATURE_CX8 0x00000100 /* CMPXCHG8 instruction */
+#define X86_FEATURE_APIC 0x00000200 /* onboard APIC */
+#define X86_FEATURE_10 0x00000400
+#define X86_FEATURE_SEP 0x00000800 /* Fast System Call */
+#define X86_FEATURE_MTRR 0x00001000 /* Memory Type Range Registers */
+#define X86_FEATURE_PGE 0x00002000 /* Page Global Enable */
+#define X86_FEATURE_MCA 0x00004000 /* Machine Check Architecture */
+#define X86_FEATURE_CMOV 0x00008000 /* CMOV instruction (FCMOVCC and FCOMI too if FPU present) */
+#define X86_FEATURE_PAT 0x00010000 /* Page Attribute Table */
+#define X86_FEATURE_PSE36 0x00020000 /* 36-bit PSEs */
+#define X86_FEATURE_18 0x00040000
+#define X86_FEATURE_19 0x00080000
+#define X86_FEATURE_20 0x00100000
+#define X86_FEATURE_21 0x00200000
+#define X86_FEATURE_22 0x00400000
+#define X86_FEATURE_MMX 0x00800000 /* multimedia extensions */
+#define X86_FEATURE_FXSR 0x01000000 /* FXSAVE and FXRSTOR instructions (fast save and restore of FPU context), and CR4.OSFXSR (OS uses these instructions) available */
+#define X86_FEATURE_25 0x02000000
+#define X86_FEATURE_26 0x04000000
+#define X86_FEATURE_27 0x08000000
+#define X86_FEATURE_28 0x10000000
+#define X86_FEATURE_29 0x20000000
+#define X86_FEATURE_30 0x40000000
+#define X86_FEATURE_AMD3D 0x80000000
+
extern struct cpuinfo_x86 boot_cpu_data;
#ifdef __SMP__
@@ -60,6 +100,41 @@ extern void identify_cpu(struct cpuinfo_x86 *);
extern void print_cpu_info(struct cpuinfo_x86 *);
/*
+ * Generic CPUID function
+ */
+extern inline void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx)
+{
+ __asm__("cpuid"
+ : "=a" (*eax),
+ "=b" (*ebx),
+ "=c" (*ecx),
+ "=d" (*edx)
+ : "a" (op)
+ : "cc");
+}
+
+/*
+ * Cyrix CPU configuration register indexes
+ */
+#define CX86_CCR2 0xc2
+#define CX86_CCR3 0xc3
+#define CX86_CCR4 0xe8
+#define CX86_CCR5 0xe9
+#define CX86_DIR0 0xfe
+#define CX86_DIR1 0xff
+
+/*
+ * Cyrix CPU indexed register access macros
+ */
+
+#define getCx86(reg) ({ outb((reg), 0x22); inb(0x23); })
+
+#define setCx86(reg, data) do { \
+ outb((reg), 0x22); \
+ outb((data), 0x23); \
+} while (0)
+
+/*
* Bus types (default is ISA, but people can check others with these..)
*/
extern int EISA_bus;
@@ -149,6 +224,8 @@ struct thread_struct {
unsigned long tr;
unsigned long cr2, trap_no, error_code;
mm_segment_t segment;
+/* debug registers */
+ long debugreg[8]; /* Hardware debugging registers */
/* floating point info */
union i387_union i387;
/* virtual 86 mode info */
@@ -160,33 +237,35 @@ struct thread_struct {
#define INIT_MMAP \
{ &init_mm, 0, 0, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap }
-#define INIT_TSS { \
- 0,0, \
- sizeof(init_stack) + (long) &init_stack, \
- __KERNEL_DS, 0, \
- 0,0,0,0,0,0, \
- (long) &swapper_pg_dir - PAGE_OFFSET, \
- 0,0,0,0,0,0,0,0,0,0, \
- __USER_DS,0,__USER_DS,0,__USER_DS,0, \
- __USER_DS,0,__USER_DS,0,__USER_DS,0, \
- _LDT(0),0, \
- 0, 0x8000, \
- {~0, }, /* ioperm */ \
- _TSS(0), 0, 0, 0, (mm_segment_t) { 0 } /* obsolete */ , \
- { { 0, }, }, /* 387 state */ \
- NULL, 0, 0, 0, 0, 0 /* vm86_info */, \
+#define INIT_TSS { \
+ 0,0, /* back_link, __blh */ \
+ sizeof(init_stack) + (long) &init_stack, /* esp0 */ \
+ __KERNEL_DS, 0, /* ss0 */ \
+ 0,0,0,0,0,0, /* stack1, stack2 */ \
+ (long) &swapper_pg_dir - PAGE_OFFSET, /* cr3 */ \
+ 0,0, /* eip,eflags */ \
+ 0,0,0,0, /* eax,ecx,edx,ebx */ \
+ 0,0,0,0, /* esp,ebp,esi,edi */ \
+ 0,0,0,0,0,0, /* es,cs,ss */ \
+ 0,0,0,0,0,0, /* ds,fs,gs */ \
+ _LDT(0),0, /* ldt */ \
+ 0, 0x8000, /* tace, bitmap */ \
+ {~0, }, /* ioperm */ \
+ _TSS(0), 0, 0, 0, (mm_segment_t) { 0 }, /* obsolete */ \
+ { 0, }, \
+ { { 0, }, }, /* 387 state */ \
+ NULL, 0, 0, 0, 0, 0, /* vm86_info */ \
}
-#define start_thread(regs, new_eip, new_esp) do {\
- unsigned long seg = __USER_DS; \
- __asm__("movl %w0,%%fs ; movl %w0,%%gs":"=r" (seg) :"0" (seg)); \
- set_fs(USER_DS); \
- regs->xds = seg; \
- regs->xes = seg; \
- regs->xss = seg; \
- regs->xcs = __USER_CS; \
- regs->eip = new_eip; \
- regs->esp = new_esp; \
+#define start_thread(regs, new_eip, new_esp) do { \
+ __asm__("movl %w0,%%fs ; movl %w0,%%gs": :"r" (0)); \
+ set_fs(USER_DS); \
+ regs->xds = __USER_DS; \
+ regs->xes = __USER_DS; \
+ regs->xss = __USER_DS; \
+ regs->xcs = __USER_CS; \
+ regs->eip = new_eip; \
+ regs->esp = new_esp; \
} while (0)
/* Forward declaration, a strange C thing */
@@ -207,13 +286,8 @@ extern inline unsigned long thread_saved_pc(struct thread_struct *t)
return ((unsigned long *)t->esp)[3];
}
-/* Allocation and freeing of basic task resources. */
-/*
- * NOTE! The task struct and the stack go together
- */
-#define alloc_task_struct() \
- ((struct task_struct *) __get_free_pages(GFP_KERNEL,1))
-#define free_task_struct(p) free_pages((unsigned long)(p),1)
+extern struct task_struct * alloc_task_struct(void);
+extern void free_task_struct(struct task_struct *);
#define init_task (init_task_union.task)
#define init_stack (init_task_union.stack)
diff --git a/include/asm-i386/siginfo.h b/include/asm-i386/siginfo.h
index 99101420b..01ef4d08a 100644
--- a/include/asm-i386/siginfo.h
+++ b/include/asm-i386/siginfo.h
@@ -43,6 +43,7 @@ typedef struct siginfo {
/* SIGCHLD */
struct {
pid_t _pid; /* which child */
+ uid_t _uid; /* sender's uid */
int _status; /* exit code */
clock_t _utime;
clock_t _stime;
diff --git a/include/asm-i386/signal.h b/include/asm-i386/signal.h
index 598a21008..030a19b7b 100644
--- a/include/asm-i386/signal.h
+++ b/include/asm-i386/signal.h
@@ -72,7 +72,7 @@ typedef unsigned long sigset_t;
/*
* SA_FLAGS values:
*
- * SA_ONSTACK is not currently supported, but will allow sigaltstack(2).
+ * SA_ONSTACK indicates that a registered stack_t will be used.
* SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
* SA_RESTART flag to get restarting signals (which were the default long ago)
* SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
@@ -97,6 +97,15 @@ typedef unsigned long sigset_t;
#define SA_RESTORER 0x04000000
+/*
+ * sigaltstack controls
+ */
+#define SS_ONSTACK 1
+#define SS_DISABLE 2
+
+#define MINSIGSTKSZ 2048
+#define SIGSTKSZ 8192
+
#ifdef __KERNEL__
/*
diff --git a/include/asm-i386/smp.h b/include/asm-i386/smp.h
index 96c2d2764..33dbab5bf 100644
--- a/include/asm-i386/smp.h
+++ b/include/asm-i386/smp.h
@@ -6,6 +6,8 @@
#include <asm/i82489.h>
#include <asm/bitops.h>
+#include <asm/fixmap.h>
+
#include <linux/tasks.h>
#include <linux/ptrace.h>
@@ -160,11 +162,10 @@ extern unsigned long cpu_present_map;
extern volatile int cpu_number_map[NR_CPUS];
extern volatile unsigned long smp_invalidate_needed;
extern void smp_flush_tlb(void);
-extern volatile unsigned long kernel_flag, kernel_counter;
+
extern volatile unsigned long cpu_callin_map[NR_CPUS];
-extern volatile unsigned char active_kernel_processor;
extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs);
-extern void smp_reschedule_irq(int cpl, struct pt_regs *regs);
+extern void smp_send_reschedule(int cpu);
extern unsigned long ipi_count;
extern void smp_invalidate_rcv(void); /* Process an NMI */
extern void smp_local_timer_interrupt(struct pt_regs * regs);
@@ -183,7 +184,8 @@ extern inline int cpu_logical_map(int cpu)
extern void smp_callin(void);
extern void smp_boot_cpus(void);
-extern void smp_store_cpu_info(int id); /* Store per cpu info (like the initial udelay numbers */
+extern void smp_store_cpu_info(int id); /* Store per CPU info (like the initial udelay numbers */
+extern void smp_message_pass(int target, int msg, unsigned long data, int wait);
extern volatile unsigned long smp_proc_in_lock[NR_CPUS]; /* for computing process time */
extern volatile int smp_process_available;
@@ -195,7 +197,7 @@ extern volatile int smp_process_available;
* "Back to Back Assertions of HOLD May Cause Lost APIC Write Cycle"
*/
-#define APIC_BASE ((char *)0xFEE00000)
+#define APIC_BASE (fix_to_virt(FIX_APIC_BASE))
extern __inline void apic_write(unsigned long reg, unsigned long v)
{
@@ -239,13 +241,5 @@ extern __inline int hard_smp_processor_id(void)
#define SMP_FROM_INT 1
#define SMP_FROM_SYSCALL 2
-
-#else
-#ifndef ASSEMBLY
-extern inline int cpu_logical_map(int cpu)
-{
- return cpu;
-}
-#endif
#endif
#endif
diff --git a/include/asm-i386/smp_lock.h b/include/asm-i386/smp_lock.h
deleted file mode 100644
index fc7eb94de..000000000
--- a/include/asm-i386/smp_lock.h
+++ /dev/null
@@ -1,91 +0,0 @@
-#ifndef __I386_SMPLOCK_H
-#define __I386_SMPLOCK_H
-
-#define __STR(x) #x
-
-#ifndef __SMP__
-
-#define lock_kernel() do { } while(0)
-#define unlock_kernel() do { } while(0)
-#define release_kernel_lock(task, cpu, depth) ((depth) = 1)
-#define reacquire_kernel_lock(task, cpu, depth) do { } while(0)
-
-#else
-
-#include <asm/hardirq.h>
-
-/* Release global kernel lock and global interrupt lock */
-#define release_kernel_lock(task, cpu, depth) \
-do { \
- if ((depth = (task)->lock_depth) != 0) { \
- __cli(); \
- (task)->lock_depth = 0; \
- active_kernel_processor = NO_PROC_ID; \
- clear_bit(0,&kernel_flag); \
- } \
- release_irqlock(cpu); \
- __sti(); \
-} while (0)
-
-/* Re-acquire the kernel lock */
-#define reacquire_kernel_lock(task, cpu, depth) \
-do { if (depth) __asm__ __volatile__( \
- "cli\n\t" \
- "call __lock_kernel\n\t" \
- "movl %2,%0\n\t" \
- "sti" \
- : "=m" (task->lock_depth) \
- : "d" (cpu), "c" (depth)); \
-} while (0)
-
-
-extern const char lk_lockmsg[];
-
-/* Locking the kernel */
-extern __inline__ void lock_kernel(void)
-{
- int cpu = smp_processor_id();
-
- if (local_irq_count[cpu]) {
- __label__ l1;
-l1: printk(lk_lockmsg, &&l1);
- }
- if (cpu == global_irq_holder) {
- __label__ l2;
-l2: printk("Ugh at %p\n", &&l2);
- sti();
- }
-
- __asm__ __volatile__("
- pushfl
- cli
- cmpl $0, %0
- jne 0f
- call __lock_kernel
-0: incl %0
- popfl
-" :
- : "m" (current->lock_depth), "d" (cpu)
- : "memory");
-}
-
-extern __inline__ void unlock_kernel(void)
-{
- __asm__ __volatile__("
- pushfl
- cli
- decl %0
- jnz 1f
- movb %1, " __STR(active_kernel_processor) "
- lock
- btrl $0, " __STR(kernel_flag) "
-1:
- popfl
-" : /* no outputs */
- : "m" (current->lock_depth), "i" (NO_PROC_ID)
- : "ax", "memory");
-}
-
-#endif /* __SMP__ */
-
-#endif /* __I386_SMPLOCK_H */
diff --git a/include/asm-i386/smplock.h b/include/asm-i386/smplock.h
new file mode 100644
index 000000000..3bb933e42
--- /dev/null
+++ b/include/asm-i386/smplock.h
@@ -0,0 +1,59 @@
+/*
+ * <asm/smplock.h>
+ *
+ * i386 SMP lock implementation
+ */
+#include <linux/interrupt.h>
+#include <asm/spinlock.h>
+
+extern spinlock_t kernel_flag;
+
+/*
+ * Release global kernel lock and global interrupt lock
+ */
+#define release_kernel_lock(task, cpu) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_unlock(&kernel_flag); \
+ release_irqlock(cpu); \
+ __sti(); \
+} while (0)
+
+/*
+ * Re-acquire the kernel lock
+ */
+#define reacquire_kernel_lock(task) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_lock(&kernel_flag); \
+} while (0)
+
+
+/*
+ * Getting the big kernel lock.
+ *
+ * This cannot happen asynchronously,
+ * so we only need to worry about other
+ * CPU's.
+ */
+extern __inline__ void lock_kernel(void)
+{
+ __asm__ __volatile__(
+ "incl %1\n\t"
+ "jne 9f"
+ spin_lock_string
+ "\n9:"
+ :"=m" (__dummy_lock(&kernel_flag)),
+ "=m" (current->lock_depth));
+}
+
+extern __inline__ void unlock_kernel(void)
+{
+ __asm__ __volatile__(
+ "decl %1\n\t"
+ "jns 9f\n"
+ spin_unlock_string
+ "\n9:"
+ :"=m" (__dummy_lock(&kernel_flag)),
+ "=m" (current->lock_depth));
+}
diff --git a/include/asm-i386/softirq.h b/include/asm-i386/softirq.h
index 008edf305..f77cce80a 100644
--- a/include/asm-i386/softirq.h
+++ b/include/asm-i386/softirq.h
@@ -50,7 +50,7 @@ static inline void end_bh_atomic(void)
atomic_dec(&global_bh_lock);
}
-/* These are for the irq's testing the lock */
+/* These are for the IRQs testing the lock */
static inline int softirq_trylock(int cpu)
{
if (!test_and_set_bit(0,&global_bh_count)) {
diff --git a/include/asm-i386/spinlock.h b/include/asm-i386/spinlock.h
index e6a42b227..e6fdf42f1 100644
--- a/include/asm-i386/spinlock.h
+++ b/include/asm-i386/spinlock.h
@@ -9,9 +9,16 @@
/*
* Your basic spinlocks, allowing only a single CPU anywhere
+ *
+ * Gcc-2.7.x has a nasty bug with empty initializers.
*/
-typedef struct { } spinlock_t;
-#define SPIN_LOCK_UNLOCKED { }
+#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
+ typedef struct { } spinlock_t;
+ #define SPIN_LOCK_UNLOCKED { }
+#else
+ typedef struct { int gcc_is_buggy; } spinlock_t;
+ #define SPIN_LOCK_UNLOCKED { 0 }
+#endif
#define spin_lock_init(lock) do { } while(0)
#define spin_lock(lock) do { } while(0)
@@ -61,14 +68,14 @@ typedef struct {
#define spin_lock_init(x) do { (x)->lock = 0; } while (0)
#define spin_trylock(lock) (!test_and_set_bit(0,(lock)))
-#define spin_lock(x) do {unsigned long __spinflags; save_flags(__spinflags); cli(); if ((x)->lock&&(x)->babble) {printk("%s: spin_lock(%s:%p) already locked\n", __BASE_FILE__, (x)->module, (x));(x)->babble--;} (x)->lock = 1; restore_flags(__spinflags);} while (0)
-#define spin_unlock_wait(x) do {unsigned long __spinflags; save_flags(__spinflags); cli(); if ((x)->lock&&(x)->babble) {printk("%s: spin_unlock_wait(%s:%p) deadlock\n", __BASE_FILE__, (x)->module, (x));(x)->babble--;} restore_flags(__spinflags);} while (0)
-#define spin_unlock(x) do {unsigned long __spinflags; save_flags(__spinflags); cli(); if (!(x)->lock&&(x)->babble) {printk("%s: spin_unlock(%s:%p) not locked\n", __BASE_FILE__, (x)->module, (x));(x)->babble--;} (x)->lock = 0; restore_flags(__spinflags);} while (0)
-#define spin_lock_irq(x) do {cli(); if ((x)->lock&&(x)->babble) {printk("%s: spin_lock_irq(%s:%p) already locked\n", __BASE_FILE__, (x)->module, (x));(x)->babble--;} (x)->lock = 1;} while (0)
-#define spin_unlock_irq(x) do {cli(); if ((x)->lock&&(x)->babble) {printk("%s: spin_lock(%s:%p) already locked\n", __BASE_FILE__, (x)->module, (x));(x)->babble--;} (x)->lock = 1; sti();} while (0)
+#define spin_lock(x) do {unsigned long __spinflags; save_flags(__spinflags); cli(); if ((x)->lock&&(x)->babble) {printk("%s:%d: spin_lock(%s:%p) already locked\n", __BASE_FILE__,__LINE__, (x)->module, (x));(x)->babble--;} (x)->lock = 1; restore_flags(__spinflags);} while (0)
+#define spin_unlock_wait(x) do {unsigned long __spinflags; save_flags(__spinflags); cli(); if ((x)->lock&&(x)->babble) {printk("%s:%d: spin_unlock_wait(%s:%p) deadlock\n", __BASE_FILE__,__LINE__, (x)->module, (x));(x)->babble--;} restore_flags(__spinflags);} while (0)
+#define spin_unlock(x) do {unsigned long __spinflags; save_flags(__spinflags); cli(); if (!(x)->lock&&(x)->babble) {printk("%s:%d: spin_unlock(%s:%p) not locked\n", __BASE_FILE__,__LINE__, (x)->module, (x));(x)->babble--;} (x)->lock = 0; restore_flags(__spinflags);} while (0)
+#define spin_lock_irq(x) do {cli(); if ((x)->lock&&(x)->babble) {printk("%s:%d: spin_lock_irq(%s:%p) already locked\n", __BASE_FILE__,__LINE__, (x)->module, (x));(x)->babble--;} (x)->lock = 1;} while (0)
+#define spin_unlock_irq(x) do {cli(); if (!(x)->lock&&(x)->babble) {printk("%s:%d: spin_lock(%s:%p) not locked\n", __BASE_FILE__,__LINE__, (x)->module, (x));(x)->babble--;} (x)->lock = 0; sti();} while (0)
-#define spin_lock_irqsave(x,flags) do {save_flags(flags); cli(); if ((x)->lock&&(x)->babble) {printk("%s: spin_lock_irqsave(%s:%p) already locked\n", __BASE_FILE__, (x)->module, (x));(x)->babble--;} (x)->lock = 1;} while (0)
-#define spin_unlock_irqrestore(x,flags) do {cli(); if (!(x)->lock&&(x)->babble) {printk("%s: spin_unlock_irqrestore(%s:%p) not locked\n", __BASE_FILE__, (x)->module, (x));(x)->babble--;} (x)->lock = 0; restore_flags(flags);} while (0)
+#define spin_lock_irqsave(x,flags) do {save_flags(flags); cli(); if ((x)->lock&&(x)->babble) {printk("%s:%d: spin_lock_irqsave(%s:%p) already locked\n", __BASE_FILE__,__LINE__, (x)->module, (x));(x)->babble--;} (x)->lock = 1;} while (0)
+#define spin_unlock_irqrestore(x,flags) do {cli(); if (!(x)->lock&&(x)->babble) {printk("%s:%d: spin_unlock_irqrestore(%s:%p) not locked\n", __BASE_FILE__,__LINE__, (x)->module, (x));(x)->babble--;} (x)->lock = 0; restore_flags(flags);} while (0)
#endif /* DEBUG_SPINLOCKS */
@@ -128,8 +135,7 @@ typedef struct {
typedef struct { unsigned long a[100]; } __dummy_lock_t;
#define __dummy_lock(lock) (*(__dummy_lock_t *)(lock))
-#define spin_lock(lock) \
-__asm__ __volatile__( \
+#define spin_lock_string \
"\n1:\t" \
"lock ; btsl $0,%0\n\t" \
"jc 2f\n" \
@@ -138,12 +144,19 @@ __asm__ __volatile__( \
"testb $1,%0\n\t" \
"jne 2b\n\t" \
"jmp 1b\n" \
- ".previous" \
+ ".previous"
+
+#define spin_unlock_string \
+ "lock ; btrl $0,%0"
+
+#define spin_lock(lock) \
+__asm__ __volatile__( \
+ spin_lock_string \
:"=m" (__dummy_lock(lock)))
#define spin_unlock(lock) \
__asm__ __volatile__( \
- "lock ; btrl $0,%0" \
+ spin_unlock_string \
:"=m" (__dummy_lock(lock)))
#define spin_trylock(lock) (!test_and_set_bit(0,(lock)))
diff --git a/include/asm-i386/string.h b/include/asm-i386/string.h
index df02f7809..65d72fabf 100644
--- a/include/asm-i386/string.h
+++ b/include/asm-i386/string.h
@@ -403,7 +403,7 @@ extern inline void * __constant_memcpy(void * to, const void * from, size_t n)
case 4:
*(unsigned long *)to = *(const unsigned long *)from;
return to;
- case 6: /* for ethernet addresses */
+ case 6: /* for Ethernet addresses */
*(unsigned long *)to = *(const unsigned long *)from;
*(2+(unsigned short *)to) = *(2+(const unsigned short *)from);
return to;
diff --git a/include/asm-i386/system.h b/include/asm-i386/system.h
index 88c8ebc99..91b98d5e8 100644
--- a/include/asm-i386/system.h
+++ b/include/asm-i386/system.h
@@ -1,6 +1,7 @@
#ifndef __ASM_SYSTEM_H
#define __ASM_SYSTEM_H
+#include <linux/kernel.h>
#include <asm/segment.h>
/*
@@ -35,84 +36,37 @@ __asm__("str %%ax\n\t" \
:"=a" (n) \
:"0" (0),"i" (FIRST_TSS_ENTRY<<3))
-/* This special macro can be used to load a debugging register */
-
-#define loaddebug(tsk,register) \
- __asm__("movl %0,%%db" #register \
- : /* no output */ \
- :"r" (tsk->debugreg[register]))
+#ifdef __KERNEL__
+struct task_struct; /* one of the stranger aspects of C forward declarations.. */
+extern void FASTCALL(__switch_to(struct task_struct *prev, struct task_struct *next));
/*
- * switch_to(n) should switch tasks to task nr n, first
- * checking that n isn't the current task, in which case it does nothing.
- * This also clears the TS-flag if the task we switched to has used
- * the math co-processor latest.
- *
- * It also reloads the debug regs if necessary..
+ * We do most of the task switching in C, but we need
+ * to do the EIP/ESP switch in assembly..
*/
-
-
-#ifdef __SMP__
- /*
- * Keep the lock depth straight. If we switch on an interrupt from
- * kernel->user task we need to lose a depth, and if we switch the
- * other way we need to gain a depth. Same layer switches come out
- * the same.
- *
- * We spot a switch in user mode because the kernel counter is the
- * same as the interrupt counter depth. (We never switch during the
- * message/invalidate IPI).
- *
- * We fsave/fwait so that an exception goes off at the right time
- * (as a call from the fsave or fwait in effect) rather than to
- * the wrong process.
- */
-
-#define switch_to(prev,next) do { \
- if(prev->flags&PF_USEDFPU) \
- { \
- __asm__ __volatile__("fnsave %0":"=m" (prev->tss.i387.hard)); \
- __asm__ __volatile__("fwait"); \
- prev->flags&=~PF_USEDFPU; \
- } \
-__asm__("ljmp %0\n\t" \
- : /* no output */ \
- :"m" (*(((char *)&next->tss.tr)-4)), \
- "c" (next)); \
- /* Now maybe reload the debug registers */ \
- if(prev->debugreg[7]){ \
- loaddebug(prev,0); \
- loaddebug(prev,1); \
- loaddebug(prev,2); \
- loaddebug(prev,3); \
- loaddebug(prev,6); \
- loaddebug(prev,7); \
- } \
+#define switch_to(prev,next) do { \
+ unsigned long eax, edx, ecx; \
+ asm volatile("pushl %%ebx\n\t" \
+ "pushl %%esi\n\t" \
+ "pushl %%edi\n\t" \
+ "pushl %%ebp\n\t" \
+ "movl %%esp,%0\n\t" /* save ESP */ \
+ "movl %5,%%esp\n\t" /* restore ESP */ \
+ "movl $1f,%1\n\t" /* save EIP */ \
+ "pushl %6\n\t" /* restore EIP */ \
+ "jmp __switch_to\n" \
+ "1:\t" \
+ "popl %%ebp\n\t" \
+ "popl %%edi\n\t" \
+ "popl %%esi\n\t" \
+ "popl %%ebx" \
+ :"=m" (prev->tss.esp),"=m" (prev->tss.eip), \
+ "=a" (eax), "=d" (edx), "=c" (ecx) \
+ :"m" (next->tss.esp),"m" (next->tss.eip), \
+ "a" (prev), "d" (next)); \
} while (0)
-#else
-#define switch_to(prev,next) do { \
-__asm__("ljmp %0\n\t" \
- "cmpl %1,"SYMBOL_NAME_STR(last_task_used_math)"\n\t" \
- "jne 1f\n\t" \
- "clts\n" \
- "1:" \
- : /* no outputs */ \
- :"m" (*(((char *)&next->tss.tr)-4)), \
- "r" (prev), "r" (next)); \
- /* Now maybe reload the debug registers */ \
- if(prev->debugreg[7]){ \
- loaddebug(prev,0); \
- loaddebug(prev,1); \
- loaddebug(prev,2); \
- loaddebug(prev,3); \
- loaddebug(prev,6); \
- loaddebug(prev,7); \
- } \
-} while (0)
-#endif
-
#define _set_base(addr,base) \
__asm__("movw %%dx,%0\n\t" \
"rorl $16,%%edx\n\t" \
@@ -157,15 +111,26 @@ static inline unsigned long _get_base(char * addr)
#define get_base(ldt) _get_base( ((char *)&(ldt)) )
-static inline unsigned long get_limit(unsigned long segment)
-{
- unsigned long __limit;
- __asm__("lsll %1,%0"
- :"=r" (__limit):"r" (segment));
- return __limit+1;
-}
-
-#define nop() __asm__ __volatile__ ("nop")
+/*
+ * Load a segment. Fall back on loading the zero
+ * segment if something goes wrong..
+ */
+#define loadsegment(seg,value) \
+ asm volatile("\n" \
+ "1:\t" \
+ "movl %0,%%" #seg "\n" \
+ "2:\n" \
+ ".section fixup,\"ax\"\n" \
+ "3:\t" \
+ "pushl $0\n\t" \
+ "popl %%" #seg "\n\t" \
+ "jmp 2b\n" \
+ ".previous\n" \
+ ".section __ex_table,\"a\"\n\t" \
+ ".align 4\n\t" \
+ ".long 1b,3b\n" \
+ ".previous" \
+ : :"m" (*(unsigned int *)&(value)))
/*
* Clear and set 'TS' bit respectively
@@ -180,6 +145,17 @@ __asm__ __volatile__ ( \
: /* no inputs */ \
:"ax")
+#endif /* __KERNEL__ */
+
+static inline unsigned long get_limit(unsigned long segment)
+{
+ unsigned long __limit;
+ __asm__("lsll %1,%0"
+ :"=r" (__limit):"r" (segment));
+ return __limit+1;
+}
+
+#define nop() __asm__ __volatile__ ("nop")
#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
#define tas(ptr) (xchg((ptr),1))
diff --git a/include/asm-i386/termios.h b/include/asm-i386/termios.h
index 6deebbb03..b2b77853f 100644
--- a/include/asm-i386/termios.h
+++ b/include/asm-i386/termios.h
@@ -47,6 +47,7 @@ struct termio {
#define N_AX25 5
#define N_X25 6 /* X.25 async */
#define N_6PACK 7
+#define N_MASC 8 /* Reserved fo Mobitex module <kaz@cafe.net> */
#ifdef __KERNEL__
diff --git a/include/asm-i386/timex.h b/include/asm-i386/timex.h
new file mode 100644
index 000000000..c492e1b93
--- /dev/null
+++ b/include/asm-i386/timex.h
@@ -0,0 +1,15 @@
+/*
+ * linux/include/asm-i386/timex.h
+ *
+ * i386 architecture timex specifications
+ */
+#ifndef _ASMi386_TIMEX_H
+#define _ASMi386_TIMEX_H
+
+#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
+#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */
+#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
+ (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
+ << (SHIFT_SCALE-SHIFT_HZ)) / HZ)
+
+#endif
diff --git a/include/asm-i386/unistd.h b/include/asm-i386/unistd.h
index 018f6f0f5..1b23625c6 100644
--- a/include/asm-i386/unistd.h
+++ b/include/asm-i386/unistd.h
@@ -27,7 +27,7 @@
#define __NR_lseek 19
#define __NR_getpid 20
#define __NR_mount 21
-#define __NR_umount 22
+#define __NR_oldumount 22
#define __NR_setuid 23
#define __NR_getuid 24
#define __NR_stime 25
@@ -57,7 +57,7 @@
#define __NR_geteuid 49
#define __NR_getegid 50
#define __NR_acct 51
-#define __NR_phys 52
+#define __NR_umount 52
#define __NR_lock 53
#define __NR_ioctl 54
#define __NR_fcntl 55
@@ -191,6 +191,10 @@
#define __NR_getcwd 183
#define __NR_capget 184
#define __NR_capset 185
+#define __NR_sigaltstack 186
+#define __NR_sendfile 187
+#define __NR_streams1 188 /* some people actually want it */
+#define __NR_streams2 189 /* some people actually want it */
/* user-visible error numbers are in the range -1 - -122: see <asm-i386/errno.h> */
diff --git a/include/asm-i386/user.h b/include/asm-i386/user.h
index b5acf0e74..b0d067e7a 100644
--- a/include/asm-i386/user.h
+++ b/include/asm-i386/user.h
@@ -79,7 +79,7 @@ struct user{
esp register. */
long int signal; /* Signal that caused the core dump. */
int reserved; /* No longer used */
- struct pt_regs * u_ar0; /* Used by gdb to help find the values for */
+ struct user_pt_regs * u_ar0; /* Used by gdb to help find the values for */
/* the registers. */
struct user_i387_struct* u_fpstate; /* Math Co-processor pointer. */
unsigned long magic; /* To uniquely identify a core file */
diff --git a/include/asm-i386/vga.h b/include/asm-i386/vga.h
new file mode 100644
index 000000000..ef0c0e50c
--- /dev/null
+++ b/include/asm-i386/vga.h
@@ -0,0 +1,20 @@
+/*
+ * Access to VGA videoram
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ */
+
+#ifndef _LINUX_ASM_VGA_H_
+#define _LINUX_ASM_VGA_H_
+
+/*
+ * On the PC, we can just recalculate addresses and then
+ * access the videoram directly without any black magic.
+ */
+
+#define VGA_MAP_MEM(x) (unsigned long)phys_to_virt(x)
+
+#define vga_readb(x) (*(x))
+#define vga_writeb(x,y) (*(y) = (x))
+
+#endif
diff --git a/include/asm-i386/vm86.h b/include/asm-i386/vm86.h
index 88d0bf510..40ec82c69 100644
--- a/include/asm-i386/vm86.h
+++ b/include/asm-i386/vm86.h
@@ -60,7 +60,7 @@
#define VM86_GET_AND_RESET_IRQ 6
/*
- * This is the stack-layout seen by the user space programm when we have
+ * This is the stack-layout seen by the user space program when we have
* done a translation of "SAVE_ALL" from vm86 mode. The real kernel layout
* is 'kernel_vm86_regs' (see below).
*/
@@ -193,7 +193,7 @@ struct kernel_vm86_struct {
* this way. In front of 'return-eip' may be some data, depending on
* compilation, so we don't rely on this and save the pointer to 'oldregs'
* in 'regs32' above.
- * However, with GCC-2.7.2 and the the current CFLAGS you see exactly this:
+ * However, with GCC-2.7.2 and the current CFLAGS you see exactly this:
long return-eip; from call to vm86()
struct pt_regs oldregs; user space registers as saved by syscall
diff --git a/include/asm-m68k/adb.h b/include/asm-m68k/adb.h
new file mode 100644
index 000000000..9176b5518
--- /dev/null
+++ b/include/asm-m68k/adb.h
@@ -0,0 +1,75 @@
+/*
+ * Definitions for talking to ADB and CUDA. The CUDA is a microcontroller
+ * which controls the ADB, system power, RTC, and various other things on
+ * later Macintoshes
+ *
+ * Copyright (C) 1996 Paul Mackerras.
+ */
+
+/* First byte sent to or received from CUDA */
+#define ADB_PACKET 0
+#define CUDA_PACKET 1
+#define ERROR_PACKET 2
+#define TIMER_PACKET 3
+#define POWER_PACKET 4
+#define MACIIC_PACKET 5
+
+/* ADB commands (2nd byte) */
+#define ADB_BUSRESET 0
+#define ADB_FLUSH(id) (1 + ((id) << 4))
+#define ADB_WRITEREG(id, reg) (8 + (reg) + ((id) << 4))
+#define ADB_READREG(id, reg) (0xc + (reg) + ((id) << 4))
+
+/* ADB default device IDs (upper 4 bits of 2nd byte) */
+#define ADB_DONGLE 1 /* "software execution control" devices */
+#define ADB_KEYBOARD 2
+#define ADB_MOUSE 3
+#define ADB_TABLET 4
+#define ADB_MODEM 5
+#define ADB_MISC 7 /* maybe a monitor */
+
+/* CUDA commands (2nd byte) */
+#define CUDA_WARM_START 0
+#define CUDA_AUTOPOLL 1
+#define CUDA_GET_6805_ADDR 2
+#define CUDA_GET_TIME 3
+#define CUDA_GET_PRAM 7
+#define CUDA_SET_6805_ADDR 8
+#define CUDA_SET_TIME 9
+#define CUDA_POWERDOWN 0xa
+#define CUDA_POWERUP_TIME 0xb
+#define CUDA_SET_PRAM 0xc
+#define CUDA_MS_RESET 0xd
+#define CUDA_SEND_DFAC 0xe
+#define CUDA_RESET_SYSTEM 0x11
+#define CUDA_SET_IPL 0x12
+#define CUDA_SET_AUTO_RATE 0x14
+#define CUDA_GET_AUTO_RATE 0x16
+#define CUDA_SET_DEVICE_LIST 0x19
+#define CUDA_GET_DEVICE_LIST 0x1a
+#define CUDA_GET_SET_IIC 0x22
+
+#ifdef __KERNEL__
+
+struct adb_request {
+ unsigned char data[16];
+ int nbytes;
+ unsigned char reply[16];
+ int reply_len;
+ unsigned char reply_expected;
+ unsigned char sent;
+ unsigned char got_reply;
+ void (*done)(struct adb_request *);
+ void *arg;
+ struct adb_request *next;
+};
+
+void via_adb_init(void);
+int adb_request(struct adb_request *req,
+ void (*done)(struct adb_request *), int nbytes, ...);
+int adb_send_request(struct adb_request *req);
+void adb_poll(void);
+int adb_register(int default_id,
+ void (*handler)(unsigned char *, int, struct pt_regs *));
+
+#endif /* __KERNEL */
diff --git a/include/asm-m68k/amigahw.h b/include/asm-m68k/amigahw.h
index caaa8d0de..a5d105979 100644
--- a/include/asm-m68k/amigahw.h
+++ b/include/asm-m68k/amigahw.h
@@ -332,4 +332,4 @@ struct tod2000 {
#define TOD2000_HOUR1_PM (1<<2)
#define TOD_2000 ((struct tod2000 *)(zTwoBase+0xDC0000))
-#endif /* __ASMm68k_AMIGAHW_H */
+#endif /* _M68K_AMIGAHW_H */
diff --git a/include/asm-m68k/amigardb.h b/include/asm-m68k/amigardb.h
deleted file mode 100644
index 57032469d..000000000
--- a/include/asm-m68k/amigardb.h
+++ /dev/null
@@ -1,126 +0,0 @@
-#ifndef _LINUX_AMIGARDB_H
-#define _LINUX_AMIGARDB_H 1
-
-#define ULONG u_long
-#define LONG long
-#define UBYTE u_char
-
-/* definitions for the Amiga RigidDiskBlock layout, which always starts in
- cylinder 0 of a medium. Taken from page 254f of the RKM: Devices */
-
-struct RigidDiskBlock {
- ULONG rdb_ID; /* 4 character identifier */
- ULONG rdb_SummedLongs; /* size of this checksummed structure */
- LONG rdb_ChkSum; /* block checksum (longword sum to zero) */
- ULONG rdb_HostID; /* SCSI Target ID of host */
- ULONG rdb_BlockBytes; /* size of disk blocks */
- ULONG rdb_Flags; /* see below for defines */
- /* block list heads */
- ULONG rdb_BadBlockList; /* optional bad block list */
- ULONG rdb_PartitionList; /* optional first partition block */
- ULONG rdb_FileSysHeaderList; /* optional file system header block */
- ULONG rdb_DriveInit; /* optional drive-specific init code */
- /* DriveInit(lun,rdb,ior): "C" stk & d0/a0/a1 */
- ULONG rdb_Reserved1[6]; /* set to $ffffffff */
- /* physical drive characteristics */
- ULONG rdb_Cylinders; /* number of drive cylinders */
- ULONG rdb_Sectors; /* sectors per track */
- ULONG rdb_Heads; /* number of drive heads */
- ULONG rdb_Interleave; /* interleave */
- ULONG rdb_Park; /* landing zone cylinder */
- ULONG rdb_Reserved2[3];
- ULONG rdb_WritePreComp; /* starting cylinder: write precompensation */
- ULONG rdb_ReducedWrite; /* starting cylinder: reduced write current */
- ULONG rdb_StepRate; /* drive step rate */
- ULONG rdb_Reserved3[5];
- /* logical drive characteristics */
- ULONG rdb_RDBBlocksLo; /* low block of range reserved for hardblocks */
- ULONG rdb_RDBBlocksHi; /* high block of range for these hardblocks */
- ULONG rdb_LoCylinder; /* low cylinder of partitionable disk area */
- ULONG rdb_HiCylinder; /* high cylinder of partitionable data area */
- ULONG rdb_CylBlocks; /* number of blocks available per cylinder */
- ULONG rdb_AutoParkSeconds; /* zero for no auto park */
- ULONG rdb_HighRDSKBlock; /* highest block used by RDSK */
- /* (not including replacement bad blocks) */
- ULONG rdb_Reserved4;
- /* drive identification */
- char rdb_DiskVendor[8];
- char rdb_DiskProduct[16];
- char rdb_DiskRevision[4];
- char rdb_ControllerVendor[8];
- char rdb_ControllerProduct[16];
- char rdb_ControllerRevision[4];
- ULONG rdb_Reserved5[10];
-};
-
-#define IDNAME_RIGIDDISK 0x5244534B /* 'RDSK' */
-
-#define RDB_LOCATION_LIMIT 16
-
-#define RDBFB_LAST 0 /* no disks exist to be configured after */
-#define RDBFF_LAST 0x01L /* this one on this controller */
-#define RDBFB_LASTLUN 1 /* no LUNs exist to be configured greater */
-#define RDBFF_LASTLUN 0x02L /* than this one at this SCSI Target ID */
-#define RDBFB_LASTTID 2 /* no Target IDs exist to be configured */
-#define RDBFF_LASTTID 0x04L /* greater than this one on this SCSI bus */
-#define RDBFB_NORESELECT 3 /* don't bother trying to perform reselection */
-#define RDBFF_NORESELECT 0x08L /* when talking to this drive */
-#define RDBFB_DISKID 4 /* rdb_Disk... identification valid */
-#define RDBFF_DISKID 0x10L
-#define RDBFB_CTRLRID 5 /* rdb_Controller... identification valid */
-#define RDBFF_CTRLRID 0x20L
- /* added 7/20/89 by commodore: */
-#define RDBFB_SYNCH 6 /* drive supports scsi synchronous mode */
-#define RDBFF_SYNCH 0x40L /* CAN BE DANGEROUS TO USE IF IT DOESN'T! */
-
-struct PartitionBlock {
- ULONG pb_ID; /* 4 character identifier */
- ULONG pb_SummedLongs; /* size of this checksummed structure */
- LONG pb_ChkSum; /* block checksum (longword sum to zero) */
- ULONG pb_HostID; /* SCSI Target ID of host */
- ULONG pb_Next; /* block number of the next PartitionBlock */
- ULONG pb_Flags; /* see below for defines */
- ULONG pb_Reserved1[2];
- ULONG pb_DevFlags; /* preferred flags for OpenDevice */
- UBYTE pb_DriveName[32]; /* preferred DOS device name: BSTR form */
- /* (not used if this name is in use) */
- ULONG pb_Reserved2[15]; /* filler to 32 longwords */
- ULONG pb_Environment[17]; /* environment vector for this partition */
- ULONG pb_EReserved[15]; /* reserved for future environment vector */
-};
-
-#define IDNAME_PARTITION 0x50415254 /* 'PART' */
-
-#define PBFB_BOOTABLE 0 /* this partition is intended to be bootable */
-#define PBFF_BOOTABLE 1L /* (expected directories and files exist) */
-#define PBFB_NOMOUNT 1 /* do not mount this partition (e.g. manually */
-#define PBFF_NOMOUNT 2L /* mounted, but space reserved here) */
-
-/* this is from <dos/filehandler.h> */
-
-#define DE_TABLESIZE 0 /* minimum value is 11 (includes NumBuffers) */
-#define DE_SIZEBLOCK 1 /* in longwords: standard value is 128 */
-#define DE_SECORG 2 /* not used; must be 0 */
-#define DE_NUMHEADS 3 /* # of heads (surfaces). drive specific */
-#define DE_SECSPERBLK 4 /* not used; must be 1 */
-#define DE_BLKSPERTRACK 5 /* blocks per track. drive specific */
-#define DE_RESERVEDBLKS 6 /* unavailable blocks at start. usually 2 */
-#define DE_PREFAC 7 /* not used; must be 0 */
-#define DE_INTERLEAVE 8 /* usually 0 */
-#define DE_LOWCYL 9 /* starting cylinder. typically 0 */
-#define DE_UPPERCYL 10 /* max cylinder. drive specific */
-#define DE_NUMBUFFERS 11 /* starting # of buffers. typically 5 */
-#define DE_MEMBUFTYPE 12 /* type of mem to allocate for buffers. */
-#define DE_BUFMEMTYPE 12 /* same as above, better name
- * 1 is public, 3 is chip, 5 is fast */
-#define DE_MAXTRANSFER 13 /* Max number bytes to transfer at a time */
-#define DE_MASK 14 /* Address Mask to block out certain memory */
-#define DE_BOOTPRI 15 /* Boot priority for autoboot */
-#define DE_DOSTYPE 16 /* ASCII (HEX) string showing filesystem type;
- * 0X444F5300 is old filesystem,
- * 0X444F5301 is fast file system */
-#define DE_BAUD 17 /* Baud rate for serial handler */
-#define DE_CONTROL 18 /* Control word for handler/filesystem */
-#define DE_BOOTBLOCKS 19 /* Number of blocks containing boot code */
-
-#endif /* _LINUX_AMIGARDB_H */
diff --git a/include/asm-m68k/amigayle.h b/include/asm-m68k/amigayle.h
new file mode 100644
index 000000000..f890d41ae
--- /dev/null
+++ b/include/asm-m68k/amigayle.h
@@ -0,0 +1,105 @@
+/*
+** asm-m68k/amigayle.h -- This header defines the registers of the gayle chip
+** found on the Amiga 1200
+** This information was found by disassembling card.resource,
+** so the definitions may not be 100% correct
+** anyone has an official doc ?
+**
+** Copyright 1997 by Alain Malek
+**
+** This file is subject to the terms and conditions of the GNU General Public
+** License. See the file COPYING in the main directory of this archive
+** for more details.
+**
+** Created: 11/28/97 by Alain Malek
+*/
+
+#ifndef _M68K_AMIGAYLE_H_
+#define _M68K_AMIGAYLE_H_
+
+#include <asm/amigahw.h>
+#include <asm/io.h>
+
+/* memory layout */
+
+#define GAYLE_RAM (0x600000+zTwoBase)
+#define GAYLE_RAMSIZE (0x400000)
+#define GAYLE_ATTRIBUTE (0xa00000+zTwoBase)
+#define GAYLE_ATTRIBUTESIZE (0x020000)
+#define GAYLE_IO (0xa20000+zTwoBase) /* 16bit and even 8bit registers */
+#define GAYLE_IOSIZE (0x010000)
+#define GAYLE_IO_8BITODD (0xa30000+zTwoBase) /* odd 8bit registers */
+
+/* offset for accessing odd IO registers */
+#define GAYLE_ODD (GAYLE_IO_8BITODD-GAYLE_IO-1)
+
+/* GAYLE registers */
+
+struct GAYLE {
+ u_char cardstatus;
+ u_char pad0[0x1000-1];
+
+ u_char intreq;
+ u_char pad1[0x1000-1];
+
+ u_char inten;
+ u_char pad2[0x1000-1];
+
+ u_char config;
+ u_char pad3[0x1000-1];
+};
+
+#define GAYLE_ADDRESS (0xda8000) /* gayle main registers base address */
+
+#define GAYLE_RESET (0xa40000) /* write 0x00 to start reset,
+ read 1 byte to stop reset */
+
+#define gayle (*(volatile struct GAYLE *)(zTwoBase+GAYLE_ADDRESS))
+#define gayle_reset (*(volatile u_char *)(zTwoBase+GAYLE_RESET))
+
+#define gayle_attribute ((volatile u_char *)(GAYLE_ATTRIBUTE))
+
+#define gayle_inb(a) readb( GAYLE_IO+(a)+(((a)&1)*GAYLE_ODD) )
+#define gayle_outb(v,a) writeb( v, GAYLE_IO+(a)+(((a)&1)*GAYLE_ODD) )
+
+#define gayle_inw(a) readw( GAYLE_IO+(a) )
+#define gayle_outw(v,a) writew( v, GAYLE_IO+(a) )
+
+/* GAYLE_CARDSTATUS bit def */
+
+#define GAYLE_CS_CCDET 0x40 /* credit card detect */
+#define GAYLE_CS_BVD1 0x20 /* battery voltage detect 1 */
+#define GAYLE_CS_SC 0x20 /* credit card status change */
+#define GAYLE_CS_BVD2 0x10 /* battery voltage detect 2 */
+#define GAYLE_CS_DA 0x10 /* digital audio */
+#define GAYLE_CS_WR 0x08 /* write enable (1 == enabled) */
+#define GAYLE_CS_BSY 0x04 /* credit card busy */
+#define GAYLE_CS_IRQ 0x04 /* interrupt request */
+
+/* GAYLE_IRQ bit def */
+
+#define GAYLE_IRQ_IDE 0x80
+#define GAYLE_IRQ_CCDET 0x40
+#define GAYLE_IRQ_BVD1 0x20
+#define GAYLE_IRQ_SC 0x20
+#define GAYLE_IRQ_BVD2 0x10
+#define GAYLE_IRQ_DA 0x10
+#define GAYLE_IRQ_WR 0x08
+#define GAYLE_IRQ_BSY 0x04
+#define GAYLE_IRQ_IRQ 0x04
+#define GAYLE_IRQ_IDEACK1 0x02
+#define GAYLE_IRQ_IDEACK0 0x01
+
+/* GAYLE_CONFIG bit def
+ (bit 0-1 for program voltage, bit 2-3 for access speed */
+
+#define GAYLE_CFG_0V 0x00
+#define GAYLE_CFG_5V 0x01
+#define GAYLE_CFG_12V 0x02
+
+#define GAYLE_CFG_100NS 0x08
+#define GAYLE_CFG_150NS 0x04
+#define GAYLE_CFG_250NS 0x00
+#define GAYLE_CFG_720NS 0x0c
+
+#endif /* asm-m68k/amigayle.h */
diff --git a/include/asm-m68k/amipcmcia.h b/include/asm-m68k/amipcmcia.h
new file mode 100644
index 000000000..78ffce6aa
--- /dev/null
+++ b/include/asm-m68k/amipcmcia.h
@@ -0,0 +1,110 @@
+/*
+** asm-m68k/pcmcia.h -- Amiga Linux PCMCIA Definitions
+**
+** Copyright 1997 by Alain Malek
+**
+** This file is subject to the terms and conditions of the GNU General Public
+** License. See the file COPYING in the main directory of this archive
+** for more details.
+**
+** Created: 12/10/97 by Alain Malek
+*/
+
+#ifndef __AMIGA_PCMCIA_H__
+#define __AMIGA_PCMCIA_H__
+
+#include <asm/amigayle.h>
+
+/* prototypes */
+
+void pcmcia_reset(void);
+int pcmcia_copy_tuple(unsigned char tuple_id, void *tuple, int max_len);
+void pcmcia_program_voltage(int voltage);
+void pcmcia_access_speed(int speed);
+void pcmcia_write_enable(void);
+void pcmcia_write_disable(void);
+
+static inline u_char pcmcia_read_status(void)
+{
+ return (gayle.cardstatus & 0x7c);
+}
+
+static inline u_char pcmcia_get_intreq(void)
+{
+ return (gayle.intreq);
+}
+
+static inline void pcmcia_ack_int(u_char intreq)
+{
+ gayle.intreq = ((intreq & 0x2c) ^ 0x2c) | 0xc0;
+}
+
+static inline void pcmcia_enable_irq(void)
+{
+ gayle.inten = GAYLE_IRQ_IDE|GAYLE_IRQ_IRQ;
+}
+
+static inline void pcmcia_disable_irq(void)
+{
+ gayle.inten = GAYLE_IRQ_IDE;
+}
+
+#define PCMCIA_INSERTED (gayle.cardstatus & GAYLE_CS_CCDET)
+
+/* valid voltages for pcmcia_ProgramVoltage */
+
+#define PCMCIA_0V 0
+#define PCMCIA_5V 5
+#define PCMCIA_12V 12
+
+/* valid speeds for pcmcia_AccessSpeed */
+
+#define PCMCIA_SPEED_100NS 100
+#define PCMCIA_SPEED_150NS 150
+#define PCMCIA_SPEED_250NS 250
+#define PCMCIA_SPEED_720NS 720
+
+/* PCMCIA Tuple codes */
+
+#define CISTPL_NULL 0x00
+#define CISTPL_DEVICE 0x01
+#define CISTPL_LONGLINK_CB 0x02
+#define CISTPL_CONFIG_CB 0x04
+#define CISTPL_CFTABLE_ENTRY_CB 0x05
+#define CISTPL_LONGLINK_MFC 0x06
+#define CISTPL_BAR 0x07
+#define CISTPL_CHECKSUM 0x10
+#define CISTPL_LONGLINK_A 0x11
+#define CISTPL_LONGLINK_C 0x12
+#define CISTPL_LINKTARGET 0x13
+#define CISTPL_NO_LINK 0x14
+#define CISTPL_VERS_1 0x15
+#define CISTPL_ALTSTR 0x16
+#define CISTPL_DEVICE_A 0x17
+#define CISTPL_JEDEC_C 0x18
+#define CISTPL_JEDEC_A 0x19
+#define CISTPL_CONFIG 0x1a
+#define CISTPL_CFTABLE_ENTRY 0x1b
+#define CISTPL_DEVICE_OC 0x1c
+#define CISTPL_DEVICE_OA 0x1d
+#define CISTPL_DEVICE_GEO 0x1e
+#define CISTPL_DEVICE_GEO_A 0x1f
+#define CISTPL_MANFID 0x20
+#define CISTPL_FUNCID 0x21
+#define CISTPL_FUNCE 0x22
+#define CISTPL_SWIL 0x23
+#define CISTPL_END 0xff
+
+/* FUNCID */
+
+#define CISTPL_FUNCID_MULTI 0x00
+#define CISTPL_FUNCID_MEMORY 0x01
+#define CISTPL_FUNCID_SERIAL 0x02
+#define CISTPL_FUNCID_PARALLEL 0x03
+#define CISTPL_FUNCID_FIXED 0x04
+#define CISTPL_FUNCID_VIDEO 0x05
+#define CISTPL_FUNCID_NETWORK 0x06
+#define CISTPL_FUNCID_AIMS 0x07
+#define CISTPL_FUNCID_SCSI 0x08
+
+#endif
diff --git a/include/asm-m68k/atari_SCCserial.h b/include/asm-m68k/atari_SCCserial.h
index 0ab7c15d0..481bd0e11 100644
--- a/include/asm-m68k/atari_SCCserial.h
+++ b/include/asm-m68k/atari_SCCserial.h
@@ -29,8 +29,9 @@
* clock sources */
#define SCC_BAUD_BASE_MVME_PCLK 781250 /* 12.5 MHz */
-#define SCC_BAUD_BASE_BVM 460800 /* 7.3728 MHz */
#define SCC_BAUD_BASE_MVME 625000 /* 10.000 MHz */
+#define SCC_BAUD_BASE_BVME_PCLK 781250 /* 12.5 MHz */ /* XXX ??? */
+#define SCC_BAUD_BASE_BVME 460800 /* 7.3728 MHz */
/* The SCC configuration structure */
diff --git a/include/asm-m68k/atari_mouse.h b/include/asm-m68k/atari_mouse.h
deleted file mode 100644
index 003bf2b21..000000000
--- a/include/asm-m68k/atari_mouse.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef _LINUX_ATARI_MOUSE_H
-#define _LINUX_ATARI_MOUSE_H
-
-/*
- * linux/include/linux/atari_mouse.h
- * header file for Atari Mouse driver
- * by Robert de Vries (robert@and.nl) on 19Jul93
- */
-
-struct mouse_status {
- char buttons;
- short dx;
- short dy;
- int ready;
- int active;
- struct wait_queue *wait;
- struct fasync_struct *fasyncptr;
-};
-
-#endif
diff --git a/include/asm-m68k/bitops.h b/include/asm-m68k/bitops.h
index b2a335a7d..97aac09b2 100644
--- a/include/asm-m68k/bitops.h
+++ b/include/asm-m68k/bitops.h
@@ -210,6 +210,34 @@ extern __inline__ unsigned long ffz(unsigned long word)
return res ^ 31;
}
+#ifdef __KERNEL__
+
+/*
+ * ffs: find first bit set. This is defined the same way as
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+
+extern __inline__ int ffs(int x)
+{
+ int cnt;
+
+ asm ("bfffo %1{#0:#0}" : "=d" (cnt) : "dm" (x & -x));
+
+ return 32 - cnt;
+}
+
+/*
+ * hweightN: returns the hamming weight (i.e. the number
+ * of bits set) of a N-bit word
+ */
+
+#define hweight32(x) generic_hweight32(x)
+#define hweight16(x) generic_hweight16(x)
+#define hweight8(x) generic_hweight8(x)
+
+#endif /* __KERNEL__ */
+
/* Bitmap functions for the minix filesystem */
extern __inline__ int
diff --git a/include/asm-m68k/blinken.h b/include/asm-m68k/blinken.h
new file mode 100644
index 000000000..a6b60dec2
--- /dev/null
+++ b/include/asm-m68k/blinken.h
@@ -0,0 +1,27 @@
+/*
+** asm/blinken.h -- m68k blinkenlights support (currently hp300 only)
+**
+** (c) 1998 Phil Blundell <philb@gnu.org>
+**
+** This file is subject to the terms and conditions of the GNU General Public
+** License. See the file COPYING in the main directory of this archive
+** for more details.
+**
+*/
+
+#ifndef _M68K_BLINKEN_H
+#define _M68K_BLINKEN_H
+
+#include <asm/setup.h>
+
+#define HP300_LEDS 0xf001ffff
+
+static __inline__ void blinken_leds(int x)
+{
+ if (MACH_IS_HP300)
+ {
+ *((volatile unsigned char *)HP300_LEDS) = (x);
+ }
+}
+
+#endif
diff --git a/include/asm-m68k/bootinfo.h b/include/asm-m68k/bootinfo.h
index 279f82a16..c0a7e6cb0 100644
--- a/include/asm-m68k/bootinfo.h
+++ b/include/asm-m68k/bootinfo.h
@@ -109,7 +109,7 @@ BIR_data = BIR_size+2
#define ATARI_MACH_AB40 3 /* Afterburner040 on Falcon */
/*
- * Macintosh-specific tags
+ * Macintosh-specific tags (all u_long)
*/
#define BI_MAC_MODEL 0x8000 /* Mac Gestalt ID (model type) */
@@ -123,9 +123,37 @@ BIR_data = BIR_size+2
#define BI_MAC_GMTBIAS 0x8008 /* Mac GMT timezone offset */
#define BI_MAC_MEMSIZE 0x8009 /* Mac RAM size (sanity check) */
#define BI_MAC_CPUID 0x800a /* Mac CPU type (sanity check) */
+#define BI_MAC_ROMBASE 0x800b /* Mac system ROM base address */
+
+ /*
+ * Macintosh hardware profile data - unused, see macintosh.h for
+ * resonable type values
+ */
+
+#define BI_MAC_VIA1BASE 0x8010 /* Mac VIA1 base address (always present) */
+#define BI_MAC_VIA2BASE 0x8011 /* Mac VIA2 base address (type varies) */
+#define BI_MAC_VIA2TYPE 0x8012 /* Mac VIA2 type (VIA, RBV, OSS) */
+#define BI_MAC_ADBTYPE 0x8013 /* Mac ADB interface type */
+#define BI_MAC_ASCBASE 0x8014 /* Mac Apple Sound Chip base address */
+#define BI_MAC_SCSI5380 0x8015 /* Mac NCR 5380 SCSI (base address, multi) */
+#define BI_MAC_SCSIDMA 0x8016 /* Mac SCSI DMA (base address) */
+#define BI_MAC_SCSI5396 0x8017 /* Mac NCR 53C96 SCSI (base address, multi) */
+#define BI_MAC_IDETYPE 0x8018 /* Mac IDE interface type */
+#define BI_MAC_IDEBASE 0x8019 /* Mac IDE interface base address */
+#define BI_MAC_NUBUS 0x801a /* Mac Nubus type (none, regular, pseudo) */
+#define BI_MAC_SLOTMASK 0x801b /* Mac Nubus slots present */
+#define BI_MAC_SCCTYPE 0x801c /* Mac SCC serial type (normal, IOP) */
+#define BI_MAC_ETHTYPE 0x801d /* Mac builtin ethernet type (Sonic, MACE */
+#define BI_MAC_ETHBASE 0x801e /* Mac builtin ethernet base address */
+#define BI_MAC_PMU 0x801f /* Mac power managment / poweroff hardware */
+#define BI_MAC_IOP_SWIM 0x8020 /* Mac SWIM floppy IOP */
+#define BI_MAC_IOP_ADB 0x8021 /* Mac ADB IOP */
/*
* Mac: compatibility with old booter data format (temporarily)
+ * Fields unused with the new bootinfo can be deleted now; instead of
+ * adding new fields the struct might be splitted into a hardware address
+ * part and a hardware type part
*/
#ifndef __ASSEMBLY__
@@ -198,6 +226,7 @@ struct bootversion {
#define ATARI_BOOTI_VERSION MK_BI_VERSION( 2, 1 )
#define MAC_BOOTI_VERSION MK_BI_VERSION( 2, 0 )
#define MVME16x_BOOTI_VERSION MK_BI_VERSION( 2, 0 )
+#define BVME6000_BOOTI_VERSION MK_BI_VERSION( 2, 0 )
#ifdef BOOTINFO_COMPAT_1_0
@@ -233,10 +262,6 @@ struct compat_bi_Atari {
#ifndef __ASSEMBLY__
-#define MACHW_DECLARE(name) unsigned name : 1
-#define MACHW_SET(name) (boot_info.bi_mac.hw_present.name = 1)
-#define MACHW_PRESENT(name) (boot_info.bi_mac.hw_present.name)
-
struct compat_bi_Macintosh
{
unsigned long videoaddr;
@@ -261,25 +286,6 @@ struct compat_bi_Macintosh
unsigned long rombase;
unsigned long adbdelay;
unsigned long timedbra;
- struct {
- /* video hardware */
- /* sound hardware */
- /* disk storage interfaces */
- MACHW_DECLARE(MAC_SCSI); /* Directly mapped NCR5380 */
- MACHW_DECLARE(IDE); /* IDE Interface */
- /* other I/O hardware */
- MACHW_DECLARE(SCC); /* Serial Communications Contr. */
- /* DMA */
- MACHW_DECLARE(SCSI_DMA); /* DMA for the NCR5380 */
- /* real time clocks */
- MACHW_DECLARE(RTC_CLK); /* clock chip */
- /* supporting hardware */
- MACHW_DECLARE(VIA1); /* Versatile Interface Ad. 1 */
- MACHW_DECLARE(VIA2); /* Versatile Interface Ad. 2 */
- MACHW_DECLARE(RBV); /* Versatile Interface Ad. 2+ */
- /* NUBUS */
- MACHW_DECLARE(NUBUS); /* NUBUS */
- } hw_present;
};
#else
diff --git a/include/asm-m68k/bvme6000hw.h b/include/asm-m68k/bvme6000hw.h
new file mode 100644
index 000000000..0218c29dc
--- /dev/null
+++ b/include/asm-m68k/bvme6000hw.h
@@ -0,0 +1,129 @@
+#ifndef _M68K_BVME6000HW_H_
+#define _M68K_BVME6000HW_H_
+
+#include <asm/irq.h>
+
+/*
+ * PIT structure
+ */
+
+#define BVME_PIT_BASE 0xffa00000
+
+typedef struct {
+ unsigned char
+ pad_a[3], pgcr,
+ pad_b[3], psrr,
+ pad_c[3], paddr,
+ pad_d[3], pbddr,
+ pad_e[3], pcddr,
+ pad_f[3], pivr,
+ pad_g[3], pacr,
+ pad_h[3], pbcr,
+ pad_i[3], padr,
+ pad_j[3], pbdr,
+ pad_k[3], paar,
+ pad_l[3], pbar,
+ pad_m[3], pcdr,
+ pad_n[3], psr,
+ pad_o[3], res1,
+ pad_p[3], res2,
+ pad_q[3], tcr,
+ pad_r[3], tivr,
+ pad_s[3], res3,
+ pad_t[3], cprh,
+ pad_u[3], cprm,
+ pad_v[3], cprl,
+ pad_w[3], res4,
+ pad_x[3], crh,
+ pad_y[3], crm,
+ pad_z[3], crl,
+ pad_A[3], tsr,
+ pad_B[3], res5;
+} PitRegs_t, *PitRegsPtr;
+
+#define bvmepit ((*(volatile PitRegsPtr)(BVME_PIT_BASE)))
+
+#define BVME_RTC_BASE 0xff900000
+
+typedef struct {
+ unsigned char
+ pad_a[3], msr,
+ pad_b[3], t0cr_rtmr,
+ pad_c[3], t1cr_omr,
+ pad_d[3], pfr_icr0,
+ pad_e[3], irr_icr1,
+ pad_f[3], bcd_tenms,
+ pad_g[3], bcd_sec,
+ pad_h[3], bcd_min,
+ pad_i[3], bcd_hr,
+ pad_j[3], bcd_dom,
+ pad_k[3], bcd_mth,
+ pad_l[3], bcd_year,
+ pad_m[3], bcd_ujcc,
+ pad_n[3], bcd_hjcc,
+ pad_o[3], bcd_dow,
+ pad_p[3], t0lsb,
+ pad_q[3], t0msb,
+ pad_r[3], t1lsb,
+ pad_s[3], t1msb,
+ pad_t[3], cmp_sec,
+ pad_u[3], cmp_min,
+ pad_v[3], cmp_hr,
+ pad_w[3], cmp_dom,
+ pad_x[3], cmp_mth,
+ pad_y[3], cmp_dow,
+ pad_z[3], sav_sec,
+ pad_A[3], sav_min,
+ pad_B[3], sav_hr,
+ pad_C[3], sav_dom,
+ pad_D[3], sav_mth,
+ pad_E[3], ram,
+ pad_F[3], test;
+} RtcRegs_t, *RtcPtr_t;
+
+
+#define BVME_I596_BASE 0xff100000
+
+#define BVME_ETHIRQ_REG 0xff20000b
+
+#define BVME_LOCAL_IRQ_STAT 0xff20000f
+
+#define BVME_ETHERR 0x02
+#define BVME_ABORT_STATUS 0x08
+
+#define BVME_NCR53C710_BASE 0xff000000
+
+#define BVME_SCC_A_ADDR 0xffb0000b
+#define BVME_SCC_B_ADDR 0xffb00003
+
+#define BVME_CONFIG_REG 0xff500003
+
+#define config_reg_ptr (unsigned char *)BVME_CONFIG_REG
+
+#define BVME_CONFIG_SW1 0x08
+#define BVME_CONFIG_SW2 0x04
+#define BVME_CONFIG_SW3 0x02
+#define BVME_CONFIG_SW4 0x01
+
+
+#define BVME_IRQ_TYPE_PRIO 0
+
+#define BVME_IRQ_PRN 0x54
+#define BVME_IRQ_I596 0x1a
+#define BVME_IRQ_SCSI 0x1b
+#define BVME_IRQ_TIMER 0x59
+#define BVME_IRQ_RTC 0x1e
+#define BVME_IRQ_ABORT 0x1f
+
+/* SCC interrupts */
+#define BVME_IRQ_SCC_BASE 0x40
+#define BVME_IRQ_SCCB_TX 0x40
+#define BVME_IRQ_SCCB_STAT 0x42
+#define BVME_IRQ_SCCB_RX 0x44
+#define BVME_IRQ_SCCB_SPCOND 0x46
+#define BVME_IRQ_SCCA_TX 0x48
+#define BVME_IRQ_SCCA_STAT 0x4a
+#define BVME_IRQ_SCCA_RX 0x4c
+#define BVME_IRQ_SCCA_SPCOND 0x4e
+
+#endif
diff --git a/include/asm-m68k/checksum.h b/include/asm-m68k/checksum.h
index 8b7f9d162..d4a6e6fb9 100644
--- a/include/asm-m68k/checksum.h
+++ b/include/asm-m68k/checksum.h
@@ -39,6 +39,10 @@ extern unsigned int
csum_partial_copy_from_user ( const char *src, char *dst,
int len, int sum, int *csum_err);
+/* FIXME: this needs to be written to really do no check -- Cort */
+#define csum_partial_copy_nocheck(src, dst, len, sum) \
+ csum_partial_copy((src), (dst), (len), (sum))
+
/*
* This is a version of ip_compute_csum() optimized for IP headers,
* which always checksum on 4 octet boundaries.
diff --git a/include/asm-m68k/entry.h b/include/asm-m68k/entry.h
index 2c3182696..b1c102ce2 100644
--- a/include/asm-m68k/entry.h
+++ b/include/asm-m68k/entry.h
@@ -45,6 +45,7 @@ LTASK_FLAGS = 4
LTASK_SIGPENDING = 8
LTASK_ADDRLIMIT = 12
LTASK_EXECDOMAIN = 16
+LTASK_NEEDRESCHED = 20
LTSS_KSP = 0
LTSS_USP = 4
@@ -54,7 +55,7 @@ LTSS_CRP = 12
LTSS_FPCTXT = 24
/* the following macro is used when enabling interrupts */
-#if defined(MACH_ATARI_ONLY) && !defined(CONFIG_HADES)
+#if defined(CONFIG_ATARI_ONLY) && !defined(CONFIG_HADES)
/* block out HSYNC on the atari */
#define ALLOWINT 0xfbff
#define MAX_NOINT_IPL 3
diff --git a/include/asm-m68k/hardirq.h b/include/asm-m68k/hardirq.h
index 76968803b..350fc0f69 100644
--- a/include/asm-m68k/hardirq.h
+++ b/include/asm-m68k/hardirq.h
@@ -5,6 +5,8 @@
extern unsigned int local_irq_count[NR_CPUS];
+#define in_interrupt() (local_irq_count[smp_processor_id()] + local_bh_count[smp_processor_id()] != 0)
+
#define hardirq_trylock(cpu) (++local_irq_count[cpu], (cpu) == 0)
#define hardirq_endlock(cpu) (--local_irq_count[cpu])
diff --git a/include/asm-m68k/hwtest.h b/include/asm-m68k/hwtest.h
new file mode 100644
index 000000000..17d3f0ad7
--- /dev/null
+++ b/include/asm-m68k/hwtest.h
@@ -0,0 +1,15 @@
+/* Routines to test for presence/absence of hardware registers:
+ * see arch/m68k/mm/hwtest.c.
+ * -- PMM <pmaydell@chiark.greenend.org.uk> 05/1998
+ *
+ * Removed initfunc from decls. We might want them in modules, and
+ * the code is tiny anyway. 16/5/98 pb
+ */
+
+#ifndef __ASM_HWTEST_H
+#define __ASM_HWTEST_H
+
+extern int hwreg_present(volatile void *regp);
+extern int hwreg_write(volatile void *regp, unsigned short val);
+
+#endif
diff --git a/include/asm-m68k/ide.h b/include/asm-m68k/ide.h
index a69ef5b18..abcd0da25 100644
--- a/include/asm-m68k/ide.h
+++ b/include/asm-m68k/ide.h
@@ -41,6 +41,10 @@
#include <asm/atari_stdma.h>
#endif
+#ifdef CONFIG_MAC
+#include <asm/macints.h>
+#endif
+
typedef unsigned char * ide_ioreg_t;
#ifndef MAX_HWIFS
@@ -71,6 +75,10 @@ typedef union {
} b;
} select_t;
+#ifdef CONFIG_MAC /* MSch: Hack; wrapper for ide_intr */
+void mac_ide_intr(int irq, void *dev_id, struct pt_regs *regs);
+#endif
+
static __inline__ int ide_request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *),
unsigned long flags, const char *device, void *dev_id)
{
@@ -78,6 +86,14 @@ static __inline__ int ide_request_irq(unsigned int irq, void (*handler)(int, voi
if (MACH_IS_AMIGA)
return request_irq(irq, handler, 0, device, dev_id);
#endif /* CONFIG_AMIGA */
+#ifdef CONFIG_MAC
+ if (MACH_IS_MAC)
+#if 0 /* MSch Hack: maybe later we'll call ide_intr without a wrapper */
+ return nubus_request_irq(12, dev_id, handler);
+#else
+ return nubus_request_irq(12, dev_id, mac_ide_intr);
+#endif
+#endif /* CONFIG_MAC */
return 0;
}
@@ -87,6 +103,10 @@ static __inline__ void ide_free_irq(unsigned int irq, void *dev_id)
if (MACH_IS_AMIGA)
free_irq(irq, dev_id);
#endif /* CONFIG_AMIGA */
+#ifdef CONFIG_MAC
+ if (MACH_IS_MAC)
+ nubus_free_irq(12);
+#endif /* CONFIG_MAC */
}
/*
@@ -117,81 +137,83 @@ static __inline__ void ide_release_region (ide_ioreg_t from, unsigned int extent
#define insl(data_reg, buffer, wcount) insw(data_reg, buffer, (wcount)<<1)
#define outsl(data_reg, buffer, wcount) outsw(data_reg, buffer, (wcount)<<1)
-#define insw(port, buf, nr) \
- if ((nr) % 16) \
- __asm__ __volatile__ \
- ("movel %0,%/a0; \
- movel %1,%/a1; \
- movel %2,%/d6; \
- subql #1,%/d6; \
- 1:movew %/a0@,%/a1@+; \
- dbra %/d6,1b" : \
- : "g" (port), "g" (buf), "g" (nr) \
- : "a0", "a1", "d6"); \
- else \
- __asm__ __volatile__ \
- ("movel %0,%/a0; \
- movel %1,%/a1; \
- movel %2,%/d6; \
- lsrl #4,%/d6; \
- subql #1,%/d6; \
- 1:movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- movew %/a0@,%/a1@+; \
- dbra %/d6,1b" : \
- : "g" (port), "g" (buf), "g" (nr) \
- : "a0", "a1", "d6")
-
-#define outsw(port, buf, nr) \
- if ((nr) % 16) \
- __asm__ __volatile__ \
- ("movel %0,%/a0; \
- movel %1,%/a1; \
- movel %2,%/d6; \
- subql #1,%/d6; \
- 1:movew %/a1@+,%/a0@; \
- dbra %/d6,1b" : \
- : "g" (port), "g" (buf), "g" (nr) \
- : "a0", "a1", "d6"); \
- else \
- __asm__ __volatile__ \
- ("movel %0,%/a0; \
- movel %1,%/a1; \
- movel %2,%/d6; \
- lsrl #4,%/d6; \
- subql #1,%/d6; \
- 1:movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- movew %/a1@+,%/a0@; \
- dbra %/d6,1b" : \
- : "g" (port), "g" (buf), "g" (nr) \
- : "a0", "a1", "d6")
+#define insw(port, buf, nr) ({ \
+ unsigned char *_port = (unsigned char *)(port); \
+ unsigned char *_buf = (buf); \
+ int _nr = (nr); \
+ unsigned long _tmp; \
+ \
+ if (_nr & 15) { \
+ _tmp = (_nr & 15) - 1; \
+ asm volatile ( \
+ "1: movew %2@,%3@+; dbra %4,1b" \
+ : "=a" (_buf), "=d" (_tmp) \
+ : "a" (_port), "0" (_buf), \
+ "1" (_tmp)); \
+ } \
+ _tmp = (_nr >> 4) - 1; \
+ asm volatile ( \
+ "1: " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "movew %2@,%3@+; " \
+ "dbra %4,1b" \
+ : "=a" (_buf), "=d" (_tmp) \
+ : "a" (_port), "0" (_buf), \
+ "1" (_tmp)); \
+})
+
+#define outsw(port, buf, nr) ({ \
+ unsigned char *_port = (unsigned char *)(port); \
+ unsigned char *_buf = (buf); \
+ int _nr = (nr); \
+ unsigned long _tmp; \
+ \
+ if (_nr & 15) { \
+ _tmp = (_nr & 15) - 1; \
+ asm volatile ( \
+ "1: movew %3@,%2@+; dbra %4,1b" \
+ : "=a" (_buf), "=d" (_tmp) \
+ : "a" (_port), "0" (_buf), \
+ "1" (_tmp)); \
+ } \
+ _tmp = (_nr >> 4) - 1; \
+ asm volatile ( \
+ "1: " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "movew %3@+,%2@; " \
+ "dbra %4,1b" \
+ : "=a" (_buf), "=d" (_tmp) \
+ : "a" (_port), "0" (_buf), \
+ "1" (_tmp)); \
+})
#ifdef CONFIG_ATARI
#define insl_swapw(data_reg, buffer, wcount) \
@@ -310,11 +332,11 @@ static __inline__ void ide_release_region (ide_ioreg_t from, unsigned int extent
#define D_INT(cnt) (T_INT | (cnt))
#define D_TEXT(cnt) (T_TEXT | (cnt))
-#ifdef CONFIG_AMIGA
+#if defined(CONFIG_AMIGA) || defined (CONFIG_MAC)
static u_short driveid_types[] = {
D_SHORT(10), /* config - vendor2 */
D_TEXT(20), /* serial_no */
- D_SHORT(3), /* buf_type - ecc_bytes */
+ D_SHORT(3), /* buf_type, buf_size - ecc_bytes */
D_TEXT(48), /* fw_rev - model */
D_CHAR(2), /* max_multsect - vendor3 */
D_SHORT(1), /* dword_io */
@@ -333,12 +355,12 @@ static u_short driveid_types[] = {
static __inline__ void ide_fix_driveid(struct hd_driveid *id)
{
-#ifdef CONFIG_AMIGA
+#if defined(CONFIG_AMIGA) || defined (CONFIG_MAC)
u_char *p = (u_char *)id;
int i, j, cnt;
u_char t;
- if (!MACH_IS_AMIGA)
+ if (!MACH_IS_AMIGA && !MACH_IS_MAC)
return;
for (i = 0; i < num_driveid_types; i++) {
cnt = driveid_types[i] & T_MASK_COUNT;
@@ -423,7 +445,7 @@ static __inline__ void ide_get_lock (int *ide_lock, void (*handler)(int, void *,
* an interrupt, and in that case it does nothing. Hope that is reasonable and
* works. (Roman)
*/
-#if defined(CONFIG_ATARI) && !defined(CONFIG_AMIGA)
+#ifdef CONFIG_ATARI_ONLY
#define ide__sti() \
do { \
if (!in_interrupt()) __sti(); \
diff --git a/include/asm-m68k/io.h b/include/asm-m68k/io.h
index 8cee601e6..a002fe2a0 100644
--- a/include/asm-m68k/io.h
+++ b/include/asm-m68k/io.h
@@ -28,9 +28,9 @@
#define readl(addr) \
({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; })
-#define writeb(b,addr) ((*(volatile unsigned char *) (addr)) = (b))
-#define writew(b,addr) ((*(volatile unsigned short *) (addr)) = (b))
-#define writel(b,addr) ((*(volatile unsigned int *) (addr)) = (b))
+#define writeb(b,addr) (void)((*(volatile unsigned char *) (addr)) = (b))
+#define writew(b,addr) (void)((*(volatile unsigned short *) (addr)) = (b))
+#define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
#define memset_io(a,b,c) memset((void *)(a),(b),(c))
#define memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c))
diff --git a/include/asm-m68k/keyboard.h b/include/asm-m68k/keyboard.h
index cb013200b..c30c8dc04 100644
--- a/include/asm-m68k/keyboard.h
+++ b/include/asm-m68k/keyboard.h
@@ -24,7 +24,7 @@ static __inline__ int kbd_setkeycode(unsigned int scancode,
static __inline__ int kbd_getkeycode(unsigned int scancode)
{
- return -EOPNOTSUPP;
+ return scancode > 127 ? -EINVAL : scancode;
}
static __inline__ int kbd_pretranslate(unsigned char scancode, char raw_mode)
diff --git a/include/asm-m68k/kgdb.h b/include/asm-m68k/kgdb.h
new file mode 100644
index 000000000..e1d3c493f
--- /dev/null
+++ b/include/asm-m68k/kgdb.h
@@ -0,0 +1,83 @@
+/*
+ * include/asm-m68k/kgdb.h
+ *
+ * Copyright (C) 1996 Roman Hodek
+ */
+
+#ifndef __ASM_M68k_KGDB_H
+#define __ASM_M68k_KGDB_H
+
+/*
+ * Structure to save all register values in, already in the order gdb wants
+ * it. Note that the upper half of the SR field is recycled for the FORMAT and
+ * VECTOR fields. Hope that doesn't confuse gdb... That upper half is ignored
+ * on exiting the stub, so gdb can modify it as it likes.
+ */
+
+#define GDBREG_A6 14
+#define GDBREG_A7 15
+#define GDBREG_SP 15
+#define GDBREG_SR 16
+#define GDBREG_PC 17
+#define GDBREG_FP0 18
+#define GDBREG_FP7 25
+#define GDBREG_FPCR 26
+#define GDBREG_FPIAR 28
+
+#define GDBOFFA_D6 (6*4)
+#define GDBOFFA_A3 (11*4)
+
+#define NUMREGSBYTES 180
+
+#ifndef __ASSEMBLY__
+
+struct gdb_regs {
+ long regs[16]; /* d0-a7 */
+ unsigned format : 4; /* frame format specifier */
+ unsigned vector : 12; /* vector offset */
+ unsigned short sr; /* status register */
+ unsigned long pc; /* program counter */
+ unsigned long fpregs[8*3]; /* fp0-fp7 */
+ unsigned long fpcntl[3]; /* fpcr, fpsr, fpiar */
+};
+
+extern struct gdb_regs kgdb_registers;
+extern void kgdb_init( void );
+struct frame;
+extern asmlinkage void enter_kgdb( struct pt_regs *fp );
+
+extern int kgdb_initialized;
+
+/*
+ * This function will generate a breakpoint exception. It is used at the
+ * beginning of a program to sync up with a debugger and can be used
+ * otherwise as a quick means to stop program execution and "break" into
+ * the debugger.
+ */
+extern inline void breakpoint( void )
+{
+ if (!kgdb_initialized)
+ /* if kgdb not inited, do nothing */
+ return;
+
+ /* breakpoint instruction is TRAP #15 */
+ __asm__ __volatile__ ( "trap #15" );
+}
+
+/*
+ * This function will report a SIGABORT to gdb.
+ */
+extern inline void kgdb_abort( void )
+{
+ if (!kgdb_initialized)
+ /* if kgdb not inited, do nothing */
+ return;
+
+ /* TRAP #14 is reported as SIGABORT */
+ __asm__ __volatile__ ( "trap #14" );
+}
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_M68k_KGDB_H */
+
diff --git a/include/asm-m68k/linux_logo.h b/include/asm-m68k/linux_logo.h
new file mode 100644
index 000000000..e57168b1e
--- /dev/null
+++ b/include/asm-m68k/linux_logo.h
@@ -0,0 +1,46 @@
+/* $Id: linux_logo.h,v 1.1 1997/04/16 17:51:24 jj Exp $
+ * include/asm-m68k/linux_logo.h: This is a linux logo
+ * to be displayed on boot.
+ *
+ * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
+ * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
+ *
+ * You can put anything here, but:
+ * LINUX_LOGO_COLORS has to be less than 224
+ * image size has to be 80x80
+ * values have to start from 0x20
+ * (i.e. RGB(linux_logo_red[0],
+ * linux_logo_green[0],
+ * linux_logo_blue[0]) is color 0x20)
+ * BW image has to be 80x80 as well, with MS bit
+ * on the left
+ * Serial_console ascii image can be any size,
+ * but should contain %s to display the version
+ */
+
+#include <linux/init.h>
+#include <linux/version.h>
+
+#define linux_logo_banner "Linux/m68k version " UTS_RELEASE
+
+#define LINUX_LOGO_COLORS 221
+
+#ifdef INCLUDE_LINUX_LOGO_DATA
+
+#define INCLUDE_LINUX_LOGO16
+#include <linux/linux_logo.h>
+
+#else
+
+/* prototypes only */
+extern unsigned char linux_logo_red[];
+extern unsigned char linux_logo_green[];
+extern unsigned char linux_logo_blue[];
+extern unsigned char linux_logo[];
+extern unsigned char linux_logo_bw[];
+extern unsigned char linux_logo16_red[];
+extern unsigned char linux_logo16_green[];
+extern unsigned char linux_logo16_blue[];
+extern unsigned char linux_logo16[];
+
+#endif
diff --git a/include/asm-m68k/machdep.h b/include/asm-m68k/machdep.h
index b5be7c65d..5e2b138e9 100644
--- a/include/asm-m68k/machdep.h
+++ b/include/asm-m68k/machdep.h
@@ -13,6 +13,7 @@ extern void (*mach_sched_init) (void (*handler)(int, void *, struct pt_regs *));
extern int (*mach_keyb_init) (void);
extern int (*mach_kbdrate) (struct kbd_repeat *);
extern void (*mach_kbd_leds) (unsigned int);
+extern void (*kbd_reset_setup) (char *, int);
/* machine dependent irq functions */
extern void (*mach_init_IRQ) (void);
extern void (*(*mach_default_handler)[]) (int, void *, struct pt_regs *);
diff --git a/include/asm-m68k/machw.h b/include/asm-m68k/machw.h
index 4012d8111..90ff6b627 100644
--- a/include/asm-m68k/machw.h
+++ b/include/asm-m68k/machw.h
@@ -99,10 +99,48 @@ struct VIA
# define via_1 ((*(volatile struct VIA *)VIA1_BAS))
# define via_2 ((*(volatile struct VIA *)VIA2_BAS))
-# define via1_regp ((volatile unsigned char *)VIA1_BAS)
-
-# define via2_regp ((volatile unsigned char *)VIA2_BAS)
-# define via2_ci_regp ((volatile unsigned char *)VIA2_BAS_IIci)
-# define rbv_regp ((volatile unsigned char *)VIA2_BAS_IIci)
+# define via1_regp ((volatile unsigned char *)VIA1_BAS)
+/*
+ * OSS/RBV base address
+ */
+
+#define OSS_BAS 0x50f1a000
+#define PSC_BAS 0x50f31000
+
+/* move to oss.h?? */
+#define nIFR 0x203
+#define oIFR 0x202
+
+
+/* hardware stuff */
+
+#define MACHW_DECLARE(name) unsigned name : 1
+#define MACHW_SET(name) (mac_hw_present.name = 1)
+#define MACHW_PRESENT(name) (mac_hw_present.name)
+
+struct {
+ /* video hardware */
+ /* sound hardware */
+ /* disk storage interfaces */
+ MACHW_DECLARE(MAC_SCSI_80); /* Directly mapped NCR5380 */
+ MACHW_DECLARE(MAC_SCSI_96); /* 53c9[46] */
+ MACHW_DECLARE(MAC_SCSI_96_2); /* 2nd 53c9[46] Q900 and Q950 */
+ MACHW_DECLARE(IDE); /* IDE Interface */
+ /* other I/O hardware */
+ MACHW_DECLARE(SCC); /* Serial Communications Contr. */
+ /* DMA */
+ MACHW_DECLARE(SCSI_DMA); /* DMA for the NCR5380 */
+ /* real time clocks */
+ MACHW_DECLARE(RTC_CLK); /* clock chip */
+ /* supporting hardware */
+ MACHW_DECLARE(VIA1); /* Versatile Interface Ad. 1 */
+ MACHW_DECLARE(VIA2); /* Versatile Interface Ad. 2 */
+ MACHW_DECLARE(RBV); /* Versatile Interface Ad. 2+ */
+ /* NUBUS */
+ MACHW_DECLARE(NUBUS); /* NUBUS */
+} mac_hw_present;
+
+/* extern struct mac_hw_present mac_hw_present; */
+
#endif /* linux/machw.h */
diff --git a/include/asm-m68k/macintosh.h b/include/asm-m68k/macintosh.h
index f40ff86c5..a084447f5 100644
--- a/include/asm-m68k/macintosh.h
+++ b/include/asm-m68k/macintosh.h
@@ -56,6 +56,8 @@ struct mac_model
#define MAC_ADB_II 1
#define MAC_ADB_IISI 2
#define MAC_ADB_CUDA 3
+#define MAC_ADB_PB1 4
+#define MAC_ADB_PB2 5
#define MAC_VIA_II 1
#define MAC_VIA_IIci 2
@@ -74,6 +76,7 @@ struct mac_model
#define MAC_SCC_II 1
#define MAC_SCC_QUADRA 2
#define MAC_SCC_QUADRA2 3
+#define MAC_SCC_IOP 4
#define MAC_ETHER_NONE 0
#define MAC_ETHER_SONIC 1
@@ -92,8 +95,9 @@ struct mac_model
#define MAC_MODEL_IICI 11
#define MAC_MODEL_IIFX 13 /* And well numbered it is too */
#define MAC_MODEL_IISI 18
+#define MAC_MODEL_LC 19
#define MAC_MODEL_Q900 20
-#define MAC_MODEL_PB170 25
+#define MAC_MODEL_PB170 21
#define MAC_MODEL_Q700 22
#define MAC_MODEL_CLII 23
#define MAC_MODEL_PB140 25
@@ -109,6 +113,7 @@ struct mac_model
#define MAC_MODEL_LCII 37 /* aka: P400/405/410/430 */
#define MAC_MODEL_PB250 38
#define MAC_MODEL_IIVI 44
+#define MAC_MODEL_P600 45
#define MAC_MODEL_IIVX 48
#define MAC_MODEL_CCL 49
#define MAC_MODEL_PB165C 50
@@ -123,13 +128,16 @@ struct mac_model
#define MAC_MODEL_PB270C 77
#define MAC_MODEL_Q840 78
#define MAC_MODEL_P550 80
+#define MAC_MODEL_CCLII 83
#define MAC_MODEL_PB165 84
#define MAC_MODEL_PB190 85
#define MAC_MODEL_TV 88
#define MAC_MODEL_P475 89 /* aka: LC475, P476 */
+#define MAC_MODEL_P475F 90 /* aka: P475 w/ FPU (no LC040) */
#define MAC_MODEL_P575 92 /* aka: LC575/580, P577/578/508 */
#define MAC_MODEL_Q605 94
#define MAC_MODEL_Q630 98 /* aka: LC630, P630/631/636/640 */
+#define MAC_MODEL_P588 99 /* aka: ?? */
#define MAC_MODEL_PB280 102
#define MAC_MODEL_PB280C 103
#define MAC_MODEL_PB150 115
diff --git a/include/asm-m68k/macints.h b/include/asm-m68k/macints.h
index b2522f78d..e731c0e7f 100644
--- a/include/asm-m68k/macints.h
+++ b/include/asm-m68k/macints.h
@@ -26,9 +26,9 @@
#define VIA1_SOURCE_BASE 8
#define VIA2_SOURCE_BASE 16
-#define RBF_SOURCE_BASE 24
+#define RBV_SOURCE_BASE 24
#define MAC_SCC_SOURCE_BASE 32
-#define NUBUS_SOURCE_BASE 40
+#define NUBUS_SOURCE_BASE 56
#define NUBUS_MAX_SOURCES 8
/* FIXME: sources not contigous ... */
@@ -42,14 +42,6 @@
*/
#define IRQ_IDX(irq) (irq)
-#if 0
-/* convert vector number to int source number */
-#define IRQ_VECTOR_TO_SOURCE(v) (v)
-
-/* convert irq_handler index to vector number */
-#define IRQ_SOURCE_TO_VECTOR(i) (i)
-#endif
-
/* interrupt service types */
#define IRQ_TYPE_SLOW 0
#define IRQ_TYPE_FAST 1
@@ -96,6 +88,7 @@
#define IRQ_VIA2_6 (22)
#define IRQ_VIA2_7 (23)
+#if 0
/* RBV interrupts */
#define IRQ_RBV_0 (24)
#define IRQ_RBV_1 (25)
@@ -105,10 +98,19 @@
#define IRQ_RBV_5 (29)
#define IRQ_RBV_6 (30)
#define IRQ_RBV_7 (31)
+#endif
+
+/* Level 3 (PSC, AV Macs only) interrupts */
+#define IRQ_PSC3_0 (24)
+#define IRQ_MAC_MACE IRQ_PSC3_0
+#define IRQ_PSC3_1 (25)
+#define IRQ_PSC3_2 (26)
+#define IRQ_PSC3_3 (27)
+/* Level 4 (SCC) interrupts */
#define IRQ_SCC (32)
-#define IRQ_SCCB (32)
-#define IRQ_SCCA (33)
+#define IRQ_SCCB (33)
+#define IRQ_SCCA (34)
#if 0 /* FIXME: are there multiple interrupt conditions on the SCC ?? */
/* SCC interrupts */
#define IRQ_SCCB_TX (32)
@@ -121,7 +123,27 @@
#define IRQ_SCCA_SPCOND (39)
#endif
-#define IRQ_NUBUS_1 (40)
+/* Level 4 (PSC, AV Macs only) interrupts */
+#define IRQ_PSC4_0 (32)
+#define IRQ_PSC4_1 (33)
+#define IRQ_PSC4_2 (34)
+#define IRQ_PSC4_3 (35)
+#define IRQ_MAC_MACE_DMA IRQ_PSC4_3
+
+/* Level 5 (PSC, AV Macs only) interrupts */
+#define IRQ_PSC5_0 (40)
+#define IRQ_PSC5_1 (41)
+#define IRQ_PSC5_2 (42)
+#define IRQ_PSC5_3 (43)
+
+/* Level 6 (PSC, AV Macs only) interrupts */
+#define IRQ_PSC6_0 (48)
+#define IRQ_PSC6_1 (49)
+#define IRQ_PSC6_2 (50)
+#define IRQ_PSC6_3 (51)
+
+/* Nubus interrupts (cascaded to VIA2) */
+#define IRQ_NUBUS_1 (56)
#define INT_CLK 24576 /* CLK while int_clk =2.456MHz and divide = 100 */
#define INT_TICKS 246 /* to make sched_time = 99.902... HZ */
@@ -143,7 +165,7 @@ void mac_turnon_irq( unsigned irq );
void mac_turnoff_irq( unsigned irq );
void mac_clear_pending_irq( unsigned irq );
int mac_irq_pending( unsigned irq );
-int nubus_request_irq(int slot, void (*handler)(int,void *,struct pt_regs *));
+int nubus_request_irq(int slot, void *dev_id, void (*handler)(int,void *,struct pt_regs *));
int nubus_free_irq(int slot);
unsigned long mac_register_nubus_int( void );
diff --git a/include/asm-m68k/md.h b/include/asm-m68k/md.h
new file mode 100644
index 000000000..1d15aae21
--- /dev/null
+++ b/include/asm-m68k/md.h
@@ -0,0 +1,13 @@
+/* $Id: md.h,v 1.1 1997/12/15 15:12:04 jj Exp $
+ * md.h: High speed xor_block operation for RAID4/5
+ *
+ */
+
+#ifndef __ASM_MD_H
+#define __ASM_MD_H
+
+/* #define HAVE_ARCH_XORBLOCK */
+
+#define MD_XORBLOCK_ALIGNMENT sizeof(long)
+
+#endif /* __ASM_MD_H */
diff --git a/include/asm-m68k/mvme16xhw.h b/include/asm-m68k/mvme16xhw.h
index dbcee2672..75a21d8a4 100644
--- a/include/asm-m68k/mvme16xhw.h
+++ b/include/asm-m68k/mvme16xhw.h
@@ -34,37 +34,59 @@ typedef struct {
spare3,
spare4,
data;
-} lpr_ctrl;
+} MVMElp, *MVMElpPtr;
-#define LPR_REGS ((volatile lpr_ctrl *)0xfff42030)
+#define MVME_LPR_BASE 0xfff42030
-#define I596_BASE 0xfff46000
+#define mvmelp ((*(volatile MVMElpPtr)(MVME_LPR_BASE)))
-#define SCC_A_ADDR 0xfff45005
-#define SCC_B_ADDR 0xfff45001
-
-#define IRQ_MVME162_TYPE_PRIO 0
-
-#define IRQ_MVME167_PRN 0x54
-#define IRQ_MVME16x_I596 0x57
-#define IRQ_MVME16x_SCSI 0x55
-#define IRQ_MVME16x_FLY 0x7f
-#define IRQ_MVME167_SER_ERR 0x5c
-#define IRQ_MVME167_SER_MODEM 0x5d
-#define IRQ_MVME167_SER_TX 0x5e
-#define IRQ_MVME167_SER_RX 0x5f
-#define IRQ_MVME16x_TIMER 0x59
+typedef struct {
+ unsigned char
+ ctrl,
+ bcd_sec,
+ bcd_min,
+ bcd_hr,
+ bcd_dow,
+ bcd_dom,
+ bcd_mth,
+ bcd_year;
+} MK48T08_t, *MK48T08ptr_t;
+
+#define RTC_WRITE 0x80
+#define RTC_READ 0x40
+#define RTC_STOP 0x20
+
+#define MVME_RTC_BASE 0xfffc1ff8
+
+#define MVME_I596_BASE 0xfff46000
+
+#define MVME_SCC_A_ADDR 0xfff45005
+#define MVME_SCC_B_ADDR 0xfff45001
+
+#define MVME162_IRQ_TYPE_PRIO 0
+
+#define MVME167_IRQ_PRN 0x54
+#define MVME16x_IRQ_I596 0x57
+#define MVME16x_IRQ_SCSI 0x55
+#define MVME16x_IRQ_FLY 0x7f
+#define MVME167_IRQ_SER_ERR 0x5c
+#define MVME167_IRQ_SER_MODEM 0x5d
+#define MVME167_IRQ_SER_TX 0x5e
+#define MVME167_IRQ_SER_RX 0x5f
+#define MVME16x_IRQ_TIMER 0x59
+#define MVME167_IRQ_ABORT 0x6e
+#define MVME162_IRQ_ABORT 0x5e
/* SCC interrupts, for MVME162 */
-#define IRQ_MVME162_SCC_BASE 0x40
-#define IRQ_MVME162_SCCB_TX 0x40
-#define IRQ_MVME162_SCCB_STAT 0x42
-#define IRQ_MVME162_SCCB_RX 0x44
-#define IRQ_MVME162_SCCB_SPCOND 0x46
-#define IRQ_MVME162_SCCA_TX 0x48
-#define IRQ_MVME162_SCCA_STAT 0x4a
-#define IRQ_MVME162_SCCA_RX 0x4c
-#define IRQ_MVME162_SCCA_SPCOND 0x4e
+#define MVME162_IRQ_SCC_BASE 0x40
+#define MVME162_IRQ_SCCB_TX 0x40
+#define MVME162_IRQ_SCCB_STAT 0x42
+#define MVME162_IRQ_SCCB_RX 0x44
+#define MVME162_IRQ_SCCB_SPCOND 0x46
+#define MVME162_IRQ_SCCA_TX 0x48
+#define MVME162_IRQ_SCCA_STAT 0x4a
+#define MVME162_IRQ_SCCA_RX 0x4c
+#define MVME162_IRQ_SCCA_SPCOND 0x4e
/* MVME162 version register */
@@ -85,34 +107,4 @@ extern unsigned short mvme16x_config;
#define MVME16x_CONFIG_GOT_SCCA 0x0400
#define MVME16x_CONFIG_GOT_SCCB 0x0800
-/* Specials for the ethernet driver */
-
-#define CA() (((struct i596_reg *)dev->base_addr)->ca = 1)
-
-#define MPU_PORT(c,x) \
- ((struct i596_reg *)(dev->base_addr))->porthi = ((c) | (u32)(x)) & 0xffff; \
- ((struct i596_reg *)(dev->base_addr))->portlo = ((c) | (u32)(x)) >> 16
-
-#define SCP_SYSBUS 0x00000054
-
-#define WSWAPrfd(x) ((struct i596_rfd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
-#define WSWAPrbd(x) ((struct i596_rbd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
-#define WSWAPiscp(x) ((struct i596_iscp *)(((u32)(x)<<16) | ((((u32)(x)))>>16)))
-#define WSWAPscb(x) ((struct i596_scb *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
-#define WSWAPcmd(x) ((struct i596_cmd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
-#define WSWAPtbd(x) ((struct i596_tbd *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
-#define WSWAPchar(x) ((char *) (((u32)(x)<<16) | ((((u32)(x)))>>16)))
-
-/*
- * The MPU_PORT command allows direct access to the 82596. With PORT access
- * the following commands are available (p5-18). The 32-bit port command
- * must be word-swapped with the most significant word written first.
- */
-#define PORT_RESET 0x00 /* reset 82596 */
-#define PORT_SELFTEST 0x01 /* selftest */
-#define PORT_ALTSCP 0x02 /* alternate SCB address */
-#define PORT_ALTDUMP 0x03 /* Alternate DUMP address */
-
-#define ISCP_BUSY 0x00010000
-
-#endif /* _M68K_MVME16xHW_H_ */
+#endif
diff --git a/include/asm-m68k/page.h b/include/asm-m68k/page.h
index d8d0beafe..f9f50bff7 100644
--- a/include/asm-m68k/page.h
+++ b/include/asm-m68k/page.h
@@ -12,6 +12,9 @@
#define STRICT_MM_TYPECHECKS
+#define get_user_page(vaddr) __get_free_page(GFP_KERNEL)
+#define free_user_page(page, addr) free_page(addr)
+
/*
* We don't need to check for alignment etc.
*/
diff --git a/include/asm-m68k/pgtable.h b/include/asm-m68k/pgtable.h
index d20bc6144..d49f985bf 100644
--- a/include/asm-m68k/pgtable.h
+++ b/include/asm-m68k/pgtable.h
@@ -1,9 +1,12 @@
#ifndef _M68K_PGTABLE_H
#define _M68K_PGTABLE_H
+#include <linux/config.h>
#include <asm/setup.h>
#ifndef __ASSEMBLY__
+#include <asm/processor.h>
+#include <linux/tasks.h>
/*
* This file contains the functions and defines necessary to modify and use
@@ -263,6 +266,7 @@ extern inline void flush_tlb_kernel_page(unsigned long addr)
#define PTRS_PER_PTE 1024
#define PTRS_PER_PMD 8
#define PTRS_PER_PGD 128
+#define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE)
/* the no. of pointers that fit on a page: this will go away */
#define PTRS_PER_PAGE (PAGE_SIZE/sizeof(void*))
@@ -279,6 +283,10 @@ typedef pgd_table pgd_tablepage[PGD_TABLES_PER_PAGE];
typedef pmd_table pmd_tablepage[PMD_TABLES_PER_PAGE];
typedef pte_table pte_tablepage[PTE_TABLES_PER_PAGE];
+/* Virtual address region for use by kernel_map() */
+#define KMAP_START 0xd0000000
+#define KMAP_END 0xf0000000
+
/* Just any arbitrary offset to the start of the vmalloc VM area: the
* current 8MB value just means that there will be a 8MB "hole" after the
* physical memory until the kernel virtual memory starts. That means that
@@ -289,6 +297,7 @@ typedef pte_table pte_tablepage[PTE_TABLES_PER_PAGE];
#define VMALLOC_OFFSET (8*1024*1024)
#define VMALLOC_START (((unsigned long) high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
#define VMALLOC_VMADDR(x) ((unsigned long)(x))
+#define VMALLOC_END KMAP_START
#endif /* __ASSEMBLY__ */
@@ -325,6 +334,16 @@ typedef pte_table pte_tablepage[PTE_TABLES_PER_PAGE];
* and initialized in head.S */
extern int m68k_pgtable_cachemode;
+/* This is the cache mode for normal pages, for supervisor access on
+ * processors >= '040. It is used in pte_mkcache(), and the variable is
+ * defined and initialized in head.S */
+
+#if defined(CONFIG_060_WRITETHROUGH)
+extern int m68k_supervisor_cachemode;
+#else
+#define m68k_supervisor_cachemode _PAGE_CACHE040
+#endif
+
#if defined(CPU_M68040_OR_M68060_ONLY)
#define mm_cachebits _PAGE_CACHE040
#elif defined(CPU_M68020_OR_M68030_ONLY)
@@ -492,7 +511,7 @@ extern inline pte_t pte_mknocache(pte_t pte)
pte_val(pte) = (pte_val(pte) & _CACHEMASK040) | m68k_pgtable_cachemode;
return pte;
}
-extern inline pte_t pte_mkcache(pte_t pte) { pte_val(pte) = (pte_val(pte) & _CACHEMASK040) | _PAGE_CACHE040; return pte; }
+extern inline pte_t pte_mkcache(pte_t pte) { pte_val(pte) = (pte_val(pte) & _CACHEMASK040) | m68k_supervisor_cachemode; return pte; }
/* to set the page-dir */
extern inline void SET_PAGE_DIR(struct task_struct * tsk, pgd_t * pgdir)
@@ -584,73 +603,137 @@ static inline void cache_page (unsigned long vaddr)
}
}
+extern struct pgtable_cache_struct {
+ unsigned long *pmd_cache;
+ unsigned long *pte_cache;
+/* This counts in units of pointer tables, of which can be eight per page. */
+ unsigned long pgtable_cache_sz;
+} quicklists;
-extern const char PgtabStr_bad_pmd[];
-extern const char PgtabStr_bad_pgd[];
-extern const char PgtabStr_bad_pmdk[];
-extern const char PgtabStr_bad_pgdk[];
+#define pgd_quicklist ((unsigned long *)0)
+#define pmd_quicklist (quicklists.pmd_cache)
+#define pte_quicklist (quicklists.pte_cache)
+/* This isn't accurate because of fragmentation of allocated pages for
+ pointer tables, but that should not be a problem. */
+#define pgtable_cache_size ((quicklists.pgtable_cache_sz+7)/8)
-extern inline void pte_free(pte_t * pte)
+extern pte_t *get_pte_slow(pmd_t *pmd, unsigned long offset);
+extern pmd_t *get_pmd_slow(pgd_t *pgd, unsigned long offset);
+
+extern pmd_t *get_pointer_table(void);
+extern int free_pointer_table(pmd_t *);
+extern pmd_t *get_kpointer_table(void);
+extern void free_kpointer_table(pmd_t *);
+
+extern __inline__ pte_t *get_pte_fast(void)
+{
+ unsigned long *ret;
+
+ ret = pte_quicklist;
+ if (ret) {
+ pte_quicklist = (unsigned long *)*ret;
+ ret[0] = ret[1];
+ quicklists.pgtable_cache_sz -= 8;
+ }
+ return (pte_t *)ret;
+}
+
+extern __inline__ void free_pte_fast(pte_t *pte)
+{
+ *(unsigned long *)pte = (unsigned long)pte_quicklist;
+ pte_quicklist = (unsigned long *)pte;
+ quicklists.pgtable_cache_sz += 8;
+}
+
+extern __inline__ void free_pte_slow(pte_t *pte)
{
cache_page((unsigned long)pte);
free_page((unsigned long) pte);
}
+extern __inline__ pmd_t *get_pmd_fast(void)
+{
+ unsigned long *ret;
+
+ ret = pmd_quicklist;
+ if (ret) {
+ pmd_quicklist = (unsigned long *)*ret;
+ ret[0] = ret[1];
+ quicklists.pgtable_cache_sz--;
+ }
+ return (pmd_t *)ret;
+}
+
+extern __inline__ void free_pmd_fast(pmd_t *pmd)
+{
+ *(unsigned long *)pmd = (unsigned long)pmd_quicklist;
+ pmd_quicklist = (unsigned long *) pmd;
+ quicklists.pgtable_cache_sz++;
+}
+
+extern __inline__ int free_pmd_slow(pmd_t *pmd)
+{
+ return free_pointer_table(pmd);
+}
+
+/* The pgd cache is folded into the pmd cache, so these are dummy routines. */
+extern __inline__ pgd_t *get_pgd_fast(void)
+{
+ return (pgd_t *)0;
+}
+
+extern __inline__ void free_pgd_fast(pgd_t *pgd)
+{
+}
+
+extern __inline__ void free_pgd_slow(pgd_t *pgd)
+{
+}
+
+extern void __bad_pte(pmd_t *pmd);
+extern void __bad_pmd(pgd_t *pgd);
+
+extern inline void pte_free(pte_t * pte)
+{
+ free_pte_fast(pte);
+}
+
extern inline pte_t * pte_alloc(pmd_t * pmd, unsigned long address)
{
address = (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
if (pmd_none(*pmd)) {
- pte_t * page = (pte_t *)__get_free_page(GFP_KERNEL);
- if (pmd_none(*pmd)) {
- if (page) {
- memset((void *) page, 0, PAGE_SIZE);
- flush_page_to_ram((unsigned long)page);
- flush_tlb_kernel_page((unsigned long)page);
- nocache_page((unsigned long)page);
- pmd_set(pmd,page);
- return page + address;
- }
- pmd_set(pmd, BAD_PAGETABLE);
- return NULL;
- }
- free_page((unsigned long)page);
+ pte_t * page = get_pte_fast();
+
+ if (!page)
+ return get_pte_slow(pmd, address);
+ pmd_set(pmd,page);
+ return page + address;
}
if (pmd_bad(*pmd)) {
- printk(PgtabStr_bad_pmd, pmd_val(*pmd));
- pmd_set(pmd, BAD_PAGETABLE);
+ __bad_pte(pmd);
return NULL;
}
return (pte_t *) pmd_page(*pmd) + address;
}
-extern pmd_t *get_pointer_table (void);
-extern void free_pointer_table (pmd_t *);
-extern pmd_t *get_kpointer_table (void);
-extern void free_kpointer_table (pmd_t *);
-
extern inline void pmd_free(pmd_t * pmd)
{
- free_pointer_table (pmd);
+ free_pmd_fast(pmd);
}
extern inline pmd_t * pmd_alloc(pgd_t * pgd, unsigned long address)
{
address = (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
if (pgd_none(*pgd)) {
- pmd_t *page = get_pointer_table();
- if (pgd_none(*pgd)) {
- if (page) {
- pgd_set(pgd, page);
- return page + address;
- }
- pgd_set(pgd, (pmd_t *)BAD_PAGETABLE);
- return NULL;
- }
- free_pointer_table(page);
+ pmd_t *page = get_pmd_fast();
+
+ if (!page)
+ return get_pmd_slow(pgd, address);
+ pgd_set(pgd, page);
+ return page + address;
}
if (pgd_bad(*pgd)) {
- printk(PgtabStr_bad_pgd, pgd_val(*pgd));
- pgd_set(pgd, (pmd_t *)BAD_PAGETABLE);
+ __bad_pmd(pgd);
return NULL;
}
return (pmd_t *) pgd_page(*pgd) + address;
@@ -658,33 +741,12 @@ extern inline pmd_t * pmd_alloc(pgd_t * pgd, unsigned long address)
extern inline void pte_free_kernel(pte_t * pte)
{
- cache_page((unsigned long)pte);
- free_page((unsigned long) pte);
+ free_pte_fast(pte);
}
extern inline pte_t * pte_alloc_kernel(pmd_t * pmd, unsigned long address)
{
- address = (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
- if (pmd_none(*pmd)) {
- pte_t * page = (pte_t *) get_free_page(GFP_KERNEL);
- if (pmd_none(*pmd)) {
- if (page) {
- flush_tlb_kernel_page((unsigned long)page);
- nocache_page((unsigned long)page);
- pmd_set(pmd, page);
- return page + address;
- }
- pmd_set(pmd, BAD_PAGETABLE);
- return NULL;
- }
- free_page((unsigned long) page);
- }
- if (pmd_bad(*pmd)) {
- printk(PgtabStr_bad_pmdk, pmd_val(*pmd));
- pmd_set(pmd, BAD_PAGETABLE);
- return NULL;
- }
- return (pte_t *) pmd_page(*pmd) + address;
+ return pte_alloc(pmd, address);
}
extern inline void pmd_free_kernel(pmd_t * pmd)
@@ -708,8 +770,7 @@ extern inline pmd_t * pmd_alloc_kernel(pgd_t * pgd, unsigned long address)
free_kpointer_table(page);
}
if (pgd_bad(*pgd)) {
- printk(PgtabStr_bad_pgdk, pgd_val(*pgd));
- pgd_set(pgd, (pmd_t *)BAD_PAGETABLE);
+ __bad_pmd(pgd);
return NULL;
}
return (pmd_t *) pgd_page(*pgd) + address;
@@ -717,12 +778,21 @@ extern inline pmd_t * pmd_alloc_kernel(pgd_t * pgd, unsigned long address)
extern inline void pgd_free(pgd_t * pgd)
{
- free_pointer_table ((pmd_t *) pgd);
+ free_pmd_fast((pmd_t *)pgd);
}
extern inline pgd_t * pgd_alloc(void)
{
- return (pgd_t *)get_pointer_table ();
+ pgd_t *pgd = (pgd_t *)get_pmd_fast();
+ if (!pgd)
+ pgd = (pgd_t *)get_pointer_table();
+ return pgd;
+}
+
+extern int do_check_pgt_cache(int, int);
+
+extern inline void set_pgdir(unsigned long address, pgd_t entry)
+{
}
/*
@@ -782,4 +852,7 @@ extern inline void update_mmu_cache(struct vm_area_struct * vma,
#define module_map vmalloc
#define module_unmap vfree
+/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
+#define PageSkip(page) (0)
+
#endif /* _M68K_PGTABLE_H */
diff --git a/include/asm-m68k/posix_types.h b/include/asm-m68k/posix_types.h
index 33c423980..460de0b30 100644
--- a/include/asm-m68k/posix_types.h
+++ b/include/asm-m68k/posix_types.h
@@ -37,6 +37,8 @@ typedef struct {
#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
} __kernel_fsid_t;
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+
#undef __FD_SET
#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
@@ -49,4 +51,6 @@ typedef struct {
#undef __FD_ZERO
#define __FD_ZERO(fdsetp) (memset (fdsetp, 0, sizeof(*(fd_set *)fdsetp)))
+#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
+
#endif
diff --git a/include/asm-m68k/processor.h b/include/asm-m68k/processor.h
index 6d04e36d0..8246efd95 100644
--- a/include/asm-m68k/processor.h
+++ b/include/asm-m68k/processor.h
@@ -20,6 +20,7 @@
* space during mmap's.
*/
#define TASK_UNMAPPED_BASE 0xC0000000UL
+#define TASK_UNMAPPED_ALIGN(addr, off) PAGE_ALIGN(addr)
/*
* Bus types
@@ -71,6 +72,9 @@ static inline void release_thread(struct task_struct *dead_task)
{
}
+#define copy_segments(nr, tsk, mm) do { } while (0)
+#define release_segments(mm) do { } while (0)
+
/*
* Free current thread data structures etc..
*/
@@ -83,12 +87,12 @@ static inline void exit_thread(void)
*/
extern inline unsigned long thread_saved_pc(struct thread_struct *t)
{
- extern int sys_pause(void);
- extern void schedule(void);
+ extern void scheduling_functions_start_here(void);
+ extern void scheduling_functions_end_here(void);
struct switch_stack *sw = (struct switch_stack *)t->ksp;
/* Check whether the thread is blocked in resume() */
- if (sw->retpc >= (unsigned long)schedule &&
- sw->retpc < (unsigned long)sys_pause)
+ if (sw->retpc > (unsigned long)scheduling_functions_start_here &&
+ sw->retpc < (unsigned long)scheduling_functions_end_here)
return ((unsigned long *)sw->a6)[1];
else
return sw->retpc;
diff --git a/include/asm-m68k/serial.h b/include/asm-m68k/serial.h
index bc30f6e56..191c5d551 100644
--- a/include/asm-m68k/serial.h
+++ b/include/asm-m68k/serial.h
@@ -34,6 +34,8 @@
#define SER_WHIPPET 108 /* Amiga Hisoft Whippet PCMCIA (16c550B) */
#define SER_SCC_MVME 109 /* MVME162/MVME172 ports */
#define SER_SCC_MAC 110 /* Macintosh SCC channel */
+#define SER_HPDCA 111 /* HP DCA serial */
+#define SER_SCC_BVME 112 /* BVME6000 ports */
struct serial_struct {
int type;
diff --git a/include/asm-m68k/setup.h b/include/asm-m68k/setup.h
index 16cd23c12..a3084e04d 100644
--- a/include/asm-m68k/setup.h
+++ b/include/asm-m68k/setup.h
@@ -38,6 +38,7 @@
#define MACH_MVME147 6
#define MACH_MVME16x 7
#define MACH_BVME6000 8
+#define MACH_HP300 9
#ifdef __KERNEL__
@@ -48,10 +49,10 @@ extern u_long m68k_machtype;
#if !defined(CONFIG_AMIGA)
# define MACH_IS_AMIGA (0)
#elif defined(CONFIG_ATARI) || defined(CONFIG_MAC) || defined(CONFIG_APOLLO) \
- || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)
+ || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000) || defined(CONFIG_HP300)
# define MACH_IS_AMIGA (m68k_machtype == MACH_AMIGA)
#else
-# define MACH_AMIGA_ONLY
+# define CONFIG_AMIGA_ONLY
# define MACH_IS_AMIGA (1)
# define MACH_TYPE (MACH_AMIGA)
#endif
@@ -59,17 +60,18 @@ extern u_long m68k_machtype;
#if !defined(CONFIG_ATARI)
# define MACH_IS_ATARI (0)
#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_APOLLO) \
- || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)
+ || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000) || defined(CONFIG_HP300)
# define MACH_IS_ATARI (m68k_machtype == MACH_ATARI)
#else
-# define MACH_ATARI_ONLY
+# define CONFIG_ATARI_ONLY
# define MACH_IS_ATARI (1)
# define MACH_TYPE (MACH_ATARI)
#endif
#if !defined(CONFIG_MAC)
# define MACH_IS_MAC (0)
-#elif defined(CONFIG_AMIGA) || defined(CONFIG_ATARI) || defined(CONFIG_APOLLO)
+#elif defined(CONFIG_AMIGA) || defined(CONFIG_ATARI) || defined(CONFIG_APOLLO) \
+ || defined(CONFIG_HP300) || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)
# define MACH_IS_MAC (m68k_machtype == MACH_MAC)
#else
# define CONFIG_MAC_ONLY
@@ -86,7 +88,7 @@ extern u_long m68k_machtype;
#if !defined (CONFIG_APOLLO)
# define MACH_IS_APOLLO (0)
#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
- || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)
+ || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000) || defined(CONFIG_HP300)
# define MACH_IS_APOLLO (m68k_machtype == MACH_APOLLO)
#else
# define CONFIG_APOLLO_ONLY
@@ -97,7 +99,7 @@ extern u_long m68k_machtype;
#if !defined (CONFIG_MVME16x)
# define MACH_IS_MVME16x (0)
#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
- || defined(CONFIG_APOLLO) || defined(CONFIG_BVME6000)
+ || defined(CONFIG_APOLLO) || defined(CONFIG_BVME6000) || defined(CONFIG_HP300)
# define MACH_IS_MVME16x (m68k_machtype == MACH_MVME16x)
#else
# define CONFIG_MVME16x_ONLY
@@ -108,7 +110,7 @@ extern u_long m68k_machtype;
#if !defined (CONFIG_BVME6000)
# define MACH_IS_BVME6000 (0)
#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
- || defined(CONFIG_APOLLO) || defined(CONFIG_MVME16x)
+ || defined(CONFIG_APOLLO) || defined(CONFIG_MVME16x) || defined(CONFIG_HP300)
# define MACH_IS_BVME6000 (m68k_machtype == MACH_BVME6000)
#else
# define CONFIG_BVME6000_ONLY
@@ -116,6 +118,16 @@ extern u_long m68k_machtype;
# define MACH_TYPE (MACH_BVME6000)
#endif
+#if !defined (CONFIG_HP300)
+# define MACH_IS_HP300 (0)
+#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
+ || defined(CONFIG_APOLLO) || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)
+# define MAC_IS_HP300 (m68k_machtype == MACH_HP300)
+#else
+# define CONFIG_HP300_ONLY
+# define MACH_IS_HP300 (1)
+# define MACH_TYPE (MACH_HP300)
+#endif
#ifndef MACH_TYPE
# define MACH_TYPE (m68k_machtype)
diff --git a/include/asm-m68k/siginfo.h b/include/asm-m68k/siginfo.h
index e53589ef9..f6799d2b1 100644
--- a/include/asm-m68k/siginfo.h
+++ b/include/asm-m68k/siginfo.h
@@ -43,6 +43,7 @@ typedef struct siginfo {
/* SIGCHLD */
struct {
pid_t _pid; /* which child */
+ uid_t _uid; /* sender's uid */
int _status; /* exit code */
clock_t _utime;
clock_t _stime;
diff --git a/include/asm-m68k/signal.h b/include/asm-m68k/signal.h
index 5fa3fa67e..3524a0bf3 100644
--- a/include/asm-m68k/signal.h
+++ b/include/asm-m68k/signal.h
@@ -72,8 +72,7 @@ typedef unsigned long sigset_t;
/*
* SA_FLAGS values:
*
- * SA_ONSTACK is not currently supported, but will allow sigaltstack(2).
- * (++roman: SA_ONSTACK is supported on m68k)
+ * SA_ONSTACK indicates that a registered stack_t will be used.
* SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
* SA_RESTART flag to get restarting signals (which were the default long ago)
* SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
@@ -96,6 +95,15 @@ typedef unsigned long sigset_t;
#define SA_ONESHOT SA_RESETHAND
#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */
+/*
+ * sigaltstack controls
+ */
+#define SS_ONSTACK 1
+#define SS_DISABLE 2
+
+#define MINSIGSTKSZ 2048
+#define SIGSTKSZ 8192
+
#ifdef __KERNEL__
/*
* These values of sa_flags are used only by the kernel as part of the
@@ -142,11 +150,18 @@ struct k_sigaction {
/* Here we must cater to libcs that poke about in kernel headers. */
struct sigaction {
- __sighandler_t sa_handler;
+ union {
+ __sighandler_t _sa_handler;
+ void (*_sa_sigaction)(int, struct siginfo *, void *);
+ } _u;
sigset_t sa_mask;
unsigned long sa_flags;
void (*sa_restorer)(void);
};
+
+#define sa_handler _u._sa_handler
+#define sa_sigaction _u._sa_sigaction
+
#endif /* __KERNEL__ */
typedef struct sigaltstack {
diff --git a/include/asm-m68k/smp_lock.h b/include/asm-m68k/smp_lock.h
deleted file mode 100644
index 6bc9a781b..000000000
--- a/include/asm-m68k/smp_lock.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef __M68K_SMPLOCK_H
-#define __M68K_SMPLOCK_H
-
-/*
- * We don't do SMP so this is again one of these silly dummy files
- * to keep the kernel source looking nice ;-(.
- */
-
-#define lock_kernel() do { } while(0)
-#define unlock_kernel() do { } while(0)
-#define release_kernel_lock(task, cpu, depth) ((depth) = 1)
-#define reacquire_kernel_lock(task, cpu, depth) do { } while(0)
-
-#endif
diff --git a/include/asm-m68k/smplock.h b/include/asm-m68k/smplock.h
new file mode 100644
index 000000000..e62326a10
--- /dev/null
+++ b/include/asm-m68k/smplock.h
@@ -0,0 +1,49 @@
+/*
+ * <asm/smplock.h>
+ *
+ * Default SMP lock implementation
+ */
+#include <linux/interrupt.h>
+#include <asm/spinlock.h>
+
+extern spinlock_t kernel_flag;
+
+/*
+ * Release global kernel lock and global interrupt lock
+ */
+#define release_kernel_lock(task, cpu) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_unlock(&kernel_flag); \
+ release_irqlock(cpu); \
+ __sti(); \
+} while (0)
+
+/*
+ * Re-acquire the kernel lock
+ */
+#define reacquire_kernel_lock(task) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_lock(&kernel_flag); \
+} while (0)
+
+
+/*
+ * Getting the big kernel lock.
+ *
+ * This cannot happen asynchronously,
+ * so we only need to worry about other
+ * CPU's.
+ */
+extern __inline__ void lock_kernel(void)
+{
+ if (!++current->lock_depth)
+ spin_lock(&kernel_flag);
+}
+
+extern __inline__ void unlock_kernel(void)
+{
+ if (--current->lock_depth < 0)
+ spin_unlock(&kernel_flag);
+}
diff --git a/include/asm-m68k/softirq.h b/include/asm-m68k/softirq.h
index bed386d44..0798b0d7d 100644
--- a/include/asm-m68k/softirq.h
+++ b/include/asm-m68k/softirq.h
@@ -61,5 +61,6 @@ extern inline void end_bh_atomic(void)
/* These are for the irq's testing the lock */
#define softirq_trylock(cpu) (local_bh_count[cpu] ? 0 : (local_bh_count[cpu]=1))
#define softirq_endlock(cpu) (local_bh_count[cpu] = 0)
+#define synchronize_bh() do { } while (0)
#endif
diff --git a/include/asm-m68k/stat.h b/include/asm-m68k/stat.h
index 919520ff1..2e35a9e82 100644
--- a/include/asm-m68k/stat.h
+++ b/include/asm-m68k/stat.h
@@ -38,4 +38,42 @@ struct stat {
unsigned long __unused5;
};
+#if 0
+typedef struct {
+ unsigned int major;
+ unsigned int minor;
+} __new_dev_t;
+
+struct stat64 {
+ __new_dev_t st_dev;
+ __u64 st_ino;
+ unsigned int st_mode;
+ unsigned int st_nlink;
+ unsigned int st_uid;
+ unsigned int st_gid;
+ __new_dev_t st_rdev;
+ __s64 st_size;
+ __u64 st_blocks;
+ unsigned long st_atime;
+ unsigned long __unused1;
+ unsigned long st_mtime;
+ unsigned long __unused2;
+ unsigned long st_ctime;
+ unsigned long __unused3;
+ unsigned long st_blksize;
+ unsigned long __unused4;
+};
+#endif
+
+#define __XSTAT_VER_1 1
+#define __XSTAT_VER_2 2
+#define __XSTAT_VER_MASK 0xff
+
+#define __XSTAT_VER_XSTAT 0x000
+#define __XSTAT_VER_LXSTAT 0x100
+#define __XSTAT_VER_FXSTAT 0x200
+#define __XSTAT_VER_TYPEMASK 0xff00
+
+#define __XMKNOD_VER_1 1
+
#endif /* _M68K_STAT_H */
diff --git a/include/asm-m68k/system.h b/include/asm-m68k/system.h
index 729f7b34b..cee722633 100644
--- a/include/asm-m68k/system.h
+++ b/include/asm-m68k/system.h
@@ -60,7 +60,7 @@ asmlinkage void resume(void);
struct __xchg_dummy { unsigned long a[100]; };
#define __xg(x) ((volatile struct __xchg_dummy *)(x))
-#if defined(CONFIG_ATARI) && !defined(CONFIG_AMIGA) && !defined(CONFIG_MAC) && !defined(CONFIG_HADES)
+#if defined(CONFIG_ATARI) && !defined(CONFIG_AMIGA) && !defined(CONFIG_MAC) && !defined(CONFIG_HADES) && !defined(CONFIG_VME) && !defined(CONFIG_APOLLO)
/* block out HSYNC on the atari */
#define __sti() __asm__ __volatile__ ("andiw #0xfbff,%/sr": : : "memory")
#else /* portable version */
diff --git a/include/asm-m68k/termios.h b/include/asm-m68k/termios.h
index 43d6707e7..24408872e 100644
--- a/include/asm-m68k/termios.h
+++ b/include/asm-m68k/termios.h
@@ -55,6 +55,7 @@ struct termio {
#define N_AX25 5
#define N_X25 6 /* X.25 async */
#define N_6PACK 7
+#define N_MASC 8 /* Reserved fo Mobitex module <kaz@cafe.net> */
#ifdef __KERNEL__
diff --git a/include/asm-m68k/timex.h b/include/asm-m68k/timex.h
new file mode 100644
index 000000000..fe5cff581
--- /dev/null
+++ b/include/asm-m68k/timex.h
@@ -0,0 +1,15 @@
+/*
+ * linux/include/asm-m68k/timex.h
+ *
+ * m68k architecture timex specifications
+ */
+#ifndef _ASMm68k_TIMEX_H
+#define _ASMm68k_TIMEX_H
+
+#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
+#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */
+#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
+ (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
+ << (SHIFT_SCALE-SHIFT_HZ)) / HZ)
+
+#endif
diff --git a/include/asm-m68k/uaccess.h b/include/asm-m68k/uaccess.h
index 864c49657..64b8be7bd 100644
--- a/include/asm-m68k/uaccess.h
+++ b/include/asm-m68k/uaccess.h
@@ -200,6 +200,7 @@ __generic_copy_to_user(void *to, const void *from, unsigned long n)
"5:\n"
".section .fixup,\"ax\"\n"
" .even\n"
+ "60:addql #1,%2\n"
"6: lsll #2,%2\n"
" addl %4,%2\n"
" jra 5b\n"
@@ -210,9 +211,11 @@ __generic_copy_to_user(void *to, const void *from, unsigned long n)
".previous\n"
".section __ex_table,\"a\"\n"
" .align 4\n"
+ " .long 1b,60b\n"
" .long 22b,6b\n"
" .long 2b,6b\n"
" .long 24b,7b\n"
+ " .long 3b,60b\n"
" .long 4b,7b\n"
" .long 25b,8b\n"
" .long 5b,8b\n"
@@ -458,16 +461,20 @@ __constant_copy_from_user(void *to, const void *from, unsigned long n)
"31: movesl %%d0,(%0)+\n" \
"11: subql #1,%2\n" \
" jne 10b\n" \
+ "41:\n" \
".section .fixup,\"ax\"\n" \
" .even\n" \
+ "22: addql #1,%2\n" \
"12: lsll #2,%2\n" \
fixup "\n" \
" jra 13f\n" \
".previous\n" \
".section __ex_table,\"a\"\n" \
" .align 4\n" \
+ " .long 10b,22b\n" \
" .long 31b,12b\n" \
" .long 11b,12b\n" \
+ " .long 41b,22b\n" \
".previous\n" \
copy "\n" \
"13:" \
@@ -803,6 +810,7 @@ clear_user(void *to, unsigned long n)
"5:\n"
".section .fixup,\"ax\"\n"
" .even\n"
+ "61:addql #1,%1\n"
"6: lsll #2,%1\n"
" addl %2,%1\n"
" jra 5b\n"
@@ -813,8 +821,9 @@ clear_user(void *to, unsigned long n)
".previous\n"
".section __ex_table,\"a\"\n"
" .align 4\n"
- " .long 1b,6b\n"
+ " .long 1b,61b\n"
" .long 2b,6b\n"
+ " .long 3b,61b\n"
" .long 24b,7b\n"
" .long 4b,7b\n"
" .long 25b,8b\n"
diff --git a/include/asm-m68k/unistd.h b/include/asm-m68k/unistd.h
index df55187a6..4ed5d9f34 100644
--- a/include/asm-m68k/unistd.h
+++ b/include/asm-m68k/unistd.h
@@ -27,7 +27,7 @@
#define __NR_lseek 19
#define __NR_getpid 20
#define __NR_mount 21
-#define __NR_umount 22
+#define __NR_oldumount 22
#define __NR_setuid 23
#define __NR_getuid 24
#define __NR_stime 25
@@ -57,7 +57,7 @@
#define __NR_geteuid 49
#define __NR_getegid 50
#define __NR_acct 51
-#define __NR_phys 52
+#define __NR_umount 52
#define __NR_lock 53
#define __NR_ioctl 54
#define __NR_fcntl 55
@@ -187,6 +187,13 @@
#define __NR_pread 180
#define __NR_pwrite 181
#define __NR_lchown 182
+#define __NR_getcwd 183
+#define __NR_capget 184
+#define __NR_capset 185
+#define __NR_sigaltstack 186
+#define __NR_sendfile 187
+#define __NR_streams1 188 /* some people actually want it */
+#define __NR_streams2 189 /* some people actually want it */
/* user-visible error numbers are in the range -1 - -122: see
<asm-m68k/errno.h> */
@@ -326,13 +333,16 @@ static inline _syscall1(int,delete_module,const char *,name)
*/
static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
{
- register long retval __asm__ ("d0") = __NR_clone;
- register long clone_arg __asm__ ("d1") = flags | CLONE_VM;
+ pid_t pid;
mm_segment_t fs;
fs = get_fs();
set_fs (KERNEL_DS);
+ {
+ register long retval __asm__ ("d0");
+ register long clone_arg __asm__ ("d1") = flags | CLONE_VM;
+
__asm__ __volatile__
("clrl %%d2\n\t"
"trap #0\n\t" /* Linux/m68k system call */
@@ -349,9 +359,11 @@ static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long f
: "0" (__NR_clone), "i" (__NR_exit),
"r" (arg), "a" (fn), "d" (clone_arg), "r" (current)
: "d0", "d2");
+ pid = retval;
+ }
set_fs (fs);
- return retval;
+ return pid;
}
static inline pid_t wait(int * wait_stat)
diff --git a/include/asm-arm/xstat.h b/include/asm-m68k/xstat.h
index 84a9b07f9..a0374fcfd 100644
--- a/include/asm-arm/xstat.h
+++ b/include/asm-m68k/xstat.h
@@ -1,4 +1,4 @@
-/* $Id: xstat.h,v 1.1 1998/02/06 12:52:45 jj Exp $
+/* $Id: xstat.h,v 1.1 1998/02/06 12:51:30 jj Exp $
* xstat.h: sys_xstat/xmknod architecture dependent stuff.
*
* Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
diff --git a/include/asm-mips/bitops.h b/include/asm-mips/bitops.h
index 89668887e..d1b1d7152 100644
--- a/include/asm-mips/bitops.h
+++ b/include/asm-mips/bitops.h
@@ -372,6 +372,27 @@ extern __inline__ unsigned long ffz(unsigned long word)
return __res;
}
+#ifdef __KERNEL__
+
+/*
+ * ffs: find first bit set. This is defined the same way as
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+
+#define ffs(x) generic_ffs(x)
+
+/*
+ * hweightN: returns the hamming weight (i.e. the number
+ * of bits set) of a N-bit word
+ */
+
+#define hweight32(x) generic_hweight32(x)
+#define hweight16(x) generic_hweight16(x)
+#define hweight8(x) generic_hweight8(x)
+
+#endif /* __KERNEL__ */
+
#ifdef __MIPSEB__
/* For now I steal the Sparc C versions, no need for speed, just need to
* get it working.
diff --git a/include/asm-mips/bootinfo.h b/include/asm-mips/bootinfo.h
index d20831322..f41ecd19e 100644
--- a/include/asm-mips/bootinfo.h
+++ b/include/asm-mips/bootinfo.h
@@ -1,4 +1,5 @@
-/*
+/* $Id: bootinfo.h,v 1.5 1998/08/19 21:58:10 ralf Exp $
+ *
* bootinfo.h -- Definition of the Linux/MIPS boot information structure
*
* Copyright (C) 1995, 1996 by Ralf Baechle, Andreas Busse,
@@ -7,8 +8,6 @@
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive
* for more details.
- *
- * $Id: bootinfo.h,v 1.3 1997/09/19 08:37:44 ralf Exp $
*/
#ifndef __ASM_MIPS_BOOTINFO_H
#define __ASM_MIPS_BOOTINFO_H
@@ -26,10 +25,10 @@
#define MACH_GROUP_SNI_RM 4 /* Siemens Nixdorf RM series */
#define MACH_GROUP_ACN 5
#define MACH_GROUP_SGI 6 /* Silicon Graphics workstations and servers */
-#define MACH_GROUP_RESERVED 7 /* No Such Architecture */
+#define MACH_GROUP_COBALT 7 /* Cobalt servers */
#define GROUP_NAMES { "unknown", "Jazz", "Digital", "ARC", \
- "SNI", "ACN", "SGI", "NSA" }
+ "SNI", "ACN", "SGI", "Cobalt" }
/*
* Valid machtype values for group unknown (low order halfword of mips_machtype)
@@ -86,6 +85,13 @@
#define GROUP_SGI_NAMES { "Indy" }
/*
+ * Valid machtype for group COBALT
+ */
+#define MACH_COBALT_27 0 /* Proto "27" hardware */
+
+#define GROUP_COBALT_NAMES { "Microserver 27" }
+
+/*
* Valid cputype values
*/
#define CPU_UNKNOWN 0
@@ -126,7 +132,7 @@
#define CL_SIZE (80)
-#ifndef __LANGUAGE_ASSEMBLY__
+#ifndef _LANGUAGE_ASSEMBLY
/*
* Some machine parameters passed by the bootloaders.
@@ -266,20 +272,18 @@ void bi_TagWalk(void);
#ifdef CONFIG_SGI
-
/* screen info will dissapear... soon */
-#define DEFAULT_SCREEN_INFO {0, 0, {0, 0, }, 0, 0, 158, 0, 0, 0, 62, 0, 16}
+//#define DEFAULT_SCREEN_INFO {0, 0, 0, 0, 0, 158, 0, 0, 0, 62, 0, 16}
+#define DEFAULT_SCREEN_INFO {0, 0, 0, 0, 0, 160, 0, 0, 0, 64, 0, 16}
#define DEFAULT_DRIVE_INFO { {0,}}
-
#else
-
/* default values for screen_info variable */
-#define DEFAULT_SCREEN_INFO {0, 0, {0, }, 52, 3, 80, 4626, 3, 9, 50}
+#define DEFAULT_SCREEN_INFO {0, 0, 0, 52, 3, 80, 4626, 3, 9, 50}
+#endif
+
/* default values for drive info */
#define DEFAULT_DRIVE_INFO { {0,}}
-#endif
-
/*
* These are the kernel variables initialized from
@@ -296,6 +300,6 @@ extern unsigned long mips_vram_base;
extern unsigned long mips_dma_cache_size;
extern unsigned long mips_dma_cache_base;
-#endif /* __LANGUAGE_ASSEMBLY__ */
+#endif /* _LANGUAGE_ASSEMBLY */
#endif /* __ASM_MIPS_BOOTINFO_H */
diff --git a/include/asm-mips/current.h b/include/asm-mips/current.h
index 30facf94b..bcaf22b5c 100644
--- a/include/asm-mips/current.h
+++ b/include/asm-mips/current.h
@@ -1,13 +1,21 @@
+/* $Id: current.h,v 1.4 1998/07/20 17:52:19 ralf Exp $
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1998 Ralf Baechle
+ */
#ifndef __ASM_MIPS_CURRENT_H
#define __ASM_MIPS_CURRENT_H
-#ifdef __LANGUAGE_C__
+#ifdef _LANGUAGE_C
/* MIPS rules... */
register struct task_struct *current asm("$28");
-#endif /* __LANGUAGE_C__ */
-#ifdef __LANGUAGE_ASSEMBLY__
+#endif /* _LANGUAGE_C */
+#ifdef _LANGUAGE_ASSEMBLY
/*
* Special variant for use by exception handlers when the stack pointer
diff --git a/include/asm-mips/gdb-stub.h b/include/asm-mips/gdb-stub.h
index d0e757c9b..0bf2aafb9 100644
--- a/include/asm-mips/gdb-stub.h
+++ b/include/asm-mips/gdb-stub.h
@@ -1,9 +1,11 @@
-/*
- * include/asm-mips/gdb-stub.h
+/* $Id: gdb-stub.h,v 1.3 1998/07/20 17:52:19 ralf Exp $
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
*
- * Copyright (C) 1995 Andreas Busse
+ * Copyright (C) 1995 Andreas Busse
*/
-
#ifndef __ASM_MIPS_GDB_STUB_H
#define __ASM_MIPS_GDB_STUB_H
@@ -131,7 +133,7 @@
#define GDB_FR_SIZE ((((GDB_FR_CP0_PRID) + 4) + (PTRSIZE-1)) & ~(PTRSIZE-1))
-#ifndef __LANGUAGE_ASSEMBLY__
+#ifndef _LANGUAGE_ASSEMBLY
/*
* This is the same as above, but for the high-level
@@ -207,5 +209,5 @@ struct gdb_regs {
void set_debug_traps(void);
-#endif /* __LANGUAGE_ASSEMBLY */
+#endif /* _LANGUAGE_ASSEMBLY */
#endif /* __ASM_MIPS_GDB_STUB_H */
diff --git a/include/asm-mips/hardirq.h b/include/asm-mips/hardirq.h
index 9a666e6c5..f651556c0 100644
--- a/include/asm-mips/hardirq.h
+++ b/include/asm-mips/hardirq.h
@@ -1,3 +1,11 @@
+/* $Id: hardirq.h,v 1.4 1998/08/20 11:26:19 ralf Exp $
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1997, 1998 by Ralf Baechle
+ */
#ifndef __ASM_MIPS_HARDIRQ_H
#define __ASM_MIPS_HARDIRQ_H
@@ -5,6 +13,13 @@
extern unsigned int local_irq_count[NR_CPUS];
+/*
+ * Are we in an interrupt context? Either doing bottom half
+ * or hardware interrupt processing?
+ */
+#define in_interrupt() ({ int __cpu = smp_processor_id(); \
+ (local_irq_count[__cpu] + local_bh_count[__cpu] != 0); })
+
#ifndef __SMP__
#define hardirq_trylock(cpu) (local_irq_count[cpu] == 0)
diff --git a/include/asm-mips/ioctls.h b/include/asm-mips/ioctls.h
index c7142ceb2..5e268a1c5 100644
--- a/include/asm-mips/ioctls.h
+++ b/include/asm-mips/ioctls.h
@@ -1,5 +1,4 @@
-/*
- * ioctls for Linux/MIPS.
+/* $Id: ioctls.h,v 1.5 1998/08/19 21:58:11 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
@@ -113,5 +112,7 @@
#define TIOCSERSETMULTI 0x5490 /* Set multiport config */
#define TIOCMIWAIT 0x5491 /* wait for a change on serial input line(s) */
#define TIOCGICOUNT 0x5492 /* read serial port inline interrupt counts */
+#define TIOCGHAYESESP 0x5493 /* Get Hayes ESP configuration */
+#define TIOCSHAYESESP 0x5494 /* Set Hayes ESP configuration */
#endif /* __ASM_MIPS_IOCTLS_H */
diff --git a/include/asm-mips/jazz.h b/include/asm-mips/jazz.h
index 7cd009438..f57cf7b95 100644
--- a/include/asm-mips/jazz.h
+++ b/include/asm-mips/jazz.h
@@ -1,15 +1,10 @@
-/*
- * Hardware info about Mips JAZZ and similar systems
+/* $Id: jazz.h,v 1.6 1998/08/18 20:46:39 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
- * Copyright (C) 1995 by Andreas Busse and Ralf Baechle
- *
- * This file is a mess. It really needs some reorganisation!
- *
- * $Id: jazz.h,v 1.5 1997/12/01 21:26:48 ralf Exp $
+ * Copyright (C) 1995 - 1998 by Andreas Busse and Ralf Baechle
*/
#ifndef __ASM_MIPS_JAZZ_H
#define __ASM_MIPS_JAZZ_H
@@ -76,7 +71,7 @@
#define LED_E 0x9e
#define LED_F 0x8e
-#ifndef __LANGUAGE_ASSEMBLY__
+#ifndef _LANGUAGE_ASSEMBLY
extern __inline__ void pica_set_led(unsigned int bits)
{
@@ -106,7 +101,7 @@ extern __inline__ void pica_set_led(unsigned int bits)
#define JAZZ_KEYBOARD_DATA 0xe0005000
#define JAZZ_KEYBOARD_COMMAND 0xe0005001
-#ifndef __LANGUAGE_ASSEMBLY__
+#ifndef _LANGUAGE_ASSEMBLY
typedef struct {
unsigned char data;
@@ -158,7 +153,7 @@ typedef struct {
/*
* DRAM configuration register
*/
-#ifndef __LANGUAGE_ASSEMBLY__
+#ifndef _LANGUAGE_ASSEMBLY
#ifdef __MIPSEL__
typedef struct {
unsigned int bank2 : 3;
@@ -178,7 +173,7 @@ typedef struct {
unsigned int bank2 : 3;
} dram_configuration;
#endif
-#endif /* __LANGUAGE_ASSEMBLY__ */
+#endif /* _LANGUAGE_ASSEMBLY */
#define PICA_DRAM_CONFIG 0xe00fffe0
@@ -213,7 +208,6 @@ typedef struct {
#define JAZZ_SERIAL1_IRQ 18
#define JAZZ_SERIAL2_IRQ 19
#define JAZZ_PARALLEL_IRQ 20
-#define JAZZ_MOUSE_IRQ 21
/*
* JAZZ DMA Channels
@@ -269,7 +263,7 @@ typedef struct {
/*
* Access the R4030 DMA and I/O Controller
*/
-#ifndef __LANGUAGE_ASSEMBLY__
+#ifndef _LANGUAGE_ASSEMBLY
extern inline void r4030_delay(void)
{
@@ -302,7 +296,7 @@ extern inline void r4030_write_reg16(unsigned addr, unsigned val)
r4030_delay();
}
-extern inline unsigned int r4030_write_reg32(unsigned addr, unsigned val)
+extern inline void r4030_write_reg32(unsigned addr, unsigned val)
{
*((volatile unsigned int *)addr) = val;
r4030_delay();
diff --git a/include/asm-mips/keyboard.h b/include/asm-mips/keyboard.h
index bba0a1876..6b393c032 100644
--- a/include/asm-mips/keyboard.h
+++ b/include/asm-mips/keyboard.h
@@ -5,7 +5,7 @@
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
- * $Id: keyboard.h,v 1.7 1998/05/07 03:02:50 ralf Exp $
+ * $Id: keyboard.h,v 1.8 1998/07/13 23:27:07 tsbogend Exp $
*/
#ifndef __ASM_MIPS_KEYBOARD_H
#define __ASM_MIPS_KEYBOARD_H
@@ -52,13 +52,11 @@ void (*keyboard_setup)(void);
#ifdef CONFIG_MIPS_JAZZ
/* Not true for Jazz machines, we cheat a bit for 'em. */
-#define KEYBOARD_IRQ 1
-
-extern int jazz_ps2_request_irq(void);
-extern void jazz_ps2_free_irq(void);
+#define KEYBOARD_IRQ 1
-#define ps2_request_irq() jazz_ps2_request_irq()
-#define ps2_free_irq(inode) jazz_ps2_free_irq()
+/*
+ * No PS/2 style mouse support for Jazz machines
+ */
#endif /* CONFIG_MIPS_JAZZ */
@@ -78,6 +76,10 @@ extern void jazz_ps2_free_irq(void);
#endif /* CONFIG_SGI */
+#ifdef CONFIG_COBALT_MICRO_SERVER
+#define KEYBOARD_IRQ 1
+#endif
+
#if defined(CONFIG_ACER_PICA_61) || defined(CONFIG_SNI_RM200_PCI)
#define CONF_KEYBOARD_USES_IO_PORTS
#endif
diff --git a/include/asm-mips/linux_logo.h b/include/asm-mips/linux_logo.h
new file mode 100644
index 000000000..b4ad836a3
--- /dev/null
+++ b/include/asm-mips/linux_logo.h
@@ -0,0 +1,69 @@
+/* $Id: linux_logo.h,v 1.1 1998/08/19 21:58:12 ralf Exp $
+ * include/asm-mips/linux_logo.h: This is a linux logo
+ * to be displayed on boot.
+ *
+ * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
+ * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
+ *
+ * You can put anything here, but:
+ * LINUX_LOGO_COLORS has to be less than 224
+ * image size has to be 80x80
+ * values have to start from 0x20
+ * (i.e. RGB(linux_logo_red[0],
+ * linux_logo_green[0],
+ * linux_logo_blue[0]) is color 0x20)
+ * BW image has to be 80x80 as well, with MS bit
+ * on the left
+ * Serial_console ascii image can be any size,
+ * but should contain %s to display the version
+ */
+
+#include <linux/init.h>
+#include <linux/version.h>
+
+#define linux_logo_banner "Linux/m68k version " UTS_RELEASE
+
+#define LINUX_LOGO_COLORS 221
+
+#ifdef INCLUDE_LINUX_LOGO_DATA
+
+#define INCLUDE_LINUX_LOGO16
+#include <linux/linux_logo.h>
+
+/* Painted by Johnny Stenback <jst@uwasa.fi> */
+
+unsigned char *linux_serial_image __initdata = "\n"
+" .u$e.\n"
+" .$$$$$:S\n"
+" $\"*$/\"*$$\n"
+" $.`$ . ^F\n"
+" 4k+#+T.$F\n"
+" 4P+++\"$\"$\n"
+" :R\"+ t$$B\n"
+" ___# $$$\n"
+" | | R$$k\n"
+" dd. | Linux $!$\n"
+" ddd | MIPS $9$F\n"
+" '!!!!!$ !!#!`\n"
+" !!!!!* .!!!!!`\n"
+"'!!!!!!!W..e$$!!!!!!` %s\n"
+" \"~^^~ ^~~^\n"
+"\n";
+
+#else
+
+/* prototypes only */
+extern unsigned char linux_logo_red[];
+extern unsigned char linux_logo_green[];
+extern unsigned char linux_logo_blue[];
+extern unsigned char linux_logo[];
+extern unsigned char linux_logo_bw[];
+extern unsigned char linux_logo16_red[];
+extern unsigned char linux_logo16_green[];
+extern unsigned char linux_logo16_blue[];
+extern unsigned char linux_logo16[];
+extern unsigned char *linux_serial_image;
+
+extern int (*console_show_logo)(void);
+
+#endif
diff --git a/include/asm-mips/md.h b/include/asm-mips/md.h
new file mode 100644
index 000000000..aff87490d
--- /dev/null
+++ b/include/asm-mips/md.h
@@ -0,0 +1,14 @@
+/* $Id: md.h,v 1.1 1998/08/17 10:20:14 ralf Exp $
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#ifndef __ASM_MD_H
+#define __ASM_MD_H
+
+/* #define HAVE_ARCH_XORBLOCK */
+
+#define MD_XORBLOCK_ALIGNMENT sizeof(long)
+
+#endif /* __ASM_MD_H */
diff --git a/include/asm-mips/mipsregs.h b/include/asm-mips/mipsregs.h
index 2a563efb9..4b26fa496 100644
--- a/include/asm-mips/mipsregs.h
+++ b/include/asm-mips/mipsregs.h
@@ -1,5 +1,4 @@
-/*
- * include/asm-mips/mipsregs.h
+/* $Id: mipsregs.h,v 1.6 1998/08/17 11:27:08 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
@@ -7,8 +6,6 @@
*
* Copyright (C) 1994, 1995, 1996, 1997 by Ralf Baechle
* Modified for further R[236]000 support by Paul M. Antoine, 1996.
- *
- * $Id: mipsregs.h,v 1.4 1997/09/20 19:02:46 root Exp $
*/
#ifndef __ASM_MIPS_MIPSREGS_H
#define __ASM_MIPS_MIPSREGS_H
@@ -157,7 +154,7 @@
#define C_IRQ4 (1<<14)
#define C_IRQ5 (1<<15)
-#ifndef __LANGUAGE_ASSEMBLY__
+#ifndef _LANGUAGE_ASSEMBLY
/*
* Manipulate the status register.
* Mostly used to access the interrupt bits.
@@ -181,7 +178,7 @@ __BUILD_SET_CP0(status,CP0_STATUS)
__BUILD_SET_CP0(cause,CP0_CAUSE)
__BUILD_SET_CP0(config,CP0_CONFIG)
-#endif /* defined (__LANGUAGE_ASSEMBLY__) */
+#endif /* defined (_LANGUAGE_ASSEMBLY) */
/*
* Inline code for use of the ll and sc instructions
@@ -319,18 +316,18 @@ __BUILD_SET_CP0(config,CP0_CONFIG)
/*
* Bits in the coprozessor 0 config register.
*/
-#define CONFIG_CM_CACHABLE_NO_WA 0
-#define CONFIG_CM_CACHABLE_WA 1
-#define CONFIG_CM_UNCACHED 2
-#define CONFIG_CM_CACHABLE_NONCOHERENT 3
-#define CONFIG_CM_CACHABLE_CE 4
-#define CONFIG_CM_CACHABLE_COW 5
-#define CONFIG_CM_CACHABLE_CUW 6
-#define CONFIG_CM_CACHABLE_ACCELERATED 7
-#define CONFIG_CM_CMASK 7
-#define CONFIG_DB (1 << 4)
-#define CONFIG_IB (1 << 5)
-#define CONFIG_SC (1 << 17)
+#define CONF_CM_CACHABLE_NO_WA 0
+#define CONF_CM_CACHABLE_WA 1
+#define CONF_CM_UNCACHED 2
+#define CONF_CM_CACHABLE_NONCOHERENT 3
+#define CONF_CM_CACHABLE_CE 4
+#define CONF_CM_CACHABLE_COW 5
+#define CONF_CM_CACHABLE_CUW 6
+#define CONF_CM_CACHABLE_ACCELERATED 7
+#define CONF_CM_CMASK 7
+#define CONF_DB (1 << 4)
+#define CONF_IB (1 << 5)
+#define CONF_SC (1 << 17)
/*
* R10000 performance counter definitions.
@@ -388,7 +385,7 @@ __BUILD_SET_CP0(config,CP0_CONFIG)
#define CEB_KERNEL 2 /* Count events in kernel mode EXL = ERL = 0 */
#define CEB_EXL 1 /* Count events with EXL = 1, ERL = 0 */
-#ifndef __LANGUAGE_ASSEMBLY__
+#ifndef _LANGUAGE_ASSEMBLY
/*
* Functions to access the performance counter and control registers
*/
diff --git a/include/asm-mips/ncr53c94.h b/include/asm-mips/ncr53c94.h
deleted file mode 100644
index bf5c072f4..000000000
--- a/include/asm-mips/ncr53c94.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Makefile for MIPS Linux main source directory
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1996 by Ralf Baechle
- */
-
-/*
- * As far as I know there are some MIPS boxes which have their NCRs
- * mapped with pad bytes. For these NCR_PAD will have to be redefined.
- */
-#define NCR_PAD(name)
-struct ncr53c94 {
- NCR_PAD(pad0);
- volatile unsigned char count_lo;
- NCR_PAD(pad1);
- volatile unsigned char count_hi;
- NCR_PAD(pad2);
- volatile unsigned char fifo;
- NCR_PAD(pad3);
- volatile unsigned char command;
- NCR_PAD(pad4);
- union {
- volatile unsigned char status;
- volatile unsigned char dest_id;
- } s_d;
- NCR_PAD(pad5);
- union {
- volatile unsigned char interrupts;
- volatile unsigned char timeout;
- } i_t;
- NCR_PAD(pad6);
- union {
- volatile unsigned char seqn_step;
- volatile unsigned char sync_period;
- } s_p;
- NCR_PAD(pad7);
- union {
- volatile unsigned char fifo_flags;
- volatile unsigned char sync_offset;
- } f_o;
- NCR_PAD(pad8);
- volatile unsigned char config1;
- NCR_PAD(pad9);
- volatile unsigned char clk_conv;
- NCR_PAD(pad10);
- volatile unsigned char test;
- NCR_PAD(pad11);
- volatile unsigned char config2;
- NCR_PAD(pad12);
- volatile unsigned char config3;
- NCR_PAD(pad13);
- volatile unsigned char unused;
- NCR_PAD(pad14);
- volatile unsigned char count_xhi;
- NCR_PAD(pad15);
- volatile unsigned char fifo_b;
-};
-
-/*
- * Clock conversion factors
- */
-#define CCV_10MHZ 0x2 /* 10 Mhz */
-#define CCV_15MHZ 0x3 /* 10.01 - 15 Mhz */
-#define CCV_20MHZ 0x4 /* 15.01 - 20 Mhz */
-#define CCV_25MHZ 0x5 /* 20.01 - 25 Mhz */
-#define CCV_30MHZ 0x6 /* 25.01 - 30 Mhz */
-#define CCV_35MHZ 0x7 /* 30.01 - 35 Mhz */
-#define CCV_40MHZ 0x0 /* 35.01 - 40 Mhz */
-
-/*
- * Set this additional to enable DMA for a command.
- */
-#define NCR_DMA 0x80
-
-/*
- * Miscellaneous commands
- */
-#define NCR_NOP 0x00
-#define NCR_FLUSH_FIFO 0x01
-#define NCR_RESET_NCR 0x02
-#define NCR_RESET_SCSI 0x03
-
-/*
- * Disconnected state commands
- */
-#define NCR_SELECT_NO_ATN 0x41
-#define NCR_SELECT_ATN 0x42
-#define NCR_SELECT_ATN_STOP 0x43
-#define NCR_ENABLE_RESEL 0x44
-#define NCR_DISABLE_RESEL 0x45
-#define NCR_SELECT_ATN3 0x46
-
-/*
- * Initiator state commands
- */
-#define NCR_TRANSFER 0x10
-#define NCR_CMD_CMP 0x11
-#define NCR_MSG_OK 0x12
-#define NCR_TRANSFER_PAD 0x18
-#define NCR_SET_ATN 0x1a
-#define NCR_RESET_ATN 0x1b
-
-/*
- * Target state commands
- */
-#define NCR_SEND_MSG 0x20
-#define NCR_SEND_STATUS 0x21
-#define NCR_SEND_DATA 0x22
-#define NCR_DISC_SEQN 0x23
-#define NCR_TERM_SEQN 0x24
-#define NCR_CMD_COMP_SEQN 0x25
-#define NCR_DISC 0x27
-#define NCR_REC_MSG 0x28
-#define NCR_REC_CMD 0x29
-#define NCR_REC_DATA 0x2a
-#define NCR_REC_CMD_SEQN 0x2b
-#define NCR_ABORT_DMA 0x04
diff --git a/include/asm-mips/newport.h b/include/asm-mips/newport.h
new file mode 100644
index 000000000..a9ef5b3e5
--- /dev/null
+++ b/include/asm-mips/newport.h
@@ -0,0 +1,586 @@
+/* $Id: newport.h,v 1.1 1998/08/19 21:58:12 ralf Exp $
+ *
+ * newport.h: Defines and register layout for NEWPORT graphics
+ * hardware.
+ *
+ * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
+ */
+
+#ifndef _SGI_NEWPORT_H
+#define _SGI_NEWPORT_H
+
+
+typedef volatile unsigned long npireg_t;
+
+union npfloat {
+ volatile float f;
+ npireg_t i;
+};
+
+typedef union npfloat npfreg_t;
+
+union np_dcb {
+ npireg_t all;
+ struct { volatile unsigned short s0, s1; } hwords;
+ struct { volatile unsigned char b0, b1, b2, b3; } bytes;
+};
+
+struct newport_rexregs {
+ npireg_t drawmode1; /* GL extra mode bits */
+
+#define DM1_PLANES 0x00000007
+#define DM1_NOPLANES 0x00000000
+#define DM1_RGBPLANES 0x00000001
+#define DM1_RGBAPLANES 0x00000002
+#define DM1_OLAYPLANES 0x00000004
+#define DM1_PUPPLANES 0x00000005
+#define DM1_CIDPLANES 0x00000006
+
+#define NPORT_DMODE1_DDMASK 0x00000018
+#define NPORT_DMODE1_DD4 0x00000000
+#define NPORT_DMODE1_DD8 0x00000008
+#define NPORT_DMODE1_DD12 0x00000010
+#define NPORT_DMODE1_DD24 0x00000018
+#define NPORT_DMODE1_DSRC 0x00000020
+#define NPORT_DMODE1_YFLIP 0x00000040
+#define NPORT_DMODE1_RWPCKD 0x00000080
+#define NPORT_DMODE1_HDMASK 0x00000300
+#define NPORT_DMODE1_HD4 0x00000000
+#define NPORT_DMODE1_HD8 0x00000100
+#define NPORT_DMODE1_HD12 0x00000200
+#define NPORT_DMODE1_HD32 0x00000300
+#define NPORT_DMODE1_RWDBL 0x00000400
+#define NPORT_DMODE1_ESWAP 0x00000800 /* Endian swap */
+#define NPORT_DMODE1_CCMASK 0x00007000
+#define NPORT_DMODE1_CCLT 0x00001000
+#define NPORT_DMODE1_CCEQ 0x00002000
+#define NPORT_DMODE1_CCGT 0x00004000
+#define NPORT_DMODE1_RGBMD 0x00008000
+#define NPORT_DMODE1_DENAB 0x00010000 /* Dither enable */
+#define NPORT_DMODE1_FCLR 0x00020000 /* Fast clear */
+#define NPORT_DMODE1_BENAB 0x00040000 /* Blend enable */
+#define NPORT_DMODE1_SFMASK 0x00380000
+#define NPORT_DMODE1_SF0 0x00000000
+#define NPORT_DMODE1_SF1 0x00080000
+#define NPORT_DMODE1_SFDC 0x00100000
+#define NPORT_DMODE1_SFMDC 0x00180000
+#define NPORT_DMODE1_SFSA 0x00200000
+#define NPORT_DMODE1_SFMSA 0x00280000
+#define NPORT_DMODE1_DFMASK 0x01c00000
+#define NPORT_DMODE1_DF0 0x00000000
+#define NPORT_DMODE1_DF1 0x00400000
+#define NPORT_DMODE1_DFSC 0x00800000
+#define NPORT_DMODE1_DFMSC 0x00c00000
+#define NPORT_DMODE1_DFSA 0x01000000
+#define NPORT_DMODE1_DFMSA 0x01400000
+#define NPORT_DMODE1_BBENAB 0x02000000 /* Back blend enable */
+#define NPORT_DMODE1_PFENAB 0x04000000 /* Pre-fetch enable */
+#define NPORT_DMODE1_ABLEND 0x08000000 /* Alpha blend */
+#define NPORT_DMODE1_LOMASK 0xf0000000
+#define NPORT_DMODE1_LOZERO 0x00000000
+#define NPORT_DMODE1_LOAND 0x10000000
+#define NPORT_DMODE1_LOANDR 0x20000000
+#define NPORT_DMODE1_LOSRC 0x30000000
+#define NPORT_DMODE1_LOANDI 0x40000000
+#define NPORT_DMODE1_LODST 0x50000000
+#define NPORT_DMODE1_LOXOR 0x60000000
+#define NPORT_DMODE1_LOOR 0x70000000
+#define NPORT_DMODE1_LONOR 0x80000000
+#define NPORT_DMODE1_LOXNOR 0x90000000
+#define NPORT_DMODE1_LONDST 0xa0000000
+#define NPORT_DMODE1_LOORR 0xb0000000
+#define NPORT_DMODE1_LONSRC 0xc0000000
+#define NPORT_DMODE1_LOORI 0xd0000000
+#define NPORT_DMODE1_LONAND 0xe0000000
+#define NPORT_DMODE1_LOONE 0xf0000000
+
+ npireg_t drawmode0; /* REX command register */
+
+ /* These bits define the graphics opcode being performed. */
+#define NPORT_DMODE0_OPMASK 0x00000003 /* Opcode mask */
+#define NPORT_DMODE0_NOP 0x00000000 /* No operation */
+#define NPORT_DMODE0_RD 0x00000001 /* Read operation */
+#define NPORT_DMODE0_DRAW 0x00000002 /* Draw operation */
+#define NPORT_DMODE0_S2S 0x00000003 /* Screen to screen operation */
+
+ /* The following decide what addressing mode(s) are to be used */
+#define NPORT_DMODE0_AMMASK 0x0000001c /* Address mode mask */
+#define NPORT_DMODE0_SPAN 0x00000000 /* Spanning address mode */
+#define NPORT_DMODE0_BLOCK 0x00000004 /* Block address mode */
+#define NPORT_DMODE0_ILINE 0x00000008 /* Iline address mode */
+#define NPORT_DMODE0_FLINE 0x0000000c /* Fline address mode */
+#define NPORT_DMODE0_ALINE 0x00000010 /* Aline address mode */
+#define NPORT_DMODE0_TLINE 0x00000014 /* Tline address mode */
+#define NPORT_DMODE0_BLINE 0x00000018 /* Bline address mode */
+
+ /* And now some misc. operation control bits. */
+#define NPORT_DMODE0_DOSETUP 0x00000020
+#define NPORT_DMODE0_CHOST 0x00000040
+#define NPORT_DMODE0_AHOST 0x00000080
+#define NPORT_DMODE0_STOPX 0x00000100
+#define NPORT_DMODE0_STOPY 0x00000200
+#define NPORT_DMODE0_SK1ST 0x00000400
+#define NPORT_DMODE0_SKLST 0x00000800
+#define NPORT_DMODE0_ZPENAB 0x00001000
+#define NPORT_DMODE0_LISPENAB 0x00002000
+#define NPORT_DMODE0_LISLST 0x00004000
+#define NPORT_DMODE0_L32 0x00008000
+#define NPORT_DMODE0_ZOPQ 0x00010000
+#define NPORT_DMODE0_LISOPQ 0x00020000
+#define NPORT_DMODE0_SHADE 0x00040000
+#define NPORT_DMODE0_LRONLY 0x00080000
+#define NPORT_DMODE0_XYOFF 0x00100000
+#define NPORT_DMODE0_CLAMP 0x00200000
+#define NPORT_DMODE0_ENDPF 0x00400000
+#define NPORT_DMODE0_YSTR 0x00800000
+
+ npireg_t lsmode; /* Mode for line stipple ops */
+ npireg_t lspattern; /* Pattern for line stipple ops */
+ npireg_t lspatsave; /* Backup save pattern */
+ npireg_t zpattern; /* Pixel zpattern */
+ npireg_t colorback; /* Background color */
+ npireg_t colorvram; /* Clear color for fast vram */
+ npireg_t alpharef; /* Reference value for afunctions */
+ unsigned long pad0;
+ npireg_t smask0x; /* Window GL relative screen mask 0 */
+ npireg_t smask0y; /* Window GL relative screen mask 0 */
+ npireg_t _setup;
+ npireg_t _stepz;
+ npireg_t _lsrestore;
+ npireg_t _lssave;
+
+ unsigned long _pad1[0x30];
+
+ /* Iterators, full state for context switch */
+ npfreg_t _xstart; /* X-start point (current) */
+ npfreg_t _ystart; /* Y-start point (current) */
+ npfreg_t _xend; /* x-end point */
+ npfreg_t _yend; /* y-end point */
+ npireg_t xsave; /* copy of xstart integer value for BLOCk addressing MODE */
+ npireg_t xymove; /* x.y offset from xstart, ystart for relative operations */
+ npfreg_t bresd;
+ npfreg_t bress1;;
+ npireg_t bresoctinc1;
+ volatile int bresrndinc2;
+ npireg_t brese1;
+ npireg_t bress2;
+ npireg_t aweight0;
+ npireg_t aweight1;
+ npfreg_t xstartf;
+ npfreg_t ystartf;
+ npfreg_t xendf;
+ npfreg_t yendf;
+ npireg_t xstarti;
+ npfreg_t xendf1;
+ npireg_t xystarti;
+ npireg_t xyendi;
+ npireg_t xstartendi;
+
+ unsigned long _unused2[0x29];
+
+ npfreg_t colorred;
+ npfreg_t coloralpha;
+ npfreg_t colorgrn;
+ npfreg_t colorblue;
+ npfreg_t slopered;
+ npfreg_t slopealpha;
+ npfreg_t slopegrn;
+ npfreg_t slopeblue;
+ npireg_t wrmask;
+ npireg_t colori;
+ npfreg_t colorx;
+ npfreg_t slopered1;
+ npireg_t hostrw0;
+ npireg_t hostrw1;
+ npireg_t dcbmode;
+#define NPORT_DMODE_WMASK 0x00000003
+#define NPORT_DMODE_W4 0x00000000
+#define NPORT_DMODE_W1 0x00000001
+#define NPORT_DMODE_W2 0x00000002
+#define NPORT_DMODE_W3 0x00000003
+#define NPORT_DMODE_EDPACK 0x00000004
+#define NPORT_DMODE_ECINC 0x00000008
+#define NPORT_DMODE_CMASK 0x00000070
+#define NPORT_DMODE_AMASK 0x00000780
+#define NPORT_DMODE_AVC2 0x00000000
+#define NPORT_DMODE_ACMALL 0x00000080
+#define NPORT_DMODE_ACM0 0x00000100
+#define NPORT_DMODE_ACM1 0x00000180
+#define NPORT_DMODE_AXMALL 0x00000200
+#define NPORT_DMODE_AXM0 0x00000280
+#define NPORT_DMODE_AXM1 0x00000300
+#define NPORT_DMODE_ABT 0x00000380
+#define NPORT_DMODE_AVCC1 0x00000400
+#define NPORT_DMODE_AVAB1 0x00000480
+#define NPORT_DMODE_ALG3V0 0x00000500
+#define NPORT_DMODE_A1562 0x00000580
+#define NPORT_DMODE_ESACK 0x00000800
+#define NPORT_DMODE_EASACK 0x00001000
+#define NPORT_DMODE_CWMASK 0x0003e000
+#define NPORT_DMODE_CHMASK 0x007c0000
+#define NPORT_DMODE_CSMASK 0x0f800000
+#define NPORT_DMODE_SENDIAN 0x10000000
+
+ unsigned long _unused3;
+
+ union np_dcb dcbdata0;
+ npireg_t dcbdata1;
+};
+
+struct newport_cregs {
+ npireg_t smask1x;
+ npireg_t smask1y;
+ npireg_t smask2x;
+ npireg_t smask2y;
+ npireg_t smask3x;
+ npireg_t smask3y;
+ npireg_t smask4x;
+ npireg_t smask4y;
+ npireg_t topscan;
+ npireg_t xywin;
+ npireg_t clipmode;
+#define NPORT_CMODE_SM0 0x00000001
+#define NPORT_CMODE_SM1 0x00000002
+#define NPORT_CMODE_SM2 0x00000004
+#define NPORT_CMODE_SM3 0x00000008
+#define NPORT_CMODE_SM4 0x00000010
+#define NPORT_CMODE_CMSK 0x00001e00
+
+ unsigned long _unused0;
+ unsigned long config;
+#define NPORT_CFG_G32MD 0x00000001
+#define NPORT_CFG_BWIDTH 0x00000002
+#define NPORT_CFG_ERCVR 0x00000004
+#define NPORT_CFG_BDMSK 0x00000078
+#define NPORT_CFG_GDMSK 0x00000f80
+#define NPORT_CFG_GD0 0x00000080
+#define NPORT_CFG_GD1 0x00000100
+#define NPORT_CFG_GD2 0x00000200
+#define NPORT_CFG_GD3 0x00000400
+#define NPORT_CFG_GD4 0x00000800
+#define NPORT_CFG_GFAINT 0x00001000
+#define NPORT_CFG_TOMSK 0x0000e000
+#define NPORT_CFG_VRMSK 0x00070000
+#define NPORT_CFG_FBTYP 0x00080000
+
+ npireg_t _unused1;
+ npireg_t stat;
+#define NPORT_STAT_VERS 0x00000007
+#define NPORT_STAT_GBUSY 0x00000008
+#define NPORT_STAT_BBUSY 0x00000010
+#define NPORT_STAT_VRINT 0x00000020
+#define NPORT_STAT_VIDINT 0x00000040
+#define NPORT_STAT_GLMSK 0x00001f80
+#define NPORT_STAT_BLMSK 0x0007e000
+#define NPORT_STAT_BFIRQ 0x00080000
+#define NPORT_STAT_GFIRQ 0x00100000
+
+ npireg_t ustat;
+ npireg_t dreset;
+};
+
+struct newport_regs {
+ struct newport_rexregs set;
+ unsigned long _unused0[0x16e];
+ struct newport_rexregs go;
+ unsigned long _unused1[0x22e];
+ struct newport_cregs cset;
+ unsigned long _unused2[0x1ef];
+ struct newport_cregs cgo;
+};
+extern struct newport_regs *npregs;
+
+
+typedef struct {
+ unsigned int drawmode1;
+ unsigned int drawmode0;
+ unsigned int lsmode;
+ unsigned int lspattern;
+ unsigned int lspatsave;
+ unsigned int zpattern;
+ unsigned int colorback;
+ unsigned int colorvram;
+ unsigned int alpharef;
+ unsigned int smask0x;
+ unsigned int smask0y;
+ unsigned int _xstart;
+ unsigned int _ystart;
+ unsigned int _xend;
+ unsigned int _yend;
+ unsigned int xsave;
+ unsigned int xymove;
+ unsigned int bresd;
+ unsigned int bress1;
+ unsigned int bresoctinc1;
+ unsigned int bresrndinc2;
+ unsigned int brese1;
+ unsigned int bress2;
+
+ unsigned int aweight0;
+ unsigned int aweight1;
+ unsigned int colorred;
+ unsigned int coloralpha;
+ unsigned int colorgrn;
+ unsigned int colorblue;
+ unsigned int slopered;
+ unsigned int slopealpha;
+ unsigned int slopegrn;
+ unsigned int slopeblue;
+ unsigned int wrmask;
+ unsigned int hostrw0;
+ unsigned int hostrw1;
+
+ /* configregs */
+
+ unsigned int smask1x;
+ unsigned int smask1y;
+ unsigned int smask2x;
+ unsigned int smask2y;
+ unsigned int smask3x;
+ unsigned int smask3y;
+ unsigned int smask4x;
+ unsigned int smask4y;
+ unsigned int topscan;
+ unsigned int xywin;
+ unsigned int clipmode;
+ unsigned int config;
+
+ /* dcb registers */
+ unsigned int dcbmode;
+ unsigned int dcbdata0;
+ unsigned int dcbdata1;
+} newport_ctx;
+
+/* Reading/writing VC2 registers. */
+#define VC2_REGADDR_INDEX 0x00000000
+#define VC2_REGADDR_IREG 0x00000010
+#define VC2_REGADDR_RAM 0x00000030
+#define VC2_PROTOCOL (NPORT_DMODE_EASACK | 0x00800000 | 0x00040000)
+
+#define VC2_VLINET_ADDR 0x000
+#define VC2_VFRAMET_ADDR 0x400
+#define VC2_CGLYPH_ADDR 0x500
+
+/* Now the Indexed registers of the VC2. */
+#define VC2_IREG_VENTRY 0x00
+#define VC2_IREG_CENTRY 0x01
+#define VC2_IREG_CURSX 0x02
+#define VC2_IREG_CURSY 0x03
+#define VC2_IREG_CCURSX 0x04
+#define VC2_IREG_DENTRY 0x05
+#define VC2_IREG_SLEN 0x06
+#define VC2_IREG_RADDR 0x07
+#define VC2_IREG_VFPTR 0x08
+#define VC2_IREG_VLSPTR 0x09
+#define VC2_IREG_VLIR 0x0a
+#define VC2_IREG_VLCTR 0x0b
+#define VC2_IREG_CTPTR 0x0c
+#define VC2_IREG_WCURSY 0x0d
+#define VC2_IREG_DFPTR 0x0e
+#define VC2_IREG_DLTPTR 0x0f
+#define VC2_IREG_CONTROL 0x10
+#define VC2_IREG_CONFIG 0x20
+
+extern inline void newport_vc2_set(struct newport_regs *regs, unsigned char vc2ireg,
+ unsigned short val)
+{
+ regs->set.dcbmode = (NPORT_DMODE_AVC2 | VC2_REGADDR_INDEX | NPORT_DMODE_W3 |
+ NPORT_DMODE_ECINC | VC2_PROTOCOL);
+ regs->set.dcbdata0.all = (vc2ireg << 24) | (val << 8);
+}
+
+extern inline unsigned short newport_vc2_get(struct newport_regs *regs,
+ unsigned char vc2ireg)
+{
+ regs->set.dcbmode = (NPORT_DMODE_AVC2 | VC2_REGADDR_INDEX | NPORT_DMODE_W1 |
+ NPORT_DMODE_ECINC | VC2_PROTOCOL);
+ regs->set.dcbdata0.bytes.b3 = vc2ireg;
+ regs->set.dcbmode = (NPORT_DMODE_AVC2 | VC2_REGADDR_IREG | NPORT_DMODE_W2 |
+ NPORT_DMODE_ECINC | VC2_PROTOCOL);
+ return regs->set.dcbdata0.hwords.s1;
+}
+
+/* VC2 Control register bits */
+#define VC2_CTRL_EVIRQ 0x0001
+#define VC2_CTRL_EDISP 0x0002
+#define VC2_CTRL_EVIDEO 0x0004
+#define VC2_CTRL_EDIDS 0x0008
+#define VC2_CTRL_ECURS 0x0010
+#define VC2_CTRL_EGSYNC 0x0020
+#define VC2_CTRL_EILACE 0x0040
+#define VC2_CTRL_ECDISP 0x0080
+#define VC2_CTRL_ECCURS 0x0100
+#define VC2_CTRL_ECG64 0x0200
+#define VC2_CTRL_GLSEL 0x0400
+
+/* Controlling the color map on NEWPORT. */
+#define NCMAP_REGADDR_AREG 0x00000000
+#define NCMAP_REGADDR_ALO 0x00000000
+#define NCMAP_REGADDR_AHI 0x00000010
+#define NCMAP_REGADDR_PBUF 0x00000020
+#define NCMAP_REGADDR_CREG 0x00000030
+#define NCMAP_REGADDR_SREG 0x00000040
+#define NCMAP_REGADDR_RREG 0x00000060
+#define NCMAP_PROTOCOL (0x00008000 | 0x00040000 | 0x00800000)
+
+static inline void newport_cmap_setaddr(struct newport_regs *regs,
+ unsigned short addr)
+{
+ regs->set.dcbmode = (NPORT_DMODE_ACMALL | NCMAP_PROTOCOL |
+ NPORT_DMODE_SENDIAN | NPORT_DMODE_ECINC |
+ NCMAP_REGADDR_AREG | NPORT_DMODE_W2);
+ regs->set.dcbdata0.hwords.s1 = addr;
+ regs->set.dcbmode = (NPORT_DMODE_ACMALL | NCMAP_PROTOCOL |
+ NCMAP_REGADDR_PBUF | NPORT_DMODE_W3);
+}
+
+static inline void newport_cmap_setrgb(struct newport_regs *regs,
+ unsigned char red,
+ unsigned char green,
+ unsigned char blue)
+{
+ regs->set.dcbdata0.all =
+ (red << 24) |
+ (green << 16) |
+ (blue << 8);
+}
+
+/* Miscellaneous NEWPORT routines. */
+#define BUSY_TIMEOUT 100000
+static inline int newport_wait(void)
+{
+ int i = 0;
+
+ while(i < BUSY_TIMEOUT)
+ if(!(npregs->cset.stat & NPORT_STAT_GBUSY))
+ break;
+ if(i == BUSY_TIMEOUT)
+ return 1;
+ return 0;
+}
+
+static inline int newport_bfwait(void)
+{
+ int i = 0;
+
+ while(i < BUSY_TIMEOUT)
+ if(!(npregs->cset.stat & NPORT_STAT_BBUSY))
+ break;
+ if(i == BUSY_TIMEOUT)
+ return 1;
+ return 0;
+}
+
+/* newport.c and cons_newport.c routines */
+extern struct graphics_ops *newport_probe (int, const char **);
+
+void newport_save (void *);
+void newport_restore (void *);
+void newport_reset (void);
+int newport_ioctl (int card, int cmd, unsigned long arg);
+
+/*
+ * DCBMODE register defines:
+ */
+
+/* Widht of the data being transfered for each DCBDATA[01] word */
+#define DCB_DATAWIDTH_4 0x0
+#define DCB_DATAWIDTH_1 0x1
+#define DCB_DATAWIDTH_2 0x2
+#define DCB_DATAWIDTH_3 0x3
+
+/* If set, all of DCBDATA will be moved, otherwise only DATAWIDTH bytes */
+#define DCB_ENDATAPACK (1 << 2)
+
+/* Enables DCBCRS auto increment after each DCB transfer */
+#define DCB_ENCRSINC (1 << 3)
+
+/* shift for accessing the control register select address (DBCCRS, 3 bits) */
+#define DCB_CRS_SHIFT 4
+
+/* DCBADDR (4 bits): display bus slave address */
+#define DCB_ADDR_SHIFT 7
+#define DCB_VC2 (0 << DCB_ADDR_SHIFT)
+#define DCB_CMAP_ALL (1 << DCB_ADDR_SHIFT)
+#define DCB_CMAP0 (2 << DCB_ADDR_SHIFT)
+#define DCB_CMAP1 (3 << DCB_ADDR_SHIFT)
+#define DCB_XMAP_ALL (4 << DCB_ADDR_SHIFT)
+#define DCB_XMAP0 (5 << DCB_ADDR_SHIFT)
+#define DCB_XMAP1 (6 << DCB_ADDR_SHIFT)
+#define DCB_BT445 (7 << DCB_ADDR_SHIFT)
+#define DCB_VCC1 (8 << DCB_ADDR_SHIFT)
+#define DCB_VAB1 (9 << DCB_ADDR_SHIFT)
+#define DCB_LG3_BDVERS0 (10 << DCB_ADDR_SHIFT)
+#define DCB_LG3_ICS1562 (11 << DCB_ADDR_SHIFT)
+#define DCB_RESERVED (15 << DCB_ADDR_SHIFT)
+
+/* DCB protocol ack types */
+#define DCB_ENSYNCACK (1 << 11)
+#define DCB_ENASYNCACK (1 << 12)
+
+#define DCB_CSWIDTH_SHIFT 13
+#define DCB_CSHOLD_SHIFT 18
+#define DCB_CSSETUP_SHIFT 23
+
+/* XMAP9 specific defines */
+/* XMAP9 -- registers as seen on the DCBMODE register*/
+# define XM9_CRS_CONFIG (0 << DCB_CRS_SHIFT)
+# define XM9_PUPMODE (1 << 0)
+# define XM9_ODD_PIXEL (1 << 1)
+# define XM9_8_BITPLANES (1 << 2)
+# define XM9_SLOW_DCB (1 << 3)
+# define XM9_VIDEO_RGBMAP_MASK (3 << 4)
+# define XM9_EXPRESS_VIDEO (1 << 6)
+# define XM9_VIDEO_OPTION (1 << 7)
+# define XM9_CRS_REVISION (1 << DCB_CRS_SHIFT)
+# define XM9_CRS_FIFO_AVAIL (2 << DCB_CRS_SHIFT)
+# define XM9_FIFO_0_AVAIL 0
+# define XM9_FIFO_1_AVAIL 1
+# define XM9_FIFO_2_AVAIL 3
+# define XM9_FIFO_3_AVAIL 2
+# define XM9_FIFO_FULL XM9_FIFO_0_AVAIL
+# define XM9_FIFO_EMPTY XM9_FIFO_3_AVAIL
+# define XM9_CRS_CURS_CMAP_MSB (3 << DCB_CRS_SHIFT)
+# define XM9_CRS_PUP_CMAP_MSB (4 << DCB_CRS_SHIFT)
+# define XM9_CRS_MODE_REG_DATA (5 << DCB_CRS_SHIFT)
+# define XM9_CRS_MODE_REG_INDEX (7 << DCB_CRS_SHIFT)
+
+
+#define DCB_CYCLES(setup,hold,width) \
+ ((hold << DCB_CSHOLD_SHIFT) | \
+ (setup << DCB_CSSETUP_SHIFT)| \
+ (width << DCB_CSWIDTH_SHIFT))
+
+#define W_DCB_XMAP9_PROTOCOL DCB_CYCLES (2, 1, 0)
+#define WSLOW_DCB_XMAP9_PROTOCOL DCB_CYCLES (5, 5, 0)
+#define WAYSLOW_DCB_XMAP9_PROTOCOL DCB_CYCLES (12, 12, 0)
+#define R_DCB_XMAP9_PROTOCOL DCB_CYCLES (2, 1, 3)
+
+static inline void
+xmap9FIFOWait (struct newport_regs *rex)
+{
+ rex->set.dcbmode = DCB_XMAP0 | XM9_CRS_FIFO_AVAIL |
+ DCB_DATAWIDTH_1 | R_DCB_XMAP9_PROTOCOL;
+ newport_bfwait ();
+
+ while ((rex->set.dcbdata0.bytes.b3 & 3) != XM9_FIFO_EMPTY)
+ ;
+}
+
+static inline void
+xmap9SetModeReg (struct newport_regs *rex, unsigned int modereg, unsigned int data24, int cfreq)
+{
+ if (cfreq > 119)
+ rex->set.dcbmode = DCB_XMAP_ALL | XM9_CRS_MODE_REG_DATA |
+ DCB_DATAWIDTH_4 | W_DCB_XMAP9_PROTOCOL;
+ else if (cfreq > 59)
+ rex->set.dcbmode = DCB_XMAP_ALL | XM9_CRS_MODE_REG_DATA |
+ DCB_DATAWIDTH_4 | WSLOW_DCB_XMAP9_PROTOCOL;
+ else
+ rex->set.dcbmode = DCB_XMAP_ALL | XM9_CRS_MODE_REG_DATA |
+ DCB_DATAWIDTH_4 | WAYSLOW_DCB_XMAP9_PROTOCOL;
+ rex->set.dcbdata0.all = ((modereg) << 24) | (data24 & 0xffffff);
+}
+
+#endif /* !(_SGI_NEWPORT_H) */
+
diff --git a/include/asm-mips/offset.h b/include/asm-mips/offset.h
index 5f89c2852..6f7a5b019 100644
--- a/include/asm-mips/offset.h
+++ b/include/asm-mips/offset.h
@@ -46,35 +46,36 @@
/* MIPS task_struct offsets. */
#define TASK_STATE 0
-#define TASK_COUNTER 52
-#define TASK_PRIORITY 56
#define TASK_FLAGS 4
#define TASK_SIGPENDING 8
-#define TASK_MM 936
+#define TASK_NEED_RESCHED 20
+#define TASK_COUNTER 24
+#define TASK_PRIORITY 28
+#define TASK_MM 928
/* MIPS specific thread_struct offsets. */
-#define THREAD_REG16 576
-#define THREAD_REG17 580
-#define THREAD_REG18 584
-#define THREAD_REG19 588
-#define THREAD_REG20 592
-#define THREAD_REG21 596
-#define THREAD_REG22 600
-#define THREAD_REG23 604
-#define THREAD_REG29 608
-#define THREAD_REG30 612
-#define THREAD_REG31 616
-#define THREAD_STATUS 620
-#define THREAD_FPU 624
-#define THREAD_BVADDR 888
-#define THREAD_BUADDR 892
-#define THREAD_ECODE 896
-#define THREAD_TRAPNO 900
-#define THREAD_PGDIR 904
-#define THREAD_MFLAGS 908
-#define THREAD_CURDS 912
-#define THREAD_TRAMP 916
-#define THREAD_OLDCTX 920
+#define THREAD_REG16 568
+#define THREAD_REG17 572
+#define THREAD_REG18 576
+#define THREAD_REG19 580
+#define THREAD_REG20 584
+#define THREAD_REG21 588
+#define THREAD_REG22 592
+#define THREAD_REG23 596
+#define THREAD_REG29 600
+#define THREAD_REG30 604
+#define THREAD_REG31 608
+#define THREAD_STATUS 612
+#define THREAD_FPU 616
+#define THREAD_BVADDR 880
+#define THREAD_BUADDR 884
+#define THREAD_ECODE 888
+#define THREAD_TRAPNO 892
+#define THREAD_PGDIR 896
+#define THREAD_MFLAGS 900
+#define THREAD_CURDS 904
+#define THREAD_TRAMP 908
+#define THREAD_OLDCTX 912
/* Linux mm_struct offsets. */
#define MM_COUNT 12
diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h
index 1bde35833..36c0a73e2 100644
--- a/include/asm-mips/page.h
+++ b/include/asm-mips/page.h
@@ -1,4 +1,4 @@
-/* $Id: page.h,v 1.2 1998/06/30 00:23:11 ralf Exp $
+/* $Id: page.h,v 1.3 1998/07/13 23:29:09 tsbogend Exp $
*
* Definitions for page handling
*
@@ -20,7 +20,7 @@
#define STRICT_MM_TYPECHECKS
-#ifndef __LANGUAGE_ASSEMBLY__
+#ifndef _LANGUAGE_ASSEMBLY
#ifdef __SMP__
#define ULOCK_DECLARE extern spinlock_t user_page_lock;
@@ -117,7 +117,7 @@ typedef unsigned long pgprot_t;
#endif /* !defined (STRICT_MM_TYPECHECKS) */
-#endif /* __LANGUAGE_ASSEMBLY__ */
+#endif /* _LANGUAGE_ASSEMBLY */
/* to align the pointer to the (next) page boundary */
#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
@@ -129,7 +129,8 @@ typedef unsigned long pgprot_t;
#define PAGE_OFFSET 0x80000000UL
#define __pa(x) ((unsigned long) (x) - PAGE_OFFSET)
#define __va(x) ((void *)((unsigned long) (x) + PAGE_OFFSET))
-#define MAP_NR(addr) (__pa(addr) >> PAGE_SHIFT)
+#define MAP_MASK 0x1fffffffUL
+#define MAP_NR(addr) ((((unsigned long)(addr)) & MAP_MASK) >> PAGE_SHIFT)
#endif /* defined (__KERNEL__) */
diff --git a/include/asm-mips/pci.h b/include/asm-mips/pci.h
index d2ff867f2..40781ed92 100644
--- a/include/asm-mips/pci.h
+++ b/include/asm-mips/pci.h
@@ -1,12 +1,10 @@
-/* $Id: pci.h,v 1.2 1997/12/01 18:00:40 ralf Exp $
+/* $Id: pci.h,v 1.3 1998/05/07 14:18:11 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Declarations for the MIPS specific implementation of the PCI BIOS32 services.
- *
- * Copyright (C) 1997, 1998 Ralf Baechle
*/
#ifndef __ASM_MIPS_PCI_H
#define __ASM_MIPS_PCI_H
diff --git a/include/asm-mips/pgtable.h b/include/asm-mips/pgtable.h
index e84692a40..dccd199ad 100644
--- a/include/asm-mips/pgtable.h
+++ b/include/asm-mips/pgtable.h
@@ -1,4 +1,4 @@
-/* $Id: pgtable.h,v 1.11 1998/07/14 09:31:48 ralf Exp $
+/* $Id: pgtable.h,v 1.14 1998/07/16 19:10:04 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
@@ -12,7 +12,7 @@
#include <asm/addrspace.h>
#include <asm/mipsconfig.h>
-#ifndef __LANGUAGE_ASSEMBLY__
+#ifndef _LANGUAGE_ASSEMBLY
#include <linux/linkage.h>
#include <asm/cachectl.h>
@@ -61,7 +61,7 @@ extern void (*add_wired_entry)(unsigned long entrylo0, unsigned long entrylo1,
* works even with the cache aliasing problem the R4k and above have.
*/
-#endif /* !defined (__LANGUAGE_ASSEMBLY__) */
+#endif /* !defined (_LANGUAGE_ASSEMBLY) */
/* PMD_SHIFT determines the size of the area a second-level page table can map */
#define PMD_SHIFT 22
@@ -79,9 +79,11 @@ extern void (*add_wired_entry)(unsigned long entrylo0, unsigned long entrylo1,
#define PTRS_PER_PTE 1024
#define PTRS_PER_PMD 1
#define PTRS_PER_PGD 1024
+#define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE)
#define VMALLOC_START KSEG2
#define VMALLOC_VMADDR(x) ((unsigned long)(x))
+#define VMALLOC_END KSEG3
/* Note that we shift the lower 32bits of each EntryLo[01] entry
* 6 bits to the left. That way we can convert the PFN into the
@@ -166,7 +168,7 @@ extern void (*add_wired_entry)(unsigned long entrylo0, unsigned long entrylo1,
#define __S110 PAGE_SHARED
#define __S111 PAGE_SHARED
-#if !defined (__LANGUAGE_ASSEMBLY__)
+#if !defined (_LANGUAGE_ASSEMBLY)
/*
* BAD_PAGETABLE is used when we need a bogus page-table, while
@@ -354,7 +356,7 @@ extern inline pte_t mk_pte(unsigned long page, pgprot_t pgprot)
extern inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot)
{
- return __pte(physpage | pgprot_val(pgprot));
+ return __pte((physpage - PAGE_OFFSET) | pgprot_val(pgprot));
}
extern inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
@@ -385,77 +387,141 @@ extern inline pte_t *pte_offset(pmd_t * dir, unsigned long address)
}
/*
+ * Initialize new page directory with pointers to invalid ptes
+ */
+extern void (*pgd_init)(unsigned long page);
+
+/*
* Allocate and free page tables. The xxx_kernel() versions are
* used to allocate a kernel page table - this turns on ASN bits
* if any.
*/
-extern inline void pte_free_kernel(pte_t *pte)
+
+#define pgd_quicklist (current_cpu_data.pgd_quick)
+#define pmd_quicklist ((unsigned long *)0)
+#define pte_quicklist (current_cpu_data.pte_quick)
+#define pgtable_cache_size (current_cpu_data.pgtable_cache_sz)
+
+extern __inline__ pgd_t *get_pgd_slow(void)
{
- free_page((unsigned long) pte);
+ pgd_t *ret = (pgd_t *)__get_free_page(GFP_KERNEL), *init;
+
+ if (ret) {
+ init = pgd_offset(&init_mm, 0);
+ pgd_init((unsigned long)ret);
+ memcpy (ret + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD,
+ (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
+ }
+ return ret;
}
-extern const char bad_pmd_string[];
+extern __inline__ pgd_t *get_pgd_fast(void)
+{
+ unsigned long *ret;
+
+ if((ret = pgd_quicklist) != NULL) {
+ pgd_quicklist = (unsigned long *)(*ret);
+ ret[0] = ret[1];
+ pgtable_cache_size--;
+ } else
+ ret = (unsigned long *)get_pgd_slow();
+ return (pgd_t *)ret;
+}
-extern inline pte_t *pte_alloc_kernel(pmd_t *pmd, unsigned long address)
+extern __inline__ void free_pgd_fast(pgd_t *pgd)
{
- address = (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
- if (pmd_none(*pmd)) {
- pte_t *page = (pte_t *) get_free_page(GFP_KERNEL);
- if (pmd_none(*pmd)) {
- if (page) {
- pmd_set(pmd, page);
- return page + address;
- }
- pmd_set(pmd, (pte_t *) BAD_PAGETABLE);
- return NULL;
- }
- free_page((unsigned long) page);
- }
- if (pmd_bad(*pmd)) {
- printk(bad_pmd_string, pmd_val(*pmd));
- pmd_set(pmd, (pte_t *) BAD_PAGETABLE);
- return NULL;
+ *(unsigned long *)pgd = (unsigned long) pgd_quicklist;
+ pgd_quicklist = (unsigned long *) pgd;
+ pgtable_cache_size++;
+}
+
+extern __inline__ void free_pgd_slow(pgd_t *pgd)
+{
+ free_page((unsigned long)pgd);
+}
+
+extern pte_t *get_pte_slow(pmd_t *pmd, unsigned long address_preadjusted);
+extern pte_t *get_pte_kernel_slow(pmd_t *pmd, unsigned long address_preadjusted);
+
+extern __inline__ pte_t *get_pte_fast(void)
+{
+ unsigned long *ret;
+
+ if((ret = (unsigned long *)pte_quicklist) != NULL) {
+ pte_quicklist = (unsigned long *)(*ret);
+ ret[0] = ret[1];
+ pgtable_cache_size--;
}
- return (pte_t *) pmd_page(*pmd) + address;
+ return (pte_t *)ret;
}
-/*
- * allocating and freeing a pmd is trivial: the 1-entry pmd is
- * inside the pgd, so has no extra memory associated with it.
- */
-extern inline void pmd_free_kernel(pmd_t *pmd)
+extern __inline__ void free_pte_fast(pte_t *pte)
{
- pmd_val(*pmd) = ((unsigned long) invalid_pte_table);
+ *(unsigned long *)pte = (unsigned long) pte_quicklist;
+ pte_quicklist = (unsigned long *) pte;
+ pgtable_cache_size++;
}
-extern inline pmd_t *pmd_alloc_kernel(pgd_t *pgd, unsigned long address)
+extern __inline__ void free_pte_slow(pte_t *pte)
{
- return (pmd_t *) pgd;
+ free_page((unsigned long)pte);
}
-extern inline void pte_free(pte_t *pte)
+/* We don't use pmd cache, so these are dummy routines */
+extern __inline__ pmd_t *get_pmd_fast(void)
{
- free_page((unsigned long) pte);
+ return (pmd_t *)0;
}
-extern inline pte_t *pte_alloc(pmd_t *pmd, unsigned long address)
+extern __inline__ void free_pmd_fast(pmd_t *pmd)
+{
+}
+
+extern __inline__ void free_pmd_slow(pmd_t *pmd)
+{
+}
+
+extern void __bad_pte(pmd_t *pmd);
+extern void __bad_pte_kernel(pmd_t *pmd);
+
+#define pte_free_kernel(pte) free_pte_fast(pte)
+#define pte_free(pte) free_pte_fast(pte)
+#define pgd_free(pgd) free_pgd_fast(pgd)
+#define pgd_alloc() get_pgd_fast()
+
+extern inline pte_t * pte_alloc_kernel(pmd_t * pmd, unsigned long address)
+{
+ address = (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
+
+ if (pmd_none(*pmd)) {
+ pte_t *page = get_pte_fast();
+ if (page) {
+ pmd_val(*pmd) = (unsigned long)page;
+ return page + address;
+ }
+ return get_pte_kernel_slow(pmd, address);
+ }
+ if (pmd_bad(*pmd)) {
+ __bad_pte_kernel(pmd);
+ return NULL;
+ }
+ return (pte_t *) pmd_page(*pmd) + address;
+}
+
+extern inline pte_t * pte_alloc(pmd_t * pmd, unsigned long address)
{
address = (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
+
if (pmd_none(*pmd)) {
- pte_t *page = (pte_t *) get_free_page(GFP_KERNEL);
- if (pmd_none(*pmd)) {
- if (page) {
- pmd_set(pmd, page);
- return page + address;
- }
- pmd_set(pmd, (pte_t *) BAD_PAGETABLE);
- return NULL;
+ pte_t *page = get_pte_fast();
+ if (page) {
+ pmd_val(*pmd) = (unsigned long)page;
+ return page + address;
}
- free_page((unsigned long) page);
+ return get_pte_slow(pmd, address);
}
if (pmd_bad(*pmd)) {
- printk(bad_pmd_string, pmd_val(*pmd));
- pmd_set(pmd, (pte_t *) BAD_PAGETABLE);
+ __bad_pte(pmd);
return NULL;
}
return (pte_t *) pmd_page(*pmd) + address;
@@ -465,36 +531,45 @@ extern inline pte_t *pte_alloc(pmd_t *pmd, unsigned long address)
* allocating and freeing a pmd is trivial: the 1-entry pmd is
* inside the pgd, so has no extra memory associated with it.
*/
-extern inline void pmd_free(pmd_t *pmd)
+extern inline void pmd_free(pmd_t * pmd)
{
- pmd_val(*pmd) = ((unsigned long) invalid_pte_table);
}
-extern inline pmd_t *pmd_alloc(pgd_t *pgd, unsigned long address)
+extern inline pmd_t * pmd_alloc(pgd_t * pgd, unsigned long address)
{
return (pmd_t *) pgd;
}
-extern inline void pgd_free(pgd_t *pgd)
-{
- free_page((unsigned long) pgd);
-}
+#define pmd_free_kernel pmd_free
+#define pmd_alloc_kernel pmd_alloc
-/*
- * Initialize new page directory with pointers to invalid ptes
- */
-extern void (*pgd_init)(unsigned long page);
+extern int do_check_pgt_cache(int, int);
-extern inline pgd_t *pgd_alloc(void)
+extern inline void set_pgdir(unsigned long address, pgd_t entry)
{
- unsigned long page;
-
- if(!(page = __get_free_page(GFP_KERNEL)))
- return NULL;
-
- pgd_init(page);
-
- return (pgd_t *) page;
+ struct task_struct * p;
+ pgd_t *pgd;
+#ifdef __SMP__
+ int i;
+#endif
+
+ read_lock(&tasklist_lock);
+ for_each_task(p) {
+ if (!p->mm)
+ continue;
+ *pgd_offset(p->mm,address) = entry;
+ }
+ read_unlock(&tasklist_lock);
+#ifndef __SMP__
+ for (pgd = (pgd_t *)pgd_quicklist; pgd; pgd = (pgd_t *)*(unsigned long *)pgd)
+ pgd[address >> PGDIR_SHIFT] = entry;
+#else
+ /* To pgd_alloc/pgd_free, one holds master kernel lock and so does our
+ callee, so we can modify pgd caches of other CPUs as well. -jj */
+ for (i = 0; i < NR_CPUS; i++)
+ for (pgd = (pgd_t *)cpu_data[i].pgd_quick; pgd; pgd = (pgd_t *)*(unsigned long *)pgd)
+ pgd[address >> PGDIR_SHIFT] = entry;
+#endif
}
extern pgd_t swapper_pg_dir[1024];
@@ -512,6 +587,9 @@ extern void (*update_mmu_cache)(struct vm_area_struct *vma,
#define module_map vmalloc
#define module_unmap vfree
+/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
+#define PageSkip(page) (0)
+
/* TLB operations. */
extern inline void tlb_probe(void)
{
@@ -781,6 +859,6 @@ extern inline void set_context(unsigned long val)
: : "r" (val));
}
-#endif /* !defined (__LANGUAGE_ASSEMBLY__) */
+#endif /* !defined (_LANGUAGE_ASSEMBLY) */
#endif /* __ASM_MIPS_PGTABLE_H */
diff --git a/include/asm-mips/pica.h b/include/asm-mips/pica.h
deleted file mode 100644
index a1056f845..000000000
--- a/include/asm-mips/pica.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Hardware info about Acer PICA 61 and similar
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1995 by Andreas Busse and Ralf Baechle
- */
-#ifndef __ASM_MIPS_PICA_H
-#define __ASM_MIPS_PICA_H
-
-/*
- * The addresses below are virtual address. The mappings are
- * created on startup via wired entries in the tlb. The Mips
- * Magnum R3000 and R4000 machines are similar in many aspects,
- * but many hardware register are accessible at 0xb9000000 in
- * instead of 0xe0000000.
- */
-
-/*
- * Revision numbers in PICA_ASIC_REVISION
- *
- * 0xf0000000 - Rev1
- * 0xf0000001 - Rev2
- * 0xf0000002 - Rev3
- */
-#define PICA_ASIC_REVISION 0xe0000008
-
-/*
- * The segments of the seven segment LED are mapped
- * to the control bits as follows:
- *
- * (7)
- * ---------
- * | |
- * (2) | | (6)
- * | (1) |
- * ---------
- * | |
- * (3) | | (5)
- * | (4) |
- * --------- . (0)
- */
-#define PICA_LED 0xe000f000
-
-/*
- * Some characters for the LED control registers
- * The original Mips machines seem to have a LED display
- * with integrated decoder while the Acer machines can
- * control each of the seven segments and the dot independently.
- * It only a toy, anyway...
- */
-#define LED_DOT 0x01
-#define LED_SPACE 0x00
-#define LED_0 0xfc
-#define LED_1 0x60
-#define LED_2 0xda
-#define LED_3 0xf2
-#define LED_4 0x66
-#define LED_5 0xb6
-#define LED_6 0xbe
-#define LED_7 0xe0
-#define LED_8 0xfe
-#define LED_9 0xf6
-#define LED_A 0xee
-#define LED_b 0x3e
-#define LED_C 0x9c
-#define LED_d 0x7a
-#define LED_E 0x9e
-#define LED_F 0x8e
-
-#ifndef __LANGUAGE_ASSEMBLY__
-
-extern __inline__ void pica_set_led(unsigned int bits)
-{
- volatile unsigned int *led_register = (unsigned int *) PICA_LED;
-
- *led_register = bits;
-}
-
-#endif
-
-/*
- * i8042 keyboard controller for PICA chipset.
- * This address is just a guess and seems to differ
- * from the other mips machines...
- */
-#define PICA_KEYBOARD_ADDRESS 0xe0005000
-#define PICA_KEYBOARD_DATA 0xe0005000
-#define PICA_KEYBOARD_COMMAND 0xe0005001
-
-#ifndef __LANGUAGE_ASSEMBLY__
-
-typedef struct {
- unsigned char data;
- unsigned char command;
-} pica_keyboard_hardware;
-
-typedef struct {
- unsigned char pad0[3];
- unsigned char data;
- unsigned char pad1[3];
- unsigned char command;
-} mips_keyboard_hardware;
-
-/*
- * For now
- */
-#define keyboard_hardware pica_keyboard_hardware
-
-#endif
-
-/*
- * i8042 keyboard controller for most other Mips machines.
- */
-#define MIPS_KEYBOARD_ADDRESS 0xb9005000
-#define MIPS_KEYBOARD_DATA 0xb9005003
-#define MIPS_KEYBOARD_COMMAND 0xb9005007
-
-#ifndef __LANGUAGE_ASSEMBLY__
-
-#endif
-
-/*
- * PICA timer registers and interrupt no.
- * Note that the hardware timer interrupt is actually on
- * cpu level 6, but to keep compatibility with PC stuff
- * it is remapped to vector 0. See arch/mips/kernel/entry.S.
- */
-#define PICA_TIMER_INTERVAL 0xe0000228
-#define PICA_TIMER_REGISTER 0xe0000230
-
-/*
- * DRAM configuration register
- */
-#ifndef __LANGUAGE_ASSEMBLY__
-#ifdef __MIPSEL__
-typedef struct {
- unsigned int bank2 : 3;
- unsigned int bank1 : 3;
- unsigned int mem_bus_width : 1;
- unsigned int reserved2 : 1;
- unsigned int page_mode : 1;
- unsigned int reserved1 : 23;
-} dram_configuration;
-#else /* defined (__MIPSEB__) */
-typedef struct {
- unsigned int reserved1 : 23;
- unsigned int page_mode : 1;
- unsigned int reserved2 : 1;
- unsigned int mem_bus_width : 1;
- unsigned int bank1 : 3;
- unsigned int bank2 : 3;
-} dram_configuration;
-#endif
-#endif /* __LANGUAGE_ASSEMBLY__ */
-
-#define PICA_DRAM_CONFIG 0xe00fffe0
-
-/*
- * PICA interrupt control registers
- */
-#define PICA_IO_IRQ_SOURCE 0xe0100000
-#define PICA_IO_IRQ_ENABLE 0xe0100002
-
-/*
- * Pica interrupt enable bits
- */
-#define PIE_PARALLEL (1<<0)
-#define PIE_FLOPPY (1<<1)
-#define PIE_SOUND (1<<2)
-#define PIE_VIDEO (1<<3)
-#define PIE_ETHERNET (1<<4)
-#define PIE_SCSI (1<<5)
-#define PIE_KEYBOARD (1<<6)
-#define PIE_MOUSE (1<<7)
-#define PIE_SERIAL1 (1<<8)
-#define PIE_SERIAL2 (1<<9)
-
-#endif /* __ASM_MIPS_PICA_H */
diff --git a/include/asm-mips/posix_types.h b/include/asm-mips/posix_types.h
index 6ae7982d1..057a44df8 100644
--- a/include/asm-mips/posix_types.h
+++ b/include/asm-mips/posix_types.h
@@ -1,11 +1,10 @@
-/*
- * POSIX types
+/* $Id: posix_types.h,v 1.5 1998/08/17 13:59:34 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
- * Copyright (C) 1996 by Ralf Baechle
+ * Copyright (C) 1996, 1997, 1998 by Ralf Baechle
*/
#ifndef __ARCH_MIPS_POSIX_TYPES_H
#define __ARCH_MIPS_POSIX_TYPES_H
@@ -46,6 +45,8 @@ typedef struct {
long val[2];
} __kernel_fsid_t;
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+
#undef __FD_SET
static __inline__ void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp)
{
@@ -114,4 +115,6 @@ static __inline__ void __FD_ZERO(__kernel_fd_set *__p)
}
}
+#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
+
#endif /* __ARCH_MIPS_POSIX_TYPES_H */
diff --git a/include/asm-mips/processor.h b/include/asm-mips/processor.h
index 63d721720..614c7aa64 100644
--- a/include/asm-mips/processor.h
+++ b/include/asm-mips/processor.h
@@ -1,28 +1,46 @@
-/*
- * include/asm-mips/processor.h
+/* $Id: processor.h,v 1.17 1998/08/18 20:46:41 ralf Exp $
*
- * Copyright (C) 1994 Waldorf Electronics
- * written by Ralf Baechle
- * Modified further for R[236]000 compatibility by Paul M. Antoine
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
*
- * $Id: processor.h,v 1.10 1998/05/04 09:13:01 ralf Exp $
+ * Copyright (C) 1994 Waldorf GMBH
+ * Copyright (C) 1995, 1996, 1997, 1998 Ralf Baechle
+ * Modified further for R[236]000 compatibility by Paul M. Antoine
*/
#ifndef __ASM_MIPS_PROCESSOR_H
#define __ASM_MIPS_PROCESSOR_H
-#if !defined (__LANGUAGE_ASSEMBLY__)
+#if !defined (_LANGUAGE_ASSEMBLY)
#include <asm/cachectl.h>
#include <asm/mipsregs.h>
#include <asm/reg.h>
#include <asm/system.h>
+struct mips_cpuinfo {
+ unsigned long *pgd_quick;
+ unsigned long *pte_quick;
+ unsigned long pgtable_cache_sz;
+};
+
/*
* System setup and hardware flags..
+ * XXX: Should go into mips_cpuinfo.
*/
extern char wait_available; /* only available on R4[26]00 */
extern char cyclecounter_available; /* only available from R4000 upwards. */
extern char dedicated_iv_available; /* some embedded MIPS like Nevada */
+extern struct mips_cpuinfo boot_cpu_data;
+
+#ifdef __SMP__
+extern struct mips_cpuinfo cpu_data[];
+#define current_cpu_data cpu_data[smp_processor_id()]
+#else
+#define cpu_data &boot_cpu_data
+#define current_cpu_data boot_cpu_data
+#endif
+
/*
* Bus types (default is ISA, but people can check others with these..)
* MCA_bus hardcoded to 0 for now.
@@ -40,6 +58,9 @@ extern int EISA_bus;
#define wp_works_ok 1
#define wp_works_ok__is_a_macro /* for versions in ksyms.c */
+/* Lazy FPU handling on uni-processor */
+extern struct task_struct *last_task_used_math;
+
/*
* User space process size: 2GB. This is hardcoded into a few places,
* so don't change it unless you know what you are doing. TASK_SIZE
@@ -114,7 +135,7 @@ struct thread_struct {
unsigned long irix_oldctx;
};
-#endif /* !defined (__LANGUAGE_ASSEMBLY__) */
+#endif /* !defined (_LANGUAGE_ASSEMBLY) */
#define INIT_MMAP { &init_mm, KSEG0, KSEG1, PAGE_SHARED, \
VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap }
@@ -147,7 +168,7 @@ struct thread_struct {
#define KERNEL_STACK_SIZE 8192
-#if !defined (__LANGUAGE_ASSEMBLY__)
+#if !defined (_LANGUAGE_ASSEMBLY)
/* Free all resources held by a thread. */
extern void release_thread(struct task_struct *);
@@ -188,7 +209,7 @@ extern void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long
#define init_task (init_task_union.task)
#define init_stack (init_task_union.stack)
-#endif /* !defined (__LANGUAGE_ASSEMBLY__) */
+#endif /* !defined (_LANGUAGE_ASSEMBLY) */
#endif /* __KERNEL__ */
/*
diff --git a/include/asm-mips/serial.h b/include/asm-mips/serial.h
index faf916974..7d4f6ecfe 100644
--- a/include/asm-mips/serial.h
+++ b/include/asm-mips/serial.h
@@ -15,14 +15,9 @@
*/
#define BASE_BAUD ( 1843200 / 16 )
-#ifndef CONFIG_OLIVETTI_M700
/* Some Jazz machines seem to have an 8MHz crystal clock but I don't know
exactly which ones ... XXX */
#define JAZZ_BASE_BAUD ( 8000000 / 16 ) /* ( 3072000 / 16) */
-#else
-/* but the M700 isn't such a strange beast */
-#define JAZZ_BASE_BAUD BASE_BAUD
-#endif
/* Standard COM flags (except for COM4, because of the 8514 problem) */
#ifdef CONFIG_SERIAL_DETECT_IRQ
diff --git a/include/asm-mips/sgidefs.h b/include/asm-mips/sgidefs.h
index 72d25346a..06c94226f 100644
--- a/include/asm-mips/sgidefs.h
+++ b/include/asm-mips/sgidefs.h
@@ -45,7 +45,7 @@
#endif
/*
- * Now lets try our best to supply some reasonable default values for
+ * Now let's try our best to supply some reasonable default values for
* whatever defines GCC didn't supply. This cannot be done correct for
* all possible combinations of options, so be careful with your options
* to GCC. Best bet is to keep your fingers off the a.out GCC and use
diff --git a/include/asm-mips/siginfo.h b/include/asm-mips/siginfo.h
index d4e6f4145..2cf7fd22e 100644
--- a/include/asm-mips/siginfo.h
+++ b/include/asm-mips/siginfo.h
@@ -43,6 +43,7 @@ typedef struct siginfo {
/* SIGCHLD */
struct {
pid_t _pid; /* which child */
+ uid_t _uid; /* sender's uid */
int _status; /* exit code */
clock_t _utime;
clock_t _stime;
diff --git a/include/asm-mips/signal.h b/include/asm-mips/signal.h
index 0f5988610..e195bc6b2 100644
--- a/include/asm-mips/signal.h
+++ b/include/asm-mips/signal.h
@@ -1,13 +1,10 @@
-/*
- * Linux/MIPS specific definitions for signals.
+/* $Id: signal.h,v 1.4 1998/08/18 20:46:42 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
- * Copyright (C) 1995, 1996, 1997 by Ralf Baechle
- *
- * $Id: signal.h,v 1.3 1997/12/14 18:57:19 ralf Exp $
+ * Copyright (C) 1995, 1996, 1997, 1998 by Ralf Baechle
*/
#ifndef __ASM_MIPS_SIGNAL_H
#define __ASM_MIPS_SIGNAL_H
@@ -66,7 +63,7 @@ typedef unsigned long old_sigset_t; /* at least 32 bits */
/*
* SA_FLAGS values:
*
- * SA_ONSTACK is not currently supported, but will allow sigaltstack(2).
+ * SA_ONSTACK indicates that a registered stack_t will be used.
* SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
* SA_RESTART flag to get restarting signals (which were the default long ago)
* SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
@@ -85,8 +82,17 @@ typedef unsigned long old_sigset_t; /* at least 32 bits */
#define SA_NOCLDWAIT 0x00010000 /* Not supported yet */
#define SA_NOCLDSTOP 0x00020000
-#define SA_NOMASK SA_NODEFER /* DANGER: was 0x02000000 */
-#define SA_ONESHOT SA_RESETHAND /* DANGER: was 0x04000000 */
+#define SA_NOMASK SA_NODEFER
+#define SA_ONESHOT SA_RESETHAND
+
+/*
+ * sigaltstack controls
+ */
+#define SS_ONSTACK 1
+#define SS_DISABLE 2
+
+#define MINSIGSTKSZ 2048
+#define SIGSTKSZ 8192
#ifdef __KERNEL__
/*
@@ -130,6 +136,13 @@ struct k_sigaction {
void (*ka_restorer)(void);
};
+/* IRIX compatible stack_t */
+typedef struct sigaltstack {
+ void *ss_sp;
+ size_t ss_size;
+ int ss_flags;
+} stack_t;
+
#ifdef __KERNEL__
#include <asm/sigcontext.h>
#endif
diff --git a/include/asm-mips/smp_lock.h b/include/asm-mips/smp_lock.h
deleted file mode 100644
index c9482ab7d..000000000
--- a/include/asm-mips/smp_lock.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1996 Ralf Baechle
- *
- * Linux/MIPS SMP support. Just a dummy to make building possible.
- */
-#ifndef __ASM_MIPS_SMPLOCK_H
-#define __ASM_MIPS_SMPLOCK_H
-
-#ifndef __SMP__
-
-#define lock_kernel() do { } while(0)
-#define unlock_kernel() do { } while(0)
-#define release_kernel_lock(task, cpu, depth) ((depth) = 1)
-#define reacquire_kernel_lock(task, cpu, depth) do { } while(0)
-
-#else
-
-#error "We do not support SMP on MIPS yet"
-
-#endif /* __SMP__ */
-
-#endif /* __ASM_MIPS_SMPLOCK_H */
diff --git a/include/asm-mips/smplock.h b/include/asm-mips/smplock.h
new file mode 100644
index 000000000..61bf3ff9c
--- /dev/null
+++ b/include/asm-mips/smplock.h
@@ -0,0 +1,52 @@
+/* $Id$
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Default SMP lock implementation
+ */
+#include <linux/interrupt.h>
+#include <asm/spinlock.h>
+
+extern spinlock_t kernel_flag;
+
+/*
+ * Release global kernel lock and global interrupt lock
+ */
+#define release_kernel_lock(task, cpu) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_unlock(&kernel_flag); \
+ release_irqlock(cpu); \
+ __sti(); \
+} while (0)
+
+/*
+ * Re-acquire the kernel lock
+ */
+#define reacquire_kernel_lock(task) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_lock(&kernel_flag); \
+} while (0)
+
+
+/*
+ * Getting the big kernel lock.
+ *
+ * This cannot happen asynchronously,
+ * so we only need to worry about other
+ * CPU's.
+ */
+extern __inline__ void lock_kernel(void)
+{
+ if (!++current->lock_depth)
+ spin_lock(&kernel_flag);
+}
+
+extern __inline__ void unlock_kernel(void)
+{
+ if (--current->lock_depth < 0)
+ spin_unlock(&kernel_flag);
+}
diff --git a/include/asm-mips/string.h b/include/asm-mips/string.h
index 7f4bded24..989ebd73e 100644
--- a/include/asm-mips/string.h
+++ b/include/asm-mips/string.h
@@ -1,13 +1,10 @@
-/*
- * include/asm-mips/string.h
+/* $Id: string.h,v 1.6 1998/07/20 17:52:21 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
- * Copyright (c) 1994, 1995, 1996, 1997 by Ralf Baechle
- *
- * $Id: string.h,v 1.7 1998/03/25 00:24:10 ralf Exp $
+ * Copyright (c) 1994, 1995, 1996, 1997, 1998 by Ralf Baechle
*/
#ifndef __ASM_MIPS_STRING_H
#define __ASM_MIPS_STRING_H
@@ -127,11 +124,8 @@ extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
#define __HAVE_ARCH_MEMMOVE
extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
+/* Don't build bcopy at all ... */
#define __HAVE_ARCH_BCOPY
-extern __inline__ char * bcopy(const char * src, char * dest, int count)
-{
- memmove(dest, src, count);
-}
#define __HAVE_ARCH_MEMSCAN
extern __inline__ void *memscan(void *__addr, int __c, size_t __size)
diff --git a/include/asm-mips/system.h b/include/asm-mips/system.h
index dd5aa3422..c16163a32 100644
--- a/include/asm-mips/system.h
+++ b/include/asm-mips/system.h
@@ -1,10 +1,10 @@
-/* $Id: system.h,v 1.7 1998/05/04 03:53:22 ralf Exp $
+/* $Id: system.h,v 1.8 1998/07/20 17:52:21 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
- * Copyright (C) 1994, 1995 by Ralf Baechle
+ * Copyright (C) 1994, 1995, 1996, 1997, 1998 by Ralf Baechle
* Modified further for R[236]000 by Paul M. Antoine, 1996
*/
#ifndef __ASM_MIPS_SYSTEM_H
@@ -118,13 +118,13 @@ __asm__ __volatile__( \
: /* no input */ \
: "memory")
-#if !defined (__LANGUAGE_ASSEMBLY__)
+#if !defined (_LANGUAGE_ASSEMBLY)
/*
* switch_to(n) should switch tasks to task nr n, first
* checking that n isn't the current task, in which case it does nothing.
*/
extern asmlinkage void (*resume)(void *tsk);
-#endif /* !defined (__LANGUAGE_ASSEMBLY__) */
+#endif /* !defined (_LANGUAGE_ASSEMBLY) */
#define switch_to(prev,next) \
do { \
diff --git a/include/asm-mips/termios.h b/include/asm-mips/termios.h
index 8293b5df1..ae1e770aa 100644
--- a/include/asm-mips/termios.h
+++ b/include/asm-mips/termios.h
@@ -93,6 +93,7 @@ struct termio {
#define N_AX25 5
#define N_X25 6 /* X.25 async */
#define N_6PACK 7
+#define N_MASC 8 /* Reserved fo Mobitex module <kaz@cafe.net> */
#ifdef __KERNEL__
diff --git a/include/asm-mips/timex.h b/include/asm-mips/timex.h
new file mode 100644
index 000000000..dd4aea511
--- /dev/null
+++ b/include/asm-mips/timex.h
@@ -0,0 +1,20 @@
+/* $Id: timex.h,v 1.1 1998/08/17 10:20:18 ralf Exp $
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1998 by Ralf Baechle
+ *
+ * FIXME: For some of the supported machines this is dead wrong.
+ */
+#ifndef __ASM_MIPS_TIMEX_H
+#define __ASM_MIPS_TIMEX_H
+
+#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
+#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */
+#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
+ (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
+ << (SHIFT_SCALE-SHIFT_HZ)) / HZ)
+
+#endif /* __ASM_MIPS_TIMEX_H */
diff --git a/include/asm-mips/unistd.h b/include/asm-mips/unistd.h
index a9640faa5..28079fe00 100644
--- a/include/asm-mips/unistd.h
+++ b/include/asm-mips/unistd.h
@@ -1,6 +1,4 @@
-/* $Id: unistd.h,v 1.13 1998/05/07 15:21:41 ralf Exp $
- *
- * This file contains the system call numbers.
+/* $Id: unistd.h,v 1.18 1998/08/20 16:34:48 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
@@ -1010,7 +1008,7 @@
#define __NR_lseek (__NR_Linux + 19)
#define __NR_getpid (__NR_Linux + 20)
#define __NR_mount (__NR_Linux + 21)
-#define __NR_umount (__NR_Linux + 22)
+#define __NR_oldumount (__NR_Linux + 22)
#define __NR_setuid (__NR_Linux + 23)
#define __NR_getuid (__NR_Linux + 24)
#define __NR_stime (__NR_Linux + 25)
@@ -1040,7 +1038,7 @@
#define __NR_geteuid (__NR_Linux + 49)
#define __NR_getegid (__NR_Linux + 50)
#define __NR_acct (__NR_Linux + 51)
-#define __NR_phys (__NR_Linux + 52)
+#define __NR_umount (__NR_Linux + 52)
#define __NR_lock (__NR_Linux + 53)
#define __NR_ioctl (__NR_Linux + 54)
#define __NR_fcntl (__NR_Linux + 55)
@@ -1194,13 +1192,17 @@
#define __NR_getcwd (__NR_Linux + 203)
#define __NR_capget (__NR_Linux + 204)
#define __NR_capset (__NR_Linux + 205)
+#define __NR_sigaltstack (__NR_Linux + 206)
+#define __NR_sendfile (__NR_Linux + 207)
+#define __NR_streams1 (__NR_Linux + 208)
+#define __NR_streams2 (__NR_Linux + 209)
/*
* Offset of the last Linux flavoured syscall
*/
-#define __NR_Linux_syscalls 205
+#define __NR_Linux_syscalls 209
-#ifndef __LANGUAGE_ASSEMBLY__
+#ifndef _LANGUAGE_ASSEMBLY
/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
#define _syscall0(type,name) \
@@ -1479,6 +1481,6 @@ static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long f
}
#endif /* !defined (__KERNEL_SYSCALLS__) */
-#endif /* !defined (__LANGUAGE_ASSEMBLY__) */
+#endif /* !defined (_LANGUAGE_ASSEMBLY) */
#endif /* __ASM_MIPS_UNISTD_H */
diff --git a/include/asm-mips/vga.h b/include/asm-mips/vga.h
new file mode 100644
index 000000000..5fc680563
--- /dev/null
+++ b/include/asm-mips/vga.h
@@ -0,0 +1,35 @@
+/*
+ * Access to VGA videoram
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ */
+
+#ifndef _LINUX_ASM_VGA_H_
+#define _LINUX_ASM_VGA_H_
+
+#include <asm/io.h>
+
+#define VT_BUF_HAVE_RW
+
+extern inline void scr_writew(u16 val, u16 *addr)
+{
+ if ((long) addr < 0)
+ *addr = val;
+ else
+ writew(val, (unsigned long) addr);
+}
+
+extern inline u16 scr_readw(u16 *addr)
+{
+ if ((long) addr < 0)
+ return *addr;
+ else
+ return readw((unsigned long) addr);
+}
+
+#define vga_readb readb
+#define vga_writeb writeb
+
+#define VGA_MAP_MEM(x) (x)
+
+#endif
diff --git a/include/asm-mips/watch.h b/include/asm-mips/watch.h
index 6fcde8428..abfc622ef 100644
--- a/include/asm-mips/watch.h
+++ b/include/asm-mips/watch.h
@@ -1,13 +1,10 @@
-/*
- * Functions to use the watch register debugging functionality.
+/* $Id: watch.h,v 1.3 1998/08/19 21:58:15 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
- * Copyright (C) 1996, 1997 by Ralf Baechle
- *
- * $Id: watch.h,v 1.2 1997/09/19 08:37:44 ralf Exp $
+ * Copyright (C) 1996, 1997, 1998 by Ralf Baechle
*/
#ifndef __ASM_WATCH_H
#define __ASM_WATCH_H
@@ -24,9 +21,9 @@ enum wref_type {
extern char watch_available;
-extern asmlinkage __watch_set(unsigned long addr, enum wref_type ref);
-extern asmlinkage __watch_clear(void);
-extern asmlinkage __watch_reenable(void);
+extern asmlinkage void __watch_set(unsigned long addr, enum wref_type ref);
+extern asmlinkage void __watch_clear(void);
+extern asmlinkage void __watch_reenable(void);
#define watch_set(addr, ref) \
if (watch_available) \
diff --git a/include/asm-ppc/amigahw.h b/include/asm-ppc/amigahw.h
new file mode 100644
index 000000000..7fae6f85c
--- /dev/null
+++ b/include/asm-ppc/amigahw.h
@@ -0,0 +1 @@
+#include <asm-m68k/amigahw.h>
diff --git a/include/asm-ppc/amigaints.h b/include/asm-ppc/amigaints.h
new file mode 100644
index 000000000..2de0f46e7
--- /dev/null
+++ b/include/asm-ppc/amigaints.h
@@ -0,0 +1 @@
+#include <asm-m68k/amigaints.h>
diff --git a/include/asm-ppc/amigappc.h b/include/asm-ppc/amigappc.h
new file mode 100644
index 000000000..e3abe6809
--- /dev/null
+++ b/include/asm-ppc/amigappc.h
@@ -0,0 +1,69 @@
+/*
+** asm-m68k/amigappc.h -- This header defines some values and pointers for
+** the Phase 5 PowerUp card.
+**
+** Copyright 1997, 1998 by Phase5, Germany.
+**
+** This file is subject to the terms and conditions of the GNU General Public
+** License. See the file COPYING in the main directory of this archive
+** for more details.
+**
+** Created: 7/22/97 by Jesper Skov
+*/
+
+#ifndef _M68K_AMIGAPPC_H
+#define _M68K_AMIGAPPC_H
+
+/* Maybe add a [#ifdef WANT_ZTWOBASE] condition to amigahw.h? */
+#define zTwoBase (0x80000000)
+
+/* At CYBERBASEp we'll find the following sum:
+ * -KERNELBASE+CyberStormMemoryBase
+ */
+#define CYBERBASEp (0xfff00000)
+
+#define APUS_WRITE(a,v) (*((volatile unsigned char *)a) = v)
+#define APUS_READ(a) (*((volatile unsigned char *)a))
+
+#define APUS_IPL_BASE (zTwoBase + 0x00f60000)
+#define APUS_REG_RESET (APUS_IPL_BASE + 0x00)
+#define APUS_REG_WAITSTATE (APUS_IPL_BASE + 0x10)
+#define APUS_REG_SHADOW (APUS_IPL_BASE + 0x18)
+#define APUS_REG_LOCK (APUS_IPL_BASE + 0x20)
+#define APUS_REG_INT (APUS_IPL_BASE + 0x28)
+#define APUS_IPL_EMU (APUS_IPL_BASE + 0x30)
+
+#define REGSHADOW_SETRESET (0x80)
+#define REGSHADOW_SELFRESET (0x40)
+
+#define REGLOCK_SETRESET (0x80)
+#define REGLOCK_BLACKMAGICK1 (0x40)
+#define REGLOCK_BLACKMAGICK2 (0x20)
+#define REGLOCK_BLACKMAGICK3 (0x10)
+
+#define REGWAITSTATE_SETRESET (0x80)
+#define REGWAITSTATE_PPCW (0x08)
+#define REGWAITSTATE_PPCR (0x04)
+
+#define REGRESET_SETRESET (0x80)
+#define REGRESET_PPCRESET (0x10)
+#define REGRESET_M68KRESET (0x08)
+#define REGRESET_AMIGARESET (0x04)
+#define REGRESET_AUXRESET (0x02)
+#define REGRESET_SCSIRESET (0x01)
+
+#define REGINT_SETRESET (0x80)
+#define REGINT_ENABLEIPL (0x02)
+#define REGINT_INTMASTER (0x01)
+
+#define IPLEMU_SETRESET (0x80)
+#define IPLEMU_DISABLEINT (0x40)
+#define IPLEMU_IPL2 (0x20)
+#define IPLEMU_IPL1 (0x10)
+#define IPLEMU_IPL0 (0x08)
+#define IPLEMU_PPCIPL2 (0x04)
+#define IPLEMU_PPCIPL1 (0x02)
+#define IPLEMU_PPCIPL0 (0x01)
+#define IPLEMU_IPLMASK (IPLEMU_PPCIPL2|IPLEMU_PPCIPL1|IPLEMU_PPCIPL0)
+
+#endif /* _M68k_AMIGAPPC_H */
diff --git a/include/asm-ppc/bitops.h b/include/asm-ppc/bitops.h
index 0a848013d..17fb6383b 100644
--- a/include/asm-ppc/bitops.h
+++ b/include/asm-ppc/bitops.h
@@ -1,5 +1,5 @@
/*
- * $Id: bitops.h,v 1.7 1997/08/03 00:12:07 paulus Exp $
+ * $Id: bitops.h,v 1.9 1998/07/26 03:05:28 davem Exp $
* bitops.h: Bit string operations on the ppc
*/
@@ -96,6 +96,38 @@ extern __inline__ int ffz(unsigned int x)
return 31 - n;
}
+#ifdef __KERNEL__
+
+/*
+ * ffs: find first bit set. This is defined the same way as
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+
+#define ffs(x) generic_ffs(x)
+
+#if 0
+/* untested, someone with PPC knowledge? */
+/* From Alexander Kjeldaas <astor@guardian.no> */
+extern __inline__ int ffs(int x)
+{
+ int result;
+ asm ("cntlzw %0,%1" : "=r" (result) : "r" (x));
+ return 32 - result; /* IBM backwards ordering of bits */
+}
+#endif
+
+/*
+ * hweightN: returns the hamming weight (i.e. the number
+ * of bits set) of a N-bit word
+ */
+
+#define hweight32(x) generic_hweight32(x)
+#define hweight16(x) generic_hweight16(x)
+#define hweight8(x) generic_hweight8(x)
+
+#endif /* __KERNEL__ */
+
/*
* This implementation of find_{first,next}_zero_bit was stolen from
* Linus' asm-alpha/bitops.h.
diff --git a/include/asm-ppc/bootinfo.h b/include/asm-ppc/bootinfo.h
new file mode 100644
index 000000000..8d78bb9cb
--- /dev/null
+++ b/include/asm-ppc/bootinfo.h
@@ -0,0 +1,375 @@
+/*
+** asm/bootinfo.h -- Definition of the Linux/m68k boot information structure
+**
+** Copyright 1992 by Greg Harp
+**
+** This file is subject to the terms and conditions of the GNU General Public
+** License. See the file COPYING in the main directory of this archive
+** for more details.
+**
+** Created 09/29/92 by Greg Harp
+**
+** 5/2/94 Roman Hodek:
+** Added bi_atari part of the machine dependent union bi_un; for now it
+** contains just a model field to distinguish between TT and Falcon.
+** 26/7/96 Roman Zippel:
+** Renamed to setup.h; added some useful macros to allow gcc some
+** optimizations if possible.
+** 5/10/96 Geert Uytterhoeven:
+** Redesign of the boot information structure; renamed to bootinfo.h again
+** 27/11/96 Geert Uytterhoeven:
+** Backwards compatibility with bootinfo interface version 1.0
+*/
+
+#ifndef _BOOTINFO_H
+#define _BOOTINFO_H
+
+
+ /*
+ * Bootinfo definitions
+ *
+ * This is an easily parsable and extendable structure containing all
+ * information to be passed from the bootstrap to the kernel.
+ *
+ * This way I hope to keep all future changes back/forewards compatible.
+ * Thus, keep your fingers crossed...
+ *
+ * This structure is copied right after the kernel bss by the bootstrap
+ * routine.
+ */
+
+#ifndef __ASSEMBLY__
+
+struct bi_record {
+ unsigned short tag; /* tag ID */
+ unsigned short size; /* size of record (in bytes) */
+ unsigned long data[0]; /* data */
+};
+
+#else /* __ASSEMBLY__ */
+
+BIR_tag = 0
+BIR_size = BIR_tag+2
+BIR_data = BIR_size+2
+
+#endif /* __ASSEMBLY__ */
+
+
+ /*
+ * Tag Definitions
+ *
+ * Machine independent tags start counting from 0x0000
+ * Machine dependent tags start counting from 0x8000
+ */
+
+#define BI_LAST 0x0000 /* last record (sentinel) */
+#define BI_MACHTYPE 0x0001 /* machine type (u_long) */
+#define BI_CPUTYPE 0x0002 /* cpu type (u_long) */
+#define BI_FPUTYPE 0x0003 /* fpu type (u_long) */
+#define BI_MMUTYPE 0x0004 /* mmu type (u_long) */
+#define BI_MEMCHUNK 0x0005 /* memory chunk address and size */
+ /* (struct mem_info) */
+#define BI_RAMDISK 0x0006 /* ramdisk address and size */
+ /* (struct mem_info) */
+#define BI_COMMAND_LINE 0x0007 /* kernel command line parameters */
+ /* (string) */
+
+ /*
+ * Amiga-specific tags
+ */
+
+#define BI_AMIGA_MODEL 0x8000 /* model (u_long) */
+#define BI_AMIGA_AUTOCON 0x8001 /* AutoConfig device */
+ /* (struct ConfigDev) */
+#define BI_AMIGA_CHIP_SIZE 0x8002 /* size of Chip RAM (u_long) */
+#define BI_AMIGA_VBLANK 0x8003 /* VBLANK frequency (u_char) */
+#define BI_AMIGA_PSFREQ 0x8004 /* power supply frequency (u_char) */
+#define BI_AMIGA_ECLOCK 0x8005 /* EClock frequency (u_long) */
+#define BI_AMIGA_CHIPSET 0x8006 /* native chipset present (u_long) */
+#define BI_AMIGA_SERPER 0x8007 /* serial port period (u_short) */
+
+ /*
+ * Atari-specific tags
+ */
+
+#define BI_ATARI_MCH_COOKIE 0x8000 /* _MCH cookie from TOS (u_long) */
+#define BI_ATARI_MCH_TYPE 0x8001 /* special machine type (u_long) */
+ /* (values are ATARI_MACH_* defines */
+
+/* mch_cookie values (upper word) */
+#define ATARI_MCH_ST 0
+#define ATARI_MCH_STE 1
+#define ATARI_MCH_TT 2
+#define ATARI_MCH_FALCON 3
+
+/* mch_type values */
+#define ATARI_MACH_NORMAL 0 /* no special machine type */
+#define ATARI_MACH_MEDUSA 1 /* Medusa 040 */
+#define ATARI_MACH_HADES 2 /* Hades 040 or 060 */
+#define ATARI_MACH_AB40 3 /* Afterburner040 on Falcon */
+
+ /*
+ * Macintosh-specific tags (all u_long)
+ */
+
+#define BI_MAC_MODEL 0x8000 /* Mac Gestalt ID (model type) */
+#define BI_MAC_VADDR 0x8001 /* Mac video base address */
+#define BI_MAC_VDEPTH 0x8002 /* Mac video depth */
+#define BI_MAC_VROW 0x8003 /* Mac video rowbytes */
+#define BI_MAC_VDIM 0x8004 /* Mac video dimensions */
+#define BI_MAC_VLOGICAL 0x8005 /* Mac video logical base */
+#define BI_MAC_SCCBASE 0x8006 /* Mac SCC base address */
+#define BI_MAC_BTIME 0x8007 /* Mac boot time */
+#define BI_MAC_GMTBIAS 0x8008 /* Mac GMT timezone offset */
+#define BI_MAC_MEMSIZE 0x8009 /* Mac RAM size (sanity check) */
+#define BI_MAC_CPUID 0x800a /* Mac CPU type (sanity check) */
+#define BI_MAC_ROMBASE 0x800b /* Mac system ROM base address */
+
+ /*
+ * Macintosh hardware profile data - unused, see macintosh.h for
+ * resonable type values
+ */
+
+#define BI_MAC_VIA1BASE 0x8010 /* Mac VIA1 base address (always present) */
+#define BI_MAC_VIA2BASE 0x8011 /* Mac VIA2 base address (type varies) */
+#define BI_MAC_VIA2TYPE 0x8012 /* Mac VIA2 type (VIA, RBV, OSS) */
+#define BI_MAC_ADBTYPE 0x8013 /* Mac ADB interface type */
+#define BI_MAC_ASCBASE 0x8014 /* Mac Apple Sound Chip base address */
+#define BI_MAC_SCSI5380 0x8015 /* Mac NCR 5380 SCSI (base address, multi) */
+#define BI_MAC_SCSIDMA 0x8016 /* Mac SCSI DMA (base address) */
+#define BI_MAC_SCSI5396 0x8017 /* Mac NCR 53C96 SCSI (base address, multi) */
+#define BI_MAC_IDETYPE 0x8018 /* Mac IDE interface type */
+#define BI_MAC_IDEBASE 0x8019 /* Mac IDE interface base address */
+#define BI_MAC_NUBUS 0x801a /* Mac Nubus type (none, regular, pseudo) */
+#define BI_MAC_SLOTMASK 0x801b /* Mac Nubus slots present */
+#define BI_MAC_SCCTYPE 0x801c /* Mac SCC serial type (normal, IOP) */
+#define BI_MAC_ETHTYPE 0x801d /* Mac builtin ethernet type (Sonic, MACE */
+#define BI_MAC_ETHBASE 0x801e /* Mac builtin ethernet base address */
+#define BI_MAC_PMU 0x801f /* Mac power managment / poweroff hardware */
+#define BI_MAC_IOP_SWIM 0x8020 /* Mac SWIM floppy IOP */
+#define BI_MAC_IOP_ADB 0x8021 /* Mac ADB IOP */
+
+ /*
+ * Mac: compatibility with old booter data format (temporarily)
+ * Fields unused with the new bootinfo can be deleted now; instead of
+ * adding new fields the struct might be splitted into a hardware address
+ * part and a hardware type part
+ */
+
+#ifndef __ASSEMBLY__
+
+struct mac_booter_data
+{
+ unsigned long videoaddr;
+ unsigned long videorow;
+ unsigned long videodepth;
+ unsigned long dimensions;
+ unsigned long args;
+ unsigned long boottime;
+ unsigned long gmtbias;
+ unsigned long bootver;
+ unsigned long videological;
+ unsigned long sccbase;
+ unsigned long id;
+ unsigned long memsize;
+ unsigned long serialmf;
+ unsigned long serialhsk;
+ unsigned long serialgpi;
+ unsigned long printmf;
+ unsigned long printhsk;
+ unsigned long printgpi;
+ unsigned long cpuid;
+ unsigned long rombase;
+ unsigned long adbdelay;
+ unsigned long timedbra;
+};
+
+extern struct mac_booter_data
+ mac_bi_data;
+
+#endif
+
+ /*
+ * Stuff for bootinfo interface versioning
+ *
+ * At the start of kernel code, a 'struct bootversion' is located.
+ * bootstrap checks for a matching version of the interface before booting
+ * a kernel, to avoid user confusion if kernel and bootstrap don't work
+ * together :-)
+ *
+ * If incompatible changes are made to the bootinfo interface, the major
+ * number below should be stepped (and the minor reset to 0) for the
+ * appropriate machine. If a change is backward-compatible, the minor
+ * should be stepped. "Backwards-compatible" means that booting will work,
+ * but certain features may not.
+ */
+
+#define BOOTINFOV_MAGIC 0x4249561A /* 'BIV^Z' */
+#define MK_BI_VERSION(major,minor) (((major)<<16)+(minor))
+#define BI_VERSION_MAJOR(v) (((v) >> 16) & 0xffff)
+#define BI_VERSION_MINOR(v) ((v) & 0xffff)
+
+#ifndef __ASSEMBLY__
+
+struct bootversion {
+ unsigned short branch;
+ unsigned long magic;
+ struct {
+ unsigned long machtype;
+ unsigned long version;
+ } machversions[0];
+};
+
+#endif /* __ASSEMBLY__ */
+
+#define AMIGA_BOOTI_VERSION MK_BI_VERSION( 2, 0 )
+#define ATARI_BOOTI_VERSION MK_BI_VERSION( 2, 1 )
+#define MAC_BOOTI_VERSION MK_BI_VERSION( 2, 0 )
+#define MVME16x_BOOTI_VERSION MK_BI_VERSION( 2, 0 )
+#define BVME6000_BOOTI_VERSION MK_BI_VERSION( 2, 0 )
+
+
+#ifdef BOOTINFO_COMPAT_1_0
+
+ /*
+ * Backwards compatibility with bootinfo interface version 1.0
+ */
+
+#define COMPAT_AMIGA_BOOTI_VERSION MK_BI_VERSION( 1, 0 )
+#define COMPAT_ATARI_BOOTI_VERSION MK_BI_VERSION( 1, 0 )
+#define COMPAT_MAC_BOOTI_VERSION MK_BI_VERSION( 1, 0 )
+
+#include <linux/zorro.h>
+
+#define COMPAT_NUM_AUTO 16
+
+struct compat_bi_Amiga {
+ int model;
+ int num_autocon;
+ struct ConfigDev autocon[COMPAT_NUM_AUTO];
+ unsigned long chip_size;
+ unsigned char vblank;
+ unsigned char psfreq;
+ unsigned long eclock;
+ unsigned long chipset;
+ unsigned long hw_present;
+};
+
+struct compat_bi_Atari {
+ unsigned long hw_present;
+ unsigned long mch_cookie;
+};
+
+#ifndef __ASSEMBLY__
+
+#define MACHW_DECLARE(name) unsigned name : 1
+#define MACHW_SET(name) (boot_info.bi_mac.hw_present.name = 1)
+#define MACHW_PRESENT(name) (boot_info.bi_mac.hw_present.name)
+
+struct compat_bi_Macintosh
+{
+ unsigned long videoaddr;
+ unsigned long videorow;
+ unsigned long videodepth;
+ unsigned long dimensions;
+ unsigned long args;
+ unsigned long boottime;
+ unsigned long gmtbias;
+ unsigned long bootver;
+ unsigned long videological;
+ unsigned long sccbase;
+ unsigned long id;
+ unsigned long memsize;
+ unsigned long serialmf;
+ unsigned long serialhsk;
+ unsigned long serialgpi;
+ unsigned long printmf;
+ unsigned long printhsk;
+ unsigned long printgpi;
+ unsigned long cpuid;
+ unsigned long rombase;
+ unsigned long adbdelay;
+ unsigned long timedbra;
+ struct {
+ /* video hardware */
+ /* sound hardware */
+ /* disk storage interfaces */
+ MACHW_DECLARE(MAC_SCSI); /* Directly mapped NCR5380 */
+ MACHW_DECLARE(IDE); /* IDE Interface */
+ /* other I/O hardware */
+ MACHW_DECLARE(SCC); /* Serial Communications Contr. */
+ /* DMA */
+ MACHW_DECLARE(SCSI_DMA); /* DMA for the NCR5380 */
+ /* real time clocks */
+ MACHW_DECLARE(RTC_CLK); /* clock chip */
+ /* supporting hardware */
+ MACHW_DECLARE(VIA1); /* Versatile Interface Ad. 1 */
+ MACHW_DECLARE(VIA2); /* Versatile Interface Ad. 2 */
+ MACHW_DECLARE(RBV); /* Versatile Interface Ad. 2+ */
+ /* NUBUS */
+ MACHW_DECLARE(NUBUS); /* NUBUS */
+ } hw_present;
+};
+#else
+
+#define BI_videoaddr BI_un
+#define BI_videorow BI_videoaddr+4
+#define BI_videodepth BI_videorow+4
+#define BI_dimensions BI_videodepth+4
+#define BI_args BI_dimensions+4
+#define BI_cpuid BI_args+56
+
+#endif
+
+struct compat_mem_info {
+ unsigned long addr;
+ unsigned long size;
+};
+
+#define COMPAT_NUM_MEMINFO 4
+
+#define COMPAT_CPUB_68020 0
+#define COMPAT_CPUB_68030 1
+#define COMPAT_CPUB_68040 2
+#define COMPAT_CPUB_68060 3
+#define COMPAT_FPUB_68881 5
+#define COMPAT_FPUB_68882 6
+#define COMPAT_FPUB_68040 7
+#define COMPAT_FPUB_68060 8
+
+#define COMPAT_CPU_68020 (1<<COMPAT_CPUB_68020)
+#define COMPAT_CPU_68030 (1<<COMPAT_CPUB_68030)
+#define COMPAT_CPU_68040 (1<<COMPAT_CPUB_68040)
+#define COMPAT_CPU_68060 (1<<COMPAT_CPUB_68060)
+#define COMPAT_CPU_MASK (31)
+#define COMPAT_FPU_68881 (1<<COMPAT_FPUB_68881)
+#define COMPAT_FPU_68882 (1<<COMPAT_FPUB_68882)
+#define COMPAT_FPU_68040 (1<<COMPAT_FPUB_68040)
+#define COMPAT_FPU_68060 (1<<COMPAT_FPUB_68060)
+#define COMPAT_FPU_MASK (0xfe0)
+
+#define COMPAT_CL_SIZE (256)
+
+struct compat_bootinfo {
+ unsigned long machtype;
+ unsigned long cputype;
+ struct compat_mem_info memory[COMPAT_NUM_MEMINFO];
+ int num_memory;
+ unsigned long ramdisk_size;
+ unsigned long ramdisk_addr;
+ char command_line[COMPAT_CL_SIZE];
+ union {
+ struct compat_bi_Amiga bi_ami;
+ struct compat_bi_Atari bi_ata;
+ struct compat_bi_Macintosh bi_mac;
+ } bi_un;
+};
+
+#define bi_amiga bi_un.bi_ami
+#define bi_atari bi_un.bi_ata
+#define bi_mac bi_un.bi_mac
+
+#endif /* BOOTINFO_COMPAT_1_0 */
+
+
+#endif /* _BOOTINFO_H */
diff --git a/include/asm-ppc/byteorder.h b/include/asm-ppc/byteorder.h
index a16503851..ec033ec47 100644
--- a/include/asm-ppc/byteorder.h
+++ b/include/asm-ppc/byteorder.h
@@ -1,36 +1,44 @@
#ifndef _PPC_BYTEORDER_H
#define _PPC_BYTEORDER_H
+/*
+ * $Id: byteorder.h,v 1.13 1998/08/03 19:05:11 geert Exp $
+ */
+
#include <asm/types.h>
#ifdef __GNUC__
-extern inline unsigned ld_le16(volatile unsigned short *addr)
+extern __inline__ unsigned ld_le16(volatile unsigned short *addr)
{
unsigned val;
- asm volatile("lhbrx %0,0,%1" : "=r" (val) : "r" (addr));
+ __asm__ __volatile__ ("lhbrx %0,0,%1" : "=r" (val) : "r" (addr));
return val;
}
-extern inline void st_le16(volatile unsigned short *addr, unsigned val)
+extern __inline__ void st_le16(volatile unsigned short *addr, unsigned val)
{
- asm volatile("sthbrx %0,0,%1" : : "r" (val), "r" (addr) : "memory");
+ __asm__ __volatile__ ("sthbrx %1,0,%2" : "=m" (*addr) : "r" (val), "r" (addr));
}
-extern inline unsigned ld_le32(volatile unsigned *addr)
+extern __inline__ unsigned ld_le32(volatile unsigned *addr)
{
unsigned val;
- asm volatile("lwbrx %0,0,%1" : "=r" (val) : "r" (addr));
+ __asm__ __volatile__ ("lwbrx %0,0,%1" : "=r" (val) : "r" (addr));
return val;
}
-extern inline void st_le32(volatile unsigned *addr, unsigned val)
+extern __inline__ void st_le32(volatile unsigned *addr, unsigned val)
{
- asm volatile("stwbrx %0,0,%1" : : "r" (val), "r" (addr) : "memory");
+ __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*addr) : "r" (val), "r" (addr));
}
+/* alas, egcs sounds like it has a bug in this code that doesn't use the
+ inline asm correctly, and can cause file corruption. Until I hear that
+ it's fixed, I can live without the extra speed. I hope. */
+#if !(__GNUC__ >= 2 && __GNUC_MINOR__ >= 90)
#if 0
# define __arch_swab16(x) ld_le16(&x)
# define __arch_swab32(x) ld_le32(&x)
@@ -39,7 +47,7 @@ static __inline__ __const__ __u16 ___arch__swab16(__u16 value)
{
__u16 result;
- asm("rlwimi %0,%1,8,16,23"
+ __asm__("rlwimi %0,%1,8,16,23"
: "=r" (result)
: "r" (value), "0" (value >> 8));
return result;
@@ -49,7 +57,7 @@ static __inline__ __const__ __u32 ___arch__swab32(__u32 value)
{
__u32 result;
- asm("rlwimi %0,%1,24,16,23\n\t"
+ __asm__("rlwimi %0,%1,24,16,23\n\t"
"rlwimi %0,%1,8,8,15\n\t"
"rlwimi %0,%1,24,0,7"
: "=r" (result)
@@ -60,6 +68,8 @@ static __inline__ __const__ __u32 ___arch__swab32(__u32 value)
#define __arch__swab16(x) ___arch__swab16(x)
#endif /* 0 */
+#endif
+
/* The same, but returns converted value from the location pointer by addr. */
#define __arch__swab16p(addr) ld_le16(addr)
#define __arch__swab32p(addr) ld_le32(addr)
@@ -70,6 +80,9 @@ static __inline__ __const__ __u32 ___arch__swab32(__u32 value)
#endif /* __GNUC__ */
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+#define __BYTEORDER_HAS_U64__
+#endif
#include <linux/byteorder/big_endian.h>
#endif /* _PPC_BYTEORDER_H */
diff --git a/include/asm-ppc/cache.h b/include/asm-ppc/cache.h
index dd9166390..05017c7eb 100644
--- a/include/asm-ppc/cache.h
+++ b/include/asm-ppc/cache.h
@@ -46,7 +46,16 @@ static inline void lock_dcache(unsigned long lockit)
}
#endif /* __ASSEMBLY__ */
-
+
+/* prep registers for L2 */
+#define CACHECRBA 0x80000823 /* Cache configuration register address */
+#define L2CACHE_MASK 0x03 /* Mask for 2 L2 Cache bits */
+#define L2CACHE_512KB 0x00 /* 512KB */
+#define L2CACHE_256KB 0x01 /* 256KB */
+#define L2CACHE_1MB 0x02 /* 1MB */
+#define L2CACHE_NONE 0x03 /* NONE */
+#define L2CACHE_PARITY 0x08 /* Mask for L2 Cache Parity Protected bit */
+
#ifdef CONFIG_8xx
/* Cache control on the MPC8xx is provided through some additional
* special purpose registers.
diff --git a/include/asm-ppc/cuda.h b/include/asm-ppc/cuda.h
index 32011e0ca..2bfa7c127 100644
--- a/include/asm-ppc/cuda.h
+++ b/include/asm-ppc/cuda.h
@@ -37,6 +37,7 @@
#ifdef __KERNEL__
+void find_via_cuda(void);
void via_cuda_init(void);
int cuda_request(struct adb_request *req,
void (*done)(struct adb_request *), int nbytes, ...);
diff --git a/include/asm-ppc/delay.h b/include/asm-ppc/delay.h
index 74b3d62f7..239e0d3ac 100644
--- a/include/asm-ppc/delay.h
+++ b/include/asm-ppc/delay.h
@@ -10,6 +10,8 @@
* 2 of the License, or (at your option) any later version.
*/
+extern unsigned long loops_per_sec;
+
extern __inline__ void __delay(unsigned int loops)
{
if (loops != 0)
diff --git a/include/asm-ppc/dma.h b/include/asm-ppc/dma.h
index 8ee90bdc1..bd55a65da 100644
--- a/include/asm-ppc/dma.h
+++ b/include/asm-ppc/dma.h
@@ -374,6 +374,7 @@ static __inline__ int get_dma_residue(unsigned int dmanr)
}
/* These are in kernel/dma.c: */
+extern int request_dma(unsigned int dmanr, const char * device_id); /* reserve a DMA channel */
extern void free_dma(unsigned int dmanr); /* release it again */
#endif /* _ASM_DMA_H */
diff --git a/include/asm-ppc/ide.h b/include/asm-ppc/ide.h
index d9e25bace..e7aad0504 100644
--- a/include/asm-ppc/ide.h
+++ b/include/asm-ppc/ide.h
@@ -11,6 +11,31 @@
#ifndef __ASMPPC_IDE_H
#define __ASMPPC_IDE_H
+#include <linux/config.h>
+#ifdef CONFIG_APUS
+#include <linux/hdreg.h>
+#include <asm-m68k/ide.h>
+void ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
+void ide_insw(ide_ioreg_t port, void *buf, int ns);
+void ide_outsw(ide_ioreg_t port, void *buf, int ns);
+#undef insw
+#define insw(port, buf, ns) do { \
+ if ( _machine != _MACH_Pmac && _machine != _MACH_apus ) \
+ /* this must be the same as insw in io.h!! */ \
+ _insw((unsigned short *)((port)+_IO_BASE), (buf), (ns)); \
+ else \
+ ide_insw((port), (buf), (ns)); \
+} while (0)
+#undef outsw
+#define outsw(port, buf, ns) do { \
+ if ( _machine != _MACH_Pmac && _machine != _MACH_apus ) \
+ /* this must be the same as outsw in io.h!! */ \
+ _outsw((unsigned short *)((port)+_IO_BASE), (buf), (ns)); \
+ else \
+ ide_outsw((port), (buf), (ns)); \
+} while (0)
+#else /* CONFIG_APUS */
+
#ifdef __KERNEL__
#include <linux/ioport.h>
@@ -186,5 +211,6 @@ static __inline__ void ide_free_irq(unsigned int irq, void *dev_id)
#define ide_get_lock(lock, hdlr, data) do {} while (0)
#endif /* __KERNEL__ */
+#endif /* CONFIG_APUS */
#endif /* __ASMPPC_IDE_H */
diff --git a/include/asm-ppc/init.h b/include/asm-ppc/init.h
index 09b38d899..ea24bbab7 100644
--- a/include/asm-ppc/init.h
+++ b/include/asm-ppc/init.h
@@ -1,23 +1,56 @@
#ifndef _PPC_INIT_H
#define _PPC_INIT_H
-#define __init
-#define __initdata
-#define __initfunc(x) x
-/*
+#if __GNUC__ > 2 || __GNUC_MINOR__ >= 90 /* egcs */
#define __init __attribute__ ((__section__ (".text.init")))
#define __initdata __attribute__ ((__section__ (".data.init")))
#define __initfunc(__arginit) \
__arginit __init; \
__arginit
-*/
- /* For assembly routines */
-#define __INIT
-#define __FINIT
-#define __INITDATA
-/*
+
+#define __pmac __attribute__ ((__section__ (".text.pmac")))
+#define __pmacdata __attribute__ ((__section__ (".data.pmac")))
+#define __pmacfunc(__argpmac) \
+ __argpmac __pmac; \
+ __argpmac
+
+#define __prep __attribute__ ((__section__ (".text.prep")))
+#define __prepdata __attribute__ ((__section__ (".data.prep")))
+#define __prepfunc(__argprep) \
+ __argprep __prep; \
+ __argprep
+
+/* this is actually just common chrp/pmac code, not OF code -- Cort */
+#define __openfirmware __attribute__ ((__section__ (".text.openfirmware")))
+#define __openfirmwaredata __attribute__ ((__section__ (".data.openfirmware")))
+#define __openfirmwarefunc(__argopenfirmware) \
+ __argopenfirmware __openfirmware; \
+ __argopenfirmware
+
#define __INIT .section ".text.init",#alloc,#execinstr
#define __FINIT .previous
#define __INITDATA .section ".data.init",#alloc,#write
-*/
+
+#else /* not egcs */
+
+#define __init
+#define __initdata
+#define __initfunc(x) x
+
+#define __INIT
+#define __FINIT
+#define __INITDATA
+
+#define __pmac
+#define __pmacdata
+#define __pmacfunc(x) x
+
+#define __prep
+#define __prepdata
+#define __prepfunc(x) x
+
+#define __openfirmware
+#define __openfirmwaredata
+#define __openfirmwarefunc(x) x
+#endif /* egcs */
#endif
diff --git a/include/asm-ppc/io.h b/include/asm-ppc/io.h
index e52ddf0be..8f26f192c 100644
--- a/include/asm-ppc/io.h
+++ b/include/asm-ppc/io.h
@@ -22,6 +22,9 @@
#define PMAC_ISA_MEM_BASE 0
#define PMAC_PCI_DRAM_OFFSET 0
+#define APUS_ISA_IO_BASE 0
+#define APUS_ISA_MEM_BASE 0
+#define APUS_PCI_DRAM_OFFSET 0
#define CHRP_ISA_IO_BASE 0xf8000000
#define CHRP_ISA_MEM_BASE 0xf7000000
#define CHRP_PCI_DRAM_OFFSET 0
@@ -30,47 +33,32 @@
/*#define PREP_ISA_MEM_BASE 0xc0000000*/
#define PREP_PCI_DRAM_OFFSET 0x80000000
-#if defined(CONFIG_MACH_SPECIFIC)
-#ifdef CONFIG_PREP
-#define _IO_BASE PREP_ISA_IO_BASE
-#define _ISA_MEM_BASE PREP_ISA_MEM_BASE
-#define PCI_DRAM_OFFSET PREP_PCI_DRAM_OFFSET
-#endif /* CONFIG_PREP */
-
-#ifdef CONFIG_CHRP
-#define _IO_BASE CHRP_ISA_IO_BASE
-#define _ISA_MEM_BASE CHRP_ISA_MEM_BASE
-#define PCI_DRAM_OFFSET CHRP_PCI_DRAM_OFFSET
-#endif /* CONFIG_CHRP */
-
-#ifdef CONFIG_PMAC
-extern unsigned long isa_io_base;
-#define _IO_BASE isa_io_base /* well, PCI i/o base really */
-#define _ISA_MEM_BASE PMAC_ISA_MEM_BASE
-#define PCI_DRAM_OFFSET PMAC_PCI_DRAM_OFFSET
-#endif /* CONFIG_PMAC */
-
#ifdef CONFIG_MBX
#define _IO_BASE 0
#define _ISA_MEM_BASE 0
#define PCI_DRAM_OFFSET 0x80000000
-#endif /* CONFIG_MBX8xx */
-
-#else /* CONFIG_MACH_SPECIFIC */
+#else /* CONFIG_MBX8xx */
extern unsigned long isa_io_base;
-#define _IO_BASE isa_io_base
extern unsigned long isa_mem_base;
-#define _ISA_MEM_BASE isa_mem_base
-#undef PCI_DRAM_OFFSET
-#define PCI_DRAM_OFFSET pci_dram_offset
extern unsigned long pci_dram_offset;
-#endif /* CONFIG_MACH_SPECIFIC */
+#define _IO_BASE isa_io_base
+#define _ISA_MEM_BASE isa_mem_base
+#define PCI_DRAM_OFFSET pci_dram_offset
+#endif /* CONFIG_MBX8xx */
+
#define readb(addr) (*(volatile unsigned char *) (addr))
+#define writeb(b,addr) ((*(volatile unsigned char *) (addr)) = (b))
+#if defined(CONFIG_APUS)
+#define readw(addr) (*(volatile unsigned short *) (addr))
+#define readl(addr) (*(volatile unsigned int *) (addr))
+#define writew(b,addr) ((*(volatile unsigned short *) (addr)) = (b))
+#define writel(b,addr) ((*(volatile unsigned int *) (addr)) = (b))
+#else
#define readw(addr) ld_le16((volatile unsigned short *)(addr))
#define readl(addr) ld_le32((volatile unsigned *)addr)
-#define writeb(b,addr) ((*(volatile unsigned char *) (addr)) = (b))
#define writew(b,addr) st_le16((volatile unsigned short *)(addr),(b))
#define writel(b,addr) st_le32((volatile unsigned *)(addr),(b))
+#endif
#define insb(port, buf, ns) _insb((unsigned char *)((port)+_IO_BASE), (buf), (ns))
#define outsb(port, buf, ns) _outsb((unsigned char *)((port)+_IO_BASE), (buf), (ns))
@@ -81,10 +69,17 @@ extern unsigned long pci_dram_offset;
#define inb(port) in_8((unsigned char *)((port)+_IO_BASE))
#define outb(val, port) out_8((unsigned char *)((port)+_IO_BASE), (val))
+#if defined(CONFIG_APUS)
+#define inw(port) in_be16((unsigned short *)((port)+_IO_BASE))
+#define outw(val, port) out_be16((unsigned short *)((port)+_IO_BASE), (val))
+#define inl(port) in_be32((unsigned *)((port)+_IO_BASE))
+#define outl(val, port) out_be32((unsigned *)((port)+_IO_BASE), (val))
+#else
#define inw(port) in_le16((unsigned short *)((port)+_IO_BASE))
#define outw(val, port) out_le16((unsigned short *)((port)+_IO_BASE), (val))
#define inl(port) in_le32((unsigned *)((port)+_IO_BASE))
#define outl(val, port) out_le32((unsigned *)((port)+_IO_BASE), (val))
+#endif
#define inb_p(port) in_8((unsigned char *)((port)+_IO_BASE))
#define outb_p(val, port) out_8((unsigned char *)((port)+_IO_BASE), (val))
@@ -100,12 +95,38 @@ extern void _outsw(volatile unsigned short *port, const void *buf, int ns);
extern void _insl(volatile unsigned long *port, void *buf, int nl);
extern void _outsl(volatile unsigned long *port, const void *buf, int nl);
+/*
+ * The *_ns versions below don't do byte-swapping.
+ */
+#define insw_ns(port, buf, ns) _insw_ns((unsigned short *)((port)+_IO_BASE), (buf), (ns))
+#define outsw_ns(port, buf, ns) _outsw_ns((unsigned short *)((port)+_IO_BASE), (buf), (ns))
+#define insl_ns(port, buf, nl) _insl_ns((unsigned long *)((port)+_IO_BASE), (buf), (nl))
+#define outsl_ns(port, buf, nl) _outsl_ns((unsigned long *)((port)+_IO_BASE), (buf), (nl))
+
+extern void _insw_ns(volatile unsigned short *port, void *buf, int ns);
+extern void _outsw_ns(volatile unsigned short *port, const void *buf, int ns);
+extern void _insl_ns(volatile unsigned long *port, void *buf, int nl);
+extern void _outsl_ns(volatile unsigned long *port, const void *buf, int nl);
+
#define memset_io(a,b,c) memset((a),(b),(c))
#define memcpy_fromio(a,b,c) memcpy((a),(b),(c))
#define memcpy_toio(a,b,c) memcpy((a),(b),(c))
#ifdef __KERNEL__
/*
+ * Map in an area of physical address space, for accessing
+ * I/O devices etc.
+ */
+extern void *__ioremap(unsigned long address, unsigned long size,
+ unsigned long flags);
+extern void *ioremap(unsigned long address, unsigned long size);
+extern void iounmap(void *addr);
+extern unsigned long iopa(unsigned long addr);
+#ifdef CONFIG_APUS
+extern unsigned long mm_ptov(unsigned long addr) __attribute__ ((const));
+#endif
+
+/*
* The PCI bus is inherently Little-Endian. The PowerPC is being
* run Big-Endian. Thus all values which cross the [PCI] barrier
* must be endian-adjusted. Also, the local DRAM has a different
@@ -114,40 +135,62 @@ extern void _outsl(volatile unsigned long *port, const void *buf, int nl);
*/
extern inline unsigned long virt_to_bus(volatile void * address)
{
+#ifndef CONFIG_APUS
if (address == (void *)0)
return 0;
return (unsigned long)address - KERNELBASE + PCI_DRAM_OFFSET;
+#else
+ return iopa ((unsigned long) address);
+#endif
}
extern inline void * bus_to_virt(unsigned long address)
{
+#ifndef CONFIG_APUS
if (address == 0)
return 0;
return (void *)(address - PCI_DRAM_OFFSET + KERNELBASE);
+#else
+ return (void*) mm_ptov (address);
+#endif
}
/*
- * Map in an area of physical address space, for accessing
- * I/O devices etc.
- */
-extern void *__ioremap(unsigned long address, unsigned long size,
- unsigned long flags);
-extern void *ioremap(unsigned long address, unsigned long size);
-extern void iounmap(void *addr);
-extern unsigned long iopa(unsigned long addr);
-
-/*
* Change virtual addresses to physical addresses and vv, for
* addresses in the area where the kernel has the RAM mapped.
*/
extern inline unsigned long virt_to_phys(volatile void * address)
{
+#ifndef CONFIG_APUS
return (unsigned long) address - KERNELBASE;
+#else
+ return iopa ((unsigned long) address);
+#endif
}
extern inline void * phys_to_virt(unsigned long address)
{
+#ifndef CONFIG_APUS
return (void *) (address + KERNELBASE);
+#else
+ return (void*) mm_ptov (address);
+#endif
+}
+
+static inline int check_signature(unsigned long io_addr,
+ const unsigned char *signature, int length)
+{
+ int retval = 0;
+ do {
+ if (readb(io_addr) != *signature)
+ goto out;
+ io_addr++;
+ signature++;
+ length--;
+ } while (length);
+ retval = 1;
+out:
+ return retval;
}
#endif /* __KERNEL__ */
@@ -159,7 +202,7 @@ extern inline void * phys_to_virt(unsigned long address)
*/
extern inline void eieio(void)
{
- asm volatile ("eieio" : :);
+ __asm__ __volatile__ ("eieio" : : : "memory" );
}
/*
@@ -169,23 +212,26 @@ extern inline int in_8(volatile unsigned char *addr)
{
int ret;
+ __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) );
ret = *addr;
- eieio();
+ __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) );
return ret;
}
extern inline void out_8(volatile unsigned char *addr, int val)
{
+ __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) );
*addr = val;
- eieio();
+ __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) );
}
extern inline int in_le16(volatile unsigned short *addr)
{
int ret;
+ __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) );
ret = ld_le16(addr);
- eieio();
+ __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) );
return ret;
}
@@ -193,29 +239,33 @@ extern inline int in_be16(volatile unsigned short *addr)
{
int ret;
+ __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) );
ret = *addr;
- eieio();
+ __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) );
return ret;
}
extern inline void out_le16(volatile unsigned short *addr, int val)
{
+ __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) );
st_le16(addr, val);
- eieio();
+ __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) );
}
extern inline void out_be16(volatile unsigned short *addr, int val)
{
+ __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) );
*addr = val;
- eieio();
+ __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) );
}
extern inline unsigned in_le32(volatile unsigned *addr)
{
unsigned ret;
+ __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) );
ret = ld_le32(addr);
- eieio();
+ __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) );
return ret;
}
@@ -223,21 +273,24 @@ extern inline int in_be32(volatile unsigned *addr)
{
int ret;
+ __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) );
ret = *addr;
- eieio();
+ __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) );
return ret;
}
extern inline void out_le32(volatile unsigned *addr, int val)
{
+ __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) );
st_le32(addr, val);
- eieio();
+ __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) );
}
extern inline void out_be32(volatile unsigned *addr, int val)
{
+ __asm__ __volatile__ ("" : "=m" (*addr) : "0" (*addr) );
*addr = val;
- eieio();
+ __asm__ __volatile__ ("eieio" : "=m" (*addr) : "0" (*addr) );
}
#endif
diff --git a/include/asm-ppc/irq.h b/include/asm-ppc/irq.h
index 4ae880c98..be13bd34a 100644
--- a/include/asm-ppc/irq.h
+++ b/include/asm-ppc/irq.h
@@ -3,13 +3,21 @@
#ifndef _ASM_IRQ_H
#define _ASM_IRQ_H
+#include <asm/processor.h> /* for is_prep() */
+
#ifndef CONFIG_8xx
+
+#ifdef CONFIG_APUS
+#include <asm-m68k/irq.h>
+#else /* CONFIG_APUS */
+
/*
* this is the # irq's for all ppc arch's (pmac/chrp/prep)
- * so it is the max of them all - which happens to be chrp
- * -- Cort
+ * so it is the max of them all - which happens to be powermac
+ * at present (G3 powermacs have 64).
*/
-#define NR_IRQS (NUM_8259_INTERRUPTS+NUM_OPENPIC_INTERRUPTS)
+#define NR_IRQS 64
+#endif /* CONFIG_APUS */
#define NUM_8259_INTERRUPTS 16
#define NUM_OPENPIC_INTERRUPTS 20
@@ -18,13 +26,20 @@
#define irq_to_openpic(n) ((n)-NUM_8259_INTERRUPTS)
#define IRQ_8259_CASCADE NUM_8259_INTERRUPTS
+extern void disable_irq(unsigned int);
+extern void enable_irq(unsigned int);
+
+#ifndef CONFIG_APUS
+/*
+ * This gets called from serial.c, which is now used on
+ * powermacs as well as prep/chrp boxes.
+ * Prep and chrp both have cascaded 8259 PICs.
+ */
static __inline__ int irq_cannonicalize(int irq)
{
- return irq;
+ return (((is_prep || is_chrp) && irq == 2) ? 9 : irq);
}
-
-extern void disable_irq(unsigned int);
-extern void enable_irq(unsigned int);
+#endif
#else /* CONFIG_8xx */
@@ -80,6 +95,12 @@ extern void enable_irq(unsigned int);
#define STOP_ABRT_INT SIU_IRQ7 /* Stop/Abort header pin */
#endif /* CONFIG_MBX */
+/* always the same on MBX -- Cort */
+static __inline__ int irq_cannonicalize(int irq)
+{
+ return irq;
+}
+
#endif /* CONFIG_8xx */
#endif
diff --git a/include/asm-ppc/keyboard.h b/include/asm-ppc/keyboard.h
index 0d3783e2a..7b40d6100 100644
--- a/include/asm-ppc/keyboard.h
+++ b/include/asm-ppc/keyboard.h
@@ -3,7 +3,7 @@
*
* Created 3 Nov 1996 by Geert Uytterhoeven
*
- * $Id: keyboard.h,v 1.5 1998/05/04 12:43:22 ralf Exp $
+ * $Id: keyboard.h,v 1.6 1998/08/20 14:41:03 ralf Exp $
* Modified for Power Macintosh by Paul Mackerras
*/
@@ -22,6 +22,10 @@
#include <linux/config.h>
#include <asm/adb.h>
+#ifdef CONFIG_APUS
+#include <asm-m68k/keyboard.h>
+#else
+
#define KEYBOARD_IRQ 1
#define DISABLE_KBD_DURING_INTERRUPTS 0
#define INIT_KBD
@@ -172,6 +176,8 @@ static inline void kbd_init_hw(void)
mackbd_init_hw();
}
+#endif /* CONFIG_APUS */
+
/* How to access the keyboard macros on this platform. */
#define kbd_read_input() inb(KBD_DATA_REG)
#define kbd_read_status() inb(KBD_STATUS_REG)
diff --git a/include/asm-ppc/linux_logo.h b/include/asm-ppc/linux_logo.h
index 02a237a2c..33ad40f64 100644
--- a/include/asm-ppc/linux_logo.h
+++ b/include/asm-ppc/linux_logo.h
@@ -17,1445 +17,13 @@
#define LINUX_LOGO_HEIGHT 80
#define LINUX_LOGO_WIDTH 80
-#define LINUX_LOGO_COLORS 221
+#define LINUX_LOGO_COLORS 214
#ifdef INCLUDE_LINUX_LOGO_DATA
-unsigned char linux_logo_red[] __initdata = {
- 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xE7, 0xE5, 0xE3,
- 0xCA, 0xD4, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xE5,
- 0xF1, 0xED, 0xEE, 0xE6, 0xC6, 0xDA, 0xDD, 0xE5,
- 0xD9, 0xC6, 0xE3, 0xD0, 0xC6, 0xBA, 0xB0, 0xB6,
- 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xB0, 0xAD,
- 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA0, 0x9D,
- 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x99, 0x9A, 0x99,
- 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D,
- 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0x0D, 0x03,
- 0x66, 0x44, 0x24, 0x08, 0xD6, 0xE6, 0xE9, 0xE6,
- 0xE7, 0xCA, 0xDC, 0xDB, 0xD5, 0xD0, 0xC9, 0xE2,
- 0xD5, 0xC6, 0xC4, 0xB3, 0xB2, 0xB9, 0xA9, 0x9A,
- 0xB2, 0x9D, 0xE8, 0xEC, 0xF5, 0xF5, 0xF4, 0xF4,
- 0xEC, 0xEE, 0xF0, 0xF5, 0xE0, 0xD6, 0xC5, 0xC2,
- 0xD9, 0xD5, 0xD8, 0xD6, 0xF6, 0xF4, 0xED, 0xEC,
- 0xEB, 0xF1, 0xF6, 0xF5, 0xF5, 0xEE, 0xEF, 0xEC,
- 0xE7, 0xE3, 0xE6, 0xD6, 0xDD, 0xC3, 0xD6, 0xD7,
- 0xCD, 0xCA, 0xC3, 0xAC, 0x95, 0x99, 0xB7, 0xA3,
- 0x8B, 0x88, 0x95, 0x8A, 0x94, 0xD2, 0xCC, 0xC4,
- 0xA8, 0x8E, 0x8F, 0xAE, 0xB8, 0xAC, 0xB6, 0xB4,
- 0xAD, 0xA5, 0xA0, 0x9B, 0x8B, 0xA3, 0x94, 0x87,
- 0x85, 0x89, 0x53, 0x80, 0x7D, 0x7C, 0x7A, 0x78,
- 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x67, 0x65, 0x62,
- 0x4B, 0x5B, 0x5F, 0x53, 0x56, 0x52, 0x4F, 0x46,
- 0x42, 0x0F, 0x75, 0x78, 0x7D, 0x72, 0x5F, 0x6E,
- 0x7A, 0x75, 0x6A, 0x58, 0x48, 0x4F, 0x00, 0x2B,
- 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x3B, 0x11,
- 0x1D, 0x14, 0x06, 0x02, 0x00
-};
-unsigned char linux_logo_green[] __initdata = {
- 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xE7, 0xE5, 0xE3,
- 0xCA, 0xD4, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xD3,
- 0xDA, 0xD4, 0xD7, 0xCC, 0xC1, 0xCC, 0xCB, 0xC9,
- 0xC5, 0xBC, 0xBC, 0xBB, 0xB7, 0xA5, 0xB0, 0xB6,
- 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xAD, 0xAD,
- 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA0, 0x95,
- 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x99, 0x9A, 0x99,
- 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D,
- 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0x08, 0x02,
- 0x53, 0x2E, 0x19, 0x06, 0xC6, 0xC8, 0xCF, 0xBD,
- 0xB3, 0xB6, 0xB4, 0xAB, 0xA5, 0xA3, 0x9B, 0xB6,
- 0xA7, 0x99, 0x92, 0xA4, 0x9E, 0x9D, 0x98, 0x8C,
- 0x8A, 0x86, 0xCD, 0xCC, 0xC9, 0xD7, 0xCA, 0xC4,
- 0xCA, 0xC3, 0xC7, 0xC3, 0xC8, 0xB4, 0x91, 0x8E,
- 0x8A, 0x82, 0x87, 0x85, 0xBD, 0xBF, 0xB6, 0xBC,
- 0xAE, 0xB7, 0xBC, 0xB8, 0xBF, 0xB6, 0xBC, 0xB5,
- 0xAB, 0xA6, 0xAD, 0xB2, 0xA5, 0x87, 0x9C, 0x96,
- 0x95, 0x8E, 0x87, 0x8F, 0x86, 0x86, 0x8E, 0x80,
- 0x7A, 0x70, 0x7B, 0x78, 0x78, 0x7F, 0x77, 0x6F,
- 0x70, 0x76, 0x59, 0x77, 0x68, 0x64, 0x7B, 0x7C,
- 0x75, 0x6D, 0x77, 0x69, 0x65, 0x5F, 0x5B, 0x54,
- 0x4F, 0x5B, 0x39, 0x80, 0x7D, 0x7C, 0x7A, 0x78,
- 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x67, 0x65, 0x62,
- 0x4B, 0x5B, 0x5F, 0x53, 0x56, 0x52, 0x4F, 0x46,
- 0x42, 0x0B, 0x69, 0x66, 0x64, 0x57, 0x4A, 0x4E,
- 0x55, 0x4B, 0x46, 0x3B, 0x30, 0x33, 0x00, 0x2B,
- 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x29, 0x0D,
- 0x1D, 0x14, 0x06, 0x02, 0x00
-};
-
-unsigned char linux_logo_blue[] __initdata = {
- 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xEE, 0xE5, 0xDE,
- 0xD7, 0xD3, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xB5,
- 0xB0, 0xA6, 0xAC, 0x9B, 0xB5, 0xB5, 0xAE, 0x84,
- 0x90, 0xA9, 0x81, 0x8D, 0x96, 0x86, 0xB0, 0xB6,
- 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xA7, 0xAD,
- 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA5, 0x87,
- 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x9A, 0x9A, 0x99,
- 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D,
- 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0xC8, 0xD7,
- 0x9B, 0x8E, 0x8C, 0xB2, 0x77, 0x77, 0x4E, 0x77,
- 0x69, 0x71, 0x78, 0x6B, 0x65, 0x66, 0x64, 0x59,
- 0x5C, 0x5A, 0x48, 0x72, 0x7B, 0x6B, 0x67, 0x6E,
- 0x42, 0x5B, 0x29, 0x36, 0x25, 0x10, 0x17, 0x14,
- 0x19, 0x16, 0x13, 0x0E, 0x08, 0x2E, 0x2E, 0x3D,
- 0x24, 0x24, 0x24, 0x24, 0x13, 0x12, 0x14, 0x14,
- 0x0E, 0x08, 0x0D, 0x0F, 0x08, 0x0D, 0x0E, 0x08,
- 0x08, 0x0C, 0x06, 0x06, 0x07, 0x16, 0x07, 0x0E,
- 0x08, 0x0A, 0x07, 0x0D, 0x2D, 0x3E, 0x09, 0x4E,
- 0x68, 0x52, 0x56, 0x58, 0x4B, 0x22, 0x20, 0x20,
- 0x27, 0x39, 0x28, 0x19, 0x1E, 0x1E, 0x08, 0x06,
- 0x07, 0x09, 0x08, 0x08, 0x05, 0x1D, 0x1F, 0x17,
- 0x18, 0x06, 0x79, 0x80, 0x7D, 0x7C, 0x7A, 0x78,
- 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x68, 0x65, 0x62,
- 0x4B, 0x5B, 0x5F, 0x55, 0x56, 0x52, 0x4F, 0x46,
- 0x42, 0x5A, 0x14, 0x23, 0x3D, 0x2B, 0x21, 0x14,
- 0x06, 0x04, 0x03, 0x07, 0x09, 0x13, 0x2A, 0x3A,
- 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x07, 0x09,
- 0x1D, 0x14, 0x06, 0x02, 0x00
-};
-
-unsigned char linux_logo[] __initdata = {
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x57,
- 0x58, 0x58, 0x59, 0x5C, 0x5D, 0x5F, 0x60, 0x61,
- 0x62, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63,
- 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5E, 0x5E,
- 0x5E, 0x5D, 0x5D, 0x5C, 0x5D, 0x5B, 0x58, 0x58,
- 0x58, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x57,
- 0x54, 0x56, 0x57, 0x67, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x67, 0x4C,
- 0x4A, 0x49, 0x4A, 0x49, 0x4A, 0x49, 0x49, 0x4A,
- 0x4A, 0x4B, 0x4B, 0x4B, 0x4C, 0x50, 0x51, 0x52,
- 0x54, 0x54, 0x56, 0x57, 0x57, 0x57, 0x57, 0x58,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x58, 0x56, 0x56, 0x53,
- 0x52, 0x53, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB,
- 0x4B, 0x4B, 0x4B, 0x4A, 0x49, 0x4A, 0x4A, 0x49,
- 0x49, 0x49, 0x48, 0x49, 0x49, 0x4A, 0x4A, 0x4B,
- 0x4C, 0x4D, 0x52, 0x54, 0x56, 0x55, 0x57, 0x58,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50,
- 0x50, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF0, 0xF4, 0xFB,
- 0xFC, 0x67, 0x53, 0x50, 0x4D, 0x4C, 0x4C, 0x4C,
- 0x4B, 0x4A, 0x4A, 0x48, 0x49, 0x48, 0x48, 0x49,
- 0x49, 0x49, 0x4B, 0x4C, 0x50, 0x52, 0x53, 0x56,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x55, 0x54, 0x53, 0x51, 0x51, 0x50, 0x4C, 0x4D,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0xD2, 0xD7, 0xF5,
- 0xFC, 0xFC, 0x5D, 0x5D, 0x5C, 0x5C, 0x59, 0x58,
- 0x58, 0x56, 0x52, 0x4C, 0x4B, 0x4A, 0x4A, 0x48,
- 0x48, 0x48, 0x48, 0x48, 0x49, 0x4B, 0x4D, 0x51,
- 0x54, 0x56, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x55, 0x54,
- 0x53, 0x52, 0x51, 0x4D, 0x4D, 0x4D, 0x50, 0x50,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0x64, 0xD9, 0xF5,
- 0xF9, 0xFC, 0xFC, 0x64, 0x63, 0x62, 0x61, 0x61,
- 0x61, 0x60, 0x5E, 0x5B, 0x5A, 0x54, 0x52, 0x4C,
- 0x4B, 0x49, 0x49, 0x47, 0x47, 0x48, 0x49, 0x4B,
- 0x4C, 0x51, 0x53, 0x56, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x55, 0x53, 0x53,
- 0x51, 0x50, 0x50, 0x50, 0x50, 0x50, 0x53, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0xF5, 0xF9, 0xFC,
- 0xFC, 0xFC, 0xFC, 0x64, 0x64, 0x64, 0x64, 0x64,
- 0x64, 0x64, 0x64, 0x63, 0x61, 0x61, 0x5E, 0x59,
- 0x55, 0x52, 0x4C, 0x4A, 0x49, 0x47, 0x48, 0x48,
- 0x49, 0x4B, 0x4D, 0x51, 0x54, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x55, 0x54, 0x54, 0x52, 0x51,
- 0x51, 0x51, 0x51, 0x51, 0x53, 0x54, 0x59, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xF7, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0x60, 0x60, 0x60, 0x61,
- 0x62, 0x63, 0x64, 0x64, 0x65, 0x65, 0x64, 0x63,
- 0x61, 0x5E, 0x59, 0x56, 0x4D, 0x4B, 0x48, 0x48,
- 0x48, 0x48, 0x49, 0x4B, 0x50, 0x53, 0x56, 0x56,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x56, 0x54, 0x53, 0x52, 0x51, 0x51,
- 0x51, 0x52, 0x53, 0x55, 0x59, 0x5D, 0x5E, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0x4C, 0x4E, 0x51, 0x52,
- 0x57, 0x5A, 0x5E, 0x60, 0x61, 0x63, 0x65, 0xCB,
- 0x64, 0x64, 0x63, 0x60, 0x5C, 0x57, 0x50, 0x4B,
- 0x48, 0x47, 0x47, 0x47, 0x4A, 0x4C, 0x52, 0x53,
- 0x54, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x55, 0x54, 0x53, 0x53, 0x51, 0x52, 0x52, 0x53,
- 0x53, 0x57, 0x5A, 0x5D, 0x5E, 0x5E, 0x60, 0xFC,
- 0xFC, 0xFC, 0xFB, 0xF9, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFA, 0xF9, 0xF5, 0xFB, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0x45, 0x3F, 0x3F,
- 0x45, 0x48, 0x4B, 0x4D, 0x54, 0x5A, 0x5E, 0x61,
- 0x63, 0xCB, 0xCB, 0x65, 0x64, 0x62, 0x5E, 0x57,
- 0x50, 0x4B, 0x48, 0x47, 0x47, 0x48, 0x4B, 0x4D,
- 0x51, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55,
- 0x54, 0x54, 0x53, 0x53, 0x52, 0x53, 0x54, 0x57,
- 0x59, 0x5C, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0xFC,
- 0xFC, 0xFA, 0xFC, 0xFA, 0xE0, 0xFC, 0xFC, 0xFC,
- 0xFB, 0xFB, 0xFB, 0xDF, 0xD8, 0xF9, 0xE0, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0x4C, 0x4A, 0x48,
- 0x48, 0x3E, 0x44, 0x43, 0x3F, 0x47, 0x4B, 0x52,
- 0x5A, 0x5E, 0x62, 0x64, 0xCB, 0xCB, 0x64, 0x61,
- 0x5E, 0x57, 0x4D, 0x49, 0x47, 0x47, 0x48, 0x4A,
- 0x4C, 0x52, 0x54, 0x56, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55,
- 0x54, 0x53, 0x53, 0x54, 0x54, 0x55, 0x58, 0x5B,
- 0x5C, 0x5D, 0x5E, 0x5D, 0x5D, 0x5B, 0x58, 0xFC,
- 0xFC, 0xD8, 0x4C, 0x60, 0xFC, 0xF5, 0xFC, 0xFC,
- 0xFC, 0xF7, 0x5F, 0x48, 0x48, 0x2C, 0xF8, 0xF9,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x4B, 0x4A, 0x49,
- 0x49, 0x49, 0x49, 0x47, 0x3E, 0x44, 0x42, 0x3F,
- 0x3E, 0x4B, 0x54, 0x5C, 0x61, 0x64, 0xCB, 0xCB,
- 0x64, 0x61, 0x5D, 0x53, 0x4B, 0x49, 0x47, 0x47,
- 0x49, 0x4B, 0x50, 0x53, 0x56, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, 0x55, 0x54,
- 0x53, 0x53, 0x54, 0x56, 0x58, 0x5A, 0x5B, 0x5D,
- 0x5D, 0x5D, 0x5C, 0x5A, 0x54, 0x52, 0x4C, 0xFC,
- 0xF7, 0x4E, 0x2D, 0x29, 0x4E, 0xFC, 0xFC, 0xFC,
- 0xFB, 0x5F, 0x26, 0x24, 0x20, 0x2E, 0x65, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x45, 0x3F, 0x45,
- 0x3E, 0x47, 0x47, 0x47, 0x47, 0x47, 0x3E, 0x44,
- 0x43, 0x40, 0x44, 0x49, 0x51, 0x5C, 0x62, 0x64,
- 0xCB, 0xCB, 0x63, 0x60, 0x58, 0x50, 0x49, 0x48,
- 0x48, 0x48, 0x4A, 0x4D, 0x53, 0x54, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, 0x54,
- 0x54, 0x54, 0x55, 0x57, 0x59, 0x5B, 0x5C, 0x5D,
- 0x5C, 0x5A, 0x54, 0x51, 0x4C, 0x4C, 0x54, 0xFC,
- 0xF9, 0x23, 0xDB, 0x2D, 0x23, 0xFA, 0xFB, 0xFA,
- 0xF5, 0x27, 0x21, 0xD9, 0xF8, 0x20, 0x21, 0xFB,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x5D, 0x58, 0x55,
- 0x50, 0x48, 0x45, 0x43, 0x44, 0x44, 0x45, 0x45,
- 0x3E, 0x3F, 0x43, 0x41, 0x3F, 0x48, 0x52, 0x5D,
- 0x63, 0x65, 0xCB, 0x65, 0x61, 0x5D, 0x52, 0x4B,
- 0x48, 0x47, 0x47, 0x49, 0x4C, 0x51, 0x54, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, 0x54,
- 0x54, 0x58, 0x5A, 0x59, 0x5B, 0x5B, 0x5B, 0x5A,
- 0x55, 0x52, 0x4D, 0x4D, 0x55, 0x5B, 0x5D, 0xFC,
- 0xF1, 0xF9, 0xFC, 0xD4, 0x21, 0xCC, 0xF7, 0xF8,
- 0xF2, 0x21, 0xD9, 0xFC, 0xF2, 0xFB, 0x21, 0x45,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0xD1, 0xD0, 0xCD,
- 0xCC, 0x63, 0x5E, 0x58, 0x50, 0x47, 0x43, 0x3F,
- 0x3F, 0x3F, 0x3F, 0x3F, 0x40, 0x41, 0x3F, 0x4A,
- 0x56, 0x5E, 0x64, 0xCB, 0x65, 0x63, 0x5E, 0x56,
- 0x4C, 0x48, 0x47, 0x47, 0x49, 0x4C, 0x51, 0x54,
- 0x58, 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54,
- 0x57, 0x5A, 0x5A, 0x5C, 0x5B, 0x5A, 0x58, 0x54,
- 0x51, 0x4C, 0x55, 0x5D, 0x5D, 0x5B, 0x54, 0xFC,
- 0xF0, 0xF9, 0xFC, 0x65, 0x45, 0xCD, 0xFB, 0xFB,
- 0xF8, 0x26, 0xFB, 0xFC, 0xFC, 0xFC, 0x21, 0x27,
- 0xFB, 0xFC, 0xFC, 0xFC, 0xFB, 0xD7, 0x35, 0x34,
- 0x2F, 0x35, 0x36, 0x2F, 0x2F, 0x36, 0x2F, 0x2F,
- 0x36, 0x36, 0x35, 0x35, 0x43, 0x42, 0x41, 0x2E,
- 0x45, 0x4C, 0x5B, 0x62, 0x65, 0xCC, 0x64, 0x60,
- 0x58, 0x4D, 0x49, 0x47, 0x47, 0x49, 0x4C, 0x51,
- 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, 0x57,
- 0x58, 0x5A, 0x5A, 0x5B, 0x5A, 0x55, 0x54, 0x51,
- 0x53, 0x5C, 0x5D, 0x5D, 0x54, 0x4B, 0x4D, 0xFC,
- 0xFC, 0x44, 0xFC, 0xFB, 0x7B, 0xAB, 0xA8, 0xAE,
- 0xAB, 0x7F, 0xFC, 0xFC, 0xFB, 0xFB, 0x22, 0x2A,
- 0xFC, 0xFC, 0xFC, 0xFC, 0x36, 0x2F, 0x30, 0x30,
- 0x32, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30,
- 0x30, 0x30, 0x30, 0x30, 0x2F, 0x2F, 0x40, 0x41,
- 0x2E, 0x40, 0x48, 0x56, 0x5F, 0x64, 0xCC, 0x65,
- 0x61, 0x59, 0x50, 0x49, 0x47, 0x47, 0x49, 0x4C,
- 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58,
- 0x5A, 0x5A, 0x5A, 0x58, 0x55, 0x52, 0x51, 0x5A,
- 0x5D, 0x5D, 0x57, 0x4C, 0x51, 0x54, 0x5D, 0xFC,
- 0xFC, 0x2A, 0xFC, 0xC9, 0xAA, 0x8B, 0x8A, 0x8C,
- 0xAB, 0x8C, 0x8C, 0xFB, 0xFB, 0x23, 0x20, 0xF1,
- 0xFC, 0xFC, 0xFC, 0x3B, 0x33, 0x33, 0x32, 0x32,
- 0x31, 0x32, 0x30, 0x32, 0x32, 0x32, 0x32, 0x30,
- 0x31, 0x31, 0x31, 0x32, 0x33, 0x33, 0x3C, 0x41,
- 0x41, 0x2E, 0x2D, 0x45, 0x4D, 0x5D, 0x63, 0xCC,
- 0x65, 0x62, 0x5D, 0x51, 0x49, 0x47, 0x47, 0x4A,
- 0x59, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58, 0x58,
- 0x5A, 0x5A, 0x58, 0x55, 0x53, 0x53, 0x5C, 0x5E,
- 0x59, 0x51, 0x4E, 0x54, 0x59, 0x5E, 0x62, 0xFC,
- 0xFC, 0xDB, 0xAA, 0xA1, 0x95, 0x9C, 0x8C, 0x88,
- 0x82, 0x83, 0x83, 0x8C, 0x88, 0xAE, 0xB9, 0xFB,
- 0xFC, 0xFC, 0xFC, 0x3C, 0x3B, 0x72, 0x38, 0x33,
- 0x33, 0x33, 0x31, 0x33, 0x31, 0x31, 0x31, 0x31,
- 0x33, 0x33, 0x38, 0x33, 0x72, 0x3B, 0x44, 0x2E,
- 0x41, 0x2E, 0x2E, 0x2D, 0x43, 0x4B, 0x5B, 0x63,
- 0xCB, 0xCC, 0x63, 0x5D, 0x51, 0x49, 0x47, 0x49,
- 0x5C, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58,
- 0x58, 0x58, 0x57, 0x53, 0x58, 0x5D, 0x5E, 0x55,
- 0x51, 0x53, 0x58, 0x5E, 0x60, 0x63, 0x64, 0xFC,
- 0xFC, 0xC0, 0xA6, 0x9D, 0x8B, 0x9C, 0x8C, 0x8C,
- 0x6E, 0x83, 0x88, 0x8C, 0x8C, 0x8C, 0x83, 0xE8,
- 0xFB, 0xFC, 0xFC, 0xFC, 0x33, 0x70, 0x70, 0x6F,
- 0x6F, 0x6F, 0x6F, 0x3A, 0x6F, 0x6D, 0x6F, 0x6F,
- 0x70, 0x6F, 0x6F, 0x70, 0x6F, 0x32, 0x5A, 0x48,
- 0x41, 0x2D, 0x2D, 0x2D, 0x2C, 0x41, 0x49, 0x5A,
- 0x62, 0xCB, 0xCB, 0x63, 0x5D, 0x50, 0x49, 0x4A,
- 0x5C, 0x58, 0x58, 0x57, 0x55, 0x57, 0x57, 0x57,
- 0x57, 0x55, 0x56, 0x59, 0x5E, 0x5C, 0x52, 0x53,
- 0x55, 0x5B, 0x5E, 0x61, 0x63, 0x64, 0x63, 0xFC,
- 0xE8, 0xBF, 0xA4, 0x99, 0x9C, 0x8C, 0x88, 0x88,
- 0x6E, 0x88, 0x8C, 0x8C, 0x8C, 0xC2, 0xA6, 0xC4,
- 0xFC, 0xFC, 0xFC, 0xFC, 0x36, 0x3A, 0x6F, 0x70,
- 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
- 0x70, 0x70, 0x70, 0x70, 0x37, 0x32, 0xCD, 0x5E,
- 0x4C, 0x43, 0x2C, 0x2D, 0x2D, 0x2C, 0x2E, 0x47,
- 0x57, 0x61, 0x65, 0xCC, 0x63, 0x5C, 0x50, 0x4D,
- 0x5C, 0x5A, 0x57, 0x55, 0x55, 0x55, 0x58, 0x58,
- 0x55, 0x54, 0x5B, 0x5E, 0x5D, 0x53, 0x53, 0x55,
- 0x5D, 0x5E, 0x61, 0x61, 0x61, 0x61, 0x5E, 0xFC,
- 0xEA, 0xBE, 0xA4, 0x9B, 0x8B, 0x85, 0x8C, 0x6E,
- 0x8C, 0x8C, 0x8C, 0xA3, 0xAA, 0xA4, 0xA4, 0xE9,
- 0xFB, 0xFC, 0xFC, 0xFC, 0x36, 0x6D, 0x70, 0x73,
- 0x70, 0x70, 0x70, 0x73, 0x73, 0x73, 0x73, 0x70,
- 0x70, 0x70, 0x73, 0x70, 0x37, 0x38, 0xD1, 0xCF,
- 0x61, 0x4D, 0x44, 0x2C, 0x2D, 0x2E, 0x2C, 0x2E,
- 0x3E, 0x56, 0x61, 0xCB, 0xCC, 0x62, 0x5B, 0x57,
- 0x59, 0x58, 0x55, 0x54, 0x54, 0x55, 0x58, 0x58,
- 0x58, 0x5B, 0x5E, 0x5B, 0x53, 0x55, 0x55, 0x5C,
- 0x5E, 0x61, 0x61, 0x60, 0x5D, 0x5A, 0x4E, 0xFC,
- 0xFC, 0xEA, 0xAA, 0x9C, 0x8A, 0x85, 0x82, 0x8C,
- 0x8C, 0xA8, 0xEB, 0xA8, 0xA4, 0xA4, 0xAA, 0xFC,
- 0xFC, 0xFC, 0x64, 0xFB, 0x39, 0x31, 0x72, 0x78,
- 0x73, 0x78, 0x73, 0x74, 0x74, 0x74, 0x74, 0x73,
- 0x78, 0x70, 0x73, 0x73, 0x33, 0xCC, 0xD2, 0xD1,
- 0xCE, 0x62, 0x53, 0x3F, 0x2D, 0x2D, 0x41, 0x2C,
- 0x2E, 0x3E, 0x56, 0x62, 0xCB, 0xCB, 0x61, 0x5D,
- 0x54, 0x54, 0x54, 0x54, 0x56, 0x58, 0x58, 0x58,
- 0x5C, 0x5E, 0x5A, 0x55, 0x58, 0x58, 0x5B, 0x5E,
- 0x61, 0x5E, 0x5D, 0x5A, 0x52, 0x55, 0xCD, 0xFC,
- 0xFC, 0x34, 0xC9, 0xE8, 0xA8, 0xAE, 0xC2, 0xE8,
- 0xC3, 0xA6, 0xA7, 0xA6, 0xAA, 0x78, 0x2E, 0x42,
- 0xFC, 0xFC, 0xD2, 0x64, 0xF8, 0x31, 0x72, 0x73,
- 0x73, 0x73, 0x73, 0x74, 0x75, 0x75, 0x74, 0x73,
- 0x73, 0x73, 0x73, 0x72, 0x33, 0x5C, 0x64, 0xD2,
- 0xD1, 0xCF, 0x63, 0x54, 0x3F, 0x2C, 0x41, 0x41,
- 0x2C, 0x2E, 0x47, 0x58, 0x63, 0xCB, 0xCB, 0x62,
- 0x52, 0x53, 0x53, 0x56, 0x58, 0x58, 0x5A, 0x5B,
- 0x5E, 0x5A, 0x57, 0x58, 0x58, 0x58, 0x60, 0x60,
- 0x5D, 0x5A, 0x55, 0x4E, 0x64, 0xD2, 0xD1, 0xFC,
- 0xFC, 0x41, 0x3E, 0xC1, 0xC0, 0xA3, 0xA6, 0xA7,
- 0xA7, 0xA9, 0xAA, 0xB8, 0x2E, 0x3F, 0x2C, 0x41,
- 0xFC, 0xFC, 0xF7, 0xCE, 0xCD, 0x36, 0x72, 0x73,
- 0x74, 0x75, 0x78, 0x75, 0x75, 0x75, 0x74, 0x74,
- 0x74, 0x74, 0x78, 0x72, 0x6D, 0x49, 0x59, 0xCB,
- 0xD1, 0xD1, 0xD2, 0xCB, 0x56, 0x3F, 0x2C, 0x41,
- 0x40, 0x2D, 0x2E, 0x49, 0x5B, 0x64, 0xCC, 0x64,
- 0x51, 0x53, 0x53, 0x55, 0x58, 0x59, 0x5B, 0x5E,
- 0x59, 0x58, 0x58, 0x58, 0x55, 0x60, 0x60, 0x5C,
- 0x5A, 0x53, 0x5B, 0xD0, 0xD3, 0xD3, 0xD3, 0xFB,
- 0xFC, 0x40, 0x41, 0x45, 0xC4, 0xC0, 0xBE, 0xBE,
- 0xC1, 0xC0, 0x3C, 0x47, 0x2E, 0x21, 0x22, 0x20,
- 0x65, 0xFC, 0xFC, 0xFC, 0xFC, 0x6D, 0x72, 0x75,
- 0x78, 0x76, 0x75, 0x79, 0x76, 0x76, 0x76, 0x76,
- 0x75, 0x75, 0x75, 0x72, 0x6D, 0x2E, 0x48, 0x5D,
- 0xCE, 0xD1, 0xD4, 0xD3, 0xCB, 0x56, 0x43, 0x2C,
- 0x42, 0x43, 0x2E, 0x2E, 0x4A, 0x5D, 0x64, 0x64,
- 0x50, 0x52, 0x56, 0x58, 0x5C, 0x5D, 0x5E, 0x5D,
- 0x5A, 0x58, 0x58, 0x55, 0x61, 0x60, 0x58, 0x58,
- 0x4E, 0x61, 0xD1, 0xD4, 0xD4, 0xD1, 0xEE, 0xFC,
- 0xFC, 0x2B, 0x29, 0x2E, 0x3F, 0xB0, 0xAD, 0x81,
- 0x46, 0x2D, 0x46, 0x2C, 0x24, 0x22, 0x22, 0x23,
- 0x25, 0xFC, 0xFC, 0xFC, 0xFC, 0x6E, 0x73, 0x76,
- 0x76, 0x79, 0x79, 0x79, 0x76, 0x76, 0x79, 0x76,
- 0x79, 0x79, 0x79, 0x74, 0x3F, 0x41, 0x2C, 0x48,
- 0x5F, 0xCF, 0xD5, 0xD7, 0xD6, 0xCD, 0x57, 0x40,
- 0x2E, 0x3F, 0x44, 0x2E, 0x41, 0x4C, 0x60, 0x61,
- 0x51, 0x53, 0x58, 0x5C, 0x5D, 0x5E, 0x5D, 0x5C,
- 0x58, 0x57, 0x54, 0x5F, 0x5E, 0x55, 0x55, 0x52,
- 0x64, 0xD4, 0xD5, 0xD4, 0xD1, 0x5D, 0xFA, 0xFB,
- 0xF4, 0x21, 0x24, 0x41, 0x40, 0x44, 0x2E, 0x2E,
- 0x42, 0x41, 0x2A, 0x24, 0x22, 0x22, 0x22, 0x22,
- 0x23, 0xD9, 0xFC, 0xFC, 0xFC, 0xFC, 0xE5, 0xB8,
- 0x8F, 0x8F, 0x7A, 0x8F, 0x7A, 0x8F, 0x7A, 0x8F,
- 0x8F, 0x8F, 0xB8, 0xE5, 0x3F, 0x3E, 0x43, 0x2C,
- 0x48, 0x61, 0xD1, 0xD7, 0xD9, 0xD7, 0xD0, 0x57,
- 0x41, 0x2E, 0x3E, 0x44, 0x2D, 0x40, 0x52, 0x5D,
- 0x53, 0x55, 0x59, 0x5D, 0x5E, 0x5E, 0x5D, 0x5A,
- 0x57, 0x53, 0x5E, 0x5E, 0x54, 0x53, 0x54, 0x65,
- 0xD5, 0xD6, 0xD4, 0xCE, 0x53, 0xFB, 0xF9, 0xFC,
- 0x24, 0x22, 0x23, 0x23, 0x41, 0x42, 0x2E, 0x40,
- 0x2B, 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x23, 0x23, 0xFC, 0xFC, 0xFC, 0xFC, 0xE7, 0xBD,
- 0xB5, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
- 0x93, 0xB5, 0xC6, 0xEB, 0x2D, 0x47, 0x4A, 0x47,
- 0x2C, 0x3E, 0x61, 0xD4, 0xDC, 0xDC, 0xDA, 0xCF,
- 0x54, 0x41, 0x41, 0x3E, 0x45, 0x2C, 0x3F, 0x4A,
- 0x58, 0x5A, 0x5C, 0x5F, 0x60, 0x5E, 0x5D, 0x57,
- 0x51, 0x5D, 0x5D, 0x51, 0x53, 0x53, 0xCB, 0xD5,
- 0xD6, 0xD5, 0x63, 0x55, 0xFC, 0xFC, 0xFC, 0x2C,
- 0x23, 0x22, 0x23, 0x22, 0x20, 0x2D, 0x2C, 0x26,
- 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x21, 0xF0, 0xFC, 0xFC, 0xFC, 0xE2, 0xC6,
- 0xB5, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
- 0x93, 0x93, 0xC7, 0xE3, 0x3E, 0x2E, 0x49, 0x52,
- 0x4C, 0x41, 0x44, 0x62, 0xD6, 0xDE, 0xDE, 0xD9,
- 0xD0, 0x51, 0x2E, 0x40, 0x47, 0x44, 0x2C, 0x42,
- 0x5D, 0x5D, 0x5F, 0x60, 0x60, 0x5D, 0x57, 0x51,
- 0x58, 0x5D, 0x4E, 0x52, 0x55, 0x64, 0xD5, 0xD6,
- 0xD4, 0x61, 0x59, 0x6B, 0xFC, 0xFC, 0xFC, 0x21,
- 0x23, 0x22, 0x23, 0x22, 0x23, 0x21, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x21, 0x24, 0xFC, 0xFC, 0xFC, 0xE2, 0xC7,
- 0xB5, 0x90, 0x93, 0x93, 0x93, 0x90, 0x93, 0x93,
- 0x90, 0xB5, 0xC8, 0xE4, 0x5F, 0x45, 0x2E, 0x4D,
- 0x57, 0x57, 0x44, 0x43, 0x63, 0xDA, 0xDF, 0xDF,
- 0xD9, 0xCE, 0x4C, 0x2C, 0x3F, 0x3E, 0x40, 0x40,
- 0x60, 0x5E, 0x61, 0x61, 0x5E, 0x5B, 0x53, 0x52,
- 0x5C, 0x52, 0x52, 0x55, 0x61, 0xD4, 0xD5, 0xD1,
- 0x5E, 0x5B, 0x5C, 0xFB, 0xFC, 0xFC, 0x2A, 0x21,
- 0x23, 0x22, 0x23, 0x22, 0x22, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0xFB, 0xFC, 0xFC, 0xB3, 0xC8,
- 0xB5, 0x90, 0x92, 0xB5, 0x93, 0x93, 0xB5, 0x93,
- 0x92, 0xB5, 0xC8, 0xB9, 0xD0, 0x5E, 0x44, 0x40,
- 0x52, 0x58, 0x57, 0x48, 0x40, 0x63, 0xD9, 0xE0,
- 0xE0, 0xD9, 0xCB, 0x49, 0x2D, 0x3F, 0x45, 0x3F,
- 0x63, 0x61, 0x62, 0x60, 0x5E, 0x55, 0x4D, 0x59,
- 0x53, 0x4E, 0x54, 0x5D, 0xD2, 0xD4, 0xD2, 0x5E,
- 0x5C, 0x5D, 0xFC, 0xFC, 0xFC, 0xF8, 0x29, 0x23,
- 0x23, 0x23, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x23, 0x22, 0x22, 0x23, 0x23, 0x23, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0xF0, 0xFC, 0xFC, 0xB3, 0xC7,
- 0xB5, 0x93, 0xB5, 0x93, 0x93, 0x91, 0x93, 0x93,
- 0x91, 0xB5, 0xC7, 0xAD, 0xD6, 0xD2, 0x5E, 0x3F,
- 0x3F, 0x57, 0x57, 0x58, 0x4A, 0x41, 0x64, 0xDC,
- 0xF1, 0xDF, 0xDA, 0x61, 0x45, 0x2E, 0x43, 0x47,
- 0xCB, 0x63, 0x62, 0x5F, 0x58, 0x51, 0x53, 0x54,
- 0x4C, 0x52, 0x5C, 0xCD, 0xD3, 0xD2, 0x60, 0x5D,
- 0x5D, 0xFB, 0xFC, 0xFC, 0xFC, 0xDB, 0x49, 0x24,
- 0x21, 0x23, 0x23, 0x22, 0x26, 0x26, 0x2A, 0x24,
- 0x22, 0x23, 0x22, 0x21, 0x24, 0x26, 0x26, 0x2A,
- 0x29, 0x2B, 0x24, 0x25, 0xFC, 0xFC, 0xB3, 0xC5,
- 0x91, 0x91, 0x92, 0x91, 0x92, 0x92, 0x93, 0x93,
- 0x91, 0x93, 0xC6, 0xAD, 0xDC, 0xD9, 0xD4, 0x60,
- 0x43, 0x45, 0x58, 0x58, 0x57, 0x4B, 0x43, 0xCC,
- 0xDD, 0xF1, 0xD8, 0xD5, 0x5D, 0x43, 0x41, 0x47,
- 0xCD, 0x63, 0x62, 0x5D, 0x54, 0x4C, 0x55, 0x4B,
- 0x51, 0x58, 0x62, 0xD0, 0xD0, 0x62, 0x5D, 0x5D,
- 0x67, 0xFC, 0xFC, 0xFC, 0xFC, 0x58, 0x4E, 0x28,
- 0x2A, 0x20, 0x23, 0x22, 0x23, 0x2A, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x23, 0x25, 0x2A, 0x2E, 0x2D,
- 0x2E, 0x2E, 0x2E, 0x23, 0xFA, 0xFC, 0xB2, 0xBD,
- 0xB5, 0x90, 0x91, 0x93, 0x92, 0x90, 0x91, 0x93,
- 0x92, 0x91, 0xBD, 0xAD, 0xDE, 0xE0, 0xD8, 0xD7,
- 0x61, 0x40, 0x48, 0x58, 0x58, 0x58, 0x48, 0x44,
- 0xCF, 0xDE, 0xE0, 0xDD, 0xD0, 0x52, 0x41, 0x45,
- 0xCD, 0x63, 0x61, 0x58, 0x4D, 0x51, 0x4C, 0x4B,
- 0x54, 0x5D, 0xCC, 0xCE, 0x63, 0x61, 0x5D, 0x5D,
- 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, 0x4B, 0x27, 0x21,
- 0x22, 0x22, 0x23, 0x22, 0x22, 0x24, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x20,
- 0x27, 0x2B, 0x41, 0x2B, 0x23, 0xFC, 0xB2, 0xB6,
- 0x93, 0x90, 0x92, 0xB5, 0x92, 0x90, 0xB5, 0x90,
- 0x92, 0x93, 0xBC, 0xAD, 0xDC, 0xF1, 0xF3, 0xF0,
- 0xD9, 0x61, 0x41, 0x4A, 0x58, 0x57, 0x57, 0x44,
- 0x49, 0xD2, 0xDD, 0xD8, 0xDA, 0x63, 0x4A, 0x45,
- 0xCC, 0x63, 0x5E, 0x52, 0x4B, 0x4C, 0x49, 0x51,
- 0x5C, 0x61, 0xCD, 0x65, 0x63, 0x5E, 0x4E, 0xCF,
- 0xFB, 0xFB, 0xF0, 0xFC, 0xD2, 0x2A, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x26, 0x41, 0x27, 0xF9, 0x81, 0xB7,
- 0xB5, 0x91, 0x92, 0xB5, 0x91, 0xB5, 0x93, 0xB5,
- 0x93, 0xB6, 0xB7, 0xB9, 0xCB, 0xD8, 0xF3, 0xF2,
- 0xF2, 0xDB, 0x61, 0x2D, 0x51, 0x58, 0x57, 0x58,
- 0x41, 0x51, 0xD4, 0xDB, 0xDC, 0xD1, 0x5B, 0x4C,
- 0xCB, 0x62, 0x59, 0x4C, 0x4A, 0x49, 0x4B, 0x55,
- 0x60, 0x64, 0xCC, 0x64, 0x5E, 0x55, 0x60, 0xE1,
- 0xFB, 0xF8, 0xFC, 0xFC, 0x21, 0x22, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x21, 0x24, 0x2D, 0x21, 0xB4, 0xBB,
- 0xB6, 0xB5, 0xB6, 0xB7, 0xB7, 0xB7, 0xB7, 0xB6,
- 0xB6, 0xB6, 0xBB, 0xB9, 0x45, 0xCB, 0xDF, 0xF3,
- 0xF3, 0xF3, 0xDB, 0x5E, 0x2C, 0x51, 0x58, 0x58,
- 0x52, 0x2D, 0x5C, 0xD4, 0xD9, 0xD5, 0x63, 0x58,
- 0x64, 0x60, 0x53, 0x49, 0x4A, 0x49, 0x52, 0x5C,
- 0x63, 0xCD, 0xCD, 0x63, 0x5C, 0x4E, 0x65, 0xFC,
- 0xFC, 0xF5, 0xFC, 0xD2, 0x23, 0x22, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x21, 0x22, 0x25, 0x29, 0xB3, 0xC7,
- 0xB5, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
- 0xB6, 0xB5, 0xC7, 0xAD, 0x57, 0x3F, 0xCB, 0xF0,
- 0xF3, 0xF3, 0xF2, 0xD9, 0x58, 0x41, 0x4C, 0x58,
- 0x57, 0x47, 0x42, 0x62, 0xD4, 0xD4, 0xCC, 0x60,
- 0x63, 0x5D, 0x50, 0x47, 0x48, 0x4B, 0x58, 0x60,
- 0xCC, 0xCE, 0xCD, 0x60, 0x53, 0x5C, 0x62, 0xFB,
- 0xF9, 0xFC, 0xFC, 0x21, 0x23, 0x22, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x23, 0x23, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, 0x81, 0xC7,
- 0xB7, 0xB7, 0xBC, 0xB7, 0xBC, 0xBC, 0xBC, 0xB7,
- 0xB7, 0xB7, 0xC8, 0x80, 0x58, 0x57, 0x40, 0xCE,
- 0xF3, 0xF2, 0xF2, 0xF0, 0xD5, 0x4C, 0x3F, 0x4B,
- 0x52, 0x50, 0x2D, 0x4B, 0x64, 0xD2, 0xCC, 0x61,
- 0x60, 0x58, 0x4A, 0x47, 0x47, 0x4C, 0x59, 0x64,
- 0xD0, 0xD0, 0x64, 0x59, 0x49, 0x5D, 0xFB, 0xFC,
- 0xD9, 0xFC, 0xD6, 0x23, 0x22, 0x22, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x23, 0x21, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, 0xB4, 0xC8,
- 0xBD, 0xB7, 0xBD, 0xBC, 0xBD, 0xC5, 0xBC, 0xC5,
- 0xBC, 0xBD, 0xC7, 0xAC, 0x58, 0x57, 0x58, 0x2C,
- 0xD1, 0xF0, 0xF3, 0xF3, 0xE0, 0xCD, 0x45, 0x3E,
- 0x48, 0x4B, 0x3F, 0x41, 0x56, 0x64, 0x65, 0x62,
- 0x5D, 0x52, 0x47, 0x48, 0x48, 0x53, 0x60, 0xCC,
- 0xD2, 0xD0, 0x63, 0x52, 0x4E, 0x53, 0xFB, 0xFB,
- 0xFC, 0xFC, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x23, 0x20, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, 0xB4, 0xC7,
- 0xC5, 0xBC, 0xC5, 0xBD, 0xC5, 0xC5, 0xBD, 0xC5,
- 0xBC, 0xC6, 0xC7, 0xB9, 0x58, 0x57, 0x58, 0x57,
- 0x2D, 0xD4, 0xF1, 0xF2, 0xF0, 0xD9, 0x5D, 0x47,
- 0x48, 0x3F, 0x42, 0x2C, 0x48, 0x5C, 0x5F, 0x60,
- 0x58, 0x50, 0x47, 0x4A, 0x49, 0x55, 0x63, 0xD0,
- 0xD2, 0xCD, 0x5D, 0x49, 0x4E, 0xE1, 0xFC, 0xF0,
- 0xFC, 0xF8, 0x22, 0x22, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x20, 0x21, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x22,
- 0x23, 0x22, 0x23, 0x23, 0x23, 0x22, 0xC4, 0xC8,
- 0xBD, 0xBD, 0xC6, 0xBD, 0xC6, 0xC6, 0xC5, 0xC6,
- 0xBD, 0xC6, 0xC7, 0xE4, 0x54, 0x57, 0x58, 0x57,
- 0x57, 0x43, 0xD7, 0xE0, 0xF1, 0xD8, 0xCD, 0x4B,
- 0x4A, 0x47, 0x42, 0x2C, 0x3F, 0x4D, 0x58, 0x5C,
- 0x52, 0x4B, 0x48, 0x4B, 0x4A, 0x58, 0xCB, 0xD3,
- 0xD2, 0xCD, 0x58, 0x47, 0x4A, 0xFC, 0xFC, 0xFB,
- 0xFC, 0x2B, 0x22, 0x22, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x26, 0x21, 0x21, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0xE5, 0xC8,
- 0xBA, 0xC5, 0xC6, 0xC6, 0xC6, 0xC7, 0xC6, 0xC7,
- 0xC5, 0xC6, 0xC8, 0xE5, 0x2E, 0x54, 0x58, 0x57,
- 0x57, 0x4C, 0x4D, 0xDA, 0xD8, 0xD8, 0xD4, 0x5C,
- 0x4B, 0x4B, 0x3F, 0x42, 0x44, 0x4A, 0x51, 0x58,
- 0x4B, 0x48, 0x4B, 0x51, 0x4D, 0x5F, 0xD0, 0xD1,
- 0xD0, 0x64, 0x51, 0x44, 0x6B, 0xFC, 0xFB, 0xFC,
- 0xFC, 0x21, 0x23, 0x22, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x26, 0x21, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0xE5, 0xED,
- 0xE7, 0xBA, 0xC8, 0xC6, 0xC6, 0xC6, 0xC6, 0xC7,
- 0xC7, 0xE5, 0xED, 0xE6, 0x61, 0x41, 0x52, 0x58,
- 0x58, 0x57, 0x45, 0x5E, 0xD7, 0xDD, 0xD5, 0x60,
- 0x4B, 0x4C, 0x48, 0x4D, 0x4D, 0x50, 0x4D, 0x56,
- 0x4A, 0x3E, 0x53, 0x53, 0x52, 0x63, 0xD3, 0xD0,
- 0xCE, 0x60, 0x4A, 0x45, 0xFC, 0xFC, 0xF7, 0xFC,
- 0xFC, 0x21, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x21, 0x2A, 0x20, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x22, 0x21, 0x23, 0xEB, 0xF6,
- 0xF6, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED,
- 0xF6, 0xF6, 0xF6, 0xE6, 0xDB, 0x58, 0x45, 0x4B,
- 0x58, 0x57, 0x4D, 0x4B, 0x64, 0xD4, 0xD0, 0x5C,
- 0x48, 0x51, 0x4C, 0x5D, 0x5E, 0x5C, 0x56, 0x59,
- 0x3E, 0x4A, 0x58, 0x54, 0x52, 0x65, 0xD3, 0xD0,
- 0xCF, 0x5D, 0x48, 0xFC, 0xFC, 0xFC, 0xFA, 0xFC,
- 0xFC, 0x21, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x21, 0x2A, 0x21, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x22, 0x21, 0x4F, 0xE6, 0xC6,
- 0xC6, 0xBD, 0xC6, 0xBD, 0xBD, 0xBD, 0xBD, 0xC6,
- 0xC5, 0xBA, 0xC7, 0xE6, 0xF2, 0xD4, 0x49, 0x4B,
- 0x3E, 0x4D, 0x52, 0x3E, 0x52, 0x63, 0x64, 0x56,
- 0x48, 0x54, 0x4D, 0x61, 0xCC, 0xCC, 0x60, 0x60,
- 0x47, 0x4D, 0x5C, 0x53, 0x58, 0xCF, 0xD1, 0xCF,
- 0xD0, 0x59, 0x45, 0xFC, 0xFC, 0xFC, 0xEF, 0xF9,
- 0xFC, 0x21, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
- 0x23, 0x22, 0x23, 0x2A, 0x21, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x22, 0x23, 0x4F, 0xE4, 0xB9,
- 0xAF, 0x80, 0x80, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F,
- 0x80, 0xB4, 0xB9, 0xE4, 0x7F, 0xDE, 0x61, 0x52,
- 0x54, 0x48, 0x3F, 0x43, 0x4D, 0x56, 0x59, 0x4B,
- 0x3E, 0x58, 0x53, 0x61, 0xD3, 0xD4, 0xCF, 0xCD,
- 0x4C, 0x58, 0x5F, 0x53, 0x5E, 0xD3, 0xD0, 0xCE,
- 0xCE, 0x52, 0x3F, 0xFC, 0xFC, 0xFC, 0xF7, 0x65,
- 0xFA, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
- 0x23, 0x22, 0x21, 0x2A, 0x23, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x22, 0x21, 0xB1, 0xE4, 0xE6,
- 0x7C, 0xB1, 0x7C, 0xB1, 0xB2, 0xB2, 0xB3, 0x3D,
- 0xB3, 0x3C, 0xE5, 0xB3, 0xB0, 0xF1, 0xD0, 0x58,
- 0x5D, 0x4D, 0x40, 0x41, 0x48, 0x51, 0x4C, 0x3F,
- 0x3F, 0x4D, 0x5A, 0x5A, 0xD5, 0xD9, 0xD7, 0xD4,
- 0x57, 0x5E, 0x61, 0x4C, 0x63, 0xD4, 0xCF, 0xCE,
- 0xCB, 0x4D, 0x4A, 0xFC, 0xFC, 0xFC, 0xFC, 0xF0,
- 0xFB, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
- 0x23, 0x22, 0x23, 0x2A, 0x21, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x22, 0x23, 0x22, 0x23, 0x23, 0xB1, 0x81, 0x7D,
- 0x39, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x36,
- 0x36, 0x36, 0x7C, 0xB2, 0xB0, 0xDF, 0xD2, 0x57,
- 0x60, 0x59, 0x5B, 0x59, 0x52, 0x4C, 0x4A, 0x40,
- 0x42, 0x4A, 0x53, 0x4D, 0xD2, 0xDE, 0xDE, 0xD9,
- 0x5E, 0x5E, 0x60, 0x4A, 0xCD, 0xD1, 0xCF, 0xCE,
- 0x63, 0x49, 0x5C, 0xFB, 0xE8, 0x89, 0x9F, 0xFC,
- 0xD6, 0x21, 0x21, 0x23, 0x22, 0x22, 0x23, 0x22,
- 0x23, 0x22, 0x21, 0x2A, 0x22, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x7F, 0xB9,
- 0x71, 0x6C, 0x38, 0x38, 0x33, 0x33, 0x33, 0x38,
- 0x38, 0x71, 0xAD, 0xE4, 0xD3, 0xDA, 0xCC, 0x52,
- 0x63, 0x60, 0xCE, 0xD4, 0xCF, 0x60, 0x4C, 0x40,
- 0x3F, 0x45, 0x4B, 0x5A, 0xCB, 0xD8, 0xDE, 0xDC,
- 0x5E, 0x5E, 0x5F, 0x4C, 0xD2, 0xD2, 0xCF, 0xCF,
- 0x61, 0x45, 0x5E, 0xA7, 0x9D, 0x95, 0x8B, 0x99,
- 0xFC, 0x41, 0x21, 0x23, 0x23, 0x22, 0x23, 0x22,
- 0x23, 0x22, 0x23, 0x2A, 0x23, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x77, 0x77, 0xF6,
- 0xFC, 0x7D, 0x7D, 0x7E, 0x7E, 0x7E, 0x7E, 0x7D,
- 0x7D, 0xFC, 0x47, 0x64, 0xD0, 0xD0, 0x5D, 0x4B,
- 0x62, 0xCC, 0xD1, 0xDE, 0xDE, 0xD4, 0x5E, 0x43,
- 0x3F, 0x3E, 0x48, 0x53, 0x58, 0xDB, 0xD8, 0xDC,
- 0x5E, 0x5E, 0x5E, 0x53, 0xD4, 0xD2, 0xD0, 0xD0,
- 0x5E, 0x49, 0xA7, 0xA6, 0x89, 0x95, 0x8B, 0x9C,
- 0x9C, 0xFB, 0xD4, 0x22, 0x22, 0x22, 0x22, 0x23,
- 0x22, 0x23, 0x23, 0x2A, 0x22, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x23, 0x22, 0x23, 0x23, 0x98, 0x8C, 0x8C, 0x88,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8,
- 0xE9, 0x9C, 0x48, 0x5C, 0xD0, 0xCB, 0x48, 0x49,
- 0x5B, 0xCB, 0xCD, 0xE0, 0xF1, 0xDD, 0xD0, 0x4A,
- 0x41, 0x47, 0x45, 0x4C, 0x48, 0xD7, 0xDE, 0xDC,
- 0x5E, 0x5E, 0x5A, 0x58, 0xD1, 0xD0, 0xD0, 0xD2,
- 0x5C, 0x55, 0xA7, 0xA6, 0x87, 0x86, 0x89, 0x94,
- 0x9C, 0xA9, 0xFC, 0xF4, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x22, 0x2A, 0x21, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x22, 0x23, 0xA4, 0x89, 0x8C, 0xAA,
- 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF7,
- 0x85, 0x88, 0x8D, 0x59, 0x64, 0x63, 0x47, 0x3E,
- 0x4C, 0x60, 0x61, 0xE0, 0xF0, 0xDF, 0xD9, 0x5D,
- 0x2E, 0x3E, 0x3E, 0x47, 0x4D, 0xCD, 0xDE, 0xDC,
- 0x5D, 0x5C, 0x51, 0x5D, 0xD1, 0xD2, 0xD2, 0xD4,
- 0x5A, 0xBE, 0xA7, 0x98, 0x8A, 0x8A, 0xA0, 0x8B,
- 0x86, 0x86, 0xF7, 0xFC, 0xF7, 0x26, 0x23, 0x23,
- 0x22, 0x22, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x22, 0x21, 0x21, 0x21, 0xA1, 0x98, 0x9F, 0xBF,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xA7,
- 0x8C, 0x86, 0x8D, 0x59, 0x5E, 0x5D, 0x3F, 0x3E,
- 0x47, 0x53, 0x63, 0xD9, 0xF0, 0xF1, 0xDE, 0xD0,
- 0x43, 0x3E, 0x47, 0x45, 0x4A, 0x5B, 0xDC, 0xDA,
- 0x5D, 0x59, 0x49, 0x5F, 0xD1, 0xD2, 0xD3, 0xB9,
- 0xA5, 0xA7, 0x98, 0x9B, 0x96, 0x9D, 0x89, 0x89,
- 0x8B, 0x9C, 0x9D, 0xFC, 0xFC, 0xFC, 0x26, 0x22,
- 0x23, 0x23, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x22, 0x22, 0x29, 0x2D, 0x99, 0x99, 0xA2, 0xAA,
- 0xC4, 0xFB, 0xFC, 0xFC, 0xFC, 0xF6, 0xBF, 0xA2,
- 0x9C, 0x9C, 0x8E, 0xDC, 0xCD, 0x51, 0x41, 0x3E,
- 0x45, 0x49, 0x58, 0xCD, 0xE0, 0xE0, 0xD8, 0xDA,
- 0x4C, 0x4A, 0x45, 0x45, 0x48, 0x47, 0xDA, 0xDA,
- 0x5C, 0x58, 0x44, 0x69, 0xA9, 0x98, 0xA4, 0xA6,
- 0xA1, 0xA4, 0x99, 0x9E, 0x9D, 0x8B, 0x8A, 0x97,
- 0x87, 0x9A, 0x8A, 0xC2, 0xFC, 0xFC, 0xFC, 0x4D,
- 0x21, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x22,
- 0x21, 0x22, 0x2D, 0x34, 0xA4, 0xA2, 0xA2, 0xA9,
- 0xBF, 0xC0, 0xC3, 0xC1, 0xC0, 0xBE, 0xA6, 0x9D,
- 0x99, 0x87, 0xA2, 0xF1, 0xDC, 0x64, 0x42, 0x45,
- 0x47, 0x3E, 0x49, 0x4C, 0xDD, 0xDF, 0xD8, 0xDB,
- 0x5E, 0x4C, 0x48, 0x45, 0x45, 0x41, 0xD1, 0xD6,
- 0x5A, 0x55, 0x3F, 0xA7, 0xA1, 0x98, 0x9F, 0x99,
- 0x9F, 0x9D, 0x9A, 0x95, 0x8B, 0x97, 0x89, 0x8A,
- 0x88, 0x94, 0x9C, 0x8C, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xF4, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x23, 0x23, 0x2C, 0x2C, 0xA8, 0xA2, 0xA4, 0xA4,
- 0xA9, 0xAA, 0xAA, 0xAA, 0xA9, 0xA6, 0x98, 0x9C,
- 0x8B, 0x88, 0x98, 0x8D, 0xD8, 0xD6, 0x4E, 0x47,
- 0x47, 0x49, 0x47, 0x3F, 0xDA, 0xDD, 0xDE, 0xDD,
- 0xCC, 0x4A, 0x4B, 0x3E, 0x45, 0x43, 0x61, 0xD4,
- 0x56, 0x51, 0x44, 0xA4, 0x9B, 0x8B, 0x9C, 0x9A,
- 0xA0, 0xA2, 0x98, 0x98, 0x8B, 0x8B, 0x98, 0x98,
- 0x84, 0x8B, 0x94, 0x8A, 0xA4, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xF2, 0x21, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x23,
- 0x23, 0x22, 0x2C, 0x2D, 0xC0, 0xA4, 0xA2, 0xA4,
- 0xA4, 0xA6, 0xA6, 0xA6, 0xA4, 0xA2, 0x9F, 0x89,
- 0x8B, 0x9C, 0x9C, 0x8B, 0x68, 0xDB, 0x5F, 0x4B,
- 0x3E, 0x49, 0x4B, 0x3E, 0xCC, 0xDA, 0xDC, 0xDD,
- 0xD3, 0x49, 0x52, 0x48, 0x45, 0x45, 0x53, 0xD0,
- 0x51, 0x4A, 0x44, 0xA4, 0x9B, 0x8B, 0x9C, 0xA0,
- 0x9B, 0x86, 0x89, 0x98, 0x89, 0x8A, 0x96, 0x8A,
- 0x9C, 0x89, 0x89, 0x9C, 0x8C, 0xF6, 0xFC, 0xFC,
- 0xFC, 0xFC, 0x21, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x23,
- 0x22, 0x21, 0x2B, 0x34, 0xC0, 0xA8, 0xA4, 0xA2,
- 0xA2, 0x98, 0xA1, 0xA0, 0x98, 0x9F, 0x95, 0x8A,
- 0x94, 0xA1, 0x8A, 0x84, 0x9B, 0x68, 0xCC, 0x49,
- 0x4A, 0x47, 0x4C, 0x4B, 0x51, 0xD3, 0xDA, 0xDC,
- 0xD5, 0x56, 0x56, 0x4A, 0x3E, 0x45, 0x48, 0x63,
- 0x4A, 0x47, 0x3E, 0xA7, 0x98, 0x9D, 0x9E, 0x8B,
- 0x95, 0x9B, 0x89, 0x86, 0x9B, 0x8B, 0x89, 0x84,
- 0x9A, 0xA1, 0x95, 0x9A, 0x8C, 0xA4, 0xFC, 0xFC,
- 0xFC, 0xFA, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x23,
- 0x21, 0x23, 0x2C, 0xF6, 0xBF, 0xA9, 0xA2, 0x99,
- 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9B, 0x87, 0x8B,
- 0x9C, 0x86, 0x9C, 0x8A, 0x87, 0x87, 0x89, 0x51,
- 0x54, 0x47, 0x4B, 0x50, 0x4B, 0xCF, 0xD6, 0xDC,
- 0xD5, 0x60, 0x54, 0x52, 0x48, 0x45, 0x40, 0x5A,
- 0x45, 0x43, 0x47, 0xA7, 0x98, 0x9B, 0x95, 0x95,
- 0x9A, 0x87, 0x98, 0x98, 0x8A, 0x86, 0x87, 0x9E,
- 0x9B, 0x95, 0x9D, 0x9D, 0x99, 0x85, 0xA6, 0xFA,
- 0xF2, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x22,
- 0x21, 0x24, 0xFB, 0xF7, 0xBF, 0xA6, 0xA2, 0x99,
- 0x97, 0x89, 0x86, 0x89, 0x9C, 0x96, 0x9E, 0x94,
- 0x89, 0x99, 0x98, 0x89, 0x9E, 0x9B, 0x89, 0x8B,
- 0x58, 0x4B, 0x4A, 0x52, 0x48, 0xCC, 0xD3, 0xDA,
- 0xD3, 0x65, 0x4C, 0x58, 0x49, 0x3E, 0x2E, 0x4D,
- 0x40, 0x41, 0x45, 0xA9, 0xA1, 0x9B, 0x9E, 0x9C,
- 0x95, 0x8A, 0x94, 0x89, 0x96, 0x87, 0x9C, 0x9A,
- 0x84, 0x9D, 0x9C, 0x9E, 0x9A, 0x9C, 0x9D, 0xBB,
- 0x23, 0x23, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x23, 0x23,
- 0x24, 0xFC, 0xFC, 0xF6, 0xBF, 0xA6, 0x9F, 0x99,
- 0x89, 0x95, 0x87, 0x94, 0x9D, 0x9E, 0x97, 0x9E,
- 0x95, 0x9B, 0x89, 0x95, 0x95, 0x9B, 0x89, 0x87,
- 0x5D, 0x56, 0x3E, 0x51, 0x3E, 0x60, 0xCF, 0xD3,
- 0xD2, 0xCD, 0x5C, 0x49, 0x4B, 0x3E, 0x2C, 0x48,
- 0x3E, 0x43, 0x3E, 0xA9, 0xA1, 0x9B, 0x97, 0x94,
- 0x95, 0x9A, 0x9C, 0x87, 0x87, 0x9B, 0x9C, 0x95,
- 0x9D, 0x89, 0x9A, 0x89, 0x9E, 0x9E, 0x8C, 0xA6,
- 0x20, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x21, 0x21, 0x20, 0x40,
- 0xFC, 0xFC, 0xFC, 0xEC, 0xBE, 0xA4, 0x9F, 0x99,
- 0x95, 0x9F, 0xA0, 0x88, 0x9D, 0x8B, 0x97, 0x95,
- 0x87, 0x95, 0x96, 0x95, 0x97, 0x94, 0x94, 0x98,
- 0xD3, 0x4C, 0x47, 0x4D, 0x42, 0x4C, 0x60, 0xCC,
- 0xCE, 0xD0, 0x65, 0x4B, 0x47, 0x44, 0x2B, 0x45,
- 0x4B, 0x47, 0x49, 0xA7, 0xA1, 0x9A, 0x97, 0x89,
- 0x95, 0x97, 0x97, 0x9E, 0x89, 0x95, 0x89, 0x9C,
- 0x87, 0x95, 0x97, 0x99, 0x95, 0x99, 0x9F, 0xA4,
- 0xC4, 0x21, 0x21, 0x23, 0x21, 0x23, 0x23, 0x23,
- 0x23, 0x23, 0x23, 0x23, 0x21, 0x20, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xEA, 0xAA, 0xA6, 0xA2, 0x99,
- 0x8B, 0x9A, 0x95, 0x9E, 0x9E, 0x9A, 0x94, 0x87,
- 0x94, 0x94, 0x89, 0x94, 0x9B, 0x9B, 0xA7, 0xDC,
- 0xDB, 0x65, 0x2E, 0x3E, 0x43, 0x44, 0x49, 0x58,
- 0x63, 0xD3, 0xD3, 0x5E, 0x42, 0x42, 0x2D, 0x40,
- 0x54, 0x4C, 0x4A, 0xA7, 0xA0, 0x99, 0x9B, 0x94,
- 0xA0, 0x8A, 0x9B, 0x9D, 0x87, 0x95, 0x94, 0x8B,
- 0x8A, 0x98, 0x9C, 0x8A, 0x9B, 0x99, 0xA2, 0xA6,
- 0xBF, 0xEC, 0x2A, 0x20, 0x21, 0x23, 0x21, 0x20,
- 0x20, 0x20, 0x20, 0x4C, 0xF9, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xEB, 0xAA, 0xA4, 0x9F, 0x9C,
- 0x8B, 0x9B, 0x88, 0x84, 0x9E, 0x9D, 0x96, 0x94,
- 0x94, 0x9A, 0x9B, 0x9B, 0xA4, 0xD5, 0xCD, 0xDE,
- 0xF1, 0xDA, 0x4C, 0x2D, 0x41, 0x2B, 0x42, 0x4C,
- 0x5E, 0xD4, 0xD7, 0xCD, 0x49, 0x2E, 0x2E, 0x41,
- 0x5E, 0x57, 0xA7, 0xA6, 0xA7, 0xA4, 0xA2, 0x98,
- 0x9D, 0x9C, 0xA1, 0x99, 0x9D, 0x88, 0x8B, 0x9C,
- 0x8A, 0x9C, 0x9C, 0x94, 0x9C, 0x89, 0xA0, 0xA6,
- 0xAA, 0xEB, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFB, 0xE9, 0xAA, 0xA6, 0xA2, 0x8B,
- 0x8B, 0x8A, 0x86, 0x9B, 0x9C, 0x98, 0xA0, 0x9B,
- 0x9B, 0x84, 0xA7, 0xB4, 0x61, 0xD1, 0xD2, 0xE0,
- 0xF1, 0xDC, 0x61, 0x2D, 0x2E, 0x3F, 0x56, 0x62,
- 0x5D, 0xD4, 0xD9, 0xD3, 0x54, 0x41, 0x41, 0x44,
- 0xCB, 0x60, 0x52, 0xA9, 0xA9, 0xA9, 0xA7, 0xA6,
- 0xA6, 0xA4, 0xA4, 0xA2, 0xA2, 0x9D, 0x95, 0x89,
- 0x9C, 0x8A, 0x9E, 0x9C, 0x8A, 0x9E, 0xA0, 0xA8,
- 0xC0, 0xE9, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xE9, 0xAA, 0xA6, 0xA0, 0x99,
- 0x9C, 0x8B, 0x9A, 0x84, 0x9B, 0x9B, 0x98, 0x98,
- 0xA9, 0xB9, 0x49, 0x57, 0xCB, 0xD4, 0xD3, 0xF1,
- 0xD8, 0xDA, 0xCE, 0x3F, 0x41, 0x4B, 0x5D, 0xCB,
- 0x5E, 0xD6, 0xDB, 0xD6, 0x5D, 0x43, 0x3F, 0x49,
- 0xD1, 0xCC, 0x4F, 0xDD, 0xC3, 0xBB, 0xBF, 0xAA,
- 0xAA, 0xA9, 0xAA, 0xA8, 0xA8, 0xA6, 0xA6, 0xA2,
- 0x9C, 0x9F, 0x9B, 0x9A, 0x9D, 0xA2, 0xA8, 0xAA,
- 0xC1, 0xEA, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xEA, 0xC0, 0xAA, 0xA6, 0xA2,
- 0xA2, 0x99, 0xA0, 0xA0, 0xA4, 0xA7, 0xA9, 0xC0,
- 0x67, 0x49, 0x54, 0x60, 0xD0, 0xD4, 0xCC, 0xDF,
- 0xD9, 0xD5, 0xD2, 0x3E, 0x47, 0x56, 0x60, 0xCD,
- 0x5D, 0xD9, 0xD9, 0xD6, 0x61, 0x3F, 0x47, 0x52,
- 0xD6, 0xD3, 0x62, 0x4D, 0x40, 0x4A, 0x57, 0xCA,
- 0xC3, 0xC1, 0xC1, 0xC0, 0xBF, 0xBF, 0xAA, 0xAA,
- 0xA6, 0xA4, 0xA4, 0xA4, 0xA6, 0xA8, 0xBE, 0xC1,
- 0xC9, 0xEB, 0xFB, 0xFB, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xEB, 0xC3, 0xC0, 0xAA, 0xA8,
- 0xA6, 0xA6, 0xA6, 0xA9, 0xAA, 0xC0, 0xE8, 0xD0,
- 0xD2, 0x4C, 0x5E, 0x64, 0xD0, 0xD1, 0x5F, 0xD9,
- 0xD5, 0xD1, 0xD0, 0x48, 0x52, 0x5C, 0x64, 0xCD,
- 0x5C, 0xDC, 0xD7, 0xD5, 0x62, 0x3F, 0x4C, 0x53,
- 0xDA, 0xD7, 0xCE, 0x56, 0x40, 0x4B, 0x52, 0x56,
- 0xCE, 0xDF, 0x6A, 0xEB, 0xE9, 0xC9, 0xC3, 0xC0,
- 0xC0, 0xBF, 0xBE, 0xAA, 0xBF, 0xC0, 0xC3, 0xC9,
- 0xEA, 0xF6, 0xEE, 0x58, 0x57, 0x5E, 0xD6, 0xD0,
- 0xD2, 0x61, 0xCB, 0xD6, 0xD6, 0xD4, 0xDF, 0xF3,
- 0xF2, 0xDD, 0xD7, 0xEB, 0xC9, 0xC1, 0xC0, 0xBF,
- 0xAA, 0xAA, 0xAA, 0xBE, 0xC3, 0xF0, 0xD2, 0xD2,
- 0xD2, 0x51, 0x62, 0xCC, 0xD0, 0xCC, 0x61, 0xD3,
- 0xCF, 0xCE, 0xD2, 0x48, 0x5A, 0x61, 0xCC, 0xCE,
- 0x5F, 0xD9, 0xD5, 0xD1, 0x63, 0x44, 0x56, 0x56,
- 0xDC, 0xD9, 0xD4, 0x5E, 0x42, 0x4A, 0x4C, 0x57,
- 0x5D, 0xD8, 0xE0, 0xD8, 0xDC, 0xCB, 0x66, 0xEC,
- 0xE8, 0xC3, 0xC3, 0xC3, 0xC3, 0xC9, 0xE8, 0xEA,
- 0xF6, 0x50, 0x3E, 0x58, 0x57, 0x5A, 0xD6, 0xD4,
- 0xCC, 0x4B, 0x53, 0x5C, 0x64, 0xD1, 0xDF, 0xF3,
- 0xF1, 0xDE, 0xD9, 0xF6, 0xEB, 0xC9, 0xC1, 0xC1,
- 0xC0, 0xC0, 0xC1, 0xC9, 0xF0, 0xD6, 0xCD, 0xD6,
- 0xD3, 0x53, 0xCB, 0xCF, 0xCD, 0x5F, 0x5F, 0xCE,
- 0xCF, 0xCD, 0xD0, 0x47, 0x5F, 0xCB, 0xCE, 0xCD,
- 0x63, 0xD6, 0xD3, 0xD1, 0x63, 0x3F, 0x58, 0x58,
- 0xDB, 0xDC, 0xDA, 0x65, 0x3E, 0x49, 0x49, 0x4D,
- 0x49, 0xDC, 0xDF, 0xE0, 0xDE, 0xD5, 0x47, 0x47,
- 0x46, 0x6B, 0xEB, 0xEA, 0xE9, 0xEA, 0xEB, 0xF6,
- 0xD0, 0x57, 0x57, 0x47, 0x47, 0x5B, 0xD4, 0xD4,
- 0xCD, 0x44, 0x3E, 0x4B, 0x50, 0x4B, 0x51, 0xD5,
- 0xDB, 0xD8, 0xDE, 0x4B, 0xF6, 0xF6, 0xEA, 0xE9,
- 0xE8, 0xEA, 0xEB, 0x67, 0x5E, 0xCC, 0xD6, 0xDC,
- 0xD5, 0x58, 0xCE, 0xCE, 0x62, 0x50, 0xCC, 0xD3,
- 0xD2, 0xCD, 0xCD, 0x4B, 0x64, 0xCE, 0xCE, 0x64,
- 0xCC, 0xD3, 0xD2, 0xD2, 0x61, 0x47, 0x5D, 0x5C,
- 0xDD, 0xDD, 0xD9, 0xD1, 0x4C, 0x47, 0x49, 0x4A,
- 0x4B, 0xD1, 0xD8, 0xE0, 0xDF, 0xDD, 0x5D, 0x4A,
- 0x48, 0x52, 0x51, 0x3F, 0xF6, 0xEC, 0xE0, 0xE0,
- 0xD3, 0x5E, 0x5F, 0x50, 0x4B, 0x50, 0xCB, 0xCE,
- 0x64, 0x45, 0x4C, 0x57, 0x57, 0x58, 0x52, 0xD6,
- 0xD3, 0xDE, 0xDF, 0xD1, 0x3E, 0x4B, 0xF6, 0xF6,
- 0xEC, 0x66, 0x53, 0x43, 0x56, 0xD1, 0xD9, 0xDE,
- 0xD4, 0x5E, 0xCE, 0xCC, 0x5B, 0x2C, 0xD4, 0xD5,
- 0xD2, 0xD0, 0x63, 0x5D, 0xCD, 0xD0, 0xCD, 0x5E,
- 0xD0, 0xCF, 0xCE, 0xD2, 0x5E, 0x50, 0x60, 0x5D,
- 0xDE, 0xDD, 0xDC, 0xD7, 0x5D, 0x45, 0x47, 0x3E,
- 0x4B, 0x5E, 0xDE, 0xDF, 0xE0, 0xD8, 0xCF, 0x3E,
- 0x45, 0x51, 0x58, 0x42, 0xCB, 0xDA, 0xDE, 0xD8,
- 0xD2, 0x61, 0xCC, 0xCF, 0xD6, 0xDA, 0xDA, 0xD5,
- 0xD0, 0x50, 0x44, 0x57, 0x57, 0x58, 0x45, 0xD1,
- 0xD1, 0xD7, 0xDF, 0xDF, 0xD7, 0xCF, 0x64, 0x60,
- 0xCE, 0xCE, 0xCE, 0x63, 0xCF, 0xDA, 0xDE, 0xD9,
- 0xCF, 0x63, 0xCD, 0x63, 0x4D, 0x4B, 0xD6, 0xD5,
- 0xCE, 0xD3, 0x60, 0xCB, 0xD0, 0xD0, 0x65, 0x47,
- 0xD0, 0xCC, 0xCC, 0xD1, 0x59, 0x5D, 0x63, 0x5E,
- 0xDD, 0xDD, 0xDE, 0xDC, 0xCB, 0x40, 0x48, 0x45,
- 0x3E, 0x3E, 0xD9, 0xDF, 0xE0, 0xDF, 0xDA, 0x51,
- 0x4C, 0x48, 0x56, 0x4C, 0x5B, 0xD2, 0xDA, 0xDB,
- 0xCB, 0x5F, 0xD0, 0xCC, 0xDC, 0xF0, 0xF3, 0xE0,
- 0xDD, 0xCC, 0x41, 0x50, 0x57, 0x57, 0x4B, 0x5D,
- 0xD3, 0xD1, 0xDE, 0xDF, 0xDE, 0xD7, 0xD0, 0xD0,
- 0xD5, 0xD6, 0xD6, 0xCE, 0xD7, 0xDC, 0xDA, 0xD5,
- 0x60, 0x63, 0x64, 0x5E, 0x47, 0x61, 0xD5, 0xD2,
- 0xCF, 0xD0, 0x59, 0xCD, 0xD1, 0xCF, 0x61, 0x4D,
- 0xCC, 0xCE, 0xCD, 0xD0, 0x52, 0x61, 0x64, 0x60,
- 0xDA, 0xDE, 0xDE, 0xDD, 0xD1, 0x4B, 0x4A, 0x45,
- 0x3E, 0x41, 0xCD, 0xDE, 0xE0, 0xF1, 0xDE, 0x63,
- 0x4A, 0x4A, 0x4A, 0x4B, 0x50, 0xCB, 0xD4, 0xD7,
- 0x5E, 0x54, 0x62, 0xD3, 0xD4, 0xF0, 0xF3, 0xF3,
- 0xF2, 0xDE, 0x61, 0x40, 0x49, 0x56, 0x4D, 0x3E,
- 0x4B, 0xCE, 0xD9, 0xD8, 0xD9, 0xD5, 0xCF, 0xD2,
- 0xD6, 0xD6, 0xD1, 0xD1, 0xD7, 0xD5, 0xCF, 0xD0,
- 0x54, 0x64, 0x63, 0x56, 0x2C, 0xCB, 0xD1, 0xCC,
- 0xD3, 0xCD, 0x54, 0xCF, 0xD1, 0xCE, 0x5E, 0x5C,
- 0xCE, 0xCE, 0xCE, 0xCB, 0x4B, 0x63, 0xCC, 0x61,
- 0xD4, 0xDC, 0xDE, 0xDE, 0xDA, 0x5D, 0x45, 0x45,
- 0x48, 0x3F, 0x52, 0xD9, 0xD8, 0xDF, 0xDF, 0xD2,
- 0x52, 0x4B, 0x3E, 0x2E, 0x47, 0x60, 0xCF, 0xD3,
- 0x59, 0x48, 0x50, 0x5E, 0xCC, 0xDE, 0xF2, 0xF2,
- 0xF3, 0xF3, 0xDD, 0x5D, 0x3E, 0x48, 0x47, 0x47,
- 0x58, 0xD1, 0xDA, 0xDA, 0xD5, 0xD1, 0xCD, 0xD2,
- 0xD3, 0xCF, 0xD3, 0xD1, 0xCD, 0xD3, 0xD2, 0x5E,
- 0x52, 0x64, 0x60, 0x4B, 0x45, 0x61, 0xCD, 0xD3,
- 0xD3, 0x64, 0x61, 0xD0, 0xD0, 0x64, 0x45, 0x63,
- 0xD0, 0xCE, 0xD0, 0x60, 0x56, 0xCB, 0xCC, 0x62,
- 0xCE, 0xDA, 0xDE, 0xD8, 0xDD, 0xCC, 0x45, 0x49,
- 0x3E, 0x47, 0x42, 0xD1, 0xDC, 0xD8, 0xD8, 0xD3,
- 0x5D, 0x4C, 0x49, 0x3F, 0x47, 0x59, 0xCD, 0xCF,
- 0x59, 0x2E, 0x48, 0x47, 0x52, 0x63, 0xF0, 0xF2,
- 0xF3, 0xF3, 0xF2, 0xDA, 0x52, 0x4B, 0x52, 0x58,
- 0x5E, 0x63, 0xD0, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE,
- 0xCF, 0x65, 0x61, 0xD6, 0xD6, 0xD6, 0xCB, 0x4B,
- 0x61, 0x62, 0x5D, 0x43, 0x4B, 0x61, 0xD0, 0xD4,
- 0xD1, 0x61, 0xCE, 0xD2, 0xCD, 0x5E, 0x4A, 0xCE,
- 0xD0, 0xCC, 0xD0, 0x59, 0x61, 0xCC, 0xCC, 0x62,
- 0xD1, 0xD5, 0xDE, 0xD8, 0xDD, 0xCF, 0x4B, 0x4A,
- 0x45, 0x3E, 0x2D, 0xCB, 0xDC, 0xDE, 0xD8, 0xD5,
- 0x60, 0x54, 0x51, 0x4C, 0x4D, 0x5C, 0xCC, 0xCE,
- 0x5A, 0x2C, 0x50, 0x53, 0x3E, 0x59, 0xD8, 0xF3,
- 0xF2, 0xF3, 0xF3, 0xE0, 0x5E, 0x4A, 0x4C, 0x53,
- 0x5E, 0x63, 0xCC, 0xCC, 0xCC, 0xCD, 0xCF, 0xD3,
- 0x62, 0x53, 0xD6, 0xD6, 0xD6, 0xD6, 0x5B, 0x48,
- 0x64, 0x63, 0x59, 0x44, 0x57, 0x63, 0xD2, 0xD3,
- 0xD0, 0x5E, 0xD0, 0xD1, 0xCB, 0x58, 0x4C, 0xCF,
- 0xCF, 0xCE, 0xCE, 0x57, 0x63, 0xCC, 0xCD, 0x57,
-};
-
-unsigned char linux_logo_bw[] __initdata = {
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
- 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFE, 0x3F, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xC7, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC3,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF,
- 0xFB, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFD, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF1,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF,
- 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF9, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0xCF, 0xC3, 0xF8, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x87, 0x81, 0xF9,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xA7,
- 0x99, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF9, 0xF3, 0xBC, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0xE3, 0xBC, 0xF9, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0, 0x3C, 0xF9,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0,
- 0x19, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF9, 0xC0, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80,
- 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF9, 0xC0, 0x21, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0xB1, 0x80, 0xEC, 0xC0, 0x1F,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x90, 0x00, 0xE4,
- 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x8C,
- 0xC0, 0x7C, 0x04, 0x81, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xE3, 0x80, 0x00, 0x7C, 0x40, 0x11, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xE3, 0x80, 0x00, 0x7F, 0xD2, 0x29,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0x00, 0x3F,
- 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0x00,
- 0x00, 0x3F, 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF,
- 0x1E, 0x00, 0x00, 0x1F, 0x80, 0x19, 0xFF, 0xFF,
- 0xFF, 0xFE, 0x1C, 0x00, 0x00, 0x1E, 0x80, 0x19,
- 0xFF, 0xFF, 0xFF, 0xFE, 0x3C, 0x00, 0x00, 0x1E,
- 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC, 0x7C, 0x00,
- 0x00, 0x0F, 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC,
- 0xF8, 0x00, 0x00, 0x0E, 0x80, 0x11, 0xFF, 0xFF,
- 0xFF, 0xFC, 0xF8, 0x00, 0x00, 0x06, 0x00, 0x11,
- 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0x00, 0x00, 0x06,
- 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF9, 0xF0, 0x00,
- 0x00, 0x02, 0x00, 0x09, 0xFF, 0xFF, 0xFF, 0xF1,
- 0xF0, 0x00, 0x00, 0x02, 0x80, 0x10, 0xFF, 0xFF,
- 0xFF, 0xF1, 0xE0, 0x00, 0x00, 0x00, 0x97, 0x10,
- 0xFF, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x00, 0x00,
- 0xDF, 0xF0, 0xFF, 0xFF, 0xFF, 0xE3, 0xC0, 0x00,
- 0x00, 0x00, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC7,
- 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF,
- 0xFF, 0xC7, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8,
- 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x00, 0x01,
- 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00,
- 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x9F,
- 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF,
- 0xFF, 0x9F, 0x80, 0x00, 0x00, 0x01, 0x80, 0x18,
- 0xFF, 0xFF, 0xFF, 0x9E, 0x80, 0x00, 0x00, 0x03,
- 0xA8, 0x11, 0xFF, 0xFF, 0xFF, 0x9F, 0x80, 0x00,
- 0x00, 0x02, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x99,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x09, 0xFF, 0xFF,
- 0xFF, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x01,
- 0xFF, 0xFF, 0xFE, 0x20, 0x60, 0x00, 0x00, 0x00,
- 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0x00, 0x30, 0x00,
- 0x00, 0x00, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x40,
- 0x38, 0x00, 0x00, 0x00, 0xFE, 0x47, 0xFF, 0xFF,
- 0x81, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xFC, 0x23,
- 0xFF, 0xFF, 0x90, 0x00, 0x1E, 0x00, 0x00, 0x00,
- 0x78, 0x11, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0x80,
- 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00,
- 0x07, 0xC0, 0x00, 0x00, 0x00, 0x08, 0xFF, 0xFF,
- 0xC0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x04,
- 0x7F, 0xFF, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x10,
- 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x01, 0x80,
- 0x00, 0x30, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x70, 0x00, 0x01, 0x4F, 0xFF,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00,
- 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x80, 0x03, 0xF0,
- 0x00, 0x00, 0x8F, 0xFF, 0x80, 0x00, 0x00, 0x40,
- 0x0F, 0xF0, 0x00, 0x04, 0x1F, 0xFF, 0x80, 0x00,
- 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x10, 0x1F, 0xFF,
- 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x40,
- 0xFF, 0xFF, 0x98, 0x00, 0x00, 0xFF, 0xFF, 0xF0,
- 0x00, 0x83, 0xFF, 0xFF, 0x81, 0xE0, 0x01, 0xFF,
- 0xFF, 0xF8, 0x02, 0x07, 0xFF, 0xFF, 0x80, 0x3F,
- 0x07, 0xE0, 0x00, 0x1C, 0x0C, 0x1F, 0xFF, 0xFF,
- 0xF8, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0x78, 0x1F,
- 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0x00, 0x07, 0x0F,
- 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, 0x0C, 0x07,
- 0xFF, 0x83, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-};
-
-unsigned char linux_logo16_red[] __initdata = {
- 0x00, 0x90, 0xb0, 0x9c, 0xf7, 0x35, 0x83, 0xa5,
- 0x65, 0x8f, 0x98, 0xc9, 0xdb, 0xe1, 0xe7, 0xf8
-};
-
-unsigned char linux_logo16_green[] __initdata = {
- 0x00, 0x90, 0xb0, 0x9c, 0xf7, 0x2e, 0x83, 0xa5,
- 0x65, 0x6e, 0x98, 0x89, 0xbf, 0xac, 0xda, 0xf8
-};
-
-unsigned char linux_logo16_blue[] __initdata = {
- 0x00, 0x90, 0xaf, 0x9c, 0xf7, 0x2b, 0x82, 0xa5,
- 0x65, 0x41, 0x97, 0x1e, 0x60, 0x29, 0xa5, 0xf8
-};
-
-unsigned char linux_logo16[] __initdata = {
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa1, 0x11, 0x11,
- 0x61, 0x16, 0x66, 0x66, 0x11, 0x11, 0x11, 0x11,
- 0x11, 0x11, 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0xa8, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x87, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x73, 0x33, 0x33, 0x3a, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x27, 0x77, 0x77, 0x77, 0x33, 0x3a, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xa3, 0x33, 0x33, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x55, 0x50, 0x08, 0x33, 0x77, 0x77,
- 0x77, 0x72, 0x72, 0x27, 0x77, 0x77, 0x33, 0x33,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xa3, 0x33, 0x33, 0x77, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x58, 0x85, 0x00, 0x11, 0x11, 0xaa,
- 0xa3, 0x37, 0x77, 0x72, 0x22, 0x22, 0x77, 0x73,
- 0x33, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3,
- 0x33, 0x37, 0x77, 0x33, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x56, 0x85, 0x00, 0x06, 0x66, 0x11,
- 0x11, 0x1a, 0xa3, 0x37, 0x77, 0x72, 0x22, 0x77,
- 0x73, 0x33, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33,
- 0x33, 0x33, 0x33, 0x30, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x55, 0x00, 0x00, 0x06, 0x66, 0x66,
- 0x66, 0x66, 0x11, 0x1a, 0xa3, 0x77, 0x72, 0x22,
- 0x77, 0x73, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0xa0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,
- 0x66, 0x66, 0x66, 0x66, 0x11, 0xa3, 0x77, 0x22,
- 0x22, 0x77, 0x33, 0x33, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x33,
- 0x33, 0x3a, 0xa1, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x33,
- 0xaa, 0x11, 0x16, 0x66, 0x66, 0x61, 0x1a, 0x37,
- 0x22, 0x22, 0x77, 0x33, 0x3a, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0x33,
- 0x3a, 0xa1, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x22,
- 0x22, 0x77, 0x3a, 0x11, 0x66, 0x66, 0x66, 0x1a,
- 0x37, 0x22, 0x22, 0x77, 0x33, 0x3a, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x33, 0x3a,
- 0xa1, 0x11, 0x11, 0x10, 0x00, 0x00, 0x50, 0x00,
- 0x00, 0x05, 0x80, 0x50, 0x00, 0x00, 0x07, 0x72,
- 0x22, 0x22, 0x22, 0x73, 0xa1, 0x66, 0x66, 0x61,
- 0x1a, 0x77, 0x22, 0x27, 0x73, 0x33, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x3a, 0xaa,
- 0x11, 0x11, 0x1a, 0xa0, 0x08, 0x71, 0x05, 0x00,
- 0x00, 0x12, 0x22, 0x50, 0x00, 0x00, 0x07, 0x77,
- 0x77, 0x72, 0x22, 0x22, 0x27, 0x31, 0x16, 0x66,
- 0x61, 0x13, 0x77, 0x22, 0x77, 0x33, 0x3a, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0xaa, 0xa1,
- 0x11, 0x1a, 0x33, 0x70, 0x07, 0x2e, 0x70, 0x00,
- 0x01, 0x44, 0x42, 0x60, 0x00, 0x00, 0x02, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x27, 0x31, 0x66,
- 0x66, 0x61, 0xa3, 0x72, 0x22, 0x77, 0x33, 0xaa,
- 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0xaa, 0xaa, 0x11,
- 0x1a, 0x33, 0x77, 0x30, 0x04, 0x82, 0x40, 0x00,
- 0x54, 0x48, 0x54, 0x40, 0x00, 0x00, 0x01, 0xaa,
- 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x31,
- 0x66, 0x66, 0x11, 0x37, 0x22, 0x27, 0x73, 0x3a,
- 0xaa, 0xaa, 0xa3, 0x33, 0x3a, 0xaa, 0xaa, 0xaa,
- 0xa3, 0x77, 0xaa, 0x10, 0x50, 0x08, 0x46, 0x05,
- 0x54, 0x80, 0x50, 0x42, 0x00, 0x00, 0x08, 0x66,
- 0x66, 0x1a, 0x32, 0x22, 0x22, 0x22, 0x22, 0x27,
- 0x31, 0x66, 0x66, 0x13, 0x72, 0x22, 0x77, 0x33,
- 0xaa, 0xaa, 0xaa, 0x33, 0xaa, 0xa1, 0xaa, 0xa3,
- 0x37, 0xa1, 0x1a, 0x30, 0x50, 0x06, 0x26, 0x00,
- 0x54, 0x00, 0x00, 0x44, 0x00, 0x00, 0x08, 0xe2,
- 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22, 0x22,
- 0x27, 0xa6, 0x66, 0x61, 0xa7, 0x72, 0x27, 0x73,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33,
- 0x31, 0x11, 0x37, 0x70, 0x02, 0x00, 0xab, 0xbb,
- 0xb6, 0x00, 0x00, 0xf4, 0x00, 0x00, 0xee, 0xee,
- 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22,
- 0x22, 0x23, 0x16, 0x66, 0x1a, 0x37, 0x22, 0x77,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0x3a,
- 0x11, 0xa7, 0x33, 0x10, 0x04, 0x09, 0xbd, 0xdd,
- 0xbd, 0xd0, 0x04, 0x45, 0x00, 0x0e, 0xee, 0xee,
- 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22,
- 0x22, 0x22, 0x71, 0x66, 0x66, 0x13, 0x72, 0x27,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x11,
- 0xa3, 0x73, 0xa1, 0x60, 0x08, 0xbd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdb, 0x90, 0x00, 0x02, 0xec, 0xee,
- 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xce, 0x22,
- 0x22, 0x22, 0x27, 0xa6, 0x66, 0x61, 0x37, 0x27,
- 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0xa1, 0x1a,
- 0x33, 0xa1, 0x16, 0x60, 0x0b, 0xbd, 0xdd, 0xdd,
- 0xcd, 0xdd, 0xdd, 0xd9, 0x00, 0x00, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0xa2,
- 0x22, 0x22, 0x22, 0x7a, 0x66, 0x66, 0x13, 0x77,
- 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0x3a, 0x11, 0x33,
- 0xaa, 0x11, 0x66, 0x60, 0x9b, 0xdd, 0xdd, 0xdd,
- 0xcd, 0xdd, 0xdb, 0xb9, 0x00, 0x00, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xee, 0x61,
- 0x72, 0x22, 0x22, 0x22, 0xa1, 0x66, 0x61, 0x37,
- 0x1a, 0xaa, 0xaa, 0xaa, 0xa3, 0xa1, 0x13, 0x3a,
- 0x11, 0x11, 0x11, 0x10, 0x5b, 0xdd, 0xdd, 0xdc,
- 0xdd, 0xdd, 0xbd, 0xd9, 0x00, 0x00, 0xec, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xee, 0x86,
- 0x17, 0x22, 0x22, 0x22, 0x23, 0x16, 0x66, 0xaa,
- 0xaa, 0xa3, 0x3a, 0xaa, 0xaa, 0x1a, 0x3a, 0xa1,
- 0x11, 0x11, 0x1a, 0x70, 0x05, 0xbd, 0xdd, 0xdd,
- 0xdb, 0x5b, 0xdd, 0xb0, 0x00, 0x60, 0x2e, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe6, 0x88,
- 0x66, 0x32, 0x22, 0x22, 0x22, 0x36, 0x66, 0x11,
- 0x33, 0x33, 0x3a, 0xaa, 0x11, 0xaa, 0xaa, 0xa1,
- 0x11, 0x1a, 0x3a, 0x60, 0x02, 0x99, 0xbb, 0xb9,
- 0x9b, 0xbb, 0xbc, 0x22, 0x00, 0x86, 0x5e, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe1, 0x68,
- 0x86, 0x63, 0x22, 0x22, 0x22, 0x2a, 0x66, 0x66,
- 0x33, 0x33, 0xaa, 0xaa, 0x1a, 0xaa, 0xaa, 0x11,
- 0x1a, 0xa7, 0x68, 0x80, 0x02, 0x2b, 0xbd, 0xbb,
- 0xbb, 0xb9, 0x22, 0x22, 0x00, 0x06, 0x6e, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc7, 0xa6,
- 0x88, 0x86, 0x32, 0x22, 0x22, 0x27, 0xa6, 0x66,
- 0x33, 0x3a, 0xaa, 0xa1, 0xaa, 0xaa, 0xa1, 0x11,
- 0xa3, 0xa6, 0x88, 0x80, 0x02, 0x22, 0x9b, 0xbb,
- 0xbb, 0x22, 0x24, 0xf4, 0x60, 0x00, 0x0c, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc2, 0x21,
- 0x68, 0x88, 0x63, 0x22, 0x22, 0x22, 0x71, 0x66,
- 0x33, 0x3a, 0x11, 0x11, 0xaa, 0xaa, 0x11, 0xaa,
- 0x71, 0x88, 0x88, 0x00, 0x02, 0xe2, 0x26, 0x99,
- 0x22, 0x22, 0x4f, 0xf4, 0x40, 0x00, 0x0c, 0xcc,
- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x22, 0x22,
- 0x16, 0x88, 0x86, 0xa2, 0x22, 0x22, 0x27, 0x11,
- 0x33, 0xa1, 0x11, 0x11, 0xaa, 0x31, 0x1a, 0xa3,
- 0x68, 0x88, 0x81, 0x00, 0x54, 0x42, 0x22, 0x22,
- 0x22, 0x44, 0xff, 0xff, 0x48, 0x00, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x22, 0x22,
- 0x21, 0x88, 0x88, 0x6a, 0x22, 0x22, 0x22, 0x31,
- 0x3a, 0xa1, 0x11, 0x1a, 0xa3, 0x11, 0x33, 0x36,
- 0x88, 0x86, 0x30, 0x00, 0x4f, 0x44, 0x22, 0x22,
- 0x24, 0xff, 0xff, 0xff, 0x44, 0x00, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x95, 0x22, 0x72,
- 0x22, 0x18, 0x88, 0x86, 0x32, 0x22, 0x22, 0x27,
- 0xaa, 0x11, 0x11, 0x1a, 0x31, 0x13, 0x33, 0x68,
- 0x88, 0x6a, 0x00, 0x02, 0x4f, 0x4f, 0x42, 0x24,
- 0x4f, 0xff, 0xff, 0xff, 0xf4, 0x50, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x22, 0x73,
- 0x72, 0x26, 0x88, 0x88, 0x63, 0x22, 0x22, 0x22,
- 0x11, 0x11, 0x11, 0xa3, 0xa1, 0x73, 0xa6, 0x88,
- 0x81, 0xa5, 0x00, 0x04, 0x4f, 0x4f, 0x44, 0x4f,
- 0xff, 0xff, 0xff, 0xff, 0xf4, 0x40, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x12, 0x27,
- 0xaa, 0x22, 0x68, 0x55, 0x86, 0x72, 0x22, 0x22,
- 0x11, 0x11, 0x1a, 0x33, 0x13, 0x3a, 0x18, 0x88,
- 0x1a, 0x10, 0x00, 0x44, 0x4f, 0x4f, 0xff, 0x4f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x61, 0x22,
- 0x3a, 0xa2, 0x26, 0x85, 0x58, 0x67, 0x22, 0x22,
- 0x61, 0x61, 0x1a, 0x7a, 0x37, 0x31, 0x88, 0x81,
- 0x11, 0x00, 0x05, 0xe4, 0x44, 0xff, 0xff, 0xff,
- 0x4f, 0xf4, 0x44, 0xff, 0xff, 0xf5, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x88, 0x12,
- 0x2a, 0xaa, 0x72, 0x68, 0x55, 0x81, 0x22, 0x22,
- 0x66, 0x61, 0xa3, 0x33, 0x73, 0x16, 0x88, 0x11,
- 0x10, 0x00, 0x08, 0x74, 0x44, 0x4f, 0x44, 0x44,
- 0xf4, 0xf4, 0x44, 0x44, 0xe2, 0x44, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x88, 0x81,
- 0x22, 0xaa, 0xa7, 0x26, 0x85, 0x88, 0x12, 0x22,
- 0x66, 0x61, 0x37, 0xa7, 0x3a, 0x66, 0x66, 0x11,
- 0x80, 0x00, 0x0a, 0x72, 0x44, 0x4f, 0x44, 0x4f,
- 0xff, 0x44, 0x44, 0x22, 0x22, 0x24, 0x00, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x85, 0x88,
- 0x12, 0x2a, 0xaa, 0x22, 0x68, 0x58, 0x63, 0x22,
- 0x66, 0x1a, 0x73, 0x77, 0x31, 0x66, 0x61, 0x11,
- 0x00, 0x00, 0x07, 0x44, 0xff, 0x4f, 0xf4, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0x42, 0x22, 0x40, 0x9b,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x85, 0x55,
- 0x81, 0x27, 0xaa, 0xa2, 0x78, 0x88, 0x86, 0x72,
- 0x66, 0x13, 0x77, 0x73, 0x11, 0x66, 0x61, 0x76,
- 0x00, 0x50, 0x84, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x42, 0x40, 0x9b,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x68, 0x55,
- 0x58, 0x12, 0x3a, 0xaa, 0x23, 0x88, 0x88, 0xa7,
- 0x66, 0xa7, 0x77, 0x7a, 0x16, 0x66, 0x1a, 0x15,
- 0x05, 0x00, 0x4f, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0x24, 0x9b,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x26, 0x55,
- 0x55, 0x81, 0x23, 0xaa, 0x32, 0x18, 0x88, 0x6a,
- 0x61, 0x37, 0x77, 0x31, 0x66, 0x66, 0x17, 0x60,
- 0x05, 0x08, 0x4f, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x4e, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0xa2, 0x65,
- 0x55, 0x58, 0xa2, 0x7a, 0xa2, 0x26, 0x88, 0x61,
- 0x61, 0x32, 0x27, 0xa1, 0x66, 0x61, 0x31, 0x60,
- 0x00, 0x04, 0x4f, 0xf4, 0xff, 0x44, 0x44, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0xf4, 0x99,
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x9b, 0xaa, 0x26,
- 0x55, 0x55, 0x87, 0x27, 0x33, 0x27, 0x68, 0x61,
- 0x1a, 0x72, 0x27, 0xa6, 0x66, 0x6a, 0x71, 0x00,
- 0x80, 0x84, 0xff, 0xf4, 0xff, 0x44, 0x44, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0xf4, 0x99,
- 0x9b, 0x9b, 0x99, 0xb9, 0xb9, 0x99, 0xaa, 0xa2,
- 0x85, 0x55, 0x56, 0x22, 0x27, 0x22, 0x36, 0x66,
- 0x13, 0x22, 0x23, 0x16, 0x86, 0x63, 0x73, 0x00,
- 0x00, 0x44, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0xff,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x4f, 0x99,
- 0x9b, 0x99, 0x99, 0x99, 0xb9, 0x99, 0xaa, 0xaa,
- 0x28, 0x55, 0x58, 0x12, 0x22, 0x22, 0x21, 0x11,
- 0xa3, 0x27, 0x7a, 0x66, 0x86, 0x17, 0x75, 0x05,
- 0x05, 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0xff,
- 0xff, 0x4f, 0x44, 0x4f, 0x4f, 0x44, 0x4f, 0x99,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x3a, 0xaa,
- 0xa2, 0x85, 0x58, 0x67, 0x72, 0x22, 0x27, 0xa1,
- 0x37, 0x27, 0x7a, 0x68, 0x86, 0xa2, 0x70, 0x00,
- 0x02, 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0xf4, 0x99,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x23, 0xaa,
- 0xa7, 0x78, 0x88, 0x81, 0x77, 0x22, 0x27, 0x3a,
- 0x72, 0x73, 0x71, 0x68, 0x66, 0x32, 0x50, 0x00,
- 0x04, 0x4f, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0x44, 0x95,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x55, 0x12, 0x3a,
- 0xaa, 0x21, 0x88, 0x81, 0x77, 0x27, 0x73, 0x73,
- 0x72, 0x33, 0x36, 0x86, 0x61, 0x72, 0x00, 0x00,
- 0x04, 0x44, 0xf4, 0xf4, 0xf4, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x44, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x8a, 0x27,
- 0xaa, 0x77, 0x68, 0x61, 0x23, 0x71, 0x11, 0x3a,
- 0x27, 0xa3, 0x36, 0x86, 0x61, 0x20, 0x00, 0x00,
- 0x04, 0xf4, 0xf4, 0xf4, 0xf4, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x41, 0x59,
- 0x99, 0x99, 0x99, 0x99, 0x99, 0x95, 0x58, 0x77,
- 0x27, 0x32, 0x36, 0x63, 0x23, 0x71, 0x66, 0x11,
- 0x27, 0x13, 0xa6, 0x86, 0x6a, 0x20, 0x00, 0x50,
- 0x04, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x41, 0x99,
- 0x9b, 0xbb, 0xbb, 0xbb, 0xb9, 0x99, 0x68, 0x13,
- 0x32, 0x22, 0x73, 0xa7, 0x2a, 0x31, 0x88, 0x66,
- 0x7a, 0x13, 0x18, 0x66, 0x63, 0x20, 0x00, 0x06,
- 0x0f, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x49, 0x95,
- 0xa9, 0xa9, 0x99, 0x97, 0x92, 0x99, 0x65, 0x6a,
- 0x17, 0x22, 0x23, 0x72, 0x27, 0xaa, 0x88, 0x88,
- 0xa1, 0x17, 0x68, 0x66, 0x67, 0x70, 0x00, 0x05,
- 0x0f, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0xf4, 0xf4, 0x49, 0x9c,
- 0x2e, 0xee, 0xee, 0xee, 0xee, 0xa9, 0x65, 0x8a,
- 0x1a, 0xaa, 0x37, 0x72, 0x27, 0x37, 0x88, 0x88,
- 0x11, 0x17, 0x68, 0x66, 0x67, 0x10, 0x9d, 0xd0,
- 0x84, 0x44, 0xff, 0x4f, 0x4f, 0x44, 0xf4, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0xf4, 0xf4, 0x4f, 0x69,
- 0xcc, 0xee, 0xee, 0xee, 0xec, 0x99, 0x88, 0x63,
- 0x61, 0x68, 0x61, 0x72, 0x22, 0x7a, 0x68, 0x88,
- 0x11, 0x17, 0x88, 0x66, 0x12, 0x1b, 0xdd, 0xdd,
- 0x02, 0x44, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xff, 0xff, 0x4f, 0x4c, 0xc5,
- 0x0c, 0xc1, 0x11, 0x1c, 0xc0, 0x26, 0x66, 0x17,
- 0x66, 0x88, 0x88, 0x12, 0x22, 0x23, 0xa8, 0x88,
- 0x11, 0x13, 0x88, 0x66, 0x17, 0xbb, 0xdd, 0xdd,
- 0xd0, 0x8f, 0xff, 0xf4, 0xf4, 0x44, 0xf4, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0x4f, 0x44, 0xdd, 0xdd,
- 0x00, 0x00, 0x00, 0x05, 0x9d, 0x21, 0x66, 0x27,
- 0xa6, 0x65, 0x58, 0x67, 0x22, 0x27, 0x28, 0x88,
- 0x11, 0xaa, 0x86, 0x68, 0x1a, 0xbb, 0xdd, 0xdd,
- 0xdb, 0x05, 0xf4, 0xf4, 0xf4, 0xf4, 0x44, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0xdd, 0xdb,
- 0x00, 0x00, 0x00, 0x00, 0xdd, 0xda, 0x66, 0x22,
- 0x71, 0x15, 0x55, 0x81, 0x22, 0x22, 0x76, 0x88,
- 0x11, 0x31, 0x88, 0x88, 0xab, 0xbd, 0xdd, 0xdd,
- 0xdd, 0x00, 0x04, 0x44, 0xff, 0xff, 0x4f, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0x44, 0xdd, 0xdb,
- 0x00, 0x00, 0x00, 0x0b, 0xdd, 0xda, 0x11, 0x22,
- 0x23, 0x68, 0x55, 0x86, 0x22, 0x22, 0x7a, 0x88,
- 0x1a, 0x71, 0x88, 0x89, 0xbb, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xd0, 0x00, 0x4f, 0x44, 0xff, 0x4f, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0xff, 0xe2, 0xdd, 0xdb,
- 0x90, 0x00, 0x05, 0xbd, 0xdd, 0xb8, 0x63, 0x22,
- 0x27, 0xa6, 0x55, 0x88, 0x77, 0x22, 0x22, 0x88,
- 0x1a, 0x28, 0xbd, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdb, 0x00, 0x07, 0x44, 0x4f, 0x4f, 0x4f,
- 0xff, 0x4f, 0x44, 0x4f, 0x4f, 0x22, 0xdd, 0xdb,
- 0xbb, 0x9b, 0xbb, 0xbd, 0xdd, 0xd5, 0x86, 0x22,
- 0x22, 0x77, 0x85, 0x88, 0x17, 0x22, 0x22, 0x88,
- 0xaa, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0x00, 0x00, 0x54, 0x4f, 0x4f, 0x4f,
- 0xff, 0x4f, 0x44, 0xf4, 0x44, 0x22, 0xbd, 0xdd,
- 0xbb, 0xbb, 0xbb, 0xdd, 0xdd, 0xdd, 0x88, 0x72,
- 0x27, 0x22, 0x88, 0x88, 0x67, 0x72, 0x22, 0x18,
- 0x33, 0x2d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xd0, 0x00, 0x05, 0x4f, 0x4f, 0x4f,
- 0xff, 0x4f, 0x44, 0x44, 0x4f, 0x22, 0xbd, 0xdd,
- 0xdb, 0xbb, 0xdd, 0xdd, 0xdd, 0xdd, 0x88, 0x17,
- 0x27, 0x72, 0x68, 0x88, 0x87, 0x32, 0x22, 0x36,
- 0x37, 0x2d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xd5, 0x00, 0x00, 0x4f, 0x4f, 0x4f,
- 0xff, 0xf4, 0xf4, 0xf4, 0xf4, 0x22, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x67,
- 0x72, 0x77, 0x38, 0x88, 0x83, 0x37, 0x22, 0x26,
- 0x72, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0x00, 0x00, 0x4f, 0x4f, 0x4f,
- 0xff, 0xf4, 0xf4, 0xf4, 0x44, 0x25, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd3,
- 0x32, 0x73, 0x76, 0x88, 0x81, 0x33, 0x22, 0x2a,
- 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xb0, 0x54, 0x4f, 0x4f, 0x4f,
- 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x00, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xa7, 0x73, 0x26, 0x88, 0x86, 0x7a, 0x72, 0x27,
- 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdb, 0x44, 0xff, 0x4f, 0x4f,
- 0xff, 0xf4, 0xf4, 0x44, 0x40, 0x05, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0x13, 0x23, 0x21, 0x68, 0x86, 0x17, 0x72, 0x22,
- 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdb, 0x44, 0x4f, 0x4f, 0x4f,
- 0xff, 0xff, 0x44, 0x42, 0x00, 0x05, 0xbd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0x87, 0x27, 0x27, 0x16, 0x66, 0x67, 0x22, 0x22,
- 0x72, 0x7b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0x94, 0x44, 0x44, 0x44,
- 0x44, 0x44, 0x44, 0x00, 0x00, 0x05, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xb8,
- 0x86, 0x22, 0x22, 0x7a, 0x68, 0x81, 0x22, 0x22,
- 0x37, 0x7b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdb, 0xb5, 0x44, 0x44, 0x44,
- 0x44, 0x47, 0x00, 0x00, 0x00, 0x05, 0xbd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x68,
- 0x58, 0x72, 0x22, 0x27, 0x18, 0x86, 0x72, 0x22,
- 0x1a, 0xbb, 0xbd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdb, 0xb5, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xb9, 0x18, 0x85,
- 0x58, 0x12, 0x22, 0x36, 0x18, 0x88, 0x32, 0x22,
- 0x61, 0x3b, 0xbb, 0xbb, 0xbd, 0xdd, 0xdd, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdb, 0xb9, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xbb, 0xdd,
- 0xdd, 0xdd, 0xdd, 0xdd, 0xb9, 0x7a, 0x68, 0x85,
- 0x88, 0x62, 0x27, 0x16, 0x18, 0x88, 0x12, 0x27,
- 0x86, 0x18, 0x9b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd,
- 0xdd, 0xdd, 0xdd, 0xbb, 0xb5, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xbb, 0xbd,
- 0xdd, 0xdd, 0xdb, 0xbb, 0x87, 0x31, 0x68, 0x65,
- 0x88, 0x82, 0x23, 0x16, 0x18, 0x88, 0x12, 0x23,
- 0x88, 0x67, 0x27, 0xa8, 0x9b, 0xbb, 0xbb, 0xbb,
- 0xbd, 0xdd, 0xbb, 0xbb, 0x95, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x9b, 0xbb,
- 0xbb, 0xbb, 0xbb, 0x96, 0x87, 0x16, 0x68, 0x18,
- 0x88, 0x62, 0x31, 0x66, 0x18, 0x88, 0x62, 0x73,
- 0x88, 0x63, 0x27, 0x33, 0x65, 0x55, 0x99, 0x9b,
- 0xbb, 0xbb, 0xbb, 0x99, 0x55, 0x0a, 0xa1, 0x86,
- 0x81, 0x68, 0x88, 0x55, 0x58, 0x85, 0x9b, 0xbb,
- 0xbb, 0xbb, 0x95, 0x88, 0x83, 0x66, 0x66, 0x18,
- 0x66, 0x82, 0xa1, 0x66, 0x18, 0x88, 0x62, 0x33,
- 0x88, 0x81, 0x27, 0x7a, 0x18, 0x58, 0x86, 0x85,
- 0x99, 0x99, 0x99, 0x95, 0x53, 0x2a, 0xaa, 0x88,
- 0x67, 0x31, 0x68, 0x55, 0x58, 0x85, 0x59, 0xbb,
- 0xbb, 0xb9, 0x58, 0x68, 0x83, 0x66, 0x61, 0x16,
- 0x66, 0x62, 0x16, 0x66, 0x68, 0x88, 0x62, 0xaa,
- 0x88, 0x86, 0x27, 0x77, 0x78, 0x55, 0x88, 0x22,
- 0x25, 0x55, 0x95, 0x55, 0x6a, 0xa2, 0x2a, 0x88,
- 0x62, 0x27, 0x37, 0x38, 0x88, 0x87, 0x55, 0x59,
- 0x95, 0x58, 0x16, 0x88, 0x8a, 0x66, 0x63, 0x68,
- 0x86, 0x67, 0x66, 0x66, 0x68, 0x88, 0x12, 0x11,
- 0x88, 0x88, 0x72, 0x77, 0x78, 0x85, 0x58, 0x17,
- 0x23, 0x32, 0x55, 0x55, 0x81, 0x13, 0x73, 0x66,
- 0x62, 0x7a, 0xaa, 0x38, 0x88, 0x58, 0x27, 0x55,
- 0x58, 0x32, 0x38, 0x88, 0x81, 0x66, 0xa2, 0x88,
- 0x86, 0x61, 0x66, 0x61, 0x66, 0x68, 0x13, 0x11,
- 0x88, 0x88, 0x12, 0x22, 0x71, 0x85, 0x58, 0x62,
- 0x23, 0xa2, 0x68, 0x88, 0x81, 0x66, 0x88, 0x88,
- 0x63, 0x2a, 0xaa, 0x28, 0x88, 0x55, 0x86, 0x61,
- 0x66, 0x66, 0x68, 0x88, 0x66, 0x66, 0x77, 0x88,
- 0x68, 0x16, 0x66, 0x62, 0x66, 0x68, 0xa1, 0x61,
- 0x88, 0x88, 0x62, 0x22, 0x22, 0x85, 0x55, 0x83,
- 0x72, 0x37, 0xa8, 0x88, 0x61, 0x66, 0x85, 0x55,
- 0x86, 0x23, 0xaa, 0x71, 0x88, 0x85, 0x88, 0x66,
- 0x88, 0x86, 0x88, 0x88, 0x16, 0x61, 0x21, 0x88,
- 0x66, 0xa6, 0x86, 0x17, 0x66, 0x66, 0x31, 0x61,
- 0x88, 0x88, 0x87, 0x72, 0x22, 0x68, 0x55, 0x86,
- 0x77, 0x77, 0x36, 0x88, 0x13, 0x68, 0x85, 0x55,
- 0x58, 0x12, 0x73, 0x72, 0x76, 0x88, 0x88, 0x68,
- 0x88, 0x88, 0x88, 0x66, 0x36, 0x63, 0x26, 0x86,
- 0x86, 0x36, 0x86, 0x11, 0x66, 0x66, 0x76, 0x61,
- 0x88, 0x88, 0x81, 0x22, 0x22, 0x38, 0x85, 0x58,
- 0x37, 0x22, 0x21, 0x68, 0xa2, 0x31, 0x68, 0x55,
- 0x55, 0x81, 0x22, 0x22, 0xa8, 0x88, 0x88, 0x68,
- 0x86, 0x88, 0x68, 0x81, 0x36, 0x17, 0x21, 0x68,
- 0x86, 0x16, 0x66, 0x26, 0x66, 0x61, 0x36, 0x66,
- 0x68, 0x88, 0x86, 0x27, 0x22, 0x28, 0x88, 0x88,
- 0x17, 0x72, 0x2a, 0x66, 0xa2, 0x22, 0x36, 0x55,
- 0x55, 0x58, 0x37, 0x3a, 0x16, 0x66, 0x66, 0x66,
- 0x66, 0x18, 0x88, 0x67, 0x16, 0x12, 0x71, 0x68,
- 0x81, 0x68, 0x61, 0x76, 0x66, 0x6a, 0x16, 0x66,
- 0x88, 0x88, 0x86, 0x77, 0x22, 0x26, 0x88, 0x88,
- 0x13, 0x37, 0x71, 0x66, 0xa2, 0x33, 0x2a, 0x85,
- 0x55, 0x55, 0x17, 0x73, 0x16, 0x66, 0x66, 0x68,
- 0x63, 0x88, 0x88, 0xa2, 0x66, 0xa2, 0xa6, 0x88,
- 0x61, 0x68, 0x6a, 0x76, 0x66, 0x6a, 0x66, 0x6a
-};
-
-/* Painted by Johnny Stenback <jst@uwasa.fi> */
-
-unsigned char *linux_serial_image __initdata = "\n"
-" .u$e.\n"
-" .$$$$$:S\n"
-" $\"*$/\"*$$\n"
-" $.`$ . ^F\n"
-" 4k+#+T.$F\n"
-" 4P+++\"$\"$\n"
-" :R\"+ t$$B\n"
-" ___# $$$\n"
-" | | R$$k\n"
-" dd. | Linux $!$\n"
-" ddd | PPC $9$F\n"
-" '!!!!!$ !!#!`\n"
-" !!!!!* .!!!!!`\n"
-"'!!!!!!!W..e$$!!!!!!` %s\n"
-" \"~^^~ ^~~^\n"
-"\n";
+#define INCLUDE_LINUX_LOGOBW
+#define INCLUDE_LINUX_LOGO16
+#include <linux/linux_logo.h>
#else
@@ -1469,8 +37,5 @@ extern unsigned char linux_logo16_red[];
extern unsigned char linux_logo16_green[];
extern unsigned char linux_logo16_blue[];
extern unsigned char linux_logo16[];
-extern unsigned char *linux_serial_image;
-
-extern int (*console_show_logo)(void);
#endif
diff --git a/include/asm-ppc/machdep.h b/include/asm-ppc/machdep.h
new file mode 100644
index 000000000..65d53cb38
--- /dev/null
+++ b/include/asm-ppc/machdep.h
@@ -0,0 +1,12 @@
+#ifndef _PPC_MACHDEP_H
+#define _PPC_MACHDEP_H
+
+#include <linux/config.h>
+
+#ifdef CONFIG_APUS
+#include <asm-m68k/machdep.h>
+#endif
+
+#endif /* _PPC_MACHDEP_H */
+
+
diff --git a/include/asm-ppc/page.h b/include/asm-ppc/page.h
index 0eaf390aa..77fe08f4a 100644
--- a/include/asm-ppc/page.h
+++ b/include/asm-ppc/page.h
@@ -80,8 +80,7 @@ typedef unsigned long pgprot_t;
#define MAP_NR(addr) (((unsigned long)addr-PAGE_OFFSET) >> PAGE_SHIFT)
#define MAP_PAGE_RESERVED (1<<15)
-extern unsigned long get_prezerod_page(void);
-
+extern unsigned long get_zero_page_fast(void);
#endif /* __KERNEL__ */
#endif /* __ASSEMBLY__ */
#endif /* _PPC_PAGE_H */
diff --git a/include/asm-ppc/pgtable.h b/include/asm-ppc/pgtable.h
index d4111172b..96ccf6544 100644
--- a/include/asm-ppc/pgtable.h
+++ b/include/asm-ppc/pgtable.h
@@ -7,6 +7,7 @@
#include <linux/mm.h>
#include <asm/processor.h> /* For TASK_SIZE */
#include <asm/mmu.h>
+#include <asm/page.h>
extern void local_flush_tlb_all(void);
extern void local_flush_tlb_mm(struct mm_struct *mm);
@@ -14,17 +15,10 @@ extern void local_flush_tlb_page(struct vm_area_struct *vma, unsigned long vmadd
extern void local_flush_tlb_range(struct mm_struct *mm, unsigned long start,
unsigned long end);
-#ifndef __SMP__
-#define flush_tlb_all local_flush_tlb_all
-#define flush_tlb_mm local_flush_tlb_mm
-#define flush_tlb_page local_flush_tlb_page
-#define flush_tlb_range local_flush_tlb_range
-#else /* __SMP__ */
#define flush_tlb_all local_flush_tlb_all
#define flush_tlb_mm local_flush_tlb_mm
#define flush_tlb_page local_flush_tlb_page
#define flush_tlb_range local_flush_tlb_range
-#endif /* __SMP__ */
/*
* No cache flushing is required when address mappings are
@@ -64,7 +58,7 @@ extern pte_t *va_to_pte(struct task_struct *tsk, unsigned long address);
* additional page protection (when Mx_CTR.PPCS = 1) that allows TLB hit
* based upon user/super access. The TLB does not have accessed nor write
* protect. We assume that if the TLB get loaded with an entry it is
- * accessed, and overload the the changed bit for write protect. We use
+ * accessed, and overload the changed bit for write protect. We use
* two bits in the software pte that are supposed to be set to zero in
* the TLB entry (24 and 25) for these indicators. Although the level 1
* descriptor contains the guarded and writethrough/copyback bits, we can
@@ -110,6 +104,7 @@ extern pte_t *va_to_pte(struct task_struct *tsk, unsigned long address);
#define VMALLOC_OFFSET (0x4000000) /* 64M */
#define VMALLOC_START ((((long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)))
#define VMALLOC_VMADDR(x) ((unsigned long)(x))
+#define VMALLOC_END 0xf0000000
/*
* Bits in a linux-style PTE. These match the bits in the
@@ -370,36 +365,61 @@ extern inline pte_t * pte_offset(pmd_t * dir, unsigned long address)
/*
- * Allocate and free page tables. The xxx_kernel() versions are
- * used to allocate a kernel page table, but are actually identical
- * to the xxx() versions.
+ * This is handled very differently on the PPC since out page tables
+ * are all 0's and I want to be able to use these zero'd pages elsewhere
+ * as well - it gives us quite a speedup.
+ *
+ * Note that the SMP/UP versions are the same since we don't need a
+ * per cpu list of zero pages since we do the zero-ing with the cache
+ * off and the access routines are lock-free but the pgt cache stuff
+ * _IS_ per-cpu since it isn't done with any lock-free access routines
+ * (although I think we need arch-specific routines so I can do lock-free).
+ *
+ * I need to generalize this so we can use it for other arch's as well.
+ * -- Cort
*/
-#ifdef __SMP__
-/* Sliiiicck */
-#define pgd_quicklist (cpu_data[smp_processor_id()].pgd_quick)
-#define pmd_quicklist ((unsigned long *)0)
-#define pte_quicklist (cpu_data[smp_processor_id()].pte_quick)
-#define pgtable_cache_size (cpu_data[smp_processor_id()].pgtable_cache_sz)
-#else
extern struct pgtable_cache_struct {
unsigned long *pgd_cache;
unsigned long *pte_cache;
unsigned long pgtable_cache_sz;
+ unsigned long *zero_cache; /* head linked list of pre-zero'd pages */
+ unsigned long zero_sz; /* # currently pre-zero'd pages */
+ unsigned long zeropage_hits; /* # zero'd pages request that we've done */
+ unsigned long zeropage_calls; /* # zero'd pages request that've been made */
+ unsigned long zerototal; /* # pages zero'd over time */
} quicklists;
+
+#ifdef __SMP__
+/*#warning Tell Cort to do the pgt cache for SMP*/
#define pgd_quicklist (quicklists.pgd_cache)
#define pmd_quicklist ((unsigned long *)0)
#define pte_quicklist (quicklists.pte_cache)
#define pgtable_cache_size (quicklists.pgtable_cache_sz)
-#endif
+#else /* __SMP__ */
+#define pgd_quicklist (quicklists.pgd_cache)
+#define pmd_quicklist ((unsigned long *)0)
+#define pte_quicklist (quicklists.pte_cache)
+#define pgtable_cache_size (quicklists.pgtable_cache_sz)
+#endif /* __SMP__ */
+#define zero_quicklist (quicklists.zero_cache)
+#define zero_cache_sz (quicklists.zero_sz)
+
+/* return a pre-zero'd page from the list, return NULL if none available -- Cort */
+extern unsigned long get_zero_page_fast(void);
extern __inline__ pgd_t *get_pgd_slow(void)
{
- pgd_t *ret = (pgd_t *)__get_free_page(GFP_KERNEL), *init;
+ pgd_t *ret/* = (pgd_t *)__get_free_page(GFP_KERNEL)*/, *init;
+ if ( (ret = (pgd_t *)get_zero_page_fast()) == NULL )
+ {
+ ret = (pgd_t *)__get_free_page(GFP_KERNEL);
+ memset (ret, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
+ }
if (ret) {
init = pgd_offset(&init_mm, 0);
- memset (ret, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
+ /*memset (ret, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));*/
memcpy (ret + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD,
(PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
}
@@ -441,7 +461,7 @@ extern __inline__ pte_t *get_pte_fast(void)
pte_quicklist = (unsigned long *)(*ret);
ret[0] = ret[1];
pgtable_cache_size--;
- }
+ }
return (pte_t *)ret;
}
@@ -513,6 +533,8 @@ extern inline pmd_t * pmd_alloc(pgd_t * pgd, unsigned long address)
#define pmd_alloc_kernel pmd_alloc
#define pte_alloc_kernel pte_alloc
+extern int do_check_pgt_cache(int, int);
+
extern inline void set_pgdir(unsigned long address, pgd_t entry)
{
struct task_struct * p;
@@ -588,7 +610,31 @@ extern void flush_hash_page(unsigned context, unsigned long va);
#define module_map vmalloc
#define module_unmap vfree
-#define module_shrink vshrink
+
+/* CONFIG_APUS */
+/* For virtual address to physical address conversion */
+extern void cache_clear(__u32 addr, int length);
+extern void cache_push(__u32 addr, int length);
+extern int mm_end_of_chunk (unsigned long addr, int len);
+extern unsigned long iopa(unsigned long addr);
+extern unsigned long mm_ptov(unsigned long addr) __attribute__ ((const));
+#define VTOP(addr) (iopa((unsigned long)(addr)))
+#define PTOV(addr) (mm_ptov((unsigned long)(addr)))
+
+/* Values for nocacheflag and cmode */
+/* These are not used by the APUS kernel_map, but prevents
+ compilation errors. */
+#define KERNELMAP_FULL_CACHING 0
+#define KERNELMAP_NOCACHE_SER 1
+#define KERNELMAP_NOCACHE_NONSER 2
+#define KERNELMAP_NO_COPYBACK 3
+
+/*
+ * Map some physical address range into the kernel address space.
+ */
+extern unsigned long kernel_map(unsigned long paddr, unsigned long size,
+ int nocacheflag, unsigned long *memavailp );
+
/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
#define PageSkip(page) (0)
diff --git a/include/asm-ppc/pmu.h b/include/asm-ppc/pmu.h
index 2a2fb1b61..672aeed2e 100644
--- a/include/asm-ppc/pmu.h
+++ b/include/asm-ppc/pmu.h
@@ -16,12 +16,18 @@
#define PMU_READ_NVRAM 0x3b /* read non-volatile RAM */
#define PMU_SET_RTC 0x30 /* set real-time clock */
#define PMU_READ_RTC 0x38 /* read real-time clock */
+#define PMU_SET_VOLBUTTON 0x40 /* set volume up/down position */
#define PMU_BACKLIGHT_BRIGHT 0x41 /* set backlight brightness */
+#define PMU_GET_VOLBUTTON 0x48 /* get volume up/down position */
+#define PMU_PCEJECT 0x4c /* eject PC-card from slot */
+#define PMU_BATTERY_STATE 0x6b /* report battery state etc. */
#define PMU_SET_INTR_MASK 0x70 /* set PMU interrupt mask */
#define PMU_INT_ACK 0x78 /* read interrupt bits */
#define PMU_SHUTDOWN 0x7e /* turn power off */
#define PMU_SLEEP 0x7f /* put CPU to sleep */
#define PMU_RESET 0xd0 /* reset CPU */
+#define PMU_GET_BRIGHTBUTTON 0xd9 /* report brightness up/down pos */
+#define PMU_GET_COVER 0xdc /* report cover open/closed */
/* Bits in PMU interrupt and interrupt mask bytes */
#define PMU_INT_ADB_AUTO 0x04 /* ADB autopoll, when PMU_INT_ADB */
@@ -30,7 +36,16 @@
#define PMU_INT_ADB 0x10 /* ADB autopoll or reply data */
#define PMU_INT_TICK 0x80 /* 1-second tick interrupt */
+
+/*
+ * Ioctl commands for the /dev/pmu device
+ */
+#include <linux/ioctl.h>
+
+#define PMU_IOC_SLEEP _IO('B', 0)
+
#ifdef __KERNEL__
+void find_via_pmu(void);
void via_pmu_init(void);
int pmu_request(struct adb_request *req,
void (*done)(struct adb_request *), int nbytes, ...);
@@ -39,4 +54,15 @@ void pmu_poll(void);
void pmu_enable_backlight(int on);
+/*
+ * Stuff for putting the powerbook to sleep and waking it again.
+ */
+#include <linux/notifier.h>
+
+extern struct notifier_block *sleep_notifier_list;
+
+/* code values for calling sleep/wakeup handlers */
+#define PBOOK_SLEEP 1
+#define PBOOK_WAKE 2
+
#endif /* __KERNEL */
diff --git a/include/asm-ppc/posix_types.h b/include/asm-ppc/posix_types.h
index e659279ff..479a9e8e8 100644
--- a/include/asm-ppc/posix_types.h
+++ b/include/asm-ppc/posix_types.h
@@ -43,6 +43,7 @@ typedef struct {
#else /* __GNUC__ */
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
/* With GNU C, use inline functions instead so args are evaluated only once: */
#undef __FD_SET
@@ -95,6 +96,6 @@ static __inline__ void __FD_ZERO(__kernel_fd_set *p)
}
}
+#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
#endif /* __GNUC__ */
-
#endif /* _PPC_POSIX_TYPES_H */
diff --git a/include/asm-ppc/processor.h b/include/asm-ppc/processor.h
index 130b5c8b0..cfa71b568 100644
--- a/include/asm-ppc/processor.h
+++ b/include/asm-ppc/processor.h
@@ -71,6 +71,10 @@
#define _PREP_IBM 0x00 /* ibm prep */
#define _PREP_Bull 0x03 /* bull prep */
+/* these are arbitrary */
+#define _CHRP_Motorola 0x04 /* motorola chrp, the cobra */
+#define _CHRP_IBM 0x05 /* IBM chrp, the longtrail and longtrail 2 */
+
#define _GLOBAL(n)\
.globl n;\
n:
@@ -192,6 +196,8 @@ n:
#ifdef CONFIG_APUS
#define _machine (_MACH_apus)
#define is_prep (0)
+#define is_chrp (0)
+#define have_of (0)
#endif /* CONFIG_APUS */
#else /* CONFIG_MACH_SPECIFIC */
@@ -223,6 +229,9 @@ void release_thread(struct task_struct *);
#define MCA_bus 0
#define MCA_bus__is_a_macro /* for versions in ksyms.c */
+/* Lazy FPU handling on uni-processor */
+extern struct task_struct *last_task_used_math;
+
/*
* this is the minimum allowable io space due to the location
* of the io areas on prep (first one at 0x80000000) but
@@ -234,12 +243,7 @@ void release_thread(struct task_struct *);
/* This decides where the kernel will search for a free chunk of vm
* space during mmap's.
*/
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 8 * 3)
-
-#define COPY_TASK_STRUCT(dst, src) \
-do { \
- *dst = *src; \
-} while (0)
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 8 * 3)
typedef struct {
unsigned long seg;
@@ -285,6 +289,9 @@ static inline unsigned long thread_saved_pc(struct thread_struct *t)
return (t->regs) ? t->regs->nip : 0;
}
+#define copy_segments(nr, tsk, mm) do { } while (0)
+#define release_segments(mm) do { } while (0)
+
/*
* NOTE! The task struct and the stack go together
*/
diff --git a/include/asm-ppc/residual.h b/include/asm-ppc/residual.h
index 428dd22f7..c037a4e4a 100644
--- a/include/asm-ppc/residual.h
+++ b/include/asm-ppc/residual.h
@@ -314,8 +314,19 @@ typedef struct _RESIDUAL {
} RESIDUAL;
-extern RESIDUAL res;
-void print_residual_device_info(void);
+extern RESIDUAL *res;
+extern void print_residual_device_info(void);
+extern PPC_DEVICE *residual_find_device(unsigned long BusMask,
+ unsigned char * DevID, int BaseType,
+ int SubType, int Interface, int n);
+extern PnP_TAG_PACKET *PnP_find_packet(unsigned char *p, unsigned packet_tag,
+ int n);
+extern PnP_TAG_PACKET *PnP_find_small_vendor_packet(unsigned char *p,
+ unsigned packet_type,
+ int n);
+extern PnP_TAG_PACKET *PnP_find_large_vendor_packet(unsigned char *p,
+ unsigned packet_type,
+ int n);
#endif /* __ASSEMBLY__ */
#endif /* ndef _RESIDUAL_ */
diff --git a/include/asm-ppc/serial.h b/include/asm-ppc/serial.h
new file mode 100644
index 000000000..ff42aa817
--- /dev/null
+++ b/include/asm-ppc/serial.h
@@ -0,0 +1,123 @@
+/*
+ * include/asm-ppc/serial.h
+ */
+
+#include <linux/config.h>
+
+#ifdef CONFIG_APUS
+#include <asm-m68k/serial.h>
+#else
+
+/*
+ * This assumes you have a 1.8432 MHz clock for your UART.
+ *
+ * It'd be nice if someone built a serial card with a 24.576 MHz
+ * clock, since the 16550A is capable of handling a top speed of 1.5
+ * megabits/second; but this requires the faster clock.
+ */
+#define BASE_BAUD ( 1843200 / 16 )
+
+/* Standard COM flags (except for COM4, because of the 8514 problem) */
+#ifdef CONFIG_SERIAL_DETECT_IRQ
+#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ)
+#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ)
+#else
+#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
+#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
+#endif
+
+#ifdef CONFIG_SERIAL_MANY_PORTS
+#define FOURPORT_FLAGS ASYNC_FOURPORT
+#define ACCENT_FLAGS 0
+#define BOCA_FLAGS 0
+#define HUB6_FLAGS 0
+#endif
+
+/*
+ * The following define the access methods for the HUB6 card. All
+ * access is through two ports for all 24 possible chips. The card is
+ * selected through the high 2 bits, the port on that card with the
+ * "middle" 3 bits, and the register on that port with the bottom
+ * 3 bits.
+ *
+ * While the access port and interrupt is configurable, the default
+ * port locations are 0x302 for the port control register, and 0x303
+ * for the data read/write register. Normally, the interrupt is at irq3
+ * but can be anything from 3 to 7 inclusive. Note that using 3 will
+ * require disabling com2.
+ */
+
+#define C_P(card,port) (((card)<<6|(port)<<3) + 1)
+
+#define STD_SERIAL_PORT_DEFNS \
+ /* UART CLK PORT IRQ FLAGS */ \
+ { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \
+ { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \
+ { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \
+ { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */
+
+
+#ifdef CONFIG_SERIAL_MANY_PORTS
+#define EXTRA_SERIAL_PORT_DEFNS \
+ { 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS }, /* ttyS4 */ \
+ { 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS }, /* ttyS5 */ \
+ { 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS }, /* ttyS6 */ \
+ { 0, BASE_BAUD, 0x1B8, 9, FOURPORT_FLAGS }, /* ttyS7 */ \
+ { 0, BASE_BAUD, 0x2A0, 5, FOURPORT_FLAGS }, /* ttyS8 */ \
+ { 0, BASE_BAUD, 0x2A8, 5, FOURPORT_FLAGS }, /* ttyS9 */ \
+ { 0, BASE_BAUD, 0x2B0, 5, FOURPORT_FLAGS }, /* ttyS10 */ \
+ { 0, BASE_BAUD, 0x2B8, 5, FOURPORT_FLAGS }, /* ttyS11 */ \
+ { 0, BASE_BAUD, 0x330, 4, ACCENT_FLAGS }, /* ttyS12 */ \
+ { 0, BASE_BAUD, 0x338, 4, ACCENT_FLAGS }, /* ttyS13 */ \
+ { 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS14 (spare) */ \
+ { 0, BASE_BAUD, 0x000, 0, 0 }, /* ttyS15 (spare) */ \
+ { 0, BASE_BAUD, 0x100, 12, BOCA_FLAGS }, /* ttyS16 */ \
+ { 0, BASE_BAUD, 0x108, 12, BOCA_FLAGS }, /* ttyS17 */ \
+ { 0, BASE_BAUD, 0x110, 12, BOCA_FLAGS }, /* ttyS18 */ \
+ { 0, BASE_BAUD, 0x118, 12, BOCA_FLAGS }, /* ttyS19 */ \
+ { 0, BASE_BAUD, 0x120, 12, BOCA_FLAGS }, /* ttyS20 */ \
+ { 0, BASE_BAUD, 0x128, 12, BOCA_FLAGS }, /* ttyS21 */ \
+ { 0, BASE_BAUD, 0x130, 12, BOCA_FLAGS }, /* ttyS22 */ \
+ { 0, BASE_BAUD, 0x138, 12, BOCA_FLAGS }, /* ttyS23 */ \
+ { 0, BASE_BAUD, 0x140, 12, BOCA_FLAGS }, /* ttyS24 */ \
+ { 0, BASE_BAUD, 0x148, 12, BOCA_FLAGS }, /* ttyS25 */ \
+ { 0, BASE_BAUD, 0x150, 12, BOCA_FLAGS }, /* ttyS26 */ \
+ { 0, BASE_BAUD, 0x158, 12, BOCA_FLAGS }, /* ttyS27 */ \
+ { 0, BASE_BAUD, 0x160, 12, BOCA_FLAGS }, /* ttyS28 */ \
+ { 0, BASE_BAUD, 0x168, 12, BOCA_FLAGS }, /* ttyS29 */ \
+ { 0, BASE_BAUD, 0x170, 12, BOCA_FLAGS }, /* ttyS30 */ \
+ { 0, BASE_BAUD, 0x178, 12, BOCA_FLAGS }, /* ttyS31 */
+#else
+#define EXTRA_SERIAL_PORT_DEFNS
+#endif
+
+/* You can have up to four HUB6's in the system, but I've only
+ * included two cards here for a total of twelve ports.
+ */
+#if (defined(CONFIG_HUB6) && defined(CONFIG_SERIAL_MANY_PORTS))
+#define HUB6_SERIAL_PORT_DFNS \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,0) }, /* ttyS32 */ \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,1) }, /* ttyS33 */ \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,2) }, /* ttyS34 */ \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,3) }, /* ttyS35 */ \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,4) }, /* ttyS36 */ \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(0,5) }, /* ttyS37 */ \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,0) }, /* ttyS38 */ \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,1) }, /* ttyS39 */ \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,2) }, /* ttyS40 */ \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,3) }, /* ttyS41 */ \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,4) }, /* ttyS42 */ \
+ { 0, BASE_BAUD, 0x302, 3, HUB6_FLAGS, C_P(1,5) }, /* ttyS43 */
+#else
+#define HUB6_SERIAL_PORT_DFNS
+#endif
+
+#define MCA_SERIAL_PORT_DFNS
+
+#define SERIAL_PORT_DFNS \
+ STD_SERIAL_PORT_DEFNS \
+ EXTRA_SERIAL_PORT_DEFNS \
+ HUB6_SERIAL_PORT_DFNS \
+ MCA_SERIAL_PORT_DFNS
+
+#endif /* CONFIG_APUS */
diff --git a/include/asm-ppc/setup.h b/include/asm-ppc/setup.h
new file mode 100644
index 000000000..2f9164160
--- /dev/null
+++ b/include/asm-ppc/setup.h
@@ -0,0 +1,9 @@
+#ifndef _PPC_SETUP_H
+#define _PPC_SETUP_H
+
+#define m68k_num_memory num_memory
+#define m68k_memory memory
+
+#include <asm-m68k/setup.h>
+
+#endif /* _PPC_SETUP_H */
diff --git a/include/asm-ppc/siginfo.h b/include/asm-ppc/siginfo.h
index ff491fb3d..0ead0b84e 100644
--- a/include/asm-ppc/siginfo.h
+++ b/include/asm-ppc/siginfo.h
@@ -43,6 +43,7 @@ typedef struct siginfo {
/* SIGCHLD */
struct {
pid_t _pid; /* which child */
+ uid_t _uid; /* sender's uid */
int _status; /* exit code */
clock_t _utime;
clock_t _stime;
diff --git a/include/asm-ppc/signal.h b/include/asm-ppc/signal.h
index d0c532878..7e14071d9 100644
--- a/include/asm-ppc/signal.h
+++ b/include/asm-ppc/signal.h
@@ -88,6 +88,14 @@ typedef struct {
#define SA_RESTORER 0x04000000
+/*
+ * sigaltstack controls
+ */
+#define SS_ONSTACK 1
+#define SS_DISABLE 2
+
+#define MINSIGSTKSZ 2048
+#define SIGSTKSZ 8192
#ifdef __KERNEL__
/*
diff --git a/include/asm-ppc/smp_lock.h b/include/asm-ppc/smp_lock.h
deleted file mode 100644
index 1db50d5ef..000000000
--- a/include/asm-ppc/smp_lock.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef __PPC_SMPLOCK_H
-#define __PPC_SMPLOCK_H
-
-#ifndef __SMP__
-
-#define lock_kernel() do { } while (0)
-#define unlock_kernel() do { } while (0)
-#define release_kernel_lock(task, cpu, depth) ((depth) = 1)
-#define reacquire_kernel_lock(task, cpu, depth) do { } while(0)
-
-#else /* __SMP__ */
-
-/* Release global kernel lock and global interrupt lock */
-#define release_kernel_lock(task, cpu, depth) \
-do { \
- if((depth = (task)->lock_depth) != 0) { \
- __cli(); \
- (task)->lock_depth = 0; \
- klock_info.akp = NO_PROC_ID; \
- klock_info.kernel_flag = 0; \
- } \
- release_irqlock(cpu); \
- __sti(); \
-} while(0)
-
-extern void reacquire_kernel_lock(struct task_struct *, int,int);
-
-/* The following acquire and release the master kernel global lock,
- * the idea is that the usage of this mechanmism becomes less and less
- * as time goes on, to the point where they are no longer needed at all
- * and can thus disappear.
- */
-extern void __lock_kernel(struct task_struct *);
-extern void __unlock_kernel(struct task_struct *);
-
-extern __inline__ void lock_kernel(void)
-{
- __lock_kernel(current);
-}
-
-/* Release kernel global lock. */
-extern __inline__ void unlock_kernel(void)
-{
- __unlock_kernel(current);
-}
-
-
-#endif /* __SMP__ */
-#endif /* __PPC_SMPLOCK_H */
diff --git a/include/asm-ppc/smplock.h b/include/asm-ppc/smplock.h
new file mode 100644
index 000000000..e62326a10
--- /dev/null
+++ b/include/asm-ppc/smplock.h
@@ -0,0 +1,49 @@
+/*
+ * <asm/smplock.h>
+ *
+ * Default SMP lock implementation
+ */
+#include <linux/interrupt.h>
+#include <asm/spinlock.h>
+
+extern spinlock_t kernel_flag;
+
+/*
+ * Release global kernel lock and global interrupt lock
+ */
+#define release_kernel_lock(task, cpu) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_unlock(&kernel_flag); \
+ release_irqlock(cpu); \
+ __sti(); \
+} while (0)
+
+/*
+ * Re-acquire the kernel lock
+ */
+#define reacquire_kernel_lock(task) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_lock(&kernel_flag); \
+} while (0)
+
+
+/*
+ * Getting the big kernel lock.
+ *
+ * This cannot happen asynchronously,
+ * so we only need to worry about other
+ * CPU's.
+ */
+extern __inline__ void lock_kernel(void)
+{
+ if (!++current->lock_depth)
+ spin_lock(&kernel_flag);
+}
+
+extern __inline__ void unlock_kernel(void)
+{
+ if (--current->lock_depth < 0)
+ spin_unlock(&kernel_flag);
+}
diff --git a/include/asm-ppc/softirq.h b/include/asm-ppc/softirq.h
index 99506983d..712616bd1 100644
--- a/include/asm-ppc/softirq.h
+++ b/include/asm-ppc/softirq.h
@@ -19,6 +19,8 @@
extern int __ppc_bh_counter;
+#define synchronize_bh() do { } while (0)
+
#define clear_active_bhs(x) atomic_clear_mask((x),&bh_active)
extern inline void init_bh(int nr, void (*routine)(void))
@@ -81,6 +83,8 @@ extern atomic_t __ppc_bh_counter;
#define end_bh_atomic() atomic_dec(&__ppc_bh_counter)
+#define synchronize_bh() do { } while (0) /* XXX implement SMP version --Cort */
+
#include <asm/spinlock.h>
extern spinlock_t global_bh_lock;
diff --git a/include/asm-ppc/spinlock.h b/include/asm-ppc/spinlock.h
index 00f1de281..55e6bd16f 100644
--- a/include/asm-ppc/spinlock.h
+++ b/include/asm-ppc/spinlock.h
@@ -64,8 +64,7 @@ typedef struct {
} spinlock_t;
#define SPIN_LOCK_UNLOCKED { 0, 0, 0 }
-#define spin_lock_init(lp) \
-do { spinlock_t *p = (lp); p->owner_pc = p->owner_cpu = p->lock = 0; } while(0)
+#define spin_lock_init(lp) do { (lp)->lock = 0; } while(0)
#define spin_unlock_wait(lp) do { barrier(); } while((lp)->lock)
extern void _spin_lock(spinlock_t *lock);
diff --git a/include/asm-ppc/stat.h b/include/asm-ppc/stat.h
index 7b1028c39..d6d868312 100644
--- a/include/asm-ppc/stat.h
+++ b/include/asm-ppc/stat.h
@@ -37,40 +37,4 @@ struct stat {
unsigned long __unused5;
};
-typedef struct {
- unsigned int major;
- unsigned int minor;
-} __new_dev_t;
-
-struct stat64 {
- __new_dev_t st_dev;
- __u64 st_ino;
- unsigned int st_mode;
- unsigned int st_nlink;
- unsigned int st_uid;
- unsigned int st_gid;
- __new_dev_t st_rdev;
- __s64 st_size;
- __u64 st_blocks;
- unsigned long st_atime;
- unsigned long __unused1;
- unsigned long st_mtime;
- unsigned long __unused2;
- unsigned long st_ctime;
- unsigned long __unused3;
- unsigned long st_blksize;
- unsigned long __unused4;
-};
-
-#define __XSTAT_VER_1 1
-#define __XSTAT_VER_2 2
-#define __XSTAT_VER_MASK 0xff
-
-#define __XSTAT_VER_XSTAT 0x000
-#define __XSTAT_VER_LXSTAT 0x100
-#define __XSTAT_VER_FXSTAT 0x200
-#define __XSTAT_VER_TYPEMASK 0xff00
-
-#define __XMKNOD_VER_1 1
-
#endif
diff --git a/include/asm-ppc/system.h b/include/asm-ppc/system.h
index f0c016235..978fb2ab8 100644
--- a/include/asm-ppc/system.h
+++ b/include/asm-ppc/system.h
@@ -3,6 +3,7 @@
#include <linux/kdev_t.h>
#include <asm/processor.h>
+#include <asm/atomic.h>
#define mb() __asm__ __volatile__ ("sync" : : : "memory")
@@ -28,10 +29,10 @@ extern __inline__ void dcbi(void *line)
extern __inline__ void __restore_flags(unsigned long flags)
{
- extern unsigned lost_interrupts;
+ extern atomic_t n_lost_interrupts;
extern void do_lost_interrupts(unsigned long);
- if ((flags & MSR_EE) && lost_interrupts != 0) {
+ if ((flags & MSR_EE) && atomic_read(&n_lost_interrupts) != 0) {
do_lost_interrupts(flags);
} else {
__asm__ __volatile__ ("sync; mtmsr %0; isync"
@@ -40,28 +41,6 @@ extern __inline__ void __restore_flags(unsigned long flags)
}
-#if 0
-/*
- * Gcc bug prevents us from using this inline func so for now
- * it lives in misc.S
- */
-void __inline__ __restore_flags(unsigned long flags)
-{
- extern unsigned lost_interrupts;
- __asm__ __volatile__ (
- "andi. 0,%0,%2 \n\t"
- "beq 2f \n\t"
- "cmpi 0,%1,0 \n\t"
- "bne do_lost_interrupts \n\t"
- "2: sync \n\t"
- "mtmsr %0 \n\t"
- "isync \n\t"
- :
- : "r" (flags), "r"(lost_interrupts), "i" (1<<15)/*MSR_EE*/
- : "0", "cc");
-}
-#endif
-
extern void __sti(void);
extern void __cli(void);
extern int _disable_interrupts(void);
diff --git a/include/asm-ppc/timex.h b/include/asm-ppc/timex.h
new file mode 100644
index 000000000..a20f6031c
--- /dev/null
+++ b/include/asm-ppc/timex.h
@@ -0,0 +1,15 @@
+/*
+ * linux/include/asm-ppc/timex.h
+ *
+ * ppc architecture timex specifications
+ */
+#ifndef _ASMppc_TIMEX_H
+#define _ASMppc_TIMEX_H
+
+#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
+#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */
+#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
+ (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
+ << (SHIFT_SCALE-SHIFT_HZ)) / HZ)
+
+#endif
diff --git a/include/asm-ppc/traps.h b/include/asm-ppc/traps.h
new file mode 100644
index 000000000..68e7326b5
--- /dev/null
+++ b/include/asm-ppc/traps.h
@@ -0,0 +1 @@
+#include <asm-m68k/traps.h>
diff --git a/include/asm-ppc/unistd.h b/include/asm-ppc/unistd.h
index 8202dde4e..2a0f9f16b 100644
--- a/include/asm-ppc/unistd.h
+++ b/include/asm-ppc/unistd.h
@@ -21,7 +21,7 @@
#define __NR_time 13
#define __NR_mknod 14
#define __NR_chmod 15
-#define __NR_chown 16
+#define __NR_lchown 16
#define __NR_break 17
#define __NR_oldstat 18
#define __NR_lseek 19
@@ -177,39 +177,189 @@
#define __NR_setresgid 169
#define __NR_getresgid 170
#define __NR_prctl 171
-#define __NR_xstat 172
-#define __NR_xmknod 173
+#define __NR_rt_sigreturn 172
+#define __NR_rt_sigaction 173
+#define __NR_rt_sigprocmask 174
+#define __NR_rt_sigpending 175
+#define __NR_rt_sigtimedwait 176
+#define __NR_rt_sigqueueinfo 177
+#define __NR_rt_sigsuspend 178
+#define __NR_pread 179
+#define __NR_pwrite 180
+#define __NR_chown 181
+#define __NR_getcwd 182
#define __NR(n) #n
-#define __do_syscall(n) \
- asm volatile ("li 0,%0\n\
- sc\n\
- bns 1f\n\
- mr 0,3\n\
- lis 3,errno@ha\n\
- stw 0,errno@l(3)\n\
- li 3,-1\n\
-1:" : : "i" (n) : "r0", "r3")
-#define _syscall0(type,name) \
-type name(void) \
-{ __do_syscall(__NR_##name); }
-#define _syscall1(type,name,type1,arg1) \
-type name(type1 arg1) \
-{ __do_syscall(__NR_##name); }
-#define _syscall2(type,name,type1,arg1,type2,arg2) \
-type name(type1 arg1,type2 arg2) \
-{ __do_syscall(__NR_##name); }
-#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
-type name(type1 arg1,type2 arg2,type3 arg3) \
-{ __do_syscall(__NR_##name); }
+
+#define __syscall_return(type) \
+ return (__sc_err & 0x10000000 ? errno = __sc_ret, __sc_ret = -1 : 0), \
+ (type) __sc_ret
+
+#define __syscall_clobbers \
+ "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
+
+#define _syscall0(type,name) \
+type name(void) \
+{ \
+ unsigned long __sc_ret, __sc_err; \
+ { \
+ register unsigned long __sc_0 __asm__ ("r0"); \
+ register unsigned long __sc_3 __asm__ ("r3"); \
+ \
+ __sc_0 = __NR_##name; \
+ __asm__ __volatile__ \
+ ("sc \n\t" \
+ "mfcr %1 " \
+ : "=&r" (__sc_3), "=&r" (__sc_0) \
+ : "0" (__sc_3), "1" (__sc_0) \
+ : __syscall_clobbers); \
+ __sc_ret = __sc_3; \
+ __sc_err = __sc_0; \
+ } \
+ __syscall_return (type); \
+}
+
+#define _syscall1(type,name,type1,arg1) \
+type name(type1 arg1) \
+{ \
+ unsigned long __sc_ret, __sc_err; \
+ { \
+ register unsigned long __sc_0 __asm__ ("r0"); \
+ register unsigned long __sc_3 __asm__ ("r3"); \
+ \
+ __sc_3 = (unsigned long) (arg1); \
+ __sc_0 = __NR_##name; \
+ __asm__ __volatile__ \
+ ("sc \n\t" \
+ "mfcr %1 " \
+ : "=&r" (__sc_3), "=&r" (__sc_0) \
+ : "0" (__sc_3), "1" (__sc_0) \
+ : __syscall_clobbers); \
+ __sc_ret = __sc_3; \
+ __sc_err = __sc_0; \
+ } \
+ __syscall_return (type); \
+}
+
+#define _syscall2(type,name,type1,arg1,type2,arg2) \
+type name(type1 arg1, type2 arg2) \
+{ \
+ unsigned long __sc_ret, __sc_err; \
+ { \
+ register unsigned long __sc_0 __asm__ ("r0"); \
+ register unsigned long __sc_3 __asm__ ("r3"); \
+ register unsigned long __sc_4 __asm__ ("r4"); \
+ \
+ __sc_3 = (unsigned long) (arg1); \
+ __sc_4 = (unsigned long) (arg2); \
+ __sc_0 = __NR_##name; \
+ __asm__ __volatile__ \
+ ("sc \n\t" \
+ "mfcr %1 " \
+ : "=&r" (__sc_3), "=&r" (__sc_0) \
+ : "0" (__sc_3), "1" (__sc_0), \
+ "r" (__sc_4) \
+ : __syscall_clobbers); \
+ __sc_ret = __sc_3; \
+ __sc_err = __sc_0; \
+ } \
+ __syscall_return (type); \
+}
+
+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
+type name(type1 arg1, type2 arg2, type3 arg3) \
+{ \
+ unsigned long __sc_ret, __sc_err; \
+ { \
+ register unsigned long __sc_0 __asm__ ("r0"); \
+ register unsigned long __sc_3 __asm__ ("r3"); \
+ register unsigned long __sc_4 __asm__ ("r4"); \
+ register unsigned long __sc_5 __asm__ ("r5"); \
+ \
+ __sc_3 = (unsigned long) (arg1); \
+ __sc_4 = (unsigned long) (arg2); \
+ __sc_5 = (unsigned long) (arg3); \
+ __sc_0 = __NR_##name; \
+ __asm__ __volatile__ \
+ ("sc \n\t" \
+ "mfcr %1 " \
+ : "=&r" (__sc_3), "=&r" (__sc_0) \
+ : "0" (__sc_3), "1" (__sc_0), \
+ "r" (__sc_4), \
+ "r" (__sc_5) \
+ : __syscall_clobbers); \
+ __sc_ret = __sc_3; \
+ __sc_err = __sc_0; \
+ } \
+ __syscall_return (type); \
+}
+
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
-type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
-{ __do_syscall(__NR_##name); }
-#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
- type5,arg5) \
-type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
-{ __do_syscall(__NR_##name); }
+type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
+{ \
+ unsigned long __sc_ret, __sc_err; \
+ { \
+ register unsigned long __sc_0 __asm__ ("r0"); \
+ register unsigned long __sc_3 __asm__ ("r3"); \
+ register unsigned long __sc_4 __asm__ ("r4"); \
+ register unsigned long __sc_5 __asm__ ("r5"); \
+ register unsigned long __sc_6 __asm__ ("r6"); \
+ \
+ __sc_3 = (unsigned long) (arg1); \
+ __sc_4 = (unsigned long) (arg2); \
+ __sc_5 = (unsigned long) (arg3); \
+ __sc_6 = (unsigned long) (arg4); \
+ __sc_0 = __NR_##name; \
+ __asm__ __volatile__ \
+ ("sc \n\t" \
+ "mfcr %1 " \
+ : "=&r" (__sc_3), "=&r" (__sc_0) \
+ : "0" (__sc_3), "1" (__sc_0), \
+ "r" (__sc_4), \
+ "r" (__sc_5), \
+ "r" (__sc_6) \
+ : __syscall_clobbers); \
+ __sc_ret = __sc_3; \
+ __sc_err = __sc_0; \
+ } \
+ __syscall_return (type); \
+}
+
+#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
+type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
+{ \
+ unsigned long __sc_ret, __sc_err; \
+ { \
+ register unsigned long __sc_0 __asm__ ("r0"); \
+ register unsigned long __sc_3 __asm__ ("r3"); \
+ register unsigned long __sc_4 __asm__ ("r4"); \
+ register unsigned long __sc_5 __asm__ ("r5"); \
+ register unsigned long __sc_6 __asm__ ("r6"); \
+ register unsigned long __sc_7 __asm__ ("r7"); \
+ \
+ __sc_3 = (unsigned long) (arg1); \
+ __sc_4 = (unsigned long) (arg2); \
+ __sc_5 = (unsigned long) (arg3); \
+ __sc_6 = (unsigned long) (arg4); \
+ __sc_7 = (unsigned long) (arg5); \
+ __sc_0 = __NR_##name; \
+ __asm__ __volatile__ \
+ ("sc \n\t" \
+ "mfcr %1 " \
+ : "=&r" (__sc_3), "=&r" (__sc_0) \
+ : "0" (__sc_3), "1" (__sc_0), \
+ "r" (__sc_4), \
+ "r" (__sc_5), \
+ "r" (__sc_6), \
+ "r" (__sc_7) \
+ : __syscall_clobbers); \
+ __sc_ret = __sc_3; \
+ __sc_err = __sc_0; \
+ } \
+ __syscall_return (type); \
+}
+
#ifdef __KERNEL_SYSCALLS__
@@ -234,19 +384,22 @@ static inline long kernel_thread(int (*fn)(void *), void * arg, unsigned long fl
/*
* System call prototypes.
*/
-int idle(void);
-int setup(int);
-int sync(void);
-pid_t setsid(void);
-int write(int, const char *, off_t);
-int dup(int);
-int execve(const char *, char **, char **);
-int open(const char *, int, int);
-int close(int);
-pid_t waitpid(pid_t, int *, int);
-pid_t fork(void);
-void _exit(int);
-int delete_module(const char *);
+#define __NR__exit __NR_exit
+static inline _syscall0(int,idle)
+static inline _syscall0(int,pause)
+static inline _syscall1(int,setup,int,magic)
+static inline _syscall0(int,sync)
+static inline _syscall0(pid_t,setsid)
+static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
+static inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
+static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
+static inline _syscall1(int,dup,int,fd)
+static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
+static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
+static inline _syscall1(int,close,int,fd)
+static inline _syscall1(int,_exit,int,exitcode)
+static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
+static inline _syscall1(int,delete_module,const char *,name)
static inline pid_t wait(int * wait_stat)
{
diff --git a/include/asm-ppc/vc_ioctl.h b/include/asm-ppc/vc_ioctl.h
new file mode 100644
index 000000000..3d8b884b9
--- /dev/null
+++ b/include/asm-ppc/vc_ioctl.h
@@ -0,0 +1,43 @@
+#ifndef _LINUX_VC_IOCTL_H
+#define _LINUX_VC_IOCTL_H
+
+struct vc_mode {
+ int height;
+ int width;
+ int depth;
+ int pitch;
+ int mode;
+ char name[32];
+ unsigned long fb_address;
+ unsigned long cmap_adr_address;
+ unsigned long cmap_data_address;
+ unsigned long disp_reg_address;
+};
+
+#define VC_GETMODE 0x7667
+#define VC_SETMODE 0x7668
+#define VC_INQMODE 0x7669
+
+#define VC_SETCMAP 0x766a
+#define VC_GETCMAP 0x766b
+
+#define VC_POWERMODE 0x766c
+
+/* Values for the argument to the VC_POWERMODE ioctl */
+#define VC_POWERMODE_INQUIRY (-1)
+#define VESA_NO_BLANKING 0
+#define VESA_VSYNC_SUSPEND 1
+#define VESA_HSYNC_SUSPEND 2
+#define VESA_POWERDOWN 3
+
+#ifdef __KERNEL__
+extern int console_getmode(struct vc_mode *);
+extern int console_setmode(struct vc_mode *, int);
+extern int console_setcmap(int, unsigned char *, unsigned char *,
+ unsigned char *);
+extern int console_powermode(int);
+extern struct vc_mode display_info;
+extern struct fb_info *console_fb_info;
+#endif
+
+#endif /* _LINUX_VC_IOCTL_H */
diff --git a/include/asm-ppc/vga.h b/include/asm-ppc/vga.h
new file mode 100644
index 000000000..d82388831
--- /dev/null
+++ b/include/asm-ppc/vga.h
@@ -0,0 +1,29 @@
+/*
+ * Access to VGA videoram
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ */
+
+#ifndef _LINUX_ASM_VGA_H_
+#define _LINUX_ASM_VGA_H_
+
+#include <asm/io.h>
+
+#define VT_BUF_HAVE_RW
+
+extern inline void scr_writew(u16 val, u16 *addr)
+{
+ st_le16(addr, val);
+}
+
+extern inline u16 scr_readw(u16 *addr)
+{
+ return ld_le16(addr);
+}
+
+#define VGA_MAP_MEM(x) (x + _ISA_MEM_BASE)
+
+#define vga_readb(x) (*(x))
+#define vga_writeb(x,y) (*(y) = (x))
+
+#endif
diff --git a/include/asm-ppc/xstat.h b/include/asm-ppc/xstat.h
deleted file mode 100644
index f489523b7..000000000
--- a/include/asm-ppc/xstat.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* $Id: xstat.h,v 1.1 1998/02/06 12:51:55 jj Exp $
- * xstat.h: sys_xstat/xmknod architecture dependent stuff.
- *
- * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
- */
-
-extern __inline__ int cp_xstat(struct inode *inode, struct stat64 *s, unsigned long blocks, int blksize)
-{
- struct stat64 tmp;
-
- memset (&tmp, 0, sizeof(tmp));
- tmp.st_dev.major = MAJOR(inode->i_dev);
- tmp.st_dev.minor = MINOR(inode->i_dev);
- tmp.st_ino = inode->i_ino;
- tmp.st_mode = inode->i_mode;
- tmp.st_nlink = inode->i_nlink;
- tmp.st_uid = inode->i_uid;
- tmp.st_gid = inode->i_gid;
- tmp.st_rdev.major = MAJOR(inode->i_rdev);
- tmp.st_rdev.minor = MINOR(inode->i_rdev);
- tmp.st_size = inode->i_size;
- tmp.st_blksize = blksize;
- tmp.st_blocks = blocks;
- tmp.st_atime = inode->i_atime;
- tmp.st_mtime = inode->i_mtime;
- tmp.st_ctime = inode->i_ctime;
- return copy_to_user(s,&tmp,sizeof(tmp));
-}
-
-extern __inline__ int get_user_new_dev_t(kdev_t *kdev, __new_dev_t *udev) {
- __new_dev_t ndev;
- if (copy_from_user (&ndev, udev, sizeof(__new_dev_t))) return -EFAULT;
- *kdev = MKDEV(ndev.major, ndev.minor);
- return 0;
-}
diff --git a/include/asm-sparc/ap1000/pgtapmmu.h b/include/asm-sparc/ap1000/pgtapmmu.h
index 8a46b1df0..9e238db45 100644
--- a/include/asm-sparc/ap1000/pgtapmmu.h
+++ b/include/asm-sparc/ap1000/pgtapmmu.h
@@ -38,6 +38,7 @@
#define APMMU_PGD_TABLE_SIZE 0x400 /* 256 entries, 4 bytes a piece */
#define APMMU_VMALLOC_START (0xfe300000)
+#define APMMU_VMALLOC_END ~0x0UL
/* Definition of the values in the ET field of PTD's and PTE's */
#define APMMU_ET_MASK 0x3
diff --git a/include/asm-sparc/asm_offsets.h b/include/asm-sparc/asm_offsets.h
index 5e0578bf1..d2f9a582b 100644
--- a/include/asm-sparc/asm_offsets.h
+++ b/include/asm-sparc/asm_offsets.h
@@ -14,170 +14,176 @@
#define ASIZ_task_addr_limit 0x00000004
#define AOFF_task_exec_domain 0x00000010
#define ASIZ_task_exec_domain 0x00000004
-#define AOFF_task_debugreg 0x00000014
-#define ASIZ_task_debugreg 0x00000020
-#define AOFF_task_counter 0x00000034
+#define AOFF_task_need_resched 0x00000014
+#define ASIZ_task_need_resched 0x00000004
+#define AOFF_task_counter 0x00000018
#define ASIZ_task_counter 0x00000004
-#define AOFF_task_priority 0x00000038
+#define AOFF_task_priority 0x0000001c
#define ASIZ_task_priority 0x00000004
-#define AOFF_task_binfmt 0x0000003c
-#define ASIZ_task_binfmt 0x00000004
-#define AOFF_task_next_task 0x00000040
+#define AOFF_task_has_cpu 0x00000020
+#define ASIZ_task_has_cpu 0x00000004
+#define AOFF_task_processor 0x00000024
+#define ASIZ_task_processor 0x00000004
+#define AOFF_task_last_processor 0x00000028
+#define ASIZ_task_last_processor 0x00000004
+#define AOFF_task_lock_depth 0x0000002c
+#define ASIZ_task_lock_depth 0x00000004
+#define AOFF_task_next_task 0x00000030
#define ASIZ_task_next_task 0x00000004
-#define AOFF_task_prev_task 0x00000044
+#define AOFF_task_prev_task 0x00000034
#define ASIZ_task_prev_task 0x00000004
-#define AOFF_task_next_run 0x00000048
+#define AOFF_task_next_run 0x00000038
#define ASIZ_task_next_run 0x00000004
-#define AOFF_task_prev_run 0x0000004c
+#define AOFF_task_prev_run 0x0000003c
#define ASIZ_task_prev_run 0x00000004
-#define AOFF_task_exit_code 0x00000050
+#define AOFF_task_binfmt 0x00000040
+#define ASIZ_task_binfmt 0x00000004
+#define AOFF_task_exit_code 0x00000044
#define ASIZ_task_exit_code 0x00000004
-#define AOFF_task_exit_signal 0x00000054
+#define AOFF_task_exit_signal 0x00000048
#define ASIZ_task_exit_signal 0x00000004
-#define AOFF_task_pdeath_signal 0x00000058
+#define AOFF_task_pdeath_signal 0x0000004c
#define ASIZ_task_pdeath_signal 0x00000004
-#define AOFF_task_personality 0x0000005c
+#define AOFF_task_personality 0x00000050
#define ASIZ_task_personality 0x00000004
-#define AOFF_task_pid 0x00000064
+#define AOFF_task_pid 0x00000058
#define ASIZ_task_pid 0x00000004
-#define AOFF_task_pgrp 0x00000068
+#define AOFF_task_pgrp 0x0000005c
#define ASIZ_task_pgrp 0x00000004
-#define AOFF_task_tty_old_pgrp 0x0000006c
+#define AOFF_task_tty_old_pgrp 0x00000060
#define ASIZ_task_tty_old_pgrp 0x00000004
-#define AOFF_task_session 0x00000070
+#define AOFF_task_session 0x00000064
#define ASIZ_task_session 0x00000004
-#define AOFF_task_leader 0x00000074
+#define AOFF_task_leader 0x00000068
#define ASIZ_task_leader 0x00000004
-#define AOFF_task_ngroups 0x00000078
-#define ASIZ_task_ngroups 0x00000004
-#define AOFF_task_groups 0x0000007c
-#define ASIZ_task_groups 0x00000040
-#define AOFF_task_p_opptr 0x000000bc
+#define AOFF_task_p_opptr 0x0000006c
#define ASIZ_task_p_opptr 0x00000004
-#define AOFF_task_p_pptr 0x000000c0
+#define AOFF_task_p_pptr 0x00000070
#define ASIZ_task_p_pptr 0x00000004
-#define AOFF_task_p_cptr 0x000000c4
+#define AOFF_task_p_cptr 0x00000074
#define ASIZ_task_p_cptr 0x00000004
-#define AOFF_task_p_ysptr 0x000000c8
+#define AOFF_task_p_ysptr 0x00000078
#define ASIZ_task_p_ysptr 0x00000004
-#define AOFF_task_p_osptr 0x000000cc
+#define AOFF_task_p_osptr 0x0000007c
#define ASIZ_task_p_osptr 0x00000004
-#define AOFF_task_pidhash_next 0x000000d0
+#define AOFF_task_pidhash_next 0x00000080
#define ASIZ_task_pidhash_next 0x00000004
-#define AOFF_task_pidhash_pprev 0x000000d4
+#define AOFF_task_pidhash_pprev 0x00000084
#define ASIZ_task_pidhash_pprev 0x00000004
-#define AOFF_task_tarray_ptr 0x000000d8
+#define AOFF_task_tarray_ptr 0x00000088
#define ASIZ_task_tarray_ptr 0x00000004
-#define AOFF_task_wait_chldexit 0x000000dc
+#define AOFF_task_wait_chldexit 0x0000008c
#define ASIZ_task_wait_chldexit 0x00000004
-#define AOFF_task_uid 0x000000e0
-#define ASIZ_task_uid 0x00000002
-#define AOFF_task_euid 0x000000e2
-#define ASIZ_task_euid 0x00000002
-#define AOFF_task_suid 0x000000e4
-#define ASIZ_task_suid 0x00000002
-#define AOFF_task_fsuid 0x000000e6
-#define ASIZ_task_fsuid 0x00000002
-#define AOFF_task_gid 0x000000e8
-#define ASIZ_task_gid 0x00000002
-#define AOFF_task_egid 0x000000ea
-#define ASIZ_task_egid 0x00000002
-#define AOFF_task_sgid 0x000000ec
-#define ASIZ_task_sgid 0x00000002
-#define AOFF_task_fsgid 0x000000ee
-#define ASIZ_task_fsgid 0x00000002
-#define AOFF_task_timeout 0x000000f0
+#define AOFF_task_timeout 0x00000090
#define ASIZ_task_timeout 0x00000004
-#define AOFF_task_policy 0x000000f4
+#define AOFF_task_policy 0x00000094
#define ASIZ_task_policy 0x00000004
-#define AOFF_task_rt_priority 0x000000f8
+#define AOFF_task_rt_priority 0x00000098
#define ASIZ_task_rt_priority 0x00000004
-#define AOFF_task_it_real_value 0x000000fc
+#define AOFF_task_it_real_value 0x0000009c
#define ASIZ_task_it_real_value 0x00000004
-#define AOFF_task_it_prof_value 0x00000100
+#define AOFF_task_it_prof_value 0x000000a0
#define ASIZ_task_it_prof_value 0x00000004
-#define AOFF_task_it_virt_value 0x00000104
+#define AOFF_task_it_virt_value 0x000000a4
#define ASIZ_task_it_virt_value 0x00000004
-#define AOFF_task_it_real_incr 0x00000108
+#define AOFF_task_it_real_incr 0x000000a8
#define ASIZ_task_it_real_incr 0x00000004
-#define AOFF_task_it_prof_incr 0x0000010c
+#define AOFF_task_it_prof_incr 0x000000ac
#define ASIZ_task_it_prof_incr 0x00000004
-#define AOFF_task_it_virt_incr 0x00000110
+#define AOFF_task_it_virt_incr 0x000000b0
#define ASIZ_task_it_virt_incr 0x00000004
-#define AOFF_task_real_timer 0x00000114
+#define AOFF_task_real_timer 0x000000b4
#define ASIZ_task_real_timer 0x00000014
-#define AOFF_task_times 0x00000128
+#define AOFF_task_times 0x000000c8
#define ASIZ_task_times 0x00000010
-#define AOFF_task_start_time 0x00000138
+#define AOFF_task_start_time 0x000000d8
#define ASIZ_task_start_time 0x00000004
-#define AOFF_task_per_cpu_utime 0x0000013c
+#define AOFF_task_per_cpu_utime 0x000000dc
#define ASIZ_task_per_cpu_utime 0x00000004
-#define AOFF_task_min_flt 0x00000144
+#define AOFF_task_min_flt 0x000000e4
#define ASIZ_task_min_flt 0x00000004
-#define AOFF_task_maj_flt 0x00000148
+#define AOFF_task_maj_flt 0x000000e8
#define ASIZ_task_maj_flt 0x00000004
-#define AOFF_task_nswap 0x0000014c
+#define AOFF_task_nswap 0x000000ec
#define ASIZ_task_nswap 0x00000004
-#define AOFF_task_cmin_flt 0x00000150
+#define AOFF_task_cmin_flt 0x000000f0
#define ASIZ_task_cmin_flt 0x00000004
-#define AOFF_task_cmaj_flt 0x00000154
+#define AOFF_task_cmaj_flt 0x000000f4
#define ASIZ_task_cmaj_flt 0x00000004
-#define AOFF_task_cnswap 0x00000158
+#define AOFF_task_cnswap 0x000000f8
#define ASIZ_task_cnswap 0x00000004
-#define AOFF_task_swap_address 0x00000160
+#define AOFF_task_swap_address 0x00000100
#define ASIZ_task_swap_address 0x00000004
-#define AOFF_task_old_maj_flt 0x00000164
+#define AOFF_task_old_maj_flt 0x00000104
#define ASIZ_task_old_maj_flt 0x00000004
-#define AOFF_task_dec_flt 0x00000168
+#define AOFF_task_dec_flt 0x00000108
#define ASIZ_task_dec_flt 0x00000004
-#define AOFF_task_swap_cnt 0x0000016c
+#define AOFF_task_swap_cnt 0x0000010c
#define ASIZ_task_swap_cnt 0x00000004
+#define AOFF_task_uid 0x00000110
+#define ASIZ_task_uid 0x00000002
+#define AOFF_task_euid 0x00000112
+#define ASIZ_task_euid 0x00000002
+#define AOFF_task_suid 0x00000114
+#define ASIZ_task_suid 0x00000002
+#define AOFF_task_fsuid 0x00000116
+#define ASIZ_task_fsuid 0x00000002
+#define AOFF_task_gid 0x00000118
+#define ASIZ_task_gid 0x00000002
+#define AOFF_task_egid 0x0000011a
+#define ASIZ_task_egid 0x00000002
+#define AOFF_task_sgid 0x0000011c
+#define ASIZ_task_sgid 0x00000002
+#define AOFF_task_fsgid 0x0000011e
+#define ASIZ_task_fsgid 0x00000002
+#define AOFF_task_ngroups 0x00000120
+#define ASIZ_task_ngroups 0x00000004
+#define AOFF_task_groups 0x00000124
+#define ASIZ_task_groups 0x00000040
+#define AOFF_task_cap_effective 0x00000164
+#define ASIZ_task_cap_effective 0x00000004
+#define AOFF_task_cap_inheritable 0x00000168
+#define ASIZ_task_cap_inheritable 0x00000004
+#define AOFF_task_cap_permitted 0x0000016c
+#define ASIZ_task_cap_permitted 0x00000004
#define AOFF_task_rlim 0x00000170
#define ASIZ_task_rlim 0x00000050
#define AOFF_task_used_math 0x000001c0
#define ASIZ_task_used_math 0x00000002
-#define AOFF_task_io_usage 0x000001c4
-#define ASIZ_task_io_usage 0x00000004
-#define AOFF_task_comm 0x000001c8
+#define AOFF_task_comm 0x000001c2
#define ASIZ_task_comm 0x00000010
-#define AOFF_task_link_count 0x000001d8
+#define AOFF_task_link_count 0x000001d4
#define ASIZ_task_link_count 0x00000004
-#define AOFF_task_tty 0x000001dc
+#define AOFF_task_tty 0x000001d8
#define ASIZ_task_tty 0x00000004
-#define AOFF_task_semundo 0x000001e0
+#define AOFF_task_semundo 0x000001dc
#define ASIZ_task_semundo 0x00000004
-#define AOFF_task_semsleeping 0x000001e4
+#define AOFF_task_semsleeping 0x000001e0
#define ASIZ_task_semsleeping 0x00000004
-#define AOFF_task_ldt 0x000001e8
-#define ASIZ_task_ldt 0x00000004
-#define AOFF_task_tss 0x000001f0
-#define ASIZ_task_tss 0x00000390
-#define AOFF_task_fs 0x00000580
+#define AOFF_task_tss 0x000001e8
+#define ASIZ_task_tss 0x00000388
+#define AOFF_task_fs 0x00000570
#define ASIZ_task_fs 0x00000004
-#define AOFF_task_files 0x00000584
+#define AOFF_task_files 0x00000574
#define ASIZ_task_files 0x00000004
-#define AOFF_task_mm 0x00000588
+#define AOFF_task_mm 0x00000578
#define ASIZ_task_mm 0x00000004
-#define AOFF_task_sig 0x0000058c
+#define AOFF_task_sigmask_lock 0x0000057c
+#define ASIZ_task_sigmask_lock 0x00000000
+#define AOFF_task_sig 0x0000057c
#define ASIZ_task_sig 0x00000004
-#define AOFF_task_signal 0x00000590
+#define AOFF_task_signal 0x00000580
#define ASIZ_task_signal 0x00000008
-#define AOFF_task_blocked 0x00000598
+#define AOFF_task_blocked 0x00000588
#define ASIZ_task_blocked 0x00000008
-#define AOFF_task_sigqueue 0x000005a0
+#define AOFF_task_sigqueue 0x00000590
#define ASIZ_task_sigqueue 0x00000004
-#define AOFF_task_sigqueue_tail 0x000005a4
+#define AOFF_task_sigqueue_tail 0x00000594
#define ASIZ_task_sigqueue_tail 0x00000004
-#define AOFF_task_has_cpu 0x000005a8
-#define ASIZ_task_has_cpu 0x00000004
-#define AOFF_task_processor 0x000005ac
-#define ASIZ_task_processor 0x00000004
-#define AOFF_task_last_processor 0x000005b0
-#define ASIZ_task_last_processor 0x00000004
-#define AOFF_task_lock_depth 0x000005b4
-#define ASIZ_task_lock_depth 0x00000004
-#define AOFF_task_sigmask_lock 0x000005b8
-#define ASIZ_task_sigmask_lock 0x00000000
+#define AOFF_task_sas_ss_sp 0x00000598
+#define ASIZ_task_sas_ss_sp 0x00000004
+#define AOFF_task_sas_ss_size 0x0000059c
+#define ASIZ_task_sas_ss_size 0x00000004
#define AOFF_mm_mmap 0x00000000
#define ASIZ_mm_mmap 0x00000004
#define AOFF_mm_mmap_cache 0x00000004
@@ -224,6 +230,8 @@
#define ASIZ_mm_def_flags 0x00000004
#define AOFF_mm_cpu_vm_mask 0x00000060
#define ASIZ_mm_cpu_vm_mask 0x00000004
+#define AOFF_mm_segments 0x00000064
+#define ASIZ_mm_segments 0x00000004
#define AOFF_thread_uwinmask 0x00000000
#define ASIZ_thread_uwinmask 0x00000004
#define AOFF_thread_kregs 0x00000004
@@ -258,15 +266,13 @@
#define ASIZ_thread_fpqdepth 0x00000004
#define AOFF_thread_fpqueue 0x000002d8
#define ASIZ_thread_fpqueue 0x00000080
-#define AOFF_thread_sstk_info 0x00000358
-#define ASIZ_thread_sstk_info 0x00000008
-#define AOFF_thread_flags 0x00000360
+#define AOFF_thread_flags 0x00000358
#define ASIZ_thread_flags 0x00000004
-#define AOFF_thread_current_ds 0x00000364
+#define AOFF_thread_current_ds 0x0000035c
#define ASIZ_thread_current_ds 0x00000004
-#define AOFF_thread_core_exec 0x00000368
+#define AOFF_thread_core_exec 0x00000360
#define ASIZ_thread_core_exec 0x00000020
-#define AOFF_thread_new_signal 0x00000388
+#define AOFF_thread_new_signal 0x00000380
#define ASIZ_thread_new_signal 0x00000004
#else /* __SMP__ */
@@ -281,170 +287,176 @@
#define ASIZ_task_addr_limit 0x00000004
#define AOFF_task_exec_domain 0x00000010
#define ASIZ_task_exec_domain 0x00000004
-#define AOFF_task_debugreg 0x00000014
-#define ASIZ_task_debugreg 0x00000020
-#define AOFF_task_counter 0x00000034
+#define AOFF_task_need_resched 0x00000014
+#define ASIZ_task_need_resched 0x00000004
+#define AOFF_task_counter 0x00000018
#define ASIZ_task_counter 0x00000004
-#define AOFF_task_priority 0x00000038
+#define AOFF_task_priority 0x0000001c
#define ASIZ_task_priority 0x00000004
-#define AOFF_task_binfmt 0x0000003c
-#define ASIZ_task_binfmt 0x00000004
-#define AOFF_task_next_task 0x00000040
+#define AOFF_task_has_cpu 0x00000020
+#define ASIZ_task_has_cpu 0x00000004
+#define AOFF_task_processor 0x00000024
+#define ASIZ_task_processor 0x00000004
+#define AOFF_task_last_processor 0x00000028
+#define ASIZ_task_last_processor 0x00000004
+#define AOFF_task_lock_depth 0x0000002c
+#define ASIZ_task_lock_depth 0x00000004
+#define AOFF_task_next_task 0x00000030
#define ASIZ_task_next_task 0x00000004
-#define AOFF_task_prev_task 0x00000044
+#define AOFF_task_prev_task 0x00000034
#define ASIZ_task_prev_task 0x00000004
-#define AOFF_task_next_run 0x00000048
+#define AOFF_task_next_run 0x00000038
#define ASIZ_task_next_run 0x00000004
-#define AOFF_task_prev_run 0x0000004c
+#define AOFF_task_prev_run 0x0000003c
#define ASIZ_task_prev_run 0x00000004
-#define AOFF_task_exit_code 0x00000050
+#define AOFF_task_binfmt 0x00000040
+#define ASIZ_task_binfmt 0x00000004
+#define AOFF_task_exit_code 0x00000044
#define ASIZ_task_exit_code 0x00000004
-#define AOFF_task_exit_signal 0x00000054
+#define AOFF_task_exit_signal 0x00000048
#define ASIZ_task_exit_signal 0x00000004
-#define AOFF_task_pdeath_signal 0x00000058
+#define AOFF_task_pdeath_signal 0x0000004c
#define ASIZ_task_pdeath_signal 0x00000004
-#define AOFF_task_personality 0x0000005c
+#define AOFF_task_personality 0x00000050
#define ASIZ_task_personality 0x00000004
-#define AOFF_task_pid 0x00000064
+#define AOFF_task_pid 0x00000058
#define ASIZ_task_pid 0x00000004
-#define AOFF_task_pgrp 0x00000068
+#define AOFF_task_pgrp 0x0000005c
#define ASIZ_task_pgrp 0x00000004
-#define AOFF_task_tty_old_pgrp 0x0000006c
+#define AOFF_task_tty_old_pgrp 0x00000060
#define ASIZ_task_tty_old_pgrp 0x00000004
-#define AOFF_task_session 0x00000070
+#define AOFF_task_session 0x00000064
#define ASIZ_task_session 0x00000004
-#define AOFF_task_leader 0x00000074
+#define AOFF_task_leader 0x00000068
#define ASIZ_task_leader 0x00000004
-#define AOFF_task_ngroups 0x00000078
-#define ASIZ_task_ngroups 0x00000004
-#define AOFF_task_groups 0x0000007c
-#define ASIZ_task_groups 0x00000040
-#define AOFF_task_p_opptr 0x000000bc
+#define AOFF_task_p_opptr 0x0000006c
#define ASIZ_task_p_opptr 0x00000004
-#define AOFF_task_p_pptr 0x000000c0
+#define AOFF_task_p_pptr 0x00000070
#define ASIZ_task_p_pptr 0x00000004
-#define AOFF_task_p_cptr 0x000000c4
+#define AOFF_task_p_cptr 0x00000074
#define ASIZ_task_p_cptr 0x00000004
-#define AOFF_task_p_ysptr 0x000000c8
+#define AOFF_task_p_ysptr 0x00000078
#define ASIZ_task_p_ysptr 0x00000004
-#define AOFF_task_p_osptr 0x000000cc
+#define AOFF_task_p_osptr 0x0000007c
#define ASIZ_task_p_osptr 0x00000004
-#define AOFF_task_pidhash_next 0x000000d0
+#define AOFF_task_pidhash_next 0x00000080
#define ASIZ_task_pidhash_next 0x00000004
-#define AOFF_task_pidhash_pprev 0x000000d4
+#define AOFF_task_pidhash_pprev 0x00000084
#define ASIZ_task_pidhash_pprev 0x00000004
-#define AOFF_task_tarray_ptr 0x000000d8
+#define AOFF_task_tarray_ptr 0x00000088
#define ASIZ_task_tarray_ptr 0x00000004
-#define AOFF_task_wait_chldexit 0x000000dc
+#define AOFF_task_wait_chldexit 0x0000008c
#define ASIZ_task_wait_chldexit 0x00000004
-#define AOFF_task_uid 0x000000e0
-#define ASIZ_task_uid 0x00000002
-#define AOFF_task_euid 0x000000e2
-#define ASIZ_task_euid 0x00000002
-#define AOFF_task_suid 0x000000e4
-#define ASIZ_task_suid 0x00000002
-#define AOFF_task_fsuid 0x000000e6
-#define ASIZ_task_fsuid 0x00000002
-#define AOFF_task_gid 0x000000e8
-#define ASIZ_task_gid 0x00000002
-#define AOFF_task_egid 0x000000ea
-#define ASIZ_task_egid 0x00000002
-#define AOFF_task_sgid 0x000000ec
-#define ASIZ_task_sgid 0x00000002
-#define AOFF_task_fsgid 0x000000ee
-#define ASIZ_task_fsgid 0x00000002
-#define AOFF_task_timeout 0x000000f0
+#define AOFF_task_timeout 0x00000090
#define ASIZ_task_timeout 0x00000004
-#define AOFF_task_policy 0x000000f4
+#define AOFF_task_policy 0x00000094
#define ASIZ_task_policy 0x00000004
-#define AOFF_task_rt_priority 0x000000f8
+#define AOFF_task_rt_priority 0x00000098
#define ASIZ_task_rt_priority 0x00000004
-#define AOFF_task_it_real_value 0x000000fc
+#define AOFF_task_it_real_value 0x0000009c
#define ASIZ_task_it_real_value 0x00000004
-#define AOFF_task_it_prof_value 0x00000100
+#define AOFF_task_it_prof_value 0x000000a0
#define ASIZ_task_it_prof_value 0x00000004
-#define AOFF_task_it_virt_value 0x00000104
+#define AOFF_task_it_virt_value 0x000000a4
#define ASIZ_task_it_virt_value 0x00000004
-#define AOFF_task_it_real_incr 0x00000108
+#define AOFF_task_it_real_incr 0x000000a8
#define ASIZ_task_it_real_incr 0x00000004
-#define AOFF_task_it_prof_incr 0x0000010c
+#define AOFF_task_it_prof_incr 0x000000ac
#define ASIZ_task_it_prof_incr 0x00000004
-#define AOFF_task_it_virt_incr 0x00000110
+#define AOFF_task_it_virt_incr 0x000000b0
#define ASIZ_task_it_virt_incr 0x00000004
-#define AOFF_task_real_timer 0x00000114
+#define AOFF_task_real_timer 0x000000b4
#define ASIZ_task_real_timer 0x00000014
-#define AOFF_task_times 0x00000128
+#define AOFF_task_times 0x000000c8
#define ASIZ_task_times 0x00000010
-#define AOFF_task_start_time 0x00000138
+#define AOFF_task_start_time 0x000000d8
#define ASIZ_task_start_time 0x00000004
-#define AOFF_task_per_cpu_utime 0x0000013c
+#define AOFF_task_per_cpu_utime 0x000000dc
#define ASIZ_task_per_cpu_utime 0x00000080
-#define AOFF_task_min_flt 0x0000023c
+#define AOFF_task_min_flt 0x000001dc
#define ASIZ_task_min_flt 0x00000004
-#define AOFF_task_maj_flt 0x00000240
+#define AOFF_task_maj_flt 0x000001e0
#define ASIZ_task_maj_flt 0x00000004
-#define AOFF_task_nswap 0x00000244
+#define AOFF_task_nswap 0x000001e4
#define ASIZ_task_nswap 0x00000004
-#define AOFF_task_cmin_flt 0x00000248
+#define AOFF_task_cmin_flt 0x000001e8
#define ASIZ_task_cmin_flt 0x00000004
-#define AOFF_task_cmaj_flt 0x0000024c
+#define AOFF_task_cmaj_flt 0x000001ec
#define ASIZ_task_cmaj_flt 0x00000004
-#define AOFF_task_cnswap 0x00000250
+#define AOFF_task_cnswap 0x000001f0
#define ASIZ_task_cnswap 0x00000004
-#define AOFF_task_swap_address 0x00000258
+#define AOFF_task_swap_address 0x000001f8
#define ASIZ_task_swap_address 0x00000004
-#define AOFF_task_old_maj_flt 0x0000025c
+#define AOFF_task_old_maj_flt 0x000001fc
#define ASIZ_task_old_maj_flt 0x00000004
-#define AOFF_task_dec_flt 0x00000260
+#define AOFF_task_dec_flt 0x00000200
#define ASIZ_task_dec_flt 0x00000004
-#define AOFF_task_swap_cnt 0x00000264
+#define AOFF_task_swap_cnt 0x00000204
#define ASIZ_task_swap_cnt 0x00000004
+#define AOFF_task_uid 0x00000208
+#define ASIZ_task_uid 0x00000002
+#define AOFF_task_euid 0x0000020a
+#define ASIZ_task_euid 0x00000002
+#define AOFF_task_suid 0x0000020c
+#define ASIZ_task_suid 0x00000002
+#define AOFF_task_fsuid 0x0000020e
+#define ASIZ_task_fsuid 0x00000002
+#define AOFF_task_gid 0x00000210
+#define ASIZ_task_gid 0x00000002
+#define AOFF_task_egid 0x00000212
+#define ASIZ_task_egid 0x00000002
+#define AOFF_task_sgid 0x00000214
+#define ASIZ_task_sgid 0x00000002
+#define AOFF_task_fsgid 0x00000216
+#define ASIZ_task_fsgid 0x00000002
+#define AOFF_task_ngroups 0x00000218
+#define ASIZ_task_ngroups 0x00000004
+#define AOFF_task_groups 0x0000021c
+#define ASIZ_task_groups 0x00000040
+#define AOFF_task_cap_effective 0x0000025c
+#define ASIZ_task_cap_effective 0x00000004
+#define AOFF_task_cap_inheritable 0x00000260
+#define ASIZ_task_cap_inheritable 0x00000004
+#define AOFF_task_cap_permitted 0x00000264
+#define ASIZ_task_cap_permitted 0x00000004
#define AOFF_task_rlim 0x00000268
#define ASIZ_task_rlim 0x00000050
#define AOFF_task_used_math 0x000002b8
#define ASIZ_task_used_math 0x00000002
-#define AOFF_task_io_usage 0x000002bc
-#define ASIZ_task_io_usage 0x00000004
-#define AOFF_task_comm 0x000002c0
+#define AOFF_task_comm 0x000002ba
#define ASIZ_task_comm 0x00000010
-#define AOFF_task_link_count 0x000002d0
+#define AOFF_task_link_count 0x000002cc
#define ASIZ_task_link_count 0x00000004
-#define AOFF_task_tty 0x000002d4
+#define AOFF_task_tty 0x000002d0
#define ASIZ_task_tty 0x00000004
-#define AOFF_task_semundo 0x000002d8
+#define AOFF_task_semundo 0x000002d4
#define ASIZ_task_semundo 0x00000004
-#define AOFF_task_semsleeping 0x000002dc
+#define AOFF_task_semsleeping 0x000002d8
#define ASIZ_task_semsleeping 0x00000004
-#define AOFF_task_ldt 0x000002e0
-#define ASIZ_task_ldt 0x00000004
-#define AOFF_task_tss 0x000002e8
-#define ASIZ_task_tss 0x00000390
-#define AOFF_task_fs 0x00000678
+#define AOFF_task_tss 0x000002e0
+#define ASIZ_task_tss 0x00000388
+#define AOFF_task_fs 0x00000668
#define ASIZ_task_fs 0x00000004
-#define AOFF_task_files 0x0000067c
+#define AOFF_task_files 0x0000066c
#define ASIZ_task_files 0x00000004
-#define AOFF_task_mm 0x00000680
+#define AOFF_task_mm 0x00000670
#define ASIZ_task_mm 0x00000004
-#define AOFF_task_sig 0x00000684
+#define AOFF_task_sigmask_lock 0x00000674
+#define ASIZ_task_sigmask_lock 0x00000001
+#define AOFF_task_sig 0x00000678
#define ASIZ_task_sig 0x00000004
-#define AOFF_task_signal 0x00000688
+#define AOFF_task_signal 0x0000067c
#define ASIZ_task_signal 0x00000008
-#define AOFF_task_blocked 0x00000690
+#define AOFF_task_blocked 0x00000684
#define ASIZ_task_blocked 0x00000008
-#define AOFF_task_sigqueue 0x00000698
+#define AOFF_task_sigqueue 0x0000068c
#define ASIZ_task_sigqueue 0x00000004
-#define AOFF_task_sigqueue_tail 0x0000069c
+#define AOFF_task_sigqueue_tail 0x00000690
#define ASIZ_task_sigqueue_tail 0x00000004
-#define AOFF_task_has_cpu 0x000006a0
-#define ASIZ_task_has_cpu 0x00000004
-#define AOFF_task_processor 0x000006a4
-#define ASIZ_task_processor 0x00000004
-#define AOFF_task_last_processor 0x000006a8
-#define ASIZ_task_last_processor 0x00000004
-#define AOFF_task_lock_depth 0x000006ac
-#define ASIZ_task_lock_depth 0x00000004
-#define AOFF_task_sigmask_lock 0x000006b0
-#define ASIZ_task_sigmask_lock 0x00000001
+#define AOFF_task_sas_ss_sp 0x00000694
+#define ASIZ_task_sas_ss_sp 0x00000004
+#define AOFF_task_sas_ss_size 0x00000698
+#define ASIZ_task_sas_ss_size 0x00000004
#define AOFF_mm_mmap 0x00000000
#define ASIZ_mm_mmap 0x00000004
#define AOFF_mm_mmap_cache 0x00000004
@@ -491,6 +503,8 @@
#define ASIZ_mm_def_flags 0x00000004
#define AOFF_mm_cpu_vm_mask 0x00000060
#define ASIZ_mm_cpu_vm_mask 0x00000004
+#define AOFF_mm_segments 0x00000064
+#define ASIZ_mm_segments 0x00000004
#define AOFF_thread_uwinmask 0x00000000
#define ASIZ_thread_uwinmask 0x00000004
#define AOFF_thread_kregs 0x00000004
@@ -525,15 +539,13 @@
#define ASIZ_thread_fpqdepth 0x00000004
#define AOFF_thread_fpqueue 0x000002d8
#define ASIZ_thread_fpqueue 0x00000080
-#define AOFF_thread_sstk_info 0x00000358
-#define ASIZ_thread_sstk_info 0x00000008
-#define AOFF_thread_flags 0x00000360
+#define AOFF_thread_flags 0x00000358
#define ASIZ_thread_flags 0x00000004
-#define AOFF_thread_current_ds 0x00000364
+#define AOFF_thread_current_ds 0x0000035c
#define ASIZ_thread_current_ds 0x00000004
-#define AOFF_thread_core_exec 0x00000368
+#define AOFF_thread_core_exec 0x00000360
#define ASIZ_thread_core_exec 0x00000020
-#define AOFF_thread_new_signal 0x00000388
+#define AOFF_thread_new_signal 0x00000380
#define ASIZ_thread_new_signal 0x00000004
#endif /* __SMP__ */
diff --git a/include/asm-sparc/audioio.h b/include/asm-sparc/audioio.h
new file mode 100644
index 000000000..93e8c33dd
--- /dev/null
+++ b/include/asm-sparc/audioio.h
@@ -0,0 +1,416 @@
+/*
+ * include/asm-sparc/audioio.h
+ *
+ * Sparc Audio Midlayer
+ * Copyright (C) 1996 Thomas K. Dyas (tdyas@noc.rutgers.edu)
+ */
+
+#ifndef _AUDIOIO_H_
+#define _AUDIOIO_H_
+
+/*
+ * SunOS/Solaris /dev/audio interface
+ */
+
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+#include <linux/types.h>
+#include <linux/time.h>
+#include <linux/ioctl.h>
+#endif
+
+/*
+ * This structure contains state information for audio device IO streams.
+ */
+typedef struct audio_prinfo {
+ /*
+ * The following values describe the audio data encoding.
+ */
+ unsigned int sample_rate; /* samples per second */
+ unsigned int channels; /* number of interleaved channels */
+ unsigned int precision; /* bit-width of each sample */
+ unsigned int encoding; /* data encoding method */
+
+ /*
+ * The following values control audio device configuration
+ */
+ unsigned int gain; /* gain level: 0 - 255 */
+ unsigned int port; /* selected I/O port (see below) */
+ unsigned int avail_ports; /* available I/O ports (see below) */
+ unsigned int _xxx[2]; /* Reserved for future use */
+
+ unsigned int buffer_size; /* I/O buffer size */
+
+ /*
+ * The following values describe driver state
+ */
+ unsigned int samples; /* number of samples converted */
+ unsigned int eof; /* End Of File counter (play only) */
+
+ unsigned char pause; /* non-zero for pause, zero to resume */
+ unsigned char error; /* non-zero if overflow/underflow */
+ unsigned char waiting; /* non-zero if a process wants access */
+ unsigned char balance; /* stereo channel balance */
+
+ unsigned short minordev;
+
+ /*
+ * The following values are read-only state flags
+ */
+ unsigned char open; /* non-zero if open access permitted */
+ unsigned char active; /* non-zero if I/O is active */
+} audio_prinfo_t;
+
+
+/*
+ * This structure describes the current state of the audio device.
+ */
+typedef struct audio_info {
+ /*
+ * Per-stream information
+ */
+ audio_prinfo_t play; /* output status information */
+ audio_prinfo_t record; /* input status information */
+
+ /*
+ * Per-unit/channel information
+ */
+ unsigned int monitor_gain; /* input to output mix: 0 - 255 */
+ unsigned char output_muted; /* non-zero if output is muted */
+ unsigned char _xxx[3]; /* Reserved for future use */
+ unsigned int _yyy[3]; /* Reserved for future use */
+} audio_info_t;
+
+
+/*
+ * Audio encoding types
+ */
+#define AUDIO_ENCODING_NONE (0) /* no encoding assigned */
+#define AUDIO_ENCODING_ULAW (1) /* u-law encoding */
+#define AUDIO_ENCODING_ALAW (2) /* A-law encoding */
+#define AUDIO_ENCODING_LINEAR (3) /* Linear PCM encoding */
+#define AUDIO_ENCODING_DVI (104) /* DVI ADPCM */
+#define AUDIO_ENCODING_LINEAR8 (105) /* 8 bit UNSIGNED */
+#define AUDIO_ENCODING_LINEARLE (106) /* Linear PCM LE encoding */
+
+/*
+ * These ranges apply to record, play, and monitor gain values
+ */
+#define AUDIO_MIN_GAIN (0) /* minimum gain value */
+#define AUDIO_MAX_GAIN (255) /* maximum gain value */
+
+/*
+ * These values apply to the balance field to adjust channel gain values
+ */
+#define AUDIO_LEFT_BALANCE (0) /* left channel only */
+#define AUDIO_MID_BALANCE (32) /* equal left/right channel */
+#define AUDIO_RIGHT_BALANCE (64) /* right channel only */
+#define AUDIO_BALANCE_SHIFT (3)
+
+/*
+ * Generic minimum/maximum limits for number of channels, both modes
+ */
+#define AUDIO_MIN_PLAY_CHANNELS (1)
+#define AUDIO_MAX_PLAY_CHANNELS (4)
+#define AUDIO_MIN_REC_CHANNELS (1)
+#define AUDIO_MAX_REC_CHANNELS (4)
+
+/*
+ * Generic minimum/maximum limits for sample precision
+ */
+#define AUDIO_MIN_PLAY_PRECISION (8)
+#define AUDIO_MAX_PLAY_PRECISION (32)
+#define AUDIO_MIN_REC_PRECISION (8)
+#define AUDIO_MAX_REC_PRECISION (32)
+
+/*
+ * Define some convenient names for typical audio ports
+ */
+/*
+ * output ports (several may be enabled simultaneously)
+ */
+#define AUDIO_SPEAKER 0x01 /* output to built-in speaker */
+#define AUDIO_HEADPHONE 0x02 /* output to headphone jack */
+#define AUDIO_LINE_OUT 0x04 /* output to line out */
+
+/*
+ * input ports (usually only one at a time)
+ */
+#define AUDIO_MICROPHONE 0x01 /* input from microphone */
+#define AUDIO_LINE_IN 0x02 /* input from line in */
+#define AUDIO_CD 0x04 /* input from on-board CD inputs */
+#define AUDIO_INTERNAL_CD_IN AUDIO_CD /* input from internal CDROM */
+/* Supposedly an undocumented feature of the 4231 */
+#define AUDIO_ANALOG_LOOPBACK 0x40
+
+
+/*
+ * This macro initializes an audio_info structure to 'harmless' values.
+ * Note that (~0) might not be a harmless value for a flag that was
+ * a signed int.
+ */
+#define AUDIO_INITINFO(i) { \
+ unsigned int *__x__; \
+ for (__x__ = (unsigned int *)(i); \
+ (char *) __x__ < (((char *)(i)) + sizeof (audio_info_t)); \
+ *__x__++ = ~0); \
+}
+
+/*
+ * These allow testing for what the user wants to set
+ */
+#define AUD_INITVALUE (~0)
+#define Modify(X) ((unsigned int)(X) != AUD_INITVALUE)
+#define Modifys(X) ((X) != (unsigned short)AUD_INITVALUE)
+#define Modifyc(X) ((X) != (unsigned char)AUD_INITVALUE)
+
+/*
+ * Parameter for the AUDIO_GETDEV ioctl to determine current
+ * audio devices.
+ */
+#define MAX_AUDIO_DEV_LEN (16)
+typedef struct audio_device {
+ char name[MAX_AUDIO_DEV_LEN];
+ char version[MAX_AUDIO_DEV_LEN];
+ char config[MAX_AUDIO_DEV_LEN];
+} audio_device_t;
+
+
+/*
+ * Ioctl calls for the audio device.
+ */
+
+/*
+ * AUDIO_GETINFO retrieves the current state of the audio device.
+ *
+ * AUDIO_SETINFO copies all fields of the audio_info structure whose
+ * values are not set to the initialized value (-1) to the device state.
+ * It performs an implicit AUDIO_GETINFO to return the new state of the
+ * device. Note that the record.samples and play.samples fields are set
+ * to the last value before the AUDIO_SETINFO took effect. This allows
+ * an application to reset the counters while atomically retrieving the
+ * last value.
+ *
+ * AUDIO_DRAIN suspends the calling process until the write buffers are
+ * empty.
+ *
+ * AUDIO_GETDEV returns a structure of type audio_device_t which contains
+ * three strings. The string "name" is a short identifying string (for
+ * example, the SBus Fcode name string), the string "version" identifies
+ * the current version of the device, and the "config" string identifies
+ * the specific configuration of the audio stream. All fields are
+ * device-dependent -- see the device specific manual pages for details.
+ *
+ * AUDIO_GETDEV_SUNOS returns a number which is an audio device defined
+ * herein (making it not too portable)
+ *
+ * AUDIO_FLUSH stops all playback and recording, clears all queued buffers,
+ * resets error counters, and restarts recording and playback as appropriate
+ * for the current sampling mode.
+ */
+#define AUDIO_GETINFO _IOR('A', 1, audio_info_t)
+#define AUDIO_SETINFO _IOWR('A', 2, audio_info_t)
+#define AUDIO_DRAIN _IO('A', 3)
+#define AUDIO_GETDEV _IOR('A', 4, audio_device_t)
+#define AUDIO_GETDEV_SUNOS _IOR('A', 4, int)
+#define AUDIO_FLUSH _IO('A', 5)
+
+/* Define possible audio hardware configurations for
+ * old SunOS-style AUDIO_GETDEV ioctl */
+#define AUDIO_DEV_UNKNOWN (0) /* not defined */
+#define AUDIO_DEV_AMD (1) /* audioamd device */
+#define AUDIO_DEV_SPEAKERBOX (2) /* dbri device with speakerbox */
+#define AUDIO_DEV_CODEC (3) /* dbri device (internal speaker) */
+#define AUDIO_DEV_CS4231 (5) /* cs4231 device */
+
+/*
+ * The following ioctl sets the audio device into an internal loopback mode,
+ * if the hardware supports this. The argument is TRUE to set loopback,
+ * FALSE to reset to normal operation. If the hardware does not support
+ * internal loopback, the ioctl should fail with EINVAL.
+ */
+#define AUDIO_DIAG_LOOPBACK _IOW('A', 101, int)
+
+#ifdef notneeded
+/*
+ * Structure sent up as a M_PROTO message on trace streams
+ */
+typedef struct audtrace_hdr audtrace_hdr_t;
+struct audtrace_hdr {
+ unsigned int seq; /* Sequence number (per-aud_stream) */
+ int type; /* device-dependent */
+ struct timeval timestamp;
+ char _f[8]; /* filler */
+};
+#endif
+
+/*
+ * Linux kernel internal implementation.
+ */
+
+#ifdef __KERNEL__
+
+#include <linux/types.h>
+#include <linux/fs.h>
+#include <linux/tqueue.h>
+#include <linux/wait.h>
+
+#define SDF_OPEN_WRITE 0x00000001
+#define SDF_OPEN_READ 0x00000002
+
+struct sparcaudio_driver
+{
+ const char * name;
+ struct sparcaudio_operations *ops;
+ void *private;
+ unsigned long flags;
+
+ /* This device */
+ struct linux_sbus_device *dev;
+
+ /* Processes blocked on open() sit here. */
+ struct wait_queue *open_wait;
+
+ /* Task queue for this driver's bottom half. */
+ struct tq_struct tqueue;
+
+ /* Support for a circular queue of output buffers. */
+ __u8 **output_buffers;
+ size_t *output_sizes, output_size;
+ int num_output_buffers, output_front, output_rear;
+ int output_count, output_active, playing_count;
+ struct wait_queue *output_write_wait, *output_drain_wait;
+
+ /* Support for a circular queue of input buffers. */
+ __u8 **input_buffers;
+ int input_offset;
+ int num_input_buffers, input_front, input_rear;
+ int input_count, input_active, recording_count;
+ struct wait_queue *input_read_wait;
+};
+
+struct sparcaudio_operations
+{
+ int (*open)(struct inode *, struct file *, struct sparcaudio_driver *);
+ void (*release)(struct inode *, struct file *, struct
+ sparcaudio_driver *);
+ int (*ioctl)(struct inode *, struct file *, unsigned int,
+ unsigned long, struct sparcaudio_driver *);
+
+ /* Ask driver to begin playing a buffer. */
+ void (*start_output)(struct sparcaudio_driver *, __u8 *,
+ unsigned long);
+
+ /* Ask driver to stop playing a buffer. */
+ void (*stop_output)(struct sparcaudio_driver *);
+
+ /* Ask driver to begin recording into a buffer. */
+ void (*start_input)(struct sparcaudio_driver *, __u8 *, unsigned long);
+
+ /* Ask driver to stop recording. */
+ void (*stop_input)(struct sparcaudio_driver *);
+
+ /* Return driver name/version to caller. (/dev/audio specific) */
+ void (*sunaudio_getdev)(struct sparcaudio_driver *, audio_device_t *);
+
+ /* Get and set the output volume. (0-255) */
+ int (*set_output_volume)(struct sparcaudio_driver *, int);
+ int (*get_output_volume)(struct sparcaudio_driver *);
+
+ /* Get and set the input volume. (0-255) */
+ int (*set_input_volume)(struct sparcaudio_driver *, int);
+ int (*get_input_volume)(struct sparcaudio_driver *);
+
+ /* Get and set the monitor volume. (0-255) */
+ int (*set_monitor_volume)(struct sparcaudio_driver *, int);
+ int (*get_monitor_volume)(struct sparcaudio_driver *);
+
+ /* Get and set the output balance. (0-64) */
+ int (*set_output_balance)(struct sparcaudio_driver *, int);
+ int (*get_output_balance)(struct sparcaudio_driver *);
+
+ /* Get and set the input balance. (0-64) */
+ int (*set_input_balance)(struct sparcaudio_driver *, int);
+ int (*get_input_balance)(struct sparcaudio_driver *);
+
+ /* Get and set the output channels. (1-4) */
+ int (*set_output_channels)(struct sparcaudio_driver *, int);
+ int (*get_output_channels)(struct sparcaudio_driver *);
+
+ /* Get and set the input channels. (1-4) */
+ int (*set_input_channels)(struct sparcaudio_driver *, int);
+ int (*get_input_channels)(struct sparcaudio_driver *);
+
+ /* Get and set the output precision. (8-32) */
+ int (*set_output_precision)(struct sparcaudio_driver *, int);
+ int (*get_output_precision)(struct sparcaudio_driver *);
+
+ /* Get and set the input precision. (8-32) */
+ int (*set_input_precision)(struct sparcaudio_driver *, int);
+ int (*get_input_precision)(struct sparcaudio_driver *);
+
+ /* Get and set the output port. () */
+ int (*set_output_port)(struct sparcaudio_driver *, int);
+ int (*get_output_port)(struct sparcaudio_driver *);
+
+ /* Get and set the input port. () */
+ int (*set_input_port)(struct sparcaudio_driver *, int);
+ int (*get_input_port)(struct sparcaudio_driver *);
+
+ /* Get and set the output encoding. () */
+ int (*set_output_encoding)(struct sparcaudio_driver *, int);
+ int (*get_output_encoding)(struct sparcaudio_driver *);
+
+ /* Get and set the input encoding. () */
+ int (*set_input_encoding)(struct sparcaudio_driver *, int);
+ int (*get_input_encoding)(struct sparcaudio_driver *);
+
+ /* Get and set the output rate. () */
+ int (*set_output_rate)(struct sparcaudio_driver *, int);
+ int (*get_output_rate)(struct sparcaudio_driver *);
+
+ /* Get and set the input rate. () */
+ int (*set_input_rate)(struct sparcaudio_driver *, int);
+ int (*get_input_rate)(struct sparcaudio_driver *);
+
+ /* Return driver number to caller. (SunOS /dev/audio specific) */
+ int (*sunaudio_getdev_sunos)(struct sparcaudio_driver *);
+
+ /* Get available ports */
+ int (*get_output_ports)(struct sparcaudio_driver *);
+ int (*get_input_ports)(struct sparcaudio_driver *);
+
+ /* Get and set output mute */
+ int (*set_output_muted)(struct sparcaudio_driver *, int);
+ int (*get_output_muted)(struct sparcaudio_driver *);
+};
+
+extern int register_sparcaudio_driver(struct sparcaudio_driver *);
+extern int unregister_sparcaudio_driver(struct sparcaudio_driver *);
+extern void sparcaudio_output_done(struct sparcaudio_driver *, int);
+extern void sparcaudio_input_done(struct sparcaudio_driver *);
+extern int sparcaudio_init(void);
+extern int amd7930_init(void);
+extern int cs4231_init(void);
+
+#endif
+
+/* Macros to convert between mixer stereo volumes and gain (mono) */
+#define s_to_m(a) (((((a) >> 8) & 0x7f) + ((a) & 0x7f)) / 2)
+#define m_to_s(a) (((a) << 8) + (a))
+
+/* convert mixer stereo volume to balance */
+#define s_to_b(a) (AUDIO_RIGHT_BALANCE * ((((a) >> 8) & 0xff) / (((((a) >> 8) & 0xff) + ((a) & 0xff)) / 2)))
+
+/* convert mixer stereo volume to audio gain */
+#define s_to_g(a) (((((a) >> 8) & 0xff) + ((a) & 0xff)) / 2)
+
+/* convert gain a and balance b to mixer volume */
+#define b_to_s(a,b) ((a * (b / AUDIO_RIGHT_BALANCE) << 8) + (a * (1 - (b / AUDIO_RIGHT_BALANCE))))
+
+#define SPARCAUDIO_MIXER_MINOR 0
+#define SPARCAUDIO_DSP16_MINOR 1
+#define SPARCAUDIO_DSP_MINOR 3
+#define SPARCAUDIO_AUDIO_MINOR 4
+#define SPARCAUDIO_AUDIOCTL_MINOR 5
+#define SPARCAUDIO_STATUS_MINOR 6
+#endif
diff --git a/include/asm-sparc/bitops.h b/include/asm-sparc/bitops.h
index dbc259cb6..7c3e4d0da 100644
--- a/include/asm-sparc/bitops.h
+++ b/include/asm-sparc/bitops.h
@@ -1,4 +1,4 @@
-/* $Id: bitops.h,v 1.49 1998/02/23 01:46:44 rth Exp $
+/* $Id: bitops.h,v 1.51 1998/07/26 03:05:37 davem Exp $
* bitops.h: Bit string operations on the Sparc.
*
* Copyright 1995 David S. Miller (davem@caip.rutgers.edu)
@@ -182,6 +182,27 @@ extern __inline__ unsigned long ffz(unsigned long word)
return result;
}
+#ifdef __KERNEL__
+
+/*
+ * ffs: find first bit set. This is defined the same way as
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+
+#define ffs(x) generic_ffs(x)
+
+/*
+ * hweightN: returns the hamming weight (i.e. the number
+ * of bits set) of a N-bit word
+ */
+
+#define hweight32(x) generic_hweight32(x)
+#define hweight16(x) generic_hweight16(x)
+#define hweight8(x) generic_hweight8(x)
+
+#endif /* __KERNEL__ */
+
/* find_next_zero_bit() finds the first zero bit in a bit string of length
* 'size' bits, starting the search at bit 'offset'. This is largely based
* on Linus's ALPHA routines, which are pretty portable BTW.
diff --git a/include/asm-sparc/dma.h b/include/asm-sparc/dma.h
index a9f43c034..cb45374d6 100644
--- a/include/asm-sparc/dma.h
+++ b/include/asm-sparc/dma.h
@@ -1,4 +1,4 @@
-/* $Id: dma.h,v 1.25 1998/02/09 13:27:01 jj Exp $
+/* $Id: dma.h,v 1.26 1998/04/13 07:27:05 davem Exp $
* include/asm-sparc/dma.h
*
* Copyright 1995 (C) David S. Miller (davem@caip.rutgers.edu)
@@ -82,7 +82,7 @@ extern struct Linux_SBus_DMA *dma_chain;
#define DMA_ISESC1(dma) ((dma)->revision == dvmaesc1)
/* Main routines in dma.c */
-extern unsigned long dvma_init(struct linux_sbus *, unsigned long);
+extern void dvma_init(struct linux_sbus *);
/* Fields in the cond_reg register */
/* First, the version identification bits */
diff --git a/include/asm-sparc/elf.h b/include/asm-sparc/elf.h
index ac1fc8300..fb680d30f 100644
--- a/include/asm-sparc/elf.h
+++ b/include/asm-sparc/elf.h
@@ -1,4 +1,4 @@
-/* $Id: elf.h,v 1.15 1998/03/23 08:41:32 jj Exp $ */
+/* $Id: elf.h,v 1.17 1998/05/11 08:40:10 davem Exp $ */
#ifndef __ASMSPARC_ELF_H
#define __ASMSPARC_ELF_H
diff --git a/include/asm-sparc/fbio.h b/include/asm-sparc/fbio.h
index 6d2f1e730..443e3b184 100644
--- a/include/asm-sparc/fbio.h
+++ b/include/asm-sparc/fbio.h
@@ -56,8 +56,13 @@ struct fbcmap {
unsigned char *blue;
};
+#ifdef __KERNEL__
+#define FBIOPUTCMAP_SPARC _IOW('F', 3, struct fbcmap)
+#define FBIOGETCMAP_SPARC _IOW('F', 4, struct fbcmap)
+#else
#define FBIOPUTCMAP _IOW('F', 3, struct fbcmap)
#define FBIOGETCMAP _IOW('F', 4, struct fbcmap)
+#endif
/* # of device specific values */
#define FB_ATTR_NDEVSPECIFIC 8
diff --git a/include/asm-sparc/irq.h b/include/asm-sparc/irq.h
index 526aeef9c..342c90e64 100644
--- a/include/asm-sparc/irq.h
+++ b/include/asm-sparc/irq.h
@@ -1,4 +1,4 @@
-/* $Id: irq.h,v 1.22 1998/02/05 14:20:05 jj Exp $
+/* $Id: irq.h,v 1.25 1998/06/04 09:55:04 jj Exp $
* irq.h: IRQ registers on the Sparc.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
@@ -12,16 +12,10 @@
#include <asm/system.h> /* For NCPUS */
#include <asm/btfixup.h>
-/* This is used for sun4d */
-struct devid_cookie {
- /* Caller specifies these. */
- void *real_dev_id; /* What dev_id would usually contain. */
- void *bus_cookie; /* linux_sbus_device *, etc. */
- /* Return values. */
- unsigned int ret_ino;
-};
-
-#define SA_DCOOKIE 0x10000
+#define __irq_ino(irq) irq
+#define __irq_pil(irq) irq
+BTFIXUPDEF_CALL(char *, __irq_itoa, unsigned int)
+#define __irq_itoa(irq) BTFIXUP_CALL(__irq_itoa)(irq)
#define NR_IRQS 15
@@ -67,11 +61,6 @@ extern __inline__ void irq_exit(int cpu, int irq)
#define irq_exit(cpu, irq) (local_irq_count[cpu]--)
#endif
-static __inline__ int irq_cannonicalize(int irq)
-{
- return irq;
-}
-
/* Dave Redman (djhr@tadpole.co.uk)
* changed these to function pointers.. it saves cycles and will allow
* the irq dependencies to be split into different files at a later date
diff --git a/include/asm-sparc/linux_logo.h b/include/asm-sparc/linux_logo.h
index a8b8ff1b4..2d400d9fd 100644
--- a/include/asm-sparc/linux_logo.h
+++ b/include/asm-sparc/linux_logo.h
@@ -1,9 +1,9 @@
-/* $Id: linux_logo.h,v 1.1 1997/04/16 17:51:24 jj Exp $
+/* $Id: linux_logo.h,v 1.5 1998/07/30 16:30:40 jj Exp $
* include/asm-sparc/linux_logo.h: This is a linux logo
* to be displayed on boot.
*
* Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
- * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
+ * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
*
* You can put anything here, but:
* LINUX_LOGO_COLORS has to be less than 224
@@ -23,902 +23,904 @@
#define linux_logo_banner "Linux/SPARC version " UTS_RELEASE
-#define LINUX_LOGO_COLORS 221
+#define LINUX_LOGO_COLORS 219
+
+#ifdef INCLUDE_LINUX_LOGO_DATA
unsigned char linux_logo_red[] __initdata = {
- 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xE7, 0xE5, 0xE3,
- 0xCA, 0xD4, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xE5,
- 0xF1, 0xED, 0xEE, 0xE6, 0xC6, 0xDA, 0xDD, 0xE5,
- 0xD9, 0xC6, 0xE3, 0xD0, 0xC6, 0xBA, 0xB0, 0xB6,
- 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xB0, 0xAD,
- 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA0, 0x9D,
- 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x99, 0x9A, 0x99,
- 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D,
- 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0x0D, 0x03,
- 0x66, 0x44, 0x24, 0x08, 0xD6, 0xE6, 0xE9, 0xE6,
- 0xE7, 0xCA, 0xDC, 0xDB, 0xD5, 0xD0, 0xC9, 0xE2,
- 0xD5, 0xC6, 0xC4, 0xB3, 0xB2, 0xB9, 0xA9, 0x9A,
- 0xB2, 0x9D, 0xE8, 0xEC, 0xF5, 0xF5, 0xF4, 0xF4,
- 0xEC, 0xEE, 0xF0, 0xF5, 0xE0, 0xD6, 0xC5, 0xC2,
- 0xD9, 0xD5, 0xD8, 0xD6, 0xF6, 0xF4, 0xED, 0xEC,
- 0xEB, 0xF1, 0xF6, 0xF5, 0xF5, 0xEE, 0xEF, 0xEC,
- 0xE7, 0xE3, 0xE6, 0xD6, 0xDD, 0xC3, 0xD6, 0xD7,
- 0xCD, 0xCA, 0xC3, 0xAC, 0x95, 0x99, 0xB7, 0xA3,
- 0x8B, 0x88, 0x95, 0x8A, 0x94, 0xD2, 0xCC, 0xC4,
- 0xA8, 0x8E, 0x8F, 0xAE, 0xB8, 0xAC, 0xB6, 0xB4,
- 0xAD, 0xA5, 0xA0, 0x9B, 0x8B, 0xA3, 0x94, 0x87,
- 0x85, 0x89, 0x53, 0x80, 0x7D, 0x7C, 0x7A, 0x78,
- 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x67, 0x65, 0x62,
- 0x4B, 0x5B, 0x5F, 0x53, 0x56, 0x52, 0x4F, 0x46,
- 0x42, 0x0F, 0x75, 0x78, 0x7D, 0x72, 0x5F, 0x6E,
- 0x7A, 0x75, 0x6A, 0x58, 0x48, 0x4F, 0x00, 0x2B,
- 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x3B, 0x11,
- 0x1D, 0x14, 0x06, 0x02, 0x00
+ 0x03, 0x9E, 0xEC, 0xEE, 0xC4, 0xDA, 0x50, 0xC9,
+ 0xC5, 0xED, 0x65, 0xE3, 0xE3, 0xF4, 0x24, 0xA4,
+ 0xEC, 0xEE, 0x94, 0xE5, 0xE3, 0x6A, 0xA6, 0xC4,
+ 0xDC, 0xE5, 0x13, 0xF3, 0xD1, 0xFD, 0xE2, 0xDB,
+ 0xA0, 0xC2, 0xEC, 0xB8, 0xC2, 0xD5, 0xF2, 0xF4,
+ 0xC5, 0x3E, 0xF1, 0x1B, 0x55, 0xF5, 0xCF, 0xF7,
+ 0xA9, 0xB4, 0xEB, 0x6C, 0x0A, 0x74, 0xB4, 0xF7,
+ 0xF0, 0xF5, 0xD4, 0xF2, 0xCE, 0xF5, 0xC7, 0x26,
+ 0x5B, 0xF4, 0xBC, 0x7F, 0xAB, 0x82, 0x94, 0xE5,
+ 0xFC, 0x3A, 0xF2, 0xFD, 0xF0, 0x1C, 0xEF, 0xD4,
+ 0xF3, 0x0F, 0xED, 0xF7, 0xC9, 0x49, 0xC3, 0xBA,
+ 0xC8, 0xD4, 0xE7, 0xF3, 0xF5, 0xA7, 0xEC, 0xF9,
+ 0xFA, 0x0A, 0xF5, 0xCF, 0xFC, 0xEA, 0xE1, 0xA6,
+ 0xD6, 0xBC, 0xF8, 0xF7, 0xB4, 0xEB, 0xDC, 0x84,
+ 0xCE, 0xBA, 0x45, 0xD6, 0x86, 0x50, 0x96, 0xC6,
+ 0x8C, 0x6E, 0xE8, 0x60, 0x3C, 0x70, 0xF0, 0x93,
+ 0x7C, 0xDA, 0xDA, 0x9C, 0xBA, 0x6D, 0x4D, 0x2B,
+ 0x2F, 0x8B, 0xE0, 0xCC, 0xDA, 0x5C, 0x3D, 0xEE,
+ 0xDB, 0x46, 0xAC, 0x96, 0xCE, 0xD1, 0xE3, 0xF1,
+ 0x96, 0x7A, 0x80, 0xB2, 0xBA, 0xB6, 0xD2, 0x1E,
+ 0x7E, 0xAA, 0xC4, 0xF0, 0x96, 0x65, 0x9E, 0xC2,
+ 0xAA, 0xF5, 0xF2, 0xE9, 0xE6, 0xD1, 0x35, 0xC7,
+ 0xF6, 0xB6, 0xE8, 0x82, 0xBE, 0xC2, 0xF2, 0x9E,
+ 0xC7, 0xB4, 0x0F, 0xF7, 0xE8, 0xD8, 0xCC, 0x9C,
+ 0xD8, 0xD8, 0xA0, 0xEA, 0xC6, 0xA8, 0xE0, 0xEC,
+ 0xD1, 0xF7, 0xF4, 0xFC, 0x75, 0xBD, 0xDC, 0xDD,
+ 0xCC, 0xE1, 0xFA, 0xEE, 0xAA, 0xEC, 0xF2, 0xB8,
+ 0xE2, 0xCD, 0x87
};
unsigned char linux_logo_green[] __initdata = {
- 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xE7, 0xE5, 0xE3,
- 0xCA, 0xD4, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xD3,
- 0xDA, 0xD4, 0xD7, 0xCC, 0xC1, 0xCC, 0xCB, 0xC9,
- 0xC5, 0xBC, 0xBC, 0xBB, 0xB7, 0xA5, 0xB0, 0xB6,
- 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xAD, 0xAD,
- 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA0, 0x95,
- 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x99, 0x9A, 0x99,
- 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D,
- 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0x08, 0x02,
- 0x53, 0x2E, 0x19, 0x06, 0xC6, 0xC8, 0xCF, 0xBD,
- 0xB3, 0xB6, 0xB4, 0xAB, 0xA5, 0xA3, 0x9B, 0xB6,
- 0xA7, 0x99, 0x92, 0xA4, 0x9E, 0x9D, 0x98, 0x8C,
- 0x8A, 0x86, 0xCD, 0xCC, 0xC9, 0xD7, 0xCA, 0xC4,
- 0xCA, 0xC3, 0xC7, 0xC3, 0xC8, 0xB4, 0x91, 0x8E,
- 0x8A, 0x82, 0x87, 0x85, 0xBD, 0xBF, 0xB6, 0xBC,
- 0xAE, 0xB7, 0xBC, 0xB8, 0xBF, 0xB6, 0xBC, 0xB5,
- 0xAB, 0xA6, 0xAD, 0xB2, 0xA5, 0x87, 0x9C, 0x96,
- 0x95, 0x8E, 0x87, 0x8F, 0x86, 0x86, 0x8E, 0x80,
- 0x7A, 0x70, 0x7B, 0x78, 0x78, 0x7F, 0x77, 0x6F,
- 0x70, 0x76, 0x59, 0x77, 0x68, 0x64, 0x7B, 0x7C,
- 0x75, 0x6D, 0x77, 0x69, 0x65, 0x5F, 0x5B, 0x54,
- 0x4F, 0x5B, 0x39, 0x80, 0x7D, 0x7C, 0x7A, 0x78,
- 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x67, 0x65, 0x62,
- 0x4B, 0x5B, 0x5F, 0x53, 0x56, 0x52, 0x4F, 0x46,
- 0x42, 0x0B, 0x69, 0x66, 0x64, 0x57, 0x4A, 0x4E,
- 0x55, 0x4B, 0x46, 0x3B, 0x30, 0x33, 0x00, 0x2B,
- 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x29, 0x0D,
- 0x1D, 0x14, 0x06, 0x02, 0x00
+ 0x03, 0x88, 0xC4, 0xE2, 0x85, 0xC2, 0x44, 0xA3,
+ 0xA9, 0xD3, 0x65, 0xA6, 0xC5, 0xF3, 0x24, 0xA4,
+ 0xB4, 0xD6, 0x63, 0xD5, 0xB7, 0x44, 0x86, 0x94,
+ 0xC2, 0xE4, 0x14, 0xB6, 0xD2, 0xFB, 0xD4, 0xB2,
+ 0x73, 0x96, 0xDB, 0x92, 0xC2, 0x95, 0xC2, 0xDA,
+ 0xA4, 0x36, 0xD4, 0x0E, 0x55, 0xF4, 0xC4, 0xE9,
+ 0x75, 0xB4, 0xBC, 0x52, 0x0A, 0x74, 0x84, 0xEB,
+ 0xDC, 0xDA, 0xA2, 0xD6, 0x9B, 0xBD, 0xB7, 0x12,
+ 0x44, 0xCA, 0x8C, 0x65, 0x7B, 0x54, 0x94, 0xAB,
+ 0xF4, 0x25, 0xC4, 0xFD, 0xE4, 0x1C, 0xDD, 0xAB,
+ 0xBD, 0x06, 0xCB, 0xD6, 0xCA, 0x33, 0x8C, 0xA2,
+ 0x92, 0x9C, 0xBC, 0xDB, 0xCD, 0x6E, 0xEC, 0xEE,
+ 0xBC, 0x03, 0xDA, 0xCE, 0xF4, 0xB6, 0xDB, 0x92,
+ 0xAD, 0xBC, 0xDE, 0xD5, 0x7B, 0xAE, 0x9D, 0x84,
+ 0xB6, 0x96, 0x44, 0xBA, 0x6E, 0x3C, 0x7A, 0xB2,
+ 0x8C, 0x4C, 0xCE, 0x4C, 0x3C, 0x5A, 0xCA, 0x6D,
+ 0x7C, 0xCE, 0xDA, 0x9C, 0xAA, 0x6D, 0x4D, 0x2B,
+ 0x1B, 0x5E, 0xCB, 0xAC, 0xBE, 0x5C, 0x2E, 0xDC,
+ 0xBD, 0x3E, 0xAC, 0x82, 0xB6, 0xBE, 0xD3, 0xBD,
+ 0x72, 0x62, 0x6C, 0x82, 0x92, 0x9E, 0xB0, 0x13,
+ 0x4A, 0x8E, 0xBE, 0xCE, 0x86, 0x45, 0x6B, 0xAA,
+ 0x9A, 0xC5, 0xC6, 0xDA, 0xC5, 0xC4, 0x34, 0x9B,
+ 0xCC, 0xAC, 0xC4, 0x76, 0x9A, 0x9E, 0xEE, 0x62,
+ 0xC6, 0x76, 0x0D, 0xE4, 0xDA, 0xD5, 0xA5, 0x92,
+ 0xCD, 0xB2, 0x7C, 0xCC, 0xBE, 0x7E, 0xDC, 0xD6,
+ 0xB9, 0xE3, 0xD4, 0xF6, 0x55, 0x82, 0xA4, 0xAA,
+ 0x8D, 0xBB, 0xCE, 0xD5, 0x8A, 0xDB, 0xD4, 0x8B,
+ 0xCA, 0x93, 0x63
};
unsigned char linux_logo_blue[] __initdata = {
- 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xEE, 0xE5, 0xDE,
- 0xD7, 0xD3, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xB5,
- 0xB0, 0xA6, 0xAC, 0x9B, 0xB5, 0xB5, 0xAE, 0x84,
- 0x90, 0xA9, 0x81, 0x8D, 0x96, 0x86, 0xB0, 0xB6,
- 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xA7, 0xAD,
- 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA5, 0x87,
- 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x9A, 0x9A, 0x99,
- 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D,
- 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0xC8, 0xD7,
- 0x9B, 0x8E, 0x8C, 0xB2, 0x77, 0x77, 0x4E, 0x77,
- 0x69, 0x71, 0x78, 0x6B, 0x65, 0x66, 0x64, 0x59,
- 0x5C, 0x5A, 0x48, 0x72, 0x7B, 0x6B, 0x67, 0x6E,
- 0x42, 0x5B, 0x29, 0x36, 0x25, 0x10, 0x17, 0x14,
- 0x19, 0x16, 0x13, 0x0E, 0x08, 0x2E, 0x2E, 0x3D,
- 0x24, 0x24, 0x24, 0x24, 0x13, 0x12, 0x14, 0x14,
- 0x0E, 0x08, 0x0D, 0x0F, 0x08, 0x0D, 0x0E, 0x08,
- 0x08, 0x0C, 0x06, 0x06, 0x07, 0x16, 0x07, 0x0E,
- 0x08, 0x0A, 0x07, 0x0D, 0x2D, 0x3E, 0x09, 0x4E,
- 0x68, 0x52, 0x56, 0x58, 0x4B, 0x22, 0x20, 0x20,
- 0x27, 0x39, 0x28, 0x19, 0x1E, 0x1E, 0x08, 0x06,
- 0x07, 0x09, 0x08, 0x08, 0x05, 0x1D, 0x1F, 0x17,
- 0x18, 0x06, 0x79, 0x80, 0x7D, 0x7C, 0x7A, 0x78,
- 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x68, 0x65, 0x62,
- 0x4B, 0x5B, 0x5F, 0x55, 0x56, 0x52, 0x4F, 0x46,
- 0x42, 0x5A, 0x14, 0x23, 0x3D, 0x2B, 0x21, 0x14,
- 0x06, 0x04, 0x03, 0x07, 0x09, 0x13, 0x2A, 0x3A,
- 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x07, 0x09,
- 0x1D, 0x14, 0x06, 0x02, 0x00
+ 0x04, 0x28, 0x10, 0x8C, 0x0B, 0x84, 0x14, 0x1A,
+ 0x77, 0x1F, 0x64, 0x0E, 0x85, 0xD2, 0x24, 0xA4,
+ 0x0F, 0x54, 0x0C, 0x7C, 0x3F, 0x04, 0x20, 0x0D,
+ 0x54, 0xDF, 0x14, 0x0D, 0xD1, 0xE9, 0xB0, 0x11,
+ 0x0A, 0x40, 0x57, 0x14, 0xC3, 0x0C, 0x04, 0x12,
+ 0x50, 0x0C, 0x7D, 0x05, 0x55, 0xF2, 0xBA, 0xC7,
+ 0x09, 0xB4, 0x0E, 0x24, 0x0B, 0x74, 0x0C, 0xB6,
+ 0x80, 0x48, 0x10, 0x34, 0x0F, 0x0C, 0xA0, 0x04,
+ 0x19, 0x10, 0x0E, 0x14, 0x0E, 0x05, 0x94, 0x0E,
+ 0xCA, 0x0B, 0x46, 0xFB, 0xB4, 0x1C, 0x9B, 0x1A,
+ 0x21, 0x09, 0x14, 0x4D, 0xCB, 0x08, 0x11, 0x7C,
+ 0x20, 0x10, 0x24, 0x66, 0x79, 0x07, 0xEA, 0xC9,
+ 0x0C, 0x08, 0x38, 0xC4, 0xD8, 0x24, 0xBE, 0x6C,
+ 0x51, 0xBB, 0x8C, 0x36, 0x0A, 0x0F, 0x0C, 0x84,
+ 0x3C, 0x54, 0x44, 0x7C, 0x28, 0x0E, 0x28, 0x7F,
+ 0x8C, 0x0F, 0x54, 0x24, 0x3C, 0x18, 0x54, 0x17,
+ 0x7C, 0x9C, 0xDA, 0x9C, 0x7C, 0x6C, 0x4D, 0x2C,
+ 0x09, 0x0E, 0x8A, 0x50, 0x4C, 0x5B, 0x14, 0xAC,
+ 0x19, 0x3C, 0xAC, 0x5C, 0x64, 0x97, 0x94, 0x37,
+ 0x29, 0x3C, 0x44, 0x3C, 0x2C, 0x7C, 0x70, 0x07,
+ 0x04, 0x29, 0xB2, 0x64, 0x74, 0x07, 0x07, 0x2C,
+ 0x74, 0x2E, 0x6C, 0xA4, 0x29, 0x9E, 0x34, 0x27,
+ 0x2F, 0x98, 0x48, 0x5C, 0x0C, 0x5C, 0xE8, 0x04,
+ 0xC2, 0x0C, 0x0A, 0xB2, 0x74, 0xCB, 0x46, 0x78,
+ 0xB4, 0x5C, 0x18, 0x80, 0x8C, 0x24, 0xD9, 0xAC,
+ 0x87, 0x99, 0x1D, 0xE8, 0x14, 0x0D, 0x10, 0x17,
+ 0x0A, 0x67, 0x3C, 0x68, 0x3C, 0x69, 0x90, 0x22,
+ 0x6C, 0x0D, 0x17
};
unsigned char linux_logo[] __initdata = {
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x57,
- 0x58, 0x58, 0x59, 0x5C, 0x5D, 0x5F, 0x60, 0x61,
- 0x62, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63,
- 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5E, 0x5E,
- 0x5E, 0x5D, 0x5D, 0x5C, 0x5D, 0x5B, 0x58, 0x58,
- 0x58, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x57,
- 0x54, 0x56, 0x57, 0x67, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x67, 0x4C,
- 0x4A, 0x49, 0x4A, 0x49, 0x4A, 0x49, 0x49, 0x4A,
- 0x4A, 0x4B, 0x4B, 0x4B, 0x4C, 0x50, 0x51, 0x52,
- 0x54, 0x54, 0x56, 0x57, 0x57, 0x57, 0x57, 0x58,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x58, 0x56, 0x56, 0x53,
- 0x52, 0x53, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB,
- 0x4B, 0x4B, 0x4B, 0x4A, 0x49, 0x4A, 0x4A, 0x49,
- 0x49, 0x49, 0x48, 0x49, 0x49, 0x4A, 0x4A, 0x4B,
- 0x4C, 0x4D, 0x52, 0x54, 0x56, 0x55, 0x57, 0x58,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50,
- 0x50, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF0, 0xF4, 0xFB,
- 0xFC, 0x67, 0x53, 0x50, 0x4D, 0x4C, 0x4C, 0x4C,
- 0x4B, 0x4A, 0x4A, 0x48, 0x49, 0x48, 0x48, 0x49,
- 0x49, 0x49, 0x4B, 0x4C, 0x50, 0x52, 0x53, 0x56,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x55, 0x54, 0x53, 0x51, 0x51, 0x50, 0x4C, 0x4D,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0xD2, 0xD7, 0xF5,
- 0xFC, 0xFC, 0x5D, 0x5D, 0x5C, 0x5C, 0x59, 0x58,
- 0x58, 0x56, 0x52, 0x4C, 0x4B, 0x4A, 0x4A, 0x48,
- 0x48, 0x48, 0x48, 0x48, 0x49, 0x4B, 0x4D, 0x51,
- 0x54, 0x56, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x55, 0x54,
- 0x53, 0x52, 0x51, 0x4D, 0x4D, 0x4D, 0x50, 0x50,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0x64, 0xD9, 0xF5,
- 0xF9, 0xFC, 0xFC, 0x64, 0x63, 0x62, 0x61, 0x61,
- 0x61, 0x60, 0x5E, 0x5B, 0x5A, 0x54, 0x52, 0x4C,
- 0x4B, 0x49, 0x49, 0x47, 0x47, 0x48, 0x49, 0x4B,
- 0x4C, 0x51, 0x53, 0x56, 0x57, 0x58, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x57, 0x57, 0x55, 0x53, 0x53,
- 0x51, 0x50, 0x50, 0x50, 0x50, 0x50, 0x53, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0xF5, 0xF9, 0xFC,
- 0xFC, 0xFC, 0xFC, 0x64, 0x64, 0x64, 0x64, 0x64,
- 0x64, 0x64, 0x64, 0x63, 0x61, 0x61, 0x5E, 0x59,
- 0x55, 0x52, 0x4C, 0x4A, 0x49, 0x47, 0x48, 0x48,
- 0x49, 0x4B, 0x4D, 0x51, 0x54, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x58, 0x55, 0x54, 0x54, 0x52, 0x51,
- 0x51, 0x51, 0x51, 0x51, 0x53, 0x54, 0x59, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xF7, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0x60, 0x60, 0x60, 0x61,
- 0x62, 0x63, 0x64, 0x64, 0x65, 0x65, 0x64, 0x63,
- 0x61, 0x5E, 0x59, 0x56, 0x4D, 0x4B, 0x48, 0x48,
- 0x48, 0x48, 0x49, 0x4B, 0x50, 0x53, 0x56, 0x56,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x56, 0x54, 0x53, 0x52, 0x51, 0x51,
- 0x51, 0x52, 0x53, 0x55, 0x59, 0x5D, 0x5E, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0x4C, 0x4E, 0x51, 0x52,
- 0x57, 0x5A, 0x5E, 0x60, 0x61, 0x63, 0x65, 0xCB,
- 0x64, 0x64, 0x63, 0x60, 0x5C, 0x57, 0x50, 0x4B,
- 0x48, 0x47, 0x47, 0x47, 0x4A, 0x4C, 0x52, 0x53,
- 0x54, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x55, 0x54, 0x53, 0x53, 0x51, 0x52, 0x52, 0x53,
- 0x53, 0x57, 0x5A, 0x5D, 0x5E, 0x5E, 0x60, 0xFC,
- 0xFC, 0xFC, 0xFB, 0xF9, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFA, 0xF9, 0xF5, 0xFB, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0x45, 0x3F, 0x3F,
- 0x45, 0x48, 0x4B, 0x4D, 0x54, 0x5A, 0x5E, 0x61,
- 0x63, 0xCB, 0xCB, 0x65, 0x64, 0x62, 0x5E, 0x57,
- 0x50, 0x4B, 0x48, 0x47, 0x47, 0x48, 0x4B, 0x4D,
- 0x51, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55,
- 0x54, 0x54, 0x53, 0x53, 0x52, 0x53, 0x54, 0x57,
- 0x59, 0x5C, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0xFC,
- 0xFC, 0xFA, 0xFC, 0xFA, 0xE0, 0xFC, 0xFC, 0xFC,
- 0xFB, 0xFB, 0xFB, 0xDF, 0xD8, 0xF9, 0xE0, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0x4C, 0x4A, 0x48,
- 0x48, 0x3E, 0x44, 0x43, 0x3F, 0x47, 0x4B, 0x52,
- 0x5A, 0x5E, 0x62, 0x64, 0xCB, 0xCB, 0x64, 0x61,
- 0x5E, 0x57, 0x4D, 0x49, 0x47, 0x47, 0x48, 0x4A,
- 0x4C, 0x52, 0x54, 0x56, 0x57, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55,
- 0x54, 0x53, 0x53, 0x54, 0x54, 0x55, 0x58, 0x5B,
- 0x5C, 0x5D, 0x5E, 0x5D, 0x5D, 0x5B, 0x58, 0xFC,
- 0xFC, 0xD8, 0x4C, 0x60, 0xFC, 0xF5, 0xFC, 0xFC,
- 0xFC, 0xF7, 0x5F, 0x48, 0x48, 0x2C, 0xF8, 0xF9,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x4B, 0x4A, 0x49,
- 0x49, 0x49, 0x49, 0x47, 0x3E, 0x44, 0x42, 0x3F,
- 0x3E, 0x4B, 0x54, 0x5C, 0x61, 0x64, 0xCB, 0xCB,
- 0x64, 0x61, 0x5D, 0x53, 0x4B, 0x49, 0x47, 0x47,
- 0x49, 0x4B, 0x50, 0x53, 0x56, 0x57, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, 0x55, 0x54,
- 0x53, 0x53, 0x54, 0x56, 0x58, 0x5A, 0x5B, 0x5D,
- 0x5D, 0x5D, 0x5C, 0x5A, 0x54, 0x52, 0x4C, 0xFC,
- 0xF7, 0x4E, 0x2D, 0x29, 0x4E, 0xFC, 0xFC, 0xFC,
- 0xFB, 0x5F, 0x26, 0x24, 0x20, 0x2E, 0x65, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x45, 0x3F, 0x45,
- 0x3E, 0x47, 0x47, 0x47, 0x47, 0x47, 0x3E, 0x44,
- 0x43, 0x40, 0x44, 0x49, 0x51, 0x5C, 0x62, 0x64,
- 0xCB, 0xCB, 0x63, 0x60, 0x58, 0x50, 0x49, 0x48,
- 0x48, 0x48, 0x4A, 0x4D, 0x53, 0x54, 0x57, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, 0x54,
- 0x54, 0x54, 0x55, 0x57, 0x59, 0x5B, 0x5C, 0x5D,
- 0x5C, 0x5A, 0x54, 0x51, 0x4C, 0x4C, 0x54, 0xFC,
- 0xF9, 0x23, 0xDB, 0x2D, 0x23, 0xFA, 0xFB, 0xFA,
- 0xF5, 0x27, 0x21, 0xD9, 0xF8, 0x20, 0x21, 0xFB,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x5D, 0x58, 0x55,
- 0x50, 0x48, 0x45, 0x43, 0x44, 0x44, 0x45, 0x45,
- 0x3E, 0x3F, 0x43, 0x41, 0x3F, 0x48, 0x52, 0x5D,
- 0x63, 0x65, 0xCB, 0x65, 0x61, 0x5D, 0x52, 0x4B,
- 0x48, 0x47, 0x47, 0x49, 0x4C, 0x51, 0x54, 0x57,
- 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, 0x54,
- 0x54, 0x58, 0x5A, 0x59, 0x5B, 0x5B, 0x5B, 0x5A,
- 0x55, 0x52, 0x4D, 0x4D, 0x55, 0x5B, 0x5D, 0xFC,
- 0xF1, 0xF9, 0xFC, 0xD4, 0x21, 0xCC, 0xF7, 0xF8,
- 0xF2, 0x21, 0xD9, 0xFC, 0xF2, 0xFB, 0x21, 0x45,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0xD1, 0xD0, 0xCD,
- 0xCC, 0x63, 0x5E, 0x58, 0x50, 0x47, 0x43, 0x3F,
- 0x3F, 0x3F, 0x3F, 0x3F, 0x40, 0x41, 0x3F, 0x4A,
- 0x56, 0x5E, 0x64, 0xCB, 0x65, 0x63, 0x5E, 0x56,
- 0x4C, 0x48, 0x47, 0x47, 0x49, 0x4C, 0x51, 0x54,
- 0x58, 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54,
- 0x57, 0x5A, 0x5A, 0x5C, 0x5B, 0x5A, 0x58, 0x54,
- 0x51, 0x4C, 0x55, 0x5D, 0x5D, 0x5B, 0x54, 0xFC,
- 0xF0, 0xF9, 0xFC, 0x65, 0x45, 0xCD, 0xFB, 0xFB,
- 0xF8, 0x26, 0xFB, 0xFC, 0xFC, 0xFC, 0x21, 0x27,
- 0xFB, 0xFC, 0xFC, 0xFC, 0xFB, 0xD7, 0x35, 0x34,
- 0x2F, 0x35, 0x36, 0x2F, 0x2F, 0x36, 0x2F, 0x2F,
- 0x36, 0x36, 0x35, 0x35, 0x43, 0x42, 0x41, 0x2E,
- 0x45, 0x4C, 0x5B, 0x62, 0x65, 0xCC, 0x64, 0x60,
- 0x58, 0x4D, 0x49, 0x47, 0x47, 0x49, 0x4C, 0x51,
- 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, 0x57,
- 0x58, 0x5A, 0x5A, 0x5B, 0x5A, 0x55, 0x54, 0x51,
- 0x53, 0x5C, 0x5D, 0x5D, 0x54, 0x4B, 0x4D, 0xFC,
- 0xFC, 0x44, 0xFC, 0xFB, 0x7B, 0xAB, 0xA8, 0xAE,
- 0xAB, 0x7F, 0xFC, 0xFC, 0xFB, 0xFB, 0x22, 0x2A,
- 0xFC, 0xFC, 0xFC, 0xFC, 0x36, 0x2F, 0x30, 0x30,
- 0x32, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30,
- 0x30, 0x30, 0x30, 0x30, 0x2F, 0x2F, 0x40, 0x41,
- 0x2E, 0x40, 0x48, 0x56, 0x5F, 0x64, 0xCC, 0x65,
- 0x61, 0x59, 0x50, 0x49, 0x47, 0x47, 0x49, 0x4C,
- 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58,
- 0x5A, 0x5A, 0x5A, 0x58, 0x55, 0x52, 0x51, 0x5A,
- 0x5D, 0x5D, 0x57, 0x4C, 0x51, 0x54, 0x5D, 0xFC,
- 0xFC, 0x2A, 0xFC, 0xC9, 0xAA, 0x8B, 0x8A, 0x8C,
- 0xAB, 0x8C, 0x8C, 0xFB, 0xFB, 0x23, 0x20, 0xF1,
- 0xFC, 0xFC, 0xFC, 0x3B, 0x33, 0x33, 0x32, 0x32,
- 0x31, 0x32, 0x30, 0x32, 0x32, 0x32, 0x32, 0x30,
- 0x31, 0x31, 0x31, 0x32, 0x33, 0x33, 0x3C, 0x41,
- 0x41, 0x2E, 0x2D, 0x45, 0x4D, 0x5D, 0x63, 0xCC,
- 0x65, 0x62, 0x5D, 0x51, 0x49, 0x47, 0x47, 0x4A,
- 0x59, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58, 0x58,
- 0x5A, 0x5A, 0x58, 0x55, 0x53, 0x53, 0x5C, 0x5E,
- 0x59, 0x51, 0x4E, 0x54, 0x59, 0x5E, 0x62, 0xFC,
- 0xFC, 0xDB, 0xAA, 0xA1, 0x95, 0x9C, 0x8C, 0x88,
- 0x82, 0x83, 0x83, 0x8C, 0x88, 0xAE, 0xB9, 0xFB,
- 0xFC, 0xFC, 0xFC, 0x3C, 0x3B, 0x72, 0x38, 0x33,
- 0x33, 0x33, 0x31, 0x33, 0x31, 0x31, 0x31, 0x31,
- 0x33, 0x33, 0x38, 0x33, 0x72, 0x3B, 0x44, 0x2E,
- 0x41, 0x2E, 0x2E, 0x2D, 0x43, 0x4B, 0x5B, 0x63,
- 0xCB, 0xCC, 0x63, 0x5D, 0x51, 0x49, 0x47, 0x49,
- 0x5C, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58,
- 0x58, 0x58, 0x57, 0x53, 0x58, 0x5D, 0x5E, 0x55,
- 0x51, 0x53, 0x58, 0x5E, 0x60, 0x63, 0x64, 0xFC,
- 0xFC, 0xC0, 0xA6, 0x9D, 0x8B, 0x9C, 0x8C, 0x8C,
- 0x6E, 0x83, 0x88, 0x8C, 0x8C, 0x8C, 0x83, 0xE8,
- 0xFB, 0xFC, 0xFC, 0xFC, 0x33, 0x70, 0x70, 0x6F,
- 0x6F, 0x6F, 0x6F, 0x3A, 0x6F, 0x6D, 0x6F, 0x6F,
- 0x70, 0x6F, 0x6F, 0x70, 0x6F, 0x32, 0x5A, 0x48,
- 0x41, 0x2D, 0x2D, 0x2D, 0x2C, 0x41, 0x49, 0x5A,
- 0x62, 0xCB, 0xCB, 0x63, 0x5D, 0x50, 0x49, 0x4A,
- 0x5C, 0x58, 0x58, 0x57, 0x55, 0x57, 0x57, 0x57,
- 0x57, 0x55, 0x56, 0x59, 0x5E, 0x5C, 0x52, 0x53,
- 0x55, 0x5B, 0x5E, 0x61, 0x63, 0x64, 0x63, 0xFC,
- 0xE8, 0xBF, 0xA4, 0x99, 0x9C, 0x8C, 0x88, 0x88,
- 0x6E, 0x88, 0x8C, 0x8C, 0x8C, 0xC2, 0xA6, 0xC4,
- 0xFC, 0xFC, 0xFC, 0xFC, 0x36, 0x3A, 0x6F, 0x70,
- 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
- 0x70, 0x70, 0x70, 0x70, 0x37, 0x32, 0xCD, 0x5E,
- 0x4C, 0x43, 0x2C, 0x2D, 0x2D, 0x2C, 0x2E, 0x47,
- 0x57, 0x61, 0x65, 0xCC, 0x63, 0x5C, 0x50, 0x4D,
- 0x5C, 0x5A, 0x57, 0x55, 0x55, 0x55, 0x58, 0x58,
- 0x55, 0x54, 0x5B, 0x5E, 0x5D, 0x53, 0x53, 0x55,
- 0x5D, 0x5E, 0x61, 0x61, 0x61, 0x61, 0x5E, 0xFC,
- 0xEA, 0xBE, 0xA4, 0x9B, 0x8B, 0x85, 0x8C, 0x6E,
- 0x8C, 0x8C, 0x8C, 0xA3, 0xAA, 0xA4, 0xA4, 0xE9,
- 0xFB, 0xFC, 0xFC, 0xFC, 0x36, 0x6D, 0x70, 0x73,
- 0x70, 0x70, 0x70, 0x73, 0x73, 0x73, 0x73, 0x70,
- 0x70, 0x70, 0x73, 0x70, 0x37, 0x38, 0xD1, 0xCF,
- 0x61, 0x4D, 0x44, 0x2C, 0x2D, 0x2E, 0x2C, 0x2E,
- 0x3E, 0x56, 0x61, 0xCB, 0xCC, 0x62, 0x5B, 0x57,
- 0x59, 0x58, 0x55, 0x54, 0x54, 0x55, 0x58, 0x58,
- 0x58, 0x5B, 0x5E, 0x5B, 0x53, 0x55, 0x55, 0x5C,
- 0x5E, 0x61, 0x61, 0x60, 0x5D, 0x5A, 0x4E, 0xFC,
- 0xFC, 0xEA, 0xAA, 0x9C, 0x8A, 0x85, 0x82, 0x8C,
- 0x8C, 0xA8, 0xEB, 0xA8, 0xA4, 0xA4, 0xAA, 0xFC,
- 0xFC, 0xFC, 0x64, 0xFB, 0x39, 0x31, 0x72, 0x78,
- 0x73, 0x78, 0x73, 0x74, 0x74, 0x74, 0x74, 0x73,
- 0x78, 0x70, 0x73, 0x73, 0x33, 0xCC, 0xD2, 0xD1,
- 0xCE, 0x62, 0x53, 0x3F, 0x2D, 0x2D, 0x41, 0x2C,
- 0x2E, 0x3E, 0x56, 0x62, 0xCB, 0xCB, 0x61, 0x5D,
- 0x54, 0x54, 0x54, 0x54, 0x56, 0x58, 0x58, 0x58,
- 0x5C, 0x5E, 0x5A, 0x55, 0x58, 0x58, 0x5B, 0x5E,
- 0x61, 0x5E, 0x5D, 0x5A, 0x52, 0x55, 0xCD, 0xFC,
- 0xFC, 0x34, 0xC9, 0xE8, 0xA8, 0xAE, 0xC2, 0xE8,
- 0xC3, 0xA6, 0xA7, 0xA6, 0xAA, 0x78, 0x2E, 0x42,
- 0xFC, 0xFC, 0xD2, 0x64, 0xF8, 0x31, 0x72, 0x73,
- 0x73, 0x73, 0x73, 0x74, 0x75, 0x75, 0x74, 0x73,
- 0x73, 0x73, 0x73, 0x72, 0x33, 0x5C, 0x64, 0xD2,
- 0xD1, 0xCF, 0x63, 0x54, 0x3F, 0x2C, 0x41, 0x41,
- 0x2C, 0x2E, 0x47, 0x58, 0x63, 0xCB, 0xCB, 0x62,
- 0x52, 0x53, 0x53, 0x56, 0x58, 0x58, 0x5A, 0x5B,
- 0x5E, 0x5A, 0x57, 0x58, 0x58, 0x58, 0x60, 0x60,
- 0x5D, 0x5A, 0x55, 0x4E, 0x64, 0xD2, 0xD1, 0xFC,
- 0xFC, 0x41, 0x3E, 0xC1, 0xC0, 0xA3, 0xA6, 0xA7,
- 0xA7, 0xA9, 0xAA, 0xB8, 0x2E, 0x3F, 0x2C, 0x41,
- 0xFC, 0xFC, 0xF7, 0xCE, 0xCD, 0x36, 0x72, 0x73,
- 0x74, 0x75, 0x78, 0x75, 0x75, 0x75, 0x74, 0x74,
- 0x74, 0x74, 0x78, 0x72, 0x6D, 0x49, 0x59, 0xCB,
- 0xD1, 0xD1, 0xD2, 0xCB, 0x56, 0x3F, 0x2C, 0x41,
- 0x40, 0x2D, 0x2E, 0x49, 0x5B, 0x64, 0xCC, 0x64,
- 0x51, 0x53, 0x53, 0x55, 0x58, 0x59, 0x5B, 0x5E,
- 0x59, 0x58, 0x58, 0x58, 0x55, 0x60, 0x60, 0x5C,
- 0x5A, 0x53, 0x5B, 0xD0, 0xD3, 0xD3, 0xD3, 0xFB,
- 0xFC, 0x40, 0x41, 0x45, 0xC4, 0xC0, 0xBE, 0xBE,
- 0xC1, 0xC0, 0x3C, 0x47, 0x2E, 0x21, 0x22, 0x20,
- 0x65, 0xFC, 0xFC, 0xFC, 0xFC, 0x6D, 0x72, 0x75,
- 0x78, 0x76, 0x75, 0x79, 0x76, 0x76, 0x76, 0x76,
- 0x75, 0x75, 0x75, 0x72, 0x6D, 0x2E, 0x48, 0x5D,
- 0xCE, 0xD1, 0xD4, 0xD3, 0xCB, 0x56, 0x43, 0x2C,
- 0x42, 0x43, 0x2E, 0x2E, 0x4A, 0x5D, 0x64, 0x64,
- 0x50, 0x52, 0x56, 0x58, 0x5C, 0x5D, 0x5E, 0x5D,
- 0x5A, 0x58, 0x58, 0x55, 0x61, 0x60, 0x58, 0x58,
- 0x4E, 0x61, 0xD1, 0xD4, 0xD4, 0xD1, 0xEE, 0xFC,
- 0xFC, 0x2B, 0x29, 0x2E, 0x3F, 0xB0, 0xAD, 0x81,
- 0x46, 0x2D, 0x46, 0x2C, 0x24, 0x22, 0x22, 0x23,
- 0x25, 0xFC, 0xFC, 0xFC, 0xFC, 0x6E, 0x73, 0x76,
- 0x76, 0x79, 0x79, 0x79, 0x76, 0x76, 0x79, 0x76,
- 0x79, 0x79, 0x79, 0x74, 0x3F, 0x41, 0x2C, 0x48,
- 0x5F, 0xCF, 0xD5, 0xD7, 0xD6, 0xCD, 0x57, 0x40,
- 0x2E, 0x3F, 0x44, 0x2E, 0x41, 0x4C, 0x60, 0x61,
- 0x51, 0x53, 0x58, 0x5C, 0x5D, 0x5E, 0x5D, 0x5C,
- 0x58, 0x57, 0x54, 0x5F, 0x5E, 0x55, 0x55, 0x52,
- 0x64, 0xD4, 0xD5, 0xD4, 0xD1, 0x5D, 0xFA, 0xFB,
- 0xF4, 0x21, 0x24, 0x41, 0x40, 0x44, 0x2E, 0x2E,
- 0x42, 0x41, 0x2A, 0x24, 0x22, 0x22, 0x22, 0x22,
- 0x23, 0xD9, 0xFC, 0xFC, 0xFC, 0xFC, 0xE5, 0xB8,
- 0x8F, 0x8F, 0x7A, 0x8F, 0x7A, 0x8F, 0x7A, 0x8F,
- 0x8F, 0x8F, 0xB8, 0xE5, 0x3F, 0x3E, 0x43, 0x2C,
- 0x48, 0x61, 0xD1, 0xD7, 0xD9, 0xD7, 0xD0, 0x57,
- 0x41, 0x2E, 0x3E, 0x44, 0x2D, 0x40, 0x52, 0x5D,
- 0x53, 0x55, 0x59, 0x5D, 0x5E, 0x5E, 0x5D, 0x5A,
- 0x57, 0x53, 0x5E, 0x5E, 0x54, 0x53, 0x54, 0x65,
- 0xD5, 0xD6, 0xD4, 0xCE, 0x53, 0xFB, 0xF9, 0xFC,
- 0x24, 0x22, 0x23, 0x23, 0x41, 0x42, 0x2E, 0x40,
- 0x2B, 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x23, 0x23, 0xFC, 0xFC, 0xFC, 0xFC, 0xE7, 0xBD,
- 0xB5, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
- 0x93, 0xB5, 0xC6, 0xEB, 0x2D, 0x47, 0x4A, 0x47,
- 0x2C, 0x3E, 0x61, 0xD4, 0xDC, 0xDC, 0xDA, 0xCF,
- 0x54, 0x41, 0x41, 0x3E, 0x45, 0x2C, 0x3F, 0x4A,
- 0x58, 0x5A, 0x5C, 0x5F, 0x60, 0x5E, 0x5D, 0x57,
- 0x51, 0x5D, 0x5D, 0x51, 0x53, 0x53, 0xCB, 0xD5,
- 0xD6, 0xD5, 0x63, 0x55, 0xFC, 0xFC, 0xFC, 0x2C,
- 0x23, 0x22, 0x23, 0x22, 0x20, 0x2D, 0x2C, 0x26,
- 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x21, 0xF0, 0xFC, 0xFC, 0xFC, 0xE2, 0xC6,
- 0xB5, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
- 0x93, 0x93, 0xC7, 0xE3, 0x3E, 0x2E, 0x49, 0x52,
- 0x4C, 0x41, 0x44, 0x62, 0xD6, 0xDE, 0xDE, 0xD9,
- 0xD0, 0x51, 0x2E, 0x40, 0x47, 0x44, 0x2C, 0x42,
- 0x5D, 0x5D, 0x5F, 0x60, 0x60, 0x5D, 0x57, 0x51,
- 0x58, 0x5D, 0x4E, 0x52, 0x55, 0x64, 0xD5, 0xD6,
- 0xD4, 0x61, 0x59, 0x6B, 0xFC, 0xFC, 0xFC, 0x21,
- 0x23, 0x22, 0x23, 0x22, 0x23, 0x21, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x21, 0x24, 0xFC, 0xFC, 0xFC, 0xE2, 0xC7,
- 0xB5, 0x90, 0x93, 0x93, 0x93, 0x90, 0x93, 0x93,
- 0x90, 0xB5, 0xC8, 0xE4, 0x5F, 0x45, 0x2E, 0x4D,
- 0x57, 0x57, 0x44, 0x43, 0x63, 0xDA, 0xDF, 0xDF,
- 0xD9, 0xCE, 0x4C, 0x2C, 0x3F, 0x3E, 0x40, 0x40,
- 0x60, 0x5E, 0x61, 0x61, 0x5E, 0x5B, 0x53, 0x52,
- 0x5C, 0x52, 0x52, 0x55, 0x61, 0xD4, 0xD5, 0xD1,
- 0x5E, 0x5B, 0x5C, 0xFB, 0xFC, 0xFC, 0x2A, 0x21,
- 0x23, 0x22, 0x23, 0x22, 0x22, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0xFB, 0xFC, 0xFC, 0xB3, 0xC8,
- 0xB5, 0x90, 0x92, 0xB5, 0x93, 0x93, 0xB5, 0x93,
- 0x92, 0xB5, 0xC8, 0xB9, 0xD0, 0x5E, 0x44, 0x40,
- 0x52, 0x58, 0x57, 0x48, 0x40, 0x63, 0xD9, 0xE0,
- 0xE0, 0xD9, 0xCB, 0x49, 0x2D, 0x3F, 0x45, 0x3F,
- 0x63, 0x61, 0x62, 0x60, 0x5E, 0x55, 0x4D, 0x59,
- 0x53, 0x4E, 0x54, 0x5D, 0xD2, 0xD4, 0xD2, 0x5E,
- 0x5C, 0x5D, 0xFC, 0xFC, 0xFC, 0xF8, 0x29, 0x23,
- 0x23, 0x23, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x23, 0x22, 0x22, 0x23, 0x23, 0x23, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0xF0, 0xFC, 0xFC, 0xB3, 0xC7,
- 0xB5, 0x93, 0xB5, 0x93, 0x93, 0x91, 0x93, 0x93,
- 0x91, 0xB5, 0xC7, 0xAD, 0xD6, 0xD2, 0x5E, 0x3F,
- 0x3F, 0x57, 0x57, 0x58, 0x4A, 0x41, 0x64, 0xDC,
- 0xF1, 0xDF, 0xDA, 0x61, 0x45, 0x2E, 0x43, 0x47,
- 0xCB, 0x63, 0x62, 0x5F, 0x58, 0x51, 0x53, 0x54,
- 0x4C, 0x52, 0x5C, 0xCD, 0xD3, 0xD2, 0x60, 0x5D,
- 0x5D, 0xFB, 0xFC, 0xFC, 0xFC, 0xDB, 0x49, 0x24,
- 0x21, 0x23, 0x23, 0x22, 0x26, 0x26, 0x2A, 0x24,
- 0x22, 0x23, 0x22, 0x21, 0x24, 0x26, 0x26, 0x2A,
- 0x29, 0x2B, 0x24, 0x25, 0xFC, 0xFC, 0xB3, 0xC5,
- 0x91, 0x91, 0x92, 0x91, 0x92, 0x92, 0x93, 0x93,
- 0x91, 0x93, 0xC6, 0xAD, 0xDC, 0xD9, 0xD4, 0x60,
- 0x43, 0x45, 0x58, 0x58, 0x57, 0x4B, 0x43, 0xCC,
- 0xDD, 0xF1, 0xD8, 0xD5, 0x5D, 0x43, 0x41, 0x47,
- 0xCD, 0x63, 0x62, 0x5D, 0x54, 0x4C, 0x55, 0x4B,
- 0x51, 0x58, 0x62, 0xD0, 0xD0, 0x62, 0x5D, 0x5D,
- 0x67, 0xFC, 0xFC, 0xFC, 0xFC, 0x58, 0x4E, 0x28,
- 0x2A, 0x20, 0x23, 0x22, 0x23, 0x2A, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x23, 0x25, 0x2A, 0x2E, 0x2D,
- 0x2E, 0x2E, 0x2E, 0x23, 0xFA, 0xFC, 0xB2, 0xBD,
- 0xB5, 0x90, 0x91, 0x93, 0x92, 0x90, 0x91, 0x93,
- 0x92, 0x91, 0xBD, 0xAD, 0xDE, 0xE0, 0xD8, 0xD7,
- 0x61, 0x40, 0x48, 0x58, 0x58, 0x58, 0x48, 0x44,
- 0xCF, 0xDE, 0xE0, 0xDD, 0xD0, 0x52, 0x41, 0x45,
- 0xCD, 0x63, 0x61, 0x58, 0x4D, 0x51, 0x4C, 0x4B,
- 0x54, 0x5D, 0xCC, 0xCE, 0x63, 0x61, 0x5D, 0x5D,
- 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, 0x4B, 0x27, 0x21,
- 0x22, 0x22, 0x23, 0x22, 0x22, 0x24, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x20,
- 0x27, 0x2B, 0x41, 0x2B, 0x23, 0xFC, 0xB2, 0xB6,
- 0x93, 0x90, 0x92, 0xB5, 0x92, 0x90, 0xB5, 0x90,
- 0x92, 0x93, 0xBC, 0xAD, 0xDC, 0xF1, 0xF3, 0xF0,
- 0xD9, 0x61, 0x41, 0x4A, 0x58, 0x57, 0x57, 0x44,
- 0x49, 0xD2, 0xDD, 0xD8, 0xDA, 0x63, 0x4A, 0x45,
- 0xCC, 0x63, 0x5E, 0x52, 0x4B, 0x4C, 0x49, 0x51,
- 0x5C, 0x61, 0xCD, 0x65, 0x63, 0x5E, 0x4E, 0xCF,
- 0xFB, 0xFB, 0xF0, 0xFC, 0xD2, 0x2A, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x26, 0x41, 0x27, 0xF9, 0x81, 0xB7,
- 0xB5, 0x91, 0x92, 0xB5, 0x91, 0xB5, 0x93, 0xB5,
- 0x93, 0xB6, 0xB7, 0xB9, 0xCB, 0xD8, 0xF3, 0xF2,
- 0xF2, 0xDB, 0x61, 0x2D, 0x51, 0x58, 0x57, 0x58,
- 0x41, 0x51, 0xD4, 0xDB, 0xDC, 0xD1, 0x5B, 0x4C,
- 0xCB, 0x62, 0x59, 0x4C, 0x4A, 0x49, 0x4B, 0x55,
- 0x60, 0x64, 0xCC, 0x64, 0x5E, 0x55, 0x60, 0xE1,
- 0xFB, 0xF8, 0xFC, 0xFC, 0x21, 0x22, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x21, 0x24, 0x2D, 0x21, 0xB4, 0xBB,
- 0xB6, 0xB5, 0xB6, 0xB7, 0xB7, 0xB7, 0xB7, 0xB6,
- 0xB6, 0xB6, 0xBB, 0xB9, 0x45, 0xCB, 0xDF, 0xF3,
- 0xF3, 0xF3, 0xDB, 0x5E, 0x2C, 0x51, 0x58, 0x58,
- 0x52, 0x2D, 0x5C, 0xD4, 0xD9, 0xD5, 0x63, 0x58,
- 0x64, 0x60, 0x53, 0x49, 0x4A, 0x49, 0x52, 0x5C,
- 0x63, 0xCD, 0xCD, 0x63, 0x5C, 0x4E, 0x65, 0xFC,
- 0xFC, 0xF5, 0xFC, 0xD2, 0x23, 0x22, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x21, 0x22, 0x25, 0x29, 0xB3, 0xC7,
- 0xB5, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
- 0xB6, 0xB5, 0xC7, 0xAD, 0x57, 0x3F, 0xCB, 0xF0,
- 0xF3, 0xF3, 0xF2, 0xD9, 0x58, 0x41, 0x4C, 0x58,
- 0x57, 0x47, 0x42, 0x62, 0xD4, 0xD4, 0xCC, 0x60,
- 0x63, 0x5D, 0x50, 0x47, 0x48, 0x4B, 0x58, 0x60,
- 0xCC, 0xCE, 0xCD, 0x60, 0x53, 0x5C, 0x62, 0xFB,
- 0xF9, 0xFC, 0xFC, 0x21, 0x23, 0x22, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x23, 0x23, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, 0x81, 0xC7,
- 0xB7, 0xB7, 0xBC, 0xB7, 0xBC, 0xBC, 0xBC, 0xB7,
- 0xB7, 0xB7, 0xC8, 0x80, 0x58, 0x57, 0x40, 0xCE,
- 0xF3, 0xF2, 0xF2, 0xF0, 0xD5, 0x4C, 0x3F, 0x4B,
- 0x52, 0x50, 0x2D, 0x4B, 0x64, 0xD2, 0xCC, 0x61,
- 0x60, 0x58, 0x4A, 0x47, 0x47, 0x4C, 0x59, 0x64,
- 0xD0, 0xD0, 0x64, 0x59, 0x49, 0x5D, 0xFB, 0xFC,
- 0xD9, 0xFC, 0xD6, 0x23, 0x22, 0x22, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x23, 0x21, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, 0xB4, 0xC8,
- 0xBD, 0xB7, 0xBD, 0xBC, 0xBD, 0xC5, 0xBC, 0xC5,
- 0xBC, 0xBD, 0xC7, 0xAC, 0x58, 0x57, 0x58, 0x2C,
- 0xD1, 0xF0, 0xF3, 0xF3, 0xE0, 0xCD, 0x45, 0x3E,
- 0x48, 0x4B, 0x3F, 0x41, 0x56, 0x64, 0x65, 0x62,
- 0x5D, 0x52, 0x47, 0x48, 0x48, 0x53, 0x60, 0xCC,
- 0xD2, 0xD0, 0x63, 0x52, 0x4E, 0x53, 0xFB, 0xFB,
- 0xFC, 0xFC, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x23, 0x20, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, 0xB4, 0xC7,
- 0xC5, 0xBC, 0xC5, 0xBD, 0xC5, 0xC5, 0xBD, 0xC5,
- 0xBC, 0xC6, 0xC7, 0xB9, 0x58, 0x57, 0x58, 0x57,
- 0x2D, 0xD4, 0xF1, 0xF2, 0xF0, 0xD9, 0x5D, 0x47,
- 0x48, 0x3F, 0x42, 0x2C, 0x48, 0x5C, 0x5F, 0x60,
- 0x58, 0x50, 0x47, 0x4A, 0x49, 0x55, 0x63, 0xD0,
- 0xD2, 0xCD, 0x5D, 0x49, 0x4E, 0xE1, 0xFC, 0xF0,
- 0xFC, 0xF8, 0x22, 0x22, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x20, 0x21, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x22,
- 0x23, 0x22, 0x23, 0x23, 0x23, 0x22, 0xC4, 0xC8,
- 0xBD, 0xBD, 0xC6, 0xBD, 0xC6, 0xC6, 0xC5, 0xC6,
- 0xBD, 0xC6, 0xC7, 0xE4, 0x54, 0x57, 0x58, 0x57,
- 0x57, 0x43, 0xD7, 0xE0, 0xF1, 0xD8, 0xCD, 0x4B,
- 0x4A, 0x47, 0x42, 0x2C, 0x3F, 0x4D, 0x58, 0x5C,
- 0x52, 0x4B, 0x48, 0x4B, 0x4A, 0x58, 0xCB, 0xD3,
- 0xD2, 0xCD, 0x58, 0x47, 0x4A, 0xFC, 0xFC, 0xFB,
- 0xFC, 0x2B, 0x22, 0x22, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x26, 0x21, 0x21, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0xE5, 0xC8,
- 0xBA, 0xC5, 0xC6, 0xC6, 0xC6, 0xC7, 0xC6, 0xC7,
- 0xC5, 0xC6, 0xC8, 0xE5, 0x2E, 0x54, 0x58, 0x57,
- 0x57, 0x4C, 0x4D, 0xDA, 0xD8, 0xD8, 0xD4, 0x5C,
- 0x4B, 0x4B, 0x3F, 0x42, 0x44, 0x4A, 0x51, 0x58,
- 0x4B, 0x48, 0x4B, 0x51, 0x4D, 0x5F, 0xD0, 0xD1,
- 0xD0, 0x64, 0x51, 0x44, 0x6B, 0xFC, 0xFB, 0xFC,
- 0xFC, 0x21, 0x23, 0x22, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x22, 0x23, 0x26, 0x21, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0xE5, 0xED,
- 0xE7, 0xBA, 0xC8, 0xC6, 0xC6, 0xC6, 0xC6, 0xC7,
- 0xC7, 0xE5, 0xED, 0xE6, 0x61, 0x41, 0x52, 0x58,
- 0x58, 0x57, 0x45, 0x5E, 0xD7, 0xDD, 0xD5, 0x60,
- 0x4B, 0x4C, 0x48, 0x4D, 0x4D, 0x50, 0x4D, 0x56,
- 0x4A, 0x3E, 0x53, 0x53, 0x52, 0x63, 0xD3, 0xD0,
- 0xCE, 0x60, 0x4A, 0x45, 0xFC, 0xFC, 0xF7, 0xFC,
- 0xFC, 0x21, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x21, 0x2A, 0x20, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x22, 0x21, 0x23, 0xEB, 0xF6,
- 0xF6, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED,
- 0xF6, 0xF6, 0xF6, 0xE6, 0xDB, 0x58, 0x45, 0x4B,
- 0x58, 0x57, 0x4D, 0x4B, 0x64, 0xD4, 0xD0, 0x5C,
- 0x48, 0x51, 0x4C, 0x5D, 0x5E, 0x5C, 0x56, 0x59,
- 0x3E, 0x4A, 0x58, 0x54, 0x52, 0x65, 0xD3, 0xD0,
- 0xCF, 0x5D, 0x48, 0xFC, 0xFC, 0xFC, 0xFA, 0xFC,
- 0xFC, 0x21, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x21, 0x2A, 0x21, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x22, 0x21, 0x4F, 0xE6, 0xC6,
- 0xC6, 0xBD, 0xC6, 0xBD, 0xBD, 0xBD, 0xBD, 0xC6,
- 0xC5, 0xBA, 0xC7, 0xE6, 0xF2, 0xD4, 0x49, 0x4B,
- 0x3E, 0x4D, 0x52, 0x3E, 0x52, 0x63, 0x64, 0x56,
- 0x48, 0x54, 0x4D, 0x61, 0xCC, 0xCC, 0x60, 0x60,
- 0x47, 0x4D, 0x5C, 0x53, 0x58, 0xCF, 0xD1, 0xCF,
- 0xD0, 0x59, 0x45, 0xFC, 0xFC, 0xFC, 0xEF, 0xF9,
- 0xFC, 0x21, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
- 0x23, 0x22, 0x23, 0x2A, 0x21, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x22, 0x23, 0x4F, 0xE4, 0xB9,
- 0xAF, 0x80, 0x80, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F,
- 0x80, 0xB4, 0xB9, 0xE4, 0x7F, 0xDE, 0x61, 0x52,
- 0x54, 0x48, 0x3F, 0x43, 0x4D, 0x56, 0x59, 0x4B,
- 0x3E, 0x58, 0x53, 0x61, 0xD3, 0xD4, 0xCF, 0xCD,
- 0x4C, 0x58, 0x5F, 0x53, 0x5E, 0xD3, 0xD0, 0xCE,
- 0xCE, 0x52, 0x3F, 0xFC, 0xFC, 0xFC, 0xF7, 0x65,
- 0xFA, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
- 0x23, 0x22, 0x21, 0x2A, 0x23, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x23, 0x22, 0x23, 0x22, 0x21, 0xB1, 0xE4, 0xE6,
- 0x7C, 0xB1, 0x7C, 0xB1, 0xB2, 0xB2, 0xB3, 0x3D,
- 0xB3, 0x3C, 0xE5, 0xB3, 0xB0, 0xF1, 0xD0, 0x58,
- 0x5D, 0x4D, 0x40, 0x41, 0x48, 0x51, 0x4C, 0x3F,
- 0x3F, 0x4D, 0x5A, 0x5A, 0xD5, 0xD9, 0xD7, 0xD4,
- 0x57, 0x5E, 0x61, 0x4C, 0x63, 0xD4, 0xCF, 0xCE,
- 0xCB, 0x4D, 0x4A, 0xFC, 0xFC, 0xFC, 0xFC, 0xF0,
- 0xFB, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
- 0x23, 0x22, 0x23, 0x2A, 0x21, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x22, 0x23, 0x22, 0x23, 0x23, 0xB1, 0x81, 0x7D,
- 0x39, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x36,
- 0x36, 0x36, 0x7C, 0xB2, 0xB0, 0xDF, 0xD2, 0x57,
- 0x60, 0x59, 0x5B, 0x59, 0x52, 0x4C, 0x4A, 0x40,
- 0x42, 0x4A, 0x53, 0x4D, 0xD2, 0xDE, 0xDE, 0xD9,
- 0x5E, 0x5E, 0x60, 0x4A, 0xCD, 0xD1, 0xCF, 0xCE,
- 0x63, 0x49, 0x5C, 0xFB, 0xE8, 0x89, 0x9F, 0xFC,
- 0xD6, 0x21, 0x21, 0x23, 0x22, 0x22, 0x23, 0x22,
- 0x23, 0x22, 0x21, 0x2A, 0x22, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x7F, 0xB9,
- 0x71, 0x6C, 0x38, 0x38, 0x33, 0x33, 0x33, 0x38,
- 0x38, 0x71, 0xAD, 0xE4, 0xD3, 0xDA, 0xCC, 0x52,
- 0x63, 0x60, 0xCE, 0xD4, 0xCF, 0x60, 0x4C, 0x40,
- 0x3F, 0x45, 0x4B, 0x5A, 0xCB, 0xD8, 0xDE, 0xDC,
- 0x5E, 0x5E, 0x5F, 0x4C, 0xD2, 0xD2, 0xCF, 0xCF,
- 0x61, 0x45, 0x5E, 0xA7, 0x9D, 0x95, 0x8B, 0x99,
- 0xFC, 0x41, 0x21, 0x23, 0x23, 0x22, 0x23, 0x22,
- 0x23, 0x22, 0x23, 0x2A, 0x23, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x77, 0x77, 0xF6,
- 0xFC, 0x7D, 0x7D, 0x7E, 0x7E, 0x7E, 0x7E, 0x7D,
- 0x7D, 0xFC, 0x47, 0x64, 0xD0, 0xD0, 0x5D, 0x4B,
- 0x62, 0xCC, 0xD1, 0xDE, 0xDE, 0xD4, 0x5E, 0x43,
- 0x3F, 0x3E, 0x48, 0x53, 0x58, 0xDB, 0xD8, 0xDC,
- 0x5E, 0x5E, 0x5E, 0x53, 0xD4, 0xD2, 0xD0, 0xD0,
- 0x5E, 0x49, 0xA7, 0xA6, 0x89, 0x95, 0x8B, 0x9C,
- 0x9C, 0xFB, 0xD4, 0x22, 0x22, 0x22, 0x22, 0x23,
- 0x22, 0x23, 0x23, 0x2A, 0x22, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x23, 0x22, 0x23, 0x23, 0x98, 0x8C, 0x8C, 0x88,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8,
- 0xE9, 0x9C, 0x48, 0x5C, 0xD0, 0xCB, 0x48, 0x49,
- 0x5B, 0xCB, 0xCD, 0xE0, 0xF1, 0xDD, 0xD0, 0x4A,
- 0x41, 0x47, 0x45, 0x4C, 0x48, 0xD7, 0xDE, 0xDC,
- 0x5E, 0x5E, 0x5A, 0x58, 0xD1, 0xD0, 0xD0, 0xD2,
- 0x5C, 0x55, 0xA7, 0xA6, 0x87, 0x86, 0x89, 0x94,
- 0x9C, 0xA9, 0xFC, 0xF4, 0x22, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x22, 0x2A, 0x21, 0x23, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x22, 0x23, 0x22, 0x23, 0xA4, 0x89, 0x8C, 0xAA,
- 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF7,
- 0x85, 0x88, 0x8D, 0x59, 0x64, 0x63, 0x47, 0x3E,
- 0x4C, 0x60, 0x61, 0xE0, 0xF0, 0xDF, 0xD9, 0x5D,
- 0x2E, 0x3E, 0x3E, 0x47, 0x4D, 0xCD, 0xDE, 0xDC,
- 0x5D, 0x5C, 0x51, 0x5D, 0xD1, 0xD2, 0xD2, 0xD4,
- 0x5A, 0xBE, 0xA7, 0x98, 0x8A, 0x8A, 0xA0, 0x8B,
- 0x86, 0x86, 0xF7, 0xFC, 0xF7, 0x26, 0x23, 0x23,
- 0x22, 0x22, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x22, 0x21, 0x21, 0x21, 0xA1, 0x98, 0x9F, 0xBF,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xA7,
- 0x8C, 0x86, 0x8D, 0x59, 0x5E, 0x5D, 0x3F, 0x3E,
- 0x47, 0x53, 0x63, 0xD9, 0xF0, 0xF1, 0xDE, 0xD0,
- 0x43, 0x3E, 0x47, 0x45, 0x4A, 0x5B, 0xDC, 0xDA,
- 0x5D, 0x59, 0x49, 0x5F, 0xD1, 0xD2, 0xD3, 0xB9,
- 0xA5, 0xA7, 0x98, 0x9B, 0x96, 0x9D, 0x89, 0x89,
- 0x8B, 0x9C, 0x9D, 0xFC, 0xFC, 0xFC, 0x26, 0x22,
- 0x23, 0x23, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x22, 0x22, 0x29, 0x2D, 0x99, 0x99, 0xA2, 0xAA,
- 0xC4, 0xFB, 0xFC, 0xFC, 0xFC, 0xF6, 0xBF, 0xA2,
- 0x9C, 0x9C, 0x8E, 0xDC, 0xCD, 0x51, 0x41, 0x3E,
- 0x45, 0x49, 0x58, 0xCD, 0xE0, 0xE0, 0xD8, 0xDA,
- 0x4C, 0x4A, 0x45, 0x45, 0x48, 0x47, 0xDA, 0xDA,
- 0x5C, 0x58, 0x44, 0x69, 0xA9, 0x98, 0xA4, 0xA6,
- 0xA1, 0xA4, 0x99, 0x9E, 0x9D, 0x8B, 0x8A, 0x97,
- 0x87, 0x9A, 0x8A, 0xC2, 0xFC, 0xFC, 0xFC, 0x4D,
- 0x21, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x22,
- 0x21, 0x22, 0x2D, 0x34, 0xA4, 0xA2, 0xA2, 0xA9,
- 0xBF, 0xC0, 0xC3, 0xC1, 0xC0, 0xBE, 0xA6, 0x9D,
- 0x99, 0x87, 0xA2, 0xF1, 0xDC, 0x64, 0x42, 0x45,
- 0x47, 0x3E, 0x49, 0x4C, 0xDD, 0xDF, 0xD8, 0xDB,
- 0x5E, 0x4C, 0x48, 0x45, 0x45, 0x41, 0xD1, 0xD6,
- 0x5A, 0x55, 0x3F, 0xA7, 0xA1, 0x98, 0x9F, 0x99,
- 0x9F, 0x9D, 0x9A, 0x95, 0x8B, 0x97, 0x89, 0x8A,
- 0x88, 0x94, 0x9C, 0x8C, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xF4, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
- 0x23, 0x23, 0x2C, 0x2C, 0xA8, 0xA2, 0xA4, 0xA4,
- 0xA9, 0xAA, 0xAA, 0xAA, 0xA9, 0xA6, 0x98, 0x9C,
- 0x8B, 0x88, 0x98, 0x8D, 0xD8, 0xD6, 0x4E, 0x47,
- 0x47, 0x49, 0x47, 0x3F, 0xDA, 0xDD, 0xDE, 0xDD,
- 0xCC, 0x4A, 0x4B, 0x3E, 0x45, 0x43, 0x61, 0xD4,
- 0x56, 0x51, 0x44, 0xA4, 0x9B, 0x8B, 0x9C, 0x9A,
- 0xA0, 0xA2, 0x98, 0x98, 0x8B, 0x8B, 0x98, 0x98,
- 0x84, 0x8B, 0x94, 0x8A, 0xA4, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xF2, 0x21, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x23,
- 0x23, 0x22, 0x2C, 0x2D, 0xC0, 0xA4, 0xA2, 0xA4,
- 0xA4, 0xA6, 0xA6, 0xA6, 0xA4, 0xA2, 0x9F, 0x89,
- 0x8B, 0x9C, 0x9C, 0x8B, 0x68, 0xDB, 0x5F, 0x4B,
- 0x3E, 0x49, 0x4B, 0x3E, 0xCC, 0xDA, 0xDC, 0xDD,
- 0xD3, 0x49, 0x52, 0x48, 0x45, 0x45, 0x53, 0xD0,
- 0x51, 0x4A, 0x44, 0xA4, 0x9B, 0x8B, 0x9C, 0xA0,
- 0x9B, 0x86, 0x89, 0x98, 0x89, 0x8A, 0x96, 0x8A,
- 0x9C, 0x89, 0x89, 0x9C, 0x8C, 0xF6, 0xFC, 0xFC,
- 0xFC, 0xFC, 0x21, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x23,
- 0x22, 0x21, 0x2B, 0x34, 0xC0, 0xA8, 0xA4, 0xA2,
- 0xA2, 0x98, 0xA1, 0xA0, 0x98, 0x9F, 0x95, 0x8A,
- 0x94, 0xA1, 0x8A, 0x84, 0x9B, 0x68, 0xCC, 0x49,
- 0x4A, 0x47, 0x4C, 0x4B, 0x51, 0xD3, 0xDA, 0xDC,
- 0xD5, 0x56, 0x56, 0x4A, 0x3E, 0x45, 0x48, 0x63,
- 0x4A, 0x47, 0x3E, 0xA7, 0x98, 0x9D, 0x9E, 0x8B,
- 0x95, 0x9B, 0x89, 0x86, 0x9B, 0x8B, 0x89, 0x84,
- 0x9A, 0xA1, 0x95, 0x9A, 0x8C, 0xA4, 0xFC, 0xFC,
- 0xFC, 0xFA, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x23,
- 0x21, 0x23, 0x2C, 0xF6, 0xBF, 0xA9, 0xA2, 0x99,
- 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9B, 0x87, 0x8B,
- 0x9C, 0x86, 0x9C, 0x8A, 0x87, 0x87, 0x89, 0x51,
- 0x54, 0x47, 0x4B, 0x50, 0x4B, 0xCF, 0xD6, 0xDC,
- 0xD5, 0x60, 0x54, 0x52, 0x48, 0x45, 0x40, 0x5A,
- 0x45, 0x43, 0x47, 0xA7, 0x98, 0x9B, 0x95, 0x95,
- 0x9A, 0x87, 0x98, 0x98, 0x8A, 0x86, 0x87, 0x9E,
- 0x9B, 0x95, 0x9D, 0x9D, 0x99, 0x85, 0xA6, 0xFA,
- 0xF2, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x22,
- 0x21, 0x24, 0xFB, 0xF7, 0xBF, 0xA6, 0xA2, 0x99,
- 0x97, 0x89, 0x86, 0x89, 0x9C, 0x96, 0x9E, 0x94,
- 0x89, 0x99, 0x98, 0x89, 0x9E, 0x9B, 0x89, 0x8B,
- 0x58, 0x4B, 0x4A, 0x52, 0x48, 0xCC, 0xD3, 0xDA,
- 0xD3, 0x65, 0x4C, 0x58, 0x49, 0x3E, 0x2E, 0x4D,
- 0x40, 0x41, 0x45, 0xA9, 0xA1, 0x9B, 0x9E, 0x9C,
- 0x95, 0x8A, 0x94, 0x89, 0x96, 0x87, 0x9C, 0x9A,
- 0x84, 0x9D, 0x9C, 0x9E, 0x9A, 0x9C, 0x9D, 0xBB,
- 0x23, 0x23, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x23, 0x23,
- 0x24, 0xFC, 0xFC, 0xF6, 0xBF, 0xA6, 0x9F, 0x99,
- 0x89, 0x95, 0x87, 0x94, 0x9D, 0x9E, 0x97, 0x9E,
- 0x95, 0x9B, 0x89, 0x95, 0x95, 0x9B, 0x89, 0x87,
- 0x5D, 0x56, 0x3E, 0x51, 0x3E, 0x60, 0xCF, 0xD3,
- 0xD2, 0xCD, 0x5C, 0x49, 0x4B, 0x3E, 0x2C, 0x48,
- 0x3E, 0x43, 0x3E, 0xA9, 0xA1, 0x9B, 0x97, 0x94,
- 0x95, 0x9A, 0x9C, 0x87, 0x87, 0x9B, 0x9C, 0x95,
- 0x9D, 0x89, 0x9A, 0x89, 0x9E, 0x9E, 0x8C, 0xA6,
- 0x20, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x21, 0x21, 0x20, 0x40,
- 0xFC, 0xFC, 0xFC, 0xEC, 0xBE, 0xA4, 0x9F, 0x99,
- 0x95, 0x9F, 0xA0, 0x88, 0x9D, 0x8B, 0x97, 0x95,
- 0x87, 0x95, 0x96, 0x95, 0x97, 0x94, 0x94, 0x98,
- 0xD3, 0x4C, 0x47, 0x4D, 0x42, 0x4C, 0x60, 0xCC,
- 0xCE, 0xD0, 0x65, 0x4B, 0x47, 0x44, 0x2B, 0x45,
- 0x4B, 0x47, 0x49, 0xA7, 0xA1, 0x9A, 0x97, 0x89,
- 0x95, 0x97, 0x97, 0x9E, 0x89, 0x95, 0x89, 0x9C,
- 0x87, 0x95, 0x97, 0x99, 0x95, 0x99, 0x9F, 0xA4,
- 0xC4, 0x21, 0x21, 0x23, 0x21, 0x23, 0x23, 0x23,
- 0x23, 0x23, 0x23, 0x23, 0x21, 0x20, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xEA, 0xAA, 0xA6, 0xA2, 0x99,
- 0x8B, 0x9A, 0x95, 0x9E, 0x9E, 0x9A, 0x94, 0x87,
- 0x94, 0x94, 0x89, 0x94, 0x9B, 0x9B, 0xA7, 0xDC,
- 0xDB, 0x65, 0x2E, 0x3E, 0x43, 0x44, 0x49, 0x58,
- 0x63, 0xD3, 0xD3, 0x5E, 0x42, 0x42, 0x2D, 0x40,
- 0x54, 0x4C, 0x4A, 0xA7, 0xA0, 0x99, 0x9B, 0x94,
- 0xA0, 0x8A, 0x9B, 0x9D, 0x87, 0x95, 0x94, 0x8B,
- 0x8A, 0x98, 0x9C, 0x8A, 0x9B, 0x99, 0xA2, 0xA6,
- 0xBF, 0xEC, 0x2A, 0x20, 0x21, 0x23, 0x21, 0x20,
- 0x20, 0x20, 0x20, 0x4C, 0xF9, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xEB, 0xAA, 0xA4, 0x9F, 0x9C,
- 0x8B, 0x9B, 0x88, 0x84, 0x9E, 0x9D, 0x96, 0x94,
- 0x94, 0x9A, 0x9B, 0x9B, 0xA4, 0xD5, 0xCD, 0xDE,
- 0xF1, 0xDA, 0x4C, 0x2D, 0x41, 0x2B, 0x42, 0x4C,
- 0x5E, 0xD4, 0xD7, 0xCD, 0x49, 0x2E, 0x2E, 0x41,
- 0x5E, 0x57, 0xA7, 0xA6, 0xA7, 0xA4, 0xA2, 0x98,
- 0x9D, 0x9C, 0xA1, 0x99, 0x9D, 0x88, 0x8B, 0x9C,
- 0x8A, 0x9C, 0x9C, 0x94, 0x9C, 0x89, 0xA0, 0xA6,
- 0xAA, 0xEB, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFB, 0xE9, 0xAA, 0xA6, 0xA2, 0x8B,
- 0x8B, 0x8A, 0x86, 0x9B, 0x9C, 0x98, 0xA0, 0x9B,
- 0x9B, 0x84, 0xA7, 0xB4, 0x61, 0xD1, 0xD2, 0xE0,
- 0xF1, 0xDC, 0x61, 0x2D, 0x2E, 0x3F, 0x56, 0x62,
- 0x5D, 0xD4, 0xD9, 0xD3, 0x54, 0x41, 0x41, 0x44,
- 0xCB, 0x60, 0x52, 0xA9, 0xA9, 0xA9, 0xA7, 0xA6,
- 0xA6, 0xA4, 0xA4, 0xA2, 0xA2, 0x9D, 0x95, 0x89,
- 0x9C, 0x8A, 0x9E, 0x9C, 0x8A, 0x9E, 0xA0, 0xA8,
- 0xC0, 0xE9, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xE9, 0xAA, 0xA6, 0xA0, 0x99,
- 0x9C, 0x8B, 0x9A, 0x84, 0x9B, 0x9B, 0x98, 0x98,
- 0xA9, 0xB9, 0x49, 0x57, 0xCB, 0xD4, 0xD3, 0xF1,
- 0xD8, 0xDA, 0xCE, 0x3F, 0x41, 0x4B, 0x5D, 0xCB,
- 0x5E, 0xD6, 0xDB, 0xD6, 0x5D, 0x43, 0x3F, 0x49,
- 0xD1, 0xCC, 0x4F, 0xDD, 0xC3, 0xBB, 0xBF, 0xAA,
- 0xAA, 0xA9, 0xAA, 0xA8, 0xA8, 0xA6, 0xA6, 0xA2,
- 0x9C, 0x9F, 0x9B, 0x9A, 0x9D, 0xA2, 0xA8, 0xAA,
- 0xC1, 0xEA, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xEA, 0xC0, 0xAA, 0xA6, 0xA2,
- 0xA2, 0x99, 0xA0, 0xA0, 0xA4, 0xA7, 0xA9, 0xC0,
- 0x67, 0x49, 0x54, 0x60, 0xD0, 0xD4, 0xCC, 0xDF,
- 0xD9, 0xD5, 0xD2, 0x3E, 0x47, 0x56, 0x60, 0xCD,
- 0x5D, 0xD9, 0xD9, 0xD6, 0x61, 0x3F, 0x47, 0x52,
- 0xD6, 0xD3, 0x62, 0x4D, 0x40, 0x4A, 0x57, 0xCA,
- 0xC3, 0xC1, 0xC1, 0xC0, 0xBF, 0xBF, 0xAA, 0xAA,
- 0xA6, 0xA4, 0xA4, 0xA4, 0xA6, 0xA8, 0xBE, 0xC1,
- 0xC9, 0xEB, 0xFB, 0xFB, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
- 0xFC, 0xFC, 0xFC, 0xEB, 0xC3, 0xC0, 0xAA, 0xA8,
- 0xA6, 0xA6, 0xA6, 0xA9, 0xAA, 0xC0, 0xE8, 0xD0,
- 0xD2, 0x4C, 0x5E, 0x64, 0xD0, 0xD1, 0x5F, 0xD9,
- 0xD5, 0xD1, 0xD0, 0x48, 0x52, 0x5C, 0x64, 0xCD,
- 0x5C, 0xDC, 0xD7, 0xD5, 0x62, 0x3F, 0x4C, 0x53,
- 0xDA, 0xD7, 0xCE, 0x56, 0x40, 0x4B, 0x52, 0x56,
- 0xCE, 0xDF, 0x6A, 0xEB, 0xE9, 0xC9, 0xC3, 0xC0,
- 0xC0, 0xBF, 0xBE, 0xAA, 0xBF, 0xC0, 0xC3, 0xC9,
- 0xEA, 0xF6, 0xEE, 0x58, 0x57, 0x5E, 0xD6, 0xD0,
- 0xD2, 0x61, 0xCB, 0xD6, 0xD6, 0xD4, 0xDF, 0xF3,
- 0xF2, 0xDD, 0xD7, 0xEB, 0xC9, 0xC1, 0xC0, 0xBF,
- 0xAA, 0xAA, 0xAA, 0xBE, 0xC3, 0xF0, 0xD2, 0xD2,
- 0xD2, 0x51, 0x62, 0xCC, 0xD0, 0xCC, 0x61, 0xD3,
- 0xCF, 0xCE, 0xD2, 0x48, 0x5A, 0x61, 0xCC, 0xCE,
- 0x5F, 0xD9, 0xD5, 0xD1, 0x63, 0x44, 0x56, 0x56,
- 0xDC, 0xD9, 0xD4, 0x5E, 0x42, 0x4A, 0x4C, 0x57,
- 0x5D, 0xD8, 0xE0, 0xD8, 0xDC, 0xCB, 0x66, 0xEC,
- 0xE8, 0xC3, 0xC3, 0xC3, 0xC3, 0xC9, 0xE8, 0xEA,
- 0xF6, 0x50, 0x3E, 0x58, 0x57, 0x5A, 0xD6, 0xD4,
- 0xCC, 0x4B, 0x53, 0x5C, 0x64, 0xD1, 0xDF, 0xF3,
- 0xF1, 0xDE, 0xD9, 0xF6, 0xEB, 0xC9, 0xC1, 0xC1,
- 0xC0, 0xC0, 0xC1, 0xC9, 0xF0, 0xD6, 0xCD, 0xD6,
- 0xD3, 0x53, 0xCB, 0xCF, 0xCD, 0x5F, 0x5F, 0xCE,
- 0xCF, 0xCD, 0xD0, 0x47, 0x5F, 0xCB, 0xCE, 0xCD,
- 0x63, 0xD6, 0xD3, 0xD1, 0x63, 0x3F, 0x58, 0x58,
- 0xDB, 0xDC, 0xDA, 0x65, 0x3E, 0x49, 0x49, 0x4D,
- 0x49, 0xDC, 0xDF, 0xE0, 0xDE, 0xD5, 0x47, 0x47,
- 0x46, 0x6B, 0xEB, 0xEA, 0xE9, 0xEA, 0xEB, 0xF6,
- 0xD0, 0x57, 0x57, 0x47, 0x47, 0x5B, 0xD4, 0xD4,
- 0xCD, 0x44, 0x3E, 0x4B, 0x50, 0x4B, 0x51, 0xD5,
- 0xDB, 0xD8, 0xDE, 0x4B, 0xF6, 0xF6, 0xEA, 0xE9,
- 0xE8, 0xEA, 0xEB, 0x67, 0x5E, 0xCC, 0xD6, 0xDC,
- 0xD5, 0x58, 0xCE, 0xCE, 0x62, 0x50, 0xCC, 0xD3,
- 0xD2, 0xCD, 0xCD, 0x4B, 0x64, 0xCE, 0xCE, 0x64,
- 0xCC, 0xD3, 0xD2, 0xD2, 0x61, 0x47, 0x5D, 0x5C,
- 0xDD, 0xDD, 0xD9, 0xD1, 0x4C, 0x47, 0x49, 0x4A,
- 0x4B, 0xD1, 0xD8, 0xE0, 0xDF, 0xDD, 0x5D, 0x4A,
- 0x48, 0x52, 0x51, 0x3F, 0xF6, 0xEC, 0xE0, 0xE0,
- 0xD3, 0x5E, 0x5F, 0x50, 0x4B, 0x50, 0xCB, 0xCE,
- 0x64, 0x45, 0x4C, 0x57, 0x57, 0x58, 0x52, 0xD6,
- 0xD3, 0xDE, 0xDF, 0xD1, 0x3E, 0x4B, 0xF6, 0xF6,
- 0xEC, 0x66, 0x53, 0x43, 0x56, 0xD1, 0xD9, 0xDE,
- 0xD4, 0x5E, 0xCE, 0xCC, 0x5B, 0x2C, 0xD4, 0xD5,
- 0xD2, 0xD0, 0x63, 0x5D, 0xCD, 0xD0, 0xCD, 0x5E,
- 0xD0, 0xCF, 0xCE, 0xD2, 0x5E, 0x50, 0x60, 0x5D,
- 0xDE, 0xDD, 0xDC, 0xD7, 0x5D, 0x45, 0x47, 0x3E,
- 0x4B, 0x5E, 0xDE, 0xDF, 0xE0, 0xD8, 0xCF, 0x3E,
- 0x45, 0x51, 0x58, 0x42, 0xCB, 0xDA, 0xDE, 0xD8,
- 0xD2, 0x61, 0xCC, 0xCF, 0xD6, 0xDA, 0xDA, 0xD5,
- 0xD0, 0x50, 0x44, 0x57, 0x57, 0x58, 0x45, 0xD1,
- 0xD1, 0xD7, 0xDF, 0xDF, 0xD7, 0xCF, 0x64, 0x60,
- 0xCE, 0xCE, 0xCE, 0x63, 0xCF, 0xDA, 0xDE, 0xD9,
- 0xCF, 0x63, 0xCD, 0x63, 0x4D, 0x4B, 0xD6, 0xD5,
- 0xCE, 0xD3, 0x60, 0xCB, 0xD0, 0xD0, 0x65, 0x47,
- 0xD0, 0xCC, 0xCC, 0xD1, 0x59, 0x5D, 0x63, 0x5E,
- 0xDD, 0xDD, 0xDE, 0xDC, 0xCB, 0x40, 0x48, 0x45,
- 0x3E, 0x3E, 0xD9, 0xDF, 0xE0, 0xDF, 0xDA, 0x51,
- 0x4C, 0x48, 0x56, 0x4C, 0x5B, 0xD2, 0xDA, 0xDB,
- 0xCB, 0x5F, 0xD0, 0xCC, 0xDC, 0xF0, 0xF3, 0xE0,
- 0xDD, 0xCC, 0x41, 0x50, 0x57, 0x57, 0x4B, 0x5D,
- 0xD3, 0xD1, 0xDE, 0xDF, 0xDE, 0xD7, 0xD0, 0xD0,
- 0xD5, 0xD6, 0xD6, 0xCE, 0xD7, 0xDC, 0xDA, 0xD5,
- 0x60, 0x63, 0x64, 0x5E, 0x47, 0x61, 0xD5, 0xD2,
- 0xCF, 0xD0, 0x59, 0xCD, 0xD1, 0xCF, 0x61, 0x4D,
- 0xCC, 0xCE, 0xCD, 0xD0, 0x52, 0x61, 0x64, 0x60,
- 0xDA, 0xDE, 0xDE, 0xDD, 0xD1, 0x4B, 0x4A, 0x45,
- 0x3E, 0x41, 0xCD, 0xDE, 0xE0, 0xF1, 0xDE, 0x63,
- 0x4A, 0x4A, 0x4A, 0x4B, 0x50, 0xCB, 0xD4, 0xD7,
- 0x5E, 0x54, 0x62, 0xD3, 0xD4, 0xF0, 0xF3, 0xF3,
- 0xF2, 0xDE, 0x61, 0x40, 0x49, 0x56, 0x4D, 0x3E,
- 0x4B, 0xCE, 0xD9, 0xD8, 0xD9, 0xD5, 0xCF, 0xD2,
- 0xD6, 0xD6, 0xD1, 0xD1, 0xD7, 0xD5, 0xCF, 0xD0,
- 0x54, 0x64, 0x63, 0x56, 0x2C, 0xCB, 0xD1, 0xCC,
- 0xD3, 0xCD, 0x54, 0xCF, 0xD1, 0xCE, 0x5E, 0x5C,
- 0xCE, 0xCE, 0xCE, 0xCB, 0x4B, 0x63, 0xCC, 0x61,
- 0xD4, 0xDC, 0xDE, 0xDE, 0xDA, 0x5D, 0x45, 0x45,
- 0x48, 0x3F, 0x52, 0xD9, 0xD8, 0xDF, 0xDF, 0xD2,
- 0x52, 0x4B, 0x3E, 0x2E, 0x47, 0x60, 0xCF, 0xD3,
- 0x59, 0x48, 0x50, 0x5E, 0xCC, 0xDE, 0xF2, 0xF2,
- 0xF3, 0xF3, 0xDD, 0x5D, 0x3E, 0x48, 0x47, 0x47,
- 0x58, 0xD1, 0xDA, 0xDA, 0xD5, 0xD1, 0xCD, 0xD2,
- 0xD3, 0xCF, 0xD3, 0xD1, 0xCD, 0xD3, 0xD2, 0x5E,
- 0x52, 0x64, 0x60, 0x4B, 0x45, 0x61, 0xCD, 0xD3,
- 0xD3, 0x64, 0x61, 0xD0, 0xD0, 0x64, 0x45, 0x63,
- 0xD0, 0xCE, 0xD0, 0x60, 0x56, 0xCB, 0xCC, 0x62,
- 0xCE, 0xDA, 0xDE, 0xD8, 0xDD, 0xCC, 0x45, 0x49,
- 0x3E, 0x47, 0x42, 0xD1, 0xDC, 0xD8, 0xD8, 0xD3,
- 0x5D, 0x4C, 0x49, 0x3F, 0x47, 0x59, 0xCD, 0xCF,
- 0x59, 0x2E, 0x48, 0x47, 0x52, 0x63, 0xF0, 0xF2,
- 0xF3, 0xF3, 0xF2, 0xDA, 0x52, 0x4B, 0x52, 0x58,
- 0x5E, 0x63, 0xD0, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE,
- 0xCF, 0x65, 0x61, 0xD6, 0xD6, 0xD6, 0xCB, 0x4B,
- 0x61, 0x62, 0x5D, 0x43, 0x4B, 0x61, 0xD0, 0xD4,
- 0xD1, 0x61, 0xCE, 0xD2, 0xCD, 0x5E, 0x4A, 0xCE,
- 0xD0, 0xCC, 0xD0, 0x59, 0x61, 0xCC, 0xCC, 0x62,
- 0xD1, 0xD5, 0xDE, 0xD8, 0xDD, 0xCF, 0x4B, 0x4A,
- 0x45, 0x3E, 0x2D, 0xCB, 0xDC, 0xDE, 0xD8, 0xD5,
- 0x60, 0x54, 0x51, 0x4C, 0x4D, 0x5C, 0xCC, 0xCE,
- 0x5A, 0x2C, 0x50, 0x53, 0x3E, 0x59, 0xD8, 0xF3,
- 0xF2, 0xF3, 0xF3, 0xE0, 0x5E, 0x4A, 0x4C, 0x53,
- 0x5E, 0x63, 0xCC, 0xCC, 0xCC, 0xCD, 0xCF, 0xD3,
- 0x62, 0x53, 0xD6, 0xD6, 0xD6, 0xD6, 0x5B, 0x48,
- 0x64, 0x63, 0x59, 0x44, 0x57, 0x63, 0xD2, 0xD3,
- 0xD0, 0x5E, 0xD0, 0xD1, 0xCB, 0x58, 0x4C, 0xCF,
- 0xCF, 0xCE, 0xCE, 0x57, 0x63, 0xCC, 0xCD, 0x57,
+ 0xD8, 0xA3, 0x98, 0x98, 0xA3, 0xB2, 0x2F, 0x2F,
+ 0xA3, 0x66, 0x98, 0x98, 0x98, 0xA3, 0x2F, 0xA3,
+ 0x98, 0x55, 0xA0, 0xA3, 0xB2, 0x51, 0x51, 0x2F,
+ 0x98, 0x55, 0x8F, 0x2F, 0x89, 0x44, 0x89, 0x51,
+ 0xB2, 0x2F, 0x66, 0xA3, 0x2F, 0x2F, 0x66, 0x66,
+ 0xA3, 0xB2, 0xB2, 0xB2, 0x89, 0xD8, 0x44, 0x44,
+ 0xD8, 0x83, 0xD8, 0xA3, 0x98, 0x98, 0xA3, 0xB2,
+ 0x2F, 0x2F, 0xA3, 0x66, 0x98, 0x98, 0x98, 0xA3,
+ 0x2F, 0xA3, 0x98, 0x55, 0xA0, 0xA3, 0xB2, 0x51,
+ 0x51, 0x2F, 0x98, 0x55, 0x8F, 0x2F, 0x89, 0x44,
+ 0xA3, 0x55, 0x55, 0x98, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0x66, 0x66, 0x98, 0x98, 0x66, 0x66, 0x66, 0x98,
+ 0x55, 0xA5, 0x8F, 0xA3, 0x51, 0x51, 0xB2, 0x2F,
+ 0x66, 0x66, 0xA3, 0x51, 0x89, 0x51, 0xB2, 0x2F,
+ 0x2F, 0xA3, 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F,
+ 0xB2, 0xB2, 0x2F, 0x2F, 0xB2, 0x51, 0x51, 0x51,
+ 0x51, 0x51, 0xA3, 0x55, 0x55, 0x98, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0x66, 0x66, 0x98, 0x98, 0x66, 0x66,
+ 0x66, 0x98, 0x55, 0xA5, 0x8F, 0xA3, 0x51, 0x51,
+ 0xB2, 0x2F, 0x66, 0x66, 0xA3, 0x51, 0x89, 0x51,
+ 0x98, 0xA5, 0x55, 0x8F, 0x2F, 0xB2, 0x2F, 0xA3,
+ 0x66, 0x66, 0x98, 0x8F, 0x66, 0x66, 0x66, 0x98,
+ 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0x51, 0xB2, 0x2F,
+ 0xA3, 0xA3, 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x2F,
+ 0xA3, 0x66, 0x98, 0xA3, 0x51, 0xB2, 0x2F, 0xA3,
+ 0xB2, 0x51, 0x51, 0xB2, 0xB2, 0x51, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0x98, 0xA5, 0x55, 0x8F, 0x2F, 0xB2,
+ 0x2F, 0xA3, 0x66, 0x66, 0x98, 0x8F, 0x66, 0x66,
+ 0x66, 0x98, 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0x51,
+ 0xB2, 0x2F, 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0xB2,
+ 0xA0, 0xA5, 0x55, 0x66, 0xB2, 0x51, 0xB2, 0xA3,
+ 0x66, 0x66, 0x98, 0x66, 0x66, 0x66, 0x98, 0x98,
+ 0x66, 0xA3, 0x2F, 0xB2, 0x51, 0x51, 0xB2, 0xA3,
+ 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0x66, 0x98, 0xB2, 0x4C, 0x54, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xCE, 0x2F, 0xB2, 0x2F, 0x2F,
+ 0xA3, 0x98, 0xA0, 0xA5, 0x55, 0x66, 0xB2, 0x51,
+ 0xB2, 0xA3, 0x66, 0x66, 0x98, 0x66, 0x66, 0x66,
+ 0x98, 0x98, 0x66, 0xA3, 0x2F, 0xB2, 0x51, 0x51,
+ 0xB2, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0xA0, 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0xB2, 0x2F,
+ 0x66, 0x66, 0x98, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0xA3, 0x2F, 0x51, 0x51, 0x51, 0xB2, 0x2F, 0xA3,
+ 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x2F, 0xA0, 0xDA, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x9C, 0xB2, 0xA3,
+ 0x66, 0x98, 0xA0, 0xA0, 0x8F, 0xA3, 0xB2, 0x51,
+ 0xB2, 0x2F, 0x66, 0x66, 0x98, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0xA3, 0x2F, 0x51, 0x51, 0x51, 0xB2,
+ 0x2F, 0xA3, 0x66, 0x66, 0x66, 0xA3, 0xA3, 0xA3,
+ 0x8F, 0x8F, 0x66, 0x2F, 0x51, 0x51, 0xB2, 0xA3,
+ 0x66, 0x98, 0x98, 0x66, 0x66, 0x66, 0x2F, 0x2F,
+ 0xB2, 0x51, 0xB2, 0xB2, 0x2F, 0x2F, 0xA3, 0x66,
+ 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0xB2,
+ 0x9C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xDA, 0x3A, 0x20, 0x54, 0x55,
+ 0xA3, 0x98, 0x8F, 0x8F, 0x66, 0x2F, 0x51, 0x51,
+ 0xB2, 0xA3, 0x66, 0x98, 0x98, 0x66, 0x66, 0x66,
+ 0x2F, 0x2F, 0xB2, 0x51, 0xB2, 0xB2, 0x2F, 0x2F,
+ 0xA3, 0x66, 0x66, 0x66, 0x2F, 0xA3, 0x2F, 0x2F,
+ 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0x66,
+ 0x8F, 0x8F, 0x8F, 0x66, 0xA3, 0xA3, 0xB2, 0xB2,
+ 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0xAD,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xA7, 0x4C, 0xCE, 0xDA, 0x20,
+ 0xA6, 0x2F, 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0xB2,
+ 0x2F, 0x66, 0x8F, 0x8F, 0x8F, 0x66, 0xA3, 0xA3,
+ 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0xA3, 0x98, 0x66, 0x2F, 0xB2, 0xB2, 0x2F, 0x98,
+ 0x8F, 0x8F, 0x98, 0x66, 0xA3, 0xB2, 0xB2, 0xB2,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x51, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xCE, 0x55, 0xAD, 0xA7, 0x54,
+ 0x20, 0x8F, 0xA3, 0x98, 0x66, 0x2F, 0xB2, 0xB2,
+ 0x2F, 0x98, 0x8F, 0x8F, 0x98, 0x66, 0xA3, 0xB2,
+ 0xB2, 0xB2, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F,
+ 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0x8F, 0x66, 0x2F, 0xB2, 0x51, 0x2F, 0x98,
+ 0xA0, 0x8F, 0x66, 0xA3, 0x2F, 0x51, 0x51, 0xB2,
+ 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0x66, 0x66,
+ 0x98, 0x98, 0x98, 0x66, 0x98, 0x66, 0x55, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xCE, 0x4C, 0x9C, 0x2E, 0xDA,
+ 0x20, 0xDA, 0x51, 0x8F, 0x66, 0x2F, 0xB2, 0x51,
+ 0x2F, 0x98, 0xA0, 0x8F, 0x66, 0xA3, 0x2F, 0x51,
+ 0x51, 0xB2, 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3,
+ 0x66, 0x66, 0x98, 0x98, 0x98, 0x98, 0x98, 0x66,
+ 0x51, 0x66, 0x2F, 0xB2, 0x51, 0xB2, 0xA3, 0xA0,
+ 0xA0, 0x66, 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0xA3,
+ 0x66, 0x66, 0x66, 0xA3, 0xA3, 0x66, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x66, 0x66, 0xB2, 0x6D, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x6D, 0x3A, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0xA5, 0x66, 0x2F, 0xB2, 0x51, 0xB2,
+ 0xA3, 0xA0, 0xA0, 0x66, 0xA3, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0xA3, 0x66, 0x66, 0x66, 0xA3, 0xA3, 0x66,
+ 0x98, 0x98, 0x8F, 0x98, 0x66, 0x66, 0x66, 0x66,
+ 0x51, 0x2F, 0xB2, 0x51, 0x51, 0x2F, 0x66, 0xA0,
+ 0x8F, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0x2F, 0x66,
+ 0x98, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x2F, 0xA3, 0x2F, 0x2F, 0x51, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0xDA, 0x51, 0xB2, 0x51, 0x51, 0x2F,
+ 0x66, 0xA0, 0x8F, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F,
+ 0x2F, 0x66, 0x98, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x51, 0x2F, 0xB2, 0x51, 0x2F, 0xA3, 0x8F, 0x8F,
+ 0x98, 0xA3, 0xB2, 0xB2, 0x2F, 0xA3, 0x98, 0x66,
+ 0x98, 0x98, 0x66, 0x66, 0x66, 0x66, 0xA3, 0x2F,
+ 0xB2, 0xB2, 0x51, 0xB2, 0xB2, 0x66, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xA3, 0xB2, 0x51, 0x2F, 0xA3,
+ 0x8F, 0x8F, 0x98, 0xA3, 0xB2, 0xB2, 0x2F, 0xA3,
+ 0x98, 0x66, 0x98, 0x98, 0x66, 0x66, 0x66, 0x66,
+ 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0xA3, 0x2F, 0x66, 0x98, 0x8F, 0x98,
+ 0xA3, 0x2F, 0x2F, 0xA3, 0x98, 0x98, 0x98, 0x98,
+ 0x66, 0x98, 0x66, 0x98, 0x66, 0xA3, 0x2F, 0xB2,
+ 0x51, 0x51, 0x51, 0xB2, 0xB2, 0x8F, 0x20, 0x20,
+ 0x20, 0x54, 0x6D, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x54, 0x6D, 0x6D, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x4C, 0xA3, 0x2F, 0x66, 0x98,
+ 0x8F, 0x98, 0xA3, 0x2F, 0x2F, 0xA3, 0x98, 0x98,
+ 0x98, 0x98, 0x66, 0x98, 0x66, 0x98, 0x66, 0xA3,
+ 0x2F, 0xB2, 0x51, 0x51, 0x51, 0xB2, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x8F, 0x98,
+ 0x2F, 0x2F, 0x2F, 0x66, 0x8F, 0x8F, 0x98, 0xA3,
+ 0x66, 0x66, 0x8F, 0x98, 0x98, 0x66, 0x2F, 0xB2,
+ 0x51, 0xB2, 0x2F, 0xA3, 0xA3, 0xA0, 0x20, 0x20,
+ 0xDA, 0x2E, 0x3A, 0xA7, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0xCE, 0x2A, 0x2A, 0x2E, 0xA7, 0xDA, 0x20,
+ 0x20, 0x20, 0x20, 0x9C, 0xA3, 0x66, 0x98, 0x98,
+ 0x8F, 0x98, 0x2F, 0x2F, 0x2F, 0x66, 0x8F, 0x8F,
+ 0x98, 0xA3, 0x66, 0x66, 0x8F, 0x98, 0x98, 0x66,
+ 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x2F, 0xA3, 0xA3,
+ 0xB2, 0xA3, 0x66, 0x98, 0x8F, 0x8F, 0x66, 0xA3,
+ 0x2F, 0x2F, 0x66, 0x98, 0x98, 0x66, 0x2F, 0x2F,
+ 0xA3, 0x98, 0x8F, 0x98, 0x66, 0x2F, 0xB2, 0xB2,
+ 0xB2, 0xA3, 0x66, 0x66, 0x66, 0x98, 0x20, 0x3A,
+ 0x98, 0x89, 0x8F, 0x6D, 0x20, 0x20, 0x20, 0x20,
+ 0x4C, 0x66, 0x51, 0x44, 0x51, 0x2E, 0x54, 0x20,
+ 0x20, 0x20, 0x20, 0xA7, 0x66, 0x98, 0x8F, 0x8F,
+ 0x66, 0xA3, 0x2F, 0x2F, 0x66, 0x98, 0x98, 0x66,
+ 0x2F, 0x2F, 0xA3, 0x98, 0x8F, 0x98, 0x66, 0x2F,
+ 0xB2, 0xB2, 0xB2, 0xA3, 0x66, 0x66, 0x66, 0xA3,
+ 0x2F, 0x66, 0x98, 0x8F, 0x8F, 0x98, 0x66, 0x2F,
+ 0x2F, 0xA3, 0x66, 0x98, 0x98, 0xA3, 0x2F, 0xB2,
+ 0xA3, 0x8F, 0x98, 0xA3, 0xB2, 0x51, 0x89, 0x89,
+ 0xB2, 0xA3, 0x66, 0x98, 0x66, 0x98, 0x20, 0xA6,
+ 0x44, 0x39, 0xE6, 0x98, 0x20, 0x20, 0x20, 0x9C,
+ 0x74, 0xD6, 0x7E, 0xD6, 0x39, 0x8F, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x2E, 0x98, 0x8F, 0x8F, 0x98,
+ 0x66, 0x2F, 0x2F, 0xA3, 0x66, 0x98, 0x98, 0xA3,
+ 0x2F, 0xB2, 0x66, 0x98, 0x8F, 0xA3, 0xB2, 0x51,
+ 0x89, 0x89, 0xB2, 0xA3, 0x66, 0x98, 0x66, 0x66,
+ 0x2F, 0x66, 0x8F, 0xA0, 0x8F, 0x98, 0xA3, 0xB2,
+ 0x2F, 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0x66, 0x98, 0xA3, 0xB2, 0x89, 0x44, 0x89, 0x51,
+ 0x2F, 0x66, 0x98, 0x98, 0xA3, 0x66, 0x20, 0x2F,
+ 0x2F, 0xAD, 0x89, 0xD6, 0x3A, 0x20, 0x20, 0x55,
+ 0x6B, 0x51, 0x6D, 0x4C, 0xD8, 0xD6, 0x2E, 0x20,
+ 0x20, 0x20, 0x20, 0x54, 0x8F, 0xA0, 0x8F, 0x98,
+ 0xA3, 0xB2, 0x2F, 0x66, 0x66, 0x66, 0xA3, 0x2F,
+ 0xB2, 0x2F, 0x66, 0x66, 0xA3, 0xB2, 0x89, 0x44,
+ 0x89, 0x51, 0x2F, 0x66, 0x98, 0x98, 0xA3, 0xA3,
+ 0xA3, 0x66, 0x8F, 0xA0, 0x8F, 0x66, 0x2F, 0xB2,
+ 0xA3, 0x66, 0x98, 0x66, 0xA3, 0x2F, 0x2F, 0xA3,
+ 0xA3, 0x2F, 0xB2, 0x89, 0xD8, 0xD8, 0x51, 0x66,
+ 0x8F, 0xA0, 0xA0, 0x8F, 0x98, 0xA3, 0x20, 0x44,
+ 0xA7, 0xCE, 0xA6, 0x4D, 0xCE, 0x6D, 0xA7, 0xA0,
+ 0x6B, 0xA7, 0x20, 0x92, 0xAD, 0x6B, 0x4C, 0x20,
+ 0x20, 0x20, 0x20, 0x54, 0x98, 0xA0, 0x8F, 0x66,
+ 0x2F, 0xB2, 0xA3, 0x66, 0x98, 0x66, 0xA3, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0xB2, 0x89, 0xD8, 0xD8,
+ 0x51, 0x66, 0x8F, 0xA0, 0xA0, 0x8F, 0x98, 0x66,
+ 0x66, 0x66, 0x8F, 0x55, 0x8F, 0xA3, 0xB2, 0xB2,
+ 0xA3, 0x66, 0x66, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xB2, 0x89, 0x44, 0x44, 0x51, 0x66, 0xA0,
+ 0x55, 0xA5, 0x55, 0x8F, 0x66, 0xA3, 0x20, 0x44,
+ 0x6D, 0x54, 0xA7, 0x74, 0x2E, 0x4B, 0xBF, 0x9C,
+ 0x7E, 0xDA, 0x20, 0x54, 0x2E, 0x6B, 0x2A, 0x20,
+ 0x20, 0x20, 0x20, 0x3A, 0x8F, 0x55, 0x8F, 0xA3,
+ 0xB2, 0xB2, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0x2F,
+ 0xA3, 0xA3, 0xA3, 0xB2, 0x89, 0x44, 0x44, 0x51,
+ 0x66, 0xA0, 0xA5, 0xA5, 0x55, 0x8F, 0x66, 0x66,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0x8F, 0xA3, 0x2F, 0xB2,
+ 0x66, 0x98, 0xA3, 0x2F, 0x2F, 0xB2, 0x2F, 0x2F,
+ 0xB2, 0x51, 0x89, 0x89, 0xB2, 0x98, 0xA0, 0x2A,
+ 0xA5, 0x55, 0x98, 0x66, 0xA3, 0xB2, 0x20, 0x2F,
+ 0x4C, 0x20, 0x4B, 0xBB, 0xCF, 0x6F, 0x27, 0x36,
+ 0x93, 0xCE, 0x20, 0x20, 0xA6, 0x3D, 0x4C, 0x20,
+ 0x20, 0x20, 0x20, 0xDA, 0xA0, 0xA0, 0x8F, 0xA3,
+ 0x2F, 0xB2, 0x66, 0x98, 0xA3, 0x2F, 0xB2, 0x2F,
+ 0x2F, 0x2F, 0xB2, 0x51, 0x89, 0x89, 0xB2, 0x98,
+ 0xA0, 0x2A, 0xA5, 0xA0, 0x8F, 0x66, 0xA3, 0xA3,
+ 0xA0, 0x8F, 0x8F, 0xA0, 0x8F, 0xA3, 0xB2, 0x2F,
+ 0x66, 0x98, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F,
+ 0xB2, 0x89, 0x44, 0x51, 0x66, 0x55, 0xAD, 0x2A,
+ 0x55, 0x8F, 0x66, 0xA3, 0x2F, 0xB2, 0x20, 0x2A,
+ 0xE6, 0x95, 0xE5, 0x5A, 0x52, 0x52, 0x3F, 0x27,
+ 0x22, 0xC7, 0x9D, 0x60, 0xA2, 0xA2, 0x3A, 0x20,
+ 0x20, 0x20, 0x20, 0x54, 0x66, 0xA0, 0x8F, 0xA3,
+ 0xB2, 0x2F, 0x66, 0x98, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0xB2, 0x89, 0x44, 0x51, 0x66, 0x55,
+ 0x2A, 0x2A, 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0x2F,
+ 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x2F, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0x51, 0x2F, 0x2F,
+ 0x51, 0x89, 0x89, 0x2F, 0x8F, 0x2A, 0x2A, 0xA5,
+ 0x8F, 0x66, 0xA3, 0xB2, 0x2F, 0x51, 0x20, 0x6D,
+ 0x77, 0xF7, 0xEE, 0x30, 0xB0, 0x72, 0x72, 0x5B,
+ 0x82, 0xEA, 0x72, 0xB0, 0x90, 0x96, 0x71, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x2F, 0x98, 0x98, 0x2F,
+ 0xB2, 0xB2, 0x66, 0xA3, 0x2F, 0x51, 0x51, 0xB2,
+ 0xB2, 0x2F, 0x51, 0x89, 0x89, 0x2F, 0x8F, 0x2A,
+ 0xAD, 0xA5, 0x98, 0x66, 0xA3, 0xB2, 0x2F, 0xB2,
+ 0xD8, 0xB2, 0xA3, 0x98, 0x98, 0x2F, 0xB2, 0xB2,
+ 0x66, 0xA3, 0xB2, 0x51, 0x51, 0xB2, 0x2F, 0xA3,
+ 0x51, 0x89, 0x89, 0xA3, 0xA0, 0x2A, 0xA5, 0x8F,
+ 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0x51, 0x20, 0x69,
+ 0x64, 0xF9, 0x3F, 0x52, 0x52, 0x72, 0x29, 0x82,
+ 0x47, 0x47, 0x47, 0x8B, 0x72, 0xB7, 0x60, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x2F, 0x98, 0x98, 0x2F,
+ 0xB2, 0xB2, 0xA3, 0xA3, 0xB2, 0x89, 0x51, 0x2F,
+ 0x2F, 0xA3, 0x51, 0x89, 0x89, 0xA3, 0xA0, 0x2A,
+ 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xDD, 0xA3, 0x66, 0x98, 0x66, 0x2F, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0xB2, 0x51, 0xB2, 0x2F, 0xA3, 0x2F,
+ 0xB2, 0x89, 0xB2, 0x66, 0xA0, 0xA5, 0x8F, 0x98,
+ 0x66, 0x66, 0xB2, 0x51, 0x51, 0x51, 0x81, 0xFA,
+ 0x62, 0xEE, 0x30, 0x52, 0x22, 0x72, 0x82, 0x82,
+ 0x47, 0x47, 0xEA, 0x3F, 0x37, 0x6F, 0x26, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x2A, 0x98, 0x66, 0x2F,
+ 0x51, 0xB2, 0xA3, 0x66, 0xB2, 0x51, 0x51, 0xB2,
+ 0xA3, 0x2F, 0xB2, 0x89, 0xB2, 0x66, 0x55, 0x55,
+ 0x8F, 0x98, 0x66, 0xA3, 0xB2, 0x51, 0x51, 0xB2,
+ 0x74, 0xA0, 0x8F, 0x98, 0x66, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0x2F, 0xA3, 0x2F,
+ 0xB2, 0x51, 0xA3, 0x98, 0xA0, 0x55, 0xA0, 0xA0,
+ 0x8F, 0x66, 0x2F, 0x51, 0xB2, 0x51, 0x54, 0xA9,
+ 0x62, 0xEF, 0x52, 0x22, 0x72, 0x29, 0xEA, 0xEA,
+ 0x29, 0x22, 0x37, 0x37, 0x8E, 0xCF, 0x49, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x6D, 0x2F, 0x66, 0x2F,
+ 0x51, 0xB2, 0xA3, 0x66, 0x2F, 0xB2, 0xB2, 0x2F,
+ 0xA3, 0x2F, 0xB2, 0x51, 0x2F, 0x98, 0xA0, 0x55,
+ 0xA0, 0xA0, 0x8F, 0x66, 0x2F, 0x51, 0xB2, 0xA3,
+ 0xA3, 0x2A, 0xA5, 0x98, 0xA3, 0x2F, 0xB2, 0x2F,
+ 0x66, 0x66, 0x2F, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F,
+ 0xB2, 0x2F, 0xA3, 0x8F, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0x8F, 0xA3, 0x51, 0x51, 0x2F, 0xB2, 0x54, 0xA8,
+ 0x65, 0x5C, 0x52, 0x22, 0x29, 0x29, 0x29, 0xB0,
+ 0x62, 0x56, 0xF9, 0x79, 0xF9, 0xBB, 0x4B, 0x20,
+ 0x6D, 0xA5, 0x2E, 0x20, 0x20, 0xA3, 0xA3, 0x2F,
+ 0xB2, 0x2F, 0xA3, 0x66, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0x2F, 0x2F, 0xB2, 0x2F, 0x66, 0x8F, 0xA0, 0xA0,
+ 0x55, 0xA0, 0x8F, 0xA3, 0x51, 0x51, 0x2F, 0xA3,
+ 0xA0, 0x2A, 0x55, 0x66, 0xA3, 0x2F, 0xB2, 0xB2,
+ 0xA3, 0x66, 0xA3, 0xB2, 0xB2, 0xB2, 0xA3, 0x66,
+ 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x8F, 0xA0, 0x98,
+ 0xA3, 0x51, 0x89, 0x89, 0xA3, 0x2F, 0x20, 0x54,
+ 0xDF, 0xFA, 0x40, 0x37, 0xD4, 0x43, 0x56, 0x64,
+ 0x76, 0xF9, 0x78, 0x41, 0x5E, 0x5E, 0x4C, 0x20,
+ 0x20, 0xAD, 0x8F, 0x9C, 0x20, 0xA5, 0xA3, 0x2F,
+ 0x2F, 0x2F, 0xA3, 0x66, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0x66, 0xA3, 0x2F, 0x66, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0xA3, 0x51, 0x89, 0x51, 0xA3, 0x66,
+ 0xA0, 0xA0, 0x8F, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x2F, 0xA3, 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x66,
+ 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x66, 0x66, 0xA3,
+ 0xB2, 0x89, 0xD8, 0x51, 0x66, 0x51, 0x20, 0x6D,
+ 0x51, 0x77, 0x9F, 0xF7, 0xEE, 0x8E, 0xF9, 0xF0,
+ 0x24, 0xF7, 0x77, 0x5E, 0x74, 0xD8, 0x98, 0x20,
+ 0x20, 0x2E, 0x55, 0x92, 0x20, 0x54, 0x51, 0x2F,
+ 0x2F, 0xB2, 0xB2, 0xA3, 0x2F, 0x51, 0x51, 0xB2,
+ 0xA3, 0xA3, 0x66, 0xA3, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0xA3, 0xB2, 0x89, 0xD8, 0x51, 0xA3, 0x98,
+ 0x98, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0xB2, 0x2F, 0x2F, 0xB2, 0xB2, 0x2F, 0x2F, 0x66,
+ 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x89, 0xD8, 0x89, 0xB2, 0x66, 0x66, 0x20, 0x6D,
+ 0x89, 0xC2, 0xA4, 0x96, 0xC6, 0x64, 0x50, 0x40,
+ 0xF4, 0x97, 0x89, 0x74, 0x7E, 0x6B, 0x39, 0xA7,
+ 0x20, 0x20, 0x3A, 0x54, 0x20, 0x20, 0xA7, 0x51,
+ 0x2F, 0xB2, 0xB2, 0xA3, 0xA3, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F,
+ 0x2F, 0xB2, 0x89, 0xD8, 0x44, 0x2F, 0x66, 0x66,
+ 0x2F, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0x51, 0x51,
+ 0x89, 0x89, 0xB2, 0x66, 0x2F, 0x6D, 0x20, 0xCE,
+ 0x39, 0x74, 0x89, 0x5E, 0xBD, 0x87, 0xC8, 0xD1,
+ 0x89, 0x44, 0x3C, 0x4D, 0x6B, 0x6B, 0x6B, 0x2F,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA3,
+ 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0x66, 0x66, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0x51, 0x51, 0x89, 0x89, 0xB2, 0xA3, 0x98, 0x66,
+ 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0x2F, 0xA3,
+ 0x66, 0x66, 0x2F, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0x66, 0x66, 0x2A, 0x20, 0x54, 0x44,
+ 0x6B, 0x39, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0xD8, 0x39, 0x4D, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D,
+ 0x9C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D,
+ 0x51, 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0x2F,
+ 0xA3, 0xA3, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0xB2, 0xB2, 0x2F, 0x66, 0x98, 0x98, 0x66,
+ 0x98, 0x98, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0x66,
+ 0x98, 0x66, 0x66, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x66, 0x98, 0x98, 0x98, 0x3A, 0x54, 0x2A, 0x6B,
+ 0x6B, 0x6B, 0x83, 0x44, 0x89, 0x89, 0x44, 0x3C,
+ 0xD6, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0xB2, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0xAD, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0x66, 0x66, 0x98, 0x66, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0x66, 0x98, 0x8F, 0x8F, 0x8F, 0x98,
+ 0x8F, 0x98, 0x98, 0x66, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x8F, 0x8F, 0x8F, 0x98, 0x98, 0x98, 0x8F, 0xA0,
+ 0xA0, 0xA0, 0xA3, 0xDA, 0x20, 0x3A, 0x39, 0x6B,
+ 0x6B, 0x6B, 0x4D, 0xA2, 0x74, 0x3C, 0x7E, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x2F, 0x2F, 0xA3, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x98, 0x8F, 0x8F, 0x98, 0x98, 0x98, 0x98,
+ 0x8F, 0xA0, 0xA0, 0xA0, 0x8F, 0x8F, 0x8F, 0xA0,
+ 0x8F, 0x66, 0x66, 0xA3, 0x66, 0xA3, 0xA3, 0x2F,
+ 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x98,
+ 0x98, 0xA0, 0x98, 0x66, 0x66, 0x98, 0x8F, 0xA0,
+ 0xA0, 0xA3, 0x2E, 0x20, 0x20, 0x8F, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x55, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x3A, 0x51, 0x2F, 0xA3, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x98, 0x8F, 0x8F, 0x98, 0x66, 0x98,
+ 0x8F, 0xA0, 0xA0, 0x8F, 0x8F, 0x8F, 0x8F, 0xA0,
+ 0x66, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3,
+ 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0xA3, 0x66, 0x66,
+ 0x66, 0x98, 0xA3, 0x2F, 0x2F, 0xA3, 0x66, 0x8F,
+ 0x66, 0xA6, 0x20, 0x20, 0x6D, 0x39, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0xB2, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x2E, 0x89, 0xA3, 0xA3, 0x66, 0x66,
+ 0x66, 0x66, 0x98, 0x98, 0xA3, 0x2F, 0x2F, 0xA3,
+ 0x66, 0x8F, 0x98, 0x98, 0x66, 0x98, 0x98, 0x8F,
+ 0x2F, 0x51, 0xB2, 0xB2, 0x2F, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0x66, 0x2F,
+ 0x55, 0x20, 0x20, 0x20, 0x4C, 0x39, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x4D, 0x7E, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x2E, 0x51, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0xA3,
+ 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0x66,
+ 0xB2, 0x51, 0x51, 0xB2, 0xB2, 0xA3, 0x2F, 0xA3,
+ 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0x66,
+ 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0x98, 0x98, 0xA0,
+ 0x20, 0x20, 0x20, 0x20, 0xA5, 0x83, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x4D, 0x7E, 0x4D, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x4D, 0x4D, 0xD6, 0x7E, 0xDD,
+ 0x3C, 0x39, 0xA7, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x92, 0xB2, 0xA3, 0xA3,
+ 0xA3, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3, 0x98,
+ 0x98, 0x66, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0xA3,
+ 0x89, 0x89, 0x51, 0xB2, 0xB2, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x2F, 0xDA,
+ 0x20, 0x20, 0x20, 0xDA, 0xA0, 0x51, 0x3C, 0x7E,
+ 0x6B, 0x6B, 0x6B, 0x4D, 0x7E, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x7E, 0x3C, 0xD8, 0x44, 0xD8,
+ 0x44, 0x83, 0x89, 0xDA, 0x20, 0x3A, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0xB2, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0x8F, 0x8F,
+ 0x98, 0x98, 0x98, 0x98, 0x66, 0xA3, 0xA3, 0x2F,
+ 0x3C, 0x89, 0x89, 0x51, 0xB2, 0xB2, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0x66, 0x98, 0x98, 0xA3, 0x20,
+ 0x20, 0x20, 0x20, 0x6D, 0x2F, 0xE6, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0xD6, 0x3D,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D, 0x7E, 0xA2,
+ 0x74, 0x44, 0xA2, 0xA3, 0x20, 0x3A, 0x2E, 0x6D,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0xA6, 0xA3, 0x66,
+ 0x66, 0x66, 0xA3, 0x2F, 0xA3, 0x66, 0x66, 0x98,
+ 0x66, 0x66, 0x98, 0x98, 0x98, 0x66, 0xA3, 0xA3,
+ 0x83, 0xB2, 0x2F, 0x2F, 0xB2, 0xB2, 0xB2, 0x2F,
+ 0x2F, 0x2F, 0xA3, 0x66, 0x66, 0x98, 0x98, 0x66,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0xA6, 0x20,
+ 0x3A, 0x3A, 0x54, 0x55, 0x7E, 0x6B, 0x6B, 0x6B,
+ 0x4D, 0x3D, 0x6B, 0x6B, 0x6B, 0x57, 0x33, 0xEB,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x4D, 0xA2, 0x74, 0x39, 0x92, 0x20, 0x20, 0x6D,
+ 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x98,
+ 0x98, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0xA3, 0x66, 0xA3,
+ 0x89, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0x2F,
+ 0xA3, 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xB2, 0x3A, 0x20,
+ 0xA7, 0x20, 0x3A, 0x39, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0xB5, 0xCB, 0x6B, 0x6B, 0x3D, 0x8A, 0x42, 0x3D,
+ 0x6B, 0x6B, 0x6B, 0x84, 0x6C, 0x4D, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x7E, 0x83, 0x51, 0x20, 0x20, 0x20,
+ 0x6D, 0x3A, 0x20, 0x20, 0x20, 0x20, 0xAD, 0x66,
+ 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0xA3,
+ 0xB2, 0x98, 0x66, 0x66, 0x98, 0x66, 0x66, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x20, 0x6D,
+ 0x3A, 0x20, 0x98, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0xAA, 0x33, 0x6B, 0x6B, 0x3D, 0xF5, 0x7B, 0x3D,
+ 0x6B, 0x6B, 0x4F, 0x4A, 0x58, 0x3D, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x7E, 0x7E, 0x9C, 0x54, 0xA7,
+ 0x2E, 0xA7, 0x20, 0x20, 0x20, 0x20, 0x54, 0x51,
+ 0x2F, 0x2F, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x2F,
+ 0xB2, 0x66, 0x66, 0x66, 0x66, 0xA3, 0x66, 0xA3,
+ 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0xB2, 0x2F, 0xB2,
+ 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0xA6, 0x20, 0xCE,
+ 0x20, 0x6D, 0x4D, 0x6B, 0xD6, 0x7E, 0x6B, 0x6B,
+ 0x6E, 0x9A, 0x57, 0x6B, 0x2D, 0x7B, 0x7B, 0x3D,
+ 0x6B, 0x84, 0xF5, 0x7B, 0x84, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x98, 0x3A, 0x9C,
+ 0xCE, 0x3A, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x98,
+ 0xB2, 0xB2, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0x89, 0xA3, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0xA3,
+ 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0x2F, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0x2F, 0x2F, 0x89, 0x54, 0x6D, 0x3A,
+ 0x20, 0x98, 0x6B, 0x6B, 0xE0, 0xB4, 0x6B, 0x6B,
+ 0x2D, 0x9E, 0x4A, 0x3D, 0x84, 0xF5, 0xF5, 0x84,
+ 0x6B, 0x6E, 0x59, 0x6C, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x3D, 0x6B, 0x6B, 0x6B, 0x6B, 0xDD, 0xDA, 0x6D,
+ 0x54, 0x20, 0xCE, 0x20, 0x20, 0x20, 0x20, 0xA7,
+ 0x51, 0xB2, 0xB2, 0xB2, 0x2F, 0xB2, 0x2F, 0x2F,
+ 0x2F, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0x66,
+ 0x89, 0xA3, 0xA3, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F,
+ 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0x2F,
+ 0xB2, 0x2F, 0x2F, 0xA3, 0x98, 0x20, 0xA7, 0x20,
+ 0x3A, 0x7E, 0x6B, 0x6B, 0x7F, 0xDE, 0xF6, 0x3D,
+ 0x6B, 0xDB, 0x8A, 0xDB, 0xE9, 0xF3, 0xF3, 0xDB,
+ 0x68, 0xF3, 0x73, 0x7F, 0x6B, 0x6B, 0x57, 0x58,
+ 0xDC, 0x2D, 0x6B, 0x6B, 0x6B, 0x6B, 0x3A, 0x20,
+ 0x20, 0x20, 0x6D, 0x54, 0x20, 0x20, 0x20, 0x20,
+ 0x51, 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0x66,
+ 0xA3, 0x66, 0x98, 0x98, 0x66, 0x98, 0x98, 0x66,
+ 0x2F, 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0x2F, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0xA3,
+ 0x66, 0x98, 0x8F, 0x98, 0xCE, 0xDA, 0x2E, 0x20,
+ 0x2A, 0x6B, 0x6B, 0x6B, 0x6B, 0x2C, 0x34, 0xCB,
+ 0xEB, 0x6C, 0x31, 0x59, 0x82, 0x82, 0x8B, 0x82,
+ 0xF3, 0x73, 0xE9, 0x6B, 0x3D, 0x6E, 0xF3, 0x4A,
+ 0x4F, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x92, 0x20,
+ 0x20, 0x20, 0x6D, 0x6D, 0x20, 0x20, 0x20, 0x20,
+ 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x8F, 0x8F, 0x98,
+ 0x98, 0x98, 0x98, 0x66, 0x98, 0x66, 0x66, 0xA3,
+ 0xA3, 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0xA3,
+ 0xA3, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0x66,
+ 0x8F, 0x55, 0xA5, 0x98, 0x20, 0x2E, 0x54, 0x54,
+ 0x89, 0x6B, 0x6B, 0x6B, 0x6B, 0x84, 0xE3, 0x4A,
+ 0x58, 0x42, 0x5B, 0x8B, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x59, 0x58, 0x57, 0x57, 0x59, 0x7B, 0x84,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0xAD, 0x20,
+ 0x20, 0x20, 0x3A, 0x3A, 0x20, 0x20, 0x20, 0x20,
+ 0x2A, 0x66, 0x8F, 0x55, 0xA5, 0xA5, 0xA0, 0x8F,
+ 0x66, 0xA3, 0xA3, 0x66, 0x98, 0x66, 0x66, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0xA3, 0x2F, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0x66,
+ 0x8F, 0xA5, 0x8F, 0x2E, 0x20, 0x2E, 0x20, 0x3A,
+ 0x4D, 0x6B, 0xE6, 0x84, 0x3D, 0x6B, 0xEB, 0x4A,
+ 0xC9, 0x8B, 0x8B, 0x31, 0x59, 0x82, 0x59, 0x59,
+ 0x5B, 0x82, 0x59, 0x73, 0x7B, 0xDC, 0x57, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x55, 0x20,
+ 0x20, 0x20, 0x6D, 0xDA, 0x20, 0x20, 0x20, 0x20,
+ 0x9C, 0x66, 0x8F, 0xA5, 0xA5, 0x55, 0x8F, 0x66,
+ 0x2F, 0xB2, 0x2F, 0x66, 0x98, 0x98, 0x2F, 0x51,
+ 0x89, 0xB2, 0x2F, 0xA3, 0xA3, 0xB2, 0xB2, 0xB2,
+ 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66,
+ 0x8F, 0xA5, 0x8F, 0x20, 0x20, 0xA7, 0x20, 0xA6,
+ 0x6B, 0x6B, 0xE4, 0x48, 0x2C, 0xDB, 0x4F, 0x9E,
+ 0xD0, 0xD0, 0x8B, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x59, 0x82, 0x82, 0x73, 0x7B, 0x68, 0x6B, 0x3D,
+ 0x68, 0x68, 0x84, 0x3D, 0x6B, 0x6B, 0xA0, 0x20,
+ 0x20, 0x20, 0x6D, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x6D, 0x2F, 0xA0, 0xA5, 0x55, 0x98, 0x66, 0xA3,
+ 0xB2, 0x89, 0xB2, 0x98, 0x8F, 0x98, 0x2F, 0x51,
+ 0x74, 0xB2, 0xA3, 0xA3, 0x2F, 0x2F, 0xB2, 0x2F,
+ 0xA3, 0xA3, 0xA3, 0x66, 0x66, 0xA3, 0x2F, 0xA3,
+ 0x98, 0xA3, 0x6D, 0x20, 0x20, 0xCE, 0x20, 0x2A,
+ 0x6B, 0x6B, 0xEB, 0x2C, 0xE1, 0xF1, 0x7C, 0xD0,
+ 0x8B, 0x8B, 0x82, 0x82, 0x82, 0x82, 0x82, 0x59,
+ 0x82, 0x82, 0x42, 0x82, 0x31, 0x57, 0x4F, 0x7B,
+ 0x7B, 0xF5, 0xF6, 0xDB, 0x6B, 0x6B, 0x98, 0x20,
+ 0x20, 0x20, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x51, 0x66, 0xA0, 0xA0, 0x66, 0x2F, 0xB2,
+ 0xB2, 0x51, 0x2F, 0xA0, 0x55, 0xA3, 0x51, 0x89,
+ 0x44, 0xA3, 0x98, 0x98, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0xA3, 0x66, 0x98, 0x98, 0x98, 0xA3, 0x2F, 0x2F,
+ 0x98, 0x8F, 0x20, 0x20, 0x3A, 0xA6, 0x20, 0xA0,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x7F, 0x7F, 0xC3, 0xC9,
+ 0xD0, 0xD0, 0x29, 0x59, 0x82, 0x73, 0x82, 0x73,
+ 0x59, 0x59, 0x59, 0x59, 0x59, 0x58, 0xAF, 0xF5,
+ 0x8A, 0x68, 0xEB, 0x6B, 0x6B, 0x6B, 0x98, 0x20,
+ 0x20, 0x20, 0x6D, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x51, 0x98, 0x55, 0xA0, 0xA3, 0xB2, 0x51,
+ 0x51, 0x2F, 0x98, 0x55, 0x8F, 0xB2, 0x89, 0x44,
+ 0xA3, 0x55, 0x55, 0x98, 0xA3, 0xB2, 0x2F, 0xA3,
+ 0x66, 0x66, 0x98, 0x8F, 0x66, 0xA3, 0x66, 0x98,
+ 0x55, 0x4C, 0x20, 0x20, 0xDA, 0xAD, 0x20, 0x98,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0x9A, 0xD0,
+ 0xF2, 0x8B, 0x8B, 0x8B, 0x73, 0x82, 0x5B, 0x82,
+ 0x82, 0x59, 0x59, 0x73, 0x73, 0x58, 0x3D, 0x3D,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x66, 0x20,
+ 0x20, 0x3A, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x2F, 0x55, 0xA5, 0x8F, 0xA3, 0x51, 0x51,
+ 0xB2, 0xA3, 0x66, 0x66, 0xA3, 0xB2, 0x89, 0x51,
+ 0x98, 0xA5, 0x55, 0x8F, 0x2F, 0xB2, 0xB2, 0xA3,
+ 0x66, 0x66, 0x98, 0x98, 0x98, 0x66, 0x66, 0x8F,
+ 0x8F, 0x92, 0x20, 0x20, 0x20, 0x6D, 0x6D, 0xA3,
+ 0x6B, 0x6B, 0xEB, 0x7F, 0x4F, 0xDB, 0xD2, 0xC9,
+ 0xC9, 0xD0, 0x8B, 0x8B, 0x73, 0x82, 0x59, 0x8B,
+ 0x59, 0x82, 0x59, 0x59, 0x73, 0xF5, 0xEB, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x55, 0x20,
+ 0x20, 0xA7, 0x54, 0xDA, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x98, 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0x51,
+ 0x51, 0x2F, 0xA3, 0xA3, 0xB2, 0xB2, 0x51, 0xB2,
+ 0xA0, 0xA5, 0x55, 0x66, 0x2F, 0x51, 0x2F, 0xA3,
+ 0x66, 0x66, 0x66, 0x98, 0x66, 0x66, 0x98, 0x98,
+ 0x98, 0x2A, 0x54, 0x95, 0x95, 0x71, 0x2E, 0x98,
+ 0x6B, 0x6B, 0x4D, 0x28, 0xDE, 0x88, 0xB7, 0x70,
+ 0xC9, 0xC9, 0xD0, 0xF2, 0x8B, 0x8B, 0x8B, 0x59,
+ 0x59, 0x59, 0x59, 0x5B, 0x59, 0xF3, 0x57, 0xE9,
+ 0xDB, 0x84, 0x6B, 0x6B, 0x6B, 0x6B, 0x4C, 0xDA,
+ 0x2E, 0xDA, 0x20, 0xDA, 0x2E, 0x2E, 0x6D, 0x20,
+ 0x4C, 0x98, 0x66, 0xA3, 0x2F, 0xB2, 0x51, 0x51,
+ 0xB2, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0xA0, 0xA0, 0x8F, 0x2F, 0xB2, 0x89, 0xB2, 0xA3,
+ 0x66, 0x66, 0x98, 0x66, 0x66, 0x66, 0x66, 0xA3,
+ 0x2F, 0xD1, 0xE2, 0x52, 0x52, 0xF4, 0xBF, 0x9C,
+ 0x39, 0x6B, 0x6B, 0x6B, 0x7F, 0x4F, 0xE3, 0x6A,
+ 0xD0, 0xC9, 0xC9, 0xD0, 0xD0, 0x8B, 0x8B, 0x82,
+ 0x5B, 0x5B, 0x73, 0x8B, 0x59, 0x23, 0x6E, 0x31,
+ 0x59, 0x7B, 0xDB, 0x84, 0x68, 0x7F, 0xAE, 0x54,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0xA6, 0x3A,
+ 0xA0, 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0x51, 0xB2,
+ 0x2F, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x8F, 0x8F, 0x66, 0x2F, 0x51, 0x51, 0xB2, 0xA3,
+ 0x66, 0x98, 0x98, 0x66, 0x66, 0xA3, 0x2F, 0x2F,
+ 0x3C, 0x88, 0x8D, 0x52, 0x52, 0x5D, 0xF7, 0xBF,
+ 0xCE, 0xA2, 0x6B, 0x6B, 0x6B, 0x6B, 0x7F, 0x85,
+ 0x70, 0xC9, 0xC9, 0xC9, 0xD0, 0xEA, 0x8B, 0x5B,
+ 0x82, 0xEA, 0x82, 0x82, 0x42, 0x57, 0x3D, 0x68,
+ 0x68, 0x57, 0x4A, 0x34, 0x22, 0xCC, 0x21, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0xDA, 0xA7, 0x6D,
+ 0xDF, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F,
+ 0xA3, 0x66, 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0x2F,
+ 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0x66,
+ 0x8F, 0x8F, 0x8F, 0x98, 0xA3, 0xA3, 0x89, 0xD8,
+ 0x25, 0x5C, 0x3B, 0x5D, 0x52, 0x80, 0x70, 0x36,
+ 0x71, 0xA7, 0x44, 0x6B, 0x84, 0xCB, 0xAA, 0xF3,
+ 0xC9, 0xC9, 0xC9, 0xC9, 0xD0, 0x8B, 0x5B, 0x5B,
+ 0x5B, 0xEA, 0x82, 0x47, 0x7B, 0x68, 0x3D, 0x3D,
+ 0x6B, 0x3D, 0x6C, 0x2B, 0x80, 0x61, 0x96, 0x81,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0xDA, 0x63,
+ 0xAC, 0x6C, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3,
+ 0xA3, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x66, 0x98, 0x66, 0xA3, 0xB2, 0xB2, 0x2F, 0x66,
+ 0x8F, 0x8F, 0x2F, 0xD8, 0xE4, 0xCD, 0xAA, 0xB4,
+ 0x78, 0x2B, 0x3B, 0x70, 0x46, 0x5D, 0x5D, 0x52,
+ 0x9D, 0x81, 0x3A, 0xA3, 0xCD, 0x48, 0xBE, 0x4F,
+ 0xC3, 0xC9, 0xD0, 0xD0, 0xD0, 0xEA, 0x5B, 0x8B,
+ 0x5B, 0x82, 0x8B, 0x59, 0x4A, 0xF3, 0x33, 0x7F,
+ 0x3D, 0x6B, 0x4F, 0x6F, 0x5D, 0x52, 0x63, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x85,
+ 0x72, 0xDC, 0xD8, 0x2F, 0xA3, 0x2F, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0x98, 0x66, 0x2F, 0xB2, 0x51, 0xA3, 0x98,
+ 0xA0, 0xA3, 0x93, 0xCF, 0x79, 0x27, 0x5C, 0x79,
+ 0x2B, 0x30, 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x3F, 0x69, 0x20, 0x20, 0x2A, 0xD6, 0x3D, 0x6B,
+ 0x84, 0xE3, 0x34, 0xB7, 0xC9, 0xD0, 0xD0, 0xF2,
+ 0xD0, 0x8B, 0x31, 0x68, 0x68, 0x6E, 0x31, 0x33,
+ 0x7F, 0x7E, 0xA1, 0x6F, 0x52, 0x8D, 0xE5, 0xBF,
+ 0x20, 0x20, 0x20, 0x20, 0x81, 0xA8, 0x78, 0x52,
+ 0x52, 0xD2, 0xD8, 0xA3, 0xA3, 0x2F, 0x2F, 0xA3,
+ 0xA3, 0x66, 0x98, 0x98, 0x98, 0x98, 0x98, 0x66,
+ 0x51, 0x66, 0x2F, 0x51, 0x51, 0xB2, 0xA3, 0xA0,
+ 0xA0, 0x44, 0x78, 0xEF, 0x52, 0x30, 0x30, 0x30,
+ 0x3B, 0x70, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D,
+ 0x46, 0xC1, 0x71, 0x20, 0x81, 0xB1, 0xDD, 0x3D,
+ 0xA1, 0xE7, 0xDB, 0xCA, 0xD2, 0x6A, 0x6A, 0x6A,
+ 0xF3, 0xE9, 0xDB, 0x8A, 0x84, 0x3D, 0x84, 0xDC,
+ 0x25, 0x44, 0xB5, 0xEE, 0x30, 0xEF, 0xF0, 0x32,
+ 0x69, 0x5F, 0x4B, 0xA8, 0x99, 0x56, 0x67, 0x30,
+ 0x30, 0x34, 0xB2, 0x2F, 0xA3, 0xA3, 0x66, 0x66,
+ 0x98, 0x8F, 0x98, 0x98, 0x66, 0x66, 0x66, 0x66,
+ 0x51, 0x2F, 0xB2, 0x51, 0x51, 0x2F, 0x66, 0xA0,
+ 0x8F, 0xE0, 0xF9, 0x8D, 0x52, 0x5D, 0x46, 0x5D,
+ 0x80, 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x52, 0x52, 0x60, 0x81, 0x20, 0x20, 0x6D, 0xD1,
+ 0x48, 0xE7, 0x6B, 0x33, 0xF6, 0x7F, 0x7F, 0xDB,
+ 0x84, 0x6B, 0x6C, 0x6A, 0xF3, 0xEB, 0x6B, 0x3D,
+ 0x4F, 0xD8, 0xCD, 0x79, 0x30, 0x67, 0xF9, 0x24,
+ 0xED, 0xD9, 0x8C, 0xED, 0x37, 0x2B, 0x3B, 0x5D,
+ 0x80, 0x85, 0x4E, 0x98, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x51, 0x2F, 0xB2, 0xB2, 0xB2, 0xA3, 0x8F, 0x8F,
+ 0x98, 0xE0, 0xF0, 0x67, 0x5D, 0x80, 0x80, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x70, 0x27, 0x4B, 0x20, 0x81, 0x71, 0x3A,
+ 0xB5, 0xEB, 0x3D, 0xF1, 0xE1, 0x84, 0x84, 0xF1,
+ 0xE3, 0x3D, 0x6B, 0x6C, 0x34, 0xE7, 0x6B, 0x6B,
+ 0xD6, 0x74, 0x5E, 0x78, 0x67, 0x30, 0xEE, 0x5C,
+ 0xF9, 0xF9, 0x45, 0x5C, 0x2B, 0x3B, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0xF8, 0x44, 0x66, 0x66, 0x66, 0x66,
+ 0x2F, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0xA3, 0xA3, 0xA3, 0x98, 0x8F, 0x98,
+ 0x66, 0x83, 0x76, 0x67, 0x30, 0x80, 0x5D, 0x80,
+ 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x22, 0xFA, 0x20, 0x81, 0x20, 0x20,
+ 0xA5, 0x6B, 0x6B, 0xE8, 0xBE, 0x3D, 0x6B, 0x2C,
+ 0xE1, 0xEB, 0x6B, 0x3D, 0x3E, 0xA1, 0x6B, 0x6B,
+ 0x4D, 0x74, 0xE8, 0x62, 0x67, 0x30, 0x8D, 0x67,
+ 0xEE, 0xEE, 0xEE, 0x67, 0x30, 0x80, 0x5D, 0x5D,
+ 0x52, 0x5D, 0x85, 0xAC, 0x3E, 0xA3, 0x66, 0x66,
+ 0x2F, 0x51, 0x51, 0x51, 0x51, 0xB2, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0x66, 0x98, 0x8F, 0x8F, 0x66,
+ 0x2F, 0x83, 0xBC, 0xEE, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x22, 0xB0, 0xAE, 0x81, 0x20, 0x20,
+ 0x4C, 0x3D, 0xEB, 0x39, 0x57, 0x6B, 0x6B, 0x3E,
+ 0x97, 0x3D, 0x6B, 0x3D, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x3D, 0x3C, 0xBA, 0x62, 0xEE, 0x5D, 0x5D, 0x30,
+ 0x30, 0x8D, 0x8D, 0x30, 0x52, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x5D, 0x5D, 0x85, 0xB0, 0x6E, 0x2F, 0x66,
+ 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x2F, 0xA3, 0xA3,
+ 0xB2, 0xA3, 0x66, 0x98, 0x98, 0x8F, 0x98, 0xA3,
+ 0x2F, 0x51, 0xDE, 0x8E, 0x30, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x52, 0x80, 0x5D, 0x22, 0x43, 0x4B, 0x20, 0x6D,
+ 0x44, 0x6B, 0x6B, 0x3D, 0x6B, 0x6B, 0x6B, 0x4D,
+ 0x3D, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0x6B,
+ 0x4D, 0x2A, 0xAE, 0x76, 0xEE, 0x30, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x5D, 0x80, 0x80, 0x5D, 0x7A, 0xB6, 0x51,
+ 0xB2, 0xB2, 0xB2, 0xA3, 0x66, 0x66, 0x66, 0xA3,
+ 0x2F, 0x66, 0x98, 0x8F, 0xA0, 0x98, 0xA3, 0x2F,
+ 0x2F, 0x51, 0xAB, 0x8E, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x80, 0x5D, 0x52, 0x52, 0x94, 0x2F, 0x7E,
+ 0x6B, 0x3D, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x7E,
+ 0xAD, 0x54, 0xAE, 0x24, 0x2B, 0x3B, 0x5D, 0x52,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x52, 0x52, 0x5D, 0x5D, 0x5D, 0xD2, 0x3E,
+ 0x89, 0x89, 0xB2, 0xA3, 0x66, 0x98, 0x66, 0x66,
+ 0x2F, 0x66, 0x8F, 0x8F, 0xA0, 0x98, 0xA3, 0xB2,
+ 0x2F, 0x51, 0xDE, 0x79, 0x5D, 0x80, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x80, 0x5D, 0x52, 0x6F, 0xA4, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D, 0xA2, 0xCE,
+ 0x20, 0x20, 0x95, 0x24, 0x67, 0x3B, 0x80, 0x80,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x30, 0xB0, 0x86,
+ 0x89, 0x51, 0x2F, 0x66, 0x98, 0x98, 0xA3, 0xA3,
+ 0xA3, 0x66, 0x8F, 0xA0, 0x8F, 0x66, 0x2F, 0xB2,
+ 0x2F, 0x4E, 0x76, 0x2B, 0x30, 0x5D, 0x5D, 0x5D,
+ 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x5D, 0x5D, 0x46, 0x52, 0x21, 0x74,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x7E, 0x98, 0x3A, 0x20,
+ 0x20, 0x81, 0x60, 0xED, 0x2B, 0x52, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x80,
+ 0x22, 0x5D, 0x5D, 0x5D, 0x8D, 0x2B, 0x38, 0x39,
+ 0x51, 0x66, 0x8F, 0xA0, 0xA0, 0x8F, 0x98, 0x66,
+ 0x66, 0x66, 0x8F, 0x55, 0x8F, 0xA3, 0xB2, 0xB2,
+ 0xA3, 0xE8, 0xF9, 0x30, 0x3B, 0x80, 0x5D, 0x5D,
+ 0x5D, 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x80, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x52, 0x30, 0xD4, 0x99,
+ 0x51, 0x4D, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D, 0x6B,
+ 0x6B, 0x6B, 0x7E, 0xA3, 0x2E, 0x20, 0x20, 0x20,
+ 0x20, 0x81, 0xC5, 0xED, 0x2B, 0x3B, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x52, 0x52, 0x6F, 0xDE, 0x2C, 0x39, 0x51,
+ 0x66, 0xA0, 0xA5, 0xA5, 0x55, 0x8F, 0x66, 0x66,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0x8F, 0xA3, 0x2F, 0x2F,
+ 0x51, 0xD5, 0x45, 0x8D, 0x3B, 0x5D, 0x80, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x5D, 0x5D, 0x52, 0x67, 0x37, 0xA9,
+ 0x3A, 0xCE, 0xA0, 0x2F, 0x51, 0x51, 0xB2, 0xA3,
+ 0xA5, 0x9C, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x54, 0x99, 0xED, 0x67, 0x30, 0x5D, 0x5D,
+ 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x3B, 0x80,
+ 0x8D, 0x79, 0x48, 0x2C, 0x39, 0x44, 0xB2, 0x66,
+ 0xA0, 0x2A, 0xA5, 0xA0, 0x8F, 0x66, 0xA3, 0xA3,
+ 0xA0, 0x8F, 0x8F, 0xA0, 0x8F, 0xA3, 0xB2, 0xB2,
+ 0xD8, 0xBC, 0x45, 0xEE, 0x67, 0x8D, 0x30, 0x30,
+ 0x52, 0x52, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x5D, 0x5D, 0x80, 0x3B, 0x67, 0xF9, 0x32,
+ 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0xBF, 0xEC, 0xED, 0x2B, 0x30, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x5D, 0x5D, 0x52, 0x30, 0x67, 0x2B,
+ 0xCF, 0xAA, 0xD8, 0x89, 0x89, 0x51, 0x66, 0x55,
+ 0x2A, 0x2A, 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0x2F,
+ 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x2F, 0xB2, 0x2F,
+ 0xD1, 0x28, 0x56, 0xED, 0x62, 0x37, 0x5C, 0x79,
+ 0x8E, 0x2B, 0x2B, 0x30, 0x30, 0x30, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x80, 0x3B, 0xEE, 0x56, 0xA9,
+ 0x75, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x5F, 0x99, 0xD9, 0x45, 0x8D, 0x3B, 0x5D,
+ 0x5D, 0x3B, 0x5D, 0x8D, 0x2B, 0x79, 0x79, 0x41,
+ 0x83, 0xB2, 0xB2, 0x89, 0x89, 0x2F, 0xA0, 0x2A,
+ 0xAD, 0xA5, 0x98, 0x66, 0xA3, 0xB2, 0x2F, 0xB2,
+ 0xD8, 0xB2, 0xA3, 0x98, 0x98, 0x2F, 0x51, 0xB2,
+ 0xA3, 0x83, 0x3E, 0x25, 0xD5, 0xE5, 0x50, 0x8C,
+ 0xED, 0x24, 0x24, 0xF0, 0x45, 0x8E, 0x2B, 0x30,
+ 0x30, 0x5D, 0x3B, 0x30, 0xEE, 0xF0, 0xC6, 0x65,
+ 0x75, 0x71, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x4B, 0xC5, 0x7D, 0x24, 0xEE, 0x67, 0x30,
+ 0x30, 0x8D, 0x67, 0x8E, 0xF9, 0xF7, 0x97, 0xDD,
+ 0x2F, 0x2F, 0x51, 0x89, 0x89, 0x2F, 0x55, 0x2A,
+ 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xDD, 0xA3, 0x66, 0x98, 0x66, 0x2F, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0xB2, 0x51, 0x89, 0x44, 0xE0, 0x5E,
+ 0x91, 0x9F, 0x9F, 0x7D, 0x7D, 0xD9, 0x24, 0xF0,
+ 0x79, 0x8E, 0xEE, 0x8E, 0x24, 0x40, 0x65, 0x35,
+ 0x69, 0x2E, 0x98, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F, 0x2F, 0x98,
+ 0xA5, 0xA7, 0x95, 0xD7, 0x8C, 0xF0, 0x8E, 0x8E,
+ 0xEE, 0x79, 0xF0, 0xED, 0x50, 0xE8, 0x89, 0x2F,
+ 0xA3, 0xA3, 0xB2, 0x89, 0xB2, 0x66, 0xA0, 0x55,
+ 0x8F, 0x98, 0x66, 0xA3, 0xB2, 0x51, 0x51, 0xB2,
+ 0x74, 0xA0, 0xA0, 0x98, 0x66, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0xA3, 0x2F,
+ 0x51, 0x83, 0xE4, 0x87, 0xB8, 0xFA, 0xA9, 0xC6,
+ 0x40, 0x64, 0x64, 0x50, 0xD7, 0x65, 0x35, 0x60,
+ 0x98, 0xB2, 0x66, 0x66, 0xA3, 0x2F, 0xA3, 0xA3,
+ 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0xB2,
+ 0x89, 0xDD, 0x9B, 0xC0, 0x7D, 0x50, 0x8C, 0xED,
+ 0xED, 0x8C, 0x40, 0x9F, 0x4E, 0x51, 0xB2, 0x2F,
+ 0x2F, 0x2F, 0xB2, 0x51, 0xA3, 0x98, 0xA0, 0x55,
+ 0xA0, 0xA0, 0x8F, 0x66, 0x2F, 0x51, 0xB2, 0xA3,
+ 0xA3, 0x2A, 0x55, 0x98, 0xA3, 0x2F, 0xB2, 0x2F,
+ 0x66, 0x66, 0x2F, 0xB2, 0xD1, 0x2F, 0x2F, 0xA3,
+ 0xB2, 0xB2, 0xA3, 0x8F, 0xA3, 0x2F, 0xD1, 0x94,
+ 0xEC, 0x65, 0x65, 0xC0, 0xC0, 0x35, 0x95, 0xC2,
+ 0xA3, 0x98, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0xA3, 0x2F, 0xB2, 0x2F, 0x2F, 0x2F, 0x2F, 0x51,
+ 0x89, 0x44, 0xD1, 0x60, 0x35, 0xA9, 0x32, 0xC6,
+ 0xD7, 0x32, 0x94, 0x44, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0x8F, 0xA0, 0xA0,
+ 0x55, 0xA0, 0x8F, 0xA3, 0x51, 0x51, 0x2F, 0xA3,
+ 0x8F, 0x2A, 0x55, 0x66, 0xA3, 0x2F, 0x2F, 0xB2,
+ 0xA3, 0x66, 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x66,
+ 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x8F, 0xA0, 0x2F,
+ 0x5E, 0xDF, 0xB9, 0x60, 0x95, 0xD3, 0x89, 0x2F,
+ 0xA3, 0x66, 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x51, 0x2F, 0x8F, 0x2F, 0xC4, 0xB9, 0x9B, 0xEC,
+ 0x53, 0xB3, 0x4E, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0x66, 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0xA3, 0x51, 0x89, 0x51, 0xA3, 0x66,
+ 0xA0, 0x55, 0x8F, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x2F, 0xA3, 0x2F, 0x51, 0x51, 0xB2, 0xA3, 0x66,
+ 0x66, 0xA3, 0x66, 0x66, 0x66, 0x66, 0x66, 0xA3,
+ 0xB2, 0xC2, 0x74, 0xD8, 0xB2, 0xA3, 0xA3, 0xA3,
+ 0x66, 0x66, 0x2F, 0x2F, 0xA3, 0x66, 0x66, 0x66,
+ 0xA3, 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xB2,
+ 0x2F, 0x66, 0xA0, 0x55, 0x98, 0x2F, 0x89, 0x89,
+ 0x89, 0xB2, 0x2F, 0xA3, 0x2F, 0x51, 0x51, 0xB2,
+ 0x2F, 0x66, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0xA3, 0xB2, 0x89, 0xD8, 0x51, 0xA3, 0x98,
+ 0x66, 0x98, 0x66, 0x2F, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0xB2, 0xA3, 0xA3, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3,
+ 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x89, 0xD8, 0x89, 0x2F, 0x66, 0x66, 0xA3, 0xA3,
+ 0x98, 0x98, 0x66, 0x66, 0x98, 0x98, 0x66, 0xA3,
+ 0x2F, 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F,
+ 0xB2, 0x2F, 0x66, 0x98, 0x66, 0xA3, 0x2F, 0x2F,
+ 0x2F, 0xB2, 0x2F, 0xA3, 0xA3, 0xB2, 0xB2, 0x2F,
+ 0x2F, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F,
+ 0x2F, 0xB2, 0x89, 0xD8, 0x44, 0x2F, 0x66, 0x66,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0x51, 0x51,
+ 0x89, 0x89, 0xB2, 0xA3, 0x98, 0x66, 0xA3, 0x66,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x66, 0xA3, 0x2F,
+ 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xB2, 0xB2, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0x51, 0x51, 0x89, 0x89, 0xB2, 0xA3, 0x98, 0x66
};
unsigned char linux_logo_bw[] __initdata = {
@@ -939,63 +941,63 @@ unsigned char linux_logo_bw[] __initdata = {
0xF9, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xF9, 0xCF, 0xC3, 0xF8, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x87, 0x81, 0xF9,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xA7,
- 0x99, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF9, 0xF3, 0xBC, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0xE3, 0xBC, 0xF9, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0, 0x3C, 0xF9,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0,
- 0x19, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF9, 0xC0, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80,
- 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xF9, 0xC0, 0x21, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xF9, 0xB1, 0x80, 0xEC, 0xC0, 0x1F,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x90, 0x00, 0xE4,
- 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x8C,
- 0xC0, 0x7C, 0x04, 0x81, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xE3, 0x80, 0x00, 0x7C, 0x40, 0x11, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xE3, 0x80, 0x00, 0x7F, 0xD2, 0x29,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0x00, 0x3F,
- 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0x00,
- 0x00, 0x3F, 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF,
- 0x1E, 0x00, 0x00, 0x1F, 0x80, 0x19, 0xFF, 0xFF,
- 0xFF, 0xFE, 0x1C, 0x00, 0x00, 0x1E, 0x80, 0x19,
- 0xFF, 0xFF, 0xFF, 0xFE, 0x3C, 0x00, 0x00, 0x1E,
- 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC, 0x7C, 0x00,
- 0x00, 0x0F, 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC,
- 0xF8, 0x00, 0x00, 0x0E, 0x80, 0x11, 0xFF, 0xFF,
- 0xFF, 0xFC, 0xF8, 0x00, 0x00, 0x06, 0x00, 0x11,
- 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0x00, 0x00, 0x06,
- 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF9, 0xF0, 0x00,
- 0x00, 0x02, 0x00, 0x09, 0xFF, 0xFF, 0xFF, 0xF1,
- 0xF0, 0x00, 0x00, 0x02, 0x80, 0x10, 0xFF, 0xFF,
- 0xFF, 0xF1, 0xE0, 0x00, 0x00, 0x00, 0x97, 0x10,
+ 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xA7,
+ 0x99, 0xF9, 0xC2, 0x40, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xF9, 0xF3, 0xBC, 0xF9, 0x90, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xE3, 0xBC, 0xF9, 0xA0, 0x00,
+ 0x8F, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0, 0x3C, 0xF9,
+ 0x83, 0xE0, 0x2F, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0,
+ 0x19, 0xF0, 0x1F, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xF9, 0xC0, 0x03, 0xF0, 0x3F, 0xF7, 0x8F, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8, 0x7F, 0xF7,
+ 0xC7, 0xFF, 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8,
+ 0x6F, 0xF7, 0xE7, 0xFF, 0xFF, 0xFF, 0xF9, 0x80,
+ 0x01, 0xF8, 0x7F, 0xF7, 0xE7, 0xFF, 0xFF, 0xFF,
+ 0xF9, 0xC0, 0x21, 0xD8, 0x7F, 0xE7, 0xEF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xB1, 0x80, 0xEC, 0x7B, 0xFF,
+ 0xEF, 0xFF, 0xFF, 0xFF, 0xF1, 0x90, 0x00, 0xE4,
+ 0x7B, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xF1, 0x8C,
+ 0xC0, 0x7C, 0x79, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF,
+ 0xE3, 0x80, 0x00, 0x7C, 0x7C, 0xFF, 0xCF, 0xFF,
+ 0xFF, 0xFF, 0xE3, 0x80, 0x00, 0x7F, 0x77, 0xFF,
+ 0xDF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0x00, 0x3F,
+ 0x3F, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0x0E, 0x00,
+ 0x00, 0x3F, 0xBF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF,
+ 0x1E, 0x00, 0x00, 0x1F, 0x9F, 0xFF, 0x3F, 0xFF,
+ 0xFF, 0xFE, 0x1C, 0x00, 0x00, 0x1F, 0x9F, 0xFF,
+ 0x7F, 0xFF, 0xFF, 0xFE, 0x3C, 0x00, 0x00, 0x1F,
+ 0x8F, 0xFE, 0x7F, 0xFF, 0xFF, 0xFC, 0x7C, 0x00,
+ 0x00, 0x0F, 0xC7, 0xFC, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0xF8, 0x00, 0x00, 0x0F, 0xF7, 0xF9, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0xF8, 0x00, 0x00, 0x07, 0xFB, 0xF3,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0x00, 0x00, 0x07,
+ 0xFD, 0xE7, 0xFF, 0xFF, 0xFF, 0xF9, 0xF0, 0x00,
+ 0x00, 0x03, 0xFE, 0x8F, 0xFF, 0xFF, 0xFF, 0xF1,
+ 0xF0, 0x00, 0x00, 0x03, 0xFE, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xF1, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xBF,
0xFF, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x00, 0x00,
- 0xDF, 0xF0, 0xFF, 0xFF, 0xFF, 0xE3, 0xC0, 0x00,
- 0x00, 0x00, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC7,
- 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF,
- 0xFF, 0xC7, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8,
+ 0xFE, 0xBF, 0xFF, 0xFF, 0xFF, 0xE3, 0xC0, 0x00,
+ 0x00, 0x00, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xC7,
+ 0xC0, 0x00, 0x00, 0x01, 0xFE, 0xBF, 0xFF, 0xFF,
+ 0xFF, 0xC7, 0x80, 0x00, 0x00, 0x01, 0xFE, 0x9F,
0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x00, 0x01,
- 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00,
- 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x9F,
- 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF,
- 0xFF, 0x9F, 0x80, 0x00, 0x00, 0x01, 0x80, 0x18,
+ 0xFE, 0x07, 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00,
+ 0x00, 0x01, 0xFE, 0x87, 0xFF, 0xFF, 0xFF, 0x9F,
+ 0x80, 0x00, 0x00, 0x01, 0xFD, 0x33, 0xFF, 0xFF,
+ 0xFF, 0x9F, 0x80, 0x00, 0x00, 0x01, 0x80, 0xF3,
0xFF, 0xFF, 0xFF, 0x9E, 0x80, 0x00, 0x00, 0x03,
- 0xA8, 0x11, 0xFF, 0xFF, 0xFF, 0x9F, 0x80, 0x00,
- 0x00, 0x02, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x99,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x09, 0xFF, 0xFF,
- 0xFF, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x01,
+ 0x8B, 0xF9, 0xFF, 0xFF, 0xFF, 0x9F, 0x80, 0x00,
+ 0x00, 0x02, 0x27, 0xF8, 0xFF, 0xFF, 0xFF, 0x99,
+ 0x80, 0x00, 0x00, 0x00, 0x07, 0xF8, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x80, 0x00, 0x00, 0x01, 0x8F, 0xF8,
0xFF, 0xFF, 0xFE, 0x20, 0x60, 0x00, 0x00, 0x00,
- 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0x00, 0x30, 0x00,
- 0x00, 0x00, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x40,
- 0x38, 0x00, 0x00, 0x00, 0xFE, 0x47, 0xFF, 0xFF,
- 0x81, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xFC, 0x23,
- 0xFF, 0xFF, 0x90, 0x00, 0x1E, 0x00, 0x00, 0x00,
- 0x78, 0x11, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0x80,
- 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00,
+ 0xE3, 0xF8, 0xFF, 0xFF, 0xF8, 0x00, 0x30, 0x00,
+ 0x00, 0x00, 0xF8, 0x78, 0xFF, 0xFF, 0xC0, 0x40,
+ 0x38, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x7F, 0xFF,
+ 0x81, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xFC, 0x20,
+ 0x7F, 0xFF, 0x90, 0x00, 0x1E, 0x00, 0x00, 0x00,
+ 0x78, 0x10, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00,
0x07, 0xC0, 0x00, 0x00, 0x00, 0x08, 0xFF, 0xFF,
0xC0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x04,
0x7F, 0xFF, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x10,
@@ -1024,22 +1026,22 @@ unsigned char linux_logo_bw[] __initdata = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
-/* Painted by Johnny Stenback <jst@uwasa.fi> */
+unsigned char linux_logo16_red[0];
+unsigned char linux_logo16_green[0];
+unsigned char linux_logo16_blue[0];
+unsigned char linux_logo16[0];
+
+#else
+
+/* prototypes only */
+extern unsigned char linux_logo_red[];
+extern unsigned char linux_logo_green[];
+extern unsigned char linux_logo_blue[];
+extern unsigned char linux_logo[];
+extern unsigned char linux_logo_bw[];
+extern unsigned char linux_logo16_red[];
+extern unsigned char linux_logo16_green[];
+extern unsigned char linux_logo16_blue[];
+extern unsigned char linux_logo16[];
-unsigned char *linux_serial_image __initdata = "\n"
-" .u$e.\n"
-" .$$$$$:S\n"
-" $\"*$/\"*$$\n"
-" $.`$ . ^F\n"
-" 4k+#+T.$F\n"
-" 4P+++\"$\"$\n"
-" :R\"+ t$$B\n"
-" ___# $$$\n"
-" | | R$$k\n"
-" dd. | Linux $!$\n"
-" ddd | Sparc $9$F\n"
-" '!!!!!$ !!#!`\n"
-" !!!!!* .!!!!!`\n"
-"'!!!!!!!W..e$$!!!!!!` %s\n"
-" \"~^^~ ^~~^\n"
-"\n";
+#endif
diff --git a/include/asm-sparc/mostek.h b/include/asm-sparc/mostek.h
index 12baee12a..407869348 100644
--- a/include/asm-sparc/mostek.h
+++ b/include/asm-sparc/mostek.h
@@ -1,13 +1,15 @@
-/* $Id: mostek.h,v 1.8 1996/11/04 00:45:30 ecd Exp $
+/* $Id: mostek.h,v 1.9 1998/07/28 16:53:25 jj Exp $
* mostek.h: Describes the various Mostek time of day clock registers.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
* Copyright (C) 1996 Thomas K. Dyas (tdyas@eden.rutgers.edu)
+ * Added intersil code 05/25/98 Chris Davis (cdavis@cois.on.ca)
*/
#ifndef _SPARC_MOSTEK_H
#define _SPARC_MOSTEK_H
+#include <linux/config.h>
#include <asm/idprom.h>
/* M48T02 Register Map (adapted from Sun NVRAM/Hostid FAQ)
@@ -114,7 +116,46 @@ struct mostek48t08 {
};
extern struct mostek48t08 *mstk48t08_regs;
-enum sparc_clock_type { MSTK48T02, MSTK48T08, MSTK_INVALID };
extern enum sparc_clock_type sp_clock_typ;
+#ifdef CONFIG_SUN4
+enum sparc_clock_type { MSTK48T02, MSTK48T08, \
+INTERSIL, MSTK_INVALID };
+#else
+enum sparc_clock_type { MSTK48T02, MSTK48T08, \
+MSTK_INVALID };
+#endif
+
+#ifdef CONFIG_SUN4
+/* intersil on a sun 4/260 code data from harris doc */
+struct intersil_dt {
+ volatile unsigned char int_csec;
+ volatile unsigned char int_hour;
+ volatile unsigned char int_min;
+ volatile unsigned char int_sec;
+ volatile unsigned char int_month;
+ volatile unsigned char int_day;
+ volatile unsigned char int_year;
+ volatile unsigned char int_dow;
+};
+
+struct intersil {
+ struct intersil_dt clk;
+ struct intersil_dt cmp;
+ volatile unsigned char int_intr_reg;
+ volatile unsigned char int_cmd_reg;
+};
+
+#define INTERSIL_STOP 0x0
+#define INTERSIL_START 0x8
+#define INTERSIL_INTR_DISABLE 0x0
+#define INTERSIL_INTR_ENABLE 0x10
+#define INTERSIL_32K 0x0
+#define INTERSIL_NORMAL 0x0
+#define INTERSIL_24H 0x4
+#define INTERSIL_INT_100HZ 0x2
+
+/* end of intersil info */
+#endif
+
#endif /* !(_SPARC_MOSTEK_H) */
diff --git a/include/asm-sparc/page.h b/include/asm-sparc/page.h
index 922f5e5e9..57e46e7b0 100644
--- a/include/asm-sparc/page.h
+++ b/include/asm-sparc/page.h
@@ -1,4 +1,4 @@
-/* $Id: page.h,v 1.40 1998/02/06 14:14:46 jj Exp $
+/* $Id: page.h,v 1.43 1998/05/11 08:40:11 davem Exp $
* page.h: Various defines and such for MMU operations on the Sparc for
* the Linux kernel.
*
diff --git a/include/asm-sparc/pgtable.h b/include/asm-sparc/pgtable.h
index 11f37e980..2de010213 100644
--- a/include/asm-sparc/pgtable.h
+++ b/include/asm-sparc/pgtable.h
@@ -1,4 +1,4 @@
-/* $Id: pgtable.h,v 1.74 1998/03/11 04:08:37 tdyas Exp $ */
+/* $Id: pgtable.h,v 1.77 1998/08/04 20:51:19 davem Exp $ */
#ifndef _SPARC_PGTABLE_H
#define _SPARC_PGTABLE_H
@@ -91,6 +91,7 @@ BTFIXUPDEF_SIMM13(user_ptrs_per_pgd)
#define VMALLOC_VMADDR(x) ((unsigned long)(x))
/* This is the same accross all platforms */
#define VMALLOC_START (0xfe300000)
+#define VMALLOC_END ~0x0UL
BTFIXUPDEF_INT(page_none)
BTFIXUPDEF_INT(page_shared)
@@ -354,6 +355,7 @@ BTFIXUPDEF_CALL(pte_t *, get_pte_fast, void)
BTFIXUPDEF_CALL(pgd_t *, get_pgd_fast, void)
BTFIXUPDEF_CALL(void, free_pte_slow, pte_t *)
BTFIXUPDEF_CALL(void, free_pgd_slow, pgd_t *)
+BTFIXUPDEF_CALL(int, do_check_pgt_cache, int, int)
#define get_pte_fast() BTFIXUP_CALL(get_pte_fast)()
extern __inline__ pmd_t *get_pmd_fast(void)
@@ -366,6 +368,7 @@ extern __inline__ void free_pmd_slow(pmd_t *pmd)
{
}
#define free_pgd_slow(pgd) BTFIXUP_CALL(free_pgd_slow)(pgd)
+#define do_check_pgt_cache(low,high) BTFIXUP_CALL(do_check_pgt_cache)(low,high)
/*
* Allocate and free page tables. The xxx_kernel() versions are
@@ -571,7 +574,6 @@ __get_iospace (unsigned long addr)
#define module_map vmalloc
#define module_unmap vfree
-#define module_shrink vshrink
/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
#define PageSkip(page) (test_bit(PG_skip, &(page)->flags))
diff --git a/include/asm-sparc/pgtsrmmu.h b/include/asm-sparc/pgtsrmmu.h
index fac1df5ed..fc569dcaf 100644
--- a/include/asm-sparc/pgtsrmmu.h
+++ b/include/asm-sparc/pgtsrmmu.h
@@ -1,4 +1,4 @@
-/* $Id: pgtsrmmu.h,v 1.28 1997/03/15 07:47:52 davem Exp $
+/* $Id: pgtsrmmu.h,v 1.29 1998/07/26 03:05:42 davem Exp $
* pgtsrmmu.h: SRMMU page table defines and code.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
@@ -30,6 +30,7 @@
#define SRMMU_PGD_TABLE_SIZE 0x400 /* 256 entries, 4 bytes a piece */
#define SRMMU_VMALLOC_START (0xfe300000)
+#define SRMMU_VMALLOC_END ~0x0UL
/* Definition of the values in the ET field of PTD's and PTE's */
#define SRMMU_ET_MASK 0x3
diff --git a/include/asm-sparc/pgtsun4.h b/include/asm-sparc/pgtsun4.h
index 170465d98..d9d8afaa2 100644
--- a/include/asm-sparc/pgtsun4.h
+++ b/include/asm-sparc/pgtsun4.h
@@ -1,4 +1,4 @@
-/* $Id: pgtsun4.h,v 1.3 1998/01/30 11:00:01 jj Exp $
+/* $Id: pgtsun4.h,v 1.4 1998/07/26 03:05:42 davem Exp $
* pgtsun4.h: Sun4 specific pgtable.h defines and code.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
@@ -48,6 +48,7 @@
* area, makes sense. This works out to the value below.
*/
#define SUN4C_VMALLOC_START (0xfe300000)
+#define SUN4C_VMALLOC_END ~0x0UL
/*
* Sparc SUN4C pte fields.
diff --git a/include/asm-sparc/pgtsun4c.h b/include/asm-sparc/pgtsun4c.h
index d23881bfb..197f4afca 100644
--- a/include/asm-sparc/pgtsun4c.h
+++ b/include/asm-sparc/pgtsun4c.h
@@ -1,4 +1,4 @@
-/* $Id: pgtsun4c.h,v 1.35 1998/01/30 11:00:05 jj Exp $
+/* $Id: pgtsun4c.h,v 1.36 1998/07/26 03:05:44 davem Exp $
* pgtsun4c.h: Sun4c specific pgtable.h defines and code.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
@@ -47,6 +47,7 @@
* area, makes sense. This works out to the value below.
*/
#define SUN4C_VMALLOC_START (0xfe300000)
+#define SUN4C_VMALLOC_END ~0x0UL
/*
* Sparc SUN4C pte fields.
diff --git a/include/asm-sparc/processor.h b/include/asm-sparc/processor.h
index cc5e3df5d..6f34d510b 100644
--- a/include/asm-sparc/processor.h
+++ b/include/asm-sparc/processor.h
@@ -1,4 +1,4 @@
-/* $Id: processor.h,v 1.62 1998/02/05 14:20:02 jj Exp $
+/* $Id: processor.h,v 1.67 1998/07/31 20:03:23 zaitcev Exp $
* include/asm-sparc/processor.h
*
* Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu)
@@ -37,11 +37,6 @@
*/
#define TASK_SIZE PAGE_OFFSET
-#define COPY_TASK_STRUCT(dst, src) \
-do { \
- *dst = *src; \
-} while (0)
-
struct fpq {
unsigned long *insn_addr;
unsigned long insn;
@@ -83,7 +78,6 @@ struct thread_struct {
unsigned long fsr;
unsigned long fpqdepth;
struct fpq fpqueue[16];
- struct sigstack sstk_info;
unsigned long flags;
mm_segment_t current_ds;
struct exec core_exec; /* just what it says. */
@@ -111,8 +105,6 @@ struct thread_struct {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
/* FPU status, FPU qdepth, FPU queue */ \
0, 0, { { 0, 0, }, }, \
-/* sstk_info */ \
-{ 0, 0, }, \
/* flags, current_ds, */ \
SPARC_FLAG_KTHREAD, KERNEL_DS, \
/* core_exec */ \
@@ -154,8 +146,13 @@ extern __inline__ void start_thread(struct pt_regs * regs, unsigned long pc,
/* Free all resources held by a thread. */
#define release_thread(tsk) do { } while(0)
+#define copy_segments(nr, tsk, mm) do { } while (0)
+#define release_segments(mm) do { } while (0)
+
#ifdef __KERNEL__
+extern struct task_struct *last_task_used_math;
+
/* Allocation and freeing of basic task resources. */
BTFIXUPDEF_CALL(struct task_struct *, alloc_task_struct, void)
BTFIXUPDEF_CALL(void, free_task_struct, struct task_struct *)
diff --git a/include/asm-sparc/sbus.h b/include/asm-sparc/sbus.h
index 96a824dd9..e04656e6c 100644
--- a/include/asm-sparc/sbus.h
+++ b/include/asm-sparc/sbus.h
@@ -1,4 +1,4 @@
-/* $Id: sbus.h,v 1.14 1998/03/09 14:04:56 jj Exp $
+/* $Id: sbus.h,v 1.15 1998/05/22 14:33:36 jj Exp $
* sbus.h: Defines for the Sun SBus.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
@@ -52,7 +52,7 @@ struct linux_sbus_device {
struct linux_prom_registers reg_addrs[PROMREG_MAX];
int num_registers, ranges_applied;
- struct linux_prom_irqs irqs[PROMINTR_MAX];
+ unsigned int irqs[4];
int num_irqs;
unsigned long sbus_addr; /* Absolute base address for device. */
diff --git a/include/asm-sparc/siginfo.h b/include/asm-sparc/siginfo.h
index 1d1d0a28e..0509aa1b3 100644
--- a/include/asm-sparc/siginfo.h
+++ b/include/asm-sparc/siginfo.h
@@ -1,4 +1,4 @@
-/* $Id: siginfo.h,v 1.1 1997/12/14 23:24:40 ecd Exp $
+/* $Id: siginfo.h,v 1.2 1998/07/30 11:31:49 davem Exp $
* siginfo.c:
*/
@@ -45,6 +45,7 @@ typedef struct siginfo {
/* SIGCHLD */
struct {
pid_t _pid; /* which child */
+ uid_t _uid; /* sender's uid */
int _status; /* exit code */
clock_t _utime;
clock_t _stime;
diff --git a/include/asm-sparc/signal.h b/include/asm-sparc/signal.h
index cdc8b27fc..c3517216b 100644
--- a/include/asm-sparc/signal.h
+++ b/include/asm-sparc/signal.h
@@ -1,4 +1,4 @@
-/* $Id: signal.h,v 1.31 1997/12/14 23:24:41 ecd Exp $ */
+/* $Id: signal.h,v 1.34 1998/07/29 16:32:38 jj Exp $ */
#ifndef _ASMSPARC_SIGNAL_H
#define _ASMSPARC_SIGNAL_H
@@ -75,6 +75,7 @@
#define SIGPROF 27
#define SIGWINCH 28
#define SIGLOST 29
+#define SIGPWR SIGLOST
#define SIGUSR1 30
#define SIGUSR2 31
@@ -133,6 +134,7 @@ struct sigstack {
*/
#define SA_NOCLDSTOP SV_IGNCHILD
#define SA_STACK SV_SSTACK
+#define SA_ONSTACK SV_SSTACK
#define SA_RESTART SV_INTR
#define SA_ONESHOT SV_RESET
#define SA_INTERRUPT 0x10
@@ -145,6 +147,15 @@ struct sigstack {
#define SIG_UNBLOCK 0x02 /* for unblocking signals */
#define SIG_SETMASK 0x04 /* for setting the signal mask */
+/*
+ * sigaltstack controls
+ */
+#define SS_ONSTACK 1
+#define SS_DISABLE 2
+
+#define MINSIGSTKSZ 4096
+#define SIGSTKSZ 16384
+
#ifdef __KERNEL__
/*
* These values of sa_flags are used only by the kernel as part of the
diff --git a/include/asm-sparc/smp.h b/include/asm-sparc/smp.h
index 8ecf68d08..3cbb49c86 100644
--- a/include/asm-sparc/smp.h
+++ b/include/asm-sparc/smp.h
@@ -43,16 +43,6 @@ struct cpuinfo_sparc {
extern struct cpuinfo_sparc cpu_data[NR_CPUS];
extern unsigned long cpu_offset[NR_CPUS];
-struct klock_info {
- unsigned char kernel_flag;
- unsigned char akp;
-};
-
-extern struct klock_info klock_info;
-
-#define KLOCK_HELD 0xff
-#define KLOCK_CLEAR 0x00
-
/*
* Private routines/data
*/
@@ -109,6 +99,10 @@ extern __volatile__ int cpu_number_map[NR_CPUS];
extern __volatile__ int __cpu_logical_map[NR_CPUS];
extern unsigned long smp_proc_in_lock[NR_CPUS];
+/* As idle task checks need_resched in a tight loop, it is not necessary to
+ wake it up. -jj */
+#define smp_send_reschedule(cpu) do {} while (0)
+
extern __inline__ int cpu_logical_map(int cpu)
{
return __cpu_logical_map[cpu];
@@ -192,13 +186,6 @@ extern __inline__ int hard_smp_processor_id(void)
#define SMP_FROM_SYSCALL 2
#else /* !(__SMP__) */
-#ifndef __ASSEMBLY__
-extern __inline__ int cpu_logical_map(int cpu)
-{
- return cpu;
-}
-#endif
-#endif /* !(__SMP__) */
#define NO_PROC_ID 0xFF
diff --git a/include/asm-sparc/smp_lock.h b/include/asm-sparc/smp_lock.h
deleted file mode 100644
index 4f0a8e5f4..000000000
--- a/include/asm-sparc/smp_lock.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* smp_lock.h: 32-bit Sparc SMP master lock primitives.
- *
- * Copyright (C) 1996,1997 David S. Miller (davem@caip.rutgers.edu)
- */
-
-#ifndef __SPARC_SMPLOCK_H
-#define __SPARC_SMPLOCK_H
-
-#include <asm/smp.h>
-#include <asm/ptrace.h>
-
-#ifndef __SMP__
-
-#define lock_kernel() do { } while(0)
-#define unlock_kernel() do { } while(0)
-#define release_kernel_lock(task, cpu, depth) ((depth) = 1)
-#define reacquire_kernel_lock(task, cpu, depth) do { } while(0)
-
-#else
-
-#include <asm/hardirq.h>
-
-/* Release global kernel lock and global interrupt lock */
-#define release_kernel_lock(task, cpu, depth) \
-do { \
- if((depth = (task)->lock_depth) != 0) { \
- __cli(); \
- (task)->lock_depth = 0; \
- klock_info.akp = NO_PROC_ID; \
- klock_info.kernel_flag = 0; \
- } \
- release_irqlock(cpu); \
- __sti(); \
-} while(0)
-
-/* Do not fuck with this without consulting arch/sparc/lib/locks.S first! */
-#define reacquire_kernel_lock(task, cpu, depth) \
-do { \
- if(depth) { \
- register struct klock_info *klip asm("g1"); \
- register int proc asm("g5"); \
- klip = &klock_info; \
- proc = cpu; \
- __asm__ __volatile__("mov %%o7, %%g4\n\t" \
- "call ___lock_reacquire_kernel\n\t" \
- " mov %2, %%g2" \
- : /* No outputs. */ \
- : "r" (klip), "r" (proc), "r" (depth) \
- : "g2", "g3", "g4", "g7", "memory", "cc"); \
- } \
-} while(0)
-
-/* The following acquire and release the master kernel global lock,
- * the idea is that the usage of this mechanmism becomes less and less
- * as time goes on, to the point where they are no longer needed at all
- * and can thus disappear.
- */
-
-/* Do not fuck with this without consulting arch/sparc/lib/locks.S first! */
-extern __inline__ void lock_kernel(void)
-{
- register struct klock_info *klip asm("g1");
- register int proc asm("g5");
- klip = &klock_info;
- proc = smp_processor_id();
- __asm__ __volatile__("
- mov %%o7, %%g4
- call ___lock_kernel
- ld [%%g6 + %0], %%g2
-" : : "i" (AOFF_task_lock_depth), "r" (klip), "r" (proc)
- : "g2", "g3", "g4", "g7", "memory", "cc");
-}
-
-/* Release kernel global lock. */
-extern __inline__ void unlock_kernel(void)
-{
- register struct klock_info *klip asm("g1");
- klip = &klock_info;
- __asm__ __volatile__("
- mov %%o7, %%g4
- call ___unlock_kernel
- ld [%%g6 + %0], %%g2
-" : : "i" (AOFF_task_lock_depth), "r" (klip)
- : "g2", "g3", "g4", "memory", "cc");
-}
-
-#endif /* !(__SPARC_SMPLOCK_H) */
-
-#endif /* (__SMP__) */
diff --git a/include/asm-sparc/smplock.h b/include/asm-sparc/smplock.h
new file mode 100644
index 000000000..e62326a10
--- /dev/null
+++ b/include/asm-sparc/smplock.h
@@ -0,0 +1,49 @@
+/*
+ * <asm/smplock.h>
+ *
+ * Default SMP lock implementation
+ */
+#include <linux/interrupt.h>
+#include <asm/spinlock.h>
+
+extern spinlock_t kernel_flag;
+
+/*
+ * Release global kernel lock and global interrupt lock
+ */
+#define release_kernel_lock(task, cpu) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_unlock(&kernel_flag); \
+ release_irqlock(cpu); \
+ __sti(); \
+} while (0)
+
+/*
+ * Re-acquire the kernel lock
+ */
+#define reacquire_kernel_lock(task) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_lock(&kernel_flag); \
+} while (0)
+
+
+/*
+ * Getting the big kernel lock.
+ *
+ * This cannot happen asynchronously,
+ * so we only need to worry about other
+ * CPU's.
+ */
+extern __inline__ void lock_kernel(void)
+{
+ if (!++current->lock_depth)
+ spin_lock(&kernel_flag);
+}
+
+extern __inline__ void unlock_kernel(void)
+{
+ if (--current->lock_depth < 0)
+ spin_unlock(&kernel_flag);
+}
diff --git a/include/asm-sparc/socket.h b/include/asm-sparc/socket.h
index 00be94356..ed60657ce 100644
--- a/include/asm-sparc/socket.h
+++ b/include/asm-sparc/socket.h
@@ -1,4 +1,4 @@
-/* $Id: socket.h,v 1.11 1997/10/19 00:19:14 davem Exp $ */
+/* $Id: socket.h,v 1.12 1998/07/22 22:06:48 davem Exp $ */
#ifndef _ASM_SOCKET_H
#define _ASM_SOCKET_H
@@ -37,6 +37,9 @@
#define SO_BINDTODEVICE 0x000d
+#define SO_ATTACH_FILTER 0x001a
+#define SO_DETACH_FILTER 0x001b
+
/* Security levels - as per NRL IPv6 - don't actually do anything */
#define SO_SECURITY_AUTHENTICATION 0x5001
#define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002
diff --git a/include/asm-sparc/softirq.h b/include/asm-sparc/softirq.h
index 204ad53f8..50fbc20e7 100644
--- a/include/asm-sparc/softirq.h
+++ b/include/asm-sparc/softirq.h
@@ -99,6 +99,7 @@ extern int __sparc_bh_counter;
#define softirq_trylock(cpu) (__sparc_bh_counter ? 0 : (__sparc_bh_counter=1))
#define softirq_endlock(cpu) (__sparc_bh_counter = 0)
#define clear_active_bhs(x) (bh_active &= ~(x))
+#define synchronize_bh() do { } while (0) /* XXX implement SMP version -DaveM */
#define init_bh(nr, routine) \
do { int ent = nr; \
diff --git a/include/asm-sparc/spinlock.h b/include/asm-sparc/spinlock.h
index c38b6af50..1683df48e 100644
--- a/include/asm-sparc/spinlock.h
+++ b/include/asm-sparc/spinlock.h
@@ -10,8 +10,13 @@
#ifndef __SMP__
-typedef struct { } spinlock_t;
-#define SPIN_LOCK_UNLOCKED { }
+#if (__GNUC__ > 2) || (__GNUC_MINOR__ >= 8)
+ typedef struct { } spinlock_t;
+ #define SPIN_LOCK_UNLOCKED { }
+#else
+ typedef unsigned char spinlock_t;
+ #define SPIN_LOCK_UNLOCKED 0
+#endif
#define spin_lock_init(lock) do { } while(0)
#define spin_lock(lock) do { } while(0)
@@ -67,7 +72,9 @@ typedef struct _spinlock_debug spinlock_t;
#define SPIN_LOCK_UNLOCKED { 0, 0 }
#define spin_lock_init(lp) do { (lp)->owner_pc = 0; (lp)->lock = 0; } while(0)
-#define spin_unlock_wait(lp) do { barrier(); } while((lp)->lock)
+#define spin_unlock_wait(lp) \
+do { barrier(); \
+} while(*(volatile unsigned char *)(&(lp)->lock))
extern void _spin_lock(spinlock_t *lock);
extern int _spin_trylock(spinlock_t *lock);
diff --git a/include/asm-sparc/stat.h b/include/asm-sparc/stat.h
index 62038a4de..b1223ffc9 100644
--- a/include/asm-sparc/stat.h
+++ b/include/asm-sparc/stat.h
@@ -1,4 +1,4 @@
-/* $Id: stat.h,v 1.8 1998/02/06 12:52:07 jj Exp $ */
+/* $Id: stat.h,v 1.9 1998/07/26 05:24:39 davem Exp $ */
#ifndef _SPARC_STAT_H
#define _SPARC_STAT_H
@@ -38,40 +38,4 @@ struct stat {
unsigned long __unused4[2];
};
-typedef struct {
- __u32 major;
- __u32 minor;
-} __new_dev_t;
-
-struct stat64 {
- __new_dev_t st_dev;
- __u64 st_ino;
- __u32 st_mode;
- __u32 st_nlink;
- __s32 st_uid;
- __s32 st_gid;
- __new_dev_t st_rdev;
- __s64 st_size;
- __u64 st_blocks;
- __s32 st_atime;
- __u32 __unused1;
- __s32 st_mtime;
- __u32 __unused2;
- __s32 st_ctime;
- __u32 __unused3;
- __u32 st_blksize;
- __u32 __unused4;
-};
-
-#define __XSTAT_VER_1 1
-#define __XSTAT_VER_2 2
-#define __XSTAT_VER_MASK 0xff
-
-#define __XSTAT_VER_XSTAT 0x000
-#define __XSTAT_VER_LXSTAT 0x100
-#define __XSTAT_VER_FXSTAT 0x200
-#define __XSTAT_VER_TYPEMASK 0xff00
-
-#define __XMKNOD_VER_1 1
-
#endif
diff --git a/include/asm-sparc/sun4paddr.h b/include/asm-sparc/sun4paddr.h
index a2c6ed390..d863bfd5f 100644
--- a/include/asm-sparc/sun4paddr.h
+++ b/include/asm-sparc/sun4paddr.h
@@ -1,19 +1,56 @@
-/* $Id: sun4paddr.h,v 1.2 1998/02/09 13:26:41 jj Exp $
+/* $Id: sun4paddr.h,v 1.3 1998/07/28 16:53:27 jj Exp $
* sun4paddr.h: Various physical addresses on sun4 machines
*
* Copyright (C) 1997 Anton Blanchard (anton@progsoc.uts.edu.au)
+ * Copyright (C) 1998 Chris Davis (cdavis@cois.on.ca)
+ *
+ * Now supports more sun4's
*/
#ifndef _SPARC_SUN4PADDR_H
#define _SPARC_SUN4PADDR_H
-#define SUN4_MEMREG_PHYSADDR 0xf4000000
#define SUN4_IE_PHYSADDR 0xf5000000
-#define SUN4_300_MOSTEK_PHYSADDR 0xf2000000
+#define SUN4_UNUSED_PHYSADDR 0
+
+/* these work for me */
+#define SUN4_200_MEMREG_PHYSADDR 0xf4000000
+#define SUN4_200_CLOCK_PHYSADDR 0xf3000000
+#define SUN4_200_BWTWO_PHYSADDR 0xfd000000
+#define SUN4_200_ETH_PHYSADDR 0xf6000000
+#define SUN4_200_SI_PHYSADDR 0xff200000
+
+/* these were here before */
+#define SUN4_300_MEMREG_PHYSADDR 0xf4000000
+#define SUN4_300_CLOCK_PHYSADDR 0xf2000000
#define SUN4_300_TIMER_PHYSADDR 0xef000000
#define SUN4_300_ETH_PHYSADDR 0xf9000000
#define SUN4_300_BWTWO_PHYSADDR 0xfb400000
#define SUN4_300_DMA_PHYSADDR 0xfa001000
#define SUN4_300_ESP_PHYSADDR 0xfa000000
+/* Are these right? */
+#define SUN4_400_MEMREG_PHYSADDR 0xf4000000
+#define SUN4_400_CLOCK_PHYSADDR 0xf2000000
+#define SUN4_400_TIMER_PHYSADDR 0xef000000
+#define SUN4_400_ETH_PHYSADDR 0xf9000000
+#define SUN4_400_BWTWO_PHYSADDR 0xfb400000
+#define SUN4_400_DMA_PHYSADDR 0xfa001000
+#define SUN4_400_ESP_PHYSADDR 0xfa000000
+
+/*
+ these are the actual values set and used in the code. Unused items set
+ to SUN_UNUSED_PHYSADDR
+ */
+
+extern int sun4_memreg_physaddr; /* memory register (ecc?) */
+extern int sun4_clock_physaddr; /* system clock */
+extern int sun4_timer_physaddr; /* timer, where applicable */
+extern int sun4_eth_physaddr; /* onboard ethernet (ie/le) */
+extern int sun4_si_physaddr; /* sun3 scsi adapter */
+extern int sun4_bwtwo_physaddr; /* onboard bw2 */
+extern int sun4_dma_physaddr; /* scsi dma */
+extern int sun4_esp_physaddr; /* esp scsi */
+extern int sun4_ie_physaddr; /* interrupt enable */
+
#endif /* !(_SPARC_SUN4PADDR_H) */
diff --git a/include/asm-sparc/svr4.h b/include/asm-sparc/svr4.h
index 7d163a6fc..331157291 100644
--- a/include/asm-sparc/svr4.h
+++ b/include/asm-sparc/svr4.h
@@ -80,7 +80,7 @@ typedef struct {
/* flags for stack_t.flags */
enum svr4_stack_flags {
- SS_ONSTACK,
+ SVR4_SS_ONSTACK,
SVR4_SS_DISABLE,
};
diff --git a/include/asm-sparc/system.h b/include/asm-sparc/system.h
index 2ddecf4fe..01ed7659e 100644
--- a/include/asm-sparc/system.h
+++ b/include/asm-sparc/system.h
@@ -1,4 +1,4 @@
-/* $Id: system.h,v 1.68 1998/03/09 14:04:51 jj Exp $ */
+/* $Id: system.h,v 1.69 1998/04/24 12:30:19 davem Exp $ */
#include <linux/config.h>
#ifndef __SPARC_SYSTEM_H
diff --git a/include/asm-sparc/termios.h b/include/asm-sparc/termios.h
index 23f293eaa..3c681a7b1 100644
--- a/include/asm-sparc/termios.h
+++ b/include/asm-sparc/termios.h
@@ -1,4 +1,4 @@
-/* $Id: termios.h,v 1.25 1997/03/04 19:36:18 davem Exp $ */
+/* $Id: termios.h,v 1.26 1998/04/12 06:27:19 davem Exp $ */
#ifndef _SPARC_TERMIOS_H
#define _SPARC_TERMIOS_H
diff --git a/include/asm-sparc/timer.h b/include/asm-sparc/timer.h
index 91add4f49..f1b41f7e4 100644
--- a/include/asm-sparc/timer.h
+++ b/include/asm-sparc/timer.h
@@ -1,4 +1,4 @@
-/* $Id: timer.h,v 1.16 1998/01/30 10:59:59 jj Exp $
+/* $Id: timer.h,v 1.17 1998/04/24 12:30:19 davem Exp $
* timer.h: Definitions for the timer chips on the Sparc.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
diff --git a/include/asm-sparc/timex.h b/include/asm-sparc/timex.h
new file mode 100644
index 000000000..4b2b3850f
--- /dev/null
+++ b/include/asm-sparc/timex.h
@@ -0,0 +1,15 @@
+/*
+ * linux/include/asm-sparc/timex.h
+ *
+ * sparc architecture timex specifications
+ */
+#ifndef _ASMsparc_TIMEX_H
+#define _ASMsparc_TIMEX_H
+
+#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
+#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */
+#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
+ (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
+ << (SHIFT_SCALE-SHIFT_HZ)) / HZ)
+
+#endif
diff --git a/include/asm-sparc/unistd.h b/include/asm-sparc/unistd.h
index 7682680a4..dae8e0ac3 100644
--- a/include/asm-sparc/unistd.h
+++ b/include/asm-sparc/unistd.h
@@ -1,4 +1,4 @@
-/* $Id: unistd.h,v 1.38 1998/03/27 07:01:56 davem Exp $ */
+/* $Id: unistd.h,v 1.42 1998/07/28 13:08:35 jj Exp $ */
#ifndef _SPARC_UNISTD_H
#define _SPARC_UNISTD_H
@@ -29,22 +29,22 @@
#define __NR_unlink 10 /* Common */
#define __NR_execv 11 /* SunOS Specific */
#define __NR_chdir 12 /* Common */
-#define __NR_xstat 13 /* Linux Specific */
+/* #define __NR_ni_syscall 13 ENOSYS under SunOS */
#define __NR_mknod 14 /* Common */
#define __NR_chmod 15 /* Common */
#define __NR_chown 16 /* Common */
#define __NR_brk 17 /* Common */
-#define __NR_xmknod 18 /* Linux Specific */
+/* #define __NR_ni_syscall 18 ENOSYS under SunOS */
#define __NR_lseek 19 /* Common */
#define __NR_getpid 20 /* Common */
-/* #define __NR_ni_syscall 21 ENOSYS under SunOS */
-/* #define __NR_ni_syscall 22 ENOSYS under SunOS */
+#define __NR_capget 21 /* Linux Specific */
+#define __NR_capset 22 /* Linux Specific */
#define __NR_setuid 23 /* Implemented via setreuid in SunOS */
#define __NR_getuid 24 /* Common */
/* #define __NR_ni_syscall 25 ENOSYS under SunOS */
#define __NR_ptrace 26 /* Common */
#define __NR_alarm 27 /* Implemented via setitimer in SunOS */
-/* #define __NR_ni_syscall 28 ENOSYS under SunOS */
+#define __NR_sigaltstack 28 /* Common */
#define __NR_pause 29 /* Is sigblock(0)->sigpause() in SunOS */
#define __NR_utime 30 /* Implemented via utimes() under SunOS */
#define __NR_stty 31 /* Implemented via ioctl() under SunOS */
@@ -55,7 +55,7 @@
#define __NR_sync 36 /* Common */
#define __NR_kill 37 /* Common */
#define __NR_stat 38 /* Common */
-/* #define __NR_ni_syscall 39 ENOSYS under SunOS */
+#define __NR_sendfile 39 /* Linux Specific */
#define __NR_lstat 40 /* Common */
#define __NR_dup 41 /* Common */
#define __NR_pipe 42 /* Common */
@@ -135,7 +135,7 @@
#define __NR_gettimeofday 116 /* Common */
#define __NR_getrusage 117 /* Common */
#define __NR_getsockopt 118 /* Common */
-/* #define __NR_ni_syscall 119 ENOSYS under SunOS */
+#define __NR_getcwd 119 /* Linux Specific */
#define __NR_readv 120 /* Common */
#define __NR_writev 121 /* Common */
#define __NR_settimeofday 122 /* Common */
diff --git a/include/asm-sparc/xstat.h b/include/asm-sparc/xstat.h
deleted file mode 100644
index 53b1d59d0..000000000
--- a/include/asm-sparc/xstat.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* $Id: xstat.h,v 1.1 1998/02/06 12:52:08 jj Exp $
- * xstat.h: sys_xstat/xmknod architecture dependent stuff.
- *
- * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
- */
-
-extern __inline__ int cp_xstat(struct inode *inode, struct stat64 *s, unsigned long blocks, int blksize)
-{
- struct stat64 tmp;
-
- memset (&tmp, 0, sizeof(tmp));
- tmp.st_dev.major = MAJOR(inode->i_dev);
- tmp.st_dev.minor = MINOR(inode->i_dev);
- tmp.st_ino = inode->i_ino;
- tmp.st_mode = inode->i_mode;
- tmp.st_nlink = inode->i_nlink;
- tmp.st_uid = inode->i_uid;
- tmp.st_gid = inode->i_gid;
- tmp.st_rdev.major = MAJOR(inode->i_rdev);
- tmp.st_rdev.minor = MINOR(inode->i_rdev);
- tmp.st_size = inode->i_size;
- tmp.st_blksize = blksize;
- tmp.st_blocks = blocks;
- tmp.st_atime = inode->i_atime;
- tmp.st_mtime = inode->i_mtime;
- tmp.st_ctime = inode->i_ctime;
- return copy_to_user(s,&tmp,sizeof(tmp));
-}
-
-extern __inline__ int get_user_new_dev_t(kdev_t *kdev, __new_dev_t *udev) {
- __new_dev_t ndev;
- if (copy_from_user (&ndev, udev, sizeof(__new_dev_t))) return -EFAULT;
- *kdev = MKDEV(ndev.major, ndev.minor);
- return 0;
-}
diff --git a/include/asm-sparc64/asm_offsets.h b/include/asm-sparc64/asm_offsets.h
index 36b684ae6..bc1bdb8dc 100644
--- a/include/asm-sparc64/asm_offsets.h
+++ b/include/asm-sparc64/asm_offsets.h
@@ -14,170 +14,176 @@
#define ASIZ_task_addr_limit 0x00000008
#define AOFF_task_exec_domain 0x00000020
#define ASIZ_task_exec_domain 0x00000008
-#define AOFF_task_debugreg 0x00000028
-#define ASIZ_task_debugreg 0x00000040
-#define AOFF_task_counter 0x00000068
+#define AOFF_task_need_resched 0x00000028
+#define ASIZ_task_need_resched 0x00000008
+#define AOFF_task_counter 0x00000030
#define ASIZ_task_counter 0x00000008
-#define AOFF_task_priority 0x00000070
+#define AOFF_task_priority 0x00000038
#define ASIZ_task_priority 0x00000008
-#define AOFF_task_binfmt 0x00000078
-#define ASIZ_task_binfmt 0x00000008
-#define AOFF_task_next_task 0x00000080
+#define AOFF_task_has_cpu 0x00000040
+#define ASIZ_task_has_cpu 0x00000004
+#define AOFF_task_processor 0x00000044
+#define ASIZ_task_processor 0x00000004
+#define AOFF_task_last_processor 0x00000048
+#define ASIZ_task_last_processor 0x00000004
+#define AOFF_task_lock_depth 0x0000004c
+#define ASIZ_task_lock_depth 0x00000004
+#define AOFF_task_next_task 0x00000050
#define ASIZ_task_next_task 0x00000008
-#define AOFF_task_prev_task 0x00000088
+#define AOFF_task_prev_task 0x00000058
#define ASIZ_task_prev_task 0x00000008
-#define AOFF_task_next_run 0x00000090
+#define AOFF_task_next_run 0x00000060
#define ASIZ_task_next_run 0x00000008
-#define AOFF_task_prev_run 0x00000098
+#define AOFF_task_prev_run 0x00000068
#define ASIZ_task_prev_run 0x00000008
-#define AOFF_task_exit_code 0x000000a0
+#define AOFF_task_binfmt 0x00000070
+#define ASIZ_task_binfmt 0x00000008
+#define AOFF_task_exit_code 0x00000078
#define ASIZ_task_exit_code 0x00000004
-#define AOFF_task_exit_signal 0x000000a4
+#define AOFF_task_exit_signal 0x0000007c
#define ASIZ_task_exit_signal 0x00000004
-#define AOFF_task_pdeath_signal 0x000000a8
+#define AOFF_task_pdeath_signal 0x00000080
#define ASIZ_task_pdeath_signal 0x00000004
-#define AOFF_task_personality 0x000000b0
+#define AOFF_task_personality 0x00000088
#define ASIZ_task_personality 0x00000008
-#define AOFF_task_pid 0x000000bc
+#define AOFF_task_pid 0x00000094
#define ASIZ_task_pid 0x00000004
-#define AOFF_task_pgrp 0x000000c0
+#define AOFF_task_pgrp 0x00000098
#define ASIZ_task_pgrp 0x00000004
-#define AOFF_task_tty_old_pgrp 0x000000c4
+#define AOFF_task_tty_old_pgrp 0x0000009c
#define ASIZ_task_tty_old_pgrp 0x00000004
-#define AOFF_task_session 0x000000c8
+#define AOFF_task_session 0x000000a0
#define ASIZ_task_session 0x00000004
-#define AOFF_task_leader 0x000000cc
+#define AOFF_task_leader 0x000000a4
#define ASIZ_task_leader 0x00000004
-#define AOFF_task_ngroups 0x000000d0
-#define ASIZ_task_ngroups 0x00000004
-#define AOFF_task_groups 0x000000d4
-#define ASIZ_task_groups 0x00000080
-#define AOFF_task_p_opptr 0x00000158
+#define AOFF_task_p_opptr 0x000000a8
#define ASIZ_task_p_opptr 0x00000008
-#define AOFF_task_p_pptr 0x00000160
+#define AOFF_task_p_pptr 0x000000b0
#define ASIZ_task_p_pptr 0x00000008
-#define AOFF_task_p_cptr 0x00000168
+#define AOFF_task_p_cptr 0x000000b8
#define ASIZ_task_p_cptr 0x00000008
-#define AOFF_task_p_ysptr 0x00000170
+#define AOFF_task_p_ysptr 0x000000c0
#define ASIZ_task_p_ysptr 0x00000008
-#define AOFF_task_p_osptr 0x00000178
+#define AOFF_task_p_osptr 0x000000c8
#define ASIZ_task_p_osptr 0x00000008
-#define AOFF_task_pidhash_next 0x00000180
+#define AOFF_task_pidhash_next 0x000000d0
#define ASIZ_task_pidhash_next 0x00000008
-#define AOFF_task_pidhash_pprev 0x00000188
+#define AOFF_task_pidhash_pprev 0x000000d8
#define ASIZ_task_pidhash_pprev 0x00000008
-#define AOFF_task_tarray_ptr 0x00000190
+#define AOFF_task_tarray_ptr 0x000000e0
#define ASIZ_task_tarray_ptr 0x00000008
-#define AOFF_task_wait_chldexit 0x00000198
+#define AOFF_task_wait_chldexit 0x000000e8
#define ASIZ_task_wait_chldexit 0x00000008
-#define AOFF_task_uid 0x000001a0
-#define ASIZ_task_uid 0x00000004
-#define AOFF_task_euid 0x000001a4
-#define ASIZ_task_euid 0x00000004
-#define AOFF_task_suid 0x000001a8
-#define ASIZ_task_suid 0x00000004
-#define AOFF_task_fsuid 0x000001ac
-#define ASIZ_task_fsuid 0x00000004
-#define AOFF_task_gid 0x000001b0
-#define ASIZ_task_gid 0x00000004
-#define AOFF_task_egid 0x000001b4
-#define ASIZ_task_egid 0x00000004
-#define AOFF_task_sgid 0x000001b8
-#define ASIZ_task_sgid 0x00000004
-#define AOFF_task_fsgid 0x000001bc
-#define ASIZ_task_fsgid 0x00000004
-#define AOFF_task_timeout 0x000001c0
+#define AOFF_task_timeout 0x000000f0
#define ASIZ_task_timeout 0x00000008
-#define AOFF_task_policy 0x000001c8
+#define AOFF_task_policy 0x000000f8
#define ASIZ_task_policy 0x00000008
-#define AOFF_task_rt_priority 0x000001d0
+#define AOFF_task_rt_priority 0x00000100
#define ASIZ_task_rt_priority 0x00000008
-#define AOFF_task_it_real_value 0x000001d8
+#define AOFF_task_it_real_value 0x00000108
#define ASIZ_task_it_real_value 0x00000008
-#define AOFF_task_it_prof_value 0x000001e0
+#define AOFF_task_it_prof_value 0x00000110
#define ASIZ_task_it_prof_value 0x00000008
-#define AOFF_task_it_virt_value 0x000001e8
+#define AOFF_task_it_virt_value 0x00000118
#define ASIZ_task_it_virt_value 0x00000008
-#define AOFF_task_it_real_incr 0x000001f0
+#define AOFF_task_it_real_incr 0x00000120
#define ASIZ_task_it_real_incr 0x00000008
-#define AOFF_task_it_prof_incr 0x000001f8
+#define AOFF_task_it_prof_incr 0x00000128
#define ASIZ_task_it_prof_incr 0x00000008
-#define AOFF_task_it_virt_incr 0x00000200
+#define AOFF_task_it_virt_incr 0x00000130
#define ASIZ_task_it_virt_incr 0x00000008
-#define AOFF_task_real_timer 0x00000208
+#define AOFF_task_real_timer 0x00000138
#define ASIZ_task_real_timer 0x00000028
-#define AOFF_task_times 0x00000230
+#define AOFF_task_times 0x00000160
#define ASIZ_task_times 0x00000020
-#define AOFF_task_start_time 0x00000250
+#define AOFF_task_start_time 0x00000180
#define ASIZ_task_start_time 0x00000008
-#define AOFF_task_per_cpu_utime 0x00000258
+#define AOFF_task_per_cpu_utime 0x00000188
#define ASIZ_task_per_cpu_utime 0x00000008
-#define AOFF_task_min_flt 0x00000268
+#define AOFF_task_min_flt 0x00000198
#define ASIZ_task_min_flt 0x00000008
-#define AOFF_task_maj_flt 0x00000270
+#define AOFF_task_maj_flt 0x000001a0
#define ASIZ_task_maj_flt 0x00000008
-#define AOFF_task_nswap 0x00000278
+#define AOFF_task_nswap 0x000001a8
#define ASIZ_task_nswap 0x00000008
-#define AOFF_task_cmin_flt 0x00000280
+#define AOFF_task_cmin_flt 0x000001b0
#define ASIZ_task_cmin_flt 0x00000008
-#define AOFF_task_cmaj_flt 0x00000288
+#define AOFF_task_cmaj_flt 0x000001b8
#define ASIZ_task_cmaj_flt 0x00000008
-#define AOFF_task_cnswap 0x00000290
+#define AOFF_task_cnswap 0x000001c0
#define ASIZ_task_cnswap 0x00000008
-#define AOFF_task_swap_address 0x000002a0
+#define AOFF_task_swap_address 0x000001d0
#define ASIZ_task_swap_address 0x00000008
-#define AOFF_task_old_maj_flt 0x000002a8
+#define AOFF_task_old_maj_flt 0x000001d8
#define ASIZ_task_old_maj_flt 0x00000008
-#define AOFF_task_dec_flt 0x000002b0
+#define AOFF_task_dec_flt 0x000001e0
#define ASIZ_task_dec_flt 0x00000008
-#define AOFF_task_swap_cnt 0x000002b8
+#define AOFF_task_swap_cnt 0x000001e8
#define ASIZ_task_swap_cnt 0x00000008
-#define AOFF_task_rlim 0x000002c0
+#define AOFF_task_uid 0x000001f0
+#define ASIZ_task_uid 0x00000004
+#define AOFF_task_euid 0x000001f4
+#define ASIZ_task_euid 0x00000004
+#define AOFF_task_suid 0x000001f8
+#define ASIZ_task_suid 0x00000004
+#define AOFF_task_fsuid 0x000001fc
+#define ASIZ_task_fsuid 0x00000004
+#define AOFF_task_gid 0x00000200
+#define ASIZ_task_gid 0x00000004
+#define AOFF_task_egid 0x00000204
+#define ASIZ_task_egid 0x00000004
+#define AOFF_task_sgid 0x00000208
+#define ASIZ_task_sgid 0x00000004
+#define AOFF_task_fsgid 0x0000020c
+#define ASIZ_task_fsgid 0x00000004
+#define AOFF_task_ngroups 0x00000210
+#define ASIZ_task_ngroups 0x00000004
+#define AOFF_task_groups 0x00000214
+#define ASIZ_task_groups 0x00000080
+#define AOFF_task_cap_effective 0x00000294
+#define ASIZ_task_cap_effective 0x00000004
+#define AOFF_task_cap_inheritable 0x00000298
+#define ASIZ_task_cap_inheritable 0x00000004
+#define AOFF_task_cap_permitted 0x0000029c
+#define ASIZ_task_cap_permitted 0x00000004
+#define AOFF_task_rlim 0x000002a0
#define ASIZ_task_rlim 0x000000a0
-#define AOFF_task_used_math 0x00000360
+#define AOFF_task_used_math 0x00000340
#define ASIZ_task_used_math 0x00000002
-#define AOFF_task_io_usage 0x00000368
-#define ASIZ_task_io_usage 0x00000008
-#define AOFF_task_comm 0x00000370
+#define AOFF_task_comm 0x00000342
#define ASIZ_task_comm 0x00000010
-#define AOFF_task_link_count 0x00000380
+#define AOFF_task_link_count 0x00000354
#define ASIZ_task_link_count 0x00000004
-#define AOFF_task_tty 0x00000388
+#define AOFF_task_tty 0x00000358
#define ASIZ_task_tty 0x00000008
-#define AOFF_task_semundo 0x00000390
+#define AOFF_task_semundo 0x00000360
#define ASIZ_task_semundo 0x00000008
-#define AOFF_task_semsleeping 0x00000398
+#define AOFF_task_semsleeping 0x00000368
#define ASIZ_task_semsleeping 0x00000008
-#define AOFF_task_ldt 0x000003a0
-#define ASIZ_task_ldt 0x00000008
-#define AOFF_task_tss 0x000003b0
-#define ASIZ_task_tss 0x00000490
-#define AOFF_task_fs 0x00000840
+#define AOFF_task_tss 0x00000370
+#define ASIZ_task_tss 0x00000440
+#define AOFF_task_fs 0x000007b0
#define ASIZ_task_fs 0x00000008
-#define AOFF_task_files 0x00000848
+#define AOFF_task_files 0x000007b8
#define ASIZ_task_files 0x00000008
-#define AOFF_task_mm 0x00000850
+#define AOFF_task_mm 0x000007c0
#define ASIZ_task_mm 0x00000008
-#define AOFF_task_sig 0x00000858
+#define AOFF_task_sigmask_lock 0x000007c8
+#define ASIZ_task_sigmask_lock 0x00000000
+#define AOFF_task_sig 0x000007c8
#define ASIZ_task_sig 0x00000008
-#define AOFF_task_signal 0x00000860
+#define AOFF_task_signal 0x000007d0
#define ASIZ_task_signal 0x00000008
-#define AOFF_task_blocked 0x00000868
+#define AOFF_task_blocked 0x000007d8
#define ASIZ_task_blocked 0x00000008
-#define AOFF_task_sigqueue 0x00000870
+#define AOFF_task_sigqueue 0x000007e0
#define ASIZ_task_sigqueue 0x00000008
-#define AOFF_task_sigqueue_tail 0x00000878
+#define AOFF_task_sigqueue_tail 0x000007e8
#define ASIZ_task_sigqueue_tail 0x00000008
-#define AOFF_task_has_cpu 0x00000880
-#define ASIZ_task_has_cpu 0x00000004
-#define AOFF_task_processor 0x00000884
-#define ASIZ_task_processor 0x00000004
-#define AOFF_task_last_processor 0x00000888
-#define ASIZ_task_last_processor 0x00000004
-#define AOFF_task_lock_depth 0x0000088c
-#define ASIZ_task_lock_depth 0x00000004
-#define AOFF_task_sigmask_lock 0x00000890
-#define ASIZ_task_sigmask_lock 0x00000000
+#define AOFF_task_sas_ss_sp 0x000007f0
+#define ASIZ_task_sas_ss_sp 0x00000008
+#define AOFF_task_sas_ss_size 0x000007f8
+#define ASIZ_task_sas_ss_size 0x00000008
#define AOFF_mm_mmap 0x00000000
#define ASIZ_mm_mmap 0x00000008
#define AOFF_mm_mmap_cache 0x00000008
@@ -224,22 +230,24 @@
#define ASIZ_mm_def_flags 0x00000008
#define AOFF_mm_cpu_vm_mask 0x000000b0
#define ASIZ_mm_cpu_vm_mask 0x00000008
+#define AOFF_mm_segments 0x000000b8
+#define ASIZ_mm_segments 0x00000008
#define AOFF_thread_ksp 0x00000000
#define ASIZ_thread_ksp 0x00000008
-#define AOFF_thread_kpc 0x00000008
-#define ASIZ_thread_kpc 0x00000004
-#define AOFF_thread_wstate 0x0000000c
+#define AOFF_thread_wstate 0x00000008
#define ASIZ_thread_wstate 0x00000002
-#define AOFF_thread_cwp 0x0000000e
+#define AOFF_thread_cwp 0x0000000a
#define ASIZ_thread_cwp 0x00000002
-#define AOFF_thread_flags 0x00000010
+#define AOFF_thread_flags 0x0000000c
#define ASIZ_thread_flags 0x00000002
-#define AOFF_thread_ctx 0x00000012
+#define AOFF_thread_ctx 0x0000000e
#define ASIZ_thread_ctx 0x00000002
-#define AOFF_thread_w_saved 0x00000014
+#define AOFF_thread_w_saved 0x00000010
#define ASIZ_thread_w_saved 0x00000002
-#define AOFF_thread_new_signal 0x00000016
+#define AOFF_thread_new_signal 0x00000012
#define ASIZ_thread_new_signal 0x00000002
+#define AOFF_thread____pad 0x00000014
+#define ASIZ_thread____pad 0x00000004
#define AOFF_thread_current_ds 0x00000018
#define ASIZ_thread_current_ds 0x00000008
#define AOFF_thread_kregs 0x00000020
@@ -247,15 +255,21 @@
#define AOFF_thread_utraps 0x00000028
#define ASIZ_thread_utraps 0x00000008
#define AOFF_thread_reg_window 0x00000030
-#define ASIZ_thread_reg_window 0x00000400
-#define AOFF_thread_rwbuf_stkptrs 0x00000430
-#define ASIZ_thread_rwbuf_stkptrs 0x00000040
-#define AOFF_thread_sig_address 0x00000470
+#define ASIZ_thread_reg_window 0x00000380
+#define AOFF_thread_rwbuf_stkptrs 0x000003b0
+#define ASIZ_thread_rwbuf_stkptrs 0x00000038
+#define AOFF_thread_sig_address 0x000003e8
#define ASIZ_thread_sig_address 0x00000008
-#define AOFF_thread_sig_desc 0x00000478
+#define AOFF_thread_sig_desc 0x000003f0
#define ASIZ_thread_sig_desc 0x00000008
-#define AOFF_thread_sstk_info 0x00000480
-#define ASIZ_thread_sstk_info 0x00000010
+#define AOFF_thread_fpdepth 0x000003f8
+#define ASIZ_thread_fpdepth 0x00000001
+#define AOFF_thread_fpsaved 0x000003f9
+#define ASIZ_thread_fpsaved 0x00000007
+#define AOFF_thread_gsr 0x00000400
+#define ASIZ_thread_gsr 0x00000007
+#define AOFF_thread_xfsr 0x00000408
+#define ASIZ_thread_xfsr 0x00000038
#else /* __SMP__ */
@@ -269,170 +283,176 @@
#define ASIZ_task_addr_limit 0x00000008
#define AOFF_task_exec_domain 0x00000020
#define ASIZ_task_exec_domain 0x00000008
-#define AOFF_task_debugreg 0x00000028
-#define ASIZ_task_debugreg 0x00000040
-#define AOFF_task_counter 0x00000068
+#define AOFF_task_need_resched 0x00000028
+#define ASIZ_task_need_resched 0x00000008
+#define AOFF_task_counter 0x00000030
#define ASIZ_task_counter 0x00000008
-#define AOFF_task_priority 0x00000070
+#define AOFF_task_priority 0x00000038
#define ASIZ_task_priority 0x00000008
-#define AOFF_task_binfmt 0x00000078
-#define ASIZ_task_binfmt 0x00000008
-#define AOFF_task_next_task 0x00000080
+#define AOFF_task_has_cpu 0x00000040
+#define ASIZ_task_has_cpu 0x00000004
+#define AOFF_task_processor 0x00000044
+#define ASIZ_task_processor 0x00000004
+#define AOFF_task_last_processor 0x00000048
+#define ASIZ_task_last_processor 0x00000004
+#define AOFF_task_lock_depth 0x0000004c
+#define ASIZ_task_lock_depth 0x00000004
+#define AOFF_task_next_task 0x00000050
#define ASIZ_task_next_task 0x00000008
-#define AOFF_task_prev_task 0x00000088
+#define AOFF_task_prev_task 0x00000058
#define ASIZ_task_prev_task 0x00000008
-#define AOFF_task_next_run 0x00000090
+#define AOFF_task_next_run 0x00000060
#define ASIZ_task_next_run 0x00000008
-#define AOFF_task_prev_run 0x00000098
+#define AOFF_task_prev_run 0x00000068
#define ASIZ_task_prev_run 0x00000008
-#define AOFF_task_exit_code 0x000000a0
+#define AOFF_task_binfmt 0x00000070
+#define ASIZ_task_binfmt 0x00000008
+#define AOFF_task_exit_code 0x00000078
#define ASIZ_task_exit_code 0x00000004
-#define AOFF_task_exit_signal 0x000000a4
+#define AOFF_task_exit_signal 0x0000007c
#define ASIZ_task_exit_signal 0x00000004
-#define AOFF_task_pdeath_signal 0x000000a8
+#define AOFF_task_pdeath_signal 0x00000080
#define ASIZ_task_pdeath_signal 0x00000004
-#define AOFF_task_personality 0x000000b0
+#define AOFF_task_personality 0x00000088
#define ASIZ_task_personality 0x00000008
-#define AOFF_task_pid 0x000000bc
+#define AOFF_task_pid 0x00000094
#define ASIZ_task_pid 0x00000004
-#define AOFF_task_pgrp 0x000000c0
+#define AOFF_task_pgrp 0x00000098
#define ASIZ_task_pgrp 0x00000004
-#define AOFF_task_tty_old_pgrp 0x000000c4
+#define AOFF_task_tty_old_pgrp 0x0000009c
#define ASIZ_task_tty_old_pgrp 0x00000004
-#define AOFF_task_session 0x000000c8
+#define AOFF_task_session 0x000000a0
#define ASIZ_task_session 0x00000004
-#define AOFF_task_leader 0x000000cc
+#define AOFF_task_leader 0x000000a4
#define ASIZ_task_leader 0x00000004
-#define AOFF_task_ngroups 0x000000d0
-#define ASIZ_task_ngroups 0x00000004
-#define AOFF_task_groups 0x000000d4
-#define ASIZ_task_groups 0x00000080
-#define AOFF_task_p_opptr 0x00000158
+#define AOFF_task_p_opptr 0x000000a8
#define ASIZ_task_p_opptr 0x00000008
-#define AOFF_task_p_pptr 0x00000160
+#define AOFF_task_p_pptr 0x000000b0
#define ASIZ_task_p_pptr 0x00000008
-#define AOFF_task_p_cptr 0x00000168
+#define AOFF_task_p_cptr 0x000000b8
#define ASIZ_task_p_cptr 0x00000008
-#define AOFF_task_p_ysptr 0x00000170
+#define AOFF_task_p_ysptr 0x000000c0
#define ASIZ_task_p_ysptr 0x00000008
-#define AOFF_task_p_osptr 0x00000178
+#define AOFF_task_p_osptr 0x000000c8
#define ASIZ_task_p_osptr 0x00000008
-#define AOFF_task_pidhash_next 0x00000180
+#define AOFF_task_pidhash_next 0x000000d0
#define ASIZ_task_pidhash_next 0x00000008
-#define AOFF_task_pidhash_pprev 0x00000188
+#define AOFF_task_pidhash_pprev 0x000000d8
#define ASIZ_task_pidhash_pprev 0x00000008
-#define AOFF_task_tarray_ptr 0x00000190
+#define AOFF_task_tarray_ptr 0x000000e0
#define ASIZ_task_tarray_ptr 0x00000008
-#define AOFF_task_wait_chldexit 0x00000198
+#define AOFF_task_wait_chldexit 0x000000e8
#define ASIZ_task_wait_chldexit 0x00000008
-#define AOFF_task_uid 0x000001a0
-#define ASIZ_task_uid 0x00000004
-#define AOFF_task_euid 0x000001a4
-#define ASIZ_task_euid 0x00000004
-#define AOFF_task_suid 0x000001a8
-#define ASIZ_task_suid 0x00000004
-#define AOFF_task_fsuid 0x000001ac
-#define ASIZ_task_fsuid 0x00000004
-#define AOFF_task_gid 0x000001b0
-#define ASIZ_task_gid 0x00000004
-#define AOFF_task_egid 0x000001b4
-#define ASIZ_task_egid 0x00000004
-#define AOFF_task_sgid 0x000001b8
-#define ASIZ_task_sgid 0x00000004
-#define AOFF_task_fsgid 0x000001bc
-#define ASIZ_task_fsgid 0x00000004
-#define AOFF_task_timeout 0x000001c0
+#define AOFF_task_timeout 0x000000f0
#define ASIZ_task_timeout 0x00000008
-#define AOFF_task_policy 0x000001c8
+#define AOFF_task_policy 0x000000f8
#define ASIZ_task_policy 0x00000008
-#define AOFF_task_rt_priority 0x000001d0
+#define AOFF_task_rt_priority 0x00000100
#define ASIZ_task_rt_priority 0x00000008
-#define AOFF_task_it_real_value 0x000001d8
+#define AOFF_task_it_real_value 0x00000108
#define ASIZ_task_it_real_value 0x00000008
-#define AOFF_task_it_prof_value 0x000001e0
+#define AOFF_task_it_prof_value 0x00000110
#define ASIZ_task_it_prof_value 0x00000008
-#define AOFF_task_it_virt_value 0x000001e8
+#define AOFF_task_it_virt_value 0x00000118
#define ASIZ_task_it_virt_value 0x00000008
-#define AOFF_task_it_real_incr 0x000001f0
+#define AOFF_task_it_real_incr 0x00000120
#define ASIZ_task_it_real_incr 0x00000008
-#define AOFF_task_it_prof_incr 0x000001f8
+#define AOFF_task_it_prof_incr 0x00000128
#define ASIZ_task_it_prof_incr 0x00000008
-#define AOFF_task_it_virt_incr 0x00000200
+#define AOFF_task_it_virt_incr 0x00000130
#define ASIZ_task_it_virt_incr 0x00000008
-#define AOFF_task_real_timer 0x00000208
+#define AOFF_task_real_timer 0x00000138
#define ASIZ_task_real_timer 0x00000028
-#define AOFF_task_times 0x00000230
+#define AOFF_task_times 0x00000160
#define ASIZ_task_times 0x00000020
-#define AOFF_task_start_time 0x00000250
+#define AOFF_task_start_time 0x00000180
#define ASIZ_task_start_time 0x00000008
-#define AOFF_task_per_cpu_utime 0x00000258
+#define AOFF_task_per_cpu_utime 0x00000188
#define ASIZ_task_per_cpu_utime 0x00000100
-#define AOFF_task_min_flt 0x00000458
+#define AOFF_task_min_flt 0x00000388
#define ASIZ_task_min_flt 0x00000008
-#define AOFF_task_maj_flt 0x00000460
+#define AOFF_task_maj_flt 0x00000390
#define ASIZ_task_maj_flt 0x00000008
-#define AOFF_task_nswap 0x00000468
+#define AOFF_task_nswap 0x00000398
#define ASIZ_task_nswap 0x00000008
-#define AOFF_task_cmin_flt 0x00000470
+#define AOFF_task_cmin_flt 0x000003a0
#define ASIZ_task_cmin_flt 0x00000008
-#define AOFF_task_cmaj_flt 0x00000478
+#define AOFF_task_cmaj_flt 0x000003a8
#define ASIZ_task_cmaj_flt 0x00000008
-#define AOFF_task_cnswap 0x00000480
+#define AOFF_task_cnswap 0x000003b0
#define ASIZ_task_cnswap 0x00000008
-#define AOFF_task_swap_address 0x00000490
+#define AOFF_task_swap_address 0x000003c0
#define ASIZ_task_swap_address 0x00000008
-#define AOFF_task_old_maj_flt 0x00000498
+#define AOFF_task_old_maj_flt 0x000003c8
#define ASIZ_task_old_maj_flt 0x00000008
-#define AOFF_task_dec_flt 0x000004a0
+#define AOFF_task_dec_flt 0x000003d0
#define ASIZ_task_dec_flt 0x00000008
-#define AOFF_task_swap_cnt 0x000004a8
+#define AOFF_task_swap_cnt 0x000003d8
#define ASIZ_task_swap_cnt 0x00000008
-#define AOFF_task_rlim 0x000004b0
+#define AOFF_task_uid 0x000003e0
+#define ASIZ_task_uid 0x00000004
+#define AOFF_task_euid 0x000003e4
+#define ASIZ_task_euid 0x00000004
+#define AOFF_task_suid 0x000003e8
+#define ASIZ_task_suid 0x00000004
+#define AOFF_task_fsuid 0x000003ec
+#define ASIZ_task_fsuid 0x00000004
+#define AOFF_task_gid 0x000003f0
+#define ASIZ_task_gid 0x00000004
+#define AOFF_task_egid 0x000003f4
+#define ASIZ_task_egid 0x00000004
+#define AOFF_task_sgid 0x000003f8
+#define ASIZ_task_sgid 0x00000004
+#define AOFF_task_fsgid 0x000003fc
+#define ASIZ_task_fsgid 0x00000004
+#define AOFF_task_ngroups 0x00000400
+#define ASIZ_task_ngroups 0x00000004
+#define AOFF_task_groups 0x00000404
+#define ASIZ_task_groups 0x00000080
+#define AOFF_task_cap_effective 0x00000484
+#define ASIZ_task_cap_effective 0x00000004
+#define AOFF_task_cap_inheritable 0x00000488
+#define ASIZ_task_cap_inheritable 0x00000004
+#define AOFF_task_cap_permitted 0x0000048c
+#define ASIZ_task_cap_permitted 0x00000004
+#define AOFF_task_rlim 0x00000490
#define ASIZ_task_rlim 0x000000a0
-#define AOFF_task_used_math 0x00000550
+#define AOFF_task_used_math 0x00000530
#define ASIZ_task_used_math 0x00000002
-#define AOFF_task_io_usage 0x00000558
-#define ASIZ_task_io_usage 0x00000008
-#define AOFF_task_comm 0x00000560
+#define AOFF_task_comm 0x00000532
#define ASIZ_task_comm 0x00000010
-#define AOFF_task_link_count 0x00000570
+#define AOFF_task_link_count 0x00000544
#define ASIZ_task_link_count 0x00000004
-#define AOFF_task_tty 0x00000578
+#define AOFF_task_tty 0x00000548
#define ASIZ_task_tty 0x00000008
-#define AOFF_task_semundo 0x00000580
+#define AOFF_task_semundo 0x00000550
#define ASIZ_task_semundo 0x00000008
-#define AOFF_task_semsleeping 0x00000588
+#define AOFF_task_semsleeping 0x00000558
#define ASIZ_task_semsleeping 0x00000008
-#define AOFF_task_ldt 0x00000590
-#define ASIZ_task_ldt 0x00000008
-#define AOFF_task_tss 0x000005a0
-#define ASIZ_task_tss 0x00000490
-#define AOFF_task_fs 0x00000a30
+#define AOFF_task_tss 0x00000560
+#define ASIZ_task_tss 0x00000440
+#define AOFF_task_fs 0x000009a0
#define ASIZ_task_fs 0x00000008
-#define AOFF_task_files 0x00000a38
+#define AOFF_task_files 0x000009a8
#define ASIZ_task_files 0x00000008
-#define AOFF_task_mm 0x00000a40
+#define AOFF_task_mm 0x000009b0
#define ASIZ_task_mm 0x00000008
-#define AOFF_task_sig 0x00000a48
+#define AOFF_task_sigmask_lock 0x000009b8
+#define ASIZ_task_sigmask_lock 0x00000001
+#define AOFF_task_sig 0x000009c0
#define ASIZ_task_sig 0x00000008
-#define AOFF_task_signal 0x00000a50
+#define AOFF_task_signal 0x000009c8
#define ASIZ_task_signal 0x00000008
-#define AOFF_task_blocked 0x00000a58
+#define AOFF_task_blocked 0x000009d0
#define ASIZ_task_blocked 0x00000008
-#define AOFF_task_sigqueue 0x00000a60
+#define AOFF_task_sigqueue 0x000009d8
#define ASIZ_task_sigqueue 0x00000008
-#define AOFF_task_sigqueue_tail 0x00000a68
+#define AOFF_task_sigqueue_tail 0x000009e0
#define ASIZ_task_sigqueue_tail 0x00000008
-#define AOFF_task_has_cpu 0x00000a70
-#define ASIZ_task_has_cpu 0x00000004
-#define AOFF_task_processor 0x00000a74
-#define ASIZ_task_processor 0x00000004
-#define AOFF_task_last_processor 0x00000a78
-#define ASIZ_task_last_processor 0x00000004
-#define AOFF_task_lock_depth 0x00000a7c
-#define ASIZ_task_lock_depth 0x00000004
-#define AOFF_task_sigmask_lock 0x00000a80
-#define ASIZ_task_sigmask_lock 0x00000001
+#define AOFF_task_sas_ss_sp 0x000009e8
+#define ASIZ_task_sas_ss_sp 0x00000008
+#define AOFF_task_sas_ss_size 0x000009f0
+#define ASIZ_task_sas_ss_size 0x00000008
#define AOFF_mm_mmap 0x00000000
#define ASIZ_mm_mmap 0x00000008
#define AOFF_mm_mmap_cache 0x00000008
@@ -479,22 +499,24 @@
#define ASIZ_mm_def_flags 0x00000008
#define AOFF_mm_cpu_vm_mask 0x000000b0
#define ASIZ_mm_cpu_vm_mask 0x00000008
+#define AOFF_mm_segments 0x000000b8
+#define ASIZ_mm_segments 0x00000008
#define AOFF_thread_ksp 0x00000000
#define ASIZ_thread_ksp 0x00000008
-#define AOFF_thread_kpc 0x00000008
-#define ASIZ_thread_kpc 0x00000004
-#define AOFF_thread_wstate 0x0000000c
+#define AOFF_thread_wstate 0x00000008
#define ASIZ_thread_wstate 0x00000002
-#define AOFF_thread_cwp 0x0000000e
+#define AOFF_thread_cwp 0x0000000a
#define ASIZ_thread_cwp 0x00000002
-#define AOFF_thread_flags 0x00000010
+#define AOFF_thread_flags 0x0000000c
#define ASIZ_thread_flags 0x00000002
-#define AOFF_thread_ctx 0x00000012
+#define AOFF_thread_ctx 0x0000000e
#define ASIZ_thread_ctx 0x00000002
-#define AOFF_thread_w_saved 0x00000014
+#define AOFF_thread_w_saved 0x00000010
#define ASIZ_thread_w_saved 0x00000002
-#define AOFF_thread_new_signal 0x00000016
+#define AOFF_thread_new_signal 0x00000012
#define ASIZ_thread_new_signal 0x00000002
+#define AOFF_thread____pad 0x00000014
+#define ASIZ_thread____pad 0x00000004
#define AOFF_thread_current_ds 0x00000018
#define ASIZ_thread_current_ds 0x00000008
#define AOFF_thread_kregs 0x00000020
@@ -502,15 +524,21 @@
#define AOFF_thread_utraps 0x00000028
#define ASIZ_thread_utraps 0x00000008
#define AOFF_thread_reg_window 0x00000030
-#define ASIZ_thread_reg_window 0x00000400
-#define AOFF_thread_rwbuf_stkptrs 0x00000430
-#define ASIZ_thread_rwbuf_stkptrs 0x00000040
-#define AOFF_thread_sig_address 0x00000470
+#define ASIZ_thread_reg_window 0x00000380
+#define AOFF_thread_rwbuf_stkptrs 0x000003b0
+#define ASIZ_thread_rwbuf_stkptrs 0x00000038
+#define AOFF_thread_sig_address 0x000003e8
#define ASIZ_thread_sig_address 0x00000008
-#define AOFF_thread_sig_desc 0x00000478
+#define AOFF_thread_sig_desc 0x000003f0
#define ASIZ_thread_sig_desc 0x00000008
-#define AOFF_thread_sstk_info 0x00000480
-#define ASIZ_thread_sstk_info 0x00000010
+#define AOFF_thread_fpdepth 0x000003f8
+#define ASIZ_thread_fpdepth 0x00000001
+#define AOFF_thread_fpsaved 0x000003f9
+#define ASIZ_thread_fpsaved 0x00000007
+#define AOFF_thread_gsr 0x00000400
+#define ASIZ_thread_gsr 0x00000007
+#define AOFF_thread_xfsr 0x00000408
+#define ASIZ_thread_xfsr 0x00000038
#endif /* __SMP__ */
diff --git a/include/asm-sparc64/audioio.h b/include/asm-sparc64/audioio.h
new file mode 100644
index 000000000..8d3000ea9
--- /dev/null
+++ b/include/asm-sparc64/audioio.h
@@ -0,0 +1,416 @@
+/*
+ * include/asm-sparc/audioio.h
+ *
+ * Sparc Audio Midlayer
+ * Copyright (C) 1996 Thomas K. Dyas (tdyas@noc.rutgers.edu)
+ */
+
+#ifndef _AUDIOIO_H_
+#define _AUDIOIO_H_
+
+/*
+ * SunOS/Solaris /dev/audio interface
+ */
+
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+#include <linux/types.h>
+#include <linux/time.h>
+#include <linux/ioctl.h>
+#endif
+
+/*
+ * This structure contains state information for audio device IO streams.
+ */
+typedef struct audio_prinfo {
+ /*
+ * The following values describe the audio data encoding.
+ */
+ unsigned int sample_rate; /* samples per second */
+ unsigned int channels; /* number of interleaved channels */
+ unsigned int precision; /* bit-width of each sample */
+ unsigned int encoding; /* data encoding method */
+
+ /*
+ * The following values control audio device configuration
+ */
+ unsigned int gain; /* gain level: 0 - 255 */
+ unsigned int port; /* selected I/O port (see below) */
+ unsigned int avail_ports; /* available I/O ports (see below) */
+ unsigned int _xxx[2]; /* Reserved for future use */
+
+ unsigned int buffer_size; /* I/O buffer size */
+
+ /*
+ * The following values describe driver state
+ */
+ unsigned int samples; /* number of samples converted */
+ unsigned int eof; /* End Of File counter (play only) */
+
+ unsigned char pause; /* non-zero for pause, zero to resume */
+ unsigned char error; /* non-zero if overflow/underflow */
+ unsigned char waiting; /* non-zero if a process wants access */
+ unsigned char balance; /* stereo channel balance */
+
+ unsigned short minordev;
+
+ /*
+ * The following values are read-only state flags
+ */
+ unsigned char open; /* non-zero if open access permitted */
+ unsigned char active; /* non-zero if I/O is active */
+} audio_prinfo_t;
+
+
+/*
+ * This structure describes the current state of the audio device.
+ */
+typedef struct audio_info {
+ /*
+ * Per-stream information
+ */
+ audio_prinfo_t play; /* output status information */
+ audio_prinfo_t record; /* input status information */
+
+ /*
+ * Per-unit/channel information
+ */
+ unsigned int monitor_gain; /* input to output mix: 0 - 255 */
+ unsigned char output_muted; /* non-zero if output is muted */
+ unsigned char _xxx[3]; /* Reserved for future use */
+ unsigned int _yyy[3]; /* Reserved for future use */
+} audio_info_t;
+
+
+/*
+ * Audio encoding types
+ */
+#define AUDIO_ENCODING_NONE (0) /* no encoding assigned */
+#define AUDIO_ENCODING_ULAW (1) /* u-law encoding */
+#define AUDIO_ENCODING_ALAW (2) /* A-law encoding */
+#define AUDIO_ENCODING_LINEAR (3) /* Linear PCM encoding */
+#define AUDIO_ENCODING_DVI (104) /* DVI ADPCM */
+#define AUDIO_ENCODING_LINEAR8 (105) /* 8 bit UNSIGNED */
+#define AUDIO_ENCODING_LINEARLE (106) /* Linear PCM LE encoding */
+
+/*
+ * These ranges apply to record, play, and monitor gain values
+ */
+#define AUDIO_MIN_GAIN (0) /* minimum gain value */
+#define AUDIO_MAX_GAIN (255) /* maximum gain value */
+
+/*
+ * These values apply to the balance field to adjust channel gain values
+ */
+#define AUDIO_LEFT_BALANCE (0) /* left channel only */
+#define AUDIO_MID_BALANCE (32) /* equal left/right channel */
+#define AUDIO_RIGHT_BALANCE (64) /* right channel only */
+#define AUDIO_BALANCE_SHIFT (3)
+
+/*
+ * Generic minimum/maximum limits for number of channels, both modes
+ */
+#define AUDIO_MIN_PLAY_CHANNELS (1)
+#define AUDIO_MAX_PLAY_CHANNELS (4)
+#define AUDIO_MIN_REC_CHANNELS (1)
+#define AUDIO_MAX_REC_CHANNELS (4)
+
+/*
+ * Generic minimum/maximum limits for sample precision
+ */
+#define AUDIO_MIN_PLAY_PRECISION (8)
+#define AUDIO_MAX_PLAY_PRECISION (32)
+#define AUDIO_MIN_REC_PRECISION (8)
+#define AUDIO_MAX_REC_PRECISION (32)
+
+/*
+ * Define some convenient names for typical audio ports
+ */
+/*
+ * output ports (several may be enabled simultaneously)
+ */
+#define AUDIO_SPEAKER 0x01 /* output to built-in speaker */
+#define AUDIO_HEADPHONE 0x02 /* output to headphone jack */
+#define AUDIO_LINE_OUT 0x04 /* output to line out */
+
+/*
+ * input ports (usually only one at a time)
+ */
+#define AUDIO_MICROPHONE 0x01 /* input from microphone */
+#define AUDIO_LINE_IN 0x02 /* input from line in */
+#define AUDIO_CD 0x04 /* input from on-board CD inputs */
+#define AUDIO_INTERNAL_CD_IN AUDIO_CD /* input from internal CDROM */
+/* Supposedly an undocumented feature of the 4231 */
+#define AUDIO_ANALOG_LOOPBACK 0x40
+
+
+/*
+ * This macro initializes an audio_info structure to 'harmless' values.
+ * Note that (~0) might not be a harmless value for a flag that was
+ * a signed int.
+ */
+#define AUDIO_INITINFO(i) { \
+ unsigned int *__x__; \
+ for (__x__ = (unsigned int *)(i); \
+ (char *) __x__ < (((char *)(i)) + sizeof (audio_info_t)); \
+ *__x__++ = ~0); \
+}
+
+/*
+ * These allow testing for what the user wants to set
+ */
+#define AUD_INITVALUE (~0)
+#define Modify(X) ((unsigned int)(X) != AUD_INITVALUE)
+#define Modifys(X) ((X) != (unsigned short)AUD_INITVALUE)
+#define Modifyc(X) ((X) != (unsigned char)AUD_INITVALUE)
+
+/*
+ * Parameter for the AUDIO_GETDEV ioctl to determine current
+ * audio devices.
+ */
+#define MAX_AUDIO_DEV_LEN (16)
+typedef struct audio_device {
+ char name[MAX_AUDIO_DEV_LEN];
+ char version[MAX_AUDIO_DEV_LEN];
+ char config[MAX_AUDIO_DEV_LEN];
+} audio_device_t;
+
+
+/*
+ * Ioctl calls for the audio device.
+ */
+
+/*
+ * AUDIO_GETINFO retrieves the current state of the audio device.
+ *
+ * AUDIO_SETINFO copies all fields of the audio_info structure whose
+ * values are not set to the initialized value (-1) to the device state.
+ * It performs an implicit AUDIO_GETINFO to return the new state of the
+ * device. Note that the record.samples and play.samples fields are set
+ * to the last value before the AUDIO_SETINFO took effect. This allows
+ * an application to reset the counters while atomically retrieving the
+ * last value.
+ *
+ * AUDIO_DRAIN suspends the calling process until the write buffers are
+ * empty.
+ *
+ * AUDIO_GETDEV returns a structure of type audio_device_t which contains
+ * three strings. The string "name" is a short identifying string (for
+ * example, the SBus Fcode name string), the string "version" identifies
+ * the current version of the device, and the "config" string identifies
+ * the specific configuration of the audio stream. All fields are
+ * device-dependent -- see the device specific manual pages for details.
+ *
+ * AUDIO_GETDEV_SUNOS returns a number which is an audio device defined
+ * herein (making it not too portable)
+ *
+ * AUDIO_FLUSH stops all playback and recording, clears all queued buffers,
+ * resets error counters, and restarts recording and playback as appropriate
+ * for the current sampling mode.
+ */
+#define AUDIO_GETINFO _IOR('A', 1, audio_info_t)
+#define AUDIO_SETINFO _IOWR('A', 2, audio_info_t)
+#define AUDIO_DRAIN _IO('A', 3)
+#define AUDIO_GETDEV _IOR('A', 4, audio_device_t)
+#define AUDIO_GETDEV_SUNOS _IOR('A', 4, int)
+#define AUDIO_FLUSH _IO('A', 5)
+
+/* Define possible audio hardware configurations for
+ * old SunOS-style AUDIO_GETDEV ioctl */
+#define AUDIO_DEV_UNKNOWN (0) /* not defined */
+#define AUDIO_DEV_AMD (1) /* audioamd device */
+#define AUDIO_DEV_SPEAKERBOX (2) /* dbri device with speakerbox */
+#define AUDIO_DEV_CODEC (3) /* dbri device (internal speaker) */
+#define AUDIO_DEV_CS4231 (5) /* cs4231 device */
+
+/*
+ * The following ioctl sets the audio device into an internal loopback mode,
+ * if the hardware supports this. The argument is TRUE to set loopback,
+ * FALSE to reset to normal operation. If the hardware does not support
+ * internal loopback, the ioctl should fail with EINVAL.
+ */
+#define AUDIO_DIAG_LOOPBACK _IOW('A', 101, int)
+
+#ifdef notneeded
+/*
+ * Structure sent up as a M_PROTO message on trace streams
+ */
+typedef struct audtrace_hdr audtrace_hdr_t;
+struct audtrace_hdr {
+ unsigned int seq; /* Sequence number (per-aud_stream) */
+ int type; /* device-dependent */
+ struct timeval timestamp;
+ char _f[8]; /* filler */
+};
+#endif
+
+/*
+ * Linux kernel internal implementation.
+ */
+
+#ifdef __KERNEL__
+
+#include <linux/types.h>
+#include <linux/fs.h>
+#include <linux/tqueue.h>
+#include <linux/wait.h>
+
+#define SDF_OPEN_WRITE 0x00000001
+#define SDF_OPEN_READ 0x00000002
+
+struct sparcaudio_driver
+{
+ const char * name;
+ struct sparcaudio_operations *ops;
+ void *private;
+ unsigned long flags;
+
+ /* This device */
+ struct linux_sbus_device *dev;
+
+ /* Processes blocked on open() sit here. */
+ struct wait_queue *open_wait;
+
+ /* Task queue for this driver's bottom half. */
+ struct tq_struct tqueue;
+
+ /* Support for a circular queue of output buffers. */
+ __u8 **output_buffers;
+ size_t *output_sizes, output_size;
+ int num_output_buffers, output_front, output_rear;
+ int output_count, output_active, playing_count;
+ struct wait_queue *output_write_wait, *output_drain_wait;
+
+ /* Support for a circular queue of input buffers. */
+ __u8 **input_buffers;
+ int input_offset;
+ int num_input_buffers, input_front, input_rear;
+ int input_count, input_active, recording_count;
+ struct wait_queue *input_read_wait;
+};
+
+struct sparcaudio_operations
+{
+ int (*open)(struct inode *, struct file *, struct sparcaudio_driver *);
+ void (*release)(struct inode *, struct file *,
+ struct sparcaudio_driver *);
+ int (*ioctl)(struct inode *, struct file *, unsigned int,
+ unsigned long, struct sparcaudio_driver *);
+
+ /* Ask driver to begin playing a buffer. */
+ void (*start_output)(struct sparcaudio_driver *, __u8 *,
+ unsigned long);
+
+ /* Ask driver to stop playing a buffer. */
+ void (*stop_output)(struct sparcaudio_driver *);
+
+ /* Ask driver to begin recording into a buffer. */
+ void (*start_input)(struct sparcaudio_driver *, __u8 *, unsigned long);
+
+ /* Ask driver to stop recording. */
+ void (*stop_input)(struct sparcaudio_driver *);
+
+ /* Return driver name/version to caller. (/dev/audio specific) */
+ void (*sunaudio_getdev)(struct sparcaudio_driver *, audio_device_t *);
+
+ /* Get and set the output volume. (0-255) */
+ int (*set_output_volume)(struct sparcaudio_driver *, int);
+ int (*get_output_volume)(struct sparcaudio_driver *);
+
+ /* Get and set the input volume. (0-255) */
+ int (*set_input_volume)(struct sparcaudio_driver *, int);
+ int (*get_input_volume)(struct sparcaudio_driver *);
+
+ /* Get and set the monitor volume. (0-255) */
+ int (*set_monitor_volume)(struct sparcaudio_driver *, int);
+ int (*get_monitor_volume)(struct sparcaudio_driver *);
+
+ /* Get and set the output balance. (0-64) */
+ int (*set_output_balance)(struct sparcaudio_driver *, int);
+ int (*get_output_balance)(struct sparcaudio_driver *);
+
+ /* Get and set the input balance. (0-64) */
+ int (*set_input_balance)(struct sparcaudio_driver *, int);
+ int (*get_input_balance)(struct sparcaudio_driver *);
+
+ /* Get and set the output channels. (1-4) */
+ int (*set_output_channels)(struct sparcaudio_driver *, int);
+ int (*get_output_channels)(struct sparcaudio_driver *);
+
+ /* Get and set the input channels. (1-4) */
+ int (*set_input_channels)(struct sparcaudio_driver *, int);
+ int (*get_input_channels)(struct sparcaudio_driver *);
+
+ /* Get and set the output precision. (8-32) */
+ int (*set_output_precision)(struct sparcaudio_driver *, int);
+ int (*get_output_precision)(struct sparcaudio_driver *);
+
+ /* Get and set the input precision. (8-32) */
+ int (*set_input_precision)(struct sparcaudio_driver *, int);
+ int (*get_input_precision)(struct sparcaudio_driver *);
+
+ /* Get and set the output port. () */
+ int (*set_output_port)(struct sparcaudio_driver *, int);
+ int (*get_output_port)(struct sparcaudio_driver *);
+
+ /* Get and set the input port. () */
+ int (*set_input_port)(struct sparcaudio_driver *, int);
+ int (*get_input_port)(struct sparcaudio_driver *);
+
+ /* Get and set the output encoding. () */
+ int (*set_output_encoding)(struct sparcaudio_driver *, int);
+ int (*get_output_encoding)(struct sparcaudio_driver *);
+
+ /* Get and set the input encoding. () */
+ int (*set_input_encoding)(struct sparcaudio_driver *, int);
+ int (*get_input_encoding)(struct sparcaudio_driver *);
+
+ /* Get and set the output rate. () */
+ int (*set_output_rate)(struct sparcaudio_driver *, int);
+ int (*get_output_rate)(struct sparcaudio_driver *);
+
+ /* Get and set the input rate. () */
+ int (*set_input_rate)(struct sparcaudio_driver *, int);
+ int (*get_input_rate)(struct sparcaudio_driver *);
+
+ /* Return driver number to caller. (SunOS /dev/audio specific) */
+ int (*sunaudio_getdev_sunos)(struct sparcaudio_driver *);
+
+ /* Get available ports */
+ int (*get_output_ports)(struct sparcaudio_driver *);
+ int (*get_input_ports)(struct sparcaudio_driver *);
+
+ /* Get and set output mute */
+ int (*set_output_muted)(struct sparcaudio_driver *, int);
+ int (*get_output_muted)(struct sparcaudio_driver *);
+};
+
+extern int register_sparcaudio_driver(struct sparcaudio_driver *);
+extern int unregister_sparcaudio_driver(struct sparcaudio_driver *);
+extern void sparcaudio_output_done(struct sparcaudio_driver *, int);
+extern void sparcaudio_input_done(struct sparcaudio_driver *);
+extern int sparcaudio_init(void);
+extern int amd7930_init(void);
+extern int cs4231_init(void);
+
+#endif
+
+/* Macros to convert between mixer stereo volumes and gain (mono) */
+#define s_to_m(a) (((((a) >> 8) & 0x7f) + ((a) & 0x7f)) / 2)
+#define m_to_s(a) (((a) << 8) + (a))
+
+/* convert mixer stereo volume to balance */
+#define s_to_b(a) (AUDIO_RIGHT_BALANCE * ((((a) >> 8) & 0xff) / (((((a) >> 8) & 0xff) + ((a) & 0xff)) / 2)))
+
+/* convert mixer stereo volume to audio gain */
+#define s_to_g(a) (((((a) >> 8) & 0xff) + ((a) & 0xff)) / 2)
+
+/* convert gain a and balance b to mixer volume */
+#define b_to_s(a,b) ((a * (b / AUDIO_RIGHT_BALANCE) << 8) + (a * (1 - (b / AUDIO_RIGHT_BALANCE))))
+
+#define SPARCAUDIO_MIXER_MINOR 0
+#define SPARCAUDIO_DSP16_MINOR 1
+#define SPARCAUDIO_DSP_MINOR 3
+#define SPARCAUDIO_AUDIO_MINOR 4
+#define SPARCAUDIO_AUDIOCTL_MINOR 5
+#define SPARCAUDIO_STATUS_MINOR 6
+#endif
diff --git a/include/asm-sparc64/bitops.h b/include/asm-sparc64/bitops.h
index e8b600eb0..d355b1ed4 100644
--- a/include/asm-sparc64/bitops.h
+++ b/include/asm-sparc64/bitops.h
@@ -1,4 +1,4 @@
-/* $Id: bitops.h,v 1.23 1997/12/18 02:44:12 ecd Exp $
+/* $Id: bitops.h,v 1.25 1998/07/26 03:05:51 davem Exp $
* bitops.h: Bit string operations on the V9.
*
* Copyright 1996, 1997 David S. Miller (davem@caip.rutgers.edu)
@@ -186,6 +186,56 @@ extern __inline__ unsigned long ffz(unsigned long word)
return result;
}
+#ifdef __KERNEL__
+
+/*
+ * ffs: find first bit set. This is defined the same way as
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+
+#define ffs(x) generic_ffs(x)
+
+/*
+ * hweightN: returns the hamming weight (i.e. the number
+ * of bits set) of a N-bit word
+ */
+
+#ifdef ULTRA_HAS_POPULATION_COUNT
+
+extern __inline__ unsigned int hweight32(unsigned int w)
+{
+ unsigned int res;
+
+ __asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xffffffff));
+ return res;
+}
+
+extern __inline__ unsigned int hweight16(unsigned int w)
+{
+ unsigned int res;
+
+ __asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xffff));
+ return res;
+}
+
+extern __inline__ unsigned int hweight8(unsigned int w)
+{
+ unsigned int res;
+
+ __asm__ ("popc %1,%0" : "=r" (res) : "r" (w & 0xff));
+ return res;
+}
+
+#else
+
+#define hweight32(x) generic_hweight32(x)
+#define hweight16(x) generic_hweight16(x)
+#define hweight8(x) generic_hweight8(x)
+
+#endif
+#endif /* __KERNEL__ */
+
/* find_next_zero_bit() finds the first zero bit in a bit string of length
* 'size' bits, starting the search at bit 'offset'. This is largely based
* on Linus's ALPHA routines, which are pretty portable BTW.
diff --git a/include/asm-sparc64/dma.h b/include/asm-sparc64/dma.h
index 4afcd5f27..aedfa7ddd 100644
--- a/include/asm-sparc64/dma.h
+++ b/include/asm-sparc64/dma.h
@@ -1,4 +1,4 @@
-/* $Id: dma.h,v 1.7 1997/04/10 05:13:28 davem Exp $
+/* $Id: dma.h,v 1.8 1998/04/13 07:27:06 davem Exp $
* include/asm-sparc64/dma.h
*
* Copyright 1996 (C) David S. Miller (davem@caip.rutgers.edu)
@@ -74,7 +74,7 @@ extern struct Linux_SBus_DMA *dma_chain;
#define DMA_ISESC1(dma) ((dma)->revision == dvmaesc1)
/* Main routines in dma.c */
-extern unsigned long dvma_init(struct linux_sbus *, unsigned long);
+extern void dvma_init(struct linux_sbus *);
/* Fields in the cond_reg register */
/* First, the version identification bits */
diff --git a/include/asm-sparc64/ebus.h b/include/asm-sparc64/ebus.h
index 333f7affe..8724757c7 100644
--- a/include/asm-sparc64/ebus.h
+++ b/include/asm-sparc64/ebus.h
@@ -1,4 +1,4 @@
-/* $Id: ebus.h,v 1.5 1998/03/15 10:14:46 ecd Exp $
+/* $Id: ebus.h,v 1.8 1998/05/07 21:00:27 ecd Exp $
* ebus.h: PCI to Ebus pseudo driver software state.
*
* Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
@@ -82,7 +82,7 @@ struct linux_ebus_dma {
extern struct linux_ebus *ebus_chain;
-extern unsigned long ebus_init(unsigned long, unsigned long);
+extern void ebus_init(void);
#define for_each_ebus(bus) \
for((bus) = ebus_chain; (bus); (bus) = (bus)->next)
@@ -93,9 +93,4 @@ extern unsigned long ebus_init(unsigned long, unsigned long);
#define for_each_edevchild(dev, child) \
for((child) = (dev)->children; (child); (child) = (child)->next)
-#define for_all_ebusdev(dev, bus) \
- for ((bus) = ebus_chain, ((dev) = (bus) ? (bus)->devices : 0); \
- (bus); ((dev) = (dev)->next ? (dev)->next : \
- ((bus) = (bus)->next, (bus) ? (bus)->devices : 0)))
-
#endif /* !(__SPARC64_EBUS_H) */
diff --git a/include/asm-sparc64/envctrl.h b/include/asm-sparc64/envctrl.h
new file mode 100644
index 000000000..1b5e4da9c
--- /dev/null
+++ b/include/asm-sparc64/envctrl.h
@@ -0,0 +1,17 @@
+/* $Id: envctrl.h,v 1.1 1998/05/16 17:26:07 ecd Exp $
+ *
+ * envctrl.h: Definitions for access to the i2c environment
+ * monitoring on Ultrasparc systems.
+ *
+ * Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be)
+ */
+
+#ifndef _SPARC64_ENVCTRL_H
+#define _SPARC64_ENVCTRL_H 1
+
+#include <linux/ioctl.h>
+
+#define I2CIOCSADR _IOW('p', 0x40, int)
+#define I2CIOCGADR _IOR('p', 0x41, int)
+
+#endif /* !(_SPARC64_ENVCTRL_H) */
diff --git a/include/asm-sparc64/fbio.h b/include/asm-sparc64/fbio.h
index c890793ed..6f45ce973 100644
--- a/include/asm-sparc64/fbio.h
+++ b/include/asm-sparc64/fbio.h
@@ -59,8 +59,13 @@ struct fbcmap {
unsigned char *blue;
};
+#ifdef __KERNEL__
+#define FBIOPUTCMAP_SPARC _IOW('F', 3, struct fbcmap)
+#define FBIOGETCMAP_SPARC _IOW('F', 4, struct fbcmap)
+#else
#define FBIOPUTCMAP _IOW('F', 3, struct fbcmap)
#define FBIOGETCMAP _IOW('F', 4, struct fbcmap)
+#endif
/* # of device specific values */
#define FB_ATTR_NDEVSPECIFIC 8
diff --git a/include/asm-sparc64/firehose.h b/include/asm-sparc64/firehose.h
index e4f4bb7e7..de403e98c 100644
--- a/include/asm-sparc64/firehose.h
+++ b/include/asm-sparc64/firehose.h
@@ -1,4 +1,4 @@
-/* $Id: firehose.h,v 1.2 1997/08/08 04:26:31 davem Exp $
+/* $Id: firehose.h,v 1.3 1998/06/10 07:28:43 davem Exp $
* firehose.h: Defines for the Fire Hose Controller (FHC) found
* on Sunfire/Starfire/Wildfire systems.
*
@@ -29,7 +29,7 @@ struct fhc_internal_regs {
/*0x0100*/ u32 fhc_jtag_cmd; /* FHC JTAG Command Register */
};
-/* Part of same space of regs, but mapped seperately in PROM reg property
+/* Part of same space of regs, but mapped separately in PROM reg property
* for the FHC, thus we have the following few structs...
*/
struct fhc_ign_reg {
diff --git a/include/asm-sparc64/floppy.h b/include/asm-sparc64/floppy.h
index ea5208f85..e90a7aca1 100644
--- a/include/asm-sparc64/floppy.h
+++ b/include/asm-sparc64/floppy.h
@@ -1,4 +1,4 @@
-/* $Id: floppy.h,v 1.7 1997/09/07 03:34:08 davem Exp $
+/* $Id: floppy.h,v 1.11 1998/05/22 14:33:39 jj Exp $
* asm-sparc64/floppy.h: Sparc specific parts of the Floppy driver.
*
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
@@ -11,6 +11,7 @@
#define __ASM_SPARC64_FLOPPY_H
#include <linux/config.h>
+#include <linux/init.h>
#include <asm/page.h>
#include <asm/pgtable.h>
@@ -39,7 +40,7 @@ struct sun_flpy_controller {
#define dcr_82077 dir_82077 /* Config Control reg. */
};
-/* You'll only ever find one controller on a SparcStation anyways. */
+/* You'll only ever find one controller on an Ultra anyways. */
static struct sun_flpy_controller *sun_fdc = NULL;
volatile unsigned char *fdc_status;
static struct linux_sbus_device *floppy_sdev = NULL;
@@ -229,21 +230,10 @@ static int sun_fd_request_irq(void)
int error;
if(!once) {
- struct devid_cookie dcookie;
-
once = 1;
- dcookie.real_dev_id = NULL;
- dcookie.imap = dcookie.iclr = 0;
- dcookie.pil = -1;
- dcookie.bus_cookie = floppy_sdev->my_bus;
-
- error = request_fast_irq(FLOPPY_IRQ, floppy_hardint,
- (SA_INTERRUPT | SA_SBUS | SA_DCOOKIE),
- "floppy", &dcookie);
-
- if(error == 0)
- FLOPPY_IRQ = dcookie.ret_ino;
+ error = request_fast_irq(FLOPPY_IRQ, floppy_hardint,
+ SA_INTERRUPT, "floppy", NULL);
return ((error == 0) ? 0 : -1);
}
@@ -294,29 +284,45 @@ static void sun_pci_fd_outb(unsigned char val, unsigned long port)
outb(val, port);
}
-static void sun_pci_fd_enable_dma(void)
+static void sun_pci_fd_reset_dma(void)
{
unsigned int dcsr;
- dcsr = readl((unsigned long)&sun_fd_ebus_dma->dcsr);
- dcsr |= (EBUS_DCSR_EN_DMA | EBUS_DCSR_EN_CNT);
+ writel(EBUS_DCSR_RESET, &sun_fd_ebus_dma->dcsr);
+
+ dcsr = EBUS_DCSR_BURST_SZ_16 | EBUS_DCSR_TCI_DIS |
+ EBUS_DCSR_EN_CNT | EBUS_DCSR_INT_EN;
writel(dcsr, (unsigned long)&sun_fd_ebus_dma->dcsr);
}
+static void sun_pci_fd_enable_dma(void)
+{
+ unsigned int dcsr;
+
+ dcsr = readl(&sun_fd_ebus_dma->dcsr);
+ dcsr |= EBUS_DCSR_EN_DMA;
+ writel(dcsr, &sun_fd_ebus_dma->dcsr);
+}
+
static void sun_pci_fd_disable_dma(void)
{
unsigned int dcsr;
- dcsr = readl((unsigned long)&sun_fd_ebus_dma->dcsr);
- dcsr &= ~(EBUS_DCSR_EN_DMA | EBUS_DCSR_EN_CNT);
- writel(dcsr, (unsigned long)&sun_fd_ebus_dma->dcsr);
+ dcsr = readl(&sun_fd_ebus_dma->dcsr);
+ while (dcsr & EBUS_DCSR_DRAIN)
+ dcsr = readl(&sun_fd_ebus_dma->dcsr);
+ dcsr &= ~(EBUS_DCSR_EN_DMA);
+ if (dcsr & EBUS_DCSR_ERR_PEND)
+ sun_pci_fd_reset_dma();
+ writel(dcsr, &sun_fd_ebus_dma->dcsr);
}
static void sun_pci_fd_set_dma_mode(int mode)
{
unsigned int dcsr;
- dcsr = readl((unsigned long)&sun_fd_ebus_dma->dcsr);
+ dcsr = readl(&sun_fd_ebus_dma->dcsr);
+ dcsr |= EBUS_DCSR_EN_CNT | EBUS_DCSR_TC;
/*
* For EBus WRITE means to system memory, which is
* READ for us.
@@ -325,61 +331,61 @@ static void sun_pci_fd_set_dma_mode(int mode)
dcsr &= ~(EBUS_DCSR_WRITE);
else
dcsr |= EBUS_DCSR_WRITE;
- writel(dcsr, (unsigned long)&sun_fd_ebus_dma->dcsr);
+ writel(dcsr, &sun_fd_ebus_dma->dcsr);
}
static void sun_pci_fd_set_dma_count(int length)
{
- writel(length, (unsigned long)&sun_fd_ebus_dma->dbcr);
+ writel(length, &sun_fd_ebus_dma->dbcr);
}
static void sun_pci_fd_set_dma_addr(char *buffer)
{
- unsigned int addr;
+ unsigned int addr = virt_to_bus(buffer);
+ writel(addr, &sun_fd_ebus_dma->dacr);
+}
- addr = virt_to_bus(buffer);
- writel(addr, (unsigned long)&sun_fd_ebus_dma->dacr);
+static unsigned int sun_pci_get_dma_residue(void)
+{
+ return readl(&sun_fd_ebus_dma->dbcr);
}
static void sun_pci_fd_enable_irq(void)
{
unsigned int dcsr;
- dcsr = readl((unsigned long)&sun_fd_ebus_dma->dcsr);
+ dcsr = readl(&sun_fd_ebus_dma->dcsr);
dcsr |= EBUS_DCSR_INT_EN;
- writel(dcsr, (unsigned long)&sun_fd_ebus_dma->dcsr);
+ writel(dcsr, &sun_fd_ebus_dma->dcsr);
}
static void sun_pci_fd_disable_irq(void)
{
unsigned int dcsr;
- dcsr = readl((unsigned long)&sun_fd_ebus_dma->dcsr);
+ dcsr = readl(&sun_fd_ebus_dma->dcsr);
dcsr &= ~(EBUS_DCSR_INT_EN);
- writel(dcsr, (unsigned long)&sun_fd_ebus_dma->dcsr);
+ writel(dcsr, &sun_fd_ebus_dma->dcsr);
}
static int sun_pci_fd_request_irq(void)
{
- int error;
+ int err;
- error = request_irq(FLOPPY_IRQ, floppy_interrupt, SA_SHIRQ, "floppy", sun_fdc);
- return ((error == 0) ? 0 : -1);
+ err = request_irq(FLOPPY_IRQ, floppy_interrupt, SA_SHIRQ,
+ "floppy", sun_fdc);
+ if (err)
+ return -1;
+ sun_pci_fd_enable_irq();
+ return 0;
}
static void sun_pci_fd_free_irq(void)
{
+ sun_pci_fd_disable_irq();
free_irq(FLOPPY_IRQ, sun_fdc);
}
-static unsigned int sun_pci_get_dma_residue(void)
-{
- unsigned int res;
-
- res = readl((unsigned long)&sun_fd_ebus_dma->dbcr);
- return res;
-}
-
static int sun_pci_fd_eject(int drive)
{
return -EINVAL;
@@ -388,7 +394,7 @@ static int sun_pci_fd_eject(int drive)
static struct linux_prom_registers fd_regs[2];
-static unsigned long sun_floppy_init(void)
+__initfunc(static unsigned long sun_floppy_init(void))
{
char state[128];
int fd_node, num_regs;
@@ -401,19 +407,26 @@ static unsigned long sun_floppy_init(void)
}
if(sdev) {
floppy_sdev = sdev;
- FLOPPY_IRQ = sdev->irqs[0].pri;
+ FLOPPY_IRQ = sdev->irqs[0];
} else {
#ifdef CONFIG_PCI
struct linux_ebus *ebus;
- struct linux_ebus_device *edev;
+ struct linux_ebus_device *edev = 0;
- for_all_ebusdev(edev, ebus) {
- if (!strcmp(edev->prom_name, "fdthree"))
- break;
+ for_each_ebus(ebus) {
+ for_each_ebusdev(edev, ebus) {
+ if (!strcmp(edev->prom_name, "fdthree"))
+ goto ebus_done;
+ }
}
+ ebus_done:
if (!edev)
return -1;
+ prom_getproperty(edev->prom_node, "status", state, sizeof(state));
+ if(!strncmp(state, "disabled", 8))
+ return -1;
+
if (check_region(edev->base_address[1], sizeof(struct linux_ebus_dma))) {
printk("sun_floppy_init: can't get region %016lx (%d)\n",
edev->base_address[1], (int)sizeof(struct linux_ebus_dma));
@@ -425,7 +438,7 @@ static unsigned long sun_floppy_init(void)
FLOPPY_IRQ = edev->irqs[0];
sun_fd_ebus_dma = (struct linux_ebus_dma *)edev->base_address[1];
- writel(EBUS_DCSR_BURST_SZ_16, (unsigned long)&sun_fd_ebus_dma->dcsr);
+ sun_pci_fd_reset_dma();
sun_fdops.fd_inb = sun_pci_fd_inb;
sun_fdops.fd_outb = sun_pci_fd_outb;
@@ -460,12 +473,11 @@ static unsigned long sun_floppy_init(void)
num_regs = prom_getproperty(fd_node, "reg", (char *) fd_regs, sizeof(fd_regs));
num_regs = (num_regs / sizeof(fd_regs[0]));
prom_apply_sbus_ranges(sdev->my_bus, fd_regs, num_regs, sdev);
- sun_fdc = (struct sun_flpy_controller *) sparc_alloc_io(fd_regs[0].phys_addr,
- 0x0,
- fd_regs[0].reg_size,
- "floppy",
- fd_regs[0].which_io,
- 0x0);
+ /* We cannot do sparc_alloc_io here: it does request_region, which is the generic
+ floppy driver trying to do once again */
+ sun_fdc = (struct sun_flpy_controller *) (PAGE_OFFSET + fd_regs[0].phys_addr +
+ (((unsigned long)fd_regs[0].which_io) << 32));
+
/* Last minute sanity check... */
if(sun_fdc->status1_82077 == 0xff) {
sun_fdc = NULL;
diff --git a/include/asm-sparc64/fpumacro.h b/include/asm-sparc64/fpumacro.h
index 91b9b81f8..9fd631670 100644
--- a/include/asm-sparc64/fpumacro.h
+++ b/include/asm-sparc64/fpumacro.h
@@ -8,14 +8,13 @@
#define _SPARC64_FPUMACRO_H
#include <asm/asi.h>
+#include <asm/visasm.h>
struct fpustate {
u32 regs[64];
- u64 fsr;
- u64 gsr;
};
-#define FPUSTATE (struct fpustate *)(((unsigned long)current) + (((PAGE_SIZE<<1)-((64*4)+(2*8))) & ~(64 - 1)))
+#define FPUSTATE (struct fpustate *)(((unsigned long)current) + AOFF_task_fpregs)
extern __inline__ unsigned long fprs_read(void)
{
diff --git a/include/asm-sparc64/ide.h b/include/asm-sparc64/ide.h
index acd593303..8ac583281 100644
--- a/include/asm-sparc64/ide.h
+++ b/include/asm-sparc64/ide.h
@@ -1,4 +1,4 @@
-/* $Id: ide.h,v 1.6 1998/03/15 13:29:13 ecd Exp $
+/* $Id: ide.h,v 1.9 1998/05/08 21:05:28 davem Exp $
* ide.h: Ultra/PCI specific IDE glue.
*
* Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
@@ -97,24 +97,43 @@ static __inline__ int ide_ack_intr(ide_ioreg_t status_port, ide_ioreg_t irq_port
/* From m68k code... */
+#ifdef insl
+#undef insl
+#endif
+#ifdef outsl
+#undef outsl
+#endif
+#ifdef insw
+#undef insw
+#endif
+#ifdef outsw
+#undef outsw
+#endif
+
#define insl(data_reg, buffer, wcount) insw(data_reg, buffer, (wcount)<<1)
#define outsl(data_reg, buffer, wcount) outsw(data_reg, buffer, (wcount)<<1)
#define insw(port, buf, nr) ide_insw((port), (buf), (nr))
#define outsw(port, buf, nr) ide_outsw((port), (buf), (nr))
+/* We need to use L1 cache bypassing to prevent dcache alias
+ * inconsistencies with user space. -DaveM
+ */
static __inline__ void ide_insw(unsigned long port,
void *dst,
unsigned long count)
{
volatile unsigned short *data_port;
- u16 *ps = dst;
+ u16 *ps = (u16 *)__pa(dst);
u32 *pi;
data_port = (volatile unsigned short *)port;
if(((u64)ps) & 0x2) {
- *ps++ = *data_port;
+ __asm__ __volatile__("stha %0, [%1] %2"
+ : /* no outputs */
+ : "r" (*data_port), "r" (ps++),
+ "i" (ASI_PHYS_USE_EC));
count--;
}
pi = (u32 *)ps;
@@ -123,12 +142,18 @@ static __inline__ void ide_insw(unsigned long port,
w = (*data_port) << 16;
w |= (*data_port);
- *pi++ = w;
+ __asm__ __volatile__("stwa %0, [%1] %2"
+ : /* no outputs */
+ : "r" (w), "r" (pi++),
+ "i" (ASI_PHYS_USE_EC));
count -= 2;
}
ps = (u16 *)pi;
if(count)
- *ps = *data_port;
+ __asm__ __volatile__("stha %0, [%1] %2"
+ : /* no outputs */
+ : "r" (*data_port), "r" (ps),
+ "i" (ASI_PHYS_USE_EC));
}
static __inline__ void ide_outsw(unsigned long port,
@@ -136,27 +161,37 @@ static __inline__ void ide_outsw(unsigned long port,
unsigned long count)
{
volatile unsigned short *data_port;
- const u16 *ps = src;
+ const u16 *ps = (const u16 *)__pa(src);
const u32 *pi;
data_port = (volatile unsigned short *)port;
if(((u64)src) & 0x2) {
- *data_port = *ps++;
+ u16 w;
+ __asm__ __volatile__("lduha [%1] %2, %0"
+ : "=r" (w)
+ : "r" (ps++), "i" (ASI_PHYS_USE_EC));
+ *data_port = w;
count--;
}
pi = (const u32 *)ps;
while(count >= 2) {
u32 w;
-
- w = *pi++;
+ __asm__ __volatile__("lduwa [%1] %2, %0"
+ : "=r" (w)
+ : "r" (pi++), "i" (ASI_PHYS_USE_EC));
*data_port = (w >> 16);
*data_port = w;
count -= 2;
}
ps = (const u16 *)pi;
- if(count)
- *data_port = *ps;
+ if(count) {
+ u16 w;
+ __asm__ __volatile__("lduha [%1] %2, %0"
+ : "=r" (w)
+ : "r" (ps++), "i" (ASI_PHYS_USE_EC));
+ *data_port = w;
+ }
}
#define T_CHAR (0x0000) /* char: don't touch */
diff --git a/include/asm-sparc64/io.h b/include/asm-sparc64/io.h
index 3b8502189..a6bdff9a3 100644
--- a/include/asm-sparc64/io.h
+++ b/include/asm-sparc64/io.h
@@ -1,4 +1,4 @@
-/* $Id: io.h,v 1.16 1998/03/24 05:54:40 ecd Exp $ */
+/* $Id: io.h,v 1.18 1998/07/12 12:07:43 ecd Exp $ */
#ifndef __SPARC64_IO_H
#define __SPARC64_IO_H
@@ -13,27 +13,48 @@
#define __SLOW_DOWN_IO do { } while (0)
#define SLOW_DOWN_IO do { } while (0)
+
+#define PCI_DVMA_HASHSZ 256
+
extern unsigned long pci_dvma_offset;
extern unsigned long pci_dvma_mask;
+extern unsigned long pci_dvma_v2p_hash[PCI_DVMA_HASHSZ];
+extern unsigned long pci_dvma_p2v_hash[PCI_DVMA_HASHSZ];
+
+#define pci_dvma_ahashfn(addr) (((addr) >> 24) & 0xff)
+
extern __inline__ unsigned long virt_to_phys(volatile void *addr)
{
unsigned long vaddr = (unsigned long)addr;
+ unsigned long off;
/* Handle kernel variable pointers... */
if (vaddr < PAGE_OFFSET)
vaddr += PAGE_OFFSET - (unsigned long)&empty_zero_page;
- return ((vaddr - PAGE_OFFSET) | pci_dvma_offset);
+
+ off = pci_dvma_v2p_hash[pci_dvma_ahashfn(vaddr - PAGE_OFFSET)];
+ return vaddr + off;
}
extern __inline__ void *phys_to_virt(unsigned long addr)
{
- return ((void *)((addr & pci_dvma_mask) + PAGE_OFFSET));
+ unsigned long paddr = addr & 0xffffffffUL;
+ unsigned long off;
+
+ off = pci_dvma_p2v_hash[pci_dvma_ahashfn(paddr)];
+ return (void *)(paddr + off);
}
#define virt_to_bus virt_to_phys
#define bus_to_virt phys_to_virt
+extern __inline__ unsigned long bus_dvma_to_mem(unsigned long vaddr)
+{
+ return vaddr & pci_dvma_mask;
+}
+
+
extern __inline__ unsigned int inb(unsigned long addr)
{
unsigned int ret;
diff --git a/include/asm-sparc64/irq.h b/include/asm-sparc64/irq.h
index b7e6f2d23..b9a900406 100644
--- a/include/asm-sparc64/irq.h
+++ b/include/asm-sparc64/irq.h
@@ -1,39 +1,39 @@
-/* $Id: irq.h,v 1.8 1998/03/15 17:23:51 ecd Exp $
+/* $Id: irq.h,v 1.10 1998/05/29 06:00:39 ecd Exp $
* irq.h: IRQ registers on the 64-bit Sparc.
*
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
+ * Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz)
*/
#ifndef _SPARC64_IRQ_H
#define _SPARC64_IRQ_H
#include <linux/linkage.h>
-
-/* Sparc64 extensions to the interrupt registry flags. Mostly this is
- * for passing along what bus type the device is on and also the true
- * format of the dev_id cookie, see below.
- */
-#define SA_BUSMASK 0x0f000
-#define SA_SBUS 0x01000
-#define SA_PCI 0x02000
-#define SA_FHC 0x03000
-#define SA_EBUS 0x04000
-#define SA_BUS(mask) ((mask) & SA_BUSMASK)
+#include <linux/kernel.h>
struct devid_cookie {
- /* Caller specifies these. */
- void *real_dev_id; /* What dev_id would usually contain. */
- unsigned int *imap; /* Anonymous IMAP register */
- unsigned int *iclr; /* Anonymous ICLR register */
- int pil; /* Anonymous PIL */
- void *bus_cookie; /* SYSIO regs, PSYCHO regs, etc. */
-
- /* Return values. */
- unsigned int ret_ino;
- unsigned int ret_pil;
+ int dummy;
+};
+
+/* You should not mess with this directly. That's the job of irq.c. */
+struct ino_bucket {
+ unsigned short ino;
+ short imap_off;
+ unsigned short pil;
+ unsigned short flags;
+ unsigned int *iclr;
};
-#define SA_DCOOKIE 0x10000
+#define __irq_ino(irq) ((struct ino_bucket *)(unsigned long)(irq))->ino
+#define __irq_pil(irq) ((struct ino_bucket *)(unsigned long)(irq))->pil
+
+static __inline__ char *__irq_itoa(unsigned int irq)
+{
+ static char buff[16];
+
+ sprintf(buff, "%d,%x", __irq_pil(irq), __irq_ino(irq));
+ return buff;
+}
#define NR_IRQS 15
@@ -41,6 +41,9 @@ extern void disable_irq(unsigned int);
extern void enable_irq(unsigned int);
extern void init_timers(void (*lvl10_irq)(int, void *, struct pt_regs *),
unsigned long *);
+extern unsigned int build_irq(int pil, int inofixup, unsigned int *iclr, unsigned int *imap);
+extern unsigned int sbus_build_irq(void *sbus, unsigned int ino);
+extern unsigned int psycho_build_irq(void *psycho, int imap_off, int ino, int need_dma_sync);
#ifdef __SMP__
extern void set_cpu_int(int, int);
@@ -76,9 +79,4 @@ extern __inline__ unsigned long get_softint(void)
return retval;
}
-static __inline__ int irq_cannonicalize(int irq)
-{
- return irq;
-}
-
#endif
diff --git a/include/asm-sparc64/linux_logo.h b/include/asm-sparc64/linux_logo.h
index 59bd61866..df564adcd 100644
--- a/include/asm-sparc64/linux_logo.h
+++ b/include/asm-sparc64/linux_logo.h
@@ -1,4 +1,4 @@
-/* $Id: linux_logo.h,v 1.3 1997/08/25 07:50:35 jj Exp $
+/* $Id: linux_logo.h,v 1.6 1998/07/30 16:30:48 jj Exp $
* include/asm-sparc64/linux_logo.h: This is a linux logo
* to be displayed on boot.
*
@@ -23,899 +23,904 @@
#define linux_logo_banner "Linux/UltraSPARC version " UTS_RELEASE
-#define LINUX_LOGO_COLORS 215
+#define LINUX_LOGO_COLORS 219
+
+#ifdef INCLUDE_LINUX_LOGO_DATA
unsigned char linux_logo_red[] __initdata = {
- 0x99, 0x95, 0x92, 0x8E, 0x8A, 0x86, 0x02, 0x00,
- 0xA5, 0xA9, 0xA2, 0x9E, 0xAD, 0x1B, 0x3B, 0x25,
- 0x71, 0x65, 0x2C, 0x82, 0x5B, 0x33, 0x13, 0xB0,
- 0x0C, 0xB1, 0xD4, 0xCE, 0x04, 0x06, 0x16, 0xB6,
- 0xCD, 0xB2, 0x42, 0x46, 0x4B, 0xA8, 0xF3, 0xCA,
- 0xC5, 0x1C, 0xDC, 0xA0, 0xD4, 0xE6, 0xED, 0xF3,
- 0xC2, 0x8E, 0xCC, 0xA5, 0x7E, 0x52, 0xF7, 0xE3,
- 0x56, 0x79, 0x68, 0x8D, 0xAF, 0xFC, 0x8E, 0x3E,
- 0x6B, 0x11, 0x37, 0x79, 0x5C, 0x3C, 0x3F, 0x3C,
- 0x48, 0x47, 0x3D, 0xB9, 0x62, 0xE1, 0x4D, 0x57,
- 0x84, 0x78, 0xA6, 0x58, 0x99, 0xCD, 0xB7, 0xE3,
- 0x6D, 0x5A, 0xAF, 0x79, 0x79, 0xF2, 0x42, 0x46,
- 0xDD, 0x89, 0xC3, 0xF2, 0xF0, 0xE0, 0xD1, 0x90,
- 0x76, 0x6B, 0x4A, 0xBE, 0xBD, 0xE3, 0xF6, 0xE9,
- 0xEC, 0xE8, 0xEC, 0xC0, 0x66, 0x63, 0xCB, 0xAB,
- 0x49, 0x5C, 0xAD, 0xD6, 0xEE, 0xF5, 0xF5, 0xE9,
- 0x6E, 0x00, 0x69, 0x6A, 0xA1, 0x7A, 0xB4, 0xDE,
- 0xF1, 0xF6, 0xDD, 0x00, 0x73, 0xDB, 0x4C, 0x53,
- 0x6A, 0xF5, 0xF5, 0xD6, 0xC3, 0x6A, 0x4B, 0x4B,
- 0x60, 0xF8, 0x9B, 0xD7, 0xD7, 0x71, 0xB3, 0xA4,
- 0xCA, 0xAB, 0xB4, 0xB2, 0x76, 0xBA, 0x8B, 0xA0,
- 0xA5, 0xEE, 0xE7, 0x67, 0x5F, 0x08, 0x94, 0xDB,
- 0xE5, 0x4F, 0x00, 0x34, 0xEE, 0xEC, 0xE2, 0x48,
- 0xF3, 0xEB, 0xF4, 0xF4, 0xEF, 0xD6, 0xB6, 0xE6,
- 0xE6, 0xED, 0xE7, 0xE6, 0x3D, 0xE7, 0xCD, 0x44,
- 0xEF, 0xEC, 0xF5, 0x66, 0xF3, 0xA9, 0x77, 0x58,
- 0x75, 0x6C, 0x53, 0x24, 0xAC, 0x0D, 0x3C
+ 0x03, 0x9E, 0xEC, 0xEE, 0xC4, 0xDA, 0x50, 0xC9,
+ 0xC5, 0xED, 0x65, 0xE3, 0xE3, 0xF4, 0x24, 0xA4,
+ 0xEC, 0xEE, 0x94, 0xE5, 0xE3, 0x6A, 0xA6, 0xC4,
+ 0xDC, 0xE5, 0x13, 0xF3, 0xD1, 0xFD, 0xE2, 0xDB,
+ 0xA0, 0xC2, 0xEC, 0xB8, 0xC2, 0xD5, 0xF2, 0xF4,
+ 0xC5, 0x3E, 0xF1, 0x1B, 0x55, 0xF5, 0xCF, 0xF7,
+ 0xA9, 0xB4, 0xEB, 0x6C, 0x0A, 0x74, 0xB4, 0xF7,
+ 0xF0, 0xF5, 0xD4, 0xF2, 0xCE, 0xF5, 0xC7, 0x26,
+ 0x5B, 0xF4, 0xBC, 0x7F, 0xAB, 0x82, 0x94, 0xE5,
+ 0xFC, 0x3A, 0xF2, 0xFD, 0xF0, 0x1C, 0xEF, 0xD4,
+ 0xF3, 0x0F, 0xED, 0xF7, 0xC9, 0x49, 0xC3, 0xBA,
+ 0xC8, 0xD4, 0xE7, 0xF3, 0xF5, 0xA7, 0xEC, 0xF9,
+ 0xFA, 0x0A, 0xF5, 0xCF, 0xFC, 0xEA, 0xE1, 0xA6,
+ 0xD6, 0xBC, 0xF8, 0xF7, 0xB4, 0xEB, 0xDC, 0x84,
+ 0xCE, 0xBA, 0x45, 0xD6, 0x86, 0x50, 0x96, 0xC6,
+ 0x8C, 0x6E, 0xE8, 0x60, 0x3C, 0x70, 0xF0, 0x93,
+ 0x7C, 0xDA, 0xDA, 0x9C, 0xBA, 0x6D, 0x4D, 0x2B,
+ 0x2F, 0x8B, 0xE0, 0xCC, 0xDA, 0x5C, 0x3D, 0xEE,
+ 0xDB, 0x46, 0xAC, 0x96, 0xCE, 0xD1, 0xE3, 0xF1,
+ 0x96, 0x7A, 0x80, 0xB2, 0xBA, 0xB6, 0xD2, 0x1E,
+ 0x7E, 0xAA, 0xC4, 0xF0, 0x96, 0x65, 0x9E, 0xC2,
+ 0xAA, 0xF5, 0xF2, 0xE9, 0xE6, 0xD1, 0x35, 0xC7,
+ 0xF6, 0xB6, 0xE8, 0x82, 0xBE, 0xC2, 0xF2, 0x9E,
+ 0xC7, 0xB4, 0x0F, 0xF7, 0xE8, 0xD8, 0xCC, 0x9C,
+ 0xD8, 0xD8, 0xA0, 0xEA, 0xC6, 0xA8, 0xE0, 0xEC,
+ 0xD1, 0xF7, 0xF4, 0xFC, 0x75, 0xBD, 0xDC, 0xDD,
+ 0xCC, 0xE1, 0xFA, 0xEE, 0xAA, 0xEC, 0xF2, 0xB8,
+ 0xE2, 0xCD, 0x87
};
unsigned char linux_logo_green[] __initdata = {
- 0x99, 0x95, 0x92, 0x8E, 0x8A, 0x86, 0x02, 0x00,
- 0xA5, 0xA9, 0xA2, 0x9E, 0xAD, 0x1B, 0x3B, 0x25,
- 0x71, 0x65, 0x2C, 0x82, 0x5B, 0x33, 0x13, 0xAD,
- 0x0C, 0xB1, 0x92, 0xAB, 0x03, 0x06, 0x16, 0xB6,
- 0xCD, 0x88, 0x42, 0x46, 0x4B, 0x94, 0xBB, 0xCA,
- 0xC5, 0x1C, 0xAB, 0xA0, 0xD4, 0xE6, 0xED, 0xF3,
- 0xC2, 0x73, 0xCA, 0x91, 0x7E, 0x52, 0xF7, 0xE3,
- 0x56, 0x5A, 0x49, 0x56, 0x6E, 0xFC, 0x6B, 0x3E,
- 0x6B, 0x0D, 0x37, 0x79, 0x51, 0x44, 0x3F, 0x43,
- 0x38, 0x3D, 0x48, 0xB9, 0x62, 0xA5, 0x47, 0x48,
- 0x49, 0x4A, 0x97, 0x48, 0x81, 0x95, 0x8E, 0xE3,
- 0x6D, 0x57, 0x51, 0x51, 0x47, 0xB2, 0x42, 0x46,
- 0xDD, 0x5B, 0x87, 0xBE, 0xC7, 0xC8, 0x56, 0x75,
- 0x5D, 0x4B, 0x4D, 0xBE, 0x85, 0xA6, 0xBC, 0xC7,
- 0xCA, 0xCD, 0xCC, 0xA4, 0x53, 0x4D, 0x9F, 0x55,
- 0x52, 0x5E, 0x75, 0x9C, 0xB6, 0xC3, 0xD7, 0xCC,
- 0x55, 0x00, 0x6A, 0x59, 0x7D, 0x55, 0x7C, 0xA3,
- 0xB7, 0xBF, 0xA5, 0x00, 0x67, 0xC6, 0x47, 0x54,
- 0x46, 0xB8, 0xBE, 0xB2, 0x87, 0x52, 0x4B, 0x43,
- 0x41, 0xF8, 0x69, 0x96, 0x9B, 0x66, 0xB0, 0x6C,
- 0x8E, 0x81, 0xB4, 0x76, 0x76, 0xB9, 0x65, 0x77,
- 0x6D, 0xED, 0xE7, 0x67, 0x5F, 0x06, 0x54, 0x6C,
- 0xCB, 0x4F, 0x00, 0x2F, 0xC2, 0xB5, 0xB6, 0x30,
- 0xC3, 0xAE, 0xC4, 0xCA, 0xC6, 0xB4, 0x7B, 0xAD,
- 0xAD, 0xB6, 0xB6, 0xAD, 0x29, 0xAB, 0x93, 0x2E,
- 0xBC, 0xBC, 0xC9, 0x53, 0xBF, 0x77, 0x54, 0x3B,
- 0x4B, 0x3F, 0x39, 0x19, 0x76, 0x08, 0x2C
+ 0x03, 0x88, 0xC4, 0xE2, 0x85, 0xC2, 0x44, 0xA3,
+ 0xA9, 0xD3, 0x65, 0xA6, 0xC5, 0xF3, 0x24, 0xA4,
+ 0xB4, 0xD6, 0x63, 0xD5, 0xB7, 0x44, 0x86, 0x94,
+ 0xC2, 0xE4, 0x14, 0xB6, 0xD2, 0xFB, 0xD4, 0xB2,
+ 0x73, 0x96, 0xDB, 0x92, 0xC2, 0x95, 0xC2, 0xDA,
+ 0xA4, 0x36, 0xD4, 0x0E, 0x55, 0xF4, 0xC4, 0xE9,
+ 0x75, 0xB4, 0xBC, 0x52, 0x0A, 0x74, 0x84, 0xEB,
+ 0xDC, 0xDA, 0xA2, 0xD6, 0x9B, 0xBD, 0xB7, 0x12,
+ 0x44, 0xCA, 0x8C, 0x65, 0x7B, 0x54, 0x94, 0xAB,
+ 0xF4, 0x25, 0xC4, 0xFD, 0xE4, 0x1C, 0xDD, 0xAB,
+ 0xBD, 0x06, 0xCB, 0xD6, 0xCA, 0x33, 0x8C, 0xA2,
+ 0x92, 0x9C, 0xBC, 0xDB, 0xCD, 0x6E, 0xEC, 0xEE,
+ 0xBC, 0x03, 0xDA, 0xCE, 0xF4, 0xB6, 0xDB, 0x92,
+ 0xAD, 0xBC, 0xDE, 0xD5, 0x7B, 0xAE, 0x9D, 0x84,
+ 0xB6, 0x96, 0x44, 0xBA, 0x6E, 0x3C, 0x7A, 0xB2,
+ 0x8C, 0x4C, 0xCE, 0x4C, 0x3C, 0x5A, 0xCA, 0x6D,
+ 0x7C, 0xCE, 0xDA, 0x9C, 0xAA, 0x6D, 0x4D, 0x2B,
+ 0x1B, 0x5E, 0xCB, 0xAC, 0xBE, 0x5C, 0x2E, 0xDC,
+ 0xBD, 0x3E, 0xAC, 0x82, 0xB6, 0xBE, 0xD3, 0xBD,
+ 0x72, 0x62, 0x6C, 0x82, 0x92, 0x9E, 0xB0, 0x13,
+ 0x4A, 0x8E, 0xBE, 0xCE, 0x86, 0x45, 0x6B, 0xAA,
+ 0x9A, 0xC5, 0xC6, 0xDA, 0xC5, 0xC4, 0x34, 0x9B,
+ 0xCC, 0xAC, 0xC4, 0x76, 0x9A, 0x9E, 0xEE, 0x62,
+ 0xC6, 0x76, 0x0D, 0xE4, 0xDA, 0xD5, 0xA5, 0x92,
+ 0xCD, 0xB2, 0x7C, 0xCC, 0xBE, 0x7E, 0xDC, 0xD6,
+ 0xB9, 0xE3, 0xD4, 0xF6, 0x55, 0x82, 0xA4, 0xAA,
+ 0x8D, 0xBB, 0xCE, 0xD5, 0x8A, 0xDB, 0xD4, 0x8B,
+ 0xCA, 0x93, 0x63
};
unsigned char linux_logo_blue[] __initdata = {
- 0x99, 0x95, 0x92, 0x8E, 0x8A, 0x86, 0xD6, 0x00,
- 0xA5, 0xA9, 0xA2, 0x9E, 0xAD, 0x1B, 0x39, 0x25,
- 0x71, 0x65, 0x2C, 0x82, 0x5B, 0x33, 0x13, 0xA7,
- 0x0C, 0xB1, 0x58, 0x8A, 0x03, 0x07, 0x16, 0xB6,
- 0xCD, 0x5A, 0x42, 0x46, 0x4F, 0x6F, 0x77, 0xCA,
- 0xC5, 0x1C, 0x6F, 0xA5, 0xD4, 0xE6, 0xF5, 0xF3,
- 0xC2, 0x4D, 0xD1, 0x64, 0x7E, 0x52, 0xF7, 0xE3,
- 0x56, 0x49, 0x3C, 0x47, 0x45, 0xFE, 0x3B, 0x41,
- 0x6B, 0x09, 0x37, 0x79, 0x39, 0x39, 0x3F, 0x42,
- 0x3A, 0x42, 0x5F, 0xB9, 0x62, 0x4C, 0x39, 0x44,
- 0x3B, 0x3A, 0xA0, 0x3D, 0x08, 0x08, 0x09, 0xDE,
- 0x6D, 0x48, 0x3B, 0x3F, 0x42, 0xF3, 0x36, 0x3C,
- 0xDD, 0x06, 0x16, 0x08, 0x13, 0x0A, 0x4B, 0x71,
- 0x5D, 0x44, 0x47, 0xBE, 0x08, 0x0C, 0x0D, 0x0C,
- 0x19, 0x29, 0x36, 0x06, 0x43, 0x44, 0xBA, 0x45,
- 0x50, 0x58, 0x07, 0x07, 0x0D, 0x0E, 0x10, 0x50,
- 0x06, 0x42, 0x40, 0x44, 0x79, 0x06, 0x06, 0x0C,
- 0x08, 0x08, 0x07, 0x36, 0x4C, 0xE5, 0x42, 0x55,
- 0x03, 0x0F, 0x12, 0x06, 0x07, 0x3C, 0x4B, 0x3D,
- 0x01, 0xF8, 0x08, 0x0E, 0x0A, 0x69, 0xAC, 0x0C,
- 0x0A, 0x27, 0xBB, 0x36, 0x76, 0xC0, 0x04, 0x08,
- 0x08, 0xED, 0xEE, 0x68, 0x5F, 0xB2, 0x3B, 0x52,
- 0xAC, 0x4F, 0x6F, 0x2D, 0x16, 0x08, 0x59, 0x04,
- 0x13, 0x0E, 0x14, 0x17, 0x16, 0x2E, 0x08, 0x0D,
- 0x11, 0x14, 0x0D, 0x06, 0x04, 0x08, 0x25, 0x8E,
- 0x0E, 0x14, 0x25, 0x9B, 0x1C, 0x16, 0x78, 0x06,
- 0x04, 0x03, 0x79, 0x8C, 0x0B, 0xC8, 0x48
+ 0x04, 0x28, 0x10, 0x8C, 0x0B, 0x84, 0x14, 0x1A,
+ 0x77, 0x1F, 0x64, 0x0E, 0x85, 0xD2, 0x24, 0xA4,
+ 0x0F, 0x54, 0x0C, 0x7C, 0x3F, 0x04, 0x20, 0x0D,
+ 0x54, 0xDF, 0x14, 0x0D, 0xD1, 0xE9, 0xB0, 0x11,
+ 0x0A, 0x40, 0x57, 0x14, 0xC3, 0x0C, 0x04, 0x12,
+ 0x50, 0x0C, 0x7D, 0x05, 0x55, 0xF2, 0xBA, 0xC7,
+ 0x09, 0xB4, 0x0E, 0x24, 0x0B, 0x74, 0x0C, 0xB6,
+ 0x80, 0x48, 0x10, 0x34, 0x0F, 0x0C, 0xA0, 0x04,
+ 0x19, 0x10, 0x0E, 0x14, 0x0E, 0x05, 0x94, 0x0E,
+ 0xCA, 0x0B, 0x46, 0xFB, 0xB4, 0x1C, 0x9B, 0x1A,
+ 0x21, 0x09, 0x14, 0x4D, 0xCB, 0x08, 0x11, 0x7C,
+ 0x20, 0x10, 0x24, 0x66, 0x79, 0x07, 0xEA, 0xC9,
+ 0x0C, 0x08, 0x38, 0xC4, 0xD8, 0x24, 0xBE, 0x6C,
+ 0x51, 0xBB, 0x8C, 0x36, 0x0A, 0x0F, 0x0C, 0x84,
+ 0x3C, 0x54, 0x44, 0x7C, 0x28, 0x0E, 0x28, 0x7F,
+ 0x8C, 0x0F, 0x54, 0x24, 0x3C, 0x18, 0x54, 0x17,
+ 0x7C, 0x9C, 0xDA, 0x9C, 0x7C, 0x6C, 0x4D, 0x2C,
+ 0x09, 0x0E, 0x8A, 0x50, 0x4C, 0x5B, 0x14, 0xAC,
+ 0x19, 0x3C, 0xAC, 0x5C, 0x64, 0x97, 0x94, 0x37,
+ 0x29, 0x3C, 0x44, 0x3C, 0x2C, 0x7C, 0x70, 0x07,
+ 0x04, 0x29, 0xB2, 0x64, 0x74, 0x07, 0x07, 0x2C,
+ 0x74, 0x2E, 0x6C, 0xA4, 0x29, 0x9E, 0x34, 0x27,
+ 0x2F, 0x98, 0x48, 0x5C, 0x0C, 0x5C, 0xE8, 0x04,
+ 0xC2, 0x0C, 0x0A, 0xB2, 0x74, 0xCB, 0x46, 0x78,
+ 0xB4, 0x5C, 0x18, 0x80, 0x8C, 0x24, 0xD9, 0xAC,
+ 0x87, 0x99, 0x1D, 0xE8, 0x14, 0x0D, 0x10, 0x17,
+ 0x0A, 0x67, 0x3C, 0x68, 0x3C, 0x69, 0x90, 0x22,
+ 0x6C, 0x0D, 0x17
};
unsigned char linux_logo[] __initdata = {
+ 0xD8, 0xA3, 0x98, 0x98, 0xA3, 0xB2, 0x2F, 0x2F,
+ 0xA3, 0x66, 0x98, 0x98, 0x98, 0xA3, 0x2F, 0xA3,
+ 0x98, 0x55, 0xA0, 0xA3, 0xB2, 0x51, 0x51, 0x2F,
+ 0x98, 0x55, 0x8F, 0x2F, 0x89, 0x44, 0x89, 0x51,
+ 0xB2, 0x2F, 0x66, 0xA3, 0x2F, 0x2F, 0x66, 0x66,
+ 0xA3, 0xB2, 0xB2, 0xB2, 0x89, 0xD8, 0x44, 0x44,
+ 0xD8, 0x83, 0xD8, 0xA3, 0x98, 0x98, 0xA3, 0xB2,
+ 0x2F, 0x2F, 0xA3, 0x66, 0x98, 0x98, 0x98, 0xA3,
+ 0x2F, 0xA3, 0x98, 0x55, 0xA0, 0xA3, 0xB2, 0x51,
+ 0x51, 0x2F, 0x98, 0x55, 0x8F, 0x2F, 0x89, 0x44,
+ 0xA3, 0x55, 0x55, 0x98, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0x66, 0x66, 0x98, 0x98, 0x66, 0x66, 0x66, 0x98,
+ 0x55, 0xA5, 0x8F, 0xA3, 0x51, 0x51, 0xB2, 0x2F,
+ 0x66, 0x66, 0xA3, 0x51, 0x89, 0x51, 0xB2, 0x2F,
+ 0x2F, 0xA3, 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F,
+ 0xB2, 0xB2, 0x2F, 0x2F, 0xB2, 0x51, 0x51, 0x51,
+ 0x51, 0x51, 0xA3, 0x55, 0x55, 0x98, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0x66, 0x66, 0x98, 0x98, 0x66, 0x66,
+ 0x66, 0x98, 0x55, 0xA5, 0x8F, 0xA3, 0x51, 0x51,
+ 0xB2, 0x2F, 0x66, 0x66, 0xA3, 0x51, 0x89, 0x51,
+ 0x98, 0xA5, 0x55, 0x8F, 0x2F, 0xB2, 0x2F, 0xA3,
+ 0x66, 0x66, 0x98, 0x8F, 0x66, 0x66, 0x66, 0x98,
+ 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0x51, 0xB2, 0x2F,
+ 0xA3, 0xA3, 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x2F,
+ 0xA3, 0x66, 0x98, 0xA3, 0x51, 0xB2, 0x2F, 0xA3,
+ 0xB2, 0x51, 0x51, 0xB2, 0xB2, 0x51, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0x98, 0xA5, 0x55, 0x8F, 0x2F, 0xB2,
+ 0x2F, 0xA3, 0x66, 0x66, 0x98, 0x8F, 0x66, 0x66,
+ 0x66, 0x98, 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0x51,
+ 0xB2, 0x2F, 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0xB2,
+ 0xA0, 0xA5, 0x55, 0x66, 0xB2, 0x51, 0xB2, 0xA3,
+ 0x66, 0x66, 0x98, 0x66, 0x66, 0x66, 0x98, 0x98,
+ 0x66, 0xA3, 0x2F, 0xB2, 0x51, 0x51, 0xB2, 0xA3,
+ 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0x66, 0x98, 0xB2, 0x4C, 0x54, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xCE, 0x2F, 0xB2, 0x2F, 0x2F,
+ 0xA3, 0x98, 0xA0, 0xA5, 0x55, 0x66, 0xB2, 0x51,
+ 0xB2, 0xA3, 0x66, 0x66, 0x98, 0x66, 0x66, 0x66,
+ 0x98, 0x98, 0x66, 0xA3, 0x2F, 0xB2, 0x51, 0x51,
+ 0xB2, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0xA0, 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0xB2, 0x2F,
+ 0x66, 0x66, 0x98, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0xA3, 0x2F, 0x51, 0x51, 0x51, 0xB2, 0x2F, 0xA3,
+ 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x2F, 0xA0, 0xDA, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x9C, 0xB2, 0xA3,
+ 0x66, 0x98, 0xA0, 0xA0, 0x8F, 0xA3, 0xB2, 0x51,
+ 0xB2, 0x2F, 0x66, 0x66, 0x98, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0xA3, 0x2F, 0x51, 0x51, 0x51, 0xB2,
+ 0x2F, 0xA3, 0x66, 0x66, 0x66, 0xA3, 0xA3, 0xA3,
+ 0x8F, 0x8F, 0x66, 0x2F, 0x51, 0x51, 0xB2, 0xA3,
+ 0x66, 0x98, 0x98, 0x66, 0x66, 0x66, 0x2F, 0x2F,
+ 0xB2, 0x51, 0xB2, 0xB2, 0x2F, 0x2F, 0xA3, 0x66,
+ 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0xB2,
+ 0x9C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xDA, 0x3A, 0x20, 0x54, 0x55,
+ 0xA3, 0x98, 0x8F, 0x8F, 0x66, 0x2F, 0x51, 0x51,
+ 0xB2, 0xA3, 0x66, 0x98, 0x98, 0x66, 0x66, 0x66,
+ 0x2F, 0x2F, 0xB2, 0x51, 0xB2, 0xB2, 0x2F, 0x2F,
+ 0xA3, 0x66, 0x66, 0x66, 0x2F, 0xA3, 0x2F, 0x2F,
+ 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0x66,
+ 0x8F, 0x8F, 0x8F, 0x66, 0xA3, 0xA3, 0xB2, 0xB2,
+ 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0xAD,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xA7, 0x4C, 0xCE, 0xDA, 0x20,
+ 0xA6, 0x2F, 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0xB2,
+ 0x2F, 0x66, 0x8F, 0x8F, 0x8F, 0x66, 0xA3, 0xA3,
+ 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0xA3, 0x98, 0x66, 0x2F, 0xB2, 0xB2, 0x2F, 0x98,
+ 0x8F, 0x8F, 0x98, 0x66, 0xA3, 0xB2, 0xB2, 0xB2,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x51, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xCE, 0x55, 0xAD, 0xA7, 0x54,
+ 0x20, 0x8F, 0xA3, 0x98, 0x66, 0x2F, 0xB2, 0xB2,
+ 0x2F, 0x98, 0x8F, 0x8F, 0x98, 0x66, 0xA3, 0xB2,
+ 0xB2, 0xB2, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F,
+ 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0x8F, 0x66, 0x2F, 0xB2, 0x51, 0x2F, 0x98,
+ 0xA0, 0x8F, 0x66, 0xA3, 0x2F, 0x51, 0x51, 0xB2,
+ 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0x66, 0x66,
+ 0x98, 0x98, 0x98, 0x66, 0x98, 0x66, 0x55, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x21, 0x21, 0x22, 0x23, 0x24, 0x24,
- 0x25, 0x24, 0x24, 0x25, 0x25, 0x25, 0x25, 0x25,
- 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x23, 0x23,
- 0x23, 0x22, 0x22, 0x22, 0x22, 0x21, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x26, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x26, 0x28,
- 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29,
- 0x29, 0x28, 0x28, 0x28, 0x2A, 0x2A, 0x2B, 0x2B,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x2B, 0x2B, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x29, 0x29,
- 0x29, 0x29, 0x29, 0x2C, 0x29, 0x29, 0x29, 0x28,
- 0x28, 0x2A, 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B, 0x2A, 0x2A,
- 0x2A, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x2D, 0x2E, 0x2F, 0x27,
- 0x27, 0x26, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x28,
- 0x28, 0x29, 0x29, 0x29, 0x29, 0x2C, 0x2C, 0x29,
- 0x29, 0x29, 0x28, 0x28, 0x2A, 0x2B, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xCE, 0x4C, 0x9C, 0x2E, 0xDA,
+ 0x20, 0xDA, 0x51, 0x8F, 0x66, 0x2F, 0xB2, 0x51,
+ 0x2F, 0x98, 0xA0, 0x8F, 0x66, 0xA3, 0x2F, 0x51,
+ 0x51, 0xB2, 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3,
+ 0x66, 0x66, 0x98, 0x98, 0x98, 0x98, 0x98, 0x66,
+ 0x51, 0x66, 0x2F, 0xB2, 0x51, 0xB2, 0xA3, 0xA0,
+ 0xA0, 0x66, 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0xA3,
+ 0x66, 0x66, 0x66, 0xA3, 0xA3, 0x66, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x66, 0x66, 0xB2, 0x6D, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x6D, 0x3A, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0xA5, 0x66, 0x2F, 0xB2, 0x51, 0xB2,
+ 0xA3, 0xA0, 0xA0, 0x66, 0xA3, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0xA3, 0x66, 0x66, 0x66, 0xA3, 0xA3, 0x66,
+ 0x98, 0x98, 0x8F, 0x98, 0x66, 0x66, 0x66, 0x66,
+ 0x51, 0x2F, 0xB2, 0x51, 0x51, 0x2F, 0x66, 0xA0,
+ 0x8F, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0x2F, 0x66,
+ 0x98, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x2F, 0xA3, 0x2F, 0x2F, 0x51, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0xDA, 0x51, 0xB2, 0x51, 0x51, 0x2F,
+ 0x66, 0xA0, 0x8F, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F,
+ 0x2F, 0x66, 0x98, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x51, 0x2F, 0xB2, 0x51, 0x2F, 0xA3, 0x8F, 0x8F,
+ 0x98, 0xA3, 0xB2, 0xB2, 0x2F, 0xA3, 0x98, 0x66,
+ 0x98, 0x98, 0x66, 0x66, 0x66, 0x66, 0xA3, 0x2F,
+ 0xB2, 0xB2, 0x51, 0xB2, 0xB2, 0x66, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2A, 0x2A, 0x2A,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x2F, 0x30, 0x31, 0x32,
- 0x27, 0x27, 0x22, 0x22, 0x22, 0x22, 0x21, 0x20,
- 0x20, 0x20, 0x2B, 0x2A, 0x28, 0x29, 0x29, 0x29,
- 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x28, 0x2A, 0x2B,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0xA3, 0xB2, 0x51, 0x2F, 0xA3,
+ 0x8F, 0x8F, 0x98, 0xA3, 0xB2, 0xB2, 0x2F, 0xA3,
+ 0x98, 0x66, 0x98, 0x98, 0x66, 0x66, 0x66, 0x66,
+ 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0xA3, 0x2F, 0x66, 0x98, 0x8F, 0x98,
+ 0xA3, 0x2F, 0x2F, 0xA3, 0x98, 0x98, 0x98, 0x98,
+ 0x66, 0x98, 0x66, 0x98, 0x66, 0xA3, 0x2F, 0xB2,
+ 0x51, 0x51, 0x51, 0xB2, 0xB2, 0x8F, 0x20, 0x20,
+ 0x20, 0x54, 0x6D, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x54, 0x6D, 0x6D, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x4C, 0xA3, 0x2F, 0x66, 0x98,
+ 0x8F, 0x98, 0xA3, 0x2F, 0x2F, 0xA3, 0x98, 0x98,
+ 0x98, 0x98, 0x66, 0x98, 0x66, 0x98, 0x66, 0xA3,
+ 0x2F, 0xB2, 0x51, 0x51, 0x51, 0xB2, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x8F, 0x98,
+ 0x2F, 0x2F, 0x2F, 0x66, 0x8F, 0x8F, 0x98, 0xA3,
+ 0x66, 0x66, 0x8F, 0x98, 0x98, 0x66, 0x2F, 0xB2,
+ 0x51, 0xB2, 0x2F, 0xA3, 0xA3, 0xA0, 0x20, 0x20,
+ 0xDA, 0x2E, 0x3A, 0xA7, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0xCE, 0x2A, 0x2A, 0x2E, 0xA7, 0xDA, 0x20,
+ 0x20, 0x20, 0x20, 0x9C, 0xA3, 0x66, 0x98, 0x98,
+ 0x8F, 0x98, 0x2F, 0x2F, 0x2F, 0x66, 0x8F, 0x8F,
+ 0x98, 0xA3, 0x66, 0x66, 0x8F, 0x98, 0x98, 0x66,
+ 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x2F, 0xA3, 0xA3,
+ 0xB2, 0xA3, 0x66, 0x98, 0x8F, 0x8F, 0x66, 0xA3,
+ 0x2F, 0x2F, 0x66, 0x98, 0x98, 0x66, 0x2F, 0x2F,
+ 0xA3, 0x98, 0x8F, 0x98, 0x66, 0x2F, 0xB2, 0xB2,
+ 0xB2, 0xA3, 0x66, 0x66, 0x66, 0x98, 0x20, 0x3A,
+ 0x98, 0x89, 0x8F, 0x6D, 0x20, 0x20, 0x20, 0x20,
+ 0x4C, 0x66, 0x51, 0x44, 0x51, 0x2E, 0x54, 0x20,
+ 0x20, 0x20, 0x20, 0xA7, 0x66, 0x98, 0x8F, 0x8F,
+ 0x66, 0xA3, 0x2F, 0x2F, 0x66, 0x98, 0x98, 0x66,
+ 0x2F, 0x2F, 0xA3, 0x98, 0x8F, 0x98, 0x66, 0x2F,
+ 0xB2, 0xB2, 0xB2, 0xA3, 0x66, 0x66, 0x66, 0xA3,
+ 0x2F, 0x66, 0x98, 0x8F, 0x8F, 0x98, 0x66, 0x2F,
+ 0x2F, 0xA3, 0x66, 0x98, 0x98, 0xA3, 0x2F, 0xB2,
+ 0xA3, 0x8F, 0x98, 0xA3, 0xB2, 0x51, 0x89, 0x89,
+ 0xB2, 0xA3, 0x66, 0x98, 0x66, 0x98, 0x20, 0xA6,
+ 0x44, 0x39, 0xE6, 0x98, 0x20, 0x20, 0x20, 0x9C,
+ 0x74, 0xD6, 0x7E, 0xD6, 0x39, 0x8F, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x2E, 0x98, 0x8F, 0x8F, 0x98,
+ 0x66, 0x2F, 0x2F, 0xA3, 0x66, 0x98, 0x98, 0xA3,
+ 0x2F, 0xB2, 0x66, 0x98, 0x8F, 0xA3, 0xB2, 0x51,
+ 0x89, 0x89, 0xB2, 0xA3, 0x66, 0x98, 0x66, 0x66,
+ 0x2F, 0x66, 0x8F, 0xA0, 0x8F, 0x98, 0xA3, 0xB2,
+ 0x2F, 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0x66, 0x98, 0xA3, 0xB2, 0x89, 0x44, 0x89, 0x51,
+ 0x2F, 0x66, 0x98, 0x98, 0xA3, 0x66, 0x20, 0x2F,
+ 0x2F, 0xAD, 0x89, 0xD6, 0x3A, 0x20, 0x20, 0x55,
+ 0x6B, 0x51, 0x6D, 0x4C, 0xD8, 0xD6, 0x2E, 0x20,
+ 0x20, 0x20, 0x20, 0x54, 0x8F, 0xA0, 0x8F, 0x98,
+ 0xA3, 0xB2, 0x2F, 0x66, 0x66, 0x66, 0xA3, 0x2F,
+ 0xB2, 0x2F, 0x66, 0x66, 0xA3, 0xB2, 0x89, 0x44,
+ 0x89, 0x51, 0x2F, 0x66, 0x98, 0x98, 0xA3, 0xA3,
+ 0xA3, 0x66, 0x8F, 0xA0, 0x8F, 0x66, 0x2F, 0xB2,
+ 0xA3, 0x66, 0x98, 0x66, 0xA3, 0x2F, 0x2F, 0xA3,
+ 0xA3, 0x2F, 0xB2, 0x89, 0xD8, 0xD8, 0x51, 0x66,
+ 0x8F, 0xA0, 0xA0, 0x8F, 0x98, 0xA3, 0x20, 0x44,
+ 0xA7, 0xCE, 0xA6, 0x4D, 0xCE, 0x6D, 0xA7, 0xA0,
+ 0x6B, 0xA7, 0x20, 0x92, 0xAD, 0x6B, 0x4C, 0x20,
+ 0x20, 0x20, 0x20, 0x54, 0x98, 0xA0, 0x8F, 0x66,
+ 0x2F, 0xB2, 0xA3, 0x66, 0x98, 0x66, 0xA3, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0xB2, 0x89, 0xD8, 0xD8,
+ 0x51, 0x66, 0x8F, 0xA0, 0xA0, 0x8F, 0x98, 0x66,
+ 0x66, 0x66, 0x8F, 0x55, 0x8F, 0xA3, 0xB2, 0xB2,
+ 0xA3, 0x66, 0x66, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xB2, 0x89, 0x44, 0x44, 0x51, 0x66, 0xA0,
+ 0x55, 0xA5, 0x55, 0x8F, 0x66, 0xA3, 0x20, 0x44,
+ 0x6D, 0x54, 0xA7, 0x74, 0x2E, 0x4B, 0xBF, 0x9C,
+ 0x7E, 0xDA, 0x20, 0x54, 0x2E, 0x6B, 0x2A, 0x20,
+ 0x20, 0x20, 0x20, 0x3A, 0x8F, 0x55, 0x8F, 0xA3,
+ 0xB2, 0xB2, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0x2F,
+ 0xA3, 0xA3, 0xA3, 0xB2, 0x89, 0x44, 0x44, 0x51,
+ 0x66, 0xA0, 0xA5, 0xA5, 0x55, 0x8F, 0x66, 0x66,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0x8F, 0xA3, 0x2F, 0xB2,
+ 0x66, 0x98, 0xA3, 0x2F, 0x2F, 0xB2, 0x2F, 0x2F,
+ 0xB2, 0x51, 0x89, 0x89, 0xB2, 0x98, 0xA0, 0x2A,
+ 0xA5, 0x55, 0x98, 0x66, 0xA3, 0xB2, 0x20, 0x2F,
+ 0x4C, 0x20, 0x4B, 0xBB, 0xCF, 0x6F, 0x27, 0x36,
+ 0x93, 0xCE, 0x20, 0x20, 0xA6, 0x3D, 0x4C, 0x20,
+ 0x20, 0x20, 0x20, 0xDA, 0xA0, 0xA0, 0x8F, 0xA3,
+ 0x2F, 0xB2, 0x66, 0x98, 0xA3, 0x2F, 0xB2, 0x2F,
+ 0x2F, 0x2F, 0xB2, 0x51, 0x89, 0x89, 0xB2, 0x98,
+ 0xA0, 0x2A, 0xA5, 0xA0, 0x8F, 0x66, 0xA3, 0xA3,
+ 0xA0, 0x8F, 0x8F, 0xA0, 0x8F, 0xA3, 0xB2, 0x2F,
+ 0x66, 0x98, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F,
+ 0xB2, 0x89, 0x44, 0x51, 0x66, 0x55, 0xAD, 0x2A,
+ 0x55, 0x8F, 0x66, 0xA3, 0x2F, 0xB2, 0x20, 0x2A,
+ 0xE6, 0x95, 0xE5, 0x5A, 0x52, 0x52, 0x3F, 0x27,
+ 0x22, 0xC7, 0x9D, 0x60, 0xA2, 0xA2, 0x3A, 0x20,
+ 0x20, 0x20, 0x20, 0x54, 0x66, 0xA0, 0x8F, 0xA3,
+ 0xB2, 0x2F, 0x66, 0x98, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0xB2, 0x89, 0x44, 0x51, 0x66, 0x55,
+ 0x2A, 0x2A, 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0x2F,
+ 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x2F, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0x51, 0x2F, 0x2F,
+ 0x51, 0x89, 0x89, 0x2F, 0x8F, 0x2A, 0x2A, 0xA5,
+ 0x8F, 0x66, 0xA3, 0xB2, 0x2F, 0x51, 0x20, 0x6D,
+ 0x77, 0xF7, 0xEE, 0x30, 0xB0, 0x72, 0x72, 0x5B,
+ 0x82, 0xEA, 0x72, 0xB0, 0x90, 0x96, 0x71, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x2F, 0x98, 0x98, 0x2F,
+ 0xB2, 0xB2, 0x66, 0xA3, 0x2F, 0x51, 0x51, 0xB2,
+ 0xB2, 0x2F, 0x51, 0x89, 0x89, 0x2F, 0x8F, 0x2A,
+ 0xAD, 0xA5, 0x98, 0x66, 0xA3, 0xB2, 0x2F, 0xB2,
+ 0xD8, 0xB2, 0xA3, 0x98, 0x98, 0x2F, 0xB2, 0xB2,
+ 0x66, 0xA3, 0xB2, 0x51, 0x51, 0xB2, 0x2F, 0xA3,
+ 0x51, 0x89, 0x89, 0xA3, 0xA0, 0x2A, 0xA5, 0x8F,
+ 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0x51, 0x20, 0x69,
+ 0x64, 0xF9, 0x3F, 0x52, 0x52, 0x72, 0x29, 0x82,
+ 0x47, 0x47, 0x47, 0x8B, 0x72, 0xB7, 0x60, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x2F, 0x98, 0x98, 0x2F,
+ 0xB2, 0xB2, 0xA3, 0xA3, 0xB2, 0x89, 0x51, 0x2F,
+ 0x2F, 0xA3, 0x51, 0x89, 0x89, 0xA3, 0xA0, 0x2A,
+ 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xDD, 0xA3, 0x66, 0x98, 0x66, 0x2F, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0xB2, 0x51, 0xB2, 0x2F, 0xA3, 0x2F,
+ 0xB2, 0x89, 0xB2, 0x66, 0xA0, 0xA5, 0x8F, 0x98,
+ 0x66, 0x66, 0xB2, 0x51, 0x51, 0x51, 0x81, 0xFA,
+ 0x62, 0xEE, 0x30, 0x52, 0x22, 0x72, 0x82, 0x82,
+ 0x47, 0x47, 0xEA, 0x3F, 0x37, 0x6F, 0x26, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x2A, 0x98, 0x66, 0x2F,
+ 0x51, 0xB2, 0xA3, 0x66, 0xB2, 0x51, 0x51, 0xB2,
+ 0xA3, 0x2F, 0xB2, 0x89, 0xB2, 0x66, 0x55, 0x55,
+ 0x8F, 0x98, 0x66, 0xA3, 0xB2, 0x51, 0x51, 0xB2,
+ 0x74, 0xA0, 0x8F, 0x98, 0x66, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0x2F, 0xA3, 0x2F,
+ 0xB2, 0x51, 0xA3, 0x98, 0xA0, 0x55, 0xA0, 0xA0,
+ 0x8F, 0x66, 0x2F, 0x51, 0xB2, 0x51, 0x54, 0xA9,
+ 0x62, 0xEF, 0x52, 0x22, 0x72, 0x29, 0xEA, 0xEA,
+ 0x29, 0x22, 0x37, 0x37, 0x8E, 0xCF, 0x49, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x6D, 0x2F, 0x66, 0x2F,
+ 0x51, 0xB2, 0xA3, 0x66, 0x2F, 0xB2, 0xB2, 0x2F,
+ 0xA3, 0x2F, 0xB2, 0x51, 0x2F, 0x98, 0xA0, 0x55,
+ 0xA0, 0xA0, 0x8F, 0x66, 0x2F, 0x51, 0xB2, 0xA3,
+ 0xA3, 0x2A, 0xA5, 0x98, 0xA3, 0x2F, 0xB2, 0x2F,
+ 0x66, 0x66, 0x2F, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F,
+ 0xB2, 0x2F, 0xA3, 0x8F, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0x8F, 0xA3, 0x51, 0x51, 0x2F, 0xB2, 0x54, 0xA8,
+ 0x65, 0x5C, 0x52, 0x22, 0x29, 0x29, 0x29, 0xB0,
+ 0x62, 0x56, 0xF9, 0x79, 0xF9, 0xBB, 0x4B, 0x20,
+ 0x6D, 0xA5, 0x2E, 0x20, 0x20, 0xA3, 0xA3, 0x2F,
+ 0xB2, 0x2F, 0xA3, 0x66, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0x2F, 0x2F, 0xB2, 0x2F, 0x66, 0x8F, 0xA0, 0xA0,
+ 0x55, 0xA0, 0x8F, 0xA3, 0x51, 0x51, 0x2F, 0xA3,
+ 0xA0, 0x2A, 0x55, 0x66, 0xA3, 0x2F, 0xB2, 0xB2,
+ 0xA3, 0x66, 0xA3, 0xB2, 0xB2, 0xB2, 0xA3, 0x66,
+ 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x8F, 0xA0, 0x98,
+ 0xA3, 0x51, 0x89, 0x89, 0xA3, 0x2F, 0x20, 0x54,
+ 0xDF, 0xFA, 0x40, 0x37, 0xD4, 0x43, 0x56, 0x64,
+ 0x76, 0xF9, 0x78, 0x41, 0x5E, 0x5E, 0x4C, 0x20,
+ 0x20, 0xAD, 0x8F, 0x9C, 0x20, 0xA5, 0xA3, 0x2F,
+ 0x2F, 0x2F, 0xA3, 0x66, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0x66, 0xA3, 0x2F, 0x66, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0xA3, 0x51, 0x89, 0x51, 0xA3, 0x66,
+ 0xA0, 0xA0, 0x8F, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x2F, 0xA3, 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x66,
+ 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x66, 0x66, 0xA3,
+ 0xB2, 0x89, 0xD8, 0x51, 0x66, 0x51, 0x20, 0x6D,
+ 0x51, 0x77, 0x9F, 0xF7, 0xEE, 0x8E, 0xF9, 0xF0,
+ 0x24, 0xF7, 0x77, 0x5E, 0x74, 0xD8, 0x98, 0x20,
+ 0x20, 0x2E, 0x55, 0x92, 0x20, 0x54, 0x51, 0x2F,
+ 0x2F, 0xB2, 0xB2, 0xA3, 0x2F, 0x51, 0x51, 0xB2,
+ 0xA3, 0xA3, 0x66, 0xA3, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0xA3, 0xB2, 0x89, 0xD8, 0x51, 0xA3, 0x98,
+ 0x98, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0xB2, 0x2F, 0x2F, 0xB2, 0xB2, 0x2F, 0x2F, 0x66,
+ 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x89, 0xD8, 0x89, 0xB2, 0x66, 0x66, 0x20, 0x6D,
+ 0x89, 0xC2, 0xA4, 0x96, 0xC6, 0x64, 0x50, 0x40,
+ 0xF4, 0x97, 0x89, 0x74, 0x7E, 0x6B, 0x39, 0xA7,
+ 0x20, 0x20, 0x3A, 0x54, 0x20, 0x20, 0xA7, 0x51,
+ 0x2F, 0xB2, 0xB2, 0xA3, 0xA3, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F,
+ 0x2F, 0xB2, 0x89, 0xD8, 0x44, 0x2F, 0x66, 0x66,
+ 0x2F, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0x51, 0x51,
+ 0x89, 0x89, 0xB2, 0x66, 0x2F, 0x6D, 0x20, 0xCE,
+ 0x39, 0x74, 0x89, 0x5E, 0xBD, 0x87, 0xC8, 0xD1,
+ 0x89, 0x44, 0x3C, 0x4D, 0x6B, 0x6B, 0x6B, 0x2F,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA3,
+ 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0x66, 0x66, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0x51, 0x51, 0x89, 0x89, 0xB2, 0xA3, 0x98, 0x66,
+ 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0xA3, 0x2F, 0xA3,
+ 0x66, 0x66, 0x2F, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0x66, 0x66, 0x2A, 0x20, 0x54, 0x44,
+ 0x6B, 0x39, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0xD8, 0x39, 0x4D, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D,
+ 0x9C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D,
+ 0x51, 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0x2F,
+ 0xA3, 0xA3, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0xB2, 0xB2, 0x2F, 0x66, 0x98, 0x98, 0x66,
+ 0x98, 0x98, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0x66,
+ 0x98, 0x66, 0x66, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x66, 0x98, 0x98, 0x98, 0x3A, 0x54, 0x2A, 0x6B,
+ 0x6B, 0x6B, 0x83, 0x44, 0x89, 0x89, 0x44, 0x3C,
+ 0xD6, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0xB2, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0xAD, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0x66, 0x66, 0x98, 0x66, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0x66, 0x98, 0x8F, 0x8F, 0x8F, 0x98,
+ 0x8F, 0x98, 0x98, 0x66, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x8F, 0x8F, 0x8F, 0x98, 0x98, 0x98, 0x8F, 0xA0,
+ 0xA0, 0xA0, 0xA3, 0xDA, 0x20, 0x3A, 0x39, 0x6B,
+ 0x6B, 0x6B, 0x4D, 0xA2, 0x74, 0x3C, 0x7E, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x2F, 0x2F, 0xA3, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x98, 0x8F, 0x8F, 0x98, 0x98, 0x98, 0x98,
+ 0x8F, 0xA0, 0xA0, 0xA0, 0x8F, 0x8F, 0x8F, 0xA0,
+ 0x8F, 0x66, 0x66, 0xA3, 0x66, 0xA3, 0xA3, 0x2F,
+ 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x98,
+ 0x98, 0xA0, 0x98, 0x66, 0x66, 0x98, 0x8F, 0xA0,
+ 0xA0, 0xA3, 0x2E, 0x20, 0x20, 0x8F, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x55, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x3A, 0x51, 0x2F, 0xA3, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x98, 0x8F, 0x8F, 0x98, 0x66, 0x98,
+ 0x8F, 0xA0, 0xA0, 0x8F, 0x8F, 0x8F, 0x8F, 0xA0,
+ 0x66, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3,
+ 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0xA3, 0x66, 0x66,
+ 0x66, 0x98, 0xA3, 0x2F, 0x2F, 0xA3, 0x66, 0x8F,
+ 0x66, 0xA6, 0x20, 0x20, 0x6D, 0x39, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0xB2, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x2E, 0x89, 0xA3, 0xA3, 0x66, 0x66,
+ 0x66, 0x66, 0x98, 0x98, 0xA3, 0x2F, 0x2F, 0xA3,
+ 0x66, 0x8F, 0x98, 0x98, 0x66, 0x98, 0x98, 0x8F,
+ 0x2F, 0x51, 0xB2, 0xB2, 0x2F, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0x66, 0x2F,
+ 0x55, 0x20, 0x20, 0x20, 0x4C, 0x39, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x4D, 0x7E, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x2E, 0x51, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0xA3,
+ 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0x66,
+ 0xB2, 0x51, 0x51, 0xB2, 0xB2, 0xA3, 0x2F, 0xA3,
+ 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0x66,
+ 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0x98, 0x98, 0xA0,
+ 0x20, 0x20, 0x20, 0x20, 0xA5, 0x83, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x4D, 0x7E, 0x4D, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x4D, 0x4D, 0xD6, 0x7E, 0xDD,
+ 0x3C, 0x39, 0xA7, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x92, 0xB2, 0xA3, 0xA3,
+ 0xA3, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3, 0x98,
+ 0x98, 0x66, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0xA3,
+ 0x89, 0x89, 0x51, 0xB2, 0xB2, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x2F, 0xDA,
+ 0x20, 0x20, 0x20, 0xDA, 0xA0, 0x51, 0x3C, 0x7E,
+ 0x6B, 0x6B, 0x6B, 0x4D, 0x7E, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x7E, 0x3C, 0xD8, 0x44, 0xD8,
+ 0x44, 0x83, 0x89, 0xDA, 0x20, 0x3A, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0xB2, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0x8F, 0x8F,
+ 0x98, 0x98, 0x98, 0x98, 0x66, 0xA3, 0xA3, 0x2F,
+ 0x3C, 0x89, 0x89, 0x51, 0xB2, 0xB2, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0x66, 0x98, 0x98, 0xA3, 0x20,
+ 0x20, 0x20, 0x20, 0x6D, 0x2F, 0xE6, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0xD6, 0x3D,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D, 0x7E, 0xA2,
+ 0x74, 0x44, 0xA2, 0xA3, 0x20, 0x3A, 0x2E, 0x6D,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0xA6, 0xA3, 0x66,
+ 0x66, 0x66, 0xA3, 0x2F, 0xA3, 0x66, 0x66, 0x98,
+ 0x66, 0x66, 0x98, 0x98, 0x98, 0x66, 0xA3, 0xA3,
+ 0x83, 0xB2, 0x2F, 0x2F, 0xB2, 0xB2, 0xB2, 0x2F,
+ 0x2F, 0x2F, 0xA3, 0x66, 0x66, 0x98, 0x98, 0x66,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0xA6, 0x20,
+ 0x3A, 0x3A, 0x54, 0x55, 0x7E, 0x6B, 0x6B, 0x6B,
+ 0x4D, 0x3D, 0x6B, 0x6B, 0x6B, 0x57, 0x33, 0xEB,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x4D, 0xA2, 0x74, 0x39, 0x92, 0x20, 0x20, 0x6D,
+ 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x98,
+ 0x98, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0xA3, 0x66, 0xA3,
+ 0x89, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0x2F,
+ 0xA3, 0x2F, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xB2, 0x3A, 0x20,
+ 0xA7, 0x20, 0x3A, 0x39, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0xB5, 0xCB, 0x6B, 0x6B, 0x3D, 0x8A, 0x42, 0x3D,
+ 0x6B, 0x6B, 0x6B, 0x84, 0x6C, 0x4D, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x7E, 0x83, 0x51, 0x20, 0x20, 0x20,
+ 0x6D, 0x3A, 0x20, 0x20, 0x20, 0x20, 0xAD, 0x66,
+ 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0xA3,
+ 0xB2, 0x98, 0x66, 0x66, 0x98, 0x66, 0x66, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x20, 0x6D,
+ 0x3A, 0x20, 0x98, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0xAA, 0x33, 0x6B, 0x6B, 0x3D, 0xF5, 0x7B, 0x3D,
+ 0x6B, 0x6B, 0x4F, 0x4A, 0x58, 0x3D, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x7E, 0x7E, 0x9C, 0x54, 0xA7,
+ 0x2E, 0xA7, 0x20, 0x20, 0x20, 0x20, 0x54, 0x51,
+ 0x2F, 0x2F, 0xA3, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x2F,
+ 0xB2, 0x66, 0x66, 0x66, 0x66, 0xA3, 0x66, 0xA3,
+ 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0xB2, 0x2F, 0xB2,
+ 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0xA6, 0x20, 0xCE,
+ 0x20, 0x6D, 0x4D, 0x6B, 0xD6, 0x7E, 0x6B, 0x6B,
+ 0x6E, 0x9A, 0x57, 0x6B, 0x2D, 0x7B, 0x7B, 0x3D,
+ 0x6B, 0x84, 0xF5, 0x7B, 0x84, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x98, 0x3A, 0x9C,
+ 0xCE, 0x3A, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x98,
+ 0xB2, 0xB2, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0x89, 0xA3, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0xA3,
+ 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0x2F, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0x2F, 0x2F, 0x89, 0x54, 0x6D, 0x3A,
+ 0x20, 0x98, 0x6B, 0x6B, 0xE0, 0xB4, 0x6B, 0x6B,
+ 0x2D, 0x9E, 0x4A, 0x3D, 0x84, 0xF5, 0xF5, 0x84,
+ 0x6B, 0x6E, 0x59, 0x6C, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x3D, 0x6B, 0x6B, 0x6B, 0x6B, 0xDD, 0xDA, 0x6D,
+ 0x54, 0x20, 0xCE, 0x20, 0x20, 0x20, 0x20, 0xA7,
+ 0x51, 0xB2, 0xB2, 0xB2, 0x2F, 0xB2, 0x2F, 0x2F,
+ 0x2F, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3, 0x66,
+ 0x89, 0xA3, 0xA3, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F,
+ 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0xA3, 0xA3, 0x2F,
+ 0xB2, 0x2F, 0x2F, 0xA3, 0x98, 0x20, 0xA7, 0x20,
+ 0x3A, 0x7E, 0x6B, 0x6B, 0x7F, 0xDE, 0xF6, 0x3D,
+ 0x6B, 0xDB, 0x8A, 0xDB, 0xE9, 0xF3, 0xF3, 0xDB,
+ 0x68, 0xF3, 0x73, 0x7F, 0x6B, 0x6B, 0x57, 0x58,
+ 0xDC, 0x2D, 0x6B, 0x6B, 0x6B, 0x6B, 0x3A, 0x20,
+ 0x20, 0x20, 0x6D, 0x54, 0x20, 0x20, 0x20, 0x20,
+ 0x51, 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0x66,
+ 0xA3, 0x66, 0x98, 0x98, 0x66, 0x98, 0x98, 0x66,
+ 0x2F, 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0x2F, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0xA3,
+ 0x66, 0x98, 0x8F, 0x98, 0xCE, 0xDA, 0x2E, 0x20,
+ 0x2A, 0x6B, 0x6B, 0x6B, 0x6B, 0x2C, 0x34, 0xCB,
+ 0xEB, 0x6C, 0x31, 0x59, 0x82, 0x82, 0x8B, 0x82,
+ 0xF3, 0x73, 0xE9, 0x6B, 0x3D, 0x6E, 0xF3, 0x4A,
+ 0x4F, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x92, 0x20,
+ 0x20, 0x20, 0x6D, 0x6D, 0x20, 0x20, 0x20, 0x20,
+ 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x8F, 0x8F, 0x98,
+ 0x98, 0x98, 0x98, 0x66, 0x98, 0x66, 0x66, 0xA3,
+ 0xA3, 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0xA3,
+ 0xA3, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0x66,
+ 0x8F, 0x55, 0xA5, 0x98, 0x20, 0x2E, 0x54, 0x54,
+ 0x89, 0x6B, 0x6B, 0x6B, 0x6B, 0x84, 0xE3, 0x4A,
+ 0x58, 0x42, 0x5B, 0x8B, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x59, 0x58, 0x57, 0x57, 0x59, 0x7B, 0x84,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0xAD, 0x20,
+ 0x20, 0x20, 0x3A, 0x3A, 0x20, 0x20, 0x20, 0x20,
+ 0x2A, 0x66, 0x8F, 0x55, 0xA5, 0xA5, 0xA0, 0x8F,
+ 0x66, 0xA3, 0xA3, 0x66, 0x98, 0x66, 0x66, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0xA3, 0x2F, 0xA3, 0xA3, 0x66, 0xA3, 0xA3, 0x66,
+ 0x8F, 0xA5, 0x8F, 0x2E, 0x20, 0x2E, 0x20, 0x3A,
+ 0x4D, 0x6B, 0xE6, 0x84, 0x3D, 0x6B, 0xEB, 0x4A,
+ 0xC9, 0x8B, 0x8B, 0x31, 0x59, 0x82, 0x59, 0x59,
+ 0x5B, 0x82, 0x59, 0x73, 0x7B, 0xDC, 0x57, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x55, 0x20,
+ 0x20, 0x20, 0x6D, 0xDA, 0x20, 0x20, 0x20, 0x20,
+ 0x9C, 0x66, 0x8F, 0xA5, 0xA5, 0x55, 0x8F, 0x66,
+ 0x2F, 0xB2, 0x2F, 0x66, 0x98, 0x98, 0x2F, 0x51,
+ 0x89, 0xB2, 0x2F, 0xA3, 0xA3, 0xB2, 0xB2, 0xB2,
+ 0x2F, 0x2F, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0x66,
+ 0x8F, 0xA5, 0x8F, 0x20, 0x20, 0xA7, 0x20, 0xA6,
+ 0x6B, 0x6B, 0xE4, 0x48, 0x2C, 0xDB, 0x4F, 0x9E,
+ 0xD0, 0xD0, 0x8B, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x59, 0x82, 0x82, 0x73, 0x7B, 0x68, 0x6B, 0x3D,
+ 0x68, 0x68, 0x84, 0x3D, 0x6B, 0x6B, 0xA0, 0x20,
+ 0x20, 0x20, 0x6D, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x6D, 0x2F, 0xA0, 0xA5, 0x55, 0x98, 0x66, 0xA3,
+ 0xB2, 0x89, 0xB2, 0x98, 0x8F, 0x98, 0x2F, 0x51,
+ 0x74, 0xB2, 0xA3, 0xA3, 0x2F, 0x2F, 0xB2, 0x2F,
+ 0xA3, 0xA3, 0xA3, 0x66, 0x66, 0xA3, 0x2F, 0xA3,
+ 0x98, 0xA3, 0x6D, 0x20, 0x20, 0xCE, 0x20, 0x2A,
+ 0x6B, 0x6B, 0xEB, 0x2C, 0xE1, 0xF1, 0x7C, 0xD0,
+ 0x8B, 0x8B, 0x82, 0x82, 0x82, 0x82, 0x82, 0x59,
+ 0x82, 0x82, 0x42, 0x82, 0x31, 0x57, 0x4F, 0x7B,
+ 0x7B, 0xF5, 0xF6, 0xDB, 0x6B, 0x6B, 0x98, 0x20,
+ 0x20, 0x20, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x51, 0x66, 0xA0, 0xA0, 0x66, 0x2F, 0xB2,
+ 0xB2, 0x51, 0x2F, 0xA0, 0x55, 0xA3, 0x51, 0x89,
+ 0x44, 0xA3, 0x98, 0x98, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0xA3, 0x66, 0x98, 0x98, 0x98, 0xA3, 0x2F, 0x2F,
+ 0x98, 0x8F, 0x20, 0x20, 0x3A, 0xA6, 0x20, 0xA0,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x7F, 0x7F, 0xC3, 0xC9,
+ 0xD0, 0xD0, 0x29, 0x59, 0x82, 0x73, 0x82, 0x73,
+ 0x59, 0x59, 0x59, 0x59, 0x59, 0x58, 0xAF, 0xF5,
+ 0x8A, 0x68, 0xEB, 0x6B, 0x6B, 0x6B, 0x98, 0x20,
+ 0x20, 0x20, 0x6D, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x51, 0x98, 0x55, 0xA0, 0xA3, 0xB2, 0x51,
+ 0x51, 0x2F, 0x98, 0x55, 0x8F, 0xB2, 0x89, 0x44,
+ 0xA3, 0x55, 0x55, 0x98, 0xA3, 0xB2, 0x2F, 0xA3,
+ 0x66, 0x66, 0x98, 0x8F, 0x66, 0xA3, 0x66, 0x98,
+ 0x55, 0x4C, 0x20, 0x20, 0xDA, 0xAD, 0x20, 0x98,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0x9A, 0xD0,
+ 0xF2, 0x8B, 0x8B, 0x8B, 0x73, 0x82, 0x5B, 0x82,
+ 0x82, 0x59, 0x59, 0x73, 0x73, 0x58, 0x3D, 0x3D,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x66, 0x20,
+ 0x20, 0x3A, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x2F, 0x55, 0xA5, 0x8F, 0xA3, 0x51, 0x51,
+ 0xB2, 0xA3, 0x66, 0x66, 0xA3, 0xB2, 0x89, 0x51,
+ 0x98, 0xA5, 0x55, 0x8F, 0x2F, 0xB2, 0xB2, 0xA3,
+ 0x66, 0x66, 0x98, 0x98, 0x98, 0x66, 0x66, 0x8F,
+ 0x8F, 0x92, 0x20, 0x20, 0x20, 0x6D, 0x6D, 0xA3,
+ 0x6B, 0x6B, 0xEB, 0x7F, 0x4F, 0xDB, 0xD2, 0xC9,
+ 0xC9, 0xD0, 0x8B, 0x8B, 0x73, 0x82, 0x59, 0x8B,
+ 0x59, 0x82, 0x59, 0x59, 0x73, 0xF5, 0xEB, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x55, 0x20,
+ 0x20, 0xA7, 0x54, 0xDA, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x98, 0xA0, 0x8F, 0xA3, 0xB2, 0x51, 0x51,
+ 0x51, 0x2F, 0xA3, 0xA3, 0xB2, 0xB2, 0x51, 0xB2,
+ 0xA0, 0xA5, 0x55, 0x66, 0x2F, 0x51, 0x2F, 0xA3,
+ 0x66, 0x66, 0x66, 0x98, 0x66, 0x66, 0x98, 0x98,
+ 0x98, 0x2A, 0x54, 0x95, 0x95, 0x71, 0x2E, 0x98,
+ 0x6B, 0x6B, 0x4D, 0x28, 0xDE, 0x88, 0xB7, 0x70,
+ 0xC9, 0xC9, 0xD0, 0xF2, 0x8B, 0x8B, 0x8B, 0x59,
+ 0x59, 0x59, 0x59, 0x5B, 0x59, 0xF3, 0x57, 0xE9,
+ 0xDB, 0x84, 0x6B, 0x6B, 0x6B, 0x6B, 0x4C, 0xDA,
+ 0x2E, 0xDA, 0x20, 0xDA, 0x2E, 0x2E, 0x6D, 0x20,
+ 0x4C, 0x98, 0x66, 0xA3, 0x2F, 0xB2, 0x51, 0x51,
+ 0xB2, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0xA0, 0xA0, 0x8F, 0x2F, 0xB2, 0x89, 0xB2, 0xA3,
+ 0x66, 0x66, 0x98, 0x66, 0x66, 0x66, 0x66, 0xA3,
+ 0x2F, 0xD1, 0xE2, 0x52, 0x52, 0xF4, 0xBF, 0x9C,
+ 0x39, 0x6B, 0x6B, 0x6B, 0x7F, 0x4F, 0xE3, 0x6A,
+ 0xD0, 0xC9, 0xC9, 0xD0, 0xD0, 0x8B, 0x8B, 0x82,
+ 0x5B, 0x5B, 0x73, 0x8B, 0x59, 0x23, 0x6E, 0x31,
+ 0x59, 0x7B, 0xDB, 0x84, 0x68, 0x7F, 0xAE, 0x54,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0xA6, 0x3A,
+ 0xA0, 0xA3, 0xA3, 0x2F, 0x51, 0x51, 0x51, 0xB2,
+ 0x2F, 0xA3, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0x8F, 0x8F, 0x66, 0x2F, 0x51, 0x51, 0xB2, 0xA3,
+ 0x66, 0x98, 0x98, 0x66, 0x66, 0xA3, 0x2F, 0x2F,
+ 0x3C, 0x88, 0x8D, 0x52, 0x52, 0x5D, 0xF7, 0xBF,
+ 0xCE, 0xA2, 0x6B, 0x6B, 0x6B, 0x6B, 0x7F, 0x85,
+ 0x70, 0xC9, 0xC9, 0xC9, 0xD0, 0xEA, 0x8B, 0x5B,
+ 0x82, 0xEA, 0x82, 0x82, 0x42, 0x57, 0x3D, 0x68,
+ 0x68, 0x57, 0x4A, 0x34, 0x22, 0xCC, 0x21, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0xDA, 0xA7, 0x6D,
+ 0xDF, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F,
+ 0xA3, 0x66, 0x66, 0x66, 0xA3, 0xA3, 0x2F, 0x2F,
+ 0x66, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0x2F, 0x66,
+ 0x8F, 0x8F, 0x8F, 0x98, 0xA3, 0xA3, 0x89, 0xD8,
+ 0x25, 0x5C, 0x3B, 0x5D, 0x52, 0x80, 0x70, 0x36,
+ 0x71, 0xA7, 0x44, 0x6B, 0x84, 0xCB, 0xAA, 0xF3,
+ 0xC9, 0xC9, 0xC9, 0xC9, 0xD0, 0x8B, 0x5B, 0x5B,
+ 0x5B, 0xEA, 0x82, 0x47, 0x7B, 0x68, 0x3D, 0x3D,
+ 0x6B, 0x3D, 0x6C, 0x2B, 0x80, 0x61, 0x96, 0x81,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0xDA, 0x63,
+ 0xAC, 0x6C, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3,
+ 0xA3, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x66, 0x98, 0x66, 0xA3, 0xB2, 0xB2, 0x2F, 0x66,
+ 0x8F, 0x8F, 0x2F, 0xD8, 0xE4, 0xCD, 0xAA, 0xB4,
+ 0x78, 0x2B, 0x3B, 0x70, 0x46, 0x5D, 0x5D, 0x52,
+ 0x9D, 0x81, 0x3A, 0xA3, 0xCD, 0x48, 0xBE, 0x4F,
+ 0xC3, 0xC9, 0xD0, 0xD0, 0xD0, 0xEA, 0x5B, 0x8B,
+ 0x5B, 0x82, 0x8B, 0x59, 0x4A, 0xF3, 0x33, 0x7F,
+ 0x3D, 0x6B, 0x4F, 0x6F, 0x5D, 0x52, 0x63, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x85,
+ 0x72, 0xDC, 0xD8, 0x2F, 0xA3, 0x2F, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0x98, 0x66, 0x2F, 0xB2, 0x51, 0xA3, 0x98,
+ 0xA0, 0xA3, 0x93, 0xCF, 0x79, 0x27, 0x5C, 0x79,
+ 0x2B, 0x30, 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x3F, 0x69, 0x20, 0x20, 0x2A, 0xD6, 0x3D, 0x6B,
+ 0x84, 0xE3, 0x34, 0xB7, 0xC9, 0xD0, 0xD0, 0xF2,
+ 0xD0, 0x8B, 0x31, 0x68, 0x68, 0x6E, 0x31, 0x33,
+ 0x7F, 0x7E, 0xA1, 0x6F, 0x52, 0x8D, 0xE5, 0xBF,
+ 0x20, 0x20, 0x20, 0x20, 0x81, 0xA8, 0x78, 0x52,
+ 0x52, 0xD2, 0xD8, 0xA3, 0xA3, 0x2F, 0x2F, 0xA3,
+ 0xA3, 0x66, 0x98, 0x98, 0x98, 0x98, 0x98, 0x66,
+ 0x51, 0x66, 0x2F, 0x51, 0x51, 0xB2, 0xA3, 0xA0,
+ 0xA0, 0x44, 0x78, 0xEF, 0x52, 0x30, 0x30, 0x30,
+ 0x3B, 0x70, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D,
+ 0x46, 0xC1, 0x71, 0x20, 0x81, 0xB1, 0xDD, 0x3D,
+ 0xA1, 0xE7, 0xDB, 0xCA, 0xD2, 0x6A, 0x6A, 0x6A,
+ 0xF3, 0xE9, 0xDB, 0x8A, 0x84, 0x3D, 0x84, 0xDC,
+ 0x25, 0x44, 0xB5, 0xEE, 0x30, 0xEF, 0xF0, 0x32,
+ 0x69, 0x5F, 0x4B, 0xA8, 0x99, 0x56, 0x67, 0x30,
+ 0x30, 0x34, 0xB2, 0x2F, 0xA3, 0xA3, 0x66, 0x66,
+ 0x98, 0x8F, 0x98, 0x98, 0x66, 0x66, 0x66, 0x66,
+ 0x51, 0x2F, 0xB2, 0x51, 0x51, 0x2F, 0x66, 0xA0,
+ 0x8F, 0xE0, 0xF9, 0x8D, 0x52, 0x5D, 0x46, 0x5D,
+ 0x80, 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x52, 0x52, 0x60, 0x81, 0x20, 0x20, 0x6D, 0xD1,
+ 0x48, 0xE7, 0x6B, 0x33, 0xF6, 0x7F, 0x7F, 0xDB,
+ 0x84, 0x6B, 0x6C, 0x6A, 0xF3, 0xEB, 0x6B, 0x3D,
+ 0x4F, 0xD8, 0xCD, 0x79, 0x30, 0x67, 0xF9, 0x24,
+ 0xED, 0xD9, 0x8C, 0xED, 0x37, 0x2B, 0x3B, 0x5D,
+ 0x80, 0x85, 0x4E, 0x98, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x51, 0x2F, 0xB2, 0xB2, 0xB2, 0xA3, 0x8F, 0x8F,
+ 0x98, 0xE0, 0xF0, 0x67, 0x5D, 0x80, 0x80, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x70, 0x27, 0x4B, 0x20, 0x81, 0x71, 0x3A,
+ 0xB5, 0xEB, 0x3D, 0xF1, 0xE1, 0x84, 0x84, 0xF1,
+ 0xE3, 0x3D, 0x6B, 0x6C, 0x34, 0xE7, 0x6B, 0x6B,
+ 0xD6, 0x74, 0x5E, 0x78, 0x67, 0x30, 0xEE, 0x5C,
+ 0xF9, 0xF9, 0x45, 0x5C, 0x2B, 0x3B, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0xF8, 0x44, 0x66, 0x66, 0x66, 0x66,
+ 0x2F, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0xA3, 0xA3, 0xA3, 0x98, 0x8F, 0x98,
+ 0x66, 0x83, 0x76, 0x67, 0x30, 0x80, 0x5D, 0x80,
+ 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x22, 0xFA, 0x20, 0x81, 0x20, 0x20,
+ 0xA5, 0x6B, 0x6B, 0xE8, 0xBE, 0x3D, 0x6B, 0x2C,
+ 0xE1, 0xEB, 0x6B, 0x3D, 0x3E, 0xA1, 0x6B, 0x6B,
+ 0x4D, 0x74, 0xE8, 0x62, 0x67, 0x30, 0x8D, 0x67,
+ 0xEE, 0xEE, 0xEE, 0x67, 0x30, 0x80, 0x5D, 0x5D,
+ 0x52, 0x5D, 0x85, 0xAC, 0x3E, 0xA3, 0x66, 0x66,
+ 0x2F, 0x51, 0x51, 0x51, 0x51, 0xB2, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0x66, 0x98, 0x8F, 0x8F, 0x66,
+ 0x2F, 0x83, 0xBC, 0xEE, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x22, 0xB0, 0xAE, 0x81, 0x20, 0x20,
+ 0x4C, 0x3D, 0xEB, 0x39, 0x57, 0x6B, 0x6B, 0x3E,
+ 0x97, 0x3D, 0x6B, 0x3D, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x3D, 0x3C, 0xBA, 0x62, 0xEE, 0x5D, 0x5D, 0x30,
+ 0x30, 0x8D, 0x8D, 0x30, 0x52, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x5D, 0x5D, 0x85, 0xB0, 0x6E, 0x2F, 0x66,
+ 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x2F, 0xA3, 0xA3,
+ 0xB2, 0xA3, 0x66, 0x98, 0x98, 0x8F, 0x98, 0xA3,
+ 0x2F, 0x51, 0xDE, 0x8E, 0x30, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x52, 0x80, 0x5D, 0x22, 0x43, 0x4B, 0x20, 0x6D,
+ 0x44, 0x6B, 0x6B, 0x3D, 0x6B, 0x6B, 0x6B, 0x4D,
+ 0x3D, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x3D, 0x6B,
+ 0x4D, 0x2A, 0xAE, 0x76, 0xEE, 0x30, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x5D, 0x80, 0x80, 0x5D, 0x7A, 0xB6, 0x51,
+ 0xB2, 0xB2, 0xB2, 0xA3, 0x66, 0x66, 0x66, 0xA3,
+ 0x2F, 0x66, 0x98, 0x8F, 0xA0, 0x98, 0xA3, 0x2F,
+ 0x2F, 0x51, 0xAB, 0x8E, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x80, 0x5D, 0x52, 0x52, 0x94, 0x2F, 0x7E,
+ 0x6B, 0x3D, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x7E,
+ 0xAD, 0x54, 0xAE, 0x24, 0x2B, 0x3B, 0x5D, 0x52,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x52, 0x52, 0x5D, 0x5D, 0x5D, 0xD2, 0x3E,
+ 0x89, 0x89, 0xB2, 0xA3, 0x66, 0x98, 0x66, 0x66,
+ 0x2F, 0x66, 0x8F, 0x8F, 0xA0, 0x98, 0xA3, 0xB2,
+ 0x2F, 0x51, 0xDE, 0x79, 0x5D, 0x80, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x80, 0x5D, 0x52, 0x6F, 0xA4, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D, 0xA2, 0xCE,
+ 0x20, 0x20, 0x95, 0x24, 0x67, 0x3B, 0x80, 0x80,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x30, 0xB0, 0x86,
+ 0x89, 0x51, 0x2F, 0x66, 0x98, 0x98, 0xA3, 0xA3,
+ 0xA3, 0x66, 0x8F, 0xA0, 0x8F, 0x66, 0x2F, 0xB2,
+ 0x2F, 0x4E, 0x76, 0x2B, 0x30, 0x5D, 0x5D, 0x5D,
+ 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x5D, 0x5D, 0x46, 0x52, 0x21, 0x74,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B,
+ 0x6B, 0x6B, 0x6B, 0x6B, 0x7E, 0x98, 0x3A, 0x20,
+ 0x20, 0x81, 0x60, 0xED, 0x2B, 0x52, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x80,
+ 0x22, 0x5D, 0x5D, 0x5D, 0x8D, 0x2B, 0x38, 0x39,
+ 0x51, 0x66, 0x8F, 0xA0, 0xA0, 0x8F, 0x98, 0x66,
+ 0x66, 0x66, 0x8F, 0x55, 0x8F, 0xA3, 0xB2, 0xB2,
+ 0xA3, 0xE8, 0xF9, 0x30, 0x3B, 0x80, 0x5D, 0x5D,
+ 0x5D, 0x80, 0x80, 0x5D, 0x5D, 0x5D, 0x80, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x52, 0x30, 0xD4, 0x99,
+ 0x51, 0x4D, 0x6B, 0x6B, 0x6B, 0x6B, 0x4D, 0x6B,
+ 0x6B, 0x6B, 0x7E, 0xA3, 0x2E, 0x20, 0x20, 0x20,
+ 0x20, 0x81, 0xC5, 0xED, 0x2B, 0x3B, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x80, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x52, 0x52, 0x6F, 0xDE, 0x2C, 0x39, 0x51,
+ 0x66, 0xA0, 0xA5, 0xA5, 0x55, 0x8F, 0x66, 0x66,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0x8F, 0xA3, 0x2F, 0x2F,
+ 0x51, 0xD5, 0x45, 0x8D, 0x3B, 0x5D, 0x80, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x5D, 0x5D, 0x52, 0x67, 0x37, 0xA9,
+ 0x3A, 0xCE, 0xA0, 0x2F, 0x51, 0x51, 0xB2, 0xA3,
+ 0xA5, 0x9C, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x54, 0x99, 0xED, 0x67, 0x30, 0x5D, 0x5D,
+ 0x5D, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x3B, 0x80,
+ 0x8D, 0x79, 0x48, 0x2C, 0x39, 0x44, 0xB2, 0x66,
+ 0xA0, 0x2A, 0xA5, 0xA0, 0x8F, 0x66, 0xA3, 0xA3,
+ 0xA0, 0x8F, 0x8F, 0xA0, 0x8F, 0xA3, 0xB2, 0xB2,
+ 0xD8, 0xBC, 0x45, 0xEE, 0x67, 0x8D, 0x30, 0x30,
+ 0x52, 0x52, 0x80, 0x5D, 0x5D, 0x5D, 0x5D, 0x80,
+ 0x5D, 0x5D, 0x5D, 0x80, 0x3B, 0x67, 0xF9, 0x32,
+ 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0xBF, 0xEC, 0xED, 0x2B, 0x30, 0x5D, 0x5D,
+ 0x80, 0x5D, 0x5D, 0x5D, 0x52, 0x30, 0x67, 0x2B,
+ 0xCF, 0xAA, 0xD8, 0x89, 0x89, 0x51, 0x66, 0x55,
+ 0x2A, 0x2A, 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0x2F,
+ 0xA3, 0xA3, 0x66, 0x98, 0x98, 0x2F, 0xB2, 0x2F,
+ 0xD1, 0x28, 0x56, 0xED, 0x62, 0x37, 0x5C, 0x79,
+ 0x8E, 0x2B, 0x2B, 0x30, 0x30, 0x30, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x80, 0x3B, 0xEE, 0x56, 0xA9,
+ 0x75, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x5F, 0x99, 0xD9, 0x45, 0x8D, 0x3B, 0x5D,
+ 0x5D, 0x3B, 0x5D, 0x8D, 0x2B, 0x79, 0x79, 0x41,
+ 0x83, 0xB2, 0xB2, 0x89, 0x89, 0x2F, 0xA0, 0x2A,
+ 0xAD, 0xA5, 0x98, 0x66, 0xA3, 0xB2, 0x2F, 0xB2,
+ 0xD8, 0xB2, 0xA3, 0x98, 0x98, 0x2F, 0x51, 0xB2,
+ 0xA3, 0x83, 0x3E, 0x25, 0xD5, 0xE5, 0x50, 0x8C,
+ 0xED, 0x24, 0x24, 0xF0, 0x45, 0x8E, 0x2B, 0x30,
+ 0x30, 0x5D, 0x3B, 0x30, 0xEE, 0xF0, 0xC6, 0x65,
+ 0x75, 0x71, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x32, 0x33, 0x34, 0x35,
- 0x36, 0x27, 0x27, 0x33, 0x25, 0x25, 0x24, 0x24,
- 0x24, 0x24, 0x23, 0x21, 0x20, 0x20, 0x2B, 0x2A,
- 0x28, 0x29, 0x29, 0x37, 0x2C, 0x2C, 0x29, 0x28,
- 0x2A, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B,
- 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2A, 0x2B, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x2F, 0x32, 0x36, 0x27,
- 0x27, 0x27, 0x27, 0x33, 0x33, 0x33, 0x33, 0x33,
- 0x33, 0x33, 0x33, 0x25, 0x25, 0x24, 0x23, 0x21,
- 0x20, 0x2B, 0x2A, 0x29, 0x29, 0x2C, 0x2C, 0x2C,
- 0x29, 0x28, 0x2A, 0x2B, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B,
- 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x20, 0x21, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x38, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x23, 0x23, 0x24, 0x24,
- 0x25, 0x25, 0x33, 0x33, 0x33, 0x33, 0x33, 0x25,
- 0x24, 0x22, 0x20, 0x20, 0x2A, 0x28, 0x29, 0x2C,
- 0x2C, 0x2C, 0x29, 0x28, 0x2A, 0x2B, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2B,
- 0x2B, 0x2B, 0x2B, 0x20, 0x21, 0x22, 0x23, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x2A, 0x2A, 0x2B, 0x2B,
- 0x20, 0x21, 0x22, 0x24, 0x20, 0x39, 0x39, 0x39,
- 0x39, 0x39, 0x3A, 0x3B, 0x22, 0x20, 0x2A, 0x28,
- 0x29, 0x2C, 0x2C, 0x2C, 0x29, 0x28, 0x2B, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B,
- 0x2B, 0x20, 0x21, 0x22, 0x22, 0x23, 0x24, 0x27,
- 0x27, 0x27, 0x3C, 0x36, 0x3C, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x3D, 0x3E, 0x32, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x3D, 0x39, 0x3F, 0x3F,
- 0x39, 0x2C, 0x20, 0x20, 0x39, 0x39, 0x39, 0x39,
- 0x39, 0x39, 0x39, 0x40, 0x40, 0x41, 0x22, 0x20,
- 0x2A, 0x28, 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x2A,
- 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x2B, 0x2B, 0x2B, 0x2B, 0x20, 0x20,
- 0x21, 0x22, 0x22, 0x22, 0x23, 0x23, 0x22, 0x27,
- 0x27, 0x3C, 0x3C, 0x3D, 0x42, 0x3C, 0x27, 0x27,
- 0x3C, 0x27, 0x3C, 0x43, 0x44, 0x36, 0x42, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x3D, 0x28, 0x29, 0x2C,
- 0x2C, 0x45, 0x20, 0x39, 0x39, 0x39, 0x39, 0x39,
- 0x39, 0x46, 0x40, 0x47, 0x40, 0x47, 0x3A, 0x40,
- 0x22, 0x20, 0x2A, 0x29, 0x2C, 0x2C, 0x2C, 0x29,
- 0x28, 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x2B, 0x2B, 0x2B, 0x2B, 0x20, 0x20, 0x22,
- 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x20, 0x27,
- 0x27, 0x44, 0x28, 0x24, 0x27, 0x2F, 0x3C, 0x27,
- 0x27, 0x38, 0x24, 0x2C, 0x2C, 0x48, 0x49, 0x36,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x28, 0x29, 0x29,
- 0x4A, 0x20, 0x3A, 0x40, 0x47, 0x40, 0x47, 0x40,
- 0x40, 0x47, 0x40, 0x40, 0x39, 0x39, 0x39, 0x4A,
- 0x25, 0x24, 0x22, 0x2B, 0x28, 0x29, 0x2C, 0x2C,
- 0x29, 0x28, 0x2A, 0x2B, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x21, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x21, 0x20, 0x2B, 0x2A, 0x27,
- 0x3D, 0x4B, 0x48, 0x4C, 0x2B, 0x3C, 0x27, 0x3C,
- 0x3C, 0x23, 0x4D, 0x4E, 0x4F, 0x50, 0x33, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x39, 0x3F, 0x39,
- 0x51, 0x20, 0x39, 0x39, 0x47, 0x40, 0x4D, 0x4D,
- 0x40, 0x52, 0x4D, 0x40, 0x47, 0x40, 0x39, 0x39,
- 0x53, 0x54, 0x25, 0x24, 0x20, 0x2A, 0x29, 0x2C,
- 0x2C, 0x2C, 0x29, 0x2A, 0x2B, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22,
- 0x22, 0x21, 0x20, 0x2B, 0x28, 0x2A, 0x20, 0x27,
- 0x36, 0x4F, 0x55, 0x48, 0x56, 0x3D, 0x3C, 0x3C,
- 0x32, 0x57, 0x56, 0x58, 0x49, 0x56, 0x56, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x22, 0x20, 0x20,
- 0x41, 0x39, 0x39, 0x3A, 0x59, 0x5A, 0x59, 0x5B,
- 0x5C, 0x3A, 0x4D, 0x5D, 0x57, 0x39, 0x39, 0x4A,
- 0x5E, 0x33, 0x54, 0x33, 0x24, 0x22, 0x2B, 0x28,
- 0x2C, 0x2C, 0x2C, 0x29, 0x28, 0x2B, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x21, 0x21, 0x21, 0x22, 0x22, 0x21,
- 0x20, 0x2B, 0x2A, 0x2A, 0x20, 0x22, 0x22, 0x27,
- 0x5F, 0x2D, 0x3C, 0x60, 0x56, 0x54, 0x61, 0x49,
- 0x35, 0x56, 0x34, 0x27, 0x62, 0x27, 0x56, 0x39,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x30, 0x63, 0x54,
- 0x40, 0x64, 0x65, 0x66, 0x67, 0x67, 0x68, 0x5F,
- 0x2E, 0x69, 0x6A, 0x67, 0x5F, 0x3A, 0x39, 0x2C,
- 0x53, 0x23, 0x25, 0x54, 0x33, 0x25, 0x23, 0x20,
- 0x2A, 0x29, 0x2C, 0x2C, 0x29, 0x28, 0x2B, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20,
- 0x2B, 0x2A, 0x20, 0x22, 0x22, 0x21, 0x2B, 0x27,
- 0x62, 0x36, 0x27, 0x33, 0x6B, 0x54, 0x3D, 0x3C,
- 0x49, 0x57, 0x27, 0x27, 0x27, 0x27, 0x56, 0x57,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x6C, 0x31, 0x6D,
- 0x64, 0x51, 0x6E, 0x2E, 0x2E, 0x6F, 0x5A, 0x70,
- 0x70, 0x71, 0x72, 0x67, 0x67, 0x69, 0x73, 0x46,
- 0x4A, 0x2A, 0x21, 0x25, 0x33, 0x54, 0x33, 0x24,
- 0x20, 0x2A, 0x29, 0x2C, 0x2C, 0x29, 0x28, 0x2B,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, 0x2B,
- 0x2B, 0x22, 0x22, 0x22, 0x2B, 0x28, 0x2A, 0x27,
- 0x27, 0x39, 0x3C, 0x3D, 0x45, 0x74, 0x75, 0x76,
- 0x76, 0x45, 0x27, 0x27, 0x27, 0x27, 0x56, 0x77,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x78, 0x78, 0x5E,
- 0x79, 0x7A, 0x7B, 0x6E, 0x5A, 0x5A, 0x70, 0x7C,
- 0x70, 0x5B, 0x7D, 0x5A, 0x66, 0x7E, 0x7F, 0x79,
- 0x48, 0x6B, 0x2C, 0x20, 0x24, 0x33, 0x54, 0x33,
- 0x24, 0x21, 0x2A, 0x29, 0x2C, 0x2C, 0x29, 0x28,
- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x21, 0x21, 0x21, 0x20, 0x20, 0x2B, 0x2B, 0x21,
- 0x22, 0x22, 0x20, 0x28, 0x2B, 0x20, 0x22, 0x27,
- 0x27, 0x80, 0x27, 0x81, 0x82, 0x83, 0x84, 0x85,
- 0x74, 0x85, 0x84, 0x27, 0x3C, 0x4F, 0x4F, 0x66,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x22, 0x23, 0x5E,
- 0x64, 0x86, 0x79, 0x73, 0x87, 0x88, 0x7C, 0x5A,
- 0x5A, 0x71, 0x7D, 0x71, 0x89, 0x79, 0x8A, 0x8A,
- 0x51, 0x8B, 0x48, 0x39, 0x2A, 0x22, 0x33, 0x54,
- 0x33, 0x25, 0x22, 0x2B, 0x29, 0x2C, 0x2C, 0x29,
- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x21, 0x21, 0x20, 0x20, 0x2B, 0x2B, 0x22, 0x23,
- 0x21, 0x2A, 0x2A, 0x20, 0x21, 0x23, 0x25, 0x27,
- 0x27, 0x55, 0x8C, 0x8D, 0x8E, 0x83, 0x8F, 0x90,
- 0x91, 0x92, 0x92, 0x85, 0x85, 0x93, 0x51, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x2A, 0x29, 0x51,
- 0x79, 0x79, 0x94, 0x89, 0x89, 0x89, 0x5A, 0x95,
- 0x64, 0x88, 0x96, 0x97, 0x7A, 0x73, 0x98, 0x98,
- 0x99, 0x50, 0x50, 0x48, 0x6B, 0x28, 0x21, 0x25,
- 0x54, 0x54, 0x25, 0x22, 0x2B, 0x29, 0x2C, 0x29,
- 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x2B, 0x20, 0x22, 0x22, 0x20,
- 0x2B, 0x2B, 0x20, 0x22, 0x24, 0x25, 0x33, 0x27,
- 0x27, 0x9A, 0x9B, 0x9C, 0x9D, 0x83, 0x9E, 0x85,
- 0x9F, 0x92, 0x85, 0x85, 0x85, 0x85, 0x92, 0xA0,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0xA1, 0x47, 0xA2,
- 0xA2, 0x94, 0xA3, 0x94, 0x95, 0x95, 0x73, 0x73,
- 0x95, 0x87, 0xA4, 0x5B, 0x97, 0x7B, 0x88, 0x98,
- 0xA2, 0x50, 0x48, 0x48, 0x48, 0x8B, 0x29, 0x20,
- 0x25, 0x54, 0x54, 0x25, 0x22, 0x2B, 0x29, 0x29,
- 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x2B, 0x2B,
- 0x20, 0x21, 0x23, 0x24, 0x25, 0x25, 0x33, 0x27,
- 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x8F, 0x90, 0x90,
- 0x9F, 0x90, 0x85, 0x90, 0x85, 0x74, 0xAA, 0x81,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0xAB, 0x40, 0xAC,
- 0x79, 0xA3, 0x89, 0xAD, 0x95, 0x6F, 0xAE, 0xAE,
- 0xAE, 0x5B, 0x59, 0x88, 0x7B, 0x89, 0x79, 0xAF,
- 0xA2, 0x6B, 0x48, 0x48, 0x48, 0x48, 0x50, 0x2C,
- 0x20, 0x24, 0x33, 0x54, 0x25, 0x22, 0x2A, 0x2A,
- 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x21, 0x23, 0x22, 0x2B, 0x20, 0x20,
- 0x22, 0x23, 0x24, 0x25, 0x24, 0x24, 0x22, 0x27,
- 0xB0, 0x8C, 0xAA, 0xB1, 0xB2, 0x84, 0x85, 0x9F,
- 0x85, 0x85, 0x85, 0xB3, 0xB4, 0xAA, 0xAA, 0xA0,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x2A, 0xB5,
- 0xA3, 0xA3, 0xAC, 0x5D, 0xB6, 0xAE, 0xB7, 0x69,
- 0x73, 0x5B, 0x88, 0x89, 0x95, 0x73, 0x99, 0x99,
- 0x59, 0x2A, 0x39, 0x48, 0x48, 0x50, 0x48, 0x50,
- 0x2C, 0x20, 0x24, 0x33, 0x54, 0x25, 0x21, 0x20,
- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x21, 0x23, 0x21, 0x2B, 0x20, 0x20, 0x22,
- 0x22, 0x24, 0x24, 0x23, 0x22, 0x20, 0x2A, 0x27,
- 0x27, 0xB0, 0x8C, 0xA9, 0xB2, 0x9E, 0x91, 0x85,
- 0x85, 0x93, 0xB8, 0x75, 0xAA, 0xA7, 0x8C, 0x27,
- 0x27, 0x27, 0x33, 0x3C, 0x27, 0x27, 0x2C, 0x7B,
- 0x55, 0x79, 0xA3, 0x5D, 0xB9, 0x43, 0x7F, 0x7E,
- 0x5F, 0x5A, 0x5A, 0x95, 0x64, 0x73, 0x58, 0x64,
- 0x5C, 0x25, 0x2B, 0x3F, 0x48, 0x48, 0x8B, 0x48,
- 0x48, 0x2C, 0x20, 0x25, 0x54, 0x33, 0x24, 0x22,
- 0x2B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x21, 0x23, 0x21, 0x20, 0x20, 0x20, 0x21, 0x22,
- 0x24, 0x23, 0x22, 0x21, 0x2B, 0x20, 0x54, 0x27,
- 0x27, 0x8B, 0x81, 0xA5, 0x93, 0x93, 0x74, 0xA5,
- 0xBA, 0x75, 0xBB, 0xBC, 0xB4, 0x6D, 0x50, 0x6B,
- 0x27, 0x27, 0x30, 0x33, 0x49, 0x27, 0x27, 0x5E,
- 0x6F, 0x73, 0x94, 0xBD, 0x4E, 0x5D, 0x7F, 0x7F,
- 0xB7, 0x68, 0x73, 0x6E, 0xB7, 0x7F, 0x95, 0x97,
- 0x47, 0x63, 0x25, 0x20, 0x3F, 0x48, 0x8B, 0x8B,
- 0x48, 0x48, 0x2C, 0x20, 0x25, 0x54, 0x33, 0x25,
- 0x2B, 0x2B, 0x2B, 0x20, 0x20, 0x20, 0x21, 0x21,
- 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x24, 0x24,
- 0x22, 0x21, 0x20, 0x2A, 0x33, 0x30, 0x30, 0x27,
- 0x27, 0x50, 0xBE, 0xBF, 0x9A, 0xB3, 0x9B, 0xBB,
- 0xBB, 0xC0, 0x8C, 0xC1, 0x8B, 0xC2, 0x47, 0x8B,
- 0x27, 0x27, 0x38, 0x63, 0x63, 0x27, 0x27, 0xC3,
- 0xB5, 0x95, 0x72, 0x95, 0x6F, 0x69, 0x7E, 0x66,
- 0x7E, 0x7F, 0x6E, 0x7E, 0x95, 0x95, 0x73, 0x70,
- 0x30, 0x30, 0x30, 0x33, 0x20, 0x3F, 0x48, 0x8B,
- 0x6B, 0x48, 0x50, 0x29, 0x21, 0x33, 0x54, 0x33,
- 0x2A, 0x2B, 0x2B, 0x20, 0x20, 0x21, 0x21, 0x23,
- 0x21, 0x20, 0x20, 0x20, 0x20, 0x24, 0x24, 0x22,
- 0x20, 0x2B, 0x21, 0xC4, 0x30, 0x60, 0x30, 0x27,
- 0x27, 0xC5, 0x8B, 0x39, 0xC6, 0xC7, 0xA6, 0xA6,
- 0xC8, 0x9A, 0x3B, 0x39, 0x50, 0x56, 0x56, 0x4F,
- 0x33, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x48,
- 0x59, 0x94, 0x73, 0xAE, 0xB7, 0xB7, 0x7E, 0x7E,
- 0x7E, 0x7E, 0x7E, 0x5A, 0x70, 0x7C, 0x71, 0xC3,
- 0x63, 0x30, 0x60, 0x78, 0x54, 0x20, 0x6B, 0x48,
- 0x6B, 0x6B, 0x50, 0x50, 0x29, 0x22, 0x33, 0x33,
- 0x2A, 0x2B, 0x20, 0x20, 0x21, 0x22, 0x22, 0x22,
- 0x21, 0x20, 0x20, 0x20, 0x24, 0x24, 0x20, 0x20,
- 0x2B, 0x24, 0x30, 0x60, 0x60, 0x30, 0xAB, 0x27,
- 0x27, 0x40, 0x4C, 0x50, 0x39, 0x87, 0xC3, 0x53,
- 0x37, 0x48, 0x37, 0x48, 0xC9, 0x56, 0xB9, 0x56,
- 0xCA, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x3C,
- 0x51, 0x5A, 0x6E, 0xB7, 0xB7, 0x7E, 0x7E, 0x7E,
- 0x7E, 0x7E, 0x7F, 0xB7, 0x5A, 0x7C, 0x5B, 0x37,
- 0x23, 0x63, 0x31, 0x6C, 0xCB, 0x63, 0x20, 0x6B,
- 0x50, 0x3F, 0x39, 0x50, 0x8B, 0x28, 0x24, 0x24,
- 0x2B, 0x2B, 0x20, 0x21, 0x22, 0x22, 0x22, 0x21,
- 0x20, 0x20, 0x20, 0x23, 0x23, 0x20, 0x20, 0x2B,
- 0x33, 0x78, 0xCB, 0x60, 0x30, 0x22, 0x3D, 0x27,
- 0x2F, 0x56, 0x4E, 0x8B, 0x6B, 0x39, 0x48, 0x8B,
- 0x6B, 0x8B, 0x80, 0xC9, 0xB9, 0xB9, 0x56, 0xB9,
- 0x56, 0x34, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x48, 0xB5, 0xB7, 0xB7, 0x7E, 0x7E, 0x2E, 0x7E,
- 0x7E, 0x7E, 0x7F, 0x7C, 0x65, 0x71, 0x3A, 0x48,
- 0x2C, 0x24, 0x30, 0x6C, 0x34, 0x6C, 0xC4, 0x20,
- 0x8B, 0x50, 0x39, 0x39, 0x48, 0x6B, 0x2B, 0x22,
- 0x2B, 0x20, 0x21, 0x22, 0x23, 0x23, 0x22, 0x21,
- 0x20, 0x2B, 0x23, 0x22, 0x20, 0x2B, 0x2B, 0x54,
- 0x60, 0x31, 0xCB, 0x54, 0x20, 0x3D, 0x36, 0x27,
- 0x4E, 0xB9, 0x56, 0x56, 0x8B, 0x6B, 0x50, 0x6B,
- 0x40, 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9,
- 0x56, 0x56, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x7B, 0x6E, 0xB7, 0xB7, 0xB7, 0x7E, 0x7F,
- 0xB7, 0xB7, 0x7F, 0x7E, 0x6F, 0x5B, 0x29, 0x2C,
- 0x48, 0x39, 0x24, 0x60, 0x58, 0xAF, 0xCC, 0x63,
- 0x20, 0x8B, 0x8B, 0x39, 0x39, 0x48, 0x3F, 0x28,
- 0x20, 0x20, 0x22, 0x23, 0x23, 0x23, 0x22, 0x20,
- 0x2B, 0x22, 0x22, 0x2B, 0x2B, 0x20, 0x54, 0xCB,
- 0x31, 0xCB, 0x25, 0x20, 0x27, 0x27, 0x27, 0x48,
- 0xB9, 0x56, 0xB9, 0x56, 0x4F, 0x48, 0x47, 0x57,
- 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56,
- 0xB9, 0x56, 0x62, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x48, 0x6F, 0x69, 0xB7, 0xB7, 0xB7, 0x7F,
- 0xB7, 0xB7, 0xB7, 0x73, 0x59, 0x50, 0x29, 0x2B,
- 0x28, 0x8B, 0x39, 0x25, 0x31, 0x55, 0xB6, 0x34,
- 0x63, 0x2B, 0x48, 0x6B, 0x2C, 0x39, 0x47, 0x6B,
- 0x22, 0x22, 0x23, 0x24, 0x23, 0x22, 0x20, 0x2B,
- 0x20, 0x22, 0x2A, 0x2B, 0x20, 0x33, 0xCB, 0x31,
- 0x78, 0x24, 0x21, 0xCD, 0x27, 0x27, 0x27, 0x56,
- 0x56, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0x56, 0xB9,
- 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56,
- 0xB9, 0x56, 0xC9, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x41, 0x64, 0xB7, 0xB7, 0xB7, 0x7F,
- 0x68, 0xB7, 0xAE, 0xA3, 0x23, 0x39, 0x8B, 0x2A,
- 0x20, 0x20, 0x39, 0x6B, 0x25, 0xCC, 0x43, 0x43,
- 0x34, 0x63, 0x2A, 0x48, 0x3F, 0x39, 0x6B, 0x6B,
- 0x24, 0x23, 0x24, 0x24, 0x23, 0x21, 0x2B, 0x2B,
- 0x22, 0x2B, 0x2B, 0x20, 0x24, 0x78, 0x31, 0x30,
- 0x23, 0x21, 0x21, 0x27, 0x27, 0x27, 0x80, 0x56,
- 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9,
- 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
- 0x56, 0xB9, 0x56, 0x3C, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0xCE, 0x8A, 0xAE, 0x6F, 0xB7,
- 0x6F, 0x89, 0x71, 0x78, 0x63, 0x23, 0x39, 0x6B,
- 0x2B, 0x20, 0x20, 0x2C, 0x6B, 0x25, 0x34, 0x42,
- 0x42, 0x34, 0x54, 0x29, 0x48, 0x3F, 0x39, 0x3F,
- 0x25, 0x24, 0x25, 0x24, 0x22, 0x20, 0x2A, 0x21,
- 0x2B, 0x2A, 0x20, 0x22, 0x30, 0x60, 0x30, 0x22,
- 0x21, 0x22, 0x27, 0x27, 0x27, 0x2D, 0x4C, 0x56,
- 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0xB9, 0x56, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0x56, 0x2E, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x40, 0x97, 0x95, 0x5A, 0x71,
- 0x7C, 0xCE, 0x40, 0x60, 0x31, 0x30, 0x23, 0x3F,
- 0x3F, 0x20, 0x20, 0x20, 0x29, 0x8B, 0x33, 0x58,
- 0x66, 0x43, 0xCC, 0x25, 0x39, 0x50, 0x6B, 0x2C,
- 0x33, 0x25, 0x25, 0x23, 0x20, 0x2A, 0x2B, 0x20,
- 0x2A, 0x2B, 0x22, 0x54, 0x30, 0x30, 0x24, 0x22,
- 0x21, 0x27, 0x27, 0x27, 0x27, 0xAF, 0x29, 0x4E,
- 0x4F, 0xB9, 0x56, 0xB9, 0x4D, 0x4D, 0x77, 0xC9,
- 0xB9, 0xB9, 0xB9, 0x56, 0xC9, 0x4D, 0x4D, 0x80,
- 0x4C, 0x40, 0xC9, 0x4D, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0xCF, 0x97, 0x97, 0xCE,
- 0x86, 0xD0, 0x54, 0x6C, 0x58, 0x34, 0x60, 0x23,
- 0x6B, 0x39, 0x20, 0x20, 0x20, 0x28, 0x6B, 0x54,
- 0xD1, 0x66, 0xB6, 0x60, 0x22, 0x6B, 0x8B, 0x2C,
- 0x54, 0x33, 0x24, 0x22, 0x2B, 0x28, 0x20, 0x28,
- 0x2B, 0x20, 0x25, 0xC4, 0x30, 0x25, 0x22, 0x21,
- 0x26, 0x27, 0x27, 0x27, 0x27, 0x20, 0x4B, 0x52,
- 0x80, 0x4F, 0xB9, 0x56, 0xB9, 0x80, 0x56, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0x4D, 0x80, 0x50, 0x48,
- 0x50, 0x50, 0x50, 0x56, 0x3D, 0x27, 0x36, 0x27,
- 0x27, 0x27, 0x27, 0x3C, 0x46, 0xC3, 0x86, 0x86,
- 0xD0, 0x39, 0x24, 0x6C, 0xD1, 0x43, 0x43, 0x6C,
- 0x24, 0x6B, 0x2C, 0x20, 0x20, 0x20, 0x29, 0x39,
- 0x63, 0xD1, 0x42, 0x55, 0xC4, 0x2B, 0x8B, 0x39,
- 0x54, 0x25, 0x24, 0x20, 0x2A, 0x2A, 0x28, 0x28,
- 0x20, 0x22, 0x54, 0x63, 0x25, 0x24, 0x22, 0x22,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x28, 0x77, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0xC9, 0x56, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x4F,
- 0x77, 0x47, 0x8B, 0x40, 0x56, 0x27, 0x27, 0x49,
- 0x2D, 0x27, 0x27, 0x27, 0x39, 0x40, 0x39, 0x39,
- 0x28, 0x3F, 0x39, 0x33, 0x58, 0x66, 0x35, 0x2E,
- 0x58, 0x24, 0x8B, 0x29, 0x20, 0x20, 0x20, 0x39,
- 0x29, 0x30, 0x55, 0xB6, 0xCC, 0x25, 0x29, 0x39,
- 0x54, 0x25, 0x22, 0x2B, 0x29, 0x2A, 0x29, 0x2B,
- 0x22, 0x24, 0x54, 0x33, 0x25, 0x22, 0x2B, 0x54,
- 0x27, 0x27, 0x62, 0x27, 0x30, 0x80, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0x56, 0x4D, 0x8B, 0x77, 0x36, 0x27, 0x27,
- 0x3C, 0x2F, 0x27, 0x27, 0x39, 0x39, 0x39, 0x47,
- 0x20, 0x2B, 0x2C, 0x39, 0x33, 0xB6, 0x35, 0x35,
- 0x35, 0xAF, 0x24, 0x48, 0x2A, 0x20, 0x20, 0x20,
- 0x8B, 0x2B, 0x78, 0xAF, 0x58, 0x30, 0x21, 0x28,
- 0x33, 0x25, 0x21, 0x28, 0x29, 0x29, 0x28, 0x20,
- 0x24, 0x33, 0x54, 0x33, 0x23, 0x20, 0x24, 0xD2,
- 0x27, 0x49, 0x27, 0x27, 0x56, 0xB9, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0x56, 0xC9, 0x50, 0x56, 0x27, 0x27,
- 0x3D, 0x38, 0x3D, 0x27, 0x27, 0x47, 0x39, 0x39,
- 0x28, 0x20, 0x20, 0x2A, 0x39, 0x54, 0x43, 0x35,
- 0x35, 0x35, 0xAF, 0x23, 0x48, 0x2B, 0x20, 0x20,
- 0x2B, 0x48, 0x22, 0x60, 0x34, 0xCB, 0x25, 0x21,
- 0x33, 0x24, 0x2B, 0x29, 0x29, 0x29, 0x2B, 0x22,
- 0x25, 0x54, 0x54, 0x25, 0x22, 0x2B, 0x33, 0x27,
- 0x27, 0x32, 0x27, 0x30, 0x56, 0xB9, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0x56, 0x56, 0xC9, 0x4C, 0x36, 0x3C,
- 0x62, 0x2F, 0x2E, 0x27, 0x27, 0x54, 0x47, 0x47,
- 0x8B, 0x2B, 0x20, 0x20, 0x20, 0x3F, 0x54, 0x2E,
- 0x35, 0x35, 0x35, 0x34, 0x21, 0x8B, 0x2A, 0x20,
- 0x20, 0x2C, 0x6B, 0x25, 0x60, 0x60, 0x54, 0x23,
- 0x25, 0x22, 0x2A, 0x2C, 0x29, 0x28, 0x20, 0x24,
- 0x54, 0x63, 0x54, 0x24, 0x2B, 0x22, 0x24, 0x27,
- 0x36, 0x27, 0x27, 0x56, 0x56, 0xB9, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0x4C, 0x36,
- 0x66, 0xD3, 0x27, 0x2F, 0x27, 0x54, 0x54, 0x27,
- 0x26, 0x6B, 0x20, 0x20, 0x20, 0x20, 0x6B, 0x63,
- 0x35, 0x35, 0x35, 0x62, 0xCB, 0x2A, 0x3F, 0x28,
- 0x2B, 0x2A, 0x50, 0x29, 0x33, 0x30, 0x54, 0x25,
- 0x24, 0x20, 0x29, 0x2C, 0x2C, 0x2A, 0x21, 0x33,
- 0xC4, 0xC4, 0x33, 0x21, 0x29, 0x22, 0x27, 0x27,
- 0x99, 0x27, 0x31, 0xB9, 0xB9, 0xB9, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0x3D,
- 0x3D, 0x3C, 0x3C, 0x55, 0x54, 0x54, 0x54, 0x20,
- 0x27, 0x2C, 0x39, 0x20, 0x20, 0x20, 0x20, 0x48,
- 0x30, 0x62, 0x35, 0x35, 0x42, 0x54, 0x39, 0x39,
- 0x2C, 0x28, 0x3F, 0x8B, 0x20, 0x33, 0x54, 0x24,
- 0x22, 0x2B, 0x2C, 0x2C, 0x2C, 0x2B, 0x24, 0x54,
- 0x30, 0xC4, 0x25, 0x2B, 0x28, 0x2B, 0x27, 0x3D,
- 0x27, 0x27, 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0x56,
- 0xB9, 0xB9, 0x56, 0x56, 0x4F, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0x27,
- 0x20, 0x20, 0x20, 0x54, 0x54, 0x54, 0x54, 0x20,
- 0x20, 0x2D, 0x2D, 0x29, 0x20, 0x20, 0x20, 0x20,
- 0x48, 0x60, 0x66, 0x35, 0x62, 0x34, 0x22, 0x2C,
- 0x2C, 0x3F, 0x6B, 0x48, 0x2C, 0x22, 0x23, 0x23,
- 0x20, 0x2A, 0x2C, 0x29, 0x29, 0x20, 0x25, 0xC4,
- 0x30, 0x54, 0x22, 0x29, 0x28, 0xD2, 0x27, 0x35,
- 0x27, 0x49, 0x56, 0xB9, 0xB9, 0xB9, 0xB9, 0x56,
- 0xB9, 0xB9, 0x56, 0x4F, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0x40, 0x20,
- 0x20, 0x54, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20,
- 0x2D, 0x2D, 0x2D, 0x49, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x6B, 0x6C, 0x42, 0x2E, 0xB6, 0x54, 0x28,
- 0x29, 0x2C, 0x6B, 0x48, 0x3F, 0x2A, 0x20, 0x22,
- 0x2B, 0x28, 0x2C, 0x28, 0x29, 0x20, 0x33, 0x30,
- 0x30, 0x54, 0x20, 0x2C, 0x29, 0x27, 0x27, 0x3D,
- 0x27, 0x40, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0x56,
- 0xB9, 0x56, 0x56, 0x4D, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0x56, 0x56, 0x63, 0x56, 0x54, 0x54,
- 0x54, 0x54, 0x20, 0xD3, 0x45, 0x51, 0x51, 0x49,
- 0x7C, 0x2D, 0x2D, 0x49, 0x49, 0x20, 0x20, 0x20,
- 0x20, 0x2A, 0x2A, 0xCC, 0xB6, 0x8A, 0x60, 0x22,
- 0x28, 0x29, 0x3F, 0x6B, 0x39, 0x29, 0x2B, 0x20,
- 0x28, 0x2C, 0x28, 0x2A, 0x2A, 0x24, 0xC4, 0x30,
- 0xC4, 0x33, 0x2B, 0x39, 0xCD, 0x27, 0x3C, 0x27,
- 0x27, 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0x56, 0x56, 0x4D, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0x56, 0x63, 0x63, 0x49, 0x2D, 0x20,
- 0x20, 0x2D, 0xD3, 0x49, 0x66, 0x2D, 0x49, 0x49,
- 0x49, 0x49, 0x49, 0x49, 0x49, 0x8B, 0x2B, 0x20,
- 0x20, 0x20, 0x39, 0x23, 0x6C, 0xAF, 0xCB, 0x23,
- 0x28, 0x28, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x20,
- 0x29, 0x39, 0x2B, 0x2B, 0x2B, 0x25, 0x78, 0xC4,
- 0x63, 0x23, 0x29, 0x39, 0x27, 0x27, 0x3D, 0x27,
- 0x27, 0x56, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0x56, 0x56, 0x80, 0x4F, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0xB9, 0x2D, 0x49, 0x2D, 0x49,
- 0x49, 0x2D, 0x49, 0x2D, 0x49, 0x2D, 0x2D, 0x2D,
- 0x49, 0x49, 0x35, 0x49, 0x2D, 0x2D, 0x39, 0x28,
- 0x20, 0x20, 0x2A, 0x28, 0x33, 0x60, 0xC4, 0x22,
- 0x2C, 0x2A, 0x2A, 0x22, 0x23, 0x22, 0x20, 0x21,
- 0x2C, 0x29, 0x20, 0x2B, 0x2B, 0x54, 0x30, 0xC4,
- 0x63, 0x22, 0x2C, 0x27, 0x27, 0x27, 0x3D, 0x27,
- 0x27, 0x56, 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0x56, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0xB9, 0x2D, 0x49, 0x2D, 0x49,
- 0x61, 0x49, 0x2D, 0x49, 0x49, 0x2D, 0x2D, 0x49,
- 0x49, 0x49, 0x2F, 0x49, 0x2D, 0x78, 0x29, 0x28,
- 0x2C, 0x2A, 0x2B, 0x39, 0x2B, 0x25, 0x33, 0x20,
- 0x2C, 0x20, 0x2A, 0x24, 0x54, 0x54, 0x23, 0x23,
- 0x2C, 0x2A, 0x22, 0x2B, 0x20, 0x63, 0x30, 0x63,
- 0xC4, 0x21, 0x39, 0x27, 0x27, 0x27, 0x35, 0x36,
- 0x27, 0x56, 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0x2D, 0x49, 0x49, 0x49,
- 0x49, 0x27, 0x27, 0x2D, 0x38, 0x27, 0x36, 0x36,
- 0x49, 0x27, 0x49, 0x2D, 0x2D, 0x44, 0x24, 0x2B,
- 0x20, 0x2C, 0x3F, 0x6B, 0x2A, 0x20, 0x21, 0x28,
- 0x2C, 0x20, 0x2B, 0x24, 0x30, 0xCB, 0x63, 0x54,
- 0x28, 0x20, 0x24, 0x2B, 0x23, 0x78, 0xC4, 0x63,
- 0x63, 0x2B, 0x3F, 0x27, 0x27, 0x27, 0x38, 0x33,
- 0x3D, 0xB9, 0x56, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0x63, 0x49, 0x49, 0x49,
- 0x49, 0x49, 0x3D, 0x3D, 0x27, 0x27, 0x27, 0x2D,
- 0x49, 0x49, 0x49, 0x2D, 0x62, 0x5F, 0xC4, 0x20,
- 0x22, 0x2A, 0x6B, 0x8B, 0x2C, 0x2B, 0x2A, 0x3F,
- 0x3F, 0x2A, 0x21, 0x21, 0xCB, 0x58, 0x6C, 0x60,
- 0x20, 0x23, 0x24, 0x2A, 0x25, 0x78, 0x63, 0x63,
- 0x54, 0x2A, 0x28, 0x27, 0x27, 0x27, 0x27, 0x62,
- 0x3C, 0xB9, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0x56, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x49, 0x2D, 0x2D,
- 0x2D, 0x3D, 0x2F, 0x3C, 0x2D, 0x3C, 0x27, 0x38,
- 0x2D, 0x49, 0x2D, 0x2D, 0xD1, 0x43, 0x30, 0x20,
- 0x24, 0x21, 0x21, 0x21, 0x2B, 0x2A, 0x29, 0x8B,
- 0x6B, 0x29, 0x2B, 0x2A, 0x30, 0x55, 0x55, 0x34,
- 0x22, 0x23, 0x24, 0x29, 0x54, 0x30, 0x63, 0x63,
- 0x25, 0x29, 0x22, 0x3C, 0xA5, 0xD4, 0xD5, 0x27,
- 0x31, 0x56, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0x56, 0x56, 0x80, 0xB9, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x2D, 0x2E,
- 0x3E, 0x27, 0x27, 0x27, 0x27, 0x27, 0x36, 0x44,
- 0x3C, 0x27, 0x2D, 0xC4, 0x78, 0xCC, 0x54, 0x2B,
- 0x25, 0x24, 0x63, 0x60, 0x63, 0x24, 0x2A, 0x6B,
- 0x3F, 0x39, 0x28, 0x21, 0x33, 0xB6, 0x44, 0x58,
- 0x22, 0x23, 0x24, 0x2A, 0x30, 0x30, 0x63, 0x63,
- 0x24, 0x39, 0x22, 0xBB, 0x9C, 0xB2, 0x9D, 0xA8,
- 0x27, 0x8B, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0xB9,
- 0x56, 0xB9, 0x56, 0x80, 0xB9, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0xD6, 0xD6, 0xD7,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x32,
- 0x3D, 0x27, 0x39, 0x33, 0xC4, 0xC4, 0x22, 0x28,
- 0x25, 0x54, 0x30, 0xD1, 0xD1, 0x60, 0x23, 0x6B,
- 0x3F, 0x39, 0x2C, 0x2B, 0x20, 0x58, 0x8A, 0x58,
- 0x22, 0x23, 0x23, 0x2B, 0x78, 0x30, 0xC4, 0xC4,
- 0x23, 0x29, 0xBB, 0xBB, 0xD8, 0xB2, 0x9D, 0xA9,
- 0xA9, 0x3C, 0x60, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
- 0x56, 0xB9, 0x56, 0x80, 0xB9, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0xB9, 0x56, 0xD9, 0x85, 0x85, 0x85,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x2D,
- 0xA0, 0x83, 0x2C, 0x21, 0x30, 0x33, 0x29, 0x29,
- 0x21, 0x33, 0x54, 0x42, 0x66, 0x55, 0xC4, 0x29,
- 0x8B, 0x2C, 0x39, 0x28, 0x29, 0x31, 0x44, 0x58,
- 0x23, 0x23, 0x21, 0x20, 0x30, 0xC4, 0xC4, 0x30,
- 0x21, 0x20, 0xBB, 0xBC, 0xDA, 0xDB, 0xDC, 0xB2,
- 0x83, 0xB4, 0x3C, 0x2F, 0xB9, 0x56, 0x56, 0xB9,
- 0x56, 0xB9, 0x56, 0x80, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0x56, 0x56, 0x56, 0xA7, 0xD4, 0x85, 0x82,
- 0x3C, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x61,
- 0x9E, 0x90, 0xDD, 0x21, 0x33, 0x25, 0x2C, 0x39,
- 0x2A, 0x24, 0x24, 0x42, 0x62, 0x43, 0x34, 0x22,
- 0x50, 0x39, 0x2C, 0x2C, 0x2A, 0x54, 0xD1, 0x58,
- 0x22, 0x22, 0x2B, 0x22, 0x30, 0xC4, 0x30, 0x60,
- 0x20, 0xDE, 0xBB, 0xD9, 0x84, 0x84, 0xDF, 0xA9,
- 0xDB, 0xDB, 0x61, 0x27, 0x38, 0x4D, 0x56, 0x56,
- 0x56, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0x56, 0x56, 0x56, 0x8D, 0xD9, 0xD5, 0xA6,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xBB,
- 0x85, 0xDB, 0xDD, 0x21, 0x22, 0x22, 0x3F, 0x39,
- 0x2C, 0x2B, 0x25, 0x34, 0x62, 0x66, 0xD1, 0xC4,
- 0x6B, 0x39, 0x2C, 0x39, 0x29, 0x21, 0x58, 0xCC,
- 0x22, 0x21, 0x29, 0x23, 0x30, 0x30, 0x30, 0x5E,
- 0x82, 0xBB, 0xE0, 0xB1, 0xE1, 0x9C, 0xD4, 0xDC,
- 0x9D, 0xA9, 0xE2, 0x27, 0x27, 0x27, 0x4D, 0x56,
- 0x56, 0xB9, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0x56, 0x4C, 0x48, 0xA8, 0xA8, 0xE3, 0x8C,
- 0xC6, 0x3C, 0x27, 0x27, 0x27, 0xE4, 0xA6, 0xE5,
- 0x83, 0xA9, 0xE6, 0xAF, 0x54, 0x2B, 0x8B, 0x39,
- 0x39, 0x29, 0x20, 0x54, 0x42, 0x42, 0xB6, 0xCC,
- 0x2A, 0x29, 0x39, 0x39, 0x2C, 0x2C, 0xCC, 0xCC,
- 0x22, 0x20, 0x39, 0xE7, 0xC0, 0xD9, 0xA7, 0xBC,
- 0x8D, 0xAA, 0x9C, 0xE8, 0x9C, 0x9D, 0xD4, 0xD4,
- 0xD8, 0xA9, 0x84, 0xC7, 0x27, 0x27, 0x27, 0x2A,
- 0x56, 0x56, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0x56, 0x56, 0x48, 0x50, 0xAA, 0xE3, 0xE3, 0xC0,
- 0xA6, 0x9A, 0xBA, 0xC8, 0x9A, 0xDE, 0x9B, 0xD5,
- 0xE8, 0xD8, 0xD5, 0x2E, 0x58, 0x33, 0x6B, 0x39,
- 0x2C, 0x39, 0x29, 0x28, 0xD1, 0x43, 0xB6, 0xAF,
- 0x23, 0x28, 0x2C, 0x39, 0x39, 0x8B, 0x30, 0x31,
- 0x21, 0x20, 0x3F, 0xBB, 0xDF, 0xDF, 0xD5, 0xA8,
- 0xD5, 0x9C, 0x8E, 0xB2, 0x9D, 0xE9, 0xD4, 0xD8,
- 0x90, 0xB2, 0xA9, 0x8F, 0x27, 0x27, 0x27, 0x27,
- 0x2F, 0x56, 0x56, 0xB9, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0x56, 0xB9, 0x48, 0x48, 0x75, 0xE3, 0xAA, 0xAA,
- 0xC0, 0xB4, 0xB4, 0xB4, 0x75, 0x9B, 0xD9, 0x83,
- 0x9D, 0x90, 0xDF, 0xDD, 0x8A, 0x31, 0x4B, 0x2C,
- 0x2C, 0x29, 0x2C, 0x3F, 0x6C, 0x55, 0xD1, 0x55,
- 0x54, 0x29, 0x28, 0x39, 0x39, 0x6B, 0x24, 0x60,
- 0x20, 0x2B, 0x3F, 0xA7, 0xB1, 0x9D, 0xA9, 0x8E,
- 0xE5, 0xE5, 0xDF, 0xE0, 0xA9, 0x9D, 0xDF, 0xDF,
- 0xEA, 0x9D, 0xB2, 0x84, 0xAA, 0x27, 0x27, 0x27,
- 0x27, 0x35, 0x56, 0x56, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0xB9, 0x48, 0x48, 0xA6, 0x9B, 0xE3, 0xAA,
- 0xAA, 0x9B, 0x9B, 0x9B, 0xAA, 0xE3, 0xD5, 0xD4,
- 0x9D, 0xA9, 0xA9, 0x9D, 0xEB, 0xAF, 0x23, 0x28,
- 0x2C, 0x29, 0x28, 0x39, 0x54, 0xCC, 0xAF, 0x55,
- 0x30, 0x29, 0x2B, 0x2C, 0x39, 0x39, 0x2B, 0xC4,
- 0x2B, 0x29, 0x39, 0xA7, 0x8E, 0x9D, 0x83, 0xE5,
- 0xB1, 0xDB, 0xDC, 0xE0, 0xDC, 0x84, 0xE9, 0x84,
- 0x83, 0xD4, 0xEC, 0x83, 0x8F, 0xE4, 0x27, 0x27,
- 0x27, 0x27, 0x56, 0x56, 0x56, 0x56, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0xB9, 0x56, 0x40, 0x50, 0x9A, 0x75, 0xE3, 0xE3,
- 0xE3, 0xD9, 0x8D, 0xAA, 0xD9, 0xA8, 0xB2, 0xDC,
- 0xB2, 0x8D, 0x84, 0xEA, 0xB1, 0xEB, 0x54, 0x29,
- 0x28, 0x2C, 0x2A, 0x28, 0x2B, 0x78, 0xCC, 0x58,
- 0xCB, 0x20, 0x20, 0x29, 0x39, 0x39, 0x2C, 0x25,
- 0x29, 0x2C, 0x39, 0xBB, 0xD9, 0xD9, 0x9D, 0x9D,
- 0xB2, 0xB1, 0xD4, 0xDB, 0xB1, 0x9D, 0xD4, 0xEA,
- 0xB1, 0x8D, 0xD8, 0x8E, 0x8F, 0xAA, 0x27, 0x27,
- 0x27, 0x3D, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0x56,
- 0x56, 0x56, 0x47, 0xE4, 0xA6, 0x75, 0xAA, 0xA8,
- 0x9C, 0x9C, 0xE1, 0x9C, 0x9C, 0x8E, 0xD8, 0x9D,
- 0xA9, 0xDB, 0xA9, 0xDC, 0xD8, 0xDA, 0xD4, 0x2B,
- 0x20, 0x2C, 0x28, 0x2A, 0x28, 0x63, 0x31, 0x58,
- 0xCB, 0x24, 0x20, 0x2B, 0x2C, 0x39, 0x6B, 0x21,
- 0x39, 0x6B, 0x2C, 0xC0, 0xE0, 0xB1, 0xB2, 0x9D,
- 0x8E, 0xD8, 0xE0, 0xD9, 0x84, 0xDB, 0xD8, 0xB1,
- 0x8E, 0xB2, 0xE2, 0x9C, 0x83, 0x9E, 0xBC, 0x3D,
- 0xD3, 0x56, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0xB9, 0xB9,
- 0x56, 0x4F, 0x27, 0x61, 0xA6, 0x9B, 0xE3, 0xA9,
- 0xE9, 0xD4, 0xDA, 0xDB, 0x8E, 0xE1, 0xE9, 0x8E,
- 0xD4, 0xA8, 0xE0, 0x84, 0xE8, 0xB1, 0xDC, 0x9D,
- 0x20, 0x29, 0x29, 0x2B, 0x2C, 0x54, 0x78, 0xCC,
- 0x78, 0x33, 0x2A, 0x20, 0x29, 0x39, 0x50, 0x2A,
- 0x6B, 0x8B, 0x39, 0xC0, 0x8D, 0xB1, 0xE9, 0xA9,
- 0xB2, 0xDC, 0x8E, 0xDC, 0xE1, 0xDA, 0xA9, 0x8E,
- 0xEA, 0xE2, 0x83, 0xE8, 0x8E, 0x83, 0xE2, 0xED,
- 0xB9, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x56, 0xB9,
- 0xC9, 0x27, 0x27, 0xE4, 0xA6, 0x9B, 0xD5, 0xA8,
- 0xD4, 0xB2, 0xD8, 0xDA, 0xD9, 0xE8, 0xE9, 0xE8,
- 0xD8, 0xB1, 0xDA, 0xB2, 0xE9, 0x8E, 0xEC, 0xDA,
- 0x22, 0x20, 0x39, 0x2B, 0x39, 0x24, 0xC4, 0x30,
- 0x30, 0x54, 0x22, 0x29, 0x29, 0x39, 0x48, 0x2C,
- 0x39, 0x6B, 0x39, 0xC0, 0x8D, 0xB1, 0xE9, 0xB2,
- 0xB2, 0x8E, 0xA9, 0xD8, 0xDA, 0xB1, 0xA9, 0xDA,
- 0x9C, 0xDC, 0x8E, 0xD4, 0xE8, 0xE8, 0x8F, 0x9B,
- 0x4F, 0xB9, 0x56, 0xB9, 0x56, 0xB9, 0xB9, 0xB9,
- 0xB9, 0xB9, 0xB9, 0xB9, 0x56, 0x56, 0x4F, 0x6B,
- 0x27, 0x27, 0x27, 0xD7, 0xDE, 0xAA, 0xE3, 0xA8,
- 0xB2, 0xD5, 0xE5, 0x90, 0xE2, 0xA9, 0xE9, 0xB2,
- 0xDA, 0xB2, 0xE1, 0xB2, 0xE9, 0x8E, 0xDA, 0xDF,
- 0x78, 0x2A, 0x2C, 0x2A, 0x6B, 0x28, 0x23, 0x54,
- 0x63, 0xC4, 0x33, 0x28, 0x2C, 0x39, 0x47, 0x39,
- 0x28, 0x2C, 0x29, 0xBB, 0x8D, 0x83, 0xE9, 0xD4,
- 0xB2, 0xE9, 0xE9, 0xE8, 0xD4, 0xD8, 0xD4, 0xA9,
- 0xDA, 0xB2, 0xE9, 0xA8, 0xB2, 0xA8, 0xD5, 0xAA,
- 0xC6, 0x56, 0x56, 0x56, 0x56, 0x56, 0xB9, 0x56,
- 0x56, 0x56, 0x56, 0x56, 0x56, 0xC9, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0xB8, 0xB4, 0x9B, 0xE3, 0x8E,
- 0x9D, 0x8E, 0xB2, 0xE8, 0xE8, 0x8E, 0xB2, 0xDA,
- 0xB2, 0x8E, 0xEC, 0xB2, 0x8E, 0xB2, 0xBB, 0x58,
- 0xAF, 0x33, 0x50, 0x39, 0x6B, 0x39, 0x29, 0x20,
- 0x33, 0x30, 0x78, 0x23, 0x6B, 0x6B, 0x48, 0x6B,
- 0x2B, 0x2A, 0x29, 0xBB, 0xE5, 0x9C, 0xB1, 0xB2,
- 0xE5, 0x84, 0x8E, 0x9C, 0x84, 0xB2, 0xB2, 0x9D,
- 0x84, 0xDF, 0xA9, 0x84, 0x8E, 0xA8, 0xE3, 0x9B,
- 0xA6, 0xD7, 0x80, 0x4F, 0x56, 0x56, 0x56, 0x4F,
- 0x4F, 0x4F, 0x4F, 0x2A, 0x2D, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0xB8, 0xB4, 0xAA, 0xD5, 0xA9,
- 0x9D, 0xB2, 0x90, 0xEA, 0xE9, 0xE2, 0xE1, 0x8E,
- 0xB2, 0x9D, 0x8E, 0xB1, 0xA7, 0xEE, 0x63, 0xD1,
- 0x2E, 0xCC, 0x28, 0x48, 0x8B, 0x47, 0x6B, 0x28,
- 0x23, 0x78, 0x6C, 0x54, 0x29, 0x50, 0x50, 0x6B,
- 0x23, 0x20, 0xBB, 0xBC, 0xBB, 0x8D, 0xE3, 0xDF,
- 0x9C, 0xA9, 0x8D, 0xA8, 0xD9, 0x90, 0x9D, 0xA9,
- 0xDC, 0xA9, 0x83, 0xB2, 0xA9, 0xD4, 0xE3, 0x9B,
- 0x8C, 0xEF, 0x27, 0x27, 0x27, 0x3C, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0xF0, 0xB4, 0x9B, 0xE3, 0x84,
- 0x9D, 0x84, 0x90, 0xB1, 0xA9, 0x9C, 0xD9, 0xB1,
- 0xB2, 0xEA, 0xBB, 0x51, 0x24, 0x30, 0x30, 0x42,
- 0x66, 0x58, 0x24, 0x48, 0x50, 0x3F, 0x20, 0x25,
- 0x22, 0x60, 0x34, 0x30, 0x20, 0x8B, 0x8B, 0x39,
- 0x54, 0x24, 0x2B, 0xC0, 0xC0, 0xC0, 0xBB, 0x9B,
- 0xBC, 0xAA, 0xAA, 0xE3, 0xE3, 0x9C, 0xB2, 0xD4,
- 0x83, 0xD8, 0xE8, 0x83, 0x84, 0xE8, 0xE5, 0x75,
- 0x9A, 0xF0, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0xF0, 0xB4, 0x9B, 0xE3, 0xA8,
- 0xA9, 0xD8, 0x8E, 0xEA, 0xA8, 0x9C, 0xD9, 0xE0,
- 0xC0, 0x5E, 0x2C, 0x20, 0x54, 0x60, 0x30, 0x66,
- 0xB6, 0xCC, 0x63, 0x3F, 0x8B, 0x28, 0x22, 0x33,
- 0x23, 0x31, 0xAF, 0x31, 0x22, 0x6B, 0x6B, 0x29,
- 0x30, 0x54, 0x22, 0x89, 0xBA, 0xED, 0xA6, 0x8C,
- 0xB4, 0xC0, 0xB4, 0x75, 0x75, 0x9B, 0x9B, 0xE5,
- 0xA9, 0xD5, 0x8E, 0x8E, 0x9C, 0xE3, 0x75, 0x8C,
- 0xC8, 0xF1, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0xF1, 0x9A, 0xB4, 0x9B, 0xE3,
- 0xE3, 0xA8, 0xE3, 0xE5, 0xAA, 0xBC, 0xC0, 0x9A,
- 0x26, 0x29, 0x20, 0x24, 0x63, 0x60, 0x54, 0x43,
- 0x34, 0xCB, 0x30, 0x39, 0x2C, 0x20, 0x24, 0x54,
- 0x22, 0x34, 0x34, 0x31, 0x24, 0x3F, 0x2C, 0x2B,
- 0x31, 0x30, 0x25, 0x2A, 0x6B, 0x29, 0x20, 0xF2,
- 0xBA, 0xBF, 0xC8, 0x9A, 0xA6, 0xA6, 0x8C, 0xB4,
- 0x9B, 0xAA, 0xAA, 0xAA, 0x9B, 0x75, 0xDE, 0xBF,
- 0x81, 0xEF, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
- 0x27, 0x27, 0x27, 0xEF, 0xBA, 0x9A, 0xB4, 0x75,
- 0x9B, 0x9B, 0x9B, 0xC0, 0xB4, 0x9A, 0xA5, 0xC4,
- 0x30, 0x28, 0x22, 0x33, 0x30, 0x30, 0x23, 0x34,
- 0x31, 0x30, 0xC4, 0x2C, 0x2B, 0x22, 0x33, 0x63,
- 0x21, 0x58, 0x6C, 0x60, 0x25, 0x39, 0x28, 0x2B,
- 0xCC, 0x6C, 0x63, 0x20, 0x6B, 0x28, 0x2B, 0x20,
- 0x63, 0x43, 0xF3, 0xEF, 0xF0, 0x81, 0xBA, 0xF4,
- 0xF4, 0xA6, 0xDE, 0x8C, 0xA6, 0x9A, 0xBA, 0x81,
- 0xB0, 0xE4, 0xA1, 0x20, 0x20, 0x23, 0x31, 0xC4,
- 0x30, 0x24, 0x33, 0x31, 0x31, 0x60, 0x43, 0x35,
- 0x35, 0x55, 0x6C, 0xEF, 0x81, 0xC8, 0x9A, 0xA6,
- 0xB4, 0xB4, 0x8C, 0xA6, 0xBA, 0x68, 0x30, 0x30,
- 0x30, 0x2B, 0x25, 0x54, 0xC4, 0x54, 0x24, 0x78,
- 0x63, 0x63, 0x30, 0x29, 0x21, 0x24, 0x54, 0x63,
- 0x23, 0x34, 0xCB, 0x30, 0x25, 0x39, 0x20, 0x20,
- 0x58, 0x34, 0x60, 0x23, 0x6B, 0x29, 0x28, 0x20,
- 0x22, 0xB6, 0x42, 0xB6, 0x58, 0x54, 0xF5, 0xD7,
- 0xA5, 0xBA, 0xBA, 0xBA, 0xBA, 0x81, 0xA5, 0xF1,
- 0xE4, 0x2A, 0x39, 0x20, 0x20, 0x20, 0x31, 0x60,
- 0x54, 0x28, 0x2B, 0x22, 0x33, 0x30, 0x43, 0x35,
- 0x66, 0xD1, 0x34, 0xE4, 0xEF, 0x81, 0xC8, 0x9A,
- 0x9A, 0xC8, 0xC8, 0x81, 0xF6, 0x31, 0x63, 0x31,
- 0x78, 0x2B, 0x54, 0x63, 0x54, 0x24, 0x23, 0x54,
- 0x63, 0x54, 0x63, 0x2C, 0x23, 0x33, 0x63, 0x54,
- 0x25, 0x31, 0x78, 0x30, 0x25, 0x3F, 0x20, 0x20,
- 0xAF, 0x58, 0xCC, 0x33, 0x39, 0x29, 0x29, 0x2A,
- 0x29, 0x58, 0x43, 0x42, 0xD1, 0xCB, 0x2C, 0x2C,
- 0x37, 0xCD, 0xEF, 0xB0, 0xF0, 0xB0, 0xEF, 0xE4,
- 0x63, 0x20, 0x20, 0x2C, 0x2C, 0x21, 0xCB, 0x78,
- 0x54, 0x39, 0x39, 0x28, 0x2B, 0x28, 0x2B, 0xCB,
- 0x55, 0xB6, 0xD1, 0x28, 0xE4, 0xD7, 0xB8, 0xF0,
- 0xA5, 0xB0, 0xEF, 0x26, 0x23, 0x54, 0x31, 0x58,
- 0xCB, 0x20, 0x63, 0x63, 0x25, 0x2B, 0x54, 0x78,
- 0x30, 0x63, 0x54, 0x28, 0x33, 0x63, 0x63, 0x33,
- 0x54, 0x78, 0xC4, 0x30, 0x24, 0x2C, 0x22, 0x22,
- 0x55, 0x55, 0x34, 0x30, 0x28, 0x2C, 0x29, 0x29,
- 0x28, 0x30, 0xB6, 0x42, 0x43, 0x55, 0x22, 0x29,
- 0x2C, 0x2B, 0x2B, 0x3F, 0xE4, 0xE4, 0x43, 0x66,
- 0x30, 0x23, 0x24, 0x2A, 0x28, 0x2B, 0x54, 0x63,
- 0x33, 0x39, 0x28, 0x20, 0x20, 0x20, 0x2B, 0x31,
- 0x30, 0xD1, 0x43, 0x30, 0x39, 0x28, 0xE4, 0xE4,
- 0xD7, 0xF5, 0x2B, 0x6B, 0x20, 0x30, 0x34, 0xD1,
- 0x60, 0x23, 0x63, 0x54, 0x22, 0x47, 0x60, 0xCB,
- 0xC4, 0xC4, 0x25, 0x22, 0x54, 0xC4, 0x63, 0x23,
- 0xC4, 0xC4, 0x63, 0xC4, 0x23, 0x2A, 0x24, 0x22,
- 0x55, 0x55, 0xAF, 0x6C, 0x22, 0x39, 0x2C, 0x39,
- 0x28, 0x23, 0xD1, 0x43, 0x42, 0x8A, 0x63, 0x39,
- 0x39, 0x2A, 0x20, 0x6B, 0x33, 0xCC, 0xD1, 0xB6,
- 0x30, 0x24, 0x54, 0x63, 0x31, 0xCC, 0xCC, 0xCB,
- 0xC4, 0x2A, 0x39, 0x20, 0x20, 0x20, 0x39, 0x30,
- 0x30, 0x6C, 0x43, 0x43, 0x6C, 0x63, 0x25, 0x24,
- 0x63, 0x63, 0x63, 0x25, 0x63, 0xCC, 0xD1, 0x34,
- 0x63, 0x25, 0x54, 0x25, 0x2A, 0x28, 0x31, 0xCB,
- 0x63, 0x78, 0x24, 0x33, 0xC4, 0xC4, 0x33, 0x2C,
- 0xC4, 0x54, 0x54, 0x30, 0x21, 0x22, 0x25, 0x23,
- 0x55, 0x55, 0xD1, 0x58, 0x33, 0x6B, 0x2C, 0x39,
- 0x39, 0x39, 0x34, 0x43, 0x42, 0x43, 0xCC, 0x2B,
- 0x28, 0x29, 0x20, 0x28, 0x21, 0x30, 0xCC, 0xAF,
- 0x54, 0x23, 0xC4, 0x54, 0x58, 0x2E, 0x35, 0x42,
- 0x55, 0x54, 0x8B, 0x2A, 0x20, 0x20, 0x28, 0x22,
- 0x78, 0x30, 0xD1, 0x43, 0x44, 0x6C, 0xC4, 0xC4,
- 0x60, 0x31, 0x31, 0x63, 0x6C, 0xAF, 0xCC, 0xCB,
- 0x24, 0x25, 0x33, 0x23, 0x2C, 0x24, 0x31, 0x30,
- 0x63, 0xC4, 0x21, 0x54, 0x30, 0x63, 0x24, 0x2A,
- 0x54, 0x63, 0x54, 0xC4, 0x2B, 0x24, 0x33, 0x24,
- 0x34, 0x55, 0xD1, 0x55, 0x30, 0x28, 0x29, 0x39,
- 0x39, 0x8B, 0x63, 0x55, 0x42, 0x66, 0xB6, 0x25,
- 0x29, 0x29, 0x29, 0x28, 0x2A, 0x54, 0x78, 0x6C,
- 0x23, 0x20, 0x25, 0x30, 0xCB, 0x62, 0x35, 0x35,
- 0x35, 0x44, 0x24, 0x6B, 0x29, 0x20, 0x2A, 0x39,
- 0x28, 0x63, 0x34, 0xB6, 0x34, 0xCB, 0x63, 0x30,
- 0x31, 0x31, 0x30, 0x30, 0xCC, 0x60, 0x63, 0xC4,
- 0x20, 0x33, 0x25, 0x20, 0x48, 0x33, 0x30, 0x54,
- 0x78, 0x54, 0x2B, 0x63, 0x30, 0x63, 0x23, 0x22,
- 0x63, 0x63, 0x63, 0x33, 0x28, 0x25, 0x54, 0x24,
- 0x78, 0xAF, 0xD1, 0xD1, 0xCC, 0x22, 0x39, 0x39,
- 0x2C, 0x3F, 0x2B, 0x34, 0xB6, 0x43, 0x43, 0xC4,
- 0x2B, 0x28, 0x39, 0x50, 0x2C, 0x24, 0x63, 0x78,
- 0x21, 0x2C, 0x2A, 0x23, 0x54, 0xD1, 0x35, 0x35,
- 0x35, 0x35, 0x55, 0x22, 0x39, 0x2C, 0x2C, 0x2C,
- 0x20, 0x30, 0xCC, 0x6C, 0xCB, 0x30, 0x54, 0x30,
- 0x78, 0x63, 0x78, 0x30, 0x54, 0x78, 0x30, 0x23,
- 0x2B, 0x33, 0x24, 0x28, 0x39, 0x24, 0x54, 0x30,
- 0x78, 0x33, 0x25, 0xC4, 0xC4, 0x33, 0x39, 0x25,
- 0xC4, 0x63, 0xC4, 0x24, 0x20, 0x54, 0x54, 0x25,
- 0x63, 0xCC, 0xD1, 0xB6, 0x55, 0x54, 0x39, 0x29,
- 0x39, 0x2C, 0x6B, 0x30, 0xAF, 0xB6, 0xB6, 0x60,
- 0x22, 0x2A, 0x2C, 0x39, 0x2C, 0x21, 0x54, 0x63,
- 0x21, 0x50, 0x2C, 0x2C, 0x2B, 0x25, 0x62, 0x35,
- 0x35, 0x35, 0x35, 0xCC, 0x2B, 0x29, 0x2B, 0x20,
- 0x23, 0x25, 0xC4, 0x30, 0xC4, 0x63, 0x63, 0x63,
- 0x63, 0x33, 0x24, 0x31, 0x31, 0x31, 0x54, 0x28,
- 0x24, 0x25, 0x22, 0x6B, 0x28, 0x24, 0xC4, 0x78,
- 0x30, 0x24, 0x63, 0xC4, 0x54, 0x23, 0x29, 0x63,
- 0xC4, 0x54, 0xC4, 0x21, 0x24, 0x54, 0x54, 0x25,
- 0x30, 0xCB, 0xD1, 0xB6, 0x55, 0x63, 0x28, 0x29,
- 0x39, 0x39, 0x48, 0x33, 0x58, 0x44, 0xB6, 0x60,
- 0x24, 0x20, 0x2B, 0x28, 0x2A, 0x22, 0x54, 0x63,
- 0x21, 0x48, 0x2A, 0x2B, 0x39, 0x21, 0xB6, 0x35,
- 0x35, 0x35, 0x35, 0x42, 0x23, 0x29, 0x2A, 0x2B,
- 0x23, 0x25, 0x54, 0x54, 0x54, 0x63, 0x63, 0x30,
- 0x25, 0x2B, 0x31, 0x31, 0x31, 0x31, 0x21, 0x2C,
- 0x33, 0x25, 0x21, 0x39, 0x20, 0x25, 0x30, 0x78,
- 0xC4, 0x23, 0xC4, 0x30, 0x54, 0x20, 0x28, 0x63,
- 0x63, 0x63, 0x63, 0x20, 0x25, 0x54, 0x54, 0x20,
+ 0x20, 0x4B, 0xC5, 0x7D, 0x24, 0xEE, 0x67, 0x30,
+ 0x30, 0x8D, 0x67, 0x8E, 0xF9, 0xF7, 0x97, 0xDD,
+ 0x2F, 0x2F, 0x51, 0x89, 0x89, 0x2F, 0x55, 0x2A,
+ 0xA5, 0x8F, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xDD, 0xA3, 0x66, 0x98, 0x66, 0x2F, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0xB2, 0x51, 0x89, 0x44, 0xE0, 0x5E,
+ 0x91, 0x9F, 0x9F, 0x7D, 0x7D, 0xD9, 0x24, 0xF0,
+ 0x79, 0x8E, 0xEE, 0x8E, 0x24, 0x40, 0x65, 0x35,
+ 0x69, 0x2E, 0x98, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F, 0x2F, 0x98,
+ 0xA5, 0xA7, 0x95, 0xD7, 0x8C, 0xF0, 0x8E, 0x8E,
+ 0xEE, 0x79, 0xF0, 0xED, 0x50, 0xE8, 0x89, 0x2F,
+ 0xA3, 0xA3, 0xB2, 0x89, 0xB2, 0x66, 0xA0, 0x55,
+ 0x8F, 0x98, 0x66, 0xA3, 0xB2, 0x51, 0x51, 0xB2,
+ 0x74, 0xA0, 0xA0, 0x98, 0x66, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0xA3, 0x2F,
+ 0x51, 0x83, 0xE4, 0x87, 0xB8, 0xFA, 0xA9, 0xC6,
+ 0x40, 0x64, 0x64, 0x50, 0xD7, 0x65, 0x35, 0x60,
+ 0x98, 0xB2, 0x66, 0x66, 0xA3, 0x2F, 0xA3, 0xA3,
+ 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0xA3, 0x2F, 0xB2,
+ 0x89, 0xDD, 0x9B, 0xC0, 0x7D, 0x50, 0x8C, 0xED,
+ 0xED, 0x8C, 0x40, 0x9F, 0x4E, 0x51, 0xB2, 0x2F,
+ 0x2F, 0x2F, 0xB2, 0x51, 0xA3, 0x98, 0xA0, 0x55,
+ 0xA0, 0xA0, 0x8F, 0x66, 0x2F, 0x51, 0xB2, 0xA3,
+ 0xA3, 0x2A, 0x55, 0x98, 0xA3, 0x2F, 0xB2, 0x2F,
+ 0x66, 0x66, 0x2F, 0xB2, 0xD1, 0x2F, 0x2F, 0xA3,
+ 0xB2, 0xB2, 0xA3, 0x8F, 0xA3, 0x2F, 0xD1, 0x94,
+ 0xEC, 0x65, 0x65, 0xC0, 0xC0, 0x35, 0x95, 0xC2,
+ 0xA3, 0x98, 0x66, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0xA3, 0x2F, 0xB2, 0x2F, 0x2F, 0x2F, 0x2F, 0x51,
+ 0x89, 0x44, 0xD1, 0x60, 0x35, 0xA9, 0x32, 0xC6,
+ 0xD7, 0x32, 0x94, 0x44, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0x8F, 0xA0, 0xA0,
+ 0x55, 0xA0, 0x8F, 0xA3, 0x51, 0x51, 0x2F, 0xA3,
+ 0x8F, 0x2A, 0x55, 0x66, 0xA3, 0x2F, 0x2F, 0xB2,
+ 0xA3, 0x66, 0x2F, 0xB2, 0x51, 0xB2, 0x2F, 0x66,
+ 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x8F, 0xA0, 0x2F,
+ 0x5E, 0xDF, 0xB9, 0x60, 0x95, 0xD3, 0x89, 0x2F,
+ 0xA3, 0x66, 0xA3, 0x2F, 0xB2, 0x2F, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x51, 0x2F, 0x8F, 0x2F, 0xC4, 0xB9, 0x9B, 0xEC,
+ 0x53, 0xB3, 0x4E, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0xA3, 0x66, 0xA3, 0xA3, 0x66, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0xA3, 0x51, 0x89, 0x51, 0xA3, 0x66,
+ 0xA0, 0x55, 0x8F, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x2F, 0xA3, 0x2F, 0x51, 0x51, 0xB2, 0xA3, 0x66,
+ 0x66, 0xA3, 0x66, 0x66, 0x66, 0x66, 0x66, 0xA3,
+ 0xB2, 0xC2, 0x74, 0xD8, 0xB2, 0xA3, 0xA3, 0xA3,
+ 0x66, 0x66, 0x2F, 0x2F, 0xA3, 0x66, 0x66, 0x66,
+ 0xA3, 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0xB2,
+ 0x2F, 0x66, 0xA0, 0x55, 0x98, 0x2F, 0x89, 0x89,
+ 0x89, 0xB2, 0x2F, 0xA3, 0x2F, 0x51, 0x51, 0xB2,
+ 0x2F, 0x66, 0xA3, 0xA3, 0x66, 0x66, 0x66, 0x66,
+ 0x66, 0xA3, 0xB2, 0x89, 0xD8, 0x51, 0xA3, 0x98,
+ 0x66, 0x98, 0x66, 0x2F, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0xB2, 0xA3, 0xA3, 0xB2, 0xB2, 0xB2, 0x2F, 0xA3,
+ 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xB2,
+ 0x89, 0xD8, 0x89, 0x2F, 0x66, 0x66, 0xA3, 0xA3,
+ 0x98, 0x98, 0x66, 0x66, 0x98, 0x98, 0x66, 0xA3,
+ 0x2F, 0xA3, 0xB2, 0xB2, 0xB2, 0xB2, 0x2F, 0x2F,
+ 0xB2, 0x2F, 0x66, 0x98, 0x66, 0xA3, 0x2F, 0x2F,
+ 0x2F, 0xB2, 0x2F, 0xA3, 0xA3, 0xB2, 0xB2, 0x2F,
+ 0x2F, 0x66, 0x66, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F,
+ 0x2F, 0xB2, 0x89, 0xD8, 0x44, 0x2F, 0x66, 0x66,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F, 0xA3,
+ 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0x51, 0x51,
+ 0x89, 0x89, 0xB2, 0xA3, 0x98, 0x66, 0xA3, 0x66,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x66, 0xA3, 0x2F,
+ 0xA3, 0x2F, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0x2F, 0xA3, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xB2, 0xB2, 0xA3, 0xA3, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0xA3, 0x66, 0xA3, 0x2F, 0xB2, 0xB2, 0xB2,
+ 0x51, 0x51, 0x89, 0x89, 0xB2, 0xA3, 0x98, 0x66
};
unsigned char linux_logo_bw[] __initdata = {
@@ -1021,22 +1026,22 @@ unsigned char linux_logo_bw[] __initdata = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
-/* Painted by Johnny Stenback <jst@uwasa.fi> */
+unsigned char linux_logo16_red[0];
+unsigned char linux_logo16_green[0];
+unsigned char linux_logo16_blue[0];
+unsigned char linux_logo16[0];
+
+#else
+
+/* prototypes only */
+extern unsigned char linux_logo_red[];
+extern unsigned char linux_logo_green[];
+extern unsigned char linux_logo_blue[];
+extern unsigned char linux_logo[];
+extern unsigned char linux_logo_bw[];
+extern unsigned char linux_logo16_red[];
+extern unsigned char linux_logo16_green[];
+extern unsigned char linux_logo16_blue[];
+extern unsigned char linux_logo16[];
-unsigned char *linux_serial_image __initdata = "\n"
-" .u$e.\n"
-" .$$$$$:S\n"
-" $\"*$/\"*$$\n"
-" $.`$ . ^F\n"
-" 4k+#+T.$F\n"
-" 4P+++\"$\"$\n"
-" :R\"+ t$$B\n"
-" ___# $$$\n"
-" | | R$$k\n"
-" dd. | Linux $!$\n"
-" ddd | Sparc $9$F\n"
-" '!!!!!$ !!#!`\n"
-" !!!!!* .!!!!!`\n"
-"'!!!!!!!W..e$$!!!!!!` %s\n"
-" \"~^^~ ^~~^\n"
-"\n";
+#endif
diff --git a/include/asm-sparc64/mmu_context.h b/include/asm-sparc64/mmu_context.h
index 44209a120..1d8a9f7ee 100644
--- a/include/asm-sparc64/mmu_context.h
+++ b/include/asm-sparc64/mmu_context.h
@@ -1,4 +1,4 @@
-/* $Id: mmu_context.h,v 1.20 1997/09/18 10:42:08 rth Exp $ */
+/* $Id: mmu_context.h,v 1.26 1998/07/31 10:42:38 jj Exp $ */
#ifndef __SPARC64_MMU_CONTEXT_H
#define __SPARC64_MMU_CONTEXT_H
@@ -6,70 +6,80 @@
#include <asm/system.h>
#include <asm/spitfire.h>
+#include <asm/spinlock.h>
#define NO_CONTEXT 0
#ifndef __ASSEMBLY__
extern unsigned long tlb_context_cache;
+extern spinlock_t scheduler_lock;
+extern unsigned long mmu_context_bmap[];
-#define CTX_VERSION_SHIFT PAGE_SHIFT
+#define CTX_VERSION_SHIFT (PAGE_SHIFT - 3)
#define CTX_VERSION_MASK ((~0UL) << CTX_VERSION_SHIFT)
#define CTX_FIRST_VERSION ((1UL << CTX_VERSION_SHIFT) + 1UL)
-extern void get_new_mmu_context(struct mm_struct *mm, unsigned long *ctx);
+extern void get_new_mmu_context(struct mm_struct *mm);
/* Initialize/destroy the context related info for a new mm_struct
* instance.
*/
#define init_new_context(mm) ((mm)->context = NO_CONTEXT)
-#define destroy_context(mm) ((mm)->context = NO_CONTEXT)
-
-#ifdef __SMP__
-#define LOCAL_FLUSH_PENDING(cpu) \
- ((cpu_data[(cpu)].last_tlbversion_seen ^ tlb_context_cache) & CTX_VERSION_MASK)
-#define DO_LOCAL_FLUSH(cpu) do { __flush_tlb_all(); \
- cpu_data[cpu].last_tlbversion_seen = \
- tlb_context_cache & CTX_VERSION_MASK; \
- } while(0)
-#else
-#define LOCAL_FLUSH_PENDING(cpu) 0
-#define DO_LOCAL_FLUSH(cpu) do { __flush_tlb_all(); } while(0)
-#endif
-
-extern void __flush_tlb_all(void);
+#define destroy_context(mm) do { \
+ if ((mm)->context != NO_CONTEXT) { \
+ spin_lock(&scheduler_lock); \
+ if (!(((mm)->context ^ tlb_context_cache) & CTX_VERSION_MASK)) \
+ clear_bit((mm)->context & ~(CTX_VERSION_MASK), \
+ mmu_context_bmap); \
+ spin_unlock(&scheduler_lock); \
+ (mm)->context = NO_CONTEXT; \
+ } \
+} while (0)
extern __inline__ void get_mmu_context(struct task_struct *tsk)
{
register unsigned long paddr asm("o5");
+ register unsigned long pgd_cache asm("o4");
struct mm_struct *mm = tsk->mm;
flushw_user();
- if(LOCAL_FLUSH_PENDING(current->processor))
- DO_LOCAL_FLUSH(current->processor);
if(!(tsk->tss.flags & SPARC_FLAG_KTHREAD) &&
!(tsk->flags & PF_EXITING)) {
unsigned long ctx = tlb_context_cache;
if((mm->context ^ ctx) & CTX_VERSION_MASK)
- get_new_mmu_context(mm, &tlb_context_cache);
-
+ get_new_mmu_context(mm);
+ if(!(mm->cpu_vm_mask & (1UL<<smp_processor_id()))) {
+ spitfire_set_secondary_context(mm->context & 0x3ff);
+ __asm__ __volatile__("flush %g6");
+ spitfire_flush_dtlb_secondary_context();
+ spitfire_flush_itlb_secondary_context();
+ __asm__ __volatile__("flush %g6");
+ }
/* Don't worry, set_fs() will restore it... */
/* Sigh, damned include loops... just poke seg directly. */
tsk->tss.ctx = (tsk->tss.current_ds.seg ?
- (mm->context & 0x1fff) : 0);
+ (mm->context & 0x3ff) : 0);
} else
tsk->tss.ctx = 0;
spitfire_set_secondary_context(tsk->tss.ctx);
__asm__ __volatile__("flush %g6");
paddr = __pa(mm->pgd);
+ if(tsk->tss.flags & SPARC_FLAG_32BIT)
+ pgd_cache = (unsigned long) mm->pgd[0];
+ else
+ pgd_cache = 0;
__asm__ __volatile__("
- rdpr %%pstate, %%o4
- wrpr %%o4, %1, %%pstate
+ rdpr %%pstate, %%o3
+ wrpr %%o3, %2, %%pstate
+ mov %4, %%g4
mov %0, %%g7
- wrpr %%o4, 0x0, %%pstate
+ stxa %1, [%%g4] %3
+ wrpr %%o3, 0x0, %%pstate
" : /* no outputs */
- : "r" (paddr), "i" (PSTATE_MG|PSTATE_IE)
- : "o4");
+ : "r" (paddr), "r" (pgd_cache), "i" (PSTATE_MG|PSTATE_IE),
+ "i" (ASI_DMMU), "i" (TSB_REG)
+ : "o3");
}
/*
diff --git a/include/asm-sparc64/page.h b/include/asm-sparc64/page.h
index 86ec1477d..fe33651cf 100644
--- a/include/asm-sparc64/page.h
+++ b/include/asm-sparc64/page.h
@@ -1,4 +1,4 @@
-/* $Id: page.h,v 1.17 1998/01/14 17:16:28 jj Exp $ */
+/* $Id: page.h,v 1.23 1998/06/12 14:54:33 jj Exp $ */
#ifndef _SPARC64_PAGE_H
#define _SPARC64_PAGE_H
@@ -13,12 +13,12 @@
#define PAGE_MASK (~(PAGE_SIZE-1))
+
#ifdef __KERNEL__
#ifndef __ASSEMBLY__
-#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
-
+#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
extern void copy_page(unsigned long to, unsigned long from);
/* GROSS, defining this makes gcc pass these types as aggregates,
@@ -82,8 +82,7 @@ typedef unsigned long iopgprot_t;
#endif /* (STRICT_MM_TYPECHECKS) */
#define TASK_UNMAPPED_BASE ((current->tss.flags & SPARC_FLAG_32BIT) ? \
- (0x0000000070000000UL) : \
- (0xfffff80000000000UL))
+ (0x0000000070000000UL) : (PAGE_OFFSET))
#endif /* !(__ASSEMBLY__) */
diff --git a/include/asm-sparc64/pbm.h b/include/asm-sparc64/pbm.h
index 3adcc9583..adb1e10bf 100644
--- a/include/asm-sparc64/pbm.h
+++ b/include/asm-sparc64/pbm.h
@@ -1,4 +1,4 @@
-/* $Id: pbm.h,v 1.12 1998/04/10 12:29:55 ecd Exp $
+/* $Id: pbm.h,v 1.14 1998/05/29 06:00:40 ecd Exp $
* pbm.h: U2P PCI bus module pseudo driver software state.
*
* Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
@@ -74,46 +74,13 @@ struct pcidev_cookie {
int prom_node;
};
-extern struct linux_psycho *psycho_root;
-extern struct linux_psycho **psycho_index_map;
-extern int linux_num_psycho;
-static __inline__ struct linux_psycho *
-psycho_by_index(int index)
-{
- if (index >= linux_num_psycho)
- return NULL;
- return psycho_index_map[index];
-}
+#define PCI_IRQ_IGN 0x000007c0 /* PSYCHO "Int Group Number". */
+#define PCI_IRQ_INO 0x0000003f /* PSYCHO INO. */
-/* Special PCI IRQ encoding, this just makes life easier for the generic
- * irq registry layer, there is already enough crap in there due to sbus,
- * fhc, and dcookies.
- */
-#define PCI_IRQ_IDENT 0x80000000 /* This tells irq.c what we are */
-#define PCI_IRQ_IMAP_OFF 0x7ff00000 /* Offset from first PSYCHO imap */
-#define PCI_IRQ_IMAP_OFF_SHFT 20
-#define PCI_IRQ_BUSNO 0x000fc000 /* PSYCHO instance */
-#define PCI_IRQ_BUSNO_SHFT 14
-#define PCI_IRQ_IGN 0x000007c0 /* PSYCHO "Int Group Number" */
-#define PCI_IRQ_INO 0x0000003f /* PSYCHO INO */
-
-#define PCI_IRQ_P(__irq) (((__irq) & PCI_IRQ_IDENT) != 0)
-
-extern __inline__ unsigned int pci_irq_encode(unsigned long imap_off,
- unsigned long psycho_instance,
- unsigned long ign,
- unsigned long ino)
-{
- unsigned int irq;
-
- irq = PCI_IRQ_IDENT;
- irq |= ((imap_off << PCI_IRQ_IMAP_OFF_SHFT) & PCI_IRQ_IMAP_OFF);
- irq |= ((psycho_instance << PCI_IRQ_BUSNO_SHFT) & PCI_IRQ_BUSNO);
- irq |= ((ign << 6) & PCI_IRQ_IGN);
- irq |= (ino & PCI_IRQ_INO);
-
- return irq;
-}
+/* Used by EBus */
+extern unsigned int psycho_irq_build(struct linux_pbm_info *pbm,
+ struct pci_dev *pdev,
+ unsigned int full_ino);
#endif /* !(__SPARC64_PBM_H) */
diff --git a/include/asm-sparc64/pgtable.h b/include/asm-sparc64/pgtable.h
index c57eb06cf..2bc6695b7 100644
--- a/include/asm-sparc64/pgtable.h
+++ b/include/asm-sparc64/pgtable.h
@@ -1,4 +1,4 @@
-/* $Id: pgtable.h,v 1.64 1998/02/16 14:06:44 jj Exp $
+/* $Id: pgtable.h,v 1.85 1998/08/04 20:51:33 davem Exp $
* pgtable.h: SpitFire page table operations.
*
* Copyright 1996,1997 David S. Miller (davem@caip.rutgers.edu)
@@ -41,10 +41,20 @@
/* Entries per page directory level. */
#define PTRS_PER_PTE (1UL << (PAGE_SHIFT-3))
-#define PTRS_PER_PMD (1UL << (PAGE_SHIFT-2))
-/* We cannot use the top 16G because a half of mm/ would break, so why to check it */
+
+/* We the first one in this file, what we export to the kernel
+ * is different so we can optimize correctly for 32-bit tasks.
+ */
+#define REAL_PTRS_PER_PMD (1UL << (PAGE_SHIFT-2))
+#define PTRS_PER_PMD ((const int)((current->tss.flags & SPARC_FLAG_32BIT) ? \
+ (REAL_PTRS_PER_PMD >> 2) : (REAL_PTRS_PER_PMD)))
+
+/* We cannot use the top 16G because VPTE table lives there. */
#define PTRS_PER_PGD ((1UL << (PAGE_SHIFT-3))-1)
-#define USER_PTRS_PER_PGD PTRS_PER_PGD /* Kernel has a separate 44bit address space */
+
+/* Kernel has a separate 44bit address space. */
+#define USER_PTRS_PER_PGD ((const int)((current->tss.flags & SPARC_FLAG_32BIT) ? \
+ (1) : (PTRS_PER_PGD)))
#define PTE_TABLE_SIZE 0x2000 /* 1024 entries 8 bytes each */
#define PMD_TABLE_SIZE 0x2000 /* 2048 entries 4 bytes each */
@@ -54,8 +64,9 @@
#define PTRS_PER_PAGE (1UL << (PAGE_SHIFT-3))
/* NOTE: TLB miss handlers depend heavily upon where this is. */
-#define VMALLOC_START 0x0000000800000000UL
+#define VMALLOC_START 0x0000000140000000UL
#define VMALLOC_VMADDR(x) ((unsigned long)(x))
+#define VMALLOC_END 0x0000000200000000UL
#endif /* !(__ASSEMBLY__) */
@@ -93,8 +104,7 @@
#define __ACCESS_BITS (_PAGE_ACCESSED | _PAGE_READ | _PAGE_R)
#define __PRIV_BITS _PAGE_P
-#define PAGE_NONE __pgprot (_PAGE_PRESENT | _PAGE_VALID | _PAGE_CACHE | \
- __PRIV_BITS | __ACCESS_BITS)
+#define PAGE_NONE __pgprot (_PAGE_PRESENT | _PAGE_ACCESSED)
#define PAGE_SHARED __pgprot (_PAGE_PRESENT | _PAGE_VALID | _PAGE_CACHE | \
__ACCESS_BITS | _PAGE_W | _PAGE_WRITE)
@@ -137,11 +147,7 @@
#ifndef __ASSEMBLY__
extern pte_t __bad_page(void);
-extern pmd_t *__bad_pmd(void);
-extern pte_t *__bad_pte(void);
-#define BAD_PMD __bad_pmd()
-#define BAD_PTE __bad_pte()
#define BAD_PAGE __bad_page()
/* First physical page can be anywhere, the following is needed so that
@@ -151,12 +157,9 @@ extern pte_t *__bad_pte(void);
extern unsigned long phys_base;
#define ZERO_PAGE ((unsigned long)__va(phys_base))
-/* This is for making TLB miss faster to process. */
-#define null_pmd_table (null_pte_table - PAGE_SIZE)
-extern unsigned int null_pte_table;
-
/* Allocate a block of RAM which is aligned to its size.
- This procedure can be used until the call to mem_init(). */
+ * This procedure can be used until the call to mem_init().
+ */
extern void *sparc_init_alloc(unsigned long *kbrk, unsigned long size);
/* Cache and TLB flush operations. */
@@ -173,36 +176,38 @@ extern void *sparc_init_alloc(unsigned long *kbrk, unsigned long size);
extern void __flush_cache_all(void);
extern void __flush_tlb_all(void);
-extern void __flush_tlb_mm(unsigned long context);
+extern void __flush_tlb_mm(unsigned long context, unsigned long r);
extern void __flush_tlb_range(unsigned long context, unsigned long start,
- unsigned long end);
-extern void __flush_tlb_page(unsigned long context, unsigned long page);
+ unsigned long r, unsigned long end,
+ unsigned long pgsz, unsigned long size);
+extern void __flush_tlb_page(unsigned long context, unsigned long page, unsigned long r);
#ifndef __SMP__
#define flush_cache_all() __flush_cache_all()
#define flush_tlb_all() __flush_tlb_all()
-extern __inline__ void flush_tlb_mm(struct mm_struct *mm)
-{
- if(mm->context != NO_CONTEXT)
- __flush_tlb_mm(mm->context & 0x1fff);
-}
-
-extern __inline__ void flush_tlb_range(struct mm_struct *mm, unsigned long start,
- unsigned long end)
-{
- if(mm->context != NO_CONTEXT)
- __flush_tlb_range(mm->context & 0x1fff, start, end);
-}
-
-extern __inline__ void flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
-{
- struct mm_struct *mm = vma->vm_mm;
-
- if(mm->context != NO_CONTEXT)
- __flush_tlb_page(mm->context & 0x1fff, page & PAGE_MASK);
-}
+#define flush_tlb_mm(mm) \
+do { if((mm)->context != NO_CONTEXT) \
+ __flush_tlb_mm((mm)->context & 0x3ff, SECONDARY_CONTEXT); \
+} while(0)
+
+#define flush_tlb_range(mm, start, end) \
+do { if((mm)->context != NO_CONTEXT) { \
+ unsigned long __start = (start)&PAGE_MASK; \
+ unsigned long __end = (end)&PAGE_MASK; \
+ __flush_tlb_range((mm)->context & 0x3ff, __start, \
+ SECONDARY_CONTEXT, __end, PAGE_SIZE, \
+ (__end - __start)); \
+ } \
+} while(0)
+
+#define flush_tlb_page(vma, page) \
+do { struct mm_struct *__mm = (vma)->vm_mm; \
+ if(__mm->context != NO_CONTEXT) \
+ __flush_tlb_page(__mm->context & 0x3ff, (page)&PAGE_MASK, \
+ SECONDARY_CONTEXT); \
+} while(0)
#else /* __SMP__ */
@@ -239,105 +244,74 @@ extern __inline__ void flush_tlb_page(struct vm_area_struct *vma, unsigned long
#endif
-extern inline pte_t mk_pte(unsigned long page, pgprot_t pgprot)
-{ return __pte(__pa(page) | pgprot_val(pgprot)); }
-
-extern inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot)
-{ return __pte(physpage | pgprot_val(pgprot)); }
-
-extern inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
-{ pte_val(pte) = (pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot); return pte; }
-
-extern inline void pmd_set(pmd_t *pmdp, pte_t *ptep)
-{ pmd_val(*pmdp) = __pa((unsigned long) ptep); }
-
-extern inline void pgd_set(pgd_t *pgdp, pmd_t *pmdp)
-{ pgd_val(*pgdp) = __pa((unsigned long) pmdp); }
-
-extern inline unsigned long pte_page(pte_t pte)
-{ return (unsigned long) __va((pte_val(pte) & _PFN_MASK)); }
-
-extern inline unsigned long pmd_page(pmd_t pmd)
-{ return (unsigned long) __va(pmd_val(pmd)); }
-
-extern inline unsigned long pgd_page(pgd_t pgd)
-{ return (unsigned long) __va(pgd_val(pgd)); }
-
-#define PMD_NONE_MAGIC 0x40
-#define PGD_NONE_MAGIC 0x40
-
-extern inline int pte_none(pte_t pte) { return !pte_val(pte); }
-extern inline int pte_present(pte_t pte) { return pte_val(pte) & _PAGE_PRESENT; }
-extern inline void pte_clear(pte_t *pte) { pte_val(*pte) = 0; }
-
-extern inline int pmd_none(pmd_t pmd) { return pmd_val(pmd)&PMD_NONE_MAGIC; }
-extern inline int pmd_bad(pmd_t pmd) { return 0; }
-extern inline int pmd_present(pmd_t pmd) { return !(pmd_val(pmd)&PMD_NONE_MAGIC);}
-extern inline void pmd_clear(pmd_t *pmdp) { pmd_val(*pmdp) = null_pte_table; }
-
-extern inline int pgd_none(pgd_t pgd) { return pgd_val(pgd) & PGD_NONE_MAGIC; }
-extern inline int pgd_bad(pgd_t pgd) { return 0; }
-extern inline int pgd_present(pgd_t pgd) { return !(pgd_val(pgd)&PGD_NONE_MAGIC);}
-extern inline void pgd_clear(pgd_t *pgdp) { pgd_val(*pgdp) = null_pmd_table; }
+#define mk_pte(page, pgprot) (__pte(__pa(page) | pgprot_val(pgprot)))
+#define mk_pte_phys(physpage, pgprot) (__pte((physpage) | pgprot_val(pgprot)))
+#define pte_modify(_pte, newprot) \
+ (pte_val(_pte) = ((pte_val(_pte) & _PAGE_CHG_MASK) | pgprot_val(newprot)))
+#define pmd_set(pmdp, ptep) (pmd_val(*(pmdp)) = __pa((unsigned long) (ptep)))
+#define pgd_set(pgdp, pmdp) (pgd_val(*(pgdp)) = __pa((unsigned long) (pmdp)))
+#define pte_page(pte) ((unsigned long) __va(((pte_val(pte)&~PAGE_OFFSET)&~(0xfffUL))))
+#define pmd_page(pmd) ((unsigned long) __va(pmd_val(pmd)))
+#define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd)))
+#define pte_none(pte) (!pte_val(pte))
+#define pte_present(pte) (pte_val(pte) & _PAGE_PRESENT)
+#define pte_clear(pte) (pte_val(*(pte)) = 0UL)
+#define pmd_none(pmd) (!pmd_val(pmd))
+#define pmd_bad(pmd) (0)
+#define pmd_present(pmd) (pmd_val(pmd) != 0UL)
+#define pmd_clear(pmdp) (pmd_val(*(pmdp)) = 0UL)
+#define pgd_none(pgd) (!pgd_val(pgd))
+#define pgd_bad(pgd) (0)
+#define pgd_present(pgd) (pgd_val(pgd) != 0UL)
+#define pgd_clear(pgdp) (pgd_val(*(pgdp)) = 0UL)
/* The following only work if pte_present() is true.
* Undefined behaviour if not..
*/
-extern inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_READ; }
-extern inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITE; }
-extern inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_MODIFIED; }
-extern inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; }
-
-extern inline pte_t pte_wrprotect(pte_t pte)
-{ return __pte(pte_val(pte) & ~(_PAGE_WRITE|_PAGE_W)); }
-
-extern inline pte_t pte_rdprotect(pte_t pte)
-{ return __pte(pte_val(pte) & ~(_PAGE_READ|_PAGE_R)); }
-
-extern inline pte_t pte_mkclean(pte_t pte)
-{ return __pte(pte_val(pte) & ~(_PAGE_MODIFIED | _PAGE_W)); }
-
-extern inline pte_t pte_mkold(pte_t pte)
-{ return __pte(pte_val(pte) & ~(_PAGE_ACCESSED | _PAGE_R)); }
-
-extern inline pte_t pte_mkwrite(pte_t pte)
-{
- if(pte_val(pte) & _PAGE_MODIFIED)
- return __pte(pte_val(pte) | (_PAGE_WRITE | _PAGE_W));
+#define pte_read(pte) (pte_val(pte) & _PAGE_READ)
+#define pte_write(pte) (pte_val(pte) & _PAGE_WRITE)
+#define pte_dirty(pte) (pte_val(pte) & _PAGE_MODIFIED)
+#define pte_young(pte) (pte_val(pte) & _PAGE_ACCESSED)
+#define pte_wrprotect(pte) (__pte(pte_val(pte) & ~(_PAGE_WRITE|_PAGE_W)))
+#define pte_rdprotect(pte) (__pte(((pte_val(pte)<<1UL)>>1UL) & ~_PAGE_READ))
+#define pte_mkclean(pte) (__pte(pte_val(pte) & ~(_PAGE_MODIFIED|_PAGE_W)))
+#define pte_mkold(pte) (__pte(((pte_val(pte)<<1UL)>>1UL) & ~_PAGE_ACCESSED))
+
+/* Be very careful when you change these three, they are delicate. */
+static __inline__ pte_t pte_mkyoung(pte_t _pte)
+{ if(pte_val(_pte) & _PAGE_READ)
+ return __pte(pte_val(_pte)|(_PAGE_ACCESSED|_PAGE_R));
else
- return __pte(pte_val(pte) | (_PAGE_WRITE));
+ return __pte(pte_val(_pte)|(_PAGE_ACCESSED));
}
-extern inline pte_t pte_mkdirty(pte_t pte)
-{
- if(pte_val(pte) & _PAGE_WRITE)
- return __pte(pte_val(pte) | (_PAGE_MODIFIED | _PAGE_W));
+static __inline__ pte_t pte_mkwrite(pte_t _pte)
+{ if(pte_val(_pte) & _PAGE_MODIFIED)
+ return __pte(pte_val(_pte)|(_PAGE_WRITE|_PAGE_W));
else
- return __pte(pte_val(pte) | (_PAGE_MODIFIED));
+ return __pte(pte_val(_pte)|(_PAGE_WRITE));
}
-extern inline pte_t pte_mkyoung(pte_t pte)
-{
- if(pte_val(pte) & _PAGE_READ)
- return __pte(pte_val(pte) | (_PAGE_ACCESSED | _PAGE_R));
+static __inline__ pte_t pte_mkdirty(pte_t _pte)
+{ if(pte_val(_pte) & _PAGE_WRITE)
+ return __pte(pte_val(_pte)|(_PAGE_MODIFIED|_PAGE_W));
else
- return __pte(pte_val(pte) | (_PAGE_ACCESSED));
+ return __pte(pte_val(_pte)|(_PAGE_MODIFIED));
}
/* to find an entry in a page-table-directory. */
-extern inline pgd_t *pgd_offset(struct mm_struct *mm, unsigned long address)
-{ return mm->pgd + ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD)); }
+#define pgd_offset(mm, address) ((mm)->pgd + ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD)))
/* to find an entry in a kernel page-table-directory */
#define pgd_offset_k(address) pgd_offset(&init_mm, address)
/* Find an entry in the second-level page table.. */
-extern inline pmd_t *pmd_offset(pgd_t *dir, unsigned long address)
-{ return (pmd_t *) pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PMD - 1)); }
+#define pmd_offset(dir, address) ((pmd_t *) pgd_page(*(dir)) + \
+ ((address >> PMD_SHIFT) & (REAL_PTRS_PER_PMD-1)))
/* Find an entry in the third-level page table.. */
-extern inline pte_t *pte_offset(pmd_t *dir, unsigned long address)
-{ return (pte_t *) pmd_page(*dir) + ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)); }
+#define pte_offset(dir, address) ((pte_t *) pmd_page(*(dir)) + \
+ ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)))
/* Very stupidly, we used to get new pgd's and pmd's, init their contents
* to point to the NULL versions of the next level page table, later on
@@ -352,31 +326,68 @@ extern inline pte_t *pte_offset(pmd_t *dir, unsigned long address)
#else
extern struct pgtable_cache_struct {
unsigned long *pgd_cache;
- unsigned long *pmd_cache;
unsigned long *pte_cache;
unsigned long pgcache_size;
+ unsigned long pgdcache_size;
} pgt_quicklists;
#endif
#define pgd_quicklist (pgt_quicklists.pgd_cache)
-#define pmd_quicklist (pgt_quicklists.pmd_cache)
+#define pmd_quicklist ((unsigned long *)0)
#define pte_quicklist (pgt_quicklists.pte_cache)
#define pgtable_cache_size (pgt_quicklists.pgcache_size)
+#define pgd_cache_size (pgt_quicklists.pgdcache_size)
-extern pgd_t *get_pgd_slow(void);
+#ifndef __SMP__
-extern __inline__ pgd_t *get_pgd_fast(void)
+extern __inline__ void free_pgd_fast(pgd_t *pgd)
{
- unsigned long *ret;
+ struct page *page = mem_map + MAP_NR(pgd);
- if((ret = pgd_quicklist) != NULL) {
- pgd_quicklist = (unsigned long *)(*ret);
- ret[0] = ret[1];
- pgtable_cache_size--;
- } else
- ret = (unsigned long *)get_pgd_slow();
- return (pgd_t *)ret;
+ if (!page->pprev_hash) {
+ (unsigned long *)page->next_hash = pgd_quicklist;
+ pgd_quicklist = (unsigned long *)page;
+ }
+ (unsigned long)page->pprev_hash |=
+ (((unsigned long)pgd & (PAGE_SIZE / 2)) ? 2 : 1);
+ pgd_cache_size++;
}
+extern __inline__ pgd_t *get_pgd_fast(void)
+{
+ struct page *ret;
+
+ if ((ret = (struct page *)pgd_quicklist) != NULL) {
+ unsigned long mask = (unsigned long)ret->pprev_hash;
+ unsigned long off = 0;
+
+ if (mask & 1)
+ mask &= ~1;
+ else {
+ off = PAGE_SIZE / 2;
+ mask &= ~2;
+ }
+ (unsigned long)ret->pprev_hash = mask;
+ if (!mask)
+ pgd_quicklist = (unsigned long *)ret->next_hash;
+ ret = (struct page *)(PAGE_OFFSET + (ret->map_nr << PAGE_SHIFT) + off);
+ pgd_cache_size--;
+ } else {
+ ret = (struct page *) __get_free_page(GFP_KERNEL);
+ if(ret) {
+ struct page *page = mem_map + MAP_NR(ret);
+
+ clear_page(ret);
+ (unsigned long)page->pprev_hash = 2;
+ (unsigned long *)page->next_hash = pgd_quicklist;
+ pgd_quicklist = (unsigned long *)page;
+ pgd_cache_size++;
+ }
+ }
+ return (pgd_t *)ret;
+}
+
+#else /* __SMP__ */
+
extern __inline__ void free_pgd_fast(pgd_t *pgd)
{
*(unsigned long *)pgd = (unsigned long) pgd_quicklist;
@@ -384,20 +395,38 @@ extern __inline__ void free_pgd_fast(pgd_t *pgd)
pgtable_cache_size++;
}
+extern __inline__ pgd_t *get_pgd_fast(void)
+{
+ unsigned long *ret;
+
+ if((ret = pgd_quicklist) != NULL) {
+ pgd_quicklist = (unsigned long *)(*ret);
+ ret[0] = 0;
+ pgtable_cache_size--;
+ } else {
+ ret = (unsigned long *) __get_free_page(GFP_KERNEL);
+ if(ret)
+ clear_page(ret);
+ }
+ return (pgd_t *)ret;
+}
+
extern __inline__ void free_pgd_slow(pgd_t *pgd)
{
free_page((unsigned long)pgd);
}
+#endif /* __SMP__ */
+
extern pmd_t *get_pmd_slow(pgd_t *pgd, unsigned long address_premasked);
extern __inline__ pmd_t *get_pmd_fast(void)
{
unsigned long *ret;
- if((ret = (unsigned long *)pmd_quicklist) != NULL) {
- pmd_quicklist = (unsigned long *)(*ret);
- ret[0] = ret[1];
+ if((ret = (unsigned long *)pte_quicklist) != NULL) {
+ pte_quicklist = (unsigned long *)(*ret);
+ ret[0] = 0;
pgtable_cache_size--;
}
return (pmd_t *)ret;
@@ -405,8 +434,8 @@ extern __inline__ pmd_t *get_pmd_fast(void)
extern __inline__ void free_pmd_fast(pgd_t *pmd)
{
- *(unsigned long *)pmd = (unsigned long) pmd_quicklist;
- pmd_quicklist = (unsigned long *) pmd;
+ *(unsigned long *)pmd = (unsigned long) pte_quicklist;
+ pte_quicklist = (unsigned long *) pmd;
pgtable_cache_size++;
}
@@ -423,7 +452,7 @@ extern __inline__ pte_t *get_pte_fast(void)
if((ret = (unsigned long *)pte_quicklist) != NULL) {
pte_quicklist = (unsigned long *)(*ret);
- ret[0] = ret[1];
+ ret[0] = 0;
pgtable_cache_size--;
}
return (pte_t *)ret;
@@ -464,7 +493,7 @@ extern inline pte_t * pte_alloc(pmd_t *pmd, unsigned long address)
extern inline pmd_t * pmd_alloc(pgd_t *pgd, unsigned long address)
{
- address = (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
+ address = (address >> PMD_SHIFT) & (REAL_PTRS_PER_PMD - 1);
if (pgd_none(*pgd)) {
pmd_t *page = get_pmd_fast();
@@ -479,12 +508,12 @@ extern inline pmd_t * pmd_alloc(pgd_t *pgd, unsigned long address)
#define pte_alloc_kernel(pmd, addr) pte_alloc(pmd, addr)
#define pmd_alloc_kernel(pgd, addr) pmd_alloc(pgd, addr)
-extern inline void set_pgdir(unsigned long address, pgd_t entry)
-{
- /* Nothing to do on sparc64 :) */
-}
+extern int do_check_pgt_cache(int, int);
-extern pgd_t swapper_pg_dir[1024];
+/* Nothing to do on sparc64 :) */
+#define set_pgdir(address, entry) do { } while(0)
+
+extern pgd_t swapper_pg_dir[1];
extern inline void SET_PAGE_DIR(struct task_struct *tsk, pgd_t *pgdir)
{
@@ -526,35 +555,26 @@ extern void mmu_release_scsi_sgl(struct mmu_sglist *sg, int sz, struct linux_sbu
#define mmu_lockarea(vaddr, len) (vaddr)
#define mmu_unlockarea(vaddr, len) do { } while(0)
-extern __inline__ void update_mmu_cache(struct vm_area_struct *vma,
- unsigned long address, pte_t pte)
-{
- struct mm_struct *mm = vma->vm_mm;
- unsigned long ctx = mm->context & 0x1fff;
- unsigned long tag_access;
-
- tag_access = address | ctx;
-
- __asm__ __volatile__("
- rdpr %%pstate, %%g1
- wrpr %%g1, %0, %%pstate
- brz,pt %1, 1f
- mov %2, %%g2
- stxa %3, [%%g2] %5
- b,pt %%xcc, 2f
- stxa %4, [%%g0] %6
-1:
- stxa %3, [%%g2] %7
- stxa %4, [%%g0] %8
-2:
- wrpr %%g1, 0x0, %%pstate
-" : /* no outputs */
- : "i" (PSTATE_IE), "r" (vma->vm_flags & VM_EXEC),
- "i" (TLB_TAG_ACCESS), "r" (tag_access), "r" (pte_val(pte)),
- "i" (ASI_IMMU), "i" (ASI_ITLB_DATA_IN),
- "i" (ASI_DMMU), "i" (ASI_DTLB_DATA_IN)
- : "g1", "g2");
-}
+#define update_mmu_cache(__vma, __address, _pte) \
+__asm__ __volatile__( \
+ "rdpr %%pstate, %%g1\n\t" \
+ "wrpr %%g1, %0, %%pstate\n\t" \
+ "brz,pt %1, 1f\n\t" \
+ " mov %2, %%g2\n\t" \
+ "stxa %3, [%%g2] %5\n\t" \
+ "ba,pt %%xcc, 2f\n\t" \
+ " stxa %4, [%%g0] %6\n\t" \
+"1: stxa %3, [%%g2] %7\n\t" \
+" stxa %4, [%%g0] %8\n\t" \
+"2: wrpr %%g1, 0x0, %%pstate\n" \
+ : /* no outputs */ \
+ : "i" (PSTATE_IE), \
+ "r" (((__vma)->vm_flags&(VM_READ|VM_WRITE|VM_EXEC))==(VM_READ|VM_EXEC)), \
+ "i" (TLB_TAG_ACCESS), \
+ "r" ((__address) | ((__vma)->vm_mm->context & 0x3ff)), \
+ "r" (pte_val(_pte)), "i" (ASI_IMMU), "i" (ASI_ITLB_DATA_IN), \
+ "i" (ASI_DMMU), "i" (ASI_DTLB_DATA_IN) \
+ : "g1", "g2")
/* Make a non-present pseudo-TTE. */
extern inline pte_t mk_swap_pte(unsigned long type, unsigned long offset)
@@ -596,7 +616,6 @@ __get_iospace (unsigned long addr)
extern void * module_map (unsigned long size);
extern void module_unmap (void *addr);
-extern void module_shrink (void *addr, unsigned long size);
/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
#define PageSkip(page) (test_bit(PG_skip, &(page)->flags))
diff --git a/include/asm-sparc64/posix_types.h b/include/asm-sparc64/posix_types.h
index dd09cb516..98b4125a6 100644
--- a/include/asm-sparc64/posix_types.h
+++ b/include/asm-sparc64/posix_types.h
@@ -7,7 +7,11 @@
* assume GCC is being used.
*/
+#if __GNUC_MINOR__ > 7
+typedef unsigned long int __kernel_size_t;
+#else
typedef unsigned long long __kernel_size_t;
+#endif
typedef long long __kernel_ssize_t;
typedef long __kernel_ptrdiff_t;
diff --git a/include/asm-sparc64/processor.h b/include/asm-sparc64/processor.h
index fd1a5fc9a..ab4348216 100644
--- a/include/asm-sparc64/processor.h
+++ b/include/asm-sparc64/processor.h
@@ -1,4 +1,4 @@
-/* $Id: processor.h,v 1.42 1998/01/28 10:00:04 ecd Exp $
+/* $Id: processor.h,v 1.49 1998/07/31 10:42:40 jj Exp $
* include/asm-sparc64/processor.h
*
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
@@ -31,22 +31,9 @@
#define TASK_SIZE 0xfffffffc00000000
#endif
-#define COPY_TASK_STRUCT(dst, src) \
-do { \
- if (src->tss.w_saved) \
- *dst = *src; \
- else { \
- memcpy (dst, src, ((const unsigned long)(&((struct task_struct *)0)->tss.reg_window))); \
- memcpy ((char *)dst + ((const unsigned long)(&((struct task_struct *)0)->tss.sig_address)), \
- (char *)src + ((const unsigned long)(&((struct task_struct *)0)->tss.sig_address)), \
- sizeof(struct task_struct) - \
- ((const unsigned long)(&((struct task_struct *)0)->tss.sig_address))); \
- } \
-} while (0)
-
#ifndef __ASSEMBLY__
-#define NSWINS 8
+#define NSWINS 7
typedef struct {
unsigned long seg;
@@ -55,14 +42,14 @@ typedef struct {
/* The Sparc processor specific thread struct. */
struct thread_struct {
/*DC1*/ unsigned long ksp __attribute__ ((aligned(16)));
- unsigned int kpc;
unsigned short wstate;
unsigned short cwp;
-
-/*DC2*/ unsigned short flags;
+ unsigned short flags;
unsigned short ctx;
- unsigned short w_saved;
+
+/*DC2*/ unsigned short w_saved;
unsigned short new_signal;
+ unsigned int ___pad;
mm_segment_t current_ds;
/*DC3*/ struct pt_regs *kregs;
@@ -73,35 +60,39 @@ struct thread_struct {
unsigned long sig_address __attribute__ ((aligned (8)));
unsigned long sig_desc;
- struct sigstack sstk_info;
+
+ unsigned char fpdepth;
+ unsigned char fpsaved[7];
+ unsigned char gsr[7];
+ unsigned long xfsr[7];
};
#endif /* !(__ASSEMBLY__) */
-#define SPARC_FLAG_USEDFPUL 0x01 /* Used f0-f31 */
-#define SPARC_FLAG_USEDFPUU 0x02 /* Used f32-f62 */
-#define SPARC_FLAG_USEDFPU 0x04 /* If ever FEF bit was set while TSTATE_PEF */
-#define SPARC_FLAG_KTHREAD 0x10 /* task is a kernel thread */
-#define SPARC_FLAG_UNALIGNED 0x20 /* is allowed to do unaligned accesses */
-#define SPARC_FLAG_NEWSIGNALS 0x40 /* task wants new-style signals */
-#define SPARC_FLAG_32BIT 0x80 /* task is older 32-bit binary */
+#define SPARC_FLAG_KTHREAD 0x010 /* task is a kernel thread */
+#define SPARC_FLAG_UNALIGNED 0x020 /* is allowed to do unaligned accesses */
+#define SPARC_FLAG_NEWSIGNALS 0x040 /* task wants new-style signals */
+#define SPARC_FLAG_32BIT 0x080 /* task is older 32-bit binary */
+#define SPARC_FLAG_NEWCHILD 0x100 /* task is just-spawned child process */
#define INIT_MMAP { &init_mm, 0xfffff80000000000, 0xfffff80001000000, \
PAGE_SHARED , VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap }
#define INIT_TSS { \
-/* ksp, kpc, wstate, cwp */ \
- 0, 0, 0, 0, \
-/* flags, ctx, w_saved, new_signal, current_ds, */ \
- SPARC_FLAG_KTHREAD, 0, 0, 0, KERNEL_DS, \
+/* ksp, wstate, cwp, flags, ctx, */ \
+ 0, 0, 0, SPARC_FLAG_KTHREAD, 0, \
+/* w_saved, new_signal, padding, current_ds, */ \
+ 0, 0, 0, KERNEL_DS, \
/* kregs, utraps, */ \
0, 0, \
/* reg_window */ \
{ { { 0, }, { 0, } }, }, \
/* rwbuf_stkptrs */ \
- { 0, 0, 0, 0, 0, 0, 0, 0, }, \
-/* sig_address, sig_desc, sstk_info */ \
- 0, 0, { 0, 0, }, \
+ { 0, 0, 0, 0, 0, 0, 0, }, \
+/* sig_address, sig_desc */ \
+ 0, 0, \
+/* fpdepth, fpsaved, gsr, xfsr */ \
+ 0, { 0 }, { 0 }, { 0 }, \
}
#ifndef __ASSEMBLY__
@@ -109,7 +100,10 @@ struct thread_struct {
/* Return saved PC of a blocked thread. */
extern __inline__ unsigned long thread_saved_pc(struct thread_struct *t)
{
- return t->kpc;
+ unsigned long *sp = (unsigned long *)(t->ksp + STACK_BIAS);
+ unsigned long *fp = (unsigned long *)(sp[14] + STACK_BIAS);
+
+ return fp[15];
}
/* On Uniprocessor, even in RMO processes see TSO semantics */
@@ -160,8 +154,6 @@ do { \
#define start_thread32(regs, pc, sp) \
do { \
- register unsigned int zero asm("g1"); \
-\
pc &= 0x00000000ffffffffUL; \
sp &= 0x00000000ffffffffUL; \
\
@@ -178,8 +170,8 @@ do { \
(*(current->tss.utraps))--; \
current->tss.utraps = NULL; \
} \
- zero = 0; \
__asm__ __volatile__( \
+ "stxa %3, [%4] %5\n\t" \
"stx %%g0, [%0 + %2 + 0x00]\n\t" \
"stx %%g0, [%0 + %2 + 0x08]\n\t" \
"stx %%g0, [%0 + %2 + 0x10]\n\t" \
@@ -200,12 +192,15 @@ do { \
: \
: "r" (regs), "r" (sp - REGWIN32_SZ), \
"i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0])), \
- "r" (zero)); \
+ "r" (current->mm->pgd[0]), "r" (TSB_REG), "i" (ASI_DMMU)); \
} while(0)
/* Free all resources held by a thread. */
#define release_thread(tsk) do { } while(0)
+#define copy_segments(nr, tsk, mm) do { } while (0)
+#define release_segments(mm) do { } while (0)
+
#ifdef __KERNEL__
/* Allocation and freeing of task_struct and kernel stack. */
#define alloc_task_struct() ((struct task_struct *)__get_free_pages(GFP_KERNEL, 1))
diff --git a/include/asm-sparc64/sbus.h b/include/asm-sparc64/sbus.h
index 95aa09ede..ea2f85132 100644
--- a/include/asm-sparc64/sbus.h
+++ b/include/asm-sparc64/sbus.h
@@ -1,4 +1,4 @@
-/* $Id: sbus.h,v 1.6 1998/03/09 14:05:03 jj Exp $
+/* $Id: sbus.h,v 1.7 1998/05/22 14:33:40 jj Exp $
* sbus.h: Defines for the Sun SBus.
*
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
@@ -54,7 +54,7 @@ struct linux_sbus_device {
struct linux_prom_registers reg_addrs[PROMREG_MAX];
int num_registers, ranges_applied;
- struct linux_prom_irqs irqs[PROMINTR_MAX];
+ unsigned int irqs[4];
int num_irqs;
unsigned long sbus_addr; /* Absolute base address for device. */
diff --git a/include/asm-sparc64/siginfo.h b/include/asm-sparc64/siginfo.h
index cd0611f89..ff2534c66 100644
--- a/include/asm-sparc64/siginfo.h
+++ b/include/asm-sparc64/siginfo.h
@@ -51,6 +51,7 @@ typedef struct siginfo {
/* SIGCHLD */
struct {
pid_t _pid; /* which child */
+ uid_t _uid; /* sender's uid */
int _status; /* exit code */
clock_t _utime;
clock_t _stime;
diff --git a/include/asm-sparc64/signal.h b/include/asm-sparc64/signal.h
index 42382c42c..ba179564b 100644
--- a/include/asm-sparc64/signal.h
+++ b/include/asm-sparc64/signal.h
@@ -1,4 +1,4 @@
-/* $Id: signal.h,v 1.4 1997/12/11 15:16:06 jj Exp $ */
+/* $Id: signal.h,v 1.8 1998/07/29 16:32:39 jj Exp $ */
#ifndef _ASMSPARC64_SIGNAL_H
#define _ASMSPARC64_SIGNAL_H
@@ -75,6 +75,7 @@
#define SIGPROF 27
#define SIGWINCH 28
#define SIGLOST 29
+#define SIGPWR SIGLOST
#define SIGUSR1 30
#define SIGUSR2 31
@@ -148,6 +149,7 @@ struct sigstack {
*/
#define SA_NOCLDSTOP SV_IGNCHILD
#define SA_STACK SV_SSTACK
+#define SA_ONSTACK SV_SSTACK
#define SA_RESTART SV_INTR
#define SA_ONESHOT SV_RESET
#define SA_INTERRUPT 0x10
@@ -161,6 +163,15 @@ struct sigstack {
#define SIG_UNBLOCK 0x02 /* for unblocking signals */
#define SIG_SETMASK 0x04 /* for setting the signal mask */
+/*
+ * sigaltstack controls
+ */
+#define SS_ONSTACK 1
+#define SS_DISABLE 2
+
+#define MINSIGSTKSZ 4096
+#define SIGSTKSZ 16384
+
#ifdef __KERNEL__
/*
* These values of sa_flags are used only by the kernel as part of the
@@ -233,6 +244,12 @@ typedef struct sigaltstack {
__kernel_size_t ss_size;
} stack_t;
+typedef struct sigaltstack32 {
+ u32 ss_sp;
+ int ss_flags;
+ __kernel_size_t32 ss_size;
+} stack_t32;
+
#endif /* !(__ASSEMBLY__) */
#endif /* !(_ASMSPARC64_SIGNAL_H) */
diff --git a/include/asm-sparc64/smp.h b/include/asm-sparc64/smp.h
index 53121ff1c..1a07cd850 100644
--- a/include/asm-sparc64/smp.h
+++ b/include/asm-sparc64/smp.h
@@ -36,28 +36,18 @@ struct cpuinfo_sparc {
unsigned long irq_count;
unsigned int multiplier;
unsigned int counter;
- unsigned long last_tlbversion_seen;
unsigned long pgcache_size;
+ unsigned long pgdcache_size;
/* Dcache line 2 */
unsigned long *pgd_cache;
- unsigned long *pmd_cache;
unsigned long *pte_cache;
unsigned long udelay_val;
+ unsigned long dummy;
};
extern struct cpuinfo_sparc cpu_data[NR_CPUS];
-struct klock_info {
- unsigned char kernel_flag;
- unsigned char akp;
-};
-
-extern struct klock_info klock_info;
-
-#define KLOCK_HELD 0xff
-#define KLOCK_CLEAR 0x00
-
/*
* Private routines/data
*/
@@ -95,18 +85,15 @@ extern __inline__ int hard_smp_processor_id(void)
extern void smp_message_pass(int target, int msg, unsigned long data, int wait);
+/* As idle task checks need_resched in a tight loop, it is not necessary to
+ wake it up. -jj */
+#define smp_send_reschedule(cpu) do {} while (0)
+
#endif /* !(__ASSEMBLY__) */
#define PROC_CHANGE_PENALTY 20
#else /* !(__SMP__) */
-#ifndef __ASSEMBLY__
-extern __inline__ int cpu_logical_map(int cpu)
-{
- return cpu;
-}
-#endif
-#endif /* !(__SMP__) */
#define NO_PROC_ID 0xFF
diff --git a/include/asm-sparc64/smp_lock.h b/include/asm-sparc64/smp_lock.h
deleted file mode 100644
index a01d9ec35..000000000
--- a/include/asm-sparc64/smp_lock.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* smp_lock.h: Locking and unlocking the kernel on the 64-bit Sparc.
- *
- * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
- */
-
-#ifndef __SPARC64_SMPLOCK_H
-#define __SPARC64_SMPLOCK_H
-
-#include <asm/smp.h>
-#include <asm/bitops.h>
-#include <asm/pgtable.h>
-
-#ifndef __SMP__
-
-#define lock_kernel() do { } while(0)
-#define unlock_kernel() do { } while(0)
-#define release_kernel_lock(task, cpu, depth) ((depth) = 1)
-#define reacquire_kernel_lock(task, cpu, depth) do { } while(0)
-
-#else
-
-#include <asm/hardirq.h>
-
-/* Release global kernel lock and global interrupt lock */
-#define release_kernel_lock(task, cpu, depth) \
-do { \
- if((depth = (task)->lock_depth) != 0) { \
- __cli(); \
- (task)->lock_depth = 0; \
- klock_info.akp = NO_PROC_ID; \
- membar("#LoadStore | #StoreStore"); \
- klock_info.kernel_flag = 0; \
- } \
- release_irqlock(cpu); \
- __sti(); \
-} while(0)
-
-/* Do not fuck with this without consulting arch/sparc64/lib/locks.S first! */
-#define reacquire_kernel_lock(task, cpu, depth) \
-do { \
- if(depth) { \
- register struct klock_info *klip asm("g1"); \
- klip = &klock_info; \
- __asm__ __volatile__("mov %%o7, %%g5\n\t" \
- "call ___lock_reacquire_kernel\n\t" \
- " mov %1, %%g2" \
- : /* No outputs. */ \
- : "r" (klip), "r" (depth) \
- : "g2", "g3", "g5", "memory", "cc"); \
- } \
-} while(0)
-
-/* The following acquire and release the master kernel global lock,
- * the idea is that the usage of this mechanmism becomes less and less
- * as time goes on, to the point where they are no longer needed at all
- * and can thus disappear.
- */
-
-/* Do not fuck with this without consulting arch/sparc64/lib/locks.S first! */
-extern __inline__ void lock_kernel(void)
-{
- register struct klock_info *klip asm("g1");
- klip = &klock_info;
- __asm__ __volatile__("
- mov %%o7, %%g5
- call ___lock_kernel
- lduw [%%g6 + %0], %%g2
-" : : "i" (AOFF_task_lock_depth), "r" (klip)
- : "g2", "g3", "g5", "memory", "cc");
-}
-
-/* Release kernel global lock. */
-extern __inline__ void unlock_kernel(void)
-{
- register struct klock_info *klip asm("g1");
- klip = &klock_info;
- __asm__ __volatile__("
- mov %%o7, %%g5
- call ___unlock_kernel
- lduw [%%g6 + %0], %%g2
-" : : "i" (AOFF_task_lock_depth), "r" (klip)
- : "g2", "g3", "g5", "memory", "cc");
-}
-
-#endif /* (__SMP__) */
-
-#endif /* !(__SPARC64_SMPLOCK_H) */
diff --git a/include/asm-sparc64/smplock.h b/include/asm-sparc64/smplock.h
new file mode 100644
index 000000000..e62326a10
--- /dev/null
+++ b/include/asm-sparc64/smplock.h
@@ -0,0 +1,49 @@
+/*
+ * <asm/smplock.h>
+ *
+ * Default SMP lock implementation
+ */
+#include <linux/interrupt.h>
+#include <asm/spinlock.h>
+
+extern spinlock_t kernel_flag;
+
+/*
+ * Release global kernel lock and global interrupt lock
+ */
+#define release_kernel_lock(task, cpu) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_unlock(&kernel_flag); \
+ release_irqlock(cpu); \
+ __sti(); \
+} while (0)
+
+/*
+ * Re-acquire the kernel lock
+ */
+#define reacquire_kernel_lock(task) \
+do { \
+ if (task->lock_depth >= 0) \
+ spin_lock(&kernel_flag); \
+} while (0)
+
+
+/*
+ * Getting the big kernel lock.
+ *
+ * This cannot happen asynchronously,
+ * so we only need to worry about other
+ * CPU's.
+ */
+extern __inline__ void lock_kernel(void)
+{
+ if (!++current->lock_depth)
+ spin_lock(&kernel_flag);
+}
+
+extern __inline__ void unlock_kernel(void)
+{
+ if (--current->lock_depth < 0)
+ spin_unlock(&kernel_flag);
+}
diff --git a/include/asm-sparc64/socket.h b/include/asm-sparc64/socket.h
index 3c110baeb..0f25b82c1 100644
--- a/include/asm-sparc64/socket.h
+++ b/include/asm-sparc64/socket.h
@@ -1,4 +1,4 @@
-/* $Id: socket.h,v 1.4 1997/10/19 00:19:23 davem Exp $ */
+/* $Id: socket.h,v 1.5 1998/07/22 22:06:49 davem Exp $ */
#ifndef _ASM_SOCKET_H
#define _ASM_SOCKET_H
@@ -37,6 +37,9 @@
#define SO_BINDTODEVICE 0x000d
+#define SO_ATTACH_FILTER 0x001a
+#define SO_DETACH_FILTER 0x001b
+
/* Security levels - as per NRL IPv6 - don't actually do anything */
#define SO_SECURITY_AUTHENTICATION 0x5001
#define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002
diff --git a/include/asm-sparc64/softirq.h b/include/asm-sparc64/softirq.h
index 1357489b4..0e1a6b589 100644
--- a/include/asm-sparc64/softirq.h
+++ b/include/asm-sparc64/softirq.h
@@ -23,6 +23,7 @@ extern int __sparc64_bh_counter;
#define softirq_trylock(cpu) (__sparc64_bh_counter ? 0 : (__sparc64_bh_counter=1))
#define softirq_endlock(cpu) (__sparc64_bh_counter = 0)
#define clear_active_bhs(x) (bh_active &= ~(x))
+#define synchronize_bh() do { } while (0) /* XXX implement SMP version -DaveM */
#define init_bh(nr, routine) \
do { int ent = nr; \
diff --git a/include/asm-sparc64/spinlock.h b/include/asm-sparc64/spinlock.h
index 65880b033..4e2dd6b8c 100644
--- a/include/asm-sparc64/spinlock.h
+++ b/include/asm-sparc64/spinlock.h
@@ -10,8 +10,13 @@
#ifndef __SMP__
-typedef struct { } spinlock_t;
-#define SPIN_LOCK_UNLOCKED { }
+#if (__GNUC__ > 2) || (__GNUC_MINOR__ >= 8)
+ typedef struct { } spinlock_t;
+ #define SPIN_LOCK_UNLOCKED { }
+#else
+ typedef unsigned char spinlock_t;
+ #define SPIN_LOCK_UNLOCKED 0
+#endif
#define spin_lock_init(lock) do { } while(0)
#define spin_lock(lock) do { } while(0)
diff --git a/include/asm-sparc64/spitfire.h b/include/asm-sparc64/spitfire.h
index 76232c227..04667b185 100644
--- a/include/asm-sparc64/spitfire.h
+++ b/include/asm-sparc64/spitfire.h
@@ -1,4 +1,4 @@
-/* $Id: spitfire.h,v 1.8 1997/05/18 04:16:56 davem Exp $
+/* $Id: spitfire.h,v 1.9 1998/04/28 08:23:33 davem Exp $
* spitfire.h: SpitFire/BlackBird/Cheetah inline MMU operations.
*
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
@@ -85,7 +85,7 @@ extern __inline__ void spitfire_set_primary_context(unsigned long ctx)
{
__asm__ __volatile__("stxa %0, [%1] %2"
: /* No outputs */
- : "r" (ctx & 0x1fff),
+ : "r" (ctx & 0x3ff),
"r" (PRIMARY_CONTEXT), "i" (ASI_DMMU));
membar("#Sync");
}
@@ -104,7 +104,7 @@ extern __inline__ void spitfire_set_secondary_context(unsigned long ctx)
{
__asm__ __volatile__("stxa %0, [%1] %2"
: /* No outputs */
- : "r" (ctx & 0x1fff),
+ : "r" (ctx & 0x3ff),
"r" (SECONDARY_CONTEXT), "i" (ASI_DMMU));
membar("#Sync");
}
diff --git a/include/asm-sparc64/stat.h b/include/asm-sparc64/stat.h
index 05853d3b5..f726bd5a0 100644
--- a/include/asm-sparc64/stat.h
+++ b/include/asm-sparc64/stat.h
@@ -1,4 +1,4 @@
-/* $Id: stat.h,v 1.4 1998/02/06 12:52:14 jj Exp $ */
+/* $Id: stat.h,v 1.5 1998/07/26 05:24:41 davem Exp $ */
#ifndef _SPARC64_STAT_H
#define _SPARC64_STAT_H
@@ -42,54 +42,4 @@ struct stat {
unsigned long __unused4[2];
};
-typedef __u64 __new_dev_t;
-
-struct stat64 {
- __new_dev_t st_dev;
- __u64 st_ino;
- __u32 st_mode;
- __u32 st_nlink;
- __s32 st_uid;
- __s32 st_gid;
- __new_dev_t st_rdev;
- __s64 st_size;
- struct timespec st_atim;
- struct timespec st_mtim;
- struct timespec st_ctim;
- int st_blksize;
- long st_blocks;
- char st_fstype[16];
-};
-
-struct stat64_32 {
- __new_dev_t st_dev;
- __u64 st_ino;
- __u32 st_mode;
- __u32 st_nlink;
- __s32 st_uid;
- __s32 st_gid;
- __new_dev_t st_rdev;
- __s64 st_size;
- __u64 st_blocks;
- __s32 st_atime;
- __u32 __unused1;
- __s32 st_mtime;
- __u32 __unused2;
- __s32 st_ctime;
- __u32 __unused3;
- __u32 st_blksize;
- __u32 __unused4;
-};
-
-#define __XSTAT_VER_1 1
-#define __XSTAT_VER_2 2
-#define __XSTAT_VER_MASK 0xff
-
-#define __XSTAT_VER_XSTAT 0x000
-#define __XSTAT_VER_LXSTAT 0x100
-#define __XSTAT_VER_FXSTAT 0x200
-#define __XSTAT_VER_TYPEMASK 0xff00
-
-#define __XMKNOD_VER_1 1
-
#endif
diff --git a/include/asm-sparc64/string.h b/include/asm-sparc64/string.h
index 545e1285d..b5293acd9 100644
--- a/include/asm-sparc64/string.h
+++ b/include/asm-sparc64/string.h
@@ -1,4 +1,4 @@
-/* $Id: string.h,v 1.8 1997/11/19 07:57:50 jj Exp $
+/* $Id: string.h,v 1.11 1998/06/12 14:54:35 jj Exp $
* string.h: External definitions for optimized assembly string
* routines for the Linux Kernel.
*
@@ -67,8 +67,8 @@ extern inline void *__nonconstant_memcpy(void *to, const void *from, __kernel_si
extern inline void *__constant_c_and_count_memset(void *s, char c, __kernel_size_t count)
{
- extern void *__bzero_1page(void *);
extern __kernel_size_t __bzero(void *, __kernel_size_t);
+ extern void *__bzero_1page(void *);
if(!c) {
if (count == 8192)
diff --git a/include/asm-sparc64/svr4.h b/include/asm-sparc64/svr4.h
index 2e624a94b..fbf94c2e2 100644
--- a/include/asm-sparc64/svr4.h
+++ b/include/asm-sparc64/svr4.h
@@ -81,7 +81,7 @@ typedef struct {
/* flags for stack_t.flags */
enum svr4_stack_flags {
- SS_ONSTACK,
+ SVR4_SS_ONSTACK,
SVR4_SS_DISABLE,
};
diff --git a/include/asm-sparc64/system.h b/include/asm-sparc64/system.h
index 5bec88028..55072c93b 100644
--- a/include/asm-sparc64/system.h
+++ b/include/asm-sparc64/system.h
@@ -1,10 +1,11 @@
-/* $Id: system.h,v 1.38 1998/01/30 11:00:11 jj Exp $ */
+/* $Id: system.h,v 1.42 1998/07/29 01:32:51 davem Exp $ */
#ifndef __SPARC64_SYSTEM_H
#define __SPARC64_SYSTEM_H
#include <asm/ptrace.h>
#include <asm/processor.h>
#include <asm/asm_offsets.h>
+#include <asm/visasm.h>
#ifndef __ASSEMBLY__
/*
@@ -28,8 +29,6 @@ enum sparc_cpu {
#define ARCH_SUN4 0
extern unsigned long empty_bad_page;
-extern unsigned long empty_bad_pmd_table;
-extern unsigned long empty_bad_pte_table;
extern unsigned long empty_zero_page;
#endif
@@ -43,10 +42,10 @@ extern unsigned long empty_zero_page;
__asm__ __volatile__("wrpr 0, %%pil" : : : "memory")
#define getipl() \
-({ int retval; __asm__ __volatile__("rdpr %%pil, %0" : "=r" (retval)); retval; })
+({ unsigned long retval; __asm__ __volatile__("rdpr %%pil, %0" : "=r" (retval)); retval; })
#define swap_pil(__new_pil) \
-({ int retval; \
+({ unsigned long retval; \
__asm__ __volatile__("rdpr %%pil, %0\n\t" \
"wrpr %1, %%pil" \
: "=r" (retval) \
@@ -56,7 +55,7 @@ extern unsigned long empty_zero_page;
})
#define read_pil_and_cli() \
-({ int retval; \
+({ unsigned long retval; \
__asm__ __volatile__("rdpr %%pil, %0\n\t" \
"wrpr 15, %%pil" \
: "=r" (retval) \
@@ -126,12 +125,10 @@ extern __inline__ void flushw_user(void)
#define flush_user_windows flushw_user
/* See what happens when you design the chip correctly?
- * NOTE NOTE NOTE this is extremely non-trivial what I
- * am doing here. GCC needs only one register to stuff
- * things into ('next' in particular) So I "claim" that
- * I do not clobber it, when in fact I do. Please,
- * when modifying this code inspect output of sched.s very
- * carefully to make sure things still work. -DaveM
+ *
+ * XXX What we are doing here assumes a lot about gcc reload
+ * XXX internals, it heavily risks compiler aborts due to
+ * XXX forbidden registers being spilled. Rewrite me... -DaveM
*
* SMP NOTE: At first glance it looks like there is a tiny
* race window here at the end. The possible problem
@@ -144,48 +141,48 @@ extern __inline__ void flushw_user(void)
* not reference %g6.
*/
#define switch_to(prev, next) \
-do { __label__ switch_continue; \
- register unsigned long task_pc asm("o7"); \
- (prev)->tss.kregs->tstate &= ~TSTATE_PEF; \
- task_pc = ((unsigned long) &&switch_continue) - 0x8; \
+do { save_and_clear_fpu(); \
(next)->mm->cpu_vm_mask |= (1UL << smp_processor_id()); \
__asm__ __volatile__( \
"rdpr %%pstate, %%g2\n\t" \
"wrpr %%g2, 0x3, %%pstate\n\t" \
"flushw\n\t" \
+ "stx %%l0, [%%sp + 2047 + 0x60]\n\t" \
+ "stx %%l1, [%%sp + 2047 + 0x68]\n\t" \
"stx %%i6, [%%sp + 2047 + 0x70]\n\t" \
"stx %%i7, [%%sp + 2047 + 0x78]\n\t" \
"rdpr %%wstate, %%o5\n\t" \
- "stx %%o6, [%%g6 + %3]\n\t" \
- "stw %%o7, [%%g6 + %4]\n\t" \
- "sth %%o5, [%%g6 + %2]\n\t" \
+ "stx %%o6, [%%g6 + %2]\n\t" \
+ "sth %%o5, [%%g6 + %1]\n\t" \
"rdpr %%cwp, %%o5\n\t" \
- "sth %%o5, [%%g6 + %5]\n\t" \
- "membar #Sync\n\t" \
+ "sth %%o5, [%%g6 + %4]\n\t" \
"mov %0, %%g6\n\t" \
- "lduh [%0 + %5], %%g1\n\t" \
+ "lduh [%0 + %4], %%g1\n\t" \
"wrpr %%g1, %%cwp\n\t" \
- "ldx [%%g6 + %3], %%o6\n\t" \
- "lduw [%%g6 + %4], %%o7\n\t" \
- "lduh [%%g6 + %2], %%o5\n\t" \
- "mov %%g6, %0\n\t" \
+ "ldx [%%g6 + %2], %%o6\n\t" \
+ "lduh [%%g6 + %1], %%o5\n\t" \
+ "lduh [%%g6 + %3], %%o7\n\t" \
+ "mov %%g6, %%l2\n\t" \
"wrpr %%o5, 0x0, %%wstate\n\t" \
+ "ldx [%%sp + 2047 + 0x60], %%l0\n\t" \
+ "ldx [%%sp + 2047 + 0x68], %%l1\n\t" \
"ldx [%%sp + 2047 + 0x70], %%i6\n\t" \
"ldx [%%sp + 2047 + 0x78], %%i7\n\t" \
"wrpr %%g0, 0x96, %%pstate\n\t" \
- "jmpl %%o7 + 0x8, %%g0\n\t" \
- " mov %0, %%g6\n\t" \
- : /* No outputs */ \
- : "r" (next), "r" (task_pc), \
+ "andcc %%o7, 0x100, %%g0\n\t" \
+ "bne,pn %%icc, ret_from_syscall\n\t" \
+ " mov %%l2, %%g6\n\t" \
+ : \
+ : "r" (next), \
"i" ((const unsigned long)(&((struct task_struct *)0)->tss.wstate)), \
"i" ((const unsigned long)(&((struct task_struct *)0)->tss.ksp)), \
- "i" ((const unsigned long)(&((struct task_struct *)0)->tss.kpc)), \
+ "i" ((const unsigned long)(&((struct task_struct *)0)->tss.flags)), \
"i" ((const unsigned long)(&((struct task_struct *)0)->tss.cwp)) \
: "cc", "g1", "g2", "g3", "g5", "g7", \
- "l1", "l2", "l3", "l4", "l5", "l6", "l7", \
+ "l2", "l3", "l4", "l5", "l6", "l7", \
"i0", "i1", "i2", "i3", "i4", "i5", \
- "o0", "o1", "o2", "o3", "o4", "o5"); \
-switch_continue: } while(0)
+ "o0", "o1", "o2", "o3", "o4", "o5", "o7"); \
+} while(0)
extern __inline__ unsigned long xchg32(__volatile__ unsigned int *m, unsigned int val)
{
diff --git a/include/asm-sparc64/termios.h b/include/asm-sparc64/termios.h
index 622158d24..8a972984b 100644
--- a/include/asm-sparc64/termios.h
+++ b/include/asm-sparc64/termios.h
@@ -1,4 +1,4 @@
-/* $Id: termios.h,v 1.4 1997/03/14 21:05:26 jj Exp $ */
+/* $Id: termios.h,v 1.5 1998/04/12 06:27:22 davem Exp $ */
#ifndef _SPARC64_TERMIOS_H
#define _SPARC64_TERMIOS_H
diff --git a/include/asm-sparc64/timex.h b/include/asm-sparc64/timex.h
new file mode 100644
index 000000000..80210c259
--- /dev/null
+++ b/include/asm-sparc64/timex.h
@@ -0,0 +1,15 @@
+/*
+ * linux/include/asm-sparc64/timex.h
+ *
+ * sparc64 architecture timex specifications
+ */
+#ifndef _ASMsparc64_TIMEX_H
+#define _ASMsparc64_TIMEX_H
+
+#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
+#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */
+#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
+ (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
+ << (SHIFT_SCALE-SHIFT_HZ)) / HZ)
+
+#endif
diff --git a/include/asm-sparc64/ttable.h b/include/asm-sparc64/ttable.h
index 82e360042..9d2434618 100644
--- a/include/asm-sparc64/ttable.h
+++ b/include/asm-sparc64/ttable.h
@@ -1,4 +1,4 @@
-/* $Id: ttable.h,v 1.6 1998/03/15 17:23:54 ecd Exp $ */
+/* $Id: ttable.h,v 1.8 1998/06/12 14:54:32 jj Exp $ */
#ifndef _SPARC64_TTABLE_H
#define _SPARC64_TTABLE_H
@@ -66,7 +66,7 @@
#define SYSCALL_TRAP(routine, systbl) \
sethi %hi(109f), %g7; \
- ba,pt %xcc, etrap; \
+ ba,pt %xcc, scetrap; \
109: or %g7, %lo(109b), %g7; \
call routine; \
sethi %hi(systbl), %l7; \
@@ -133,6 +133,16 @@
call routine; \
add %sp, STACK_BIAS + REGWIN_SZ, %o1; \
ba,a,pt %xcc, rtrap_clr_l6;
+
+#define TICK_SMP_IRQ \
+ rdpr %pil, %g2; \
+ wrpr %g0, 15, %pil; \
+ sethi %hi(109f), %g7; \
+ b,pt %xcc, etrap_irq; \
+109: or %g7, %lo(109b), %g7; \
+ call smp_percpu_timer_interrupt; \
+ add %sp, STACK_BIAS + REGWIN_SZ, %o0; \
+ ba,a,pt %xcc, rtrap_clr_l6;
#define TRAP_IVEC TRAP_NOSAVE(do_ivec)
diff --git a/include/asm-sparc64/uaccess.h b/include/asm-sparc64/uaccess.h
index e2d59cf23..ec80bb5dc 100644
--- a/include/asm-sparc64/uaccess.h
+++ b/include/asm-sparc64/uaccess.h
@@ -1,4 +1,4 @@
-/* $Id: uaccess.h,v 1.24 1997/12/15 15:05:14 jj Exp $ */
+/* $Id: uaccess.h,v 1.25 1998/04/28 08:23:34 davem Exp $ */
#ifndef _ASM_UACCESS_H
#define _ASM_UACCESS_H
@@ -52,7 +52,7 @@ do { \
flushw_user (); \
current->tss.ctx = 0; \
} else { \
- current->tss.ctx = (current->mm->context & 0x1fff); \
+ current->tss.ctx = (current->mm->context & 0x3ff); \
} \
spitfire_set_secondary_context(current->tss.ctx); \
__asm__ __volatile__("flush %g6"); \
diff --git a/include/asm-sparc64/unistd.h b/include/asm-sparc64/unistd.h
index ca749ffd9..960d3a01b 100644
--- a/include/asm-sparc64/unistd.h
+++ b/include/asm-sparc64/unistd.h
@@ -1,4 +1,4 @@
-/* $Id: unistd.h,v 1.17 1998/03/29 12:57:54 ecd Exp $ */
+/* $Id: unistd.h,v 1.20 1998/07/28 13:08:40 jj Exp $ */
#ifndef _SPARC64_UNISTD_H
#define _SPARC64_UNISTD_H
@@ -29,22 +29,22 @@
#define __NR_unlink 10 /* Common */
#define __NR_execv 11 /* SunOS Specific */
#define __NR_chdir 12 /* Common */
-#define __NR_xstat 13 /* Linux Specific */
+/* #define __NR_ni_syscall 13 ENOSYS under SunOS */
#define __NR_mknod 14 /* Common */
#define __NR_chmod 15 /* Common */
#define __NR_chown 16 /* Common */
#define __NR_brk 17 /* Common */
-#define __NR_xmknod 18 /* Linux Specific */
+/* #define __NR_ni_syscall 18 ENOSYS under SunOS */
#define __NR_lseek 19 /* Common */
#define __NR_getpid 20 /* Common */
-/* #define __NR_ni_syscall 21 ENOSYS under SunOS */
-/* #define __NR_ni_syscall 22 ENOSYS under SunOS */
+#define __NR_capget 21 /* Linux Specific */
+#define __NR_capset 22 /* Linux Specific */
#define __NR_setuid 23 /* Implemented via setreuid in SunOS */
#define __NR_getuid 24 /* Common */
/* #define __NR_time alias 25 ENOSYS under SunOS */
#define __NR_ptrace 26 /* Common */
#define __NR_alarm 27 /* Implemented via setitimer in SunOS */
-/* #define __NR_ni_syscall 28 ENOSYS under SunOS */
+#define __NR_sigaltstack 28 /* Common */
#define __NR_pause 29 /* Is sigblock(0)->sigpause() in SunOS */
#define __NR_utime 30 /* Implemented via utimes() under SunOS */
#define __NR_stty 31 /* Implemented via ioctl() under SunOS */
@@ -55,7 +55,7 @@
#define __NR_sync 36 /* Common */
#define __NR_kill 37 /* Common */
#define __NR_stat 38 /* Common */
-/* #define __NR_ni_syscall 39 ENOSYS under SunOS */
+#define __NR_sendfile 39 /* Linux Specific */
#define __NR_lstat 40 /* Common */
#define __NR_dup 41 /* Common */
#define __NR_pipe 42 /* Common */
@@ -135,7 +135,7 @@
#define __NR_gettimeofday 116 /* Common */
#define __NR_getrusage 117 /* Common */
#define __NR_getsockopt 118 /* Common */
-/* #define __NR_ni_syscall 119 ENOSYS under SunOS */
+#define __NR_getcwd 119 /* Linux Specific */
#define __NR_readv 120 /* Common */
#define __NR_writev 121 /* Common */
#define __NR_settimeofday 122 /* Common */
diff --git a/include/asm-sparc64/vaddrs.h b/include/asm-sparc64/vaddrs.h
index b88085668..04a265680 100644
--- a/include/asm-sparc64/vaddrs.h
+++ b/include/asm-sparc64/vaddrs.h
@@ -1,4 +1,4 @@
-/* $Id: vaddrs.h,v 1.8 1997/06/27 14:55:13 jj Exp $ */
+/* $Id: vaddrs.h,v 1.10 1998/05/14 13:36:01 jj Exp $ */
#ifndef _SPARC64_VADDRS_H
#define _SPARC64_VADDRS_H
@@ -7,19 +7,13 @@
* For instance the timer register virtual address
* is defined here.
*
- * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
+ * Copyright (C) 1995,1998 David S. Miller (davem@caip.rutgers.edu)
*/
-/* I can see only one reason why we should have statically defined
- * mappings for devices and is the speedup improvements of not loading
- * a pointer and then the value in the assembly code
- */
-#define IOBASE_VADDR 0x0000006000000000ULL /* Base for mapping pages */
-#define IOBASE_LEN 0x0000001000000000ULL /* Length of the IO area */
-#define IOBASE_END 0x0000007000000000ULL
-#define DVMA_VADDR 0x0000007000000000ULL /* Base area of the DVMA on suns */
-#define DVMA_LEN 0x0000001000000000ULL /* Size of the DVMA address space */
-#define DVMA_END 0x0000008000000000ULL
+/* Everything here must be in the first kernel PGD. */
+#define DVMA_VADDR 0x0000000100000000ULL /* Base area of the DVMA on suns */
+#define DVMA_LEN 0x0000000040000000ULL /* Size of the DVMA address space */
+#define DVMA_END 0x0000000140000000ULL
#define MODULES_VADDR 0x0000000001000000ULL /* Where to map modules */
#define MODULES_LEN 0x000000007f000000ULL
#define MODULES_END 0x0000000080000000ULL
diff --git a/include/asm-sparc64/vga.h b/include/asm-sparc64/vga.h
new file mode 100644
index 000000000..14ae757a4
--- /dev/null
+++ b/include/asm-sparc64/vga.h
@@ -0,0 +1,30 @@
+/*
+ * Access to VGA videoram
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ */
+
+#ifndef _LINUX_ASM_VGA_H_
+#define _LINUX_ASM_VGA_H_
+
+#define VT_BUF_HAVE_RW
+
+static inline void scr_writew(u16 val, u16 *addr)
+{
+ if ((long) addr < 0)
+ *addr = val;
+ else
+ writew(val, (unsigned long) addr);
+}
+
+static inline u16 scr_readw(u16 *addr)
+{
+ if ((long) addr < 0)
+ return *addr;
+ else
+ return readw((unsigned long) addr);
+}
+
+#define VGA_MAP_MEM(x) (x)
+
+#endif
diff --git a/include/asm-sparc64/visasm.h b/include/asm-sparc64/visasm.h
new file mode 100644
index 000000000..e1de6a384
--- /dev/null
+++ b/include/asm-sparc64/visasm.h
@@ -0,0 +1,62 @@
+/* $Id: visasm.h,v 1.2 1998/06/19 12:14:47 jj Exp $ */
+#ifndef _SPARC64_VISASM_H
+#define _SPARC64_VISASM_H
+
+/* visasm.h: FPU saving macros for VIS routines
+ *
+ * Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz)
+ */
+
+#include <asm/pstate.h>
+#include <asm/ptrace.h>
+
+#define AOFF_task_fpregs ((AOFF_task_sigmask_lock + 285)&~255)
+
+/* Clobbers %o5, %g1, %g2, %g3, %g7, %icc, %xcc */
+
+#define VISEntry \
+ rd %fprs, %o5; \
+ andcc %o5, (FPRS_FEF|FPRS_DU), %g0; \
+ be,pt %icc, 297f; \
+ sethi %hi(297f), %g7; \
+ ba,pt %xcc, VISenter; \
+ or %g7, %lo(297f), %g7; \
+297: wr %g0, FPRS_FEF, %fprs; \
+
+#define VISExit \
+ wr %g0, 0, %fprs;
+
+/* Clobbers %o5, %g1, %g2, %g3, %g7, %icc, %xcc.
+ * Must preserve %o5 between VISEntryHalf and VISExitHalf */
+
+#define VISEntryHalf \
+ rd %fprs, %o5; \
+ andcc %o5, FPRS_FEF, %g0; \
+ be,pt %icc, 297f; \
+ sethi %hi(298f), %g7; \
+ ba,pt %xcc, VISenterhalf; \
+ or %g7, %lo(298f), %g7; \
+ clr %o5; \
+297: wr %o5, FPRS_FEF, %fprs; \
+298:
+
+#define VISExitHalf \
+ wr %o5, 0, %fprs;
+
+#ifndef __ASSEMBLY__
+extern __inline__ void save_and_clear_fpu(void) {
+ __asm__ __volatile__ ("
+ rd %%fprs, %%o5
+ andcc %%o5, %0, %%g0
+ be,pt %%icc, 299f
+ sethi %%hi(298f), %%g7
+ ba VISenter ! Note. This cannot be bp, as it may be too far from VISenter.
+ or %%g7, %%lo(298f), %%g7
+ 298: wr %%g0, 0, %%fprs
+ 299:
+ " : : "i" (FPRS_FEF|FPRS_DU) :
+ "o5", "g1", "g2", "g3", "g7", "cc");
+}
+#endif
+
+#endif /* _SPARC64_ASI_H */
diff --git a/include/asm-sparc64/xstat.h b/include/asm-sparc64/xstat.h
deleted file mode 100644
index f73a1b967..000000000
--- a/include/asm-sparc64/xstat.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* $Id: xstat.h,v 1.1 1998/02/06 12:52:18 jj Exp $
- * xstat.h: sys_xstat/xmknod architecture dependent stuff.
- *
- * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
- */
-
-extern __inline__ int cp_xstat32(struct inode *inode, struct stat64_32 *s, unsigned long blocks, int blksize)
-{
- struct stat64_32 tmp;
-
- memset (&tmp, 0, sizeof(tmp));
- tmp.st_dev = (((__u64)MAJOR(inode->i_dev)) << 32) | MINOR(inode->i_dev);
- tmp.st_ino = inode->i_ino;
- tmp.st_mode = inode->i_mode;
- tmp.st_nlink = inode->i_nlink;
- tmp.st_uid = inode->i_uid;
- tmp.st_gid = inode->i_gid;
- tmp.st_rdev = (((__u64)MAJOR(inode->i_rdev)) << 32) | MINOR(inode->i_rdev);
- tmp.st_size = inode->i_size;
- tmp.st_blocks = blocks;
- tmp.st_atime = inode->i_atime;
- tmp.st_mtime = inode->i_mtime;
- tmp.st_ctime = inode->i_ctime;
- tmp.st_blksize = blksize;
- return copy_to_user(s,&tmp,sizeof(tmp));
-}
-
-extern __inline__ int cp_xstat(struct inode *inode, struct stat64 *s, unsigned long blocks, int blksize)
-{
- struct stat64 tmp;
- if (current->tss.flags & SPARC_FLAG_32BIT)
- return cp_xstat32(inode, (struct stat64_32 *)s, blocks, blksize);
- memset (&tmp, 0, sizeof(tmp));
- tmp.st_dev = (((__u64)MAJOR(inode->i_dev)) << 32) | MINOR(inode->i_dev);
- tmp.st_ino = inode->i_ino;
- tmp.st_mode = inode->i_mode;
- tmp.st_nlink = inode->i_nlink;
- tmp.st_uid = inode->i_uid;
- tmp.st_gid = inode->i_gid;
- tmp.st_rdev = (((__u64)MAJOR(inode->i_rdev)) << 32) | MINOR(inode->i_rdev);
- tmp.st_size = inode->i_size;
- tmp.st_atim.tv_sec = inode->i_atime;
- tmp.st_mtim.tv_sec = inode->i_mtime;
- tmp.st_ctim.tv_sec = inode->i_ctime;
- tmp.st_blksize = blksize;
- tmp.st_blocks = blocks;
- /* Should I check if all fs names are < 16? All in the kernel tree are */
- if (inode->i_sb)
- strcpy(tmp.st_fstype, inode->i_sb->s_type->name);
- return copy_to_user(s,&tmp,sizeof(tmp));
-}
-
-extern __inline__ int get_user_new_dev_t(kdev_t *kdev, __new_dev_t *udev) {
- __new_dev_t ndev;
- if (copy_from_user (&ndev, udev, sizeof(__new_dev_t))) return -EFAULT;
- *kdev = MKDEV((ndev >> 32), (__u32)ndev);
- return 0;
-}
diff --git a/include/linux/adfs_fs.h b/include/linux/adfs_fs.h
index 453bb9258..fe4e79e4b 100644
--- a/include/linux/adfs_fs.h
+++ b/include/linux/adfs_fs.h
@@ -111,30 +111,22 @@ union adfs_dirtail {
};
#ifdef __KERNEL__
-
-
/*
* Calculate the boot block checksum on an ADFS drive. Note that this will
* appear to be correct if the sector contains all zeros, so also check that
* the disk size is non-zero!!!
*/
-
extern inline int adfs_checkbblk(unsigned char *ptr)
{
- int i = 511;
-
- int result = 0;
+ unsigned int result = 0;
+ unsigned char *p = ptr + 511;
do {
- result = (result & 0xff) + (result >> 8);
- result = result + ptr[i];
- i--;
- }
- while (i != 0);
-
- result &= 0xff;
- return result != ptr[511];
- return 0;
+ result = (result & 0xff) + (result >> 8);
+ result = result + *--p;
+ } while (p != ptr);
+
+ return (result & 0xff) != ptr[511];
}
/* dir.c */
diff --git a/include/linux/affs_fs.h b/include/linux/affs_fs.h
index 79e3c3639..6361a82a1 100644
--- a/include/linux/affs_fs.h
+++ b/include/linux/affs_fs.h
@@ -93,7 +93,8 @@ extern int init_affs_fs(void);
/* file.c */
-extern void affs_truncate(struct inode *);
+void affs_free_prealloc(struct inode *inode);
+extern void affs_truncate(struct inode *);
/* dir.c */
diff --git a/include/asm-m68k/amifd.h b/include/linux/amifd.h
index ea21e69fd..491bdd86a 100644
--- a/include/asm-m68k/amifd.h
+++ b/include/linux/amifd.h
@@ -1,5 +1,5 @@
-#ifndef _ASM_M68K_AMIFD_H
-#define _ASM_M68K_AMIFD_H
+#ifndef _AMIFD_H
+#define _AMIFD_H
/* Definitions for the Amiga floppy driver */
diff --git a/include/asm-m68k/amifdreg.h b/include/linux/amifdreg.h
index 76188bf48..76188bf48 100644
--- a/include/asm-m68k/amifdreg.h
+++ b/include/linux/amifdreg.h
diff --git a/include/linux/arcdevice.h b/include/linux/arcdevice.h
index dc427588b..054c59f15 100644
--- a/include/linux/arcdevice.h
+++ b/include/linux/arcdevice.h
@@ -113,8 +113,9 @@ extern int arcnet_debug;
/* macros to simplify debug checking */
#define BUGLVL(x) if ((ARCNET_DEBUG_MAX)&arcnet_debug&(x))
-#define BUGMSG2(x,msg,args...) BUGLVL(x) printk(msg, ## args)
-#define BUGMSG(x,msg,args...) BUGMSG2(x,"%s%6s: " msg, \
+#define BUGMSG2(x,msg,args...) do { BUGLVL(x) printk(msg, ## args); } while (0)
+#define BUGMSG(x,msg,args...) \
+ BUGMSG2(x,"%s%6s: " msg, \
x==D_NORMAL ? KERN_WARNING : \
x<=D_INIT_REASONS ? KERN_INFO : KERN_DEBUG , \
dev->name , ## args)
diff --git a/include/linux/atalk.h b/include/linux/atalk.h
index 4981ed2eb..5641129d7 100644
--- a/include/linux/atalk.h
+++ b/include/linux/atalk.h
@@ -1,5 +1,5 @@
/*
- * Appletalk networking structures
+ * AppleTalk networking structures
*
* The following are directly referenced from the University Of Michigan
* netatalk for compatibility reasons.
@@ -54,7 +54,7 @@ struct atalk_iface
{
struct device *dev;
struct at_addr address; /* Our address */
- int status; /* What are we doing ?? */
+ int status; /* What are we doing? */
#define ATIF_PROBE 1 /* Probing for an address */
#define ATIF_PROBE_FAIL 2 /* Probe collided */
struct netrange nets; /* Associated direct netrange */
@@ -93,6 +93,20 @@ struct ddpehdr
};
/*
+ * Don't drop the struct into the struct above. You'll get some
+ * surprise padding.
+ */
+
+struct ddpebits
+{
+#ifdef __LITTLE_ENDIAN_BITFIELD
+ __u16 deh_len:10, deh_hops:4, deh_pad:2;
+#else
+ __u16 deh_pad:2, deh_hops:4, deh_len:10;
+#endif
+};
+
+/*
* Short form header
*/
@@ -108,7 +122,7 @@ struct ddpshdr
/* And netatalk apps expect to stick the type in themselves */
};
-/* Appletalk AARP headers */
+/* AppleTalk AARP headers */
struct elapaarp
{
diff --git a/include/linux/atari_rootsec.h b/include/linux/atari_rootsec.h
new file mode 100644
index 000000000..09745f7a0
--- /dev/null
+++ b/include/linux/atari_rootsec.h
@@ -0,0 +1,34 @@
+#ifndef _LINUX_ATARI_ROOTSEC_H
+#define _LINUX_ATARI_ROOTSEC_H
+
+/*
+ * linux/include/linux/atari_rootsec.h
+ * definitions for Atari Rootsector layout
+ * by Andreas Schwab (schwab@ls5.informatik.uni-dortmund.de)
+ *
+ * modified for ICD/Supra partitioning scheme restricted to at most 12
+ * partitions
+ * by Guenther Kelleter (guenther@pool.informatik.rwth-aachen.de)
+ */
+
+struct partition_info
+{
+ u_char flg; /* bit 0: active; bit 7: bootable */
+ char id[3]; /* "GEM", "BGM", "XGM", or other */
+ u32 st; /* start of partition */
+ u32 siz; /* length of partition */
+};
+
+struct rootsector
+{
+ char unused[0x156]; /* room for boot code */
+ struct partition_info icdpart[8]; /* info for ICD-partitions 5..12 */
+ char unused2[0xc];
+ u32 hd_siz; /* size of disk in blocks */
+ struct partition_info part[4];
+ u32 bsl_st; /* start of bad sector list */
+ u32 bsl_cnt; /* length of bad sector list */
+ u16 checksum; /* checksum for bootable disks */
+} __attribute__ ((__packed__));
+
+#endif /* _LINUX_ATARI_ROOTSEC_H */
diff --git a/include/linux/ax25.h b/include/linux/ax25.h
index 8958e177e..1e492c8ff 100644
--- a/include/linux/ax25.h
+++ b/include/linux/ax25.h
@@ -7,7 +7,7 @@
#define AX25_KERNEL_H
#define AX25_MTU 256
-#define AX25_MAX_DIGIS 6 /* This is wrong, should be 8 */
+#define AX25_MAX_DIGIS 8
#define AX25_WINDOW 1
#define AX25_T1 2
@@ -71,11 +71,13 @@ struct ax25_route_opt_struct {
};
struct ax25_ctl_struct {
- ax25_address port_addr;
- ax25_address source_addr;
- ax25_address dest_addr;
- unsigned int cmd;
- unsigned long arg;
+ ax25_address port_addr;
+ ax25_address source_addr;
+ ax25_address dest_addr;
+ unsigned int cmd;
+ unsigned long arg;
+ unsigned char digi_count;
+ ax25_address digi_addr[AX25_MAX_DIGIS];
};
struct ax25_info_struct {
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
new file mode 100644
index 000000000..ddb84dd62
--- /dev/null
+++ b/include/linux/bitops.h
@@ -0,0 +1,72 @@
+#ifndef _LINUX_BITOPS_H
+#define _LINUX_BITOPS_H
+
+
+/*
+ * ffs: find first bit set. This is defined the same way as
+ * the libc and compiler builtin ffs routines, therefore
+ * differs in spirit from the above ffz (man ffs).
+ */
+
+extern __inline__ int generic_ffs(int x)
+{
+ int r = 1;
+
+ if (!x)
+ return 0;
+ if (!(x & 0xffff)) {
+ x >>= 16;
+ r += 16;
+ }
+ if (!(x & 0xff)) {
+ x >>= 8;
+ r += 8;
+ }
+ if (!(x & 0xf)) {
+ x >>= 4;
+ r += 4;
+ }
+ if (!(x & 3)) {
+ x >>= 2;
+ r += 2;
+ }
+ if (!(x & 1)) {
+ x >>= 1;
+ r += 1;
+ }
+ return r;
+}
+
+/*
+ * hweightN: returns the hamming weight (i.e. the number
+ * of bits set) of a N-bit word
+ */
+
+extern __inline__ unsigned int generic_hweight32(unsigned int w)
+{
+ unsigned int res = (w & 0x55555555) + ((w >> 1) & 0x55555555);
+ res = (res & 0x33333333) + ((res >> 2) & 0x33333333);
+ res = (res & 0x0F0F0F0F) + ((res >> 4) & 0x0F0F0F0F);
+ res = (res & 0x00FF00FF) + ((res >> 8) & 0x00FF00FF);
+ return (res & 0x0000FFFF) + ((res >> 16) & 0x0000FFFF);
+}
+
+extern __inline__ unsigned int generic_hweight16(unsigned int w)
+{
+ unsigned int res = (w & 0x5555) + ((w >> 1) & 0x5555);
+ res = (res & 0x3333) + ((res >> 2) & 0x3333);
+ res = (res & 0x0F0F) + ((res >> 4) & 0x0F0F);
+ return (res & 0x00FF) + ((res >> 8) & 0x00FF);
+}
+
+extern __inline__ unsigned int generic_hweight8(unsigned int w)
+{
+ unsigned int res = (w & 0x55) + ((w >> 1) & 0x55);
+ res = (res & 0x33) + ((res >> 2) & 0x33);
+ return (res & 0x0F) + ((res >> 4) & 0x0F);
+}
+
+#include <asm/bitops.h>
+
+
+#endif
diff --git a/include/linux/blk.h b/include/linux/blk.h
index d7dc45db6..e069791f2 100644
--- a/include/linux/blk.h
+++ b/include/linux/blk.h
@@ -32,21 +32,6 @@ extern spinlock_t io_request_lock;
(s1)->sector < (s2)->sector)))
/*
- * These will have to be changed to be aware of different buffer
- * sizes etc.. It actually needs a major cleanup.
- */
-#if defined(IDE_DRIVER) || defined(MD_DRIVER)
-#define SECTOR_MASK ((BLOCK_SIZE >> 9) - 1)
-#else
-#define SECTOR_MASK (blksize_size[MAJOR_NR] && \
- blksize_size[MAJOR_NR][MINOR(CURRENT->rq_dev)] ? \
- ((blksize_size[MAJOR_NR][MINOR(CURRENT->rq_dev)] >> 9) - 1) : \
- ((BLOCK_SIZE >> 9) - 1))
-#endif /* IDE_DRIVER */
-
-#define SUBSECTOR(block) (CURRENT->current_nr_sectors > 0)
-
-/*
* Initialization functions.
*/
extern int isp16_init(void);
@@ -65,12 +50,18 @@ extern int cdi_init(void);
extern int hd_init(void);
extern int ide_init(void);
extern int xd_init(void);
+extern int mfm_init(void);
extern int loop_init(void);
extern int md_init(void);
extern int ap_init(void);
extern int ddv_init(void);
extern int z2_init(void);
extern int swim3_init(void);
+extern int amiga_floppy_init(void);
+extern int atari_floppy_init(void);
+extern int nbd_init(void);
+extern int ez_init(void);
+extern int bpcd_init(void);
extern int ps2esdi_init(void);
extern void set_device_ro(kdev_t dev,int flag);
@@ -112,6 +103,7 @@ void initrd_init(void);
#define DEVICE_NR(device) (MINOR(device) >> PARTN_BITS)
#define DEVICE_ON(device) /* nothing */
#define DEVICE_OFF(device) /* nothing */
+#define DEVICE_NAME "ide"
#elif (MAJOR_NR == RAMDISK_MAJOR)
@@ -145,8 +137,8 @@ static void floppy_off(unsigned int nr);
#elif (MAJOR_NR == HD_MAJOR)
-/* harddisk: timeout is 6 seconds.. */
-#define DEVICE_NAME "harddisk"
+/* Hard disk: timeout is 6 seconds. */
+#define DEVICE_NAME "hard disk"
#define DEVICE_INTR do_hd
#define DEVICE_TIMEOUT HD_TIMER
#define TIMEOUT_VALUE (6*HZ)
@@ -300,7 +292,7 @@ static void floppy_off(unsigned int nr);
#define DEVICE_OFF(device)
#elif (MAJOR_NR == CM206_CDROM_MAJOR)
-#define DEVICE_NAME "Philips/LMS cd-rom cm206"
+#define DEVICE_NAME "Philips/LMS CD-ROM cm206"
#define DEVICE_REQUEST do_cm206_request
#define DEVICE_NR(device) (MINOR(device))
#define DEVICE_ON(device)
@@ -338,6 +330,32 @@ static void floppy_off(unsigned int nr);
#define DEVICE_ON(device)
#define DEVICE_OFF(device)
+#elif (MAJOR_NR == MFM_ACORN_MAJOR)
+
+#define DEVICE_NAME "mfm disk"
+#define DEVICE_INTR do_mfm
+#define DEVICE_REQUEST do_mfm_request
+#define DEVICE_NR(device) (MINOR(device) >> 6)
+#define DEVICE_ON(device)
+#define DEVICE_OFF(device)
+
+#elif (MAJOR_NR == MFM_ACORN_MAJOR)
+
+#define DEVICE_NAME "mfm disk"
+#define DEVICE_INTR do_mfm
+#define DEVICE_REQUEST do_mfm_request
+#define DEVICE_NR(device) (MINOR(device) >> 6)
+#define DEVICE_ON(device)
+#define DEVICE_OFF(device)
+
+#elif (MAJOR_NR == NBD_MAJOR)
+
+#define DEVICE_NAME "nbd"
+#define DEVICE_REQUEST do_nbd_request
+#define DEVICE_NR(device) (MINOR(device))
+#define DEVICE_ON(device)
+#define DEVICE_OFF(device)
+
#endif /* MAJOR_NR == whatever */
#if (MAJOR_NR != SCSI_TAPE_MAJOR)
@@ -347,11 +365,16 @@ static void floppy_off(unsigned int nr);
#define CURRENT (blk_dev[MAJOR_NR].current_request)
#endif
+#ifndef DEVICE_NAME
+#define DEVICE_NAME "unknown"
+#endif
+
#define CURRENT_DEV DEVICE_NR(CURRENT->rq_dev)
#ifdef DEVICE_INTR
static void (*DEVICE_INTR)(void) = NULL;
#endif
+
#ifdef DEVICE_TIMEOUT
#define SET_TIMER \
@@ -395,89 +418,40 @@ static void (DEVICE_REQUEST)(void);
#endif /* !defined(IDE_DRIVER) */
-/* end_request() - SCSI devices have their own version */
-/* - IDE drivers have their own copy too */
-
-#if ! SCSI_BLK_MAJOR(MAJOR_NR)
-
/*
- * The [*_]end_request() handler has to be called with the request queue
- * spinlock aquired. All functions called within end_request() _must be_
- * atomic.
+ * end_request() and friends. Must be called with the request queue spinlock
+ * acquired. All functions called within end_request() _must_be_ atomic.
+ *
+ * Several drivers define their own end_request and call end_that_request_first()
+ * and end_that_request_last() for parts of the original function. This prevents
+ * code duplication in drivers.
*/
-#if defined(IDE_DRIVER) && !defined(_IDE_C) /* shared copy for IDE modules */
-void ide_end_request(byte uptodate, ide_hwgroup_t *hwgroup);
-#else
-#ifdef IDE_DRIVER
-void ide_end_request(byte uptodate, ide_hwgroup_t *hwgroup) {
- int nsect;
- struct buffer_head *bh;
- struct request *req;
- unsigned long flags;
-
- spin_lock_irqsave(&io_request_lock,flags);
- req = hwgroup->rq;
-#else
+int end_that_request_first(struct request *req, int uptodate, char *name);
+void end_that_request_last(struct request *req);
+
+#ifndef LOCAL_END_REQUEST /* If we have our own end_request, we do not want to include this mess */
+
+#if ! SCSI_BLK_MAJOR(MAJOR_NR)
+
static void end_request(int uptodate) {
- int nsect;
- struct buffer_head *bh;
struct request *req = CURRENT;
-#endif /* IDE_DRIVER */
- req->errors = 0;
- if (!uptodate) {
- printk("end_request: I/O error, dev %s, sector %lu\n",
- kdevname(req->rq_dev), req->sector);
- if ((bh = req->bh) != NULL) {
- nsect = bh->b_size >> 9;
- req->nr_sectors--;
- req->nr_sectors &= ~(nsect - 1);
- req->sector += nsect;
- req->sector &= ~(nsect - 1);
- }
- }
+ if (end_that_request_first(req, uptodate, DEVICE_NAME))
+ return;
- if ((bh = req->bh) != NULL) {
- req->bh = bh->b_reqnext;
- bh->b_reqnext = NULL;
- bh->b_end_io(bh, uptodate);
- if ((bh = req->bh) != NULL) {
- req->current_nr_sectors = bh->b_size >> 9;
- if (req->nr_sectors < req->current_nr_sectors) {
- req->nr_sectors = req->current_nr_sectors;
- printk("end_request: buffer-list destroyed\n");
- }
- req->buffer = bh->b_data;
-#ifdef IDE_DRIVER
- spin_unlock_irqrestore(&io_request_lock,flags);
-#endif /* IDE_DRIVER */
- return;
- }
- }
#ifndef DEVICE_NO_RANDOM
add_blkdev_randomness(MAJOR(req->rq_dev));
#endif
-#ifdef IDE_DRIVER
- hwgroup->drive->queue = req->next;
- blk_dev[MAJOR(req->rq_dev)].current_request = NULL;
- hwgroup->rq = NULL;
-#else
DEVICE_OFF(req->rq_dev);
CURRENT = req->next;
-#endif /* IDE_DRIVER */
- if (req->sem != NULL)
- up(req->sem);
- req->rq_status = RQ_INACTIVE;
- wake_up(&wait_for_request);
-#ifdef IDE_DRIVER
- spin_unlock_irqrestore(&io_request_lock,flags);
-#endif /* IDE_DRIVER */
+ end_that_request_last(req);
}
-#endif /* defined(IDE_DRIVER) && !defined(_IDE_C) */
+
#endif /* ! SCSI_BLK_MAJOR(MAJOR_NR) */
-#endif /* (MAJOR_NR != SCSI_TAPE_MAJOR) */
+#endif /* LOCAL_END_REQUEST */
+#endif /* (MAJOR_NR != SCSI_TAPE_MAJOR) */
#endif /* defined(MAJOR_NR) || defined(IDE_DRIVER) */
#endif /* _BLK_H */
diff --git a/include/linux/bpqether.h b/include/linux/bpqether.h
index cc7d35831..a6c35e1a8 100644
--- a/include/linux/bpqether.h
+++ b/include/linux/bpqether.h
@@ -20,7 +20,7 @@ struct bpq_ethaddr {
/*
* For SIOCSBPQETHOPT - this is compatible with PI2/PacketTwin card drivers,
* currently not implemented, though. If someone wants to hook a radio
- * to his ethernet card he may find this useful... ;-)
+ * to his Ethernet card he may find this useful. ;-)
*/
#define SIOCGBPQETHPARAM 0x5000 /* get Level 1 parameters */
diff --git a/include/linux/byteorder/generic.h b/include/linux/byteorder/generic.h
index 633f7b90a..5200dc1ad 100644
--- a/include/linux/byteorder/generic.h
+++ b/include/linux/byteorder/generic.h
@@ -55,7 +55,7 @@
* __constant_htons(__u16 x)
*
* Conversion of XX-bit integers (16- 32- or 64-)
- * between native cpu format and little/big endian format
+ * between native CPU format and little/big endian format
* 64-bit stuff only defined for proper architectures
* cpu_to_[bl]eXX(__uXX x)
* [bl]eXX_to_cpu(__uXX x)
diff --git a/include/linux/byteorder/swab.h b/include/linux/byteorder/swab.h
index 8110bfb85..7c1f5c985 100644
--- a/include/linux/byteorder/swab.h
+++ b/include/linux/byteorder/swab.h
@@ -3,7 +3,7 @@
/*
* linux/byteorder/swab.h
- * Byteswapping, independently from cpu endianness
+ * Byte-swapping, independently from CPU endianness
* swabXX[ps]?(foo)
*
* Francois-Rene Rideau <rideau@ens.fr> 19971205
diff --git a/include/linux/capability.h b/include/linux/capability.h
index a0342601f..3f5260c02 100644
--- a/include/linux/capability.h
+++ b/include/linux/capability.h
@@ -305,7 +305,7 @@ static inline kernel_cap_t cap_invert(kernel_cap_t c)
#define cap_set_full(c) do { (c).cap = ~0; } while(0)
#define cap_mask(c,mask) do { (c).cap &= (mask).cap; } while(0)
-#define cap_is_fs_cap(c) ((c) & CAP_FS_MASK)
+#define cap_is_fs_cap(c) (CAP_TO_MASK(c) & CAP_FS_MASK)
#endif /* __KERNEL__ */
diff --git a/include/linux/coda.h b/include/linux/coda.h
index 5c3cb563e..9cdf0d04b 100644
--- a/include/linux/coda.h
+++ b/include/linux/coda.h
@@ -148,8 +148,8 @@ static inline ino_t coda_f2i(struct ViceFid *fid)
#ifndef _VUID_T_
#define _VUID_T_
-typedef u_long vuid_t;
-typedef u_long vgid_t;
+typedef unsigned int vuid_t;
+typedef unsigned int vgid_t;
#endif /*_VUID_T_ */
#ifndef _CODACRED_T_
@@ -223,7 +223,7 @@ struct coda_vattr {
#define CFS_PURGEUSER ((u_long) 26)
#define CFS_ZAPFILE ((u_long) 27)
#define CFS_ZAPDIR ((u_long) 28)
-#define CFS_ZAPVNODE ((u_long) 29)
+/* #define CFS_ZAPVNODE ((u_long) 29) obsolete */
#define CFS_PURGEFID ((u_long) 30)
#define CFS_OPEN_BY_PATH ((u_long) 31)
#define CFS_NCALLS 32
diff --git a/include/linux/coda_linux.h b/include/linux/coda_linux.h
index 9dd30eaeb..e867226ec 100644
--- a/include/linux/coda_linux.h
+++ b/include/linux/coda_linux.h
@@ -48,6 +48,7 @@ static __inline__ struct ViceFid *coda_i2f(struct inode *);
char *coda_f2s(ViceFid *f);
int coda_isroot(struct inode *i);
int coda_fid_is_volroot(struct ViceFid *);
+int coda_fid_is_weird(struct ViceFid *fid);
int coda_iscontrol(const char *name, size_t length);
diff --git a/include/linux/coda_psdev.h b/include/linux/coda_psdev.h
index 73600b8ba..7b827e8c3 100644
--- a/include/linux/coda_psdev.h
+++ b/include/linux/coda_psdev.h
@@ -74,7 +74,7 @@ int venus_mkdir(struct super_block *sb, struct ViceFid *dirfid,
const char *name, int length,
struct ViceFid *newfid, struct coda_vattr *attrs);
int venus_create(struct super_block *sb, struct ViceFid *dirfid,
- const char *name, int length, int excl, int mode,
+ const char *name, int length, int excl, int mode, int rdev,
struct ViceFid *newfid, struct coda_vattr *attrs) ;
int venus_rmdir(struct super_block *sb, struct ViceFid *dirfid,
const char *name, int length);
diff --git a/include/linux/console.h b/include/linux/console.h
index e287e64d5..0fdb484d6 100644
--- a/include/linux/console.h
+++ b/include/linux/console.h
@@ -14,9 +14,8 @@
#ifndef _LINUX_CONSOLE_H_
#define _LINUX_CONSOLE_H_ 1
-#define NPAR 16
-
struct vc_data;
+struct console_font_op;
/*
* this is what the terminal answers to a ESC-Z or csi0c query.
@@ -24,27 +23,38 @@ struct vc_data;
#define VT100ID "\033[?1;2c"
#define VT102ID "\033[?6c"
-/* DPC: 1994-04-13 !!! con_putcs is new entry !!! */
-
struct consw {
- unsigned long (*con_startup)(unsigned long, const char **);
- void (*con_init)(struct vc_data *);
- int (*con_deinit)(struct vc_data *);
- int (*con_clear)(struct vc_data *, int, int, int, int);
- int (*con_putc)(struct vc_data *, int, int, int);
- int (*con_putcs)(struct vc_data *, const char *, int, int, int);
- int (*con_cursor)(struct vc_data *, int);
- int (*con_scroll)(struct vc_data *, int, int, int, int);
- int (*con_bmove)(struct vc_data *, int, int, int, int, int, int);
- int (*con_switch)(struct vc_data *);
- int (*con_blank)(int);
- int (*con_get_font)(struct vc_data *, int *, int *, char *);
- int (*con_set_font)(struct vc_data *, int, int, char *);
- int (*con_set_palette)(struct vc_data *, unsigned char *);
+ const char *(*con_startup)(void);
+ void (*con_init)(struct vc_data *, int);
+ void (*con_deinit)(struct vc_data *);
+ void (*con_clear)(struct vc_data *, int, int, int, int);
+ void (*con_putc)(struct vc_data *, int, int, int);
+ void (*con_putcs)(struct vc_data *, const unsigned short *, int, int, int);
+ void (*con_cursor)(struct vc_data *, int);
+ int (*con_scroll)(struct vc_data *, int, int, int, int);
+ void (*con_bmove)(struct vc_data *, int, int, int, int, int, int);
+ int (*con_switch)(struct vc_data *);
+ int (*con_blank)(struct vc_data *, int);
+ int (*con_font_op)(struct vc_data *, struct console_font_op *);
+ int (*con_set_palette)(struct vc_data *, unsigned char *);
+ int (*con_scrolldelta)(struct vc_data *, int);
+ int (*con_set_origin)(struct vc_data *);
+ void (*con_save_screen)(struct vc_data *);
+ u8 (*con_build_attr)(struct vc_data *, u8, u8, u8, u8, u8);
+ void (*con_invert_region)(struct vc_data *, u16 *, int);
};
extern struct consw *conswitchp;
+extern struct consw dummy_con; /* dummy console buffer */
+extern struct consw fb_con; /* frame buffer based console */
+extern struct consw vga_con; /* VGA text console */
+extern struct consw newport_con; /* SGI Newport console */
+extern struct consw compat_con; /* console wrapper */
+extern struct consw prom_con; /* SPARC PROM console */
+
+void take_over_console(struct consw *sw, int first, int last, int deflt);
+
/* flag bits */
#define CON_INITED (1)
@@ -59,9 +69,6 @@ extern struct consw *conswitchp;
#define CM_ERASE (2)
#define CM_MOVE (3)
-struct tty_struct;
-int tioclinux(struct tty_struct *tty, unsigned long arg);
-
/*
* Array of consoles built from command line options (console=)
*/
@@ -102,4 +109,10 @@ extern void register_console(struct console *);
extern int unregister_console(struct console *);
extern struct console *console_drivers;
-#endif /* linux/console.h */
+/* VESA Blanking Levels */
+#define VESA_NO_BLANKING 0
+#define VESA_VSYNC_SUSPEND 1
+#define VESA_HSYNC_SUSPEND 2
+#define VESA_POWERDOWN 3
+
+#endif /* _LINUX_CONSOLE_H */
diff --git a/include/linux/console_struct.h b/include/linux/console_struct.h
index 99ed0e347..dafd1c299 100644
--- a/include/linux/console_struct.h
+++ b/include/linux/console_struct.h
@@ -1,69 +1,73 @@
/*
* console_struct.h
*
- * Data structure and defines shared between console.c, vga.c and tga.c
+ * Data structure describing single virtual console except for data
+ * used by vt.c.
+ *
+ * Fields marked with [#] must be set by the low-level driver.
+ * Fields marked with [!] can be changed by the low-level driver
+ * to achieve effects such as fast scrolling by changing the origin.
*/
-#include <linux/config.h>
-
#define NPAR 16
struct vc_data {
- unsigned long vc_screenbuf_size;
+ unsigned short vc_num; /* Console number */
+ unsigned int vc_cols; /* [#] Console size */
+ unsigned int vc_rows;
+ unsigned int vc_size_row; /* Bytes per row */
+ struct consw *vc_sw;
+ unsigned short *vc_screenbuf; /* In-memory character/attribute buffer */
+ unsigned int vc_screenbuf_size;
unsigned short vc_video_erase_char; /* Background erase character */
unsigned char vc_attr; /* Current attributes */
unsigned char vc_def_color; /* Default colors */
unsigned char vc_color; /* Foreground & background */
unsigned char vc_s_color; /* Saved foreground & background */
- unsigned char vc_ulcolor; /* Colour for underline mode */
- unsigned char vc_halfcolor; /* Colour for half intensity mode */
- unsigned long vc_origin; /* Used for EGA/VGA fast scroll */
- unsigned long vc_scr_end; /* Used for EGA/VGA fast scroll */
- unsigned long vc_x,vc_y;
- unsigned long vc_top,vc_bottom;
- unsigned long vc_state;
- unsigned long vc_npar,vc_par[NPAR];
-#ifdef CONFIG_FB_CONSOLE
- unsigned short *vc_video_mem_start; /* Start of video RAM */
- unsigned short *vc_pos;
-#else
- unsigned long vc_pos;
- unsigned long vc_video_mem_start; /* Start of video RAM */
-#endif
- unsigned long vc_video_mem_end; /* End of video RAM (sort of) */
- unsigned long vc_saved_x;
- unsigned long vc_saved_y;
+ unsigned char vc_ulcolor; /* Color for underline mode */
+ unsigned char vc_halfcolor; /* Color for half intensity mode */
+ unsigned short vc_complement_mask; /* [#] Xor mask for mouse pointer */
+ unsigned short vc_hi_font_mask; /* [#] Attribute set for upper 256 chars of font or 0 if not supported */
+ unsigned int vc_x, vc_y; /* Cursor position */
+ unsigned int vc_top, vc_bottom; /* Scrolling region */
+ unsigned int vc_state; /* Escape sequence parser state */
+ unsigned int vc_npar,vc_par[NPAR]; /* Parameters of current escape sequence */
+ unsigned long vc_origin; /* [!] Start of real screen */
+ unsigned long vc_scr_end; /* [!] End of real screen */
+ unsigned long vc_visible_origin; /* [!] Top of visible window */
+ unsigned long vc_pos; /* Cursor address */
+ unsigned int vc_saved_x;
+ unsigned int vc_saved_y;
/* mode flags */
- unsigned long vc_charset : 1; /* Character set G0 / G1 */
- unsigned long vc_s_charset : 1; /* Saved character set */
- unsigned long vc_disp_ctrl : 1; /* Display chars < 32? */
- unsigned long vc_toggle_meta : 1; /* Toggle high bit? */
- unsigned long vc_decscnm : 1; /* Screen Mode */
- unsigned long vc_decom : 1; /* Origin Mode */
- unsigned long vc_decawm : 1; /* Autowrap Mode */
- unsigned long vc_deccm : 1; /* Cursor Visible */
- unsigned long vc_decim : 1; /* Insert Mode */
- unsigned long vc_deccolm : 1; /* 80/132 Column Mode */
+ unsigned int vc_charset : 1; /* Character set G0 / G1 */
+ unsigned int vc_s_charset : 1; /* Saved character set */
+ unsigned int vc_disp_ctrl : 1; /* Display chars < 32? */
+ unsigned int vc_toggle_meta : 1; /* Toggle high bit? */
+ unsigned int vc_decscnm : 1; /* Screen Mode */
+ unsigned int vc_decom : 1; /* Origin Mode */
+ unsigned int vc_decawm : 1; /* Autowrap Mode */
+ unsigned int vc_deccm : 1; /* Cursor Visible */
+ unsigned int vc_decim : 1; /* Insert Mode */
+ unsigned int vc_deccolm : 1; /* 80/132 Column Mode */
/* attribute flags */
- unsigned long vc_intensity : 2; /* 0=half-bright, 1=normal, 2=bold */
- unsigned long vc_underline : 1;
- unsigned long vc_blink : 1;
- unsigned long vc_reverse : 1;
- unsigned long vc_s_intensity : 2; /* saved rendition */
- unsigned long vc_s_underline : 1;
- unsigned long vc_s_blink : 1;
- unsigned long vc_s_reverse : 1;
+ unsigned int vc_intensity : 2; /* 0=half-bright, 1=normal, 2=bold */
+ unsigned int vc_underline : 1;
+ unsigned int vc_blink : 1;
+ unsigned int vc_reverse : 1;
+ unsigned int vc_s_intensity : 2; /* saved rendition */
+ unsigned int vc_s_underline : 1;
+ unsigned int vc_s_blink : 1;
+ unsigned int vc_s_reverse : 1;
/* misc */
- unsigned long vc_ques : 1;
- unsigned long vc_need_wrap : 1;
- unsigned long vc_can_do_color : 1;
- unsigned long vc_has_scrolled : 1; /* Info for unblank_screen */
- unsigned long vc_kmalloced : 1; /* kfree_s() needed */
- unsigned long vc_report_mouse : 2;
+ unsigned int vc_ques : 1;
+ unsigned int vc_need_wrap : 1;
+ unsigned int vc_can_do_color : 1;
+ unsigned int vc_report_mouse : 2;
+ unsigned int vc_kmalloced : 1;
unsigned char vc_utf : 1; /* Unicode UTF-8 encoding */
unsigned char vc_utf_count;
- long vc_utf_char;
- unsigned long vc_tab_stop[5]; /* Tab stops. 160 columns. */
+ int vc_utf_char;
+ unsigned int vc_tab_stop[5]; /* Tab stops. 160 columns. */
unsigned char vc_palette[16*3]; /* Colour palette for VGA+ */
unsigned short * vc_translate;
unsigned char vc_G0_charset;
@@ -72,6 +76,10 @@ struct vc_data {
unsigned char vc_saved_G1;
unsigned int vc_bell_pitch; /* Console bell pitch */
unsigned int vc_bell_duration; /* Console bell duration */
+ unsigned int vc_cursor_type;
+ struct vc_data **vc_display_fg; /* [!] Ptr to var holding fg console for this display */
+ unsigned long vc_uni_pagedir;
+ unsigned long *vc_uni_pagedir_loc; /* [!] Location of uni_pagedir variable for this console */
/* additional information is in vt_kern.h */
};
@@ -85,65 +93,14 @@ struct vc {
extern struct vc vc_cons [MAX_NR_CONSOLES];
-#define screenbuf_size (vc_cons[currcons].d->vc_screenbuf_size)
-#define origin (vc_cons[currcons].d->vc_origin)
-#define scr_end (vc_cons[currcons].d->vc_scr_end)
-#define pos (vc_cons[currcons].d->vc_pos)
-#define top (vc_cons[currcons].d->vc_top)
-#define bottom (vc_cons[currcons].d->vc_bottom)
-#define x (vc_cons[currcons].d->vc_x)
-#define y (vc_cons[currcons].d->vc_y)
-#define vc_state (vc_cons[currcons].d->vc_state)
-#define npar (vc_cons[currcons].d->vc_npar)
-#define par (vc_cons[currcons].d->vc_par)
-#define ques (vc_cons[currcons].d->vc_ques)
-#define attr (vc_cons[currcons].d->vc_attr)
-#define saved_x (vc_cons[currcons].d->vc_saved_x)
-#define saved_y (vc_cons[currcons].d->vc_saved_y)
-#define translate (vc_cons[currcons].d->vc_translate)
-#define G0_charset (vc_cons[currcons].d->vc_G0_charset)
-#define G1_charset (vc_cons[currcons].d->vc_G1_charset)
-#define saved_G0 (vc_cons[currcons].d->vc_saved_G0)
-#define saved_G1 (vc_cons[currcons].d->vc_saved_G1)
-#define utf (vc_cons[currcons].d->vc_utf)
-#define utf_count (vc_cons[currcons].d->vc_utf_count)
-#define utf_char (vc_cons[currcons].d->vc_utf_char)
-#define video_mem_start (vc_cons[currcons].d->vc_video_mem_start)
-#define video_mem_end (vc_cons[currcons].d->vc_video_mem_end)
-#define video_erase_char (vc_cons[currcons].d->vc_video_erase_char)
-#define disp_ctrl (vc_cons[currcons].d->vc_disp_ctrl)
-#define toggle_meta (vc_cons[currcons].d->vc_toggle_meta)
-#define decscnm (vc_cons[currcons].d->vc_decscnm)
-#define decom (vc_cons[currcons].d->vc_decom)
-#define decawm (vc_cons[currcons].d->vc_decawm)
-#define deccm (vc_cons[currcons].d->vc_deccm)
-#define decim (vc_cons[currcons].d->vc_decim)
-#define deccolm (vc_cons[currcons].d->vc_deccolm)
-#define need_wrap (vc_cons[currcons].d->vc_need_wrap)
-#define has_scrolled (vc_cons[currcons].d->vc_has_scrolled)
-#define kmalloced (vc_cons[currcons].d->vc_kmalloced)
-#define report_mouse (vc_cons[currcons].d->vc_report_mouse)
-#define color (vc_cons[currcons].d->vc_color)
-#define s_color (vc_cons[currcons].d->vc_s_color)
-#define def_color (vc_cons[currcons].d->vc_def_color)
-#define foreground (color & 0x0f)
-#define background (color & 0xf0)
-#define charset (vc_cons[currcons].d->vc_charset)
-#define s_charset (vc_cons[currcons].d->vc_s_charset)
-#define intensity (vc_cons[currcons].d->vc_intensity)
-#define underline (vc_cons[currcons].d->vc_underline)
-#define blink (vc_cons[currcons].d->vc_blink)
-#define reverse (vc_cons[currcons].d->vc_reverse)
-#define s_intensity (vc_cons[currcons].d->vc_s_intensity)
-#define s_underline (vc_cons[currcons].d->vc_s_underline)
-#define s_blink (vc_cons[currcons].d->vc_s_blink)
-#define s_reverse (vc_cons[currcons].d->vc_s_reverse)
-#define ulcolor (vc_cons[currcons].d->vc_ulcolor)
-#define halfcolor (vc_cons[currcons].d->vc_halfcolor)
-#define tab_stop (vc_cons[currcons].d->vc_tab_stop)
-#define palette (vc_cons[currcons].d->vc_palette)
-#define bell_pitch (vc_cons[currcons].d->vc_bell_pitch)
-#define bell_duration (vc_cons[currcons].d->vc_bell_duration)
+#define CUR_DEF 0
+#define CUR_NONE 1
+#define CUR_UNDERLINE 2
+#define CUR_LOWER_THIRD 3
+#define CUR_LOWER_HALF 4
+#define CUR_TWO_THIRDS 5
+#define CUR_BLOCK 6
+#define CUR_HWMASK 0x0f
+#define CUR_SWMASK 0xfff0
-#define vcmode (vt_cons[currcons]->vc_mode)
-#define structsize (sizeof(struct vc_data) + sizeof(struct vt_struct))
+#define CUR_DEFAULT CUR_UNDERLINE
diff --git a/include/linux/consolemap.h b/include/linux/consolemap.h
index 9aba19db3..fd0bcd43f 100644
--- a/include/linux/consolemap.h
+++ b/include/linux/consolemap.h
@@ -8,7 +8,8 @@
#define IBMPC_MAP 2
#define USER_MAP 3
-extern int hashtable_contents_valid;
-extern unsigned char inverse_translate(int glyph);
+struct vc_data;
+
+extern unsigned char inverse_translate(struct vc_data *conp, int glyph);
extern unsigned short *set_translate(int m);
-extern int conv_uni_to_pc(long ucs);
+extern int conv_uni_to_pc(struct vc_data *conp, long ucs);
diff --git a/include/linux/cyclades.h b/include/linux/cyclades.h
index f5ef3f250..024104c31 100644
--- a/include/linux/cyclades.h
+++ b/include/linux/cyclades.h
@@ -1,4 +1,4 @@
-/* $Revision: 2.3 $$Date: 1998/03/16 18:01:12 $
+/* $Revision: 2.6 $$Date: 1998/08/10 16:57:01 $
* linux/include/linux/cyclades.h
*
* This file is maintained by Ivan Passos <ivan@cyclades.com>,
@@ -7,10 +7,17 @@
*
* This file contains the general definitions for the cyclades.c driver
*$Log: cyclades.h,v $
+ *Revision 2.5 1998/08/03 16:57:01 ivan
+ *added cyclades_idle_stats structure;
+ *
+ *Revision 2.4 1998/06/01 12:09:53 ivan
+ *removed closing_wait2 from cyclades_port structure;
+ *
*Revision 2.3 1998/03/16 18:01:12 ivan
*changes in the cyclades_port structure to get it closer to the
*standard serial port structure;
*added constants for new ioctls;
+ *
*Revision 2.2 1998/02/17 16:50:00 ivan
*changes in the cyclades_port structure (addition of shutdown_wait and
*chip_rev variables);
@@ -56,6 +63,22 @@ struct cyclades_monitor {
unsigned long char_last;
};
+/*
+ * These stats all reflect activity since the device was last initialized.
+ * (i.e., since the port was opened with no other processes already having it
+ * open)
+ */
+struct cyclades_idle_stats {
+ time_t in_use; /* Time device has been in use (secs) */
+ time_t recv_idle; /* Time since last char received (secs) */
+ time_t xmit_idle; /* Time since last char transmitted (secs) */
+ unsigned long recv_bytes; /* Bytes received */
+ unsigned long xmit_bytes; /* Bytes transmitted */
+ unsigned long overruns; /* Input overruns */
+ unsigned long frame_errs; /* Input framing errors */
+ unsigned long parity_errs; /* Input parity errors */
+};
+
#define CYCLADES_MAGIC 0x4359
#define CYGETMON 0x435901
@@ -71,11 +94,12 @@ struct cyclades_monitor {
#define CYGETRFLOW 0x43590b
#define CYSETRTSDTR_INV 0x43590c
#define CYGETRTSDTR_INV 0x43590d
-#define CYZPOLLCYCLE 0x43590e
-#define CYGETCD1400VER 0x43590f
-#define CYGETCARDINFO 0x435910
-#define CYSETWAIT 0x435911
-#define CYGETWAIT 0x435912
+#define CYZSETPOLLCYCLE 0x43590e
+#define CYZGETPOLLCYCLE 0x43590f
+#define CYGETCD1400VER 0x435910
+#define CYGETCARDINFO 0x435911
+#define CYSETWAIT 0x435912
+#define CYGETWAIT 0x435913
/*************** CYCLOM-Z ADDITIONS ***************/
@@ -89,8 +113,8 @@ struct cyclades_monitor {
#define CZ_DEF_POLL (HZ/25)
#define MAX_BOARD 4 /* Max number of boards */
-#define MAX_PORT 128 /* Max number of ports per board */
#define MAX_DEV 256 /* Max number of ports total */
+#define CYZ_MAX_SPEED 921600
#define CYZ_FIFO_SIZE 16
@@ -468,7 +492,7 @@ struct cyclades_card {
long base_addr;
long ctl_addr;
int irq;
- int num_chips; /* 0 if card absent, 1 if Z/PCI, else Y */
+ int num_chips; /* 0 if card absent, -1 if Z/PCI, else Y */
int first_line; /* minor number of first channel on card */
int bus_index; /* address shift - 0 for ISA, 1 for PCI */
int inact_ctrl; /* FW Inactivity control - 0 disabled, 1 enabled */
@@ -508,7 +532,6 @@ struct cyclades_port {
int x_char; /* to be pushed out ASAP */
int close_delay;
unsigned short closing_wait;
- unsigned short closing_wait2;
unsigned long event;
unsigned long last_active;
int count; /* # of fd on device */
@@ -531,6 +554,7 @@ struct cyclades_port {
struct cyclades_monitor mon;
unsigned long jiffies[3];
unsigned long rflush_count;
+ struct cyclades_idle_stats idle_stats;
};
/*
@@ -544,11 +568,15 @@ struct cyclades_port {
#define Cy_EVENT_OPEN_WAKEUP 4
#define Cy_EVENT_SHUTDOWN_WAKEUP 5
-#define CLOSING_WAIT_DELAY 30
+#define CLOSING_WAIT_DELAY 30*HZ
+#define CY_CLOSING_WAIT_NONE 65535
+#define CY_CLOSING_WAIT_INF 0
+
#define CyMAX_CHIPS_PER_CARD 8
#define CyMAX_CHAR_FIFO 12
#define CyPORTS_PER_CHIP 4
+#define CD1400_MAX_SPEED 115200
#define CyISA_Ywin 0x2000
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index b3424c167..b546fb5af 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -50,6 +50,8 @@ static __inline__ unsigned int full_name_hash(const char * name, unsigned int le
return end_name_hash(hash);
}
+#define DNAME_INLINE_LEN 16
+
struct dentry {
int d_count;
unsigned int d_flags;
@@ -68,6 +70,7 @@ struct dentry {
struct super_block * d_sb; /* The root of the dentry tree */
unsigned long d_reftime; /* last time referenced */
void * d_fsdata; /* fs-specific data */
+ unsigned char d_iname[DNAME_INLINE_LEN]; /* small names */
};
struct dentry_operations {
@@ -114,6 +117,11 @@ static __inline__ void d_drop(struct dentry * dentry)
INIT_LIST_HEAD(&dentry->d_hash);
}
+static __inline__ int dname_external(struct dentry *d)
+{
+ return d->d_name.name != d->d_iname;
+}
+
/*
* These are the low-level FS interfaces to the dcache..
*/
@@ -138,6 +146,9 @@ extern void free_inode_memory(int); /* defined in fs/inode.c */
/* only used at mount-time */
extern struct dentry * d_alloc_root(struct inode * root_inode, struct dentry * old_root);
+/* test whether root is busy without destroying dcache */
+extern int is_root_busy(struct dentry *);
+
/*
* This adds the entry to the hash queues and initializes "d_inode".
* The entry was actually filled in earlier during "d_alloc()"
diff --git a/include/linux/delay.h b/include/linux/delay.h
index 50b5d0b10..e1cf03d69 100644
--- a/include/linux/delay.h
+++ b/include/linux/delay.h
@@ -11,4 +11,27 @@ extern unsigned long loops_per_sec;
#include <asm/delay.h>
+/*
+ * Using udelay() for intervals greater than a few milliseconds can
+ * risk overflow for high loops_per_sec (high bogomips) machines. The
+ * mdelay() provides a wrapper to prevent this. For delays greater
+ * than MAX_UDELAY_MS milliseconds, the wrapper is used. Architecture
+ * specific values can be defined in asm-???/delay.h as an override.
+ * The 2nd mdelay() definition ensures GCC will optimize away the
+ * while loop for the common cases where n <= MAX_UDELAY_MS -- Paul G.
+ */
+
+#ifndef MAX_UDELAY_MS
+#define MAX_UDELAY_MS 5
+#endif
+
+#ifdef notdef
+#define mdelay(n) (\
+ {unsigned long msec=(n); while (msec--) udelay(1000);})
+#else
+#define mdelay(n) (\
+ (__builtin_constant_p(n) && (n)<=MAX_UDELAY_MS) ? udelay((n)*1000) : \
+ ({unsigned long msec=(n); while (msec--) udelay(1000);}))
+#endif
+
#endif /* defined(_LINUX_DELAY_H) */
diff --git a/include/linux/devpts_fs.h b/include/linux/devpts_fs.h
index 9f07c969a..d9dfbb440 100644
--- a/include/linux/devpts_fs.h
+++ b/include/linux/devpts_fs.h
@@ -21,23 +21,28 @@
#include <linux/config.h>
#include <linux/kdev_t.h>
+#include <linux/tty.h>
#ifdef CONFIG_DEVPTS_FS
void devpts_pty_new(int, kdev_t);
void devpts_pty_kill(int);
+#define unix98_max_ptys NR_PTYS * UNIX98_NR_MAJORS;
#elif defined(CONFIG_DEVPTS_FS_MODULE)
#ifdef BUILDING_PTY_C
void (*devpts_upcall_new)(int,kdev_t) = NULL;
void (*devpts_upcall_kill)(int) = NULL;
+unsigned int unix98_max_ptys = NR_PTYS * UNIX98_NR_MAJORS;
EXPORT_SYMBOL(devpts_upcall_new);
EXPORT_SYMBOL(devpts_upcall_kill);
+EXPORT_SYMBOL(unix98_max_ptys);
#else
extern void (*devpts_upcall_new)(int,kdev_t);
extern void (*devpts_upcall_kill)(int);
+extern unsigned int unix98_max_ptys;
#endif
#ifndef BUILDING_DEVPTS
diff --git a/include/linux/dio.h b/include/linux/dio.h
new file mode 100644
index 000000000..087b06ec1
--- /dev/null
+++ b/include/linux/dio.h
@@ -0,0 +1,204 @@
+/* header file for DIO boards for the HP300 architecture.
+ * Maybe this should handle DIO-II later?
+ * The general structure of this is vaguely based on how
+ * the Amiga port handles Zorro boards.
+ * Copyright (C) Peter Maydell 05/1998 <pmaydell@chiark.greenend.org.uk>
+ *
+ * The board IDs are from the NetBSD kernel, which for once provided
+ * helpful comments...
+ *
+ * This goes with arch/m68k/hp300/dio.c
+ */
+
+#ifndef _LINUX_DIO_H
+#define _LINUX_DIO_H
+
+/* The DIO boards in a system are distinguished by 'select codes' which
+ * range from 0-63 (DIO) and 132-255 (DIO-II).
+ * The DIO board with select code sc is located at physical address
+ * 0x600000 + sc * 0x10000
+ * So DIO cards cover [0x600000-0x800000); the areas [0x200000-0x400000) and
+ * [0x800000-0x1000000) are for additional space required by things
+ * like framebuffers. [0x400000-0x600000) is for miscellaneous internal I/O.
+ * On Linux, this is currently all mapped into the virtual address space
+ * at 0xf0000000 on bootup.
+ * DIO-II boards are at 0x1000000 + (sc - 132) * 0x400000
+ * which is address range [0x1000000-0x20000000) -- too big to map completely,
+ * so currently we just don't handle DIO-II boards. It wouldn't be hard to
+ * do with ioremap() though.
+ */
+#ifdef __KERNEL__
+/* DIO/DIO-II boards all have the following 8bit registers.
+ * These are offsets from the base of the device.
+ */
+#define DIO_IDOFF 0x01 /* primary device ID */
+#define DIO_IPLOFF 0x03 /* interrupt priority level */
+#define DIO_SECIDOFF 0x15 /* secondary device ID */
+#define DIOII_SIZEOFF 0x101 /* device size, DIO-II only */
+
+/* The internal HPIB device is special; this is its physaddr; its select code is 7.
+ * The reason why we have to treat it specially is because apparently it's broken:
+ * the device ID isn't consistent/reliable. *sigh*
+ */
+#define DIO_IHPIBADDR 0x47800
+#define DIO_IHPIBSCODE 7
+
+/* If we don't have the internal HPIB defined, then treat select code 7 like
+ * any other. If we *do* have internal HPIB, then we just have to assume that
+ * select code 7 is the internal HPIB regardless of the ID register :-<
+ */
+#define CONFIG_IHPIB /* hack hack : not yet a proper config option */
+#ifdef CONFIG_IHPIB
+#define DIO_ISIHPIB(scode) ((scode) == DIO_IHPIBSCODE)
+#else
+#define DIO_ISIHPIB(scode) 0
+#endif
+
+#define DIO_VIRADDRBASE 0xf0000000 /* vir addr where IOspace is mapped */
+
+#define DIO_BASE 0x600000 /* start of DIO space */
+#define DIO_END 0x1000000 /* end of DIO space */
+#define DIO_DEVSIZE 0x10000 /* size of a DIO device */
+
+#define DIOII_BASE 0x01000000 /* start of DIO-II space */
+#define DIOII_END 0x20000000 /* end of DIO-II space */
+#define DIOII_DEVSIZE 0x00400000 /* size of a DIO-II device */
+
+/* Highest valid select code. If we add DIO-II support this should become
+ * 256 for everything except HP320, which only has DIO.
+ */
+#define DIO_SCMAX 32
+#define DIOII_SCBASE 132 /* lowest DIO-II select code */
+#define DIO_SCINHOLE(scode) (((scode) >= 32) && ((scode) < DIOII_SCBASE))
+
+/* macros to read device IDs, given base address */
+#define DIO_ID(baseaddr) readb((baseaddr) + DIO_IDOFF)
+#define DIO_SECID(baseaddr) readb((baseaddr) + DIO_SECIDOFF)
+
+/* extract the interrupt level */
+#define DIO_IPL(baseaddr) (((readb((baseaddr) + DIO_IPLOFF) >> 4) & 0x03) + 3)
+
+/* find the size of a DIO-II board's address space.
+ * DIO boards are all fixed length.
+ */
+#define DIOII_SIZE(baseaddr) ((readb((baseaddr) + DIOII_SIZEOFF) + 1) * 0x100000)
+
+/* general purpose macro for both DIO and DIO-II */
+#define DIO_SIZE(scode, base) (DIO_ISDIOII((scode)) ? DIOII_SIZE((base)) : DIO_DEVSIZE)
+
+/* The hardware has primary and secondary IDs; we encode these in a single
+ * int as PRIMARY ID & (SECONDARY ID << 8).
+ * In practice this is only important for framebuffers,
+ * and everybody else just sets ID fields equal to the DIO_ID_FOO value.
+ */
+#define DIO_ENCODE_ID(pr,sec) ((((int)sec & 0xff) << 8) & ((int)pr & 0xff))
+/* macro to determine whether a given primary ID requires a secondary ID byte */
+#define DIO_NEEDSSECID(id) ((id) == DIO_ID_FBUFFER)
+
+/* Now a whole slew of macros giving device IDs and descriptive strings: */
+#define DIO_ID_DCA0 0x02 /* 98644A serial */
+#define DIO_DESC_DCA0 "98644A DCA0 serial"
+#define DIO_ID_DCA0REM 0x82 /* 98644A serial */
+#define DIO_DESC_DCA0REM "98644A DCA0REM serial"
+#define DIO_ID_DCA1 0x42 /* 98644A serial */
+#define DIO_DESC_DCA1 "98644A DCA1 serial"
+#define DIO_ID_DCA1REM 0xc2 /* 98644A serial */
+#define DIO_DESC_DCA1REM "98644A DCA1REM serial"
+#define DIO_ID_DCM 0x05 /* 98642A serial MUX */
+#define DIO_DESC_DCM "98642A DCM serial MUX"
+#define DIO_ID_DCMREM 0x85 /* 98642A serial MUX */
+#define DIO_DESC_DCMREM "98642A DCMREM serial MUX"
+#define DIO_ID_LAN 0x15 /* 98643A LAN */
+#define DIO_DESC_LAN "98643A LAN"
+#define DIO_ID_FHPIB 0x08 /* 98625A/98625B fast HP-IB */
+#define DIO_DESC_FHPIB "98625A/98625B fast HPIB"
+#define DIO_ID_NHPIB 0x80 /* 98624A HP-IB (normal ie slow) */
+#define DIO_DESC_NHPIB "98624A HPIB"
+#define DIO_ID_IHPIB 0x00 /* internal HPIB (not its real ID, it hasn't got one! */
+#define DIO_DESC_IHPIB "internal HPIB"
+#define DIO_ID_SCSI0 0x07 /* 98625A SCSI */
+#define DIO_DESC_SCSI0 "98625A SCSI0"
+#define DIO_ID_SCSI1 0x27 /* ditto */
+#define DIO_DESC_SCSI1 "98625A SCSI1"
+#define DIO_ID_SCSI2 0x47 /* ditto */
+#define DIO_DESC_SCSI2 "98625A SCSI2"
+#define DIO_ID_SCSI3 0x67 /* ditto */
+#define DIO_DESC_SCSI3 "98625A SCSI3"
+#define DIO_ID_FBUFFER 0x39 /* framebuffer: flavour is distinguished by secondary ID */
+#define DIO_DESC_FBUFFER "bitmapped display"
+/* the NetBSD kernel source is a bit unsure as to what these next IDs actually do :-> */
+#define DIO_ID_MISC0 0x03 /* 98622A */
+#define DIO_DESC_MISC0 "98622A"
+#define DIO_ID_MISC1 0x04 /* 98623A */
+#define DIO_DESC_MISC1 "98623A"
+#define DIO_ID_PARALLEL 0x06 /* internal parallel */
+#define DIO_DESC_PARALLEL "internal parallel"
+#define DIO_ID_MISC2 0x09 /* 98287A keyboard */
+#define DIO_DESC_MISC2 "98287A keyboard"
+#define DIO_ID_MISC3 0x0a /* HP98635A FP accelerator */
+#define DIO_DESC_MISC3 "HP98635A FP accelerator"
+#define DIO_ID_MISC4 0x0b /* timer */
+#define DIO_DESC_MISC4 "timer"
+#define DIO_ID_MISC5 0x12 /* 98640A */
+#define DIO_DESC_MISC5 "98640A"
+#define DIO_ID_MISC6 0x16 /* 98659A */
+#define DIO_DESC_MISC6 "98659A"
+#define DIO_ID_MISC7 0x19 /* 237 display */
+#define DIO_DESC_MISC7 "237 display"
+#define DIO_ID_MISC8 0x1a /* quad-wide card */
+#define DIO_DESC_MISC8 "quad-wide card"
+#define DIO_ID_MISC9 0x1b /* 98253A */
+#define DIO_DESC_MISC9 "98253A"
+#define DIO_ID_MISC10 0x1c /* 98627A */
+#define DIO_DESC_MISC10 "98253A"
+#define DIO_ID_MISC11 0x1d /* 98633A */
+#define DIO_DESC_MISC11 "98633A"
+#define DIO_ID_MISC12 0x1e /* 98259A */
+#define DIO_DESC_MISC12 "98259A"
+#define DIO_ID_MISC13 0x1f /* 8741 */
+#define DIO_DESC_MISC13 "8741"
+#define DIO_ID_VME 0x31 /* 98577A VME adapter */
+#define DIO_DESC_VME "98577A VME adapter"
+#define DIO_ID_DCL 0x34 /* 98628A serial */
+#define DIO_DESC_DCL "98628A DCL serial"
+#define DIO_ID_DCLREM 0xb4 /* 98628A serial */
+#define DIO_DESC_DCLREM "98628A DCLREM serial"
+/* These are the secondary IDs for the framebuffers */
+#define DIO_ID2_GATORBOX 0x01 /* 98700/98710 "gatorbox" */
+#define DIO_DESC2_GATORBOX "98700/98710 \"gatorbox\" display"
+#define DIO_ID2_TOPCAT 0x02 /* 98544/98545/98547 "topcat" */
+#define DIO_DESC2_TOPCAT "98544/98545/98547 \"topcat\" display"
+#define DIO_ID2_RENAISSANCE 0x04 /* 98720/98721 "renaissance" */
+#define DIO_DESC2_RENAISSANCE "98720/98721 \"renaissance\" display"
+#define DIO_ID2_LRCATSEYE 0x05 /* lowres "catseye" */
+#define DIO_DESC2_LRCATSEYE "low-res catseye display"
+#define DIO_ID2_HRCCATSEYE 0x06 /* highres colour "catseye" */
+#define DIO_DESC2_HRCCATSEYE "high-res color catseye display"
+#define DIO_ID2_HRMCATSEYE 0x07 /* highres mono "catseye" */
+#define DIO_DESC2_HRMCATSEYE "high-res mono catseye display"
+#define DIO_ID2_DAVINCI 0x08 /* 98730/98731 "davinci" */
+#define DIO_DESC2_DAVINCI "98730/98731 \"davinci\" display"
+#define DIO_ID2_XXXCATSEYE 0x09 /* "catseye" */
+#define DIO_DESC2_XXXCATSEYE "catseye display"
+#define DIO_ID2_HYPERION 0x0e /* A1096A "hyperion" */
+#define DIO_DESC2_HYPERION "A1096A \"hyperion\" display"
+#define DIO_ID2_XGENESIS 0x0b /* "x-genesis"; no NetBSD support */
+#define DIO_DESC2_XGENESIS "\"x-genesis\" display"
+#define DIO_ID2_TIGER 0x0c /* "tiger"; no NetBSD support */
+#define DIO_DESC2_TIGER "\"tiger\" display"
+#define DIO_ID2_YGENESIS 0x0d /* "y-genesis"; no NetBSD support */
+#define DIO_DESC2_YGENESIS "\"y-genesis\" display"
+/* if you add new IDs then you should tell dio.c about them so it can
+ * identify them...
+ */
+
+extern void dio_init(void);
+extern int dio_find(int deviceid);
+extern void *dio_scodetoviraddr(int scode);
+extern int dio_scodetoipl(int scode);
+extern void dio_config_board(int scode);
+extern void dio_unconfig_board(int scode);
+
+
+#endif /* __KERNEL__ */
+#endif /* ndef _LINUX_DIO_H */
diff --git a/include/linux/efs_fs.h b/include/linux/efs_fs.h
index b3f04b809..a1a57bdb5 100644
--- a/include/linux/efs_fs.h
+++ b/include/linux/efs_fs.h
@@ -6,7 +6,7 @@
*
* Based on work Copyright (C) 1995, 1996 Christian Vogelgsang.
*
- * $Id: efs_fs.h,v 1.2 1998/05/23 17:11:25 shaver Exp $
+ * $Id: efs_fs.h,v 1.1 1997/12/02 02:28:29 ralf Exp $
*/
#ifndef __LINUX_EFS_FS_H
@@ -87,7 +87,7 @@ union efs_extent {
__u32 ex_magic:4, /* must be zero */
ex_bn:24;
__u32 ex_length:8,
- ex_offset:24;
+ ex_offset;
} ex_ex;
__u32 ex_bytes[2];
};
@@ -128,8 +128,6 @@ struct efs_dirblk {
/* Offsets in DirItem */
#define EFS_DI_NAMELEN 4
#define EFS_DI_NAME 5
-/* XXX endian */
-#define EFS_DE_GET_INUM(de) (((de)->ud_inum.s[0] << 16) + (de)->ud_inum.s[1])
struct efs_dent {
union {
diff --git a/include/linux/efs_fs_i.h b/include/linux/efs_fs_i.h
index 784b89201..701bce8e7 100644
--- a/include/linux/efs_fs_i.h
+++ b/include/linux/efs_fs_i.h
@@ -6,7 +6,7 @@
*
* Based on work Copyright (C) 1995, 1996 Christian Vogelgsang.
*
- * $Id: efs_fs_i.h,v 1.1 1997/09/16 20:51:18 shaver Exp $
+ * $Id: efs_fs_i.h,v 1.1 1997/12/02 02:28:29 ralf Exp $
*/
#ifndef __LINUX_EFS_FS_I_H
@@ -16,9 +16,12 @@
/* private Inode part */
struct efs_inode_info {
- __u16 efs_total;
- __u16 efs_current;
- union efs_extent *efs_extents;
+ __u32 extblk;
+
+ __u16 tot;
+ __u16 cur;
+
+ union efs_extent extents[EFS_MAX_EXTENTS];
};
#endif /* __LINUX_EFS_FS_I_H */
diff --git a/include/linux/efs_fs_sb.h b/include/linux/efs_fs_sb.h
index b3f887899..4c6d17f14 100644
--- a/include/linux/efs_fs_sb.h
+++ b/include/linux/efs_fs_sb.h
@@ -6,7 +6,7 @@
*
* Based on work Copyright (C) 1995, 1996 Christian Vogelgsang.
*
- * $Id$
+ * $Id: efs_fs_sb.h,v 1.1 1997/12/02 02:28:29 ralf Exp $
*/
#ifndef __LINUX_EFS_FS_SB_H
diff --git a/include/linux/elf.h b/include/linux/elf.h
index 2147b403d..b6883c1c5 100644
--- a/include/linux/elf.h
+++ b/include/linux/elf.h
@@ -59,12 +59,15 @@ typedef __u64 Elf64_Word;
#define EM_386 3
#define EM_68K 4
#define EM_88K 5
-#define EM_486 6 /* Perhaps disused */
+#define EM_486 6 /* Perhaps disused */
#define EM_860 7
-#define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */
-#define EM_MIPS_RS4_BE 10
-#define EM_SPARC64 11 /* SPARC v9 (not official) 64-bit */
-#define EM_PARISC 15
+#define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */
+#define EM_MIPS_RS4_BE 10 /* MIPS R4000 big-endian */
+#define EM_PARISC 15 /* HPPA */
+#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
+#define EM_PPC 20 /* PowerPC */
+#define EM_SPARCV9 43 /* SPARC v9 64-bit */
+
/*
* This is an interim value that we will use until the committee comes
@@ -151,8 +154,8 @@ typedef __u64 Elf64_Word;
#define AT_EUID 12 /* effective uid */
#define AT_GID 13 /* real gid */
#define AT_EGID 14 /* effective gid */
-#define AT_PLATFORM 15 /* string identifying cpu for optimizations */
-#define AT_HWCAP 16 /* arch dependent hints at cpu capabilities */
+#define AT_PLATFORM 15 /* string identifying CPU for optimizations */
+#define AT_HWCAP 16 /* arch dependent hints at CPU capabilities */
typedef struct dynamic{
Elf32_Sword d_tag;
@@ -279,10 +282,11 @@ typedef struct {
/* Bits present in AT_HWCAP, primarily for Sparc32. */
-#define HWCAP_SPARC_FLUSH 1 /* The cpu supports flush insn. */
+#define HWCAP_SPARC_FLUSH 1 /* CPU supports flush instruction. */
#define HWCAP_SPARC_STBAR 2
#define HWCAP_SPARC_SWAP 4
#define HWCAP_SPARC_MULDIV 8
+#define HWCAP_SPARC_V9 16
/*
diff --git a/include/linux/fb.h b/include/linux/fb.h
index 60b6b7727..7c631b44a 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -30,6 +30,11 @@
#define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */
#define FB_TYPE_PLANES 1 /* Non interleaved planes */
#define FB_TYPE_INTERLEAVED_PLANES 2 /* Interleaved planes */
+#define FB_TYPE_TEXT 3 /* Text/attributes */
+
+#define FB_AUX_TEXT_MDA 0 /* Monochrome text */
+#define FB_AUX_TEXT_CGA 1 /* CGA/EGA/VGA Color text */
+#define FB_AUX_TEXT_S3_MMIO 2 /* S3 MMIO fasttext */
#define FB_VISUAL_MONO01 0 /* Monochr. 1=Black 0=White */
#define FB_VISUAL_MONO10 1 /* Monochr. 1=White 0=Black */
@@ -37,11 +42,26 @@
#define FB_VISUAL_PSEUDOCOLOR 3 /* Pseudo color (like atari) */
#define FB_VISUAL_DIRECTCOLOR 4 /* Direct color */
#define FB_VISUAL_STATIC_PSEUDOCOLOR 5 /* Pseudo color readonly */
-#define FB_VISUAL_STATIC_DIRECTCOLOR 6 /* Direct color readonly */
+
+#define FB_ACCEL_NONE 0 /* no hardware accelerator */
+#define FB_ACCEL_ATARIBLITT 1 /* Atari Blitter */
+#define FB_ACCEL_AMIGABLITT 2 /* Amiga Blitter */
+#define FB_ACCEL_S3_TRIO64 3 /* Cybervision64 (S3 Trio64) */
+#define FB_ACCEL_NCR_77C32BLT 4 /* RetinaZ3 (NCR 77C32BLT) */
+#define FB_ACCEL_S3_VIRGE 5 /* Cybervision64/3D (S3 ViRGE) */
+#define FB_ACCEL_ATI_MACH64GX 6 /* ATI Mach 64GX family */
+#define FB_ACCEL_DEC_TGA 7 /* DEC 21030 TGA */
+#define FB_ACCEL_ATI_MACH64CT 8 /* ATI Mach 64CT family */
+#define FB_ACCEL_ATI_MACH64VT 9 /* ATI Mach 64CT family VT class */
+#define FB_ACCEL_ATI_MACH64GT 10 /* ATI Mach 64CT family GT class */
+#define FB_ACCEL_SUN_CREATOR 11 /* Sun Creator/Creator3D */
+#define FB_ACCEL_SUN_CGSIX 12 /* Sun cg6 */
+#define FB_ACCEL_SUN_LEO 13 /* Sun leo/zx */
struct fb_fix_screeninfo {
char id[16]; /* identification string eg "TT Builtin" */
char *smem_start; /* Start of frame buffer mem */
+ /* (physical address) */
__u32 smem_len; /* Length of frame buffer mem */
__u32 type; /* see FB_TYPE_* */
__u32 type_aux; /* Interleave for interleaved Planes */
@@ -50,12 +70,19 @@ struct fb_fix_screeninfo {
__u16 ypanstep; /* zero if no hardware panning */
__u16 ywrapstep; /* zero if no hardware ywrap */
__u32 line_length; /* length of a line in bytes */
- unsigned char *mmio_start; /* Start of Memory Mapped I/O */
+ char *mmio_start; /* Start of Memory Mapped I/O */
+ /* (physical address) */
__u32 mmio_len; /* Length of Memory Mapped I/O */
__u32 accel; /* Type of acceleration available */
__u16 reserved[3]; /* Reserved for future compatibility */
};
+/* Interpretation of offset for color fields: All offsets are from the right,
+ * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
+ * can use the offset as right argument to <<). A pixel afterwards is a bit
+ * stream and is written to video memory as that unmodified. This implies
+ * big-endian byte order if bits_per_pixel is greater than 8.
+ */
struct fb_bitfield {
__u32 offset; /* beginning of bitfield */
__u32 length; /* length of bitfield */
@@ -73,15 +100,7 @@ struct fb_bitfield {
#define FB_ACTIVATE_VBL 16 /* activate values on next vbl */
#define FB_CHANGE_CMAP_VBL 32 /* change colormap on vbl */
-#define FB_ACCEL_NONE 0 /* no hardware accelerator */
-#define FB_ACCEL_ATARIBLITT 1 /* Atari Blitter */
-#define FB_ACCEL_AMIGABLITT 2 /* Amiga Blitter */
-#define FB_ACCEL_S3TRIO64 3 /* Cybervision64 (S3 Trio64) */
-#define FB_ACCEL_NCR77C32BLT 4 /* RetinaZ3 (NCR77C32BLT) */
-#define FB_ACCEL_S3VIRGE 5 /* Cybervision64/3D (S3 ViRGE) */
-#define FB_ACCEL_MACH64 6 /* ATI Mach 64 */
-#define FB_ACCEL_TGA 7 /* DEC 21030 TGA */
-#define FB_ACCEL_ATY 8 /* atyfb (ATI Mach64) */
+#define FB_ACCELF_TEXT 1 /* text mode acceleration */
#define FB_SYNC_HOR_HIGH_ACT 1 /* horizontal sync high active */
#define FB_SYNC_VERT_HIGH_ACT 2 /* vertical sync high active */
@@ -124,7 +143,7 @@ struct fb_var_screeninfo {
__u32 height; /* height of picture in mm */
__u32 width; /* width of picture in mm */
- __u32 accel; /* see FB_ACCEL_* */
+ __u32 accel_flags; /* acceleration flags (hints) */
/* Timing: All values in pixclocks, except pixclock (of course) */
__u32 pixclock; /* pixel clock in ps (pico seconds) */
@@ -154,10 +173,10 @@ struct fb_con2fbmap {
};
struct fb_monspecs {
- unsigned hfmin : 20; /* hfreq lower limit (Hz) */
- unsigned hfmax : 20; /* hfreq upper limit (Hz) */
- unsigned vfmin : 10; /* vfreq lower limit (Hz) */
- unsigned vfmax : 10; /* vfreq upper limit (Hz) */
+ __u32 hfmin; /* hfreq lower limit (Hz) */
+ __u32 hfmax; /* hfreq upper limit (Hz) */
+ __u16 vfmin; /* vfreq lower limit (Hz) */
+ __u16 vfmax; /* vfreq upper limit (Hz) */
unsigned dpms : 1; /* supports DPMS */
};
@@ -168,7 +187,8 @@ struct fb_monspecs {
struct fb_info;
struct fb_info_gen;
-
+struct vm_area_struct;
+struct file;
/*
* Frame buffer operations
@@ -176,8 +196,8 @@ struct fb_info_gen;
struct fb_ops {
/* open/release and usage marking */
- int (*fb_open)(struct fb_info *info);
- int (*fb_release)(struct fb_info *info);
+ int (*fb_open)(struct fb_info *info, int user);
+ int (*fb_release)(struct fb_info *info, int user);
/* get non settable parameters */
int (*fb_get_fix)(struct fb_fix_screeninfo *fix, int con,
struct fb_info *info);
@@ -196,11 +216,11 @@ struct fb_ops {
/* pan display */
int (*fb_pan_display)(struct fb_var_screeninfo *var, int con,
struct fb_info *info);
- /* switch between text and graphics mode */
- int (*fb_set_mode)(int mode, struct fb_info *info);
/* perform fb specific ioctl */
int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd,
unsigned long arg, int con, struct fb_info *info);
+ /* perform fb specific mmap */
+ int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma);
};
@@ -216,6 +236,7 @@ struct display {
/* are updated by fbcon.c */
struct fb_cmap cmap; /* colormap */
char *screen_base; /* pointer to top of virtual screen */
+ /* (virtual address) */
int visual;
int type; /* see FB_TYPE_* */
int type_aux; /* Interleave for interleaved Planes */
@@ -236,20 +257,24 @@ struct display {
struct vc_data *conp; /* pointer to console data */
struct fb_info *fb_info; /* frame buffer for this console */
int vrows; /* number of virtual rows */
- int cursor_x; /* current cursor position */
- int cursor_y;
+ unsigned short cursor_x; /* current cursor position */
+ unsigned short cursor_y;
int fgcol; /* text colors */
int bgcol;
u_long next_line; /* offset to one line below */
u_long next_plane; /* offset to next plane */
u_char *fontdata; /* Font associated to this display */
- int fontheight;
- int fontwidth;
+ unsigned short fontheightlog;
+ unsigned short fontwidthlog;
+ unsigned short fontheight;
+ unsigned short fontwidth;
int userfont; /* != 0 if fontdata kmalloc()ed */
struct display_switch *dispsw; /* low level operations */
u_short scrollmode; /* Scroll Method */
short yscroll; /* Hardware scrolling */
-};
+ unsigned char fgshift, bgshift;
+ unsigned short charmask; /* 0xff or 0x1ff */
+};
struct fb_info {
@@ -258,6 +283,7 @@ struct fb_info {
struct fb_ops *fbops;
struct fb_monspecs monspecs;
struct display *disp; /* initial display variable */
+ struct vc_data *display_fg; /* Console visible on this display */
char fontname[40]; /* default font name */
int (*changevar)(int); /* tell console var has changed */
int (*switch_con)(int, struct fb_info*);
@@ -265,6 +291,8 @@ struct fb_info {
int (*updatevar)(int, struct fb_info*);
/* tell fb to update the vars */
void (*blank)(int, struct fb_info*); /* tell fb to (un)blank the screen */
+ /* arg = 0: unblank */
+ /* arg > 0: VESA level (arg-1) */
/* From here on everything is device dependent */
};
@@ -308,6 +336,38 @@ struct fb_info_gen {
/* From here on everything is device dependent */
};
+ /*
+ * `Generic' versions of the frame buffer device operations
+ */
+
+extern int fbgen_get_fix(struct fb_fix_screeninfo *fix, int con,
+ struct fb_info *info);
+extern int fbgen_get_var(struct fb_var_screeninfo *var, int con,
+ struct fb_info *info);
+extern int fbgen_set_var(struct fb_var_screeninfo *var, int con,
+ struct fb_info *info);
+extern int fbgen_get_cmap(struct fb_cmap *cmap, int kspc, int con,
+ struct fb_info *info);
+extern int fbgen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
+ struct fb_info *info);
+extern int fbgen_pan_display(struct fb_var_screeninfo *var, int con,
+ struct fb_info *info);
+extern int fbgen_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg, int con,
+ struct fb_info *info);
+
+ /*
+ * Helper functions
+ */
+
+extern int fbgen_do_set_var(struct fb_var_screeninfo *var, int isactive,
+ struct fb_info_gen *info);
+extern void fbgen_set_disp(int con, struct fb_info_gen *info);
+extern void fbgen_install_cmap(int con, struct fb_info_gen *info);
+extern int fbgen_update_var(int con, struct fb_info *info);
+extern int fbgen_switch(int con, struct fb_info *info);
+extern void fbgen_blank(int blank, struct fb_info *info);
+
struct fb_videomode {
const char *name;
@@ -315,13 +375,9 @@ struct fb_videomode {
};
-/* prototypes */
-typedef unsigned long fb_init_func(unsigned long);
-
/* drivers/char/fbmem.c */
extern int register_framebuffer(struct fb_info *fb_info);
extern int unregister_framebuffer(const struct fb_info *fb_info);
-extern unsigned long probe_framebuffers(unsigned long kmem_start);
extern int fbmon_valid_timings(u_int pixclock, u_int htotal, u_int vtotal,
const struct fb_info *fb_info);
extern int fbmon_dpms(const struct fb_info *fb_info);
@@ -350,6 +406,12 @@ extern int fb_set_cmap(struct fb_cmap *cmap, struct fb_var_screeninfo *var,
extern struct fb_cmap *fb_default_cmap(int len);
extern void fb_invert_cmaps(void);
+/* VESA Blanking Levels */
+#define VESA_NO_BLANKING 0
+#define VESA_VSYNC_SUSPEND 1
+#define VESA_HSYNC_SUSPEND 2
+#define VESA_POWERDOWN 3
+
#endif /* __KERNEL__ */
#if 1
diff --git a/include/linux/fd.h b/include/linux/fd.h
index 627a9d2bd..dc8439540 100644
--- a/include/linux/fd.h
+++ b/include/linux/fd.h
@@ -116,7 +116,7 @@ typedef char floppy_drive_name[16];
* Drive parameters (user modifiable)
*/
struct floppy_drive_params {
- signed char cmos; /* cmos type */
+ signed char cmos; /* CMOS type */
/* Spec2 is (HLD<<1 | ND), where HLD is head load time (1=2ms, 2=4 ms
* etc) and ND is set means no DMA. Hardcoded to 6 (HLD=6ms, use DMA).
@@ -189,7 +189,7 @@ enum {
* Current drive state (not directly modifiable by user, readonly)
*/
struct floppy_drive_struct {
- signed char flags;
+ unsigned long flags;
/* values for these flags */
#define FD_NEED_TWADDLE (1 << FD_NEED_TWADDLE_BIT)
#define FD_VERIFY (1 << FD_VERIFY_BIT)
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 026d3209e..69fa35c3c 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -21,7 +21,9 @@
#include <asm/atomic.h>
#include <asm/bitops.h>
+#include <asm/cache.h>
+struct poll_table_struct;
/*
@@ -38,13 +40,13 @@
#define NR_OPEN 1024
#define NR_SUPER 64
-#define BLOCK_SIZE 1024
#define BLOCK_SIZE_BITS 10
+#define BLOCK_SIZE (1<<BLOCK_SIZE_BITS)
/* And dynamically-tunable limits and defaults: */
extern int max_inodes;
extern int max_files, nr_files, nr_free_files;
-#define NR_INODE 4096 /* This should no longer be bigger than NR_FILE */
+
#define NR_FILE 4096 /* this can well be larger on a larger system */
#define NR_RESERVED_FILES 10 /* reserved for root */
@@ -87,7 +89,7 @@ extern int max_files, nr_files, nr_free_files;
#define MS_SYNCHRONOUS 16 /* Writes are synced at once */
#define MS_REMOUNT 32 /* Alter flags of a mounted FS */
#define MS_MANDLOCK 64 /* Allow mandatory locks on an FS */
-#define S_WRITE 128 /* Write on file/directory/symlink */
+#define S_QUOTA 128 /* Quota initialized for file/directory/symlink */
#define S_APPEND 256 /* Append-only file */
#define S_IMMUTABLE 512 /* Immutable file */
#define MS_NOATIME 1024 /* Do not update access times. */
@@ -119,7 +121,7 @@ extern int max_files, nr_files, nr_free_files;
#define IS_SYNC(inode) ((inode)->i_flags & MS_SYNCHRONOUS)
#define IS_MANDLOCK(inode) ((inode)->i_flags & MS_MANDLOCK)
-#define IS_WRITABLE(inode) ((inode)->i_flags & S_WRITE)
+#define IS_QUOTAINIT(inode) ((inode)->i_flags & S_QUOTA)
#define IS_APPEND(inode) ((inode)->i_flags & S_APPEND)
#define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE)
#define IS_NOATIME(inode) ((inode)->i_flags & MS_NOATIME)
@@ -317,7 +319,11 @@ struct iattr {
#define ATTR_FLAG_IMMUTABLE 8 /* Immutable file */
#define ATTR_FLAG_NODIRATIME 16 /* Don't update atime for directory */
+/*
+ * Includes for diskquotas and mount structures.
+ */
#include <linux/quota.h>
+#include <linux/mount.h>
struct inode {
struct list_head i_hash;
@@ -631,16 +637,17 @@ struct super_operations {
int (*statfs) (struct super_block *, struct statfs *, int);
int (*remount_fs) (struct super_block *, int *, char *);
void (*clear_inode) (struct inode *);
+ void (*umount_begin) (struct super_block *);
};
struct dquot_operations {
void (*initialize) (struct inode *, short);
void (*drop) (struct inode *);
- int (*alloc_block) (const struct inode *, unsigned long);
- int (*alloc_inode) (const struct inode *, unsigned long);
+ int (*alloc_block) (const struct inode *, unsigned long, uid_t, char);
+ int (*alloc_inode) (const struct inode *, unsigned long, uid_t);
void (*free_block) (const struct inode *, unsigned long);
void (*free_inode) (const struct inode *, unsigned long);
- int (*transfer) (struct inode *, struct iattr *, char);
+ int (*transfer) (struct inode *, struct iattr *, char, uid_t);
};
struct file_system_type {
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index c8f38cfde..868f490cb 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -30,6 +30,7 @@
#define DOS_EXTENDED_PARTITION 5
#define LINUX_EXTENDED_PARTITION 0x85
#define WIN98_EXTENDED_PARTITION 0x0f
+
#define LINUX_SWAP_PARTITION 0x82
#ifdef CONFIG_SOLARIS_X86_PARTITION
diff --git a/include/linux/hayesesp.h b/include/linux/hayesesp.h
new file mode 100644
index 000000000..2ed3903af
--- /dev/null
+++ b/include/linux/hayesesp.h
@@ -0,0 +1,127 @@
+#ifndef HAYESESP_H
+#define HAYESESP_H
+
+struct hayes_esp_config {
+ short flow_on;
+ short flow_off;
+ short rx_trigger;
+ short tx_trigger;
+ short pio_threshold;
+ unsigned char rx_timeout;
+ char dma_channel;
+};
+
+#ifdef __KERNEL__
+
+#define ESP_DMA_CHANNEL 0
+#define ESP_RX_TRIGGER 768
+#define ESP_TX_TRIGGER 768
+#define ESP_FLOW_OFF 1016
+#define ESP_FLOW_ON 944
+#define ESP_RX_TMOUT 128
+#define ESP_PIO_THRESHOLD 32
+
+#define ESP_IN_MAJOR 57 /* major dev # for dial in */
+#define ESP_OUT_MAJOR 58 /* major dev # for dial out */
+#define ESPC_SCALE 3
+#define UART_ESI_BASE 0x00
+#define UART_ESI_SID 0x01
+#define UART_ESI_RX 0x02
+#define UART_ESI_TX 0x02
+#define UART_ESI_CMD1 0x04
+#define UART_ESI_CMD2 0x05
+#define UART_ESI_STAT1 0x04
+#define UART_ESI_STAT2 0x05
+#define UART_ESI_RWS 0x07
+
+#define UART_IER_DMA_TMOUT 0x80
+#define UART_IER_DMA_TC 0x08
+
+#define ESI_SET_IRQ 0x04
+#define ESI_SET_DMA_TMOUT 0x05
+#define ESI_SET_SRV_MASK 0x06
+#define ESI_SET_ERR_MASK 0x07
+#define ESI_SET_FLOW_CNTL 0x08
+#define ESI_SET_FLOW_CHARS 0x09
+#define ESI_SET_FLOW_LVL 0x0a
+#define ESI_SET_TRIGGER 0x0b
+#define ESI_SET_RX_TIMEOUT 0x0c
+#define ESI_SET_FLOW_TMOUT 0x0d
+#define ESI_WRITE_UART 0x0e
+#define ESI_READ_UART 0x0f
+#define ESI_SET_MODE 0x10
+#define ESI_GET_ERR_STAT 0x12
+#define ESI_GET_UART_STAT 0x13
+#define ESI_GET_RX_AVAIL 0x14
+#define ESI_GET_TX_AVAIL 0x15
+#define ESI_START_DMA_RX 0x16
+#define ESI_START_DMA_TX 0x17
+#define ESI_ISSUE_BREAK 0x1a
+#define ESI_FLUSH_RX 0x1b
+#define ESI_FLUSH_TX 0x1c
+#define ESI_SET_BAUD 0x1d
+#define ESI_SET_ENH_IRQ 0x1f
+#define ESI_SET_REINTR 0x20
+#define ESI_SET_PRESCALAR 0x23
+#define ESI_NO_COMMAND 0xff
+
+#define ESP_STAT_RX_TIMEOUT 0x01
+#define ESP_STAT_DMA_RX 0x02
+#define ESP_STAT_DMA_TX 0x04
+#define ESP_STAT_NEVER_DMA 0x08
+#define ESP_STAT_USE_PIO 0x10
+
+#define ESP_EVENT_WRITE_WAKEUP 0
+#define ESP_MAGIC 0x53ee
+#define ESP_XMIT_SIZE 4096
+
+struct esp_struct {
+ int magic;
+ int port;
+ int irq;
+ int flags; /* defined in tty.h */
+ struct tty_struct *tty;
+ int read_status_mask;
+ int ignore_status_mask;
+ int timeout;
+ int stat_flags;
+ int custom_divisor;
+ int close_delay;
+ unsigned short closing_wait;
+ unsigned short closing_wait2;
+ int IER; /* Interrupt Enable Register */
+ int MCR; /* Modem control register */
+ unsigned long event;
+ unsigned long last_active;
+ int line;
+ int count; /* # of fd on device */
+ int blocked_open; /* # of blocked opens */
+ long session; /* Session of opening process */
+ long pgrp; /* pgrp of opening process */
+ unsigned char *xmit_buf;
+ int xmit_head;
+ int xmit_tail;
+ int xmit_cnt;
+ struct tq_struct tqueue;
+ struct tq_struct tqueue_hangup;
+ struct termios normal_termios;
+ struct termios callout_termios;
+ struct wait_queue *open_wait;
+ struct wait_queue *close_wait;
+ struct wait_queue *delta_msr_wait;
+ struct wait_queue *break_wait;
+ struct async_icount icount; /* kernel counters for the 4 input interrupts */
+ struct hayes_esp_config config; /* port configuration */
+ struct esp_struct *next_port; /* For the linked list */
+};
+
+struct esp_pio_buffer {
+ unsigned char data[1024];
+ struct esp_pio_buffer *next;
+};
+
+#endif /* __KERNEL__ */
+
+
+#endif /* ESP_H */
+
diff --git a/include/linux/hdlcdrv.h b/include/linux/hdlcdrv.h
index d7d4609cb..11cd8c6a0 100644
--- a/include/linux/hdlcdrv.h
+++ b/include/linux/hdlcdrv.h
@@ -106,6 +106,7 @@ struct hdlcdrv_ioctl {
#include <linux/netdevice.h>
#include <linux/if.h>
+#include <asm/spinlock.h>
#define HDLCDRV_MAGIC 0x5ac6e778
#define HDLCDRV_IFNAMELEN 6
@@ -119,6 +120,7 @@ struct hdlcdrv_ioctl {
struct hdlcdrv_hdlcbuffer {
+ spinlock_t lock;
unsigned rd, wr;
unsigned short buf[HDLCDRV_HDLCBUFFER];
};
@@ -256,33 +258,45 @@ struct hdlcdrv_state {
extern inline int hdlcdrv_hbuf_full(struct hdlcdrv_hdlcbuffer *hb)
{
- return !((HDLCDRV_HDLCBUFFER - 1 + hb->rd - hb->wr)
- % HDLCDRV_HDLCBUFFER);
+ unsigned long flags;
+ int ret;
+
+ spin_lock_irqsave(&hb->lock, flags);
+ ret = !((HDLCDRV_HDLCBUFFER - 1 + hb->rd - hb->wr) % HDLCDRV_HDLCBUFFER);
+ spin_unlock_irqrestore(&hb->lock, flags);
+ return ret;
}
/* -------------------------------------------------------------------- */
extern inline int hdlcdrv_hbuf_empty(struct hdlcdrv_hdlcbuffer *hb)
{
- return hb->rd == hb->wr;
+ unsigned long flags;
+ int ret;
+
+ spin_lock_irqsave(&hb->lock, flags);
+ ret = (hb->rd == hb->wr);
+ spin_unlock_irqrestore(&hb->lock, flags);
+ return ret;
}
/* -------------------------------------------------------------------- */
extern inline unsigned short hdlcdrv_hbuf_get(struct hdlcdrv_hdlcbuffer *hb)
{
- unsigned newr;
- unsigned short val;
unsigned long flags;
+ unsigned short val;
+ unsigned newr;
+ spin_lock_irqsave(&hb->lock, flags);
if (hb->rd == hb->wr)
- return 0;
- save_flags(flags);
- cli();
- newr = (hb->rd+1) % HDLCDRV_HDLCBUFFER;
- val = hb->buf[hb->rd];
- hb->rd = newr;
- restore_flags(flags);
+ val = 0;
+ else {
+ newr = (hb->rd+1) % HDLCDRV_HDLCBUFFER;
+ val = hb->buf[hb->rd];
+ hb->rd = newr;
+ }
+ spin_unlock_irqrestore(&hb->lock, flags);
return val;
}
@@ -293,15 +307,14 @@ extern inline void hdlcdrv_hbuf_put(struct hdlcdrv_hdlcbuffer *hb,
{
unsigned newp;
unsigned long flags;
-
- save_flags(flags);
- cli();
+
+ spin_lock_irqsave(&hb->lock, flags);
newp = (hb->wr+1) % HDLCDRV_HDLCBUFFER;
if (newp != hb->rd) {
hb->buf[hb->wr] = val & 0xffff;
hb->wr = newp;
}
- restore_flags(flags);
+ spin_unlock_irqrestore(&hb->lock, flags);
}
/* -------------------------------------------------------------------- */
diff --git a/include/linux/hippidevice.h b/include/linux/hippidevice.h
new file mode 100644
index 000000000..467798a19
--- /dev/null
+++ b/include/linux/hippidevice.h
@@ -0,0 +1,56 @@
+/*
+ * INET An implementation of the TCP/IP protocol suite for the LINUX
+ * operating system. INET is implemented using the BSD Socket
+ * interface as the means of communication with the user level.
+ *
+ * Definitions for the HIPPI handlers.
+ *
+ * Version: @(#)hippidevice.h 1.0.0 05/26/97
+ *
+ * Author: Jes Sorensen, <Jes.Sorensen@cern.ch>
+ *
+ * hippidevice.h is based on previous fddidevice.h work by
+ * Ross Biro, <bir7@leland.Stanford.Edu>
+ * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ * Alan Cox, <gw4pts@gw4pts.ampr.org>
+ * Lawrence V. Stefani, <stefani@lkg.dec.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * 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.
+ */
+#ifndef _LINUX_HIPPIDEVICE_H
+#define _LINUX_HIPPIDEVICE_H
+
+#include <linux/if_hippi.h>
+
+#ifdef __KERNEL__
+extern int hippi_header(struct sk_buff *skb,
+ struct device *dev,
+ unsigned short type,
+ void *daddr,
+ void *saddr,
+ unsigned len);
+
+extern int hippi_rebuild_header(struct sk_buff *skb);
+
+extern unsigned short hippi_type_trans(struct sk_buff *skb,
+ struct device *dev);
+
+extern void hippi_header_cache_bind(struct hh_cache ** hhp,
+ struct device *dev,
+ unsigned short htype,
+ __u32 daddr);
+
+extern void hippi_header_cache_update(struct hh_cache *hh,
+ struct device *dev,
+ unsigned char * haddr);
+extern int hippi_header_parse(struct sk_buff *skb, unsigned char *haddr);
+
+extern void hippi_net_init(void);
+
+extern struct device *init_hippi_dev(struct device *, int);
+#endif
+
+#endif /* _LINUX_HIPPIDEVICE_H */
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
new file mode 100644
index 000000000..44c09570d
--- /dev/null
+++ b/include/linux/i2c.h
@@ -0,0 +1,166 @@
+#ifndef I2C_H
+#define I2C_H
+
+/*
+ * linux i2c interface. Works a little bit like the scsi subsystem.
+ * There are:
+ *
+ * i2c the basic control module (like scsi_mod)
+ * bus driver a driver with a i2c bus (host adapter driver)
+ * chip driver a driver for a chip connected
+ * to a i2c bus (cdrom/hd driver)
+ *
+ * A device will be attached to one bus and one chip driver. Every chip
+ * driver gets a unique ID.
+ *
+ * A chip driver can provide a ioctl-like callback for the
+ * communication with other parts of the kernel (not every i2c chip is
+ * useful without other devices, a TV card tuner for example).
+ *
+ * "i2c internal" parts of the structs: only the i2c module is allowed to
+ * write to them, for others they are read-only.
+ *
+ */
+
+#define I2C_BUS_MAX 4 /* max # of bus drivers */
+#define I2C_DRIVER_MAX 8 /* max # of chip drivers */
+#define I2C_DEVICE_MAX 8 /* max # if devices per bus/driver */
+
+struct i2c_bus;
+struct i2c_driver;
+struct i2c_device;
+
+#define I2C_DRIVERID_MSP3400 1
+#define I2C_DRIVERID_TUNER 2
+#define I2C_DRIVERID_VIDEOTEXT 3
+
+#define I2C_BUSID_BT848 1 /* I2C bus on a BT848 */
+
+/*
+ * struct for a driver for a i2c chip (tuner, soundprocessor,
+ * videotext, ... ).
+ *
+ * a driver will register within the i2c module. The i2c module will
+ * callback the driver (i2c_attach) for every device it finds on a i2c
+ * bus at the specified address. If the driver decides to "accept"
+ * the, device, it must return a struct i2c_device, and NULL
+ * otherwise.
+ *
+ * i2c_detach = i2c_attach ** -1
+ *
+ * i2c_command will be used to pass commands to the driver in a
+ * ioctl-line manner.
+ *
+ */
+
+struct i2c_driver
+{
+ char name[32]; /* some useful label */
+ int id; /* device type ID */
+ unsigned char addr_l, addr_h; /* address range of the chip */
+
+ int (*attach)(struct i2c_device *device);
+ int (*detach)(struct i2c_device *device);
+ int (*command)(struct i2c_device *device,unsigned int cmd, void *arg);
+
+ /* i2c internal */
+ struct i2c_device *devices[I2C_DEVICE_MAX];
+ int devcount;
+};
+
+
+/*
+ * this holds the informations about a i2c bus available in the system.
+ *
+ * a chip with a i2c bus interface (like bt848) registers the bus within
+ * the i2c module. This struct provides functions to access the i2c bus.
+ *
+ * One must hold the spinlock to access the i2c bus (XXX: is the irqsave
+ * required? Maybe better use a semaphore?).
+ * [-AC-] having a spinlock_irqsave is only needed if we have drivers wishing
+ * to bang their i2c bus from an interrupt.
+ *
+ * attach/detach_inform is a callback to inform the bus driver about
+ * attached chip drivers.
+ *
+ */
+
+/* needed: unsigned long flags */
+
+#define LOCK_I2C_BUS(bus) spin_lock_irqsave(&(bus->bus_lock),flags);
+#define UNLOCK_I2C_BUS(bus) spin_unlock_irqrestore(&(bus->bus_lock),flags);
+
+struct i2c_bus
+{
+ char name[32]; /* some useful label */
+ int id;
+ void *data; /* free for use by the bus driver */
+
+ spinlock_t bus_lock;
+
+ /* attach/detach inform callbacks */
+ void (*attach_inform)(struct i2c_bus *bus, int id);
+ void (*detach_inform)(struct i2c_bus *bus, int id);
+
+ /* Software I2C */
+ void (*i2c_setlines)(struct i2c_bus *bus, int ctrl, int data);
+ int (*i2c_getdataline)(struct i2c_bus *bus);
+
+ /* Hardware I2C */
+ int (*i2c_read)(struct i2c_bus *bus, unsigned char addr);
+ int (*i2c_write)(struct i2c_bus *bus, unsigned char addr,
+ unsigned char b1, unsigned char b2, int both);
+
+ /* internal data for i2c module */
+ struct i2c_device *devices[I2C_DEVICE_MAX];
+ int devcount;
+};
+
+
+/*
+ * This holds per-device data for a i2c device
+ */
+
+struct i2c_device
+{
+ char name[32]; /* some useful label */
+ void *data; /* free for use by the chip driver */
+ unsigned char addr; /* chip addr */
+
+ /* i2c internal */
+ struct i2c_bus *bus;
+ struct i2c_driver *driver;
+};
+
+
+/* ------------------------------------------------------------------- */
+/* i2c module functions */
+
+/* register/unregister a i2c bus */
+int i2c_register_bus(struct i2c_bus *bus);
+int i2c_unregister_bus(struct i2c_bus *bus);
+
+/* register/unregister a chip driver */
+int i2c_register_driver(struct i2c_driver *driver);
+int i2c_unregister_driver(struct i2c_driver *driver);
+
+/* send a command to a chip using the ioctl-like callback interface */
+int i2c_control_device(struct i2c_bus *bus, int id,
+ unsigned int cmd, void *arg);
+
+/* i2c bus access functions */
+void i2c_start(struct i2c_bus *bus);
+void i2c_stop(struct i2c_bus *bus);
+void i2c_one(struct i2c_bus *bus);
+void i2c_zero(struct i2c_bus *bus);
+int i2c_ack(struct i2c_bus *bus);
+
+int i2c_sendbyte(struct i2c_bus *bus,unsigned char data,int wait_for_ack);
+unsigned char i2c_readbyte(struct i2c_bus *bus,int last);
+
+/* i2c (maybe) hardware functions */
+int i2c_read(struct i2c_bus *bus, unsigned char addr);
+int i2c_write(struct i2c_bus *bus, unsigned char addr,
+ unsigned char b1, unsigned char b2, int both);
+
+#endif /* I2C_H */
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h
index 213251b23..68213c539 100644
--- a/include/linux/if_ether.h
+++ b/include/linux/if_ether.h
@@ -72,6 +72,7 @@
#define ETH_P_LOCALTALK 0x0009 /* Localtalk pseudo type */
#define ETH_P_PPPTALK 0x0010 /* Dummy type for Atalk over PPP*/
#define ETH_P_TR_802_2 0x0011 /* 802.2 frames */
+#define ETH_P_MOBITEX 0x0015 /* Mobitex (kaz@cafe.net) */
/*
* This is an Ethernet frame header.
diff --git a/include/linux/if_fddi.h b/include/linux/if_fddi.h
index 6db6745b6..30bde75d9 100644
--- a/include/linux/if_fddi.h
+++ b/include/linux/if_fddi.h
@@ -107,6 +107,8 @@ struct fddi_statistics
{
__u32 rx_packets; /* total packets received */
__u32 tx_packets; /* total packets transmitted */
+ __u32 rx_bytes; /* total bytes received */
+ __u32 tx_bytes; /* total bytes transmitted */
__u32 rx_errors; /* bad packets received */
__u32 tx_errors; /* packet transmit problems */
__u32 rx_dropped; /* no space in linux buffers */
@@ -114,6 +116,25 @@ struct fddi_statistics
__u32 multicast; /* multicast packets received */
__u32 transmit_collision; /* always 0 for FDDI */
+ /* detailed rx_errors */
+ __u32 rx_length_errors;
+ __u32 rx_over_errors; /* receiver ring buff overflow */
+ __u32 rx_crc_errors; /* recved pkt with crc error */
+ __u32 rx_frame_errors; /* recv'd frame alignment error */
+ __u32 rx_fifo_errors; /* recv'r fifo overrun */
+ __u32 rx_missed_errors; /* receiver missed packet */
+
+ /* detailed tx_errors */
+ __u32 tx_aborted_errors;
+ __u32 tx_carrier_errors;
+ __u32 tx_fifo_errors;
+ __u32 tx_heartbeat_errors;
+ __u32 tx_window_errors;
+
+ /* for cslip etc */
+ __u32 rx_compressed;
+ __u32 tx_compressed;
+
/* Detailed FDDI statistics. Adopted from RFC 1512 */
__u8 smt_station_id[8];
diff --git a/include/linux/if_hippi.h b/include/linux/if_hippi.h
new file mode 100644
index 000000000..4ed065939
--- /dev/null
+++ b/include/linux/if_hippi.h
@@ -0,0 +1,157 @@
+/*
+ * INET An implementation of the TCP/IP protocol suite for the LINUX
+ * operating system. INET is implemented using the BSD Socket
+ * interface as the means of communication with the user level.
+ *
+ * Global definitions for the HIPPI interface.
+ *
+ * Version: @(#)if_hippi.h 1.0.0 05/26/97
+ *
+ * Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ * Donald Becker, <becker@super.org>
+ * Alan Cox, <alan@cymru.net>
+ * Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
+ * Jes Sorensen, <Jes.Sorensen@cern.ch>
+ *
+ * This program is free software; you can redistribute it and/or
+ * 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.
+ */
+
+#ifndef _LINUX_IF_HIPPI_H
+#define _LINUX_IF_HIPPI_H
+
+#include <asm/byteorder.h>
+
+/*
+ * HIPPI magic constants.
+ */
+
+#define HIPPI_ALEN 6 /* Bytes in one HIPPI hw-addr */
+#define HIPPI_HLEN sizeof(struct hippi_hdr)
+#define HIPPI_ZLEN 0 /* Min. bytes in frame without FCS */
+#define HIPPI_DATA_LEN 65280 /* Max. bytes in payload */
+#define HIPPI_FRAME_LEN (HIPPI_DATA_LEN + HIPPI_HLEN)
+ /* Max. bytes in frame without FCS */
+
+/*
+ * Define LLC and SNAP constants.
+ */
+#define HIPPI_EXTENDED_SAP 0xAA
+#define HIPPI_UI_CMD 0x03
+
+
+/*
+ * Do we need to list some sort of ID's here?
+ */
+
+/*
+ * HIPPI statistics collection data.
+ */
+
+struct hipnet_statistics
+{
+ int rx_packets; /* total packets received */
+ int tx_packets; /* total packets transmitted */
+ int rx_errors; /* bad packets received */
+ int tx_errors; /* packet transmit problems */
+ int rx_dropped; /* no space in linux buffers */
+ int tx_dropped; /* no space available in linux */
+
+ /* detailed rx_errors: */
+ int rx_length_errors;
+ int rx_over_errors; /* receiver ring buff overflow */
+ int rx_crc_errors; /* recved pkt with crc error */
+ int rx_frame_errors; /* recv'd frame alignment error */
+ int rx_fifo_errors; /* recv'r fifo overrun */
+ int rx_missed_errors; /* receiver missed packet */
+
+ /* detailed tx_errors */
+ int tx_aborted_errors;
+ int tx_carrier_errors;
+ int tx_fifo_errors;
+ int tx_heartbeat_errors;
+ int tx_window_errors;
+};
+
+
+struct hippi_fp_hdr
+{
+#if 0
+ __u8 ulp; /* must contain 4 */
+#if defined (__BIG_ENDIAN_BITFIELD)
+ __u8 d1_data_present:1; /* must be 1 */
+ __u8 start_d2_burst_boundary:1; /* must be zero */
+ __u8 reserved:6; /* must be zero */
+#if 0
+ __u16 reserved1:5;
+ __u16 d1_area_size:8; /* must be 3 */
+ __u16 d2_offset:3; /* must be zero */
+#endif
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+ __u8 reserved:6; /* must be zero */
+ __u8 start_d2_burst_boundary:1; /* must be zero */
+ __u8 d1_data_present:1; /* must be 1 */
+#if 0
+ __u16 d2_offset:3; /* must be zero */
+ __u16 d1_area_size:8; /* must be 3 */
+ __u16 reserved1:5; /* must be zero */
+#endif
+#else
+#error "Please fix <asm/byteorder.h>"
+#endif
+#else
+ __u32 fixed;
+#endif
+ __u32 d2_size;
+} __attribute__ ((packed));
+
+struct hippi_le_hdr
+{
+#if defined (__BIG_ENDIAN_BITFIELD)
+ unsigned long fc:3;
+ unsigned long double_wide:1;
+ unsigned long message_type:4;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+ unsigned long message_type:4;
+ unsigned long double_wide:1;
+ unsigned long fc:3;
+#endif
+ __u8 dest_switch_addr[3];
+#if defined (__BIG_ENDIAN_BITFIELD)
+ __u8 dest_addr_type:4,
+ src_addr_type:4;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+ __u8 src_addr_type:4,
+ dest_addr_type:4;
+#endif
+ __u8 src_switch_addr[3];
+ __u16 reserved;
+ __u8 daddr[HIPPI_ALEN];
+ __u16 locally_administered;
+ __u8 saddr[HIPPI_ALEN];
+} __attribute__ ((packed));
+
+#define HIPPI_OUI_LEN 3
+/*
+ * Looks like the dsap and ssap fields have been swapped by mistake in
+ * RFC 2067 "IP over HIPPI".
+ */
+struct hippi_snap_hdr
+{
+ __u8 dsap; /* always 0xAA */
+ __u8 ssap; /* always 0xAA */
+ __u8 ctrl; /* always 0x03 */
+ __u8 oui[HIPPI_OUI_LEN]; /* organizational universal id (zero)*/
+ __u16 ethertype; /* packet type ID field */
+} __attribute__ ((packed));
+
+struct hippi_hdr
+{
+ struct hippi_fp_hdr fp;
+ struct hippi_le_hdr le;
+ struct hippi_snap_hdr snap;
+} __attribute__ ((packed));
+
+#endif /* _LINUX_IF_HIPPI_H */
diff --git a/include/linux/if_ppp.h b/include/linux/if_ppp.h
index 35eb83fa2..bb7a98db3 100644
--- a/include/linux/if_ppp.h
+++ b/include/linux/if_ppp.h
@@ -1,4 +1,4 @@
-/* $Id: if_ppp.h,v 1.2 1998/01/01 15:05:12 phil Exp $ */
+/* $Id: if_ppp.h,v 1.14 1998/07/07 04:27:33 paulus Exp $ */
/*
* if_ppp.h - Point-to-Point Protocol definitions.
@@ -21,7 +21,7 @@
*/
/*
- * ==FILEVERSION 971223==
+ * ==FILEVERSION 980704==
*
* NOTE TO MAINTAINERS:
* If you modify this file at all, please set the above date.
@@ -76,7 +76,7 @@
#define SC_MASK 0x0f0000ff /* bits that user can change */
/* state bits */
-#define SC_XMIT_BUSY 0x10000000 /* ppp_write_wakeup is active */
+#define SC_XMIT_BUSY 0x10000000 /* (used by isdn_ppp?) */
#define SC_RCV_ODDP 0x08000000 /* have rcvd char with odd parity */
#define SC_RCV_EVNP 0x04000000 /* have rcvd char with even parity */
#define SC_RCV_B7_1 0x02000000 /* have rcvd char with bit 7 = 1 */
@@ -89,8 +89,8 @@
*/
struct npioctl {
- int protocol; /* PPP protocol, e.g. PPP_IP */
- enum NPmode mode;
+ int protocol; /* PPP protocol, e.g. PPP_IP */
+ enum NPmode mode;
};
/* Structure describing a CCP configuration option, for PPPIOCSCOMPRESS */
@@ -101,13 +101,13 @@ struct ppp_option_data {
};
struct ifpppstatsreq {
- struct ifreq b;
- struct ppp_stats stats; /* statistic information */
+ struct ifreq b;
+ struct ppp_stats stats; /* statistic information */
};
struct ifpppcstatsreq {
- struct ifreq b;
- struct ppp_comp_stats stats;
+ struct ifreq b;
+ struct ppp_comp_stats stats;
};
#define ifr__name b.ifr_ifrn.ifrn_name
@@ -138,7 +138,7 @@ struct ifpppcstatsreq {
#define PPPIOCGIDLE _IOR('t', 63, struct ppp_idle) /* get idle time */
#define SIOCGPPPSTATS (SIOCDEVPRIVATE + 0)
-#define SIOCGPPPVER (SIOCDEVPRIVATE + 1) /* NEVER change this!! */
+#define SIOCGPPPVER (SIOCDEVPRIVATE + 1) /* NEVER change this!! */
#define SIOCGPPPCSTATS (SIOCDEVPRIVATE + 2)
#if !defined(ifr_mtu)
diff --git a/include/linux/if_pppvar.h b/include/linux/if_pppvar.h
index c1fe88ab4..cf70fe655 100644
--- a/include/linux/if_pppvar.h
+++ b/include/linux/if_pppvar.h
@@ -42,15 +42,15 @@
*/
/*
- * ==FILEVERSION 971001==
+ * ==FILEVERSION 980704==
*
* NOTE TO MAINTAINERS:
- * If you modify this file at all, please set the above date.
- * if_pppvar.h is shipped with a PPP distribution as well as with the kernel;
- * if everyone increases the FILEVERSION number above, then scripts
- * can do the right thing when deciding whether to install a new if_pppvar.h
- * file. Don't change the format of that line otherwise, so the
- * installation script can recognize it.
+ * If you modify this file at all, please set the above date.
+ * if_pppvar.h is shipped with a PPP distribution as well as with the kernel;
+ * if everyone increases the FILEVERSION number above, then scripts
+ * can do the right thing when deciding whether to install a new if_pppvar.h
+ * file. Don't change the format of that line otherwise, so the
+ * installation script can recognize it.
*/
/*
@@ -59,101 +59,74 @@
*/
#define NP_IP 0 /* Internet Protocol */
-#define NUM_NP 1 /* Number of NPs. */
+#define NP_IPX 1 /* IPX protocol */
+#define NP_AT 2 /* Appletalk protocol */
+#define NUM_NP 3 /* Number of NPs. */
-/*
- * Buffers for the PPP process have the following structure
- */
-
-#define RBUFSIZE 2048 /* MUST be a power of 2 and be <= 4095 */
-
-struct ppp_buffer {
- __s32 size; /* Size of the buffer area */
- __s32 count; /* Count of characters in bufr */
- __s32 head; /* index to head of list */
- __s32 tail; /* index to tail of list */
- unsigned long locked; /* Buffer is being sent */
- __s32 type; /* Type of the buffer */
- /* =0, device read buffer */
- /* =1, device write buffer */
- /* =2, daemon write buffer */
- /* =3, daemon read buffer */
- __u16 fcs; /* Frame Check Sequence (CRC) */
- __u16 magic; /* Extra space if needed */
-};
-
-/* Given a pointer to the ppp_buffer then return base address of buffer */
-#define buf_base(buf) ((__u8 *) (&buf[1]))
+#define OBUFSIZE 256 /* # chars of output buffering */
/*
* Structure describing each ppp unit.
*/
struct ppp {
- __s32 magic; /* magic value for structure */
+ int magic; /* magic value for structure */
struct ppp *next; /* unit with next index */
-
- /* Bitmapped flag fields. */
unsigned long inuse; /* are we allocated? */
- __u8 escape; /* 0x20 if prev char was PPP_ESC*/
+ int line; /* network interface unit # */
+ __u32 flags; /* miscellaneous control flags */
+ int mtu; /* maximum xmit frame size */
+ int mru; /* maximum receive frame size */
+ struct slcompress *slcomp; /* for TCP header compression */
+ struct sk_buff_head xmt_q; /* frames to send from pppd */
+ struct sk_buff_head rcv_q; /* frames for pppd to read */
+
+ /* Information specific to using ppp on async serial lines. */
+ struct tty_struct *tty; /* ptr to TTY structure */
+ struct tty_struct *backup_tty; /* TTY to use if tty gets closed */
+ __u8 escape; /* 0x20 if prev char was PPP_ESC */
__u8 toss; /* toss this frame */
-
- __u32 flags; /* miscellany */
-
+ volatile __u8 tty_pushing; /* internal state flag */
__u32 xmit_async_map[8]; /* 1 bit means that given control
character is quoted on output*/
-
__u32 recv_async_map; /* 1 bit means that given control
character is ignored on input*/
- __s32 mtu; /* maximum xmit frame size */
- __s32 mru; /* maximum receive frame size */
+ __u32 bytes_sent; /* Bytes sent on frame */
+ __u32 bytes_rcvd; /* Bytes recvd on frame */
- /* Information about the current tty data */
- __s32 line; /* PPP channel number */
- struct tty_struct *tty; /* ptr to TTY structure */
- struct tty_struct *backup_tty; /* TTY to use if tty gets closed */
- __s32 bytes_sent; /* Bytes sent on frame */
- __s32 bytes_rcvd; /* Bytes recvd on frame */
+ /* Async transmission information */
+ struct sk_buff *tpkt; /* frame currently being sent */
+ int tpkt_pos; /* how much of it we've done */
+ __u16 tfcs; /* FCS so far for it */
+ unsigned char *optr; /* where we're up to in sending */
+ unsigned char *olim; /* points past last valid char */
- /* VJ Header compression data */
- struct slcompress *slcomp; /* for header compression */
+ /* Async reception information */
+ struct sk_buff *rpkt; /* frame currently being rcvd */
+ __u16 rfcs; /* FCS so far of rpkt */
- /* Transmission information */
- struct ppp_buffer *xbuf; /* Buffer currently being sent */
- struct ppp_buffer *s1buf; /* Pointer to daemon buffer */
- struct ppp_buffer *s2buf; /* Pointer to device buffer */
+ /* Queues for select() functionality */
+ struct wait_queue *read_wait; /* queue for reading processes */
+ /* info for detecting idle channels */
unsigned long last_xmit; /* time of last transmission */
unsigned long last_recv; /* time last packet received */
- /* These are pointers to the malloc()ed frame buffers.
- These buffers are used while processing a packet. If a packet
- has to hang around for the user process to read it, it lingers in
- the user buffers below. */
-
- struct ppp_buffer *wbuf; /* Transmission information */
- struct ppp_buffer *tbuf; /* daemon transmission buffer */
- struct ppp_buffer *rbuf; /* Receive information */
- struct ppp_buffer *ubuf; /* User buffer information */
- struct ppp_buffer *cbuf; /* compression buffer */
-
- /* Queues for select() functionality */
- struct wait_queue *write_wait; /* queue for reading processes */
- struct wait_queue *read_wait; /* queue for writing processes */
-
/* Statistic information */
- struct pppstat stats; /* statistic information */
+ struct pppstat stats; /* statistic information */
/* PPP compression protocol information */
- __u32 sc_bytessent; /* count of octets sent */
- __u32 sc_bytesrcvd; /* count of octets received */
+ struct compressor *sc_xcomp; /* transmit compressor */
+ void *sc_xc_state; /* transmit compressor state */
+ struct compressor *sc_rcomp; /* receive decompressor */
+ void *sc_rc_state; /* receive decompressor state */
+
enum NPmode sc_npmode[NUM_NP]; /* what to do with each NP */
- struct compressor *sc_xcomp; /* transmit compressor */
- void *sc_xc_state; /* transmit compressor state */
- struct compressor *sc_rcomp; /* receive decompressor */
- void *sc_rc_state; /* receive decompressor state */
- __s32 sc_xfer; /* PID of reserved PPP table */
- char name[8];
+ int sc_xfer; /* PID of reserved PPP table */
+ char name[8]; /* space for unit name */
struct device dev; /* net device structure */
struct enet_statistics estats; /* more detailed stats */
+
+ /* tty output buffer */
+ unsigned char obuf[OBUFSIZE]; /* buffer for characters to send */
};
diff --git a/include/linux/if_shaper.h b/include/linux/if_shaper.h
index 7377867e7..57ffd730a 100644
--- a/include/linux/if_shaper.h
+++ b/include/linux/if_shaper.h
@@ -18,6 +18,7 @@ struct shaper
{
struct sk_buff_head sendq;
__u32 bytespertick;
+ __u32 bitspersec;
__u32 shapelatency;
__u32 shapeclock;
__u32 recovery; /* Time we can next clock a packet out on
@@ -44,6 +45,8 @@ struct shaper
#define SHAPER_SET_DEV 0x0001
#define SHAPER_SET_SPEED 0x0002
+#define SHAPER_GET_DEV 0x0003
+#define SHAPER_GET_SPEED 0x0004
struct shaperconf
{
diff --git a/include/linux/if_tr.h b/include/linux/if_tr.h
index 5d07fcab7..f7c97eeb9 100644
--- a/include/linux/if_tr.h
+++ b/include/linux/if_tr.h
@@ -59,29 +59,31 @@ struct trllc {
/* Token-Ring statistics collection data. */
struct tr_statistics {
- int rx_packets; /* total packets received */
- int tx_packets; /* total packets transmitted */
- int rx_errors; /* bad packets received */
- int tx_errors; /* packet transmit problems */
- int rx_dropped; /* no space in linux buffers */
- int tx_dropped; /* no space available in linux */
- int multicast; /* multicast packets received */
- int transmit_collision;
+ unsigned long rx_packets; /* total packets received */
+ unsigned long tx_packets; /* total packets transmitted */
+ unsigned long rx_bytes; /* total bytes received */
+ unsigned long tx_bytes; /* total bytes transmitted */
+ unsigned long rx_errors; /* bad packets received */
+ unsigned long tx_errors; /* packet transmit problems */
+ unsigned long rx_dropped; /* no space in linux buffers */
+ unsigned long tx_dropped; /* no space available in linux */
+ unsigned long multicast; /* multicast packets received */
+ unsigned long transmit_collision;
/* detailed Token-Ring errors. See IBM Token-Ring Network
Architecture for more info */
- int line_errors;
- int internal_errors;
- int burst_errors;
- int A_C_errors;
- int abort_delimiters;
- int lost_frames;
- int recv_congest_count;
- int frame_copied_errors;
- int frequency_errors;
- int token_errors;
- int dummy1;
+ unsigned long line_errors;
+ unsigned long internal_errors;
+ unsigned long burst_errors;
+ unsigned long A_C_errors;
+ unsigned long abort_delimiters;
+ unsigned long lost_frames;
+ unsigned long recv_congest_count;
+ unsigned long frame_copied_errors;
+ unsigned long frequency_errors;
+ unsigned long token_errors;
+ unsigned long dummy1;
};
/* source routing stuff */
@@ -93,5 +95,6 @@ struct tr_statistics {
#define TR_RCF_LIMITED_BROADCAST 0xC000 /* single-route broadcast */
#define TR_RCF_FRAME2K 0x20
#define TR_RCF_BROADCAST_MASK 0xC000
+#define TR_MAXRIFLEN 18
#endif /* _LINUX_IF_TR_H */
diff --git a/include/linux/if_wic.h b/include/linux/if_wic.h
deleted file mode 100644
index cca15f85b..000000000
--- a/include/linux/if_wic.h
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef _LINUX_IF_WIC_H
-#define _LINUX_IF_WIC_H
-
-#include <linux/sockios.h>
-
-#define SIOCDEVWIC SIOCDEVPRIVATE
-
-struct wicconf
-{
- unsigned char pcmd;
- unsigned char data[120];
- unsigned char len;
-};
-
-/* WIC host to controller commands */
-
-#define WIC_AYT 0x10 /* test dki */
-#define WIC_RESET 0x11 /* reset controller */
-#define WIC_SETSN 0x21 /* set station name */
-#define WIC_SETPS 0x22 /* set power saving mode */
-#define WIC_SETAF 0x23 /* set announce filter */
-#define WIC_SETGPF 0x24 /* set GPSP filter */
-#define WIC_GETVERH 0x61 /* get interface controller version */
-#define WIC_GETNL 0x62 /* get neighbor list */
-#define WIC_GETSN 0x65 /* get station name */
-#define WIC_CLRSTATS 0x83 /* clear controller statistics */
-#define WIC_SETNET 0x84 /* set network configuration */
-#define WIC_SETSYS 0x85 /* set system configuration */
-#define WIC_GETSTATS 0xc1 /* get statistics */
-#define WIC_GETVERM 0xc3 /* get MAC version */
-#define WIC_GETNET 0xc4 /* get network configuration */
-#define WIC_GETSYS 0xc5 /* get system configuration */
-
-/*
- * structure used for the GETNET/SETNET command
- */
-
-struct wic_net {
- unsigned char ula[6]; /* ula of interface */
- unsigned char mode; /* operating mode */
-#define NET_MODE_ME 0x01 /* receive my ula */
-#define NET_MODE_BCAST 0x02 /* receive bcasts */
-#define NET_MODE_MCAST 0x04 /* receive mcasts */
-#define NET_MODE_PROM 0x08 /* promiscuous */
-#define NET_MODE_HC 0x10 /* is a hop coordinator */
-#define NET_MODE_HC_VALID 0x20 /* hc address is valid */
-#define NET_MODE_HCAP 0x40 /* hc is also ap */
-#define NET_MODE_HC_KNOWN 0x80 /* hc is known */
- unsigned char rts_lo; /* rts threshold */
- unsigned char rts_hi; /* rts threshold */
- unsigned char retry; /* retry limit */
- unsigned char hc_ula[6]; /* ula of hc */
- unsigned char key[4]; /* network key */
- unsigned char dsl; /* direct send limit */
- unsigned char res1; /* reserved */
-};
-
-/*
- * structure used for the GETSYS/SETSYS command
- */
-
-struct wic_sys {
- unsigned char mode; /* set operating mode */
-#define SYS_MODE_ANT_DIV 0x00 /* use antenna diversity */
-#define SYS_MODE_ANT_1 0x01 /* use ant 1 for tx */
-#define SYS_MODE_ANT_2 0x02 /* use ant 2 for tx */
-#define SYS_MODE_HC_LOCK 0x04 /* lock onto current hc */
-#define SYS_MODE_DEBUG 0x08 /* upload failed frames */
-#define SYS_MODE_IAM_AP 0x10 /* I am AP */
-#define SYS_MODE_IAM_HC 0x20 /* I am HC */
-#define SYS_MODE_USE_SKIP 0x40 /* use skipping mechanism */
-#define SYS_MODE_AUTO 0x80 /* station is in auto mode */
- unsigned char switches; /* radio/controller switches */
-#define SYS_SWITCH_STDBY 0x01 /* switch radio to standby */
-#define SYS_SWITCH_TXRX 0x02 /* 1 = tx, manual mode only */
-#define SYS_SWITCH_PA 0x04 /* 1 = enable PA on radio */
-#define SYS_SWITCH_PWR 0x10 /* 1 = hi, 0 = lo power output */
-#define SYS_SWITCH_RES1 0x20 /* reserved, must be 0 */
-#define SYS_SWITCH_LIGHTS 0x40 /* light for tx & rx */
-#define SYS_SWITCH_LIGHTS_HC 0x80 /* light for rx while coordinated */
- unsigned char hop_min; /* hop range */
- unsigned char hop_max; /* hop range */
- unsigned char pre_len; /* preamble length (bytes) */
- unsigned char pre_match; /* valid preamble match (bytes) */
- unsigned char mod; /* data mod: 1 = 8:1, 0 = none */
- unsigned char cca_mode; /* cca flags */
-#define CCA_PKT_DET_BSY 0x01 /* busy if packet is detected */
-#define CCA_VIRT_CARR 0x02 /* use virtual carrier */
-#define CCA_RSSI_BSY 0x04 /* busy if rssi > threshold */
-#define CCA_DATA_BSY 0x08 /* busy if valid data > XXX usec */
- unsigned char dwell_hi; /* dwell time */
- unsigned char dwell_lo; /* dwell time */
- unsigned char hc_timeout; /* HC timeout */
- unsigned char rssi; /* rssi threshold */
- unsigned char hc_rssi; /* rssi of last hc frame */
- unsigned char hc_rssi_chan; /* channel of hc rssi value */
-};
-
-
-#endif /* _LINUX_IF_WIC_H */
-
-
diff --git a/include/linux/in6.h b/include/linux/in6.h
index 0ebec6ba3..37f0e066d 100644
--- a/include/linux/in6.h
+++ b/include/linux/in6.h
@@ -126,5 +126,6 @@ struct ipv6_mreq {
#define IPV6_MULTICAST_LOOP 19
#define IPV6_ADD_MEMBERSHIP 20
#define IPV6_DROP_MEMBERSHIP 21
+#define IPV6_ROUTER_ALERT 22
#endif
diff --git a/include/linux/in_route.h b/include/linux/in_route.h
index a64453839..61f25c30a 100644
--- a/include/linux/in_route.h
+++ b/include/linux/in_route.h
@@ -18,7 +18,6 @@
#define RTCF_MASQ 0x00400000
#define RTCF_SNAT 0x00800000
#define RTCF_DOREDIRECT 0x01000000
-#define RTCF_LOG 0x02000000
#define RTCF_DIRECTSRC 0x04000000
#define RTCF_DNAT 0x08000000
#define RTCF_BROADCAST 0x10000000
diff --git a/include/linux/init.h b/include/linux/init.h
index 67a3caaac..4465f38b5 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -9,7 +9,15 @@
*
* Usage:
* For functions:
- * you can surround the whole function declaration
+ *
+ * You should add __init immediately before the function name, like:
+ *
+ * static void __init initme(int x, int y)
+ * {
+ * extern int z; z = x * y;
+ * }
+ *
+ * Depricated: you can surround the whole function declaration
* just before function body into __initfunc() macro, like:
*
* __initfunc (static void initme(int x, int y))
@@ -17,17 +25,20 @@
* extern int z; z = x * y;
* }
*
- * if the function has a prototype somewhere, you can also add
+ * If the function has a prototype somewhere, you can also add
* __init between closing brace of the prototype and semicolon:
*
* extern int initialize_foobar_device(int, int, int) __init;
*
* For initialized data:
- * you should insert __initdata between the variable name and equal
+ * You should insert __initdata between the variable name and equal
* sign followed by value, e.g.:
*
* static int init_variable __initdata = 0;
* static char linux_logo[] __initdata = { 0x32, 0x36, ... };
+ *
+ * For initialized data not at file scope, i.e. within a function,
+ * you should use __initlocaldata instead, due to a bug in GCC 2.7.
*/
/*
@@ -48,4 +59,10 @@
#define __INITDATA
#endif
+#if __GNUC__ >= 2 && __GNUC_MINOR__ >= 8
+#define __initlocaldata __initdata
+#else
+#define __initlocaldata
+#endif
+
#endif
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index a6c8e89c2..925e70d20 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -42,19 +42,14 @@ enum {
KEYBOARD_BH,
CYCLADES_BH,
CM206_BH,
- JS_BH
+ JS_BH,
+ MACSERIAL_BH
};
#include <asm/hardirq.h>
#include <asm/softirq.h>
/*
- * Are we in an interrupt context? Either doing bottom half
- * or hardware interrupt processing?
- */
-#define in_interrupt() (local_irq_count[smp_processor_id()] + local_bh_count[smp_processor_id()] != 0)
-
-/*
* Autoprobing for irqs:
*
* probe_irq_on() and probe_irq_off() provide robust primitives
diff --git a/include/linux/ip_fw.h b/include/linux/ip_fw.h
index 0334cb4af..eeaa1eb5f 100644
--- a/include/linux/ip_fw.h
+++ b/include/linux/ip_fw.h
@@ -1,184 +1,120 @@
/*
- * IP firewalling code. This is taken from 4.4BSD. Please note the
- * copyright message below. As per the GPL it must be maintained
- * and the licenses thus do not conflict. While this port is subject
- * to the GPL I also place my modifications under the original
- * license in recognition of the original copyright.
+ * This code is heavily based on the code in ip_fw.h; see that file for
+ * copyrights and attributions. This code is basically GPL.
*
- * Ported from BSD to Linux,
- * Alan Cox 22/Nov/1994.
- * Merged and included the FreeBSD-Current changes at Ugen's request
- * (but hey it's a lot cleaner now). Ugen would prefer in some ways
- * we waited for his final product but since Linux 1.2.0 is about to
- * appear it's not practical - Read: It works, it's not clean but please
- * don't consider it to be his standard of finished work.
- * Alan.
- *
- * Fixes:
- * Pauline Middelink : Added masquerading.
- * Jos Vos : Separate input and output firewall
- * chains, new "insert" and "append"
- * commands to replace "add" commands,
- * add ICMP header to struct ip_fwpkt.
- * Jos Vos : Add support for matching device names.
- * Willy Konynenberg : Add transparent proxying support.
- * Jos Vos : Add options for input/output accounting.
- *
- * All the real work was done by .....
- */
-
-/*
- * Copyright (c) 1993 Daniel Boulet
- * Copyright (c) 1994 Ugen J.S.Antsilevich
- *
- * Redistribution and use in source forms, with and without modification,
- * are permitted provided that this entire comment appears intact.
- *
- * Redistribution in binary form may occur without any restrictions.
- * Obviously, it would be nice if you gave credit where credit is due
- * but requiring it would be too onerous.
- *
- * This software is provided ``AS IS'' without any warranties of any kind.
+ * 15-Feb-1997: Major changes to allow graphs for firewall rules.
+ * Paul Russell <Paul.Russell@rustcorp.com.au> and
+ * Michael Neuling <Michael.Neuling@rustcorp.com.au>
+ * 2-Nov-1997: Changed types to __u16, etc.
+ * Removed IP_FW_F_TCPACK & IP_FW_F_BIDIR.
+ * Added inverse flags field.
+ * Removed multiple port specs.
*/
/*
* Format of an IP firewall descriptor
*
* src, dst, src_mask, dst_mask are always stored in network byte order.
- * flags and num_*_ports are stored in host byte order (of course).
+ * flags are stored in host byte order (of course).
* Port numbers are stored in HOST byte order.
*/
-#ifndef _IP_FW_H
-#define _IP_FW_H
+#ifndef _IP_FWCHAINS_H
+#define _IP_FWCHAINS_H
-#ifdef __KERNEL__
#include <linux/icmp.h>
#include <linux/in.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/udp.h>
-#endif
+#define IP_FW_MAX_LABEL_LENGTH 8
+typedef char ip_chainlabel[IP_FW_MAX_LABEL_LENGTH+1];
struct ip_fw
{
- struct ip_fw *fw_next; /* Next firewall on chain */
struct in_addr fw_src, fw_dst; /* Source and destination IP addr */
struct in_addr fw_smsk, fw_dmsk; /* Mask for src and dest IP addr */
- struct in_addr fw_via; /* IP address of interface "via" */
- struct device *fw_viadev; /* device of interface "via" */
- __u16 fw_flg; /* Flags word */
- __u16 fw_nsp, fw_ndp; /* N'of src ports and # of dst ports */
- /* in ports array (dst ports follow */
- /* src ports; max of 10 ports in all; */
- /* count of 0 means match all ports) */
-#define IP_FW_MAX_PORTS 10 /* A reasonable maximum */
- __u16 fw_pts[IP_FW_MAX_PORTS]; /* Array of port numbers to match */
- unsigned long fw_pcnt,fw_bcnt; /* Packet and byte counters */
- __u8 fw_tosand, fw_tosxor; /* Revised packet priority */
+ __u32 fw_mark; /* ID to stamp on packet */
+ __u16 fw_proto; /* Protocol, 0 = ANY */
+ __u16 fw_flg; /* Flags word */
+ __u16 fw_invflg; /* Inverse flags */
+ __u16 fw_spts[2]; /* Source port range. */
+ __u16 fw_dpts[2]; /* Destination port range. */
+ __u16 fw_redirpt; /* Port to redirect to. */
+ __u16 fw_outputsize; /* Max amount to output to
+ NETLINK */
char fw_vianame[IFNAMSIZ]; /* name of interface "via" */
+ __u8 fw_tosand, fw_tosxor; /* Revised packet priority */
};
-/*
- * Values for "flags" field .
- */
+struct ip_fwuser
+{
+ struct ip_fw ipfw;
+ ip_chainlabel label;
+};
-#define IP_FW_F_ALL 0x0000 /* This is a universal packet firewall*/
-#define IP_FW_F_TCP 0x0001 /* This is a TCP packet firewall */
-#define IP_FW_F_UDP 0x0002 /* This is a UDP packet firewall */
-#define IP_FW_F_ICMP 0x0003 /* This is a ICMP packet firewall */
-#define IP_FW_F_KIND 0x0003 /* Mask to isolate firewall kind */
-#define IP_FW_F_ACCEPT 0x0004 /* This is an accept firewall (as *
- * opposed to a deny firewall)*
- * */
-#define IP_FW_F_SRNG 0x0008 /* The first two src ports are a min *
- * and max range (stored in host byte *
- * order). *
- * */
-#define IP_FW_F_DRNG 0x0010 /* The first two dst ports are a min *
- * and max range (stored in host byte *
- * order). *
- * (ports[0] <= port <= ports[1]) *
- * */
-#define IP_FW_F_PRN 0x0020 /* In verbose mode print this firewall*/
-#define IP_FW_F_BIDIR 0x0040 /* For bidirectional firewalls */
-#define IP_FW_F_TCPSYN 0x0080 /* For tcp packets-check SYN only */
-#define IP_FW_F_ICMPRPL 0x0100 /* Send back icmp unreachable packet */
-#define IP_FW_F_MASQ 0x0200 /* Masquerading */
-#define IP_FW_F_TCPACK 0x0400 /* For tcp-packets match if ACK is set*/
-#define IP_FW_F_REDIR 0x0800 /* Redirect to local port fw_pts[n] */
-#define IP_FW_F_ACCTIN 0x1000 /* Account incoming packets only. */
-#define IP_FW_F_ACCTOUT 0x2000 /* Account outgoing packets only. */
-
-#define IP_FW_F_MASK 0x3FFF /* All possible flag bits mask */
+/* Values for "fw_flg" field . */
+#define IP_FW_F_PRN 0x0001 /* Print packet if it matches */
+#define IP_FW_F_TCPSYN 0x0002 /* For tcp packets-check SYN only */
+#define IP_FW_F_FRAG 0x0004 /* Set if rule is a fragment rule */
+#define IP_FW_F_MARKABS 0x0008 /* Set the mark to fw_mark, not add. */
+#define IP_FW_F_WILDIF 0x0010 /* Need only match start of interface name. */
+#define IP_FW_F_NETLINK 0x0020 /* Redirect to netlink: 2.1.x only */
+#define IP_FW_F_MASK 0x003F /* All possible flag bits mask */
+
+/* Values for "fw_invflg" field. */
+#define IP_FW_INV_SRCIP 0x0001 /* Invert the sense of fw_src. */
+#define IP_FW_INV_DSTIP 0x0002 /* Invert the sense of fw_dst. */
+#define IP_FW_INV_PROTO 0x0004 /* Invert the sense of fw_proto. */
+#define IP_FW_INV_SRCPT 0x0008 /* Invert the sense of source ports. */
+#define IP_FW_INV_DSTPT 0x0010 /* Invert the sense of destination ports. */
+#define IP_FW_INV_VIA 0x0020 /* Invert the sense of fw_vianame. */
+#define IP_FW_INV_SYN 0x0040 /* Invert the sense of IP_FW_F_TCPSYN. */
+#define IP_FW_INV_FRAG 0x0080 /* Invert the sense of IP_FW_F_FRAG. */
/*
* New IP firewall options for [gs]etsockopt at the RAW IP level.
* Unlike BSD Linux inherits IP options so you don't have to use
- * a raw socket for this. Instead we check rights in the calls.
- */
+ * a raw socket for this. Instead we check rights in the calls. */
#define IP_FW_BASE_CTL 64 /* base for firewall socket options */
-#define IP_FW_COMMAND 0x00FF /* mask for command without chain */
-#define IP_FW_TYPE 0x0300 /* mask for type (chain) */
-#define IP_FW_SHIFT 8 /* shift count for type (chain) */
-
-#define IP_FW_FWD 0
-#define IP_FW_IN 1
-#define IP_FW_OUT 2
-#define IP_FW_ACCT 3
-#define IP_FW_CHAINS 4 /* total number of ip_fw chains */
-#define IP_FW_MASQ 5
-
-#define IP_FW_INSERT (IP_FW_BASE_CTL)
-#define IP_FW_APPEND (IP_FW_BASE_CTL+1)
-#define IP_FW_DELETE (IP_FW_BASE_CTL+2)
-#define IP_FW_FLUSH (IP_FW_BASE_CTL+3)
-#define IP_FW_ZERO (IP_FW_BASE_CTL+4)
-#define IP_FW_POLICY (IP_FW_BASE_CTL+5)
-#define IP_FW_CHECK (IP_FW_BASE_CTL+6)
-#define IP_FW_MASQ_TIMEOUTS (IP_FW_BASE_CTL+7)
-
-#define IP_FW_INSERT_FWD (IP_FW_INSERT | (IP_FW_FWD << IP_FW_SHIFT))
-#define IP_FW_APPEND_FWD (IP_FW_APPEND | (IP_FW_FWD << IP_FW_SHIFT))
-#define IP_FW_DELETE_FWD (IP_FW_DELETE | (IP_FW_FWD << IP_FW_SHIFT))
-#define IP_FW_FLUSH_FWD (IP_FW_FLUSH | (IP_FW_FWD << IP_FW_SHIFT))
-#define IP_FW_ZERO_FWD (IP_FW_ZERO | (IP_FW_FWD << IP_FW_SHIFT))
-#define IP_FW_POLICY_FWD (IP_FW_POLICY | (IP_FW_FWD << IP_FW_SHIFT))
-#define IP_FW_CHECK_FWD (IP_FW_CHECK | (IP_FW_FWD << IP_FW_SHIFT))
-
-#define IP_FW_INSERT_IN (IP_FW_INSERT | (IP_FW_IN << IP_FW_SHIFT))
-#define IP_FW_APPEND_IN (IP_FW_APPEND | (IP_FW_IN << IP_FW_SHIFT))
-#define IP_FW_DELETE_IN (IP_FW_DELETE | (IP_FW_IN << IP_FW_SHIFT))
-#define IP_FW_FLUSH_IN (IP_FW_FLUSH | (IP_FW_IN << IP_FW_SHIFT))
-#define IP_FW_ZERO_IN (IP_FW_ZERO | (IP_FW_IN << IP_FW_SHIFT))
-#define IP_FW_POLICY_IN (IP_FW_POLICY | (IP_FW_IN << IP_FW_SHIFT))
-#define IP_FW_CHECK_IN (IP_FW_CHECK | (IP_FW_IN << IP_FW_SHIFT))
-
-#define IP_FW_INSERT_OUT (IP_FW_INSERT | (IP_FW_OUT << IP_FW_SHIFT))
-#define IP_FW_APPEND_OUT (IP_FW_APPEND | (IP_FW_OUT << IP_FW_SHIFT))
-#define IP_FW_DELETE_OUT (IP_FW_DELETE | (IP_FW_OUT << IP_FW_SHIFT))
-#define IP_FW_FLUSH_OUT (IP_FW_FLUSH | (IP_FW_OUT << IP_FW_SHIFT))
-#define IP_FW_ZERO_OUT (IP_FW_ZERO | (IP_FW_OUT << IP_FW_SHIFT))
-#define IP_FW_POLICY_OUT (IP_FW_POLICY | (IP_FW_OUT << IP_FW_SHIFT))
-#define IP_FW_CHECK_OUT (IP_FW_CHECK | (IP_FW_OUT << IP_FW_SHIFT))
-
-#define IP_ACCT_INSERT (IP_FW_INSERT | (IP_FW_ACCT << IP_FW_SHIFT))
-#define IP_ACCT_APPEND (IP_FW_APPEND | (IP_FW_ACCT << IP_FW_SHIFT))
-#define IP_ACCT_DELETE (IP_FW_DELETE | (IP_FW_ACCT << IP_FW_SHIFT))
-#define IP_ACCT_FLUSH (IP_FW_FLUSH | (IP_FW_ACCT << IP_FW_SHIFT))
-#define IP_ACCT_ZERO (IP_FW_ZERO | (IP_FW_ACCT << IP_FW_SHIFT))
-
-#define IP_FW_MASQ_INSERT (IP_FW_INSERT | (IP_FW_MASQ << IP_FW_SHIFT))
-#define IP_FW_MASQ_ADD (IP_FW_APPEND | (IP_FW_MASQ << IP_FW_SHIFT))
-#define IP_FW_MASQ_DEL (IP_FW_DELETE | (IP_FW_MASQ << IP_FW_SHIFT))
-#define IP_FW_MASQ_FLUSH (IP_FW_FLUSH | (IP_FW_MASQ << IP_FW_SHIFT))
-
-#define IP_FW_MASQ_INSERT (IP_FW_INSERT | (IP_FW_MASQ << IP_FW_SHIFT))
-#define IP_FW_MASQ_ADD (IP_FW_APPEND | (IP_FW_MASQ << IP_FW_SHIFT))
-#define IP_FW_MASQ_DEL (IP_FW_DELETE | (IP_FW_MASQ << IP_FW_SHIFT))
-#define IP_FW_MASQ_FLUSH (IP_FW_FLUSH | (IP_FW_MASQ << IP_FW_SHIFT))
+#define IP_FW_APPEND (IP_FW_BASE_CTL) /* Takes ip_fwchange */
+#define IP_FW_REPLACE (IP_FW_BASE_CTL+1) /* Takes ip_fwnew */
+#define IP_FW_DELETE_NUM (IP_FW_BASE_CTL+2) /* Takes ip_fwdelnum */
+#define IP_FW_DELETE (IP_FW_BASE_CTL+3) /* Takes ip_fwchange */
+#define IP_FW_INSERT (IP_FW_BASE_CTL+4) /* Takes ip_fwnew */
+#define IP_FW_FLUSH (IP_FW_BASE_CTL+5) /* Takes ip_chainlabel */
+#define IP_FW_ZERO (IP_FW_BASE_CTL+6) /* Takes ip_chainlabel */
+#define IP_FW_CHECK (IP_FW_BASE_CTL+7) /* Takes ip_fwtest */
+#define IP_FW_MASQ_TIMEOUTS (IP_FW_BASE_CTL+8) /* Takes 3 ints */
+#define IP_FW_CREATECHAIN (IP_FW_BASE_CTL+9) /* Takes ip_chainlabel */
+#define IP_FW_DELETECHAIN (IP_FW_BASE_CTL+10) /* Takes ip_chainlabel */
+#define IP_FW_POLICY (IP_FW_BASE_CTL+11) /* Takes ip_fwpolicy */
+/* Masquerade controls */
+#define IP_FW_MASQ_INSERT (IP_FW_BASE_CTL+12)
+#define IP_FW_MASQ_ADD (IP_FW_BASE_CTL+13)
+#define IP_FW_MASQ_DEL (IP_FW_BASE_CTL+14)
+#define IP_FW_MASQ_FLUSH (IP_FW_BASE_CTL+15)
+
+/* Builtin chain labels */
+#define IP_FW_LABEL_FORWARD "forward"
+#define IP_FW_LABEL_INPUT "input"
+#define IP_FW_LABEL_OUTPUT "output"
+
+/* Special targets */
+#define IP_FW_LABEL_MASQUERADE "MASQ"
+#define IP_FW_LABEL_REDIRECT "REDIRECT"
+#define IP_FW_LABEL_ACCEPT "ACCEPT"
+#define IP_FW_LABEL_BLOCK "DENY"
+#define IP_FW_LABEL_REJECT "REJECT"
+#define IP_FW_LABEL_RETURN "RETURN"
+#define IP_FW_LABEL_QUEUE "QUEUE"
+
+/* Files in /proc/net */
+#define IP_FW_PROC_CHAINS "ip_fwchains"
+#define IP_FW_PROC_CHAIN_NAMES "ip_fwnames"
+
struct ip_fwpkt
{
@@ -192,6 +128,48 @@ struct ip_fwpkt
char fwp_vianame[IFNAMSIZ]; /* interface name */
};
+/* The argument to IP_FW_DELETE and IP_FW_APPEND */
+struct ip_fwchange
+{
+ struct ip_fwuser fwc_rule;
+ ip_chainlabel fwc_label;
+};
+
+/* The argument to IP_FW_CHECK. */
+struct ip_fwtest
+{
+ struct ip_fwpkt fwt_packet; /* Packet to be tested */
+ ip_chainlabel fwt_label; /* Block to start test in */
+};
+
+/* The argument to IP_FW_DELETE_NUM */
+struct ip_fwdelnum
+{
+ __u32 fwd_rulenum;
+ ip_chainlabel fwd_label;
+};
+
+/* The argument to IP_FW_REPLACE and IP_FW_INSERT */
+struct ip_fwnew
+{
+ __u32 fwn_rulenum;
+ struct ip_fwuser fwn_rule;
+ ip_chainlabel fwn_label;
+};
+
+/* The argument to IP_FW_POLICY */
+struct ip_fwpolicy
+{
+ ip_chainlabel fwp_policy;
+ ip_chainlabel fwp_label;
+};
+/*
+ * timeouts for ip masquerading
+ */
+
+struct ip_fw_masq;
+
+/* Masquerading stuff */
#define IP_FW_MASQCTL_MAX 256
#define IP_MASQ_MOD_NMAX 32
@@ -206,11 +184,7 @@ struct ip_fw_masqctl
} u;
};
-/*
- * timeouts for ip masquerading
- */
-struct ip_fw_masq;
/*
* Main firewall chains definitions and global var's definitions.
@@ -218,37 +192,18 @@ struct ip_fw_masq;
#ifdef __KERNEL__
-/* Modes used in the ip_fw_chk() routine. */
-#define IP_FW_MODE_FW 0x00 /* kernel firewall check */
-#define IP_FW_MODE_ACCT_IN 0x01 /* accounting (incoming) */
-#define IP_FW_MODE_ACCT_OUT 0x02 /* accounting (outgoing) */
-#define IP_FW_MODE_CHK 0x04 /* check requested by user */
-
#include <linux/config.h>
-#ifdef CONFIG_IP_FIREWALL
-extern struct ip_fw *ip_fw_in_chain;
-extern struct ip_fw *ip_fw_out_chain;
-extern struct ip_fw *ip_fw_fwd_chain;
-extern int ip_fw_in_policy;
-extern int ip_fw_out_policy;
-extern int ip_fw_fwd_policy;
+#include <linux/version.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
+#include <linux/init.h>
+extern void ip_fw_init(void) __init;
+#else /* 2.0.x */
+extern void ip_fw_init(void);
+#endif /* 2.1.x */
extern int ip_fw_ctl(int, void *, int);
-#endif
-#ifdef CONFIG_IP_ACCT
-extern struct ip_fw *ip_acct_chain;
-extern int ip_acct_ctl(int, void *, int);
-#endif
#ifdef CONFIG_IP_MASQUERADE
extern int ip_masq_ctl(int, void *, int);
#endif
-#ifdef CONFIG_IP_MASQUERADE
-extern int ip_masq_ctl(int, void *, int);
-#endif
-
-extern int ip_fw_chk(struct iphdr *, struct device *, __u16 *, struct ip_fw *, int, int);
-extern void ip_fw_init(void);
#endif /* KERNEL */
-
-
-#endif /* _IP_FW_H */
+#endif /* _IP_FWCHAINS_H */
diff --git a/include/linux/ipx.h b/include/linux/ipx.h
index d3aa23844..c6846779b 100644
--- a/include/linux/ipx.h
+++ b/include/linux/ipx.h
@@ -41,7 +41,7 @@ typedef struct ipx_interface_definition
#define IPX_FRAME_8022 2
#define IPX_FRAME_ETHERII 3
#define IPX_FRAME_8023 4
-#define IPX_FRAME_TR_8022 5
+#define IPX_FRAME_TR_8022 5 /* obsolete */
unsigned char ipx_special;
#define IPX_SPECIAL_NONE 0
#define IPX_PRIMARY 1
@@ -82,6 +82,7 @@ struct ipx_route_def
extern int ipxrtr_route_skb(struct sk_buff *);
extern int ipx_if_offset(unsigned long ipx_net_number);
+extern void ipx_remove_socket(struct sock *sk);
#endif /* def __KERNEL__ */
#endif /* def _IPX_H_ */
diff --git a/include/linux/iso_fs.h b/include/linux/iso_fs.h
index a81dc1296..30a14b169 100644
--- a/include/linux/iso_fs.h
+++ b/include/linux/iso_fs.h
@@ -182,6 +182,7 @@ extern char * get_rock_ridge_symlink(struct inode *);
extern int find_rock_ridge_relocation(struct iso_directory_record *, struct inode *);
int get_joliet_filename(struct iso_directory_record *, struct inode *, unsigned char *);
+int get_acorn_filename(struct iso_directory_record *, char *, struct inode *);
/* The stuff that follows may be totally unneeded. I have not checked to see
which prototypes we are still using. */
@@ -227,6 +228,3 @@ extern void leak_check_brelse(struct buffer_head * bh);
#endif /* __KERNEL__ */
#endif
-
-
-
diff --git a/include/linux/iso_fs_sb.h b/include/linux/iso_fs_sb.h
index 834ae348b..879f8faf3 100644
--- a/include/linux/iso_fs_sb.h
+++ b/include/linux/iso_fs_sb.h
@@ -30,10 +30,3 @@ struct isofs_sb_info {
};
#endif
-
-
-
-
-
-
-
diff --git a/include/linux/joystick.h b/include/linux/joystick.h
index 2a3f1f8ba..513801cbe 100644
--- a/include/linux/joystick.h
+++ b/include/linux/joystick.h
@@ -2,9 +2,9 @@
#define _LINUX_JOYSTICK_H
/*
- * $Id: joystick.h,v 1.3 1998/03/30 11:10:40 mj Exp $
+ * /usr/include/linux/joystick.h Version 1.0.9
*
- * Copyright (C) 1997, 1998 Vojtech Pavlik
+ * Copyright (C) 1996-1998 Vojtech Pavlik
*/
#include <asm/types.h>
@@ -13,26 +13,26 @@
* Version
*/
-#define JS_VERSION 0x00010007L /* 1.0.7 BCD */
+#define JS_VERSION 0x00010008L
/*
* IOCTL commands for joystick driver
*/
-#define JSIOCGVERSION _IOR('j', 0x01, __u32) /* get driver version */
+#define JSIOCGVERSION _IOR('j', 0x01, __u32) /* get driver version */
-#define JSIOCGAXES _IOR('j', 0x11, __u8) /* get number of axes */
-#define JSIOCGBUTTONS _IOR('j', 0x12, __u8) /* get number of buttons */
+#define JSIOCGAXES _IOR('j', 0x11, __u8) /* get number of axes */
+#define JSIOCGBUTTONS _IOR('j', 0x12, __u8) /* get number of buttons */
-#define JSIOCSCORR _IOW('j', 0x21, struct js_corr[4]) /* set correction values */
-#define JSIOCGCORR _IOR('j', 0x22, struct js_corr[4]) /* get correction values */
+#define JSIOCSCORR _IOW('j', 0x21, struct js_corr[4]) /* set correction values */
+#define JSIOCGCORR _IOR('j', 0x22, struct js_corr[4]) /* get correction values */
/*
* Types and constants for get/set correction
*/
-#define JS_CORR_NONE 0x00 /* returns raw values */
-#define JS_CORR_BROKEN 0x01 /* broken line */
+#define JS_CORR_NONE 0x00 /* returns raw values */
+#define JS_CORR_BROKEN 0x01 /* broken line */
struct js_corr {
__s32 coef[8];
@@ -46,13 +46,13 @@ struct js_corr {
#define JS_EVENT_BUTTON 0x01 /* button pressed/released */
#define JS_EVENT_AXIS 0x02 /* joystick moved */
-#define JS_EVENT_INIT 0x80 /* initial state of device */
+#define JS_EVENT_INIT 0x80 /* initial state of device at open time */
struct js_event {
- __u32 time; /* time when event happened in miliseconds since open */
- __u16 value; /* new value */
- __u8 type; /* type of event, see above */
- __u8 number; /* axis/button number */
+ __u32 time; /* event timestamp in miliseconds since open */
+ __s16 value; /* value */
+ __u8 type; /* type of event, see above */
+ __u8 number; /* axis/button number */
};
/*
@@ -62,16 +62,16 @@ struct js_event {
#define JS_RETURN sizeof(struct JS_DATA_TYPE)
#define JS_TRUE 1
#define JS_FALSE 0
-#define JS_X_0 0x01 /* bit mask for x-axis js0 */
-#define JS_Y_0 0x02 /* bit mask for y-axis js0 */
-#define JS_X_1 0x04 /* bit mask for x-axis js1 */
-#define JS_Y_1 0x08 /* bit mask for y-axis js1 */
-#define JS_MAX 2 /* max number of joysticks */
+#define JS_X_0 0x01 /* bit mask for x-axis js0 */
+#define JS_Y_0 0x02 /* bit mask for y-axis js0 */
+#define JS_X_1 0x04 /* bit mask for x-axis js1 */
+#define JS_Y_1 0x08 /* bit mask for y-axis js1 */
+#define JS_MAX 2 /* max number of joysticks */
struct JS_DATA_TYPE {
- int buttons; /* immediate button state */
- int x; /* immediate x axis value */
- int y; /* immediate y axis value */
+ int buttons; /* immediate button state */
+ int x; /* immediate x axis value */
+ int y; /* immediate y axis value */
};
diff --git a/include/linux/kbd_kern.h b/include/linux/kbd_kern.h
index 2d7dc1b7e..f5ae9ed93 100644
--- a/include/linux/kbd_kern.h
+++ b/include/linux/kbd_kern.h
@@ -138,4 +138,27 @@ extern inline void chg_vc_kbd_led(struct kbd_struct * kbd, int flag)
#define U(x) ((x) ^ 0xf000)
+/* keyboard.c */
+
+struct console;
+
+int getkeycode(unsigned int scancode);
+int setkeycode(unsigned int scancode, unsigned int keycode);
+void compute_shiftstate(void);
+int keyboard_wait_for_keypress(struct console *);
+
+/* defkeymap.c */
+
+extern unsigned int keymap_count;
+
+/* console.c */
+
+extern task_queue con_task_queue;
+
+extern inline void con_schedule_flip(struct tty_struct *t)
+{
+ queue_task(&t->flip.tqueue, &con_task_queue);
+ mark_bh(CONSOLE_BH);
+}
+
#endif
diff --git a/include/linux/kd.h b/include/linux/kd.h
index 0f669cbe6..c717c1981 100644
--- a/include/linux/kd.h
+++ b/include/linux/kd.h
@@ -132,8 +132,49 @@ struct kbkeycode {
#define KDSIGACCEPT 0x4B4E /* accept kbd generated signals */
+struct hwclk_time {
+ unsigned sec; /* 0..59 */
+ unsigned min; /* 0..59 */
+ unsigned hour; /* 0..23 */
+ unsigned day; /* 1..31 */
+ unsigned mon; /* 0..11 */
+ unsigned year; /* 70... */
+ int wday; /* 0..6, 0 is Sunday, -1 means unknown/don't set */
+};
+
+#define KDGHWCLK 0x4B50 /* get hardware clock */
+#define KDSHWCLK 0x4B51 /* set hardware clock */
+
+struct kbd_repeat {
+ int delay; /* in msec; <= 0: don't change */
+ int rate; /* in msec; <= 0: don't change */
+};
+
+#define KDKBDREP 0x4B52 /* set keyboard delay/repeat rate;
+ * actually used values are returned */
+
+#define KDFONTOP 0x4B72 /* font operations */
+
+struct console_font_op {
+ unsigned int op; /* operation code KD_FONT_OP_* */
+ unsigned int flags; /* KD_FONT_FLAG_* */
+ unsigned int width, height; /* font size */
+ unsigned int charcount;
+ unsigned char *data; /* font data with height fixed to 32 */
+};
+
+#define KD_FONT_OP_SET 0 /* Set font */
+#define KD_FONT_OP_GET 1 /* Get font */
+#define KD_FONT_OP_SET_DEFAULT 2 /* Set font to default, data points to name / NULL */
+#define KD_FONT_OP_COPY 3 /* Copy from another console */
+
+#define KD_FONT_FLAG_DONT_RECALC 1 /* Don't recalculate hw charcell size [compat] */
+#ifdef __KERNEL__
+#define KD_FONT_FLAG_OLD 0x80000000 /* Invoked via old interface [compat] */
+#endif
+
/* note: 0x4B00-0x4B4E all have had a value at some time;
don't reuse for the time being */
-/* note: 0x4B60-0x4B6D, 0x4B70, 0x4B71 used above */
+/* note: 0x4B60-0x4B6D, 0x4B70-0x4B72 used above */
#endif /* _LINUX_KD_H */
diff --git a/include/linux/kernel_stat.h b/include/linux/kernel_stat.h
index 6bf0d79cb..cd584c1af 100644
--- a/include/linux/kernel_stat.h
+++ b/include/linux/kernel_stat.h
@@ -2,13 +2,12 @@
#define _LINUX_KERNEL_STAT_H
#include <asm/irq.h>
-#include <asm/smp.h>
#include <linux/smp.h>
#include <linux/tasks.h>
/*
* 'kernel_stat.h' contains the definitions needed for doing
- * some kernel statistics (cpu usage, context switches ...),
+ * some kernel statistics (CPU usage, context switches ...),
* used by rstatd/perfmeter
*/
diff --git a/include/linux/keyboard.h b/include/linux/keyboard.h
index d54377d96..6829c6536 100644
--- a/include/linux/keyboard.h
+++ b/include/linux/keyboard.h
@@ -25,6 +25,7 @@ extern const int max_vals[];
extern unsigned short *key_maps[MAX_NR_KEYMAPS];
extern unsigned short plain_map[NR_KEYS];
extern struct wait_queue * keypress_wait;
+extern unsigned char keyboard_type;
#endif
#define MAX_NR_FUNC 256 /* max nr of strings assigned to keys */
diff --git a/include/linux/linux_logo.h b/include/linux/linux_logo.h
new file mode 100644
index 000000000..07cde4f87
--- /dev/null
+++ b/include/linux/linux_logo.h
@@ -0,0 +1,1444 @@
+/* $Id: linux_logo.h,v 1.3 1998/07/06 15:51:16 jj Exp $
+ * include/linux/linux_logo.h: This is a linux logo
+ * to be displayed on boot.
+ *
+ * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
+ * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
+ *
+ * You can put anything here, but:
+ * LINUX_LOGO_COLORS has to be less than 224
+ * image size has to be 80x80
+ * values have to start from 0x20
+ * (i.e. RGB(linux_logo_red[0],
+ * linux_logo_green[0],
+ * linux_logo_blue[0]) is color 0x20)
+ * BW image has to be 80x80 as well, with MS bit
+ * on the left
+ * Serial_console ascii image can be any size,
+ * but should contain %s to display the version
+ */
+
+#if LINUX_LOGO_COLORS == 221
+
+unsigned char linux_logo_red[] __initdata = {
+ 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xE7, 0xE5, 0xE3,
+ 0xCA, 0xD4, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xE5,
+ 0xF1, 0xED, 0xEE, 0xE6, 0xC6, 0xDA, 0xDD, 0xE5,
+ 0xD9, 0xC6, 0xE3, 0xD0, 0xC6, 0xBA, 0xB0, 0xB6,
+ 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xB0, 0xAD,
+ 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA0, 0x9D,
+ 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x99, 0x9A, 0x99,
+ 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D,
+ 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0x0D, 0x03,
+ 0x66, 0x44, 0x24, 0x08, 0xD6, 0xE6, 0xE9, 0xE6,
+ 0xE7, 0xCA, 0xDC, 0xDB, 0xD5, 0xD0, 0xC9, 0xE2,
+ 0xD5, 0xC6, 0xC4, 0xB3, 0xB2, 0xB9, 0xA9, 0x9A,
+ 0xB2, 0x9D, 0xE8, 0xEC, 0xF5, 0xF5, 0xF4, 0xF4,
+ 0xEC, 0xEE, 0xF0, 0xF5, 0xE0, 0xD6, 0xC5, 0xC2,
+ 0xD9, 0xD5, 0xD8, 0xD6, 0xF6, 0xF4, 0xED, 0xEC,
+ 0xEB, 0xF1, 0xF6, 0xF5, 0xF5, 0xEE, 0xEF, 0xEC,
+ 0xE7, 0xE3, 0xE6, 0xD6, 0xDD, 0xC3, 0xD6, 0xD7,
+ 0xCD, 0xCA, 0xC3, 0xAC, 0x95, 0x99, 0xB7, 0xA3,
+ 0x8B, 0x88, 0x95, 0x8A, 0x94, 0xD2, 0xCC, 0xC4,
+ 0xA8, 0x8E, 0x8F, 0xAE, 0xB8, 0xAC, 0xB6, 0xB4,
+ 0xAD, 0xA5, 0xA0, 0x9B, 0x8B, 0xA3, 0x94, 0x87,
+ 0x85, 0x89, 0x53, 0x80, 0x7D, 0x7C, 0x7A, 0x78,
+ 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x67, 0x65, 0x62,
+ 0x4B, 0x5B, 0x5F, 0x53, 0x56, 0x52, 0x4F, 0x46,
+ 0x42, 0x0F, 0x75, 0x78, 0x7D, 0x72, 0x5F, 0x6E,
+ 0x7A, 0x75, 0x6A, 0x58, 0x48, 0x4F, 0x00, 0x2B,
+ 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x3B, 0x11,
+ 0x1D, 0x14, 0x06, 0x02, 0x00
+};
+
+unsigned char linux_logo_green[] __initdata = {
+ 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xE7, 0xE5, 0xE3,
+ 0xCA, 0xD4, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xD3,
+ 0xDA, 0xD4, 0xD7, 0xCC, 0xC1, 0xCC, 0xCB, 0xC9,
+ 0xC5, 0xBC, 0xBC, 0xBB, 0xB7, 0xA5, 0xB0, 0xB6,
+ 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xAD, 0xAD,
+ 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA0, 0x95,
+ 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x99, 0x9A, 0x99,
+ 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D,
+ 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0x08, 0x02,
+ 0x53, 0x2E, 0x19, 0x06, 0xC6, 0xC8, 0xCF, 0xBD,
+ 0xB3, 0xB6, 0xB4, 0xAB, 0xA5, 0xA3, 0x9B, 0xB6,
+ 0xA7, 0x99, 0x92, 0xA4, 0x9E, 0x9D, 0x98, 0x8C,
+ 0x8A, 0x86, 0xCD, 0xCC, 0xC9, 0xD7, 0xCA, 0xC4,
+ 0xCA, 0xC3, 0xC7, 0xC3, 0xC8, 0xB4, 0x91, 0x8E,
+ 0x8A, 0x82, 0x87, 0x85, 0xBD, 0xBF, 0xB6, 0xBC,
+ 0xAE, 0xB7, 0xBC, 0xB8, 0xBF, 0xB6, 0xBC, 0xB5,
+ 0xAB, 0xA6, 0xAD, 0xB2, 0xA5, 0x87, 0x9C, 0x96,
+ 0x95, 0x8E, 0x87, 0x8F, 0x86, 0x86, 0x8E, 0x80,
+ 0x7A, 0x70, 0x7B, 0x78, 0x78, 0x7F, 0x77, 0x6F,
+ 0x70, 0x76, 0x59, 0x77, 0x68, 0x64, 0x7B, 0x7C,
+ 0x75, 0x6D, 0x77, 0x69, 0x65, 0x5F, 0x5B, 0x54,
+ 0x4F, 0x5B, 0x39, 0x80, 0x7D, 0x7C, 0x7A, 0x78,
+ 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x67, 0x65, 0x62,
+ 0x4B, 0x5B, 0x5F, 0x53, 0x56, 0x52, 0x4F, 0x46,
+ 0x42, 0x0B, 0x69, 0x66, 0x64, 0x57, 0x4A, 0x4E,
+ 0x55, 0x4B, 0x46, 0x3B, 0x30, 0x33, 0x00, 0x2B,
+ 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x29, 0x0D,
+ 0x1D, 0x14, 0x06, 0x02, 0x00
+};
+
+unsigned char linux_logo_blue[] __initdata = {
+ 0xF3, 0xF6, 0xF8, 0xF7, 0xEF, 0xEE, 0xE5, 0xDE,
+ 0xD7, 0xD3, 0xDD, 0xC8, 0xC7, 0xC4, 0xC2, 0xB5,
+ 0xB0, 0xA6, 0xAC, 0x9B, 0xB5, 0xB5, 0xAE, 0x84,
+ 0x90, 0xA9, 0x81, 0x8D, 0x96, 0x86, 0xB0, 0xB6,
+ 0xBB, 0xBE, 0xB9, 0xB8, 0xB3, 0xB2, 0xA7, 0xAD,
+ 0xAC, 0xA9, 0xA8, 0xA6, 0xA4, 0xA1, 0xA5, 0x87,
+ 0xA0, 0x9F, 0x9E, 0x9C, 0x9B, 0x9A, 0x9A, 0x99,
+ 0x98, 0x95, 0x96, 0x94, 0x93, 0x92, 0x8F, 0x8D,
+ 0x8C, 0x8A, 0x87, 0x86, 0x83, 0x81, 0xC8, 0xD7,
+ 0x9B, 0x8E, 0x8C, 0xB2, 0x77, 0x77, 0x4E, 0x77,
+ 0x69, 0x71, 0x78, 0x6B, 0x65, 0x66, 0x64, 0x59,
+ 0x5C, 0x5A, 0x48, 0x72, 0x7B, 0x6B, 0x67, 0x6E,
+ 0x42, 0x5B, 0x29, 0x36, 0x25, 0x10, 0x17, 0x14,
+ 0x19, 0x16, 0x13, 0x0E, 0x08, 0x2E, 0x2E, 0x3D,
+ 0x24, 0x24, 0x24, 0x24, 0x13, 0x12, 0x14, 0x14,
+ 0x0E, 0x08, 0x0D, 0x0F, 0x08, 0x0D, 0x0E, 0x08,
+ 0x08, 0x0C, 0x06, 0x06, 0x07, 0x16, 0x07, 0x0E,
+ 0x08, 0x0A, 0x07, 0x0D, 0x2D, 0x3E, 0x09, 0x4E,
+ 0x68, 0x52, 0x56, 0x58, 0x4B, 0x22, 0x20, 0x20,
+ 0x27, 0x39, 0x28, 0x19, 0x1E, 0x1E, 0x08, 0x06,
+ 0x07, 0x09, 0x08, 0x08, 0x05, 0x1D, 0x1F, 0x17,
+ 0x18, 0x06, 0x79, 0x80, 0x7D, 0x7C, 0x7A, 0x78,
+ 0x76, 0x71, 0x73, 0x6E, 0x6B, 0x68, 0x65, 0x62,
+ 0x4B, 0x5B, 0x5F, 0x55, 0x56, 0x52, 0x4F, 0x46,
+ 0x42, 0x5A, 0x14, 0x23, 0x3D, 0x2B, 0x21, 0x14,
+ 0x06, 0x04, 0x03, 0x07, 0x09, 0x13, 0x2A, 0x3A,
+ 0x37, 0x3E, 0x32, 0x33, 0x25, 0x2C, 0x07, 0x09,
+ 0x1D, 0x14, 0x06, 0x02, 0x00
+};
+
+unsigned char linux_logo[] __initdata = {
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x57,
+ 0x58, 0x58, 0x59, 0x5C, 0x5D, 0x5F, 0x60, 0x61,
+ 0x62, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5E, 0x5E,
+ 0x5E, 0x5D, 0x5D, 0x5C, 0x5D, 0x5B, 0x58, 0x58,
+ 0x58, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58,
+ 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x57,
+ 0x54, 0x56, 0x57, 0x67, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x67, 0x4C,
+ 0x4A, 0x49, 0x4A, 0x49, 0x4A, 0x49, 0x49, 0x4A,
+ 0x4A, 0x4B, 0x4B, 0x4B, 0x4C, 0x50, 0x51, 0x52,
+ 0x54, 0x54, 0x56, 0x57, 0x57, 0x57, 0x57, 0x58,
+ 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x58, 0x56, 0x56, 0x53,
+ 0x52, 0x53, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB,
+ 0x4B, 0x4B, 0x4B, 0x4A, 0x49, 0x4A, 0x4A, 0x49,
+ 0x49, 0x49, 0x48, 0x49, 0x49, 0x4A, 0x4A, 0x4B,
+ 0x4C, 0x4D, 0x52, 0x54, 0x56, 0x55, 0x57, 0x58,
+ 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50,
+ 0x50, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF0, 0xF4, 0xFB,
+ 0xFC, 0x67, 0x53, 0x50, 0x4D, 0x4C, 0x4C, 0x4C,
+ 0x4B, 0x4A, 0x4A, 0x48, 0x49, 0x48, 0x48, 0x49,
+ 0x49, 0x49, 0x4B, 0x4C, 0x50, 0x52, 0x53, 0x56,
+ 0x57, 0x57, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x55, 0x54, 0x53, 0x51, 0x51, 0x50, 0x4C, 0x4D,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0xD2, 0xD7, 0xF5,
+ 0xFC, 0xFC, 0x5D, 0x5D, 0x5C, 0x5C, 0x59, 0x58,
+ 0x58, 0x56, 0x52, 0x4C, 0x4B, 0x4A, 0x4A, 0x48,
+ 0x48, 0x48, 0x48, 0x48, 0x49, 0x4B, 0x4D, 0x51,
+ 0x54, 0x56, 0x58, 0x57, 0x57, 0x58, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x58, 0x57, 0x57, 0x57, 0x55, 0x54,
+ 0x53, 0x52, 0x51, 0x4D, 0x4D, 0x4D, 0x50, 0x50,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0x64, 0xD9, 0xF5,
+ 0xF9, 0xFC, 0xFC, 0x64, 0x63, 0x62, 0x61, 0x61,
+ 0x61, 0x60, 0x5E, 0x5B, 0x5A, 0x54, 0x52, 0x4C,
+ 0x4B, 0x49, 0x49, 0x47, 0x47, 0x48, 0x49, 0x4B,
+ 0x4C, 0x51, 0x53, 0x56, 0x57, 0x58, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x58, 0x57, 0x57, 0x55, 0x53, 0x53,
+ 0x51, 0x50, 0x50, 0x50, 0x50, 0x50, 0x53, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xF4, 0xF5, 0xF9, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x63, 0x61, 0x61, 0x5E, 0x59,
+ 0x55, 0x52, 0x4C, 0x4A, 0x49, 0x47, 0x48, 0x48,
+ 0x49, 0x4B, 0x4D, 0x51, 0x54, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x58, 0x55, 0x54, 0x54, 0x52, 0x51,
+ 0x51, 0x51, 0x51, 0x51, 0x53, 0x54, 0x59, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xF7, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0x60, 0x60, 0x60, 0x61,
+ 0x62, 0x63, 0x64, 0x64, 0x65, 0x65, 0x64, 0x63,
+ 0x61, 0x5E, 0x59, 0x56, 0x4D, 0x4B, 0x48, 0x48,
+ 0x48, 0x48, 0x49, 0x4B, 0x50, 0x53, 0x56, 0x56,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x56, 0x54, 0x53, 0x52, 0x51, 0x51,
+ 0x51, 0x52, 0x53, 0x55, 0x59, 0x5D, 0x5E, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0x4C, 0x4E, 0x51, 0x52,
+ 0x57, 0x5A, 0x5E, 0x60, 0x61, 0x63, 0x65, 0xCB,
+ 0x64, 0x64, 0x63, 0x60, 0x5C, 0x57, 0x50, 0x4B,
+ 0x48, 0x47, 0x47, 0x47, 0x4A, 0x4C, 0x52, 0x53,
+ 0x54, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x55, 0x54, 0x53, 0x53, 0x51, 0x52, 0x52, 0x53,
+ 0x53, 0x57, 0x5A, 0x5D, 0x5E, 0x5E, 0x60, 0xFC,
+ 0xFC, 0xFC, 0xFB, 0xF9, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFA, 0xF9, 0xF5, 0xFB, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0x45, 0x3F, 0x3F,
+ 0x45, 0x48, 0x4B, 0x4D, 0x54, 0x5A, 0x5E, 0x61,
+ 0x63, 0xCB, 0xCB, 0x65, 0x64, 0x62, 0x5E, 0x57,
+ 0x50, 0x4B, 0x48, 0x47, 0x47, 0x48, 0x4B, 0x4D,
+ 0x51, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55,
+ 0x54, 0x54, 0x53, 0x53, 0x52, 0x53, 0x54, 0x57,
+ 0x59, 0x5C, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0xFC,
+ 0xFC, 0xFA, 0xFC, 0xFA, 0xE0, 0xFC, 0xFC, 0xFC,
+ 0xFB, 0xFB, 0xFB, 0xDF, 0xD8, 0xF9, 0xE0, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0x4C, 0x4A, 0x48,
+ 0x48, 0x3E, 0x44, 0x43, 0x3F, 0x47, 0x4B, 0x52,
+ 0x5A, 0x5E, 0x62, 0x64, 0xCB, 0xCB, 0x64, 0x61,
+ 0x5E, 0x57, 0x4D, 0x49, 0x47, 0x47, 0x48, 0x4A,
+ 0x4C, 0x52, 0x54, 0x56, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55,
+ 0x54, 0x53, 0x53, 0x54, 0x54, 0x55, 0x58, 0x5B,
+ 0x5C, 0x5D, 0x5E, 0x5D, 0x5D, 0x5B, 0x58, 0xFC,
+ 0xFC, 0xD8, 0x4C, 0x60, 0xFC, 0xF5, 0xFC, 0xFC,
+ 0xFC, 0xF7, 0x5F, 0x48, 0x48, 0x2C, 0xF8, 0xF9,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x4B, 0x4A, 0x49,
+ 0x49, 0x49, 0x49, 0x47, 0x3E, 0x44, 0x42, 0x3F,
+ 0x3E, 0x4B, 0x54, 0x5C, 0x61, 0x64, 0xCB, 0xCB,
+ 0x64, 0x61, 0x5D, 0x53, 0x4B, 0x49, 0x47, 0x47,
+ 0x49, 0x4B, 0x50, 0x53, 0x56, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, 0x55, 0x54,
+ 0x53, 0x53, 0x54, 0x56, 0x58, 0x5A, 0x5B, 0x5D,
+ 0x5D, 0x5D, 0x5C, 0x5A, 0x54, 0x52, 0x4C, 0xFC,
+ 0xF7, 0x4E, 0x2D, 0x29, 0x4E, 0xFC, 0xFC, 0xFC,
+ 0xFB, 0x5F, 0x26, 0x24, 0x20, 0x2E, 0x65, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x45, 0x3F, 0x45,
+ 0x3E, 0x47, 0x47, 0x47, 0x47, 0x47, 0x3E, 0x44,
+ 0x43, 0x40, 0x44, 0x49, 0x51, 0x5C, 0x62, 0x64,
+ 0xCB, 0xCB, 0x63, 0x60, 0x58, 0x50, 0x49, 0x48,
+ 0x48, 0x48, 0x4A, 0x4D, 0x53, 0x54, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, 0x54,
+ 0x54, 0x54, 0x55, 0x57, 0x59, 0x5B, 0x5C, 0x5D,
+ 0x5C, 0x5A, 0x54, 0x51, 0x4C, 0x4C, 0x54, 0xFC,
+ 0xF9, 0x23, 0xDB, 0x2D, 0x23, 0xFA, 0xFB, 0xFA,
+ 0xF5, 0x27, 0x21, 0xD9, 0xF8, 0x20, 0x21, 0xFB,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x5D, 0x58, 0x55,
+ 0x50, 0x48, 0x45, 0x43, 0x44, 0x44, 0x45, 0x45,
+ 0x3E, 0x3F, 0x43, 0x41, 0x3F, 0x48, 0x52, 0x5D,
+ 0x63, 0x65, 0xCB, 0x65, 0x61, 0x5D, 0x52, 0x4B,
+ 0x48, 0x47, 0x47, 0x49, 0x4C, 0x51, 0x54, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54, 0x54,
+ 0x54, 0x58, 0x5A, 0x59, 0x5B, 0x5B, 0x5B, 0x5A,
+ 0x55, 0x52, 0x4D, 0x4D, 0x55, 0x5B, 0x5D, 0xFC,
+ 0xF1, 0xF9, 0xFC, 0xD4, 0x21, 0xCC, 0xF7, 0xF8,
+ 0xF2, 0x21, 0xD9, 0xFC, 0xF2, 0xFB, 0x21, 0x45,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0xD1, 0xD0, 0xCD,
+ 0xCC, 0x63, 0x5E, 0x58, 0x50, 0x47, 0x43, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x40, 0x41, 0x3F, 0x4A,
+ 0x56, 0x5E, 0x64, 0xCB, 0x65, 0x63, 0x5E, 0x56,
+ 0x4C, 0x48, 0x47, 0x47, 0x49, 0x4C, 0x51, 0x54,
+ 0x58, 0x57, 0x57, 0x57, 0x57, 0x55, 0x54, 0x54,
+ 0x57, 0x5A, 0x5A, 0x5C, 0x5B, 0x5A, 0x58, 0x54,
+ 0x51, 0x4C, 0x55, 0x5D, 0x5D, 0x5B, 0x54, 0xFC,
+ 0xF0, 0xF9, 0xFC, 0x65, 0x45, 0xCD, 0xFB, 0xFB,
+ 0xF8, 0x26, 0xFB, 0xFC, 0xFC, 0xFC, 0x21, 0x27,
+ 0xFB, 0xFC, 0xFC, 0xFC, 0xFB, 0xD7, 0x35, 0x34,
+ 0x2F, 0x35, 0x36, 0x2F, 0x2F, 0x36, 0x2F, 0x2F,
+ 0x36, 0x36, 0x35, 0x35, 0x43, 0x42, 0x41, 0x2E,
+ 0x45, 0x4C, 0x5B, 0x62, 0x65, 0xCC, 0x64, 0x60,
+ 0x58, 0x4D, 0x49, 0x47, 0x47, 0x49, 0x4C, 0x51,
+ 0x58, 0x57, 0x57, 0x57, 0x57, 0x57, 0x55, 0x57,
+ 0x58, 0x5A, 0x5A, 0x5B, 0x5A, 0x55, 0x54, 0x51,
+ 0x53, 0x5C, 0x5D, 0x5D, 0x54, 0x4B, 0x4D, 0xFC,
+ 0xFC, 0x44, 0xFC, 0xFB, 0x7B, 0xAB, 0xA8, 0xAE,
+ 0xAB, 0x7F, 0xFC, 0xFC, 0xFB, 0xFB, 0x22, 0x2A,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0x36, 0x2F, 0x30, 0x30,
+ 0x32, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x2F, 0x2F, 0x40, 0x41,
+ 0x2E, 0x40, 0x48, 0x56, 0x5F, 0x64, 0xCC, 0x65,
+ 0x61, 0x59, 0x50, 0x49, 0x47, 0x47, 0x49, 0x4C,
+ 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58,
+ 0x5A, 0x5A, 0x5A, 0x58, 0x55, 0x52, 0x51, 0x5A,
+ 0x5D, 0x5D, 0x57, 0x4C, 0x51, 0x54, 0x5D, 0xFC,
+ 0xFC, 0x2A, 0xFC, 0xC9, 0xAA, 0x8B, 0x8A, 0x8C,
+ 0xAB, 0x8C, 0x8C, 0xFB, 0xFB, 0x23, 0x20, 0xF1,
+ 0xFC, 0xFC, 0xFC, 0x3B, 0x33, 0x33, 0x32, 0x32,
+ 0x31, 0x32, 0x30, 0x32, 0x32, 0x32, 0x32, 0x30,
+ 0x31, 0x31, 0x31, 0x32, 0x33, 0x33, 0x3C, 0x41,
+ 0x41, 0x2E, 0x2D, 0x45, 0x4D, 0x5D, 0x63, 0xCC,
+ 0x65, 0x62, 0x5D, 0x51, 0x49, 0x47, 0x47, 0x4A,
+ 0x59, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58, 0x58,
+ 0x5A, 0x5A, 0x58, 0x55, 0x53, 0x53, 0x5C, 0x5E,
+ 0x59, 0x51, 0x4E, 0x54, 0x59, 0x5E, 0x62, 0xFC,
+ 0xFC, 0xDB, 0xAA, 0xA1, 0x95, 0x9C, 0x8C, 0x88,
+ 0x82, 0x83, 0x83, 0x8C, 0x88, 0xAE, 0xB9, 0xFB,
+ 0xFC, 0xFC, 0xFC, 0x3C, 0x3B, 0x72, 0x38, 0x33,
+ 0x33, 0x33, 0x31, 0x33, 0x31, 0x31, 0x31, 0x31,
+ 0x33, 0x33, 0x38, 0x33, 0x72, 0x3B, 0x44, 0x2E,
+ 0x41, 0x2E, 0x2E, 0x2D, 0x43, 0x4B, 0x5B, 0x63,
+ 0xCB, 0xCC, 0x63, 0x5D, 0x51, 0x49, 0x47, 0x49,
+ 0x5C, 0x58, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58,
+ 0x58, 0x58, 0x57, 0x53, 0x58, 0x5D, 0x5E, 0x55,
+ 0x51, 0x53, 0x58, 0x5E, 0x60, 0x63, 0x64, 0xFC,
+ 0xFC, 0xC0, 0xA6, 0x9D, 0x8B, 0x9C, 0x8C, 0x8C,
+ 0x6E, 0x83, 0x88, 0x8C, 0x8C, 0x8C, 0x83, 0xE8,
+ 0xFB, 0xFC, 0xFC, 0xFC, 0x33, 0x70, 0x70, 0x6F,
+ 0x6F, 0x6F, 0x6F, 0x3A, 0x6F, 0x6D, 0x6F, 0x6F,
+ 0x70, 0x6F, 0x6F, 0x70, 0x6F, 0x32, 0x5A, 0x48,
+ 0x41, 0x2D, 0x2D, 0x2D, 0x2C, 0x41, 0x49, 0x5A,
+ 0x62, 0xCB, 0xCB, 0x63, 0x5D, 0x50, 0x49, 0x4A,
+ 0x5C, 0x58, 0x58, 0x57, 0x55, 0x57, 0x57, 0x57,
+ 0x57, 0x55, 0x56, 0x59, 0x5E, 0x5C, 0x52, 0x53,
+ 0x55, 0x5B, 0x5E, 0x61, 0x63, 0x64, 0x63, 0xFC,
+ 0xE8, 0xBF, 0xA4, 0x99, 0x9C, 0x8C, 0x88, 0x88,
+ 0x6E, 0x88, 0x8C, 0x8C, 0x8C, 0xC2, 0xA6, 0xC4,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0x36, 0x3A, 0x6F, 0x70,
+ 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
+ 0x70, 0x70, 0x70, 0x70, 0x37, 0x32, 0xCD, 0x5E,
+ 0x4C, 0x43, 0x2C, 0x2D, 0x2D, 0x2C, 0x2E, 0x47,
+ 0x57, 0x61, 0x65, 0xCC, 0x63, 0x5C, 0x50, 0x4D,
+ 0x5C, 0x5A, 0x57, 0x55, 0x55, 0x55, 0x58, 0x58,
+ 0x55, 0x54, 0x5B, 0x5E, 0x5D, 0x53, 0x53, 0x55,
+ 0x5D, 0x5E, 0x61, 0x61, 0x61, 0x61, 0x5E, 0xFC,
+ 0xEA, 0xBE, 0xA4, 0x9B, 0x8B, 0x85, 0x8C, 0x6E,
+ 0x8C, 0x8C, 0x8C, 0xA3, 0xAA, 0xA4, 0xA4, 0xE9,
+ 0xFB, 0xFC, 0xFC, 0xFC, 0x36, 0x6D, 0x70, 0x73,
+ 0x70, 0x70, 0x70, 0x73, 0x73, 0x73, 0x73, 0x70,
+ 0x70, 0x70, 0x73, 0x70, 0x37, 0x38, 0xD1, 0xCF,
+ 0x61, 0x4D, 0x44, 0x2C, 0x2D, 0x2E, 0x2C, 0x2E,
+ 0x3E, 0x56, 0x61, 0xCB, 0xCC, 0x62, 0x5B, 0x57,
+ 0x59, 0x58, 0x55, 0x54, 0x54, 0x55, 0x58, 0x58,
+ 0x58, 0x5B, 0x5E, 0x5B, 0x53, 0x55, 0x55, 0x5C,
+ 0x5E, 0x61, 0x61, 0x60, 0x5D, 0x5A, 0x4E, 0xFC,
+ 0xFC, 0xEA, 0xAA, 0x9C, 0x8A, 0x85, 0x82, 0x8C,
+ 0x8C, 0xA8, 0xEB, 0xA8, 0xA4, 0xA4, 0xAA, 0xFC,
+ 0xFC, 0xFC, 0x64, 0xFB, 0x39, 0x31, 0x72, 0x78,
+ 0x73, 0x78, 0x73, 0x74, 0x74, 0x74, 0x74, 0x73,
+ 0x78, 0x70, 0x73, 0x73, 0x33, 0xCC, 0xD2, 0xD1,
+ 0xCE, 0x62, 0x53, 0x3F, 0x2D, 0x2D, 0x41, 0x2C,
+ 0x2E, 0x3E, 0x56, 0x62, 0xCB, 0xCB, 0x61, 0x5D,
+ 0x54, 0x54, 0x54, 0x54, 0x56, 0x58, 0x58, 0x58,
+ 0x5C, 0x5E, 0x5A, 0x55, 0x58, 0x58, 0x5B, 0x5E,
+ 0x61, 0x5E, 0x5D, 0x5A, 0x52, 0x55, 0xCD, 0xFC,
+ 0xFC, 0x34, 0xC9, 0xE8, 0xA8, 0xAE, 0xC2, 0xE8,
+ 0xC3, 0xA6, 0xA7, 0xA6, 0xAA, 0x78, 0x2E, 0x42,
+ 0xFC, 0xFC, 0xD2, 0x64, 0xF8, 0x31, 0x72, 0x73,
+ 0x73, 0x73, 0x73, 0x74, 0x75, 0x75, 0x74, 0x73,
+ 0x73, 0x73, 0x73, 0x72, 0x33, 0x5C, 0x64, 0xD2,
+ 0xD1, 0xCF, 0x63, 0x54, 0x3F, 0x2C, 0x41, 0x41,
+ 0x2C, 0x2E, 0x47, 0x58, 0x63, 0xCB, 0xCB, 0x62,
+ 0x52, 0x53, 0x53, 0x56, 0x58, 0x58, 0x5A, 0x5B,
+ 0x5E, 0x5A, 0x57, 0x58, 0x58, 0x58, 0x60, 0x60,
+ 0x5D, 0x5A, 0x55, 0x4E, 0x64, 0xD2, 0xD1, 0xFC,
+ 0xFC, 0x41, 0x3E, 0xC1, 0xC0, 0xA3, 0xA6, 0xA7,
+ 0xA7, 0xA9, 0xAA, 0xB8, 0x2E, 0x3F, 0x2C, 0x41,
+ 0xFC, 0xFC, 0xF7, 0xCE, 0xCD, 0x36, 0x72, 0x73,
+ 0x74, 0x75, 0x78, 0x75, 0x75, 0x75, 0x74, 0x74,
+ 0x74, 0x74, 0x78, 0x72, 0x6D, 0x49, 0x59, 0xCB,
+ 0xD1, 0xD1, 0xD2, 0xCB, 0x56, 0x3F, 0x2C, 0x41,
+ 0x40, 0x2D, 0x2E, 0x49, 0x5B, 0x64, 0xCC, 0x64,
+ 0x51, 0x53, 0x53, 0x55, 0x58, 0x59, 0x5B, 0x5E,
+ 0x59, 0x58, 0x58, 0x58, 0x55, 0x60, 0x60, 0x5C,
+ 0x5A, 0x53, 0x5B, 0xD0, 0xD3, 0xD3, 0xD3, 0xFB,
+ 0xFC, 0x40, 0x41, 0x45, 0xC4, 0xC0, 0xBE, 0xBE,
+ 0xC1, 0xC0, 0x3C, 0x47, 0x2E, 0x21, 0x22, 0x20,
+ 0x65, 0xFC, 0xFC, 0xFC, 0xFC, 0x6D, 0x72, 0x75,
+ 0x78, 0x76, 0x75, 0x79, 0x76, 0x76, 0x76, 0x76,
+ 0x75, 0x75, 0x75, 0x72, 0x6D, 0x2E, 0x48, 0x5D,
+ 0xCE, 0xD1, 0xD4, 0xD3, 0xCB, 0x56, 0x43, 0x2C,
+ 0x42, 0x43, 0x2E, 0x2E, 0x4A, 0x5D, 0x64, 0x64,
+ 0x50, 0x52, 0x56, 0x58, 0x5C, 0x5D, 0x5E, 0x5D,
+ 0x5A, 0x58, 0x58, 0x55, 0x61, 0x60, 0x58, 0x58,
+ 0x4E, 0x61, 0xD1, 0xD4, 0xD4, 0xD1, 0xEE, 0xFC,
+ 0xFC, 0x2B, 0x29, 0x2E, 0x3F, 0xB0, 0xAD, 0x81,
+ 0x46, 0x2D, 0x46, 0x2C, 0x24, 0x22, 0x22, 0x23,
+ 0x25, 0xFC, 0xFC, 0xFC, 0xFC, 0x6E, 0x73, 0x76,
+ 0x76, 0x79, 0x79, 0x79, 0x76, 0x76, 0x79, 0x76,
+ 0x79, 0x79, 0x79, 0x74, 0x3F, 0x41, 0x2C, 0x48,
+ 0x5F, 0xCF, 0xD5, 0xD7, 0xD6, 0xCD, 0x57, 0x40,
+ 0x2E, 0x3F, 0x44, 0x2E, 0x41, 0x4C, 0x60, 0x61,
+ 0x51, 0x53, 0x58, 0x5C, 0x5D, 0x5E, 0x5D, 0x5C,
+ 0x58, 0x57, 0x54, 0x5F, 0x5E, 0x55, 0x55, 0x52,
+ 0x64, 0xD4, 0xD5, 0xD4, 0xD1, 0x5D, 0xFA, 0xFB,
+ 0xF4, 0x21, 0x24, 0x41, 0x40, 0x44, 0x2E, 0x2E,
+ 0x42, 0x41, 0x2A, 0x24, 0x22, 0x22, 0x22, 0x22,
+ 0x23, 0xD9, 0xFC, 0xFC, 0xFC, 0xFC, 0xE5, 0xB8,
+ 0x8F, 0x8F, 0x7A, 0x8F, 0x7A, 0x8F, 0x7A, 0x8F,
+ 0x8F, 0x8F, 0xB8, 0xE5, 0x3F, 0x3E, 0x43, 0x2C,
+ 0x48, 0x61, 0xD1, 0xD7, 0xD9, 0xD7, 0xD0, 0x57,
+ 0x41, 0x2E, 0x3E, 0x44, 0x2D, 0x40, 0x52, 0x5D,
+ 0x53, 0x55, 0x59, 0x5D, 0x5E, 0x5E, 0x5D, 0x5A,
+ 0x57, 0x53, 0x5E, 0x5E, 0x54, 0x53, 0x54, 0x65,
+ 0xD5, 0xD6, 0xD4, 0xCE, 0x53, 0xFB, 0xF9, 0xFC,
+ 0x24, 0x22, 0x23, 0x23, 0x41, 0x42, 0x2E, 0x40,
+ 0x2B, 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x23, 0x23, 0xFC, 0xFC, 0xFC, 0xFC, 0xE7, 0xBD,
+ 0xB5, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0xB5, 0xC6, 0xEB, 0x2D, 0x47, 0x4A, 0x47,
+ 0x2C, 0x3E, 0x61, 0xD4, 0xDC, 0xDC, 0xDA, 0xCF,
+ 0x54, 0x41, 0x41, 0x3E, 0x45, 0x2C, 0x3F, 0x4A,
+ 0x58, 0x5A, 0x5C, 0x5F, 0x60, 0x5E, 0x5D, 0x57,
+ 0x51, 0x5D, 0x5D, 0x51, 0x53, 0x53, 0xCB, 0xD5,
+ 0xD6, 0xD5, 0x63, 0x55, 0xFC, 0xFC, 0xFC, 0x2C,
+ 0x23, 0x22, 0x23, 0x22, 0x20, 0x2D, 0x2C, 0x26,
+ 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x21, 0xF0, 0xFC, 0xFC, 0xFC, 0xE2, 0xC6,
+ 0xB5, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0xC7, 0xE3, 0x3E, 0x2E, 0x49, 0x52,
+ 0x4C, 0x41, 0x44, 0x62, 0xD6, 0xDE, 0xDE, 0xD9,
+ 0xD0, 0x51, 0x2E, 0x40, 0x47, 0x44, 0x2C, 0x42,
+ 0x5D, 0x5D, 0x5F, 0x60, 0x60, 0x5D, 0x57, 0x51,
+ 0x58, 0x5D, 0x4E, 0x52, 0x55, 0x64, 0xD5, 0xD6,
+ 0xD4, 0x61, 0x59, 0x6B, 0xFC, 0xFC, 0xFC, 0x21,
+ 0x23, 0x22, 0x23, 0x22, 0x23, 0x21, 0x23, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x21, 0x24, 0xFC, 0xFC, 0xFC, 0xE2, 0xC7,
+ 0xB5, 0x90, 0x93, 0x93, 0x93, 0x90, 0x93, 0x93,
+ 0x90, 0xB5, 0xC8, 0xE4, 0x5F, 0x45, 0x2E, 0x4D,
+ 0x57, 0x57, 0x44, 0x43, 0x63, 0xDA, 0xDF, 0xDF,
+ 0xD9, 0xCE, 0x4C, 0x2C, 0x3F, 0x3E, 0x40, 0x40,
+ 0x60, 0x5E, 0x61, 0x61, 0x5E, 0x5B, 0x53, 0x52,
+ 0x5C, 0x52, 0x52, 0x55, 0x61, 0xD4, 0xD5, 0xD1,
+ 0x5E, 0x5B, 0x5C, 0xFB, 0xFC, 0xFC, 0x2A, 0x21,
+ 0x23, 0x22, 0x23, 0x22, 0x22, 0x22, 0x23, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0xFB, 0xFC, 0xFC, 0xB3, 0xC8,
+ 0xB5, 0x90, 0x92, 0xB5, 0x93, 0x93, 0xB5, 0x93,
+ 0x92, 0xB5, 0xC8, 0xB9, 0xD0, 0x5E, 0x44, 0x40,
+ 0x52, 0x58, 0x57, 0x48, 0x40, 0x63, 0xD9, 0xE0,
+ 0xE0, 0xD9, 0xCB, 0x49, 0x2D, 0x3F, 0x45, 0x3F,
+ 0x63, 0x61, 0x62, 0x60, 0x5E, 0x55, 0x4D, 0x59,
+ 0x53, 0x4E, 0x54, 0x5D, 0xD2, 0xD4, 0xD2, 0x5E,
+ 0x5C, 0x5D, 0xFC, 0xFC, 0xFC, 0xF8, 0x29, 0x23,
+ 0x23, 0x23, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x23, 0x22, 0x22, 0x23, 0x23, 0x23, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0xF0, 0xFC, 0xFC, 0xB3, 0xC7,
+ 0xB5, 0x93, 0xB5, 0x93, 0x93, 0x91, 0x93, 0x93,
+ 0x91, 0xB5, 0xC7, 0xAD, 0xD6, 0xD2, 0x5E, 0x3F,
+ 0x3F, 0x57, 0x57, 0x58, 0x4A, 0x41, 0x64, 0xDC,
+ 0xF1, 0xDF, 0xDA, 0x61, 0x45, 0x2E, 0x43, 0x47,
+ 0xCB, 0x63, 0x62, 0x5F, 0x58, 0x51, 0x53, 0x54,
+ 0x4C, 0x52, 0x5C, 0xCD, 0xD3, 0xD2, 0x60, 0x5D,
+ 0x5D, 0xFB, 0xFC, 0xFC, 0xFC, 0xDB, 0x49, 0x24,
+ 0x21, 0x23, 0x23, 0x22, 0x26, 0x26, 0x2A, 0x24,
+ 0x22, 0x23, 0x22, 0x21, 0x24, 0x26, 0x26, 0x2A,
+ 0x29, 0x2B, 0x24, 0x25, 0xFC, 0xFC, 0xB3, 0xC5,
+ 0x91, 0x91, 0x92, 0x91, 0x92, 0x92, 0x93, 0x93,
+ 0x91, 0x93, 0xC6, 0xAD, 0xDC, 0xD9, 0xD4, 0x60,
+ 0x43, 0x45, 0x58, 0x58, 0x57, 0x4B, 0x43, 0xCC,
+ 0xDD, 0xF1, 0xD8, 0xD5, 0x5D, 0x43, 0x41, 0x47,
+ 0xCD, 0x63, 0x62, 0x5D, 0x54, 0x4C, 0x55, 0x4B,
+ 0x51, 0x58, 0x62, 0xD0, 0xD0, 0x62, 0x5D, 0x5D,
+ 0x67, 0xFC, 0xFC, 0xFC, 0xFC, 0x58, 0x4E, 0x28,
+ 0x2A, 0x20, 0x23, 0x22, 0x23, 0x2A, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x23, 0x25, 0x2A, 0x2E, 0x2D,
+ 0x2E, 0x2E, 0x2E, 0x23, 0xFA, 0xFC, 0xB2, 0xBD,
+ 0xB5, 0x90, 0x91, 0x93, 0x92, 0x90, 0x91, 0x93,
+ 0x92, 0x91, 0xBD, 0xAD, 0xDE, 0xE0, 0xD8, 0xD7,
+ 0x61, 0x40, 0x48, 0x58, 0x58, 0x58, 0x48, 0x44,
+ 0xCF, 0xDE, 0xE0, 0xDD, 0xD0, 0x52, 0x41, 0x45,
+ 0xCD, 0x63, 0x61, 0x58, 0x4D, 0x51, 0x4C, 0x4B,
+ 0x54, 0x5D, 0xCC, 0xCE, 0x63, 0x61, 0x5D, 0x5D,
+ 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, 0x4B, 0x27, 0x21,
+ 0x22, 0x22, 0x23, 0x22, 0x22, 0x24, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x20,
+ 0x27, 0x2B, 0x41, 0x2B, 0x23, 0xFC, 0xB2, 0xB6,
+ 0x93, 0x90, 0x92, 0xB5, 0x92, 0x90, 0xB5, 0x90,
+ 0x92, 0x93, 0xBC, 0xAD, 0xDC, 0xF1, 0xF3, 0xF0,
+ 0xD9, 0x61, 0x41, 0x4A, 0x58, 0x57, 0x57, 0x44,
+ 0x49, 0xD2, 0xDD, 0xD8, 0xDA, 0x63, 0x4A, 0x45,
+ 0xCC, 0x63, 0x5E, 0x52, 0x4B, 0x4C, 0x49, 0x51,
+ 0x5C, 0x61, 0xCD, 0x65, 0x63, 0x5E, 0x4E, 0xCF,
+ 0xFB, 0xFB, 0xF0, 0xFC, 0xD2, 0x2A, 0x22, 0x23,
+ 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x23, 0x22, 0x26, 0x41, 0x27, 0xF9, 0x81, 0xB7,
+ 0xB5, 0x91, 0x92, 0xB5, 0x91, 0xB5, 0x93, 0xB5,
+ 0x93, 0xB6, 0xB7, 0xB9, 0xCB, 0xD8, 0xF3, 0xF2,
+ 0xF2, 0xDB, 0x61, 0x2D, 0x51, 0x58, 0x57, 0x58,
+ 0x41, 0x51, 0xD4, 0xDB, 0xDC, 0xD1, 0x5B, 0x4C,
+ 0xCB, 0x62, 0x59, 0x4C, 0x4A, 0x49, 0x4B, 0x55,
+ 0x60, 0x64, 0xCC, 0x64, 0x5E, 0x55, 0x60, 0xE1,
+ 0xFB, 0xF8, 0xFC, 0xFC, 0x21, 0x22, 0x22, 0x23,
+ 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x23, 0x22, 0x21, 0x24, 0x2D, 0x21, 0xB4, 0xBB,
+ 0xB6, 0xB5, 0xB6, 0xB7, 0xB7, 0xB7, 0xB7, 0xB6,
+ 0xB6, 0xB6, 0xBB, 0xB9, 0x45, 0xCB, 0xDF, 0xF3,
+ 0xF3, 0xF3, 0xDB, 0x5E, 0x2C, 0x51, 0x58, 0x58,
+ 0x52, 0x2D, 0x5C, 0xD4, 0xD9, 0xD5, 0x63, 0x58,
+ 0x64, 0x60, 0x53, 0x49, 0x4A, 0x49, 0x52, 0x5C,
+ 0x63, 0xCD, 0xCD, 0x63, 0x5C, 0x4E, 0x65, 0xFC,
+ 0xFC, 0xF5, 0xFC, 0xD2, 0x23, 0x22, 0x22, 0x23,
+ 0x22, 0x22, 0x23, 0x22, 0x22, 0x21, 0x22, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x23, 0x22, 0x21, 0x22, 0x25, 0x29, 0xB3, 0xC7,
+ 0xB5, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
+ 0xB6, 0xB5, 0xC7, 0xAD, 0x57, 0x3F, 0xCB, 0xF0,
+ 0xF3, 0xF3, 0xF2, 0xD9, 0x58, 0x41, 0x4C, 0x58,
+ 0x57, 0x47, 0x42, 0x62, 0xD4, 0xD4, 0xCC, 0x60,
+ 0x63, 0x5D, 0x50, 0x47, 0x48, 0x4B, 0x58, 0x60,
+ 0xCC, 0xCE, 0xCD, 0x60, 0x53, 0x5C, 0x62, 0xFB,
+ 0xF9, 0xFC, 0xFC, 0x21, 0x23, 0x22, 0x22, 0x23,
+ 0x22, 0x22, 0x23, 0x23, 0x23, 0x21, 0x22, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, 0x81, 0xC7,
+ 0xB7, 0xB7, 0xBC, 0xB7, 0xBC, 0xBC, 0xBC, 0xB7,
+ 0xB7, 0xB7, 0xC8, 0x80, 0x58, 0x57, 0x40, 0xCE,
+ 0xF3, 0xF2, 0xF2, 0xF0, 0xD5, 0x4C, 0x3F, 0x4B,
+ 0x52, 0x50, 0x2D, 0x4B, 0x64, 0xD2, 0xCC, 0x61,
+ 0x60, 0x58, 0x4A, 0x47, 0x47, 0x4C, 0x59, 0x64,
+ 0xD0, 0xD0, 0x64, 0x59, 0x49, 0x5D, 0xFB, 0xFC,
+ 0xD9, 0xFC, 0xD6, 0x23, 0x22, 0x22, 0x22, 0x23,
+ 0x22, 0x22, 0x23, 0x23, 0x21, 0x21, 0x22, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x23, 0x22, 0x23, 0x23, 0x22, 0x23, 0xB4, 0xC8,
+ 0xBD, 0xB7, 0xBD, 0xBC, 0xBD, 0xC5, 0xBC, 0xC5,
+ 0xBC, 0xBD, 0xC7, 0xAC, 0x58, 0x57, 0x58, 0x2C,
+ 0xD1, 0xF0, 0xF3, 0xF3, 0xE0, 0xCD, 0x45, 0x3E,
+ 0x48, 0x4B, 0x3F, 0x41, 0x56, 0x64, 0x65, 0x62,
+ 0x5D, 0x52, 0x47, 0x48, 0x48, 0x53, 0x60, 0xCC,
+ 0xD2, 0xD0, 0x63, 0x52, 0x4E, 0x53, 0xFB, 0xFB,
+ 0xFC, 0xFC, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23,
+ 0x22, 0x22, 0x23, 0x23, 0x20, 0x21, 0x22, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x23, 0x22, 0x23, 0x22, 0x23, 0x22, 0xB4, 0xC7,
+ 0xC5, 0xBC, 0xC5, 0xBD, 0xC5, 0xC5, 0xBD, 0xC5,
+ 0xBC, 0xC6, 0xC7, 0xB9, 0x58, 0x57, 0x58, 0x57,
+ 0x2D, 0xD4, 0xF1, 0xF2, 0xF0, 0xD9, 0x5D, 0x47,
+ 0x48, 0x3F, 0x42, 0x2C, 0x48, 0x5C, 0x5F, 0x60,
+ 0x58, 0x50, 0x47, 0x4A, 0x49, 0x55, 0x63, 0xD0,
+ 0xD2, 0xCD, 0x5D, 0x49, 0x4E, 0xE1, 0xFC, 0xF0,
+ 0xFC, 0xF8, 0x22, 0x22, 0x22, 0x23, 0x22, 0x23,
+ 0x22, 0x22, 0x23, 0x20, 0x21, 0x21, 0x22, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x22,
+ 0x23, 0x22, 0x23, 0x23, 0x23, 0x22, 0xC4, 0xC8,
+ 0xBD, 0xBD, 0xC6, 0xBD, 0xC6, 0xC6, 0xC5, 0xC6,
+ 0xBD, 0xC6, 0xC7, 0xE4, 0x54, 0x57, 0x58, 0x57,
+ 0x57, 0x43, 0xD7, 0xE0, 0xF1, 0xD8, 0xCD, 0x4B,
+ 0x4A, 0x47, 0x42, 0x2C, 0x3F, 0x4D, 0x58, 0x5C,
+ 0x52, 0x4B, 0x48, 0x4B, 0x4A, 0x58, 0xCB, 0xD3,
+ 0xD2, 0xCD, 0x58, 0x47, 0x4A, 0xFC, 0xFC, 0xFB,
+ 0xFC, 0x2B, 0x22, 0x22, 0x22, 0x23, 0x22, 0x23,
+ 0x22, 0x22, 0x23, 0x26, 0x21, 0x21, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
+ 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0xE5, 0xC8,
+ 0xBA, 0xC5, 0xC6, 0xC6, 0xC6, 0xC7, 0xC6, 0xC7,
+ 0xC5, 0xC6, 0xC8, 0xE5, 0x2E, 0x54, 0x58, 0x57,
+ 0x57, 0x4C, 0x4D, 0xDA, 0xD8, 0xD8, 0xD4, 0x5C,
+ 0x4B, 0x4B, 0x3F, 0x42, 0x44, 0x4A, 0x51, 0x58,
+ 0x4B, 0x48, 0x4B, 0x51, 0x4D, 0x5F, 0xD0, 0xD1,
+ 0xD0, 0x64, 0x51, 0x44, 0x6B, 0xFC, 0xFB, 0xFC,
+ 0xFC, 0x21, 0x23, 0x22, 0x22, 0x23, 0x22, 0x23,
+ 0x22, 0x22, 0x23, 0x26, 0x21, 0x23, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
+ 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0xE5, 0xED,
+ 0xE7, 0xBA, 0xC8, 0xC6, 0xC6, 0xC6, 0xC6, 0xC7,
+ 0xC7, 0xE5, 0xED, 0xE6, 0x61, 0x41, 0x52, 0x58,
+ 0x58, 0x57, 0x45, 0x5E, 0xD7, 0xDD, 0xD5, 0x60,
+ 0x4B, 0x4C, 0x48, 0x4D, 0x4D, 0x50, 0x4D, 0x56,
+ 0x4A, 0x3E, 0x53, 0x53, 0x52, 0x63, 0xD3, 0xD0,
+ 0xCE, 0x60, 0x4A, 0x45, 0xFC, 0xFC, 0xF7, 0xFC,
+ 0xFC, 0x21, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23,
+ 0x22, 0x23, 0x21, 0x2A, 0x20, 0x23, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x23, 0x22, 0x23, 0x22, 0x21, 0x23, 0xEB, 0xF6,
+ 0xF6, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED, 0xED,
+ 0xF6, 0xF6, 0xF6, 0xE6, 0xDB, 0x58, 0x45, 0x4B,
+ 0x58, 0x57, 0x4D, 0x4B, 0x64, 0xD4, 0xD0, 0x5C,
+ 0x48, 0x51, 0x4C, 0x5D, 0x5E, 0x5C, 0x56, 0x59,
+ 0x3E, 0x4A, 0x58, 0x54, 0x52, 0x65, 0xD3, 0xD0,
+ 0xCF, 0x5D, 0x48, 0xFC, 0xFC, 0xFC, 0xFA, 0xFC,
+ 0xFC, 0x21, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23,
+ 0x22, 0x23, 0x21, 0x2A, 0x21, 0x23, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x23, 0x22, 0x23, 0x22, 0x21, 0x4F, 0xE6, 0xC6,
+ 0xC6, 0xBD, 0xC6, 0xBD, 0xBD, 0xBD, 0xBD, 0xC6,
+ 0xC5, 0xBA, 0xC7, 0xE6, 0xF2, 0xD4, 0x49, 0x4B,
+ 0x3E, 0x4D, 0x52, 0x3E, 0x52, 0x63, 0x64, 0x56,
+ 0x48, 0x54, 0x4D, 0x61, 0xCC, 0xCC, 0x60, 0x60,
+ 0x47, 0x4D, 0x5C, 0x53, 0x58, 0xCF, 0xD1, 0xCF,
+ 0xD0, 0x59, 0x45, 0xFC, 0xFC, 0xFC, 0xEF, 0xF9,
+ 0xFC, 0x21, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
+ 0x23, 0x22, 0x23, 0x2A, 0x21, 0x23, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x23, 0x22, 0x23, 0x22, 0x23, 0x4F, 0xE4, 0xB9,
+ 0xAF, 0x80, 0x80, 0x8E, 0x8E, 0x8E, 0x8E, 0x8F,
+ 0x80, 0xB4, 0xB9, 0xE4, 0x7F, 0xDE, 0x61, 0x52,
+ 0x54, 0x48, 0x3F, 0x43, 0x4D, 0x56, 0x59, 0x4B,
+ 0x3E, 0x58, 0x53, 0x61, 0xD3, 0xD4, 0xCF, 0xCD,
+ 0x4C, 0x58, 0x5F, 0x53, 0x5E, 0xD3, 0xD0, 0xCE,
+ 0xCE, 0x52, 0x3F, 0xFC, 0xFC, 0xFC, 0xF7, 0x65,
+ 0xFA, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
+ 0x23, 0x22, 0x21, 0x2A, 0x23, 0x23, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x23, 0x22, 0x23, 0x22, 0x21, 0xB1, 0xE4, 0xE6,
+ 0x7C, 0xB1, 0x7C, 0xB1, 0xB2, 0xB2, 0xB3, 0x3D,
+ 0xB3, 0x3C, 0xE5, 0xB3, 0xB0, 0xF1, 0xD0, 0x58,
+ 0x5D, 0x4D, 0x40, 0x41, 0x48, 0x51, 0x4C, 0x3F,
+ 0x3F, 0x4D, 0x5A, 0x5A, 0xD5, 0xD9, 0xD7, 0xD4,
+ 0x57, 0x5E, 0x61, 0x4C, 0x63, 0xD4, 0xCF, 0xCE,
+ 0xCB, 0x4D, 0x4A, 0xFC, 0xFC, 0xFC, 0xFC, 0xF0,
+ 0xFB, 0x22, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
+ 0x23, 0x22, 0x23, 0x2A, 0x21, 0x23, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x22, 0x23, 0x22, 0x23, 0x23, 0xB1, 0x81, 0x7D,
+ 0x39, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x7C, 0xB2, 0xB0, 0xDF, 0xD2, 0x57,
+ 0x60, 0x59, 0x5B, 0x59, 0x52, 0x4C, 0x4A, 0x40,
+ 0x42, 0x4A, 0x53, 0x4D, 0xD2, 0xDE, 0xDE, 0xD9,
+ 0x5E, 0x5E, 0x60, 0x4A, 0xCD, 0xD1, 0xCF, 0xCE,
+ 0x63, 0x49, 0x5C, 0xFB, 0xE8, 0x89, 0x9F, 0xFC,
+ 0xD6, 0x21, 0x21, 0x23, 0x22, 0x22, 0x23, 0x22,
+ 0x23, 0x22, 0x21, 0x2A, 0x22, 0x23, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x7F, 0xB9,
+ 0x71, 0x6C, 0x38, 0x38, 0x33, 0x33, 0x33, 0x38,
+ 0x38, 0x71, 0xAD, 0xE4, 0xD3, 0xDA, 0xCC, 0x52,
+ 0x63, 0x60, 0xCE, 0xD4, 0xCF, 0x60, 0x4C, 0x40,
+ 0x3F, 0x45, 0x4B, 0x5A, 0xCB, 0xD8, 0xDE, 0xDC,
+ 0x5E, 0x5E, 0x5F, 0x4C, 0xD2, 0xD2, 0xCF, 0xCF,
+ 0x61, 0x45, 0x5E, 0xA7, 0x9D, 0x95, 0x8B, 0x99,
+ 0xFC, 0x41, 0x21, 0x23, 0x23, 0x22, 0x23, 0x22,
+ 0x23, 0x22, 0x23, 0x2A, 0x23, 0x23, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x77, 0x77, 0xF6,
+ 0xFC, 0x7D, 0x7D, 0x7E, 0x7E, 0x7E, 0x7E, 0x7D,
+ 0x7D, 0xFC, 0x47, 0x64, 0xD0, 0xD0, 0x5D, 0x4B,
+ 0x62, 0xCC, 0xD1, 0xDE, 0xDE, 0xD4, 0x5E, 0x43,
+ 0x3F, 0x3E, 0x48, 0x53, 0x58, 0xDB, 0xD8, 0xDC,
+ 0x5E, 0x5E, 0x5E, 0x53, 0xD4, 0xD2, 0xD0, 0xD0,
+ 0x5E, 0x49, 0xA7, 0xA6, 0x89, 0x95, 0x8B, 0x9C,
+ 0x9C, 0xFB, 0xD4, 0x22, 0x22, 0x22, 0x22, 0x23,
+ 0x22, 0x23, 0x23, 0x2A, 0x22, 0x23, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
+ 0x23, 0x22, 0x23, 0x23, 0x98, 0x8C, 0x8C, 0x88,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8,
+ 0xE9, 0x9C, 0x48, 0x5C, 0xD0, 0xCB, 0x48, 0x49,
+ 0x5B, 0xCB, 0xCD, 0xE0, 0xF1, 0xDD, 0xD0, 0x4A,
+ 0x41, 0x47, 0x45, 0x4C, 0x48, 0xD7, 0xDE, 0xDC,
+ 0x5E, 0x5E, 0x5A, 0x58, 0xD1, 0xD0, 0xD0, 0xD2,
+ 0x5C, 0x55, 0xA7, 0xA6, 0x87, 0x86, 0x89, 0x94,
+ 0x9C, 0xA9, 0xFC, 0xF4, 0x22, 0x23, 0x22, 0x23,
+ 0x22, 0x23, 0x22, 0x2A, 0x21, 0x23, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
+ 0x22, 0x23, 0x22, 0x23, 0xA4, 0x89, 0x8C, 0xAA,
+ 0xFB, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF7,
+ 0x85, 0x88, 0x8D, 0x59, 0x64, 0x63, 0x47, 0x3E,
+ 0x4C, 0x60, 0x61, 0xE0, 0xF0, 0xDF, 0xD9, 0x5D,
+ 0x2E, 0x3E, 0x3E, 0x47, 0x4D, 0xCD, 0xDE, 0xDC,
+ 0x5D, 0x5C, 0x51, 0x5D, 0xD1, 0xD2, 0xD2, 0xD4,
+ 0x5A, 0xBE, 0xA7, 0x98, 0x8A, 0x8A, 0xA0, 0x8B,
+ 0x86, 0x86, 0xF7, 0xFC, 0xF7, 0x26, 0x23, 0x23,
+ 0x22, 0x22, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
+ 0x22, 0x21, 0x21, 0x21, 0xA1, 0x98, 0x9F, 0xBF,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xA7,
+ 0x8C, 0x86, 0x8D, 0x59, 0x5E, 0x5D, 0x3F, 0x3E,
+ 0x47, 0x53, 0x63, 0xD9, 0xF0, 0xF1, 0xDE, 0xD0,
+ 0x43, 0x3E, 0x47, 0x45, 0x4A, 0x5B, 0xDC, 0xDA,
+ 0x5D, 0x59, 0x49, 0x5F, 0xD1, 0xD2, 0xD3, 0xB9,
+ 0xA5, 0xA7, 0x98, 0x9B, 0x96, 0x9D, 0x89, 0x89,
+ 0x8B, 0x9C, 0x9D, 0xFC, 0xFC, 0xFC, 0x26, 0x22,
+ 0x23, 0x23, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
+ 0x22, 0x22, 0x29, 0x2D, 0x99, 0x99, 0xA2, 0xAA,
+ 0xC4, 0xFB, 0xFC, 0xFC, 0xFC, 0xF6, 0xBF, 0xA2,
+ 0x9C, 0x9C, 0x8E, 0xDC, 0xCD, 0x51, 0x41, 0x3E,
+ 0x45, 0x49, 0x58, 0xCD, 0xE0, 0xE0, 0xD8, 0xDA,
+ 0x4C, 0x4A, 0x45, 0x45, 0x48, 0x47, 0xDA, 0xDA,
+ 0x5C, 0x58, 0x44, 0x69, 0xA9, 0x98, 0xA4, 0xA6,
+ 0xA1, 0xA4, 0x99, 0x9E, 0x9D, 0x8B, 0x8A, 0x97,
+ 0x87, 0x9A, 0x8A, 0xC2, 0xFC, 0xFC, 0xFC, 0x4D,
+ 0x21, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x22,
+ 0x21, 0x22, 0x2D, 0x34, 0xA4, 0xA2, 0xA2, 0xA9,
+ 0xBF, 0xC0, 0xC3, 0xC1, 0xC0, 0xBE, 0xA6, 0x9D,
+ 0x99, 0x87, 0xA2, 0xF1, 0xDC, 0x64, 0x42, 0x45,
+ 0x47, 0x3E, 0x49, 0x4C, 0xDD, 0xDF, 0xD8, 0xDB,
+ 0x5E, 0x4C, 0x48, 0x45, 0x45, 0x41, 0xD1, 0xD6,
+ 0x5A, 0x55, 0x3F, 0xA7, 0xA1, 0x98, 0x9F, 0x99,
+ 0x9F, 0x9D, 0x9A, 0x95, 0x8B, 0x97, 0x89, 0x8A,
+ 0x88, 0x94, 0x9C, 0x8C, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xF4, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x22, 0x23,
+ 0x23, 0x23, 0x2C, 0x2C, 0xA8, 0xA2, 0xA4, 0xA4,
+ 0xA9, 0xAA, 0xAA, 0xAA, 0xA9, 0xA6, 0x98, 0x9C,
+ 0x8B, 0x88, 0x98, 0x8D, 0xD8, 0xD6, 0x4E, 0x47,
+ 0x47, 0x49, 0x47, 0x3F, 0xDA, 0xDD, 0xDE, 0xDD,
+ 0xCC, 0x4A, 0x4B, 0x3E, 0x45, 0x43, 0x61, 0xD4,
+ 0x56, 0x51, 0x44, 0xA4, 0x9B, 0x8B, 0x9C, 0x9A,
+ 0xA0, 0xA2, 0x98, 0x98, 0x8B, 0x8B, 0x98, 0x98,
+ 0x84, 0x8B, 0x94, 0x8A, 0xA4, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xF2, 0x21, 0x22, 0x21, 0x22, 0x23, 0x22,
+ 0x22, 0x22, 0x23, 0x22, 0x23, 0x23, 0x23, 0x23,
+ 0x23, 0x22, 0x2C, 0x2D, 0xC0, 0xA4, 0xA2, 0xA4,
+ 0xA4, 0xA6, 0xA6, 0xA6, 0xA4, 0xA2, 0x9F, 0x89,
+ 0x8B, 0x9C, 0x9C, 0x8B, 0x68, 0xDB, 0x5F, 0x4B,
+ 0x3E, 0x49, 0x4B, 0x3E, 0xCC, 0xDA, 0xDC, 0xDD,
+ 0xD3, 0x49, 0x52, 0x48, 0x45, 0x45, 0x53, 0xD0,
+ 0x51, 0x4A, 0x44, 0xA4, 0x9B, 0x8B, 0x9C, 0xA0,
+ 0x9B, 0x86, 0x89, 0x98, 0x89, 0x8A, 0x96, 0x8A,
+ 0x9C, 0x89, 0x89, 0x9C, 0x8C, 0xF6, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0x21, 0x22, 0x21, 0x22, 0x23, 0x22,
+ 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x23,
+ 0x22, 0x21, 0x2B, 0x34, 0xC0, 0xA8, 0xA4, 0xA2,
+ 0xA2, 0x98, 0xA1, 0xA0, 0x98, 0x9F, 0x95, 0x8A,
+ 0x94, 0xA1, 0x8A, 0x84, 0x9B, 0x68, 0xCC, 0x49,
+ 0x4A, 0x47, 0x4C, 0x4B, 0x51, 0xD3, 0xDA, 0xDC,
+ 0xD5, 0x56, 0x56, 0x4A, 0x3E, 0x45, 0x48, 0x63,
+ 0x4A, 0x47, 0x3E, 0xA7, 0x98, 0x9D, 0x9E, 0x8B,
+ 0x95, 0x9B, 0x89, 0x86, 0x9B, 0x8B, 0x89, 0x84,
+ 0x9A, 0xA1, 0x95, 0x9A, 0x8C, 0xA4, 0xFC, 0xFC,
+ 0xFC, 0xFA, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
+ 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x23,
+ 0x21, 0x23, 0x2C, 0xF6, 0xBF, 0xA9, 0xA2, 0x99,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9B, 0x87, 0x8B,
+ 0x9C, 0x86, 0x9C, 0x8A, 0x87, 0x87, 0x89, 0x51,
+ 0x54, 0x47, 0x4B, 0x50, 0x4B, 0xCF, 0xD6, 0xDC,
+ 0xD5, 0x60, 0x54, 0x52, 0x48, 0x45, 0x40, 0x5A,
+ 0x45, 0x43, 0x47, 0xA7, 0x98, 0x9B, 0x95, 0x95,
+ 0x9A, 0x87, 0x98, 0x98, 0x8A, 0x86, 0x87, 0x9E,
+ 0x9B, 0x95, 0x9D, 0x9D, 0x99, 0x85, 0xA6, 0xFA,
+ 0xF2, 0x21, 0x23, 0x22, 0x21, 0x22, 0x23, 0x22,
+ 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x22, 0x22,
+ 0x21, 0x24, 0xFB, 0xF7, 0xBF, 0xA6, 0xA2, 0x99,
+ 0x97, 0x89, 0x86, 0x89, 0x9C, 0x96, 0x9E, 0x94,
+ 0x89, 0x99, 0x98, 0x89, 0x9E, 0x9B, 0x89, 0x8B,
+ 0x58, 0x4B, 0x4A, 0x52, 0x48, 0xCC, 0xD3, 0xDA,
+ 0xD3, 0x65, 0x4C, 0x58, 0x49, 0x3E, 0x2E, 0x4D,
+ 0x40, 0x41, 0x45, 0xA9, 0xA1, 0x9B, 0x9E, 0x9C,
+ 0x95, 0x8A, 0x94, 0x89, 0x96, 0x87, 0x9C, 0x9A,
+ 0x84, 0x9D, 0x9C, 0x9E, 0x9A, 0x9C, 0x9D, 0xBB,
+ 0x23, 0x23, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22,
+ 0x22, 0x22, 0x22, 0x23, 0x22, 0x21, 0x23, 0x23,
+ 0x24, 0xFC, 0xFC, 0xF6, 0xBF, 0xA6, 0x9F, 0x99,
+ 0x89, 0x95, 0x87, 0x94, 0x9D, 0x9E, 0x97, 0x9E,
+ 0x95, 0x9B, 0x89, 0x95, 0x95, 0x9B, 0x89, 0x87,
+ 0x5D, 0x56, 0x3E, 0x51, 0x3E, 0x60, 0xCF, 0xD3,
+ 0xD2, 0xCD, 0x5C, 0x49, 0x4B, 0x3E, 0x2C, 0x48,
+ 0x3E, 0x43, 0x3E, 0xA9, 0xA1, 0x9B, 0x97, 0x94,
+ 0x95, 0x9A, 0x9C, 0x87, 0x87, 0x9B, 0x9C, 0x95,
+ 0x9D, 0x89, 0x9A, 0x89, 0x9E, 0x9E, 0x8C, 0xA6,
+ 0x20, 0x23, 0x23, 0x22, 0x23, 0x22, 0x23, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x21, 0x21, 0x20, 0x40,
+ 0xFC, 0xFC, 0xFC, 0xEC, 0xBE, 0xA4, 0x9F, 0x99,
+ 0x95, 0x9F, 0xA0, 0x88, 0x9D, 0x8B, 0x97, 0x95,
+ 0x87, 0x95, 0x96, 0x95, 0x97, 0x94, 0x94, 0x98,
+ 0xD3, 0x4C, 0x47, 0x4D, 0x42, 0x4C, 0x60, 0xCC,
+ 0xCE, 0xD0, 0x65, 0x4B, 0x47, 0x44, 0x2B, 0x45,
+ 0x4B, 0x47, 0x49, 0xA7, 0xA1, 0x9A, 0x97, 0x89,
+ 0x95, 0x97, 0x97, 0x9E, 0x89, 0x95, 0x89, 0x9C,
+ 0x87, 0x95, 0x97, 0x99, 0x95, 0x99, 0x9F, 0xA4,
+ 0xC4, 0x21, 0x21, 0x23, 0x21, 0x23, 0x23, 0x23,
+ 0x23, 0x23, 0x23, 0x23, 0x21, 0x20, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xEA, 0xAA, 0xA6, 0xA2, 0x99,
+ 0x8B, 0x9A, 0x95, 0x9E, 0x9E, 0x9A, 0x94, 0x87,
+ 0x94, 0x94, 0x89, 0x94, 0x9B, 0x9B, 0xA7, 0xDC,
+ 0xDB, 0x65, 0x2E, 0x3E, 0x43, 0x44, 0x49, 0x58,
+ 0x63, 0xD3, 0xD3, 0x5E, 0x42, 0x42, 0x2D, 0x40,
+ 0x54, 0x4C, 0x4A, 0xA7, 0xA0, 0x99, 0x9B, 0x94,
+ 0xA0, 0x8A, 0x9B, 0x9D, 0x87, 0x95, 0x94, 0x8B,
+ 0x8A, 0x98, 0x9C, 0x8A, 0x9B, 0x99, 0xA2, 0xA6,
+ 0xBF, 0xEC, 0x2A, 0x20, 0x21, 0x23, 0x21, 0x20,
+ 0x20, 0x20, 0x20, 0x4C, 0xF9, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xEB, 0xAA, 0xA4, 0x9F, 0x9C,
+ 0x8B, 0x9B, 0x88, 0x84, 0x9E, 0x9D, 0x96, 0x94,
+ 0x94, 0x9A, 0x9B, 0x9B, 0xA4, 0xD5, 0xCD, 0xDE,
+ 0xF1, 0xDA, 0x4C, 0x2D, 0x41, 0x2B, 0x42, 0x4C,
+ 0x5E, 0xD4, 0xD7, 0xCD, 0x49, 0x2E, 0x2E, 0x41,
+ 0x5E, 0x57, 0xA7, 0xA6, 0xA7, 0xA4, 0xA2, 0x98,
+ 0x9D, 0x9C, 0xA1, 0x99, 0x9D, 0x88, 0x8B, 0x9C,
+ 0x8A, 0x9C, 0x9C, 0x94, 0x9C, 0x89, 0xA0, 0xA6,
+ 0xAA, 0xEB, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFB, 0xE9, 0xAA, 0xA6, 0xA2, 0x8B,
+ 0x8B, 0x8A, 0x86, 0x9B, 0x9C, 0x98, 0xA0, 0x9B,
+ 0x9B, 0x84, 0xA7, 0xB4, 0x61, 0xD1, 0xD2, 0xE0,
+ 0xF1, 0xDC, 0x61, 0x2D, 0x2E, 0x3F, 0x56, 0x62,
+ 0x5D, 0xD4, 0xD9, 0xD3, 0x54, 0x41, 0x41, 0x44,
+ 0xCB, 0x60, 0x52, 0xA9, 0xA9, 0xA9, 0xA7, 0xA6,
+ 0xA6, 0xA4, 0xA4, 0xA2, 0xA2, 0x9D, 0x95, 0x89,
+ 0x9C, 0x8A, 0x9E, 0x9C, 0x8A, 0x9E, 0xA0, 0xA8,
+ 0xC0, 0xE9, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xE9, 0xAA, 0xA6, 0xA0, 0x99,
+ 0x9C, 0x8B, 0x9A, 0x84, 0x9B, 0x9B, 0x98, 0x98,
+ 0xA9, 0xB9, 0x49, 0x57, 0xCB, 0xD4, 0xD3, 0xF1,
+ 0xD8, 0xDA, 0xCE, 0x3F, 0x41, 0x4B, 0x5D, 0xCB,
+ 0x5E, 0xD6, 0xDB, 0xD6, 0x5D, 0x43, 0x3F, 0x49,
+ 0xD1, 0xCC, 0x4F, 0xDD, 0xC3, 0xBB, 0xBF, 0xAA,
+ 0xAA, 0xA9, 0xAA, 0xA8, 0xA8, 0xA6, 0xA6, 0xA2,
+ 0x9C, 0x9F, 0x9B, 0x9A, 0x9D, 0xA2, 0xA8, 0xAA,
+ 0xC1, 0xEA, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xEA, 0xC0, 0xAA, 0xA6, 0xA2,
+ 0xA2, 0x99, 0xA0, 0xA0, 0xA4, 0xA7, 0xA9, 0xC0,
+ 0x67, 0x49, 0x54, 0x60, 0xD0, 0xD4, 0xCC, 0xDF,
+ 0xD9, 0xD5, 0xD2, 0x3E, 0x47, 0x56, 0x60, 0xCD,
+ 0x5D, 0xD9, 0xD9, 0xD6, 0x61, 0x3F, 0x47, 0x52,
+ 0xD6, 0xD3, 0x62, 0x4D, 0x40, 0x4A, 0x57, 0xCA,
+ 0xC3, 0xC1, 0xC1, 0xC0, 0xBF, 0xBF, 0xAA, 0xAA,
+ 0xA6, 0xA4, 0xA4, 0xA4, 0xA6, 0xA8, 0xBE, 0xC1,
+ 0xC9, 0xEB, 0xFB, 0xFB, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xEB, 0xC3, 0xC0, 0xAA, 0xA8,
+ 0xA6, 0xA6, 0xA6, 0xA9, 0xAA, 0xC0, 0xE8, 0xD0,
+ 0xD2, 0x4C, 0x5E, 0x64, 0xD0, 0xD1, 0x5F, 0xD9,
+ 0xD5, 0xD1, 0xD0, 0x48, 0x52, 0x5C, 0x64, 0xCD,
+ 0x5C, 0xDC, 0xD7, 0xD5, 0x62, 0x3F, 0x4C, 0x53,
+ 0xDA, 0xD7, 0xCE, 0x56, 0x40, 0x4B, 0x52, 0x56,
+ 0xCE, 0xDF, 0x6A, 0xEB, 0xE9, 0xC9, 0xC3, 0xC0,
+ 0xC0, 0xBF, 0xBE, 0xAA, 0xBF, 0xC0, 0xC3, 0xC9,
+ 0xEA, 0xF6, 0xEE, 0x58, 0x57, 0x5E, 0xD6, 0xD0,
+ 0xD2, 0x61, 0xCB, 0xD6, 0xD6, 0xD4, 0xDF, 0xF3,
+ 0xF2, 0xDD, 0xD7, 0xEB, 0xC9, 0xC1, 0xC0, 0xBF,
+ 0xAA, 0xAA, 0xAA, 0xBE, 0xC3, 0xF0, 0xD2, 0xD2,
+ 0xD2, 0x51, 0x62, 0xCC, 0xD0, 0xCC, 0x61, 0xD3,
+ 0xCF, 0xCE, 0xD2, 0x48, 0x5A, 0x61, 0xCC, 0xCE,
+ 0x5F, 0xD9, 0xD5, 0xD1, 0x63, 0x44, 0x56, 0x56,
+ 0xDC, 0xD9, 0xD4, 0x5E, 0x42, 0x4A, 0x4C, 0x57,
+ 0x5D, 0xD8, 0xE0, 0xD8, 0xDC, 0xCB, 0x66, 0xEC,
+ 0xE8, 0xC3, 0xC3, 0xC3, 0xC3, 0xC9, 0xE8, 0xEA,
+ 0xF6, 0x50, 0x3E, 0x58, 0x57, 0x5A, 0xD6, 0xD4,
+ 0xCC, 0x4B, 0x53, 0x5C, 0x64, 0xD1, 0xDF, 0xF3,
+ 0xF1, 0xDE, 0xD9, 0xF6, 0xEB, 0xC9, 0xC1, 0xC1,
+ 0xC0, 0xC0, 0xC1, 0xC9, 0xF0, 0xD6, 0xCD, 0xD6,
+ 0xD3, 0x53, 0xCB, 0xCF, 0xCD, 0x5F, 0x5F, 0xCE,
+ 0xCF, 0xCD, 0xD0, 0x47, 0x5F, 0xCB, 0xCE, 0xCD,
+ 0x63, 0xD6, 0xD3, 0xD1, 0x63, 0x3F, 0x58, 0x58,
+ 0xDB, 0xDC, 0xDA, 0x65, 0x3E, 0x49, 0x49, 0x4D,
+ 0x49, 0xDC, 0xDF, 0xE0, 0xDE, 0xD5, 0x47, 0x47,
+ 0x46, 0x6B, 0xEB, 0xEA, 0xE9, 0xEA, 0xEB, 0xF6,
+ 0xD0, 0x57, 0x57, 0x47, 0x47, 0x5B, 0xD4, 0xD4,
+ 0xCD, 0x44, 0x3E, 0x4B, 0x50, 0x4B, 0x51, 0xD5,
+ 0xDB, 0xD8, 0xDE, 0x4B, 0xF6, 0xF6, 0xEA, 0xE9,
+ 0xE8, 0xEA, 0xEB, 0x67, 0x5E, 0xCC, 0xD6, 0xDC,
+ 0xD5, 0x58, 0xCE, 0xCE, 0x62, 0x50, 0xCC, 0xD3,
+ 0xD2, 0xCD, 0xCD, 0x4B, 0x64, 0xCE, 0xCE, 0x64,
+ 0xCC, 0xD3, 0xD2, 0xD2, 0x61, 0x47, 0x5D, 0x5C,
+ 0xDD, 0xDD, 0xD9, 0xD1, 0x4C, 0x47, 0x49, 0x4A,
+ 0x4B, 0xD1, 0xD8, 0xE0, 0xDF, 0xDD, 0x5D, 0x4A,
+ 0x48, 0x52, 0x51, 0x3F, 0xF6, 0xEC, 0xE0, 0xE0,
+ 0xD3, 0x5E, 0x5F, 0x50, 0x4B, 0x50, 0xCB, 0xCE,
+ 0x64, 0x45, 0x4C, 0x57, 0x57, 0x58, 0x52, 0xD6,
+ 0xD3, 0xDE, 0xDF, 0xD1, 0x3E, 0x4B, 0xF6, 0xF6,
+ 0xEC, 0x66, 0x53, 0x43, 0x56, 0xD1, 0xD9, 0xDE,
+ 0xD4, 0x5E, 0xCE, 0xCC, 0x5B, 0x2C, 0xD4, 0xD5,
+ 0xD2, 0xD0, 0x63, 0x5D, 0xCD, 0xD0, 0xCD, 0x5E,
+ 0xD0, 0xCF, 0xCE, 0xD2, 0x5E, 0x50, 0x60, 0x5D,
+ 0xDE, 0xDD, 0xDC, 0xD7, 0x5D, 0x45, 0x47, 0x3E,
+ 0x4B, 0x5E, 0xDE, 0xDF, 0xE0, 0xD8, 0xCF, 0x3E,
+ 0x45, 0x51, 0x58, 0x42, 0xCB, 0xDA, 0xDE, 0xD8,
+ 0xD2, 0x61, 0xCC, 0xCF, 0xD6, 0xDA, 0xDA, 0xD5,
+ 0xD0, 0x50, 0x44, 0x57, 0x57, 0x58, 0x45, 0xD1,
+ 0xD1, 0xD7, 0xDF, 0xDF, 0xD7, 0xCF, 0x64, 0x60,
+ 0xCE, 0xCE, 0xCE, 0x63, 0xCF, 0xDA, 0xDE, 0xD9,
+ 0xCF, 0x63, 0xCD, 0x63, 0x4D, 0x4B, 0xD6, 0xD5,
+ 0xCE, 0xD3, 0x60, 0xCB, 0xD0, 0xD0, 0x65, 0x47,
+ 0xD0, 0xCC, 0xCC, 0xD1, 0x59, 0x5D, 0x63, 0x5E,
+ 0xDD, 0xDD, 0xDE, 0xDC, 0xCB, 0x40, 0x48, 0x45,
+ 0x3E, 0x3E, 0xD9, 0xDF, 0xE0, 0xDF, 0xDA, 0x51,
+ 0x4C, 0x48, 0x56, 0x4C, 0x5B, 0xD2, 0xDA, 0xDB,
+ 0xCB, 0x5F, 0xD0, 0xCC, 0xDC, 0xF0, 0xF3, 0xE0,
+ 0xDD, 0xCC, 0x41, 0x50, 0x57, 0x57, 0x4B, 0x5D,
+ 0xD3, 0xD1, 0xDE, 0xDF, 0xDE, 0xD7, 0xD0, 0xD0,
+ 0xD5, 0xD6, 0xD6, 0xCE, 0xD7, 0xDC, 0xDA, 0xD5,
+ 0x60, 0x63, 0x64, 0x5E, 0x47, 0x61, 0xD5, 0xD2,
+ 0xCF, 0xD0, 0x59, 0xCD, 0xD1, 0xCF, 0x61, 0x4D,
+ 0xCC, 0xCE, 0xCD, 0xD0, 0x52, 0x61, 0x64, 0x60,
+ 0xDA, 0xDE, 0xDE, 0xDD, 0xD1, 0x4B, 0x4A, 0x45,
+ 0x3E, 0x41, 0xCD, 0xDE, 0xE0, 0xF1, 0xDE, 0x63,
+ 0x4A, 0x4A, 0x4A, 0x4B, 0x50, 0xCB, 0xD4, 0xD7,
+ 0x5E, 0x54, 0x62, 0xD3, 0xD4, 0xF0, 0xF3, 0xF3,
+ 0xF2, 0xDE, 0x61, 0x40, 0x49, 0x56, 0x4D, 0x3E,
+ 0x4B, 0xCE, 0xD9, 0xD8, 0xD9, 0xD5, 0xCF, 0xD2,
+ 0xD6, 0xD6, 0xD1, 0xD1, 0xD7, 0xD5, 0xCF, 0xD0,
+ 0x54, 0x64, 0x63, 0x56, 0x2C, 0xCB, 0xD1, 0xCC,
+ 0xD3, 0xCD, 0x54, 0xCF, 0xD1, 0xCE, 0x5E, 0x5C,
+ 0xCE, 0xCE, 0xCE, 0xCB, 0x4B, 0x63, 0xCC, 0x61,
+ 0xD4, 0xDC, 0xDE, 0xDE, 0xDA, 0x5D, 0x45, 0x45,
+ 0x48, 0x3F, 0x52, 0xD9, 0xD8, 0xDF, 0xDF, 0xD2,
+ 0x52, 0x4B, 0x3E, 0x2E, 0x47, 0x60, 0xCF, 0xD3,
+ 0x59, 0x48, 0x50, 0x5E, 0xCC, 0xDE, 0xF2, 0xF2,
+ 0xF3, 0xF3, 0xDD, 0x5D, 0x3E, 0x48, 0x47, 0x47,
+ 0x58, 0xD1, 0xDA, 0xDA, 0xD5, 0xD1, 0xCD, 0xD2,
+ 0xD3, 0xCF, 0xD3, 0xD1, 0xCD, 0xD3, 0xD2, 0x5E,
+ 0x52, 0x64, 0x60, 0x4B, 0x45, 0x61, 0xCD, 0xD3,
+ 0xD3, 0x64, 0x61, 0xD0, 0xD0, 0x64, 0x45, 0x63,
+ 0xD0, 0xCE, 0xD0, 0x60, 0x56, 0xCB, 0xCC, 0x62,
+ 0xCE, 0xDA, 0xDE, 0xD8, 0xDD, 0xCC, 0x45, 0x49,
+ 0x3E, 0x47, 0x42, 0xD1, 0xDC, 0xD8, 0xD8, 0xD3,
+ 0x5D, 0x4C, 0x49, 0x3F, 0x47, 0x59, 0xCD, 0xCF,
+ 0x59, 0x2E, 0x48, 0x47, 0x52, 0x63, 0xF0, 0xF2,
+ 0xF3, 0xF3, 0xF2, 0xDA, 0x52, 0x4B, 0x52, 0x58,
+ 0x5E, 0x63, 0xD0, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE,
+ 0xCF, 0x65, 0x61, 0xD6, 0xD6, 0xD6, 0xCB, 0x4B,
+ 0x61, 0x62, 0x5D, 0x43, 0x4B, 0x61, 0xD0, 0xD4,
+ 0xD1, 0x61, 0xCE, 0xD2, 0xCD, 0x5E, 0x4A, 0xCE,
+ 0xD0, 0xCC, 0xD0, 0x59, 0x61, 0xCC, 0xCC, 0x62,
+ 0xD1, 0xD5, 0xDE, 0xD8, 0xDD, 0xCF, 0x4B, 0x4A,
+ 0x45, 0x3E, 0x2D, 0xCB, 0xDC, 0xDE, 0xD8, 0xD5,
+ 0x60, 0x54, 0x51, 0x4C, 0x4D, 0x5C, 0xCC, 0xCE,
+ 0x5A, 0x2C, 0x50, 0x53, 0x3E, 0x59, 0xD8, 0xF3,
+ 0xF2, 0xF3, 0xF3, 0xE0, 0x5E, 0x4A, 0x4C, 0x53,
+ 0x5E, 0x63, 0xCC, 0xCC, 0xCC, 0xCD, 0xCF, 0xD3,
+ 0x62, 0x53, 0xD6, 0xD6, 0xD6, 0xD6, 0x5B, 0x48,
+ 0x64, 0x63, 0x59, 0x44, 0x57, 0x63, 0xD2, 0xD3,
+ 0xD0, 0x5E, 0xD0, 0xD1, 0xCB, 0x58, 0x4C, 0xCF,
+ 0xCF, 0xCE, 0xCE, 0x57, 0x63, 0xCC, 0xCD, 0x57,
+};
+
+unsigned char linux_logo_bw[] __initdata = {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
+ 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFE, 0x3F, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xC7, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC3,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF,
+ 0xFB, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFD, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF1,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF,
+ 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xF9, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xCF, 0xC3, 0xF8, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x87, 0x81, 0xF9,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xA7,
+ 0x99, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xF9, 0xF3, 0xBC, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xE3, 0xBC, 0xF9, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0, 0x3C, 0xF9,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xB0,
+ 0x19, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xF9, 0xC0, 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80, 0x01, 0xF8,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x80,
+ 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xF9, 0xC0, 0x21, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xB1, 0x80, 0xEC, 0xC0, 0x1F,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x90, 0x00, 0xE4,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x8C,
+ 0xC0, 0x7C, 0x04, 0x81, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xE3, 0x80, 0x00, 0x7C, 0x40, 0x11, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE3, 0x80, 0x00, 0x7F, 0xD2, 0x29,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0x00, 0x3F,
+ 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0x00,
+ 0x00, 0x3F, 0x80, 0x19, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x1E, 0x00, 0x00, 0x1F, 0x80, 0x19, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x1C, 0x00, 0x00, 0x1E, 0x80, 0x19,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x3C, 0x00, 0x00, 0x1E,
+ 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC, 0x7C, 0x00,
+ 0x00, 0x0F, 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0xF8, 0x00, 0x00, 0x0E, 0x80, 0x11, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0xF8, 0x00, 0x00, 0x06, 0x00, 0x11,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0x00, 0x00, 0x06,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF9, 0xF0, 0x00,
+ 0x00, 0x02, 0x00, 0x09, 0xFF, 0xFF, 0xFF, 0xF1,
+ 0xF0, 0x00, 0x00, 0x02, 0x80, 0x10, 0xFF, 0xFF,
+ 0xFF, 0xF1, 0xE0, 0x00, 0x00, 0x00, 0x97, 0x10,
+ 0xFF, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x00, 0x00,
+ 0xDF, 0xF0, 0xFF, 0xFF, 0xFF, 0xE3, 0xC0, 0x00,
+ 0x00, 0x00, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC7,
+ 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF,
+ 0xFF, 0xC7, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8,
+ 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x00, 0x01,
+ 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x8F, 0x80, 0x00,
+ 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x9F,
+ 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xFF,
+ 0xFF, 0x9F, 0x80, 0x00, 0x00, 0x01, 0x80, 0x18,
+ 0xFF, 0xFF, 0xFF, 0x9E, 0x80, 0x00, 0x00, 0x03,
+ 0xA8, 0x11, 0xFF, 0xFF, 0xFF, 0x9F, 0x80, 0x00,
+ 0x00, 0x02, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x99,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x09, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x01,
+ 0xFF, 0xFF, 0xFE, 0x20, 0x60, 0x00, 0x00, 0x00,
+ 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0x00, 0x30, 0x00,
+ 0x00, 0x00, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x40,
+ 0x38, 0x00, 0x00, 0x00, 0xFE, 0x47, 0xFF, 0xFF,
+ 0x81, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xFC, 0x23,
+ 0xFF, 0xFF, 0x90, 0x00, 0x1E, 0x00, 0x00, 0x00,
+ 0x78, 0x11, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0x80,
+ 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00,
+ 0x07, 0xC0, 0x00, 0x00, 0x00, 0x08, 0xFF, 0xFF,
+ 0xC0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x04,
+ 0x7F, 0xFF, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x10,
+ 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x01, 0x80,
+ 0x00, 0x30, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x70, 0x00, 0x01, 0x4F, 0xFF,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00,
+ 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x80, 0x03, 0xF0,
+ 0x00, 0x00, 0x8F, 0xFF, 0x80, 0x00, 0x00, 0x40,
+ 0x0F, 0xF0, 0x00, 0x04, 0x1F, 0xFF, 0x80, 0x00,
+ 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x10, 0x1F, 0xFF,
+ 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x40,
+ 0xFF, 0xFF, 0x98, 0x00, 0x00, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x83, 0xFF, 0xFF, 0x81, 0xE0, 0x01, 0xFF,
+ 0xFF, 0xF8, 0x02, 0x07, 0xFF, 0xFF, 0x80, 0x3F,
+ 0x07, 0xE0, 0x00, 0x1C, 0x0C, 0x1F, 0xFF, 0xFF,
+ 0xF8, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0x78, 0x1F,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0x00, 0x07, 0x0F,
+ 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, 0x0C, 0x07,
+ 0xFF, 0x83, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+};
+
+#endif
+
+#ifdef INCLUDE_LINUX_LOGO16
+
+unsigned char linux_logo16_red[] __initdata = {
+ 0x00, 0x90, 0xb0, 0x9c, 0xf7, 0x35, 0x83, 0xa5,
+ 0x65, 0x8f, 0x98, 0xc9, 0xdb, 0xe1, 0xe7, 0xf8
+};
+
+unsigned char linux_logo16_green[] __initdata = {
+ 0x00, 0x90, 0xb0, 0x9c, 0xf7, 0x2e, 0x83, 0xa5,
+ 0x65, 0x6e, 0x98, 0x89, 0xbf, 0xac, 0xda, 0xf8
+};
+
+unsigned char linux_logo16_blue[] __initdata = {
+ 0x00, 0x90, 0xaf, 0x9c, 0xf7, 0x2b, 0x82, 0xa5,
+ 0x65, 0x41, 0x97, 0x1e, 0x60, 0x29, 0xa5, 0xf8
+};
+
+unsigned char linux_logo16[] __initdata = {
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa1, 0x11, 0x11,
+ 0x61, 0x16, 0x66, 0x66, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0xa8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x87, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x73, 0x33, 0x33, 0x3a, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77,
+ 0x77, 0x27, 0x77, 0x77, 0x77, 0x33, 0x3a, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xa3, 0x33, 0x33, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x55, 0x50, 0x08, 0x33, 0x77, 0x77,
+ 0x77, 0x72, 0x72, 0x27, 0x77, 0x77, 0x33, 0x33,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xa3, 0x33, 0x33, 0x77, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x58, 0x85, 0x00, 0x11, 0x11, 0xaa,
+ 0xa3, 0x37, 0x77, 0x72, 0x22, 0x22, 0x77, 0x73,
+ 0x33, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3,
+ 0x33, 0x37, 0x77, 0x33, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x56, 0x85, 0x00, 0x06, 0x66, 0x11,
+ 0x11, 0x1a, 0xa3, 0x37, 0x77, 0x72, 0x22, 0x77,
+ 0x73, 0x33, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33,
+ 0x33, 0x33, 0x33, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x55, 0x00, 0x00, 0x06, 0x66, 0x66,
+ 0x66, 0x66, 0x11, 0x1a, 0xa3, 0x77, 0x72, 0x22,
+ 0x77, 0x73, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33,
+ 0x33, 0x33, 0x33, 0xa0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,
+ 0x66, 0x66, 0x66, 0x66, 0x11, 0xa3, 0x77, 0x22,
+ 0x22, 0x77, 0x33, 0x33, 0xaa, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x33,
+ 0x33, 0x3a, 0xa1, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x33,
+ 0xaa, 0x11, 0x16, 0x66, 0x66, 0x61, 0x1a, 0x37,
+ 0x22, 0x22, 0x77, 0x33, 0x3a, 0xaa, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0x33,
+ 0x3a, 0xa1, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x22,
+ 0x22, 0x77, 0x3a, 0x11, 0x66, 0x66, 0x66, 0x1a,
+ 0x37, 0x22, 0x22, 0x77, 0x33, 0x3a, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x33, 0x3a,
+ 0xa1, 0x11, 0x11, 0x10, 0x00, 0x00, 0x50, 0x00,
+ 0x00, 0x05, 0x80, 0x50, 0x00, 0x00, 0x07, 0x72,
+ 0x22, 0x22, 0x22, 0x73, 0xa1, 0x66, 0x66, 0x61,
+ 0x1a, 0x77, 0x22, 0x27, 0x73, 0x33, 0xaa, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x33, 0x3a, 0xaa,
+ 0x11, 0x11, 0x1a, 0xa0, 0x08, 0x71, 0x05, 0x00,
+ 0x00, 0x12, 0x22, 0x50, 0x00, 0x00, 0x07, 0x77,
+ 0x77, 0x72, 0x22, 0x22, 0x27, 0x31, 0x16, 0x66,
+ 0x61, 0x13, 0x77, 0x22, 0x77, 0x33, 0x3a, 0xaa,
+ 0xaa, 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0xaa, 0xa1,
+ 0x11, 0x1a, 0x33, 0x70, 0x07, 0x2e, 0x70, 0x00,
+ 0x01, 0x44, 0x42, 0x60, 0x00, 0x00, 0x02, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x27, 0x31, 0x66,
+ 0x66, 0x61, 0xa3, 0x72, 0x22, 0x77, 0x33, 0xaa,
+ 0xaa, 0xaa, 0xa3, 0x33, 0x33, 0xaa, 0xaa, 0x11,
+ 0x1a, 0x33, 0x77, 0x30, 0x04, 0x82, 0x40, 0x00,
+ 0x54, 0x48, 0x54, 0x40, 0x00, 0x00, 0x01, 0xaa,
+ 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x31,
+ 0x66, 0x66, 0x11, 0x37, 0x22, 0x27, 0x73, 0x3a,
+ 0xaa, 0xaa, 0xa3, 0x33, 0x3a, 0xaa, 0xaa, 0xaa,
+ 0xa3, 0x77, 0xaa, 0x10, 0x50, 0x08, 0x46, 0x05,
+ 0x54, 0x80, 0x50, 0x42, 0x00, 0x00, 0x08, 0x66,
+ 0x66, 0x1a, 0x32, 0x22, 0x22, 0x22, 0x22, 0x27,
+ 0x31, 0x66, 0x66, 0x13, 0x72, 0x22, 0x77, 0x33,
+ 0xaa, 0xaa, 0xaa, 0x33, 0xaa, 0xa1, 0xaa, 0xa3,
+ 0x37, 0xa1, 0x1a, 0x30, 0x50, 0x06, 0x26, 0x00,
+ 0x54, 0x00, 0x00, 0x44, 0x00, 0x00, 0x08, 0xe2,
+ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22, 0x22,
+ 0x27, 0xa6, 0x66, 0x61, 0xa7, 0x72, 0x27, 0x73,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33,
+ 0x31, 0x11, 0x37, 0x70, 0x02, 0x00, 0xab, 0xbb,
+ 0xb6, 0x00, 0x00, 0xf4, 0x00, 0x00, 0xee, 0xee,
+ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22,
+ 0x22, 0x23, 0x16, 0x66, 0x1a, 0x37, 0x22, 0x77,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0x3a,
+ 0x11, 0xa7, 0x33, 0x10, 0x04, 0x09, 0xbd, 0xdd,
+ 0xbd, 0xd0, 0x04, 0x45, 0x00, 0x0e, 0xee, 0xee,
+ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0x22,
+ 0x22, 0x22, 0x71, 0x66, 0x66, 0x13, 0x72, 0x27,
+ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x33, 0x11,
+ 0xa3, 0x73, 0xa1, 0x60, 0x08, 0xbd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdb, 0x90, 0x00, 0x02, 0xec, 0xee,
+ 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xce, 0x22,
+ 0x22, 0x22, 0x27, 0xa6, 0x66, 0x61, 0x37, 0x27,
+ 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0xa1, 0x1a,
+ 0x33, 0xa1, 0x16, 0x60, 0x0b, 0xbd, 0xdd, 0xdd,
+ 0xcd, 0xdd, 0xdd, 0xd9, 0x00, 0x00, 0xec, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0xa2,
+ 0x22, 0x22, 0x22, 0x7a, 0x66, 0x66, 0x13, 0x77,
+ 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0x3a, 0x11, 0x33,
+ 0xaa, 0x11, 0x66, 0x60, 0x9b, 0xdd, 0xdd, 0xdd,
+ 0xcd, 0xdd, 0xdb, 0xb9, 0x00, 0x00, 0xec, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xee, 0x61,
+ 0x72, 0x22, 0x22, 0x22, 0xa1, 0x66, 0x61, 0x37,
+ 0x1a, 0xaa, 0xaa, 0xaa, 0xa3, 0xa1, 0x13, 0x3a,
+ 0x11, 0x11, 0x11, 0x10, 0x5b, 0xdd, 0xdd, 0xdc,
+ 0xdd, 0xdd, 0xbd, 0xd9, 0x00, 0x00, 0xec, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xee, 0x86,
+ 0x17, 0x22, 0x22, 0x22, 0x23, 0x16, 0x66, 0xaa,
+ 0xaa, 0xa3, 0x3a, 0xaa, 0xaa, 0x1a, 0x3a, 0xa1,
+ 0x11, 0x11, 0x1a, 0x70, 0x05, 0xbd, 0xdd, 0xdd,
+ 0xdb, 0x5b, 0xdd, 0xb0, 0x00, 0x60, 0x2e, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe6, 0x88,
+ 0x66, 0x32, 0x22, 0x22, 0x22, 0x36, 0x66, 0x11,
+ 0x33, 0x33, 0x3a, 0xaa, 0x11, 0xaa, 0xaa, 0xa1,
+ 0x11, 0x1a, 0x3a, 0x60, 0x02, 0x99, 0xbb, 0xb9,
+ 0x9b, 0xbb, 0xbc, 0x22, 0x00, 0x86, 0x5e, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xe1, 0x68,
+ 0x86, 0x63, 0x22, 0x22, 0x22, 0x2a, 0x66, 0x66,
+ 0x33, 0x33, 0xaa, 0xaa, 0x1a, 0xaa, 0xaa, 0x11,
+ 0x1a, 0xa7, 0x68, 0x80, 0x02, 0x2b, 0xbd, 0xbb,
+ 0xbb, 0xb9, 0x22, 0x22, 0x00, 0x06, 0x6e, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc7, 0xa6,
+ 0x88, 0x86, 0x32, 0x22, 0x22, 0x27, 0xa6, 0x66,
+ 0x33, 0x3a, 0xaa, 0xa1, 0xaa, 0xaa, 0xa1, 0x11,
+ 0xa3, 0xa6, 0x88, 0x80, 0x02, 0x22, 0x9b, 0xbb,
+ 0xbb, 0x22, 0x24, 0xf4, 0x60, 0x00, 0x0c, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xc2, 0x21,
+ 0x68, 0x88, 0x63, 0x22, 0x22, 0x22, 0x71, 0x66,
+ 0x33, 0x3a, 0x11, 0x11, 0xaa, 0xaa, 0x11, 0xaa,
+ 0x71, 0x88, 0x88, 0x00, 0x02, 0xe2, 0x26, 0x99,
+ 0x22, 0x22, 0x4f, 0xf4, 0x40, 0x00, 0x0c, 0xcc,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x22, 0x22,
+ 0x16, 0x88, 0x86, 0xa2, 0x22, 0x22, 0x27, 0x11,
+ 0x33, 0xa1, 0x11, 0x11, 0xaa, 0x31, 0x1a, 0xa3,
+ 0x68, 0x88, 0x81, 0x00, 0x54, 0x42, 0x22, 0x22,
+ 0x22, 0x44, 0xff, 0xff, 0x48, 0x00, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x22, 0x22,
+ 0x21, 0x88, 0x88, 0x6a, 0x22, 0x22, 0x22, 0x31,
+ 0x3a, 0xa1, 0x11, 0x1a, 0xa3, 0x11, 0x33, 0x36,
+ 0x88, 0x86, 0x30, 0x00, 0x4f, 0x44, 0x22, 0x22,
+ 0x24, 0xff, 0xff, 0xff, 0x44, 0x00, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x95, 0x22, 0x72,
+ 0x22, 0x18, 0x88, 0x86, 0x32, 0x22, 0x22, 0x27,
+ 0xaa, 0x11, 0x11, 0x1a, 0x31, 0x13, 0x33, 0x68,
+ 0x88, 0x6a, 0x00, 0x02, 0x4f, 0x4f, 0x42, 0x24,
+ 0x4f, 0xff, 0xff, 0xff, 0xf4, 0x50, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x22, 0x73,
+ 0x72, 0x26, 0x88, 0x88, 0x63, 0x22, 0x22, 0x22,
+ 0x11, 0x11, 0x11, 0xa3, 0xa1, 0x73, 0xa6, 0x88,
+ 0x81, 0xa5, 0x00, 0x04, 0x4f, 0x4f, 0x44, 0x4f,
+ 0xff, 0xff, 0xff, 0xff, 0xf4, 0x40, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x12, 0x27,
+ 0xaa, 0x22, 0x68, 0x55, 0x86, 0x72, 0x22, 0x22,
+ 0x11, 0x11, 0x1a, 0x33, 0x13, 0x3a, 0x18, 0x88,
+ 0x1a, 0x10, 0x00, 0x44, 0x4f, 0x4f, 0xff, 0x4f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x61, 0x22,
+ 0x3a, 0xa2, 0x26, 0x85, 0x58, 0x67, 0x22, 0x22,
+ 0x61, 0x61, 0x1a, 0x7a, 0x37, 0x31, 0x88, 0x81,
+ 0x11, 0x00, 0x05, 0xe4, 0x44, 0xff, 0xff, 0xff,
+ 0x4f, 0xf4, 0x44, 0xff, 0xff, 0xf5, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x88, 0x12,
+ 0x2a, 0xaa, 0x72, 0x68, 0x55, 0x81, 0x22, 0x22,
+ 0x66, 0x61, 0xa3, 0x33, 0x73, 0x16, 0x88, 0x11,
+ 0x10, 0x00, 0x08, 0x74, 0x44, 0x4f, 0x44, 0x44,
+ 0xf4, 0xf4, 0x44, 0x44, 0xe2, 0x44, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x88, 0x81,
+ 0x22, 0xaa, 0xa7, 0x26, 0x85, 0x88, 0x12, 0x22,
+ 0x66, 0x61, 0x37, 0xa7, 0x3a, 0x66, 0x66, 0x11,
+ 0x80, 0x00, 0x0a, 0x72, 0x44, 0x4f, 0x44, 0x4f,
+ 0xff, 0x44, 0x44, 0x22, 0x22, 0x24, 0x00, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0x85, 0x88,
+ 0x12, 0x2a, 0xaa, 0x22, 0x68, 0x58, 0x63, 0x22,
+ 0x66, 0x1a, 0x73, 0x77, 0x31, 0x66, 0x61, 0x11,
+ 0x00, 0x00, 0x07, 0x44, 0xff, 0x4f, 0xf4, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0x42, 0x22, 0x40, 0x9b,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x85, 0x55,
+ 0x81, 0x27, 0xaa, 0xa2, 0x78, 0x88, 0x86, 0x72,
+ 0x66, 0x13, 0x77, 0x73, 0x11, 0x66, 0x61, 0x76,
+ 0x00, 0x50, 0x84, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x42, 0x40, 0x9b,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x68, 0x55,
+ 0x58, 0x12, 0x3a, 0xaa, 0x23, 0x88, 0x88, 0xa7,
+ 0x66, 0xa7, 0x77, 0x7a, 0x16, 0x66, 0x1a, 0x15,
+ 0x05, 0x00, 0x4f, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0x24, 0x9b,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xb9, 0x26, 0x55,
+ 0x55, 0x81, 0x23, 0xaa, 0x32, 0x18, 0x88, 0x6a,
+ 0x61, 0x37, 0x77, 0x31, 0x66, 0x66, 0x17, 0x60,
+ 0x05, 0x08, 0x4f, 0xf4, 0xff, 0x4f, 0xf4, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x4e, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x99, 0xa2, 0x65,
+ 0x55, 0x58, 0xa2, 0x7a, 0xa2, 0x26, 0x88, 0x61,
+ 0x61, 0x32, 0x27, 0xa1, 0x66, 0x61, 0x31, 0x60,
+ 0x00, 0x04, 0x4f, 0xf4, 0xff, 0x44, 0x44, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0xf4, 0x99,
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x9b, 0xaa, 0x26,
+ 0x55, 0x55, 0x87, 0x27, 0x33, 0x27, 0x68, 0x61,
+ 0x1a, 0x72, 0x27, 0xa6, 0x66, 0x6a, 0x71, 0x00,
+ 0x80, 0x84, 0xff, 0xf4, 0xff, 0x44, 0x44, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x44, 0xf4, 0x99,
+ 0x9b, 0x9b, 0x99, 0xb9, 0xb9, 0x99, 0xaa, 0xa2,
+ 0x85, 0x55, 0x56, 0x22, 0x27, 0x22, 0x36, 0x66,
+ 0x13, 0x22, 0x23, 0x16, 0x86, 0x63, 0x73, 0x00,
+ 0x00, 0x44, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0xff,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x4f, 0x99,
+ 0x9b, 0x99, 0x99, 0x99, 0xb9, 0x99, 0xaa, 0xaa,
+ 0x28, 0x55, 0x58, 0x12, 0x22, 0x22, 0x21, 0x11,
+ 0xa3, 0x27, 0x7a, 0x66, 0x86, 0x17, 0x75, 0x05,
+ 0x05, 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0xff,
+ 0xff, 0x4f, 0x44, 0x4f, 0x4f, 0x44, 0x4f, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x3a, 0xaa,
+ 0xa2, 0x85, 0x58, 0x67, 0x72, 0x22, 0x27, 0xa1,
+ 0x37, 0x27, 0x7a, 0x68, 0x86, 0xa2, 0x70, 0x00,
+ 0x02, 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0xf4, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x23, 0xaa,
+ 0xa7, 0x78, 0x88, 0x81, 0x77, 0x22, 0x27, 0x3a,
+ 0x72, 0x73, 0x71, 0x68, 0x66, 0x32, 0x50, 0x00,
+ 0x04, 0x4f, 0xf4, 0xf4, 0xff, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0x44, 0x95,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x55, 0x12, 0x3a,
+ 0xaa, 0x21, 0x88, 0x81, 0x77, 0x27, 0x73, 0x73,
+ 0x72, 0x33, 0x36, 0x86, 0x61, 0x72, 0x00, 0x00,
+ 0x04, 0x44, 0xf4, 0xf4, 0xf4, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x44, 0x55,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x8a, 0x27,
+ 0xaa, 0x77, 0x68, 0x61, 0x23, 0x71, 0x11, 0x3a,
+ 0x27, 0xa3, 0x36, 0x86, 0x61, 0x20, 0x00, 0x00,
+ 0x04, 0xf4, 0xf4, 0xf4, 0xf4, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x41, 0x59,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x95, 0x58, 0x77,
+ 0x27, 0x32, 0x36, 0x63, 0x23, 0x71, 0x66, 0x11,
+ 0x27, 0x13, 0xa6, 0x86, 0x6a, 0x20, 0x00, 0x50,
+ 0x04, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x41, 0x99,
+ 0x9b, 0xbb, 0xbb, 0xbb, 0xb9, 0x99, 0x68, 0x13,
+ 0x32, 0x22, 0x73, 0xa7, 0x2a, 0x31, 0x88, 0x66,
+ 0x7a, 0x13, 0x18, 0x66, 0x63, 0x20, 0x00, 0x06,
+ 0x0f, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0x4f, 0x4f, 0x49, 0x95,
+ 0xa9, 0xa9, 0x99, 0x97, 0x92, 0x99, 0x65, 0x6a,
+ 0x17, 0x22, 0x23, 0x72, 0x27, 0xaa, 0x88, 0x88,
+ 0xa1, 0x17, 0x68, 0x66, 0x67, 0x70, 0x00, 0x05,
+ 0x0f, 0x4f, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0xf4, 0xf4, 0x49, 0x9c,
+ 0x2e, 0xee, 0xee, 0xee, 0xee, 0xa9, 0x65, 0x8a,
+ 0x1a, 0xaa, 0x37, 0x72, 0x27, 0x37, 0x88, 0x88,
+ 0x11, 0x17, 0x68, 0x66, 0x67, 0x10, 0x9d, 0xd0,
+ 0x84, 0x44, 0xff, 0x4f, 0x4f, 0x44, 0xf4, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0xf4, 0xf4, 0x4f, 0x69,
+ 0xcc, 0xee, 0xee, 0xee, 0xec, 0x99, 0x88, 0x63,
+ 0x61, 0x68, 0x61, 0x72, 0x22, 0x7a, 0x68, 0x88,
+ 0x11, 0x17, 0x88, 0x66, 0x12, 0x1b, 0xdd, 0xdd,
+ 0x02, 0x44, 0x4f, 0x4f, 0x4f, 0x44, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xff, 0xff, 0x4f, 0x4c, 0xc5,
+ 0x0c, 0xc1, 0x11, 0x1c, 0xc0, 0x26, 0x66, 0x17,
+ 0x66, 0x88, 0x88, 0x12, 0x22, 0x23, 0xa8, 0x88,
+ 0x11, 0x13, 0x88, 0x66, 0x17, 0xbb, 0xdd, 0xdd,
+ 0xd0, 0x8f, 0xff, 0xf4, 0xf4, 0x44, 0xf4, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0x4f, 0x44, 0xdd, 0xdd,
+ 0x00, 0x00, 0x00, 0x05, 0x9d, 0x21, 0x66, 0x27,
+ 0xa6, 0x65, 0x58, 0x67, 0x22, 0x27, 0x28, 0x88,
+ 0x11, 0xaa, 0x86, 0x68, 0x1a, 0xbb, 0xdd, 0xdd,
+ 0xdb, 0x05, 0xf4, 0xf4, 0xf4, 0xf4, 0x44, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0xf4, 0xdd, 0xdb,
+ 0x00, 0x00, 0x00, 0x00, 0xdd, 0xda, 0x66, 0x22,
+ 0x71, 0x15, 0x55, 0x81, 0x22, 0x22, 0x76, 0x88,
+ 0x11, 0x31, 0x88, 0x88, 0xab, 0xbd, 0xdd, 0xdd,
+ 0xdd, 0x00, 0x04, 0x44, 0xff, 0xff, 0x4f, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0xf4, 0x44, 0xdd, 0xdb,
+ 0x00, 0x00, 0x00, 0x0b, 0xdd, 0xda, 0x11, 0x22,
+ 0x23, 0x68, 0x55, 0x86, 0x22, 0x22, 0x7a, 0x88,
+ 0x1a, 0x71, 0x88, 0x89, 0xbb, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xd0, 0x00, 0x4f, 0x44, 0xff, 0x4f, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0xff, 0xe2, 0xdd, 0xdb,
+ 0x90, 0x00, 0x05, 0xbd, 0xdd, 0xb8, 0x63, 0x22,
+ 0x27, 0xa6, 0x55, 0x88, 0x77, 0x22, 0x22, 0x88,
+ 0x1a, 0x28, 0xbd, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdb, 0x00, 0x07, 0x44, 0x4f, 0x4f, 0x4f,
+ 0xff, 0x4f, 0x44, 0x4f, 0x4f, 0x22, 0xdd, 0xdb,
+ 0xbb, 0x9b, 0xbb, 0xbd, 0xdd, 0xd5, 0x86, 0x22,
+ 0x22, 0x77, 0x85, 0x88, 0x17, 0x22, 0x22, 0x88,
+ 0xaa, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0x00, 0x00, 0x54, 0x4f, 0x4f, 0x4f,
+ 0xff, 0x4f, 0x44, 0xf4, 0x44, 0x22, 0xbd, 0xdd,
+ 0xbb, 0xbb, 0xbb, 0xdd, 0xdd, 0xdd, 0x88, 0x72,
+ 0x27, 0x22, 0x88, 0x88, 0x67, 0x72, 0x22, 0x18,
+ 0x33, 0x2d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xd0, 0x00, 0x05, 0x4f, 0x4f, 0x4f,
+ 0xff, 0x4f, 0x44, 0x44, 0x4f, 0x22, 0xbd, 0xdd,
+ 0xdb, 0xbb, 0xdd, 0xdd, 0xdd, 0xdd, 0x88, 0x17,
+ 0x27, 0x72, 0x68, 0x88, 0x87, 0x32, 0x22, 0x36,
+ 0x37, 0x2d, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xd5, 0x00, 0x00, 0x4f, 0x4f, 0x4f,
+ 0xff, 0xf4, 0xf4, 0xf4, 0xf4, 0x22, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x67,
+ 0x72, 0x77, 0x38, 0x88, 0x83, 0x37, 0x22, 0x26,
+ 0x72, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0x00, 0x00, 0x4f, 0x4f, 0x4f,
+ 0xff, 0xf4, 0xf4, 0xf4, 0x44, 0x25, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd3,
+ 0x32, 0x73, 0x76, 0x88, 0x81, 0x33, 0x22, 0x2a,
+ 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xb0, 0x54, 0x4f, 0x4f, 0x4f,
+ 0xff, 0xf4, 0xf4, 0xff, 0x44, 0x00, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xa7, 0x73, 0x26, 0x88, 0x86, 0x7a, 0x72, 0x27,
+ 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdb, 0x44, 0xff, 0x4f, 0x4f,
+ 0xff, 0xf4, 0xf4, 0x44, 0x40, 0x05, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0x13, 0x23, 0x21, 0x68, 0x86, 0x17, 0x72, 0x22,
+ 0x22, 0x2b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdb, 0x44, 0x4f, 0x4f, 0x4f,
+ 0xff, 0xff, 0x44, 0x42, 0x00, 0x05, 0xbd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0x87, 0x27, 0x27, 0x16, 0x66, 0x67, 0x22, 0x22,
+ 0x72, 0x7b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0x94, 0x44, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x00, 0x00, 0x05, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xb8,
+ 0x86, 0x22, 0x22, 0x7a, 0x68, 0x81, 0x22, 0x22,
+ 0x37, 0x7b, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdb, 0xb5, 0x44, 0x44, 0x44,
+ 0x44, 0x47, 0x00, 0x00, 0x00, 0x05, 0xbd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd8, 0x68,
+ 0x58, 0x72, 0x22, 0x27, 0x18, 0x86, 0x72, 0x22,
+ 0x1a, 0xbb, 0xbd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdb, 0xb5, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xb9, 0x18, 0x85,
+ 0x58, 0x12, 0x22, 0x36, 0x18, 0x88, 0x32, 0x22,
+ 0x61, 0x3b, 0xbb, 0xbb, 0xbd, 0xdd, 0xdd, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdb, 0xb9, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xbb, 0xdd,
+ 0xdd, 0xdd, 0xdd, 0xdd, 0xb9, 0x7a, 0x68, 0x85,
+ 0x88, 0x62, 0x27, 0x16, 0x18, 0x88, 0x12, 0x27,
+ 0x86, 0x18, 0x9b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbd,
+ 0xdd, 0xdd, 0xdd, 0xbb, 0xb5, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xbb, 0xbd,
+ 0xdd, 0xdd, 0xdb, 0xbb, 0x87, 0x31, 0x68, 0x65,
+ 0x88, 0x82, 0x23, 0x16, 0x18, 0x88, 0x12, 0x23,
+ 0x88, 0x67, 0x27, 0xa8, 0x9b, 0xbb, 0xbb, 0xbb,
+ 0xbd, 0xdd, 0xbb, 0xbb, 0x95, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x9b, 0xbb,
+ 0xbb, 0xbb, 0xbb, 0x96, 0x87, 0x16, 0x68, 0x18,
+ 0x88, 0x62, 0x31, 0x66, 0x18, 0x88, 0x62, 0x73,
+ 0x88, 0x63, 0x27, 0x33, 0x65, 0x55, 0x99, 0x9b,
+ 0xbb, 0xbb, 0xbb, 0x99, 0x55, 0x0a, 0xa1, 0x86,
+ 0x81, 0x68, 0x88, 0x55, 0x58, 0x85, 0x9b, 0xbb,
+ 0xbb, 0xbb, 0x95, 0x88, 0x83, 0x66, 0x66, 0x18,
+ 0x66, 0x82, 0xa1, 0x66, 0x18, 0x88, 0x62, 0x33,
+ 0x88, 0x81, 0x27, 0x7a, 0x18, 0x58, 0x86, 0x85,
+ 0x99, 0x99, 0x99, 0x95, 0x53, 0x2a, 0xaa, 0x88,
+ 0x67, 0x31, 0x68, 0x55, 0x58, 0x85, 0x59, 0xbb,
+ 0xbb, 0xb9, 0x58, 0x68, 0x83, 0x66, 0x61, 0x16,
+ 0x66, 0x62, 0x16, 0x66, 0x68, 0x88, 0x62, 0xaa,
+ 0x88, 0x86, 0x27, 0x77, 0x78, 0x55, 0x88, 0x22,
+ 0x25, 0x55, 0x95, 0x55, 0x6a, 0xa2, 0x2a, 0x88,
+ 0x62, 0x27, 0x37, 0x38, 0x88, 0x87, 0x55, 0x59,
+ 0x95, 0x58, 0x16, 0x88, 0x8a, 0x66, 0x63, 0x68,
+ 0x86, 0x67, 0x66, 0x66, 0x68, 0x88, 0x12, 0x11,
+ 0x88, 0x88, 0x72, 0x77, 0x78, 0x85, 0x58, 0x17,
+ 0x23, 0x32, 0x55, 0x55, 0x81, 0x13, 0x73, 0x66,
+ 0x62, 0x7a, 0xaa, 0x38, 0x88, 0x58, 0x27, 0x55,
+ 0x58, 0x32, 0x38, 0x88, 0x81, 0x66, 0xa2, 0x88,
+ 0x86, 0x61, 0x66, 0x61, 0x66, 0x68, 0x13, 0x11,
+ 0x88, 0x88, 0x12, 0x22, 0x71, 0x85, 0x58, 0x62,
+ 0x23, 0xa2, 0x68, 0x88, 0x81, 0x66, 0x88, 0x88,
+ 0x63, 0x2a, 0xaa, 0x28, 0x88, 0x55, 0x86, 0x61,
+ 0x66, 0x66, 0x68, 0x88, 0x66, 0x66, 0x77, 0x88,
+ 0x68, 0x16, 0x66, 0x62, 0x66, 0x68, 0xa1, 0x61,
+ 0x88, 0x88, 0x62, 0x22, 0x22, 0x85, 0x55, 0x83,
+ 0x72, 0x37, 0xa8, 0x88, 0x61, 0x66, 0x85, 0x55,
+ 0x86, 0x23, 0xaa, 0x71, 0x88, 0x85, 0x88, 0x66,
+ 0x88, 0x86, 0x88, 0x88, 0x16, 0x61, 0x21, 0x88,
+ 0x66, 0xa6, 0x86, 0x17, 0x66, 0x66, 0x31, 0x61,
+ 0x88, 0x88, 0x87, 0x72, 0x22, 0x68, 0x55, 0x86,
+ 0x77, 0x77, 0x36, 0x88, 0x13, 0x68, 0x85, 0x55,
+ 0x58, 0x12, 0x73, 0x72, 0x76, 0x88, 0x88, 0x68,
+ 0x88, 0x88, 0x88, 0x66, 0x36, 0x63, 0x26, 0x86,
+ 0x86, 0x36, 0x86, 0x11, 0x66, 0x66, 0x76, 0x61,
+ 0x88, 0x88, 0x81, 0x22, 0x22, 0x38, 0x85, 0x58,
+ 0x37, 0x22, 0x21, 0x68, 0xa2, 0x31, 0x68, 0x55,
+ 0x55, 0x81, 0x22, 0x22, 0xa8, 0x88, 0x88, 0x68,
+ 0x86, 0x88, 0x68, 0x81, 0x36, 0x17, 0x21, 0x68,
+ 0x86, 0x16, 0x66, 0x26, 0x66, 0x61, 0x36, 0x66,
+ 0x68, 0x88, 0x86, 0x27, 0x22, 0x28, 0x88, 0x88,
+ 0x17, 0x72, 0x2a, 0x66, 0xa2, 0x22, 0x36, 0x55,
+ 0x55, 0x58, 0x37, 0x3a, 0x16, 0x66, 0x66, 0x66,
+ 0x66, 0x18, 0x88, 0x67, 0x16, 0x12, 0x71, 0x68,
+ 0x81, 0x68, 0x61, 0x76, 0x66, 0x6a, 0x16, 0x66,
+ 0x88, 0x88, 0x86, 0x77, 0x22, 0x26, 0x88, 0x88,
+ 0x13, 0x37, 0x71, 0x66, 0xa2, 0x33, 0x2a, 0x85,
+ 0x55, 0x55, 0x17, 0x73, 0x16, 0x66, 0x66, 0x68,
+ 0x63, 0x88, 0x88, 0xa2, 0x66, 0xa2, 0xa6, 0x88,
+ 0x61, 0x68, 0x6a, 0x76, 0x66, 0x6a, 0x66, 0x6a
+};
+
+#endif
diff --git a/include/linux/loop.h b/include/linux/loop.h
index be2c1753b..75f6cc704 100644
--- a/include/linux/loop.h
+++ b/include/linux/loop.h
@@ -17,7 +17,7 @@
struct loop_device {
int lo_number;
- struct inode *lo_inode;
+ struct dentry *lo_dentry;
int lo_refcnt;
kdev_t lo_device;
int lo_offset;
@@ -36,6 +36,7 @@ struct loop_device {
idea_key lo_idea_en_key;
idea_key lo_idea_de_key;
#endif
+ struct file * lo_backing_file;
};
typedef int (* transfer_proc_t)(struct loop_device *, int cmd,
diff --git a/include/linux/lp.h b/include/linux/lp.h
index b50c6b434..937df9386 100644
--- a/include/linux/lp.h
+++ b/include/linux/lp.h
@@ -129,6 +129,8 @@ struct lp_struct {
#endif
struct wait_queue *wait_q;
unsigned int last_error;
+ volatile unsigned int irq_detected:1;
+ volatile unsigned int irq_missed:1;
};
/*
diff --git a/include/linux/lp_m68k.h b/include/linux/lp_m68k.h
index ca8f7a31d..f87bf4eff 100644
--- a/include/linux/lp_m68k.h
+++ b/include/linux/lp_m68k.h
@@ -92,7 +92,9 @@ LP_UNKNOWN = 0,
LP_AMIGA = 1,
LP_ATARI = 2,
LP_MFC = 3,
-LP_IOEXT = 4
+LP_IOEXT = 4,
+LP_MVME167 = 5,
+LP_BVME6000 = 6
};
/*
diff --git a/include/linux/major.h b/include/linux/major.h
index 8a59c1fb6..83c3a7f21 100644
--- a/include/linux/major.h
+++ b/include/linux/major.h
@@ -8,8 +8,12 @@
/* limits */
-#define MAX_CHRDEV 128
-#define MAX_BLKDEV 128
+/*
+ * Important: Don't change this to 256. Major number 255 is and must be
+ * reserved for future expansion into a larger dev_t space.
+ */
+#define MAX_CHRDEV 255
+#define MAX_BLKDEV 255
#define UNNAMED_MAJOR 0
#define MEM_MAJOR 1
@@ -40,6 +44,7 @@
#define CYCLADES_MAJOR 19
#define CYCLADESAUX_MAJOR 20
#define MITSUMI_X_CDROM_MAJOR 20
+#define MFM_ACORN_MAJOR 21 /* ARM Linux /dev/mfm */
#define SCSI_GENERIC_MAJOR 21
#define Z8530_MAJOR 34
#define DIGI_MAJOR 23
@@ -81,6 +86,10 @@
#define SPECIALIX_NORMAL_MAJOR 75
#define SPECIALIX_CALLOUT_MAJOR 76
+#define UNIX98_PTY_MASTER_MAJOR 128
+#define UNIX98_PTY_MAJOR_COUNT 8
+#define UNIX98_PTY_SLAVE_MAJOR (UNIX98_PTY_MASTER_MAJOR+UNIX98_PTY_MAJOR_COUNT)
+
/*
* Tests for SCSI devices.
*/
diff --git a/include/linux/md.h b/include/linux/md.h
index cb0d899e2..f4f4f5486 100644
--- a/include/linux/md.h
+++ b/include/linux/md.h
@@ -33,9 +33,10 @@
#define MD_DEFAULT_DISK_READAHEAD (256 * 1024)
/* ioctls */
-#define REGISTER_DEV _IO (MD_MAJOR, 1)
-#define START_MD _IO (MD_MAJOR, 2)
-#define STOP_MD _IO (MD_MAJOR, 3)
+#define REGISTER_DEV _IO (MD_MAJOR, 1)
+#define START_MD _IO (MD_MAJOR, 2)
+#define STOP_MD _IO (MD_MAJOR, 3)
+#define REGISTER_DEV_NEW _IO (MD_MAJOR, 4)
/*
personalities :
@@ -199,6 +200,7 @@ typedef struct md_superblock_s {
#include <linux/mm.h>
#include <linux/fs.h>
#include <linux/blkdev.h>
+#include <asm/semaphore.h>
/*
* Kernel-based reconstruction is mostly working, but still requires
@@ -209,12 +211,6 @@ typedef struct md_superblock_s {
#define MAX_REAL 8 /* Max number of physical dev per md dev */
#define MAX_MD_DEV 4 /* Max number of md dev */
-#if SUPPORT_RECONSTRUCTION
-#define MAX_MD_THREADS (MAX_MD_DEV * 3) /* Max number of kernel threads */
-#else
-#define MAX_MD_THREADS (MAX_MD_DEV) /* Max number of kernel threads */
-#endif /* SUPPORT_RECONSTRUCTION */
-
#define FACTOR(a) ((a)->repartition & FACTOR_MASK)
#define MAX_FAULT(a) (((a)->repartition & FAULT_MASK)>>8)
#define PERSONALITY(a) ((a)->repartition & PERSONALITY_MASK)
@@ -279,10 +275,12 @@ struct md_thread {
void (*run) (void *data);
void *data;
struct wait_queue *wqueue;
- __u32 flags;
+ unsigned long flags;
+ struct semaphore *sem;
+ struct task_struct *tsk;
};
-#define THREAD_WAKEUP 0
+#define THREAD_WAKEUP 0
extern struct md_dev md_dev[MAX_MD_DEV];
extern int md_size[MAX_MD_DEV];
diff --git a/include/linux/minix_fs.h b/include/linux/minix_fs.h
index 20a8cd66d..6b9b6d649 100644
--- a/include/linux/minix_fs.h
+++ b/include/linux/minix_fs.h
@@ -15,6 +15,7 @@
/* Not the same as the bogus LINK_MAX in <linux/limits.h>. Oh well. */
#define MINIX_LINK_MAX 250
+#define MINIX2_LINK_MAX 65530
#define MINIX_I_MAP_SLOTS 8
#define MINIX_Z_MAP_SLOTS 64
@@ -126,6 +127,7 @@ extern int minix_sync_file(struct file *, struct dentry *);
extern struct inode_operations minix_file_inode_operations;
extern struct inode_operations minix_dir_inode_operations;
extern struct inode_operations minix_symlink_inode_operations;
+extern struct dentry_operations minix_dentry_operations;
#endif /* __KERNEL__ */
diff --git a/include/linux/minix_fs_sb.h b/include/linux/minix_fs_sb.h
index c533e63ac..54c82af99 100644
--- a/include/linux/minix_fs_sb.h
+++ b/include/linux/minix_fs_sb.h
@@ -12,8 +12,9 @@ struct minix_sb_info {
unsigned long s_firstdatazone;
unsigned long s_log_zone_size;
unsigned long s_max_size;
- unsigned long s_dirsize;
- unsigned long s_namelen;
+ int s_dirsize;
+ int s_namelen;
+ int s_link_max;
struct buffer_head ** s_imap;
struct buffer_head ** s_zmap;
struct buffer_head * s_sbh;
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 8114875ae..60c0ab8f9 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -137,6 +137,7 @@ typedef struct page {
#define PG_DMA 7
#define PG_Slab 8
#define PG_swap_cache 9
+#define PG_skip 10
#define PG_reserved 31
/* Make it prettier to test the above... */
@@ -254,21 +255,10 @@ extern inline unsigned long get_free_page(int gfp_mask)
/* memory.c & swap.c*/
/*
- * This traverses "nr" memory size lists,
- * and returns true if there is enough memory.
- *
- * For example, we want to keep on waking up
- * kswapd every once in a while until the highest
- * memory order has an entry (ie nr == 0), but
- * we want to do it in the background.
- *
- * We want to do it in the foreground only if
- * none of the three highest lists have enough
- * memory. Random number.
+ * Decide if we should try to do some swapout..
*/
-extern int free_memory_available(int nr);
-#define kswapd_continue() (!free_memory_available(3))
-#define kswapd_wakeup() (!free_memory_available(0))
+extern int free_memory_available(void);
+extern struct wait_queue * kswapd_wait;
#define free_page(addr) free_pages((addr),0)
extern void FASTCALL(free_pages(unsigned long addr, unsigned long order));
@@ -281,7 +271,6 @@ extern unsigned long put_dirty_page(struct task_struct * tsk,unsigned long page,
extern void free_page_tables(struct mm_struct * mm);
extern void clear_page_tables(struct task_struct * tsk);
extern int new_page_tables(struct task_struct * tsk);
-extern int copy_page_tables(struct task_struct * to);
extern void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size);
extern int copy_page_range(struct mm_struct *dst, struct mm_struct *src, struct vm_area_struct *vma);
@@ -290,6 +279,10 @@ extern int zeromap_page_range(unsigned long from, unsigned long size, pgprot_t p
extern int vmap_page_range (unsigned long from, unsigned long size, unsigned long vaddr);
extern void vmtruncate(struct inode * inode, unsigned long offset);
extern void handle_mm_fault(struct task_struct *tsk,struct vm_area_struct *vma, unsigned long address, int write_access);
+extern void make_pages_present(unsigned long addr, unsigned long end);
+
+extern int pgt_cache_water[2];
+extern int check_pgt_cache(void);
extern unsigned long paging_init(unsigned long start_mem, unsigned long end_mem);
extern void mem_init(unsigned long start_mem, unsigned long end_mem);
@@ -299,16 +292,18 @@ extern void si_meminfo(struct sysinfo * val);
/* mmap.c */
extern void vma_init(void);
-extern unsigned long do_mmap(struct file * file, unsigned long addr, unsigned long len,
- unsigned long prot, unsigned long flags, unsigned long off);
extern void merge_segments(struct mm_struct *, unsigned long, unsigned long);
extern void insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
extern void exit_mmap(struct mm_struct *);
-extern int do_munmap(unsigned long, size_t);
extern unsigned long get_unmapped_area(unsigned long, unsigned long);
+extern unsigned long do_mmap(struct file *, unsigned long, unsigned long,
+ unsigned long, unsigned long, unsigned long);
+extern int do_munmap(unsigned long, size_t);
+
/* filemap.c */
-extern unsigned long page_unuse(unsigned long);
+extern void remove_inode_page(struct page *);
+extern unsigned long page_unuse(struct page *);
extern int shrink_mmap(int, int);
extern void truncate_inode_pages(struct inode *, unsigned long);
extern unsigned long get_cached_page(struct inode *, unsigned long, int);
@@ -318,8 +313,7 @@ extern void put_cached_page(unsigned long);
* GFP bitmasks..
*/
#define __GFP_WAIT 0x01
-#define __GFP_IO 0x02
-#define __GFP_LOW 0x00
+#define __GFP_LOW 0x02
#define __GFP_MED 0x04
#define __GFP_HIGH 0x08
@@ -328,9 +322,9 @@ extern void put_cached_page(unsigned long);
#define GFP_BUFFER (__GFP_LOW | __GFP_WAIT)
#define GFP_ATOMIC (__GFP_HIGH)
-#define GFP_USER (__GFP_LOW | __GFP_WAIT | __GFP_IO)
-#define GFP_KERNEL (__GFP_LOW | __GFP_WAIT | __GFP_IO)
-#define GFP_NFS (__GFP_MED | __GFP_WAIT | __GFP_IO)
+#define GFP_USER (__GFP_LOW | __GFP_WAIT)
+#define GFP_KERNEL (__GFP_MED | __GFP_WAIT)
+#define GFP_NFS (__GFP_HIGH | __GFP_WAIT)
/* Flag - indicates that the buffer should be allocated uncached as for an
architecture where the caches don't snoop DMA access. This is a even
diff --git a/include/linux/mount.h b/include/linux/mount.h
index c2e44397a..7e7ccb266 100644
--- a/include/linux/mount.h
+++ b/include/linux/mount.h
@@ -3,28 +3,44 @@
* Definitions for mount interface. This describes the in the kernel build
* linkedlist with mounted filesystems.
*
- * Author: Marco van Wieringen <mvw@mcs.ow.nl> <mvw@tnix.net> <mvw@cistron.nl>
+ * Author: Marco van Wieringen <mvw@planets.elm.net>
*
- * Version: $Id: mount.h,v 1.3 1994/07/20 22:01:00 mvw Exp mvw $
+ * Version: $Id: mount.h,v 2.0 1996/11/17 16:48:14 mvw Exp mvw $
*
*/
#ifndef _LINUX_MOUNT_H
#define _LINUX_MOUNT_H
+#define DQUOT_USR_ENABLED 0x01 /* User diskquotas enabled */
+#define DQUOT_GRP_ENABLED 0x02 /* Group diskquotas enabled */
+
+struct quota_mount_options
+{
+ unsigned int flags; /* Flags for diskquotas on this device */
+ struct semaphore semaphore; /* lock device while I/O in progress */
+ struct file *files[MAXQUOTAS]; /* fp's to quotafiles */
+ time_t inode_expire[MAXQUOTAS]; /* expiretime for inode-quota */
+ time_t block_expire[MAXQUOTAS]; /* expiretime for block-quota */
+ char rsquash[MAXQUOTAS]; /* for quotas threath root as any other user */
+};
+
struct vfsmount
{
- kdev_t mnt_dev; /* Device this applies to */
- char *mnt_devname; /* Name of device e.g. /dev/dsk/hda1 */
- char *mnt_dirname; /* Name of directory mounted on */
- unsigned int mnt_flags; /* Flags of this device */
- struct semaphore mnt_sem; /* lock device while I/O in progress */
- struct super_block *mnt_sb; /* pointer to superblock */
- struct file *mnt_quotas[MAXQUOTAS]; /* fp's to quotafiles */
- time_t mnt_iexp[MAXQUOTAS]; /* expiretime for inodes */
- time_t mnt_bexp[MAXQUOTAS]; /* expiretime for blocks */
- struct vfsmount *mnt_next; /* pointer to next in linkedlist */
+ kdev_t mnt_dev; /* Device this applies to */
+ char *mnt_devname; /* Name of device e.g. /dev/dsk/hda1 */
+ char *mnt_dirname; /* Name of directory mounted on */
+ unsigned int mnt_flags; /* Flags of this device */
+ struct super_block *mnt_sb; /* pointer to superblock */
+ struct quota_mount_options mnt_dquot; /* Diskquota specific mount options */
+ struct vfsmount *mnt_next; /* pointer to next in linkedlist */
};
struct vfsmount *lookup_vfsmnt(kdev_t dev);
+/*
+ * Umount options
+ */
+
+#define MNT_FORCE 0x00000001 /* Attempt to forcibily umount */
+
#endif /* _LINUX_MOUNT_H */
diff --git a/include/linux/msdos_fs_i.h b/include/linux/msdos_fs_i.h
index 674999c58..1e677d5c7 100644
--- a/include/linux/msdos_fs_i.h
+++ b/include/linux/msdos_fs_i.h
@@ -21,7 +21,7 @@ struct msdos_inode_info {
I have not put it conditional. With the advent of loadable
file system drivers, it would be very easy to compile
- a MsDOS FS driver unaware of UMSDOS and then later to
+ a MS-DOS FS driver unaware of UMSDOS and then later to
load a (then incompatible) UMSDOS FS driver.
*/
struct pipe_inode_info reserved;
diff --git a/include/linux/nbd.h b/include/linux/nbd.h
index d2d613c50..c2f2a4e08 100644
--- a/include/linux/nbd.h
+++ b/include/linux/nbd.h
@@ -1,16 +1,13 @@
#ifndef LINUX_NBD_H
#define LINUX_NBD_H
-#include <linux/ioctl.h>
-#include <asm/types.h>
-
-#define NBD_SET_SOCK _IO( 0xab, 0 )
-#define NBD_SET_BLKSIZE _IO( 0xab, 1 )
-#define NBD_SET_SIZE _IO( 0xab, 2 )
-#define NBD_DO_IT _IO( 0xab, 3 )
-#define NBD_CLEAR_SOCK _IO( 0xab, 4 )
-#define NBD_CLEAR_QUE _IO( 0xab, 5 )
-#define NBD_PRINT_DEBUG _IO( 0xab, 6 )
+#define NBD_SET_SOCK _IO( 0xab, 0 )
+#define NBD_SET_BLKSIZE _IO( 0xab, 1 )
+#define NBD_SET_SIZE _IO( 0xab, 2 )
+#define NBD_DO_IT _IO( 0xab, 3 )
+#define NBD_CLEAR_SOCK _IO( 0xab, 4 )
+#define NBD_CLEAR_QUE _IO( 0xab, 5 )
+#define NBD_PRINT_DEBUG _IO( 0xab, 6 )
#ifdef MAJOR_NR
@@ -54,21 +51,23 @@ struct nbd_device {
/* This now IS in some kind of include file... */
-#define NBD_REQUEST_MAGIC 0x12560953
-#define NBD_REPLY_MAGIC 0x96744668
-#define LO_MAGIC 0x68797548
+/* These are send over network in request/reply magic field */
+
+#define NBD_REQUEST_MAGIC 0x25609513
+#define NBD_REPLY_MAGIC 0x67446698
+/* Do *not* use magics: 0x12560953 0x96744668. */
struct nbd_request {
- __u32 magic;
- __u32 from;
- __u32 len;
+ u32 magic;
+ u32 type; /* == READ || == WRITE */
char handle[8];
- __u32 type; /* == READ || == WRITE */
+ u64 from;
+ u32 len;
};
struct nbd_reply {
- __u32 magic;
+ u32 magic;
+ u32 error; /* 0 = ok, else error */
char handle[8]; /* handle you got from request */
- __u32 error; /* 0 = ok, else error */
};
#endif
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index aa9568e83..c42e43d9d 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -189,10 +189,15 @@ struct device
unsigned int irq; /* device IRQ number */
/* Low-level status flags. */
- volatile unsigned char start, /* start an operation */
- interrupt; /* interrupt arrived */
- unsigned long tbusy; /* transmitter busy must be
- long for bitops */
+ volatile unsigned char start; /* start an operation */
+ /*
+ * These two are just single-bit flags, but due to atomicity
+ * reasons they have to be inside a "unsigned long". However,
+ * they should be inside the SAME unsigned long instead of
+ * this wasteful use of memory..
+ */
+ unsigned long interrupt; /* bitops.. */
+ unsigned long tbusy; /* transmitter busy */
struct device *next;
@@ -251,8 +256,9 @@ struct device
/* Protocol specific pointers */
- void *atalk_ptr; /* Appletalk link */
+ void *atalk_ptr; /* AppleTalk link */
void *ip_ptr; /* IPv4 specific data */
+ void *dn_ptr; /* DECnet specific data */
struct Qdisc *qdisc;
struct Qdisc *qdisc_sleeping;
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h
index 355e96251..69144d1d8 100644
--- a/include/linux/nfsd/export.h
+++ b/include/linux/nfsd/export.h
@@ -60,7 +60,7 @@ struct svc_export {
struct svc_client * ex_client;
int ex_flags;
struct dentry * ex_dentry;
- dev_t ex_dev;
+ kdev_t ex_dev;
ino_t ex_ino;
uid_t ex_anon_uid;
gid_t ex_anon_gid;
@@ -84,8 +84,8 @@ int exp_writelock(void);
void exp_unlock(void);
struct svc_client * exp_getclient(struct sockaddr_in *sin);
void exp_putclient(struct svc_client *clp);
-struct svc_export * exp_get(struct svc_client *clp, dev_t dev, ino_t ino);
-int exp_rootfh(struct svc_client *, dev_t, ino_t,
+struct svc_export * exp_get(struct svc_client *clp, kdev_t dev, ino_t ino);
+int exp_rootfh(struct svc_client *, kdev_t, ino_t,
struct knfs_fh *);
int nfserrno(int errno);
void exp_nlmdetach(void);
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h
index d7f0851fe..aea15a68b 100644
--- a/include/linux/nfsd/nfsd.h
+++ b/include/linux/nfsd/nfsd.h
@@ -60,6 +60,7 @@ struct readdir_cd {
};
typedef int (*encode_dent_fn)(struct readdir_cd *, const char *,
int, off_t, ino_t);
+typedef int (*nfsd_dirop_t)(struct inode *, struct dentry *, int, int);
/*
* Procedure table for NFSv2
@@ -72,6 +73,8 @@ extern struct svc_program nfsd_program;
*/
int nfsd_svc(unsigned short port, int nrservs);
+/* nfsd/vfs.c */
+int fh_lock_parent(struct svc_fh *, struct dentry *);
void nfsd_racache_init(void);
int nfsd_lookup(struct svc_rqst *, struct svc_fh *,
const char *, int, struct svc_fh *);
diff --git a/include/linux/nfsd/nfsfh.h b/include/linux/nfsd/nfsfh.h
index 3e3410776..d11d8e0c3 100644
--- a/include/linux/nfsd/nfsfh.h
+++ b/include/linux/nfsd/nfsfh.h
@@ -27,12 +27,12 @@
* ino/dev of the exported inode.
*/
struct nfs_fhbase {
- struct dentry * fb_dentry; /* dentry cookie */
- ino_t fb_ino; /* our inode number */
- ino_t fb_dirino; /* dir inode number */
- dev_t fb_dev; /* our device */
- dev_t fb_xdev;
- ino_t fb_xino;
+ struct dentry * fb_dentry; /* dentry cookie */
+ __u32 fb_ino; /* our inode number */
+ __u32 fb_dirino; /* dir inode number */
+ __u32 fb_dev; /* our device */
+ __u32 fb_xdev;
+ __u32 fb_xino;
};
#define NFS_FH_PADDING (NFS_FHSIZE - sizeof(struct nfs_fhbase))
@@ -51,6 +51,29 @@ struct knfs_fh {
#ifdef __KERNEL__
/*
+ * Conversion macros for the filehandle fields.
+ */
+extern inline __u32 kdev_t_to_u32(kdev_t dev)
+{
+ return (__u32) dev;
+}
+
+extern inline kdev_t u32_to_kdev_t(__u32 udev)
+{
+ return (kdev_t) udev;
+}
+
+extern inline __u32 ino_t_to_u32(ino_t ino)
+{
+ return (__u32) ino;
+}
+
+extern inline ino_t u32_to_ino_t(__u32 uino)
+{
+ return (ino_t) uino;
+}
+
+/*
* This is the internal representation of an NFS handle used in knfsd.
* pre_mtime/post_version will be used to support wcc_attr's in NFSv3.
*/
@@ -80,7 +103,7 @@ u32 fh_verify(struct svc_rqst *, struct svc_fh *, int, int);
void fh_compose(struct svc_fh *, struct svc_export *, struct dentry *);
void fh_update(struct svc_fh *);
void fh_put(struct svc_fh *);
-void nfsd_fh_flush(dev_t);
+void nfsd_fh_flush(kdev_t);
void nfsd_fh_init(void);
void nfsd_fh_free(void);
diff --git a/include/linux/nfsd/syscall.h b/include/linux/nfsd/syscall.h
index 0bf4a5a58..896ead46b 100644
--- a/include/linux/nfsd/syscall.h
+++ b/include/linux/nfsd/syscall.h
@@ -12,6 +12,7 @@
#include <linux/config.h>
#include <linux/types.h>
#include <linux/socket.h>
+#include <linux/posix_types.h>
#include <linux/nfsd/const.h>
#include <linux/nfsd/export.h>
#include <linux/nfsd/nfsfh.h>
@@ -54,29 +55,29 @@ struct nfsctl_client {
struct nfsctl_export {
char ex_client[NFSCLNT_IDMAX+1];
char ex_path[NFS_MAXPATHLEN+1];
- dev_t ex_dev;
- ino_t ex_ino;
+ __kernel_dev_t ex_dev;
+ __kernel_ino_t ex_ino;
int ex_flags;
- uid_t ex_anon_uid;
- gid_t ex_anon_gid;
+ __kernel_uid_t ex_anon_uid;
+ __kernel_gid_t ex_anon_gid;
};
/* UGIDUPDATE */
struct nfsctl_uidmap {
char * ug_ident;
- uid_t ug_uidbase;
+ __kernel_uid_t ug_uidbase;
int ug_uidlen;
- uid_t * ug_udimap;
- uid_t ug_gidbase;
+ __kernel_uid_t * ug_udimap;
+ __kernel_gid_t ug_gidbase;
int ug_gidlen;
- gid_t * ug_gdimap;
+ __kernel_gid_t * ug_gdimap;
};
/* GETFH */
struct nfsctl_fhparm {
struct sockaddr gf_addr;
- dev_t gf_dev;
- ino_t gf_ino;
+ __kernel_dev_t gf_dev;
+ __kernel_ino_t gf_ino;
int gf_version;
};
diff --git a/include/linux/openpic.h b/include/linux/openpic.h
index 863e65997..1b6102a2f 100644
--- a/include/linux/openpic.h
+++ b/include/linux/openpic.h
@@ -3,10 +3,6 @@
*
* Copyright (C) 1997 Geert Uytterhoeven
*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file COPYING in the main directory of this archive
- * for more details.
- *
* This file is based on the following documentation:
*
* The Open Programmable Interrupt Controller (PIC)
@@ -51,6 +47,16 @@
/*
+ * Vector numbers
+ */
+
+#define OPENPIC_VEC_SOURCE 0x10 /* and up */
+#define OPENPIC_VEC_TIMER 0x40 /* and up */
+#define OPENPIC_VEC_IPI 0x50 /* and up */
+#define OPENPIC_VEC_SPURIOUS 99
+
+
+ /*
* OpenPIC Registers are 32 bits and aligned on 128 bit boundaries
*/
@@ -198,6 +204,8 @@ struct OpenPIC {
};
extern volatile struct OpenPIC *OpenPIC;
+extern u_int OpenPIC_NumInitSenses;
+extern u_char *OpenPIC_InitSenses;
/*
diff --git a/include/linux/parport.h b/include/linux/parport.h
index d03aca79f..269fb574c 100644
--- a/include/linux/parport.h
+++ b/include/linux/parport.h
@@ -1,4 +1,4 @@
-/* $Id: parport.h,v 1.6 1997/12/29 12:31:05 phil Exp $ */
+/* $Id: parport.h,v 1.1 1998/05/17 10:57:52 andrea Exp andrea $ */
#ifndef _PARPORT_H_
#define _PARPORT_H_
@@ -106,12 +106,18 @@ struct parport_operations {
void (*release_resources)(struct parport *);
int (*claim_resources)(struct parport *);
+ void (*epp_write_data)(struct parport *, unsigned char);
+ unsigned char (*epp_read_data)(struct parport *);
+ void (*epp_write_addr)(struct parport *, unsigned char);
+ unsigned char (*epp_read_addr)(struct parport *);
+ int (*epp_check_timeout)(struct parport *);
size_t (*epp_write_block)(struct parport *, void *, size_t);
size_t (*epp_read_block)(struct parport *, void *, size_t);
int (*ecp_write_block)(struct parport *, void *, size_t, void (*fn)(struct parport *, void *, size_t), void *);
int (*ecp_read_block)(struct parport *, void *, size_t, void (*fn)(struct parport *, void *, size_t), void *);
+ void (*init_state)(struct parport_state *);
void (*save_state)(struct parport *, struct parport_state *);
void (*restore_state)(struct parport *, struct parport_state *);
@@ -121,14 +127,16 @@ struct parport_operations {
void (*inc_use_count)(void);
void (*dec_use_count)(void);
+ void (*fill_inode)(struct inode *inode, int fill);
};
struct parport_device_info {
parport_device_class class;
- char *mfr;
- char *model;
- char *cmdset;
- char *description;
+ const char *class_name;
+ const char *mfr;
+ const char *model;
+ const char *cmdset;
+ const char *description;
};
/* Each device can have two callback functions:
@@ -145,7 +153,7 @@ struct parport_device_info {
/* A parallel port device */
struct pardevice {
- char *name;
+ const char *name;
struct parport *port;
int (*preempt)(void *);
void (*wakeup)(void *);
@@ -177,7 +185,7 @@ struct parport_dir {
struct parport {
unsigned long base; /* base address */
unsigned int size; /* IO extent */
- char *name;
+ const char *name;
int irq; /* interrupt (or -1 for none) */
int dma;
unsigned int modes;
@@ -329,6 +337,11 @@ extern void (*parport_probe_hook)(struct parport *port);
#define parport_change_mode(p,m) parport_pc_change_mode(p,m)
#define parport_release_resources(p) parport_pc_release_resources(p)
#define parport_claim_resources(p) parport_pc_claim_resources(p)
+#define parport_epp_write_data(p,x) parport_pc_write_epp(p,x)
+#define parport_epp_read_data(p) parport_pc_read_epp(p)
+#define parport_epp_write_addr(p,x) parport_pc_write_epp_addr(p,x)
+#define parport_epp_read_addr(p) parport_pc_read_epp_addr(p)
+#define parport_epp_check_timeout(p) parport_pc_check_epp_timeout(p)
#endif
#ifdef PARPORT_NEED_GENERIC_OPS
@@ -348,6 +361,11 @@ extern void (*parport_probe_hook)(struct parport *port);
#define parport_change_mode(p,m) (p)->ops->change_mode(p,m)
#define parport_release_resources(p) (p)->ops->release_resources(p)
#define parport_claim_resources(p) (p)->ops->claim_resources(p)
+#define parport_epp_write_data(p,x) (p)->ops->epp_write_data(p,x)
+#define parport_epp_read_data(p) (p)->ops->epp_read_data(p)
+#define parport_epp_write_addr(p,x) (p)->ops->epp_write_addr(p,x)
+#define parport_epp_read_addr(p) (p)->ops->epp_read_addr(p)
+#define parport_epp_check_timeout(p) (p)->ops->epp_check_timeout(p)
#endif
#endif /* __KERNEL__ */
diff --git a/include/linux/parport_pc.h b/include/linux/parport_pc.h
index 45f4c0fb8..b61a970a7 100644
--- a/include/linux/parport_pc.h
+++ b/include/linux/parport_pc.h
@@ -8,19 +8,41 @@
#define ECONTROL 0x402
#define CONFIGB 0x401
#define CONFIGA 0x400
-#define EPPREG 0x4
+#define EPPDATA 0x4
+#define EPPADDR 0x3
#define CONTROL 0x2
#define STATUS 0x1
#define DATA 0
+extern int parport_pc_epp_clear_timeout(struct parport *pb);
+
+
extern __inline__ void parport_pc_write_epp(struct parport *p, unsigned char d)
{
- outb(d, p->base+EPPREG);
+ outb(d, p->base+EPPDATA);
}
extern __inline__ unsigned char parport_pc_read_epp(struct parport *p)
{
- return inb(p->base+EPPREG);
+ return inb(p->base+EPPDATA);
+}
+
+extern __inline__ void parport_pc_write_epp_addr(struct parport *p, unsigned char d)
+{
+ outb(d, p->base+EPPADDR);
+}
+
+extern __inline__ unsigned char parport_pc_read_epp_addr(struct parport *p)
+{
+ return inb(p->base+EPPADDR);
+}
+
+extern __inline__ int parport_pc_check_epp_timeout(struct parport *p)
+{
+ if (!(inb(p->base+STATUS) & 1))
+ return 0;
+ parport_pc_epp_clear_timeout(p);
+ return 1;
}
extern __inline__ unsigned char parport_pc_read_configb(struct parport *p)
@@ -96,6 +118,8 @@ extern void parport_pc_release_resources(struct parport *p);
extern int parport_pc_claim_resources(struct parport *p);
+extern void parport_pc_init_state(struct parport_state *s);
+
extern void parport_pc_save_state(struct parport *p, struct parport_state *s);
extern void parport_pc_restore_state(struct parport *p, struct parport_state *s);
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 33e8d80ed..9217511f7 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1,25 +1,17 @@
/*
- * $Id: pci.h,v 1.70 1998/05/02 19:20:03 mj Exp $
+ * $Id: pci.h,v 1.80 1998/07/21 10:06:40 mj Exp $
*
* PCI defines and function prototypes
* Copyright 1994, Drew Eckhardt
- * Copyright 1997, Martin Mares <mj@atrey.karlin.mff.cuni.cz>
+ * Copyright 1997, 1998 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
*
- * For more information, please consult
- *
- * PCI BIOS Specification Revision
+ * For more information, please consult the following manuals (look at
+ * http://www.pcisig.com/ for how to get them):
+ *
+ * PCI BIOS Specification
* PCI Local Bus Specification
+ * PCI to PCI Bridge Specification
* PCI System Design Guide
- *
- * PCI Special Interest Group
- * M/S HF3-15A
- * 5200 N.E. Elam Young Parkway
- * Hillsboro, Oregon 97124-6497
- * +1 (503) 696-2000
- * +1 (800) 433-5177
- *
- * Manuals are $25 each or $50 for all three, plus $7 shipping
- * within the United States, $35 abroad.
*/
#ifndef LINUX_PCI_H
@@ -84,7 +76,7 @@
* 1 bits are decoded.
*/
#define PCI_BASE_ADDRESS_0 0x10 /* 32 bits */
-#define PCI_BASE_ADDRESS_1 0x14 /* 32 bits */
+#define PCI_BASE_ADDRESS_1 0x14 /* 32 bits [htype 0,1 only] */
#define PCI_BASE_ADDRESS_2 0x18 /* 32 bits [htype 0 only] */
#define PCI_BASE_ADDRESS_3 0x1c /* 32 bits */
#define PCI_BASE_ADDRESS_4 0x20 /* 32 bits */
@@ -153,17 +145,13 @@
#define PCI_BRIDGE_CTL_BUS_RESET 0x40 /* Secondary bus reset */
#define PCI_BRIDGE_CTL_FAST_BACK 0x80 /* Fast Back2Back enabled on secondary interface */
-/* Header type 2 (CardBus bridges) -- detailed info welcome */
-#define PCI_CB_CARDBUS_BASE 0x10 /* CardBus Socket/ExCa base address */
-#define PCI_CB_CARDBUS_BASE_TYPE_MASK 0xfff
-#define PCI_CB_CARDBUS_BASE_MASK ~0xfff
-#define PCI_CB_CAPABILITIES 0x14 /* Offset of list of capabilities in cfg space */
-/* 0x15 reserved */
+/* Header type 2 (CardBus bridges) */
+/* 0x14-0x15 reserved */
#define PCI_CB_SEC_STATUS 0x16 /* Secondary status */
-#define PCI_CB_BUS_NUMBER 0x18 /* PCI bus number */
-#define PCI_CB_CARDBUS_NUMBER 0x19 /* CardBus bus number */
+#define PCI_CB_PRIMARY_BUS 0x18 /* PCI bus number */
+#define PCI_CB_CARD_BUS 0x19 /* CardBus bus number */
#define PCI_CB_SUBORDINATE_BUS 0x1a /* Subordinate bus number */
-#define PCI_CB_CARDBUS_LATENCY 0x1b /* CardBus latency timer */
+#define PCI_CB_LATENCY_TIMER 0x1b /* CardBus latency timer */
#define PCI_CB_MEMORY_BASE_0 0x1c
#define PCI_CB_MEMORY_LIMIT_0 0x20
#define PCI_CB_MEMORY_BASE_1 0x24
@@ -176,8 +164,19 @@
#define PCI_CB_IO_BASE_1_HI 0x36
#define PCI_CB_IO_LIMIT_1 0x38
#define PCI_CB_IO_LIMIT_1_HI 0x3a
+#define PCI_CB_IO_RANGE_MASK ~0x03
/* 0x3c-0x3d are same as for htype 0 */
-/* 0x3e-0x3f are same as for htype 1 */
+#define PCI_CB_BRIDGE_CONTROL 0x3e
+#define PCI_CB_BRIDGE_CTL_PARITY 0x01 /* Similar to standard bridge control register */
+#define PCI_CB_BRIDGE_CTL_SERR 0x02
+#define PCI_CB_BRIDGE_CTL_ISA 0x04
+#define PCI_CB_BRIDGE_CTL_VGA 0x08
+#define PCI_CB_BRIDGE_CTL_MASTER_ABORT 0x20
+#define PCI_CB_BRIDGE_CTL_CB_RESET 0x40 /* CardBus reset */
+#define PCI_CB_BRIDGE_CTL_16BIT_INT 0x80 /* Enable interrupt for 16-bit cards */
+#define PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100 /* Prefetch enable for both memory regions */
+#define PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200
+#define PCI_CB_BRIDGE_CTL_POST_WRITES 0x400
#define PCI_CB_SUBSYSTEM_VENDOR_ID 0x40
#define PCI_CB_SUBSYSTEM_ID 0x42
#define PCI_CB_LEGACY_MODE_BASE 0x44 /* 16-bit PC Card legacy mode base address (ExCa) */
@@ -573,6 +572,7 @@
#define PCI_DEVICE_ID_CMD_640 0x0640
#define PCI_DEVICE_ID_CMD_643 0x0643
#define PCI_DEVICE_ID_CMD_646 0x0646
+#define PCI_DEVICE_ID_CMD_647 0x0647
#define PCI_DEVICE_ID_CMD_670 0x0670
#define PCI_VENDOR_ID_VISION 0x1098
@@ -603,6 +603,7 @@
#define PCI_VENDOR_ID_MADGE 0x10b6
#define PCI_DEVICE_ID_MADGE_MK2 0x0002
+#define PCI_DEVICE_ID_MADGE_C155S 0x1001
#define PCI_VENDOR_ID_3COM 0x10b7
#define PCI_DEVICE_ID_3COM_3C339 0x3390
@@ -772,6 +773,11 @@
#define PCI_DEVICE_ID_ALLIANCE_AT24 0x6424
#define PCI_DEVICE_ID_ALLIANCE_AT3D 0x643d
+#define PCI_VENDOR_ID_SK 0x1148
+#define PCI_DEVICE_ID_SK_FP 0x4000
+#define PCI_DEVICE_ID_SK_TR 0x4200
+#define PCI_DEVICE_ID_SK_GE 0x4300
+
#define PCI_VENDOR_ID_VMIC 0x114a
#define PCI_DEVICE_ID_VMIC_VME 0x7587
@@ -845,10 +851,15 @@
#define PCI_DEVICE_ID_COMPEX_RL2000 0x1401
#define PCI_VENDOR_ID_RP 0x11fe
-#define PCI_DEVICE_ID_RP8OCTA 0x0001
+#define PCI_DEVICE_ID_RP32INTF 0x0001
#define PCI_DEVICE_ID_RP8INTF 0x0002
#define PCI_DEVICE_ID_RP16INTF 0x0003
-#define PCI_DEVICE_ID_RP32INTF 0x0004
+#define PCI_DEVICE_ID_RP4QUAD 0x0004
+#define PCI_DEVICE_ID_RP8OCTA 0x0005
+#define PCI_DEVICE_ID_RP8J 0x0006
+#define PCI_DEVICE_ID_RPP4 0x000A
+#define PCI_DEVICE_ID_RPP8 0x000B
+#define PCI_DEVICE_ID_RP8M 0x000C
#define PCI_VENDOR_ID_CYCLADES 0x120e
#define PCI_DEVICE_ID_CYCLOM_Y_Lo 0x0100
@@ -895,6 +906,9 @@
#define PCI_VENDOR_ID_ENSONIQ 0x1274
#define PCI_DEVICE_ID_ENSONIQ_AUDIOPCI 0x5000
+#define PCI_VENDOR_ID_ALTEON 0x12ae
+#define PCI_DEVICE_ID_ALTEON_ACENIC 0x0001
+
#define PCI_VENDOR_ID_PICTUREL 0x12c5
#define PCI_DEVICE_ID_PICTUREL_PCIVST 0x0081
@@ -1036,43 +1050,7 @@
#ifdef __KERNEL__
#include <linux/types.h>
-
-/*
- * Error values that may be returned by the PCI bios.
- */
-#define PCIBIOS_SUCCESSFUL 0x00
-#define PCIBIOS_FUNC_NOT_SUPPORTED 0x81
-#define PCIBIOS_BAD_VENDOR_ID 0x83
-#define PCIBIOS_DEVICE_NOT_FOUND 0x86
-#define PCIBIOS_BAD_REGISTER_NUMBER 0x87
-#define PCIBIOS_SET_FAILED 0x88
-#define PCIBIOS_BUFFER_TOO_SMALL 0x89
-
-/* Direct configuration space access */
-
-int pcibios_present (void);
-void pcibios_init(void);
-void pcibios_fixup(void);
-char *pcibios_setup (char *str);
-int pcibios_read_config_byte (unsigned char bus, unsigned char dev_fn,
- unsigned char where, unsigned char *val);
-int pcibios_read_config_word (unsigned char bus, unsigned char dev_fn,
- unsigned char where, unsigned short *val);
-int pcibios_read_config_dword (unsigned char bus, unsigned char dev_fn,
- unsigned char where, unsigned int *val);
-int pcibios_write_config_byte (unsigned char bus, unsigned char dev_fn,
- unsigned char where, unsigned char val);
-int pcibios_write_config_word (unsigned char bus, unsigned char dev_fn,
- unsigned char where, unsigned short val);
-int pcibios_write_config_dword (unsigned char bus, unsigned char dev_fn,
- unsigned char where, unsigned int val);
-
-/* Don't use these in new code, use pci_find_... instead */
-
-int pcibios_find_class (unsigned int class_code, unsigned short index, unsigned char *bus, unsigned char *dev_fn);
-int pcibios_find_device (unsigned short vendor, unsigned short dev_id,
- unsigned short index, unsigned char *bus,
- unsigned char *dev_fn);
+#include <linux/config.h>
/*
* There is one pci_dev structure for each slot-number/function-number
@@ -1084,6 +1062,7 @@ struct pci_dev {
struct pci_dev *next; /* chain of all devices */
void *sysdata; /* hook for sys-specific extension */
+ struct proc_dir_entry *procent; /* device entry in /proc/bus/pci */
unsigned int devfn; /* encoded device & function index */
unsigned short vendor;
@@ -1120,6 +1099,7 @@ struct pci_bus {
struct pci_dev *devices; /* devices behind this bridge */
void *sysdata; /* hook for sys-specific extension */
+ struct proc_dir_entry *procdir; /* directory entry in /proc/bus/pci */
unsigned char number; /* bus number */
unsigned char primary; /* number of primary bridge */
@@ -1130,6 +1110,46 @@ struct pci_bus {
extern struct pci_bus pci_root; /* root bus */
extern struct pci_dev *pci_devices; /* list of all devices */
+/*
+ * Error values that may be returned by the PCI bios.
+ */
+#define PCIBIOS_SUCCESSFUL 0x00
+#define PCIBIOS_FUNC_NOT_SUPPORTED 0x81
+#define PCIBIOS_BAD_VENDOR_ID 0x83
+#define PCIBIOS_DEVICE_NOT_FOUND 0x86
+#define PCIBIOS_BAD_REGISTER_NUMBER 0x87
+#define PCIBIOS_SET_FAILED 0x88
+#define PCIBIOS_BUFFER_TOO_SMALL 0x89
+
+/* Low-level architecture-dependent routines */
+
+int pcibios_present (void);
+void pcibios_init(void);
+void pcibios_fixup(void);
+void pcibios_fixup_bus(struct pci_bus *);
+char *pcibios_setup (char *str);
+int pcibios_read_config_byte (unsigned char bus, unsigned char dev_fn,
+ unsigned char where, unsigned char *val);
+int pcibios_read_config_word (unsigned char bus, unsigned char dev_fn,
+ unsigned char where, unsigned short *val);
+int pcibios_read_config_dword (unsigned char bus, unsigned char dev_fn,
+ unsigned char where, unsigned int *val);
+int pcibios_write_config_byte (unsigned char bus, unsigned char dev_fn,
+ unsigned char where, unsigned char val);
+int pcibios_write_config_word (unsigned char bus, unsigned char dev_fn,
+ unsigned char where, unsigned short val);
+int pcibios_write_config_dword (unsigned char bus, unsigned char dev_fn,
+ unsigned char where, unsigned int val);
+
+/* Don't use these in new code, use pci_find_... instead */
+
+int pcibios_find_class (unsigned int class_code, unsigned short index, unsigned char *bus, unsigned char *dev_fn);
+int pcibios_find_device (unsigned short vendor, unsigned short dev_id,
+ unsigned short index, unsigned char *bus,
+ unsigned char *dev_fn);
+
+/* Generic PCI interface functions */
+
void pci_init(void);
void pci_setup(char *str, int *ints);
void pci_quirks_init(void);
@@ -1137,6 +1157,8 @@ unsigned int pci_scan_bus(struct pci_bus *bus);
void pci_proc_init(void);
void proc_old_pci_init(void);
int get_pci_list(char *buf);
+int pci_proc_attach_device(struct pci_dev *dev);
+int pci_proc_detach_device(struct pci_dev *dev);
struct pci_dev *pci_find_device (unsigned int vendor, unsigned int device, struct pci_dev *from);
struct pci_dev *pci_find_class (unsigned int class, struct pci_dev *from);
@@ -1151,5 +1173,32 @@ int pci_write_config_word(struct pci_dev *dev, u8 where, u16 val);
int pci_write_config_dword(struct pci_dev *dev, u8 where, u32 val);
void pci_set_master(struct pci_dev *dev);
+#ifndef CONFIG_PCI
+/* If the system does not have PCI, clearly these return errors. Define
+ these as simple inline functions to avoid hair in drivers. */
+extern inline int pcibios_present(void) { return 0; }
+
+#define _PCI_NOP(o,s,t) \
+ extern inline int pcibios_##o##_config_##s## (u8 bus, u8 dfn, u8 where, t val) \
+ { return PCIBIOS_FUNC_NOT_SUPPORTED; } \
+ extern inline int pci_##o##_config_##s## (struct pci_dev *dev, u8 where, t val) \
+ { return PCIBIOS_FUNC_NOT_SUPPORTED; }
+#define _PCI_NOP_ALL(o,x) _PCI_NOP(o,byte,u8 x) \
+ _PCI_NOP(o,word,u16 x) \
+ _PCI_NOP(o,dword,u32 x)
+_PCI_NOP_ALL(read, *)
+_PCI_NOP_ALL(write,)
+
+extern inline struct pci_dev *pci_find_device(unsigned int vendor, unsigned int device, struct pci_dev *from)
+{ return NULL; }
+
+extern inline struct pci_dev *pci_find_class(unsigned int class, struct pci_dev *from)
+{ return NULL; }
+
+extern inline struct pci_dev *pci_find_slot(unsigned int bus, unsigned int devfn)
+{ return NULL; }
+
+#endif /* !CONFIG_PCI */
+
#endif /* __KERNEL__ */
#endif /* LINUX_PCI_H */
diff --git a/include/linux/personality.h b/include/linux/personality.h
index 67233278a..a927b9e71 100644
--- a/include/linux/personality.h
+++ b/include/linux/personality.h
@@ -23,9 +23,10 @@
#define PER_ISCR4 (0x0005 | STICKY_TIMEOUTS)
#define PER_BSD (0x0006)
#define PER_XENIX (0x0007 | STICKY_TIMEOUTS)
-#define PER_IRIX32 (0x0008 | STICKY_TIMEOUTS) /* IRIX5 32-bit */
-#define PER_IRIXN32 (0x0009 | STICKY_TIMEOUTS) /* IRIX6 new 32-bit */
-#define PER_IRIX64 (0x000a | STICKY_TIMEOUTS) /* IRIX6 64-bit */
+#define PER_LINUX32 (0x0008)
+#define PER_IRIX32 (0x0009 | STICKY_TIMEOUTS) /* IRIX5 32-bit */
+#define PER_IRIXN32 (0x000a | STICKY_TIMEOUTS) /* IRIX6 new 32-bit */
+#define PER_IRIX64 (0x000b | STICKY_TIMEOUTS) /* IRIX6 64-bit */
/* Prototype for an lcall7 syscall handler. */
typedef void (*lcall7_func)(struct pt_regs *);
diff --git a/include/linux/pg.h b/include/linux/pg.h
new file mode 100644
index 000000000..c752a97ca
--- /dev/null
+++ b/include/linux/pg.h
@@ -0,0 +1,63 @@
+/* pg.h (c) 1998 Grant R. Guenther <grant@torque.net>
+ Under the terms of the GNU public license
+
+
+ pg.h defines the user interface to the generic ATAPI packet
+ command driver for parallel port ATAPI devices (pg). The
+ driver is loosely modelled after the generic SCSI driver, sg,
+ although the actual interface is different.
+
+ The pg driver provides a simple character device interface for
+ sending ATAPI commands to a device. With the exception of the
+ ATAPI reset operation, all operations are performed by a pair
+ of read and write operations to the appropriate /dev/pgN device.
+ A write operation delivers a command and any outbound data in
+ a single buffer. Normally, the write will succeed unless the
+ device is offline or malfunctioning, or there is already another
+ command pending. If the write succeeds, it should be followed
+ immediately by a read operation, to obtain any returned data and
+ status information. A read will fail if there is no operation
+ in progress.
+
+ As a special case, the device can be reset with a write operation,
+ and in this case, no following read is expected, or permitted.
+
+ There are no ioctl() operations. Any single operation
+ may transfer at most PG_MAX_DATA bytes. Note that the driver must
+ copy the data through an internal buffer. In keeping with all
+ current ATAPI devices, command packets are assumed to be exactly
+ 12 bytes in length.
+
+ To permit future changes to this interface, the headers in the
+ read and write buffers contain a single character "magic" flag.
+ Currently this flag must be the character "P".
+
+*/
+
+#define PG_MAGIC 'P'
+#define PG_RESET 'Z'
+#define PG_COMMAND 'C'
+
+#define PG_MAX_DATA 32768
+
+struct pg_write_hdr {
+
+ char magic; /* == PG_MAGIC */
+ char func; /* PG_RESET or PG_COMMAND */
+ int dlen; /* number of bytes expected to transfer */
+ int timeout; /* number of seconds before timeout */
+ char packet[12]; /* packet command */
+
+};
+
+struct pg_read_hdr {
+
+ char magic; /* == PG_MAGIC */
+ char scsi; /* "scsi" status == sense key */
+ int dlen; /* size of device transfer request */
+ int duration; /* time in seconds command took */
+ char pad[12]; /* not used */
+
+};
+
+/* end of pg.h */
diff --git a/include/linux/poll.h b/include/linux/poll.h
index b849b5751..c4065bc12 100644
--- a/include/linux/poll.h
+++ b/include/linux/poll.h
@@ -79,8 +79,8 @@ int get_fd_set(unsigned long nr, void *ufdset, unsigned long *fdset)
if (ufdset) {
int error;
error = verify_area(VERIFY_WRITE, ufdset, nr);
- if (!error)
- error = __copy_from_user(fdset, ufdset, nr);
+ if (!error && __copy_from_user(fdset, ufdset, nr))
+ error = -EFAULT;
return error;
}
memset(fdset, 0, nr);
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
index b0d678156..8cde8f833 100644
--- a/include/linux/proc_fs.h
+++ b/include/linux/proc_fs.h
@@ -31,6 +31,7 @@ enum root_directory_inos {
PROC_MODULES,
PROC_STAT,
PROC_DEVICES,
+ PROC_PARTITIONS,
PROC_INTERRUPTS,
PROC_FILESYSTEMS,
PROC_KSYMS,
@@ -44,11 +45,11 @@ enum root_directory_inos {
PROC_MD,
PROC_RTC,
PROC_LOCKS,
- PROC_ZORRO,
PROC_HARDWARE,
PROC_SLABINFO,
PROC_PARPORT,
PROC_PPC_HTAB,
+ PROC_STRAM,
PROC_SOUND,
PROC_MTRR, /* whether enabled or not */
PROC_FS
@@ -74,7 +75,7 @@ enum pid_directory_inos {
};
enum pid_subdirectory_inos {
- PROC_PID_FD_DIR = 1
+ PROC_PID_FD_DIR = 0x8000, /* 0x8000-0xffff */
};
enum net_directory_inos {
@@ -108,6 +109,7 @@ enum net_directory_inos {
PROC_NET_AX25_ROUTE,
PROC_NET_AX25,
PROC_NET_AX25_CALLS,
+ PROC_NET_BMAC,
PROC_NET_NR_NODES,
PROC_NET_NR_NEIGH,
PROC_NET_NR,
@@ -135,8 +137,11 @@ enum net_directory_inos {
PROC_NET_DN_ADJ,
PROC_NET_DN_L1,
PROC_NET_DN_L2,
+ PROC_NET_DN_CACHE,
PROC_NET_DN_SKT,
PROC_NET_NETSTAT,
+ PROC_NET_IPFW_CHAINS,
+ PROC_NET_IPFW_CHAIN_NAMES,
PROC_NET_LAST
};
@@ -177,10 +182,13 @@ enum scsi_directory_inos {
PROC_SCSI_ESP,
PROC_SCSI_QLOGICPTI,
PROC_SCSI_AMIGA7XX,
+ PROC_SCSI_MVME16x,
+ PROC_SCSI_BVME6000,
PROC_SCSI_A3000,
PROC_SCSI_A2091,
PROC_SCSI_GVP11,
PROC_SCSI_ATARI,
+ PROC_SCSI_MAC,
PROC_SCSI_IDESCSI,
PROC_SCSI_SGIWD93,
PROC_SCSI_MESH,
@@ -204,16 +212,18 @@ enum mca_directory_inos {
enum bus_directory_inos {
PROC_BUS_PCI = PROC_MCA_LAST,
PROC_BUS_PCI_DEVICES,
+ PROC_BUS_ZORRO,
+ PROC_BUS_ZORRO_DEVICES,
PROC_BUS_LAST
};
enum fs_directory_inos {
- PROC_FS_CODA = PROC_MCA_LAST,
+ PROC_FS_CODA = PROC_BUS_LAST,
PROC_FS_LAST
};
enum fs_coda_directory_inos {
- PROC_VFS_STATS = PROC_MCA_LAST,
+ PROC_VFS_STATS = PROC_FS_LAST,
PROC_UPCALL_STATS,
PROC_PERMISSION_STATS,
PROC_CACHE_INV_STATS,
@@ -279,6 +289,7 @@ extern int (* dispatch_scsi_info_ptr) (int ino, char *buffer, char **start,
off_t offset, int length, int inout);
extern struct proc_dir_entry proc_root;
+extern struct proc_dir_entry proc_root_fs;
extern struct proc_dir_entry *proc_net;
extern struct proc_dir_entry *proc_scsi;
extern struct proc_dir_entry proc_sys;
diff --git a/include/linux/quota.h b/include/linux/quota.h
index 4c4de4eca..014685f4f 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * Version: $Id: quota.h,v 1.8 1995/03/11 11:43:07 mvw Exp mvw $
+ * Version: $Id: quota.h,v 2.0 1996/11/17 16:48:14 mvw Exp mvw $
*/
#ifndef _LINUX_QUOTA_
@@ -43,7 +43,6 @@
/*
* Convert diskblocks to blocks and the other way around.
- * currently only to fool the BSD source. :-)
*/
#define dbtob(num) (num << 10)
#define btodb(num) (num >> 10)
@@ -74,16 +73,20 @@
* Definitions for the default names of the quotas files.
*/
#define INITQFNAMES { \
- "user", /* USRQUOTA */ \
- "group", /* GRPQUOTA */ \
- "undefined", \
+ "user", /* USRQUOTA */ \
+ "group", /* GRPQUOTA */ \
+ "undefined", \
};
#define QUOTAFILENAME "quota"
#define QUOTAGROUP "staff"
-#define NR_DQHASH 43 /* Just an arbitrary number any suggestions ? */
-#define NR_DQUOTS 256 /* Number of quotas active at one time */
+extern int nr_dquots, nr_free_dquots;
+extern int max_dquots;
+extern int dquot_root_squash;
+
+#define NR_DQHASH 43 /* Just an arbitrary number */
+#define NR_DQUOTS 256 /* Maximum number of quotas active at one time (Configurable from /proc/sys/fs) */
/*
* Command definitions for the 'quotactl' system call.
@@ -103,6 +106,7 @@
#define Q_SYNC 0x0600 /* sync disk copy of a filesystems quotas */
#define Q_SETQLIM 0x0700 /* set limits */
#define Q_GETSTATS 0x0800 /* get collected stats */
+#define Q_RSQUASH 0x1000 /* set root_squash option */
/*
* The following structure defines the format of the disk quota file
@@ -110,14 +114,14 @@
* indexed by user or group number.
*/
struct dqblk {
- __u32 dqb_bhardlimit; /* absolute limit on disk blks alloc */
- __u32 dqb_bsoftlimit; /* preferred limit on disk blks */
- __u32 dqb_curblocks; /* current block count */
- __u32 dqb_ihardlimit; /* maximum # allocated inodes */
- __u32 dqb_isoftlimit; /* preferred inode limit */
- __u32 dqb_curinodes; /* current # allocated inodes */
- time_t dqb_btime; /* time limit for excessive disk use */
- time_t dqb_itime; /* time limit for excessive files */
+ __u32 dqb_bhardlimit; /* absolute limit on disk blks alloc */
+ __u32 dqb_bsoftlimit; /* preferred limit on disk blks */
+ __u32 dqb_curblocks; /* current block count */
+ __u32 dqb_ihardlimit; /* absolute limit on allocated inodes */
+ __u32 dqb_isoftlimit; /* preferred inode limit */
+ __u32 dqb_curinodes; /* current # allocated inodes */
+ time_t dqb_btime; /* time limit for excessive disk use */
+ time_t dqb_itime; /* time limit for excessive inode use */
};
/*
@@ -135,21 +139,18 @@ struct dqblk {
#define dqoff(UID) ((loff_t)((UID) * sizeof (struct dqblk)))
struct dqstats {
- __u32 lookups;
- __u32 drops;
- __u32 reads;
- __u32 writes;
- __u32 cache_hits;
- __u32 pages_allocated;
- __u32 allocated_dquots;
- __u32 free_dquots;
- __u32 syncs;
+ __u32 lookups;
+ __u32 drops;
+ __u32 reads;
+ __u32 writes;
+ __u32 cache_hits;
+ __u32 allocated_dquots;
+ __u32 free_dquots;
+ __u32 syncs;
};
#ifdef __KERNEL__
-#include <linux/mount.h>
-
/*
* Maximum length of a message generated in the quota system,
* that needs to be kicked onto the tty.
@@ -164,18 +165,19 @@ struct dqstats {
#define DQ_FAKE 0x40 /* no limits only usage */
struct dquot {
- unsigned int dq_id; /* id this applies to (uid, gid) */
- short dq_type; /* type of quota */
- kdev_t dq_dev; /* Device this applies to */
- short dq_flags; /* see DQ_* */
- short dq_count; /* reference count */
- struct vfsmount *dq_mnt; /* vfsmountpoint this applies to */
- struct dqblk dq_dqb; /* diskquota usage */
- struct wait_queue *dq_wait; /* pointer to waitqueue */
- struct dquot *dq_prev; /* pointer to prev dquot */
- struct dquot *dq_next; /* pointer to next dquot */
- struct dquot *dq_hash_prev; /* pointer to prev dquot */
- struct dquot *dq_hash_next; /* pointer to next dquot */
+ unsigned int dq_id; /* ID this applies to (uid, gid) */
+ short dq_type; /* Type of quota */
+ kdev_t dq_dev; /* Device this applies to */
+ short dq_flags; /* See DQ_* */
+ short dq_count; /* Reference count */
+ unsigned long dq_referenced; /* Number of times this dquot was referenced during its lifetime */
+ struct vfsmount *dq_mnt; /* VFS_mount_point this applies to */
+ struct dqblk dq_dqb; /* Diskquota usage */
+ struct wait_queue *dq_wait; /* Pointer to waitqueue */
+ struct dquot *dq_next; /* Pointer to next dquot */
+ struct dquot *dq_hash_next; /* Pointer to next in dquot_hash */
+ struct dquot **dq_hash_pprev; /* Pointer to previous in dquot_hash */
+ struct dquot **dq_pprev;
};
#define NODQUOT (struct dquot *)NULL
@@ -191,22 +193,6 @@ struct dquot {
#define QUOTA_OK 0
#define NO_QUOTA 1
-/*
- * declaration of quota_function calls in kernel.
- */
-
-extern void dquot_initialize(struct inode *inode, short type);
-extern void dquot_drop(struct inode *inode);
-extern int dquot_alloc_block(const struct inode *inode, unsigned long number);
-extern int dquot_alloc_inode(const struct inode *inode, unsigned long number);
-extern void dquot_free_block(const struct inode *inode, unsigned long number);
-extern void dquot_free_inode(const struct inode *inode, unsigned long number);
-extern int dquot_transfer(struct inode *inode, struct iattr *iattr, char direction);
-
-extern void invalidate_dquots(kdev_t dev, short type);
-extern int quota_off(kdev_t dev, short type);
-extern int sync_dquots(kdev_t dev, short type);
-
#else
# /* nodep */ include <sys/cdefs.h>
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h
new file mode 100644
index 000000000..a2a00a04c
--- /dev/null
+++ b/include/linux/quotaops.h
@@ -0,0 +1,140 @@
+/*
+ * Definitions for diskquota-operations. When diskquota is configured these
+ * macros expand to the right source-code.
+ *
+ * Author: Marco van Wieringen <mvw@planets.elm.net>
+ *
+ * Version: $Id: quotaops.h,v 1.2 1998/01/15 16:22:26 ecd Exp $
+ *
+ */
+#ifndef _LINUX_QUOTAOPS_
+#define _LINUX_QUOTAOPS_
+
+#include <linux/config.h>
+
+#if defined(CONFIG_QUOTA)
+
+/*
+ * declaration of quota_function calls in kernel.
+ */
+extern void dquot_initialize(struct inode *inode, short type);
+extern void dquot_drop(struct inode *inode);
+extern void invalidate_dquots(kdev_t dev, short type);
+extern int quota_off(kdev_t dev, short type);
+extern int sync_dquots(kdev_t dev, short type);
+
+extern int dquot_alloc_block(const struct inode *inode, unsigned long number,
+ uid_t initiator, char warn);
+extern int dquot_alloc_inode(const struct inode *inode, unsigned long number,
+ uid_t initiator);
+
+extern void dquot_free_block(const struct inode *inode, unsigned long number);
+extern void dquot_free_inode(const struct inode *inode, unsigned long number);
+
+extern int dquot_transfer(struct inode *inode, struct iattr *iattr,
+ char direction, uid_t initiator);
+
+/*
+ * Operations supported for diskquotas.
+ */
+extern __inline__ void DQUOT_INIT(struct inode *inode)
+{
+ if (inode->i_sb && inode->i_sb->dq_op)
+ inode->i_sb->dq_op->initialize(inode, -1);
+}
+
+extern __inline__ void DQUOT_DROP(struct inode *inode)
+{
+ if (IS_QUOTAINIT(inode)) {
+ if (inode->i_sb && inode->i_sb->dq_op)
+ inode->i_sb->dq_op->drop(inode);
+ }
+}
+
+extern __inline__ int DQUOT_PREALLOC_BLOCK(struct super_block *sb, const struct inode *inode, int nr)
+{
+ if (sb->dq_op) {
+ if (sb->dq_op->alloc_block(inode, fs_to_dq_blocks(nr, sb->s_blocksize),
+ current->euid, 0) == NO_QUOTA)
+ return 1;
+ }
+ return 0;
+}
+
+extern __inline__ int DQUOT_ALLOC_BLOCK(struct super_block *sb, const struct inode *inode, int nr)
+{
+ if (sb->dq_op) {
+ if (sb->dq_op->alloc_block(inode, fs_to_dq_blocks(nr, sb->s_blocksize),
+ current->euid, 1) == NO_QUOTA)
+ return 1;
+ }
+ return 0;
+}
+
+extern __inline__ int DQUOT_ALLOC_INODE(struct super_block *sb, struct inode *inode)
+{
+ if (sb->dq_op) {
+ sb->dq_op->initialize (inode, -1);
+ if (sb->dq_op->alloc_inode (inode, 1, current->euid))
+ return 1;
+ }
+ inode->i_flags |= S_QUOTA;
+ return 0;
+}
+
+extern __inline__ void DQUOT_FREE_BLOCK(struct super_block *sb, const struct inode *inode, int nr)
+{
+ if (sb->dq_op)
+ sb->dq_op->free_block(inode, fs_to_dq_blocks(nr, sb->s_blocksize));
+}
+
+extern __inline__ void DQUOT_FREE_INODE(struct super_block *sb, struct inode *inode)
+{
+ if (sb->dq_op)
+ sb->dq_op->free_inode(inode, 1);
+}
+
+extern __inline__ int DQUOT_TRANSFER(struct dentry *dentry, struct iattr *iattr)
+{
+ int error = -EDQUOT;
+
+ if (dentry->d_inode->i_sb->dq_op) {
+ if (IS_QUOTAINIT(dentry->d_inode) == 0)
+ dentry->d_inode->i_sb->dq_op->initialize(dentry->d_inode, -1);
+ if (dentry->d_inode->i_sb->dq_op->transfer(dentry->d_inode, iattr, 0, current->euid))
+ goto out;
+ error = notify_change(dentry, iattr);
+ if (error)
+ dentry->d_inode->i_sb->dq_op->transfer(dentry->d_inode, iattr, 1, current->euid);
+ } else {
+ error = notify_change(dentry, iattr);
+ }
+out:
+ return error;
+}
+
+#define DQUOT_SYNC(dev) sync_dquots(dev, -1)
+#define DQUOT_OFF(dev) quota_off(dev, -1)
+
+#else
+
+/*
+ * NO-OP when quota not configured.
+ */
+#define DQUOT_INIT(inode) do { } while(0)
+#define DQUOT_DROP(inode) do { } while(0)
+#define DQUOT_PREALLOC_BLOCK(sb, inode, nr) (0)
+#define DQUOT_ALLOC_BLOCK(sb, inode, nr) (0)
+#define DQUOT_ALLOC_INODE(sb, inode) (0)
+#define DQUOT_FREE_BLOCK(sb, inode, nr) do { } while(0)
+#define DQUOT_FREE_INODE(sb, inode) do { } while(0)
+#define DQUOT_SYNC(dev) do { } while(0)
+#define DQUOT_OFF(dev) do { } while(0)
+
+/*
+ * Special case expands to a simple notify_change.
+ */
+#define DQUOT_TRANSFER(dentry, iattr) notify_change(dentry, iattr)
+
+#endif /* CONFIG_QUOTA */
+#endif /* _LINUX_QUOTAOPS_ */
diff --git a/include/linux/radio.h b/include/linux/radio.h
deleted file mode 100644
index 5d6a88537..000000000
--- a/include/linux/radio.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * linux/radio.h
- *
- * Include for radio card support under linux
- * Another pointless suid-binary removal utility... :-)
- */
-
-#ifndef _LINUX_RADIO_H
-#define _LINUX_RADIO_H
-
-#include <linux/ioctl.h>
-
-/*
- * Constants
- */
-/* Various types of Radio card... */
-/* (NB. I've made this a bit-field. It might make the difference one day.) */
-#define RADIO_TYPE_UNSUP 0x0000
-#define RADIO_TYPE_RTRACK 0x0001 /* AIMSlab RadioTrack (RadioReveal) card -- basic, to say the least */
-#define RADIO_TYPE_WINRADIO 0x0002 /* Dunno, but made by someone */
-#define RADIO_TYPE_TYPHOON 0x0004 /* It exists... */
-
-/* waveband types */
-#define RADIO_PROTOCOL_AM 0x0010 /* AM "protocol" */
-#define RADIO_PROTOCOL_FM 0x0020 /* FM "protocol" */
-#define RADIO_PROTOCOL_SSB 0x0040 /* SSB */
-/* and no doubt some other stuff, too (Brian?) */
-
-
-/* the following are _very_ inaccurate; essentially, all that
- * they do is provide a "name" for client programs
- */
-#define RADIO_BAND_UNKNOWN 0x0000 /* other */
-#define RADIO_BAND_AM_SW 0x0100 /* short wave (?) */
-#define RADIO_BAND_AM_MW 0x0200 /* medium wave (540 - 1600) */
-#define RADIO_BAND_AM_LW 0x0400 /* long wave (150 - 270) */
-#define RADIO_BAND_FM_STD 0x1000 /* "standard" FM band (i.e. 88 - 108 or so) */
-
-
-/* Since floating-point stuff is illegal in the kernel, we use these
- * pairs of macros to convert to, and from userland floats
- * (I hope these are general enough!)
- */
-/* Remember to make sure that all of these are integral... */
-/* Also remember to pass sensible things in here (MHz for FM, kHz for AM) */
-#define RADIO_FM_RES 100 /* 0.01 MHZ */
-#define RADIO_FM_FRTOINT(fl) ((int)(((float)(fl))*RADIO_FM_RES))
-#define RADIO_FM_INTTOFR(fr) ((float)(((int)(fr))/RADIO_FM_RES))
-
-/* Old RadioTrack definitions
-#define RADIO_FM_FRTOINT(fl) ((int)(((float)(fl)-88.0)*40)+0xf6c)
-#define RADIO_FM_INTTOFR(fr) ((float)(((fr)-0xf6c)/40)+88.0)
-*/
-
-#define RADIO_AM_RES 1 /* 1 kHz */
-#define RADIO_AM_FRTOINT(fl) ((int)(((float)(fl))*RADIO_AM_RES))
-#define RADIO_AM_INTTOFR(fr) ((float)(((int)(fr))/RADIO_AM_RES))
-
-
-/*
- * Structures
- */
-/* query structures */
-struct radio_cap {
- int dev_num; /* device index */
- int type; /* device type (see above) */
- int num_bwidths; /* number of "bandwidths" supported */
- int volmin, volmax; /* min/max in steps of one */
-};
-
-struct radio_band {
- int dev_num; /* device index (IN) */
- int index; /* "bandwidth" index (IN) */
- int proto; /* protocol (AM, FM, SSB, etc) (OUT) */
- int types; /* see RADIO_BAND_* above */
- int freqmin,freqmax; /* encoded according to the macros above */
- int strmin,strmax; /* min/max signal strength (steps of 1) */
-};
-
-/* Previously, this was in four separate structures:
- * radio_vol, radio_freq, radio_band and radio_sigstr,
- * That was foolish, but now it's not so obvious what's going on.
- * Be careful.
- */
-
-struct radio_ctl {
- int dev_num; /* device index (IN) */
- int value; /* volume, frequency, band, sigstr */
-};
-
-
-/*
- * ioctl numbers
- */
-/* You have _how_ many radio devices? =) */
-#define RADIO_NUMDEVS _IOR(0x8c, 0x00, int)
-#define RADIO_GETCAPS _IOR(0x8c, 0x01, struct radio_cap)
-#define RADIO_GETBNDCAP _IOR(0x8c, 0x02, struct radio_band)
-
-#define RADIO_SETVOL _IOW(0x8c, 0x10, struct radio_ctl)
-#define RADIO_GETVOL _IOR(0x8c, 0x11, struct radio_ctl)
-#define RADIO_SETBAND _IOW(0x8c, 0x12, struct radio_ctl)
-#define RADIO_GETBAND _IOR(0x8c, 0x13, struct radio_ctl)
-#define RADIO_SETFREQ _IOW(0x8c, 0x14, struct radio_ctl)
-#define RADIO_GETFREQ _IOR(0x8c, 0x15, struct radio_ctl)
-
-#define RADIO_GETSIGSTR _IOR(0x8c, 0x30, struct radio_ctl)
-
-/* kernel specific stuff... */
-#ifdef __KERNEL__
-/* Try to keep the number of function pointers to a minimum.
- * Devices are responsible for updating, or otherwise, the
- * variables here, not the outside wrapper.
- */
-struct radio_device;
-
-int radio_add_device(struct radio_device *newdev);
-
-struct radio_device {
- struct radio_cap *cap;
- struct radio_band *bands; /* pointer to array of radio_bands */
- int (*setvol)(struct radio_device*,int);
- int curvol;
- int (*setband)(struct radio_device*,int);
- int curband;
- int (*setfreq)(struct radio_device*,int);
- int curfreq;
- int (*getsigstr)(struct radio_device*);
- struct radio_device *next;
- void *misc; /* device internal storage... (eg i/o addresses, etc */
-};
-#endif /* __KERNEL__ */
-
-#endif /* _LINUX_RADIO_H */
diff --git a/include/linux/raid1.h b/include/linux/raid1.h
index 2f4e525b8..4b031e682 100644
--- a/include/linux/raid1.h
+++ b/include/linux/raid1.h
@@ -37,8 +37,8 @@ struct raid1_data {
struct raid1_bh {
unsigned int remaining;
- unsigned int state;
int cmd;
+ unsigned long state;
struct md_dev *mddev;
struct buffer_head *master_bh;
struct buffer_head *mirror_bh [MD_SB_DISKS];
diff --git a/include/linux/raid5.h b/include/linux/raid5.h
index 214f49de1..5efd211a2 100644
--- a/include/linux/raid5.h
+++ b/include/linux/raid5.h
@@ -30,7 +30,7 @@ struct stripe_head {
int size; /* buffers size */
int pd_idx; /* parity disk index */
int nr_pending; /* nr of pending cmds */
- __u32 state; /* state flags */
+ unsigned long state; /* state flags */
int cmd; /* stripe cmd */
int count; /* nr of waiters */
int write_method; /* reconstruct-write / read-modify-write */
diff --git a/include/linux/random.h b/include/linux/random.h
index 7be5e9898..58c93b9b6 100644
--- a/include/linux/random.h
+++ b/include/linux/random.h
@@ -56,7 +56,13 @@ extern void get_random_bytes(void *buf, int nbytes);
extern __u32 secure_tcp_sequence_number(__u32 saddr, __u32 daddr,
__u16 sport, __u16 dport);
extern __u32 secure_tcp_syn_cookie(__u32 saddr, __u32 daddr,
- __u16 sport, __u16 dport, __u32 sseq, __u32 count);
+ __u16 sport, __u16 dport,
+ __u32 sseq, __u32 count,
+ __u32 data);
+extern __u32 check_tcp_syn_cookie(__u32 cookie, __u32 saddr,
+ __u32 daddr, __u16 sport,
+ __u16 dport, __u32 sseq,
+ __u32 count, __u32 maxdiff);
#ifndef MODULE
extern struct file_operations random_fops, urandom_fops;
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
index b0efb81a9..4c8adc508 100644
--- a/include/linux/rtnetlink.h
+++ b/include/linux/rtnetlink.h
@@ -658,7 +658,7 @@ extern __inline__ void rtnl_shunlock(void)
atomic_dec(&rtnl_rlockct);
if (atomic_read(&rtnl_rlockct) <= 1) {
wake_up(&rtnl_wait);
- if (rtnl->receive_queue.qlen)
+ if (rtnl && rtnl->receive_queue.qlen)
rtnl->data_ready(rtnl, 0);
}
}
@@ -672,7 +672,7 @@ extern __inline__ void rtnl_shunlock(void)
atomic_dec(&rtnl_rlockct); \
if (atomic_read(&rtnl_rlockct) <= 1) { \
wake_up(&rtnl_wait); \
- if (rtnl->receive_queue.qlen) \
+ if (rtnl && rtnl->receive_queue.qlen) \
rtnl->data_ready(rtnl, 0); \
} \
})
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 8666a6460..7c9112136 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -32,6 +32,7 @@ extern unsigned long event;
#define CLONE_FILES 0x00000400 /* set if open files shared between processes */
#define CLONE_SIGHAND 0x00000800 /* set if signal handlers shared */
#define CLONE_PID 0x00001000 /* set if pid shared */
+#define CLONE_PTRACE 0x00002000 /* set if we want to let tracing continue on the child too */
/*
* These are the constant used to fake the fixed-point load-average
@@ -126,7 +127,7 @@ asmlinkage void schedule(void);
* Open file table structure
*/
struct files_struct {
- int count;
+ atomic_t count;
int max_fds;
struct file ** fd; /* current fd array */
fd_set close_on_exec;
@@ -134,7 +135,7 @@ struct files_struct {
};
#define INIT_FILES { \
- 1, \
+ ATOMIC_INIT(1), \
NR_OPEN, \
&init_fd_array[0], \
{ { 0, } }, \
@@ -142,13 +143,13 @@ struct files_struct {
}
struct fs_struct {
- int count;
+ atomic_t count;
int umask;
struct dentry * root, * pwd;
};
#define INIT_FS { \
- 1, \
+ ATOMIC_INIT(1), \
0022, \
NULL, NULL \
}
@@ -159,7 +160,8 @@ struct fs_struct {
struct mm_struct {
struct vm_area_struct *mmap, *mmap_cache;
pgd_t * pgd;
- int count, map_count;
+ atomic_t count;
+ int map_count;
struct semaphore mmap_sem;
unsigned long context;
unsigned long start_code, end_code, start_data, end_data;
@@ -176,7 +178,8 @@ struct mm_struct {
};
#define INIT_MM { \
- &init_mmap, NULL, swapper_pg_dir, 1, 1, \
+ &init_mmap, NULL, swapper_pg_dir, \
+ ATOMIC_INIT(1), 1, \
MUTEX, \
0, \
0, 0, 0, 0, \
@@ -197,6 +200,13 @@ struct signal_struct {
{ {{0,}}, }, \
SPIN_LOCK_UNLOCKED }
+/*
+ * Some day this will be a full-fledged user tracking system..
+ * Right now it is only used to track how many processes a
+ * user has, but it has the potential to track memory usage etc.
+ */
+struct user_struct;
+
struct task_struct {
/* these are hardcoded - don't touch */
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
@@ -207,14 +217,21 @@ struct task_struct {
0-0xFFFFFFFF for kernel-thread
*/
struct exec_domain *exec_domain;
+ long need_resched;
/* various fields */
- long debugreg[8]; /* Hardware debugging registers */
long counter;
long priority;
- struct linux_binfmt *binfmt;
+/* SMP and runqueue state */
+ int has_cpu;
+ int processor;
+ int last_processor;
+ int lock_depth; /* Lock depth. We can context switch in and out of holding a syscall kernel lock... */
struct task_struct *next_task, *prev_task;
struct task_struct *next_run, *prev_run;
+
+/* task state */
+ struct linux_binfmt *binfmt;
int exit_code, exit_signal;
int pdeath_signal; /* The signal sent when the parent dies */
/* ??? */
@@ -262,6 +279,7 @@ struct task_struct {
int ngroups;
gid_t groups[NGROUPS];
kernel_cap_t cap_effective, cap_inheritable, cap_permitted;
+ struct user_struct *user;
/* limits */
struct rlimit rlim[RLIM_NLIMITS];
unsigned short used_math;
@@ -281,16 +299,12 @@ struct task_struct {
/* memory management info */
struct mm_struct *mm;
/* signal handlers */
+ spinlock_t sigmask_lock; /* Protects signal and blocked */
struct signal_struct *sig;
sigset_t signal, blocked;
struct signal_queue *sigqueue, **sigqueue_tail;
-/* SMP state */
- int has_cpu;
- int processor;
- int last_processor;
- int lock_depth; /* Lock depth. We can context switch in and out of holding a syscall kernel lock... */
- /* Spinlocks for various pieces or per-task state. */
- spinlock_t sigmask_lock; /* Protects signal and blocked */
+ unsigned long sas_ss_sp;
+ size_t sas_ss_size;
};
/*
@@ -306,10 +320,10 @@ struct task_struct {
#define PF_SUPERPRIV 0x00000100 /* used super-user privileges */
#define PF_DUMPCORE 0x00000200 /* dumped core */
#define PF_SIGNALED 0x00000400 /* killed by a signal */
+#define PF_MEMALLOC 0x00000800 /* Allocating memory */
#define PF_USEDFPU 0x00100000 /* task used FPU this quantum (SMP) */
#define PF_DTRACE 0x00200000 /* delayed trace (used on m68k) */
-#define PF_ONSIGSTK 0x00400000 /* works on signal stack (m68k only) */
/*
* Limit the stack by to some sane default: root can always
@@ -319,26 +333,16 @@ struct task_struct {
#define DEF_PRIORITY (20*HZ/100) /* 200 ms time slices */
-/* Note: This is very ugly I admit. But some versions of gcc will
- * dump core when an empty structure constant is parsed at
- * the end of a large top level structure initialization. -DaveM
- */
-#ifdef __SMP__
-#define INIT_LOCKS SPIN_LOCK_UNLOCKED
-#else
-#define INIT_LOCKS
-#endif
-
/*
* INIT_TASK is used to set up the first task table, touch at
* your own risk!. Base=0, limit=0x1fffff (=2MB)
*/
#define INIT_TASK \
-/* state etc */ { 0,0,0,KERNEL_DS,&default_exec_domain, \
-/* debugregs */ { 0, }, \
+/* state etc */ { 0,0,0,KERNEL_DS,&default_exec_domain,0, \
/* counter */ DEF_PRIORITY,DEF_PRIORITY, \
-/* binfmt */ NULL, \
+/* SMP */ 0,0,0,-1, \
/* schedlink */ &init_task,&init_task, &init_task, &init_task, \
+/* binfmt */ NULL, \
/* ec,brk... */ 0,0,0,0,0,0, \
/* pid etc.. */ 0,0,0,0,0, \
/* proc links*/ &init_task,&init_task,NULL,NULL,NULL, \
@@ -348,13 +352,14 @@ struct task_struct {
/* timeout */ 0,SCHED_OTHER,0,0,0,0,0,0,0, \
/* timer */ { NULL, NULL, 0, 0, it_real_fn }, \
/* utime */ {0,0,0,0},0, \
-/* per cpu times */ {0, }, {0, }, \
+/* per CPU times */ {0, }, {0, }, \
/* flt */ 0,0,0,0,0,0, \
/* swp */ 0,0,0,0,0, \
/* process credentials */ \
/* uid etc */ 0,0,0,0,0,0,0,0, \
/* suppl grps*/ 0, {0,}, \
/* caps */ CAP_INIT_EFF_SET,CAP_INIT_INH_SET,CAP_FULL_SET, \
+/* user */ NULL, \
/* rlimits */ INIT_RLIMITS, \
/* math */ 0, \
/* comm */ "swapper", \
@@ -364,9 +369,7 @@ struct task_struct {
/* fs */ &init_fs, \
/* files */ &init_files, \
/* mm */ &init_mm, \
-/* signals */ &init_signals, {{0}}, {{0}}, NULL, &init_task.sigqueue, \
-/* SMP */ 0,0,0,0, \
-/* locks */ INIT_LOCKS \
+/* signals */ SPIN_LOCK_UNLOCKED, &init_signals, {{0}}, {{0}}, NULL, &init_task.sigqueue, 0, 0, \
}
union task_union {
@@ -378,7 +381,6 @@ extern union task_union init_task_union;
extern struct mm_struct init_mm;
extern struct task_struct *task[NR_TASKS];
-extern struct task_struct *last_task_used_math;
extern struct task_struct **tarray_freelist;
extern spinlock_t taskslot_lock;
@@ -437,7 +439,8 @@ extern __inline__ struct task_struct *find_task_by_pid(int pid)
}
/* per-UID process charging. */
-extern int charge_uid(struct task_struct *p, int count);
+extern int alloc_uid(struct task_struct *p);
+void free_uid(struct task_struct *p);
#include <asm/current.h>
@@ -445,7 +448,6 @@ extern unsigned long volatile jiffies;
extern unsigned long itimer_ticks;
extern unsigned long itimer_next;
extern struct timeval xtime;
-extern int need_resched;
extern void do_timer(struct pt_regs *);
extern unsigned int * prof_buffer;
@@ -482,6 +484,7 @@ extern int kill_sl(pid_t, int, int);
extern int kill_proc(pid_t, int, int);
extern int do_sigaction(int sig, const struct k_sigaction *act,
struct k_sigaction *oact);
+extern int do_sigaltstack(const stack_t *ss, stack_t *oss, unsigned long sp);
extern inline int signal_pending(struct task_struct *p)
{
@@ -519,6 +522,20 @@ static inline void recalc_sigpending(struct task_struct *t)
t->sigpending = (ready != 0);
}
+/* True if we are on the alternate signal stack. */
+
+static inline int on_sig_stack(unsigned long sp)
+{
+ return (sp >= current->sas_ss_sp
+ && sp < current->sas_ss_sp + current->sas_ss_size);
+}
+
+static inline int sas_ss_flags(unsigned long sp)
+{
+ return (current->sas_ss_size == 0 ? SS_DISABLE
+ : on_sig_stack(sp) ? SS_ONSTACK : 0);
+}
+
extern int request_irq(unsigned int irq,
void (*handler)(int, void *, struct pt_regs *),
unsigned long flags,
@@ -566,7 +583,7 @@ extern inline int fsuser(void)
extern inline int capable(int cap)
{
-#if 0 /* not yet */
+#if 1 /* ok now */
if (cap_raised(current->cap_effective, cap))
#else
if (cap_is_fs_cap(cap) ? current->fsuid == 0 : current->euid == 0)
@@ -584,7 +601,7 @@ extern inline int capable(int cap)
extern struct mm_struct * mm_alloc(void);
static inline void mmget(struct mm_struct * mm)
{
- mm->count++;
+ atomic_inc(&mm->count);
}
extern void mmput(struct mm_struct *);
diff --git a/include/linux/sdla_x25.h b/include/linux/sdla_x25.h
index 4c0f43725..58214a089 100644
--- a/include/linux/sdla_x25.h
+++ b/include/linux/sdla_x25.h
@@ -18,7 +18,7 @@
/*----------------------------------------------------------------------------
* Notes:
* ------
- * 1. All structures defined in this file are byte-alined. To ensure
+ * 1. All structures defined in this file are byte-aligned. To ensure
* portability of this code between different platforms and compilers, one
* of the following defines must be defined before including this file:
*
@@ -104,7 +104,7 @@ typedef struct X25Cmd
#define X25_READ 0x22 /* read X.25 packet */
#define X25_WRITE 0x23 /* send X.25 packet */
#define X25_PLACE_CALL 0x30 /* place a call on SVC */
-#define X25_ACCEPT_CALL 0x31 /* accept incomming call */
+#define X25_ACCEPT_CALL 0x31 /* accept incoming call */
#define X25_CLEAR_CALL 0x32 /* clear call */
#define X25_CLEAR_CONFRM 0x33 /* send clear confirmation packet */
#define X25_RESET 0x34 /* send reset request packet */
@@ -116,14 +116,14 @@ typedef struct X25Cmd
#define X25_REGISTRATION_RQST 0x3A /* send registration request packet */
#define X25_REGISTRATION_CONFRM 0x3B /* send registration confirmation */
#define X25_IS_DATA_AVAILABLE 0x40 /* querry receive queue */
-#define X25_INCOMMING_CALL_CTL 0x41 /* select incomming call options */
+#define X25_INCOMING_CALL_CTL 0x41 /* select incoming call options */
#define X25_CONFIGURE_PVC 0x42 /* configure PVC */
#define X25_GET_ACTIVE_CHANNELS 0x43 /* get a list of active circuits */
#define X25_READ_CHANNEL_CONFIG 0x44 /* read virt. circuit configuration */
#define X25_FLUSH_DATA_BUFFERS 0x45 /* flush X.25-level data buffers */
#define X25_READ_HISTORY_TABLE 0x46 /* read asynchronous event log */
#define X25_HISTORY_TABLE_CTL 0x47 /* control asynchronous event log */
-#define X25_GET_TX_D_BIT_STATUS 0x48 /* is packet with D-bit acknowleged */
+#define X25_GET_TX_D_BIT_STATUS 0x48 /* is packet with D-bit acknowledged */
#define X25_READ_STATISTICS 0x49 /* read X.25-level statistics */
#define X25_FLUSH_STATISTICS 0x4A /* flush X.25-level statistics */
#define X25_READ_CONFIGURATION 0x50 /* read HDLC & X.25 configuration */
@@ -139,7 +139,7 @@ typedef struct X25Cmd
#define X25RES_LINK_CLOSED 0x03
#define X25RES_INVAL_LENGTH 0x04
#define X25RES_INVAL_CMD 0x05
-#define X25RES_UNNUMBERED_FRAME 0x06 /* unnunbered frame received */
+#define X25RES_UNNUMBERED_FRAME 0x06 /* unnumbered frame received */
#define X25RES_FRM_REJECT_MODE 0x07 /* link is in Frame Reject mode */
#define X25RES_MODEM_FAILURE 0x08 /* DCD and/or CTS dropped */
#define X25RES_N2_RETRY_LIMIT 0x09 /* N2 retry limit has been exceeded */
@@ -153,10 +153,10 @@ typedef struct X25Cmd
#define X25RES_INVAL_FORMAT 0x37 /* invalid packet format */
#define X25RES_D_BIT_NOT_SUPPRT 0x38 /* D-bit pragmatics not supported */
#define X25RES_FACIL_NOT_SUPPRT 0x39 /* Call facility not supported */
-#define X25RES_INVAL_CALL_ARG 0x3A /* errorneous call arguments */
-#define X25RES_INVAL_CALL_DATA 0x3B /* errorneous call user data */
+#define X25RES_INVAL_CALL_ARG 0x3A /* erroneous call arguments */
+#define X25RES_INVAL_CALL_DATA 0x3B /* erroneous call user data */
#define X25RES_ASYNC_PACKET 0x40 /* asynchronous packet received */
-#define X25RES_PROTO_VIOLATION 0x41 /* protocol violation occured */
+#define X25RES_PROTO_VIOLATION 0x41 /* protocol violation occurred */
#define X25RES_PKT_TIMEOUT 0x42 /* X.25 packet time out */
#define X25RES_PKT_RETRY_LIMIT 0x43 /* X.25 packet retry limit exceeded */
/*----- Command-dependent results -----*/
@@ -167,7 +167,7 @@ typedef struct X25Cmd
#define X25RES_LINK_IS_OPEN 0x01 /* HDLC_LINK_OPEN */
#define X25RES_LINK_IS_DISC 0x02 /* HDLC_LINK_DISC */
#define X25RES_LINK_IS_CLOSED 0x03 /* HDLC_LINK_CLOSE */
-#define X25RES_INVAL_PARAM 0x31 /* INCOMMING_CALL_CTL */
+#define X25RES_INVAL_PARAM 0x31 /* INCOMING_CALL_CTL */
#define X25RES_INVAL_CONFIG 0x35 /* REGISTR_RQST/CONFRM */
/*
@@ -239,7 +239,7 @@ typedef struct X25TimeStamp
typedef struct X25Status
{
unsigned short pvc_map PACKED; /* 00h: PVC map */
- unsigned short icc_map PACKED; /* 02h: Incomming Chan. map */
+ unsigned short icc_map PACKED; /* 02h: Incoming Chan. map */
unsigned short twc_map PACKED; /* 04h: Two-way Cnan. map */
unsigned short ogc_map PACKED; /* 06h: Outgoing Chan. map */
TX25TimeStamp tstamp PACKED; /* 08h: timestamp (BCD) */
@@ -256,7 +256,7 @@ typedef struct X25Status
#define X25_RX_INTR 0x01 /* receive interrupt */
#define X25_TX_INTR 0x02 /* transmit interrupt */
#define X25_MODEM_INTR 0x04 /* modem status interrupt (CTS/DCD) */
-#define X25_EVENT_INTR 0x10 /* asyncronous event encountered */
+#define X25_EVENT_INTR 0x10 /* asynchronous event encountered */
#define X25_CMD_INTR 0x08 /* interface command complete */
/*
@@ -390,8 +390,8 @@ typedef struct X25Config
unsigned short pktMTU PACKED; /* 0Fh: */
unsigned short loPVC PACKED; /* 11h: */
unsigned short hiPVC PACKED; /* 13h: */
- unsigned short loIncommingSVC PACKED; /* 15h: */
- unsigned short hiIncommingSVC PACKED; /* 17h: */
+ unsigned short loIncomingSVC PACKED; /* 15h: */
+ unsigned short hiIncomingSVC PACKED; /* 17h: */
unsigned short loTwoWaySVC PACKED; /* 19h: */
unsigned short hiTwoWaySVC PACKED; /* 1Bh: */
unsigned short loOutgoingSVC PACKED; /* 1Dh: */
@@ -421,8 +421,8 @@ typedef struct X25ChanAlloc /*----- Channel allocation -*/
{
unsigned short loPVC PACKED; /* 00h: lowest PVC number */
unsigned short hiPVC PACKED; /* 02h: highest PVC number */
- unsigned short loIncommingSVC PACKED; /* 04h: lowest incoming SVC */
- unsigned short hiIncommingSVC PACKED; /* 06h: highest incoming SVC */
+ unsigned short loIncomingSVC PACKED; /* 04h: lowest incoming SVC */
+ unsigned short hiIncomingSVC PACKED; /* 06h: highest incoming SVC */
unsigned short loTwoWaySVC PACKED; /* 08h: lowest two-way SVC */
unsigned short hiTwoWaySVC PACKED; /* 0Ah: highest two-way SVC */
unsigned short loOutgoingSVC PACKED; /* 0Ch: lowest outgoing SVC */
@@ -499,7 +499,7 @@ typedef struct X25EventLog
/*
* Defines for the 'type' field.
*/
-#define X25LOG_INCOMMING 0x00
+#define X25LOG_INCOMING 0x00
#define X25LOG_APPLICATION 0x01
#define X25LOG_AUTOMATIC 0x02
#define X25LOG_ERROR 0x04
@@ -568,7 +568,7 @@ typedef struct X25Trace /*----- Trace data structure -------*/
#define X25_TRCERR_RX_BADCRC 0x20 /* receive CRC error */
#define X25_TRCERR_RX_OVERRUN 0x30 /* receiver overrun error */
#define X25_TRCERR_RX_TOO_LONG 0x40 /* excessive frame length error */
-#define X25_TRCERR_TX_ABORT 0x70 /* aborted frame transmittion error */
+#define X25_TRCERR_TX_ABORT 0x70 /* aborted frame transmission error */
#define X25_TRCERR_TX_UNDERRUN 0x80 /* transmit underrun error */
/*****************************************************************************
@@ -582,7 +582,7 @@ typedef struct HDLCFrame /*----- DHLC Frame Format ----------*/
unsigned char data[0] PACKED;
} THDLCFrame;
-typedef struct X25Pkt /*----- X.25 Paket Format ----------*/
+typedef struct X25Pkt /*----- X.25 Packet Format ----------*/
{
unsigned char lcn_hi PACKED; /* 4 MSB of Logical Channel Number */
unsigned char lcn_lo PACKED; /* 8 LSB of Logical Channel Number */
diff --git a/include/linux/selection.h b/include/linux/selection.h
index e41e9ebef..45a14a4b3 100644
--- a/include/linux/selection.h
+++ b/include/linux/selection.h
@@ -4,7 +4,10 @@
* Interface between console.c, tty_io.c, vt.c, vc_screen.c and selection.c
*/
-#include <linux/config.h>
+#ifndef _LINUX_SELECTION_H_
+#define _LINUX_SELECTION_H_
+
+#include <linux/vt_buffer.h>
extern int sel_cons;
@@ -15,275 +18,29 @@ extern int sel_loadlut(const unsigned long arg);
extern int mouse_reporting(void);
extern void mouse_report(struct tty_struct * tty, int butt, int mrx, int mry);
-#ifdef CONFIG_FB_CONSOLE
-extern unsigned long get_video_num_columns(unsigned int console);
-extern unsigned long get_video_num_lines(unsigned int console);
-extern unsigned long get_video_size_row(unsigned int console);
-#else
-#define get_video_num_columns(dummy) video_num_columns
-#define get_video_num_lines(dummy) video_num_lines
-#define get_video_size_row(dummy) video_size_row
-#endif
-
-extern unsigned long video_num_columns;
-extern unsigned long video_num_lines;
-extern unsigned long video_size_row;
-extern unsigned char video_type;
-extern unsigned long video_mem_base;
-extern unsigned long video_mem_term;
-extern unsigned long video_screen_size;
-extern unsigned short video_port_reg;
-extern unsigned short video_port_val;
+#define video_num_columns (vc_cons[currcons].d->vc_cols)
+#define video_num_lines (vc_cons[currcons].d->vc_rows)
+#define video_size_row (vc_cons[currcons].d->vc_size_row)
+#define video_screen_size (vc_cons[currcons].d->vc_screenbuf_size)
+#define can_do_color (vc_cons[currcons].d->vc_can_do_color)
extern int console_blanked;
-extern int can_do_color;
-
-extern unsigned long video_font_height;
-extern unsigned long video_scan_lines;
-extern unsigned long default_font_height;
-extern int video_font_is_default;
extern unsigned char color_table[];
extern int default_red[];
extern int default_grn[];
extern int default_blu[];
-extern unsigned short __real_origin;
-extern unsigned short __origin;
-extern unsigned char has_wrapped;
-
-extern unsigned short *vc_scrbuf[MAX_NR_CONSOLES];
-
extern void do_unblank_screen(void);
extern unsigned short *screen_pos(int currcons, int w_offset, int viewed);
-extern unsigned short screen_word(int currcons, int offset, int viewed);
-extern int scrw2glyph(unsigned short scr_word);
+extern u16 screen_glyph(int currcons, int offset);
extern void complement_pos(int currcons, int offset);
extern void invert_screen(int currcons, int offset, int count, int shift);
-#define reverse_video_char(a) (((a) & 0x88) | ((((a) >> 4) | ((a) << 4)) & 0x77))
-#define reverse_video_short(a) (((a) & 0x88ff) | \
- (((a) & 0x7000) >> 4) | (((a) & 0x0700) << 4))
-/* this latter line used to have masks 0xf000 and 0x0f00, but selection
- requires a self-inverse operation; moreover, the old version looks wrong */
-
extern void getconsxy(int currcons, char *p);
extern void putconsxy(int currcons, char *p);
+extern u16 vcs_scr_readw(int currcons, u16 *org);
+extern void vcs_scr_writew(int currcons, u16 val, u16 *org);
-/* how to access screen memory */
-
-#if defined(CONFIG_TGA_CONSOLE)
-
-extern int tga_blitc(unsigned int, unsigned long);
-extern unsigned long video_mem_term;
-
-/*
- * TGA console screen memory access
- *
- * TGA is *not* a character/attribute cell device; font bitmaps must be rendered
- * to the screen pixels.
- *
- * We must test for an Alpha kernel virtual address that falls within
- * the "shadow screen" memory. This condition indicates we really want
- * to write to the screen, so, we do... :-)
- *
- * NOTE also: there's only *TWO* operations: to put/get a character/attribute.
- * All the others needed by VGA support go away, as Not Applicable for TGA.
- */
-static inline void scr_writew(unsigned short val, unsigned short * addr)
-{
- /*
- * always deposit the char/attr, then see if it was to "screen" mem.
- * if so, then render the char/attr onto the real screen.
- */
- *addr = val;
- if ((unsigned long)addr < video_mem_term &&
- (unsigned long)addr >= video_mem_base) {
- tga_blitc(val, (unsigned long) addr);
- }
-}
-
-static inline unsigned short scr_readw(unsigned short * addr)
-{
- return *addr;
-}
-
-#elif defined (CONFIG_SGI)
-
-#include <linux/vt_kern.h>
-#include <linux/kd.h>
-extern void blitc(unsigned short, unsigned long);
-extern void memsetw(void * s, unsigned short c, unsigned int count);
-extern void memcpyw(unsigned short *to, unsigned short *from, unsigned int count);
-extern unsigned long video_mem_term;
-
-static inline void scr_writew(unsigned short val, unsigned short * addr)
-{
- /* always deposit the char/attr, then see if it was to "screen" mem.
- * if so, then render the char/attr onto the real screen.
- */
- if(*addr != val) {
- *addr = val;
- if ((unsigned long)addr < video_mem_term &&
- (unsigned long)addr >= video_mem_base &&
- vt_cons [fg_console]->vc_mode == KD_TEXT)
- blitc(val, (unsigned long) addr);
- }
-}
-
-static inline unsigned short scr_readw(unsigned short * addr)
-{
- return *addr;
-}
-
-#elif defined (CONFIG_VIDEO_G364) /* The G364 cards: same as above. */
-
-extern void g364_blitc(unsigned short, unsigned long);
-extern void g364_blitc_colour(unsigned short, unsigned long);
-extern unsigned long video_mem_term;
-
-/*
- * G364 console screen memory access
- *
- * G364 is *not* a character/attribute cell device; font bitmaps must be
- * rendered to the screen pixels.
- *
- * The "unsigned short * addr" is *ALWAYS* a kernel virtual address, either
- * of the VC's backing store, or the "shadow screen" memory where the screen
- * contents are kept, as the G364 frame buffer is *not* char/attr cells.
- *
- * We must test for a Mips kernel virtual address that falls within
- * the "shadow screen" memory. This condition indicates we really want
- * to write to the screen, so, we do... :-)
- *
- * NOTE also: there's only *TWO* operations: to put/get a character/attribute.
- * All the others needed by VGA support go away, as Not Applicable for G364.
- */
-static inline void scr_writew(unsigned short val, unsigned short * addr)
-{
- /*
- * always deposit the char/attr, then see if it was to "screen" mem.
- * if so, then render the char/attr onto the real screen.
- */
- *addr = val;
- if ((unsigned long)addr < video_mem_term &&
- (unsigned long)addr >= video_mem_base) {
- if ((val & 0xff00) == 0x0700)
- g364_blitc(val, (unsigned long) addr); /* B&W faster */
- else
- g364_blitc_colour(val, (unsigned long) addr);
- }
-}
-
-static inline unsigned short scr_readw(unsigned short * addr)
-{
- return *addr;
-}
-
-#elif defined(CONFIG_SUN_CONSOLE)
-
-#include "vt_kern.h"
-#include <linux/kd.h>
-extern int sun_blitc(unsigned int, unsigned long);
-extern void memsetw(void * s, unsigned short c, unsigned int count);
-extern void memcpyw(unsigned short *to, unsigned short *from, unsigned int count);
-extern unsigned long video_mem_term;
-
-/* Basically the same as the TGA stuff. */
-static inline void scr_writew(unsigned short val, unsigned short * addr)
-{
- /*
- * always deposit the char/attr, then see if it was to "screen" mem.
- * if so, then render the char/attr onto the real screen.
- */
- if (*addr != val) {
- *addr = val;
- if ((unsigned long)addr < video_mem_term &&
- (unsigned long)addr >= video_mem_base &&
- vt_cons [fg_console]->vc_mode == KD_TEXT)
- sun_blitc(val, (unsigned long) addr);
- }
-}
-
-static inline unsigned short scr_readw(unsigned short * addr)
-{
- return *addr;
-}
-
-#else
-
-/*
- * normal VGA console access
- *
- */
-
-#include <asm/io.h>
-
-/*
- * NOTE: "(long) addr < 0" tests for an Alpha kernel virtual address; this
- * indicates a VC's backing store; otherwise, it's a bus memory address, for
- * the VGA's screen memory, so we do the Alpha "swizzle"... :-)
- */
-static inline void scr_writeb(unsigned char val, unsigned char * addr)
-{
- if ((long) addr < 0)
- *addr = val;
- else
- writeb(val, (unsigned long) addr);
-}
-
-static inline unsigned char scr_readb(unsigned char * addr)
-{
- if ((long) addr < 0)
- return *addr;
- return readb((unsigned long) addr);
-}
-
-static inline void scr_writew(unsigned short val, unsigned short * addr)
-{
-#ifdef __powerpc__
- st_le16(addr, val);
-#else
- if ((long) addr < 0)
- *addr = val;
- else
- writew(val, (unsigned long) addr);
-#endif /* !__powerpc__ */
-}
-
-static inline unsigned short scr_readw(unsigned short * addr)
-{
-#ifdef __powerpc__
- return ld_le16(addr);
-#else
- if ((long) addr < 0)
- return *addr;
- return readw((unsigned long) addr);
-#endif /* !__powerpc__ */
-}
-
-#endif /* CONFIG_TGA_CONSOLE */
-
-#if !defined(CONFIG_SUN_CONSOLE) && !defined(CONFIG_SGI)
-static inline void memsetw(void * s, unsigned short c, unsigned int count)
-{
- unsigned short * addr = (unsigned short *) s;
-
- count /= 2;
- while (count) {
- count--;
- scr_writew(c, addr++);
- }
-}
-
-static inline void memcpyw(unsigned short *to, unsigned short *from,
- unsigned int count)
-{
- count /= 2;
- while (count) {
- count--;
- scr_writew(scr_readw(from++), to++);
- }
-}
-#endif /* !defined(CONFIG_SUN_CONSOLE) && !defined(CONFIG_SGI) */
+#endif
diff --git a/include/linux/serial_reg.h b/include/linux/serial_reg.h
index c982ae28b..713227a56 100644
--- a/include/linux/serial_reg.h
+++ b/include/linux/serial_reg.h
@@ -1,5 +1,5 @@
/*
- * include/linux/serial.h
+ * include/linux/serial_reg.h
*
* Copyright (C) 1992, 1994 by Theodore Ts'o.
*
diff --git a/include/linux/signal.h b/include/linux/signal.h
index ff193cd24..d6e82ae05 100644
--- a/include/linux/signal.h
+++ b/include/linux/signal.h
@@ -162,6 +162,8 @@ extern inline void sigfillset(sigset_t *set)
}
}
+extern char * render_sigset_t(sigset_t *set, char *buffer);
+
/* Some extensions for manipulating the low 32 signals in particular. */
extern inline void sigaddsetmask(sigset_t *set, unsigned long mask)
diff --git a/include/linux/simp.h b/include/linux/simp.h
deleted file mode 100644
index bf838f815..000000000
--- a/include/linux/simp.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * include/linux/simp.h -- simple allocator for cached objects
- *
- * This is meant as a faster and simpler (not full-featured) replacement
- * for SLAB, thus the name "simp" :-)
- *
- * (C) 1997 Thomas Schoebel-Theuer
- */
-
-#ifndef SIMP_H
-#define SIMP_H
-
-/* used for constructors / destructors */
-typedef void (*structor)(void *);
-
-/* create an object cache */
-/* positive clearable_offset means the next two pointers at that offset
- * can be internally used for freelist pointers when the object is
- * deallocated / not in use;
- * if there is no space inside the element that can be reused for
- * this purpose, supply -1. Using positive offsets is essential for
- * saving space with very small-sized objects.
- *
- * Note for big-sized objects in the range of whole pages, use
- * the fast Linux page allocator instead, directly.
- */
-extern struct simp * simp_create(char * name, long size,
- structor first_ctor,
- structor again_ctor,
- structor dtor);
-
-/* alloc / dealloc routines */
-extern void * simp_alloc(struct simp * simp);
-extern void simp_free(void * objp);
-
-/* garbage collection */
-extern long simp_garbage(void);
-
-#endif
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 9e9b338b6..ee6c79970 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -96,7 +96,9 @@ struct sk_buff {
unsigned char *tail; /* Tail pointer */
unsigned char *end; /* End pointer */
void (*destructor)(struct sk_buff *); /* Destruct function */
-
+#ifdef CONFIG_IP_FIREWALL
+ __u32 fwmark; /* Label made by fwchains, used by pktsched */
+#endif
#if defined(CONFIG_SHAPER) || defined(CONFIG_SHAPER_MODULE)
__u32 shapelatency; /* Latency on frame */
__u32 shapeclock; /* Time it should go out */
@@ -149,6 +151,8 @@ extern int skb_headroom(struct sk_buff *skb);
extern int skb_tailroom(struct sk_buff *skb);
extern void skb_reserve(struct sk_buff *skb, unsigned int len);
extern void skb_trim(struct sk_buff *skb, unsigned int len);
+extern void skb_over_panic(struct sk_buff *skb, int len, void *here);
+extern void skb_under_panic(struct sk_buff *skb, int len, void *here);
/* Internal */
extern __inline__ atomic_t *skb_datarefp(struct sk_buff *skb)
@@ -435,10 +439,6 @@ extern __inline__ struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list)
return result;
}
-
-extern const char skb_put_errstr[];
-extern const char skb_push_errstr[];
-
/*
* Add data to an sk_buff
*/
@@ -450,9 +450,9 @@ extern __inline__ unsigned char *skb_put(struct sk_buff *skb, unsigned int len)
skb->len+=len;
if(skb->tail>skb->end)
{
- __label__ here;
- panic(skb_put_errstr,&&here,len);
-here: ;
+ __label__ here;
+ skb_over_panic(skb, len, &&here);
+here: ;
}
return tmp;
}
@@ -464,8 +464,8 @@ extern __inline__ unsigned char *skb_push(struct sk_buff *skb, unsigned int len)
if(skb->data<skb->head)
{
__label__ here;
- panic(skb_push_errstr, &&here,len);
-here: ;
+ skb_under_panic(skb, len, &&here);
+here: ;
}
return skb->data;
}
diff --git a/include/linux/smp.h b/include/linux/smp.h
index ed3e0d31d..5034c71f6 100644
--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -7,12 +7,14 @@
*/
#ifdef __SMP__
+
#include <asm/smp.h>
/*
- * main IPI interface, handles INIT, TLB flush, STOP, etc.:
+ * main IPI interface, handles INIT, TLB flush, STOP, etc. (defined in asm header):
+ *
+ * extern void smp_message_pass(int target, int msg, unsigned long data, int wait);
*/
-extern void smp_message_pass(int target, int msg, unsigned long data, int wait);
/*
* Boot processor call to load the other CPU's
@@ -62,6 +64,7 @@ extern volatile int smp_msg_id;
#define smp_message_pass(t,m,d,w)
#define smp_threads_ready 1
#define kernel_lock()
+#define cpu_logical_map(cpu) 0
#endif
#endif
diff --git a/include/linux/smp_lock.h b/include/linux/smp_lock.h
index f49013267..4583e2f5a 100644
--- a/include/linux/smp_lock.h
+++ b/include/linux/smp_lock.h
@@ -1,6 +1,17 @@
#ifndef __LINUX_SMPLOCK_H
#define __LINUX_SMPLOCK_H
-#include <asm/smp_lock.h>
+#ifndef __SMP__
+
+#define lock_kernel() do { } while(0)
+#define unlock_kernel() do { } while(0)
+#define release_kernel_lock(task, cpu) do { } while(0)
+#define reacquire_kernel_lock(task) do { } while(0)
+
+#else
+
+#include <asm/smplock.h>
+
+#endif /* __SMP__ */
#endif
diff --git a/include/linux/socket.h b/include/linux/socket.h
index 8bc5acacd..e8f4202d5 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -1,6 +1,8 @@
#ifndef _LINUX_SOCKET_H
#define _LINUX_SOCKET_H
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+
#include <asm/socket.h> /* arch-dependent defines */
#include <linux/sockios.h> /* the SIOCxxx I/O controls */
#include <linux/uio.h> /* iovec support */
@@ -114,9 +116,9 @@ __KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__
#define SCM_CONNECT 0x03 /* rw: struct scm_connect */
struct ucred {
- __kernel_pid_t pid;
- __kernel_uid_t uid;
- __kernel_gid_t gid;
+ __u32 pid;
+ __u32 uid;
+ __u32 gid;
};
@@ -127,7 +129,7 @@ struct ucred {
#define AF_INET 2 /* Internet IP Protocol */
#define AF_AX25 3 /* Amateur Radio AX.25 */
#define AF_IPX 4 /* Novell IPX */
-#define AF_APPLETALK 5 /* Appletalk DDP */
+#define AF_APPLETALK 5 /* AppleTalk DDP */
#define AF_NETROM 6 /* Amateur Radio NET/ROM */
#define AF_BRIDGE 7 /* Multiprotocol bridge */
#define AF_ATMPVC 8 /* ATM PVCs */
@@ -144,6 +146,7 @@ struct ucred {
#define AF_ASH 18 /* Ash */
#define AF_ECONET 19 /* Acorn Econet */
#define AF_ATMSVC 20 /* ATM SVCs */
+#define AF_SNA 22 /* Linux SNA Project (nutters!) */
#define AF_MAX 32 /* For now.. */
/* Protocol families, same as address families. */
@@ -168,7 +171,9 @@ struct ucred {
#define PF_ROUTE AF_ROUTE
#define PF_PACKET AF_PACKET
#define PF_ASH AF_ASH
+#define PF_ECONET AF_ECONET
#define PF_ATMSVC AF_ATMSVC
+#define PF_SNA AF_SNA
#define PF_MAX AF_MAX
@@ -242,4 +247,5 @@ extern int move_addr_to_user(void *kaddr, int klen, void *uaddr, int *ulen);
extern int move_addr_to_kernel(void *uaddr, int ulen, void *kaddr);
extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data);
#endif
+#endif /* not kernel and not glibc */
#endif /* _LINUX_SOCKET_H */
diff --git a/include/linux/sound.h b/include/linux/sound.h
new file mode 100644
index 000000000..7dabc388c
--- /dev/null
+++ b/include/linux/sound.h
@@ -0,0 +1,13 @@
+/*
+ * Sound core interface functions
+ */
+
+extern int register_sound_special(struct file_operations *, int);
+extern int register_sound_mixer(struct file_operations *fops);
+extern int register_sound_midi(struct file_operations *fops);
+extern int register_sound_dsp(struct file_operations *fops);
+
+extern void unregister_sound_special(int unit);
+extern void unregister_sound_mixer(int unit);
+extern void unregister_sound_midi(int unit);
+extern void unregister_sound_dsp(int unit);
diff --git a/include/linux/soundcard.h b/include/linux/soundcard.h
index e48c0b079..deb73e6fd 100644
--- a/include/linux/soundcard.h
+++ b/include/linux/soundcard.h
@@ -69,7 +69,7 @@
#define SNDCARD_PSEUDO_MSS 24
#define SNDCARD_GUSPNP 25
#define SNDCARD_UART401 26
-/* Soundcard numbers 27 to N are reserved. Don't add more numbers here */
+/* Sound card numbers 27 to N are reserved. Don't add more numbers here. */
/***********************************
* IOCTL Commands for /dev/sequencer
@@ -193,12 +193,16 @@ typedef struct seq_event_rec {
* The following patch_info structure has been designed to support
* Gravis UltraSound. It tries to be universal format for uploading
* sample based patches but is probably too limited.
+ *
+ * (PBD) As Hannu guessed, the GUS structure is too limited for
+ * the WaveFront, but this is the right place for a constant definition.
*/
struct patch_info {
unsigned short key; /* Use WAVE_PATCH here */
-#define WAVE_PATCH _PATCHKEY(0x04)
-#define GUS_PATCH WAVE_PATCH
+#define WAVE_PATCH _PATCHKEY(0x04)
+#define GUS_PATCH WAVE_PATCH
+#define WAVEFRONT_PATCH _PATCHKEY(0x06)
short device_no; /* Synthesizer number */
short instr_no; /* Midi pgm# */
@@ -476,6 +480,7 @@ struct synth_info { /* Read only */
#define SAMPLE_TYPE_BASIC 0x10
#define SAMPLE_TYPE_GUS SAMPLE_TYPE_BASIC
+#define SAMPLE_TYPE_WAVEFRONT 0x11
int perc_mode; /* No longer supported */
int nr_voices;
@@ -606,7 +611,7 @@ typedef struct buffmem_desc {
*
* APF_NORMAL (the default) and APF_NETWORK make the driver to cleanup the
* playback buffer whenever an underrun occurs. This consumes some time
- * preven's looping the existing buffer.
+ * prevents looping the existing buffer.
* APF_CPUINTENS is intended to be set by CPU intensive applications which
* are likely to run out of time occasionally. In this mode the buffer cleanup is
* disabled which saves CPU time but also let's the previous buffer content to
diff --git a/include/linux/stat.h b/include/linux/stat.h
index d86b1646f..e43e241f3 100644
--- a/include/linux/stat.h
+++ b/include/linux/stat.h
@@ -7,6 +7,8 @@
#endif
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+
#define S_IFMT 00170000
#define S_IFSOCK 0140000
#define S_IFLNK 0120000
@@ -42,6 +44,8 @@
#define S_IWOTH 00002
#define S_IXOTH 00001
+#endif
+
#ifdef __KERNEL__
#define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO)
#define S_IALLUGO (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO)
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
index da2b2cdd1..8553a05c5 100644
--- a/include/linux/sunrpc/clnt.h
+++ b/include/linux/sunrpc/clnt.h
@@ -127,6 +127,9 @@ rpc_set_timeout(struct rpc_clnt *clnt, unsigned int retr, unsigned long incr)
xprt_set_timeout(&clnt->cl_timeout, retr, incr);
}
+extern void rpciod_tcp_dispatcher(void);
+extern void rpciod_wake_up(void);
+
/*
* Helper function for NFSroot support
*/
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h
index 7012fb4a3..697950b2e 100644
--- a/include/linux/sunrpc/sched.h
+++ b/include/linux/sunrpc/sched.h
@@ -39,11 +39,11 @@ struct rpc_task {
/*
* RPC call state
*/
- u32 tk_proc; /* procedure number */
- u32 * tk_buffer; /* XDR buffer */
+ __u32 tk_proc; /* procedure number */
+ __u32 * tk_buffer; /* XDR buffer */
void * tk_argp; /* argument storage */
void * tk_resp; /* result storage */
- u8 tk_garb_retry,
+ __u8 tk_garb_retry,
tk_cred_retry,
tk_suid_retry;
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
index a470260b0..0037b5738 100644
--- a/include/linux/sunrpc/xprt.h
+++ b/include/linux/sunrpc/xprt.h
@@ -117,6 +117,9 @@ struct rpc_rqst {
struct rpc_xprt {
struct rpc_xprt * link; /* list of all clients */
+ struct rpc_xprt * rx_pending; /* receive pending list */
+
+ int rx_pending_flag;/* are we on the pending list ? */
struct file * file; /* VFS layer */
struct socket * sock; /* BSD socket layer */
diff --git a/include/linux/swap.h b/include/linux/swap.h
index 19e714c71..3b4d2c983 100644
--- a/include/linux/swap.h
+++ b/include/linux/swap.h
@@ -50,7 +50,7 @@ struct sysinfo;
extern int shm_swap (int, int);
/* linux/mm/vmscan.c */
-extern int try_to_free_page(int);
+extern int try_to_free_pages(unsigned int gfp_mask, int count);
/* linux/mm/page_io.c */
extern void rw_swap_page(int, unsigned long, char *, int);
@@ -75,6 +75,11 @@ extern struct swap_info_struct swap_info[];
void si_swapinfo(struct sysinfo *);
unsigned long get_swap_page(void);
extern void FASTCALL(swap_free(unsigned long));
+struct swap_list_t {
+ int head; /* head of priority-ordered swapfile list */
+ int next; /* swapfile to be used next */
+};
+extern struct swap_list_t swap_list;
/*
* vm_ops not present page codes for shared memory.
@@ -124,21 +129,6 @@ static inline int is_page_shared(struct page *page)
}
/*
- * When we're freeing pages from a user application, we want
- * to cluster swapouts too. -- Rik.
- * linux/mm/page_alloc.c
- */
-static inline int try_to_free_pages(int gfp_mask, int count)
-{
- int retval = 0;
- while (count--) {
- if (try_to_free_page(gfp_mask))
- retval = 1;
- }
- return retval;
-}
-
-/*
* Make these inline later once they are working properly.
*/
extern long find_in_swap_cache(struct page *page);
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index 07f72a1a1..ef9044aa1 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -27,7 +27,7 @@ struct __sysctl_args {
/* For internal pattern-matching use only: */
#ifdef __KERNEL__
-#define CTL_ANY -1 /* Matches any name */
+#define CTL_ANY -1 /* Matches any name */
#define CTL_NONE 0
#endif
@@ -54,24 +54,20 @@ enum
KERN_PROF, /* table: profiling information */
KERN_NODENAME,
KERN_DOMAINNAME,
- KERN_NRINODE,
- KERN_MAXINODE,
- KERN_NRFILE,
- KERN_MAXFILE,
KERN_SECURELVL, /* int: system security level */
KERN_PANIC, /* int: panic timeout */
KERN_REALROOTDEV, /* real root device to mount after initrd */
- KERN_NFSRNAME, /* NFS root name */
- KERN_NFSRADDRS, /* NFS root addresses */
KERN_JAVA_INTERPRETER, /* path to Java(tm) interpreter */
KERN_JAVA_APPLETVIEWER, /* path to Java(tm) appletviewer */
KERN_SPARC_REBOOT, /* reboot command on Sparc */
KERN_CTLALTDEL, /* int: allow ctl-alt-del to reboot */
KERN_PRINTK, /* sturct: control printk logging parameters */
KERN_NAMETRANS, /* Name translation */
- KERN_STATINODE,
- KERN_DENTRY, /* dentry statistics */
+ KERN_PPC_HTABRECLAIM, /* turn htab reclaimation on/off on PPC */
+ KERN_PPC_ZEROPAGED, /* turn idle page zeroing on/off on PPC */
+ KERN_PPC_POWERSAVE_NAP, /* use nap mode for power saving */
KERN_MODPROBE,
+ KERN_SG_BIG_BUFF
};
@@ -85,7 +81,8 @@ enum
VM_OVERCOMMIT_MEMORY, /* Turn off the virtual memory safety limit */
VM_BUFFERMEM, /* struct: Set buffer memory thresholds */
VM_PAGECACHE, /* struct: Set cache memory thresholds */
- VM_PAGERDAEMON /* struct: Control kswapd behaviour */
+ VM_PAGERDAEMON, /* struct: Control kswapd behaviour */
+ VM_PGT_CACHE /* struct: Set page table cache parameters */
};
@@ -360,6 +357,17 @@ enum {
/* CTL_PROC names: */
/* CTL_FS names: */
+enum
+{
+ FS_NRINODE=1, /* int: current number of allocated inodes */
+ FS_STATINODE,
+ FS_MAXINODE, /* int: maximum number of inodes that can be allocated */
+ FS_NRDQUOT, /* int: current number of allocated dquots */
+ FS_MAXDQUOT, /* int: maximum number of dquots that can be allocated */
+ FS_NRFILE, /* int: current number of allocated filedescriptors */
+ FS_MAXFILE, /* int: maximum number of filedescriptors that can be allocated */
+ FS_DENTRY,
+};
/* CTL_DEBUG names: */
diff --git a/include/linux/timer.h b/include/linux/timer.h
index 2649014a1..64c461b2e 100644
--- a/include/linux/timer.h
+++ b/include/linux/timer.h
@@ -71,4 +71,22 @@ extern inline void init_timer(struct timer_list * timer)
timer->prev = NULL;
}
+/*
+ * These inlines deal with timer wrapping correctly. You are
+ * strongly encouraged to use them
+ * 1. Because people otherwise forget
+ * 2. Because if the timer wrap changes in future you wont have to
+ * alter your driver code.
+ */
+
+extern inline int time_before(unsigned long a, unsigned long b)
+{
+ return((long)((a) - (b)) < 0L);
+}
+
+extern inline int time_after(unsigned long a, unsigned long b)
+{
+ return((long)((a) - (b)) > 0L);
+}
+
#endif
diff --git a/include/linux/timex.h b/include/linux/timex.h
index c6e1527f6..df4743f58 100644
--- a/include/linux/timex.h
+++ b/include/linux/timex.h
@@ -17,6 +17,10 @@
/*
* Modification history timex.h
*
+ * 29 Dec 97 Russell King
+ * Moved CLOCK_TICK_RATE, CLOCK_TICK_FACTOR and FINETUNE to asm/timex.h
+ * for ARM machines
+ *
* 9 Jan 97 Adrian Sun
* Shifted LATCH define to allow access to alpha machines.
*
@@ -125,20 +129,13 @@
#define PPS_VALID 120 /* pps signal watchdog max (s) */
#define MAXGLITCH 30 /* pps signal glitch max (s) */
-/* LATCH is used in the interval timer and ftape setup. */
-#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
-#define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */
-
-#ifndef __alpha__
/*
- * This definitively is wrong for the Alpha and none of the
- * kernel code seems to reference this anymore.
+ * Pick up the architecture specific timex specifications
*/
-#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */
-#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
- (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
- << (SHIFT_SCALE-SHIFT_HZ)) / HZ)
-#endif /* !__alpha__ */
+#include <asm/timex.h>
+
+/* LATCH is used in the interval timer and ftape setup. */
+#define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */
/*
* syscall interface - used (mainly by NTP daemon)
diff --git a/include/linux/trdevice.h b/include/linux/trdevice.h
index e3a469fb5..8689db32d 100644
--- a/include/linux/trdevice.h
+++ b/include/linux/trdevice.h
@@ -33,7 +33,6 @@ extern int tr_header(struct sk_buff *skb, struct device *dev,
void *saddr, unsigned len);
extern int tr_rebuild_header(struct sk_buff *skb);
extern unsigned short tr_type_trans(struct sk_buff *skb, struct device *dev);
-extern void tr_reformat(struct sk_buff *, unsigned int);
extern struct device * init_trdev(struct device *, int);
#endif
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 34c88d721..755d0441c 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -16,7 +16,9 @@
consoles 16 and higher (since it returns a short) */
#ifdef __KERNEL__
+#include <linux/config.h>
#include <linux/fs.h>
+#include <linux/major.h>
#include <linux/termios.h>
#include <linux/tqueue.h>
#include <linux/tty_driver.h>
@@ -32,26 +34,60 @@
* (Note: the *_driver.minor_start values 1, 64, 128, 192 are
* hardcoded at present.)
*/
-#define NR_PTYS 256
+#define NR_PTYS 256 /* ptys/major */
#define NR_LDISCS 16
/*
+ * Unix98 PTY's can be defined as any multiple of NR_PTYS up to
+ * UNIX98_PTY_MAJOR_COUNT; this section defines what we need from the
+ * config options
+ */
+#ifdef CONFIG_UNIX98_PTYS
+# define UNIX98_NR_MAJORS ((CONFIG_UNIX98_PTY_COUNT+NR_PTYS-1)/NR_PTYS)
+# if UNIX98_NR_MAJORS <= 0
+# undef CONFIG_UNIX98_PTYS
+# elif UNIX98_NR_MAJORS > UNIX98_PTY_MAJOR_COUNT
+# error Too many Unix98 ptys defined
+# undef UNIX98_NR_MAJORS
+# define UNIX98_NR_MAJORS UNIX98_PTY_MAJOR_COUNT
+# endif
+#endif
+
+/*
* These are set up by the setup-routine at boot-time:
*/
struct screen_info {
- unsigned char orig_x;
- unsigned char orig_y;
- unsigned char unused1[2];
- unsigned short orig_video_page;
- unsigned char orig_video_mode;
- unsigned char orig_video_cols;
- unsigned short unused2;
- unsigned short orig_video_ega_bx;
- unsigned short unused3;
- unsigned char orig_video_lines;
- unsigned char orig_video_isVGA;
- unsigned short orig_video_points;
+ unsigned char orig_x; /* 0x00 */
+ unsigned char orig_y; /* 0x01 */
+ unsigned short dontuse1; /* 0x02 -- EXT_MEM_K sits here */
+ unsigned short orig_video_page; /* 0x04 */
+ unsigned char orig_video_mode; /* 0x06 */
+ unsigned char orig_video_cols; /* 0x07 */
+ unsigned short unused2; /* 0x08 */
+ unsigned short orig_video_ega_bx; /* 0x0a */
+ unsigned short unused3; /* 0x0c */
+ unsigned char orig_video_lines; /* 0x0e */
+ unsigned char orig_video_isVGA; /* 0x0f */
+ unsigned short orig_video_points; /* 0x10 */
+
+ /* VESA graphic mode -- linear frame buffer */
+ unsigned short lfb_width; /* 0x12 */
+ unsigned short lfb_height; /* 0x14 */
+ unsigned short lfb_depth; /* 0x16 */
+ unsigned long lfb_base; /* 0x18 */
+ unsigned long lfb_size; /* 0x1c */
+ unsigned short dontuse2, dontuse3; /* 0x20 -- CL_MAGIC and CL_OFFSET here */
+ unsigned short lfb_linelength; /* 0x24 */
+ unsigned char red_size; /* 0x26 */
+ unsigned char red_pos; /* 0x27 */
+ unsigned char green_size; /* 0x28 */
+ unsigned char green_pos; /* 0x29 */
+ unsigned char blue_size; /* 0x2a */
+ unsigned char blue_pos; /* 0x2b */
+ unsigned char rsvd_size; /* 0x2c */
+ unsigned char rsvd_pos; /* 0x2d */
+ /* 0x2e -- 0x3f reserved for future expansion */
};
extern struct screen_info screen_info;
@@ -70,10 +106,10 @@ extern struct screen_info screen_info;
#define VIDEO_TYPE_EGAM 0x20 /* EGA/VGA in Monochrome Mode */
#define VIDEO_TYPE_EGAC 0x21 /* EGA in Color Mode */
#define VIDEO_TYPE_VGAC 0x22 /* VGA+ in Color Mode */
-#define VIDEO_TYPE_EGAC 0x21 /* EGA/VGA in Color Mode */
+#define VIDEO_TYPE_VLFB 0x23 /* VESA VGA in graphic mode */
#define VIDEO_TYPE_PICA_S3 0x30 /* ACER PICA-61 local S3 video */
#define VIDEO_TYPE_MIPS_G364 0x31 /* MIPS Magnum 4000 G364 video */
-#define VIDEO_TYPE_SNI_RM 0x31 /* SNI RM200 PCI video */
+#define VIDEO_TYPE_SNI_RM 0x32 /* SNI RM200 PCI video */
#define VIDEO_TYPE_TGAC 0x40 /* DEC TGA */
diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h
index ee6a7eb22..46ace283a 100644
--- a/include/linux/tty_driver.h
+++ b/include/linux/tty_driver.h
@@ -139,6 +139,7 @@ struct tty_driver {
struct tty_struct **table;
struct termios **termios;
struct termios **termios_locked;
+ void *driver_state; /* only used for the PTY driver */
/*
* Interface routines from the upper tty layer to the tty
diff --git a/include/linux/ufs_fs.h b/include/linux/ufs_fs.h
index b59cd5f90..70740489c 100644
--- a/include/linux/ufs_fs.h
+++ b/include/linux/ufs_fs.h
@@ -21,10 +21,6 @@
#ifndef __LINUX_UFS_FS_H
#define __LINUX_UFS_FS_H
-#undef UFS_HEAVY_DEBUG
-/*#define UFS_HEAVY_DEBUG 1*/
-/* Uncomment the line above when hacking ufs code */
-
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/time.h>
@@ -35,11 +31,15 @@
#define UFS_SBLOCK 8192
#define UFS_SBSIZE 8192
+#define SECTOR_SIZE 512
+#define SECTOR_BITS 9
#define UFS_MAGIC 0x00011954
#define UFS_CIGAM 0x54190100 /* byteswapped MAGIC */
-#define UFS_FSIZE 1024
-#define UFS_BSIZE 8192
+#define UFS_BSIZE 8192
+#define UFS_MINBSIZE 4096
+#define UFS_FSIZE 1024
+#define UFS_MAXFRAG (UFS_BSIZE / UFS_FSIZE)
#define UFS_NDADDR 12
#define UFS_NINDIR 3
@@ -48,7 +48,13 @@
#define UFS_DIND_BLOCK (UFS_NDADDR + 1)
#define UFS_TIND_BLOCK (UFS_NDADDR + 2)
+#define UFS_NDIR_FRAGMENT (UFS_NDADDR << uspi->s_fpbshift)
+#define UFS_IND_FRAGMENT (UFS_IND_BLOCK << uspi->s_fpbshift)
+#define UFS_DIND_FRAGMENT (UFS_DIND_BLOCK << uspi->s_fpbshift)
+#define UFS_TIND_FRAGMENT (UFS_TIND_BLOCK << uspi->s_fpbshift)
+
#define UFS_ROOTINO 2
+#define UFS_FIRST_INO (UFS_ROOTINO + 1)
#define UFS_USEEFT ((__u16)65535)
@@ -87,62 +93,109 @@
#define UFS_HURD 0x00000130
#define UFS_SUN 0x00000200
#define UFS_NEXT 0x00000400
-/* we preserve distinction in flavor identification even without difference,
- * because yet-to-be-supported features may introduce difference in the future
- */
-/* last but not least, debug flags */
-#define UFS_DEBUG 0x01000000
-#define UFS_DEBUG_INODE 0x02000000
-#define UFS_DEBUG_NAMEI 0x04000000
-#define UFS_DEBUG_LINKS 0x08000000
-
-#ifdef UFS_HEAVY_DEBUG
-# define UFS_DEBUG_INITIAL UFS_DEBUG
-#else
-# define UFS_DEBUG_INITIAL 0
-#endif
/* fs_inodefmt options */
#define UFS_42INODEFMT -1
#define UFS_44INODEFMT 2
-#define UFS_ADDR_PER_BLOCK(sb) ((sb)->u.ufs_sb.s_bsize >> 2)
-#define UFS_ADDR_PER_BLOCK_BITS(sb) ((sb)->u.ufs_sb.s_bshift - 2)
+/*
+ * MINFREE gives the minimum acceptable percentage of file system
+ * blocks which may be free. If the freelist drops below this level
+ * only the superuser may continue to allocate blocks. This may
+ * be set to 0 if no reserve of free blocks is deemed necessary,
+ * however throughput drops by fifty percent if the file system
+ * is run at between 95% and 100% full; thus the minimum default
+ * value of fs_minfree is 5%. However, to get good clustering
+ * performance, 10% is a better choice. hence we use 10% as our
+ * default value. With 10% free space, fragmentation is not a
+ * problem, so we choose to optimize for time.
+ */
+#define UFS_MINFREE 5
+#define UFS_DEFAULTOPT UFS_OPTTIME
+
+/*
+ * Turn file system block numbers into disk block addresses.
+ * This maps file system blocks to device size blocks.
+ */
+#define ufs_fsbtodb(uspi, b) ((b) << (uspi)->s_fsbtodb)
+#define ufs_dbtofsb(uspi, b) ((b) >> (uspi)->s_fsbtodb)
-/* Test if the inode number is valid. */
-#define ufs_ino_ok(inode) ((inode->i_ino < 2) && \
- (inode->i_ino > (inode->i_sb->u.ufs_sb.s_ncg * inode->i_sb->u.ufs_sb.s_ipg - 1)))
+/*
+ * Cylinder group macros to locate things in cylinder groups.
+ * They calc file system addresses of cylinder group data structures.
+ */
+#define ufs_cgbase(c) (uspi->s_fpg * (c))
+#define ufs_cgstart(c) (ufs_cgbase(c) + uspi->s_cgoffset * ((c) & ~uspi->s_cgmask))
+#define ufs_cgsblock(c) (ufs_cgstart(c) + uspi->s_sblkno) /* super blk */
+#define ufs_cgcmin(c) (ufs_cgstart(c) + uspi->s_cblkno) /* cg block */
+#define ufs_cgimin(c) (ufs_cgstart(c) + uspi->s_iblkno) /* inode blk */
+#define ufs_cgdmin(c) (ufs_cgstart(c) + uspi->s_dblkno) /* 1st data */
-/* Convert (sb,cg) to the first physical block number for that cg. */
-#define ufs_cgstart(sb, cg) \
- (((sb)->u.ufs_sb.s_fpg * (cg)) + (sb)->u.ufs_sb.s_cgoffset * ((cg) & ~((sb)->u.ufs_sb.s_cgmask)))
+/*
+ * Macros for handling inode numbers:
+ * inode number to file system block offset.
+ * inode number to cylinder group number.
+ * inode number to file system block address.
+ */
+#define ufs_inotocg(x) ((x) / uspi->s_ipg)
+#define ufs_inotocgoff(x) ((x) % uspi->s_ipg)
+#define ufs_inotofsba(x) (ufs_cgimin(ufs_inotocg(x)) + ufs_inotocgoff(x) / uspi->s_inopf)
+#define ufs_inotofsbo(x) ((x) % uspi->s_inopf)
-/* Convert (sb,cg) to the first phys. block number for inodes in that cg. */
-#define ufs_cgimin(sb, cg) (ufs_cgstart((sb), (cg)) + (sb)->u.ufs_sb.s_iblkno)
-#define ufs_cgdmin(sb, cg) (ufs_cgstart((sb), (cg)) + (sb)->u.ufs_sb.s_dblkno)
+/*
+ * Give cylinder group number for a file system block.
+ * Give cylinder group block number for a file system block.
+ */
+#define ufs_dtog(d) ((d) / uspi->s_fpg)
+#define ufs_dtogd(d) ((d) % uspi->s_fpg)
-/* Convert an inode number to a cg number. */
-/* XXX - this can be optimized if s_ipg is a power of 2. */
-#define ufs_ino2cg(inode) ((inode)->i_ino/(inode)->i_sb->u.ufs_sb.s_ipg)
+/*
+ * Compute the cylinder and rotational position of a cyl block addr.
+ */
+#define ufs_cbtocylno(bno) \
+ ((bno) * uspi->s_nspf / uspi->s_spc)
+#define ufs_cbtorpos(bno) \
+ ((((bno) * uspi->s_nspf % uspi->s_spc / uspi->s_nsect \
+ * uspi->s_trackskew + (bno) * uspi->s_nspf % uspi->s_spc \
+ % uspi->s_nsect * uspi->s_interleave) % uspi->s_nsect \
+ * uspi->s_nrpos) / uspi->s_npsect)
-/* current filesystem state; method depends on flags */
-#define UFS_STATE(usb) \
- ( ((flags&UFS_ST_MASK) == UFS_ST_OLD) \
- ? (usb)->fs_u.fs_sun.fs_state /* old normal way */ \
- : (usb)->fs_u.fs_44.fs_state /* 4.4BSD way */ )
+/*
+ * The following macros optimize certain frequently calculated
+ * quantities by using shifts and masks in place of divisions
+ * modulos and multiplications.
+ */
+#define ufs_blkoff(loc) ((loc) & uspi->s_qbmask)
+#define ufs_fragoff(loc) ((loc) & uspi->s_qfmask)
+#define ufs_lblktosize(blk) ((blk) << uspi->s_bshift)
+#define ufs_lblkno(loc) ((loc) >> uspi->s_bshift)
+#define ufs_numfrags(loc) ((loc) >> uspi->s_fshift)
+#define ufs_blkroundup(size) (((size) + uspi->s_qbmask) & uspi->s_bmask)
+#define ufs_fragroundup(size) (((size) + uspi->s_qfmask) & uspi->s_fmask)
+#define ufs_fragstoblks(frags) ((frags) >> uspi->s_fpbshift)
+#define ufs_blkstofrags(blks) ((blks) << uspi->s_fpbshift)
+#define ufs_fragnum(fsb) ((fsb) & uspi->s_fpbmask)
+#define ufs_blknum(fsb) ((fsb) & ~uspi->s_fpbmask)
#define UFS_MAXNAMLEN 255
+#define UFS_MAXMNTLEN 512
+#define UFS_MAXCSBUFS 31
+#define UFS_LINK_MAX EXT2_LINK_MAX
-#define ufs_lbn(sb, block) ((block) >> (sb)->u.ufs_sb.s_lshift)
-#define ufs_boff(sb, block) ((block) & ~((sb)->u.ufs_sb.s_lmask))
-#define ufs_dbn(sb, block, boff) ((block) + ufs_boff((sb), (boff)))
+/*
+ * UFS_DIR_PAD defines the directory entries boundaries
+ * (must be a multiple of 4)
+ */
+#define UFS_DIR_PAD 4
+#define UFS_DIR_ROUND (UFS_DIR_PAD - 1)
+#define UFS_DIR_REC_LEN(name_len) (((name_len) + 1 + 8 + UFS_DIR_ROUND) & ~UFS_DIR_ROUND)
struct ufs_timeval {
__s32 tv_sec;
__s32 tv_usec;
};
-struct ufs_direct {
+struct ufs_dir_entry {
__u32 d_ino; /* inode number of this entry */
__u16 d_reclen; /* length of this entry */
union {
@@ -155,9 +208,6 @@ struct ufs_direct {
__u8 d_name[UFS_MAXNAMLEN + 1]; /* file name */
};
-#define MAXMNTLEN 512
-#define MAXCSBUFS 32
-
struct ufs_csum {
__u32 cs_ndir; /* number of directories */
__u32 cs_nbfree; /* number of free blocks */
@@ -168,7 +218,7 @@ struct ufs_csum {
/*
* This is the actual superblock, as it is laid out on the disk.
*/
-struct ufs_superblock {
+struct ufs_super_block {
__u32 fs_link; /* UNUSED */
__u32 fs_rlink; /* UNUSED */
__u32 fs_sblkno; /* addr of super-block in filesys */
@@ -237,15 +287,18 @@ struct ufs_superblock {
__u8 fs_clean; /* file system is clean flag */
__u8 fs_ronly; /* mounted read-only flag */
__u8 fs_flags; /* currently unused flag */
- __u8 fs_fsmnt[MAXMNTLEN]; /* name mounted on */
+ __u8 fs_fsmnt[UFS_MAXMNTLEN]; /* name mounted on */
/* these fields retain the current block allocation info */
__u32 fs_cgrotor; /* last cg searched */
- __u32 fs_csp[MAXCSBUFS]; /* list of fs_cs info buffers */
+ __u32 fs_csp[UFS_MAXCSBUFS]; /* list of fs_cs info buffers */
+ __u32 fs_maxcluster;
__u32 fs_cpc; /* cyl per cycle in postbl */
__u16 fs_opostbl[16][8]; /* old rotation block list head */
union {
struct {
- __s32 fs_sparecon[55];/* reserved for future constants */
+ __s32 fs_sparecon[53];/* reserved for future constants */
+ __s32 fs_reclaim;
+ __s32 fs_sparecon2[1];
__s32 fs_state; /* file system state time stamp */
__u32 fs_qbmask[2]; /* ~usb_bmask */
__u32 fs_qfmask[2]; /* ~usb_fmask */
@@ -255,7 +308,7 @@ struct ufs_superblock {
__s32 fs_contigsumsize;/* size of cluster summary array */
__s32 fs_maxsymlinklen;/* max length of an internal symlink */
__s32 fs_inodefmt; /* format of on-disk inodes */
- __u32 fs_maxfilesize[2];/* max representable file size */
+ __u32 fs_maxfilesize[2]; /* max representable file size */
__u32 fs_qbmask[2]; /* ~usb_bmask */
__u32 fs_qfmask[2]; /* ~usb_fmask */
__s32 fs_state; /* file system state time stamp */
@@ -270,6 +323,59 @@ struct ufs_superblock {
};
/*
+ * Preference for optimization.
+ */
+#define UFS_OPTTIME 0 /* minimize allocation time */
+#define UFS_OPTSPACE 1 /* minimize disk fragmentation */
+
+/*
+ * Rotational layout table format types
+ */
+#define UFS_42POSTBLFMT -1 /* 4.2BSD rotational table format */
+#define UFS_DYNAMICPOSTBLFMT 1 /* dynamic rotational table format */
+
+/*
+ * Convert cylinder group to base address of its global summary info.
+ */
+#define fs_cs(indx) \
+ u.ufs_sb.s_csp[(indx) >> uspi->s_csshift][(indx) & ~uspi->s_csmask]
+
+/*
+ * Cylinder group block for a file system.
+ *
+ * Writable fields in the cylinder group are protected by the associated
+ * super block lock fs->fs_lock.
+ */
+#define CG_MAGIC 0x090255
+#define ufs_cg_chkmagic(ucg) (SWAB32((ucg)->cg_magic) == CG_MAGIC)
+
+/*
+ * size of this structure is 172 B
+ */
+struct ufs_cylinder_group {
+ __u32 cg_link; /* linked list of cyl groups */
+ __u32 cg_magic; /* magic number */
+ __u32 cg_time; /* time last written */
+ __u32 cg_cgx; /* we are the cgx'th cylinder group */
+ __u16 cg_ncyl; /* number of cyl's this cg */
+ __u16 cg_niblk; /* number of inode blocks this cg */
+ __u32 cg_ndblk; /* number of data blocks this cg */
+ struct ufs_csum cg_cs; /* cylinder summary information */
+ __u32 cg_rotor; /* position of last used block */
+ __u32 cg_frotor; /* position of last used frag */
+ __u32 cg_irotor; /* position of last used inode */
+ __u32 cg_frsum[UFS_MAXFRAG]; /* counts of available frags */
+ __u32 cg_btotoff; /* (__u32) block totals per cylinder */
+ __u32 cg_boff; /* (short) free block positions */
+ __u32 cg_iusedoff; /* (char) used inode map */
+ __u32 cg_freeoff; /* (u_char) free block map */
+ __u32 cg_nextfreeoff; /* (u_char) next available space */
+ __u32 cg_sparecon[16]; /* reserved for future use */
+ __u8 cg_space[1]; /* space for cylinder group maps */
+/* actually longer */
+};
+
+/*
* structure of an on-disk inode
*/
struct ufs_inode {
@@ -277,11 +383,11 @@ struct ufs_inode {
__u16 ui_nlink; /* 0x2 */
union {
struct {
- __u16 suid; /* 0x4 */
- __u16 sgid; /* 0x6 */
+ __u16 ui_suid; /* 0x4 */
+ __u16 ui_sgid; /* 0x6 */
} oldids;
- __u32 inumber; /* 0x4 lsf: inode number */
- __u32 author; /* 0x4 GNU HURD: author */
+ __u32 ui_inumber; /* 0x4 lsf: inode number */
+ __u32 ui_author; /* 0x4 GNU HURD: author */
} ui_u1;
__u64 ui_size; /* 0x8 */
struct ufs_timeval ui_atime; /* 0x10 access */
@@ -333,43 +439,73 @@ struct ufs_inode {
#define UFS_SF_IMMUTABLE 0x00020000 /* immutable (can't "change") */
#define UFS_SF_APPEND 0x00040000 /* append-only */
#define UFS_SF_NOUNLINK 0x00100000 /* can't be removed or renamed */
-
-
-#ifdef __KERNEL__
-/*
- * Function prototypes
- */
-
-/* ufs_inode.c */
-extern int ufs_bmap (struct inode *, int);
-extern void ufs_read_inode(struct inode * inode);
-extern void ufs_put_inode(struct inode * inode);
-extern void ufs_print_inode (struct inode *);
+#ifdef __KERNEL__
-/* ufs_namei.c */
-extern int ufs_lookup (struct inode *, struct dentry *);
+/* acl.c */
+extern int ufs_permission (struct inode *, int);
-/* ufs_super.c */
-extern void ufs_warning (struct super_block *, const char *, const char *, ...)
- __attribute__ ((format (printf, 3, 4)));
-extern int init_ufs_fs(void);
+/* balloc.c */
+extern void ufs_free_fragments (struct inode *, unsigned, unsigned);
+extern void ufs_free_blocks (struct inode *, unsigned, unsigned);
+extern unsigned ufs_new_fragments (struct inode *, u32 *, unsigned, unsigned, unsigned, int *);
-/*
- * Inodes and files operations
- */
+/* cylinder.c */
+extern struct ufs_cg_private_info * ufs_load_cylinder (struct super_block *, unsigned);
+extern void ufs_put_cylinder (struct super_block *, unsigned);
-/* ufs_dir.c */
+/* dir.c */
extern struct inode_operations ufs_dir_inode_operations;
extern struct file_operations ufs_dir_operations;
+extern int ufs_check_dir_entry (const char *, struct inode *, struct ufs_dir_entry *, struct buffer_head *, unsigned long);
-/* ufs_file.c */
+/* file.c */
extern struct inode_operations ufs_file_inode_operations;
extern struct file_operations ufs_file_operations;
-/* ufs_symlink.c */
+/* ialloc.c */
+extern void ufs_free_inode (struct inode *inode);
+extern struct inode * ufs_new_inode (const struct inode *, int, int *);
+
+/* inode.c */
+extern int ufs_bmap (struct inode *, int);
+extern void ufs_read_inode (struct inode *);
+extern void ufs_put_inode (struct inode *);
+extern void ufs_write_inode (struct inode *);
+extern int ufs_sync_inode (struct inode *);
+extern void ufs_print_inode (struct inode *);
+extern void ufs_write_inode (struct inode *);
+extern void ufs_delete_inode (struct inode *);
+extern struct buffer_head * ufs_getfrag (struct inode *, unsigned, int, int *);
+extern struct buffer_head * ufs_bread (struct inode *, unsigned, int, int *);
+
+/* namei.c */
+extern int ufs_lookup (struct inode *, struct dentry *);
+extern int ufs_mkdir(struct inode *, struct dentry *, int);
+extern int ufs_rmdir (struct inode *, struct dentry *);
+extern int ufs_unlink (struct inode *, struct dentry *);
+extern int ufs_create (struct inode *, struct dentry *, int);
+extern int ufs_rename (struct inode *, struct dentry *, struct inode *, struct dentry *);
+extern int ufs_mknod (struct inode *, struct dentry *, int, int);
+extern int ufs_symlink (struct inode *, struct dentry *, const char *);
+extern int ufs_link (struct dentry *, struct inode *, struct dentry *);
+
+/* super.c */
+extern struct super_operations ufs_super_ops;
+extern struct file_system_type ufs_fs_type;
+extern void ufs_warning (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4)));
+extern void ufs_error (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4)));
+extern void ufs_panic (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4)));
+
+extern int init_ufs_fs(void);
+extern void ufs_write_super (struct super_block *);
+extern void ufs_print_cylinder_stuff(struct ufs_cylinder_group *, __u32);
+
+/* symlink.c */
extern struct inode_operations ufs_symlink_inode_operations;
-extern struct file_operations ufs_symlink_operations;
+
+/* truncate.c */
+extern void ufs_truncate (struct inode *);
#endif /* __KERNEL__ */
diff --git a/include/linux/ufs_fs_i.h b/include/linux/ufs_fs_i.h
index 31611830b..e270b71aa 100644
--- a/include/linux/ufs_fs_i.h
+++ b/include/linux/ufs_fs_i.h
@@ -8,6 +8,8 @@
*
* NeXTstep support added on February 5th 1998 by
* Niels Kristian Bech Jensen <nkbj@image.dk>.
+ *
+ * write support by Daniel Pirkl <daniel.pirkl@email.cz>
*/
#ifndef _LINUX_UFS_FS_I_H
@@ -16,7 +18,7 @@
struct ufs_inode_info {
union {
__u32 i_data[15];
- __u8 i_symlink[4*15]; /* fast symlink */
+ __u8 i_symlink[4*15];
} i_u1;
__u64 i_size;
__u32 i_flags;
@@ -25,6 +27,8 @@ struct ufs_inode_info {
__u32 i_uid;
__u32 i_gid;
__u32 i_oeftflag;
+ __u16 i_osync;
+ __u32 i_lastfrag;
};
#endif /* _LINUX_UFS_FS_I_H */
diff --git a/include/linux/ufs_fs_sb.h b/include/linux/ufs_fs_sb.h
index 1469f659f..3f89d4079 100644
--- a/include/linux/ufs_fs_sb.h
+++ b/include/linux/ufs_fs_sb.h
@@ -1,4 +1,4 @@
-/*
+/*
* linux/include/linux/ufs_fs_sb.h
*
* Copyright (C) 1996
@@ -6,8 +6,10 @@
* Laboratory for Computer Science Research Computing Facility
* Rutgers, The State University of New Jersey
*
- * NeXTstep support added on February 5th 1998 by
- * Niels Kristian Bech Jensen <nkbj@image.dk>.
+ * $Id: ufs_fs_sb.h,v 1.8 1998/05/06 12:04:40 jj Exp $
+ *
+ * Write support by Daniel Pirkl (daniel.pirkl@email.cz)
+ * Charles University (Prague), Faculty of Mathematics and Physics
*/
#ifndef __LINUX_UFS_FS_SB_H
@@ -15,27 +17,210 @@
#include <linux/ufs_fs.h>
+/*
+ * This structure is used for reading disk structures larger
+ * than the size of fragment.
+ */
+struct ufs_buffer_head {
+ unsigned fragment; /* first fragment */
+ unsigned count; /* number of fragments */
+ struct buffer_head * bh[UFS_MAXFRAG]; /* buffers */
+};
+
+struct ufs_cg_private_info {
+ struct ufs_cylinder_group ucg;
+ __u32 c_cgx; /* number of cylidner group */
+ __u16 c_ncyl; /* number of cyl's this cg */
+ __u16 c_niblk; /* number of inode blocks this cg */
+ __u32 c_ndblk; /* number of data blocks this cg */
+ __u32 c_rotor; /* position of last used block */
+ __u32 c_frotor; /* position of last used frag */
+ __u32 c_irotor; /* position of last used inode */
+ __u32 c_btotoff; /* (__u32) block totals per cylinder */
+ __u32 c_boff; /* (short) free block positions */
+ __u32 c_iusedoff; /* (char) used inode map */
+ __u32 c_freeoff; /* (u_char) free block map */
+ __u32 c_nextfreeoff; /* (u_char) next available space */
+};
+
+
+struct ufs_sb_private_info {
+ struct ufs_buffer_head s_ubh; /* buffer containing super block */
+ __u32 s_sblkno; /* offset of super-blocks in filesys */
+ __u32 s_cblkno; /* offset of cg-block in filesys */
+ __u32 s_iblkno; /* offset of inode-blocks in filesys */
+ __u32 s_dblkno; /* offset of first data after cg */
+ __u32 s_cgoffset; /* cylinder group offset in cylinder */
+ __u32 s_cgmask; /* used to calc mod fs_ntrak */
+ __u32 s_size; /* number of blocks (fragments) in fs */
+ __u32 s_dsize; /* number of data blocks in fs */
+ __u32 s_ncg; /* number of cylinder groups */
+ __u32 s_bsize; /* size of basic blocks */
+ __u32 s_fsize; /* size of fragments */
+ __u32 s_fpb; /* fragments per block */
+ __u32 s_minfree; /* minimum percentage of free blocks */
+ __u32 s_bmask; /* `blkoff'' calc of blk offsets */
+ __u32 s_fmask; /* s_fsize mask */
+ __u32 s_bshift; /* `lblkno'' calc of logical blkno */
+ __u32 s_fshift; /* s_fsize shift */
+ __u32 s_fpbshift; /* fragments per block shift */
+ __u32 s_fsbtodb; /* fsbtodb and dbtofsb shift constant */
+ __u32 s_sbsize; /* actual size of super block */
+ __u32 s_csmask; /* csum block offset */
+ __u32 s_csshift; /* csum block number */
+ __u32 s_nindir; /* value of NINDIR */
+ __u32 s_inopb; /* value of INOPB */
+ __u32 s_nspf; /* value of NSPF */
+ __u32 s_npsect; /* # sectors/track including spares */
+ __u32 s_interleave; /* hardware sector interleave */
+ __u32 s_trackskew; /* sector 0 skew, per track */
+ __u32 s_csaddr; /* blk addr of cyl grp summary area */
+ __u32 s_cssize; /* size of cyl grp summary area */
+ __u32 s_cgsize; /* cylinder group size */
+ __u32 s_ntrak; /* tracks per cylinder */
+ __u32 s_nsect; /* sectors per track */
+ __u32 s_spc; /* sectors per cylinder */
+ __u32 s_ipg; /* inodes per group */
+ __u32 s_fpg; /* fragments per group */
+ __u32 s_cpc; /* cyl per cycle in postbl */
+ __s64 s_qbmask; /* ~usb_bmask */
+ __s64 s_qfmask; /* ~usb_fmask */
+ __s32 s_postblformat; /* format of positional layout tables */
+ __s32 s_nrpos; /* number of rotational positions */
+ __s32 s_postbloff; /* (__s16) rotation block list head */
+ __s32 s_rotbloff; /* (__u8) blocks for each rotation */
+
+ __u32 s_fpbmask; /* fragments per block mask */
+ __u32 s_apb; /* address per block */
+ __u32 s_2apb; /* address per block^2 */
+ __u32 s_3apb; /* address per block^3 */
+ __u32 s_apbmask; /* address per block mask */
+ __u32 s_apbshift; /* address per block shift */
+ __u32 s_2apbshift; /* address per block shift * 2 */
+ __u32 s_3apbshift; /* address per block shift * 3 */
+ __u32 s_nspfshift; /* number of sector per fragment shift */
+ __u32 s_nspb; /* number of sector per block */
+ __u32 s_inopf; /* inodes per fragment */
+ __u32 s_sbbase; /* offset of NeXTstep superblock */
+};
+
+
+#define UFS_MAX_GROUP_LOADED 1
+#define UFS_CGNO_EMPTY uspi->s_ncg
+
struct ufs_sb_info {
- struct ufs_superblock * s_raw_sb;
- __u32 s_flags; /* internal flags for UFS code */
- __u32 s_ncg; /* used in ufs_read_inode */
- __u32 s_ipg; /* used in ufs_read_inode */
- __u32 s_fpg;
- __u32 s_fsize;
- __u32 s_fshift;
- __u32 s_fmask;
- __u32 s_bsize;
- __u32 s_bmask;
- __u32 s_bshift;
- __u32 s_iblkno;
- __u32 s_dblkno;
- __u32 s_cgoffset;
- __u32 s_cgmask;
- __u32 s_inopb;
- __u32 s_lshift;
- __u32 s_lmask;
- __u32 s_fsfrag;
- __u32 s_blockbase; /* offset of NeXTstep superblock */
+ struct ufs_sb_private_info * s_uspi;
+ struct ufs_csum * s_csp[UFS_MAXCSBUFS];
+ int s_rename_lock;
+ struct wait_queue * s_rename_wait;
+ unsigned s_swab;
+ unsigned s_flags;
+ struct buffer_head ** s_ucg;
+ struct ufs_cg_private_info * s_ucpi[UFS_MAX_GROUP_LOADED];
+ unsigned s_cgno[UFS_MAX_GROUP_LOADED];
+ unsigned short s_cg_loaded;
+};
+
+/*
+ * Sizes of this structures are:
+ * ufs_super_block_first 512
+ * ufs_super_block_second 512
+ * ufs_super_block_third 356
+ */
+struct ufs_super_block_first {
+ __u32 fs_link;
+ __u32 fs_rlink;
+ __u32 fs_sblkno;
+ __u32 fs_cblkno;
+ __u32 fs_iblkno;
+ __u32 fs_dblkno;
+ __u32 fs_cgoffset;
+ __u32 fs_cgmask;
+ __u32 fs_time;
+ __u32 fs_size;
+ __u32 fs_dsize;
+ __u32 fs_ncg;
+ __u32 fs_bsize;
+ __u32 fs_fsize;
+ __u32 fs_frag;
+ __u32 fs_minfree;
+ __u32 fs_rotdelay;
+ __u32 fs_rps;
+ __u32 fs_bmask;
+ __u32 fs_fmask;
+ __u32 fs_bshift;
+ __u32 fs_fshift;
+ __u32 fs_maxcontig;
+ __u32 fs_maxbpg;
+ __u32 fs_fragshift;
+ __u32 fs_fsbtodb;
+ __u32 fs_sbsize;
+ __u32 fs_csmask;
+ __u32 fs_csshift;
+ __u32 fs_nindir;
+ __u32 fs_inopb;
+ __u32 fs_nspf;
+ __u32 fs_optim;
+ __u32 fs_npsect;
+ __u32 fs_interleave;
+ __u32 fs_trackskew;
+ __u32 fs_id[2];
+ __u32 fs_csaddr;
+ __u32 fs_cssize;
+ __u32 fs_cgsize;
+ __u32 fs_ntrak;
+ __u32 fs_nsect;
+ __u32 fs_spc;
+ __u32 fs_ncyl;
+ __u32 fs_cpg;
+ __u32 fs_ipg;
+ __u32 fs_fpg;
+ struct ufs_csum fs_cstotal;
+ __u8 fs_fmod;
+ __u8 fs_clean;
+ __u8 fs_ronly;
+ __u8 fs_flags;
+ __u8 fs_fsmnt[UFS_MAXMNTLEN - 212];
+
+};
+
+struct ufs_super_block_second {
+ __u8 fs_fsmnt[212];
+ __u32 fs_cgrotor;
+ __u32 fs_csp[UFS_MAXCSBUFS];
+ __u32 fs_maxcluster;
+ __u32 fs_cpc;
+ __u16 fs_opostbl[82];
+};
+
+struct ufs_super_block_third {
+ __u16 fs_opostbl[46];
+ union {
+ struct {
+ __s32 fs_sparecon[53];/* reserved for future constants */
+ __s32 fs_reclaim;
+ __s32 fs_sparecon2[1];
+ __s32 fs_state; /* file system state time stamp */
+ __u32 fs_qbmask[2]; /* ~usb_bmask */
+ __u32 fs_qfmask[2]; /* ~usb_fmask */
+ } fs_sun;
+ struct {
+ __s32 fs_sparecon[50];/* reserved for future constants */
+ __s32 fs_contigsumsize;/* size of cluster summary array */
+ __s32 fs_maxsymlinklen;/* max length of an internal symlink */
+ __s32 fs_inodefmt; /* format of on-disk inodes */
+ __u32 fs_maxfilesize[2]; /* max representable file size */
+ __u32 fs_qbmask[2]; /* ~usb_bmask */
+ __u32 fs_qfmask[2]; /* ~usb_fmask */
+ __s32 fs_state; /* file system state time stamp */
+ } fs_44;
+ } fs_u;
+ __s32 fs_postblformat;
+ __s32 fs_nrpos;
+ __s32 fs_postbloff;
+ __s32 fs_rotbloff;
+ __s32 fs_magic;
+ __u8 fs_space[1];
};
#endif /* __LINUX_UFS_FS_SB_H */
diff --git a/include/linux/umsdos_fs.h b/include/linux/umsdos_fs.h
index b5f6b38c7..c9cfd16e6 100644
--- a/include/linux/umsdos_fs.h
+++ b/include/linux/umsdos_fs.h
@@ -24,8 +24,8 @@
struct umsdos_fake_info {
- char fname[13];
- int len;
+ char fname[13];
+ int len;
};
#define UMSDOS_MAXNAME 220
@@ -33,99 +33,106 @@ struct umsdos_fake_info {
/* of it is written to disk */
/* nice though it would be, I can't change this and preserve backward compatibility */
struct umsdos_dirent {
- unsigned char name_len; /* if == 0, then this entry is not used */
- unsigned char flags; /* UMSDOS_xxxx */
- unsigned short nlink; /* How many hard links point to this entry */
- uid_t uid; /* Owner user id */
- gid_t gid; /* Group id */
- time_t atime; /* Access time */
- time_t mtime; /* Last modification time */
- time_t ctime; /* Creation time */
- dev_t rdev; /* major and minor number of a device */
- /* special file */
- umode_t mode; /* Standard UNIX permissions bits + type of */
- char spare[12]; /* unused bytes for future extensions */
- /* file, see linux/stat.h */
- char name[UMSDOS_MAXNAME]; /* Not '\0' terminated */
- /* but '\0' padded, so it will allow */
- /* for adding news fields in this record */
- /* by reducing the size of name[] */
+ unsigned char name_len; /* if == 0, then this entry is not used */
+ unsigned char flags; /* UMSDOS_xxxx */
+ unsigned short nlink; /* How many hard links point to this entry */
+ uid_t uid; /* Owner user id */
+ gid_t gid; /* Group id */
+ time_t atime; /* Access time */
+ time_t mtime; /* Last modification time */
+ time_t ctime; /* Creation time */
+ dev_t rdev; /* major and minor number of a device */
+ /* special file */
+ umode_t mode; /* Standard UNIX permissions bits + type of */
+ char spare[12]; /* unused bytes for future extensions */
+ /* file, see linux/stat.h */
+ char name[UMSDOS_MAXNAME]; /* Not '\0' terminated */
+ /* but '\0' padded, so it will allow */
+ /* for adding news fields in this record */
+ /* by reducing the size of name[] */
};
+
#define UMSDOS_HIDDEN 1 /* Never show this entry in directory search */
#define UMSDOS_HLINK 2 /* It is a (pseudo) hard link */
/* #Specification: EMD file / record size
- Entry are 64 bytes wide in the EMD file. It allows for a 30 characters
- name. If a name is longer, contiguous entries are allocated. So a
- umsdos_dirent may span multiple records.
-*/
+ * Entry are 64 bytes wide in the EMD file. It allows for a 30 characters
+ * name. If a name is longer, contiguous entries are allocated. So a
+ * umsdos_dirent may span multiple records.
+ */
+
#define UMSDOS_REC_SIZE 64
/* Translation between MSDOS name and UMSDOS name */
-struct umsdos_info{
- int msdos_reject; /* Tell if the file name is invalid for MSDOS */
- /* See umsdos_parse */
- struct umsdos_fake_info fake;
- struct umsdos_dirent entry;
- off_t f_pos; /* offset of the entry in the EMD file */
- /* or offset where the entry may be store */
- /* if it is a new entry */
- int recsize; /* Record size needed to store entry */
+struct umsdos_info {
+ int msdos_reject; /* Tell if the file name is invalid for MSDOS */
+ /* See umsdos_parse */
+ struct umsdos_fake_info fake;
+ struct umsdos_dirent entry;
+ off_t f_pos; /* offset of the entry in the EMD file
+ * or offset where the entry may be store
+ * if it is a new entry
+ */
+ int recsize; /* Record size needed to store entry */
};
-/* Definitions for ioctl (number randomly chosen) */
-/* The next ioctl commands operate only on the DOS directory */
-/* The file umsdos_progs/umsdosio.c contain a string table */
-/* based on the order of those definition. Keep it in sync */
-#define UMSDOS_READDIR_DOS _IO(0x04,210) /* Do a readdir of the DOS directory */
-#define UMSDOS_UNLINK_DOS _IO(0x04,211) /* Erase in the DOS directory only */
-#define UMSDOS_RMDIR_DOS _IO(0x04,212) /* rmdir in the DOS directory only */
-#define UMSDOS_STAT_DOS _IO(0x04,213) /* Get info about a file */
+/* Definitions for ioctl (number randomly chosen)
+ * The next ioctl commands operate only on the DOS directory
+ * The file umsdos_progs/umsdosio.c contain a string table
+ * based on the order of those definition. Keep it in sync
+ */
+#define UMSDOS_READDIR_DOS _IO(0x04,210) /* Do a readdir of the DOS directory */
+#define UMSDOS_UNLINK_DOS _IO(0x04,211) /* Erase in the DOS directory only */
+#define UMSDOS_RMDIR_DOS _IO(0x04,212) /* rmdir in the DOS directory only */
+#define UMSDOS_STAT_DOS _IO(0x04,213) /* Get info about a file */
+
/* The next ioctl commands operate only on the EMD file */
-#define UMSDOS_CREAT_EMD _IO(0x04,214) /* Create a file */
-#define UMSDOS_UNLINK_EMD _IO(0x04,215) /* unlink (rmdir) a file */
-#define UMSDOS_READDIR_EMD _IO(0x04,216) /* read the EMD file only. */
-#define UMSDOS_GETVERSION _IO(0x04,217) /* Get the release number of UMSDOS */
-#define UMSDOS_INIT_EMD _IO(0x04,218) /* Create the EMD file if not there */
-#define UMSDOS_DOS_SETUP _IO(0x04,219) /* Set the defaults of the MsDOS driver */
-
-#define UMSDOS_RENAME_DOS _IO(0x04,220) /* rename a file/directory in the DOS */
- /* directory only */
-struct umsdos_ioctl{
- struct dirent dos_dirent;
- struct umsdos_dirent umsdos_dirent;
- /* The following structure is used to exchange some data */
- /* with utilities (umsdos_progs/util/umsdosio.c). The first */
- /* releases were using struct stat from "sys/stat.h". This was */
- /* causing some problem for cross compilation of the kernel */
- /* Since I am not really using the structure stat, but only some field */
- /* of it, I have decided to replicate the structure here */
- /* for compatibility with the binaries out there */
- /* FIXME PTW 1998, this has probably changed */
- struct {
- dev_t st_dev;
- unsigned short __pad1;
- ino_t st_ino;
- umode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- gid_t st_gid;
- dev_t st_rdev;
- unsigned short __pad2;
- off_t st_size;
- unsigned long st_blksize;
- unsigned long st_blocks;
- time_t st_atime;
- unsigned long __unused1;
- time_t st_mtime;
- unsigned long __unused2;
- time_t st_ctime;
- unsigned long __unused3;
- unsigned long __unused4;
- unsigned long __unused5;
- }stat;
- char version,release;
+#define UMSDOS_CREAT_EMD _IO(0x04,214) /* Create a file */
+#define UMSDOS_UNLINK_EMD _IO(0x04,215) /* unlink (rmdir) a file */
+#define UMSDOS_READDIR_EMD _IO(0x04,216) /* read the EMD file only. */
+#define UMSDOS_GETVERSION _IO(0x04,217) /* Get the release number of UMSDOS */
+#define UMSDOS_INIT_EMD _IO(0x04,218) /* Create the EMD file if not there */
+#define UMSDOS_DOS_SETUP _IO(0x04,219) /* Set the defaults of the MsDOS driver */
+
+#define UMSDOS_RENAME_DOS _IO(0x04,220) /* rename a file/directory in the DOS
+ * directory only */
+struct umsdos_ioctl {
+ struct dirent dos_dirent;
+ struct umsdos_dirent umsdos_dirent;
+ /* The following structure is used to exchange some data
+ * with utilities (umsdos_progs/util/umsdosio.c). The first
+ * releases were using struct stat from "sys/stat.h". This was
+ * causing some problem for cross compilation of the kernel
+ * Since I am not really using the structure stat, but only some field
+ * of it, I have decided to replicate the structure here
+ * for compatibility with the binaries out there
+ * FIXME PTW 1998, this has probably changed
+ */
+
+ struct {
+ dev_t st_dev;
+ unsigned short __pad1;
+ ino_t st_ino;
+ umode_t st_mode;
+ nlink_t st_nlink;
+ uid_t st_uid;
+ gid_t st_gid;
+ dev_t st_rdev;
+ unsigned short __pad2;
+ off_t st_size;
+ unsigned long st_blksize;
+ unsigned long st_blocks;
+ time_t st_atime;
+ unsigned long __unused1;
+ time_t st_mtime;
+ unsigned long __unused2;
+ time_t st_ctime;
+ unsigned long __unused3;
+ unsigned long __unused4;
+ unsigned long __unused5;
+ } stat;
+ char version, release;
};
/* Different macros to access struct umsdos_dirent */
@@ -138,15 +145,15 @@ struct umsdos_ioctl{
#endif
extern struct inode_operations umsdos_dir_inode_operations;
-extern struct file_operations umsdos_file_operations;
+extern struct file_operations umsdos_file_operations;
extern struct inode_operations umsdos_file_inode_operations;
extern struct inode_operations umsdos_file_inode_operations_no_bmap;
extern struct inode_operations umsdos_file_inode_operations_readpage;
extern struct inode_operations umsdos_symlink_inode_operations;
-extern int init_umsdos_fs(void);
+extern int init_umsdos_fs (void);
#include <linux/umsdos_fs.p>
-#endif /* __KERNEL__ */
+#endif /* __KERNEL__ */
#endif
diff --git a/include/linux/umsdos_fs.p b/include/linux/umsdos_fs.p
index 586f168fe..0a7475a1c 100644
--- a/include/linux/umsdos_fs.p
+++ b/include/linux/umsdos_fs.p
@@ -27,12 +27,6 @@ int UMSDOS_lookup(struct inode *dir,struct dentry *dentry);
int umsdos_hlink2inode (struct inode *hlink, struct inode **result);
/* emd.c 22/06/95 00.22.04 */
-void fill_new_filp (struct file *filp, struct dentry *dentry);
-void kill_dentry (struct dentry *dentry);
-struct dentry *creat_dentry (const char *name,
- const int len,
- struct inode *inode,
- struct dentry *parent);
ssize_t umsdos_file_write_kmem_real (struct file *filp,
const char *buf,
size_t count,
@@ -77,6 +71,16 @@ int umsdos_findentry (struct inode *dir,
int expect);
/* file.c 25/01/95 02.25.38 */
/* inode.c 12/06/95 09.49.40 */
+inline struct dentry *geti_dentry (struct inode *inode);
+inline void inc_count (struct inode *inode);
+void check_inode (struct inode *inode);
+void check_dentry (struct dentry *dentry);
+void fill_new_filp (struct file *filp, struct dentry *dentry);
+void kill_dentry (struct dentry *dentry);
+struct dentry *creat_dentry (const char *name,
+ const int len,
+ struct inode *inode,
+ struct dentry *parent);
void UMSDOS_put_inode (struct inode *inode);
void UMSDOS_put_super (struct super_block *sb);
int UMSDOS_statfs (struct super_block *sb,
diff --git a/include/linux/umsdos_fs_i.h b/include/linux/umsdos_fs_i.h
index 1020179eb..dea618561 100644
--- a/include/linux/umsdos_fs_i.h
+++ b/include/linux/umsdos_fs_i.h
@@ -4,65 +4,68 @@
#ifndef _LINUX_TYPES_H
#include <linux/types.h>
#endif
+
#include <linux/msdos_fs_i.h>
#include <linux/pipe_fs_i.h>
/* #Specification: strategy / in memory inode
- Here is the information specific to the inode of the UMSDOS file
- system. This information is added to the end of the standard struct
- inode. Each file system has its own extension to struct inode,
- so do the umsdos file system.
-
- The strategy is to have the umsdos_inode_info as a superset of
- the msdos_inode_info, since most of the time the job is done
- by the msdos fs code.
-
- So we duplicate the msdos_inode_info, and add our own info at the
- end.
-
- For all file type (and directory) the inode has a reference to:
- the directory which hold this entry: i_dir_owner
- The EMD file of i_dir_owner: i_emd_owner
- The offset in this EMD file of the entry: pos
-
- For directory, we also have a reference to the inode of its
- own EMD file. Also, we have dir_locking_info to help synchronise
- file creation and file lookup. This data is sharing space with
- the pipe_inode_info not used by directory. See also msdos_fs_i.h
- for more information about pipe_inode_info and msdos_inode_info.
+ * Here is the information specific to the inode of the UMSDOS file
+ * system. This information is added to the end of the standard struct
+ * inode. Each file system has its own extension to struct inode,
+ * so do the umsdos file system.
+ *
+ * The strategy is to have the umsdos_inode_info as a superset of
+ * the msdos_inode_info, since most of the time the job is done
+ * by the msdos fs code.
+ *
+ * So we duplicate the msdos_inode_info, and add our own info at the
+ * end.
+ *
+ * For all file type (and directory) the inode has a reference to:
+ * the directory which hold this entry: i_dir_owner
+ * The EMD file of i_dir_owner: i_emd_owner
+ * The offset in this EMD file of the entry: pos
+ *
+ * For directory, we also have a reference to the inode of its
+ * own EMD file. Also, we have dir_locking_info to help synchronise
+ * file creation and file lookup. This data is sharing space with
+ * the pipe_inode_info not used by directory. See also msdos_fs_i.h
+ * for more information about pipe_inode_info and msdos_inode_info.
+ *
+ * Special file and fifo do have an inode which correspond to an
+ * empty MSDOS file.
+ *
+ * symlink are processed mostly like regular file. The content is the
+ * link.
+ *
+ * fifos add there own extension to the inode. I have reserved some
+ * space for fifos side by side with msdos_inode_info. This is just
+ * to for the show, because msdos_inode_info already include the
+ * pipe_inode_info.
+ *
+ * The UMSDOS specific extension is placed after the union.
+ */
- Special file and fifo do have an inode which correspond to an
- empty MSDOS file.
-
- symlink are processed mostly like regular file. The content is the
- link.
-
- fifos add there own extension to the inode. I have reserved some
- space for fifos side by side with msdos_inode_info. This is just
- to for the show, because msdos_inode_info already include the
- pipe_inode_info.
-
- The UMSDOS specific extension is placed after the union.
-*/
struct dir_locking_info {
struct wait_queue *p;
- short int looking; /* How many process doing a lookup */
- short int creating; /* Is there any creation going on here */
- /* Only one at a time, although one */
- /* may recursively lock, so it is a counter */
- long pid; /* pid of the process owning the creation */
- /* lock */
+ short int looking; /* How many process doing a lookup */
+ short int creating; /* Is there any creation going on here
+ * Only one at a time, although one
+ * may recursively lock, so it is a counter
+ */
+ long pid; /* pid of the process owning the creation */
+ /* lock */
};
+
struct umsdos_inode_info {
union {
struct msdos_inode_info msdos_info;
struct pipe_inode_info pipe_info;
struct dir_locking_info dir_info;
- }u; /* Simply a filler, never referenced by fs/umsdos/... */
- unsigned long i_dir_owner; /* Inode of the dir which hold this */
- /* entry */
+ } u; /* Simply a filler, never referenced by fs/umsdos/... */
+ unsigned long i_dir_owner; /* Inode of the dir which hold this entry */
unsigned long i_emd_owner; /* Inode of the EMD file of i_dir_owner */
- off_t pos; /* Entry offset in the emd_owner file */
+ off_t pos; /* Entry offset in the emd_owner file */
/* The rest is used only if this inode describe a directory */
unsigned long i_emd_dir; /* Inode of the EMD file of this inode */
};
diff --git a/include/linux/utsname.h b/include/linux/utsname.h
index 7aef28fc3..a83503f99 100644
--- a/include/linux/utsname.h
+++ b/include/linux/utsname.h
@@ -32,4 +32,5 @@ struct new_utsname {
extern struct new_utsname system_utsname;
+extern struct semaphore uts_sem;
#endif
diff --git a/include/linux/videodev.h b/include/linux/videodev.h
index 960ffad9a..701fb8870 100644
--- a/include/linux/videodev.h
+++ b/include/linux/videodev.h
@@ -3,6 +3,8 @@
#ifdef __KERNEL__
+#include <linux/poll.h>
+
struct video_device
{
char name[32];
@@ -14,6 +16,7 @@ struct video_device
long (*read)(struct video_device *, char *, unsigned long, int noblock);
/* Do we need a write method ? */
long (*write)(struct video_device *, const char *, unsigned long, int noblock);
+ unsigned int (*poll)(struct video_device *, struct file *, poll_table *);
int (*ioctl)(struct video_device *, unsigned int , void *);
int (*mmap)(struct video_device *, const char *, unsigned long);
int (*initialize)(struct video_device *);
@@ -80,11 +83,14 @@ struct video_tuner
#define VIDEO_TUNER_PAL 1
#define VIDEO_TUNER_NTSC 2
#define VIDEO_TUNER_SECAM 4
+#define VIDEO_TUNER_LOW 8 /* Uses KHz not MHz */
+#define VIDEO_TUNER_STEREO_ON 128 /* Tuner is seeing stereo */
__u16 mode; /* PAL/NTSC/SECAM/OTHER */
#define VIDEO_MODE_PAL 0
#define VIDEO_MODE_NTSC 1
#define VIDEO_MODE_SECAM 2
#define VIDEO_MODE_AUTO 3
+ __u16 signal; /* Signal strength 16bit scale */
};
struct video_picture
@@ -102,6 +108,14 @@ struct video_picture
#define VIDEO_PALETTE_RGB24 4 /* 24bit RGB */
#define VIDEO_PALETTE_RGB32 5 /* 32bit RGB */
#define VIDEO_PALETTE_RGB555 6 /* 555 15bit RGB */
+#define VIDEO_PALETTE_YUV422 7 /* YUV422 capture */
+#define VIDEO_PALETTE_YUYV 8
+#define VIDEO_PALETTE_UYVY 9 /* The great thing about standards is ... */
+#define VIDEO_PALETTE_YUV420 10
+#define VIDEO_PALETTE_YUV411 11 /* YUV411 capture */
+#define VIDEO_PALETTE_RAW 12 /* RAW capture (BT848) */
+#define VIDEO_PALETTE_YUV422P 13 /* YUV 4:2:2 Planar */
+#define VIDEO_PALETTE_YUV411P 14 /* YUV 4:1:1 Planar */
};
struct video_audio
@@ -153,7 +167,7 @@ struct video_mmap
{
unsigned int frame; /* Frame (0 or 1) for double buffer */
int height,width;
- unsigned int format;
+ unsigned int format; /* should be VIDEO_PALETTE_* */
};
struct video_key
@@ -192,6 +206,13 @@ struct video_key
#define VID_HARDWARE_QCAM_C 4
#define VID_HARDWARE_PSEUDO 5
#define VID_HARDWARE_SAA5249 6
+#define VID_HARDWARE_AZTECH 7
+#define VID_HARDWARE_SF16MI 8
+#define VID_HARDWARE_RTRACK 9
+#define VID_HARDWARE_ZOLTRIX 10
+#define VID_HARDWARE_SAA7146 11
+#define VID_HARDWARE_VIDEUM 12 /* Reserved for Winnov videum */
+#define VID_HARDWARE_RTRACK2 13
/*
* Initialiser list
diff --git a/include/linux/videotext.h b/include/linux/videotext.h
index bd427fb31..78faf6afe 100644
--- a/include/linux/videotext.h
+++ b/include/linux/videotext.h
@@ -99,7 +99,7 @@ typedef struct
unsigned serial : 1; /* serial mode (C11) */
unsigned notfound : 1; /* /FOUND */
unsigned pblf : 1; /* PBLF */
- unsigned hamming : 1; /* hamming-error occured */
+ unsigned hamming : 1; /* hamming-error occurred */
}
vtx_pageinfo_t;
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
index cac9992bf..0ddee5b36 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
@@ -24,20 +24,5 @@ long vread(char *buf, char *addr, unsigned long count);
void vmfree_area_pages(unsigned long address, unsigned long size);
int vmalloc_area_pages(unsigned long address, unsigned long size, pgprot_t prot);
-extern inline void set_pgdir(unsigned long address, pgd_t entry)
-{
-#if !defined(__mc68000__) && !defined(__sparc_v9__)
- struct task_struct * p;
-
- read_lock(&tasklist_lock);
- for_each_task(p) {
- if (!p->mm)
- continue;
- *pgd_offset(p->mm,address) = entry;
- }
- read_unlock(&tasklist_lock);
-#endif
-}
-
#endif
diff --git a/include/linux/vt_buffer.h b/include/linux/vt_buffer.h
new file mode 100644
index 000000000..a26c8090d
--- /dev/null
+++ b/include/linux/vt_buffer.h
@@ -0,0 +1,86 @@
+/*
+ * include/linux/vt_buffer.h -- Access to VT screen buffer
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * This is a set of macros and functions which are used in the
+ * console driver and related code to access the screen buffer.
+ * In most cases the console works with simple in-memory buffer,
+ * but when handling hardware text mode consoles, we store
+ * the foreground console directly in video memory.
+ */
+
+#ifndef _LINUX_VT_BUFFER_H_
+#define _LINUX_VT_BUFFER_H_
+
+#include <linux/config.h>
+
+#ifdef CONFIG_VGA_CONSOLE
+#if !defined(CONFIG_FB) && !defined(CONFIG_FB_MODULE)
+#define VT_BUF_VRAM_ONLY
+#endif
+#include <asm/vga.h>
+#endif
+
+#ifndef VT_BUF_HAVE_RW
+#define scr_writew(val, addr) (*(addr) = (val))
+#define scr_readw(addr) (*(addr))
+#define scr_memcpyw(d, s, c) memcpy(d, s, c)
+#define scr_memmovew(d, s, c) memmove(d, s, c)
+#define VT_BUF_HAVE_MEMCPYW
+#define VT_BUF_HAVE_MEMMOVEW
+#define scr_memcpyw_from(d, s, c) memcpy(d, s, c)
+#define scr_memcpyw_to(d, s, c) memcpy(d, s, c)
+#define VT_BUF_HAVE_MEMCPYF
+#endif
+
+#ifndef VT_BUF_HAVE_MEMSETW
+extern inline void scr_memsetw(u16 *s, u16 c, unsigned int count)
+{
+ count /= 2;
+ while (count--)
+ scr_writew(c, s++);
+}
+#endif
+
+#ifndef VT_BUF_HAVE_MEMCPYW
+extern inline void scr_memcpyw(u16 *d, u16 *s, unsigned int count)
+{
+ count /= 2;
+ while (count--)
+ scr_writew(scr_readw(s++), d++);
+}
+#endif
+
+#ifndef VT_BUF_HAVE_MEMMOVEW
+extern inline void scr_memmovew(u16 *d, u16 *s, unsigned int count)
+{
+ if (d < s)
+ scr_memcpyw(d, s, count);
+ else {
+ count /= 2;
+ d += count;
+ s += count;
+ while (count--)
+ scr_writew(scr_readw(--s), --d);
+ }
+}
+#endif
+
+#ifndef VT_BUF_HAVE_MEMCPYF
+extern inline void scr_memcpyw_from(u16 *d, u16 *s, unsigned int count)
+{
+ count /= 2;
+ while (count--)
+ *d++ = scr_readw(s++);
+}
+
+extern inline void scr_memcpyw_to(u16 *d, u16 *s, unsigned int count)
+{
+ count /= 2;
+ while (count--)
+ scr_writew(*s++, d++);
+}
+#endif
+
+#endif
diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h
index 1692f991c..e4f48e908 100644
--- a/include/linux/vt_kern.h
+++ b/include/linux/vt_kern.h
@@ -6,6 +6,7 @@
* with information needed by the vt package
*/
+#include <linux/config.h>
#include <linux/vt.h>
/*
@@ -16,14 +17,13 @@
* fixed. The linux/Documentation directory includes a code snippet
* to save and restore the text font.
*/
+#ifdef CONFIG_VGA_CONSOLE
#define BROKEN_GRAPHICS_PROGRAMS 1
+#endif
extern struct vt_struct {
int vc_num; /* The console number */
unsigned char vc_mode; /* KD_TEXT, ... */
- unsigned char vc_kbdraw;
- unsigned char vc_kbde0;
- unsigned char vc_kbdleds;
struct vt_mode vt_mode;
int vt_pid;
int vt_newvt;
@@ -31,9 +31,61 @@ extern struct vt_struct {
} *vt_cons[MAX_NR_CONSOLES];
void (*kd_mksound)(unsigned int hz, unsigned int ticks);
-int vc_allocate(unsigned int console);
+
+/* console.c */
+
+struct console_font_op;
+
+int vc_allocate(unsigned int console, int init);
int vc_cons_allocated(unsigned int console);
-int vc_resize(unsigned long lines, unsigned long cols);
+int vc_resize(unsigned int lines, unsigned int cols,
+ unsigned int first, unsigned int last);
+#define vc_resize_all(l, c) vc_resize(l, c, 0, MAX_NR_CONSOLES-1)
+#define vc_resize_con(l, c, x) vc_resize(l, c, x, x)
void vc_disallocate(unsigned int console);
+void poke_blanked_console(void);
+void set_vesa_blanking(unsigned long arg);
+void vesa_blank(void);
+void vesa_powerdown(void);
+void reset_palette(int currcons);
+void set_palette(void);
+void do_blank_screen(int nopowersave);
+int con_font_op(int currcons, struct console_font_op *op);
+int con_set_cmap(unsigned char *cmap);
+int con_get_cmap(unsigned char *cmap);
+void scrollback(int);
+void scrollfront(int);
+void update_region(int currcons, unsigned long start, int count);
+
+struct tty_struct;
+int tioclinux(struct tty_struct *tty, unsigned long arg);
+
+/* consolemap.c */
+
+struct unimapinit;
+struct unipair;
+
+int con_set_trans_old(unsigned char * table);
+int con_get_trans_old(unsigned char * table);
+int con_set_trans_new(unsigned short * table);
+int con_get_trans_new(unsigned short * table);
+int con_clear_unimap(int currcons, struct unimapinit *ui);
+int con_set_unimap(int currcons, ushort ct, struct unipair *list);
+int con_get_unimap(int currcons, ushort ct, ushort *uct, struct unipair *list);
+int con_set_default_unimap(int currcons);
+void con_free_unimap(int currcons);
+void con_protect_unimap(int currcons, int rdonly);
+
+/* vt.c */
+
+extern unsigned int video_font_height;
+extern unsigned int default_font_height;
+extern unsigned int video_scan_lines;
+
+void complete_change_console(unsigned int new_console);
+int vt_waitactive(int vt);
+void change_console(unsigned int);
+void reset_vc(unsigned int new_console);
+int vt_waitactive(int vt);
#endif /* _VT_KERN_H */
diff --git a/include/linux/wavefront.h b/include/linux/wavefront.h
new file mode 100644
index 000000000..736fc2747
--- /dev/null
+++ b/include/linux/wavefront.h
@@ -0,0 +1,670 @@
+#ifndef __wavefront_h__
+#define __wavefront_h__
+
+/* WaveFront header file.
+ *
+ * Copyright (C) by Paul Barton-Davis 1998
+ *
+ * This program is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
+ * Version 2 (June 1991). See the "COPYING" file distributed with this software
+ * for more info.
+ */
+
+#if (!defined(__GNUC__) && !defined(__GNUG__))
+
+ You will not be able to compile this file correctly without gcc, because
+ it is necessary to pack the "wavefront_alias" structure to a size
+ of 22 bytes, corresponding to 16-bit alignment (as would have been
+ the case on the original platform, MS-DOS). If this is not done,
+ then WavePatch-format files cannot be read/written correctly.
+ The method used to do this here ("__attribute__((packed)") is
+ completely compiler dependent.
+
+ All other wavefront_* types end up aligned to 32 bit values and
+ still have the same (correct) size.
+
+#else
+
+ /* However, note that as of G++ 2.7.3.2, g++ was unable to
+ correctly parse *type* __attribute__ tags. It will do the
+ right thing if we use the "packed" attribute on each struct
+ member, which has the same semantics anyway.
+ */
+
+#endif __GNUC__
+
+/***************************** WARNING ********************************
+ PLEASE DO NOT MODIFY THIS FILE IN ANY WAY THAT AFFECTS ITS ABILITY TO
+ BE USED WITH EITHER C *OR* C++.
+ **********************************************************************/
+
+#ifndef NUM_MIDIKEYS
+#define NUM_MIDIKEYS 128
+#endif NUM_MIDIKEYS
+
+#ifndef NUM_MIDICHANNELS
+#define NUM_MIDICHANNELS 16
+#endif NUM_MIDICHANNELS
+
+/* These are very useful/important. the original wavefront interface
+ was developed on a 16 bit system, where sizeof(int) = 2
+ bytes. Defining things like this makes the code much more portable, and
+ easier to understand without having to toggle back and forth
+ between a 16-bit view of the world and a 32-bit one.
+ */
+
+typedef short INT16;
+typedef unsigned short UINT16;
+typedef int INT32;
+typedef unsigned int UINT32;
+typedef char CHAR8;
+typedef unsigned char UCHAR8;
+
+/* Pseudo-commands not part of the WaveFront command set.
+ These are used for various driver controls and direct
+ hardware control.
+ */
+
+#define WFC_DEBUG_DRIVER 0
+#define WFC_FX_IOCTL 1
+#define WFC_PATCH_STATUS 2
+#define WFC_PROGRAM_STATUS 3
+#define WFC_SAMPLE_STATUS 4
+#define WFC_DISABLE_INTERRUPTS 5
+#define WFC_ENABLE_INTERRUPTS 6
+#define WFC_INTERRUPT_STATUS 7
+#define WFC_ROMSAMPLES_RDONLY 8
+#define WFC_IDENTIFY_SLOT_TYPE 9
+
+/* Wavefront synth commands
+ */
+
+#define WFC_DOWNLOAD_SAMPLE 0x80
+#define WFC_DOWNLOAD_BLOCK 0x81
+#define WFC_DOWNLOAD_MULTISAMPLE 0x82
+#define WFC_DOWNLOAD_SAMPLE_ALIAS 0x83
+#define WFC_DELETE_SAMPLE 0x84
+#define WFC_REPORT_FREE_MEMORY 0x85
+#define WFC_DOWNLOAD_PATCH 0x86
+#define WFC_DOWNLOAD_PROGRAM 0x87
+#define WFC_SET_SYNTHVOL 0x89
+#define WFC_SET_NVOICES 0x8B
+#define WFC_DOWNLOAD_DRUM 0x90
+#define WFC_GET_SYNTHVOL 0x92
+#define WFC_GET_NVOICES 0x94
+#define WFC_DISABLE_CHANNEL 0x9A
+#define WFC_ENABLE_CHANNEL 0x9B
+#define WFC_MISYNTH_OFF 0x9D
+#define WFC_MISYNTH_ON 0x9E
+#define WFC_FIRMWARE_VERSION 0x9F
+#define WFC_GET_NSAMPLES 0xA0
+#define WFC_DISABLE_DRUM_PROGRAM 0xA2
+#define WFC_UPLOAD_PATCH 0xA3
+#define WFC_UPLOAD_PROGRAM 0xA4
+#define WFC_SET_TUNING 0xA6
+#define WFC_GET_TUNING 0xA7
+#define WFC_VMIDI_ON 0xA8
+#define WFC_VMIDI_OFF 0xA9
+#define WFC_MIDI_STATUS 0xAA
+#define WFC_GET_CHANNEL_STATUS 0xAB
+#define WFC_DOWNLOAD_SAMPLE_HEADER 0xAC
+#define WFC_UPLOAD_SAMPLE_HEADER 0xAD
+#define WFC_UPLOAD_MULTISAMPLE 0xAE
+#define WFC_UPLOAD_SAMPLE_ALIAS 0xAF
+#define WFC_IDENTIFY_SAMPLE_TYPE 0xB0
+#define WFC_DOWNLOAD_EDRUM_PROGRAM 0xB1
+#define WFC_UPLOAD_EDRUM_PROGRAM 0xB2
+#define WFC_SET_EDRUM_CHANNEL 0xB3
+#define WFC_INSTOUT_LEVELS 0xB4
+#define WFC_PEAKOUT_LEVELS 0xB5
+#define WFC_REPORT_CHANNEL_PROGRAMS 0xB6
+#define WFC_HARDWARE_VERSION 0xCF
+#define WFC_UPLOAD_SAMPLE_PARAMS 0xD7
+#define WFC_DOWNLOAD_OS 0xF1
+#define WFC_NOOP 0xFF
+
+#define WF_MAX_SAMPLE 512
+#define WF_MAX_PATCH 256
+#define WF_MAX_PROGRAM 128
+
+#define WF_SECTION_MAX 44 /* longest OS section length */
+
+/* # of bytes we send to the board when sending it various kinds of
+ substantive data, such as samples, patches and programs.
+*/
+
+#define WF_PROGRAM_BYTES 32
+#define WF_PATCH_BYTES 132
+#define WF_SAMPLE_BYTES 27
+#define WF_SAMPLE_HDR_BYTES 25
+#define WF_ALIAS_BYTES 25
+#define WF_DRUM_BYTES 9
+#define WF_MSAMPLE_BYTES 259 /* (MIDI_KEYS * 2) + 3 */
+
+#define WF_ACK 0x80
+#define WF_DMA_ACK 0x81
+
+/* OR-values for MIDI status bits */
+
+#define WF_MIDI_VIRTUAL_ENABLED 0x1
+#define WF_MIDI_VIRTUAL_IS_EXTERNAL 0x2
+#define WF_MIDI_IN_TO_SYNTH_DISABLED 0x4
+
+/* See wavefront.c for details */
+
+#define WAVEFRONT_MAX_DEVICES 1 /* How many WaveFront cards we can handle */
+
+/* slot indexes for struct address_info: makes code a little more mnemonic */
+
+#define WF_SYNTH_SLOT 0
+#define WF_INTERNAL_MIDI_SLOT 1
+#define WF_EXTERNAL_MIDI_SLOT 2
+
+/* Magic MIDI bytes used to switch I/O streams on the ICS2115 MPU401
+ emulation. Note these NEVER show up in output from the device and
+ should NEVER be used in input unless Virtual MIDI mode has been
+ disabled. If they do show up as input, the results are unpredictable.
+*/
+
+#define WF_EXTERNAL_SWITCH 0xFD
+#define WF_INTERNAL_SWITCH 0xF9
+
+/* Debugging flags */
+
+#define WF_DEBUG_CMD 0x1
+#define WF_DEBUG_DATA 0x2
+#define WF_DEBUG_LOAD_PATCH 0x4
+#define WF_DEBUG_IO 0x8
+
+/* WavePatch file format stuff */
+
+#define WF_WAVEPATCH_VERSION 120; /* Current version number (1.2) */
+#define WF_MAX_COMMENT 64 /* Comment length */
+#define WF_NUM_LAYERS 4
+#define WF_NAME_LENGTH 32
+#define WF_SOURCE_LENGTH 260
+
+#define BankFileID "Bank"
+#define DrumkitFileID "DrumKit"
+#define ProgramFileID "Program"
+
+struct wf_envelope
+{
+ UCHAR8 attack_time:7;
+ UCHAR8 Unused1:1;
+
+ UCHAR8 decay1_time:7;
+ UCHAR8 Unused2:1;
+
+ UCHAR8 decay2_time:7;
+ UCHAR8 Unused3:1;
+
+ UCHAR8 sustain_time:7;
+ UCHAR8 Unused4:1;
+
+ UCHAR8 release_time:7;
+ UCHAR8 Unused5:1;
+
+ UCHAR8 release2_time:7;
+ UCHAR8 Unused6:1;
+
+ CHAR8 attack_level;
+ CHAR8 decay1_level;
+ CHAR8 decay2_level;
+ CHAR8 sustain_level;
+ CHAR8 release_level;
+
+ UCHAR8 attack_velocity:7;
+ UCHAR8 Unused7:1;
+
+ UCHAR8 volume_velocity:7;
+ UCHAR8 Unused8:1;
+
+ UCHAR8 keyboard_scaling:7;
+ UCHAR8 Unused9:1;
+};
+typedef struct wf_envelope wavefront_envelope;
+
+struct wf_lfo
+{
+ UCHAR8 sample_number;
+
+ UCHAR8 frequency:7;
+ UCHAR8 Unused1:1;
+
+ UCHAR8 am_src:4;
+ UCHAR8 fm_src:4;
+
+ CHAR8 fm_amount;
+ CHAR8 am_amount;
+ CHAR8 start_level;
+ CHAR8 end_level;
+
+ UCHAR8 ramp_delay:7;
+ UCHAR8 wave_restart:1; /* for LFO2 only */
+
+ UCHAR8 ramp_time:7;
+ UCHAR8 Unused2:1;
+};
+typedef struct wf_lfo wavefront_lfo;
+
+struct wf_patch
+{
+ INT16 frequency_bias; /* ** THIS IS IN MOTOROLA FORMAT!! ** */
+
+ UCHAR8 amplitude_bias:7;
+ UCHAR8 Unused1:1;
+
+ UCHAR8 portamento:7;
+ UCHAR8 Unused2:1;
+
+ UCHAR8 sample_number;
+
+ UCHAR8 pitch_bend:4;
+ UCHAR8 sample_msb:1;
+ UCHAR8 Unused3:3;
+
+ UCHAR8 mono:1;
+ UCHAR8 retrigger:1;
+ UCHAR8 nohold:1;
+ UCHAR8 restart:1;
+ UCHAR8 filterconfig:2; /* SDK says "not used" */
+ UCHAR8 reuse:1;
+ UCHAR8 reset_lfo:1;
+
+ UCHAR8 fm_src2:4;
+ UCHAR8 fm_src1:4;
+
+ CHAR8 fm_amount1;
+ CHAR8 fm_amount2;
+
+ UCHAR8 am_src:4;
+ UCHAR8 Unused4:4;
+
+ CHAR8 am_amount;
+
+ UCHAR8 fc1_mode:4;
+ UCHAR8 fc2_mode:4;
+
+ CHAR8 fc1_mod_amount;
+ CHAR8 fc1_keyboard_scaling;
+ CHAR8 fc1_bias;
+ CHAR8 fc2_mod_amount;
+ CHAR8 fc2_keyboard_scaling;
+ CHAR8 fc2_bias;
+
+ UCHAR8 randomizer:7;
+ UCHAR8 Unused5:1;
+
+ struct wf_envelope envelope1;
+ struct wf_envelope envelope2;
+ struct wf_lfo lfo1;
+ struct wf_lfo lfo2;
+};
+typedef struct wf_patch wavefront_patch;
+
+struct wf_layer
+{
+ UCHAR8 patch_number;
+
+ UCHAR8 mix_level:7;
+ UCHAR8 mute:1;
+
+ UCHAR8 split_point:7;
+ UCHAR8 updown:1;
+
+ UCHAR8 pan_mod_src:2;
+ UCHAR8 pan_or_mod:1;
+ UCHAR8 pan:4;
+ UCHAR8 split_type:1;
+};
+typedef struct wf_layer wavefront_layer;
+
+struct wf_program
+{
+ struct wf_layer layer[WF_NUM_LAYERS];
+};
+typedef struct wf_program wavefront_program;
+
+struct wf_sample_offset
+{
+ INT32 Fraction:4;
+ INT32 Integer:20;
+ INT32 Unused:8;
+};
+typedef struct wf_sample_offset wavefront_sample_offset;
+
+/* Sample slot types */
+
+#define WF_ST_SAMPLE 0
+#define WF_ST_MULTISAMPLE 1
+#define WF_ST_ALIAS 2
+#define WF_ST_EMPTY 3
+
+/* pseudo's */
+
+#define WF_ST_DRUM 4
+#define WF_ST_PROGRAM 5
+#define WF_ST_PATCH 6
+#define WF_ST_SAMPLEHDR 7
+
+#define WF_ST_MASK 0xf
+
+/* Flags for slot status. These occupy the upper bits of the same byte
+ as a sample type.
+*/
+
+#define WF_SLOT_USED 0x80 /* XXX don't rely on this being accurate */
+#define WF_SLOT_FILLED 0x40
+#define WF_SLOT_ROM 0x20
+
+#define WF_SLOT_MASK 0xf0
+
+/* channel constants */
+
+#define WF_CH_MONO 0
+#define WF_CH_LEFT 1
+#define WF_CH_RIGHT 2
+
+/* Sample formats */
+
+#define LINEAR_16BIT 0
+#define WHITE_NOISE 1
+#define LINEAR_8BIT 2
+#define MULAW_8BIT 3
+
+#define WF_SAMPLE_IS_8BIT(smpl) ((smpl)->SampleResolution&2)
+
+
+/*
+
+ Because most/all of the sample data we pass in via pointers has
+ never been copied (just mmap-ed into user space straight from the
+ disk), it would be nice to allow handling of multi-channel sample
+ data without forcing user-level extraction of the relevant bytes.
+
+ So, we need a way of specifying which channel to use (the WaveFront
+ only handles mono samples in a given slot), and the only way to do
+ this without using some struct other than wavefront_sample as the
+ interface is the awful hack of using the unused bits in a
+ wavefront_sample:
+
+ Val Meaning
+ --- -------
+ 0 no channel selection (use channel 1, sample is MONO)
+ 1 use first channel, and skip one
+ 2 use second channel, and skip one
+ 3 use third channel, and skip two
+ 4 use fourth channel, skip three
+ 5 use fifth channel, skip four
+ 6 use six channel, skip five
+
+
+ This can handle up to 4 channels, and anyone downloading >4 channels
+ of sample data just to select one of them needs to find some tools
+ like sox ...
+
+ NOTE: values 0, 1 and 2 correspond to WF_CH_* above. This is
+ important.
+
+*/
+
+#define WF_SET_CHANNEL(samp,chn) \
+ (samp)->Unused1 = chn & 0x1; \
+ (samp)->Unused2 = chn & 0x2; \
+ (samp)->Unused3 = chn & 0x4
+
+#define WF_GET_CHANNEL(samp) \
+ (((samp)->Unused3 << 2)|((samp)->Unused2<<1)|(samp)->Unused1)
+
+typedef struct wf_sample {
+ struct wf_sample_offset sampleStartOffset;
+ struct wf_sample_offset loopStartOffset;
+ struct wf_sample_offset loopEndOffset;
+ struct wf_sample_offset sampleEndOffset;
+ INT16 FrequencyBias;
+ UCHAR8 SampleResolution:2; /* sample_format */
+ UCHAR8 Unused1:1;
+ UCHAR8 Loop:1;
+ UCHAR8 Bidirectional:1;
+ UCHAR8 Unused2:1;
+ UCHAR8 Reverse:1;
+ UCHAR8 Unused3:1;
+} wavefront_sample;
+
+typedef struct wf_multisample {
+ INT16 NumberOfSamples; /* log2 of the number of samples */
+ INT16 SampleNumber[NUM_MIDIKEYS];
+} wavefront_multisample;
+
+typedef struct wf_alias {
+ INT16 OriginalSample __attribute__ ((packed));
+
+ struct wf_sample_offset sampleStartOffset __attribute__ ((packed));
+ struct wf_sample_offset loopStartOffset __attribute__ ((packed));
+ struct wf_sample_offset sampleEndOffset __attribute__ ((packed));
+ struct wf_sample_offset loopEndOffset __attribute__ ((packed));
+
+ INT16 FrequencyBias __attribute__ ((packed));
+
+ UCHAR8 SampleResolution:2 __attribute__ ((packed));
+ UCHAR8 Unused1:1 __attribute__ ((packed));
+ UCHAR8 Loop:1 __attribute__ ((packed));
+ UCHAR8 Bidirectional:1 __attribute__ ((packed));
+ UCHAR8 Unused2:1 __attribute__ ((packed));
+ UCHAR8 Reverse:1 __attribute__ ((packed));
+ UCHAR8 Unused3:1 __attribute__ ((packed));
+
+ /* This structure is meant to be padded only to 16 bits on their
+ original. Of course, whoever wrote their documentation didn't
+ realize that sizeof(struct) can be >=
+ sum(sizeof(struct-fields)) and so thought that giving a C level
+ description of the structs used in WavePatch files was
+ sufficient. I suppose it was, as long as you remember the
+ standard 16->32 bit issues.
+ */
+
+ UCHAR8 sixteen_bit_padding __attribute__ ((packed));
+} wavefront_alias;
+
+typedef struct wf_drum {
+ UCHAR8 PatchNumber;
+ UCHAR8 MixLevel:7;
+ UCHAR8 Unmute:1;
+ UCHAR8 Group:4;
+ UCHAR8 Unused1:4;
+ UCHAR8 PanModSource:2;
+ UCHAR8 PanModulated:1;
+ UCHAR8 PanAmount:4;
+ UCHAR8 Unused2:1;
+} wavefront_drum;
+
+typedef struct wf_drumkit {
+ struct wf_drum drum[NUM_MIDIKEYS];
+} wavefront_drumkit;
+
+typedef struct wf_channel_programs {
+ UCHAR8 Program[NUM_MIDICHANNELS];
+} wavefront_channel_programs;
+
+/* How to get MIDI channel status from the data returned by
+ a WFC_GET_CHANNEL_STATUS command (a struct wf_channel_programs)
+*/
+
+#define WF_CHANNEL_STATUS(ch,wcp) (wcp)[(ch/7)] & (1<<((ch)%7))
+
+typedef union wf_any {
+ wavefront_sample s;
+ wavefront_multisample ms;
+ wavefront_alias a;
+ wavefront_program pr;
+ wavefront_patch p;
+ wavefront_drum d;
+} wavefront_any;
+
+/* Hannu Savolainen hoped that his "patch_info" struct in soundcard.h
+ might work for other wavetable-based patch-loading situations.
+ Alas, his fears were correct. The WaveFront doesn't even come with
+ just "patches", but several different kinds of structures that
+ control the process of generating sound.
+ */
+
+typedef struct wf_patch_info {
+
+ INT16 key; /* Use WAVEFRONT_PATCH here */
+ UINT16 devno; /* fill in when sending */
+ UCHAR8 subkey; /* WF_ST_{SAMPLE,ALIAS,etc.} */
+ UINT16 number; /* patch/sample/prog number */
+
+ UINT32 size; /* size of any data included in
+ one of the fields in `hdrptr', or
+ as `dataptr'.
+
+ NOTE: for actual samples, this is
+ the size of the *SELECTED CHANNEL*
+ even if more data is actually available.
+
+ So, a stereo sample (2 channels) of
+ 6000 bytes total has `size' = 3000.
+
+ See the macros and comments for
+ WF_{GET,SET}_CHANNEL above.
+
+ */
+ wavefront_any *hdrptr; /* user-space ptr to hdr bytes */
+ UINT16 *dataptr; /* actual sample data */
+
+ wavefront_any hdr; /* kernel-space copy of hdr bytes */
+} wavefront_patch_info;
+
+/* The maximum number of bytes we will ever move to or from user space
+ in response to a WFC_* command. This obviously doesn't cover
+ actual sample data.
+*/
+
+#define WF_MAX_READ sizeof(wavefront_multisample)
+#define WF_MAX_WRITE sizeof(wavefront_multisample)
+
+/*
+ This allows us to execute any WF command except the download/upload
+ ones, which are handled differently due to copyin/copyout issues as
+ well as data-nybbling to/from the card.
+ */
+
+typedef struct wavefront_control {
+ int devno; /* from /dev/sequencer interface */
+ int cmd; /* WFC_* */
+ char status; /* return status to user-space */
+ unsigned char rbuf[WF_MAX_READ]; /* bytes read from card */
+ unsigned char wbuf[WF_MAX_WRITE]; /* bytes written to card */
+} wavefront_control;
+
+/* Modulator table */
+
+#define WF_MOD_LFO1 0
+#define WF_MOD_LFO2 1
+#define WF_MOD_ENV1 2
+#define WF_MOD_ENV2 3
+#define WF_MOD_KEYBOARD 4
+#define WF_MOD_LOGKEY 5
+#define WF_MOD_VELOCITY 6
+#define WF_MOD_LOGVEL 7
+#define WF_MOD_RANDOM 8
+#define WF_MOD_PRESSURE 9
+#define WF_MOD_MOD_WHEEL 10
+#define WF_MOD_1 WF_MOD_MOD_WHEEL
+#define WF_MOD_BREATH 11
+#define WF_MOD_2 WF_MOD_BREATH
+#define WF_MOD_FOOT 12
+#define WF_MOD_4 WF_MOD_FOOT
+#define WF_MOD_VOLUME 13
+#define WF_MOD_7 WF_MOD_VOLUME
+#define WF_MOD_PAN 14
+#define WF_MOD_10 WF_MOD_PAN
+#define WF_MOD_EXPR 15
+#define WF_MOD_11 WF_MOD_EXPR
+
+/* FX-related material */
+
+typedef struct wf_fx_info {
+ int request; /* see list below */
+ int data[4]; /* we don't need much */
+} wavefront_fx_info;
+
+/* support for each of these will be forthcoming once I or someone
+ else has figured out which of the addresses on page 6 and page 7 of
+ the YSS225 control each parameter. Incidentally, these come from
+ the Windows driver interface, but again, Turtle Beach didn't
+ document the API to use them.
+*/
+
+#define WFFX_SETOUTGAIN 0
+#define WFFX_SETSTEREOOUTGAIN 1
+#define WFFX_SETREVERBIN1GAIN 2
+#define WFFX_SETREVERBIN2GAIN 3
+#define WFFX_SETREVERBIN3GAIN 4
+#define WFFX_SETCHORUSINPORT 5
+#define WFFX_SETREVERBIN1PORT 6
+#define WFFX_SETREVERBIN2PORT 7
+#define WFFX_SETREVERBIN3PORT 8
+#define WFFX_SETEFFECTPORT 9
+#define WFFX_SETAUXPORT 10
+#define WFFX_SETREVERBTYPE 11
+#define WFFX_SETREVERBDELAY 12
+#define WFFX_SETCHORUSLFO 13
+#define WFFX_SETCHORUSPMD 14
+#define WFFX_SETCHORUSAMD 15
+#define WFFX_SETEFFECT 16
+#define WFFX_SETBASEALL 17
+#define WFFX_SETREVERBALL 18
+#define WFFX_SETCHORUSALL 20
+#define WFFX_SETREVERBDEF 22
+#define WFFX_SETCHORUSDEF 23
+#define WFFX_DELAYSETINGAIN 24
+#define WFFX_DELAYSETFBGAIN 25
+#define WFFX_DELAYSETFBLPF 26
+#define WFFX_DELAYSETGAIN 27
+#define WFFX_DELAYSETTIME 28
+#define WFFX_DELAYSETFBTIME 29
+#define WFFX_DELAYSETALL 30
+#define WFFX_DELAYSETDEF 32
+#define WFFX_SDELAYSETINGAIN 33
+#define WFFX_SDELAYSETFBGAIN 34
+#define WFFX_SDELAYSETFBLPF 35
+#define WFFX_SDELAYSETGAIN 36
+#define WFFX_SDELAYSETTIME 37
+#define WFFX_SDELAYSETFBTIME 38
+#define WFFX_SDELAYSETALL 39
+#define WFFX_SDELAYSETDEF 41
+#define WFFX_DEQSETINGAIN 42
+#define WFFX_DEQSETFILTER 43
+#define WFFX_DEQSETALL 44
+#define WFFX_DEQSETDEF 46
+#define WFFX_MUTE 47
+#define WFFX_FLANGESETBALANCE 48
+#define WFFX_FLANGESETDELAY 49
+#define WFFX_FLANGESETDWFFX_TH 50
+#define WFFX_FLANGESETFBGAIN 51
+#define WFFX_FLANGESETINGAIN 52
+#define WFFX_FLANGESETLFO 53
+#define WFFX_FLANGESETALL 54
+#define WFFX_FLANGESETDEF 56
+#define WFFX_PITCHSETSHIFT 57
+#define WFFX_PITCHSETBALANCE 58
+#define WFFX_PITCHSETALL 59
+#define WFFX_PITCHSETDEF 61
+#define WFFX_SRSSETINGAIN 62
+#define WFFX_SRSSETSPACE 63
+#define WFFX_SRSSETCENTER 64
+#define WFFX_SRSSETGAIN 65
+#define WFFX_SRSSETMODE 66
+#define WFFX_SRSSETDEF 68
+
+/* Allow direct user-space control over FX memory/coefficient data.
+ In theory this could be used to download the FX microprogram,
+ but it would be a little slower, and involve some weird code.
+ */
+
+#define WFFX_MEMSET 69
+
+#endif __wavefront_h__
diff --git a/include/linux/zorro.h b/include/linux/zorro.h
index 05e62462a..e156b5bac 100644
--- a/include/linux/zorro.h
+++ b/include/linux/zorro.h
@@ -1,12 +1,7 @@
/*
- * linux/zorro.h -- Amiga AutoConfig (Zorro) Expansion Device Definitions
+ * linux/zorro.h -- Amiga AutoConfig (Zorro) Bus Definitions
*
- * Copyright (C) 1995 Geert Uytterhoeven
- *
- * Please update arch/m68k/amiga/zorro.c if you make changes here!
- *
- * Many IDs were obtained from ExpName/Identify ((C) Richard Körber)
- * and by looking at the NetBSD-Amiga kernel sources
+ * Copyright (C) 1995-1998 Geert Uytterhoeven
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive
@@ -19,52 +14,6 @@
#ifndef __ASSEMBLY__
/*
- * Zorro Product Classes
- *
- * Make sure to keep these in sync with arch/m68k/amiga/zorro.c!
- */
-
-enum Zorro_Classes {
- ZORRO_CLASS_UNKNOWN = 0x00,
- ZORRO_CLASS_ARCNET,
- ZORRO_CLASS_AUDIO,
- ZORRO_CLASS_BRIDGE,
- ZORRO_CLASS_DSP,
- ZORRO_CLASS_ETHERNET,
- ZORRO_CLASS_ETHERNET_PARALLEL,
- ZORRO_CLASS_FLASHROM,
- ZORRO_CLASS_FPU_RAM,
- ZORRO_CLASS_GFX,
- ZORRO_CLASS_GFXRAM,
- ZORRO_CLASS_HD,
- ZORRO_CLASS_HD_RAM,
- ZORRO_CLASS_IDE,
- ZORRO_CLASS_IDE_RAM,
- ZORRO_CLASS_IDE_FLOPPY,
- ZORRO_CLASS_ISDN,
- ZORRO_CLASS_MACEMU,
- ZORRO_CLASS_MISC,
- ZORRO_CLASS_MODEM,
- ZORRO_CLASS_MULTIIO,
- ZORRO_CLASS_RAM,
- ZORRO_CLASS_SCANNER,
- ZORRO_CLASS_SCSI,
- ZORRO_CLASS_SCSI_IDE,
- ZORRO_CLASS_SCSI_RAM,
- ZORRO_CLASS_SCSI_SERIAL,
- ZORRO_CLASS_SERIAL,
- ZORRO_CLASS_TABLET,
- ZORRO_CLASS_TURBO,
- ZORRO_CLASS_TURBO_RAM,
- ZORRO_CLASS_TURBO_HD,
- ZORRO_CLASS_TURBO_IDE,
- ZORRO_CLASS_TURBO_SCSI,
- ZORRO_CLASS_TURBO_SCSI_RAM,
- ZORRO_CLASS_VIDEO,
-};
-
-
- /*
* Known Zorro Boards
*
* Each Zorro board has a 32-bit ID of the form
@@ -87,7 +36,7 @@ enum Zorro_Classes {
#define ZORRO_ID(manuf, prod, epc) \
((ZORRO_MANUF_##manuf << 16) | ((prod) << 8) | (epc))
-typedef u32 zorro_id;
+typedef __u32 zorro_id;
#define ZORRO_MANUF_PACIFIC_PERIPHERALS 0x00D3
@@ -462,6 +411,9 @@ typedef u32 zorro_id;
#define ZORRO_MANUF_ARMAX 0x0885
#define ZORRO_PROD_ARMAX_OMNIBUS ZORRO_ID(ARMAX, 0x00, 0)
+#define ZORRO_MANUF_ZEUS 0x088D
+#define ZORRO_PROD_ZEUS_SPIDER ZORRO_ID(ZEUS, 0x04, 0)
+
#define ZORRO_MANUF_NEWTEK 0x088F
#define ZORRO_PROD_NEWTEK_VIDEOTOASTER ZORRO_ID(NEWTEK, 0x00, 0)
@@ -558,6 +510,7 @@ typedef u32 zorro_id;
#define ZORRO_PROD_PHASE5_CYBERVISION64_3D_PROTOTYPE ZORRO_ID(PHASE5, 0x32, 0)
#define ZORRO_PROD_PHASE5_CYBERVISION64_3D ZORRO_ID(PHASE5, 0x43, 0)
#define ZORRO_PROD_PHASE5_CYBERSTORM_MK_III ZORRO_ID(PHASE5, 0x64, 0)
+#define ZORRO_PROD_PHASE5_BLIZZARD_603E_PLUS ZORRO_ID(PHASE5, 0x6e, 0)
#define ZORRO_MANUF_DPS 0x2169
#define ZORRO_PROD_DPS_PERSONAL_ANIMATION_RECORDER ZORRO_ID(DPS, 0x01, 0)
@@ -577,6 +530,9 @@ typedef u32 zorro_id;
#define ZORRO_MANUF_UWE_GERLACH 0x3FF7
#define ZORRO_PROD_UWE_GERLACH_RAM_ROM ZORRO_ID(UWE_GERLACH, 0xd4, 0)
+#define ZORRO_MANUF_ACT 0x4231
+#define ZORRO_PROD_ACT_PRELUDE ZORRO_ID(ACT, 0x01, 0)
+
#define ZORRO_MANUF_MACROSYSTEMS_GERMANY 0x4754
#define ZORRO_PROD_MACROSYSTEMS_MAESTRO ZORRO_ID(MACROSYSTEMS_GERMANY, 0x03, 0)
#define ZORRO_PROD_MACROSYSTEMS_VLAB ZORRO_ID(MACROSYSTEMS_GERMANY, 0x04, 0)
@@ -616,7 +572,6 @@ typedef u32 zorro_id;
/*
* Test and illegal Manufacturer IDs.
- * These do NOT appear in arch/m68k/amiga/zorro.c!
*/
#define ZORRO_MANUF_HACKER 0x07DB
@@ -631,7 +586,7 @@ typedef u32 zorro_id;
/*
* GVP identifies most of its products through the 'extended product code'
- * (epc). The epc has to be and'ed with the GVP_PRODMASK before the
+ * (epc). The epc has to be ANDed with the GVP_PRODMASK before the
* identification.
*/
@@ -652,25 +607,25 @@ enum GVP_flags {
struct Node {
struct Node *ln_Succ; /* Pointer to next (successor) */
struct Node *ln_Pred; /* Pointer to previous (predecessor) */
- u_char ln_Type;
- char ln_Pri; /* Priority, for sorting */
- char *ln_Name; /* ID string, null terminated */
-};
+ __u8 ln_Type;
+ __s8 ln_Pri; /* Priority, for sorting */
+ __s8 *ln_Name; /* ID string, null terminated */
+} __attribute__ ((packed));
struct ExpansionRom {
/* -First 16 bytes of the expansion ROM */
- u_char er_Type; /* Board type, size and flags */
- u_char er_Product; /* Product number, assigned by manufacturer */
- u_char er_Flags; /* Flags */
- u_char er_Reserved03; /* Must be zero ($ff inverted) */
- u_short er_Manufacturer;/* Unique ID,ASSIGNED BY COMMODORE-AMIGA! */
- u_long er_SerialNumber;/* Available for use by manufacturer */
- u_short er_InitDiagVec; /* Offset to optional "DiagArea" structure */
- u_char er_Reserved0c;
- u_char er_Reserved0d;
- u_char er_Reserved0e;
- u_char er_Reserved0f;
-};
+ __u8 er_Type; /* Board type, size and flags */
+ __u8 er_Product; /* Product number, assigned by manufacturer */
+ __u8 er_Flags; /* Flags */
+ __u8 er_Reserved03; /* Must be zero ($ff inverted) */
+ __u16 er_Manufacturer; /* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */
+ __u32 er_SerialNumber; /* Available for use by manufacturer */
+ __u16 er_InitDiagVec; /* Offset to optional "DiagArea" structure */
+ __u8 er_Reserved0c;
+ __u8 er_Reserved0d;
+ __u8 er_Reserved0e;
+ __u8 er_Reserved0f;
+} __attribute__ ((packed));
/* er_Type board type bits */
#define ERT_TYPEMASK 0xc0
@@ -683,17 +638,17 @@ struct ExpansionRom {
struct ConfigDev {
struct Node cd_Node;
- u_char cd_Flags; /* (read/write) */
- u_char cd_Pad; /* reserved */
+ __u8 cd_Flags; /* (read/write) */
+ __u8 cd_Pad; /* reserved */
struct ExpansionRom cd_Rom; /* copy of board's expansion ROM */
void *cd_BoardAddr; /* where in memory the board was placed */
- u_long cd_BoardSize; /* size of board in bytes */
- u_short cd_SlotAddr; /* which slot number (PRIVATE) */
- u_short cd_SlotSize; /* number of slots (PRIVATE) */
+ __u32 cd_BoardSize; /* size of board in bytes */
+ __u16 cd_SlotAddr; /* which slot number (PRIVATE) */
+ __u16 cd_SlotSize; /* number of slots (PRIVATE) */
void *cd_Driver; /* pointer to node of driver */
struct ConfigDev *cd_NextCD; /* linked list of drivers to config */
- u_long cd_Unused[4]; /* for whatever the driver wants */
-};
+ __u32 cd_Unused[4]; /* for whatever the driver wants */
+} __attribute__ ((packed));
#else /* __ASSEMBLY__ */
@@ -738,7 +693,7 @@ CD_sizeof = CD_Unused+(4*4)
#ifdef __KERNEL__
-extern unsigned int zorro_num_autocon; /* # of autoconfig devices found */
+extern unsigned int zorro_num_autocon; /* # of autoconfig devices found */
extern struct ConfigDev zorro_autocon[ZORRO_NUM_AUTO];
@@ -746,6 +701,9 @@ extern struct ConfigDev zorro_autocon[ZORRO_NUM_AUTO];
* Zorro Functions
*/
+extern void zorro_init(void);
+extern void zorro_proc_init(void);
+
extern unsigned int zorro_find(zorro_id id, unsigned int part, unsigned int index);
extern const struct ConfigDev *zorro_get_board(unsigned int key);
extern void zorro_config_board(unsigned int key, unsigned int part);
@@ -761,7 +719,7 @@ extern void zorro_unconfig_board(unsigned int key, unsigned int part);
* the corresponding bits.
*/
-extern u32 zorro_unused_z2ram[4];
+extern __u32 zorro_unused_z2ram[4];
#define Z2RAM_START (0x00200000)
#define Z2RAM_END (0x00a00000)
@@ -771,13 +729,6 @@ extern u32 zorro_unused_z2ram[4];
#define Z2RAM_CHUNKSHIFT (16)
- /*
- * Verbose Board Identification
- */
-
-extern void zorro_identify(void);
-extern int zorro_get_list(char *buffer);
-
#endif /* !__ASSEMBLY__ */
#endif /* __KERNEL__ */
diff --git a/include/net/ip.h b/include/net/ip.h
index add85700b..63ef8b0a2 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -23,7 +23,6 @@
#define _IP_H
-#include <linux/config.h>
#include <linux/types.h>
#include <linux/socket.h>
#include <linux/ip.h>
@@ -94,11 +93,6 @@ extern int ip_local_deliver(struct sk_buff *skb);
extern int ip_mr_input(struct sk_buff *skb);
extern int ip_output(struct sk_buff *skb);
extern int ip_mc_output(struct sk_buff *skb);
-#ifdef CONFIG_IP_ACCT
-extern int ip_acct_output(struct sk_buff *skb);
-#else
-#define ip_acct_output dev_queue_xmit
-#endif
extern void ip_fragment(struct sk_buff *skb, int (*out)(struct sk_buff*));
extern int ip_do_nat(struct sk_buff *skb);
extern void ip_send_check(struct iphdr *ip);
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h
index 6b355cc12..5bd90dde7 100644
--- a/include/net/ip6_fib.h
+++ b/include/net/ip6_fib.h
@@ -141,7 +141,9 @@ extern int fib6_del(struct rt6_info *rt);
extern void inet6_rt_notify(int event, struct rt6_info *rt);
-extern void fib6_run_gc(unsigned long dummy);
+extern void fib6_run_gc(unsigned long dummy);
+
+extern void fib6_gc_cleanup(void);
#endif
#endif
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index 8fb0fbed7..8ca62a7ed 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -100,6 +100,7 @@ struct netlink_callback;
extern int inet6_dump_fib(struct sk_buff *skb, struct netlink_callback *cb);
extern int inet6_rtm_newroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg);
extern int inet6_rtm_delroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg);
+extern int inet6_rtm_getroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg);
extern void rt6_ifdown(struct device *dev);
diff --git a/include/net/ip_masq.h b/include/net/ip_masq.h
index 65282bfcb..716eea2ef 100644
--- a/include/net/ip_masq.h
+++ b/include/net/ip_masq.h
@@ -258,9 +258,10 @@ extern atomic_t __ip_masq_lock;
extern int ip_masq_get_debug_level(void);
#ifndef CONFIG_IP_MASQ_NDEBUG
-#define IP_MASQ_DEBUG(level, msg...) \
+#define IP_MASQ_DEBUG(level, msg...) do { \
if (level <= ip_masq_get_debug_level()) \
- printk(KERN_DEBUG "IP_MASQ:" ## msg)
+ printk(KERN_DEBUG "IP_MASQ:" ## msg); \
+ } while (0)
#else /* NO DEBUGGING at ALL */
#define IP_MASQ_DEBUG(level, msg...) do { } while (0)
#endif
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index c3d2d5895..acf37b357 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -4,7 +4,7 @@
* Authors:
* Pedro Roque <roque@di.fc.ul.pt>
*
- * $Id: ipv6.h,v 1.10 1998/04/30 16:24:14 freitag Exp $
+ * $Id: ipv6.h,v 1.12 1998/07/15 05:05:02 davem Exp $
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -118,6 +118,31 @@ struct frag_queue {
__u8 *nhptr;
};
+struct ipv6_tlvtype
+{
+ u8 type;
+ u8 len;
+};
+
+struct ip6_ra_chain
+{
+ struct ip6_ra_chain *next;
+ struct sock *sk;
+ int sel;
+ void (*destructor)(struct sock *);
+};
+
+extern struct ip6_ra_chain *ip6_ra_chain;
+
+extern int ip6_ra_control(struct sock *sk, int sel,
+ void (*destructor)(struct sock *));
+
+
+extern int ip6_call_ra_chain(struct sk_buff *skb, int sel);
+
+extern int ip6_dstopt_unknown(struct sk_buff *skb,
+ struct ipv6_tlvtype *hdr);
+
extern int ipv6_routing_header(struct sk_buff **skb,
struct device *dev,
__u8 *nhptr,
@@ -266,11 +291,16 @@ extern int ipv6_getsockopt(struct sock *sk, int level,
int optname, char *optval,
int *optlen);
+extern void ipv6_packet_init(void);
-extern void ipv6_init(void);
-extern void ipv6_cleanup(void);
-#endif
-#endif
+extern void ipv6_netdev_notif_init(void);
+
+extern void ipv6_packet_cleanup(void);
+
+extern void ipv6_netdev_notif_cleanup(void);
+
+#endif /* __KERNEL__ */
+#endif /* _NET_IPV6_H */
diff --git a/include/net/ndisc.h b/include/net/ndisc.h
index adaf76ef3..8ca371336 100644
--- a/include/net/ndisc.h
+++ b/include/net/ndisc.h
@@ -56,7 +56,8 @@ struct ra_msg {
};
-extern void ndisc_init(struct net_proto_family *ops);
+extern int ndisc_init(struct net_proto_family *ops);
+
extern void ndisc_cleanup(void);
extern int ndisc_rcv(struct sk_buff *skb,
@@ -91,7 +92,9 @@ struct rt6_info * dflt_rt_lookup(void);
/*
* IGMP
*/
-extern void igmp6_init(struct net_proto_family *ops);
+extern int igmp6_init(struct net_proto_family *ops);
+
+extern void igmp6_cleanup(void);
extern int igmp6_event_query(struct sk_buff *skb,
struct icmp6hdr *hdr,
diff --git a/include/net/netbeui.h b/include/net/netbeui.h
deleted file mode 100644
index 417a27e2c..000000000
--- a/include/net/netbeui.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * NetBEUI data structures
- */
-
-#ifndef __NET_NETBEUI_H
-#define __NET_NETBEUI_H
-
-
-#define NB_NAME_LEN 16
-
-/*
- * Used to keep lists of netbeui sessions
- */
-
-struct nb_ses
-{
- struct nb_ses *next;
- struct nb_nam *name;
- struct nb_link *parent; /* Owner link */
- struct sock *sk;
-};
-
-/*
- * A netbeui link
- */
-
-struct nb_link
-{
- struct llc llc; /* Must be first */
- u8 mac[6]; /* Mac address of remote */
- struct device *dev; /* Device we heard him on */
- struct nb_ses *sessions;/* Netbeui sessions on this LLC link */
- struct wait_queue *wait;/* Wait queue for this netbios LLC */
- int busy; /* Track the LLC busy state */
- int state; /* Link state */
-#define NETBEUI_OPEN 1 /* Up and going */
-#define NETBEUI_CONNWAIT 2 /* Waiting to come up */
-#define NETBEUI_DISCWAIT 3 /* Waiting to drop and recover */
-#define NETBEUI_DEADWAIT 4 /* Trying to die */
-};
-
-
-/*
- * Netbios name defence list
- */
-
-struct nb_name
-{
- struct nb_name *next; /* Chain */
- struct device *dev; /* Device */
- char name[NB_NAME_LEN]; /* Object Name */
- int state; /* Name State */
-#define NB_NAME_ACQUIRE 1 /* We are trying to get a name */
-#define NB_NAME_COLLIDE 2 /* Name collided - we failed */
-#define NB_OURS 3 /* We own the name */
-#define NB_NAME_OTHER 4 /* Name found - owned by other */
-#define NB_NAME_GET 5 /* Trying to allocate a name */
-#define NB_STATE 7 /* State bits */
-#define NB_NAME_GROUP 8 /* Group name bit */
- int ours; /* We own this name */
- int users; /* Number of nb_ses's to this name */
- struct timer_list timer; /* Our timer */
- int timer_mode; /* Timer mode */
-#define NB_TIMER_ACQUIRE 1 /* Expiry means we got our name */
-#define NB_TIMER_COLLIDE 2 /* Expire a collided record */
-#define NB_TIMER_DROP 3 /* Drop a learned record */
-};
-
-
-/*
- * LLC link manager
- */
-
-extern struct nb_link *netbeui_find_link(u8 macaddr);
-extern struct nb_link *netbeui_create_link(u8 macaddr);
-extern int netbeui_destroy_link(u8 macaddr);
-
-/*
- * Namespace manager
- */
-
-extern struct nb_name *netbeui_find_name(char *name);
-extern struct nb_name *netbeui_add_name(char *name, int ours);
-extern struct nb_name *netbeui_lookup_name(char *name);
-extern int nb_delete_name(struct nb_name *name);
-
-/*
- * NetBEUI Protocol items
- */
-
-#define ADD_GROUP_NAME_QUERY 0x00
-#define ADD_NAME_QUERY 0x01
-#define NAME_IN_CONFLICT 0x02
-#define STATUS_QUERY 0x03
-#define TERMINATE_TRACE 0x07
-#define DATAGRAM 0x08
-#define DATAGRAM_BROADCAST 0x09
-#define NAME_QUERY 0x0A
-#define ADD_NAME_RESPONSE 0x0D
-#define NAME_RECOGNIZED 0x0E
-#define STATUS_RESPONSE 0x0F
-#define TERMINATE_TRACE2 0x13
-#define DATA_ACK 0x14
-#define DATA_FIRST_MIDDLE 0x15
-#define DATA_ONLY_LAST 0x16
-#define SESSION_CONFIRM 0x17
-#define SESSION_END 0x18
-#define SESSION_INITIALIZE 0x19
-#define NO_RECEIVE 0x1A
-#define RECEIVE_OUTSTANDING 0x1B
-#define RECEIVE_CONTINUE 0x1C
-#define SESSION_ALIVE 0x1F
-
-#define NB_TRANSMIT_COUNT 6
-#define NB_TRANSMIT_TIMEOUT (HZ/2)
-
-#define NB_DESCRIM_1 0xEF
-#define NB_DESCRIM_2 0xFF
-
-struct nb_dgram_pkt
-{
- __u16 length;
- __u8 descrim1;
- __u8 descrim2;
- __u8 command;
- __u8 option1;
- __u16 option2;
- __u16 tx_seq;
- __u16 rx_seq;
- __u8 dest[NB_NAME_LEN];
- __u8 src[NB_NAME_LEN];
-};
-
-struct nb_sess_pkt
-{
- __u16 length;
- __u8 descrim1;
- __u8 descrim2;
- __u8 command;
- __u8 option1;
- __u16 option2;
- __u16 tx_seq;
- __u16 rx_seq;
- __u8 dnum;
- __u8 snum;
-};
-
-#define NO_SEQ 0
-
-#endif
diff --git a/include/net/p8022tr.h b/include/net/p8022tr.h
deleted file mode 100644
index f4231ecee..000000000
--- a/include/net/p8022tr.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _NET_P8022TR_H
-#define _NET_P8022TR_H
-
-extern struct datalink_proto *register_8022tr_client(unsigned char type, int (*rcvfunc)(struct sk_buff *, struct device *, struct packet_type *));
-extern void unregister_8022tr_client(unsigned char type);
-
-#endif
-
diff --git a/include/net/p8022trcall.h b/include/net/p8022trcall.h
deleted file mode 100644
index 3ce6f3cdb..000000000
--- a/include/net/p8022trcall.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Separate to keep compilation of Space.c simpler */
-extern void p8022tr_proto_init(struct net_proto *);
-
diff --git a/include/net/sock.h b/include/net/sock.h
index 29d7985be..ed05e12be 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -126,12 +126,6 @@ struct ipx_opt {
unsigned char node[IPX_NODE_LEN];
#endif
unsigned short type;
-/*
- * To handle asynchronous messages from the NetWare server, we have to
- * know the connection this socket belongs to.
- */
- struct ncp_server *ncp_server;
-
};
#endif
@@ -454,6 +448,9 @@ struct sock {
#if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)
struct ipx_opt af_ipx;
#endif
+#if defined (CONFIG_DECNET) || defined(CONFIG_DECNET_MODULE)
+ struct dn_scp dn;
+#endif
#if defined (CONFIG_PACKET) || defined(CONFIG_PACKET_MODULE)
struct packet_opt *af_packet;
#endif
@@ -462,19 +459,19 @@ struct sock {
#endif
#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
ax25_cb *ax25;
+#endif
#if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
nr_cb *nr;
#endif
#if defined(CONFIG_ROSE) || defined(CONFIG_ROSE_MODULE)
rose_cb *rose;
#endif
-#endif
-#if defined(CONFIG_DECNET) || defined(CONFIG_DECNET_MODULE)
- dn_cb *dn;
-#endif
#ifdef CONFIG_NETLINK
struct netlink_opt af_netlink;
#endif
+#if defined(CONFIG_ECONET) || defined(CONFIG_ECONET_MODULE)
+ struct econet_opt *af_econet;
+#endif
} protinfo;
/* IP 'private area' or will be eventually. */
diff --git a/include/net/tcp.h b/include/net/tcp.h
index ca1240b8a..225d40ad0 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -654,17 +654,24 @@ static __inline__ unsigned int tcp_current_mss(struct sock *sk)
return mss_now;
}
-/* Compute the actual receive window we are currently advertising. */
+/* Compute the actual receive window we are currently advertising.
+ * Rcv_nxt can be after the window if our peer push more data
+ * than the offered window.
+ */
static __inline__ u32 tcp_receive_window(struct tcp_opt *tp)
{
- return tp->rcv_wup - (tp->rcv_nxt - tp->rcv_wnd);
+ s32 win = tp->rcv_wup + tp->rcv_wnd - tp->rcv_nxt;
+
+ if (win < 0)
+ win = 0;
+ return (u32) win;
}
/* Choose a new window, without checks for shrinking, and without
* scaling applied to the result. The caller does these things
* if necessary. This is a "raw" window selection.
*/
-extern u32 __tcp_select_window(struct sock *sk);
+extern u32 __tcp_select_window(struct sock *sk, u32 cur_win);
/* Chose a new window to advertise, update state in tcp_opt for the
* socket, and return result with RFC1323 scaling applied. The return
@@ -674,8 +681,8 @@ extern u32 __tcp_select_window(struct sock *sk);
extern __inline__ u16 tcp_select_window(struct sock *sk)
{
struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
- u32 new_win = __tcp_select_window(sk);
u32 cur_win = tcp_receive_window(tp);
+ u32 new_win = __tcp_select_window(sk, cur_win);
/* Never shrink the offered window */
if(new_win < cur_win)
@@ -694,8 +701,8 @@ extern __inline__ u16 tcp_select_window(struct sock *sk)
extern __inline__ int tcp_raise_window(struct sock *sk)
{
struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
- u32 new_win = __tcp_select_window(sk);
u32 cur_win = tcp_receive_window(tp);
+ u32 new_win = __tcp_select_window(sk, cur_win);
return (new_win && (new_win > (cur_win << 1)));
}
diff --git a/include/net/x25.h b/include/net/x25.h
index a72bd0426..5ac507bd5 100644
--- a/include/net/x25.h
+++ b/include/net/x25.h
@@ -147,6 +147,7 @@ extern unsigned int x25_new_lci(struct x25_neigh *);
extern struct sock *x25_find_socket(unsigned int, struct x25_neigh *);
extern void x25_destroy_socket(struct sock *);
extern int x25_rx_call_request(struct sk_buff *, struct x25_neigh *, unsigned int);
+extern void x25_kill_by_neigh(struct x25_neigh *);
#include <net/x25call.h>
@@ -161,6 +162,7 @@ extern void x25_terminate_link(struct x25_neigh *);
extern int x25_parse_facilities(struct sk_buff *, struct x25_facilities *);
extern int x25_create_facilities(unsigned char *, struct x25_facilities *);
extern int x25_negotiate_facilities(struct sk_buff *, struct sock *, struct x25_facilities *);
+extern void x25_limit_facilities(struct x25_facilities *, struct x25_neigh *);
/* x25_in.c */
extern int x25_process_rx_frame(struct sock *, struct sk_buff *);