lines added deleted
linux/CREDITS : 24 10 1
linux/Documentation/Changes : 294 79 51
linux/Documentation/Configure.help : 32 11 1
linux/Documentation/cdrom/cdrom-standard.tex : 32 10 1
linux/Documentation/filesystems/affs.txt : 40 24 3
linux/Documentation/powerpc/ppc_htab.txt : 10 0 5
linux/MAINTAINERS : 37 5 7
linux/Makefile : 7 1 1
linux/arch/alpha/kernel/osf_sys.c : 67 24 7
linux/arch/alpha/kernel/time.c : 7 0 1
linux/arch/arm/kernel/time.c : 7 0 1
linux/arch/i386/kernel/bios32.c : 18 3 3
linux/arch/i386/kernel/i386_ksyms.c : 11 3 0
linux/arch/i386/kernel/process.c : 8 1 1
linux/arch/i386/kernel/ptrace.c : 42 6 5
linux/arch/i386/kernel/setup.c : 160 99 13
linux/arch/i386/kernel/smp.c : 17 2 2
linux/arch/i386/kernel/time.c : 7 0 1
linux/arch/m68k/kernel/time.c : 7 0 1
linux/arch/mips/kernel/sysirix.c : 7 0 1
linux/arch/mips/kernel/time.c : 7 0 1
linux/arch/mips/sgi/kernel/indy_timer.c : 13 4 3
linux/arch/ppc/8xx_io/commproc.c : 13 6 1
linux/arch/ppc/8xx_io/enet.c : 416 132 42
linux/arch/ppc/Makefile : 36 8 1
linux/arch/ppc/boot/Makefile : 128 8 70
linux/arch/ppc/boot/head.S : 183 12 85
linux/arch/ppc/boot/kbd.c : 83 45 5
linux/arch/ppc/boot/mbxtty.c : 201 0 201
linux/arch/ppc/boot/misc.c : 843 325 337
linux/arch/ppc/boot/of1275.c : 427 427 0
linux/arch/ppc/boot/of1275.h : 421 421 0
linux/arch/ppc/boot/piggyback.c : 64 0 64
linux/arch/ppc/chrpboot/Makefile : 25 8 2
linux/arch/ppc/coffboot/Makefile : 25 8 2
linux/arch/ppc/common_defconfig : 278 46 72
linux/arch/ppc/config.in : 14 2 2
linux/arch/ppc/defconfig : 7 1 0
linux/arch/ppc/kernel/chrp_pci.c : 157 73 73
linux/arch/ppc/kernel/chrp_setup.c : 142 55 44
linux/arch/ppc/kernel/chrp_time.c : 21 3 3
linux/arch/ppc/kernel/feature.c : 17 1 3
linux/arch/ppc/kernel/head.S : 622 219 87
linux/arch/ppc/kernel/idle.c : 91 12 11
linux/arch/ppc/kernel/irq.c : 1846 818 723
linux/arch/ppc/kernel/misc.S : 83 45 1
linux/arch/ppc/kernel/openpic.c : 52 3 29
linux/arch/ppc/kernel/pci.c : 193 73 26
linux/arch/ppc/kernel/pmac_pci.c : 63 16 6
linux/arch/ppc/kernel/pmac_setup.c : 53 33 0
linux/arch/ppc/kernel/ppc_defs.h : 69 0 69
linux/arch/ppc/kernel/ppc_ksyms.c : 21 3 1
linux/arch/ppc/kernel/prep_pci.c : 185 166 1
linux/arch/ppc/kernel/prep_setup.c : 72 29 5
linux/arch/ppc/kernel/prep_time.c : 126 82 1
linux/arch/ppc/kernel/process.c : 64 16 15
linux/arch/ppc/kernel/prom.c : 379 215 39
linux/arch/ppc/kernel/setup.c : 219 64 41
linux/arch/ppc/kernel/signal.c : 31 9 2
linux/arch/ppc/kernel/smp.c : 360 166 79
linux/arch/ppc/kernel/softemu8xx.c : 60 18 1
linux/arch/ppc/kernel/time.c : 145 64 13
linux/arch/ppc/lib/locks.c : 196 43 48
linux/arch/ppc/lib/string.S : 45 0 18
linux/arch/ppc/mbx_defconfig : 168 67 22
linux/arch/ppc/mbxboot/Makefile : 101 101 0
linux/arch/ppc/mbxboot/head.S : 201 201 0
linux/arch/ppc/mbxboot/mbxtty.c : 201 201 0
linux/arch/ppc/mbxboot/misc.c : 637 637 0
linux/arch/ppc/mbxboot/offset : 4 4 0
linux/arch/ppc/mbxboot/size : 4 4 0
linux/arch/ppc/mm/init.c : 136 36 8
linux/arch/ppc/pmac_defconfig : 7 1 0
linux/arch/sparc/boot/piggyback.c : 29 8 3
linux/arch/sparc/config.in : 40 14 2
linux/arch/sparc/defconfig : 126 42 18
linux/arch/sparc/kernel/Makefile : 5 1 1
linux/arch/sparc/kernel/devices.c : 44 10 8
linux/arch/sparc/kernel/entry.S : 67 26 8
linux/arch/sparc/kernel/head.S : 15 4 1
linux/arch/sparc/kernel/pcic.c : 19 5 4
linux/arch/sparc/kernel/process.c : 95 53 10
linux/arch/sparc/kernel/ptrace.c : 37 7 5
linux/arch/sparc/kernel/signal.c : 101 74 2
linux/arch/sparc/kernel/smp.c : 7 1 0
linux/arch/sparc/kernel/sparc_ksyms.c : 45 6 1
linux/arch/sparc/kernel/sys_sparc.c : 45 10 1
linux/arch/sparc/kernel/systbls.S : 5 1 1
linux/arch/sparc/kernel/time.c : 85 13 6
linux/arch/sparc/kernel/traps.c : 47 27 1
linux/arch/sparc/lib/Makefile : 23 5 2
linux/arch/sparc/lib/atomic.S : 35 10 2
linux/arch/sparc/lib/debuglocks.c : 19 5 3
linux/arch/sparc/lib/lshrdi3.S : 29 29 0
linux/arch/sparc/math-emu/fabss.c : 6 1 1
linux/arch/sparc/math-emu/fcmpd.c : 6 1 1
linux/arch/sparc/math-emu/fcmped.c : 6 1 1
linux/arch/sparc/math-emu/fcmpeq.c : 6 1 1
linux/arch/sparc/math-emu/fcmpes.c : 6 1 1
linux/arch/sparc/math-emu/fcmpq.c : 6 1 1
linux/arch/sparc/math-emu/fcmps.c : 6 1 1
linux/arch/sparc/math-emu/fdmulq.c : 7 1 2
linux/arch/sparc/math-emu/fdtoq.c : 7 1 2
linux/arch/sparc/math-emu/fdtos.c : 7 1 2
linux/arch/sparc/math-emu/fnegs.c : 6 1 1
linux/arch/sparc/math-emu/fqtod.c : 7 1 2
linux/arch/sparc/math-emu/fqtos.c : 7 1 2
linux/arch/sparc/math-emu/fsmuld.c : 7 1 2
linux/arch/sparc/math-emu/fstod.c : 7 1 2
linux/arch/sparc/math-emu/fstoq.c : 7 1 2
linux/arch/sparc/math-emu/math.c : 128 87 4
linux/arch/sparc/math-emu/sfp-machine.h : 177 83 50
linux/arch/sparc/mm/Makefile : 5 1 1
linux/arch/sparc/mm/fault.c : 43 10 3
linux/arch/sparc/mm/init.c : 100 32 8
linux/arch/sparc/mm/srmmu.c : 317 99 39
linux/arch/sparc/mm/sun4c.c : 36 8 4
linux/arch/sparc/mm/viking.S : 153 98 12
linux/arch/sparc/vmlinux.lds : 10 4 0
linux/arch/sparc64/Makefile : 13 2 1
linux/arch/sparc64/config.in : 96 29 29
linux/arch/sparc64/defconfig : 158 47 21
linux/arch/sparc64/kernel/Makefile : 14 2 2
linux/arch/sparc64/kernel/binfmt_aout32.c : 227 51 65
linux/arch/sparc64/kernel/central.c : 365 302 8
linux/arch/sparc64/kernel/cpu.c : 24 5 5
linux/arch/sparc64/kernel/devices.c : 50 10 9
linux/arch/sparc64/kernel/dtlb_backend.S : 43 10 8
linux/arch/sparc64/kernel/dtlb_prot.S : 24 6 6
linux/arch/sparc64/kernel/ebus.c : 50 32 1
linux/arch/sparc64/kernel/entry.S : 217 70 70
linux/arch/sparc64/kernel/head.S : 74 38 5
linux/arch/sparc64/kernel/ioctl32.c : 98 27 3
linux/arch/sparc64/kernel/irq.c : 914 455 197
linux/arch/sparc64/kernel/itlb_base.S : 51 6 11
linux/arch/sparc64/kernel/process.c : 181 75 27
linux/arch/sparc64/kernel/psycho.c : 734 246 109
linux/arch/sparc64/kernel/ptrace.c : 107 21 6
linux/arch/sparc64/kernel/setup.c : 48 22 2
linux/arch/sparc64/kernel/smp.c : 262 126 27
linux/arch/sparc64/kernel/sparc64_ksyms.c : 84 17 3
linux/arch/sparc64/kernel/starfire.c : 121 121 0
linux/arch/sparc64/kernel/sys_sparc.c : 33 10 5
linux/arch/sparc64/kernel/sys_sparc32.c : 721 367 145
linux/arch/sparc64/kernel/systbls.S : 5 1 1
linux/arch/sparc64/kernel/time.c : 101 24 7
linux/arch/sparc64/kernel/trampoline.S : 38 14 6
linux/arch/sparc64/kernel/traps.c : 58 12 5
linux/arch/sparc64/kernel/unaligned.c : 110 48 25
linux/arch/sparc64/math-emu/fabsq.c : 6 1 1
linux/arch/sparc64/math-emu/faddd.c : 7 1 2
linux/arch/sparc64/math-emu/faddq.c : 7 1 2
linux/arch/sparc64/math-emu/fadds.c : 7 1 2
linux/arch/sparc64/math-emu/fcmpeq.c : 6 1 1
linux/arch/sparc64/math-emu/fcmpq.c : 6 1 1
linux/arch/sparc64/math-emu/fdivd.c : 18 8 2
linux/arch/sparc64/math-emu/fdivq.c : 18 8 2
linux/arch/sparc64/math-emu/fdivs.c : 19 9 2
linux/arch/sparc64/math-emu/fdmulq.c : 7 1 2
linux/arch/sparc64/math-emu/fdtoi.c : 6 1 1
linux/arch/sparc64/math-emu/fdtoq.c : 7 1 2
linux/arch/sparc64/math-emu/fdtos.c : 7 1 2
linux/arch/sparc64/math-emu/fdtox.c : 6 1 1
linux/arch/sparc64/math-emu/fitoq.c : 7 1 2
linux/arch/sparc64/math-emu/fmuld.c : 7 1 2
linux/arch/sparc64/math-emu/fmulq.c : 7 1 2
linux/arch/sparc64/math-emu/fmuls.c : 7 1 2
linux/arch/sparc64/math-emu/fnegq.c : 7 1 1
linux/arch/sparc64/math-emu/fqtod.c : 7 1 2
linux/arch/sparc64/math-emu/fqtoi.c : 6 1 1
linux/arch/sparc64/math-emu/fqtos.c : 7 1 2
linux/arch/sparc64/math-emu/fqtox.c : 6 1 1
linux/arch/sparc64/math-emu/fsmuld.c : 7 1 2
linux/arch/sparc64/math-emu/fsqrtd.c : 7 1 2
linux/arch/sparc64/math-emu/fsqrtq.c : 7 1 2
linux/arch/sparc64/math-emu/fsqrts.c : 7 1 2
linux/arch/sparc64/math-emu/fstod.c : 7 1 2
linux/arch/sparc64/math-emu/fstoi.c : 6 1 1
linux/arch/sparc64/math-emu/fstoq.c : 7 1 2
linux/arch/sparc64/math-emu/fstox.c : 6 1 1
linux/arch/sparc64/math-emu/fsubd.c : 7 1 2
linux/arch/sparc64/math-emu/fsubq.c : 7 1 2
linux/arch/sparc64/math-emu/fsubs.c : 7 1 2
linux/arch/sparc64/math-emu/fxtoq.c : 7 1 2
linux/arch/sparc64/math-emu/math.c : 124 95 2
linux/arch/sparc64/math-emu/op-2.h : 18 4 4
linux/arch/sparc64/math-emu/op-common.h : 83 20 8
linux/arch/sparc64/math-emu/sfp-machine.h : 177 75 55
linux/arch/sparc64/math-emu/soft-fp.h : 68 23 12
linux/arch/sparc64/mm/fault.c : 230 112 29
linux/arch/sparc64/mm/generic.c : 61 26 13
linux/arch/sparc64/mm/init.c : 769 320 139
linux/arch/sparc64/prom/memory.c : 52 7 7
linux/arch/sparc64/prom/misc.c : 129 115 1
linux/arch/sparc64/solaris/fs.c : 57 6 6
linux/arch/sparc64/solaris/systbl.S : 14 2 2
linux/drivers/ap1000/apfddi.c : 7 0 1
linux/drivers/ap1000/ringbuf.c : 7 0 1
linux/drivers/block/cmd646.c : 19 6 3
linux/drivers/block/genhd.c : 73 25 19
linux/drivers/block/ide-cd.c : 189 59 24
linux/drivers/block/ide-cd.h : 36 7 2
linux/drivers/block/ide-disk.c : 31 8 9
linux/drivers/block/ide-pmac.c : 114 64 2
linux/drivers/block/ide-probe.c : 52 16 11
linux/drivers/block/ide.c : 41 28 0
linux/drivers/block/ide.h : 13 7 0
linux/drivers/block/ide_modes.h : 8 1 1
linux/drivers/block/ll_rw_blk.c : 20 5 2
linux/drivers/block/nbd.c : 8 1 1
linux/drivers/block/ns87415.c : 12 6 0
linux/drivers/block/sl82c105.c : 22 3 1
linux/drivers/block/swim3.c : 316 89 30
linux/drivers/cdrom/cdrom.c : 224 93 26
linux/drivers/cdrom/cm206.c : 7 0 1
linux/drivers/char/Makefile : 21 9 4
linux/drivers/char/README.epca : 14 11 0
linux/drivers/char/bw-qcam.c : 280 115 20
linux/drivers/char/bw-qcam.h : 17 4 1
linux/drivers/char/console.c : 7 0 1
linux/drivers/char/epca.c : 37 4 4
linux/drivers/char/lp.c : 56 14 20
linux/drivers/char/pcxx.c : 7 0 1
linux/drivers/char/rocket.c : 7 0 1
linux/drivers/char/serial.c : 55 8 5
linux/drivers/char/tpqic02.c : 7 0 1
linux/drivers/char/tty_io.c : 8 1 1
linux/drivers/fc4/Config.in : 23 11 2
linux/drivers/fc4/Makefile : 14 8 0
linux/drivers/fc4/fc-al.h : 27 27 0
linux/drivers/fc4/fc.c : 674 346 66
linux/drivers/fc4/fc.h : 50 15 7
linux/drivers/fc4/fc_syms.c : 17 3 1
linux/drivers/fc4/fcp_impl.h : 168 168 0
linux/drivers/fc4/fcp_scsi.h : 151 0 151
linux/drivers/fc4/soc.c : 57 8 7
linux/drivers/fc4/soc.h : 8 1 1
linux/drivers/fc4/socal.c : 854 854 0
linux/drivers/fc4/socal.h : 319 319 0
linux/drivers/isdn/Config.in : 9 2 1
linux/drivers/isdn/hisax/Makefile : 12 4 2
linux/drivers/isdn/hisax/config.c : 21 8 0
linux/drivers/isdn/hisax/foreign.c : 780 780 0
linux/drivers/isdn/hisax/foreign.h : 193 193 0
linux/drivers/isdn/hisax/hisax.h : 57 13 4
linux/drivers/isdn/hisax/isdnl1.c : 41 7 6
linux/drivers/macintosh/adb.c : 90 49 5
linux/drivers/macintosh/mac_keyb.c : 348 240 34
linux/drivers/macintosh/macserial.c : 844 333 108
linux/drivers/macintosh/macserial.h : 74 29 24
linux/drivers/macintosh/via-pmu.c : 458 137 50
linux/drivers/misc/parport_ax.c : 21 3 3
linux/drivers/misc/parport_ieee1284.c : 7 2 1
linux/drivers/misc/parport_pc.c : 80 24 20
linux/drivers/net/3c509.c : 416 143 88
linux/drivers/net/3c527.c : 1152 1152 0
linux/drivers/net/3c527.h : 41 40 0
linux/drivers/net/Config.in : 27 4 3
linux/drivers/net/Makefile : 48 24 0
linux/drivers/net/Space.c : 17 4 0
linux/drivers/net/a2065.c : 60 20 4
linux/drivers/net/acenic.c : 1245 398 243
linux/drivers/net/acenic.h : 266 111 50
linux/drivers/net/acenic_firmware.h : 14075 8521 5543
linux/drivers/net/bsd_comp.c : 7 0 1
linux/drivers/net/cs89x0.c : 54 19 13
linux/drivers/net/ibmtr.c : 79 18 0
linux/drivers/net/ibmtr.h : 7 1 0
linux/drivers/net/mace.c : 392 137 55
linux/drivers/net/myri_sbus.c : 83 12 16
linux/drivers/net/ne2.c : 7 0 1
linux/drivers/net/ppp.c : 7 0 1
linux/drivers/net/ppp_deflate.c : 7 0 1
linux/drivers/net/shaper.c : 7 0 1
linux/drivers/net/smc9194.c : 7 0 1
linux/drivers/net/sunbmac.c : 1557 1557 0
linux/drivers/net/sunbmac.h : 381 381 0
linux/drivers/net/sunhme.c : 1117 598 140
linux/drivers/net/sunhme.h : 64 32 1
linux/drivers/net/sunlance.c : 265 75 43
linux/drivers/net/sunqe.c : 119 28 17
linux/drivers/net/wavelan.c : 277 95 38
linux/drivers/net/wavelan.h : 16 3 0
linux/drivers/net/wavelan.p.h : 109 30 27
linux/drivers/pci/oldproc.c : 15 2 0
linux/drivers/sbus/audio/audio.c : 75 32 3
linux/drivers/sbus/audio/cs4215.h : 10 2 1
linux/drivers/sbus/audio/cs4231.c : 1267 726 132
linux/drivers/sbus/audio/cs4231.h : 106 39 29
linux/drivers/sbus/audio/dbri.c : 2219 1051 725
linux/drivers/sbus/audio/dbri.h : 194 60 35
linux/drivers/sbus/audio/dmy.c : 737 737 0
linux/drivers/sbus/audio/dummy.h : 41 41 0
linux/drivers/sbus/char/bpp.c : 78 15 9
linux/drivers/sbus/char/flash.c : 5 1 1
linux/drivers/sbus/char/pcikbd.c : 19 5 3
linux/drivers/sbus/char/sab82532.c : 14 2 2
linux/drivers/sbus/char/su.c : 124 34 12
linux/drivers/sbus/char/sunkbd.c : 14 6 1
linux/drivers/sbus/char/sunserial.c : 19 4 4
linux/drivers/sbus/char/zs.c : 402 118 55
linux/drivers/sbus/sbus.c : 64 16 3
linux/drivers/scsi/Makefile : 14 8 0
linux/drivers/scsi/esp.c : 2123 737 603
linux/drivers/scsi/esp.h : 40 22 1
linux/drivers/scsi/fcal.c : 307 307 0
linux/drivers/scsi/fcal.h : 46 46 0
linux/drivers/scsi/pci2000.c : 244 93 33
linux/drivers/scsi/pci2000.h : 38 20 13
linux/drivers/scsi/pci2220i.c : 2081 1413 322
linux/drivers/scsi/pci2220i.h : 249 84 106
linux/drivers/scsi/pluto.c : 94 22 11
linux/drivers/scsi/pluto.h : 8 1 1
linux/drivers/scsi/psi_dale.h : 188 88 57
linux/drivers/scsi/psi_roy.h : 80 28 5
linux/drivers/scsi/qlogicpti.c : 275 79 42
linux/drivers/scsi/qlogicpti.h : 40 12 8
linux/drivers/scsi/qlogicpti_asm.c : 1182 1169 3
linux/drivers/scsi/scsi.c : 61 11 5
linux/drivers/scsi/scsi.h : 8 1 1
linux/drivers/sound/awacs_defs.h : 68 64 0
linux/drivers/sound/dmasound.c : 829 513 141
linux/drivers/sound/es1370.c : 35 5 3
linux/drivers/sound/gus_card.c : 18 3 2
linux/drivers/sound/midi_synth.c : 8 1 1
linux/drivers/video/Config.in : 65 12 6
linux/drivers/video/Makefile : 14 8 0
linux/drivers/video/atyfb.c : 5 1 1
linux/drivers/video/cgsixfb.c : 5 1 1
linux/drivers/video/creatorfb.c : 38 6 15
linux/drivers/video/fbmem.c : 17 5 0
linux/drivers/video/leofb.c : 5 1 1
linux/drivers/video/offb.c : 9 3 0
linux/drivers/video/pm2fb.c : 8 1 1
linux/drivers/video/promcon.c : 5 1 1
linux/drivers/video/sbusfb.c : 13 6 1
linux/drivers/video/sgivwfb.c : 1036 1036 0
linux/drivers/video/sgivwfb.h : 660 660 0
linux/fs/affs/Changes : 15 9 0
linux/fs/autofs/root.c : 52 11 8
linux/fs/binfmt_aout.c : 78 14 21
linux/fs/binfmt_elf.c : 95 18 22
linux/fs/buffer.c : 117 27 27
linux/fs/coda/inode.c : 9 0 3
linux/fs/coda/upcall.c : 7 0 1
linux/fs/dcache.c : 9 2 1
linux/fs/ext2/inode.c : 8 1 1
linux/fs/ext2/super.c : 71 9 9
linux/fs/inode.c : 59 14 7
linux/fs/locks.c : 17 2 2
linux/fs/ncpfs/inode.c : 8 1 1
linux/fs/nfs/file.c : 62 11 24
linux/fs/nfsd/nfsfh.c : 100 35 17
linux/fs/nfsd/nfssvc.c : 37 12 4
linux/fs/nfsd/vfs.c : 28 5 1
linux/fs/ntfs/fs.c : 15 2 0
linux/fs/open.c : 31 3 8
linux/fs/proc/array.c : 24 17 1
linux/fs/sysv/ialloc.c : 15 1 1
linux/fs/sysv/inode.c : 22 3 5
linux/fs/sysv/namei.c : 7 1 0
linux/include/asm-alpha/cache.h : 6 1 0
linux/include/asm-alpha/pgtable.h : 6 1 0
linux/include/asm-alpha/semaphore-helper.h : 38 11 5
linux/include/asm-alpha/semaphore.h : 10 2 2
linux/include/asm-alpha/sysinfo.h : 8 2 0
linux/include/asm-arm/cache.h : 6 1 0
linux/include/asm-arm/pgtable.h : 6 1 0
linux/include/asm-i386/cache.h : 6 2 0
linux/include/asm-i386/pgtable.h : 6 1 0
linux/include/asm-m68k/cache.h : 6 2 0
linux/include/asm-m68k/pgtable.h : 6 1 0
linux/include/asm-mips/cache.h : 6 2 0
linux/include/asm-mips/pgtable.h : 13 2 1
linux/include/asm-ppc/adb.h : 9 3 0
linux/include/asm-ppc/bootx.h : 50 16 4
linux/include/asm-ppc/cache.h : 11 4 0
linux/include/asm-ppc/dma.h : 49 34 2
linux/include/asm-ppc/feature.h : 7 0 1
linux/include/asm-ppc/ide.h : 181 48 70
linux/include/asm-ppc/io.h : 30 1 10
linux/include/asm-ppc/irq.h : 66 21 23
linux/include/asm-ppc/keyboard.h : 62 7 7
linux/include/asm-ppc/mmu.h : 77 29 28
linux/include/asm-ppc/ohare.h : 10 2 2
linux/include/asm-ppc/page.h : 11 2 2
linux/include/asm-ppc/pgtable.h : 90 26 27
linux/include/asm-ppc/pmu.h : 63 25 1
linux/include/asm-ppc/posix_types.h : 8 1 1
linux/include/asm-ppc/processor.h : 56 28 6
linux/include/asm-ppc/semaphore-helper.h : 107 107 0
linux/include/asm-ppc/semaphore.h : 92 26 38
linux/include/asm-ppc/smp.h : 51 12 14
linux/include/asm-ppc/softirq.h : 10 2 1
linux/include/asm-ppc/spinlock.h : 8 2 0
linux/include/asm-ppc/system.h : 81 22 20
linux/include/asm-ppc/termbits.h : 8 1 1
linux/include/asm-ppc/types.h : 17 2 2
linux/include/asm-ppc/uaccess.h : 19 5 1
linux/include/asm-ppc/unistd.h : 7 1 0
linux/include/asm-ppc/vga.h : 40 23 2
linux/include/asm-sparc/asm_offsets.h : 685 227 221
linux/include/asm-sparc/atomic.h : 32 9 2
linux/include/asm-sparc/cache.h : 14 3 1
linux/include/asm-sparc/checksum.h : 17 5 2
linux/include/asm-sparc/dma.h : 21 3 1
linux/include/asm-sparc/ethtool.h : 79 79 0
linux/include/asm-sparc/floppy.h : 39 5 0
linux/include/asm-sparc/init.h : 16 3 0
linux/include/asm-sparc/io-unit.h : 26 12 8
linux/include/asm-sparc/mmu_context.h : 13 2 4
linux/include/asm-sparc/page.h : 7 1 0
linux/include/asm-sparc/pgtable.h : 16 3 1
linux/include/asm-sparc/posix_types.h : 23 8 0
linux/include/asm-sparc/processor.h : 23 4 2
linux/include/asm-sparc/resource.h : 14 2 2
linux/include/asm-sparc/sbus.h : 19 8 1
linux/include/asm-sparc/semaphore-helper.h : 167 167 0
linux/include/asm-sparc/semaphore.h : 182 122 34
linux/include/asm-sparc/smp.h : 31 3 7
linux/include/asm-sparc/softirq.h : 68 8 8
linux/include/asm-sparc/spinlock.h : 31 5 5
linux/include/asm-sparc/system.h : 16 4 2
linux/include/asm-sparc/termbits.h : 22 16 0
linux/include/asm-sparc/termios.h : 5 1 1
linux/include/asm-sparc/timex.h : 9 5 0
linux/include/asm-sparc/unistd.h : 325 76 110
linux/include/asm-sparc64/asm_offsets.h : 1029 344 336
linux/include/asm-sparc64/bitops.h : 16 3 3
linux/include/asm-sparc64/cache.h : 6 2 0
linux/include/asm-sparc64/dma.h : 44 8 3
linux/include/asm-sparc64/ethtool.h : 79 79 0
linux/include/asm-sparc64/fhc.h : 57 32 1
linux/include/asm-sparc64/firehose.h : 88 27 25
linux/include/asm-sparc64/floppy.h : 30 4 2
linux/include/asm-sparc64/init.h : 6 2 0
linux/include/asm-sparc64/iommu.h : 26 4 9
linux/include/asm-sparc64/irq.h : 85 57 9
linux/include/asm-sparc64/mmu_context.h : 37 11 3
linux/include/asm-sparc64/oplib.h : 65 40 8
linux/include/asm-sparc64/pbm.h : 38 11 3
linux/include/asm-sparc64/pgtable.h : 72 14 8
linux/include/asm-sparc64/posix_types.h : 28 8 0
linux/include/asm-sparc64/processor.h : 24 4 3
linux/include/asm-sparc64/psycho.h : 90 57 9
linux/include/asm-sparc64/resource.h : 14 2 2
linux/include/asm-sparc64/sbus.h : 31 13 1
linux/include/asm-sparc64/scatterlist.h : 14 3 2
linux/include/asm-sparc64/semaphore-helper.h : 68 68 0
linux/include/asm-sparc64/semaphore.h : 170 113 35
linux/include/asm-sparc64/smp.h : 69 29 12
linux/include/asm-sparc64/softirq.h : 41 6 4
linux/include/asm-sparc64/spinlock.h : 21 4 4
linux/include/asm-sparc64/sysio.h : 15 3 2
linux/include/asm-sparc64/system.h : 14 3 1
linux/include/asm-sparc64/termbits.h : 17 11 0
linux/include/asm-sparc64/termios.h : 5 1 1
linux/include/asm-sparc64/timex.h : 13 9 0
linux/include/asm-sparc64/unistd.h : 312 62 125
linux/include/linux/cdrom.h : 28 7 3
linux/include/linux/dcache.h : 11 4 1
linux/include/linux/fs.h : 10 2 1
linux/include/linux/genhd.h : 7 1 0
linux/include/linux/in.h : 7 0 1
linux/include/linux/netdevice.h : 77 30 27
linux/include/linux/openpic.h : 15 0 9
linux/include/linux/pci.h : 7 1 0
linux/include/linux/pkt_cls.h : 45 30 1
linux/include/linux/proc_fs.h : 9 2 1
linux/include/linux/quotaops.h : 40 5 5
linux/include/linux/rtnetlink.h : 7 1 0
linux/include/linux/sunrpc/svcsock.h : 8 1 1
linux/include/linux/sysctl.h : 29 6 3
linux/include/linux/sysv_fs.h : 7 0 1
linux/include/linux/tqueue.h : 8 1 1
linux/include/linux/wireless.h : 49 15 3
linux/include/net/addrconf.h : 11 3 2
linux/include/net/dst.h : 49 26 1
linux/include/net/ip.h : 15 2 1
linux/include/net/ip6_fib.h : 15 1 1
linux/include/net/ip_fib.h : 62 28 1
linux/include/net/ip_masq.h : 7 1 0
linux/include/net/ipv6.h : 23 1 9
linux/include/net/neighbour.h : 15 1 1
linux/include/net/pkt_cls.h : 23 9 1
linux/include/net/pkt_sched.h : 210 63 17
linux/include/net/route.h : 26 13 0
linux/include/net/sock.h : 18 12 0
linux/include/net/tcp.h : 34 18 3
linux/include/scsi/scsi.h : 7 1 0
linux/kernel/acct.c : 15 2 2
linux/kernel/exit.c : 8 1 1
linux/kernel/fork.c : 15 1 1
linux/kernel/ksyms.c : 7 1 0
linux/kernel/sched.c : 41 3 4
linux/kernel/softirq.c : 7 1 0
linux/kernel/time.c : 106 10 14
linux/lib/vsprintf.c : 25 5 3
linux/mm/filemap.c : 9 2 1
linux/net/Makefile : 8 2 0
linux/net/core/dev.c : 114 31 20
linux/net/core/dev_mcast.c : 166 39 21
linux/net/core/filter.c : 10 2 1
linux/net/core/neighbour.c : 273 98 15
linux/net/core/rtnetlink.c : 15 1 1
linux/net/core/sock.c : 52 16 7
linux/net/ipv4/Config.in : 9 3 0
linux/net/ipv4/af_inet.c : 98 25 21
linux/net/ipv4/arp.c : 31 8 4
linux/net/ipv4/devinet.c : 78 28 4
linux/net/ipv4/fib_frontend.c : 43 6 3
linux/net/ipv4/fib_hash.c : 165 97 4
linux/net/ipv4/fib_rules.c : 111 32 5
linux/net/ipv4/fib_semantics.c : 26 3 3
linux/net/ipv4/icmp.c : 82 27 3
linux/net/ipv4/igmp.c : 45 8 1
linux/net/ipv4/ip_forward.c : 17 2 2
linux/net/ipv4/ip_fragment.c : 25 3 2
linux/net/ipv4/ip_gre.c : 135 82 25
linux/net/ipv4/ip_input.c : 141 46 52
linux/net/ipv4/ip_masq.c : 88 73 1
linux/net/ipv4/ip_nat_dumb.c : 66 26 7
linux/net/ipv4/ip_options.c : 61 16 14
linux/net/ipv4/ip_output.c : 297 86 83
linux/net/ipv4/ip_sockglue.c : 77 11 8
linux/net/ipv4/ipip.c : 150 78 31
linux/net/ipv4/ipmr.c : 58 13 3
linux/net/ipv4/route.c : 859 331 111
linux/net/ipv4/syncookies.c : 25 3 2
linux/net/ipv4/tcp.c : 124 42 25
linux/net/ipv4/tcp_input.c : 53 9 3
linux/net/ipv4/tcp_ipv4.c : 116 28 26
linux/net/ipv4/tcp_output.c : 29 5 4
linux/net/ipv4/tcp_timer.c : 34 2 5
linux/net/ipv4/udp.c : 85 19 8
linux/net/ipv6/addrconf.c : 428 130 78
linux/net/ipv6/icmp.c : 22 5 3
linux/net/ipv6/ip6_fib.c : 35 3 5
linux/net/ipv6/ip6_output.c : 64 10 7
linux/net/ipv6/ipv6_sockglue.c : 48 10 4
linux/net/ipv6/mcast.c : 97 25 3
linux/net/ipv6/ndisc.c : 48 10 4
linux/net/ipv6/route.c : 158 42 19
linux/net/ipv6/sit.c : 146 76 30
linux/net/ipv6/tcp_ipv6.c : 142 27 26
linux/net/ipv6/udp.c : 126 31 20
linux/net/ipx/Makefile : 14 6 2
linux/net/netlink/af_netlink.c : 140 28 14
linux/net/netsyms.c : 41 8 0
linux/net/packet/af_packet.c : 17 2 2
linux/net/sched/Config.in : 14 4 3
linux/net/sched/Makefile : 21 9 1
linux/net/sched/cls_api.c : 142 35 23
linux/net/sched/cls_fw.c : 354 287 10
linux/net/sched/cls_route.c : 641 563 30
linux/net/sched/cls_rsvp.h : 184 50 19
linux/net/sched/cls_u32.c : 176 41 20
linux/net/sched/estimator.c : 10 2 1
linux/net/sched/police.c : 118 51 10
linux/net/sched/sch_api.c : 687 305 142
linux/net/sched/sch_cbq.c : 746 234 100
linux/net/sched/sch_csz.c : 51 16 1
linux/net/sched/sch_fifo.c : 47 7 7
linux/net/sched/sch_generic.c : 72 8 31
linux/net/sched/sch_prio.c : 196 91 29
linux/net/sched/sch_red.c : 25 3 1
linux/net/sched/sch_sfq.c : 64 26 13
linux/net/sched/sch_tbf.c : 188 71 29
linux/net/sched/sch_teql.c : 7 1 0
linux/net/socket.c : 72 10 35
linux/net/sunrpc/auth.c : 9 2 1
linux/net/sunrpc/auth_null.c : 12 4 1
linux/net/sunrpc/auth_unix.c : 11 3 1
linux/net/sunrpc/svcsock.c : 33 5 5
linux/net/sunrpc/xprt.c : 17 3 1
linux/net/unix/af_unix.c : 198 82 6
linux/net/unix/garbage.c : 10 2 2
linux/net/unix/sysctl_net_unix.c : 17 4 0
linux/scripts/ksymoops/README : 28 6 2
linux/scripts/ksymoops/oops.c : 460 227 52
linux/scripts/ver_linux : 16 3 3
--
Thomas Koenig, Thomas...@ciw.uni-karlsruhe.de, ig...@dkauni2.bitnet.
The joy of engineering is to find a straight line on a double
logarithmic diagram.
#!/bin/sh
# This is a shell archive
# To extract the files from this archive, save it to a file, remove
# everything above the "!/bin/sh" line above, and type "sh file_name".
# existing files will NOT be overwritten unless -c is specified
#
# This is part 01 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
#
if test -r _shar_seq_.tmp; then
echo 'Must unpack archives in sequence!'
echo Please unpack part `cat _shar_seq_.tmp` next
exit 1
fi
# ============= patch-2.2.4 ==============
if test -f 'patch-2.2.4' -a X"$1" != X"-c"; then
echo 'x - skipping patch-2.2.4 (File already exists)'
rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting patch-2.2.4 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'patch-2.2.4' &&
diff -u --recursive --new-file v2.2.3/linux/CREDITS linux/CREDITS
--- v2.2.3/linux/CREDITS Wed Mar 10 15:29:44 1999
+++ linux/CREDITS Mon Mar 22 11:18:17 1999
@@ -779,6 +779,15 @@
X S: Mountain View, California 94043
X S: USA
X
+N: Benjamin Herrenschmidt
+E: bh...@calva.net
+E: be...@mipsys.com
+D: PowerMac booter (BootX)
+D: Additional PowerBook support
+S: 22, rue des Marguettes
+S: 75012 Paris
+S: France
+
X N: Sebastian Hetze
X E: s...@lunetix.de
X D: German Linux Documentation,
@@ -1760,7 +1769,7 @@
X N: Jaspreet Singh
X E: jasp...@sangoma.com
X W: www.sangoma.com
-D: WANPIPE driver for Sangoma S508/FT1 cards
+D: WANPIPE drivers & API Support for Sangoma S508/FT1 cards
X S: Sangoma Technologies Inc.,
X S: 1001 Denison Street
X S: Suite 101
diff -u --recursive --new-file v2.2.3/linux/Documentation/Changes linux/Documentation/Changes
--- v2.2.3/linux/Documentation/Changes Wed Jan 20 23:14:03 1999
+++ linux/Documentation/Changes Mon Mar 22 07:55:41 1999
@@ -19,10 +19,6 @@
X texinfo so a diff is useless anyway (though I can incorporate one by
X hand if you insist upon sending it that way ;-).
X
- Check out
-http://www.mindspring.com/~nunez/info/linux/LinuxBleed.html for an
-HTML-ized shopping list.
-
X For those of you in Europe,
X http://www.datanet.hu/generations/linux/Changes2.html is an
X English-language HTML version.
@@ -30,10 +26,14 @@
X The most current version should always be available from
X http://cyberbuzz.gatech.edu/kaboom/linux/ as well.
X
+ Voir
+http://www.linux-france.com/article/sys/Changes-2.2/Changes-2.2.1.html
+pour la traduction français.
+
X Also, don't forget http://www.linuxhq.com/ for all your Linux kernel
X needs.
X
-Last updated: January 18, 1999
+Last updated: March 16, 1999
X Current Author: Chris Ricker (kab...@gatech.edu or chris....@m.cc.utah.edu).
X
X Current Minimal Requirements
@@ -43,17 +43,17 @@
X encountered a bug! If you're unsure what version you're currently
X running, the suggested command should tell you.
X
-- Kernel modules 2.1.121 ; insmod -V
+- Kernel modutils 2.1.121 ; insmod -V
X - Gnu C 2.7.2.3 ; gcc --version
X - Binutils 2.8.1.0.23 ; ld -v
-- Linux libc5 C Library 5.4.46 ; ls -l /lib/libc.so.*
-- Linux libc6 C Library 2.0.7pre6 ; ls -l /lib/libc.so.*
+- Linux libc5 C Library 5.4.46 ; ls -l /lib/libc*
+- Linux libc6 C Library 2.0.7pre6 ; ls -l /lib/libc*
X - Dynamic Linker (ld.so) 1.9.9 ; ldd --version or ldd -v
X - Linux C++ Library 2.7.2.8 ; ls -l /usr/lib/libg++.so.*
X - Procps 1.2.9 ; ps --version
-- Procinfo 15 ; procinfo -v
+- Procinfo 16 ; procinfo -v
X - Psmisc 17 ; pstree -V
-- Net-tools 1.49 ; hostname -V
+- Net-tools 1.50 ; hostname -V
X - Loadlin 1.6a
X - Sh-utils 1.16 ; basename --v
X - Autofs 3.1.1 ; automount --version
@@ -61,8 +61,8 @@
X - Bash 1.14.7 ; bash -version
X - Ncpfs 2.2.0 ; ncpmount -v
X - Pcmcia-cs 3.0.7 ; cardmgr -V
-- PPP 2.3.5 ; pppd -v
-- Util-linux 2.9g ; chsh -v
+- PPP 2.3.5 ; pppd --version
+- Util-linux 2.9i ; chsh -v
X
X Upgrade notes
X *************
@@ -142,7 +142,9 @@
X unless you're running glibc2 / libc6.
X
X If you upgrade to libc-5.4.x, you may also need to upgrade ypbind if
-you're using NIS.
+you're using NIS. For ypbind and glibc, you'll probably need the
+ypbind-3.3-glibc5.diff patch available in the same place as the ypbind
+source.
X
X If you upgrade to libc-5.4.46, please read and pay attention to its
X accompanying release notes. The section about it breaking make is not a
@@ -189,6 +191,12 @@
X users should especially try to use the 2.9.1.0.x releases, as they
X resolve known issues with glibc2 and binutils-2.8.x releases.
X
+ libbfd, libiberty, and /usr/include/bfd.h, which are part of recent
+binutils packages, are also required to compile ksymoops. Depending
+upon your distribution, this may require you to install both binutils
+and binutils-development packages (Debian puts bfd.h in binutils-dev,
+for example).
+
X Gnu C
X =====
X
@@ -247,7 +255,7 @@
X DHCP clients for 2.0 do not work with the new networking code in the
X 2.2 kernel. You will need to upgrade your dhcpcd / dhcpclient.
X
- The ISDN code in the stock 2.0 kernel may not work for you. If it
+ The ISDN code in the stock 2.2 kernel may not work for you. If it
X doesn't, look in ftp://ftp.suse.com/pub/isdn4linux for updated versions.
X
X Memory
@@ -278,7 +286,7 @@
X ===
X
X If you run Red Hat Linux or any other distribution that uses RPM,
-you need to upgrade RPM to version 2.2.7 or later.
+you need to upgrade RPM to a 2.5.x or later version.
X
X DOSEMU
X ======
@@ -324,7 +332,7 @@
X When you build your kernel with Syncookie support
X (CONFIG_SYN_COOKIES) the syncookie code still defaults to off (unlike
X the 2.0.30+ behavior). You have to explicitly enable it by issuing the
-following command: echo 1 > /proc/sys/net/ipv4/tcp_syncookies
+following command: echo 1 > /proc/sys/net/ipv4/tcp_syncookies
X
X Bash
X ====
@@ -444,6 +452,30 @@
X Most distributed ping clients are buggy. Get an updated one from the
X iputils package.
X
+Patch
+=====
+
+ Really old versions of patch cannot delete files. This can be a
+problem if you try to upgrade via patches. If, for example, you are
+unable to compile Linux 2.2, you may have an outdated version of patch.
+Upgrade, re-patch the kernel, and try again.
+
+Process accounting
+==================
+
+ If you use process accounting, you need to recompile the package
+against 2.2 kernel includes for it to work properly. Furthermore, when
+you do so, watch out for a quirky configure script. Your generated
+config.h file needs to
+
+ #define HAVE_LINUX_ACCT_H
+
+ but instead it often has
+
+ /* #undef HAVE_LINUX_ACCT_H */
+
+ so be sure to check that when you recompile.
+
X Where to get the files
X **********************
X
@@ -481,7 +513,7 @@
X ftp://metalab.unc.edu/pub/Linux/GCC/release.egcs-1.0.3
X
X Gnu C 2.7.2.3 source:
-ftp://prep.ai.mit.edu/pub/gnu/gcc-2.7.2.3.tar.gz
+ftp://ftp.gnu.org/gnu/gcc/gcc-2.7.2.3.tar.gz
X ftp://metalab.unc.edu/pub/gnu/gcc-2.7.2.3.tar.gz
X
X Linux C Library
@@ -501,12 +533,8 @@
X Linux C++ Library
X =================
X
-The 2.7.2.8 release:
-ftp://tsx-11.mit.edu/pub/linux/packages/GCC/libg++-2.7.2.8.bin.tar.gz
-ftp://metalab.unc.edu/pub/Linux/GCC/libg++-2.7.2.8.bin.tar.gz
-Installation notes:
-ftp://tsx-11.mit.edu/pub/linux/packages/GCC/release.libg++-2.7.2.8
-ftp://metalab.unc.edu/pub/Linux/GCC/release.libg++-2.7.2.8
+The 2.7.2 release:
+ftp://ftp.gnu.org/gnu/libg++/libg++-2.7.2.tar.gz
X
X Dynamic Linker
X ==============
@@ -531,8 +559,8 @@
X Procinfo utilities
X ==================
X
-The 15 release:
-ftp://ftp.cistron.nl/pub/people/svm/procinfo-15.tar.gz
+The 16 release:
+ftp://ftp.cistron.nl/pub/people/svm/procinfo-16.tar.gz
X
X Psmisc utilities
X ================
@@ -544,15 +572,9 @@
X RPM utilities
X =============
X
-The 2.2.7 release for Intel:
-ftp://ftp.redhat.com/pub/redhat/old-releases/redhat-4.0/updates/i386/rpm-2.2.7-1.i386.rpm
-ftp://ftp.redhat.com/pub/redhat/old-releases/redhat-4.0/updates/i386/rpm-devel-2.2.7-1.i386.rpm
-The 2.2.7 release for Alpha:
-ftp://ftp.redhat.com/pub/redhat/old-releases/redhat-4.0/updates/axp/rpm-2.2.7-1.axp.rpm
-ftp://ftp.redhat.com/pub/redhat/old-releases/redhat-4.0/updates/axp/rpm-devel-2.2.7-1.axp.rpm
-The 2.2.7 release for SPARC:
-ftp://ftp.redhat.com/pub/redhat/old-releases/redhat-4.0/updates/sparc/rpm-2.2.7-1.sparc.rpm
-ftp://ftp.redhat.com/pub/redhat/old-releases/redhat-4.0/updates/sparc/rpm-devel-2.2.7-1.sparc.rpm
+The 2.5.1 source release:
+ftp://ftp.rpm.org/pub/rpm/dist/rpm-2.5.x/rpm-2.5.1-1.src.rpm
+ftp://ftp.rpm.org/pub/rpm/dist/rpm-2.5.x/rpm-2.5.1.tar.gz
X
X DOSEMU
X ======
@@ -573,26 +595,26 @@
X
X The 1.16 release:
X ftp://metalab.unc.edu/pub/gnu/sh-utils-1.16.tar.gz
-ftp://prep.ai.mit.edu/pub/gnu/sh-utils-1.16.tar.gz
+ftp://ftp.gnu.org/gnu/sh-utils/sh-utils-1.16.tar.gz
X
X Util-linux
X ==========
X
X The 2.9 release:
-ftp://ftp.win.tue.nl/pub/linux/util/util-linux-2.9g.tar.gz
+ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/util-linux-2.9i.tar.gz
X
X Autofs
X ======
X
-The 3.1.1 release:
-ftp://ftp.kernel.org/pub/linux/daemons/autofs/autofs-3.1.1.tar.gz
+The 3.1.3 release:
+ftp://ftp.kernel.org/pub/linux/daemons/autofs/autofs-3.1.3.tar.gz
X
X NFS
X ===
X
X The user-land 2.2beta40 release:
-ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/nfs-server-2.2beta40.tar.gz
-ftp://linux.nrao.edu/mirrors/fb0429.mathematik.th-darmstadt.de/pub/linux/okir/nfs-server-2.2beta40.tar.gz
+ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/dontuse/nfs-server-2.2beta40.tar.gz
+ftp://linux.nrao.edu/mirrors/fb0429.mathematik.th-darmstadt.de/pub/linux/okir/dontuse/nfs-server-2.2beta40.tar.gz
X
X The kernel-level 12/04/98 release:
X ftp://ftp.yggdrasil.com/private/hjl/knfsd-981204.tar.gz
@@ -601,30 +623,30 @@
X Net-tools
X =========
X
-The 1.49 release:
-ftp://ftp.cs-ipv6.lancs.ac.uk/pub/Code/Linux/Net_Tools/net-tools-1.49.tar.gz
-http://www.tazenda.demon.co.uk/phil/net-tools/net-tools-1.49.tar.gz
+The 1.50 release:
+ftp://ftp.cs-ipv6.lancs.ac.uk/pub/Code/Linux/Net_Tools/net-tools-1.50.tar.gz
+http://www.tazenda.demon.co.uk/phil/net-tools/net-tools-1.50.tar.gz
X
X Ypbind
X ======
X
X The 3.3 release:
-ftp://ftp.uni-paderborn.de/pub/linux/local/yp/ypbind-3.3.tar.gz
+ftp://ftp.kernel.org/pub/linux/utils/net/NIS/ypbind-3.3.tar.gz
X
X Sysklogd
X ========
X
-The 1.3-30 release:
-ftp://metalab.unc.edu/pub/Linux/system/daemons/sysklogd-1.3-30.tar.gz
+The 1.3-31 release:
+ftp://metalab.unc.edu/pub/Linux/system/daemons/sysklogd-1.3-31.tar.gz
X
X Bash
X ====
X
X The 1.14.7 release:
-ftp://prep.ai.mit.edu/pub/gnu/bash-1.14.7.tar.gz
+ftp://ftp.gnu.org/gnu/bash/bash-1.14.7.tar.gz
X
X The 2.02.1 release:
-ftp://prep.ai.mit.edu/pub/gnu/bash-2.02.1.tar.gz
+ftp://ftp.gnu.org/gnu/bash/bash-2.02.1.tar.gz
X
X Ncpfs
X =====
@@ -726,8 +748,14 @@
X IP utils
X ========
X
-The 11/01/98 release:
-ftp://ftp.inr.ac.ru/pub/ip-routing/iputils-ss981101.tar.gz
+The 03/01/99 release:
+ftp://ftp.inr.ac.ru/ip-routing/iproute2-2.1.99-now-ss990301.tar.gz
+
+Patch
+=====
+
+The 2.5 release:
+ftp://ftp.gnu.org/gnu/patch/patch-2.5.tar.gz
X
X Other Info
X ==========
@@ -744,7 +772,7 @@
X your favorite Red Hat mirror site before installing the non-RPM
X version. Remember, you might need to use the --force option to get the
X upgrade to install. ftp://contrib.redhat.com/ ,
-ftp://developer.redhat.com/ , or ftp://rawhide.redhat.com/ will have
+ftp://developer.redhat.com/ , or ftp://updates.redhat.com/ will have
X almost everything you need, and Red Hat 5.2 ships with most necessary
X software.
X
diff -u --recursive --new-file v2.2.3/linux/Documentation/Configure.help linux/Documentation/Configure.help
--- v2.2.3/linux/Documentation/Configure.help Wed Mar 10 15:29:44 1999
+++ linux/Documentation/Configure.help Sun Mar 21 07:22:00 1999
@@ -1399,6 +1399,10 @@
X PC boards and vice versa.
X See Documentation/sgi-visws.txt for more.
X
+SGI Visual Workstation framebuffer support
+CONFIG_FB_SGIVW
+ SGI Visual Workstation support for framebuffer graphics.
+
X System V IPC
X CONFIG_SYSVIPC
X Inter Process Communication is a suite of library functions and
@@ -2247,6 +2251,12 @@
X you say Y here, you will be able to specify different routes for
X packets with different TOS values.
X
+IP: use FWMARK value as routing key
+CONFIG_IP_ROUTE_FWMARK
+ If you say Y here, you will be able to specify different routes for
+ packets with different FWMARK ("firewalling mark") values
+ (see ipchains(8), "-m" argument).
+
X IP: verbose route monitoring
X CONFIG_IP_ROUTE_VERBOSE
X If you say Y here, which is recommended, then the kernel will print
@@ -5099,7 +5109,7 @@
X *** networking options: especially CONFIG*FIREWALL. ***
X
X However, it will work with all options in CONFIG_IP_ADVANCED_ROUTER
- section (except for CONFIG_IP_ROUTE_TOS). At the moment, few devices
+ section (except for CONFIG_IP_ROUTE_TOS&FWMARK). At the moment, few devices
X support fast switching (tulip is one of them, modified 8390 can be
X found at ftp://ftp.inr.ac.ru/ip-routing/fastroute-8390.tar.gz).
X
diff -u --recursive --new-file v2.2.3/linux/Documentation/cdrom/cdrom-standard.tex linux/Documentation/cdrom/cdrom-standard.tex
--- v2.2.3/linux/Documentation/cdrom/cdrom-standard.tex Tue Jan 19 11:32:50 1999
+++ linux/Documentation/cdrom/cdrom-standard.tex Sun Mar 21 18:37:56 1999
@@ -25,7 +25,7 @@
X \author{David van Leeuwen\\{\normalsize\tt da...@ElseWare.cistron.nl}
X \\{\footnotesize updated by Erik Andersen {\tt(ande...@debian.org)}}
X \\{\footnotesize updated by Jens Axboe {\tt(ax...@image.dk)}}}
-\date{11 January 1999}
+\date{12 March 1999}
X
X \maketitle
X
@@ -549,7 +549,9 @@
X CDROMREADAUDIO, CDROMREADRAW, CDROMREADCOOKED, CDROMSEEK,
X CDROMPLAY\-BLK and CDROM\-READALL}.
X
+
X \subsection{\cdrom\ capabilities}
+\label{capability}
X
X Instead of just implementing some $ioctl$ calls, the interface in
X \cdromc\ supplies the possibility to indicate the {\em capabilities\/}
@@ -944,6 +946,13 @@
X \item[CDROM_CHANGER_NSLOTS] Returns the number of slots in a
X juke-box.
X \item[CDROMRESET] Reset the drive.
+\item[CDROM_GET_CAPABILITY] Returns the $capability$ flags for the
+ drive. Refer to section \ref{capability} for more information on
+ these flags.
+\item[CDROM_LOCKDOOR] Locks the door of the drive. $arg == \rm0$
+ unlocks the door, any other value locks it.
+\item[CDROM_DEBUG] Turns on debugging info. Only root is allowed
+ to do this. Same semantics as CDROM_LOCKDOOR.
X \end{description}
X
X \subsubsection{Device dependent $ioctl$s}
diff -u --recursive --new-file v2.2.3/linux/Documentation/filesystems/affs.txt linux/Documentation/filesystems/affs.txt
--- v2.2.3/linux/Documentation/filesystems/affs.txt Wed Jun 24 22:54:01 1998
+++ linux/Documentation/filesystems/affs.txt Sun Mar 21 07:11:36 1999
@@ -151,6 +151,28 @@
X /etc/fstab entry:
X /dev/sdb5 /amiga/Workbench affs noauto,user,exec,verbose 0 0
X
+IMPORTANT NOTE
+==============
+
+If you boot Windows 95 (don't know about 3.x, 98 and NT) while you
+have an Amiga harddisk connected to your PC, it will overwrite
+the bytes 0x00dc..0x00df of block 0 with garbage, thus invalidating
+the Rigid Disk Block. Sheer luck has it that this is an unused
+area of the RDB, so only the checksum doesn's match anymore.
+Linux will ignore this garbage and recognize the RDB anyway, but
+before you connect that drive to your Amiga again, you must
+restore or repair your RDB. So please do make a backup copy of it
+before booting Windows!
+
+If the damage is already done, the following should fix the RDB
+(where <disk> is the device name).
+DO AT YOUR OWN RISK:
+
+ dd if=/dev/<disk> of=rdb.tmp count=1
+ cp rdb.tmp rdb.fixed
+ dd if=/dev/zero of=rdb.fixed bs=1 seek=220 count=4
+ dd if=rdb.fixed of=/dev/<disk>
+
X Bugs, Restrictions, Caveats
X ===========================
X
@@ -185,9 +207,8 @@
X no way to fix a garbled filesystem without an Amiga (disk validator)
X or manually (who would do this?). Maybe later.
X
-A fsck.affs and mkfs.affs will probably be available in the future.
-If you mount them on system startup, you may want to tell fsck
-that the fs should not be checked (place a '0' in the sixth field
+If you mount affs partitions on system startup, you may want to tell
+fsck that the fs should not be checked (place a '0' in the sixth field
X of /etc/fstab).
X
X It's not possible to read floppy disks with a normal PC or workstation
diff -u --recursive --new-file v2.2.3/linux/Documentation/powerpc/ppc_htab.txt linux/Documentation/powerpc/ppc_htab.txt
--- v2.2.3/linux/Documentation/powerpc/ppc_htab.txt Thu Apr 23 20:21:27 1998
+++ linux/Documentation/powerpc/ppc_htab.txt Wed Mar 10 21:49:10 1999
@@ -114,10 +114,5 @@
X
X 3. Bugs
X
- Doing a 'less' or 'more' on ppc_htab results in a segmentation violation.
- I'm not sure of the cause but in the mean time 'cat' works adequately for
- reading the file.
-
X The PMC1 and PMC2 counters can overflow and give no indication of that
X in /proc/ppc_htab.
-
diff -u --recursive --new-file v2.2.3/linux/MAINTAINERS linux/MAINTAINERS
--- v2.2.3/linux/MAINTAINERS Wed Mar 10 15:29:44 1999
+++ linux/MAINTAINERS Mon Mar 22 11:18:17 1999
@@ -229,8 +229,8 @@
X DIGI INTL. EPCA DRIVER
X P: Daniel Taylor
X M: sup...@dgii.com
-M: digi...@dgii.com
-L: digi...@list.fuller.edu
+M: dan...@dgii.com
+L: digi...@dgii.com
X S: Maintained
X
X DIGI RIGHTSWITCH NETWORK DRIVER
@@ -685,7 +685,7 @@
X
X SPARC:
X P: David S. Miller
-M: da...@dm.cobaltmicro.com
+M: da...@redhat.com
X P: Eddie C. Dost
X M: e...@skynet.be
X P: Jakub Jelinek
@@ -719,10 +719,8 @@
X S: Supported
X
X STARMODE RADIO IP (STRIP) PROTOCOL DRIVER
-P: Stuart Cheshire
-M: ches...@cs.stanford.edu
X W: http://mosquitonet.Stanford.EDU/strip.html
-S: Maintained
+S: Unsupported ?
X
X SVGA HANDLING
X P: Martin Mares
@@ -819,4 +817,4 @@
X
X THE REST
X P: Linus Torvalds
-S: Buried alive in diapers
+S: Buried alive in reporters
diff -u --recursive --new-file v2.2.3/linux/Makefile linux/Makefile
--- v2.2.3/linux/Makefile Wed Mar 10 15:29:44 1999
+++ linux/Makefile Fri Mar 12 16:22:27 1999
@@ -1,6 +1,6 @@
X VERSION = 2
X PATCHLEVEL = 2
-SUBLEVEL = 3
+SUBLEVEL = 4
X EXTRAVERSION =
X
X ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
diff -u --recursive --new-file v2.2.3/linux/arch/alpha/kernel/osf_sys.c linux/arch/alpha/kernel/osf_sys.c
--- v2.2.3/linux/arch/alpha/kernel/osf_sys.c Tue Feb 23 15:21:32 1999
+++ linux/arch/alpha/kernel/osf_sys.c Sun Mar 21 20:53:46 1999
@@ -37,6 +37,7 @@
X #include <asm/uaccess.h>
X #include <asm/system.h>
X #include <asm/sysinfo.h>
+#include <asm/hwrpb.h>
X
X extern int do_mount(kdev_t, const char *, const char *, char *, int, void *);
X extern int do_pipe(int *);
@@ -762,14 +763,10 @@
X asmlinkage int osf_sigstack(struct sigstack *uss, struct sigstack *uoss)
X {
X unsigned long usp = rdusp();
- unsigned long oss_sp, oss_os;
+ unsigned long oss_sp = current->sas_ss_sp + current->sas_ss_size;
+ unsigned long oss_os = on_sig_stack(usp);
X int error;
X
- if (uoss) {
- oss_sp = current->sas_ss_sp + current->sas_ss_size;
- oss_os = on_sig_stack(usp);
- }
-
X if (uss) {
X void *ss_sp;
X
@@ -880,10 +877,12 @@
X int *start, void *arg)
X {
X unsigned long w;
+ struct percpu_struct *cpu;
X
X switch (op) {
X case GSI_IEEE_FP_CONTROL:
X /* Return current software fp control & status bits. */
+ /* Note that DU doesn't verify available space here. */
X w = current->tss.flags & IEEE_SW_MASK;
X if (put_user(w, (unsigned long *) buffer))
X return -EFAULT;
@@ -898,10 +897,28 @@
X break;
X
X case GSI_UACPROC:
+ if (nbytes < sizeof(unsigned int))
+ return -EINVAL;
X w = (current->tss.flags >> UAC_SHIFT) & UAC_BITMASK;
X if (put_user(w, (unsigned int *)buffer))
X return -EFAULT;
- return 0;
+ return 1;
+
+ case GSI_PROC_TYPE:
+ if (nbytes < sizeof(unsigned long))
+ return -EINVAL;
+ cpu = (struct percpu_struct*)
+ ((char*)hwrpb + hwrpb->processor_offset);
+ if (put_user(w, (unsigned long *)buffer))
+ return -EFAULT;
+ return 1;
+
+ case GSI_GET_HWRPB:
+ if (nbytes < sizeof(*hwrpb))
+ return -EINVAL;
+ if (copy_to_user(buffer, hwrpb, nbytes) != 0)
+ return -EFAULT;
+ return 1;
X
X default:
X break;
diff -u --recursive --new-file v2.2.3/linux/arch/alpha/kernel/time.c linux/arch/alpha/kernel/time.c
--- v2.2.3/linux/arch/alpha/kernel/time.c Wed Jan 20 23:14:04 1999
+++ linux/arch/alpha/kernel/time.c Thu Mar 11 23:24:50 1999
@@ -357,7 +357,6 @@
X xtime = *tv;
X time_adjust = 0; /* stop active adjtime() */
X time_status |= STA_UNSYNC;
- time_state = TIME_ERROR; /* p. 24, (a) */
X time_maxerror = NTP_PHASE_LIMIT;
X time_esterror = NTP_PHASE_LIMIT;
X sti();
diff -u --recursive --new-file v2.2.3/linux/arch/arm/kernel/time.c linux/arch/arm/kernel/time.c
--- v2.2.3/linux/arch/arm/kernel/time.c Wed Jan 20 23:14:04 1999
+++ linux/arch/arm/kernel/time.c Thu Mar 11 23:24:55 1999
@@ -127,7 +127,6 @@
X xtime = *tv;
X time_adjust = 0; /* stop active adjtime() */
X time_status |= STA_UNSYNC;
- time_state = TIME_ERROR; /* p. 24, (a) */
X time_maxerror = NTP_PHASE_LIMIT;
X time_esterror = NTP_PHASE_LIMIT;
X sti ();
diff -u --recursive --new-file v2.2.3/linux/arch/i386/kernel/bios32.c linux/arch/i386/kernel/bios32.c
--- v2.2.3/linux/arch/i386/kernel/bios32.c Wed Mar 10 15:29:45 1999
+++ linux/arch/i386/kernel/bios32.c Sun Mar 21 07:24:54 1999
@@ -997,15 +997,15 @@
X l != 0x0000 && l != 0xffff) {
X #ifdef CONFIG_PCI_BIOS
X if (pci_bios_present) {
- int succ, idx = 0;
+ int err, idx = 0;
X u8 bios_bus, bios_dfn;
X u16 d;
X pcibios_read_config_word(n, i, PCI_DEVICE_ID, &d);
X DBG("BIOS test for %02x:%02x (%04x:%04x)\n", n, i, l, d);
- while ((succ = pci_bios_find_device(l, d, idx, &bios_bus, &bios_dfn)) &&
+ while (!(err = pci_bios_find_device(l, d, idx, &bios_bus, &bios_dfn)) &&
X (bios_bus != n || bios_dfn != i))
X idx++;
- if (!succ)
+ if (err)
X break;
X }
X #endif
diff -u --recursive --new-file v2.2.3/linux/arch/i386/kernel/i386_ksyms.c linux/arch/i386/kernel/i386_ksyms.c
--- v2.2.3/linux/arch/i386/kernel/i386_ksyms.c Tue Feb 23 15:21:32 1999
+++ linux/arch/i386/kernel/i386_ksyms.c Wed Mar 10 15:07:19 1999
@@ -75,8 +75,11 @@
X EXPORT_SYMBOL(cpu_data);
X EXPORT_SYMBOL(kernel_flag);
X EXPORT_SYMBOL(smp_invalidate_needed);
+EXPORT_SYMBOL(cpu_number_map);
X EXPORT_SYMBOL(__cpu_logical_map);
X EXPORT_SYMBOL(smp_num_cpus);
+EXPORT_SYMBOL(cpu_present_map);
+EXPORT_SYMBOL(cpu_online_map);
X
X /* Global SMP irq stuff */
X EXPORT_SYMBOL(synchronize_irq);
diff -u --recursive --new-file v2.2.3/linux/arch/i386/kernel/process.c linux/arch/i386/kernel/process.c
--- v2.2.3/linux/arch/i386/kernel/process.c Wed Jan 20 23:14:04 1999
+++ linux/arch/i386/kernel/process.c Wed Mar 10 16:52:44 1999
@@ -316,7 +316,7 @@
X /* Make sure the first page is mapped to the start of physical memory.
X It is normally not mapped, to trap kernel NULL pointer dereferences. */
X
- pg0[0] = 7;
+ pg0[0] = _PAGE_RW | _PAGE_PRESENT;
X
X /*
X * Use `swapper_pg_dir' as our page directory. We bother with
diff -u --recursive --new-file v2.2.3/linux/arch/i386/kernel/ptrace.c linux/arch/i386/kernel/ptrace.c
--- v2.2.3/linux/arch/i386/kernel/ptrace.c Wed Jan 13 15:00:41 1999
+++ linux/arch/i386/kernel/ptrace.c Wed Mar 10 16:51:34 1999
@@ -354,6 +354,7 @@
X {
X struct task_struct *child;
X struct user * dummy = NULL;
+ unsigned long flags;
X int i, ret;
X
X lock_kernel();
@@ -385,21 +386,22 @@
X (current->uid != child->uid) ||
X (current->gid != child->egid) ||
X (current->gid != child->sgid) ||
+ (cap_issubset(child->cap_permitted, current->cap_permitted)) ||
X (current->gid != child->gid)) && !capable(CAP_SYS_PTRACE))
X goto out;
X /* the same process cannot be attached many times */
X if (child->flags & PF_PTRACED)
X goto out;
X child->flags |= PF_PTRACED;
- if (child->p_pptr != current) {
- unsigned long flags;
X
- write_lock_irqsave(&tasklist_lock, flags);
+ write_lock_irqsave(&tasklist_lock, flags);
+ if (child->p_pptr != current) {
X REMOVE_LINKS(child);
X child->p_pptr = current;
X SET_LINKS(child);
- write_unlock_irqrestore(&tasklist_lock, flags);
X }
+ write_unlock_irqrestore(&tasklist_lock, flags);
+
X send_sig(SIGSTOP, child, 1);
X ret = 0;
X goto out;
@@ -559,7 +561,6 @@
X }
X
X case PTRACE_DETACH: { /* detach a process that was attached. */
- unsigned long flags;
X long tmp;
X
X ret = -EIO;
diff -u --recursive --new-file v2.2.3/linux/arch/i386/kernel/setup.c linux/arch/i386/kernel/setup.c
--- v2.2.3/linux/arch/i386/kernel/setup.c Tue Feb 23 15:21:32 1999
+++ linux/arch/i386/kernel/setup.c Mon Mar 22 11:18:17 1999
@@ -381,7 +381,17 @@
X
X }
X
-__initfunc(static int amd_model(struct cpuinfo_x86 *c))
+#define rdmsr(msr,val1,val2) \
+ __asm__ __volatile__("rdmsr" \
+ : "=a" (val1), "=d" (val2) \
+ : "c" (msr))
+
+#define wrmsr(msr,val1,val2) \
+ __asm__ __volatile__("wrmsr" \
+ : /* no outputs */ \
+ : "c" (msr), "a" (val1), "d" (val2))
+
+__initfunc(static int get_model_name(struct cpuinfo_x86 *c))
X {
X unsigned int n, dummy, *v;
X
@@ -401,6 +411,76 @@
X return 1;
X }
X
+__initfunc(static int amd_model(struct cpuinfo_x86 *c))
+{
+ u32 l, h;
+ unsigned long flags;
+ int mbytes = max_mapnr >> (20-PAGE_SHIFT);
+
+ int r=get_model_name(c);
+
+ /*
+ * Now do the cache operations.
+ */
+
+ switch(c->x86)
+ {
+ case 5:
+ if( c->x86_model < 6 )
+ {
+ /* Anyone with a K5 want to fill this in */
+ break;
+ }
+
+ /* K6 with old style WHCR */
+ if( c->x86_model < 8 ||
+ (c->x86_model== 8 && c->x86_mask < 8))
+ {
+ /* We can only write allocate on the low 508Mb */
+ if(mbytes>508)
+ mbytes=508;
+
+ rdmsr(0xC0000082, l, h);
+ if((l&0x0000FFFF)==0)
+ {
+ l=(1<<0)|(mbytes/4);
+ save_flags(flags);
+ __cli();
+ __asm__ __volatile__ ("wbinvd": : :"memory");
+ wrmsr(0xC0000082, l, h);
+ restore_flags(flags);
+ printk(KERN_INFO "Enabling old style K6 write allocation for %d Mb\n",
+ mbytes);
+
+ }
+ break;
+ }
+ if (c->x86_model == 8 || c->x86_model == 9)
+ {
+ /* The more serious chips .. */
+
+ if(mbytes>4092)
+ mbytes=4092;
+ rdmsr(0xC0000082, l, h);
+ if((l&0xFFFF0000)==0)
+ {
+ l=((mbytes>>2)<<22)|(1<<16);
+ save_flags(flags);
+ __cli();
+ __asm__ __volatile__ ("wbinvd": : :"memory");
+ wrmsr(0xC0000082, l, h);
+ restore_flags(flags);
+ printk(KERN_INFO "Enabling new style K6 write allocation for %d Mb\n",
+ mbytes);
+ }
+ break;
+ }
+ break;
+ }
+ return r;
+}
+
+
X /*
X * Read Cyrix DEVID registers (DIR) to get more detailed info. about the CPU
X */
@@ -517,7 +597,7 @@
X
X /* GXm supports extended cpuid levels 'ala' AMD */
X if (c->cpuid_level == 2) {
- amd_model(c); /* get CPU marketing name */
+ get_model_name(c); /* get CPU marketing name */
X c->x86_capability&=~X86_FEATURE_TSC;
X return;
X }
@@ -642,6 +722,20 @@
X
X if (c->x86_vendor == X86_VENDOR_AMD && amd_model(c))
X return;
+
+ if (c->cpuid_level > 0 && c->x86_vendor == X86_VENDOR_INTEL)
+ {
+ if(c->x86_capability&(1<<18))
+ {
+ /* Disable processor serial number on Intel Pentium III
+ from code by Phil Karn */
+ unsigned long lo,hi;
+ rdmsr(0x119,lo,hi);
+ lo |= 0x200000;
+ wrmsr(0x119,lo,hi);
+ printk(KERN_INFO "Pentium-III serial number disabled.\n");
+ }
+ }
X
X for (i = 0; i < sizeof(cpu_models)/sizeof(struct cpu_model_info); i++) {
X if (c->cpuid_level > 1) {
@@ -726,15 +820,6 @@
X }
X
X
-#define rdmsr(msr,val1,val2) \
- __asm__ __volatile__("rdmsr" \
- : "=a" (val1), "=d" (val2) \
- : "c" (msr))
-
-#define wrmsr(msr,val1,val2) \
- __asm__ __volatile__("wrmsr" \
- : /* no outputs */ \
- : "c" (msr), "a" (val1), "d" (val2))
X
X static char *cpu_vendor_names[] __initdata = {
X "Intel", "Cyrix", "AMD", "UMC", "NexGen", "Centaur" };
@@ -785,8 +870,8 @@
X static char *x86_cap_flags[] = {
X "fpu", "vme", "de", "pse", "tsc", "msr", "6", "mce",
X "cx8", "9", "10", "sep", "12", "pge", "14", "cmov",
- "16", "17", "18", "19", "20", "21", "22", "mmx",
- "24", "25", "26", "27", "28", "29", "30", "31"
+ "16", "17", "psn", "19", "20", "21", "22", "mmx",
+ "24", "kni", "26", "27", "28", "29", "30", "31"
X };
X struct cpuinfo_x86 *c = cpu_data;
X int i, n;
@@ -836,6 +921,7 @@
X x86_cap_flags[14] = "mca";
X x86_cap_flags[16] = "pat";
X x86_cap_flags[17] = "pse36";
+ x86_cap_flags[18] = "psn";
X x86_cap_flags[24] = "osfxsr";
X }
X
diff -u --recursive --new-file v2.2.3/linux/arch/i386/kernel/smp.c linux/arch/i386/kernel/smp.c
--- v2.2.3/linux/arch/i386/kernel/smp.c Tue Feb 23 15:21:32 1999
+++ linux/arch/i386/kernel/smp.c Mon Mar 15 11:09:47 1999
@@ -474,7 +474,7 @@
X */
X
X cfg=pg0[0];
- pg0[0] = (mp_lapic_addr | 7);
+ pg0[0] = (mp_lapic_addr | _PAGE_RW | _PAGE_PRESENT);
X local_flush_tlb();
X
X boot_cpu_id = GET_APIC_ID(*((volatile unsigned long *) APIC_ID));
@@ -1329,7 +1329,7 @@
X * Install writable page 0 entry.
X */
X cfg = pg0[0];
- pg0[0] = 3; /* writeable, present, addr 0 */
+ pg0[0] = _PAGE_RW | _PAGE_PRESENT; /* writeable, present, addr 0 */
X local_flush_tlb();
X
X /*
diff -u --recursive --new-file v2.2.3/linux/arch/i386/kernel/time.c linux/arch/i386/kernel/time.c
--- v2.2.3/linux/arch/i386/kernel/time.c Wed Mar 10 15:29:45 1999
+++ linux/arch/i386/kernel/time.c Thu Mar 11 23:25:05 1999
@@ -279,7 +279,6 @@
X xtime = *tv;
X time_adjust = 0; /* stop active adjtime() */
X time_status |= STA_UNSYNC;
- time_state = TIME_ERROR; /* p. 24, (a) */
X time_maxerror = NTP_PHASE_LIMIT;
X time_esterror = NTP_PHASE_LIMIT;
X write_unlock_irq(&xtime_lock);
diff -u --recursive --new-file v2.2.3/linux/arch/m68k/kernel/time.c linux/arch/m68k/kernel/time.c
--- v2.2.3/linux/arch/m68k/kernel/time.c Wed Jan 20 23:14:04 1999
+++ linux/arch/m68k/kernel/time.c Thu Mar 11 23:25:10 1999
@@ -198,7 +198,6 @@
X xtime = *tv;
X time_adjust = 0; /* stop active adjtime() */
X time_status |= STA_UNSYNC;
- time_state = TIME_ERROR; /* p. 24, (a) */
X time_maxerror = NTP_PHASE_LIMIT;
X time_esterror = NTP_PHASE_LIMIT;
X sti();
diff -u --recursive --new-file v2.2.3/linux/arch/mips/kernel/sysirix.c linux/arch/mips/kernel/sysirix.c
--- v2.2.3/linux/arch/mips/kernel/sysirix.c Sun Nov 8 14:02:43 1998
+++ linux/arch/mips/kernel/sysirix.c Thu Mar 11 23:25:14 1999
@@ -627,7 +627,6 @@
X cli();
X xtime.tv_sec = value;
X xtime.tv_usec = 0;
- time_state = TIME_ERROR;
X time_maxerror = MAXPHASE;
X time_esterror = MAXPHASE;
X sti();
diff -u --recursive --new-file v2.2.3/linux/arch/mips/kernel/time.c linux/arch/mips/kernel/time.c
--- v2.2.3/linux/arch/mips/kernel/time.c Wed Jan 20 23:14:04 1999
+++ linux/arch/mips/kernel/time.c Thu Mar 11 23:25:19 1999
@@ -260,7 +260,6 @@
X xtime = *tv;
X time_adjust = 0; /* stop active adjtime() */
X time_status |= STA_UNSYNC;
- time_state = TIME_ERROR; /* p. 24, (a) */
X time_maxerror = NTP_PHASE_LIMIT;
X time_esterror = NTP_PHASE_LIMIT;
X sti();
diff -u --recursive --new-file v2.2.3/linux/arch/mips/sgi/kernel/indy_timer.c linux/arch/mips/sgi/kernel/indy_timer.c
--- v2.2.3/linux/arch/mips/sgi/kernel/indy_timer.c Fri Oct 23 22:01:20 1998
+++ linux/arch/mips/sgi/kernel/indy_timer.c Thu Mar 11 23:25:24 1999
@@ -104,9 +104,10 @@
X * absolutely sure we do this update within 500ms before the
X * next second starts, thus the following code.
X */
- if (time_state != TIME_BAD && xtime.tv_sec > last_rtc_update + 660 &&
- xtime.tv_usec > 500000 - (tick >> 1) &&
- xtime.tv_usec < 500000 + (tick >> 1))
+ if ((time_status & STA_UNSYNC) == 0 &&
+ xtime.tv_sec > last_rtc_update + 660 &&
+ xtime.tv_usec >= 500000 - (tick >> 1) &&
+ xtime.tv_usec <= 500000 + (tick >> 1))
X if (set_rtc_mmss(xtime.tv_sec) == 0)
X last_rtc_update = xtime.tv_sec;
X else
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/8xx_io/commproc.c linux/arch/ppc/8xx_io/commproc.c
--- v2.2.3/linux/arch/ppc/8xx_io/commproc.c Mon Oct 5 13:13:35 1998
+++ linux/arch/ppc/8xx_io/commproc.c Fri Mar 19 10:50:03 1999
@@ -111,7 +111,12 @@
X */
X ((immap_t *)IMAP_ADDR)->im_cpic.cpic_cicr =
X (CICR_SCD_SCC4 | CICR_SCC_SCC3 | CICR_SCB_SCC2 | CICR_SCA_SCC1) |
- ((CPM_INTERRUPT/2) << 13) | CICR_HP_MASK;
+ (((5)/2) << 13) | CICR_HP_MASK;
+ /* I hard coded the CPM interrupt to 5 above
+ * since the CPM_INTERRUPT define is relative to
+ * the linux irq structure not what the hardware
+ * belives. -- Cort
+ */
X ((immap_t *)IMAP_ADDR)->im_cpic.cpic_cimr = 0;
X /* Set our interrupt handler with the core CPU.
X */
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/8xx_io/enet.c linux/arch/ppc/8xx_io/enet.c
--- v2.2.3/linux/arch/ppc/8xx_io/enet.c Tue Dec 22 14:16:54 1998
+++ linux/arch/ppc/8xx_io/enet.c Fri Mar 19 10:50:03 1999
@@ -1,5 +1,4 @@
X /*
- * $Id: enet.c,v 1.8 1998/11/15 19:58:07 cort Exp $
X * Ethernet driver for Motorola MPC8xx.
X * Copyright (c) 1997 Dan Malek (dma...@jlc.net)
X *
@@ -39,7 +38,7 @@
X
X #include <asm/8xx_immap.h>
X #include <asm/pgtable.h>
-#include <asm/mbx.h>
+#include <asm/fads.h>
X #include <asm/bitops.h>
X #include <asm/uaccess.h>
X #include "commproc.h"
@@ -49,7 +48,7 @@
X *
X * The MPC8xx CPM performs the Ethernet processing on SCC1. It can use
X * an aribtrary number of buffers on byte boundaries, but must have at
- * least two receive buffers to prevent constand overrun conditions.
+ * least two receive buffers to prevent constant overrun conditions.
X *
X * The buffer descriptors are allocated from the CPM dual port memory
X * with the data buffers allocated from host memory, just like all other
@@ -94,6 +93,17 @@
X * Port C, 15 - SCC1 Ethernet Tx Enable
X * Port C, 11 - SCC1 Ethernet Collision
X * Port C, 10 - SCC1 Ethernet Rx Enable
+ *
+ * The RPX-Lite (that I had :-), was the MPC850SAR. It has a control
+ * register to enable Ethernet functions in the 68160, and the Ethernet
+ * was controlled by SCC2. So, the pin I/O was like this:
+ * Port A, 13 - SCC2 Ethernet Rx
+ * Port A, 12 - SCC2 Ethernet Tx
+ * Port A, 6 (CLK2) - Ethernet Tx Clk
+ * Port A, 4 (CLK4) - Ethernet Rx Clk
+ * Port B, 18 (RTS2) - Ethernet Tx Enable
+ * Port C, 8 (CD2) - Ethernet Rx Enable
+ * Port C, 9 (CTS2) - SCC Ethernet Collision
X */
X
X /* The number of Tx and Rx buffers. These are allocated from the page
@@ -149,10 +159,26 @@
X static struct net_device_stats *cpm_enet_get_stats(struct device *dev);
X static void set_multicast_list(struct device *dev);
X
-/* GET THIS FROM THE VPD!!!!
+/* Get this from various configuration locations (depends on board).
X */
X /*static ushort my_enet_addr[] = { 0x0800, 0x3e26, 0x1559 };*/
X
+/* Right now, only the boards with an 860 use SCC1 for the Ethernet.
+ * All others use SCC2. We may need to make this board specific someday.
+ */
+#ifndef CONFIG_MPC860
+/*static ushort my_enet_addr[] = { 0x2700, 0x00ec, 0x1000 };*/
+#define CPM_CR_ENET CPM_CR_CH_SCC2
+#define PROFF_ENET PROFF_SCC2
+#define SCC_ENET 1 /* Index, not number! */
+#define CPMVEC_ENET CPMVEC_SCC2
+#else
+#define CPM_CR_ENET CPM_CR_CH_SCC1
+#define PROFF_ENET PROFF_SCC1
+#define SCC_ENET 0
+#define CPMVEC_ENET CPMVEC_SCC1
+#endif
+
X static int
X cpm_enet_open(struct device *dev)
X {
@@ -178,7 +204,7 @@
X /* Transmitter timeout, serious problems. */
X if (dev->tbusy) {
X int tickssofar = jiffies - dev->trans_start;
- if (tickssofar < 20)
+ if (tickssofar < 200)
X return 1;
X printk("%s: transmit timed out.\n", dev->name);
X cep->stats.tx_errors++;
@@ -186,17 +212,17 @@
X {
X int i;
X cbd_t *bdp;
- printk(" Ring data dump: cur_tx %x%s cur_rx %x.\n",
+ printk(" Ring data dump: cur_tx %p%s cur_rx %p.\n",
X cep->cur_tx, cep->tx_full ? " (full)" : "",
X cep->cur_rx);
X bdp = cep->tx_bd_base;
- for (i = 0 ; i < TX_RING_SIZE; i++)
+ for (i = 0 ; i < TX_RING_SIZE; i++, bdp++)
X printk("%04x %04x %08x\n",
X bdp->cbd_sc,
X bdp->cbd_datlen,
X bdp->cbd_bufaddr);
X bdp = cep->rx_bd_base;
- for (i = 0 ; i < RX_RING_SIZE; i++)
+ for (i = 0 ; i < RX_RING_SIZE; i++, bdp++)
X printk("%04x %04x %08x\n",
X bdp->cbd_sc,
X bdp->cbd_datlen,
@@ -263,7 +289,7 @@
X /* Push the data cache so the CPM does not get stale memory
X * data.
X */
- /*flush_dcache_range(skb->data, skb->data + skb->len);*/
+ flush_dcache_range(skb->data, skb->data + skb->len);
X
X /* Send it on its way. Tell CPM its ready, interrupt when done,
X * its the last BD of the frame, and to put the CRC on the end.
@@ -300,7 +326,7 @@
X cpm_enet_interrupt(void *dev_id)
X {
X struct device *dev = dev_id;
- struct cpm_enet_private *cep;
+ volatile struct cpm_enet_private *cep;
X volatile cbd_t *bdp;
X ushort int_events;
X int must_restart;
@@ -314,6 +340,7 @@
X /* Get the interrupt events that caused us to be here.
X */
X int_events = cep->sccp->scc_scce;
+ cep->sccp->scc_scce = int_events;
X must_restart = 0;
X
X /* Handle receive event in its own function.
@@ -329,6 +356,7 @@
X * I don't know if "normally" implies TXB is set when the buffer
X * descriptor is closed.....trial and error :-).
X */
+#if 0
X if (int_events & SCCE_ENET_TXE) {
X
X /* Transmission errors.
@@ -359,16 +387,46 @@
X (BD_ENET_TX_LC | BD_ENET_TX_RL | BD_ENET_TX_UN))
X must_restart = 1;
X }
+#endif
X
X /* Transmit OK, or non-fatal error. Update the buffer descriptors.
X */
X if (int_events & (SCCE_ENET_TXE | SCCE_ENET_TXB)) {
+#if 1
+ bdp = cep->dirty_tx;
+ while ((bdp->cbd_sc&BD_ENET_TX_READY)==0) {
+ if ((bdp==cep->cur_tx) && (cep->tx_full == 0))
+ break;
+
+ if (bdp->cbd_sc & BD_ENET_TX_HB) /* No heartbeat */
+ cep->stats.tx_heartbeat_errors++;
+ if (bdp->cbd_sc & BD_ENET_TX_LC) /* Late collision */
+ cep->stats.tx_window_errors++;
+ if (bdp->cbd_sc & BD_ENET_TX_RL) /* Retrans limit */
+ cep->stats.tx_aborted_errors++;
+ if (bdp->cbd_sc & BD_ENET_TX_UN) /* Underrun */
+ cep->stats.tx_fifo_errors++;
+ if (bdp->cbd_sc & BD_ENET_TX_CSL) /* Carrier lost */
+ cep->stats.tx_carrier_errors++;
+
+
+ /* No heartbeat or Lost carrier are not really bad errors.
+ * The others require a restart transmit command.
+ */
+ if (bdp->cbd_sc &
+ (BD_ENET_TX_LC | BD_ENET_TX_RL | BD_ENET_TX_UN)) {
+ must_restart = 1;
+ cep->stats.tx_errors++;
+ }
+
X cep->stats.tx_packets++;
+#else
X bdp = cep->dirty_tx;
-#ifndef final_version
+#if 1
X if (bdp->cbd_sc & BD_ENET_TX_READY)
X printk("HEY! Enet xmit interrupt and TX_READY.\n");
X #endif
+#endif
X /* Deferred means some collisions occurred during transmit,
X * but we eventually sent the packet OK.
X */
@@ -406,9 +464,9 @@
X }
X
X cep->dirty_tx = (cbd_t *)bdp;
- }
+ }
X
- if (must_restart) {
+ if (must_restart) {
X volatile cpm8xx_t *cp;
X
X /* Some transmit errors cause the transmitter to shut
@@ -419,8 +477,9 @@
X */
X cp = cpmp;
X cp->cp_cpcr =
- mk_cr_cmd(CPM_CR_CH_SCC1, CPM_CR_RESTART_TX) | CPM_CR_FLG;
+ mk_cr_cmd(CPM_CR_ENET, CPM_CR_RESTART_TX) | CPM_CR_FLG;
X while (cp->cp_cpcr & CPM_CR_FLG);
+ }
X }
X
X /* Check for receive busy, i.e. packets coming but no place to
@@ -432,11 +491,6 @@
X printk("CPM ENET: BSY can't happen.\n");
X }
X
- /* Write the SCC event register with the events we have handled
- * to clear them. Maybe we should do this sooner?
- */
- cep->sccp->scc_scce = int_events;
-
X dev->interrupt = 0;
X
X return;
@@ -576,7 +630,7 @@
X int i, j;
X cep = (struct cpm_enet_private *)dev->priv;
X
- /* Get pointer to SCC1 area in parameter RAM.
+ /* Get pointer to SCC area in parameter RAM.
X */
X ep = (scc_enet_t *)dev->base_addr;
X
@@ -627,7 +681,7 @@
X /* Ask CPM to run CRC and set bit in
X * filter mask.
X */
- cpmp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_SCC1, CPM_CR_SET_GADDR) | CPM_CR_FLG;
+ cpmp->cp_cpcr = mk_cr_cmd(CPM_CR_ENET, CPM_CR_SET_GADDR) | CPM_CR_FLG;
X /* this delay is necessary here -- Cort */
X udelay(10);
X while (cpmp->cp_cpcr & CPM_CR_FLG);
@@ -636,13 +690,15 @@
X }
X }
X
-/* Initialize the CPM Ethernet on SCC1. If EPPC-Bug loaded us, or performed
+/* Initialize the CPM Ethernet on SCC. If EPPC-Bug loaded us, or performed
X * some other network I/O, a whole bunch of this has already been set up.
X * It is no big deal if we do it again, we just have to disable the
X * transmit and receive to make sure we don't catch the CPM with some
X * inconsistent control information.
X */
-__initfunc(int cpm_enet_init(void))
+/* until this gets cleared up -- Cort */
+int __init cpm_enet_init() { m8xx_enet_init(); }
+int __init m8xx_enet_init(void)
X {
X struct device *dev;
X struct cpm_enet_private *cep;
@@ -650,6 +706,7 @@
X unsigned char *eap;
X unsigned long mem_addr;
X pte_t *pte;
+ bd_t *bd;
X volatile cbd_t *bdp;
X volatile cpm8xx_t *cp;
X volatile scc_t *sccp;
@@ -660,6 +717,8 @@
X
X immap = (immap_t *)IMAP_ADDR; /* and to internal registers */
X
+ bd = (bd_t *)res;
+
X /* Allocate some private information.
X */
X cep = (struct cpm_enet_private *)kmalloc(sizeof(*cep), GFP_KERNEL);
@@ -670,13 +729,13 @@
X */
X dev = init_etherdev(0, 0);
X
- /* Get pointer to SCC1 area in parameter RAM.
+ /* Get pointer to SCC area in parameter RAM.
X */
- ep = (scc_enet_t *)(&cp->cp_dparam[PROFF_SCC1]);
+ ep = (scc_enet_t *)(&cp->cp_dparam[PROFF_ENET]);
X
X /* And another to the SCC register area.
X */
- sccp = (volatile scc_t *)(&cp->cp_scc[0]);
+ sccp = (volatile scc_t *)(&cp->cp_scc[SCC_ENET]);
X cep->sccp = (scc_t *)sccp; /* Keep the pointer handy */
X
X /* Disable receive and transmit in case EPPC-Bug started it.
@@ -686,6 +745,9 @@
X /* Cookbook style from the MPC860 manual.....
X * Not all of this is necessary if EPPC-Bug has initialized
X * the network.
+ * So far we are lucky, all board configurations use the same
+ * pins, or at least the same I/O Port for these functions.....
+ * It can't last though......
X */
X
X /* Configure port A pins for Txd and Rxd.
@@ -706,7 +768,7 @@
X immap->im_ioport.iop_padir &= ~(PA_ENET_TCLK | PA_ENET_RCLK);
X
X /* Configure Serial Interface clock routing.
- * First, clear all SCC1 bits to zero, then set the ones we want.
+ * First, clear all SCC bits to zero, then set the ones we want.
X */
X cp->cp_sicr &= ~SICR_ENET_MASK;
X cp->cp_sicr |= SICR_ENET_CLKRT;
@@ -731,13 +793,13 @@
X cep->dirty_tx = cep->cur_tx = cep->tx_bd_base;
X cep->cur_rx = cep->rx_bd_base;
X
- /* Issue init Rx BD command for SCC1.
+ /* Issue init Rx BD command for SCC.
X * Manual says to perform an Init Rx parameters here. We have
X * to perform both Rx and Tx because the SCC may have been
X * already running.
X * In addition, we have to do it later because we don't yet have
X * all of the BD control/status set properly.
- cp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_SCC1, CPM_CR_INIT_RX) | CPM_CR_FLG;
+ cp->cp_cpcr = mk_cr_cmd(CPM_CR_ENET, CPM_CR_INIT_RX) | CPM_CR_FLG;
X while (cp->cp_cpcr & CPM_CR_FLG);
X */
X
@@ -781,20 +843,17 @@
X ep->sen_iaddr3 = 0;
X ep->sen_iaddr4 = 0;
X
- /* Set Ethernet station address. This must come from the
- * Vital Product Data (VPD) EEPROM.....as soon as I get the
- * I2C interface working.....
+ /* Set Ethernet station address.
X *
- * Since we performed a diskless boot, the Ethernet controller
+ * If we performed a MBX diskless boot, the Ethernet controller
X * has been initialized and we copy the address out into our
X * own structure.
X */
-#ifdef notdef
- ep->sen_paddrh = my_enet_addr[0];
- ep->sen_paddrm = my_enet_addr[1];
- ep->sen_paddrl = my_enet_addr[2];
-#else
X eap = (unsigned char *)&(ep->sen_paddrh);
+#ifndef CONFIG_MBX
+ for (i=5; i>=0; i--)
+ *eap++ = dev->dev_addr[i] = bd->bi_enetaddr[i];
+#else
X for (i=5; i>=0; i--)
X dev->dev_addr[i] = *eap++;
X #endif
@@ -854,7 +913,7 @@
X * than the manual describes because we have just now finished
X * the BD initialization.
X */
- cp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_SCC1, CPM_CR_INIT_TRX) | CPM_CR_FLG;
+ cp->cp_cpcr = mk_cr_cmd(CPM_CR_ENET, CPM_CR_INIT_TRX) | CPM_CR_FLG;
X while (cp->cp_cpcr & CPM_CR_FLG);
X
X cep->skb_cur = cep->skb_dirty = 0;
@@ -869,7 +928,7 @@
X
X /* Install our interrupt handler.
X */
- cpm_install_handler(CPMVEC_SCC1, cpm_enet_interrupt, dev);
+ cpm_install_handler(CPMVEC_ENET, cpm_enet_interrupt, dev);
X
X /* Set GSMR_H to enable all normal operating modes.
X * Set GSMR_L to enable Ethernet to MC68160.
@@ -884,12 +943,42 @@
X /* Set processing mode. Use Ethernet CRC, catch broadcast, and
X * start frame search 22 bit times after RENA.
X */
- sccp->scc_pmsr = (SCC_PMSR_ENCRC | SCC_PMSR_BRO | SCC_PMSR_NIB22);
+ sccp->scc_pmsr = (SCC_PMSR_ENCRC | SCC_PMSR_NIB22);
X
X /* It is now OK to enable the Ethernet transmitter.
- */
+ * Unfortunately, there are board implementation differences here.
+ */
+#ifdef CONFIG_MBX
X immap->im_ioport.iop_pcpar |= PC_ENET_TENA;
X immap->im_ioport.iop_pcdir &= ~PC_ENET_TENA;
+#endif
+
+#if defined(CONFIG_RPXLITE) || defined(CONFIG_RPXCLASSIC)
+ cp->cp_pbpar |= PB_ENET_TENA;
+ cp->cp_pbdir |= PB_ENET_TENA;
+
+ /* And while we are here, set the configuration to enable ethernet.
+ */
+ *((volatile uint *)RPX_CSR_ADDR) &= ~BCSR0_ETHLPBK;
+ *((volatile uint *)RPX_CSR_ADDR) |=
+ (BCSR0_ETHEN | BCSR0_COLTESTDIS | BCSR0_FULLDPLXDIS);
+#endif
+
+#ifdef CONFIG_BSEIP
+ cp->cp_pbpar |= PB_ENET_TENA;
+ cp->cp_pbdir |= PB_ENET_TENA;
+
+ /* BSE uses port B and C for PHY control.
+ */
+ cp->cp_pbpar &= ~(PB_BSE_POWERUP | PB_BSE_FDXDIS);
+ cp->cp_pbdir |= (PB_BSE_POWERUP | PB_BSE_FDXDIS);
+ cp->cp_pbdat |= (PB_BSE_POWERUP | PB_BSE_FDXDIS);
+
+ immap->im_ioport.iop_pcpar &= ~PC_BSE_LOOPBACK;
+ immap->im_ioport.iop_pcdir |= PC_BSE_LOOPBACK;
+ immap->im_ioport.iop_pcso &= ~PC_BSE_LOOPBACK;
+ immap->im_ioport.iop_pcdat &= ~PC_BSE_LOOPBACK;
+#endif
X
X dev->base_addr = (unsigned long)ep;
X dev->priv = cep;
@@ -913,3 +1002,4 @@
X
X return 0;
X }
+
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/Makefile linux/arch/ppc/Makefile
--- v2.2.3/linux/arch/ppc/Makefile Tue Dec 22 14:16:54 1998
+++ linux/arch/ppc/Makefile Fri Mar 19 10:50:03 1999
@@ -45,6 +45,7 @@
X MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot
X MAKECOFFBOOT = $(MAKE) -C arch/$(ARCH)/coffboot
X MAKECHRPBOOT = $(MAKE) -C arch/$(ARCH)/chrpboot
+MAKEMBXBOOT = $(MAKE) -C arch/$(ARCH)/mbxboot
X
X ifdef CONFIG_8xx
X SUBDIRS += arch/ppc/8xx_io
@@ -63,10 +64,16 @@
X BOOT_TARGETS = netboot znetboot zImage floppy install \
X vmlinux.coff znetboot.initrd zImage.initrd vmlinux.coff.initrd
X
+ifdef CONFIG_MBX
+$(BOOT_TARGETS): $(CHECKS) vmlinux
+ @$(MAKECOFFBOOT) $@
+ @$(MAKEMBXBOOT) $@
+else
X $(BOOT_TARGETS): $(CHECKS) vmlinux
X @$(MAKECOFFBOOT) $@
X @$(MAKEBOOT) $@
X @$(MAKECHRPBOOT) $@
+endif
X
X pmac_config:
X rm -f .config arch/ppc/defconfig
@@ -100,10 +107,10 @@
X @$(MAKECOFFBOOT) clean
X @$(MAKEBOOT) clean
X @$(MAKECHRPBOOT) clean
+ @$(MAKEMBXBOOT) clean
X
X archmrproper:
X
X archdep:
X $(MAKEBOOT) fastdep
X $(MAKECHRPBOOT) fastdep
-
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/boot/Makefile linux/arch/ppc/boot/Makefile
--- v2.2.3/linux/arch/ppc/boot/Makefile Tue Dec 22 14:16:54 1998
+++ linux/arch/ppc/boot/Makefile Fri Mar 19 10:50:03 1999
@@ -25,17 +25,14 @@
X IOFF = 0
X ISZ = 0
X
-ifeq ($(CONFIG_ALL_PPC),y)
-# yes, we want to build prep stuff
-CONFIG_PREP = y
-endif
-
-ifeq ($(CONFIG_MBX),y)
-ZLINKFLAGS = -T ../vmlinux.lds -Ttext 0x00100000
+ifeq ($(CONFIG_SMP),y)
+TFTPIMAGE=/tftpboot/zImage.prep.smp
X else
-ZLINKFLAGS = -T ../vmlinux.lds -Ttext 0x00600000
+TFTPIMAGE=/tftpboot/zImage.prep
X endif
X
+ZLINKFLAGS = -T ../vmlinux.lds -Ttext 0x00800000
+
X GZIP_FLAGS = -v9
X
X OBJECTS := head.o misc.o ../coffboot/zlib.o
@@ -43,19 +40,13 @@
X OBJCOPY = $(CROSS_COMPILE)objcopy
X OBJCOPY_ARGS = -O elf32-powerpc
X
-ifeq ($(CONFIG_MBX),y)
-OBJECTS += mbxtty.o
-CFLAGS += -DCONFIG_MBX
-else
-OBJECTS += vreset.o kbd.o
+OBJECTS += vreset.o kbd.o of1275.o
X ifeq ($(CONFIG_SERIAL_CONSOLE),y)
X OBJECTS += ns16550.o
X endif
-endif
X
X all: zImage
X
-ifeq ($(CONFIG_PREP),y)
X zvmlinux.initrd: zvmlinux
X $(LD) $(ZLINKFLAGS) -o zvmlinux.initrd.tmp $(OBJECTS)
X $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
@@ -73,47 +64,12 @@
X --add-section=image=../coffboot/vmlinux.gz \
X zvmlinux.initrd.tmp $@
X rm zvmlinux.initrd.tmp
-endif
-ifeq ($(CONFIG_MBX),y)
-zvmlinux.initrd: zvmlinux
- $(LD) $(ZLINKFLAGS) -o zvmlinux.initrd.tmp $(OBJECTS)
- $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
- --add-section=initrd=ramdisk.image.gz \
- --add-section=image=../coffboot/vmlinux.gz \
- zvmlinux.initrd.tmp zvmlinux.initrd
- $(CC) $(CFLAGS) -DINITRD_OFFSET=`sh offset $(OBJDUMP) zvmlinux.initrd initrd` \
- -DINITRD_SIZE=`sh size $(OBJDUMP) zvmlinux.initrd initrd` \
- -DZIMAGE_OFFSET=`sh offset $(OBJDUMP) zvmlinux.initrd image` \
- -DZIMAGE_SIZE=`sh size $(OBJDUMP) zvmlinux.initrd image` \
- -DKERNELBASE=$(KERNELBASE) -c -o misc.o misc.c
- $(LD) $(ZLINKFLAGS) -o zvmlinux.initrd.tmp $(OBJECTS)
- $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
- --add-section=initrd=ramdisk.image.gz \
- --add-section=image=../coffboot/vmlinux.gz \
- zvmlinux.initrd.tmp $@
- rm zvmlinux.initrd.tmp
-endif
X
-ifeq ($(CONFIG_PREP),y)
X zImage: zvmlinux mkprep
X ./mkprep -pbp zvmlinux zImage
-else
-ifeq ($(CONFIG_MBX),y)
-zImage: zvmlinux
- ln -sf zvmlinux zImage
-else
-zImage:
-endif
-endif
X
-ifeq ($(CONFIG_PREP),y)
X zImage.initrd: zvmlinux.initrd mkprep
X ./mkprep -pbp zvmlinux.initrd zImage.initrd
-endif
-ifeq ($(CONFIG_MBX),y)
-zImage.initrd: zvmlinux.initrd
- ln -sf zvmlinux.initrd zImage.initrd
-endif
X
X zvmlinux: $(OBJECTS) ../coffboot/vmlinux.gz
X #
@@ -136,34 +92,16 @@
X rm zvmlinux.tmp
X
X floppy: $(TOPDIR)/vmlinux zImage
-ifeq ($(CONFIG_PREP),y)
X dd if=zImage of=/dev/fd0H1440 bs=64b
-endif
X
-ifeq ($(CONFIG_PREP),y)
X mkprep : mkprep.c
X $(HOSTCC) -DKERNELBASE=$(KERNELBASE) -o mkprep mkprep.c
-endif
X
-ifeq ($(CONFIG_PREP),y)
X znetboot : zImage
- cp zImage /tftpboot/zImage.prep
-else
-ifeq ($(CONFIG_MBX),y)
-znetboot : zImage
- cp zImage /tftpboot/zImage.mbx
-else
-znetboot :
-endif
-endif
+ cp zImage $(TFTPIMAGE)
X
X znetboot.initrd : zImage.initrd
-ifeq ($(CONFIG_PREP),y)
- cp zImage.initrd /tftpboot/zImage.prep
-endif
-ifeq ($(CONFIG_MBX),y)
- cp zImage.initrd /tftpboot/zImage.mbx
-endif
+ cp zImage.initrd $(TFTPIMAGE)
X
X clean:
X rm -f vmlinux* zvmlinux* mkprep zImage*
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/boot/head.S linux/arch/ppc/boot/head.S
--- v2.2.3/linux/arch/ppc/boot/head.S Mon Oct 5 13:13:36 1998
+++ linux/arch/ppc/boot/head.S Fri Mar 19 10:50:03 1999
@@ -7,39 +7,24 @@
X .text
X
X /*
- * $Id: head.S,v 1.26 1998/09/19 01:21:20 cort Exp $
+ * $Id: head.S,v 1.29 1999/03/08 23:41:17 cort Exp $
X *
- * This code is loaded by the ROM loader at some arbitrary location.
- * Move it to high memory so that it can load the kernel at 0x0000.
- *
- * The MBX EPPC-Bug understands ELF, so it loads us into the location
- * specified in the header. This is a two step process. First, EPPC-Bug
- * loads the file into the intermediate buffer memory location specified
- * by the environment parameters. When it discovers this is an ELF
- * binary, it relocates to the link address for us. Unfortunately, the
- * header does not move with the file, so we have to find the
- * intermediate load location and read the header from there. From
- * information provided by Motorola (thank you), we know this intermediate
- * location can be found from the NVRAM environment.
- * All of these addresses must be somewhat carefully chosen to make sure
- * we don't overlap the regions. I chose to load the kernel at 0, the
- * compressed image loads at 0x00100000, and the MBX intermediate buffer
- * was set to 0x00200000. Provided the loaded kernel image never grows
- * over one megabyte (which I am going to ensure never happens :-), these
- * will work fine. When we get called from EPPC-Bug, registers are:
- * R1 - Stack pointer at a high memory address.
- * R3 - Pointer to Board Information Block.
- * R4 - Pointer to argument string.
- * Interrupts masked, cache and MMU disabled.
+ * Boot loader philosophy:
+ * ROM loads us to some arbitrary location
+ * Move the boot code to the link address (8M)
+ * Call decompress_kernel()
+ * Relocate the initrd, zimage and residual data to 8M
+ * Decompress the kernel to 0
+ * Jump to the kernel entry
+ * -- Cort
X */
-
X .globl start
X start:
X bl start_
X start_:
X mr r11,r3 /* Save pointer to residual/board data */
-
-#ifndef CONFIG_MBX
+ mr r25,r5 /* Save OFW pointer */
+
X mfmsr r3 /* Turn off interrupts */
X li r4,0
X ori r4,r4,MSR_EE
@@ -68,25 +53,6 @@
X mr r7,r5
X b start_ldr
X 1010:
-#if 0
-/* Copy relocation code down to location 0x0100 (where we hope it's safe!) */
- mflr r3
- addi r5,r3,start_ldr-start_
- addi r3,r3,relocate-start_
- li r4,0x0100
- mtctr r4
- subi r3,r3,4
- subi r4,r4,4
-00: lwzu r6,4(r3)
- stwu r6,4(r4)
- cmp 0,r3,r5
- bne 00b
- mflr r21
- mfctr r22
- mtlr r21
- mtctr r22
- bctr /* Jump to code */
-#endif
X /*
X * no matter where we're loaded, move ourselves to -Ttext address
X */
@@ -96,13 +62,8 @@
X mr r8,r3
X lis r4,start@h
X ori r4,r4,start@l
-#if 0
- lis r5,edata@h
- ori r5,r5,edata@l
-#else
X lis r5,end@h
X ori r5,r5,end@l
-#endif
X addi r5,r5,3 /* Round up - just in case */
X sub r5,r5,r4 /* Compute # longwords to move */
X srwi r5,r5,2
@@ -120,7 +81,6 @@
X mtlr r3 /* Easiest way to do an absolute jump */
X blr
X start_ldr:
-#endif /* ndef CONFIG_MBX */
X /* Clear all of BSS */
X lis r3,edata@h
X ori r3,r3,edata@l
@@ -140,31 +100,11 @@
X li r2,0x000F /* Mask pointer to 16-byte boundary */
X andc r1,r1,r2
X /* Run loader */
-#ifdef CONFIG_MBX
- mr r3, r11
- mr r21, r11
- bl serial_init /* Init MBX serial port */
-
- lis r8, 0xfa200000@h /* Disable Ethernet SCC */
- li r0, 0
- stw r0, 0x0a00(r8)
-
- mr r11, r21
- lis r8,start@h
- ori r8,r8,start@l
- li r9,end@h
- ori r9,r9,end@l
- sub r7,r8,r9
- srwi r7,r7,2
-#define ILAP_ADDRESS 0xfa000020
- lis r8, ILAP_ADDRESS@h
- lwz r8, ILAP_ADDRESS@l(r8)
- addis r8, r8, 1 /* Add 64K */
-#endif
X mr r3,r8 /* Load point */
X mr r4,r7 /* Program length */
X mr r5,r6 /* Checksum */
X mr r6,r11 /* Residual data */
+ mr r7,r25 /* OFW interfaces */
X bl decompress_kernel
X
X /* changed to use r3 (as firmware does) for kernel
@@ -193,12 +133,10 @@
X li r9,0x0
X lwz r9,0(r9)
X mtlr r9
-#ifndef CONFIG_MBX
X li r9,0
X lis r10,0xdeadc0de@h
X ori r10,r10,0xdeadc0de@l
X stw r10,0(r9)
-#endif
X blr
X hang:
X b hang
@@ -269,7 +207,6 @@
X _GLOBAL(flush_instruction_cache)
X mflr r5
X bl flush_data_cache
-#ifndef CONFIG_MBX
X mfspr r3,HID0 /* Caches are controlled by this register */
X li r4,0
X ori r4,r4,(HID0_ICE|HID0_ICFI)
@@ -278,18 +215,12 @@
X andc r3,r3,r4
X ori r3,r3,HID0_ICE /* Enable cache */
X mtspr HID0,r3
-#endif
X mtlr r5
X blr
X
X #define NUM_CACHE_LINES 128*8
X #define CACHE_LINE_SIZE 32
-#if 0
-cache_flush_buffer:
- .space NUM_CACHE_LINES*CACHE_LINE_SIZE /* CAUTION! these need to match hardware */
-#else
X #define cache_flush_buffer 0x1000
-#endif
X
X /*
X * Flush data cache
@@ -300,11 +231,7 @@
X ori r3,r3,cache_flush_buffer@l
X li r4,NUM_CACHE_LINES
X mtctr r4
-#if 0
-00: dcbz 0,r3 /* Flush cache line with minimal BUS traffic */
-#else
X 00: lwz r4,0(r3)
-#endif
X addi r3,r3,CACHE_LINE_SIZE /* Next line, please */
X bdnz 00b
X 10: blr
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/boot/kbd.c linux/arch/ppc/boot/kbd.c
--- v2.2.3/linux/arch/ppc/boot/kbd.c Mon Jan 12 15:18:13 1998
+++ linux/arch/ppc/boot/kbd.c Fri Mar 19 10:50:03 1999
@@ -1,7 +1,6 @@
-
X #include <linux/keyboard.h>
X
-#include <../drivers/char/defkeymap.c> /* yeah I know it's bad */
+#include <../drivers/char/defkeymap.c> /* yeah I know it's bad -- Cort */
X
X
X unsigned char shfts, ctls, alts, caps;
@@ -119,7 +118,7 @@
X }
X break;
X }
- if (brk) return (0); /* Ignore initial 'key up' codes */
+ if (brk) return (-1); /* Ignore initial 'key up' codes */
X goto loop;
X }
X
@@ -144,22 +143,63 @@
X while (inb(KBSTATP) & KBOUTRDY) ;
X outb(KBDATAP,0x45);
X for (i = 0; i < 10000; i++) udelay(1);
+
+ while (inb(KBSTATP) & KBOUTRDY) ;
+ outb(KBSTATP,0x20);
+ while ((inb(KBSTATP) & KBINRDY) == 0) ; /* wait input ready */
+ if (! (inb(KBDATAP) & 0x40)) {
+ /*
+ * Quote from PS/2 System Reference Manual:
+ *
+ * "Address hex 0060 and address hex 0064 should be
+ * written only when the input-buffer-full bit and
+ * output-buffer-full bit in the Controller Status
+ * register are set 0." (KBINRDY and KBOUTRDY)
+ */
+
+ while (inb(KBSTATP) & (KBINRDY | KBOUTRDY)) ;
+ outb(KBDATAP,0xF0);
+ while (inb(KBSTATP) & (KBINRDY | KBOUTRDY)) ;
+ outb(KBDATAP,0x01);
+ }
+
X while (inb(KBSTATP) & KBOUTRDY) ;
X outb(KBSTATP,0xAE);
X }
X
+/* We have to actually read the keyboard when CRT_tstc is called,
+ * since the pending data might be a key release code, and therefore
+ * not valid data. In this case, kbd() will return -1, even though there's
+ * data to be read. Of course, we might actually read a valid key press,
+ * in which case it gets queued into key_pending for use by CRT_getc.
+ */
+
X static int kbd_reset = 0;
X
+static int key_pending = -1;
+
X int CRT_getc(void)
X {
X int c;
X if (!kbd_reset) {kbdreset(); kbd_reset++; }
+
+ if (key_pending != -1) {
+ c = key_pending;
+ key_pending = -1;
+ return c;
+ } else {
X while ((c = kbd(0)) == 0) ;
- return(c);
+ return c;
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 01'
echo 'File patch-2.2.4 is continued in part 02'
echo 02 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 06 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 06; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+ return (unsigned long)hold_residual;
+}
+
+int
+do_ipaddrs(char **cmd_cp, int echo)
+{
+ char *cp, *ip, ch;
+ unsigned char ipd;
+ int i, j, retval;
+
+ /* We need to create the string:
+ * <my_ip>:<serv_ip>
+ */
+ cp = *cmd_cp;
+ retval = 0;
+
+ if ((cp - 9) >= cmd_line) {
+ if (strncmp(cp - 9, "nfsaddrs=", 9) == 0) {
+ ip = (char *)0xfa000060;
+ retval = 1;
+ for (j=0; j<2; j++) {
+ for (i=0; i<4; i++) {
+ ipd = *ip++;
+
+ ch = ipd/100;
+ if (ch) {
+ ch += '0';
+ if (echo)
+ putc(ch);
+ *cp++ = ch;
+ ipd -= 100 * (ch - '0');
+ }
+
+ ch = ipd/10;
+ if (ch) {
+ ch += '0';
+ if (echo)
+ putc(ch);
+ *cp++ = ch;
+ ipd -= 10 * (ch - '0');
+ }
+
+ ch = ipd + '0';
+ if (echo)
+ putc(ch);
+ *cp++ = ch;
+
+ ch = '.';
+ if (echo)
+ putc(ch);
+ *cp++ = ch;
+ }
+
+ /* At the end of the string, remove the
+ * '.' and replace it with a ':'.
+ */
+ *(cp - 1) = ':';
+ if (echo) {
+ putc('\b'); putc(':');
+ }
+ }
+
+ /* At the end of the second string, remove the
+ * '.' from both the command line and the
+ * screen.
+ */
+ --cp;
+ putc('\b'); putc(' '); putc('\b');
+ }
+ }
+ *cmd_cp = cp;
+ return(retval);
+}
+
+void
+do_nfsroot(char **cmd_cp, char *dp)
+{
+ char *cp, *rp, *ep;
+
+ /* The boot argument (i.e /sys/mbxroot/zImage) is stored
+ * at offset 0x0078 in NVRAM. We use this path name to
+ * construct the root file system path.
+ */
+ cp = *cmd_cp;
+
+ /* build command string.
+ */
+ rp = nfsroot_string;
+ while (*rp != 0)
+ *cp++ = *rp++;
+
+ /* Add the server address to the path.
+ */
+ while (*dp != ' ')
+ *cp++ = *dp++;
+ *cp++ = ':';
+
+ rp = (char *)0xfa000078;
+ ep = strrchr(rp, '/');
+
+ if (ep != 0) {
+ while (rp < ep)
+ *cp++ = *rp++;
+ }
+ else {
+ rp = defroot_string;
+ while (*rp != 0)
+ *cp++ = *rp++;
+ }
+
+ *cmd_cp = cp;
+}
+
+size_t strlen(const char * s)
+{
+ const char *sc;
+
+ for (sc = s; *sc != '\0'; ++sc)
+ /* nothing */;
+ return sc - s;
+}
+
+int strncmp(const char * cs,const char * ct,size_t count)
+{
+ register signed char __res = 0;
+
+ while (count) {
+ if ((__res = *cs - *ct++) != 0 || !*cs++)
+ break;
+ count--;
+ }
+
+ return __res;
+}
+
+char * strrchr(const char * s, int c)
+{
+ const char *p = s + strlen(s);
+ do {
+ if (*p == (char)c)
+ return (char *)p;
+ } while (--p >= s);
+ return NULL;
+}
+
+void puthex(unsigned long val)
+{
+ unsigned char buf[10];
+ int i;
+ for (i = 7; i >= 0; i--)
+ {
+ buf[i] = "0123456789ABCDEF"[val & 0x0F];
+ val >>= 4;
+ }
+ buf[8] = '\0';
+ puts(buf);
+}
+
+/*
+ * PCI/ISA I/O support
+ */
+
+volatile unsigned char *ISA_io = (unsigned char *)0x80000000;
+volatile unsigned char *ISA_mem = (unsigned char *)0xC0000000;
+
+void
+outb(int port, char val)
+{
+ /* Ensure I/O operations complete */
+ __asm__ volatile("eieio");
+ ISA_io[port] = val;
+}
+
+unsigned char
+inb(int port)
+{
+ /* Ensure I/O operations complete */
+ __asm__ volatile("eieio");
+ return (ISA_io[port]);
+}
+
+unsigned long
+local_to_PCI(unsigned long addr)
+{
+ return ((addr & 0x7FFFFFFF) | 0x80000000);
+}
+
+void
+_bcopy(char *src, char *dst, int len)
+{
+ while (len--) *dst++ = *src++;
+}
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/mbxboot/offset linux/arch/ppc/mbxboot/offset
--- v2.2.3/linux/arch/ppc/mbxboot/offset Wed Dec 31 16:00:00 1969
+++ linux/arch/ppc/mbxboot/offset Fri Mar 19 10:50:03 1999
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+OFFSET=`$1 -h $2 | grep $3 | grep -v zvmlinux| awk '{print $6}'`
+echo "0x"$OFFSET
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/mbxboot/size linux/arch/ppc/mbxboot/size
--- v2.2.3/linux/arch/ppc/mbxboot/size Wed Dec 31 16:00:00 1969
+++ linux/arch/ppc/mbxboot/size Fri Mar 19 10:50:03 1999
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+OFFSET=`$1 -h $2 | grep $3 | grep -v zvmlinux | awk '{print $3}'`
+echo "0x"$OFFSET
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/mm/init.c linux/arch/ppc/mm/init.c
--- v2.2.3/linux/arch/ppc/mm/init.c Fri Jan 8 22:36:03 1999
+++ linux/arch/ppc/mm/init.c Fri Mar 19 10:50:04 1999
@@ -1,5 +1,5 @@
-/*
- * $Id: init.c,v 1.139 1998/12/29 19:53:49 cort Exp $
+ /*
+ * $Id: init.c,v 1.150 1999/03/10 08:16:33 cort Exp $
X *
X * PowerPC version
X * Copyright (C) 1995-1996 Gary Thomas (g...@linuxppc.org)
@@ -34,6 +34,7 @@
X #include <linux/vmalloc.h>
X #include <linux/init.h>
X #include <linux/delay.h>
+#include <linux/openpic.h>
X #ifdef CONFIG_BLK_DEV_INITRD
X #include <linux/blk.h> /* for initrd_* */
X #endif
@@ -70,10 +71,12 @@
X unsigned long ioremap_base;
X unsigned long ioremap_bot;
X unsigned long avail_start;
-struct pgtable_cache_struct quicklists;
X extern int num_memory;
X extern struct mem_info memory[NUM_MEMINFO];
X extern boot_infos_t *boot_infos;
+#ifndef __SMP__
+struct pgtable_cache_struct quicklists;
+#endif
X
X void MMU_init(void);
X static void *MMU_get_page(void);
@@ -883,7 +886,8 @@
X }
X }
X
-__initfunc(static void *MMU_get_page(void))
+/* This can get called from ioremap, so don't make it an initfunc, OK? */
+static void *MMU_get_page(void)
X {
X void *p;
X
@@ -926,14 +930,16 @@
X break;
X case _MACH_prep:
X FREESEC(__pmac_begin,__pmac_end,num_pmac_pages);
- FREESEC(__openfirmware_begin,__openfirmware_end,num_openfirmware_pages);
X break;
X case _MACH_mbx:
X FREESEC(__pmac_begin,__pmac_end,num_pmac_pages);
- FREESEC(__openfirmware_begin,__openfirmware_end,num_openfirmware_pages);
X FREESEC(__prep_begin,__prep_end,num_prep_pages);
X break;
X }
+
+ if ( !have_of )
+ FREESEC( __openfirmware_begin, __openfirmware_end,
+ num_openfirmware_pages );
X
X printk ("Freeing unused kernel memory: %ldk init",
X (num_freed_pages * PAGE_SIZE) >> 10);
@@ -955,7 +961,6 @@
X */
X __initfunc(void MMU_init(void))
X {
-
X #ifdef __SMP__
X if ( first_cpu_booted ) return;
X #endif /* __SMP__ */
@@ -989,6 +994,7 @@
X break;
X case _MACH_chrp:
X setbat(0, 0xf8000000, 0xf8000000, 0x08000000, IO_PAGE);
+ setbat(1, 0x80000000, 0x80000000, 0x10000000, IO_PAGE);
X break;
X case _MACH_Pmac:
X {
@@ -1029,6 +1035,7 @@
X ioremap(PCI_CSR_ADDR, PCI_CSR_SIZE);
X /* ide needs to be able to get at PCI space -- Cort */
X ioremap(0x80000000, 0x4000);
+ ioremap(0x81000000, 0x4000);
X #endif /* CONFIG_8xx */
X }
X
@@ -1236,6 +1243,9 @@
X unsigned long a, total;
X unsigned long kstart, ksize;
X int i;
+
+ /* max amount of RAM we allow -- Cort */
+#define RAM_LIMIT (768<<20)
X
X memory_node = find_devices("memory");
X if (memory_node == NULL) {
@@ -1260,7 +1270,18 @@
X a = phys_mem.regions[0].address;
X if (a != 0)
X panic("RAM doesn't start at physical address 0");
+ /*
+ * XXX:
+ * Make sure ram mappings don't stomp on IO space
+ * This is a temporary hack to keep this from happening
+ * until we move the KERNELBASE and can allocate RAM up
+ * to our nearest IO area.
+ * -- Cort
+ */
+ if ( phys_mem.regions[0].size >= RAM_LIMIT )
+ phys_mem.regions[0].size = RAM_LIMIT;
X total = phys_mem.regions[0].size;
+
X if (phys_mem.n_regions > 1) {
X printk("RAM starting at 0x%x is not contiguous\n",
X phys_mem.regions[1].address);
@@ -1277,8 +1298,15 @@
X }
X prom_mem = phys_mem;
X for (i = 0; i < phys_avail.n_regions; ++i)
+ {
+ if ( phys_avail.regions[i].address >= RAM_LIMIT )
+ continue;
+ if ( (phys_avail.regions[i].address+phys_avail.regions[i].size)
+ >= RAM_LIMIT )
+ phys_avail.regions[i].size = RAM_LIMIT - phys_avail.regions[i].address;
X remove_mem_piece(&prom_mem, phys_avail.regions[i].address,
X phys_avail.regions[i].size, 1);
+ }
X
X /*
X * phys_avail records memory we can use now.
@@ -1292,7 +1320,7 @@
X remove_mem_piece(&prom_mem, kstart, ksize, 0);
X remove_mem_piece(&phys_avail, 0, 0x4000, 0);
X remove_mem_piece(&prom_mem, 0, 0x4000, 0);
-
+#undef RAM_LIMIT
X return __va(total);
X }
X
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/pmac_defconfig linux/arch/ppc/pmac_defconfig
--- v2.2.3/linux/arch/ppc/pmac_defconfig Wed Mar 10 15:29:45 1999
+++ linux/arch/ppc/pmac_defconfig Wed Mar 10 21:30:32 1999
@@ -262,6 +262,7 @@
X # CONFIG_SHAPER is not set
X # CONFIG_HOSTESS_SV11 is not set
X # CONFIG_COSA is not set
+# CONFIG_RCPCI is not set
X
X #
X # Amateur Radio support
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/boot/piggyback.c linux/arch/sparc/boot/piggyback.c
--- v2.2.3/linux/arch/sparc/boot/piggyback.c Wed Jul 16 19:22:50 1997
+++ linux/arch/sparc/boot/piggyback.c Wed Mar 10 16:53:36 1999
@@ -1,4 +1,4 @@
-/* $Id: piggyback.c,v 1.1 1997/07/11 11:05:17 jj Exp $
+/* $Id: piggyback.c,v 1.2 1998/12/15 12:24:43 jj Exp $
X Simple utility to make a single-image install kernel with initial ramdisk
X for Sparc tftpbooting without need to set up nfs.
X
@@ -46,16 +46,21 @@
X struct stat s;
X int image, tail;
X
+ start = end = 0;
X if (stat (argv[3], &s) < 0) die (argv[3]);
X map = fopen (argv[2], "r");
X if (!map) die(argv[2]);
X while (fgets (buffer, 1024, map)) {
- if (!strcmp (buffer + 11, "start\n"))
+ if (!strcmp (buffer + 8, " T start\n") || !strcmp (buffer + 16, " T start\n"))
X start = strtoul (buffer, NULL, 16);
- else if (!strcmp (buffer + 11, "end\n"))
+ else if (!strcmp (buffer + 8, " A end\n") || !strcmp (buffer + 16, " A end\n"))
X end = strtoul (buffer, NULL, 16);
X }
X fclose (map);
+ if (!start || !end) {
+ fprintf (stderr, "Could not determine start and end from System.map\n");
+ exit(1);
+ }
X if ((image = open(argv[1],O_RDWR)) < 0) die(argv[1]);
X if (read(image,buffer,512) != 512) die(argv[1]);
X if (!memcmp (buffer, "\177ELF", 4)) {
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/config.in linux/arch/sparc/config.in
--- v2.2.3/linux/arch/sparc/config.in Tue Jan 19 11:32:51 1999
+++ linux/arch/sparc/config.in Mon Mar 15 16:10:43 1999
@@ -1,4 +1,4 @@
-# $Id: config.in,v 1.63 1998/09/21 05:05:56 jj Exp $
+# $Id: config.in,v 1.68 1999/03/14 03:12:42 anton Exp $
X # For a description of the syntax of this configuration file,
X # see the Configure script.
X #
@@ -25,7 +25,7 @@
X define_bool CONFIG_VT_CONSOLE y
X
X bool 'Support for AP1000 multicomputer' CONFIG_AP1000
-bool 'Symmetric multi-processing support' CONFIG_SMP
+bool 'Symmetric multi-processing support (does not work on sun4/sun4c)' CONFIG_SMP
X
X if [ "$CONFIG_AP1000" = "y" ]; then
X define_bool CONFIG_NO_KEYBOARD y
@@ -165,6 +165,9 @@
X fi
X tristate 'Sun LANCE support' CONFIG_SUNLANCE
X tristate 'Sun Happy Meal 10/100baseT support' CONFIG_HAPPYMEAL
+ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+ tristate 'Sun BigMAC 10/100baseT support' CONFIG_SUNBMAC
+ fi
X tristate 'Sun QuadEthernet support' CONFIG_SUNQE
X tristate 'MyriCOM Gigabit Ethernet support' CONFIG_MYRI_SBUS
X # bool 'FDDI driver support' CONFIG_FDDI
@@ -173,6 +176,15 @@
X fi
X endmenu
X fi
+
+# This one must be before the filesystem configs. -DaveM
+mainmenu_option next_comment
+comment 'Unix98 PTY support'
+bool 'Unix98 PTY support' CONFIG_UNIX98_PTYS
+if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
+ int 'Maximum number of Unix98 PTYs in use (0-2048)' CONFIG_UNIX98_PTY_COUNT 256
+fi
+endmenu
X
X source fs/Config.in
X
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/defconfig linux/arch/sparc/defconfig
--- v2.2.3/linux/arch/sparc/defconfig Wed Mar 10 15:29:45 1999
+++ linux/arch/sparc/defconfig Sun Mar 21 07:23:38 1999
@@ -117,7 +117,6 @@
X # (it is safe to leave these untouched)
X #
X CONFIG_INET_RARP=m
-CONFIG_IP_NOSR=y
X CONFIG_SKB_LARGE=y
X CONFIG_IPV6=m
X # CONFIG_IPV6_EUI64 is not set
@@ -138,6 +137,10 @@
X # CONFIG_NET_FASTROUTE is not set
X # CONFIG_NET_HW_FLOWCONTROL is not set
X # CONFIG_CPU_IS_SLOW is not set
+
+#
+# QoS and/or fair queueing
+#
X # CONFIG_NET_SCHED is not set
X
X #
@@ -180,11 +183,13 @@
X # FC4 drivers
X #
X CONFIG_FC4_SOC=m
+CONFIG_FC4_SOCAL=m
X
X #
X # FC4 targets
X #
X CONFIG_SCSI_PLUTO=m
+CONFIG_SCSI_FCAL=m
X
X #
X # Network device support
@@ -202,28 +207,51 @@
X # CONFIG_SLIP_MODE_SLIP6 is not set
X CONFIG_SUNLANCE=y
X CONFIG_HAPPYMEAL=m
+CONFIG_SUNBMAC=m
X CONFIG_SUNQE=m
X CONFIG_MYRI_SBUS=m
X
X #
+# Unix98 PTY support
+#
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
X # Filesystems
X #
X # CONFIG_QUOTA is not set
-CONFIG_MINIX_FS=m
-CONFIG_EXT2_FS=y
-CONFIG_ISO9660_FS=m
-# CONFIG_JOLIET is not set
+CONFIG_AUTOFS_FS=m
+# CONFIG_ADFS_FS is not set
+CONFIG_AFFS_FS=m
+# CONFIG_HFS_FS is not set
X CONFIG_FAT_FS=m
X CONFIG_MSDOS_FS=m
X # CONFIG_UMSDOS_FS is not set
X CONFIG_VFAT_FS=m
+CONFIG_ISO9660_FS=m
+# CONFIG_JOLIET is not set
+CONFIG_MINIX_FS=m
+# CONFIG_NTFS_FS is not set
+CONFIG_HPFS_FS=m
X CONFIG_PROC_FS=y
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+CONFIG_ROMFS_FS=m
+CONFIG_EXT2_FS=y
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+CONFIG_UFS_FS_WRITE=y
+
+#
+# Network File Systems
+#
+CONFIG_CODA_FS=m
X CONFIG_NFS_FS=y
X CONFIG_NFSD=m
X # CONFIG_NFSD_SUN is not set
X CONFIG_SUNRPC=y
X CONFIG_LOCKD=y
-CONFIG_CODA_FS=m
X CONFIG_SMB_FS=m
X CONFIG_SMB_WIN95=y
X CONFIG_NCP_FS=m
@@ -233,21 +261,16 @@
X # CONFIG_NCPFS_NFS_NS is not set
X # CONFIG_NCPFS_OS2_NS is not set
X # CONFIG_NCPFS_MOUNT_SUBDIR is not set
-CONFIG_HPFS_FS=m
-# CONFIG_NTFS_FS is not set
-CONFIG_SYSV_FS=m
-CONFIG_AFFS_FS=m
-# CONFIG_HFS_FS is not set
-CONFIG_ROMFS_FS=m
-CONFIG_AUTOFS_FS=m
-CONFIG_AMIGA_PARTITION=y
-CONFIG_UFS_FS=m
+
+#
+# Partition Types
+#
X CONFIG_BSD_DISKLABEL=y
+# CONFIG_MAC_PARTITION is not set
X CONFIG_SMD_DISKLABEL=y
X CONFIG_SOLARIS_X86_PARTITION=y
-# CONFIG_ADFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_MAC_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+CONFIG_AMIGA_PARTITION=y
X CONFIG_NLS=y
X
X #
@@ -278,6 +301,7 @@
X # CONFIG_NLS_ISO8859_7 is not set
X # CONFIG_NLS_ISO8859_8 is not set
X # CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_15 is not set
X # CONFIG_NLS_KOI8_R is not set
X
X #
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/Makefile linux/arch/sparc/kernel/Makefile
--- v2.2.3/linux/arch/sparc/kernel/Makefile Tue Dec 22 14:16:54 1998
+++ linux/arch/sparc/kernel/Makefile Wed Mar 10 16:53:36 1999
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.48 1998/09/21 05:04:46 jj Exp $
+# $Id: Makefile,v 1.49 1999/01/02 16:45:37 davem Exp $
X # Makefile for the linux kernel.
X #
X # Note! Dependencies are done automagically by 'make dep', which also
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/devices.c linux/arch/sparc/kernel/devices.c
--- v2.2.3/linux/arch/sparc/kernel/devices.c Sun Nov 8 14:02:44 1998
+++ linux/arch/sparc/kernel/devices.c Wed Mar 10 16:53:36 1999
@@ -29,24 +29,25 @@
X
X prom_getstring(prom_root_node, "device_type", node_str, sizeof(node_str));
X
+ prom_printf("Booting Linux...\n");
X if(strcmp(node_str, "cpu") == 0) {
X linux_num_cpus++;
X } else {
X int scan;
X scan = prom_getchild(prom_root_node);
- prom_printf("root child is %08lx\n", (unsigned long) scan);
+ /* One can look it up in PROM instead */
+ /* prom_printf("root child is %08lx\n", (unsigned long) scan); */
X while((scan = prom_getsibling(scan)) != 0) {
X prom_getstring(scan, "device_type", node_str, sizeof(node_str));
X if(strcmp(node_str, "cpu") == 0) {
X linux_cpus[linux_num_cpus].prom_node = scan;
X prom_getproperty(scan, "mid", (char *) &thismid, sizeof(thismid));
X linux_cpus[linux_num_cpus].mid = thismid;
- prom_printf("Found CPU %d <node=%08lx,mid=%d>\n",
- linux_num_cpus, (unsigned long) scan,
- thismid);
+ /* prom_printf("Found CPU %d <node=%08lx,mid=%d>\n", linux_num_cpus, (unsigned long) scan, thismid); */
+ printk("Found CPU %d <node=%08lx,mid=%d>\n", linux_num_cpus, (unsigned long) scan, thismid);
X linux_num_cpus++;
X }
- };
+ }
X if(linux_num_cpus == 0) {
X if (sparc_cpu_model == sun4d) {
X scan = prom_getchild(prom_root_node);
@@ -59,9 +60,10 @@
X prom_getproperty(node, "cpu-id", (char *) &thismid, sizeof(thismid));
X linux_cpus[linux_num_cpus].prom_node = node;
X linux_cpus[linux_num_cpus].mid = thismid;
- prom_printf("Found CPU %d <node=%08lx,mid=%d>\n",
- linux_num_cpus, (unsigned long) node,
- thismid);
+ /* prom_printf("Found CPU %d <node=%08lx,mid=%d>\n",
+ linux_num_cpus, (unsigned long) node, thismid); */
+ printk("Found CPU %d <node=%08lx,mid=%d>\n",
+ linux_num_cpus, (unsigned long) node, thismid);
X linux_num_cpus++;
X }
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/entry.S linux/arch/sparc/kernel/entry.S
--- v2.2.3/linux/arch/sparc/kernel/entry.S Thu Nov 19 09:56:27 1998
+++ linux/arch/sparc/kernel/entry.S Wed Mar 10 16:53:36 1999
@@ -1,10 +1,10 @@
-/* $Id: entry.S,v 1.153 1998/11/11 15:12:33 jj Exp $
+/* $Id: entry.S,v 1.157 1999/01/19 07:54:32 davem Exp $
X * arch/sparc/kernel/entry.S: Sparc trap low-level entry points.
X *
X * Copyright (C) 1995 David S. Miller (da...@caip.rutgers.edu)
X * Copyright (C) 1996 Eddie C. Dost (e...@skynet.be)
X * Copyright (C) 1996 Miguel de Icaza (mig...@nuclecu.unam.mx)
- * Copyright (C) 1996,1998 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
+ * Copyright (C) 1996-1999 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
X * Copyright (C) 1997 Anton Blanchard (an...@progsoc.uts.edu.au)
X */
X
@@ -1380,11 +1380,13 @@
X
X /* Now that we have a real sys_clone, sys_fork() is
X * implemented in terms of it. Our _real_ implementation
- * of SunOS vfork() will use sys_clone() instead.
+ * of SunOS vfork() will use sys_vfork().
+ *
+ * XXX These three should be consolidated into mostly shared
+ * XXX code just like on sparc64... -DaveM
X */
X .align 4
- .globl C_LABEL(sys_fork), C_LABEL(sys_vfork), flush_patch_two
-C_LABEL(sys_vfork):
+ .globl C_LABEL(sys_fork), flush_patch_two
X C_LABEL(sys_fork):
X mov %o7, %l5
X flush_patch_two:
@@ -1422,6 +1424,23 @@
X call C_LABEL(do_fork)
X mov %l5, %o7
X
+ /* Whee, real vfork! */
+ .globl C_LABEL(sys_vfork), flush_patch_four
+C_LABEL(sys_vfork):
+flush_patch_four:
+ FLUSH_ALL_KERNEL_WINDOWS;
+ rd %psr, %g4
+ WRITE_PAUSE
+ rd %wim, %g5
+ WRITE_PAUSE
+ std %g4, [%curptr + AOFF_task_tss + AOFF_thread_fork_kpsr]
+ sethi %hi(0x4000 | 0x0100 | SIGCHLD), %o0
+ mov %fp, %o1
+ or %o0, %lo(0x4000 | 0x0100 | SIGCHLD), %o0
+ sethi %hi(C_LABEL(do_fork)), %l1
+ jmpl %l1 + %lo(C_LABEL(do_fork)), %g0
+ add %sp, REGWIN_SZ, %o2
+
X .align 4
X linux_sparc_ni_syscall:
X sethi %hi(C_LABEL(sys_ni_syscall)), %l7
@@ -1454,11 +1473,10 @@
X #ifdef __SMP__
X .globl C_LABEL(ret_from_smpfork)
X C_LABEL(ret_from_smpfork):
- /* Nowadays all we need to do is drop the scheduler lock. */
- sethi %hi(C_LABEL(scheduler_lock)), %o4
- stb %g0, [%o4 + %lo(C_LABEL(scheduler_lock))]
X wr %l0, PSR_ET, %psr
X WRITE_PAUSE
+ call schedule_tail
+ nop
X b C_LABEL(ret_sys_call)
X ld [%sp + REGWIN_SZ + PT_I0], %o0
X #endif
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/head.S linux/arch/sparc/kernel/head.S
--- v2.2.3/linux/arch/sparc/kernel/head.S Thu Aug 6 14:06:30 1998
+++ linux/arch/sparc/kernel/head.S Wed Mar 10 16:53:36 1999
@@ -1,4 +1,4 @@
-/* $Id: head.S,v 1.92 1998/06/10 07:21:55 davem Exp $
+/* $Id: head.S,v 1.93 1999/01/10 06:03:14 jj Exp $
X * head.S: The initial boot code for the Sparc port of Linux.
X *
X * Copyright (C) 1995 David S. Miller (da...@caip.rutgers.edu)
@@ -1108,6 +1108,9 @@
X st %g4, [%g5 + 0x18]
X st %g4, [%g5 + 0x1c]
X set flush_patch_three, %g5
+ st %g4, [%g5 + 0x18]
+ st %g4, [%g5 + 0x1c]
+ set flush_patch_four, %g5
X st %g4, [%g5 + 0x18]
X st %g4, [%g5 + 0x1c]
X set flush_patch_exception, %g5
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/pcic.c linux/arch/sparc/kernel/pcic.c
--- v2.2.3/linux/arch/sparc/kernel/pcic.c Sun Nov 8 14:02:45 1998
+++ linux/arch/sparc/kernel/pcic.c Tue Mar 16 21:52:05 1999
@@ -1,4 +1,4 @@
-/* $Id: pcic.c,v 1.3 1998/10/07 11:34:56 jj Exp $
+/* $Id: pcic.c,v 1.5 1999/03/16 00:15:20 davem Exp $
X * pcic.c: Sparc/PCI controller support
X *
X * Copyright (C) 1998 V. Roganov and G. Raiko
@@ -498,9 +498,10 @@
X tv->tv_sec--;
X }
X xtime = *tv;
- time_state = TIME_BAD;
- time_maxerror = 0x70000000;
- time_esterror = 0x70000000;
+ time_adjust = 0; /* stop active adjtime() */
+ time_status |= STA_UNSYNC;
+ time_maxerror = NTP_PHASE_LIMIT;
+ time_esterror = NTP_PHASE_LIMIT;
X sti();
X }
X
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/process.c linux/arch/sparc/kernel/process.c
--- v2.2.3/linux/arch/sparc/kernel/process.c Mon Oct 5 13:13:37 1998
+++ linux/arch/sparc/kernel/process.c Sun Mar 21 18:37:56 1999
@@ -1,4 +1,4 @@
-/* $Id: process.c,v 1.126 1998/09/21 05:05:18 jj Exp $
+/* $Id: process.c,v 1.132 1999/03/22 02:12:13 davem Exp $
X * linux/arch/sparc/kernel/process.c
X *
X * Copyright (C) 1995 David S. Miller (da...@caip.rutgers.edu)
@@ -62,7 +62,7 @@
X
X /* endless idle loop with no priority at all */
X current->priority = 0;
- current->counter = 0;
+ current->counter = -100;
X for (;;) {
X if (ARCH_SUN4C_SUN4) {
X static int count = HZ;
@@ -108,13 +108,15 @@
X /* This is being executed in task 0 'user space'. */
X int cpu_idle(void *unused)
X {
+ /* endless idle loop with no priority at all */
X current->priority = 0;
+ current->counter = -100;
X while(1) {
- check_pgt_cache();
- run_task_queue(&tq_scheduler);
- /* endless idle loop with no priority at all */
- current->counter = 0;
- schedule();
+ if(current->need_resched) {
+ schedule();
+ check_pgt_cache();
+ }
+ barrier(); /* or else gcc optimizes... */
X }
X }
X
@@ -440,10 +442,17 @@
X size = ((unsigned long)src->fp) - ((unsigned long)src);
X sp = (struct sparc_stackf *)(((unsigned long)dst) - size);
X
+ /* do_fork() grabs the parent semaphore, we must release it
+ * temporarily so we can build the child clone stack frame
+ * without deadlocking.
+ */
+ up(¤t->mm->mmap_sem);
X if (copy_to_user(sp, src, size))
- return 0;
- if (put_user(dst, &sp->fp))
- return 0;
+ sp = (struct sparc_stackf *) 0;
+ else if (put_user(dst, &sp->fp))
+ sp = (struct sparc_stackf *) 0;
+ down(¤t->mm->mmap_sem);
+
X return sp;
X }
X
@@ -657,4 +666,38 @@
X out:
X unlock_kernel();
X return error;
+}
+
+/*
+ * This is the mechanism for creating a new kernel thread.
+ *
+ * NOTE! Only a kernel-only process(ie the swapper or direct descendants
+ * who haven't done an "execve()") should use this: it will work within
+ * a system call from a "real" process, but the process memory space will
+ * not be free'd until both the parent and the child have exited.
+ */
+pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
+{
+ long retval;
+
+ __asm__ __volatile("mov %4, %%g2\n\t" /* Set aside fn ptr... */
+ "mov %5, %%g3\n\t" /* and arg. */
+ "mov %1, %%g1\n\t"
+ "mov %2, %%o0\n\t" /* Clone flags. */
+ "mov 0, %%o1\n\t" /* usp arg == 0 */
+ "t 0x10\n\t" /* Linux/Sparc clone(). */
+ "cmp %%o1, 0\n\t"
+ "be 1f\n\t" /* The parent, just return. */
+ " nop\n\t" /* Delay slot. */
+ "jmpl %%g2, %%o7\n\t" /* Call the function. */
+ " mov %%g3, %%o0\n\t" /* Get back the arg in delay. */
+ "mov %3, %%g1\n\t"
+ "t 0x10\n\t" /* Linux/Sparc exit(). */
+ /* Notreached by child. */
+ "1: mov %%o0, %0\n\t" :
+ "=r" (retval) :
+ "i" (__NR_clone), "r" (flags | CLONE_VM),
+ "i" (__NR_exit), "r" (fn), "r" (arg) :
+ "g1", "g2", "g3", "o0", "o1", "memory", "cc");
+ return retval;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/ptrace.c linux/arch/sparc/kernel/ptrace.c
--- v2.2.3/linux/arch/sparc/kernel/ptrace.c Thu Dec 31 10:28:59 1998
+++ linux/arch/sparc/kernel/ptrace.c Mon Mar 15 16:10:43 1999
@@ -528,6 +528,8 @@
X
X if (((current->personality & PER_BSD) && (request == PTRACE_SUNATTACH))
X || (!(current->personality & PER_BSD) && (request == PTRACE_ATTACH))) {
+ unsigned long flags;
+
X if(child == current) {
X /* Try this under SunOS/Solaris, bwa haha
X * You'll never be able to kill the process. ;-)
@@ -539,8 +541,9 @@
X (current->uid != child->euid) ||
X (current->uid != child->uid) ||
X (current->gid != child->egid) ||
- (current->gid != child->gid)) &&
- !capable(CAP_SYS_PTRACE)) {
+ (current->gid != child->sgid) ||
+ (cap_issubset(child->cap_permitted, current->cap_permitted)) ||
+ (current->gid != child->gid)) && !capable(CAP_SYS_PTRACE)) {
X pt_error_return(regs, EPERM);
X goto out;
X }
@@ -550,14 +553,13 @@
X goto out;
X }
X child->flags |= PF_PTRACED;
+ write_lock_irqsave(&tasklist_lock, flags);
X if(child->p_pptr != current) {
- unsigned long flags;
- write_lock_irqsave(&tasklist_lock, flags);
X REMOVE_LINKS(child);
X child->p_pptr = current;
X SET_LINKS(child);
- write_unlock_irqrestore(&tasklist_lock, flags);
X }
+ write_unlock_irqrestore(&tasklist_lock, flags);
X send_sig(SIGSTOP, child, 1);
X pt_succ_return(regs, 0);
X goto out;
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/signal.c linux/arch/sparc/kernel/signal.c
--- v2.2.3/linux/arch/sparc/kernel/signal.c Sun Nov 8 14:02:45 1998
+++ linux/arch/sparc/kernel/signal.c Wed Mar 10 16:53:36 1999
@@ -1,4 +1,4 @@
-/* $Id: signal.c,v 1.90 1998/10/18 03:31:05 davem Exp $
+/* $Id: signal.c,v 1.91 1999/01/26 11:00:44 jj Exp $
X * linux/arch/sparc/kernel/signal.c
X *
X * Copyright (C) 1991, 1992 Linus Torvalds
@@ -38,6 +38,8 @@
X
X /* This turned off for production... */
X /* #define DEBUG_SIGNALS 1 */
+/* #define DEBUG_SIGNALS_TRACE 1 */
+/* #define DEBUG_SIGNALS_MAPS 1 */
X
X /* Signal frames: the original one (compatible with SunOS):
X *
@@ -1004,6 +1006,59 @@
X }
X }
X
+#ifdef DEBUG_SIGNALS_MAPS
+
+#define MAPS_LINE_FORMAT "%08lx-%08lx %s %08lx %s %lu "
+
+static inline void read_maps (void)
+{
+ struct vm_area_struct * map, * next;
+ char * buffer;
+ ssize_t i;
+
+ buffer = (char*)__get_free_page(GFP_KERNEL);
+ if (!buffer)
+ return;
+
+ for (map = current->mm->mmap ; map ; map = next ) {
+ /* produce the next line */
+ char *line;
+ char str[5], *cp = str;
+ int flags;
+ kdev_t dev;
+ unsigned long ino;
+
+ /*
+ * Get the next vma now (but it won't be used if we sleep).
+ */
+ next = map->vm_next;
+ flags = map->vm_flags;
+
+ *cp++ = flags & VM_READ ? 'r' : '-';
+ *cp++ = flags & VM_WRITE ? 'w' : '-';
+ *cp++ = flags & VM_EXEC ? 'x' : '-';
+ *cp++ = flags & VM_MAYSHARE ? 's' : 'p';
+ *cp++ = 0;
+
+ dev = 0;
+ ino = 0;
+ if (map->vm_file != NULL) {
+ dev = map->vm_file->f_dentry->d_inode->i_dev;
+ ino = map->vm_file->f_dentry->d_inode->i_ino;
+ line = d_path(map->vm_file->f_dentry, buffer, PAGE_SIZE);
+ }
+ printk(MAPS_LINE_FORMAT, map->vm_start, map->vm_end, str, map->vm_offset,
+ kdevname(dev), ino);
+ if (map->vm_file != NULL)
+ printk("%s\n", line);
+ else
+ printk("\n");
+ }
+ free_page((unsigned long)buffer);
+ return;
+}
+#endif
+
X /* Note that 'init' is a special process: it doesn't get signals it doesn't
X * want to handle. Thus you cannot kill init even with a SIGKILL even by
X * mistake.
@@ -1115,8 +1170,25 @@
X }
X #ifdef DEBUG_SIGNALS
X /* Very useful to debug dynamic linker problems */
- printk ("Sig ILL going...\n");
+ printk ("Sig %ld going for %s[%d]...\n", signr, current->comm, current->pid);
X show_regs (regs);
+#ifdef DEBUG_SIGNALS_TRACE
+ {
+ struct reg_window *rw = (struct reg_window *)regs->u_regs[UREG_FP];
+ unsigned int ins[8];
+
+ while(rw &&
+ !(((unsigned long) rw) & 0x3)) {
+ copy_from_user(ins, &rw->ins[0], sizeof(ins));
+ printk("Caller[%08x](%08x,%08x,%08x,%08x,%08x,%08x)\n", ins[7], ins[0], ins[1], ins[2], ins[3], ins[4], ins[5]);
+ rw = (struct reg_window *)(unsigned long)ins[6];
+ }
+ }
+#endif
+#ifdef DEBUG_SIGNALS_MAPS
+ printk("Maps:\n");
+ read_maps();
+#endif
X #endif
X /* fall through */
X default:
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/smp.c linux/arch/sparc/kernel/smp.c
--- v2.2.3/linux/arch/sparc/kernel/smp.c Sun Nov 8 14:02:45 1998
+++ linux/arch/sparc/kernel/smp.c Wed Mar 10 16:53:36 1999
@@ -52,6 +52,7 @@
X int smp_activated = 0;
X volatile int cpu_number_map[NR_CPUS];
X volatile int __cpu_logical_map[NR_CPUS];
+cycles_t cacheflush_time = 0; /* XXX */
X
X /* The only guaranteed locking primitive available on all Sparc
X * processors is 'ldstub [%reg + immediate], %dest_reg' which atomically
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/sparc_ksyms.c linux/arch/sparc/kernel/sparc_ksyms.c
--- v2.2.3/linux/arch/sparc/kernel/sparc_ksyms.c Thu Nov 19 09:56:27 1998
+++ linux/arch/sparc/kernel/sparc_ksyms.c Sun Mar 21 07:23:38 1999
@@ -1,4 +1,4 @@
-/* $Id: sparc_ksyms.c,v 1.73 1998/11/06 13:49:54 jj Exp $
+/* $Id: sparc_ksyms.c,v 1.77 1999/03/21 06:37:43 davem Exp $
X * arch/sparc/kernel/ksyms.c: Sparc specific ksyms support.
X *
X * Copyright (C) 1996 David S. Miller (da...@caip.rutgers.edu)
@@ -66,6 +66,7 @@
X
X extern void bcopy (const char *, char *, int);
X extern int __ashrdi3(int, int);
+extern int __lshrdi3(int, int);
X
X extern void dump_thread(struct pt_regs *, struct user *);
X
@@ -91,6 +92,7 @@
X /* used by various drivers */
X EXPORT_SYMBOL(sparc_cpu_model);
X EXPORT_SYMBOL_PRIVATE(_spinlock_waitfor);
+EXPORT_SYMBOL(kernel_thread);
X #ifdef SPIN_LOCK_DEBUG
X EXPORT_SYMBOL(_do_spin_lock);
X EXPORT_SYMBOL(_do_spin_unlock);
@@ -118,6 +120,7 @@
X #endif
X
X EXPORT_SYMBOL(page_offset);
+EXPORT_SYMBOL(sparc_valid_addr_bitmap);
X
X #ifndef CONFIG_SUN4
X EXPORT_SYMBOL(stack_top);
@@ -211,6 +214,7 @@
X EXPORT_SYMBOL(prom_apply_obio_ranges);
X EXPORT_SYMBOL(prom_getname);
X EXPORT_SYMBOL(prom_feval);
+EXPORT_SYMBOL(prom_getbool);
X EXPORT_SYMBOL(prom_getstring);
X EXPORT_SYMBOL(prom_apply_sbus_ranges);
X EXPORT_SYMBOL(prom_getint);
@@ -268,6 +272,7 @@
X EXPORT_SYMBOL_NOVERS(memset);
X EXPORT_SYMBOL_NOVERS(memmove);
X EXPORT_SYMBOL_NOVERS(__ashrdi3);
+EXPORT_SYMBOL_NOVERS(__lshrdi3);
X
X EXPORT_SYMBOL_DOT(rem);
X EXPORT_SYMBOL_DOT(urem);
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/sys_sparc.c linux/arch/sparc/kernel/sys_sparc.c
--- v2.2.3/linux/arch/sparc/kernel/sys_sparc.c Sun Nov 8 14:02:45 1998
+++ linux/arch/sparc/kernel/sys_sparc.c Sun Mar 21 07:23:38 1999
@@ -1,4 +1,4 @@
-/* $Id: sys_sparc.c,v 1.49 1998/10/11 06:57:53 davem Exp $
+/* $Id: sys_sparc.c,v 1.51 1999/03/20 22:02:00 davem Exp $
X * linux/arch/sparc/kernel/sys_sparc.c
X *
X * This file contains various random system calls that
@@ -25,6 +25,8 @@
X #include <asm/uaccess.h>
X #include <asm/ipc.h>
X
+/* #define DEBUG_UNIMP_SYSCALL */
+
X /* XXX Make this per-binary type, this way we can detect the type of
X * XXX a binary. Every Sparc executable calls this very early on.
X */
@@ -189,6 +191,7 @@
X goto out;
X }
X retval = -ENOMEM;
+ len = PAGE_ALIGN(len);
X if(!(flags & MAP_FIXED) && !addr) {
X addr = get_unmapped_area(addr, len);
X if(!addr)
@@ -202,6 +205,7 @@
X
X if(ARCH_SUN4C_SUN4) {
X if(((addr >= 0x20000000) && (addr < 0xe0000000))) {
+ /* VM hole */
X retval = current->mm->brk;
X goto out_putf;
X }
@@ -223,9 +227,14 @@
X asmlinkage unsigned long
X c_sys_nis_syscall (struct pt_regs *regs)
X {
+ static int count = 0;
+
+ if (count++ > 5) return -ENOSYS;
X lock_kernel();
X printk ("Unimplemented SPARC system call %d\n",(int)regs->u_regs[1]);
+#ifdef DEBUG_UNIMP_SYSCALL
X show_regs (regs);
+#endif
X unlock_kernel();
X return -ENOSYS;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/systbls.S linux/arch/sparc/kernel/systbls.S
--- v2.2.3/linux/arch/sparc/kernel/systbls.S Mon Oct 5 13:13:37 1998
+++ linux/arch/sparc/kernel/systbls.S Sun Mar 21 07:23:38 1999
@@ -1,4 +1,4 @@
-/* $Id: systbls.S,v 1.80 1998/09/21 05:04:59 jj Exp $
+/* $Id: systbls.S,v 1.82 1999/03/20 22:01:59 davem Exp $
X * systbls.S: System call entry point tables for OS compatibility.
X * The native Linux system call table lives here also.
X *
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/time.c linux/arch/sparc/kernel/time.c
--- v2.2.3/linux/arch/sparc/kernel/time.c Wed Jan 20 23:14:04 1999
+++ linux/arch/sparc/kernel/time.c Mon Mar 15 16:10:43 1999
@@ -1,4 +1,4 @@
-/* $Id: time.c,v 1.39 1998/09/29 09:46:15 davem Exp $
+/* $Id: time.c,v 1.43 1999/03/15 22:13:31 davem Exp $
X * linux/arch/sparc/kernel/time.c
X *
X * Copyright (C) 1995 David S. Miller (da...@caip.rutgers.edu)
@@ -39,6 +39,8 @@
X #include <asm/sun4paddr.h>
X #include <asm/page.h>
X
+extern rwlock_t xtime_lock;
+
X enum sparc_clock_type sp_clock_typ;
X struct mostek48t02 *mstk48t02_regs = 0;
X struct mostek48t08 *mstk48t08_regs = 0;
@@ -80,7 +82,7 @@
X
X #ifdef CONFIG_SUN4
X if((idprom->id_machtype == (SM_SUN4 | SM_4_260)) ||
- (idprom->id_machtype == (SM_SUN4 | SM_4_110))) {
+ (idprom->id_machtype == (SM_SUN4 | SM_4_110))) {
X int temp;
X intersil_read_intr(intersil_clock, temp);
X /* re-enable the irq */
@@ -89,6 +91,8 @@
X #endif
X clear_clock_irq();
X
+ write_lock(&xtime_lock);
+
X do_timer(regs);
X
X /* Determine when to update the Mostek clock. */
@@ -101,6 +105,7 @@
X else
X last_rtc_update = xtime.tv_sec - 600; /* do it again in 60 s */
X }
+ write_unlock(&xtime_lock);
X }
X
X /* Converts Gregorian date to seconds since 1970-01-01 00:00:00.
@@ -436,6 +441,9 @@
X return offset + count;
X }
X
+/* This need not obtain the xtime_lock as it is coded in
+ * an implicitly SMP safe way already.
+ */
X void do_gettimeofday(struct timeval *tv)
X {
X #if CONFIG_AP1000
@@ -485,12 +493,13 @@
X
X void do_settimeofday(struct timeval *tv)
X {
+ write_lock_irq(&xtime_lock);
X bus_do_settimeofday(tv);
+ write_unlock_irq(&xtime_lock);
X }
X
X static void sbus_do_settimeofday(struct timeval *tv)
X {
- cli();
X #if !CONFIG_AP1000
X tv->tv_usec -= do_gettimeoffset();
X if(tv->tv_usec < 0) {
@@ -501,10 +510,8 @@
X xtime = *tv;
X time_adjust = 0; /* stop active adjtime() */
X time_status |= STA_UNSYNC;
- time_state = TIME_ERROR; /* p. 24, (a) */
X time_maxerror = NTP_PHASE_LIMIT;
X time_esterror = NTP_PHASE_LIMIT;
- sti();
X }
X
X /*
@@ -544,7 +551,7 @@
X } else {
X printk(KERN_WARNING
X "set_rtc_mmss: can't update from %d to %d\n",
- cmos_minutes, real_minutes);
+ mostek_minutes, real_minutes);
X return -1;
X }
X
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/kernel/traps.c linux/arch/sparc/kernel/traps.c
--- v2.2.3/linux/arch/sparc/kernel/traps.c Mon Oct 5 13:13:37 1998
+++ linux/arch/sparc/kernel/traps.c Wed Mar 10 16:53:36 1999
@@ -1,4 +1,4 @@
-/* $Id: traps.c,v 1.57 1998/09/17 11:04:51 jj Exp $
+/* $Id: traps.c,v 1.59 1999/03/06 12:07:31 anton Exp $
X * arch/sparc/kernel/traps.c
X *
X * Copyright 1995 David S. Miller (da...@caip.rutgers.edu)
@@ -82,8 +82,13 @@
X printk("\n");
X }
X
+#define __SAVE __asm__ __volatile__("save %sp, -0x40, %sp\n\t")
+#define __RESTORE __asm__ __volatile__("restore %g0, %g0, %g0\n\t")
+
X void die_if_kernel(char *str, struct pt_regs *regs)
X {
+ int count = 0;
+
X /* Amuse the user. */
X printk(
X " \\|/ ____ \\|/\n"
@@ -93,6 +98,27 @@
X
X printk("%s(%d): %s\n", current->comm, current->pid, str);
X show_regs(regs);
+
+ __SAVE; __SAVE; __SAVE; __SAVE;
+ __SAVE; __SAVE; __SAVE; __SAVE;
+ __RESTORE; __RESTORE; __RESTORE; __RESTORE;
+ __RESTORE; __RESTORE; __RESTORE; __RESTORE;
+
+ {
+ struct reg_window *rw = (struct reg_window *)regs->u_regs[UREG_FP];
+
+ /* Stop the back trace when we hit userland or we
+ * find some badly aligned kernel stack. Set an upper
+ * bound in case our stack is trashed and we loop.
+ */
+ while(rw &&
+ count++ < 30 &&
+ (((unsigned long) rw) >= PAGE_OFFSET) &&
+ !(((unsigned long) rw) & 0x7)) {
+ printk("Caller[%08lx]\n", rw->ins[7]);
+ rw = (struct reg_window *)rw->ins[6];
+ }
+ }
X printk("Instruction DUMP:");
X instruction_dump ((unsigned long *) regs->pc);
X if(regs->psr & PSR_PS)
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/lib/Makefile linux/arch/sparc/lib/Makefile
--- v2.2.3/linux/arch/sparc/lib/Makefile Tue Dec 22 14:16:54 1998
+++ linux/arch/sparc/lib/Makefile Sun Mar 21 07:23:38 1999
@@ -1,11 +1,11 @@
-# $Id: Makefile,v 1.26 1998/07/26 03:02:43 davem Exp $
+# $Id: Makefile,v 1.28 1999/03/21 06:37:44 davem Exp $
X # Makefile for Sparc library files..
X #
X
X OBJS = mul.o rem.o sdiv.o udiv.o umul.o urem.o ashrdi3.o memcpy.o memset.o \
X strlen.o checksum.o blockops.o memscan.o memcmp.o strncmp.o \
X strncpy_from_user.o divdi3.o udivdi3.o strlen_user.o \
- copy_user.o locks.o atomic.o bitops.o debuglocks.o
+ copy_user.o locks.o atomic.o bitops.o debuglocks.o lshrdi3.o
X
X ifdef CONFIG_SMP
X OBJS += irqlock.o
@@ -88,6 +88,9 @@
X
X ashrdi3.o: ashrdi3.S
X $(CC) -D__ASSEMBLY__ -c -o ashrdi3.o ashrdi3.S
+
+lshrdi3.o: lshrdi3.S
+ $(CC) -D__ASSEMBLY__ -c -o lshrdi3.o lshrdi3.S
X
X dep:
X
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/lib/atomic.S linux/arch/sparc/lib/atomic.S
--- v2.2.3/linux/arch/sparc/lib/atomic.S Thu Apr 23 20:21:30 1998
+++ linux/arch/sparc/lib/atomic.S Wed Mar 10 16:53:36 1999
@@ -51,12 +51,16 @@
X 1: ldstub [%g1 + 3], %g7 ! Spin on the byte lock for SMP.
X orcc %g7, 0x0, %g0 ! Did we get it?
X bne 1b ! Nope...
-#endif
X ld [%g1], %g7 ! Load locked atomic_t
X sra %g7, 8, %g7 ! Get signed 24-bit integer
X add %g7, %g2, %g2 ! Add in argument
X sll %g2, 8, %g7 ! Transpose back to atomic_t
X st %g7, [%g1] ! Clever: This releases the lock as well.
+#else
+ ld [%g1], %g7 ! Load locked atomic_t
+ add %g7, %g2, %g2 ! Add in argument
+ st %g2, [%g1] ! Store it back
+#endif
X wr %g3, 0x0, %psr ! Restore original PSR_PIL
X nop; nop; nop; ! Let the bits set
X jmpl %o7, %g0 ! NOTE: not + 8, see callers in atomic.h
@@ -72,12 +76,16 @@
X 1: ldstub [%g1 + 3], %g7 ! Spin on the byte lock for SMP.
X orcc %g7, 0x0, %g0 ! Did we get it?
X bne 1b ! Nope...
-#endif
X ld [%g1], %g7 ! Load locked atomic_t
X sra %g7, 8, %g7 ! Get signed 24-bit integer
X sub %g7, %g2, %g2 ! Subtract argument
X sll %g2, 8, %g7 ! Transpose back to atomic_t
X st %g7, [%g1] ! Clever: This releases the lock as well
+#else
+ ld [%g1], %g7 ! Load locked atomic_t
+ sub %g7, %g2, %g2 ! Subtract argument
+ st %g2, [%g1] ! Store it back
+#endif
X wr %g3, 0x0, %psr ! Restore original PSR_PIL
X nop; nop; nop; ! Let the bits set
X jmpl %o7, %g0 ! NOTE: not + 8, see callers in atomic.h
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/lib/debuglocks.c linux/arch/sparc/lib/debuglocks.c
--- v2.2.3/linux/arch/sparc/lib/debuglocks.c Sun Nov 8 14:02:45 1998
+++ linux/arch/sparc/lib/debuglocks.c Wed Mar 10 16:53:36 1999
@@ -1,4 +1,4 @@
-/* $Id: debuglocks.c,v 1.5 1998/10/14 09:19:04 jj Exp $
+/* $Id: debuglocks.c,v 1.6 1999/02/23 13:23:55 jj Exp $
X * debuglocks.c: Debugging versions of SMP locking primitives.
X *
X * Copyright (C) 1997 David S. Miller (da...@caip.rutgers.edu)
@@ -28,9 +28,11 @@
X static inline void show(char *str, spinlock_t *lock, unsigned long caller)
X {
X int cpu = smp_processor_id();
+ extern spinlock_t console_lock;
X
- printk("%s(%p) CPU#%d stuck at %08lx, owner PC(%08lx):CPU(%lx)\n",str,
- lock, cpu, caller, lock->owner_pc & ~3, lock->owner_pc & 3);
+ if (lock != &console_lock)
+ printk("%s(%p) CPU#%d stuck at %08lx, owner PC(%08lx):CPU(%lx)\n",str,
+ lock, cpu, caller, lock->owner_pc & ~3, lock->owner_pc & 3);
X }
X
X static inline void show_read(char *str, rwlock_t *lock, unsigned long caller)
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/lib/lshrdi3.S linux/arch/sparc/lib/lshrdi3.S
--- v2.2.3/linux/arch/sparc/lib/lshrdi3.S Wed Dec 31 16:00:00 1969
+++ linux/arch/sparc/lib/lshrdi3.S Sun Mar 21 07:23:38 1999
@@ -0,0 +1,29 @@
+/* $Id: lshrdi3.S,v 1.1 1999/03/21 06:37:45 davem Exp $ */
+
+#include <asm/cprefix.h>
+
+ .globl C_LABEL(__lshrdi3)
+C_LABEL(__lshrdi3):
+ cmp %o2, 0
+ be 3f
+ mov 0x20, %g2
+
+ sub %g2, %o2, %g2
+ cmp %g2, 0
+ bg 1f
+ srl %o0, %o2, %o4
+
+ clr %o4
+ neg %g2
+ b 2f
+ srl %o0, %g2, %o5
+1:
+ sll %o0, %g2, %g3
+ srl %o1, %o2, %g2
+ or %g2, %g3, %o5
+2:
+ mov %o4, %o0
+ mov %o5, %o1
+3:
+ retl
+ nop
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fabss.c linux/arch/sparc/math-emu/fabss.c
--- v2.2.3/linux/arch/sparc/math-emu/fabss.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fabss.c Wed Mar 10 16:53:36 1999
@@ -2,5 +2,5 @@
X {
X /* Clear the sign bit (high bit of word 0) */
X rd[0] = rs2[0] & 0x7fffffffUL;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fcmpd.c linux/arch/sparc/math-emu/fcmpd.c
--- v2.2.3/linux/arch/sparc/math-emu/fcmpd.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fcmpd.c Wed Mar 10 16:53:36 1999
@@ -14,5 +14,5 @@
X ret = 2;
X
X *fsr = (*fsr & ~0xc00) | (ret << 10);
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fcmped.c linux/arch/sparc/math-emu/fcmped.c
--- v2.2.3/linux/arch/sparc/math-emu/fcmped.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fcmped.c Wed Mar 10 16:53:36 1999
@@ -14,5 +14,5 @@
X ret = 2;
X
X *fsr = (*fsr & ~0xc00) | (ret << 10);
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fcmpeq.c linux/arch/sparc/math-emu/fcmpeq.c
--- v2.2.3/linux/arch/sparc/math-emu/fcmpeq.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fcmpeq.c Wed Mar 10 16:53:36 1999
@@ -14,5 +14,5 @@
X fsr = *(unsigned long *)rd;
X fsr &= ~0xc00; fsr |= (ret << 10);
X *(unsigned long *)rd = fsr;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fcmpes.c linux/arch/sparc/math-emu/fcmpes.c
--- v2.2.3/linux/arch/sparc/math-emu/fcmpes.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fcmpes.c Wed Mar 10 16:53:36 1999
@@ -14,5 +14,5 @@
X ret = 2;
X
X *fsr = (*fsr & ~0xc00) | (ret << 10);
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fcmpq.c linux/arch/sparc/math-emu/fcmpq.c
--- v2.2.3/linux/arch/sparc/math-emu/fcmpq.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fcmpq.c Wed Mar 10 16:53:36 1999
@@ -14,5 +14,5 @@
X fsr = *(unsigned long *)rd;
X fsr &= ~0xc00; fsr |= (ret << 10);
X *(unsigned long *)rd = fsr;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fcmps.c linux/arch/sparc/math-emu/fcmps.c
--- v2.2.3/linux/arch/sparc/math-emu/fcmps.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fcmps.c Wed Mar 10 16:53:36 1999
@@ -14,5 +14,5 @@
X ret = 2;
X
X *fsr = (*fsr & ~0xc00) | (ret << 10);
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fdmulq.c linux/arch/sparc/math-emu/fdmulq.c
--- v2.2.3/linux/arch/sparc/math-emu/fdmulq.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fdmulq.c Wed Mar 10 16:53:36 1999
@@ -11,6 +11,5 @@
X __FP_UNPACK_D(IN, rs2);
X FP_CONV(Q,D,4,2,B,IN);
X FP_MUL_Q(R, A, B);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fdtoq.c linux/arch/sparc/math-emu/fdtoq.c
--- v2.2.3/linux/arch/sparc/math-emu/fdtoq.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fdtoq.c Wed Mar 10 16:53:36 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_D(A, rs2);
X FP_CONV(Q,D,4,2,R,A);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fdtos.c linux/arch/sparc/math-emu/fdtos.c
--- v2.2.3/linux/arch/sparc/math-emu/fdtos.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fdtos.c Wed Mar 10 16:53:36 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_D(A, rs2);
X FP_CONV(S,D,1,2,R,A);
- __FP_PACK_S(rd, R);
- return 1;
+ return __FP_PACK_S(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fnegs.c linux/arch/sparc/math-emu/fnegs.c
--- v2.2.3/linux/arch/sparc/math-emu/fnegs.c Fri May 8 23:14:45 1998
+++ linux/arch/sparc/math-emu/fnegs.c Wed Mar 10 16:53:36 1999
@@ -2,5 +2,5 @@
X {
X /* just change the sign bit */
X rd[0] = rs2[0] ^ 0x80000000UL;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fqtod.c linux/arch/sparc/math-emu/fqtod.c
--- v2.2.3/linux/arch/sparc/math-emu/fqtod.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fqtod.c Wed Mar 10 16:53:36 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_Q(A, rs2);
X FP_CONV(D,Q,2,4,R,A);
- __FP_PACK_D(rd, R);
- return 1;
+ return __FP_PACK_D(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fqtos.c linux/arch/sparc/math-emu/fqtos.c
--- v2.2.3/linux/arch/sparc/math-emu/fqtos.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fqtos.c Wed Mar 10 16:53:36 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_Q(A, rs2);
X FP_CONV(S,Q,1,4,R,A);
- __FP_PACK_S(rd, R);
- return 1;
+ return __FP_PACK_S(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fsmuld.c linux/arch/sparc/math-emu/fsmuld.c
--- v2.2.3/linux/arch/sparc/math-emu/fsmuld.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fsmuld.c Wed Mar 10 16:53:36 1999
@@ -11,6 +11,5 @@
X __FP_UNPACK_S(IN, rs2);
X FP_CONV(D,S,2,1,B,IN);
X FP_MUL_D(R, A, B);
- __FP_PACK_D(rd, R);
- return 1;
+ return __FP_PACK_D(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fstod.c linux/arch/sparc/math-emu/fstod.c
--- v2.2.3/linux/arch/sparc/math-emu/fstod.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fstod.c Wed Mar 10 16:53:36 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_S(A, rs2);
X FP_CONV(D,S,2,1,R,A);
- __FP_PACK_D(rd, R);
- return 1;
+ return __FP_PACK_D(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/fstoq.c linux/arch/sparc/math-emu/fstoq.c
--- v2.2.3/linux/arch/sparc/math-emu/fstoq.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/fstoq.c Wed Mar 10 16:53:36 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_S(A, rs2);
X FP_CONV(Q,S,4,1,R,A);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/math.c linux/arch/sparc/math-emu/math.c
--- v2.2.3/linux/arch/sparc/math-emu/math.c Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/math.c Wed Mar 10 16:53:36 1999
@@ -124,6 +124,7 @@
X #include <linux/mm.h>
X #include <asm/uaccess.h>
X
+#include "soft-fp.h"
X
X #define FLOATFUNC(x) extern int x(void *,void *,void *)
X
@@ -189,6 +190,13 @@
X FLOATFUNC(FITOS); /* v6 */
X FLOATFUNC(FITOD); /* v6 */
X
+#define FSR_TEM_SHIFT 23UL
+#define FSR_TEM_MASK (0x1fUL << FSR_TEM_SHIFT)
+#define FSR_AEXC_SHIFT 5UL
+#define FSR_AEXC_MASK (0x1fUL << FSR_AEXC_SHIFT)
+#define FSR_CEXC_SHIFT 0UL
+#define FSR_CEXC_MASK (0x1fUL << FSR_CEXC_SHIFT)
+
X static int do_one_mathemu(u32 insn, unsigned long *fsr, unsigned long *fregs);
X
X /* Unlike the Sparc64 version (which has a struct fpustate), we
@@ -254,12 +262,85 @@
X break;
X }
X /* Now empty the queue and clear the queue_not_empty flag */
- fpt->tss.fsr &= ~0x3000;
+ if(retcode)
+ fpt->tss.fsr &= ~(0x3000 | FSR_CEXC_MASK);
+ else
+ fpt->tss.fsr &= ~0x3000;
X fpt->tss.fpqdepth = 0;
X
X return retcode;
X }
X
+/* All routines returning an exception to raise should detect
+ * such exceptions _before_ rounding to be consistant with
+ * the behavior of the hardware in the implemented cases
+ * (and thus with the recommendations in the V9 architecture
+ * manual).
+ *
+ * We return 0 if a SIGFPE should be sent, 1 otherwise.
+ */
+static int record_exception(unsigned long *pfsr, int eflag)
+{
+ unsigned long fsr = *pfsr;
+ int would_trap;
+
+ /* Determine if this exception would have generated a trap. */
+ would_trap = (fsr & ((long)eflag << FSR_TEM_SHIFT)) != 0UL;
+
+ /* If trapping, we only want to signal one bit. */
+ if(would_trap != 0) {
+ eflag &= ((fsr & FSR_TEM_MASK) >> FSR_TEM_SHIFT);
+ if((eflag & (eflag - 1)) != 0) {
+ if(eflag & EFLAG_INVALID)
+ eflag = EFLAG_INVALID;
+ else if(eflag & EFLAG_DIVZERO)
+ eflag = EFLAG_DIVZERO;
+ else if(eflag & EFLAG_INEXACT)
+ eflag = EFLAG_INEXACT;
+ }
+ }
+
+ /* Set CEXC, here are the rules:
+ *
+ * 1) In general all FPU ops will set one and only one
+ * bit in the CEXC field, this is always the case
+ * when the IEEE exception trap is enabled in TEM.
+ *
+ * 2) As a special case, if an overflow or underflow
+ * is being signalled, AND the trap is not enabled
+ * in TEM, then the inexact field shall also be set.
+ */
+ fsr &= ~(FSR_CEXC_MASK);
+ if(would_trap ||
+ (eflag & (EFLAG_OVERFLOW | EFLAG_UNDERFLOW)) == 0) {
+ fsr |= ((long)eflag << FSR_CEXC_SHIFT);
+ } else {
+ fsr |= (((long)eflag << FSR_CEXC_SHIFT) |
+ (EFLAG_INEXACT << FSR_CEXC_SHIFT));
+ }
+
+ /* Set the AEXC field, rules are:
+ *
+ * 1) If a trap would not be generated, the
+ * CEXC just generated is OR'd into the
+ * existing value of AEXC.
+ *
+ * 2) When a trap is generated, AEXC is cleared.
+ */
+ if(would_trap == 0)
+ fsr |= ((long)eflag << FSR_AEXC_SHIFT);
+ else
+ fsr &= ~(FSR_AEXC_MASK);
+
+ /* If trapping, indicate fault trap type IEEE. */
+ if(would_trap != 0)
+ fsr |= (1UL << 14);
+
+ *pfsr = fsr;
+
+ return (would_trap ? 0 : 1);
+}
+
X static int do_one_mathemu(u32 insn, unsigned long *fsr, unsigned long *fregs)
X {
X /* Emulate the given insn, updating fsr and fregs appropriately. */
@@ -270,7 +351,7 @@
X * (this field not used on sparc32 code, as we can't
X * extract trap type info for ops on the FP queue)
X */
- int freg;
+ int freg, eflag;
X int (*func)(void *,void *,void *) = NULL;
X void *rs1 = NULL, *rs2 = NULL, *rd = NULL;
X
@@ -411,6 +492,8 @@
X #ifdef DEBUG_MATHEMU
X printk("executing insn...\n");
X #endif
- func(rd, rs2, rs1); /* do the Right Thing */
- return 1; /* success! */
+ eflag = func(rd, rs2, rs1); /* do the Right Thing */
+ if(eflag == 0)
+ return 1; /* success! */
+ return record_exception(fsr, eflag);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/math-emu/sfp-machine.h linux/arch/sparc/math-emu/sfp-machine.h
--- v2.2.3/linux/arch/sparc/math-emu/sfp-machine.h Thu Apr 23 20:21:31 1998
+++ linux/arch/sparc/math-emu/sfp-machine.h Wed Mar 10 16:53:36 1999
@@ -115,16 +115,6 @@
X X##_s = _flo->bits.sign; \
X } while (0)
X
-#define __FP_PACK_RAW_1(fs, val, X) \
- do { \
- union _FP_UNION_##fs *_flo = \
- (union _FP_UNION_##fs *)val; \
- \
- _flo->bits.frac = X##_f; \
- _flo->bits.exp = X##_e; \
- _flo->bits.sign = X##_s; \
- } while (0)
-
X #define __FP_UNPACK_RAW_2(fs, X, val) \
X do { \
X union _FP_UNION_##fs *_flo = \
@@ -136,17 +126,6 @@
X X##_s = _flo->bits.sign; \
X } while (0)
X
-#define __FP_PACK_RAW_2(fs, val, X) \
- do { \
- union _FP_UNION_##fs *_flo = \
- (union _FP_UNION_##fs *)val; \
- \
- _flo->bits.frac0 = X##_f0; \
- _flo->bits.frac1 = X##_f1; \
- _flo->bits.exp = X##_e; \
- _flo->bits.sign = X##_s; \
- } while (0)
-
X #define __FP_UNPACK_RAW_4(fs, X, val) \
X do { \
X union _FP_UNION_##fs *_flo = \
@@ -160,55 +139,103 @@
X X##_s = _flo->bits.sign; \
X } while (0)
X
-#define __FP_PACK_RAW_4(fs, val, X) \
- do { \
- union _FP_UNION_##fs *_flo = \
- (union _FP_UNION_##fs *)val; \
- \
- _flo->bits.frac0 = X##_f[0]; \
- _flo->bits.frac1 = X##_f[1]; \
- _flo->bits.frac2 = X##_f[2]; \
- _flo->bits.frac3 = X##_f[3]; \
- _flo->bits.exp = X##_e; \
- _flo->bits.sign = X##_s; \
- } while (0)
-
X #define __FP_UNPACK_S(X,val) \
X do { \
X __FP_UNPACK_RAW_1(S,X,val); \
X _FP_UNPACK_CANONICAL(S,1,X); \
X } while (0)
X
-#define __FP_PACK_S(val,X) \
- do { \
- _FP_PACK_CANONICAL(S,1,X); \
- __FP_PACK_RAW_1(S,val,X); \
- } while (0)
-
X #define __FP_UNPACK_D(X,val) \
X do { \
X __FP_UNPACK_RAW_2(D,X,val); \
X _FP_UNPACK_CANONICAL(D,2,X); \
X } while (0)
X
-#define __FP_PACK_D(val,X) \
- do { \
- _FP_PACK_CANONICAL(D,2,X); \
- __FP_PACK_RAW_2(D,val,X); \
- } while (0)
-
X #define __FP_UNPACK_Q(X,val) \
X do { \
X __FP_UNPACK_RAW_4(Q,X,val); \
X _FP_UNPACK_CANONICAL(Q,4,X); \
X } while (0)
X
-#define __FP_PACK_Q(val,X) \
- do { \
- _FP_PACK_CANONICAL(Q,4,X); \
- __FP_PACK_RAW_4(Q,val,X); \
+#define __FP_PACK_RAW_1(fs, val, X) \
+ do { \
+ union _FP_UNION_##fs *_flo = \
+ (union _FP_UNION_##fs *)val; \
+ \
+ _flo->bits.frac = X##_f; \
+ _flo->bits.exp = X##_e; \
+ _flo->bits.sign = X##_s; \
+ } while (0)
+
+#define __FP_PACK_RAW_2(fs, val, X) \
+ do { \
+ union _FP_UNION_##fs *_flo = \
+ (union _FP_UNION_##fs *)val; \
+ \
+ _flo->bits.frac0 = X##_f0; \
+ _flo->bits.frac1 = X##_f1; \
+ _flo->bits.exp = X##_e; \
+ _flo->bits.sign = X##_s; \
+ } while (0)
+
+#define __FP_PACK_RAW_4(fs, val, X) \
+ do { \
+ union _FP_UNION_##fs *_flo = \
+ (union _FP_UNION_##fs *)val; \
+ \
+ _flo->bits.frac0 = X##_f[0]; \
+ _flo->bits.frac1 = X##_f[1]; \
+ _flo->bits.frac2 = X##_f[2]; \
+ _flo->bits.frac3 = X##_f[3]; \
+ _flo->bits.exp = X##_e; \
+ _flo->bits.sign = X##_s; \
X } while (0)
X
+#include <linux/kernel.h>
+#include <linux/sched.h>
+
+/* We only actually write to the destination register
+ * if exceptions signalled (if any) will not trap.
+ */
+#ifdef __SMP__
+#define __FPU_TEM \
+ (((current->tss.fsr)>>23)&0x1f)
+#else
+extern struct task_struct *last_task_used_math;
+#define __FPU_TEM \
+ (((last_task_used_math->tss.fsr)>>23)&0x1f)
+#endif
+#define __FPU_TRAP_P(bits) \
+ ((__FPU_TEM & (bits)) != 0)
+
+#define __FP_PACK_S(val,X) \
+({ int __exc = _FP_PACK_CANONICAL(S,1,X); \
+ if(!__exc || !__FPU_TRAP_P(__exc)) \
+ __FP_PACK_RAW_1(S,val,X); \
+ __exc; \
+})
+
+#define __FP_PACK_D(val,X) \
+({ int __exc = _FP_PACK_CANONICAL(D,2,X); \
+ if(!__exc || !__FPU_TRAP_P(__exc)) \
+ __FP_PACK_RAW_2(D,val,X); \
+ __exc; \
+})
+
+#define __FP_PACK_Q(val,X) \
+({ int __exc = _FP_PACK_CANONICAL(Q,4,X); \
+ if(!__exc || !__FPU_TRAP_P(__exc)) \
+ __FP_PACK_RAW_4(Q,val,X); \
+ __exc; \
+})
+
+/* Obtain the current rounding mode. */
+#ifdef __SMP__
+#define FP_ROUNDMODE ((current->tss.fsr >> 30) & 0x3)
+#else
+#define FP_ROUNDMODE ((last_task_used_math->tss.fsr >> 30) & 0x3)
+#endif
+
X /* the asm fragments go here: all these are taken from glibc-2.0.5's stdlib/longlong.h */
X
X #include <linux/types.h>
@@ -361,3 +388,9 @@
X #define __BYTE_ORDER __LITTLE_ENDIAN
X #endif
X
+/* Exception flags. */
+#define EFLAG_INVALID (1 << 4)
+#define EFLAG_OVERFLOW (1 << 3)
+#define EFLAG_UNDERFLOW (1 << 2)
+#define EFLAG_DIVZERO (1 << 1)
+#define EFLAG_INEXACT (1 << 0)
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/mm/Makefile linux/arch/sparc/mm/Makefile
--- v2.2.3/linux/arch/sparc/mm/Makefile Tue Dec 22 14:16:54 1998
+++ linux/arch/sparc/mm/Makefile Wed Mar 10 16:53:36 1999
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.32 1998/08/16 16:02:25 ecd Exp $
+# $Id: Makefile,v 1.33 1999/01/02 16:45:47 davem Exp $
X # Makefile for the linux Sparc-specific parts of the memory manager.
X #
X # Note! Dependencies are done automagically by 'make dep', which also
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/mm/fault.c linux/arch/sparc/mm/fault.c
--- v2.2.3/linux/arch/sparc/mm/fault.c Thu Nov 19 09:56:27 1998
+++ linux/arch/sparc/mm/fault.c Wed Mar 10 16:53:36 1999
@@ -1,4 +1,4 @@
-/* $Id: fault.c,v 1.96 1998/11/08 11:13:56 davem Exp $
+/* $Id: fault.c,v 1.101 1999/01/04 06:24:52 jj Exp $
X * fault.c: Page fault handlers for the Sparc.
X *
X * Copyright (C) 1995 David S. Miller (da...@caip.rutgers.edu)
@@ -13,11 +13,13 @@
X #include <linux/ptrace.h>
X #include <linux/mman.h>
X #include <linux/tasks.h>
+#include <linux/kernel.h>
X #include <linux/smp.h>
X #include <linux/signal.h>
X #include <linux/mm.h>
X #include <linux/smp.h>
X #include <linux/smp_lock.h>
+#include <linux/interrupt.h>
X
X #include <asm/system.h>
X #include <asm/segment.h>
@@ -149,9 +151,7 @@
X (unsigned long) tsk->mm->context);
X printk(KERN_ALERT "tsk->mm->pgd = %08lx\n",
X (unsigned long) tsk->mm->pgd);
- lock_kernel();
X die_if_kernel("Oops", regs);
- unlock_kernel();
X }
X
X asmlinkage int lookup_fault(unsigned long pc, unsigned long ret_pc,
@@ -201,6 +201,13 @@
X
X if(text_fault)
X address = regs->pc;
+
+ /*
+ * If we're in an interrupt or have no user
+ * context, we must not take the fault..
+ */
+ if (in_interrupt() || mm == &init_mm)
+ goto do_kernel_fault;
X
X down(&mm->mmap_sem);
X /* The kernel referencing a bad kernel pointer can lock up
diff -u --recursive --new-file v2.2.3/linux/arch/sparc/mm/init.c linux/arch/sparc/mm/init.c
--- v2.2.3/linux/arch/sparc/mm/init.c Mon Oct 5 13:13:37 1998
+++ linux/arch/sparc/mm/init.c Sun Mar 21 07:23:38 1999
@@ -1,4 +1,4 @@
-/* $Id: init.c,v 1.60 1998/09/13 04:30:31 davem Exp $
+/* $Id: init.c,v 1.63 1999/03/20 22:02:01 davem Exp $
X * linux/arch/sparc/mm/init.c
X *
X * Copyright (C) 1995 David S. Miller (da...@caip.rutgers.edu)
@@ -37,6 +37,8 @@
X
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 06'
echo 'File patch-2.2.4 is continued in part 07'
echo 07 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 08 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 08; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+ or %g1, %lo(sparc_execve), %g1
X sunos_execv:
- sethi %hi(sparc32_execve), %g1
- stx %g0, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I2]
- jmpl %g1 + %lo(sparc32_execve), %g0
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ stx %g0, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I2]
+sys32_execve:
+ sethi %hi(sparc32_execve), %g1
+ or %g1, %lo(sparc32_execve), %g1
+execve_merge:
+ flushw
+ jmpl %g1, %g0
+ add %sp, STACK_BIAS + REGWIN_SZ, %o0
X
X .globl sys_pipe, sys_execve, sys_sigpause, sys_nis_syscall
X .globl sys_sigsuspend, sys_rt_sigsuspend, sys32_rt_sigsuspend
@@ -612,14 +617,6 @@
X jmpl %g1 + %lo(c_sys_nis_syscall), %g0
X nop
X
-sys_execve: sethi %hi(sparc_execve), %g1
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
- jmpl %g1 + %lo(sparc_execve), %g0
- nop
-sys32_execve: sethi %hi(sparc32_execve), %g1
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
- jmpl %g1 + %lo(sparc32_execve), %g0
- nop
X sys_memory_ordering:
X sethi %hi(sparc_memory_ordering), %g1
X add %sp, STACK_BIAS + REGWIN_SZ, %o1
@@ -719,27 +716,30 @@
X .globl sys_fork, sys_vfork, sys_clone, sparc_exit
X .globl ret_from_syscall
X .align 32
-sys_fork:
-sys_vfork: mov SIGCHLD, %o0
- clr %o1
+sys_vfork: /* Under Linux, vfork and fork are just special cases of clone. */
+ sethi %hi(0x4000 | 0x0100 | SIGCHLD), %o0
+ or %o0, %lo(0x4000 | 0x0100 | SIGCHLD), %o0
+ ba,pt %xcc, sys_clone
+sys_fork: clr %o1
+ mov SIGCHLD, %o0
X sys_clone: flushw
- mov %o7, %l5
- add %sp, STACK_BIAS + REGWIN_SZ, %o2
X movrz %o1, %fp, %o1
- call do_fork
- mov %l5, %o7
+ nop
+ ba,pt %xcc, do_fork
+ add %sp, STACK_BIAS + REGWIN_SZ, %o2
X ret_from_syscall:
X /* Clear SPARC_FLAG_NEWCHILD, switch_to leaves tss.flags in
X * %o7 for us. Check performance counter stuff too.
X */
- andn %o7, 0x100, %o7
- sth %o7, [%g6 + AOFF_task_tss + AOFF_thread_flags]
X #ifdef __SMP__
- sethi %hi(scheduler_lock), %o4
- membar #StoreStore | #LoadStore
- stb %g0, [%o4 + %lo(scheduler_lock)]
+ andn %o7, 0x100, %l0
+ call schedule_tail
+ sth %l0, [%g6 + AOFF_task_tss + AOFF_thread_flags]
+#else
+ andn %o7, 0x100, %l0
+ sth %l0, [%g6 + AOFF_task_tss + AOFF_thread_flags]
X #endif
- andcc %o7, 0x200, %g0
+ andcc %l0, 0x200, %g0
X be,pt %icc, 1f
X nop
X ldx [%g6 + AOFF_task_tss + AOFF_thread_pcr_reg], %o7
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/head.S linux/arch/sparc64/kernel/head.S
--- v2.2.3/linux/arch/sparc64/kernel/head.S Sun Nov 8 14:02:46 1998
+++ linux/arch/sparc64/kernel/head.S Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: head.S,v 1.54 1998/10/06 20:48:30 ecd Exp $
+/* $Id: head.S,v 1.59 1999/01/06 01:37:35 davem Exp $
X * head.S: Initial boot code for the Sparc64 port of Linux.
X *
X * Copyright (C) 1996,1997 David S. Miller (da...@caip.rutgers.edu)
@@ -7,6 +7,7 @@
X * Copyright (C) 1997 Miguel de Icaza (mig...@nuclecu.unam.mx)
X */
X
+#include <linux/config.h>
X #include <linux/version.h>
X #include <linux/errno.h>
X #include <asm/asm_offsets.h>
@@ -330,7 +331,7 @@
X /* IMPORTANT NOTE: Whenever making changes here, check
X * trampoline.S as well. -jj */
X .globl setup_tba
-setup_tba:
+setup_tba: /* i0 = is_starfire */
X save %sp, -160, %sp
X
X rdpr %tba, %g7
@@ -376,9 +377,34 @@
X
X /* Setup Interrupt globals */
X wrpr %o1, (PSTATE_IG|PSTATE_IE), %pstate
- sethi %hi(ivector_to_mask), %g5
- or %g5, %lo(ivector_to_mask), %g1 /* IVECTOR table */
- mov 0x40, %g2 /* INTR data 0 register */
+#ifndef __SMP__
+ sethi %hi(__up_workvec), %g5
+ or %g5, %lo(__up_workvec), %g1
+#else
+ /* By definition of where we are, this is boot_cpu. */
+ sethi %hi(cpu_data), %g5
+ or %g5, %lo(cpu_data), %g5
+
+ brz,pt %i0, not_starfire
+ sethi %hi(0x1fff4000), %g1
+ or %g1, %lo(0x1fff4000), %g1
+ sllx %g1, 12, %g1
+ or %g1, 0xd0, %g1
+ lduwa [%g1] ASI_PHYS_BYPASS_EC_E, %g1
+ b,pt %xcc, set_worklist
+ nop
+
+not_starfire:
+ ldxa [%g0] ASI_UPA_CONFIG, %g1
+ srlx %g1, 17, %g1
+ and %g1, 0x1f, %g1
+
+ /* In theory this is: &(cpu_data[boot_cpu_id].irq_worklists[0]) */
+set_worklist:
+ sllx %g1, 7, %g1
+ add %g5, %g1, %g5
+ add %g5, 64, %g1
+#endif
X
X /* Kill PROM timer */
X wr %g0, 0, %tick_cmpr
@@ -407,6 +433,13 @@
X .globl empty_bad_page
X empty_bad_page:
X .skip 0x2000
+
+#ifdef CONFIG_SBUS
+/* This is just a hack to fool make depend config.h discovering
+ strategy: As the .S files below need config.h, but
+ make depend does not find it for them, we include config.h
+ in head.S */
+#endif
X
X ! 0x0000000000408000
X
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/ioctl32.c linux/arch/sparc64/kernel/ioctl32.c
--- v2.2.3/linux/arch/sparc64/kernel/ioctl32.c Thu Nov 19 09:56:27 1998
+++ linux/arch/sparc64/kernel/ioctl32.c Mon Mar 15 16:10:43 1999
@@ -1,4 +1,4 @@
-/* $Id: ioctl32.c,v 1.55 1998/11/17 07:43:17 davem Exp $
+/* $Id: ioctl32.c,v 1.59 1999/03/12 13:30:21 jj Exp $
X * ioctl32.c: Conversion between 32bit and 64bit native ioctls.
X *
X * Copyright (C) 1997 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
@@ -52,6 +52,7 @@
X #include <asm/openpromio.h>
X #include <asm/envctrl.h>
X #include <asm/audioio.h>
+#include <asm/ethtool.h>
X
X #include <linux/soundcard.h>
X
@@ -253,11 +254,23 @@
X case SIOCGPPPSTATS:
X case SIOCGPPPCSTATS:
X case SIOCGPPPVER:
+ case SIOCETHTOOL:
X if (copy_from_user(&ifr, (struct ifreq32 *)arg, sizeof(struct ifreq32)))
X return -EFAULT;
X ifr.ifr_data = (__kernel_caddr_t)get_free_page(GFP_KERNEL);
X if (!ifr.ifr_data)
X return -EAGAIN;
+ if(cmd == SIOCETHTOOL) {
+ u32 data;
+
+ __get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data));
+ if(copy_from_user(ifr.ifr_data,
+ (char *)A(data),
+ sizeof(struct ethtool_cmd))) {
+ free_page((unsigned long)ifr.ifr_data);
+ return -EFAULT;
+ }
+ }
X break;
X default:
X if (copy_from_user(&ifr, (struct ifreq32 *)arg, sizeof(struct ifreq32)))
@@ -280,17 +293,21 @@
X case SIOCGIFBRDADDR:
X case SIOCGIFDSTADDR:
X case SIOCGIFNETMASK:
+ case SIOCGIFTXQLEN:
X if (copy_to_user((struct ifreq32 *)arg, &ifr, sizeof(struct ifreq32)))
X return -EFAULT;
X break;
X case SIOCGPPPSTATS:
X case SIOCGPPPCSTATS:
X case SIOCGPPPVER:
+ case SIOCETHTOOL:
X {
X u32 data;
X int len;
X
X __get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data));
+ if(cmd == SIOCETHTOOL)
+ len = sizeof(struct ethtool_cmd);
X if(cmd == SIOCGPPPVER)
X len = strlen(PPP_VERSION) + 1;
X else if(cmd == SIOCGPPPCSTATS)
@@ -298,7 +315,9 @@
X else
X len = sizeof(struct ppp_stats);
X
- if (copy_to_user((char *)A(data), ifr.ifr_data, len))
+ len = copy_to_user((char *)A(data), ifr.ifr_data, len);
+ free_page((unsigned long)ifr.ifr_data);
+ if(len)
X return -EFAULT;
X break;
X }
@@ -1458,6 +1477,9 @@
X case SIOCGPPPSTATS:
X case SIOCGPPPCSTATS:
X case SIOCGPPPVER:
+ case SIOCGIFTXQLEN:
+ case SIOCSIFTXQLEN:
+ case SIOCETHTOOL:
X error = dev_ifsioc(fd, cmd, arg);
X goto out;
X
@@ -1583,7 +1605,7 @@
X * compatable types passed or none at all...
X */
X
- /* Bit T */
+ /* Big T */
X case TCGETA:
X case TCSETA:
X case TCSETAW:
@@ -1618,6 +1640,8 @@
X case TIOCSPGRP:
X case TIOCGPGRP:
X case TIOCSCTTY:
+ case TIOCGPTN:
+ case TIOCSPTLCK:
X
X /* Big F */
X case FBIOGTYPE:
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/irq.c linux/arch/sparc64/kernel/irq.c
--- v2.2.3/linux/arch/sparc64/kernel/irq.c Sun Nov 8 14:02:46 1998
+++ linux/arch/sparc64/kernel/irq.c Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: irq.c,v 1.66 1998/10/21 15:02:25 ecd Exp $
+/* $Id: irq.c,v 1.75 1999/01/28 12:37:56 jj Exp $
X * irq.c: UltraSparc IRQ handling/init/registry.
X *
X * Copyright (C) 1997 David S. Miller (da...@caip.rutgers.edu)
@@ -41,20 +41,30 @@
X #define SA_DMA_SYNC 0x200
X
X #ifdef __SMP__
-void distribute_irqs(void);
-static int irqs_have_been_distributed = 0;
+static void distribute_irqs(void);
X #endif
X
-/* UPA nodes send interrupt packet to UltraSparc with first data reg value
- * low 5 bits holding the IRQ identifier being delivered. We must translate
- * this into a non-vector IRQ so we can set the softint on this cpu. To
- * make things even more swift we store the complete mask here.
+/* UPA nodes send interrupt packet to UltraSparc with first data reg
+ * value low 5 (7 on Starfire) bits holding the IRQ identifier being
+ * delivered. We must translate this into a non-vector IRQ so we can
+ * set the softint on this cpu.
+ *
+ * To make processing these packets efficient and race free we use
+ * an array of irq buckets below. The interrupt vector handler in
+ * entry.S feeds incoming packets into per-cpu pil-indexed lists.
+ * The IVEC handler does not need to act atomically, the PIL dispatch
+ * code uses CAS to get an atomic snapshot of the list and clear it
+ * at the same time.
X */
X
-#define NUM_HARD_IVECS 2048
-#define NUM_IVECS (NUM_HARD_IVECS + 64) /* For SMP IRQ distribution alg. */
+struct ino_bucket ivector_table[NUM_IVECS] __attribute__ ((aligned (64)));
X
-unsigned long ivector_to_mask[NUM_IVECS];
+#ifndef __SMP__
+unsigned int __up_workvec[16] __attribute__ ((aligned (64)));
+#define irq_work(__cpu, __pil) &(__up_workvec[(__pil)])
+#else
+#define irq_work(__cpu, __pil) &(cpu_data[(__cpu)].irq_worklists[(__pil)])
+#endif
X
X /* This is based upon code in the 32-bit Sparc kernel written mostly by
X * David Redman (dj...@tadpole.co.uk).
@@ -63,30 +73,21 @@
X static struct irqaction static_irqaction[MAX_STATIC_ALLOC];
X static int static_irq_count = 0;
X
-/* XXX Must be exported so that fast IRQ handlers can get at it... -DaveM */
+/* This is exported so that fast IRQ handlers can get at it... -DaveM */
X struct irqaction *irq_action[NR_IRQS+1] = {
X NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL,
X NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL
X };
X
-#define IBF_DMA_SYNC 0x01
-#define IBF_PCI 0x02
-#define IBF_ACTIVE 0x04
+/* Only 8-bits are available, be careful. -DaveM */
+#define IBF_DMA_SYNC 0x01 /* DMA synchronization behind PCI bridge needed. */
+#define IBF_PCI 0x02 /* Indicates PSYCHO/SCHIZO PCI interrupt. */
+#define IBF_ACTIVE 0x04 /* This interrupt is active and has a handler. */
+#define IBF_MULTI 0x08 /* On PCI, indicates shared bucket. */
X
-#define __imap(bucket) ((bucket)->iclr + (bucket)->imap_off)
X #define __bucket(irq) ((struct ino_bucket *)(unsigned long)(irq))
X #define __irq(bucket) ((unsigned int)(unsigned long)(bucket))
X
-static struct ino_bucket *bucket_base, *buckets, *endbuckets;
-
-__initfunc(unsigned long irq_init(unsigned long start_mem, unsigned long end_mem))
-{
- start_mem = (start_mem + 15) & ~15;
- bucket_base = buckets = (struct ino_bucket *)start_mem;
- endbuckets = buckets + 2048;
- return (unsigned long)endbuckets;
-}
-
X int get_irq_list(char *buf)
X {
X int i, len = 0;
@@ -104,7 +105,7 @@
X #else
X for (j = 0; j < smp_num_cpus; j++)
X len += sprintf(buf + len, "%10u ",
- kstat.irqs[cpu_logical_map(j)][i]);
+ kstat.irqs[cpu_logical_map(j)][i]);
X #endif
X len += sprintf(buf + len, "%c %s",
X (action->flags & SA_INTERRUPT) ? '+' : ' ',
@@ -224,8 +225,7 @@
X 1, /* Power Management */
X };
X
-/* INO number to IMAP register offset for PSYCHO external IRQ's.
- */
+/* INO number to IMAP register offset for PSYCHO external IRQ's. */
X #define psycho_offset(x) ((unsigned long)(&(((struct psycho_regs *)0)->x)))
X
X #define psycho_imap_offset(ino) \
@@ -241,16 +241,27 @@
X /* Now these are always passed a true fully specified sun4u INO. */
X void enable_irq(unsigned int irq)
X {
+ extern int this_is_starfire;
X struct ino_bucket *bucket = __bucket(irq);
- unsigned long tid;
X unsigned int *imap;
+ unsigned long tid;
X
- imap = __imap(bucket);
- if (!imap) return;
+ imap = bucket->imap;
+ if (!imap)
+ return;
X
- /* We send it to our UPA MID, for SMP this will be different. */
- __asm__ __volatile__("ldxa [%%g0] %1, %0" : "=r" (tid) : "i" (ASI_UPA_CONFIG));
- tid = ((tid & UPA_CONFIG_MID) << 9);
+ if(this_is_starfire == 0) {
+ /* We set it to our UPA MID. */
+ __asm__ __volatile__("ldxa [%%g0] %1, %0"
+ : "=r" (tid)
+ : "i" (ASI_UPA_CONFIG));
+ tid = ((tid & UPA_CONFIG_MID) << 9);
+ } else {
+ extern unsigned int starfire_translate(unsigned int *imap,
+ unsigned int upaid);
+
+ tid = (starfire_translate(imap, current->processor) << 26);
+ }
X
X /* NOTE NOTE NOTE, IGN and INO are read-only, IGN is a product
X * of this SYSIO's preconfigured IGN in the SYSIO Control
@@ -269,35 +280,83 @@
X struct ino_bucket *bucket = __bucket(irq);
X unsigned int *imap;
X
- imap = __imap(bucket);
- if (!imap) return;
-
- /* NOTE: We do not want to futz with the IRQ clear registers
- * and move the state to IDLE, the SCSI code does call
- * disable_irq() to assure atomicity in the queue cmd
- * SCSI adapter driver code. Thus we'd lose interrupts.
- */
- *imap &= ~(SYSIO_IMAP_VALID);
+ imap = bucket->imap;
+ if (imap != NULL) {
+ /* NOTE: We do not want to futz with the IRQ clear registers
+ * and move the state to IDLE, the SCSI code does call
+ * disable_irq() to assure atomicity in the queue cmd
+ * SCSI adapter driver code. Thus we'd lose interrupts.
+ */
+ *imap &= ~(SYSIO_IMAP_VALID);
+ }
X }
X
+/* The timer is the one "weird" interrupt which is generated by
+ * the CPU %tick register and not by some normal vectored interrupt
+ * source. To handle this special case, we use this dummy INO bucket.
+ */
+static struct ino_bucket pil0_dummy_bucket = {
+ 0, /* irq_chain */
+ 0, /* pil */
+ 0, /* pending */
+ 0, /* flags */
+ 0, /* __unused */
+ NULL, /* irq_info */
+ NULL, /* iclr */
+ NULL, /* imap */
+};
+
X unsigned int build_irq(int pil, int inofixup, unsigned int *iclr, unsigned int *imap)
X {
- if (buckets == endbuckets)
- panic("Out of IRQ buckets. Should not happen.\n");
- buckets->pil = pil;
- if (pil && (!iclr || !imap)) {
- prom_printf("Invalid build_irq %d %d %016lx %016lx\n", pil, inofixup, iclr, imap);
+ struct ino_bucket *bucket;
+ unsigned short ino;
+
+ if(pil == 0) {
+ if(iclr != NULL || imap != NULL) {
+ prom_printf("Invalid dummy bucket for PIL0 (%p:%p)\n",
+ iclr, imap);
+ prom_halt();
+ }
+ return __irq(&pil0_dummy_bucket);
+ }
+
+ /* RULE: Both must be specified in all other cases. */
+ if (iclr == NULL || imap == NULL) {
+ prom_printf("Invalid build_irq %d %d %016lx %016lx\n",
+ pil, inofixup, iclr, imap);
X prom_halt();
X }
- if (imap)
- buckets->ino = (*imap & (SYSIO_IMAP_IGN | SYSIO_IMAP_INO)) + inofixup;
- else
- buckets->ino = 0;
-
- buckets->iclr = iclr;
- buckets->flags = 0;
- buckets->imap_off = imap - iclr;
- return __irq(buckets++);
+
+ ino = (*imap & (SYSIO_IMAP_IGN | SYSIO_IMAP_INO)) + inofixup;
+ if(ino > NUM_IVECS) {
+ prom_printf("Invalid INO %04x (%d:%d:%016lx:%016lx)\n",
+ ino, pil, inofixup, iclr, imap);
+ prom_halt();
+ }
+
+ /* Ok, looks good, set it up. Don't touch the irq_chain or
+ * the pending flag.
+ */
+ bucket = &ivector_table[ino];
+ if ((bucket->flags & IBF_ACTIVE) ||
+ (bucket->irq_info != NULL)) {
+ /* This is a gross fatal error if it happens here. */
+ prom_printf("IRQ: Trying to reinit INO bucket, fatal error.\n");
+ prom_printf("IRQ: Request INO %04x (%d:%d:%016lx:%016lx)\n",
+ ino, pil, inofixup, iclr, imap);
+ prom_printf("IRQ: Existing (%d:%016lx:%016lx)\n",
+ bucket->pil, bucket->iclr, bucket->imap);
+ prom_printf("IRQ: Cannot continue, halting...\n");
+ prom_halt();
+ }
+ bucket->imap = imap;
+ bucket->iclr = iclr;
+ bucket->pil = pil;
+ bucket->flags = 0;
+
+ bucket->irq_info = NULL;
+
+ return __irq(bucket);
X }
X
X unsigned int sbus_build_irq(void *buscookie, unsigned int ino)
@@ -382,8 +441,44 @@
X if(!(ino & 0x20))
X inofixup = ino & 0x03;
X
- bucket = __bucket(build_irq(pil, inofixup, iclr, imap));
-
+ /* First check for sharing. */
+ ino = (*imap & (SYSIO_IMAP_IGN | SYSIO_IMAP_INO)) + inofixup;
+ if (ino > NUM_IVECS) {
+ prom_printf("PSYCHO: Invalid INO %04x (%d:%d:%016lx:%016lx)\n",
+ ino, pil, inofixup, iclr, imap);
+ prom_halt();
+ }
+ bucket = &ivector_table[ino];
+ if(bucket->flags & IBF_ACTIVE) {
+ void *old_handler = bucket->irq_info;
+ unsigned long flags;
+
+ if(old_handler == NULL) {
+ prom_printf("PSYCHO: Active bucket, but no handler.\n");
+ prom_halt();
+ }
+ save_and_cli(flags);
+ if((bucket->flags & IBF_MULTI) == 0) {
+ void **vector;
+
+ vector = kmalloc(sizeof(void *) * 4,
+ GFP_KERNEL);
+
+ /* We might have slept. */
+ if((bucket->flags & IBF_MULTI) != 0) {
+ kfree(vector);
+ } else {
+ vector[0] = old_handler;
+ vector[1] = vector[2] = vector[3] = NULL;
+ bucket->irq_info = vector;
+ bucket->flags |= IBF_MULTI;
+ }
+ }
+ restore_flags(flags);
+ } else {
+ /* Just init the bucket */
+ bucket = __bucket(build_irq(pil, inofixup, iclr, imap));
+ }
X if (need_dma_sync)
X bucket->flags |= IBF_DMA_SYNC;
X
@@ -392,6 +487,20 @@
X }
X #endif
X
+static void atomic_bucket_insert(struct ino_bucket *bucket)
+{
+ unsigned long pstate;
+ unsigned int *ent;
+
+ __asm__ __volatile__("rdpr %%pstate, %0" : "=r" (pstate));
+ __asm__ __volatile__("wrpr %0, %1, %%pstate"
+ : : "r" (pstate), "i" (PSTATE_IE));
+ ent = irq_work(smp_processor_id(), bucket->pil);
+ bucket->irq_chain = *ent;
+ *ent = __irq(bucket);
+ __asm__ __volatile__("wrpr %0, 0x0, %%pstate" : : "r" (pstate));
+}
+
X int request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *),
X unsigned long irqflags, const char *name, void *dev_id)
X {
@@ -400,11 +509,16 @@
X unsigned long flags;
X int pending = 0;
X
- if (irq < 0x400000 || (irq & 0x80000000)) {
- prom_printf("request_irq with old style irq %08x %016lx\n", irq, handler);
- prom_halt();
- }
-
+ if ((bucket != &pil0_dummy_bucket) &&
+ (bucket < &ivector_table[0] ||
+ bucket >= &ivector_table[NUM_IVECS])) {
+ unsigned int *caller;
+
+ __asm__ __volatile__("mov %%i7, %0" : "=r" (caller));
+ printk(KERN_CRIT "request_irq: Old style IRQ registry attempt "
+ "from %p, irq %08x.\n", caller, irq);
+ return -EINVAL;
+ }
X if(!handler)
X return -EINVAL;
X
@@ -429,24 +543,26 @@
X }
X }
X
+ save_and_cli(flags);
+
X action = *(bucket->pil + irq_action);
X if(action) {
X if((action->flags & SA_SHIRQ) && (irqflags & SA_SHIRQ))
X for (tmp = action; tmp->next; tmp = tmp->next)
X ;
- else
+ else {
+ restore_flags(flags);
X return -EBUSY;
-
+ }
X if((action->flags & SA_INTERRUPT) ^ (irqflags & SA_INTERRUPT)) {
X printk("Attempt to mix fast and slow interrupts on IRQ%d "
X "denied\n", bucket->pil);
+ restore_flags(flags);
X return -EBUSY;
X }
X action = NULL; /* Or else! */
X }
X
- save_and_cli(flags);
-
X /* If this is flagged as statically allocated then we use our
X * private struct which is never freed.
X */
@@ -466,12 +582,65 @@
X return -ENOMEM;
X }
X
- if (irqflags & SA_IMAP_MASKED) {
- pending = ((ivector_to_mask[bucket->ino] & 0x80000000) != 0);
- ivector_to_mask[bucket->ino] = (1 << bucket->pil);
- if(pending)
- ivector_to_mask[bucket->ino] |= 0x80000000;
+ if ((irqflags & SA_IMAP_MASKED) == 0) {
+ bucket->irq_info = action;
X bucket->flags |= IBF_ACTIVE;
+ } else {
+ if((bucket->flags & IBF_ACTIVE) != 0) {
+ void *orig = bucket->irq_info;
+ void **vector = NULL;
+
+ if((bucket->flags & IBF_PCI) == 0) {
+ printk("IRQ: Trying to share non-PCI bucket.\n");
+ goto free_and_ebusy;
+ }
+ if((bucket->flags & IBF_MULTI) == 0) {
+ vector = kmalloc(sizeof(void *) * 4, GFP_KERNEL);
+ if(vector == NULL)
+ goto free_and_enomem;
+
+ /* We might have slept. */
+ if ((bucket->flags & IBF_MULTI) != 0) {
+ int ent;
+
+ kfree(vector);
+ vector = (void **)bucket->irq_info;
+ for(ent = 0; ent < 4; ent++) {
+ if (vector[ent] == NULL) {
+ vector[ent] = action;
+ break;
+ }
+ }
+ if (ent == 4)
+ goto free_and_ebusy;
+ } else {
+ vector[0] = orig;
+ vector[1] = action;
+ vector[2] = NULL;
+ vector[3] = NULL;
+ bucket->irq_info = vector;
+ bucket->flags |= IBF_MULTI;
+ }
+ } else {
+ int ent;
+
+ vector = (void **)orig;
+ for(ent = 0; ent < 4; ent++) {
+ if(vector[ent] == NULL) {
+ vector[ent] = action;
+ break;
+ }
+ }
+ if (ent == 4)
+ goto free_and_ebusy;
+ }
+ } else {
+ bucket->irq_info = action;
+ bucket->flags |= IBF_ACTIVE;
+ }
+ pending = bucket->pending;
+ if(pending)
+ bucket->pending = 0;
X }
X
X action->mask = (unsigned long) bucket;
@@ -489,15 +658,26 @@
X enable_irq(irq);
X
X /* We ate the IVEC already, this makes sure it does not get lost. */
- if(pending)
+ if(pending) {
+ atomic_bucket_insert(bucket);
X set_softint(1 << bucket->pil);
-
+ }
X restore_flags(flags);
+
X #ifdef __SMP__
- if(irqs_have_been_distributed)
- distribute_irqs();
+ distribute_irqs();
X #endif
X return 0;
+
+free_and_ebusy:
+ kfree(action);
+ restore_flags(flags);
+ return -EBUSY;
+
+free_and_enomem:
+ kfree(action);
+ restore_flags(flags);
+ return -ENOMEM;
X }
X
X void free_irq(unsigned int irq, void *dev_id)
@@ -507,9 +687,15 @@
X unsigned long flags;
X struct ino_bucket *bucket = __bucket(irq), *bp;
X
- if (irq < 0x400000 || (irq & 0x80000000)) {
- prom_printf("free_irq with old style irq %08x\n", irq);
- prom_halt();
+ if ((bucket != &pil0_dummy_bucket) &&
+ (bucket < &ivector_table[0] ||
+ bucket >= &ivector_table[NUM_IVECS])) {
+ unsigned int *caller;
+
+ __asm__ __volatile__("mov %%i7, %0" : "=r" (caller));
+ printk(KERN_CRIT "free_irq: Old style IRQ removal attempt "
+ "from %p, irq %08x.\n", caller, irq);
+ return;
X }
X
X action = *(bucket->pil + irq_action);
@@ -545,27 +731,59 @@
X *(bucket->pil + irq_action) = action->next;
X
X if(action->flags & SA_IMAP_MASKED) {
- unsigned int *imap = __imap(bucket);
+ unsigned int *imap = bucket->imap;
+ void **vector, *orig;
+ int ent;
+
+ orig = bucket->irq_info;
+ vector = (void **)orig;
+
+ if ((bucket->flags & IBF_MULTI) != 0) {
+ int other = 0;
+ void *orphan = NULL;
+ for(ent = 0; ent < 4; ent++) {
+ if(vector[ent] == action)
+ vector[ent] = NULL;
+ else if(vector[ent] != NULL) {
+ orphan = vector[ent];
+ other++;
+ }
+ }
X
- /*
- * Only free when no other shared irq uses this bucket.
- */
- tmp = *(bucket->pil + irq_action);
- for( ; tmp; tmp = tmp->next)
- if ((struct ino_bucket *)tmp->mask == bucket)
+ /* Only free when no other shared irq
+ * uses this bucket.
+ */
+ if(other) {
+ if (other == 1) {
+ /* Convert back to non-shared bucket. */
+ bucket->irq_info = orphan;
+ bucket->flags &= ~(IBF_MULTI);
+ kfree(vector);
+ }
X goto out;
+ }
+ } else {
+ bucket->irq_info = NULL;
+ }
X
- ivector_to_mask[bucket->ino] = 0;
-
+ /* This unique interrupt source is now inactive. */
X bucket->flags &= ~IBF_ACTIVE;
- for (bp = bucket_base; bp < endbuckets; bp++)
- if (__imap(bp) == imap && (bp->flags & IBF_ACTIVE))
+
+ /* See if any other buckets share this bucket's IMAP
+ * and are still active.
+ */
+ for(ent = 0; ent < NUM_IVECS; ent++) {
+ bp = &ivector_table[ent];
+ if(bp != bucket &&
+ bp->imap == imap &&
+ (bp->flags & IBF_ACTIVE) != 0)
X break;
- /*
- * Only disable when no other sub-irq levels of
- * the same imap are active.
+ }
+
+ /* Only disable when no other sub-irq levels of
+ * the same IMAP are active.
X */
- if (bp == endbuckets)
+ if (ent == NUM_IVECS)
X disable_irq(irq);
X }
X
@@ -607,10 +825,10 @@
X int cpu = smp_processor_id();
X
X printk("\n%s, CPU %d:\n", str, cpu);
- printk("irq: %d [%d %d]\n",
+ printk("irq: %d [%ld %ld]\n",
X atomic_read(&global_irq_count),
X cpu_data[0].irq_count, cpu_data[1].irq_count);
- printk("bh: %d [%d %d]\n",
+ printk("bh: %d [%ld %ld]\n",
X (spin_is_locked(&global_bh_count) ? 1 : 0),
X cpu_data[0].bh_count, cpu_data[1].bh_count);
X }
@@ -755,57 +973,56 @@
X
X #endif /* __SMP__ */
X
-void report_spurious_ivec(struct pt_regs *regs)
+void catch_disabled_ivec(struct pt_regs *regs)
X {
- extern unsigned long ivec_spurious_cookie;
-
-#if 0
- printk("IVEC: Spurious interrupt vector (%016lx) received at (%016lx)\n",
- ivec_spurious_cookie, regs->tpc);
-#endif
+ int cpu = smp_processor_id();
+ struct ino_bucket *bucket = __bucket(*irq_work(cpu, 0));
X
X /* We can actually see this on Ultra/PCI PCI cards, which are bridges
X * to other devices. Here a single IMAP enabled potentially multiple
X * unique interrupt sources (which each do have a unique ICLR register.
X *
X * So what we do is just register that the IVEC arrived, when registered
- * for real the request_irq() code will check the high bit and signal
+ * for real the request_irq() code will check the bit and signal
X * a local CPU interrupt for it.
X */
- ivector_to_mask[ivec_spurious_cookie] |= (0x80000000);
+#if 0
+ printk("IVEC: Spurious interrupt vector (%x) received at (%016lx)\n",
+ bucket - &ivector_table[0], regs->tpc);
+#endif
+ *irq_work(cpu, 0) = 0;
+ bucket->pending = 1;
X }
X
-void unexpected_irq(int irq, void *dev_cookie, struct pt_regs *regs)
-{
- int i;
- struct irqaction *action;
- unsigned int cpu_irq;
-
- cpu_irq = irq & NR_IRQS;
- action = *(cpu_irq + irq_action);
-
- prom_printf("Unexpected IRQ[%d]: ", irq);
- prom_printf("PC[%016lx] NPC[%016lx] FP[%016lx]\n",
- regs->tpc, regs->tnpc, regs->u_regs[14]);
-
- if(action) {
- prom_printf("Expecting: ");
- for(i = 0; i < 16; i++) {
- if(action->handler)
- prom_printf("[%s:%d:0x%016lx] ", action->name,
- i, (unsigned long) action->handler);
- }
- }
- prom_printf("AIEEE\n");
- prom_printf("bogus interrupt received\n");
- prom_cmdline ();
-}
+/* Tune this... */
+#define FORWARD_VOLUME 12
X
X void handler_irq(int irq, struct pt_regs *regs)
X {
- struct ino_bucket *bucket = NULL;
- struct irqaction *action, *act;
+ struct ino_bucket *bp, *nbp;
X int cpu = smp_processor_id();
+#ifdef __SMP__
+ extern int this_is_starfire;
+ int should_forward = (this_is_starfire == 0 &&
+ irq < 10 &&
+ current->pid != 0);
+ unsigned int buddy = 0;
+
+ /* 'cpu' is the MID (ie. UPAID), calculate the MID
+ * of our buddy.
+ */
+ if(should_forward != 0) {
+ buddy = cpu_number_map[cpu] + 1;
+ if (buddy >= NR_CPUS ||
+ (buddy = cpu_logical_map(buddy)) == -1)
+ buddy = cpu_logical_map(0);
+
+ /* Voo-doo programming. */
+ if(cpu_data[buddy].idle_volume < FORWARD_VOLUME)
+ should_forward = 0;
+ buddy <<= 26;
+ }
+#endif
X
X #ifndef __SMP__
X /*
@@ -817,30 +1034,55 @@
X clear_softint(1 << irq);
X
X irq_enter(cpu, irq);
- action = *(irq + irq_action);
X kstat.irqs[cpu][irq]++;
- if(!action) {
- unexpected_irq(irq, 0, regs);
- } else {
- act = action;
- do {
- if(act->flags & SA_IMAP_MASKED) {
- bucket = (struct ino_bucket *)act->mask;
- if(!(ivector_to_mask[bucket->ino] & 0x80000000))
- continue;
+
+ /* Sliiiick... */
+#ifndef __SMP__
+ bp = ((irq != 0) ?
+ __bucket(xchg32(irq_work(cpu, irq), 0)) :
+ &pil0_dummy_bucket);
+#else
+ bp = __bucket(xchg32(irq_work(cpu, irq), 0));
+#endif
+ for( ; bp != NULL; bp = nbp) {
+ unsigned char flags = bp->flags;
+
+ nbp = __bucket(bp->irq_chain);
+ if((flags & IBF_ACTIVE) != 0) {
+ if((flags & IBF_MULTI) == 0) {
+ struct irqaction *ap = bp->irq_info;
+ ap->handler(__irq(bp), ap->dev_id, regs);
+ } else {
+ void **vector = (void **)bp->irq_info;
+ int ent;
+ for(ent = 0; ent < 4; ent++) {
+ struct irqaction *ap = vector[ent];
+ if(ap != NULL)
+ ap->handler(__irq(bp), ap->dev_id, regs);
+ }
X }
- act->handler(__irq(bucket), act->dev_id, regs);
- } while((act = act->next) != NULL);
- act = action;
- do {
- if(act->flags & SA_IMAP_MASKED) {
- bucket = (struct ino_bucket *)act->mask;
- if(!(ivector_to_mask[bucket->ino] & 0x80000000))
- continue;
- ivector_to_mask[bucket->ino] &= ~(0x80000000);
- *(bucket->iclr) = SYSIO_ICLR_IDLE;
+ /* Only the dummy bucket lacks IMAP/ICLR. */
+ if(bp->pil != 0) {
+#ifdef __SMP__
+ /* Ok, here is what is going on:
+ * 1) Retargeting IRQs on Starfire is very
+ * expensive so just forget about it on them.
+ * 2) Moving around very high priority interrupts
+ * is a losing game.
+ * 3) If the current cpu is idle, interrupts are
+ * useful work, so keep them here. But do not
+ * pass to our neighbour if he is not very idle.
+ */
+ if (should_forward != 0) {
+ /* Push it to our buddy. */
+ should_forward = 0;
+ *(bp->imap) = (buddy | SYSIO_IMAP_VALID);
+ }
+#endif
+ *(bp->iclr) = SYSIO_ICLR_IDLE;
X }
- } while((act = act->next) != NULL);
+ } else
+ bp->pending = 1;
X }
X irq_exit(cpu, irq);
X }
@@ -856,10 +1098,13 @@
X
X irq_enter(cpu, irq);
X kstat.irqs[cpu][irq]++;
+
+ *(irq_work(cpu, irq)) = 0;
X bucket = (struct ino_bucket *)action->mask;
+
X floppy_interrupt(irq, dev_cookie, regs);
- ivector_to_mask[bucket->ino] &= ~(0x80000000);
X *(bucket->iclr) = SYSIO_ICLR_IDLE;
+
X irq_exit(cpu, irq);
X }
X #endif
@@ -897,11 +1142,21 @@
X struct ino_bucket *bucket = __bucket(irq);
X unsigned long flags;
X
- if (irq < 0x400000 || (irq & 0x80000000)) {
- prom_printf("request_irq with old style irq %08x %016lx\n", irq, handler);
- prom_halt();
- }
+ /* No pil0 dummy buckets allowed here. */
+ if (bucket < &ivector_table[0] ||
+ bucket >= &ivector_table[NUM_IVECS]) {
+ unsigned int *caller;
+
+ __asm__ __volatile__("mov %%i7, %0" : "=r" (caller));
+ printk(KERN_CRIT "request_fast_irq: Old style IRQ registry attempt "
+ "from %p, irq %08x.\n", caller, irq);
+ return -EINVAL;
+ }
X
+ /* Only IMAP style interrupts can be registered as fast. */
+ if(bucket->pil == 0)
+ return -EINVAL;
+
X if(!handler)
X return -EINVAL;
X
@@ -919,6 +1174,7 @@
X printk("request_fast_irq: Trying to register yet already owned.\n");
X return -EBUSY;
X }
+
X save_and_cli(flags);
X if(irqflags & SA_STATIC_ALLOC) {
X if(static_irq_count < MAX_STATIC_ALLOC)
@@ -936,7 +1192,8 @@
X }
X install_fast_irq(bucket->pil, handler);
X
- ivector_to_mask[bucket->ino] = (1 << bucket->pil);
+ bucket->irq_info = action;
+ bucket->flags |= IBF_ACTIVE;
X
X action->mask = (unsigned long) bucket;
X action->handler = handler;
@@ -949,9 +1206,9 @@
X enable_irq(irq);
X
X restore_flags(flags);
+
X #ifdef __SMP__
- if(irqs_have_been_distributed)
- distribute_irqs();
+ distribute_irqs();
X #endif
X return 0;
X }
@@ -1025,50 +1282,51 @@
X }
X
X #ifdef __SMP__
-/* Called from smp_commence, when we know how many cpus are in the system
- * and can have device IRQ's directed at them.
- */
-/* #define SMP_IRQ_VERBOSE */
-void distribute_irqs(void)
+static int retarget_one_irq(struct irqaction *p, int goal_cpu)
+{
+ extern int this_is_starfire;
+ struct ino_bucket *bucket = __bucket(p->mask);
+ unsigned int *imap = bucket->imap;
+ unsigned int tid;
+
+ /* Never change this, it causes problems on Ex000 systems. */
+ if (bucket->pil == 12)
+ return goal_cpu;
+
+ if(this_is_starfire == 0) {
+ tid = __cpu_logical_map[goal_cpu] << 26;
+ } else {
+ extern unsigned int starfire_translate(unsigned int *imap,
+ unsigned int upaid);
+
+ tid = (starfire_translate(imap, __cpu_logical_map[goal_cpu]) << 26);
+ }
+ *imap = SYSIO_IMAP_VALID | (tid & SYSIO_IMAP_TID);
+
+ goal_cpu++;
+ if(goal_cpu >= NR_CPUS ||
+ __cpu_logical_map[goal_cpu] == -1)
+ goal_cpu = 0;
+ return goal_cpu;
+}
+
+/* Called from request_irq. */
+static void distribute_irqs(void)
X {
X unsigned long flags;
X int cpu, level;
X
-#ifdef SMP_IRQ_VERBOSE
- printk("SMP: redistributing interrupts...\n");
-#endif
X save_and_cli(flags);
X cpu = 0;
X for(level = 0; level < NR_IRQS; level++) {
X struct irqaction *p = irq_action[level];
-
X while(p) {
- if(p->flags & SA_IMAP_MASKED) {
- struct ino_bucket *bucket = (struct ino_bucket *)p->mask;
- unsigned int *imap = __imap(bucket);
- unsigned int val;
- unsigned long tid = __cpu_logical_map[cpu] << 26;
-
- val = *imap;
- *imap = SYSIO_IMAP_VALID | (tid & SYSIO_IMAP_TID);
-
-#ifdef SMP_IRQ_VERBOSE
- printk("SMP: Redirecting IGN[%x] INO[%x] "
- "to cpu %d [%s]\n",
- (val & SYSIO_IMAP_IGN) >> 6,
- (val & SYSIO_IMAP_INO), cpu,
- p->name);
-#endif
-
- cpu++;
- if (cpu >= NR_CPUS || __cpu_logical_map[cpu] == -1)
- cpu = 0;
- }
+ if(p->flags & SA_IMAP_MASKED)
+ cpu = retarget_one_irq(p, cpu);
X p = p->next;
X }
X }
X restore_flags(flags);
- irqs_have_been_distributed = 1;
X }
X #endif
X
@@ -1146,13 +1404,13 @@
X static int called = 0;
X
X if (called == 0) {
- int i;
-
X called = 1;
X map_prom_timers();
X kill_prom_timer();
- for(i = 0; i < NUM_IVECS; i++)
- ivector_to_mask[i] = 0;
+ memset(&ivector_table[0], 0, sizeof(ivector_table));
+#ifndef __SMP__
+ memset(&__up_workvec[0], 0, sizeof(__up_workvec));
+#endif
X }
X
X /* We need to clear any IRQ's pending in the soft interrupt
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/itlb_base.S linux/arch/sparc64/kernel/itlb_base.S
--- v2.2.3/linux/arch/sparc64/kernel/itlb_base.S Thu Aug 6 14:06:30 1998
+++ linux/arch/sparc64/kernel/itlb_base.S Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: itlb_base.S,v 1.5 1998/06/15 16:59:32 jj Exp $
+/* $Id: itlb_base.S,v 1.7 1999/03/02 15:42:12 jj Exp $
X * itlb_base.S: Front end to ITLB miss replacement strategy.
X * This is included directly into the trap table.
X *
@@ -15,11 +15,9 @@
X * 2) All user instruction misses.
X *
X * All real page faults merge their code paths to the
- * sparc64_realfault_* labels below.
+ * sparc64_realfault_common label below.
X */
X
- .globl sparc64_vpte_patchme
-
X /* ITLB ** ICACHE line 1: Quick user TLB misses */
X ldxa [%g1 + %g1] ASI_IMMU, %g4 ! Get TAG_ACCESS
X srax %g4, VPTE_SHIFT, %g6 ! Create VPTE offset
@@ -42,28 +40,25 @@
X
X /* ITLB ** ICACHE line 3: Real faults */
X rdpr %tpc, %g5 ! And load faulting VA
+ clr %g4 ! It was read
X sparc64_realfault_common: ! Called by TL0 dtlb_miss too
X sethi %hi(1f), %g7 ! Save state
X ba,pt %xcc, etrap ! ...
X 1: or %g7, %lo(1b), %g7 ! ...
- clr %o2 ! It was read
-sparc64_realfault_continue: ! Called by dtlb_prot handler
+ mov %l4, %o2 ! Read/Write/No idea
X srlx %l5, PAGE_SHIFT, %o1 ! Page align faulting VA
X add %sp, STACK_BIAS + REGWIN_SZ, %o0! Compute pt_regs arg
- call do_sparc64_fault ! Call fault handler
X
X /* ITLB ** ICACHE line 4: Call fault processing code */
+ call do_sparc64_fault ! Call fault handler
X sllx %o1, PAGE_SHIFT, %o1 ! Finish page alignment
X ba,a,pt %xcc, rtrap_clr_l6 ! Restore cpu state
+ nop
X winfix_trampoline:
X rdpr %tpc, %g3 ! Prepare winfixup TNPC
X or %g3, 0x7c, %g3 ! Compute offset to branch
X wrpr %g3, %tnpc ! Write it into TNPC
X done ! Do it to it
-sparc64_vpte_nucleus:
- ba,pt %xcc, sparc64_vpte_continue ! Part of dtlb_backend
-sparc64_vpte_patchme:
- sethi %hi(0), %g5 ! This has to be patched
X
X #undef TAG_CONTEXT_BITS
X #undef VPTE_SHIFT
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/process.c linux/arch/sparc64/kernel/process.c
--- v2.2.3/linux/arch/sparc64/kernel/process.c Sun Nov 8 14:02:46 1998
+++ linux/arch/sparc64/kernel/process.c Sun Mar 21 18:37:56 1999
@@ -1,4 +1,4 @@
-/* $Id: process.c,v 1.82 1998/10/19 21:52:23 davem Exp $
+/* $Id: process.c,v 1.90 1999/03/22 02:12:16 davem Exp $
X * arch/sparc64/kernel/process.c
X *
X * Copyright (C) 1995, 1996 David S. Miller (da...@caip.rutgers.edu)
@@ -53,11 +53,17 @@
X
X /* endless idle loop with no priority at all */
X current->priority = 0;
- current->counter = 0;
+ current->counter = -100;
X for (;;) {
- check_pgt_cache();
- run_task_queue(&tq_scheduler);
+ /* If current->need_resched is zero we should really
+ * setup for a system wakup event and execute a shutdown
+ * instruction.
+ *
+ * But this requires writing back the contents of the
+ * L2 cache etc. so implement this later. -DaveM
+ */
X schedule();
+ check_pgt_cache();
X }
X return 0;
X }
@@ -67,20 +73,25 @@
X /*
X * the idle loop on a UltraMultiPenguin...
X */
+#define idle_me_harder() (cpu_data[current->processor].idle_volume += 1)
+#define unidle_me() (cpu_data[current->processor].idle_volume = 0)
X asmlinkage int cpu_idle(void)
X {
X current->priority = 0;
+ current->counter = -100;
X while(1) {
- struct task_struct *p;
-
- check_pgt_cache();
- run_task_queue(&tq_scheduler);
- current->counter = 0;
- if (current->need_resched != 0 ||
- ((p = init_task.next_run) != NULL &&
- (p->processor == smp_processor_id() ||
- (p->tss.flags & SPARC_FLAG_NEWCHILD) != 0)))
+ if (current->need_resched != 0) {
+ unidle_me();
X schedule();
+ check_pgt_cache();
+ }
+ idle_me_harder();
+
+ /* The store ordering is so that IRQ handlers on
+ * other cpus see our increasing idleness for the buddy
+ * redistribution algorithm. -DaveM
+ */
+ membar("#StoreStore | #StoreLoad");
X }
X }
X
@@ -158,12 +169,12 @@
X }
X rw = &r_w;
X set_fs (old_fs);
- printk("l0: %016x l1: %016x l2: %016x l3: %016x\n"
- "l4: %016x l5: %016x l6: %016x l7: %016x\n",
+ printk("l0: %08x l1: %08x l2: %08x l3: %08x "
+ "l4: %08x l5: %08x l6: %08x l7: %08x\n",
X rw->locals[0], rw->locals[1], rw->locals[2], rw->locals[3],
X rw->locals[4], rw->locals[5], rw->locals[6], rw->locals[7]);
- printk("i0: %016x i1: %016x i2: %016x i3: %016x\n"
- "i4: %016x i5: %016x i6: %016x i7: %016x\n",
+ printk("i0: %08x i1: %08x i2: %08x i3: %08x "
+ "i4: %08x i5: %08x i6: %08x i7: %08x\n",
X rw->ins[0], rw->ins[1], rw->ins[2], rw->ins[3],
X rw->ins[4], rw->ins[5], rw->ins[6], rw->ins[7]);
X }
@@ -340,13 +351,13 @@
X {
X printk("PSR: %08x PC: %08x NPC: %08x Y: %08x\n", regs->psr,
X regs->pc, regs->npc, regs->y);
- printk("g0: %08x g1: %08x g2: %08x g3: %08x\n",
+ printk("g0: %08x g1: %08x g2: %08x g3: %08x ",
X regs->u_regs[0], regs->u_regs[1], regs->u_regs[2],
X regs->u_regs[3]);
X printk("g4: %08x g5: %08x g6: %08x g7: %08x\n",
X regs->u_regs[4], regs->u_regs[5], regs->u_regs[6],
X regs->u_regs[7]);
- printk("o0: %08x o1: %08x o2: %08x o3: %08x\n",
+ printk("o0: %08x o1: %08x o2: %08x o3: %08x ",
X regs->u_regs[8], regs->u_regs[9], regs->u_regs[10],
X regs->u_regs[11]);
X printk("o4: %08x o5: %08x sp: %08x ret_pc: %08x\n",
@@ -427,9 +438,7 @@
X /* exec_mmap() set context to NO_CONTEXT, here is
X * where we grab a new one.
X */
- current->mm->cpu_vm_mask = 0;
X activate_context(current);
- current->mm->cpu_vm_mask = (1UL<<smp_processor_id());
X }
X if (current->tss.flags & SPARC_FLAG_32BIT)
X __asm__ __volatile__("stxa %%g0, [%0] %1"
@@ -447,6 +456,11 @@
X {
X unsigned long fp, distance, rval;
X
+ /* do_fork() grabs the parent semaphore, we must release it
+ * temporarily so we can build the child clone stack frame
+ * without deadlocking.
+ */
+ up(¤t->mm->mmap_sem);
X if(!(current->tss.flags & SPARC_FLAG_32BIT)) {
X csp += STACK_BIAS;
X psp += STACK_BIAS;
@@ -463,17 +477,20 @@
X distance = fp - psp;
X rval = (csp - distance);
X if(copy_in_user(rval, psp, distance))
- return 0;
- if(current->tss.flags & SPARC_FLAG_32BIT) {
+ rval = 0;
+ else if(current->tss.flags & SPARC_FLAG_32BIT) {
X if(put_user(((u32)csp), &(((struct reg_window32 *)rval)->ins[6])))
- return 0;
- return rval;
+ rval = 0;
X } else {
X if(put_user(((u64)csp - STACK_BIAS),
X &(((struct reg_window *)rval)->ins[6])))
- return 0;
- return rval - STACK_BIAS;
+ rval = 0;
+ else
+ rval = rval - STACK_BIAS;
X }
+ down(¤t->mm->mmap_sem);
+
+ return rval;
X }
X
X /* Standard stuff. */
@@ -621,6 +638,37 @@
X /* Set the second return value for the parent. */
X regs->u_regs[UREG_I1] = 0;
X return 0;
+}
+
+/*
+ * This is the mechanism for creating a new kernel thread.
+ *
+ * NOTE! Only a kernel-only process(ie the swapper or direct descendants
+ * who haven't done an "execve()") should use this: it will work within
+ * a system call from a "real" process, but the process memory space will
+ * not be free'd until both the parent and the child have exited.
+ */
+pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
+{
+ long retval;
+
+ __asm__ __volatile("mov %1, %%g1\n\t"
+ "mov %2, %%o0\n\t" /* Clone flags. */
+ "mov 0, %%o1\n\t" /* usp arg == 0 */
+ "t 0x6d\n\t" /* Linux/Sparc clone(). */
+ "brz,a,pn %%o1, 1f\n\t" /* Parent, just return. */
+ " mov %%o0, %0\n\t"
+ "jmpl %4, %%o7\n\t" /* Call the function. */
+ " mov %5, %%o0\n\t" /* Set arg in delay. */
+ "mov %3, %%g1\n\t"
+ "t 0x6d\n\t" /* Linux/Sparc exit(). */
+ /* Notreached by child. */
+ "1:" :
+ "=r" (retval) :
+ "i" (__NR_clone), "r" (flags | CLONE_VM),
+ "i" (__NR_exit), "r" (fn), "r" (arg) :
+ "g1", "o0", "o1", "memory", "cc");
+ return retval;
X }
X
X /*
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/psycho.c linux/arch/sparc64/kernel/psycho.c
--- v2.2.3/linux/arch/sparc64/kernel/psycho.c Thu Nov 19 09:56:27 1998
+++ linux/arch/sparc64/kernel/psycho.c Fri Mar 19 07:57:45 1999
@@ -1,8 +1,9 @@
-/* $Id: psycho.c,v 1.66 1998/11/02 22:27:45 davem Exp $
+/* $Id: psycho.c,v 1.79 1999/03/19 05:38:46 davem Exp $
X * psycho.c: Ultra/AX U2P PCI controller support.
X *
X * Copyright (C) 1997 David S. Miller (da...@caipfs.rutgers.edu)
X * Copyright (C) 1998 Eddie C. Dost (e...@skynet.be)
+ * Copyright (C) 1999 Jakub Jelinek (j...@ultra.linux.cz)
X */
X
X #include <linux/config.h>
@@ -29,14 +30,13 @@
X #define dprintf printk
X #endif
X
-
X unsigned long pci_dvma_offset = 0x00000000UL;
X unsigned long pci_dvma_mask = 0xffffffffUL;
X
+#define PCI_DVMA_HASH_NONE 0xffffffffffffffffUL
X unsigned long pci_dvma_v2p_hash[PCI_DVMA_HASHSZ];
X unsigned long pci_dvma_p2v_hash[PCI_DVMA_HASHSZ];
X
-
X #ifndef CONFIG_PCI
X
X int pcibios_present(void)
@@ -74,9 +74,12 @@
X #include <asm/apb.h>
X #include <asm/uaccess.h>
X
+#define PSYCHO_REORDER_ONBOARDFIRST 1
+
X struct linux_psycho *psycho_root = NULL;
X int linux_num_psycho = 0;
X static struct linux_pbm_info *bus2pbm[256];
+static int psycho_reorder __initdata = 0;
X
X static int pbm_read_config_byte(struct linux_pbm_info *pbm,
X unsigned char bus, unsigned char devfn,
@@ -112,8 +115,10 @@
X pci_dvma_p2v_hash[pci_dvma_ahashfn(dvma_addr)] = vaddr - dvma_addr;
X }
X
-__initfunc(static void psycho_iommu_init(struct linux_psycho *psycho, int tsbsize))
+static void __init psycho_iommu_init(struct linux_psycho *psycho, int tsbsize)
X {
+ extern int this_is_starfire;
+ extern void *starfire_hookup(int);
X struct linux_mlist_p1275 *mlist;
X unsigned long tsbbase;
X unsigned long control, i, n;
@@ -137,37 +142,77 @@
X break;
X }
X tsbbase = __get_free_pages(GFP_DMA, order);
+ if (!tsbbase) {
+ prom_printf("IOMMU: Error, kmalloc(tsb) failed.\n");
+ prom_halt();
+ }
X iopte = (unsigned long *)tsbbase;
X
- memset(pci_dvma_v2p_hash, 0, sizeof(pci_dvma_v2p_hash));
- memset(pci_dvma_p2v_hash, 0, sizeof(pci_dvma_p2v_hash));
+ /* Initialize to "none" settings. */
+ for(i = 0; i < PCI_DVMA_HASHSZ; i++) {
+ pci_dvma_v2p_hash[i] = PCI_DVMA_HASH_NONE;
+ pci_dvma_p2v_hash[i] = PCI_DVMA_HASH_NONE;
+ }
X
X n = 0;
X mlist = *prom_meminfo()->p1275_totphys;
X while (mlist) {
X unsigned long paddr = mlist->start_adr;
+ unsigned long num_bytes = mlist->num_bytes;
+
+ if(paddr >= (((unsigned long) high_memory) - PAGE_OFFSET))
+ goto next;
+
+ if((paddr + num_bytes) >= (((unsigned long) high_memory) - PAGE_OFFSET))
+ num_bytes = (((unsigned long) high_memory) - PAGE_OFFSET) - paddr;
+
+ /* Align base and length so we map whole hash table sized chunks
+ * at a time (and therefore full 64K IOMMU pages).
+ */
+ paddr &= ~((1UL << 24UL) - 1);
+ num_bytes = (num_bytes + ((1UL << 24UL) - 1)) & ~((1UL << 24) - 1);
X
- for (i = 0; i < (mlist->num_bytes >> 16); i++) {
+ /* Move up the base for mappings already created. */
+ while(pci_dvma_v2p_hash[pci_dvma_ahashfn(paddr)] !=
+ PCI_DVMA_HASH_NONE) {
+ paddr += (1UL << 24UL);
+ num_bytes -= (1UL << 24UL);
+ if(num_bytes == 0UL)
+ goto next;
+ }
+
+ /* Move down the size for tail mappings already created. */
+ while(pci_dvma_v2p_hash[pci_dvma_ahashfn(paddr + num_bytes - (1UL << 24UL))] !=
+ PCI_DVMA_HASH_NONE) {
+ num_bytes -= (1UL << 24UL);
+ if(num_bytes == 0UL)
+ goto next;
+ }
X
+ /* Now map the rest. */
+ for (i = 0; i < ((num_bytes + ((1 << 16) - 1)) >> 16); i++) {
X *iopte = (IOPTE_VALID | IOPTE_64K |
X IOPTE_CACHE | IOPTE_WRITE);
X *iopte |= paddr;
X
X if (!(n & 0xff))
X set_dvma_hash(paddr, (n << 16));
-
+
X if (++n > (tsbsize * 1024))
X goto out;
X
X paddr += (1 << 16);
X iopte++;
X }
-
+ next:
X mlist = mlist->theres_more;
X }
X out:
- if (mlist)
- printk("WARNING: not all physical memory mapped in IOMMU\n");
+ if (mlist) {
+ prom_printf("WARNING: not all physical memory mapped in IOMMU\n");
+ prom_printf("Try booting with mem=xxxM or similar\n");
+ prom_halt();
+ }
X
X psycho->psycho_regs->iommu_tsbbase = __pa(tsbbase);
X
@@ -193,6 +238,12 @@
X break;
X }
X psycho->psycho_regs->iommu_control = control;
+
+ /* If necessary, hook us up for starfire IRQ translations. */
+ if(this_is_starfire)
+ psycho->starfire_cookie = starfire_hookup(psycho->upa_portid);
+ else
+ psycho->starfire_cookie = NULL;
X }
X
X extern void prom_pbm_ranges_init(int node, struct linux_pbm_info *pbm);
@@ -201,7 +252,7 @@
X /*
X * Poor man's PCI...
X */
-__initfunc(void sabre_init(int pnode))
+void __init sabre_init(int pnode)
X {
X struct linux_prom64_registers pr_regs[2];
X struct linux_psycho *sabre;
@@ -213,6 +264,10 @@
X int bus;
X
X sabre = kmalloc(sizeof(struct linux_psycho), GFP_ATOMIC);
+ if (!sabre) {
+ prom_printf("SABRE: Error, kmalloc(sabre) failed.\n");
+ prom_halt();
+ }
X
X portid = prom_getintdefault(pnode, "upa-portid", 0xff);
X
@@ -248,9 +303,11 @@
X prom_halt();
X }
X
- printk("PCI: Found SABRE, main regs at %p\n", sabre->psycho_regs);
+ printk("PCI: Found SABRE, main regs at %p CTRL[%016lx]\n",
+ sabre->psycho_regs, sabre->psycho_regs->control);
X #ifdef PROM_DEBUG
- dprintf("PCI: Found SABRE, main regs at %p\n", sabre->psycho_regs);
+ dprintf("PCI: Found SABRE, main regs at %p CTRL[%016lx]\n",
+ sabre->psycho_regs, sabre->psycho_regs->control);
X #endif
X
X ctrl = sabre->psycho_regs->pci_a_control;
@@ -382,7 +439,7 @@
X return psycho->pci_bus ? 1 : 0;
X }
X
-__initfunc(void pcibios_init(void))
+void __init pcibios_init(void)
X {
X struct linux_prom64_registers pr_regs[3];
X struct linux_psycho *psycho;
@@ -408,8 +465,6 @@
X goto next_pci;
X }
X
- psycho = kmalloc(sizeof(struct linux_psycho), GFP_ATOMIC);
-
X portid = prom_getintdefault(node, "upa-portid", 0xff);
X for(search = psycho_root; search; search = search->next) {
X if(search->upa_portid == portid) {
@@ -424,6 +479,11 @@
X }
X }
X
+ psycho = kmalloc(sizeof(struct linux_psycho), GFP_ATOMIC);
+ if (!psycho) {
+ prom_printf("PSYCHO: Error, kmalloc(psycho) failed.\n");
+ prom_halt();
+ }
X memset(psycho, 0, sizeof(*psycho));
X
X psycho->next = psycho_root;
@@ -494,8 +554,14 @@
X is_pbm_a = ((pr_regs[0].phys_addr & 0x6000) == 0x2000);
X
X /* Enable arbitration for all PCI slots. */
- psycho->psycho_regs->pci_a_control |= 0x3f;
- psycho->psycho_regs->pci_b_control |= 0x3f;
+ psycho->psycho_regs->pci_a_control |= PSYCHO_PCICTRL_AEN;
+ psycho->psycho_regs->pci_b_control |= PSYCHO_PCICTRL_AEN;
+
+ /* Disable DMA write / PIO rd synchronization on both
+ * PCI bus segments.
+ */
+ psycho->psycho_regs->pci_a_diag |= PSYCHO_PCIDIAG_DDWSYNC;
+ psycho->psycho_regs->pci_b_diag |= PSYCHO_PCIDIAG_DDWSYNC;
X
X other_pbm:
X if(is_pbm_a)
@@ -609,8 +675,8 @@
X }
X
X
-__initfunc(static void
-pbm_reconfigure_bridges(struct linux_pbm_info *pbm, unsigned char bus))
+static void __init
+pbm_reconfigure_bridges(struct linux_pbm_info *pbm, unsigned char bus)
X {
X unsigned int devfn, l, class;
X unsigned char hdr_type = 0;
@@ -657,7 +723,7 @@
X }
X }
X
-__initfunc(static void pbm_fixup_busno(struct linux_pbm_info *pbm, unsigned char bus))
+static void __init pbm_fixup_busno(struct linux_pbm_info *pbm, unsigned char bus)
X {
X unsigned int nbus;
X
@@ -682,8 +748,7 @@
X } while (nbus--);
X }
X
-
-__initfunc(static void apb_init(struct linux_psycho *sabre))
+static void __init apb_init(struct linux_psycho *sabre)
X {
X struct pci_dev *pdev;
X unsigned short stmp;
@@ -692,21 +757,20 @@
X for(pdev = pci_devices; pdev; pdev = pdev->next) {
X if(pdev->vendor == PCI_VENDOR_ID_SUN &&
X pdev->device == PCI_DEVICE_ID_SUN_SABRE) {
- /* Increase latency timer on top level bridge. */
- pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0xf8);
+ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 128);
X break;
X }
X }
X for (pdev = sabre->pci_bus->devices; pdev; pdev = pdev->sibling) {
X if (pdev->vendor == PCI_VENDOR_ID_SUN &&
X pdev->device == PCI_DEVICE_ID_SUN_SIMBA) {
-
X pci_read_config_word(pdev, PCI_COMMAND, &stmp);
X stmp |= PCI_COMMAND_SERR | PCI_COMMAND_PARITY |
X PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY |
X PCI_COMMAND_IO;
X pci_write_config_word(pdev, PCI_COMMAND, stmp);
X
+ /* Status register bits are "write 1 to clear". */
X pci_write_config_word(pdev, PCI_STATUS, 0xffff);
X pci_write_config_word(pdev, PCI_SEC_STATUS, 0xffff);
X
@@ -721,28 +785,25 @@
X APB_PCI_CTL_HIGH_ARBITER_EN;
X pci_write_config_dword(pdev, APB_PCI_CONTROL_HIGH, itmp);
X
+ /* Systems with SIMBA are usually workstations, so
+ * we configure to park to SIMBA not to the previous
+ * bus owner.
+ */
X pci_read_config_dword(pdev, APB_PCI_CONTROL_LOW, &itmp);
- itmp = APB_PCI_CTL_LOW_ARB_PARK |
- APB_PCI_CTL_LOW_ERRINT_EN | 0x0f;
+ itmp = APB_PCI_CTL_LOW_ERRINT_EN | 0x0f;
X pci_write_config_dword(pdev, APB_PCI_CONTROL_LOW, itmp);
X
- /*
- * Setup Registers for Guaranteed Completion.
+ /* Don't mess with the retry limit and PIO/DMA latency
+ * timer settings. But do set primary and secondary
+ * latency timers.
X */
- pci_write_config_byte(pdev, APB_PRIMARY_MASTER_RETRY_LIMIT, 0);
- pci_write_config_byte(pdev, APB_SECONDARY_MASTER_RETRY_LIMIT, 0);
- pci_write_config_byte(pdev, APB_PIO_TARGET_RETRY_LIMIT, 0x80);
- pci_write_config_byte(pdev, APB_PIO_TARGET_LATENCY_TIMER, 0);
- pci_write_config_byte(pdev, APB_DMA_TARGET_RETRY_LIMIT, 0x80);
- pci_write_config_byte(pdev, APB_DMA_TARGET_LATENCY_TIMER, 0);
-
- /* Increase primary latency timer. */
- pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0xf8);
+ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 128);
+ pci_write_config_byte(pdev, PCI_SEC_LATENCY_TIMER, 128);
X }
X }
X }
X
-__initfunc(static void sabre_probe(struct linux_psycho *sabre))
+static void __init sabre_probe(struct linux_psycho *sabre)
X {
X struct pci_bus *pbus = sabre->pci_bus;
X static unsigned char busno = 0;
@@ -764,7 +825,7 @@
X }
X
X
-__initfunc(static void pbm_probe(struct linux_pbm_info *pbm))
+static void __init pbm_probe(struct linux_pbm_info *pbm)
X {
X static struct pci_bus *pchain = NULL;
X struct pci_bus *pbus = &pbm->pci_bus;
@@ -803,9 +864,9 @@
X }
X }
X
-__initfunc(static int pdev_to_pnode_sibtraverse(struct linux_pbm_info *pbm,
- struct pci_dev *pdev,
- int pnode))
+static int __init pdev_to_pnode_sibtraverse(struct linux_pbm_info *pbm,
+ struct pci_dev *pdev,
+ int pnode)
X {
X struct linux_prom_pci_registers pregs[PROMREG_MAX];
X int node;
@@ -827,8 +888,8 @@
X return 0;
X }
X
-__initfunc(static void pdev_cookie_fillin(struct linux_pbm_info *pbm,
- struct pci_dev *pdev, int pnode))
+static void __init pdev_cookie_fillin(struct linux_pbm_info *pbm,
+ struct pci_dev *pdev, int pnode)
X {
X struct pcidev_cookie *pcp;
X int node;
@@ -846,9 +907,9 @@
X #endif
X }
X
-__initfunc(static void fill_in_pbm_cookies(struct pci_bus *pbus,
- struct linux_pbm_info *pbm,
- int node))
+static void __init fill_in_pbm_cookies(struct pci_bus *pbus,
+ struct linux_pbm_info *pbm,
+ int node)
X {
X struct pci_dev *pdev;
X
@@ -868,7 +929,7 @@
X }
X }
X
-__initfunc(static void sabre_cookie_fillin(struct linux_psycho *sabre))
+static void __init sabre_cookie_fillin(struct linux_psycho *sabre)
X {
X struct pci_bus *pbus = sabre->pci_bus;
X
@@ -886,9 +947,9 @@
X * properties, and recording them in pci_vma's linked in via
X * PBM->assignments.
X */
-__initfunc(static int gimme_ebus_assignments(int node, struct linux_prom_pci_registers *aregs))
+static int __init gimme_ebus_assignments(int node, struct linux_prom_pci_registers *aregs)
X {
- struct linux_prom_ebus_ranges erng[PROMREG_MAX];
+ struct linux_prom_ebus_ranges erng[PROM_PCIRNG_MAX];
X int err, iter;
X
X err = prom_getproperty(node, "ranges", (char *)&erng[0], sizeof(erng));
@@ -911,7 +972,7 @@
X return err;
X }
X
-__initfunc(static void assignment_process(struct linux_pbm_info *pbm, int node))
+static void __init assignment_process(struct linux_pbm_info *pbm, int node)
X {
X struct linux_prom_pci_registers aregs[PROMREG_MAX];
X char pname[256];
@@ -968,7 +1029,7 @@
X }
X }
X
-__initfunc(static void assignment_walk_siblings(struct linux_pbm_info *pbm, int node))
+static void __init assignment_walk_siblings(struct linux_pbm_info *pbm, int node)
X {
X while(node) {
X int child = prom_getchild(node);
@@ -1077,12 +1138,12 @@
X #endif
X }
X
-__initfunc(static void fixup_regs(struct pci_dev *pdev,
- struct linux_pbm_info *pbm,
- struct linux_prom_pci_registers *pregs,
- int nregs,
- struct linux_prom_pci_registers *assigned,
- int numaa))
+static void __init fixup_regs(struct pci_dev *pdev,
+ struct linux_pbm_info *pbm,
+ struct linux_prom_pci_registers *pregs,
+ int nregs,
+ struct linux_prom_pci_registers *assigned,
+ int numaa)
X {
X int preg, rng;
X int IO_seen = 0;
@@ -1415,7 +1476,7 @@
X #define imap_offset(__member) \
X ((unsigned long)(&(((struct psycho_regs *)0)->__member)))
X
-__initfunc(static unsigned long psycho_pcislot_imap_offset(unsigned long ino))
+static unsigned long __init psycho_pcislot_imap_offset(unsigned long ino)
X {
X unsigned int bus, slot;
X
@@ -1431,11 +1492,8 @@
X case 2:
X return imap_offset(imap_a_slot2);
X case 3:
- return imap_offset(imap_a_slot3);
X default:
- prom_printf("pcislot_imap: IMPOSSIBLE [%d:%d]\n",
- bus, slot);
- prom_halt();
+ return imap_offset(imap_a_slot3);
X }
X } else {
X switch(slot) {
@@ -1446,19 +1504,16 @@
X case 2:
X return imap_offset(imap_b_slot2);
X case 3:
- return imap_offset(imap_b_slot3);
X default:
- prom_printf("pcislot_imap: IMPOSSIBLE [%d:%d]\n",
- bus, slot);
- prom_halt();
+ return imap_offset(imap_b_slot3);
X }
X }
X }
X
X /* Exported for EBUS probing layer. */
-__initfunc(unsigned int psycho_irq_build(struct linux_pbm_info *pbm,
- struct pci_dev *pdev,
- unsigned int ino))
+unsigned int __init psycho_irq_build(struct linux_pbm_info *pbm,
+ struct pci_dev *pdev,
+ unsigned int ino)
X {
X unsigned long imap_off;
X int need_dma_sync = 0;
@@ -1554,37 +1609,78 @@
X return psycho_build_irq(pbm->parent, imap_off, ino, need_dma_sync);
X }
X
-__initfunc(static int pbm_intmap_match(struct linux_pbm_info *pbm,
- struct pci_dev *pdev,
- struct linux_prom_pci_registers *preg,
- unsigned int *interrupt))
+static int __init pbm_intmap_match(struct linux_pbm_info *pbm,
+ struct pci_dev *pdev,
+ struct linux_prom_pci_registers *preg,
+ unsigned int *interrupt)
X {
X struct linux_prom_pci_registers ppreg;
X unsigned int hi, mid, lo, irq;
X int i;
X
- if (!pbm->num_pbm_intmap)
+#ifdef FIXUP_IRQ_DEBUG
+ dprintf("pbm_intmap_match: ");
+#endif
+ if (!pbm->num_pbm_intmap) {
+#ifdef FIXUP_IRQ_DEBUG
+ dprintf("No intmap UPA[%x:%c]\n",
+ pbm->parent->upa_portid,
+ (pbm == &pbm->parent->pbm_A) ? 'A' : 'B');
+#endif
X return 0;
-
+ }
X /*
X * Underneath a bridge, use register of parent bridge.
X */
X if (pdev->bus->number != pbm->pci_first_busno) {
- struct pcidev_cookie *pcp = pdev->bus->self->sysdata;
- int node;
+ struct pcidev_cookie *pcp;
+ int node, offset;
+ char prom_name[64];
X
- if (!pcp)
+#ifdef FIXUP_IRQ_DEBUG
+ dprintf("UnderBridge, ");
+#endif
+ pcp = pdev->bus->self->sysdata;
+ if (!pcp) {
+#ifdef FIXUP_IRQ_DEBUG
+ dprintf("No bus PCP\n");
+#endif
X goto out;
-
+ }
X node = pcp->prom_node;
X
X i = prom_getproperty(node, "reg", (char*)&ppreg, sizeof(ppreg));
- if(i == 0 || i == -1)
+ if(i == 0 || i == -1) {
+#ifdef FIXUP_IRQ_DEBUG
+ dprintf("No reg property.\n");
+#endif
X goto out;
+ }
+ /*
+ * Did PROM know better and assign an interrupt different
+ * to #INTA to the device? - We test here for presence of
+ * FCODE on the card, in this case we assume PROM has set
+ * correct 'interrupts' property, unless it is quadhme.
+ */
+ pcp = pdev->sysdata;
+ if (!pcp) {
+#ifdef FIXUP_IRQ_DEBUG
+ dprintf("No dev PCP\n");
+#endif
+ goto out;
+ }
+ node = pcp->prom_node;
X
- /* Use low slot number bits of child as IRQ line. */
- *interrupt = ((pdev->devfn >> 3) & 3) + 1;
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 08'
echo 'File patch-2.2.4 is continued in part 09'
echo 09 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 05 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 05; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
X
X int _prep_type;
-
-extern boot_infos_t *boot_infos;
+/*
+ * This is used to identify the board type from a given PReP board
+ * vendor. Board revision is also made available.
+ */
+unsigned char ucSystemType;
+unsigned char ucBoardRev;
+unsigned char ucBoardRevMaj, ucBoardRevMin;
X
X /*
X * Perhaps we can put the pmac screen_info[] here
@@ -114,12 +126,8 @@
X void machine_restart(char *cmd)
X {
X #ifndef CONFIG_MBX
- struct adb_request req;
X unsigned long flags;
- unsigned long i = 10000;
-#if 0
- int err;
-#endif
+ struct adb_request req;
X
X switch(_machine)
X {
@@ -142,31 +150,32 @@
X #if 0 /* RTAS doesn't seem to work on Longtrail.
X For now, do it the same way as the PReP. */
X /*err = call_rtas("system-reboot", 0, 1, NULL);
- printk("RTAS system-reboot returned %d\n", err);
- for (;;);*/
+ printk("RTAS system-reboot returned %d\n", err);
+ for (;;);*/
X
X {
X extern unsigned int rtas_entry, rtas_data, rtas_size;
X unsigned long status, value;
- printk("rtas_entry: %08x rtas_data: %08x rtas_size: %08x\n",
+ printk("rtas_ent`ry: %08x rtas_data: %08x rtas_size: %08x\n",
X rtas_entry,rtas_data,rtas_size);
- }
+ }
X #endif
X case _MACH_prep:
X _disable_interrupts();
-
- /* set exception prefix high - to the prom */
- save_flags( flags );
- restore_flags( flags|MSR_IP );
-
- /* make sure bit 0 (reset) is a 0 */
- outb( inb(0x92) & ~1L , 0x92 );
- /* signal a reset to system control port A - soft reset */
- outb( inb(0x92) | 1 , 0x92 );
-
- while ( i != 0 ) i++;
- panic("restart failed\n");
- break;
+ /* set exception prefix high - to the prom */
+ save_flags( flags );
+ restore_flags( flags|MSR_IP );
+
+ /* make sure bit 0 (reset) is a 0 */
+ outb( inb(0x92) & ~1L , 0x92 );
+ /* signal a reset to system control port A - soft reset */
+ outb( inb(0x92) | 1 , 0x92 );
+
+ while ( 1 ) ;
+ break;
+ /*
+ * Not reached
+ */
X case _MACH_apus:
X cli();
X
@@ -182,8 +191,16 @@
X break;
X }
X #else /* CONFIG_MBX */
- extern void MBX_gorom(void);
- MBX_gorom();
+ extern void __clear_msr_me(void);
+ __volatile__ unsigned char dummy;
+
+ cli();
+ ((immap_t *)IMAP_ADDR)->im_clkrst.car_plprcr |= 0x00000080;
+ __clear_msr_me();
+ dummy = ((immap_t *)IMAP_ADDR)->im_clkrst.res[0];
+
+ printk("Restart failed\n");
+ while(1);
X #endif /* CONFIG_MBX */
X }
X
@@ -226,7 +243,7 @@
X }
X for (;;);
X #else /* CONFIG_MBX */
- machine_restart(NULL);
+ machine_halt();
X #endif /* CONFIG_MBX */
X }
X
@@ -238,7 +255,6 @@
X }
X else /* prep, chrp or apus */
X machine_restart(NULL);
-
X }
X
X #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
@@ -432,14 +448,14 @@
X {
X len += sprintf(buffer+len,"zero pages\t: total %lu (%luKb) "
X "current: %lu (%luKb) hits: %lu/%lu (%lu%%)\n",
- quicklists.zerototal,
- (quicklists.zerototal*PAGE_SIZE)>>10,
- quicklists.zero_sz,
- (quicklists.zero_sz*PAGE_SIZE)>>10,
- quicklists.zeropage_hits,quicklists.zeropage_calls,
+ zero_cache_total,
+ (zero_cache_total*PAGE_SIZE)>>10,
+ zero_cache_sz,
+ (zero_cache_sz*PAGE_SIZE)>>10,
+ zero_cache_hits,zero_cache_calls,
X /* : 1 below is so we don't div by zero */
- (quicklists.zeropage_hits*100) /
- ((quicklists.zeropage_calls)?quicklists.zeropage_calls:1));
+ (zero_cache_hits*100) /
+ ((zero_cache_calls)?zero_cache_calls:1));
X }
X
X #ifndef CONFIG_MBX
@@ -590,7 +606,6 @@
X if ( r3 )
X memcpy((void *)res,(void *)(r3+KERNELBASE),
X sizeof(RESIDUAL));
- setup_pci_ptrs();
X isa_io_base = PREP_ISA_IO_BASE;
X isa_mem_base = PREP_ISA_MEM_BASE;
X pci_dram_offset = PREP_PCI_DRAM_OFFSET;
@@ -604,11 +619,21 @@
X {
X if ( !strncmp(res->VitalProductData.PrintableModel,"IBM",3) )
X _prep_type = _PREP_IBM;
+ else if (!strncmp(res->VitalProductData.PrintableModel,
+ "Radstone",8))
+ {
+ extern char *Motherboard_map_name;
+
+ _prep_type = _PREP_Radstone;
+ Motherboard_map_name=
+ res->VitalProductData.PrintableModel;
+ }
X else
X _prep_type = _PREP_Motorola;
X }
X else /* assume motorola if no residual (netboot?) */
X _prep_type = _PREP_Motorola;
+ setup_pci_ptrs();
X #ifdef CONFIG_BLK_DEV_INITRD
X /* take care of initrd if we have one */
X if ( r4 )
@@ -634,9 +659,7 @@
X initrd_end = r3 + r4 + KERNELBASE;
X }
X #endif /* CONFIG_BLK_DEV_INITRD */
- /* isa_io_base set by setup_pci_ptrs() */
- isa_mem_base = CHRP_ISA_MEM_BASE;
- pci_dram_offset = CHRP_PCI_DRAM_OFFSET;
+ /* pci_dram_offset/isa_io_base/isa_mem_base set by setup_pci_ptrs() */
X #if !defined(CONFIG_MACH_SPECIFIC)
X ISA_DMA_THRESHOLD = ~0L;
X DMA_MODE_READ = 0x44;
@@ -737,7 +760,7 @@
X if (strstr(cmd_line, "xmon"))
X xmon(0);
X #endif /* CONFIG_XMON */
-
+
X /* reboot on panic */
X panic_timeout = 180;
X
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/kernel/signal.c linux/arch/ppc/kernel/signal.c
--- v2.2.3/linux/arch/ppc/kernel/signal.c Thu Nov 19 09:56:27 1998
+++ linux/arch/ppc/kernel/signal.c Fri Mar 19 10:50:03 1999
@@ -1,7 +1,7 @@
X /*
X * linux/arch/ppc/kernel/signal.c
X *
- * $Id: signal.c,v 1.21 1998/10/22 19:37:49 paulus Exp $
+ * $Id: signal.c,v 1.23 1999/03/01 16:51:53 cort Exp $
X *
X * PowerPC version
X * Copyright (C) 1995-1996 Gary Thomas (g...@linuxppc.org)
@@ -374,7 +374,7 @@
X if (!oldset)
X oldset = ¤t->blocked;
X
- newsp = frame = regs->gpr[1] - sizeof(struct sigregs);
+ newsp = frame = 0;
X
X for (;;) {
X unsigned long signr;
@@ -470,6 +470,13 @@
X /* NOTREACHED */
X }
X }
+
+ if ( (ka->sa.sa_flags & SA_ONSTACK)
+ && (! on_sig_stack(regs->gpr[1])))
+ newsp = (current->sas_ss_sp + current->sas_ss_size);
+ else
+ newsp = regs->gpr[1];
+ newsp = frame = newsp - sizeof(struct sigregs);
X
X /* Whee! Actually deliver the signal. */
X handle_signal(signr, ka, &info, oldset, regs, &newsp, frame);
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/kernel/smp.c linux/arch/ppc/kernel/smp.c
--- v2.2.3/linux/arch/ppc/kernel/smp.c Thu Dec 31 10:28:59 1998
+++ linux/arch/ppc/kernel/smp.c Fri Mar 19 10:50:03 1999
@@ -1,5 +1,5 @@
X /*
- * $Id: smp.c,v 1.39 1998/12/28 10:28:51 paulus Exp $
+ * $Id: smp.c,v 1.48 1999/03/16 10:40:32 cort Exp $
X *
X * Smp support for ppc.
X *
@@ -18,6 +18,7 @@
X #define __KERNEL_SYSCALLS__
X #include <linux/unistd.h>
X #include <linux/init.h>
+#include <linux/openpic.h>
X
X #include <asm/ptrace.h>
X #include <asm/atomic.h>
@@ -29,9 +30,10 @@
X #include <asm/softirq.h>
X #include <asm/init.h>
X #include <asm/io.h>
+#include <asm/prom.h>
X
X #include "time.h"
-
+int first_cpu_booted = 0;
X int smp_threads_ready = 0;
X volatile int smp_commenced = 0;
X int smp_num_cpus = 1;
@@ -42,7 +44,6 @@
X spinlock_t kernel_flag = SPIN_LOCK_UNLOCKED;
X unsigned int prof_multiplier[NR_CPUS];
X unsigned int prof_counter[NR_CPUS];
-int first_cpu_booted = 0;
X cycles_t cacheflush_time;
X
X /* all cpu mappings are 1-1 -- Cort */
@@ -51,6 +52,10 @@
X
X int start_secondary(void *);
X extern int cpu_idle(void *unused);
+u_int openpic_read(volatile u_int *addr);
+
+/* register for interrupting the secondary processor on the powersurge */
+#define PSURGE_INTR ((volatile unsigned *)0xf80000c0)
X
X void smp_local_timer_interrupt(struct pt_regs * regs)
X {
@@ -99,29 +104,33 @@
X
X /*
X * Dirty hack to get smp message passing working.
- * Right now it only works for stop cpu's but will be setup
- * later for more general message passing.
X *
X * As it is now, if we're sending two message at the same time
- * we have race conditions. I avoided doing locks here since
- * all that works right now is the stop cpu message.
+ * we have race conditions. The PowerSurge doesn't easily
+ * allow us to send IPI messages so we put the messages in
+ * smp_message[].
X *
+ * This is because don't have several IPI's on the PowerSurge even though
+ * we do on the chrp. It would be nice to use the actual IPI's on the chrp
+ * rather than this but having two methods of doing IPI isn't a good idea
+ * right now.
X * -- Cort
X */
X int smp_message[NR_CPUS];
X void smp_message_recv(void)
X {
X int msg = smp_message[smp_processor_id()];
-
- /* clear interrupt */
- *(volatile unsigned long *)(0xf80000c0) = ~0L;
- eieio();
+
+ if ( _machine == _MACH_Pmac )
+ {
+ /* clear interrupt */
+ out_be32(PSURGE_INTR, ~0);
+ }
X
X /* make sure msg is for us */
X if ( msg == -1 ) return;
X
X ipi_count++;
- /*printk("SMP %d: smp_message_recv() msg %x\n", smp_processor_id(),msg);*/
X
X switch( msg )
X {
@@ -158,12 +167,17 @@
X spinlock_t mesg_pass_lock = SPIN_LOCK_UNLOCKED;
X void smp_message_pass(int target, int msg, unsigned long data, int wait)
X {
- if ( _machine != _MACH_Pmac )
+ int i;
+ if ( !(_machine & (_MACH_Pmac|_MACH_chrp)) )
X return;
-printk("SMP %d: sending smp message %x\n", current->processor, msg);
-if (smp_processor_id() ) printk("pass from cpu 1\n");
+
X spin_lock(&mesg_pass_lock);
-#define OTHER (~smp_processor_id() & 1)
+
+ /*
+ * We assume here that the msg is not -1. If it is,
+ * the recipient won't know the message was destined
+ * for it. -- Cort
+ */
X
X switch( target )
X {
@@ -171,105 +185,179 @@
X smp_message[smp_processor_id()] = msg;
X /* fall through */
X case MSG_ALL_BUT_SELF:
- smp_message[OTHER] = msg;
+ for ( i = 0 ; i < smp_num_cpus ; i++ )
+ if ( i != smp_processor_id () )
+ smp_message[i] = msg;
X break;
X default:
X smp_message[target] = msg;
X break;
X }
- /* interrupt secondary processor */
- *(volatile unsigned long *)(0xf80000c0) = ~0L;
- eieio();
- *(volatile unsigned long *)(0xf80000c0) = 0L;
- eieio();
- /* interrupt primary */
- /**(volatile unsigned long *)(0xf3019000);*/
- spin_unlock(&mesg_pass_lock);
+
+ if ( _machine == _MACH_Pmac )
+ {
+ /* interrupt secondary processor */
+ out_be32(PSURGE_INTR, ~0);
+ out_be32(PSURGE_INTR, 0);
+ /*
+ * Assume for now that the secondary doesn't send
+ * IPI's -- Cort
+ */
+ /* interrupt primary */
+ /**(volatile unsigned long *)(0xf3019000);*/
+ }
+
+ if ( _machine == _MACH_chrp )
+ {
+ /*
+ * There has to be some way of doing this better -
+ * perhaps a sent-to-all or send-to-all-but-self
+ * in the openpic. This gets us going for now, though.
+ * -- Cort
+ */
+ switch ( target )
+ {
+ case MSG_ALL:
+ for ( i = 0 ; i < smp_num_cpus ; i++ )
+ openpic_cause_IPI(i, 0, 0xffffffff );
+ break;
+ case MSG_ALL_BUT_SELF:
+ for ( i = 0 ; i < smp_num_cpus ; i++ )
+ if ( i != smp_processor_id () )
+ openpic_cause_IPI(i, 0,
+ 0xffffffff & ~(1 << smp_processor_id()));
+ break;
+ default:
+ openpic_cause_IPI(target, 0, 1U << target);
+ break;
+ }
+ }
+
+ spin_unlock(&mesg_pass_lock);
X }
X
X void __init smp_boot_cpus(void)
X {
X extern struct task_struct *current_set[NR_CPUS];
- extern void __secondary_start(void);
+ extern void __secondary_start_psurge(void);
X int i;
X struct task_struct *p;
X unsigned long a;
X
X printk("Entering SMP Mode...\n");
-
+ /* let other processors know to not do certain initialization */
X first_cpu_booted = 1;
- /*dcbf(&first_cpu_booted);*/
+
+ /*
+ * assume for now that the first cpu booted is
+ * cpu 0, the master -- Cort
+ */
+ cpu_callin_map[0] = 1;
+ smp_store_cpu_info(0);
+ active_kernel_processor = 0;
+ current->processor = 0;
X
X for (i = 0; i < NR_CPUS; i++) {
X prof_counter[i] = 1;
X prof_multiplier[i] = 1;
X }
X
- cpu_callin_map[0] = 1;
- smp_store_cpu_info(0);
- active_kernel_processor = 0;
- current->processor = 0;
-
X /*
X * XXX very rough, assumes 20 bus cycles to read a cache line,
X * timebase increments every 4 bus cycles, 32kB L1 data cache.
X */
X cacheflush_time = 5 * 1024;
X
- if ( _machine != _MACH_Pmac )
+ if ( !(_machine & (_MACH_Pmac|_MACH_chrp)) )
X {
X printk("SMP not supported on this machine.\n");
X return;
X }
X
- /* create a process for second processor */
- kernel_thread(start_secondary, NULL, CLONE_PID);
- p = task[1];
- if ( !p )
- panic("No idle task for secondary processor\n");
- p->processor = 1;
- p->has_cpu = 1;
- current_set[1] = p;
-
- /* need to flush here since secondary bat's aren't setup */
- /* XXX ??? */
- for (a = KERNELBASE; a < KERNELBASE + 0x800000; a += 32)
- asm volatile("dcbf 0,%0" : : "r" (a) : "memory");
- asm volatile("sync");
-
- /*dcbf((void *)¤t_set[1]);*/
- /* setup entry point of secondary processor */
- *(volatile unsigned long *)(0xf2800000) =
- (unsigned long)__secondary_start-KERNELBASE;
- eieio();
- /* interrupt secondary to begin executing code */
- *(volatile unsigned long *)(0xf80000c0) = ~0L;
- eieio();
- *(volatile unsigned long *)(0xf80000c0) = 0L;
- eieio();
+ switch ( _machine )
+ {
+ case _MACH_Pmac:
+ /* assume powersurge board - 2 processors -- Cort */
+ smp_num_cpus = 2;
+ break;
+ case _MACH_chrp:
+ smp_num_cpus = ((openpic_read(&OpenPIC->Global.Feature_Reporting0)
+ & OPENPIC_FEATURE_LAST_PROCESSOR_MASK) >>
+ OPENPIC_FEATURE_LAST_PROCESSOR_SHIFT)+1;
+ /* get our processor # - we may not be cpu 0 */
+ printk("SMP %d processors, boot CPU is %d (should be 0)\n",
+ smp_num_cpus,
+ 10/*openpic_read(&OpenPIC->Processor[0]._Who_Am_I)*/);
+ break;
+ }
+
X /*
- * wait to see if the secondary made a callin (is actually up).
- * udelay() isn't accurate here since we haven't yet called
- * calibrate_delay() so use this value that I found through
- * experimentation. -- Cort
+ * only check for cpus we know exist. We keep the callin map
+ * with cpus at the bottom -- Cort
X */
- for ( i = 1000; i && !cpu_callin_map[1] ; i-- )
- udelay(100);
+ for ( i = 1 ; i < smp_num_cpus; i++ )
+ {
+ int c;
+
+ /* create a process for the processor */
+ kernel_thread(start_secondary, NULL, CLONE_PID);
+ p = task[i];
+ if ( !p )
+ panic("No idle task for secondary processor\n");
+ p->processor = i;
+ p->has_cpu = 1;
+ current_set[i] = p;
+
+ /* need to flush here since secondary bats aren't setup */
+ for (a = KERNELBASE; a < KERNELBASE + 0x800000; a += 32)
+ asm volatile("dcbf 0,%0" : : "r" (a) : "memory");
+ asm volatile("sync");
+
+ /* wake up cpus */
+ switch ( _machine )
+ {
+ case _MACH_Pmac:
+ /* setup entry point of secondary processor */
+ *(volatile unsigned long *)(0xf2800000) =
+ (unsigned long)__secondary_start_psurge-KERNELBASE;
+ eieio();
+ /* interrupt secondary to begin executing code */
+ out_be32(PSURGE_INTR, ~0);
+ out_be32(PSURGE_INTR, 0);
+ break;
+ case _MACH_chrp:
+ *(unsigned long *)KERNELBASE = i;
+ asm volatile("dcbf 0,%0"::"r"(KERNELBASE):"memory");
+ break;
+ }
+
+ /*
+ * wait to see if the cpu made a callin (is actually up).
+ * use this value that I found through experimentation.
+ * -- Cort
+ */
+ for ( c = 1000; c && !cpu_callin_map[i] ; c-- )
+ udelay(100);
+
+ if ( cpu_callin_map[i] )
+ {
+ printk("Processor %d found.\n", i);
+ /* this sync's the decr's -- Cort */
+ if ( _machine == _MACH_Pmac )
+ set_dec(decrementer_count);
+ } else {
+ printk("Processor %d is stuck.\n", i);
+ }
+ }
X
- if(cpu_callin_map[1]) {
- printk("Processor %d found.\n", smp_num_cpus);
- smp_num_cpus++;
-#if 1 /* this sync's the decr's, but we don't want this now -- Cort */
- set_dec(decrementer_count);
-#endif
- } else {
- printk("Processor %d is stuck. \n", smp_num_cpus);
+ if ( _machine == _MACH_Pmac )
+ {
+ /* reset the entry point so if we get another intr we won't
+ * try to startup again */
+ *(volatile unsigned long *)(0xf2800000) = 0x100;
+ /* send interrupt to other processors to start decr's on all cpus */
+ smp_message_pass(1,0xf0f0, 0, 0);
X }
- /* reset the entry point so if we get another intr we won't
- * try to startup again */
- *(volatile unsigned long *)(0xf2800000) = 0x100;
- /* send interrupt to other processors to start decr's on all cpus */
- smp_message_pass(1,0xf0f0, 0, 0);
X }
X
X void __init smp_commence(void)
@@ -308,7 +396,6 @@
X while(!smp_commenced)
X barrier();
X __sti();
- printk("SMP %d: smp_callin done\n", current->processor);
X }
X
X void __init smp_setup(char *str, int *ints)
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/kernel/softemu8xx.c linux/arch/ppc/kernel/softemu8xx.c
--- v2.2.3/linux/arch/ppc/kernel/softemu8xx.c Fri May 8 23:14:45 1998
+++ linux/arch/ppc/kernel/softemu8xx.c Wed Mar 10 21:30:32 1999
@@ -38,6 +38,7 @@
X #define LFDU 51
X #define STFD 54
X #define STFDU 55
+#define FMR 63
X
X /*
X * We return 0 on success, 1 on unimplemented instruction, and EFAULT
@@ -49,6 +50,7 @@
X uint inst, instword;
X uint flreg, idxreg, disp;
X uint retval;
+ signed short sdisp;
X uint *ea, *ip;
X
X retval = 0;
@@ -66,6 +68,11 @@
X switch ( inst )
X {
X case LFD:
+ /* this is a 16 bit quantity that is sign extended
+ * so use a signed short here -- Cort
+ */
+ sdisp = (instword & 0xffff);
+ ea = (uint *)(regs->gpr[idxreg] + sdisp);
X if (copy_from_user(ip, ea, sizeof(double)))
X retval = EFAULT;
X break;
@@ -77,6 +84,11 @@
X regs->gpr[idxreg] = (uint)ea;
X break;
X case STFD:
+ /* this is a 16 bit quantity that is sign extended
+ * so use a signed short here -- Cort
+ */
+ sdisp = (instword & 0xffff);
+ ea = (uint *)(regs->gpr[idxreg] + sdisp);
X if (copy_to_user(ea, ip, sizeof(double)))
X retval = EFAULT;
X break;
@@ -87,6 +99,11 @@
X else
X regs->gpr[idxreg] = (uint)ea;
X break;
+ case FMR:
+ /* assume this is a fp move -- Cort */
+ memcpy( ip, ¤t->tss.fpr[(instword>>11)&0x1f],
+ sizeof(double) );
+ break;
X default:
X retval = 1;
X printk("Bad emulation %s/%d\n"
@@ -98,7 +115,7 @@
X (instword>>16)&0x1f,
X (instword>>11)&0x1f,
X (instword>>6)&0x1f,
- (instword>>1)&0x1f,
+ (instword>>1)&0x3ff,
X instword&1);
X {
X int pa;
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/kernel/time.c linux/arch/ppc/kernel/time.c
--- v2.2.3/linux/arch/ppc/kernel/time.c Wed Jan 20 23:14:04 1999
+++ linux/arch/ppc/kernel/time.c Fri Mar 19 10:50:03 1999
@@ -1,5 +1,5 @@
X /*
- * $Id: time.c,v 1.39 1998/12/28 10:28:51 paulus Exp $
+ * $Id: time.c,v 1.45 1999/03/03 15:09:59 cort Exp $
X * Common time routines among all ppc machines.
X *
X * Written by Cort Dougan (co...@cs.nmt.edu) to merge
@@ -18,8 +18,8 @@
X * Since it is not possible to get a nice 100 Hz clock out of this, without
X * creating a software PLL, I have set HZ to 128. -- Dan
X *
- * 1997-09-10 Updated NTP code according to technical memorandum Jan '96
- * "A Kernel Model for Precision Timekeeping" by Dave Mills
+ * 1997-09-10 Updated NTP code according to technical memorandum Jan '96
+ * "A Kernel Model for Precision Timekeeping" by Dave Mills
X */
X
X #include <linux/config.h>
@@ -76,9 +76,6 @@
X {
X int dval, d;
X unsigned long cpu = smp_processor_id();
- /* save the HID0 in case dcache was off - see idle.c
- * this hack should leave for a better solution -- Cort */
- unsigned dcache_locked = unlock_dcache();
X
X hardirq_enter(cpu);
X #ifdef __SMP__
@@ -136,9 +133,6 @@
X }
X #endif
X hardirq_exit(cpu);
- /* restore the HID0 in case dcache was off - see idle.c
- * this hack should leave for a better solution -- Cort */
- lock_dcache(dcache_locked);
X }
X
X #ifdef CONFIG_MBX
@@ -198,9 +192,9 @@
X xtime.tv_sec = tv->tv_sec;
X xtime.tv_usec = tv->tv_usec - frac_tick;
X set_dec(frac_tick * count_period_den / count_period_num);
- time_adjust = 0; /* stop active adjtime() */
+ time_adjust = 0; /* stop active adjtime() */
X time_status |= STA_UNSYNC;
- time_state = TIME_ERROR; /* p. 24, (a) */
+ time_state = TIME_ERROR; /* p. 24, (a) */
X time_maxerror = NTP_PHASE_LIMIT;
X time_esterror = NTP_PHASE_LIMIT;
X restore_flags(flags);
@@ -303,6 +297,7 @@
X __initfunc(void prep_calibrate_decr(void))
X {
X unsigned long flags;
+ unsigned long freq, divisor;
X
X /* the Powerstack II's have trouble with the timer so
X * we use a default value -- Cort
@@ -310,7 +305,6 @@
X if ( (_prep_type == _PREP_Motorola) &&
X ((inb(0x800) & 0xF0) & 0x40) )
X {
- unsigned long freq, divisor;
X static unsigned long t2 = 0;
X
X t2 = 998700000/60;
@@ -323,7 +317,16 @@
X count_period_den = freq / 1000000;
X return;
X }
-
+ if ( _prep_type == _PREP_Radstone )
+ {
+ freq = res->VitalProductData.ProcessorBusHz;
+ divisor = 4;
+ printk("time_init: decrementer frequency = %d/%d\n", freq, divisor);
+ decrementer_count = freq / HZ / divisor;
+ count_period_num = divisor;
+ count_period_den = freq / 1000000;
+ return;
+ }
X
X save_flags(flags);
X
@@ -439,6 +442,49 @@
X 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
X };
X
+/*
+ * This only works for the Gregorian calendar - i.e. after 1752 (in the UK)
+ */
+void GregorianDay(struct rtc_time * tm)
+{
+ int leapsToDate;
+ int lastYear;
+ int day;
+ int MonthOffset[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
+
+ lastYear=tm->tm_year-1;
+
+ /*
+ * Number of leap corrections to apply up to end of last year
+ */
+ leapsToDate = lastYear/4 - lastYear/100 + lastYear/400;
+
+ /*
+ * This year is a leap year if it is divisible by 4 except when it is
+ * divisible by 100 unless it is divisible by 400
+ *
+ * e.g. 1904 was a leap year, 1900 was not, 1996 is, and 2000 will be
+ */
+ if((tm->tm_year%4==0) &&
+ ((tm->tm_year%100!=0) || (tm->tm_year%400==0)) &&
+ (tm->tm_mon>2))
+ {
+ /*
+ * We are past Feb. 29 in a leap year
+ */
+ day=1;
+ }
+ else
+ {
+ day=0;
+ }
+
+ day += lastYear*365 + leapsToDate + MonthOffset[tm->tm_mon-1] +
+ tm->tm_mday;
+
+ tm->tm_wday=day%7;
+}
+
X void to_tm(int tim, struct rtc_time * tm)
X {
X register int i;
@@ -467,6 +513,11 @@
X
X /* Days are what is left over (+1) from all that. */
X tm->tm_mday = day + 1;
+
+ /*
+ * Determine the day of week
+ */
+ GregorianDay(tm);
X }
X
X
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/lib/locks.c linux/arch/ppc/lib/locks.c
--- v2.2.3/linux/arch/ppc/lib/locks.c Thu Dec 31 10:28:59 1998
+++ linux/arch/ppc/lib/locks.c Wed Mar 10 21:30:32 1999
@@ -1,5 +1,5 @@
X /*
- * $Id: locks.c,v 1.21 1998/12/28 10:28:53 paulus Exp $
+ * $Id: locks.c,v 1.23 1999/02/12 07:06:32 cort Exp $
X *
X * Locks for smp ppc
X *
@@ -26,24 +26,18 @@
X #ifdef DEBUG_LOCKS
X unsigned int stuck = INIT_STUCK;
X #endif /* DEBUG_LOCKS */
- /* try expensive atomic load/store to get lock */
- while((unsigned long )xchg_u32((void *)&lock->lock,0xffffffff)) {
- /* try cheap load until it's free */
- while(lock->lock) {
+ while (__spin_trylock(&lock->lock)) {
X #ifdef DEBUG_LOCKS
- if(!--stuck)
- {
- printk("_spin_lock(%p) CPU#%d NIP %p"
- " holder: cpu %ld pc %08lX\n",
- lock, cpu, __builtin_return_address(0),
- lock->owner_cpu,lock->owner_pc);
- stuck = INIT_STUCK;
- /* steal the lock */
- /*xchg_u32((void *)&lock->lock,0);*/
- }
-#endif /* DEBUG_LOCKS */
- barrier();
+ if(!--stuck) {
+ printk("_spin_lock(%p) CPU#%d NIP %p"
+ " holder: cpu %ld pc %08lX\n",
+ lock, cpu, __builtin_return_address(0),
+ lock->owner_cpu,lock->owner_pc);
+ stuck = INIT_STUCK;
+ /* steal the lock */
+ /*xchg_u32((void *)&lock->lock,0);*/
X }
+#endif /* DEBUG_LOCKS */
X }
X lock->owner_pc = (unsigned long)__builtin_return_address(0);
X lock->owner_cpu = cpu;
@@ -51,15 +45,11 @@
X
X int spin_trylock(spinlock_t *lock)
X {
- unsigned long result;
-
- result = (unsigned long )xchg_u32((void *)&lock->lock,0xffffffff);
- if ( !result )
- {
- lock->owner_cpu = smp_processor_id();
- lock->owner_pc = (unsigned long)__builtin_return_address(0);
- }
- return (result == 0);
+ if (__spin_trylock(&lock->lock))
+ return 0;
+ lock->owner_cpu = smp_processor_id();
+ lock->owner_pc = (unsigned long)__builtin_return_address(0);
+ return 1;
X }
X
X
@@ -76,11 +66,11 @@
X lp->owner_pc,lp->lock);
X #endif /* DEBUG_LOCKS */
X lp->owner_pc = lp->owner_cpu = 0;
- eieio(); /* actually I believe eieio only orders */
- lp->lock = 0; /* non-cacheable accesses (on 604 at least) */
- eieio(); /* - paulus. */
+ wmb();
+ lp->lock = 0;
+ wmb();
X }
-
+
X /*
X * Just like x86, implement read-write locks as a 32-bit counter
X * with the high bit (sign) being the "write" bit.
@@ -95,6 +85,7 @@
X
X again:
X /* get our read lock in there */
+ wmb();
X atomic_inc((atomic_t *) &(rw)->lock);
X if ( (signed long)((rw)->lock) < 0) /* someone has a write lock */
X {
@@ -114,6 +105,7 @@
X /* try to get the read lock again */
X goto again;
X }
+ wmb();
X }
X
X void _read_unlock(rwlock_t *rw)
@@ -124,7 +116,9 @@
X current->comm,current->pid,current->tss.regs->nip,
X rw->lock);
X #endif /* DEBUG_LOCKS */
+ wmb();
X atomic_dec((atomic_t *) &(rw)->lock);
+ wmb();
X }
X
X void _write_lock(rwlock_t *rw)
@@ -134,7 +128,8 @@
X int cpu = smp_processor_id();
X #endif /* DEBUG_LOCKS */
X
-again:
+again:
+ wmb();
X if ( test_and_set_bit(31,&(rw)->lock) ) /* someone has a write lock */
X {
X while ( (rw)->lock & (1<<31) ) /* wait for write lock */
@@ -170,6 +165,7 @@
X }
X goto again;
X }
+ wmb();
X }
X
X void _write_unlock(rwlock_t *rw)
@@ -180,7 +176,9 @@
X current->comm,current->pid,current->tss.regs->nip,
X rw->lock);
X #endif /* DEBUG_LOCKS */
+ wmb();
X clear_bit(31,&(rw)->lock);
+ wmb();
X }
X
X void __lock_kernel(struct task_struct *task)
@@ -196,24 +194,18 @@
X }
X #endif /* DEBUG_LOCKS */
X
- if ( atomic_inc_return((atomic_t *) &task->lock_depth) != 1 )
+ if (atomic_inc_return((atomic_t *) &task->lock_depth) != 1)
X return;
X /* mine! */
- while ( xchg_u32( (void *)&klock_info.kernel_flag, KLOCK_HELD) )
- {
- /* try cheap load until it's free */
- while(klock_info.kernel_flag) {
+ while (__spin_trylock(&klock_info.kernel_flag)) {
X #ifdef DEBUG_LOCKS
- if(!--stuck)
- {
- printk("_lock_kernel() CPU#%d NIP %p\n",
- smp_processor_id(),
- __builtin_return_address(0));
- stuck = INIT_STUCK;
- }
-#endif /* DEBUG_LOCKS */
- barrier();
+ if(!--stuck) {
+ printk("_lock_kernel() CPU#%d NIP %p\n",
+ smp_processor_id(),
+ __builtin_return_address(0));
+ stuck = INIT_STUCK;
X }
+#endif /* DEBUG_LOCKS */
X }
X
X klock_info.akp = smp_processor_id();
@@ -223,7 +215,7 @@
X void __unlock_kernel(struct task_struct *task)
X {
X #ifdef DEBUG_LOCKS
- if ( (task->lock_depth == 0) || (klock_info.kernel_flag != KLOCK_HELD) )
+ if ((task->lock_depth == 0) || (klock_info.kernel_flag != KLOCK_HELD))
X {
X printk("__unlock_kernel(): %s/%d (nip %08lX) "
X "lock depth %x flags %lx\n",
@@ -234,10 +226,13 @@
X return;
X }
X #endif /* DEBUG_LOCKS */
- if ( atomic_dec_and_test((atomic_t *) &task->lock_depth) )
+ if (atomic_dec_and_test((atomic_t *) &task->lock_depth))
X {
+ wmb();
X klock_info.akp = NO_PROC_ID;
+ wmb();
X klock_info.kernel_flag = KLOCK_CLEAR;
+ wmb();
X }
X }
X
@@ -249,5 +244,5 @@
X __lock_kernel(task);
X task->lock_depth = depth;
X __sti();
- }
+ }
X }
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/lib/string.S linux/arch/ppc/lib/string.S
--- v2.2.3/linux/arch/ppc/lib/string.S Mon Oct 5 13:13:36 1998
+++ linux/arch/ppc/lib/string.S Wed Mar 10 21:30:32 1999
@@ -321,8 +321,6 @@
X .long 75b,76b
X .text
X
-#undef CLEAR_USE_DCBZ 1
-#undef CLEAR_NO_CACHE 1
X .globl __clear_user
X __clear_user:
X addi r6,r3,-4
@@ -333,15 +331,6 @@
X /* clear a single word */
X 11: stwu r5,4(r6)
X beqlr
-#if defined(CLEAR_NO_CACHE) && defined (CONFIG_6xx)
- /*
- * no reason to turn off the cache for a single word
- * or a few bytes -- Cort
- */
- mfspr r7,HID0
- ori r8,r7,HID0_DLOCK
- mtspr HID0,r8
-#endif /* CLEAR_NO_CACHE */
X /* clear word sized chunks */
X andi. r0,r6,3
X add r4,r0,r4
@@ -353,10 +342,6 @@
X 1: stwu r5,4(r6)
X bdnz 1b
X 6: andi. r4,r4,3
-#if defined(CLEAR_NO_CACHE) && defined (CONFIG_6xx)
- /* restore the original state of HID0 in case cache was off -- Cort */
- mtspr HID0,r7
-#endif /* CLEAR_NO_CACHE */
X /* clear byte sized chunks */
X 7: cmpwi 0,r4,0
X beqlr
@@ -371,9 +356,6 @@
X .align 2
X .long 11b,99b
X .long 1b,99b
-#ifdef CLEAR_USE_DCBZ
- /*.long 66b,99b*/
-#endif
X .long 8b,99b
X .text
X
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/mbx_defconfig linux/arch/ppc/mbx_defconfig
--- v2.2.3/linux/arch/ppc/mbx_defconfig Wed Mar 10 15:29:45 1999
+++ linux/arch/ppc/mbx_defconfig Wed Mar 10 21:30:32 1999
@@ -14,8 +14,8 @@
X # CONFIG_ALL_PPC is not set
X # CONFIG_APUS is not set
X CONFIG_MBX=y
-CONFIG_SMP=n
X CONFIG_MACH_SPECIFIC=y
+# CONFIG_SMP is not set
X CONFIG_SERIAL_CONSOLE=y
X
X #
@@ -58,8 +58,26 @@
X # Block devices
X #
X # CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_IDE is not set
-# CONFIG_BLK_DEV_HD_ONLY is not set
+CONFIG_BLK_DEV_IDE=y
+# CONFIG_BLK_DEV_HD_IDE is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_RZ1000 is not set
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_VIA82C586 is not set
+# CONFIG_BLK_DEV_CMD646 is not set
+CONFIG_BLK_DEV_SL82C105=y
+# CONFIG_IDE_CHIPSETS is not set
X # CONFIG_BLK_DEV_LOOP is not set
X # CONFIG_BLK_DEV_NBD is not set
X # CONFIG_BLK_DEV_MD is not set
@@ -90,7 +108,7 @@
X # CONFIG_SYN_COOKIES is not set
X # CONFIG_INET_RARP is not set
X CONFIG_IP_NOSR=y
-# CONFIG_SKB_LARGE is not set
+CONFIG_SKB_LARGE=y
X # CONFIG_IPV6 is not set
X # CONFIG_IPX is not set
X # CONFIG_ATALK is not set
@@ -102,7 +120,11 @@
X # CONFIG_WAN_ROUTER is not set
X # CONFIG_NET_FASTROUTE is not set
X # CONFIG_NET_HW_FLOWCONTROL is not set
-# CONFIG_CPU_IS_SLOW is not set
+CONFIG_CPU_IS_SLOW=y
+
+#
+# QoS and/or fair queueing
+#
X # CONFIG_NET_SCHED is not set
X
X #
@@ -126,6 +148,7 @@
X # CONFIG_NET_VENDOR_RACAL is not set
X # CONFIG_RTL8139 is not set
X # CONFIG_YELLOWFIN is not set
+# CONFIG_ACENIC is not set
X # CONFIG_NET_ISA is not set
X # CONFIG_NET_EISA is not set
X # CONFIG_NET_POCKET is not set
@@ -138,6 +161,8 @@
X # CONFIG_TR is not set
X # CONFIG_SHAPER is not set
X # CONFIG_HOSTESS_SV11 is not set
+# CONFIG_COSA is not set
+# CONFIG_RCPCI is not set
X
X #
X # Amateur Radio support
@@ -161,7 +186,8 @@
X #
X # Character devices
X #
-# CONFIG_VT is not set
+CONFIG_VT=y
+# CONFIG_VT_CONSOLE is not set
X CONFIG_SERIAL=y
X CONFIG_SERIAL_CONSOLE=y
X # CONFIG_SERIAL_EXTENDED is not set
@@ -170,9 +196,17 @@
X # CONFIG_MOUSE is not set
X # CONFIG_QIC02_TAPE is not set
X # CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
X # CONFIG_RTC is not set
+
+#
+# Video For Linux
+#
X # CONFIG_VIDEO_DEV is not set
-# CONFIG_NVRAM is not set
+
+#
+# Joystick support
+#
X # CONFIG_JOYSTICK is not set
X
X #
@@ -184,35 +218,46 @@
X # Filesystems
X #
X # CONFIG_QUOTA is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_EXT2_FS is not set
-# CONFIG_ISO9660_FS is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
X # CONFIG_FAT_FS is not set
X # CONFIG_MSDOS_FS is not set
X # CONFIG_UMSDOS_FS is not set
X # CONFIG_VFAT_FS is not set
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_HPFS_FS is not set
X CONFIG_PROC_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
X CONFIG_NFS_FS=y
X CONFIG_ROOT_NFS=y
X # CONFIG_NFSD is not set
X CONFIG_SUNRPC=y
X CONFIG_LOCKD=y
-# CONFIG_CODA_FS is not set
X # CONFIG_SMB_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_UFS_FS is not set
+# CONFIG_NCP_FS is not set
+
+#
+# Partition Types
+#
X # CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MAC_PARTITION is not set
X # CONFIG_SMD_DISKLABEL is not set
X # CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_MAC_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
X # CONFIG_NLS is not set
X
X #
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/mbxboot/Makefile linux/arch/ppc/mbxboot/Makefile
--- v2.2.3/linux/arch/ppc/mbxboot/Makefile Wed Dec 31 16:00:00 1969
+++ linux/arch/ppc/mbxboot/Makefile Fri Mar 19 10:50:03 1999
@@ -0,0 +1,101 @@
+#
+# arch/ppc/boot/Makefile
+#
+# 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 by Linus Torvalds
+# Adapted for PowerPC by Gary Thomas
+# modified by Cort (co...@cs.nmt.edu)
+#
+.c.s:
+ $(CC) $(CFLAGS) -S -o $*.s $<
+.s.o:
+ $(AS) -o $*.o $<
+.c.o:
+ $(CC) $(CFLAGS) -DINITRD_OFFSET=$(IOFF) -DINITRD_SIZE=$(ISZ) -DZIMAGE_OFFSET=$(ZOFF) -DZIMAGE_SIZE=$(ZSZ) -DKERNELBASE=$(KERNELBASE) -c -o $*.o $<
+.S.s:
+ $(CC) -D__ASSEMBLY__ -traditional -E -o $*.o $<
+.S.o:
+ $(CC) -D__ASSEMBLY__ -traditional -c -o $*.o $<
+
+ZOFF = 0
+ZSZ = 0
+IOFF = 0
+ISZ = 0
+
+TFTPIMAGE=/tftpboot/zImage.mbx
+ZLINKFLAGS = -T ../vmlinux.lds -Ttext 0x00100000
+GZIP_FLAGS = -v9
+
+OBJECTS := head.o misc.o ../coffboot/zlib.o mbxtty.o
+CFLAGS = -O2 -DSTDC_HEADERS -fno-builtin -I$(TOPDIR)/include -DCONFIG_MBX
+OBJCOPY = $(CROSS_COMPILE)objcopy
+OBJCOPY_ARGS = -O elf32-powerpc
+
+all: zImage
+
+zvmlinux.initrd: zvmlinux
+ $(LD) $(ZLINKFLAGS) -o zvmlinux.initrd.tmp $(OBJECTS)
+ $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
+ --add-section=initrd=ramdisk.image.gz \
+ --add-section=image=../coffboot/vmlinux.gz \
+ zvmlinux.initrd.tmp zvmlinux.initrd
+ $(CC) $(CFLAGS) -DINITRD_OFFSET=`sh offset $(OBJDUMP) zvmlinux.initrd initrd` \
+ -DINITRD_SIZE=`sh size $(OBJDUMP) zvmlinux.initrd initrd` \
+ -DZIMAGE_OFFSET=`sh offset $(OBJDUMP) zvmlinux.initrd image` \
+ -DZIMAGE_SIZE=`sh size $(OBJDUMP) zvmlinux.initrd image` \
+ -DKERNELBASE=$(KERNELBASE) -c -o misc.o misc.c
+ $(LD) $(ZLINKFLAGS) -o zvmlinux.initrd.tmp $(OBJECTS)
+ $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
+ --add-section=initrd=ramdisk.image.gz \
+ --add-section=image=../coffboot/vmlinux.gz \
+ zvmlinux.initrd.tmp $@
+ rm zvmlinux.initrd.tmp
+
+zImage: zvmlinux
+ ln -sf zvmlinux zImage
+
+zImage.initrd: zvmlinux.initrd
+ ln -sf zvmlinux.initrd zImage.initrd
+
+zvmlinux: $(OBJECTS) ../coffboot/vmlinux.gz
+#
+# build the boot loader image and then compute the offset into it
+# for the kernel image
+#
+ $(LD) $(ZLINKFLAGS) -o zvmlinux.tmp $(OBJECTS)
+ $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment --add-section=image=../coffboot/vmlinux.gz \
+ zvmlinux.tmp $@
+#
+# then with the offset rebuild the bootloader so we know where the kernel is
+#
+ $(CC) $(CFLAGS) -DINITRD_OFFSET=0 -DINITRD_SIZE=0 \
+ -DZIMAGE_OFFSET=`sh offset $(OBJDUMP) zvmlinux image` \
+ -DZIMAGE_SIZE=`sh size $(OBJDUMP) zvmlinux image` -DKERNELBASE=$(KERNELBASE) \
+ -c -o misc.o misc.c
+ $(LD) $(ZLINKFLAGS) -o zvmlinux.tmp $(OBJECTS)
+ $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment --add-section=image=../coffboot/vmlinux.gz \
+ zvmlinux.tmp $@
+ rm zvmlinux.tmp
+
+znetboot : zImage
+ cp zImage $(TFTPIMAGE)
+
+znetboot.initrd : zImage.initrd
+ cp zImage.initrd $(TFTPIMAGE)
+
+clean:
+ rm -f vmlinux* zvmlinux* zImage*
+
+fastdep:
+ $(TOPDIR)/scripts/mkdep *.[Sch] > .depend
+
+dep:
+ $(CPP) -M *.S *.c > .depend
+
+# just here to match coffboot/Makefile
+vmlinux.coff:
+
+vmlinux.coff.initrd:
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/mbxboot/head.S linux/arch/ppc/mbxboot/head.S
--- v2.2.3/linux/arch/ppc/mbxboot/head.S Wed Dec 31 16:00:00 1969
+++ linux/arch/ppc/mbxboot/head.S Fri Mar 19 10:50:03 1999
@@ -0,0 +1,201 @@
+#include <linux/config.h>
+#include "../kernel/ppc_defs.h"
+#include "../kernel/ppc_asm.tmpl"
+#include <asm/processor.h>
+#include <asm/cache.h>
+
+ .text
+
+/*
+ * $Id: head.S,v 1.2 1999/02/17 06:29:41 cort Exp $
+ *
+ * This code is loaded by the ROM loader at some arbitrary location.
+ * Move it to high memory so that it can load the kernel at 0x0000.
+ *
+ * The MBX EPPC-Bug understands ELF, so it loads us into the location
+ * specified in the header. This is a two step process. First, EPPC-Bug
+ * loads the file into the intermediate buffer memory location specified
+ * by the environment parameters. When it discovers this is an ELF
+ * binary, it relocates to the link address for us. Unfortunately, the
+ * header does not move with the file, so we have to find the
+ * intermediate load location and read the header from there. From
+ * information provided by Motorola (thank you), we know this intermediate
+ * location can be found from the NVRAM environment.
+ * All of these addresses must be somewhat carefully chosen to make sure
+ * we don't overlap the regions. I chose to load the kernel at 0, the
+ * compressed image loads at 0x00100000, and the MBX intermediate buffer
+ * was set to 0x00200000. Provided the loaded kernel image never grows
+ * over one megabyte (which I am going to ensure never happens :-), these
+ * will work fine. When we get called from EPPC-Bug, registers are:
+ * R1 - Stack pointer at a high memory address.
+ * R3 - Pointer to Board Information Block.
+ * R4 - Pointer to argument string.
+ * Interrupts masked, cache and MMU disabled.
+ */
+
+ .globl start
+start:
+ bl start_
+start_:
+ mr r11,r3 /* Save pointer to residual/board data */
+/* Clear all of BSS */
+ lis r3,edata@h
+ ori r3,r3,edata@l
+ lis r4,end@h
+ ori r4,r4,end@l
+ subi r3,r3,4
+ subi r4,r4,4
+ li r0,0
+50: stwu r0,4(r3)
+ cmp 0,r3,r4
+ bne 50b
+90: mr r9,r1 /* Save old stack pointer (in case it matters) */
+ lis r1,.stack@h
+ ori r1,r1,.stack@l
+ addi r1,r1,4096*2
+ subi r1,r1,256
+ li r2,0x000F /* Mask pointer to 16-byte boundary */
+ andc r1,r1,r2
+/* Run loader */
+ mr r3, r11
+ mr r21, r11
+ bl serial_init /* Init MBX serial port */
+
+ lis r8, 0xfa200000@h /* Disable Ethernet SCC */
+ li r0, 0
+ stw r0, 0x0a00(r8)
+
+ mr r11, r21
+ lis r8,start@h
+ ori r8,r8,start@l
+ li r9,end@h
+ ori r9,r9,end@l
+ sub r7,r8,r9
+ srwi r7,r7,2
+#define ILAP_ADDRESS 0xfa000020
+ lis r8, ILAP_ADDRESS@h
+ lwz r8, ILAP_ADDRESS@l(r8)
+ addis r8, r8, 1 /* Add 64K */
+ mr r3,r8 /* Load point */
+ mr r4,r7 /* Program length */
+ mr r5,r6 /* Checksum */
+ mr r6,r11 /* Residual data */
+ bl decompress_kernel
+
+ /* changed to use r3 (as firmware does) for kernel
+ as ptr to residual -- Cort*/
+ lis r6,cmd_line@h
+ ori r6,r6,cmd_line@l
+ lwz r6, 0(r6)
+ subi r7,r6,1
+00: lbzu r2,1(r7)
+ cmpi 0,r2,0
+ bne 00b
+
+ /* r4,r5 have initrd_start, size */
+ lis r2,initrd_start@h
+ ori r2,r2,initrd_start@l
+ lwz r4,0(r2)
+ lis r2,initrd_end@h
+ ori r2,r2,initrd_end@l
+ lwz r5,0(r2)
+
+ /* tell kernel we're prep */
+ /*
+ * get start address of kernel code which is stored as a coff
+ * entry. see boot/head.S -- Cort
+ */
+ li r9,0x0
+ lwz r9,0(r9)
+ mtlr r9
+ blr
+hang:
+ b hang
+
+/*
+ * Delay for a number of microseconds
+ * -- Use the BUS timer (assumes 66MHz)
+ */
+ .globl udelay
+udelay:
+ mfspr r4,PVR
+ srwi r4,r4,16
+ cmpi 0,r4,1 /* 601 ? */
+ bne .udelay_not_601
+00: li r0,86 /* Instructions / microsecond? */
+ mtctr r0
+10: addi r0,r0,0 /* NOP */
+ bdnz 10b
+ subic. r3,r3,1
+ bne 00b
+ blr
+
+.udelay_not_601:
+ mulli r4,r3,1000 /* nanoseconds */
+ addi r4,r4,59
+ li r5,60
+ divw r4,r4,r5 /* BUS ticks */
+1: mftbu r5
+ mftb r6
+ mftbu r7
+ cmp 0,r5,r7
+ bne 1b /* Get [synced] base time */
+ addc r9,r6,r4 /* Compute end time */
+ addze r8,r5
+2: mftbu r5
+ cmp 0,r5,r8
+ blt 2b
+ bgt 3f
+ mftb r6
+ cmp 0,r6,r9
+ blt 2b
+3: blr
+
+.globl _get_HID0
+_get_HID0:
+ mfspr r3,HID0
+ blr
+
+.globl _put_HID0
+_put_HID0:
+ mtspr HID0,r3
+ blr
+
+.globl _get_MSR
+_get_MSR:
+ mfmsr r3
+ blr
+
+.globl _put_MSR
+_put_MSR:
+ mtmsr r3
+ blr
+
+/*
+ * Flush instruction cache
+ * *** I'm really paranoid here!
+ */
+_GLOBAL(flush_instruction_cache)
+ mflr r5
+ bl flush_data_cache
+ mtlr r5
+ blr
+
+#define NUM_CACHE_LINES 128*8
+#define CACHE_LINE_SIZE 32
+#define cache_flush_buffer 0x1000
+
+/*
+ * Flush data cache
+ * *** I'm really paranoid here!
+ */
+_GLOBAL(flush_data_cache)
+ lis r3,cache_flush_buffer@h
+ ori r3,r3,cache_flush_buffer@l
+ li r4,NUM_CACHE_LINES
+ mtctr r4
+00: lwz r4,0(r3)
+ addi r3,r3,CACHE_LINE_SIZE /* Next line, please */
+ bdnz 00b
+10: blr
+ .comm .stack,4096*2,4
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/mbxboot/mbxtty.c linux/arch/ppc/mbxboot/mbxtty.c
--- v2.2.3/linux/arch/ppc/mbxboot/mbxtty.c Wed Dec 31 16:00:00 1969
+++ linux/arch/ppc/mbxboot/mbxtty.c Fri Mar 19 10:50:03 1999
@@ -0,0 +1,201 @@
+
+
+/* Minimal serial functions needed to send messages out the serial
+ * port on the MBX console.
+ *
+ * The MBX uxes SMC1 for the serial port. We reset the port and use
+ * only the first BD that EPPC-Bug set up as a character FIFO.
+ *
+ * Later versions (at least 1.4, maybe earlier) of the MBX EPPC-Bug
+ * use COM1 instead of SMC1 as the console port. This kinda sucks
+ * for the rest of the kernel, so here we force the use of SMC1 again.
+ * I f**ked around for a day trying to figure out how to make EPPC-Bug
+ * use SMC1, but gave up and decided to fix it here.
+ */
+#include <linux/config.h>
+#include <linux/types.h>
+#ifdef CONFIG_MBX
+#include <asm/mbx.h>
+#endif
+#ifdef CONFIG_FADS
+#include <asm/fads.h>
+#endif
+#include "../8xx_io/commproc.h"
+
+#ifdef CONFIG_MBX
+#define MBX_CSR1 ((volatile u_char *)0xfa100000)
+#define CSR1_COMEN (u_char)0x02
+#endif
+
+static cpm8xx_t *cpmp = (cpm8xx_t *)&(((immap_t *)IMAP_ADDR)->im_cpm);
+
+void
+serial_init(bd_t *bd)
+{
+ volatile smc_t *sp;
+ volatile smc_uart_t *up;
+ volatile cbd_t *tbdf, *rbdf;
+ volatile cpm8xx_t *cp;
+ uint dpaddr, memaddr;
+
+ cp = cpmp;
+ sp = (smc_t*)&(cp->cp_smc[0]);
+ up = (smc_uart_t *)&cp->cp_dparam[PROFF_SMC1];
+
+ /* Disable transmitter/receiver.
+ */
+ sp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN);
+
+#ifdef CONFIG_MBX
+ if (*MBX_CSR1 & CSR1_COMEN) {
+ /* COM1 is enabled. Initialize SMC1 and use it for
+ * the console port.
+ */
+
+ /* Enable SDMA.
+ */
+ ((immap_t *)IMAP_ADDR)->im_siu_conf.sc_sdcr = 1;
+
+ /* Use Port B for SMCs instead of other functions.
+ */
+ cp->cp_pbpar |= 0x00000cc0;
+ cp->cp_pbdir &= ~0x00000cc0;
+ cp->cp_pbodr &= ~0x00000cc0;
+
+ /* Allocate space for two buffer descriptors in the DP ram.
+ * For now, this address seems OK, but it may have to
+ * change with newer versions of the firmware.
+ */
+ dpaddr = 0x0800;
+
+ /* Grab a few bytes from the top of memory. EPPC-Bug isn't
+ * running any more, so we can do this.
+ */
+ memaddr = (bd->bi_memsize - 32) & ~15;
+
+ /* Set the physical address of the host memory buffers in
+ * the buffer descriptors.
+ */
+ rbdf = (cbd_t *)&cp->cp_dpmem[dpaddr];
+ rbdf->cbd_bufaddr = memaddr;
+ rbdf->cbd_sc = 0;
+ tbdf = rbdf + 1;
+ tbdf->cbd_bufaddr = memaddr+4;
+ tbdf->cbd_sc = 0;
+
+ /* Set up the uart parameters in the parameter ram.
+ */
+ up->smc_rbase = dpaddr;
+ up->smc_tbase = dpaddr+sizeof(cbd_t);
+ up->smc_rfcr = SMC_EB;
+ up->smc_tfcr = SMC_EB;
+
+ /* Set UART mode, 8 bit, no parity, one stop.
+ * Enable receive and transmit.
+ */
+ sp->smc_smcmr = smcr_mk_clen(9) | SMCMR_SM_UART;
+
+ /* Mask all interrupts and remove anything pending.
+ */
+ sp->smc_smcm = 0;
+ sp->smc_smce = 0xff;
+
+ /* Set up the baud rate generator.
+ * See 8xx_io/commproc.c for details.
+ */
+ cp->cp_simode = 0x10000000;
+ cp->cp_brgc1 =
+ ((((bd->bi_intfreq * 1000000)/16) / 9600) << 1) | CPM_BRG_EN;
+
+ /* Enable SMC1 for console output.
+ */
+ *MBX_CSR1 &= ~CSR1_COMEN;
+ }
+ else {
+#endif
+ /* SMC1 is used as console port.
+ */
+ tbdf = (cbd_t *)&cp->cp_dpmem[up->smc_tbase];
+ rbdf = (cbd_t *)&cp->cp_dpmem[up->smc_rbase];
+
+ /* Issue a stop transmit, and wait for it.
+ */
+ cp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_SMC1,
+ CPM_CR_STOP_TX) | CPM_CR_FLG;
+ while (cp->cp_cpcr & CPM_CR_FLG);
+#ifdef CONFIG_MBX
+ }
+#endif
+
+ /* Make the first buffer the only buffer.
+ */
+ tbdf->cbd_sc |= BD_SC_WRAP;
+ rbdf->cbd_sc |= BD_SC_EMPTY | BD_SC_WRAP;
+
+ /* Single character receive.
+ */
+ up->smc_mrblr = 1;
+ up->smc_maxidl = 0;
+
+ /* Initialize Tx/Rx parameters.
+ */
+ cp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_SMC1, CPM_CR_INIT_TRX) | CPM_CR_FLG;
+ while (cp->cp_cpcr & CPM_CR_FLG);
+
+ /* Enable transmitter/receiver.
+ */
+ sp->smc_smcmr |= SMCMR_REN | SMCMR_TEN;
+}
+
+void
+serial_putchar(const char c)
+{
+ volatile cbd_t *tbdf;
+ volatile char *buf;
+ volatile smc_uart_t *up;
+
+ up = (smc_uart_t *)&cpmp->cp_dparam[PROFF_SMC1];
+ tbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_tbase];
+
+ /* Wait for last character to go.
+ */
+ buf = (char *)tbdf->cbd_bufaddr;
+ while (tbdf->cbd_sc & BD_SC_READY);
+
+ *buf = c;
+ tbdf->cbd_datlen = 1;
+ tbdf->cbd_sc |= BD_SC_READY;
+}
+
+char
+serial_getc()
+{
+ volatile cbd_t *rbdf;
+ volatile char *buf;
+ volatile smc_uart_t *up;
+ char c;
+
+ up = (smc_uart_t *)&cpmp->cp_dparam[PROFF_SMC1];
+ rbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_rbase];
+
+ /* Wait for character to show up.
+ */
+ buf = (char *)rbdf->cbd_bufaddr;
+ while (rbdf->cbd_sc & BD_SC_EMPTY);
+ c = *buf;
+ rbdf->cbd_sc |= BD_SC_EMPTY;
+
+ return(c);
+}
+
+int
+serial_tstc()
+{
+ volatile cbd_t *rbdf;
+ volatile smc_uart_t *up;
+
+ up = (smc_uart_t *)&cpmp->cp_dparam[PROFF_SMC1];
+ rbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_rbase];
+
+ return(!(rbdf->cbd_sc & BD_SC_EMPTY));
+}
diff -u --recursive --new-file v2.2.3/linux/arch/ppc/mbxboot/misc.c linux/arch/ppc/mbxboot/misc.c
--- v2.2.3/linux/arch/ppc/mbxboot/misc.c Wed Dec 31 16:00:00 1969
+++ linux/arch/ppc/mbxboot/misc.c Fri Mar 19 10:50:03 1999
@@ -0,0 +1,637 @@
+/*
+ * misc.c
+ *
+ * $Id: misc.c,v 1.1 1999/02/17 05:00:06 cort Exp $
+ *
+ * Adapted for PowerPC by Gary Thomas
+ *
+ * Rewritten by Cort Dougan (co...@cs.nmt.edu)
+ * One day to be replaced by a single bootloader for chrp/prep/pmac. -- Cort
+ */
+
+#include <linux/types.h>
+#include "../coffboot/zlib.h"
+#include "asm/residual.h"
+#include <linux/elf.h>
+#include <linux/config.h>
+#include <asm/page.h>
+#include <asm/processor.h>
+#include <asm/mmu.h>
+#ifdef CONFIG_MBX
+#include <asm/mbx.h>
+#endif
+#ifdef CONFIG_FADS
+#include <asm/fads.h>
+#endif
+
+/*
+ * Please send me load/board info and such data for hardware not
+ * listed here so I can keep track since things are getting tricky
+ * with the different load addrs with different firmware. This will
+ * help to avoid breaking the load/boot process.
+ * -- Cort
+ */
+char *avail_ram;
+char *end_avail;
+
+/* Because of the limited amount of memory on the MBX, it presents
+ * loading problems. The biggest is that we load this boot program
+ * into a relatively low memory address, and the Linux kernel Bss often
+ * extends into this space when it get loaded. When the kernel starts
+ * and zeros the BSS space, it also writes over the information we
+ * save here and pass to the kernel (command line and board info).
+ * On the MBX we grab some known memory holes to hold this information.
+ */
+#if defined(CONFIG_SERIAL_CONSOLE)
+char cmd_preset[] = "console=ttyS0,9600n8";
+#else
+char cmd_preset[] = "";
+#endif
+char cmd_buf[256];
+char *cmd_line = cmd_buf;
+
+char *root_string = "root=/dev/nfs";
+char *nfsaddrs_string = "nfsaddrs=";
+char *nfsroot_string = "nfsroot=";
+char *defroot_string = "/sys/mbxroot";
+int do_ipaddrs(char **cmd_cp, int echo);
+void do_nfsroot(char **cmd_cp, char *dp);
+int strncmp(const char * cs,const char * ct,size_t count);
+char *strrchr(const char * s, int c);
+
+RESIDUAL hold_resid_buf;
+RESIDUAL *hold_residual = &hold_resid_buf;
+unsigned long initrd_start = 0, initrd_end = 0;
+char *zimage_start;
+int zimage_size;
+
+char *vidmem = (char *)0xC00B8000;
+int lines, cols;
+int orig_x, orig_y;
+
+void puts(const char *);
+void putc(const char c);
+void puthex(unsigned long val);
+void _bcopy(char *src, char *dst, int len);
+void * memcpy(void * __dest, __const void * __src,
+ int __n);
+void gunzip(void *, int, unsigned char *, int *);
+
+void pause()
+{
+ puts("pause\n");
+}
+
+void exit()
+{
+ puts("exit\n");
+ while(1);
+}
+
+/* The MBX is just the serial port.
+*/
+tstc(void)
+{
+ return (serial_tstc());
+}
+
+getc(void)
+{
+ while (1) {
+ if (serial_tstc()) return (serial_getc());
+ }
+}
+
+void
+putc(const char c)
+{
+ serial_putchar(c);
+}
+
+void puts(const char *s)
+{
+ char c;
+
+ while ( ( c = *s++ ) != '\0' ) {
+ serial_putchar(c);
+ if ( c == '\n' )
+ serial_putchar('\r');
+ }
+}
+
+
+void * memcpy(void * __dest, __const void * __src,
+ int __n)
+{
+ int i;
+ char *d = (char *)__dest, *s = (char *)__src;
+
+ for (i=0;i<__n;i++) d[i] = s[i];
+}
+
+int memcmp(__const void * __dest, __const void * __src,
+ int __n)
+{
+ int i;
+ char *d = (char *)__dest, *s = (char *)__src;
+
+ for (i=0;i<__n;i++, d++, s++)
+ {
+ if (*d != *s)
+ {
+ return (*s - *d);
+ }
+ }
+ return (0);
+}
+
+void error(char *x)
+{
+ puts("\n\n");
+ puts(x);
+ puts("\n\n -- System halted");
+
+ while(1); /* Halt */
+}
+
+void *zalloc(void *x, unsigned items, unsigned size)
+{
+ void *p = avail_ram;
+
+ size *= items;
+ size = (size + 7) & -8;
+ avail_ram += size;
+ if (avail_ram > end_avail) {
+ puts("oops... out of memory\n");
+ pause();
+ }
+ return p;
+}
+
+void zfree(void *x, void *addr, unsigned nb)
+{
+}
+
+#define HEAD_CRC 2
+#define EXTRA_FIELD 4
+#define ORIG_NAME 8
+#define COMMENT 0x10
+#define RESERVED 0xe0
+
+#define DEFLATED 8
+
+
+void gunzip(void *dst, int dstlen, unsigned char *src, int *lenp)
+{
+ z_stream s;
+ int r, i, flags;
+
+ /* skip header */
+ i = 10;
+ flags = src[3];
+ if (src[2] != DEFLATED || (flags & RESERVED) != 0) {
+ puts("bad gzipped data\n");
+ exit();
+ }
+ if ((flags & EXTRA_FIELD) != 0)
+ i = 12 + src[10] + (src[11] << 8);
+ if ((flags & ORIG_NAME) != 0)
+ while (src[i++] != 0)
+ ;
+ if ((flags & COMMENT) != 0)
+ while (src[i++] != 0)
+ ;
+ if ((flags & HEAD_CRC) != 0)
+ i += 2;
+ if (i >= *lenp) {
+ puts("gunzip: ran out of data in header\n");
+ exit();
+ }
+
+ s.zalloc = zalloc;
+ s.zfree = zfree;
+ r = inflateInit2(&s, -MAX_WBITS);
+ if (r != Z_OK) {
+ puts("inflateInit2 returned %d\n");
+ exit();
+ }
+ s.next_in = src + i;
+ s.avail_in = *lenp - i;
+ s.next_out = dst;
+ s.avail_out = dstlen;
+ r = inflate(&s, Z_FINISH);
+ if (r != Z_OK && r != Z_STREAM_END) {
+ puts("inflate returned %d\n");
+ exit();
+ }
+ *lenp = s.next_out - (unsigned char *) dst;
+ inflateEnd(&s);
+}
+
+unsigned char sanity[0x2000];
+
+unsigned long
+decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum, RESIDUAL *residual)
+{
+ int timer;
+ extern unsigned long start;
+ char *cp, ch;
+ unsigned long i, motorola_id = 0;
+ char needs_reloc = 0;
+ BATU *u;
+ BATL *l;
+ char *dp;
+
+ lines = 25;
+ cols = 80;
+ orig_x = 0;
+ orig_y = 24;
+
+ /* Grab some space for the command line and board info. Since
+ * we no longer use the ELF header, but it was loaded, grab
+ * that space.
+ */
+ cmd_line = (char *)(load_addr - 0x10000);
+ hold_residual = (RESIDUAL *)(cmd_line + sizeof(cmd_buf));
+ /* copy board data */
+ if (residual)
+ memcpy(hold_residual,residual,sizeof(bd_t));
+
+ /* MBX/prep sometimes put the residual/board info at the end of mem
+ * assume 16M for now -- Cort
+ * To boot on standard MBX boards with 4M, we can't use initrd,
+ * and we have to assume less memory. -- Dan
+ */
+ if ( INITRD_OFFSET )
+ end_avail = (char *)0x01000000;
+ else
+ end_avail = (char *)0x00400000;
+
+ /* let residual data tell us it's higher */
+ if ( (unsigned long)residual > 0x00800000 )
+ end_avail = (char *)PAGE_ALIGN((unsigned long)residual);
+
+ puts("loaded at: "); puthex(load_addr);
+ puts(" "); puthex((unsigned long)(load_addr + (4*num_words))); puts("\n");
+ if ( (unsigned long)load_addr != (unsigned long)&start )
+ {
+ puts("relocated to: "); puthex((unsigned long)&start);
+ puts(" ");
+ puthex((unsigned long)((unsigned long)&start + (4*num_words)));
+ puts("\n");
+ }
+
+ if ( residual )
+ {
+ puts("board data at: "); puthex((unsigned long)residual);
+ puts(" ");
+ puthex((unsigned long)((unsigned long)residual + sizeof(bd_t)));
+ puts("\n");
+ puts("relocated to: ");
+ puthex((unsigned long)hold_residual);
+ puts(" ");
+ puthex((unsigned long)((unsigned long)hold_residual + sizeof(bd_t)));
+ puts("\n");
+ }
+
+ /* we have to subtract 0x10000 here to correct for objdump including the
+ size of the elf header which we strip -- Cort */
+ zimage_start = (char *)(load_addr - 0x10000 + ZIMAGE_OFFSET);
+ zimage_size = ZIMAGE_SIZE;
+
+ if ( INITRD_OFFSET )
+ initrd_start = load_addr - 0x10000 + INITRD_OFFSET;
+ else
+ initrd_start = 0;
+ initrd_end = INITRD_SIZE + initrd_start;
+
+ /*
+ * setup avail_ram - this is the first part of ram usable
+ * by the uncompress code. -- Cort
+ */
+ avail_ram = (char *)PAGE_ALIGN((unsigned long)zimage_start+zimage_size);
+ if ( ((load_addr+(num_words*4)) > (unsigned long) avail_ram)
+ && (load_addr <= 0x01000000) )
+ avail_ram = (char *)(load_addr+(num_words*4));
+ if ( (((unsigned long)&start+(num_words*4)) > (unsigned long) avail_ram)
+ && (load_addr <= 0x01000000) )
+ avail_ram = (char *)((unsigned long)&start+(num_words*4));
+
+ /* relocate zimage */
+ puts("zimage at: "); puthex((unsigned long)zimage_start);
+ puts(" "); puthex((unsigned long)(zimage_size+zimage_start)); puts("\n");
+ /*
+ * don't relocate the zimage if it was loaded above 16M since
+ * things get weird if we try to relocate -- Cort
+ * We don't relocate zimage on a base MBX board because of
+ * insufficient memory. In this case we don't have initrd either,
+ * so use that as an indicator. -- Dan
+ */
+
+ /* Determine if we have a Motorola board */
+ needs_reloc = 0;
+ if ( (( (unsigned long)zimage_start <= 0x01000000 ) && initrd_start)
+ || needs_reloc)
+ {
+ memcpy ((void *)PAGE_ALIGN(-PAGE_SIZE+(unsigned long)end_avail-zimage_size),
+ (void *)zimage_start, zimage_size );
+ zimage_start = (char *)PAGE_ALIGN(-PAGE_SIZE+(unsigned long)end_avail-zimage_size);
+ end_avail = (char *)zimage_start;
+ puts("relocated to: "); puthex((unsigned long)zimage_start);
+ puts(" ");
+ puthex((unsigned long)zimage_size+(unsigned long)zimage_start);
+ puts("\n");
+ }
+
+ /* relocate initrd */
+ if ( initrd_start )
+ {
+ puts("initrd at: "); puthex(initrd_start);
+ puts(" "); puthex(initrd_end); puts("\n");
+ /*
+ * Memory is really tight on the MBX (we can assume 4M)
+ * so put the initrd at the TOP of ram, and set end_avail
+ * to right after that.
+ *
+ * I should do something like this for prep, too and keep
+ * a variable end_of_DRAM to keep track of what we think the
+ * max ram is.
+ * -- Cort
+ */
+ if (needs_reloc)
+ {
+ memcpy ((void *)PAGE_ALIGN(-PAGE_SIZE+
+ (unsigned long)end_avail-INITRD_SIZE),
+ (void *)initrd_start,
+ INITRD_SIZE );
+ initrd_start = PAGE_ALIGN(-PAGE_SIZE+
+ (unsigned long)end_avail-INITRD_SIZE);
+ initrd_end = initrd_start + INITRD_SIZE;
+ end_avail = (char *)initrd_start;
+ puts("relocated to: "); puthex(initrd_start);
+ puts(" "); puthex(initrd_end); puts("\n");
+ }
+ }
+
+ puts("avail ram: "); puthex((unsigned long)avail_ram); puts(" ");
+ puthex((unsigned long)end_avail); puts("\n");
+
+ puts("\nLinux/PPC load: ");
+ timer = 0;
+ cp = cmd_line;
+ memcpy (cmd_line, cmd_preset, sizeof(cmd_preset));
+ while ( *cp ) putc(*cp++);
+ while (timer++ < 5*1000) {
+ if (tstc()) {
+ while ((ch = getc()) != '\n' && ch != '\r') {
+ if (ch == '\b') {
+ if (cp != cmd_line) {
+ cp--;
+ puts("\b \b");
+ }
+ } else if (ch == '?') {
+ if (!do_ipaddrs(&cp, 1)) {
+ *cp++ = ch;
+ putc(ch);
+ }
+ } else {
+ *cp++ = ch;
+ putc(ch);
+ }
+ }
+ break; /* Exit 'timer' loop */
+ }
+ udelay(1000); /* 1 msec */
+ }
+ *cp = 0;
+ /* The MBX does not currently have any default boot strategy.
+ * If the command line is not filled in, we will automatically
+ * create the default network boot.
+ */
+ if (cmd_line[0] == 0) {
+ dp = root_string;
+ while (*dp != 0)
+ *cp++ = *dp++;
+ *cp++ = ' ';
+
+ dp = nfsaddrs_string;
+ while (*dp != 0)
+ *cp++ = *dp++;
+ dp = cp;
+ do_ipaddrs(&cp, 0);
+ *cp++ = ' ';
+
+ /* Add the server address to the root file system path.
+ */
+ dp = strrchr(dp, ':');
+ dp++;
+ do_nfsroot(&cp, dp);
+ *cp = 0;
+ }
+ puts("\n");
+
+ /* mappings on early boot can only handle 16M */
+ if ( (int)(cmd_line[0]) > (16<<20))
+ puts("cmd_line located > 16M\n");
+ if ( (int)hold_residual > (16<<20))
+ puts("hold_residual located > 16M\n");
+ if ( initrd_start > (16<<20))
+ puts("initrd_start located > 16M\n");
+
+ puts("Uncompressing Linux...");
+
+ gunzip(0, 0x400000, zimage_start, &zimage_size);
+ puts("done.\n");
+ puts("Now booting the kernel\n");
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 05'
echo 'File patch-2.2.4 is continued in part 06'
echo 06 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 10 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 10; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
@@ -4,10 +4,16 @@
X int FDIVD(void *rd, void *rs2, void *rs1)
X {
X FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(R);
+ int ret = 0;
X
X __FP_UNPACK_D(A, rs1);
X __FP_UNPACK_D(B, rs2);
+ if(B_c == FP_CLS_ZERO &&
+ A_c != FP_CLS_ZERO) {
+ ret |= EFLAG_DIVZERO;
+ if(__FPU_TRAP_P(EFLAG_DIVZERO))
+ return ret;
+ }
X FP_DIV_D(R, A, B);
- __FP_PACK_D(rd, R);
- return 1;
+ return (ret | __FP_PACK_D(rd, R));
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fdivq.c linux/arch/sparc64/math-emu/fdivq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fdivq.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fdivq.c Wed Mar 10 16:53:37 1999
@@ -4,10 +4,16 @@
X int FDIVQ(void *rd, void *rs2, void *rs1)
X {
X FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(R);
+ int ret;
X
X __FP_UNPACK_Q(A, rs1);
X __FP_UNPACK_Q(B, rs2);
+ if(B_c == FP_CLS_ZERO &&
+ A_c != FP_CLS_ZERO) {
+ ret |= EFLAG_DIVZERO;
+ if(__FPU_TRAP_P(EFLAG_DIVZERO))
+ return ret;
+ }
X FP_DIV_Q(R, A, B);
- __FP_PACK_Q(rd, R);
- return 1;
+ return (ret | __FP_PACK_Q(rd, R));
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fdivs.c linux/arch/sparc64/math-emu/fdivs.c
--- v2.2.3/linux/arch/sparc64/math-emu/fdivs.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fdivs.c Wed Mar 10 16:53:37 1999
@@ -4,10 +4,17 @@
X int FDIVS(void *rd, void *rs2, void *rs1)
X {
X FP_DECL_S(A); FP_DECL_S(B); FP_DECL_S(R);
+ int ret = 0;
X
X __FP_UNPACK_S(A, rs1);
X __FP_UNPACK_S(B, rs2);
+ if(B_c == FP_CLS_ZERO &&
+ A_c != FP_CLS_ZERO) {
+ ret |= EFLAG_DIVZERO;
+ if(__FPU_TRAP_P(EFLAG_DIVZERO))
+ return ret;
+ }
X FP_DIV_S(R, A, B);
- __FP_PACK_S(rd, R);
- return 1;
+ return (ret | __FP_PACK_S(rd, R));
X }
+
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fdmulq.c linux/arch/sparc64/math-emu/fdmulq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fdmulq.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fdmulq.c Wed Mar 10 16:53:37 1999
@@ -11,6 +11,5 @@
X __FP_UNPACK_D(IN, rs2);
X FP_CONV(Q,D,2,1,B,IN);
X FP_MUL_Q(R, A, B);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fdtoi.c linux/arch/sparc64/math-emu/fdtoi.c
--- v2.2.3/linux/arch/sparc64/math-emu/fdtoi.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fdtoi.c Wed Mar 10 16:53:37 1999
@@ -9,5 +9,5 @@
X __FP_UNPACK_D(A, rs2);
X FP_TO_INT_D(r, A, 32, 1);
X *rd = r;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fdtoq.c linux/arch/sparc64/math-emu/fdtoq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fdtoq.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fdtoq.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_D(A, rs2);
X FP_CONV(Q,D,2,1,R,A);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fdtos.c linux/arch/sparc64/math-emu/fdtos.c
--- v2.2.3/linux/arch/sparc64/math-emu/fdtos.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fdtos.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_D(A, rs2);
X FP_CONV(S,D,1,1,R,A);
- __FP_PACK_S(rd, R);
- return 1;
+ return __FP_PACK_S(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fdtox.c linux/arch/sparc64/math-emu/fdtox.c
--- v2.2.3/linux/arch/sparc64/math-emu/fdtox.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fdtox.c Wed Mar 10 16:53:37 1999
@@ -9,5 +9,5 @@
X __FP_UNPACK_D(A, rs2);
X FP_TO_INT_D(r, A, 64, 1);
X *rd = r;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fitoq.c linux/arch/sparc64/math-emu/fitoq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fitoq.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fitoq.c Wed Mar 10 16:53:37 1999
@@ -7,6 +7,5 @@
X int a = *(int *)rs2;
X
X FP_FROM_INT_Q(R, a, 32, int);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fmuld.c linux/arch/sparc64/math-emu/fmuld.c
--- v2.2.3/linux/arch/sparc64/math-emu/fmuld.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fmuld.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X __FP_UNPACK_D(A, rs1);
X __FP_UNPACK_D(B, rs2);
X FP_MUL_D(R, A, B);
- __FP_PACK_D(rd, R);
- return 1;
+ return __FP_PACK_D(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fmulq.c linux/arch/sparc64/math-emu/fmulq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fmulq.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fmulq.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X __FP_UNPACK_Q(A, rs1);
X __FP_UNPACK_Q(B, rs2);
X FP_MUL_Q(R, A, B);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fmuls.c linux/arch/sparc64/math-emu/fmuls.c
--- v2.2.3/linux/arch/sparc64/math-emu/fmuls.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fmuls.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X __FP_UNPACK_S(A, rs1);
X __FP_UNPACK_S(B, rs2);
X FP_MUL_S(R, A, B);
- __FP_PACK_S(rd, R);
- return 1;
+ return __FP_PACK_S(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fnegq.c linux/arch/sparc64/math-emu/fnegq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fnegq.c Thu Apr 23 20:21:32 1998
+++ linux/arch/sparc64/math-emu/fnegq.c Wed Mar 10 16:53:37 1999
@@ -2,6 +2,6 @@
X {
X rd[0] = rs2[0] ^ 0x8000000000000000UL;
X rd[1] = rs2[1];
- return 1;
+ return 0;
X }
X
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fqtod.c linux/arch/sparc64/math-emu/fqtod.c
--- v2.2.3/linux/arch/sparc64/math-emu/fqtod.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fqtod.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_Q(A, rs2);
X FP_CONV(D,Q,1,2,R,A);
- __FP_PACK_D(rd, R);
- return 1;
+ return __FP_PACK_D(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fqtoi.c linux/arch/sparc64/math-emu/fqtoi.c
--- v2.2.3/linux/arch/sparc64/math-emu/fqtoi.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fqtoi.c Wed Mar 10 16:53:37 1999
@@ -9,5 +9,5 @@
X __FP_UNPACK_Q(A, rs2);
X FP_TO_INT_Q(r, A, 32, 1);
X *rd = r;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fqtos.c linux/arch/sparc64/math-emu/fqtos.c
--- v2.2.3/linux/arch/sparc64/math-emu/fqtos.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fqtos.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_Q(A, rs2);
X FP_CONV(S,Q,1,2,R,A);
- __FP_PACK_S(rd, R);
- return 1;
+ return __FP_PACK_S(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fqtox.c linux/arch/sparc64/math-emu/fqtox.c
--- v2.2.3/linux/arch/sparc64/math-emu/fqtox.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fqtox.c Wed Mar 10 16:53:37 1999
@@ -9,5 +9,5 @@
X __FP_UNPACK_Q(A, rs2);
X FP_TO_INT_Q(r, A, 64, 1);
X *rd = r;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fsmuld.c linux/arch/sparc64/math-emu/fsmuld.c
--- v2.2.3/linux/arch/sparc64/math-emu/fsmuld.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fsmuld.c Wed Mar 10 16:53:37 1999
@@ -11,6 +11,5 @@
X __FP_UNPACK_S(IN, rs2);
X FP_CONV(D,S,1,1,B,IN);
X FP_MUL_D(R, A, B);
- __FP_PACK_D(rd, R);
- return 1;
+ return __FP_PACK_D(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fsqrtd.c linux/arch/sparc64/math-emu/fsqrtd.c
--- v2.2.3/linux/arch/sparc64/math-emu/fsqrtd.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fsqrtd.c Wed Mar 10 16:53:37 1999
@@ -7,6 +7,5 @@
X
X __FP_UNPACK_D(A, rs2);
X FP_SQRT_D(R, A);
- __FP_PACK_D(rd, R);
- return 1;
+ return __FP_PACK_D(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fsqrtq.c linux/arch/sparc64/math-emu/fsqrtq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fsqrtq.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fsqrtq.c Wed Mar 10 16:53:37 1999
@@ -7,6 +7,5 @@
X
X __FP_UNPACK_Q(A, rs2);
X FP_SQRT_Q(R, A);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fsqrts.c linux/arch/sparc64/math-emu/fsqrts.c
--- v2.2.3/linux/arch/sparc64/math-emu/fsqrts.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fsqrts.c Wed Mar 10 16:53:37 1999
@@ -7,6 +7,5 @@
X
X __FP_UNPACK_S(A, rs2);
X FP_SQRT_S(R, A);
- __FP_PACK_S(rd, R);
- return 1;
+ return __FP_PACK_S(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fstod.c linux/arch/sparc64/math-emu/fstod.c
--- v2.2.3/linux/arch/sparc64/math-emu/fstod.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fstod.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_S(A, rs2);
X FP_CONV(D,S,1,1,R,A);
- __FP_PACK_D(rd, R);
- return 1;
+ return __FP_PACK_D(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fstoi.c linux/arch/sparc64/math-emu/fstoi.c
--- v2.2.3/linux/arch/sparc64/math-emu/fstoi.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fstoi.c Wed Mar 10 16:53:37 1999
@@ -9,5 +9,5 @@
X __FP_UNPACK_S(A, rs2);
X FP_TO_INT_S(r, A, 32, 1);
X *rd = r;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fstoq.c linux/arch/sparc64/math-emu/fstoq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fstoq.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fstoq.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X
X __FP_UNPACK_S(A, rs2);
X FP_CONV(Q,S,2,1,R,A);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fstox.c linux/arch/sparc64/math-emu/fstox.c
--- v2.2.3/linux/arch/sparc64/math-emu/fstox.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fstox.c Wed Mar 10 16:53:37 1999
@@ -9,5 +9,5 @@
X __FP_UNPACK_S(A, rs2);
X FP_TO_INT_S(r, A, 64, 1);
X *rd = r;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fsubd.c linux/arch/sparc64/math-emu/fsubd.c
--- v2.2.3/linux/arch/sparc64/math-emu/fsubd.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fsubd.c Wed Mar 10 16:53:37 1999
@@ -10,6 +10,5 @@
X if (B_c != FP_CLS_NAN)
X B_s ^= 1;
X FP_ADD_D(R, A, B);
- __FP_PACK_D(rd, R);
- return 1;
+ return __FP_PACK_D(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fsubq.c linux/arch/sparc64/math-emu/fsubq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fsubq.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fsubq.c Wed Mar 10 16:53:37 1999
@@ -10,6 +10,5 @@
X if (B_c != FP_CLS_NAN)
X B_s ^= 1;
X FP_ADD_Q(R, A, B);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fsubs.c linux/arch/sparc64/math-emu/fsubs.c
--- v2.2.3/linux/arch/sparc64/math-emu/fsubs.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fsubs.c Wed Mar 10 16:53:37 1999
@@ -10,6 +10,5 @@
X if (B_c != FP_CLS_NAN)
X B_s ^= 1;
X FP_ADD_S(R, A, B);
- __FP_PACK_S(rd, R);
- return 1;
+ return __FP_PACK_S(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fxtoq.c linux/arch/sparc64/math-emu/fxtoq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fxtoq.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fxtoq.c Wed Mar 10 16:53:37 1999
@@ -7,6 +7,5 @@
X long a = *(long *)rs2;
X
X FP_FROM_INT_Q(R, a, 64, long);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/math.c linux/arch/sparc64/math-emu/math.c
--- v2.2.3/linux/arch/sparc64/math-emu/math.c Thu Aug 6 14:06:31 1998
+++ linux/arch/sparc64/math-emu/math.c Wed Mar 10 16:53:37 1999
@@ -1,7 +1,8 @@
-/* $Id: math.c,v 1.5 1998/06/12 14:54:27 jj Exp $
+/* $Id: math.c,v 1.7 1999/02/10 14:16:26 davem Exp $
X * arch/sparc64/math-emu/math.c
X *
X * Copyright (C) 1997 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
+ * Copyright (C) 1999 David S. Miller (da...@redhat.com)
X *
X * Emulation routines originate from soft-fp package, which is part
X * of glibc and has appropriate copyrights in it.
@@ -14,6 +15,8 @@
X #include <asm/ptrace.h>
X #include <asm/uaccess.h>
X
+#include "soft-fp.h"
+
X #define FLOATFUNC(x) extern int x(void *,void *,void *);
X
X FLOATFUNC(FMOVQ)
@@ -54,6 +57,91 @@
X FLOATFUNC(FSTOI)
X FLOATFUNC(FDTOI)
X
+#define FSR_TEM_SHIFT 23UL
+#define FSR_TEM_MASK (0x1fUL << FSR_TEM_SHIFT)
+#define FSR_AEXC_SHIFT 5UL
+#define FSR_AEXC_MASK (0x1fUL << FSR_AEXC_SHIFT)
+#define FSR_CEXC_SHIFT 0UL
+#define FSR_CEXC_MASK (0x1fUL << FSR_CEXC_SHIFT)
+
+/* All routines returning an exception to raise should detect
+ * such exceptions _before_ rounding to be consistant with
+ * the behavior of the hardware in the implemented cases
+ * (and thus with the recommendations in the V9 architecture
+ * manual).
+ *
+ * We return 0 if a SIGFPE should be sent, 1 otherwise.
+ */
+static int record_exception(struct pt_regs *regs, int eflag)
+{
+ u64 fsr = current->tss.xfsr[0];
+ int would_trap;
+
+
+ /* Set the AEXC field, rules are:
+ *
+ * 1) If a trap would not be generated, the
+ * CEXC just generated is OR'd into the
+ * existing value of AEXC.
+ *
+ * 2) When a trap is generated, AEXC is cleared.
+ */
+ if(would_trap == 0)
+ fsr |= ((long)eflag << FSR_AEXC_SHIFT);
+ else
+ fsr &= ~(FSR_AEXC_MASK);
+
+ /* If trapping, indicate fault trap type IEEE. */
+ if(would_trap != 0)
+ fsr |= (1UL << 14);
+
+ current->tss.xfsr[0] = fsr;
+
+ /* If we will not trap, advance the program counter over
+ * the instruction being handled.
+ */
+ if(would_trap == 0) {
+ regs->tpc = regs->tnpc;
+ regs->tnpc += 4;
+ }
+
+ return (would_trap ? 0 : 1);
+}
+
X int do_mathemu(struct pt_regs *regs, struct fpustate *f)
X {
X unsigned long pc = regs->tpc;
@@ -175,7 +263,12 @@
X current->tss.fpsaved[0] |= flags;
X break;
X }
- func(rd, rs2, rs1);
+ flags = func(rd, rs2, rs1);
+ if(flags != 0)
+ return record_exception(regs, flags);
+
+ /* Success and no exceptions detected. */
+ current->tss.xfsr[0] &= ~(FSR_CEXC_MASK);
X regs->tpc = regs->tnpc;
X regs->tnpc += 4;
X return 1;
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/op-2.h linux/arch/sparc64/math-emu/op-2.h
--- v2.2.3/linux/arch/sparc64/math-emu/op-2.h Thu Apr 23 20:21:32 1998
+++ linux/arch/sparc64/math-emu/op-2.h Wed Mar 10 16:53:37 1999
@@ -190,14 +190,14 @@
X \
X __FP_FRAC_ADD_4(_FP_FRAC_WORD_4(_z,3),_FP_FRAC_WORD_4(_z,2), \
X _FP_FRAC_WORD_4(_z,1),_FP_FRAC_WORD_4(_z,0), \
+ 0, _b_f1, _b_f0, 0, \
X _FP_FRAC_WORD_4(_z,3),_FP_FRAC_WORD_4(_z,2), \
- _FP_FRAC_WORD_4(_z,1),_FP_FRAC_WORD_4(_z,0), \
- 0, _b_f1, _b_f0, 0); \
+ _FP_FRAC_WORD_4(_z,1),_FP_FRAC_WORD_4(_z,0)); \
X __FP_FRAC_ADD_4(_FP_FRAC_WORD_4(_z,3),_FP_FRAC_WORD_4(_z,2), \
X _FP_FRAC_WORD_4(_z,1),_FP_FRAC_WORD_4(_z,0), \
+ 0, _c_f1, _c_f0, 0, \
X _FP_FRAC_WORD_4(_z,3),_FP_FRAC_WORD_4(_z,2), \
- _FP_FRAC_WORD_4(_z,1),_FP_FRAC_WORD_4(_z,0), \
- 0, _c_f1, _c_f0, 0); \
+ _FP_FRAC_WORD_4(_z,1),_FP_FRAC_WORD_4(_z,0)); \
X \
X /* Normalize since we know where the msb of the multiplicands \
X were (bit B), we know that the msb of the of the product is \
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/op-common.h linux/arch/sparc64/math-emu/op-common.h
--- v2.2.3/linux/arch/sparc64/math-emu/op-common.h Thu Aug 6 14:06:31 1998
+++ linux/arch/sparc64/math-emu/op-common.h Wed Mar 10 16:53:37 1999
@@ -53,14 +53,14 @@
X */
X
X #define _FP_PACK_CANONICAL(fs, wc, X) \
-do { \
+({int __ret = 0; \
X switch (X##_c) \
X { \
X case FP_CLS_NORMAL: \
X X##_e += _FP_EXPBIAS_##fs; \
X if (X##_e > 0) \
X { \
- _FP_ROUND(wc, X); \
+ __ret |= _FP_ROUND(wc, X); \
X if (_FP_FRAC_OVERP_##wc(fs, X)) \
X { \
X _FP_FRAC_SRL_##wc(X, (_FP_WORKBITS+1)); \
@@ -73,6 +73,7 @@
X /* overflow to infinity */ \
X X##_e = _FP_EXPMAX_##fs; \
X _FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc); \
+ __ret |= EFLAG_OVERFLOW; \
X } \
X } \
X else \
@@ -82,7 +83,7 @@
X if (X##_e <= _FP_WFRACBITS_##fs) \
X { \
X _FP_FRAC_SRS_##wc(X, X##_e, _FP_WFRACBITS_##fs); \
- _FP_ROUND(wc, X); \
+ __ret |= _FP_ROUND(wc, X); \
X _FP_FRAC_SLL_##wc(X, 1); \
X if (_FP_FRAC_OVERP_##wc(fs, X)) \
X { \
@@ -93,6 +94,7 @@
X { \
X X##_e = 0; \
X _FP_FRAC_SRL_##wc(X, _FP_WORKBITS+1); \
+ __ret |= EFLAG_UNDERFLOW; \
X } \
X } \
X else \
@@ -100,6 +102,7 @@
X /* underflow to zero */ \
X X##_e = 0; \
X _FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc); \
+ __ret |= EFLAG_UNDERFLOW; \
X } \
X } \
X break; \
@@ -125,7 +128,8 @@
X _FP_FRAC_HIGH_##wc(X) |= _FP_QNANBIT_##fs; \
X break; \
X } \
-} while (0)
+ __ret; \
+})
X
X
X /*
@@ -424,11 +428,19 @@
X } \
X else \
X { \
- /* Force -0 -> +0 */ \
- if (!X##_e && _FP_FRAC_ZEROP_##wc(X)) X##_s = 0; \
- if (!Y##_e && _FP_FRAC_ZEROP_##wc(Y)) X##_s = 0; \
+ int __is_zero_x; \
+ int __is_zero_y; \
+ \
+ __is_zero_x = (!X##_e && _FP_FRAC_ZEROP_##wc(X)) ? 1 : 0; \
+ __is_zero_y = (!Y##_e && _FP_FRAC_ZEROP_##wc(Y)) ? 1 : 0; \
X \
- if (X##_s != Y##_s) \
+ if (__is_zero_x && __is_zero_y) \
+ ret = 0; \
+ else if (__is_zero_x) \
+ ret = Y##_s ? 1 : -1; \
+ else if (__is_zero_y) \
+ ret = X##_s ? -1 : 1; \
+ else if (X##_s != Y##_s) \
X ret = X##_s ? -1 : 1; \
X else if (X##_e > Y##_e) \
X ret = X##_s ? -1 : 1; \
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/sfp-machine.h linux/arch/sparc64/math-emu/sfp-machine.h
--- v2.2.3/linux/arch/sparc64/math-emu/sfp-machine.h Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/sfp-machine.h Tue Mar 16 21:52:06 1999
@@ -52,16 +52,6 @@
X X##_s = _flo->bits.sign; \
X } while (0)
X
-#define __FP_PACK_RAW_1(fs, val, X) \
- do { \
- union _FP_UNION_##fs *_flo = \
- (union _FP_UNION_##fs *)val; \
- \
- _flo->bits.frac = X##_f; \
- _flo->bits.exp = X##_e; \
- _flo->bits.sign = X##_s; \
- } while (0)
-
X #define __FP_UNPACK_RAW_2(fs, X, val) \
X do { \
X union _FP_UNION_##fs *_flo = \
@@ -73,52 +63,79 @@
X X##_s = _flo->bits.sign; \
X } while (0)
X
-#define __FP_PACK_RAW_2(fs, val, X) \
- do { \
- union _FP_UNION_##fs *_flo = \
- (union _FP_UNION_##fs *)val; \
- \
- _flo->bits.frac0 = X##_f0; \
- _flo->bits.frac1 = X##_f1; \
- _flo->bits.exp = X##_e; \
- _flo->bits.sign = X##_s; \
- } while (0)
-
X #define __FP_UNPACK_S(X,val) \
X do { \
X __FP_UNPACK_RAW_1(S,X,val); \
X _FP_UNPACK_CANONICAL(S,1,X); \
X } while (0)
X
-#define __FP_PACK_S(val,X) \
- do { \
- _FP_PACK_CANONICAL(S,1,X); \
- __FP_PACK_RAW_1(S,val,X); \
- } while (0)
-
X #define __FP_UNPACK_D(X,val) \
X do { \
X __FP_UNPACK_RAW_1(D,X,val); \
X _FP_UNPACK_CANONICAL(D,1,X); \
X } while (0)
X
-#define __FP_PACK_D(val,X) \
- do { \
- _FP_PACK_CANONICAL(D,1,X); \
- __FP_PACK_RAW_1(D,val,X); \
- } while (0)
-
X #define __FP_UNPACK_Q(X,val) \
X do { \
X __FP_UNPACK_RAW_2(Q,X,val); \
X _FP_UNPACK_CANONICAL(Q,2,X); \
X } while (0)
X
-#define __FP_PACK_Q(val,X) \
- do { \
- _FP_PACK_CANONICAL(Q,2,X); \
- __FP_PACK_RAW_2(Q,val,X); \
+#define __FP_PACK_RAW_1(fs, val, X) \
+ do { \
+ union _FP_UNION_##fs *_flo = \
+ (union _FP_UNION_##fs *)val; \
+ \
+ _flo->bits.frac = X##_f; \
+ _flo->bits.exp = X##_e; \
+ _flo->bits.sign = X##_s; \
X } while (0)
+
+#define __FP_PACK_RAW_2(fs, val, X) \
+ do { \
+ union _FP_UNION_##fs *_flo = \
+ (union _FP_UNION_##fs *)val; \
+ \
+ _flo->bits.frac0 = X##_f0; \
+ _flo->bits.frac1 = X##_f1; \
+ _flo->bits.exp = X##_e; \
+ _flo->bits.sign = X##_s; \
+ } while (0)
+
+#include <linux/kernel.h>
+#include <linux/sched.h>
+
+/* We only actually write to the destination register
+ * if exceptions signalled (if any) will not trap.
+ */
+#define __FPU_TEM \
+ (((current->tss.xfsr[0])>>23)&0x1f)
+#define __FPU_TRAP_P(bits) \
+ ((__FPU_TEM & (bits)) != 0)
+
+#define __FP_PACK_S(val,X) \
+({ int __exc = _FP_PACK_CANONICAL(S,1,X); \
+ if(!__exc || !__FPU_TRAP_P(__exc)) \
+ __FP_PACK_RAW_1(S,val,X); \
+ __exc; \
+})
+
+#define __FP_PACK_D(val,X) \
+({ int __exc = _FP_PACK_CANONICAL(D,1,X); \
+ if(!__exc || !__FPU_TRAP_P(__exc)) \
+ __FP_PACK_RAW_1(D,val,X); \
+ __exc; \
+})
+
+#define __FP_PACK_Q(val,X) \
+({ int __exc = _FP_PACK_CANONICAL(Q,2,X); \
+ if(!__exc || !__FPU_TRAP_P(__exc)) \
+ __FP_PACK_RAW_2(Q,val,X); \
+ __exc; \
+})
+
+/* Obtain the current rounding mode. */
+#define FP_ROUNDMODE ((current->tss.xfsr[0] >> 30) & 0x3)
X
X #include <linux/types.h>
X #include <asm/byteorder.h>
@@ -153,28 +170,24 @@
X
X #define umul_ppmm(wh, wl, u, v) \
X do { \
- long tmp1 = 0, tmp2 = 0, tmp3 = 0; \
X __asm__ ("mulx %2,%3,%1
- srlx %2,32,%4
- srl %3,0,%5
- mulx %4,%5,%6
- srlx %3,32,%4
- srl %2,0,%5
- mulx %4,%5,%5
- srlx %2,32,%4
- add %5,%6,%6
- srlx %3,32,%5
- mulx %4,%5,%4
- srlx %6,32,%5
- add %4,%5,%0" \
+ srlx %2,32,%%g1
+ srl %3,0,%%g2
+ mulx %%g1,%%g2,%%g3
+ srlx %3,32,%%g1
+ srl %2,0,%%g2
+ mulx %%g1,%%g2,%%g2
+ srlx %2,32,%%g1
+ add %%g2,%%g3,%%g3
+ srlx %3,32,%%g2
+ mulx %%g1,%%g2,%%g1
+ srlx %%g3,32,%%g2
+ add %%g1,%%g2,%0" \
X : "=r" ((UDItype)(wh)), \
X "=&r" ((UDItype)(wl)) \
X : "r" ((UDItype)(u)), \
- "r" ((UDItype)(v)), \
- "r" ((UDItype)(tmp1)), \
- "r" ((UDItype)(tmp2)), \
- "r" ((UDItype)(tmp3)) \
- : "cc"); \
+ "r" ((UDItype)(v)) \
+ : "g1", "g2", "g3", "cc"); \
X } while (0)
X
X #define udiv_qrnnd(q, r, n1, n0, d) \
@@ -223,3 +236,10 @@
X #else
X #define __BYTE_ORDER __LITTLE_ENDIAN
X #endif
+
+/* Exception flags. */
+#define EFLAG_INVALID (1 << 4)
+#define EFLAG_OVERFLOW (1 << 3)
+#define EFLAG_UNDERFLOW (1 << 2)
+#define EFLAG_DIVZERO (1 << 1)
+#define EFLAG_INEXACT (1 << 0)
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/soft-fp.h linux/arch/sparc64/math-emu/soft-fp.h
--- v2.2.3/linux/arch/sparc64/math-emu/soft-fp.h Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/soft-fp.h Wed Mar 10 16:53:37 1999
@@ -14,45 +14,56 @@
X # define FP_RND_ZERO 1
X # define FP_RND_PINF 2
X # define FP_RND_MINF 3
+#ifndef FP_ROUNDMODE
X # define FP_ROUNDMODE FP_RND_NEAREST
X #endif
+#endif
X
X #define _FP_ROUND_NEAREST(wc, X) \
- do { \
+({ int __ret = EFLAG_INEXACT; \
X if ((_FP_FRAC_LOW_##wc(X) & 15) != _FP_WORK_ROUND) \
X _FP_FRAC_ADDI_##wc(X, _FP_WORK_ROUND); \
- } while(0)
+ else __ret = 0; \
+ __ret; \
+})
X
-#define _FP_ROUND_ZERO(wc, X)
+#define _FP_ROUND_ZERO(wc, X) 0 /* XXX */
X
X #define _FP_ROUND_PINF(wc, X) \
- do { \
+({ int __ret = EFLAG_INEXACT; \
X if (!X##_s && (_FP_FRAC_LOW_##wc(X) & 7)) \
X _FP_FRAC_ADDI_##wc(X, _FP_WORK_LSB); \
- } while (0)
+ else __ret = 0; \
+ __ret; \
+})
X
X #define _FP_ROUND_MINF(wc, X) \
- do { \
+({ int __ret = EFLAG_INEXACT; \
X if (X##_s && (_FP_FRAC_LOW_##wc(X) & 7)) \
X _FP_FRAC_ADDI_##wc(X, _FP_WORK_LSB); \
- } while (0)
+ else __ret = 0; \
+ __ret; \
+})
X
X #define _FP_ROUND(wc, X) \
+({ int __ret = 0; \
X switch (FP_ROUNDMODE) \
X { \
X case FP_RND_NEAREST: \
- _FP_ROUND_NEAREST(wc,X); \
+ __ret |= _FP_ROUND_NEAREST(wc,X); \
X break; \
X case FP_RND_ZERO: \
- _FP_ROUND_ZERO(wc,X); \
+ __ret |= _FP_ROUND_ZERO(wc,X); \
X break; \
X case FP_RND_PINF: \
- _FP_ROUND_PINF(wc,X); \
+ __ret |= _FP_ROUND_PINF(wc,X); \
X break; \
X case FP_RND_MINF: \
- _FP_ROUND_MINF(wc,X); \
+ __ret |= _FP_ROUND_MINF(wc,X); \
X break; \
- }
+ }; \
+ __ret; \
+})
X
X #define FP_CLS_NORMAL 0
X #define FP_CLS_ZERO 1
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/mm/fault.c linux/arch/sparc64/mm/fault.c
--- v2.2.3/linux/arch/sparc64/mm/fault.c Thu Nov 19 09:56:27 1998
+++ linux/arch/sparc64/mm/fault.c Tue Mar 16 21:52:06 1999
@@ -1,8 +1,8 @@
-/* $Id: fault.c,v 1.26 1998/11/08 11:14:03 davem Exp $
+/* $Id: fault.c,v 1.34 1999/03/16 12:12:28 jj Exp $
X * arch/sparc64/mm/fault.c: Page fault handlers for the 64-bit Sparc.
X *
X * Copyright (C) 1996 David S. Miller (da...@caip.rutgers.edu)
- * Copyright (C) 1997 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
+ * Copyright (C) 1997, 1999 Jakub Jelinek (j...@ultra.linux.cz)
X */
X
X #include <asm/head.h>
@@ -14,6 +14,8 @@
X #include <linux/signal.h>
X #include <linux/mm.h>
X #include <linux/smp_lock.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
X
X #include <asm/page.h>
X #include <asm/pgtable.h>
@@ -26,7 +28,7 @@
X extern struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS];
X
X /* Nice, simple, prom library does all the sweating for us. ;) */
-unsigned long prom_probe_memory (void)
+unsigned long __init prom_probe_memory (void)
X {
X register struct linux_mlist_p1275 *mlist;
X register unsigned long bytes, base_paddr, tally;
@@ -35,7 +37,7 @@
X i = 0;
X mlist = *prom_meminfo()->p1275_available;
X bytes = tally = mlist->num_bytes;
- base_paddr = (unsigned int) mlist->start_adr;
+ base_paddr = mlist->start_adr;
X
X sp_banks[0].base_addr = base_paddr;
X sp_banks[0].num_bytes = bytes;
@@ -55,12 +57,12 @@
X break;
X }
X
- sp_banks[i].base_addr = (unsigned long) mlist->start_adr;
+ sp_banks[i].base_addr = mlist->start_adr;
X sp_banks[i].num_bytes = mlist->num_bytes;
X }
X
X i++;
- sp_banks[i].base_addr = 0xdeadbeef;
+ sp_banks[i].base_addr = 0xdeadbeefbeefdeadUL;
X sp_banks[i].num_bytes = 0;
X
X /* Now mask all bank sizes on a page boundary, it is all we can
@@ -72,26 +74,12 @@
X return tally;
X }
X
-/* Traverse the memory lists in the prom to see how much physical we
- * have.
- */
-unsigned long
-probe_memory(void)
-{
- unsigned long total;
-
- total = prom_probe_memory();
-
- /* Oh man, much nicer, keep the dirt in promlib. */
- return total;
-}
-
X void unhandled_fault(unsigned long address, struct task_struct *tsk,
X struct pt_regs *regs)
X {
X if((unsigned long) address < PAGE_SIZE) {
X printk(KERN_ALERT "Unable to handle kernel NULL "
- "pointer dereference");
+ "pointer dereference\n");
X } else {
X printk(KERN_ALERT "Unable to handle kernel paging request "
X "at virtual address %016lx\n", (unsigned long)address);
@@ -100,22 +88,74 @@
X (unsigned long) tsk->mm->context);
X printk(KERN_ALERT "tsk->mm->pgd = %016lx\n",
X (unsigned long) tsk->mm->pgd);
- lock_kernel();
X die_if_kernel("Oops", regs);
- unlock_kernel();
X }
X
X /* #define DEBUG_EXCEPTIONS */
X /* #define DEBUG_LOCKUPS */
X
+/* #define INSN_VPTE_LOOKUP */
+
+static inline u32 get_user_insn(unsigned long tpc)
+{
+ u32 insn;
+#ifndef INSN_VPTE_LOOKUP
+ pgd_t *pgdp = pgd_offset(current->mm, tpc);
+ pmd_t *pmdp;
+ pte_t *ptep;
+
+ if(pgd_none(*pgdp))
+ return 0;
+ pmdp = pmd_offset(pgdp, tpc);
+ if(pmd_none(*pmdp))
+ return 0;
+ ptep = pte_offset(pmdp, tpc);
+ if(!pte_present(*ptep))
+ return 0;
+ insn = *(unsigned int *)(pte_page(*ptep) + (tpc & ~PAGE_MASK));
+#else
+ register unsigned long pte asm("l1");
+
+ /* So that we don't pollute TLB, we read the instruction
+ * using PHYS bypass. For that, we of course need
+ * to know its page table entry. Do this by simulating
+ * dtlb_miss handler. -jj */
+ pte = ((((long)tpc) >> (PAGE_SHIFT-3)) & ~7);
+ asm volatile ("
+ rdpr %%pstate, %%l0
+ wrpr %%l0, %2, %%pstate
+ wrpr %%g0, 1, %%tl
+ mov %%l1, %%g6
+ ldxa [%%g3 + %%l1] %3, %%g5
+ mov %%g5, %%l1
+ wrpr %%g0, 0, %%tl
+ wrpr %%l0, 0, %%pstate
+ " : "=r" (pte) : "0" (pte), "i" (PSTATE_MG|PSTATE_IE), "i" (ASI_S) : "l0");
+
+ if ((long)pte >= 0) return 0;
+
+ pte = (pte & _PAGE_PADDR) + (tpc & ~PAGE_MASK);
+ asm ("lduwa [%1] %2, %0" : "=r" (insn) : "r" (pte), "i" (ASI_PHYS_USE_EC));
+#endif
+
+ return insn;
+}
+
X asmlinkage void do_sparc64_fault(struct pt_regs *regs, unsigned long address, int write)
X {
X struct mm_struct *mm = current->mm;
X struct vm_area_struct *vma;
+ unsigned int insn = 0;
X #ifdef DEBUG_LOCKUPS
X static unsigned long lastaddr, lastpc;
X static int lastwrite, lockcnt;
X #endif
+ /*
+ * If we're in an interrupt or have no user
+ * context, we must not take the fault..
+ */
+ if (in_interrupt() || mm == &init_mm)
+ goto do_kernel_fault;
X
X down(&mm->mmap_sem);
X #ifdef DEBUG_LOCKUPS
@@ -135,6 +175,21 @@
X vma = find_vma(mm, address);
X if(!vma)
X goto bad_area;
+#ifndef INSN_VPTE_LOOKUP
+ write &= 0xf;
+#else
+ if (write & 0x10) {
+ write = 0;
+ if((vma->vm_flags & VM_WRITE)) {
+ if (regs->tstate & TSTATE_PRIV)
+ insn = *(unsigned int *)regs->tpc;
+ else
+ insn = get_user_insn(regs->tpc);
+ if ((insn & 0xc0200000) == 0xc0200000 && (insn & 0x1780000) != 0x1680000)
+ write = 1;
+ }
+ }
+#endif
X if(vma->vm_start <= address)
X goto good_area;
X if(!(vma->vm_flags & VM_GROWSDOWN))
@@ -168,16 +223,44 @@
X
X do_kernel_fault:
X {
- unsigned long g2 = regs->u_regs[UREG_G2];
+ unsigned long g2;
+ unsigned char asi = ASI_P;
+
+ if (!insn) {
+ if (regs->tstate & TSTATE_PRIV)
+ insn = *(unsigned int *)regs->tpc;
+ else
+ insn = get_user_insn(regs->tpc);
+ }
+ if (write != 1 && (insn & 0xc0800000) == 0xc0800000) {
+ if (insn & 0x2000)
+ asi = (regs->tstate >> 24);
+ else
+ asi = (insn >> 5);
+ if ((asi & 0xf2) == 0x82) {
+ /* This was a non-faulting load. Just clear the
+ destination register(s) and continue with the next
+ instruction. -jj */
+ if (insn & 0x1000000) {
+ extern int handle_ldf_stq(u32, struct pt_regs *);
+
+ handle_ldf_stq(insn, regs);
+ } else {
+ extern int handle_ld_nf(u32, struct pt_regs *);
+
+ handle_ld_nf(insn, regs);
+ }
+ return;
+ }
+ }
+
+ g2 = regs->u_regs[UREG_G2];
X
X /* Is this in ex_table? */
X if (regs->tstate & TSTATE_PRIV) {
- unsigned char asi = ASI_P;
- unsigned int insn;
X unsigned long fixup;
-
- insn = *(unsigned int *)regs->tpc;
- if ((insn & 0xc0800000) == 0xc0800000) {
+
+ if (asi == ASI_P && (insn & 0xc0800000) == 0xc0800000) {
X if (insn & 0x2000)
X asi = (regs->tstate >> 24);
X else
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/mm/generic.c linux/arch/sparc64/mm/generic.c
--- v2.2.3/linux/arch/sparc64/mm/generic.c Thu Nov 19 09:56:27 1998
+++ linux/arch/sparc64/mm/generic.c Mon Mar 15 16:10:43 1999
@@ -1,4 +1,4 @@
-/* $Id: generic.c,v 1.3 1998/10/27 23:28:07 davem Exp $
+/* $Id: generic.c,v 1.8 1999/03/12 06:51:50 davem Exp $
X * generic.c: Generic Sparc mm routines that are not dependent upon
X * MMU type but are Sparc specific.
X *
@@ -56,6 +56,10 @@
X *
X * They use a pgprot that sets PAGE_IO and does not check the
X * mem_map table as this is independent of normal memory.
+ *
+ * As a special hack if the lowest bit of offset is set the
+ * side-effect bit will be turned off. This is used as a
+ * performance improvement on FFB/AFB. -DaveM
X */
X static inline void io_remap_pte_range(pte_t * pte, unsigned long address, unsigned long size,
X unsigned long offset, pgprot_t prot, int space)
@@ -71,23 +75,32 @@
X pte_t entry;
X unsigned long curend = address + PAGE_SIZE;
X
- entry = mk_pte_io(offset, prot, space);
- offset += PAGE_SIZE;
+ entry = mk_pte_io((offset & ~(0x1UL)), prot, space);
X if (!(address & 0xffff)) {
- if (!(address & 0x3fffff) && !(offset & 0x3fffff) && end >= address + 0x400000) {
- entry = mk_pte_io(offset, __pgprot(pgprot_val (prot) | _PAGE_SZ4MB), space);
+ if (!(address & 0x3fffff) && !(offset & 0x3ffffe) && end >= address + 0x400000) {
+ entry = mk_pte_io((offset & ~(0x1UL)),
+ __pgprot(pgprot_val (prot) | _PAGE_SZ4MB),
+ space);
X curend = address + 0x400000;
- offset += 0x400000 - PAGE_SIZE;
- } else if (!(address & 0x7ffff) && !(offset & 0x7ffff) && end >= address + 0x80000) {
- entry = mk_pte_io(offset, __pgprot(pgprot_val (prot) | _PAGE_SZ512K), space);
+ offset += 0x400000;
+ } else if (!(address & 0x7ffff) && !(offset & 0x7fffe) && end >= address + 0x80000) {
+ entry = mk_pte_io((offset & ~(0x1UL)),
+ __pgprot(pgprot_val (prot) | _PAGE_SZ512K),
+ space);
X curend = address + 0x80000;
- offset += 0x80000 - PAGE_SIZE;
- } else if (!(offset & 0xffff) && end >= address + 0x10000) {
- entry = mk_pte_io(offset, __pgprot(pgprot_val (prot) | _PAGE_SZ64K), space);
+ offset += 0x80000;
+ } else if (!(offset & 0xfffe) && end >= address + 0x10000) {
+ entry = mk_pte_io((offset & ~(0x1UL)),
+ __pgprot(pgprot_val (prot) | _PAGE_SZ64K),
+ space);
X curend = address + 0x10000;
- offset += 0x10000 - PAGE_SIZE;
+ offset += 0x10000;
X }
- }
+ } else
+ offset += PAGE_SIZE;
+
+ if (offset & 0x1UL)
+ pte_val(entry) &= ~(_PAGE_E);
X do {
X oldpage = *pte;
X pte_clear(pte);
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/mm/init.c linux/arch/sparc64/mm/init.c
--- v2.2.3/linux/arch/sparc64/mm/init.c Sun Nov 8 14:02:49 1998
+++ linux/arch/sparc64/mm/init.c Wed Mar 10 16:53:37 1999
@@ -1,8 +1,8 @@
-/* $Id: init.c,v 1.103 1998/10/20 03:09:12 jj Exp $
+/* $Id: init.c,v 1.124 1999/02/08 07:01:42 ecd Exp $
X * arch/sparc64/mm/init.c
X *
- * Copyright (C) 1996,1997 David S. Miller (da...@caip.rutgers.edu)
- * Copyright (C) 1997,1998 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
+ * Copyright (C) 1996-1999 David S. Miller (da...@caip.rutgers.edu)
+ * Copyright (C) 1997-1999 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
X */
X
X #include <linux/config.h>
@@ -23,6 +23,7 @@
X #include <asm/io.h>
X #include <asm/mmu_context.h>
X #include <asm/vaddrs.h>
+#include <asm/dma.h>
X
X /* Turn this off if you suspect some place in some physical memory hole
X might get into page tables (something would be broken very much). */
@@ -34,6 +35,8 @@
X
X struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS];
X
+unsigned long *sparc64_valid_addr_bitmap;
+
X /* Ugly, but necessary... -DaveM */
X unsigned long phys_base;
X
@@ -69,7 +72,7 @@
X page->next_hash = NULL;
X page->pprev_hash = NULL;
X pgd_cache_size -= 2;
- free_page(PAGE_OFFSET + (page->map_nr << PAGE_SHIFT));
+ __free_page(page);
X freed++;
X if (page2)
X page = page2->next_hash;
@@ -160,27 +163,31 @@
X static unsigned long dvmaiobase = 0;
X static unsigned long dvmaiosz __initdata = 0;
X
-/* #define E3000_DEBUG */
-
X __initfunc(void dvmaio_init(void))
X {
- int i;
+ long i;
X
X if (!dvmaiobase) {
X for (i = 0; sp_banks[i].num_bytes != 0; i++)
X if (sp_banks[i].base_addr + sp_banks[i].num_bytes > dvmaiobase)
X dvmaiobase = sp_banks[i].base_addr + sp_banks[i].num_bytes;
+
+ /* We map directly phys_base to phys_base+(4GB-DVMAIO_SIZE). */
+ dvmaiobase -= phys_base;
+
X dvmaiobase = (dvmaiobase + DVMAIO_SIZE + 0x400000 - 1) & ~(0x400000 - 1);
X for (i = 0; i < 6; i++)
- if (dvmaiobase <= ((1024 * 64 * 1024) << i))
+ if (dvmaiobase <= ((1024L * 64 * 1024) << i))
X break;
- dvmaiobase = ((1024 * 64 * 1024) << i) - DVMAIO_SIZE;
+ dvmaiobase = ((1024L * 64 * 1024) << i) - DVMAIO_SIZE;
X dvmaiosz = i;
X }
X }
X
X __initfunc(void iommu_init(int iommu_node, struct linux_sbus *sbus))
X {
+ extern int this_is_starfire;
+ extern void *starfire_hookup(int);
X struct iommu_struct *iommu;
X struct sysio_regs *sregs;
X struct linux_prom64_registers rprop;
@@ -191,10 +198,6 @@
X int err, i, j;
X
X dvmaio_init();
-#ifdef E3000_DEBUG
- prom_printf("\niommu_init: [%x:%p] ",
- iommu_node, sbus);
-#endif
X err = prom_getproperty(iommu_node, "reg", (char *)&rprop,
X sizeof(rprop));
X if(err == -1) {
@@ -203,19 +206,16 @@
X }
X sregs = (struct sysio_regs *) __va(rprop.phys_addr);
X
-#ifdef E3000_DEBUG
- prom_printf("sregs[%p]\n");
-#endif
X if(!sregs) {
X prom_printf("iommu_init: Fatal error, sysio regs not mapped\n");
X prom_halt();
X }
X
X iommu = kmalloc(sizeof(struct iommu_struct), GFP_ATOMIC);
-
-#ifdef E3000_DEBUG
- prom_printf("iommu_init: iommu[%p] ", iommu);
-#endif
+ if (!iommu) {
+ prom_printf("iommu_init: Fatal error, kmalloc(iommu) failed\n");
+ prom_halt();
+ }
X
X spin_lock_init(&iommu->iommu_lock);
X iommu->sysio_regs = sregs;
@@ -224,14 +224,19 @@
X control = sregs->iommu_control;
X impl = (control & IOMMU_CTRL_IMPL) >> 60;
X vers = (control & IOMMU_CTRL_VERS) >> 56;
-#ifdef E3000_DEBUG
- prom_printf("sreg_control[%08x]\n", control);
- prom_printf("IOMMU: IMPL[%x] VERS[%x] SYSIO mapped at %016lx\n",
- (unsigned int) impl, (unsigned int)vers, (unsigned long) sregs);
-#endif
X printk("IOMMU(SBUS): IMPL[%x] VERS[%x] SYSIO mapped at %016lx\n",
X (unsigned int) impl, (unsigned int)vers, (unsigned long) sregs);
X
+ /* Streaming buffer is unreliable on VERS 0 of SYSIO,
+ * although such parts were never shipped in production
+ * Sun hardware, I check just to be robust. --DaveM
+ */
+ vers = ((sregs->control & SYSIO_CONTROL_VER) >> 56);
+ if (vers == 0)
+ iommu->strbuf_enabled = 0;
+ else
+ iommu->strbuf_enabled = 1;
+
X control &= ~(IOMMU_CTRL_TSBSZ);
X control |= ((IOMMU_TSBSZ_2K * dvmaiosz) | IOMMU_CTRL_TBWSZ | IOMMU_CTRL_ENAB);
X
@@ -281,9 +286,14 @@
X
X /* Setup aliased mappings... */
X for(i = 0; i < (dvmaiobase >> 16); i++) {
- *iopte = (IOPTE_VALID | IOPTE_64K | IOPTE_STBUF |
- IOPTE_CACHE | IOPTE_WRITE);
- *iopte |= (i << 16);
+ unsigned long val = ((((unsigned long)i) << 16UL) + phys_base);
+
+ val |= IOPTE_VALID | IOPTE_64K | IOPTE_WRITE;
+ if (iommu->strbuf_enabled)
+ val |= IOPTE_STBUF;
+ else
+ val |= IOPTE_CACHE;
+ *iopte = val;
X iopte++;
X }
X
@@ -291,38 +301,34 @@
X for( ; i < ((dvmaiobase + DVMAIO_SIZE) >> 16); i++)
X *iopte++ = 0;
X
-#ifdef E3000_DEBUG
- prom_printf("IOMMU: pte's mapped, enabling IOMMU... ");
-#endif
X sregs->iommu_tsbbase = __pa(tsbbase);
X sregs->iommu_control = control;
X
-#ifdef E3000_DEBUG
- prom_printf("done\n");
-#endif
X /* Get the streaming buffer going. */
X control = sregs->sbuf_control;
X impl = (control & SYSIO_SBUFCTRL_IMPL) >> 60;
X vers = (control & SYSIO_SBUFCTRL_REV) >> 56;
-#ifdef E3000_DEBUG
- prom_printf("IOMMU: enabling streaming buffer, control[%08x]... ",
- control);
-#endif
- printk("IOMMU: Streaming Buffer IMPL[%x] REV[%x] ",
+ printk("IOMMU: Streaming Buffer IMPL[%x] REV[%x] ... ",
X (unsigned int)impl, (unsigned int)vers);
- iommu->sbuf_flushflag_va = kmalloc(sizeof(unsigned long), GFP_DMA);
- printk("FlushFLAG[%016lx] ... ", (iommu->sbuf_flushflag_pa = __pa(iommu->sbuf_flushflag_va)));
- *(iommu->sbuf_flushflag_va) = 0;
-
- sregs->sbuf_control = (control | SYSIO_SBUFCTRL_SB_EN);
+ iommu->flushflag = 0;
X
-#ifdef E3000_DEBUG
- prom_printf("done, returning\n");
-#endif
- printk("ENABLED\n");
+ if (iommu->strbuf_enabled != 0) {
+ sregs->sbuf_control = (control | SYSIO_SBUFCTRL_SB_EN);
+ printk("ENABLED\n");
+ } else {
+ sregs->sbuf_control = (control & ~(SYSIO_SBUFCTRL_SB_EN));
+ printk("DISABLED\n");
+ }
X
X /* Finally enable DVMA arbitration for all devices, just in case. */
X sregs->sbus_control |= SYSIO_SBCNTRL_AEN;
+
+ /* If necessary, hook us up for starfire IRQ translations. */
+ sbus->upaid = prom_getintdefault(sbus->prom_node, "upa-portid", -1);
+ if(this_is_starfire)
+ sbus->starfire_cookie = starfire_hookup(sbus->upaid);
+ else
+ sbus->starfire_cookie = NULL;
X }
X
X void mmu_map_dma_area(unsigned long addr, int len, __u32 *dvma_addr,
@@ -397,19 +403,35 @@
X
X __u32 mmu_get_scsi_one(char *vaddr, unsigned long len, struct linux_sbus *sbus)
X {
- __u32 sbus_addr = (__u32) __pa(vaddr);
+ struct iommu_struct *iommu = sbus->iommu;
+ struct sysio_regs *sregs = iommu->sysio_regs;
+ unsigned long start = (unsigned long) vaddr;
+ unsigned long end = PAGE_ALIGN(start + len);
+ unsigned long flags, tmp;
+ volatile u64 *sbctrl = (volatile u64 *) &sregs->sbus_control;
X
-#ifndef DEBUG_IOMMU
- return sbus_addr;
-#else
- if((sbus_addr < dvmaiobase) &&
- ((sbus_addr + len) < dvmaiobase))
- return sbus_addr;
-
- /* "can't happen"... GFP_DMA assures this. */
- panic("Very high scsi_one mappings should never happen.");
- return (__u32)0;
-#endif
+ start &= PAGE_MASK;
+ if (end > MAX_DMA_ADDRESS) {
+ printk("mmu_get_scsi_one: Bogus DMA buffer address [%016lx:%d]\n",
+ (unsigned long) vaddr, (int)len);
+ panic("DMA address too large, tell DaveM");
+ }
+
+ if (iommu->strbuf_enabled) {
+ spin_lock_irqsave(&iommu->iommu_lock, flags);
+ iommu->flushflag = 0;
+ while(start < end) {
+ sregs->sbuf_pflush = start;
+ start += PAGE_SIZE;
+ }
+ sregs->sbuf_fsync = __pa(&(iommu->flushflag));
+ tmp = *sbctrl;
+ while(iommu->flushflag == 0)
+ membar("#LoadLoad");
+ spin_unlock_irqrestore(&iommu->iommu_lock, flags);
+ }
+
+ return sbus_dvma_addr(vaddr);
X }
X
X void mmu_release_scsi_one(u32 vaddr, unsigned long len, struct linux_sbus *sbus)
@@ -418,43 +440,89 @@
X struct sysio_regs *sregs = iommu->sysio_regs;
X unsigned long start = (unsigned long) vaddr;
X unsigned long end = PAGE_ALIGN(start + len);
- unsigned long flags;
- unsigned int *sync_word;
+ unsigned long flags, tmp;
+ volatile u64 *sbctrl = (volatile u64 *) &sregs->sbus_control;
X
X start &= PAGE_MASK;
X
- spin_lock_irqsave(&iommu->iommu_lock, flags);
+ if (iommu->strbuf_enabled) {
+ spin_lock_irqsave(&iommu->iommu_lock, flags);
X
- while(start < end) {
- sregs->sbuf_pflush = start;
- start += PAGE_SIZE;
- }
- sync_word = iommu->sbuf_flushflag_va;
- sregs->sbuf_fsync = iommu->sbuf_flushflag_pa;
- membar("#StoreLoad | #MemIssue");
- while((*sync_word & 0x1) == 0)
- membar("#LoadLoad");
- *sync_word = 0;
+ /* 1) Clear the flush flag word */
+ iommu->flushflag = 0;
X
- spin_unlock_irqrestore(&iommu->iommu_lock, flags);
+ /* 2) Tell the streaming buffer which entries
+ * we want flushed.
+ */
+ while(start < end) {
+ sregs->sbuf_pflush = start;
+ start += PAGE_SIZE;
+ }
+
+ /* 3) Initiate flush sequence. */
+ sregs->sbuf_fsync = __pa(&(iommu->flushflag));
+
+ /* 4) Guarentee completion of all previous writes
+ * by reading SYSIO's SBUS control register.
+ */
+ tmp = *sbctrl;
+
+ /* 5) Wait for flush flag to get set. */
+ while(iommu->flushflag == 0)
+ membar("#LoadLoad");
+
+ spin_unlock_irqrestore(&iommu->iommu_lock, flags);
+ }
X }
X
X void mmu_get_scsi_sgl(struct mmu_sglist *sg, int sz, struct linux_sbus *sbus)
X {
- while(sz >= 0) {
- __u32 page = (__u32) __pa(((unsigned long) sg[sz].addr));
-#ifndef DEBUG_IOMMU
- sg[sz].dvma_addr = page;
-#else
- if((page < dvmaiobase) &&
- (page + sg[sz].len) < dvmaiobase) {
- sg[sz].dvma_addr = page;
- } else {
- /* "can't happen"... GFP_DMA assures this. */
- panic("scsi_sgl high mappings should never happen.");
+ struct iommu_struct *iommu = sbus->iommu;
+ struct sysio_regs *sregs = iommu->sysio_regs;
+ unsigned long flags, tmp;
+ volatile u64 *sbctrl = (volatile u64 *) &sregs->sbus_control;
+
+ if (iommu->strbuf_enabled) {
+ spin_lock_irqsave(&iommu->iommu_lock, flags);
+ iommu->flushflag = 0;
+
+ while(sz >= 0) {
+ unsigned long start = (unsigned long)sg[sz].addr;
+ unsigned long end = PAGE_ALIGN(start + sg[sz].len);
+
+ if (end > MAX_DMA_ADDRESS) {
+ printk("mmu_get_scsi_sgl: Bogus DMA buffer address "
+ "[%016lx:%d]\n", start, (int) sg[sz].len);
+ panic("DMA address too large, tell DaveM");
+ }
+
+ sg[sz--].dvma_addr = sbus_dvma_addr(start);
+ start &= PAGE_MASK;
+ while(start < end) {
+ sregs->sbuf_pflush = start;
+ start += PAGE_SIZE;
+ }
+ }
+
+ sregs->sbuf_fsync = __pa(&(iommu->flushflag));
+ tmp = *sbctrl;
+ while(iommu->flushflag == 0)
+ membar("#LoadLoad");
+ spin_unlock_irqrestore(&iommu->iommu_lock, flags);
+ } else {
+ /* Just verify the addresses and fill in the
+ * dvma_addr fields in this case.
+ */
+ while(sz >= 0) {
+ unsigned long start = (unsigned long)sg[sz].addr;
+ unsigned long end = PAGE_ALIGN(start + sg[sz].len);
+ if (end > MAX_DMA_ADDRESS) {
+ printk("mmu_get_scsi_sgl: Bogus DMA buffer address "
+ "[%016lx:%d]\n", start, (int) sg[sz].len);
+ panic("DMA address too large, tell DaveM");
+ }
+ sg[sz--].dvma_addr = sbus_dvma_addr(start);
X }
-#endif
- sz--;
X }
X }
X
@@ -462,30 +530,98 @@
X {
X struct iommu_struct *iommu = sbus->iommu;
X struct sysio_regs *sregs = iommu->sysio_regs;
- unsigned long flags;
- unsigned int *sync_word;
+ volatile u64 *sbctrl = (volatile u64 *) &sregs->sbus_control;
+ unsigned long flags, tmp;
X
- spin_lock_irqsave(&iommu->iommu_lock, flags);
+ if (iommu->strbuf_enabled) {
+ spin_lock_irqsave(&iommu->iommu_lock, flags);
X
- while(sz >= 0) {
- unsigned long start = sg[sz].dvma_addr;
- unsigned long end = PAGE_ALIGN(start + sg[sz].len);
+ /* 1) Clear the flush flag word */
+ iommu->flushflag = 0;
X
- start &= PAGE_MASK;
- while(start < end) {
- sregs->sbuf_pflush = start;
- start += PAGE_SIZE;
+ /* 2) Tell the streaming buffer which entries
+ * we want flushed.
+ */
+ while(sz >= 0) {
+ unsigned long start = sg[sz].dvma_addr;
+ unsigned long end = PAGE_ALIGN(start + sg[sz].len);
+
+ start &= PAGE_MASK;
+ while(start < end) {
+ sregs->sbuf_pflush = start;
+ start += PAGE_SIZE;
+ }
+ sz--;
X }
- sz--;
+
+ /* 3) Initiate flush sequence. */
+ sregs->sbuf_fsync = __pa(&(iommu->flushflag));
+
+ /* 4) Guarentee completion of previous writes
+ * by reading SYSIO's SBUS control register.
+ */
+ tmp = *sbctrl;
+
+ /* 5) Wait for flush flag to get set. */
+ while(iommu->flushflag == 0)
+ membar("#LoadLoad");
+
+ spin_unlock_irqrestore(&iommu->iommu_lock, flags);
X }
- sync_word = iommu->sbuf_flushflag_va;
- sregs->sbuf_fsync = iommu->sbuf_flushflag_pa;
- membar("#StoreLoad | #MemIssue");
- while((*sync_word & 0x1) == 0)
- membar("#LoadLoad");
- *sync_word = 0;
+}
+
+void mmu_set_sbus64(struct linux_sbus_device *sdev, int bursts)
+{
+ struct linux_sbus *sbus = sdev->my_bus;
+ struct sysio_regs *sregs = sbus->iommu->sysio_regs;
+ int slot = sdev->slot;
+ u64 *cfg, tmp;
+
+ switch(slot) {
+ case 0:
+ cfg = &sregs->sbus_s0cfg;
+ break;
+ case 1:
+ cfg = &sregs->sbus_s1cfg;
+ break;
+ case 2:
+ cfg = &sregs->sbus_s2cfg;
+ break;
+ case 3:
+ cfg = &sregs->sbus_s3cfg;
+ break;
+
+ case 13:
+ cfg = &sregs->sbus_s4cfg;
+ break;
+ case 14:
+ cfg = &sregs->sbus_s5cfg;
+ break;
+ case 15:
+ cfg = &sregs->sbus_s6cfg;
+ break;
+
+ default:
+ return;
+ };
+
+ /* ETM already enabled? If so, we're done. */
+ tmp = *cfg;
+ if ((tmp & SYSIO_SBSCFG_ETM) != 0)
+ return;
X
- spin_unlock_irqrestore(&iommu->iommu_lock, flags);
+ /* Set burst bits. */
+ if (bursts & DMA_BURST8)
+ tmp |= SYSIO_SBSCFG_BA8;
+ if (bursts & DMA_BURST16)
+ tmp |= SYSIO_SBSCFG_BA16;
+ if (bursts & DMA_BURST32)
+ tmp |= SYSIO_SBSCFG_BA32;
+ if (bursts & DMA_BURST64)
+ tmp |= SYSIO_SBSCFG_BA64;
+
+ /* Finally turn on ETM and set register. */
+ *cfg = (tmp | SYSIO_SBSCFG_ETM);
X }
X
X int mmu_info(char *buf)
@@ -562,16 +698,9 @@
X */
X static void __flush_nucleus_vptes(void)
X {
- unsigned long pstate;
X unsigned long prom_reserved_base = 0xfffffffc00000000UL;
X int i;
X
- __asm__ __volatile__("flushw\n\t"
- "rdpr %%pstate, %0\n\t"
- "wrpr %0, %1, %%pstate"
- : "=r" (pstate)
- : "i" (PSTATE_IE));
-
X /* Only DTLB must be checked for VPTE entries. */
X for(i = 0; i < 63; i++) {
X unsigned long tag = spitfire_get_dtlb_tag(i);
@@ -586,8 +715,6 @@
X membar("#Sync");
X }
X }
- __asm__ __volatile__("wrpr %0, 0, %%pstate"
- : : "r" (pstate));
X }
X
X static int prom_ditlb_set = 0;
@@ -600,10 +727,19 @@
X
X void prom_world(int enter)
X {
+ unsigned long pstate;
X int i;
X
X if (!prom_ditlb_set)
X return;
+
+ /* Make sure the following runs atomically. */
+ __asm__ __volatile__("flushw\n\t"
+ "rdpr %%pstate, %0\n\t"
+ "wrpr %0, %1, %%pstate"
+ : "=r" (pstate)
+ : "i" (PSTATE_IE));
+
X if (enter) {
X /* Kick out nucleus VPTEs. */
X __flush_nucleus_vptes();
@@ -648,6 +784,8 @@
X }
X }
X }
+ __asm__ __volatile__("wrpr %0, 0, %%pstate"
+ : : "r" (pstate));
X }
X
X void inherit_locked_prom_mappings(int save_p)
@@ -680,7 +818,7 @@
X unsigned long data;
X
X data = spitfire_get_dtlb_data(i);
- if(data & _PAGE_L) {
+ if((data & (_PAGE_L|_PAGE_VALID)) == (_PAGE_L|_PAGE_VALID)) {
X unsigned long tag = spitfire_get_dtlb_tag(i);
X
X if(save_p) {
@@ -703,7 +841,7 @@
X unsigned long data;
X
X data = spitfire_get_itlb_data(i);
- if(data & _PAGE_L) {
+ if((data & (_PAGE_L|_PAGE_VALID)) == (_PAGE_L|_PAGE_VALID)) {
X unsigned long tag = spitfire_get_itlb_tag(i);
X
X if(save_p) {
@@ -867,15 +1005,11 @@
X struct pgtable_cache_struct pgt_quicklists;
X #endif
X
-/* XXX Add __GFP_HIGH to these calls to "fool" page allocator
- * XXX so we don't go to swap so quickly... then do the same
- * XXX for get_user_page as well -DaveM
- */
X pmd_t *get_pmd_slow(pgd_t *pgd, unsigned long offset)
X {
X pmd_t *pmd;
X
- pmd = (pmd_t *) __get_free_page(GFP_DMA|GFP_KERNEL);
+ pmd = (pmd_t *) __get_free_page(GFP_KERNEL);
X if(pmd) {
X memset(pmd, 0, PAGE_SIZE);
X pgd_set(pgd, pmd);
@@ -888,7 +1022,7 @@
X {
X pte_t *pte;
X
- pte = (pte_t *) __get_free_page(GFP_DMA|GFP_KERNEL);
+ pte = (pte_t *) __get_free_page(GFP_KERNEL);
X if(pte) {
X memset(pte, 0, PAGE_SIZE);
X pmd_set(pmd, pte);
@@ -997,11 +1131,11 @@
X __initfunc(unsigned long
X paging_init(unsigned long start_mem, unsigned long end_mem))
X {
- extern void setup_tba(void);
X extern pmd_t swapper_pmd_dir[1024];
- extern unsigned long irq_init(unsigned long start_mem, unsigned long end_mem);
- extern unsigned int sparc64_vpte_patchme[1];
+ extern unsigned int sparc64_vpte_patchme1[1];
+ extern unsigned int sparc64_vpte_patchme2[1];
X unsigned long alias_base = phys_base + PAGE_OFFSET;
+ unsigned long second_alias_page = 0;
X unsigned long pt;
X unsigned long flags;
X unsigned long shift = alias_base - ((unsigned long)&empty_zero_page);
@@ -1026,6 +1160,21 @@
X : "r" (TLB_TAG_ACCESS), "r" (alias_base), "r" (pt),
X "i" (ASI_DMMU), "i" (ASI_DTLB_DATA_ACCESS), "r" (61 << 3)
X : "memory");
+ if (start_mem >= KERNBASE + 0x340000) {
+ second_alias_page = alias_base + 0x400000;
+ __asm__ __volatile__("
+ stxa %1, [%0] %3
+ stxa %2, [%5] %4
+ membar #Sync
+ flush %%g6
+ nop
+ nop
+ nop"
+ : /* No outputs */
+ : "r" (TLB_TAG_ACCESS), "r" (second_alias_page), "r" (pt + 0x400000),
+ "i" (ASI_DMMU), "i" (ASI_DTLB_DATA_ACCESS), "r" (60 << 3)
+ : "memory");
+ }
X __restore_flags(flags);
X
X /* Now set kernel pgd to upper alias so physical page computations
@@ -1038,10 +1187,10 @@
X /* Now can init the kernel/bad page tables. */
X pgd_set(&swapper_pg_dir[0], swapper_pmd_dir + (shift / sizeof(pgd_t)));
X
- sparc64_vpte_patchme[0] |= (init_mm.pgd[0] >> 10);
+ sparc64_vpte_patchme1[0] |= (init_mm.pgd[0] >> 10);
+ sparc64_vpte_patchme2[0] |= (init_mm.pgd[0] & 0x3ff);
+ flushi((long)&sparc64_vpte_patchme1[0]);
X
- start_mem = irq_init(start_mem, end_mem);
-
X /* We use mempool to create page tables, therefore adjust it up
X * such that __pa() macros etc. work.
X */
@@ -1051,9 +1200,20 @@
X allocate_ptable_skeleton(DVMA_VADDR, DVMA_VADDR + 0x4000000);
X inherit_prom_mappings();
X
-
- /* Ok, we can use our TLB miss and window trap handlers safely. */
- setup_tba();
+ /* Ok, we can use our TLB miss and window trap handlers safely.
+ * We need to do a quick peek here to see if we are on StarFire
+ * or not, so setup_tba can setup the IRQ globals correctly (it
+ * needs to get the hard smp processor id correctly).
+ */
+ {
+ extern void setup_tba(int);
+ int is_starfire = prom_finddevice("/ssp-serial");
+ if(is_starfire != 0 && is_starfire != -1)
+ is_starfire = 1;
+ else
+ is_starfire = 0;
+ setup_tba(is_starfire);
+ }
X
X /* Really paranoid. */
X flushi((long)&empty_zero_page);
@@ -1064,6 +1224,8 @@
X */
X /* We only created DTLB mapping of this stuff. */
X spitfire_flush_dtlb_nucleus_page(alias_base);
+ if (second_alias_page)
+ spitfire_flush_dtlb_nucleus_page(second_alias_page);
X membar("#Sync");
X
X /* Paranoid */
@@ -1079,10 +1241,6 @@
X return device_scan (PAGE_ALIGN (start_mem));
X }
X
-/* XXX Add also PG_Hole flag, set it in the page structs here,
- * XXX remove FREE_UNUSED_MEM_MAP code, and the nfsd file handle
- * problems will all be gone. -DaveM
- */
X __initfunc(static void taint_real_pages(unsigned long start_mem, unsigned long end_mem))
X {
X unsigned long tmp = 0, paddr, endaddr;
@@ -1096,14 +1254,24 @@
X if (!sp_banks[tmp].num_bytes) {
X mem_map[paddr>>PAGE_SHIFT].flags |= (1<<PG_skip);
X mem_map[paddr>>PAGE_SHIFT].next_hash = mem_map + (phys_base >> PAGE_SHIFT);
+ mem_map[(paddr>>PAGE_SHIFT)+1UL].flags |= (1<<PG_skip);
+ mem_map[(paddr>>PAGE_SHIFT)+1UL].next_hash = mem_map + (phys_base >> PAGE_SHIFT);
X return;
X }
X
X if (sp_banks[tmp].base_addr > paddr) {
- /* Making a one or two pages PG_skip holes is not necessary */
- if (sp_banks[tmp].base_addr - paddr > 2 * PAGE_SIZE) {
+ /* Making a one or two pages PG_skip holes
+ * is not necessary. We add one more because
+ * we must set the PG_skip flag on the first
+ * two mem_map[] entries for the hole. Go and
+ * see the mm/filemap.c:shrink_mmap() loop for
+ * details. -DaveM
+ */
+ if (sp_banks[tmp].base_addr - paddr > 3 * PAGE_SIZE) {
X mem_map[paddr>>PAGE_SHIFT].flags |= (1<<PG_skip);
X mem_map[paddr>>PAGE_SHIFT].next_hash = mem_map + (sp_banks[tmp].base_addr >> PAGE_SHIFT);
+ mem_map[(paddr>>PAGE_SHIFT)+1UL].flags |= (1<<PG_skip);
+ mem_map[(paddr>>PAGE_SHIFT)+1UL].next_hash = mem_map + (sp_banks[tmp].base_addr >> PAGE_SHIFT);
X }
X paddr = sp_banks[tmp].base_addr;
X }
@@ -1111,7 +1279,8 @@
X endaddr = sp_banks[tmp].base_addr + sp_banks[tmp].num_bytes;
X while (paddr < endaddr) {
X mem_map[paddr>>PAGE_SHIFT].flags &= ~(1<<PG_reserved);
- if (paddr >= dvmaiobase)
+ set_bit(paddr >> 22, sparc64_valid_addr_bitmap);
+ if (paddr >= (MAX_DMA_ADDRESS - PAGE_OFFSET))
X mem_map[paddr>>PAGE_SHIFT].flags &= ~(1<<PG_DMA);
X paddr += PAGE_SIZE;
X }
@@ -1131,6 +1300,12 @@
X end_mem &= PAGE_MASK;
X max_mapnr = MAP_NR(end_mem);
X high_memory = (void *) end_mem;
+
+ sparc64_valid_addr_bitmap = (unsigned long *)start_mem;
+ i = max_mapnr >> ((22 - PAGE_SHIFT) + 6);
+ i += 1;
+ memset(sparc64_valid_addr_bitmap, 0, i << 3);
+ start_mem += i << 3;
X
X start_mem = PAGE_ALIGN(start_mem);
X num_physpages = 0;
@@ -1138,6 +1313,8 @@
X if (phys_base) {
X mem_map[0].flags |= (1<<PG_skip) | (1<<PG_reserved);
X mem_map[0].next_hash = mem_map + (phys_base >> PAGE_SHIFT);
+ mem_map[1].flags |= (1<<PG_skip) | (1<<PG_reserved);
+ mem_map[1].next_hash = mem_map + (phys_base >> PAGE_SHIFT);
X }
X
X addr = PAGE_OFFSET + phys_base;
@@ -1148,6 +1325,7 @@
X else
X #endif
X mem_map[MAP_NR(addr)].flags |= (1<<PG_reserved);
+ set_bit(__pa(addr) >> 22, sparc64_valid_addr_bitmap);
X addr += PAGE_SIZE;
X }
X
@@ -1159,6 +1337,9 @@
X if (PageSkip(page)) {
X unsigned long low, high;
X
+ /* See taint_real_pages() for why this is done. -DaveM */
+ page++;
+
X low = PAGE_ALIGN((unsigned long)(page+1));
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 10'
echo 'File patch-2.2.4 is continued in part 11'
echo 11 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 12 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 12; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+ just have changed the grab size */
+ qcam->status |= QC_PARAM_CHANGE;
+
X /* Ok we figured out what to use from our wide choice */
X return 0;
X }
@@ -824,11 +904,15 @@
X parport_claim_or_block(qcam->pdev);
X /* Probably should have a semaphore against multiple users */
X qc_reset(qcam);
+
+ /* Update the camera parameters if we need to */
+ if (qcam->status & QC_PARAM_CHANGE)
+ qc_set(qcam);
+
X len=qc_capture(qcam, buf,count);
X parport_release(qcam->pdev);
X return len;
X }
-
X
X static struct video_device qcam_template=
X {
@@ -909,6 +993,17 @@
X
X for (port = parport_enumerate(); port; port=port->next)
X init_bwqcam(port);
+
+ /* Do some sanity checks on the module parameters. */
+ if (maxpoll > 5000) {
+ printk("Connectix Quickcam max-poll was above 5000. Using 5000.\n");
+ maxpoll = 5000;
+ }
+
+ if (yieldlines < 1) {
+ printk("Connectix Quickcam yieldlines was less than 1. Using 1.\n");
+ yieldlines = 1;
+ }
X
X return (num_cams)?0:-ENODEV;
X }
diff -u --recursive --new-file v2.2.3/linux/drivers/char/bw-qcam.h linux/drivers/char/bw-qcam.h
--- v2.2.3/linux/drivers/char/bw-qcam.h Mon Jan 12 14:46:16 1998
+++ linux/drivers/char/bw-qcam.h Wed Mar 10 17:03:52 1999
@@ -48,6 +48,9 @@
X #define MAX_HEIGHT 243
X #define MAX_WIDTH 336
X
+/* Bit fields for status flags */
+#define QC_PARAM_CHANGE 0x01 /* Camera status change has occurred */
+
X struct qcam_device {
X struct video_device vdev;
X struct pardevice *pdev;
@@ -59,6 +62,6 @@
X int port_mode;
X int transfer_scale;
X int top, left;
+ int status;
X unsigned int saved_bits;
X };
-
diff -u --recursive --new-file v2.2.3/linux/drivers/char/console.c linux/drivers/char/console.c
--- v2.2.3/linux/drivers/char/console.c Wed Mar 10 15:29:45 1999
+++ linux/drivers/char/console.c Wed Mar 10 16:51:35 1999
@@ -85,7 +85,6 @@
X #include <linux/selection.h>
X #include <linux/console_struct.h>
X #include <linux/kbd_kern.h>
-#include <linux/vt_kern.h>
X #include <linux/consolemap.h>
X #include <linux/timer.h>
X #include <linux/interrupt.h>
diff -u --recursive --new-file v2.2.3/linux/drivers/char/epca.c linux/drivers/char/epca.c
--- v2.2.3/linux/drivers/char/epca.c Wed Jan 13 15:00:41 1999
+++ linux/drivers/char/epca.c Tue Mar 16 14:21:51 1999
@@ -83,7 +83,6 @@
X #include <linux/string.h>
X #include <linux/fcntl.h>
X #include <linux/ptrace.h>
-#include <linux/major.h>
X #include <linux/ioport.h>
X
X #ifdef MODULE
@@ -117,7 +116,7 @@
X
X /* ---------------------- Begin defines ------------------------ */
X
-#define VERSION "1.1.0"
+#define VERSION "1.3.0-K"
X
X /* This major needs to be submitted to Linux to join the majors list */
X
@@ -1814,9 +1813,10 @@
X pc_callout.subtype = SERIAL_TYPE_CALLOUT;
X
X pc_info = pc_driver;
- pc_info.name = "digiCtl";
+ pc_info.name = "digi_ctl";
X pc_info.major = DIGIINFOMAJOR;
X pc_info.minor_start = 0;
+ pc_info.num = 1;
X pc_info.init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL;
X pc_info.subtype = SERIAL_TYPE_INFO;
X
@@ -2398,7 +2398,7 @@
X assertgwinon(ch);
X
X } /* End DATA_IND */
- else
+ /* else *//* Fix for DCD transition missed bug */
X if (event & MODEMCHG_IND)
X { /* Begin MODEMCHG_IND */
X
diff -u --recursive --new-file v2.2.3/linux/drivers/char/lp.c linux/drivers/char/lp.c
--- v2.2.3/linux/drivers/char/lp.c Wed Dec 16 10:32:55 1998
+++ linux/drivers/char/lp.c Thu Mar 11 09:27:06 1999
@@ -437,7 +437,7 @@
X } else if (!(status & LP_PERRORP)) {
X if (last != LP_PERRORP) {
X last = LP_PERRORP;
- printk(KERN_ERR "lp%d on fire!\n", minor);
+ printk(KERN_INFO "lp%d on fire!\n", minor);
X }
X }
X else last = 0;
@@ -664,17 +664,15 @@
X }
X if ((i & 1) != 0) {
X Byte |= (z<<4);
- if (temp) {
- if (__put_user (Byte, temp))
- {
- count = -EFAULT;
- temp = NULL;
- } else {
- temp++;
+ if (__put_user (Byte, temp))
+ {
+ count = -EFAULT;
+ break;
+ } else {
+ temp++;
X
- if (++count == length)
- temp = NULL;
- }
+ if (++count == length)
+ break;
X }
X /* Does the error line indicate end of data? */
X if ((parport_read_status(port) & LP_PERRORP) ==
@@ -952,16 +950,12 @@
X
X default:
X for (i = 0; i < LP_NO; i++) {
- if (parport_nr[i] >= 0) {
- char buffer[16];
- sprintf(buffer, "parport%d", parport_nr[i]);
- for (port = parport_enumerate(); port;
- port = port->next) {
- if (!strcmp(port->name, buffer)) {
- (void) lp_register(i, port);
+ for (port = parport_enumerate(); port;
+ port = port->next) {
+ if (port->number == parport_nr[i]) {
+ if (!lp_register(i, port))
X count++;
- break;
- }
+ break;
X }
X }
X }
diff -u --recursive --new-file v2.2.3/linux/drivers/char/pcxx.c linux/drivers/char/pcxx.c
--- v2.2.3/linux/drivers/char/pcxx.c Tue Jan 19 11:32:51 1999
+++ linux/drivers/char/pcxx.c Wed Mar 10 16:51:35 1999
@@ -68,7 +68,6 @@
X #include <linux/serial.h>
X #include <linux/tty_driver.h>
X #include <linux/malloc.h>
-#include <linux/string.h>
X #include <linux/init.h>
X #include <linux/version.h>
X
diff -u --recursive --new-file v2.2.3/linux/drivers/char/rocket.c linux/drivers/char/rocket.c
--- v2.2.3/linux/drivers/char/rocket.c Sun Nov 8 14:02:55 1998
+++ linux/drivers/char/rocket.c Wed Mar 10 16:51:35 1999
@@ -80,7 +80,6 @@
X #include <linux/string.h>
X #include <linux/fcntl.h>
X #include <linux/ptrace.h>
-#include <linux/major.h>
X #include <linux/ioport.h>
X #ifdef ENABLE_PCI
X #include <linux/pci.h>
diff -u --recursive --new-file v2.2.3/linux/drivers/char/serial.c linux/drivers/char/serial.c
--- v2.2.3/linux/drivers/char/serial.c Tue Jan 19 11:32:51 1999
+++ linux/drivers/char/serial.c Tue Mar 23 13:13:58 1999
@@ -771,7 +771,7 @@
X continue;
X if (!multi->port4)
X break;
- if ((inb(multi->port4) & multi->mask4) == multi->match4)
+ if ((inb(multi->port4) & multi->mask4) != multi->match4)
X continue;
X break;
X }
@@ -1274,6 +1274,8 @@
X
X /* Determine divisor based on baud rate */
X baud = tty_get_baud_rate(info->tty);
+ if (!baud)
+ baud = 9600; /* B0 transition handled in rs_set_termios */
X baud_base = info->state->baud_base;
X if (baud == 38400 &&
X ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST))
@@ -1740,7 +1742,7 @@
X check_and_exit:
X if (!state->port || !state->type)
X return 0;
- if (state->flags & ASYNC_INITIALIZED) {
+ if (info->flags & ASYNC_INITIALIZED) {
X if (((old_state.flags & ASYNC_SPD_MASK) !=
X (state->flags & ASYNC_SPD_MASK)) ||
X (old_state.custom_divisor != state->custom_divisor)) {
@@ -2162,8 +2164,9 @@
X {
X struct async_struct *info = (struct async_struct *)tty->driver_data;
X unsigned long flags;
+ unsigned int cflag = tty->termios->c_cflag;
X
- if ( (tty->termios->c_cflag == old_termios->c_cflag)
+ if ( (cflag == old_termios->c_cflag)
X && ( RELEVANT_IFLAG(tty->termios->c_iflag)
X == RELEVANT_IFLAG(old_termios->c_iflag)))
X return;
@@ -2172,7 +2175,7 @@
X
X /* Handle transition to B0 status */
X if ((old_termios->c_cflag & CBAUD) &&
- !(tty->termios->c_cflag & CBAUD)) {
+ !(cflag & CBAUD)) {
X info->MCR &= ~(UART_MCR_DTR|UART_MCR_RTS);
X save_flags(flags); cli();
X serial_out(info, UART_MCR, info->MCR);
@@ -2181,7 +2184,7 @@
X
X /* Handle transition away from B0 status */
X if (!(old_termios->c_cflag & CBAUD) &&
- (tty->termios->c_cflag & CBAUD)) {
+ (cflag & CBAUD)) {
X info->MCR |= UART_MCR_DTR;
X if (!(tty->termios->c_cflag & CRTSCTS) ||
X !test_bit(TTY_THROTTLED, &tty->flags)) {
diff -u --recursive --new-file v2.2.3/linux/drivers/char/tpqic02.c linux/drivers/char/tpqic02.c
--- v2.2.3/linux/drivers/char/tpqic02.c Mon Dec 28 15:00:52 1998
+++ linux/drivers/char/tpqic02.c Wed Mar 10 16:51:35 1999
@@ -75,7 +75,6 @@
X
X #include <linux/config.h>
X
-#include <linux/module.h>
X #include <linux/sched.h>
X #include <linux/timer.h>
X #include <linux/fs.h>
diff -u --recursive --new-file v2.2.3/linux/drivers/char/tty_io.c linux/drivers/char/tty_io.c
--- v2.2.3/linux/drivers/char/tty_io.c Tue Jan 19 11:32:51 1999
+++ linux/drivers/char/tty_io.c Mon Mar 22 10:06:21 1999
@@ -1143,7 +1143,7 @@
X /*
X * We've decremented tty->count, so we should zero out
X * filp->private_data, to break the link between the tty and
- * the file descriptor. Otherwise if close_fp() blocks before
+ * the file descriptor. Otherwise if filp_close() blocks before
X * the the file descriptor is removed from the inuse_filp
X * list, check_tty_count() could observe a discrepancy and
X * printk a warning message to the user.
diff -u --recursive --new-file v2.2.3/linux/drivers/fc4/Config.in linux/drivers/fc4/Config.in
--- v2.2.3/linux/drivers/fc4/Config.in Fri Nov 27 13:09:23 1998
+++ linux/drivers/fc4/Config.in Mon Mar 15 16:11:29 1999
@@ -7,12 +7,21 @@
X tristate 'Fibre Channel and FC4 SCSI support' CONFIG_FC4
X if [ ! "$CONFIG_FC4" = "n" ]; then
X comment 'FC4 drivers'
- tristate 'Sun SOC/Sbus' CONFIG_FC4_SOC
+ if [ "$ARCH" = "sparc" -o "$ARCH" = "sparc64" ]; then
+ tristate 'Sun SOC/Sbus' CONFIG_FC4_SOC
+ tristate 'Sun SOC+ (aka SOCAL)' CONFIG_FC4_SOCAL
+ fi
X comment 'FC4 targets'
X dep_tristate 'SparcSTORAGE Array 100 and 200 series' CONFIG_SCSI_PLUTO $CONFIG_SCSI
+ if [ "$ARCH" = "sparc" -o "$ARCH" = "sparc64" ]; then
+ dep_tristate 'Sun Enterprise Network Array (A5000 and EX500)' CONFIG_SCSI_FCAL $CONFIG_SCSI
+ else
+ dep_tristate 'Generic FC-AL disk driver' CONFIG_SCSI_FCAL $CONFIG_SCSI
+ fi
X else
X define_bool CONFIG_FC4_SOC n
+ define_bool CONFIG_FC4_SOCAL n
X define_bool CONFIG_SCSI_PLUTO n
+ define_bool CONFIG_SCSI_FCAL n
X fi
X endmenu
-
diff -u --recursive --new-file v2.2.3/linux/drivers/fc4/Makefile linux/drivers/fc4/Makefile
--- v2.2.3/linux/drivers/fc4/Makefile Mon Jan 12 15:19:36 1998
+++ linux/drivers/fc4/Makefile Mon Mar 15 16:11:29 1999
@@ -33,6 +33,14 @@
X endif
X endif
X
+ifeq ($(CONFIG_FC4_SOCAL),y)
+L_OBJS += socal.o
+else
+ ifeq ($(CONFIG_FC4_SOCAL),m)
+ M_OBJS += socal.o
+ endif
+endif
+
X include $(TOPDIR)/Rules.make
X
X fc4.o: $(MIX_OBJS) fc.o
diff -u --recursive --new-file v2.2.3/linux/drivers/fc4/fc-al.h linux/drivers/fc4/fc-al.h
--- v2.2.3/linux/drivers/fc4/fc-al.h Wed Dec 31 16:00:00 1969
+++ linux/drivers/fc4/fc-al.h Mon Mar 15 16:11:29 1999
@@ -0,0 +1,27 @@
+/* fc-al.h: Definitions for Fibre Channel Arbitrated Loop topology.
+ *
+ * Copyright (C) 1998 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
+ *
+ * Sources:
+ * Fibre Channel Arbitrated Loop (FC-AL), ANSI, Rev. 4.5, 1995
+ */
+
+#ifndef __FC_AL_H
+#define __FC_AL_H
+
+/* Loop initialization payloads */
+#define FC_AL_LISM 0x11010000 /* Select Master, 12B payload */
+#define FC_AL_LIFA 0x11020000 /* Fabric Assign AL_PA bitmap, 20B payload */
+#define FC_AL_LIPA 0x11030000 /* Previously Acquired AL_PA bitmap, 20B payload */
+#define FC_AL_LIHA 0x11040000 /* Hard Assigned AL_PA bitmap, 20B payload */
+#define FC_AL_LISA 0x11050000 /* Soft Assigned AL_PA bitmap, 20B payload */
+#define FC_AL_LIRP 0x11060000 /* Report AL_PA position map, 132B payload */
+#define FC_AL_LILP 0x11070000 /* Loop AL_PA position map, 132B payload */
+
+typedef struct {
+ u32 magic;
+ u8 len;
+ u8 alpa[127];
+} fc_al_posmap;
+
+#endif /* !(__FC_H) */
diff -u --recursive --new-file v2.2.3/linux/drivers/fc4/fc.c linux/drivers/fc4/fc.c
--- v2.2.3/linux/drivers/fc4/fc.c Tue Dec 22 14:16:55 1998
+++ linux/drivers/fc4/fc.c Mon Mar 15 16:11:29 1999
@@ -1,11 +1,24 @@
X /* fc.c: Generic Fibre Channel and FC4 SCSI driver.
X *
- * Copyright (C) 1997,1998 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
+ * Copyright (C) 1997,1998,1999 Jakub Jelinek (j...@ultra.linux.cz)
X * Copyright (C) 1997,1998 Jirka Hanika (g...@ff.cuni.cz)
X *
+ * There are two kinds of Fibre Channel adapters used in Linux. Either
+ * the adapter is "smart" and does all FC bookkeeping by itself and
+ * just presents a standard SCSI interface to the operating system
+ * (that's e.g. the case with Qlogic FC cards), or leaves most of the FC
+ * bookkeeping to the OS (e.g. soc, socal). Drivers for the former adapters
+ * will look like normal SCSI drivers (with the exception of max_id will be
+ * usually 127), the latter on the other side allows SCSI, IP over FC and other
+ * protocols. This driver tree is for the latter adapters.
+ *
+ * This file should support both Point-to-Point and Arbitrated Loop topologies.
+ *
X * Sources:
X * Fibre Channel Physical & Signaling Interface (FC-PH), dpANS, 1994
X * dpANS Fibre Channel Protocol for SCSI (X3.269-199X), Rev. 012, 1995
+ * Fibre Channel Arbitrated Loop (FC-AL), Rev. 4.5, 1995
+ * Fibre Channel Private Loop SCSI Direct Attach (FC-PLDA), Rev. 2.1, 1997
X */
X
X #include <linux/module.h>
@@ -25,7 +38,7 @@
X #include <asm/pgtable.h>
X #include <asm/irq.h>
X #include <asm/semaphore.h>
-#include "fcp_scsi.h"
+#include "fcp_impl.h"
X #include "../scsi/hosts.h"
X
X /* #define FCDEBUG */
@@ -43,7 +56,7 @@
X #ifdef __sparc__
X static inline void *fc_dma_alloc(long size, char *name, dma_handle *dma)
X {
- return (void *) sparc_dvma_malloc (size, "FCP SCSI cmd & rsp queues", dma);
+ return (void *) sparc_dvma_malloc (size, name, dma);
X }
X
X static inline dma_handle fc_sync_dma_entry(void *buf, int len, fc_channel *fc)
@@ -73,6 +86,9 @@
X #define FC_SCMND(SCpnt) ((fc_channel *)(SCpnt->host->hostdata[0]))
X #define SC_FCMND(fcmnd) ((Scsi_Cmnd *)((long)fcmnd - (long)&(((Scsi_Cmnd *)0)->SCp)))
X
+static int fcp_scsi_queue_it(fc_channel *, Scsi_Cmnd *, fcp_cmnd *, int);
+void fcp_queue_empty(fc_channel *);
+
X static void fcp_scsi_insert_queue (fc_channel *fc, fcp_cmnd *fcmd)
X {
X if (!fc->scsi_que) {
@@ -101,7 +117,7 @@
X
X fc_channel *fc_channels = NULL;
X
-#define LSMAGIC 0x2a3b4d2a
+#define LSMAGIC 620829043
X typedef struct {
X /* Must be first */
X struct semaphore sem;
@@ -111,10 +127,10 @@
X fcp_cmnd *fcmds;
X atomic_t todo;
X struct timer_list timer;
- int grace[1];
+ unsigned char grace[0];
X } ls;
X
-#define LSOMAGIC 0x2a3c4e3c
+#define LSOMAGIC 654907799
X typedef struct {
X /* Must be first */
X struct semaphore sem;
@@ -125,6 +141,15 @@
X struct timer_list timer;
X } lso;
X
+#define LSEMAGIC 84482456
+typedef struct {
+ /* Must be first */
+ struct semaphore sem;
+ int magic;
+ int status;
+ struct timer_list timer;
+} lse;
+
X static void fcp_login_timeout(unsigned long data)
X {
X ls *l = (ls *)data;
@@ -225,6 +250,97 @@
X }
X }
X
+static void fcp_report_map_done(fc_channel *fc, int i, int status)
+{
+ fcp_cmnd *fcmd;
+ fc_hdr *fch;
+ unsigned char j;
+ ls *l = (ls *)fc->ls;
+ fc_al_posmap *p;
+
+ FCD(("Report map done %d %d\n", i, status))
+ switch (status) {
+ case FC_STATUS_OK: /* Ok, let's have a fun on a loop */
+ fc_sync_dma_exit (l->fcmds[i].cmd, 3 * sizeof(logi), fc);
+ p = (fc_al_posmap *)(l->logi + 3 * i);
+#ifdef FCDEBUG
+ {
+ u32 *u = (u32 *)p;
+ FCD(("%08x\n", u[0]))
+ u ++;
+ FCD(("%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x\n", u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7]))
+ }
+#endif
+ if ((p->magic & 0xffff0000) != FC_AL_LILP || !p->len) {
+ printk ("FC: Bad magic from REPORT_AL_MAP on %s - %08x\n", fc->name, p->magic);
+ fc->state = FC_STATE_OFFLINE;
+ } else {
+ fc->posmap = (fcp_posmap *)kmalloc(sizeof(fcp_posmap)+p->len, GFP_KERNEL);
+ if (!fc->posmap) {
+ printk("FC: Not enough memory, offlining channel\n");
+ fc->state = FC_STATE_OFFLINE;
+ } else {
+ int k;
+ memset(fc->posmap, 0, sizeof(fcp_posmap)+p->len);
+ /* FIXME: This is where SOCAL transfers our AL-PA.
+ Keep it here till we found out what other cards do... */
+ fc->sid = (p->magic & 0xff);
+ for (i = 0; i < p->len; i++)
+ if (p->alpa[i] == fc->sid)
+ break;
+ k = p->len;
+ if (i == p->len)
+ i = 0;
+ else {
+ p->len--;
+ i++;
+ }
+ fc->posmap->len = p->len;
+ for (j = 0; j < p->len; j++) {
+ if (i == k) i = 0;
+ fc->posmap->list[j] = p->alpa[i++];
+ }
+ fc->state = FC_STATE_ONLINE;
+ }
+ }
+ printk ("%s: ONLINE\n", fc->name);
+ if (atomic_dec_and_test (&l->todo))
+ up(&l->sem);
+ break;
+ case FC_STATUS_POINTTOPOINT: /* We're Point-to-Point, no AL... */
+ FCD(("SID %d DID %d\n", fc->sid, fc->did))
+ fcmd = l->fcmds + i;
+ fc_sync_dma_exit(fcmd->cmd, 3 * sizeof(logi), fc);
+ fch = &fcmd->fch;
+ memset(l->logi + 3 * i, 0, 3 * sizeof(logi));
+ FILL_FCHDR_RCTL_DID(fch, R_CTL_ELS_REQ, FS_FABRIC_F_PORT);
+ FILL_FCHDR_SID(fch, 0);
+ FILL_FCHDR_TYPE_FCTL(fch, TYPE_EXTENDED_LS, F_CTL_FIRST_SEQ | F_CTL_SEQ_INITIATIVE);
+ FILL_FCHDR_SEQ_DF_SEQ(fch, 0, 0, 0);
+ FILL_FCHDR_OXRX(fch, 0xffff, 0xffff);
+ fch->param = 0;
+ l->logi [3 * i].code = LS_FLOGI;
+ fcmd->cmd = fc_sync_dma_entry (l->logi + 3 * i, 3 * sizeof(logi), fc);
+ fcmd->rsp = fcmd->cmd + sizeof(logi);
+ fcmd->cmdlen = sizeof(logi);
+ fcmd->rsplen = sizeof(logi);
+ fcmd->data = (dma_handle)NULL;
+ fcmd->class = FC_CLASS_SIMPLE;
+ fcmd->proto = TYPE_EXTENDED_LS;
+ if (fc->hw_enque (fc, fcmd))
+ printk ("FC: Cannot enque FLOGI packet on %s\n", fc->name);
+ break;
+ case FC_STATUS_ERR_OFFLINE:
+ fc->state = FC_STATE_MAYBEOFFLINE;
+ FCD (("FC is offline %d\n", l->grace[i]))
+ break;
+ default:
+ printk ("FLOGI failed for %s with status %d\n", fc->name, status);
+ /* Do some sort of error recovery here */
+ break;
+ }
+}
+
X void fcp_register(fc_channel *fc, u8 type, int unregister)
X {
X int size, i;
@@ -247,12 +363,13 @@
X for (i = fc->can_queue; i < fc->scsi_bitmap_end; i++)
X set_bit (i, fc->scsi_bitmap);
X fc->scsi_free = fc->can_queue;
- fc->token_tab = (fcp_cmnd **)kmalloc(slots * sizeof(fcp_cmnd*), GFP_KERNEL);
+ fc->cmd_slots = (fcp_cmnd **)kmalloc(slots * sizeof(fcp_cmnd*), GFP_KERNEL);
+ memset(fc->cmd_slots, 0, slots * sizeof(fcp_cmnd*));
X fc->abort_count = 0;
X } else {
X fc->scsi_name[0] = 0;
X kfree (fc->scsi_bitmap);
- kfree (fc->token_tab);
+ kfree (fc->cmd_slots);
X FCND(("Unregistering\n"));
X if (fc->rst_pkt) {
X if (fc->rst_pkt->eh_state == SCSI_STATE_UNUSED)
@@ -279,7 +396,7 @@
X int sense_len;
X int rsp_status;
X
- fcmd = fc->token_tab[token];
+ fcmd = fc->cmd_slots[token];
X if (!fcmd) return;
X rsp = (fcp_rsp *) (fc->scsi_rsp_pool + fc->rsp_size * token);
X SCpnt = SC_FCMND(fcmd);
@@ -343,27 +460,47 @@
X fcmd->done=NULL;
X clear_bit(token, fc->scsi_bitmap);
X fc->scsi_free++;
- FCD(("Calling scsi_done with %08lx\n", SCpnt->result))
+ FCD(("Calling scsi_done with %08x\n", SCpnt->result))
X SCpnt->scsi_done(SCpnt);
X }
X
X void fcp_receive_solicited(fc_channel *fc, int proto, int token, int status, fc_hdr *fch)
X {
+ int magic;
X FCD(("receive_solicited %d %d %d\n", proto, token, status))
X switch (proto) {
X case TYPE_SCSI_FCP:
X fcp_scsi_receive(fc, token, status, fch); break;
X case TYPE_EXTENDED_LS:
- if (fc->ls && ((ls *)(fc->ls))->magic == LSMAGIC) {
+ case PROTO_REPORT_AL_MAP:
+ magic = 0;
+ if (fc->ls)
+ magic = ((ls *)(fc->ls))->magic;
+ if (magic == LSMAGIC) {
X ls *l = (ls *)fc->ls;
X int i = (token >= l->count) ? token - l->count : token;
X
X /* Let's be sure */
X if ((unsigned)i < l->count && l->fcmds[i].fc == fc) {
- fcp_login_done(fc, token, status);
+ if (proto == TYPE_EXTENDED_LS)
+ fcp_login_done(fc, token, status);
+ else
+ fcp_report_map_done(fc, token, status);
X break;
X }
X }
+ FCD(("fc %p fc->ls %p fc->cmd_slots %p\n", fc, fc->ls, fc->cmd_slots))
+ if (proto == TYPE_EXTENDED_LS && !fc->ls && fc->cmd_slots) {
+ fcp_cmnd *fcmd;
+
+ fcmd = fc->cmd_slots[token];
+ if (fcmd && fcmd->ls && ((ls *)(fcmd->ls))->magic == LSEMAGIC) {
+ lse *l = (lse *)fcmd->ls;
+
+ l->status = status;
+ up (&l->sem);
+ }
+ }
X break;
X case PROTO_OFFLINE:
X if (fc->ls && ((lso *)(fc->ls))->magic == LSOMAGIC) {
@@ -405,12 +542,12 @@
X FCND(("fcp_inititialize %08lx\n", (long)fcp_init))
X FCND(("fc_channels %08lx\n", (long)fc_channels))
X FCND((" SID %d DID %d\n", fcchain->sid, fcchain->did))
- l = kmalloc(sizeof (ls) + count * sizeof(int), GFP_KERNEL);
+ l = kmalloc(sizeof (ls) + count, GFP_KERNEL);
X if (!l) {
X printk ("FC: Cannot allocate memory for initialization\n");
X return -ENOMEM;
X }
- memset (l, 0, sizeof(ls) + count * sizeof(int));
+ memset (l, 0, sizeof(ls) + count);
X l->magic = LSMAGIC;
X l->count = count;
X FCND(("FCP Init for %d channels\n", count))
@@ -429,36 +566,25 @@
X }
X memset (l->logi, 0, count * 3 * sizeof(logi));
X memset (l->fcmds, 0, count * sizeof(fcp_cmnd));
- FCND(("Initializing FLOGI packets\n"))
X for (fc = fcchain, i = 0; fc && i < count; fc = fc->next, i++) {
- fc_hdr *fch;
-
- FCD(("SID %d DID %d\n", fc->sid, fc->did))
X fc->state = FC_STATE_UNINITED;
+ fc->rst_pkt = NULL; /* kmalloc when first used */
+ }
+ /* First try if we are in a AL topology */
+ FCND(("Initializing REPORT_MAP packets\n"))
+ for (fc = fcchain, i = 0; fc && i < count; fc = fc->next, i++) {
X fcmd = l->fcmds + i;
X fc->login = fcmd;
X fc->ls = (void *)l;
- fc->rst_pkt = NULL; /* kmalloc when first used */
- fch = &fcmd->fch;
- FILL_FCHDR_RCTL_DID(fch, R_CTL_ELS_REQ, FS_FABRIC_F_PORT);
- FILL_FCHDR_SID(fch, 0);
- FILL_FCHDR_TYPE_FCTL(fch, TYPE_EXTENDED_LS, F_CTL_FIRST_SEQ | F_CTL_SEQ_INITIATIVE);
- FILL_FCHDR_SEQ_DF_SEQ(fch, 0, 0, 0);
- FILL_FCHDR_OXRX(fch, 0xffff, 0xffff);
- fch->param = 0;
- l->logi [3 * i].code = LS_FLOGI;
+ /* Assumes sizeof(fc_al_posmap) < 3 * sizeof(logi), which is true */
X fcmd->cmd = fc_sync_dma_entry (l->logi + 3 * i, 3 * sizeof(logi), fc);
- fcmd->rsp = fcmd->cmd + sizeof(logi);
- fcmd->cmdlen = sizeof(logi);
- fcmd->rsplen = sizeof(logi);
- fcmd->data = (dma_handle)NULL;
- fcmd->class = FC_CLASS_SIMPLE;
- fcmd->proto = TYPE_EXTENDED_LS;
+ fcmd->proto = PROTO_REPORT_AL_MAP;
X fcmd->token = i;
X fcmd->fc = fc;
X }
X for (retry = 0; retry < 8; retry++) {
- FCND(("Sending FLOGI/PLOGI packets\n"))
+ int nqueued = 0;
+ FCND(("Sending REPORT_MAP/FLOGI/PLOGI packets\n"))
X for (fc = fcchain, i = 0; fc && i < count; fc = fc->next, i++) {
X if (fc->state == FC_STATE_ONLINE || fc->state == FC_STATE_OFFLINE)
X continue;
@@ -477,27 +603,56 @@
X }
X ret = fc->hw_enque (fc, fc->login);
X enable_irq(fc->irq);
- if (ret) printk ("FC: Cannot enque FLOGI packet on %s\n", fc->name);
+ if (!ret) {
+ nqueued++;
+ continue;
+ }
+ if (ret == -ENOSYS && fc->login->proto == PROTO_REPORT_AL_MAP) {
+ /* Oh yes, this card handles Point-to-Point only, so let's try that. */
+ fc_hdr *fch;
+
+ FCD(("SID %d DID %d\n", fc->sid, fc->did))
+ fcmd = l->fcmds + i;
+ fc_sync_dma_exit(fcmd->cmd, 3 * sizeof(logi), fc);
+ fch = &fcmd->fch;
+ FILL_FCHDR_RCTL_DID(fch, R_CTL_ELS_REQ, FS_FABRIC_F_PORT);
+ FILL_FCHDR_SID(fch, 0);
+ FILL_FCHDR_TYPE_FCTL(fch, TYPE_EXTENDED_LS, F_CTL_FIRST_SEQ | F_CTL_SEQ_INITIATIVE);
+ FILL_FCHDR_SEQ_DF_SEQ(fch, 0, 0, 0);
+ FILL_FCHDR_OXRX(fch, 0xffff, 0xffff);
+ fch->param = 0;
+ l->logi [3 * i].code = LS_FLOGI;
+ fcmd->cmd = fc_sync_dma_entry (l->logi + 3 * i, 3 * sizeof(logi), fc);
+ fcmd->rsp = fcmd->cmd + sizeof(logi);
+ fcmd->cmdlen = sizeof(logi);
+ fcmd->rsplen = sizeof(logi);
+ fcmd->data = (dma_handle)NULL;
+ fcmd->class = FC_CLASS_SIMPLE;
+ fcmd->proto = TYPE_EXTENDED_LS;
+ } else
+ printk ("FC: Cannot enque FLOGI/REPORT_MAP packet on %s\n", fc->name);
X }
X
- l->timer.expires = jiffies + 5 * HZ;
- add_timer(&l->timer);
-
- down(&l->sem);
- if (!atomic_read(&l->todo)) {
- FCND(("All channels answered in time\n"))
- break; /* All fc channels have answered us */
+ if (nqueued) {
+ l->timer.expires = jiffies + 5 * HZ;
+ add_timer(&l->timer);
+
+ down(&l->sem);
+ if (!atomic_read(&l->todo)) {
+ FCND(("All channels answered in time\n"))
+ break; /* All fc channels have answered us */
+ }
X }
X }
X all_done:
- for (fc = fcchain, i = 0; fc && i < count; fc = fc->next, i += 3) {
+ for (fc = fcchain, i = 0; fc && i < count; fc = fc->next, i++) {
+ fc->ls = NULL;
X switch (fc->state) {
X case FC_STATE_ONLINE: break;
X case FC_STATE_OFFLINE: break;
X default: fc_sync_dma_exit (l->fcmds[i].cmd, 3 * sizeof(logi), fc);
X break;
X }
- fc->ls = NULL;
X }
X del_timer(&l->timer);
X kfree (l->logi);
@@ -534,6 +689,7 @@
X fcmd = l.fcmds + i;
X fc->login = fcmd;
X fc->ls = (void *)&l;
+ fcmd->did = fc->did;
X fcmd->class = FC_CLASS_OFFLINE;
X fcmd->proto = PROTO_OFFLINE;
X fcmd->token = i;
@@ -549,6 +705,8 @@
X down(&l.sem);
X del_timer(&l.timer);
X
+ for (fc = fcchain, i = 0; fc && i < count; fc = fc->next, i++)
+ fc->ls = NULL;
X kfree (l.fcmds);
X return 0;
X }
@@ -565,14 +723,14 @@
X }
X
X ret = fcp_initialize (fcchain, count);
-
- if (!ret) {
- if (!fc_channels)
- fc_channels = fcchain;
- else {
- for (fc = fc_channels; fc->next; fc = fc->next);
- fc->next = fcchain;
- }
+ if (ret)
+ return ret;
+
+ if (!fc_channels)
+ fc_channels = fcchain;
+ else {
+ for (fc = fc_channels; fc->next; fc = fc->next);
+ fc->next = fcchain;
X }
X return ret;
X }
@@ -622,7 +780,7 @@
X fcmd->token = i;
X cmd = fc->scsi_cmd_pool + i;
X
- if (fc->encode_addr (SCpnt, cmd->fcp_addr)) {
+ if (fc->encode_addr (SCpnt, cmd->fcp_addr, fc, fcmd)) {
X /* Invalid channel/id/lun and couldn't map it into fcp_addr */
X clear_bit (i, fc->scsi_bitmap);
X SCpnt->result = (DID_BAD_TARGET << 16);
@@ -630,7 +788,7 @@
X return 0;
X }
X fc->scsi_free--;
- fc->token_tab[fcmd->token] = fcmd;
+ fc->cmd_slots[fcmd->token] = fcmd;
X
X if (SCpnt->device->tagged_supported) {
X if (jiffies - fc->ages[SCpnt->channel * fc->targets + SCpnt->target] > (5 * 60 * HZ)) {
@@ -670,14 +828,14 @@
X memset (cmd->fcp_cdb+SCpnt->cmd_len, 0, sizeof(cmd->fcp_cdb)-SCpnt->cmd_len);
X FCD(("XXX: %04x.%04x.%04x.%04x - %08x%08x%08x\n", cmd->fcp_addr[0], cmd->fcp_addr[1], cmd->fcp_addr[2], cmd->fcp_addr[3], *(u32 *)SCpnt->cmnd, *(u32 *)(SCpnt->cmnd+4), *(u32 *)(SCpnt->cmnd+8)))
X }
- FCD(("Trying to enque %08x\n", (int)fcmd))
+ FCD(("Trying to enque %p\n", fcmd))
X if (!fc->scsi_que) {
X if (!fc->hw_enque (fc, fcmd)) {
- FCD(("hw_enque succeeded for %08x\n", (int)fcmd))
+ FCD(("hw_enque succeeded for %p\n", fcmd))
X return 0;
X }
X }
- FCD(("Putting into que1 %08x\n", (int)fcmd))
+ FCD(("Putting into que1 %p\n", fcmd))
X fcp_scsi_insert_queue (fc, fcmd);
X return 0;
X }
@@ -687,7 +845,7 @@
X fcp_cmnd *fcmd = FCP_CMND(SCpnt);
X fc_channel *fc = FC_SCMND(SCpnt);
X
- FCD(("Entering SCSI queuecommand %08x\n", (int)fcmd))
+ FCD(("Entering SCSI queuecommand %p\n", fcmd))
X if (SCpnt->done != fcp_scsi_done) {
X fcmd->done = SCpnt->done;
X SCpnt->done = fcp_scsi_done;
@@ -708,11 +866,12 @@
X void fcp_queue_empty(fc_channel *fc)
X {
X fcp_cmnd *fcmd;
+
X FCD(("Queue empty\n"))
X while ((fcmd = fc->scsi_que)) {
X /* The hw told us we can try again queue some packet */
X if (fc->hw_enque (fc, fcmd))
- return;
+ break;
X fcp_scsi_remove_queue (fc, fcmd);
X }
X }
@@ -725,7 +884,7 @@
X
X int fcp_scsi_abort(Scsi_Cmnd *SCpnt)
X {
- /* Internal bookkeeping only. Lose 1 token_tab slot. */
+ /* Internal bookkeeping only. Lose 1 cmd_slots slot. */
X fcp_cmnd *fcmd = FCP_CMND(SCpnt);
X fc_channel *fc = FC_SCMND(SCpnt);
X
@@ -733,14 +892,14 @@
X * We react to abort requests by simply forgetting
X * about the command and pretending everything's sweet.
X * This may or may not be silly. We can't, however,
- * immediately reuse the command's token_tab slot,
+ * immediately reuse the command's cmd_slots slot,
X * as its result may arrive later and we cannot
X * check whether it is the aborted one, can't we?
X *
X * Therefore, after the first few aborts are done,
X * we tell the scsi error handler to do something clever.
X * It will eventually call host reset, refreshing
- * token_tab for us.
+ * cmd_slots for us.
X *
X * There is a theoretical chance that we sometimes allow
X * more than can_queue packets to the jungle this way,
@@ -786,13 +945,13 @@
X fcmd->token = 0;
X cmd = fc->scsi_cmd_pool + 0;
X FCD(("Preparing rst packet\n"))
- if (fc->encode_addr (SCpnt, /*?*/cmd->fcp_addr))
+ fc->encode_addr (SCpnt, cmd->fcp_addr, fc, fcmd);
X fc->rst_pkt->channel = SCpnt->channel;
X fc->rst_pkt->target = SCpnt->target;
X fc->rst_pkt->lun = 0;
X fc->rst_pkt->cmd_len = 0;
X
- fc->token_tab[0] = fcmd;
+ fc->cmd_slots[0] = fcmd;
X
X cmd->fcp_cntl = FCP_CNTL_QTYPE_ORDERED | FCP_CNTL_RESET;
X fcmd->data = (dma_handle)NULL;
@@ -859,16 +1018,137 @@
X printk ("FC: host reset\n");
X
X for (i=0; i < fc->can_queue; i++) {
- if (fc->token_tab[i] && SCpnt->result != DID_ABORT) {
+ if (fc->cmd_slots[i] && SCpnt->result != DID_ABORT) {
X SCpnt->result = DID_RESET;
X fcmd->done(SCpnt);
- fc->token_tab[i] = NULL;
+ fc->cmd_slots[i] = NULL;
X }
X }
X fc->reset(fc);
X fc->abort_count = 0;
X if (fcp_initialize(fc, 1)) return SUCCESS;
X else return FAILED;
+}
+
+static int fcp_els_queue_it(fc_channel *fc, fcp_cmnd *fcmd)
+{
+ long i;
+
+ i = find_first_zero_bit (fc->scsi_bitmap, fc->scsi_bitmap_end);
+ set_bit (i, fc->scsi_bitmap);
+ fcmd->token = i;
+ fc->scsi_free--;
+ fc->cmd_slots[fcmd->token] = fcmd;
+ return fcp_scsi_queue_it(fc, NULL, fcmd, 0);
+}
+
+static int fc_do_els(fc_channel *fc, unsigned int alpa, void *data, int len)
+{
+ fcp_cmnd _fcmd, *fcmd;
+ fc_hdr *fch;
+ lse l;
+ int i;
+
+ fcmd = &_fcmd;
+ memset(fcmd, 0, sizeof(fcmd));
+ FCD(("PLOGI SID %d DID %d\n", fc->sid, alpa))
+ fch = &fcmd->fch;
+ FILL_FCHDR_RCTL_DID(fch, R_CTL_ELS_REQ, alpa);
+ FILL_FCHDR_SID(fch, fc->sid);
+ FILL_FCHDR_TYPE_FCTL(fch, TYPE_EXTENDED_LS, F_CTL_FIRST_SEQ | F_CTL_SEQ_INITIATIVE);
+ FILL_FCHDR_SEQ_DF_SEQ(fch, 0, 0, 0);
+ FILL_FCHDR_OXRX(fch, 0xffff, 0xffff);
+ fch->param = 0;
+ fcmd->cmd = fc_sync_dma_entry (data, 2 * len, fc);
+ fcmd->rsp = fcmd->cmd + len;
+ fcmd->cmdlen = len;
+ fcmd->rsplen = len;
+ fcmd->data = (dma_handle)NULL;
+ fcmd->fc = fc;
+ fcmd->class = FC_CLASS_SIMPLE;
+ fcmd->proto = TYPE_EXTENDED_LS;
+
+ memset (&l, 0, sizeof(lse));
+ l.magic = LSEMAGIC;
+ l.sem = MUTEX_LOCKED;
+ l.timer.function = fcp_login_timeout;
+ l.timer.data = (unsigned long)&l;
+ l.status = FC_STATUS_TIMED_OUT;
+ fcmd->ls = (void *)&l;
+
+ disable_irq(fc->irq);
+ fcp_els_queue_it(fc, fcmd);
+ enable_irq(fc->irq);
+
+ for (i = 0;;) {
+ l.timer.expires = jiffies + 5 * HZ;
+ add_timer(&l.timer);
+ down(&l.sem);
+ del_timer(&l.timer);
+ if (l.status != FC_STATUS_TIMED_OUT) break;
+ if (++i == 3) break;
+ disable_irq(fc->irq);
+ fcp_scsi_queue_it(fc, NULL, fcmd, 0);
+ enable_irq(fc->irq);
+ }
+
+ clear_bit(fcmd->token, fc->scsi_bitmap);
+ fc->scsi_free++;
+ fc_sync_dma_exit (fcmd->cmd, 2 * len, fc);
+ return l.status;
+}
+
+int fc_do_plogi(fc_channel *fc, unsigned char alpa, fc_wwn *node, fc_wwn *nport)
+{
+ logi *l;
+ int status;
+
+ l = (logi *)kmalloc(2 * sizeof(logi), GFP_DMA);
+ if (!l) return -ENOMEM;
+ memset(l, 0, 2 * sizeof(logi));
+ l->code = LS_PLOGI;
+ memcpy (&l->nport_wwn, &fc->wwn_nport, sizeof(fc_wwn));
+ memcpy (&l->node_wwn, &fc->wwn_node, sizeof(fc_wwn));
+ memcpy (&l->common, fc->common_svc, sizeof(common_svc_parm));
+ memcpy (&l->class1, fc->class_svcs, 3*sizeof(svc_parm));
+ status = fc_do_els(fc, alpa, l, sizeof(logi));
+ if (status == FC_STATUS_OK) {
+ if (l[1].code == LS_ACC) {
+#ifdef FCDEBUG
+ u32 *u = (u32 *)&l[1].nport_wwn;
+ FCD(("AL-PA %02x: Port WWN %08x%08x Node WWN %08x%08x\n", alpa,
+ u[0], u[1], u[2], u[3]))
+#endif
+ memcpy(nport, &l[1].nport_wwn, sizeof(fc_wwn));
+ memcpy(node, &l[1].node_wwn, sizeof(fc_wwn));
+ } else
+ status = FC_STATUS_BAD_RSP;
+ }
+ kfree(l);
+ return status;
+}
+
+typedef struct {
+ unsigned int code;
+ unsigned params[4];
+} prli;
+
+int fc_do_prli(fc_channel *fc, unsigned char alpa)
+{
+ prli *p;
+ int status;
+
+ p = (prli *)kmalloc(2 * sizeof(prli), GFP_DMA);
+ if (!p) return -ENOMEM;
+ memset(p, 0, 2 * sizeof(prli));
+ p->code = LS_PRLI;
+ p->params[0] = 0x08002000;
+ p->params[3] = 0x00000022;
+ status = fc_do_els(fc, alpa, p, sizeof(prli));
+ if (status == FC_STATUS_OK && p[1].code != LS_PRLI_ACC && p[1].code != LS_ACC)
+ status = FC_STATUS_BAD_RSP;
+ kfree(p);
+ return status;
X }
X
X #ifdef MODULE
diff -u --recursive --new-file v2.2.3/linux/drivers/fc4/fc.h linux/drivers/fc4/fc.h
--- v2.2.3/linux/drivers/fc4/fc.h Mon Jan 12 15:19:36 1998
+++ linux/drivers/fc4/fc.h Mon Mar 15 16:11:29 1999
@@ -1,6 +1,6 @@
X /* fc.h: Definitions for Fibre Channel Physical and Signaling Interface.
X *
- * Copyright (C) 1996,1997 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
+ * Copyright (C) 1996-1997,1999 Jakub Jelinek (j...@ultra.linux.cz)
X *
X * Sources:
X * Fibre Channel Physical & Signaling Interface (FC-PH), dpANS, 1994
@@ -11,13 +11,16 @@
X #define __FC_H
X
X /* World Wide Name */
-#define NAAID_IEEE 1
-#define NAAID_IEEE_EXT 2
-#define NAAID_LOCAL 3
-#define NAAID_IP 4
-#define NAAID_CCITT 12
-#define NAAID_CCITT_GRP 14
+#define NAAID_IEEE 1
+#define NAAID_IEEE_EXT 2
+#define NAAID_LOCAL 3
+#define NAAID_IP 4
+#define NAAID_IEEE_REG 5
+#define NAAID_IEEE_REG_EXT 6
+#define NAAID_CCITT 12
+#define NAAID_CCITT_GRP 14
X
+/* This is NAAID_IEEE_EXT scheme */
X typedef struct {
X u32 naaid:4;
X u32 nportid:12;
@@ -165,6 +168,7 @@
X /* Extended SVC commands */
X #define LS_RJT 0x01000000
X #define LS_ACC 0x02000000
+#define LS_PRLI_ACC 0x02100014
X #define LS_PLOGI 0x03000000
X #define LS_FLOGI 0x04000000
X #define LS_LOGO 0x05000000
@@ -182,7 +186,11 @@
X #define LS_TEST 0x11000000
X #define LS_RRQ 0x12000000
X #define LS_IDENT 0x20000000
+#define LS_PRLI 0x20100014
X #define LS_DISPLAY 0x21000000
+#define LS_PRLO 0x21100014
+#define LS_PDISC 0x50000000
+#define LS_ADISC 0x52000000
X
X typedef struct {
X u8 fcph_hi, fcph_lo;
diff -u --recursive --new-file v2.2.3/linux/drivers/fc4/fc_syms.c linux/drivers/fc4/fc_syms.c
--- v2.2.3/linux/drivers/fc4/fc_syms.c Thu Apr 23 20:21:33 1998
+++ linux/drivers/fc4/fc_syms.c Mon Mar 15 16:11:29 1999
@@ -13,7 +13,7 @@
X #include <linux/string.h>
X #include <linux/kernel.h>
X
-#include "fcp_scsi.h"
+#include "fcp_impl.h"
X
X EXPORT_SYMBOL(fcp_init);
X EXPORT_SYMBOL(fcp_release);
@@ -21,6 +21,8 @@
X EXPORT_SYMBOL(fcp_receive_solicited);
X EXPORT_SYMBOL(fc_channels);
X EXPORT_SYMBOL(fcp_state_change);
+EXPORT_SYMBOL(fc_do_plogi);
+EXPORT_SYMBOL(fc_do_prli);
X
X /* SCSI stuff */
X EXPORT_SYMBOL(fcp_scsi_queuecommand);
diff -u --recursive --new-file v2.2.3/linux/drivers/fc4/fcp_impl.h linux/drivers/fc4/fcp_impl.h
--- v2.2.3/linux/drivers/fc4/fcp_impl.h Wed Dec 31 16:00:00 1969
+++ linux/drivers/fc4/fcp_impl.h Mon Mar 15 16:11:29 1999
@@ -0,0 +1,168 @@
+/* fcp_impl.h: Generic SCSI on top of FC4 - our interface defines.
+ *
+ * Copyright (C) 1997-1999 Jakub Jelinek (j...@ultra.linux.cz)
+ * Copyright (C) 1998 Jirka Hanika (g...@ff.cuni.cz)
+ */
+
+#ifndef _FCP_SCSI_H
+#define _FCP_SCSI_H
+
+#include <linux/types.h>
+#include <linux/blk.h>
+#include "../scsi/scsi.h"
+
+#include "fc.h"
+#include "fcp.h"
+#include "fc-al.h"
+
+#ifdef __sparc__
+
+#include <asm/sbus.h>
+typedef u32 dma_handle;
+
+#else
+#error Need to port FC layer to your architecture
+#endif
+
+/* 0 or 1 */
+#define FCP_SCSI_USE_NEW_EH_CODE 0
+
+#define FC_CLASS_OUTBOUND 0x01
+#define FC_CLASS_INBOUND 0x02
+#define FC_CLASS_SIMPLE 0x03
+#define FC_CLASS_IO_WRITE 0x04
+#define FC_CLASS_IO_READ 0x05
+#define FC_CLASS_UNSOLICITED 0x06
+#define FC_CLASS_OFFLINE 0x08
+
+#define PROTO_OFFLINE 0x02
+#define PROTO_REPORT_AL_MAP 0x03
+#define PROTO_FORCE_LIP 0x06
+
+struct _fc_channel;
+
+typedef struct fcp_cmnd {
+ struct fcp_cmnd *next;
+ struct fcp_cmnd *prev;
+ void (*done)(Scsi_Cmnd *);
+ unsigned short proto;
+ unsigned short token;
+ unsigned int did;
+ /* FCP SCSI stuff */
+ dma_handle data;
+ /* From now on this cannot be touched for proto == TYPE_SCSI_FCP */
+ fc_hdr fch;
+ dma_handle cmd;
+ dma_handle rsp;
+ int cmdlen;
+ int rsplen;
+ int class;
+ int datalen;
+ /* This is just used as a verification during login */
+ struct _fc_channel *fc;
+ void *ls;
+} fcp_cmnd;
+
+typedef struct {
+ unsigned int len;
+ unsigned char list[0];
+} fcp_posmap;
+
+typedef struct _fc_channel {
+ struct _fc_channel *next;
+ int irq;
+ int state;
+ int sid;
+ int did;
+ char name[16];
+ void (*fcp_register)(struct _fc_channel *, u8, int);
+ void (*reset)(struct _fc_channel *);
+ int (*hw_enque)(struct _fc_channel *, fcp_cmnd *);
+ fc_wwn wwn_node;
+ fc_wwn wwn_nport;
+ fc_wwn wwn_dest;
+ common_svc_parm *common_svc;
+ svc_parm *class_svcs;
+#ifdef __sparc__
+ struct linux_sbus_device *dev;
+#endif
+ struct module *module;
+ /* FCP SCSI stuff */
+ short can_queue;
+ short abort_count;
+ int rsp_size;
+ fcp_cmd *scsi_cmd_pool;
+ char *scsi_rsp_pool;
+ dma_handle dma_scsi_cmd, dma_scsi_rsp;
+ long *scsi_bitmap;
+ long scsi_bitmap_end;
+ int scsi_free;
+ int (*encode_addr)(Scsi_Cmnd *, u16 *, struct _fc_channel *, fcp_cmnd *);
+ fcp_cmnd *scsi_que;
+ char scsi_name[4];
+ fcp_cmnd **cmd_slots;
+ int channels;
+ int targets;
+ long *ages;
+ Scsi_Cmnd *rst_pkt;
+ fcp_posmap *posmap;
+ /* LOGIN stuff */
+ fcp_cmnd *login;
+ void *ls;
+} fc_channel;
+
+extern fc_channel *fc_channels;
+
+#define FC_STATE_UNINITED 0
+#define FC_STATE_ONLINE 1
+#define FC_STATE_OFFLINE 2
+#define FC_STATE_RESETING 3
+#define FC_STATE_FPORT_OK 4
+#define FC_STATE_MAYBEOFFLINE 5
+
+#define FC_STATUS_OK 0
+#define FC_STATUS_P_RJT 2
+#define FC_STATUS_F_RJT 3
+#define FC_STATUS_P_BSY 4
+#define FC_STATUS_F_BSY 5
+#define FC_STATUS_ERR_OFFLINE 0x11
+#define FC_STATUS_TIMEOUT 0x12
+#define FC_STATUS_ERR_OVERRUN 0x13
+#define FC_STATUS_POINTTOPOINT 0x15
+#define FC_STATUS_AL 0x16
+#define FC_STATUS_UNKNOWN_CQ_TYPE 0x20
+#define FC_STATUS_BAD_SEG_CNT 0x21
+#define FC_STATUS_MAX_XCHG_EXCEEDED 0x22
+#define FC_STATUS_BAD_XID 0x23
+#define FC_STATUS_XCHG_BUSY 0x24
+#define FC_STATUS_BAD_POOL_ID 0x25
+#define FC_STATUS_INSUFFICIENT_CQES 0x26
+#define FC_STATUS_ALLOC_FAIL 0x27
+#define FC_STATUS_BAD_SID 0x28
+#define FC_STATUS_NO_SEQ_INIT 0x29
+#define FC_STATUS_TIMED_OUT -1
+#define FC_STATUS_BAD_RSP -2
+
+void fcp_queue_empty(fc_channel *);
+int fcp_init(fc_channel *);
+void fcp_release(fc_channel *fc_chain, int count);
+void fcp_receive_solicited(fc_channel *, int, int, int, fc_hdr *);
+void fcp_state_change(fc_channel *, int);
+int fc_do_plogi(fc_channel *, unsigned char, fc_wwn *, fc_wwn *);
+int fc_do_prli(fc_channel *, unsigned char);
+
+#define for_each_fc_channel(fc) \
+ for (fc = fc_channels; fc; fc = fc->next)
+
+#define for_each_online_fc_channel(fc) \
+ for_each_fc_channel(fc) \
+ if (fc->state == FC_STATE_ONLINE)
+
+int fcp_scsi_queuecommand(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
+int fcp_old_abort(Scsi_Cmnd *);
+int fcp_scsi_abort(Scsi_Cmnd *);
+int fcp_scsi_dev_reset(Scsi_Cmnd *);
+int fcp_scsi_bus_reset(Scsi_Cmnd *);
+int fcp_scsi_host_reset(Scsi_Cmnd *);
+
+#endif /* !(_FCP_SCSI_H) */
diff -u --recursive --new-file v2.2.3/linux/drivers/fc4/fcp_scsi.h linux/drivers/fc4/fcp_scsi.h
--- v2.2.3/linux/drivers/fc4/fcp_scsi.h Tue Dec 22 14:16:55 1998
+++ linux/drivers/fc4/fcp_scsi.h Wed Dec 31 16:00:00 1969
@@ -1,151 +0,0 @@
-/* fcp_scsi.h: Generic SCSI on top of FC4 - interface defines.
- *
- * Copyright (C) 1997 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
- * Copyright (C) 1998 Jirka Hanika (g...@ff.cuni.cz)
- */
-
-#ifndef _FCP_SCSI_H
-#define _FCP_SCSI_H
-
-#include <linux/types.h>
-#include <linux/blk.h>
-#include "../scsi/scsi.h"
-
-#include "fc.h"
-#include "fcp.h"
-
-#ifdef __sparc__
-
-#include <asm/sbus.h>
-typedef u32 dma_handle;
-
-#else
-#error Need to port FC layer to your architecture
-#endif
-
-/* 0 or 1 */
-#define FCP_SCSI_USE_NEW_EH_CODE 0
-
-#define FC_CLASS_OUTBOUND 0x01
-#define FC_CLASS_INBOUND 0x02
-#define FC_CLASS_SIMPLE 0x03
-#define FC_CLASS_IO_WRITE 0x04
-#define FC_CLASS_IO_READ 0x05
-#define FC_CLASS_UNSOLICITED 0x06
-#define FC_CLASS_OFFLINE 0x08
-
-#define PROTO_OFFLINE 0x02
-
-struct _fc_channel;
-
-typedef struct fcp_cmnd {
- struct fcp_cmnd *next;
- struct fcp_cmnd *prev;
- void (*done)(Scsi_Cmnd *);
- int proto;
- int token;
- /* FCP SCSI stuff */
- dma_handle data;
- /* From now on this cannot be touched for proto == TYPE_SCSI_FCP */
- fc_hdr fch;
- dma_handle cmd;
- dma_handle rsp;
- int cmdlen;
- int rsplen;
- int class;
- int datalen;
- /* This is just used as a verification during login */
- struct _fc_channel *fc;
-} fcp_cmnd;
-
-typedef struct _fc_channel {
- struct _fc_channel *next;
- int irq;
- int state;
- int sid;
- int did;
- char name[16];
- void (*fcp_register)(struct _fc_channel *, u8, int);
- void (*reset)(struct _fc_channel *);
- int (*hw_enque)(struct _fc_channel *, fcp_cmnd *);
- fc_wwn wwn_node;
- fc_wwn wwn_nport;
- fc_wwn wwn_dest;
- common_svc_parm *common_svc;
- svc_parm *class_svcs;
-#ifdef __sparc__
- struct linux_sbus_device *dev;
-#endif
- struct module *module;
- /* FCP SCSI stuff */
- short can_queue;
- short abort_count;
- int rsp_size;
- fcp_cmd *scsi_cmd_pool;
- char *scsi_rsp_pool;
- dma_handle dma_scsi_cmd, dma_scsi_rsp;
- long *scsi_bitmap;
- long scsi_bitmap_end;
- int scsi_free;
- int (*encode_addr)(Scsi_Cmnd *cmnd, u16 *addr);
- fcp_cmnd *scsi_que;
- char scsi_name[4];
- fcp_cmnd **token_tab;
- int channels;
- int targets;
- long *ages;
- Scsi_Cmnd *rst_pkt;
- /* LOGIN stuff */
- fcp_cmnd *login;
- void *ls;
-} fc_channel;
-
-extern fc_channel *fc_channels;
-
-#define FC_STATE_UNINITED 0
-#define FC_STATE_ONLINE 1
-#define FC_STATE_OFFLINE 2
-#define FC_STATE_RESETING 3
-#define FC_STATE_FPORT_OK 4
-#define FC_STATE_MAYBEOFFLINE 5
-
-#define FC_STATUS_OK 0
-#define FC_STATUS_P_RJT 2
-#define FC_STATUS_F_RJT 3
-#define FC_STATUS_P_BSY 4
-#define FC_STATUS_F_BSY 5
-#define FC_STATUS_ERR_OFFLINE 0x11
-#define FC_STATUS_TIMEOUT 0x12
-#define FC_STATUS_ERR_OVERRUN 0x13
-#define FC_STATUS_UNKNOWN_CQ_TYPE 0x20
-#define FC_STATUS_BAD_SEG_CNT 0x21
-#define FC_STATUS_MAX_XCHG_EXCEEDED 0x22
-#define FC_STATUS_BAD_XID 0x23
-#define FC_STATUS_XCHG_BUSY 0x24
-#define FC_STATUS_BAD_POOL_ID 0x25
-#define FC_STATUS_INSUFFICIENT_CQES 0x26
-#define FC_STATUS_ALLOC_FAIL 0x27
-#define FC_STATUS_BAD_SID 0x28
-#define FC_STATUS_NO_SEQ_INIT 0x29
-
-void fcp_queue_empty(fc_channel *);
-int fcp_init(fc_channel *);
-void fcp_release(fc_channel *fc_chain, int count);
-void fcp_receive_solicited(fc_channel *, int, int, int, fc_hdr *);
-void fcp_state_change(fc_channel *, int);
-
-#define for_each_fc_channel(fc) \
- for (fc = fc_channels; fc; fc = fc->next)
-
-#define for_each_online_fc_channel(fc) \
- for_each_fc_channel(fc) \
- if (fc->state == FC_STATE_ONLINE)
-
-int fcp_scsi_queuecommand(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
-int fcp_old_abort(Scsi_Cmnd *);
-int fcp_scsi_abort(Scsi_Cmnd *);
-int fcp_scsi_dev_reset(Scsi_Cmnd *);
-int fcp_scsi_bus_reset(Scsi_Cmnd *);
-int fcp_scsi_host_reset(Scsi_Cmnd *);
-
-#endif /* !(_FCP_SCSI_H) */
diff -u --recursive --new-file v2.2.3/linux/drivers/fc4/soc.c linux/drivers/fc4/soc.c
--- v2.2.3/linux/drivers/fc4/soc.c Tue Dec 22 14:16:55 1998
+++ linux/drivers/fc4/soc.c Mon Mar 15 16:11:29 1999
@@ -1,6 +1,6 @@
X /* soc.c: Sparc SUNW,soc (Serial Optical Channel) Fibre Channel Sbus adapter support.
X *
- * Copyright (C) 1996,1997 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
+ * Copyright (C) 1996,1997,1999 Jakub Jelinek (j...@ultra.linux.cz)
X * Copyright (C) 1997,1998 Jirka Hanika (g...@ff.cuni.cz)
X *
X * Sources:
@@ -9,8 +9,6 @@
X *
X * Supported hardware:
X * Tested on SOC sbus card bought with SS1000 in Linux running on SS5 and Ultra1.
- * Should run on on-board SOC/SOC+ cards of Ex000 servers as well, but it is not
- * tested (let us know if you succeed).
X * For SOC sbus cards, you have to make sure your FCode is 1.52 or later.
X * If you have older FCode, you should try to upgrade or get SOC microcode from Sun
X * (the microcode is present in Solaris soc driver as well). In that case you need
@@ -20,7 +18,7 @@
X */
X
X static char *version =
- "soc.c:v1.2 27/Feb/98 Jakub Jelinek (j...@sunsite.mff.cuni.cz), Jirka Hanika (g...@ff.cuni.cz)\n";
+ "soc.c:v1.3 9/Feb/99 Jakub Jelinek (j...@ultra.linux.cz), Jirka Hanika (g...@ff.cuni.cz)\n";
X
X #include <linux/module.h>
X #include <linux/kernel.h>
@@ -34,7 +32,6 @@
X #include <linux/malloc.h>
X #include <linux/string.h>
X #include <linux/init.h>
-#include <asm/system.h>
X #include <asm/bitops.h>
X #include <asm/io.h>
X #include <asm/dma.h>
@@ -51,10 +48,10 @@
X /* #define SOCDEBUG */
X /* #define HAVE_SOC_UCODE */
X
-#include "fcp_scsi.h"
+#include "fcp_impl.h"
X #include "soc.h"
X #ifdef HAVE_SOC_UCODE
-#include "soc_asm.c"
+#include "soc_asm.h"
X #endif
X
X #define soc_printk printk ("soc%d: ", s->soc_no); printk
@@ -397,6 +394,10 @@
X FILL_FCHDR_OXRX(fch, 0xffff, 0xffff);
X request->shdr.flags = port->flags;
X break;
+
+ case PROTO_REPORT_AL_MAP:
+ /* SOC only supports Point-to-Point topology, no FC-AL, sorry... */
+ return -ENOSYS;
X
X default:
X request->shdr.token = TOKEN(fcmd->proto, port->mask, fcmd->token);
diff -u --recursive --new-file v2.2.3/linux/drivers/fc4/soc.h linux/drivers/fc4/soc.h
--- v2.2.3/linux/drivers/fc4/soc.h Mon Jan 12 15:19:36 1998
+++ linux/drivers/fc4/soc.h Mon Mar 15 16:11:29 1999
@@ -8,7 +8,7 @@
X
X #include "fc.h"
X #include "fcp.h"
-#include "fcp_scsi.h"
+#include "fcp_impl.h"
X
X /* Hardware structures and constants first {{{ */
X
diff -u --recursive --new-file v2.2.3/linux/drivers/fc4/socal.c linux/drivers/fc4/socal.c
--- v2.2.3/linux/drivers/fc4/socal.c Wed Dec 31 16:00:00 1969
+++ linux/drivers/fc4/socal.c Mon Mar 15 16:11:29 1999
@@ -0,0 +1,854 @@
+/* socal.c: Sparc SUNW,socal (SOC+) Fibre Channel Sbus adapter support.
+ *
+ * Copyright (C) 1998,1999 Jakub Jelinek (j...@ultra.linux.cz)
+ *
+ * Sources:
+ * Fibre Channel Physical & Signaling Interface (FC-PH), dpANS, 1994
+ * dpANS Fibre Channel Protocol for SCSI (X3.269-199X), Rev. 012, 1995
+ * SOC+ Programming Guide 0.1
+ * Fibre Channel Arbitrated Loop (FC-AL), dpANS rev. 4.5, 1995
+ *
+ * Supported hardware:
+ * On-board SOC+ adapters of Ultra Enterprise servers and sun4d.
+ */
+
+static char *version =
+ "socal.c: SOC+ driver v1.1 9/Feb/99 Jakub Jelinek (j...@ultra.linux.cz)\n";
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/types.h>
+#include <linux/fcntl.h>
+#include <linux/interrupt.h>
+#include <linux/ptrace.h>
+#include <linux/ioport.h>
+#include <linux/in.h>
+#include <linux/malloc.h>
+#include <linux/string.h>
+#include <linux/init.h>
+#include <asm/system.h>
+#include <asm/bitops.h>
+#include <asm/io.h>
+#include <asm/dma.h>
+#include <linux/errno.h>
+#include <asm/byteorder.h>
+
+#include <asm/openprom.h>
+#include <asm/oplib.h>
+#include <asm/auxio.h>
+#include <asm/system.h>
+#include <asm/pgtable.h>
+#include <asm/irq.h>
+
+/* #define SOCALDEBUG */
+/* #define HAVE_SOCAL_UCODE */
+/* #define USE_64BIT_MODE */
+
+#include "fcp_impl.h"
+#include "socal.h"
+#ifdef HAVE_SOCAL_UCODE
+#include "socal_asm.h"
+#endif
+
+#define socal_printk printk ("socal%d: ", s->socal_no); printk
+
+#ifdef SOCALDEBUG
+#define SOD(x) socal_printk x;
+#else
+#define SOD(x)
+#endif
+
+#define for_each_socal(s) for (s = socals; s; s = s->next)
+struct socal *socals = NULL;
+
+/* I don't think our VIS mem* routines will behave well
+ in IO... */
+static void socal_memcpy(void *d, void *s, int size)
+{
+ u32 *dp = (u32 *)d, *sp = (u32 *)s;
+ while (size) {
+ *dp++ = *sp++;
+ size -= sizeof(u32);
+ }
+}
+
+static void socal_bzero(void *d, int size)
+{
+ u32 *dp = (u32 *)d;
+ while (size) {
+ *dp++ = 0;
+ size -= sizeof(u32);
+ }
+}
+
+static inline void socal_disable(struct socal *s)
+{
+ s->regs->imask = 0; s->regs->cmd = SOCAL_CMD_SOFT_RESET;
+}
+
+static inline void socal_enable(struct socal *s)
+{
+ SOD(("enable %08x\n", s->cfg))
+ s->regs->sae = 0; s->regs->cfg = s->cfg;
+ s->regs->cmd = SOCAL_CMD_RSP_QALL;
+ SOCAL_SETIMASK(s, SOCAL_IMASK_RSP_QALL | SOCAL_IMASK_SAE);
+ SOD(("imask %08x %08x\n", s->imask, s->regs->imask));
+}
+
+static void socal_reset(fc_channel *fc)
+{
+ socal_port *port = (socal_port *)fc;
+ struct socal *s = port->s;
+
+ /* FIXME */
+ socal_disable(s);
+ s->req[0].seqno = 1;
+ s->req[1].seqno = 1;
+ s->rsp[0].seqno = 1;
+ s->rsp[1].seqno = 1;
+ s->req[0].in = 0;
+ s->req[1].in = 0;
+ s->rsp[0].in = 0;
+ s->rsp[1].in = 0;
+ s->req[0].out = 0;
+ s->req[1].out = 0;
+ s->rsp[0].out = 0;
+ s->rsp[1].out = 0;
+
+ /* FIXME */
+ socal_enable(s);
+}
+
+static void inline socal_solicited (struct socal *s, int qno)
+{
+ fc_hdr fchdr;
+ socal_rsp *hwrsp;
+ socal_cq *sw_cq;
+ int token;
+ int status;
+ fc_channel *fc;
+
+ sw_cq = &s->rsp[qno];
+
+ if (sw_cq->pool == NULL) {
+ SOD(("address %08x xram %p\n", sw_cq->hw_cq->address, s->xram))
+ sw_cq->pool =
+ (socal_req *)(s->xram + (sw_cq->hw_cq->address & 0xfffe));
+ }
+ /* Finally an improvement against old SOC :) */
+ sw_cq->in = s->regs->respr[qno];
+ SOD (("socal_solicited, %d packets arrived\n", (sw_cq->in - sw_cq->out) & sw_cq->last))
+ for (;;) {
+ hwrsp = (socal_rsp *)sw_cq->pool + sw_cq->out;
+ SOD(("hwrsp %p out %d\n", hwrsp, sw_cq->out))
+
+#if defined(SOCALDEBUG) && 0
+ {
+ u32 *u = (u32 *)hwrsp;
+ SOD(("%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x\n", u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7]))
+ u += 8;
+ SOD(("%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x\n", u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7]))
+ u = (u32 *)s->xram;
+ while (u < ((u32 *)s->regs)) {
+ if (u[0] == 0x00003000 || u[0] == 0x00003801) {
+ SOD(("Found at %04lx\n", (unsigned long)u - (unsigned long)s->xram))
+ SOD((" %08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x\n", u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7]))
+ u += 8;
+ SOD((" %08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x\n", u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7]))
+ u -= 8;
+ }
+ u++;
+ }
+ }
+#endif
+
+ token = hwrsp->shdr.token;
+ status = hwrsp->status;
+ fc = (fc_channel *)(&s->port[(token >> 11) & 1]);
+
+ SOD(("Solicited token %08x status %08x\n", token, status))
+ if (status == SOCAL_OK)
+ fcp_receive_solicited(fc, token >> 12, token & ((1 << 11) - 1), FC_STATUS_OK, NULL);
+ else {
+ socal_memcpy(&fchdr, &hwrsp->fchdr, sizeof(fchdr));
+ /* We have intentionally defined FC_STATUS_* constants to match SOCAL_* constants, otherwise
+ we'd have to translate status */
+ fcp_receive_solicited(fc, token >> 12, token & ((1 << 11) - 1), status, &fchdr);
+ }
+
+ if (++sw_cq->out > sw_cq->last) {
+ sw_cq->seqno++;
+ sw_cq->out = 0;
+ }
+
+ if (sw_cq->out == sw_cq->in) {
+ sw_cq->in = s->regs->respr[qno];
+ if (sw_cq->out == sw_cq->in) {
+ /* Tell the hardware about it */
+ s->regs->cmd = (sw_cq->out << 24) | (SOCAL_CMD_RSP_QALL & ~(SOCAL_CMD_RSP_Q0 << qno));
+ /* Read it, so that we're sure it has been updated */
+ s->regs->cmd;
+ sw_cq->in = s->regs->respr[qno];
+ if (sw_cq->out == sw_cq->in)
+ break;
+ }
+ }
+ }
+}
+
+static void inline socal_request (struct socal *s, u32 cmd)
+{
+ SOCAL_SETIMASK(s, s->imask & ~(cmd & SOCAL_CMD_REQ_QALL));
+ SOD(("imask %08x %08x\n", s->imask, s->regs->imask));
+
+ SOD(("Queues available %08x OUT %X\n", cmd, s->regs->reqpr[0]))
+ if (s->port[s->curr_port].fc.state != FC_STATE_OFFLINE) {
+ fcp_queue_empty ((fc_channel *)&(s->port[s->curr_port]));
+ if (((s->req[1].in + 1) & s->req[1].last) != (s->req[1].out))
+ fcp_queue_empty ((fc_channel *)&(s->port[1 - s->curr_port]));
+ } else
+ fcp_queue_empty ((fc_channel *)&(s->port[1 - s->curr_port]));
+ if (s->port[1 - s->curr_port].fc.state != FC_STATE_OFFLINE)
+ s->curr_port ^= 1;
+}
+
+static void inline socal_unsolicited (struct socal *s, int qno)
+{
+ socal_rsp *hwrsp, *hwrspc;
+ socal_cq *sw_cq;
+ int count;
+ int status;
+ int flags;
+ fc_channel *fc;
+
+ sw_cq = &s->rsp[qno];
+ if (sw_cq->pool == NULL) {
+ SOD(("address %08x xram %p\n", sw_cq->hw_cq->address, s->xram))
+ sw_cq->pool =
+ (socal_req *)(s->xram + (sw_cq->hw_cq->address & 0xfffe));
+ }
+
+ sw_cq->in = s->regs->respr[qno];
+ SOD (("socal_unsolicited, %d packets arrived, in %d\n", (sw_cq->in - sw_cq->out) & sw_cq->last, sw_cq->in))
+ while (sw_cq->in != sw_cq->out) {
+ /* ...real work per entry here... */
+ hwrsp = (socal_rsp *)sw_cq->pool + sw_cq->out;
+ SOD(("hwrsp %p out %d\n", hwrsp, sw_cq->out))
+
+#if defined(SOCALDEBUG) && 0
+ {
+ u32 *u = (u32 *)hwrsp;
+ SOD(("%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x\n", u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7]))
+ u += 8;
+ SOD(("%08x.%08x.%08x.%08x.%08x.%08x.%08x.%08x\n", u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7]))
+ }
+#endif
+
+ hwrspc = NULL;
+ flags = hwrsp->shdr.flags;
+ count = hwrsp->count;
+ fc = (fc_channel *)&s->port[flags & SOCAL_PORT_B];
+ SOD(("FC %08lx\n", (long)fc))
+
+ if (count != 1) {
+ /* Ugh, continuation entries */
+ u8 in;
+
+ if (count != 2) {
+ printk("%s: Too many continuations entries %d\n", fc->name, count);
+ goto update_out;
+ }
+
+ in = sw_cq->in;
+ if (in < sw_cq->out) in += sw_cq->last + 1;
+ if (in < sw_cq->out + 2) {
+ /* Ask the hardware about it if they haven't arrived yet */
+ s->regs->cmd = (sw_cq->out << 24) | (SOCAL_CMD_RSP_QALL & ~(SOCAL_CMD_RSP_Q0 << qno));
+ /* Read it, so that we're sure it has been updated */
+ s->regs->cmd;
+ sw_cq->in = s->regs->respr[qno];
+ in = sw_cq->in;
+ if (in < sw_cq->out) in += sw_cq->last + 1;
+ if (in < sw_cq->out + 2) /* Nothing came, let us wait */
+ return;
+ }
+ if (sw_cq->out == sw_cq->last)
+ hwrspc = (socal_rsp *)sw_cq->pool;
+ else
+ hwrspc = hwrsp + 1;
+ }
+
+ switch (flags & ~SOCAL_PORT_B) {
+ case SOCAL_STATUS:
+ status = hwrsp->status;
+ switch (status) {
+ case SOCAL_ONLINE:
+ SOD(("State change to ONLINE\n"));
+ fcp_state_change(fc, FC_STATE_ONLINE);
+ break;
+ case SOCAL_ONLINE_LOOP:
+ SOD(("State change to ONLINE_LOOP\n"));
+ fcp_state_change(fc, FC_STATE_ONLINE);
+ break;
+ case SOCAL_OFFLINE:
+ SOD(("State change to OFFLINE\n"));
+ fcp_state_change(fc, FC_STATE_OFFLINE);
+ break;
+ default:
+ printk ("%s: Unknown STATUS no %d\n", fc->name, status);
+ break;
+ }
+ break;
+ case (SOCAL_UNSOLICITED|SOCAL_FC_HDR):
+ {
+ int r_ctl = *((u8 *)&hwrsp->fchdr);
+ unsigned len;
+ char buf[64];
+
+ if ((r_ctl & 0xf0) == R_CTL_EXTENDED_SVC) {
+ len = hwrsp->shdr.bytecnt;
+ if (len < 4 || !hwrspc)
+ printk ("%s: Invalid R_CTL %02x continuation entries\n", fc->name, r_ctl);
+ else {
+ if (len > 60) len = 60;
+ socal_memcpy (buf, hwrspc, (len + 3) & ~3);
+ if (*(u32 *)buf == LS_DISPLAY) {
+ int i;
+
+ for (i = 4; i < len; i++)
+ if (buf[i] == '\n') buf[i] = ' ';
+ buf[len] = 0;
+ printk ("%s message: %s\n", fc->name, buf + 4);
+ } else {
+ printk ("%s: Unknown LS_CMD %08x\n", fc->name, *(u32 *)buf);
+ }
+ }
+ } else
+ printk ("%s: Unsolicited R_CTL %02x not handled\n", fc->name, r_ctl);
+ }
+ break;
+ default:
+ printk ("%s: Unexpected flags %08x\n", fc->name, flags);
+ break;
+ }
+update_out:
+ if (++sw_cq->out > sw_cq->last) {
+ sw_cq->seqno++;
+ sw_cq->out = 0;
+ }
+
+ if (hwrspc) {
+ if (++sw_cq->out > sw_cq->last) {
+ sw_cq->seqno++;
+ sw_cq->out = 0;
+ }
+ }
+
+ if (sw_cq->out == sw_cq->in) {
+ sw_cq->in = s->regs->respr[qno];
+ if (sw_cq->out == sw_cq->in) {
+ /* Tell the hardware about it */
+ s->regs->cmd = (sw_cq->out << 24) | (SOCAL_CMD_RSP_QALL & ~(SOCAL_CMD_RSP_Q0 << qno));
+ /* Read it, so that we're sure it has been updated */
+ s->regs->cmd;
+ sw_cq->in = s->regs->respr[qno];
+ }
+ }
+ }
+}
+
+static void socal_intr(int irq, void *dev_id, struct pt_regs *regs)
+{
+ u32 cmd;
+ unsigned long flags;
+ register struct socal *s = (struct socal *)dev_id;
+
+ spin_lock_irqsave(&io_request_lock, flags);
+ cmd = s->regs->cmd;
+ for (; (cmd = SOCAL_INTR (s, cmd)); cmd = s->regs->cmd) {
+#ifdef SOCALDEBUG
+ static int cnt = 0;
+ if (cnt++ < 50) printk("soc_intr %08x\n", cmd);
+#endif
+ if (cmd & SOCAL_CMD_RSP_Q2) socal_unsolicited (s, SOCAL_UNSOLICITED_RSP_Q);
+ if (cmd & SOCAL_CMD_RSP_Q1) socal_unsolicited (s, SOCAL_SOLICITED_BAD_RSP_Q);
+ if (cmd & SOCAL_CMD_RSP_Q0) socal_solicited (s, SOCAL_SOLICITED_RSP_Q);
+ if (cmd & SOCAL_CMD_REQ_QALL) socal_request (s, cmd);
+ }
+ spin_unlock_irqrestore(&io_request_lock, flags);
+}
+
+#define TOKEN(proto, port, token) (((proto)<<12)|(token)|(port))
+
+static int socal_hw_enque (fc_channel *fc, fcp_cmnd *fcmd)
+{
+ socal_port *port = (socal_port *)fc;
+ struct socal *s = port->s;
+ int qno;
+ socal_cq *sw_cq;
+ int cq_next_in;
+ socal_req *request;
+ fc_hdr *fch;
+ int i;
+
+ if (fcmd->proto == TYPE_SCSI_FCP)
+ qno = 1;
+ else
+ qno = 0;
+ SOD(("Putting a FCP packet type %d into hw queue %d\n", fcmd->proto, qno))
+ if (s->imask & (SOCAL_IMASK_REQ_Q0 << qno)) {
+ SOD(("EIO %08x\n", s->imask))
+ return -EIO;
+ }
+ sw_cq = s->req + qno;
+ cq_next_in = (sw_cq->in + 1) & sw_cq->last;
+
+ if (cq_next_in == sw_cq->out
+ && cq_next_in == (sw_cq->out = s->regs->reqpr[qno])) {
+ SOD(("%d IN %d OUT %d LAST %d\n", qno, sw_cq->in, sw_cq->out, sw_cq->last))
+ SOCAL_SETIMASK(s, s->imask | (SOCAL_IMASK_REQ_Q0 << qno));
+ SOD(("imask %08x %08x\n", s->imask, s->regs->imask));
+ /* If queue is full, just say NO */
+ return -EBUSY;
+ }
+
+ request = sw_cq->pool + sw_cq->in;
+ fch = &request->fchdr;
+
+ switch (fcmd->proto) {
+ case TYPE_SCSI_FCP:
+ request->shdr.token = TOKEN(TYPE_SCSI_FCP, port->mask, fcmd->token);
+ request->data[0].base = fc->dma_scsi_cmd + fcmd->token * sizeof(fcp_cmd);
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 12'
echo 'File patch-2.2.4 is continued in part 13'
echo 13 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 09 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 09; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
-
+ offset = prom_getint(node, "fcode-rom-offset");
+ prom_getstring(node, "name", prom_name, sizeof(prom_name));
+ if (offset == -1 ||
+ !strcmp(prom_name, "SUNW,qfe") ||
+ !strcmp(prom_name, "qfe")) {
+ /*
+ * No, use low slot number bits of child as IRQ line.
+ */
+ *interrupt = ((*interrupt - 1 + PCI_SLOT(pdev->devfn)) & 3) + 1;
+ }
X preg = &ppreg;
X }
X
@@ -1618,10 +1714,10 @@
X prom_halt();
X }
X
-__initfunc(static void fixup_irq(struct pci_dev *pdev,
- struct linux_pbm_info *pbm,
- struct linux_prom_pci_registers *preg,
- int node))
+static void __init fixup_irq(struct pci_dev *pdev,
+ struct linux_pbm_info *pbm,
+ struct linux_prom_pci_registers *preg,
+ int node)
X {
X unsigned int prom_irq, portid = pbm->parent->upa_portid;
X unsigned char pci_irq_line = pdev->irq;
@@ -1721,11 +1817,11 @@
X #endif
X }
X
-__initfunc(static void fixup_doit(struct pci_dev *pdev,
- struct linux_pbm_info *pbm,
- struct linux_prom_pci_registers *pregs,
- int nregs,
- int node))
+static void __init fixup_doit(struct pci_dev *pdev,
+ struct linux_pbm_info *pbm,
+ struct linux_prom_pci_registers *pregs,
+ int nregs,
+ int node)
X {
X struct linux_prom_pci_registers assigned[PROMREG_MAX];
X int numaa, err;
@@ -1745,9 +1841,9 @@
X fixup_irq(pdev, pbm, &pregs[0], node);
X }
X
-__initfunc(static void fixup_pci_dev(struct pci_dev *pdev,
- struct pci_bus *pbus,
- struct linux_pbm_info *pbm))
+static void __init fixup_pci_dev(struct pci_dev *pdev,
+ struct pci_bus *pbus,
+ struct linux_pbm_info *pbm)
X {
X struct linux_prom_pci_registers pregs[PROMREG_MAX];
X struct pcidev_cookie *pcp = pdev->sysdata;
@@ -1762,8 +1858,12 @@
X cmd |= PCI_COMMAND_MASTER;
X pci_write_config_word(pdev, PCI_COMMAND, cmd);
X
- /* Now, set cache line size to 64-bytes. */
- pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 64);
+ /* Now, set cache line size to 64-bytes.
+ * NOTE: Cache line size is in 32-bit word units.
+ */
+ pci_write_config_byte(pdev,
+ PCI_CACHE_LINE_SIZE,
+ (64 / sizeof(u32)));
X }
X
X /* Ignore if this is one of the PBM's, EBUS, or a
@@ -1808,7 +1908,7 @@
X }
X }
X
-__initfunc(static void fixup_pci_bus(struct pci_bus *pbus, struct linux_pbm_info *pbm))
+static void __init fixup_pci_bus(struct pci_bus *pbus, struct linux_pbm_info *pbm)
X {
X struct pci_dev *pdev;
X
@@ -1819,7 +1919,7 @@
X fixup_pci_bus(pbus, pbm);
X }
X
-__initfunc(static void fixup_addr_irq(struct linux_pbm_info *pbm))
+static void __init fixup_addr_irq(struct linux_pbm_info *pbm)
X {
X struct pci_bus *pbus = &pbm->pci_bus;
X
@@ -1832,7 +1932,7 @@
X /* Walk all PCI devices probes, fixing up base registers and IRQ registers.
X * We use OBP for most of this work.
X */
-__initfunc(static void psycho_final_fixup(struct linux_psycho *psycho))
+static void __init psycho_final_fixup(struct linux_psycho *psycho)
X {
X /* Second, fixup base address registers and IRQ lines... */
X if (psycho->pbm_A.parent)
@@ -1841,7 +1941,33 @@
X fixup_addr_irq(&psycho->pbm_B);
X }
X
-__initfunc(void pcibios_fixup(void))
+/* Reorder the pci_dev chain, so that onboard devices come first
+ and then come the pluggable cards. */
+void __init psycho_reorder_devs(void)
+{
+ struct pci_dev **pci_onboard = &pci_devices;
+ struct pci_dev **pci_tail = &pci_devices;
+ struct pci_dev *pdev = pci_devices, *pci_other = NULL;
+
+ while (pdev) {
+ if (pdev->irq && (__irq_ino(pdev->irq) & 0x20)) {
+ if (pci_other) {
+ *pci_onboard = pdev;
+ pci_onboard = &pdev->next;
+ pdev = pdev->next;
+ *pci_onboard = pci_other;
+ *pci_tail = pdev;
+ continue;
+ } else
+ pci_onboard = &pdev->next;
+ } else if (!pci_other)
+ pci_other = pdev;
+ pci_tail = &pdev->next;
+ pdev = pdev->next;
+ }
+}
+
+void __init pcibios_fixup(void)
X {
X struct linux_psycho *psycho;
X
@@ -1861,9 +1987,9 @@
X
X for (psycho = psycho_root; psycho; psycho = psycho->next) {
X /* Probe bus on builtin PCI. */
- if (apb_present(psycho))
+ if (apb_present(psycho)) {
X sabre_probe(psycho);
- else {
+ } else {
X /* Probe busses under PBM B. */
X pbm_probe(&psycho->pbm_B);
X
@@ -1896,6 +2022,9 @@
X psycho_final_fixup(psycho);
X }
X
+ if (psycho_reorder & PSYCHO_REORDER_ONBOARDFIRST)
+ psycho_reorder_devs();
+
X return ebus_init();
X }
X
@@ -2418,12 +2547,20 @@
X return err;
X }
X
-__initfunc(void pcibios_fixup_bus(struct pci_bus *bus))
+void __init pcibios_fixup_bus(struct pci_bus *bus)
X {
X }
X
-__initfunc(char *pcibios_setup(char *str))
+char * __init pcibios_setup(char *str)
X {
+ if (!strcmp(str, "onboardfirst")) {
+ psycho_reorder |= PSYCHO_REORDER_ONBOARDFIRST;
+ return NULL;
+ }
+ if (!strcmp(str, "noreorder")) {
+ psycho_reorder = 0;
+ return NULL;
+ }
X return str;
X }
X
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/ptrace.c linux/arch/sparc64/kernel/ptrace.c
--- v2.2.3/linux/arch/sparc64/kernel/ptrace.c Sun Nov 8 14:02:46 1998
+++ linux/arch/sparc64/kernel/ptrace.c Mon Mar 15 16:10:43 1999
@@ -591,6 +591,8 @@
X
X if (((current->personality & PER_BSD) && (request == PTRACE_SUNATTACH))
X || (!(current->personality & PER_BSD) && (request == PTRACE_ATTACH))) {
+ unsigned long flags;
+
X if(child == current) {
X /* Try this under SunOS/Solaris, bwa haha
X * You'll never be able to kill the process. ;-)
@@ -602,8 +604,9 @@
X (current->uid != child->euid) ||
X (current->uid != child->uid) ||
X (current->gid != child->egid) ||
- (current->gid != child->gid)) &&
- !capable(CAP_SYS_PTRACE)) {
+ (current->gid != child->sgid) ||
+ (cap_issubset(child->cap_permitted, current->cap_permitted)) ||
+ (current->gid != child->gid)) && !capable(CAP_SYS_PTRACE)) {
X pt_error_return(regs, EPERM);
X goto out;
X }
@@ -613,15 +616,13 @@
X goto out;
X }
X child->flags |= PF_PTRACED;
+ write_lock_irqsave(&tasklist_lock, flags);
X if(child->p_pptr != current) {
- unsigned long flags;
-
- write_lock_irqsave(&tasklist_lock, flags);
X REMOVE_LINKS(child);
X child->p_pptr = current;
X SET_LINKS(child);
- write_unlock_irqrestore(&tasklist_lock, flags);
X }
+ write_unlock_irqrestore(&tasklist_lock, flags);
X send_sig(SIGSTOP, child, 1);
X pt_succ_return(regs, 0);
X goto out;
@@ -670,14 +671,18 @@
X pt_error_return(regs, EINVAL);
X goto out;
X }
+ down(&child->mm->mmap_sem);
X res = read_int(child, addr, &x);
+ up(&child->mm->mmap_sem);
X tmp = x;
X } else {
X if(addr & (sizeof(unsigned long) - 1)) {
X pt_error_return(regs, EINVAL);
X goto out;
X }
+ down(&child->mm->mmap_sem);
X res = read_long(child, addr, &tmp);
+ up(&child->mm->mmap_sem);
X }
X if (res < 0) {
X pt_error_return(regs, -res);
@@ -709,13 +714,17 @@
X pt_error_return(regs, EINVAL);
X goto out;
X }
+ down(&child->mm->mmap_sem);
X res = write_int(child, addr, data);
+ up(&child->mm->mmap_sem);
X } else {
X if(addr & (sizeof(unsigned long) - 1)) {
X pt_error_return(regs, EINVAL);
X goto out;
X }
+ down(&child->mm->mmap_sem);
X res = write_long(child, addr, data);
+ up(&child->mm->mmap_sem);
X }
X if(res < 0)
X pt_error_return(regs, -res);
@@ -944,12 +953,15 @@
X unsigned long page;
X
X while(len) {
+ down(&child->mm->mmap_sem);
X vma = find_extend_vma(child, src);
X if (!vma) {
+ up(&child->mm->mmap_sem);
X pt_error_return(regs, EIO);
X goto flush_and_out;
X }
X pgtable = get_page (child, vma, src, 0);
+ up(&child->mm->mmap_sem);
X if (src & ~PAGE_MASK) {
X curlen = PAGE_SIZE - (src & ~PAGE_MASK);
X if (curlen > len) curlen = len;
@@ -988,12 +1000,15 @@
X unsigned long page;
X
X while(len) {
+ down(&child->mm->mmap_sem);
X vma = find_extend_vma(child, dest);
X if (!vma) {
+ up(&child->mm->mmap_sem);
X pt_error_return(regs, EIO);
X goto flush_and_out;
X }
X pgtable = get_page (child, vma, dest, 1);
+ up(&child->mm->mmap_sem);
X if (dest & ~PAGE_MASK) {
X curlen = PAGE_SIZE - (dest & ~PAGE_MASK);
X if (curlen > len) curlen = len;
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/setup.c linux/arch/sparc64/kernel/setup.c
--- v2.2.3/linux/arch/sparc64/kernel/setup.c Sun Nov 8 14:02:47 1998
+++ linux/arch/sparc64/kernel/setup.c Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: setup.c,v 1.37 1998/10/14 15:49:09 ecd Exp $
+/* $Id: setup.c,v 1.41 1999/01/04 20:12:25 davem Exp $
X * linux/arch/sparc64/kernel/setup.c
X *
X * Copyright (C) 1995,1996 David S. Miller (da...@caip.rutgers.edu)
@@ -277,6 +277,22 @@
X #endif
X static unsigned long memory_size = 0;
X
+#ifdef PROM_DEBUG_CONSOLE
+static struct console prom_debug_console = {
+ "debug",
+ prom_console_write,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ CON_PRINTBUFFER,
+ -1,
+ 0,
+ NULL
+};
+#endif
+
X /* XXX Implement this at some point... */
X void kernel_enter_debugger(void)
X {
@@ -430,6 +446,10 @@
X *cmdline_p = prom_getbootargs();
X strcpy(saved_command_line, *cmdline_p);
X
+#ifdef PROM_DEBUG_CONSOLE
+ register_console(&prom_debug_console);
+#endif
+
X printk("ARCH: SUN4U\n");
X
X #ifdef CONFIG_DUMMY_CONSOLE
@@ -531,7 +551,7 @@
X ic_servaddr = sv;
X if (gw)
X ic_gateway = gw;
- ic_bootp_flag = ic_rarp_flag = 0;
+ ic_proto_enabled = 0;
X }
X }
X #endif
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/smp.c linux/arch/sparc64/kernel/smp.c
--- v2.2.3/linux/arch/sparc64/kernel/smp.c Sun Nov 8 14:02:47 1998
+++ linux/arch/sparc64/kernel/smp.c Mon Mar 15 16:10:43 1999
@@ -5,6 +5,8 @@
X
X #include <linux/kernel.h>
X #include <linux/sched.h>
+#include <linux/mm.h>
+#include <linux/pagemap.h>
X #include <linux/tasks.h>
X #include <linux/smp.h>
X #include <linux/smp_lock.h>
@@ -34,24 +36,23 @@
X extern void calibrate_delay(void);
X extern unsigned prom_cpu_nodes[];
X
-volatile int smp_processors_ready = 0;
-unsigned long cpu_present_map = 0;
-int smp_num_cpus = 1;
-int smp_threads_ready = 0;
+struct cpuinfo_sparc cpu_data[NR_CPUS] __attribute__ ((aligned (64)));
X
-struct cpuinfo_sparc cpu_data[NR_CPUS] __attribute__ ((aligned (64)));
+volatile int cpu_number_map[NR_CPUS] __attribute__ ((aligned (64)));
+volatile int __cpu_logical_map[NR_CPUS] __attribute__ ((aligned (64)));
X
-/* Please don't make this initdata!!! --DaveM */
+/* Please don't make this stuff initdata!!! --DaveM */
X static unsigned char boot_cpu_id = 0;
-
X static int smp_activated = 0;
X
-volatile int cpu_number_map[NR_CPUS];
-volatile int __cpu_logical_map[NR_CPUS];
-
X /* Kernel spinlock */
X spinlock_t kernel_flag = SPIN_LOCK_UNLOCKED;
X
+volatile int smp_processors_ready = 0;
+unsigned long cpu_present_map = 0;
+int smp_num_cpus = 1;
+int smp_threads_ready = 0;
+
X __initfunc(void smp_setup(char *str, int *ints))
X {
X /* XXX implement me XXX */
@@ -84,6 +85,8 @@
X
X __initfunc(void smp_store_cpu_info(int id))
X {
+ int i;
+
X cpu_data[id].irq_count = 0;
X cpu_data[id].bh_count = 0;
X /* multiplier and counter set by
@@ -94,16 +97,18 @@
X cpu_data[id].pte_cache = NULL;
X cpu_data[id].pgdcache_size = 0;
X cpu_data[id].pgd_cache = NULL;
-}
+ cpu_data[id].idle_volume = 0;
X
-extern void distribute_irqs(void);
+ for(i = 0; i < 16; i++)
+ cpu_data[id].irq_worklists[i] = 0;
+}
X
X __initfunc(void smp_commence(void))
X {
- distribute_irqs();
X }
X
X static void smp_setup_percpu_timer(void);
+static void smp_tune_scheduling(void);
X
X static volatile unsigned long callin_flag = 0;
X
@@ -173,10 +178,16 @@
X panic("SMP bolixed\n");
X }
X
-extern struct prom_cpuinfo linux_cpus[NR_CPUS];
+extern struct prom_cpuinfo linux_cpus[64];
X
X extern unsigned long smp_trampoline;
X
+/* The OBP cpu startup callback truncates the 3rd arg cookie to
+ * 32-bits (I think) so to be safe we have it read the pointer
+ * contained here so we work on >4GB machines. -DaveM
+ */
+static struct task_struct *cpu_new_task = NULL;
+
X __initfunc(void smp_boot_cpus(void))
X {
X int cpucount = 0, i;
@@ -184,6 +195,7 @@
X printk("Entering UltraSMPenguin Mode...\n");
X __sti();
X smp_store_cpu_info(boot_cpu_id);
+ smp_tune_scheduling();
X
X if(linux_num_cpus == 1)
X return;
@@ -194,12 +206,14 @@
X
X if(cpu_present_map & (1UL << i)) {
X unsigned long entry = (unsigned long)(&smp_trampoline);
+ unsigned long cookie = (unsigned long)(&cpu_new_task);
X struct task_struct *p;
X int timeout;
X int no;
X extern unsigned long phys_base;
X
X entry += phys_base - KERNBASE;
+ cookie += phys_base - KERNBASE;
X kernel_thread(start_secondary, NULL, CLONE_PID);
X p = task[++cpucount];
X p->processor = i;
@@ -207,8 +221,9 @@
X for (no = 0; no < linux_num_cpus; no++)
X if (linux_cpus[no].mid == i)
X break;
+ cpu_new_task = p;
X prom_startcpu(linux_cpus[no].prom_node,
- entry, ((unsigned long)p));
+ entry, cookie);
X for(timeout = 0; timeout < 5000000; timeout++) {
X if(callin_flag)
X break;
@@ -216,8 +231,8 @@
X }
X if(callin_flag) {
X cpu_number_map[i] = cpucount;
- prom_cpu_nodes[i] = linux_cpus[no].prom_node;
X __cpu_logical_map[cpucount] = i;
+ prom_cpu_nodes[i] = linux_cpus[no].prom_node;
X } else {
X cpucount--;
X printk("Processor %d is stuck.\n", i);
@@ -228,6 +243,7 @@
X cpu_number_map[i] = -1;
X }
X }
+ cpu_new_task = NULL;
X if(cpucount == 0) {
X printk("Error: only one processor found.\n");
X cpu_present_map = (1UL << smp_processor_id());
@@ -249,17 +265,6 @@
X membar("#StoreStore | #StoreLoad");
X }
X
-/* We don't even need to do anything, the only generic message pass done
- * anymore is to stop all cpus during a panic(). When the user drops to
- * the PROM prompt, the firmware will send the other cpu's it's MONDO
- * vector anyways, so doing anything special here is pointless.
- *
- * This whole thing should go away anyways...
- */
-void smp_message_pass(int target, int msg, unsigned long data, int wait)
-{
-}
-
X /* #define XCALL_DEBUG */
X
X static inline void xcall_deliver(u64 data0, u64 data1, u64 data2, u64 pstate, unsigned long cpu)
@@ -642,6 +647,100 @@
X __cpu_logical_map[0] = boot_cpu_id;
X current->processor = boot_cpu_id;
X prof_counter(boot_cpu_id) = prof_multiplier(boot_cpu_id) = 1;
+}
+
+static inline unsigned long find_flush_base(unsigned long size)
+{
+ struct page *p = mem_map;
+ unsigned long found, base;
+
+ size = PAGE_ALIGN(size);
+ found = size;
+ base = page_address(p);
+ while(found != 0) {
+ /* Failure. */
+ if(p >= (mem_map + max_mapnr))
+ return 0UL;
+ if(PageSkip(p)) {
+ p = p->next_hash;
+ base = page_address(p);
+ found = size;
+ } else {
+ found -= PAGE_SIZE;
+ p++;
+ }
+ }
+ return base;
+}
+
+cycles_t cacheflush_time;
+
+__initfunc(static void smp_tune_scheduling (void))
+{
+ unsigned long flush_base, flags, *p;
+ unsigned int ecache_size;
+ cycles_t tick1, tick2, raw;
+
+ /* Approximate heuristic for SMP scheduling. It is an
+ * estimation of the time it takes to flush the L2 cache
+ * on the local processor.
+ *
+ * The ia32 chooses to use the L1 cache flush time instead,
+ * and I consider this complete nonsense. The Ultra can service
+ * a miss to the L1 with a hit to the L2 in 7 or 8 cycles, and
+ * L2 misses are what create extra bus traffic (ie. the "cost"
+ * of moving a process from one cpu to another).
+ */
+ printk("SMP: Calibrating ecache flush... ");
+ ecache_size = prom_getintdefault(linux_cpus[0].prom_node,
+ "ecache-size", (512 *1024));
+ flush_base = find_flush_base(ecache_size << 1);
+
+ if(flush_base != 0UL) {
+ __save_and_cli(flags);
+
+ /* Scan twice the size once just to get the TLB entries
+ * loaded and make sure the second scan measures pure misses.
+ */
+ for(p = (unsigned long *)flush_base;
+ ((unsigned long)p) < (flush_base + (ecache_size<<1));
+ p += (64 / sizeof(unsigned long)))
+ *((volatile unsigned long *)p);
+
+ /* Now the real measurement. */
+ __asm__ __volatile__("
+ b,pt %%xcc, 1f
+ rd %%tick, %0
+
+ .align 64
+1: ldx [%2 + 0x000], %%g1
+ ldx [%2 + 0x040], %%g2
+ ldx [%2 + 0x080], %%g3
+ ldx [%2 + 0x0c0], %%g5
+ add %2, 0x100, %2
+ cmp %2, %4
+ bne,pt %%xcc, 1b
+ nop
+
+ rd %%tick, %1"
+ : "=&r" (tick1), "=&r" (tick2), "=&r" (flush_base)
+ : "2" (flush_base), "r" (flush_base + ecache_size)
+ : "g1", "g2", "g3", "g5");
+
+ __restore_flags(flags);
+
+ raw = (tick2 - tick1);
+
+ /* Dampen it a little, considering two processes
+ * sharing the cache and fitting.
+ */
+ cacheflush_time = (raw - (raw >> 2));
+ } else
+ cacheflush_time = ((ecache_size << 2) +
+ (ecache_size << 1));
+
+ printk("Using heuristic of %d cycles.\n",
+ (int) cacheflush_time);
X }
X
X int __init setup_profiling_timer(unsigned int multiplier)
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/sparc64_ksyms.c linux/arch/sparc64/kernel/sparc64_ksyms.c
--- v2.2.3/linux/arch/sparc64/kernel/sparc64_ksyms.c Thu Nov 19 09:56:27 1998
+++ linux/arch/sparc64/kernel/sparc64_ksyms.c Mon Mar 15 16:10:43 1999
@@ -1,8 +1,9 @@
-/* $Id: sparc64_ksyms.c,v 1.49 1998/10/28 08:11:28 jj Exp $
+/* $Id: sparc64_ksyms.c,v 1.57 1999/03/14 20:51:28 davem Exp $
X * arch/sparc64/kernel/sparc64_ksyms.c: Sparc64 specific ksyms support.
X *
X * Copyright (C) 1996 David S. Miller (da...@caip.rutgers.edu)
X * Copyright (C) 1996 Eddie C. Dost (e...@skynet.be)
+ * Copyright (C) 1999 Jakub Jelinek (j...@ultra.linux.cz)
X */
X
X /* Tell string.h we don't want memcpy etc. as cpp defines */
@@ -52,8 +53,9 @@
X short revents;
X };
X
-extern unsigned prom_cpu_nodes[NR_CPUS];
+extern unsigned prom_cpu_nodes[64];
X extern void die_if_kernel(char *str, struct pt_regs *regs);
+extern pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
X extern unsigned long sunos_mmap(unsigned long, unsigned long, unsigned long,
X unsigned long, unsigned long, unsigned long);
X void _sigpause_common (unsigned int set, struct pt_regs *);
@@ -102,6 +104,8 @@
X #endif
X #endif
X
+extern unsigned long phys_base;
+
X /* One thing to note is that the way the symbols of the mul/div
X * support routines are named is a mess, they all start with
X * a '.' which makes it a bitch to export, here is the trick:
@@ -155,6 +159,8 @@
X EXPORT_SYMBOL(local_irq_count);
X EXPORT_SYMBOL(local_bh_count);
X #endif
+
+EXPORT_SYMBOL(ivector_table);
X EXPORT_SYMBOL(enable_irq);
X EXPORT_SYMBOL(disable_irq);
X
@@ -171,6 +177,7 @@
X EXPORT_SYMBOL(mmu_release_scsi_one);
X EXPORT_SYMBOL(mmu_release_scsi_sgl);
X #if CONFIG_SBUS
+EXPORT_SYMBOL(mmu_set_sbus64);
X EXPORT_SYMBOL(SBus_chain);
X EXPORT_SYMBOL(dma_chain);
X #endif
@@ -199,6 +206,9 @@
X /* math-emu wants this */
X EXPORT_SYMBOL(die_if_kernel);
X
+/* Kernel thread creation. */
+EXPORT_SYMBOL(kernel_thread);
+
X /* prom symbols */
X EXPORT_SYMBOL(idprom);
X EXPORT_SYMBOL(prom_root_node);
@@ -214,6 +224,7 @@
X EXPORT_SYMBOL(saved_command_line);
X EXPORT_SYMBOL(prom_getname);
X EXPORT_SYMBOL(prom_feval);
+EXPORT_SYMBOL(prom_getbool);
X EXPORT_SYMBOL(prom_getstring);
X EXPORT_SYMBOL(prom_apply_sbus_ranges);
X EXPORT_SYMBOL(prom_getint);
@@ -257,7 +268,6 @@
X EXPORT_SYMBOL(prom_cpu_nodes);
X EXPORT_SYMBOL(sys_ioctl);
X EXPORT_SYMBOL(sys32_ioctl);
-EXPORT_SYMBOL(get_unmapped_area);
X EXPORT_SYMBOL(move_addr_to_kernel);
X EXPORT_SYMBOL(move_addr_to_user);
X #endif
@@ -280,6 +290,10 @@
X EXPORT_SYMBOL(__copy_from_user);
X EXPORT_SYMBOL(__strncpy_from_user);
X EXPORT_SYMBOL(__bzero_noasi);
+
+/* Various address conversion macros use this. */
+EXPORT_SYMBOL(phys_base);
+EXPORT_SYMBOL(sparc64_valid_addr_bitmap);
X
X /* No version information on this, heavily used in inline asm,
X * and will always be 'void __ret_efault(void)'.
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/starfire.c linux/arch/sparc64/kernel/starfire.c
--- v2.2.3/linux/arch/sparc64/kernel/starfire.c Wed Dec 31 16:00:00 1969
+++ linux/arch/sparc64/kernel/starfire.c Wed Mar 10 16:53:37 1999
@@ -0,0 +1,121 @@
+/* $Id: starfire.c,v 1.2 1998/12/09 18:53:11 davem Exp $
+ * starfire.c: Starfire/E10000 support.
+ *
+ * Copyright (C) 1998 David S. Miller (da...@dm.cobaltmicro.com)
+ */
+
+#include <linux/kernel.h>
+#include <linux/malloc.h>
+
+#include <asm/page.h>
+#include <asm/oplib.h>
+#include <asm/smp.h>
+
+/* A few places around the kernel check this to see if
+ * they need to call us to do things in a Starfire specific
+ * way.
+ */
+int this_is_starfire = 0;
+
+void starfire_check(void)
+{
+ int ssnode = prom_finddevice("/ssp-serial");
+
+ if(ssnode != 0 && ssnode != -1) {
+ int i;
+
+ this_is_starfire = 1;
+
+ /* Now must fixup cpu MIDs. OBP gave us a logical
+ * linear cpuid number, not the real upaid.
+ */
+ for(i = 0; i < linux_num_cpus; i++) {
+ unsigned int mid = linux_cpus[i].mid;
+
+ mid = (((mid & 0x3c) << 1) |
+ ((mid & 0x40) >> 4) |
+ (mid & 0x3));
+
+ linux_cpus[i].mid = mid;
+ }
+ }
+}
+
+int starfire_hard_smp_processor_id(void)
+{
+ return *((unsigned int *) __va(0x1fff40000d0));
+}
+
+/* Each Starfire board has 32 registers which perform translation
+ * and delivery of traditional interrupt packets into the extended
+ * Starfire hardware format. Essentially UPAID's now have 2 more
+ * bits than in all previous Sun5 systems.
+ */
+struct starfire_irqinfo {
+ unsigned int *imap_slots[32];
+ unsigned int *tregs[32];
+ struct starfire_irqinfo *next;
+ int upaid, hwmid;
+};
+
+static struct starfire_irqinfo *sflist = NULL;
+
+/* Beam me up Scott(McNeil)y... */
+void *starfire_hookup(int upaid)
+{
+ struct starfire_irqinfo *p;
+ unsigned long treg_base, hwmid, i;
+
+ p = kmalloc(sizeof(*p), GFP_KERNEL);
+ if(!p) {
+ prom_printf("starfire_hookup: No memory, this is insane.\n");
+ prom_halt();
+ }
+ treg_base = 0x100fc000000UL;
+ hwmid = ((upaid & 0x3c) << 1) |
+ ((upaid & 0x40) >> 4) |
+ (upaid & 0x3);
+ p->hwmid = hwmid;
+ treg_base += (hwmid << 33UL);
+ treg_base += 0x200UL;
+ for(i = 0; i < 32; i++) {
+ p->imap_slots[i] = NULL;
+ p->tregs[i] = __va(treg_base + (i * 0x10));
+ }
+ p->upaid = upaid;
+ p->next = sflist;
+ sflist = p;
+
+ return (void *) p;
+}
+
+unsigned int starfire_translate(unsigned int *imap,
+ unsigned int upaid)
+{
+ struct starfire_irqinfo *p;
+ unsigned int bus_hwmid;
+ unsigned int i;
+
+ bus_hwmid = (((unsigned long)imap) >> 33) & 0x7f;
+ for(p = sflist; p != NULL; p = p->next)
+ if(p->hwmid == bus_hwmid)
+ break;
+ if(p == NULL) {
+ prom_printf("XFIRE: Cannot find irqinfo for imap %016lx\n",
+ ((unsigned long)imap));
+ prom_halt();
+ }
+ for(i = 0; i < 32; i++) {
+ if(p->imap_slots[i] == imap ||
+ p->imap_slots[i] == NULL)
+ break;
+ }
+ if(i == 32) {
+ printk("starfire_translate: Are you kidding me?\n");
+ panic("Lucy in the sky....");
+ }
+ p->imap_slots[i] = imap;
+ *(p->tregs[i]) = upaid;
+
+ return i;
+}
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/sys_sparc.c linux/arch/sparc64/kernel/sys_sparc.c
--- v2.2.3/linux/arch/sparc64/kernel/sys_sparc.c Sun Nov 8 14:02:47 1998
+++ linux/arch/sparc64/kernel/sys_sparc.c Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: sys_sparc.c,v 1.25 1998/10/21 03:21:15 davem Exp $
+/* $Id: sys_sparc.c,v 1.26 1999/01/07 19:07:01 jj Exp $
X * linux/arch/sparc64/kernel/sys_sparc.c
X *
X * This file contains various random system calls that
@@ -27,6 +27,8 @@
X #include <asm/utrap.h>
X #include <asm/perfctr.h>
X
+/* #define DEBUG_UNIMP_SYSCALL */
+
X /* XXX Make this per-binary type, this way we can detect the type of
X * XXX a binary. Every Sparc executable calls this very early on.
X */
@@ -200,11 +202,14 @@
X c_sys_nis_syscall (struct pt_regs *regs)
X {
X static int count=0;
+
+ /* Don't make the system unusable, if someone goes stuck */
+ if (count++ > 5) return -ENOSYS;
X lock_kernel();
- if (++count <= 20) { /* Don't make the system unusable, if someone goes stuck */
- printk ("Unimplemented SPARC system call %ld\n",regs->u_regs[1]);
- show_regs (regs);
- }
+ printk ("Unimplemented SPARC system call %ld\n",regs->u_regs[1]);
+#ifdef DEBUG_UNIMP_SYSCALL
+ show_regs (regs);
+#endif
X unlock_kernel();
X return -ENOSYS;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/sys_sparc32.c linux/arch/sparc64/kernel/sys_sparc32.c
--- v2.2.3/linux/arch/sparc64/kernel/sys_sparc32.c Thu Nov 19 09:56:27 1998
+++ linux/arch/sparc64/kernel/sys_sparc32.c Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: sys_sparc32.c,v 1.100 1998/11/08 11:14:00 davem Exp $
+/* $Id: sys_sparc32.c,v 1.107 1999/03/05 13:21:02 davem Exp $
X * sys_sparc32.c: Conversion between 32bit and 64bit native syscalls.
X *
X * Copyright (C) 1997,1998 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
@@ -43,6 +43,7 @@
X #include <linux/poll.h>
X #include <linux/personality.h>
X #include <linux/stat.h>
+#include <linux/timex.h>
X
X #include <asm/types.h>
X #include <asm/ipc.h>
@@ -50,6 +51,8 @@
X #include <asm/fpumacro.h>
X #include <asm/semaphore.h>
X
+#include <net/scm.h>
+
X /* Use this to get at 32-bit user passed pointers. */
X /* Things to consider: the low-level assembly stub does
X srl x, 0, x for first four arguments, so if you have
@@ -74,15 +77,6 @@
X __ret; \
X })
X
-static inline char * get_page(void)
-{
- char * res;
- res = (char *)__get_free_page(GFP_KERNEL);
- return res;
-}
-
-#define putname32 putname
-
X /* In order to reduce some races, while at the same time doing additional
X * checking and hopefully speeding things up, we copy filenames to the
X * kernel data space before using them..
@@ -109,13 +103,13 @@
X char *tmp, *result;
X
X result = ERR_PTR(-ENOMEM);
- tmp = get_page();
+ tmp = (char *)__get_free_page(GFP_KERNEL);
X if (tmp) {
X int retval = do_getname32(filename, tmp);
X
X result = tmp;
X if (retval < 0) {
- putname32(tmp);
+ putname(tmp);
X result = ERR_PTR(retval);
X }
X }
@@ -243,7 +237,10 @@
X err = -EFAULT;
X if (get_user (pad, (u32 *)uptr))
X goto out;
- fourth.__pad = (void *)A(pad);
+ if(third == SETVAL)
+ fourth.val = (int)pad;
+ else
+ fourth.__pad = (void *)A(pad);
X if (IPCOP_MASK (third) &
X (IPCOP_MASK (IPC_INFO) | IPCOP_MASK (SEM_INFO) | IPCOP_MASK (GETVAL) |
X IPCOP_MASK (GETPID) | IPCOP_MASK (GETNCNT) | IPCOP_MASK (GETZCNT) |
@@ -652,7 +649,7 @@
X set_fs (KERNEL_DS);
X err = sys_quotactl(cmd, (const char *)spec, id, (caddr_t)&d);
X set_fs (old_fs);
- putname32 (spec);
+ putname (spec);
X if (cmds == Q_GETQUOTA) {
X __kernel_time_t b = d.dqb_btime, i = d.dqb_itime;
X ((struct dqblk32 *)&d)->dqb_itime = i;
@@ -696,7 +693,7 @@
X set_fs (KERNEL_DS);
X ret = sys_statfs((const char *)pth, &s);
X set_fs (old_fs);
- putname32 (pth);
+ putname (pth);
X if (put_statfs(buf, &s))
X return -EFAULT;
X }
@@ -744,7 +741,7 @@
X set_fs (KERNEL_DS);
X ret = sys_utime(filenam, &t);
X set_fs (old_fs);
- putname32 (filenam);
+ putname (filenam);
X }
X return ret;
X }
@@ -796,8 +793,9 @@
X }
X
X inode = file->f_dentry->d_inode;
- retval = locks_verify_area((type == VERIFY_READ) ?
- FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE,
+ /* VERIFY_WRITE actually means a read, as we write to user space */
+ retval = locks_verify_area((type == VERIFY_WRITE
+ ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE),
X inode, file, file->f_pos, tot_len);
X if (retval) {
X if (iov != iovstack)
@@ -1106,13 +1104,17 @@
X __put_user(*fdset, ufdset);
X }
X
+#define MAX_SELECT_SECONDS \
+ ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
+
X asmlinkage int sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, u32 tvp_x)
X {
- fd_set_buffer *fds;
+ fd_set_bits fds;
X struct timeval32 *tvp = (struct timeval32 *)AA(tvp_x);
+ char *bits;
X unsigned long nn;
X long timeout;
- int ret;
+ int ret, size;
X
X timeout = MAX_SCHEDULE_TIMEOUT;
X if (tvp) {
@@ -1123,30 +1125,47 @@
X || (ret = __get_user(usec, &tvp->tv_usec)))
X goto out_nofds;
X
- timeout = (usec + 1000000/HZ - 1) / (1000000/HZ);
- timeout += sec * HZ;
+ ret = -EINVAL;
+ if(sec < 0 || usec < 0)
+ goto out_nofds;
+
+ if ((unsigned long) sec < MAX_SELECT_SECONDS) {
+ timeout = (usec + 1000000/HZ - 1) / (1000000/HZ);
+ timeout += sec * (unsigned long) HZ;
+ }
X }
X
+ ret = -EINVAL;
+ if (n < 0 || n > KFDS_NR)
+ goto out_nofds;
+
+ /*
+ * We need 6 bitmaps (in/out/ex for both incoming and outgoing),
+ * since we used fdset we need to allocate memory in units of
+ * long-words.
+ */
X ret = -ENOMEM;
- fds = (fd_set_buffer *) __get_free_page(GFP_KERNEL);
- if (!fds)
+ size = FDS_BYTES(n);
+ bits = kmalloc(6 * size, GFP_KERNEL);
+ if (!bits)
X goto out_nofds;
- ret = -EINVAL;
- if (n < 0)
- goto out;
- if (n > KFDS_NR)
- n = KFDS_NR;
+ fds.in = (unsigned long *) bits;
+ fds.out = (unsigned long *) (bits + size);
+ fds.ex = (unsigned long *) (bits + 2*size);
+ fds.res_in = (unsigned long *) (bits + 3*size);
+ fds.res_out = (unsigned long *) (bits + 4*size);
+ fds.res_ex = (unsigned long *) (bits + 5*size);
X
X nn = (n + 8*sizeof(u32) - 1) / (8*sizeof(u32));
- if ((ret = get_fd_set32(nn, fds->in, inp)) ||
- (ret = get_fd_set32(nn, fds->out, outp)) ||
- (ret = get_fd_set32(nn, fds->ex, exp)))
+ if ((ret = get_fd_set32(nn, fds.in, inp)) ||
+ (ret = get_fd_set32(nn, fds.out, outp)) ||
+ (ret = get_fd_set32(nn, fds.ex, exp)))
X goto out;
- zero_fd_set(n, fds->res_in);
- zero_fd_set(n, fds->res_out);
- zero_fd_set(n, fds->res_ex);
+ zero_fd_set(n, fds.res_in);
+ zero_fd_set(n, fds.res_out);
+ zero_fd_set(n, fds.res_ex);
X
- ret = do_select(n, fds, &timeout);
+ ret = do_select(n, &fds, &timeout);
X
X if (tvp && !(current->personality & STICKY_TIMEOUTS)) {
X time_t sec = 0, usec = 0;
@@ -1168,12 +1187,12 @@
X ret = 0;
X }
X
- set_fd_set32(nn, inp, fds->res_in);
- set_fd_set32(nn, outp, fds->res_out);
- set_fd_set32(nn, exp, fds->res_ex);
+ set_fd_set32(nn, inp, fds.res_in);
+ set_fd_set32(nn, outp, fds.res_out);
+ set_fd_set32(nn, exp, fds.res_ex);
X
X out:
- free_page ((unsigned long)fds);
+ kfree(bits);
X out_nofds:
X return ret;
X }
@@ -1213,7 +1232,7 @@
X set_fs (KERNEL_DS);
X ret = sys_newstat(filenam, &s);
X set_fs (old_fs);
- putname32 (filenam);
+ putname (filenam);
X if (putstat (statbuf, &s))
X return -EFAULT;
X }
@@ -1235,7 +1254,7 @@
X set_fs (KERNEL_DS);
X ret = sys_newlstat(filenam, &s);
X set_fs (old_fs);
- putname32 (filenam);
+ putname (filenam);
X if (putstat (statbuf, &s))
X return -EFAULT;
X }
@@ -2010,74 +2029,6 @@
X return ret;
X }
X
-struct timex32 {
- unsigned int modes;
- s32 offset;
- s32 freq;
- s32 maxerror;
- s32 esterror;
- int status;
- s32 constant;
- s32 precision;
- s32 tolerance;
- struct timeval32 time;
- s32 tick;
- s32 ppsfreq;
- s32 jitter;
- int shift;
- s32 stabil;
- s32 jitcnt;
- s32 calcnt;
- s32 errcnt;
- s32 stbcnt;
- int :32; int :32; int :32; int :32;
- int :32; int :32; int :32; int :32;
- int :32; int :32; int :32; int :32;
-};
-
-extern int do_adjtimex(struct timex *);
-
-asmlinkage int sys32_adjtimex(struct timex32 *txc_p)
-{
- struct timex t;
- int ret;
-
- ret = get_user (t.modes, &txc_p->modes);
- ret |= __get_user (t.offset, &txc_p->offset);
- ret |= __get_user (t.freq, &txc_p->freq);
- ret |= __get_user (t.maxerror, &txc_p->maxerror);
- ret |= __get_user (t.esterror, &txc_p->esterror);
- ret |= __get_user (t.status, &txc_p->status);
- ret |= __get_user (t.constant, &txc_p->constant);
- ret |= __get_user (t.tick, &txc_p->tick);
- ret |= __get_user (t.shift, &txc_p->shift);
- if (ret || (ret = do_adjtimex(&t)))
- return ret;
- ret = __put_user (t.modes, &txc_p->modes);
- ret |= __put_user (t.offset, &txc_p->offset);
- ret |= __put_user (t.freq, &txc_p->freq);
- ret |= __put_user (t.maxerror, &txc_p->maxerror);
- ret |= __put_user (t.esterror, &txc_p->esterror);
- ret |= __put_user (t.status, &txc_p->status);
- ret |= __put_user (t.constant, &txc_p->constant);
- ret |= __put_user (t.precision, &txc_p->precision);
- ret |= __put_user (t.tolerance, &txc_p->tolerance);
- ret |= __put_user (t.time.tv_sec, &txc_p->time.tv_sec);
- ret |= __put_user (t.time.tv_usec, &txc_p->time.tv_usec);
- ret |= __put_user (t.tick, &txc_p->tick);
- ret |= __put_user (t.ppsfreq, &txc_p->ppsfreq);
- ret |= __put_user (t.jitter, &txc_p->jitter);
- ret |= __put_user (t.shift, &txc_p->shift);
- ret |= __put_user (t.stabil, &txc_p->stabil);
- ret |= __put_user (t.jitcnt, &txc_p->jitcnt);
- ret |= __put_user (t.calcnt, &txc_p->calcnt);
- ret |= __put_user (t.errcnt, &txc_p->errcnt);
- ret |= __put_user (t.stbcnt, &txc_p->stbcnt);
- if (!ret)
- ret = time_state;
- return ret;
-}
-
X /* XXX This really belongs in some header file... -DaveM */
X #define MAX_SOCK_ADDR 128 /* 108 for Unix domain -
X 16 for IP, 16 for IPX,
@@ -2131,9 +2082,44 @@
X __kernel_size_t32 cmsg_len;
X int cmsg_level;
X int cmsg_type;
- unsigned char cmsg_data[0];
X };
X
+/* Bleech... */
+#define __CMSG32_NXTHDR(ctl, len, cmsg, cmsglen) __cmsg32_nxthdr((ctl),(len),(cmsg),(cmsglen))
+#define CMSG32_NXTHDR(mhdr, cmsg, cmsglen) cmsg32_nxthdr((mhdr), (cmsg), (cmsglen))
+
+#define CMSG32_ALIGN(len) ( ((len)+sizeof(int)-1) & ~(sizeof(int)-1) )
+
+#define CMSG32_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG32_ALIGN(sizeof(struct cmsghdr32))))
+#define CMSG32_SPACE(len) (CMSG32_ALIGN(sizeof(struct cmsghdr32)) + CMSG32_ALIGN(len))
+#define CMSG32_LEN(len) (CMSG32_ALIGN(sizeof(struct cmsghdr32)) + (len))
+
+#define __CMSG32_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr32) ? \
+ (struct cmsghdr32 *)(ctl) : \
+ (struct cmsghdr32 *)NULL)
+#define CMSG32_FIRSTHDR(msg) __CMSG32_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
+
+__inline__ struct cmsghdr32 *__cmsg32_nxthdr(void *__ctl, __kernel_size_t __size,
+ struct cmsghdr32 *__cmsg, int __cmsg_len)
+{
+ struct cmsghdr32 * __ptr;
+
+ __ptr = (struct cmsghdr32 *)(((unsigned char *) __cmsg) +
+ CMSG32_ALIGN(__cmsg_len));
+ if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
+ return NULL;
+
+ return __ptr;
+}
+
+__inline__ struct cmsghdr32 *cmsg32_nxthdr (struct msghdr *__msg,
+ struct cmsghdr32 *__cmsg,
+ int __cmsg_len)
+{
+ return __cmsg32_nxthdr(__msg->msg_control, __msg->msg_controllen,
+ __cmsg, __cmsg_len);
+}
+
X static inline int iov_from_user32_to_kern(struct iovec *kiov,
X struct iovec32 *uiov32,
X int niov)
@@ -2175,6 +2161,7 @@
X kmsg->msg_control = (void *)A(tmp3);
X
X err = get_user(kmsg->msg_namelen, &umsg->msg_namelen);
+ err |= get_user(kmsg->msg_iovlen, &umsg->msg_iovlen);
X err |= get_user(kmsg->msg_controllen, &umsg->msg_controllen);
X err |= get_user(kmsg->msg_flags, &umsg->msg_flags);
X
@@ -2217,6 +2204,165 @@
X return tot_len;
X }
X
+/* There is a lot of hair here because the alignment rules (and
+ * thus placement) of cmsg headers and length are different for
+ * 32-bit apps. -DaveM
+ */
+static int cmsghdr_from_user32_to_kern(struct msghdr *kmsg,
+ unsigned char *stackbuf, int stackbuf_size)
+{
+ struct cmsghdr32 *ucmsg;
+ struct cmsghdr *kcmsg, *kcmsg_base;
+ __kernel_size_t32 ucmlen;
+ __kernel_size_t kcmlen, tmp;
+
+ kcmlen = 0;
+ kcmsg_base = kcmsg = (struct cmsghdr *)stackbuf;
+ ucmsg = CMSG32_FIRSTHDR(kmsg);
+ while(ucmsg != NULL) {
+ if(get_user(ucmlen, &ucmsg->cmsg_len))
+ return -EFAULT;
+
+ /* Catch bogons. */
+ if(CMSG32_ALIGN(ucmlen) <
+ CMSG32_ALIGN(sizeof(struct cmsghdr32)))
+ return -EINVAL;
+ if((unsigned long)(((char *)ucmsg - (char *)kmsg->msg_control)
+ + ucmlen) > kmsg->msg_controllen)
+ return -EINVAL;
+
+ tmp = ((ucmlen - CMSG32_ALIGN(sizeof(*ucmsg))) +
+ CMSG_ALIGN(sizeof(struct cmsghdr)));
+ kcmlen += tmp;
+ ucmsg = CMSG32_NXTHDR(kmsg, ucmsg, ucmlen);
+ }
+ if(kcmlen == 0)
+ return -EINVAL;
+
+ /* The kcmlen holds the 64-bit version of the control length.
+ * It may not be modified as we do not stick it into the kmsg
+ * until we have successfully copied over all of the data
+ * from the user.
+ */
+ if(kcmlen > stackbuf_size)
+ kcmsg_base = kcmsg = kmalloc(kcmlen, GFP_KERNEL);
+ if(kcmsg == NULL)
+ return -ENOBUFS;
+
+ /* Now copy them over neatly. */
+ memset(kcmsg, 0, kcmlen);
+ ucmsg = CMSG32_FIRSTHDR(kmsg);
+ while(ucmsg != NULL) {
+ __get_user(ucmlen, &ucmsg->cmsg_len);
+ tmp = ((ucmlen - CMSG32_ALIGN(sizeof(*ucmsg))) +
+ CMSG_ALIGN(sizeof(struct cmsghdr)));
+ kcmsg->cmsg_len = tmp;
+ __get_user(kcmsg->cmsg_level, &ucmsg->cmsg_level);
+ __get_user(kcmsg->cmsg_type, &ucmsg->cmsg_type);
+
+ /* Copy over the data. */
+ if(copy_from_user(CMSG_DATA(kcmsg),
+ CMSG32_DATA(ucmsg),
+ (ucmlen - CMSG32_ALIGN(sizeof(*ucmsg)))))
+ goto out_free_efault;
+
+ /* Advance. */
+ kcmsg = (struct cmsghdr *)((char *)kcmsg + CMSG_ALIGN(tmp));
+ ucmsg = CMSG32_NXTHDR(kmsg, ucmsg, ucmlen);
+ }
+
+ /* Ok, looks like we made it. Hook it up and return success. */
+ kmsg->msg_control = kcmsg_base;
+ kmsg->msg_controllen = kcmlen;
+ return 0;
+
+out_free_efault:
+ if(kcmsg_base != (struct cmsghdr *)stackbuf)
+ kfree(kcmsg_base);
+ return -EFAULT;
+}
+
+static void put_cmsg32(struct msghdr *kmsg, int level, int type,
+ int len, void *data)
+{
+ struct cmsghdr32 *cm = (struct cmsghdr32 *) kmsg->msg_control;
+ struct cmsghdr32 cmhdr;
+ int cmlen = CMSG32_LEN(len);
+
+ if(cm == NULL || kmsg->msg_controllen < sizeof(*cm)) {
+ kmsg->msg_flags |= MSG_CTRUNC;
+ return;
+ }
+
+ if(kmsg->msg_controllen < cmlen) {
+ kmsg->msg_flags |= MSG_CTRUNC;
+ cmlen = kmsg->msg_controllen;
+ }
+ cmhdr.cmsg_level = level;
+ cmhdr.cmsg_type = type;
+ cmhdr.cmsg_len = cmlen;
+
+ if(copy_to_user(cm, &cmhdr, sizeof cmhdr))
+ return;
+ if(copy_to_user(CMSG32_DATA(cm), data, cmlen - sizeof(struct cmsghdr32)))
+ return;
+ cmlen = CMSG32_SPACE(len);
+ kmsg->msg_control += cmlen;
+ kmsg->msg_controllen -= cmlen;
+}
+
+static void scm_detach_fds32(struct msghdr *kmsg, struct scm_cookie *scm)
+{
+ struct cmsghdr32 *cm = (struct cmsghdr32 *) kmsg->msg_control;
+ int fdmax = (kmsg->msg_controllen - sizeof(struct cmsghdr32)) / sizeof(int);
+ int fdnum = scm->fp->count;
+ struct file **fp = scm->fp->fp;
+ int *cmfptr;
+ int err = 0, i;
+
+ if (fdnum < fdmax)
+ fdmax = fdnum;
+
+ for (i = 0, cmfptr = (int *) CMSG32_DATA(cm); i < fdmax; i++, cmfptr++) {
+ int new_fd;
+ err = get_unused_fd();
+ if (err < 0)
+ break;
+ new_fd = err;
+ err = put_user(new_fd, cmfptr);
+ if (err) {
+ put_unused_fd(new_fd);
+ break;
+ }
+ /* Bump the usage count and install the file. */
+ fp[i]->f_count++;
+ current->files->fd[new_fd] = fp[i];
+ }
+
+ if (i > 0) {
+ int cmlen = CMSG32_LEN(i * sizeof(int));
+ if (!err)
+ err = put_user(SOL_SOCKET, &cm->cmsg_level);
+ if (!err)
+ err = put_user(SCM_RIGHTS, &cm->cmsg_type);
+ if (!err)
+ err = put_user(cmlen, &cm->cmsg_len);
+ if (!err) {
+ cmlen = CMSG32_SPACE(i * sizeof(int));
+ kmsg->msg_control += cmlen;
+ kmsg->msg_controllen -= cmlen;
+ }
+ }
+ if (i < fdnum)
+ kmsg->msg_flags |= MSG_CTRUNC;
+
+ /*
+ * All of the files that fit in the message have had their
+ * usage counts incremented, so we just free the list.
+ */
+ __scm_destroy(scm);
+}
+
X asmlinkage int sys32_sendmsg(int fd, struct msghdr32 *user_msg, unsigned user_flags)
X {
X struct socket *sock;
@@ -2237,25 +2383,10 @@
X total_len = err;
X
X if(kern_msg.msg_controllen) {
- struct cmsghdr32 *ucmsg = (struct cmsghdr32 *)kern_msg.msg_control;
- unsigned long *kcmsg;
- __kernel_size_t32 cmlen;
-
- if(kern_msg.msg_controllen > sizeof(ctl) &&
- kern_msg.msg_controllen <= 256) {
- err = -ENOBUFS;
- ctl_buf = kmalloc(kern_msg.msg_controllen, GFP_KERNEL);
- if(!ctl_buf)
- goto out_freeiov;
- }
- __get_user(cmlen, &ucmsg->cmsg_len);
- kcmsg = (unsigned long *) ctl_buf;
- *kcmsg++ = (unsigned long)cmlen;
- err = -EFAULT;
- if(copy_from_user(kcmsg, &ucmsg->cmsg_level,
- kern_msg.msg_controllen - sizeof(__kernel_size_t32)))
- goto out_freectl;
- kern_msg.msg_control = ctl_buf;
+ err = cmsghdr_from_user32_to_kern(&kern_msg, ctl, sizeof(ctl));
+ if(err)
+ goto out_freeiov;
+ ctl_buf = kern_msg.msg_control;
X }
X kern_msg.msg_flags = user_flags;
X
@@ -2269,7 +2400,6 @@
X }
X unlock_kernel();
X
-out_freectl:
X /* N.B. Use kfree here, as kern_msg.msg_controllen might change? */
X if(ctl_buf != ctl)
X kfree(ctl_buf);
@@ -2310,26 +2440,43 @@
X lock_kernel();
X sock = sockfd_lookup(fd, &err);
X if (sock != NULL) {
+ struct scm_cookie scm;
+
X if (sock->file->f_flags & O_NONBLOCK)
X user_flags |= MSG_DONTWAIT;
- err = sock_recvmsg(sock, &kern_msg, total_len, user_flags);
- if(err >= 0)
+ memset(&scm, 0, sizeof(scm));
+ err = sock->ops->recvmsg(sock, &kern_msg, total_len,
+ user_flags, &scm);
+ if(err >= 0) {
X len = err;
+ if(!kern_msg.msg_control) {
+ if(sock->passcred || scm.fp)
+ kern_msg.msg_flags |= MSG_CTRUNC;
+ if(scm.fp)
+ __scm_destroy(&scm);
+ } else {
+ /* Wheee... */
+ if(sock->passcred)
+ put_cmsg32(&kern_msg,
+ SOL_SOCKET, SCM_CREDENTIALS,
+ sizeof(scm.creds), &scm.creds);
+ if(scm.fp != NULL)
+ scm_detach_fds32(&kern_msg, &scm);
+ }
+ }
X sockfd_put(sock);
X }
X unlock_kernel();
X
X if(uaddr != NULL && err >= 0)
X err = move_addr_to_user(addr, kern_msg.msg_namelen, uaddr, uaddr_len);
- if(err >= 0) {
- err = __put_user(kern_msg.msg_flags, &user_msg->msg_flags);
- if(!err) {
- /* XXX Convert cmsg back into userspace 32-bit format... */
- err = __put_user((unsigned long)kern_msg.msg_control - cmsg_ptr,
- &user_msg->msg_controllen);
- }
+ if(cmsg_ptr != 0 && err >= 0) {
+ u32 ucmsg_ptr = ((u32)(unsigned long)kern_msg.msg_control);
+ err = __put_user(ucmsg_ptr, &user_msg->msg_control);
+ err |= __put_user(kern_msg.msg_controllen, &user_msg->msg_controllen);
X }
-
+ if(err >= 0)
+ err = __put_user(kern_msg.msg_flags, &user_msg->msg_flags);
X if(kern_msg.msg_iov != iov)
X kfree(kern_msg.msg_iov);
X out:
@@ -2653,7 +2800,7 @@
X error = do_execve32(filename,
X (u32 *)AA((u32)regs->u_regs[base + UREG_I1]),
X (u32 *)AA((u32)regs->u_regs[base + UREG_I2]), regs);
- putname32(filename);
+ putname(filename);
X
X if(!error) {
X fprs_write(0);
@@ -2943,8 +3090,10 @@
X info.addr = (unsigned long)mod;
X info.size = mod->size;
X info.flags = mod->flags;
- info.usecount = (mod_member_present(mod, can_unload)
- && mod->can_unload ? -1 : mod->usecount);
+ info.usecount =
+ ((mod_member_present(mod, can_unload)
+ && mod->can_unload)
+ ? -1 : atomic_read(&mod->uc.usecount));
X
X if (copy_to_user(buf, &info, sizeof(struct module_info32)))
X return -EFAULT;
@@ -3452,7 +3601,7 @@
X ret = sys_utimes(kfilename, &ktvs[0]);
X set_fs(old_fs);
X
- putname32(kfilename);
+ putname(kfilename);
X }
X return ret;
X }
@@ -3575,5 +3724,78 @@
X if (!ret && offset && put_user(of, offset))
X return -EFAULT;
X
+ return ret;
+}
+
+/* Handle adjtimex compatability. */
+
+struct timex32 {
+ u32 modes;
+ s32 offset, freq, maxerror, esterror;
+ s32 status, constant, precision, tolerance;
+ struct timeval32 time;
+ s32 tick;
+ s32 ppsfreq, jitter, shift, stabil;
+ s32 jitcnt, calcnt, errcnt, stbcnt;
+ s32 :32; s32 :32; s32 :32; s32 :32;
+ s32 :32; s32 :32; s32 :32; s32 :32;
+ s32 :32; s32 :32; s32 :32; s32 :32;
+};
+
+extern int do_adjtimex(struct timex *);
+
+asmlinkage int sys32_adjtimex(struct timex32 *utp)
+{
+ struct timex txc;
+ int ret;
+
+ memset(&txc, 0, sizeof(struct timex));
+
+ if(get_user(txc.modes, &utp->modes) ||
+ __get_user(txc.offset, &utp->offset) ||
+ __get_user(txc.freq, &utp->freq) ||
+ __get_user(txc.maxerror, &utp->maxerror) ||
+ __get_user(txc.esterror, &utp->esterror) ||
+ __get_user(txc.status, &utp->status) ||
+ __get_user(txc.constant, &utp->constant) ||
+ __get_user(txc.precision, &utp->precision) ||
+ __get_user(txc.tolerance, &utp->tolerance) ||
+ __get_user(txc.time.tv_sec, &utp->time.tv_sec) ||
+ __get_user(txc.time.tv_usec, &utp->time.tv_usec) ||
+ __get_user(txc.tick, &utp->tick) ||
+ __get_user(txc.ppsfreq, &utp->ppsfreq) ||
+ __get_user(txc.jitter, &utp->jitter) ||
+ __get_user(txc.shift, &utp->shift) ||
+ __get_user(txc.stabil, &utp->stabil) ||
+ __get_user(txc.jitcnt, &utp->jitcnt) ||
+ __get_user(txc.calcnt, &utp->calcnt) ||
+ __get_user(txc.errcnt, &utp->errcnt) ||
+ __get_user(txc.stbcnt, &utp->stbcnt))
+ return -EFAULT;
+
+ ret = do_adjtimex(&txc);
+
+ if(put_user(txc.modes, &utp->modes) ||
+ __put_user(txc.offset, &utp->offset) ||
+ __put_user(txc.freq, &utp->freq) ||
+ __put_user(txc.maxerror, &utp->maxerror) ||
+ __put_user(txc.esterror, &utp->esterror) ||
+ __put_user(txc.status, &utp->status) ||
+ __put_user(txc.constant, &utp->constant) ||
+ __put_user(txc.precision, &utp->precision) ||
+ __put_user(txc.tolerance, &utp->tolerance) ||
+ __put_user(txc.time.tv_sec, &utp->time.tv_sec) ||
+ __put_user(txc.time.tv_usec, &utp->time.tv_usec) ||
+ __put_user(txc.tick, &utp->tick) ||
+ __put_user(txc.ppsfreq, &utp->ppsfreq) ||
+ __put_user(txc.jitter, &utp->jitter) ||
+ __put_user(txc.shift, &utp->shift) ||
+ __put_user(txc.stabil, &utp->stabil) ||
+ __put_user(txc.jitcnt, &utp->jitcnt) ||
+ __put_user(txc.calcnt, &utp->calcnt) ||
+ __put_user(txc.errcnt, &utp->errcnt) ||
+ __put_user(txc.stbcnt, &utp->stbcnt))
+ ret = -EFAULT;
+
X return ret;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/systbls.S linux/arch/sparc64/kernel/systbls.S
--- v2.2.3/linux/arch/sparc64/kernel/systbls.S Sun Nov 8 14:02:48 1998
+++ linux/arch/sparc64/kernel/systbls.S Sun Mar 21 07:23:38 1999
@@ -1,4 +1,4 @@
-/* $Id: systbls.S,v 1.50 1998/10/07 01:27:27 davem Exp $
+/* $Id: systbls.S,v 1.52 1999/03/20 22:02:05 davem Exp $
X * systbls.S: System call entry point tables for OS compatibility.
X * The native Linux system call table lives here also.
X *
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/time.c linux/arch/sparc64/kernel/time.c
--- v2.2.3/linux/arch/sparc64/kernel/time.c Wed Jan 20 23:14:04 1999
+++ linux/arch/sparc64/kernel/time.c Mon Mar 15 16:10:43 1999
@@ -1,4 +1,4 @@
-/* $Id: time.c,v 1.16 1998/09/05 17:25:28 jj Exp $
+/* $Id: time.c,v 1.20 1999/03/15 22:13:40 davem Exp $
X * time.c: UltraSparc timer and TOD clock support.
X *
X * Copyright (C) 1997 David S. Miller (da...@caip.rutgers.edu)
@@ -31,6 +31,8 @@
X #include <asm/pbm.h>
X #include <asm/ebus.h>
X
+extern rwlock_t xtime_lock;
+
X struct mostek48t02 *mstk48t02_regs = 0;
X static struct mostek48t08 *mstk48t08_regs = 0;
X static struct mostek48t59 *mstk48t59_regs = 0;
@@ -69,6 +71,8 @@
X {
X unsigned long ticks;
X
+ write_lock(&xtime_lock);
+
X do {
X do_timer(regs);
X
@@ -82,11 +86,15 @@
X } while (ticks >= timer_tick_compare);
X
X timer_check_rtc();
+
+ write_unlock(&xtime_lock);
X }
X
X #ifdef __SMP__
X void timer_tick_interrupt(struct pt_regs *regs)
X {
+ write_lock(&xtime_lock);
+
X do_timer(regs);
X
X /*
@@ -99,6 +107,8 @@
X : "r" (timer_tick_offset));
X
X timer_check_rtc();
+
+ write_unlock(&xtime_lock);
X }
X #endif
X
@@ -256,13 +266,17 @@
X node = prom_getchild(busnd);
X
X while(1) {
- prom_getstring(node, "model", model, sizeof(model));
+ if (!node)
+ model[0] = 0;
+ else
+ prom_getstring(node, "model", model, sizeof(model));
X if(strcmp(model, "mk48t02") &&
X strcmp(model, "mk48t08") &&
X strcmp(model, "mk48t59")) {
- node = prom_getsibling(node);
+ if (node)
+ node = prom_getsibling(node);
X #ifdef CONFIG_PCI
- if ((node == 0) && ebus) {
+ while ((node == 0) && ebus) {
X ebus = ebus->next;
X if (ebus) {
X busnd = ebus->prom_node;
@@ -397,6 +411,9 @@
X return ticks / timer_ticks_per_usec;
X }
X
+/* This need not obtain the xtime_lock as it is coded in
+ * an implicitly SMP safe way already.
+ */
X void do_gettimeofday(struct timeval *tv)
X {
X /* Load doubles must be used on xtime so that what we get
@@ -450,7 +467,7 @@
X
X void do_settimeofday(struct timeval *tv)
X {
- cli();
+ write_lock_irq(&xtime_lock);
X
X tv->tv_usec -= do_gettimeoffset();
X if(tv->tv_usec < 0) {
@@ -461,10 +478,10 @@
X xtime = *tv;
X time_adjust = 0; /* stop active adjtime() */
X time_status |= STA_UNSYNC;
- time_state = TIME_ERROR; /* p. 24, (a) */
X time_maxerror = NTP_PHASE_LIMIT;
X time_esterror = NTP_PHASE_LIMIT;
- sti();
+
+ write_unlock_irq(&xtime_lock);
X }
X
X static int set_rtc_mmss(unsigned long nowtime)
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/trampoline.S linux/arch/sparc64/kernel/trampoline.S
--- v2.2.3/linux/arch/sparc64/kernel/trampoline.S Sun Nov 8 14:02:48 1998
+++ linux/arch/sparc64/kernel/trampoline.S Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: trampoline.S,v 1.6 1998/10/11 06:58:23 davem Exp $
+/* $Id: trampoline.S,v 1.8 1998/12/09 21:01:15 davem Exp $
X * trampoline.S: Jump start slave processors on sparc64.
X *
X * Copyright (C) 1997 David S. Miller (da...@caip.rutgers.edu)
@@ -34,8 +34,8 @@
X sllx %g4, 32, %g4
X
X /* XXX Buggy PROM... */
- srl %o0, 0, %g6
- add %g6, %g4, %g6
+ srl %o0, 0, %o0
+ ldx [%o0], %g6
X
X sethi %uhi(_PAGE_VALID | _PAGE_SZ4MB), %g5
X sllx %g5, 32, %g5
@@ -197,10 +197,18 @@
X #undef KERN_LOWBITS
X #undef VPTE_BASE
X
+ /* Setup interrupt globals, we are always SMP. */
X wrpr %o1, (PSTATE_IG | PSTATE_IE), %pstate
- sethi %hi(ivector_to_mask), %g5
- or %g5, %lo(ivector_to_mask), %g1
- mov 0x40, %g2
+
+ /* Get our UPA MID. */
+ lduw [%o2 + AOFF_task_processor], %g1
+ sethi %hi(cpu_data), %g5
+ or %g5, %lo(cpu_data), %g5
+
+ /* In theory this is: &(cpu_data[this_upamid].irq_worklists[0]) */
+ sllx %g1, 7, %g1
+ add %g5, %g1, %g1
+ add %g1, 64, %g1
X
X wrpr %g0, 0, %wstate
X or %o1, PSTATE_IE, %o1
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/traps.c linux/arch/sparc64/kernel/traps.c
--- v2.2.3/linux/arch/sparc64/kernel/traps.c Sun Nov 8 14:02:48 1998
+++ linux/arch/sparc64/kernel/traps.c Wed Mar 10 16:53:37 1999
@@ -1,8 +1,8 @@
-/* $Id: traps.c,v 1.55 1998/10/11 06:58:22 davem Exp $
+/* $Id: traps.c,v 1.57 1999/03/02 15:42:18 jj Exp $
X * arch/sparc64/kernel/traps.c
X *
X * Copyright (C) 1995,1997 David S. Miller (da...@caip.rutgers.edu)
- * Copyright (C) 1997 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
+ * Copyright (C) 1997,1999 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
X */
X
X /*
@@ -462,6 +462,9 @@
X
X void die_if_kernel(char *str, struct pt_regs *regs)
X {
+ extern void __show_regs(struct pt_regs * regs);
+ extern void smp_report_regs(void);
+
X /* Amuse the user. */
X printk(
X " \\|/ ____ \\|/\n"
@@ -471,7 +474,7 @@
X
X printk("%s(%d): %s\n", current->comm, current->pid, str);
X __asm__ __volatile__("flushw");
- show_regs(regs);
+ __show_regs(regs);
X {
X struct reg_window *rw = (struct reg_window *)
X (regs->u_regs[UREG_FP] + STACK_BIAS);
@@ -491,6 +494,10 @@
X printk("Instruction DUMP:");
X instruction_dump ((unsigned int *) regs->tpc);
X }
+#ifdef __SMP__
+ smp_report_regs();
+#endif
+
X lock_kernel(); /* Or else! */
X if(regs->tstate & TSTATE_PRIV)
X do_exit(SIGKILL);
@@ -498,7 +505,7 @@
X }
X
X extern int handle_popc(u32 insn, struct pt_regs *regs);
-extern int handle_ldq_stq(u32 insn, struct pt_regs *regs);
+extern int handle_ldf_stq(u32 insn, struct pt_regs *regs);
X
X void do_illegal_instruction(struct pt_regs *regs)
X {
@@ -515,7 +522,7 @@
X if (handle_popc(insn, regs))
X return;
X } else if ((insn & 0xc1580000) == 0xc1100000) /* LDQ/STQ */ {
- if (handle_ldq_stq(insn, regs))
+ if (handle_ldf_stq(insn, regs))
X return;
X }
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/kernel/unaligned.c linux/arch/sparc64/kernel/unaligned.c
--- v2.2.3/linux/arch/sparc64/kernel/unaligned.c Sun Nov 8 14:02:48 1998
+++ linux/arch/sparc64/kernel/unaligned.c Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: unaligned.c,v 1.13 1998/10/07 22:43:13 davem Exp $
+/* $Id: unaligned.c,v 1.14 1999/03/02 15:42:16 jj Exp $
X * unaligned.c: Unaligned load/store trap handling with special
X * cases for the kernel to do them more quickly.
X *
@@ -470,7 +470,7 @@
X extern void do_privact(struct pt_regs *regs);
X extern void data_access_exception(struct pt_regs *regs);
X
-int handle_ldq_stq(u32 insn, struct pt_regs *regs)
+int handle_ldf_stq(u32 insn, struct pt_regs *regs)
X {
X unsigned long addr = compute_effective_address(regs, insn, 0);
X int freg = ((insn >> 25) & 0x1e) | ((insn >> 20) & 0x20);
@@ -522,8 +522,10 @@
X return 1;
X }
X } else {
- /* LDQ */
- u32 first, second, third, fourth;
+ /* LDF, LDDF, LDQF */
+ u32 data[4] __attribute__ ((aligned(8)));
+ int size, i;
+ int err;
X
X if (asi < 0x80) {
X do_privact(regs);
@@ -532,25 +534,35 @@
X data_access_exception(regs);
X return 1;
X }
- if (get_user (first, (u32 *)addr) ||
- __get_user (second, (u32 *)(addr + 4)) ||
- __get_user (third, (u32 *)(addr + 8)) ||
- __get_user (fourth, (u32 *)(addr + 12))) {
- if (asi & 0x2) /* NF */ {
- first = 0; second = 0; third = 0; fourth = 0;
- } else {
- data_access_exception(regs);
- return 1;
- }
+ switch (insn & 0x180000) {
+ case 0x000000: size = 1; break;
+ case 0x100000: size = 4; break;
+ default: size = 2; break;
+ }
+ for (i = 0; i < size; i++)
+ data[i] = 0;
+
+ err = get_user (data[0], (u32 *)addr);
+ if (!err) {
+ for (i = 1; i < size; i++)
+ err |= __get_user (data[i], (u32 *)(addr + 4*i));
+ }
+ if (err && !(asi & 0x2 /* NF */)) {
+ data_access_exception(regs);
+ return 1;
X }
X if (asi & 0x8) /* Little */ {
- u32 tmp = le32_to_cpup(&first);
-
- first = le32_to_cpup(&fourth);
- fourth = tmp;
- tmp = le32_to_cpup(&second);
- second = le32_to_cpup(&third);
- third = tmp;
+ u64 tmp;
+
+ switch (size) {
+ case 1: data[0] = le32_to_cpup(data + 0); break;
+ default:*(u64 *)(data + 0) = le64_to_cpup((u64 *)(data + 0));
+ break;
+ case 4: tmp = le64_to_cpup((u64 *)(data + 0));
+ *(u64 *)(data + 0) = le64_to_cpup((u64 *)(data + 2));
+ *(u64 *)(data + 2) = tmp;
+ break;
+ }
X }
X if (!(current->tss.fpsaved[0] & FPRS_FEF)) {
X current->tss.fpsaved[0] = FPRS_FEF;
@@ -562,14 +574,25 @@
X else
X memset(f->regs+32, 0, 32*sizeof(u32));
X }
- f->regs[freg] = first;
- f->regs[freg+1] = second;
- f->regs[freg+2] = third;
- f->regs[freg+3] = fourth;
+ memcpy(f->regs + freg, data, size * 4);
X current->tss.fpsaved[0] |= flag;
X }
X advance(regs);
X return 1;
+}
+
+void handle_ld_nf(u32 insn, struct pt_regs *regs)
+{
+ int rd = ((insn >> 25) & 0x1f);
+ int from_kernel = (regs->tstate & TSTATE_PRIV) != 0;
+ unsigned long *reg;
+
+ maybe_flush_windows(0, 0, rd, from_kernel);
+ reg = fetch_reg_addr(rd, regs);
+ if ((insn & 0x780000) == 0x180000)
+ reg[1] = 0;
+ reg[0] = 0;
+ advance(regs);
X }
X
X void handle_lddfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr)
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fabsq.c linux/arch/sparc64/math-emu/fabsq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fabsq.c Thu Apr 23 20:21:32 1998
+++ linux/arch/sparc64/math-emu/fabsq.c Wed Mar 10 16:53:37 1999
@@ -2,5 +2,5 @@
X {
X rd[0] = rs2[0] & 0x7fffffffffffffffUL;
X rd[1] = rs2[1];
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/faddd.c linux/arch/sparc64/math-emu/faddd.c
--- v2.2.3/linux/arch/sparc64/math-emu/faddd.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/faddd.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X __FP_UNPACK_D(A, rs1);
X __FP_UNPACK_D(B, rs2);
X FP_ADD_D(R, A, B);
- __FP_PACK_D(rd, R);
- return 1;
+ return __FP_PACK_D(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/faddq.c linux/arch/sparc64/math-emu/faddq.c
--- v2.2.3/linux/arch/sparc64/math-emu/faddq.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/faddq.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X __FP_UNPACK_Q(A, rs1);
X __FP_UNPACK_Q(B, rs2);
X FP_ADD_Q(R, A, B);
- __FP_PACK_Q(rd, R);
- return 1;
+ return __FP_PACK_Q(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fadds.c linux/arch/sparc64/math-emu/fadds.c
--- v2.2.3/linux/arch/sparc64/math-emu/fadds.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fadds.c Wed Mar 10 16:53:37 1999
@@ -8,6 +8,5 @@
X __FP_UNPACK_S(A, rs1);
X __FP_UNPACK_S(B, rs2);
X FP_ADD_S(R, A, B);
- __FP_PACK_S(rd, R);
- return 1;
+ return __FP_PACK_S(rd, R);
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fcmpeq.c linux/arch/sparc64/math-emu/fcmpeq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fcmpeq.c Thu Apr 23 20:21:32 1998
+++ linux/arch/sparc64/math-emu/fcmpeq.c Wed Mar 10 16:53:37 1999
@@ -21,5 +21,5 @@
X case 3: fsr &= ~0x3000000000UL; fsr |= (ret << 36); break;
X }
X *(unsigned long *)rd = fsr;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fcmpq.c linux/arch/sparc64/math-emu/fcmpq.c
--- v2.2.3/linux/arch/sparc64/math-emu/fcmpq.c Thu Apr 23 20:21:32 1998
+++ linux/arch/sparc64/math-emu/fcmpq.c Wed Mar 10 16:53:37 1999
@@ -21,5 +21,5 @@
X case 3: fsr &= ~0x3000000000UL; fsr |= (ret << 36); break;
X }
X *(unsigned long *)rd = fsr;
- return 1;
+ return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/math-emu/fdivd.c linux/arch/sparc64/math-emu/fdivd.c
--- v2.2.3/linux/arch/sparc64/math-emu/fdivd.c Mon Jan 12 15:15:44 1998
+++ linux/arch/sparc64/math-emu/fdivd.c Wed Mar 10 16:53:37 1999
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 09'
echo 'File patch-2.2.4 is continued in part 10'
echo 10 > _shar_seq_.tmp
#!/bin/sh
# this is part 11 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 11; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
X if (page->next_hash < page)
X high = ((unsigned long)end) & PAGE_MASK;
@@ -1255,7 +1436,7 @@
X
X val->totalram = 0;
X val->sharedram = 0;
- val->freeram = nr_free_pages << PAGE_SHIFT;
+ val->freeram = ((unsigned long)nr_free_pages) << PAGE_SHIFT;
X val->bufferram = buffermem;
X for (page = mem_map, end = mem_map + max_mapnr;
X page < end; page++) {
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/prom/memory.c linux/arch/sparc64/prom/memory.c
--- v2.2.3/linux/arch/sparc64/prom/memory.c Mon Mar 17 14:54:24 1997
+++ linux/arch/sparc64/prom/memory.c Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: memory.c,v 1.3 1997/03/04 16:27:10 jj Exp $
+/* $Id: memory.c,v 1.4 1998/11/25 10:04:06 jj Exp $
X * memory.c: Prom routine for acquiring various bits of information
X * about RAM on the machine, both virtual and physical.
X *
@@ -41,8 +41,8 @@
X prom_sortmemlist(struct linux_mlist_p1275 *thislist))
X {
X int swapi = 0;
- int i, mitr, tmpsize;
- unsigned long tmpaddr;
+ int i, mitr;
+ unsigned long tmpaddr, tmpsize;
X unsigned long lowest;
X
X for(i=0; thislist[i].theres_more != 0; i++) {
@@ -79,7 +79,7 @@
X prom_phys_avail[iter].start_adr =
X prom_reg_memlist[iter].phys_addr;
X prom_phys_avail[iter].num_bytes =
- (unsigned long) prom_reg_memlist[iter].reg_size;
+ prom_reg_memlist[iter].reg_size;
X prom_phys_avail[iter].theres_more =
X &prom_phys_avail[iter+1];
X }
@@ -93,7 +93,7 @@
X prom_phys_total[iter].start_adr =
X prom_reg_memlist[iter].phys_addr;
X prom_phys_total[iter].num_bytes =
- (unsigned long) prom_reg_memlist[iter].reg_size;
+ prom_reg_memlist[iter].reg_size;
X prom_phys_total[iter].theres_more =
X &prom_phys_total[iter+1];
X }
@@ -112,7 +112,7 @@
X prom_prom_taken[iter].start_adr =
X prom_reg_memlist[iter].phys_addr;
X prom_prom_taken[iter].num_bytes =
- (unsigned long) prom_reg_memlist[iter].reg_size;
+ prom_reg_memlist[iter].reg_size;
X prom_prom_taken[iter].theres_more =
X &prom_phys_total[iter+1];
X }
@@ -130,7 +130,7 @@
X prom_prom_taken[iter].start_adr;
X }
X prom_prom_taken[iter-1].num_bytes =
- ((unsigned long)-1) - (unsigned long) prom_prom_taken[iter-1].start_adr;
+ -1UL - prom_prom_taken[iter-1].start_adr;
X
X /* Sort the other two lists. */
X prom_sortmemlist(prom_phys_total);
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/prom/misc.c linux/arch/sparc64/prom/misc.c
--- v2.2.3/linux/arch/sparc64/prom/misc.c Sun Nov 8 14:02:50 1998
+++ linux/arch/sparc64/prom/misc.c Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: misc.c,v 1.13 1998/10/13 14:03:49 davem Exp $
+/* $Id: misc.c,v 1.14 1998/12/18 10:01:59 davem Exp $
X * misc.c: Miscellaneous prom functions that don't belong
X * anywhere else.
X *
@@ -122,9 +122,123 @@
X p1275_cmd("SUNW,set-trap-table", P1275_INOUT(1, 0), tba);
X }
X
+/* This is only used internally below. */
+static int prom_get_mmu_ihandle(void)
+{
+ int node;
+ int ret;
+
+ node = prom_finddevice("/chosen");
+ ret = prom_getint(node, "mmu");
+ if(ret == -1 || ret == 0) {
+ prom_printf("PROMLIB: Fatal error, cannot get mmu ihandle.\n");
+ prom_halt();
+ }
+ return ret;
+}
+
+/* Load explicit I/D TLB entries. */
+long prom_itlb_load(unsigned long index,
+ unsigned long tte_data,
+ unsigned long vaddr)
+{
+ return p1275_cmd("call-method",
+ (P1275_ARG(0, P1275_ARG_IN_BUF) | P1275_INOUT(5, 1)),
+ "SUNW,itlb-load",
+ prom_get_mmu_ihandle(),
+ /* And then our actual args are pushed backwards. */
+ vaddr,
+ tte_data,
+ index);
+}
+
+long prom_dtlb_load(unsigned long index,
+ unsigned long tte_data,
+ unsigned long vaddr)
+{
+ return p1275_cmd("call-method",
+ (P1275_ARG(0, P1275_ARG_IN_BUF) | P1275_INOUT(5, 1)),
+ "SUNW,dtlb-load",
+ prom_get_mmu_ihandle(),
+ /* And then our actual args are pushed backwards. */
+ vaddr,
+ tte_data,
+ index);
+}
+
+/* Set aside physical memory which is not touched or modified
+ * across soft resets.
+ */
+unsigned long prom_retain(char *name,
+ unsigned long pa_low, unsigned long pa_high,
+ long size, long align)
+{
+ /* XXX I don't think we return multiple values correctly.
+ * XXX OBP supposedly returns pa_low/pa_high here, how does
+ * XXX it work?
+ */
+
+ /* If align is zero, the pa_low/pa_high args are passed,
+ * else they are not.
+ */
+ if(align == 0)
+ return p1275_cmd("SUNW,retain",
+ (P1275_ARG(0, P1275_ARG_IN_BUF) | P1275_INOUT(5, 2)),
+ name, pa_low, pa_high, size, align);
+ else
+ return p1275_cmd("SUNW,retain",
+ (P1275_ARG(0, P1275_ARG_IN_BUF) | P1275_INOUT(3, 2)),
+ name, size, align);
+}
+
+/* Get "Unumber" string for the SIMM at the given
+ * memory address. Usually this will be of the form
+ * "Uxxxx" where xxxx is a decimal number which is
+ * etched into the motherboard next to the SIMM slot
+ * in question.
+ */
+int prom_getunumber(unsigned long phys_lo, unsigned long phys_hi,
+ char *buf, int buflen)
+{
+ return p1275_cmd("SUNW,get-unumber",
+ (P1275_ARG(2, P1275_ARG_OUT_BUF) | P1275_INOUT(4, 1)),
+ phys_lo, phys_hi, buf, buflen);
+}
+
+/* Power management extensions. */
+void prom_sleepself(void)
+{
+ p1275_cmd("SUNW,sleep-self", P1275_INOUT(0, 0));
+}
+
+int prom_sleepsystem(void)
+{
+ return p1275_cmd("SUNW,sleep-system", P1275_INOUT(0, 1));
+}
+
+int prom_wakeupsystem(void)
+{
+ return p1275_cmd("SUNW,wakeup-system", P1275_INOUT(0, 1));
+}
+
X #ifdef __SMP__
X void prom_startcpu(int cpunode, unsigned long pc, unsigned long o0)
X {
X p1275_cmd("SUNW,start-cpu", P1275_INOUT(3, 0), cpunode, pc, o0);
+}
+
+void prom_stopself(void)
+{
+ p1275_cmd("SUNW,stop-self", P1275_INOUT(0, 0));
+}
+
+void prom_idleself(void)
+{
+ p1275_cmd("SUNW,idle-self", P1275_INOUT(0, 0));
+}
+
+void prom_resumecpu(int cpunode)
+{
+ p1275_cmd("SUNW,resume-cpu", P1275_INOUT(1, 0), cpunode);
X }
X #endif
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/solaris/fs.c linux/arch/sparc64/solaris/fs.c
--- v2.2.3/linux/arch/sparc64/solaris/fs.c Thu Nov 19 09:56:27 1998
+++ linux/arch/sparc64/solaris/fs.c Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: fs.c,v 1.11 1998/10/28 08:12:04 jj Exp $
+/* $Id: fs.c,v 1.12 1999/01/02 16:46:06 davem Exp $
X * fs.c: fs related syscall emulation for Solaris
X *
X * Copyright (C) 1997,1998 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
@@ -7,6 +7,7 @@
X #include <linux/types.h>
X #include <linux/sched.h>
X #include <linux/fs.h>
+#include <linux/mm.h>
X #include <linux/file.h>
X #include <linux/stat.h>
X #include <linux/smp_lock.h>
@@ -21,7 +22,6 @@
X #include "conv.h"
X
X extern char * getname32(u32 filename);
-#define putname32 putname
X
X #define R4_DEV(DEV) ((DEV & 0xff) | ((DEV & 0xff00) << 10))
X #define R4_MAJOR(DEV) (((DEV) >> 18) & 0x3fff)
@@ -138,7 +138,7 @@
X set_fs (KERNEL_DS);
X ret = sys_newstat(filenam, &s);
X set_fs (old_fs);
- putname32 (filenam);
+ putname (filenam);
X if (putstat ((struct sol_stat *)A(statbuf), &s))
X return -EFAULT;
X }
@@ -166,7 +166,7 @@
X set_fs (KERNEL_DS);
X ret = sys_newstat(filenam, &s);
X set_fs (old_fs);
- putname32 (filenam);
+ putname (filenam);
X if (putstat64 ((struct sol_stat64 *)A(statbuf), &s))
X return -EFAULT;
X }
@@ -188,7 +188,7 @@
X set_fs (KERNEL_DS);
X ret = sys_newlstat(filenam, &s);
X set_fs (old_fs);
- putname32 (filenam);
+ putname (filenam);
X if (putstat ((struct sol_stat *)A(statbuf), &s))
X return -EFAULT;
X }
@@ -215,7 +215,7 @@
X set_fs (KERNEL_DS);
X ret = sys_newlstat(filenam, &s);
X set_fs (old_fs);
- putname32 (filenam);
+ putname (filenam);
X if (putstat64 ((struct sol_stat64 *)A(statbuf), &s))
X return -EFAULT;
X }
diff -u --recursive --new-file v2.2.3/linux/arch/sparc64/solaris/systbl.S linux/arch/sparc64/solaris/systbl.S
--- v2.2.3/linux/arch/sparc64/solaris/systbl.S Thu Nov 19 09:56:28 1998
+++ linux/arch/sparc64/solaris/systbl.S Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: systbl.S,v 1.7 1998/10/28 08:11:49 jj Exp $
+/* $Id: systbl.S,v 1.8 1999/02/11 18:34:02 davem Exp $
X * systbl.S: System call entry point table for Solaris compatibility.
X *
X * Copyright (C) 1997,1998 Jakub Jelinek (j...@sunsite.mff.cuni.cz)
@@ -72,7 +72,7 @@
X .word CHAIN(dup) /* dup d 41 */
X .word CHAIN(pipe) /* pipe 42 */
X .word CHAIN(times) /* times p 43 */
- .word CHAIN(profil) /* prof xxxx 44 */
+ .word 44 /*CHAIN(profil)*/ /* prof xxxx 44 */
X .word solaris_unimplemented /* lock/plock 45 */
X .word CHAIN(setgid) /* setgid d 46 */
X .word solaris_getgid /* getgid 47 */
diff -u --recursive --new-file v2.2.3/linux/drivers/ap1000/apfddi.c linux/drivers/ap1000/apfddi.c
--- v2.2.3/linux/drivers/ap1000/apfddi.c Fri May 8 23:14:47 1998
+++ linux/drivers/ap1000/apfddi.c Wed Mar 10 16:51:35 1999
@@ -30,7 +30,6 @@
X #include <asm/io.h>
X
X #include <linux/inet.h>
-#include <linux/netdevice.h>
X #include <linux/etherdevice.h>
X #include <linux/skbuff.h>
X #include <net/sock.h>
diff -u --recursive --new-file v2.2.3/linux/drivers/ap1000/ringbuf.c linux/drivers/ap1000/ringbuf.c
--- v2.2.3/linux/drivers/ap1000/ringbuf.c Wed Aug 26 11:37:34 1998
+++ linux/drivers/ap1000/ringbuf.c Wed Mar 10 16:51:35 1999
@@ -22,7 +22,6 @@
X #include <asm/segment.h>
X #include <asm/io.h>
X #include <asm/pgtable.h>
-#include <asm/segment.h>
X #include <asm/uaccess.h>
X
X #include <asm/ap1000/pgtapmmu.h>
diff -u --recursive --new-file v2.2.3/linux/drivers/block/cmd646.c linux/drivers/block/cmd646.c
--- v2.2.3/linux/drivers/block/cmd646.c Thu Aug 6 14:06:31 1998
+++ linux/drivers/block/cmd646.c Mon Mar 15 16:11:29 1999
@@ -1,4 +1,4 @@
-/* $Id: cmd646.c,v 1.10 1998/08/03 15:28:42 davem Exp $
+/* $Id: cmd646.c,v 1.11 1998/12/13 08:36:54 davem Exp $
X * cmd646.c: Enable interrupts at initialization time on Ultra/PCI machines.
X * Note, this driver is not used at all on other systems because
X * there the "BIOS" has done all of the following already.
@@ -219,8 +219,11 @@
X
X hwif->chipset = ide_cmd646;
X
- /* Set a good latency timer value. */
- (void) pci_write_config_byte(dev, PCI_LATENCY_TIMER, 240);
+ /* Set a good latency timer and cache line size value. */
+ (void) pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64);
+#ifdef __sparc_v9__
+ (void) pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 0x10);
+#endif
X
X /* Setup interrupts. */
X (void) pci_read_config_byte(dev, 0x71, &mrdmode);
diff -u --recursive --new-file v2.2.3/linux/drivers/block/genhd.c linux/drivers/block/genhd.c
--- v2.2.3/linux/drivers/block/genhd.c Wed Mar 10 15:29:45 1999
+++ linux/drivers/block/genhd.c Sun Mar 21 20:52:44 1999
@@ -867,19 +867,20 @@
X int nr_sects;
X int blk;
X int part, res;
+ int old_blocksize;
+ int blocksize;
X
- /*
- * Don't bother touching M/O 2K media.
- */
-
- if (get_ptable_blocksize(dev) != 1024)
- return 0;
-
- set_blocksize(dev,512);
+ old_blocksize = get_ptable_blocksize(dev);
+ if (hardsect_size[MAJOR(dev)] != NULL)
+ blocksize = hardsect_size[MAJOR(dev)][MINOR(dev)];
+ else
+ blocksize = 512;
+
+ set_blocksize(dev,blocksize);
X res = 0;
X
X for (blk = 0; blk < RDB_ALLOCATION_LIMIT; blk++) {
- if(!(bh = bread(dev,blk,512))) {
+ if(!(bh = bread(dev,blk,blocksize))) {
X printk("Dev %s: unable to read RDB block %d\n",
X kdevname(dev),blk);
X goto rdb_done;
@@ -887,16 +888,25 @@
X if (*(u32 *)bh->b_data == htonl(IDNAME_RIGIDDISK)) {
X rdb = (struct RigidDiskBlock *)bh->b_data;
X if (checksum_block((u32 *)bh->b_data,htonl(rdb->rdb_SummedLongs) & 0x7F)) {
- printk("Dev %s: RDB in block %d has bad checksum\n",
- kdevname(dev),blk);
- brelse(bh);
- continue;
+ /* Try again with 0xdc..0xdf zeroed, Windows might have
+ * trashed it.
+ */
+ *(u32 *)(&bh->b_data[0xdc]) = 0;
+ if (checksum_block((u32 *)bh->b_data,
+ htonl(rdb->rdb_SummedLongs) & 0x7F)) {
+ brelse(bh);
+ printk("Dev %s: RDB in block %d has bad checksum\n",
+ kdevname(dev),blk);
+ continue;
+ }
+ printk("Warning: Trashed word at 0xd0 in block %d "
+ "ignored in checksum calculation\n",blk);
X }
X printk(" RDSK");
X blk = htonl(rdb->rdb_PartitionList);
X brelse(bh);
X for (part = 1; blk > 0 && part <= 16; part++) {
- if (!(bh = bread(dev,blk, 512))) {
+ if (!(bh = bread(dev,blk,blocksize))) {
X printk("Dev %s: unable to read partition block %d\n",
X kdevname(dev),blk);
X goto rdb_done;
@@ -929,11 +939,7 @@
X }
X
X rdb_done:
- /*
- * FIXME: should restore the original size. Then we could clean
- * up the M/O skip. Amiga people ?
- */
- set_blocksize(dev,BLOCK_SIZE);
+ set_blocksize(dev,old_blocksize);
X return res;
X }
X #endif /* CONFIG_AMIGA_PARTITION */
diff -u --recursive --new-file v2.2.3/linux/drivers/block/ide-cd.c linux/drivers/block/ide-cd.c
--- v2.2.3/linux/drivers/block/ide-cd.c Wed Jan 20 23:14:04 1999
+++ linux/drivers/block/ide-cd.c Wed Mar 10 17:01:57 1999
@@ -33,6 +33,7 @@
X * boot
X * -Integrate DVD-ROM support in driver. Thanks to Merete Gotsæd-Petersen
X * of Pioneer Denmark for providing me with a drive for testing.
+ * -Implement Features and Profiles.
X *
X *
X * ----------------------------------
@@ -230,9 +231,23 @@
X * 4.52 Jan 19, 1999 -- Jens Axboe <ax...@image.dk>
X * - Detect DVD-ROM/RAM drives
X *
+ * 4.53 Feb 22, 1999 - Include other model Samsung and one Goldstar
+ * drive in transfer size limit.
+ * - Fix the I/O error when doing eject without a medium
+ * loaded on some drives.
+ * - CDROMREADMODE2 is now implemented through
+ * CDROMREADRAW, since many drives don't support
+ * MODE2 (even though ATAPI 2.6 says they must).
+ * - Added ignore parameter to ide-cd (as a module), eg
+ * insmod ide-cd ignore='hda hdb'
+ * Useful when using ide-cd in conjunction with
+ * ide-scsi. TODO: non-modular way of doing the
+ * same.
+ *
+ *
X *************************************************************************/
X
-#define IDECD_VERSION "4.52"
+#define IDECD_VERSION "4.53"
X
X #include <linux/module.h>
X #include <linux/types.h>
@@ -252,7 +267,6 @@
X #include "ide.h"
X #include "ide-cd.h"
X
-
X /****************************************************************************
X * Generic packet command support and error handling routines.
X */
@@ -1527,6 +1541,10 @@
X CDROM_CONFIG_FLAGS (drive)->no_doorlock = 1;
X stat = 0;
X }
+
+ /* no medium, that's alright. */
+ if (stat != 0 && reqbuf->sense_key == NOT_READY && reqbuf->asc == 0x3a)
+ stat = 0;
X
X if (stat == 0)
X CDROM_STATE_FLAGS (drive)->door_locked = lockflag;
@@ -1806,7 +1824,6 @@
X return cdrom_queue_packet_command (drive, &pc);
X }
X
-
X /* ATAPI cdrom drives are free to select the speed you request or any slower
X rate :-( Requesting too fast a speed will _not_ produce an error. */
X static int
@@ -2092,22 +2109,17 @@
X if (cmd == CDROMREADMODE1) {
X blocksize = CD_FRAMESIZE;
X format = 2;
- } else if (cmd == CDROMREADMODE2) {
- blocksize = CD_FRAMESIZE_RAW0;
- format = 3;
- } else {
+ } else { /* for RAW and MODE2. */
X blocksize = CD_FRAMESIZE_RAW;
X format = 0;
X }
- stat = verify_area (VERIFY_WRITE, (char *)arg, blocksize);
- if (stat) return stat;
+
+ copy_from_user_ret(&msf, (void *)arg, sizeof (msf), -EFAULT);
X
- copy_from_user (&msf, (void *)arg, sizeof (msf));
+ lba = msf_to_lba(msf.cdmsf_min0,
+ msf.cdmsf_sec0,
+ msf.cdmsf_frame0);
X
- lba = msf_to_lba (msf.cdmsf_min0,
- msf.cdmsf_sec0,
- msf.cdmsf_frame0);
-
X /* Make sure the TOC is up to date. */
X stat = cdrom_read_toc (drive, NULL);
X if (stat) return stat;
@@ -2117,14 +2129,21 @@
X if (lba < 0 || lba >= toc->capacity)
X return -EINVAL;
X
- buf = (char *) kmalloc (CD_FRAMESIZE_RAW, GFP_KERNEL);
+ buf = (char *) kmalloc (blocksize, GFP_KERNEL);
X if (buf == NULL)
X return -ENOMEM;
X
X stat = cdrom_read_block (drive, format, lba, 1, buf, blocksize,
X NULL);
- if (stat == 0)
- copy_to_user ((char *)arg, buf, blocksize);
+
+ if (stat == 0) {
+ if (cmd == CDROMREADMODE2) {
+ /* For Mode2, skip the Sync, Header, and Subheader */
+ copy_to_user_ret((char *)arg, buf+16, CD_FRAMESIZE_RAW0, -EFAULT);
+ } else {
+ copy_to_user_ret((char *)arg, buf, blocksize, -EFAULT);
+ }
+ }
X
X kfree (buf);
X return stat;
@@ -2486,14 +2505,12 @@
X static
X int ide_cdrom_reset (struct cdrom_device_info *cdi)
X {
-
X ide_drive_t *drive = (ide_drive_t*) cdi->handle;
X struct request req;
X
X ide_init_drive_cmd (&req);
X req.cmd = RESET_DRIVE_COMMAND;
X return ide_do_drive_cmd (drive, &req, ide_wait);
-
X }
X
X
@@ -2501,9 +2518,10 @@
X int ide_cdrom_tray_move (struct cdrom_device_info *cdi, int position)
X {
X ide_drive_t *drive = (ide_drive_t*) cdi->handle;
+ struct atapi_request_sense rq;
X
X if (position) {
- int stat = cdrom_lockdoor (drive, 0, NULL);
+ int stat = cdrom_lockdoor (drive, 0, &rq);
X if (stat) return stat;
X }
X
@@ -2980,12 +2998,17 @@
X CDROM_CONFIG_FLAGS (drive)->no_eject = 1;
X CDROM_CONFIG_FLAGS (drive)->supp_disc_present = 0;
X
- /* limit transfer size per interrupt. currently only one Samsung
- drive needs this. */
+ /* limit transfer size per interrupt. */
X CDROM_CONFIG_FLAGS (drive)->limit_nframes = 0;
- if (drive->id != NULL)
- if (strcmp (drive->id->model, "SAMSUNG CD-ROM SCR-2432") == 0)
+ if (drive->id != NULL) {
+ if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-2430"))
+ CDROM_CONFIG_FLAGS (drive)->limit_nframes = 1;
+ else if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-2432"))
X CDROM_CONFIG_FLAGS (drive)->limit_nframes = 1;
+ else if (!strcmp (drive->id->model, "GCD-R580B"))
+ CDROM_CONFIG_FLAGS (drive)->limit_nframes = 1;
+ /* 124/SECTORS_PER_FRAME; ? */
+ }
X
X #if ! STANDARD_ATAPI
X /* by default Sanyo 3 CD changer support is turned off and
@@ -3155,7 +3178,13 @@
X NULL
X };
X
+/* options */
+char *ignore = NULL;
+
X #ifdef MODULE
+MODULE_PARM(ignore, "s");
+MODULE_DESCRIPTION("ATAPI CD-ROM Driver");
+
X int init_module (void)
X {
X return ide_cdrom_init();
@@ -3183,6 +3212,12 @@
X
X MOD_INC_USE_COUNT;
X while ((drive = ide_scan_devices (ide_cdrom, ide_cdrom_driver.name, NULL, failed++)) != NULL) {
+ /* skip drives that we were told to ignore */
+ if (ignore != NULL)
+ if (strstr(ignore, drive->name)) {
+ printk("ide-cd: ignoring drive %s\n", drive->name);
+ continue;
+ }
X info = (struct cdrom_info *) kmalloc (sizeof (struct cdrom_info), GFP_KERNEL);
X if (info == NULL) {
X printk ("%s: Can't allocate a cdrom structure\n", drive->name);
diff -u --recursive --new-file v2.2.3/linux/drivers/block/ide-cd.h linux/drivers/block/ide-cd.h
--- v2.2.3/linux/drivers/block/ide-cd.h Wed Jan 20 23:14:04 1999
+++ linux/drivers/block/ide-cd.h Tue Mar 23 13:54:15 1999
@@ -85,6 +85,9 @@
X #define MECHANISM_STATUS 0xbd
X #define READ_CD 0xbe
X
+/* DVD Opcodes */
+#define DVD_GET_PERFORMANCE 0xac
+
X
X /* Page codes for mode sense/set */
X
@@ -562,7 +565,7 @@
X
X /* Sector buffer. If a read request wants only the first part
X of a cdrom block, we cache the rest of the block here,
- in the expectation that that data is going to be wanted soon.
+ in the expectation that the data is going to be wanted soon.
X SECTOR_BUFFERED is the number of the first buffered sector,
X and NSECTORS_BUFFERED is the number of sectors in the buffer.
X Before the buffer is allocated, we should have
@@ -656,6 +659,7 @@
X { PLAY_CD, "Play CD" },
X { MECHANISM_STATUS, "Mechanism Status" },
X { READ_CD, "Read CD" },
+ { DVD_GET_PERFORMANCE, "Get Performance" },
X };
X
X
@@ -776,7 +780,8 @@
X
X { 0x6400, "Illegal mode for this track or incompatible medium" },
X
- { 0xb900, "Play operation oborted (sic)" },
+ /* Following error is misspelled in ATAPI 2.6 */
+ { 0xb900, "Play operation oborted [sic]" },
X
X { 0xbf00, "Loss of streaming" },
X };
diff -u --recursive --new-file v2.2.3/linux/drivers/block/ide-disk.c linux/drivers/block/ide-disk.c
--- v2.2.3/linux/drivers/block/ide-disk.c Tue Feb 23 15:21:33 1999
+++ linux/drivers/block/ide-disk.c Wed Mar 10 17:49:43 1999
@@ -670,10 +670,15 @@
X if (id == NULL)
X return;
X
- /* check for removable disks (eg. SYQUEST), ignore 'WD' drives */
- if (id->config & (1<<7)) { /* removable disk ? */
+ /*
+ * CompactFlash cards and their brethern look just like hard drives
+ * to us, but they are removable and don't have a doorlock mechanism.
+ */
+ if (drive->removable && !drive_is_flashcard(drive)) {
+ /*
+ * Removable disks (eg. SYQUEST); ignore 'WD' drives
+ */
X if (id->model[0] != 'W' || id->model[1] != 'D') {
- drive->removable = 1;
X drive->doorlocking = 1;
X }
X }
@@ -804,12 +809,6 @@
X
X MOD_INC_USE_COUNT;
X while ((drive = ide_scan_devices (ide_disk, idedisk_driver.name, NULL, failed++)) != NULL) {
-
- /* SunDisk drives: ignore "second" drive; can mess up non-Sun systems! FIXME */
- struct hd_driveid *id = drive->id;
- if (id && id->model[0] == 'S' && id->model[1] == 'u' && drive->select.b.unit)
- continue;
-
X if (ide_register_subdriver (drive, &idedisk_driver, IDE_SUBDRIVER_VERSION)) {
X printk (KERN_ERR "ide-disk: %s: Failed to register the driver with ide.c\n", drive->name);
X continue;
diff -u --recursive --new-file v2.2.3/linux/drivers/block/ide-pmac.c linux/drivers/block/ide-pmac.c
--- v2.2.3/linux/drivers/block/ide-pmac.c Thu Nov 19 09:56:28 1998
+++ linux/drivers/block/ide-pmac.c Wed Mar 10 21:48:46 1999
@@ -20,13 +20,19 @@
X #include <linux/kernel.h>
X #include <linux/sched.h>
X #include <linux/init.h>
+#include <linux/delay.h>
X #include <asm/prom.h>
X #include <asm/io.h>
X #include <asm/dbdma.h>
X #include <asm/ide.h>
X #include <asm/mediabay.h>
X #include <asm/feature.h>
+#ifdef CONFIG_PMAC_PBOOK
+#include <asm/adb.h>
+#include <asm/pmu.h>
+#endif
X #include "ide.h"
+#include "ide_modes.h"
X
X ide_ioreg_t pmac_ide_regbase[MAX_HWIFS];
X int pmac_ide_irq[MAX_HWIFS];
@@ -41,6 +47,13 @@
X static int pmac_ide_build_dmatable(ide_drive_t *drive, int wr);
X #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
X
+#ifdef CONFIG_PMAC_PBOOK
+static int idepmac_notify(struct notifier_block *, unsigned long, void *);
+struct notifier_block idepmac_sleep_notifier = {
+ idepmac_notify
+};
+#endif /* CONFIG_PMAC_PBOOK */
+
X /*
X * N.B. this can't be an initfunc, because the media-bay task can
X * call ide_[un]register at any time.
@@ -74,6 +87,23 @@
X }
X }
X
+void pmac_ide_tuneproc(ide_drive_t *drive, byte pio)
+{
+ ide_pio_data_t d;
+
+ if (_machine != _MACH_Pmac)
+ return;
+ pio = ide_get_best_pio_mode(drive, pio, 4, &d);
+ switch (pio) {
+ case 4:
+ out_le32((unsigned *)(IDE_DATA_REG + 0x200), 0x211025);
+ break;
+ default:
+ out_le32((unsigned *)(IDE_DATA_REG + 0x200), 0x2f8526);
+ break;
+ }
+}
+
X __initfunc(void
X pmac_ide_probe(void))
X {
@@ -145,9 +175,10 @@
X pmac_ide_init_hwif_ports(hwif->io_ports, base, &hwif->irq);
X hwif->chipset = ide_generic;
X hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET];
+ hwif->tuneproc = pmac_ide_tuneproc;
X
X #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
- if (np->n_addrs >= 2 && np->n_intrs >= 2) {
+ if (np->n_addrs >= 2) {
X /* has a DBDMA controller channel */
X pmac_ide_setup_dma(np, hwif);
X }
@@ -156,6 +187,10 @@
X ++i;
X }
X pmac_ide_count = i;
+
+#ifdef CONFIG_PMAC_PBOOK
+ notifier_chain_register(&sleep_notifier_list, &idepmac_sleep_notifier);
+#endif /* CONFIG_PMAC_PBOOK */
X }
X
X #ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
@@ -311,5 +346,32 @@
X }
X return 0;
X }
-
X #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
+
+#ifdef CONFIG_PMAC_PBOOK
+static int idepmac_notify(struct notifier_block *this,
+ unsigned long code, void *p)
+{
+ int i, timeout;
+
+ switch (code) {
+ case PBOOK_SLEEP:
+ /* do anything here?? */
+ break;
+ case PBOOK_WAKE:
+ /* wait for the controller(s) to become ready */
+ timeout = 5000;
+ for (i = 0; i < pmac_ide_count; ++i) {
+ unsigned long base = pmac_ide_regbase[i];
+ if (check_media_bay_by_base(base, MB_CD) == -EINVAL)
+ continue;
+ while ((inb(base + 0x70) & BUSY_STAT) && timeout) {
+ mdelay(1);
+ --timeout;
+ }
+ }
+ break;
+ }
+ return NOTIFY_DONE;
+}
+#endif /* CONFIG_PMAC_PBOOK */
diff -u --recursive --new-file v2.2.3/linux/drivers/block/ide-probe.c linux/drivers/block/ide-probe.c
--- v2.2.3/linux/drivers/block/ide-probe.c Tue Feb 23 15:21:33 1999
+++ linux/drivers/block/ide-probe.c Mon Mar 22 12:44:18 1999
@@ -1,5 +1,5 @@
X /*
- * linux/drivers/block/ide-probe.c Version 1.03 Dec 5, 1997
+ * linux/drivers/block/ide-probe.c Version 1.04 March 10, 1999
X *
X * Copyright (C) 1994-1998 Linus Torvalds & authors (see below)
X */
@@ -17,6 +17,7 @@
X * Version 1.02 increase WAIT_PIDENTIFY to avoid CD-ROM locking at boot
X * by Andrea Arcangeli
X * Version 1.03 fix for (hwif->chipset == ide_4drives)
+ * Version 1.04 fixed buggy treatments of known flash memory cards
X */
X
X #undef REALLY_SLOW_IO /* most systems can safely undef this */
@@ -84,16 +85,6 @@
X drive->present = 1;
X
X /*
- * Prevent long system lockup probing later for non-existant
- * slave drive if the hwif is actually a Kodak CompactFlash card.
- */
- if (!strcmp(id->model, "KODAK ATA_FLASH")) {
- ide_drive_t *mate = &HWIF(drive)->drives[1^drive->select.b.unit];
- mate->present = 0;
- mate->noprobe = 1;
- }
-
- /*
X * Check for an ATAPI device
X */
X if (cmd == WIN_PIDENTIFY) {
@@ -137,6 +128,20 @@
X return;
X }
X
+ /*
+ * Not an ATAPI device: looks like a "regular" hard disk
+ */
+ if (id->config & (1<<7))
+ drive->removable = 1;
+ /*
+ * Prevent long system lockup probing later for non-existant
+ * slave drive if the hwif is actually a flash memory card of some variety:
+ */
+ if (drive_is_flashcard(drive)) {
+ ide_drive_t *mate = &HWIF(drive)->drives[1^drive->select.b.unit];
+ mate->present = 0;
+ mate->noprobe = 1;
+ }
X drive->media = ide_disk;
X printk("ATA DISK drive\n");
X return;
diff -u --recursive --new-file v2.2.3/linux/drivers/block/ide.c linux/drivers/block/ide.c
--- v2.2.3/linux/drivers/block/ide.c Wed Mar 10 15:29:45 1999
+++ linux/drivers/block/ide.c Mon Mar 22 12:44:18 1999
@@ -254,6 +254,33 @@
X }
X
X /*
+ * CompactFlash cards and their brethern pretend to be removable hard disks, except:
+ * (1) they never have a slave unit, and
+ * (2) they don't have doorlock mechanisms.
+ * This test catches them, and is invoked elsewhere when setting appropriate config bits.
+ *
+ * FIXME: This treatment is probably applicable for *all* PCMCIA (PC CARD) devices,
+ * so in linux 2.3.x we should change this to just treat all PCMCIA drives this way,
+ * and get rid of the model-name tests below (too big of an interface change for 2.2.x).
+ * At that time, we might also consider parameterizing the timeouts and retries,
+ * since these are MUCH faster than mechanical drives. -M.Lord
+ */
+int drive_is_flashcard (ide_drive_t *drive)
+{
+ struct hd_driveid *id = drive->id;
+
+ if (drive->removable && id != NULL) {
+ if (!strncmp(id->model, "KODAK ATA_FLASH", 15) /* Kodak */
+ || !strncmp(id->model, "Hitachi CV", 10) /* Hitachi */
+ || !strncmp(id->model, "SunDisk SDCFB", 13)) /* SunDisk */
+ {
+ return 1; /* yes, it is a flash memory card */
+ }
+ }
+ return 0; /* no, it is not a flash memory card */
+}
+
+/*
X * ide_system_bus_speed() returns what we think is the system VESA/PCI
X * bus speed (in MHz). This is used for calculating interface PIO timings.
X * The default is 40 for known PCI systems, 50 otherwise.
@@ -2963,6 +2990,7 @@
X /*
X * Probe module
X */
+EXPORT_SYMBOL(drive_is_flashcard);
X EXPORT_SYMBOL(ide_timer_expiry);
X EXPORT_SYMBOL(ide_intr);
X EXPORT_SYMBOL(ide_geninit);
diff -u --recursive --new-file v2.2.3/linux/drivers/block/ide.h linux/drivers/block/ide.h
--- v2.2.3/linux/drivers/block/ide.h Tue Feb 23 15:21:33 1999
+++ linux/drivers/block/ide.h Tue Mar 23 13:54:26 1999
@@ -674,6 +674,13 @@
X */
X struct request **ide_get_queue (kdev_t dev);
X
+/*
+ * CompactFlash cards and their brethern pretend to be removable hard disks,
+ * but they never have a slave unit, and they don't have doorlock mechanisms.
+ * This test catches them, and is invoked elsewhere when setting appropriate config bits.
+ */
+int drive_is_flashcard (ide_drive_t *drive);
+
X int ide_spin_wait_hwgroup(ide_drive_t *drive, unsigned long *flags);
X void ide_timer_expiry (unsigned long data);
X void ide_intr (int irq, void *dev_id, struct pt_regs *regs);
diff -u --recursive --new-file v2.2.3/linux/drivers/block/ide_modes.h linux/drivers/block/ide_modes.h
--- v2.2.3/linux/drivers/block/ide_modes.h Fri Jul 31 17:06:37 1998
+++ linux/drivers/block/ide_modes.h Tue Mar 23 13:54:15 1999
@@ -15,7 +15,7 @@
X * breaking the fragile cmd640.c support.
X */
X
-#if defined(CONFIG_BLK_DEV_CMD640) || defined(CONFIG_IDE_CHIPSETS) || defined(CONFIG_BLK_DEV_OPTI621)
+#if defined(CONFIG_BLK_DEV_CMD640) || defined(CONFIG_IDE_CHIPSETS) || defined(CONFIG_BLK_DEV_OPTI621) || defined(CONFIG_BLK_DEV_IDE_PMAC)
X
X /*
X * Standard (generic) timings for PIO modes, from ATA2 specification.
diff -u --recursive --new-file v2.2.3/linux/drivers/block/ll_rw_blk.c linux/drivers/block/ll_rw_blk.c
--- v2.2.3/linux/drivers/block/ll_rw_blk.c Mon Dec 28 15:00:52 1998
+++ linux/drivers/block/ll_rw_blk.c Thu Mar 11 23:20:14 1999
@@ -392,8 +392,10 @@
X
X lock_buffer(bh);
X
- if (blk_size[major])
- if (blk_size[major][MINOR(bh->b_rdev)] < (sector + count)>>1) {
+ if (blk_size[major]) {
+ unsigned long maxsector = (blk_size[major][MINOR(bh->b_rdev)] << 1) + 1;
+
+ if (maxsector < count || maxsector - count < sector) {
X bh->b_state &= (1 << BH_Lock);
X /* This may well happen - the kernel calls bread()
X without checking the size of the device, e.g.,
@@ -406,6 +408,7 @@
X blk_size[major][MINOR(bh->b_rdev)]);
X goto end_io;
X }
+ }
X
X rw_ahead = 0; /* normal case; gets changed below for READA/WRITEA */
X switch (rw) {
diff -u --recursive --new-file v2.2.3/linux/drivers/block/nbd.c linux/drivers/block/nbd.c
--- v2.2.3/linux/drivers/block/nbd.c Wed Mar 10 15:29:45 1999
+++ linux/drivers/block/nbd.c Tue Mar 9 16:58:05 1999
@@ -418,7 +418,7 @@
X return 0;
X #endif
X case BLKGETSIZE:
- return put_user(nbd_bytesizes[dev] << 9, (long *) arg);
+ return put_user(nbd_bytesizes[dev] >> 9, (long *) arg);
X }
X return -EINVAL;
X }
diff -u --recursive --new-file v2.2.3/linux/drivers/block/ns87415.c linux/drivers/block/ns87415.c
--- v2.2.3/linux/drivers/block/ns87415.c Thu Nov 19 09:56:28 1998
+++ linux/drivers/block/ns87415.c Mon Mar 15 16:11:29 1999
@@ -95,6 +95,12 @@
X byte stat;
X #endif
X
+ /* Set a good latency timer and cache line size value. */
+ (void) pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64);
+#ifdef __sparc_v9__
+ (void) pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 0x10);
+#endif
+
X /*
X * We cannot probe for IRQ: both ports share common IRQ on INTA.
X * Also, leave IRQ masked during drive probing, to prevent infinite
diff -u --recursive --new-file v2.2.3/linux/drivers/block/sl82c105.c linux/drivers/block/sl82c105.c
--- v2.2.3/linux/drivers/block/sl82c105.c Thu Nov 19 09:56:28 1998
+++ linux/drivers/block/sl82c105.c Wed Mar 10 21:48:46 1999
@@ -1,3 +1,4 @@
+#include <linux/config.h>
X #include <linux/types.h>
X #include <linux/kernel.h>
X #include <linux/timer.h>
@@ -19,7 +20,6 @@
X struct pci_dev *dev = hwif->pci_dev;
X unsigned short t16;
X unsigned int t32;
-
X pci_read_config_word(dev, PCI_COMMAND, &t16);
X printk("SL82C105 command word: %x\n",t16);
X t16 |= PCI_COMMAND_IO;
@@ -28,7 +28,9 @@
X pci_read_config_dword(dev, 0x44, &t32);
X printk("IDE timing: %08x, resetting to PIO0 timing\n",t32);
X pci_write_config_dword(dev, 0x44, 0x03e4);
+#ifndef CONFIG_MBX
X pci_read_config_dword(dev, 0x40, &t32);
X printk("IDE control/status register: %08x\n",t32);
X pci_write_config_dword(dev, 0x40, 0x10ff08a1);
+#endif /* CONFIG_MBX */
X }
diff -u --recursive --new-file v2.2.3/linux/drivers/block/swim3.c linux/drivers/block/swim3.c
--- v2.2.3/linux/drivers/block/swim3.c Thu Nov 19 09:56:28 1998
+++ linux/drivers/block/swim3.c Wed Mar 10 21:48:46 1999
@@ -10,6 +10,12 @@
X * 2 of the License, or (at your option) any later version.
X */
X
+/*
+ * TODO:
+ * handle 2 drives
+ * handle GCR disks
+ */
+
X #include <linux/stddef.h>
X #include <linux/kernel.h>
X #include <linux/sched.h>
@@ -52,18 +58,18 @@
X */
X struct swim3 {
X REG(data);
- REG(usecs); /* counts down at 1MHz */
+ REG(timer); /* counts down at 1MHz */
X REG(error);
X REG(mode);
X REG(select); /* controls CA0, CA1, CA2 and LSTRB signals */
- REG(reg5);
+ REG(setup);
X REG(control); /* writing bits clears them */
X REG(status); /* writing bits sets them in control */
X REG(intr);
X REG(nseek); /* # tracks to seek */
X REG(ctrack); /* current track number */
X REG(csect); /* current sector number */
- REG(ssize); /* sector size code?? */
+ REG(gap3); /* size of gap 3 in track format */
X REG(sector); /* sector # to read or write */
X REG(nsect); /* # sectors to read or write */
X REG(intr_enable);
@@ -78,21 +84,46 @@
X
X /* Bits in control register */
X #define DO_SEEK 0x80
+#define FORMAT 0x40
X #define SELECT 0x20
X #define WRITE_SECTORS 0x10
-#define SCAN_TRACK 0x08
+#define DO_ACTION 0x08
+#define DRIVE2_ENABLE 0x04
X #define DRIVE_ENABLE 0x02
X #define INTR_ENABLE 0x01
X
X /* Bits in status register */
+#define FIFO_1BYTE 0x80
+#define FIFO_2BYTE 0x40
+#define ERROR 0x20
X #define DATA 0x08
+#define RDDATA 0x04
+#define INTR_PENDING 0x02
+#define MARK_BYTE 0x01
X
X /* Bits in intr and intr_enable registers */
-#define ERROR 0x20
+#define ERROR_INTR 0x20
X #define DATA_CHANGED 0x10
X #define TRANSFER_DONE 0x08
X #define SEEN_SECTOR 0x04
X #define SEEK_DONE 0x02
+#define TIMER_DONE 0x01
+
+/* Bits in error register */
+#define ERR_DATA_CRC 0x80
+#define ERR_ADDR_CRC 0x40
+#define ERR_OVERRUN 0x04
+#define ERR_UNDERRUN 0x01
+
+/* Bits in setup register */
+#define S_SW_RESET 0x80
+#define S_GCR_WRITE 0x40
+#define S_IBM_DRIVE 0x20
+#define S_TEST_MODE 0x10
+#define S_FCLK_DIV2 0x08
+#define S_GCR 0x04
+#define S_COPY_PROT 0x02
+#define S_INV_WDATA 0x01
X
X /* Select values for swim3_action */
X #define SEEK_POSITIVE 0
@@ -100,14 +131,18 @@
X #define STEP 1
X #define MOTOR_ON 2
X #define MOTOR_OFF 6
+#define INDEX 3
X #define EJECT 7
+#define SETMFM 9
+#define SETGCR 13
X
X /* Select values for swim3_select and swim3_readbit */
X #define STEP_DIR 0
X #define STEPPING 1
X #define MOTOR_ON 2
-#define RELAX 3
+#define RELAX 3 /* also eject in progress */
X #define READ_DATA_0 4
+#define TWOMEG_DRIVE 5
X #define SINGLE_SIDED 6
X #define DRIVE_PRESENT 7
X #define DISK_IN 8
@@ -115,7 +150,25 @@
X #define TRACK_ZERO 10
X #define TACHO 11
X #define READ_DATA_1 12
+#define MFM_MODE 13
X #define SEEK_COMPLETE 14
+#define ONEMEG_MEDIA 15
+
+/* Definitions of values used in writing and formatting */
+#define DATA_ESCAPE 0x99
+#define GCR_SYNC_EXC 0x3f
+#define GCR_SYNC_CONV 0x80
+#define GCR_FIRST_MARK 0xd5
+#define GCR_SECOND_MARK 0xaa
+#define GCR_ADDR_MARK "\xd5\xaa\x00"
+#define GCR_DATA_MARK "\xd5\xaa\x0b"
+#define GCR_SLIP_BYTE "\x27\xaa"
+#define GCR_SELF_SYNC "\x3f\xbf\x1e\x34\x3c\x3f"
+
+#define DATA_99 "\x99\x99"
+#define MFM_ADDR_MARK "\x99\xa1\x99\xa1\x99\xa1\x99\xfe"
+#define MFM_INDEX_MARK "\x99\xc2\x99\xc2\x99\xc2\x99\xfc"
+#define MFM_GAP_LEN 12
X
X struct floppy_state {
X enum swim_state state;
@@ -153,7 +206,7 @@
X 0x4e4e, 0x4e4e, 0x4e4e, 0x4e4e, 0x4e4e, /* gap field */
X 0, 0, 0, 0, 0, 0, /* sync field */
X 0x99a1, 0x99a1, 0x99a1, 0x99fb, /* data address mark */
- 0x990f /* init CRC generator */
+ 0x990f /* no escape for 512 bytes */
X };
X
X static unsigned short write_postamble[] = {
@@ -217,11 +270,11 @@
X volatile struct swim3 *sw = fs->swim3;
X
X swim3_select(fs, action);
- udelay(10);
- sw->select |= LSTRB; eieio();
- udelay(20);
- sw->select &= ~LSTRB; eieio();
- udelay(10);
+ udelay(1);
+ out_8(&sw->select, sw->select | LSTRB);
+ udelay(2);
+ out_8(&sw->select, sw->select & ~LSTRB);
+ udelay(1);
X out_8(&sw->select, RELAX);
X }
X
@@ -328,9 +381,9 @@
X
X swim3_select(fs, READ_DATA_0);
X xx = sw->intr; /* clear SEEN_SECTOR bit */
- out_8(&sw->control_bis, SCAN_TRACK);
+ out_8(&sw->control_bis, DO_ACTION);
X /* enable intr when track found */
- out_8(&sw->intr_enable, ERROR | SEEN_SECTOR);
+ out_8(&sw->intr_enable, ERROR_INTR | SEEN_SECTOR);
X set_timeout(fs, HZ, scan_timeout); /* enable timeout */
X }
X
@@ -349,7 +402,7 @@
X swim3_select(fs, STEP);
X out_8(&sw->control_bis, DO_SEEK);
X /* enable intr when seek finished */
- out_8(&sw->intr_enable, ERROR | SEEK_DONE);
+ out_8(&sw->intr_enable, ERROR_INTR | SEEK_DONE);
X set_timeout(fs, HZ/2, seek_timeout); /* enable timeout */
X }
X
@@ -384,7 +437,7 @@
X swim3_select(fs, fs->head? READ_DATA_1: READ_DATA_0);
X out_8(&sw->sector, fs->req_sector);
X out_8(&sw->nsect, n);
- out_8(&sw->ssize, 0);
+ out_8(&sw->gap3, 0);
X st_le32(&dr->cmdptr, virt_to_bus(cp));
X if (CURRENT->cmd == WRITE) {
X /* Set up 3 dma commands: write preamble, data, postamble */
@@ -400,9 +453,9 @@
X out_le16(&cp->command, DBDMA_STOP);
X out_le32(&dr->control, (RUN << 16) | RUN);
X out_8(&sw->control_bis,
- (CURRENT->cmd == WRITE? WRITE_SECTORS: 0) | SCAN_TRACK);
+ (CURRENT->cmd == WRITE? WRITE_SECTORS: 0) | DO_ACTION);
X /* enable intr when transfer complete */
- out_8(&sw->intr_enable, ERROR | TRANSFER_DONE);
+ out_8(&sw->intr_enable, ERROR_INTR | TRANSFER_DONE);
X set_timeout(fs, 2*HZ, xfer_timeout); /* enable timeout */
X }
X
@@ -445,7 +498,7 @@
X /* wait for SEEK_COMPLETE to become true */
X swim3_select(fs, SEEK_COMPLETE);
X udelay(10);
- out_8(&sw->intr_enable, ERROR | DATA_CHANGED);
+ out_8(&sw->intr_enable, ERROR_INTR | DATA_CHANGED);
X in_8(&sw->intr); /* clear DATA_CHANGED */
X if (in_8(&sw->status) & DATA) {
X /* seek_complete is not yet true */
@@ -487,7 +540,7 @@
X volatile struct swim3 *sw = fs->swim3;
X
X fs->timeout_pending = 0;
- out_8(&sw->control_bic, SCAN_TRACK);
+ out_8(&sw->control_bic, DO_ACTION);
X out_8(&sw->select, RELAX);
X out_8(&sw->intr_enable, 0);
X fs->cur_cyl = -1;
@@ -537,7 +590,7 @@
X fs->timeout_pending = 0;
X st_le32(&dr->control, RUN << 16);
X out_8(&sw->intr_enable, 0);
- out_8(&sw->control_bic, WRITE_SECTORS | SCAN_TRACK);
+ out_8(&sw->control_bic, WRITE_SECTORS | DO_ACTION);
X out_8(&sw->select, RELAX);
X if (CURRENT->cmd == WRITE)
X ++cp;
@@ -568,13 +621,13 @@
X #if 0
X printk("swim3 intr state=%d intr=%x err=%x\n", fs->state, intr, err);
X #endif
- if ((intr & ERROR) && fs->state != do_transfer)
+ if ((intr & ERROR_INTR) && fs->state != do_transfer)
X printk(KERN_ERR "swim3_interrupt, state=%d, cmd=%x, intr=%x, err=%x\n",
X fs->state, CURRENT->cmd, intr, err);
X switch (fs->state) {
X case locating:
X if (intr & SEEN_SECTOR) {
- out_8(&sw->control_bic, SCAN_TRACK);
+ out_8(&sw->control_bic, DO_ACTION);
X out_8(&sw->select, RELAX);
X out_8(&sw->intr_enable, 0);
X del_timer(&fs->timeout);
@@ -622,13 +675,13 @@
X act(fs);
X break;
X case do_transfer:
- if ((intr & (ERROR | TRANSFER_DONE)) == 0)
+ if ((intr & (ERROR_INTR | TRANSFER_DONE)) == 0)
X break;
X dr = fs->dma;
X cp = fs->dma_cmd;
X st_le32(&dr->control, RUN << 16);
X out_8(&sw->intr_enable, 0);
- out_8(&sw->control_bic, WRITE_SECTORS | SCAN_TRACK);
+ out_8(&sw->control_bic, WRITE_SECTORS | DO_ACTION);
X out_8(&sw->select, RELAX);
X del_timer(&fs->timeout);
X fs->timeout_pending = 0;
@@ -636,7 +689,7 @@
X ++cp;
X stat = ld_le16(&cp->xfer_status);
X resid = ld_le16(&cp->res_count);
- if (intr & ERROR) {
+ if (intr & ERROR_INTR) {
X n = fs->scount - 1 - resid / 512;
X if (n > 0) {
X CURRENT->sector += n;
@@ -800,6 +853,8 @@
X
X if (devnum >= floppy_count)
X return -ENODEV;
+ if (filp == 0)
+ return -EIO;
X
X fs = &floppy_states[devnum];
X sw = fs->swim3;
@@ -809,7 +864,7 @@
X return -ENXIO;
X out_8(&sw->mode, 0x95);
X out_8(&sw->control_bic, 0xff);
- out_8(&sw->reg5, 0x28);
+ out_8(&sw->setup, S_IBM_DRIVE | S_FCLK_DIV2);
X udelay(10);
X out_8(&sw->intr_enable, 0);
X out_8(&sw->control_bis, DRIVE_ENABLE | INTR_ENABLE);
@@ -834,14 +889,14 @@
X } else if (fs->ref_count == -1 || filp->f_flags & O_EXCL)
X return -EBUSY;
X
- if (err == 0 && filp && (filp->f_flags & O_NDELAY) == 0
+ if (err == 0 && (filp->f_flags & O_NDELAY) == 0
X && (filp->f_mode & 3)) {
X check_disk_change(inode->i_rdev);
X if (fs->ejected)
X err = -ENXIO;
X }
X
- if (err == 0 && filp && (filp->f_flags & (O_WRONLY | O_RDWR))) {
+ if (err == 0 && (filp->f_mode & 2)) {
X if (fs->write_prot < 0)
X fs->write_prot = swim3_readbit(fs, WRITE_PROT);
X if (fs->write_prot)
@@ -977,10 +1032,14 @@
X
X if (devnum >= floppy_count)
X return -ENODEV;
-
+ check_disk_change(inode->i_rdev);
X fs = &floppy_states[devnum];
X if (fs->ejected)
X return -ENXIO;
+ if (fs->write_prot < 0)
+ fs->write_prot = swim3_readbit(fs, WRITE_PROT);
+ if (fs->write_prot)
+ return -EROFS;
X return block_write(filp, buf, count, ppos);
X }
X
diff -u --recursive --new-file v2.2.3/linux/drivers/cdrom/cdrom.c linux/drivers/cdrom/cdrom.c
--- v2.2.3/linux/drivers/cdrom/cdrom.c Tue Jan 19 11:32:51 1999
+++ linux/drivers/cdrom/cdrom.c Sun Mar 21 18:37:56 1999
@@ -24,8 +24,9 @@
X
X -- Change the CDROMREADMODE1, CDROMREADMODE2, CDROMREADAUDIO, and
X CDROMREADRAW ioctls so they go through the Uniform CD-ROM driver.
-
-
+
+ -- Sync options and capability flags.
+
X
X
X Revision History
@@ -97,17 +98,33 @@
X cdi->options in various ioctl.
X -- Added version to proc entry.
X
- 2.52 Jan 16, 1998 - Jens Axboe <ax...@image.dk>
+ 2.52 Jan 16, 1999 - Jens Axboe <ax...@image.dk>
X -- Fixed an error in open_for_data where we would sometimes not return
X the correct error value. Thanks Huba Gaspar <hu...@softcell.hu>.
X -- Fixed module usage count - usage was based on /proc/sys/dev
X instead of /proc/sys/dev/cdrom. This could lead to an oops when other
- modules had entries in dev.
+ modules had entries in dev. Feb 02 - real bug was in sysctl.c where
+ dev would be removed even though it was used. cdrom.c just illuminated
+ that bug.
+
+ 2.53 Feb 22, 1999 - Jens Axboe <ax...@image.dk>
+ -- Fixup of several ioctl calls, in particular CDROM_SET_OPTIONS has
+ been "rewritten" because capabilities and options aren't in sync. They
+ should be...
+ -- Added CDROM_LOCKDOOR ioctl. Locks the door and keeps it that way.
+ -- Added CDROM_RESET ioctl.
+ -- Added CDROM_DEBUG ioctl. Enable debug messages on-the-fly.
+ -- Added CDROM_GET_CAPABILITY ioctl. This relieves userspace programs
+ from parsing /proc/sys/dev/cdrom/info.
+
+ 2.54 Mar 15, 1999 - Jens Axboe <ax...@image.dk>
+ -- Check capability mask from low level driver when counting tracks as
+ per suggestion from Corey J. Scotts <cst...@blue.weeg.uiowa.edu>.
X
X -------------------------------------------------------------------------*/
X
-#define REVISION "Revision: 2.52"
-#define VERSION "Id: cdrom.c 2.52 1999/01/16"
+#define REVISION "Revision: 2.54"
+#define VERSION "Id: cdrom.c 2.54 1999/03/15"
X
X /* I use an error-log mask to give fine grain control over the type of
X messages dumped to the system logs. The available masks include: */
@@ -144,6 +161,8 @@
X
X /* used to tell the module to turn on full debugging messages */
X static int debug = 0;
+/* used to keep tray locked at all times */
+static int keeplocked = 0;
X /* default compatibility mode */
X static int autoclose=1;
X static int autoeject=0;
@@ -164,13 +183,11 @@
X #endif
X
X /* These are used to simplify getting data in from and back to user land */
-#define IOCTL_IN(arg, type, in) { \
- if ( copy_from_user(&in, (type *) arg, sizeof in) ) \
- return -EFAULT; }
-
-#define IOCTL_OUT(arg, type, out) { \
- if ( copy_to_user((type *) arg, &out, sizeof out) ) \
- return -EFAULT; }
+#define IOCTL_IN(arg, type, in) \
+ copy_from_user_ret(&in, (type *) arg, sizeof in, -EFAULT)
+
+#define IOCTL_OUT(arg, type, out) \
+ copy_to_user_ret((type *) arg, &out, sizeof out, -EFAULT)
X
X
X #define FM_WRITE 0x2 /* file mode write bit */
@@ -328,7 +345,7 @@
X if (fp->f_mode & FM_WRITE)
X return -EROFS;
X purpose = purpose || !(cdi->options & CDO_USE_FFLAGS);
- if (cdi->use_count || purpose)
+ if (purpose)
X ret = cdi->ops->open(cdi, purpose);
X else
X ret = open_for_data(cdi);
@@ -517,10 +534,10 @@
X if (cdi->use_count == 0)
X cdinfo(CD_CLOSE, "Use count for \"/dev/%s\" now zero\n", cdi->name);
X if (cdi->use_count == 0 && /* last process that closes dev*/
- cdo->capability & CDC_LOCK) {
+ cdo->capability & CDC_LOCK && !keeplocked) {
X cdinfo(CD_CLOSE, "Unlocking door!\n");
X cdo->lock_door(cdi, 0);
- }
+ }
X opened_for_data = !(cdi->options & CDO_USE_FFLAGS) ||
X !(fp && fp->f_flags & O_NONBLOCK);
X cdo->release(cdi);
@@ -588,14 +605,17 @@
X tracks->xa=0;
X tracks->error=0;
X cdinfo(CD_COUNT_TRACKS, "entering cdrom_count_tracks\n");
- if (!(cdi->ops->capability & CDC_PLAY_AUDIO)) {
+ if (!(cdi->ops->capability & ~cdi->mask & CDC_PLAY_AUDIO)) {
X tracks->error=CDS_NO_INFO;
X return;
X }
X /* Grab the TOC header so we can see how many tracks there are */
- ret=cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header);
+ ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header);
X if (ret) {
- tracks->error=(ret == -ENOMEDIUM) ? CDS_NO_DISC : CDS_NO_INFO;
+ if (ret == -ENOMEDIUM)
+ tracks->error = CDS_NO_DISC;
+ else
+ tracks->error = CDS_NO_INFO;
X return;
X }
X /* check what type of tracks are on this disc */
@@ -716,18 +736,18 @@
X cdinfo(CD_DO_IOCTL, "entering CDROMEJECT\n");
X if (!(cdo->capability & ~cdi->mask & CDC_OPEN_TRAY))
X return -ENOSYS;
- if (cdi->use_count != 1)
+ if (cdi->use_count != 1 || keeplocked)
X return -EBUSY;
- if (cdo->capability & ~cdi->mask & CDC_LOCK) {
+ if (cdo->capability & ~cdi->mask & CDC_LOCK)
X if ((ret=cdo->lock_door(cdi, 0)))
X return ret;
- }
+
X return cdo->tray_move(cdi, 1);
X }
X
X case CDROMCLOSETRAY:
X cdinfo(CD_DO_IOCTL, "entering CDROMCLOSETRAY\n");
- if (!(cdo->capability & ~cdi->mask & CDC_OPEN_TRAY))
+ if (!(cdo->capability & ~cdi->mask & CDC_CLOSE_TRAY))
X return -ENOSYS;
X return cdo->tray_move(cdi, 0);
X
@@ -735,6 +755,8 @@
X cdinfo(CD_DO_IOCTL, "entering CDROMEJECT_SW\n");
X if (!(cdo->capability & ~cdi->mask & CDC_OPEN_TRAY))
X return -ENOSYS;
+ if (keeplocked)
+ return -EBUSY;
X cdi->options &= ~(CDO_AUTO_CLOSE | CDO_AUTO_EJECT);
X if (arg)
X cdi->options |= CDO_AUTO_CLOSE | CDO_AUTO_EJECT;
@@ -755,8 +777,23 @@
X
X case CDROM_SET_OPTIONS:
X cdinfo(CD_DO_IOCTL, "entering CDROM_SET_OPTIONS\n");
- if (cdo->capability & arg & ~cdi->mask)
- return -ENOSYS;
+ /* options need to be in sync with capability. too late for
+ that, so we have to check each one separately... */
+ switch (arg) {
+ case CDO_USE_FFLAGS:
+ case CDO_CHECK_TYPE:
+ break;
+ case CDO_LOCK:
+ if (!(cdo->capability & ~cdi->mask & CDC_LOCK))
+ return -ENOSYS;
+ break;
+ case 0:
+ return cdi->options;
+ /* default is basically CDO_[AUTO_CLOSE|AUTO_EJECT] */
+ default:
+ if (!(cdo->capability & ~cdi->mask & arg))
+ return -ENOSYS;
+ }
X cdi->options |= (int) arg;
X return cdi->options;
X
@@ -783,6 +820,36 @@
X return cdo->select_disc(cdi, arg);
X }
X
+ case CDROMRESET: {
+ cdinfo(CD_DO_IOCTL, "entering CDROM_RESET\n");
+ if (!(cdo->capability & ~cdi->mask & CDC_RESET))
+ return -ENOSYS;
+ return cdo->reset(cdi);
+ }
+
+ case CDROM_LOCKDOOR: {
+ cdinfo(CD_DO_IOCTL, "%socking door.\n",arg?"L":"Unl");
+ if (!(cdo->capability & ~cdi->mask & CDC_LOCK)) {
+ return -EDRIVE_CANT_DO_THIS;
+ } else {
+ keeplocked = arg ? 1 : 0;
+ return cdo->lock_door(cdi, arg);
+ }
+ }
+
+ case CDROM_DEBUG: {
+ if (!capable(CAP_SYS_ADMIN))
+ return -EACCES;
+ cdinfo(CD_DO_IOCTL, "%sabling debug.\n",arg?"En":"Dis");
+ debug = arg ? 1 : 0;
+ return debug;
+ }
+
+ case CDROM_GET_CAPABILITY: {
+ cdinfo(CD_DO_IOCTL, "entering CDROM_GET_CAPABILITY\n");
+ return cdo->capability;
+ }
+
X /* The following function is implemented, although very few audio
X * discs give Universal Product Code information, which should just be
X * the Medium Catalog Number on the box. Note, that the way the code
@@ -1123,7 +1190,7 @@
X return;
X
X cdrom_sysctl_header = register_sysctl_table(cdrom_root_table, 1);
- cdrom_root_table->de->fill_inode = &cdrom_procfs_modcount;
+ cdrom_root_table->child->de->fill_inode = &cdrom_procfs_modcount;
X
X initialized = 1;
X }
diff -u --recursive --new-file v2.2.3/linux/drivers/cdrom/cm206.c linux/drivers/cdrom/cm206.c
--- v2.2.3/linux/drivers/cdrom/cm206.c Thu Sep 17 17:53:35 1998
+++ linux/drivers/cdrom/cm206.c Wed Mar 10 17:01:57 1999
@@ -186,7 +186,6 @@
X #include <linux/mm.h>
X #include <linux/malloc.h>
X #include <linux/init.h>
-#include <linux/interrupt.h>
X
X /* #include <linux/ucdrom.h> */
X
diff -u --recursive --new-file v2.2.3/linux/drivers/char/Makefile linux/drivers/char/Makefile
--- v2.2.3/linux/drivers/char/Makefile Wed Mar 10 15:29:45 1999
+++ linux/drivers/char/Makefile Mon Mar 15 16:11:29 1999
@@ -44,12 +44,17 @@
X ifdef CONFIG_VT
X L_OBJS += keyboard.o
X endif
-ifneq ($(ARCH),m68k)
-L_OBJS += pc_keyb.o defkeymap.o
+ ifneq ($(ARCH),m68k)
+ L_OBJS += pc_keyb.o defkeymap.o
+ endif
+else
+ifdef CONFIG_PCI
+L_OBJS += defkeymap.o keyboard.o
X endif
-ifdef CONFIG_MAGIC_SYSRQ
-L_OBJS += sysrq.o
X endif
+
+ifdef CONFIG_MAGIC_SYSRQ
+LX_OBJS += sysrq.o
X endif
X
X ifeq ($(CONFIG_ATARI_DSP56K),y)
diff -u --recursive --new-file v2.2.3/linux/drivers/char/README.epca linux/drivers/char/README.epca
--- v2.2.3/linux/drivers/char/README.epca Fri Jan 8 22:36:05 1999
+++ linux/drivers/char/README.epca Tue Mar 16 14:21:35 1999
@@ -504,3 +504,14 @@
X Files affected : epca.c
X Release version : 1.1.1 (BETA)
X -----------------------------------------------------------------------
+Programmer : Daniel Taylor
+Date : March 11, 1999
+Description (Verbose) : Updated driver:
+ 1. Simultaneous data and modem change events were
+ resulting in the modem change events not being
+ recognized. Fixed.
+ 2. Modified pc_info device name to work better
+ with devfs.
+Files affected : epca.c
+Release version : 1.3.0-K
+-----------------------------------------------------------------------
diff -u --recursive --new-file v2.2.3/linux/drivers/char/bw-qcam.c linux/drivers/char/bw-qcam.c
--- v2.2.3/linux/drivers/char/bw-qcam.c Sun Nov 8 14:02:53 1998
+++ linux/drivers/char/bw-qcam.c Wed Mar 10 17:03:52 1999
@@ -5,6 +5,28 @@
X *
X * Video4Linux conversion work by Alan Cox.
X * Parport compatibility by Phil Blundell.
+ * Busy loop avoidance by Mark Cooke.
+ *
+ * Module parameters:
+ *
+ * maxpoll=<1 - 5000>
+ *
+ * When polling the QuickCam for a response, busy-wait for a
+ * maximum of this many loops. The default of 250 gives little
+ * impact on interactive response.
+ *
+ * NOTE: If this parameter is set too high, the processor
+ * will busy wait until this loop times out, and then
+ * slowly poll for a further 5 seconds before failing
+ * the transaction. You have been warned.
+ *
+ * yieldlines=<1 - 250>
+ *
+ * When acquiring a frame from the camera, the data gathering
+ * loop will yield back to the scheduler after completing
+ * this many lines. The default of 4 provides a trade-off
+ * between increased frame acquisition time and impact on
+ * interactive response.
X */
X
X /* qcam-lib.c -- Library for programming with the Connectix QuickCam.
@@ -58,6 +80,14 @@
X
X #include "bw-qcam.h"
X
+#if LINUX_VERSION_CODE >= 0x020117
+MODULE_PARM(maxpoll,"i");
+MODULE_PARM(yieldlines,"i");
+#endif
+
+static unsigned int maxpoll=250; /* Maximum busy-loop count for qcam I/O */
+static unsigned int yieldlines=4; /* Yield after this many during capture */
+
X extern __inline__ int read_lpstatus(struct qcam_device *q)
X {
X return parport_read_status(q->pport);
@@ -154,6 +184,7 @@
X q->top = 1;
X q->left = 14;
X q->mode = -1;
+ q->status = QC_PARAM_CHANGE;
X return q;
X }
X
@@ -209,14 +240,17 @@
X {
X /* 1000 is enough spins on the I/O for all normal
X cases, at that point we start to poll slowly
- until the camera wakes up */
+ until the camera wakes up. However, we are
+ busy blocked until the camera responds, so
+ setting it lower is much better for interactive
+ response. */
X
- if(runs++>1000)
+ if(runs++>maxpoll)
X {
X current->state=TASK_INTERRUPTIBLE;
- schedule_timeout(HZ/10);
+ schedule_timeout(HZ/200);
X }
- if(runs>1050)
+ if(runs>(maxpoll+1000)) /* 5 seconds */
X return -1;
X }
X }
@@ -226,14 +260,17 @@
X {
X /* 1000 is enough spins on the I/O for all normal
X cases, at that point we start to poll slowly
- until the camera wakes up */
+ until the camera wakes up. However, we are
+ busy blocked until the camera responds, so
+ setting it lower is much better for interactive
+ response. */
X
- if(runs++>1000)
+ if(runs++>maxpoll)
X {
X current->state=TASK_INTERRUPTIBLE;
- schedule_timeout(HZ/10);
+ schedule_timeout(HZ/200);
X }
- if(runs++>1050) /* 5 seconds */
+ if(runs++>(maxpoll+1000)) /* 5 seconds */
X return -1;
X }
X }
@@ -256,14 +293,17 @@
X status = read_lpdata(q);
X /* 1000 is enough spins on the I/O for all normal
X cases, at that point we start to poll slowly
- until the camera wakes up */
+ until the camera wakes up. However, we are
+ busy blocked until the camera responds, so
+ setting it lower is much better for interactive
+ response. */
X
- if(runs++>1000)
+ if(runs++>maxpoll)
X {
X current->state=TASK_INTERRUPTIBLE;
- schedule_timeout(HZ/10);
+ schedule_timeout(HZ/200);
X }
- if(runs++>1050) /* 5 seconds */
+ if(runs++>(maxpoll+1000)) /* 5 seconds */
X return 0;
X }
X while ((status & 1) != val);
@@ -287,7 +327,7 @@
X
X lastreg = reg = read_lpstatus(q) & 0xf0;
X
- for (i = 0; i < 300; i++)
+ for (i = 0; i < 500; i++)
X {
X reg = read_lpstatus(q) & 0xf0;
X if (reg != lastreg)
@@ -296,9 +336,20 @@
X mdelay(2);
X }
X
- /* Be liberal in what you accept... */
X
- if (count > 30 && count < 200)
+#if 0
+ /* Force camera detection during testing. Sometimes the camera
+ won't be flashing these bits. Possibly unloading the module
+ in the middle of a grab? Or some timeout condition?
+ I've seen this parameter as low as 19 on my 450Mhz box - mpc */
+ printk("Debugging: QCam detection counter <30-200 counts as detected>: %d\n", count);
+ return 1;
+#endif
+
+ /* Be (even more) liberal in what you accept... */
+
+/* if (count > 30 && count < 200) */
+ if (count > 20 && count < 300)
X return 1; /* found */
X else
X return 0; /* not found */
@@ -352,6 +403,8 @@
X
X static int qc_setscanmode(struct qcam_device *q)
X {
+ int old_mode = q->mode;
+
X switch (q->transfer_scale)
X {
X case 1:
@@ -383,6 +436,10 @@
X case QC_UNIDIR:
X break;
X }
+
+ if (q->mode != old_mode)
+ q->status |= QC_PARAM_CHANGE;
+
X return 0;
X }
X
@@ -434,8 +491,11 @@
X qc_command(q, q->contrast);
X qc_command(q, 0x1f);
X qc_command(q, q->whitebal);
-}
X
+ /* Clear flag that we must update the grabbing parameters on the camera
+ before we grab the next frame */
+ q->status &= (~QC_PARAM_CHANGE);
+}
X
X /* Qc_readbytes reads some bytes from the QC and puts them in
X the supplied buffer. It returns the number of bytes read,
@@ -539,7 +599,7 @@
X
X long qc_capture(struct qcam_device * q, char *buf, unsigned long len)
X {
- int i, j, k;
+ int i, j, k, yield;
X int bytes;
X int linestotrans, transperline;
X int divisor;
@@ -575,7 +635,7 @@
X q->transfer_scale;
X transperline = (transperline + divisor - 1) / divisor;
X
- for (i = 0; i < linestotrans; i++)
+ for (i = 0, yield = yieldlines; i < linestotrans; i++)
X {
X for (pixels_read = j = 0; j < transperline; j++)
X {
@@ -599,6 +659,18 @@
X pixels_read += bytes;
X }
X (void) qc_readbytes(q, 0); /* reset state machine */
+
+ /* Grabbing an entire frame from the quickcam is a lengthy
+ process. We don't (usually) want to busy-block the
+ processor for the entire frame. yieldlines is a module
+ parameter. If we yield every line, the minimum frame
+ time will be 240 / 200 = 1.2 seconds. The compile-time
+ default is to yield every 4 lines. */
+ if (i >= yield) {
+ current->state=TASK_INTERRUPTIBLE;
+ schedule_timeout(HZ/200);
+ yield = i + yieldlines;
+ }
X }
X
X if ((q->port_mode & QC_MODE_MASK) == QC_BIDIR)
@@ -745,9 +817,12 @@
X qcam->bpp = p.depth;
X
X qc_setscanmode(qcam);
- parport_claim_or_block(qcam->pdev);
+ qcam->status |= QC_PARAM_CHANGE;
+
+/* parport_claim_or_block(qcam->pdev);
X qc_set(qcam);
X parport_release(qcam->pdev);
+*/
X return 0;
X }
X case VIDIOCSWIN:
@@ -779,6 +854,11 @@
X qcam->transfer_scale = 1;
X }
X qc_setscanmode(qcam);
+
+ /* We must update the camera before we grab. We could
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 11'
echo 'File patch-2.2.4 is continued in part 12'
echo 12 > _shar_seq_.tmp
#!/bin/sh
# this is part 17 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 17; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
-0x14400028, 0xaee37b7c, 0x8f820044, 0x38420020, 0xaf820044, 0x8001b33,
-0xaee07b7c, 0x8ee204c4, 0x30420001, 0x10400011, 0x0, 0x8f420218,
-0x30420080, 0x10400009, 0x0, 0x8f820044, 0x34420020, 0xaf820044,
-0x8f820044, 0x2403ffbf, 0x431024, 0x8001b31, 0xaf820044, 0x8f820044,
-0x34420060, 0x8001b31, 0xaf820044, 0x8f820044, 0x34420040, 0xaf820044,
-0x8ee27b78, 0x24430001, 0x28421389, 0x14400005, 0xaee37b78, 0x8f820044,
-0x38420020, 0xaf820044, 0xaee07b78, 0xc00457c, 0x0, 0x8fbf0024,
-0x8fb00020, 0x3e00008, 0x27bd0028, 0x0, 0x27bdffb8, 0xafbf0044,
-0xafb60040, 0xafb5003c, 0xafb40038, 0xafb30034, 0xafb20030, 0xafb1002c,
-0xafb00028, 0x8f960064, 0x32c20004, 0x1040000c, 0x24020004, 0xaf820064,
-0x8f420114, 0xaee204d0, 0x8f820060, 0x34420008, 0xaf820060, 0x8ee20168,
-0x24420001, 0xaee20168, 0x80022ee, 0x8ee20168, 0x32c20001, 0x10400004,
-0x24020001, 0xaf820064, 0x80022ee, 0x0, 0x32c20002, 0x1440000c,
-0x3c050003, 0x3c040001, 0x24844714, 0x34a50001, 0x2c03021, 0x3821,
-0xafa00010, 0xc002403, 0xafa00014, 0x2402fff8, 0x80022ee, 0xaf820064,
-0x8f43022c, 0x8f42010c, 0x5062000c, 0xafa00010, 0x8f42022c, 0x21080,
-0x5a1021, 0x8c420300, 0xafa20020, 0x8f42022c, 0x24070001, 0x24420001,
-0x3042003f, 0x8001b7c, 0xaf42022c, 0x3c040001, 0x24844720, 0xafa00014,
-0x8f46022c, 0x8f47010c, 0x3c050003, 0xc002403, 0x34a5f01f, 0x3821,
-0x14e00003, 0x0, 0x80022e7, 0xaf960064, 0x93a20020, 0x2443ffff,
-0x2c620011, 0x10400656, 0x31080, 0x3c010001, 0x220821, 0x8c2247d8,
-0x400008, 0x0, 0x8fa20020, 0x30420fff, 0xaee20dfc, 0x8f820060,
-0x34420200, 0xaf820060, 0x8ee20118, 0x24420001, 0xaee20118, 0x80022e2,
-0x8ee20118, 0x8fa20020, 0x24030001, 0x3c010001, 0x370821, 0xa02383a1,
-0x30420fff, 0xaee25228, 0x8f820060, 0x34420100, 0xaf820060, 0x8ee20144,
-0x24420001, 0xaee20144, 0x80022e2, 0x8ee20144, 0x8fa20020, 0x21200,
-0x22502, 0x24020001, 0x10820005, 0x24020002, 0x10820009, 0x2402fffe,
-0x8001bc5, 0xafa00010, 0x8ee204c4, 0xaee40070, 0xaee40074, 0x34420001,
-0x8001bb9, 0xaee204c4, 0x8ee304c4, 0xaee40070, 0xaee40074, 0x621824,
-0xaee304c4, 0x8f840054, 0x41442, 0x41c82, 0x431021, 0x41cc2,
-0x431023, 0x41d02, 0x431021, 0x41d42, 0x431023, 0x8001bcc,
-0xaee20078, 0x3c040001, 0x2484472c, 0xafa00014, 0x8fa60020, 0x3c050003,
-0xc002403, 0x34a50004, 0x8ee20110, 0x24420001, 0xaee20110, 0x80022e2,
-0x8ee20110, 0x27440212, 0xc0022f8, 0x24050006, 0x3049001f, 0x920c0,
-0x2e41021, 0x9442726c, 0x30424000, 0x1040000a, 0x971021, 0x97430212,
-0xa443726e, 0x8f430214, 0x971021, 0xac437270, 0x2e41821, 0x34028000,
-0x8001c75, 0xa462726c, 0x9443726e, 0x97420212, 0x14620006, 0x2e41021,
-0x971021, 0x8c437270, 0x8f420214, 0x1062009f, 0x2e41021, 0x9442726c,
-0x30428000, 0x1040002a, 0x2406ffff, 0x2021, 0x410c0, 0x2e21021,
-0x9442736c, 0x30424000, 0x54400005, 0x803021, 0x24840001, 0x2c820080,
-0x1440fff8, 0x410c0, 0x4c10010, 0x618c0, 0x610c0, 0x571821,
-0x8c63736c, 0x571021, 0xafa30010, 0x8c427370, 0x3c040001, 0x24844738,
-0xafa20014, 0x8f470214, 0x3c050003, 0xc002403, 0x34a50013, 0x8001c8c,
-0x3c020800, 0x97440212, 0x771021, 0xa444736e, 0x8f440214, 0x771021,
-0x2e31821, 0xac447370, 0x34028000, 0xa462736c, 0x910c0, 0x2e21021,
-0x8001c75, 0xa446726c, 0x2e41021, 0x9445726c, 0x8001c2a, 0x510c0,
-0x9443736e, 0x97420212, 0x14620006, 0x510c0, 0x971021, 0x8c437370,
-0x8f420214, 0x10620065, 0x510c0, 0x2e21021, 0x9445736c, 0x510c0,
-0x2e21021, 0x9442736c, 0x30428000, 0x1040fff0, 0x971021, 0x520c0,
-0x971021, 0x9443736e, 0x97420212, 0x14620006, 0x2406ffff, 0x971021,
-0x8c437370, 0x8f420214, 0x10620053, 0x3c020800, 0x2021, 0x410c0,
-0x2e21021, 0x9442736c, 0x30424000, 0x54400005, 0x803021, 0x24840001,
-0x2c820080, 0x1440fff8, 0x410c0, 0x4c10023, 0x618c0, 0x910c0,
-0x571821, 0x8c63726c, 0x571021, 0xafa30010, 0x8c427270, 0x3c040001,
-0x24844744, 0xafa20014, 0x8f470214, 0x3c050003, 0xc002403, 0x34a5f017,
-0x8001c8c, 0x3c020800, 0x8f430210, 0xb71021, 0xac43776c, 0x8f430214,
-0xb71021, 0xac437770, 0x3c020001, 0x571021, 0x8c4283a4, 0x24420001,
-0x3c010001, 0x370821, 0xac2283a4, 0x3c030001, 0x771821, 0x8c6383a4,
-0x2e51021, 0x8001c7e, 0xa443776c, 0x97440212, 0x771021, 0xa444736e,
-0x8f440214, 0x771021, 0x2e31821, 0xac447370, 0x34028000, 0xa462736c,
-0x510c0, 0x2e21021, 0xa446736c, 0x2021, 0x428c0, 0x2e51021,
-0x9442776c, 0x1040ffdc, 0x24840001, 0x2c820080, 0x5440fffa, 0x428c0,
-0x92e204c8, 0x10400006, 0x24020001, 0x8ee304cc, 0x1221004, 0x621825,
-0x8001c8b, 0xaee304cc, 0x8f830228, 0x24020001, 0x1221004, 0x621825,
-0xaf830228, 0x3c020800, 0x34421000, 0xafa20018, 0x8ee205f8, 0x8f430228,
-0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee205f8, 0x210c0,
-0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f830054,
-0x8f820054, 0x24690032, 0x1221023, 0x2c420033, 0x1040006a, 0x5821,
-0x24100008, 0x240f000d, 0x240d0007, 0x240c0040, 0x240e0001, 0x8f870120,
-0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128,
-0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0,
-0x3821, 0x24420001, 0xaee201a0, 0x8001d04, 0x8ee201a0, 0x8ee405f8,
-0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b,
-0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee205f8, 0xa4f0000e,
-0xacef0018, 0xacea001c, 0x210c0, 0x244205fc, 0x2e21021, 0xace20008,
-0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, 0x14400033, 0x24070001,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x144d001f,
-0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004,
-0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x104c0007,
-0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x8001cf1,
-0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128,
-0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x8001d04,
-0x0, 0x8ee24e20, 0x24420001, 0x504c0003, 0x1021, 0x8ee24e20,
-0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0xac8d0000, 0xac8e0004, 0x54e00006, 0x240b0001, 0x8f820054, 0x1221023,
-0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, 0x24020001, 0x54620078,
-0xafa00010, 0xaeea05f8, 0x8f830054, 0x8f820054, 0x24690032, 0x1221023,
-0x2c420033, 0x10400061, 0x5821, 0x240e0008, 0x240d0011, 0x240a0012,
-0x24080040, 0x240c0001, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
-0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124,
-0x14c20007, 0x0, 0x8ee201a0, 0x3821, 0x24420001, 0xaee201a0,
-0x8001d70, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490, 0x8ee50494,
-0x2462001c, 0xac620008, 0xa46e000e, 0xac6d0018, 0xac640000, 0xac650004,
-0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400033, 0x24070001,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x144a001f,
-0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004,
-0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x10480007,
-0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x8001d5d,
-0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128,
-0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x8001d70,
-0x0, 0x8ee24e20, 0x24420001, 0x50480003, 0x1021, 0x8ee24e20,
-0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0xac8a0000, 0xac8c0004, 0x54e00006, 0x240b0001, 0x8f820054, 0x1221023,
-0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, 0x10620022,
-0x0, 0x3c040001, 0x24844750, 0xafa00010, 0xafa00014, 0x8f860120,
-0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, 0x8001d9c, 0x0,
-0x3c040001, 0x2484475c, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009,
-0xc002403, 0x34a5f010, 0x8001d9c, 0x0, 0x3c040001, 0x24844768,
-0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f00f,
-0x8ee201a8, 0x24420001, 0xaee201a8, 0x8ee201a8, 0x8ee20124, 0x24420001,
-0xaee20124, 0x8001f93, 0x8ee20124, 0x27440212, 0xc0022f8, 0x24050006,
-0x3049001f, 0x928c0, 0x2e51021, 0x9442726c, 0x30428000, 0x1040002f,
-0x2e51021, 0x9442726c, 0x30424000, 0x1440001c, 0xb71021, 0x9443726e,
-0x97420212, 0x14620018, 0xb71021, 0x8c437270, 0x8f420214, 0x54620016,
-0xafa20010, 0x92e204c8, 0x10400007, 0x24020001, 0x8ee304cc, 0x1221004,
-0x21027, 0x621824, 0x8001dc5, 0xaee304cc, 0x8f830228, 0x1221004,
-0x21027, 0x621824, 0xaf830228, 0x910c0, 0x2e21821, 0x3402c000,
-0x8001e4a, 0xa462726c, 0x8f420214, 0xafa20010, 0x910c0, 0x571021,
-0x8c42726c, 0x3c040001, 0x24844774, 0x3c050003, 0xafa20014, 0x8f470210,
-0x34a5f01c, 0xc002403, 0x1203021, 0x8001e7f, 0x3c020800, 0xb71021,
-0x9443726e, 0x97420212, 0x14620019, 0x918c0, 0xb71021, 0x8c437270,
-0x8f420214, 0x14620014, 0x918c0, 0x2e51021, 0x9447726c, 0x720c0,
-0x971021, 0x9443736e, 0xb71021, 0xa443726e, 0x971021, 0x8c437370,
-0xb71021, 0xac437270, 0x2e41021, 0x9443736c, 0x2e51021, 0xa443726c,
-0x2e41821, 0x3402c000, 0x8001e4a, 0xa462736c, 0x2e31021, 0x9447726c,
-0x3021, 0x720c0, 0x2e41021, 0x9442736c, 0x4021, 0x30428000,
-0x14400025, 0xe02821, 0x605021, 0x340bc000, 0x971021, 0x9443736e,
-0x97420212, 0x54620015, 0xe02821, 0x971021, 0x8c437370, 0x8f420214,
-0x54620010, 0xe02821, 0x11000006, 0x2e41021, 0x9443736c, 0x510c0,
-0x2e21021, 0x8001e16, 0xa443736c, 0x9443736c, 0x2ea1021, 0xa443726c,
-0x710c0, 0x2e21021, 0xa44b736c, 0x8001e24, 0x24060001, 0x510c0,
-0x2e21021, 0x9447736c, 0x720c0, 0x2e41021, 0x9442736c, 0x30428000,
-0x1040ffdf, 0x25080001, 0x30c200ff, 0x14400025, 0x2021, 0x720c0,
-0x971021, 0x9443736e, 0x97420212, 0x1462000f, 0x910c0, 0x971021,
-0x8c437370, 0x8f420214, 0x1462000a, 0x910c0, 0x2e41821, 0x3402c000,
-0x15000015, 0xa462736c, 0x910c0, 0x2e21821, 0x34028000, 0x8001e4a,
-0xa462726c, 0x571021, 0x8c42726c, 0x3c040001, 0x24844780, 0x3c050003,
-0xafa20010, 0x710c0, 0x571021, 0x8c42736c, 0x34a5001e, 0x1203021,
-0xc002403, 0xafa20014, 0x8001e7f, 0x3c020800, 0x2021, 0x428c0,
-0xb71021, 0x9443776e, 0x97420212, 0x5462002b, 0x24840001, 0xb71021,
-0x8c437770, 0x8f420214, 0x54620026, 0x24840001, 0x3c020001, 0x571021,
-0x8c4283a4, 0x2442ffff, 0x3c010001, 0x370821, 0xac2283a4, 0x3c020001,
-0x571021, 0x8c4283a4, 0x809021, 0x242102b, 0x1040000e, 0x24b1776c,
-0x24b07774, 0x2f02021, 0x2f12821, 0xc002490, 0x24060008, 0x26310008,
-0x3c020001, 0x571021, 0x8c4283a4, 0x26520001, 0x242102b, 0x1440fff5,
-0x26100008, 0x3c040001, 0x972021, 0x8c8483a4, 0x24050008, 0x420c0,
-0x2484776c, 0xc002488, 0x2e42021, 0x8001e7f, 0x3c020800, 0x2c820080,
-0x1440ffcf, 0x428c0, 0x3c020800, 0x34422000, 0xafa20018, 0x8ee205f8,
-0x8f430228, 0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee205f8,
-0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600,
-0x8f830054, 0x8f820054, 0x24690032, 0x1221023, 0x2c420033, 0x1040006a,
-0x5821, 0x24100008, 0x240f000d, 0x240d0007, 0x240c0040, 0x240e0001,
-0x8f870120, 0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000,
-0x8f820128, 0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021,
-0x8ee201a0, 0x3821, 0x24420001, 0xaee201a0, 0x8001ef7, 0x8ee201a0,
-0x8ee405f8, 0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821,
-0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee205f8,
-0xa4f0000e, 0xacef0018, 0xacea001c, 0x210c0, 0x244205fc, 0x2e21021,
-0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, 0x14400033,
-0x24070001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000,
-0x144d001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001,
-0x104c0007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0,
-0x8001ee4, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020,
-0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000,
-0x8001ef7, 0x0, 0x8ee24e20, 0x24420001, 0x504c0003, 0x1021,
-0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0xac8d0000, 0xac8e0004, 0x54e00006, 0x240b0001, 0x8f820054,
-0x1221023, 0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, 0x24020001,
-0x54620078, 0xafa00010, 0xaeea05f8, 0x8f830054, 0x8f820054, 0x24690032,
-0x1221023, 0x2c420033, 0x10400061, 0x5821, 0x240e0008, 0x240d0011,
-0x240a0012, 0x24080040, 0x240c0001, 0x8f830120, 0x27623800, 0x24660020,
-0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0,
-0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3821, 0x24420001,
-0xaee201a0, 0x8001f63, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490,
-0x8ee50494, 0x2462001c, 0xac620008, 0xa46e000e, 0xac6d0018, 0xac640000,
-0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400033,
-0x24070001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000,
-0x144a001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001,
-0x10480007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0,
-0x8001f50, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020,
-0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000,
-0x8001f63, 0x0, 0x8ee24e20, 0x24420001, 0x50480003, 0x1021,
-0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0xac8a0000, 0xac8c0004, 0x54e00006, 0x240b0001, 0x8f820054,
-0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001,
-0x10620022, 0x0, 0x3c040001, 0x24844750, 0xafa00010, 0xafa00014,
-0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, 0x8001f8f,
-0x0, 0x3c040001, 0x2484475c, 0xafa00014, 0x8f860120, 0x8f870124,
-0x3c050009, 0xc002403, 0x34a5f010, 0x8001f8f, 0x0, 0x3c040001,
-0x24844768, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403,
-0x34a5f00f, 0x8ee201a8, 0x24420001, 0xaee201a8, 0x8ee201a8, 0x8ee20128,
-0x24420001, 0xaee20128, 0x8ee20128, 0x8ee20160, 0x24420001, 0xaee20160,
-0x80022e2, 0x8ee20160, 0x8fa20020, 0x21200, 0x21d02, 0x24020001,
-0x10620005, 0x24020002, 0x1062000d, 0x0, 0x8001fb3, 0xafa00010,
-0x92e204c8, 0x14400006, 0x24020001, 0x8f820228, 0xaee204cc, 0x2402ffff,
-0xaf820228, 0x24020001, 0x8001fba, 0xa2e204c8, 0x92e204c8, 0x5040000c,
-0xa2e004c8, 0x8ee204cc, 0xaf820228, 0x8001fba, 0xa2e004c8, 0x3c040001,
-0x24844788, 0xafa00014, 0x8fa60020, 0x3c050003, 0xc002403, 0x34a5f009,
-0x8ee2013c, 0x24420001, 0xaee2013c, 0x80022e2, 0x8ee2013c, 0x8fa20020,
-0x21200, 0x22502, 0x24020001, 0x10820005, 0x24020002, 0x1082000f,
-0x0, 0x8001fdf, 0xafa00010, 0x8f820220, 0x3c0308ff, 0x3463ffff,
-0x431024, 0x34420008, 0xaf820220, 0x24020001, 0x3c010001, 0x370821,
-0xa02283a2, 0x8001fe6, 0xaee40108, 0x8f820220, 0x3c0308ff, 0x3463fff7,
-0x431024, 0xaf820220, 0x3c010001, 0x370821, 0xa02083a2, 0x8001fe6,
-0xaee40108, 0x3c040001, 0x24844794, 0xafa00014, 0x8fa60020, 0x3c050003,
-0xc002403, 0x34a5f00a, 0x8ee2012c, 0x24420001, 0xaee2012c, 0x80022e2,
-0x8ee2012c, 0x8fa20020, 0x21200, 0x21d02, 0x24020001, 0x10620005,
-0x24020002, 0x1062000e, 0x0, 0x800200d, 0xafa00010, 0x8f820220,
-0x3c0308ff, 0x3463ffff, 0x431024, 0x34420008, 0xaf820220, 0x24020001,
-0x3c010001, 0x370821, 0x8002014, 0xa02283a3, 0x3c020001, 0x571021,
-0x904283a2, 0x3c010001, 0x370821, 0x1440000e, 0xa02083a3, 0x8f820220,
-0x3c0308ff, 0x3463fff7, 0x431024, 0x8002014, 0xaf820220, 0x3c040001,
-0x248447a0, 0xafa00014, 0x8fa60020, 0x3c050003, 0xc002403, 0x34a5f00b,
-0x8ee20114, 0x24420001, 0xaee20114, 0x80022e2, 0x8ee20114, 0x27840208,
-0x27450200, 0xc00249a, 0x24060008, 0x26e40094, 0x27450200, 0xc00249a,
-0x24060008, 0x8ee20134, 0x24420001, 0xaee20134, 0x80022e2, 0x8ee20134,
-0x8f460248, 0x24040001, 0xc004eac, 0x24050004, 0x8ee20130, 0x24420001,
-0xaee20130, 0x80022e2, 0x8ee20130, 0x8ef301c4, 0x8ef401c8, 0x8ef501cc,
-0x8ee20140, 0x26e40030, 0x24420001, 0xaee20140, 0x8ef00140, 0x8ef10074,
-0x8ef20070, 0xc002488, 0x24050400, 0xaef301c4, 0xaef401c8, 0xaef501cc,
-0xaef00140, 0xaef10074, 0xaef20070, 0x8f42025c, 0x26e40094, 0xaee20060,
-0x8f420260, 0x27450200, 0x24060008, 0xaee20068, 0x24020006, 0xc00249a,
-0xaee20064, 0x3c023b9a, 0x3442ca00, 0xaee2006c, 0x240203e8, 0x24040002,
-0x24030001, 0xaee20104, 0xaee40100, 0xaee3010c, 0x8f820220, 0x30420008,
-0x10400004, 0x0, 0xaee30108, 0x800205d, 0x2021, 0xaee40108,
-0x2021, 0x3c030001, 0x641821, 0x90634f60, 0x2e41021, 0x24840001,
-0xa043009c, 0x2c82000f, 0x1440fff8, 0x0, 0x8f820040, 0x2e41821,
-0x24840001, 0x21702, 0x24420030, 0xa062009c, 0x2e41021, 0x80022e2,
-0xa040009c, 0x240a0400, 0x24090040, 0x24080001, 0x8f830100, 0x27623000,
-0x24660020, 0xc2102b, 0x50400001, 0x27662800, 0x8f820108, 0x10c20004,
-0x0, 0x8f820104, 0x14c20007, 0x26e20030, 0x8ee201a4, 0x3821,
-0x24420001, 0xaee201a4, 0x800209f, 0x8ee201a4, 0x8ee404a8, 0x8ee504ac,
-0xac620008, 0xa46a000e, 0xac600018, 0xac60001c, 0xac640000, 0xac650004,
-0x8ee204bc, 0xac620010, 0xaf860100, 0x92e204dc, 0x1440000e, 0x24070001,
-0x8ee24e18, 0x24420001, 0x50490003, 0x1021, 0x8ee24e18, 0x24420001,
-0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e21021, 0xac400000,
-0xac480004, 0x10e0ffd2, 0x0, 0x8ee20148, 0x24420001, 0xaee20148,
-0x80022e2, 0x8ee20148, 0x3c020900, 0xaee05228, 0xaee0522c, 0xaee05230,
-0xaee05234, 0xaee001c8, 0x3c010001, 0x370821, 0xa02083a1, 0xafa20018,
-0x8ee205f8, 0x8f430228, 0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010,
-0x8ee205f8, 0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc,
-0xac440600, 0x8f830054, 0x8f820054, 0x24690032, 0x1221023, 0x2c420033,
-0x1040006a, 0x5821, 0x24100008, 0x240f000d, 0x240d0007, 0x240c0040,
-0x240e0001, 0x8f870120, 0x27623800, 0x24e80020, 0x102102b, 0x50400001,
-0x27683000, 0x8f820128, 0x11020004, 0x0, 0x8f820124, 0x15020007,
-0x1021, 0x8ee201a0, 0x3821, 0x24420001, 0xaee201a0, 0x8002126,
-0x8ee201a0, 0x8ee405f8, 0x420c0, 0x801821, 0x8ee40430, 0x8ee50434,
-0xa32821, 0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004,
-0x8ee205f8, 0xa4f0000e, 0xacef0018, 0xacea001c, 0x210c0, 0x244205fc,
-0x2e21021, 0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10,
-0x14400033, 0x24070001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0x8c820000, 0x144d001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b,
-0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20,
-0x24420001, 0x104c0007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005,
-0x0, 0x8002113, 0x0, 0x14600005, 0x0, 0x8f820128,
-0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010,
-0xac800000, 0x8002126, 0x0, 0x8ee24e20, 0x24420001, 0x504c0003,
-0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0,
-0x24425028, 0x2e22021, 0xac8d0000, 0xac8e0004, 0x54e00006, 0x240b0001,
-0x8f820054, 0x1221023, 0x2c420033, 0x1440ff9d, 0x0, 0x316300ff,
-0x24020001, 0x54620078, 0xafa00010, 0xaeea05f8, 0x8f830054, 0x8f820054,
-0x24690032, 0x1221023, 0x2c420033, 0x10400061, 0x5821, 0x240e0008,
-0x240d0011, 0x240a0012, 0x24080040, 0x240c0001, 0x8f830120, 0x27623800,
-0x24660020, 0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004,
-0x0, 0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3821,
-0x24420001, 0xaee201a0, 0x8002192, 0x8ee201a0, 0x8ee205f8, 0xac62001c,
-0x8ee40490, 0x8ee50494, 0x2462001c, 0xac620008, 0xa46e000e, 0xac6d0018,
-0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10,
-0x14400033, 0x24070001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0x8c820000, 0x144a001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b,
-0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20,
-0x24420001, 0x10480007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005,
-0x0, 0x800217f, 0x0, 0x14600005, 0x0, 0x8f820128,
-0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010,
-0xac800000, 0x8002192, 0x0, 0x8ee24e20, 0x24420001, 0x50480003,
-0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0,
-0x24425028, 0x2e22021, 0xac8a0000, 0xac8c0004, 0x54e00006, 0x240b0001,
-0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff,
-0x24020001, 0x10620022, 0x0, 0x3c040001, 0x24844750, 0xafa00010,
-0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011,
-0x80021be, 0x0, 0x3c040001, 0x2484475c, 0xafa00014, 0x8f860120,
-0x8f870124, 0x3c050009, 0xc002403, 0x34a5f010, 0x80021be, 0x0,
-0x3c040001, 0x24844768, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009,
-0xc002403, 0x34a5f00f, 0x8ee201a8, 0x24420001, 0xaee201a8, 0x8ee201a8,
-0x8ee20120, 0x24420001, 0xaee20120, 0x8ee20120, 0x8ee20164, 0x24420001,
-0xaee20164, 0x80022e2, 0x8ee20164, 0x8f42025c, 0x26e40094, 0xaee20060,
-0x8f420260, 0x27450200, 0x24060008, 0xc00249a, 0xaee20068, 0x8f820220,
-0x30420008, 0x14400002, 0x24020001, 0x24020002, 0xaee20108, 0x8ee2011c,
-0x24420001, 0xaee2011c, 0x80022e2, 0x8ee2011c, 0x3c040001, 0x248447ac,
-0xafa00010, 0xafa00014, 0x8fa60020, 0x3c050003, 0xc002403, 0x34a5f00f,
-0x93a20020, 0x3c030700, 0x34631000, 0x431025, 0xafa20018, 0x8ee205f8,
-0x8f430228, 0x24420001, 0x304900ff, 0x512300e2, 0xafa00010, 0x8ee205f8,
-0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600,
-0x8f870120, 0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000,
-0x8f820128, 0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021,
-0x8ee201a0, 0x3821, 0x24420001, 0xaee201a0, 0x8002257, 0x8ee201a0,
-0x8ee405f8, 0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821,
-0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee305f8,
-0x24020008, 0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c, 0x318c0,
-0x246305fc, 0x2e31021, 0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120,
-0x92e24e10, 0x14400037, 0x24070001, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ee34e20,
-0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004,
-0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24,
-0x24420001, 0x10a20005, 0x0, 0x8002241, 0x0, 0x14a00005,
-0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
-0x2c420011, 0x50400013, 0xac800000, 0x8002257, 0x0, 0x8ee24e20,
-0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001,
-0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007,
-0xac820000, 0x24020001, 0xac820004, 0x54e0000c, 0xaee905f8, 0x3c040001,
-0x248447b4, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009,
-0xc002403, 0x34a5f000, 0x80022da, 0x0, 0x8f830120, 0x27623800,
-0x24660020, 0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004,
-0x0, 0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3821,
-0x24420001, 0xaee201a0, 0x80022be, 0x8ee201a0, 0x8ee205f8, 0xac62001c,
-0x8ee40490, 0x8ee50494, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e,
-0x24020011, 0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010,
-0xaf860120, 0x92e24e10, 0x14400037, 0x24070001, 0x8ee24e20, 0x210c0,
-0x24425028, 0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, 0x0,
-0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001,
-0xac820004, 0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0,
-0x8ee24e24, 0x24420001, 0x10a20005, 0x0, 0x80022a8, 0x0,
-0x14a00005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
-0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x80022be, 0x0,
-0x8ee24e20, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20,
-0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x14e0001b, 0x0,
-0x3c040001, 0x248447bc, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228,
-0x3c050009, 0xc002403, 0x34a5f001, 0x8ee201ac, 0x24420001, 0xaee201ac,
-0x80022da, 0x8ee201ac, 0x3c040001, 0x248447c8, 0xafa00014, 0x8ee605f8,
-0x8f470228, 0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201a8, 0x24420001,
-0xaee201a8, 0x8ee201a8, 0x8ee2014c, 0x24420001, 0xaee2014c, 0x8ee2014c,
-0x8ee2015c, 0x24420001, 0xaee2015c, 0x8ee2015c, 0x8f43022c, 0x8f42010c,
-0x14620009, 0x24020002, 0xaf820064, 0x8f820064, 0x14400005, 0x0,
-0x8f43022c, 0x8f42010c, 0x1462f877, 0x0, 0x8fbf0044, 0x8fb60040,
-0x8fb5003c, 0x8fb40038, 0x8fb30034, 0x8fb20030, 0x8fb1002c, 0x8fb00028,
-0x3e00008, 0x27bd0048, 0x27bdfff8, 0x2408ffff, 0x10a00014, 0x4821,
-0x3c0aedb8, 0x354a8320, 0x90870000, 0x24840001, 0x3021, 0x1071026,
-0x30420001, 0x10400002, 0x81842, 0x6a1826, 0x604021, 0x24c60001,
-0x2cc20008, 0x1440fff7, 0x73842, 0x25290001, 0x125102b, 0x1440fff0,
-0x0, 0x1001021, 0x3e00008, 0x27bd0008, 0x0, 0x0,
-0x27bdffe8, 0x27642800, 0xafbf0010, 0xc002488, 0x24051000, 0x24020021,
-0xaf800100, 0xaf800104, 0xaf800108, 0xaf800110, 0xaf800114, 0xaf800118,
-0xaf800120, 0xaf800124, 0xaf800128, 0xaf800130, 0xaf800134, 0xaf800138,
-0xaee04e18, 0xaee04e1c, 0xaee04e20, 0xaee04e24, 0xaf82011c, 0x8f420218,
-0x30420040, 0x10400004, 0x0, 0x8f82011c, 0x34420004, 0xaf82011c,
-0x8fbf0010, 0x3e00008, 0x27bd0018, 0x27bdffe0, 0xafbf0018, 0x8f820104,
-0xafa20010, 0x8f820100, 0x3c050002, 0xafa20014, 0x8f8600b0, 0x8f87011c,
-0x3c040001, 0x2484487c, 0xc002403, 0x34a5f000, 0x8f8300b0, 0x3c027f00,
-0x621824, 0x3c020400, 0x1062002b, 0x43102b, 0x14400008, 0x3c022000,
-0x3c020100, 0x10620026, 0x3c020200, 0x10620013, 0x0, 0x8002372,
-0x0, 0x1062000a, 0x43102b, 0x1040001e, 0x3c024000, 0x1462001c,
-0x0, 0x8ee2018c, 0x24420001, 0xaee2018c, 0x8002372, 0x8ee2018c,
-0x8ee20188, 0x24420001, 0xaee20188, 0x8002372, 0x8ee20188, 0x8f82011c,
-0x34420002, 0xaf82011c, 0x8f830104, 0x8f8200b0, 0x34420001, 0xaf8200b0,
-0xaf830104, 0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, 0x8ee2019c,
-0x24420001, 0xaee2019c, 0x8002375, 0x8ee2019c, 0x8f8200b0, 0x34420001,
-0xaf8200b0, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffe0, 0xafbf001c,
-0xafb00018, 0x8f820120, 0xafa20010, 0x8f820124, 0x3c050001, 0xafa20014,
-0x8f8600a0, 0x8f87011c, 0x3c040001, 0x24844888, 0xc002403, 0x34a5f000,
-0x8f8300a0, 0x3c027f00, 0x621824, 0x3c020400, 0x10620055, 0x8021,
-0x43102b, 0x14400008, 0x3c042000, 0x3c020100, 0x1062004f, 0x3c020200,
-0x1062003c, 0x0, 0x80023e0, 0x0, 0x10640005, 0x83102b,
-0x10400047, 0x3c024000, 0x14620045, 0x0, 0x8f8200a0, 0x441024,
-0x10400006, 0x0, 0x8ee20190, 0x24420001, 0xaee20190, 0x80023a9,
-0x8ee20190, 0x8ee20194, 0x24420001, 0xaee20194, 0x8ee20194, 0x8f82011c,
-0x34420002, 0xaf82011c, 0x8f82011c, 0x30420200, 0x1040001b, 0x0,
-0x8f8300a0, 0x8f840124, 0x8f8200ac, 0x14400007, 0x24020001, 0x3c020001,
-0x3442f000, 0x621024, 0x50400001, 0x24100001, 0x24020001, 0x1200000d,
-0xaf8200a0, 0x8f820124, 0x2442ffe0, 0xaf820124, 0x8f820124, 0x8f820124,
-0x27633000, 0x43102b, 0x10400005, 0x276237e0, 0xaf820124, 0x80023ca,
-0x0, 0xaf840124, 0x8f82011c, 0x2403fffd, 0x431024, 0x80023e3,
-0xaf82011c, 0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830124, 0x8f8200a0,
-0x34420001, 0xaf8200a0, 0xaf830124, 0x8f82011c, 0x2403fffd, 0x431024,
-0xaf82011c, 0x8ee20198, 0x24420001, 0xaee20198, 0x80023e3, 0x8ee20198,
-0x8f8200a0, 0x34420001, 0xaf8200a0, 0x8fbf001c, 0x8fb00018, 0x3e00008,
-0x27bd0020, 0x0, 0x3c020001, 0x8c424f88, 0x27bdffe8, 0xafbf0014,
-0x14400012, 0xafb00010, 0x3c100001, 0x261050c0, 0x2002021, 0xc002488,
-0x24052000, 0x26021fe0, 0x3c010001, 0xac225094, 0x3c010001, 0xac225090,
-0xaf420250, 0x24022000, 0xaf500254, 0xaf420258, 0x24020001, 0x3c010001,
-0xac224f88, 0x8fbf0014, 0x8fb00010, 0x3e00008, 0x27bd0018, 0x3c030001,
-0x8c635094, 0x8c820000, 0x8fa80010, 0x8fa90014, 0xac620000, 0x3c020001,
-0x8c425094, 0x8c830004, 0xac430004, 0xac450008, 0x8f840054, 0x2443ffe0,
-0xac460010, 0xac470014, 0xac480018, 0xac49001c, 0x3c010001, 0xac235094,
-0xac44000c, 0x3c020001, 0x244250c0, 0x62182b, 0x10600005, 0x0,
-0x3c020001, 0x8c425090, 0x3c010001, 0xac225094, 0x3c030001, 0x8c635094,
-0x3c020001, 0x8c424f70, 0xac620000, 0x3c030001, 0x8c635094, 0x3c020001,
-0x8c424f70, 0xac620004, 0x3e00008, 0xaf430250, 0x3c030001, 0x8c635094,
-0x3c020001, 0x8c424f70, 0x27bdffd0, 0xafb40020, 0x8fb40040, 0xafb00010,
-0x808021, 0xafb50024, 0x8fb50044, 0x8fa40048, 0xafb10014, 0xa08821,
-0xafbf0028, 0xafb3001c, 0xafb20018, 0xac620000, 0x3c050001, 0x8ca55094,
-0x3c020001, 0x8c424f70, 0xc09021, 0xe09821, 0x10800006, 0xaca20004,
-0x24a50008, 0xc002490, 0x24060018, 0x800244e, 0x0, 0x24a40008,
-0xc002488, 0x24050018, 0x3c020001, 0x8c425094, 0x3c050001, 0x24a550c0,
-0x2442ffe0, 0x3c010001, 0xac225094, 0x45102b, 0x10400005, 0x0,
-0x3c020001, 0x8c425090, 0x3c010001, 0xac225094, 0x3c030001, 0x8c635094,
-0x8e020000, 0xac620000, 0x3c030001, 0x8c635094, 0x8e020004, 0xac620004,
-0xac710008, 0x8f840054, 0x2462ffe0, 0x3c010001, 0xac225094, 0x45102b,
-0xac720010, 0xac730014, 0xac740018, 0xac75001c, 0x10400005, 0xac64000c,
-0x3c020001, 0x8c425090, 0x3c010001, 0xac225094, 0x3c030001, 0x8c635094,
-0x3c020001, 0x8c424f70, 0xac620000, 0x3c030001, 0x8c635094, 0x3c020001,
-0x8c424f70, 0xac620004, 0xaf430250, 0x8fbf0028, 0x8fb50024, 0x8fb40020,
-0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0030,
-0x10a00005, 0x0, 0xac800000, 0x24a5fffc, 0x14a0fffd, 0x24840004,
-0x3e00008, 0x0, 0x10c00007, 0x0, 0x8c820000, 0x24840004,
-0x24c6fffc, 0xaca20000, 0x14c0fffb, 0x24a50004, 0x3e00008, 0x0,
-0x10c00007, 0x0, 0x8ca20000, 0x24a50004, 0x24c6fffc, 0xac820000,
-0x14c0fffb, 0x24840004, 0x3e00008, 0x0, 0x3e00008, 0x0,
-0x27bdffd8, 0xafbf0020, 0x8ee304d4, 0x8ee204d0, 0x10620436, 0x0,
-0x8ee204d4, 0x8ee304ec, 0x21100, 0x626021, 0x95870008, 0x8d8a0000,
-0x8d8b0004, 0x958d000a, 0x8ee2724c, 0x8ee3725c, 0x30e4ffff, 0x441021,
-0x62182b, 0x10600015, 0x31a20004, 0x8f8200d8, 0x8ee37248, 0x431023,
-0xaee2725c, 0x8ee2725c, 0x1c400003, 0x3c030001, 0x431021, 0xaee2725c,
-0x8ee2724c, 0x8ee3725c, 0x441021, 0x62182b, 0x10600006, 0x31a20004,
-0x8ee201b4, 0x24420001, 0xaee201b4, 0x80028e1, 0x8ee201b4, 0x10400240,
-0x31a20200, 0x1040014d, 0x4821, 0x96e2045a, 0x30420010, 0x10400149,
-0x0, 0x8f840100, 0x27623000, 0x24850020, 0xa2102b, 0x50400001,
-0x27652800, 0x8f820108, 0x10a20004, 0x0, 0x8f820104, 0x14a20006,
-0x2402000c, 0x8ee201a4, 0x24420001, 0xaee201a4, 0x800252c, 0x8ee201a4,
-0xac8a0000, 0xac8b0004, 0x8ee37254, 0x24060005, 0xa482000e, 0xac860018,
-0xac830008, 0x8ee204d4, 0xac82001c, 0x8ee204b8, 0xac820010, 0xaf850100,
-0x92e204dc, 0x14400036, 0x24090001, 0x8ee24e18, 0x210c0, 0x24424e28,
-0x2e22021, 0x8c820000, 0x1446001f, 0x0, 0x8ee34e18, 0x8ee24e1c,
-0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e1c,
-0x8ee54e18, 0x24420001, 0x10430007, 0x0, 0x8ee24e1c, 0x24420001,
-0x10a20005, 0x0, 0x8002516, 0x0, 0x14a00005, 0x0,
-0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011,
-0x50400013, 0xac800000, 0x800252c, 0x0, 0x8ee24e18, 0x24030040,
-0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18,
-0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x24020005, 0xac820000,
-0x24020001, 0xac820004, 0x1520000a, 0x3c040001, 0xafab0010, 0x8ee27254,
-0x3c040001, 0x24844af0, 0x3c050004, 0xafa20014, 0x8ee604d4, 0x80028be,
-0x34a5f114, 0x8ee27254, 0x34843800, 0x3641821, 0x24420010, 0x43102b,
-0x14400073, 0x0, 0x8ee27254, 0x24480010, 0x3641021, 0x102102b,
-0x14400002, 0x3c02ffff, 0x1024021, 0x8f850100, 0x27623000, 0x24a60020,
-0xc2102b, 0x50400001, 0x27662800, 0x8f820108, 0x10c20004, 0x0,
-0x8f820104, 0x14c20007, 0x2563000c, 0x8ee201a4, 0x4821, 0x24420001,
-0xaee201a4, 0x80025a0, 0x8ee201a4, 0x2c64000c, 0x1441021, 0xaca20000,
-0xaca30004, 0x24e2fff4, 0xa4a2000e, 0x24020006, 0xaca80008, 0xaca20018,
-0x8ee204d4, 0xaca2001c, 0x8ee204b8, 0x3c030002, 0x431025, 0xaca20010,
-0xaf860100, 0x92e204dc, 0x14400037, 0x24090001, 0x8ee24e18, 0x210c0,
-0x24424e28, 0x2e22021, 0x8c830000, 0x24020005, 0x1462001f, 0x0,
-0x8ee34e18, 0x8ee24e1c, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001,
-0xac820004, 0x8ee24e1c, 0x8ee54e18, 0x24420001, 0x10430007, 0x0,
-0x8ee24e1c, 0x24420001, 0x10a20005, 0x0, 0x800258a, 0x0,
-0x14a00005, 0x0, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108,
-0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x80025a0, 0x0,
-0x8ee24e18, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e18,
-0x24420001, 0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021,
-0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a, 0x2508fffc,
-0xafab0010, 0x8ee27254, 0x3c040001, 0x24844af0, 0x3c050004, 0xafa20014,
-0x8ee604d4, 0x80028be, 0x34a5f125, 0x34028100, 0xa5020000, 0x9582000e,
-0x800261d, 0xa5020002, 0x8f850100, 0x27623000, 0x24a60020, 0xc2102b,
-0x50400001, 0x27662800, 0x8f820108, 0x10c20004, 0x0, 0x8f820104,
-0x14c20007, 0x2563000c, 0x8ee201a4, 0x4821, 0x24420001, 0xaee201a4,
-0x800260d, 0x8ee201a4, 0x2c64000c, 0x1441021, 0xaca20000, 0xaca30004,
-0x8ee37254, 0x24e2fff4, 0xa4a2000e, 0x24020006, 0xaca20018, 0x24630010,
-0xaca30008, 0x8ee204d4, 0xaca2001c, 0x8ee204b8, 0x3c030002, 0x431025,
-0xaca20010, 0xaf860100, 0x92e204dc, 0x14400037, 0x24090001, 0x8ee24e18,
-0x210c0, 0x24424e28, 0x2e22021, 0x8c830000, 0x24020005, 0x1462001f,
-0x0, 0x8ee34e18, 0x8ee24e1c, 0x1062001b, 0x24030040, 0x8c820004,
-0x24420001, 0xac820004, 0x8ee24e1c, 0x8ee54e18, 0x24420001, 0x10430007,
-0x0, 0x8ee24e1c, 0x24420001, 0x10a20005, 0x0, 0x80025f7,
-0x0, 0x14a00005, 0x0, 0x8f820108, 0x24420020, 0xaf820108,
-0x8f820108, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x800260d,
-0x0, 0x8ee24e18, 0x24030040, 0x24420001, 0x50430003, 0x1021,
-0x8ee24e18, 0x24420001, 0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28,
-0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a,
-0x34028100, 0xafab0010, 0x8ee27254, 0x3c040001, 0x24844af0, 0x3c050004,
-0xafa20014, 0x8ee604d4, 0x80028be, 0x34a5f015, 0x8ee37254, 0xa462000c,
-0x8ee37254, 0x9582000e, 0xa462000e, 0x8002681, 0x24e70004, 0x8f840100,
-0x27623000, 0x24850020, 0xa2102b, 0x50400001, 0x27652800, 0x8f820108,
-0x10a20004, 0x0, 0x8f820104, 0x14a20007, 0x24020006, 0x8ee201a4,
-0x4821, 0x24420001, 0xaee201a4, 0x8002677, 0x8ee201a4, 0xac8a0000,
-0xac8b0004, 0x8ee37254, 0xa487000e, 0xac820018, 0xac830008, 0x8ee204d4,
-0xac82001c, 0x8ee204b8, 0x3c030002, 0x431025, 0xac820010, 0xaf850100,
-0x92e204dc, 0x14400037, 0x24090001, 0x8ee24e18, 0x210c0, 0x24424e28,
-0x2e22021, 0x8c830000, 0x24020005, 0x1462001f, 0x0, 0x8ee34e18,
-0x8ee24e1c, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004,
-0x8ee24e1c, 0x8ee54e18, 0x24420001, 0x10430007, 0x0, 0x8ee24e1c,
-0x24420001, 0x10a20005, 0x0, 0x8002661, 0x0, 0x14a00005,
-0x0, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, 0x8c820004,
-0x2c420011, 0x50400013, 0xac800000, 0x8002677, 0x0, 0x8ee24e18,
-0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001,
-0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x24020005,
-0xac820000, 0x24020001, 0xac820004, 0x15200009, 0x3c050004, 0xafab0010,
-0x8ee27254, 0x3c040001, 0x24844af0, 0xafa20014, 0x8ee604d4, 0x80028be,
-0x34a5f004, 0x8ee2724c, 0x30e7ffff, 0x471021, 0xaee2724c, 0x8ee204d4,
-0x8ee304ec, 0x8ee47248, 0x21100, 0x431021, 0xac44000c, 0x8ee27248,
-0xafa20018, 0x8ee3724c, 0xafa3001c, 0x8ee2724c, 0x2c42003c, 0x10400004,
-0x24620001, 0x2403fffe, 0x431024, 0xafa2001c, 0x8ee27254, 0x3c060001,
-0x34c63800, 0x8ee3724c, 0x2405fff8, 0x471021, 0x24420007, 0x451024,
-0x24630007, 0xaee27248, 0x8ee2725c, 0x8ee47248, 0x651824, 0x431023,
-0xaee2725c, 0x3661021, 0x82202b, 0x14800004, 0x3c03ffff, 0x8ee27248,
-0x431021, 0xaee27248, 0x8ee27248, 0xaee27254, 0x8f8200f0, 0x24470008,
-0x27621800, 0xe2102b, 0x50400001, 0x27671000, 0x8f8200f4, 0x14e20007,
-0x0, 0x8ee201b0, 0x4821, 0x24420001, 0xaee201b0, 0x80026c4,
-0x8ee201b0, 0x8f8200f0, 0x24090001, 0x8fa30018, 0x8fa4001c, 0xac430000,
-0xac440004, 0xaf8700f0, 0x15200012, 0xd1142, 0x8f8200f0, 0xafa20010,
-0x8f8200f4, 0x3c040001, 0x24844afc, 0xafa20014, 0x8fa60018, 0x8fa7001c,
-0x3c050004, 0xc002403, 0x34a5f005, 0x8ee20088, 0x24420001, 0xaee20088,
-0x8ee20088, 0x80028d3, 0xaee0724c, 0x30430003, 0x24020002, 0x10620016,
-0x28620003, 0x10400005, 0x24020001, 0x10620008, 0x0, 0x8002703,
-0x0, 0x24020003, 0x10620017, 0x0, 0x8002703, 0x0,
-0x8ee200e8, 0x8ee300ec, 0x24630001, 0x2c640001, 0x441021, 0xaee200e8,
-0xaee300ec, 0x8ee200e8, 0x8002703, 0x8ee300ec, 0x8ee200f0, 0x8ee300f4,
-0x24630001, 0x2c640001, 0x441021, 0xaee200f0, 0xaee300f4, 0x8ee200f0,
-0x8002703, 0x8ee300f4, 0x8ee200f8, 0x8ee300fc, 0x24630001, 0x2c640001,
-0x441021, 0xaee200f8, 0xaee300fc, 0x8ee200f8, 0x8ee300fc, 0x8ee2724c,
-0x8ee400e0, 0x8ee500e4, 0x401821, 0x1021, 0xa32821, 0xa3302b,
-0x822021, 0x862021, 0xaee400e0, 0xaee500e4, 0x80028d3, 0xaee0724c,
-0x30e2ffff, 0x104001c1, 0x31a20200, 0x1040014d, 0x4821, 0x96e2045a,
-0x30420010, 0x10400149, 0x0, 0x8f840100, 0x27623000, 0x24850020,
-0xa2102b, 0x50400001, 0x27652800, 0x8f820108, 0x10a20004, 0x0,
-0x8f820104, 0x14a20006, 0x2402000c, 0x8ee201a4, 0x24420001, 0xaee201a4,
-0x800276e, 0x8ee201a4, 0xac8a0000, 0xac8b0004, 0x8ee37254, 0x24060005,
-0xa482000e, 0xac860018, 0xac830008, 0x8ee204d4, 0xac82001c, 0x8ee204b8,
-0xac820010, 0xaf850100, 0x92e204dc, 0x14400036, 0x24090001, 0x8ee24e18,
-0x210c0, 0x24424e28, 0x2e22021, 0x8c820000, 0x1446001f, 0x0,
-0x8ee34e18, 0x8ee24e1c, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001,
-0xac820004, 0x8ee24e1c, 0x8ee54e18, 0x24420001, 0x10430007, 0x0,
-0x8ee24e1c, 0x24420001, 0x10a20005, 0x0, 0x8002758, 0x0,
-0x14a00005, 0x0, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108,
-0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x800276e, 0x0,
-0x8ee24e18, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e18,
-0x24420001, 0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021,
-0x24020005, 0xac820000, 0x24020001, 0xac820004, 0x1520000a, 0x3c040001,
-0xafab0010, 0x8ee27254, 0x3c040001, 0x24844af0, 0x3c050004, 0xafa20014,
-0x8ee604d4, 0x80028be, 0x34a5f014, 0x8ee27254, 0x34843800, 0x3641821,
-0x24420010, 0x43102b, 0x14400073, 0x0, 0x8ee27254, 0x24480010,
-0x3641021, 0x102102b, 0x14400002, 0x3c02ffff, 0x1024021, 0x8f850100,
-0x27623000, 0x24a60020, 0xc2102b, 0x50400001, 0x27662800, 0x8f820108,
-0x10c20004, 0x0, 0x8f820104, 0x14c20007, 0x2563000c, 0x8ee201a4,
-0x4821, 0x24420001, 0xaee201a4, 0x80027e2, 0x8ee201a4, 0x2c64000c,
-0x1441021, 0xaca20000, 0xaca30004, 0x24e2fff4, 0xa4a2000e, 0x24020006,
-0xaca80008, 0xaca20018, 0x8ee204d4, 0xaca2001c, 0x8ee204b8, 0x3c030002,
-0x431025, 0xaca20010, 0xaf860100, 0x92e204dc, 0x14400037, 0x24090001,
-0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x8c830000, 0x24020005,
-0x1462001f, 0x0, 0x8ee34e18, 0x8ee24e1c, 0x1062001b, 0x24030040,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee24e1c, 0x8ee54e18, 0x24420001,
-0x10430007, 0x0, 0x8ee24e1c, 0x24420001, 0x10a20005, 0x0,
-0x80027cc, 0x0, 0x14a00005, 0x0, 0x8f820108, 0x24420020,
-0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
-0x80027e2, 0x0, 0x8ee24e18, 0x24030040, 0x24420001, 0x50430003,
-0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18, 0x8ee24e18, 0x210c0,
-0x24424e28, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004,
-0x1520000a, 0x2508fffc, 0xafab0010, 0x8ee27254, 0x3c040001, 0x24844af0,
-0x3c050004, 0xafa20014, 0x8ee604d4, 0x80028be, 0x34a5f015, 0x34028100,
-0xa5020000, 0x9582000e, 0x800285f, 0xa5020002, 0x8f850100, 0x27623000,
-0x24a60020, 0xc2102b, 0x50400001, 0x27662800, 0x8f820108, 0x10c20004,
-0x0, 0x8f820104, 0x14c20007, 0x2563000c, 0x8ee201a4, 0x4821,
-0x24420001, 0xaee201a4, 0x800284f, 0x8ee201a4, 0x2c64000c, 0x1441021,
-0xaca20000, 0xaca30004, 0x8ee37254, 0x24e2fff4, 0xa4a2000e, 0x24020006,
-0xaca20018, 0x24630010, 0xaca30008, 0x8ee204d4, 0xaca2001c, 0x8ee204b8,
-0x3c030002, 0x431025, 0xaca20010, 0xaf860100, 0x92e204dc, 0x14400037,
-0x24090001, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x8c830000,
-0x24020005, 0x1462001f, 0x0, 0x8ee34e18, 0x8ee24e1c, 0x1062001b,
-0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e1c, 0x8ee54e18,
-0x24420001, 0x10430007, 0x0, 0x8ee24e1c, 0x24420001, 0x10a20005,
-0x0, 0x8002839, 0x0, 0x14a00005, 0x0, 0x8f820108,
-0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011, 0x50400013,
-0xac800000, 0x800284f, 0x0, 0x8ee24e18, 0x24030040, 0x24420001,
-0x50430003, 0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18, 0x8ee24e18,
-0x210c0, 0x24424e28, 0x2e22021, 0x24020005, 0xac820000, 0x24020001,
-0xac820004, 0x1520000a, 0x34028100, 0xafab0010, 0x8ee27254, 0x3c040001,
-0x24844af0, 0x3c050004, 0xafa20014, 0x8ee604d4, 0x80028be, 0x34a5f016,
-0x8ee37254, 0xa462000c, 0x8ee37254, 0x9582000e, 0xa462000e, 0x80028c2,
-0x24e70004, 0x8f830100, 0x27623000, 0x24640020, 0x82102b, 0x50400001,
-0x27642800, 0x8f820108, 0x10820004, 0x0, 0x8f820104, 0x14820007,
-0x24050005, 0x8ee201a4, 0x4821, 0x24420001, 0xaee201a4, 0x80028b6,
-0x8ee201a4, 0xac6a0000, 0xac6b0004, 0x8ee27254, 0xa467000e, 0xac650018,
-0xac620008, 0x8ee204d4, 0xac62001c, 0x8ee204b8, 0xac620010, 0xaf840100,
-0x92e204dc, 0x14400036, 0x24090001, 0x8ee24e18, 0x210c0, 0x24424e28,
-0x2e22021, 0x8c820000, 0x1445001f, 0x0, 0x8ee34e18, 0x8ee24e1c,
-0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e1c,
-0x8ee54e18, 0x24420001, 0x10430007, 0x0, 0x8ee24e1c, 0x24420001,
-0x10a20005, 0x0, 0x80028a0, 0x0, 0x14a00005, 0x0,
-0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011,
-0x50400013, 0xac800000, 0x80028b6, 0x0, 0x8ee24e18, 0x24030040,
-0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18,
-0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x24020005, 0xac820000,
-0x24020001, 0xac820004, 0x1520000b, 0x3c050004, 0x3c040001, 0x24844b08,
-0xafab0010, 0xafa00014, 0x8ee604d4, 0x34a5f017, 0xc002403, 0x30e7ffff,
-0x80028e1, 0x0, 0x8ee27254, 0x3c050001, 0x30e4ffff, 0x441021,
-0xaee27254, 0x8ee2724c, 0x8ee37254, 0x34a53800, 0x441021, 0xaee2724c,
-0x3651021, 0x62182b, 0x14600004, 0x3c03ffff, 0x8ee27254, 0x431021,
-0xaee27254, 0x8ee304d4, 0x96e20458, 0x24630001, 0x2442ffff, 0x621824,
-0xaee304d4, 0x8ee304d4, 0x8ee204d0, 0x14620005, 0x0, 0x8f820060,
-0x2403fff7, 0x431024, 0xaf820060, 0x8fbf0020, 0x3e00008, 0x27bd0028,
-0x27bdffe0, 0xafbf0018, 0x8ee304d8, 0x8ee204d0, 0x10620189, 0x0,
-0x8ee204d8, 0x8ee304ec, 0x21100, 0x621821, 0x94670008, 0x92e204dd,
-0x8c680000, 0x8c690004, 0x10400023, 0x946a000a, 0x8ee204b8, 0x34460400,
-0x31420200, 0x1040001f, 0x0, 0x96e2045a, 0x30420010, 0x1040001b,
-0x3c028000, 0x3c010001, 0x370821, 0xac2283c8, 0x8ee27254, 0x9464000e,
-0x3c050001, 0x34a53800, 0x24420004, 0xaee27254, 0x8ee37254, 0x42400,
-0x3651021, 0x3c010001, 0x370821, 0xac2483cc, 0x62182b, 0x14600005,
-0x24e70004, 0x8ee27254, 0x3c03ffff, 0x431021, 0xaee27254, 0x8ee27254,
-0x8002917, 0xaee27248, 0x8ee604b8, 0x8ee2725c, 0x30e4ffff, 0x44102a,
-0x10400015, 0x0, 0x8f8200d8, 0x8ee37248, 0x431023, 0xaee2725c,
-0x8ee2725c, 0x1c400007, 0x44102a, 0x8ee2725c, 0x3c030001, 0x431021,
-0xaee2725c, 0x8ee2725c, 0x44102a, 0x10400006, 0x0, 0x8ee201b4,
-0x24420001, 0xaee201b4, 0x8002a72, 0x8ee201b4, 0x3c020001, 0x571021,
-0x8c4283c8, 0x54400001, 0x24e7fffc, 0x31420004, 0x104000b9, 0x30e2ffff,
-0x3c020001, 0x571021, 0x8c4283c8, 0x1040002f, 0x5021, 0x8f840100,
-0x27623000, 0x24850020, 0xa2102b, 0x50400001, 0x27652800, 0x8f820108,
-0x10a20032, 0x0, 0x8f820104, 0x10a2002f, 0x24020015, 0xac880000,
-0xac890004, 0x8ee37254, 0xa487000e, 0xac820018, 0xac830008, 0x8ee204d8,
-0x3c030001, 0x771821, 0x8c6383cc, 0xac860010, 0x431025, 0xac82001c,
-0xaf850100, 0x92e204dc, 0x14400066, 0x240a0001, 0x8ee24e18, 0x24030040,
-0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18,
-0x8ee24e18, 0x210c0, 0x24424e28, 0x2e21821, 0x24020015, 0xac620000,
-0x24020001, 0x80029bf, 0xac620004, 0x8f840100, 0x27623000, 0x24850020,
-0xa2102b, 0x50400001, 0x27652800, 0x8f820108, 0x10a20004, 0x0,
-0x8f820104, 0x14a20006, 0x24020006, 0x8ee201a4, 0x24420001, 0xaee201a4,
-0x80029bf, 0x8ee201a4, 0xac880000, 0xac890004, 0x8ee37254, 0xa487000e,
-0xac820018, 0xac830008, 0x8ee204d8, 0xac860010, 0xac82001c, 0xaf850100,
-0x92e204dc, 0x14400037, 0x240a0001, 0x8ee24e18, 0x210c0, 0x24424e28,
-0x2e22021, 0x8c830000, 0x24020005, 0x1462001f, 0x0, 0x8ee34e18,
-0x8ee24e1c, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004,
-0x8ee24e1c, 0x8ee54e18, 0x24420001, 0x10430007, 0x0, 0x8ee24e1c,
-0x24420001, 0x10a20005, 0x0, 0x80029a9, 0x0, 0x14a00005,
-0x0, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108, 0x8c820004,
-0x2c420011, 0x50400013, 0xac800000, 0x80029bf, 0x0, 0x8ee24e18,
-0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001,
-0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x24020005,
-0xac820000, 0x24020001, 0xac820004, 0x1540000a, 0x24020001, 0xafa90010,
-0x8ee27254, 0x3c040001, 0x24844af0, 0x3c050004, 0xafa20014, 0x8ee604d4,
-0x8002a4f, 0x34a5f204, 0xa2e204dd, 0x8ee204d8, 0x8ee304ec, 0x8ee47248,
-0x3c060001, 0x34c63800, 0x3c010001, 0x370821, 0xac2083c8, 0x3c010001,
-0x370821, 0xac2083cc, 0x21100, 0x431021, 0xac44000c, 0x8ee27254,
-0x2405fff8, 0x30e3ffff, 0x431021, 0x24420007, 0x451024, 0x24630007,
-0xaee27248, 0x8ee2725c, 0x8ee47248, 0x651824, 0x431023, 0xaee2725c,
-0x3661021, 0x82202b, 0x14800004, 0x3c03ffff, 0x8ee27248, 0x431021,
-0xaee27248, 0x8ee27248, 0x8002a64, 0xaee27254, 0x10400073, 0x0,
-0x8f830100, 0x27623000, 0x24640020, 0x82102b, 0x14400002, 0x5021,
-0x27642800, 0x8f820108, 0x10820004, 0x0, 0x8f820104, 0x14820006,
-0x24050005, 0x8ee201a4, 0x24420001, 0xaee201a4, 0x8002a46, 0x8ee201a4,
-0xac680000, 0xac690004, 0x8ee27254, 0xa467000e, 0xac650018, 0xac620008,
-0x8ee204d8, 0xac660010, 0xac62001c, 0xaf840100, 0x92e204dc, 0x14400036,
-0x240a0001, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e22021, 0x8c820000,
-0x1445001f, 0x0, 0x8ee34e18, 0x8ee24e1c, 0x1062001b, 0x24030040,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee24e1c, 0x8ee54e18, 0x24420001,
-0x10430007, 0x0, 0x8ee24e1c, 0x24420001, 0x10a20005, 0x0,
-0x8002a30, 0x0, 0x14a00005, 0x0, 0x8f820108, 0x24420020,
-0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
-0x8002a46, 0x0, 0x8ee24e18, 0x24030040, 0x24420001, 0x50430003,
-0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18, 0x8ee24e18, 0x210c0,
-0x24424e28, 0x2e22021, 0x24020005, 0xac820000, 0x24020001, 0xac820004,
-0x1540000c, 0x30e5ffff, 0x3c040001, 0x24844b08, 0x3c050004, 0xafa90010,
-0xafa00014, 0x8ee604d4, 0x34a5f237, 0xc002403, 0x30e7ffff, 0x8002a72,
-0x0, 0x8ee27254, 0x451021, 0xaee27254, 0x8ee2725c, 0x8ee37254,
-0x3c040001, 0x34843800, 0xa2e004dd, 0x451023, 0xaee2725c, 0x3641021,
-0x62182b, 0x14600004, 0x3c03ffff, 0x8ee27254, 0x431021, 0xaee27254,
-0x8ee304d8, 0x96e20458, 0x24630001, 0x2442ffff, 0x621824, 0xaee304d8,
-0x8ee304d8, 0x8ee204d0, 0x14620005, 0x0, 0x8f820060, 0x2403fff7,
-0x431024, 0xaf820060, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffe0,
-0xafbf001c, 0xafb00018, 0x8f820100, 0x8ee34e1c, 0x8f820104, 0x8f850108,
-0x24020040, 0x24630001, 0x50620003, 0x1021, 0x8ee24e1c, 0x24420001,
-0xaee24e1c, 0x8ee24e1c, 0x8ee34e1c, 0x210c0, 0x24424e28, 0x2e22021,
-0x8ee24e18, 0x8c870004, 0x14620007, 0xa03021, 0x8f820108, 0x24420020,
-0xaf820108, 0x8f820108, 0x8002aa2, 0xac800000, 0x8ee24e1c, 0x24030040,
-0x24420001, 0x50430003, 0x1021, 0x8ee24e1c, 0x24420001, 0x210c0,
-0x24424e28, 0x2e22021, 0x8c820004, 0x8f830108, 0x21140, 0x621821,
-0xaf830108, 0xac800000, 0x8cc30018, 0x2c620002, 0x144000ba, 0x2c620004,
-0x5440008d, 0x24030040, 0x2c620007, 0x104000b5, 0x2c620005, 0x144000b3,
-0x0, 0x8ee204e0, 0x471021, 0xaee204e0, 0x8ee204e0, 0x8f43023c,
-0x43102b, 0x144000b5, 0x0, 0x8ee304d4, 0x8ee204e8, 0x506200b1,
-0xa2e004e4, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, 0x50400001,
-0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, 0x14c20007,
-0x0, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x8002b13,
-0x8ee201a0, 0x8ee204d4, 0xac62001c, 0x8ee404a0, 0x8ee504a4, 0x2462001c,
-0xac620008, 0x24020008, 0xa462000e, 0x24020011, 0xac620018, 0xac640000,
-0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400037,
-0x24100001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000,
-0x24020012, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b,
-0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee54e20,
-0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001, 0x10a20005,
-0x0, 0x8002afd, 0x0, 0x14a00005, 0x0, 0x8f820128,
-0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400013,
-0xac800000, 0x8002b13, 0x0, 0x8ee24e20, 0x24030040, 0x24420001,
-0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20,
-0x210c0, 0x24425028, 0x2e22021, 0x24020012, 0xac820000, 0x24020001,
-0xac820004, 0x5600000b, 0x24100001, 0x8ee204d4, 0x3c040001, 0x24844b14,
-0xafa00014, 0xafa20010, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403,
-0x34a5f006, 0x16000003, 0x24020001, 0x8002b69, 0xa2e204e4, 0x8ee2016c,
-0x24420001, 0xaee2016c, 0x8ee2016c, 0x8ee204d4, 0xa2e004e4, 0xaee004e0,
-0xaee204e8, 0x8f42023c, 0x5040003c, 0xaee07264, 0x8ee20180, 0x24420001,
-0xaee20180, 0x8ee20180, 0x8002b69, 0xaee07264, 0x8ee204f4, 0x24420001,
-0x50430003, 0x1021, 0x8ee204f4, 0x24420001, 0xaee204f4, 0x8ee204f4,
-0x8cc30018, 0x21080, 0x571021, 0x8c4404f8, 0x24020003, 0x1462000f,
-0x0, 0x3c020001, 0x571021, 0x904283a1, 0x10400014, 0x0,
-0x8ee201c8, 0x8ee35230, 0x441021, 0xaee201c8, 0x8ee201cc, 0x641821,
-0x306300ff, 0x8002b59, 0xaee35230, 0x8ee201c4, 0x8ee30e00, 0x441021,
-0xaee201c4, 0x8ee201cc, 0x641821, 0x306301ff, 0xaee30e00, 0x441021,
-0xaee201cc, 0x8ee20000, 0x34420040, 0x8002b69, 0xaee20000, 0x94c7000e,
-0x8cc2001c, 0x3c040001, 0x24844b20, 0xafa60014, 0xafa20010, 0x8cc60018,
-0x3c050008, 0xc002403, 0x34a50910, 0x8fbf001c, 0x8fb00018, 0x3e00008,
-0x27bd0020, 0x27bdff98, 0xafbf0060, 0xafbe005c, 0xafb60058, 0xafb50054,
-0xafb40050, 0xafb3004c, 0xafb20048, 0xafb10044, 0xafb00040, 0x8f830108,
-0x8f820104, 0xafa00024, 0x106203df, 0xafa0002c, 0x3c1e0001, 0x37de3800,
-0x3c0bffff, 0x8f930108, 0x8e620018, 0x8f830104, 0x2443fffe, 0x2c620014,
-0x104003c7, 0x31080, 0x3c010001, 0x220821, 0x8c224b30, 0x400008,
-0x0, 0x9663000e, 0x8ee2724c, 0x8ee404e0, 0x431021, 0xaee2724c,
-0x8e63001c, 0x96e20458, 0x24840001, 0xaee404e0, 0x24630001, 0x2442ffff,
-0x621824, 0xaee304d4, 0x8f42023c, 0x82202b, 0x148003b1, 0x0,
-0x8f830120, 0x27623800, 0x24660020, 0xc2102b, 0x50400001, 0x27663000,
-0x8f820128, 0x10c20004, 0x0, 0x8f820124, 0x14c20007, 0x0,
-0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x8002bf6, 0x8ee201a0,
-0x8ee204d4, 0xac62001c, 0x8ee404a0, 0x8ee504a4, 0x2462001c, 0xac620008,
-0x24020008, 0xa462000e, 0x24020011, 0xac620018, 0xac640000, 0xac650004,
-0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400037, 0x24100001,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020012,
-0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x240c0040,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001,
-0x104c0007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0,
-0x8002be0, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020,
-0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
-0x8002bf6, 0x0, 0x8ee24e20, 0x240c0040, 0x24420001, 0x504c0003,
-0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0,
-0x24425028, 0x2e22021, 0x24020012, 0x240c0001, 0xac820000, 0xac8c0004,
-0x5600000d, 0x24100001, 0x8ee204d4, 0x3c040001, 0x24844b14, 0xafa00014,
-0xafa20010, 0x8ee605f8, 0x8f470228, 0x3c050009, 0x34a5f006, 0xc002403,
-0xafab0038, 0x8fab0038, 0x1200030a, 0x240c0001, 0x8002f11, 0x0,
-0x966c001c, 0xafac002c, 0x9662001e, 0x3c0c8000, 0xafac0024, 0xae62001c,
-0x8e75001c, 0x8ee204ec, 0x8ee404ec, 0x151900, 0x621021, 0x8c52000c,
-0x92e27b88, 0x641821, 0x9476000a, 0x14400003, 0x32c20002, 0xaef27b94,
-0xaef57b8c, 0x1040004b, 0x8021, 0x96e2045a, 0x30420002, 0x10400047,
-0x0, 0x8e63001c, 0x8ee204ec, 0x32100, 0x821021, 0x8c42000c,
-0x37e1821, 0x24420022, 0x43102b, 0x1440000a, 0x24050014, 0x8ee204ec,
-0x821021, 0x8c44000c, 0xafab0038, 0xc002f65, 0x2484000e, 0x8fab0038,
-0x8002c4a, 0x3050ffff, 0x8ee204ec, 0x821021, 0x8c42000c, 0x9450000e,
-0x94430010, 0x94440012, 0x94450014, 0x2038021, 0x2048021, 0x2058021,
-0x94430016, 0x94440018, 0x9445001a, 0x2038021, 0x2048021, 0x2058021,
-0x9443001c, 0x9444001e, 0x94420020, 0x2038021, 0x2048021, 0x2028021,
-0x101c02, 0x3202ffff, 0x628021, 0x8e63001c, 0x8ee204ec, 0x102402,
-0x32900, 0xa21021, 0x8c43000c, 0x3202ffff, 0x828021, 0x37e1021,
-0x24630018, 0x62182b, 0x14600009, 0x0, 0x8ee204ec, 0xa21021,
-0x8c43000c, 0x101027, 0x3c01ffff, 0x230821, 0x8002c67, 0xa4220018,
-0x8ee204ec, 0xa21021, 0x8c43000c, 0x101027, 0xa4620018, 0x96e2045a,
-0x8821, 0x30420008, 0x14400063, 0xa021, 0x8e63001c, 0x8ee204ec,
-0x33100, 0xc21021, 0x8c42000c, 0x37e1821, 0x24420022, 0x43102b,
-0x14400035, 0x0, 0x8ee204ec, 0xc21021, 0x8c42000c, 0x24470010,
-0x37e1021, 0xe2102b, 0x50400001, 0xeb3821, 0x8ee204ec, 0x94f10000,
-0xc21021, 0x8c42000c, 0x24470016, 0x37e1021, 0xe2102b, 0x14400002,
-0x2634ffec, 0xeb3821, 0x8ee204ec, 0x90e30001, 0xc21021, 0x8c42000c,
-0x2447001a, 0x37e1021, 0xe2102b, 0x14400002, 0x2838821, 0xeb3821,
-0x94e20000, 0x24e70002, 0x2228821, 0x37e1021, 0xe2102b, 0x50400001,
-0xeb3821, 0x94e20000, 0x24e70002, 0x2228821, 0x37e1021, 0xe2102b,
-0x50400001, 0xeb3821, 0x94e20000, 0x24e70002, 0x2228821, 0x37e1021,
-0xe2102b, 0x50400001, 0xeb3821, 0x94e20000, 0x8002cc8, 0x2228821,
-0x8ee204ec, 0xc21021, 0x8c43000c, 0x8ee204ec, 0x94710010, 0x8ee304ec,
-0xc21021, 0x8c44000c, 0xc31821, 0x8c62000c, 0x2634ffec, 0x90840017,
-0x8ee304ec, 0x9442001a, 0x2848821, 0xc31821, 0x8c65000c, 0x8ee304ec,
-0x2228821, 0x8ee204ec, 0xc31821, 0xc21021, 0x8c44000c, 0x8c62000c,
-0x94a3001c, 0x9484001e, 0x94420020, 0x2238821, 0x2248821, 0x2228821,
-0x111c02, 0x3222ffff, 0x628821, 0x111c02, 0x3222ffff, 0x628821,
-0x32c20001, 0x104000b2, 0x0, 0x96e2045a, 0x30420001, 0x104000ae,
-0x32c20080, 0x10400008, 0x0, 0x92e27b88, 0x14400005, 0x0,
-0x240c0001, 0xa2ec7b88, 0xaef57b8c, 0xaef27b94, 0x8ee304ec, 0x151100,
-0x431021, 0x8c47000c, 0x37e1821, 0x24e2000e, 0x43102b, 0x14400008,
-0xe02021, 0x2405000e, 0xc002f65, 0xafab0038, 0x3042ffff, 0x8fab0038,
-0x8002d01, 0x2028021, 0x94e60000, 0x24e70002, 0x94e50000, 0x24e70002,
-0x94e30000, 0x24e70002, 0x94e20000, 0x24e70002, 0x94e40000, 0x24e70002,
-0x2068021, 0x2058021, 0x2038021, 0x2028021, 0x94e20000, 0x94e30002,
-0x2048021, 0x2028021, 0x2038021, 0x101c02, 0x3202ffff, 0x628021,
-0x101c02, 0x3202ffff, 0x8ee47b8c, 0x628021, 0x14950004, 0x3205ffff,
-0x96620016, 0x8002d0f, 0x512021, 0x96620016, 0x542021, 0x41402,
-0x3083ffff, 0x432021, 0x852023, 0x41402, 0x822021, 0x3084ffff,
-0x50800001, 0x3404ffff, 0x8ee27b94, 0x24430017, 0x37e1021, 0x62102b,
-0x50400001, 0x6b1821, 0x90630000, 0x24020011, 0x14620031, 0x24020006,
-0x8ee27b94, 0x37e1821, 0x24420028, 0x43102b, 0x14400018, 0x0,
-0x8ee27b8c, 0x12a2000a, 0x32c20100, 0x8ee27b94, 0x3c01ffff, 0x220821,
-0x94220028, 0x822021, 0x41c02, 0x3082ffff, 0x622021, 0x32c20100,
-0x14400004, 0x41027, 0x92e27b88, 0x14400002, 0x41027, 0x3044ffff,
-0x8ee27b94, 0x3c01ffff, 0x220821, 0x8002d82, 0xa4240028, 0x8ee27b8c,
-0x12a20008, 0x32c20100, 0x8ee27b94, 0x94420028, 0x822021, 0x41c02,
-0x3082ffff, 0x622021, 0x32c20100, 0x14400004, 0x41027, 0x92e27b88,
-0x14400002, 0x41027, 0x3044ffff, 0x8ee27b94, 0x8002d82, 0xa4440028,
-0x1462002f, 0x37e1821, 0x8ee27b94, 0x24420032, 0x43102b, 0x14400018,
-0x0, 0x8ee27b8c, 0x12a2000a, 0x32c20100, 0x8ee27b94, 0x3c01ffff,
-0x220821, 0x94220032, 0x822021, 0x41c02, 0x3082ffff, 0x622021,
-0x32c20100, 0x14400004, 0x41027, 0x92e27b88, 0x14400002, 0x41027,
-0x3044ffff, 0x8ee27b94, 0x3c01ffff, 0x220821, 0x8002d82, 0xa4240032,
-0x8ee27b8c, 0x12a20008, 0x32c20100, 0x8ee27b94, 0x94420032, 0x822021,
-0x41c02, 0x3082ffff, 0x622021, 0x32c20100, 0x14400004, 0x41027,
-0x92e27b88, 0x14400002, 0x41027, 0x3044ffff, 0x8ee27b94, 0xa4440032,
-0x8fac0024, 0x1180002c, 0x37e1821, 0x8e420000, 0xae42fffc, 0x2642000a,
-0x43102b, 0x1440001b, 0x34038100, 0x26430004, 0x37e1021, 0x62102b,
-0x14400003, 0x602021, 0x6b1821, 0x602021, 0x8c620000, 0x24630004,
-0xae420000, 0x37e1021, 0x62102b, 0x50400001, 0x6b1821, 0x8c620000,
-0xac820000, 0x34028100, 0xa4620000, 0x24630002, 0x37e1021, 0x62102b,
-0x50400001, 0x6b1821, 0x97ac002e, 0x8002dac, 0xa46c0000, 0x8e420004,
-0x8e440008, 0xa6430008, 0x97ac002e, 0xa64c000a, 0xae420000, 0xae440004,
-0x9662000e, 0x2652fffc, 0x24420004, 0xa662000e, 0x9662000e, 0x8ee3724c,
-0x621821, 0xaee3724c, 0xafb20018, 0x8ee3724c, 0xafa3001c, 0x8ee2724c,
-0x2c42003c, 0x10400004, 0x24620001, 0x2403fffe, 0x431024, 0xafa2001c,
-0x32c20080, 0x1040000c, 0x32c20100, 0x8ee27b98, 0x24430001, 0x210c0,
-0x571021, 0xaee37b98, 0x8fa30018, 0x8fa4001c, 0xac437b9c, 0xac447ba0,
-0x8002e98, 0xaee0724c, 0x10400072, 0x0, 0x8ee27b98, 0x24430001,
-0x210c0, 0x571021, 0xaee37b98, 0x8fa30018, 0x8fa4001c, 0xac437b9c,
-0xac447ba0, 0x8ee27b98, 0x10400063, 0x4821, 0x5021, 0x8f8200f0,
-0x24480008, 0x27621800, 0x102102b, 0x50400001, 0x27681000, 0x8f8200f4,
-0x15020007, 0x0, 0x8ee201b0, 0x8021, 0x24420001, 0xaee201b0,
-0x8002df2, 0x8ee201b0, 0x8f8300f0, 0x24100001, 0x1571021, 0x8c447b9c,
-0x8c457ba0, 0xac640000, 0xac650004, 0xaf8800f0, 0x16000006, 0x2ea1021,
-0x8ee20088, 0x24420001, 0xaee20088, 0x8002e37, 0x8ee20088, 0x8c427ba0,
-0x8ee400e0, 0x8ee500e4, 0x8ee67b8c, 0x401821, 0x1021, 0xa32821,
-0xa3382b, 0x822021, 0x872021, 0x8ee204ec, 0xc93021, 0x63100,
-0xaee400e0, 0xaee500e4, 0xc23021, 0x94c2000a, 0x240c0002, 0x21142,
-0x30430003, 0x106c0016, 0x28620003, 0x10400005, 0x240c0001, 0x106c0008,
-0x0, 0x8002e37, 0x0, 0x240c0003, 0x106c0017, 0x0,
-0x8002e37, 0x0, 0x8ee200e8, 0x8ee300ec, 0x24630001, 0x2c640001,
-0x441021, 0xaee200e8, 0xaee300ec, 0x8ee200e8, 0x8002e37, 0x8ee300ec,
-0x8ee200f0, 0x8ee300f4, 0x24630001, 0x2c640001, 0x441021, 0xaee200f0,
-0xaee300f4, 0x8ee200f0, 0x8002e37, 0x8ee300f4, 0x8ee200f8, 0x8ee300fc,
-0x24630001, 0x2c640001, 0x441021, 0xaee200f8, 0xaee300fc, 0x8ee200f8,
-0x8ee300fc, 0x8ee27b98, 0x25290001, 0x122102b, 0x1440ffa0, 0x254a0008,
-0xa2e07b88, 0x8002e97, 0xaee07b98, 0x8f8200f0, 0x24470008, 0x27621800,
-0xe2102b, 0x50400001, 0x27671000, 0x8f8200f4, 0x14e20007, 0x0,
-0x8ee201b0, 0x8021, 0x24420001, 0xaee201b0, 0x8002e55, 0x8ee201b0,
-0x8f8200f0, 0x24100001, 0x8fa30018, 0x8fa4001c, 0xac430000, 0xac440004,
-0xaf8700f0, 0x16000007, 0x0, 0x8ee20088, 0x24420001, 0xaee20088,
-0x8ee20088, 0x8002e98, 0xaee0724c, 0x8ee2724c, 0x8ee400e0, 0x8ee500e4,
-0x240c0002, 0x401821, 0x1021, 0xa32821, 0xa3302b, 0x822021,
-0x862021, 0x161142, 0x30430003, 0xaee400e0, 0xaee500e4, 0x106c0017,
-0x2c620003, 0x10400005, 0x240c0001, 0x106c0008, 0x0, 0x8002e98,
-0xaee0724c, 0x240c0003, 0x106c0019, 0x0, 0x8002e98, 0xaee0724c,
-0x8ee200e8, 0x8ee300ec, 0x24630001, 0x2c640001, 0x441021, 0xaee200e8,
-0xaee300ec, 0x8ee200e8, 0x8ee300ec, 0x8002e98, 0xaee0724c, 0x8ee200f0,
-0x8ee300f4, 0x24630001, 0x2c640001, 0x441021, 0xaee200f0, 0xaee300f4,
-0x8ee200f0, 0x8ee300f4, 0x8002e98, 0xaee0724c, 0x8ee200f8, 0x8ee300fc,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 17'
echo 'File patch-2.2.4 is continued in part 18'
echo 18 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 18 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 18; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
-0x24630001, 0x2c640001, 0x441021, 0xaee200f8, 0xaee300fc, 0x8ee200f8,
-0x8ee300fc, 0xaee0724c, 0x8e62001c, 0x96e30458, 0x8ee404e0, 0x24420001,
-0x2463ffff, 0x431024, 0x24840001, 0xaee204d4, 0xaee404e0, 0x8f42023c,
-0x82202b, 0x148000a8, 0x0, 0x8f830120, 0x27623800, 0x24660020,
-0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0,
-0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x8021, 0x24420001,
-0xaee201a0, 0x8002eff, 0x8ee201a0, 0x8ee204d4, 0xac62001c, 0x8ee404a0,
-0x8ee504a4, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011,
-0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120,
-0x92e24e10, 0x14400037, 0x24100001, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, 0x0, 0x8ee34e20,
-0x8ee24e24, 0x1062001b, 0x240c0040, 0x8c820004, 0x24420001, 0xac820004,
-0x8ee24e24, 0x8ee34e20, 0x24420001, 0x104c0007, 0x0, 0x8ee24e24,
-0x24420001, 0x10620005, 0x0, 0x8002ee9, 0x0, 0x14600005,
-0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
-0x2c420011, 0x50400013, 0xac800000, 0x8002eff, 0x0, 0x8ee24e20,
-0x240c0040, 0x24420001, 0x504c0003, 0x1021, 0x8ee24e20, 0x24420001,
-0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020012,
-0x240c0001, 0xac820000, 0xac8c0004, 0x5600000d, 0x24100001, 0x8ee204d4,
-0x3c040001, 0x24844b14, 0xafa00014, 0xafa20010, 0x8ee605f8, 0x8f470228,
-0x3c050009, 0x34a5f006, 0xc002403, 0xafab0038, 0x8fab0038, 0x16000003,
-0x240c0001, 0x8002f4c, 0xa2ec04e4, 0x8ee2016c, 0x24420001, 0xaee2016c,
-0x8ee2016c, 0x8ee204d4, 0xa2e004e4, 0xaee004e0, 0xaee07264, 0xaee204e8,
-0x8f42023c, 0x10400030, 0x0, 0x8ee20180, 0x24420001, 0xaee20180,
-0x8002f4c, 0x8ee20180, 0x8ee204f4, 0x240c0040, 0x24420001, 0x504c0003,
-0x1021, 0x8ee204f4, 0x24420001, 0xaee204f4, 0x8ee204f4, 0x8e630018,
-0x240c0003, 0x21080, 0x571021, 0x146c000f, 0x8c4404f8, 0x3c020001,
-0x571021, 0x904283a1, 0x10400014, 0x0, 0x8ee201c8, 0x8ee35230,
-0x441021, 0xaee201c8, 0x8ee201cc, 0x641821, 0x306300ff, 0x8002f47,
-0xaee35230, 0x8ee201c4, 0x8ee30e00, 0x441021, 0xaee201c4, 0x8ee201cc,
-0x641821, 0x306301ff, 0xaee30e00, 0x441021, 0xaee201cc, 0x8ee20000,
-0x34420040, 0xaee20000, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108,
-0x8f820108, 0x27633000, 0x43102b, 0x14400002, 0x27622800, 0xaf820108,
-0x8f830108, 0x8f820104, 0x1462fc26, 0x0, 0x8fbf0060, 0x8fbe005c,
-0x8fb60058, 0x8fb50054, 0x8fb40050, 0x8fb3004c, 0x8fb20048, 0x8fb10044,
-0x8fb00040, 0x3e00008, 0x27bd0068, 0x52843, 0x10a0000d, 0x3021,
-0x3c030001, 0x34633800, 0x3c07ffff, 0x3631021, 0x82102b, 0x50400001,
-0x872021, 0x94820000, 0x24840002, 0x24a5ffff, 0x14a0fff8, 0xc23021,
-0x61c02, 0x30c2ffff, 0x623021, 0x61c02, 0x30c2ffff, 0x623021,
-0x3e00008, 0x30c2ffff, 0x27bdff88, 0x240f0001, 0xafbf0070, 0xafbe006c,
-0xafb60068, 0xafb50064, 0xafb40060, 0xafb3005c, 0xafb20058, 0xafb10054,
-0xafb00050, 0xa3a00027, 0xafaf002c, 0x8ee204c4, 0x8021, 0x30420001,
-0x1440002a, 0xa3a00037, 0x8f8700e0, 0x8f8800c4, 0x8f8200e8, 0xe22023,
-0x2c821000, 0x50400001, 0x24841000, 0x420c2, 0x801821, 0x8ee400c8,
-0x8ee500cc, 0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021,
-0xaee400c8, 0xaee500cc, 0x8f8300c8, 0x3c02000a, 0x3442efff, 0x1032023,
-0x44102b, 0x10400003, 0x3c02000a, 0x3442f000, 0x822021, 0x801821,
-0x8ee400c0, 0x8ee500c4, 0x1021, 0xa32821, 0xa3302b, 0x822021,
-0x862021, 0xaee400c0, 0xaee500c4, 0xaf8800c8, 0xaf8700e4, 0x80034bc,
-0xaf8700e8, 0x3c020001, 0x571021, 0x904283b0, 0x1040000b, 0x0,
-0x3c140001, 0x297a021, 0x8e9483b4, 0x3c130001, 0x2779821, 0x8e7383b8,
-0x3c120001, 0x2579021, 0x8003183, 0x8e5283bc, 0x8f8300e0, 0x8f8200e4,
-0x10430007, 0x8821, 0x8f8200e4, 0x24110001, 0x8c430000, 0x8c440004,
-0xafa30018, 0xafa4001c, 0x1620000e, 0x3c02ffff, 0x8f8200c4, 0xafa20010,
-0x8f8200c8, 0x3c040001, 0x24844be0, 0xafa20014, 0x8f8600e0, 0x8f8700e4,
-0x3c050006, 0xc002403, 0x34a5f000, 0x80034bc, 0x0, 0x8fa3001c,
-0x8fb20018, 0x3074ffff, 0x2694fffc, 0x621024, 0x10400058, 0x2409821,
-0x3c020080, 0x621024, 0x1040000a, 0x3c040040, 0x8ee2007c, 0x24420001,
-0xaee2007c, 0x8ee2007c, 0x8ee201ec, 0x24420001, 0xaee201ec, 0x80034b6,
-0x8ee201ec, 0x3c060004, 0x3c0b0001, 0x3c0a0002, 0x3c050010, 0x3c090008,
-0x8ee20080, 0x3c080020, 0x34078000, 0x24420001, 0xaee20080, 0x8ee20080,
-0x8fa2001c, 0x441824, 0x10660021, 0xc3102b, 0x14400007, 0x0,
-0x106b0011, 0x0, 0x106a0015, 0x0, 0x8003039, 0x42042,
-0x10650023, 0xa3102b, 0x14400005, 0x0, 0x10690019, 0x0,
-0x8003039, 0x42042, 0x10680021, 0x0, 0x8003039, 0x42042,
-0x8ee20034, 0x24420001, 0xaee20034, 0x8ee20034, 0x8003039, 0x42042,
-0x8ee201dc, 0x24420001, 0xaee201dc, 0x8ee201dc, 0x8003039, 0x42042,
-0x8ee201e0, 0x24420001, 0xaee201e0, 0x8ee201e0, 0x8003039, 0x42042,
-0x8ee201e4, 0x24420001, 0xaee201e4, 0x8ee201e4, 0x8003039, 0x42042,
-0x8ee20030, 0x24420001, 0xaee20030, 0x8ee20030, 0x8003039, 0x42042,
-0x8ee201e8, 0x24420001, 0xaee201e8, 0x8ee201e8, 0x42042, 0x1087047c,
-0x0, 0x8002ffe, 0x0, 0x3c020001, 0x571021, 0x904283a2,
-0x14400084, 0x24020001, 0x3c030001, 0x771821, 0x906383a3, 0x1462007f,
-0x3c020100, 0x8e430000, 0x621024, 0x1040006f, 0x2402ffff, 0x14620005,
-0x24100001, 0x96430004, 0x3402ffff, 0x10620075, 0x0, 0x92e204c8,
-0x14400072, 0x0, 0x3c020001, 0x571021, 0x8c4283a4, 0x28420005,
-0x10400020, 0x3821, 0x3c020001, 0x571021, 0x8c4283a4, 0x18400016,
-0x2821, 0x96660000, 0x520c0, 0x971021, 0x9442776e, 0x14460009,
-0x971021, 0x94437770, 0x96620002, 0x14620005, 0x971021, 0x94437772,
-0x96620004, 0x50620008, 0x24070001, 0x3c020001, 0x571021, 0x8c4283a4,
-0x24a50001, 0xa2102a, 0x5440ffee, 0x520c0, 0x30e200ff, 0x10400440,
-0x0, 0x80030c5, 0x0, 0x2402021, 0xc0022f8, 0x24050006,
-0x3044001f, 0x428c0, 0x2e51021, 0x9442726c, 0x30424000, 0x14400434,
-0xb71021, 0x9443726e, 0x96620000, 0x1462000b, 0x418c0, 0xb71021,
-0x94437270, 0x96620002, 0x14620006, 0x418c0, 0xb71021, 0x94437272,
-0x96620004, 0x10620035, 0x418c0, 0x2e31021, 0x9442726c, 0x30428000,
-0x14400421, 0x2e31021, 0x944b726c, 0x96670000, 0xb28c0, 0xb71021,
-0x9442736e, 0x80030a7, 0x3021, 0x420c0, 0x2e41021, 0x9443736c,
-0x2e41021, 0x944b736c, 0x30638000, 0x14600010, 0xb28c0, 0xb71021,
-0x9442736e, 0x1447fff5, 0x1602021, 0xb71021, 0x94437370, 0x96620002,
-0x5462fff1, 0x420c0, 0xb71021, 0x94437372, 0x96620004, 0x5462ffec,
-0x420c0, 0x24060001, 0x30c200ff, 0x10400400, 0x0, 0x80030c5,
-0x0, 0x97430202, 0x96420000, 0x146203fa, 0x0, 0x97430204,
-0x96420002, 0x146203f6, 0x0, 0x97430206, 0x96420004, 0x146203f2,
-0x0, 0x92420000, 0x3a030001, 0x30420001, 0x431024, 0x10400074,
-0x2402ffff, 0x8e630000, 0x14620004, 0x3402ffff, 0x96630004, 0x1062006f,
-0x240f0002, 0x3c020001, 0x571021, 0x904283a2, 0x1440006a, 0x240f0003,
-0x92e204c8, 0x54400068, 0xafaf002c, 0x3c020001, 0x571021, 0x8c4283a4,
-0x28420005, 0x10400020, 0x3821, 0x3c020001, 0x571021, 0x8c4283a4,
-0x18400016, 0x2821, 0x96660000, 0x520c0, 0x971021, 0x9442776e,
-0x14460009, 0x971021, 0x94437770, 0x96620002, 0x14620005, 0x971021,
-0x94437772, 0x96620004, 0x50620008, 0x24070001, 0x3c020001, 0x571021,
-0x8c4283a4, 0x24a50001, 0xa2102a, 0x5440ffee, 0x520c0, 0x30e200ff,
-0x14400044, 0x240f0003, 0x80034b6, 0x0, 0x2402021, 0xc0022f8,
-0x24050006, 0x3044001f, 0x428c0, 0x2e51021, 0x9442726c, 0x30424000,
-0x144003af, 0xb71021, 0x9443726e, 0x96620000, 0x1462000b, 0x418c0,
-0xb71021, 0x94437270, 0x96620002, 0x14620006, 0x418c0, 0xb71021,
-0x94437272, 0x96620004, 0x10620027, 0x418c0, 0x2e31021, 0x9442726c,
-0x30428000, 0x1440039c, 0x2e31021, 0x944b726c, 0x96670000, 0xb28c0,
-0xb71021, 0x9442736e, 0x800312c, 0x3021, 0x420c0, 0x2e41021,
-0x9443736c, 0x2e41021, 0x944b736c, 0x30638000, 0x14600010, 0xb28c0,
-0xb71021, 0x9442736e, 0x1447fff5, 0x1602021, 0xb71021, 0x94437370,
-0x96620002, 0x5462fff1, 0x420c0, 0xb71021, 0x94437372, 0x96620004,
-0x5462ffec, 0x420c0, 0x24060001, 0x30c200ff, 0x1040037b, 0x0,
-0x800313f, 0x240f0003, 0x240f0001, 0xafaf002c, 0x8f420260, 0x54102b,
-0x1040003a, 0x0, 0x8f8300e4, 0x8f8200e0, 0x10620003, 0x24630008,
-0xaf8300e4, 0xaf8300e8, 0x8ee400c0, 0x8ee500c4, 0x2801821, 0x1021,
-0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaee400c0, 0xaee500c4,
-0x8ee20058, 0x24420001, 0xaee20058, 0x8ee20058, 0x8ee2007c, 0x24420001,
-0xaee2007c, 0x8ee2007c, 0x8f8200e0, 0xafa20010, 0x8f8200e4, 0x3c040001,
-0x24844be8, 0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050006, 0xc002403,
-0x34a5f003, 0x80034bc, 0x0, 0x8ee25230, 0xafa20010, 0x8ee25234,
-0x3c040001, 0x24844bf4, 0xafa20014, 0x8ee60e00, 0x8ee70e08, 0x3c050006,
-0xc002403, 0x34a5f002, 0x8ee201bc, 0x24420001, 0xaee201bc, 0x8ee20000,
-0x8ee301bc, 0x2403ffbf, 0x431024, 0x8003460, 0xaee20000, 0x96e20468,
-0x54102b, 0x10400003, 0x0, 0x240f0001, 0xa3af0027, 0x12800301,
-0x24160007, 0x24150040, 0x241e0001, 0x240e0012, 0x8ee2723c, 0x8f430280,
-0x24420001, 0x304203ff, 0x106202d3, 0x0, 0x93a20027, 0x10400014,
-0x0, 0x8ee35230, 0x8ee25234, 0x10620009, 0x26ed5234, 0x8ee65234,
-0x8ee35234, 0x21140, 0x24425238, 0x2e28021, 0x24630001, 0x80031af,
-0x306b00ff, 0x92e27238, 0x1440ffca, 0x0, 0x8ee201d0, 0x24420001,
-0xaee201d0, 0x8ee201d0, 0x8ee30e00, 0x8ee20e08, 0x1062ffc2, 0x26ed0e08,
-0x8ee60e08, 0x8ee30e08, 0x21140, 0x24420e10, 0x2e28021, 0x24630001,
-0x306b01ff, 0x96e2046a, 0x30420010, 0x10400019, 0x0, 0x9642000c,
-0x340f8100, 0x144f0015, 0x0, 0x3c020001, 0x571021, 0x904283b0,
-0x14400010, 0x0, 0x9642000e, 0xa6020016, 0x8e420008, 0x8e430004,
-0x8e440000, 0x2694fffc, 0xae42000c, 0xae430008, 0xae440004, 0x9602000e,
-0x26730004, 0x240f0001, 0xa3af0037, 0x34420200, 0xa602000e, 0x8e020000,
-0x8e030004, 0x3c040001, 0x34843800, 0x306a0007, 0x26a9823, 0x3641021,
-0x262102b, 0x10400005, 0x28aa021, 0x2641023, 0x3621823, 0x3c020020,
-0x439823, 0x26820007, 0x2404fff8, 0x9603000a, 0x446024, 0x6a1821,
-0x6c102b, 0x10400002, 0x1803821, 0x603821, 0xae130018, 0x8f880120,
-0x24e20007, 0x443824, 0x27623800, 0x25090020, 0x122102b, 0x50400001,
-0x27693000, 0x8f820128, 0x11220004, 0x0, 0x8f820124, 0x15220007,
-0x1401821, 0x8ee201a0, 0x8821, 0x24420001, 0xaee201a0, 0x800323c,
-0x8ee201a0, 0x8e040000, 0x8e050004, 0x1021, 0xad130008, 0xa507000e,
-0xad160018, 0xad06001c, 0xa3302b, 0xa32823, 0x822023, 0x862023,
-0xad040000, 0xad050004, 0x8ee204b0, 0xad020010, 0xaf890120, 0x92e24e10,
-0x14400033, 0x24110001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0x8c820000, 0x1456001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b,
-0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20,
-0x24420001, 0x10550007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005,
-0x0, 0x8003229, 0x0, 0x14600005, 0x0, 0x8f820128,
-0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010,
-0xac800000, 0x800323c, 0x0, 0x8ee24e20, 0x24420001, 0x50550003,
-0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0,
-0x24425028, 0x2e22021, 0xac960000, 0xac9e0004, 0x16200018, 0x3c050006,
-0x8e020018, 0x3c040001, 0x24844c00, 0xafa20010, 0x8e020000, 0x8e030004,
-0x34a5f009, 0x2003021, 0xc002403, 0xafa30014, 0x93a20037, 0x10400216,
-0x340f8100, 0x8e420004, 0x8e430008, 0x8e44000c, 0xa64f000c, 0xae420000,
-0xae430004, 0xae440008, 0x96020016, 0x8003460, 0xa642000e, 0x14ec0168,
-0x28a1823, 0x960c000a, 0x9603000e, 0x28a1023, 0xa602000a, 0x34620004,
-0xa602000e, 0x8f880120, 0x27623800, 0x25090020, 0x122102b, 0x14400002,
-0x306affff, 0x27693000, 0x8f820128, 0x11220004, 0x0, 0x8f820124,
-0x15220007, 0x24040020, 0x8ee201a0, 0x8821, 0x24420001, 0xaee201a0,
-0x80032ba, 0x8ee201a0, 0x8ee5723c, 0x8ee60480, 0x8ee70484, 0xa504000e,
-0x24040004, 0xad100008, 0xad040018, 0x52940, 0xa01821, 0x1021,
-0xe33821, 0xe3202b, 0xc23021, 0xc43021, 0xad060000, 0xad070004,
-0x8ee2723c, 0xad02001c, 0x8ee204b4, 0xad020010, 0xaf890120, 0x92e24e10,
-0x14400033, 0x24110001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0x8c820000, 0x1456001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b,
-0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20,
-0x24420001, 0x10550007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005,
-0x0, 0x80032a7, 0x0, 0x14600005, 0x0, 0x8f820128,
-0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010,
-0xac800000, 0x80032ba, 0x0, 0x8ee24e20, 0x24420001, 0x50550003,
-0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0,
-0x24425028, 0x2e22021, 0xac960000, 0xac9e0004, 0x1620000d, 0x0,
-0xa60c000a, 0xa60a000e, 0x8f820100, 0xafa20010, 0x8f820104, 0x3c040001,
-0x24844c0c, 0x3c050006, 0xafa20014, 0x8ee6723c, 0x800342b, 0x34a5f00b,
-0x3c010001, 0x370821, 0xa02083b0, 0xadab0000, 0x8ee201cc, 0x8ee3723c,
-0x2442ffff, 0xaee201cc, 0x8ee201cc, 0x24630001, 0x306303ff, 0x26e25234,
-0x15a20006, 0xaee3723c, 0x8ee201c8, 0x2442ffff, 0xaee201c8, 0x80032df,
-0x8ee201c8, 0x8ee201c4, 0x2442ffff, 0xaee201c4, 0x8ee201c4, 0x8f420240,
-0x10400073, 0x0, 0x8ee20e0c, 0x24420001, 0xaee20e0c, 0x8f430240,
-0x43102b, 0x14400176, 0xa021, 0x8f830120, 0x27623800, 0x24660020,
-0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0,
-0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x8821, 0x24420001,
-0xaee201a0, 0x800333f, 0x8ee201a0, 0x8ee2723c, 0xac62001c, 0x8ee40498,
-0x8ee5049c, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011,
-0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120,
-0x92e24e10, 0x14400033, 0x24110001, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0x8c820000, 0x144e001f, 0x0, 0x8ee34e20, 0x8ee24e24,
-0x1062001b, 0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24,
-0x8ee34e20, 0x24420001, 0x10550007, 0x0, 0x8ee24e24, 0x24420001,
-0x10620005, 0x0, 0x800332c, 0x0, 0x14600005, 0x0,
-0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
-0x50400010, 0xac800000, 0x800333f, 0x0, 0x8ee24e20, 0x24420001,
-0x50550003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20,
-0x210c0, 0x24425028, 0x2e22021, 0xac8e0000, 0xac9e0004, 0x5620000d,
-0x24110001, 0x8ee2723c, 0x3c040001, 0x24844c18, 0xafa00014, 0xafa20010,
-0x8ee6723c, 0x8f470280, 0x3c050009, 0x34a5f008, 0xc002403, 0xafae0048,
-0x8fae0048, 0x56200001, 0xaee00e0c, 0x8ee20184, 0x24420001, 0xaee20184,
-0x80033b8, 0x8ee20184, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
-0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124,
-0x14c20007, 0x0, 0x8ee201a0, 0x8821, 0x24420001, 0xaee201a0,
-0x80033aa, 0x8ee201a0, 0x8ee2723c, 0xac62001c, 0x8ee40498, 0x8ee5049c,
-0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011, 0xac620018,
-0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10,
-0x14400033, 0x24110001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0x8c820000, 0x144e001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b,
-0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20,
-0x24420001, 0x10550007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005,
-0x0, 0x8003397, 0x0, 0x14600005, 0x0, 0x8f820128,
-0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010,
-0xac800000, 0x80033aa, 0x0, 0x8ee24e20, 0x24420001, 0x50550003,
-0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0,
-0x24425028, 0x2e22021, 0xac8e0000, 0xac9e0004, 0x1620000d, 0x0,
-0x8ee2723c, 0x3c040001, 0x24844c18, 0xafa00014, 0xafa20010, 0x8ee6723c,
-0x8f470280, 0x3c050009, 0x34a5f008, 0xc002403, 0xafae0048, 0x8fae0048,
-0x8ee20170, 0x24420001, 0xaee20170, 0x8ee20170, 0x800345e, 0xa021,
-0x960c000a, 0x183102b, 0x54400001, 0x1801821, 0xa603000a, 0x8f880120,
-0x27623800, 0x25090020, 0x122102b, 0x50400001, 0x27693000, 0x8f820128,
-0x11220004, 0x0, 0x8f820124, 0x15220007, 0x24040020, 0x8ee201a0,
-0x8821, 0x24420001, 0xaee201a0, 0x800341f, 0x8ee201a0, 0x8ee5723c,
-0x8ee60480, 0x8ee70484, 0xa504000e, 0x24040004, 0xad100008, 0xad040018,
-0x52940, 0xa01821, 0x1021, 0xe33821, 0xe3202b, 0xc23021,
-0xc43021, 0xad060000, 0xad070004, 0x8ee2723c, 0xad02001c, 0x8ee204b4,
-0xad020010, 0xaf890120, 0x92e24e10, 0x14400033, 0x24110001, 0x8ee24e20,
-0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x1456001f, 0x0,
-0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004, 0x24420001,
-0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x10550007, 0x0,
-0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x800340c, 0x0,
-0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
-0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x800341f, 0x0,
-0x8ee24e20, 0x24420001, 0x50550003, 0x1021, 0x8ee24e20, 0x24420001,
-0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0xac960000,
-0xac9e0004, 0x1620001d, 0x0, 0xa60c000a, 0x8f820100, 0xafa20010,
-0x8f820104, 0x3c040001, 0x24844c0c, 0x3c050006, 0xafa20014, 0x8ee6723c,
-0x34a5f00d, 0xc002403, 0x2003821, 0x93a20037, 0x10400031, 0x340f8100,
-0x8e420004, 0x8e430008, 0x8e44000c, 0xa64f000c, 0xae420000, 0xae430004,
-0xae440008, 0x96020016, 0xa642000e, 0x9602000e, 0x3042fdff, 0x8003460,
-0xa602000e, 0x8ee201cc, 0x2442ffff, 0xaee201cc, 0x8ee201cc, 0x8ee201c4,
-0x3c04001f, 0x3c010001, 0x370821, 0xa03e83b0, 0x2442ffff, 0xaee201c4,
-0x9603000a, 0x3484ffff, 0x8ee201c4, 0x6a1821, 0x2639821, 0x93202b,
-0x10800003, 0x3c02fff5, 0x34421000, 0x2629821, 0xadab0000, 0x8ee2723c,
-0x24420001, 0x304203ff, 0xaee2723c, 0x8f420240, 0x10400004, 0x283a023,
-0x8ee20e0c, 0x24420001, 0xaee20e0c, 0xa3a00027, 0x1680fd29, 0x0,
-0x12800024, 0x0, 0x3c010001, 0x370821, 0xac3483b4, 0x3c010001,
-0x370821, 0xac3383b8, 0x3c010001, 0x370821, 0xac3283bc, 0x93a20037,
-0x10400008, 0x0, 0x3c020001, 0x571021, 0x8c4283bc, 0x24420004,
-0x3c010001, 0x370821, 0xac2283bc, 0x8ee2723c, 0x8f430280, 0x24420001,
-0x304203ff, 0x14620006, 0x0, 0x8ee201c0, 0x24420001, 0xaee201c0,
-0x80034bc, 0x8ee201c0, 0x8ee201b8, 0x24420001, 0xaee201b8, 0x80034bc,
-0x8ee201b8, 0x97a4001e, 0x2484fffc, 0x801821, 0x8ee400c0, 0x8ee500c4,
-0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaee400c0,
-0xaee500c4, 0x8faf002c, 0x24020002, 0x11e2000f, 0x29e20003, 0x14400017,
-0x24020003, 0x15e20015, 0x0, 0x8ee200d0, 0x8ee300d4, 0x24630001,
-0x2c640001, 0x441021, 0xaee200d0, 0xaee300d4, 0x8ee200d0, 0x80034b6,
-0x8ee300d4, 0x8ee200d8, 0x8ee300dc, 0x24630001, 0x2c640001, 0x441021,
-0xaee200d8, 0xaee300dc, 0x8ee200d8, 0x80034b6, 0x8ee300dc, 0x8ee200c8,
-0x8ee300cc, 0x24630001, 0x2c640001, 0x441021, 0xaee200c8, 0xaee300cc,
-0x8ee200c8, 0x8ee300cc, 0x8f8300e4, 0x8f8200e0, 0x10620003, 0x24630008,
-0xaf8300e4, 0xaf8300e8, 0x8fbf0070, 0x8fbe006c, 0x8fb60068, 0x8fb50064,
-0x8fb40060, 0x8fb3005c, 0x8fb20058, 0x8fb10054, 0x8fb00050, 0x3e00008,
-0x27bd0078, 0x27bdffb0, 0xafb50044, 0xa821, 0xafb00030, 0x8021,
-0xafbf004c, 0xafb60048, 0xafb40040, 0xafb3003c, 0xafb20038, 0xafb10034,
-0x8ee204c4, 0x24140001, 0x30420001, 0x1440002a, 0xb021, 0x8f8700e0,
-0x8f8800c4, 0x8f8200e8, 0xe22023, 0x2c821000, 0x50400001, 0x24841000,
-0x420c2, 0x801821, 0x8ee400c8, 0x8ee500cc, 0x1021, 0xa32821,
-0xa3302b, 0x822021, 0x862021, 0xaee400c8, 0xaee500cc, 0x8f8300c8,
-0x3c02000a, 0x3442efff, 0x1032023, 0x44102b, 0x10400003, 0x3c02000a,
-0x3442f000, 0x822021, 0x801821, 0x8ee400c0, 0x8ee500c4, 0x1021,
-0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaee400c0, 0xaee500c4,
-0xaf8800c8, 0xaf8700e4, 0x8003840, 0xaf8700e8, 0x3c020001, 0x571021,
-0x904283b0, 0x1040000b, 0x0, 0x3c130001, 0x2779821, 0x8e7383b4,
-0x3c110001, 0x2378821, 0x8e3183b8, 0x3c120001, 0x2579021, 0x80036d8,
-0x8e5283bc, 0x8f8300e0, 0x8f8200e4, 0x10430007, 0x4821, 0x8f8200e4,
-0x24090001, 0x8c430000, 0x8c440004, 0xafa30018, 0xafa4001c, 0x1520000e,
-0x3c02ffff, 0x8f8200c4, 0xafa20010, 0x8f8200c8, 0x3c040001, 0x24844be0,
-0xafa20014, 0x8f8600e0, 0x8f8700e4, 0x3c050006, 0xc002403, 0x34a5f000,
-0x8003840, 0x0, 0x8fa3001c, 0x8fb20018, 0x3073ffff, 0x2673fffc,
-0x621024, 0x10400058, 0x2408821, 0x3c020080, 0x621024, 0x1040000a,
-0x3c040040, 0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x8ee201ec,
-0x24420001, 0xaee201ec, 0x800383a, 0x8ee201ec, 0x3c060004, 0x3c0b0001,
-0x3c0a0002, 0x3c050010, 0x3c090008, 0x8ee20080, 0x3c080020, 0x34078000,
-0x24420001, 0xaee20080, 0x8ee20080, 0x8fa2001c, 0x441824, 0x10660021,
-0xc3102b, 0x14400007, 0x0, 0x106b0011, 0x0, 0x106a0015,
-0x0, 0x8003582, 0x42042, 0x10650023, 0xa3102b, 0x14400005,
-0x0, 0x10690019, 0x0, 0x8003582, 0x42042, 0x10680021,
-0x0, 0x8003582, 0x42042, 0x8ee20034, 0x24420001, 0xaee20034,
-0x8ee20034, 0x8003582, 0x42042, 0x8ee201dc, 0x24420001, 0xaee201dc,
-0x8ee201dc, 0x8003582, 0x42042, 0x8ee201e0, 0x24420001, 0xaee201e0,
-0x8ee201e0, 0x8003582, 0x42042, 0x8ee201e4, 0x24420001, 0xaee201e4,
-0x8ee201e4, 0x8003582, 0x42042, 0x8ee20030, 0x24420001, 0xaee20030,
-0x8ee20030, 0x8003582, 0x42042, 0x8ee201e8, 0x24420001, 0xaee201e8,
-0x8ee201e8, 0x42042, 0x108702b7, 0x0, 0x8003547, 0x0,
-0x3c020001, 0x571021, 0x904283a2, 0x14400084, 0x24020001, 0x3c030001,
-0x771821, 0x906383a3, 0x1462007f, 0x3c020100, 0x8e430000, 0x621024,
-0x1040006f, 0x2402ffff, 0x14620005, 0x24100001, 0x96430004, 0x3402ffff,
-0x10620075, 0x0, 0x92e204c8, 0x14400072, 0x0, 0x3c020001,
-0x571021, 0x8c4283a4, 0x28420005, 0x10400020, 0x3821, 0x3c020001,
-0x571021, 0x8c4283a4, 0x18400016, 0x2821, 0x96260000, 0x520c0,
-0x971021, 0x9442776e, 0x14460009, 0x971021, 0x94437770, 0x96220002,
-0x14620005, 0x971021, 0x94437772, 0x96220004, 0x50620008, 0x24070001,
-0x3c020001, 0x571021, 0x8c4283a4, 0x24a50001, 0xa2102a, 0x5440ffee,
-0x520c0, 0x30e200ff, 0x1040027b, 0x0, 0x800360e, 0x0,
-0x2402021, 0xc0022f8, 0x24050006, 0x3044001f, 0x428c0, 0x2e51021,
-0x9442726c, 0x30424000, 0x1440026f, 0xb71021, 0x9443726e, 0x96220000,
-0x1462000b, 0x418c0, 0xb71021, 0x94437270, 0x96220002, 0x14620006,
-0x418c0, 0xb71021, 0x94437272, 0x96220004, 0x10620035, 0x418c0,
-0x2e31021, 0x9442726c, 0x30428000, 0x1440025c, 0x2e31021, 0x9448726c,
-0x96270000, 0x828c0, 0xb71021, 0x9442736e, 0x80035f0, 0x3021,
-0x420c0, 0x2e41021, 0x9443736c, 0x2e41021, 0x9448736c, 0x30638000,
-0x14600010, 0x828c0, 0xb71021, 0x9442736e, 0x1447fff5, 0x1002021,
-0xb71021, 0x94437370, 0x96220002, 0x5462fff1, 0x420c0, 0xb71021,
-0x94437372, 0x96220004, 0x5462ffec, 0x420c0, 0x24060001, 0x30c200ff,
-0x1040023b, 0x0, 0x800360e, 0x0, 0x97430202, 0x96420000,
-0x14620235, 0x0, 0x97430204, 0x96420002, 0x14620231, 0x0,
-0x97430206, 0x96420004, 0x1462022d, 0x0, 0x92420000, 0x3a030001,
-0x30420001, 0x431024, 0x10400074, 0x2402ffff, 0x8e230000, 0x14620004,
-0x3402ffff, 0x96230004, 0x1062006f, 0x24140002, 0x3c020001, 0x571021,
-0x904283a2, 0x1440006a, 0x24140003, 0x92e204c8, 0x14400067, 0x0,
-0x3c020001, 0x571021, 0x8c4283a4, 0x28420005, 0x10400020, 0x3821,
-0x3c020001, 0x571021, 0x8c4283a4, 0x18400016, 0x2821, 0x96260000,
-0x520c0, 0x971021, 0x9442776e, 0x14460009, 0x971021, 0x94437770,
-0x96220002, 0x14620005, 0x971021, 0x94437772, 0x96220004, 0x50620008,
-0x24070001, 0x3c020001, 0x571021, 0x8c4283a4, 0x24a50001, 0xa2102a,
-0x5440ffee, 0x520c0, 0x30e200ff, 0x14400044, 0x24140003, 0x800383a,
-0x0, 0x2402021, 0xc0022f8, 0x24050006, 0x3044001f, 0x428c0,
-0x2e51021, 0x9442726c, 0x30424000, 0x144001ea, 0xb71021, 0x9443726e,
-0x96220000, 0x1462000b, 0x418c0, 0xb71021, 0x94437270, 0x96220002,
-0x14620006, 0x418c0, 0xb71021, 0x94437272, 0x96220004, 0x10620027,
-0x418c0, 0x2e31021, 0x9442726c, 0x30428000, 0x144001d7, 0x2e31021,
-0x9448726c, 0x96270000, 0x828c0, 0xb71021, 0x9442736e, 0x8003675,
-0x3021, 0x420c0, 0x2e41021, 0x9443736c, 0x2e41021, 0x9448736c,
-0x30638000, 0x14600010, 0x828c0, 0xb71021, 0x9442736e, 0x1447fff5,
-0x1002021, 0xb71021, 0x94437370, 0x96220002, 0x5462fff1, 0x420c0,
-0xb71021, 0x94437372, 0x96220004, 0x5462ffec, 0x420c0, 0x24060001,
-0x30c200ff, 0x104001b6, 0x0, 0x8003688, 0x24140003, 0x24140001,
-0x8f420260, 0x53102b, 0x10400049, 0x0, 0x8f8300e4, 0x8f8200e0,
-0x10620003, 0x24630008, 0xaf8300e4, 0xaf8300e8, 0x8ee400c0, 0x8ee500c4,
-0x2601821, 0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021,
-0xaee400c0, 0xaee500c4, 0x8ee20058, 0x24420001, 0xaee20058, 0x8ee20058,
-0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0, 0xafa20010,
-0x8f8200e4, 0x3c040001, 0x24844be8, 0xafa20014, 0x8fa60018, 0x8fa7001c,
-0x3c050006, 0xc002403, 0x34a5f003, 0x8003840, 0x0, 0x8ee25230,
-0xafa20010, 0x8ee25234, 0x3c040001, 0x24844bf4, 0xafa20014, 0x8ee60e00,
-0x8ee70e08, 0xc002403, 0x34a5f002, 0x8ee201bc, 0x24420001, 0xaee201bc,
-0x8ee20000, 0x8ee301bc, 0x2403ffbf, 0x431024, 0x80037e8, 0xaee20000,
-0x8ee25230, 0xafa20010, 0x8ee25234, 0x3c040001, 0x24844bf4, 0xafa20014,
-0x8ee60e00, 0x8ee70e08, 0x3c050006, 0xc002403, 0x34a5f002, 0x8ee201bc,
-0x24420001, 0xaee201bc, 0x80037e8, 0x8ee201bc, 0x96e20468, 0x53102b,
-0x54400001, 0x3c158000, 0x12600131, 0x3c0c001f, 0x358cffff, 0x8ee2723c,
-0x8f430280, 0x24420001, 0x304203ff, 0x10620108, 0x0, 0x12a00014,
-0x0, 0x8ee35230, 0x8ee25234, 0x10620009, 0x26ee5234, 0x8eeb5234,
-0x8ee35234, 0x21140, 0x24425238, 0x2e28021, 0x24630001, 0x8003702,
-0x306800ff, 0x92e27238, 0x1440ffc0, 0x3c050006, 0x8ee201d0, 0x24420001,
-0xaee201d0, 0x8ee201d0, 0x8ee30e00, 0x8ee20e08, 0x1062ffcb, 0x26ee0e08,
-0x8eeb0e08, 0xa821, 0x8ee30e08, 0x21140, 0x24420e10, 0x2e28021,
-0x24630001, 0x306801ff, 0x96e2046a, 0x30420010, 0x10400017, 0x34028100,
-0x9643000c, 0x14620014, 0x0, 0x3c020001, 0x571021, 0x904283b0,
-0x1440000f, 0x0, 0x9642000e, 0xa6020016, 0x8e420008, 0x8e430004,
-0x8e440000, 0x2673fffc, 0xae42000c, 0xae430008, 0xae440004, 0x9602000e,
-0x26310004, 0x24160001, 0x34420200, 0xa602000e, 0x9603000a, 0x2605021,
-0x73102b, 0x10400002, 0x2606821, 0x605021, 0x2d42003d, 0x1040002a,
-0x3821, 0x9623000c, 0x24020800, 0x54620027, 0xae110018, 0x3c020001,
-0x571021, 0x904283b0, 0x54400022, 0xae110018, 0x26220017, 0x182102b,
-0x10400013, 0x0, 0x3c02fff5, 0x511021, 0x90421017, 0x38430006,
-0x2c630001, 0x38420011, 0x2c420001, 0x621825, 0x10600013, 0x26220010,
-0x182102b, 0x1040000e, 0x0, 0x3c07fff5, 0xf13821, 0x94e71010,
-0x800374e, 0x24e7000e, 0x92220017, 0x38430006, 0x2c630001, 0x38420011,
-0x2c420001, 0x621825, 0x50600004, 0xae110018, 0x96270010, 0x24e7000e,
-0xae110018, 0x3c020001, 0x571021, 0x904283b0, 0x2102b, 0x14e00002,
-0x24ec0, 0x1403821, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
-0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124,
-0x14c20007, 0x2402000b, 0x8ee201a0, 0x4821, 0x24420001, 0xaee201a0,
-0x80037af, 0x8ee201a0, 0x8e040000, 0x8e050004, 0xac620018, 0x1751025,
-0x491025, 0xac710008, 0xa467000e, 0xac62001c, 0xac640000, 0xac650004,
-0x8ee204b0, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400038, 0x24090001,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020007,
-0x14620020, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001c, 0x0,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee34e24, 0x8ee54e20, 0x24020040,
-0x24630001, 0x10620007, 0x0, 0x8ee24e24, 0x24420001, 0x10a20005,
-0x0, 0x8003799, 0x0, 0x14a00005, 0x0, 0x8f820128,
-0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400013,
-0xac800000, 0x80037af, 0x0, 0x8ee24e20, 0x24030040, 0x24420001,
-0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20,
-0x210c0, 0x24425028, 0x2e22021, 0x24020007, 0xac820000, 0x24020001,
-0xac820004, 0x15200018, 0x3c050006, 0x8e020018, 0x3c040001, 0x24844c00,
-0xafa20010, 0x8e020000, 0x8e030004, 0x34a5f009, 0x2003021, 0xc002403,
-0xafa30014, 0x32c200ff, 0x1040002b, 0x34028100, 0x8e430004, 0x8e440008,
-0x8e45000c, 0xa642000c, 0xae430000, 0xae440004, 0xae450008, 0x96020016,
-0x80037e8, 0xa642000e, 0x154d000a, 0x0, 0x9602000e, 0xa613000a,
-0x34420004, 0xa602000e, 0x3c010001, 0x370821, 0xa02083b0, 0x80037e6,
-0x9821, 0x9604000a, 0x93102b, 0x10400002, 0x2601821, 0x801821,
-0x24020001, 0xa603000a, 0x3c010001, 0x370821, 0xa02283b0, 0x9604000a,
-0x2248821, 0x191102b, 0x10400003, 0x3c02fff5, 0x34421000, 0x2228821,
-0x2649823, 0xa821, 0x1660fef4, 0xadc80000, 0x12600021, 0x32c200ff,
-0x3c010001, 0x370821, 0xac3383b4, 0x3c010001, 0x370821, 0xac3183b8,
-0x3c010001, 0x370821, 0x10400008, 0xac3283bc, 0x3c020001, 0x571021,
-0x8c4283bc, 0x24420004, 0x3c010001, 0x370821, 0xac2283bc, 0x8ee2723c,
-0x8f430280, 0x24420001, 0x14620006, 0x0, 0x8ee201c0, 0x24420001,
-0xaee201c0, 0x8003840, 0x8ee201c0, 0x8ee201b8, 0x24420001, 0xaee201b8,
-0x8003840, 0x8ee201b8, 0x97a4001e, 0x2484fffc, 0x801821, 0x8ee400c0,
-0x8ee500c4, 0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021,
-0x24020002, 0xaee400c0, 0xaee500c4, 0x1282000f, 0x2a820003, 0x14400017,
-0x24020003, 0x16820015, 0x0, 0x8ee200d0, 0x8ee300d4, 0x24630001,
-0x2c640001, 0x441021, 0xaee200d0, 0xaee300d4, 0x8ee200d0, 0x800383a,
-0x8ee300d4, 0x8ee200d8, 0x8ee300dc, 0x24630001, 0x2c640001, 0x441021,
-0xaee200d8, 0xaee300dc, 0x8ee200d8, 0x800383a, 0x8ee300dc, 0x8ee200c8,
-0x8ee300cc, 0x24630001, 0x2c640001, 0x441021, 0xaee200c8, 0xaee300cc,
-0x8ee200c8, 0x8ee300cc, 0x8f8300e4, 0x8f8200e0, 0x10620003, 0x24630008,
-0xaf8300e4, 0xaf8300e8, 0x8fbf004c, 0x8fb60048, 0x8fb50044, 0x8fb40040,
-0x8fb3003c, 0x8fb20038, 0x8fb10034, 0x8fb00030, 0x3e00008, 0x27bd0050,
-0x27bdff90, 0xafb60060, 0xb021, 0xafbf0068, 0xafbe0064, 0xafb5005c,
-0xafb40058, 0xafb30054, 0xafb20050, 0xafb1004c, 0xafb00048, 0x8ee204c4,
-0x8821, 0x24150001, 0x30420001, 0x1440002a, 0xa3a0002f, 0x8f8700e0,
-0x8f8800c4, 0x8f8200e8, 0xe22023, 0x2c821000, 0x50400001, 0x24841000,
-0x420c2, 0x801821, 0x8ee400c8, 0x8ee500cc, 0x1021, 0xa32821,
-0xa3302b, 0x822021, 0x862021, 0xaee400c8, 0xaee500cc, 0x8f8300c8,
-0x3c02000a, 0x3442efff, 0x1032023, 0x44102b, 0x10400003, 0x3c02000a,
-0x3442f000, 0x822021, 0x801821, 0x8ee400c0, 0x8ee500c4, 0x1021,
-0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaee400c0, 0xaee500c4,
-0xaf8800c8, 0xaf8700e4, 0x8003c4b, 0xaf8700e8, 0x3c020001, 0x571021,
-0x904283b0, 0x1040000b, 0x0, 0x3c130001, 0x2779821, 0x8e7383b4,
-0x3c100001, 0x2178021, 0x8e1083b8, 0x3c120001, 0x2579021, 0x8003a49,
-0x8e5283bc, 0x8f8300e0, 0x8f8200e4, 0x10430007, 0x3821, 0x8f8200e4,
-0x24070001, 0x8c430000, 0x8c440004, 0xafa30018, 0xafa4001c, 0x14e0000e,
-0x3c02ffff, 0x8f8200c4, 0xafa20010, 0x8f8200c8, 0x3c040001, 0x24844c24,
-0xafa20014, 0x8f8600e0, 0x8f8700e4, 0x3c050006, 0xc002403, 0x34a5f200,
-0x8003c4b, 0x0, 0x8fa3001c, 0x8fb20018, 0x3073ffff, 0x2673fffc,
-0x621024, 0x10400058, 0x2408021, 0x3c020080, 0x621024, 0x1040000a,
-0x3c040040, 0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x8ee201ec,
-0x24420001, 0xaee201ec, 0x8003c45, 0x8ee201ec, 0x3c060004, 0x3c0b0001,
-0x3c0a0002, 0x3c050010, 0x3c090008, 0x8ee20080, 0x3c080020, 0x34078000,
-0x24420001, 0xaee20080, 0x8ee20080, 0x8fa2001c, 0x441824, 0x10660021,
-0xc3102b, 0x14400007, 0x0, 0x106b0011, 0x0, 0x106a0015,
-0x0, 0x8003906, 0x42042, 0x10650023, 0xa3102b, 0x14400005,
-0x0, 0x10690019, 0x0, 0x8003906, 0x42042, 0x10680021,
-0x0, 0x8003906, 0x42042, 0x8ee20034, 0x24420001, 0xaee20034,
-0x8ee20034, 0x8003906, 0x42042, 0x8ee201dc, 0x24420001, 0xaee201dc,
-0x8ee201dc, 0x8003906, 0x42042, 0x8ee201e0, 0x24420001, 0xaee201e0,
-0x8ee201e0, 0x8003906, 0x42042, 0x8ee201e4, 0x24420001, 0xaee201e4,
-0x8ee201e4, 0x8003906, 0x42042, 0x8ee20030, 0x24420001, 0xaee20030,
-0x8ee20030, 0x8003906, 0x42042, 0x8ee201e8, 0x24420001, 0xaee201e8,
-0x8ee201e8, 0x42042, 0x1087033e, 0x0, 0x80038cb, 0x0,
-0x3c020001, 0x571021, 0x904283a2, 0x14400084, 0x24020001, 0x3c030001,
-0x771821, 0x906383a3, 0x1462007f, 0x3c020100, 0x8e430000, 0x621024,
-0x1040006f, 0x2402ffff, 0x14620005, 0x24110001, 0x96430004, 0x3402ffff,
-0x10620075, 0x0, 0x92e204c8, 0x14400072, 0x0, 0x3c020001,
-0x571021, 0x8c4283a4, 0x28420005, 0x10400020, 0x3821, 0x3c020001,
-0x571021, 0x8c4283a4, 0x18400016, 0x2821, 0x96060000, 0x520c0,
-0x971021, 0x9442776e, 0x14460009, 0x971021, 0x94437770, 0x96020002,
-0x14620005, 0x971021, 0x94437772, 0x96020004, 0x50620008, 0x24070001,
-0x3c020001, 0x571021, 0x8c4283a4, 0x24a50001, 0xa2102a, 0x5440ffee,
-0x520c0, 0x30e200ff, 0x10400302, 0x0, 0x8003992, 0x0,
-0x2402021, 0xc0022f8, 0x24050006, 0x3044001f, 0x428c0, 0x2e51021,
-0x9442726c, 0x30424000, 0x144002f6, 0xb71021, 0x9443726e, 0x96020000,
-0x1462000b, 0x418c0, 0xb71021, 0x94437270, 0x96020002, 0x14620006,
-0x418c0, 0xb71021, 0x94437272, 0x96020004, 0x10620035, 0x418c0,
-0x2e31021, 0x9442726c, 0x30428000, 0x144002e3, 0x2e31021, 0x944d726c,
-0x96070000, 0xd28c0, 0xb71021, 0x9442736e, 0x8003974, 0x3021,
-0x420c0, 0x2e41021, 0x9443736c, 0x2e41021, 0x944d736c, 0x30638000,
-0x14600010, 0xd28c0, 0xb71021, 0x9442736e, 0x1447fff5, 0x1a02021,
-0xb71021, 0x94437370, 0x96020002, 0x5462fff1, 0x420c0, 0xb71021,
-0x94437372, 0x96020004, 0x5462ffec, 0x420c0, 0x24060001, 0x30c200ff,
-0x104002c2, 0x0, 0x8003992, 0x0, 0x97430202, 0x96420000,
-0x146202bc, 0x0, 0x97430204, 0x96420002, 0x146202b8, 0x0,
-0x97430206, 0x96420004, 0x146202b4, 0x0, 0x92420000, 0x3a230001,
-0x30420001, 0x431024, 0x10400074, 0x2402ffff, 0x8e030000, 0x14620004,
-0x3402ffff, 0x96030004, 0x1062006f, 0x24150002, 0x3c020001, 0x571021,
-0x904283a2, 0x1440006a, 0x24150003, 0x92e204c8, 0x14400067, 0x0,
-0x3c020001, 0x571021, 0x8c4283a4, 0x28420005, 0x10400020, 0x3821,
-0x3c020001, 0x571021, 0x8c4283a4, 0x18400016, 0x2821, 0x96060000,
-0x520c0, 0x971021, 0x9442776e, 0x14460009, 0x971021, 0x94437770,
-0x96020002, 0x14620005, 0x971021, 0x94437772, 0x96020004, 0x50620008,
-0x24070001, 0x3c020001, 0x571021, 0x8c4283a4, 0x24a50001, 0xa2102a,
-0x5440ffee, 0x520c0, 0x30e200ff, 0x14400044, 0x24150003, 0x8003c45,
-0x0, 0x2402021, 0xc0022f8, 0x24050006, 0x3044001f, 0x428c0,
-0x2e51021, 0x9442726c, 0x30424000, 0x14400271, 0xb71021, 0x9443726e,
-0x96020000, 0x1462000b, 0x418c0, 0xb71021, 0x94437270, 0x96020002,
-0x14620006, 0x418c0, 0xb71021, 0x94437272, 0x96020004, 0x10620027,
-0x418c0, 0x2e31021, 0x9442726c, 0x30428000, 0x1440025e, 0x2e31021,
-0x944d726c, 0x96070000, 0xd28c0, 0xb71021, 0x9442736e, 0x80039f9,
-0x3021, 0x420c0, 0x2e41021, 0x9443736c, 0x2e41021, 0x944d736c,
-0x30638000, 0x14600010, 0xd28c0, 0xb71021, 0x9442736e, 0x1447fff5,
-0x1a02021, 0xb71021, 0x94437370, 0x96020002, 0x5462fff1, 0x420c0,
-0xb71021, 0x94437372, 0x96020004, 0x5462ffec, 0x420c0, 0x24060001,
-0x30c200ff, 0x1040023d, 0x0, 0x8003a0c, 0x24150003, 0x24150001,
-0x8f420260, 0x53102b, 0x10400036, 0x0, 0x8f8300e4, 0x8f8200e0,
-0x10620003, 0x24630008, 0xaf8300e4, 0xaf8300e8, 0x8ee400c0, 0x8ee500c4,
-0x2601821, 0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021,
-0xaee400c0, 0xaee500c4, 0x8ee20058, 0x24420001, 0xaee20058, 0x8ee20058,
-0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0, 0xafa20010,
-0x8f8200e4, 0x3c040001, 0x24844c30, 0xafa20014, 0x8fa60018, 0x8fa7001c,
-0x3c050006, 0xc002403, 0x34a5f203, 0x8003c4b, 0x0, 0x8ee25230,
-0xafa20010, 0x8ee25234, 0x3c040001, 0x24844c3c, 0xafa20014, 0x8ee60e00,
-0x8ee70e08, 0x3c050006, 0xc002403, 0x34a5f202, 0x8ee201bc, 0x24420001,
-0xaee201bc, 0x8003bf2, 0x8ee201bc, 0x96e20468, 0x53102b, 0x54400001,
-0x3c168000, 0x126001cb, 0x3c0e001f, 0x35ceffff, 0x3c0ffff5, 0x35ef1000,
-0x241e0040, 0x8ee2723c, 0x8f430280, 0x24420001, 0x304203ff, 0x1062019e,
-0x0, 0x12c00012, 0x0, 0x8ee35230, 0x8ee25234, 0x1062000a,
-0x26f85234, 0x8ef45234, 0xafb80024, 0x8ee35234, 0x21140, 0x24425238,
-0x2e28821, 0x24630001, 0x8003a75, 0x306d00ff, 0x8ee201d0, 0x24420001,
-0xaee201d0, 0x8ee201d0, 0x8ee30e00, 0x8ee20e08, 0x1062ffca, 0x26f80e08,
-0x8ef40e08, 0xb021, 0xafb80024, 0x8ee30e08, 0x21140, 0x24420e10,
-0x2e28821, 0x24630001, 0x306d01ff, 0x96e2046a, 0x30420010, 0x10400018,
-0x34028100, 0x9643000c, 0x14620015, 0x0, 0x3c020001, 0x571021,
-0x904283b0, 0x14400010, 0x0, 0x9642000e, 0xa6220016, 0x8e420008,
-0x8e430004, 0x8e440000, 0x2673fffc, 0xae42000c, 0xae430008, 0xae440004,
-0x9622000e, 0x26100004, 0x24180001, 0xa3b8002f, 0x34420200, 0xa622000e,
-0x8e220000, 0x8e230004, 0x3c040001, 0x34843800, 0x2003021, 0x306a0007,
-0x20a8023, 0x3641021, 0x202102b, 0x10400005, 0x26a9821, 0x2041023,
-0x3621823, 0x3c020020, 0x438023, 0x26620007, 0x9623000a, 0x2418fff8,
-0x58c824, 0x6a1821, 0x79102b, 0x10400002, 0x3206021, 0x606021,
-0x1801821, 0x24620007, 0x2418fff8, 0x586024, 0x26c102b, 0x14400004,
-0x1932823, 0x1832823, 0x8003ab3, 0xc31021, 0xd31021, 0x4a2023,
-0x1c4102b, 0x54400001, 0x8f2021, 0x25420040, 0x4c102b, 0x14400035,
-0x5821, 0x94c3000c, 0x24020800, 0x54620032, 0xae260018, 0x3c020001,
-0x571021, 0x904283b0, 0x5440002d, 0xae260018, 0x24c20017, 0x1c2102b,
-0x10400013, 0x0, 0x3c02fff5, 0x461021, 0x90421017, 0x38430006,
-0x2c630001, 0x38420011, 0x2c420001, 0x621825, 0x10600014, 0x24c20010,
-0x1c2102b, 0x1040000e, 0x0, 0x3c0bfff5, 0x1665821, 0x956b1010,
-0x8003ae4, 0x2562000e, 0x90c20017, 0x38430006, 0x2c630001, 0x38420011,
-0x2c420001, 0x621825, 0x10600005, 0x1601821, 0x94cb0010, 0x2562000e,
-0x4a5821, 0x1601821, 0x24620007, 0x2418fff8, 0x585824, 0xc31021,
-0x4a2023, 0x1c4102b, 0x10400002, 0x1632823, 0x8f2021, 0xae260018,
-0x3c020001, 0x571021, 0x904283b0, 0x2102b, 0x216c0, 0x15600002,
-0xafa20044, 0x1805821, 0x30820001, 0x10400007, 0x4021, 0x90880000,
-0x24840001, 0x1c4102b, 0x10400002, 0x24a5ffff, 0x8f2021, 0x50a00012,
-0x81c02, 0x2ca20002, 0x54400009, 0x24a5ffff, 0x94820000, 0x24840002,
-0x1024021, 0x1c4102b, 0x10400006, 0x24a5fffe, 0x8003b11, 0x8f2021,
-0x90820000, 0x21200, 0x1024021, 0x14a0fff2, 0x2ca20002, 0x81c02,
-0x3102ffff, 0x624021, 0x3108ffff, 0x1402821, 0x11400011, 0x2002021,
-0x2ca20002, 0x54400009, 0x24a5ffff, 0x94820000, 0x24840002, 0x1024021,
-0x1c4102b, 0x10400006, 0x24a5fffe, 0x8003b28, 0x8f2021, 0x90820000,
-0x21200, 0x1024021, 0x14a0fff2, 0x2ca20002, 0x81c02, 0x3102ffff,
-0x624021, 0x81c02, 0x3102ffff, 0x8f890120, 0x624021, 0x27623800,
-0x25230020, 0x62102b, 0x14400002, 0x3108ffff, 0x27633000, 0x8f820128,
-0x10620004, 0x0, 0x8f820124, 0x14620007, 0x1402821, 0x8ee201a0,
-0x3821, 0x24420001, 0xaee201a0, 0x8003bb9, 0x8ee201a0, 0x8e260000,
-0x8e270004, 0x81400, 0x3448000b, 0xad300008, 0xa52b000e, 0xad280018,
-0x8fb80044, 0x2021, 0x2961025, 0x581025, 0xad22001c, 0xe5102b,
-0xe53823, 0xc43023, 0xc23023, 0xad260000, 0xad270004, 0x8ee204b0,
-0xad220010, 0xaf830120, 0x92e24e10, 0x1440005f, 0x24070001, 0x2502ffee,
-0x2c420002, 0x14400003, 0x24020011, 0x15020024, 0x0, 0x8ee24e20,
-0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020012, 0x1462000f,
-0x0, 0x8ee34e20, 0x8ee24e24, 0x1062000b, 0x0, 0x8c820004,
-0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x105e002a,
-0x0, 0x8003b98, 0x0, 0x8ee24e20, 0x24420001, 0x505e0003,
-0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0,
-0x24425028, 0x2e22021, 0x8003bb6, 0x24020012, 0x8ee24e20, 0x210c0,
-0x24425028, 0x2e22021, 0x8c830000, 0x24020007, 0x1462001f, 0x0,
-0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004, 0x24420001,
-0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x105e0007, 0x0,
-0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x8003ba4, 0x0,
-0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
-0x8c820004, 0x2c420011, 0x50400012, 0xac800000, 0x8003bb9, 0x0,
-0x8ee24e20, 0x24420001, 0x505e0003, 0x1021, 0x8ee24e20, 0x24420001,
-0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007,
-0xac820000, 0x24020001, 0xac820004, 0x14e00019, 0x3c050006, 0x3c040001,
-0x24844c00, 0x8e220018, 0x34a5f209, 0xafa20010, 0x8e220000, 0x8e230004,
-0x2203021, 0x1603821, 0xc002403, 0xafa30014, 0x93a2002f, 0x1040002a,
-0x34028100, 0x8e430004, 0x8e440008, 0x8e45000c, 0xa642000c, 0xae430000,
-0xae440004, 0xae450008, 0x96220016, 0x8003bf2, 0xa642000e, 0x1599000a,
-0x26a1823, 0x9622000e, 0xa623000a, 0x34420004, 0xa622000e, 0x3c010001,
-0x370821, 0xa02083b0, 0x8003bef, 0x9821, 0x9624000a, 0x83102b,
-0x54400001, 0x801821, 0x24020001, 0xa623000a, 0x3c010001, 0x370821,
-0xa02283b0, 0x9622000a, 0x4a1821, 0x2038021, 0x1d0102b, 0x54400001,
-0x20f8021, 0x2639823, 0xb021, 0x8fb80024, 0x1660fe5e, 0xaf0d0000,
-0x12600022, 0x0, 0x3c010001, 0x370821, 0xac3383b4, 0x3c010001,
-0x370821, 0xac3083b8, 0x3c010001, 0x370821, 0xac3283bc, 0x93a2002f,
-0x10400008, 0x0, 0x3c020001, 0x571021, 0x8c4283bc, 0x24420004,
-0x3c010001, 0x370821, 0xac2283bc, 0x8f430280, 0x8ee2723c, 0x14620006,
-0x0, 0x8ee201c0, 0x24420001, 0xaee201c0, 0x8003c4b, 0x8ee201c0,
-0x8ee201b8, 0x24420001, 0xaee201b8, 0x8003c4b, 0x8ee201b8, 0x97a4001e,
-0x2484fffc, 0x801821, 0x8ee400c0, 0x8ee500c4, 0x1021, 0xa32821,
-0xa3302b, 0x822021, 0x862021, 0x24020002, 0xaee400c0, 0xaee500c4,
-0x12a2000f, 0x2aa20003, 0x14400017, 0x24020003, 0x16a20015, 0x0,
-0x8ee200d0, 0x8ee300d4, 0x24630001, 0x2c640001, 0x441021, 0xaee200d0,
-0xaee300d4, 0x8ee200d0, 0x8003c45, 0x8ee300d4, 0x8ee200d8, 0x8ee300dc,
-0x24630001, 0x2c640001, 0x441021, 0xaee200d8, 0xaee300dc, 0x8ee200d8,
-0x8003c45, 0x8ee300dc, 0x8ee200c8, 0x8ee300cc, 0x24630001, 0x2c640001,
-0x441021, 0xaee200c8, 0xaee300cc, 0x8ee200c8, 0x8ee300cc, 0x8f8300e4,
-0x8f8200e0, 0x10620003, 0x24630008, 0xaf8300e4, 0xaf8300e8, 0x8fbf0068,
-0x8fbe0064, 0x8fb60060, 0x8fb5005c, 0x8fb40058, 0x8fb30054, 0x8fb20050,
-0x8fb1004c, 0x8fb00048, 0x3e00008, 0x27bd0070, 0x27bdffe0, 0xafbf0018,
-0x8ee30e04, 0x8ee20dfc, 0x10620074, 0x0, 0x8ee30dfc, 0x8ee20e04,
-0x622023, 0x4820001, 0x24840200, 0x8ee30e08, 0x8ee20e04, 0x43102b,
-0x14400004, 0x24020200, 0x8ee30e04, 0x8003c6d, 0x431823, 0x8ee20e08,
-0x8ee30e04, 0x431023, 0x2443ffff, 0x804821, 0x69102a, 0x54400001,
-0x604821, 0x8f870100, 0x27623000, 0x24e80020, 0x102102b, 0x50400001,
-0x27682800, 0x8f820108, 0x11020004, 0x0, 0x8f820104, 0x15020007,
-0x1021, 0x8ee201a4, 0x2021, 0x24420001, 0xaee201a4, 0x8003caf,
-0x8ee201a4, 0x8ee40e04, 0x42140, 0x801821, 0x8ee40460, 0x8ee50464,
-0xa32821, 0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004,
-0x8ee30e04, 0x91140, 0xa4e2000e, 0x24020002, 0xace20018, 0x31940,
-0x24630e10, 0x2e31021, 0xace20008, 0x8ee20e04, 0xace2001c, 0x8ee204bc,
-0xace20010, 0xaf880100, 0x92e204dc, 0x14400011, 0x24040001, 0x8ee24e18,
-0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e18, 0x24420001,
-0xaee24e18, 0x8ee24e18, 0x210c0, 0x24424e28, 0x2e21821, 0x24020002,
-0xac620000, 0x24020001, 0xac620004, 0x1480000e, 0x24030040, 0x8ee20e04,
-0xafa20010, 0x8ee20e08, 0x3c050007, 0xafa20014, 0x8ee60dfc, 0x8ee70e00,
-0x3c040001, 0x24844c44, 0xc002403, 0x34a5f001, 0x8003ccd, 0x0,
-0x8ee204f0, 0x24420001, 0x50430003, 0x1021, 0x8ee204f0, 0x24420001,
-0xaee204f0, 0x8ee204f0, 0x21080, 0x571021, 0xac4904f8, 0x8ee20e04,
-0x491021, 0x304201ff, 0xaee20e04, 0x8ee30e04, 0x8ee20dfc, 0x14620005,
-0x0, 0x8f820060, 0x2403fdff, 0x431024, 0xaf820060, 0x8fbf0018,
-0x3e00008, 0x27bd0020, 0x27bdffe0, 0xafbf0018, 0x8ee3522c, 0x8ee25228,
-0x10620074, 0x0, 0x8ee35228, 0x8ee2522c, 0x622023, 0x4820001,
-0x24840100, 0x8ee35234, 0x8ee2522c, 0x43102b, 0x14400004, 0x24020100,
-0x8ee3522c, 0x8003cef, 0x431823, 0x8ee25234, 0x8ee3522c, 0x431023,
-0x2443ffff, 0x804821, 0x69102a, 0x54400001, 0x604821, 0x8f870100,
-0x27623000, 0x24e80020, 0x102102b, 0x50400001, 0x27682800, 0x8f820108,
-0x11020004, 0x0, 0x8f820104, 0x15020007, 0x1021, 0x8ee201a4,
-0x2021, 0x24420001, 0xaee201a4, 0x8003d31, 0x8ee201a4, 0x8ee4522c,
-0x42140, 0x801821, 0x8ee40470, 0x8ee50474, 0xa32821, 0xa3302b,
-0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee3522c, 0x91140,
-0xa4e2000e, 0x24020003, 0xace20018, 0x31940, 0x24635238, 0x2e31021,
-0xace20008, 0x8ee2522c, 0xace2001c, 0x8ee204bc, 0xace20010, 0xaf880100,
-0x92e204dc, 0x14400011, 0x24040001, 0x8ee24e18, 0x24030040, 0x24420001,
-0x50430003, 0x1021, 0x8ee24e18, 0x24420001, 0xaee24e18, 0x8ee24e18,
-0x210c0, 0x24424e28, 0x2e21821, 0x24020003, 0xac620000, 0x24020001,
-0xac620004, 0x1480000e, 0x24030040, 0x8ee2522c, 0xafa20010, 0x8ee25234,
-0x3c050007, 0xafa20014, 0x8ee65228, 0x8ee75230, 0x3c040001, 0x24844c50,
-0xc002403, 0x34a5f010, 0x8003d4f, 0x0, 0x8ee204f0, 0x24420001,
-0x50430003, 0x1021, 0x8ee204f0, 0x24420001, 0xaee204f0, 0x8ee204f0,
-0x21080, 0x571021, 0xac4904f8, 0x8ee2522c, 0x491021, 0x304200ff,
-0xaee2522c, 0x8ee3522c, 0x8ee25228, 0x14620005, 0x0, 0x8f820060,
-0x2403feff, 0x431024, 0xaf820060, 0x8fbf0018, 0x3e00008, 0x27bd0020,
-0x8f820120, 0x8ee34e24, 0x8f820124, 0x8f860128, 0x24020040, 0x24630001,
-0x50620003, 0x1021, 0x8ee24e24, 0x24420001, 0xaee24e24, 0x8ee24e24,
-0x8ee44e24, 0x8ee34e20, 0x210c0, 0x24425028, 0x14830007, 0x2e22821,
-0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8003d82, 0xaca00000,
-0x8ee24e24, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e24,
-0x24420001, 0x210c0, 0x24425028, 0x2e22821, 0x8ca20004, 0x8f830128,
-0x21140, 0x621821, 0xaf830128, 0xaca00000, 0x8cc20018, 0x2443fffe,
-0x2c620012, 0x10400008, 0x31080, 0x3c010001, 0x220821, 0x8c224c60,
-0x400008, 0x0, 0x24020001, 0xaee24e14, 0x3e00008, 0x0,
-0x27bdffc8, 0xafbf0030, 0xafb5002c, 0xafb40028, 0xafb30024, 0xafb20020,
-0xafb1001c, 0xafb00018, 0x8f830128, 0x8f820124, 0x106202b0, 0x9821,
-0x3c11001f, 0x3631ffff, 0x3c12fff5, 0x36521000, 0x24150012, 0x24140040,
-0x8f8c0128, 0x8f820128, 0x24420020, 0xaf820128, 0x9182001b, 0x8f830128,
-0x2443fffe, 0x2c620012, 0x1040029c, 0x31080, 0x3c010001, 0x220821,
-0x8c224cb8, 0x400008, 0x0, 0x8f420218, 0x30420100, 0x10400007,
-0x0, 0x95830016, 0x95820018, 0x621823, 0x31402, 0x431021,
-0xa5820016, 0x8d82001c, 0x3c038000, 0x3044ffff, 0x436824, 0x3c030800,
-0x431824, 0x11a00004, 0xad84001c, 0x41140, 0x8003dc8, 0x24425238,
-0x41140, 0x24420e10, 0x2e25821, 0x9562000e, 0x3042fffc, 0x10600004,
-0xa562000e, 0x95840016, 0x8003eb0, 0x0, 0x8d690018, 0x4021,
-0x952a0000, 0x25290002, 0x95270000, 0x25290002, 0x95260000, 0x25290002,
-0x95250000, 0x25290002, 0x95240000, 0x25290002, 0x95230000, 0x25290002,
-0x95220000, 0x25290002, 0x1475021, 0x1465021, 0x1455021, 0x1445021,
-0x1435021, 0x1425021, 0xa1c02, 0x3142ffff, 0x625021, 0xa1c02,
-0x3142ffff, 0x625021, 0x96e2046a, 0x314effff, 0x30420002, 0x10400044,
-0x5021, 0x25220014, 0x222102b, 0x10400014, 0x1201821, 0x2405000a,
-0x2021, 0x223102b, 0x54400001, 0x721821, 0x94620000, 0x24630002,
-0x24a5ffff, 0x14a0fff9, 0x822021, 0x41c02, 0x3082ffff, 0x622021,
-0x41402, 0x3083ffff, 0x431021, 0x3042ffff, 0x8003e23, 0x1425021,
-0x952a0000, 0x25290002, 0x95280000, 0x25290002, 0x95270000, 0x25290002,
-0x95260000, 0x25290002, 0x95250000, 0x25290002, 0x95230000, 0x25290002,
-0x95220000, 0x25290002, 0x95240000, 0x25290002, 0x1485021, 0x1475021,
-0x1465021, 0x1455021, 0x1435021, 0x1425021, 0x95220000, 0x95230002,
-0x1445021, 0x1425021, 0x1435021, 0xa1c02, 0x3142ffff, 0x625021,
-0xa1c02, 0x3142ffff, 0x625021, 0x3148ffff, 0x51000001, 0x3408ffff,
-0x8d620018, 0x9443000c, 0x24020800, 0x54620005, 0xa5680010, 0x9562000e,
-0x34420002, 0xa562000e, 0xa5680010, 0x96e2046a, 0x2821, 0x30420008,
-0x14400056, 0x3021, 0x8d630018, 0x24620024, 0x222102b, 0x10400034,
-0x24690010, 0x229102b, 0x54400001, 0x1324821, 0x95250000, 0x24690014,
-0x229102b, 0x10400002, 0x24a5ffec, 0x1324821, 0x95220000, 0x30420fff,
-0x14400003, 0x25290002, 0x8003e50, 0x24130001, 0x9821, 0xa03021,
-0x229102b, 0x54400001, 0x1324821, 0x91220001, 0x25290002, 0xa22821,
-0x229102b, 0x54400001, 0x1324821, 0x25290002, 0x229102b, 0x54400001,
-0x1324821, 0x95220000, 0x25290002, 0xa22821, 0x229102b, 0x54400001,
-0x1324821, 0x95220000, 0x25290002, 0xa22821, 0x229102b, 0x54400001,
-0x1324821, 0x95220000, 0x25290002, 0xa22821, 0x229102b, 0x54400001,
-0x1324821, 0x95220000, 0x8003e89, 0xa22821, 0x94650010, 0x94620014,
-0x24690016, 0x30420fff, 0x14400003, 0x24a5ffec, 0x8003e7c, 0x24130001,
-0x9821, 0xa03021, 0x91230001, 0x25290004, 0x95220000, 0x25290002,
-0x95240000, 0x25290002, 0xa32821, 0xa22821, 0x95220000, 0x95230002,
-0xa42821, 0xa22821, 0xa32821, 0x51c02, 0x30a2ffff, 0x622821,
-0x51c02, 0x30a2ffff, 0x622821, 0x96e2046a, 0x30420001, 0x1040001e,
-0x2021, 0x95820016, 0x4e2023, 0x41402, 0x822021, 0x326200ff,
-0x50400002, 0x862021, 0x852021, 0x41402, 0x822021, 0x3084ffff,
-0x50800001, 0x3404ffff, 0x8d620018, 0x24430017, 0x223102b, 0x54400001,
-0x721821, 0x90620000, 0x38430011, 0x2c630001, 0x38420006, 0x2c420001,
-0x621825, 0x10600004, 0x0, 0x9562000e, 0x34420001, 0xa562000e,
-0x9562000e, 0x240a0002, 0x30420004, 0x10400002, 0xa5640012, 0x240a0004,
-0x8f880120, 0x27623800, 0x25090020, 0x122102b, 0x50400001, 0x27693000,
-0x8f820128, 0x11220004, 0x0, 0x8f820124, 0x15220007, 0x24040020,
-0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x8003f3f, 0x8ee201a0,
-0x8ee5723c, 0x8ee60480, 0x8ee70484, 0xad0b0008, 0xa504000e, 0xad0a0018,
-0x52940, 0xa01821, 0x1021, 0xe33821, 0xe3202b, 0xc23021,
-0xc43021, 0xad060000, 0xad070004, 0x8ee2723c, 0x4d1025, 0xad02001c,
-0x8ee204b4, 0xad020010, 0xaf890120, 0x92e24e10, 0x14400060, 0x24100001,
-0x2543ffee, 0x2c630002, 0x39420011, 0x2c420001, 0x621825, 0x10600024,
-0x0, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000,
-0x1455000f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062000b, 0x0,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001,
-0x1054002b, 0x0, 0x8003f1e, 0x0, 0x8ee24e20, 0x24420001,
-0x50540003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20,
-0x210c0, 0x24425028, 0x2e22021, 0x24020001, 0x8003f3e, 0xac950000,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020007,
-0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001,
-0x10540007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0,
-0x8003f2a, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020,
-0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400012, 0xac800000,
-0x8003f3f, 0x0, 0x8ee24e20, 0x24420001, 0x50540003, 0x1021,
-0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004, 0x1600000d,
-0x0, 0x8f820120, 0x3c040001, 0x24844ca8, 0xafa00014, 0xafa20010,
-0x8d86001c, 0x8f870124, 0x3c050008, 0xc002403, 0x34a50001, 0x8004047,
-0x0, 0x8ee2723c, 0x24420001, 0x304203ff, 0x11a00006, 0xaee2723c,
-0x8ee201c8, 0x2442ffff, 0xaee201c8, 0x8003f5b, 0x8ee201c8, 0x8ee201c4,
-0x2442ffff, 0xaee201c4, 0x8ee201c4, 0x8ee201cc, 0x2442ffff, 0xaee201cc,
-0x8004047, 0x8ee201cc, 0x8f420240, 0x104000e5, 0x0, 0x8ee20e0c,
-0x24420001, 0x8004047, 0xaee20e0c, 0x9582001e, 0xad82001c, 0x8f420240,
-0x10400072, 0x0, 0x8ee20e0c, 0x24420001, 0xaee20e0c, 0x8f430240,
-0x43102b, 0x144000d5, 0x0, 0x8f830120, 0x27623800, 0x24660020,
-0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0,
-0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x8021, 0x24420001,
-0xaee201a0, 0x8003fca, 0x8ee201a0, 0x8ee2723c, 0xac62001c, 0x8ee40498,
-0x8ee5049c, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011,
-0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120,
-0x92e24e10, 0x14400034, 0x24100001, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0x8c820000, 0x1455001f, 0x0, 0x8ee34e20, 0x8ee24e24,
-0x1062001b, 0x0, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24,
-0x8ee34e20, 0x24420001, 0x10540007, 0x0, 0x8ee24e24, 0x24420001,
-0x10620005, 0x0, 0x8003fb6, 0x0, 0x14600005, 0x0,
-0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
-0x50400011, 0xac800000, 0x8003fca, 0x0, 0x8ee24e20, 0x24420001,
-0x50540003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20,
-0x210c0, 0x24425028, 0x2e22021, 0x24020001, 0xac950000, 0xac820004,
-0x5600000b, 0x24100001, 0x8ee2723c, 0x3c040001, 0x24844c18, 0xafa00014,
-0xafa20010, 0x8ee6723c, 0x8f470280, 0x3c050009, 0xc002403, 0x34a5f008,
-0x56000001, 0xaee00e0c, 0x8ee20184, 0x24420001, 0xaee20184, 0x8004040,
-0x8ee20184, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, 0x50400001,
-0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, 0x14c20007,
-0x0, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x8004034,
-0x8ee201a0, 0x8ee2723c, 0xac62001c, 0x8ee40498, 0x8ee5049c, 0x2462001c,
-0xac620008, 0x24020008, 0xa462000e, 0x24020011, 0xac620018, 0xac640000,
-0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400034,
-0x24100001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000,
-0x1455001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001,
-0x10540007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0,
-0x8004020, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020,
-0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400011, 0xac800000,
-0x8004034, 0x0, 0x8ee24e20, 0x24420001, 0x50540003, 0x1021,
-0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0x24020001, 0xac950000, 0xac820004, 0x1600000b, 0x0,
-0x8ee2723c, 0x3c040001, 0x24844c18, 0xafa00014, 0xafa20010, 0x8ee6723c,
-0x8f470280, 0x3c050009, 0xc002403, 0x34a5f008, 0x8ee20170, 0x24420001,
-0xaee20170, 0x8004047, 0x8ee20170, 0x24020001, 0xaee24e14, 0x8f830128,
-0x8f820124, 0x1462fd58, 0x0, 0x8fbf0030, 0x8fb5002c, 0x8fb40028,
-0x8fb30024, 0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0038,
-0x27bdffe8, 0x27840208, 0x27450200, 0x24060008, 0xafbf0014, 0xc00249a,
-0xafb00010, 0x24040001, 0x24100001, 0x2402241f, 0xaf900210, 0xaf900200,
-0xaf800204, 0xaf820214, 0x8f460248, 0x24030004, 0x3c020040, 0x3c010001,
-0xac234ff8, 0x3c010001, 0xac234ffc, 0x3c010001, 0xac20509c, 0x3c010001,
-0xac224ff4, 0x3c010001, 0xac234ffc, 0xc004eac, 0x24050004, 0xc004734,
-0x0, 0x8ee20000, 0x3c03feff, 0x3463fffd, 0x431024, 0xaee20000,
-0x3c023c00, 0xaf82021c, 0x3c010001, 0x370821, 0xac30839c, 0x8fbf0014,
-0x8fb00010, 0x3e00008, 0x27bd0018, 0x27bdffe0, 0x3c050008, 0x34a50400,
-0xafbf0018, 0xafa00010, 0xafa00014, 0x8f860200, 0x3c040001, 0x24844d60,
-0xc002403, 0x3821, 0x8ee20270, 0x24420001, 0xaee20270, 0x8ee20270,
-0x8f830200, 0x3c023f00, 0x621824, 0x8fbf0018, 0x3c020400, 0x3e00008,
-0x27bd0020, 0x27bdffd8, 0xafbf0020, 0xafb1001c, 0xafb00018, 0x8f900220,
-0x8ee20204, 0x3821, 0x24420001, 0xaee20204, 0x8ee20204, 0x3c020300,
-0x2021024, 0x10400027, 0x3c110400, 0xc00428b, 0x0, 0x3c020100,
-0x2021024, 0x10400007, 0x0, 0x8ee20208, 0x24420001, 0xaee20208,
-0x8ee20208, 0x80040b6, 0x3c03fdff, 0x8ee2020c, 0x24420001, 0xaee2020c,
-0x8ee2020c, 0x3c03fdff, 0x3463ffff, 0x3c0808ff, 0x3508ffff, 0x8ee20000,
-0x3c040001, 0x24844d6c, 0x3c050008, 0x2003021, 0x431024, 0xaee20000,
-0x8f820220, 0x3821, 0x3c030300, 0x481024, 0x431025, 0xaf820220,
-0xafa00010, 0xc002403, 0xafa00014, 0x8004286, 0x0, 0x2111024,
-0x1040001f, 0x3c024000, 0x8f830224, 0x24021402, 0x1462000b, 0x3c03fdff,
-0x3c040001, 0x24844d78, 0x3c050008, 0xafa00010, 0xafa00014, 0x8f860224,
-0x34a5ffff, 0xc002403, 0x3821, 0x3c03fdff, 0x8ee20000, 0x3463ffff,
-0x2002021, 0x431024, 0xc004c08, 0xaee20000, 0x8ee20210, 0x24420001,
-0xaee20210, 0x8ee20210, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024,
-0x8004285, 0x511025, 0x2021024, 0x10400142, 0x0, 0x8ee2021c,
-0x24420001, 0xaee2021c, 0x8ee2021c, 0x8f820220, 0x3c0308ff, 0x3463ffff,
-0x431024, 0x34420004, 0xaf820220, 0x8f830054, 0x8f820054, 0x80040fe,
-0x24630002, 0x8f820054, 0x621023, 0x2c420003, 0x1440fffc, 0x0,
-0x8f8600e0, 0x8f8400e4, 0x30c20007, 0x10400012, 0x0, 0x8f8300e4,
-0x2402fff8, 0xc21024, 0x1043000d, 0x0, 0x8f820054, 0x8f8300e0,
-0x14c30009, 0x24440050, 0x8f820054, 0x821023, 0x2c420051, 0x10400004,
-0x0, 0x8f8200e0, 0x10c2fff9, 0x0, 0x8f820220, 0x3c0308ff,
-0x3463fffd, 0x431024, 0xaf820220, 0x8f8600e0, 0x30c20007, 0x10400003,
-0x2402fff8, 0xc23024, 0xaf8600e0, 0x8f8300c4, 0x3c02001f, 0x3442ffff,
-0x24680008, 0x48102b, 0x10400003, 0x3c02fff5, 0x34421000, 0x1024021,
-0x8f8b00c8, 0x8f850120, 0x8f840124, 0x8004135, 0x6021, 0x27623800,
-0x82102b, 0x50400001, 0x27643000, 0x10a40010, 0x318200ff, 0x8c820018,
-0x38430007, 0x2c630001, 0x3842000b, 0x2c420001, 0x621825, 0x5060fff3,
-0x24840020, 0x8ee20230, 0x240c0001, 0x24420001, 0xaee20230, 0x8ee20230,
-0x8c8b0008, 0x318200ff, 0x14400065, 0x0, 0x3c020001, 0x571021,
-0x904283b0, 0x14400060, 0x0, 0x8f8400e4, 0xc41023, 0x218c3,
-0x4620001, 0x24630200, 0x8f8900c4, 0x10600005, 0x24020001, 0x10620009,
-0x0, 0x8004177, 0x0, 0x8ee20220, 0x1205821, 0x24420001,
-0xaee20220, 0x80041ac, 0x8ee20220, 0x8ee20224, 0x3c05000a, 0x24420001,
-0xaee20224, 0x8c8b0000, 0x34a5f000, 0x8ee20224, 0x12b1823, 0xa3102b,
-0x54400001, 0x651821, 0x2c62233f, 0x14400040, 0x0, 0x8f8200e8,
-0x24420008, 0xaf8200e8, 0x8f8200e8, 0x8f8200e4, 0x1205821, 0x24420008,
-0xaf8200e4, 0x80041ac, 0x8f8200e4, 0x8ee20228, 0x3c03000a, 0x24420001,
-0xaee20228, 0x8c840000, 0x3463f000, 0x8ee20228, 0x883823, 0x67102b,
-0x54400001, 0xe33821, 0x3c020003, 0x34420d40, 0x47102b, 0x10400003,
-0x0, 0x80041ac, 0x805821, 0x8f8200e4, 0x24440008, 0xaf8400e4,
-0x8f8400e4, 0x10860018, 0x3c05000a, 0x34a5f000, 0x3c0a0003, 0x354a0d40,
-0x8ee2007c, 0x24420001, 0xaee2007c, 0x8c830000, 0x8ee2007c, 0x683823,
-0xa7102b, 0x54400001, 0xe53821, 0x147102b, 0x54400007, 0x605821,
-0x8f8200e4, 0x24440008, 0xaf8400e4, 0x8f8400e4, 0x1486ffef, 0x0,
-0x14860005, 0x0, 0x1205821, 0xaf8600e4, 0x80041ac, 0xaf8600e8,
-0xaf8400e4, 0xaf8400e8, 0x8f8200c8, 0x3c03000a, 0x3463f000, 0x483823,
-0x67102b, 0x54400001, 0xe33821, 0x3c020003, 0x34420d3f, 0x47102b,
-0x54400007, 0x6021, 0x1683823, 0x67102b, 0x54400003, 0xe33821,
-0x80041bf, 0x3c020003, 0x3c020003, 0x34420d3f, 0x47102b, 0x14400016,
-0x318200ff, 0x14400006, 0x0, 0x3c020001, 0x571021, 0x904283b0,
-0x1040000f, 0x0, 0x8ee2022c, 0x3c04fdff, 0x8ee30000, 0x3484ffff,
-0x24420001, 0xaee2022c, 0x8ee2022c, 0x24020001, 0x641824, 0x3c010001,
-0x370821, 0xa02283a8, 0x800421c, 0xaee30000, 0xaf8b00c8, 0x8f8300c8,
-0x8f8200c4, 0x3c04000a, 0x3484f000, 0x623823, 0x87102b, 0x54400001,
-0xe43821, 0x3c020003, 0x34420d40, 0x47102b, 0x2ce30001, 0x431025,
-0x10400008, 0x0, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024,
-0x3c034000, 0x431025, 0xaf820220, 0x8f8600e0, 0x8f8400e4, 0x10c4002a,
-0x0, 0x8ee2007c, 0x24420001, 0xaee2007c, 0x8ee2007c, 0x24c2fff8,
-0xaf8200e0, 0x3c020001, 0x8c427140, 0x3c030008, 0x8f8600e0, 0x431024,
-0x1040001d, 0x0, 0x10c4001b, 0x240dfff8, 0x3c0a000a, 0x354af000,
-0x3c0c0080, 0x24850008, 0x27622800, 0x50a20001, 0x27651800, 0x8c880004,
-0x8c820000, 0x8ca90000, 0x3103ffff, 0x431021, 0x4d1024, 0x24430010,
-0x6b102b, 0x54400001, 0x6a1821, 0x12b102b, 0x54400001, 0x12a4821,
-0x10690002, 0x10c1025, 0xac820004, 0xa02021, 0x14c4ffeb, 0x24850008,
-0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, 0x34420002, 0xaf820220,
-0x8f830054, 0x8f820054, 0x8004227, 0x24630001, 0x8f820054, 0x621023,
-0x2c420002, 0x1440fffc, 0x0, 0x8f820220, 0x3c0308ff, 0x3463fffb,
-0x431024, 0xaf820220, 0x6010055, 0x0, 0x8ee20218, 0x24420001,
-0xaee20218, 0x8ee20218, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024,
-0x34420004, 0xaf820220, 0x8f830054, 0x8f820054, 0x8004241, 0x24630002,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 18'
echo 'File patch-2.2.4 is continued in part 19'
echo 19 > _shar_seq_.tmp
#!/bin/sh
# this is part 16 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 16; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+ writel(tigon2FwStartAddr, ®s->Pc);
X
- regs->Mb0Lo = 0;
+ writel(0, ®s->Mb0Lo);
X
X /*
X * Start the NIC CPU
X */
X
- regs->CpuCtrl = (regs->CpuCtrl & ~(CPU_HALT | CPU_TRACE));
+ writel(readl(®s->CpuCtrl) & ~(CPU_HALT|CPU_TRACE), ®s->CpuCtrl);
X
X /*
X * Wait for the firmware to spin up - max 3 seconds.
@@ -743,7 +783,7 @@
X if (!ap->fw_running){
X printk(KERN_ERR "%s: Firmware NOT running!\n", dev->name);
X ace_dump_trace(ap);
- regs->CpuCtrl |= CPU_HALT;
+ writel(readl(®s->CpuCtrl) | CPU_HALT, ®s->CpuCtrl);
X return -EBUSY;
X }
X
@@ -773,7 +813,7 @@
X */
X if (ap->tx_csm != ap->tx_ret_csm){
X printk(KERN_WARNING "%s: Transmitter is stuck, %08x\n",
- dev->name, regs->HostCtrl);
+ dev->name, (unsigned int)readl(®s->HostCtrl));
X }
X
X ap->timer.expires = jiffies + (5/2*HZ);
@@ -786,9 +826,11 @@
X */
X static void ace_dump_trace(struct ace_private *ap)
X {
+#if 0
X if (!ap->trace_buf)
X if (!(ap->trace_buf = kmalloc(ACE_TRACE_SIZE, GFP_KERNEL)));
X return;
+#endif
X }
X
X
@@ -819,7 +861,7 @@
X ap->tx_full = 0;
X ap->cur_rx = ap->dirty_rx = 0;
X ap->tx_prd = ap->tx_csm = ap->tx_ret_csm = 0;
- regs->RxRetCsm = 0;
+ writel(0, ®s->RxRetCsm);
X
X for (i = 0; i < RX_RING_THRESH; i++) {
X struct sk_buff *skb;
@@ -833,7 +875,7 @@
X */
X skb_reserve(skb, 2);
X
- ap->rx_std_ring[i].addr = virt_to_bus(skb->data);
+ set_aceaddr(&ap->rx_std_ring[i].addr, skb->data);
X ap->rx_std_ring[i].size = ACE_STD_MTU + ETH_HLEN + 4;
X
X ap->rx_std_ring[i].flags = 0;
@@ -877,7 +919,7 @@
X
X spin_lock_irqsave(&ap->lock, flags);
X
- for (i = 0; i < RX_RING_THRESH; i++) {
+ for (i = 0; i < RX_RING_JUMBO_THRESH; i++) {
X struct sk_buff *skb;
X
X ap->rx_jumbo_ring[i].flags = 0;
@@ -889,10 +931,10 @@
X */
X skb_reserve(skb, 2);
X
- ap->rx_jumbo_ring[i].addr = virt_to_bus(skb->data);
+ set_aceaddr(&ap->rx_jumbo_ring[i].addr, skb->data);
X ap->rx_jumbo_ring[i].size = ACE_JUMBO_MTU + ETH_HLEN + 4;
X
- ap->rx_jumbo_ring[i].flags = JUMBO_FLAG;
+ ap->rx_jumbo_ring[i].flags = DFLG_RX_JUMBO;
X ap->rx_jumbo_ring[i].type = DESC_RX;
X
X ap->rx_jumbo_ring[i].idx = i;
@@ -939,7 +981,7 @@
X for (i = 0; i < RX_JUMBO_RING_ENTRIES; i++) {
X if (ap->rx_jumbo_skbuff[i]) {
X ap->rx_jumbo_ring[i].size = 0;
- ap->rx_jumbo_ring[i].addr = 0;
+ set_aceaddr_bus(&ap->rx_jumbo_ring[i].addr, 0);
X dev_kfree_skb(ap->rx_jumbo_skbuff[i]);
X }
X }
@@ -959,10 +1001,8 @@
X static u32 ace_handle_event(struct device *dev, u32 evtcsm, u32 evtprd)
X {
X struct ace_private *ap;
- struct ace_regs *regs;
X
X ap = (struct ace_private *)dev->priv;
- regs = ap->regs;
X
X while (evtcsm != evtprd){
X switch (ap->evt_ring[evtcsm].evt){
@@ -1019,24 +1059,24 @@
X }
X
X
-static int rx_int(struct device *dev, u32 rxretprd, u32 rxretcsm)
+static int ace_rx_int(struct device *dev, u32 rxretprd, u32 rxretcsm)
X {
X struct ace_private *ap = (struct ace_private *)dev->priv;
- u32 idx, oldidx;
X struct ace_regs *regs = ap->regs;
+ u32 idx, oldidx;
X
X idx = rxretcsm;
X
- while(idx != rxretprd){
+ while (idx != rxretprd){
X struct sk_buff *skb, *newskb, *oldskb;
X struct rx_desc *newrxdesc, *oldrxdesc;
X u32 prdidx, size;
- unsigned long addr;
+ void *addr;
X u16 csum;
X int jumbo;
X
X oldidx = ap->rx_return_ring[idx].idx;
- jumbo = ap->rx_return_ring[idx].flags & JUMBO_FLAG;
+ jumbo = ap->rx_return_ring[idx].flags & DFLG_RX_JUMBO;
X
X if (jumbo){
X oldskb = ap->rx_jumbo_skbuff[oldidx];
@@ -1065,7 +1105,7 @@
X
X skb_reserve(skb, 2);
X memcpy(skb_put(skb, size), oldskb->data, size);
- addr = oldrxdesc->addr;
+ addr = get_aceaddr_bus(&oldrxdesc->addr);
X newskb = oldskb;
X }else{
X skb = oldskb;
@@ -1084,21 +1124,21 @@
X * aligned receive buffers
X */
X skb_reserve(newskb, 2);
- addr = virt_to_bus(newskb->data);
+ addr = (void *)virt_to_bus(newskb->data);
X }
X
- newrxdesc->addr = addr;
+ set_aceaddr_bus(&newrxdesc->addr, addr);
X newrxdesc->size = size;
X
X newrxdesc->flags = oldrxdesc->flags;
X newrxdesc->idx = prdidx;
X newrxdesc->type = DESC_RX;
X #if (BITS_PER_LONG == 32)
- newrxdesc->zero = 0;
+ newrxdesc->addr.addrhi = 0;
X #endif
X
X oldrxdesc->size = 0;
- oldrxdesc->addr = 0;
+ set_aceaddr_bus(&oldrxdesc->addr, 0);
X
X if (jumbo){
X ap->rx_jumbo_skbuff[oldidx] = NULL;
@@ -1152,7 +1192,11 @@
X idx = (idx + 1) % RX_RETURN_RING_ENTRIES;
X }
X out:
- regs->RxRetCsm = idx;
+ /*
+ * According to the documentation RxRetCsm is obsolete with
+ * the 12.3.x Firmware - my Tigon I NIC's seem to disagree!
+ */
+ writel(idx, ®s->RxRetCsm);
X ap->cur_rx = idx;
X
X return idx;
@@ -1180,7 +1224,7 @@
X * we want to make sure it is actually our interrupt before
X * spending any time in here.
X */
- if (!(regs->HostCtrl & IN_INT)){
+ if (!(readl(®s->HostCtrl) & IN_INT)){
X spin_unlock(&ap->lock);
X return;
X }
@@ -1188,7 +1232,16 @@
X /*
X * Tell the card not to generate interrupts while we are in here.
X */
- regs->Mb0Lo = 1;
+ writel(1, ®s->Mb0Lo);
+
+ /*
+ * Service RX ints before TX
+ */
+ rxretprd = ap->rx_ret_prd;
+ rxretcsm = ap->cur_rx;
+
+ if (rxretprd != rxretcsm)
+ rxretprd = ace_rx_int(dev, rxretprd, rxretcsm);
X
X txcsm = ap->tx_csm;
X if (txcsm != ap->tx_ret_csm) {
@@ -1201,9 +1254,11 @@
X
X ap->tx_skbuff[idx] = NULL;
X
- ap->tx_ring[idx].size = 0;
- ap->tx_ring[idx].addr = 0;
- ap->tx_ring[idx].flags = 0;
+#if (BITS_PER_LONG == 64)
+ writel(0, &ap->tx_ring[idx].addr.addrhi);
+#endif
+ writel(0, &ap->tx_ring[idx].addr.addrlo);
+ writel(0, &ap->tx_ring[idx].flagsize);
X
X idx = (idx + 1) % TX_RING_ENTRIES;
X } while (idx != txcsm);
@@ -1224,21 +1279,15 @@
X ap->tx_ret_csm = txcsm;
X }
X
- rxretprd = ap->rx_ret_prd;
- rxretcsm = ap->cur_rx;
-
- if (rxretprd != rxretcsm)
- rxretprd = rx_int(dev, rxretprd, rxretcsm);
-
- evtcsm = regs->EvtCsm;
+ evtcsm = readl(®s->EvtCsm);
X evtprd = ap->evt_prd;
X
X if (evtcsm != evtprd){
X evtcsm = ace_handle_event(dev, evtcsm, evtprd);
X }
X
- regs->EvtCsm = evtcsm;
- regs->Mb0Lo = 0;
+ writel(evtcsm, ®s->EvtCsm);
+ writel(0, ®s->Mb0Lo);
X
X spin_unlock(&ap->lock);
X }
@@ -1258,7 +1307,7 @@
X return -EBUSY;
X }
X
- regs->IfMtu = dev->mtu + ETH_HLEN + 4;
+ writel(dev->mtu + ETH_HLEN + 4, ®s->IfMtu);
X
X cmd.evt = C_HOST_STATE;
X cmd.code = C_C_STACK_UP;
@@ -1277,6 +1326,7 @@
X ap->promisc = 1;
X }else
X ap->promisc = 0;
+ ap->mcast_all = 0;
X
X #if 0
X { long myjif = jiffies + HZ;
@@ -1338,8 +1388,9 @@
X
X for (i = 0; i < TX_RING_ENTRIES; i++) {
X if (ap->tx_skbuff[i]) {
- ap->tx_ring[i].size = 0;
- ap->tx_ring[i].addr = 0;
+ writel(0, &ap->tx_ring[i].addr.addrhi);
+ writel(0, &ap->tx_ring[i].addr.addrlo);
+ writel(0, &ap->tx_ring[i].flagsize);
X dev_kfree_skb(ap->tx_skbuff[i]);
X }
X }
@@ -1359,30 +1410,37 @@
X struct ace_private *ap = (struct ace_private *)dev->priv;
X struct ace_regs *regs = ap->regs;
X unsigned long flags;
- u32 idx;
+ unsigned long addr;
+ u32 idx, flagsize;
X
X spin_lock_irqsave(&ap->lock, flags);
X
X idx = ap->tx_prd;
X
X ap->tx_skbuff[idx] = skb;
- ap->tx_ring[idx].addr = virt_to_bus(skb->data);
- ap->tx_ring[idx].size = skb->len;
- ap->tx_ring[idx].flags = DESC_END;
+ addr = virt_to_bus(skb->data);
+#if (BITS_PER_LONG == 64)
+ writel(addr >> 32, &ap->tx_ring[idx].addr.addrhi);
+#endif
+ writel(addr & 0xffffffff, &ap->tx_ring[idx].addr.addrlo);
+ flagsize = (skb->len << 16) | (DESC_END) ;
+ writel(flagsize, &ap->tx_ring[idx].flagsize);
+ mb();
X idx = (idx + 1) % TX_RING_ENTRIES;
X
X ap->tx_prd = idx;
- regs->TxPrd = idx;
+ writel(idx, ®s->TxPrd);
X
X if ((idx + 1) % TX_RING_ENTRIES == ap->tx_ret_csm){
X ap->tx_full = 1;
X set_bit(0, (void*)&dev->tbusy);
X /*
X * Queue is full, add timer to detect whether the
- * transmitter is stuck.
+ * transmitter is stuck. Use mod_timer as we can get
+ * into the situation where we risk adding several
+ * timers.
X */
- ap->timer.expires = jiffies + (3 * HZ);
- add_timer(&ap->timer);
+ mod_timer(&ap->timer, jiffies + (3 * HZ));
X }
X
X spin_unlock_irqrestore(&ap->lock, flags);
@@ -1400,7 +1458,7 @@
X if ((new_mtu < 68) || (new_mtu > ACE_JUMBO_MTU))
X return -EINVAL;
X
- regs->IfMtu = new_mtu + ETH_HLEN + 4;
+ writel(new_mtu + ETH_HLEN + 4, ®s->IfMtu);
X dev->mtu = new_mtu;
X
X if (new_mtu > ACE_STD_MTU){
@@ -1442,8 +1500,8 @@
X da = (u16 *)dev->dev_addr;
X
X regs = ((struct ace_private *)dev->priv)->regs;
- regs->MacAddrHi = da[0];
- regs->MacAddrLo = (da[1] << 16) | da[2];
+ writel(da[0], ®s->MacAddrHi);
+ writel((da[1] << 16) | da[2], ®s->MacAddrLo);
X
X cmd.evt = C_SET_MAC_ADDR;
X cmd.code = 0;
@@ -1460,21 +1518,51 @@
X struct ace_regs *regs = ap->regs;
X struct cmd cmd;
X
+ if ((dev->flags & IFF_ALLMULTI) && !(ap->mcast_all)) {
+ cmd.evt = C_SET_MULTICAST_MODE;
+ cmd.code = C_C_MCAST_ENABLE;
+ cmd.idx = 0;
+ ace_issue_cmd(regs, &cmd);
+ ap->mcast_all = 1;
+ } else if (ap->mcast_all){
+ cmd.evt = C_SET_MULTICAST_MODE;
+ cmd.code = C_C_MCAST_ENABLE;
+ cmd.idx = 0;
+ ace_issue_cmd(regs, &cmd);
+ ap->mcast_all = 0;
+ }
+
X if ((dev->flags & IFF_PROMISC) && !(ap->promisc)) {
X cmd.evt = C_SET_PROMISC_MODE;
X cmd.code = C_C_PROMISC_ENABLE;
X cmd.idx = 0;
X ace_issue_cmd(regs, &cmd);
-
X ap->promisc = 1;
X }else if (!(dev->flags & IFF_PROMISC) && (ap->promisc)){
X cmd.evt = C_SET_PROMISC_MODE;
X cmd.code = C_C_PROMISC_DISABLE;
X cmd.idx = 0;
X ace_issue_cmd(regs, &cmd);
-
X ap->promisc = 0;
X }
+
+ /*
+ * For the time being multicast relies on the upper layers
+ * filtering it properly. The Firmware does not allow one to
+ * set the entire multicast list at a time and keeping track of
+ * it here is going to be messy.
+ */
+ if ((dev->mc_count) && !(ap->mcast_all)) {
+ cmd.evt = C_SET_MULTICAST_MODE;
+ cmd.code = C_C_MCAST_ENABLE;
+ cmd.idx = 0;
+ ace_issue_cmd(regs, &cmd);
+ }else if (!ap->mcast_all) {
+ cmd.evt = C_SET_MULTICAST_MODE;
+ cmd.code = C_C_MCAST_DISABLE;
+ cmd.idx = 0;
+ ace_issue_cmd(regs, &cmd);
+ }
X }
X
X
@@ -1488,24 +1576,29 @@
X
X __initfunc(void ace_copy(struct ace_regs *regs, void *src, u32 dest, int size))
X {
- int tsize;
- u32 tdest;
+ unsigned long tdest;
+ u32 *wsrc;
+ short tsize, i;
X
X if (size <= 0)
X return;
X
- while(size > 0){
+ while (size > 0){
X tsize = min(((~dest & (ACE_WINDOW_SIZE - 1)) + 1),
X min(size, ACE_WINDOW_SIZE));
- tdest = dest & (ACE_WINDOW_SIZE - 1);
- regs->WinBase = dest & ~(ACE_WINDOW_SIZE - 1);
+ tdest = (unsigned long)®s->Window +
+ (dest & (ACE_WINDOW_SIZE - 1));
+ writel(dest & ~(ACE_WINDOW_SIZE - 1), ®s->WinBase);
X #ifdef __BIG_ENDIAN
X #error "data must be swapped here"
X #else
-#if 0
- printk("copying %04x from %08x to %06x (Window addr %08x), winbase %02x\n", tsize, (unsigned)src, dest, (unsigned) ((void *)regs->Window + tdest), regs->WinBase);
-#endif
- memcpy((void *)((void *)regs->Window + tdest), src, tsize);
+/*
+ * XXX - special memcpy needed here!!!
+ */
+ wsrc = src;
+ for (i = 0; i < (tsize / 4); i++){
+ writel(wsrc[i], tdest + i*4);
+ }
X #endif
X dest += tsize;
X src += tsize;
@@ -1518,19 +1611,22 @@
X
X __initfunc(void ace_clear(struct ace_regs *regs, u32 dest, int size))
X {
- int tsize = 0;
- u32 tdest;
+ unsigned long tdest;
+ short tsize = 0, i;
X
X if (size <= 0)
X return;
X
- while(size > 0){
+ while (size > 0){
X tsize = min(((~dest & (ACE_WINDOW_SIZE - 1)) + 1),
X min(size, ACE_WINDOW_SIZE));
- tdest = dest & (ACE_WINDOW_SIZE - 1);
- regs->WinBase = dest & ~(ACE_WINDOW_SIZE - 1);
+ tdest = (unsigned long)®s->Window +
+ (dest & (ACE_WINDOW_SIZE - 1));
+ writel(dest & ~(ACE_WINDOW_SIZE - 1), ®s->WinBase);
X
- memset((void *)((void *)regs->Window + tdest), 0, tsize);
+ for (i = 0; i < (tsize / 4); i++){
+ writel(0, tdest + i*4);
+ }
X
X dest += tsize;
X size -= tsize;
@@ -1554,13 +1650,17 @@
X ap = (struct ace_private *)dev->priv;
X regs = ap->regs;
X
- if (!(regs->CpuCtrl & CPU_HALTED)){
+ if (!(readl(®s->CpuCtrl) & CPU_HALTED)){
X printk(KERN_ERR "%s: trying to download firmware while the "
X "CPU is running!\n", dev->name);
X return -EFAULT;
X }
X
- ace_clear(regs, 0x2000, 0x100000-0x2000);
+ /*
+ * Do not try to clear more than 512KB or we end up seeing
+ * funny things on NICs with only 512KB SRAM
+ */
+ ace_clear(regs, 0x2000, 0x80000-0x2000);
X if (ap->version == 1){
X ace_copy(regs, tigonFwText, tigonFwTextAddr, tigonFwTextLen);
X ace_copy(regs, tigonFwData, tigonFwDataAddr, tigonFwDataLen);
@@ -1595,36 +1695,56 @@
X */
X static void eeprom_start(struct ace_regs *regs)
X {
+ u32 local = readl(®s->LocalCtrl);
+
X udelay(1);
- regs->LocalCtrl |= (EEPROM_DATA_OUT | EEPROM_WRITE_ENABLE);
+ local |= EEPROM_DATA_OUT | EEPROM_WRITE_ENABLE;
+ writel(local, ®s->LocalCtrl);
+ mb();
X udelay(1);
- regs->LocalCtrl |= EEPROM_CLK_OUT;
+ local |= EEPROM_CLK_OUT;
+ writel(local, ®s->LocalCtrl);
+ mb();
X udelay(1);
- regs->LocalCtrl &= ~EEPROM_DATA_OUT;
+ local &= ~EEPROM_DATA_OUT;
+ writel(local, ®s->LocalCtrl);
+ mb();
X udelay(1);
- regs->LocalCtrl &= ~EEPROM_CLK_OUT;
+ local &= ~EEPROM_CLK_OUT;
+ writel(local, ®s->LocalCtrl);
+ mb();
X }
X
X
X static void eeprom_prep(struct ace_regs *regs, u8 magic)
X {
X short i;
+ u32 local;
X
X udelay(2);
- regs->LocalCtrl &= ~EEPROM_DATA_OUT;
- regs->LocalCtrl |= EEPROM_WRITE_ENABLE;
+ local = readl(®s->LocalCtrl);
+ local &= ~EEPROM_DATA_OUT;
+ local |= EEPROM_WRITE_ENABLE;
+ writel(local, ®s->LocalCtrl);
+ mb();
X
X for (i = 0; i < 8; i++, magic <<= 1) {
X udelay(2);
X if (magic & 0x80)
- regs->LocalCtrl |= EEPROM_DATA_OUT;
+ local |= EEPROM_DATA_OUT;
X else
- regs->LocalCtrl &= ~EEPROM_DATA_OUT;
+ local &= ~EEPROM_DATA_OUT;
+ writel(local, ®s->LocalCtrl);
+ mb();
X
X udelay(1);
- regs->LocalCtrl |= EEPROM_CLK_OUT;
+ local |= EEPROM_CLK_OUT;
+ writel(local, ®s->LocalCtrl);
+ mb();
X udelay(1);
- regs->LocalCtrl &= ~(EEPROM_CLK_OUT | EEPROM_DATA_OUT);
+ local &= ~(EEPROM_CLK_OUT | EEPROM_DATA_OUT);
+ writel(local, ®s->LocalCtrl);
+ mb();
X }
X }
X
@@ -1632,15 +1752,23 @@
X static int eeprom_check_ack(struct ace_regs *regs)
X {
X int state;
-
- regs->LocalCtrl &= ~EEPROM_WRITE_ENABLE;
+ u32 local;
+
+ local = readl(®s->LocalCtrl);
+ local &= ~EEPROM_WRITE_ENABLE;
+ writel(local, ®s->LocalCtrl);
+ mb();
X udelay(2);
- regs->LocalCtrl |= EEPROM_CLK_OUT;
+ local |= EEPROM_CLK_OUT;
+ writel(local, ®s->LocalCtrl);
+ mb();
X udelay(1);
X /* sample data in middle of high clk */
- state = (regs->LocalCtrl & EEPROM_DATA_IN) != 0;
+ state = (readl(®s->LocalCtrl) & EEPROM_DATA_IN) != 0;
X udelay(1);
- regs->LocalCtrl &= ~EEPROM_CLK_OUT;
+ mb();
+ writel(readl(®s->LocalCtrl) & ~EEPROM_CLK_OUT, ®s->LocalCtrl);
+ mb();
X
X return state;
X }
@@ -1648,15 +1776,28 @@
X
X static void eeprom_stop(struct ace_regs *regs)
X {
- regs->LocalCtrl |= EEPROM_WRITE_ENABLE;
+ u32 local;
+
+ local = readl(®s->LocalCtrl);
+ local |= EEPROM_WRITE_ENABLE;
+ writel(local, ®s->LocalCtrl);
+ mb();
X udelay(1);
- regs->LocalCtrl &= ~EEPROM_DATA_OUT;
+ local &= ~EEPROM_DATA_OUT;
+ writel(local, ®s->LocalCtrl);
+ mb();
X udelay(1);
- regs->LocalCtrl |= EEPROM_CLK_OUT;
+ local |= EEPROM_CLK_OUT;
+ writel(local, ®s->LocalCtrl);
+ mb();
X udelay(1);
- regs->LocalCtrl |= EEPROM_DATA_OUT;
+ local |= EEPROM_DATA_OUT;
+ writel(local, ®s->LocalCtrl);
+ mb();
X udelay(2);
- regs->LocalCtrl &= ~EEPROM_CLK_OUT;
+ local &= ~EEPROM_CLK_OUT;
+ writel(local, ®s->LocalCtrl);
+ mb();
X }
X
X
@@ -1665,7 +1806,8 @@
X */
X static u8 read_eeprom_byte(struct ace_regs *regs, unsigned long offset)
X {
- u32 i;
+ u32 local;
+ short i;
X u8 result = 0;
X
X if (!regs){
@@ -1695,24 +1837,37 @@
X return 0;
X
X for (i = 0; i < 8; i++) {
- regs->LocalCtrl &= ~EEPROM_WRITE_ENABLE;
+ local = readl(®s->LocalCtrl);
+ local &= ~EEPROM_WRITE_ENABLE;
+ writel(local, ®s->LocalCtrl);
X udelay(2);
- regs->LocalCtrl |= EEPROM_CLK_OUT;
+ mb();
+ local |= EEPROM_CLK_OUT;
+ writel(local, ®s->LocalCtrl);
X udelay(1);
+ mb();
X /* sample data mid high clk */
X result = (result << 1) |
- ((regs->LocalCtrl & EEPROM_DATA_IN) != 0);
+ ((readl(®s->LocalCtrl) & EEPROM_DATA_IN) != 0);
X udelay(1);
- regs->LocalCtrl &= ~EEPROM_CLK_OUT;
- if (i == 7)
- regs->LocalCtrl |= EEPROM_WRITE_ENABLE;
+ mb();
+ local = readl(®s->LocalCtrl);
+ local &= ~EEPROM_CLK_OUT;
+ writel(local, ®s->LocalCtrl);
+ mb();
+ if (i == 7){
+ local |= EEPROM_WRITE_ENABLE;
+ writel(local, ®s->LocalCtrl);
+ mb();
+ }
X }
X
- regs->LocalCtrl |= EEPROM_DATA_OUT;
+ local |= EEPROM_DATA_OUT;
+ writel(local, ®s->LocalCtrl);
X udelay(1);
- regs->LocalCtrl |= EEPROM_CLK_OUT;
+ writel(readl(®s->LocalCtrl) | EEPROM_CLK_OUT, ®s->LocalCtrl);
X udelay(2);
- regs->LocalCtrl &= ~EEPROM_CLK_OUT;
+ writel(readl(®s->LocalCtrl) & ~EEPROM_CLK_OUT, ®s->LocalCtrl);
X eeprom_stop(regs);
X
X return result;
@@ -1721,6 +1876,6 @@
X
X /*
X * Local variables:
- * compile-command: "gcc -D__KERNEL__ -D__SMP__ -I/data/home/jes/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe -fno-strength-reduce -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2 -DCPU=686 -DMODULE -DMODVERSIONS -include /data/home/jes/linux/include/linux/modversions.h -c -o acenic.o acenic.c"
+ * compile-command: "gcc -D__KERNEL__ -D__SMP__ -DMODULE -I/data/home/jes/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe -fno-strength-reduce -DMODVERSIONS -include /data/home/jes/linux/include/linux/modversions.h -c -o acenic.o acenic.c"
X * End:
X */
diff -u --recursive --new-file v2.2.3/linux/drivers/net/acenic.h linux/drivers/net/acenic.h
--- v2.2.3/linux/drivers/net/acenic.h Fri Jan 8 22:36:07 1999
+++ linux/drivers/net/acenic.h Mon Mar 22 08:08:12 1999
@@ -1,13 +1,84 @@
X #ifndef _ACENIC_H_
X #define _ACENIC_H_
X
-#if ((BITS_PER_LONG != 32) && (BITS_PER_LONG != 64))
-#error "BITS_PER_LONG not defined or not valid"
+/*
+ * Addressing:
+ *
+ * The Tigon uses 64-bit host addresses, regardless of their actual
+ * length, and it expects a big-endian format. For 32 bit systems the
+ * upper 32 bits of the address are simply ignored (zero), however for
+ * little endian 64 bit systems (Alpha) this looks strange with the
+ * two parts of the address word being swapped.
+ *
+ * The addresses are split in two 32 bit words for all architectures
+ * as some of them are in PCI shared memory and it is necessary to use
+ * readl/writel to access them.
+ *
+ * The addressing code is derived from Pete Beckman's work, but
+ * modified to deal properly with readl/writel usage.
+ */
+
+typedef struct {
+ u32 addrhi;
+ u32 addrlo;
+} aceaddr;
+
+
+static inline void set_aceaddr(aceaddr *aa, volatile void *addr)
+{
+ unsigned long baddr = virt_to_bus((void *)addr);
+#if (BITS_PER_LONG == 64)
+ aa->addrlo = baddr & 0xffffffff;
+ aa->addrhi = baddr >> 32;
+#else
+ /* Don't bother setting zero every time */
+ aa->addrlo = baddr;
X #endif
+ mb();
+}
X
X
-struct ace_regs {
+static inline void set_aceaddr_bus(aceaddr *aa, volatile void *addr)
+{
+ unsigned long baddr = (unsigned long)addr;
+#if (BITS_PER_LONG == 64)
+ aa->addrlo = baddr & 0xffffffff;
+ aa->addrhi = baddr >> 32;
+#else
+ /* Don't bother setting zero every time */
+ aa->addrlo = baddr;
+#endif
+ mb();
+}
+
+
+static inline void *get_aceaddr(aceaddr *aa)
+{
+ unsigned long addr;
+ mb();
+#if (BITS_PER_LONG == 64)
+ addr = (u64)aa->addrhi << 32 | aa->addrlo;
+#else
+ addr = aa->addrlo;
+#endif
+ return bus_to_virt(addr);
+}
+
+
+static inline void *get_aceaddr_bus(aceaddr *aa)
+{
+ unsigned long addr;
+ mb();
+#if (BITS_PER_LONG == 64)
+ addr = (u64)aa->addrhi << 32 | aa->addrlo;
+#else
+ addr = aa->addrlo;
+#endif
+ return (void *)addr;
+}
X
+
+struct ace_regs {
X u32 pad0[16]; /* PCI control registers */
X
X u32 HostCtrl; /* 0x40 */
@@ -109,7 +180,7 @@
X u32 ModeStat;
X u32 DmaReadCfg;
X u32 DmaWriteCfg; /* 0x620 */
- u32 pad15;
+ u32 TxBufRat;
X u32 EvtCsm;
X u32 CmdCsm;
X u32 TuneRxCoalTicks;/* 0x630 */
@@ -220,6 +291,7 @@
X #define ACE_BYTE_SWAP_DATA 0x10
X #define ACE_WARN 0x08
X #define ACE_WORD_SWAP 0x04
+#define ACE_NO_JUMBO_FRAG 0x200
X #define ACE_FATAL 0x40000000
X
X
@@ -227,7 +299,7 @@
X * DMA config
X */
X
-#define DMA_THRESH_8W 0x80;
+#define DMA_THRESH_8W 0x80
X
X
X /*
@@ -366,19 +438,19 @@
X #define DESC_MORE 0x08
X
X /*
- * RX control block flags
+ * Control block flags
X */
X
-#define RX_TCP_UDP_SUM 0x01
-#define RX_IP_SUM 0x02
-#define RX_SPLIT_HDRS 0x04
-#define RX_NO_PSEUDO_HDR_SUM 0x08
+#define FLG_RX_TCP_UDP_SUM 0x01
+#define FLG_RX_IP_SUM 0x02
+#define FLG_RX_SPLIT_HDRS 0x04
+#define FLG_RX_NO_PSDO_HDR_SUM 0x08
+#define FLG_RNG_DISABLED 0x200
X
X /*
X * Descriptor flags
X */
-
-#define JUMBO_FLAG 0x10
+#define DFLG_RX_JUMBO 0x10
X
X /*
X * TX ring
@@ -389,12 +461,13 @@
X #define TX_RING_BASE 0x3800
X
X struct tx_desc{
-#if (BITS_PER_LONG == 64)
- u64 addr;
-#else
- u32 zero;
- u32 addr;
-#endif
+ aceaddr addr;
+ u32 flagsize;
+#if 0
+/*
+ * This is in PCI shared mem and must be accessed with readl/writel
+ * real layout is:
+ */
X #if __LITTLE_ENDIAN
X u16 flags;
X u16 size;
@@ -402,6 +475,7 @@
X u16 size;
X u16 flags;
X #endif
+#endif
X u32 nic_addr;
X };
X
@@ -412,19 +486,18 @@
X #define RX_JUMBO_RING_ENTRIES 256
X #define RX_JUMBO_RING_SIZE (RX_JUMBO_RING_ENTRIES *sizeof(struct rx_desc))
X
-#define RX_RETURN_RING_ENTRIES (2 * RX_STD_RING_ENTRIES)
-#define RX_RETURN_RING_SIZE (RX_RETURN_RING_ENTRIES * \
+#define RX_MINI_RING_ENTRIES 1024
+#define RX_MINI_RING_SIZE (RX_MINI_RING_ENTRIES *sizeof(struct rx_desc))
+
+#define RX_RETURN_RING_ENTRIES 2048
+#define RX_RETURN_RING_SIZE (RX_MAX_RETURN_RING_ENTRIES * \
X sizeof(struct rx_desc))
X
-#define RX_RING_THRESH 32
+#define RX_RING_THRESH 64
+#define RX_RING_JUMBO_THRESH 48
X
X struct rx_desc{
-#if (BITS_PER_LONG == 64)
- u64 addr;
-#else
- u32 zero;
- u32 addr;
-#endif
+ aceaddr addr;
X #ifdef __LITTLE_ENDIAN
X u16 size;
X u16 idx;
@@ -462,12 +535,7 @@
X * This struct is shared with the NIC firmware.
X */
X struct ring_ctrl {
-#if (BITS_PER_LONG == 64)
- u64 rngptr;
-#else
- u32 zero;
- u32 rngptr;
-#endif
+ aceaddr rngptr;
X #ifdef __LITTLE_ENDIAN
X u16 flags;
X u16 max_len;
@@ -522,22 +590,12 @@
X struct ring_ctrl tx_ctrl;
X struct ring_ctrl rx_std_ctrl;
X struct ring_ctrl rx_jumbo_ctrl;
+ struct ring_ctrl rx_mini_ctrl;
X struct ring_ctrl rx_return_ctrl;
-#if (BITS_PER_LONG == 64)
- u64 evt_prd_ptr;
- u64 rx_ret_prd_ptr;
- u64 tx_csm_ptr;
- u64 stats2_ptr;
-#else
- u32 evt_prd_ptr_hi;
- u32 evt_prd_ptr;
- u32 rx_ret_prd_ptr_hi;
- u32 rx_ret_prd_ptr;
- u32 tx_csm_ptr_hi;
- u32 tx_csm_ptr;
- u32 stats2_ptr_hi;
- u32 stats2_ptr;
-#endif
+ aceaddr evt_prd_ptr;
+ aceaddr rx_ret_prd_ptr;
+ aceaddr tx_csm_ptr;
+ aceaddr stats2_ptr;
X };
X
X /*
@@ -555,6 +613,9 @@
X struct tx_desc *tx_ring;
X struct rx_desc rx_std_ring[RX_STD_RING_ENTRIES];
X struct rx_desc rx_jumbo_ring[RX_JUMBO_RING_ENTRIES];
+#if 0
+ struct rx_desc rx_mini_ring[RX_MINI_RING_ENTRIES];
+#endif
X struct rx_desc rx_return_ring[RX_RETURN_RING_ENTRIES];
X struct event evt_ring[EVT_RING_ENTRIES];
X struct ace_info *info;
@@ -576,7 +637,7 @@
X struct device *next
X __attribute__ ((aligned (L1_CACHE_BYTES)));
X unsigned char *trace_buf;
- int fw_running, fw_up, jumbo, promisc;
+ int fw_running, fw_up, jumbo, promisc, mcast_all;
X int version;
X int flags;
X u16 vendor;
@@ -598,7 +659,7 @@
X static int ace_load_jumbo_rx_ring(struct device *dev);
X static int ace_flush_jumbo_rx_ring(struct device *dev);
X static void ace_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-
+static int ace_load_firmware(struct device *dev);
X static int ace_open(struct device *dev);
X static int ace_start_xmit(struct sk_buff *skb, struct device *dev);
X static int ace_close(struct device *dev);
diff -u --recursive --new-file v2.2.3/linux/drivers/net/acenic_firmware.h linux/drivers/net/acenic_firmware.h
--- v2.2.3/linux/drivers/net/acenic_firmware.h Fri Jan 8 22:36:07 1999
+++ linux/drivers/net/acenic_firmware.h Mon Mar 22 08:08:12 1999
@@ -1,5554 +1,8532 @@
X /* Generated by genfw.c */
X int tigonFwReleaseMajor = 0xc;
-int tigonFwReleaseMinor = 0x1;
-int tigonFwReleaseFix = 0x6;
-u32 tigonFwStartAddr = 0x4000;
-u32 tigonFwTextAddr = 0x4000;
-int tigonFwTextLen = 0x10500;
-u32 tigonFwDataAddr = 0x14f50;
-int tigonFwDataLen = 0x140;
-u32 tigonFwRodataAddr = 0x14500;
-int tigonFwRodataLen = 0xa30;
-u32 tigonFwBssAddr = 0x150c0;
+int tigonFwReleaseMinor = 0x3;
+int tigonFwReleaseFix = 0x5;
+u32 tigonFwStartAddr = 0x00004000;
+u32 tigonFwTextAddr = 0x00004000;
+int tigonFwTextLen = 0x10910;
+u32 tigonFwRodataAddr = 0x00014910;
+int tigonFwRodataLen = 0xaa0;
+u32 tigonFwDataAddr = 0x000153d0;
+int tigonFwDataLen = 0x150;
+u32 tigonFwSbssAddr = 0x00015520;
+int tigonFwSbssLen = 0x2c;
+u32 tigonFwBssAddr = 0x00015550;
X int tigonFwBssLen = 0x2080;
-u32 tigonFwSbssAddr = 0x15090;
-int tigonFwSbssLen = 0x28;
X u32 tigonFwText[(MAX_TEXT_LEN/4) + 1] __initdata = {
-0x10000003, 0x0, 0xd, 0xd, 0x3c1d0001, 0x8fbd4f84,
-0x3a0f021, 0x3c100000, 0x26104000, 0xc00100c, 0x0, 0xd,
-0x27bdffd8, 0x3c1cc000, 0x3c1b0013, 0x377bd800, 0xd021, 0x3c170013,
-0x36f75430, 0x2e02021, 0x340583d0, 0xafbf0024, 0xc002488, 0xafb00020,
-0xc0023e8, 0x0, 0x3c040001, 0x24844560, 0x24050001, 0x2e03021,
-0x3821, 0x3c100001, 0x26107140, 0xafb00010, 0xc002403, 0xafbb0014,
-0x3c02000f, 0x3442ffff, 0x2021024, 0x362102b, 0x10400009, 0x24050003,
-0x3c040001, 0x2484456c, 0x2003021, 0x3603821, 0x3c020010, 0xafa20010,
-0xc002403, 0xafa00014, 0x2021, 0x3405c000, 0x3c010001, 0x370821,
-0xa02083a0, 0x3c010001, 0x370821, 0xa02083a2, 0x3c010001, 0x370821,
-0xa02083a3, 0x3c010001, 0x370821, 0xac2083a4, 0xa2e004c8, 0x418c0,
-0x24840001, 0x771021, 0xac40726c, 0x771021, 0xac407270, 0x2e31021,
-0xa445726c, 0x2c820020, 0x1440fff7, 0x418c0, 0x2021, 0x3405c000,
-0x418c0, 0x24840001, 0x771021, 0xac40736c, 0x771021, 0xac407370,
-0x2e31021, 0xa445736c, 0x2c820080, 0x5440fff7, 0x418c0, 0xaf800054,
-0xaf80011c, 0x8f820044, 0x34420040, 0xaf820044, 0x8f820044, 0x34420020,
-0xaf820044, 0x8f420218, 0x30420002, 0x10400009, 0x0, 0x8f420220,
-0x3c030002, 0x34630004, 0x431025, 0xaee204b4, 0x8f42021c, 0x8001074,
-0x34420004, 0x8f420220, 0x3c030002, 0x34630006, 0x431025, 0xaee204b4,
-0x8f42021c, 0x34420006, 0xaee204bc, 0x8f420218, 0x30420010, 0x1040000a,
-0x0, 0x8f42021c, 0x34420004, 0xaee204b8, 0x8f420220, 0x3c03000a,
-0x34630004, 0x431025, 0x800108a, 0xaee204b0, 0x8f420220, 0x3c03000a,
-0x34630006, 0x431025, 0xaee204b0, 0x8f42021c, 0x34420006, 0xaee204b8,
-0x8f420218, 0x30420200, 0x10400003, 0x24020001, 0x8001091, 0xa2e27238,
-0xa2e07238, 0x24020001, 0xaf8200a0, 0xaf8200b0, 0x8f830054, 0x8f820054,
-0x8001099, 0x24630064, 0x8f820054, 0x621023, 0x2c420065, 0x1440fffc,
-0x0, 0xaf800044, 0x8f420208, 0x8f43020c, 0xaee20010, 0xaee30014,
-0x8ee40010, 0x8ee50014, 0x26e20030, 0xaee20028, 0x24020480, 0xaee20018,
-0xaf840090, 0xaf850094, 0x8ee20028, 0xaf8200b4, 0x96e2001a, 0xaf82009c,
-0x8f8200b0, 0x8ee304bc, 0x431025, 0xaf8200b0, 0x8f8200b0, 0x30420004,
-0x1440fffd, 0x0, 0x8ee20450, 0x8ee30454, 0xaee304ec, 0x8ee204ec,
-0x2442e000, 0x2c422001, 0x1440000d, 0x26e40030, 0x8ee20450, 0x8ee30454,
-0x3c040001, 0x24844578, 0x3c050001, 0xafa00010, 0xafa00014, 0x8ee704ec,
-0x34a5f000, 0xc002403, 0x603021, 0x26e40030, 0xc002488, 0x24050400,
-0x27440080, 0xc002488, 0x24050080, 0x26e4776c, 0xc002488, 0x24050400,
-0x8f42025c, 0x26e40094, 0xaee20060, 0x8f420260, 0x27450200, 0x24060008,
-0xaee20068, 0x24020006, 0xc00249a, 0xaee20064, 0x3c023b9a, 0x3442ca00,
-0x2021, 0x24030002, 0xaee30074, 0xaee30070, 0xaee2006c, 0x240203e8,
-0xaee20104, 0x24020001, 0xaee30100, 0xaee2010c, 0x3c030001, 0x641821,
-0x90634f50, 0x2e41021, 0x24840001, 0xa043009c, 0x2c82000f, 0x1440fff8,
-0x0, 0x8f820040, 0x2e41821, 0x24840001, 0x21702, 0x24420030,
-0xa062009c, 0x2e41021, 0xa040009c, 0x96e2046a, 0x30420003, 0x14400009,
-0x0, 0x96e2047a, 0x30420003, 0x50400131, 0x3c030800, 0x96e2046a,
-0x30420003, 0x1040002a, 0x3c020700, 0x96e2047a, 0x30420003, 0x10400026,
-0x3c020700, 0x96e3047a, 0x96e2046a, 0x14620022, 0x3c020700, 0x8ee204b0,
-0x24030001, 0xa2e34e10, 0x34420e00, 0xaee204b0, 0x8f420218, 0x30420100,
-0x10400005, 0x0, 0x3c020001, 0x2442e128, 0x800111d, 0x21100,
-0x3c020001, 0x2442d31c, 0x21100, 0x21182, 0x3c030800, 0x431025,
-0x3c010001, 0xac221138, 0x3c020001, 0x2442f640, 0x21100, 0x21182,
-0x3c030800, 0x431025, 0x3c010001, 0xac221178, 0x8ee20000, 0x34424000,
-0x8001238, 0xaee20000, 0x34423000, 0xafa20018, 0x8ee205f8, 0x8f430228,
-0x24420001, 0x304900ff, 0x512300e2, 0xafa00010, 0x8ee205f8, 0x210c0,
-0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f870120,
-0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128,
-0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0,
-0x3021, 0x24420001, 0xaee201a0, 0x80011a0, 0x8ee201a0, 0x8ee405f8,
-0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b,
-0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee305f8, 0x24020008,
-0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c, 0x318c0, 0x246305fc,
-0x2e31021, 0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10,
-0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24,
-0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24,
-0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001,
-0x10a20005, 0x0, 0x800118a, 0x0, 0x14a00005, 0x0,
-0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
-0x50400013, 0xac800000, 0x80011a0, 0x0, 0x8ee24e20, 0x24030040,
-0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007, 0xac820000,
-0x24020001, 0xac820004, 0x54c0000c, 0xaee905f8, 0x3c040001, 0x24844584,
-0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403,
-0x34a5f000, 0x8001223, 0x0, 0x8f830120, 0x27623800, 0x24660020,
-0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0,
-0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3021, 0x24420001,
-0xaee201a0, 0x8001207, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490,
-0x8ee50494, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011,
-0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120,
-0x92e24e10, 0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, 0x0, 0x8ee34e20,
-0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004,
-0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24,
-0x24420001, 0x10a20005, 0x0, 0x80011f1, 0x0, 0x14a00005,
-0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
-0x2c420011, 0x50400013, 0xac800000, 0x8001207, 0x0, 0x8ee24e20,
-0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001,
-0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020012,
-0xac820000, 0x24020001, 0xac820004, 0x14c0001b, 0x0, 0x3c040001,
-0x2484458c, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009,
-0xc002403, 0x34a5f001, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x8001223,
-0x8ee201ac, 0x3c040001, 0x24844598, 0xafa00014, 0x8ee605f8, 0x8f470228,
-0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201a8, 0x24420001, 0xaee201a8,
-0x8ee201a8, 0x8ee2015c, 0x3c040001, 0x248445a4, 0x3405f001, 0x24420001,
-0xaee2015c, 0x8ee2015c, 0x3021, 0x3821, 0xafa00010, 0xc002403,
-0xafa00014, 0x8001238, 0x0, 0x3c020001, 0x2442f568, 0x21100,
-0x21182, 0x431025, 0x3c010001, 0xac221178, 0x96e2045a, 0x30420003,
-0x10400025, 0x3c050fff, 0x8ee204b8, 0x34a5ffff, 0x34420a00, 0xaee204b8,
-0x8ee304b8, 0x3c040001, 0x248445b0, 0x24020001, 0xa2e204dc, 0xa2e204dd,
-0x3c020002, 0x621825, 0x3c020001, 0x2442a390, 0x451024, 0x21082,
-0xaee304b8, 0x3c030800, 0x431025, 0x3c010001, 0xac221120, 0x3c020001,
-0x2442adb4, 0x451024, 0x21082, 0x431025, 0x3c010001, 0xac221180,
-0x96e6045a, 0x3821, 0x24050011, 0xafa00010, 0xc002403, 0xafa00014,
-0x8001268, 0x0, 0x3c020001, 0x2442a9d4, 0x21100, 0x21182,
-0x3c030800, 0x431025, 0x3c010001, 0xac221180, 0x96e2046a, 0x30420010,
-0x14400009, 0x0, 0x96e2047a, 0x30420010, 0x10400112, 0x0,
-0x96e2046a, 0x30420010, 0x10400005, 0x3c020700, 0x96e2047a, 0x30420010,
-0x14400102, 0x3c020700, 0x34423000, 0xafa20018, 0x8ee205f8, 0x8f430228,
-0x24420001, 0x304900ff, 0x512300e2, 0xafa00010, 0x8ee205f8, 0x210c0,
-0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f870120,
-0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128,
-0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0,
-0x3021, 0x24420001, 0xaee201a0, 0x80012ea, 0x8ee201a0, 0x8ee405f8,
-0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b,
-0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee305f8, 0x24020008,
-0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c, 0x318c0, 0x246305fc,
-0x2e31021, 0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10,
-0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24,
-0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24,
-0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001,
-0x10a20005, 0x0, 0x80012d4, 0x0, 0x14a00005, 0x0,
-0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
-0x50400013, 0xac800000, 0x80012ea, 0x0, 0x8ee24e20, 0x24030040,
-0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007, 0xac820000,
-0x24020001, 0xac820004, 0x54c0000c, 0xaee905f8, 0x3c040001, 0x24844584,
-0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403,
-0x34a5f000, 0x800136d, 0x0, 0x8f830120, 0x27623800, 0x24660020,
-0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0,
-0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3021, 0x24420001,
-0xaee201a0, 0x8001351, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490,
-0x8ee50494, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011,
-0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120,
-0x92e24e10, 0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, 0x0, 0x8ee34e20,
-0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004,
-0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24,
-0x24420001, 0x10a20005, 0x0, 0x800133b, 0x0, 0x14a00005,
-0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
-0x2c420011, 0x50400013, 0xac800000, 0x8001351, 0x0, 0x8ee24e20,
-0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001,
-0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020012,
-0xac820000, 0x24020001, 0xac820004, 0x14c0001b, 0x0, 0x3c040001,
-0x2484458c, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009,
-0xc002403, 0x34a5f001, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x800136d,
-0x8ee201ac, 0x3c040001, 0x24844598, 0xafa00014, 0x8ee605f8, 0x8f470228,
-0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201a8, 0x24420001, 0xaee201a8,
-0x8ee201a8, 0x8ee2015c, 0x3c040001, 0x248445a4, 0x3405f002, 0x24420001,
-0xaee2015c, 0x8ee2015c, 0x3021, 0x3821, 0xafa00010, 0xc002403,
-0xafa00014, 0x96e6047a, 0x96e7046a, 0x3c040001, 0x248445bc, 0x24050012,
-0xafa00010, 0xc002403, 0xafa00014, 0xc0044c0, 0x0, 0xc002314,
-0x0, 0x3c060001, 0x34c63800, 0xaee005f8, 0xaf400228, 0xaf40022c,
-0x96e30458, 0x8ee40000, 0x3c0512d8, 0x34a5c358, 0x27623800, 0xaee27248,
-0x27623800, 0xaee27250, 0x27623800, 0xaee27254, 0x3661021, 0xaee27260,
-0x2402ffff, 0xaee004c4, 0xaee004d0, 0xaee004d4, 0xaee004e0, 0xa2e004e4,
-0xaee00dfc, 0xaee00e08, 0xaee00e00, 0xaee00e04, 0xaee00e0c, 0xaee0723c,
-0xaee05234, 0xaee05230, 0xaee0522c, 0xaee07240, 0xaee07244, 0xaee0724c,
-0xaee07258, 0xaee004c0, 0x2463ffff, 0x852025, 0xaee304e8, 0xaee40000,
-0xaf800060, 0xaf820064, 0x3c020100, 0xafa20018, 0x8ee205f8, 0x8f430228,
-0x24420001, 0x304900ff, 0x512300e2, 0xafa00010, 0x8ee205f8, 0x210c0,
-0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f870120,
-0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128,
-0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0,
-0x3021, 0x24420001, 0xaee201a0, 0x8001422, 0x8ee201a0, 0x8ee405f8,
-0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b,
-0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee305f8, 0x24020008,
-0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c, 0x318c0, 0x246305fc,
-0x2e31021, 0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10,
-0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24,
-0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24,
-0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001,
-0x10a20005, 0x0, 0x800140c, 0x0, 0x14a00005, 0x0,
-0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
-0x50400013, 0xac800000, 0x8001422, 0x0, 0x8ee24e20, 0x24030040,
-0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007, 0xac820000,
-0x24020001, 0xac820004, 0x54c0000c, 0xaee905f8, 0x3c040001, 0x24844584,
-0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403,
-0x34a5f000, 0x80014a5, 0x0, 0x8f830120, 0x27623800, 0x24660020,
-0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0,
-0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x3021, 0x24420001,
-0xaee201a0, 0x8001489, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490,
-0x8ee50494, 0x2462001c, 0xac620008, 0x24020008, 0xa462000e, 0x24020011,
-0xac620018, 0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120,
-0x92e24e10, 0x14400037, 0x24060001, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0x8c830000, 0x24020012, 0x1462001f, 0x0, 0x8ee34e20,
-0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004,
-0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24,
-0x24420001, 0x10a20005, 0x0, 0x8001473, 0x0, 0x14a00005,
-0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
-0x2c420011, 0x50400013, 0xac800000, 0x8001489, 0x0, 0x8ee24e20,
-0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001,
-0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020012,
-0xac820000, 0x24020001, 0xac820004, 0x14c0001b, 0x0, 0x3c040001,
-0x2484458c, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009,
-0xc002403, 0x34a5f001, 0x8ee201ac, 0x24420001, 0xaee201ac, 0x80014a5,
-0x8ee201ac, 0x3c040001, 0x24844598, 0xafa00014, 0x8ee605f8, 0x8f470228,
-0x3c050009, 0xc002403, 0x34a5f005, 0x8ee201a8, 0x24420001, 0xaee201a8,
-0x8ee201a8, 0x8ee20150, 0x24420001, 0xaee20150, 0xc0014dc, 0x8ee20150,
-0x8f8200a0, 0x30420004, 0x1440fffd, 0x0, 0x8f820040, 0x30420001,
-0x14400008, 0x0, 0x8f430104, 0x24020001, 0x10620004, 0x0,
-0x8f420264, 0x10400006, 0x0, 0x8ee20178, 0x24420001, 0xaee20178,
-0x80014c5, 0x8ee20178, 0x8f820044, 0x34420004, 0xaf820044, 0x8ee20174,
-0x24420001, 0xaee20174, 0x8ee20174, 0x8f8200d8, 0x8f8300d4, 0x431023,
-0xaee2725c, 0x8ee2725c, 0x1c400003, 0x3c030001, 0x431021, 0xaee2725c,
-0xc004054, 0x0, 0xc004400, 0xaf800228, 0x8fbf0024, 0x8fb00020,
-0x3e00008, 0x27bd0028, 0x3e00008, 0x0, 0x3e00008, 0x0,
-0x0, 0x0, 0x2402002c, 0xaf820050, 0xaee07264, 0x8f420238,
-0xaee27268, 0x8f820054, 0x24420067, 0xaf820058, 0xaee07b78, 0xaee07b7c,
-0xaee07b74, 0x3c010001, 0x370821, 0xac2083ac, 0x3c010001, 0x370821,
-0x3e00008, 0xa02083a9, 0x27bdffd8, 0xafbf0024, 0xafb00020, 0x8f820054,
-0x3c030001, 0x8c63500c, 0x24420067, 0x1060000d, 0xaf820058, 0x3c020001,
-0x571021, 0x904283a8, 0x10400005, 0x3c030200, 0x3c010001, 0x370821,
-0x8001503, 0xa02083a8, 0x8ee20000, 0x431025, 0xaee20000, 0x8f420218,
-0x30420100, 0x104000c6, 0x0, 0x8f8200b0, 0x30420004, 0x104000c2,
-0x0, 0x3c030001, 0x771821, 0x8c6383c0, 0x8f820104, 0x146200b4,
-0x0, 0x3c030001, 0x771821, 0x8c6383c4, 0x8f8200b4, 0x146200ae,
-0x0, 0x8f8200b0, 0x3c030080, 0x431024, 0x1040000d, 0x0,
-0x8f82011c, 0x34420002, 0xaf82011c, 0x8f8200b0, 0x2403fffb, 0x431024,
-0xaf8200b0, 0x8f82011c, 0x2403fffd, 0x431024, 0x80015cc, 0xaf82011c,
-0x3c030001, 0x771821, 0x8c6383c0, 0x8f820104, 0x14620082, 0x0,
-0x3c030001, 0x771821, 0x8c6383c4, 0x8f8200b4, 0x1462007c, 0x0,
-0x3c070001, 0xf73821, 0x8ce783c0, 0x8f8200b0, 0x3c040001, 0x24844630,
-0xafa00014, 0xafa20010, 0x8f8600b0, 0x3c050005, 0xc002403, 0x34a50900,
-0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830104, 0x8f8200b0, 0x34420001,
-0xaf8200b0, 0xaf830104, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
-0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124,
-0x14c20006, 0x0, 0x8ee201a0, 0x24420001, 0xaee201a0, 0x80015a0,
-0x8ee201a0, 0x8f440208, 0x8f45020c, 0x26e20030, 0xac620008, 0x24020400,
-0xa462000e, 0x2402000f, 0xac620018, 0xac60001c, 0xac640000, 0xac650004,
-0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400037, 0x0,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020007,
-0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x24030040,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee54e20, 0x24420001,
-0x10430007, 0x0, 0x8ee24e24, 0x24420001, 0x10a20005, 0x0,
-0x800158a, 0x0, 0x14a00005, 0x0, 0x8f820128, 0x24420020,
-0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
-0x80015a0, 0x0, 0x8ee24e20, 0x24030040, 0x24420001, 0x50430003,
-0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0,
-0x24425028, 0x2e22021, 0x24020007, 0xac820000, 0x24020001, 0xac820004,
-0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201d4, 0x3c070001,
-0xf73821, 0x8ce783c0, 0x24420001, 0xaee201d4, 0x8ee201d4, 0x3c040001,
-0x2484463c, 0x80015bd, 0xafa00010, 0x8f820104, 0x3c010001, 0x370821,
-0xac2283c0, 0x8f8200b4, 0x3c070001, 0xf73821, 0x8ce783c0, 0x3c040001,
-0x24844644, 0x3c010001, 0x370821, 0xac2283c4, 0xafa00010, 0xafa00014,
-0x8f8600b0, 0x3c050005, 0xc002403, 0x34a50900, 0x80015cc, 0x0,
-0x8f820104, 0x3c010001, 0x370821, 0xac2283c0, 0x8f8200b4, 0x3c010001,
-0x370821, 0xac2283c4, 0x8ee27264, 0x92e304e4, 0x24420067, 0x14600006,
-0xaee27264, 0x8ee27264, 0x8f430234, 0x43102b, 0x1440007b, 0x0,
-0x8ee304d4, 0x8ee204e8, 0x14620004, 0x0, 0x92e204e4, 0x50400074,
-0xa2e004e4, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b, 0x50400001,
-0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124, 0x14c20007,
-0x0, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x8001637,
-0x8ee201a0, 0x8ee204d4, 0xac62001c, 0x8ee404a0, 0x8ee504a4, 0x2462001c,
-0xac620008, 0x24020008, 0xa462000e, 0x24020011, 0xac620018, 0xac640000,
-0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400037,
-0x24100001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c830000,
-0x24020012, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b,
-0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee54e20,
-0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001, 0x10a20005,
-0x0, 0x8001621, 0x0, 0x14a00005, 0x0, 0x8f820128,
-0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400013,
-0xac800000, 0x8001637, 0x0, 0x8ee24e20, 0x24030040, 0x24420001,
-0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20,
-0x210c0, 0x24425028, 0x2e22021, 0x24020012, 0xac820000, 0x24020001,
-0xac820004, 0x5600000b, 0x24100001, 0x8ee204d4, 0x3c040001, 0x2484464c,
-0xafa00014, 0xafa20010, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403,
-0x34a5f006, 0x16000003, 0x24020001, 0x8001650, 0xa2e204e4, 0x8ee2016c,
-0x24420001, 0xaee2016c, 0x8ee2016c, 0x8ee204d4, 0xa2e004e4, 0xaee004e0,
-0xaee07264, 0xaee204e8, 0x8ee20e0c, 0x1040006d, 0x0, 0x8f830120,
-0x27623800, 0x24660020, 0xc2102b, 0x50400001, 0x27663000, 0x8f820128,
-0x10c20004, 0x0, 0x8f820124, 0x14c20007, 0x0, 0x8ee201a0,
-0x8021, 0x24420001, 0xaee201a0, 0x80016ad, 0x8ee201a0, 0x8ee2723c,
-0xac62001c, 0x8ee40498, 0x8ee5049c, 0x2462001c, 0xac620008, 0x24020008,
-0xa462000e, 0x24020011, 0xac620018, 0xac640000, 0xac650004, 0x8ee204b4,
-0xac620010, 0xaf860120, 0x92e24e10, 0x14400037, 0x24100001, 0x8ee24e20,
-0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020012, 0x1462001f,
-0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004,
-0x24420001, 0xac820004, 0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007,
-0x0, 0x8ee24e24, 0x24420001, 0x10a20005, 0x0, 0x8001697,
-0x0, 0x14a00005, 0x0, 0x8f820128, 0x24420020, 0xaf820128,
-0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x80016ad,
-0x0, 0x8ee24e20, 0x24030040, 0x24420001, 0x50430003, 0x1021,
-0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x5600000b,
-0x24100001, 0x8ee2723c, 0x3c040001, 0x24844658, 0xafa00014, 0xafa20010,
-0x8ee6723c, 0x8f470280, 0x3c050009, 0xc002403, 0x34a5f008, 0x56000001,
-0xaee00e0c, 0x8ee20170, 0x24420001, 0xaee20170, 0x8ee20170, 0x8ee24e14,
-0x10400019, 0x0, 0xaee04e14, 0x8f820040, 0x30420001, 0x14400008,
-0x0, 0x8f430104, 0x24020001, 0x10620004, 0x0, 0x8f420264,
-0x10400006, 0x0, 0x8ee20178, 0x24420001, 0xaee20178, 0x80016da,
-0x8ee20178, 0x8f820044, 0x34420004, 0xaf820044, 0x8ee20174, 0x24420001,
-0xaee20174, 0x8ee20174, 0x8ee27268, 0x2442ff99, 0xaee27268, 0x8ee27268,
-0x1c4002a8, 0x0, 0x8f420238, 0x104002a5, 0x0, 0x8f420080,
-0xaee2004c, 0x8f4200c0, 0xaee20048, 0x8f420084, 0xaee20038, 0x8f420084,
-0xaee20234, 0x8f420088, 0xaee20238, 0x8f42008c, 0xaee2023c, 0x8f420090,
-0xaee20240, 0x8f420094, 0xaee20244, 0x8f420098, 0xaee20248, 0x8f42009c,
-0xaee2024c, 0x8f4200a0, 0xaee20250, 0x8f4200a4, 0xaee20254, 0x8f4200a8,
-0xaee20258, 0x8f4200ac, 0xaee2025c, 0x8f4200b0, 0xaee20260, 0x8f4200b4,
-0xaee20264, 0x8f4200b8, 0xaee20268, 0x8f4200bc, 0x24040001, 0xaee2026c,
-0xaee0003c, 0x41080, 0x571021, 0x8ee3003c, 0x8c420234, 0x24840001,
-0x621821, 0x2c82000f, 0xaee3003c, 0x1440fff8, 0x41080, 0x8f4200cc,
-0xaee20050, 0x8f4200d0, 0xaee20054, 0x8f830120, 0x27623800, 0x24660020,
-0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0,
-0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x8021, 0x24420001,
-0xaee201a0, 0x8001770, 0x8ee201a0, 0x8f440208, 0x8f45020c, 0x26e20030,
-0xac620008, 0x24020400, 0xa462000e, 0x2402000f, 0xac620018, 0xac60001c,
-0xac640000, 0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10,
-0x14400037, 0x24100001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ee34e20, 0x8ee24e24,
-0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24,
-0x8ee54e20, 0x24420001, 0x10430007, 0x0, 0x8ee24e24, 0x24420001,
-0x10a20005, 0x0, 0x800175a, 0x0, 0x14a00005, 0x0,
-0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
-0x50400013, 0xac800000, 0x8001770, 0x0, 0x8ee24e20, 0x24030040,
-0x24420001, 0x50430003, 0x1021, 0x8ee24e20, 0x24420001, 0xaee24e20,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x24020007, 0xac820000,
-0x24020001, 0xac820004, 0x12000212, 0x3c020400, 0xafa20018, 0x3c020001,
-0x571021, 0x904283a0, 0x1040010b, 0x0, 0x8ee205f8, 0x8f430228,
-0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee205f8, 0x210c0,
-0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f830054,
-0x8f820054, 0x24690032, 0x1221023, 0x2c420033, 0x1040006a, 0x5821,
-0x24180008, 0x240f000d, 0x240d0007, 0x240c0040, 0x240e0001, 0x8f870120,
-0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128,
-0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0,
-0x8021, 0x24420001, 0xaee201a0, 0x80017ee, 0x8ee201a0, 0x8ee405f8,
-0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b,
-0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee205f8, 0xa4f8000e,
-0xacef0018, 0xacea001c, 0x210c0, 0x244205fc, 0x2e21021, 0xace20008,
-0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, 0x14400033, 0x24100001,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x144d001f,
-0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004,
-0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x104c0007,
-0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x80017db,
-0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128,
-0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x80017ee,
-0x0, 0x8ee24e20, 0x24420001, 0x504c0003, 0x1021, 0x8ee24e20,
-0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0xac8d0000, 0xac8e0004, 0x56000006, 0x240b0001, 0x8f820054, 0x1221023,
-0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, 0x24020001, 0x14620077,
-0x3c050009, 0xaeea05f8, 0x8f830054, 0x8f820054, 0x24690032, 0x1221023,
-0x2c420033, 0x10400061, 0x5821, 0x240d0008, 0x240c0011, 0x24080012,
-0x24070040, 0x240a0001, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
-0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124,
-0x14c20007, 0x0, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0,
-0x800185a, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490, 0x8ee50494,
-0x2462001c, 0xac620008, 0xa46d000e, 0xac6c0018, 0xac640000, 0xac650004,
-0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400033, 0x24100001,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x1448001f,
-0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004,
-0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x10470007,
-0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x8001847,
-0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128,
-0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x800185a,
-0x0, 0x8ee24e20, 0x24420001, 0x50470003, 0x1021, 0x8ee24e20,
-0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0xac880000, 0xac8a0004, 0x56000006, 0x240b0001, 0x8f820054, 0x1221023,
-0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, 0x14620003,
-0x3c050009, 0x8001977, 0x24100001, 0x3c040001, 0x24844664, 0xafa00010,
-0xafa00014, 0x8f860120, 0x8f870124, 0x8001876, 0x34a5f011, 0x3c040001,
-0x24844670, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x34a5f010,
-0xc002403, 0x8021, 0x8001977, 0x0, 0x3c040001, 0x2484467c,
-0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0x8001970, 0x34a5f00f,
-0x8ee205f8, 0x8f430228, 0x24420001, 0x304900ff, 0x512300e2, 0xafa00010,
-0x8ee205f8, 0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc,
-0xac440600, 0x8f870120, 0x27623800, 0x24e80020, 0x102102b, 0x50400001,
-0x27683000, 0x8f820128, 0x11020004, 0x0, 0x8f820124, 0x15020007,
-0x1021, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0, 0x80018f2,
-0x8ee201a0, 0x8ee405f8, 0x420c0, 0x801821, 0x8ee40430, 0x8ee50434,
-0xa32821, 0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004,
-0x8ee305f8, 0x24020008, 0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c,
-0x318c0, 0x246305fc, 0x2e31021, 0xace20008, 0x8ee204b4, 0xace20010,
-0xaf880120, 0x92e24e10, 0x14400037, 0x24100001, 0x8ee24e20, 0x210c0,
-0x24425028, 0x2e22021, 0x8c830000, 0x24020007, 0x1462001f, 0x0,
-0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001,
-0xac820004, 0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007, 0x0,
-0x8ee24e24, 0x24420001, 0x10a20005, 0x0, 0x80018dc, 0x0,
-0x14a00005, 0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
-0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x80018f2, 0x0,
-0x8ee24e20, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ee24e20,
-0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0x24020007, 0xac820000, 0x24020001, 0xac820004, 0x5600000c, 0xaee905f8,
-0x3c040001, 0x24844688, 0xafa00010, 0xafa00014, 0x8ee605f8, 0x8f470228,
-0x3c050009, 0xc002403, 0x34a5f000, 0x8001977, 0x0, 0x8f830120,
-0x27623800, 0x24660020, 0xc2102b, 0x50400001, 0x27663000, 0x8f820128,
-0x10c20004, 0x0, 0x8f820124, 0x14c20007, 0x0, 0x8ee201a0,
-0x8021, 0x24420001, 0xaee201a0, 0x8001959, 0x8ee201a0, 0x8ee205f8,
-0xac62001c, 0x8ee40490, 0x8ee50494, 0x2462001c, 0xac620008, 0x24020008,
-0xa462000e, 0x24020011, 0xac620018, 0xac640000, 0xac650004, 0x8ee204b4,
-0xac620010, 0xaf860120, 0x92e24e10, 0x14400037, 0x24100001, 0x8ee24e20,
-0x210c0, 0x24425028, 0x2e22021, 0x8c830000, 0x24020012, 0x1462001f,
-0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x24030040, 0x8c820004,
-0x24420001, 0xac820004, 0x8ee24e24, 0x8ee54e20, 0x24420001, 0x10430007,
-0x0, 0x8ee24e24, 0x24420001, 0x10a20005, 0x0, 0x8001943,
-0x0, 0x14a00005, 0x0, 0x8f820128, 0x24420020, 0xaf820128,
-0x8f820128, 0x8c820004, 0x2c420011, 0x50400013, 0xac800000, 0x8001959,
-0x0, 0x8ee24e20, 0x24030040, 0x24420001, 0x50430003, 0x1021,
-0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0x24020012, 0xac820000, 0x24020001, 0xac820004, 0x5600001d,
-0x24100001, 0x3c040001, 0x24844690, 0xafa00010, 0xafa00014, 0x8ee605f8,
-0x8f470228, 0x3c050009, 0xc002403, 0x34a5f001, 0x8ee201ac, 0x24420001,
-0xaee201ac, 0x8001977, 0x8ee201ac, 0x3c040001, 0x2484469c, 0xafa00014,
-0x8ee605f8, 0x8f470228, 0x3c050009, 0x34a5f005, 0xc002403, 0x0,
-0x8ee201a8, 0x8021, 0x24420001, 0xaee201a8, 0x8ee201a8, 0x1200000c,
-0x24020001, 0x3c010001, 0x370821, 0xa02083a0, 0x8f420238, 0x8ee30154,
-0x24630001, 0xaee30154, 0x8ee30154, 0x8001987, 0xaee27268, 0x24020001,
-0x3c010001, 0x370821, 0xa02283a0, 0x3c020001, 0x8c42500c, 0x10400187,
-0x0, 0x8ee27b74, 0x24430001, 0x284200c9, 0x144001a4, 0xaee37b74,
-0x8ee204c4, 0x30420002, 0x14400119, 0xaee07b74, 0x8ee204c4, 0x3c030600,
-0x34631000, 0x34420002, 0xaee204c4, 0xafa30018, 0x8ee205f8, 0x8f430228,
-0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee205f8, 0x210c0,
-0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600, 0x8f830054,
-0x8f820054, 0x24690032, 0x1221023, 0x2c420033, 0x1040006a, 0x5821,
-0x24180008, 0x240f000d, 0x240d0007, 0x240c0040, 0x240e0001, 0x8f870120,
-0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000, 0x8f820128,
-0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021, 0x8ee201a0,
-0x8021, 0x24420001, 0xaee201a0, 0x8001a10, 0x8ee201a0, 0x8ee405f8,
-0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b,
-0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee205f8, 0xa4f8000e,
-0xacef0018, 0xacea001c, 0x210c0, 0x244205fc, 0x2e21021, 0xace20008,
-0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, 0x14400033, 0x24100001,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x144d001f,
-0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004,
-0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x104c0007,
-0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x80019fd,
-0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128,
-0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x8001a10,
-0x0, 0x8ee24e20, 0x24420001, 0x504c0003, 0x1021, 0x8ee24e20,
-0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0xac8d0000, 0xac8e0004, 0x56000006, 0x240b0001, 0x8f820054, 0x1221023,
-0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, 0x24020001, 0x54620078,
-0xafa00010, 0xaeea05f8, 0x8f830054, 0x8f820054, 0x24690032, 0x1221023,
-0x2c420033, 0x10400061, 0x5821, 0x240d0008, 0x240c0011, 0x24080012,
-0x24070040, 0x240a0001, 0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
-0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0, 0x8f820124,
-0x14c20007, 0x0, 0x8ee201a0, 0x8021, 0x24420001, 0xaee201a0,
-0x8001a7c, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490, 0x8ee50494,
-0x2462001c, 0xac620008, 0xa46d000e, 0xac6c0018, 0xac640000, 0xac650004,
-0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400033, 0x24100001,
-0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000, 0x1448001f,
-0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0, 0x8c820004,
-0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001, 0x10470007,
-0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0, 0x8001a69,
-0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020, 0xaf820128,
-0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000, 0x8001a7c,
-0x0, 0x8ee24e20, 0x24420001, 0x50470003, 0x1021, 0x8ee24e20,
-0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021,
-0xac880000, 0xac8a0004, 0x56000006, 0x240b0001, 0x8f820054, 0x1221023,
-0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001, 0x10620022,
-0x0, 0x3c040001, 0x24844664, 0xafa00010, 0xafa00014, 0x8f860120,
-0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011, 0x8001aa8, 0x0,
-0x3c040001, 0x24844670, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009,
-0xc002403, 0x34a5f010, 0x8001aa8, 0x0, 0x3c040001, 0x2484467c,
-0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009, 0xc002403, 0x34a5f00f,
-0x8ee201a8, 0x24420001, 0xaee201a8, 0x8ee201a8, 0x8ee20158, 0x24420001,
-0xaee20158, 0x8ee20158, 0x8ee204c4, 0x30420001, 0x10400055, 0x0,
-0x8f420218, 0x30420080, 0x10400029, 0x0, 0x8f820044, 0x34420040,
-0xaf820044, 0x8ee27b6c, 0x402821, 0x8ee200c0, 0x8ee300c4, 0x24060000,
-0x2407ffff, 0x2021, 0x461024, 0x1444000d, 0x671824, 0x1465000b,
-0x0, 0x8ee27b70, 0x402821, 0x8ee200e0, 0x8ee300e4, 0x2021,
-0x461024, 0x14440003, 0x671824, 0x1065000b, 0x0, 0x8ee200c0,
-0x8ee300c4, 0x8ee400e0, 0x8ee500e4, 0xaee37b6c, 0xaee57b70, 0x8f820044,
-0x38420020, 0x8001b33, 0xaf820044, 0x8f820044, 0x2403ffdf, 0x431024,
-0x8001b33, 0xaf820044, 0x8f820044, 0x2403ffdf, 0x431024, 0xaf820044,
-0x8ee27b6c, 0x402821, 0x8ee200c0, 0x8ee300c4, 0x24060000, 0x2407ffff,
-0x2021, 0x461024, 0x1444000d, 0x671824, 0x1465000b, 0x0,
-0x8ee27b70, 0x402821, 0x8ee200e0, 0x8ee300e4, 0x2021, 0x461024,
-0x14440003, 0x671824, 0x1065000b, 0x0, 0x8ee200c0, 0x8ee300c4,
-0x8ee400e0, 0x8ee500e4, 0xaee37b6c, 0xaee57b70, 0x8f820044, 0x38420040,
-0x8001b33, 0xaf820044, 0x8f820044, 0x34420040, 0x8001b33, 0xaf820044,
-0x8f820044, 0x34420040, 0xaf820044, 0x8ee27b7c, 0x24430001, 0x28420015,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 16'
echo 'File patch-2.2.4 is continued in part 17'
echo 17 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 21 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 21; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+0xc2102b, 0x50400001, 0x27662800, 0x8f820108,
+0x10c20004, 0x0, 0x8f820104, 0x14c20007,
+0x2563000c, 0x8ee201a8, 0x4821, 0x24420001,
+0xaee201a8, 0x8002853, 0x8ee201a8, 0x2c64000c,
+0x1441021, 0xaca20000, 0xaca30004, 0x8ee37264,
+0x24e2fff4, 0xa4a2000e, 0x24020006, 0xaca20018,
+0x24630010, 0xaca30008, 0x8ee204e4, 0xaca2001c,
+0x8ee204c8, 0x3c030002, 0x431025, 0xaca20010,
+0xaf860100, 0x92e204ec, 0x14400037, 0x24090001,
+0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021,
+0x8c830000, 0x24020005, 0x1462001f, 0x0,
+0x8ee34e28, 0x8ee24e2c, 0x1062001b, 0x24030040,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e2c,
+0x8ee54e28, 0x24420001, 0x10430007, 0x0,
+0x8ee24e2c, 0x24420001, 0x10a20005, 0x0,
+0x800283d, 0x0, 0x14a00005, 0x0,
+0x8f820108, 0x24420020, 0xaf820108, 0x8f820108,
+0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
+0x8002853, 0x0, 0x8ee24e28, 0x24030040,
+0x24420001, 0x50430003, 0x1021, 0x8ee24e28,
+0x24420001, 0xaee24e28, 0x8ee24e28, 0x210c0,
+0x24424e38, 0x2e22021, 0x24020005, 0xac820000,
+0x24020001, 0xac820004, 0x1520000a, 0x34028100,
+0xafab0010, 0x8ee27264, 0x3c040001, 0x24844f00,
+0x3c050004, 0xafa20014, 0x8ee604e4, 0x80028c2,
+0x34a5f016, 0x8ee37264, 0xa462000c, 0x8ee37264,
+0x9582000e, 0xa462000e, 0x80028c6, 0x24e70004,
+0x8f830100, 0x27623000, 0x24640020, 0x82102b,
+0x50400001, 0x27642800, 0x8f820108, 0x10820004,
+0x0, 0x8f820104, 0x14820007, 0x24050005,
+0x8ee201a8, 0x4821, 0x24420001, 0xaee201a8,
+0x80028ba, 0x8ee201a8, 0xac6a0000, 0xac6b0004,
+0x8ee27264, 0xa467000e, 0xac650018, 0xac620008,
+0x8ee204e4, 0xac62001c, 0x8ee204c8, 0xac620010,
+0xaf840100, 0x92e204ec, 0x14400036, 0x24090001,
+0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021,
+0x8c820000, 0x1445001f, 0x0, 0x8ee34e28,
+0x8ee24e2c, 0x1062001b, 0x24030040, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e2c, 0x8ee54e28,
+0x24420001, 0x10430007, 0x0, 0x8ee24e2c,
+0x24420001, 0x10a20005, 0x0, 0x80028a4,
+0x0, 0x14a00005, 0x0, 0x8f820108,
+0x24420020, 0xaf820108, 0x8f820108, 0x8c820004,
+0x2c420011, 0x50400013, 0xac800000, 0x80028ba,
+0x0, 0x8ee24e28, 0x24030040, 0x24420001,
+0x50430003, 0x1021, 0x8ee24e28, 0x24420001,
+0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38,
+0x2e22021, 0x24020005, 0xac820000, 0x24020001,
+0xac820004, 0x1520000b, 0x3c050004, 0x3c040001,
+0x24844f18, 0xafab0010, 0xafa00014, 0x8ee604e4,
+0x34a5f017, 0xc002407, 0x30e7ffff, 0x80028e5,
+0x0, 0x8ee27264, 0x3c050001, 0x30e4ffff,
+0x441021, 0xaee27264, 0x8ee2725c, 0x8ee37264,
+0x34a53800, 0x441021, 0xaee2725c, 0x3651021,
+0x62182b, 0x14600004, 0x3c03ffff, 0x8ee27264,
+0x431021, 0xaee27264, 0x8ee304e4, 0x96e20458,
+0x24630001, 0x2442ffff, 0x621824, 0xaee304e4,
+0x8ee304e4, 0x8ee204e0, 0x14620005, 0x0,
+0x8f820060, 0x2403fff7, 0x431024, 0xaf820060,
+0x8fbf0020, 0x3e00008, 0x27bd0028, 0x27bdffe0,
+0xafbf0018, 0x8ee304e8, 0x8ee204e0, 0x10620189,
+0x0, 0x8ee204e8, 0x8ee304fc, 0x21100,
+0x621821, 0x94670008, 0x92e204ed, 0x8c680000,
+0x8c690004, 0x10400023, 0x946a000a, 0x8ee204c8,
+0x34460400, 0x31420200, 0x1040001f, 0x0,
+0x96e2045a, 0x30420010, 0x1040001b, 0x3c028000,
+0x3c010001, 0x370821, 0xac2283d8, 0x8ee27264,
+0x9464000e, 0x3c050001, 0x34a53800, 0x24420004,
+0xaee27264, 0x8ee37264, 0x42400, 0x3651021,
+0x3c010001, 0x370821, 0xac2483dc, 0x62182b,
+0x14600005, 0x24e70004, 0x8ee27264, 0x3c03ffff,
+0x431021, 0xaee27264, 0x8ee27264, 0x800291b,
+0xaee27258, 0x8ee604c8, 0x8ee2726c, 0x30e4ffff,
+0x44102a, 0x10400015, 0x0, 0x8f8200d8,
+0x8ee37258, 0x431023, 0xaee2726c, 0x8ee2726c,
+0x1c400007, 0x44102a, 0x8ee2726c, 0x3c030001,
+0x431021, 0xaee2726c, 0x8ee2726c, 0x44102a,
+0x10400006, 0x0, 0x8ee201b8, 0x24420001,
+0xaee201b8, 0x8002a76, 0x8ee201b8, 0x3c020001,
+0x571021, 0x8c4283d8, 0x54400001, 0x24e7fffc,
+0x31420004, 0x104000b9, 0x30e2ffff, 0x3c020001,
+0x571021, 0x8c4283d8, 0x1040002f, 0x5021,
+0x8f840100, 0x27623000, 0x24850020, 0xa2102b,
+0x50400001, 0x27652800, 0x8f820108, 0x10a20032,
+0x0, 0x8f820104, 0x10a2002f, 0x24020015,
+0xac880000, 0xac890004, 0x8ee37264, 0xa487000e,
+0xac820018, 0xac830008, 0x8ee204e8, 0x3c030001,
+0x771821, 0x8c6383dc, 0xac860010, 0x431025,
+0xac82001c, 0xaf850100, 0x92e204ec, 0x14400066,
+0x240a0001, 0x8ee24e28, 0x24030040, 0x24420001,
+0x50430003, 0x1021, 0x8ee24e28, 0x24420001,
+0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38,
+0x2e21821, 0x24020015, 0xac620000, 0x24020001,
+0x80029c3, 0xac620004, 0x8f840100, 0x27623000,
+0x24850020, 0xa2102b, 0x50400001, 0x27652800,
+0x8f820108, 0x10a20004, 0x0, 0x8f820104,
+0x14a20006, 0x24020006, 0x8ee201a8, 0x24420001,
+0xaee201a8, 0x80029c3, 0x8ee201a8, 0xac880000,
+0xac890004, 0x8ee37264, 0xa487000e, 0xac820018,
+0xac830008, 0x8ee204e8, 0xac860010, 0xac82001c,
+0xaf850100, 0x92e204ec, 0x14400037, 0x240a0001,
+0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021,
+0x8c830000, 0x24020005, 0x1462001f, 0x0,
+0x8ee34e28, 0x8ee24e2c, 0x1062001b, 0x24030040,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e2c,
+0x8ee54e28, 0x24420001, 0x10430007, 0x0,
+0x8ee24e2c, 0x24420001, 0x10a20005, 0x0,
+0x80029ad, 0x0, 0x14a00005, 0x0,
+0x8f820108, 0x24420020, 0xaf820108, 0x8f820108,
+0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
+0x80029c3, 0x0, 0x8ee24e28, 0x24030040,
+0x24420001, 0x50430003, 0x1021, 0x8ee24e28,
+0x24420001, 0xaee24e28, 0x8ee24e28, 0x210c0,
+0x24424e38, 0x2e22021, 0x24020005, 0xac820000,
+0x24020001, 0xac820004, 0x1540000a, 0x24020001,
+0xafa90010, 0x8ee27264, 0x3c040001, 0x24844f00,
+0x3c050004, 0xafa20014, 0x8ee604e4, 0x8002a53,
+0x34a5f204, 0xa2e204ed, 0x8ee204e8, 0x8ee304fc,
+0x8ee47258, 0x3c060001, 0x34c63800, 0x3c010001,
+0x370821, 0xac2083d8, 0x3c010001, 0x370821,
+0xac2083dc, 0x21100, 0x431021, 0xac44000c,
+0x8ee27264, 0x2405fff8, 0x30e3ffff, 0x431021,
+0x24420007, 0x451024, 0x24630007, 0xaee27258,
+0x8ee2726c, 0x8ee47258, 0x651824, 0x431023,
+0xaee2726c, 0x3661021, 0x82202b, 0x14800004,
+0x3c03ffff, 0x8ee27258, 0x431021, 0xaee27258,
+0x8ee27258, 0x8002a68, 0xaee27264, 0x10400073,
+0x0, 0x8f830100, 0x27623000, 0x24640020,
+0x82102b, 0x14400002, 0x5021, 0x27642800,
+0x8f820108, 0x10820004, 0x0, 0x8f820104,
+0x14820006, 0x24050005, 0x8ee201a8, 0x24420001,
+0xaee201a8, 0x8002a4a, 0x8ee201a8, 0xac680000,
+0xac690004, 0x8ee27264, 0xa467000e, 0xac650018,
+0xac620008, 0x8ee204e8, 0xac660010, 0xac62001c,
+0xaf840100, 0x92e204ec, 0x14400036, 0x240a0001,
+0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021,
+0x8c820000, 0x1445001f, 0x0, 0x8ee34e28,
+0x8ee24e2c, 0x1062001b, 0x24030040, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e2c, 0x8ee54e28,
+0x24420001, 0x10430007, 0x0, 0x8ee24e2c,
+0x24420001, 0x10a20005, 0x0, 0x8002a34,
+0x0, 0x14a00005, 0x0, 0x8f820108,
+0x24420020, 0xaf820108, 0x8f820108, 0x8c820004,
+0x2c420011, 0x50400013, 0xac800000, 0x8002a4a,
+0x0, 0x8ee24e28, 0x24030040, 0x24420001,
+0x50430003, 0x1021, 0x8ee24e28, 0x24420001,
+0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38,
+0x2e22021, 0x24020005, 0xac820000, 0x24020001,
+0xac820004, 0x1540000c, 0x30e5ffff, 0x3c040001,
+0x24844f18, 0x3c050004, 0xafa90010, 0xafa00014,
+0x8ee604e4, 0x34a5f237, 0xc002407, 0x30e7ffff,
+0x8002a76, 0x0, 0x8ee27264, 0x451021,
+0xaee27264, 0x8ee2726c, 0x8ee37264, 0x3c040001,
+0x34843800, 0xa2e004ed, 0x451023, 0xaee2726c,
+0x3641021, 0x62182b, 0x14600004, 0x3c03ffff,
+0x8ee27264, 0x431021, 0xaee27264, 0x8ee304e8,
+0x96e20458, 0x24630001, 0x2442ffff, 0x621824,
+0xaee304e8, 0x8ee304e8, 0x8ee204e0, 0x14620005,
+0x0, 0x8f820060, 0x2403fff7, 0x431024,
+0xaf820060, 0x8fbf0018, 0x3e00008, 0x27bd0020,
+0x27bdffe0, 0xafbf001c, 0xafb00018, 0x8f820100,
+0x8ee34e2c, 0x8f820104, 0x8f850108, 0x24020040,
+0x24630001, 0x50620003, 0x1021, 0x8ee24e2c,
+0x24420001, 0xaee24e2c, 0x8ee24e2c, 0x8ee34e2c,
+0x210c0, 0x24424e38, 0x2e22021, 0x8ee24e28,
+0x8c870004, 0x14620007, 0xa03021, 0x8f820108,
+0x24420020, 0xaf820108, 0x8f820108, 0x8002aa6,
+0xac800000, 0x8ee24e2c, 0x24030040, 0x24420001,
+0x50430003, 0x1021, 0x8ee24e2c, 0x24420001,
+0x210c0, 0x24424e38, 0x2e22021, 0x8c820004,
+0x8f830108, 0x21140, 0x621821, 0xaf830108,
+0xac800000, 0x8cc20018, 0x2443fffe, 0x2c620013,
+0x104000c1, 0x31080, 0x3c010001, 0x220821,
+0x8c224f40, 0x400008, 0x0, 0x8ee204f0,
+0x471021, 0xaee204f0, 0x8ee204f0, 0x8f43023c,
+0x43102b, 0x144000be, 0x0, 0x8ee304e4,
+0x8ee204f8, 0x506200ba, 0xa2e004f4, 0x8f830120,
+0x27623800, 0x24660020, 0xc2102b, 0x50400001,
+0x27663000, 0x8f820128, 0x10c20004, 0x0,
+0x8f820124, 0x14c20007, 0x0, 0x8ee201a4,
+0x8021, 0x24420001, 0xaee201a4, 0x8002b16,
+0x8ee201a4, 0x8ee204e4, 0xac62001c, 0x8ee404b0,
+0x8ee504b4, 0x2462001c, 0xac620008, 0x24020008,
+0xa462000e, 0x24020011, 0xac620018, 0xac640000,
+0xac650004, 0x8ee204c4, 0xac620010, 0xaf860120,
+0x92e24e20, 0x14400037, 0x24100001, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x8c830000,
+0x24020012, 0x1462001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x24030040, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee54e30,
+0x24420001, 0x10430007, 0x0, 0x8ee24e34,
+0x24420001, 0x10a20005, 0x0, 0x8002b00,
+0x0, 0x14a00005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400013, 0xac800000, 0x8002b16,
+0x0, 0x8ee24e30, 0x24030040, 0x24420001,
+0x50430003, 0x1021, 0x8ee24e30, 0x24420001,
+0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x24020012, 0xac820000, 0x24020001,
+0xac820004, 0x5600000b, 0x24100001, 0x8ee204e4,
+0x3c040001, 0x24844f24, 0xafa00014, 0xafa20010,
+0x8ee60608, 0x8f470228, 0x3c050009, 0xc002407,
+0x34a5f006, 0x16000003, 0x24020001, 0x8002b75,
+0xa2e204f4, 0x8ee20170, 0x24420001, 0xaee20170,
+0x8ee20170, 0x8ee204e4, 0xa2e004f4, 0xaee004f0,
+0xaee204f8, 0x8f42023c, 0x50400045, 0xaee07274,
+0x8ee20184, 0x24420001, 0xaee20184, 0x8ee20184,
+0x8002b75, 0xaee07274, 0x8ee20504, 0x24030040,
+0x24420001, 0x50430003, 0x1021, 0x8ee20504,
+0x24420001, 0xaee20504, 0x8ee20504, 0x8cc30018,
+0x21080, 0x571021, 0x8c440508, 0x24020003,
+0x1462000f, 0x0, 0x3c020001, 0x571021,
+0x904283b1, 0x10400014, 0x0, 0x8ee201d0,
+0x8ee35240, 0x441021, 0xaee201d0, 0x8ee201d8,
+0x641821, 0x306300ff, 0x8002b5d, 0xaee35240,
+0x8ee201cc, 0x8ee30e10, 0x441021, 0xaee201cc,
+0x8ee201d8, 0x641821, 0x306301ff, 0xaee30e10,
+0x441021, 0xaee201d8, 0x8ee20000, 0x34420040,
+0x8002b75, 0xaee20000, 0x8ee2014c, 0x3c010001,
+0x370821, 0xa02083e0, 0x24420001, 0xaee2014c,
+0x8002b75, 0x8ee2014c, 0x94c7000e, 0x8cc2001c,
+0x3c040001, 0x24844f30, 0xafa60014, 0xafa20010,
+0x8cc60018, 0x3c050008, 0xc002407, 0x34a50910,
+0x8fbf001c, 0x8fb00018, 0x3e00008, 0x27bd0020,
+0x27bdff98, 0xafbf0060, 0xafbe005c, 0xafb60058,
+0xafb50054, 0xafb40050, 0xafb3004c, 0xafb20048,
+0xafb10044, 0xafb00040, 0x8f830108, 0x8f820104,
+0xafa00024, 0x106203e7, 0xafa0002c, 0x3c1e0001,
+0x37de3800, 0x3c0bffff, 0x8f930108, 0x8e620018,
+0x8f830104, 0x2443fffe, 0x2c620014, 0x104003cf,
+0x31080, 0x3c010001, 0x220821, 0x8c224f90,
+0x400008, 0x0, 0x9663000e, 0x8ee2725c,
+0x8ee404f0, 0x431021, 0xaee2725c, 0x8e63001c,
+0x96e20458, 0x24840001, 0xaee404f0, 0x24630001,
+0x2442ffff, 0x621824, 0xaee304e4, 0x8f42023c,
+0x82202b, 0x148003b9, 0x0, 0x8f830120,
+0x27623800, 0x24660020, 0xc2102b, 0x50400001,
+0x27663000, 0x8f820128, 0x10c20004, 0x0,
+0x8f820124, 0x14c20007, 0x0, 0x8ee201a4,
+0x8021, 0x24420001, 0xaee201a4, 0x8002c02,
+0x8ee201a4, 0x8ee204e4, 0xac62001c, 0x8ee404b0,
+0x8ee504b4, 0x2462001c, 0xac620008, 0x24020008,
+0xa462000e, 0x24020011, 0xac620018, 0xac640000,
+0xac650004, 0x8ee204c4, 0xac620010, 0xaf860120,
+0x92e24e20, 0x14400037, 0x24100001, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x8c830000,
+0x24020012, 0x1462001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x240c0040, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30,
+0x24420001, 0x104c0007, 0x0, 0x8ee24e34,
+0x24420001, 0x10620005, 0x0, 0x8002bec,
+0x0, 0x14600005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400013, 0xac800000, 0x8002c02,
+0x0, 0x8ee24e30, 0x240c0040, 0x24420001,
+0x504c0003, 0x1021, 0x8ee24e30, 0x24420001,
+0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x24020012, 0x240c0001, 0xac820000,
+0xac8c0004, 0x5600000d, 0x24100001, 0x8ee204e4,
+0x3c040001, 0x24844f24, 0xafa00014, 0xafa20010,
+0x8ee60608, 0x8f470228, 0x3c050009, 0x34a5f006,
+0xc002407, 0xafab0038, 0x8fab0038, 0x1200030a,
+0x240c0001, 0x8002f1d, 0x0, 0x966c001c,
+0xafac002c, 0x9662001e, 0x3c0c8000, 0xafac0024,
+0xae62001c, 0x8e75001c, 0x8ee204fc, 0x8ee404fc,
+0x151900, 0x621021, 0x8c52000c, 0x92e27b98,
+0x641821, 0x9476000a, 0x14400003, 0x32c20002,
+0xaef27ba4, 0xaef57b9c, 0x1040004b, 0x8021,
+0x96e2045a, 0x30420002, 0x10400047, 0x0,
+0x8e63001c, 0x8ee204fc, 0x32100, 0x821021,
+0x8c42000c, 0x37e1821, 0x24420022, 0x43102b,
+0x1440000a, 0x24050014, 0x8ee204fc, 0x821021,
+0x8c44000c, 0xafab0038, 0xc002f79, 0x2484000e,
+0x8fab0038, 0x8002c56, 0x3050ffff, 0x8ee204fc,
+0x821021, 0x8c42000c, 0x9450000e, 0x94430010,
+0x94440012, 0x94450014, 0x2038021, 0x2048021,
+0x2058021, 0x94430016, 0x94440018, 0x9445001a,
+0x2038021, 0x2048021, 0x2058021, 0x9443001c,
+0x9444001e, 0x94420020, 0x2038021, 0x2048021,
+0x2028021, 0x101c02, 0x3202ffff, 0x628021,
+0x8e63001c, 0x8ee204fc, 0x102402, 0x32900,
+0xa21021, 0x8c43000c, 0x3202ffff, 0x828021,
+0x37e1021, 0x24630018, 0x62182b, 0x14600009,
+0x0, 0x8ee204fc, 0xa21021, 0x8c43000c,
+0x101027, 0x3c01ffff, 0x230821, 0x8002c73,
+0xa4220018, 0x8ee204fc, 0xa21021, 0x8c43000c,
+0x101027, 0xa4620018, 0x96e2045a, 0x8821,
+0x30420008, 0x14400063, 0xa021, 0x8e63001c,
+0x8ee204fc, 0x33100, 0xc21021, 0x8c42000c,
+0x37e1821, 0x24420022, 0x43102b, 0x14400035,
+0x0, 0x8ee204fc, 0xc21021, 0x8c42000c,
+0x24470010, 0x37e1021, 0xe2102b, 0x50400001,
+0xeb3821, 0x8ee204fc, 0x94f10000, 0xc21021,
+0x8c42000c, 0x24470016, 0x37e1021, 0xe2102b,
+0x14400002, 0x2634ffec, 0xeb3821, 0x8ee204fc,
+0x90e30001, 0xc21021, 0x8c42000c, 0x2447001a,
+0x37e1021, 0xe2102b, 0x14400002, 0x2838821,
+0xeb3821, 0x94e20000, 0x24e70002, 0x2228821,
+0x37e1021, 0xe2102b, 0x50400001, 0xeb3821,
+0x94e20000, 0x24e70002, 0x2228821, 0x37e1021,
+0xe2102b, 0x50400001, 0xeb3821, 0x94e20000,
+0x24e70002, 0x2228821, 0x37e1021, 0xe2102b,
+0x50400001, 0xeb3821, 0x94e20000, 0x8002cd4,
+0x2228821, 0x8ee204fc, 0xc21021, 0x8c43000c,
+0x8ee204fc, 0x94710010, 0x8ee304fc, 0xc21021,
+0x8c44000c, 0xc31821, 0x8c62000c, 0x2634ffec,
+0x90840017, 0x8ee304fc, 0x9442001a, 0x2848821,
+0xc31821, 0x8c65000c, 0x8ee304fc, 0x2228821,
+0x8ee204fc, 0xc31821, 0xc21021, 0x8c44000c,
+0x8c62000c, 0x94a3001c, 0x9484001e, 0x94420020,
+0x2238821, 0x2248821, 0x2228821, 0x111c02,
+0x3222ffff, 0x628821, 0x111c02, 0x3222ffff,
+0x628821, 0x32c20001, 0x104000b2, 0x0,
+0x96e2045a, 0x30420001, 0x104000ae, 0x32c20080,
+0x10400008, 0x0, 0x92e27b98, 0x14400005,
+0x0, 0x240c0001, 0xa2ec7b98, 0xaef57b9c,
+0xaef27ba4, 0x8ee304fc, 0x151100, 0x431021,
+0x8c47000c, 0x37e1821, 0x24e2000e, 0x43102b,
+0x14400008, 0xe02021, 0x2405000e, 0xc002f79,
+0xafab0038, 0x3042ffff, 0x8fab0038, 0x8002d0d,
+0x2028021, 0x94e60000, 0x24e70002, 0x94e50000,
+0x24e70002, 0x94e30000, 0x24e70002, 0x94e20000,
+0x24e70002, 0x94e40000, 0x24e70002, 0x2068021,
+0x2058021, 0x2038021, 0x2028021, 0x94e20000,
+0x94e30002, 0x2048021, 0x2028021, 0x2038021,
+0x101c02, 0x3202ffff, 0x628021, 0x101c02,
+0x3202ffff, 0x8ee47b9c, 0x628021, 0x14950004,
+0x3205ffff, 0x96620016, 0x8002d1b, 0x512021,
+0x96620016, 0x542021, 0x41402, 0x3083ffff,
+0x432021, 0x852023, 0x41402, 0x822021,
+0x3084ffff, 0x50800001, 0x3404ffff, 0x8ee27ba4,
+0x24430017, 0x37e1021, 0x62102b, 0x50400001,
+0x6b1821, 0x90630000, 0x24020011, 0x14620031,
+0x24020006, 0x8ee27ba4, 0x37e1821, 0x24420028,
+0x43102b, 0x14400018, 0x0, 0x8ee27b9c,
+0x12a2000a, 0x32c20100, 0x8ee27ba4, 0x3c01ffff,
+0x220821, 0x94220028, 0x822021, 0x41c02,
+0x3082ffff, 0x622021, 0x32c20100, 0x14400004,
+0x41027, 0x92e27b98, 0x14400002, 0x41027,
+0x3044ffff, 0x8ee27ba4, 0x3c01ffff, 0x220821,
+0x8002d8e, 0xa4240028, 0x8ee27b9c, 0x12a20008,
+0x32c20100, 0x8ee27ba4, 0x94420028, 0x822021,
+0x41c02, 0x3082ffff, 0x622021, 0x32c20100,
+0x14400004, 0x41027, 0x92e27b98, 0x14400002,
+0x41027, 0x3044ffff, 0x8ee27ba4, 0x8002d8e,
+0xa4440028, 0x1462002f, 0x37e1821, 0x8ee27ba4,
+0x24420032, 0x43102b, 0x14400018, 0x0,
+0x8ee27b9c, 0x12a2000a, 0x32c20100, 0x8ee27ba4,
+0x3c01ffff, 0x220821, 0x94220032, 0x822021,
+0x41c02, 0x3082ffff, 0x622021, 0x32c20100,
+0x14400004, 0x41027, 0x92e27b98, 0x14400002,
+0x41027, 0x3044ffff, 0x8ee27ba4, 0x3c01ffff,
+0x220821, 0x8002d8e, 0xa4240032, 0x8ee27b9c,
+0x12a20008, 0x32c20100, 0x8ee27ba4, 0x94420032,
+0x822021, 0x41c02, 0x3082ffff, 0x622021,
+0x32c20100, 0x14400004, 0x41027, 0x92e27b98,
+0x14400002, 0x41027, 0x3044ffff, 0x8ee27ba4,
+0xa4440032, 0x8fac0024, 0x1180002c, 0x37e1821,
+0x8e420000, 0xae42fffc, 0x2642000a, 0x43102b,
+0x1440001b, 0x34038100, 0x26430004, 0x37e1021,
+0x62102b, 0x14400003, 0x602021, 0x6b1821,
+0x602021, 0x8c620000, 0x24630004, 0xae420000,
+0x37e1021, 0x62102b, 0x50400001, 0x6b1821,
+0x8c620000, 0xac820000, 0x34028100, 0xa4620000,
+0x24630002, 0x37e1021, 0x62102b, 0x50400001,
+0x6b1821, 0x97ac002e, 0x8002db8, 0xa46c0000,
+0x8e420004, 0x8e440008, 0xa6430008, 0x97ac002e,
+0xa64c000a, 0xae420000, 0xae440004, 0x9662000e,
+0x2652fffc, 0x24420004, 0xa662000e, 0x9662000e,
+0x8ee3725c, 0x621821, 0xaee3725c, 0xafb20018,
+0x8ee3725c, 0xafa3001c, 0x8ee2725c, 0x2c42003c,
+0x10400004, 0x24620001, 0x2403fffe, 0x431024,
+0xafa2001c, 0x32c20080, 0x1040000c, 0x32c20100,
+0x8ee27ba8, 0x24430001, 0x210c0, 0x571021,
+0xaee37ba8, 0x8fa30018, 0x8fa4001c, 0xac437bac,
+0xac447bb0, 0x8002ea4, 0xaee0725c, 0x10400072,
+0x0, 0x8ee27ba8, 0x24430001, 0x210c0,
+0x571021, 0xaee37ba8, 0x8fa30018, 0x8fa4001c,
+0xac437bac, 0xac447bb0, 0x8ee27ba8, 0x10400063,
+0x4821, 0x5021, 0x8f8200f0, 0x24480008,
+0x27621800, 0x102102b, 0x50400001, 0x27681000,
+0x8f8200f4, 0x15020007, 0x0, 0x8ee201b4,
+0x8021, 0x24420001, 0xaee201b4, 0x8002dfe,
+0x8ee201b4, 0x8f8300f0, 0x24100001, 0x1571021,
+0x8c447bac, 0x8c457bb0, 0xac640000, 0xac650004,
+0xaf8800f0, 0x16000006, 0x2ea1021, 0x8ee20088,
+0x24420001, 0xaee20088, 0x8002e43, 0x8ee20088,
+0x8c427bb0, 0x8ee400e0, 0x8ee500e4, 0x8ee67b9c,
+0x401821, 0x1021, 0xa32821, 0xa3382b,
+0x822021, 0x872021, 0x8ee204fc, 0xc93021,
+0x63100, 0xaee400e0, 0xaee500e4, 0xc23021,
+0x94c2000a, 0x240c0002, 0x21142, 0x30430003,
+0x106c0016, 0x28620003, 0x10400005, 0x240c0001,
+0x106c0008, 0x0, 0x8002e43, 0x0,
+0x240c0003, 0x106c0017, 0x0, 0x8002e43,
+0x0, 0x8ee200e8, 0x8ee300ec, 0x24630001,
+0x2c640001, 0x441021, 0xaee200e8, 0xaee300ec,
+0x8ee200e8, 0x8002e43, 0x8ee300ec, 0x8ee200f0,
+0x8ee300f4, 0x24630001, 0x2c640001, 0x441021,
+0xaee200f0, 0xaee300f4, 0x8ee200f0, 0x8002e43,
+0x8ee300f4, 0x8ee200f8, 0x8ee300fc, 0x24630001,
+0x2c640001, 0x441021, 0xaee200f8, 0xaee300fc,
+0x8ee200f8, 0x8ee300fc, 0x8ee27ba8, 0x25290001,
+0x122102b, 0x1440ffa0, 0x254a0008, 0xa2e07b98,
+0x8002ea3, 0xaee07ba8, 0x8f8200f0, 0x24470008,
+0x27621800, 0xe2102b, 0x50400001, 0x27671000,
+0x8f8200f4, 0x14e20007, 0x0, 0x8ee201b4,
+0x8021, 0x24420001, 0xaee201b4, 0x8002e61,
+0x8ee201b4, 0x8f8200f0, 0x24100001, 0x8fa30018,
+0x8fa4001c, 0xac430000, 0xac440004, 0xaf8700f0,
+0x16000007, 0x0, 0x8ee20088, 0x24420001,
+0xaee20088, 0x8ee20088, 0x8002ea4, 0xaee0725c,
+0x8ee2725c, 0x8ee400e0, 0x8ee500e4, 0x240c0002,
+0x401821, 0x1021, 0xa32821, 0xa3302b,
+0x822021, 0x862021, 0x161142, 0x30430003,
+0xaee400e0, 0xaee500e4, 0x106c0017, 0x2c620003,
+0x10400005, 0x240c0001, 0x106c0008, 0x0,
+0x8002ea4, 0xaee0725c, 0x240c0003, 0x106c0019,
+0x0, 0x8002ea4, 0xaee0725c, 0x8ee200e8,
+0x8ee300ec, 0x24630001, 0x2c640001, 0x441021,
+0xaee200e8, 0xaee300ec, 0x8ee200e8, 0x8ee300ec,
+0x8002ea4, 0xaee0725c, 0x8ee200f0, 0x8ee300f4,
+0x24630001, 0x2c640001, 0x441021, 0xaee200f0,
+0xaee300f4, 0x8ee200f0, 0x8ee300f4, 0x8002ea4,
+0xaee0725c, 0x8ee200f8, 0x8ee300fc, 0x24630001,
+0x2c640001, 0x441021, 0xaee200f8, 0xaee300fc,
+0x8ee200f8, 0x8ee300fc, 0xaee0725c, 0x8e62001c,
+0x96e30458, 0x8ee404f0, 0x24420001, 0x2463ffff,
+0x431024, 0x24840001, 0xaee204e4, 0xaee404f0,
+0x8f42023c, 0x82202b, 0x148000b0, 0x0,
+0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
+0x50400001, 0x27663000, 0x8f820128, 0x10c20004,
+0x0, 0x8f820124, 0x14c20007, 0x0,
+0x8ee201a4, 0x8021, 0x24420001, 0xaee201a4,
+0x8002f0b, 0x8ee201a4, 0x8ee204e4, 0xac62001c,
+0x8ee404b0, 0x8ee504b4, 0x2462001c, 0xac620008,
+0x24020008, 0xa462000e, 0x24020011, 0xac620018,
+0xac640000, 0xac650004, 0x8ee204c4, 0xac620010,
+0xaf860120, 0x92e24e20, 0x14400037, 0x24100001,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c830000, 0x24020012, 0x1462001f, 0x0,
+0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x240c0040,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34,
+0x8ee34e30, 0x24420001, 0x104c0007, 0x0,
+0x8ee24e34, 0x24420001, 0x10620005, 0x0,
+0x8002ef5, 0x0, 0x14600005, 0x0,
+0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
+0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
+0x8002f0b, 0x0, 0x8ee24e30, 0x240c0040,
+0x24420001, 0x504c0003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x24020012, 0x240c0001,
+0xac820000, 0xac8c0004, 0x5600000d, 0x24100001,
+0x8ee204e4, 0x3c040001, 0x24844f24, 0xafa00014,
+0xafa20010, 0x8ee60608, 0x8f470228, 0x3c050009,
+0x34a5f006, 0xc002407, 0xafab0038, 0x8fab0038,
+0x16000003, 0x240c0001, 0x8002f60, 0xa2ec04f4,
+0x8ee20170, 0x24420001, 0xaee20170, 0x8ee20170,
+0x8ee204e4, 0xa2e004f4, 0xaee004f0, 0xaee07274,
+0xaee204f8, 0x8f42023c, 0x10400038, 0x0,
+0x8ee20184, 0x24420001, 0xaee20184, 0x8002f60,
+0x8ee20184, 0x8ee20504, 0x240c0040, 0x24420001,
+0x504c0003, 0x1021, 0x8ee20504, 0x24420001,
+0xaee20504, 0x8ee20504, 0x8e630018, 0x240c0003,
+0x21080, 0x571021, 0x146c000f, 0x8c440508,
+0x3c020001, 0x571021, 0x904283b1, 0x10400014,
+0x0, 0x8ee201d0, 0x8ee35240, 0x441021,
+0xaee201d0, 0x8ee201d8, 0x641821, 0x306300ff,
+0x8002f53, 0xaee35240, 0x8ee201cc, 0x8ee30e10,
+0x441021, 0xaee201cc, 0x8ee201d8, 0x641821,
+0x306301ff, 0xaee30e10, 0x441021, 0xaee201d8,
+0x8ee20000, 0x34420040, 0x8002f60, 0xaee20000,
+0x8ee2014c, 0x3c010001, 0x370821, 0xa02083e0,
+0x24420001, 0xaee2014c, 0x8ee2014c, 0x8f820108,
+0x24420020, 0xaf820108, 0x8f820108, 0x8f820108,
+0x27633000, 0x43102b, 0x14400002, 0x27622800,
+0xaf820108, 0x8f830108, 0x8f820104, 0x1462fc1e,
+0x0, 0x8fbf0060, 0x8fbe005c, 0x8fb60058,
+0x8fb50054, 0x8fb40050, 0x8fb3004c, 0x8fb20048,
+0x8fb10044, 0x8fb00040, 0x3e00008, 0x27bd0068,
+0x52843, 0x10a0000d, 0x3021, 0x3c030001,
+0x34633800, 0x3c07ffff, 0x3631021, 0x82102b,
+0x50400001, 0x872021, 0x94820000, 0x24840002,
+0x24a5ffff, 0x14a0fff8, 0xc23021, 0x61c02,
+0x30c2ffff, 0x623021, 0x61c02, 0x30c2ffff,
+0x623021, 0x3e00008, 0x30c2ffff, 0x27bdff88,
+0x240f0001, 0xafbf0070, 0xafbe006c, 0xafb60068,
+0xafb50064, 0xafb40060, 0xafb3005c, 0xafb20058,
+0xafb10054, 0xafb00050, 0xa3a00027, 0xafaf002c,
+0x8ee204d4, 0x8021, 0x30420001, 0x1440002a,
+0xa3a00037, 0x8f8700e0, 0x8f8800c4, 0x8f8200e8,
+0xe22023, 0x2c821000, 0x50400001, 0x24841000,
+0x420c2, 0x801821, 0x8ee400c8, 0x8ee500cc,
+0x1021, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xaee400c8, 0xaee500cc, 0x8f8300c8,
+0x3c02000a, 0x3442efff, 0x1032023, 0x44102b,
+0x10400003, 0x3c02000a, 0x3442f000, 0x822021,
+0x801821, 0x8ee400c0, 0x8ee500c4, 0x1021,
+0xa32821, 0xa3302b, 0x822021, 0x862021,
+0xaee400c0, 0xaee500c4, 0xaf8800c8, 0xaf8700e4,
+0x80034d0, 0xaf8700e8, 0x3c020001, 0x571021,
+0x904283c0, 0x1040000b, 0x0, 0x3c140001,
+0x297a021, 0x8e9483c4, 0x3c130001, 0x2779821,
+0x8e7383c8, 0x3c120001, 0x2579021, 0x8003197,
+0x8e5283cc, 0x8f8300e0, 0x8f8200e4, 0x10430007,
+0x8821, 0x8f8200e4, 0x24110001, 0x8c430000,
+0x8c440004, 0xafa30018, 0xafa4001c, 0x1620000e,
+0x3c02ffff, 0x8f8200c4, 0xafa20010, 0x8f8200c8,
+0x3c040001, 0x24845040, 0xafa20014, 0x8f8600e0,
+0x8f8700e4, 0x3c050006, 0xc002407, 0x34a5f000,
+0x80034d0, 0x0, 0x8fa3001c, 0x8fb20018,
+0x3074ffff, 0x2694fffc, 0x621024, 0x10400058,
+0x2409821, 0x3c020080, 0x621024, 0x1040000a,
+0x3c040040, 0x8ee2007c, 0x24420001, 0xaee2007c,
+0x8ee2007c, 0x8ee201fc, 0x24420001, 0xaee201fc,
+0x80034ca, 0x8ee201fc, 0x3c060004, 0x3c0b0001,
+0x3c0a0002, 0x3c050010, 0x3c090008, 0x8ee20080,
+0x3c080020, 0x34078000, 0x24420001, 0xaee20080,
+0x8ee20080, 0x8fa2001c, 0x441824, 0x10660021,
+0xc3102b, 0x14400007, 0x0, 0x106b0011,
+0x0, 0x106a0015, 0x0, 0x800304d,
+0x42042, 0x10650023, 0xa3102b, 0x14400005,
+0x0, 0x10690019, 0x0, 0x800304d,
+0x42042, 0x10680021, 0x0, 0x800304d,
+0x42042, 0x8ee20034, 0x24420001, 0xaee20034,
+0x8ee20034, 0x800304d, 0x42042, 0x8ee201ec,
+0x24420001, 0xaee201ec, 0x8ee201ec, 0x800304d,
+0x42042, 0x8ee201f0, 0x24420001, 0xaee201f0,
+0x8ee201f0, 0x800304d, 0x42042, 0x8ee201f4,
+0x24420001, 0xaee201f4, 0x8ee201f4, 0x800304d,
+0x42042, 0x8ee20030, 0x24420001, 0xaee20030,
+0x8ee20030, 0x800304d, 0x42042, 0x8ee201f8,
+0x24420001, 0xaee201f8, 0x8ee201f8, 0x42042,
+0x1087047c, 0x0, 0x8003012, 0x0,
+0x3c020001, 0x571021, 0x904283b2, 0x14400084,
+0x24020001, 0x3c030001, 0x771821, 0x906383b3,
+0x1462007f, 0x3c020100, 0x8e430000, 0x621024,
+0x1040006f, 0x2402ffff, 0x14620005, 0x24100001,
+0x96430004, 0x3402ffff, 0x10620075, 0x0,
+0x92e204d8, 0x14400072, 0x0, 0x3c020001,
+0x571021, 0x8c4283b4, 0x28420005, 0x10400020,
+0x3821, 0x3c020001, 0x571021, 0x8c4283b4,
+0x18400016, 0x2821, 0x96660000, 0x520c0,
+0x971021, 0x9442777e, 0x14460009, 0x971021,
+0x94437780, 0x96620002, 0x14620005, 0x971021,
+0x94437782, 0x96620004, 0x50620008, 0x24070001,
+0x3c020001, 0x571021, 0x8c4283b4, 0x24a50001,
+0xa2102a, 0x5440ffee, 0x520c0, 0x30e200ff,
+0x10400440, 0x0, 0x80030d9, 0x0,
+0x2402021, 0xc0022fe, 0x24050006, 0x3044001f,
+0x428c0, 0x2e51021, 0x9442727c, 0x30424000,
+0x14400434, 0xb71021, 0x9443727e, 0x96620000,
+0x1462000b, 0x418c0, 0xb71021, 0x94437280,
+0x96620002, 0x14620006, 0x418c0, 0xb71021,
+0x94437282, 0x96620004, 0x10620035, 0x418c0,
+0x2e31021, 0x9442727c, 0x30428000, 0x14400421,
+0x2e31021, 0x944b727c, 0x96670000, 0xb28c0,
+0xb71021, 0x9442737e, 0x80030bb, 0x3021,
+0x420c0, 0x2e41021, 0x9443737c, 0x2e41021,
+0x944b737c, 0x30638000, 0x14600010, 0xb28c0,
+0xb71021, 0x9442737e, 0x1447fff5, 0x1602021,
+0xb71021, 0x94437380, 0x96620002, 0x5462fff1,
+0x420c0, 0xb71021, 0x94437382, 0x96620004,
+0x5462ffec, 0x420c0, 0x24060001, 0x30c200ff,
+0x10400400, 0x0, 0x80030d9, 0x0,
+0x97430202, 0x96420000, 0x146203fa, 0x0,
+0x97430204, 0x96420002, 0x146203f6, 0x0,
+0x97430206, 0x96420004, 0x146203f2, 0x0,
+0x92420000, 0x3a030001, 0x30420001, 0x431024,
+0x10400074, 0x2402ffff, 0x8e630000, 0x14620004,
+0x3402ffff, 0x96630004, 0x1062006f, 0x240f0002,
+0x3c020001, 0x571021, 0x904283b2, 0x1440006a,
+0x240f0003, 0x92e204d8, 0x54400068, 0xafaf002c,
+0x3c020001, 0x571021, 0x8c4283b4, 0x28420005,
+0x10400020, 0x3821, 0x3c020001, 0x571021,
+0x8c4283b4, 0x18400016, 0x2821, 0x96660000,
+0x520c0, 0x971021, 0x9442777e, 0x14460009,
+0x971021, 0x94437780, 0x96620002, 0x14620005,
+0x971021, 0x94437782, 0x96620004, 0x50620008,
+0x24070001, 0x3c020001, 0x571021, 0x8c4283b4,
+0x24a50001, 0xa2102a, 0x5440ffee, 0x520c0,
+0x30e200ff, 0x14400044, 0x240f0003, 0x80034ca,
+0x0, 0x2402021, 0xc0022fe, 0x24050006,
+0x3044001f, 0x428c0, 0x2e51021, 0x9442727c,
+0x30424000, 0x144003af, 0xb71021, 0x9443727e,
+0x96620000, 0x1462000b, 0x418c0, 0xb71021,
+0x94437280, 0x96620002, 0x14620006, 0x418c0,
+0xb71021, 0x94437282, 0x96620004, 0x10620027,
+0x418c0, 0x2e31021, 0x9442727c, 0x30428000,
+0x1440039c, 0x2e31021, 0x944b727c, 0x96670000,
+0xb28c0, 0xb71021, 0x9442737e, 0x8003140,
+0x3021, 0x420c0, 0x2e41021, 0x9443737c,
+0x2e41021, 0x944b737c, 0x30638000, 0x14600010,
+0xb28c0, 0xb71021, 0x9442737e, 0x1447fff5,
+0x1602021, 0xb71021, 0x94437380, 0x96620002,
+0x5462fff1, 0x420c0, 0xb71021, 0x94437382,
+0x96620004, 0x5462ffec, 0x420c0, 0x24060001,
+0x30c200ff, 0x1040037b, 0x0, 0x8003153,
+0x240f0003, 0x240f0001, 0xafaf002c, 0x8f420260,
+0x54102b, 0x1040003a, 0x0, 0x8f8300e4,
+0x8f8200e0, 0x10620003, 0x24630008, 0xaf8300e4,
+0xaf8300e8, 0x8ee400c0, 0x8ee500c4, 0x2801821,
+0x1021, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xaee400c0, 0xaee500c4, 0x8ee20058,
+0x24420001, 0xaee20058, 0x8ee20058, 0x8ee2007c,
+0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0,
+0xafa20010, 0x8f8200e4, 0x3c040001, 0x24845048,
+0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050006,
+0xc002407, 0x34a5f003, 0x80034d0, 0x0,
+0x8ee25240, 0xafa20010, 0x8ee25244, 0x3c040001,
+0x24845054, 0xafa20014, 0x8ee60e10, 0x8ee70e18,
+0x3c050006, 0xc002407, 0x34a5f002, 0x8ee201c0,
+0x24420001, 0xaee201c0, 0x8ee20000, 0x8ee301c0,
+0x2403ffbf, 0x431024, 0x8003474, 0xaee20000,
+0x96e20468, 0x54102b, 0x10400003, 0x0,
+0x240f0001, 0xa3af0027, 0x12800301, 0x24160007,
+0x24150040, 0x241e0001, 0x240e0012, 0x8ee2724c,
+0x8f430280, 0x24420001, 0x304207ff, 0x106202d3,
+0x0, 0x93a20027, 0x10400014, 0x0,
+0x8ee35240, 0x8ee25244, 0x10620009, 0x26ed5244,
+0x8ee65244, 0x8ee35244, 0x21140, 0x24425248,
+0x2e28021, 0x24630001, 0x80031c3, 0x306b00ff,
+0x92e27248, 0x1440ffca, 0x0, 0x8ee201e0,
+0x24420001, 0xaee201e0, 0x8ee201e0, 0x8ee30e10,
+0x8ee20e18, 0x1062ffc2, 0x26ed0e18, 0x8ee60e18,
+0x8ee30e18, 0x21140, 0x24420e20, 0x2e28021,
+0x24630001, 0x306b01ff, 0x96e2046a, 0x30420010,
+0x10400019, 0x0, 0x9642000c, 0x340f8100,
+0x144f0015, 0x0, 0x3c020001, 0x571021,
+0x904283c0, 0x14400010, 0x0, 0x9642000e,
+0xa6020016, 0x8e420008, 0x8e430004, 0x8e440000,
+0x2694fffc, 0xae42000c, 0xae430008, 0xae440004,
+0x9602000e, 0x26730004, 0x240f0001, 0xa3af0037,
+0x34420200, 0xa602000e, 0x8e020000, 0x8e030004,
+0x3c040001, 0x34843800, 0x306a0007, 0x26a9823,
+0x3641021, 0x262102b, 0x10400005, 0x28aa021,
+0x2641023, 0x3621823, 0x3c020020, 0x439823,
+0x26820007, 0x2404fff8, 0x9603000a, 0x446024,
+0x6a1821, 0x6c102b, 0x10400002, 0x1803821,
+0x603821, 0xae130018, 0x8f880120, 0x24e20007,
+0x443824, 0x27623800, 0x25090020, 0x122102b,
+0x50400001, 0x27693000, 0x8f820128, 0x11220004,
+0x0, 0x8f820124, 0x15220007, 0x1401821,
+0x8ee201a4, 0x8821, 0x24420001, 0xaee201a4,
+0x8003250, 0x8ee201a4, 0x8e040000, 0x8e050004,
+0x1021, 0xad130008, 0xa507000e, 0xad160018,
+0xad06001c, 0xa3302b, 0xa32823, 0x822023,
+0x862023, 0xad040000, 0xad050004, 0x8ee204c0,
+0xad020010, 0xaf890120, 0x92e24e20, 0x14400033,
+0x24110001, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x8c820000, 0x1456001f, 0x0,
+0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x0,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34,
+0x8ee34e30, 0x24420001, 0x10550007, 0x0,
+0x8ee24e34, 0x24420001, 0x10620005, 0x0,
+0x800323d, 0x0, 0x14600005, 0x0,
+0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
+0x8c820004, 0x2c420011, 0x50400010, 0xac800000,
+0x8003250, 0x0, 0x8ee24e30, 0x24420001,
+0x50550003, 0x1021, 0x8ee24e30, 0x24420001,
+0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0xac960000, 0xac9e0004, 0x16200018,
+0x3c050006, 0x8e020018, 0x3c040001, 0x24845060,
+0xafa20010, 0x8e020000, 0x8e030004, 0x34a5f009,
+0x2003021, 0xc002407, 0xafa30014, 0x93a20037,
+0x10400216, 0x340f8100, 0x8e420004, 0x8e430008,
+0x8e44000c, 0xa64f000c, 0xae420000, 0xae430004,
+0xae440008, 0x96020016, 0x8003474, 0xa642000e,
+0x14ec0168, 0x28a1823, 0x960c000a, 0x9603000e,
+0x28a1023, 0xa602000a, 0x34620004, 0xa602000e,
+0x8f880120, 0x27623800, 0x25090020, 0x122102b,
+0x14400002, 0x306affff, 0x27693000, 0x8f820128,
+0x11220004, 0x0, 0x8f820124, 0x15220007,
+0x24040020, 0x8ee201a4, 0x8821, 0x24420001,
+0xaee201a4, 0x80032ce, 0x8ee201a4, 0x8ee5724c,
+0x8ee60490, 0x8ee70494, 0xa504000e, 0x24040004,
+0xad100008, 0xad040018, 0x52940, 0xa01821,
+0x1021, 0xe33821, 0xe3202b, 0xc23021,
+0xc43021, 0xad060000, 0xad070004, 0x8ee2724c,
+0xad02001c, 0x8ee204c4, 0xad020010, 0xaf890120,
+0x92e24e20, 0x14400033, 0x24110001, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x8c820000,
+0x1456001f, 0x0, 0x8ee34e30, 0x8ee24e34,
+0x1062001b, 0x0, 0x8c820004, 0x24420001,
+0xac820004, 0x8ee24e34, 0x8ee34e30, 0x24420001,
+0x10550007, 0x0, 0x8ee24e34, 0x24420001,
+0x10620005, 0x0, 0x80032bb, 0x0,
+0x14600005, 0x0, 0x8f820128, 0x24420020,
+0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
+0x50400010, 0xac800000, 0x80032ce, 0x0,
+0x8ee24e30, 0x24420001, 0x50550003, 0x1021,
+0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0xac960000,
+0xac9e0004, 0x1620000d, 0x0, 0xa60c000a,
+0xa60a000e, 0x8f820100, 0xafa20010, 0x8f820104,
+0x3c040001, 0x2484506c, 0x3c050006, 0xafa20014,
+0x8ee6724c, 0x800343f, 0x34a5f00b, 0x3c010001,
+0x370821, 0xa02083c0, 0xadab0000, 0x8ee201d8,
+0x8ee3724c, 0x2442ffff, 0xaee201d8, 0x8ee201d8,
+0x24630001, 0x306307ff, 0x26e25244, 0x15a20006,
+0xaee3724c, 0x8ee201d0, 0x2442ffff, 0xaee201d0,
+0x80032f3, 0x8ee201d0, 0x8ee201cc, 0x2442ffff,
+0xaee201cc, 0x8ee201cc, 0x8f420240, 0x10400073,
+0x0, 0x8ee20e1c, 0x24420001, 0xaee20e1c,
+0x8f430240, 0x43102b, 0x14400176, 0xa021,
+0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
+0x50400001, 0x27663000, 0x8f820128, 0x10c20004,
+0x0, 0x8f820124, 0x14c20007, 0x0,
+0x8ee201a4, 0x8821, 0x24420001, 0xaee201a4,
+0x8003353, 0x8ee201a4, 0x8ee2724c, 0xac62001c,
+0x8ee404a8, 0x8ee504ac, 0x2462001c, 0xac620008,
+0x24020008, 0xa462000e, 0x24020011, 0xac620018,
+0xac640000, 0xac650004, 0x8ee204c4, 0xac620010,
+0xaf860120, 0x92e24e20, 0x14400033, 0x24110001,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c820000, 0x144e001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x0, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30,
+0x24420001, 0x10550007, 0x0, 0x8ee24e34,
+0x24420001, 0x10620005, 0x0, 0x8003340,
+0x0, 0x14600005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400010, 0xac800000, 0x8003353,
+0x0, 0x8ee24e30, 0x24420001, 0x50550003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0xac8e0000, 0xac9e0004, 0x5620000d, 0x24110001,
+0x8ee2724c, 0x3c040001, 0x24845078, 0xafa00014,
+0xafa20010, 0x8ee6724c, 0x8f470280, 0x3c050009,
+0x34a5f008, 0xc002407, 0xafae0048, 0x8fae0048,
+0x56200001, 0xaee00e1c, 0x8ee20188, 0x24420001,
+0xaee20188, 0x80033cc, 0x8ee20188, 0x8f830120,
+0x27623800, 0x24660020, 0xc2102b, 0x50400001,
+0x27663000, 0x8f820128, 0x10c20004, 0x0,
+0x8f820124, 0x14c20007, 0x0, 0x8ee201a4,
+0x8821, 0x24420001, 0xaee201a4, 0x80033be,
+0x8ee201a4, 0x8ee2724c, 0xac62001c, 0x8ee404a8,
+0x8ee504ac, 0x2462001c, 0xac620008, 0x24020008,
+0xa462000e, 0x24020011, 0xac620018, 0xac640000,
+0xac650004, 0x8ee204c4, 0xac620010, 0xaf860120,
+0x92e24e20, 0x14400033, 0x24110001, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x8c820000,
+0x144e001f, 0x0, 0x8ee34e30, 0x8ee24e34,
+0x1062001b, 0x0, 0x8c820004, 0x24420001,
+0xac820004, 0x8ee24e34, 0x8ee34e30, 0x24420001,
+0x10550007, 0x0, 0x8ee24e34, 0x24420001,
+0x10620005, 0x0, 0x80033ab, 0x0,
+0x14600005, 0x0, 0x8f820128, 0x24420020,
+0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
+0x50400010, 0xac800000, 0x80033be, 0x0,
+0x8ee24e30, 0x24420001, 0x50550003, 0x1021,
+0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0xac8e0000,
+0xac9e0004, 0x1620000d, 0x0, 0x8ee2724c,
+0x3c040001, 0x24845078, 0xafa00014, 0xafa20010,
+0x8ee6724c, 0x8f470280, 0x3c050009, 0x34a5f008,
+0xc002407, 0xafae0048, 0x8fae0048, 0x8ee20174,
+0x24420001, 0xaee20174, 0x8ee20174, 0x8003472,
+0xa021, 0x960c000a, 0x183102b, 0x54400001,
+0x1801821, 0xa603000a, 0x8f880120, 0x27623800,
+0x25090020, 0x122102b, 0x50400001, 0x27693000,
+0x8f820128, 0x11220004, 0x0, 0x8f820124,
+0x15220007, 0x24040020, 0x8ee201a4, 0x8821,
+0x24420001, 0xaee201a4, 0x8003433, 0x8ee201a4,
+0x8ee5724c, 0x8ee60490, 0x8ee70494, 0xa504000e,
+0x24040004, 0xad100008, 0xad040018, 0x52940,
+0xa01821, 0x1021, 0xe33821, 0xe3202b,
+0xc23021, 0xc43021, 0xad060000, 0xad070004,
+0x8ee2724c, 0xad02001c, 0x8ee204c4, 0xad020010,
+0xaf890120, 0x92e24e20, 0x14400033, 0x24110001,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c820000, 0x1456001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x0, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30,
+0x24420001, 0x10550007, 0x0, 0x8ee24e34,
+0x24420001, 0x10620005, 0x0, 0x8003420,
+0x0, 0x14600005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400010, 0xac800000, 0x8003433,
+0x0, 0x8ee24e30, 0x24420001, 0x50550003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0xac960000, 0xac9e0004, 0x1620001d, 0x0,
+0xa60c000a, 0x8f820100, 0xafa20010, 0x8f820104,
+0x3c040001, 0x2484506c, 0x3c050006, 0xafa20014,
+0x8ee6724c, 0x34a5f00d, 0xc002407, 0x2003821,
+0x93a20037, 0x10400031, 0x340f8100, 0x8e420004,
+0x8e430008, 0x8e44000c, 0xa64f000c, 0xae420000,
+0xae430004, 0xae440008, 0x96020016, 0xa642000e,
+0x9602000e, 0x3042fdff, 0x8003474, 0xa602000e,
+0x8ee201d8, 0x2442ffff, 0xaee201d8, 0x8ee201d8,
+0x8ee201cc, 0x3c04001f, 0x3c010001, 0x370821,
+0xa03e83c0, 0x2442ffff, 0xaee201cc, 0x9603000a,
+0x3484ffff, 0x8ee201cc, 0x6a1821, 0x2639821,
+0x93202b, 0x10800003, 0x3c02fff5, 0x34421000,
+0x2629821, 0xadab0000, 0x8ee2724c, 0x24420001,
+0x304207ff, 0xaee2724c, 0x8f420240, 0x10400004,
+0x283a023, 0x8ee20e1c, 0x24420001, 0xaee20e1c,
+0xa3a00027, 0x1680fd29, 0x0, 0x12800024,
+0x0, 0x3c010001, 0x370821, 0xac3483c4,
+0x3c010001, 0x370821, 0xac3383c8, 0x3c010001,
+0x370821, 0xac3283cc, 0x93a20037, 0x10400008,
+0x0, 0x3c020001, 0x571021, 0x8c4283cc,
+0x24420004, 0x3c010001, 0x370821, 0xac2283cc,
+0x8ee2724c, 0x8f430280, 0x24420001, 0x304207ff,
+0x14620006, 0x0, 0x8ee201c4, 0x24420001,
+0xaee201c4, 0x80034d0, 0x8ee201c4, 0x8ee201bc,
+0x24420001, 0xaee201bc, 0x80034d0, 0x8ee201bc,
+0x97a4001e, 0x2484fffc, 0x801821, 0x8ee400c0,
+0x8ee500c4, 0x1021, 0xa32821, 0xa3302b,
+0x822021, 0x862021, 0xaee400c0, 0xaee500c4,
+0x8faf002c, 0x24020002, 0x11e2000f, 0x29e20003,
+0x14400017, 0x24020003, 0x15e20015, 0x0,
+0x8ee200d0, 0x8ee300d4, 0x24630001, 0x2c640001,
+0x441021, 0xaee200d0, 0xaee300d4, 0x8ee200d0,
+0x80034ca, 0x8ee300d4, 0x8ee200d8, 0x8ee300dc,
+0x24630001, 0x2c640001, 0x441021, 0xaee200d8,
+0xaee300dc, 0x8ee200d8, 0x80034ca, 0x8ee300dc,
+0x8ee200c8, 0x8ee300cc, 0x24630001, 0x2c640001,
+0x441021, 0xaee200c8, 0xaee300cc, 0x8ee200c8,
+0x8ee300cc, 0x8f8300e4, 0x8f8200e0, 0x10620003,
+0x24630008, 0xaf8300e4, 0xaf8300e8, 0x8fbf0070,
+0x8fbe006c, 0x8fb60068, 0x8fb50064, 0x8fb40060,
+0x8fb3005c, 0x8fb20058, 0x8fb10054, 0x8fb00050,
+0x3e00008, 0x27bd0078, 0x27bdffb0, 0xafb50044,
+0xa821, 0xafb00030, 0x8021, 0xafbf004c,
+0xafb60048, 0xafb40040, 0xafb3003c, 0xafb20038,
+0xafb10034, 0x8ee204d4, 0x24140001, 0x30420001,
+0x1440002a, 0xb021, 0x8f8700e0, 0x8f8800c4,
+0x8f8200e8, 0xe22023, 0x2c821000, 0x50400001,
+0x24841000, 0x420c2, 0x801821, 0x8ee400c8,
+0x8ee500cc, 0x1021, 0xa32821, 0xa3302b,
+0x822021, 0x862021, 0xaee400c8, 0xaee500cc,
+0x8f8300c8, 0x3c02000a, 0x3442efff, 0x1032023,
+0x44102b, 0x10400003, 0x3c02000a, 0x3442f000,
+0x822021, 0x801821, 0x8ee400c0, 0x8ee500c4,
+0x1021, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xaee400c0, 0xaee500c4, 0xaf8800c8,
+0xaf8700e4, 0x8003854, 0xaf8700e8, 0x3c020001,
+0x571021, 0x904283c0, 0x1040000b, 0x0,
+0x3c130001, 0x2779821, 0x8e7383c4, 0x3c110001,
+0x2378821, 0x8e3183c8, 0x3c120001, 0x2579021,
+0x80036ec, 0x8e5283cc, 0x8f8300e0, 0x8f8200e4,
+0x10430007, 0x4821, 0x8f8200e4, 0x24090001,
+0x8c430000, 0x8c440004, 0xafa30018, 0xafa4001c,
+0x1520000e, 0x3c02ffff, 0x8f8200c4, 0xafa20010,
+0x8f8200c8, 0x3c040001, 0x24845040, 0xafa20014,
+0x8f8600e0, 0x8f8700e4, 0x3c050006, 0xc002407,
+0x34a5f000, 0x8003854, 0x0, 0x8fa3001c,
+0x8fb20018, 0x3073ffff, 0x2673fffc, 0x621024,
+0x10400058, 0x2408821, 0x3c020080, 0x621024,
+0x1040000a, 0x3c040040, 0x8ee2007c, 0x24420001,
+0xaee2007c, 0x8ee2007c, 0x8ee201fc, 0x24420001,
+0xaee201fc, 0x800384e, 0x8ee201fc, 0x3c060004,
+0x3c0b0001, 0x3c0a0002, 0x3c050010, 0x3c090008,
+0x8ee20080, 0x3c080020, 0x34078000, 0x24420001,
+0xaee20080, 0x8ee20080, 0x8fa2001c, 0x441824,
+0x10660021, 0xc3102b, 0x14400007, 0x0,
+0x106b0011, 0x0, 0x106a0015, 0x0,
+0x8003596, 0x42042, 0x10650023, 0xa3102b,
+0x14400005, 0x0, 0x10690019, 0x0,
+0x8003596, 0x42042, 0x10680021, 0x0,
+0x8003596, 0x42042, 0x8ee20034, 0x24420001,
+0xaee20034, 0x8ee20034, 0x8003596, 0x42042,
+0x8ee201ec, 0x24420001, 0xaee201ec, 0x8ee201ec,
+0x8003596, 0x42042, 0x8ee201f0, 0x24420001,
+0xaee201f0, 0x8ee201f0, 0x8003596, 0x42042,
+0x8ee201f4, 0x24420001, 0xaee201f4, 0x8ee201f4,
+0x8003596, 0x42042, 0x8ee20030, 0x24420001,
+0xaee20030, 0x8ee20030, 0x8003596, 0x42042,
+0x8ee201f8, 0x24420001, 0xaee201f8, 0x8ee201f8,
+0x42042, 0x108702b7, 0x0, 0x800355b,
+0x0, 0x3c020001, 0x571021, 0x904283b2,
+0x14400084, 0x24020001, 0x3c030001, 0x771821,
+0x906383b3, 0x1462007f, 0x3c020100, 0x8e430000,
+0x621024, 0x1040006f, 0x2402ffff, 0x14620005,
+0x24100001, 0x96430004, 0x3402ffff, 0x10620075,
+0x0, 0x92e204d8, 0x14400072, 0x0,
+0x3c020001, 0x571021, 0x8c4283b4, 0x28420005,
+0x10400020, 0x3821, 0x3c020001, 0x571021,
+0x8c4283b4, 0x18400016, 0x2821, 0x96260000,
+0x520c0, 0x971021, 0x9442777e, 0x14460009,
+0x971021, 0x94437780, 0x96220002, 0x14620005,
+0x971021, 0x94437782, 0x96220004, 0x50620008,
+0x24070001, 0x3c020001, 0x571021, 0x8c4283b4,
+0x24a50001, 0xa2102a, 0x5440ffee, 0x520c0,
+0x30e200ff, 0x1040027b, 0x0, 0x8003622,
+0x0, 0x2402021, 0xc0022fe, 0x24050006,
+0x3044001f, 0x428c0, 0x2e51021, 0x9442727c,
+0x30424000, 0x1440026f, 0xb71021, 0x9443727e,
+0x96220000, 0x1462000b, 0x418c0, 0xb71021,
+0x94437280, 0x96220002, 0x14620006, 0x418c0,
+0xb71021, 0x94437282, 0x96220004, 0x10620035,
+0x418c0, 0x2e31021, 0x9442727c, 0x30428000,
+0x1440025c, 0x2e31021, 0x9448727c, 0x96270000,
+0x828c0, 0xb71021, 0x9442737e, 0x8003604,
+0x3021, 0x420c0, 0x2e41021, 0x9443737c,
+0x2e41021, 0x9448737c, 0x30638000, 0x14600010,
+0x828c0, 0xb71021, 0x9442737e, 0x1447fff5,
+0x1002021, 0xb71021, 0x94437380, 0x96220002,
+0x5462fff1, 0x420c0, 0xb71021, 0x94437382,
+0x96220004, 0x5462ffec, 0x420c0, 0x24060001,
+0x30c200ff, 0x1040023b, 0x0, 0x8003622,
+0x0, 0x97430202, 0x96420000, 0x14620235,
+0x0, 0x97430204, 0x96420002, 0x14620231,
+0x0, 0x97430206, 0x96420004, 0x1462022d,
+0x0, 0x92420000, 0x3a030001, 0x30420001,
+0x431024, 0x10400074, 0x2402ffff, 0x8e230000,
+0x14620004, 0x3402ffff, 0x96230004, 0x1062006f,
+0x24140002, 0x3c020001, 0x571021, 0x904283b2,
+0x1440006a, 0x24140003, 0x92e204d8, 0x14400067,
+0x0, 0x3c020001, 0x571021, 0x8c4283b4,
+0x28420005, 0x10400020, 0x3821, 0x3c020001,
+0x571021, 0x8c4283b4, 0x18400016, 0x2821,
+0x96260000, 0x520c0, 0x971021, 0x9442777e,
+0x14460009, 0x971021, 0x94437780, 0x96220002,
+0x14620005, 0x971021, 0x94437782, 0x96220004,
+0x50620008, 0x24070001, 0x3c020001, 0x571021,
+0x8c4283b4, 0x24a50001, 0xa2102a, 0x5440ffee,
+0x520c0, 0x30e200ff, 0x14400044, 0x24140003,
+0x800384e, 0x0, 0x2402021, 0xc0022fe,
+0x24050006, 0x3044001f, 0x428c0, 0x2e51021,
+0x9442727c, 0x30424000, 0x144001ea, 0xb71021,
+0x9443727e, 0x96220000, 0x1462000b, 0x418c0,
+0xb71021, 0x94437280, 0x96220002, 0x14620006,
+0x418c0, 0xb71021, 0x94437282, 0x96220004,
+0x10620027, 0x418c0, 0x2e31021, 0x9442727c,
+0x30428000, 0x144001d7, 0x2e31021, 0x9448727c,
+0x96270000, 0x828c0, 0xb71021, 0x9442737e,
+0x8003689, 0x3021, 0x420c0, 0x2e41021,
+0x9443737c, 0x2e41021, 0x9448737c, 0x30638000,
+0x14600010, 0x828c0, 0xb71021, 0x9442737e,
+0x1447fff5, 0x1002021, 0xb71021, 0x94437380,
+0x96220002, 0x5462fff1, 0x420c0, 0xb71021,
+0x94437382, 0x96220004, 0x5462ffec, 0x420c0,
+0x24060001, 0x30c200ff, 0x104001b6, 0x0,
+0x800369c, 0x24140003, 0x24140001, 0x8f420260,
+0x53102b, 0x10400049, 0x0, 0x8f8300e4,
+0x8f8200e0, 0x10620003, 0x24630008, 0xaf8300e4,
+0xaf8300e8, 0x8ee400c0, 0x8ee500c4, 0x2601821,
+0x1021, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xaee400c0, 0xaee500c4, 0x8ee20058,
+0x24420001, 0xaee20058, 0x8ee20058, 0x8ee2007c,
+0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0,
+0xafa20010, 0x8f8200e4, 0x3c040001, 0x24845048,
+0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050006,
+0xc002407, 0x34a5f003, 0x8003854, 0x0,
+0x8ee25240, 0xafa20010, 0x8ee25244, 0x3c040001,
+0x24845054, 0xafa20014, 0x8ee60e10, 0x8ee70e18,
+0xc002407, 0x34a5f002, 0x8ee201c0, 0x24420001,
+0xaee201c0, 0x8ee20000, 0x8ee301c0, 0x2403ffbf,
+0x431024, 0x80037fc, 0xaee20000, 0x8ee25240,
+0xafa20010, 0x8ee25244, 0x3c040001, 0x24845054,
+0xafa20014, 0x8ee60e10, 0x8ee70e18, 0x3c050006,
+0xc002407, 0x34a5f002, 0x8ee201c0, 0x24420001,
+0xaee201c0, 0x80037fc, 0x8ee201c0, 0x96e20468,
+0x53102b, 0x54400001, 0x3c158000, 0x12600131,
+0x3c0c001f, 0x358cffff, 0x8ee2724c, 0x8f430280,
+0x24420001, 0x304207ff, 0x10620108, 0x0,
+0x12a00014, 0x0, 0x8ee35240, 0x8ee25244,
+0x10620009, 0x26ee5244, 0x8eeb5244, 0x8ee35244,
+0x21140, 0x24425248, 0x2e28021, 0x24630001,
+0x8003716, 0x306800ff, 0x92e27248, 0x1440ffc0,
+0x3c050006, 0x8ee201e0, 0x24420001, 0xaee201e0,
+0x8ee201e0, 0x8ee30e10, 0x8ee20e18, 0x1062ffcb,
+0x26ee0e18, 0x8eeb0e18, 0xa821, 0x8ee30e18,
+0x21140, 0x24420e20, 0x2e28021, 0x24630001,
+0x306801ff, 0x96e2046a, 0x30420010, 0x10400017,
+0x34028100, 0x9643000c, 0x14620014, 0x0,
+0x3c020001, 0x571021, 0x904283c0, 0x1440000f,
+0x0, 0x9642000e, 0xa6020016, 0x8e420008,
+0x8e430004, 0x8e440000, 0x2673fffc, 0xae42000c,
+0xae430008, 0xae440004, 0x9602000e, 0x26310004,
+0x24160001, 0x34420200, 0xa602000e, 0x9603000a,
+0x2605021, 0x73102b, 0x10400002, 0x2606821,
+0x605021, 0x2d42003d, 0x1040002a, 0x3821,
+0x9623000c, 0x24020800, 0x54620027, 0xae110018,
+0x3c020001, 0x571021, 0x904283c0, 0x54400022,
+0xae110018, 0x26220017, 0x182102b, 0x10400013,
+0x0, 0x3c02fff5, 0x511021, 0x90421017,
+0x38430006, 0x2c630001, 0x38420011, 0x2c420001,
+0x621825, 0x10600013, 0x26220010, 0x182102b,
+0x1040000e, 0x0, 0x3c07fff5, 0xf13821,
+0x94e71010, 0x8003762, 0x24e7000e, 0x92220017,
+0x38430006, 0x2c630001, 0x38420011, 0x2c420001,
+0x621825, 0x50600004, 0xae110018, 0x96270010,
+0x24e7000e, 0xae110018, 0x3c020001, 0x571021,
+0x904283c0, 0x2102b, 0x14e00002, 0x24ec0,
+0x1403821, 0x8f830120, 0x27623800, 0x24660020,
+0xc2102b, 0x50400001, 0x27663000, 0x8f820128,
+0x10c20004, 0x0, 0x8f820124, 0x14c20007,
+0x2402000b, 0x8ee201a4, 0x4821, 0x24420001,
+0xaee201a4, 0x80037c3, 0x8ee201a4, 0x8e040000,
+0x8e050004, 0xac620018, 0x1751025, 0x491025,
+0xac710008, 0xa467000e, 0xac62001c, 0xac640000,
+0xac650004, 0x8ee204c0, 0xac620010, 0xaf860120,
+0x92e24e20, 0x14400038, 0x24090001, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x8c830000,
+0x24020007, 0x14620020, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001c, 0x0, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee34e34, 0x8ee54e30,
+0x24020040, 0x24630001, 0x10620007, 0x0,
+0x8ee24e34, 0x24420001, 0x10a20005, 0x0,
+0x80037ad, 0x0, 0x14a00005, 0x0,
+0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
+0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
+0x80037c3, 0x0, 0x8ee24e30, 0x24030040,
+0x24420001, 0x50430003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x24020007, 0xac820000,
+0x24020001, 0xac820004, 0x15200018, 0x3c050006,
+0x8e020018, 0x3c040001, 0x24845060, 0xafa20010,
+0x8e020000, 0x8e030004, 0x34a5f009, 0x2003021,
+0xc002407, 0xafa30014, 0x32c200ff, 0x1040002b,
+0x34028100, 0x8e430004, 0x8e440008, 0x8e45000c,
+0xa642000c, 0xae430000, 0xae440004, 0xae450008,
+0x96020016, 0x80037fc, 0xa642000e, 0x154d000a,
+0x0, 0x9602000e, 0xa613000a, 0x34420004,
+0xa602000e, 0x3c010001, 0x370821, 0xa02083c0,
+0x80037fa, 0x9821, 0x9604000a, 0x93102b,
+0x10400002, 0x2601821, 0x801821, 0x24020001,
+0xa603000a, 0x3c010001, 0x370821, 0xa02283c0,
+0x9604000a, 0x2248821, 0x191102b, 0x10400003,
+0x3c02fff5, 0x34421000, 0x2228821, 0x2649823,
+0xa821, 0x1660fef4, 0xadc80000, 0x12600021,
+0x32c200ff, 0x3c010001, 0x370821, 0xac3383c4,
+0x3c010001, 0x370821, 0xac3183c8, 0x3c010001,
+0x370821, 0x10400008, 0xac3283cc, 0x3c020001,
+0x571021, 0x8c4283cc, 0x24420004, 0x3c010001,
+0x370821, 0xac2283cc, 0x8ee2724c, 0x8f430280,
+0x24420001, 0x14620006, 0x0, 0x8ee201c4,
+0x24420001, 0xaee201c4, 0x8003854, 0x8ee201c4,
+0x8ee201bc, 0x24420001, 0xaee201bc, 0x8003854,
+0x8ee201bc, 0x97a4001e, 0x2484fffc, 0x801821,
+0x8ee400c0, 0x8ee500c4, 0x1021, 0xa32821,
+0xa3302b, 0x822021, 0x862021, 0x24020002,
+0xaee400c0, 0xaee500c4, 0x1282000f, 0x2a820003,
+0x14400017, 0x24020003, 0x16820015, 0x0,
+0x8ee200d0, 0x8ee300d4, 0x24630001, 0x2c640001,
+0x441021, 0xaee200d0, 0xaee300d4, 0x8ee200d0,
+0x800384e, 0x8ee300d4, 0x8ee200d8, 0x8ee300dc,
+0x24630001, 0x2c640001, 0x441021, 0xaee200d8,
+0xaee300dc, 0x8ee200d8, 0x800384e, 0x8ee300dc,
+0x8ee200c8, 0x8ee300cc, 0x24630001, 0x2c640001,
+0x441021, 0xaee200c8, 0xaee300cc, 0x8ee200c8,
+0x8ee300cc, 0x8f8300e4, 0x8f8200e0, 0x10620003,
+0x24630008, 0xaf8300e4, 0xaf8300e8, 0x8fbf004c,
+0x8fb60048, 0x8fb50044, 0x8fb40040, 0x8fb3003c,
+0x8fb20038, 0x8fb10034, 0x8fb00030, 0x3e00008,
+0x27bd0050, 0x27bdff90, 0xafb60060, 0xb021,
+0xafbf0068, 0xafbe0064, 0xafb5005c, 0xafb40058,
+0xafb30054, 0xafb20050, 0xafb1004c, 0xafb00048,
+0x8ee204d4, 0x8821, 0x24150001, 0x30420001,
+0x1440002a, 0xa3a0002f, 0x8f8700e0, 0x8f8800c4,
+0x8f8200e8, 0xe22023, 0x2c821000, 0x50400001,
+0x24841000, 0x420c2, 0x801821, 0x8ee400c8,
+0x8ee500cc, 0x1021, 0xa32821, 0xa3302b,
+0x822021, 0x862021, 0xaee400c8, 0xaee500cc,
+0x8f8300c8, 0x3c02000a, 0x3442efff, 0x1032023,
+0x44102b, 0x10400003, 0x3c02000a, 0x3442f000,
+0x822021, 0x801821, 0x8ee400c0, 0x8ee500c4,
+0x1021, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xaee400c0, 0xaee500c4, 0xaf8800c8,
+0xaf8700e4, 0x8003c5f, 0xaf8700e8, 0x3c020001,
+0x571021, 0x904283c0, 0x1040000b, 0x0,
+0x3c130001, 0x2779821, 0x8e7383c4, 0x3c100001,
+0x2178021, 0x8e1083c8, 0x3c120001, 0x2579021,
+0x8003a5d, 0x8e5283cc, 0x8f8300e0, 0x8f8200e4,
+0x10430007, 0x3821, 0x8f8200e4, 0x24070001,
+0x8c430000, 0x8c440004, 0xafa30018, 0xafa4001c,
+0x14e0000e, 0x3c02ffff, 0x8f8200c4, 0xafa20010,
+0x8f8200c8, 0x3c040001, 0x24845084, 0xafa20014,
+0x8f8600e0, 0x8f8700e4, 0x3c050006, 0xc002407,
+0x34a5f200, 0x8003c5f, 0x0, 0x8fa3001c,
+0x8fb20018, 0x3073ffff, 0x2673fffc, 0x621024,
+0x10400058, 0x2408021, 0x3c020080, 0x621024,
+0x1040000a, 0x3c040040, 0x8ee2007c, 0x24420001,
+0xaee2007c, 0x8ee2007c, 0x8ee201fc, 0x24420001,
+0xaee201fc, 0x8003c59, 0x8ee201fc, 0x3c060004,
+0x3c0b0001, 0x3c0a0002, 0x3c050010, 0x3c090008,
+0x8ee20080, 0x3c080020, 0x34078000, 0x24420001,
+0xaee20080, 0x8ee20080, 0x8fa2001c, 0x441824,
+0x10660021, 0xc3102b, 0x14400007, 0x0,
+0x106b0011, 0x0, 0x106a0015, 0x0,
+0x800391a, 0x42042, 0x10650023, 0xa3102b,
+0x14400005, 0x0, 0x10690019, 0x0,
+0x800391a, 0x42042, 0x10680021, 0x0,
+0x800391a, 0x42042, 0x8ee20034, 0x24420001,
+0xaee20034, 0x8ee20034, 0x800391a, 0x42042,
+0x8ee201ec, 0x24420001, 0xaee201ec, 0x8ee201ec,
+0x800391a, 0x42042, 0x8ee201f0, 0x24420001,
+0xaee201f0, 0x8ee201f0, 0x800391a, 0x42042,
+0x8ee201f4, 0x24420001, 0xaee201f4, 0x8ee201f4,
+0x800391a, 0x42042, 0x8ee20030, 0x24420001,
+0xaee20030, 0x8ee20030, 0x800391a, 0x42042,
+0x8ee201f8, 0x24420001, 0xaee201f8, 0x8ee201f8,
+0x42042, 0x1087033e, 0x0, 0x80038df,
+0x0, 0x3c020001, 0x571021, 0x904283b2,
+0x14400084, 0x24020001, 0x3c030001, 0x771821,
+0x906383b3, 0x1462007f, 0x3c020100, 0x8e430000,
+0x621024, 0x1040006f, 0x2402ffff, 0x14620005,
+0x24110001, 0x96430004, 0x3402ffff, 0x10620075,
+0x0, 0x92e204d8, 0x14400072, 0x0,
+0x3c020001, 0x571021, 0x8c4283b4, 0x28420005,
+0x10400020, 0x3821, 0x3c020001, 0x571021,
+0x8c4283b4, 0x18400016, 0x2821, 0x96060000,
+0x520c0, 0x971021, 0x9442777e, 0x14460009,
+0x971021, 0x94437780, 0x96020002, 0x14620005,
+0x971021, 0x94437782, 0x96020004, 0x50620008,
+0x24070001, 0x3c020001, 0x571021, 0x8c4283b4,
+0x24a50001, 0xa2102a, 0x5440ffee, 0x520c0,
+0x30e200ff, 0x10400302, 0x0, 0x80039a6,
+0x0, 0x2402021, 0xc0022fe, 0x24050006,
+0x3044001f, 0x428c0, 0x2e51021, 0x9442727c,
+0x30424000, 0x144002f6, 0xb71021, 0x9443727e,
+0x96020000, 0x1462000b, 0x418c0, 0xb71021,
+0x94437280, 0x96020002, 0x14620006, 0x418c0,
+0xb71021, 0x94437282, 0x96020004, 0x10620035,
+0x418c0, 0x2e31021, 0x9442727c, 0x30428000,
+0x144002e3, 0x2e31021, 0x944d727c, 0x96070000,
+0xd28c0, 0xb71021, 0x9442737e, 0x8003988,
+0x3021, 0x420c0, 0x2e41021, 0x9443737c,
+0x2e41021, 0x944d737c, 0x30638000, 0x14600010,
+0xd28c0, 0xb71021, 0x9442737e, 0x1447fff5,
+0x1a02021, 0xb71021, 0x94437380, 0x96020002,
+0x5462fff1, 0x420c0, 0xb71021, 0x94437382,
+0x96020004, 0x5462ffec, 0x420c0, 0x24060001,
+0x30c200ff, 0x104002c2, 0x0, 0x80039a6,
+0x0, 0x97430202, 0x96420000, 0x146202bc,
+0x0, 0x97430204, 0x96420002, 0x146202b8,
+0x0, 0x97430206, 0x96420004, 0x146202b4,
+0x0, 0x92420000, 0x3a230001, 0x30420001,
+0x431024, 0x10400074, 0x2402ffff, 0x8e030000,
+0x14620004, 0x3402ffff, 0x96030004, 0x1062006f,
+0x24150002, 0x3c020001, 0x571021, 0x904283b2,
+0x1440006a, 0x24150003, 0x92e204d8, 0x14400067,
+0x0, 0x3c020001, 0x571021, 0x8c4283b4,
+0x28420005, 0x10400020, 0x3821, 0x3c020001,
+0x571021, 0x8c4283b4, 0x18400016, 0x2821,
+0x96060000, 0x520c0, 0x971021, 0x9442777e,
+0x14460009, 0x971021, 0x94437780, 0x96020002,
+0x14620005, 0x971021, 0x94437782, 0x96020004,
+0x50620008, 0x24070001, 0x3c020001, 0x571021,
+0x8c4283b4, 0x24a50001, 0xa2102a, 0x5440ffee,
+0x520c0, 0x30e200ff, 0x14400044, 0x24150003,
+0x8003c59, 0x0, 0x2402021, 0xc0022fe,
+0x24050006, 0x3044001f, 0x428c0, 0x2e51021,
+0x9442727c, 0x30424000, 0x14400271, 0xb71021,
+0x9443727e, 0x96020000, 0x1462000b, 0x418c0,
+0xb71021, 0x94437280, 0x96020002, 0x14620006,
+0x418c0, 0xb71021, 0x94437282, 0x96020004,
+0x10620027, 0x418c0, 0x2e31021, 0x9442727c,
+0x30428000, 0x1440025e, 0x2e31021, 0x944d727c,
+0x96070000, 0xd28c0, 0xb71021, 0x9442737e,
+0x8003a0d, 0x3021, 0x420c0, 0x2e41021,
+0x9443737c, 0x2e41021, 0x944d737c, 0x30638000,
+0x14600010, 0xd28c0, 0xb71021, 0x9442737e,
+0x1447fff5, 0x1a02021, 0xb71021, 0x94437380,
+0x96020002, 0x5462fff1, 0x420c0, 0xb71021,
+0x94437382, 0x96020004, 0x5462ffec, 0x420c0,
+0x24060001, 0x30c200ff, 0x1040023d, 0x0,
+0x8003a20, 0x24150003, 0x24150001, 0x8f420260,
+0x53102b, 0x10400036, 0x0, 0x8f8300e4,
+0x8f8200e0, 0x10620003, 0x24630008, 0xaf8300e4,
+0xaf8300e8, 0x8ee400c0, 0x8ee500c4, 0x2601821,
+0x1021, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xaee400c0, 0xaee500c4, 0x8ee20058,
+0x24420001, 0xaee20058, 0x8ee20058, 0x8ee2007c,
+0x24420001, 0xaee2007c, 0x8ee2007c, 0x8f8200e0,
+0xafa20010, 0x8f8200e4, 0x3c040001, 0x24845090,
+0xafa20014, 0x8fa60018, 0x8fa7001c, 0x3c050006,
+0xc002407, 0x34a5f203, 0x8003c5f, 0x0,
+0x8ee25240, 0xafa20010, 0x8ee25244, 0x3c040001,
+0x2484509c, 0xafa20014, 0x8ee60e10, 0x8ee70e18,
+0x3c050006, 0xc002407, 0x34a5f202, 0x8ee201c0,
+0x24420001, 0xaee201c0, 0x8003c06, 0x8ee201c0,
+0x96e20468, 0x53102b, 0x54400001, 0x3c168000,
+0x126001cb, 0x3c0e001f, 0x35ceffff, 0x3c0ffff5,
+0x35ef1000, 0x241e0040, 0x8ee2724c, 0x8f430280,
+0x24420001, 0x304207ff, 0x1062019e, 0x0,
+0x12c00012, 0x0, 0x8ee35240, 0x8ee25244,
+0x1062000a, 0x26f85244, 0x8ef45244, 0xafb80024,
+0x8ee35244, 0x21140, 0x24425248, 0x2e28821,
+0x24630001, 0x8003a89, 0x306d00ff, 0x8ee201e0,
+0x24420001, 0xaee201e0, 0x8ee201e0, 0x8ee30e10,
+0x8ee20e18, 0x1062ffca, 0x26f80e18, 0x8ef40e18,
+0xb021, 0xafb80024, 0x8ee30e18, 0x21140,
+0x24420e20, 0x2e28821, 0x24630001, 0x306d01ff,
+0x96e2046a, 0x30420010, 0x10400018, 0x34028100,
+0x9643000c, 0x14620015, 0x0, 0x3c020001,
+0x571021, 0x904283c0, 0x14400010, 0x0,
+0x9642000e, 0xa6220016, 0x8e420008, 0x8e430004,
+0x8e440000, 0x2673fffc, 0xae42000c, 0xae430008,
+0xae440004, 0x9622000e, 0x26100004, 0x24180001,
+0xa3b8002f, 0x34420200, 0xa622000e, 0x8e220000,
+0x8e230004, 0x3c040001, 0x34843800, 0x2003021,
+0x306a0007, 0x20a8023, 0x3641021, 0x202102b,
+0x10400005, 0x26a9821, 0x2041023, 0x3621823,
+0x3c020020, 0x438023, 0x26620007, 0x9623000a,
+0x2418fff8, 0x58c824, 0x6a1821, 0x79102b,
+0x10400002, 0x3206021, 0x606021, 0x1801821,
+0x24620007, 0x2418fff8, 0x586024, 0x26c102b,
+0x14400004, 0x1932823, 0x1832823, 0x8003ac7,
+0xc31021, 0xd31021, 0x4a2023, 0x1c4102b,
+0x54400001, 0x8f2021, 0x25420040, 0x4c102b,
+0x14400035, 0x5821, 0x94c3000c, 0x24020800,
+0x54620032, 0xae260018, 0x3c020001, 0x571021,
+0x904283c0, 0x5440002d, 0xae260018, 0x24c20017,
+0x1c2102b, 0x10400013, 0x0, 0x3c02fff5,
+0x461021, 0x90421017, 0x38430006, 0x2c630001,
+0x38420011, 0x2c420001, 0x621825, 0x10600014,
+0x24c20010, 0x1c2102b, 0x1040000e, 0x0,
+0x3c0bfff5, 0x1665821, 0x956b1010, 0x8003af8,
+0x2562000e, 0x90c20017, 0x38430006, 0x2c630001,
+0x38420011, 0x2c420001, 0x621825, 0x10600005,
+0x1601821, 0x94cb0010, 0x2562000e, 0x4a5821,
+0x1601821, 0x24620007, 0x2418fff8, 0x585824,
+0xc31021, 0x4a2023, 0x1c4102b, 0x10400002,
+0x1632823, 0x8f2021, 0xae260018, 0x3c020001,
+0x571021, 0x904283c0, 0x2102b, 0x216c0,
+0x15600002, 0xafa20044, 0x1805821, 0x30820001,
+0x10400007, 0x4021, 0x90880000, 0x24840001,
+0x1c4102b, 0x10400002, 0x24a5ffff, 0x8f2021,
+0x50a00012, 0x81c02, 0x2ca20002, 0x54400009,
+0x24a5ffff, 0x94820000, 0x24840002, 0x1024021,
+0x1c4102b, 0x10400006, 0x24a5fffe, 0x8003b25,
+0x8f2021, 0x90820000, 0x21200, 0x1024021,
+0x14a0fff2, 0x2ca20002, 0x81c02, 0x3102ffff,
+0x624021, 0x3108ffff, 0x1402821, 0x11400011,
+0x2002021, 0x2ca20002, 0x54400009, 0x24a5ffff,
+0x94820000, 0x24840002, 0x1024021, 0x1c4102b,
+0x10400006, 0x24a5fffe, 0x8003b3c, 0x8f2021,
+0x90820000, 0x21200, 0x1024021, 0x14a0fff2,
+0x2ca20002, 0x81c02, 0x3102ffff, 0x624021,
+0x81c02, 0x3102ffff, 0x8f890120, 0x624021,
+0x27623800, 0x25230020, 0x62102b, 0x14400002,
+0x3108ffff, 0x27633000, 0x8f820128, 0x10620004,
+0x0, 0x8f820124, 0x14620007, 0x1402821,
+0x8ee201a4, 0x3821, 0x24420001, 0xaee201a4,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 21'
echo 'File patch-2.2.4 is continued in part 22'
echo 22 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 20 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 20; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+0x0, 0x8f820040, 0x30420001, 0x14400008,
+0x0, 0x8f430104, 0x24020001, 0x10620004,
+0x0, 0x8f420264, 0x10400006, 0x0,
+0x8ee2017c, 0x24420001, 0xaee2017c, 0x80014c5,
+0x8ee2017c, 0x8f820044, 0x34420004, 0xaf820044,
+0x8ee20178, 0x24420001, 0xaee20178, 0x8ee20178,
+0x8f8200d8, 0x8f8300d4, 0x431023, 0xaee2726c,
+0x8ee2726c, 0x1c400003, 0x3c030001, 0x431021,
+0xaee2726c, 0xc004068, 0x0, 0xc004440,
+0xaf800228, 0x8fbf0024, 0x8fb00020, 0x3e00008,
+0x27bd0028, 0x3e00008, 0x0, 0x3e00008,
+0x0, 0x0, 0x0, 0x2402002c,
+0xaf820050, 0xaee07274, 0x8f420238, 0xaee27278,
+0x8f820054, 0x24420067, 0xaf820058, 0xaee07b88,
+0xaee07b8c, 0xaee07b84, 0x3c010001, 0x370821,
+0xac2083bc, 0x3c010001, 0x370821, 0x3e00008,
+0xa02083b9, 0x27bdffd8, 0xafbf0024, 0xafb00020,
+0x8f820054, 0x3c030001, 0x8c635488, 0x24420067,
+0x1060000d, 0xaf820058, 0x3c020001, 0x571021,
+0x904283b8, 0x10400005, 0x3c030200, 0x3c010001,
+0x370821, 0x8001503, 0xa02083b8, 0x8ee20000,
+0x431025, 0xaee20000, 0x8f420218, 0x30420100,
+0x104000c6, 0x0, 0x8f8200b0, 0x30420004,
+0x104000c2, 0x0, 0x3c030001, 0x771821,
+0x8c6383d0, 0x8f820104, 0x146200b4, 0x0,
+0x3c030001, 0x771821, 0x8c6383d4, 0x8f8200b4,
+0x146200ae, 0x0, 0x8f8200b0, 0x3c030080,
+0x431024, 0x1040000d, 0x0, 0x8f82011c,
+0x34420002, 0xaf82011c, 0x8f8200b0, 0x2403fffb,
+0x431024, 0xaf8200b0, 0x8f82011c, 0x2403fffd,
+0x431024, 0x80015cc, 0xaf82011c, 0x3c030001,
+0x771821, 0x8c6383d0, 0x8f820104, 0x14620082,
+0x0, 0x3c030001, 0x771821, 0x8c6383d4,
+0x8f8200b4, 0x1462007c, 0x0, 0x3c070001,
+0xf73821, 0x8ce783d0, 0x8f8200b0, 0x3c040001,
+0x24844a40, 0xafa00014, 0xafa20010, 0x8f8600b0,
+0x3c050005, 0xc002407, 0x34a50900, 0x8f82011c,
+0x34420002, 0xaf82011c, 0x8f830104, 0x8f8200b0,
+0x34420001, 0xaf8200b0, 0xaf830104, 0x8f830120,
+0x27623800, 0x24660020, 0xc2102b, 0x50400001,
+0x27663000, 0x8f820128, 0x10c20004, 0x0,
+0x8f820124, 0x14c20006, 0x0, 0x8ee201a4,
+0x24420001, 0xaee201a4, 0x80015a0, 0x8ee201a4,
+0x8f440208, 0x8f45020c, 0x26e20030, 0xac620008,
+0x24020400, 0xa462000e, 0x2402000f, 0xac620018,
+0xac60001c, 0xac640000, 0xac650004, 0x8ee204c4,
+0xac620010, 0xaf860120, 0x92e24e20, 0x14400037,
+0x0, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x8c830000, 0x24020007, 0x1462001f,
+0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b,
+0x24030040, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e34, 0x8ee54e30, 0x24420001, 0x10430007,
+0x0, 0x8ee24e34, 0x24420001, 0x10a20005,
+0x0, 0x800158a, 0x0, 0x14a00005,
+0x0, 0x8f820128, 0x24420020, 0xaf820128,
+0x8f820128, 0x8c820004, 0x2c420011, 0x50400013,
+0xac800000, 0x80015a0, 0x0, 0x8ee24e30,
+0x24030040, 0x24420001, 0x50430003, 0x1021,
+0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x24020007,
+0xac820000, 0x24020001, 0xac820004, 0x8f82011c,
+0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201e4,
+0x3c070001, 0xf73821, 0x8ce783d0, 0x24420001,
+0xaee201e4, 0x8ee201e4, 0x3c040001, 0x24844a4c,
+0x80015bd, 0xafa00010, 0x8f820104, 0x3c010001,
+0x370821, 0xac2283d0, 0x8f8200b4, 0x3c070001,
+0xf73821, 0x8ce783d0, 0x3c040001, 0x24844a54,
+0x3c010001, 0x370821, 0xac2283d4, 0xafa00010,
+0xafa00014, 0x8f8600b0, 0x3c050005, 0xc002407,
+0x34a50900, 0x80015cc, 0x0, 0x8f820104,
+0x3c010001, 0x370821, 0xac2283d0, 0x8f8200b4,
+0x3c010001, 0x370821, 0xac2283d4, 0x8ee27274,
+0x92e304f4, 0x24420067, 0x14600006, 0xaee27274,
+0x8ee27274, 0x8f430234, 0x43102b, 0x1440007b,
+0x0, 0x8ee304e4, 0x8ee204f8, 0x14620004,
+0x0, 0x92e204f4, 0x50400074, 0xa2e004f4,
+0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
+0x50400001, 0x27663000, 0x8f820128, 0x10c20004,
+0x0, 0x8f820124, 0x14c20007, 0x0,
+0x8ee201a4, 0x8021, 0x24420001, 0xaee201a4,
+0x8001637, 0x8ee201a4, 0x8ee204e4, 0xac62001c,
+0x8ee404b0, 0x8ee504b4, 0x2462001c, 0xac620008,
+0x24020008, 0xa462000e, 0x24020011, 0xac620018,
+0xac640000, 0xac650004, 0x8ee204c4, 0xac620010,
+0xaf860120, 0x92e24e20, 0x14400037, 0x24100001,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c830000, 0x24020012, 0x1462001f, 0x0,
+0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x24030040,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34,
+0x8ee54e30, 0x24420001, 0x10430007, 0x0,
+0x8ee24e34, 0x24420001, 0x10a20005, 0x0,
+0x8001621, 0x0, 0x14a00005, 0x0,
+0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
+0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
+0x8001637, 0x0, 0x8ee24e30, 0x24030040,
+0x24420001, 0x50430003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x24020012, 0xac820000,
+0x24020001, 0xac820004, 0x5600000b, 0x24100001,
+0x8ee204e4, 0x3c040001, 0x24844a5c, 0xafa00014,
+0xafa20010, 0x8ee60608, 0x8f470228, 0x3c050009,
+0xc002407, 0x34a5f006, 0x16000003, 0x24020001,
+0x8001650, 0xa2e204f4, 0x8ee20170, 0x24420001,
+0xaee20170, 0x8ee20170, 0x8ee204e4, 0xa2e004f4,
+0xaee004f0, 0xaee07274, 0xaee204f8, 0x8ee20e1c,
+0x1040006d, 0x0, 0x8f830120, 0x27623800,
+0x24660020, 0xc2102b, 0x50400001, 0x27663000,
+0x8f820128, 0x10c20004, 0x0, 0x8f820124,
+0x14c20007, 0x0, 0x8ee201a4, 0x8021,
+0x24420001, 0xaee201a4, 0x80016ad, 0x8ee201a4,
+0x8ee2724c, 0xac62001c, 0x8ee404a8, 0x8ee504ac,
+0x2462001c, 0xac620008, 0x24020008, 0xa462000e,
+0x24020011, 0xac620018, 0xac640000, 0xac650004,
+0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20,
+0x14400037, 0x24100001, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x8c830000, 0x24020012,
+0x1462001f, 0x0, 0x8ee34e30, 0x8ee24e34,
+0x1062001b, 0x24030040, 0x8c820004, 0x24420001,
+0xac820004, 0x8ee24e34, 0x8ee54e30, 0x24420001,
+0x10430007, 0x0, 0x8ee24e34, 0x24420001,
+0x10a20005, 0x0, 0x8001697, 0x0,
+0x14a00005, 0x0, 0x8f820128, 0x24420020,
+0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
+0x50400013, 0xac800000, 0x80016ad, 0x0,
+0x8ee24e30, 0x24030040, 0x24420001, 0x50430003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x24020012, 0xac820000, 0x24020001, 0xac820004,
+0x5600000b, 0x24100001, 0x8ee2724c, 0x3c040001,
+0x24844a68, 0xafa00014, 0xafa20010, 0x8ee6724c,
+0x8f470280, 0x3c050009, 0xc002407, 0x34a5f008,
+0x56000001, 0xaee00e1c, 0x8ee20174, 0x24420001,
+0xaee20174, 0x8ee20174, 0x8ee24e24, 0x10400019,
+0x0, 0xaee04e24, 0x8f820040, 0x30420001,
+0x14400008, 0x0, 0x8f430104, 0x24020001,
+0x10620004, 0x0, 0x8f420264, 0x10400006,
+0x0, 0x8ee2017c, 0x24420001, 0xaee2017c,
+0x80016da, 0x8ee2017c, 0x8f820044, 0x34420004,
+0xaf820044, 0x8ee20178, 0x24420001, 0xaee20178,
+0x8ee20178, 0x8ee27278, 0x2442ff99, 0xaee27278,
+0x8ee27278, 0x1c4002ad, 0x0, 0x8f420238,
+0x104002aa, 0x0, 0x3c020001, 0x571021,
+0x904283e0, 0x144002a5, 0x0, 0x8f420080,
+0xaee2004c, 0x8f4200c0, 0xaee20048, 0x8f420084,
+0xaee20038, 0x8f420084, 0xaee20244, 0x8f420088,
+0xaee20248, 0x8f42008c, 0xaee2024c, 0x8f420090,
+0xaee20250, 0x8f420094, 0xaee20254, 0x8f420098,
+0xaee20258, 0x8f42009c, 0xaee2025c, 0x8f4200a0,
+0xaee20260, 0x8f4200a4, 0xaee20264, 0x8f4200a8,
+0xaee20268, 0x8f4200ac, 0xaee2026c, 0x8f4200b0,
+0xaee20270, 0x8f4200b4, 0xaee20274, 0x8f4200b8,
+0xaee20278, 0x8f4200bc, 0x24040001, 0xaee2027c,
+0xaee0003c, 0x41080, 0x571021, 0x8ee3003c,
+0x8c420244, 0x24840001, 0x621821, 0x2c82000f,
+0xaee3003c, 0x1440fff8, 0x41080, 0x8f4200cc,
+0xaee20050, 0x8f4200d0, 0xaee20054, 0x8f830120,
+0x27623800, 0x24660020, 0xc2102b, 0x50400001,
+0x27663000, 0x8f820128, 0x10c20004, 0x0,
+0x8f820124, 0x14c20007, 0x0, 0x8ee201a4,
+0x8021, 0x24420001, 0xaee201a4, 0x8001775,
+0x8ee201a4, 0x8f440208, 0x8f45020c, 0x26e20030,
+0xac620008, 0x24020400, 0xa462000e, 0x2402000f,
+0xac620018, 0xac60001c, 0xac640000, 0xac650004,
+0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20,
+0x14400037, 0x24100001, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x8c830000, 0x24020007,
+0x1462001f, 0x0, 0x8ee34e30, 0x8ee24e34,
+0x1062001b, 0x24030040, 0x8c820004, 0x24420001,
+0xac820004, 0x8ee24e34, 0x8ee54e30, 0x24420001,
+0x10430007, 0x0, 0x8ee24e34, 0x24420001,
+0x10a20005, 0x0, 0x800175f, 0x0,
+0x14a00005, 0x0, 0x8f820128, 0x24420020,
+0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
+0x50400013, 0xac800000, 0x8001775, 0x0,
+0x8ee24e30, 0x24030040, 0x24420001, 0x50430003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x24020007, 0xac820000, 0x24020001, 0xac820004,
+0x12000212, 0x3c020400, 0xafa20018, 0x3c020001,
+0x571021, 0x904283b0, 0x1040010b, 0x0,
+0x8ee20608, 0x8f430228, 0x24420001, 0x304a00ff,
+0x514300fd, 0xafa00010, 0x8ee20608, 0x210c0,
+0x571021, 0x8fa30018, 0x8fa4001c, 0xac43060c,
+0xac440610, 0x8f830054, 0x8f820054, 0x24690032,
+0x1221023, 0x2c420033, 0x1040006a, 0x5821,
+0x24180008, 0x240f000d, 0x240d0007, 0x240c0040,
+0x240e0001, 0x8f870120, 0x27623800, 0x24e80020,
+0x102102b, 0x50400001, 0x27683000, 0x8f820128,
+0x11020004, 0x0, 0x8f820124, 0x15020007,
+0x1021, 0x8ee201a4, 0x8021, 0x24420001,
+0xaee201a4, 0x80017f3, 0x8ee201a4, 0x8ee40608,
+0x420c0, 0x801821, 0x8ee40430, 0x8ee50434,
+0xa32821, 0xa3302b, 0x822021, 0x862021,
+0xace40000, 0xace50004, 0x8ee20608, 0xa4f8000e,
+0xacef0018, 0xacea001c, 0x210c0, 0x2442060c,
+0x2e21021, 0xace20008, 0x8ee204c4, 0xace20010,
+0xaf880120, 0x92e24e20, 0x14400033, 0x24100001,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c820000, 0x144d001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x0, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30,
+0x24420001, 0x104c0007, 0x0, 0x8ee24e34,
+0x24420001, 0x10620005, 0x0, 0x80017e0,
+0x0, 0x14600005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400010, 0xac800000, 0x80017f3,
+0x0, 0x8ee24e30, 0x24420001, 0x504c0003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0xac8d0000, 0xac8e0004, 0x56000006, 0x240b0001,
+0x8f820054, 0x1221023, 0x2c420033, 0x1440ff9d,
+0x0, 0x316300ff, 0x24020001, 0x14620077,
+0x3c050009, 0xaeea0608, 0x8f830054, 0x8f820054,
+0x24690032, 0x1221023, 0x2c420033, 0x10400061,
+0x5821, 0x240d0008, 0x240c0011, 0x24080012,
+0x24070040, 0x240a0001, 0x8f830120, 0x27623800,
+0x24660020, 0xc2102b, 0x50400001, 0x27663000,
+0x8f820128, 0x10c20004, 0x0, 0x8f820124,
+0x14c20007, 0x0, 0x8ee201a4, 0x8021,
+0x24420001, 0xaee201a4, 0x800185f, 0x8ee201a4,
+0x8ee20608, 0xac62001c, 0x8ee404a0, 0x8ee504a4,
+0x2462001c, 0xac620008, 0xa46d000e, 0xac6c0018,
+0xac640000, 0xac650004, 0x8ee204c4, 0xac620010,
+0xaf860120, 0x92e24e20, 0x14400033, 0x24100001,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c820000, 0x1448001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x0, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30,
+0x24420001, 0x10470007, 0x0, 0x8ee24e34,
+0x24420001, 0x10620005, 0x0, 0x800184c,
+0x0, 0x14600005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400010, 0xac800000, 0x800185f,
+0x0, 0x8ee24e30, 0x24420001, 0x50470003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0xac880000, 0xac8a0004, 0x56000006, 0x240b0001,
+0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6,
+0x0, 0x316300ff, 0x24020001, 0x14620003,
+0x3c050009, 0x800197c, 0x24100001, 0x3c040001,
+0x24844a74, 0xafa00010, 0xafa00014, 0x8f860120,
+0x8f870124, 0x800187b, 0x34a5f011, 0x3c040001,
+0x24844a80, 0xafa00010, 0xafa00014, 0x8f860120,
+0x8f870124, 0x34a5f010, 0xc002407, 0x8021,
+0x800197c, 0x0, 0x3c040001, 0x24844a8c,
+0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009,
+0x8001975, 0x34a5f00f, 0x8ee20608, 0x8f430228,
+0x24420001, 0x304900ff, 0x512300e2, 0xafa00010,
+0x8ee20608, 0x210c0, 0x571021, 0x8fa30018,
+0x8fa4001c, 0xac43060c, 0xac440610, 0x8f870120,
+0x27623800, 0x24e80020, 0x102102b, 0x50400001,
+0x27683000, 0x8f820128, 0x11020004, 0x0,
+0x8f820124, 0x15020007, 0x1021, 0x8ee201a4,
+0x8021, 0x24420001, 0xaee201a4, 0x80018f7,
+0x8ee201a4, 0x8ee40608, 0x420c0, 0x801821,
+0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b,
+0x822021, 0x862021, 0xace40000, 0xace50004,
+0x8ee30608, 0x24020008, 0xa4e2000e, 0x2402000d,
+0xace20018, 0xace9001c, 0x318c0, 0x2463060c,
+0x2e31021, 0xace20008, 0x8ee204c4, 0xace20010,
+0xaf880120, 0x92e24e20, 0x14400037, 0x24100001,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c830000, 0x24020007, 0x1462001f, 0x0,
+0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x24030040,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34,
+0x8ee54e30, 0x24420001, 0x10430007, 0x0,
+0x8ee24e34, 0x24420001, 0x10a20005, 0x0,
+0x80018e1, 0x0, 0x14a00005, 0x0,
+0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
+0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
+0x80018f7, 0x0, 0x8ee24e30, 0x24030040,
+0x24420001, 0x50430003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x24020007, 0xac820000,
+0x24020001, 0xac820004, 0x5600000c, 0xaee90608,
+0x3c040001, 0x24844a98, 0xafa00010, 0xafa00014,
+0x8ee60608, 0x8f470228, 0x3c050009, 0xc002407,
+0x34a5f000, 0x800197c, 0x0, 0x8f830120,
+0x27623800, 0x24660020, 0xc2102b, 0x50400001,
+0x27663000, 0x8f820128, 0x10c20004, 0x0,
+0x8f820124, 0x14c20007, 0x0, 0x8ee201a4,
+0x8021, 0x24420001, 0xaee201a4, 0x800195e,
+0x8ee201a4, 0x8ee20608, 0xac62001c, 0x8ee404a0,
+0x8ee504a4, 0x2462001c, 0xac620008, 0x24020008,
+0xa462000e, 0x24020011, 0xac620018, 0xac640000,
+0xac650004, 0x8ee204c4, 0xac620010, 0xaf860120,
+0x92e24e20, 0x14400037, 0x24100001, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x8c830000,
+0x24020012, 0x1462001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x24030040, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee54e30,
+0x24420001, 0x10430007, 0x0, 0x8ee24e34,
+0x24420001, 0x10a20005, 0x0, 0x8001948,
+0x0, 0x14a00005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400013, 0xac800000, 0x800195e,
+0x0, 0x8ee24e30, 0x24030040, 0x24420001,
+0x50430003, 0x1021, 0x8ee24e30, 0x24420001,
+0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x24020012, 0xac820000, 0x24020001,
+0xac820004, 0x5600001d, 0x24100001, 0x3c040001,
+0x24844aa0, 0xafa00010, 0xafa00014, 0x8ee60608,
+0x8f470228, 0x3c050009, 0xc002407, 0x34a5f001,
+0x8ee201b0, 0x24420001, 0xaee201b0, 0x800197c,
+0x8ee201b0, 0x3c040001, 0x24844aac, 0xafa00014,
+0x8ee60608, 0x8f470228, 0x3c050009, 0x34a5f005,
+0xc002407, 0x0, 0x8ee201ac, 0x8021,
+0x24420001, 0xaee201ac, 0x8ee201ac, 0x1200000c,
+0x24020001, 0x3c010001, 0x370821, 0xa02083b0,
+0x8f420238, 0x8ee30158, 0x24630001, 0xaee30158,
+0x8ee30158, 0x800198c, 0xaee27278, 0x24020001,
+0x3c010001, 0x370821, 0xa02283b0, 0x3c020001,
+0x8c425488, 0x10400187, 0x0, 0x8ee27b84,
+0x24430001, 0x284200c9, 0x144001a4, 0xaee37b84,
+0x8ee204d4, 0x30420002, 0x14400119, 0xaee07b84,
+0x8ee204d4, 0x3c030600, 0x34631000, 0x34420002,
+0xaee204d4, 0xafa30018, 0x8ee20608, 0x8f430228,
+0x24420001, 0x304a00ff, 0x514300fd, 0xafa00010,
+0x8ee20608, 0x210c0, 0x571021, 0x8fa30018,
+0x8fa4001c, 0xac43060c, 0xac440610, 0x8f830054,
+0x8f820054, 0x24690032, 0x1221023, 0x2c420033,
+0x1040006a, 0x5821, 0x24180008, 0x240f000d,
+0x240d0007, 0x240c0040, 0x240e0001, 0x8f870120,
+0x27623800, 0x24e80020, 0x102102b, 0x50400001,
+0x27683000, 0x8f820128, 0x11020004, 0x0,
+0x8f820124, 0x15020007, 0x1021, 0x8ee201a4,
+0x8021, 0x24420001, 0xaee201a4, 0x8001a15,
+0x8ee201a4, 0x8ee40608, 0x420c0, 0x801821,
+0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b,
+0x822021, 0x862021, 0xace40000, 0xace50004,
+0x8ee20608, 0xa4f8000e, 0xacef0018, 0xacea001c,
+0x210c0, 0x2442060c, 0x2e21021, 0xace20008,
+0x8ee204c4, 0xace20010, 0xaf880120, 0x92e24e20,
+0x14400033, 0x24100001, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x8c820000, 0x144d001f,
+0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b,
+0x0, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e34, 0x8ee34e30, 0x24420001, 0x104c0007,
+0x0, 0x8ee24e34, 0x24420001, 0x10620005,
+0x0, 0x8001a02, 0x0, 0x14600005,
+0x0, 0x8f820128, 0x24420020, 0xaf820128,
+0x8f820128, 0x8c820004, 0x2c420011, 0x50400010,
+0xac800000, 0x8001a15, 0x0, 0x8ee24e30,
+0x24420001, 0x504c0003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0xac8d0000, 0xac8e0004,
+0x56000006, 0x240b0001, 0x8f820054, 0x1221023,
+0x2c420033, 0x1440ff9d, 0x0, 0x316300ff,
+0x24020001, 0x54620078, 0xafa00010, 0xaeea0608,
+0x8f830054, 0x8f820054, 0x24690032, 0x1221023,
+0x2c420033, 0x10400061, 0x5821, 0x240d0008,
+0x240c0011, 0x24080012, 0x24070040, 0x240a0001,
+0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
+0x50400001, 0x27663000, 0x8f820128, 0x10c20004,
+0x0, 0x8f820124, 0x14c20007, 0x0,
+0x8ee201a4, 0x8021, 0x24420001, 0xaee201a4,
+0x8001a81, 0x8ee201a4, 0x8ee20608, 0xac62001c,
+0x8ee404a0, 0x8ee504a4, 0x2462001c, 0xac620008,
+0xa46d000e, 0xac6c0018, 0xac640000, 0xac650004,
+0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20,
+0x14400033, 0x24100001, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x8c820000, 0x1448001f,
+0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b,
+0x0, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e34, 0x8ee34e30, 0x24420001, 0x10470007,
+0x0, 0x8ee24e34, 0x24420001, 0x10620005,
+0x0, 0x8001a6e, 0x0, 0x14600005,
+0x0, 0x8f820128, 0x24420020, 0xaf820128,
+0x8f820128, 0x8c820004, 0x2c420011, 0x50400010,
+0xac800000, 0x8001a81, 0x0, 0x8ee24e30,
+0x24420001, 0x50470003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0xac880000, 0xac8a0004,
+0x56000006, 0x240b0001, 0x8f820054, 0x1221023,
+0x2c420033, 0x1440ffa6, 0x0, 0x316300ff,
+0x24020001, 0x10620022, 0x0, 0x3c040001,
+0x24844a74, 0xafa00010, 0xafa00014, 0x8f860120,
+0x8f870124, 0x3c050009, 0xc002407, 0x34a5f011,
+0x8001aad, 0x0, 0x3c040001, 0x24844a80,
+0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009,
+0xc002407, 0x34a5f010, 0x8001aad, 0x0,
+0x3c040001, 0x24844a8c, 0xafa00014, 0x8ee60608,
+0x8f470228, 0x3c050009, 0xc002407, 0x34a5f00f,
+0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac,
+0x8ee2015c, 0x24420001, 0xaee2015c, 0x8ee2015c,
+0x8ee204d4, 0x30420001, 0x10400055, 0x0,
+0x8f420218, 0x30420080, 0x10400029, 0x0,
+0x8f820044, 0x34420040, 0xaf820044, 0x8ee27b7c,
+0x402821, 0x8ee200c0, 0x8ee300c4, 0x24060000,
+0x2407ffff, 0x2021, 0x461024, 0x1444000d,
+0x671824, 0x1465000b, 0x0, 0x8ee27b80,
+0x402821, 0x8ee200e0, 0x8ee300e4, 0x2021,
+0x461024, 0x14440003, 0x671824, 0x1065000b,
+0x0, 0x8ee200c0, 0x8ee300c4, 0x8ee400e0,
+0x8ee500e4, 0xaee37b7c, 0xaee57b80, 0x8f820044,
+0x38420020, 0x8001b38, 0xaf820044, 0x8f820044,
+0x2403ffdf, 0x431024, 0x8001b38, 0xaf820044,
+0x8f820044, 0x2403ffdf, 0x431024, 0xaf820044,
+0x8ee27b7c, 0x402821, 0x8ee200c0, 0x8ee300c4,
+0x24060000, 0x2407ffff, 0x2021, 0x461024,
+0x1444000d, 0x671824, 0x1465000b, 0x0,
+0x8ee27b80, 0x402821, 0x8ee200e0, 0x8ee300e4,
+0x2021, 0x461024, 0x14440003, 0x671824,
+0x1065000b, 0x0, 0x8ee200c0, 0x8ee300c4,
+0x8ee400e0, 0x8ee500e4, 0xaee37b7c, 0xaee57b80,
+0x8f820044, 0x38420040, 0x8001b38, 0xaf820044,
+0x8f820044, 0x34420040, 0x8001b38, 0xaf820044,
+0x8f820044, 0x34420040, 0xaf820044, 0x8ee27b8c,
+0x24430001, 0x28420015, 0x14400028, 0xaee37b8c,
+0x8f820044, 0x38420020, 0xaf820044, 0x8001b38,
+0xaee07b8c, 0x8ee204d4, 0x30420001, 0x10400011,
+0x0, 0x8f420218, 0x30420080, 0x10400009,
+0x0, 0x8f820044, 0x34420020, 0xaf820044,
+0x8f820044, 0x2403ffbf, 0x431024, 0x8001b36,
+0xaf820044, 0x8f820044, 0x34420060, 0x8001b36,
+0xaf820044, 0x8f820044, 0x34420040, 0xaf820044,
+0x8ee27b88, 0x24430001, 0x28421389, 0x14400005,
+0xaee37b88, 0x8f820044, 0x38420020, 0xaf820044,
+0xaee07b88, 0xc0045c1, 0x0, 0x8fbf0024,
+0x8fb00020, 0x3e00008, 0x27bd0028, 0x27bdffb8,
+0xafbf0044, 0xafb60040, 0xafb5003c, 0xafb40038,
+0xafb30034, 0xafb20030, 0xafb1002c, 0xafb00028,
+0x8f960064, 0x32c20004, 0x1040000c, 0x24020004,
+0xaf820064, 0x8f420114, 0xaee204e0, 0x8f820060,
+0x34420008, 0xaf820060, 0x8ee2016c, 0x24420001,
+0xaee2016c, 0x80022f4, 0x8ee2016c, 0x32c20001,
+0x10400004, 0x24020001, 0xaf820064, 0x80022f4,
+0x0, 0x32c20002, 0x1440000c, 0x3c050003,
+0x3c040001, 0x24844b24, 0x34a50001, 0x2c03021,
+0x3821, 0xafa00010, 0xc002407, 0xafa00014,
+0x2402fff8, 0x80022f4, 0xaf820064, 0x8f43022c,
+0x8f42010c, 0x5062000c, 0xafa00010, 0x8f42022c,
+0x21080, 0x5a1021, 0x8c420300, 0xafa20020,
+0x8f42022c, 0x24070001, 0x24420001, 0x3042003f,
+0x8001b80, 0xaf42022c, 0x3c040001, 0x24844b30,
+0xafa00014, 0x8f46022c, 0x8f47010c, 0x3c050003,
+0xc002407, 0x34a5f01f, 0x3821, 0x14e00003,
+0x0, 0x80022ed, 0xaf960064, 0x93a20020,
+0x2443ffff, 0x2c620011, 0x10400658, 0x31080,
+0x3c010001, 0x220821, 0x8c224be8, 0x400008,
+0x0, 0x8fa20020, 0x30420fff, 0xaee20e0c,
+0x8f820060, 0x34420200, 0xaf820060, 0x8ee20118,
+0x24420001, 0xaee20118, 0x80022e8, 0x8ee20118,
+0x8fa20020, 0x24030001, 0x3c010001, 0x370821,
+0xa02383b1, 0x30420fff, 0xaee25238, 0x8f820060,
+0x34420100, 0xaf820060, 0x8ee20144, 0x24420001,
+0xaee20144, 0x80022e8, 0x8ee20144, 0x8fa20020,
+0x21200, 0x22502, 0x24020001, 0x10820005,
+0x24020002, 0x10820009, 0x2402fffe, 0x8001bc9,
+0xafa00010, 0x8ee204d4, 0xaee40070, 0xaee40074,
+0x34420001, 0x8001bbd, 0xaee204d4, 0x8ee304d4,
+0xaee40070, 0xaee40074, 0x621824, 0xaee304d4,
+0x8f840054, 0x41442, 0x41c82, 0x431021,
+0x41cc2, 0x431023, 0x41d02, 0x431021,
+0x41d42, 0x431023, 0x8001bd0, 0xaee20078,
+0x3c040001, 0x24844b3c, 0xafa00014, 0x8fa60020,
+0x3c050003, 0xc002407, 0x34a50004, 0x8ee20110,
+0x24420001, 0xaee20110, 0x80022e8, 0x8ee20110,
+0x27440212, 0xc0022fe, 0x24050006, 0x3049001f,
+0x920c0, 0x2e41021, 0x9442727c, 0x30424000,
+0x1040000a, 0x971021, 0x97430212, 0xa443727e,
+0x8f430214, 0x971021, 0xac437280, 0x2e41821,
+0x34028000, 0x8001c79, 0xa462727c, 0x9443727e,
+0x97420212, 0x14620006, 0x2e41021, 0x971021,
+0x8c437280, 0x8f420214, 0x1062009f, 0x2e41021,
+0x9442727c, 0x30428000, 0x1040002a, 0x2406ffff,
+0x2021, 0x410c0, 0x2e21021, 0x9442737c,
+0x30424000, 0x54400005, 0x803021, 0x24840001,
+0x2c820080, 0x1440fff8, 0x410c0, 0x4c10010,
+0x618c0, 0x610c0, 0x571821, 0x8c63737c,
+0x571021, 0xafa30010, 0x8c427380, 0x3c040001,
+0x24844b48, 0xafa20014, 0x8f470214, 0x3c050003,
+0xc002407, 0x34a50013, 0x8001c90, 0x3c020800,
+0x97440212, 0x771021, 0xa444737e, 0x8f440214,
+0x771021, 0x2e31821, 0xac447380, 0x34028000,
+0xa462737c, 0x910c0, 0x2e21021, 0x8001c79,
+0xa446727c, 0x2e41021, 0x9445727c, 0x8001c2e,
+0x510c0, 0x9443737e, 0x97420212, 0x14620006,
+0x510c0, 0x971021, 0x8c437380, 0x8f420214,
+0x10620065, 0x510c0, 0x2e21021, 0x9445737c,
+0x510c0, 0x2e21021, 0x9442737c, 0x30428000,
+0x1040fff0, 0x971021, 0x520c0, 0x971021,
+0x9443737e, 0x97420212, 0x14620006, 0x2406ffff,
+0x971021, 0x8c437380, 0x8f420214, 0x10620053,
+0x3c020800, 0x2021, 0x410c0, 0x2e21021,
+0x9442737c, 0x30424000, 0x54400005, 0x803021,
+0x24840001, 0x2c820080, 0x1440fff8, 0x410c0,
+0x4c10023, 0x618c0, 0x910c0, 0x571821,
+0x8c63727c, 0x571021, 0xafa30010, 0x8c427280,
+0x3c040001, 0x24844b54, 0xafa20014, 0x8f470214,
+0x3c050003, 0xc002407, 0x34a5f017, 0x8001c90,
+0x3c020800, 0x8f430210, 0xb71021, 0xac43777c,
+0x8f430214, 0xb71021, 0xac437780, 0x3c020001,
+0x571021, 0x8c4283b4, 0x24420001, 0x3c010001,
+0x370821, 0xac2283b4, 0x3c030001, 0x771821,
+0x8c6383b4, 0x2e51021, 0x8001c82, 0xa443777c,
+0x97440212, 0x771021, 0xa444737e, 0x8f440214,
+0x771021, 0x2e31821, 0xac447380, 0x34028000,
+0xa462737c, 0x510c0, 0x2e21021, 0xa446737c,
+0x2021, 0x428c0, 0x2e51021, 0x9442777c,
+0x1040ffdc, 0x24840001, 0x2c820080, 0x5440fffa,
+0x428c0, 0x92e204d8, 0x10400006, 0x24020001,
+0x8ee304dc, 0x1221004, 0x621825, 0x8001c8f,
+0xaee304dc, 0x8f830228, 0x24020001, 0x1221004,
+0x621825, 0xaf830228, 0x3c020800, 0x34421000,
+0xafa20018, 0x8ee20608, 0x8f430228, 0x24420001,
+0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee20608,
+0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c,
+0xac43060c, 0xac440610, 0x8f830054, 0x8f820054,
+0x24690032, 0x1221023, 0x2c420033, 0x1040006a,
+0x5821, 0x24100008, 0x240f000d, 0x240d0007,
+0x240c0040, 0x240e0001, 0x8f870120, 0x27623800,
+0x24e80020, 0x102102b, 0x50400001, 0x27683000,
+0x8f820128, 0x11020004, 0x0, 0x8f820124,
+0x15020007, 0x1021, 0x8ee201a4, 0x3821,
+0x24420001, 0xaee201a4, 0x8001d08, 0x8ee201a4,
+0x8ee40608, 0x420c0, 0x801821, 0x8ee40430,
+0x8ee50434, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xace40000, 0xace50004, 0x8ee20608,
+0xa4f0000e, 0xacef0018, 0xacea001c, 0x210c0,
+0x2442060c, 0x2e21021, 0xace20008, 0x8ee204c4,
+0xace20010, 0xaf880120, 0x92e24e20, 0x14400033,
+0x24070001, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x8c820000, 0x144d001f, 0x0,
+0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x0,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34,
+0x8ee34e30, 0x24420001, 0x104c0007, 0x0,
+0x8ee24e34, 0x24420001, 0x10620005, 0x0,
+0x8001cf5, 0x0, 0x14600005, 0x0,
+0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
+0x8c820004, 0x2c420011, 0x50400010, 0xac800000,
+0x8001d08, 0x0, 0x8ee24e30, 0x24420001,
+0x504c0003, 0x1021, 0x8ee24e30, 0x24420001,
+0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0xac8d0000, 0xac8e0004, 0x54e00006,
+0x240b0001, 0x8f820054, 0x1221023, 0x2c420033,
+0x1440ff9d, 0x0, 0x316300ff, 0x24020001,
+0x54620078, 0xafa00010, 0xaeea0608, 0x8f830054,
+0x8f820054, 0x24690032, 0x1221023, 0x2c420033,
+0x10400061, 0x5821, 0x240e0008, 0x240d0011,
+0x240a0012, 0x24080040, 0x240c0001, 0x8f830120,
+0x27623800, 0x24660020, 0xc2102b, 0x50400001,
+0x27663000, 0x8f820128, 0x10c20004, 0x0,
+0x8f820124, 0x14c20007, 0x0, 0x8ee201a4,
+0x3821, 0x24420001, 0xaee201a4, 0x8001d74,
+0x8ee201a4, 0x8ee20608, 0xac62001c, 0x8ee404a0,
+0x8ee504a4, 0x2462001c, 0xac620008, 0xa46e000e,
+0xac6d0018, 0xac640000, 0xac650004, 0x8ee204c4,
+0xac620010, 0xaf860120, 0x92e24e20, 0x14400033,
+0x24070001, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x8c820000, 0x144a001f, 0x0,
+0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x0,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34,
+0x8ee34e30, 0x24420001, 0x10480007, 0x0,
+0x8ee24e34, 0x24420001, 0x10620005, 0x0,
+0x8001d61, 0x0, 0x14600005, 0x0,
+0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
+0x8c820004, 0x2c420011, 0x50400010, 0xac800000,
+0x8001d74, 0x0, 0x8ee24e30, 0x24420001,
+0x50480003, 0x1021, 0x8ee24e30, 0x24420001,
+0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0xac8a0000, 0xac8c0004, 0x54e00006,
+0x240b0001, 0x8f820054, 0x1221023, 0x2c420033,
+0x1440ffa6, 0x0, 0x316300ff, 0x24020001,
+0x10620022, 0x0, 0x3c040001, 0x24844b60,
+0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124,
+0x3c050009, 0xc002407, 0x34a5f011, 0x8001da0,
+0x0, 0x3c040001, 0x24844b6c, 0xafa00014,
+0x8f860120, 0x8f870124, 0x3c050009, 0xc002407,
+0x34a5f010, 0x8001da0, 0x0, 0x3c040001,
+0x24844b78, 0xafa00014, 0x8ee60608, 0x8f470228,
+0x3c050009, 0xc002407, 0x34a5f00f, 0x8ee201ac,
+0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20124,
+0x24420001, 0xaee20124, 0x8001f97, 0x8ee20124,
+0x27440212, 0xc0022fe, 0x24050006, 0x3049001f,
+0x928c0, 0x2e51021, 0x9442727c, 0x30428000,
+0x1040002f, 0x2e51021, 0x9442727c, 0x30424000,
+0x1440001c, 0xb71021, 0x9443727e, 0x97420212,
+0x14620018, 0xb71021, 0x8c437280, 0x8f420214,
+0x54620016, 0xafa20010, 0x92e204d8, 0x10400007,
+0x24020001, 0x8ee304dc, 0x1221004, 0x21027,
+0x621824, 0x8001dc9, 0xaee304dc, 0x8f830228,
+0x1221004, 0x21027, 0x621824, 0xaf830228,
+0x910c0, 0x2e21821, 0x3402c000, 0x8001e4e,
+0xa462727c, 0x8f420214, 0xafa20010, 0x910c0,
+0x571021, 0x8c42727c, 0x3c040001, 0x24844b84,
+0x3c050003, 0xafa20014, 0x8f470210, 0x34a5f01c,
+0xc002407, 0x1203021, 0x8001e83, 0x3c020800,
+0xb71021, 0x9443727e, 0x97420212, 0x14620019,
+0x918c0, 0xb71021, 0x8c437280, 0x8f420214,
+0x14620014, 0x918c0, 0x2e51021, 0x9447727c,
+0x720c0, 0x971021, 0x9443737e, 0xb71021,
+0xa443727e, 0x971021, 0x8c437380, 0xb71021,
+0xac437280, 0x2e41021, 0x9443737c, 0x2e51021,
+0xa443727c, 0x2e41821, 0x3402c000, 0x8001e4e,
+0xa462737c, 0x2e31021, 0x9447727c, 0x3021,
+0x720c0, 0x2e41021, 0x9442737c, 0x4021,
+0x30428000, 0x14400025, 0xe02821, 0x605021,
+0x340bc000, 0x971021, 0x9443737e, 0x97420212,
+0x54620015, 0xe02821, 0x971021, 0x8c437380,
+0x8f420214, 0x54620010, 0xe02821, 0x11000006,
+0x2e41021, 0x9443737c, 0x510c0, 0x2e21021,
+0x8001e1a, 0xa443737c, 0x9443737c, 0x2ea1021,
+0xa443727c, 0x710c0, 0x2e21021, 0xa44b737c,
+0x8001e28, 0x24060001, 0x510c0, 0x2e21021,
+0x9447737c, 0x720c0, 0x2e41021, 0x9442737c,
+0x30428000, 0x1040ffdf, 0x25080001, 0x30c200ff,
+0x14400025, 0x2021, 0x720c0, 0x971021,
+0x9443737e, 0x97420212, 0x1462000f, 0x910c0,
+0x971021, 0x8c437380, 0x8f420214, 0x1462000a,
+0x910c0, 0x2e41821, 0x3402c000, 0x15000015,
+0xa462737c, 0x910c0, 0x2e21821, 0x34028000,
+0x8001e4e, 0xa462727c, 0x571021, 0x8c42727c,
+0x3c040001, 0x24844b90, 0x3c050003, 0xafa20010,
+0x710c0, 0x571021, 0x8c42737c, 0x34a5001e,
+0x1203021, 0xc002407, 0xafa20014, 0x8001e83,
+0x3c020800, 0x2021, 0x428c0, 0xb71021,
+0x9443777e, 0x97420212, 0x5462002b, 0x24840001,
+0xb71021, 0x8c437780, 0x8f420214, 0x54620026,
+0x24840001, 0x3c020001, 0x571021, 0x8c4283b4,
+0x2442ffff, 0x3c010001, 0x370821, 0xac2283b4,
+0x3c020001, 0x571021, 0x8c4283b4, 0x809021,
+0x242102b, 0x1040000e, 0x24b1777c, 0x24b07784,
+0x2f02021, 0x2f12821, 0xc002494, 0x24060008,
+0x26310008, 0x3c020001, 0x571021, 0x8c4283b4,
+0x26520001, 0x242102b, 0x1440fff5, 0x26100008,
+0x3c040001, 0x972021, 0x8c8483b4, 0x24050008,
+0x420c0, 0x2484777c, 0xc00248c, 0x2e42021,
+0x8001e83, 0x3c020800, 0x2c820080, 0x1440ffcf,
+0x428c0, 0x3c020800, 0x34422000, 0xafa20018,
+0x8ee20608, 0x8f430228, 0x24420001, 0x304a00ff,
+0x514300fd, 0xafa00010, 0x8ee20608, 0x210c0,
+0x571021, 0x8fa30018, 0x8fa4001c, 0xac43060c,
+0xac440610, 0x8f830054, 0x8f820054, 0x24690032,
+0x1221023, 0x2c420033, 0x1040006a, 0x5821,
+0x24100008, 0x240f000d, 0x240d0007, 0x240c0040,
+0x240e0001, 0x8f870120, 0x27623800, 0x24e80020,
+0x102102b, 0x50400001, 0x27683000, 0x8f820128,
+0x11020004, 0x0, 0x8f820124, 0x15020007,
+0x1021, 0x8ee201a4, 0x3821, 0x24420001,
+0xaee201a4, 0x8001efb, 0x8ee201a4, 0x8ee40608,
+0x420c0, 0x801821, 0x8ee40430, 0x8ee50434,
+0xa32821, 0xa3302b, 0x822021, 0x862021,
+0xace40000, 0xace50004, 0x8ee20608, 0xa4f0000e,
+0xacef0018, 0xacea001c, 0x210c0, 0x2442060c,
+0x2e21021, 0xace20008, 0x8ee204c4, 0xace20010,
+0xaf880120, 0x92e24e20, 0x14400033, 0x24070001,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c820000, 0x144d001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x0, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30,
+0x24420001, 0x104c0007, 0x0, 0x8ee24e34,
+0x24420001, 0x10620005, 0x0, 0x8001ee8,
+0x0, 0x14600005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400010, 0xac800000, 0x8001efb,
+0x0, 0x8ee24e30, 0x24420001, 0x504c0003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0xac8d0000, 0xac8e0004, 0x54e00006, 0x240b0001,
+0x8f820054, 0x1221023, 0x2c420033, 0x1440ff9d,
+0x0, 0x316300ff, 0x24020001, 0x54620078,
+0xafa00010, 0xaeea0608, 0x8f830054, 0x8f820054,
+0x24690032, 0x1221023, 0x2c420033, 0x10400061,
+0x5821, 0x240e0008, 0x240d0011, 0x240a0012,
+0x24080040, 0x240c0001, 0x8f830120, 0x27623800,
+0x24660020, 0xc2102b, 0x50400001, 0x27663000,
+0x8f820128, 0x10c20004, 0x0, 0x8f820124,
+0x14c20007, 0x0, 0x8ee201a4, 0x3821,
+0x24420001, 0xaee201a4, 0x8001f67, 0x8ee201a4,
+0x8ee20608, 0xac62001c, 0x8ee404a0, 0x8ee504a4,
+0x2462001c, 0xac620008, 0xa46e000e, 0xac6d0018,
+0xac640000, 0xac650004, 0x8ee204c4, 0xac620010,
+0xaf860120, 0x92e24e20, 0x14400033, 0x24070001,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c820000, 0x144a001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x0, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30,
+0x24420001, 0x10480007, 0x0, 0x8ee24e34,
+0x24420001, 0x10620005, 0x0, 0x8001f54,
+0x0, 0x14600005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400010, 0xac800000, 0x8001f67,
+0x0, 0x8ee24e30, 0x24420001, 0x50480003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0xac8a0000, 0xac8c0004, 0x54e00006, 0x240b0001,
+0x8f820054, 0x1221023, 0x2c420033, 0x1440ffa6,
+0x0, 0x316300ff, 0x24020001, 0x10620022,
+0x0, 0x3c040001, 0x24844b60, 0xafa00010,
+0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009,
+0xc002407, 0x34a5f011, 0x8001f93, 0x0,
+0x3c040001, 0x24844b6c, 0xafa00014, 0x8f860120,
+0x8f870124, 0x3c050009, 0xc002407, 0x34a5f010,
+0x8001f93, 0x0, 0x3c040001, 0x24844b78,
+0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009,
+0xc002407, 0x34a5f00f, 0x8ee201ac, 0x24420001,
+0xaee201ac, 0x8ee201ac, 0x8ee20128, 0x24420001,
+0xaee20128, 0x8ee20128, 0x8ee20164, 0x24420001,
+0xaee20164, 0x80022e8, 0x8ee20164, 0x8fa20020,
+0x21200, 0x21d02, 0x24020001, 0x10620005,
+0x24020002, 0x1062000d, 0x0, 0x8001fb7,
+0xafa00010, 0x92e204d8, 0x14400006, 0x24020001,
+0x8f820228, 0xaee204dc, 0x2402ffff, 0xaf820228,
+0x24020001, 0x8001fbe, 0xa2e204d8, 0x92e204d8,
+0x5040000c, 0xa2e004d8, 0x8ee204dc, 0xaf820228,
+0x8001fbe, 0xa2e004d8, 0x3c040001, 0x24844b98,
+0xafa00014, 0x8fa60020, 0x3c050003, 0xc002407,
+0x34a5f009, 0x8ee2013c, 0x24420001, 0xaee2013c,
+0x80022e8, 0x8ee2013c, 0x8fa20020, 0x21200,
+0x22502, 0x24020001, 0x10820005, 0x24020002,
+0x1082000f, 0x0, 0x8001fe3, 0xafa00010,
+0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024,
+0x34420008, 0xaf820220, 0x24020001, 0x3c010001,
+0x370821, 0xa02283b2, 0x8001fea, 0xaee40108,
+0x8f820220, 0x3c0308ff, 0x3463fff7, 0x431024,
+0xaf820220, 0x3c010001, 0x370821, 0xa02083b2,
+0x8001fea, 0xaee40108, 0x3c040001, 0x24844ba4,
+0xafa00014, 0x8fa60020, 0x3c050003, 0xc002407,
+0x34a5f00a, 0x8ee2012c, 0x24420001, 0xaee2012c,
+0x80022e8, 0x8ee2012c, 0x8fa20020, 0x21200,
+0x21d02, 0x24020001, 0x10620005, 0x24020002,
+0x1062000e, 0x0, 0x8002011, 0xafa00010,
+0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024,
+0x34420008, 0xaf820220, 0x24020001, 0x3c010001,
+0x370821, 0x8002018, 0xa02283b3, 0x3c020001,
+0x571021, 0x904283b2, 0x3c010001, 0x370821,
+0x1440000e, 0xa02083b3, 0x8f820220, 0x3c0308ff,
+0x3463fff7, 0x431024, 0x8002018, 0xaf820220,
+0x3c040001, 0x24844bb0, 0xafa00014, 0x8fa60020,
+0x3c050003, 0xc002407, 0x34a5f00b, 0x8ee20114,
+0x24420001, 0xaee20114, 0x80022e8, 0x8ee20114,
+0x27840208, 0x27450200, 0xc00249e, 0x24060008,
+0x26e40094, 0x27450200, 0xc00249e, 0x24060008,
+0x8ee20134, 0x24420001, 0xaee20134, 0x80022e8,
+0x8ee20134, 0x8f460248, 0x2021, 0xc004fa4,
+0x24050004, 0x8ee20130, 0x24420001, 0xaee20130,
+0x80022e8, 0x8ee20130, 0x8ef301cc, 0x8ef401d0,
+0x8ef501d8, 0x8ee20140, 0x26e40030, 0x24420001,
+0xaee20140, 0x8ef00140, 0x8ef10074, 0x8ef20070,
+0xc00248c, 0x24050400, 0xaef301cc, 0xaef401d0,
+0xaef501d8, 0xaef00140, 0xaef10074, 0xaef20070,
+0x8f42025c, 0x26e40094, 0xaee20060, 0x8f420260,
+0x27450200, 0x24060008, 0xaee20068, 0x24020006,
+0xc00249e, 0xaee20064, 0x3c023b9a, 0x3442ca00,
+0xaee2006c, 0x240203e8, 0x24040002, 0x24030001,
+0xaee20104, 0xaee40100, 0xaee3010c, 0x8f820220,
+0x30420008, 0x10400004, 0x0, 0xaee30108,
+0x8002061, 0x2021, 0xaee40108, 0x2021,
+0x3c030001, 0x641821, 0x906353e0, 0x2e41021,
+0x24840001, 0xa043009c, 0x2c82000f, 0x1440fff8,
+0x0, 0x8f820040, 0x2e41821, 0x24840001,
+0x21702, 0x24420030, 0xa062009c, 0x2e41021,
+0x80022e8, 0xa040009c, 0x24020001, 0x3c010001,
+0x370821, 0xa02283e0, 0x240b0400, 0x24080014,
+0x240a0040, 0x24090001, 0x8f830100, 0x27623000,
+0x24660020, 0xc2102b, 0x50400001, 0x27662800,
+0x8f820108, 0x10c20004, 0x0, 0x8f820104,
+0x14c20007, 0x26e20030, 0x8ee201a8, 0x3821,
+0x24420001, 0xaee201a8, 0x80020a8, 0x8ee201a8,
+0x8ee404b8, 0x8ee504bc, 0xac620008, 0xa46b000e,
+0xac680018, 0xac60001c, 0xac640000, 0xac650004,
+0x8ee204cc, 0xac620010, 0xaf860100, 0x92e204ec,
+0x1440000e, 0x24070001, 0x8ee24e28, 0x24420001,
+0x504a0003, 0x1021, 0x8ee24e28, 0x24420001,
+0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38,
+0x2e21021, 0xac480000, 0xac490004, 0x10e0ffd2,
+0x0, 0x80022e8, 0x0, 0x3c020900,
+0xaee05238, 0xaee0523c, 0xaee05240, 0xaee05244,
+0xaee001d0, 0x3c010001, 0x370821, 0xa02083b1,
+0xafa20018, 0x8ee20608, 0x8f430228, 0x24420001,
+0x304a00ff, 0x514300fd, 0xafa00010, 0x8ee20608,
+0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c,
+0xac43060c, 0xac440610, 0x8f830054, 0x8f820054,
+0x24690032, 0x1221023, 0x2c420033, 0x1040006a,
+0x5821, 0x24100008, 0x240f000d, 0x240d0007,
+0x240c0040, 0x240e0001, 0x8f870120, 0x27623800,
+0x24e80020, 0x102102b, 0x50400001, 0x27683000,
+0x8f820128, 0x11020004, 0x0, 0x8f820124,
+0x15020007, 0x1021, 0x8ee201a4, 0x3821,
+0x24420001, 0xaee201a4, 0x800212c, 0x8ee201a4,
+0x8ee40608, 0x420c0, 0x801821, 0x8ee40430,
+0x8ee50434, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xace40000, 0xace50004, 0x8ee20608,
+0xa4f0000e, 0xacef0018, 0xacea001c, 0x210c0,
+0x2442060c, 0x2e21021, 0xace20008, 0x8ee204c4,
+0xace20010, 0xaf880120, 0x92e24e20, 0x14400033,
+0x24070001, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x8c820000, 0x144d001f, 0x0,
+0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x0,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34,
+0x8ee34e30, 0x24420001, 0x104c0007, 0x0,
+0x8ee24e34, 0x24420001, 0x10620005, 0x0,
+0x8002119, 0x0, 0x14600005, 0x0,
+0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
+0x8c820004, 0x2c420011, 0x50400010, 0xac800000,
+0x800212c, 0x0, 0x8ee24e30, 0x24420001,
+0x504c0003, 0x1021, 0x8ee24e30, 0x24420001,
+0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0xac8d0000, 0xac8e0004, 0x54e00006,
+0x240b0001, 0x8f820054, 0x1221023, 0x2c420033,
+0x1440ff9d, 0x0, 0x316300ff, 0x24020001,
+0x54620078, 0xafa00010, 0xaeea0608, 0x8f830054,
+0x8f820054, 0x24690032, 0x1221023, 0x2c420033,
+0x10400061, 0x5821, 0x240e0008, 0x240d0011,
+0x240a0012, 0x24080040, 0x240c0001, 0x8f830120,
+0x27623800, 0x24660020, 0xc2102b, 0x50400001,
+0x27663000, 0x8f820128, 0x10c20004, 0x0,
+0x8f820124, 0x14c20007, 0x0, 0x8ee201a4,
+0x3821, 0x24420001, 0xaee201a4, 0x8002198,
+0x8ee201a4, 0x8ee20608, 0xac62001c, 0x8ee404a0,
+0x8ee504a4, 0x2462001c, 0xac620008, 0xa46e000e,
+0xac6d0018, 0xac640000, 0xac650004, 0x8ee204c4,
+0xac620010, 0xaf860120, 0x92e24e20, 0x14400033,
+0x24070001, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x8c820000, 0x144a001f, 0x0,
+0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x0,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34,
+0x8ee34e30, 0x24420001, 0x10480007, 0x0,
+0x8ee24e34, 0x24420001, 0x10620005, 0x0,
+0x8002185, 0x0, 0x14600005, 0x0,
+0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
+0x8c820004, 0x2c420011, 0x50400010, 0xac800000,
+0x8002198, 0x0, 0x8ee24e30, 0x24420001,
+0x50480003, 0x1021, 0x8ee24e30, 0x24420001,
+0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0xac8a0000, 0xac8c0004, 0x54e00006,
+0x240b0001, 0x8f820054, 0x1221023, 0x2c420033,
+0x1440ffa6, 0x0, 0x316300ff, 0x24020001,
+0x10620022, 0x0, 0x3c040001, 0x24844b60,
+0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124,
+0x3c050009, 0xc002407, 0x34a5f011, 0x80021c4,
+0x0, 0x3c040001, 0x24844b6c, 0xafa00014,
+0x8f860120, 0x8f870124, 0x3c050009, 0xc002407,
+0x34a5f010, 0x80021c4, 0x0, 0x3c040001,
+0x24844b78, 0xafa00014, 0x8ee60608, 0x8f470228,
+0x3c050009, 0xc002407, 0x34a5f00f, 0x8ee201ac,
+0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20120,
+0x24420001, 0xaee20120, 0x8ee20120, 0x8ee20168,
+0x24420001, 0xaee20168, 0x80022e8, 0x8ee20168,
+0x8f42025c, 0x26e40094, 0xaee20060, 0x8f420260,
+0x27450200, 0x24060008, 0xc00249e, 0xaee20068,
+0x8f820220, 0x30420008, 0x14400002, 0x24020001,
+0x24020002, 0xaee20108, 0x8ee2011c, 0x24420001,
+0xaee2011c, 0x80022e8, 0x8ee2011c, 0x3c040001,
+0x24844bbc, 0xafa00010, 0xafa00014, 0x8fa60020,
+0x3c050003, 0xc002407, 0x34a5f00f, 0x93a20020,
+0x3c030700, 0x34631000, 0x431025, 0xafa20018,
+0x8ee20608, 0x8f430228, 0x24420001, 0x304900ff,
+0x512300e2, 0xafa00010, 0x8ee20608, 0x210c0,
+0x571021, 0x8fa30018, 0x8fa4001c, 0xac43060c,
+0xac440610, 0x8f870120, 0x27623800, 0x24e80020,
+0x102102b, 0x50400001, 0x27683000, 0x8f820128,
+0x11020004, 0x0, 0x8f820124, 0x15020007,
+0x1021, 0x8ee201a4, 0x3821, 0x24420001,
+0xaee201a4, 0x800225d, 0x8ee201a4, 0x8ee40608,
+0x420c0, 0x801821, 0x8ee40430, 0x8ee50434,
+0xa32821, 0xa3302b, 0x822021, 0x862021,
+0xace40000, 0xace50004, 0x8ee30608, 0x24020008,
+0xa4e2000e, 0x2402000d, 0xace20018, 0xace9001c,
+0x318c0, 0x2463060c, 0x2e31021, 0xace20008,
+0x8ee204c4, 0xace20010, 0xaf880120, 0x92e24e20,
+0x14400037, 0x24070001, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x8c830000, 0x24020007,
+0x1462001f, 0x0, 0x8ee34e30, 0x8ee24e34,
+0x1062001b, 0x24030040, 0x8c820004, 0x24420001,
+0xac820004, 0x8ee24e34, 0x8ee54e30, 0x24420001,
+0x10430007, 0x0, 0x8ee24e34, 0x24420001,
+0x10a20005, 0x0, 0x8002247, 0x0,
+0x14a00005, 0x0, 0x8f820128, 0x24420020,
+0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
+0x50400013, 0xac800000, 0x800225d, 0x0,
+0x8ee24e30, 0x24030040, 0x24420001, 0x50430003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x24020007, 0xac820000, 0x24020001, 0xac820004,
+0x54e0000c, 0xaee90608, 0x3c040001, 0x24844bc4,
+0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228,
+0x3c050009, 0xc002407, 0x34a5f000, 0x80022e0,
+0x0, 0x8f830120, 0x27623800, 0x24660020,
+0xc2102b, 0x50400001, 0x27663000, 0x8f820128,
+0x10c20004, 0x0, 0x8f820124, 0x14c20007,
+0x0, 0x8ee201a4, 0x3821, 0x24420001,
+0xaee201a4, 0x80022c4, 0x8ee201a4, 0x8ee20608,
+0xac62001c, 0x8ee404a0, 0x8ee504a4, 0x2462001c,
+0xac620008, 0x24020008, 0xa462000e, 0x24020011,
+0xac620018, 0xac640000, 0xac650004, 0x8ee204c4,
+0xac620010, 0xaf860120, 0x92e24e20, 0x14400037,
+0x24070001, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x8c830000, 0x24020012, 0x1462001f,
+0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b,
+0x24030040, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e34, 0x8ee54e30, 0x24420001, 0x10430007,
+0x0, 0x8ee24e34, 0x24420001, 0x10a20005,
+0x0, 0x80022ae, 0x0, 0x14a00005,
+0x0, 0x8f820128, 0x24420020, 0xaf820128,
+0x8f820128, 0x8c820004, 0x2c420011, 0x50400013,
+0xac800000, 0x80022c4, 0x0, 0x8ee24e30,
+0x24030040, 0x24420001, 0x50430003, 0x1021,
+0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x24020012,
+0xac820000, 0x24020001, 0xac820004, 0x14e0001b,
+0x0, 0x3c040001, 0x24844bcc, 0xafa00010,
+0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009,
+0xc002407, 0x34a5f001, 0x8ee201b0, 0x24420001,
+0xaee201b0, 0x80022e0, 0x8ee201b0, 0x3c040001,
+0x24844bd8, 0xafa00014, 0x8ee60608, 0x8f470228,
+0x3c050009, 0xc002407, 0x34a5f005, 0x8ee201ac,
+0x24420001, 0xaee201ac, 0x8ee201ac, 0x8ee20150,
+0x24420001, 0xaee20150, 0x8ee20150, 0x8ee20160,
+0x24420001, 0xaee20160, 0x8ee20160, 0x8f43022c,
+0x8f42010c, 0x14620009, 0x24020002, 0xaf820064,
+0x8f820064, 0x14400005, 0x0, 0x8f43022c,
+0x8f42010c, 0x1462f875, 0x0, 0x8fbf0044,
+0x8fb60040, 0x8fb5003c, 0x8fb40038, 0x8fb30034,
+0x8fb20030, 0x8fb1002c, 0x8fb00028, 0x3e00008,
+0x27bd0048, 0x27bdfff8, 0x2408ffff, 0x10a00014,
+0x4821, 0x3c0aedb8, 0x354a8320, 0x90870000,
+0x24840001, 0x3021, 0x1071026, 0x30420001,
+0x10400002, 0x81842, 0x6a1826, 0x604021,
+0x24c60001, 0x2cc20008, 0x1440fff7, 0x73842,
+0x25290001, 0x125102b, 0x1440fff0, 0x0,
+0x1001021, 0x3e00008, 0x27bd0008, 0x27bdffe8,
+0x27642800, 0xafbf0010, 0xc00248c, 0x24051000,
+0x24020021, 0xaf800100, 0xaf800104, 0xaf800108,
+0xaf800110, 0xaf800114, 0xaf800118, 0xaf800120,
+0xaf800124, 0xaf800128, 0xaf800130, 0xaf800134,
+0xaf800138, 0xaee04e28, 0xaee04e2c, 0xaee04e30,
+0xaee04e34, 0xaf82011c, 0x8f420218, 0x30420040,
+0x10400004, 0x0, 0x8f82011c, 0x34420004,
+0xaf82011c, 0x8fbf0010, 0x3e00008, 0x27bd0018,
+0x27bdffe0, 0xafbf0018, 0x8f820104, 0xafa20010,
+0x8f820100, 0x3c050002, 0xafa20014, 0x8f8600b0,
+0x8f87011c, 0x3c040001, 0x24844c8c, 0xc002407,
+0x34a5f000, 0x8f8300b0, 0x3c027f00, 0x621824,
+0x3c020400, 0x1062002b, 0x43102b, 0x14400008,
+0x3c022000, 0x3c020100, 0x10620026, 0x3c020200,
+0x10620013, 0x0, 0x8002376, 0x0,
+0x1062000a, 0x43102b, 0x1040001e, 0x3c024000,
+0x1462001c, 0x0, 0x8ee20190, 0x24420001,
+0xaee20190, 0x8002376, 0x8ee20190, 0x8ee2018c,
+0x24420001, 0xaee2018c, 0x8002376, 0x8ee2018c,
+0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830104,
+0x8f8200b0, 0x34420001, 0xaf8200b0, 0xaf830104,
+0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c,
+0x8ee201a0, 0x24420001, 0xaee201a0, 0x8002379,
+0x8ee201a0, 0x8f8200b0, 0x34420001, 0xaf8200b0,
+0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffe0,
+0xafbf001c, 0xafb00018, 0x8f820120, 0xafa20010,
+0x8f820124, 0x3c050001, 0xafa20014, 0x8f8600a0,
+0x8f87011c, 0x3c040001, 0x24844c98, 0xc002407,
+0x34a5f000, 0x8f8300a0, 0x3c027f00, 0x621824,
+0x3c020400, 0x10620055, 0x8021, 0x43102b,
+0x14400008, 0x3c042000, 0x3c020100, 0x1062004f,
+0x3c020200, 0x1062003c, 0x0, 0x80023e4,
+0x0, 0x10640005, 0x83102b, 0x10400047,
+0x3c024000, 0x14620045, 0x0, 0x8f8200a0,
+0x441024, 0x10400006, 0x0, 0x8ee20194,
+0x24420001, 0xaee20194, 0x80023ad, 0x8ee20194,
+0x8ee20198, 0x24420001, 0xaee20198, 0x8ee20198,
+0x8f82011c, 0x34420002, 0xaf82011c, 0x8f82011c,
+0x30420200, 0x1040001b, 0x0, 0x8f8300a0,
+0x8f840124, 0x8f8200ac, 0x14400007, 0x24020001,
+0x3c020001, 0x3442f000, 0x621024, 0x50400001,
+0x24100001, 0x24020001, 0x1200000d, 0xaf8200a0,
+0x8f820124, 0x2442ffe0, 0xaf820124, 0x8f820124,
+0x8f820124, 0x27633000, 0x43102b, 0x10400005,
+0x276237e0, 0xaf820124, 0x80023ce, 0x0,
+0xaf840124, 0x8f82011c, 0x2403fffd, 0x431024,
+0x80023e7, 0xaf82011c, 0x8f82011c, 0x34420002,
+0xaf82011c, 0x8f830124, 0x8f8200a0, 0x34420001,
+0xaf8200a0, 0xaf830124, 0x8f82011c, 0x2403fffd,
+0x431024, 0xaf82011c, 0x8ee2019c, 0x24420001,
+0xaee2019c, 0x80023e7, 0x8ee2019c, 0x8f8200a0,
+0x34420001, 0xaf8200a0, 0x8fbf001c, 0x8fb00018,
+0x3e00008, 0x27bd0020, 0x0, 0x3c020001,
+0x8c425408, 0x27bdffe8, 0xafbf0014, 0x14400012,
+0xafb00010, 0x3c100001, 0x26105550, 0x2002021,
+0xc00248c, 0x24052000, 0x26021fe0, 0x3c010001,
+0xac225524, 0x3c010001, 0xac225520, 0xaf420250,
+0x24022000, 0xaf500254, 0xaf420258, 0x24020001,
+0x3c010001, 0xac225408, 0x8fbf0014, 0x8fb00010,
+0x3e00008, 0x27bd0018, 0x3c030001, 0x8c635524,
+0x8c820000, 0x8fa80010, 0x8fa90014, 0xac620000,
+0x3c020001, 0x8c425524, 0x8c830004, 0xac430004,
+0xac450008, 0x8f840054, 0x2443ffe0, 0xac460010,
+0xac470014, 0xac480018, 0xac49001c, 0x3c010001,
+0xac235524, 0xac44000c, 0x3c020001, 0x24425550,
+0x62182b, 0x10600005, 0x0, 0x3c020001,
+0x8c425520, 0x3c010001, 0xac225524, 0x3c030001,
+0x8c635524, 0x3c020001, 0x8c4253f0, 0xac620000,
+0x3c030001, 0x8c635524, 0x3c020001, 0x8c4253f0,
+0xac620004, 0x3e00008, 0xaf430250, 0x3c030001,
+0x8c635524, 0x3c020001, 0x8c4253f0, 0x27bdffd0,
+0xafb40020, 0x8fb40040, 0xafb00010, 0x808021,
+0xafb50024, 0x8fb50044, 0x8fa40048, 0xafb10014,
+0xa08821, 0xafbf0028, 0xafb3001c, 0xafb20018,
+0xac620000, 0x3c050001, 0x8ca55524, 0x3c020001,
+0x8c4253f0, 0xc09021, 0xe09821, 0x10800006,
+0xaca20004, 0x24a50008, 0xc002494, 0x24060018,
+0x8002452, 0x0, 0x24a40008, 0xc00248c,
+0x24050018, 0x3c020001, 0x8c425524, 0x3c050001,
+0x24a55550, 0x2442ffe0, 0x3c010001, 0xac225524,
+0x45102b, 0x10400005, 0x0, 0x3c020001,
+0x8c425520, 0x3c010001, 0xac225524, 0x3c030001,
+0x8c635524, 0x8e020000, 0xac620000, 0x3c030001,
+0x8c635524, 0x8e020004, 0xac620004, 0xac710008,
+0x8f840054, 0x2462ffe0, 0x3c010001, 0xac225524,
+0x45102b, 0xac720010, 0xac730014, 0xac740018,
+0xac75001c, 0x10400005, 0xac64000c, 0x3c020001,
+0x8c425520, 0x3c010001, 0xac225524, 0x3c030001,
+0x8c635524, 0x3c020001, 0x8c4253f0, 0xac620000,
+0x3c030001, 0x8c635524, 0x3c020001, 0x8c4253f0,
+0xac620004, 0xaf430250, 0x8fbf0028, 0x8fb50024,
+0x8fb40020, 0x8fb3001c, 0x8fb20018, 0x8fb10014,
+0x8fb00010, 0x3e00008, 0x27bd0030, 0x10a00005,
+0x0, 0xac800000, 0x24a5fffc, 0x14a0fffd,
+0x24840004, 0x3e00008, 0x0, 0x10c00007,
+0x0, 0x8c820000, 0x24840004, 0x24c6fffc,
+0xaca20000, 0x14c0fffb, 0x24a50004, 0x3e00008,
+0x0, 0x10c00007, 0x0, 0x8ca20000,
+0x24a50004, 0x24c6fffc, 0xac820000, 0x14c0fffb,
+0x24840004, 0x3e00008, 0x0, 0x3e00008,
+0x0, 0x27bdffd8, 0xafbf0020, 0x8ee304e4,
+0x8ee204e0, 0x10620436, 0x0, 0x8ee204e4,
+0x8ee304fc, 0x21100, 0x626021, 0x95870008,
+0x8d8a0000, 0x8d8b0004, 0x958d000a, 0x8ee2725c,
+0x8ee3726c, 0x30e4ffff, 0x441021, 0x62182b,
+0x10600015, 0x31a20004, 0x8f8200d8, 0x8ee37258,
+0x431023, 0xaee2726c, 0x8ee2726c, 0x1c400003,
+0x3c030001, 0x431021, 0xaee2726c, 0x8ee2725c,
+0x8ee3726c, 0x441021, 0x62182b, 0x10600006,
+0x31a20004, 0x8ee201b8, 0x24420001, 0xaee201b8,
+0x80028e5, 0x8ee201b8, 0x10400240, 0x31a20200,
+0x1040014d, 0x4821, 0x96e2045a, 0x30420010,
+0x10400149, 0x0, 0x8f840100, 0x27623000,
+0x24850020, 0xa2102b, 0x50400001, 0x27652800,
+0x8f820108, 0x10a20004, 0x0, 0x8f820104,
+0x14a20006, 0x2402000c, 0x8ee201a8, 0x24420001,
+0xaee201a8, 0x8002530, 0x8ee201a8, 0xac8a0000,
+0xac8b0004, 0x8ee37264, 0x24060005, 0xa482000e,
+0xac860018, 0xac830008, 0x8ee204e4, 0xac82001c,
+0x8ee204c8, 0xac820010, 0xaf850100, 0x92e204ec,
+0x14400036, 0x24090001, 0x8ee24e28, 0x210c0,
+0x24424e38, 0x2e22021, 0x8c820000, 0x1446001f,
+0x0, 0x8ee34e28, 0x8ee24e2c, 0x1062001b,
+0x24030040, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e2c, 0x8ee54e28, 0x24420001, 0x10430007,
+0x0, 0x8ee24e2c, 0x24420001, 0x10a20005,
+0x0, 0x800251a, 0x0, 0x14a00005,
+0x0, 0x8f820108, 0x24420020, 0xaf820108,
+0x8f820108, 0x8c820004, 0x2c420011, 0x50400013,
+0xac800000, 0x8002530, 0x0, 0x8ee24e28,
+0x24030040, 0x24420001, 0x50430003, 0x1021,
+0x8ee24e28, 0x24420001, 0xaee24e28, 0x8ee24e28,
+0x210c0, 0x24424e38, 0x2e22021, 0x24020005,
+0xac820000, 0x24020001, 0xac820004, 0x1520000a,
+0x3c040001, 0xafab0010, 0x8ee27264, 0x3c040001,
+0x24844f00, 0x3c050004, 0xafa20014, 0x8ee604e4,
+0x80028c2, 0x34a5f114, 0x8ee27264, 0x34843800,
+0x3641821, 0x24420010, 0x43102b, 0x14400073,
+0x0, 0x8ee27264, 0x24480010, 0x3641021,
+0x102102b, 0x14400002, 0x3c02ffff, 0x1024021,
+0x8f850100, 0x27623000, 0x24a60020, 0xc2102b,
+0x50400001, 0x27662800, 0x8f820108, 0x10c20004,
+0x0, 0x8f820104, 0x14c20007, 0x2563000c,
+0x8ee201a8, 0x4821, 0x24420001, 0xaee201a8,
+0x80025a4, 0x8ee201a8, 0x2c64000c, 0x1441021,
+0xaca20000, 0xaca30004, 0x24e2fff4, 0xa4a2000e,
+0x24020006, 0xaca80008, 0xaca20018, 0x8ee204e4,
+0xaca2001c, 0x8ee204c8, 0x3c030002, 0x431025,
+0xaca20010, 0xaf860100, 0x92e204ec, 0x14400037,
+0x24090001, 0x8ee24e28, 0x210c0, 0x24424e38,
+0x2e22021, 0x8c830000, 0x24020005, 0x1462001f,
+0x0, 0x8ee34e28, 0x8ee24e2c, 0x1062001b,
+0x24030040, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e2c, 0x8ee54e28, 0x24420001, 0x10430007,
+0x0, 0x8ee24e2c, 0x24420001, 0x10a20005,
+0x0, 0x800258e, 0x0, 0x14a00005,
+0x0, 0x8f820108, 0x24420020, 0xaf820108,
+0x8f820108, 0x8c820004, 0x2c420011, 0x50400013,
+0xac800000, 0x80025a4, 0x0, 0x8ee24e28,
+0x24030040, 0x24420001, 0x50430003, 0x1021,
+0x8ee24e28, 0x24420001, 0xaee24e28, 0x8ee24e28,
+0x210c0, 0x24424e38, 0x2e22021, 0x24020005,
+0xac820000, 0x24020001, 0xac820004, 0x1520000a,
+0x2508fffc, 0xafab0010, 0x8ee27264, 0x3c040001,
+0x24844f00, 0x3c050004, 0xafa20014, 0x8ee604e4,
+0x80028c2, 0x34a5f125, 0x34028100, 0xa5020000,
+0x9582000e, 0x8002621, 0xa5020002, 0x8f850100,
+0x27623000, 0x24a60020, 0xc2102b, 0x50400001,
+0x27662800, 0x8f820108, 0x10c20004, 0x0,
+0x8f820104, 0x14c20007, 0x2563000c, 0x8ee201a8,
+0x4821, 0x24420001, 0xaee201a8, 0x8002611,
+0x8ee201a8, 0x2c64000c, 0x1441021, 0xaca20000,
+0xaca30004, 0x8ee37264, 0x24e2fff4, 0xa4a2000e,
+0x24020006, 0xaca20018, 0x24630010, 0xaca30008,
+0x8ee204e4, 0xaca2001c, 0x8ee204c8, 0x3c030002,
+0x431025, 0xaca20010, 0xaf860100, 0x92e204ec,
+0x14400037, 0x24090001, 0x8ee24e28, 0x210c0,
+0x24424e38, 0x2e22021, 0x8c830000, 0x24020005,
+0x1462001f, 0x0, 0x8ee34e28, 0x8ee24e2c,
+0x1062001b, 0x24030040, 0x8c820004, 0x24420001,
+0xac820004, 0x8ee24e2c, 0x8ee54e28, 0x24420001,
+0x10430007, 0x0, 0x8ee24e2c, 0x24420001,
+0x10a20005, 0x0, 0x80025fb, 0x0,
+0x14a00005, 0x0, 0x8f820108, 0x24420020,
+0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011,
+0x50400013, 0xac800000, 0x8002611, 0x0,
+0x8ee24e28, 0x24030040, 0x24420001, 0x50430003,
+0x1021, 0x8ee24e28, 0x24420001, 0xaee24e28,
+0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021,
+0x24020005, 0xac820000, 0x24020001, 0xac820004,
+0x1520000a, 0x34028100, 0xafab0010, 0x8ee27264,
+0x3c040001, 0x24844f00, 0x3c050004, 0xafa20014,
+0x8ee604e4, 0x80028c2, 0x34a5f015, 0x8ee37264,
+0xa462000c, 0x8ee37264, 0x9582000e, 0xa462000e,
+0x8002685, 0x24e70004, 0x8f840100, 0x27623000,
+0x24850020, 0xa2102b, 0x50400001, 0x27652800,
+0x8f820108, 0x10a20004, 0x0, 0x8f820104,
+0x14a20007, 0x24020006, 0x8ee201a8, 0x4821,
+0x24420001, 0xaee201a8, 0x800267b, 0x8ee201a8,
+0xac8a0000, 0xac8b0004, 0x8ee37264, 0xa487000e,
+0xac820018, 0xac830008, 0x8ee204e4, 0xac82001c,
+0x8ee204c8, 0x3c030002, 0x431025, 0xac820010,
+0xaf850100, 0x92e204ec, 0x14400037, 0x24090001,
+0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021,
+0x8c830000, 0x24020005, 0x1462001f, 0x0,
+0x8ee34e28, 0x8ee24e2c, 0x1062001b, 0x24030040,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e2c,
+0x8ee54e28, 0x24420001, 0x10430007, 0x0,
+0x8ee24e2c, 0x24420001, 0x10a20005, 0x0,
+0x8002665, 0x0, 0x14a00005, 0x0,
+0x8f820108, 0x24420020, 0xaf820108, 0x8f820108,
+0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
+0x800267b, 0x0, 0x8ee24e28, 0x24030040,
+0x24420001, 0x50430003, 0x1021, 0x8ee24e28,
+0x24420001, 0xaee24e28, 0x8ee24e28, 0x210c0,
+0x24424e38, 0x2e22021, 0x24020005, 0xac820000,
+0x24020001, 0xac820004, 0x15200009, 0x3c050004,
+0xafab0010, 0x8ee27264, 0x3c040001, 0x24844f00,
+0xafa20014, 0x8ee604e4, 0x80028c2, 0x34a5f004,
+0x8ee2725c, 0x30e7ffff, 0x471021, 0xaee2725c,
+0x8ee204e4, 0x8ee304fc, 0x8ee47258, 0x21100,
+0x431021, 0xac44000c, 0x8ee27258, 0xafa20018,
+0x8ee3725c, 0xafa3001c, 0x8ee2725c, 0x2c42003c,
+0x10400004, 0x24620001, 0x2403fffe, 0x431024,
+0xafa2001c, 0x8ee27264, 0x3c060001, 0x34c63800,
+0x8ee3725c, 0x2405fff8, 0x471021, 0x24420007,
+0x451024, 0x24630007, 0xaee27258, 0x8ee2726c,
+0x8ee47258, 0x651824, 0x431023, 0xaee2726c,
+0x3661021, 0x82202b, 0x14800004, 0x3c03ffff,
+0x8ee27258, 0x431021, 0xaee27258, 0x8ee27258,
+0xaee27264, 0x8f8200f0, 0x24470008, 0x27621800,
+0xe2102b, 0x50400001, 0x27671000, 0x8f8200f4,
+0x14e20007, 0x0, 0x8ee201b4, 0x4821,
+0x24420001, 0xaee201b4, 0x80026c8, 0x8ee201b4,
+0x8f8200f0, 0x24090001, 0x8fa30018, 0x8fa4001c,
+0xac430000, 0xac440004, 0xaf8700f0, 0x15200012,
+0xd1142, 0x8f8200f0, 0xafa20010, 0x8f8200f4,
+0x3c040001, 0x24844f0c, 0xafa20014, 0x8fa60018,
+0x8fa7001c, 0x3c050004, 0xc002407, 0x34a5f005,
+0x8ee20088, 0x24420001, 0xaee20088, 0x8ee20088,
+0x80028d7, 0xaee0725c, 0x30430003, 0x24020002,
+0x10620016, 0x28620003, 0x10400005, 0x24020001,
+0x10620008, 0x0, 0x8002707, 0x0,
+0x24020003, 0x10620017, 0x0, 0x8002707,
+0x0, 0x8ee200e8, 0x8ee300ec, 0x24630001,
+0x2c640001, 0x441021, 0xaee200e8, 0xaee300ec,
+0x8ee200e8, 0x8002707, 0x8ee300ec, 0x8ee200f0,
+0x8ee300f4, 0x24630001, 0x2c640001, 0x441021,
+0xaee200f0, 0xaee300f4, 0x8ee200f0, 0x8002707,
+0x8ee300f4, 0x8ee200f8, 0x8ee300fc, 0x24630001,
+0x2c640001, 0x441021, 0xaee200f8, 0xaee300fc,
+0x8ee200f8, 0x8ee300fc, 0x8ee2725c, 0x8ee400e0,
+0x8ee500e4, 0x401821, 0x1021, 0xa32821,
+0xa3302b, 0x822021, 0x862021, 0xaee400e0,
+0xaee500e4, 0x80028d7, 0xaee0725c, 0x30e2ffff,
+0x104001c1, 0x31a20200, 0x1040014d, 0x4821,
+0x96e2045a, 0x30420010, 0x10400149, 0x0,
+0x8f840100, 0x27623000, 0x24850020, 0xa2102b,
+0x50400001, 0x27652800, 0x8f820108, 0x10a20004,
+0x0, 0x8f820104, 0x14a20006, 0x2402000c,
+0x8ee201a8, 0x24420001, 0xaee201a8, 0x8002772,
+0x8ee201a8, 0xac8a0000, 0xac8b0004, 0x8ee37264,
+0x24060005, 0xa482000e, 0xac860018, 0xac830008,
+0x8ee204e4, 0xac82001c, 0x8ee204c8, 0xac820010,
+0xaf850100, 0x92e204ec, 0x14400036, 0x24090001,
+0x8ee24e28, 0x210c0, 0x24424e38, 0x2e22021,
+0x8c820000, 0x1446001f, 0x0, 0x8ee34e28,
+0x8ee24e2c, 0x1062001b, 0x24030040, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e2c, 0x8ee54e28,
+0x24420001, 0x10430007, 0x0, 0x8ee24e2c,
+0x24420001, 0x10a20005, 0x0, 0x800275c,
+0x0, 0x14a00005, 0x0, 0x8f820108,
+0x24420020, 0xaf820108, 0x8f820108, 0x8c820004,
+0x2c420011, 0x50400013, 0xac800000, 0x8002772,
+0x0, 0x8ee24e28, 0x24030040, 0x24420001,
+0x50430003, 0x1021, 0x8ee24e28, 0x24420001,
+0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38,
+0x2e22021, 0x24020005, 0xac820000, 0x24020001,
+0xac820004, 0x1520000a, 0x3c040001, 0xafab0010,
+0x8ee27264, 0x3c040001, 0x24844f00, 0x3c050004,
+0xafa20014, 0x8ee604e4, 0x80028c2, 0x34a5f014,
+0x8ee27264, 0x34843800, 0x3641821, 0x24420010,
+0x43102b, 0x14400073, 0x0, 0x8ee27264,
+0x24480010, 0x3641021, 0x102102b, 0x14400002,
+0x3c02ffff, 0x1024021, 0x8f850100, 0x27623000,
+0x24a60020, 0xc2102b, 0x50400001, 0x27662800,
+0x8f820108, 0x10c20004, 0x0, 0x8f820104,
+0x14c20007, 0x2563000c, 0x8ee201a8, 0x4821,
+0x24420001, 0xaee201a8, 0x80027e6, 0x8ee201a8,
+0x2c64000c, 0x1441021, 0xaca20000, 0xaca30004,
+0x24e2fff4, 0xa4a2000e, 0x24020006, 0xaca80008,
+0xaca20018, 0x8ee204e4, 0xaca2001c, 0x8ee204c8,
+0x3c030002, 0x431025, 0xaca20010, 0xaf860100,
+0x92e204ec, 0x14400037, 0x24090001, 0x8ee24e28,
+0x210c0, 0x24424e38, 0x2e22021, 0x8c830000,
+0x24020005, 0x1462001f, 0x0, 0x8ee34e28,
+0x8ee24e2c, 0x1062001b, 0x24030040, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e2c, 0x8ee54e28,
+0x24420001, 0x10430007, 0x0, 0x8ee24e2c,
+0x24420001, 0x10a20005, 0x0, 0x80027d0,
+0x0, 0x14a00005, 0x0, 0x8f820108,
+0x24420020, 0xaf820108, 0x8f820108, 0x8c820004,
+0x2c420011, 0x50400013, 0xac800000, 0x80027e6,
+0x0, 0x8ee24e28, 0x24030040, 0x24420001,
+0x50430003, 0x1021, 0x8ee24e28, 0x24420001,
+0xaee24e28, 0x8ee24e28, 0x210c0, 0x24424e38,
+0x2e22021, 0x24020005, 0xac820000, 0x24020001,
+0xac820004, 0x1520000a, 0x2508fffc, 0xafab0010,
+0x8ee27264, 0x3c040001, 0x24844f00, 0x3c050004,
+0xafa20014, 0x8ee604e4, 0x80028c2, 0x34a5f015,
+0x34028100, 0xa5020000, 0x9582000e, 0x8002863,
+0xa5020002, 0x8f850100, 0x27623000, 0x24a60020,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 20'
echo 'File patch-2.2.4 is continued in part 21'
echo 21 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 22 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 22; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+0x8003bcd, 0x8ee201a4, 0x8e260000, 0x8e270004,
+0x81400, 0x3448000b, 0xad300008, 0xa52b000e,
+0xad280018, 0x8fb80044, 0x2021, 0x2961025,
+0x581025, 0xad22001c, 0xe5102b, 0xe53823,
+0xc43023, 0xc23023, 0xad260000, 0xad270004,
+0x8ee204c0, 0xad220010, 0xaf830120, 0x92e24e20,
+0x1440005f, 0x24070001, 0x2502ffee, 0x2c420002,
+0x14400003, 0x24020011, 0x15020024, 0x0,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c830000, 0x24020012, 0x1462000f, 0x0,
+0x8ee34e30, 0x8ee24e34, 0x1062000b, 0x0,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34,
+0x8ee34e30, 0x24420001, 0x105e002a, 0x0,
+0x8003bac, 0x0, 0x8ee24e30, 0x24420001,
+0x505e0003, 0x1021, 0x8ee24e30, 0x24420001,
+0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x8003bca, 0x24020012, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x8c830000,
+0x24020007, 0x1462001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x0, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30,
+0x24420001, 0x105e0007, 0x0, 0x8ee24e34,
+0x24420001, 0x10620005, 0x0, 0x8003bb8,
+0x0, 0x14600005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400012, 0xac800000, 0x8003bcd,
+0x0, 0x8ee24e30, 0x24420001, 0x505e0003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x24020007, 0xac820000, 0x24020001, 0xac820004,
+0x14e00019, 0x3c050006, 0x3c040001, 0x24845060,
+0x8e220018, 0x34a5f209, 0xafa20010, 0x8e220000,
+0x8e230004, 0x2203021, 0x1603821, 0xc002407,
+0xafa30014, 0x93a2002f, 0x1040002a, 0x34028100,
+0x8e430004, 0x8e440008, 0x8e45000c, 0xa642000c,
+0xae430000, 0xae440004, 0xae450008, 0x96220016,
+0x8003c06, 0xa642000e, 0x1599000a, 0x26a1823,
+0x9622000e, 0xa623000a, 0x34420004, 0xa622000e,
+0x3c010001, 0x370821, 0xa02083c0, 0x8003c03,
+0x9821, 0x9624000a, 0x83102b, 0x54400001,
+0x801821, 0x24020001, 0xa623000a, 0x3c010001,
+0x370821, 0xa02283c0, 0x9622000a, 0x4a1821,
+0x2038021, 0x1d0102b, 0x54400001, 0x20f8021,
+0x2639823, 0xb021, 0x8fb80024, 0x1660fe5e,
+0xaf0d0000, 0x12600022, 0x0, 0x3c010001,
+0x370821, 0xac3383c4, 0x3c010001, 0x370821,
+0xac3083c8, 0x3c010001, 0x370821, 0xac3283cc,
+0x93a2002f, 0x10400008, 0x0, 0x3c020001,
+0x571021, 0x8c4283cc, 0x24420004, 0x3c010001,
+0x370821, 0xac2283cc, 0x8f430280, 0x8ee2724c,
+0x14620006, 0x0, 0x8ee201c4, 0x24420001,
+0xaee201c4, 0x8003c5f, 0x8ee201c4, 0x8ee201bc,
+0x24420001, 0xaee201bc, 0x8003c5f, 0x8ee201bc,
+0x97a4001e, 0x2484fffc, 0x801821, 0x8ee400c0,
+0x8ee500c4, 0x1021, 0xa32821, 0xa3302b,
+0x822021, 0x862021, 0x24020002, 0xaee400c0,
+0xaee500c4, 0x12a2000f, 0x2aa20003, 0x14400017,
+0x24020003, 0x16a20015, 0x0, 0x8ee200d0,
+0x8ee300d4, 0x24630001, 0x2c640001, 0x441021,
+0xaee200d0, 0xaee300d4, 0x8ee200d0, 0x8003c59,
+0x8ee300d4, 0x8ee200d8, 0x8ee300dc, 0x24630001,
+0x2c640001, 0x441021, 0xaee200d8, 0xaee300dc,
+0x8ee200d8, 0x8003c59, 0x8ee300dc, 0x8ee200c8,
+0x8ee300cc, 0x24630001, 0x2c640001, 0x441021,
+0xaee200c8, 0xaee300cc, 0x8ee200c8, 0x8ee300cc,
+0x8f8300e4, 0x8f8200e0, 0x10620003, 0x24630008,
+0xaf8300e4, 0xaf8300e8, 0x8fbf0068, 0x8fbe0064,
+0x8fb60060, 0x8fb5005c, 0x8fb40058, 0x8fb30054,
+0x8fb20050, 0x8fb1004c, 0x8fb00048, 0x3e00008,
+0x27bd0070, 0x27bdffe0, 0xafbf0018, 0x8ee30e14,
+0x8ee20e0c, 0x10620074, 0x0, 0x8ee30e0c,
+0x8ee20e14, 0x622023, 0x4820001, 0x24840200,
+0x8ee30e18, 0x8ee20e14, 0x43102b, 0x14400004,
+0x24020200, 0x8ee30e14, 0x8003c81, 0x431823,
+0x8ee20e18, 0x8ee30e14, 0x431023, 0x2443ffff,
+0x804821, 0x69102a, 0x54400001, 0x604821,
+0x8f870100, 0x27623000, 0x24e80020, 0x102102b,
+0x50400001, 0x27682800, 0x8f820108, 0x11020004,
+0x0, 0x8f820104, 0x15020007, 0x1021,
+0x8ee201a8, 0x2021, 0x24420001, 0xaee201a8,
+0x8003cc3, 0x8ee201a8, 0x8ee40e14, 0x42140,
+0x801821, 0x8ee40460, 0x8ee50464, 0xa32821,
+0xa3302b, 0x822021, 0x862021, 0xace40000,
+0xace50004, 0x8ee30e14, 0x91140, 0xa4e2000e,
+0x24020002, 0xace20018, 0x31940, 0x24630e20,
+0x2e31021, 0xace20008, 0x8ee20e14, 0xace2001c,
+0x8ee204cc, 0xace20010, 0xaf880100, 0x92e204ec,
+0x14400011, 0x24040001, 0x8ee24e28, 0x24030040,
+0x24420001, 0x50430003, 0x1021, 0x8ee24e28,
+0x24420001, 0xaee24e28, 0x8ee24e28, 0x210c0,
+0x24424e38, 0x2e21821, 0x24020002, 0xac620000,
+0x24020001, 0xac620004, 0x1480000e, 0x24030040,
+0x8ee20e14, 0xafa20010, 0x8ee20e18, 0x3c050007,
+0xafa20014, 0x8ee60e0c, 0x8ee70e10, 0x3c040001,
+0x248450a4, 0xc002407, 0x34a5f001, 0x8003ce1,
+0x0, 0x8ee20500, 0x24420001, 0x50430003,
+0x1021, 0x8ee20500, 0x24420001, 0xaee20500,
+0x8ee20500, 0x21080, 0x571021, 0xac490508,
+0x8ee20e14, 0x491021, 0x304201ff, 0xaee20e14,
+0x8ee30e14, 0x8ee20e0c, 0x14620005, 0x0,
+0x8f820060, 0x2403fdff, 0x431024, 0xaf820060,
+0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffe0,
+0xafbf0018, 0x8ee3523c, 0x8ee25238, 0x10620074,
+0x0, 0x8ee35238, 0x8ee2523c, 0x622023,
+0x4820001, 0x24840100, 0x8ee35244, 0x8ee2523c,
+0x43102b, 0x14400004, 0x24020100, 0x8ee3523c,
+0x8003d03, 0x431823, 0x8ee25244, 0x8ee3523c,
+0x431023, 0x2443ffff, 0x804821, 0x69102a,
+0x54400001, 0x604821, 0x8f870100, 0x27623000,
+0x24e80020, 0x102102b, 0x50400001, 0x27682800,
+0x8f820108, 0x11020004, 0x0, 0x8f820104,
+0x15020007, 0x1021, 0x8ee201a8, 0x2021,
+0x24420001, 0xaee201a8, 0x8003d45, 0x8ee201a8,
+0x8ee4523c, 0x42140, 0x801821, 0x8ee40470,
+0x8ee50474, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xace40000, 0xace50004, 0x8ee3523c,
+0x91140, 0xa4e2000e, 0x24020003, 0xace20018,
+0x31940, 0x24635248, 0x2e31021, 0xace20008,
+0x8ee2523c, 0xace2001c, 0x8ee204cc, 0xace20010,
+0xaf880100, 0x92e204ec, 0x14400011, 0x24040001,
+0x8ee24e28, 0x24030040, 0x24420001, 0x50430003,
+0x1021, 0x8ee24e28, 0x24420001, 0xaee24e28,
+0x8ee24e28, 0x210c0, 0x24424e38, 0x2e21821,
+0x24020003, 0xac620000, 0x24020001, 0xac620004,
+0x1480000e, 0x24030040, 0x8ee2523c, 0xafa20010,
+0x8ee25244, 0x3c050007, 0xafa20014, 0x8ee65238,
+0x8ee75240, 0x3c040001, 0x248450b0, 0xc002407,
+0x34a5f010, 0x8003d63, 0x0, 0x8ee20500,
+0x24420001, 0x50430003, 0x1021, 0x8ee20500,
+0x24420001, 0xaee20500, 0x8ee20500, 0x21080,
+0x571021, 0xac490508, 0x8ee2523c, 0x491021,
+0x304200ff, 0xaee2523c, 0x8ee3523c, 0x8ee25238,
+0x14620005, 0x0, 0x8f820060, 0x2403feff,
+0x431024, 0xaf820060, 0x8fbf0018, 0x3e00008,
+0x27bd0020, 0x8f820120, 0x8ee34e34, 0x8f820124,
+0x8f860128, 0x24020040, 0x24630001, 0x50620003,
+0x1021, 0x8ee24e34, 0x24420001, 0xaee24e34,
+0x8ee24e34, 0x8ee44e34, 0x8ee34e30, 0x210c0,
+0x24425038, 0x14830007, 0x2e22821, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8003d96,
+0xaca00000, 0x8ee24e34, 0x24030040, 0x24420001,
+0x50430003, 0x1021, 0x8ee24e34, 0x24420001,
+0x210c0, 0x24425038, 0x2e22821, 0x8ca20004,
+0x8f830128, 0x21140, 0x621821, 0xaf830128,
+0xaca00000, 0x8cc20018, 0x2443fffe, 0x2c620012,
+0x10400008, 0x31080, 0x3c010001, 0x220821,
+0x8c2250c0, 0x400008, 0x0, 0x24020001,
+0xaee24e24, 0x3e00008, 0x0, 0x27bdffc8,
+0xafbf0030, 0xafb5002c, 0xafb40028, 0xafb30024,
+0xafb20020, 0xafb1001c, 0xafb00018, 0x8f830128,
+0x8f820124, 0x106202b0, 0x9821, 0x3c11001f,
+0x3631ffff, 0x3c12fff5, 0x36521000, 0x24150012,
+0x24140040, 0x8f8c0128, 0x8f820128, 0x24420020,
+0xaf820128, 0x9182001b, 0x8f830128, 0x2443fffe,
+0x2c620012, 0x1040029c, 0x31080, 0x3c010001,
+0x220821, 0x8c225118, 0x400008, 0x0,
+0x8f420218, 0x30420100, 0x10400007, 0x0,
+0x95830016, 0x95820018, 0x621823, 0x31402,
+0x431021, 0xa5820016, 0x8d82001c, 0x3c038000,
+0x3044ffff, 0x436824, 0x3c030800, 0x431824,
+0x11a00004, 0xad84001c, 0x41140, 0x8003ddc,
+0x24425248, 0x41140, 0x24420e20, 0x2e25821,
+0x9562000e, 0x3042fffc, 0x10600004, 0xa562000e,
+0x95840016, 0x8003ec4, 0x0, 0x8d690018,
+0x4021, 0x952a0000, 0x25290002, 0x95270000,
+0x25290002, 0x95260000, 0x25290002, 0x95250000,
+0x25290002, 0x95240000, 0x25290002, 0x95230000,
+0x25290002, 0x95220000, 0x25290002, 0x1475021,
+0x1465021, 0x1455021, 0x1445021, 0x1435021,
+0x1425021, 0xa1c02, 0x3142ffff, 0x625021,
+0xa1c02, 0x3142ffff, 0x625021, 0x96e2046a,
+0x314effff, 0x30420002, 0x10400044, 0x5021,
+0x25220014, 0x222102b, 0x10400014, 0x1201821,
+0x2405000a, 0x2021, 0x223102b, 0x54400001,
+0x721821, 0x94620000, 0x24630002, 0x24a5ffff,
+0x14a0fff9, 0x822021, 0x41c02, 0x3082ffff,
+0x622021, 0x41402, 0x3083ffff, 0x431021,
+0x3042ffff, 0x8003e37, 0x1425021, 0x952a0000,
+0x25290002, 0x95280000, 0x25290002, 0x95270000,
+0x25290002, 0x95260000, 0x25290002, 0x95250000,
+0x25290002, 0x95230000, 0x25290002, 0x95220000,
+0x25290002, 0x95240000, 0x25290002, 0x1485021,
+0x1475021, 0x1465021, 0x1455021, 0x1435021,
+0x1425021, 0x95220000, 0x95230002, 0x1445021,
+0x1425021, 0x1435021, 0xa1c02, 0x3142ffff,
+0x625021, 0xa1c02, 0x3142ffff, 0x625021,
+0x3148ffff, 0x51000001, 0x3408ffff, 0x8d620018,
+0x9443000c, 0x24020800, 0x54620005, 0xa5680010,
+0x9562000e, 0x34420002, 0xa562000e, 0xa5680010,
+0x96e2046a, 0x2821, 0x30420008, 0x14400056,
+0x3021, 0x8d630018, 0x24620024, 0x222102b,
+0x10400034, 0x24690010, 0x229102b, 0x54400001,
+0x1324821, 0x95250000, 0x24690014, 0x229102b,
+0x10400002, 0x24a5ffec, 0x1324821, 0x95220000,
+0x30420fff, 0x14400003, 0x25290002, 0x8003e64,
+0x24130001, 0x9821, 0xa03021, 0x229102b,
+0x54400001, 0x1324821, 0x91220001, 0x25290002,
+0xa22821, 0x229102b, 0x54400001, 0x1324821,
+0x25290002, 0x229102b, 0x54400001, 0x1324821,
+0x95220000, 0x25290002, 0xa22821, 0x229102b,
+0x54400001, 0x1324821, 0x95220000, 0x25290002,
+0xa22821, 0x229102b, 0x54400001, 0x1324821,
+0x95220000, 0x25290002, 0xa22821, 0x229102b,
+0x54400001, 0x1324821, 0x95220000, 0x8003e9d,
+0xa22821, 0x94650010, 0x94620014, 0x24690016,
+0x30420fff, 0x14400003, 0x24a5ffec, 0x8003e90,
+0x24130001, 0x9821, 0xa03021, 0x91230001,
+0x25290004, 0x95220000, 0x25290002, 0x95240000,
+0x25290002, 0xa32821, 0xa22821, 0x95220000,
+0x95230002, 0xa42821, 0xa22821, 0xa32821,
+0x51c02, 0x30a2ffff, 0x622821, 0x51c02,
+0x30a2ffff, 0x622821, 0x96e2046a, 0x30420001,
+0x1040001e, 0x2021, 0x95820016, 0x4e2023,
+0x41402, 0x822021, 0x326200ff, 0x50400002,
+0x862021, 0x852021, 0x41402, 0x822021,
+0x3084ffff, 0x50800001, 0x3404ffff, 0x8d620018,
+0x24430017, 0x223102b, 0x54400001, 0x721821,
+0x90620000, 0x38430011, 0x2c630001, 0x38420006,
+0x2c420001, 0x621825, 0x10600004, 0x0,
+0x9562000e, 0x34420001, 0xa562000e, 0x9562000e,
+0x240a0002, 0x30420004, 0x10400002, 0xa5640012,
+0x240a0004, 0x8f880120, 0x27623800, 0x25090020,
+0x122102b, 0x50400001, 0x27693000, 0x8f820128,
+0x11220004, 0x0, 0x8f820124, 0x15220007,
+0x24040020, 0x8ee201a4, 0x8021, 0x24420001,
+0xaee201a4, 0x8003f53, 0x8ee201a4, 0x8ee5724c,
+0x8ee60490, 0x8ee70494, 0xad0b0008, 0xa504000e,
+0xad0a0018, 0x52940, 0xa01821, 0x1021,
+0xe33821, 0xe3202b, 0xc23021, 0xc43021,
+0xad060000, 0xad070004, 0x8ee2724c, 0x4d1025,
+0xad02001c, 0x8ee204c4, 0xad020010, 0xaf890120,
+0x92e24e20, 0x14400060, 0x24100001, 0x2543ffee,
+0x2c630002, 0x39420011, 0x2c420001, 0x621825,
+0x10600024, 0x0, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x8c820000, 0x1455000f,
+0x0, 0x8ee34e30, 0x8ee24e34, 0x1062000b,
+0x0, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e34, 0x8ee34e30, 0x24420001, 0x1054002b,
+0x0, 0x8003f32, 0x0, 0x8ee24e30,
+0x24420001, 0x50540003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x24020001, 0x8003f52,
+0xac950000, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x8c830000, 0x24020007, 0x1462001f,
+0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b,
+0x0, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e34, 0x8ee34e30, 0x24420001, 0x10540007,
+0x0, 0x8ee24e34, 0x24420001, 0x10620005,
+0x0, 0x8003f3e, 0x0, 0x14600005,
+0x0, 0x8f820128, 0x24420020, 0xaf820128,
+0x8f820128, 0x8c820004, 0x2c420011, 0x50400012,
+0xac800000, 0x8003f53, 0x0, 0x8ee24e30,
+0x24420001, 0x50540003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x24020007, 0xac820000,
+0x24020001, 0xac820004, 0x1600000d, 0x0,
+0x8f820120, 0x3c040001, 0x24845108, 0xafa00014,
+0xafa20010, 0x8d86001c, 0x8f870124, 0x3c050008,
+0xc002407, 0x34a50001, 0x800405b, 0x0,
+0x8ee2724c, 0x24420001, 0x304207ff, 0x11a00006,
+0xaee2724c, 0x8ee201d0, 0x2442ffff, 0xaee201d0,
+0x8003f6f, 0x8ee201d0, 0x8ee201cc, 0x2442ffff,
+0xaee201cc, 0x8ee201cc, 0x8ee201d8, 0x2442ffff,
+0xaee201d8, 0x800405b, 0x8ee201d8, 0x8f420240,
+0x104000e5, 0x0, 0x8ee20e1c, 0x24420001,
+0x800405b, 0xaee20e1c, 0x9582001e, 0xad82001c,
+0x8f420240, 0x10400072, 0x0, 0x8ee20e1c,
+0x24420001, 0xaee20e1c, 0x8f430240, 0x43102b,
+0x144000d5, 0x0, 0x8f830120, 0x27623800,
+0x24660020, 0xc2102b, 0x50400001, 0x27663000,
+0x8f820128, 0x10c20004, 0x0, 0x8f820124,
+0x14c20007, 0x0, 0x8ee201a4, 0x8021,
+0x24420001, 0xaee201a4, 0x8003fde, 0x8ee201a4,
+0x8ee2724c, 0xac62001c, 0x8ee404a8, 0x8ee504ac,
+0x2462001c, 0xac620008, 0x24020008, 0xa462000e,
+0x24020011, 0xac620018, 0xac640000, 0xac650004,
+0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20,
+0x14400034, 0x24100001, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x8c820000, 0x1455001f,
+0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b,
+0x0, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e34, 0x8ee34e30, 0x24420001, 0x10540007,
+0x0, 0x8ee24e34, 0x24420001, 0x10620005,
+0x0, 0x8003fca, 0x0, 0x14600005,
+0x0, 0x8f820128, 0x24420020, 0xaf820128,
+0x8f820128, 0x8c820004, 0x2c420011, 0x50400011,
+0xac800000, 0x8003fde, 0x0, 0x8ee24e30,
+0x24420001, 0x50540003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x24020001, 0xac950000,
+0xac820004, 0x5600000b, 0x24100001, 0x8ee2724c,
+0x3c040001, 0x24845078, 0xafa00014, 0xafa20010,
+0x8ee6724c, 0x8f470280, 0x3c050009, 0xc002407,
+0x34a5f008, 0x56000001, 0xaee00e1c, 0x8ee20188,
+0x24420001, 0xaee20188, 0x8004054, 0x8ee20188,
+0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
+0x50400001, 0x27663000, 0x8f820128, 0x10c20004,
+0x0, 0x8f820124, 0x14c20007, 0x0,
+0x8ee201a4, 0x8021, 0x24420001, 0xaee201a4,
+0x8004048, 0x8ee201a4, 0x8ee2724c, 0xac62001c,
+0x8ee404a8, 0x8ee504ac, 0x2462001c, 0xac620008,
+0x24020008, 0xa462000e, 0x24020011, 0xac620018,
+0xac640000, 0xac650004, 0x8ee204c4, 0xac620010,
+0xaf860120, 0x92e24e20, 0x14400034, 0x24100001,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c820000, 0x1455001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x0, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee34e30,
+0x24420001, 0x10540007, 0x0, 0x8ee24e34,
+0x24420001, 0x10620005, 0x0, 0x8004034,
+0x0, 0x14600005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400011, 0xac800000, 0x8004048,
+0x0, 0x8ee24e30, 0x24420001, 0x50540003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x24020001, 0xac950000, 0xac820004, 0x1600000b,
+0x0, 0x8ee2724c, 0x3c040001, 0x24845078,
+0xafa00014, 0xafa20010, 0x8ee6724c, 0x8f470280,
+0x3c050009, 0xc002407, 0x34a5f008, 0x8ee20174,
+0x24420001, 0xaee20174, 0x800405b, 0x8ee20174,
+0x24020001, 0xaee24e24, 0x8f830128, 0x8f820124,
+0x1462fd58, 0x0, 0x8fbf0030, 0x8fb5002c,
+0x8fb40028, 0x8fb30024, 0x8fb20020, 0x8fb1001c,
+0x8fb00018, 0x3e00008, 0x27bd0038, 0x27bdffe8,
+0x27840208, 0x27450200, 0x24060008, 0xafbf0014,
+0xc00249e, 0xafb00010, 0x2021, 0x24100001,
+0x2402241f, 0xaf900210, 0xaf900200, 0xaf800204,
+0xaf820214, 0x8f460248, 0x24030004, 0x3c020040,
+0x3c010001, 0xac235474, 0x3c010001, 0xac235478,
+0x3c010001, 0xac20552c, 0x3c010001, 0xac225470,
+0x3c010001, 0xac235478, 0xc004fa4, 0x24050004,
+0xc004784, 0x0, 0x8ee20000, 0x3c03feff,
+0x3463fffd, 0x431024, 0xaee20000, 0x3c023c00,
+0xaf82021c, 0x3c010001, 0x370821, 0xac3083ac,
+0x8fbf0014, 0x8fb00010, 0x3e00008, 0x27bd0018,
+0x27bdffe0, 0x3c050008, 0x34a50400, 0xafbf0018,
+0xafa00010, 0xafa00014, 0x8f860200, 0x3c040001,
+0x248451c0, 0xc002407, 0x3821, 0x8ee20280,
+0x24420001, 0xaee20280, 0x8ee20280, 0x8f830200,
+0x3c023f00, 0x621824, 0x8fbf0018, 0x3c020400,
+0x3e00008, 0x27bd0020, 0x27bdffd8, 0xafbf0020,
+0xafb1001c, 0xafb00018, 0x8f900220, 0x8ee20214,
+0x3821, 0x24420001, 0xaee20214, 0x8ee20214,
+0x3c020300, 0x2021024, 0x10400027, 0x3c110400,
+0xc00429f, 0x0, 0x3c020100, 0x2021024,
+0x10400007, 0x0, 0x8ee20218, 0x24420001,
+0xaee20218, 0x8ee20218, 0x80040ca, 0x3c03fdff,
+0x8ee2021c, 0x24420001, 0xaee2021c, 0x8ee2021c,
+0x3c03fdff, 0x3463ffff, 0x3c0808ff, 0x3508ffff,
+0x8ee20000, 0x3c040001, 0x248451cc, 0x3c050008,
+0x2003021, 0x431024, 0xaee20000, 0x8f820220,
+0x3821, 0x3c030300, 0x481024, 0x431025,
+0xaf820220, 0xafa00010, 0xc002407, 0xafa00014,
+0x800429a, 0x0, 0x2111024, 0x1040001f,
+0x3c024000, 0x8f830224, 0x24021402, 0x1462000b,
+0x3c03fdff, 0x3c040001, 0x248451d8, 0x3c050008,
+0xafa00010, 0xafa00014, 0x8f860224, 0x34a5ffff,
+0xc002407, 0x3821, 0x3c03fdff, 0x8ee20000,
+0x3463ffff, 0x2002021, 0x431024, 0xc004cf0,
+0xaee20000, 0x8ee20220, 0x24420001, 0xaee20220,
+0x8ee20220, 0x8f820220, 0x3c0308ff, 0x3463ffff,
+0x431024, 0x8004299, 0x511025, 0x2021024,
+0x10400142, 0x0, 0x8ee2022c, 0x24420001,
+0xaee2022c, 0x8ee2022c, 0x8f820220, 0x3c0308ff,
+0x3463ffff, 0x431024, 0x34420004, 0xaf820220,
+0x8f830054, 0x8f820054, 0x8004112, 0x24630002,
+0x8f820054, 0x621023, 0x2c420003, 0x1440fffc,
+0x0, 0x8f8600e0, 0x8f8400e4, 0x30c20007,
+0x10400012, 0x0, 0x8f8300e4, 0x2402fff8,
+0xc21024, 0x1043000d, 0x0, 0x8f820054,
+0x8f8300e0, 0x14c30009, 0x24440050, 0x8f820054,
+0x821023, 0x2c420051, 0x10400004, 0x0,
+0x8f8200e0, 0x10c2fff9, 0x0, 0x8f820220,
+0x3c0308ff, 0x3463fffd, 0x431024, 0xaf820220,
+0x8f8600e0, 0x30c20007, 0x10400003, 0x2402fff8,
+0xc23024, 0xaf8600e0, 0x8f8300c4, 0x3c02001f,
+0x3442ffff, 0x24680008, 0x48102b, 0x10400003,
+0x3c02fff5, 0x34421000, 0x1024021, 0x8f8b00c8,
+0x8f850120, 0x8f840124, 0x8004149, 0x6021,
+0x27623800, 0x82102b, 0x50400001, 0x27643000,
+0x10a40010, 0x318200ff, 0x8c820018, 0x38430007,
+0x2c630001, 0x3842000b, 0x2c420001, 0x621825,
+0x5060fff3, 0x24840020, 0x8ee20240, 0x240c0001,
+0x24420001, 0xaee20240, 0x8ee20240, 0x8c8b0008,
+0x318200ff, 0x14400065, 0x0, 0x3c020001,
+0x571021, 0x904283c0, 0x14400060, 0x0,
+0x8f8400e4, 0xc41023, 0x218c3, 0x4620001,
+0x24630200, 0x8f8900c4, 0x10600005, 0x24020001,
+0x10620009, 0x0, 0x800418b, 0x0,
+0x8ee20230, 0x1205821, 0x24420001, 0xaee20230,
+0x80041c0, 0x8ee20230, 0x8ee20234, 0x3c05000a,
+0x24420001, 0xaee20234, 0x8c8b0000, 0x34a5f000,
+0x8ee20234, 0x12b1823, 0xa3102b, 0x54400001,
+0x651821, 0x2c62233f, 0x14400040, 0x0,
+0x8f8200e8, 0x24420008, 0xaf8200e8, 0x8f8200e8,
+0x8f8200e4, 0x1205821, 0x24420008, 0xaf8200e4,
+0x80041c0, 0x8f8200e4, 0x8ee20238, 0x3c03000a,
+0x24420001, 0xaee20238, 0x8c840000, 0x3463f000,
+0x8ee20238, 0x883823, 0x67102b, 0x54400001,
+0xe33821, 0x3c020003, 0x34420d40, 0x47102b,
+0x10400003, 0x0, 0x80041c0, 0x805821,
+0x8f8200e4, 0x24440008, 0xaf8400e4, 0x8f8400e4,
+0x10860018, 0x3c05000a, 0x34a5f000, 0x3c0a0003,
+0x354a0d40, 0x8ee2007c, 0x24420001, 0xaee2007c,
+0x8c830000, 0x8ee2007c, 0x683823, 0xa7102b,
+0x54400001, 0xe53821, 0x147102b, 0x54400007,
+0x605821, 0x8f8200e4, 0x24440008, 0xaf8400e4,
+0x8f8400e4, 0x1486ffef, 0x0, 0x14860005,
+0x0, 0x1205821, 0xaf8600e4, 0x80041c0,
+0xaf8600e8, 0xaf8400e4, 0xaf8400e8, 0x8f8200c8,
+0x3c03000a, 0x3463f000, 0x483823, 0x67102b,
+0x54400001, 0xe33821, 0x3c020003, 0x34420d3f,
+0x47102b, 0x54400007, 0x6021, 0x1683823,
+0x67102b, 0x54400003, 0xe33821, 0x80041d3,
+0x3c020003, 0x3c020003, 0x34420d3f, 0x47102b,
+0x14400016, 0x318200ff, 0x14400006, 0x0,
+0x3c020001, 0x571021, 0x904283c0, 0x1040000f,
+0x0, 0x8ee2023c, 0x3c04fdff, 0x8ee30000,
+0x3484ffff, 0x24420001, 0xaee2023c, 0x8ee2023c,
+0x24020001, 0x641824, 0x3c010001, 0x370821,
+0xa02283b8, 0x8004230, 0xaee30000, 0xaf8b00c8,
+0x8f8300c8, 0x8f8200c4, 0x3c04000a, 0x3484f000,
+0x623823, 0x87102b, 0x54400001, 0xe43821,
+0x3c020003, 0x34420d40, 0x47102b, 0x2ce30001,
+0x431025, 0x10400008, 0x0, 0x8f820220,
+0x3c0308ff, 0x3463ffff, 0x431024, 0x3c034000,
+0x431025, 0xaf820220, 0x8f8600e0, 0x8f8400e4,
+0x10c4002a, 0x0, 0x8ee2007c, 0x24420001,
+0xaee2007c, 0x8ee2007c, 0x24c2fff8, 0xaf8200e0,
+0x3c020001, 0x8c4275b0, 0x3c030008, 0x8f8600e0,
+0x431024, 0x1040001d, 0x0, 0x10c4001b,
+0x240dfff8, 0x3c0a000a, 0x354af000, 0x3c0c0080,
+0x24850008, 0x27622800, 0x50a20001, 0x27651800,
+0x8c880004, 0x8c820000, 0x8ca90000, 0x3103ffff,
+0x431021, 0x4d1024, 0x24430010, 0x6b102b,
+0x54400001, 0x6a1821, 0x12b102b, 0x54400001,
+0x12a4821, 0x10690002, 0x10c1025, 0xac820004,
+0xa02021, 0x14c4ffeb, 0x24850008, 0x8f820220,
+0x3c0308ff, 0x3463ffff, 0x431024, 0x34420002,
+0xaf820220, 0x8f830054, 0x8f820054, 0x800423b,
+0x24630001, 0x8f820054, 0x621023, 0x2c420002,
+0x1440fffc, 0x0, 0x8f820220, 0x3c0308ff,
+0x3463fffb, 0x431024, 0xaf820220, 0x6010055,
+0x0, 0x8ee20228, 0x24420001, 0xaee20228,
+0x8ee20228, 0x8f820220, 0x3c0308ff, 0x3463ffff,
+0x431024, 0x34420004, 0xaf820220, 0x8f830054,
+0x8f820054, 0x8004255, 0x24630002, 0x8f820054,
+0x621023, 0x2c420003, 0x1440fffc, 0x0,
+0x8f8600e0, 0x30c20007, 0x10400012, 0x0,
+0x8f8300e4, 0x2402fff8, 0xc21024, 0x1043000d,
+0x0, 0x8f820054, 0x8f8300e0, 0x14c30009,
+0x24440032, 0x8f820054, 0x821023, 0x2c420033,
+0x10400004, 0x0, 0x8f8200e0, 0x10c2fff9,
+0x0, 0x8f820220, 0x3c0308ff, 0x3463fffd,
+0x431024, 0xaf820220, 0x8f8600e0, 0x30c20007,
+0x10400003, 0x2402fff8, 0xc23024, 0xaf8600e0,
+0x240301f5, 0x8f8200e8, 0x673823, 0x718c0,
+0x431021, 0xaf8200e8, 0x8f8200e8, 0xaf8200e4,
+0x8ee2007c, 0x3c0408ff, 0x3484ffff, 0x471021,
+0xaee2007c, 0x8f820220, 0x3c038000, 0x34630002,
+0x441024, 0x431025, 0xaf820220, 0x8f830054,
+0x8f820054, 0x8004291, 0x24630001, 0x8f820054,
+0x621023, 0x2c420002, 0x1440fffc, 0x0,
+0x8f820220, 0x3c0308ff, 0x3463fffb, 0x431024,
+0xaf820220, 0x8fbf0020, 0x8fb1001c, 0x8fb00018,
+0x3e00008, 0x27bd0028, 0x3c020001, 0x8c425488,
+0x27bdffd8, 0x10400012, 0xafbf0020, 0x3c040001,
+0x248451e4, 0x3c050008, 0x24020001, 0x3c010001,
+0x370821, 0xac2283ac, 0xafa00010, 0xafa00014,
+0x8f860220, 0x34a50498, 0x3c010001, 0xac205488,
+0x3c010001, 0xac22547c, 0xc002407, 0x3821,
+0x8f420268, 0x3c037fff, 0x3463ffff, 0x431024,
+0xaf420268, 0x8ee204d0, 0x8ee404d4, 0x2403fffe,
+0x431024, 0x30840002, 0x1080011e, 0xaee204d0,
+0x8ee204d4, 0x2403fffd, 0x431024, 0xaee204d4,
+0x8f820044, 0x3c030600, 0x34632000, 0x34420020,
+0xaf820044, 0xafa30018, 0x8ee20608, 0x8f430228,
+0x24420001, 0x304a00ff, 0x514300fe, 0xafa00010,
+0x8ee20608, 0x210c0, 0x571021, 0x8fa30018,
+0x8fa4001c, 0xac43060c, 0xac440610, 0x8f830054,
+0x8f820054, 0x24690032, 0x1221023, 0x2c420033,
+0x1040006a, 0x5821, 0x24180008, 0x240f000d,
+0x240d0007, 0x240c0040, 0x240e0001, 0x8f870120,
+0x27623800, 0x24e80020, 0x102102b, 0x50400001,
+0x27683000, 0x8f820128, 0x11020004, 0x0,
+0x8f820124, 0x15020007, 0x1021, 0x8ee201a4,
+0x2821, 0x24420001, 0xaee201a4, 0x8004341,
+0x8ee201a4, 0x8ee40608, 0x420c0, 0x801821,
+0x8ee40430, 0x8ee50434, 0xa32821, 0xa3302b,
+0x822021, 0x862021, 0xace40000, 0xace50004,
+0x8ee20608, 0xa4f8000e, 0xacef0018, 0xacea001c,
+0x210c0, 0x2442060c, 0x2e21021, 0xace20008,
+0x8ee204c4, 0xace20010, 0xaf880120, 0x92e24e20,
+0x14400033, 0x24050001, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x8c820000, 0x144d001f,
+0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b,
+0x0, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e34, 0x8ee34e30, 0x24420001, 0x104c0007,
+0x0, 0x8ee24e34, 0x24420001, 0x10620005,
+0x0, 0x800432e, 0x0, 0x14600005,
+0x0, 0x8f820128, 0x24420020, 0xaf820128,
+0x8f820128, 0x8c820004, 0x2c420011, 0x50400010,
+0xac800000, 0x8004341, 0x0, 0x8ee24e30,
+0x24420001, 0x504c0003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0xac8d0000, 0xac8e0004,
+0x54a00006, 0x240b0001, 0x8f820054, 0x1221023,
+0x2c420033, 0x1440ff9d, 0x0, 0x316300ff,
+0x24020001, 0x54620079, 0xafa00010, 0xaeea0608,
+0x8f830054, 0x8f820054, 0x24690032, 0x1221023,
+0x2c420033, 0x10400061, 0x5821, 0x240d0008,
+0x240c0011, 0x24080012, 0x24070040, 0x240a0001,
+0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
+0x50400001, 0x27663000, 0x8f820128, 0x10c20004,
+0x0, 0x8f820124, 0x14c20007, 0x0,
+0x8ee201a4, 0x2821, 0x24420001, 0xaee201a4,
+0x80043ad, 0x8ee201a4, 0x8ee20608, 0xac62001c,
+0x8ee404a0, 0x8ee504a4, 0x2462001c, 0xac620008,
+0xa46d000e, 0xac6c0018, 0xac640000, 0xac650004,
+0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20,
+0x14400033, 0x24050001, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x8c820000, 0x1448001f,
+0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b,
+0x0, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e34, 0x8ee34e30, 0x24420001, 0x10470007,
+0x0, 0x8ee24e34, 0x24420001, 0x10620005,
+0x0, 0x800439a, 0x0, 0x14600005,
+0x0, 0x8f820128, 0x24420020, 0xaf820128,
+0x8f820128, 0x8c820004, 0x2c420011, 0x50400010,
+0xac800000, 0x80043ad, 0x0, 0x8ee24e30,
+0x24420001, 0x50470003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0xac880000, 0xac8a0004,
+0x54a00006, 0x240b0001, 0x8f820054, 0x1221023,
+0x2c420033, 0x1440ffa6, 0x0, 0x316300ff,
+0x24020001, 0x54620003, 0xafa00010, 0x80043da,
+0x0, 0x3c040001, 0x248451f0, 0xafa00014,
+0x8f860120, 0x8f870124, 0x3c050009, 0xc002407,
+0x34a5f011, 0x80043da, 0x0, 0x3c040001,
+0x248451fc, 0xafa00014, 0x8f860120, 0x8f870124,
+0x3c050009, 0xc002407, 0x34a5f010, 0x80043da,
+0x0, 0x3c040001, 0x24845208, 0xafa00014,
+0x8ee60608, 0x8f470228, 0x3c050009, 0xc002407,
+0x34a5f00f, 0x8ee201ac, 0x24420001, 0xaee201ac,
+0x8ee201ac, 0x8ee2015c, 0x24420001, 0xaee2015c,
+0x8ee2015c, 0x8fbf0020, 0x3e00008, 0x27bd0028,
+0x3c020001, 0x8c425488, 0x27bdffe0, 0x1440000d,
+0xafbf0018, 0x3c040001, 0x24845214, 0x3c050008,
+0xafa00010, 0xafa00014, 0x8f860220, 0x34a50499,
+0x24020001, 0x3c010001, 0xac225488, 0xc002407,
+0x3821, 0x8ee204d0, 0x3c030001, 0x771821,
+0x946383b2, 0x34420001, 0x10600007, 0xaee204d0,
+0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024,
+0x34420008, 0xaf820220, 0x2021, 0xc0050af,
+0x24050004, 0xaf420268, 0x8fbf0018, 0x3e00008,
+0x27bd0020, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x3c120001,
+0x26521200, 0x3c140001, 0x8e945400, 0x3c100001,
+0x26101120, 0x3c15c000, 0x36b50060, 0x8e8a0000,
+0x8eb30000, 0x26a400b, 0x248000a, 0x200f821,
+0x0, 0xd, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x80014d6,
+0x0, 0x80014d8, 0x3c0a0001, 0x80014d8,
+0x3c0a0002, 0x80014d8, 0x0, 0x80024aa,
+0x0, 0x80014d8, 0x3c0a0003, 0x80014d8,
+0x3c0a0004, 0x8002f90, 0x0, 0x80014d8,
+0x3c0a0005, 0x8003cec, 0x0, 0x8003c6a,
+0x0, 0x80014d8, 0x3c0a0006, 0x80014d8,
+0x3c0a0007, 0x80014d8, 0x0, 0x80014d8,
+0x0, 0x80014d8, 0x0, 0x8002a79,
+0x0, 0x80014d8, 0x3c0a000b, 0x80014d8,
+0x3c0a000c, 0x80014d8, 0x3c0a000d, 0x800237c,
+0x0, 0x8002339, 0x0, 0x80014d8,
+0x3c0a000e, 0x8001b3c, 0x0, 0x80024a8,
+0x0, 0x80014d8, 0x3c0a000f, 0x80040ab,
+0x0, 0x8004095, 0x0, 0x80014d8,
+0x3c0a0010, 0x80014ee, 0x0, 0x80014d8,
+0x3c0a0011, 0x80014d8, 0x3c0a0012, 0x80014d8,
+0x3c0a0013, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x3c030001,
+0x34633800, 0x24050080, 0x2404001f, 0x2406ffff,
+0x24020001, 0xaf80021c, 0xaf820200, 0xaf820220,
+0x3631021, 0xaf8200c0, 0x3631021, 0xaf8200c4,
+0x3631021, 0xaf8200c8, 0x27623800, 0xaf8200d0,
+0x27623800, 0xaf8200d4, 0x27623800, 0xaf8200d8,
+0x27621800, 0xaf8200e0, 0x27621800, 0xaf8200e4,
+0x27621800, 0xaf8200e8, 0x27621000, 0xaf8200f0,
+0x27621000, 0xaf8200f4, 0x27621000, 0xaf8200f8,
+0xaca00000, 0x2484ffff, 0x1486fffd, 0x24a50004,
+0x8f830040, 0x3c02f000, 0x621824, 0x3c025000,
+0x1062000c, 0x43102b, 0x14400006, 0x3c026000,
+0x3c024000, 0x10620008, 0x24020800, 0x8004539,
+0x0, 0x10620004, 0x24020800, 0x8004539,
+0x0, 0x24020700, 0x3c010001, 0xac22548c,
+0x3e00008, 0x0, 0x27bdffd0, 0xafbf0028,
+0x3c010001, 0xc004ccd, 0xac205474, 0x24040001,
+0x2821, 0x27a60020, 0x34028000, 0xc0048ea,
+0xa7a20020, 0x8f830054, 0x8f820054, 0x800454b,
+0x24630064, 0x8f820054, 0x621023, 0x2c420065,
+0x1440fffc, 0x24040001, 0x24050001, 0xc0048a8,
+0x27a60020, 0x8f830054, 0x8f820054, 0x8004557,
+0x24630064, 0x8f820054, 0x621023, 0x2c420065,
+0x1440fffc, 0x24040001, 0x24050001, 0xc0048a8,
+0x27a60020, 0x8f830054, 0x8f820054, 0x8004563,
+0x24630064, 0x8f820054, 0x621023, 0x2c420065,
+0x1440fffc, 0x24040001, 0x24050002, 0xc0048a8,
+0x27a60018, 0x8f830054, 0x8f820054, 0x800456f,
+0x24630064, 0x8f820054, 0x621023, 0x2c420065,
+0x1440fffc, 0x24040001, 0x24050003, 0xc0048a8,
+0x27a6001a, 0x97a20020, 0x10400027, 0x24030001,
+0x3c020001, 0x8c425474, 0x97a30018, 0x34420001,
+0x3c010001, 0xac225474, 0x24020015, 0x1462000d,
+0x0, 0x97a2001a, 0x3843f423, 0x2c630001,
+0x3842f430, 0x2c420001, 0x621825, 0x10600005,
+0x24020003, 0x3c010001, 0xac225540, 0x80045a7,
+0x3c08fff0, 0x97a30018, 0x24027810, 0x1462000a,
+0x24020002, 0x97a3001a, 0x24020001, 0x14620006,
+0x24020002, 0x24020004, 0x3c010001, 0xac225540,
+0x80045a7, 0x3c08fff0, 0x3c010001, 0xac225540,
+0x80045a7, 0x3c08fff0, 0x3c020001, 0x8c425474,
+0x3c010001, 0xac235540, 0x34420004, 0x3c010001,
+0xac225474, 0x3c08fff0, 0x3508bdc0, 0x8f830054,
+0x97a60018, 0x3c070001, 0x8ce75540, 0x3c040001,
+0x24845280, 0x24020001, 0x3c010001, 0xac22547c,
+0xafa60010, 0x3c060001, 0x8cc65474, 0x97a2001a,
+0x3c05000d, 0x34a50100, 0x3c010001, 0xac205478,
+0x681821, 0x3c010001, 0xac235538, 0xc002407,
+0xafa20014, 0x8fbf0028, 0x3e00008, 0x27bd0030,
+0x27bdffe8, 0x24070004, 0x3c040001, 0x8c845478,
+0x3021, 0x24020001, 0x1482000a, 0xafbf0010,
+0x3c020001, 0x8c4275bc, 0x3c050004, 0x30428000,
+0x1040000c, 0x34a593e0, 0x3c05000f, 0x80045da,
+0x34a54240, 0x3c020001, 0x8c4275bc, 0x3c05000f,
+0x30428000, 0x10400003, 0x34a54240, 0x3c05001e,
+0x34a58480, 0x3c020001, 0x8c425538, 0x8f830054,
+0x451021, 0x431023, 0x45102b, 0x1440002e,
+0x0, 0x3c020001, 0x8c425480, 0x1440002a,
+0x2cc20001, 0x7182b, 0x431024, 0x1040001d,
+0x0, 0x3c090001, 0x8d295474, 0x240b0001,
+0x3c054000, 0x3c080001, 0x250875bc, 0x250afffc,
+0x42042, 0x14800002, 0x24e7ffff, 0x24040008,
+0x891024, 0x5040000b, 0x2cc20001, 0x148b0004,
+0x0, 0x8d020000, 0x80045ff, 0x451024,
+0x8d420000, 0x451024, 0x54400001, 0x24060001,
+0x2cc20001, 0x7182b, 0x431024, 0x5440ffed,
+0x42042, 0x3c010001, 0x10c00024, 0xac245478,
+0x8f830054, 0x24020001, 0x3c010001, 0xac22547c,
+0x3c010001, 0xac235538, 0x3c020001, 0x8c42547c,
+0x10400006, 0x24020001, 0x3c010001, 0xac20547c,
+0x3c010001, 0x370821, 0xac2283ac, 0x3c030001,
+0x771821, 0x8c6383ac, 0x24020008, 0x10620005,
+0x24020001, 0xc00462f, 0x0, 0x800462c,
+0x0, 0x3c030001, 0x8c635478, 0x10620007,
+0x2402000e, 0x3c030001, 0x8c637550, 0x10620003,
+0x0, 0xc004cf0, 0x8f840220, 0x8fbf0010,
+0x3e00008, 0x27bd0018, 0x27bdffe0, 0x3c02fdff,
+0xafbf0018, 0x8ee30000, 0x3c050001, 0x8ca55478,
+0x3c040001, 0x8c845498, 0x3442ffff, 0x621824,
+0x14a40008, 0xaee30000, 0x3c030001, 0x771821,
+0x8c6383ac, 0x3c020001, 0x8c42549c, 0x10620008,
+0x0, 0x3c020001, 0x571021, 0x8c4283ac,
+0x3c010001, 0xac255498, 0x3c010001, 0xac22549c,
+0x3c030001, 0x8c635478, 0x24020002, 0x10620131,
+0x2c620003, 0x10400005, 0x24020001, 0x10620008,
+0x0, 0x800477e, 0x0, 0x24020004,
+0x10620079, 0x24020001, 0x800477f, 0x0,
+0x3c020001, 0x571021, 0x8c4283ac, 0x2443ffff,
+0x2c620008, 0x10400122, 0x31080, 0x3c010001,
+0x220821, 0x8c225298, 0x400008, 0x0,
+0xc004784, 0x0, 0x3c020001, 0x8c425484,
+0x3c010001, 0xac205410, 0x104000bd, 0x24020002,
+0x3c010001, 0x370821, 0xac2283ac, 0x3c010001,
+0x8004781, 0xac205484, 0xc00492b, 0x0,
+0x3c030001, 0x8c6354a0, 0x80046f0, 0x24020011,
+0x3c050001, 0x8ca55478, 0x3c060001, 0x8cc675bc,
+0xc004fa4, 0x2021, 0x24020005, 0x3c010001,
+0xac205484, 0x3c010001, 0x370821, 0x8004781,
+0xac2283ac, 0x3c040001, 0x2484528c, 0x3c05000f,
+0x34a50100, 0x3021, 0x3821, 0xafa00010,
+0xc002407, 0xafa00014, 0x8004781, 0x0,
+0x8f820220, 0x3c03f700, 0x431025, 0x8004719,
+0xaf820220, 0x8f820220, 0x3c030004, 0x431024,
+0x14400090, 0x24020007, 0x8f830054, 0x3c020001,
+0x8c425530, 0x2463d8f0, 0x431023, 0x2c422710,
+0x144000df, 0x24020001, 0x800477f, 0x0,
+0x3c050001, 0x8ca55478, 0xc0050af, 0x2021,
+0xc00517a, 0x2021, 0x3c030001, 0x8c6375b4,
+0x46100d1, 0x24020001, 0x3c020008, 0x621024,
+0x10400006, 0x0, 0x8f820214, 0x3c03ffff,
+0x431024, 0x80046bc, 0x3442251f, 0x8f820214,
+0x3c03ffff, 0x431024, 0x3442241f, 0xaf820214,
+0x8ee20000, 0x3c030200, 0x431025, 0xaee20000,
+0x8f820220, 0x2403fffb, 0x431024, 0xaf820220,
+0x8f820220, 0x34420002, 0xaf820220, 0x24020008,
+0x3c010001, 0x370821, 0xc0043e1, 0xac2283ac,
+0x8004781, 0x0, 0x3c020001, 0x571021,
+0x8c4283ac, 0x2443ffff, 0x2c620008, 0x104000ac,
+0x31080, 0x3c010001, 0x220821, 0x8c2252b8,
+0x400008, 0x0, 0xc00429f, 0x0,
+0x3c010001, 0xac20547c, 0xaf800204, 0x3c010001,
+0xc004784, 0xac2075a0, 0x24020001, 0x3c010001,
+0xac225490, 0x24020002, 0x3c010001, 0x370821,
+0x8004781, 0xac2283ac, 0xc004801, 0x0,
+0x3c030001, 0x8c635490, 0x24020009, 0x14620090,
+0x24020003, 0x3c010001, 0x370821, 0x8004781,
+0xac2283ac, 0x3c020001, 0x8c4275b8, 0x30424000,
+0x10400005, 0x0, 0x8f820044, 0x3c03ffff,
+0x8004701, 0x34637fff, 0x8f820044, 0x2403ff7f,
+0x431024, 0xaf820044, 0x8f830054, 0x800471b,
+0x24020004, 0x8f830054, 0x3c020001, 0x8c425530,
+0x2463d8f0, 0x431023, 0x2c422710, 0x14400074,
+0x24020005, 0x3c010001, 0x370821, 0x8004781,
+0xac2283ac, 0x8f820220, 0x3c03f700, 0x431025,
+0xaf820220, 0xaf800204, 0x3c010001, 0xac2075a0,
+0x8f830054, 0x24020006, 0x3c010001, 0x370821,
+0xac2283ac, 0x3c010001, 0x8004781, 0xac235530,
+0x8f830054, 0x3c020001, 0x8c425530, 0x2463fff6,
+0x431023, 0x2c42000a, 0x14400059, 0x0,
+0x24020007, 0x3c010001, 0x370821, 0x8004781,
+0xac2283ac, 0x8f820220, 0x3c04f700, 0x441025,
+0xaf820220, 0x8f820220, 0x3c030300, 0x431024,
+0x14400005, 0x1821, 0x8f820220, 0x24030001,
+0x441025, 0xaf820220, 0x10600043, 0x24020001,
+0x8f820214, 0x3c03ffff, 0x3c040001, 0x8c845528,
+0x431024, 0x3442251f, 0xaf820214, 0x24020008,
+0x3c010001, 0x370821, 0x1080000b, 0xac2283ac,
+0x3c020001, 0x8c425504, 0x14400007, 0x24020001,
+0x3c010001, 0xac227550, 0xc004cf0, 0x8f840220,
+0x800476e, 0x0, 0x8f820220, 0x3c030008,
+0x431024, 0x14400017, 0x2402000e, 0x3c010001,
+0xac227550, 0x8ee20000, 0x2021, 0x3c030200,
+0x431025, 0xc00517a, 0xaee20000, 0x8f820220,
+0x2403fffb, 0x431024, 0xaf820220, 0x8f820220,
+0x34420002, 0xc0043e1, 0xaf820220, 0x3c050001,
+0x8ca55478, 0xc0050af, 0x2021, 0x8004781,
+0x0, 0x3c020001, 0x8c425504, 0x10400010,
+0x0, 0x3c020001, 0x8c425500, 0x2442ffff,
+0x3c010001, 0xac225500, 0x14400009, 0x24020002,
+0x3c010001, 0xac205504, 0x3c010001, 0x8004781,
+0xac225500, 0x24020001, 0x3c010001, 0xac22547c,
+0x8fbf0018, 0x3e00008, 0x27bd0020, 0x8f820200,
+0x8f820220, 0x8f820220, 0x34420004, 0xaf820220,
+0x8f820200, 0x3c060001, 0x8cc65478, 0x34420004,
+0xaf820200, 0x24020002, 0x10c2003a, 0x2cc20003,
+0x10400005, 0x24020001, 0x10c20008, 0x0,
+0x80047ca, 0x0, 0x24020004, 0x10c20013,
+0x24020001, 0x80047ca, 0x0, 0x3c030001,
+0x8c635468, 0x3c020001, 0x8c425470, 0x3c040001,
+0x8c84548c, 0x3c050001, 0x8ca5546c, 0xaf860200,
+0xaf860220, 0x34630022, 0x441025, 0x451025,
+0x34420002, 0x80047c9, 0xaf830200, 0x3c030001,
+0x8c635528, 0xaf820200, 0x10600009, 0xaf820220,
+0x3c020001, 0x8c425504, 0x14400005, 0x3c033f00,
+0x3c020001, 0x8c425460, 0x80047bd, 0x346300e0,
+0x3c020001, 0x8c425460, 0x3c033f00, 0x346300e2,
+0x431025, 0xaf820200, 0x3c030001, 0x8c635464,
+0x3c04f700, 0x3c020001, 0x8c425470, 0x3c050001,
+0x8ca5548c, 0x641825, 0x431025, 0x451025,
+0xaf820220, 0x3e00008, 0x0, 0x8f820220,
+0x3c030001, 0x8c635478, 0x34420004, 0xaf820220,
+0x24020001, 0x1062000f, 0x0, 0x8f830054,
+0x8f820054, 0x24630002, 0x621023, 0x2c420003,
+0x10400011, 0x0, 0x8f820054, 0x621023,
+0x2c420003, 0x1040000c, 0x0, 0x80047db,
+0x0, 0x8f830054, 0x8f820054, 0x80047e7,
+0x24630007, 0x8f820054, 0x621023, 0x2c420008,
+0x1440fffc, 0x0, 0x8f8400e0, 0x30820007,
+0x1040000d, 0x0, 0x8f820054, 0x8f8300e0,
+0x14830009, 0x24450032, 0x8f820054, 0xa21023,
+0x2c420033, 0x10400004, 0x0, 0x8f8200e0,
+0x1082fff9, 0x0, 0x8f820220, 0x2403fffd,
+0x431024, 0xaf820220, 0x3e00008, 0x0,
+0x3c030001, 0x8c635490, 0x3c020001, 0x8c425494,
+0x50620004, 0x2463ffff, 0x3c010001, 0xac235494,
+0x2463ffff, 0x2c620009, 0x10400099, 0x31080,
+0x3c010001, 0x220821, 0x8c2252d8, 0x400008,
+0x0, 0x8f820044, 0x34428080, 0xaf820044,
+0x8f830054, 0x8004896, 0x24020002, 0x8f830054,
+0x3c020001, 0x8c425534, 0x2463d8f0, 0x431023,
+0x2c422710, 0x14400086, 0x24020003, 0x80048a3,
+0x0, 0x8f820044, 0x3c03ffff, 0x34637fff,
+0x431024, 0xaf820044, 0x8f830054, 0x8004896,
+0x24020004, 0x8f830054, 0x3c020001, 0x8c425534,
+0x2463fff6, 0x431023, 0x2c42000a, 0x14400074,
+0x24020005, 0x80048a3, 0x0, 0x8f820220,
+0x3c03f700, 0x431025, 0xaf820220, 0x8f820220,
+0x2403fffb, 0x431024, 0xaf820220, 0x8f820220,
+0x34420002, 0xaf820220, 0x3c023f00, 0x344200e0,
+0xaf820200, 0x8f820200, 0x2403fffd, 0x431024,
+0xaf820200, 0x24040001, 0x3405ffff, 0xaf840204,
+0x8f830054, 0x8f820054, 0x800484e, 0x24630001,
+0x8f820054, 0x621023, 0x2c420002, 0x1440fffc,
+0x0, 0x8f820224, 0x42040, 0xa4102b,
+0x1040fff2, 0x0, 0x8f820220, 0x3c03f700,
+0x431025, 0xaf820220, 0x8f820214, 0x3c03ffff,
+0x431024, 0x3442251f, 0xaf820214, 0x8f820220,
+0x2403fffb, 0x431024, 0xaf820220, 0x8f820220,
+0x3c04f700, 0x34840008, 0x34420002, 0xaf820220,
+0x8f820220, 0x3c033f00, 0x346300e2, 0x441025,
+0xaf820220, 0xaf830200, 0x8f8400f0, 0x276217f8,
+0x14820002, 0x24850008, 0x27651000, 0x8f8200f4,
+0x10a20007, 0x3c038000, 0x34630040, 0x3c020001,
+0x24425420, 0xac820000, 0xac830004, 0xaf8500f0,
+0x8f830054, 0x8004896, 0x24020006, 0x8f830054,
+0x3c020001, 0x8c425534, 0x2463fff6, 0x431023,
+0x2c42000a, 0x1440001e, 0x24020007, 0x80048a3,
+0x0, 0x8f8200e0, 0xaf8200e4, 0x8f8200e0,
+0xaf8200e8, 0x8f820220, 0x34420004, 0xaf820220,
+0x8f820044, 0x34428080, 0xaf820044, 0x8f830054,
+0x24020008, 0x3c010001, 0xac225490, 0x3c010001,
+0x80048a5, 0xac235534, 0x8f830054, 0x3c020001,
+0x8c425534, 0x2463d8f0, 0x431023, 0x2c422710,
+0x14400003, 0x24020009, 0x3c010001, 0xac225490,
+0x3e00008, 0x0, 0x0, 0x27bdffd8,
+0xafb20018, 0x809021, 0xafb3001c, 0xa09821,
+0xafb10014, 0xc08821, 0xafb00010, 0x8021,
+0xafbf0020, 0xa6200000, 0xc004ca7, 0x24040001,
+0x26100001, 0x2e020020, 0x1440fffb, 0x0,
+0xc004ca7, 0x2021, 0xc004ca7, 0x24040001,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0x24100010, 0x2501024, 0x10400002, 0x2021,
+0x24040001, 0xc004ca7, 0x108042, 0x1600fffa,
+0x2501024, 0x24100010, 0x2701024, 0x10400002,
+0x2021, 0x24040001, 0xc004ca7, 0x108042,
+0x1600fffa, 0x2701024, 0xc004ccd, 0x34108000,
+0xc004ccd, 0x0, 0xc004c87, 0x0,
+0x50400005, 0x108042, 0x96220000, 0x501025,
+0xa6220000, 0x108042, 0x1600fff7, 0x0,
+0xc004ccd, 0x0, 0x8fbf0020, 0x8fb3001c,
+0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008,
+0x27bd0028, 0x27bdffd8, 0xafb10014, 0x808821,
+0xafb20018, 0xa09021, 0xafb3001c, 0xc09821,
+0xafb00010, 0x8021, 0xafbf0020, 0xc004ca7,
+0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
+0x0, 0xc004ca7, 0x2021, 0xc004ca7,
+0x24040001, 0xc004ca7, 0x2021, 0xc004ca7,
+0x24040001, 0x24100010, 0x2301024, 0x10400002,
+0x2021, 0x24040001, 0xc004ca7, 0x108042,
+0x1600fffa, 0x2301024, 0x24100010, 0x2501024,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x2501024, 0xc004ca7,
+0x24040001, 0xc004ca7, 0x2021, 0x34108000,
+0x96620000, 0x501024, 0x10400002, 0x2021,
+0x24040001, 0xc004ca7, 0x108042, 0x1600fff8,
+0x0, 0xc004ccd, 0x0, 0x8fbf0020,
+0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010,
+0x3e00008, 0x27bd0028, 0x3c030001, 0x8c6354a0,
+0x3c020001, 0x8c4254e4, 0x27bdffd8, 0xafbf0020,
+0xafb1001c, 0x10620003, 0xafb00018, 0x3c010001,
+0xac2354e4, 0x2463ffff, 0x2c620013, 0x10400349,
+0x31080, 0x3c010001, 0x220821, 0x8c225300,
+0x400008, 0x0, 0xc004ccd, 0x8021,
+0x34028000, 0xa7a20010, 0x27b10010, 0xc004ca7,
+0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
+0x0, 0xc004ca7, 0x2021, 0xc004ca7,
+0x24040001, 0xc004ca7, 0x2021, 0xc004ca7,
+0x24040001, 0x24100010, 0x32020001, 0x10400002,
+0x2021, 0x24040001, 0xc004ca7, 0x108042,
+0x1600fffa, 0x32020001, 0x24100010, 0xc004ca7,
+0x2021, 0x108042, 0x1600fffc, 0x0,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc004ca7, 0x108042,
+0x1600fff8, 0x0, 0xc004ccd, 0x0,
+0x8004c80, 0x24020002, 0x27b10010, 0xa7a00010,
+0x8021, 0xc004ca7, 0x24040001, 0x26100001,
+0x2e020020, 0x1440fffb, 0x0, 0xc004ca7,
+0x2021, 0xc004ca7, 0x24040001, 0xc004ca7,
+0x24040001, 0xc004ca7, 0x2021, 0x24100010,
+0x32020001, 0x10400002, 0x2021, 0x24040001,
+0xc004ca7, 0x108042, 0x1600fffa, 0x32020001,
+0x24100010, 0xc004ca7, 0x2021, 0x108042,
+0x1600fffc, 0x0, 0xc004ccd, 0x34108000,
+0xc004ccd, 0x0, 0xc004c87, 0x0,
+0x50400005, 0x108042, 0x96220000, 0x501025,
+0xa6220000, 0x108042, 0x1600fff7, 0x0,
+0xc004ccd, 0x0, 0x97a20010, 0x30428000,
+0x144002dc, 0x24020003, 0x8004c80, 0x0,
+0x24021200, 0xa7a20010, 0x27b10010, 0x8021,
+0xc004ca7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0xc004ca7, 0x2021, 0x108042, 0x1600fffc,
+0x0, 0xc004ca7, 0x24040001, 0xc004ca7,
+0x2021, 0x34108000, 0x96220000, 0x501024,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fff8, 0x0, 0xc004ccd,
+0x0, 0x8f830054, 0x8004c72, 0x24020004,
+0x8f830054, 0x3c020001, 0x8c42553c, 0x2463ff9c,
+0x431023, 0x2c420064, 0x1440029e, 0x24020002,
+0x3c030001, 0x8c635540, 0x10620297, 0x2c620003,
+0x14400296, 0x24020011, 0x24020003, 0x10620005,
+0x24020004, 0x10620291, 0x2402000f, 0x8004c80,
+0x24020011, 0x8004c80, 0x24020005, 0x24020014,
+0xa7a20010, 0x27b10010, 0x8021, 0xc004ca7,
+0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
+0x0, 0xc004ca7, 0x2021, 0xc004ca7,
+0x24040001, 0xc004ca7, 0x2021, 0xc004ca7,
+0x24040001, 0x24100010, 0x32020001, 0x10400002,
+0x2021, 0x24040001, 0xc004ca7, 0x108042,
+0x1600fffa, 0x32020001, 0x24100010, 0x32020012,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020012, 0xc004ca7,
+0x24040001, 0xc004ca7, 0x2021, 0x34108000,
+0x96220000, 0x501024, 0x10400002, 0x2021,
+0x24040001, 0xc004ca7, 0x108042, 0x1600fff8,
+0x0, 0xc004ccd, 0x0, 0x8f830054,
+0x8004c72, 0x24020006, 0x8f830054, 0x3c020001,
+0x8c42553c, 0x2463ff9c, 0x431023, 0x2c420064,
+0x14400250, 0x24020007, 0x8004c80, 0x0,
+0x24020006, 0xa7a20010, 0x27b10010, 0x8021,
+0xc004ca7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020013, 0x10400002, 0x2021, 0x24040001,
+0xc004ca7, 0x108042, 0x1600fffa, 0x32020013,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc004ca7, 0x108042,
+0x1600fff8, 0x0, 0xc004ccd, 0x0,
+0x8f830054, 0x8004c72, 0x24020008, 0x8f830054,
+0x3c020001, 0x8c42553c, 0x2463ff9c, 0x431023,
+0x2c420064, 0x1440020f, 0x24020009, 0x8004c80,
+0x0, 0x27b10010, 0xa7a00010, 0x8021,
+0xc004ca7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x24040001,
+0xc004ca7, 0x2021, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020018, 0x10400002, 0x2021, 0x24040001,
+0xc004ca7, 0x108042, 0x1600fffa, 0x32020018,
+0xc004ccd, 0x34108000, 0xc004ccd, 0x0,
+0xc004c87, 0x0, 0x50400005, 0x108042,
+0x96220000, 0x501025, 0xa6220000, 0x108042,
+0x1600fff7, 0x0, 0xc004ccd, 0x8021,
+0x97a20010, 0x27b10010, 0x34420001, 0xa7a20010,
+0xc004ca7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020018, 0x10400002, 0x2021, 0x24040001,
+0xc004ca7, 0x108042, 0x1600fffa, 0x32020018,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc004ca7, 0x108042,
+0x1600fff8, 0x0, 0xc004ccd, 0x0,
+0x8f830054, 0x8004c72, 0x2402000a, 0x8f830054,
+0x3c020001, 0x8c42553c, 0x2463ff9c, 0x431023,
+0x2c420064, 0x1440019b, 0x2402000b, 0x8004c80,
+0x0, 0x27b10010, 0xa7a00010, 0x8021,
+0xc004ca7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x24040001,
+0xc004ca7, 0x2021, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020017, 0x10400002, 0x2021, 0x24040001,
+0xc004ca7, 0x108042, 0x1600fffa, 0x32020017,
+0xc004ccd, 0x34108000, 0xc004ccd, 0x0,
+0xc004c87, 0x0, 0x50400005, 0x108042,
+0x96220000, 0x501025, 0xa6220000, 0x108042,
+0x1600fff7, 0x0, 0xc004ccd, 0x8021,
+0x97a20010, 0x27b10010, 0x34420700, 0xa7a20010,
+0xc004ca7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020017, 0x10400002, 0x2021, 0x24040001,
+0xc004ca7, 0x108042, 0x1600fffa, 0x32020017,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc004ca7, 0x108042,
+0x1600fff8, 0x0, 0xc004ccd, 0x0,
+0x8f830054, 0x8004c72, 0x2402000c, 0x8f830054,
+0x3c020001, 0x8c42553c, 0x2463ff9c, 0x431023,
+0x2c420064, 0x14400127, 0x24020012, 0x8004c80,
+0x0, 0x27b10010, 0xa7a00010, 0x8021,
+0xc004ca7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x24040001,
+0xc004ca7, 0x2021, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020014, 0x10400002, 0x2021, 0x24040001,
+0xc004ca7, 0x108042, 0x1600fffa, 0x32020014,
+0xc004ccd, 0x34108000, 0xc004ccd, 0x0,
+0xc004c87, 0x0, 0x50400005, 0x108042,
+0x96220000, 0x501025, 0xa6220000, 0x108042,
+0x1600fff7, 0x0, 0xc004ccd, 0x8021,
+0x97a20010, 0x27b10010, 0x34420010, 0xa7a20010,
+0xc004ca7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020014, 0x10400002, 0x2021, 0x24040001,
+0xc004ca7, 0x108042, 0x1600fffa, 0x32020014,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc004ca7, 0x108042,
+0x1600fff8, 0x0, 0xc004ccd, 0x0,
+0x8f830054, 0x8004c72, 0x24020013, 0x8f830054,
+0x3c020001, 0x8c42553c, 0x2463ff9c, 0x431023,
+0x2c420064, 0x144000b3, 0x2402000d, 0x8004c80,
+0x0, 0x27b10010, 0xa7a00010, 0x8021,
+0xc004ca7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x24040001,
+0xc004ca7, 0x2021, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020018, 0x10400002, 0x2021, 0x24040001,
+0xc004ca7, 0x108042, 0x1600fffa, 0x32020018,
+0xc004ccd, 0x34108000, 0xc004ccd, 0x0,
+0xc004c87, 0x0, 0x50400005, 0x108042,
+0x96220000, 0x501025, 0xa6220000, 0x108042,
+0x1600fff7, 0x0, 0xc004ccd, 0x8021,
+0x97a20010, 0x27b10010, 0x3042fffe, 0xa7a20010,
+0xc004ca7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0xc004ca7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020018, 0x10400002, 0x2021, 0x24040001,
+0xc004ca7, 0x108042, 0x1600fffa, 0x32020018,
+0xc004ca7, 0x24040001, 0xc004ca7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc004ca7, 0x108042,
+0x1600fff8, 0x0, 0xc004ccd, 0x0,
+0x8f830054, 0x8004c72, 0x2402000e, 0x24020840,
+0xa7a20010, 0x27b10010, 0x8021, 0xc004ca7,
+0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
+0x0, 0xc004ca7, 0x2021, 0xc004ca7,
+0x24040001, 0xc004ca7, 0x2021, 0xc004ca7,
+0x24040001, 0x24100010, 0x32020001, 0x10400002,
+0x2021, 0x24040001, 0xc004ca7, 0x108042,
+0x1600fffa, 0x32020001, 0x24100010, 0x32020013,
+0x10400002, 0x2021, 0x24040001, 0xc004ca7,
+0x108042, 0x1600fffa, 0x32020013, 0xc004ca7,
+0x24040001, 0xc004ca7, 0x2021, 0x34108000,
+0x96220000, 0x501024, 0x10400002, 0x2021,
+0x24040001, 0xc004ca7, 0x108042, 0x1600fff8,
+0x0, 0xc004ccd, 0x0, 0x8f830054,
+0x24020010, 0x3c010001, 0xac2254a0, 0x3c010001,
+0x8004c82, 0xac23553c, 0x8f830054, 0x3c020001,
+0x8c42553c, 0x2463ff9c, 0x431023, 0x2c420064,
+0x14400004, 0x0, 0x24020011, 0x3c010001,
+0xac2254a0, 0x8fbf0020, 0x8fb1001c, 0x8fb00018,
+0x3e00008, 0x27bd0028, 0x8f850044, 0x8f820044,
+0x3c030001, 0x431025, 0x3c030008, 0xaf820044,
+0x8f840054, 0x8f820054, 0xa32824, 0x8004c93,
+0x24840001, 0x8f820054, 0x821023, 0x2c420002,
+0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe,
+0x3463ffff, 0x431024, 0xaf820044, 0x8f830054,
+0x8f820054, 0x8004ca1, 0x24630001, 0x8f820054,
+0x621023, 0x2c420002, 0x1440fffc, 0x0,
+0x3e00008, 0xa01021, 0x8f830044, 0x3c02fff0,
+0x3442ffff, 0x42480, 0x621824, 0x3c020002,
+0x822025, 0x641825, 0xaf830044, 0x8f820044,
+0x3c030001, 0x431025, 0xaf820044, 0x8f830054,
+0x8f820054, 0x8004cb9, 0x24630001, 0x8f820054,
+0x621023, 0x2c420002, 0x1440fffc, 0x0,
+0x8f820044, 0x3c03fffe, 0x3463ffff, 0x431024,
+0xaf820044, 0x8f830054, 0x8f820054, 0x8004cc7,
+0x24630001, 0x8f820054, 0x621023, 0x2c420002,
+0x1440fffc, 0x0, 0x3e00008, 0x0,
+0x8f820044, 0x3c03fff0, 0x3463ffff, 0x431024,
+0xaf820044, 0x8f820044, 0x3c030001, 0x431025,
+0xaf820044, 0x8f830054, 0x8f820054, 0x8004cdb,
+0x24630001, 0x8f820054, 0x621023, 0x2c420002,
+0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe,
+0x3463ffff, 0x431024, 0xaf820044, 0x8f830054,
+0x8f820054, 0x8004ce9, 0x24630001, 0x8f820054,
+0x621023, 0x2c420002, 0x1440fffc, 0x0,
+0x3e00008, 0x0, 0x0, 0x27bdffe8,
+0xafbf0010, 0x3c030001, 0x771821, 0x8c6383ac,
+0x24020008, 0x1462022c, 0x803021, 0x3c020001,
+0x8c425528, 0x14400033, 0x0, 0x8f850224,
+0x38a30020, 0x2c630001, 0x38a20010, 0x2c420001,
+0x621825, 0x1460000d, 0x38a30030, 0x2c630001,
+0x38a20400, 0x2c420001, 0x621825, 0x14600007,
+0x38a30402, 0x2c630001, 0x38a20404, 0x2c420001,
+0x621825, 0x10600005, 0x0, 0xc00429f,
+0x0, 0x8004d29, 0x2402000e, 0xc0043e1,
+0x0, 0x3c050001, 0x8ca55478, 0xc0050af,
+0x2021, 0x3c030001, 0x8c635478, 0x24020004,
+0x14620005, 0x2403fffb, 0x3c020001, 0x8c425474,
+0x8004d25, 0x2403fff7, 0x3c020001, 0x8c425474,
+0x431024, 0x3c010001, 0xac225474, 0x2402000e,
+0x3c010001, 0xc00429f, 0xac227550, 0x8004f23,
+0x0, 0x8f820220, 0x3c030400, 0x431024,
+0x10400027, 0x2403ffbf, 0x8f850224, 0x3c020001,
+0x8c42755c, 0xa32024, 0x431024, 0x1482000c,
+0x0, 0x3c020001, 0x8c427560, 0x24420001,
+0x3c010001, 0xac227560, 0x2c420002, 0x14400008,
+0x24020001, 0x3c010001, 0x8004d49, 0xac227580,
+0x3c010001, 0xac207560, 0x3c010001, 0xac207580,
+0x3c020001, 0x8c427580, 0x10400006, 0x30a20040,
+0x10400004, 0x24020001, 0x3c010001, 0x8004d54,
+0xac227584, 0x3c010001, 0xac207584, 0x3c010001,
+0xac25755c, 0x3c010001, 0x8004d64, 0xac207590,
+0x24020001, 0x3c010001, 0xac227590, 0x3c010001,
+0xac207580, 0x3c010001, 0xac207560, 0x3c010001,
+0xac207584, 0x3c010001, 0xac20755c, 0x3c030001,
+0x8c637550, 0x3c020001, 0x8c427554, 0x10620003,
+0x3c020200, 0x3c010001, 0xac237554, 0xc21024,
+0x10400007, 0x2463ffff, 0x8f820220, 0x24030001,
+0x3c010001, 0xac23547c, 0x8004f21, 0x3c03f700,
+0x2c62000e, 0x104001a8, 0x31080, 0x3c010001,
+0x220821, 0x8c225350, 0x400008, 0x0,
+0x3c010001, 0xac207580, 0x3c010001, 0xac207560,
+0x3c010001, 0xac20755c, 0x3c010001, 0xac207584,
+0x3c010001, 0xac207578, 0x3c010001, 0xac207570,
+0xc0047cc, 0xaf800224, 0x24020002, 0x3c010001,
+0xac227550, 0x3c020001, 0x8c427590, 0x14400056,
+0x3c03fdff, 0x8ee20000, 0x3463ffff, 0x431024,
+0xc00429f, 0xaee20000, 0xaf800204, 0x8f820200,
+0x2403fffd, 0x431024, 0xaf820200, 0x3c010001,
+0xac2075a0, 0x8f830054, 0x3c020001, 0x8c427578,
+0x24040001, 0x3c010001, 0xac24758c, 0x24420001,
+0x3c010001, 0xac227578, 0x2c420004, 0x3c010001,
+0xac237574, 0x14400006, 0x24020003, 0x3c010001,
+0xac24547c, 0x3c010001, 0x8004f1f, 0xac207578,
+0x3c010001, 0x8004f1f, 0xac227550, 0x8f830054,
+0x3c020001, 0x8c427574, 0x2463d8f0, 0x431023,
+0x2c422710, 0x14400003, 0x24020004, 0x3c010001,
+0xac227550, 0x3c020001, 0x8c427590, 0x14400026,
+0x3c03fdff, 0x8ee20000, 0x3463ffff, 0x431024,
+0x8004f1f, 0xaee20000, 0x3c040001, 0x8c84552c,
+0x3c010001, 0xc004f26, 0xac207568, 0x3c020001,
+0x8c42759c, 0xaf820204, 0x3c020001, 0x8c427590,
+0x14400015, 0x3c03fdff, 0x8ee20000, 0x3463ffff,
+0x431024, 0xaee20000, 0x8f820204, 0x30420030,
+0x1440013c, 0x24020002, 0x3c030001, 0x8c63759c,
+0x24020005, 0x3c010001, 0xac227550, 0x3c010001,
+0x8004f1f, 0xac2375a0, 0x3c020001, 0x8c427590,
+0x10400010, 0x3c03fdff, 0x3c020001, 0x8c4254fc,
+0x24420001, 0x3c010001, 0xac2254fc, 0x2c420002,
+0x14400131, 0x24020001, 0x3c010001, 0xac225504,
+0x3c010001, 0xac2054fc, 0x3c010001, 0x8004f1f,
+0xac22547c, 0x8ee20000, 0x3463ffff, 0x431024,
+0xaee20000, 0x3c020001, 0x8c427580, 0x10400122,
+0x0, 0x3c020001, 0x8c42755c, 0x1040011e,
+0x0, 0x3c010001, 0xac227588, 0x24020003,
+0x3c010001, 0xac227560, 0x8004ec0, 0x24020006,
+0x3c010001, 0xac207568, 0x8f820204, 0x34420040,
+0xaf820204, 0x3c020001, 0x8c4275a0, 0x24030007,
+0x3c010001, 0xac237550, 0x34420040, 0x3c010001,
+0xac2275a0, 0x3c020001, 0x8c427580, 0x10400005,
+0x0, 0x3c020001, 0x8c42755c, 0x104000f9,
+0x24020002, 0x3c050001, 0x24a57560, 0x8ca20000,
+0x2c424e21, 0x104000f3, 0x24020002, 0x3c020001,
+0x8c427584, 0x104000f8, 0x2404ffbf, 0x3c020001,
+0x8c42755c, 0x3c030001, 0x8c637588, 0x441024,
+0x641824, 0x10430004, 0x24020001, 0x3c010001,
+0x8004f1f, 0xac227550, 0x24020003, 0xaca20000,
+0x24020008, 0x3c010001, 0xac227550, 0x3c020001,
+0x8c42758c, 0x1040000c, 0x24020001, 0x3c040001,
+0xc004f33, 0x8c84755c, 0x3c020001, 0x8c4275a8,
+0x14400005, 0x24020001, 0x3c020001, 0x8c4275a4,
+0x10400006, 0x24020001, 0x3c010001, 0xac22547c,
+0x3c010001, 0x8004f1f, 0xac207578, 0x3c020001,
+0x8c427570, 0x3c030001, 0x8c63755c, 0x2c420001,
+0x210c0, 0x30630008, 0x3c010001, 0xac227570,
+0x3c010001, 0xac23756c, 0x8f830054, 0x24020009,
+0x3c010001, 0xac227550, 0x3c010001, 0x8004f1f,
+0xac237574, 0x8f830054, 0x3c020001, 0x8c427574,
+0x2463d8f0, 0x431023, 0x2c422710, 0x144000a8,
+0x0, 0x3c020001, 0x8c427580, 0x10400005,
+0x0, 0x3c020001, 0x8c42755c, 0x104000a9,
+0x24020002, 0x3c030001, 0x24637560, 0x8c620000,
+0x2c424e21, 0x104000a3, 0x24020002, 0x3c020001,
+0x8c42758c, 0x1040000e, 0x0, 0x3c020001,
+0x8c42755c, 0x3c010001, 0xac20758c, 0x30420080,
+0x1040002f, 0x2402000c, 0x8f820204, 0x30420080,
+0x1440000c, 0x24020003, 0x8004ead, 0x2402000c,
+0x3c020001, 0x8c42755c, 0x30420080, 0x14400005,
+0x24020003, 0x8f820204, 0x30420080, 0x1040001f,
+0x24020003, 0xac620000, 0x2402000a, 0x3c010001,
+0xac227550, 0x3c040001, 0x24847598, 0x8c820000,
+0x3c030001, 0x8c637570, 0x431025, 0xaf820204,
+0x8c830000, 0x3c040001, 0x8c847570, 0x2402000b,
+0x3c010001, 0xac227550, 0x641825, 0x3c010001,
+0xac2375a0, 0x3c050001, 0x24a57560, 0x8ca20000,
+0x2c424e21, 0x1040006f, 0x24020002, 0x3c020001,
+0x8c427590, 0x10400005, 0x0, 0x2402000c,
+0x3c010001, 0x8004f1f, 0xac227550, 0x3c020001,
+0x8c427580, 0x1040006c, 0x0, 0x3c040001,
+0x8c84755c, 0x1080005e, 0x30820008, 0x3c030001,
+0x8c63756c, 0x10620064, 0x24020003, 0x3c010001,
+0xac247588, 0xaca20000, 0x24020006, 0x3c010001,
+0x8004f1f, 0xac227550, 0x8f820200, 0x34420002,
+0xaf820200, 0x8f830054, 0x2402000d, 0x3c010001,
+0xac227550, 0x3c010001, 0xac237574, 0x8f830054,
+0x3c020001, 0x8c427574, 0x2463d8f0, 0x431023,
+0x2c422710, 0x1440003a, 0x0, 0x3c020001,
+0x8c427590, 0x10400029, 0x2402000e, 0x3c030001,
+0x8c6375a4, 0x3c010001, 0x14600015, 0xac227550,
+0xc0043e1, 0x0, 0x3c050001, 0x8ca55478,
+0xc0050af, 0x2021, 0x3c030001, 0x8c635478,
+0x24020004, 0x14620005, 0x2403fffb, 0x3c020001,
+0x8c425474, 0x8004eee, 0x2403fff7, 0x3c020001,
+0x8c425474, 0x431024, 0x3c010001, 0xac225474,
+0x8ee20000, 0x3c030200, 0x431025, 0xaee20000,
+0x8f820224, 0x3c010001, 0xac2275ac, 0x8f820220,
+0x2403fffb, 0x431024, 0xaf820220, 0x8f820220,
+0x34420002, 0x8004f1f, 0xaf820220, 0x3c020001,
+0x8c427580, 0x10400005, 0x0, 0x3c020001,
+0x8c42755c, 0x1040000f, 0x24020002, 0x3c020001,
+0x8c427560, 0x2c424e21, 0x1040000a, 0x24020002,
+0x3c020001, 0x8c427580, 0x1040000f, 0x0,
+0x3c020001, 0x8c42755c, 0x1440000b, 0x0,
+0x24020002, 0x3c010001, 0x8004f1f, 0xac227550,
+0x3c020001, 0x8c427580, 0x10400003, 0x0,
+0xc00429f, 0x0, 0x8f820220, 0x3c03f700,
+0x431025, 0xaf820220, 0x8fbf0010, 0x3e00008,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 22'
echo 'File patch-2.2.4 is continued in part 23'
echo 23 > _shar_seq_.tmp
#!/bin/sh
# this is part 19 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 19; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
-0x8f820054, 0x621023, 0x2c420003, 0x1440fffc, 0x0, 0x8f8600e0,
-0x30c20007, 0x10400012, 0x0, 0x8f8300e4, 0x2402fff8, 0xc21024,
-0x1043000d, 0x0, 0x8f820054, 0x8f8300e0, 0x14c30009, 0x24440032,
-0x8f820054, 0x821023, 0x2c420033, 0x10400004, 0x0, 0x8f8200e0,
-0x10c2fff9, 0x0, 0x8f820220, 0x3c0308ff, 0x3463fffd, 0x431024,
-0xaf820220, 0x8f8600e0, 0x30c20007, 0x10400003, 0x2402fff8, 0xc23024,
-0xaf8600e0, 0x240301f5, 0x8f8200e8, 0x673823, 0x718c0, 0x431021,
-0xaf8200e8, 0x8f8200e8, 0xaf8200e4, 0x8ee2007c, 0x3c0408ff, 0x3484ffff,
-0x471021, 0xaee2007c, 0x8f820220, 0x3c038000, 0x34630002, 0x441024,
-0x431025, 0xaf820220, 0x8f830054, 0x8f820054, 0x800427d, 0x24630001,
-0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820220,
-0x3c0308ff, 0x3463fffb, 0x431024, 0xaf820220, 0x8fbf0020, 0x8fb1001c,
-0x8fb00018, 0x3e00008, 0x27bd0028, 0x3c020001, 0x8c42500c, 0x27bdffd8,
-0x10400012, 0xafbf0020, 0x3c040001, 0x24844d84, 0x3c050008, 0x24020001,
-0x3c010001, 0x370821, 0xac22839c, 0xafa00010, 0xafa00014, 0x8f860220,
-0x34a50498, 0x3c010001, 0xac20500c, 0x3c010001, 0xac225000, 0xc002403,
-0x3821, 0x8f420268, 0x3c037fff, 0x3463ffff, 0x431024, 0xaf420268,
-0x8ee204c0, 0x8ee404c4, 0x2403fffe, 0x431024, 0x30840002, 0x1080011e,
-0xaee204c0, 0x8ee204c4, 0x2403fffd, 0x431024, 0xaee204c4, 0x8f820044,
-0x3c030600, 0x34632000, 0x34420020, 0xaf820044, 0xafa30018, 0x8ee205f8,
-0x8f430228, 0x24420001, 0x304a00ff, 0x514300fe, 0xafa00010, 0x8ee205f8,
-0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c, 0xac4305fc, 0xac440600,
-0x8f830054, 0x8f820054, 0x24690032, 0x1221023, 0x2c420033, 0x1040006a,
-0x5821, 0x24180008, 0x240f000d, 0x240d0007, 0x240c0040, 0x240e0001,
-0x8f870120, 0x27623800, 0x24e80020, 0x102102b, 0x50400001, 0x27683000,
-0x8f820128, 0x11020004, 0x0, 0x8f820124, 0x15020007, 0x1021,
-0x8ee201a0, 0x2821, 0x24420001, 0xaee201a0, 0x800432d, 0x8ee201a0,
-0x8ee405f8, 0x420c0, 0x801821, 0x8ee40430, 0x8ee50434, 0xa32821,
-0xa3302b, 0x822021, 0x862021, 0xace40000, 0xace50004, 0x8ee205f8,
-0xa4f8000e, 0xacef0018, 0xacea001c, 0x210c0, 0x244205fc, 0x2e21021,
-0xace20008, 0x8ee204b4, 0xace20010, 0xaf880120, 0x92e24e10, 0x14400033,
-0x24050001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000,
-0x144d001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001,
-0x104c0007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0,
-0x800431a, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020,
-0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000,
-0x800432d, 0x0, 0x8ee24e20, 0x24420001, 0x504c0003, 0x1021,
-0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0xac8d0000, 0xac8e0004, 0x54a00006, 0x240b0001, 0x8f820054,
-0x1221023, 0x2c420033, 0x1440ff9d, 0x0, 0x316300ff, 0x24020001,
-0x54620079, 0xafa00010, 0xaeea05f8, 0x8f830054, 0x8f820054, 0x24690032,
-0x1221023, 0x2c420033, 0x10400061, 0x5821, 0x240d0008, 0x240c0011,
-0x24080012, 0x24070040, 0x240a0001, 0x8f830120, 0x27623800, 0x24660020,
-0xc2102b, 0x50400001, 0x27663000, 0x8f820128, 0x10c20004, 0x0,
-0x8f820124, 0x14c20007, 0x0, 0x8ee201a0, 0x2821, 0x24420001,
-0xaee201a0, 0x8004399, 0x8ee201a0, 0x8ee205f8, 0xac62001c, 0x8ee40490,
-0x8ee50494, 0x2462001c, 0xac620008, 0xa46d000e, 0xac6c0018, 0xac640000,
-0xac650004, 0x8ee204b4, 0xac620010, 0xaf860120, 0x92e24e10, 0x14400033,
-0x24050001, 0x8ee24e20, 0x210c0, 0x24425028, 0x2e22021, 0x8c820000,
-0x1448001f, 0x0, 0x8ee34e20, 0x8ee24e24, 0x1062001b, 0x0,
-0x8c820004, 0x24420001, 0xac820004, 0x8ee24e24, 0x8ee34e20, 0x24420001,
-0x10470007, 0x0, 0x8ee24e24, 0x24420001, 0x10620005, 0x0,
-0x8004386, 0x0, 0x14600005, 0x0, 0x8f820128, 0x24420020,
-0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011, 0x50400010, 0xac800000,
-0x8004399, 0x0, 0x8ee24e20, 0x24420001, 0x50470003, 0x1021,
-0x8ee24e20, 0x24420001, 0xaee24e20, 0x8ee24e20, 0x210c0, 0x24425028,
-0x2e22021, 0xac880000, 0xac8a0004, 0x54a00006, 0x240b0001, 0x8f820054,
-0x1221023, 0x2c420033, 0x1440ffa6, 0x0, 0x316300ff, 0x24020001,
-0x54620003, 0xafa00010, 0x80043c6, 0x0, 0x3c040001, 0x24844d90,
-0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0xc002403, 0x34a5f011,
-0x80043c6, 0x0, 0x3c040001, 0x24844d9c, 0xafa00014, 0x8f860120,
-0x8f870124, 0x3c050009, 0xc002403, 0x34a5f010, 0x80043c6, 0x0,
-0x3c040001, 0x24844da8, 0xafa00014, 0x8ee605f8, 0x8f470228, 0x3c050009,
-0xc002403, 0x34a5f00f, 0x8ee201a8, 0x24420001, 0xaee201a8, 0x8ee201a8,
-0x8ee20158, 0x24420001, 0xaee20158, 0x8ee20158, 0x8fbf0020, 0x3e00008,
-0x27bd0028, 0x3c020001, 0x8c42500c, 0x27bdffe0, 0x1440000d, 0xafbf0018,
-0x3c040001, 0x24844db4, 0x3c050008, 0xafa00010, 0xafa00014, 0x8f860220,
-0x34a50499, 0x24020001, 0x3c010001, 0xac22500c, 0xc002403, 0x3821,
-0x8ee204c0, 0x3c030001, 0x771821, 0x946383a2, 0x34420001, 0x10600007,
-0xaee204c0, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, 0x34420008,
-0xaf820220, 0x24040001, 0xc004fb3, 0x24050004, 0xaf420268, 0x8fbf0018,
-0x3e00008, 0x27bd0020, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x3c120001, 0x26521100,
-0x3c140001, 0x8e944f80, 0x3c100001, 0x26101020, 0x3c15c000, 0x36b50060,
-0x8e8a0000, 0x8eb30000, 0x26a400b, 0x248000a, 0x200f821, 0x0,
-0xd, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x80014d6, 0x0, 0x80014d8, 0x3c0a0001,
-0x80014d8, 0x3c0a0002, 0x80014d8, 0x0, 0x80024a6, 0x0,
-0x80014d8, 0x3c0a0003, 0x80014d8, 0x3c0a0004, 0x8002f7c, 0x0,
-0x80014d8, 0x3c0a0005, 0x8003cd8, 0x0, 0x8003c56, 0x0,
-0x80014d8, 0x3c0a0006, 0x80014d8, 0x3c0a0007, 0x80014d8, 0x0,
-0x80014d8, 0x0, 0x80014d8, 0x0, 0x8002a75, 0x0,
-0x80014d8, 0x3c0a000b, 0x80014d8, 0x3c0a000c, 0x80014d8, 0x3c0a000d,
-0x8002378, 0x0, 0x8002335, 0x0, 0x80014d8, 0x3c0a000e,
-0x8001b38, 0x0, 0x80024a4, 0x0, 0x80014d8, 0x3c0a000f,
-0x8004097, 0x0, 0x8004081, 0x0, 0x80014d8, 0x3c0a0010,
-0x80014ee, 0x0, 0x80014d8, 0x3c0a0011, 0x80014d8, 0x3c0a0012,
-0x80014d8, 0x3c0a0013, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x3c030001, 0x34633800,
-0x24050080, 0x2404001f, 0x2406ffff, 0x24020001, 0xaf80021c, 0xaf820200,
-0xaf820220, 0x3631021, 0xaf8200c0, 0x3631021, 0xaf8200c4, 0x3631021,
-0xaf8200c8, 0x27623800, 0xaf8200d0, 0x27623800, 0xaf8200d4, 0x27623800,
-0xaf8200d8, 0x27621800, 0xaf8200e0, 0x27621800, 0xaf8200e4, 0x27621800,
-0xaf8200e8, 0x27621000, 0xaf8200f0, 0x27621000, 0xaf8200f4, 0x27621000,
-0xaf8200f8, 0xaca00000, 0x2484ffff, 0x1486fffd, 0x24a50004, 0x8f830040,
-0x3c02f000, 0x621824, 0x3c025000, 0x1062000c, 0x43102b, 0x14400006,
-0x3c026000, 0x3c024000, 0x10620008, 0x24020800, 0x80044f9, 0x0,
-0x10620004, 0x24020800, 0x80044f9, 0x0, 0x24020700, 0x3c010001,
-0xac225010, 0x3e00008, 0x0, 0x27bdffd0, 0xafbf0028, 0x3c010001,
-0xc004be5, 0xac204ff8, 0x24040001, 0x2821, 0x27a60020, 0x34028000,
-0xc004802, 0xa7a20020, 0x8f830054, 0x8f820054, 0x800450b, 0x24630064,
-0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, 0x24040001, 0x24050001,
-0xc0047c0, 0x27a60020, 0x8f830054, 0x8f820054, 0x8004517, 0x24630064,
-0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, 0x24040001, 0x24050001,
-0xc0047c0, 0x27a60020, 0x8f830054, 0x8f820054, 0x8004523, 0x24630064,
-0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, 0x24040001, 0x24050002,
-0xc0047c0, 0x27a60018, 0x8f830054, 0x8f820054, 0x800452f, 0x24630064,
-0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, 0x24040001, 0x24050003,
-0xc0047c0, 0x27a6001a, 0x97a20020, 0x10400022, 0x24030001, 0x3c020001,
-0x8c424ff8, 0x97a30018, 0x34420001, 0x3c010001, 0xac224ff8, 0x24020015,
-0x14620008, 0x3402f423, 0x97a3001a, 0x14620005, 0x24020003, 0x3c010001,
-0xac2250ac, 0x8004562, 0x3c08fff0, 0x97a30018, 0x24027810, 0x1462000a,
-0x24020002, 0x97a3001a, 0x24020001, 0x14620006, 0x24020002, 0x24020004,
-0x3c010001, 0xac2250ac, 0x8004562, 0x3c08fff0, 0x3c010001, 0xac2250ac,
-0x8004562, 0x3c08fff0, 0x3c020001, 0x8c424ff8, 0x3c010001, 0xac2350ac,
-0x34420004, 0x3c010001, 0xac224ff8, 0x3c08fff0, 0x3508bdc0, 0x8f830054,
-0x97a60018, 0x3c070001, 0x8ce750ac, 0x3c040001, 0x24844e20, 0x24020001,
-0x3c010001, 0xac225000, 0xafa60010, 0x3c060001, 0x8cc64ff8, 0x97a2001a,
-0x3c05000d, 0x34a50100, 0x3c010001, 0xac204ffc, 0x681821, 0x3c010001,
-0xac2350a4, 0xc002403, 0xafa20014, 0x8fbf0028, 0x3e00008, 0x27bd0030,
-0x27bdffe8, 0x24070004, 0x3c040001, 0x8c844ffc, 0x3021, 0x24020001,
-0x1482000a, 0xafbf0010, 0x3c020001, 0x8c42714c, 0x3c050004, 0x30428000,
-0x1040000c, 0x34a593e0, 0x3c05000f, 0x8004595, 0x34a54240, 0x3c020001,
-0x8c42714c, 0x3c05000f, 0x30428000, 0x10400003, 0x34a54240, 0x3c05001e,
-0x34a58480, 0x3c020001, 0x8c4250a4, 0x8f830054, 0x451021, 0x431023,
-0x45102b, 0x1440002e, 0x0, 0x3c020001, 0x8c425004, 0x1440002a,
-0x2cc20001, 0x7182b, 0x431024, 0x1040001d, 0x0, 0x3c090001,
-0x8d294ff8, 0x240b0001, 0x3c054000, 0x3c080001, 0x2508714c, 0x250afffc,
-0x42042, 0x14800002, 0x24e7ffff, 0x24040008, 0x891024, 0x5040000b,
-0x2cc20001, 0x148b0004, 0x0, 0x8d020000, 0x80045ba, 0x451024,
-0x8d420000, 0x451024, 0x54400001, 0x24060001, 0x2cc20001, 0x7182b,
-0x431024, 0x5440ffed, 0x42042, 0x3c010001, 0x10c00024, 0xac244ffc,
-0x8f830054, 0x24020001, 0x3c010001, 0xac225000, 0x3c010001, 0xac2350a4,
-0x3c020001, 0x8c425000, 0x10400006, 0x24020001, 0x3c010001, 0xac205000,
-0x3c010001, 0x370821, 0xac22839c, 0x3c030001, 0x771821, 0x8c63839c,
-0x24020008, 0x10620005, 0x24020001, 0xc0045ea, 0x0, 0x80045e7,
-0x0, 0x3c030001, 0x8c634ffc, 0x10620007, 0x2402000e, 0x3c030001,
-0x8c6370c0, 0x10620003, 0x0, 0xc004c08, 0x8f840220, 0x8fbf0010,
-0x3e00008, 0x27bd0018, 0x27bdffe0, 0x3c02fdff, 0xafbf0018, 0x8ee30000,
-0x3c050001, 0x8ca54ffc, 0x3c040001, 0x8c845014, 0x3442ffff, 0x621824,
-0x14a40008, 0xaee30000, 0x3c030001, 0x771821, 0x8c63839c, 0x3c020001,
-0x8c425018, 0x10620008, 0x0, 0x3c020001, 0x571021, 0x8c42839c,
-0x3c010001, 0xac255014, 0x3c010001, 0xac225018, 0x3c030001, 0x8c634ffc,
-0x24020002, 0x10620126, 0x2c620003, 0x10400005, 0x24020001, 0x10620008,
-0x0, 0x800472e, 0x0, 0x24020004, 0x1062007c, 0x24020001,
-0x800472f, 0x0, 0x3c020001, 0x571021, 0x8c42839c, 0x2443ffff,
-0x2c620008, 0x10400117, 0x31080, 0x3c010001, 0x220821, 0x8c224e38,
-0x400008, 0x0, 0xc004734, 0x0, 0x3c020001, 0x8c425008,
-0x3c010001, 0xac204f90, 0x104000c5, 0x24020002, 0x3c010001, 0x370821,
-0xac22839c, 0x3c010001, 0x8004731, 0xac205008, 0xc004843, 0x0,
-0x3c030001, 0x8c635020, 0x24020011, 0x146200fd, 0x24020003, 0x80046b1,
-0x0, 0x3c050001, 0x8ca54ffc, 0x3c060001, 0x8cc6714c, 0xc004eac,
-0x24040001, 0x24020005, 0x3c010001, 0xac205008, 0x3c010001, 0x370821,
-0x8004731, 0xac22839c, 0x3c040001, 0x24844e2c, 0x3c05000f, 0x34a50100,
-0x3021, 0x3821, 0xafa00010, 0xc002403, 0xafa00014, 0x8004731,
-0x0, 0x8f820220, 0x3c03f700, 0x431025, 0x80046d8, 0xaf820220,
-0x8f820220, 0x3c030004, 0x431024, 0x14400095, 0x24020007, 0x8f830054,
-0x3c020001, 0x8c4250a0, 0x2463d8f0, 0x431023, 0x2c422710, 0x144000d1,
-0x24020001, 0x800472f, 0x0, 0x3c050001, 0x8ca54ffc, 0xc004fb3,
-0x24040001, 0xc005078, 0x24040001, 0x3c030001, 0x8c637144, 0x46100c3,
-0x24020001, 0x3c020008, 0x621024, 0x10400006, 0x0, 0x8f820214,
-0x3c03ffff, 0x431024, 0x800467a, 0x3442251f, 0x8f820214, 0x3c03ffff,
-0x431024, 0x3442241f, 0xaf820214, 0x8ee20000, 0x3c030200, 0x431025,
-0xaee20000, 0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, 0x8f820220,
-0x34420002, 0xaf820220, 0x24020008, 0x3c010001, 0x370821, 0xc0043cd,
-0xac22839c, 0x8004731, 0x0, 0x3c020001, 0x571021, 0x8c42839c,
-0x2443ffff, 0x2c620008, 0x1040009e, 0x31080, 0x3c010001, 0x220821,
-0x8c224e58, 0x400008, 0x0, 0xc00428b, 0x0, 0x3c010001,
-0xac205000, 0xaf800204, 0x3c010001, 0xc004734, 0xac207110, 0x8f820044,
-0x34428080, 0xaf820044, 0x8f830054, 0x3c010001, 0xac204f90, 0x80046da,
-0x24020002, 0x8f830054, 0x3c020001, 0x8c4250a0, 0x2463d8f0, 0x431023,
-0x2c422710, 0x14400081, 0x24020003, 0x3c010001, 0x370821, 0x8004731,
-0xac22839c, 0x3c020001, 0x8c427148, 0x30424000, 0x10400005, 0x0,
-0x8f820044, 0x3c03ffff, 0x80046c0, 0x34637fff, 0x8f820044, 0x2403ff7f,
-0x431024, 0xaf820044, 0x8f830054, 0x80046da, 0x24020004, 0x8f830054,
-0x3c020001, 0x8c4250a0, 0x2463d8f0, 0x431023, 0x2c422710, 0x14400065,
-0x24020005, 0x3c010001, 0x370821, 0x8004731, 0xac22839c, 0x8f820220,
-0x3c03f700, 0x431025, 0xaf820220, 0xaf800204, 0x3c010001, 0xac207110,
-0x8f830054, 0x24020006, 0x3c010001, 0x370821, 0xac22839c, 0x3c010001,
-0x8004731, 0xac2350a0, 0x3c05fffe, 0x34a57960, 0x3c040001, 0x8f820054,
-0x3c030001, 0x8c6350a0, 0x3484869f, 0x451021, 0x621823, 0x83202b,
-0x10800046, 0x0, 0x24020007, 0x3c010001, 0x370821, 0x8004731,
-0xac22839c, 0x8f820220, 0x3c04f700, 0x441025, 0xaf820220, 0x8f820220,
-0x3c030300, 0x431024, 0x14400005, 0x1821, 0x8f820220, 0x24030001,
-0x441025, 0xaf820220, 0x10600030, 0x24020001, 0x8f820214, 0x3c03ffff,
-0x3c040001, 0x8c845098, 0x431024, 0x3442251f, 0xaf820214, 0x24020008,
-0x3c010001, 0x370821, 0xac22839c, 0x10800007, 0x24020001, 0x3c010001,
-0xac2270c0, 0xc004c08, 0x8f840220, 0x8004731, 0x0, 0x8f820220,
-0x3c030008, 0x431024, 0x1440001a, 0x2402000e, 0x3c010001, 0xac2270c0,
-0x8ee20000, 0x24040001, 0x3c030200, 0x431025, 0xc005078, 0xaee20000,
-0x8f820220, 0x2403fffb, 0x431024, 0xaf820220, 0x8f820220, 0x34420002,
-0xc0043cd, 0xaf820220, 0x3c050001, 0x8ca54ffc, 0xc004fb3, 0x24040001,
-0x8004731, 0x0, 0x24020001, 0x3c010001, 0xac225000, 0x8fbf0018,
-0x3e00008, 0x27bd0020, 0x8f820200, 0x8f820220, 0x8f820220, 0x34420004,
-0xaf820220, 0x8f820200, 0x3c060001, 0x8cc64ffc, 0x34420004, 0xaf820200,
-0x24020002, 0x10c20048, 0x2cc20003, 0x10400005, 0x24020001, 0x10c20008,
-0x0, 0x8004788, 0x0, 0x24020004, 0x10c20013, 0x24020001,
-0x8004788, 0x0, 0x3c030001, 0x8c634fe8, 0x3c020001, 0x8c424ff4,
-0x3c040001, 0x8c845010, 0x3c050001, 0x8ca54fec, 0xaf860200, 0xaf860220,
-0x34630022, 0x441025, 0x451025, 0x34420002, 0x8004787, 0xaf830200,
-0xaf820200, 0xaf820220, 0x8f820044, 0x3c030001, 0x8c635098, 0x34428080,
-0xaf820044, 0x10600005, 0x3c033f00, 0x3c020001, 0x8c424fe0, 0x800477b,
-0x346300e0, 0x8f8400f0, 0x276217f8, 0x14820002, 0x24850008, 0x27651000,
-0x8f8200f4, 0x10a20007, 0x3c038000, 0x34630040, 0x3c020001, 0x24424fa0,
-0xac820000, 0xac830004, 0xaf8500f0, 0x3c020001, 0x8c424fe0, 0x3c033f00,
-0x346300e2, 0x431025, 0xaf820200, 0x3c030001, 0x8c634fe4, 0x3c04f700,
-0x3c020001, 0x8c424ff4, 0x3c050001, 0x8ca55010, 0x641825, 0x431025,
-0x451025, 0xaf820220, 0x3e00008, 0x0, 0x8f820220, 0x3c030001,
-0x8c634ffc, 0x34420004, 0xaf820220, 0x24020001, 0x1062000f, 0x0,
-0x8f830054, 0x8f820054, 0x24630002, 0x621023, 0x2c420003, 0x10400011,
-0x0, 0x8f820054, 0x621023, 0x2c420003, 0x1040000c, 0x0,
-0x8004799, 0x0, 0x8f830054, 0x8f820054, 0x80047a5, 0x24630007,
-0x8f820054, 0x621023, 0x2c420008, 0x1440fffc, 0x0, 0x8f8400e0,
-0x30820007, 0x1040000d, 0x0, 0x8f820054, 0x8f8300e0, 0x14830009,
-0x24450032, 0x8f820054, 0xa21023, 0x2c420033, 0x10400004, 0x0,
-0x8f8200e0, 0x1082fff9, 0x0, 0x8f820220, 0x2403fffd, 0x431024,
-0xaf820220, 0x3e00008, 0x0, 0x0, 0x27bdffd8, 0xafb20018,
-0x809021, 0xafb3001c, 0xa09821, 0xafb10014, 0xc08821, 0xafb00010,
-0x8021, 0xafbf0020, 0xa6200000, 0xc004bbf, 0x24040001, 0x26100001,
-0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021, 0xc004bbf,
-0x24040001, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x24100010,
-0x2501024, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042,
-0x1600fffa, 0x2501024, 0x24100010, 0x2701024, 0x10400002, 0x2021,
-0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x2701024, 0xc004be5,
-0x34108000, 0xc004be5, 0x0, 0xc004b9f, 0x0, 0x50400005,
-0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, 0x1600fff7,
-0x0, 0xc004be5, 0x0, 0x8fbf0020, 0x8fb3001c, 0x8fb20018,
-0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0028, 0x27bdffd8, 0xafb10014,
-0x808821, 0xafb20018, 0xa09021, 0xafb3001c, 0xc09821, 0xafb00010,
-0x8021, 0xafbf0020, 0xc004bbf, 0x24040001, 0x26100001, 0x2e020020,
-0x1440fffb, 0x0, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001,
-0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0x24100010, 0x2301024,
-0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa,
-0x2301024, 0x24100010, 0x2501024, 0x10400002, 0x2021, 0x24040001,
-0xc004bbf, 0x108042, 0x1600fffa, 0x2501024, 0xc004bbf, 0x24040001,
-0xc004bbf, 0x2021, 0x34108000, 0x96620000, 0x501024, 0x10400002,
-0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fff8, 0x0,
-0xc004be5, 0x0, 0x8fbf0020, 0x8fb3001c, 0x8fb20018, 0x8fb10014,
-0x8fb00010, 0x3e00008, 0x27bd0028, 0x3c030001, 0x8c635020, 0x3c020001,
-0x8c425064, 0x27bdffd8, 0xafbf0020, 0xafb1001c, 0x10620003, 0xafb00018,
-0x3c010001, 0xac235064, 0x2463ffff, 0x2c620013, 0x10400349, 0x31080,
-0x3c010001, 0x220821, 0x8c224e80, 0x400008, 0x0, 0xc004be5,
-0x8021, 0x34028000, 0xa7a20010, 0x27b10010, 0xc004bbf, 0x24040001,
-0x26100001, 0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021,
-0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001,
-0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001, 0xc004bbf,
-0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0xc004bbf, 0x2021,
-0x108042, 0x1600fffc, 0x0, 0xc004bbf, 0x24040001, 0xc004bbf,
-0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, 0x2021,
-0x24040001, 0xc004bbf, 0x108042, 0x1600fff8, 0x0, 0xc004be5,
-0x0, 0x8004b98, 0x24020002, 0x27b10010, 0xa7a00010, 0x8021,
-0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0,
-0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, 0x24040001,
-0xc004bbf, 0x2021, 0x24100010, 0x32020001, 0x10400002, 0x2021,
-0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, 0x24100010,
-0xc004bbf, 0x2021, 0x108042, 0x1600fffc, 0x0, 0xc004be5,
-0x34108000, 0xc004be5, 0x0, 0xc004b9f, 0x0, 0x50400005,
-0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, 0x1600fff7,
-0x0, 0xc004be5, 0x0, 0x97a20010, 0x30428000, 0x144002dc,
-0x24020003, 0x8004b98, 0x0, 0x24021200, 0xa7a20010, 0x27b10010,
-0x8021, 0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
-0x0, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf,
-0x2021, 0xc004bbf, 0x24040001, 0x24100010, 0x32020001, 0x10400002,
-0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001,
-0x24100010, 0xc004bbf, 0x2021, 0x108042, 0x1600fffc, 0x0,
-0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x34108000, 0x96220000,
-0x501024, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042,
-0x1600fff8, 0x0, 0xc004be5, 0x0, 0x8f830054, 0x8004b8a,
-0x24020004, 0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c, 0x431023,
-0x2c420064, 0x1440029e, 0x24020002, 0x3c030001, 0x8c6350ac, 0x10620297,
-0x2c620003, 0x14400296, 0x24020011, 0x24020003, 0x10620005, 0x24020004,
-0x10620291, 0x2402000f, 0x8004b98, 0x24020011, 0x8004b98, 0x24020005,
-0x24020014, 0xa7a20010, 0x27b10010, 0x8021, 0xc004bbf, 0x24040001,
-0x26100001, 0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021,
-0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001,
-0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001, 0xc004bbf,
-0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020012, 0x10400002,
-0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020012,
-0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x34108000, 0x96220000,
-0x501024, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042,
-0x1600fff8, 0x0, 0xc004be5, 0x0, 0x8f830054, 0x8004b8a,
-0x24020006, 0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c, 0x431023,
-0x2c420064, 0x14400250, 0x24020007, 0x8004b98, 0x0, 0x24020006,
-0xa7a20010, 0x27b10010, 0x8021, 0xc004bbf, 0x24040001, 0x26100001,
-0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021, 0xc004bbf,
-0x24040001, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0x24100010,
-0x32020001, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042,
-0x1600fffa, 0x32020001, 0x24100010, 0x32020013, 0x10400002, 0x2021,
-0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020013, 0xc004bbf,
-0x24040001, 0xc004bbf, 0x2021, 0x34108000, 0x96220000, 0x501024,
-0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fff8,
-0x0, 0xc004be5, 0x0, 0x8f830054, 0x8004b8a, 0x24020008,
-0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c, 0x431023, 0x2c420064,
-0x1440020f, 0x24020009, 0x8004b98, 0x0, 0x27b10010, 0xa7a00010,
-0x8021, 0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
-0x0, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf,
-0x24040001, 0xc004bbf, 0x2021, 0x24100010, 0x32020001, 0x10400002,
-0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001,
-0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, 0xc004bbf,
-0x108042, 0x1600fffa, 0x32020018, 0xc004be5, 0x34108000, 0xc004be5,
-0x0, 0xc004b9f, 0x0, 0x50400005, 0x108042, 0x96220000,
-0x501025, 0xa6220000, 0x108042, 0x1600fff7, 0x0, 0xc004be5,
-0x8021, 0x97a20010, 0x27b10010, 0x34420001, 0xa7a20010, 0xc004bbf,
-0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0, 0xc004bbf,
-0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0xc004bbf,
-0x24040001, 0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001,
-0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018,
-0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa,
-0x32020018, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x34108000,
-0x96220000, 0x501024, 0x10400002, 0x2021, 0x24040001, 0xc004bbf,
-0x108042, 0x1600fff8, 0x0, 0xc004be5, 0x0, 0x8f830054,
-0x8004b8a, 0x2402000a, 0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c,
-0x431023, 0x2c420064, 0x1440019b, 0x2402000b, 0x8004b98, 0x0,
-0x27b10010, 0xa7a00010, 0x8021, 0xc004bbf, 0x24040001, 0x26100001,
-0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021, 0xc004bbf,
-0x24040001, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x24100010,
-0x32020001, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042,
-0x1600fffa, 0x32020001, 0x24100010, 0x32020017, 0x10400002, 0x2021,
-0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020017, 0xc004be5,
-0x34108000, 0xc004be5, 0x0, 0xc004b9f, 0x0, 0x50400005,
-0x108042, 0x96220000, 0x501025, 0xa6220000, 0x108042, 0x1600fff7,
-0x0, 0xc004be5, 0x8021, 0x97a20010, 0x27b10010, 0x34420700,
-0xa7a20010, 0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
-0x0, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf,
-0x2021, 0xc004bbf, 0x24040001, 0x24100010, 0x32020001, 0x10400002,
-0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001,
-0x24100010, 0x32020017, 0x10400002, 0x2021, 0x24040001, 0xc004bbf,
-0x108042, 0x1600fffa, 0x32020017, 0xc004bbf, 0x24040001, 0xc004bbf,
-0x2021, 0x34108000, 0x96220000, 0x501024, 0x10400002, 0x2021,
-0x24040001, 0xc004bbf, 0x108042, 0x1600fff8, 0x0, 0xc004be5,
-0x0, 0x8f830054, 0x8004b8a, 0x2402000c, 0x8f830054, 0x3c020001,
-0x8c4250a8, 0x2463ff9c, 0x431023, 0x2c420064, 0x14400127, 0x24020012,
-0x8004b98, 0x0, 0x27b10010, 0xa7a00010, 0x8021, 0xc004bbf,
-0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0, 0xc004bbf,
-0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, 0x24040001, 0xc004bbf,
-0x2021, 0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001,
-0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020014,
-0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa,
-0x32020014, 0xc004be5, 0x34108000, 0xc004be5, 0x0, 0xc004b9f,
-0x0, 0x50400005, 0x108042, 0x96220000, 0x501025, 0xa6220000,
-0x108042, 0x1600fff7, 0x0, 0xc004be5, 0x8021, 0x97a20010,
-0x27b10010, 0x34420010, 0xa7a20010, 0xc004bbf, 0x24040001, 0x26100001,
-0x2e020020, 0x1440fffb, 0x0, 0xc004bbf, 0x2021, 0xc004bbf,
-0x24040001, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0x24100010,
-0x32020001, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042,
-0x1600fffa, 0x32020001, 0x24100010, 0x32020014, 0x10400002, 0x2021,
-0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020014, 0xc004bbf,
-0x24040001, 0xc004bbf, 0x2021, 0x34108000, 0x96220000, 0x501024,
-0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fff8,
-0x0, 0xc004be5, 0x0, 0x8f830054, 0x8004b8a, 0x24020013,
-0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c, 0x431023, 0x2c420064,
-0x144000b3, 0x2402000d, 0x8004b98, 0x0, 0x27b10010, 0xa7a00010,
-0x8021, 0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
-0x0, 0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf,
-0x24040001, 0xc004bbf, 0x2021, 0x24100010, 0x32020001, 0x10400002,
-0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001,
-0x24100010, 0x32020018, 0x10400002, 0x2021, 0x24040001, 0xc004bbf,
-0x108042, 0x1600fffa, 0x32020018, 0xc004be5, 0x34108000, 0xc004be5,
-0x0, 0xc004b9f, 0x0, 0x50400005, 0x108042, 0x96220000,
-0x501025, 0xa6220000, 0x108042, 0x1600fff7, 0x0, 0xc004be5,
-0x8021, 0x97a20010, 0x27b10010, 0x3042fffe, 0xa7a20010, 0xc004bbf,
-0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0, 0xc004bbf,
-0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0xc004bbf,
-0x24040001, 0x24100010, 0x32020001, 0x10400002, 0x2021, 0x24040001,
-0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, 0x24100010, 0x32020018,
-0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042, 0x1600fffa,
-0x32020018, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021, 0x34108000,
-0x96220000, 0x501024, 0x10400002, 0x2021, 0x24040001, 0xc004bbf,
-0x108042, 0x1600fff8, 0x0, 0xc004be5, 0x0, 0x8f830054,
-0x8004b8a, 0x2402000e, 0x24020840, 0xa7a20010, 0x27b10010, 0x8021,
-0xc004bbf, 0x24040001, 0x26100001, 0x2e020020, 0x1440fffb, 0x0,
-0xc004bbf, 0x2021, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021,
-0xc004bbf, 0x24040001, 0x24100010, 0x32020001, 0x10400002, 0x2021,
-0x24040001, 0xc004bbf, 0x108042, 0x1600fffa, 0x32020001, 0x24100010,
-0x32020013, 0x10400002, 0x2021, 0x24040001, 0xc004bbf, 0x108042,
-0x1600fffa, 0x32020013, 0xc004bbf, 0x24040001, 0xc004bbf, 0x2021,
-0x34108000, 0x96220000, 0x501024, 0x10400002, 0x2021, 0x24040001,
-0xc004bbf, 0x108042, 0x1600fff8, 0x0, 0xc004be5, 0x0,
-0x8f830054, 0x24020010, 0x3c010001, 0xac225020, 0x3c010001, 0x8004b9a,
-0xac2350a8, 0x8f830054, 0x3c020001, 0x8c4250a8, 0x2463ff9c, 0x431023,
-0x2c420064, 0x14400004, 0x0, 0x24020011, 0x3c010001, 0xac225020,
-0x8fbf0020, 0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0028, 0x8f850044,
-0x8f820044, 0x3c030001, 0x431025, 0x3c030008, 0xaf820044, 0x8f840054,
-0x8f820054, 0xa32824, 0x8004bab, 0x24840001, 0x8f820054, 0x821023,
-0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, 0x3463ffff,
-0x431024, 0xaf820044, 0x8f830054, 0x8f820054, 0x8004bb9, 0x24630001,
-0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x3e00008,
-0xa01021, 0x8f830044, 0x3c02fff0, 0x3442ffff, 0x42480, 0x621824,
-0x3c020002, 0x822025, 0x641825, 0xaf830044, 0x8f820044, 0x3c030001,
-0x431025, 0xaf820044, 0x8f830054, 0x8f820054, 0x8004bd1, 0x24630001,
-0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820044,
-0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820044, 0x8f830054, 0x8f820054,
-0x8004bdf, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc,
-0x0, 0x3e00008, 0x0, 0x8f820044, 0x3c03fff0, 0x3463ffff,
-0x431024, 0xaf820044, 0x8f820044, 0x3c030001, 0x431025, 0xaf820044,
-0x8f830054, 0x8f820054, 0x8004bf3, 0x24630001, 0x8f820054, 0x621023,
-0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, 0x3463ffff,
-0x431024, 0xaf820044, 0x8f830054, 0x8f820054, 0x8004c01, 0x24630001,
-0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x3e00008,
-0x0, 0x0, 0x27bdffe8, 0xafbf0010, 0x3c030001, 0x771821,
-0x8c63839c, 0x24020008, 0x1462021c, 0x803021, 0x3c020001, 0x8c425098,
-0x14400033, 0x0, 0x8f850224, 0x38a30020, 0x2c630001, 0x38a20010,
-0x2c420001, 0x621825, 0x1460000d, 0x38a30030, 0x2c630001, 0x38a20400,
-0x2c420001, 0x621825, 0x14600007, 0x38a30402, 0x2c630001, 0x38a20404,
-0x2c420001, 0x621825, 0x10600005, 0x0, 0xc00428b, 0x0,
-0x8004c41, 0x2402000e, 0xc0043cd, 0x0, 0x3c050001, 0x8ca54ffc,
-0xc004fb3, 0x24040001, 0x3c030001, 0x8c634ffc, 0x24020004, 0x14620005,
-0x2403fffb, 0x3c020001, 0x8c424ff8, 0x8004c3d, 0x2403fff7, 0x3c020001,
-0x8c424ff8, 0x431024, 0x3c010001, 0xac224ff8, 0x2402000e, 0x3c010001,
-0xc00428b, 0xac2270c0, 0x8004e2b, 0x0, 0x8f820220, 0x3c030400,
-0x431024, 0x10400027, 0x2403ffbf, 0x8f850224, 0x3c020001, 0x8c4270cc,
-0xa32024, 0x431024, 0x1482000c, 0x0, 0x3c020001, 0x8c4270d0,
-0x24420001, 0x3c010001, 0xac2270d0, 0x2c420002, 0x14400008, 0x24020001,
-0x3c010001, 0x8004c61, 0xac2270f0, 0x3c010001, 0xac2070d0, 0x3c010001,
-0xac2070f0, 0x3c020001, 0x8c4270f0, 0x10400006, 0x30a20040, 0x10400004,
-0x24020001, 0x3c010001, 0x8004c6c, 0xac2270f4, 0x3c010001, 0xac2070f4,
-0x3c010001, 0xac2570cc, 0x3c010001, 0x8004c7c, 0xac207100, 0x24020001,
-0x3c010001, 0xac227100, 0x3c010001, 0xac2070f0, 0x3c010001, 0xac2070d0,
-0x3c010001, 0xac2070f4, 0x3c010001, 0xac2070cc, 0x3c030001, 0x8c6370c0,
-0x3c020001, 0x8c4270c4, 0x10620003, 0x3c020200, 0x3c010001, 0xac2370c4,
-0xc21024, 0x10400007, 0x2463ffff, 0x8f820220, 0x24030001, 0x3c010001,
-0xac235000, 0x8004e29, 0x3c03f700, 0x2c62000e, 0x10400198, 0x31080,
-0x3c010001, 0x220821, 0x8c224ed0, 0x400008, 0x0, 0x8ee20000,
-0x3c03fdff, 0x3463ffff, 0x431024, 0xaee20000, 0x3c010001, 0xac2070f0,
-0x3c010001, 0xac2070d0, 0x3c010001, 0xac207100, 0x3c010001, 0xac2070cc,
-0x3c010001, 0xac2070f4, 0x3c010001, 0xac2070e8, 0x3c010001, 0xac2070e0,
-0xc00478a, 0xaf800224, 0x24020002, 0x3c010001, 0xac2270c0, 0xc00428b,
-0x0, 0xaf800204, 0x8f820200, 0x2403fffd, 0x431024, 0xaf820200,
-0x3c010001, 0xac207110, 0x8f830054, 0x3c020001, 0x8c4270e8, 0x24040001,
-0x3c010001, 0xac2470fc, 0x24420001, 0x3c010001, 0xac2270e8, 0x2c420004,
-0x3c010001, 0xac2370e4, 0x14400006, 0x24020003, 0x3c010001, 0xac245000,
-0x3c010001, 0x8004e27, 0xac2070e8, 0x3c010001, 0x8004e27, 0xac2270c0,
-0x8f830054, 0x3c020001, 0x8c4270e4, 0x2463d8f0, 0x431023, 0x2c422710,
-0x14400154, 0x24020004, 0x3c010001, 0x8004e27, 0xac2270c0, 0x3c040001,
-0x8c84509c, 0x3c010001, 0xc004e2e, 0xac2070d8, 0x3c020001, 0x8c42710c,
-0xaf820204, 0x8f820204, 0x30420030, 0x1440013c, 0x24020002, 0x3c030001,
-0x8c63710c, 0x24020005, 0x3c010001, 0xac2270c0, 0x3c010001, 0x8004e27,
-0xac237110, 0x3c020001, 0x8c4270f0, 0x10400139, 0x0, 0x3c020001,
-0x8c4270cc, 0x10400135, 0x0, 0x3c010001, 0xac2270f8, 0x24020003,
-0x3c010001, 0xac2270d0, 0x8004dba, 0x24020006, 0x3c010001, 0xac2070d8,
-0x8f820204, 0x34420040, 0xaf820204, 0x3c020001, 0x8c427110, 0x24030007,
-0x3c010001, 0xac2370c0, 0x34420040, 0x3c010001, 0xac227110, 0x3c020001,
-0x8c4270f0, 0x10400005, 0x0, 0x3c020001, 0x8c4270cc, 0x10400110,
-0x24020002, 0x3c050001, 0x24a570d0, 0x8ca20000, 0x2c424e21, 0x1040010a,
-0x24020002, 0x3c020001, 0x8c4270f4, 0x1040010f, 0x2404ffbf, 0x3c020001,
-0x8c4270cc, 0x3c030001, 0x8c6370f8, 0x441024, 0x641824, 0x14430007,
-0x24020001, 0x24020003, 0xaca20000, 0x24020008, 0x3c010001, 0x8004e27,
-0xac2270c0, 0x3c010001, 0x8004e27, 0xac2270c0, 0x3c020001, 0x8c4270fc,
-0x1040000c, 0x24020001, 0x3c040001, 0xc004e3b, 0x8c8470cc, 0x3c020001,
-0x8c427118, 0x14400005, 0x24020001, 0x3c020001, 0x8c427114, 0x10400006,
-0x24020001, 0x3c010001, 0xac225000, 0x3c010001, 0x8004e27, 0xac2070e8,
-0x8f820204, 0x34420040, 0xaf820204, 0x3c020001, 0x8c427110, 0x3c030001,
-0x8c6370e0, 0x34420040, 0x3c010001, 0xac227110, 0x3c020001, 0x8c4270cc,
-0x2c630001, 0x318c0, 0x3c010001, 0xac2370e0, 0x30420008, 0x3c010001,
-0xac2270dc, 0x8f830054, 0x24020009, 0x3c010001, 0xac2270c0, 0x3c010001,
-0x8004e27, 0xac2370e4, 0x8f830054, 0x3c020001, 0x8c4270e4, 0x2463d8f0,
-0x431023, 0x2c422710, 0x144000b6, 0x0, 0x3c020001, 0x8c4270f0,
-0x10400005, 0x0, 0x3c020001, 0x8c4270cc, 0x104000b7, 0x24020002,
-0x3c030001, 0x246370d0, 0x8c620000, 0x2c424e21, 0x104000b1, 0x24020002,
-0x3c020001, 0x8c4270fc, 0x1040000e, 0x0, 0x3c020001, 0x8c4270cc,
-0x3c010001, 0xac2070fc, 0x30420080, 0x1040002f, 0x2402000c, 0x8f820204,
-0x30420080, 0x1440000c, 0x24020003, 0x8004da7, 0x2402000c, 0x3c020001,
-0x8c4270cc, 0x30420080, 0x14400005, 0x24020003, 0x8f820204, 0x30420080,
-0x1040001f, 0x24020003, 0xac620000, 0x2402000a, 0x3c010001, 0xac2270c0,
-0x3c040001, 0x24847108, 0x8c820000, 0x3c030001, 0x8c6370e0, 0x431025,
-0xaf820204, 0x8c830000, 0x3c040001, 0x8c8470e0, 0x2402000b, 0x3c010001,
-0xac2270c0, 0x641825, 0x3c010001, 0xac237110, 0x3c050001, 0x24a570d0,
-0x8ca20000, 0x2c424e21, 0x1040007d, 0x24020002, 0x3c020001, 0x8c427100,
-0x10400005, 0x0, 0x2402000c, 0x3c010001, 0x8004e27, 0xac2270c0,
-0x3c020001, 0x8c4270f0, 0x1040007a, 0x0, 0x3c040001, 0x8c8470cc,
-0x1080006c, 0x30820008, 0x3c030001, 0x8c6370dc, 0x10620072, 0x24020003,
-0x3c010001, 0xac2470f8, 0xaca20000, 0x24020006, 0x3c010001, 0x8004e27,
-0xac2270c0, 0x8f8400f0, 0x276217f8, 0x14820002, 0x24850008, 0x27651000,
-0x8f8200f4, 0x10a20007, 0x3c038000, 0x34630040, 0x3c020001, 0x24424fa0,
-0xac820000, 0xac830004, 0xaf8500f0, 0x8f820200, 0x34420002, 0xaf820200,
-0x8f830054, 0x2402000d, 0x3c010001, 0xac2270c0, 0x3c010001, 0xac2370e4,
-0x8f830054, 0x3c020001, 0x8c4270e4, 0x2463d8f0, 0x431023, 0x2c422710,
-0x1440003a, 0x0, 0x3c020001, 0x8c427100, 0x10400029, 0x2402000e,
-0x3c030001, 0x8c637114, 0x3c010001, 0x14600015, 0xac2270c0, 0xc0043cd,
-0x0, 0x3c050001, 0x8ca54ffc, 0xc004fb3, 0x24040001, 0x3c030001,
-0x8c634ffc, 0x24020004, 0x14620005, 0x2403fffb, 0x3c020001, 0x8c424ff8,
-0x8004df6, 0x2403fff7, 0x3c020001, 0x8c424ff8, 0x431024, 0x3c010001,
-0xac224ff8, 0x8ee20000, 0x3c030200, 0x431025, 0xaee20000, 0x8f820224,
-0x3c010001, 0xac22711c, 0x8f820220, 0x2403fffb, 0x431024, 0xaf820220,
-0x8f820220, 0x34420002, 0x8004e27, 0xaf820220, 0x3c020001, 0x8c4270f0,
-0x10400005, 0x0, 0x3c020001, 0x8c4270cc, 0x1040000f, 0x24020002,
-0x3c020001, 0x8c4270d0, 0x2c424e21, 0x1040000a, 0x24020002, 0x3c020001,
-0x8c4270f0, 0x1040000f, 0x0, 0x3c020001, 0x8c4270cc, 0x1440000b,
-0x0, 0x24020002, 0x3c010001, 0x8004e27, 0xac2270c0, 0x3c020001,
-0x8c4270f0, 0x10400003, 0x0, 0xc00428b, 0x0, 0x8f820220,
-0x3c03f700, 0x431025, 0xaf820220, 0x8fbf0010, 0x3e00008, 0x27bd0018,
-0x3c030001, 0x24637118, 0x8c620000, 0x10400005, 0x34422000, 0x3c010001,
-0xac22710c, 0x8004e39, 0xac600000, 0x3c010001, 0xac24710c, 0x3e00008,
-0x0, 0x27bdffe0, 0x30820030, 0xafbf0018, 0x3c010001, 0xac227114,
-0x14400067, 0x3c02ffff, 0x34421f0e, 0x821024, 0x14400061, 0x24020030,
-0x30822000, 0x1040005d, 0x30838000, 0x31a02, 0x30820001, 0x21200,
-0x3c040001, 0x8c84509c, 0x621825, 0x331c2, 0x3c030001, 0x2463507c,
-0x30828000, 0x21202, 0x30840001, 0x42200, 0x441025, 0x239c2,
-0x61080, 0x431021, 0x471021, 0x90430000, 0x24020001, 0x10620025,
-0x0, 0x10600007, 0x24020002, 0x10620013, 0x24020003, 0x1062002c,
-0x3c05000f, 0x8004e9d, 0x0, 0x8f820200, 0x2403feff, 0x431024,
-0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820220,
-0x3c010001, 0xac207154, 0x3c010001, 0x8004ea8, 0xac20715c, 0x8f820200,
-0x34420100, 0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024,
-0xaf820220, 0x24020100, 0x3c010001, 0xac227154, 0x3c010001, 0x8004ea8,
-0xac20715c, 0x8f820200, 0x2403feff, 0x431024, 0xaf820200, 0x8f820220,
-0x3c030001, 0x431025, 0xaf820220, 0x3c010001, 0xac207154, 0x3c010001,
-0x8004ea8, 0xac23715c, 0x8f820200, 0x34420100, 0xaf820200, 0x8f820220,
-0x3c030001, 0x431025, 0xaf820220, 0x24020100, 0x3c010001, 0xac227154,
-0x3c010001, 0x8004ea8, 0xac23715c, 0x34a5ffff, 0x3c040001, 0x24844f08,
-0xafa30010, 0xc002403, 0xafa00014, 0x8004ea8, 0x0, 0x24020030,
-0x3c010001, 0xac227118, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x0,
-0x27bdffc8, 0xafb10024, 0x808821, 0xafb3002c, 0xa09821, 0xafb00020,
-0xc08021, 0x3c040001, 0x24844f20, 0x3c050009, 0x3c020001, 0x8c424ffc,
-0x34a59001, 0x2203021, 0x2603821, 0xafbf0030, 0xafb20028, 0xa7a0001a,
-0xafb00014, 0xc002403, 0xafa20010, 0x24020002, 0x126200e9, 0x2e620003,
-0x10400005, 0x24020001, 0x1262000a, 0x3c02fffb, 0x8004fac, 0x0,
-0x24020004, 0x1262006d, 0x24020008, 0x1262006c, 0x3c02ffec, 0x8004fac,
-0x0, 0x3442ffff, 0x2028024, 0x119140, 0x3c010001, 0x320821,
-0xac30712c, 0x3c024000, 0x2021024, 0x10400046, 0x1023c2, 0x30840030,
-0x101382, 0x3042000c, 0x3c030001, 0x24635024, 0x431021, 0x823821,
-0x3c020020, 0x2021024, 0x10400006, 0x24020100, 0x3c010001, 0x320821,
-0xac227130, 0x8004eef, 0x3c020080, 0x3c010001, 0x320821, 0xac207130,
-0x3c020080, 0x2021024, 0x10400006, 0x111940, 0x3c020001, 0x3c010001,
-0x230821, 0x8004efb, 0xac227138, 0x111140, 0x3c010001, 0x220821,
-0xac207138, 0x94e30000, 0x32024000, 0x10400003, 0xa7a30018, 0x34624000,
-0xa7a20018, 0x24040001, 0x94e20002, 0x24050004, 0x24e60002, 0x34420001,
-0xc004802, 0xa4e20002, 0x24040001, 0x2821, 0xc004802, 0x27a60018,
-0x3c020001, 0x8c424ffc, 0x24110001, 0x3c010001, 0xac315008, 0x14530004,
-0x32028000, 0xc00428b, 0x0, 0x32028000, 0x10400095, 0x0,
-0xc00428b, 0x0, 0x24020002, 0x3c010001, 0xac315000, 0x3c010001,
-0x8004fac, 0xac224ffc, 0x24040001, 0x24050004, 0x27b0001a, 0xc004802,
-0x2003021, 0x24040001, 0x2821, 0xc004802, 0x2003021, 0x3c020001,
-0x521021, 0x8c427124, 0x3c040001, 0x8c844ffc, 0x3c03bfff, 0x3463ffff,
-0x3c010001, 0xac335008, 0x431024, 0x3c010001, 0x320821, 0x10930074,
-0xac227124, 0x8004fac, 0x0, 0x3c02ffec, 0x3442ffff, 0x2028024,
-0x3c020008, 0x2028025, 0x111140, 0x3c010001, 0x220821, 0xac307128,
-0x3c022000, 0x2021024, 0x10400005, 0x24020001, 0x3c010001, 0xac225098,
-0x8004f4d, 0x3c024000, 0x3c010001, 0xac205098, 0x3c024000, 0x2021024,
-0x1440001c, 0x0, 0x3c020001, 0x8c425098, 0x10400007, 0x24022020,
-0x3c010001, 0xac22509c, 0x24020001, 0x3c010001, 0x370821, 0xac22839c,
-0x3c04bfff, 0x111940, 0x3c020001, 0x431021, 0x8c427120, 0x3c050001,
-0x8ca54ffc, 0x3484ffff, 0x441024, 0x3c010001, 0x230821, 0xac227120,
-0x24020001, 0x10a20044, 0x0, 0x8004faa, 0x0, 0x3c020001,
-0x8c425098, 0x1040001c, 0x24022000, 0x3c010001, 0xac22509c, 0x3c0300a0,
-0x2031024, 0x14430005, 0x111140, 0x3402a000, 0x3c010001, 0x8004fa5,
-0xac22509c, 0x3c030001, 0x621821, 0x8c637128, 0x3c020020, 0x621024,
-0x10400004, 0x24022001, 0x3c010001, 0x8004fa5, 0xac22509c, 0x3c020080,
-0x621024, 0x1040001f, 0x3402a001, 0x3c010001, 0x8004fa5, 0xac22509c,
-0x3c020020, 0x2021024, 0x10400007, 0x111940, 0x24020100, 0x3c010001,
-0x230821, 0xac227134, 0x8004f99, 0x3c020080, 0x111140, 0x3c010001,
-0x220821, 0xac207134, 0x3c020080, 0x2021024, 0x10400006, 0x111940,
-0x3c020001, 0x3c010001, 0x230821, 0x8004fa5, 0xac22713c, 0x111140,
-0x3c010001, 0x220821, 0xac20713c, 0x3c030001, 0x8c634ffc, 0x24020001,
-0x10620003, 0x0, 0xc00428b, 0x0, 0x8fbf0030, 0x8fb3002c,
-0x8fb20028, 0x8fb10024, 0x8fb00020, 0x3e00008, 0x27bd0038, 0x27bdffd0,
-0xafb40028, 0x80a021, 0xafb20020, 0x9021, 0xafb30024, 0x9821,
-0xafb1001c, 0x8821, 0x24020002, 0xafbf002c, 0xafb00018, 0xa7a00012,
-0x10a20068, 0xa7a00010, 0x2ca20003, 0x10400005, 0x24020001, 0x10a2000a,
-0x148140, 0x8005070, 0x2201021, 0x24020004, 0x10a2005e, 0x24020008,
-0x10a2005d, 0x142140, 0x8005070, 0x2201021, 0x3c030001, 0x701821,
-0x8c63712c, 0x3c024000, 0x621024, 0x14400009, 0x24040001, 0x3c027fff,
-0x3442ffff, 0x628824, 0x3c010001, 0x300821, 0xac317124, 0x8005070,
-0x2201021, 0x24050001, 0xc0047c0, 0x27a60010, 0x24040001, 0x24050001,
-0xc0047c0, 0x27a60010, 0x97a20010, 0x30420004, 0x10400034, 0x3c114000,
-0x3c030001, 0x8c6350ac, 0x24020003, 0x10620008, 0x2c620004, 0x14400029,
-0x3c028000, 0x24020004, 0x10620014, 0x24040001, 0x8005019, 0x3c028000,
-0x24040001, 0x24050011, 0x27b00012, 0xc0047c0, 0x2003021, 0x24040001,
-0x24050011, 0xc0047c0, 0x2003021, 0x97a30012, 0x30624000, 0x10400002,
-0x3c130010, 0x3c130008, 0x3c120001, 0x8005016, 0x30628000, 0x24050014,
-0x27b00012, 0xc0047c0, 0x2003021, 0x24040001, 0x24050014, 0xc0047c0,
-0x2003021, 0x97a30012, 0x30621000, 0x10400002, 0x3c130010, 0x3c130008,
-0x3c120001, 0x30620800, 0x54400001, 0x3c120002, 0x3c028000, 0x2221025,
-0x2531825, 0x8005023, 0x438825, 0x3c110001, 0x2308821, 0x8e31712c,
-0x3c027fff, 0x3442ffff, 0x2228824, 0x141140, 0x3c010001, 0x220821,
-0xac317124, 0x8005070, 0x2201021, 0x142140, 0x3c030001, 0x641821,
-0x8c637128, 0x3c024000, 0x621024, 0x14400008, 0x3c027fff, 0x3442ffff,
-0x628824, 0x3c010001, 0x240821, 0xac317120, 0x8005070, 0x2201021,
-0x3c020001, 0x8c42500c, 0x1040002d, 0x3c11c00c, 0x3c020001, 0x8c425098,
-0x3c03e00c, 0x3c010001, 0x240821, 0x8c247134, 0x2102b, 0x21023,
-0x431024, 0x10800004, 0x518825, 0x3c020020, 0x800504d, 0x2228825,
-0x3c02ffdf, 0x3442ffff, 0x2228824, 0x141140, 0x3c010001, 0x220821,
-0x8c22713c, 0x10400003, 0x3c020080, 0x8005058, 0x2228825, 0x3c02ff7f,
-0x3442ffff, 0x2228824, 0x3c020001, 0x8c425070, 0x10400002, 0x3c020800,
-0x2228825, 0x3c020001, 0x8c425074, 0x10400002, 0x3c020400, 0x2228825,
-0x3c020001, 0x8c425078, 0x10400006, 0x3c020100, 0x800506b, 0x2228825,
-0x3c027fff, 0x3442ffff, 0x628824, 0x141140, 0x3c010001, 0x220821,
-0xac317120, 0x2201021, 0x8fbf002c, 0x8fb40028, 0x8fb30024, 0x8fb20020,
-0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0030, 0x27bdffd8, 0xafb40020,
-0x80a021, 0xafbf0024, 0xafb3001c, 0xafb20018, 0xafb10014, 0xafb00010,
-0x8f900200, 0x3c030001, 0x8c634ffc, 0x8f930220, 0x24020002, 0x106200b1,
-0x2c620003, 0x10400005, 0x24020001, 0x1062000a, 0x141940, 0x8005137,
-0x0, 0x24020004, 0x1062005a, 0x24020008, 0x10620059, 0x149140,
-0x8005137, 0x0, 0x3c040001, 0x832021, 0x8c84712c, 0x3c110001,
-0x2238821, 0x8e317124, 0x3c024000, 0x821024, 0x1040003e, 0x3c020008,
-0x2221024, 0x10400020, 0x36100002, 0x3c020001, 0x431021, 0x8c427130,
-0x10400005, 0x36100020, 0x36100100, 0x3c020020, 0x80050af, 0x2228825,
-0x2402feff, 0x2028024, 0x3c02ffdf, 0x3442ffff, 0x2228824, 0x141140,
-0x3c010001, 0x220821, 0x8c227138, 0x10400005, 0x3c020001, 0x2629825,
-0x3c020080, 0x80050ce, 0x2228825, 0x3c02fffe, 0x3442ffff, 0x2629824,
-0x3c02ff7f, 0x3442ffff, 0x80050ce, 0x2228824, 0x2402fedf, 0x2028024,
-0x3c02fffe, 0x3442ffff, 0x2629824, 0x3c02ff5f, 0x3442ffff, 0x2228824,
-0x3c010001, 0x230821, 0xac207130, 0x3c010001, 0x230821, 0xac207138,
-0xc00478a, 0x0, 0xaf900200, 0xaf930220, 0x8f820220, 0x2403fffb,
-0x431024, 0xaf820220, 0x8f820220, 0x34420002, 0xaf820220, 0x80050e5,
-0x141140, 0x8f820200, 0x2403fffd, 0x431024, 0xc00478a, 0xaf820200,
-0x3c02bfff, 0x3442ffff, 0xc00428b, 0x2228824, 0x141140, 0x3c010001,
-0x220821, 0x8005137, 0xac317124, 0x149140, 0x3c040001, 0x922021,
-0x8c847128, 0x3c110001, 0x2328821, 0x8e317120, 0x3c024000, 0x821024,
-0x14400011, 0x0, 0x3c020001, 0x8c425098, 0x14400006, 0x3c02bfff,
-0x8f820200, 0x34420002, 0xc00478a, 0xaf820200, 0x3c02bfff, 0x3442ffff,
-0xc00428b, 0x2228824, 0x3c010001, 0x320821, 0x8005137, 0xac317120,
-0x3c020001, 0x8c425098, 0x1440002d, 0x141140, 0x3c020020, 0x821024,
-0x10400007, 0x36100020, 0x24020100, 0x3c010001, 0x320821, 0xac227134,
-0x8005117, 0x36100100, 0x3c010001, 0x320821, 0xac207134, 0x2402feff,
-0x2028024, 0x3c020080, 0x821024, 0x10400007, 0x141940, 0x3c020001,
-0x3c010001, 0x230821, 0xac22713c, 0x8005128, 0x2629825, 0x141140,
-0x3c010001, 0x220821, 0xac20713c, 0x3c02fffe, 0x3442ffff, 0x2629824,
-0xc00478a, 0x0, 0xaf900200, 0xaf930220, 0x8f820220, 0x2403fffb,
-0x431024, 0xaf820220, 0x8f820220, 0x34420002, 0xaf820220, 0x141140,
-0x3c010001, 0x220821, 0xac317120, 0x8fbf0024, 0x8fb40020, 0x8fb3001c,
-0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0028, 0x0,
-0x0 };
-u32 tigonFwData[(MAX_DATA_LEN/4) + 1] __initdata = {
-0x416c7465, 0x6f6e2041, 0x63654e49, 0x43205600, 0x416c7465, 0x6f6e2041,
-0x63654e49, 0x43205600, 0x42424242, 0x0, 0x0, 0x0,
-0x135430, 0x13e7fc, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x60cf00, 0x60, 0xcf000000, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x3, 0x0, 0x1, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x1, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x1000000, 0x21000000,
-0x12000140, 0x0, 0x0, 0x20000000, 0x120000a0, 0x0,
-0x12000060, 0x12000180, 0x120001e0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x30001, 0x1,
-0x30201, 0x0, 0x0 };
+0x10000003,
+0x0, 0xd, 0xd, 0x3c1d0001,
+0x8fbd5404, 0x3a0f021, 0x3c100000, 0x26104000,
+0xc00100c, 0x0, 0xd, 0x27bdffd8,
+0x3c1cc000, 0x3c1b0013, 0x377bd800, 0xd021,
+0x3c170013, 0x36f75418, 0x2e02021, 0x340583e8,
+0xafbf0024, 0xc00248c, 0xafb00020, 0xc0023ec,
+0x0, 0x3c040001, 0x24844970, 0x24050001,
+0x2e03021, 0x3821, 0x3c100001, 0x261075d0,
+0xafb00010, 0xc002407, 0xafbb0014, 0x3c02000f,
+0x3442ffff, 0x2021024, 0x362102b, 0x10400009,
+0x24050003, 0x3c040001, 0x2484497c, 0x2003021,
+0x3603821, 0x3c020010, 0xafa20010, 0xc002407,
+0xafa00014, 0x2021, 0x3405c000, 0x3c010001,
+0x370821, 0xa02083b0, 0x3c010001, 0x370821,
+0xa02083b2, 0x3c010001, 0x370821, 0xa02083b3,
+0x3c010001, 0x370821, 0xac2083b4, 0xa2e004d8,
+0x418c0, 0x24840001, 0x771021, 0xac40727c,
+0x771021, 0xac407280, 0x2e31021, 0xa445727c,
+0x2c820020, 0x1440fff7, 0x418c0, 0x2021,
+0x3405c000, 0x418c0, 0x24840001, 0x771021,
+0xac40737c, 0x771021, 0xac407380, 0x2e31021,
+0xa445737c, 0x2c820080, 0x5440fff7, 0x418c0,
+0xaf800054, 0xaf80011c, 0x8f820044, 0x34420040,
+0xaf820044, 0x8f820044, 0x34420020, 0xaf820044,
+0x8f420218, 0x30420002, 0x10400009, 0x0,
+0x8f420220, 0x3c030002, 0x34630004, 0x431025,
+0xaee204c4, 0x8f42021c, 0x8001074, 0x34420004,
+0x8f420220, 0x3c030002, 0x34630006, 0x431025,
+0xaee204c4, 0x8f42021c, 0x34420006, 0xaee204cc,
+0x8f420218, 0x30420010, 0x1040000a, 0x0,
+0x8f42021c, 0x34420004, 0xaee204c8, 0x8f420220,
+0x3c03000a, 0x34630004, 0x431025, 0x800108a,
+0xaee204c0, 0x8f420220, 0x3c03000a, 0x34630006,
+0x431025, 0xaee204c0, 0x8f42021c, 0x34420006,
+0xaee204c8, 0x8f420218, 0x30420200, 0x10400003,
+0x24020001, 0x8001091, 0xa2e27248, 0xa2e07248,
+0x24020001, 0xaf8200a0, 0xaf8200b0, 0x8f830054,
+0x8f820054, 0x8001099, 0x24630064, 0x8f820054,
+0x621023, 0x2c420065, 0x1440fffc, 0x0,
+0xaf800044, 0x8f420208, 0x8f43020c, 0xaee20010,
+0xaee30014, 0x8ee40010, 0x8ee50014, 0x26e20030,
+0xaee20028, 0x24020490, 0xaee20018, 0xaf840090,
+0xaf850094, 0x8ee20028, 0xaf8200b4, 0x96e2001a,
+0xaf82009c, 0x8f8200b0, 0x8ee304cc, 0x431025,
+0xaf8200b0, 0x8f8200b0, 0x30420004, 0x1440fffd,
+0x0, 0x8ee20450, 0x8ee30454, 0xaee304fc,
+0x8ee204fc, 0x2442e000, 0x2c422001, 0x1440000d,
+0x26e40030, 0x8ee20450, 0x8ee30454, 0x3c040001,
+0x24844988, 0x3c050001, 0xafa00010, 0xafa00014,
+0x8ee704fc, 0x34a5f000, 0xc002407, 0x603021,
+0x26e40030, 0xc00248c, 0x24050400, 0x27440080,
+0xc00248c, 0x24050080, 0x26e4777c, 0xc00248c,
+0x24050400, 0x8f42025c, 0x26e40094, 0xaee20060,
+0x8f420260, 0x27450200, 0x24060008, 0xaee20068,
+0x24020006, 0xc00249e, 0xaee20064, 0x3c023b9a,
+0x3442ca00, 0x2021, 0x24030002, 0xaee30074,
+0xaee30070, 0xaee2006c, 0x240203e8, 0xaee20104,
+0x24020001, 0xaee30100, 0xaee2010c, 0x3c030001,
+0x641821, 0x906353d0, 0x2e41021, 0x24840001,
+0xa043009c, 0x2c82000f, 0x1440fff8, 0x0,
+0x8f820040, 0x2e41821, 0x24840001, 0x21702,
+0x24420030, 0xa062009c, 0x2e41021, 0xa040009c,
+0x96e2046a, 0x30420003, 0x14400009, 0x0,
+0x96e2047a, 0x30420003, 0x50400131, 0x3c030800,
+0x96e2046a, 0x30420003, 0x1040002a, 0x3c020700,
+0x96e2047a, 0x30420003, 0x10400026, 0x3c020700,
+0x96e3047a, 0x96e2046a, 0x14620022, 0x3c020700,
+0x8ee204c0, 0x24030001, 0xa2e34e20, 0x34420e00,
+0xaee204c0, 0x8f420218, 0x30420100, 0x10400005,
+0x0, 0x3c020001, 0x2442e178, 0x800111d,
+0x21100, 0x3c020001, 0x2442d36c, 0x21100,
+0x21182, 0x3c030800, 0x431025, 0x3c010001,
+0xac221238, 0x3c020001, 0x2442f690, 0x21100,
+0x21182, 0x3c030800, 0x431025, 0x3c010001,
+0xac221278, 0x8ee20000, 0x34424000, 0x8001238,
+0xaee20000, 0x34423000, 0xafa20018, 0x8ee20608,
+0x8f430228, 0x24420001, 0x304900ff, 0x512300e2,
+0xafa00010, 0x8ee20608, 0x210c0, 0x571021,
+0x8fa30018, 0x8fa4001c, 0xac43060c, 0xac440610,
+0x8f870120, 0x27623800, 0x24e80020, 0x102102b,
+0x50400001, 0x27683000, 0x8f820128, 0x11020004,
+0x0, 0x8f820124, 0x15020007, 0x1021,
+0x8ee201a4, 0x3021, 0x24420001, 0xaee201a4,
+0x80011a0, 0x8ee201a4, 0x8ee40608, 0x420c0,
+0x801821, 0x8ee40430, 0x8ee50434, 0xa32821,
+0xa3302b, 0x822021, 0x862021, 0xace40000,
+0xace50004, 0x8ee30608, 0x24020008, 0xa4e2000e,
+0x2402000d, 0xace20018, 0xace9001c, 0x318c0,
+0x2463060c, 0x2e31021, 0xace20008, 0x8ee204c4,
+0xace20010, 0xaf880120, 0x92e24e20, 0x14400037,
+0x24060001, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x8c830000, 0x24020007, 0x1462001f,
+0x0, 0x8ee34e30, 0x8ee24e34, 0x1062001b,
+0x24030040, 0x8c820004, 0x24420001, 0xac820004,
+0x8ee24e34, 0x8ee54e30, 0x24420001, 0x10430007,
+0x0, 0x8ee24e34, 0x24420001, 0x10a20005,
+0x0, 0x800118a, 0x0, 0x14a00005,
+0x0, 0x8f820128, 0x24420020, 0xaf820128,
+0x8f820128, 0x8c820004, 0x2c420011, 0x50400013,
+0xac800000, 0x80011a0, 0x0, 0x8ee24e30,
+0x24030040, 0x24420001, 0x50430003, 0x1021,
+0x8ee24e30, 0x24420001, 0xaee24e30, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x24020007,
+0xac820000, 0x24020001, 0xac820004, 0x54c0000c,
+0xaee90608, 0x3c040001, 0x24844994, 0xafa00010,
+0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009,
+0xc002407, 0x34a5f000, 0x8001223, 0x0,
+0x8f830120, 0x27623800, 0x24660020, 0xc2102b,
+0x50400001, 0x27663000, 0x8f820128, 0x10c20004,
+0x0, 0x8f820124, 0x14c20007, 0x0,
+0x8ee201a4, 0x3021, 0x24420001, 0xaee201a4,
+0x8001207, 0x8ee201a4, 0x8ee20608, 0xac62001c,
+0x8ee404a0, 0x8ee504a4, 0x2462001c, 0xac620008,
+0x24020008, 0xa462000e, 0x24020011, 0xac620018,
+0xac640000, 0xac650004, 0x8ee204c4, 0xac620010,
+0xaf860120, 0x92e24e20, 0x14400037, 0x24060001,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x8c830000, 0x24020012, 0x1462001f, 0x0,
+0x8ee34e30, 0x8ee24e34, 0x1062001b, 0x24030040,
+0x8c820004, 0x24420001, 0xac820004, 0x8ee24e34,
+0x8ee54e30, 0x24420001, 0x10430007, 0x0,
+0x8ee24e34, 0x24420001, 0x10a20005, 0x0,
+0x80011f1, 0x0, 0x14a00005, 0x0,
+0x8f820128, 0x24420020, 0xaf820128, 0x8f820128,
+0x8c820004, 0x2c420011, 0x50400013, 0xac800000,
+0x8001207, 0x0, 0x8ee24e30, 0x24030040,
+0x24420001, 0x50430003, 0x1021, 0x8ee24e30,
+0x24420001, 0xaee24e30, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x24020012, 0xac820000,
+0x24020001, 0xac820004, 0x14c0001b, 0x0,
+0x3c040001, 0x2484499c, 0xafa00010, 0xafa00014,
+0x8ee60608, 0x8f470228, 0x3c050009, 0xc002407,
+0x34a5f001, 0x8ee201b0, 0x24420001, 0xaee201b0,
+0x8001223, 0x8ee201b0, 0x3c040001, 0x248449a8,
+0xafa00014, 0x8ee60608, 0x8f470228, 0x3c050009,
+0xc002407, 0x34a5f005, 0x8ee201ac, 0x24420001,
+0xaee201ac, 0x8ee201ac, 0x8ee20160, 0x3c040001,
+0x248449b4, 0x3405f001, 0x24420001, 0xaee20160,
+0x8ee20160, 0x3021, 0x3821, 0xafa00010,
+0xc002407, 0xafa00014, 0x8001238, 0x0,
+0x3c020001, 0x2442f5b8, 0x21100, 0x21182,
+0x431025, 0x3c010001, 0xac221278, 0x96e2045a,
+0x30420003, 0x10400025, 0x3c050fff, 0x8ee204c8,
+0x34a5ffff, 0x34420a00, 0xaee204c8, 0x8ee304c8,
+0x3c040001, 0x248449c0, 0x24020001, 0xa2e204ec,
+0xa2e204ed, 0x3c020002, 0x621825, 0x3c020001,
+0x2442a3a0, 0x451024, 0x21082, 0xaee304c8,
+0x3c030800, 0x431025, 0x3c010001, 0xac221220,
+0x3c020001, 0x2442ade4, 0x451024, 0x21082,
+0x431025, 0x3c010001, 0xac221280, 0x96e6045a,
+0x3821, 0x24050011, 0xafa00010, 0xc002407,
+0xafa00014, 0x8001268, 0x0, 0x3c020001,
+0x2442a9e4, 0x21100, 0x21182, 0x3c030800,
+0x431025, 0x3c010001, 0xac221280, 0x96e2046a,
+0x30420010, 0x14400009, 0x0, 0x96e2047a,
+0x30420010, 0x10400112, 0x0, 0x96e2046a,
+0x30420010, 0x10400005, 0x3c020700, 0x96e2047a,
+0x30420010, 0x14400102, 0x3c020700, 0x34423000,
+0xafa20018, 0x8ee20608, 0x8f430228, 0x24420001,
+0x304900ff, 0x512300e2, 0xafa00010, 0x8ee20608,
+0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c,
+0xac43060c, 0xac440610, 0x8f870120, 0x27623800,
+0x24e80020, 0x102102b, 0x50400001, 0x27683000,
+0x8f820128, 0x11020004, 0x0, 0x8f820124,
+0x15020007, 0x1021, 0x8ee201a4, 0x3021,
+0x24420001, 0xaee201a4, 0x80012ea, 0x8ee201a4,
+0x8ee40608, 0x420c0, 0x801821, 0x8ee40430,
+0x8ee50434, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xace40000, 0xace50004, 0x8ee30608,
+0x24020008, 0xa4e2000e, 0x2402000d, 0xace20018,
+0xace9001c, 0x318c0, 0x2463060c, 0x2e31021,
+0xace20008, 0x8ee204c4, 0xace20010, 0xaf880120,
+0x92e24e20, 0x14400037, 0x24060001, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x8c830000,
+0x24020007, 0x1462001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x24030040, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee54e30,
+0x24420001, 0x10430007, 0x0, 0x8ee24e34,
+0x24420001, 0x10a20005, 0x0, 0x80012d4,
+0x0, 0x14a00005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400013, 0xac800000, 0x80012ea,
+0x0, 0x8ee24e30, 0x24030040, 0x24420001,
+0x50430003, 0x1021, 0x8ee24e30, 0x24420001,
+0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x24020007, 0xac820000, 0x24020001,
+0xac820004, 0x54c0000c, 0xaee90608, 0x3c040001,
+0x24844994, 0xafa00010, 0xafa00014, 0x8ee60608,
+0x8f470228, 0x3c050009, 0xc002407, 0x34a5f000,
+0x800136d, 0x0, 0x8f830120, 0x27623800,
+0x24660020, 0xc2102b, 0x50400001, 0x27663000,
+0x8f820128, 0x10c20004, 0x0, 0x8f820124,
+0x14c20007, 0x0, 0x8ee201a4, 0x3021,
+0x24420001, 0xaee201a4, 0x8001351, 0x8ee201a4,
+0x8ee20608, 0xac62001c, 0x8ee404a0, 0x8ee504a4,
+0x2462001c, 0xac620008, 0x24020008, 0xa462000e,
+0x24020011, 0xac620018, 0xac640000, 0xac650004,
+0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20,
+0x14400037, 0x24060001, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x8c830000, 0x24020012,
+0x1462001f, 0x0, 0x8ee34e30, 0x8ee24e34,
+0x1062001b, 0x24030040, 0x8c820004, 0x24420001,
+0xac820004, 0x8ee24e34, 0x8ee54e30, 0x24420001,
+0x10430007, 0x0, 0x8ee24e34, 0x24420001,
+0x10a20005, 0x0, 0x800133b, 0x0,
+0x14a00005, 0x0, 0x8f820128, 0x24420020,
+0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
+0x50400013, 0xac800000, 0x8001351, 0x0,
+0x8ee24e30, 0x24030040, 0x24420001, 0x50430003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x24020012, 0xac820000, 0x24020001, 0xac820004,
+0x14c0001b, 0x0, 0x3c040001, 0x2484499c,
+0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228,
+0x3c050009, 0xc002407, 0x34a5f001, 0x8ee201b0,
+0x24420001, 0xaee201b0, 0x800136d, 0x8ee201b0,
+0x3c040001, 0x248449a8, 0xafa00014, 0x8ee60608,
+0x8f470228, 0x3c050009, 0xc002407, 0x34a5f005,
+0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac,
+0x8ee20160, 0x3c040001, 0x248449b4, 0x3405f002,
+0x24420001, 0xaee20160, 0x8ee20160, 0x3021,
+0x3821, 0xafa00010, 0xc002407, 0xafa00014,
+0x96e6047a, 0x96e7046a, 0x3c040001, 0x248449cc,
+0x24050012, 0xafa00010, 0xc002407, 0xafa00014,
+0xc004500, 0x0, 0xc002318, 0x0,
+0x3c060001, 0x34c63800, 0xaee00608, 0xaf400228,
+0xaf40022c, 0x96e30458, 0x8ee40000, 0x3c0512d8,
+0x34a5c358, 0x27623800, 0xaee27258, 0x27623800,
+0xaee27260, 0x27623800, 0xaee27264, 0x3661021,
+0xaee27270, 0x2402ffff, 0xaee004d4, 0xaee004e0,
+0xaee004e4, 0xaee004f0, 0xa2e004f4, 0xaee00e0c,
+0xaee00e18, 0xaee00e10, 0xaee00e14, 0xaee00e1c,
+0xaee0724c, 0xaee05244, 0xaee05240, 0xaee0523c,
+0xaee07250, 0xaee07254, 0xaee0725c, 0xaee07268,
+0xaee004d0, 0x2463ffff, 0x852025, 0xaee304f8,
+0xaee40000, 0xaf800060, 0xaf820064, 0x3c020100,
+0xafa20018, 0x8ee20608, 0x8f430228, 0x24420001,
+0x304900ff, 0x512300e2, 0xafa00010, 0x8ee20608,
+0x210c0, 0x571021, 0x8fa30018, 0x8fa4001c,
+0xac43060c, 0xac440610, 0x8f870120, 0x27623800,
+0x24e80020, 0x102102b, 0x50400001, 0x27683000,
+0x8f820128, 0x11020004, 0x0, 0x8f820124,
+0x15020007, 0x1021, 0x8ee201a4, 0x3021,
+0x24420001, 0xaee201a4, 0x8001422, 0x8ee201a4,
+0x8ee40608, 0x420c0, 0x801821, 0x8ee40430,
+0x8ee50434, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xace40000, 0xace50004, 0x8ee30608,
+0x24020008, 0xa4e2000e, 0x2402000d, 0xace20018,
+0xace9001c, 0x318c0, 0x2463060c, 0x2e31021,
+0xace20008, 0x8ee204c4, 0xace20010, 0xaf880120,
+0x92e24e20, 0x14400037, 0x24060001, 0x8ee24e30,
+0x210c0, 0x24425038, 0x2e22021, 0x8c830000,
+0x24020007, 0x1462001f, 0x0, 0x8ee34e30,
+0x8ee24e34, 0x1062001b, 0x24030040, 0x8c820004,
+0x24420001, 0xac820004, 0x8ee24e34, 0x8ee54e30,
+0x24420001, 0x10430007, 0x0, 0x8ee24e34,
+0x24420001, 0x10a20005, 0x0, 0x800140c,
+0x0, 0x14a00005, 0x0, 0x8f820128,
+0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
+0x2c420011, 0x50400013, 0xac800000, 0x8001422,
+0x0, 0x8ee24e30, 0x24030040, 0x24420001,
+0x50430003, 0x1021, 0x8ee24e30, 0x24420001,
+0xaee24e30, 0x8ee24e30, 0x210c0, 0x24425038,
+0x2e22021, 0x24020007, 0xac820000, 0x24020001,
+0xac820004, 0x54c0000c, 0xaee90608, 0x3c040001,
+0x24844994, 0xafa00010, 0xafa00014, 0x8ee60608,
+0x8f470228, 0x3c050009, 0xc002407, 0x34a5f000,
+0x80014a5, 0x0, 0x8f830120, 0x27623800,
+0x24660020, 0xc2102b, 0x50400001, 0x27663000,
+0x8f820128, 0x10c20004, 0x0, 0x8f820124,
+0x14c20007, 0x0, 0x8ee201a4, 0x3021,
+0x24420001, 0xaee201a4, 0x8001489, 0x8ee201a4,
+0x8ee20608, 0xac62001c, 0x8ee404a0, 0x8ee504a4,
+0x2462001c, 0xac620008, 0x24020008, 0xa462000e,
+0x24020011, 0xac620018, 0xac640000, 0xac650004,
+0x8ee204c4, 0xac620010, 0xaf860120, 0x92e24e20,
+0x14400037, 0x24060001, 0x8ee24e30, 0x210c0,
+0x24425038, 0x2e22021, 0x8c830000, 0x24020012,
+0x1462001f, 0x0, 0x8ee34e30, 0x8ee24e34,
+0x1062001b, 0x24030040, 0x8c820004, 0x24420001,
+0xac820004, 0x8ee24e34, 0x8ee54e30, 0x24420001,
+0x10430007, 0x0, 0x8ee24e34, 0x24420001,
+0x10a20005, 0x0, 0x8001473, 0x0,
+0x14a00005, 0x0, 0x8f820128, 0x24420020,
+0xaf820128, 0x8f820128, 0x8c820004, 0x2c420011,
+0x50400013, 0xac800000, 0x8001489, 0x0,
+0x8ee24e30, 0x24030040, 0x24420001, 0x50430003,
+0x1021, 0x8ee24e30, 0x24420001, 0xaee24e30,
+0x8ee24e30, 0x210c0, 0x24425038, 0x2e22021,
+0x24020012, 0xac820000, 0x24020001, 0xac820004,
+0x14c0001b, 0x0, 0x3c040001, 0x2484499c,
+0xafa00010, 0xafa00014, 0x8ee60608, 0x8f470228,
+0x3c050009, 0xc002407, 0x34a5f001, 0x8ee201b0,
+0x24420001, 0xaee201b0, 0x80014a5, 0x8ee201b0,
+0x3c040001, 0x248449a8, 0xafa00014, 0x8ee60608,
+0x8f470228, 0x3c050009, 0xc002407, 0x34a5f005,
+0x8ee201ac, 0x24420001, 0xaee201ac, 0x8ee201ac,
+0x8ee20154, 0x24420001, 0xaee20154, 0xc0014dc,
+0x8ee20154, 0x8f8200a0, 0x30420004, 0x1440fffd,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 19'
echo 'File patch-2.2.4 is continued in part 20'
echo 20 > _shar_seq_.tmp
#!/bin/sh
# this is part 24 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 24; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
-0x34423000, 0x34421000, 0xafa20020, 0x8ec3002c, 0x240200ff, 0x10620004,
-0x27a70020, 0x8ec2002c, 0x10000002, 0x24530001, 0x9821, 0x8f420228,
-0x1662000f, 0x0, 0x3c040001, 0x248427f8, 0xafa00010, 0xafa00014,
-0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f00f, 0x8ec202a0,
-0x24420001, 0xaec202a0, 0x1000006d, 0x8ec202a0, 0x8ec2002c, 0x210c0,
-0x571021, 0x8ce30000, 0x8ce40004, 0xac4304c0, 0xac4404c4, 0x8f830054,
-0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, 0x1040001e, 0xa821,
-0x241e000c, 0x8ec8002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008,
-0xafbe0010, 0xafb30014, 0x840c0, 0x1001821, 0x1021, 0x8ec80008,
-0xa32821, 0xa3482b, 0x822021, 0x892021, 0x630c0, 0xafa80018,
-0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, 0x54400006, 0x24150001,
-0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffe5, 0x0, 0x32a200ff,
-0x54400011, 0xaed3002c, 0x3c040001, 0x24842804, 0xafa00010, 0xafa00014,
-0x8f860120, 0x8f870124, 0x3c050009, 0x10000030, 0x34a5f010, 0x8ec2026c,
-0x24150001, 0x24420001, 0xaec2026c, 0x8ec2026c, 0x1000001f, 0x32a200ff,
-0x8f830054, 0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, 0x10400017,
-0xa821, 0x3c1e0020, 0x24130011, 0x8ec20008, 0x8ee40488, 0x8ee5048c,
-0x8ec3002c, 0x8f860120, 0xafb30010, 0x5e1025, 0xafa30014, 0xafa20018,
-0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe2, 0x0,
-0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffed, 0x0, 0x32a200ff,
-0x1440000f, 0x0, 0x3c040001, 0x24842810, 0xafa00010, 0xafa00014,
-0x8f860120, 0x8f870124, 0x3c050009, 0x34a5f011, 0xc00290f, 0x0,
-0x8ec202d0, 0x24420001, 0xaec202d0, 0x8ec202d0, 0x8ec20250, 0x24420001,
-0xaec20250, 0x8ec20250, 0x8ee204a8, 0x30420001, 0x10400055, 0x0,
-0x8f420218, 0x30420080, 0x10400027, 0x0, 0x8ec200b0, 0x3c040001,
-0x908434d0, 0x24080000, 0x2409ffff, 0x403821, 0x8ec201b8, 0x8ec301bc,
-0x3021, 0x34840020, 0x3c010001, 0xa02434d0, 0x481024, 0x1446000d,
-0x691824, 0x1467000b, 0x0, 0x8ec200b4, 0x403821, 0x8ec201d8,
-0x8ec301dc, 0x3021, 0x481024, 0x14460003, 0x691824, 0x10670009,
-0x308200bf, 0x8ec201b8, 0x8ec301bc, 0x3c040001, 0x908434d0, 0x8ec601d8,
-0x8ec701dc, 0x10000026, 0x38840040, 0x3c010001, 0x10000061, 0xa02234d0,
-0x8ec200b0, 0x3c040001, 0x908434d0, 0x24080000, 0x2409ffff, 0x403821,
-0x8ec201b8, 0x8ec301bc, 0x3021, 0x308400bf, 0x3c010001, 0xa02434d0,
-0x481024, 0x1446000d, 0x691824, 0x1467000b, 0x0, 0x8ec200b4,
-0x403821, 0x8ec201d8, 0x8ec301dc, 0x3021, 0x481024, 0x14460003,
-0x691824, 0x1067000d, 0x34820020, 0x8ec201b8, 0x8ec301bc, 0x3c040001,
-0x908434d0, 0x8ec601d8, 0x8ec701dc, 0x38840020, 0xaec300b0, 0xaec700b4,
-0x3c010001, 0x1000003a, 0xa02434d0, 0x3c010001, 0x10000037, 0xa02234d0,
-0x3c020001, 0x904234d0, 0x8ec300bc, 0x34440020, 0x24620001, 0x10000028,
-0x28630033, 0x8ec200cc, 0x8ec300c8, 0x24420001, 0xaec200cc, 0x43102a,
-0x14400006, 0x24030001, 0x8ec200d0, 0x14430002, 0xaec000cc, 0x24030004,
-0xaec300d0, 0x8ee204a8, 0x30420001, 0x10400012, 0x0, 0x8f420218,
-0x30420080, 0x10400008, 0x0, 0x3c020001, 0x904234d0, 0x34420040,
-0x304200df, 0x3c010001, 0x10000015, 0xa02234d0, 0x3c020001, 0x904234d0,
-0x34420060, 0x3c010001, 0x1000000f, 0xa02234d0, 0x3c020001, 0x904234d0,
-0x8ec300bc, 0x34440020, 0x24620001, 0x286300fb, 0x3c010001, 0xa02434d0,
-0x14600005, 0xaec200bc, 0x38820040, 0x3c010001, 0xa02234d0, 0xaec000bc,
-0x3c020001, 0x904234d0, 0x8ec300d0, 0x3044007f, 0x24020001, 0x3c010001,
-0xa02434d0, 0x54620003, 0x3484000f, 0x42102, 0x348400f0, 0xc004950,
-0x0, 0x2402ff7f, 0x282a024, 0x8fbf0038, 0x8fbe0034, 0x8fb50030,
-0x8fb3002c, 0x8fb10028, 0x3e00008, 0x27bd0040, 0x3e00008, 0x0,
-0x27bdffc0, 0xafbf0038, 0xafbe0034, 0xafb50030, 0xafb3002c, 0xafb10028,
-0x92c20528, 0x144001bc, 0x26c50128, 0x26e40028, 0x240300ff, 0x2406ffff,
-0x8ca20000, 0x24a50004, 0x2463ffff, 0xac820000, 0x1466fffb, 0x24840004,
-0x8f420080, 0xaee20044, 0x8f4200c0, 0xaee20040, 0x8f420084, 0xaee20030,
-0x8f420084, 0xaee2022c, 0x8f420088, 0xaee20230, 0x8f42008c, 0xaee20234,
-0x8f420090, 0xaee20238, 0x8f420094, 0xaee2023c, 0x8f420098, 0xaee20240,
-0x8f42009c, 0xaee20244, 0x8f4200a0, 0xaee20248, 0x8f4200a4, 0xaee2024c,
-0x8f4200a8, 0xaee20250, 0x8f4200ac, 0xaee20254, 0x8f4200b0, 0xaee20258,
-0x8f4200b4, 0xaee2025c, 0x8f4200b8, 0xaee20260, 0x8f4200bc, 0x24040001,
-0xaee20264, 0xaee00034, 0x41080, 0x571021, 0x8ee30034, 0x8c42022c,
-0x24840001, 0x621821, 0x2c82000f, 0xaee30034, 0x1440fff8, 0x41080,
-0x8f4200cc, 0xaee20048, 0x8f4200d0, 0xaee2004c, 0x8f4200e0, 0xaee201e8,
-0x8f4200e4, 0xaee201ec, 0x8f4200e8, 0xaee201f0, 0x8f4200ec, 0xaee201f4,
-0x8f4200f0, 0xaee201f8, 0x8f4200fc, 0x402821, 0x8ee200c0, 0x2021,
-0x82102b, 0x1440000a, 0x0, 0x8ee200c0, 0x14440011, 0x0,
-0x8ee200c4, 0xa2102b, 0x14400003, 0x0, 0x1000000b, 0x8ee200c4,
-0x8ee200c0, 0x8ee300c4, 0x24040001, 0x24050000, 0x651821, 0x65302b,
-0x441021, 0x461021, 0xaee200c0, 0xaee300c4, 0x8f4200fc, 0x8ee400c0,
-0x8ee500c4, 0x2406ffff, 0x24070000, 0x401821, 0x1021, 0x862024,
-0xa72824, 0x822025, 0xa32825, 0xaee400c0, 0xaee500c4, 0x8f4200f4,
-0x402821, 0x8ee200d0, 0x2021, 0x82102b, 0x1440000a, 0x0,
-0x8ee200d0, 0x14440011, 0x0, 0x8ee200d4, 0xa2102b, 0x14400003,
-0x0, 0x1000000b, 0x8ee200d4, 0x8ee200d0, 0x8ee300d4, 0x24040001,
-0x24050000, 0x651821, 0x65302b, 0x441021, 0x461021, 0xaee200d0,
-0xaee300d4, 0x8f4200f4, 0x8ee400d0, 0x8ee500d4, 0x2406ffff, 0x24070000,
-0x401821, 0x1021, 0x862024, 0xa72824, 0x822025, 0xa32825,
-0xaee400d0, 0xaee500d4, 0x8f4200f8, 0x402821, 0x8ee200c8, 0x2021,
-0x82102b, 0x1440000a, 0x0, 0x8ee200c8, 0x14440011, 0x0,
-0x8ee200cc, 0xa2102b, 0x14400003, 0x0, 0x1000000b, 0x8ee200cc,
-0x8ee200c8, 0x8ee300cc, 0x24040001, 0x24050000, 0x651821, 0x65302b,
-0x441021, 0x461021, 0xaee200c8, 0xaee300cc, 0x8f4200f8, 0x8ee400c8,
-0x8ee500cc, 0x2406ffff, 0x24070000, 0x401821, 0x1021, 0x862024,
-0xa72824, 0x822025, 0xa32825, 0xaee400c8, 0xaee500cc, 0x8f440208,
-0x8f45020c, 0x2402000f, 0xafa20010, 0xafa00014, 0x8ec20008, 0xafa20018,
-0x8ec200a8, 0x26e60028, 0x40f809, 0x24070400, 0x104000f1, 0x3c020400,
-0xafa20020, 0x92c20115, 0x10400080, 0x240200ff, 0x8ec3002c, 0x10620004,
-0x27a70020, 0x8ec2002c, 0x10000002, 0x24530001, 0x9821, 0x8f420228,
-0x1662000a, 0x0, 0x3c040001, 0x248427f8, 0xafa00010, 0xafa00014,
-0x8ec6002c, 0x8f470228, 0x3c050009, 0x1000007f, 0x34a5f00f, 0x8ec2002c,
-0x210c0, 0x571021, 0x8ce30000, 0x8ce40004, 0xac4304c0, 0xac4404c4,
-0x8f830054, 0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, 0x1040001e,
-0xa821, 0x241e000d, 0x8ec8002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c,
-0x24070008, 0xafbe0010, 0xafb30014, 0x840c0, 0x1001821, 0x1021,
-0x8ec80008, 0xa32821, 0xa3482b, 0x822021, 0x892021, 0x630c0,
-0xafa80018, 0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, 0x54400006,
-0x24150001, 0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffe5, 0x0,
-0x32a200ff, 0x54400018, 0xaed3002c, 0x3c040001, 0x24842804, 0xafa00010,
-0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0x34a5f010, 0xc00290f,
-0x0, 0x8ec202d0, 0x1821, 0x24420001, 0xaec202d0, 0x1000008f,
-0x8ec202d0, 0x8ec2026c, 0x24150001, 0x24420001, 0xaec2026c, 0x8ec2026c,
-0x1000001d, 0x32a200ff, 0x8f830054, 0x8f820054, 0x247103e8, 0x2221023,
-0x2c4203e9, 0x10400015, 0xa821, 0x24130011, 0x8ec30008, 0x8ee40488,
-0x8ee5048c, 0x8ec2002c, 0x8f860120, 0xafb30010, 0xafa20014, 0xafa30018,
-0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe4, 0x0,
-0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffee, 0x0, 0x32a200ff,
-0x1440006a, 0x24030001, 0x3c040001, 0x24842810, 0xafa00010, 0xafa00014,
-0x8f860120, 0x8f870124, 0x3c050009, 0x1000ffcb, 0x34a5f011, 0x8ec3002c,
-0x10620004, 0x27a70020, 0x8ec2002c, 0x10000002, 0x24510001, 0x8821,
-0x8f420228, 0x16220011, 0x4021, 0x3c040001, 0x248427d8, 0xafa00010,
-0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0x34a5f005, 0xc00290f,
-0x0, 0x8ec202a0, 0x1821, 0x24420001, 0xaec202a0, 0x10000047,
-0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000, 0x8ce40004,
-0xac4304c0, 0xac4404c4, 0x8ec3002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c,
-0x24070008, 0x2402000d, 0xafa20010, 0xafb10014, 0x8ec20008, 0x318c0,
-0x604821, 0xa92821, 0xa9182b, 0x882021, 0x832021, 0x630c0,
-0xafa20018, 0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, 0x5440000c,
-0xaed1002c, 0x3c040001, 0x248427e4, 0xafa00010, 0xafa00014, 0x8ec6002c,
-0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f000, 0x1000001e, 0x1821,
-0x8ee40488, 0x8ee5048c, 0x8ec3002c, 0x8ec80008, 0x8f860120, 0x24020011,
-0xafa20010, 0xafa30014, 0xafa80018, 0x8ec200a8, 0x24070008, 0x40f809,
-0x24c6001c, 0x1440000f, 0x24030001, 0x3c040001, 0x248427ec, 0xafa00010,
-0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f001,
-0x8ec202a4, 0x1821, 0x24420001, 0xaec202a4, 0x8ec202a4, 0x1060000d,
-0x24020001, 0x8ec2024c, 0xa2c00115, 0xaec000a0, 0x24420001, 0xaec2024c,
-0x8ec2024c, 0x8ee2014c, 0x24420001, 0xaee2014c, 0x10000003, 0x8ee2014c,
-0x24020001, 0xa2c20115, 0x8fbf0038, 0x8fbe0034, 0x8fb50030, 0x8fb3002c,
-0x8fb10028, 0x3e00008, 0x27bd0040, 0x27bdffd8, 0xafbf0020, 0x8f8200b0,
-0x30420004, 0x1040005e, 0x0, 0x8ec30104, 0x8f820104, 0x14620005,
-0x0, 0x8ec3010c, 0x8f8200b4, 0x10620006, 0x0, 0x8f820104,
-0xaec20104, 0x8f8200b4, 0x10000051, 0xaec2010c, 0x8f8200b0, 0x3c030080,
-0x431024, 0x1040000d, 0x0, 0x8f82011c, 0x34420002, 0xaf82011c,
-0x8f8200b0, 0x2403fffb, 0x431024, 0xaf8200b0, 0x8f82011c, 0x2403fffd,
-0x431024, 0x10000040, 0xaf82011c, 0x8ec30104, 0x8f820104, 0x14620005,
-0x0, 0x8ec3010c, 0x8f8200b4, 0x5062000a, 0x3c050005, 0x8f820104,
-0xaec20104, 0x8f8200b4, 0xaec2010c, 0x8ec2010c, 0x3c040001, 0x2484281c,
-0x10000029, 0xafa00014, 0x8ec2010c, 0x3c040001, 0x24842828, 0xafa00014,
-0xafa20010, 0x8f8600b0, 0x8ec70104, 0xc00290f, 0x34a50900, 0x8f82011c,
-0x34420002, 0xaf82011c, 0x8f830104, 0x8f8200b0, 0x34420001, 0xaf8200b0,
-0xaf830104, 0x8f440208, 0x8f45020c, 0x2402000f, 0xafa20010, 0xafa00014,
-0x8ec20008, 0xafa20018, 0x8ec200a8, 0x26e60028, 0x40f809, 0x24070400,
-0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201cc, 0x24420001,
-0xaee201cc, 0x8ee201cc, 0x8ec2010c, 0x3c040001, 0x24842834, 0xafa00014,
-0xafa20010, 0x8f8600b0, 0x8ec70104, 0x3c050005, 0xc00290f, 0x34a50900,
-0x8f8200a0, 0x30420004, 0x1040005f, 0x0, 0x8ec30108, 0x8f820124,
-0x14620005, 0x0, 0x8ec30110, 0x8f8200a4, 0x10620006, 0x0,
-0x8f820124, 0xaec20108, 0x8f8200a4, 0x10000052, 0xaec20110, 0x8f8200a0,
-0x3c030080, 0x431024, 0x1040000d, 0x0, 0x8f82011c, 0x34420002,
-0xaf82011c, 0x8f8200a0, 0x2403fffb, 0x431024, 0xaf8200a0, 0x8f82011c,
-0x2403fffd, 0x431024, 0x10000041, 0xaf82011c, 0x8ec30108, 0x8f820124,
-0x14620005, 0x0, 0x8ec30110, 0x8f8200a4, 0x5062000a, 0x3c050005,
-0x8f820124, 0xaec20108, 0x8f8200a4, 0xaec20110, 0x8ec20110, 0x3c040001,
-0x24842840, 0x1000002a, 0xafa00014, 0x8ec20110, 0x3c040001, 0x2484284c,
-0xafa00014, 0xafa20010, 0x8f8600a0, 0x8ec70108, 0xc00290f, 0x34a50900,
-0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830124, 0x8f8200a0, 0x34420001,
-0xaf8200a0, 0xaf830124, 0x8f440208, 0x8f45020c, 0x24020010, 0xafa20010,
-0xafa00014, 0x8ec20010, 0xafa20018, 0x8ec200a4, 0x3c060001, 0x24c634e4,
-0x40f809, 0x24070004, 0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c,
-0x8ee201cc, 0x24420001, 0xaee201cc, 0x8ee201cc, 0x8ec20110, 0x3c040001,
-0x24842858, 0xafa00014, 0xafa20010, 0x8f8600a0, 0x8ec70108, 0x3c050005,
-0xc00290f, 0x34a50900, 0x8fbf0020, 0x3e00008, 0x27bd0028, 0x3c091000,
-0x24080001, 0x3c070080, 0x3c050100, 0x3c062000, 0x8f820070, 0x491024,
-0x1040fffd, 0x0, 0x8f820054, 0x24420005, 0xaf820078, 0x8f420234,
-0x10400017, 0x2021, 0x3c020001, 0x571021, 0x8c4281dc, 0x24420005,
-0x3c010001, 0x370821, 0xac2281dc, 0x3c020001, 0x571021, 0x8c4281dc,
-0x8f430234, 0x43102b, 0x14400009, 0x0, 0x3c040080, 0x3c010001,
-0x370821, 0xac2881d4, 0x3c010001, 0x370821, 0x1000000b, 0xac2081dc,
-0x3c020001, 0x571021, 0x8c4281d4, 0x54400006, 0x872025, 0x3c020001,
-0x571021, 0x8c4281d8, 0x54400001, 0x872025, 0x8f420230, 0x10400014,
-0x0, 0x3c020001, 0x571021, 0x8c4281e4, 0x24420005, 0x3c010001,
-0x370821, 0xac2281e4, 0x3c020001, 0x571021, 0x8c4281e4, 0x8f430230,
-0x43102b, 0x14400006, 0x0, 0x3c010001, 0x370821, 0xac2081e4,
-0x10000006, 0x852025, 0x3c020001, 0x571021, 0x8c4281e0, 0x54400001,
-0x852025, 0x3c020001, 0x571021, 0x8c4281e8, 0x10400005, 0x0,
-0x862025, 0x3c010001, 0x370821, 0xac2081e8, 0x1080ffb1, 0x0,
-0x8ec20000, 0x10400007, 0x0, 0xaf80004c, 0x8f82004c, 0x1040fffd,
-0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048, 0x1040fffd,
-0x0, 0x8f820060, 0x441025, 0xaf820060, 0x8ec20000, 0x10400003,
-0x0, 0x1000ff9c, 0xaf80004c, 0x1000ff9a, 0xaf800048, 0x3e00008,
-0x0, 0x0, 0x0, 0x0, 0x27bdffe0, 0xafbf0018,
-0x8f860064, 0x30c20004, 0x1040001e, 0x24020004, 0xaf820064, 0x8f420114,
-0x8ec30000, 0x10600007, 0xaec20014, 0xaf80004c, 0x8f82004c, 0x1040fffd,
-0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048, 0x1040fffd,
-0x0, 0x8f820060, 0x34420008, 0xaf820060, 0x8ec20000, 0x10400003,
-0x0, 0x10000002, 0xaf80004c, 0xaf800048, 0x8ec20260, 0x24420001,
-0xaec20260, 0x1000006f, 0x8ec20260, 0x30c20001, 0x10400004, 0x24020001,
-0xaf820064, 0x10000069, 0x0, 0x30c20002, 0x1440000b, 0x3c050003,
-0x3c040001, 0x24842930, 0x34a50001, 0x3821, 0xafa00010, 0xc00290f,
-0xafa00014, 0x2402fff8, 0x1000005c, 0xaf820064, 0x8f43022c, 0x8f42010c,
-0x1062004c, 0x0, 0x8f42022c, 0x21080, 0x5a1021, 0x8c440300,
-0x8f42022c, 0x24420001, 0x3042003f, 0x41e02, 0xaf42022c, 0x24020003,
-0x10620005, 0x24020010, 0x1062001f, 0x30830fff, 0x1000003a, 0x0,
-0x8ec30000, 0x30820fff, 0x10600007, 0xaec20038, 0xaf80004c, 0x8f82004c,
-0x1040fffd, 0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048,
-0x1040fffd, 0x0, 0x8f820060, 0x34420200, 0xaf820060, 0x8ec20000,
-0x10400003, 0x0, 0x10000002, 0xaf80004c, 0xaf800048, 0x8ec20210,
-0x24420001, 0xaec20210, 0x10000020, 0x8ec20210, 0x8ec20000, 0xaec30054,
-0x24030001, 0x10400007, 0xa2c30065, 0xaf80004c, 0x8f82004c, 0x1040fffd,
-0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048, 0x1040fffd,
-0x0, 0x8f820060, 0x34420100, 0xaf820060, 0x8ec20000, 0x10400003,
-0x0, 0x10000002, 0xaf80004c, 0xaf800048, 0x8ec2023c, 0x24420001,
-0xaec2023c, 0x10000003, 0x8ec2023c, 0xc001fd6, 0x0, 0x8f43022c,
-0x8f42010c, 0x14620002, 0x24020002, 0xaf820064, 0x8f820064, 0x14400005,
-0x0, 0x8f43022c, 0x8f42010c, 0x1462ffa6, 0x0, 0x8fbf0018,
-0x3e00008, 0x27bd0020, 0x3e00008, 0x0, 0x27bdffc0, 0xafb10028,
-0x808821, 0x111602, 0x2442ffff, 0x304300ff, 0x2c620011, 0xafbf0038,
-0xafbe0034, 0xafb50030, 0x104001ab, 0xafb3002c, 0x31080, 0x3c010001,
-0x220821, 0x8c222978, 0x400008, 0x0, 0x111302, 0x30440fff,
-0x24020001, 0x10820006, 0x3c030800, 0x24020002, 0x1082000c, 0x3c050003,
-0x10000022, 0x0, 0x3c020001, 0x8c423514, 0x21100, 0x21182,
-0x431025, 0xae420038, 0x8ee204a8, 0x1000000a, 0x34420001, 0x3c020001,
-0x2442c4d0, 0x21100, 0x21182, 0x431025, 0xae420038, 0x8ee204a8,
-0x2403fffe, 0x431024, 0xaee204a8, 0xaec40168, 0xaec4016c, 0x8f840054,
-0x41442, 0x41c82, 0x431021, 0x41cc2, 0x431023, 0x41d02,
-0x431021, 0x41d42, 0x431023, 0x10000009, 0xaec20170, 0x3c040001,
-0x2484293c, 0x34a50004, 0x2203021, 0x3821, 0xafa00010, 0xc00290f,
-0xafa00014, 0x8ec20208, 0x24420001, 0xaec20208, 0x100001e1, 0x8ec20208,
-0xc0022fe, 0x0, 0x100001dd, 0x0, 0xc002419, 0x0,
-0x100001d9, 0x0, 0x111302, 0x30430fff, 0x24020001, 0x10620005,
-0x24020002, 0x10620016, 0x3c050003, 0x10000021, 0x0, 0x92c2011c,
-0x1440000f, 0x24020001, 0x8f820228, 0xaee204ac, 0x8f82022c, 0xaee204b0,
-0x8f820230, 0xaee204b4, 0x8f820234, 0xaee204b8, 0x2402ffff, 0xaf820228,
-0xaf82022c, 0xaf820230, 0xaf820234, 0x24020001, 0x10000016, 0xa2c2011c,
-0x92c2011c, 0x50400013, 0xa2c0011c, 0x8ee204ac, 0xaf820228, 0x8ee204b0,
-0xaf82022c, 0x8ee204b4, 0xaf820230, 0x8ee204b8, 0xaf820234, 0x10000009,
-0xa2c0011c, 0x3c040001, 0x24842948, 0x34a5f009, 0x2203021, 0x3821,
-0xafa00010, 0xc00290f, 0xafa00014, 0x8ec20234, 0x24420001, 0xaec20234,
-0x100001a3, 0x8ec20234, 0x111302, 0x30440fff, 0x24020001, 0x10820005,
-0x24020002, 0x1082000d, 0x3c050003, 0x10000013, 0x0, 0x8f820220,
-0x3c0308ff, 0x3463ffff, 0x431024, 0x34420008, 0xaf820220, 0x24020001,
-0xa2c2011d, 0x10000011, 0xaec40200, 0x8f820220, 0x3c0308ff, 0x3463fff7,
-0x431024, 0xaf820220, 0xa2c0011d, 0x10000009, 0xaec40200, 0x3c040001,
-0x24842954, 0x34a5f00a, 0x2203021, 0x3821, 0xafa00010, 0xc00290f,
-0xafa00014, 0x8ec20224, 0x24420001, 0xaec20224, 0x1000017b, 0x8ec20224,
-0x27840208, 0x27450200, 0xc0029a2, 0x24060008, 0x26c4018c, 0x27450200,
-0xc0029a2, 0x24060008, 0x8ec2022c, 0x24420001, 0xaec2022c, 0x1000016e,
-0x8ec2022c, 0x111302, 0x30430fff, 0x24020001, 0x10620011, 0x28620002,
-0x50400005, 0x24020002, 0x10600007, 0x0, 0x10000017, 0x0,
-0x1062000f, 0x0, 0x10000013, 0x0, 0x8f460248, 0x24040001,
-0xc0046cc, 0x24050004, 0x10000007, 0x0, 0x8f460248, 0x24040001,
-0xc0046cc, 0x24050004, 0x10000010, 0x0, 0x8f46024c, 0x24040001,
-0xc0046cc, 0x24050001, 0x1000000a, 0x0, 0x3c040001, 0x24842960,
-0x3c050003, 0x34a50005, 0x2203021, 0x3821, 0xafa00010, 0xc00290f,
-0xafa00014, 0x8ec20228, 0x24420001, 0xaec20228, 0x1000013f, 0x8ec20228,
-0xc002221, 0x0, 0x1000013b, 0x0, 0x24020001, 0xa2c20528,
-0x24110014, 0x8ee404a0, 0x8ee504a4, 0xafb10010, 0xafa00014, 0x8ec20010,
-0xafa20018, 0x8ec200a4, 0x26e60028, 0x40f809, 0x24070400, 0x1040fff5,
-0x0, 0x1000012a, 0x0, 0x3c020900, 0xaec00054, 0xaec00058,
-0xaec0005c, 0xaec00060, 0xaec002c0, 0xa2c00065, 0xafa20020, 0x8ec3002c,
-0x240200ff, 0x10620004, 0x27a70020, 0x8ec2002c, 0x10000002, 0x24530001,
-0x9821, 0x8f420228, 0x1662000f, 0x0, 0x3c040001, 0x2484290c,
-0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f,
-0x34a5f00f, 0x8ec202a0, 0x24420001, 0xaec202a0, 0x1000006b, 0x8ec202a0,
-0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000, 0x8ce40004, 0xac4304c0,
-0xac4404c4, 0x8f830054, 0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9,
-0x1040001e, 0xa821, 0x241e000d, 0x8ec8002c, 0x8ee40428, 0x8ee5042c,
-0x8ec6002c, 0x24070008, 0xafbe0010, 0xafb30014, 0x840c0, 0x1001821,
-0x1021, 0x8ec80008, 0xa32821, 0xa3482b, 0x822021, 0x892021,
-0x630c0, 0xafa80018, 0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021,
-0x54400006, 0x24150001, 0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffe5,
-0x0, 0x32a200ff, 0x54400011, 0xaed3002c, 0x3c040001, 0x24842918,
-0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0x1000002e,
-0x34a5f010, 0x8ec2026c, 0x24150001, 0x24420001, 0xaec2026c, 0x8ec2026c,
-0x1000001d, 0x32a200ff, 0x8f830054, 0x8f820054, 0x247103e8, 0x2221023,
-0x2c4203e9, 0x10400015, 0xa821, 0x24130011, 0x8ec30008, 0x8ee40488,
-0x8ee5048c, 0x8ec2002c, 0x8f860120, 0xafb30010, 0xafa20014, 0xafa30018,
-0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe4, 0x0,
-0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffee, 0x0, 0x32a200ff,
-0x1440000f, 0x0, 0x3c040001, 0x24842924, 0xafa00010, 0xafa00014,
-0x8f860120, 0x8f870124, 0x3c050009, 0x34a5f011, 0xc00290f, 0x0,
-0x8ec202d0, 0x24420001, 0xaec202d0, 0x8ec202d0, 0x8ec20218, 0x24420001,
-0xaec20218, 0x8ec20218, 0x8ec2025c, 0x24420001, 0xaec2025c, 0x10000096,
-0x8ec2025c, 0x8f42025c, 0x26c4018c, 0xaec20158, 0x8f420260, 0x27450200,
-0x24060008, 0xc0029a2, 0xaec20160, 0x8f820220, 0x30420008, 0x14400002,
-0x24020001, 0x24020002, 0xaec20200, 0x8ec20214, 0x24420001, 0xaec20214,
-0x10000083, 0x8ec20214, 0x3c0200ff, 0x96e30462, 0x3442ffff, 0x2222024,
-0x3402fffb, 0x44102b, 0x38420001, 0x30630003, 0x2c630001, 0x621824,
-0x10600003, 0x0, 0x10000075, 0xaec40050, 0x3c040001, 0x2484296c,
-0x3c050003, 0x34a5f00f, 0x2203021, 0x3821, 0xafa00010, 0xc00290f,
-0xafa00014, 0x3c030700, 0x34631000, 0x111602, 0x431025, 0xafa20020,
-0x8ec3002c, 0x240200ff, 0x10620004, 0x27a70020, 0x8ec2002c, 0x10000002,
-0x24510001, 0x8821, 0x8f420228, 0x1622000f, 0x4021, 0x3c040001,
-0x248428ec, 0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009,
-0xc00290f, 0x34a5f005, 0x8ec202a0, 0x24420001, 0xaec202a0, 0x10000046,
-0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000, 0x8ce40004,
-0xac4304c0, 0xac4404c4, 0x8ec3002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c,
-0x24070008, 0x2402000d, 0xafa20010, 0xafb10014, 0x8ec20008, 0x318c0,
-0x604821, 0xa92821, 0xa9182b, 0x882021, 0x832021, 0x630c0,
-0xafa20018, 0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, 0x5440000c,
-0xaed1002c, 0x3c040001, 0x248428f8, 0xafa00010, 0xafa00014, 0x8ec6002c,
-0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f000, 0x1000001d, 0x0,
-0x8ee40488, 0x8ee5048c, 0x8ec3002c, 0x8ec80008, 0x8f860120, 0x24020011,
-0xafa20010, 0xafa30014, 0xafa80018, 0x8ec200a8, 0x24070008, 0x40f809,
-0x24c6001c, 0x1440000e, 0x0, 0x3c040001, 0x24842900, 0xafa00010,
-0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f001,
-0x8ec202a4, 0x24420001, 0xaec202a4, 0x8ec202a4, 0x8ec20244, 0x24420001,
-0xaec20244, 0x8ec20244, 0x8ec20254, 0x24420001, 0xaec20254, 0x8ec20254,
-0x8fbf0038, 0x8fbe0034, 0x8fb50030, 0x8fb3002c, 0x8fb10028, 0x3e00008,
-0x27bd0040, 0x27bdfff8, 0x2408ffff, 0x10a00014, 0x4821, 0x3c0aedb8,
-0x354a8320, 0x90870000, 0x24840001, 0x3021, 0x1071026, 0x30420001,
-0x10400002, 0x81842, 0x6a1826, 0x604021, 0x24c60001, 0x2cc20008,
-0x1440fff7, 0x73842, 0x25290001, 0x125102b, 0x1440fff0, 0x0,
-0x1001021, 0x3e00008, 0x27bd0008, 0x27bdffb8, 0xafbf0040, 0xafbe003c,
-0xafb50038, 0xafb30034, 0xafb10030, 0x8f870220, 0xafa70024, 0x8f870200,
-0xafa7002c, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, 0x34420004,
-0xaf820220, 0x8f820200, 0x3c03c0ff, 0x3463ffff, 0x431024, 0x34420004,
-0xaf820200, 0x8ede02bc, 0x8ec702c0, 0xafa70014, 0x8ec702c4, 0xafa7001c,
-0x8ec20238, 0x26c40128, 0x24420001, 0xaec20238, 0x8ed10238, 0x8ed3016c,
-0x8ed50168, 0xc002990, 0x24050400, 0xaede02bc, 0x8fa70014, 0xaec702c0,
-0x8fa7001c, 0xaec702c4, 0xaed10238, 0xaed3016c, 0xaed50168, 0x8f42025c,
-0x26c4018c, 0xaec20158, 0x8f420260, 0x27450200, 0x24060008, 0xaec20160,
-0x24020006, 0xc0029a2, 0xaec2015c, 0x3c023b9a, 0x3442ca00, 0xaec20164,
-0x240203e8, 0x24040002, 0x24030001, 0xaec201fc, 0xaec401f8, 0xaec30204,
-0x8f820220, 0x30420008, 0x10400004, 0x0, 0xaec30200, 0x10000003,
-0x3021, 0xaec40200, 0x3021, 0x3c030001, 0x661821, 0x90633360,
-0x2c61021, 0x24c60001, 0xa0430194, 0x2cc2000f, 0x1440fff8, 0x2c61821,
-0x24c60001, 0x8f820040, 0x27440080, 0x24050080, 0x21702, 0x24420030,
-0xa0620194, 0x2c61021, 0xc002990, 0xa0400194, 0x8fa70024, 0x30e20004,
-0x14400006, 0x0, 0x8f820220, 0x3c0308ff, 0x3463fffb, 0x431024,
-0xaf820220, 0x8fa7002c, 0x30e20004, 0x14400006, 0x0, 0x8f820200,
-0x3c03c0ff, 0x3463fffb, 0x431024, 0xaf820200, 0x8fbf0040, 0x8fbe003c,
-0x8fb50038, 0x8fb30034, 0x8fb10030, 0x3e00008, 0x27bd0048, 0x0,
-0x0, 0x0, 0x24040001, 0xa2c0011d, 0xa2c0011c, 0xaec00120,
-0x410c0, 0x2e21821, 0x24820001, 0xa46275c0, 0x402021, 0x2c820080,
-0x1440fffa, 0x410c0, 0x24020001, 0xa6e079c0, 0xaec20124, 0xaf800228,
-0xaf80022c, 0xaf800230, 0xaf800234, 0x3e00008, 0x0, 0x27bdffe0,
-0xafbf001c, 0xafb10018, 0x8ec20120, 0x28420005, 0x10400021, 0x808821,
-0x8ec20120, 0x3021, 0x18400015, 0x26e371c0, 0x96270000, 0x24640006,
-0x9482fffc, 0x14470009, 0x2821, 0x9483fffe, 0x96220002, 0x14620006,
-0xa01021, 0x94820000, 0x96230004, 0x431026, 0x2c450001, 0xa01021,
-0x1440000b, 0x24c60001, 0x8ec20120, 0xc2102a, 0x1440ffef, 0x24840008,
-0x1021, 0x304200ff, 0x14400029, 0x24020001, 0x10000027, 0x1021,
-0x1000fffa, 0x24020001, 0x2202021, 0xc002207, 0x24050006, 0x3042007f,
-0x218c0, 0x2e31021, 0x944271c0, 0x1040fff4, 0x2e31021, 0x944671c0,
-0x10c00019, 0x1021, 0x96270000, 0x610c0, 0x572021, 0x248475c2,
-0x94820000, 0x14470009, 0x2821, 0x94830002, 0x96220002, 0x14620006,
-0xa01021, 0x94820004, 0x96230004, 0x431026, 0x2c450001, 0xa01021,
-0x14400005, 0x610c0, 0x2e21021, 0x944675c0, 0x14c0ffed, 0x610c0,
-0x10c0ffd9, 0x24020001, 0x8fbf001c, 0x8fb10018, 0x3e00008, 0x27bd0020,
-0x3e00008, 0x0, 0x27bdffc0, 0x27440212, 0x24050006, 0xafbf0038,
-0xafbe0034, 0xafb50030, 0xafb3002c, 0xc002207, 0xafb10028, 0x3048007f,
-0x810c0, 0x2e21021, 0x944571c0, 0x10a00017, 0x27470212, 0x94e90000,
-0x510c0, 0x572021, 0x248475c2, 0x94820000, 0x14490009, 0x3021,
-0x94830002, 0x94e20002, 0x14620006, 0xc01021, 0x94820004, 0x94e30004,
-0x431026, 0x2c460001, 0xc01021, 0x14400005, 0x510c0, 0x2e21021,
-0x944575c0, 0x14a0ffed, 0x510c0, 0xa03021, 0x10c00010, 0x610c0,
-0x571821, 0x8c6375c0, 0x571021, 0xafa30010, 0x8c4275c4, 0x3c040001,
-0x24842a7c, 0xafa20014, 0x8f460210, 0x8f470214, 0x3c050003, 0xc00290f,
-0x34a5f012, 0x10000051, 0x3c020800, 0x8ec50124, 0x10a00004, 0x510c0,
-0x2e21021, 0x944275c0, 0xaec20124, 0xa03021, 0x14c0000f, 0x27440212,
-0x810c0, 0x2e21021, 0xafa80010, 0x944271c0, 0x3c040001, 0x24842a88,
-0xafa20014, 0x8f460210, 0x8f470214, 0x3c050003, 0xc00290f, 0x34a5f013,
-0x1000003a, 0x3c020800, 0x628c0, 0x94830000, 0xb71021, 0x244275c2,
-0xa4430000, 0x8c830002, 0x820c0, 0xac430002, 0x2e41021, 0x944371c0,
-0x2e51021, 0xa44375c0, 0x2e41021, 0xa44671c0, 0x8ec20120, 0x24420001,
-0x28420080, 0x1040000c, 0x27440212, 0x8ec20120, 0x94830000, 0x210c0,
-0x571021, 0x244271c2, 0xa4430000, 0x8c830002, 0xac430002, 0x8ec20120,
-0x24420001, 0xaec20120, 0x92c2011c, 0x1040000d, 0x81942, 0x24020003,
-0x431023, 0x21080, 0x572821, 0x571021, 0x3104001f, 0x8c4304ac,
-0x24020001, 0x821004, 0x621825, 0x1000000c, 0xaca304ac, 0x24020003,
-0x431023, 0x21080, 0x5c2821, 0x5c1021, 0x3104001f, 0x8c430228,
-0x24020001, 0x821004, 0x621825, 0xaca30228, 0x3c020800, 0x34421000,
-0xafa20020, 0x8ec3002c, 0x240200ff, 0x10620004, 0x27a70020, 0x8ec2002c,
-0x10000002, 0x24530001, 0x9821, 0x8f420228, 0x1662000f, 0x0,
-0x3c040001, 0x24842a58, 0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228,
-0x3c050009, 0xc00290f, 0x34a5f00f, 0x8ec202a0, 0x24420001, 0xaec202a0,
-0x1000006b, 0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000,
-0x8ce40004, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, 0x247103e8,
-0x2221023, 0x2c4203e9, 0x1040001e, 0xa821, 0x241e000d, 0x8ec8002c,
-0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008, 0xafbe0010, 0xafb30014,
-0x840c0, 0x1001821, 0x1021, 0x8ec80008, 0xa32821, 0xa3482b,
-0x822021, 0x892021, 0x630c0, 0xafa80018, 0x8ec200a8, 0x24c604c0,
-0x40f809, 0x2e63021, 0x54400006, 0x24150001, 0x8f820054, 0x2221023,
-0x2c4203e9, 0x1440ffe5, 0x0, 0x32a200ff, 0x54400011, 0xaed3002c,
-0x3c040001, 0x24842a64, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124,
-0x3c050009, 0x1000002e, 0x34a5f010, 0x8ec2026c, 0x24150001, 0x24420001,
-0xaec2026c, 0x8ec2026c, 0x1000001d, 0x32a200ff, 0x8f830054, 0x8f820054,
-0x247103e8, 0x2221023, 0x2c4203e9, 0x10400015, 0xa821, 0x24130011,
-0x8ec30008, 0x8ee40488, 0x8ee5048c, 0x8ec2002c, 0x8f860120, 0xafb30010,
-0xafa20014, 0xafa30018, 0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c,
-0x1440ffe4, 0x0, 0x8f820054, 0x2221023, 0x2c4203e9, 0x1440ffee,
-0x0, 0x32a200ff, 0x1440000f, 0x0, 0x3c040001, 0x24842a70,
-0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009, 0x34a5f011,
-0xc00290f, 0x0, 0x8ec202d0, 0x24420001, 0xaec202d0, 0x8ec202d0,
-0x8ec2021c, 0x24420001, 0xaec2021c, 0x8ec2021c, 0x8ec20258, 0x24420001,
-0xaec20258, 0x8ec20258, 0x8fbf0038, 0x8fbe0034, 0x8fb50030, 0x8fb3002c,
-0x8fb10028, 0x3e00008, 0x27bd0040, 0x27bdffb0, 0x27440212, 0x24050006,
-0xafbf0048, 0xafbe0044, 0xafb50040, 0xafb3003c, 0xc002207, 0xafb10038,
-0x3044007f, 0x410c0, 0x2e21021, 0x944771c0, 0x4021, 0x10e00018,
-0x27490212, 0x952a0000, 0x710c0, 0x572821, 0x24a575c2, 0x94a20000,
-0x144a0009, 0x3021, 0x94a30002, 0x95220002, 0x14620006, 0xc01021,
-0x94a20004, 0x95230004, 0x431026, 0x2c460001, 0xc01021, 0x14400006,
-0x710c0, 0xe04021, 0x2e21021, 0x944775c0, 0x14e0ffec, 0x710c0,
-0xe02821, 0x14a0000f, 0xafa80028, 0x410c0, 0x2e21021, 0xafa40010,
-0x944271c0, 0x3c040001, 0x24842a94, 0xafa20014, 0x8f460210, 0x8f470214,
-0x3c050003, 0xc00290f, 0x34a5f01c, 0x10000062, 0x3c020800, 0x11000007,
-0x510c0, 0x2e21021, 0x944375c0, 0x810c0, 0x2e21021, 0x10000006,
-0xa44375c0, 0x2e21021, 0x944375c0, 0x410c0, 0x2e21021, 0xa44371c0,
-0x8ec30124, 0x510c0, 0x2e21021, 0x26e871c0, 0xa44375c0, 0x8ec20120,
-0x3021, 0x27490212, 0x18400029, 0xaec50124, 0x25070006, 0x94e3fffc,
-0x95220000, 0x14620009, 0x2821, 0x94e3fffe, 0x95220002, 0x14620006,
-0xa01021, 0x94e20000, 0x95230004, 0x431026, 0x2c450001, 0xa01021,
-0x50400014, 0x24c60001, 0x8ec20120, 0x2442ffff, 0xc2102a, 0x1040000b,
-0x25050004, 0x94a20006, 0x8ca30008, 0xa4a2fffe, 0xaca30000, 0x8ec20120,
-0x24c60001, 0x2442ffff, 0xc2102a, 0x1440fff7, 0x24a50008, 0x8ec20120,
-0x2442ffff, 0x10000006, 0xaec20120, 0x8ec20120, 0x24e70008, 0xc2102a,
-0x1440ffda, 0x25080008, 0x410c0, 0x2e21021, 0x944271c0, 0x1440001e,
-0x3c020800, 0x92c2011c, 0x1040000e, 0x41942, 0x24020003, 0x431023,
-0x21080, 0x572821, 0x571021, 0x3084001f, 0x24030001, 0x8c4204ac,
-0x831804, 0x31827, 0x431024, 0x1000000d, 0xaca204ac, 0x24020003,
-0x431023, 0x21080, 0x5c2821, 0x5c1021, 0x3084001f, 0x24030001,
-0x8c420228, 0x831804, 0x31827, 0x431024, 0xaca20228, 0x3c020800,
-0x34422000, 0xafa20020, 0x8ec3002c, 0x240200ff, 0x10620004, 0x27a70020,
-0x8ec2002c, 0x10000002, 0x24530001, 0x9821, 0x8f420228, 0x1662000f,
-0x0, 0x3c040001, 0x24842a58, 0xafa00010, 0xafa00014, 0x8ec6002c,
-0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f00f, 0x8ec202a0, 0x24420001,
-0xaec202a0, 0x1000006b, 0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021,
-0x8ce30000, 0x8ce40004, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054,
-0x247103e8, 0x2221023, 0x2c4203e9, 0x1040001e, 0xa821, 0x241e000d,
-0x8ec8002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008, 0xafbe0010,
-0xafb30014, 0x840c0, 0x1001821, 0x1021, 0x8ec80008, 0xa32821,
-0xa3482b, 0x822021, 0x892021, 0x630c0, 0xafa80018, 0x8ec200a8,
-0x24c604c0, 0x40f809, 0x2e63021, 0x54400006, 0x24150001, 0x8f820054,
-0x2221023, 0x2c4203e9, 0x1440ffe5, 0x0, 0x32a200ff, 0x54400011,
-0xaed3002c, 0x3c040001, 0x24842a64, 0xafa00010, 0xafa00014, 0x8f860120,
-0x8f870124, 0x3c050009, 0x1000002e, 0x34a5f010, 0x8ec2026c, 0x24150001,
-0x24420001, 0xaec2026c, 0x8ec2026c, 0x1000001d, 0x32a200ff, 0x8f830054,
-0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, 0x10400015, 0xa821,
-0x24130011, 0x8ec30008, 0x8ee40488, 0x8ee5048c, 0x8ec2002c, 0x8f860120,
-0xafb30010, 0xafa20014, 0xafa30018, 0x8ec200a8, 0x24070008, 0x40f809,
-0x24c6001c, 0x1440ffe4, 0x0, 0x8f820054, 0x2221023, 0x2c4203e9,
-0x1440ffee, 0x0, 0x32a200ff, 0x1440000f, 0x0, 0x3c040001,
-0x24842a70, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124, 0x3c050009,
-0x34a5f011, 0xc00290f, 0x0, 0x8ec202d0, 0x24420001, 0xaec202d0,
-0x8ec202d0, 0x8ec20220, 0x24420001, 0xaec20220, 0x8ec20220, 0x8ec20258,
-0x24420001, 0xaec20258, 0x8ec20258, 0x8fbf0048, 0x8fbe0044, 0x8fb50040,
-0x8fb3003c, 0x8fb10038, 0x3e00008, 0x27bd0050, 0x0, 0x0,
-0x27bdffe8, 0x27644000, 0xafbf0010, 0xc002990, 0x24051000, 0x24020020,
-0xaf82011c, 0xaf800100, 0xaf800104, 0xaf800108, 0xaf800110, 0xaf800114,
-0xaf800118, 0xaf800120, 0xaf800124, 0xaf800128, 0xaf800130, 0xaf800134,
-0xaf800138, 0xaec000dc, 0xaec000e0, 0xaec000e4, 0xaec000e8, 0x3c020001,
-0x571021, 0x904281ec, 0x1440001d, 0x0, 0x8f82011c, 0x34420001,
-0xaf82011c, 0x8f830040, 0x3c02f000, 0x621824, 0x3c025000, 0x10620005,
-0x3c026000, 0x1062000b, 0x0, 0x10000010, 0x0, 0x8f420218,
-0x30420040, 0x14400009, 0x0, 0x8f820050, 0x3c030010, 0x10000003,
-0x431024, 0x8f420218, 0x30420040, 0x10400004, 0x0, 0x8f82011c,
-0x34420004, 0xaf82011c, 0x8fbf0010, 0x3e00008, 0x27bd0018, 0x8fa90010,
-0x8f83012c, 0x8faa0014, 0x8fab0018, 0x1060000a, 0x24680020, 0x8ec20534,
-0x51020001, 0x27684800, 0x8f820128, 0x11020004, 0x0, 0x8f820124,
-0x15020007, 0x39220011, 0x8ec30298, 0x1021, 0x24630001, 0xaec30298,
-0x10000069, 0x8ec30298, 0xac640000, 0xac650004, 0xac660008, 0xa467000e,
-0xac690018, 0xac6a001c, 0xac6b0010, 0x2523ffee, 0x2c630002, 0x2c420001,
-0x621825, 0x10600025, 0xaf880120, 0x8ec200e4, 0x210c0, 0x24426fc0,
-0x2e22021, 0x8c830000, 0x24020012, 0x1462000f, 0x0, 0x8ec300e4,
-0x8ec200e8, 0x1062000b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004,
-0x8ec200e8, 0x8ec500e4, 0x24420001, 0x1043002b, 0x0, 0x10000023,
-0x0, 0x8ec200e4, 0x24030040, 0x24420001, 0x50430003, 0x1021,
-0x8ec200e4, 0x24420001, 0xaec200e4, 0x8ec200e4, 0x210c0, 0x24426fc0,
-0x2e22021, 0x10000034, 0x24020012, 0x8ec200e4, 0x210c0, 0x24426fc0,
-0x2e22021, 0x8c830000, 0x24020007, 0x1462001f, 0x0, 0x8ec300e4,
-0x8ec200e8, 0x1062001b, 0x24030040, 0x8c820004, 0x24420001, 0xac820004,
-0x8ec200e8, 0x8ec500e4, 0x24420001, 0x10430007, 0x0, 0x8ec200e8,
-0x24420001, 0x10a20005, 0x0, 0x10000007, 0x0, 0x14a00005,
-0x0, 0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x8c820004,
-0x2c420011, 0x50400013, 0xac800000, 0x10000012, 0x24020001, 0x8ec200e4,
-0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ec200e4, 0x24420001,
-0xaec200e4, 0x8ec200e4, 0x210c0, 0x24426fc0, 0x2e22021, 0x24020007,
-0xac820000, 0x24020001, 0xac820004, 0x24020001, 0x3e00008, 0x0,
-0x3e00008, 0x0, 0x8faa0010, 0x8fab0014, 0x8f880120, 0x8ec20534,
-0x8fac0018, 0x25030020, 0x14620002, 0x604821, 0x27694800, 0x8f820128,
-0x1122000c, 0x25030016, 0xad040000, 0xad050004, 0xad060008, 0xa507000e,
-0xad0a0018, 0xad0b001c, 0xad030014, 0xad0c0010, 0xaf890120, 0x10000006,
-0x24020001, 0x8ec30298, 0x1021, 0x24630001, 0xaec30298, 0x8ec30298,
-0x3e00008, 0x0, 0x3e00008, 0x0, 0x8fa90010, 0x8f83010c,
-0x8faa0014, 0x8fab0018, 0x1060000a, 0x24680020, 0x27624800, 0x51020001,
-0x27684000, 0x8f820108, 0x11020004, 0x0, 0x8f820104, 0x15020007,
-0x2522fffb, 0x8ec3029c, 0x1021, 0x24630001, 0xaec3029c, 0x10000051,
-0x8ec3029c, 0x2c420002, 0xac640000, 0xac650004, 0xac660008, 0xa467000e,
-0xac690018, 0xac6a001c, 0xac6b0010, 0xaf880100, 0x10400037, 0x24030040,
-0x8ec200dc, 0x210c0, 0x24426dc0, 0x2e22021, 0x8c830000, 0x24020005,
-0x1462001f, 0x0, 0x8ec300dc, 0x8ec200e0, 0x1062001b, 0x24030040,
-0x8c820004, 0x24420001, 0xac820004, 0x8ec200e0, 0x8ec500dc, 0x24420001,
-0x10430007, 0x0, 0x8ec200e0, 0x24420001, 0x10a20005, 0x0,
-0x10000007, 0x0, 0x14a00005, 0x0, 0x8f820108, 0x24420020,
-0xaf820108, 0x8f820108, 0x8c820004, 0x2c420011, 0x50400021, 0xac800000,
-0x10000020, 0x24020001, 0x8ec200dc, 0x24030040, 0x24420001, 0x50430003,
-0x1021, 0x8ec200dc, 0x24420001, 0xaec200dc, 0x8ec200dc, 0x210c0,
-0x24426dc0, 0x2e22021, 0x24020005, 0xac820000, 0x1000000e, 0x24020001,
-0x8ec200dc, 0x24420001, 0x50430003, 0x1021, 0x8ec200dc, 0x24420001,
-0xaec200dc, 0x8ec200dc, 0x210c0, 0x24426dc0, 0x2e22021, 0x24020001,
-0xac890000, 0xac820004, 0x24020001, 0x3e00008, 0x0, 0x3e00008,
-0x0, 0x8fab0010, 0x8f880100, 0x8faa0014, 0x8fac0018, 0x27624800,
-0x25030020, 0x14620002, 0x604821, 0x27694000, 0x8f820108, 0x1122000c,
-0x25030016, 0xad040000, 0xad050004, 0xad060008, 0xa507000e, 0xad0b0018,
-0xad0a001c, 0xad030014, 0xad0c0010, 0xaf890100, 0x10000006, 0x24020001,
-0x8ec3029c, 0x1021, 0x24630001, 0xaec3029c, 0x8ec3029c, 0x3e00008,
-0x0, 0x3e00008, 0x0, 0x27bdffe0, 0xafbf0018, 0x8f820104,
-0xafa20010, 0x8f820100, 0x3c040001, 0x24842b5c, 0xafa20014, 0x8f8600b0,
-0x8f87011c, 0x3c050002, 0xc00290f, 0x34a5f000, 0x8f420218, 0x30420100,
-0x10400017, 0x0, 0x8f8200b0, 0x3c030200, 0x431024, 0x10400012,
-0x0, 0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830104, 0x8f8200b0,
-0x34420001, 0xaf8200b0, 0xaf830104, 0x8f82011c, 0x2403fffd, 0x431024,
-0xaf82011c, 0x8ec20294, 0x24420001, 0xaec20294, 0x10000018, 0x8ec20294,
-0x3c040001, 0x24842b68, 0x3405dead, 0x3021, 0x3c070001, 0x24e72b70,
-0x24020287, 0xafa20010, 0xc00290f, 0xafa00014, 0x8f82011c, 0x34420002,
-0xaf82011c, 0x8f820220, 0x34420004, 0xaf820220, 0x8f820140, 0x3c030001,
-0x431025, 0xaf820140, 0x8f8200b0, 0x34420001, 0xaf8200b0, 0x8fbf0018,
-0x3e00008, 0x27bd0020, 0x27bdffe0, 0xafbf0018, 0x8f820120, 0xafa20010,
-0x8f820124, 0x3c040001, 0x24842b98, 0xafa20014, 0x8f8600a0, 0x8f87011c,
-0x3c050001, 0xc00290f, 0x34a5f000, 0x8f420218, 0x30420100, 0x10400017,
-0x0, 0x8f8200a0, 0x3c030200, 0x431024, 0x10400012, 0x0,
-0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830124, 0x8f8200a0, 0x34420001,
-0xaf8200a0, 0xaf830124, 0x8f82011c, 0x2403fffd, 0x431024, 0xaf82011c,
-0x8ec20290, 0x24420001, 0xaec20290, 0x10000018, 0x8ec20290, 0x3c040001,
-0x24842b68, 0x3405dead, 0x3021, 0x3c070001, 0x24e72b70, 0x240202a3,
-0xafa20010, 0xc00290f, 0xafa00014, 0x8f82011c, 0x34420002, 0xaf82011c,
-0x8f820220, 0x34420004, 0xaf820220, 0x8f820140, 0x3c030001, 0x431025,
-0xaf820140, 0x8f8200a0, 0x34420001, 0xaf8200a0, 0x8fbf0018, 0x3e00008,
-0x27bd0020, 0x6021, 0x5021, 0x3021, 0x2821, 0x6821,
-0x4821, 0x7821, 0x7021, 0x8f880124, 0x8f870104, 0x1580002e,
-0x8f8b011c, 0x11a00014, 0x31620800, 0x8f820120, 0x10460029, 0x0,
-0x3c040001, 0x8c8434f0, 0x8cc20000, 0x8cc30004, 0xac820000, 0xac830004,
-0x8cc20008, 0xac820008, 0x94c2000e, 0xa482000e, 0x8cc20010, 0x240c0001,
-0xac820010, 0x8cc20014, 0x10000012, 0x24c60020, 0x10400017, 0x0,
-0x3c040001, 0x8c8434f0, 0x8d020000, 0x8d030004, 0xac820000, 0xac830004,
-0x8d020008, 0xac820008, 0x9502000e, 0xa482000e, 0x8d020010, 0x25060020,
-0xac820010, 0x8d020014, 0x240c0001, 0xc01821, 0xac820014, 0x27624fe0,
-0x43102b, 0x54400001, 0x27634800, 0x603021, 0x1540002f, 0x31620100,
-0x11200014, 0x31628000, 0x8f820100, 0x1045002a, 0x31620100, 0x3c040001,
-0x8c8434ec, 0x8ca20000, 0x8ca30004, 0xac820000, 0xac830004, 0x8ca20008,
-0xac820008, 0x94a2000e, 0xa482000e, 0x8ca20010, 0x240a0001, 0xac820010,
-0x8ca20014, 0x10000012, 0x24a50020, 0x10400018, 0x31620100, 0x3c040001,
-0x8c8434ec, 0x8ce20000, 0x8ce30004, 0xac820000, 0xac830004, 0x8ce20008,
-0xac820008, 0x94e2000e, 0xa482000e, 0x8ce20010, 0x24e50020, 0xac820010,
-0x8ce20014, 0x240a0001, 0xa01821, 0xac820014, 0x276247e0, 0x43102b,
-0x54400001, 0x27634000, 0x602821, 0x31620100, 0x5440001d, 0x31621000,
-0x11a00009, 0x31a20800, 0x10400004, 0x25020020, 0x8f8200a8, 0xa5e20000,
-0x25020020, 0xaf820124, 0x8f880124, 0x6821, 0x11800011, 0x31621000,
-0x3c040001, 0x8c8434f0, 0x8c820000, 0x8c830004, 0xaf820080, 0xaf830084,
-0x8c820008, 0xaf8200a4, 0x9482000e, 0xaf8200ac, 0x8c820010, 0x6021,
-0xaf8200a0, 0x8c8d0010, 0x8c8f0014, 0x31621000, 0x1440ff82, 0x0,
-0x1120000f, 0x31220800, 0x10400004, 0x3c020002, 0x8f8200b8, 0xa5c20000,
-0x3c020002, 0x1221024, 0x10400004, 0x24e20020, 0x8f8200b4, 0xaf8200d4,
-0x24e20020, 0xaf820104, 0x8f870104, 0x4821, 0x1140ff70, 0x0,
-0x3c040001, 0x8c8434ec, 0x8c820000, 0x8c830004, 0xaf820090, 0xaf830094,
-0x8c820008, 0xaf8200b4, 0x9482000e, 0xaf82009c, 0x8c820010, 0x5021,
-0xaf8200b0, 0x8c890010, 0x1000ff60, 0x8c8e0014, 0x3e00008, 0x0,
-0x6021, 0x5821, 0x3021, 0x2821, 0x6821, 0x5021,
-0x7821, 0x7021, 0x8f880124, 0x8f870104, 0x3c180100, 0x1580002e,
-0x8f89011c, 0x11a00014, 0x31220800, 0x8f820120, 0x10460029, 0x0,
-0x3c040001, 0x8c8434f0, 0x8cc20000, 0x8cc30004, 0xac820000, 0xac830004,
-0x8cc20008, 0xac820008, 0x94c2000e, 0xa482000e, 0x8cc20010, 0x240c0001,
-0xac820010, 0x8cc20014, 0x10000012, 0x24c60020, 0x10400017, 0x0,
-0x3c040001, 0x8c8434f0, 0x8d020000, 0x8d030004, 0xac820000, 0xac830004,
-0x8d020008, 0xac820008, 0x9502000e, 0xa482000e, 0x8d020010, 0x25060020,
-0xac820010, 0x8d020014, 0x240c0001, 0xc01821, 0xac820014, 0x27624fe0,
-0x43102b, 0x54400001, 0x27634800, 0x603021, 0x1560002f, 0x31220100,
-0x11400014, 0x31228000, 0x8f820100, 0x1045002a, 0x31220100, 0x3c040001,
-0x8c8434ec, 0x8ca20000, 0x8ca30004, 0xac820000, 0xac830004, 0x8ca20008,
-0xac820008, 0x94a2000e, 0xa482000e, 0x8ca20010, 0x240b0001, 0xac820010,
-0x8ca20014, 0x10000012, 0x24a50020, 0x10400018, 0x31220100, 0x3c040001,
-0x8c8434ec, 0x8ce20000, 0x8ce30004, 0xac820000, 0xac830004, 0x8ce20008,
-0xac820008, 0x94e2000e, 0xa482000e, 0x8ce20010, 0x24e50020, 0xac820010,
-0x8ce20014, 0x240b0001, 0xa01821, 0xac820014, 0x276247e0, 0x43102b,
-0x54400001, 0x27634000, 0x602821, 0x31220100, 0x5440001d, 0x31221000,
-0x11a00009, 0x31a20800, 0x10400004, 0x25020020, 0x8f8200a8, 0xa5e20000,
-0x25020020, 0xaf820124, 0x8f880124, 0x6821, 0x11800011, 0x31221000,
-0x3c040001, 0x8c8434f0, 0x8c820000, 0x8c830004, 0xaf820080, 0xaf830084,
-0x8c820008, 0xaf8200a4, 0x9482000e, 0xaf8200ac, 0x8c820010, 0x6021,
-0xaf8200a0, 0x8c8d0010, 0x8c8f0014, 0x31221000, 0x14400022, 0x0,
-0x1140000f, 0x31420800, 0x10400004, 0x3c020002, 0x8f8200b8, 0xa5c20000,
-0x3c020002, 0x1421024, 0x10400004, 0x24e20020, 0x8f8200b4, 0xaf8200d4,
-0x24e20020, 0xaf820104, 0x8f870104, 0x5021, 0x11600010, 0x0,
-0x3c040001, 0x8c8434ec, 0x8c820000, 0x8c830004, 0xaf820090, 0xaf830094,
-0x8c820008, 0xaf8200b4, 0x9482000e, 0xaf82009c, 0x8c820010, 0x5821,
-0xaf8200b0, 0x8c8a0010, 0x8c8e0014, 0x8f820070, 0x3c031000, 0x431024,
-0x1040ff5c, 0x0, 0x8f820054, 0x24420005, 0xaf820078, 0x8f420234,
-0x10400017, 0x2021, 0x3c020001, 0x571021, 0x8c4281dc, 0x24420005,
-0x3c010001, 0x370821, 0xac2281dc, 0x3c020001, 0x571021, 0x8c4281dc,
-0x8f430234, 0x43102b, 0x14400009, 0x24020001, 0x3c040080, 0x3c010001,
-0x370821, 0xac2281d4, 0x3c010001, 0x370821, 0x1000000c, 0xac2081dc,
-0x3c020001, 0x571021, 0x8c4281d4, 0x14400006, 0x3c020080, 0x3c020001,
-0x571021, 0x8c4281d8, 0x10400002, 0x3c020080, 0x822025, 0x8f420230,
-0x10400014, 0x0, 0x3c020001, 0x571021, 0x8c4281e4, 0x24420005,
-0x3c010001, 0x370821, 0xac2281e4, 0x3c020001, 0x571021, 0x8c4281e4,
-0x8f430230, 0x43102b, 0x14400006, 0x0, 0x3c010001, 0x370821,
-0xac2081e4, 0x10000006, 0x982025, 0x3c020001, 0x571021, 0x8c4281e0,
-0x54400001, 0x982025, 0x3c020001, 0x571021, 0x8c4281e8, 0x10400005,
-0x3c022000, 0x822025, 0x3c010001, 0x370821, 0xac2081e8, 0x1080ff0f,
-0x0, 0x8ec20000, 0x10400007, 0x0, 0xaf80004c, 0x8f82004c,
-0x1040fffd, 0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048,
-0x1040fffd, 0x0, 0x8f820060, 0x441025, 0xaf820060, 0x8ec20000,
-0x10400003, 0x0, 0x1000fefa, 0xaf80004c, 0x1000fef8, 0xaf800048,
-0x3e00008, 0x0, 0x0, 0x0, 0x3c020001, 0x8c423388,
-0x27bdffe8, 0xafbf0014, 0x14400012, 0xafb10010, 0x3c110001, 0x26313590,
-0x2202021, 0xc002990, 0x24052000, 0x26221fe0, 0x3c010001, 0xac2234f8,
-0x3c010001, 0xac2234f4, 0xaf420250, 0x24022000, 0xaf510254, 0xaf420258,
-0x24020001, 0x3c010001, 0xac223388, 0x8fbf0014, 0x8fb10010, 0x3e00008,
-0x27bd0018, 0x3c030001, 0x8c6334f8, 0x8c820000, 0x8fa80010, 0x8fa90014,
-0xac620000, 0x3c020001, 0x8c4234f8, 0x8c830004, 0xac430004, 0xac450008,
-0x8f840054, 0x2443ffe0, 0xac460010, 0xac470014, 0xac480018, 0xac49001c,
-0x3c010001, 0xac2334f8, 0xac44000c, 0x3c020001, 0x24423590, 0x62182b,
-0x10600005, 0x0, 0x3c020001, 0x8c4234f4, 0x3c010001, 0xac2234f8,
-0x3c030001, 0x8c6334f8, 0x3c020001, 0x8c423370, 0xac620000, 0x3c030001,
-0x8c6334f8, 0x3c020001, 0x8c423370, 0xac620004, 0x3e00008, 0xaf430250,
-0x27bdffd8, 0xafb10010, 0x808821, 0x3c030001, 0x8c6334f8, 0x3c020001,
-0x8c423370, 0x8fa40040, 0xafb30014, 0xa09821, 0xafbf0020, 0xafbe001c,
-0xafb50018, 0xac620000, 0x3c050001, 0x8ca534f8, 0x3c020001, 0x8c423370,
-0xc0a821, 0xe0f021, 0x10800006, 0xaca20004, 0x24a50008, 0xc002998,
-0x24060018, 0x10000004, 0x0, 0x24a40008, 0xc002990, 0x24050018,
-0x3c020001, 0x8c4234f8, 0x3c050001, 0x24a53590, 0x2442ffe0, 0x3c010001,
-0xac2234f8, 0x45102b, 0x10400005, 0x0, 0x3c020001, 0x8c4234f4,
-0x3c010001, 0xac2234f8, 0x3c030001, 0x8c6334f8, 0x8e220000, 0xac620000,
-0x3c030001, 0x8c6334f8, 0x8e220004, 0xac620004, 0xac730008, 0x8f840054,
-0xac750010, 0xac7e0014, 0x8fa80038, 0xac680018, 0x8fa8003c, 0x2462ffe0,
-0x3c010001, 0xac2234f8, 0x45102b, 0xac68001c, 0x10400005, 0xac64000c,
-0x3c020001, 0x8c4234f4, 0x3c010001, 0xac2234f8, 0x3c030001, 0x8c6334f8,
-0x3c020001, 0x8c423370, 0xac620000, 0x3c030001, 0x8c6334f8, 0x3c020001,
-0x8c423370, 0xac620004, 0xaf430250, 0x8fbf0020, 0x8fbe001c, 0x8fb50018,
-0x8fb30014, 0x8fb10010, 0x3e00008, 0x27bd0028, 0x10a00005, 0x0,
-0xac800000, 0x24a5fffc, 0x14a0fffd, 0x24840004, 0x3e00008, 0x0,
-0x10c00007, 0x0, 0x8c820000, 0x24840004, 0x24c6fffc, 0xaca20000,
-0x14c0fffb, 0x24a50004, 0x3e00008, 0x0, 0x10c00007, 0x0,
-0x8ca20000, 0x24a50004, 0x24c6fffc, 0xac820000, 0x14c0fffb, 0x24840004,
-0x3e00008, 0x0, 0x63080, 0x861821, 0x83102b, 0x10400006,
-0x0, 0xac850000, 0x24840004, 0x83102b, 0x5440fffd, 0xac850000,
-0x3e00008, 0x0, 0x27bdffc0, 0xafbf0038, 0xafb30034, 0xafb10030,
-0x8ec3001c, 0x8ec20014, 0x10620137, 0x0, 0x8ec2001c, 0x8ee304bc,
-0x21100, 0x622021, 0x9493000a, 0x8c880000, 0x8c890004, 0x1312c2,
-0x30460001, 0xafa80028, 0xafa9002c, 0x94910008, 0x8ec20078, 0x8ec30088,
-0x3225ffff, 0x451021, 0x62182b, 0x10600017, 0x0, 0x8f8200d8,
-0x8ec30074, 0x431023, 0x2442fff8, 0xaec20088, 0x8ec20088, 0x4410004,
-0x0, 0x8ec3053c, 0x431021, 0xaec20088, 0x8ec20078, 0x8ec30088,
-0x451021, 0x62182b, 0x10600006, 0x0, 0x8ec202ac, 0x24420001,
-0xaec202ac, 0x1000010e, 0x8ec202ac, 0x8f8200fc, 0x14400006, 0x0,
-0x8ec202a8, 0x24420001, 0xaec202a8, 0x10000106, 0x8ec202a8, 0x92c20529,
-0x1040000b, 0x32620200, 0x1040000a, 0x32620004, 0x96e20452, 0x30420010,
-0x10400005, 0x3c028000, 0xaec2052c, 0x9482000e, 0x21400, 0xaec20530,
-0x32620004, 0x104000a8, 0x30c200ff, 0x10400003, 0x3227ffff, 0x10000002,
-0x24020017, 0x24020006, 0xafa20010, 0x8ec2001c, 0xafa20014, 0x8ec2000c,
-0x8fa40028, 0x8fa5002c, 0x3c030002, 0x431025, 0xafa20018, 0x8ec60080,
-0x8ec200a4, 0x40f809, 0x0, 0x5440000b, 0x3225ffff, 0x8fa9002c,
-0xafa90010, 0x8ec20080, 0x3c040001, 0x24842e5c, 0x3c050004, 0xafa20014,
-0x8ec6001c, 0x100000a5, 0x34a5f004, 0x8ec20078, 0x451021, 0xaec20078,
-0x8ec2001c, 0x8ee304bc, 0x8ec40074, 0x21100, 0x431021, 0xac44000c,
-0x8ec30074, 0xafa30020, 0x8ec40078, 0xafa40024, 0x8ec2052c, 0x10400006,
-0x3c024000, 0x621025, 0xafa20020, 0x8ec20530, 0x821025, 0xafa20024,
-0x8ec20080, 0x8ec30078, 0x2406fff8, 0x451021, 0x24420007, 0x461024,
-0x24630007, 0xaec20074, 0x8ec20088, 0x8ec40074, 0x8ec50538, 0x661824,
-0x431023, 0x85202b, 0x14800005, 0xaec20088, 0x8ec20074, 0x8ec3053c,
-0x431023, 0xaec20074, 0x8ec20074, 0xaec20080, 0x8f8600fc, 0x14c00007,
-0x0, 0x8ec202a8, 0x1821, 0x24420001, 0xaec202a8, 0x10000008,
-0x8ec202a8, 0x8fa20020, 0x8fa30024, 0xacc20000, 0xacc30004, 0x24c20008,
-0xaf8200f0, 0x24030001, 0x14600012, 0x131142, 0x8f8200f0, 0xafa20010,
-0x8f8200f4, 0x3c040001, 0x24842e68, 0xafa20014, 0x8fa60020, 0x8fa70024,
-0x3c050004, 0xc00290f, 0x34a5f005, 0x8ec20180, 0x24420001, 0xaec20180,
-0x8ec20180, 0x10000039, 0x24020001, 0x30430003, 0x24020002, 0x10620016,
-0x28620003, 0x10400005, 0x24020001, 0x10620008, 0x0, 0x10000023,
-0x0, 0x24020003, 0x10620017, 0x0, 0x1000001e, 0x0,
-0x8ec201e0, 0x8ec301e4, 0x24630001, 0x2c640001, 0x441021, 0xaec201e0,
-0xaec301e4, 0x8ec201e0, 0x10000014, 0x8ec301e4, 0x8ec201e8, 0x8ec301ec,
-0x24630001, 0x2c640001, 0x441021, 0xaec201e8, 0xaec301ec, 0x8ec201e8,
-0x1000000a, 0x8ec301ec, 0x8ec201f0, 0x8ec301f4, 0x24630001, 0x2c640001,
-0x441021, 0xaec201f0, 0xaec301f4, 0x8ec201f0, 0x8ec301f4, 0x8ec20078,
-0x8ec401d8, 0x8ec501dc, 0x401821, 0x1021, 0xa32821, 0xa3302b,
-0x822021, 0x862021, 0xaec401d8, 0xaec501dc, 0x24020001, 0xaec00078,
-0x1000002f, 0xa2c20529, 0x3227ffff, 0x10e0002c, 0x0, 0x14400002,
-0x24020016, 0x24020005, 0xafa20010, 0x8ec2001c, 0x8fa40028, 0x8fa5002c,
-0xafa20014, 0x8ec2000c, 0xafa20018, 0x8ec60080, 0x8ec200a4, 0x40f809,
-0x0, 0x1440000d, 0x3225ffff, 0x3c040001, 0x24842e74, 0x8fa8002c,
-0x3c050004, 0xafa00014, 0xafa80010, 0x8ec6001c, 0x34a5f007, 0xc00290f,
-0x2203821, 0x10000030, 0x0, 0x8ec20080, 0x8ec40538, 0x451021,
-0xaec20080, 0x8ec20078, 0x8ec30080, 0x451021, 0x64182b, 0x14600005,
-0xaec20078, 0x8ec20080, 0x8ec3053c, 0x431023, 0xaec20080, 0xa2c00529,
-0x8ec3001c, 0x96e20450, 0x24630001, 0x2442ffff, 0x621824, 0xaec3001c,
-0x8ec3001c, 0x8ec20014, 0x14620017, 0x0, 0x8ec20000, 0x10400007,
-0x2403fff7, 0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, 0x10000005,
-0x0, 0xaf800048, 0x8f820048, 0x1040fffd, 0x0, 0x8f820060,
-0x431024, 0xaf820060, 0x8ec20000, 0x10400003, 0x0, 0x10000002,
-0xaf80004c, 0xaf800048, 0x8fbf0038, 0x8fb30034, 0x8fb10030, 0x3e00008,
-0x27bd0040, 0x3e00008, 0x0, 0x27bdffd0, 0xafbf002c, 0xafb10028,
-0x8ec3001c, 0x8ec20014, 0x106200f0, 0x0, 0x8ec2001c, 0x8ee304bc,
-0x21100, 0x622821, 0x8caa0000, 0x8cab0004, 0x94a7000a, 0xafaa0020,
-0xafab0024, 0x94b10008, 0x71ac2, 0x8ec20088, 0x3224ffff, 0x44102a,
-0x10400017, 0x30680001, 0x8f8200d8, 0x8ec30080, 0x431023, 0x2442fff8,
-0xaec20088, 0x8ec20088, 0x2842fff9, 0x10400005, 0x0, 0x8ec20088,
-0x8ec3053c, 0x431021, 0xaec20088, 0x8ec20088, 0x44102a, 0x10400006,
-0x0, 0x8ec202ac, 0x24420001, 0xaec202ac, 0x100000ca, 0x8ec202ac,
-0x8f8400fc, 0x1080000c, 0x0, 0x8f8200f4, 0x2403fff8, 0x431024,
-0x441023, 0x218c3, 0x50600001, 0x24030100, 0x8ec20070, 0x43102b,
-0x14400006, 0x0, 0x8ec202a8, 0x24420001, 0xaec202a8, 0x100000b7,
-0x8ec202a8, 0x92c20021, 0x1040000f, 0x0, 0x8ec2000c, 0x34460400,
-0x30e20200, 0x1040000b, 0x0, 0x96e20452, 0x30420010, 0x10400007,
-0x3c028000, 0xaec2052c, 0x94a2000e, 0x21400, 0x10000002, 0xaec20530,
-0x8ec6000c, 0x8ec2001c, 0x8ee304bc, 0x8ec40074, 0x21100, 0x431021,
-0xac44000c, 0x30e20004, 0x50400050, 0x3227ffff, 0x8ec2052c, 0x10400013,
-0x0, 0x11000003, 0x3227ffff, 0x10000002, 0x24020018, 0x24020015,
-0xafa20010, 0x8ec3001c, 0x8ec40530, 0x3c020002, 0xc21025, 0xafa20018,
-0x641825, 0xafa30014, 0x8ec60080, 0x8ec200a4, 0x8fa40020, 0x10000010,
-0x8fa50024, 0x11000003, 0x3227ffff, 0x10000002, 0x24020017, 0x24020006,
-0xafa20010, 0x8ec2001c, 0x8fa40020, 0x8fa50024, 0x3c030002, 0xc31825,
-0xafa30018, 0xafa20014, 0x8ec60080, 0x8ec200a4, 0x40f809, 0x0,
-0x1440000b, 0x24030001, 0x8fab0024, 0xafab0010, 0x8ec20080, 0x3c040001,
-0x24842e5c, 0x3c050004, 0xafa20014, 0x8ec60018, 0x10000037, 0x34a5f004,
-0x8ec40070, 0x8ec20080, 0x8ec50538, 0x2406fff8, 0xa2c30021, 0xaec0052c,
-0xaec00530, 0x24840001, 0xaec40070, 0x3224ffff, 0x441021, 0x24420007,
-0x461024, 0x24840007, 0xaec20074, 0x8ec20088, 0x8ec30074, 0x862024,
-0x441023, 0x65182b, 0x14600005, 0xaec20088, 0x8ec20074, 0x8ec3053c,
-0x431023, 0xaec20074, 0x8ec20074, 0x1000002d, 0xaec20080, 0x10e0002b,
-0x0, 0x15000002, 0x24020016, 0x24020005, 0xafa20010, 0x8ec2001c,
-0x8fa40020, 0x8fa50024, 0xafa60018, 0xafa20014, 0x8ec60080, 0x8ec200a4,
-0x40f809, 0x0, 0x1440000d, 0x3225ffff, 0x3c040001, 0x24842e74,
-0x8faa0024, 0x3c050004, 0xafa00014, 0xafaa0010, 0x8ec60018, 0x34a5f007,
-0xc00290f, 0x2203821, 0x10000030, 0x0, 0x8ec20080, 0x8ec40538,
-0x451021, 0xaec20080, 0x8ec20088, 0x8ec30080, 0xa2c00021, 0x451023,
-0x64182b, 0x14600005, 0xaec20088, 0x8ec20080, 0x8ec3053c, 0x431023,
-0xaec20080, 0x8ec3001c, 0x96e20450, 0x24630001, 0x2442ffff, 0x621824,
-0xaec3001c, 0x8ec3001c, 0x8ec20014, 0x14620017, 0x0, 0x8ec20000,
-0x10400007, 0x2403fff7, 0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0,
-0x10000005, 0x0, 0xaf800048, 0x8f820048, 0x1040fffd, 0x0,
-0x8f820060, 0x431024, 0xaf820060, 0x8ec20000, 0x10400003, 0x0,
-0x10000002, 0xaf80004c, 0xaf800048, 0x8fbf002c, 0x8fb10028, 0x3e00008,
-0x27bd0030, 0x3e00008, 0x0, 0x27bdffd8, 0xafbf0024, 0xafb10020,
-0x8f820100, 0x8ec300e0, 0x8f820104, 0x8f850108, 0x24020040, 0x24630001,
-0x50620003, 0x1021, 0x8ec200e0, 0x24420001, 0xaec200e0, 0x8ec200e0,
-0x8ec300e0, 0x210c0, 0x24426dc0, 0x2e22021, 0x8ec200dc, 0x8c870004,
-0x14620007, 0xa03021, 0x8f820108, 0x24420020, 0xaf820108, 0x8f820108,
-0x10000011, 0xac800000, 0x8ec200e0, 0x24030040, 0x24420001, 0x50430003,
-0x1021, 0x8ec200e0, 0x24420001, 0x210c0, 0x24426dc0, 0x2e22021,
-0x8c820004, 0x8f830108, 0x21140, 0x621821, 0xaf830108, 0xac800000,
-0x8cc50018, 0x24a2fffb, 0x2c420002, 0x1040004c, 0x24a2ffea, 0x8cc2001c,
-0x96e30450, 0x8ec40024, 0x24420001, 0x2463ffff, 0x431024, 0x872021,
-0xaec20018, 0xaec40024, 0x8ec20024, 0x8f43023c, 0x43102b, 0x144000ec,
-0x0, 0x96e20452, 0x8ed10018, 0x30420020, 0x1040001e, 0x24070008,
-0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020019, 0xafa20010,
-0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b,
-0x24020001, 0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c,
-0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, 0x1040004a,
-0x24020001, 0x3c010001, 0x370821, 0x1000006f, 0xac2281d0, 0x8ee40498,
-0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020012, 0xafa20010, 0xafb10014,
-0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, 0x24020001,
-0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c, 0x8f470228,
-0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, 0x1040004f, 0x24020001,
-0x10000051, 0x0, 0x2c420002, 0x10400062, 0x24a2fffe, 0x8cc2001c,
-0x96e30450, 0x8ec40024, 0x24420001, 0x2463ffff, 0x431024, 0x872021,
-0xaec20018, 0xaec40024, 0x96e20452, 0x8ed10018, 0x30420020, 0x10400023,
-0x24070008, 0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020019,
-0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c,
-0x1440000b, 0x24020001, 0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014,
-0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006, 0x1021,
-0x14400006, 0x24020001, 0x24020001, 0x3c010001, 0x370821, 0x10000031,
-0xac2281d8, 0x3c010001, 0x370821, 0x10000021, 0xac2281d0, 0x8ee40498,
-0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020012, 0xafa20010, 0xafb10014,
-0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, 0x24020001,
-0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c, 0x8f470228,
-0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, 0x14400005, 0x24020001,
-0x3c010001, 0x370821, 0x10000010, 0xac2281d4, 0x3c010001, 0x370821,
-0xac2081d0, 0x3c010001, 0x370821, 0xac2081d8, 0x3c010001, 0x370821,
-0xac2081d4, 0x8ec20264, 0xaec00024, 0xaed10028, 0x24420001, 0xaec20264,
-0x8ec20264, 0x8ec20278, 0x24420001, 0xaec20278, 0x1000004b, 0x8ec20278,
-0x2c420002, 0x10400027, 0x24030040, 0x8ec20034, 0x24420001, 0x50430003,
-0x1021, 0x8ec20034, 0x24420001, 0xaec20034, 0x8ec20034, 0x21080,
-0x571021, 0x8c440cc0, 0x24020003, 0x14a2000d, 0x0, 0x92c20065,
-0x50400037, 0x36940040, 0x8ec202c0, 0x8ec3005c, 0x441021, 0xaec202c0,
-0x8ec202c4, 0x641821, 0x306300ff, 0x10000009, 0xaec3005c, 0x8ec202bc,
-0x8ec3003c, 0x441021, 0xaec202bc, 0x8ec202c4, 0x641821, 0x306301ff,
-0xaec3003c, 0x441021, 0xaec202c4, 0x10000022, 0x36940040, 0x24020014,
-0x14a20014, 0x24020010, 0x3c020001, 0x8c423334, 0x1040000a, 0x26e50028,
-0x26c40128, 0x240300ff, 0x2406ffff, 0x8ca20000, 0x24a50004, 0x2463ffff,
-0xac820000, 0x1466fffb, 0x24840004, 0x8ec20240, 0xa2c00528, 0x24420001,
-0xaec20240, 0x1000000c, 0x8ec20240, 0x10a2000a, 0x3c050008, 0x94c7000e,
-0x8cc2001c, 0x3c040001, 0x24842e80, 0xafa60014, 0xafa20010, 0x8cc60018,
-0xc00290f, 0x34a50910, 0x8fbf0024, 0x8fb10020, 0x3e00008, 0x27bd0028,
-0x3e00008, 0x0, 0x27bdff80, 0xafbf0078, 0xafbe0074, 0xafb50070,
-0xafb3006c, 0xafb10068, 0x8f820104, 0x8f950108, 0xafa00034, 0x12a2039b,
-0xafa0003c, 0x8f820108, 0x24420020, 0xaf820108, 0x8ead0018, 0xafad0044,
-0x8f820108, 0x39a30015, 0x2c630001, 0x39a20018, 0x2c420001, 0x621825,
-0x10600009, 0x3c0d8000, 0x8ea2001c, 0x3c03ffff, 0xafad0034, 0x431824,
-0x3042ffff, 0xafa3003c, 0x10000009, 0xaea2001c, 0x8fad0044, 0x39a30006,
-0x2c630001, 0x39a20017, 0x2c420001, 0x621825, 0x1060028d, 0x24020005,
-0x96a20016, 0x8ead001c, 0xaea20014, 0xafad0054, 0x8ee204bc, 0xd1900,
-0x8ee404bc, 0x621021, 0x9442000a, 0xafa2004c, 0x92c20090, 0x641821,
-0x14400003, 0x8c71000c, 0xaed1009c, 0xaecd0094, 0x8ec20538, 0x2625000c,
-0xa2102b, 0x14400003, 0x0, 0x8ec2053c, 0xa22823, 0x94a30000,
-0x24020800, 0x1462014c, 0x0, 0x8fad004c, 0x31a20002, 0x10400045,
-0x9821, 0x96e20452, 0x30420002, 0x10400041, 0x2629000e, 0x8ec60538,
-0x8ec7053c, 0x126102b, 0x50400001, 0x1274823, 0x25220014, 0x46102b,
-0x10400027, 0x24030005, 0x91220000, 0x3042000f, 0x14430024, 0x1202021,
-0x952a0000, 0x25290002, 0x95280000, 0x25290002, 0x95270000, 0x25290002,
-0x95260000, 0x25290002, 0x95250000, 0x25290002, 0x95230000, 0x25290002,
-0x95220000, 0x25290002, 0x95240000, 0x25290002, 0x1485021, 0x1475021,
-0x1465021, 0x1455021, 0x1435021, 0x1425021, 0x95220000, 0x95230002,
-0x1445021, 0x1425021, 0x1435021, 0xa1c02, 0x3142ffff, 0x625021,
-0xa1c02, 0x3142ffff, 0x10000008, 0x625021, 0x1202021, 0x90850000,
-0x8ec200ac, 0x30a5000f, 0x40f809, 0x52840, 0x304affff, 0x8ec20538,
-0x26250018, 0xa2102b, 0x14400003, 0x3153ffff, 0x8ec2053c, 0xa22823,
-0x131027, 0xa4a20000, 0x8fad004c, 0x31a20001, 0x10400101, 0x0,
-0x96e20452, 0x30420001, 0x104000fd, 0x31a20080, 0x10400008, 0x0,
-0x92c20090, 0x14400005, 0x24020001, 0xa2c20090, 0x8fad0054, 0xaed1009c,
-0xaecd0094, 0x8ec3009c, 0x8ec20538, 0x24650017, 0xa2102b, 0x14400003,
-0x0, 0x8ec2053c, 0xa22823, 0x90a50000, 0xa3a5005f, 0x93a6005f,
-0x38c30006, 0x3182b, 0x38c20011, 0x2102b, 0x621824, 0x1060000c,
-0x3c050008, 0x8fad0054, 0xafad0010, 0x8ec2009c, 0x3c040001, 0x24842e8c,
-0xafa20014, 0x8ec70094, 0xc00290f, 0x34a5f055, 0x100000d7, 0x0,
-0x96e20452, 0x30420008, 0x1040000c, 0x2625000e, 0x8ec20538, 0xa2102b,
-0x14400003, 0xf021, 0x8ec2053c, 0xa22823, 0x90a20000, 0x3042000f,
-0x21080, 0x10000068, 0xafa20028, 0x8ec20094, 0x8fad0054, 0x11a20013,
-0x26240010, 0x8ec30538, 0x8ec5053c, 0x83102b, 0x14400002, 0x2626000e,
-0x852023, 0x94870000, 0xc02021, 0x83102b, 0x50400001, 0x852023,
-0x90820000, 0x3042000f, 0x21080, 0xe21823, 0x307effff, 0x10000052,
-0xafa20028, 0x8ec30538, 0x2625000e, 0x8ec4053c, 0xa3102b, 0x50400001,
-0xa42823, 0x24a20014, 0x43102b, 0x10400015, 0xa03821, 0x90a20000,
-0x94a30002, 0x3042000f, 0x21080, 0x623023, 0xafa20028, 0x90a30009,
-0x24a5000c, 0x94a20000, 0x24a50002, 0x94a40000, 0x24a50002, 0xc33021,
-0xc23021, 0x94a20000, 0x94a30002, 0xc43021, 0xc23021, 0x1000002d,
-0xc33021, 0x24a50002, 0xa3102b, 0x50400001, 0xa42823, 0x94a60000,
-0xe02821, 0xa3102b, 0x50400001, 0xa42823, 0x90a20000, 0x24e50009,
-0x3042000f, 0x21080, 0xc23023, 0xafa20028, 0xa3102b, 0x50400001,
-0xa42823, 0x90a20000, 0x24e5000c, 0xc23021, 0xa3102b, 0x50400001,
-0xa42823, 0x94a20000, 0x24a50002, 0xc23021, 0xa3102b, 0x50400001,
-0xa42823, 0x94a20000, 0x24a50002, 0xc23021, 0xa3102b, 0x50400001,
-0xa42823, 0x94a20000, 0x24a50002, 0xc23021, 0xa3102b, 0x50400001,
-0xa42823, 0x94a20000, 0xc23021, 0x61c02, 0x30c2ffff, 0x623021,
-0x61402, 0x30c3ffff, 0x431021, 0x305effff, 0x8ec60538, 0x8ec7053c,
-0x226102b, 0x14400002, 0x2204021, 0x2274023, 0x2502000e, 0x46102b,
-0x1040001a, 0x1002021, 0x95060000, 0x25080002, 0x95050000, 0x25080002,
-0x95030000, 0x25080002, 0x95020000, 0x25080002, 0x95040000, 0x25080002,
-0xc53021, 0xc33021, 0xc23021, 0x95020000, 0x95030002, 0xc43021,
-0xc23021, 0xc33021, 0x61c02, 0x30c2ffff, 0x623021, 0x61c02,
-0x30c2ffff, 0x10000005, 0x623021, 0x8ec200ac, 0x40f809, 0x24050007,
-0x3046ffff, 0x30c2ffff, 0x2629821, 0x131c02, 0x3262ffff, 0x629821,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 24'
echo 'File patch-2.2.4 is continued in part 25'
echo 25 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 23 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 23; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+0x27bd0018, 0x3c030001, 0x246375a8, 0x8c620000,
+0x10400005, 0x34422000, 0x3c010001, 0xac22759c,
+0x8004f31, 0xac600000, 0x3c010001, 0xac24759c,
+0x3e00008, 0x0, 0x27bdffe0, 0x30820030,
+0xafbf0018, 0x3c010001, 0xac2275a4, 0x14400067,
+0x3c02ffff, 0x34421f0e, 0x821024, 0x14400061,
+0x24020030, 0x30822000, 0x1040005d, 0x30838000,
+0x31a02, 0x30820001, 0x21200, 0x3c040001,
+0x8c84552c, 0x621825, 0x331c2, 0x3c030001,
+0x24635508, 0x30828000, 0x21202, 0x30840001,
+0x42200, 0x441025, 0x239c2, 0x61080,
+0x431021, 0x471021, 0x90430000, 0x24020001,
+0x10620025, 0x0, 0x10600007, 0x24020002,
+0x10620013, 0x24020003, 0x1062002c, 0x3c05000f,
+0x8004f95, 0x0, 0x8f820200, 0x2403feff,
+0x431024, 0xaf820200, 0x8f820220, 0x3c03fffe,
+0x3463ffff, 0x431024, 0xaf820220, 0x3c010001,
+0xac2075c4, 0x3c010001, 0x8004fa0, 0xac2075cc,
+0x8f820200, 0x34420100, 0xaf820200, 0x8f820220,
+0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820220,
+0x24020100, 0x3c010001, 0xac2275c4, 0x3c010001,
+0x8004fa0, 0xac2075cc, 0x8f820200, 0x2403feff,
+0x431024, 0xaf820200, 0x8f820220, 0x3c030001,
+0x431025, 0xaf820220, 0x3c010001, 0xac2075c4,
+0x3c010001, 0x8004fa0, 0xac2375cc, 0x8f820200,
+0x34420100, 0xaf820200, 0x8f820220, 0x3c030001,
+0x431025, 0xaf820220, 0x24020100, 0x3c010001,
+0xac2275c4, 0x3c010001, 0x8004fa0, 0xac2375cc,
+0x34a5ffff, 0x3c040001, 0x24845388, 0xafa30010,
+0xc002407, 0xafa00014, 0x8004fa0, 0x0,
+0x24020030, 0x3c010001, 0xac2275a8, 0x8fbf0018,
+0x3e00008, 0x27bd0020, 0x0, 0x27bdffc8,
+0xafb10024, 0x808821, 0xafb3002c, 0xa09821,
+0xafb00020, 0xc08021, 0x3c040001, 0x248453a0,
+0x3c050009, 0x3c020001, 0x8c425478, 0x34a59001,
+0x2203021, 0x2603821, 0xafbf0030, 0xafb20028,
+0xa7a0001a, 0xafb00014, 0xc002407, 0xafa20010,
+0x24020002, 0x126200ed, 0x2e620003, 0x10400005,
+0x24020001, 0x1262000a, 0x3c02fffb, 0x80050a8,
+0x0, 0x24020004, 0x1262006d, 0x24020008,
+0x1262006c, 0x3c02ffec, 0x80050a8, 0x0,
+0x3442ffff, 0x2028024, 0x119140, 0x3c010001,
+0x320821, 0xac3075bc, 0x3c024000, 0x2021024,
+0x10400046, 0x1023c2, 0x30840030, 0x101382,
+0x3042000c, 0x3c030001, 0x246354a4, 0x431021,
+0x823821, 0x3c020020, 0x2021024, 0x10400006,
+0x24020100, 0x3c010001, 0x320821, 0xac2275c0,
+0x8004fe7, 0x3c020080, 0x3c010001, 0x320821,
+0xac2075c0, 0x3c020080, 0x2021024, 0x10400006,
+0x111940, 0x3c020001, 0x3c010001, 0x230821,
+0x8004ff3, 0xac2275c8, 0x111140, 0x3c010001,
+0x220821, 0xac2075c8, 0x94e30000, 0x32024000,
+0x10400003, 0xa7a30018, 0x34624000, 0xa7a20018,
+0x24040001, 0x94e20002, 0x24050004, 0x24e60002,
+0x34420001, 0xc0048ea, 0xa4e20002, 0x24040001,
+0x2821, 0xc0048ea, 0x27a60018, 0x3c020001,
+0x8c425478, 0x24110001, 0x3c010001, 0xac315484,
+0x14530004, 0x32028000, 0xc00429f, 0x0,
+0x32028000, 0x10400099, 0x0, 0xc00429f,
+0x0, 0x24020002, 0x3c010001, 0xac31547c,
+0x3c010001, 0x80050a8, 0xac225478, 0x24040001,
+0x24050004, 0x27b0001a, 0xc0048ea, 0x2003021,
+0x24040001, 0x2821, 0xc0048ea, 0x2003021,
+0x3c020001, 0x521021, 0x8c4275b4, 0x3c040001,
+0x8c845478, 0x3c03bfff, 0x3463ffff, 0x3c010001,
+0xac335484, 0x431024, 0x3c010001, 0x320821,
+0x10930078, 0xac2275b4, 0x80050a8, 0x0,
+0x3c02ffec, 0x3442ffff, 0x2028024, 0x3c020008,
+0x2028025, 0x111140, 0x3c010001, 0x220821,
+0xac3075b8, 0x3c022000, 0x2021024, 0x10400009,
+0x0, 0x3c020001, 0x8c425504, 0x14400005,
+0x24020001, 0x3c010001, 0xac225528, 0x8005049,
+0x3c024000, 0x3c010001, 0xac205528, 0x3c024000,
+0x2021024, 0x1440001c, 0x0, 0x3c020001,
+0x8c425528, 0x10400007, 0x24022020, 0x3c010001,
+0xac22552c, 0x24020001, 0x3c010001, 0x370821,
+0xac2283ac, 0x3c04bfff, 0x111940, 0x3c020001,
+0x431021, 0x8c4275b0, 0x3c050001, 0x8ca55478,
+0x3484ffff, 0x441024, 0x3c010001, 0x230821,
+0xac2275b0, 0x24020001, 0x10a20044, 0x0,
+0x80050a6, 0x0, 0x3c020001, 0x8c425528,
+0x1040001c, 0x24022000, 0x3c010001, 0xac22552c,
+0x3c0300a0, 0x2031024, 0x14430005, 0x111140,
+0x3402a000, 0x3c010001, 0x80050a1, 0xac22552c,
+0x3c030001, 0x621821, 0x8c6375b8, 0x3c020020,
+0x621024, 0x10400004, 0x24022001, 0x3c010001,
+0x80050a1, 0xac22552c, 0x3c020080, 0x621024,
+0x1040001f, 0x3402a001, 0x3c010001, 0x80050a1,
+0xac22552c, 0x3c020020, 0x2021024, 0x10400007,
+0x111940, 0x24020100, 0x3c010001, 0x230821,
+0xac2275c4, 0x8005095, 0x3c020080, 0x111140,
+0x3c010001, 0x220821, 0xac2075c4, 0x3c020080,
+0x2021024, 0x10400006, 0x111940, 0x3c020001,
+0x3c010001, 0x230821, 0x80050a1, 0xac2275cc,
+0x111140, 0x3c010001, 0x220821, 0xac2075cc,
+0x3c030001, 0x8c635478, 0x24020001, 0x10620003,
+0x0, 0xc00429f, 0x0, 0x8fbf0030,
+0x8fb3002c, 0x8fb20028, 0x8fb10024, 0x8fb00020,
+0x3e00008, 0x27bd0038, 0x27bdffd0, 0xafb40028,
+0x80a021, 0xafb20020, 0x9021, 0xafb30024,
+0x9821, 0xafb1001c, 0x8821, 0x24020002,
+0xafbf002c, 0xafb00018, 0xa7a00012, 0x10a20068,
+0xa7a00010, 0x2ca20003, 0x10400005, 0x24020001,
+0x10a2000a, 0x148140, 0x8005172, 0x2201021,
+0x24020004, 0x10a2005e, 0x24020008, 0x10a2005d,
+0x142940, 0x8005172, 0x2201021, 0x3c030001,
+0x701821, 0x8c6375bc, 0x3c024000, 0x621024,
+0x14400009, 0x24040001, 0x3c027fff, 0x3442ffff,
+0x628824, 0x3c010001, 0x300821, 0xac3175b4,
+0x8005172, 0x2201021, 0x24050001, 0xc0048a8,
+0x27a60010, 0x24040001, 0x24050001, 0xc0048a8,
+0x27a60010, 0x97a20010, 0x30420004, 0x10400034,
+0x3c114000, 0x3c030001, 0x8c635540, 0x24020003,
+0x10620008, 0x2c620004, 0x14400029, 0x3c028000,
+0x24020004, 0x10620014, 0x24040001, 0x8005115,
+0x3c028000, 0x24040001, 0x24050011, 0x27b00012,
+0xc0048a8, 0x2003021, 0x24040001, 0x24050011,
+0xc0048a8, 0x2003021, 0x97a30012, 0x30624000,
+0x10400002, 0x3c130010, 0x3c130008, 0x3c120001,
+0x8005112, 0x30628000, 0x24050014, 0x27b00012,
+0xc0048a8, 0x2003021, 0x24040001, 0x24050014,
+0xc0048a8, 0x2003021, 0x97a30012, 0x30621000,
+0x10400002, 0x3c130010, 0x3c130008, 0x3c120001,
+0x30620800, 0x54400001, 0x3c120002, 0x3c028000,
+0x2221025, 0x2531825, 0x800511f, 0x438825,
+0x3c110001, 0x2308821, 0x8e3175bc, 0x3c027fff,
+0x3442ffff, 0x2228824, 0x141140, 0x3c010001,
+0x220821, 0xac3175b4, 0x8005172, 0x2201021,
+0x142940, 0x3c030001, 0x651821, 0x8c6375b8,
+0x3c024000, 0x621024, 0x14400008, 0x3c027fff,
+0x3442ffff, 0x628824, 0x3c010001, 0x250821,
+0xac3175b0, 0x8005172, 0x2201021, 0x3c020001,
+0x8c425488, 0x10400033, 0x3c11c00c, 0x3c020001,
+0x8c425504, 0x3c04c00c, 0x34842000, 0x3c030001,
+0x8c635528, 0x2102b, 0x21023, 0x441024,
+0x10600003, 0x518825, 0x3c022000, 0x2228825,
+0x3c020001, 0x451021, 0x8c4275c4, 0x10400003,
+0x3c020020, 0x800514f, 0x2228825, 0x3c02ffdf,
+0x3442ffff, 0x2228824, 0x141140, 0x3c010001,
+0x220821, 0x8c2275cc, 0x10400003, 0x3c020080,
+0x800515a, 0x2228825, 0x3c02ff7f, 0x3442ffff,
+0x2228824, 0x3c020001, 0x8c4254f0, 0x10400002,
+0x3c020800, 0x2228825, 0x3c020001, 0x8c4254f4,
+0x10400002, 0x3c020400, 0x2228825, 0x3c020001,
+0x8c4254f8, 0x10400006, 0x3c020100, 0x800516d,
+0x2228825, 0x3c027fff, 0x3442ffff, 0x628824,
+0x141140, 0x3c010001, 0x220821, 0xac3175b0,
+0x2201021, 0x8fbf002c, 0x8fb40028, 0x8fb30024,
+0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x3e00008,
+0x27bd0030, 0x27bdffd8, 0xafb40020, 0x80a021,
+0xafbf0024, 0xafb3001c, 0xafb20018, 0xafb10014,
+0xafb00010, 0x8f900200, 0x3c030001, 0x8c635478,
+0x8f930220, 0x24020002, 0x106200b4, 0x2c620003,
+0x10400005, 0x24020001, 0x1062000a, 0x141940,
+0x800523c, 0x0, 0x24020004, 0x1062005a,
+0x24020008, 0x10620059, 0x149140, 0x800523c,
+0x0, 0x3c040001, 0x832021, 0x8c8475bc,
+0x3c110001, 0x2238821, 0x8e3175b4, 0x3c024000,
+0x821024, 0x1040003e, 0x3c020008, 0x2221024,
+0x10400020, 0x36100002, 0x3c020001, 0x431021,
+0x8c4275c0, 0x10400005, 0x36100020, 0x36100100,
+0x3c020020, 0x80051b1, 0x2228825, 0x2402feff,
+0x2028024, 0x3c02ffdf, 0x3442ffff, 0x2228824,
+0x141140, 0x3c010001, 0x220821, 0x8c2275c8,
+0x10400005, 0x3c020001, 0x2629825, 0x3c020080,
+0x80051d0, 0x2228825, 0x3c02fffe, 0x3442ffff,
+0x2629824, 0x3c02ff7f, 0x3442ffff, 0x80051d0,
+0x2228824, 0x2402fedf, 0x2028024, 0x3c02fffe,
+0x3442ffff, 0x2629824, 0x3c02ff5f, 0x3442ffff,
+0x2228824, 0x3c010001, 0x230821, 0xac2075c0,
+0x3c010001, 0x230821, 0xac2075c8, 0xc0047cc,
+0x0, 0xaf900200, 0xaf930220, 0x8f820220,
+0x2403fffb, 0x431024, 0xaf820220, 0x8f820220,
+0x34420002, 0xaf820220, 0x80051e7, 0x141140,
+0x8f820200, 0x2403fffd, 0x431024, 0xc0047cc,
+0xaf820200, 0x3c02bfff, 0x3442ffff, 0xc00429f,
+0x2228824, 0x141140, 0x3c010001, 0x220821,
+0x800523c, 0xac3175b4, 0x149140, 0x3c040001,
+0x922021, 0x8c8475b8, 0x3c110001, 0x2328821,
+0x8e3175b0, 0x3c024000, 0x821024, 0x14400011,
+0x0, 0x3c020001, 0x8c425528, 0x14400006,
+0x3c02bfff, 0x8f820200, 0x34420002, 0xc0047cc,
+0xaf820200, 0x3c02bfff, 0x3442ffff, 0xc00429f,
+0x2228824, 0x3c010001, 0x320821, 0x800523c,
+0xac3175b0, 0x3c020001, 0x8c425528, 0x10400005,
+0x3c020020, 0x3c020001, 0x8c425504, 0x1040002b,
+0x3c020020, 0x821024, 0x10400007, 0x36100020,
+0x24020100, 0x3c010001, 0x320821, 0xac2275c4,
+0x800521c, 0x36100100, 0x3c010001, 0x320821,
+0xac2075c4, 0x2402feff, 0x2028024, 0x3c020080,
+0x821024, 0x10400007, 0x141940, 0x3c020001,
+0x3c010001, 0x230821, 0xac2275cc, 0x800522d,
+0x2629825, 0x141140, 0x3c010001, 0x220821,
+0xac2075cc, 0x3c02fffe, 0x3442ffff, 0x2629824,
+0xc0047cc, 0x0, 0xaf900200, 0xaf930220,
+0x8f820220, 0x2403fffb, 0x431024, 0xaf820220,
+0x8f820220, 0x34420002, 0xaf820220, 0x141140,
+0x3c010001, 0x220821, 0xac3175b0, 0x8fbf0024,
+0x8fb40020, 0x8fb3001c, 0x8fb20018, 0x8fb10014,
+0x8fb00010, 0x3e00008, 0x27bd0028, 0x0 };
X u32 tigonFwRodata[(MAX_RODATA_LEN/4) + 1] __initdata = {
-0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73,
-0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f66, 0x776d6169,
-0x6e2e632c, 0x7620312e, 0x312e322e, 0x31312031, 0x3939382f, 0x30342f32,
-0x37203232, 0x3a31333a, 0x34322073, 0x6875616e, 0x67204578, 0x70202400,
-0x7468655f, 0x4441574e, 0x0, 0x53544143, 0x4b5f3120, 0x0,
-0x42616453, 0x6e64526e, 0x67000000, 0x3f456e71, 0x45767400, 0x3f6e6f51,
-0x64457650, 0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x496c6c43,
-0x6f6e6652, 0x78000000, 0x53656e64, 0x436b5375, 0x6d000000, 0x52656376,
-0x566c616e, 0x0, 0x0, 0x0, 0x24486561, 0x6465723a,
-0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963,
-0x2f66772f, 0x636f6d6d, 0x6f6e2f74, 0x696d6572, 0x2e632c76, 0x20312e31,
-0x2e322e37, 0x20313939, 0x382f3034, 0x2f323720, 0x32323a31, 0x333a3439,
-0x20736875, 0x616e6720, 0x45787020, 0x24000000, 0x542d446d, 0x61526431,
-0x0, 0x542d446d, 0x61424200, 0x542d446d, 0x61320000, 0x3f6e6f51,
-0x64547845, 0x0, 0x3f6e6f51, 0x64527845, 0x0, 0x656e714d,
-0x45765046, 0x61696c00, 0x656e714d, 0x45764661, 0x696c0000, 0x6661696c,
-0x456e454d, 0x0, 0x3f456e71, 0x45767400, 0x3f6e6f51, 0x64457650,
-0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x0, 0x0,
-0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73,
-0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f63, 0x6f6d6d61,
-0x6e642e63, 0x2c762031, 0x2e312e31, 0x362e3120, 0x31393938, 0x2f31312f,
-0x31392030, 0x323a3339, 0x3a323520, 0x73687561, 0x6e672045, 0x78702024,
-0x0, 0x3f4d626f, 0x78457674, 0x0, 0x4e4f636f, 0x6d616e64,
-0x0, 0x68737465, 0x5f455252, 0x0, 0x412d4572, 0x72427563,
-0x0, 0x4552524f, 0x522d4164, 0x64000000, 0x656e714d, 0x45765046,
-0x61696c00, 0x656e714d, 0x45764661, 0x696c0000, 0x6661696c, 0x456e454d,
-0x0, 0x442d4572, 0x724c6173, 0x74000000, 0x442d4572, 0x72320000,
-0x6d437374, 0x4d644552, 0x52000000, 0x70726f6d, 0x4d644552, 0x52000000,
-0x46696c74, 0x4d644552, 0x52000000, 0x636d645f, 0x45525200, 0x3f456e71,
-0x45767400, 0x3f6e6f51, 0x64457650, 0x0, 0x6576526e, 0x6746756c,
-0x6c000000, 0x0, 0x6e90, 0x7fac, 0x6e28, 0x871c,
-0x8298, 0x8768, 0x8768, 0x6f44, 0x7684, 0x7efc,
-0x8098, 0x8064, 0x8768, 0x7e60, 0x80bc, 0x6e54,
-0x81bc, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563,
-0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d,
-0x6f6e2f64, 0x6d612e63, 0x2c762031, 0x2e312e32, 0x2e332031, 0x3939382f,
-0x30342f32, 0x37203232, 0x3a31333a, 0x34312073, 0x6875616e, 0x67204578,
-0x70202400, 0x646d6172, 0x6441544e, 0x0, 0x646d6177, 0x7241544e,
-0x0, 0x0, 0x0, 0x0, 0x24486561, 0x6465723a,
-0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963,
-0x2f66772f, 0x636f6d6d, 0x6f6e2f74, 0x72616365, 0x2e632c76, 0x20312e31,
-0x2e322e32, 0x20313939, 0x382f3034, 0x2f323720, 0x32323a31, 0x333a3530,
-0x20736875, 0x616e6720, 0x45787020, 0x24000000, 0x24486561, 0x6465723a,
-0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963,
-0x2f66772f, 0x636f6d6d, 0x6f6e2f64, 0x6174612e, 0x632c7620, 0x312e312e,
-0x322e3220, 0x31393938, 0x2f30342f, 0x32372032, 0x323a3133, 0x3a343020,
-0x73687561, 0x6e672045, 0x78702024, 0x0, 0x46575f56, 0x45525349,
-0x4f4e3a20, 0x2331204d, 0x6f6e2044, 0x65632037, 0x2031343a, 0x35363a33,
-0x30205053, 0x54203139, 0x39380000, 0x46575f43, 0x4f4d5049, 0x4c455f54,
-0x494d453a, 0x2031343a, 0x35363a33, 0x30000000, 0x46575f43, 0x4f4d5049,
-0x4c455f42, 0x593a2064, 0x65767263, 0x73000000, 0x46575f43, 0x4f4d5049,
-0x4c455f48, 0x4f53543a, 0x20636f6d, 0x70757465, 0x0, 0x46575f43,
-0x4f4d5049, 0x4c455f44, 0x4f4d4149, 0x4e3a2065, 0x6e672e61, 0x6374656f,
-0x6e2e636f, 0x6d000000, 0x46575f43, 0x4f4d5049, 0x4c45523a, 0x20676363,
-0x20766572, 0x73696f6e, 0x20322e37, 0x2e320000, 0x0, 0x0,
-0x0, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563,
-0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d,
-0x6f6e2f6d, 0x656d2e63, 0x2c762031, 0x2e312e32, 0x2e322031, 0x3939382f,
-0x30342f32, 0x37203232, 0x3a31333a, 0x34342073, 0x6875616e, 0x67204578,
-0x70202400, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563,
-0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d,
-0x6f6e2f73, 0x656e642e, 0x632c7620, 0x312e312e, 0x322e3820, 0x31393938,
-0x2f30342f, 0x32372032, 0x323a3133, 0x3a343820, 0x73687561, 0x6e672045,
-0x78702024, 0x0, 0x736e6464, 0x654e6f51, 0x20000000, 0x6e6f454e,
-0x515f5458, 0x0, 0x736e6464, 0x744e6f51, 0x20000000, 0x3f6e6f51,
-0x64547845, 0x0, 0x756e6b72, 0x64747970, 0x65000000, 0x0,
-0xbc88, 0xbc88, 0xbd30, 0xae2c, 0xb038, 0xbd30,
-0xbd30, 0xbd30, 0xbd30, 0xbd30, 0xbd30, 0xbd30,
-0xbd30, 0xbd30, 0xbd30, 0xbd30, 0xbd30, 0xbd30,
-0xbd30, 0xb020, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563,
-0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d,
-0x6f6e2f72, 0x6563762e, 0x632c7620, 0x312e312e, 0x322e3139, 0x20313939,
-0x382f3037, 0x2f323420, 0x32313a33, 0x303a3035, 0x20736875, 0x616e6720,
-0x45787020, 0x24000000, 0x706b5278, 0x45525200, 0x66726d32, 0x4c617267,
-0x65000000, 0x72784e6f, 0x52784264, 0x0, 0x72785144, 0x6d614446,
-0x0, 0x72785144, 0x6d614246, 0x0, 0x3f6e6f51, 0x64527845,
-0x0, 0x706b5278, 0x45525273, 0x0, 0x66726d32, 0x4c726753,
-0x0, 0x72784e6f, 0x42645300, 0x3f724264, 0x446d6146, 0x0,
-0x3f724a42, 0x64446d46, 0x0, 0x0, 0xf638, 0xf638,
-0xf638, 0xf638, 0xf638, 0xf638, 0xf638, 0xf638,
-0xf638, 0xf638, 0xf638, 0xf638, 0xf638, 0xf638,
-0xf638, 0xf630, 0xf630, 0xf630, 0x572d444d, 0x41456e46,
-0x0, 0x0, 0xfd80, 0x1011c, 0xfd9c, 0x1011c,
-0x1011c, 0x1011c, 0x1011c, 0x1011c, 0x1011c, 0xf6c4,
-0x1011c, 0x1011c, 0x1011c, 0x1011c, 0x1011c, 0x10114,
-0x10114, 0x10114, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563,
-0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d,
-0x6f6e2f6d, 0x61632e63, 0x2c762031, 0x2e312e32, 0x2e313220, 0x31393938,
-0x2f30342f, 0x32372032, 0x323a3133, 0x3a343220, 0x73687561, 0x6e672045,
-0x78702024, 0x0, 0x6d616374, 0x7841544e, 0x0, 0x4e745379,
-0x6e264c6b, 0x0, 0x72656d61, 0x73737274, 0x0, 0x6c696e6b,
-0x444f574e, 0x0, 0x656e714d, 0x45765046, 0x61696c00, 0x656e714d,
-0x45764661, 0x696c0000, 0x6661696c, 0x456e454d, 0x0, 0x6c696e6b,
-0x55500000, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563,
-0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f66772f, 0x636f6d6d,
-0x6f6e2f63, 0x6b73756d, 0x2e632c76, 0x20312e31, 0x2e322e32, 0x20313939,
-0x382f3034, 0x2f323720, 0x32323a31, 0x333a3339, 0x20736875, 0x616e6720,
-0x45787020, 0x24000000, 0x50726f62, 0x65506879, 0x0, 0x6c6e6b41,
-0x53535254, 0x0, 0x11880, 0x118b8, 0x118dc, 0x11910,
-0x1193c, 0x11950, 0x1198c, 0x11cc4, 0x11a64, 0x11aa4,
-0x11ad4, 0x11b14, 0x11b44, 0x11b80, 0x11bc4, 0x11cc4,
-0x0, 0x0, 0x1215c, 0x1222c, 0x12304, 0x123d4,
-0x12430, 0x1250c, 0x12534, 0x12610, 0x12638, 0x127e0,
-0x12808, 0x129b0, 0x12ba8, 0x12e3c, 0x12d50, 0x12e3c,
-0x12e68, 0x129d8, 0x12b80, 0x0, 0x13254, 0x132b4,
-0x13330, 0x1335c, 0x133ac, 0x133e8, 0x1341c, 0x134a8,
-0x13560, 0x13630, 0x13670, 0x136f4, 0x13750, 0x13884,
-0x646f4261, 0x73655067, 0x0, 0x0, 0x0, 0x0,
-0x73746d61, 0x634c4e4b, 0x0, 0x0, 0x0 };
+0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f66,
+0x776d6169, 0x6e2e632c, 0x7620312e, 0x312e322e,
+0x31312031, 0x3939382f, 0x30342f32, 0x37203232,
+0x3a31333a, 0x34322073, 0x6875616e, 0x67204578,
+0x70202400, 0x7468655f, 0x4441574e, 0x0,
+0x53544143, 0x4b5f3120, 0x0, 0x42616453,
+0x6e64526e, 0x67000000, 0x3f456e71, 0x45767400,
+0x3f6e6f51, 0x64457650, 0x0, 0x6576526e,
+0x6746756c, 0x6c000000, 0x496c6c43, 0x6f6e6652,
+0x78000000, 0x53656e64, 0x436b5375, 0x6d000000,
+0x52656376, 0x566c616e, 0x0, 0x0,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f74,
+0x696d6572, 0x2e632c76, 0x20312e31, 0x2e322e38,
+0x20313939, 0x382f3037, 0x2f333120, 0x31373a35,
+0x383a3435, 0x20736875, 0x616e6720, 0x45787020,
+0x24000000, 0x542d446d, 0x61526431, 0x0,
+0x542d446d, 0x61424200, 0x542d446d, 0x61320000,
+0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51,
+0x64527845, 0x0, 0x656e714d, 0x45765046,
+0x61696c00, 0x656e714d, 0x45764661, 0x696c0000,
+0x6661696c, 0x456e454d, 0x0, 0x3f456e71,
+0x45767400, 0x3f6e6f51, 0x64457650, 0x0,
+0x6576526e, 0x6746756c, 0x6c000000, 0x0,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f63,
+0x6f6d6d61, 0x6e642e63, 0x2c762031, 0x2e312e32,
+0x2e313020, 0x31393938, 0x2f31312f, 0x31382031,
+0x373a3131, 0x3a313820, 0x73687561, 0x6e672045,
+0x78702024, 0x0, 0x3f4d626f, 0x78457674,
+0x0, 0x4e4f636f, 0x6d616e64, 0x0,
+0x68737465, 0x5f455252, 0x0, 0x412d4572,
+0x72427563, 0x0, 0x4552524f, 0x522d4164,
+0x64000000, 0x656e714d, 0x45765046, 0x61696c00,
+0x656e714d, 0x45764661, 0x696c0000, 0x6661696c,
+0x456e454d, 0x0, 0x442d4572, 0x724c6173,
+0x74000000, 0x442d4572, 0x72320000, 0x6d437374,
+0x4d644552, 0x52000000, 0x70726f6d, 0x4d644552,
+0x52000000, 0x46696c74, 0x4d644552, 0x52000000,
+0x636d645f, 0x45525200, 0x3f456e71, 0x45767400,
+0x3f6e6f51, 0x64457650, 0x0, 0x6576526e,
+0x6746756c, 0x6c000000, 0x0, 0x6ea0,
+0x7fbc, 0x6e38, 0x8734, 0x82b0,
+0x8780, 0x8780, 0x6f54, 0x7694,
+0x7f0c, 0x80a8, 0x8074, 0x8780,
+0x7e70, 0x80cc, 0x6e64, 0x81cc,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f64,
+0x6d612e63, 0x2c762031, 0x2e312e32, 0x2e332031,
+0x3939382f, 0x30342f32, 0x37203232, 0x3a31333a,
+0x34312073, 0x6875616e, 0x67204578, 0x70202400,
+0x646d6172, 0x6441544e, 0x0, 0x646d6177,
+0x7241544e, 0x0, 0x0, 0x0,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f74,
+0x72616365, 0x2e632c76, 0x20312e31, 0x2e322e32,
+0x20313939, 0x382f3034, 0x2f323720, 0x32323a31,
+0x333a3530, 0x20736875, 0x616e6720, 0x45787020,
+0x24000000, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f64,
+0x6174612e, 0x632c7620, 0x312e312e, 0x322e3220,
+0x31393938, 0x2f30342f, 0x32372032, 0x323a3133,
+0x3a343020, 0x73687561, 0x6e672045, 0x78702024,
+0x0, 0x46575f56, 0x45525349, 0x4f4e3a20,
+0x2331204d, 0x6f6e2046, 0x65622031, 0x2031363a,
+0x35393a30, 0x31205053, 0x54203139, 0x39390000,
+0x46575f43, 0x4f4d5049, 0x4c455f54, 0x494d453a,
+0x2031363a, 0x35393a30, 0x31000000, 0x46575f43,
+0x4f4d5049, 0x4c455f42, 0x593a2064, 0x65767263,
+0x73000000, 0x46575f43, 0x4f4d5049, 0x4c455f48,
+0x4f53543a, 0x20636f6d, 0x70757465, 0x0,
+0x46575f43, 0x4f4d5049, 0x4c455f44, 0x4f4d4149,
+0x4e3a2065, 0x6e672e61, 0x6374656f, 0x6e2e636f,
+0x6d000000, 0x46575f43, 0x4f4d5049, 0x4c45523a,
+0x20676363, 0x20766572, 0x73696f6e, 0x20322e37,
+0x2e320000, 0x0, 0x0, 0x0,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f6d,
+0x656d2e63, 0x2c762031, 0x2e312e32, 0x2e322031,
+0x3939382f, 0x30342f32, 0x37203232, 0x3a31333a,
+0x34342073, 0x6875616e, 0x67204578, 0x70202400,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f73,
+0x656e642e, 0x632c7620, 0x312e312e, 0x322e3131,
+0x20313939, 0x382f3132, 0x2f323220, 0x31373a31,
+0x373a3535, 0x20736875, 0x616e6720, 0x45787020,
+0x24000000, 0x736e6464, 0x654e6f51, 0x20000000,
+0x6e6f454e, 0x515f5458, 0x0, 0x736e6464,
+0x744e6f51, 0x20000000, 0x3f6e6f51, 0x64547845,
+0x0, 0x756e6b72, 0x64747970, 0x65000000,
+0x0, 0xacdc, 0xacdc, 0xadac,
+0xaac0, 0xaac0, 0xadac, 0xadac,
+0xadac, 0xadac, 0xadac, 0xadac,
+0xadac, 0xadac, 0xadac, 0xadac,
+0xadac, 0xadac, 0xadac, 0xad8c,
+0x0, 0xbcb8, 0xbcb8, 0xbd80,
+0xae5c, 0xb068, 0xbd80, 0xbd80,
+0xbd80, 0xbd80, 0xbd80, 0xbd80,
+0xbd80, 0xbd80, 0xbd80, 0xbd80,
+0xbd80, 0xbd80, 0xbd80, 0xbd64,
+0xb050, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f72,
+0x6563762e, 0x632c7620, 0x312e312e, 0x322e3139,
+0x20313939, 0x382f3037, 0x2f323420, 0x32313a33,
+0x303a3035, 0x20736875, 0x616e6720, 0x45787020,
+0x24000000, 0x706b5278, 0x45525200, 0x66726d32,
+0x4c617267, 0x65000000, 0x72784e6f, 0x52784264,
+0x0, 0x72785144, 0x6d614446, 0x0,
+0x72785144, 0x6d614246, 0x0, 0x3f6e6f51,
+0x64527845, 0x0, 0x706b5278, 0x45525273,
+0x0, 0x66726d32, 0x4c726753, 0x0,
+0x72784e6f, 0x42645300, 0x3f724264, 0x446d6146,
+0x0, 0x3f724a42, 0x64446d46, 0x0,
+0x0, 0xf688, 0xf688, 0xf688,
+0xf688, 0xf688, 0xf688, 0xf688,
+0xf688, 0xf688, 0xf688, 0xf688,
+0xf688, 0xf688, 0xf688, 0xf688,
+0xf680, 0xf680, 0xf680, 0x572d444d,
+0x41456e46, 0x0, 0x0, 0xfdd0,
+0x1016c, 0xfdec, 0x1016c, 0x1016c,
+0x1016c, 0x1016c, 0x1016c, 0x1016c,
+0xf714, 0x1016c, 0x1016c, 0x1016c,
+0x1016c, 0x1016c, 0x10164, 0x10164,
+0x10164, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f6d,
+0x61632e63, 0x2c762031, 0x2e312e32, 0x2e313220,
+0x31393938, 0x2f30342f, 0x32372032, 0x323a3133,
+0x3a343220, 0x73687561, 0x6e672045, 0x78702024,
+0x0, 0x6d616374, 0x7841544e, 0x0,
+0x4e745379, 0x6e264c6b, 0x0, 0x72656d61,
+0x73737274, 0x0, 0x6c696e6b, 0x444f574e,
+0x0, 0x656e714d, 0x45765046, 0x61696c00,
+0x656e714d, 0x45764661, 0x696c0000, 0x6661696c,
+0x456e454d, 0x0, 0x6c696e6b, 0x55500000,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f66772f, 0x636f6d6d, 0x6f6e2f63,
+0x6b73756d, 0x2e632c76, 0x20312e31, 0x2e322e32,
+0x20313939, 0x382f3034, 0x2f323720, 0x32323a31,
+0x333a3339, 0x20736875, 0x616e6720, 0x45787020,
+0x24000000, 0x50726f62, 0x65506879, 0x0,
+0x6c6e6b41, 0x53535254, 0x0, 0x11994,
+0x119cc, 0x119e4, 0x11a18, 0x11a44,
+0x11a58, 0x11a94, 0x11e04, 0x11b6c,
+0x11bac, 0x11bd8, 0x11c18, 0x11c48,
+0x11c84, 0x11cb8, 0x11e04, 0x12048,
+0x12060, 0x12088, 0x120a8, 0x120d0,
+0x12200, 0x12228, 0x1226c, 0x12294,
+0x0, 0x124fc, 0x125cc, 0x126a4,
+0x12774, 0x127d0, 0x128ac, 0x128d4,
+0x129b0, 0x129d8, 0x12b80, 0x12ba8,
+0x12d50, 0x12f48, 0x131dc, 0x130f0,
+0x131dc, 0x13208, 0x12d78, 0x12f20,
+0x0, 0x135f4, 0x13638, 0x136d0,
+0x1371c, 0x1378c, 0x13824, 0x13858,
+0x138e0, 0x13978, 0x13a48, 0x13a88,
+0x13b0c, 0x13b30, 0x13c64, 0x646f4261,
+0x73655067, 0x0, 0x0, 0x0,
+0x0, 0x73746d61, 0x634c4e4b, 0x0,
+0x0, 0x0 };
+u32 tigonFwData[(MAX_DATA_LEN/4) + 1] __initdata = {
+0x416c7465,
+0x6f6e2041, 0x63654e49, 0x43205600, 0x416c7465,
+0x6f6e2041, 0x63654e49, 0x43205600, 0x42424242,
+0x0, 0x0, 0x0, 0x135418,
+0x13e7fc, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x60cf00,
+0x60, 0xcf000000, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x3, 0x0,
+0x1, 0x0, 0x0, 0x1,
+0x0, 0x0, 0x0, 0x1,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x1000000, 0x21000000, 0x12000140,
+0x0, 0x0, 0x20000000, 0x120000a0,
+0x0, 0x12000060, 0x12000180, 0x120001e0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x2,
+0x0, 0x0, 0x30001, 0x1,
+0x30201, 0x0, 0x0, 0x0 };
X /* Generated by genfw.c */
X int tigon2FwReleaseMajor = 0xc;
-int tigon2FwReleaseMinor = 0x1;
-int tigon2FwReleaseFix = 0x6;
-u32 tigon2FwStartAddr = 0x4000;
-u32 tigon2FwTextAddr = 0x4000;
-int tigon2FwTextLen = 0xe5b0;
-u32 tigon2FwDataAddr = 0x13330;
+int tigon2FwReleaseMinor = 0x3;
+int tigon2FwReleaseFix = 0x5;
+u32 tigon2FwStartAddr = 0x00004000;
+u32 tigon2FwTextAddr = 0x00004000;
+int tigon2FwTextLen = 0xec80;
+u32 tigon2FwRodataAddr = 0x00012c80;
+int tigon2FwRodataLen = 0xfb0;
+u32 tigon2FwDataAddr = 0x00013c50;
X int tigon2FwDataLen = 0x170;
-u32 tigon2FwRodataAddr = 0x125b0;
-int tigon2FwRodataLen = 0xd60;
-u32 tigon2FwBssAddr = 0x13550;
+u32 tigon2FwSbssAddr = 0x00013dc0;
+int tigon2FwSbssLen = 0xbc;
+u32 tigon2FwBssAddr = 0x00013e80;
X int tigon2FwBssLen = 0x20c0;
-u32 tigon2FwSbssAddr = 0x134a0;
-int tigon2FwSbssLen = 0xa8;
X u32 tigon2FwText[(MAX_TEXT_LEN/4) + 1] __initdata = {
-0x0, 0x10000003, 0x0, 0xd, 0xd, 0x3c1d0001,
-0x8fbd3380, 0x3a0f021, 0x3c100000, 0x26104000, 0xc0010c0, 0x0,
-0xd, 0x3c1d0001, 0x8fbd3384, 0x3a0f021, 0x3c100000, 0x26104000,
-0xc0016fe, 0x0, 0xd, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x2000008, 0x0,
-0x8001671, 0x3c0a0001, 0x8001671, 0x3c0a0002, 0x8001671, 0x0,
-0x80029b8, 0x0, 0x8001671, 0x3c0a0003, 0x8001671, 0x3c0a0004,
-0x8003134, 0x0, 0x80019ba, 0x0, 0x8003653, 0x0,
-0x80035e2, 0x0, 0x8001671, 0x3c0a0006, 0x8001671, 0x3c0a0007,
-0x8001671, 0x3c0a0008, 0x8001671, 0x3c0a0009, 0x80036c4, 0x0,
-0x8002bf9, 0x0, 0x8001671, 0x3c0a000b, 0x8001671, 0x3c0a000c,
-0x8001671, 0x3c0a000d, 0x80026ee, 0x0, 0x80026ad, 0x0,
-0x8001671, 0x3c0a000e, 0x8001f40, 0x0, 0x80018c9, 0x0,
-0x800196b, 0x0, 0x8003943, 0x0, 0x800392d, 0x0,
-0x8001671, 0x0, 0x800184d, 0x0, 0x8001893, 0x0,
-0x8001671, 0x3c0a0013, 0x8001671, 0x3c0a0014, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x27bdffe0, 0x3c1cc000, 0xafbf0018, 0xc0028f4, 0xd021, 0x8f820040,
-0x3c03f000, 0x431824, 0x3c025000, 0x10620005, 0x3c026000, 0x1062001a,
-0x24020003, 0x10000030, 0x0, 0x8f820050, 0x3c030010, 0x431024,
-0x50400013, 0x24020003, 0x3c030001, 0x2463c360, 0x3c020001, 0x2442c3e4,
-0x431023, 0x3c010001, 0xac233518, 0x8f830140, 0x3c040001, 0x2484c3ec,
-0x3c010001, 0xac223504, 0x3c020001, 0x2442c454, 0x3c010001, 0xac203338,
-0x10000013, 0x441023, 0x3c030001, 0x2463c45c, 0xaf8200ec, 0x3c020001,
-0x2442c498, 0x431023, 0x3c010001, 0xac233518, 0x8f830140, 0x3c040001,
-0x2484c4a0, 0x3c010001, 0xac223504, 0x3c020001, 0x2442c4c8, 0x441023,
-0x3c0100c0, 0xac203ffc, 0x3c010001, 0xac243510, 0x3c010001, 0xac22350c,
-0x34630004, 0xaf830140, 0xc00169c, 0x0, 0x402821, 0x3c010001,
-0xac2534b0, 0x3c020008, 0x10a2002c, 0x45102b, 0x14400006, 0x3c020010,
-0x3c020004, 0x10a20007, 0x3c02ffff, 0x1000005b, 0x0, 0x10a20045,
-0x3c030003, 0x10000057, 0x0, 0x34422e10, 0x3c030001, 0x24635610,
-0x3c040001, 0x8c843334, 0xa31823, 0x14800002, 0x622821, 0x24a5faa8,
-0x2403f000, 0xa32824, 0x51082, 0x431024, 0x3c010001, 0xac2234a0,
-0xa21023, 0x3c010001, 0xac2234a8, 0x3402a000, 0x3c010001, 0xac2234b8,
-0x24020008, 0x3c010001, 0xac2234c0, 0x2402001f, 0x3c010001, 0xac2234c8,
-0x24020016, 0x3c010001, 0xac2234ac, 0x10000041, 0x3c08ffff, 0x3c02ffff,
-0x34422e10, 0x3c030001, 0x24635610, 0x3c040001, 0x8c843334, 0xa31823,
-0x14800002, 0x622821, 0x24a5faa8, 0x2403f000, 0xa32824, 0x3c040003,
-0x34842000, 0x510c2, 0x431024, 0x3c010001, 0xac2234a0, 0xa21023,
-0x3c010001, 0xac2234a8, 0x24020008, 0x3c010001, 0xac2234c0, 0x2402001f,
-0x3c010001, 0xac2234c8, 0x24020016, 0x3c010001, 0xac2434b8, 0x3c010001,
-0xac2234ac, 0x1000001f, 0x3c08ffff, 0x34632000, 0x3c020001, 0x3c010001,
-0xac2234a0, 0x3c020007, 0x3c010001, 0xac2234a8, 0x24020008, 0x3c010001,
-0xac2234c0, 0x2402001f, 0x3c010001, 0xac2234c8, 0x24020016, 0x3c010001,
-0xac2334b8, 0x3c010001, 0xac2234ac, 0x1000000b, 0x3c08ffff, 0x3c040001,
-0x24842670, 0x3c050001, 0x8ca534b0, 0x3021, 0x3821, 0xafa00010,
-0xc00290f, 0xafa00014, 0x3c08ffff, 0x35087e10, 0x3c0500bf, 0x34a5f000,
-0x3c0600bf, 0x34c6e000, 0x3c070001, 0x8ce734a0, 0x3c040001, 0x8c8434a8,
-0x3c030020, 0x3c090001, 0x8d293330, 0x671023, 0x441023, 0x245bb000,
-0x641823, 0x3c010001, 0xac2334b4, 0x671823, 0x27620ffc, 0x3c010001,
-0xac223380, 0x27621ffc, 0xbb2823, 0xdb3023, 0x3c010001, 0xac2334a4,
-0x3c010001, 0xac223384, 0xaf850150, 0xaf860250, 0x1120001b, 0x368b821,
-0x33620fff, 0x10400008, 0x24050019, 0x3c040001, 0x2484267c, 0x3603021,
-0x3821, 0xafa00010, 0xc00290f, 0xafa00014, 0x3c1d0001, 0x8fbd333c,
-0x3a0f021, 0xc001684, 0x0, 0x3c020001, 0x8c423340, 0x3c030001,
-0x8c633344, 0x2442fe00, 0x24630200, 0x3c010001, 0xac223340, 0x3c010001,
-0x10000004, 0xac233344, 0x3c1d0001, 0x8fbd3380, 0x3a0f021, 0x3c020001,
-0x8c423334, 0x1040000d, 0x26f6faa8, 0x3c020001, 0x8c423340, 0x3c030001,
-0x8c633344, 0x3c160001, 0x8ed63344, 0x2442faa8, 0x24630558, 0x3c010001,
-0xac223340, 0x3c010001, 0xac233344, 0x3c020001, 0x8c423338, 0x14400003,
-0x0, 0x3c010001, 0xac203340, 0xc0011ca, 0x0, 0x8fbf0018,
-0x3e00008, 0x27bd0020, 0x27bdff98, 0xafbf0060, 0xafbe005c, 0xafb50058,
-0xafb30054, 0xafb10050, 0x8f820240, 0x3c030001, 0x431025, 0xaf820240,
-0x3c020001, 0x8c423340, 0x3c030001, 0x8c633344, 0xaf800048, 0x8f840048,
-0x3c120000, 0x26524100, 0xa3a00047, 0xafa20034, 0x14800005, 0xafa30030,
-0xaf800048, 0x8f820048, 0x10400004, 0x0, 0xaf800048, 0x10000003,
-0x2e02021, 0xaf80004c, 0x2e02021, 0xc002990, 0x340581f0, 0x2c02021,
-0xc002990, 0x24050558, 0x3c020001, 0x8c4234a4, 0x3c030001, 0x8c6334a0,
-0x3c040001, 0x8c8434a8, 0x3c050001, 0x8ca534b8, 0x3c060001, 0x8cc634c0,
-0x3c070001, 0x8ce734c8, 0x3c080001, 0x8d0834ac, 0xaec20534, 0x3c020001,
-0x8c4234b4, 0x8ec90534, 0xaec50544, 0x3c050001, 0x8ca534b0, 0xaec00000,
-0xaec3053c, 0xaec40540, 0xaec60548, 0xaec7054c, 0xaec80550, 0xaec20538,
-0xafa90010, 0x8ec20538, 0xafa20014, 0x8ec6053c, 0x8ec70540, 0x3c040001,
-0xc00290f, 0x24842688, 0xafb70010, 0xafb60014, 0x8ec60544, 0x8ec70548,
-0x3c040001, 0x24842690, 0xc00290f, 0x24050001, 0x3c040001, 0x24842698,
-0x24050001, 0x24060001, 0x24070001, 0xafa00010, 0xc00290f, 0xafa00014,
-0x3c020001, 0x8c4234b0, 0x3603821, 0x3c060001, 0x24c65610, 0x2448ffff,
-0x1061824, 0xe81024, 0x43102b, 0x10400006, 0x24050002, 0x3c040001,
-0x248426a0, 0xafa80010, 0xc00290f, 0xafa00014, 0x24020001, 0xa2c20529,
-0xaf800054, 0xaf80011c, 0x8f420218, 0x30420002, 0x10400009, 0x0,
-0x8f420220, 0x3c030002, 0x34630004, 0x431025, 0xaec20008, 0x8f42021c,
-0x10000008, 0x34420004, 0x8f420220, 0x3c030002, 0x34630006, 0x431025,
-0xaec20008, 0x8f42021c, 0x34420006, 0xaec20010, 0x8f420218, 0x30420010,
-0x1040000a, 0x0, 0x8f42021c, 0x34420004, 0xaec2000c, 0x8f420220,
-0x3c03000a, 0x34630004, 0x431025, 0x10000009, 0xaec20004, 0x8f420220,
-0x3c03000a, 0x34630006, 0x431025, 0xaec20004, 0x8f42021c, 0x34420006,
-0xaec2000c, 0x8f420218, 0x30420200, 0x10400003, 0x24020001, 0x10000002,
-0xa2c20064, 0xa2c00064, 0x24020001, 0xaf8200a0, 0xaf8200b0, 0x8f830054,
-0x8f820054, 0x10000002, 0x24630064, 0x8f820054, 0x621023, 0x2c420065,
-0x1440fffc, 0x0, 0x8f440208, 0x8f45020c, 0x26e20028, 0xaee20020,
-0x24020480, 0xaee20010, 0xaee40008, 0xaee5000c, 0x26e40008, 0x8c820000,
-0x8c830004, 0x3802821, 0xaf820090, 0xaf830094, 0x8c820018, 0xaca200b4,
-0x9482000a, 0xaca2009c, 0x8ca200b0, 0x8ec30010, 0x431025, 0xaca200b0,
-0x8f8200b0, 0x30420004, 0x1440fffd, 0x0, 0x8ee20448, 0x8ee3044c,
-0xaee304bc, 0x8ee204bc, 0x2442e000, 0x2c422001, 0x1440000d, 0x26c40128,
-0x8ee20448, 0x8ee3044c, 0x3c040001, 0x248426ac, 0x3c050001, 0xafa00010,
-0xafa00014, 0x8ee704bc, 0x34a5f000, 0xc00290f, 0x603021, 0x26c40128,
-0xc002990, 0x24050400, 0x27440080, 0xc002990, 0x24050080, 0x8f42025c,
-0x26c4018c, 0xaec20158, 0x8f420260, 0x27450200, 0x24060008, 0xc0029a2,
-0xaec20160, 0x3c043b9a, 0x3484ca00, 0x2821, 0x24020006, 0x24030002,
-0xaec2015c, 0x240203e8, 0xaec3016c, 0xaec30168, 0xaec40164, 0xaec201fc,
-0x24020001, 0xaec301f8, 0xaec20204, 0x3c030001, 0x651821, 0x90633348,
-0x2c51021, 0x24a50001, 0xa0430194, 0x2ca2000f, 0x1440fff8, 0x2c51821,
-0x8f820040, 0x24a50001, 0x21702, 0x24420030, 0xa0620194, 0x2c51021,
-0xa0400194, 0xafa00010, 0x8fa20034, 0x3c040001, 0x248426b8, 0xafa20014,
-0x8fa60030, 0x3821, 0xc00290f, 0x2821, 0x3c040000, 0x24845990,
-0x24050010, 0x27b30030, 0x2603021, 0x27b10034, 0xc0016be, 0x2203821,
-0x3c030001, 0x8c633338, 0x3c15f000, 0x1060000a, 0xafa2003c, 0x8fa30030,
-0x2405ff00, 0x8fa20034, 0x246400ff, 0x852024, 0x831823, 0x431023,
-0xafa20034, 0xafa40030, 0x3c040000, 0x24844100, 0x24050108, 0x2603021,
-0xc0016be, 0x2203821, 0x96e30452, 0x30630003, 0x1060005f, 0x409021,
-0x8f820050, 0x3c030010, 0x431024, 0x10400021, 0x0, 0x8f820040,
-0x3c035000, 0x551024, 0x14430009, 0x0, 0x96e60452, 0x8f820050,
-0xafa00014, 0xafa20010, 0x8f870040, 0x3c040001, 0x1000000d, 0x248426c4,
-0x8f420218, 0x30420040, 0x1040000d, 0x24020001, 0x8f820050, 0x96e60452,
-0xafa20010, 0x8f420218, 0xafa20014, 0x8f870040, 0x3c040001, 0x248426cc,
-0xc00290f, 0x2821, 0x10000004, 0x0, 0x3c010001, 0x370821,
-0xa02281ec, 0x3c040001, 0x24849a34, 0x3c050001, 0x24a59aac, 0xa42823,
-0x27b30030, 0x2603021, 0x8ec3000c, 0x27b10034, 0x2203821, 0x24020001,
-0xa2c20020, 0xa2c20021, 0x34630a00, 0xc0016be, 0xaec3000c, 0x3c040001,
-0x2484abf4, 0x3c050001, 0x24a5afdc, 0xa42823, 0x2603021, 0x2203821,
-0xc0016be, 0xaec200a4, 0x3c040001, 0x2484b4a8, 0x3c050001, 0x24a5c358,
-0xa42823, 0x2603021, 0x3c010001, 0xac2234fc, 0xc0016be, 0x2203821,
-0x3c040001, 0x2484dbf8, 0x3c050001, 0x24a5e3bc, 0xa42823, 0x2603021,
-0x3c010001, 0xac223500, 0xc0016be, 0x2203821, 0x3c040001, 0x248426d4,
-0x96e60452, 0x24050011, 0x3821, 0x3c010001, 0xac22351c, 0xafa00010,
-0xc00290f, 0xafa00014, 0x10000028, 0x0, 0x3c040001, 0x24849890,
-0x3c050001, 0x24a59a2c, 0xa42823, 0x2603021, 0xc0016be, 0x2203821,
-0x3c040001, 0x2484a6e0, 0x3c050001, 0x24a5abec, 0xa42823, 0x2603021,
-0x2203821, 0xc0016be, 0xaec200a4, 0x3c040001, 0x2484afe4, 0x3c050001,
-0x24a5b4a0, 0xa42823, 0x2603021, 0x3c010001, 0xac2234fc, 0xc0016be,
-0x2203821, 0x3c040001, 0x2484db10, 0x3c050001, 0x24a5dbf0, 0xa42823,
-0x2603021, 0x3c010001, 0xac223500, 0xc0016be, 0x2203821, 0x3c010001,
-0xac22351c, 0x3c020001, 0x8c4234fc, 0x3c050fff, 0x34a5ffff, 0x3c030001,
-0x8c633500, 0x3c040800, 0x451024, 0x21082, 0x441025, 0x651824,
-0xae420020, 0x3c020001, 0x8c42351c, 0x31882, 0x641825, 0xae430080,
-0x451024, 0x21082, 0x441025, 0xae420078, 0x96e20462, 0x30420003,
-0x14400009, 0x0, 0x96e20472, 0x30420003, 0x1040007f, 0x27b30030,
-0x96e20462, 0x30420003, 0x1040006d, 0x3c020700, 0x96e20472, 0x30420003,
-0x10400069, 0x3c020700, 0x96e30472, 0x96e20462, 0x14620065, 0x3c020700,
-0x8f82005c, 0x3c030080, 0x431024, 0x1040000b, 0x0, 0x8f820050,
-0x96e60462, 0xafa20010, 0x8f82005c, 0xafa20014, 0x8f870040, 0x3c040001,
-0x248426e0, 0xc00290f, 0x24051977, 0x8f820050, 0x3c030010, 0x431024,
-0x10400022, 0x0, 0x8f820040, 0x3c03f000, 0x431024, 0x3c035000,
-0x14430009, 0x0, 0x96e60462, 0x8f820050, 0xafa00014, 0xafa20010,
-0x8f870040, 0x3c040001, 0x1000000d, 0x248426c4, 0x8f420218, 0x30420040,
-0x1040000d, 0x24020001, 0x8f820050, 0x96e60462, 0xafa20010, 0x8f420218,
-0xafa20014, 0x8f870040, 0x3c040001, 0x248426cc, 0xc00290f, 0x24050001,
-0x10000004, 0x0, 0x3c010001, 0x370821, 0xa02281ec, 0x3c040001,
-0x24849810, 0x3c050001, 0x24a59888, 0xa42823, 0x27b30030, 0x2603021,
-0x8ec30004, 0x27b10034, 0x2203821, 0x24020001, 0xa2c2004c, 0x34630e00,
-0xc0016be, 0xaec30004, 0x3c040001, 0x2484d058, 0x3c050001, 0x24a5d780,
-0xa42823, 0x2603021, 0x2203821, 0xc0016be, 0xaec200a8, 0x3c040001,
-0x2484dbf8, 0x3c050001, 0x24a5e3bc, 0xa42823, 0x2603021, 0x3c010001,
-0xac223514, 0xc0016be, 0x2203821, 0x3c040001, 0x248426ec, 0x21900,
-0x31982, 0x3c050800, 0x651825, 0xae430078, 0x96e60462, 0x24050012,
-0x3c010001, 0xac22351c, 0x1000000a, 0x3821, 0x34423000, 0x240a0001,
-0x3c040001, 0x248426f8, 0x3405f001, 0x3021, 0x3821, 0xa3aa0047,
-0xafa20020, 0xafa00010, 0xc00290f, 0xafa00014, 0x10000015, 0x0,
-0x3c040001, 0x2484960c, 0x3c050001, 0x24a59808, 0xa42823, 0x2603021,
-0x27b10034, 0xc0016be, 0x2203821, 0x3c040001, 0x2484c57c, 0x3c050001,
-0x24a5d050, 0xa42823, 0x2603021, 0x2203821, 0xc0016be, 0xaec200a8,
-0x3c010001, 0xac223514, 0x3c020001, 0x8c423514, 0x3c030800, 0x21100,
-0x21182, 0x431025, 0xae420038, 0x8f420218, 0x30420040, 0x14400004,
-0x24020001, 0x3c010001, 0x370821, 0xa02281ec, 0x96e20462, 0x30420010,
-0x14400009, 0x0, 0x96e20472, 0x30420010, 0x10400021, 0x0,
-0x96e20462, 0x30420010, 0x10400005, 0x3c020700, 0x96e20472, 0x30420010,
-0x14400011, 0x3c020700, 0x34423000, 0x240a0001, 0xa3aa0047, 0xafa20020,
-0x8ee20154, 0x96e60462, 0x96e70472, 0x24420001, 0xaee20154, 0x8ee20154,
-0x3c040001, 0x24842704, 0x3405f002, 0xafa00010, 0xc00290f, 0xafa00014,
-0x96e60472, 0x96e70462, 0x3c040001, 0x2484270c, 0x24050012, 0xafa00010,
-0xc00290f, 0xafa00014, 0x3c040001, 0x2484d788, 0x3c050001, 0x24a5d944,
-0xa42823, 0x27b30030, 0x2603021, 0x27b10034, 0xc0016be, 0x2203821,
-0x3c1e0fff, 0x37deffff, 0x3c040001, 0x2484d94c, 0x3c050001, 0x24a5db08,
-0xa42823, 0x2603021, 0x2203821, 0x3c010001, 0xac223508, 0x5e1024,
-0x21082, 0x3c150800, 0x551025, 0xc0016be, 0xae420050, 0x3c040000,
-0x24847d00, 0x3c050000, 0x24a57f50, 0xa42823, 0x2603021, 0x2203821,
-0x3c010001, 0xac223520, 0x5e1024, 0x21082, 0x551025, 0xc0016be,
-0xae420048, 0x3c040000, 0x24846134, 0x3c050000, 0x24a56244, 0xa42823,
-0x2603021, 0x2203821, 0x3c010001, 0xac2234e8, 0x5e1024, 0x21082,
-0x551025, 0xc0016be, 0xae4200b8, 0x3c040000, 0x2484624c, 0x3c050000,
-0x24a5631c, 0xa42823, 0x2603021, 0x2203821, 0x3c010001, 0xac2234dc,
-0x5e1024, 0x21082, 0x551025, 0xc0016be, 0xae4200e8, 0x3c040000,
-0x24846324, 0x3c050000, 0x24a565a4, 0xa42823, 0x2603021, 0x2203821,
-0x3c010001, 0xac2234cc, 0x5e1024, 0x21082, 0x551025, 0xc0016be,
-0xae4200f0, 0x3c040000, 0x248465ac, 0x3c050000, 0x24a566e0, 0xa42823,
-0x2603021, 0x2203821, 0x3c010001, 0xac2234d4, 0x5e1024, 0x21082,
-0x551025, 0xc0016be, 0xae4200c0, 0x3c040001, 0x2484e50c, 0x3c050001,
-0x24a5eabc, 0xa42823, 0x2603021, 0x2203821, 0x3c010001, 0xac2234e0,
-0x5e1024, 0x21082, 0x551025, 0xc0016be, 0xae4200c8, 0x3c040001,
-0x2484ee30, 0x3c050001, 0x24a5ef08, 0xa42823, 0x2603021, 0x2203821,
-0x3c010001, 0xac223524, 0x5e1024, 0x21082, 0x551025, 0xc0016be,
-0xae4200d0, 0x3c040001, 0x8c843518, 0x3c050001, 0x8ca53504, 0x2603021,
-0x2203821, 0xc0016be, 0xaec200ac, 0x3c040001, 0x8c843510, 0x3c050001,
-0x8ca5350c, 0x2603021, 0x3c010001, 0xac223518, 0xc0016be, 0x2203821,
-0x3c010001, 0xac223510, 0x3c070001, 0xf73821, 0x90e781ec, 0xafa00010,
-0x8fa20034, 0xafa20014, 0x8fa60030, 0x3c040001, 0x24842718, 0xc00290f,
-0x2821, 0x8faa003c, 0xc003c37, 0x1408021, 0xc0038f4, 0x0,
-0xc002548, 0x0, 0xaec0002c, 0xaf400228, 0xaf40022c, 0xaee004a8,
-0xaec00014, 0xaec00018, 0xaec00024, 0x96e20450, 0x2442ffff, 0xaec20028,
-0x3c010001, 0x370821, 0xac2081d4, 0xaec00038, 0xaec00044, 0xaec0003c,
-0xaec00040, 0xaec00048, 0x96e20480, 0x2442ffff, 0xaec2006c, 0x3c010001,
-0x370821, 0xac2081e0, 0x8ec20534, 0x8ec30534, 0x8ec40534, 0x8ec50538,
-0xaec00068, 0xaec00060, 0xaec0005c, 0xaec00058, 0xa2c000ed, 0xaec00078,
-0xaec00084, 0xaec20074, 0xaec3007c, 0xaec40080, 0xaec5008c, 0xc002298,
-0xa2c00115, 0x3c1433d8, 0x3694c348, 0x3c020800, 0x34420080, 0x3c040000,
-0x248459dc, 0x3c050000, 0x24a55a08, 0xa42823, 0x2603021, 0x2203821,
-0xaf820060, 0x2402ffff, 0xaec00030, 0xaec00034, 0xc0016be, 0xaf820064,
-0x3c010001, 0xac2234c4, 0x5e1024, 0x21082, 0x551025, 0xc00181c,
-0xae420000, 0x8f820240, 0x3c030001, 0x431025, 0xaf820240, 0x3c020000,
-0x24424034, 0xaf820244, 0xaf800240, 0x8f820060, 0x551024, 0x14400005,
-0x3c030800, 0x8f820060, 0x431024, 0x1040fffd, 0x0, 0xc003901,
-0x0, 0x3c020100, 0xafa20028, 0x8ec3002c, 0x240200ff, 0x10620003,
-0x8821, 0x8ec2002c, 0x24510001, 0x8f420228, 0x1622000f, 0x24070008,
-0x3c040001, 0x2484262c, 0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228,
-0x3c050009, 0xc00290f, 0x34a5f005, 0x8ec202a0, 0x24420001, 0xaec202a0,
-0x10000046, 0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, 0x8fa30028,
-0x8fa4002c, 0xac4304c0, 0xac4404c4, 0x8ec3002c, 0x8ee40428, 0x8ee5042c,
-0x8ec6002c, 0x2402000d, 0xafa20010, 0xafb10014, 0x8ec20008, 0x318c0,
-0x604821, 0x4021, 0xa92821, 0xa9182b, 0x882021, 0x832021,
-0x630c0, 0xafa20018, 0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021,
-0x5440000c, 0xaed1002c, 0x3c040001, 0x24842638, 0xafa00010, 0xafa00014,
-0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f000, 0x1000001d,
-0x0, 0x8ee40488, 0x8ee5048c, 0x8ec3002c, 0x8ec80008, 0x8f860120,
-0x24020011, 0xafa20010, 0xafa30014, 0xafa80018, 0x8ec200a8, 0x24070008,
-0x40f809, 0x24c6001c, 0x1440000e, 0x0, 0x3c040001, 0x24842640,
-0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f,
-0x34a5f001, 0x8ec202a4, 0x24420001, 0xaec202a4, 0x8ec202a4, 0x8ec20248,
-0x24420001, 0xaec20248, 0x8ec20248, 0x93a20047, 0x10400070, 0x240200ff,
-0x8ec3002c, 0x10620004, 0x27a70020, 0x8ec2002c, 0x10000002, 0x24510001,
-0x8821, 0x8f420228, 0x1622000f, 0x4021, 0x3c040001, 0x2484262c,
-0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f,
-0x34a5f005, 0x8ec202a0, 0x24420001, 0xaec202a0, 0x10000046, 0x8ec202a0,
-0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000, 0x8ce40004, 0xac4304c0,
-0xac4404c4, 0x8ec3002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008,
-0x2402000d, 0xafa20010, 0xafb10014, 0x8ec20008, 0x318c0, 0x604821,
-0xa92821, 0xa9182b, 0x882021, 0x832021, 0x630c0, 0xafa20018,
-0x8ec200a8, 0x24c604c0, 0x40f809, 0x2e63021, 0x5440000c, 0xaed1002c,
-0x3c040001, 0x24842638, 0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228,
-0x3c050009, 0xc00290f, 0x34a5f000, 0x1000001d, 0x0, 0x8ee40488,
-0x8ee5048c, 0x8ec3002c, 0x8ec80008, 0x8f860120, 0x24020011, 0xafa20010,
-0xafa30014, 0xafa80018, 0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c,
-0x1440000e, 0x0, 0x3c040001, 0x24842640, 0xafa00010, 0xafa00014,
-0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f001, 0x8ec202a4,
-0x24420001, 0xaec202a4, 0x8ec202a4, 0x3c040001, 0x24842724, 0x8ec20254,
-0x3c050009, 0x34a59999, 0x24420001, 0xaec20254, 0x8ec20254, 0x3021,
-0x3821, 0xafa00010, 0xc00290f, 0xafa00014, 0x10000004, 0x0,
-0x8f420264, 0x10400005, 0x0, 0x8f8200a0, 0x30420004, 0x1440fffa,
-0x0, 0x8f820044, 0x34420004, 0xaf820044, 0x8ec2026c, 0x24420001,
-0xaec2026c, 0x8ec2026c, 0x8f8200d8, 0x8f8300d4, 0x431023, 0x2442fff8,
-0xaec20088, 0x8ec20088, 0x4410006, 0x24020001, 0x8ec20088, 0x8ec3053c,
-0x431021, 0xaec20088, 0x24020001, 0xaec20070, 0x96e20452, 0x30420010,
-0x10400005, 0x0, 0x8f820214, 0x3c038100, 0x431025, 0xaf820214,
-0x3c020001, 0x8c423408, 0x30420001, 0x10400007, 0x0, 0x3c040000,
-0x24846bb4, 0x3c050000, 0x24a570e8, 0x10000006, 0xa42823, 0x3c040000,
-0x248466e8, 0x3c050000, 0x24a56bac, 0xa42823, 0x27a60030, 0xc0016be,
-0x27a70034, 0x3c010001, 0xac2234d8, 0x3c020001, 0x8c4234d8, 0x3c030800,
-0x21100, 0x21182, 0x431025, 0xae420040, 0x8f830060, 0x74100b,
-0x242000a, 0x200f821, 0x0, 0xd, 0x8fbf0060, 0x8fbe005c,
-0x8fb50058, 0x8fb30054, 0x8fb10050, 0x3e00008, 0x27bd0068, 0x3e00008,
-0x0, 0x3e00008, 0x0, 0x3e00008, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x3e00008, 0x0, 0x3e00008, 0x0,
-0x27bdfde0, 0x27a70018, 0x3c02dead, 0x3442beef, 0xafbf0218, 0x8f830150,
-0x3c04001f, 0x3484ffff, 0xafa20018, 0xe33823, 0xe43824, 0x8ce30000,
-0x10620008, 0x0, 0xafa30010, 0xafa00014, 0x8f860150, 0x3c040001,
-0x24842730, 0xc00290f, 0x24050020, 0x8fbf0218, 0x3e00008, 0x27bd0220,
-0x27bdffe0, 0x3c06abba, 0x34c6babe, 0xafb10018, 0x3c110004, 0x3c07007f,
-0x34e7ffff, 0xafbf001c, 0x112840, 0x8e240000, 0x8ca30000, 0xaca00000,
-0xae260000, 0x8ca20000, 0xaca30000, 0x10460005, 0xae240000, 0xa08821,
-0xf1102b, 0x1040fff5, 0x112840, 0x3c040001, 0x2484273c, 0x2202821,
-0x3021, 0x3821, 0xafa00010, 0xc00290f, 0xafa00014, 0x2201021,
-0x8fbf001c, 0x8fb10018, 0x3e00008, 0x27bd0020, 0x27bdffc8, 0xafb30024,
-0x809821, 0xafbe002c, 0xafb50028, 0xe0a821, 0x24a50003, 0xafbf0030,
-0xafb10020, 0x8ea20000, 0x2403fffc, 0xa38824, 0x51102b, 0x14400020,
-0xc0f021, 0x8fc80000, 0xafa00010, 0xafa8001c, 0x8ea20000, 0x3c040001,
-0x24842748, 0xafa20014, 0x8fc60000, 0x2602821, 0xc00290f, 0x2203821,
-0x8fc60000, 0x111882, 0x2463ffff, 0x2402ffff, 0x10620008, 0x2602021,
-0x2405ffff, 0x8c820000, 0x24840004, 0x2463ffff, 0xacc20000, 0x1465fffb,
-0x24c60004, 0x8ea20000, 0x511023, 0xaea20000, 0x8fc20000, 0x511021,
-0x1000000b, 0xafc20000, 0xafa00010, 0x8ea20000, 0x3c040001, 0x24842750,
-0xafa20014, 0x8fc60000, 0x2602821, 0x2203821, 0xc00290f, 0xafa5001c,
-0x8fa2001c, 0x8fbf0030, 0x8fbe002c, 0x8fb50028, 0x8fb30024, 0x8fb10020,
-0x3e00008, 0x27bd0038, 0x27bdffe8, 0x3c1cc000, 0xd021, 0x3c05ffff,
-0x3c030001, 0x8c6334a0, 0x3c040001, 0x8c8434a8, 0x34a57e10, 0x24021ffc,
-0x3c010001, 0xac223340, 0x3c0200c0, 0x3c010001, 0xac223344, 0x3c020020,
-0xafbf0010, 0x3c0100c0, 0xac201ffc, 0x431023, 0x441023, 0x245bb000,
-0x365b821, 0x3c1d0001, 0x8fbd333c, 0x3a0f021, 0x3c0400c0, 0x34840200,
-0x3c1600c0, 0x3c0300c0, 0x34630758, 0x24021dfc, 0x3c010001, 0xac223340,
-0x240218a4, 0x3c010001, 0xac243344, 0x3c010001, 0xac223340, 0x3c010001,
-0xac233344, 0xc00172c, 0x36d60200, 0x8fbf0010, 0x3e00008, 0x27bd0018,
-0x27bdffc8, 0x3c040001, 0x24842758, 0x2821, 0x3c020001, 0x8c423340,
-0x3c030001, 0x8c633344, 0x3021, 0x3603821, 0xafbf0030, 0xafbe002c,
-0xafb50028, 0xafb30024, 0xafb10020, 0xafa2001c, 0xafa30018, 0xafb70010,
-0xc00290f, 0xafb60014, 0xc001849, 0x0, 0x8f820240, 0x34420004,
-0xaf820240, 0x24020001, 0xaec20000, 0x3c020001, 0x571021, 0x904281ec,
-0x10400090, 0x2402fffc, 0x3c110001, 0x2631a3c3, 0x3c150001, 0x26b59f70,
-0x2351823, 0x8fa6001c, 0x628824, 0xd1102b, 0x1440001e, 0x27be0018,
-0x8fb30018, 0x3c040001, 0x24842748, 0x2a02821, 0x2203821, 0xafa00010,
-0xafa60014, 0xc00290f, 0x2603021, 0x8fa40018, 0x111882, 0x2463ffff,
-0x2402ffff, 0x10620008, 0x2a02821, 0x2406ffff, 0x8ca20000, 0x24a50004,
-0x2463ffff, 0xac820000, 0x1466fffb, 0x24840004, 0x8fa2001c, 0x511023,
-0xafa2001c, 0x8fc20000, 0x511021, 0x1000000a, 0xafc20000, 0x3c040001,
-0x24842750, 0x2a02821, 0xafa00010, 0xafa60014, 0x8fa60018, 0x2203821,
-0xc00290f, 0xa09821, 0x8fa3001c, 0x24150020, 0x3c010001, 0xac3334bc,
-0x2c620020, 0x1440001d, 0x27b30018, 0x8fb10018, 0x3c040001, 0x24842748,
-0x3c050001, 0x24a53550, 0x24070020, 0xafa00010, 0xafa30014, 0xc00290f,
-0x2203021, 0x3c050001, 0x24a53550, 0x8fa40018, 0x24030007, 0x2406ffff,
-0x8ca20000, 0x24a50004, 0x2463ffff, 0xac820000, 0x1466fffb, 0x24840004,
-0x8fa2001c, 0x551023, 0xafa2001c, 0x8e620000, 0x551021, 0x1000000c,
-0xae620000, 0x3c040001, 0x24842750, 0x3c050001, 0x24a53550, 0xafa00010,
-0xafa30014, 0x8fa60018, 0x3c110001, 0x26313550, 0xc00290f, 0x24070020,
-0x8fa3001c, 0x24150020, 0x3c010001, 0xac3134f0, 0x2c620020, 0x1440001d,
-0x27b30018, 0x8fb10018, 0x3c040001, 0x24842748, 0x3c050001, 0x24a53570,
-0x24070020, 0xafa00010, 0xafa30014, 0xc00290f, 0x2203021, 0x3c050001,
-0x24a53570, 0x8fa40018, 0x24030007, 0x2406ffff, 0x8ca20000, 0x24a50004,
-0x2463ffff, 0xac820000, 0x1466fffb, 0x24840004, 0x8fa2001c, 0x551023,
-0xafa2001c, 0x8e620000, 0x551021, 0x1000000c, 0xae620000, 0x3c040001,
-0x24842750, 0x3c050001, 0x24a53570, 0xafa00010, 0xafa30014, 0x8fa60018,
-0x3c110001, 0x26313570, 0xc00290f, 0x24070020, 0x3c010001, 0x10000033,
-0xac3134ec, 0x3c110000, 0x26317cef, 0x3c150000, 0x26b57b3c, 0x2351823,
-0x8fa6001c, 0x628824, 0xd1102b, 0x1440001e, 0x27be0018, 0x8fb30018,
-0x3c040001, 0x24842748, 0x2a02821, 0x2203821, 0xafa00010, 0xafa60014,
-0xc00290f, 0x2603021, 0x8fa40018, 0x111882, 0x2463ffff, 0x2402ffff,
-0x10620008, 0x2a02821, 0x2406ffff, 0x8ca20000, 0x24a50004, 0x2463ffff,
-0xac820000, 0x1466fffb, 0x24840004, 0x8fa2001c, 0x511023, 0xafa2001c,
-0x8fc20000, 0x511021, 0x1000000a, 0xafc20000, 0x3c040001, 0x24842750,
-0x2a02821, 0xafa00010, 0xafa60014, 0x8fa60018, 0x2203821, 0xc00290f,
-0xa09821, 0x3c010001, 0xac3334bc, 0x3c030001, 0x8c6334bc, 0x24020400,
-0x60f809, 0xaf820070, 0x8fbf0030, 0x8fbe002c, 0x8fb50028, 0x8fb30024,
-0x8fb10020, 0x3e00008, 0x27bd0038, 0x0, 0x0, 0x0,
-0x8f820040, 0x3c03f000, 0x431824, 0x3c025000, 0x10620005, 0x3c026000,
-0x10620012, 0x0, 0x10000015, 0x0, 0x8f820050, 0x3c030010,
-0x431024, 0x10400006, 0x0, 0x8f820050, 0x2403ff80, 0x431024,
-0x1000000a, 0x34420063, 0x8f820050, 0x2403ff80, 0x431024, 0x10000005,
-0x3442004f, 0x8f820050, 0x2403ff80, 0x431024, 0x34420055, 0xaf820050,
-0x8f820054, 0x244203e8, 0xaf820058, 0x240201f4, 0xaec200c8, 0x24020004,
-0xaec200d0, 0x24020002, 0xaec000a0, 0xaec000cc, 0xaec200c4, 0xaec000c0,
-0xaec000bc, 0x3e00008, 0xaec000b8, 0x8f820054, 0x24420005, 0x3e00008,
-0xaf820078, 0x27bdffe8, 0xafbf0010, 0x8f820054, 0x3c030001, 0x8c63341c,
-0x244203e8, 0x1060001d, 0xaf820058, 0x3c020001, 0x8c423408, 0x30420001,
-0x1440000c, 0x0, 0x3c020001, 0x8c423528, 0x10400008, 0x0,
-0x8f830224, 0x3c020001, 0x8c4255ec, 0x10620003, 0x0, 0xc003ab1,
-0x0, 0x92c200ec, 0x10400003, 0x3c0208ff, 0x1000000a, 0xa2c000ec,
-0x3442fffb, 0x8f830220, 0x3c040200, 0x284a025, 0x621824, 0x10000003,
-0xaf830220, 0xc003db9, 0x0, 0x8f420238, 0x1040000a, 0x0,
-0x8ec200a0, 0x244203e8, 0xaec200a0, 0x8f430238, 0x43102b, 0x14400003,
-0x0, 0xc001c3c, 0x0, 0x8f420218, 0x30420100, 0x10400003,
-0x0, 0xc001e07, 0x0, 0x8ec200c0, 0x8ec300c4, 0x24420001,
-0xaec200c0, 0x43102b, 0x14400003, 0x0, 0xaec000c0, 0x36940080,
-0x8fbf0010, 0x3e00008, 0x27bd0018, 0x3e00008, 0x0, 0x8f820040,
-0x30420001, 0x14400008, 0x2021, 0x8f430104, 0x24020001, 0x50620005,
-0x24040001, 0x8f420264, 0x10400003, 0x801021, 0x24040001, 0x801021,
-0x10400006, 0x0, 0x8ec20270, 0x24420001, 0xaec20270, 0x10000008,
-0x8ec20270, 0x8f820044, 0x34420004, 0xaf820044, 0x8ec2026c, 0x24420001,
-0xaec2026c, 0x8ec2026c, 0x8ec20000, 0x3c03dfff, 0x10400007, 0x3463ffff,
-0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, 0x10000005, 0x0,
-0xaf800048, 0x8f820048, 0x1040fffd, 0x0, 0x8f820060, 0x431024,
-0xaf820060, 0x8ec20000, 0x10400003, 0x0, 0x10000002, 0xaf80004c,
-0xaf800048, 0x3e00008, 0x0, 0x3e00008, 0x0, 0x27bdffd8,
-0xafbf0024, 0xafb10020, 0x8ec30018, 0x8ec20028, 0x10620056, 0x0,
-0x3c020001, 0x571021, 0x8c4281d4, 0x10400023, 0x24070008, 0x8ed10018,
-0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020012, 0xafa20010,
-0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b,
-0x24020001, 0x3c040001, 0x248427c0, 0xafb10010, 0xafa00014, 0x8ec6002c,
-0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, 0x14400005,
-0x24020001, 0x3c010001, 0x370821, 0x1000005c, 0xac2281d4, 0x3c010001,
-0x370821, 0x10000022, 0xac2081d0, 0x8ed10018, 0x8ee40498, 0x8ee5049c,
-0x8ec30008, 0x8f860120, 0x24020019, 0xafa20010, 0xafb10014, 0xafa30018,
-0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, 0x24020001, 0x3c040001,
-0x248427c0, 0xafb10010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009,
-0xc00290f, 0x34a5f006, 0x1021, 0x14400005, 0x24020001, 0x3c010001,
-0x370821, 0x1000003a, 0xac2281d8, 0x3c010001, 0x370821, 0xac2281d0,
-0x3c010001, 0x370821, 0xac2081d8, 0x3c010001, 0x370821, 0xac2081d4,
-0x8ec20264, 0xaec00024, 0xaed10028, 0x24420001, 0xaec20264, 0x1000002a,
-0x8ec20264, 0x3c020001, 0x571021, 0x8c4281d0, 0x1040001f, 0x0,
-0x8f820040, 0x30420001, 0x14400008, 0x2021, 0x8f430104, 0x24020001,
-0x50620005, 0x24040001, 0x8f420264, 0x10400003, 0x801021, 0x24040001,
-0x801021, 0x10400006, 0x0, 0x8ec20270, 0x24420001, 0xaec20270,
-0x10000008, 0x8ec20270, 0x8f820044, 0x34420004, 0xaf820044, 0x8ec2026c,
-0x24420001, 0xaec2026c, 0x8ec2026c, 0x3c010001, 0x370821, 0xac2081d0,
-0x3c010001, 0x370821, 0xac2081d4, 0x3c010001, 0x370821, 0xac2081d8,
-0x8ec20000, 0x3c03ff7f, 0x10400007, 0x3463ffff, 0xaf80004c, 0x8f82004c,
-0x1040fffd, 0x0, 0x10000005, 0x0, 0xaf800048, 0x8f820048,
-0x1040fffd, 0x0, 0x8f820060, 0x431024, 0xaf820060, 0x8ec20000,
-0x10400003, 0x0, 0x10000002, 0xaf80004c, 0xaf800048, 0x8fbf0024,
-0x8fb10020, 0x3e00008, 0x27bd0028, 0x3e00008, 0x0, 0x27bdffd8,
-0xafbf0024, 0xafb10020, 0x8ec30068, 0x8ec2006c, 0x10620029, 0x24070008,
-0x8ed10068, 0x8ee40490, 0x8ee50494, 0x8ec30008, 0x8f860120, 0x24020013,
-0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c,
-0x1440000b, 0x24020001, 0x3c040001, 0x248427cc, 0xafb10010, 0xafa00014,
-0x8ec60068, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f008, 0x1021,
-0x14400005, 0x24020001, 0x3c010001, 0x370821, 0x1000000e, 0xac2281e0,
-0x3c010001, 0x370821, 0xac2081e0, 0x8ec20268, 0xaec00048, 0xaed1006c,
-0x24420001, 0xaec20268, 0x10000004, 0x8ec20268, 0x3c010001, 0x370821,
-0xac2081e0, 0x8ec20000, 0x3c03feff, 0x10400007, 0x3463ffff, 0xaf80004c,
-0x8f82004c, 0x1040fffd, 0x0, 0x10000005, 0x0, 0xaf800048,
-0x8f820048, 0x1040fffd, 0x0, 0x8f820060, 0x431024, 0xaf820060,
-0x8ec20000, 0x10400003, 0x0, 0x10000002, 0xaf80004c, 0xaf800048,
-0x8fbf0024, 0x8fb10020, 0x3e00008, 0x27bd0028, 0x3e00008, 0x0,
-0x3c020001, 0x8c42341c, 0x27bdffc0, 0xafbf0038, 0xafbe0034, 0xafb50030,
-0xafb3002c, 0x104000fe, 0xafb10028, 0x8ec200b8, 0x24430001, 0x2842000b,
-0x1440011b, 0xaec300b8, 0xaec000b8, 0x8ee204a8, 0x30420002, 0x14400096,
-0x0, 0x8ee204a8, 0x3c030001, 0x8c63340c, 0x34420002, 0xaee204a8,
-0x24020001, 0x14620003, 0x3c020600, 0x10000002, 0x34423000, 0x34421000,
-0xafa20020, 0x8ec3002c, 0x240200ff, 0x10620004, 0x27a70020, 0x8ec2002c,
-0x10000002, 0x24530001, 0x9821, 0x8f420228, 0x1662000f, 0x0,
-0x3c040001, 0x248427f8, 0xafa00010, 0xafa00014, 0x8ec6002c, 0x8f470228,
-0x3c050009, 0xc00290f, 0x34a5f00f, 0x8ec202a0, 0x24420001, 0xaec202a0,
-0x1000006d, 0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021, 0x8ce30000,
-0x8ce40004, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054, 0x247103e8,
-0x2221023, 0x2c4203e9, 0x1040001e, 0xa821, 0x241e000c, 0x8ec8002c,
-0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008, 0xafbe0010, 0xafb30014,
-0x840c0, 0x1001821, 0x1021, 0x8ec80008, 0xa32821, 0xa3482b,
-0x822021, 0x892021, 0x630c0, 0xafa80018, 0x8ec200a8, 0x24c604c0,
-0x40f809, 0x2e63021, 0x54400006, 0x24150001, 0x8f820054, 0x2221023,
-0x2c4203e9, 0x1440ffe5, 0x0, 0x32a200ff, 0x54400011, 0xaed3002c,
-0x3c040001, 0x24842804, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124,
-0x3c050009, 0x10000030, 0x34a5f010, 0x8ec2026c, 0x24150001, 0x24420001,
-0xaec2026c, 0x8ec2026c, 0x1000001f, 0x32a200ff, 0x8f830054, 0x8f820054,
-0x247103e8, 0x2221023, 0x2c4203e9, 0x10400017, 0xa821, 0x3c1e0020,
-0x24130011, 0x8ec20008, 0x8ee40488, 0x8ee5048c, 0x8ec3002c, 0x8f860120,
-0xafb30010, 0x5e1025, 0xafa30014, 0xafa20018, 0x8ec200a8, 0x24070008,
-0x40f809, 0x24c6001c, 0x1440ffe2, 0x0, 0x8f820054, 0x2221023,
-0x2c4203e9, 0x1440ffed, 0x0, 0x32a200ff, 0x1440000f, 0x0,
-0x3c040001, 0x24842810, 0xafa00010, 0xafa00014, 0x8f860120, 0x8f870124,
-0x3c050009, 0x34a5f011, 0xc00290f, 0x0, 0x8ec202d0, 0x24420001,
-0xaec202d0, 0x8ec202d0, 0x8ec20250, 0x24420001, 0xaec20250, 0x8ec20250,
-0x8ee204a8, 0x30420001, 0x10400054, 0x0, 0x8f420218, 0x30420080,
-0x1040002b, 0x0, 0x8f820044, 0x34420040, 0xaf820044, 0x8ec200b0,
-0x402821, 0x8ec201b8, 0x8ec301bc, 0x24060000, 0x2407ffff, 0x2021,
-0x461024, 0x1444000d, 0x671824, 0x1465000b, 0x0, 0x8ec200b4,
-0x402821, 0x8ec201d8, 0x8ec301dc, 0x2021, 0x461024, 0x14440003,
-0x671824, 0x1065000c, 0x0, 0x8ec201b8, 0x8ec301bc, 0x8ec401d8,
-0x8ec501dc, 0xaec300b0, 0xaec500b4, 0x8f820044, 0x38420020, 0xaf820044,
-0x10000056, 0x2402ff7f, 0x8f820044, 0x2403ffdf, 0x431024, 0xaf820044,
-0x10000050, 0x2402ff7f, 0x8f820044, 0x2403ffdf, 0x431024, 0xaf820044,
-0x8ec200b0, 0x402821, 0x8ec201b8, 0x8ec301bc, 0x24060000, 0x2407ffff,
-0x2021, 0x461024, 0x1444000d, 0x671824, 0x1465000b, 0x0,
-0x8ec200b4, 0x402821, 0x8ec201d8, 0x8ec301dc, 0x2021, 0x461024,
-0x14440003, 0x671824, 0x1065001f, 0x0, 0x8ec201b8, 0x8ec301bc,
-0x8ec401d8, 0x8ec501dc, 0xaec300b0, 0xaec500b4, 0x8f820044, 0x38420040,
-0xaf820044, 0x1000002b, 0x2402ff7f, 0x8f820044, 0x34420040, 0xaf820044,
-0x8ec200bc, 0x24430001, 0x1000001d, 0x28420033, 0x8ee204a8, 0x30420001,
-0x10400013, 0x0, 0x8f420218, 0x30420080, 0x1040000a, 0x0,
-0x8f820044, 0x2403ffdf, 0x431024, 0xaf820044, 0x8f820044, 0x34420040,
-0xaf820044, 0x10000013, 0x2402ff7f, 0x8f820044, 0x34420060, 0xaf820044,
-0x1000000e, 0x2402ff7f, 0x8f820044, 0x34420040, 0xaf820044, 0x8ec200bc,
-0x24430001, 0x284201f5, 0x14400005, 0xaec300bc, 0x8f820044, 0x38420020,
-0xaf820044, 0xaec000bc, 0x2402ff7f, 0x282a024, 0x8fbf0038, 0x8fbe0034,
-0x8fb50030, 0x8fb3002c, 0x8fb10028, 0x3e00008, 0x27bd0040, 0x3e00008,
-0x0, 0x3c020001, 0x8c42341c, 0x27bdffc0, 0xafbf0038, 0xafbe0034,
-0xafb50030, 0xafb3002c, 0x10400100, 0xafb10028, 0x8ec200b8, 0x3c040001,
-0x8c84340c, 0x24430001, 0x2842000b, 0xaec400d0, 0x14400127, 0xaec300b8,
-0xaec000b8, 0x8ee204a8, 0x30420002, 0x14400094, 0x0, 0x8ee204a8,
-0x34420002, 0xaee204a8, 0x24020001, 0x14820003, 0x3c020600, 0x10000002,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 23'
echo 'File patch-2.2.4 is continued in part 24'
echo 24 > _shar_seq_.tmp
#!/bin/sh
# this is part 25 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 25; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
-0x131c02, 0x8ea40014, 0x3262ffff, 0x629821, 0x9e2021, 0x41c02,
-0x3082ffff, 0x622021, 0x932023, 0x41402, 0x822021, 0x3084ffff,
-0x50800001, 0x3404ffff, 0x93a3005f, 0x24020006, 0x14620006, 0x0,
-0x8fa20028, 0x8ec3009c, 0x431021, 0x10000005, 0x2445001e, 0x8fa20028,
-0x8ec3009c, 0x431021, 0x24450014, 0x8ec20538, 0xa2102b, 0x14400003,
-0x0, 0x8ec2053c, 0xa22823, 0x8ec20094, 0x8fad0054, 0x11a20006,
-0x0, 0x94a20000, 0x822021, 0x41c02, 0x3082ffff, 0x622021,
-0x8fad004c, 0x31a20100, 0x14400005, 0x41027, 0x92c20090, 0x54400004,
-0xa4a40000, 0x41027, 0x3044ffff, 0xa4a40000, 0x96a3000e, 0x8ec20078,
-0x431021, 0xaec20078, 0xafb10020, 0x8ec30078, 0x8fad0034, 0x11a00007,
-0xafa30024, 0x8fad003c, 0x3c024000, 0x2221025, 0xafa20020, 0x6d1025,
-0xafa20024, 0x8fad004c, 0x31a20080, 0x1040000c, 0x31a20100, 0x8ee279cc,
-0x24430001, 0x210c0, 0x571021, 0xaee379cc, 0x8fa30020, 0x8fa40024,
-0xac4379d0, 0xac4479d4, 0x100000ba, 0xaec00078, 0x1040006b, 0x0,
-0x8ee279cc, 0x24430001, 0x210c0, 0x571021, 0xaee379cc, 0x8fa30020,
-0x8fa40024, 0xac4379d0, 0xac4479d4, 0x8ee279cc, 0x10400058, 0x4821,
-0x3c0a001f, 0x354affff, 0x240cffff, 0x340bffff, 0x4021, 0x8f8700fc,
-0x1173021, 0x14e00007, 0x24c679d0, 0x8ec202a8, 0x1821, 0x24420001,
-0xaec202a8, 0x10000008, 0x8ec202a8, 0x8cc20000, 0x8cc30004, 0xace20000,
-0xace30004, 0x24e20008, 0xaf8200f0, 0x24030001, 0x14600006, 0x2e81021,
-0x8ec20180, 0x24420001, 0xaec20180, 0x10000036, 0x8ec20180, 0x944279d6,
-0x8ec401d8, 0x8ec501dc, 0x401821, 0x1021, 0xa32821, 0xa3302b,
-0x822021, 0x862021, 0x2e81021, 0xaec401d8, 0xaec501dc, 0x8c4279d0,
-0x4a1824, 0x90620000, 0x30420001, 0x1040001b, 0x0, 0x8c620000,
-0x144c000e, 0x0, 0x94620004, 0x144b000b, 0x0, 0x8ec201f0,
-0x8ec301f4, 0x24630001, 0x2c640001, 0x441021, 0xaec201f0, 0xaec301f4,
-0x8ec201f0, 0x10000014, 0x8ec301f4, 0x8ec201e8, 0x8ec301ec, 0x24630001,
-0x2c640001, 0x441021, 0xaec201e8, 0xaec301ec, 0x8ec201e8, 0x1000000a,
-0x8ec301ec, 0x8ec201e0, 0x8ec301e4, 0x24630001, 0x2c640001, 0x441021,
-0xaec201e0, 0xaec301e4, 0x8ec201e0, 0x8ec301e4, 0x8ee279cc, 0x25290001,
-0x122102b, 0x1440ffaf, 0x25080008, 0x8ec20070, 0xa2c00090, 0x8ee379cc,
-0x431023, 0xaec20070, 0x1000004d, 0xaee079cc, 0x8f8600fc, 0x14c00007,
-0x0, 0x8ec202a8, 0x1821, 0x24420001, 0xaec202a8, 0x10000008,
-0x8ec202a8, 0x8fa20020, 0x8fa30024, 0xacc20000, 0xacc30004, 0x24c20008,
-0xaf8200f0, 0x24030001, 0x14600006, 0x0, 0x8ec20180, 0x24420001,
-0xaec20180, 0x10000033, 0x8ec20180, 0x8ec20078, 0x8ec401d8, 0x8ec501dc,
-0x401821, 0x1021, 0xa32821, 0xa3302b, 0x822021, 0x862021,
-0xaec401d8, 0xaec501dc, 0x92220000, 0x30420001, 0x1040001b, 0x2402ffff,
-0x8e230000, 0x1462000e, 0x3402ffff, 0x96230004, 0x1462000b, 0x0,
-0x8ec201f0, 0x8ec301f4, 0x24630001, 0x2c640001, 0x441021, 0xaec201f0,
-0xaec301f4, 0x8ec201f0, 0x10000014, 0x8ec301f4, 0x8ec201e8, 0x8ec301ec,
-0x24630001, 0x2c640001, 0x441021, 0xaec201e8, 0xaec301ec, 0x8ec201e8,
-0x1000000a, 0x8ec301ec, 0x8ec201e0, 0x8ec301e4, 0x24630001, 0x2c640001,
-0x441021, 0xaec201e0, 0xaec301e4, 0x8ec201e0, 0x8ec301e4, 0x8ec20070,
-0x2442ffff, 0xaec20070, 0xaec00078, 0x8ea2001c, 0x96e30450, 0x8ec40024,
-0x24420001, 0x2463ffff, 0x431024, 0x24840001, 0xaec20018, 0xaec40024,
-0x8f42023c, 0x82202b, 0x10800006, 0x0, 0x8fad0044, 0x25a2ffe9,
-0x2c420002, 0x1040012f, 0x0, 0x96e20452, 0x8ed10018, 0x30420020,
-0x1040001e, 0x24070008, 0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120,
-0x24020019, 0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809,
-0x24c6001c, 0x1440000b, 0x24020001, 0x3c040001, 0x24842e00, 0xafb10010,
-0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006,
-0x1021, 0x1040008f, 0x24020001, 0x3c010001, 0x370821, 0x100000b4,
-0xac2281d0, 0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020012,
-0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c,
-0x1440000b, 0x24020001, 0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014,
-0x8ec6002c, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006, 0x1021,
-0x10400094, 0x24020001, 0x10000096, 0x0, 0x15a20043, 0x24020016,
-0x96a3000e, 0x8ec20078, 0x8ec40024, 0x431021, 0xaec20078, 0x8ea3001c,
-0x96e20450, 0x24840001, 0xaec40024, 0x24630001, 0x2442ffff, 0x621824,
-0xaec30018, 0x8f42023c, 0x82202b, 0x148000df, 0x0, 0x96e20452,
-0x8ed10018, 0x30420020, 0x1040001e, 0x24070008, 0x8ee40498, 0x8ee5049c,
-0x8ec30008, 0x8f860120, 0x24020019, 0xafa20010, 0xafb10014, 0xafa30018,
-0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, 0x24020001, 0x3c040001,
-0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009,
-0xc00290f, 0x34a5f006, 0x1021, 0x1040003f, 0x24020001, 0x3c010001,
-0x370821, 0x10000064, 0xac2281d0, 0x8ee40498, 0x8ee5049c, 0x8ec30008,
-0x8f860120, 0x24020012, 0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8,
-0x40f809, 0x24c6001c, 0x1040ffb1, 0x0, 0x1000ffb9, 0x24020001,
-0x8fad0044, 0x15a20063, 0x25a2fffe, 0x96a3000e, 0x8ec20078, 0x431021,
-0xaec20078, 0x8ea3001c, 0x96e20450, 0x24630001, 0x2442ffff, 0x621824,
-0xaec30018, 0x96e20452, 0x8ed10018, 0x30420020, 0x10400023, 0x24070008,
-0x8ee40498, 0x8ee5049c, 0x8ec30008, 0x8f860120, 0x24020019, 0xafa20010,
-0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b,
-0x24020001, 0x3c040001, 0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c,
-0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f006, 0x1021, 0x14400006,
-0x24020001, 0x24020001, 0x3c010001, 0x370821, 0x10000031, 0xac2281d8,
-0x3c010001, 0x370821, 0x10000021, 0xac2281d0, 0x8ee40498, 0x8ee5049c,
-0x8ec30008, 0x8f860120, 0x24020012, 0xafa20010, 0xafb10014, 0xafa30018,
-0x8ec200a8, 0x40f809, 0x24c6001c, 0x1440000b, 0x24020001, 0x3c040001,
-0x24842e00, 0xafb10010, 0xafa00014, 0x8ec6002c, 0x8f470228, 0x3c050009,
-0xc00290f, 0x34a5f006, 0x1021, 0x14400005, 0x24020001, 0x3c010001,
-0x370821, 0x10000010, 0xac2281d4, 0x3c010001, 0x370821, 0xac2081d0,
-0x3c010001, 0x370821, 0xac2081d8, 0x3c010001, 0x370821, 0xac2081d4,
-0x8ec20264, 0xaec00024, 0xaed10028, 0x24420001, 0xaec20264, 0x8ec20264,
-0x8ec20278, 0x24420001, 0xaec20278, 0x10000049, 0x8ec20278, 0x2c420002,
-0x10400028, 0x24030040, 0x8ec20034, 0x24420001, 0x50430003, 0x1021,
-0x8ec20034, 0x24420001, 0xaec20034, 0x8ec20034, 0x8ea30018, 0x21080,
-0x571021, 0x8c440cc0, 0x24020003, 0x1462000d, 0x0, 0x92c20065,
-0x50400034, 0x36940040, 0x8ec202c0, 0x8ec3005c, 0x441021, 0xaec202c0,
-0x8ec202c4, 0x641821, 0x306300ff, 0x10000009, 0xaec3005c, 0x8ec202bc,
-0x8ec3003c, 0x441021, 0xaec202bc, 0x8ec202c4, 0x641821, 0x306301ff,
-0xaec3003c, 0x441021, 0xaec202c4, 0x1000001f, 0x36940040, 0x8fad0044,
-0x24020014, 0x15a20010, 0x24020010, 0x3c020001, 0x8c423334, 0x10400017,
-0x26e50028, 0x26c40128, 0x240300ff, 0x2406ffff, 0x8ca20000, 0x24a50004,
-0x2463ffff, 0xac820000, 0x1466fffb, 0x24840004, 0x1000000c, 0x0,
-0x11a2000a, 0x3c050008, 0x96a7000e, 0x8ea2001c, 0x3c040001, 0x24842e80,
-0xafb50014, 0xafa20010, 0x8ea60018, 0xc00290f, 0x34a50910, 0x8fbf0078,
-0x8fbe0074, 0x8fb50070, 0x8fb3006c, 0x8fb10068, 0x3e00008, 0x27bd0080,
-0x3e00008, 0x0, 0x803821, 0x8f8600e4, 0x8f8400e0, 0x2402fff8,
-0x8cc30004, 0x822024, 0x10c4000d, 0x3c020100, 0x3c050100, 0x651024,
-0x1040000c, 0x27623ff8, 0x14c20002, 0x24c20008, 0x27623000, 0x403021,
-0x8cc30004, 0x14c4fff8, 0x651024, 0x3c020100, 0x621024, 0x14400007,
-0x0, 0x8cc20000, 0x8cc30004, 0xace20000, 0xace30004, 0x10000003,
-0x24020001, 0xaf8600e8, 0x1021, 0x3e00008, 0x0, 0x3e00008,
-0x0, 0x8f8300e4, 0x8f8500e0, 0x2402fff8, 0x8c640004, 0xa22824,
-0x1065000d, 0x3c020100, 0x3c060100, 0x861024, 0x10400008, 0x27623ff8,
-0x14620002, 0x24620008, 0x27623000, 0x401821, 0x8c640004, 0x1465fff8,
-0x861024, 0x3c020100, 0xac620004, 0xaf8300e8, 0x54650001, 0x24630008,
-0xaf8300e4, 0x3e00008, 0x0, 0x3e00008, 0x0, 0x8f8600e4,
-0x8f8200e0, 0x2403fff8, 0x431024, 0x14c20003, 0x803821, 0x10000006,
-0x1021, 0x8cc20000, 0x8cc30004, 0xace20000, 0xace30004, 0x24020001,
-0x3e00008, 0x0, 0x3e00008, 0x0, 0x8f8300e4, 0x27623ff8,
-0x14620002, 0x24620008, 0x27623000, 0x401821, 0xaf8300e8, 0xaf8300e4,
-0x3e00008, 0x0, 0x3e00008, 0x0, 0x8f8400e0, 0x8f8800c4,
-0x8f8300e8, 0x2402fff8, 0x823824, 0xe32023, 0x2c821000, 0x50400001,
-0x24841000, 0x420c2, 0x801821, 0x8ec401c0, 0x8ec501c4, 0x1021,
-0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaec401c0, 0xaec501c4,
-0x8f8300c8, 0x8ec20540, 0x1032023, 0x82102b, 0x14400004, 0x801821,
-0x8ec20540, 0x822021, 0x801821, 0x8ec401b8, 0x8ec501bc, 0x1021,
-0xa32821, 0xa3302b, 0x822021, 0x862021, 0xaec401b8, 0xaec501bc,
-0xaf8800c8, 0xaf8700e4, 0xaf8700e8, 0x3e00008, 0x0, 0x27bdff70,
-0xafbf0088, 0xafbe0084, 0xafb50080, 0xafb3007c, 0xafb10078, 0x92c200ed,
-0xa3a0004f, 0x1040000b, 0xa3a00067, 0x8ecd00f0, 0xafad0034, 0x8ece00f4,
-0xafae002c, 0x8ecd00fc, 0x8ed500f8, 0xafad006c, 0x8ece0100, 0x100000e9,
-0xafae003c, 0x3c020001, 0x8c423518, 0x40f809, 0x27a40020, 0x10400295,
-0x0, 0x8fa30024, 0x8fb50020, 0x306dffff, 0x25adfffc, 0xafad0034,
-0x92a20000, 0xafb5002c, 0x30420001, 0x10400017, 0xafa3006c, 0x8ec2011c,
-0x3c03ffff, 0x431024, 0x14400012, 0x2402ffff, 0x8ea30000, 0x14620004,
-0x3402ffff, 0x96a30004, 0x1062000c, 0x0, 0xc0022ad, 0x2a02021,
-0x304200ff, 0x14400007, 0x0, 0x3c020001, 0x8c423510, 0x40f809,
-0x0, 0x10000275, 0x0, 0x8fa20024, 0x3c03ffbf, 0x3463ffff,
-0x431024, 0x3c03ffff, 0x432824, 0x14a00003, 0xafa20024, 0x10000053,
-0x1821, 0x3c020080, 0xa21024, 0x50400007, 0x3c040040, 0x8ec202e4,
-0x24420001, 0xaec202e4, 0x8ec202e4, 0x10000049, 0x24030001, 0x3c070004,
-0x3c0c0001, 0x3c0b0002, 0x3c060010, 0x3c0a0008, 0x8ec20178, 0x3c090020,
-0x34088000, 0x24420001, 0xaec20178, 0x8ec20178, 0x851824, 0x10670021,
-0xe3102b, 0x14400007, 0x0, 0x106c0011, 0x0, 0x106b0015,
-0x0, 0x10000030, 0x42042, 0x10660023, 0xc3102b, 0x14400005,
-0x0, 0x106a0019, 0x0, 0x10000028, 0x42042, 0x10690021,
-0x0, 0x10000024, 0x42042, 0x8ec2012c, 0x24420001, 0xaec2012c,
-0x8ec2012c, 0x1000001e, 0x42042, 0x8ec202d4, 0x24420001, 0xaec202d4,
-0x8ec202d4, 0x10000018, 0x42042, 0x8ec202d8, 0x24420001, 0xaec202d8,
-0x8ec202d8, 0x10000012, 0x42042, 0x8ec202dc, 0x24420001, 0xaec202dc,
-0x8ec202dc, 0x1000000c, 0x42042, 0x8ec20128, 0x24420001, 0xaec20128,
-0x8ec20128, 0x10000006, 0x42042, 0x8ec202e0, 0x24420001, 0xaec202e0,
-0x8ec202e0, 0x42042, 0x1488ffc6, 0x851824, 0x24030001, 0x8f420260,
-0x8fae0034, 0x4e102b, 0x10400015, 0x306400ff, 0x8f8200e0, 0xafa20010,
-0x8f8200e4, 0x3c040001, 0x24842f5c, 0xafa20014, 0x8fa60020, 0x8fa70024,
-0x3c050006, 0xc00290f, 0x34a5f003, 0x8ec30150, 0x8fad006c, 0x3c020100,
-0x24040001, 0x1a26825, 0x24630001, 0xafad006c, 0xaec30150, 0x8ec20150,
-0x1080000f, 0x0, 0x8f420218, 0x30420800, 0x1440000b, 0x3c020180,
-0x8fae006c, 0x1c21024, 0x10400005, 0x0, 0x8ec20174, 0x24420001,
-0xaec20174, 0x8ec20174, 0x100001e4, 0x8fa30034, 0x8f420218, 0x30420400,
-0x10400004, 0x0, 0x8fad0034, 0x25ad0004, 0xafad0034, 0x8ec20050,
-0x5040002d, 0xafa0003c, 0x8fae0034, 0x4e102b, 0x50400029, 0xafa0003c,
-0x8ec20050, 0x1c21023, 0xafa2003c, 0x8ecd0050, 0x10000023, 0xafad0034,
-0x8ec2005c, 0xafa20010, 0x8ec20060, 0x3c040001, 0x24842f68, 0xafa20014,
-0x8ec6003c, 0x8ec70044, 0x3c050006, 0xc00290f, 0x34a5f002, 0x8ec202b4,
-0x2403ffbf, 0x283a024, 0x24420001, 0xaec202b4, 0x10000199, 0x8ec202b4,
-0x8e220018, 0x8fa70034, 0x3c040001, 0x24842f74, 0xafa20010, 0x8e220000,
-0x8e230004, 0x34a5f709, 0x2203021, 0xc00290f, 0xafa30014, 0x8ec20298,
-0x24420001, 0xaec20298, 0x10000189, 0x8ec20298, 0x96e20460, 0x8fae0034,
-0x4e102b, 0x10400004, 0x0, 0x240d0001, 0xa3ad004f, 0x8fae0034,
-0x11c001a0, 0x3c02ffff, 0x8fad006c, 0x1a21024, 0xafa20074, 0x8ec20068,
-0x8f430280, 0x24420001, 0x304203ff, 0x10620176, 0x0, 0x93a2004f,
-0x10400015, 0x0, 0x8ec3005c, 0x8ec20060, 0x1062000a, 0x26ce0060,
-0x8ec60060, 0xafae0054, 0x8ec30060, 0x21140, 0x24424dc0, 0x2e28821,
-0x24630001, 0x10000014, 0x306300ff, 0x92c20064, 0x1440ffb9, 0x0,
-0x8ec202c8, 0x24420001, 0xaec202c8, 0x8ec202c8, 0x8ec3003c, 0x8ec20044,
-0x1062ffb1, 0x26cd0044, 0x8ec60044, 0xafad0054, 0x8ec30044, 0x21140,
-0x24420dc0, 0x2e28821, 0x24630001, 0x306301ff, 0xafa3005c, 0x8f83012c,
-0x10600011, 0x24040002, 0x8f820124, 0x431023, 0x21143, 0x58400001,
-0x24420040, 0x82102a, 0x1040000a, 0x1021, 0x8f820128, 0x431023,
-0x21143, 0x58400001, 0x24420040, 0x82102a, 0x14400002, 0x24020001,
-0x1021, 0x304200ff, 0x1040ffa3, 0x3c050006, 0x96e20462, 0x30420010,
-0x1040001a, 0x340e8100, 0x96a2000c, 0x144e0017, 0x0, 0x92c200ed,
-0x14400014, 0x0, 0x96a2000e, 0xa6220016, 0x8ea20008, 0x8ea30004,
-0x8fad0034, 0x8ea40000, 0x25adfffc, 0xafad0034, 0xaea2000c, 0xaea30008,
-0xaea40004, 0x9622000e, 0x8fae002c, 0x240d0001, 0xa3ad0067, 0x25ce0004,
-0x34420200, 0xafae002c, 0xa622000e, 0x9627000a, 0x8fae0034, 0xee102b,
-0x14400002, 0x30f3fff8, 0x8fb30034, 0x8e240000, 0x8e250004, 0x8fad002c,
-0x24020007, 0xae2d0018, 0xafa20010, 0xafa60014, 0x8ec20004, 0x8fa6002c,
-0xafa20018, 0x8ec200a8, 0x40f809, 0x2603821, 0x1440001a, 0x3c050006,
-0x3c040001, 0x24842f80, 0x8e220018, 0x34a5f009, 0xafa20010, 0x8e220000,
-0x8e230004, 0x2203021, 0x2603821, 0xc00290f, 0xafa30014, 0x93a20067,
-0x104000fb, 0x0, 0x8ea20004, 0x8ea30008, 0x8ea4000c, 0x340e8100,
-0xa6ae000c, 0xaea20000, 0xaea30004, 0xaea40008, 0x96220016, 0x100000f0,
-0xa6a2000e, 0x8fad0034, 0x166d0089, 0x0, 0x962e000a, 0xafae0044,
-0x8fae003c, 0x9623000e, 0x1ae1021, 0xa622000a, 0x34620004, 0xa622000e,
-0x8fad0074, 0x11a00006, 0x307effff, 0x34620404, 0xa622000e, 0x8fae006c,
-0xe1402, 0xa6220014, 0x8ec30068, 0x8ee40478, 0x8ee5047c, 0x24020004,
-0xafa20010, 0x8ec20068, 0x2203021, 0x24070020, 0xafa20014, 0x8ec20008,
-0x31940, 0x604821, 0xafa20018, 0x8ec200a8, 0x4021, 0xa92821,
-0xa9182b, 0x882021, 0x40f809, 0x832021, 0x54400018, 0xa2c000ed,
-0x97ad0046, 0xa63e000e, 0xa62d000a, 0x8f820100, 0xafa20010, 0x8f820104,
-0x3c040001, 0x24842f8c, 0x3c050006, 0xafa20014, 0x8ec60068, 0x34a5f00b,
-0xc00290f, 0x2203821, 0x93a20067, 0x104000b6, 0x0, 0x8ea20004,
-0x8ea30008, 0x8ea4000c, 0x340e8100, 0x10000083, 0xa6ae000c, 0x8fae005c,
-0x8fad0054, 0xadae0000, 0x8ec202c4, 0x8ec30068, 0x2442ffff, 0xaec202c4,
-0x8ec202c4, 0x24630001, 0x306303ff, 0x26c20060, 0x15a20006, 0xaec30068,
-0x8ec202c0, 0x2442ffff, 0xaec202c0, 0x10000005, 0x8ec202c0, 0x8ec202bc,
-0x2442ffff, 0xaec202bc, 0x8ec202bc, 0x8ec20048, 0x24420001, 0xaec20048,
-0x8f430240, 0x43102b, 0x54400090, 0xafa00034, 0x8ed10068, 0x8ee40490,
-0x8ee50494, 0x8ec30008, 0x8f860120, 0x24020013, 0xafa20010, 0xafb10014,
-0xafa30018, 0x8ec200a8, 0x24070008, 0x40f809, 0x24c6001c, 0x1440000b,
-0x24020001, 0x3c040001, 0x24842f0c, 0xafb10010, 0xafa00014, 0x8ec60068,
-0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f008, 0x1021, 0x14400005,
-0x24020001, 0x3c010001, 0x370821, 0x1000000a, 0xac2281e0, 0x3c010001,
-0x370821, 0xac2081e0, 0x8ec20268, 0xaec00048, 0xaed1006c, 0x24420001,
-0xaec20268, 0x8ec20268, 0x8ec2027c, 0x24420001, 0xaec2027c, 0x8ec2027c,
-0x10000062, 0xafa00034, 0x962d000a, 0xafad0044, 0x9622000e, 0xa633000a,
-0x8fae0074, 0x11c00006, 0x305effff, 0x34420400, 0xa622000e, 0x8fad006c,
-0xd1402, 0xa6220014, 0x8ec30068, 0x8ee40478, 0x8ee5047c, 0x24020004,
-0xafa20010, 0x8ec20068, 0x2203021, 0x24070020, 0xafa20014, 0x8ec20008,
-0x31940, 0x604821, 0xafa20018, 0x8ec200a8, 0x4021, 0xa92821,
-0xa9182b, 0x882021, 0x40f809, 0x832021, 0x1440001f, 0x3c04001f,
-0x97ae0046, 0xa63e000e, 0xa62e000a, 0x8f820100, 0xafa20010, 0x8f820104,
-0x3c040001, 0x24842f8c, 0x3c050006, 0xafa20014, 0x8ec60068, 0x34a5f00d,
-0xc00290f, 0x2203821, 0x93a20067, 0x10400032, 0x340d8100, 0x8ea20004,
-0x8ea30008, 0x8ea4000c, 0xa6ad000c, 0xaea20000, 0xaea30004, 0xaea40008,
-0x96220016, 0xa6a2000e, 0x9622000e, 0x3042fdff, 0x10000025, 0xa622000e,
-0x8ec202c4, 0x8fae002c, 0x3484ffff, 0x1d37021, 0x2442ffff, 0xafae002c,
-0xaec202c4, 0x8ec202c4, 0x8ec302bc, 0x24020001, 0x8e202b, 0xa2c200ed,
-0x2463ffff, 0xaec302bc, 0x10800004, 0x8ec202bc, 0x8ec20540, 0x1c27023,
-0xafae002c, 0x8fad0034, 0x8fae0054, 0x1b36823, 0xafad0034, 0x8fad005c,
-0xadcd0000, 0x8ec20068, 0xa3a0004f, 0x8ec30048, 0x24420001, 0x304203ff,
-0x24630001, 0xaec20068, 0xaec30048, 0x8fae0034, 0x15c0fe86, 0x0,
-0x8fad0034, 0x11a0001f, 0x0, 0xaecd00f0, 0x8fae002c, 0xaece00f4,
-0xaed500f8, 0x93a20067, 0x10400004, 0x0, 0x8ec200f8, 0x24420004,
-0xaec200f8, 0x8fad006c, 0x8ec20068, 0xaecd00fc, 0x8fae003c, 0xaece0100,
-0x8f430280, 0x24420001, 0x304203ff, 0x14620006, 0x0, 0x8ec202b8,
-0x24420001, 0xaec202b8, 0x10000016, 0x8ec202b8, 0x8ec202b0, 0x24420001,
-0xaec202b0, 0x10000011, 0x8ec202b0, 0x8fad006c, 0x31a4ffff, 0x2484fffc,
-0x801821, 0x8ec401b8, 0x8ec501bc, 0x3c060001, 0x8cc63510, 0x1021,
-0xa32821, 0xa3382b, 0x822021, 0x872021, 0xaec401b8, 0xc0f809,
-0xaec501bc, 0x8fbf0088, 0x8fbe0084, 0x8fb50080, 0x8fb3007c, 0x8fb10078,
-0x3e00008, 0x27bd0090, 0x3e00008, 0x0, 0x27bdff90, 0xafbf0068,
-0xafbe0064, 0xafb50060, 0xafb3005c, 0xafb10058, 0x92c200ed, 0xafa0002c,
-0x10400007, 0xa3a00037, 0x8ecf00fc, 0x8ec800f0, 0x8ec900f4, 0x8ed500f8,
-0x100000d1, 0xafaf003c, 0x3c020001, 0x8c423518, 0x40f809, 0x27a40020,
-0x104001ae, 0x0, 0x8fa30024, 0x8fb50020, 0x3068ffff, 0x92a20000,
-0x2508fffc, 0x2a04821, 0x30420001, 0x1040001a, 0xafa3003c, 0x8ec2011c,
-0x3c03ffff, 0x431024, 0x14400015, 0x2402ffff, 0x8ea30000, 0x14620005,
-0x2a02021, 0x96a30004, 0x3402ffff, 0x1062000e, 0x0, 0xafa80048,
-0xc0022ad, 0xafa9004c, 0x304200ff, 0x8fa80048, 0x14400007, 0x8fa9004c,
-0x3c020001, 0x8c423510, 0x40f809, 0x0, 0x1000018c, 0x0,
-0x8fa20024, 0x3c03ffbf, 0x3463ffff, 0x431024, 0x3c03ffff, 0x432824,
-0x14a00003, 0xafa20024, 0x10000053, 0x1821, 0x3c020080, 0xa21024,
-0x50400007, 0x3c040040, 0x8ec202e4, 0x24420001, 0xaec202e4, 0x8ec202e4,
-0x10000049, 0x24030001, 0x3c070004, 0x3c0e0001, 0x3c0d0002, 0x3c060010,
-0x3c0c0008, 0x8ec20178, 0x3c0b0020, 0x340a8000, 0x24420001, 0xaec20178,
-0x8ec20178, 0x851824, 0x10670021, 0xe3102b, 0x14400007, 0x0,
-0x106e0011, 0x0, 0x106d0015, 0x0, 0x10000030, 0x42042,
-0x10660023, 0xc3102b, 0x14400005, 0x0, 0x106c0019, 0x0,
-0x10000028, 0x42042, 0x106b0021, 0x0, 0x10000024, 0x42042,
-0x8ec2012c, 0x24420001, 0xaec2012c, 0x8ec2012c, 0x1000001e, 0x42042,
-0x8ec202d4, 0x24420001, 0xaec202d4, 0x8ec202d4, 0x10000018, 0x42042,
-0x8ec202d8, 0x24420001, 0xaec202d8, 0x8ec202d8, 0x10000012, 0x42042,
-0x8ec202dc, 0x24420001, 0xaec202dc, 0x8ec202dc, 0x1000000c, 0x42042,
-0x8ec20128, 0x24420001, 0xaec20128, 0x8ec20128, 0x10000006, 0x42042,
-0x8ec202e0, 0x24420001, 0xaec202e0, 0x8ec202e0, 0x42042, 0x148affc6,
-0x851824, 0x24030001, 0x8f420260, 0x48102b, 0x10400019, 0x306400ff,
-0x8f8200e0, 0xafa20010, 0x8f8200e4, 0x3c040001, 0x24842f5c, 0xafa20014,
-0x8fa60020, 0x8fa70024, 0x3c050006, 0x34a5f003, 0xafa80048, 0xc00290f,
-0xafa9004c, 0x8ec30150, 0x8faf003c, 0x3c020100, 0x24040001, 0x1e27825,
-0x24630001, 0xafaf003c, 0xaec30150, 0x8ec20150, 0x8fa9004c, 0x8fa80048,
-0x10800025, 0x0, 0x8f420218, 0x30420800, 0x14400021, 0x3c020180,
-0x8faf003c, 0x1e21024, 0x104000fe, 0x1001821, 0x8ec20174, 0x24420001,
-0xaec20174, 0x8ec20174, 0x100000f8, 0x1001821, 0x8ec2005c, 0xafa20010,
-0x8ec20060, 0x3c040001, 0x24842f68, 0xafa20014, 0x8ec6003c, 0x8ec70044,
-0x3c050006, 0x34a5f002, 0xafa80048, 0xc00290f, 0xafa9004c, 0x8ec202b4,
-0x2403ffbf, 0x283a024, 0x24420001, 0xaec202b4, 0x8ec202b4, 0x8fa80048,
-0x100000c2, 0x8fa9004c, 0x8f420218, 0x30420400, 0x54400001, 0x25080004,
-0x96e20460, 0x48102b, 0x10400003, 0x0, 0x3c0f8000, 0xafaf002c,
-0x110000d2, 0x3c02ffff, 0x8faf003c, 0x1e21024, 0xafa20044, 0x8ec20068,
-0x8f430280, 0x24420001, 0x304203ff, 0x106200ad, 0x0, 0x8faf002c,
-0x11e00014, 0x0, 0x8ec3005c, 0x8ec20060, 0x10620009, 0x26cb0060,
-0x8ec60060, 0x8ec30060, 0x21140, 0x24424dc0, 0x2e28821, 0x24630001,
-0x10000014, 0x306a00ff, 0x92c20064, 0x1440ffc4, 0x0, 0x8ec202c8,
-0x24420001, 0xaec202c8, 0x8ec202c8, 0x8ec3003c, 0x8ec20044, 0x1062ffbc,
-0x26cb0044, 0x8ec60044, 0xafa0002c, 0x8ec30044, 0x21140, 0x24420dc0,
-0x2e28821, 0x24630001, 0x306a01ff, 0x96e20462, 0x30420010, 0x10400017,
-0x0, 0x96a2000c, 0x340f8100, 0x144f0013, 0x0, 0x92c200ed,
-0x14400010, 0x0, 0x96a2000e, 0xa6220016, 0x8ea20008, 0x8ea30004,
-0x8ea40000, 0x2508fffc, 0xaea2000c, 0xaea30008, 0xaea40004, 0x9622000e,
-0x25290004, 0x240f0001, 0xa3af0037, 0x34420200, 0xa622000e, 0x9623000a,
-0x68102b, 0x14400002, 0x3073fff8, 0x1009821, 0x92c200ed, 0x14400012,
-0x260f021, 0x9523000c, 0x24020800, 0x5462000f, 0xae290018, 0x91220017,
-0x38430006, 0x2c630001, 0x38420011, 0x2c420001, 0x621825, 0x50600007,
-0xae290018, 0x95220010, 0x2443000e, 0x73102b, 0x54400001, 0x60f021,
-0xae290018, 0x92c300ed, 0x8e240000, 0x8e250004, 0x8faf002c, 0x2402000b,
-0xafa20010, 0x3182b, 0x31ec0, 0xcf1025, 0x431025, 0xafa20014,
-0x8ec20004, 0xafa20018, 0x8ec200a8, 0x3c03821, 0x1203021, 0xafa80048,
-0xafa9004c, 0xafaa0050, 0x40f809, 0xafab0054, 0x8fa80048, 0x8fa9004c,
-0x8faa0050, 0x8fab0054, 0x1440001d, 0x3c050006, 0x3c040001, 0x24842f80,
-0x8e220018, 0x34a5f009, 0xafa20010, 0x8e220000, 0x8e230004, 0x2203021,
-0x3c03821, 0xafa80048, 0xafa9004c, 0xc00290f, 0xafa30014, 0x93a20037,
-0x8fa80048, 0x8fa9004c, 0x1040002a, 0x340f8100, 0x8ea20004, 0x8ea30008,
-0x8ea4000c, 0xa6af000c, 0xaea20000, 0xaea30004, 0xaea40008, 0x96220016,
-0x10000020, 0xa6a2000e, 0x8faf0044, 0x11e00007, 0x0, 0x8faf003c,
-0x9623000e, 0xf1402, 0x34630400, 0xa6220014, 0xa623000e, 0x56680008,
-0x1334821, 0x9622000e, 0xa628000a, 0x4021, 0x34420004, 0xa622000e,
-0x1000000c, 0xa2c000ed, 0x3c03001f, 0x3463ffff, 0x24020001, 0x69182b,
-0xa633000a, 0x10600003, 0xa2c200ed, 0x8ec20540, 0x1224823, 0x1134023,
-0xafa0002c, 0x1500ff4f, 0xad6a0000, 0x1100001b, 0x0, 0xaec800f0,
-0xaec900f4, 0xaed500f8, 0x93a20037, 0x10400004, 0x0, 0x8ec200f8,
-0x24420004, 0xaec200f8, 0x8faf003c, 0x8ec20068, 0xaecf00fc, 0x8f430280,
-0x24420001, 0x14620006, 0x0, 0x8ec202b8, 0x24420001, 0xaec202b8,
-0x10000016, 0x8ec202b8, 0x8ec202b0, 0x24420001, 0xaec202b0, 0x10000011,
-0x8ec202b0, 0x8faf003c, 0x31e4ffff, 0x2484fffc, 0x801821, 0x8ec401b8,
-0x8ec501bc, 0x3c060001, 0x8cc63510, 0x1021, 0xa32821, 0xa3382b,
-0x822021, 0x872021, 0xaec401b8, 0xc0f809, 0xaec501bc, 0x8fbf0068,
-0x8fbe0064, 0x8fb50060, 0x8fb3005c, 0x8fb10058, 0x3e00008, 0x27bd0070,
-0x3e00008, 0x0, 0x27bdffd8, 0xafbf0024, 0xafb10020, 0x8ec30040,
-0x8ec20038, 0x1062004d, 0x0, 0x8ec30038, 0x8ec20040, 0x623823,
-0x4e20001, 0x24e70200, 0x8ec30044, 0x8ec20040, 0x43102b, 0x14400004,
-0x24020200, 0x8ec30040, 0x10000005, 0x431823, 0x8ec20044, 0x8ec30040,
-0x431023, 0x2443ffff, 0xe08821, 0x71102a, 0x54400001, 0x608821,
-0x8ec90040, 0x8ee40458, 0x8ee5045c, 0x8ec60040, 0x113940, 0x24080002,
-0xafa80010, 0x8ec80040, 0x94940, 0x1201821, 0x1021, 0xafa80014,
-0x8ec80010, 0xa32821, 0xa3482b, 0x822021, 0x892021, 0x63140,
-0xafa80018, 0x8ec200a4, 0x24c60dc0, 0x40f809, 0x2e63021, 0x1440000e,
-0x24030040, 0x8ec20040, 0xafa20010, 0x8ec20044, 0x3c040001, 0x24842f98,
-0xafa20014, 0x8ec60038, 0x8ec7003c, 0x3c050007, 0xc00290f, 0x34a5f001,
-0x10000010, 0x0, 0x8ec20030, 0x24420001, 0x50430003, 0x1021,
-0x8ec20030, 0x24420001, 0xaec20030, 0x8ec20030, 0x21080, 0x571021,
-0xac510cc0, 0x8ec20040, 0x511021, 0x304201ff, 0xaec20040, 0x8ec30040,
-0x8ec20038, 0x14620017, 0x0, 0x8ec20000, 0x10400007, 0x2403fdff,
-0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0, 0x10000005, 0x0,
-0xaf800048, 0x8f820048, 0x1040fffd, 0x0, 0x8f820060, 0x431024,
-0xaf820060, 0x8ec20000, 0x10400003, 0x0, 0x10000002, 0xaf80004c,
-0xaf800048, 0x8fbf0024, 0x8fb10020, 0x3e00008, 0x27bd0028, 0x3e00008,
-0x0, 0x27bdffd8, 0xafbf0024, 0xafb10020, 0x8ec30058, 0x8ec20054,
-0x1062004d, 0x0, 0x8ec30054, 0x8ec20058, 0x623823, 0x4e20001,
-0x24e70100, 0x8ec30060, 0x8ec20058, 0x43102b, 0x14400004, 0x24020100,
-0x8ec30058, 0x10000005, 0x431823, 0x8ec20060, 0x8ec30058, 0x431023,
-0x2443ffff, 0xe08821, 0x71102a, 0x54400001, 0x608821, 0x8ec90058,
-0x8ee40468, 0x8ee5046c, 0x8ec60058, 0x113940, 0x24080003, 0xafa80010,
-0x8ec80058, 0x94940, 0x1201821, 0x1021, 0xafa80014, 0x8ec80010,
-0xa32821, 0xa3482b, 0x822021, 0x892021, 0x63140, 0xafa80018,
-0x8ec200a4, 0x24c64dc0, 0x40f809, 0x2e63021, 0x1440000e, 0x24030040,
-0x8ec20058, 0xafa20010, 0x8ec20060, 0x3c040001, 0x24842fa4, 0xafa20014,
-0x8ec60054, 0x8ec7005c, 0x3c050007, 0xc00290f, 0x34a5f010, 0x10000010,
-0x0, 0x8ec20030, 0x24420001, 0x50430003, 0x1021, 0x8ec20030,
-0x24420001, 0xaec20030, 0x8ec20030, 0x21080, 0x571021, 0xac510cc0,
-0x8ec20058, 0x511021, 0x304200ff, 0xaec20058, 0x8ec30058, 0x8ec20054,
-0x14620017, 0x0, 0x8ec20000, 0x10400007, 0x2403feff, 0xaf80004c,
-0x8f82004c, 0x1040fffd, 0x0, 0x10000005, 0x0, 0xaf800048,
-0x8f820048, 0x1040fffd, 0x0, 0x8f820060, 0x431024, 0xaf820060,
-0x8ec20000, 0x10400003, 0x0, 0x10000002, 0xaf80004c, 0xaf800048,
-0x8fbf0024, 0x8fb10020, 0x3e00008, 0x27bd0028, 0x3e00008, 0x0,
-0x8f820120, 0x8ec300e8, 0x8f820124, 0x8f860128, 0x24020040, 0x24630001,
-0x50620003, 0x1021, 0x8ec200e8, 0x24420001, 0xaec200e8, 0x8ec200e8,
-0x8ec400e8, 0x8ec300e4, 0x210c0, 0x24426fc0, 0x14830007, 0x2e22821,
-0x8f820128, 0x24420020, 0xaf820128, 0x8f820128, 0x10000011, 0xaca00000,
-0x8ec200e8, 0x24030040, 0x24420001, 0x50430003, 0x1021, 0x8ec200e8,
-0x24420001, 0x220c0, 0x2e41021, 0x8c426fc4, 0x8f830128, 0x21140,
-0x621821, 0x2e41021, 0xaf830128, 0xac406fc0, 0x8cc20018, 0x2443fffe,
-0x2c620018, 0x1040000a, 0x31080, 0x3c010001, 0x220821, 0x8c222fb0,
-0x400008, 0x0, 0x24020001, 0x3c010001, 0x370821, 0xac2281e8,
-0x3e00008, 0x0, 0x3e00008, 0x0, 0x27bdffa8, 0xafbf0050,
-0xafbe004c, 0xafb50048, 0xafb30044, 0xafb10040, 0x8f830128, 0x8f820124,
-0x106201e1, 0x0, 0x8f9e0128, 0x8f820128, 0x24420020, 0xaf820128,
-0x8fc40018, 0x8f820128, 0x2402000b, 0x1482018f, 0x24020002, 0x8fc3001c,
-0x97c20016, 0x3064ffff, 0xafc20014, 0x3c028000, 0x621024, 0xafc4001c,
-0xafa2002c, 0x8fab002c, 0x3c020800, 0x11600004, 0x622824, 0x41140,
-0x10000003, 0x24424dc0, 0x41140, 0x24420dc0, 0x2e2a821, 0x96a2000e,
-0x3043fffc, 0x30420400, 0x10400003, 0xa6a3000e, 0x10000137, 0x8821,
-0x10a00004, 0x8821, 0x97d10016, 0x10000132, 0x0, 0x8eab0018,
-0xafab0034, 0x9563000c, 0x96eb0462, 0x24020800, 0x1462012b, 0xafab003c,
-0x8fab0034, 0x2573000e, 0x8fab003c, 0x31620002, 0x1040003f, 0x3c030020,
-0x8ec70540, 0x263102b, 0x14400002, 0x2604821, 0x2674823, 0x25220014,
-0x43102b, 0x10400027, 0x24030005, 0x91220000, 0x3042000f, 0x14430024,
-0x1202021, 0x952a0000, 0x25290002, 0x95280000, 0x25290002, 0x95270000,
-0x25290002, 0x95260000, 0x25290002, 0x95250000, 0x25290002, 0x95230000,
-0x25290002, 0x95220000, 0x25290002, 0x95240000, 0x25290002, 0x1485021,
-0x1475021, 0x1465021, 0x1455021, 0x1435021, 0x1425021, 0x95220000,
-0x95230002, 0x1445021, 0x1425021, 0x1435021, 0xa1c02, 0x3142ffff,
-0x625021, 0xa1c02, 0x3142ffff, 0x10000009, 0x625021, 0x1202021,
-0x90850000, 0x3c060020, 0x8ec200ac, 0x30a5000f, 0x40f809, 0x52840,
-0x304affff, 0x3143ffff, 0x50600001, 0x3403ffff, 0x96a2000e, 0x34420002,
-0x10000002, 0xa6a2000e, 0x1821, 0xa6a30010, 0x8fab003c, 0x31620001,
-0x104000e1, 0x0, 0x92620009, 0x38430006, 0x2c630001, 0x38420011,
-0x2c420001, 0x621825, 0x106000d9, 0x3c030020, 0x8fa60034, 0x8ec70540,
-0xc3102b, 0x50400001, 0xc73023, 0x24c2000e, 0x43102b, 0x1040001a,
-0xc02021, 0x94c70000, 0x24c60002, 0x94c50000, 0x24c60002, 0x94c30000,
-0x24c60002, 0x94c20000, 0x24c60002, 0x94c40000, 0x24c60002, 0xe53821,
-0xe33821, 0xe23821, 0x94c20000, 0x94c30002, 0xe43821, 0xe23821,
-0xe33821, 0x71c02, 0x30e2ffff, 0x623821, 0x71c02, 0x30e2ffff,
-0x10000006, 0x623821, 0x8ec200ac, 0x24050007, 0x40f809, 0x3c060020,
-0x3047ffff, 0x8fab003c, 0x31620008, 0x10400003, 0x30e8ffff, 0x1000005b,
-0x4821, 0x96620006, 0x30421fff, 0x10400007, 0x2602821, 0x92620000,
-0x96630002, 0x3042000f, 0x21080, 0x10000051, 0x624823, 0x3c070020,
-0x8ec30540, 0xa7102b, 0x50400001, 0xa32823, 0x24a20014, 0x47102b,
-0x10400015, 0xa02021, 0x90a20000, 0x94a30002, 0x3042000f, 0x21080,
-0x623023, 0xafa20020, 0x90a30009, 0x24a5000c, 0x94a20000, 0x24a50002,
-0x94a40000, 0x24a50002, 0xc33021, 0xc23021, 0x94a20000, 0x94a30002,
-0xc43021, 0xc23021, 0x1000002d, 0xc33021, 0x24a50002, 0xa7102b,
-0x50400001, 0xa32823, 0x94a60000, 0x802821, 0xa7102b, 0x50400001,
-0xa32823, 0x90a20000, 0x24850009, 0x3042000f, 0x21080, 0xc23023,
-0xafa20020, 0xa7102b, 0x50400001, 0xa32823, 0x90a20000, 0x2485000c,
-0xc23021, 0xa7102b, 0x50400001, 0xa32823, 0x94a20000, 0x24a50002,
-0xc23021, 0xa7102b, 0x50400001, 0xa32823, 0x94a20000, 0x24a50002,
-0xc23021, 0xa7102b, 0x50400001, 0xa32823, 0x94a20000, 0x24a50002,
-0xc23021, 0xa7102b, 0x50400001, 0xa32823, 0x94a20000, 0xc23021,
-0x61c02, 0x30c2ffff, 0x623021, 0x61402, 0x30c3ffff, 0x431021,
-0x3049ffff, 0x96a2000e, 0x30420004, 0x10400041, 0x0, 0x8f420218,
-0x30420400, 0x1040003d, 0x3c070020, 0x97c2000e, 0x8fc30008, 0x8ec60540,
-0x621821, 0x2463fffc, 0x67102b, 0x50400001, 0x661823, 0x602821,
-0x24a20004, 0x47102b, 0x5040000a, 0xa7102b, 0x90a20000, 0x90a40001,
-0x90a30002, 0x21200, 0x441021, 0x90a40003, 0x31a00, 0x10000017,
-0x431021, 0x50400001, 0xa62823, 0x90a20000, 0x24a50001, 0x22200,
-0xa7102b, 0x50400001, 0xa62823, 0x90a20000, 0x24a50001, 0x822021,
-0xa7102b, 0x50400001, 0xa62823, 0x90a20000, 0x24a50001, 0x21200,
-0x822021, 0xa7102b, 0x50400001, 0xa62823, 0x90a20000, 0x822021,
-0x41c02, 0x3082ffff, 0x622021, 0x41402, 0x3083ffff, 0x431021,
-0x3042ffff, 0x1024021, 0x81c02, 0x3102ffff, 0x624021, 0x81c02,
-0x3102ffff, 0x624021, 0x3108ffff, 0x8fc20014, 0x488823, 0x111402,
-0x2228821, 0x2298821, 0x111402, 0x2228821, 0x3231ffff, 0x52200001,
-0x3411ffff, 0x96a2000e, 0x34420001, 0xa6a2000e, 0x96a2000e, 0x24080002,
-0x30420004, 0x10400002, 0xa6b10012, 0x24080004, 0x8ec90068, 0x8ee40478,
-0x8ee5047c, 0xafa80010, 0x8ec80068, 0x8fab002c, 0x2a03021, 0x24070020,
-0x10b4025, 0xafa80014, 0x8ec80008, 0x94940, 0x1201821, 0xafa80018,
-0x8ec800a8, 0x1021, 0xa32821, 0xa3482b, 0x822021, 0x100f809,
-0x892021, 0x1440000e, 0x0, 0x8f820120, 0xafa20010, 0x8f820128,
-0x3c040001, 0x24843010, 0xafa20014, 0x8fc6001c, 0x8f870124, 0x3c050008,
-0xc00290f, 0x34a50001, 0x1000005f, 0x0, 0x8ec20068, 0x24420001,
-0x304203ff, 0xaec20068, 0x8fab002c, 0x11600006, 0x0, 0x8ec202c0,
-0x2442ffff, 0xaec202c0, 0x10000005, 0x8ec202c0, 0x8ec202bc, 0x2442ffff,
-0xaec202bc, 0x8ec202bc, 0x8ec202c4, 0x2442ffff, 0xaec202c4, 0x1000004a,
-0x8ec202c4, 0x14820005, 0x24020004, 0x8ec20048, 0x24420001, 0x10000044,
-0xaec20048, 0x14820036, 0x38830011, 0x97c2001e, 0xafc2001c, 0x8ec20048,
-0x24420001, 0xaec20048, 0x8f430240, 0x43102b, 0x14400039, 0x24070008,
-0x8ed10068, 0x8ee40490, 0x8ee50494, 0x8ec30008, 0x8f860120, 0x24020013,
-0xafa20010, 0xafb10014, 0xafa30018, 0x8ec200a8, 0x40f809, 0x24c6001c,
-0x1440000b, 0x24020001, 0x3c040001, 0x24842f0c, 0xafb10010, 0xafa00014,
-0x8ec60068, 0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f008, 0x1021,
-0x14400005, 0x24020001, 0x3c010001, 0x370821, 0x1000000a, 0xac2281e0,
-0x3c010001, 0x370821, 0xac2081e0, 0x8ec20268, 0xaec00048, 0xaed1006c,
-0x24420001, 0xaec20268, 0x8ec20268, 0x8ec2027c, 0x24420001, 0xaec2027c,
-0x1000000d, 0x8ec2027c, 0x2c630001, 0x38820013, 0x2c420001, 0x621825,
-0x14600004, 0x24020001, 0x24020012, 0x14820004, 0x24020001, 0x3c010001,
-0x370821, 0xac2281e8, 0x8fbf0050, 0x8fbe004c, 0x8fb50048, 0x8fb30044,
-0x8fb10040, 0x3e00008, 0x27bd0058, 0x3e00008, 0x0, 0x0,
-0x0, 0x0, 0x8ec20538, 0xaf8200c0, 0x8ec20538, 0xaf8200c4,
-0x8ec20538, 0xaf8200c8, 0x8ec20534, 0xaf8200d0, 0x8ec20534, 0xaf8200d4,
-0x8ec20534, 0x3e00008, 0xaf8200d8, 0x27bdffe8, 0x27840208, 0x27450200,
-0xafbf0010, 0xc0029a2, 0x24060008, 0x8f420204, 0xc003c86, 0xaf820210,
-0x24040001, 0x8f460248, 0x24020004, 0x3c010001, 0xac22340c, 0xc0046cc,
-0x24050004, 0x3c020001, 0x8c423408, 0x30420001, 0x10400007, 0x24020001,
-0x3c010001, 0xac22340c, 0x24040001, 0x24050001, 0xc0046cc, 0x3c06601b,
-0x8ec20548, 0x8ec4054c, 0x8ec30550, 0x3c010001, 0xac203404, 0x3c010001,
-0xac20341c, 0x21640, 0x42140, 0x34840403, 0x441025, 0x31bc0,
-0x431025, 0xaf82021c, 0x8fbf0010, 0x3e00008, 0x27bd0018, 0x27bdffe0,
-0x3c050008, 0x34a50400, 0xafbf0018, 0xafa00010, 0xafa00014, 0x8f860200,
-0x3c040001, 0x248430dc, 0xc00290f, 0x3821, 0x8ec20368, 0x24420001,
-0xaec20368, 0x8ec20368, 0x8f830200, 0x3c023f00, 0x621824, 0x8fbf0018,
-0x3c020400, 0x3e00008, 0x27bd0020, 0x27bdffd8, 0xafbf0020, 0xafb3001c,
-0xafb10018, 0x8f910220, 0x8ec202fc, 0x24420001, 0xaec202fc, 0x8ec202fc,
-0x8ec30310, 0x3c020001, 0x8c42341c, 0x3c040001, 0x248430e8, 0xafa20014,
-0xafa30010, 0x8ec70314, 0x3c050008, 0xc00290f, 0x2203021, 0x3c024000,
-0x2221024, 0x104000e5, 0x3c040100, 0x8ec20314, 0x24420001, 0xaec20314,
-0x8ec20314, 0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024, 0x34420004,
-0xaf820220, 0x8f8200e0, 0x8f8300c4, 0x3c02001f, 0x3442ffff, 0x24690008,
-0x49102b, 0x10400003, 0x0, 0x8ec20540, 0x1224823, 0x8f8700c8,
-0x8f850120, 0x8f840124, 0x10000005, 0x5821, 0x8ec20534, 0x82102b,
-0x50400001, 0x27644800, 0x10a40010, 0x316200ff, 0x8c820018, 0x38430007,
-0x2c630001, 0x3842000b, 0x2c420001, 0x621825, 0x5060fff3, 0x24840020,
-0x8ec20328, 0x240b0001, 0x24420001, 0xaec20328, 0x8ec20328, 0x8c870008,
-0x316200ff, 0x14400078, 0x0, 0x92c200ed, 0x14400075, 0x0,
-0x8f8500e4, 0x8f8200e0, 0x2403fff8, 0x433024, 0xc51023, 0x218c3,
-0x4620001, 0x24630100, 0x8f8a00c4, 0x10600005, 0x24020001, 0x10620009,
-0x0, 0x10000021, 0x0, 0x8ec20318, 0x1403821, 0x24420001,
-0xaec20318, 0x10000060, 0x8ec20318, 0x8ec2031c, 0x24420001, 0xaec2031c,
-0x8ca70000, 0x8ec20540, 0x8ec3031c, 0x1471823, 0x43102b, 0x10400004,
-0x2c62233f, 0x8ec20540, 0x621821, 0x2c62233f, 0x14400051, 0x3c020100,
-0xaca20004, 0x8f8200e8, 0x24420008, 0xaf8200e8, 0x8f8200e8, 0x8f8200e4,
-0x1403821, 0x24420008, 0xaf8200e4, 0x10000046, 0x8f8200e4, 0x8ec20320,
-0x24420001, 0xaec20320, 0x8ca80000, 0x8ec20540, 0x8ec30320, 0x1092023,
-0x44102b, 0x10400003, 0x0, 0x8ec20540, 0x822021, 0x8ec20544,
-0x44102b, 0x10400003, 0x3c030100, 0x10000034, 0x1003821, 0x8ca20004,
-0x431025, 0xaca20004, 0x8f8200e4, 0x24450008, 0xaf8500e4, 0x8f8500e4,
-0x10a60025, 0x3c080100, 0x8ec20174, 0x24420001, 0xaec20174, 0x8ca20004,
-0x8ec30174, 0x481024, 0x1440000e, 0x0, 0x8ca30000, 0x8ec20540,
-0x692023, 0x44102b, 0x10400003, 0x0, 0x8ec20540, 0x822021,
-0x8ec20544, 0x44102b, 0x10400006, 0x0, 0x603821, 0x8ec20544,
-0x44102b, 0x1440000a, 0x0, 0x8ca20004, 0x481025, 0xaca20004,
-0x8f8200e4, 0x24450008, 0xaf8500e4, 0x8f8500e4, 0x14a6ffdf, 0x0,
-0x14a60005, 0x0, 0x1403821, 0xaf8600e4, 0x10000003, 0xaf8600e8,
-0xaf8500e4, 0xaf8500e8, 0x8f8300c8, 0x8ec20540, 0x692023, 0x44102b,
-0x10400003, 0x0, 0x8ec20540, 0x822021, 0x8ec20544, 0x82102b,
-0x50400008, 0x5821, 0x8ec20540, 0xe92023, 0x44102b, 0x10400003,
-0x0, 0x8ec20540, 0x822021, 0x8ec20544, 0x82102b, 0x10400006,
-0x316200ff, 0x1440001c, 0x3c02fdff, 0x92c200ed, 0x14400019, 0x3c02fdff,
-0xaf8700c8, 0x8f8400c8, 0x8f8300c4, 0x8ec20540, 0x832023, 0x44102b,
-0x10400003, 0x0, 0x8ec20540, 0x822021, 0x8ec20544, 0x2c830001,
-0x44102b, 0x431025, 0x10400009, 0x3c02fdff, 0x8f820220, 0x3c0308ff,
-0x3463fffb, 0x431024, 0x3c034000, 0x431025, 0x10000075, 0xaf820220,
-0x3442ffff, 0x8ec30324, 0x282a024, 0x24020001, 0xa2c200ec, 0x24630001,
-0xaec30324, 0x1000006c, 0x8ec20324, 0x2241024, 0x10400013, 0x3c130200,
-0x8ec20300, 0x24420001, 0xaec20300, 0x8ec20300, 0x8f820220, 0x3c0308ff,
-0x3463ffff, 0x431024, 0x441025, 0xaf820220, 0x3c020004, 0x2221024,
-0x14400005, 0x3c130200, 0xc003ab1, 0x0, 0x10000057, 0x0,
-0x2331024, 0x50400008, 0x3c130400, 0x8ec20304, 0x24420001, 0xaec20304,
-0xc003ab1, 0x8ec20304, 0x10000019, 0x0, 0x2331024, 0x1040001d,
-0x3c020800, 0x8f830224, 0x24021402, 0x14620009, 0x3c050008, 0x3c040001,
-0x248430f4, 0xafa00010, 0xafa00014, 0x8f860224, 0x34a5ffff, 0xc00290f,
-0x3821, 0x8ec20308, 0x24420001, 0xaec20308, 0x8ec20308, 0x8f820220,
-0x2202021, 0x34420002, 0xc00447c, 0xaf820220, 0x8f820220, 0x3c0308ff,
-0x3463ffff, 0x431024, 0x531025, 0x1000002e, 0xaf820220, 0x2221024,
-0x10400009, 0x3c050008, 0x3c040001, 0x248430dc, 0xafa00010, 0xafa00014,
-0x8f860220, 0x34a50403, 0xc00290f, 0x3821, 0x3c021000, 0x2221024,
-0x10400009, 0x3c050008, 0x3c040001, 0x248430dc, 0xafa00010, 0xafa00014,
-0x8f860220, 0x34a50401, 0xc00290f, 0x3821, 0x3c022000, 0x2221024,
-0x10400009, 0x3c050008, 0x3c040001, 0x248430dc, 0xafa00010, 0xafa00014,
-0x8f860220, 0x34a50402, 0xc00290f, 0x3821, 0x6210009, 0x3c050008,
-0x3c040001, 0x248430dc, 0xafa00010, 0xafa00014, 0x8f860220, 0x34a50404,
-0xc00290f, 0x3821, 0x8fbf0020, 0x8fb3001c, 0x8fb10018, 0x3e00008,
-0x27bd0028, 0x3e00008, 0x0, 0x3c020001, 0x8c42341c, 0x27bdffc0,
-0xafbf0038, 0xafbe0034, 0xafb50030, 0xafb3002c, 0x1040000f, 0xafb10028,
-0x3c040001, 0x24843100, 0x3c050008, 0xafa00010, 0xafa00014, 0x8f860220,
-0x34a50498, 0x24020001, 0x3c010001, 0xac20341c, 0x3c010001, 0xac223410,
-0xc00290f, 0x3821, 0x3c037fff, 0x8f420268, 0x3463ffff, 0x3c04fdff,
-0x431024, 0xaf420268, 0x8ee204a8, 0x3484ffff, 0x30420002, 0x10400091,
-0x284a024, 0x3c040600, 0x8ee204a8, 0x34842000, 0x2403fffd, 0x431024,
-0xaee204a8, 0xafa40020, 0x8ec3002c, 0x240200ff, 0x10620004, 0x27a70020,
-0x8ec2002c, 0x10000002, 0x24530001, 0x9821, 0x8f420228, 0x1662000f,
-0x0, 0x3c040001, 0x248430b8, 0xafa00010, 0xafa00014, 0x8ec6002c,
-0x8f470228, 0x3c050009, 0xc00290f, 0x34a5f00f, 0x8ec202a0, 0x24420001,
-0xaec202a0, 0x1000006d, 0x8ec202a0, 0x8ec2002c, 0x210c0, 0x571021,
-0x8ce30000, 0x8ce40004, 0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054,
-0x247103e8, 0x2221023, 0x2c4203e9, 0x1040001e, 0xa821, 0x241e000c,
-0x8ec8002c, 0x8ee40428, 0x8ee5042c, 0x8ec6002c, 0x24070008, 0xafbe0010,
-0xafb30014, 0x840c0, 0x1001821, 0x1021, 0x8ec80008, 0xa32821,
-0xa3482b, 0x822021, 0x892021, 0x630c0, 0xafa80018, 0x8ec200a8,
-0x24c604c0, 0x40f809, 0x2e63021, 0x54400006, 0x24150001, 0x8f820054,
-0x2221023, 0x2c4203e9, 0x1440ffe5, 0x0, 0x32a200ff, 0x54400011,
-0xaed3002c, 0x3c040001, 0x248430c4, 0xafa00010, 0xafa00014, 0x8f860120,
-0x8f870124, 0x3c050009, 0x10000030, 0x34a5f010, 0x8ec2026c, 0x24150001,
-0x24420001, 0xaec2026c, 0x8ec2026c, 0x1000001f, 0x32a200ff, 0x8f830054,
-0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9, 0x10400017, 0xa821,
-0x3c1e0020, 0x24130011, 0x8ec20008, 0x8ee40488, 0x8ee5048c, 0x8ec3002c,
-0x8f860120, 0xafb30010, 0x5e1025, 0xafa30014, 0xafa20018, 0x8ec200a8,
-0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe2, 0x0, 0x8f820054,
-0x2221023, 0x2c4203e9, 0x1440ffed, 0x0, 0x32a200ff, 0x1440000f,
-0x0, 0x3c040001, 0x248430d0, 0xafa00010, 0xafa00014, 0x8f860120,
-0x8f870124, 0x3c050009, 0x34a5f011, 0xc00290f, 0x0, 0x8ec202d0,
-0x24420001, 0xaec202d0, 0x8ec202d0, 0x8ec20250, 0x24420001, 0xaec20250,
-0x8ec20250, 0x8fbf0038, 0x8fbe0034, 0x8fb50030, 0x8fb3002c, 0x8fb10028,
-0x3e00008, 0x27bd0040, 0x3c020001, 0x8c42341c, 0x27bdffe0, 0x1440000d,
-0xafbf0018, 0x3c040001, 0x2484310c, 0x3c050008, 0xafa00010, 0xafa00014,
-0x8f860220, 0x34a50499, 0x24020001, 0x3c010001, 0xac22341c, 0xc00290f,
-0x3821, 0x92c2011d, 0x10400008, 0x24040001, 0x8f820220, 0x3c0308ff,
-0x3463ffff, 0x431024, 0x34420008, 0xaf820220, 0x24040001, 0xc0047d1,
-0x24050004, 0xaf420268, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x0,
-0x86102b, 0x50400001, 0x872023, 0xc41023, 0x24843, 0x125102b,
-0x1040001b, 0x91040, 0x824021, 0x88102b, 0x10400007, 0x1821,
-0x94820000, 0x24840002, 0x621821, 0x88102b, 0x1440fffb, 0x0,
-0x602021, 0xc73023, 0xa91023, 0x21040, 0xc22821, 0xc5102b,
-0x10400007, 0x1821, 0x94c20000, 0x24c60002, 0x621821, 0xc5102b,
-0x1440fffb, 0x0, 0x1000000d, 0x832021, 0x51040, 0x822821,
-0x85102b, 0x10400007, 0x1821, 0x94820000, 0x24840002, 0x621821,
-0x85102b, 0x1440fffb, 0x0, 0x602021, 0x41c02, 0x3082ffff,
-0x622021, 0x41c02, 0x3082ffff, 0x622021, 0x3e00008, 0x3082ffff,
-0x3e00008, 0x0, 0x8f820220, 0x34420002, 0xaf820220, 0x3c020001,
-0x8c425618, 0x30424000, 0x10400054, 0x24040001, 0x8f820200, 0x24067fff,
-0x8f830200, 0x30450002, 0x2402fffd, 0x621824, 0xaf830200, 0xaf840204,
-0x8f830054, 0x8f820054, 0x10000002, 0x24630001, 0x8f820054, 0x621023,
-0x2c420002, 0x1440fffc, 0x0, 0x8f820224, 0x1444004d, 0x42040,
-0xc4102b, 0x1040fff1, 0x0, 0x8f820200, 0x451025, 0xaf820200,
-0x8f820220, 0x34428000, 0xaf820220, 0x8f830054, 0x8f820054, 0x10000002,
-0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0,
-0x8f820220, 0x3c030004, 0x431024, 0x1440000f, 0x0, 0x8f820220,
-0x3c03ffff, 0x34637fff, 0x431024, 0xaf820220, 0x8f830054, 0x8f820054,
-0x10000002, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc,
-0x0, 0x8f820220, 0x3c030004, 0x431024, 0x1440000d, 0x0,
-0x8f820220, 0x34428000, 0xaf820220, 0x8f830054, 0x8f820054, 0x10000002,
-0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0,
-0x8f820220, 0x3c030004, 0x431024, 0x1040001b, 0x1021, 0x8f830220,
-0x24020001, 0x10000015, 0x3c04f700, 0x8f820220, 0x3c04f700, 0x441025,
-0xaf820220, 0x8f820220, 0x2403fffd, 0x431024, 0xaf820220, 0x8f820220,
-0x3c030300, 0x431024, 0x14400003, 0x0, 0x10000008, 0x1021,
-0x8f820220, 0x34420002, 0xaf820220, 0x8f830220, 0x24020001, 0x641825,
-0xaf830220, 0x3e00008, 0x0, 0x2021, 0x3c050100, 0x24020001,
-0xaf80021c, 0xaf820200, 0xaf820220, 0x27625000, 0xaf8200c0, 0x27625000,
-0xaf8200c4, 0x27625000, 0xaf8200c8, 0x27625000, 0xaf8200d0, 0x27625000,
-0xaf8200d4, 0x27625000, 0xaf8200d8, 0x27623000, 0xaf8200e0, 0x27623000,
-0xaf8200e4, 0x27623000, 0xaf8200e8, 0x27622800, 0xaf8200f0, 0x27622800,
-0xaf8200f4, 0x27622800, 0xaf8200f8, 0x418c0, 0x24840001, 0x3631021,
-0xac453004, 0x3631021, 0xac403000, 0x28820200, 0x1440fff9, 0x418c0,
-0x2021, 0x418c0, 0x24840001, 0x3631021, 0xac402804, 0x3631021,
-0xac402800, 0x28820100, 0x1440fff9, 0x418c0, 0xaf80023c, 0x24030080,
-0x24040100, 0xac600000, 0x24630004, 0x64102b, 0x5440fffd, 0xac600000,
-0x8f830040, 0x3c02f000, 0x621824, 0x3c025000, 0x1062000c, 0x43102b,
-0x14400006, 0x3c026000, 0x3c024000, 0x10620008, 0x24020800, 0x10000008,
-0x0, 0x10620004, 0x24020800, 0x10000004, 0x0, 0x24020700,
-0x3c010001, 0xac223420, 0x3e00008, 0x0, 0x27bdffc8, 0xafbf0034,
-0xafb50030, 0xafb3002c, 0xafb10028, 0x3c010001, 0xc004459, 0xac203408,
-0x24040001, 0x2821, 0x27a60020, 0x34028000, 0xc004076, 0xa7a20020,
-0x8f830054, 0x8f820054, 0x10000002, 0x24630064, 0x8f820054, 0x621023,
-0x2c420065, 0x1440fffc, 0x24040001, 0x24050001, 0xc004034, 0x27a60020,
-0x8f830054, 0x8f820054, 0x10000002, 0x24630064, 0x8f820054, 0x621023,
-0x2c420065, 0x1440fffc, 0x24040001, 0x24050001, 0xc004034, 0x27a60020,
-0x8f830054, 0x8f820054, 0x10000002, 0x24630064, 0x8f820054, 0x621023,
-0x2c420065, 0x1440fffc, 0x24040001, 0x24050002, 0xc004034, 0x27a60018,
-0x8f830054, 0x8f820054, 0x10000002, 0x24630064, 0x8f820054, 0x621023,
-0x2c420065, 0x1440fffc, 0x24040001, 0x24050003, 0xc004034, 0x27a6001a,
-0x97a20020, 0x10400024, 0x24020001, 0x3c020001, 0x8c423408, 0x97a30018,
-0x34420001, 0x3c010001, 0xac223408, 0x24020015, 0x14620004, 0x3402f423,
-0x97a3001a, 0x10620018, 0x24020003, 0x97a30018, 0x24027810, 0x14620014,
-0x24020002, 0x97a3001a, 0x24020001, 0x14620010, 0x24020002, 0x1000000e,
-0x24020004, 0x3c020001, 0x8c423408, 0x34420008, 0x3c010001, 0xac223408,
-0x10000058, 0x24020004, 0x3c020001, 0x8c423408, 0x34420004, 0x3c010001,
-0x100000a8, 0xac223408, 0x3c010001, 0xac22353c, 0x24020e00, 0xaf820238,
-0x8f840054, 0x8f820054, 0x24030008, 0x3c010001, 0xac23340c, 0x10000002,
-0x248401f4, 0x8f820054, 0x821023, 0x2c4201f5, 0x1440fffc, 0x3c0200c8,
-0x344201fb, 0xaf820238, 0x8f830054, 0x8f820054, 0x10000002, 0x246301f4,
-0x8f820054, 0x621023, 0x2c4201f5, 0x1440fffc, 0x8821, 0x3c1300c8,
-0x367301f6, 0x2415fffd, 0xc003f77, 0x0, 0x8f830054, 0x8f820054,
-0x10000002, 0x246301f4, 0x8f820054, 0x621023, 0x2c4201f5, 0x1440fffc,
-0x0, 0xaf930238, 0x8f830054, 0x8f820054, 0x10000002, 0x2463000a,
-0x8f820054, 0x621023, 0x2c42000b, 0x1440fffc, 0x0, 0x8f820220,
-0x34420002, 0xaf820220, 0x8f820200, 0x24040001, 0x24057fff, 0x551024,
-0xaf820200, 0xaf840204, 0x8f830054, 0x8f820054, 0x10000002, 0x24630001,
-0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820224,
-0x14440005, 0x34028000, 0x42040, 0xa4102b, 0x1040fff0, 0x34028000,
-0x1082ffa6, 0x26310001, 0x2e220014, 0x1440ffce, 0x24020004, 0x3c010001,
-0xac22340c, 0x8821, 0x3c13ffff, 0x36733f7f, 0xc003f77, 0x0,
-0x8f830054, 0x8f820054, 0x10000002, 0x24630001, 0x8f820054, 0x621023,
-0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x531024, 0x34425080,
-0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, 0x2463000a, 0x8f820054,
-0x621023, 0x2c42000b, 0x1440fffc, 0x0, 0x8f820044, 0x531024,
-0x3442f080, 0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, 0x2463000a,
-0x8f820054, 0x621023, 0x2c42000b, 0x1440fffc, 0x0, 0x8f820220,
-0x3c03f700, 0x431025, 0xaf820220, 0x8f830054, 0x8f820054, 0x10000002,
-0x24630064, 0x8f820054, 0x621023, 0x2c420065, 0x1440fffc, 0x0,
-0x8f820220, 0x24040001, 0x34420002, 0xaf820220, 0x8f830200, 0x24057fff,
-0x2402fffd, 0x621824, 0xaf830200, 0xaf840204, 0x8f830054, 0x8f820054,
-0x10000002, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc,
-0x0, 0x8f820224, 0x14440005, 0x34028000, 0x42040, 0xa4102b,
-0x1040fff0, 0x34028000, 0x1082ff57, 0x26310001, 0x2e220064, 0x1440ffb0,
-0x0, 0x3c020001, 0x8c423408, 0x30420004, 0x14400007, 0x3c08fff0,
-0x8f820044, 0x3c03ffff, 0x34633f7f, 0x431024, 0xaf820044, 0x3c08fff0,
-0x3508bdc0, 0x8f830054, 0x97a60018, 0x3c070001, 0x8ce7353c, 0x3c040001,
-0x248431e0, 0x24020001, 0x3c010001, 0xac223410, 0xafa60010, 0x3c060001,
-0x8cc63408, 0x97a2001a, 0x3c05000d, 0x34a50100, 0x3c010001, 0xac20340c,
-0x681821, 0x3c010001, 0xac233534, 0xc00290f, 0xafa20014, 0x8fbf0034,
-0x8fb50030, 0x8fb3002c, 0x8fb10028, 0x3e00008, 0x27bd0038, 0x27bdffe8,
-0x24070004, 0x3c040001, 0x8c84340c, 0x3021, 0x24020001, 0x1482000a,
-0xafbf0010, 0x3c020001, 0x8c42561c, 0x3c050004, 0x30428000, 0x1040000c,
-0x34a593e0, 0x3c05000f, 0x10000009, 0x34a54240, 0x3c020001, 0x8c42561c,
-0x3c05000f, 0x30428000, 0x10400003, 0x34a54240, 0x3c05001e, 0x34a58480,
-0x3c020001, 0x8c423534, 0x8f830054, 0x451021, 0x431023, 0x45102b,
-0x1440002e, 0x0, 0x3c020001, 0x8c423414, 0x1440002a, 0x2cc20001,
-0x7182b, 0x431024, 0x1040001d, 0x0, 0x3c090001, 0x8d293408,
-0x240b0001, 0x3c054000, 0x3c080001, 0x2508561c, 0x250afffc, 0x42042,
-0x14800002, 0x24e7ffff, 0x24040008, 0x891024, 0x5040000b, 0x2cc20001,
-0x148b0004, 0x0, 0x8d020000, 0x10000003, 0x451024, 0x8d420000,
-0x451024, 0x54400001, 0x24060001, 0x2cc20001, 0x7182b, 0x431024,
-0x5440ffed, 0x42042, 0x3c010001, 0x10c00020, 0xac24340c, 0x8f830054,
-0x24020001, 0x3c010001, 0xac223410, 0x3c010001, 0xac233534, 0x3c020001,
-0x8c423410, 0x10400004, 0x24020001, 0x3c010001, 0xac203410, 0xaee279c8,
-0x8ee379c8, 0x24020008, 0x10620005, 0x24020001, 0xc003e23, 0x0,
-0x1000000b, 0x0, 0x3c030001, 0x8c63340c, 0x10620007, 0x2402000e,
-0x3c030001, 0x8c635590, 0x10620003, 0x0, 0xc00447c, 0x8f840220,
-0x8fbf0010, 0x3e00008, 0x27bd0018, 0x27bdffe0, 0x3c03fdff, 0x3c040001,
-0x8c84340c, 0x3c020001, 0x8c423424, 0x3463ffff, 0x283a024, 0x14820006,
-0xafbf0018, 0x8ee379c8, 0x3c020001, 0x8c423428, 0x10620006, 0x0,
-0x8ee279c8, 0x3c010001, 0xac243424, 0x3c010001, 0xac223428, 0x3c030001,
-0x8c63340c, 0x24020002, 0x10620139, 0x2c620003, 0x10400005, 0x24020001,
-0x1062000a, 0x0, 0x10000131, 0x0, 0x24020004, 0x10620070,
-0x24020008, 0x106200ac, 0x24020001, 0x1000012a, 0x0, 0x8ee279c8,
-0x2443ffff, 0x2c620008, 0x10400127, 0x31080, 0x3c010001, 0x220821,
-0x8c2231f8, 0x400008, 0x0, 0xc003f77, 0x0, 0x3c020001,
-0x8c423418, 0x3c010001, 0xac2033a0, 0x104000e8, 0x24020002, 0xaee279c8,
-0x3c010001, 0x10000116, 0xac203418, 0xc0040b7, 0x0, 0x3c030001,
-0x8c633430, 0x24020011, 0x1462010f, 0x24020003, 0x100000aa, 0x0,
-0x3c050001, 0x8ca5340c, 0x3c060001, 0x8cc6561c, 0xc0046cc, 0x24040001,
-0x24020005, 0x3c010001, 0xac203418, 0x10000102, 0xaee279c8, 0x3c040001,
-0x248431ec, 0x3c05000f, 0x34a50100, 0x3021, 0x3821, 0xafa00010,
-0xc00290f, 0xafa00014, 0x100000f7, 0x0, 0x8f820220, 0x3c03f700,
-0x431025, 0x100000ae, 0xaf820220, 0x8f820220, 0x3c030004, 0x431024,
-0x144000bc, 0x24020007, 0x8f830054, 0x3c020001, 0x8c423530, 0x2463d8f0,
-0x431023, 0x2c422710, 0x144000e5, 0x24020001, 0x100000e1, 0x0,
-0x3c050001, 0x8ca5340c, 0xc0047d1, 0x24040001, 0xc004899, 0x24040001,
-0x3c030001, 0x8c635614, 0x46100d7, 0x24020001, 0x3c020008, 0x621024,
-0x10400006, 0x0, 0x8f820214, 0x3c03ffff, 0x431024, 0x10000005,
-0x3442251f, 0x8f820214, 0x3c03ffff, 0x431024, 0x3442241f, 0xaf820214,
-0x8f820220, 0x3c030200, 0x283a025, 0x34420002, 0xaf820220, 0x24020008,
-0xc003b6a, 0xaee279c8, 0x100000c1, 0x0, 0x8ee279c8, 0x2443ffff,
-0x2c620008, 0x104000bc, 0x31080, 0x3c010001, 0x220821, 0x8c223218,
-0x400008, 0x0, 0xc003ab1, 0x0, 0x3c010001, 0xac203410,
-0xaf800204, 0x3c010001, 0xc003f77, 0xac2055e0, 0x8f820044, 0x3c03ffff,
-0x34633f7f, 0x431024, 0x34425080, 0xaf820044, 0x8f830054, 0x3c010001,
-0xac2033a0, 0x10000062, 0x24020002, 0x3c020001, 0x8c425618, 0x30424000,
-0x10400004, 0x0, 0x8f820044, 0x10000006, 0x3442f080, 0x8f820044,
-0x3c03ffff, 0x34633f7f, 0x431024, 0x3442a080, 0xaf820044, 0x8f830054,
-0x10000051, 0x24020004, 0xc003bc4, 0x0, 0x1040008d, 0x24020001,
-0x8f820214, 0x3c03ffff, 0x3c040001, 0x8c843528, 0x431024, 0x3442251f,
-0xaf820214, 0x24020008, 0x14800067, 0xaee279c8, 0x1000006c, 0x0,
-0x8ee279c8, 0x2443ffff, 0x2c620007, 0x1040007e, 0x31080, 0x3c010001,
-0x220821, 0x8c223238, 0x400008, 0x0, 0xc003ab1, 0x0,
-0x3c010001, 0xac203410, 0xaf800204, 0x3c010001, 0xc003f77, 0xac2055e0,
-0x8f830054, 0x3c010001, 0xac2033a0, 0x1000002a, 0x24020002, 0x8f830054,
-0x3c020001, 0x8c423530, 0x2463d8f0, 0x431023, 0x2c422710, 0x14400064,
-0x24020003, 0x10000062, 0xaee279c8, 0x3c020001, 0x8c425618, 0x30424000,
-0x10400003, 0x3c0200c8, 0x10000002, 0x344201f6, 0x344201fe, 0xaf820238,
-0x8f830054, 0x10000014, 0x24020004, 0x8f830054, 0x3c020001, 0x8c423530,
-0x2463d8f0, 0x431023, 0x2c422710, 0x1440004e, 0x24020005, 0x1000004c,
-0xaee279c8, 0x8f820220, 0x3c03f700, 0x431025, 0xaf820220, 0xaf800204,
-0x3c010001, 0xac2055e0, 0x8f830054, 0x24020006, 0xaee279c8, 0x3c010001,
-0x1000003f, 0xac233530, 0x3c05fffe, 0x34a57960, 0x3c040001, 0x8f820054,
-0x3c030001, 0x8c633530, 0x3484869f, 0x451021, 0x621823, 0x83202b,
-0x10800033, 0x0, 0x24020007, 0x10000030, 0xaee279c8, 0xc003bc4,
-0x0, 0x1040002a, 0x24020001, 0x8f820214, 0x3c03ffff, 0x3c040001,
-0x8c843528, 0x431024, 0x3442251f, 0xaf820214, 0x24020008, 0x1080000b,
-0xaee279c8, 0x8f820220, 0x34420002, 0xaf820220, 0x24020001, 0x3c010001,
-0xac225590, 0xc00447c, 0x8f840220, 0x10000018, 0x0, 0x8f820220,
-0x3c030008, 0x431024, 0x14400013, 0x3c020200, 0x282a025, 0x2402000e,
-0x3c010001, 0xac225590, 0xc004899, 0x24040001, 0x8f820220, 0x34420002,
-0xc003b6a, 0xaf820220, 0x3c050001, 0x8ca5340c, 0xc0047d1, 0x24040001,
-0x10000003, 0x0, 0x3c010001, 0xac223410, 0x8fbf0018, 0x3e00008,
-0x27bd0020, 0x8f820200, 0x8f820220, 0x8f820220, 0x34420004, 0xaf820220,
-0x8f820200, 0x3c040001, 0x8c84340c, 0x34420004, 0xaf820200, 0x24020002,
-0x1082003a, 0x2c820003, 0x10400005, 0x24020001, 0x1082000a, 0x3c03f0ff,
-0x100000a8, 0x0, 0x24020004, 0x10820055, 0x24020008, 0x10820074,
-0x3c02f0ff, 0x100000a1, 0x0, 0x8f820050, 0x3463ffff, 0x3c05ffff,
-0x34a53f7f, 0x431024, 0x3c030700, 0x431025, 0xaf820050, 0x24020e00,
-0xaf840200, 0xaf840220, 0xaf820238, 0x8f820044, 0x3c030001, 0x8c6333f8,
-0x3c040001, 0x8c84353c, 0x451024, 0x34630022, 0xaf820044, 0x24020004,
-0x1082000c, 0xaf830200, 0x3c020001, 0x8c423420, 0x3c030001, 0x8c633404,
-0x3c040001, 0x8c8433fc, 0x34428000, 0x621825, 0x641825, 0x1000007e,
-0x34620002, 0x3c020001, 0x8c423404, 0x3c030001, 0x8c633420, 0x3c040001,
-0x8c8433fc, 0x431025, 0x441025, 0x10000074, 0x34420002, 0x8f830050,
-0x3c02f0ff, 0x3442ffff, 0x3c040001, 0x8c843528, 0x621824, 0x3c020d00,
-0x621825, 0x24020001, 0xaf830050, 0xaf820200, 0xaf820220, 0x24020e00,
-0xaf820238, 0x10800005, 0x3c033f00, 0x3c020001, 0x8c4233f0, 0x10000004,
-0x34630070, 0x3c020001, 0x8c4233f0, 0x34630072, 0x431025, 0xaf820200,
-0x3c030001, 0x8c6333f4, 0x3c04f700, 0x3c020001, 0x8c423404, 0x3c050001,
-0x8ca53420, 0x641825, 0x431025, 0x10000050, 0x451025, 0x3c03f0ff,
-0x8f820050, 0x3463ffff, 0x3c04ffff, 0x431024, 0x3c030a00, 0x431025,
-0xaf820050, 0x24020001, 0xaf820200, 0xaf820220, 0x24020e01, 0xaf820238,
-0x8f820044, 0x34843f7f, 0x3c030001, 0x8c633528, 0x441024, 0x34420080,
-0xaf820044, 0x10600005, 0x3c033f00, 0x3c020001, 0x8c4233f0, 0x10000004,
-0x346300e0, 0x3c020001, 0x8c4233f0, 0x346300e2, 0x431025, 0xaf820200,
-0x10000025, 0x3c05f700, 0x8f830050, 0x3c040001, 0x8c843528, 0x3442ffff,
-0x621824, 0xaf830050, 0x10800013, 0x3c0500c8, 0x34a501fb, 0x3c063f00,
-0x3c030001, 0x8c633400, 0x3c040001, 0x8c8433f0, 0x34c600e0, 0x24020001,
-0xaf820200, 0xaf820220, 0xaf850238, 0x24630001, 0x862025, 0x3c010001,
-0xac233400, 0xaf840200, 0x1000000b, 0x3c05f700, 0x3c0200c8, 0x344201fb,
-0x3c030001, 0x8c6333f0, 0x3c043f00, 0x348400e2, 0xaf820238, 0x641825,
-0xaf830200, 0x3c05f700, 0x34a58000, 0x3c030001, 0x8c6333f4, 0x3c020001,
-0x8c423404, 0x3c040001, 0x8c843420, 0x651825, 0x431025, 0x441025,
-0xaf820220, 0x3e00008, 0x0, 0x0, 0x27bdffd8, 0xafb50018,
-0x80a821, 0xafbe001c, 0xa0f021, 0xafb30014, 0xc09821, 0xafb10010,
-0x8821, 0xafbf0020, 0xa6600000, 0xc004433, 0x24040001, 0x26310001,
-0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021, 0xc004433,
-0x24040001, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0x24110010,
-0x2b11024, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842,
-0x1620fffa, 0x2b11024, 0x24110010, 0x3d11024, 0x10400002, 0x2021,
-0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x3d11024, 0xc004459,
-0x34118000, 0xc004459, 0x0, 0xc004413, 0x0, 0x50400005,
-0x118842, 0x96620000, 0x511025, 0xa6620000, 0x118842, 0x1620fff7,
-0x0, 0xc004459, 0x0, 0x8fbf0020, 0x8fbe001c, 0x8fb50018,
-0x8fb30014, 0x8fb10010, 0x3e00008, 0x27bd0028, 0x27bdffd8, 0xafb30014,
-0x809821, 0xafb50018, 0xa0a821, 0xafbe001c, 0xc0f021, 0xafb10010,
-0x8821, 0xafbf0020, 0xc004433, 0x24040001, 0x26310001, 0x2e220020,
-0x1440fffb, 0x0, 0xc004433, 0x2021, 0xc004433, 0x24040001,
-0xc004433, 0x2021, 0xc004433, 0x24040001, 0x24110010, 0x2711024,
-0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa,
-0x2711024, 0x24110010, 0x2b11024, 0x10400002, 0x2021, 0x24040001,
-0xc004433, 0x118842, 0x1620fffa, 0x2b11024, 0xc004433, 0x24040001,
-0xc004433, 0x2021, 0x34118000, 0x97c20000, 0x511024, 0x10400002,
-0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fff8, 0x0,
-0xc004459, 0x0, 0x8fbf0020, 0x8fbe001c, 0x8fb50018, 0x8fb30014,
-0x8fb10010, 0x3e00008, 0x27bd0028, 0x3c030001, 0x8c633430, 0x3c020001,
-0x8c423474, 0x27bdffd8, 0xafbf0020, 0xafb3001c, 0x10620003, 0xafb10018,
-0x3c010001, 0xac233474, 0x2463ffff, 0x2c620013, 0x10400349, 0x31080,
-0x3c010001, 0x220821, 0x8c223260, 0x400008, 0x0, 0xc004459,
-0x8821, 0x34028000, 0xa7a20010, 0x27b30010, 0xc004433, 0x24040001,
-0x26310001, 0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021,
-0xc004433, 0x24040001, 0xc004433, 0x2021, 0xc004433, 0x24040001,
-0x24110010, 0x32220001, 0x10400002, 0x2021, 0x24040001, 0xc004433,
-0x118842, 0x1620fffa, 0x32220001, 0x24110010, 0xc004433, 0x2021,
-0x118842, 0x1620fffc, 0x0, 0xc004433, 0x24040001, 0xc004433,
-0x2021, 0x34118000, 0x96620000, 0x511024, 0x10400002, 0x2021,
-0x24040001, 0xc004433, 0x118842, 0x1620fff8, 0x0, 0xc004459,
-0x0, 0x1000030e, 0x24020002, 0x27b30010, 0xa7a00010, 0x8821,
-0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, 0x0,
-0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433, 0x24040001,
-0xc004433, 0x2021, 0x24110010, 0x32220001, 0x10400002, 0x2021,
-0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001, 0x24110010,
-0xc004433, 0x2021, 0x118842, 0x1620fffc, 0x0, 0xc004459,
-0x34118000, 0xc004459, 0x0, 0xc004413, 0x0, 0x50400005,
-0x118842, 0x96620000, 0x511025, 0xa6620000, 0x118842, 0x1620fff7,
-0x0, 0xc004459, 0x0, 0x97a20010, 0x30428000, 0x144002dc,
-0x24020003, 0x100002d8, 0x0, 0x24021200, 0xa7a20010, 0x27b30010,
-0x8821, 0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb,
-0x0, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433,
-0x2021, 0xc004433, 0x24040001, 0x24110010, 0x32220001, 0x10400002,
-0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001,
-0x24110010, 0xc004433, 0x2021, 0x118842, 0x1620fffc, 0x0,
-0xc004433, 0x24040001, 0xc004433, 0x2021, 0x34118000, 0x96620000,
-0x511024, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842,
-0x1620fff8, 0x0, 0xc004459, 0x0, 0x8f830054, 0x10000296,
-0x24020004, 0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c, 0x431023,
-0x2c420064, 0x1440029e, 0x24020002, 0x3c030001, 0x8c63353c, 0x10620297,
-0x2c620003, 0x14400296, 0x24020011, 0x24020003, 0x10620005, 0x24020004,
-0x10620291, 0x2402000f, 0x1000028f, 0x24020011, 0x1000028d, 0x24020005,
-0x24020014, 0xa7a20010, 0x27b30010, 0x8821, 0xc004433, 0x24040001,
-0x26310001, 0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021,
-0xc004433, 0x24040001, 0xc004433, 0x2021, 0xc004433, 0x24040001,
-0x24110010, 0x32220001, 0x10400002, 0x2021, 0x24040001, 0xc004433,
-0x118842, 0x1620fffa, 0x32220001, 0x24110010, 0x32220012, 0x10400002,
-0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220012,
-0xc004433, 0x24040001, 0xc004433, 0x2021, 0x34118000, 0x96620000,
-0x511024, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842,
-0x1620fff8, 0x0, 0xc004459, 0x0, 0x8f830054, 0x10000248,
-0x24020006, 0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c, 0x431023,
-0x2c420064, 0x14400250, 0x24020007, 0x1000024c, 0x0, 0x24020006,
-0xa7a20010, 0x27b30010, 0x8821, 0xc004433, 0x24040001, 0x26310001,
-0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021, 0xc004433,
-0x24040001, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0x24110010,
-0x32220001, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842,
-0x1620fffa, 0x32220001, 0x24110010, 0x32220013, 0x10400002, 0x2021,
-0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220013, 0xc004433,
-0x24040001, 0xc004433, 0x2021, 0x34118000, 0x96620000, 0x511024,
-0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fff8,
-0x0, 0xc004459, 0x0, 0x8f830054, 0x10000207, 0x24020008,
-0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c, 0x431023, 0x2c420064,
-0x1440020f, 0x24020009, 0x1000020b, 0x0, 0x27b30010, 0xa7a00010,
-0x8821, 0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 25'
echo 'File patch-2.2.4 is continued in part 26'
echo 26 > _shar_seq_.tmp
#!/bin/sh
# this is part 26 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 26; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
-0x0, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433,
-0x24040001, 0xc004433, 0x2021, 0x24110010, 0x32220001, 0x10400002,
-0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001,
-0x24110010, 0x32220018, 0x10400002, 0x2021, 0x24040001, 0xc004433,
-0x118842, 0x1620fffa, 0x32220018, 0xc004459, 0x34118000, 0xc004459,
-0x0, 0xc004413, 0x0, 0x50400005, 0x118842, 0x96620000,
-0x511025, 0xa6620000, 0x118842, 0x1620fff7, 0x0, 0xc004459,
-0x8821, 0x97a20010, 0x27b30010, 0x34420001, 0xa7a20010, 0xc004433,
-0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, 0x0, 0xc004433,
-0x2021, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0xc004433,
-0x24040001, 0x24110010, 0x32220001, 0x10400002, 0x2021, 0x24040001,
-0xc004433, 0x118842, 0x1620fffa, 0x32220001, 0x24110010, 0x32220018,
-0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa,
-0x32220018, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0x34118000,
-0x96620000, 0x511024, 0x10400002, 0x2021, 0x24040001, 0xc004433,
-0x118842, 0x1620fff8, 0x0, 0xc004459, 0x0, 0x8f830054,
-0x10000193, 0x2402000a, 0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c,
-0x431023, 0x2c420064, 0x1440019b, 0x2402000b, 0x10000197, 0x0,
-0x27b30010, 0xa7a00010, 0x8821, 0xc004433, 0x24040001, 0x26310001,
-0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021, 0xc004433,
-0x24040001, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0x24110010,
-0x32220001, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842,
-0x1620fffa, 0x32220001, 0x24110010, 0x32220017, 0x10400002, 0x2021,
-0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220017, 0xc004459,
-0x34118000, 0xc004459, 0x0, 0xc004413, 0x0, 0x50400005,
-0x118842, 0x96620000, 0x511025, 0xa6620000, 0x118842, 0x1620fff7,
-0x0, 0xc004459, 0x8821, 0x97a20010, 0x27b30010, 0x34420700,
-0xa7a20010, 0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb,
-0x0, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433,
-0x2021, 0xc004433, 0x24040001, 0x24110010, 0x32220001, 0x10400002,
-0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001,
-0x24110010, 0x32220017, 0x10400002, 0x2021, 0x24040001, 0xc004433,
-0x118842, 0x1620fffa, 0x32220017, 0xc004433, 0x24040001, 0xc004433,
-0x2021, 0x34118000, 0x96620000, 0x511024, 0x10400002, 0x2021,
-0x24040001, 0xc004433, 0x118842, 0x1620fff8, 0x0, 0xc004459,
-0x0, 0x8f830054, 0x1000011f, 0x2402000c, 0x8f830054, 0x3c020001,
-0x8c423538, 0x2463ff9c, 0x431023, 0x2c420064, 0x14400127, 0x24020012,
-0x10000123, 0x0, 0x27b30010, 0xa7a00010, 0x8821, 0xc004433,
-0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, 0x0, 0xc004433,
-0x2021, 0xc004433, 0x24040001, 0xc004433, 0x24040001, 0xc004433,
-0x2021, 0x24110010, 0x32220001, 0x10400002, 0x2021, 0x24040001,
-0xc004433, 0x118842, 0x1620fffa, 0x32220001, 0x24110010, 0x32220014,
-0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa,
-0x32220014, 0xc004459, 0x34118000, 0xc004459, 0x0, 0xc004413,
-0x0, 0x50400005, 0x118842, 0x96620000, 0x511025, 0xa6620000,
-0x118842, 0x1620fff7, 0x0, 0xc004459, 0x8821, 0x97a20010,
-0x27b30010, 0x34420010, 0xa7a20010, 0xc004433, 0x24040001, 0x26310001,
-0x2e220020, 0x1440fffb, 0x0, 0xc004433, 0x2021, 0xc004433,
-0x24040001, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0x24110010,
-0x32220001, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842,
-0x1620fffa, 0x32220001, 0x24110010, 0x32220014, 0x10400002, 0x2021,
-0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220014, 0xc004433,
-0x24040001, 0xc004433, 0x2021, 0x34118000, 0x96620000, 0x511024,
-0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fff8,
-0x0, 0xc004459, 0x0, 0x8f830054, 0x100000ab, 0x24020013,
-0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c, 0x431023, 0x2c420064,
-0x144000b3, 0x2402000d, 0x100000af, 0x0, 0x27b30010, 0xa7a00010,
-0x8821, 0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb,
-0x0, 0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433,
-0x24040001, 0xc004433, 0x2021, 0x24110010, 0x32220001, 0x10400002,
-0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001,
-0x24110010, 0x32220018, 0x10400002, 0x2021, 0x24040001, 0xc004433,
-0x118842, 0x1620fffa, 0x32220018, 0xc004459, 0x34118000, 0xc004459,
-0x0, 0xc004413, 0x0, 0x50400005, 0x118842, 0x96620000,
-0x511025, 0xa6620000, 0x118842, 0x1620fff7, 0x0, 0xc004459,
-0x8821, 0x97a20010, 0x27b30010, 0x3042fffe, 0xa7a20010, 0xc004433,
-0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, 0x0, 0xc004433,
-0x2021, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0xc004433,
-0x24040001, 0x24110010, 0x32220001, 0x10400002, 0x2021, 0x24040001,
-0xc004433, 0x118842, 0x1620fffa, 0x32220001, 0x24110010, 0x32220018,
-0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842, 0x1620fffa,
-0x32220018, 0xc004433, 0x24040001, 0xc004433, 0x2021, 0x34118000,
-0x96620000, 0x511024, 0x10400002, 0x2021, 0x24040001, 0xc004433,
-0x118842, 0x1620fff8, 0x0, 0xc004459, 0x0, 0x8f830054,
-0x10000037, 0x2402000e, 0x24020840, 0xa7a20010, 0x27b30010, 0x8821,
-0xc004433, 0x24040001, 0x26310001, 0x2e220020, 0x1440fffb, 0x0,
-0xc004433, 0x2021, 0xc004433, 0x24040001, 0xc004433, 0x2021,
-0xc004433, 0x24040001, 0x24110010, 0x32220001, 0x10400002, 0x2021,
-0x24040001, 0xc004433, 0x118842, 0x1620fffa, 0x32220001, 0x24110010,
-0x32220013, 0x10400002, 0x2021, 0x24040001, 0xc004433, 0x118842,
-0x1620fffa, 0x32220013, 0xc004433, 0x24040001, 0xc004433, 0x2021,
-0x34118000, 0x96620000, 0x511024, 0x10400002, 0x2021, 0x24040001,
-0xc004433, 0x118842, 0x1620fff8, 0x0, 0xc004459, 0x0,
-0x8f830054, 0x24020010, 0x3c010001, 0xac223430, 0x3c010001, 0x1000000c,
-0xac233538, 0x8f830054, 0x3c020001, 0x8c423538, 0x2463ff9c, 0x431023,
-0x2c420064, 0x14400004, 0x0, 0x24020011, 0x3c010001, 0xac223430,
-0x8fbf0020, 0x8fb3001c, 0x8fb10018, 0x3e00008, 0x27bd0028, 0x8f850044,
-0x8f820044, 0x3c030001, 0x431025, 0x3c030008, 0xaf820044, 0x8f840054,
-0x8f820054, 0xa32824, 0x10000002, 0x24840001, 0x8f820054, 0x821023,
-0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, 0x3463ffff,
-0x431024, 0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, 0x24630001,
-0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x3e00008,
-0xa01021, 0x8f830044, 0x3c02fff0, 0x3442ffff, 0x42480, 0x621824,
-0x3c020002, 0x822025, 0x641825, 0xaf830044, 0x8f820044, 0x3c030001,
-0x431025, 0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, 0x24630001,
-0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x8f820044,
-0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820044, 0x8f830054, 0x8f820054,
-0x10000002, 0x24630001, 0x8f820054, 0x621023, 0x2c420002, 0x1440fffc,
-0x0, 0x3e00008, 0x0, 0x8f820044, 0x3c03fff0, 0x3463ffff,
-0x431024, 0xaf820044, 0x8f820044, 0x3c030001, 0x431025, 0xaf820044,
-0x8f830054, 0x8f820054, 0x10000002, 0x24630001, 0x8f820054, 0x621023,
-0x2c420002, 0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe, 0x3463ffff,
-0x431024, 0xaf820044, 0x8f830054, 0x8f820054, 0x10000002, 0x24630001,
-0x8f820054, 0x621023, 0x2c420002, 0x1440fffc, 0x0, 0x3e00008,
-0x0, 0x0, 0x27bdffe8, 0xafbf0010, 0x8ee379c8, 0x24020008,
-0x146201ca, 0x0, 0x3c020001, 0x8c423528, 0x14400005, 0x0,
-0xc003ab1, 0x8f840224, 0x100001c2, 0x0, 0x8f820220, 0x3c030008,
-0x431024, 0x10400026, 0x24020001, 0x8f840224, 0x8f820220, 0x3c030400,
-0x431024, 0x10400006, 0x0, 0x3c010001, 0xac2055a0, 0x3c010001,
-0x1000000b, 0xac2055c0, 0x3c030001, 0x246355a0, 0x8c620000, 0x24420001,
-0xac620000, 0x2c420002, 0x14400003, 0x24020001, 0x3c010001, 0xac2255c0,
-0x3c020001, 0x8c4255c0, 0x10400006, 0x30820040, 0x10400004, 0x24020001,
-0x3c010001, 0x10000003, 0xac2255c4, 0x3c010001, 0xac2055c4, 0x3c010001,
-0xac24559c, 0x3c010001, 0x1000000b, 0xac2055d0, 0x3c010001, 0xac2255d0,
-0x3c010001, 0xac2055c0, 0x3c010001, 0xac2055a0, 0x3c010001, 0xac2055c4,
-0x3c010001, 0xac20559c, 0x3c030001, 0x8c635590, 0x3c020001, 0x8c425594,
-0x50620004, 0x2463ffff, 0x3c010001, 0xac235594, 0x2463ffff, 0x2c62000e,
-0x1040017e, 0x31080, 0x3c010001, 0x220821, 0x8c2232b0, 0x400008,
-0x0, 0x3c02fdff, 0x3442ffff, 0x282a024, 0x24020002, 0x3c010001,
-0xac2055c0, 0x3c010001, 0xac2055a0, 0x3c010001, 0xac2055d0, 0x3c010001,
-0xac20559c, 0x3c010001, 0xac2055c4, 0x3c010001, 0xac2055b8, 0x3c010001,
-0xac2055b0, 0xaf800224, 0x3c010001, 0xac225590, 0xc003ab1, 0x0,
-0xaf800204, 0x8f820200, 0x2403fffd, 0x431024, 0xaf820200, 0x3c010001,
-0xac2055e0, 0x8f830054, 0x3c020001, 0x8c4255b8, 0x24040001, 0x3c010001,
-0xac2455cc, 0x24420001, 0x3c010001, 0xac2255b8, 0x2c420004, 0x3c010001,
-0xac2355b4, 0x14400006, 0x24020003, 0x3c010001, 0xac243410, 0x3c010001,
-0x10000148, 0xac2055b8, 0x3c010001, 0x10000145, 0xac225590, 0x8f830054,
-0x3c020001, 0x8c4255b4, 0x2463d8f0, 0x431023, 0x2c422710, 0x1440013d,
-0x24020004, 0x3c010001, 0x1000013a, 0xac225590, 0x3c040001, 0x8c84352c,
-0x3c010001, 0xc00464e, 0xac2055a8, 0x3c020001, 0x8c4255dc, 0xaf820204,
-0x8f820204, 0x30420030, 0x14400125, 0x24020002, 0x3c030001, 0x8c6355dc,
-0x24020005, 0x3c010001, 0xac225590, 0x3c010001, 0x10000126, 0xac2355e0,
-0x3c020001, 0x8c4255c0, 0x10400122, 0x0, 0x3c020001, 0x8c42559c,
-0x1040011e, 0x0, 0x3c010001, 0xac2255c8, 0x24020003, 0x3c010001,
-0xac2255a0, 0x100000c1, 0x24020006, 0x3c010001, 0xac2055a8, 0x8f820204,
-0x34420040, 0xaf820204, 0x3c020001, 0x8c4255e0, 0x24030007, 0x3c010001,
-0xac235590, 0x34420040, 0x3c010001, 0xac2255e0, 0x3c020001, 0x8c4255c0,
-0x10400005, 0x0, 0x3c020001, 0x8c42559c, 0x104000f9, 0x24020002,
-0x3c050001, 0x24a555a0, 0x8ca20000, 0x2c424e21, 0x104000f3, 0x24020002,
-0x3c020001, 0x8c4255c4, 0x104000f8, 0x2404ffbf, 0x3c020001, 0x8c42559c,
-0x3c030001, 0x8c6355c8, 0x441024, 0x641824, 0x14430007, 0x24020001,
-0x24020003, 0xaca20000, 0x24020008, 0x3c010001, 0x100000ea, 0xac225590,
-0x3c010001, 0x100000e7, 0xac225590, 0x3c020001, 0x8c4255cc, 0x1040000c,
-0x24020001, 0x3c040001, 0xc00465b, 0x8c84559c, 0x3c020001, 0x8c4255e8,
-0x14400005, 0x24020001, 0x3c020001, 0x8c4255e4, 0x10400006, 0x24020001,
-0x3c010001, 0xac223410, 0x3c010001, 0x100000d3, 0xac2055b8, 0x8f820204,
-0x34420040, 0xaf820204, 0x3c020001, 0x8c4255e0, 0x3c030001, 0x8c6355b0,
-0x34420040, 0x3c010001, 0xac2255e0, 0x3c020001, 0x8c42559c, 0x2c630001,
-0x318c0, 0x3c010001, 0xac2355b0, 0x30420008, 0x3c010001, 0xac2255ac,
-0x8f830054, 0x24020009, 0x3c010001, 0xac225590, 0x3c010001, 0x100000b9,
-0xac2355b4, 0x8f830054, 0x3c020001, 0x8c4255b4, 0x2463d8f0, 0x431023,
-0x2c422710, 0x1440009f, 0x0, 0x3c020001, 0x8c4255c0, 0x10400005,
-0x0, 0x3c020001, 0x8c42559c, 0x104000a0, 0x24020002, 0x3c030001,
-0x246355a0, 0x8c620000, 0x2c424e21, 0x1040009a, 0x24020002, 0x3c020001,
-0x8c4255cc, 0x1040000e, 0x0, 0x3c020001, 0x8c42559c, 0x3c010001,
-0xac2055cc, 0x30420080, 0x1040002f, 0x2402000c, 0x8f820204, 0x30420080,
-0x1440000c, 0x24020003, 0x10000029, 0x2402000c, 0x3c020001, 0x8c42559c,
-0x30420080, 0x14400005, 0x24020003, 0x8f820204, 0x30420080, 0x1040001f,
-0x24020003, 0xac620000, 0x2402000a, 0x3c010001, 0xac225590, 0x3c040001,
-0x248455d8, 0x8c820000, 0x3c030001, 0x8c6355b0, 0x431025, 0xaf820204,
-0x8c830000, 0x3c040001, 0x8c8455b0, 0x2402000b, 0x3c010001, 0xac225590,
-0x641825, 0x3c010001, 0xac2355e0, 0x3c050001, 0x24a555a0, 0x8ca20000,
-0x2c424e21, 0x10400066, 0x24020002, 0x3c020001, 0x8c4255d0, 0x10400005,
-0x0, 0x2402000c, 0x3c010001, 0x10000067, 0xac225590, 0x3c020001,
-0x8c4255c0, 0x10400063, 0x0, 0x3c040001, 0x8c84559c, 0x10800055,
-0x30820008, 0x3c030001, 0x8c6355ac, 0x1062005b, 0x24020003, 0x3c010001,
-0xac2455c8, 0xaca20000, 0x24020006, 0x3c010001, 0x10000054, 0xac225590,
-0x8f820200, 0x34420002, 0xaf820200, 0x8f830054, 0x2402000d, 0x3c010001,
-0xac225590, 0x3c010001, 0xac2355b4, 0x8f830054, 0x3c020001, 0x8c4255b4,
-0x2463d8f0, 0x431023, 0x2c422710, 0x14400031, 0x0, 0x3c020001,
-0x8c4255d0, 0x10400020, 0x2402000e, 0x3c030001, 0x8c6355e4, 0x3c010001,
-0x14600015, 0xac225590, 0xc003b6a, 0x0, 0x3c050001, 0x8ca5340c,
-0xc0047d1, 0x24040001, 0x3c030001, 0x8c63340c, 0x24020004, 0x14620005,
-0x2403fffb, 0x3c020001, 0x8c423408, 0x10000003, 0x2403fff7, 0x3c020001,
-0x8c423408, 0x431024, 0x3c010001, 0xac223408, 0x8f830224, 0x3c020200,
-0x3c010001, 0xac2355ec, 0x10000020, 0x282a025, 0x3c020001, 0x8c4255c0,
-0x10400005, 0x0, 0x3c020001, 0x8c42559c, 0x1040000f, 0x24020002,
-0x3c020001, 0x8c4255a0, 0x2c424e21, 0x1040000a, 0x24020002, 0x3c020001,
-0x8c4255c0, 0x1040000f, 0x0, 0x3c020001, 0x8c42559c, 0x1440000b,
-0x0, 0x24020002, 0x3c010001, 0x10000007, 0xac225590, 0x3c020001,
-0x8c4255c0, 0x10400003, 0x0, 0xc003ab1, 0x0, 0x8f820220,
-0x3c03f700, 0x431025, 0xaf820220, 0x8fbf0010, 0x3e00008, 0x27bd0018,
-0x3c030001, 0x246355e8, 0x8c620000, 0x10400005, 0x34422000, 0x3c010001,
-0xac2255dc, 0x10000003, 0xac600000, 0x3c010001, 0xac2455dc, 0x3e00008,
-0x0, 0x27bdffe0, 0x30820030, 0xafbf0018, 0x3c010001, 0xac2255e4,
-0x14400067, 0x3c02ffff, 0x34421f0e, 0x821024, 0x14400061, 0x24020030,
-0x30822000, 0x1040005d, 0x30838000, 0x31a02, 0x30820001, 0x21200,
-0x3c040001, 0x8c84352c, 0x621825, 0x331c2, 0x3c030001, 0x2463348c,
-0x30828000, 0x21202, 0x30840001, 0x42200, 0x441025, 0x239c2,
-0x61080, 0x431021, 0x471021, 0x90430000, 0x24020001, 0x10620025,
-0x0, 0x10600007, 0x24020002, 0x10620013, 0x24020003, 0x1062002c,
-0x3c05000f, 0x10000037, 0x0, 0x8f820200, 0x2403feff, 0x431024,
-0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024, 0xaf820220,
-0x3c010001, 0xac205624, 0x3c010001, 0x10000034, 0xac20562c, 0x8f820200,
-0x34420100, 0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024,
-0xaf820220, 0x24020100, 0x3c010001, 0xac225624, 0x3c010001, 0x10000026,
-0xac20562c, 0x8f820200, 0x2403feff, 0x431024, 0xaf820200, 0x8f820220,
-0x3c030001, 0x431025, 0xaf820220, 0x3c010001, 0xac205624, 0x3c010001,
-0x10000019, 0xac23562c, 0x8f820200, 0x34420100, 0xaf820200, 0x8f820220,
-0x3c030001, 0x431025, 0xaf820220, 0x24020100, 0x3c010001, 0xac225624,
-0x3c010001, 0x1000000c, 0xac23562c, 0x34a5ffff, 0x3c040001, 0x248432e8,
-0xafa30010, 0xc00290f, 0xafa00014, 0x10000004, 0x0, 0x24020030,
-0x3c010001, 0xac2255e8, 0x8fbf0018, 0x3e00008, 0x27bd0020, 0x0,
-0x27bdffc8, 0xafb30024, 0x809821, 0xafbe002c, 0xa0f021, 0xafb10020,
-0xc08821, 0x3c040001, 0x24843300, 0x3c050009, 0x3c020001, 0x8c42340c,
-0x34a59001, 0x2603021, 0x3c03821, 0xafbf0030, 0xafb50028, 0xa7a0001a,
-0xafb10014, 0xc00290f, 0xafa20010, 0x24020002, 0x13c200e7, 0x2fc20003,
-0x10400005, 0x24020001, 0x13c2000a, 0x3c02fffb, 0x100000e1, 0x0,
-0x24020004, 0x13c2006d, 0x24020008, 0x13c2006c, 0x3c02ffec, 0x100000da,
-0x0, 0x3442ffff, 0x2228824, 0x13a940, 0x3c010001, 0x350821,
-0xac3155fc, 0x3c024000, 0x2221024, 0x10400046, 0x1123c2, 0x30840030,
-0x111382, 0x3042000c, 0x3c030001, 0x24633434, 0x431021, 0x823821,
-0x3c020020, 0x2221024, 0x10400006, 0x24020100, 0x3c010001, 0x350821,
-0xac225600, 0x10000005, 0x3c020080, 0x3c010001, 0x350821, 0xac205600,
-0x3c020080, 0x2221024, 0x10400006, 0x131940, 0x3c020001, 0x3c010001,
-0x230821, 0x10000005, 0xac225608, 0x131140, 0x3c010001, 0x220821,
-0xac205608, 0x94e30000, 0x32224000, 0x10400003, 0xa7a30018, 0x34624000,
-0xa7a20018, 0x24040001, 0x94e20002, 0x24050004, 0x24e60002, 0x34420001,
-0xc004076, 0xa4e20002, 0x24040001, 0x2821, 0xc004076, 0x27a60018,
-0x3c020001, 0x8c42340c, 0x24130001, 0x3c010001, 0xac333418, 0x145e0004,
-0x32228000, 0xc003ab1, 0x0, 0x32228000, 0x10400093, 0x0,
-0xc003ab1, 0x0, 0x24020002, 0x3c010001, 0xac333410, 0x3c010001,
-0x1000008b, 0xac22340c, 0x24040001, 0x24050004, 0x27b1001a, 0xc004076,
-0x2203021, 0x24040001, 0x2821, 0xc004076, 0x2203021, 0x3c020001,
-0x551021, 0x8c4255f4, 0x3c040001, 0x8c84340c, 0x3c03bfff, 0x3463ffff,
-0x3c010001, 0xac3e3418, 0x431024, 0x3c010001, 0x350821, 0x109e0072,
-0xac2255f4, 0x10000072, 0x0, 0x3c02ffec, 0x3442ffff, 0x2228824,
-0x3c020008, 0x2228825, 0x131140, 0x3c010001, 0x220821, 0xac3155f8,
-0x3c022000, 0x2221024, 0x10400005, 0x24020001, 0x3c010001, 0xac223528,
-0x10000004, 0x3c024000, 0x3c010001, 0xac203528, 0x3c024000, 0x2221024,
-0x1440001a, 0x0, 0x3c020001, 0x8c423528, 0x10400005, 0x24022020,
-0x3c010001, 0xac22352c, 0x24020001, 0xaee279c8, 0x3c04bfff, 0x131940,
-0x3c020001, 0x431021, 0x8c4255f0, 0x3c050001, 0x8ca5340c, 0x3484ffff,
-0x441024, 0x3c010001, 0x230821, 0xac2255f0, 0x24020001, 0x10a20044,
-0x0, 0x10000040, 0x0, 0x3c020001, 0x8c423528, 0x1040001c,
-0x24022000, 0x3c010001, 0xac22352c, 0x3c0300a0, 0x2231024, 0x14430005,
-0x131140, 0x3402a000, 0x3c010001, 0x1000002d, 0xac22352c, 0x3c030001,
-0x621821, 0x8c6355f8, 0x3c020020, 0x621024, 0x10400004, 0x24022001,
-0x3c010001, 0x10000023, 0xac22352c, 0x3c020080, 0x621024, 0x1040001f,
-0x3402a001, 0x3c010001, 0x1000001c, 0xac22352c, 0x3c020020, 0x2221024,
-0x10400007, 0x131940, 0x24020100, 0x3c010001, 0x230821, 0xac225604,
-0x10000006, 0x3c020080, 0x131140, 0x3c010001, 0x220821, 0xac205604,
-0x3c020080, 0x2221024, 0x10400006, 0x131940, 0x3c020001, 0x3c010001,
-0x230821, 0x10000005, 0xac22560c, 0x131140, 0x3c010001, 0x220821,
-0xac20560c, 0x3c030001, 0x8c63340c, 0x24020001, 0x10620003, 0x0,
-0xc003ab1, 0x0, 0x8fbf0030, 0x8fbe002c, 0x8fb50028, 0x8fb30024,
-0x8fb10020, 0x3e00008, 0x27bd0038, 0x27bdffc8, 0xafb50028, 0xa821,
-0xafbe002c, 0xf021, 0xafb30024, 0x9821, 0x24020002, 0xafbf0030,
-0xafb10020, 0xafa4001c, 0xa7a00012, 0x10a2006a, 0xa7a00010, 0x2ca20003,
-0x10400005, 0x24020001, 0x10a2000a, 0x3c024000, 0x100000ad, 0x2601021,
-0x24020004, 0x10a20060, 0x24020008, 0x10a2005e, 0x2601021, 0x100000a6,
-0x0, 0x8fa7001c, 0x78940, 0x3c030001, 0x711821, 0x8c6355fc,
-0x621024, 0x14400009, 0x24040001, 0x3c027fff, 0x3442ffff, 0x629824,
-0x3c010001, 0x310821, 0xac3355f4, 0x10000096, 0x2601021, 0x24050001,
-0xc004034, 0x27a60010, 0x24040001, 0x24050001, 0xc004034, 0x27a60010,
-0x97a20010, 0x30420004, 0x10400034, 0x3c134000, 0x3c030001, 0x8c63353c,
-0x24020003, 0x10620008, 0x2c620004, 0x14400029, 0x3c028000, 0x24020004,
-0x10620014, 0x24040001, 0x10000024, 0x3c028000, 0x24040001, 0x24050011,
-0x27b10012, 0xc004034, 0x2203021, 0x24040001, 0x24050011, 0xc004034,
-0x2203021, 0x97a30012, 0x30624000, 0x10400002, 0x3c1e0010, 0x3c1e0008,
-0x3c150001, 0x10000010, 0x30628000, 0x24050014, 0x27b10012, 0xc004034,
-0x2203021, 0x24040001, 0x24050014, 0xc004034, 0x2203021, 0x97a30012,
-0x30621000, 0x10400002, 0x3c1e0010, 0x3c1e0008, 0x3c150001, 0x30620800,
-0x54400001, 0x3c150002, 0x3c028000, 0x2621025, 0x2be1825, 0x10000007,
-0x439825, 0x3c130001, 0x2719821, 0x8e7355fc, 0x3c027fff, 0x3442ffff,
-0x2629824, 0x8fa7001c, 0x71140, 0x3c010001, 0x220821, 0xac3355f4,
-0x1000004b, 0x2601021, 0x8fa7001c, 0x72140, 0x3c030001, 0x641821,
-0x8c6355f8, 0x3c024000, 0x621024, 0x14400008, 0x3c027fff, 0x3442ffff,
-0x629824, 0x3c010001, 0x240821, 0xac3355f0, 0x1000003b, 0x2601021,
-0x3c020001, 0x8c42341c, 0x1040002e, 0x3c13c00c, 0x3c020001, 0x8c423528,
-0x3c03e00c, 0x3c010001, 0x240821, 0x8c245604, 0x2102b, 0x21023,
-0x431024, 0x10800004, 0x539825, 0x3c020020, 0x10000004, 0x2629825,
-0x3c02ffdf, 0x3442ffff, 0x2629824, 0x8fa7001c, 0x71140, 0x3c010001,
-0x220821, 0x8c22560c, 0x10400003, 0x3c020080, 0x10000004, 0x2629825,
-0x3c02ff7f, 0x3442ffff, 0x2629824, 0x3c020001, 0x8c423480, 0x10400002,
-0x3c020800, 0x2629825, 0x3c020001, 0x8c423484, 0x10400002, 0x3c020400,
-0x2629825, 0x3c020001, 0x8c423488, 0x10400006, 0x3c020100, 0x10000004,
-0x2629825, 0x3c027fff, 0x3442ffff, 0x629824, 0x8fa7001c, 0x71140,
-0x3c010001, 0x220821, 0xac3355f0, 0x2601021, 0x8fbf0030, 0x8fbe002c,
-0x8fb50028, 0x8fb30024, 0x8fb10020, 0x3e00008, 0x27bd0038, 0x27bdffe0,
-0xafb50018, 0x80a821, 0xafbf001c, 0xafb30014, 0xafb10010, 0x8f840200,
-0x3c030001, 0x8c63340c, 0x8f860220, 0x24020002, 0x106200a3, 0x2c620003,
-0x10400005, 0x24020001, 0x1062000a, 0x151940, 0x1000009d, 0x0,
-0x24020004, 0x10620053, 0x24020008, 0x10620052, 0x159940, 0x10000096,
-0x0, 0x3c050001, 0xa32821, 0x8ca555fc, 0x3c110001, 0x2238821,
-0x8e3155f4, 0x3c024000, 0xa21024, 0x10400038, 0x3c020008, 0x2221024,
-0x10400020, 0x34840002, 0x3c020001, 0x431021, 0x8c425600, 0x10400005,
-0x34840020, 0x34840100, 0x3c020020, 0x10000006, 0x2228825, 0x2402feff,
-0x822024, 0x3c02ffdf, 0x3442ffff, 0x2228824, 0x151140, 0x3c010001,
-0x220821, 0x8c225608, 0x10400005, 0x3c020001, 0xc23025, 0x3c020080,
-0x10000016, 0x2228825, 0x3c02fffe, 0x3442ffff, 0xc23024, 0x3c02ff7f,
-0x3442ffff, 0x1000000f, 0x2228824, 0x2402fedf, 0x822024, 0x3c02fffe,
-0x3442ffff, 0xc23024, 0x3c02ff5f, 0x3442ffff, 0x2228824, 0x3c010001,
-0x230821, 0xac205600, 0x3c010001, 0x230821, 0xac205608, 0xaf840200,
-0xaf860220, 0x8f820220, 0x34420002, 0xaf820220, 0x1000000a, 0x151140,
-0x3c02bfff, 0x3442ffff, 0x8f830200, 0x2228824, 0x2402fffd, 0x621824,
-0xc003ab1, 0xaf830200, 0x151140, 0x3c010001, 0x220821, 0x10000048,
-0xac3155f4, 0x159940, 0x3c050001, 0xb32821, 0x8ca555f8, 0x3c110001,
-0x2338821, 0x8e3155f0, 0x3c024000, 0xa21024, 0x14400010, 0x0,
-0x3c020001, 0x8c423528, 0x14400005, 0x3c02bfff, 0x8f820200, 0x34420002,
-0xaf820200, 0x3c02bfff, 0x3442ffff, 0xc003ab1, 0x2228824, 0x3c010001,
-0x330821, 0x1000002e, 0xac3155f0, 0x3c020001, 0x8c423528, 0x14400027,
-0x151140, 0x3c020020, 0xa21024, 0x10400007, 0x34840020, 0x24020100,
-0x3c010001, 0x330821, 0xac225604, 0x10000006, 0x34840100, 0x3c010001,
-0x330821, 0xac205604, 0x2402feff, 0x822024, 0x3c020080, 0xa21024,
-0x10400007, 0x151940, 0x3c020001, 0x3c010001, 0x230821, 0xac22560c,
-0x10000008, 0xc23025, 0x151140, 0x3c010001, 0x220821, 0xac20560c,
-0x3c02fffe, 0x3442ffff, 0xc23024, 0xaf840200, 0xaf860220, 0x8f820220,
-0x34420002, 0xaf820220, 0x151140, 0x3c010001, 0x220821, 0xac3155f0,
-0x8fbf001c, 0x8fb50018, 0x8fb30014, 0x8fb10010, 0x3e00008, 0x27bd0020,
-0x0, 0x0, 0x1821, 0x308400ff, 0x2405ffdf, 0x2406ffbf,
-0x641007, 0x30420001, 0x10400004, 0x0, 0x8f820044, 0x10000003,
-0x34420040, 0x8f820044, 0x461024, 0xaf820044, 0x8f820044, 0x34420020,
-0xaf820044, 0x8f820044, 0x451024, 0xaf820044, 0x24630001, 0x28620008,
-0x5440ffee, 0x641007, 0x3e00008, 0x0, 0x0, 0x0,
-0x0 };
-u32 tigon2FwData[(MAX_DATA_LEN/4) + 1] __initdata = {
-0x1, 0x1, 0x1, 0xc001fc, 0x3ffc, 0xc00000,
-0x416c7465, 0x6f6e2041, 0x63654e49, 0x43205600, 0x0, 0x0,
-0x416c7465, 0x6f6e2041, 0x63654e49, 0x43205600, 0x42424242, 0x0,
-0x0, 0x0, 0x1ffffc, 0x1fff7c, 0x0, 0x0,
-0x1, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x60cf00, 0x60, 0xcf000000, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x3, 0x0, 0x1, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x1, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x1000000, 0x21000000,
-0x12000140, 0x0, 0x0, 0x20000000, 0x120000a0, 0x0,
-0x12000060, 0x12000180, 0x120001e0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x30001, 0x1,
-0x30201, 0x0, 0x0 };
+0x0,
+0x10000003, 0x0, 0xd, 0xd,
+0x3c1d0001, 0x8fbd3ca0, 0x3a0f021, 0x3c100000,
+0x26104000, 0xc0010c0, 0x0, 0xd,
+0x3c1d0001, 0x8fbd3ca4, 0x3a0f021, 0x3c100000,
+0x26104000, 0xc00178d, 0x0, 0xd,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x2000008,
+0x0, 0x80016de, 0x3c0a0001, 0x80016de,
+0x3c0a0002, 0x80016de, 0x0, 0x8002acd,
+0x0, 0x8002a70, 0x0, 0x80016de,
+0x3c0a0004, 0x8003095, 0x0, 0x8001a0e,
+0x0, 0x800373f, 0x0, 0x80036e6,
+0x0, 0x80016de, 0x3c0a0006, 0x80037ad,
+0x3c0a0007, 0x80016de, 0x3c0a0008, 0x80016de,
+0x3c0a0009, 0x8003805, 0x0, 0x8002cc0,
+0x0, 0x80016de, 0x3c0a000b, 0x80016de,
+0x3c0a000c, 0x80016de, 0x3c0a000d, 0x80027ac,
+0x0, 0x800275a, 0x0, 0x80016de,
+0x3c0a000e, 0x8001f28, 0x0, 0x8001920,
+0x0, 0x80019c0, 0x0, 0x8003a70,
+0x0, 0x8003a5e, 0x0, 0x80016de,
+0x0, 0x80018c6, 0x0, 0x80016de,
+0x0, 0x80016de, 0x3c0a0013, 0x80016de,
+0x3c0a0014, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x27bdffe0,
+0x3c1cc000, 0xafbf001c, 0xafb00018, 0x8f820140,
+0x24030003, 0xaf8300ec, 0x34420004, 0xc0029b8,
+0xaf820140, 0x3c0100c0, 0xc001712, 0xac203ffc,
+0x403021, 0x3c020008, 0x3c010001, 0xac263dd8,
+0x50c2000d, 0x3c020003, 0x3c100010, 0x10d00009,
+0x24050100, 0x3c040001, 0x24842d34, 0x3821,
+0xafa00010, 0xc0029d3, 0xafa00014, 0x3c010001,
+0xac303dd8, 0x3c020003, 0x34422000, 0x3c010001,
+0xac223de8, 0x24020008, 0x3c010001, 0xac223df0,
+0x2402001f, 0x3c010001, 0xac223e00, 0x24020016,
+0x3c010001, 0xac223dd4, 0x3c05fffe, 0x34a56f08,
+0x3c020001, 0x8c423dd8, 0x3c030001, 0x24635f40,
+0x3c040001, 0x8c843c54, 0x431023, 0x14800002,
+0x458021, 0x2610fa48, 0x2402f000, 0x2028024,
+0xc001734, 0x2002021, 0x2022823, 0x3c040020,
+0x821823, 0x651823, 0x247bb000, 0x3c03fffe,
+0x3463bf08, 0x363b821, 0x3c0600bf, 0x34c6f000,
+0x3c070001, 0x8ce73c50, 0x3c0300bf, 0x3463e000,
+0x852023, 0x3c010001, 0xac243de4, 0x822023,
+0x3c010001, 0xac223dc0, 0x27620ffc, 0x3c010001,
+0xac223ca0, 0x27621ffc, 0xdb3023, 0x7b1823,
+0x3c010001, 0xac253dcc, 0x3c010001, 0xac243dc4,
+0x3c010001, 0xac223ca4, 0xaf860150, 0x10e00011,
+0xaf830250, 0x3c1d0001, 0x8fbd3c5c, 0x3a0f021,
+0xc0016f8, 0x0, 0x3c020001, 0x8c423c60,
+0x3c030001, 0x8c633c64, 0x2442fe00, 0x24630200,
+0x3c010001, 0xac223c60, 0x3c010001, 0x10000004,
+0xac233c64, 0x3c1d0001, 0x8fbd3ca0, 0x3a0f021,
+0x3c020001, 0x8c423c54, 0x1040000d, 0x26fafa48,
+0x3c020001, 0x8c423c60, 0x3c030001, 0x8c633c64,
+0x3c1a0001, 0x8f5a3c64, 0x2442fa48, 0x246305b8,
+0x3c010001, 0xac223c60, 0x3c010001, 0xac233c64,
+0x3c020001, 0x8c423c58, 0x14400003, 0x0,
+0x3c010001, 0xac203c60, 0xc00114d, 0x0,
+0x8fbf001c, 0x8fb00018, 0x3e00008, 0x27bd0020,
+0x3c020001, 0x8c423c60, 0x3c030001, 0x8c633c64,
+0x27bdffa0, 0xafb00040, 0x3c100001, 0x8e1036f4,
+0x3c040001, 0x24842d40, 0xafbf0058, 0xafbe0054,
+0xafb50050, 0xafb3004c, 0xafb20048, 0xafb10044,
+0xafa20034, 0xafa30030, 0xafa00010, 0xafa00014,
+0x8f860040, 0x24050200, 0xc0029d3, 0x2003821,
+0x8f830040, 0x3c02f000, 0x621824, 0x3c026000,
+0x1062000b, 0xa3a0003f, 0x240e0001, 0x3c040001,
+0x24842d48, 0xa3ae003f, 0xafa00010, 0xafa00014,
+0x8f860040, 0x24050300, 0xc0029d3, 0x2003821,
+0x8f820240, 0x3c030001, 0x431025, 0xaf820240,
+0xaf800048, 0x8f820048, 0x14400005, 0x0,
+0xaf800048, 0x8f820048, 0x10400004, 0x0,
+0xaf800048, 0x10000003, 0x2e02021, 0xaf80004c,
+0x2e02021, 0x3c050001, 0xc002a40, 0x34a540f8,
+0x3402021, 0xc002a40, 0x240505b8, 0x3c020001,
+0x8c423de4, 0x3c0d0001, 0x8dad3dc4, 0x3c030001,
+0x8c633dc0, 0x3c080001, 0x8d083dcc, 0x3c090001,
+0x8d293de8, 0x3c0a0001, 0x8d4a3df0, 0x3c0b0001,
+0x8d6b3e00, 0x3c0c0001, 0x8d8c3dd4, 0x3c040001,
+0x24842d54, 0x24050400, 0xaf420130, 0x8f420130,
+0x24060001, 0x24070001, 0xaf400000, 0xaf4d012c,
+0xaf430138, 0xaf48013c, 0xaf490140, 0xaf4a0144,
+0xaf4b0148, 0xaf4c014c, 0x2442ff80, 0xaf420134,
+0x24020001, 0xafa20010, 0xc0029d3, 0xafa00014,
+0x8f42012c, 0xafa20010, 0x8f420130, 0xafa20014,
+0x8f460138, 0x8f47013c, 0x3c040001, 0x24842d60,
+0xc0029d3, 0x24050500, 0xafb70010, 0xafba0014,
+0x8f460140, 0x8f470144, 0x3c040001, 0x24842d6c,
+0xc0029d3, 0x24050600, 0x3c020001, 0x8c423dd8,
+0x3603821, 0x3c060001, 0x24c65f40, 0x2448ffff,
+0x1061824, 0xe81024, 0x43102b, 0x10400006,
+0x24050900, 0x3c040001, 0x24842d78, 0xafa80010,
+0xc0029d3, 0xafa00014, 0x8f82000c, 0xafa20010,
+0x8f82003c, 0xafa20014, 0x8f860000, 0x8f870004,
+0x3c040001, 0x24842d84, 0xc0029d3, 0x24051000,
+0x8c020220, 0x8c030224, 0x8c060218, 0x8c07021c,
+0x3c040001, 0x24842d8c, 0x24051100, 0xafa20010,
+0xc0029d3, 0xafa30014, 0xaf800054, 0xaf80011c,
+0x8c020218, 0x30420002, 0x10400009, 0x0,
+0x8c020220, 0x3c030002, 0x34630004, 0x431025,
+0xaf42000c, 0x8c02021c, 0x10000008, 0x34420004,
+0x8c020220, 0x3c030002, 0x34630006, 0x431025,
+0xaf42000c, 0x8c02021c, 0x34420006, 0xaf420014,
+0x8c020218, 0x30420010, 0x1040000a, 0x0,
+0x8c02021c, 0x34420004, 0xaf420010, 0x8c020220,
+0x3c03000a, 0x34630004, 0x431025, 0x10000009,
+0xaf420008, 0x8c020220, 0x3c03000a, 0x34630006,
+0x431025, 0xaf420008, 0x8c02021c, 0x34420006,
+0xaf420010, 0x24020001, 0xaf8200a0, 0xaf8200b0,
+0x8f830054, 0x8f820054, 0x10000002, 0x24630064,
+0x8f820054, 0x621023, 0x2c420065, 0x1440fffc,
+0x0, 0x8c040208, 0x8c05020c, 0x26e20028,
+0xaee20020, 0x24020490, 0xaee20010, 0xaee40008,
+0xaee5000c, 0x26e40008, 0x8c820000, 0x8c830004,
+0xaf820090, 0xaf830094, 0x8c820018, 0xaf8200b4,
+0x9482000a, 0xaf82009c, 0x8f8200b0, 0x8f430014,
+0x431025, 0xaf8200b0, 0x8f8200b0, 0x30420004,
+0x1440fffd, 0x24051200, 0x96e20472, 0x96e60452,
+0x96e70462, 0xafa20010, 0x96e20482, 0x3c040001,
+0x24842d94, 0xc0029d3, 0xafa20014, 0x96f00452,
+0x32020001, 0x10400002, 0xb021, 0x24160001,
+0x32020002, 0x54400001, 0x36d60002, 0x32020008,
+0x54400001, 0x36d60004, 0x32020010, 0x54400001,
+0x36d60008, 0x32020020, 0x54400001, 0x36d60010,
+0x32020040, 0x54400001, 0x36d60020, 0x32020080,
+0x54400001, 0x36d60040, 0x96e60482, 0x30c20200,
+0x54400001, 0x36d64000, 0x96e30472, 0x30620200,
+0x10400003, 0x30620100, 0x10000003, 0x36d62000,
+0x54400001, 0x36d61000, 0x96f00462, 0x32c24000,
+0x14400004, 0x3207009b, 0x30c2009b, 0x14e20007,
+0x240e0001, 0x32c22000, 0x1440000d, 0x32020001,
+0x3062009b, 0x10e20009, 0x240e0001, 0x3c040001,
+0x24842da0, 0x24051300, 0x2003821, 0xa3ae003f,
+0xafa30010, 0xc0029d3, 0xafa00014, 0x32020001,
+0x54400001, 0x36d60080, 0x32020002, 0x54400001,
+0x36d60100, 0x32020008, 0x54400001, 0x36d60200,
+0x32020010, 0x54400001, 0x36d60400, 0x32020080,
+0x54400001, 0x36d60800, 0x8c020218, 0x30420200,
+0x10400002, 0x3c020008, 0x2c2b025, 0x8c020218,
+0x30420800, 0x10400002, 0x3c020080, 0x2c2b025,
+0x8c020218, 0x30420400, 0x10400002, 0x3c020100,
+0x2c2b025, 0x8c020218, 0x30420100, 0x10400002,
+0x3c020200, 0x2c2b025, 0x8c020218, 0x30420080,
+0x10400002, 0x3c020400, 0x2c2b025, 0x8c020218,
+0x30422000, 0x10400002, 0x3c020010, 0x2c2b025,
+0x8c020218, 0x30424000, 0x10400002, 0x3c020020,
+0x2c2b025, 0x8c020218, 0x30421000, 0x10400002,
+0x3c020040, 0x2c2b025, 0x8ee20498, 0x8ee3049c,
+0xaf420150, 0xaf430154, 0x8ee204a0, 0x8ee304a4,
+0xaf420158, 0xaf43015c, 0x8ee204a8, 0x8ee304ac,
+0xaf420160, 0xaf430164, 0x8ee20428, 0x8ee3042c,
+0xaf420168, 0xaf43016c, 0x8ee20448, 0x8ee3044c,
+0xaf420170, 0xaf430174, 0x8ee20458, 0x8ee3045c,
+0xaf420178, 0xaf43017c, 0x8ee20468, 0x8ee3046c,
+0xaf420180, 0xaf430184, 0x8ee20478, 0x8ee3047c,
+0xaf420188, 0xaf43018c, 0x8ee20488, 0x8ee3048c,
+0xaf420190, 0xaf430194, 0x8ee204b0, 0x8ee304b4,
+0x24040080, 0xaf420198, 0xaf43019c, 0xc002a40,
+0x24050080, 0x8c02025c, 0x27440214, 0xaf4201e0,
+0x8c020260, 0x24050200, 0x24060008, 0xc002a57,
+0xaf4201e8, 0x3c043b9a, 0x3484ca00, 0x3821,
+0x24020006, 0x24030002, 0xaf4201e4, 0x240203e8,
+0xaf4301f4, 0xaf4301f0, 0xaf4401ec, 0xaf420284,
+0x24020001, 0xaf430280, 0xaf42028c, 0x3c030001,
+0x671821, 0x90633c68, 0x3471021, 0x24e70001,
+0xa043021c, 0x2ce2000f, 0x1440fff8, 0x3471821,
+0x24e70001, 0x3c080001, 0x350840f8, 0x8f820040,
+0x3c040001, 0x24842dac, 0x24051400, 0x21702,
+0x24420030, 0xa062021c, 0x3471021, 0xa040021c,
+0x8c070218, 0x2c03021, 0x240205b8, 0xafa20010,
+0xc0029d3, 0xafa80014, 0x3c040001, 0x24842db8,
+0x3c050000, 0x24a55b3c, 0x24060010, 0x27b10030,
+0x2203821, 0x27b30034, 0xc001750, 0xafb30010,
+0x3c030001, 0x8c633c58, 0x1060000a, 0x408021,
+0x8fa30030, 0x2405ff00, 0x8fa20034, 0x246400ff,
+0x852024, 0x831823, 0x431023, 0xafa20034,
+0xafa40030, 0xafb30010, 0x3c040001, 0x24842dc4,
+0x3c050000, 0x24a54100, 0x24060108, 0xc001750,
+0x2203821, 0x409021, 0x32c20003, 0x50400045,
+0x2203821, 0x8f820050, 0x3c030010, 0x431024,
+0x10400016, 0x0, 0x8c020218, 0x30420040,
+0x1040000f, 0x24020001, 0x8f820050, 0x8c030218,
+0x240e0001, 0x3c040001, 0x24842dd0, 0xa3ae003f,
+0xafa20010, 0xafa30014, 0x8f870040, 0x24051500,
+0xc0029d3, 0x2c03021, 0x10000004, 0x0,
+0x3c010001, 0x370821, 0xa02240f4, 0x3c040001,
+0x24842ddc, 0x3c050001, 0x24a59ce8, 0x3c060001,
+0x24c69d60, 0xc53023, 0x8f420010, 0x27b30030,
+0x2603821, 0x27b10034, 0x34420a00, 0xaf420010,
+0xc001750, 0xafb10010, 0x3c040001, 0x24842df0,
+0x3c050001, 0x24a5af7c, 0x3c060001, 0x24c6b2f8,
+0xc53023, 0x2603821, 0xaf420108, 0xc001750,
+0xafb10010, 0x3c040001, 0x24842e0c, 0x3c050001,
+0x24a5b714, 0x3c060001, 0x24c6c1d4, 0xc53023,
+0x2603821, 0x3c010001, 0xac223e30, 0xc001750,
+0xafb10010, 0x3c040001, 0x24842e24, 0x10000024,
+0x24051600, 0x3c040001, 0x24842e2c, 0x3c050001,
+0x24a59bb4, 0x3c060001, 0x24c69ce0, 0xc53023,
+0xc001750, 0xafb30010, 0x3c040001, 0x24842e3c,
+0x3c050001, 0x24a5ab34, 0x3c060001, 0x24c6af74,
+0xc53023, 0x2203821, 0xaf420108, 0xc001750,
+0xafb30010, 0x3c040001, 0x24842e50, 0x3c050001,
+0x24a5b300, 0x3c060001, 0x24c6b70c, 0xc53023,
+0x2203821, 0x3c010001, 0xac223e30, 0xc001750,
+0xafb30010, 0x3c040001, 0x24842e64, 0x24051650,
+0x2c03021, 0x3821, 0x3c010001, 0xac223e34,
+0xafa00010, 0xc0029d3, 0xafa00014, 0x32c20020,
+0x10400021, 0x27a70030, 0x3c040001, 0x24842e70,
+0x3c050001, 0x24a5a9c0, 0x3c060001, 0x24c6ab2c,
+0xc53023, 0x24022000, 0xaf42001c, 0x27a20034,
+0xc001750, 0xafa20010, 0x21900, 0x31982,
+0x3c040800, 0x641825, 0xae430028, 0x24030010,
+0xaf43003c, 0x96e30450, 0xaf430040, 0x8f430040,
+0x3c040001, 0x24842e84, 0xafa00014, 0xafa30010,
+0x8f47001c, 0x24051660, 0x3c010001, 0xac223e2c,
+0x10000025, 0x32c60020, 0x8ee20448, 0x8ee3044c,
+0xaf43001c, 0x8f42001c, 0x2442e000, 0x2c422001,
+0x1440000a, 0x240e0001, 0x3c040001, 0x24842e90,
+0xa3ae003f, 0xafa00010, 0xafa00014, 0x8f46001c,
+0x24051700, 0xc0029d3, 0x3821, 0x3c020000,
+0x24425b78, 0x21100, 0x21182, 0x3c030800,
+0x431025, 0xae420028, 0x24020008, 0xaf42003c,
+0x96e20450, 0xaf420040, 0x8f420040, 0x3c040001,
+0x24842e9c, 0xafa00014, 0xafa20010, 0x8f47001c,
+0x24051800, 0x32c60020, 0xc0029d3, 0x0,
+0x3c030001, 0x8c633e30, 0x3c050fff, 0x34a5ffff,
+0x3c020001, 0x8c423e34, 0x3c040800, 0x651824,
+0x31882, 0x641825, 0x451024, 0x21082,
+0x441025, 0xae420080, 0x32c20180, 0x10400056,
+0xae430020, 0x8f82005c, 0x3c030080, 0x431024,
+0x1040000d, 0x0, 0x8f820050, 0xafa20010,
+0x8f82005c, 0x240e0001, 0x3c040001, 0x24842ea8,
+0xa3ae003f, 0xafa20014, 0x8f870040, 0x24051900,
+0xc0029d3, 0x2c03021, 0x8f820050, 0x3c030010,
+0x431024, 0x10400016, 0x0, 0x8c020218,
+0x30420040, 0x1040000f, 0x24020001, 0x8f820050,
+0x8c030218, 0x240e0001, 0x3c040001, 0x24842dd0,
+0xa3ae003f, 0xafa20010, 0xafa30014, 0x8f870040,
+0x24052000, 0xc0029d3, 0x2c03021, 0x10000004,
+0x0, 0x3c010001, 0x370821, 0xa02240f4,
+0x3c040001, 0x24842eb4, 0x3c050001, 0x24a59b2c,
+0x3c060001, 0x24c69bac, 0xc53023, 0x8f420008,
+0x27b30030, 0x2603821, 0x27b10034, 0x34420e00,
+0xaf420008, 0xc001750, 0xafb10010, 0x3c040001,
+0x24842ecc, 0x3c050001, 0x24a5d090, 0x3c060001,
+0x24c6db90, 0xc53023, 0x2603821, 0xaf42010c,
+0xc001750, 0xafb10010, 0x3c040001, 0x24842ee4,
+0x3c050001, 0x24a5e174, 0x3c060001, 0x24c6e860,
+0xc53023, 0x2603821, 0x3c010001, 0xac223e40,
+0xc001750, 0xafb10010, 0x3c040001, 0x24842efc,
+0x10000027, 0x24052100, 0x3c040001, 0x24842f04,
+0x3c050001, 0x24a599e8, 0x3c060001, 0x24c69b24,
+0xc53023, 0x27b10030, 0x2203821, 0x27b30034,
+0xc001750, 0xafb30010, 0x3c040001, 0x24842f14,
+0x3c050001, 0x24a5c300, 0x3c060001, 0x24c6d088,
+0xc53023, 0x2203821, 0xaf42010c, 0xc001750,
+0xafb30010, 0x3c040001, 0x24842f24, 0x3c050001,
+0x24a5e014, 0x3c060001, 0x24c6e16c, 0xc53023,
+0x2203821, 0x3c010001, 0xac223e40, 0xc001750,
+0xafb30010, 0x3c040001, 0x24842f38, 0x24052150,
+0x2c03021, 0x3821, 0x3c010001, 0xac223e4c,
+0xafa00010, 0xc0029d3, 0xafa00014, 0x3c030001,
+0x8c633e40, 0x3c110fff, 0x3631ffff, 0x3c020001,
+0x8c423e4c, 0x3c1e0800, 0x711824, 0x31882,
+0x7e1825, 0x511024, 0x21082, 0x5e1025,
+0xae430038, 0xae420078, 0x8c020218, 0x30420040,
+0x14400004, 0x24020001, 0x3c010001, 0x370821,
+0xa02240f4, 0x3c040001, 0x24842f44, 0x3c050001,
+0x24a5db98, 0x3c060001, 0x24c6dcf4, 0xc53023,
+0x27b50030, 0x2a03821, 0x27b30034, 0xc001750,
+0xafb30010, 0x3c010001, 0xac223e38, 0x511024,
+0x21082, 0x5e1025, 0xae420050, 0x32c22000,
+0x10400005, 0x2a03821, 0x3c020000, 0x24425b78,
+0x1000000d, 0x511024, 0x3c040001, 0x24842f58,
+0x3c050001, 0x24a5dcfc, 0x3c060001, 0x24c6deac,
+0xc53023, 0xc001750, 0xafb30010, 0x3c010001,
+0xac223e50, 0x511024, 0x21082, 0x5e1025,
+0xae420048, 0x32c24000, 0x10400005, 0x27a70030,
+0x3c020000, 0x24425b78, 0x1000000e, 0x21100,
+0x3c040001, 0x24842f70, 0x3c050001, 0x24a5deb4,
+0x3c060001, 0x24c6e00c, 0xc53023, 0x27a20034,
+0xc001750, 0xafa20010, 0x3c010001, 0xac223e44,
+0x21100, 0x21182, 0x3c030800, 0x431025,
+0xae420060, 0x3c040001, 0x24842f88, 0x3c050000,
+0x24a57ca0, 0x3c060001, 0x24c680c4, 0xc53023,
+0x27b10030, 0x2203821, 0x27b30034, 0xc001750,
+0xafb30010, 0x3c1e0fff, 0x37deffff, 0x3c040001,
+0x24842f94, 0x3c050000, 0x24a56318, 0x3c060000,
+0x24c66478, 0xc53023, 0x2203821, 0x3c010001,
+0xac223e18, 0x5e1024, 0x21082, 0x3c150800,
+0x551025, 0xae4200b8, 0xc001750, 0xafb30010,
+0x3c040001, 0x24842fa0, 0x3c050000, 0x24a56480,
+0x3c060000, 0x24c666f8, 0xc53023, 0x2203821,
+0x3c010001, 0xac223e0c, 0x5e1024, 0x21082,
+0x551025, 0xae4200e8, 0xc001750, 0xafb30010,
+0x3c040001, 0x24842fb8, 0x3c050000, 0x24a56700,
+0x3c060000, 0x24c66830, 0xc53023, 0x2203821,
+0x3c010001, 0xac223e04, 0x5e1024, 0x21082,
+0x551025, 0xae4200c0, 0xc001750, 0xafb30010,
+0x3c040001, 0x24842fd0, 0x3c050001, 0x24a5f240,
+0x3c060001, 0x24c6f318, 0xc53023, 0x2203821,
+0x3c010001, 0xac223e10, 0x5e1024, 0x21082,
+0x551025, 0xae4200c8, 0xc001750, 0xafb30010,
+0x3c040001, 0x24842fdc, 0x3c050001, 0x24a5c1e0,
+0x3c060001, 0x24c6c21c, 0xc53023, 0x2203821,
+0xaf420110, 0xc001750, 0xafb30010, 0x3c040001,
+0x24842fec, 0x3c050001, 0x24a5c224, 0x3c060001,
+0x24c6c24c, 0xc53023, 0x2203821, 0xaf420114,
+0xc001750, 0xafb30010, 0x3c040001, 0x24842ff8,
+0x3c050001, 0x24a5e9c0, 0x3c060001, 0x24c6eeac,
+0xc53023, 0x2203821, 0xaf420118, 0xc001750,
+0xafb30010, 0x3c010001, 0xac223e54, 0x5e1024,
+0x21082, 0x551025, 0xc003d9f, 0xae4200d0,
+0xc003a1c, 0x0, 0xc002630, 0x0,
+0xac000228, 0xac00022c, 0x96e20450, 0x2442ffff,
+0xaf420038, 0x96e20460, 0xaf420080, 0x32c24000,
+0x14400003, 0x0, 0x96e20480, 0xaf420084,
+0x96e70490, 0x50e00001, 0x24070800, 0x24e2ffff,
+0xaf420088, 0xaf42007c, 0x24020800, 0x10e2000f,
+0x32c24000, 0x10400003, 0x24020400, 0x10e2000b,
+0x0, 0x240e0001, 0x3c040001, 0x24843008,
+0xa3ae003f, 0x96e60490, 0x24052170, 0x2c03821,
+0xafa00010, 0xc0029d3, 0xafa00014, 0x8f43012c,
+0x8f44012c, 0x24020001, 0xa34205b3, 0xaf430094,
+0xaf440098, 0xafa00010, 0xafa00014, 0x8f460080,
+0x8f470084, 0x3c040001, 0x24843014, 0xc0029d3,
+0x24052200, 0xc00232c, 0x3c110800, 0x3c1433d8,
+0x3694cb58, 0x3c020800, 0x34420080, 0x3c040001,
+0x24843020, 0x3c050000, 0x24a55bbc, 0x3c060000,
+0x24c65bd8, 0xc53023, 0x27a70030, 0xaf820060,
+0x2402ffff, 0xaf820064, 0x27a20034, 0xc001750,
+0xafa20010, 0x3c010001, 0xac223df4, 0x21100,
+0x21182, 0x511025, 0xc0018a8, 0xae420000,
+0x8f820240, 0x3c030001, 0x431025, 0xaf820240,
+0x3c020000, 0x24424034, 0xaf820244, 0xaf800240,
+0x8f820060, 0x511024, 0x14400005, 0x3c030800,
+0x8f820060, 0x431024, 0x1040fffd, 0x0,
+0xc003a29, 0x8821, 0x3c020100, 0xafa20020,
+0x8f530018, 0x240200ff, 0x56620001, 0x26710001,
+0x8c020228, 0x1622000e, 0x1330c0, 0x8f42032c,
+0x24420001, 0xaf42032c, 0x8f42032c, 0x8c020228,
+0x3c040001, 0x24842ce4, 0x3c050009, 0xafa00014,
+0xafa20010, 0x8fa60020, 0x1000003f, 0x34a50100,
+0xd71021, 0x8fa30020, 0x8fa40024, 0xac4304c0,
+0xac4404c4, 0xc01821, 0x8f440168, 0x8f45016c,
+0x1021, 0x24070004, 0xafa70010, 0xafb10014,
+0x8f48000c, 0x24c604c0, 0x2e63021, 0xafa80018,
+0x8f48010c, 0x24070008, 0xa32821, 0xa3482b,
+0x822021, 0x100f809, 0x892021, 0x1440000b,
+0x24070008, 0x8f820120, 0xafa20010, 0x8f820124,
+0x3c040001, 0x24842cec, 0x3c050009, 0xafa20014,
+0x8fa60020, 0x1000001c, 0x34a50200, 0x8f440150,
+0x8f450154, 0x8f43000c, 0xaf510018, 0x8f860120,
+0x24020010, 0xafa20010, 0xafb10014, 0xafa30018,
+0x8f42010c, 0x40f809, 0x24c6001c, 0x14400010,
+0x0, 0x8f420330, 0x24420001, 0xaf420330,
+0x8f420330, 0x8f820120, 0xafa20010, 0x8f820124,
+0x3c040001, 0x24842cf4, 0x3c050009, 0xafa20014,
+0x8fa60020, 0x34a50300, 0xc0029d3, 0x2603821,
+0x8f4202d4, 0x24420001, 0xaf4202d4, 0x8f4202d4,
+0x93a2003f, 0x10400069, 0x3c020700, 0x34423000,
+0xafa20028, 0x8f530018, 0x240200ff, 0x12620002,
+0x8821, 0x26710001, 0x8c020228, 0x1622000e,
+0x1330c0, 0x8f42032c, 0x24420001, 0xaf42032c,
+0x8f42032c, 0x8c020228, 0x3c040001, 0x24842ce4,
+0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60028,
+0x1000003f, 0x34a50100, 0xd71021, 0x8fa30028,
+0x8fa4002c, 0xac4304c0, 0xac4404c4, 0xc01821,
+0x8f440168, 0x8f45016c, 0x1021, 0x24070004,
+0xafa70010, 0xafb10014, 0x8f48000c, 0x24c604c0,
+0x2e63021, 0xafa80018, 0x8f48010c, 0x24070008,
+0xa32821, 0xa3482b, 0x822021, 0x100f809,
+0x892021, 0x1440000b, 0x24070008, 0x8f820120,
+0xafa20010, 0x8f820124, 0x3c040001, 0x24842cec,
+0x3c050009, 0xafa20014, 0x8fa60028, 0x1000001c,
+0x34a50200, 0x8f440150, 0x8f450154, 0x8f43000c,
+0xaf510018, 0x8f860120, 0x24020010, 0xafa20010,
+0xafb10014, 0xafa30018, 0x8f42010c, 0x40f809,
+0x24c6001c, 0x14400010, 0x0, 0x8f420330,
+0x24420001, 0xaf420330, 0x8f420330, 0x8f820120,
+0xafa20010, 0x8f820124, 0x3c040001, 0x24842cf4,
+0x3c050009, 0xafa20014, 0x8fa60028, 0x34a50300,
+0xc0029d3, 0x2603821, 0x8f4202e0, 0x24420001,
+0xaf4202e0, 0x8f4202e0, 0x3c040001, 0x24843030,
+0xafa00010, 0xafa00014, 0x8fa60028, 0x24052300,
+0xc0029d3, 0x3821, 0x10000004, 0x0,
+0x8c020264, 0x10400005, 0x0, 0x8f8200a0,
+0x30420004, 0x1440fffa, 0x0, 0x8f820044,
+0x34420004, 0xaf820044, 0x8f4202f8, 0x24420001,
+0xaf4202f8, 0x8f4202f8, 0x8f8200d8, 0x8f8300d4,
+0x431023, 0x2442ff80, 0xaf420090, 0x8f420090,
+0x2842ff81, 0x10400006, 0x24020001, 0x8f420090,
+0x8f430138, 0x431021, 0xaf420090, 0x24020001,
+0xaf42008c, 0x32c20008, 0x10400006, 0x0,
+0x8f820214, 0x3c038100, 0x3042ffff, 0x431025,
+0xaf820214, 0x3c020001, 0x8c423d14, 0x30420001,
+0x10400009, 0x0, 0x3c040001, 0x2484303c,
+0x3c050000, 0x24a56c40, 0x3c060000, 0x24c670e8,
+0x10000008, 0xc53023, 0x3c040001, 0x2484304c,
+0x3c050000, 0x24a56838, 0x3c060000, 0x24c66c38,
+0xc53023, 0x27a70030, 0x27a20034, 0xc001750,
+0xafa20010, 0x3c010001, 0xac223e08, 0x3c020001,
+0x8c423e08, 0x3c030800, 0x21100, 0x21182,
+0x431025, 0xae420040, 0x8f8200a0, 0xafa20010,
+0x8f8200b0, 0xafa20014, 0x8f86005c, 0x8f87011c,
+0x3c040001, 0x2484305c, 0x3c010001, 0xac363de0,
+0x3c010001, 0xac203dd0, 0x3c010001, 0xac3c3dc8,
+0x3c010001, 0xac3b3df8, 0x3c010001, 0xac373dfc,
+0x3c010001, 0xac3a3ddc, 0xc0029d3, 0x24052400,
+0x8f820200, 0xafa20010, 0x8f820220, 0xafa20014,
+0x8f860044, 0x8f870050, 0x3c040001, 0x24843068,
+0xc0029d3, 0x24052500, 0x8f830060, 0x74100b,
+0x242000a, 0x200f821, 0x0, 0xd,
+0x8fbf0058, 0x8fbe0054, 0x8fb50050, 0x8fb3004c,
+0x8fb20048, 0x8fb10044, 0x8fb00040, 0x3e00008,
+0x27bd0060, 0x27bdffe0, 0x3c040001, 0x24843074,
+0x24052600, 0x3021, 0x3821, 0xafbf0018,
+0xafa00010, 0xc0029d3, 0xafa00014, 0x8fbf0018,
+0x3e00008, 0x27bd0020, 0x3e00008, 0x0,
+0x3e00008, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x3e00008,
+0x0, 0x3e00008, 0x0, 0x27bdfde0,
+0x27a50018, 0x3c04dead, 0x3484beef, 0xafbf0218,
+0x8f820150, 0x3c03001f, 0x3463ffff, 0xafa40018,
+0xa22823, 0xa32824, 0x8ca20000, 0x1044000a,
+0x0, 0xafa50010, 0x8ca20000, 0xafa20014,
+0x8f860150, 0x8f870250, 0x3c040001, 0x2484307c,
+0xc0029d3, 0x24052700, 0x8fbf0218, 0x3e00008,
+0x27bd0220, 0x27bdffe0, 0x3c06abba, 0x34c6babe,
+0xafb00018, 0x3c100004, 0x3c07007f, 0x34e7ffff,
+0xafbf001c, 0x102840, 0x8e040000, 0x8ca30000,
+0xaca00000, 0xae060000, 0x8ca20000, 0xaca30000,
+0x10460005, 0xae040000, 0xa08021, 0xf0102b,
+0x1040fff5, 0x102840, 0x3c040001, 0x24843088,
+0x24052800, 0x2003021, 0x3821, 0xafa00010,
+0xc0029d3, 0xafa00014, 0x2001021, 0x8fbf001c,
+0x8fb00018, 0x3e00008, 0x27bd0020, 0x8c020224,
+0x3047003f, 0x10e00010, 0x803021, 0x2821,
+0x24030020, 0xe31024, 0x10400002, 0x63042,
+0xa62821, 0x31842, 0x1460fffb, 0xe31024,
+0x2402f000, 0xa22824, 0x3403ffff, 0x65102b,
+0x14400003, 0x851023, 0x10000006, 0x3c020001,
+0x62102b, 0x14400003, 0xa01021, 0x3c02ffff,
+0x821021, 0x3e00008, 0x0, 0x27bdffd0,
+0xafb50028, 0x8fb50040, 0xafb20020, 0xa09021,
+0xafb1001c, 0x24c60003, 0xafbf002c, 0xafb30024,
+0xafb00018, 0x8ea20000, 0x2403fffc, 0xc38024,
+0x50102b, 0x1440001b, 0xe08821, 0x8e330000,
+0xafb00010, 0x8ea20000, 0xafa20014, 0x8e270000,
+0x24053000, 0xc0029d3, 0x2403021, 0x8e230000,
+0x702021, 0x64102b, 0x10400007, 0x2402821,
+0x8ca20000, 0xac620000, 0x24630004, 0x64102b,
+0x1440fffb, 0x24a50004, 0x8ea20000, 0x501023,
+0xaea20000, 0x8e220000, 0x501021, 0x1000000b,
+0xae220000, 0x2402002d, 0xa0820000, 0xafb00010,
+0x8ea20000, 0x2409821, 0xafa20014, 0x8e270000,
+0x24053100, 0xc0029d3, 0x2603021, 0x2601021,
+0x8fbf002c, 0x8fb50028, 0x8fb30024, 0x8fb20020,
+0x8fb1001c, 0x8fb00018, 0x3e00008, 0x27bd0030,
+0x27bdffe8, 0x3c1cc000, 0x3c05fffe, 0x3c030001,
+0x8c633dc0, 0x3c040001, 0x8c843dcc, 0x34a5bf08,
+0x24021ffc, 0x3c010001, 0xac223c60, 0x3c0200c0,
+0x3c010001, 0xac223c64, 0x3c020020, 0xafbf0010,
+0x3c0100c0, 0xac201ffc, 0x431023, 0x441023,
+0x245bb000, 0x365b821, 0x3c1d0001, 0x8fbd3c5c,
+0x3a0f021, 0x3c0400c0, 0x34840200, 0x3c1a00c0,
+0x3c0300c0, 0x346307b8, 0x24021dfc, 0x3c010001,
+0xac223c60, 0x24021844, 0x3c010001, 0xac243c64,
+0x3c010001, 0xac223c60, 0x3c010001, 0xac233c64,
+0xc0017ba, 0x375a0200, 0x8fbf0010, 0x3e00008,
+0x27bd0018, 0x27bdffc8, 0x3c040001, 0x24843094,
+0x24053200, 0x3c020001, 0x8c423c60, 0x3c030001,
+0x8c633c64, 0x3021, 0x3603821, 0xafbf0030,
+0xafb3002c, 0xafb20028, 0xafb10024, 0xafb00020,
+0xafa2001c, 0xafa30018, 0xafb70010, 0xc0029d3,
+0xafba0014, 0xc0018c2, 0x0, 0x8f820240,
+0x34420004, 0xaf820240, 0x24020001, 0xaf420000,
+0x3c020001, 0x571021, 0x904240f4, 0x10400092,
+0x2403fffc, 0x3c100001, 0x2610a6d3, 0x3c120001,
+0x2652a2ac, 0x2121023, 0x438024, 0x8fa3001c,
+0x3c040001, 0x248430a0, 0x70102b, 0x1440001a,
+0x27b30018, 0x8fb10018, 0x24053000, 0x2403021,
+0xafb00010, 0xafa30014, 0xc0029d3, 0x2203821,
+0x8fa30018, 0x702021, 0x64102b, 0x10400007,
+0x2403021, 0x8cc20000, 0xac620000, 0x24630004,
+0x64102b, 0x1440fffb, 0x24c60004, 0x8fa2001c,
+0x501023, 0xafa2001c, 0x8e620000, 0x501021,
+0x1000000a, 0xae620000, 0x2408821, 0x24053100,
+0xafb00010, 0xafa30014, 0x8fa70018, 0x2203021,
+0x2402002d, 0xc0029d3, 0xa0820000, 0x24070020,
+0x8fa3001c, 0x3c040001, 0x248430bc, 0x24120020,
+0x3c010001, 0xac313dec, 0x2c620020, 0x1440001d,
+0x27b10018, 0x8fb00018, 0x24053000, 0x3c060001,
+0x24c63e80, 0xafa70010, 0xafa30014, 0xc0029d3,
+0x2003821, 0x8fa30018, 0x3c040001, 0x24843e80,
+0x24650020, 0x65102b, 0x10400007, 0x0,
+0x8c820000, 0xac620000, 0x24630004, 0x65102b,
+0x1440fffb, 0x24840004, 0x8fa2001c, 0x521023,
+0xafa2001c, 0x8e220000, 0x521021, 0x1000000b,
+0xae220000, 0x3c100001, 0x26103e80, 0x24053100,
+0xafa70010, 0xafa30014, 0x8fa70018, 0x2003021,
+0x2402002d, 0xc0029d3, 0xa0820000, 0x24070020,
+0x3c040001, 0x248430d0, 0x8fa3001c, 0x24120020,
+0x3c010001, 0xac303e20, 0x2c620020, 0x1440001d,
+0x27b10018, 0x8fb00018, 0x24053000, 0x3c060001,
+0x24c63ea0, 0xafa70010, 0xafa30014, 0xc0029d3,
+0x2003821, 0x8fa30018, 0x3c040001, 0x24843ea0,
+0x24650020, 0x65102b, 0x10400007, 0x0,
+0x8c820000, 0xac620000, 0x24630004, 0x65102b,
+0x1440fffb, 0x24840004, 0x8fa2001c, 0x521023,
+0xafa2001c, 0x8e220000, 0x521021, 0x1000000b,
+0xae220000, 0x3c100001, 0x26103ea0, 0x24053100,
+0xafa70010, 0xafa30014, 0x8fa70018, 0x2003021,
+0x2402002d, 0xc0029d3, 0xa0820000, 0x3c010001,
+0x10000031, 0xac303e1c, 0x3c100000, 0x26107c8f,
+0x3c120000, 0x26527b0c, 0x2121023, 0x438024,
+0x8fa3001c, 0x3c040001, 0x248430e4, 0x70102b,
+0x1440001a, 0x27b30018, 0x8fb10018, 0x24053000,
+0x2403021, 0xafb00010, 0xafa30014, 0xc0029d3,
+0x2203821, 0x8fa30018, 0x702021, 0x64102b,
+0x10400007, 0x2403021, 0x8cc20000, 0xac620000,
+0x24630004, 0x64102b, 0x1440fffb, 0x24c60004,
+0x8fa2001c, 0x501023, 0xafa2001c, 0x8e620000,
+0x501021, 0x1000000a, 0xae620000, 0x2408821,
+0x24053100, 0xafb00010, 0xafa30014, 0x8fa70018,
+0x2203021, 0x2402002d, 0xc0029d3, 0xa0820000,
+0x3c010001, 0xac313dec, 0x3c030001, 0x8c633dec,
+0x24020400, 0x60f809, 0xaf820070, 0x8fbf0030,
+0x8fb3002c, 0x8fb20028, 0x8fb10024, 0x8fb00020,
+0x3e00008, 0x27bd0038, 0x0, 0x8f820040,
+0x3c03f000, 0x431024, 0x3c036000, 0x14430006,
+0x0, 0x8f820050, 0x2403ff80, 0x431024,
+0x34420055, 0xaf820050, 0x8f820054, 0x244203e8,
+0xaf820058, 0x240201f4, 0xaf4200e0, 0x24020004,
+0xaf4200e8, 0x24020002, 0xaf4001a0, 0xaf4000e4,
+0xaf4200dc, 0xaf4000d8, 0xaf4000d4, 0x3e00008,
+0xaf4000d0, 0x8f820054, 0x24420005, 0x3e00008,
+0xaf820078, 0x27bdffe8, 0xafbf0010, 0x8f820054,
+0x244203e8, 0xaf820058, 0x3c020800, 0x2c21024,
+0x10400004, 0x3c02f7ff, 0x3442ffff, 0x2c2b024,
+0x36940040, 0x3c020001, 0x8c423d28, 0x10400027,
+0x0, 0x3c020001, 0x8c423d14, 0x30420001,
+0x14400010, 0x0, 0x3c020001, 0x8c423e58,
+0x1040000c, 0x0, 0x3c020001, 0x8c423da4,
+0x14400008, 0x0, 0x8f830224, 0x3c020001,
+0x8c425f1c, 0x10620003, 0x0, 0xc003bad,
+0x0, 0x934205b1, 0x10400012, 0x24020001,
+0x934305b1, 0x14620004, 0x3c0208ff, 0x24020002,
+0x1000000c, 0xa34205b1, 0x3442fffb, 0xa34005b1,
+0x8f830220, 0x3c040200, 0x284a025, 0x621824,
+0xaf830220, 0x10000004, 0x3c020200, 0xc003f27,
+0x0, 0x3c020200, 0x2c21024, 0x10400003,
+0x0, 0xc001de7, 0x0, 0x8f4200d8,
+0x8f4300dc, 0x24420001, 0xaf4200d8, 0x43102b,
+0x14400003, 0x0, 0xaf4000d8, 0x36940080,
+0x8c030238, 0x1060000c, 0x0, 0x8f4201a0,
+0x244203e8, 0xaf4201a0, 0x43102b, 0x14400006,
+0x0, 0x934205b6, 0x14400003, 0x0,
+0xc001c3c, 0x0, 0x8fbf0010, 0x3e00008,
+0x27bd0018, 0x3e00008, 0x0, 0x27bdffd8,
+0xafbf0020, 0x8f43002c, 0x8f420038, 0x10620059,
+0x0, 0x3c020001, 0x571021, 0x904240f0,
+0x10400026, 0x24070008, 0x8f440160, 0x8f450164,
+0x8f48000c, 0x8f860120, 0x24020020, 0xafa20010,
+0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809,
+0x24c6001c, 0x14400011, 0x24020001, 0x3c010001,
+0x370821, 0xa02240f0, 0x8f820124, 0xafa20010,
+0x8f820128, 0x3c040001, 0x24843184, 0xafa20014,
+0x8f46002c, 0x8f870120, 0x3c050009, 0xc0029d3,
+0x34a50900, 0x1000005c, 0x0, 0x8f4202f0,
+0x24420001, 0xaf4202f0, 0x8f4202f0, 0x8f42002c,
+0xa34005b2, 0x10000027, 0xaf420038, 0x8f440160,
+0x8f450164, 0x8f43002c, 0x8f48000c, 0x8f860120,
+0x24020080, 0xafa20010, 0xafa30014, 0xafa80018,
+0x8f42010c, 0x40f809, 0x24c6001c, 0x14400011,
+0x24020001, 0x3c010001, 0x370821, 0xa02240f1,
+0x8f820124, 0xafa20010, 0x8f820128, 0x3c040001,
+0x24843190, 0xafa20014, 0x8f46002c, 0x8f870120,
+0x3c050009, 0xc0029d3, 0x34a51100, 0x10000036,
+0x0, 0x8f4202f0, 0x8f43002c, 0x24420001,
+0xaf4202f0, 0x8f4202f0, 0x24020001, 0xa34205b2,
+0xaf430038, 0x3c010001, 0x370821, 0xa02040f1,
+0x3c010001, 0x370821, 0xa02040f0, 0x10000026,
+0xaf400034, 0x934205b2, 0x1040001d, 0x0,
+0xa34005b2, 0x8f820040, 0x30420001, 0x14400008,
+0x2021, 0x8c030104, 0x24020001, 0x50620005,
+0x24040001, 0x8c020264, 0x10400003, 0x801021,
+0x24040001, 0x801021, 0x10400006, 0x0,
+0x8f4202fc, 0x24420001, 0xaf4202fc, 0x10000008,
+0x8f4202fc, 0x8f820044, 0x34420004, 0xaf820044,
+0x8f4202f8, 0x24420001, 0xaf4202f8, 0x8f4202f8,
+0x3c010001, 0x370821, 0xa02040f0, 0x3c010001,
+0x370821, 0xa02040f1, 0x8f420000, 0x10400007,
+0x0, 0xaf80004c, 0x8f82004c, 0x1040fffd,
+0x0, 0x10000005, 0x0, 0xaf800048,
+0x8f820048, 0x1040fffd, 0x0, 0x8f820060,
+0x3c03ff7f, 0x3463ffff, 0x431024, 0xaf820060,
+0x8f420000, 0x10400003, 0x0, 0x10000002,
+0xaf80004c, 0xaf800048, 0x8fbf0020, 0x3e00008,
+0x27bd0028, 0x3e00008, 0x0, 0x27bdffd8,
+0xafbf0020, 0x8f430044, 0x8f42007c, 0x10620029,
+0x24070008, 0x8f440158, 0x8f45015c, 0x8f48000c,
+0x8f860120, 0x24020040, 0xafa20010, 0xafa30014,
+0xafa80018, 0x8f42010c, 0x40f809, 0x24c6001c,
+0x14400011, 0x24020001, 0x3c010001, 0x370821,
+0xa02240f2, 0x8f820124, 0xafa20010, 0x8f820128,
+0x3c040001, 0x24843198, 0xafa20014, 0x8f460044,
+0x8f870120, 0x3c050009, 0xc0029d3, 0x34a51300,
+0x1000000f, 0x0, 0x8f4202f4, 0x24420001,
+0xaf4202f4, 0x8f4202f4, 0x8f420044, 0xaf42007c,
+0x3c010001, 0x370821, 0xa02040f2, 0x10000004,
+0xaf400078, 0x3c010001, 0x370821, 0xa02040f2,
+0x8f420000, 0x10400007, 0x0, 0xaf80004c,
+0x8f82004c, 0x1040fffd, 0x0, 0x10000005,
+0x0, 0xaf800048, 0x8f820048, 0x1040fffd,
+0x0, 0x8f820060, 0x3c03feff, 0x3463ffff,
+0x431024, 0xaf820060, 0x8f420000, 0x10400003,
+0x0, 0x10000002, 0xaf80004c, 0xaf800048,
+0x8fbf0020, 0x3e00008, 0x27bd0028, 0x3e00008,
+0x0, 0x3c020001, 0x8c423d28, 0x27bdffa8,
+0xafbf0050, 0xafbe004c, 0xafb50048, 0xafb30044,
+0xafb20040, 0xafb1003c, 0xafb00038, 0x104000d5,
+0x8f900044, 0x8f4200d0, 0x24430001, 0x2842000b,
+0x144000e4, 0xaf4300d0, 0x8f420004, 0x30420002,
+0x1440009c, 0xaf4000d0, 0x8f420004, 0x3c030001,
+0x8c633d18, 0x34420002, 0xaf420004, 0x24020001,
+0x14620003, 0x3c020600, 0x10000002, 0x34423000,
+0x34421000, 0xafa20020, 0x8f4a0018, 0xafaa0034,
+0x27aa0020, 0xafaa002c, 0x8faa0034, 0x240200ff,
+0x11420002, 0x1821, 0x25430001, 0x8c020228,
+0x609821, 0x1662000e, 0x3c050009, 0x8f42032c,
+0x24420001, 0xaf42032c, 0x8f42032c, 0x8c020228,
+0x8fa70034, 0x3c040001, 0x24843168, 0xafa00014,
+0xafa20010, 0x8fa60020, 0x10000070, 0x34a50500,
+0x8faa0034, 0xa38c0, 0xf71021, 0x8fa30020,
+0x8fa40024, 0xac4304c0, 0xac4404c4, 0x8f830054,
+0x8f820054, 0x247103e8, 0x2221023, 0x2c4203e9,
+0x1040001b, 0xa821, 0xe09021, 0x265e04c0,
+0x8f440168, 0x8f45016c, 0x2401821, 0x240a0004,
+0xafaa0010, 0xafb30014, 0x8f48000c, 0x1021,
+0x2fe3021, 0xafa80018, 0x8f48010c, 0x24070008,
+0xa32821, 0xa3482b, 0x822021, 0x100f809,
+0x892021, 0x54400006, 0x24150001, 0x8f820054,
+0x2221023, 0x2c4203e9, 0x1440ffe9, 0x0,
+0x32a200ff, 0x54400018, 0xaf530018, 0x8f420368,
+0x24420001, 0xaf420368, 0x8f420368, 0x8f820120,
+0x8faa002c, 0x8fa70034, 0xafa20010, 0x8f820124,
+0x3c040001, 0x24843174, 0xafa20014, 0x8d460000,
+0x3c050009, 0x10000035, 0x34a50600, 0x8f4202f8,
+0x24150001, 0x24420001, 0xaf4202f8, 0x8f4202f8,
+0x1000001e, 0x32a200ff, 0x8f830054, 0x8f820054,
+0x247103e8, 0x2221023, 0x2c4203e9, 0x10400016,
+0xa821, 0x3c1e0020, 0x24120010, 0x8f42000c,
+0x8f440150, 0x8f450154, 0x8f860120, 0xafb20010,
+0xafb30014, 0x5e1025, 0xafa20018, 0x8f42010c,
+0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe3,
+0x0, 0x8f820054, 0x2221023, 0x2c4203e9,
+0x1440ffee, 0x0, 0x32a200ff, 0x14400011,
+0x3c050009, 0x8f420368, 0x24420001, 0xaf420368,
+0x8f420368, 0x8f820120, 0x8faa002c, 0x8fa70034,
+0xafa20010, 0x8f820124, 0x3c040001, 0x2484317c,
+0xafa20014, 0x8d460000, 0x34a50700, 0xc0029d3,
+0x0, 0x8f4202dc, 0x24420001, 0xaf4202dc,
+0x8f4202dc, 0x8f420004, 0x30420001, 0x50400029,
+0x36100040, 0x3c020400, 0x2c21024, 0x10400013,
+0x2404ffdf, 0x8f420240, 0x8f430244, 0x8f4401a4,
+0x14640006, 0x36100040, 0x8f420260, 0x8f430264,
+0x8f4401a8, 0x10640007, 0x2402ffdf, 0x8f420240,
+0x8f430244, 0x8f440260, 0x8f450264, 0x10000012,
+0x3a100020, 0x1000002b, 0x2028024, 0x8f420240,
+0x8f430244, 0x8f4501a4, 0x14650006, 0x2048024,
+0x8f420260, 0x8f430264, 0x8f4401a8, 0x50640021,
+0x36100040, 0x8f420240, 0x8f430244, 0x8f440260,
+0x8f450264, 0x3a100040, 0xaf4301a4, 0x10000019,
+0xaf4501a8, 0x8f4200d4, 0x24430001, 0x10000011,
+0x28420033, 0x8f420004, 0x30420001, 0x10400009,
+0x3c020400, 0x2c21024, 0x10400004, 0x2402ffdf,
+0x2028024, 0x1000000b, 0x36100040, 0x10000009,
+0x36100060, 0x8f4200d4, 0x36100040, 0x24430001,
+0x284201f5, 0x14400003, 0xaf4300d4, 0xaf4000d4,
+0x3a100020, 0xaf900044, 0x2402ff7f, 0x282a024,
+0x8fbf0050, 0x8fbe004c, 0x8fb50048, 0x8fb30044,
+0x8fb20040, 0x8fb1003c, 0x8fb00038, 0x3e00008,
+0x27bd0058, 0x3e00008, 0x0, 0x3c020001,
+0x8c423d28, 0x27bdffb0, 0xafbf0048, 0xafbe0044,
+0xafb50040, 0xafb3003c, 0xafb20038, 0xafb10034,
+0x104000de, 0xafb00030, 0x8f4200d0, 0x3c040001,
+0x8c843d18, 0x24430001, 0x2842000b, 0xaf4400e8,
+0x144000fe, 0xaf4300d0, 0x8f420004, 0x30420002,
+0x14400095, 0xaf4000d0, 0x8f420004, 0x34420002,
+0xaf420004, 0x24020001, 0x14820003, 0x3c020600,
+0x10000002, 0x34423000, 0x34421000, 0xafa20020,
+0x1821, 0x8f5e0018, 0x27aa0020, 0x240200ff,
+0x13c20002, 0xafaa002c, 0x27c30001, 0x8c020228,
+0x609021, 0x1642000e, 0x1e38c0, 0x8f42032c,
+0x24420001, 0xaf42032c, 0x8f42032c, 0x8c020228,
+0x3c040001, 0x24843168, 0x3c050009, 0xafa00014,
+0xafa20010, 0x8fa60020, 0x1000006d, 0x34a50500,
+0xf71021, 0x8fa30020, 0x8fa40024, 0xac4304c0,
+0xac4404c4, 0x8f830054, 0x8f820054, 0x247003e8,
+0x2021023, 0x2c4203e9, 0x1040001b, 0x9821,
+0xe08821, 0x263504c0, 0x8f440168, 0x8f45016c,
+0x2201821, 0x240a0004, 0xafaa0010, 0xafb20014,
+0x8f48000c, 0x1021, 0x2f53021, 0xafa80018,
+0x8f48010c, 0x24070008, 0xa32821, 0xa3482b,
+0x822021, 0x100f809, 0x892021, 0x54400006,
+0x24130001, 0x8f820054, 0x2021023, 0x2c4203e9,
+0x1440ffe9, 0x0, 0x326200ff, 0x54400017,
+0xaf520018, 0x8f420368, 0x24420001, 0xaf420368,
+0x8f420368, 0x8f820120, 0x8faa002c, 0xafa20010,
+0x8f820124, 0x3c040001, 0x24843174, 0x3c050009,
+0xafa20014, 0x8d460000, 0x10000035, 0x34a50600,
+0x8f4202f8, 0x24130001, 0x24420001, 0xaf4202f8,
+0x8f4202f8, 0x1000001e, 0x326200ff, 0x8f830054,
+0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9,
+0x10400016, 0x9821, 0x3c150020, 0x24110010,
+0x8f42000c, 0x8f440150, 0x8f450154, 0x8f860120,
+0xafb10010, 0xafb20014, 0x551025, 0xafa20018,
+0x8f42010c, 0x24070008, 0x40f809, 0x24c6001c,
+0x1440ffe3, 0x0, 0x8f820054, 0x2021023,
+0x2c4203e9, 0x1440ffee, 0x0, 0x326200ff,
+0x14400011, 0x0, 0x8f420368, 0x24420001,
+0xaf420368, 0x8f420368, 0x8f820120, 0x8faa002c,
+0xafa20010, 0x8f820124, 0x3c040001, 0x2484317c,
+0x3c050009, 0xafa20014, 0x8d460000, 0x34a50700,
+0xc0029d3, 0x3c03821, 0x8f4202dc, 0x24420001,
+0xaf4202dc, 0x8f4202dc, 0x8f420004, 0x30420001,
+0x10400033, 0x3c020400, 0x2c21024, 0x10400017,
+0x0, 0x934205b0, 0x8f440240, 0x8f450244,
+0x8f4301a4, 0x34420020, 0x14a30006, 0xa34205b0,
+0x8f420260, 0x8f430264, 0x8f4401a8, 0x10640008,
+0x0, 0x8f420240, 0x8f430244, 0x934405b0,
+0x8f460260, 0x8f470264, 0x10000016, 0x38840040,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 26'
echo 'File patch-2.2.4 is continued in part 27'
echo 27 > _shar_seq_.tmp
#!/bin/sh
# this is part 28 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 28; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+0xaf420270, 0xaf430274, 0x8f420270, 0x8f430274,
+0x8f4200b4, 0x24e70001, 0xe2102b, 0x1440ffb8,
+0x710c0, 0xa34005b4, 0x1000003f, 0xaf4000b4,
+0x8f8200fc, 0x8fa30020, 0x8fa40024, 0xac430000,
+0xac440004, 0x24420008, 0xaf8200f0, 0x8f42009c,
+0x8f46008c, 0x8f440260, 0x8f450264, 0x401821,
+0x1021, 0x24c6ffff, 0xaf46008c, 0xa32821,
+0xa3302b, 0x822021, 0x862021, 0xaf440260,
+0xaf450264, 0x92020000, 0x30420001, 0x1440000c,
+0x2402ffff, 0x8f420268, 0x8f43026c, 0x24630001,
+0x2c640001, 0x441021, 0xaf420268, 0xaf43026c,
+0x8f420268, 0x8f43026c, 0x1000001c, 0xaf40009c,
+0x8e030000, 0x1462000f, 0x3402ffff, 0x96030004,
+0x1462000c, 0x0, 0x8f420278, 0x8f43027c,
+0x24630001, 0x2c640001, 0x441021, 0xaf420278,
+0xaf43027c, 0x8f420278, 0x8f43027c, 0x1000000b,
+0xaf40009c, 0x8f420270, 0x8f430274, 0x24630001,
+0x2c640001, 0x441021, 0xaf420270, 0xaf430274,
+0x8f420270, 0x8f430274, 0xaf40009c, 0x8e22001c,
+0x8f430040, 0x24420001, 0x2463ffff, 0x431024,
+0xaf42002c, 0x32420060, 0x14400008, 0x32c20010,
+0x8f420034, 0x24420001, 0xaf420034, 0x8c03023c,
+0x43102b, 0x14400111, 0x32c20010, 0x10400018,
+0x24070008, 0x8f440160, 0x8f450164, 0x8f43002c,
+0x8f48000c, 0x8f860120, 0x24020080, 0xafa20010,
+0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809,
+0x24c6001c, 0x10400041, 0x24020001, 0x8f4202f0,
+0x8f43002c, 0x24420001, 0xaf4202f0, 0x8f4202f0,
+0x24020001, 0xa34205b2, 0x10000076, 0xaf430038,
+0x8f440160, 0x8f450164, 0x8f43002c, 0x8f48000c,
+0x8f860120, 0x24020020, 0xafa20010, 0xafa30014,
+0xafa80018, 0x8f42010c, 0x40f809, 0x24c6001c,
+0x10400051, 0x24020001, 0x1000005f, 0x0,
+0x32420012, 0x1040006f, 0x32420001, 0x9623000e,
+0x8f42009c, 0x431021, 0xaf42009c, 0x8e23001c,
+0x8f420040, 0x24630001, 0x2442ffff, 0x621824,
+0x32420010, 0x14400008, 0xaf43002c, 0x8f420034,
+0x24420001, 0xaf420034, 0x8c03023c, 0x43102b,
+0x144000d2, 0x0, 0x32c20010, 0x10400028,
+0x24070008, 0x8f440160, 0x8f450164, 0x8f43002c,
+0x8f48000c, 0x8f860120, 0x24020080, 0xafa20010,
+0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809,
+0x24c6001c, 0x14400011, 0x24020001, 0x3c010001,
+0x370821, 0xa02240f1, 0x8f820124, 0xafa20010,
+0x8f820128, 0x3c040001, 0x24843800, 0xafa20014,
+0x8f46002c, 0x8f870120, 0x3c050009, 0xc0029d3,
+0x34a51100, 0x10000036, 0x0, 0x8f4202f0,
+0x8f43002c, 0x24420001, 0xaf4202f0, 0x8f4202f0,
+0x24020001, 0xa34205b2, 0x10000026, 0xaf430038,
+0x8f440160, 0x8f450164, 0x8f43002c, 0x8f48000c,
+0x8f860120, 0x24020020, 0xafa20010, 0xafa30014,
+0xafa80018, 0x8f42010c, 0x40f809, 0x24c6001c,
+0x14400011, 0x24020001, 0x3c010001, 0x370821,
+0xa02240f0, 0x8f820124, 0xafa20010, 0x8f820128,
+0x3c040001, 0x248437f4, 0xafa20014, 0x8f46002c,
+0x8f870120, 0x3c050009, 0xc0029d3, 0x34a50900,
+0x1000000f, 0x0, 0x8f4202f0, 0x24420001,
+0xaf4202f0, 0x8f4202f0, 0x8f42002c, 0xa34005b2,
+0xaf420038, 0x3c010001, 0x370821, 0xa02040f1,
+0x3c010001, 0x370821, 0xa02040f0, 0xaf400034,
+0x8f420304, 0x24420001, 0xaf420304, 0x10000077,
+0x8f420304, 0x10400025, 0x32427000, 0x8e25001c,
+0x8f420028, 0xa22023, 0x4810003, 0x0,
+0x8f420040, 0x822021, 0x8f420348, 0x8f430000,
+0x441021, 0xaf420348, 0x8f42035c, 0xaf450028,
+0x441021, 0x10600007, 0xaf42035c, 0xaf80004c,
+0x8f82004c, 0x1040fffd, 0x0, 0x10000005,
+0x0, 0xaf800048, 0x8f820048, 0x1040fffd,
+0x0, 0x8f820060, 0x34420008, 0xaf820060,
+0x8f420000, 0x10400003, 0x0, 0x10000053,
+0xaf80004c, 0x10000051, 0xaf800048, 0x1040002f,
+0x32421000, 0x1040000c, 0x32424000, 0x8e23001c,
+0x8f420050, 0x622023, 0x4820001, 0x24840200,
+0x8f42034c, 0x441021, 0xaf42034c, 0x8f420358,
+0x1000001a, 0xaf430050, 0x1040000c, 0x32c28000,
+0x8e23001c, 0x8f420070, 0x622023, 0x4820001,
+0x24840400, 0x8f420354, 0x441021, 0xaf420354,
+0x8f420358, 0x1000000d, 0xaf430070, 0x1040000e,
+0x3c020800, 0x8e23001c, 0x8f420060, 0x622023,
+0x4820001, 0x24840100, 0x8f420350, 0x441021,
+0xaf420350, 0x8f420358, 0xaf430060, 0x441021,
+0xaf420358, 0x3c020800, 0x2c21024, 0x50400023,
+0x36940040, 0x10000021, 0x0, 0x32420048,
+0x10400007, 0x24150001, 0x8e22001c, 0x3c03ffff,
+0x43f024, 0x3042ffff, 0x1000fd81, 0xae22001c,
+0x32420100, 0x10400015, 0x0, 0x3c020001,
+0x8c423c54, 0x1040000c, 0x0, 0x274301b0,
+0x24650400, 0x65102b, 0x10400007, 0x26e40028,
+0x8c820000, 0xac620000, 0x24630004, 0x65102b,
+0x1440fffb, 0x24840004, 0x8f4202cc, 0xa34005b6,
+0x24420001, 0xaf4202cc, 0x8f4202cc, 0x8fbf0050,
+0x8fbe004c, 0x8fb50048, 0x8fb30044, 0x8fb20040,
+0x8fb1003c, 0x8fb00038, 0x3e00008, 0x27bd0058,
+0x3e00008, 0x0, 0x0, 0x8f8600e4,
+0x8f8200e0, 0x2403fff8, 0x431024, 0x10c20007,
+0x803821, 0x8cc20000, 0x8cc30004, 0xace20000,
+0xace30004, 0x10000002, 0x24020001, 0x1021,
+0x3e00008, 0x0, 0x3e00008, 0x0,
+0x8f8300e4, 0x27623ff8, 0x14620002, 0x24620008,
+0x27623000, 0x401821, 0xaf8300e8, 0xaf8300e4,
+0x3e00008, 0x0, 0x3e00008, 0x0,
+0x8f8400e0, 0x8f8800c4, 0x8f8300e8, 0x2402fff8,
+0x823824, 0xe32023, 0x2c821000, 0x50400001,
+0x24841000, 0x420c2, 0x801821, 0x8f440248,
+0x8f45024c, 0x1021, 0xa32821, 0xa3302b,
+0x822021, 0x862021, 0xaf440248, 0xaf45024c,
+0x8f8300c8, 0x8f42013c, 0x1032023, 0x82102b,
+0x14400004, 0x801821, 0x8f42013c, 0x822021,
+0x801821, 0x8f440240, 0x8f450244, 0x1021,
+0xa32821, 0xa3302b, 0x822021, 0x862021,
+0xaf440240, 0xaf450244, 0xaf8800c8, 0xaf8700e4,
+0xaf8700e8, 0x3e00008, 0x0, 0x27bdff30,
+0x240a0001, 0xafbf00c8, 0xafbe00c4, 0xafb500c0,
+0xafb300bc, 0xafb200b8, 0xafb100b4, 0xafb000b0,
+0xa3a00097, 0xafa00044, 0xafaa005c, 0x934205b5,
+0xa7a0008e, 0x1040000a, 0xa7a00086, 0x8f4b00c4,
+0xafab0064, 0x8f4a00c0, 0xafaa006c, 0x8f4b00cc,
+0xafab0074, 0x8f4a00c8, 0x10000125, 0xafaa007c,
+0x8f420114, 0x40f809, 0x27a40020, 0x304200ff,
+0x1040033b, 0x0, 0x8fab0024, 0x8faa0020,
+0x3162ffff, 0x2442fffc, 0xafa2006c, 0x3c020006,
+0x2c21024, 0xafab007c, 0x14400015, 0xafaa0064,
+0x91420000, 0x30420001, 0x10400011, 0x2402ffff,
+0x8d430000, 0x14620004, 0x3402ffff, 0x95430004,
+0x1062000b, 0x0, 0xc002343, 0x8fa40064,
+0x304200ff, 0x14400006, 0x0, 0x8f420118,
+0x40f809, 0x0, 0x1000031d, 0x0,
+0x8fa20024, 0x3c03ffbf, 0x3463ffff, 0x431024,
+0x3c03ffff, 0x431824, 0x14600003, 0xafa20024,
+0x10000040, 0x1821, 0x3c020080, 0x621024,
+0x10400007, 0x0, 0x8f42037c, 0x24420001,
+0xaf42037c, 0x8f42037c, 0x10000036, 0x24030001,
+0x8f420200, 0x24420001, 0xaf420200, 0x8f420200,
+0x3c020001, 0x621024, 0x10400006, 0x3c020002,
+0x8f4201b4, 0x24420001, 0xaf4201b4, 0x8f4201b4,
+0x3c020002, 0x621024, 0x10400006, 0x3c020004,
+0x8f42036c, 0x24420001, 0xaf42036c, 0x8f42036c,
+0x3c020004, 0x621024, 0x10400006, 0x3c020008,
+0x8f420370, 0x24420001, 0xaf420370, 0x8f420370,
+0x3c020008, 0x621024, 0x10400006, 0x3c020010,
+0x8f420374, 0x24420001, 0xaf420374, 0x8f420374,
+0x3c020010, 0x621024, 0x10400006, 0x3c020020,
+0x8f4201b0, 0x24420001, 0xaf4201b0, 0x8f4201b0,
+0x3c020020, 0x621024, 0x10400006, 0x24030001,
+0x8f420378, 0x24420001, 0xaf420378, 0x8f420378,
+0x24030001, 0x8c020260, 0x8fab006c, 0x4b102b,
+0x10400014, 0x307000ff, 0x8f4201d8, 0x24420001,
+0xaf4201d8, 0x8f4201d8, 0x8faa007c, 0x8f8200e0,
+0x354a0100, 0xafaa007c, 0xafa20010, 0x8f8200e4,
+0x24100001, 0x3c040001, 0x248438d0, 0xafa20014,
+0x8fa60020, 0x8fa70024, 0x3c050007, 0xc0029d3,
+0x34a50800, 0x12000010, 0x3c020080, 0x2c21024,
+0x1440000e, 0x32c20400, 0x8fab007c, 0x3c020080,
+0x34420100, 0x1621024, 0x10400005, 0x0,
+0x8f4201fc, 0x24420001, 0xaf4201fc, 0x8f4201fc,
+0x100002a0, 0x8fa3006c, 0x32c20400, 0x10400015,
+0x34028100, 0x8faa0064, 0x9543000c, 0x14620012,
+0x3c020100, 0x240b0200, 0xa7ab008e, 0x9542000e,
+0x8d430008, 0x8d440004, 0x8d450000, 0x8faa006c,
+0x8fab0064, 0x254afffc, 0xafaa006c, 0xa7a20086,
+0xad63000c, 0xad640008, 0xad650004, 0x256b0004,
+0xafab0064, 0x3c020100, 0x2c21024, 0x10400004,
+0x0, 0x8faa006c, 0x254a0004, 0xafaa006c,
+0x8f4200bc, 0x5040000a, 0xafa00074, 0x8fab006c,
+0x4b102b, 0x50400006, 0xafa00074, 0x8f4200bc,
+0x1621023, 0xafa20074, 0x8f4a00bc, 0xafaa006c,
+0x8f420080, 0x8fab006c, 0x4b102b, 0x10400056,
+0x32c28000, 0x1040005e, 0x240a0003, 0x32c21000,
+0x1040005b, 0xafaa005c, 0x10000058, 0x240b0004,
+0x8f420340, 0x2403ffbf, 0x283a024, 0x24420001,
+0xaf420340, 0x1000023f, 0x8f420340, 0x2c2b025,
+0x2402ffbf, 0x282a024, 0x8f830128, 0x3c040001,
+0x24843900, 0x26620001, 0xafa20014, 0xafa30010,
+0x8f860120, 0x8f870124, 0x3c050007, 0xc0029d3,
+0x34a52250, 0x1000022f, 0x0, 0x2c2b025,
+0x2402ffbf, 0x282a024, 0x8f830128, 0x3c040001,
+0x24843900, 0x24020002, 0xafa20014, 0xafa30010,
+0x8f860120, 0x8f870124, 0x3c050007, 0xc0029d3,
+0x34a52450, 0x1000021f, 0x0, 0x8ea20000,
+0x8ea30004, 0x3c040001, 0x24843918, 0xafb00010,
+0xafbe0014, 0x8ea70018, 0x34a52800, 0xc0029d3,
+0x603021, 0x10000213, 0x0, 0xa6b1000a,
+0x8f820124, 0x3c040001, 0x24843920, 0xafbe0014,
+0xafa20010, 0x8f460044, 0x8f870120, 0x3c050007,
+0xc0029d3, 0x34a53000, 0x10000206, 0x0,
+0xa6b1000a, 0xa6b2000e, 0x8f820124, 0x3c040001,
+0x2484392c, 0xafbe0014, 0xafa20010, 0x8f460044,
+0x8f870120, 0x3c050007, 0xc0029d3, 0x34a53200,
+0x100001f8, 0x0, 0x8f420084, 0x8faa006c,
+0x4a102b, 0x14400007, 0x3c020001, 0x2c21024,
+0x10400004, 0x0, 0x240b0002, 0xafab005c,
+0x8faa006c, 0x1140020b, 0x27ab0020, 0xafab00a4,
+0x3c0a001f, 0x354affff, 0xafaa009c, 0x8fab005c,
+0x240a0001, 0x156a0021, 0x24020002, 0x8f430054,
+0x8f420050, 0x1062000b, 0x274b0054, 0x8f5e0054,
+0x3403ecc0, 0xafab004c, 0x27c20001, 0x304201ff,
+0xafa20054, 0x1e1140, 0x431021, 0x1000006b,
+0x2e2a821, 0x8f420044, 0x8faa006c, 0x3c040001,
+0x248438dc, 0xafaa0014, 0xafa20010, 0x8f460054,
+0x8f470050, 0x3c050007, 0xc0029d3, 0x34a51300,
+0x8f430340, 0x2402ffbf, 0x282a024, 0x24630001,
+0xaf430340, 0x100001c3, 0x8f420340, 0x1562001d,
+0x0, 0x8f430074, 0x8f420070, 0x1062000a,
+0x274a0074, 0x8f5e0074, 0xafaa004c, 0x27c20001,
+0x304203ff, 0xafa20054, 0x1e1140, 0x24426cc0,
+0x1000004a, 0x2e2a821, 0x8f420044, 0x8fab006c,
+0x3c040001, 0x248438e8, 0x3c050007, 0xafab0014,
+0xafa20010, 0x8f460074, 0x8f470070, 0x34a51500,
+0x240a0001, 0xc0029d3, 0xafaa005c, 0x1000ffc3,
+0x0, 0x8f430064, 0x8f420060, 0x1062001a,
+0x274b0064, 0x8f5e0064, 0x8faa005c, 0xafab004c,
+0x27c20001, 0x304200ff, 0xafa20054, 0x24020004,
+0x1542000e, 0x1e1140, 0x1e1180, 0x24420cc0,
+0x2e21021, 0xafa20044, 0x9442002a, 0x8fab0044,
+0x8faa006c, 0x4a102b, 0x10400024, 0x25750020,
+0x240b0001, 0x10000021, 0xa3ab0097, 0x24424cc0,
+0x1000001e, 0x2e2a821, 0x8f420044, 0x8faa006c,
+0x3c040001, 0x248438f4, 0xafaa0014, 0xafa20010,
+0x8f460064, 0x8f470060, 0x3c050007, 0xc0029d3,
+0x34a51800, 0x3c020008, 0x2c21024, 0x1440ff34,
+0x0, 0x8f420360, 0x240b0001, 0xafab005c,
+0x24420001, 0xaf420360, 0x1000ff90, 0x8f420360,
+0x27a30036, 0x131040, 0x621821, 0x94620000,
+0x441021, 0x10000020, 0xa4620000, 0x8faa0064,
+0xaeaa0018, 0x93a20097, 0x10400072, 0x9821,
+0x8fab0044, 0x8fa4006c, 0x8fa300a4, 0x25620020,
+0xafa20028, 0x25620008, 0xafa20030, 0x25620010,
+0xafab002c, 0xafa20034, 0x9562002a, 0xa7a20038,
+0x95620018, 0xa7a2003a, 0x9562001a, 0xa7a2003c,
+0x9562001c, 0xa7a2003e, 0x94620018, 0x24630002,
+0x822023, 0x1880ffde, 0x26730001, 0x2e620004,
+0x1440fff9, 0x0, 0x8f4200fc, 0x26650001,
+0xa2102a, 0x1440002b, 0x24030001, 0x8f83012c,
+0x10600023, 0x0, 0x8f820124, 0x431023,
+0x22143, 0x58800001, 0x24840040, 0x8f820128,
+0x431023, 0x21943, 0x58600001, 0x24630040,
+0x64102a, 0x54400001, 0x602021, 0xaf4400fc,
+0x8f4200fc, 0xa2102a, 0x10400011, 0x24030001,
+0x10000015, 0x306200ff, 0x8faa0064, 0x96070018,
+0xafaa0010, 0x8e220008, 0x3c040001, 0x2484390c,
+0x8c430004, 0x8c420000, 0x34a52400, 0x2403021,
+0xc0029d3, 0xafa30014, 0x1000002b, 0x0,
+0x8f420324, 0x1821, 0x24420001, 0xaf420324,
+0x8f420324, 0x306200ff, 0x5040fedc, 0x3c020800,
+0x12600021, 0x9021, 0x8fb100a4, 0x2208021,
+0x8e220008, 0x96070018, 0x8fa60064, 0x8c440000,
+0x8c450004, 0x240b0001, 0xafab0010, 0xafbe0014,
+0x8f420008, 0xafa20018, 0x8f42010c, 0x40f809,
+0x0, 0x1040ffd8, 0x3c050007, 0x96020018,
+0x8faa0064, 0x8fab009c, 0x1425021, 0x16a102b,
+0x10400004, 0xafaa0064, 0x8f42013c, 0x1425023,
+0xafaa0064, 0x26100002, 0x26520001, 0x253102b,
+0x1440ffe3, 0x26310004, 0x8fb0006c, 0x10000036,
+0x97b10038, 0x8f4200fc, 0x24050002, 0xa2102a,
+0x1440001b, 0x24030001, 0x8f83012c, 0x10600013,
+0x0, 0x8f820124, 0x431023, 0x22143,
+0x58800001, 0x24840040, 0x8f820128, 0x431023,
+0x21943, 0x58600001, 0x24630040, 0x64102a,
+0x54400001, 0x602021, 0xaf4400fc, 0x8f4200fc,
+0xa2102a, 0x14400006, 0x24030001, 0x8f420324,
+0x1821, 0x24420001, 0xaf420324, 0x8f420324,
+0x306200ff, 0x1040fea5, 0x3c020800, 0x96b1000a,
+0x8fb0006c, 0x3223ffff, 0x70102b, 0x54400001,
+0x608021, 0x8ea40000, 0x8ea50004, 0x240a0001,
+0xafaa0010, 0xafbe0014, 0x8f420008, 0x8fa60064,
+0xafa20018, 0x8f42010c, 0x40f809, 0x2003821,
+0x1040fea2, 0x3c050007, 0x96a3000e, 0x97ab008e,
+0x11600007, 0x609021, 0x934205b5, 0x14400004,
+0x0, 0x97aa0086, 0x6b1825, 0xa6aa0016,
+0x8fab007c, 0x3c02ffff, 0x1621024, 0x10400003,
+0xb1402, 0x34630400, 0xa6a20014, 0x8faa006c,
+0x560a0072, 0xa6a3000e, 0x34620004, 0xa6a2000e,
+0x8fab0074, 0x14b1021, 0xa6a2000a, 0x8f430044,
+0x8f440190, 0x8f450194, 0x34028000, 0xafa20010,
+0x8f420044, 0x2a03021, 0x24070020, 0xafa20014,
+0x8f42000c, 0x31940, 0x604821, 0xafa20018,
+0x8f42010c, 0x4021, 0xa92821, 0xa9182b,
+0x882021, 0x40f809, 0x832021, 0x5040fe7f,
+0xa6b2000e, 0x8f420358, 0xafa0006c, 0xa34005b5,
+0x2442ffff, 0xaf420358, 0x8faa005c, 0x240b0001,
+0x8f420358, 0x154b0006, 0x24020002, 0x8f42034c,
+0x2442ffff, 0xaf42034c, 0x1000000c, 0x8f42034c,
+0x15420006, 0x0, 0x8f420354, 0x2442ffff,
+0xaf420354, 0x10000005, 0x8f420354, 0x8f420350,
+0x2442ffff, 0xaf420350, 0x8f420350, 0x8faa0054,
+0x8fab004c, 0xad6a0000, 0x8f420044, 0x8f440088,
+0x8f430078, 0x24420001, 0x441024, 0x24630001,
+0xaf420044, 0xaf430078, 0x8c020240, 0x62182b,
+0x14600065, 0x24070008, 0x8f440158, 0x8f45015c,
+0x8f430044, 0x8f48000c, 0x8f860120, 0x24020040,
+0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c,
+0x40f809, 0x24c6001c, 0x14400011, 0x240b0001,
+0x3c010001, 0x370821, 0xa02b40f2, 0x8f820124,
+0xafa20010, 0x8f820128, 0x3c040001, 0x248438c8,
+0xafa20014, 0x8f460044, 0x8f870120, 0x3c050009,
+0xc0029d3, 0x34a51300, 0x1000000b, 0x0,
+0x8f4202f4, 0x24420001, 0xaf4202f4, 0x8f4202f4,
+0x8f420044, 0xaf42007c, 0x3c010001, 0x370821,
+0xa02040f2, 0xaf400078, 0x8f420308, 0x24420001,
+0xaf420308, 0x10000038, 0x8f420308, 0xa6b0000a,
+0x8f430044, 0x8f440190, 0x8f450194, 0x34028000,
+0xafa20010, 0x8f420044, 0x2a03021, 0x24070020,
+0xafa20014, 0x8f42000c, 0x31940, 0x604821,
+0xafa20018, 0x8f42010c, 0x4021, 0xa92821,
+0xa9182b, 0x882021, 0x40f809, 0x832021,
+0x1040fe1f, 0x240a0001, 0xa34a05b5, 0x8fab006c,
+0x8faa0064, 0x1705823, 0xafab006c, 0x8fab009c,
+0x1505021, 0x16a102b, 0x10400004, 0xafaa0064,
+0x8f42013c, 0x1425023, 0xafaa0064, 0x8f420358,
+0x2442ffff, 0xaf420358, 0x8f420358, 0x8f42034c,
+0x2442ffff, 0xaf42034c, 0x8fab0054, 0x8faa004c,
+0x8f42034c, 0xad4b0000, 0x8f420044, 0x8f440088,
+0x8f430078, 0x24420001, 0x441024, 0x24630001,
+0xaf420044, 0xaf430078, 0x8faa006c, 0x1540fe1b,
+0x0, 0x8fab006c, 0x1160001e, 0x0,
+0x934205b5, 0x10400009, 0x0, 0x8faa0064,
+0xaf4a00c4, 0xaf4b00c0, 0x8fab007c, 0xaf4b00c8,
+0x8faa0074, 0x1000000e, 0xaf4a00cc, 0x97ab008e,
+0x1160000b, 0x34038100, 0x8fa20020, 0x8c46000c,
+0xa443000c, 0x97aa0086, 0x8c440004, 0x8c450008,
+0xa44a000e, 0xac440000, 0xac450004, 0xac460008,
+0x8f42033c, 0x24420001, 0xaf42033c, 0x10000010,
+0x8f42033c, 0x8fab007c, 0x3164ffff, 0x2484fffc,
+0x801821, 0x8f440240, 0x8f450244, 0x8f460118,
+0x1021, 0xa32821, 0xa3382b, 0x822021,
+0x872021, 0xaf440240, 0xc0f809, 0xaf450244,
+0x8fbf00c8, 0x8fbe00c4, 0x8fb500c0, 0x8fb300bc,
+0x8fb200b8, 0x8fb100b4, 0x8fb000b0, 0x3e00008,
+0x27bd00d0, 0x3e00008, 0x0, 0x27bdff38,
+0x240b0001, 0xafbf00c0, 0xafbe00bc, 0xafb500b8,
+0xafb300b4, 0xafb200b0, 0xafb100ac, 0xafb000a8,
+0xa3a00087, 0xafa00044, 0xafab005c, 0x934205b5,
+0xa7a00076, 0x10400007, 0xa7a0007e, 0x8f4c00c0,
+0xafac0064, 0x8f4b00c8, 0x8f5e00c4, 0x10000129,
+0xafab006c, 0x8f420114, 0x40f809, 0x27a40020,
+0x304200ff, 0x1040029c, 0x0, 0x8fac0024,
+0x8fbe0020, 0x3182ffff, 0x2442fffc, 0xafa20064,
+0x3c020006, 0x2c21024, 0x14400015, 0xafac006c,
+0x93c20000, 0x30420001, 0x10400011, 0x2402ffff,
+0x8fc30000, 0x14620004, 0x3402ffff, 0x97c30004,
+0x1062000b, 0x0, 0xc002343, 0x3c02021,
+0x304200ff, 0x14400006, 0x0, 0x8f420118,
+0x40f809, 0x0, 0x1000027f, 0x0,
+0x8fa20024, 0x3c03ffbf, 0x3463ffff, 0x431024,
+0x3c03ffff, 0x431824, 0x14600003, 0xafa20024,
+0x10000040, 0x8021, 0x3c020080, 0x621024,
+0x10400007, 0x0, 0x8f42037c, 0x24420001,
+0xaf42037c, 0x8f42037c, 0x10000036, 0x24100001,
+0x8f420200, 0x24420001, 0xaf420200, 0x8f420200,
+0x3c020001, 0x621024, 0x10400006, 0x3c020002,
+0x8f4201b4, 0x24420001, 0xaf4201b4, 0x8f4201b4,
+0x3c020002, 0x621024, 0x10400006, 0x3c020004,
+0x8f42036c, 0x24420001, 0xaf42036c, 0x8f42036c,
+0x3c020004, 0x621024, 0x10400006, 0x3c020008,
+0x8f420370, 0x24420001, 0xaf420370, 0x8f420370,
+0x3c020008, 0x621024, 0x10400006, 0x3c020010,
+0x8f420374, 0x24420001, 0xaf420374, 0x8f420374,
+0x3c020010, 0x621024, 0x10400006, 0x3c020020,
+0x8f4201b0, 0x24420001, 0xaf4201b0, 0x8f4201b0,
+0x3c020020, 0x621024, 0x10400006, 0x24100001,
+0x8f420378, 0x24420001, 0xaf420378, 0x8f420378,
+0x24100001, 0x8c020260, 0x8fab0064, 0x4b102b,
+0x10400015, 0x320200ff, 0x8f4201d8, 0x24420001,
+0xaf4201d8, 0x8f4201d8, 0x8fac006c, 0x8f8200e0,
+0x358c0100, 0xafac006c, 0xafa20010, 0x8f8200e4,
+0x24100001, 0x3c040001, 0x248438d0, 0xafa20014,
+0x8fa60020, 0x8fa70024, 0x3c050007, 0xc0029d3,
+0x34a53600, 0x320200ff, 0x10400010, 0x3c020080,
+0x2c21024, 0x1440000e, 0x32c20400, 0x8fab006c,
+0x3c020080, 0x34420100, 0x1621024, 0x10400005,
+0x0, 0x8f4201fc, 0x24420001, 0xaf4201fc,
+0x8f4201fc, 0x10000201, 0x8fa30064, 0x32c20400,
+0x10400012, 0x34028100, 0x97c3000c, 0x1462000f,
+0x0, 0x240c0200, 0xa7ac0076, 0x97c2000e,
+0x8fc30008, 0x8fc40004, 0x8fab0064, 0x8fc50000,
+0x256bfffc, 0xafab0064, 0xa7a2007e, 0xafc3000c,
+0xafc40008, 0xafc50004, 0x27de0004, 0x8fa70064,
+0x320200ff, 0x14400031, 0x3c020100, 0x97c3000c,
+0x2c6205dd, 0x10400015, 0x2821, 0x32c20800,
+0x10400015, 0x24020800, 0x97c30014, 0x14620012,
+0x3402aaaa, 0x97c3000e, 0x14620007, 0x2021,
+0x97c30010, 0x24020300, 0x14620004, 0x801021,
+0x97c20012, 0x2c440001, 0x801021, 0x54400006,
+0x24050016, 0x10000004, 0x0, 0x24020800,
+0x50620001, 0x2405000e, 0x10a00013, 0x3c52021,
+0x24830009, 0x3c02001f, 0x3442ffff, 0x43102b,
+0x10400003, 0x0, 0x8f42013c, 0x621823,
+0x90620000, 0x38430006, 0x2c630001, 0x38420011,
+0x2c420001, 0x621825, 0x10600004, 0x3c020100,
+0x94820002, 0x453821, 0x3c020100, 0x2c21024,
+0x5040000e, 0xafa70064, 0x8fac0064, 0x10ec0008,
+0x3c050007, 0x3c040001, 0x24843938, 0x8fa60064,
+0x34a54000, 0xafa00010, 0xc0029d3, 0xafa00014,
+0x8fab0064, 0x256b0004, 0xafab0064, 0x8f420080,
+0x8fac0064, 0x4c102b, 0x1040002c, 0x32c28000,
+0x10400034, 0x240b0003, 0x32c21000, 0x10400031,
+0xafab005c, 0x1000002e, 0x240c0004, 0x8f420340,
+0x2403ffbf, 0x283a024, 0x24420001, 0xaf420340,
+0x10000175, 0x8f420340, 0x3c020800, 0x2c2b025,
+0x2402ffbf, 0x282a024, 0x8f830128, 0x3c040001,
+0x24843900, 0x26620001, 0xafa20014, 0xafa30010,
+0x8f860120, 0x8f870124, 0x3c050007, 0xc0029d3,
+0x34a55300, 0x10000164, 0x0, 0x8ea20000,
+0x8ea30004, 0x3c040001, 0x24843918, 0xafb00010,
+0xafb20014, 0x8ea70018, 0x34a55900, 0xc0029d3,
+0x603021, 0x10000158, 0x0, 0x8f420084,
+0x8fab0064, 0x4b102b, 0x14400007, 0x3c020001,
+0x2c21024, 0x10400004, 0x0, 0x240c0002,
+0xafac005c, 0x8fab0064, 0x11600168, 0x27ac0020,
+0xafac008c, 0x8fab005c, 0x240c0001, 0x556c0021,
+0x240c0002, 0x8f430054, 0x8f420050, 0x1062000b,
+0x274b0054, 0x8f520054, 0x3403ecc0, 0xafab004c,
+0x26420001, 0x304201ff, 0xafa20054, 0x121140,
+0x431021, 0x1000006b, 0x2e2a821, 0x8f420044,
+0x8fac0064, 0x3c040001, 0x248438dc, 0xafac0014,
+0xafa20010, 0x8f460054, 0x8f470050, 0x3c050007,
+0xc0029d3, 0x34a54300, 0x8f430340, 0x2402ffbf,
+0x282a024, 0x24630001, 0xaf430340, 0x10000126,
+0x8f420340, 0x156c001d, 0x0, 0x8f430074,
+0x8f420070, 0x1062000a, 0x274b0074, 0x8f520074,
+0xafab004c, 0x26420001, 0x304203ff, 0xafa20054,
+0x121140, 0x24426cc0, 0x1000004a, 0x2e2a821,
+0x8f420044, 0x8fac0064, 0x3c040001, 0x248438e8,
+0x3c050007, 0xafac0014, 0xafa20010, 0x8f460074,
+0x8f470070, 0x34a54500, 0x240b0001, 0xc0029d3,
+0xafab005c, 0x1000ffc3, 0x0, 0x8f430064,
+0x8f420060, 0x1062001a, 0x274c0064, 0x8f520064,
+0x8fab005c, 0xafac004c, 0x26420001, 0x304200ff,
+0xafa20054, 0x24020004, 0x1562000e, 0x121140,
+0x121180, 0x24420cc0, 0x2e21021, 0xafa20044,
+0x9442002a, 0x8fac0044, 0x8fab0064, 0x4b102b,
+0x10400024, 0x25950020, 0x240c0001, 0x10000021,
+0xa3ac0087, 0x24424cc0, 0x1000001e, 0x2e2a821,
+0x8f420044, 0x8fab0064, 0x3c040001, 0x248438f4,
+0xafab0014, 0xafa20010, 0x8f460064, 0x8f470060,
+0x3c050007, 0xc0029d3, 0x34a54800, 0x3c020008,
+0x2c21024, 0x1440ff61, 0x0, 0x8f420360,
+0x240c0001, 0xafac005c, 0x24420001, 0xaf420360,
+0x1000ff90, 0x8f420360, 0x27a30036, 0x131040,
+0x621821, 0x94620000, 0x441021, 0x1000001f,
+0xa4620000, 0xaebe0018, 0x93a20087, 0x10400086,
+0x9821, 0x8fab0044, 0x8fa40064, 0x8fa3008c,
+0x25620020, 0xafa20028, 0x25620008, 0xafa20030,
+0x25620010, 0xafab002c, 0xafa20034, 0x9562002a,
+0xa7a20038, 0x95620018, 0xa7a2003a, 0x9562001a,
+0xa7a2003c, 0x9562001c, 0xa7a2003e, 0x94620018,
+0x24630002, 0x822023, 0x1880ffdf, 0x26730001,
+0x2e620004, 0x1440fff9, 0x0, 0x8f4200fc,
+0x262102a, 0x14400030, 0x24030001, 0x8f83012c,
+0x10600028, 0x0, 0x8f820124, 0x431023,
+0x22143, 0x58800001, 0x24840040, 0x8f820128,
+0x431023, 0x21943, 0x58600001, 0x24630040,
+0x64102a, 0x54400001, 0x602021, 0xaf4400fc,
+0x8f4200fc, 0x262102a, 0x10400016, 0x24030001,
+0x1000001a, 0x306200ff, 0x8fac008c, 0x111040,
+0x4c1021, 0x94470018, 0x111080, 0x4c1021,
+0xafbe0010, 0x8c420008, 0x3c040001, 0x2484390c,
+0x3c050007, 0x8c430004, 0x8c420000, 0x34a55500,
+0x2203021, 0xc0029d3, 0xafa30014, 0x1000003b,
+0x0, 0x8f420324, 0x1821, 0x24420001,
+0xaf420324, 0x8f420324, 0x306200ff, 0x1040ff06,
+0x8821, 0x8f430008, 0x2402fbff, 0x621824,
+0x605021, 0x1260002d, 0xaf430008, 0x2669ffff,
+0x8fb0008c, 0x3c0b4000, 0x24b4025, 0x2009021,
+0x8e420008, 0x96070018, 0x8c440000, 0x8c450004,
+0x56290004, 0x240b0001, 0x240c0002, 0x10000002,
+0xafac0010, 0xafab0010, 0x16200004, 0xafa80014,
+0x8f420008, 0x10000002, 0xafa20018, 0xafaa0018,
+0x8f42010c, 0x3c03021, 0xafa80098, 0xafa9009c,
+0x40f809, 0xafaa00a0, 0x8fa80098, 0x8fa9009c,
+0x8faa00a0, 0x1040ffc0, 0x3c02001f, 0x96030018,
+0x3442ffff, 0x3c3f021, 0x5e102b, 0x10400003,
+0x26100002, 0x8f42013c, 0x3c2f023, 0x26310001,
+0x233102b, 0x1440ffda, 0x26520004, 0x8fb00064,
+0x1000001a, 0x0, 0x96a3000a, 0x8fb00064,
+0x70102b, 0x54400001, 0x608021, 0x8ea40000,
+0x8ea50004, 0x8fab005c, 0x240c0002, 0xafac0010,
+0x934305b5, 0xb1700, 0x10600003, 0x2423025,
+0x3c020800, 0xc23025, 0xafa60014, 0x8f420008,
+0xafa20018, 0x8f42010c, 0x3c03021, 0x40f809,
+0x2003821, 0x1040fec9, 0x3c050007, 0x97ac0076,
+0x11800007, 0x96a3000e, 0x934205b5, 0x14400004,
+0x0, 0x97ab007e, 0x6c1825, 0xa6ab0016,
+0x8fac006c, 0x3c02ffff, 0x1821024, 0x10400003,
+0xc1402, 0x34630400, 0xa6a20014, 0xa6b0000a,
+0x8fab0064, 0x560b0006, 0x3d0f021, 0x34620004,
+0xafa00064, 0xa6a2000e, 0x1000000d, 0xa34005b5,
+0x8fac0064, 0x3c02001f, 0x3442ffff, 0x5e102b,
+0x1906023, 0xafac0064, 0xa6a3000e, 0x240b0001,
+0x10400003, 0xa34b05b5, 0x8f42013c, 0x3c2f023,
+0x8fab0054, 0x8fac004c, 0xad8b0000, 0x8fac0064,
+0x1580feb8, 0x0, 0x8fab0064, 0x1160001b,
+0x0, 0x934205b5, 0x10400006, 0x0,
+0xaf5e00c4, 0xaf4b00c0, 0x8fac006c, 0x1000000e,
+0xaf4c00c8, 0x97ab0076, 0x1160000b, 0x34038100,
+0x8fa20020, 0x8c46000c, 0xa443000c, 0x97ac007e,
+0x8c440004, 0x8c450008, 0xa44c000e, 0xac440000,
+0xac450004, 0xac460008, 0x8f42033c, 0x24420001,
+0xaf42033c, 0x10000010, 0x8f42033c, 0x8fab006c,
+0x3164ffff, 0x2484fffc, 0x801821, 0x8f440240,
+0x8f450244, 0x8f460118, 0x1021, 0xa32821,
+0xa3382b, 0x822021, 0x872021, 0xaf440240,
+0xc0f809, 0xaf450244, 0x8fbf00c0, 0x8fbe00bc,
+0x8fb500b8, 0x8fb300b4, 0x8fb200b0, 0x8fb100ac,
+0x8fb000a8, 0x3e00008, 0x27bd00c8, 0x3e00008,
+0x0, 0x27bdffd8, 0xafbf0024, 0xafb00020,
+0x8f43004c, 0x8f420048, 0x10620034, 0x0,
+0x8f430048, 0x8f42004c, 0x622023, 0x4820001,
+0x24840200, 0x8f430054, 0x8f42004c, 0x43102b,
+0x14400004, 0x24020200, 0x8f43004c, 0x10000005,
+0x431023, 0x8f420054, 0x8f43004c, 0x431023,
+0x2442ffff, 0x405021, 0x8a102a, 0x54400001,
+0x805021, 0x8f49004c, 0x8f48004c, 0x8f440178,
+0x8f45017c, 0x8f46004c, 0x24071000, 0xafa70010,
+0x84140, 0x1001821, 0x12a4821, 0x313001ff,
+0xafb00014, 0x8f470014, 0x1021, 0x63140,
+0xafa70018, 0xa32821, 0xa3382b, 0x822021,
+0x872021, 0x3402ecc0, 0xc23021, 0x8f420108,
+0x2e63021, 0x40f809, 0xa3940, 0x54400001,
+0xaf50004c, 0x8f43004c, 0x8f420048, 0x14620018,
+0x0, 0x8f420000, 0x10400007, 0x0,
+0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0,
+0x10000005, 0x0, 0xaf800048, 0x8f820048,
+0x1040fffd, 0x0, 0x8f820060, 0x2403fdff,
+0x431024, 0xaf820060, 0x8f420000, 0x10400003,
+0x0, 0x10000002, 0xaf80004c, 0xaf800048,
+0x8fbf0024, 0x8fb00020, 0x3e00008, 0x27bd0028,
+0x3e00008, 0x0, 0x27bdffd8, 0xafbf0024,
+0xafb00020, 0x8f43005c, 0x8f420058, 0x10620049,
+0x0, 0x8f430058, 0x8f42005c, 0x622023,
+0x4820001, 0x24840100, 0x8f430064, 0x8f42005c,
+0x43102b, 0x14400004, 0x24020100, 0x8f43005c,
+0x10000005, 0x431023, 0x8f420064, 0x8f43005c,
+0x431023, 0x2442ffff, 0x403821, 0x87102a,
+0x54400001, 0x803821, 0x8f42005c, 0x471021,
+0x305000ff, 0x32c21000, 0x10400015, 0x24082000,
+0x8f49005c, 0x8f440180, 0x8f450184, 0x8f46005c,
+0x73980, 0xafa80010, 0xafb00014, 0x8f480014,
+0x94980, 0x1201821, 0x1021, 0xa32821,
+0xa3482b, 0x822021, 0x892021, 0x63180,
+0xafa80018, 0x8f420108, 0x10000014, 0x24c60cc0,
+0x8f49005c, 0x8f440180, 0x8f450184, 0x8f46005c,
+0x73940, 0xafa80010, 0xafb00014, 0x8f480014,
+0x94940, 0x1201821, 0x1021, 0xa32821,
+0xa3482b, 0x822021, 0x892021, 0x63140,
+0xafa80018, 0x8f420108, 0x24c64cc0, 0x40f809,
+0x2e63021, 0x54400001, 0xaf50005c, 0x8f43005c,
+0x8f420058, 0x14620018, 0x0, 0x8f420000,
+0x10400007, 0x0, 0xaf80004c, 0x8f82004c,
+0x1040fffd, 0x0, 0x10000005, 0x0,
+0xaf800048, 0x8f820048, 0x1040fffd, 0x0,
+0x8f820060, 0x2403feff, 0x431024, 0xaf820060,
+0x8f420000, 0x10400003, 0x0, 0x10000002,
+0xaf80004c, 0xaf800048, 0x8fbf0024, 0x8fb00020,
+0x3e00008, 0x27bd0028, 0x3e00008, 0x0,
+0x27bdffd8, 0xafbf0024, 0xafb00020, 0x8f43006c,
+0x8f420068, 0x10620033, 0x0, 0x8f430068,
+0x8f42006c, 0x622023, 0x4820001, 0x24840400,
+0x8f430074, 0x8f42006c, 0x43102b, 0x14400004,
+0x24020400, 0x8f43006c, 0x10000005, 0x431023,
+0x8f420074, 0x8f43006c, 0x431023, 0x2442ffff,
+0x405021, 0x8a102a, 0x54400001, 0x805021,
+0x8f49006c, 0x8f48006c, 0x8f440188, 0x8f45018c,
+0x8f46006c, 0x24074000, 0xafa70010, 0x84140,
+0x1001821, 0x12a4821, 0x313003ff, 0xafb00014,
+0x8f470014, 0x1021, 0x63140, 0x24c66cc0,
+0xafa70018, 0xa32821, 0xa3382b, 0x822021,
+0x872021, 0x8f420108, 0x2e63021, 0x40f809,
+0xa3940, 0x54400001, 0xaf50006c, 0x8f43006c,
+0x8f420068, 0x14620018, 0x0, 0x8f420000,
+0x10400007, 0x0, 0xaf80004c, 0x8f82004c,
+0x1040fffd, 0x0, 0x10000005, 0x0,
+0xaf800048, 0x8f820048, 0x1040fffd, 0x0,
+0x8f820060, 0x2403f7ff, 0x431024, 0xaf820060,
+0x8f420000, 0x10400003, 0x0, 0x10000002,
+0xaf80004c, 0xaf800048, 0x8fbf0024, 0x8fb00020,
+0x3e00008, 0x27bd0028, 0x3e00008, 0x0,
+0x8f4200fc, 0x3c030001, 0x8f4400f8, 0x346330c8,
+0x24420001, 0xaf4200fc, 0x8f850128, 0x2e31021,
+0x54820004, 0x24820008, 0x3c020001, 0x34422ec8,
+0x2e21021, 0x401821, 0xaf4300f8, 0xac600000,
+0x8f4200f4, 0x14620004, 0x3c020001, 0x24a20020,
+0x1000000f, 0xaf820128, 0x8f4300f8, 0x344230c8,
+0x2e21021, 0x54620004, 0x24620008, 0x3c020001,
+0x34422ec8, 0x2e21021, 0x401821, 0x8c620004,
+0x21140, 0xa21021, 0xaf820128, 0xac600000,
+0x8ca30018, 0x30620070, 0x1040002d, 0x30620020,
+0x10400004, 0x3c020010, 0x2c21024, 0x1040000d,
+0x0, 0x30620040, 0x10400004, 0x3c020020,
+0x2c21024, 0x10400007, 0x0, 0x30620010,
+0x1040001f, 0x3c020040, 0x2c21024, 0x1440001c,
+0x0, 0x8f820040, 0x30420001, 0x14400008,
+0x2021, 0x8c030104, 0x24020001, 0x50620005,
+0x24040001, 0x8c020264, 0x10400003, 0x801021,
+0x24040001, 0x801021, 0x10400006, 0x0,
+0x8f4202fc, 0x24420001, 0xaf4202fc, 0x10000008,
+0x8f4202fc, 0x8f820044, 0x34420004, 0xaf820044,
+0x8f4202f8, 0x24420001, 0xaf4202f8, 0x8f4202f8,
+0x3e00008, 0x0, 0x3e00008, 0x0,
+0x27bdffa0, 0xafbf0058, 0xafbe0054, 0xafb50050,
+0xafb3004c, 0xafb20048, 0xafb10044, 0xafb00040,
+0x8f4200fc, 0x24420001, 0xaf4200fc, 0x8f880128,
+0x25020020, 0xaf820128, 0x8d030018, 0x30620070,
+0x1040002e, 0x30620020, 0x10400004, 0x3c020010,
+0x2c21024, 0x1040000d, 0x0, 0x30620040,
+0x10400004, 0x3c020020, 0x2c21024, 0x10400007,
+0x0, 0x30620010, 0x10400193, 0x3c020040,
+0x2c21024, 0x14400190, 0x0, 0x8f820040,
+0x30420001, 0x14400008, 0x2021, 0x8c030104,
+0x24020001, 0x50620005, 0x24040001, 0x8c020264,
+0x10400003, 0x801021, 0x24040001, 0x801021,
+0x10400006, 0x0, 0x8f4202fc, 0x24420001,
+0xaf4202fc, 0x1000017c, 0x8f4202fc, 0x8f820044,
+0x34420004, 0xaf820044, 0x8f4202f8, 0x24420001,
+0xaf4202f8, 0x10000174, 0x8f4202f8, 0x30620002,
+0x10400135, 0x3c020800, 0x8d0a001c, 0x1422024,
+0xafaa0024, 0xa5702, 0xafaa0034, 0x8faa0024,
+0x314affff, 0xafaa0024, 0x950a0016, 0xafaa002c,
+0x8faa0034, 0x24020001, 0x15420007, 0x24020002,
+0x8faa0024, 0xa1140, 0x3403ecc0, 0x431021,
+0x10000014, 0x2e2a821, 0x15420006, 0x24020003,
+0x8faa0024, 0xa1140, 0x24426cc0, 0x1000000d,
+0x2e2a821, 0x8faa0034, 0x15420006, 0x0,
+0x8faa0024, 0xa1140, 0x24424cc0, 0x10000005,
+0x2e2a821, 0x8faa0024, 0xa1180, 0x571021,
+0x24550ce0, 0x96a2000e, 0x305efffc, 0x30420400,
+0x144000c5, 0x8821, 0x10800004, 0x24091000,
+0x97b1002e, 0x100000c1, 0x0, 0x8eb30018,
+0x9663000c, 0x2c6205dd, 0x10400015, 0x2021,
+0x32c20800, 0x10400015, 0x24020800, 0x96630014,
+0x14620012, 0x3402aaaa, 0x9663000e, 0x14620007,
+0x2821, 0x96630010, 0x24020300, 0x14620004,
+0xa01021, 0x96620012, 0x2c450001, 0xa01021,
+0x54400006, 0x24040016, 0x10000004, 0x0,
+0x24020800, 0x50620001, 0x2404000e, 0x108000a2,
+0x2649021, 0x92420000, 0x3042000f, 0x28080,
+0x32c20100, 0x1040001e, 0x2501821, 0x3c020020,
+0x43102b, 0x1440000e, 0x2402021, 0x2821,
+0x94820000, 0x24840002, 0xa22821, 0x83102b,
+0x1440fffb, 0x30a2ffff, 0x51c02, 0x622821,
+0x51c02, 0x30a2ffff, 0x10000009, 0x622821,
+0x8f47013c, 0x8f420110, 0x102842, 0x3c060020,
+0x40f809, 0xafa80038, 0x3045ffff, 0x8fa80038,
+0x50a00001, 0x3405ffff, 0x10000002, 0x37de0002,
+0x2821, 0x32c20080, 0x1040007b, 0xa6a50010,
+0x26430009, 0x3c02001f, 0x3442ffff, 0x43102b,
+0x10400003, 0x0, 0x8f42013c, 0x621823,
+0x90660000, 0x30c200ff, 0x38430006, 0x2c630001,
+0x38420011, 0x2c420001, 0x621825, 0x1060006b,
+0x24091000, 0x8821, 0x2602021, 0x94820000,
+0x24840002, 0x2228821, 0x92102b, 0x1440fffb,
+0x111c02, 0x3222ffff, 0x628821, 0x111c02,
+0x3222ffff, 0x628821, 0x32c20200, 0x10400003,
+0x26440006, 0x1000003e, 0x8021, 0x3c05001f,
+0x34a5ffff, 0xa4102b, 0x10400003, 0x0,
+0x8f42013c, 0x822023, 0x94820000, 0x30421fff,
+0x10400004, 0x2644000c, 0x96420002, 0x10000030,
+0x508023, 0x96420002, 0x26430014, 0x508023,
+0x3c020020, 0x43102b, 0x1440000a, 0xd08021,
+0x9642000c, 0x2028021, 0x9642000e, 0x96430010,
+0x96440012, 0x2028021, 0x2038021, 0x10000020,
+0x2048021, 0xa4102b, 0x10400003, 0x0,
+0x8f42013c, 0x822023, 0x94820000, 0x24840002,
+0x2028021, 0xa4102b, 0x10400003, 0x0,
+0x8f42013c, 0x822023, 0x94820000, 0x24840002,
+0x2028021, 0xa4102b, 0x10400003, 0x0,
+0x8f42013c, 0x822023, 0x94820000, 0x24840002,
+0x2028021, 0xa4102b, 0x10400003, 0x0,
+0x8f42013c, 0x822023, 0x94820000, 0x2028021,
+0x3c020100, 0x2c21024, 0x1040000c, 0x33c20004,
+0x1040000a, 0x0, 0x9504000e, 0x2642021,
+0xc003cc8, 0x2484fffc, 0x3042ffff, 0x2228821,
+0x111c02, 0x3222ffff, 0x628821, 0x8faa002c,
+0x1518823, 0x111402, 0x2228821, 0x2308821,
+0x111402, 0x2228821, 0x3231ffff, 0x52200001,
+0x3411ffff, 0x37de0001, 0x24091000, 0x33c20004,
+0xa6b10012, 0x10400002, 0xa6be000e, 0x34098000,
+0x8f480044, 0x8f440190, 0x8f450194, 0xafa90010,
+0x8f490044, 0x84140, 0x1001821, 0xafa90014,
+0x8f48000c, 0x2a03021, 0x24070020, 0xafa80018,
+0x8f48010c, 0x1021, 0xa32821, 0xa3482b,
+0x822021, 0x100f809, 0x892021, 0x1440000c,
+0x0, 0x8f820128, 0x8faa0024, 0x3c040001,
+0x24843944, 0xafaa0014, 0xafa20010, 0x8f860124,
+0x8f870120, 0x3c050007, 0xc0029d3, 0x34a59920,
+0x8f420358, 0x2442ffff, 0xaf420358, 0x8f420044,
+0x8f430088, 0x24420001, 0x431024, 0xaf420044,
+0x8faa0034, 0x8f440358, 0x24020001, 0x15420006,
+0x24020002, 0x8f42034c, 0x2442ffff, 0xaf42034c,
+0x10000049, 0x8f42034c, 0x15420006, 0x0,
+0x8f420354, 0x2442ffff, 0xaf420354, 0x10000042,
+0x8f420354, 0x8f420350, 0x2442ffff, 0xaf420350,
+0x1000003d, 0x8f420350, 0x30621000, 0x10400005,
+0x30628000, 0x8f420078, 0x24420001, 0x10000036,
+0xaf420078, 0x10400034, 0x0, 0x8f420078,
+0x24420001, 0xaf420078, 0x8c030240, 0x43102b,
+0x1440002d, 0x24070008, 0x8f440158, 0x8f45015c,
+0x8f430044, 0x8f48000c, 0x8f860120, 0x24020040,
+0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c,
+0x40f809, 0x24c6001c, 0x14400011, 0x24020001,
+0x3c010001, 0x370821, 0xa02240f2, 0x8f820124,
+0xafa20010, 0x8f820128, 0x3c040001, 0x248438c8,
+0xafa20014, 0x8f460044, 0x8f870120, 0x3c050009,
+0xc0029d3, 0x34a51300, 0x1000000b, 0x0,
+0x8f4202f4, 0x24420001, 0xaf4202f4, 0x8f4202f4,
+0x8f420044, 0xaf42007c, 0x3c010001, 0x370821,
+0xa02040f2, 0xaf400078, 0x8f420308, 0x24420001,
+0xaf420308, 0x8f420308, 0x8fbf0058, 0x8fbe0054,
+0x8fb50050, 0x8fb3004c, 0x8fb20048, 0x8fb10044,
+0x8fb00040, 0x3e00008, 0x27bd0060, 0x3e00008,
+0x0, 0x0, 0x0, 0x8f420130,
+0xaf8200c0, 0x8f420130, 0xaf8200c4, 0x8f420130,
+0xaf8200c8, 0x8f42012c, 0xaf8200d0, 0x8f42012c,
+0xaf8200d4, 0x8f42012c, 0x3e00008, 0xaf8200d8,
+0x27bdffe0, 0x27840208, 0x24050200, 0xafbf0018,
+0xc002a57, 0x24060008, 0x8c020204, 0xc003dee,
+0xaf820210, 0x2021, 0x8c060248, 0x24020004,
+0x3c010001, 0xac223d18, 0xc004878, 0x24050004,
+0x3c020001, 0x8c423d14, 0x30420001, 0x10400007,
+0x24020001, 0x3c010001, 0xac223d18, 0x2021,
+0x24050001, 0xc004878, 0x3c06601b, 0x3c040001,
+0x24843a00, 0x8f420144, 0x8f430148, 0x3c050008,
+0x8f46014c, 0x21640, 0x31940, 0x34630403,
+0x431025, 0x633c0, 0x461025, 0xaf82021c,
+0xafa00010, 0xafa00014, 0x8f86021c, 0x34a50200,
+0xc0029d3, 0x3821, 0x3c010001, 0xac203d10,
+0x3c010001, 0xac203d28, 0x8fbf0018, 0x3e00008,
+0x27bd0020, 0x27bdffe0, 0x3c050008, 0x34a50300,
+0xafbf0018, 0xafa00010, 0xafa00014, 0x8f860200,
+0x3c040001, 0x24843a0c, 0xc0029d3, 0x3821,
+0x8f420400, 0x24420001, 0xaf420400, 0x8f420400,
+0x8fbf0018, 0x3e00008, 0x27bd0020, 0x27bdffd8,
+0xafbf0020, 0xafb1001c, 0xafb00018, 0x8f420394,
+0x24420001, 0xaf420394, 0x8f420394, 0x8f900220,
+0x8f4303a8, 0x3c020001, 0x8c423d28, 0x3c040001,
+0x24843a18, 0x3c050008, 0xafa20014, 0xafa30010,
+0x8f4703ac, 0x34a50400, 0xc0029d3, 0x2003021,
+0x3c024000, 0x2021024, 0x104000e1, 0x3c040100,
+0x8f4203ac, 0x24420001, 0xaf4203ac, 0x8f4203ac,
+0x8f820220, 0x3c0308ff, 0x3463ffff, 0x431024,
+0x34420004, 0xaf820220, 0x8f8200e0, 0x8f8300c4,
+0x3c02001f, 0x3442ffff, 0x24690008, 0x49102b,
+0x10400003, 0x0, 0x8f42013c, 0x1224823,
+0x8f8700c8, 0x8f840120, 0x8f830124, 0x10000005,
+0x5821, 0x8f42012c, 0x62102b, 0x50400001,
+0x27634800, 0x1083000d, 0x316200ff, 0x8c620018,
+0x2442ffff, 0x2c420002, 0x5040fff6, 0x24630020,
+0x8f4203c0, 0x240b0001, 0x24420001, 0xaf4203c0,
+0x8f4203c0, 0x8c670008, 0x316200ff, 0x14400078,
+0x0, 0x934205b5, 0x14400075, 0x0,
+0x8f8500e4, 0x8f8200e0, 0x2403fff8, 0x433024,
+0xc51023, 0x218c3, 0x4620001, 0x24630100,
+0x8f8a00c4, 0x10600005, 0x24020001, 0x10620009,
+0x0, 0x10000021, 0x0, 0x8f4203b0,
+0x1403821, 0x24420001, 0xaf4203b0, 0x10000060,
+0x8f4203b0, 0x8f4203b4, 0x24420001, 0xaf4203b4,
+0x8ca70000, 0x8f42013c, 0x8f4303b4, 0x1471823,
+0x43102b, 0x10400004, 0x2c62233f, 0x8f42013c,
+0x621821, 0x2c62233f, 0x14400051, 0x3c020100,
+0xaca20004, 0x8f8200e8, 0x24420008, 0xaf8200e8,
+0x8f8200e8, 0x8f8200e4, 0x1403821, 0x24420008,
+0xaf8200e4, 0x10000046, 0x8f8200e4, 0x8f4203b8,
+0x24420001, 0xaf4203b8, 0x8ca80000, 0x8f42013c,
+0x8f4303b8, 0x1092023, 0x44102b, 0x10400003,
+0x0, 0x8f42013c, 0x822021, 0x8f420140,
+0x44102b, 0x10400003, 0x3c030100, 0x10000034,
+0x1003821, 0x8ca20004, 0x431025, 0xaca20004,
+0x8f8200e4, 0x24450008, 0xaf8500e4, 0x8f8500e4,
+0x10a60025, 0x3c080100, 0x8f4201fc, 0x24420001,
+0xaf4201fc, 0x8ca20004, 0x8f4301fc, 0x481024,
+0x1440000e, 0x0, 0x8ca30000, 0x8f42013c,
+0x692023, 0x44102b, 0x10400003, 0x0,
+0x8f42013c, 0x822021, 0x8f420140, 0x44102b,
+0x10400006, 0x0, 0x603821, 0x8f420140,
+0x44102b, 0x1440000a, 0x0, 0x8ca20004,
+0x481025, 0xaca20004, 0x8f8200e4, 0x24450008,
+0xaf8500e4, 0x8f8500e4, 0x14a6ffdf, 0x0,
+0x14a60005, 0x0, 0x1403821, 0xaf8600e4,
+0x10000003, 0xaf8600e8, 0xaf8500e4, 0xaf8500e8,
+0x8f8300c8, 0x8f42013c, 0x692023, 0x44102b,
+0x10400003, 0x0, 0x8f42013c, 0x822021,
+0x8f420140, 0x82102b, 0x50400008, 0x5821,
+0x8f42013c, 0xe92023, 0x44102b, 0x10400003,
+0x0, 0x8f42013c, 0x822021, 0x8f420140,
+0x82102b, 0x10400006, 0x316200ff, 0x1440001b,
+0x3c02fdff, 0x934205b5, 0x14400018, 0x3c02fdff,
+0xaf8700c8, 0x8f8400c8, 0x8f8300c4, 0x8f42013c,
+0x832023, 0x44102b, 0x10400003, 0x0,
+0x8f42013c, 0x822021, 0x8f420140, 0x2c830001,
+0x44102b, 0x431025, 0x50400008, 0x3c02fdff,
+0x8f820220, 0x3c0308ff, 0x3463fffb, 0x431024,
+0x3c034000, 0x10000046, 0x431025, 0x3442ffff,
+0x8f4303bc, 0x282a024, 0x24020001, 0xa34205b1,
+0x24630001, 0xaf4303bc, 0x1000003e, 0x8f4203bc,
+0x2041024, 0x10400013, 0x3c110200, 0x8f420398,
+0x24420001, 0xaf420398, 0x8f420398, 0x8f820220,
+0x3c0308ff, 0x3463ffff, 0x431024, 0x441025,
+0xaf820220, 0x3c020004, 0x2021024, 0x14400005,
+0x3c110200, 0xc003bad, 0x0, 0x10000029,
+0x0, 0x2111024, 0x50400008, 0x3c110400,
+0x8f42039c, 0x24420001, 0xaf42039c, 0xc003bad,
+0x8f42039c, 0x10000019, 0x0, 0x2111024,
+0x1040001c, 0x0, 0x8f830224, 0x24021402,
+0x14620009, 0x3c050008, 0x3c040001, 0x24843a24,
+0xafa00010, 0xafa00014, 0x8f860224, 0x34a50500,
+0xc0029d3, 0x3821, 0x8f4203a0, 0x24420001,
+0xaf4203a0, 0x8f4203a0, 0x8f820220, 0x2002021,
+0x34420002, 0xc004610, 0xaf820220, 0x8f820220,
+0x3c0308ff, 0x3463ffff, 0x431024, 0x511025,
+0xaf820220, 0x8fbf0020, 0x8fb1001c, 0x8fb00018,
+0x3e00008, 0x27bd0028, 0x3e00008, 0x0,
+0x3c020001, 0x8c423d28, 0x27bdffb0, 0xafbf0048,
+0xafbe0044, 0xafb50040, 0xafb3003c, 0xafb20038,
+0xafb10034, 0x1040000f, 0xafb00030, 0x3c040001,
+0x24843a30, 0x3c050008, 0xafa00010, 0xafa00014,
+0x8f860220, 0x34a50600, 0x24020001, 0x3c010001,
+0xac203d28, 0x3c010001, 0xac223d1c, 0xc0029d3,
+0x3821, 0x3c037fff, 0x8c020268, 0x3463ffff,
+0x3c04fdff, 0x431024, 0xac020268, 0x8f420004,
+0x3484ffff, 0x30420002, 0x10400092, 0x284a024,
+0x3c040600, 0x34842000, 0x8f420004, 0x2821,
+0x2403fffd, 0x431024, 0xaf420004, 0xafa40020,
+0x8f5e0018, 0x27aa0020, 0x240200ff, 0x13c20002,
+0xafaa002c, 0x27c50001, 0x8c020228, 0xa09021,
+0x1642000e, 0x1e38c0, 0x8f42032c, 0x24420001,
+0xaf42032c, 0x8f42032c, 0x8c020228, 0x3c040001,
+0x248439c8, 0x3c050009, 0xafa00014, 0xafa20010,
+0x8fa60020, 0x1000006d, 0x34a50500, 0xf71021,
+0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4,
+0x8f830054, 0x8f820054, 0x247003e8, 0x2021023,
+0x2c4203e9, 0x1040001b, 0x9821, 0xe08821,
+0x263504c0, 0x8f440168, 0x8f45016c, 0x2201821,
+0x240a0004, 0xafaa0010, 0xafb20014, 0x8f48000c,
+0x1021, 0x2f53021, 0xafa80018, 0x8f48010c,
+0x24070008, 0xa32821, 0xa3482b, 0x822021,
+0x100f809, 0x892021, 0x54400006, 0x24130001,
+0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9,
+0x0, 0x326200ff, 0x54400017, 0xaf520018,
+0x8f420368, 0x24420001, 0xaf420368, 0x8f420368,
+0x8f820120, 0x8faa002c, 0xafa20010, 0x8f820124,
+0x3c040001, 0x248439d4, 0x3c050009, 0xafa20014,
+0x8d460000, 0x10000035, 0x34a50600, 0x8f4202f8,
+0x24130001, 0x24420001, 0xaf4202f8, 0x8f4202f8,
+0x1000001e, 0x326200ff, 0x8f830054, 0x8f820054,
+0x247003e8, 0x2021023, 0x2c4203e9, 0x10400016,
+0x9821, 0x3c150020, 0x24110010, 0x8f42000c,
+0x8f440150, 0x8f450154, 0x8f860120, 0xafb10010,
+0xafb20014, 0x551025, 0xafa20018, 0x8f42010c,
+0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe3,
+0x0, 0x8f820054, 0x2021023, 0x2c4203e9,
+0x1440ffee, 0x0, 0x326200ff, 0x14400011,
+0x0, 0x8f420368, 0x24420001, 0xaf420368,
+0x8f420368, 0x8f820120, 0x8faa002c, 0xafa20010,
+0x8f820124, 0x3c040001, 0x248439dc, 0x3c050009,
+0xafa20014, 0x8d460000, 0x34a50700, 0xc0029d3,
+0x3c03821, 0x8f4202dc, 0x24420001, 0xaf4202dc,
+0x8f4202dc, 0x8fbf0048, 0x8fbe0044, 0x8fb50040,
+0x8fb3003c, 0x8fb20038, 0x8fb10034, 0x8fb00030,
+0x3e00008, 0x27bd0050, 0x3c020001, 0x8c423d28,
+0x27bdffe0, 0x1440000d, 0xafbf0018, 0x3c040001,
+0x24843a3c, 0x3c050008, 0xafa00010, 0xafa00014,
+0x8f860220, 0x34a50700, 0x24020001, 0x3c010001,
+0xac223d28, 0xc0029d3, 0x3821, 0x3c020004,
+0x2c21024, 0x10400008, 0x2021, 0x8f820220,
+0x3c0308ff, 0x3463ffff, 0x431024, 0x34420008,
+0xaf820220, 0x2021, 0xc004981, 0x24050004,
+0xac020268, 0x8fbf0018, 0x3e00008, 0x27bd0020,
+0x0, 0x0, 0x0, 0x86102b,
+0x50400001, 0x872023, 0xc41023, 0x24843,
+0x125102b, 0x1040001b, 0x91040, 0x824021,
+0x88102b, 0x10400007, 0x1821, 0x94820000,
+0x24840002, 0x621821, 0x88102b, 0x1440fffb,
+0x0, 0x602021, 0xc73023, 0xa91023,
+0x21040, 0xc22821, 0xc5102b, 0x10400007,
+0x1821, 0x94c20000, 0x24c60002, 0x621821,
+0xc5102b, 0x1440fffb, 0x0, 0x1000000d,
+0x832021, 0x51040, 0x822821, 0x85102b,
+0x10400007, 0x1821, 0x94820000, 0x24840002,
+0x621821, 0x85102b, 0x1440fffb, 0x0,
+0x602021, 0x41c02, 0x3082ffff, 0x622021,
+0x41c02, 0x3082ffff, 0x622021, 0x3e00008,
+0x3082ffff, 0x3e00008, 0x0, 0x802821,
+0x30a20001, 0x1040002b, 0x3c03001f, 0x3463ffff,
+0x24a20004, 0x62102b, 0x54400007, 0x65102b,
+0x90a20001, 0x90a40003, 0x90a30000, 0x90a50002,
+0x1000002a, 0x441021, 0x10400003, 0x0,
+0x8f42013c, 0xa22823, 0x90a40000, 0x24a50001,
+0x65102b, 0x10400003, 0x0, 0x8f42013c,
+0xa22823, 0x90a20000, 0x24a50001, 0x21200,
+0x822021, 0x65102b, 0x10400003, 0x0,
+0x8f42013c, 0xa22823, 0x90a20000, 0x24a50001,
+0x822021, 0x65102b, 0x10400003, 0x0,
+0x8f42013c, 0xa22823, 0x90a20000, 0x1000002d,
+0x21200, 0x3463ffff, 0x24a20004, 0x62102b,
+0x5440000a, 0x65102b, 0x90a20000, 0x90a40002,
+0x90a30001, 0x90a50003, 0x441021, 0x21200,
+0x651821, 0x10000020, 0x432021, 0x10400003,
+0x0, 0x8f42013c, 0xa22823, 0x90a20000,
+0x24a50001, 0x22200, 0x65102b, 0x10400003,
+0x0, 0x8f42013c, 0xa22823, 0x90a20000,
+0x24a50001, 0x822021, 0x65102b, 0x10400003,
+0x0, 0x8f42013c, 0xa22823, 0x90a20000,
+0x24a50001, 0x21200, 0x822021, 0x65102b,
+0x10400003, 0x0, 0x8f42013c, 0xa22823,
+0x90a20000, 0x822021, 0x41c02, 0x3082ffff,
+0x622021, 0x41c02, 0x3082ffff, 0x622021,
+0x3e00008, 0x3082ffff, 0x0, 0x8f820220,
+0x34420002, 0xaf820220, 0x3c020001, 0x8c425f28,
+0x30424000, 0x10400054, 0x24040001, 0x8f820200,
+0x24067fff, 0x8f830200, 0x30450002, 0x2402fffd,
+0x621824, 0xaf830200, 0xaf840204, 0x8f830054,
+0x8f820054, 0x10000002, 0x24630001, 0x8f820054,
+0x621023, 0x2c420002, 0x1440fffc, 0x0,
+0x8f820224, 0x1444004d, 0x42040, 0xc4102b,
+0x1040fff1, 0x0, 0x8f820200, 0x451025,
+0xaf820200, 0x8f820220, 0x34428000, 0xaf820220,
+0x8f830054, 0x8f820054, 0x10000002, 0x24630001,
+0x8f820054, 0x621023, 0x2c420002, 0x1440fffc,
+0x0, 0x8f820220, 0x3c030004, 0x431024,
+0x1440000f, 0x0, 0x8f820220, 0x3c03ffff,
+0x34637fff, 0x431024, 0xaf820220, 0x8f830054,
+0x8f820054, 0x10000002, 0x24630001, 0x8f820054,
+0x621023, 0x2c420002, 0x1440fffc, 0x0,
+0x8f820220, 0x3c030004, 0x431024, 0x1440000d,
+0x0, 0x8f820220, 0x34428000, 0xaf820220,
+0x8f830054, 0x8f820054, 0x10000002, 0x24630001,
+0x8f820054, 0x621023, 0x2c420002, 0x1440fffc,
+0x0, 0x8f820220, 0x3c030004, 0x431024,
+0x1040001b, 0x1021, 0x8f830220, 0x24020001,
+0x10000015, 0x3c04f700, 0x8f820220, 0x3c04f700,
+0x441025, 0xaf820220, 0x8f820220, 0x2403fffd,
+0x431024, 0xaf820220, 0x8f820220, 0x3c030300,
+0x431024, 0x14400003, 0x0, 0x10000008,
+0x1021, 0x8f820220, 0x34420002, 0xaf820220,
+0x8f830220, 0x24020001, 0x641825, 0xaf830220,
+0x3e00008, 0x0, 0x2021, 0x3c050100,
+0x24020001, 0xaf80021c, 0xaf820200, 0xaf820220,
+0x27625000, 0xaf8200c0, 0x27625000, 0xaf8200c4,
+0x27625000, 0xaf8200c8, 0x27625000, 0xaf8200d0,
+0x27625000, 0xaf8200d4, 0x27625000, 0xaf8200d8,
+0x27623000, 0xaf8200e0, 0x27623000, 0xaf8200e4,
+0x27623000, 0xaf8200e8, 0x27622800, 0xaf8200f0,
+0x27622800, 0xaf8200f4, 0x27622800, 0xaf8200f8,
+0x418c0, 0x24840001, 0x3631021, 0xac453004,
+0x3631021, 0xac403000, 0x28820200, 0x1440fff9,
+0x418c0, 0x2021, 0x418c0, 0x24840001,
+0x3631021, 0xac402804, 0x3631021, 0xac402800,
+0x28820100, 0x1440fff9, 0x418c0, 0xaf80023c,
+0x24030080, 0x24040100, 0xac600000, 0x24630004,
+0x64102b, 0x5440fffd, 0xac600000, 0x8f830040,
+0x3c02f000, 0x621824, 0x3c025000, 0x1062000c,
+0x43102b, 0x14400006, 0x3c026000, 0x3c024000,
+0x10620008, 0x24020800, 0x10000008, 0x0,
+0x10620004, 0x24020800, 0x10000004, 0x0,
+0x24020700, 0x3c010001, 0xac223d2c, 0x3e00008,
+0x0, 0x27bdffc8, 0xafbf0034, 0xafb20030,
+0xafb1002c, 0xafb00028, 0x3c010001, 0xc0045ed,
+0xac203d14, 0x24040001, 0x2821, 0x27a60020,
+0x34028000, 0xc00420a, 0xa7a20020, 0x8f830054,
+0x8f820054, 0x10000002, 0x24630064, 0x8f820054,
+0x621023, 0x2c420065, 0x1440fffc, 0x24040001,
+0x24050001, 0xc0041c8, 0x27a60020, 0x8f830054,
+0x8f820054, 0x10000002, 0x24630064, 0x8f820054,
+0x621023, 0x2c420065, 0x1440fffc, 0x24040001,
+0x24050001, 0xc0041c8, 0x27a60020, 0x8f830054,
+0x8f820054, 0x10000002, 0x24630064, 0x8f820054,
+0x621023, 0x2c420065, 0x1440fffc, 0x24040001,
+0x24050002, 0xc0041c8, 0x27a60018, 0x8f830054,
+0x8f820054, 0x10000002, 0x24630064, 0x8f820054,
+0x621023, 0x2c420065, 0x1440fffc, 0x24040001,
+0x24050003, 0xc0041c8, 0x27a6001a, 0x97a20020,
+0x10400029, 0x24020001, 0x3c020001, 0x8c423d14,
+0x97a30018, 0x34420001, 0x3c010001, 0xac223d14,
+0x24020015, 0x14620009, 0x0, 0x97a2001a,
+0x3843f423, 0x2c630001, 0x3842f430, 0x2c420001,
+0x621825, 0x14600018, 0x24020003, 0x97a30018,
+0x24027810, 0x14620014, 0x24020002, 0x97a3001a,
+0x24020001, 0x14620010, 0x24020002, 0x1000000e,
+0x24020004, 0x3c020001, 0x8c423d14, 0x34420008,
+0x3c010001, 0xac223d14, 0x10000058, 0x24020004,
+0x3c020001, 0x8c423d14, 0x34420004, 0x3c010001,
+0x100000a9, 0xac223d14, 0x3c010001, 0xac223e70,
+0x24020e00, 0xaf820238, 0x8f840054, 0x8f820054,
+0x24030008, 0x3c010001, 0xac233d18, 0x10000002,
+0x248401f4, 0x8f820054, 0x821023, 0x2c4201f5,
+0x1440fffc, 0x3c0200c8, 0x344201fb, 0xaf820238,
+0x8f830054, 0x8f820054, 0x10000002, 0x246301f4,
+0x8f820054, 0x621023, 0x2c4201f5, 0x1440fffc,
+0x8021, 0x24120001, 0x24110009, 0xc0040e8,
+0x0, 0x3c010001, 0xac323d30, 0xc004194,
+0x0, 0x3c020001, 0x8c423d30, 0x1451fffb,
+0x3c0200c8, 0x344201f6, 0xaf820238, 0x8f830054,
+0x8f820054, 0x10000002, 0x2463000a, 0x8f820054,
+0x621023, 0x2c42000b, 0x1440fffc, 0x0,
+0x8f820220, 0x24040001, 0x34420002, 0xaf820220,
+0x8f830200, 0x24057fff, 0x2402fffd, 0x621824,
+0xaf830200, 0xaf840204, 0x8f830054, 0x8f820054,
+0x10000002, 0x24630001, 0x8f820054, 0x621023,
+0x2c420002, 0x1440fffc, 0x0, 0x8f820224,
+0x14440005, 0x34028000, 0x42040, 0xa4102b,
+0x1040fff0, 0x34028000, 0x1082ffa6, 0x26100001,
+0x2e020014, 0x1440ffcd, 0x24020004, 0x3c010001,
+0xac223d18, 0x8021, 0x24120009, 0x3c11ffff,
+0x36313f7f, 0xc0040e8, 0x0, 0x24020001,
+0x3c010001, 0xac223d30, 0xc004194, 0x0,
+0x3c020001, 0x8c423d30, 0x1452fffb, 0x0,
+0x8f820044, 0x511024, 0x34425080, 0xaf820044,
+0x8f830054, 0x8f820054, 0x10000002, 0x2463000a,
+0x8f820054, 0x621023, 0x2c42000b, 0x1440fffc,
+0x0, 0x8f820044, 0x511024, 0x3442f080,
+0xaf820044, 0x8f830054, 0x8f820054, 0x10000002,
+0x2463000a, 0x8f820054, 0x621023, 0x2c42000b,
+0x1440fffc, 0x0, 0x8f820220, 0x3c03f700,
+0x431025, 0xaf820220, 0x8f830054, 0x8f820054,
+0x10000002, 0x24630064, 0x8f820054, 0x621023,
+0x2c420065, 0x1440fffc, 0x0, 0x8f820220,
+0x24040001, 0x34420002, 0xaf820220, 0x8f830200,
+0x24057fff, 0x2402fffd, 0x621824, 0xaf830200,
+0xaf840204, 0x8f830054, 0x8f820054, 0x10000002,
+0x24630001, 0x8f820054, 0x621023, 0x2c420002,
+0x1440fffc, 0x0, 0x8f820224, 0x14440005,
+0x34028000, 0x42040, 0xa4102b, 0x1040fff0,
+0x34028000, 0x1082ff56, 0x26100001, 0x2e020064,
+0x1440ffb0, 0x0, 0x3c020001, 0x8c423d14,
+0x30420004, 0x14400007, 0x3c08fff0, 0x8f820044,
+0x3c03ffff, 0x34633f7f, 0x431024, 0xaf820044,
+0x3c08fff0, 0x3508bdc0, 0x8f830054, 0x97a60018,
+0x3c070001, 0x8ce73e70, 0x3c040001, 0x24843b00,
+0x24020001, 0x3c010001, 0xac223d1c, 0xafa60010,
+0x3c060001, 0x8cc63d14, 0x97a2001a, 0x3c05000d,
+0x34a50100, 0x3c010001, 0xac203d18, 0x681821,
+0x3c010001, 0xac233e68, 0xc0029d3, 0xafa20014,
+0x8fbf0034, 0x8fb20030, 0x8fb1002c, 0x8fb00028,
+0x3e00008, 0x27bd0038, 0x27bdffe8, 0x24070004,
+0x3c040001, 0x8c843d18, 0x3021, 0x24020001,
+0x1482000a, 0xafbf0010, 0x3c020001, 0x8c425f2c,
+0x3c050004, 0x30428000, 0x1040000c, 0x34a593e0,
+0x3c05000f, 0x10000009, 0x34a54240, 0x3c020001,
+0x8c425f2c, 0x3c05000f, 0x30428000, 0x10400003,
+0x34a54240, 0x3c05001e, 0x34a58480, 0x3c020001,
+0x8c423e68, 0x8f830054, 0x451021, 0x431023,
+0x45102b, 0x1440002e, 0x0, 0x3c020001,
+0x8c423d20, 0x1440002a, 0x2cc20001, 0x7182b,
+0x431024, 0x1040001d, 0x0, 0x3c090001,
+0x8d293d14, 0x240b0001, 0x3c054000, 0x3c080001,
+0x25085f2c, 0x250afffc, 0x42042, 0x14800002,
+0x24e7ffff, 0x24040008, 0x891024, 0x5040000b,
+0x2cc20001, 0x148b0004, 0x0, 0x8d020000,
+0x10000003, 0x451024, 0x8d420000, 0x451024,
+0x54400001, 0x24060001, 0x2cc20001, 0x7182b,
+0x431024, 0x5440ffed, 0x42042, 0x3c010001,
+0x10c00020, 0xac243d18, 0x8f830054, 0x24020001,
+0x3c010001, 0xac223d1c, 0x3c010001, 0xac233e68,
+0x3c020001, 0x8c423d1c, 0x10400004, 0x24020001,
+0x3c010001, 0xac203d1c, 0xaee204b8, 0x8ee304b8,
+0x24020008, 0x10620005, 0x24020001, 0xc003f91,
+0x0, 0x1000000b, 0x0, 0x3c030001,
+0x8c633d18, 0x10620007, 0x2402000e, 0x3c030001,
+0x8c635ec0, 0x10620003, 0x0, 0xc004610,
+0x8f840220, 0x8fbf0010, 0x3e00008, 0x27bd0018,
+0x27bdffe0, 0x3c03fdff, 0x3c040001, 0x8c843d18,
+0x3c020001, 0x8c423d38, 0x3463ffff, 0x283a024,
+0x14820006, 0xafbf0018, 0x8ee304b8, 0x3c020001,
+0x8c423d3c, 0x10620006, 0x0, 0x8ee204b8,
+0x3c010001, 0xac243d38, 0x3c010001, 0xac223d3c,
+0x3c030001, 0x8c633d18, 0x24020002, 0x1062013c,
+0x2c620003, 0x10400005, 0x24020001, 0x1062000a,
+0x0, 0x10000134, 0x0, 0x24020004,
+0x1062006d, 0x24020008, 0x1062009f, 0x24020001,
+0x1000012d, 0x0, 0x8ee204b8, 0x2443ffff,
+0x2c620008, 0x1040012a, 0x31080, 0x3c010001,
+0x220821, 0x8c223b18, 0x400008, 0x0,
+0xc0040e8, 0x0, 0x3c020001, 0x8c423d24,
+0x3c010001, 0xac203cb0, 0x104000d7, 0x24020002,
+0xaee204b8, 0x3c010001, 0x10000119, 0xac203d24,
+0xc00424b, 0x0, 0x3c030001, 0x8c633d40,
+0x1000009e, 0x24020011, 0x3c050001, 0x8ca53d18,
+0x3c060001, 0x8cc65f2c, 0xc004878, 0x2021,
+0x24020005, 0x3c010001, 0xac203d24, 0x10000108,
+0xaee204b8, 0x3c040001, 0x24843b0c, 0x3c05000f,
+0x34a50100, 0x3021, 0x3821, 0xafa00010,
+0xc0029d3, 0xafa00014, 0x100000fd, 0x0,
+0x8f820220, 0x3c03f700, 0x431025, 0x100000a4,
+0xaf820220, 0x8f820220, 0x3c030004, 0x431024,
+0x144000ae, 0x24020007, 0x8f830054, 0x3c020001,
+0x8c423e60, 0x2463d8f0, 0x431023, 0x2c422710,
+0x144000eb, 0x24020001, 0x100000e7, 0x0,
+0x3c050001, 0x8ca53d18, 0xc004981, 0x2021,
+0xc004a4c, 0x2021, 0x3c030001, 0x8c635f24,
+0x46100dd, 0x24020001, 0x3c020008, 0x621024,
+0x10400006, 0x0, 0x8f820214, 0x3c03ffff,
+0x431024, 0x10000005, 0x3442251f, 0x8f820214,
+0x3c03ffff, 0x431024, 0x3442241f, 0xaf820214,
+0x8f820220, 0x3c030200, 0x283a025, 0x34420002,
+0xaf820220, 0x24020008, 0xc003c6b, 0xaee204b8,
+0x100000c7, 0x0, 0x8ee204b8, 0x2443ffff,
+0x2c620008, 0x104000c2, 0x31080, 0x3c010001,
+0x220821, 0x8c223b38, 0x400008, 0x0,
+0x3c020001, 0x8c425f28, 0x30424000, 0x10400004,
+0x0, 0x8f820044, 0x10000006, 0x3442f080,
+0x8f820044, 0x3c03ffff, 0x34633f7f, 0x431024,
+0x3442a080, 0xaf820044, 0x8f830054, 0x1000005a,
+0x24020004, 0xc003d2c, 0x0, 0x104000a6,
+0x24020001, 0x8f820214, 0x3c03ffff, 0x3c040001,
+0x8c843e58, 0x431024, 0x3442251f, 0xaf820214,
+0x24020008, 0x10800005, 0xaee204b8, 0x3c020001,
+0x8c423da4, 0x1040006d, 0x24020001, 0x8f820220,
+0x3c030008, 0x431024, 0x10400073, 0x3c020200,
+0x10000081, 0x0, 0x8ee204b8, 0x2443ffff,
+0x2c620007, 0x1040008e, 0x31080, 0x3c010001,
+0x220821, 0x8c223b58, 0x400008, 0x0,
+0xc003bad, 0x0, 0x3c010001, 0xac203d1c,
+0xaf800204, 0x3c010001, 0xc0040e8, 0xac205f10,
+0x24020001, 0x3c010001, 0xac223d30, 0x24020002,
+0x1000007b, 0xaee204b8, 0xc004194, 0x0,
+0x3c030001, 0x8c633d30, 0x24020009, 0x14620074,
+0x24020003, 0x10000072, 0xaee204b8, 0x3c020001,
+0x8c425f28, 0x30424000, 0x10400003, 0x3c0200c8,
+0x10000002, 0x344201f6, 0x344201fe, 0xaf820238,
+0x8f830054, 0x10000014, 0x24020004, 0x8f830054,
+0x3c020001, 0x8c423e60, 0x2463d8f0, 0x431023,
+0x2c422710, 0x1440005e, 0x24020005, 0x1000005c,
+0xaee204b8, 0x8f820220, 0x3c03f700, 0x431025,
+0xaf820220, 0xaf800204, 0x3c010001, 0xac205f10,
+0x8f830054, 0x24020006, 0xaee204b8, 0x3c010001,
+0x1000004f, 0xac233e60, 0x8f830054, 0x3c020001,
+0x8c423e60, 0x2463fff6, 0x431023, 0x2c42000a,
+0x14400047, 0x0, 0x24020007, 0x10000044,
+0xaee204b8, 0xc003d2c, 0x0, 0x1040003e,
+0x24020001, 0x8f820214, 0x3c03ffff, 0x3c040001,
+0x8c843e58, 0x431024, 0x3442251f, 0xaf820214,
+0x24020008, 0x1080000f, 0xaee204b8, 0x3c020001,
+0x8c423da4, 0x1440000b, 0x0, 0x8f820220,
+0x34420002, 0xaf820220, 0x24020001, 0x3c010001,
+0xac225ec0, 0xc004610, 0x8f840220, 0x10000016,
+0x0, 0x8f820220, 0x3c030008, 0x431024,
+0x14400011, 0x3c020200, 0x282a025, 0x2402000e,
+0x3c010001, 0xac225ec0, 0xc004a4c, 0x2021,
+0x8f820220, 0x34420002, 0xc003c6b, 0xaf820220,
+0x3c050001, 0x8ca53d18, 0xc004981, 0x2021,
+0x10000013, 0x0, 0x3c020001, 0x8c423da4,
+0x1040000f, 0x0, 0x3c020001, 0x8c423da0,
+0x2442ffff, 0x3c010001, 0xac223da0, 0x14400008,
+0x24020002, 0x3c010001, 0xac203da4, 0x3c010001,
+0x10000003, 0xac223da0, 0x3c010001, 0xac223d1c,
+0x8fbf0018, 0x3e00008, 0x27bd0020, 0x8f820200,
+0x8f820220, 0x8f820220, 0x34420004, 0xaf820220,
+0x8f820200, 0x3c040001, 0x8c843d18, 0x34420004,
+0xaf820200, 0x24020002, 0x1082003a, 0x2c820003,
+0x10400005, 0x24020001, 0x1082000a, 0x3c03f0ff,
+0x10000098, 0x0, 0x24020004, 0x10820059,
+0x24020008, 0x1082006c, 0x3c02f0ff, 0x10000091,
+0x0, 0x8f820050, 0x3463ffff, 0x3c05ffff,
+0x34a53f7f, 0x431024, 0x3c030700, 0x431025,
+0xaf820050, 0x24020e00, 0xaf840200, 0xaf840220,
+0xaf820238, 0x8f820044, 0x3c030001, 0x8c633d08,
+0x3c040001, 0x8c843e70, 0x451024, 0x34630022,
+0xaf820044, 0x24020004, 0x1082000c, 0xaf830200,
+0x3c020001, 0x8c423d2c, 0x3c030001, 0x8c633d10,
+0x3c040001, 0x8c843d0c, 0x34428000, 0x621825,
+0x641825, 0x1000006e, 0x34620002, 0x3c020001,
+0x8c423d10, 0x3c030001, 0x8c633d2c, 0x3c040001,
+0x8c843d0c, 0x431025, 0x441025, 0x10000064,
+0x34420002, 0x8f830050, 0x3c02f0ff, 0x3442ffff,
+0x3c040001, 0x8c843e58, 0x621824, 0x3c020d00,
+0x621825, 0x24020001, 0xaf830050, 0xaf820200,
+0xaf820220, 0x24020e00, 0x10800009, 0xaf820238,
+0x3c020001, 0x8c423da4, 0x14400005, 0x3c033f00,
+0x3c020001, 0x8c423d00, 0x10000005, 0x34630070,
+0x3c020001, 0x8c423d00, 0x3c033f00, 0x34630072,
+0x431025, 0xaf820200, 0x3c030001, 0x8c633d04,
+0x3c04f700, 0x3c020001, 0x8c423d10, 0x3c050001,
+0x8ca53d2c, 0x641825, 0x431025, 0x1000003c,
+0x451025, 0x8f830050, 0x3c02f0ff, 0x3442ffff,
+0x3c040001, 0x8c843e58, 0x621824, 0x3c020a00,
+0x621825, 0x24020001, 0xaf830050, 0xaf820200,
+0x1080001e, 0xaf820220, 0x3c020001, 0x8c423da4,
+0x1440001a, 0x3c033f00, 0x3c020001, 0x8c423d00,
+0x1000001a, 0x346300e0, 0x8f830050, 0x3c040001,
+0x8c843e58, 0x3442ffff, 0x621824, 0x1080000f,
+0xaf830050, 0x3c020001, 0x8c423da4, 0x1440000b,
+0x3c043f00, 0x3c030001, 0x8c633d00, 0x348400e0,
+0x24020001, 0xaf820200, 0xaf820220, 0x641825,
+0xaf830200, 0x10000008, 0x3c05f700, 0x3c020001,
+0x8c423d00, 0x3c033f00, 0x346300e2, 0x431025,
+0xaf820200, 0x3c05f700, 0x34a58000, 0x3c030001,
+0x8c633d04, 0x3c020001, 0x8c423d10, 0x3c040001,
+0x8c843d2c, 0x651825, 0x431025, 0x441025,
+0xaf820220, 0x3e00008, 0x0, 0x3c030001,
+0x8c633d30, 0x3c020001, 0x8c423d34, 0x10620003,
+0x24020002, 0x3c010001, 0xac233d34, 0x1062001d,
+0x2c620003, 0x10400025, 0x24020001, 0x14620023,
+0x24020004, 0x3c030001, 0x8c633d18, 0x10620006,
+0x24020008, 0x1462000c, 0x3c0200c8, 0x344201fb,
+0x10000009, 0xaf820238, 0x24020e01, 0xaf820238,
+0x8f820044, 0x3c03ffff, 0x34633f7f, 0x431024,
+0x34420080, 0xaf820044, 0x8f830054, 0x24020002,
+0x3c010001, 0xac223d30, 0x3c010001, 0x1000000b,
+0xac233e64, 0x8f830054, 0x3c020001, 0x8c423e64,
+0x2463d8f0, 0x431023, 0x2c422710, 0x14400003,
+0x24020009, 0x3c010001, 0xac223d30, 0x3e00008,
+0x0, 0x0, 0x0, 0x27bdffd8,
+0xafb20018, 0x809021, 0xafb3001c, 0xa09821,
+0xafb10014, 0xc08821, 0xafb00010, 0x8021,
+0xafbf0020, 0xa6200000, 0xc0045c7, 0x24040001,
+0x26100001, 0x2e020020, 0x1440fffb, 0x0,
+0xc0045c7, 0x2021, 0xc0045c7, 0x24040001,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0x24100010, 0x2501024, 0x10400002, 0x2021,
+0x24040001, 0xc0045c7, 0x108042, 0x1600fffa,
+0x2501024, 0x24100010, 0x2701024, 0x10400002,
+0x2021, 0x24040001, 0xc0045c7, 0x108042,
+0x1600fffa, 0x2701024, 0xc0045ed, 0x34108000,
+0xc0045ed, 0x0, 0xc0045a7, 0x0,
+0x50400005, 0x108042, 0x96220000, 0x501025,
+0xa6220000, 0x108042, 0x1600fff7, 0x0,
+0xc0045ed, 0x0, 0x8fbf0020, 0x8fb3001c,
+0x8fb20018, 0x8fb10014, 0x8fb00010, 0x3e00008,
+0x27bd0028, 0x27bdffd8, 0xafb10014, 0x808821,
+0xafb20018, 0xa09021, 0xafb3001c, 0xc09821,
+0xafb00010, 0x8021, 0xafbf0020, 0xc0045c7,
+0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
+0x0, 0xc0045c7, 0x2021, 0xc0045c7,
+0x24040001, 0xc0045c7, 0x2021, 0xc0045c7,
+0x24040001, 0x24100010, 0x2301024, 0x10400002,
+0x2021, 0x24040001, 0xc0045c7, 0x108042,
+0x1600fffa, 0x2301024, 0x24100010, 0x2501024,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 28'
echo 'File patch-2.2.4 is continued in part 29'
echo 29 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 29 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 29; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+0x108042, 0x1600fffa, 0x2501024, 0xc0045c7,
+0x24040001, 0xc0045c7, 0x2021, 0x34108000,
+0x96620000, 0x501024, 0x10400002, 0x2021,
+0x24040001, 0xc0045c7, 0x108042, 0x1600fff8,
+0x0, 0xc0045ed, 0x0, 0x8fbf0020,
+0x8fb3001c, 0x8fb20018, 0x8fb10014, 0x8fb00010,
+0x3e00008, 0x27bd0028, 0x3c030001, 0x8c633d40,
+0x3c020001, 0x8c423d84, 0x27bdffd8, 0xafbf0020,
+0xafb1001c, 0x10620003, 0xafb00018, 0x3c010001,
+0xac233d84, 0x2463ffff, 0x2c620013, 0x10400349,
+0x31080, 0x3c010001, 0x220821, 0x8c223b80,
+0x400008, 0x0, 0xc0045ed, 0x8021,
+0x34028000, 0xa7a20010, 0x27b10010, 0xc0045c7,
+0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
+0x0, 0xc0045c7, 0x2021, 0xc0045c7,
+0x24040001, 0xc0045c7, 0x2021, 0xc0045c7,
+0x24040001, 0x24100010, 0x32020001, 0x10400002,
+0x2021, 0x24040001, 0xc0045c7, 0x108042,
+0x1600fffa, 0x32020001, 0x24100010, 0xc0045c7,
+0x2021, 0x108042, 0x1600fffc, 0x0,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc0045c7, 0x108042,
+0x1600fff8, 0x0, 0xc0045ed, 0x0,
+0x1000030e, 0x24020002, 0x27b10010, 0xa7a00010,
+0x8021, 0xc0045c7, 0x24040001, 0x26100001,
+0x2e020020, 0x1440fffb, 0x0, 0xc0045c7,
+0x2021, 0xc0045c7, 0x24040001, 0xc0045c7,
+0x24040001, 0xc0045c7, 0x2021, 0x24100010,
+0x32020001, 0x10400002, 0x2021, 0x24040001,
+0xc0045c7, 0x108042, 0x1600fffa, 0x32020001,
+0x24100010, 0xc0045c7, 0x2021, 0x108042,
+0x1600fffc, 0x0, 0xc0045ed, 0x34108000,
+0xc0045ed, 0x0, 0xc0045a7, 0x0,
+0x50400005, 0x108042, 0x96220000, 0x501025,
+0xa6220000, 0x108042, 0x1600fff7, 0x0,
+0xc0045ed, 0x0, 0x97a20010, 0x30428000,
+0x144002dc, 0x24020003, 0x100002d8, 0x0,
+0x24021200, 0xa7a20010, 0x27b10010, 0x8021,
+0xc0045c7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0xc0045c7, 0x2021, 0x108042, 0x1600fffc,
+0x0, 0xc0045c7, 0x24040001, 0xc0045c7,
+0x2021, 0x34108000, 0x96220000, 0x501024,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fff8, 0x0, 0xc0045ed,
+0x0, 0x8f830054, 0x10000296, 0x24020004,
+0x8f830054, 0x3c020001, 0x8c423e6c, 0x2463ff9c,
+0x431023, 0x2c420064, 0x1440029e, 0x24020002,
+0x3c030001, 0x8c633e70, 0x10620297, 0x2c620003,
+0x14400296, 0x24020011, 0x24020003, 0x10620005,
+0x24020004, 0x10620291, 0x2402000f, 0x1000028f,
+0x24020011, 0x1000028d, 0x24020005, 0x24020014,
+0xa7a20010, 0x27b10010, 0x8021, 0xc0045c7,
+0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
+0x0, 0xc0045c7, 0x2021, 0xc0045c7,
+0x24040001, 0xc0045c7, 0x2021, 0xc0045c7,
+0x24040001, 0x24100010, 0x32020001, 0x10400002,
+0x2021, 0x24040001, 0xc0045c7, 0x108042,
+0x1600fffa, 0x32020001, 0x24100010, 0x32020012,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020012, 0xc0045c7,
+0x24040001, 0xc0045c7, 0x2021, 0x34108000,
+0x96220000, 0x501024, 0x10400002, 0x2021,
+0x24040001, 0xc0045c7, 0x108042, 0x1600fff8,
+0x0, 0xc0045ed, 0x0, 0x8f830054,
+0x10000248, 0x24020006, 0x8f830054, 0x3c020001,
+0x8c423e6c, 0x2463ff9c, 0x431023, 0x2c420064,
+0x14400250, 0x24020007, 0x1000024c, 0x0,
+0x24020006, 0xa7a20010, 0x27b10010, 0x8021,
+0xc0045c7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020013, 0x10400002, 0x2021, 0x24040001,
+0xc0045c7, 0x108042, 0x1600fffa, 0x32020013,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc0045c7, 0x108042,
+0x1600fff8, 0x0, 0xc0045ed, 0x0,
+0x8f830054, 0x10000207, 0x24020008, 0x8f830054,
+0x3c020001, 0x8c423e6c, 0x2463ff9c, 0x431023,
+0x2c420064, 0x1440020f, 0x24020009, 0x1000020b,
+0x0, 0x27b10010, 0xa7a00010, 0x8021,
+0xc0045c7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x24040001,
+0xc0045c7, 0x2021, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020018, 0x10400002, 0x2021, 0x24040001,
+0xc0045c7, 0x108042, 0x1600fffa, 0x32020018,
+0xc0045ed, 0x34108000, 0xc0045ed, 0x0,
+0xc0045a7, 0x0, 0x50400005, 0x108042,
+0x96220000, 0x501025, 0xa6220000, 0x108042,
+0x1600fff7, 0x0, 0xc0045ed, 0x8021,
+0x97a20010, 0x27b10010, 0x34420001, 0xa7a20010,
+0xc0045c7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020018, 0x10400002, 0x2021, 0x24040001,
+0xc0045c7, 0x108042, 0x1600fffa, 0x32020018,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc0045c7, 0x108042,
+0x1600fff8, 0x0, 0xc0045ed, 0x0,
+0x8f830054, 0x10000193, 0x2402000a, 0x8f830054,
+0x3c020001, 0x8c423e6c, 0x2463ff9c, 0x431023,
+0x2c420064, 0x1440019b, 0x2402000b, 0x10000197,
+0x0, 0x27b10010, 0xa7a00010, 0x8021,
+0xc0045c7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x24040001,
+0xc0045c7, 0x2021, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020017, 0x10400002, 0x2021, 0x24040001,
+0xc0045c7, 0x108042, 0x1600fffa, 0x32020017,
+0xc0045ed, 0x34108000, 0xc0045ed, 0x0,
+0xc0045a7, 0x0, 0x50400005, 0x108042,
+0x96220000, 0x501025, 0xa6220000, 0x108042,
+0x1600fff7, 0x0, 0xc0045ed, 0x8021,
+0x97a20010, 0x27b10010, 0x34420700, 0xa7a20010,
+0xc0045c7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020017, 0x10400002, 0x2021, 0x24040001,
+0xc0045c7, 0x108042, 0x1600fffa, 0x32020017,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc0045c7, 0x108042,
+0x1600fff8, 0x0, 0xc0045ed, 0x0,
+0x8f830054, 0x1000011f, 0x2402000c, 0x8f830054,
+0x3c020001, 0x8c423e6c, 0x2463ff9c, 0x431023,
+0x2c420064, 0x14400127, 0x24020012, 0x10000123,
+0x0, 0x27b10010, 0xa7a00010, 0x8021,
+0xc0045c7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x24040001,
+0xc0045c7, 0x2021, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020014, 0x10400002, 0x2021, 0x24040001,
+0xc0045c7, 0x108042, 0x1600fffa, 0x32020014,
+0xc0045ed, 0x34108000, 0xc0045ed, 0x0,
+0xc0045a7, 0x0, 0x50400005, 0x108042,
+0x96220000, 0x501025, 0xa6220000, 0x108042,
+0x1600fff7, 0x0, 0xc0045ed, 0x8021,
+0x97a20010, 0x27b10010, 0x34420010, 0xa7a20010,
+0xc0045c7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020014, 0x10400002, 0x2021, 0x24040001,
+0xc0045c7, 0x108042, 0x1600fffa, 0x32020014,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc0045c7, 0x108042,
+0x1600fff8, 0x0, 0xc0045ed, 0x0,
+0x8f830054, 0x100000ab, 0x24020013, 0x8f830054,
+0x3c020001, 0x8c423e6c, 0x2463ff9c, 0x431023,
+0x2c420064, 0x144000b3, 0x2402000d, 0x100000af,
+0x0, 0x27b10010, 0xa7a00010, 0x8021,
+0xc0045c7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x24040001,
+0xc0045c7, 0x2021, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020018, 0x10400002, 0x2021, 0x24040001,
+0xc0045c7, 0x108042, 0x1600fffa, 0x32020018,
+0xc0045ed, 0x34108000, 0xc0045ed, 0x0,
+0xc0045a7, 0x0, 0x50400005, 0x108042,
+0x96220000, 0x501025, 0xa6220000, 0x108042,
+0x1600fff7, 0x0, 0xc0045ed, 0x8021,
+0x97a20010, 0x27b10010, 0x3042fffe, 0xa7a20010,
+0xc0045c7, 0x24040001, 0x26100001, 0x2e020020,
+0x1440fffb, 0x0, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0xc0045c7, 0x24040001, 0x24100010, 0x32020001,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020001, 0x24100010,
+0x32020018, 0x10400002, 0x2021, 0x24040001,
+0xc0045c7, 0x108042, 0x1600fffa, 0x32020018,
+0xc0045c7, 0x24040001, 0xc0045c7, 0x2021,
+0x34108000, 0x96220000, 0x501024, 0x10400002,
+0x2021, 0x24040001, 0xc0045c7, 0x108042,
+0x1600fff8, 0x0, 0xc0045ed, 0x0,
+0x8f830054, 0x10000037, 0x2402000e, 0x24020840,
+0xa7a20010, 0x27b10010, 0x8021, 0xc0045c7,
+0x24040001, 0x26100001, 0x2e020020, 0x1440fffb,
+0x0, 0xc0045c7, 0x2021, 0xc0045c7,
+0x24040001, 0xc0045c7, 0x2021, 0xc0045c7,
+0x24040001, 0x24100010, 0x32020001, 0x10400002,
+0x2021, 0x24040001, 0xc0045c7, 0x108042,
+0x1600fffa, 0x32020001, 0x24100010, 0x32020013,
+0x10400002, 0x2021, 0x24040001, 0xc0045c7,
+0x108042, 0x1600fffa, 0x32020013, 0xc0045c7,
+0x24040001, 0xc0045c7, 0x2021, 0x34108000,
+0x96220000, 0x501024, 0x10400002, 0x2021,
+0x24040001, 0xc0045c7, 0x108042, 0x1600fff8,
+0x0, 0xc0045ed, 0x0, 0x8f830054,
+0x24020010, 0x3c010001, 0xac223d40, 0x3c010001,
+0x1000000c, 0xac233e6c, 0x8f830054, 0x3c020001,
+0x8c423e6c, 0x2463ff9c, 0x431023, 0x2c420064,
+0x14400004, 0x0, 0x24020011, 0x3c010001,
+0xac223d40, 0x8fbf0020, 0x8fb1001c, 0x8fb00018,
+0x3e00008, 0x27bd0028, 0x8f850044, 0x8f820044,
+0x3c030001, 0x431025, 0x3c030008, 0xaf820044,
+0x8f840054, 0x8f820054, 0xa32824, 0x10000002,
+0x24840001, 0x8f820054, 0x821023, 0x2c420002,
+0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe,
+0x3463ffff, 0x431024, 0xaf820044, 0x8f830054,
+0x8f820054, 0x10000002, 0x24630001, 0x8f820054,
+0x621023, 0x2c420002, 0x1440fffc, 0x0,
+0x3e00008, 0xa01021, 0x8f830044, 0x3c02fff0,
+0x3442ffff, 0x42480, 0x621824, 0x3c020002,
+0x822025, 0x641825, 0xaf830044, 0x8f820044,
+0x3c030001, 0x431025, 0xaf820044, 0x8f830054,
+0x8f820054, 0x10000002, 0x24630001, 0x8f820054,
+0x621023, 0x2c420002, 0x1440fffc, 0x0,
+0x8f820044, 0x3c03fffe, 0x3463ffff, 0x431024,
+0xaf820044, 0x8f830054, 0x8f820054, 0x10000002,
+0x24630001, 0x8f820054, 0x621023, 0x2c420002,
+0x1440fffc, 0x0, 0x3e00008, 0x0,
+0x8f820044, 0x3c03fff0, 0x3463ffff, 0x431024,
+0xaf820044, 0x8f820044, 0x3c030001, 0x431025,
+0xaf820044, 0x8f830054, 0x8f820054, 0x10000002,
+0x24630001, 0x8f820054, 0x621023, 0x2c420002,
+0x1440fffc, 0x0, 0x8f820044, 0x3c03fffe,
+0x3463ffff, 0x431024, 0xaf820044, 0x8f830054,
+0x8f820054, 0x10000002, 0x24630001, 0x8f820054,
+0x621023, 0x2c420002, 0x1440fffc, 0x0,
+0x3e00008, 0x0, 0x0, 0x27bdffe8,
+0xafbf0010, 0x8ee304b8, 0x24020008, 0x146201e0,
+0x0, 0x3c020001, 0x8c423e58, 0x14400005,
+0x0, 0xc003bad, 0x8f840224, 0x100001d8,
+0x0, 0x8f820220, 0x3c030008, 0x431024,
+0x10400026, 0x24020001, 0x8f840224, 0x8f820220,
+0x3c030400, 0x431024, 0x10400006, 0x0,
+0x3c010001, 0xac205ed0, 0x3c010001, 0x1000000b,
+0xac205ef0, 0x3c030001, 0x24635ed0, 0x8c620000,
+0x24420001, 0xac620000, 0x2c420002, 0x14400003,
+0x24020001, 0x3c010001, 0xac225ef0, 0x3c020001,
+0x8c425ef0, 0x10400006, 0x30820040, 0x10400004,
+0x24020001, 0x3c010001, 0x10000003, 0xac225ef4,
+0x3c010001, 0xac205ef4, 0x3c010001, 0xac245ecc,
+0x3c010001, 0x1000000b, 0xac205f00, 0x3c010001,
+0xac225f00, 0x3c010001, 0xac205ef0, 0x3c010001,
+0xac205ed0, 0x3c010001, 0xac205ef4, 0x3c010001,
+0xac205ecc, 0x3c030001, 0x8c635ec0, 0x3c020001,
+0x8c425ec4, 0x50620004, 0x2463ffff, 0x3c010001,
+0xac235ec4, 0x2463ffff, 0x2c62000e, 0x10400194,
+0x31080, 0x3c010001, 0x220821, 0x8c223bd0,
+0x400008, 0x0, 0x24020002, 0x3c010001,
+0xac205ef0, 0x3c010001, 0xac205ed0, 0x3c010001,
+0xac205ecc, 0x3c010001, 0xac205ef4, 0x3c010001,
+0xac205ee8, 0x3c010001, 0xac205ee0, 0xaf800224,
+0x3c010001, 0xac225ec0, 0x3c020001, 0x8c425f00,
+0x1440004f, 0x3c02fdff, 0x3442ffff, 0xc003bad,
+0x282a024, 0xaf800204, 0x8f820200, 0x2403fffd,
+0x431024, 0xaf820200, 0x3c010001, 0xac205f10,
+0x8f830054, 0x3c020001, 0x8c425ee8, 0x24040001,
+0x3c010001, 0xac245efc, 0x24420001, 0x3c010001,
+0xac225ee8, 0x2c420004, 0x3c010001, 0xac235ee4,
+0x14400006, 0x24020003, 0x3c010001, 0xac243d1c,
+0x3c010001, 0x1000015e, 0xac205ee8, 0x3c010001,
+0x1000015b, 0xac225ec0, 0x8f830054, 0x3c020001,
+0x8c425ee4, 0x2463d8f0, 0x431023, 0x2c422710,
+0x14400003, 0x24020004, 0x3c010001, 0xac225ec0,
+0x3c020001, 0x8c425f00, 0x14400021, 0x3c02fdff,
+0x3442ffff, 0x1000014a, 0x282a024, 0x3c040001,
+0x8c843e5c, 0x3c010001, 0xc0047f8, 0xac205ed8,
+0x3c020001, 0x8c425f0c, 0xaf820204, 0x3c020001,
+0x8c425f00, 0x14400012, 0x3c03fdff, 0x8f820204,
+0x3463ffff, 0x30420030, 0x1440012f, 0x283a024,
+0x3c030001, 0x8c635f0c, 0x24020005, 0x3c010001,
+0xac225ec0, 0x3c010001, 0x10000131, 0xac235f10,
+0x3c020001, 0x8c425f00, 0x10400010, 0x3c02fdff,
+0x3c020001, 0x8c423d9c, 0x24420001, 0x3c010001,
+0xac223d9c, 0x2c420002, 0x14400125, 0x24020001,
+0x3c010001, 0xac223da4, 0x3c010001, 0xac203d9c,
+0x3c010001, 0x1000011e, 0xac223d1c, 0x3c030001,
+0x8c635ef0, 0x3442ffff, 0x10600119, 0x282a024,
+0x3c020001, 0x8c425ecc, 0x10400115, 0x0,
+0x3c010001, 0xac225ef8, 0x24020003, 0x3c010001,
+0xac225ed0, 0x100000b8, 0x24020006, 0x3c010001,
+0xac205ed8, 0x8f820204, 0x34420040, 0xaf820204,
+0x3c020001, 0x8c425f10, 0x24030007, 0x3c010001,
+0xac235ec0, 0x34420040, 0x3c010001, 0xac225f10,
+0x3c020001, 0x8c425ef0, 0x10400005, 0x0,
+0x3c020001, 0x8c425ecc, 0x104000f0, 0x24020002,
+0x3c050001, 0x24a55ed0, 0x8ca20000, 0x2c424e21,
+0x104000ea, 0x24020002, 0x3c020001, 0x8c425ef4,
+0x104000ef, 0x2404ffbf, 0x3c020001, 0x8c425ecc,
+0x3c030001, 0x8c635ef8, 0x441024, 0x641824,
+0x10430004, 0x24020001, 0x3c010001, 0x100000e4,
+0xac225ec0, 0x24020003, 0xaca20000, 0x24020008,
+0x3c010001, 0xac225ec0, 0x3c020001, 0x8c425efc,
+0x1040000c, 0x24020001, 0x3c040001, 0xc004805,
+0x8c845ecc, 0x3c020001, 0x8c425f18, 0x14400005,
+0x24020001, 0x3c020001, 0x8c425f14, 0x10400006,
+0x24020001, 0x3c010001, 0xac223d1c, 0x3c010001,
+0x100000cb, 0xac205ee8, 0x3c020001, 0x8c425ee0,
+0x3c030001, 0x8c635ecc, 0x2c420001, 0x210c0,
+0x30630008, 0x3c010001, 0xac225ee0, 0x3c010001,
+0xac235edc, 0x8f830054, 0x24020009, 0x3c010001,
+0xac225ec0, 0x3c010001, 0x100000b9, 0xac235ee4,
+0x8f830054, 0x3c020001, 0x8c425ee4, 0x2463d8f0,
+0x431023, 0x2c422710, 0x1440009f, 0x0,
+0x3c020001, 0x8c425ef0, 0x10400005, 0x0,
+0x3c020001, 0x8c425ecc, 0x104000a0, 0x24020002,
+0x3c030001, 0x24635ed0, 0x8c620000, 0x2c424e21,
+0x1040009a, 0x24020002, 0x3c020001, 0x8c425efc,
+0x1040000e, 0x0, 0x3c020001, 0x8c425ecc,
+0x3c010001, 0xac205efc, 0x30420080, 0x1040002f,
+0x2402000c, 0x8f820204, 0x30420080, 0x1440000c,
+0x24020003, 0x10000029, 0x2402000c, 0x3c020001,
+0x8c425ecc, 0x30420080, 0x14400005, 0x24020003,
+0x8f820204, 0x30420080, 0x1040001f, 0x24020003,
+0xac620000, 0x2402000a, 0x3c010001, 0xac225ec0,
+0x3c040001, 0x24845f08, 0x8c820000, 0x3c030001,
+0x8c635ee0, 0x431025, 0xaf820204, 0x8c830000,
+0x3c040001, 0x8c845ee0, 0x2402000b, 0x3c010001,
+0xac225ec0, 0x641825, 0x3c010001, 0xac235f10,
+0x3c050001, 0x24a55ed0, 0x8ca20000, 0x2c424e21,
+0x10400066, 0x24020002, 0x3c020001, 0x8c425f00,
+0x10400005, 0x0, 0x2402000c, 0x3c010001,
+0x10000067, 0xac225ec0, 0x3c020001, 0x8c425ef0,
+0x10400063, 0x0, 0x3c040001, 0x8c845ecc,
+0x10800055, 0x30820008, 0x3c030001, 0x8c635edc,
+0x1062005b, 0x24020003, 0x3c010001, 0xac245ef8,
+0xaca20000, 0x24020006, 0x3c010001, 0x10000054,
+0xac225ec0, 0x8f820200, 0x34420002, 0xaf820200,
+0x8f830054, 0x2402000d, 0x3c010001, 0xac225ec0,
+0x3c010001, 0xac235ee4, 0x8f830054, 0x3c020001,
+0x8c425ee4, 0x2463d8f0, 0x431023, 0x2c422710,
+0x14400031, 0x0, 0x3c020001, 0x8c425f00,
+0x10400020, 0x2402000e, 0x3c030001, 0x8c635f14,
+0x3c010001, 0x14600015, 0xac225ec0, 0xc003c6b,
+0x0, 0x3c050001, 0x8ca53d18, 0xc004981,
+0x2021, 0x3c030001, 0x8c633d18, 0x24020004,
+0x14620005, 0x2403fffb, 0x3c020001, 0x8c423d14,
+0x10000003, 0x2403fff7, 0x3c020001, 0x8c423d14,
+0x431024, 0x3c010001, 0xac223d14, 0x8f830224,
+0x3c020200, 0x3c010001, 0xac235f1c, 0x10000020,
+0x282a025, 0x3c020001, 0x8c425ef0, 0x10400005,
+0x0, 0x3c020001, 0x8c425ecc, 0x1040000f,
+0x24020002, 0x3c020001, 0x8c425ed0, 0x2c424e21,
+0x1040000a, 0x24020002, 0x3c020001, 0x8c425ef0,
+0x1040000f, 0x0, 0x3c020001, 0x8c425ecc,
+0x1440000b, 0x0, 0x24020002, 0x3c010001,
+0x10000007, 0xac225ec0, 0x3c020001, 0x8c425ef0,
+0x10400003, 0x0, 0xc003bad, 0x0,
+0x8f820220, 0x3c03f700, 0x431025, 0xaf820220,
+0x8fbf0010, 0x3e00008, 0x27bd0018, 0x3c030001,
+0x24635f18, 0x8c620000, 0x10400005, 0x34422000,
+0x3c010001, 0xac225f0c, 0x10000003, 0xac600000,
+0x3c010001, 0xac245f0c, 0x3e00008, 0x0,
+0x27bdffe0, 0x30820030, 0xafbf0018, 0x3c010001,
+0xac225f14, 0x14400067, 0x3c02ffff, 0x34421f0e,
+0x821024, 0x14400061, 0x24020030, 0x30822000,
+0x1040005d, 0x30838000, 0x31a02, 0x30820001,
+0x21200, 0x3c040001, 0x8c843e5c, 0x621825,
+0x331c2, 0x3c030001, 0x24633da8, 0x30828000,
+0x21202, 0x30840001, 0x42200, 0x441025,
+0x239c2, 0x61080, 0x431021, 0x471021,
+0x90430000, 0x24020001, 0x10620025, 0x0,
+0x10600007, 0x24020002, 0x10620013, 0x24020003,
+0x1062002c, 0x3c05000f, 0x10000037, 0x0,
+0x8f820200, 0x2403feff, 0x431024, 0xaf820200,
+0x8f820220, 0x3c03fffe, 0x3463ffff, 0x431024,
+0xaf820220, 0x3c010001, 0xac205f34, 0x3c010001,
+0x10000034, 0xac205f3c, 0x8f820200, 0x34420100,
+0xaf820200, 0x8f820220, 0x3c03fffe, 0x3463ffff,
+0x431024, 0xaf820220, 0x24020100, 0x3c010001,
+0xac225f34, 0x3c010001, 0x10000026, 0xac205f3c,
+0x8f820200, 0x2403feff, 0x431024, 0xaf820200,
+0x8f820220, 0x3c030001, 0x431025, 0xaf820220,
+0x3c010001, 0xac205f34, 0x3c010001, 0x10000019,
+0xac235f3c, 0x8f820200, 0x34420100, 0xaf820200,
+0x8f820220, 0x3c030001, 0x431025, 0xaf820220,
+0x24020100, 0x3c010001, 0xac225f34, 0x3c010001,
+0x1000000c, 0xac235f3c, 0x34a5ffff, 0x3c040001,
+0x24843c08, 0xafa30010, 0xc0029d3, 0xafa00014,
+0x10000004, 0x0, 0x24020030, 0x3c010001,
+0xac225f18, 0x8fbf0018, 0x3e00008, 0x27bd0020,
+0x0, 0x0, 0x0, 0x27bdffc8,
+0xafb10024, 0x808821, 0xafb3002c, 0xa09821,
+0xafb00020, 0xc08021, 0x3c040001, 0x24843c20,
+0x3c050009, 0x3c020001, 0x8c423d18, 0x34a59001,
+0x2203021, 0x2603821, 0xafbf0030, 0xafb20028,
+0xa7a0001a, 0xafb00014, 0xc0029d3, 0xafa20010,
+0x24020002, 0x126200eb, 0x2e620003, 0x10400005,
+0x24020001, 0x1262000a, 0x3c02fffb, 0x100000e5,
+0x0, 0x24020004, 0x1262006d, 0x24020008,
+0x1262006c, 0x3c02ffec, 0x100000de, 0x0,
+0x3442ffff, 0x2028024, 0x119140, 0x3c010001,
+0x320821, 0xac305f2c, 0x3c024000, 0x2021024,
+0x10400046, 0x1023c2, 0x30840030, 0x101382,
+0x3042000c, 0x3c030001, 0x24633d44, 0x431021,
+0x823821, 0x3c020020, 0x2021024, 0x10400006,
+0x24020100, 0x3c010001, 0x320821, 0xac225f30,
+0x10000005, 0x3c020080, 0x3c010001, 0x320821,
+0xac205f30, 0x3c020080, 0x2021024, 0x10400006,
+0x111940, 0x3c020001, 0x3c010001, 0x230821,
+0x10000005, 0xac225f38, 0x111140, 0x3c010001,
+0x220821, 0xac205f38, 0x94e30000, 0x32024000,
+0x10400003, 0xa7a30018, 0x34624000, 0xa7a20018,
+0x24040001, 0x94e20002, 0x24050004, 0x24e60002,
+0x34420001, 0xc00420a, 0xa4e20002, 0x24040001,
+0x2821, 0xc00420a, 0x27a60018, 0x3c020001,
+0x8c423d18, 0x24110001, 0x3c010001, 0xac313d24,
+0x14530004, 0x32028000, 0xc003bad, 0x0,
+0x32028000, 0x10400097, 0x0, 0xc003bad,
+0x0, 0x24020002, 0x3c010001, 0xac313d1c,
+0x3c010001, 0x1000008f, 0xac223d18, 0x24040001,
+0x24050004, 0x27b0001a, 0xc00420a, 0x2003021,
+0x24040001, 0x2821, 0xc00420a, 0x2003021,
+0x3c020001, 0x521021, 0x8c425f24, 0x3c040001,
+0x8c843d18, 0x3c03bfff, 0x3463ffff, 0x3c010001,
+0xac333d24, 0x431024, 0x3c010001, 0x320821,
+0x10930076, 0xac225f24, 0x10000076, 0x0,
+0x3c02ffec, 0x3442ffff, 0x2028024, 0x3c020008,
+0x2028025, 0x111140, 0x3c010001, 0x220821,
+0xac305f28, 0x3c022000, 0x2021024, 0x10400009,
+0x0, 0x3c020001, 0x8c423da4, 0x14400005,
+0x24020001, 0x3c010001, 0xac223e58, 0x10000004,
+0x3c024000, 0x3c010001, 0xac203e58, 0x3c024000,
+0x2021024, 0x1440001a, 0x0, 0x3c020001,
+0x8c423e58, 0x10400005, 0x24022020, 0x3c010001,
+0xac223e5c, 0x24020001, 0xaee204b8, 0x3c04bfff,
+0x111940, 0x3c020001, 0x431021, 0x8c425f20,
+0x3c050001, 0x8ca53d18, 0x3484ffff, 0x441024,
+0x3c010001, 0x230821, 0xac225f20, 0x24020001,
+0x10a20044, 0x0, 0x10000040, 0x0,
+0x3c020001, 0x8c423e58, 0x1040001c, 0x24022000,
+0x3c010001, 0xac223e5c, 0x3c0300a0, 0x2031024,
+0x14430005, 0x111140, 0x3402a000, 0x3c010001,
+0x1000002d, 0xac223e5c, 0x3c030001, 0x621821,
+0x8c635f28, 0x3c020020, 0x621024, 0x10400004,
+0x24022001, 0x3c010001, 0x10000023, 0xac223e5c,
+0x3c020080, 0x621024, 0x1040001f, 0x3402a001,
+0x3c010001, 0x1000001c, 0xac223e5c, 0x3c020020,
+0x2021024, 0x10400007, 0x111940, 0x24020100,
+0x3c010001, 0x230821, 0xac225f34, 0x10000006,
+0x3c020080, 0x111140, 0x3c010001, 0x220821,
+0xac205f34, 0x3c020080, 0x2021024, 0x10400006,
+0x111940, 0x3c020001, 0x3c010001, 0x230821,
+0x10000005, 0xac225f3c, 0x111140, 0x3c010001,
+0x220821, 0xac205f3c, 0x3c030001, 0x8c633d18,
+0x24020001, 0x10620003, 0x0, 0xc003bad,
+0x0, 0x8fbf0030, 0x8fb3002c, 0x8fb20028,
+0x8fb10024, 0x8fb00020, 0x3e00008, 0x27bd0038,
+0x27bdffd0, 0xafb50028, 0x80a821, 0xafb20020,
+0x9021, 0xafb30024, 0x9821, 0xafb1001c,
+0x8821, 0x24020002, 0xafbf002c, 0xafb00018,
+0xa7a00012, 0x10a20068, 0xa7a00010, 0x2ca20003,
+0x10400005, 0x24020001, 0x10a2000a, 0x158140,
+0x100000ae, 0x2201021, 0x24020004, 0x10a2005e,
+0x24020008, 0x10a2005d, 0x152940, 0x100000a7,
+0x2201021, 0x3c030001, 0x701821, 0x8c635f2c,
+0x3c024000, 0x621024, 0x14400009, 0x24040001,
+0x3c027fff, 0x3442ffff, 0x628824, 0x3c010001,
+0x300821, 0xac315f24, 0x10000098, 0x2201021,
+0x24050001, 0xc0041c8, 0x27a60010, 0x24040001,
+0x24050001, 0xc0041c8, 0x27a60010, 0x97a20010,
+0x30420004, 0x10400034, 0x3c114000, 0x3c030001,
+0x8c633e70, 0x24020003, 0x10620008, 0x2c620004,
+0x14400029, 0x3c028000, 0x24020004, 0x10620014,
+0x24040001, 0x10000024, 0x3c028000, 0x24040001,
+0x24050011, 0x27b00012, 0xc0041c8, 0x2003021,
+0x24040001, 0x24050011, 0xc0041c8, 0x2003021,
+0x97a30012, 0x30624000, 0x10400002, 0x3c130010,
+0x3c130008, 0x3c120001, 0x10000010, 0x30628000,
+0x24050014, 0x27b00012, 0xc0041c8, 0x2003021,
+0x24040001, 0x24050014, 0xc0041c8, 0x2003021,
+0x97a30012, 0x30621000, 0x10400002, 0x3c130010,
+0x3c130008, 0x3c120001, 0x30620800, 0x54400001,
+0x3c120002, 0x3c028000, 0x2221025, 0x2531825,
+0x10000007, 0x438825, 0x3c110001, 0x2308821,
+0x8e315f2c, 0x3c027fff, 0x3442ffff, 0x2228824,
+0x151140, 0x3c010001, 0x220821, 0xac315f24,
+0x1000004e, 0x2201021, 0x152940, 0x3c030001,
+0x651821, 0x8c635f28, 0x3c024000, 0x621024,
+0x14400008, 0x3c027fff, 0x3442ffff, 0x628824,
+0x3c010001, 0x250821, 0xac315f20, 0x1000003f,
+0x2201021, 0x3c020001, 0x8c423d28, 0x10400033,
+0x3c11c00c, 0x3c020001, 0x8c423da4, 0x3c04c00c,
+0x34842000, 0x3c030001, 0x8c633e58, 0x2102b,
+0x21023, 0x441024, 0x10600003, 0x518825,
+0x3c022000, 0x2228825, 0x3c020001, 0x451021,
+0x8c425f34, 0x10400003, 0x3c020020, 0x10000004,
+0x2228825, 0x3c02ffdf, 0x3442ffff, 0x2228824,
+0x151140, 0x3c010001, 0x220821, 0x8c225f3c,
+0x10400003, 0x3c020080, 0x10000004, 0x2228825,
+0x3c02ff7f, 0x3442ffff, 0x2228824, 0x3c020001,
+0x8c423d90, 0x10400002, 0x3c020800, 0x2228825,
+0x3c020001, 0x8c423d94, 0x10400002, 0x3c020400,
+0x2228825, 0x3c020001, 0x8c423d98, 0x10400006,
+0x3c020100, 0x10000004, 0x2228825, 0x3c027fff,
+0x3442ffff, 0x628824, 0x151140, 0x3c010001,
+0x220821, 0xac315f20, 0x2201021, 0x8fbf002c,
+0x8fb50028, 0x8fb30024, 0x8fb20020, 0x8fb1001c,
+0x8fb00018, 0x3e00008, 0x27bd0030, 0x27bdffe0,
+0xafb20018, 0x809021, 0xafbf001c, 0xafb10014,
+0xafb00010, 0x8f840200, 0x3c030001, 0x8c633d18,
+0x8f860220, 0x24020002, 0x106200a6, 0x2c620003,
+0x10400005, 0x24020001, 0x1062000a, 0x121940,
+0x100000a0, 0x0, 0x24020004, 0x10620053,
+0x24020008, 0x10620052, 0x128940, 0x10000099,
+0x0, 0x3c050001, 0xa32821, 0x8ca55f2c,
+0x3c100001, 0x2038021, 0x8e105f24, 0x3c024000,
+0xa21024, 0x10400038, 0x3c020008, 0x2021024,
+0x10400020, 0x34840002, 0x3c020001, 0x431021,
+0x8c425f30, 0x10400005, 0x34840020, 0x34840100,
+0x3c020020, 0x10000006, 0x2028025, 0x2402feff,
+0x822024, 0x3c02ffdf, 0x3442ffff, 0x2028024,
+0x121140, 0x3c010001, 0x220821, 0x8c225f38,
+0x10400005, 0x3c020001, 0xc23025, 0x3c020080,
+0x10000016, 0x2028025, 0x3c02fffe, 0x3442ffff,
+0xc23024, 0x3c02ff7f, 0x3442ffff, 0x1000000f,
+0x2028024, 0x2402fedf, 0x822024, 0x3c02fffe,
+0x3442ffff, 0xc23024, 0x3c02ff5f, 0x3442ffff,
+0x2028024, 0x3c010001, 0x230821, 0xac205f30,
+0x3c010001, 0x230821, 0xac205f38, 0xaf840200,
+0xaf860220, 0x8f820220, 0x34420002, 0xaf820220,
+0x1000000a, 0x121140, 0x3c02bfff, 0x3442ffff,
+0x8f830200, 0x2028024, 0x2402fffd, 0x621824,
+0xc003bad, 0xaf830200, 0x121140, 0x3c010001,
+0x220821, 0x1000004b, 0xac305f24, 0x128940,
+0x3c050001, 0xb12821, 0x8ca55f28, 0x3c100001,
+0x2118021, 0x8e105f20, 0x3c024000, 0xa21024,
+0x14400010, 0x0, 0x3c020001, 0x8c423e58,
+0x14400005, 0x3c02bfff, 0x8f820200, 0x34420002,
+0xaf820200, 0x3c02bfff, 0x3442ffff, 0xc003bad,
+0x2028024, 0x3c010001, 0x310821, 0x10000031,
+0xac305f20, 0x3c020001, 0x8c423e58, 0x10400005,
+0x3c020020, 0x3c020001, 0x8c423da4, 0x10400025,
+0x3c020020, 0xa21024, 0x10400007, 0x34840020,
+0x24020100, 0x3c010001, 0x310821, 0xac225f34,
+0x10000006, 0x34840100, 0x3c010001, 0x310821,
+0xac205f34, 0x2402feff, 0x822024, 0x3c020080,
+0xa21024, 0x10400007, 0x121940, 0x3c020001,
+0x3c010001, 0x230821, 0xac225f3c, 0x10000008,
+0xc23025, 0x121140, 0x3c010001, 0x220821,
+0xac205f3c, 0x3c02fffe, 0x3442ffff, 0xc23024,
+0xaf840200, 0xaf860220, 0x8f820220, 0x34420002,
+0xaf820220, 0x121140, 0x3c010001, 0x220821,
+0xac305f20, 0x8fbf001c, 0x8fb20018, 0x8fb10014,
+0x8fb00010, 0x3e00008, 0x27bd0020, 0x1821,
+0x308400ff, 0x2405ffdf, 0x2406ffbf, 0x641007,
+0x30420001, 0x10400004, 0x0, 0x8f820044,
+0x10000003, 0x34420040, 0x8f820044, 0x461024,
+0xaf820044, 0x8f820044, 0x34420020, 0xaf820044,
+0x8f820044, 0x451024, 0xaf820044, 0x24630001,
+0x28620008, 0x5440ffee, 0x641007, 0x3e00008,
+0x0, 0x0, 0x0, 0x0 };
X u32 tigon2FwRodata[(MAX_RODATA_LEN/4) + 1] __initdata = {
-0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73,
-0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x66776d61,
-0x696e2e63, 0x2c762031, 0x2e312e34, 0x372e3420, 0x31393938, 0x2f31302f,
-0x31342031, 0x393a3330, 0x3a323920, 0x73687561, 0x6e672045, 0x78702024,
-0x0, 0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51, 0x64527845,
-0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71, 0x45767400,
-0x3f6e6f51, 0x64457650, 0x0, 0x6661696c, 0x456e454d, 0x0,
-0x656e714d, 0x45764661, 0x696c0000, 0x656e714d, 0x45765046, 0x61696c00,
-0x3f6d656d, 0x53697a65, 0x0, 0x65787453, 0x746b5067, 0x0,
-0x4441574e, 0x2d310000, 0x4441574e, 0x2d320000, 0x4441574e, 0x2d330000,
-0x5245445a, 0x4f4e4531, 0x0, 0x42616453, 0x6e64526e, 0x67000000,
-0x496e666f, 0x2d336d42, 0x0, 0x76357373, 0x72616d00, 0x3f737731,
-0x646d6100, 0x536e6443, 0x6b53756d, 0x0, 0x646d6141, 0x6c69676e,
-0x0, 0x52637643, 0x6b53756d, 0x0, 0x496c6c43, 0x6f6e6652,
-0x78000000, 0x766c616e, 0x52434200, 0x52656376, 0x566c616e, 0x0,
-0x496e666f, 0x2d336d45, 0x0, 0x66774f50, 0x6661696c, 0x0,
-0x696e7453, 0x746b4572, 0x0, 0x70726f62, 0x654d656d, 0x0,
-0x436f7079, 0x0, 0x4e6f7443, 0x6f707900, 0x4441574e, 0x2d420000,
-0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73,
-0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x74696d65,
-0x722e632c, 0x7620312e, 0x312e3139, 0x2e332031, 0x3939382f, 0x31302f30,
-0x37203233, 0x3a34333a, 0x30302066, 0x6877616e, 0x67204578, 0x70202400,
-0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51, 0x64527845, 0x0,
-0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71, 0x45767400, 0x3f6e6f51,
-0x64457650, 0x0, 0x6661696c, 0x456e454d, 0x0, 0x656e714d,
-0x45764661, 0x696c0000, 0x656e714d, 0x45765046, 0x61696c00, 0x542d446d,
-0x61526432, 0x0, 0x542d446d, 0x61526431, 0x0, 0x542d446d,
-0x61526442, 0x0, 0x542d446d, 0x61577232, 0x0, 0x542d446d,
-0x61577231, 0x0, 0x542d446d, 0x61577242, 0x0, 0x0,
-0x0, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563,
-0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d,
-0x6d6f6e2f, 0x636f6d6d, 0x616e642e, 0x632c7620, 0x312e312e, 0x322e3232,
-0x20313939, 0x382f3037, 0x2f323920, 0x32323a33, 0x313a3030, 0x20736875,
-0x616e6720, 0x45787020, 0x24000000, 0x3f6e6f51, 0x64547845, 0x0,
-0x3f6e6f51, 0x64527845, 0x0, 0x6576526e, 0x6746756c, 0x6c000000,
-0x3f456e71, 0x45767400, 0x3f6e6f51, 0x64457650, 0x0, 0x6661696c,
-0x456e454d, 0x0, 0x656e714d, 0x45764661, 0x696c0000, 0x656e714d,
-0x45765046, 0x61696c00, 0x3f4d626f, 0x78457674, 0x0, 0x68737465,
-0x5f455252, 0x0, 0x6d437374, 0x4d644552, 0x52000000, 0x70726f6d,
-0x4d644552, 0x52000000, 0x6c6e6b43, 0x6d644572, 0x72000000, 0x636d645f,
-0x45525200, 0x0, 0x7fa0, 0x8630, 0x8630, 0x85ac,
-0x835c, 0x85f8, 0x8630, 0x8080, 0x8090, 0x8178,
-0x824c, 0x8218, 0x8630, 0x80a0, 0x8308, 0x8630,
-0x8318, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563,
-0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d,
-0x6d6f6e2f, 0x6d636173, 0x742e632c, 0x7620312e, 0x312e322e, 0x35203139,
-0x39382f30, 0x342f3234, 0x2030303a, 0x30303a33, 0x39206861, 0x79657320,
-0x45787020, 0x24000000, 0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51,
-0x64527845, 0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71,
-0x45767400, 0x3f6e6f51, 0x64457650, 0x0, 0x6661696c, 0x456e454d,
-0x0, 0x656e714d, 0x45764661, 0x696c0000, 0x656e714d, 0x45765046,
-0x61696c00, 0x4d634164, 0x64447570, 0x0, 0x4d634164, 0x6446756c,
-0x0, 0x4d634465, 0x6c4e6f45, 0x0, 0x24486561, 0x6465723a,
-0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963,
-0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x646d612e, 0x632c7620, 0x312e312e,
-0x31322e33, 0x20313939, 0x382f3132, 0x2f303420, 0x32323a35, 0x313a3135,
-0x20736875, 0x616e6720, 0x45787020, 0x24000000, 0x3f6e6f51, 0x64547845,
-0x0, 0x3f6e6f51, 0x64527845, 0x0, 0x6576526e, 0x6746756c,
-0x6c000000, 0x3f456e71, 0x45767400, 0x3f6e6f51, 0x64457650, 0x0,
-0x6661696c, 0x456e454d, 0x0, 0x656e714d, 0x45764661, 0x696c0000,
-0x656e714d, 0x45765046, 0x61696c00, 0x646d6172, 0x6441544e, 0x0,
-0x2a50414e, 0x49432a00, 0x2e2e2f2e, 0x2e2f2e2e, 0x2f2e2e2f, 0x2e2e2f73,
-0x72632f6e, 0x69632f66, 0x77322f63, 0x6f6d6d6f, 0x6e2f646d, 0x612e6300,
-0x646d6177, 0x7241544e, 0x0, 0x0, 0x0, 0x0,
-0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73,
-0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x74726163,
-0x652e632c, 0x7620312e, 0x312e322e, 0x34203139, 0x39382f30, 0x342f3234,
-0x2030303a, 0x30303a34, 0x35206861, 0x79657320, 0x45787020, 0x24000000,
-0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73,
-0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x64617461,
-0x2e632c76, 0x20312e31, 0x2e322e34, 0x20313939, 0x382f3036, 0x2f323320,
-0x30313a32, 0x393a3330, 0x20736875, 0x616e6720, 0x45787020, 0x24000000,
-0x46575f56, 0x45525349, 0x4f4e3a20, 0x2331204d, 0x6f6e2044, 0x65632037,
-0x2031343a, 0x35383a32, 0x34205053, 0x54203139, 0x39380000, 0x46575f43,
-0x4f4d5049, 0x4c455f54, 0x494d453a, 0x2031343a, 0x35383a32, 0x34000000,
-0x46575f43, 0x4f4d5049, 0x4c455f42, 0x593a2064, 0x65767263, 0x73000000,
-0x46575f43, 0x4f4d5049, 0x4c455f48, 0x4f53543a, 0x20636f6d, 0x70757465,
-0x0, 0x46575f43, 0x4f4d5049, 0x4c455f44, 0x4f4d4149, 0x4e3a2065,
-0x6e672e61, 0x6374656f, 0x6e2e636f, 0x6d000000, 0x46575f43, 0x4f4d5049,
-0x4c45523a, 0x20676363, 0x20766572, 0x73696f6e, 0x20322e37, 0x2e320000,
-0x0, 0x0, 0x0, 0x0, 0x24486561, 0x6465723a,
-0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963,
-0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x6d656d2e, 0x632c7620, 0x312e312e,
-0x322e3420, 0x31393938, 0x2f30342f, 0x32342030, 0x303a3030, 0x3a343020,
-0x68617965, 0x73204578, 0x70202400, 0x0, 0x24486561, 0x6465723a,
-0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963,
-0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x73656e64, 0x2e632c76, 0x20312e31,
-0x2e32322e, 0x33203139, 0x39382f30, 0x392f3137, 0x2032313a, 0x32343a33,
-0x38207368, 0x75616e67, 0x20457870, 0x20240000, 0x3f6e6f51, 0x64547845,
-0x0, 0x3f6e6f51, 0x64527845, 0x0, 0x6576526e, 0x6746756c,
-0x6c000000, 0x3f456e71, 0x45767400, 0x3f6e6f51, 0x64457650, 0x0,
-0x6661696c, 0x456e454d, 0x0, 0x656e714d, 0x45764661, 0x696c0000,
-0x656e714d, 0x45765046, 0x61696c00, 0x736e6464, 0x654e6f51, 0x20000000,
-0x6e6f454e, 0x515f5458, 0x0, 0x736e6464, 0x744e6f51, 0x20000000,
-0x756e6b72, 0x64747970, 0x65000000, 0x3f546370, 0x436b7375, 0x6d000000,
-0x0, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563,
-0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d,
-0x6d6f6e2f, 0x72656376, 0x2e632c76, 0x20312e31, 0x2e34322e, 0x33203139,
-0x39382f31, 0x322f3034, 0x2030303a, 0x31303a33, 0x38207368, 0x75616e67,
-0x20457870, 0x20240000, 0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51,
-0x64527845, 0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71,
-0x45767400, 0x3f6e6f51, 0x64457650, 0x0, 0x6661696c, 0x456e454d,
-0x0, 0x656e714d, 0x45764661, 0x696c0000, 0x656e714d, 0x45765046,
-0x61696c00, 0x66726d32, 0x4c617267, 0x65000000, 0x72784e6f, 0x52784264,
-0x0, 0x72785144, 0x6d447446, 0x0, 0x72785144, 0x6d614446,
-0x0, 0x72785144, 0x6d614246, 0x0, 0x3f724264, 0x446d6146,
-0x0, 0x3f724a42, 0x64446d46, 0x0, 0xdbe8, 0xdbe8,
-0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8,
-0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8,
-0xdbe8, 0xdbd8, 0xdbd8, 0xdbd8, 0xdbe8, 0xdbe8,
-0xdbe8, 0xdbe8, 0xdbe8, 0xdbe8, 0x572d444d, 0x41456e46,
-0x0, 0x0, 0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563,
-0x74732f72, 0x63732f73, 0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d,
-0x6d6f6e2f, 0x6d61632e, 0x632c7620, 0x312e312e, 0x31372e31, 0x20313939,
-0x382f3038, 0x2f323720, 0x32323a31, 0x333a3230, 0x20736875, 0x616e6720,
-0x45787020, 0x24000000, 0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51,
-0x64527845, 0x0, 0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71,
-0x45767400, 0x3f6e6f51, 0x64457650, 0x0, 0x6661696c, 0x456e454d,
-0x0, 0x656e714d, 0x45764661, 0x696c0000, 0x656e714d, 0x45765046,
-0x61696c00, 0x6d616374, 0x7841544e, 0x0, 0x684d6352, 0x7841746e,
-0x0, 0x72656d61, 0x73737274, 0x0, 0x6c696e6b, 0x444f574e,
-0x0, 0x6c696e6b, 0x55500000, 0x0, 0x0, 0x0,
-0x24486561, 0x6465723a, 0x202f7072, 0x6f6a6563, 0x74732f72, 0x63732f73,
-0x772f6765, 0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f, 0x636b7375,
-0x6d2e632c, 0x7620312e, 0x312e322e, 0x36203139, 0x39382f30, 0x362f3233,
-0x2030313a, 0x32393a32, 0x37207368, 0x75616e67, 0x20457870, 0x20240000,
-0x3f6e6f51, 0x64547845, 0x0, 0x3f6e6f51, 0x64527845, 0x0,
-0x6576526e, 0x6746756c, 0x6c000000, 0x3f456e71, 0x45767400, 0x3f6e6f51,
-0x64457650, 0x0, 0x6661696c, 0x456e454d, 0x0, 0x656e714d,
-0x45764661, 0x696c0000, 0x656e714d, 0x45765046, 0x61696c00, 0x0,
-0x50726f62, 0x65506879, 0x0, 0x6c6e6b41, 0x53535254, 0x0,
-0xf94c, 0xf97c, 0xf9a0, 0xf9cc, 0xf9f8, 0xfa0c,
-0xfa48, 0xfdd0, 0xfaf8, 0xfc24, 0xfb44, 0xfc7c,
-0xfca4, 0xfcd8, 0xfb88, 0xfdd0, 0xfbf0, 0xfc24,
-0xfc4c, 0xfc7c, 0xfca4, 0xfcd8, 0xfd14, 0x0,
-0x0, 0x0, 0x1032c, 0x103fc, 0x104d4, 0x105a4,
-0x10600, 0x106dc, 0x10704, 0x107e0, 0x10808, 0x109b0,
-0x109d8, 0x10b80, 0x10d78, 0x1100c, 0x10f20, 0x1100c,
-0x11038, 0x10ba8, 0x10d50, 0x0, 0x1133c, 0x11390,
-0x1140c, 0x11438, 0x11488, 0x114c4, 0x114f8, 0x11584,
-0x1163c, 0x1170c, 0x1174c, 0x117d0, 0x117f4, 0x11904,
-0x646f4261, 0x73655067, 0x0, 0x0, 0x0, 0x0,
-0x73746d61, 0x634c4e4b, 0x0, 0x0, 0x0 };
+0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x66776d61, 0x696e2e63, 0x2c762031, 0x2e312e32,
+0x2e343520, 0x31393939, 0x2f30312f, 0x32342030,
+0x303a3130, 0x3a353520, 0x73687561, 0x6e672045,
+0x78702024, 0x0, 0x65767452, 0x6e674600,
+0x51657674, 0x46000000, 0x51657674, 0x505f4600,
+0x4d657674, 0x526e6746, 0x0, 0x4d516576,
+0x74460000, 0x4d516576, 0x505f4600, 0x5173436f,
+0x6e495f46, 0x0, 0x5173436f, 0x6e734600,
+0x51725072, 0x6f644600, 0x6261644d, 0x656d537a,
+0x0, 0x68774677, 0x56657200, 0x62616448,
+0x77566572, 0x0, 0x2a2a4441, 0x574e5f41,
+0x0, 0x74785278, 0x4266537a, 0x0,
+0x62664174, 0x6e4d726b, 0x0, 0x7265645a,
+0x6f6e6531, 0x0, 0x70636943, 0x6f6e6600,
+0x67656e43, 0x6f6e6600, 0x72636246, 0x6c616773,
+0x0, 0x62616452, 0x78526362, 0x0,
+0x676c6f62, 0x466c6773, 0x0, 0x2b5f6469,
+0x73705f6c, 0x6f6f7000, 0x2b65765f, 0x68616e64,
+0x6c657200, 0x63616e74, 0x31446d61, 0x0,
+0x2b715f64, 0x6d615f74, 0x6f5f6e69, 0x635f636b,
+0x73756d00, 0x2b685f73, 0x656e645f, 0x64617461,
+0x5f726561, 0x64795f63, 0x6b73756d, 0x0,
+0x2b685f64, 0x6d615f72, 0x645f6173, 0x73697374,
+0x5f636b73, 0x756d0000, 0x74436b73, 0x6d4f6e00,
+0x2b715f64, 0x6d615f74, 0x6f5f6e69, 0x63000000,
+0x2b685f73, 0x656e645f, 0x64617461, 0x5f726561,
+0x64790000, 0x2b685f64, 0x6d615f72, 0x645f6173,
+0x73697374, 0x0, 0x74436b73, 0x6d4f6666,
+0x0, 0x2b685f73, 0x656e645f, 0x62645f72,
+0x65616479, 0x0, 0x68737453, 0x52696e67,
+0x0, 0x62616453, 0x52696e67, 0x0,
+0x6e696353, 0x52696e67, 0x0, 0x77446d61,
+0x416c6c41, 0x0, 0x2b715f64, 0x6d615f74,
+0x6f5f686f, 0x73745f63, 0x6b73756d, 0x0,
+0x2b685f6d, 0x61635f72, 0x785f636f, 0x6d705f63,
+0x6b73756d, 0x0, 0x2b685f64, 0x6d615f77,
+0x725f6173, 0x73697374, 0x5f636b73, 0x756d0000,
+0x72436b73, 0x6d4f6e00, 0x2b715f64, 0x6d615f74,
+0x6f5f686f, 0x73740000, 0x2b685f6d, 0x61635f72,
+0x785f636f, 0x6d700000, 0x2b685f64, 0x6d615f77,
+0x725f6173, 0x73697374, 0x0, 0x72436b73,
+0x6d4f6666, 0x0, 0x2b685f72, 0x6563765f,
+0x62645f72, 0x65616479, 0x0, 0x2b685f72,
+0x6563765f, 0x6a756d62, 0x6f5f6264, 0x5f726561,
+0x64790000, 0x2b685f72, 0x6563765f, 0x6d696e69,
+0x5f62645f, 0x72656164, 0x79000000, 0x2b6d685f,
+0x636f6d6d, 0x616e6400, 0x2b685f74, 0x696d6572,
+0x0, 0x2b685f64, 0x6f5f7570, 0x64617465,
+0x5f74785f, 0x636f6e73, 0x0, 0x2b685f64,
+0x6f5f7570, 0x64617465, 0x5f72785f, 0x70726f64,
+0x0, 0x2b636b73, 0x756d3136, 0x0,
+0x2b706565, 0x6b5f6d61, 0x635f7278, 0x0,
+0x2b646571, 0x5f6d6163, 0x5f727800, 0x2b685f6d,
+0x61635f72, 0x785f6174, 0x746e0000, 0x62616452,
+0x6574537a, 0x0, 0x72784264, 0x4266537a,
+0x0, 0x2b6e756c, 0x6c5f6861, 0x6e646c65,
+0x72000000, 0x66774f70, 0x4661696c, 0x0,
+0x2b685f75, 0x70646174, 0x655f6c65, 0x64360000,
+0x2b685f75, 0x70646174, 0x655f6c65, 0x64320000,
+0x696e7453, 0x74617465, 0x0, 0x2a2a696e,
+0x69744370, 0x0, 0x23736372, 0x65616d00,
+0x69537461, 0x636b4572, 0x0, 0x70726f62,
+0x654d656d, 0x0, 0x2a2a4441, 0x574e5f42,
+0x0, 0x2b73775f, 0x646d615f, 0x61737369,
+0x73745f70, 0x6c75735f, 0x74696d65, 0x72000000,
+0x2b267072, 0x656c6f61, 0x645f7772, 0x5f646573,
+0x63720000, 0x2b267072, 0x656c6f61, 0x645f7264,
+0x5f646573, 0x63720000, 0x2b685f68, 0x665f7469,
+0x6d657200, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x74696d65, 0x722e632c, 0x7620312e, 0x312e322e,
+0x33352031, 0x3939392f, 0x30312f32, 0x37203139,
+0x3a30393a, 0x35302068, 0x61796573, 0x20457870,
+0x20240000, 0x65767452, 0x6e674600, 0x51657674,
+0x46000000, 0x51657674, 0x505f4600, 0x4d657674,
+0x526e6746, 0x0, 0x4d516576, 0x74460000,
+0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46,
+0x0, 0x5173436f, 0x6e734600, 0x51725072,
+0x6f644600, 0x542d446d, 0x61526432, 0x0,
+0x542d446d, 0x61526431, 0x0, 0x542d446d,
+0x61526442, 0x0, 0x542d446d, 0x61577232,
+0x0, 0x542d446d, 0x61577231, 0x0,
+0x542d446d, 0x61577242, 0x0, 0x0,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x636f6d6d, 0x616e642e, 0x632c7620, 0x312e312e,
+0x322e3238, 0x20313939, 0x392f3031, 0x2f323020,
+0x31393a34, 0x393a3439, 0x20736875, 0x616e6720,
+0x45787020, 0x24000000, 0x65767452, 0x6e674600,
+0x51657674, 0x46000000, 0x51657674, 0x505f4600,
+0x4d657674, 0x526e6746, 0x0, 0x4d516576,
+0x74460000, 0x4d516576, 0x505f4600, 0x5173436f,
+0x6e495f46, 0x0, 0x5173436f, 0x6e734600,
+0x51725072, 0x6f644600, 0x3f48636d, 0x644d6278,
+0x0, 0x3f636d64, 0x48737453, 0x0,
+0x3f636d64, 0x4d634d64, 0x0, 0x3f636d64,
+0x50726f6d, 0x0, 0x3f636d64, 0x4c696e6b,
+0x0, 0x3f636d64, 0x45727200, 0x811c,
+0x8898, 0x8898, 0x8820, 0x85c4,
+0x886c, 0x8898, 0x81f4, 0x8258,
+0x83dc, 0x84b4, 0x8480, 0x8898,
+0x82bc, 0x8570, 0x8898, 0x8580,
+0x8218, 0x827c, 0x0, 0x0,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x6d636173, 0x742e632c, 0x7620312e, 0x312e322e,
+0x38203139, 0x39382f31, 0x322f3038, 0x2030323a,
+0x33363a33, 0x36207368, 0x75616e67, 0x20457870,
+0x20240000, 0x65767452, 0x6e674600, 0x51657674,
+0x46000000, 0x51657674, 0x505f4600, 0x4d657674,
+0x526e6746, 0x0, 0x4d516576, 0x74460000,
+0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46,
+0x0, 0x5173436f, 0x6e734600, 0x51725072,
+0x6f644600, 0x6164644d, 0x63447570, 0x0,
+0x6164644d, 0x6346756c, 0x0, 0x64656c4d,
+0x634e6f45, 0x0, 0x0, 0x0,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x646d612e, 0x632c7620, 0x312e312e, 0x322e3234,
+0x20313939, 0x382f3132, 0x2f323120, 0x30303a33,
+0x333a3039, 0x20736875, 0x616e6720, 0x45787020,
+0x24000000, 0x65767452, 0x6e674600, 0x51657674,
+0x46000000, 0x51657674, 0x505f4600, 0x4d657674,
+0x526e6746, 0x0, 0x4d516576, 0x74460000,
+0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46,
+0x0, 0x5173436f, 0x6e734600, 0x51725072,
+0x6f644600, 0x7377446d, 0x614f6666, 0x0,
+0x31446d61, 0x4f6e0000, 0x7377446d, 0x614f6e00,
+0x2372446d, 0x6141544e, 0x0, 0x72446d61,
+0x41544e30, 0x0, 0x72446d61, 0x41544e31,
+0x0, 0x2a50414e, 0x49432a00, 0x2e2e2f2e,
+0x2e2f2e2e, 0x2f2e2e2f, 0x2e2e2f73, 0x72632f6e,
+0x69632f66, 0x77322f63, 0x6f6d6d6f, 0x6e2f646d,
+0x612e6300, 0x2377446d, 0x6141544e, 0x0,
+0x77446d61, 0x41544e30, 0x0, 0x77446d61,
+0x41544e31, 0x0, 0x0, 0x0,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x74726163, 0x652e632c, 0x7620312e, 0x312e322e,
+0x35203139, 0x39382f30, 0x392f3330, 0x2031383a,
+0x35303a32, 0x38207368, 0x75616e67, 0x20457870,
+0x20240000, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x64617461, 0x2e632c76, 0x20312e31, 0x2e322e31,
+0x32203139, 0x39392f30, 0x312f3230, 0x2031393a,
+0x34393a35, 0x31207368, 0x75616e67, 0x20457870,
+0x20240000, 0x46575f56, 0x45525349, 0x4f4e3a20,
+0x2331204d, 0x6f6e2046, 0x65622031, 0x2031373a,
+0x30313a30, 0x36205053, 0x54203139, 0x39390000,
+0x46575f43, 0x4f4d5049, 0x4c455f54, 0x494d453a,
+0x2031373a, 0x30313a30, 0x36000000, 0x46575f43,
+0x4f4d5049, 0x4c455f42, 0x593a2064, 0x65767263,
+0x73000000, 0x46575f43, 0x4f4d5049, 0x4c455f48,
+0x4f53543a, 0x20636f6d, 0x70757465, 0x0,
+0x46575f43, 0x4f4d5049, 0x4c455f44, 0x4f4d4149,
+0x4e3a2065, 0x6e672e61, 0x6374656f, 0x6e2e636f,
+0x6d000000, 0x46575f43, 0x4f4d5049, 0x4c45523a,
+0x20676363, 0x20766572, 0x73696f6e, 0x20322e37,
+0x2e320000, 0x0, 0x12030303, 0x0,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x6d656d2e, 0x632c7620, 0x312e312e, 0x322e3520,
+0x31393938, 0x2f30392f, 0x33302031, 0x383a3530,
+0x3a303820, 0x73687561, 0x6e672045, 0x78702024,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x73656e64, 0x2e632c76, 0x20312e31, 0x2e322e34,
+0x34203139, 0x39382f31, 0x322f3231, 0x2030303a,
+0x33333a31, 0x38207368, 0x75616e67, 0x20457870,
+0x20240000, 0x65767452, 0x6e674600, 0x51657674,
+0x46000000, 0x51657674, 0x505f4600, 0x4d657674,
+0x526e6746, 0x0, 0x4d516576, 0x74460000,
+0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46,
+0x0, 0x5173436f, 0x6e734600, 0x51725072,
+0x6f644600, 0x69736e74, 0x54637055, 0x0,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x72656376, 0x2e632c76, 0x20312e31, 0x2e322e35,
+0x33203139, 0x39392f30, 0x312f3136, 0x2030323a,
+0x35353a34, 0x33207368, 0x75616e67, 0x20457870,
+0x20240000, 0x65767452, 0x6e674600, 0x51657674,
+0x46000000, 0x51657674, 0x505f4600, 0x4d657674,
+0x526e6746, 0x0, 0x4d516576, 0x74460000,
+0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46,
+0x0, 0x5173436f, 0x6e734600, 0x51725072,
+0x6f644600, 0x72784672, 0x6d324c67, 0x0,
+0x72784e6f, 0x53744264, 0x0, 0x72784e6f,
+0x4d694264, 0x0, 0x72784e6f, 0x4a6d4264,
+0x0, 0x7278436b, 0x446d6146, 0x0,
+0x72785144, 0x6d457846, 0x0, 0x72785144,
+0x6d614600, 0x72785144, 0x4c426446, 0x0,
+0x72785144, 0x6d426446, 0x0, 0x72784372,
+0x63506164, 0x0, 0x72536d51, 0x446d6146,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x6d61632e, 0x632c7620, 0x312e312e, 0x322e3232,
+0x20313939, 0x382f3132, 0x2f303820, 0x30323a33,
+0x363a3330, 0x20736875, 0x616e6720, 0x45787020,
+0x24000000, 0x65767452, 0x6e674600, 0x51657674,
+0x46000000, 0x51657674, 0x505f4600, 0x4d657674,
+0x526e6746, 0x0, 0x4d516576, 0x74460000,
+0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46,
+0x0, 0x5173436f, 0x6e734600, 0x51725072,
+0x6f644600, 0x6d616354, 0x68726573, 0x0,
+0x23744d61, 0x6341544e, 0x0, 0x23724d61,
+0x6341544e, 0x0, 0x72656d41, 0x73737274,
+0x0, 0x6c696e6b, 0x444f574e, 0x0,
+0x6c696e6b, 0x55500000, 0x0, 0x0,
+0x0, 0x24486561, 0x6465723a, 0x202f7072,
+0x6f6a6563, 0x74732f72, 0x63732f73, 0x772f6765,
+0x2f6e6963, 0x2f667732, 0x2f636f6d, 0x6d6f6e2f,
+0x636b7375, 0x6d2e632c, 0x7620312e, 0x312e322e,
+0x39203139, 0x39392f30, 0x312f3134, 0x2030303a,
+0x30333a34, 0x38207368, 0x75616e67, 0x20457870,
+0x20240000, 0x65767452, 0x6e674600, 0x51657674,
+0x46000000, 0x51657674, 0x505f4600, 0x4d657674,
+0x526e6746, 0x0, 0x4d516576, 0x74460000,
+0x4d516576, 0x505f4600, 0x5173436f, 0x6e495f46,
+0x0, 0x5173436f, 0x6e734600, 0x51725072,
+0x6f644600, 0x50726f62, 0x65506879, 0x0,
+0x6c6e6b41, 0x53535254, 0x0, 0xff04,
+0xff34, 0xff4c, 0xff78, 0xffa4,
+0xffb8, 0xfff4, 0x10394, 0x10174,
+0x101ac, 0x100a4, 0x10200, 0x10228,
+0x1025c, 0x100e8, 0x10394, 0x10174,
+0x101ac, 0x101d0, 0x10200, 0x10228,
+0x1025c, 0x10288, 0x0, 0x0,
+0x0, 0x1097c, 0x10a4c, 0x10b24,
+0x10bf4, 0x10c50, 0x10d2c, 0x10d54,
+0x10e30, 0x10e58, 0x11000, 0x11028,
+0x111d0, 0x113c8, 0x1165c, 0x11570,
+0x1165c, 0x11688, 0x111f8, 0x113a0,
+0x0, 0x1198c, 0x119cc, 0x11a5c,
+0x11aa0, 0x11b04, 0x11b90, 0x11bc4,
+0x11c4c, 0x11ce4, 0x11db4, 0x11df4,
+0x11e78, 0x11e9c, 0x11fac, 0x646f4261,
+0x73655067, 0x0, 0x0, 0x0,
+0x0, 0x73746d61, 0x634c4e4b, 0x0,
+0x0, 0x0 };
+u32 tigon2FwData[(MAX_DATA_LEN/4) + 1] __initdata = {
+0x1,
+0x1, 0x1, 0xc001fc, 0x3ffc,
+0xc00000, 0x416c7465, 0x6f6e2041, 0x63654e49,
+0x43205600, 0x0, 0x0, 0x416c7465,
+0x6f6e2041, 0x63654e49, 0x43205600, 0x42424242,
+0x0, 0x0, 0x0, 0x1ffffc,
+0x1fff7c, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x60cf00,
+0x60, 0xcf000000, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x3, 0x0,
+0x1, 0x0, 0x0, 0x1,
+0x0, 0x0, 0x0, 0x1,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x1000000, 0x21000000, 0x12000140,
+0x0, 0x0, 0x20000000, 0x120000a0,
+0x0, 0x12000060, 0x12000180, 0x120001e0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x2,
+0x0, 0x0, 0x30001, 0x1,
+0x30201, 0x0, 0x0, 0x0 };
diff -u --recursive --new-file v2.2.3/linux/drivers/net/bsd_comp.c linux/drivers/net/bsd_comp.c
--- v2.2.3/linux/drivers/net/bsd_comp.c Sat Nov 29 10:33:19 1997
+++ linux/drivers/net/bsd_comp.c Wed Mar 10 16:51:35 1999
@@ -70,7 +70,6 @@
X #include <linux/vmalloc.h>
X #include <linux/tty.h>
X #include <linux/errno.h>
-#include <linux/sched.h> /* to get the struct task_struct */
X #include <linux/string.h> /* used in new tty drivers */
X #include <linux/signal.h> /* used in new tty drivers */
X
diff -u --recursive --new-file v2.2.3/linux/drivers/net/cs89x0.c linux/drivers/net/cs89x0.c
--- v2.2.3/linux/drivers/net/cs89x0.c Sun Nov 8 14:03:00 1998
+++ linux/drivers/net/cs89x0.c Wed Mar 10 16:51:35 1999
@@ -991,22 +991,26 @@
X 0, 0,
X 0, 0, 0, NULL, NULL };
X
-int io=0;
-int irq=0;
-#endif
-#ifdef MODULE
-int debug=1;
-char *media="auto";
-char *duplex="f";
+static int io=0;
+static int irq=0;
+static int debug=0;
+static char media[8];
+static int duplex=-1;
+
+MODULE_PARM(io, "i");
+MODULE_PARM(irq, "i");
+MODULE_PARM(debug, "i");
+MODULE_PARM(media, "s");
+MODULE_PARM(duplex, "i");
+
+EXPORT_NO_SYMBOLS;
X
X /*
X * media=t - specify media type
X or media=2
X or media=aui
X or medai=auto
-* duplex=f - specify forced half/full/autonegotiate duplex
- or duplex=h
- or duplex=auto
+* duplex=0 - specify forced half/full/autonegotiate duplex
X * debug=# - debug level
X
X
@@ -1044,12 +1048,14 @@
X /* boy, they'd better get these right */
X if (!strcmp(media, "rj45"))
X lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
- if (!strcmp(media, "aui"))
+ else if (!strcmp(media, "aui"))
X lp->adapter_cnf = A_CNF_MEDIA_AUI | A_CNF_AUI;
- if (!strcmp(media, "bnc"))
+ else if (!strcmp(media, "bnc"))
X lp->adapter_cnf = A_CNF_MEDIA_10B_2 | A_CNF_10B_2;
+ else
+ lp->adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T;
X
- if (!strcmp(duplex, "auto"))
+ if (duplex==-1)
X lp->auto_neg_cnf = AUTO_NEG_ENABLE;
X
X if (io == 0) {
diff -u --recursive --new-file v2.2.3/linux/drivers/net/ibmtr.c linux/drivers/net/ibmtr.c
--- v2.2.3/linux/drivers/net/ibmtr.c Mon Jan 25 17:44:34 1999
+++ linux/drivers/net/ibmtr.c Tue Mar 16 14:21:51 1999
@@ -70,6 +70,9 @@
X * Changes by Joel Sloan (j...@c-me.com) :
X * + disable verbose debug messages by default - to enable verbose
X * debugging, edit the IBMTR_DEBUG_MESSAGES define below
+ *
+ * Changes by Tim Hockin (tho...@isunix.it.ilstu.edu) :
+ * + added spinlocks for SMP sanity (10 March 1999)
X */
X
X /* change the define of IBMTR_DEBUG_MESSAGES to a nonzero value
@@ -144,6 +147,7 @@
X #include <net/checksum.h>
X
X #include <asm/io.h>
+#include <asm/spinlock.h>
X #include <asm/system.h>
X #include <asm/bitops.h>
X
@@ -754,6 +758,9 @@
X {
X struct tok_info *ti=(struct tok_info *)dev->priv;
X
+ /* init the spinlock */
+ ti->lock = (spinlock_t) SPIN_LOCK_UNLOCKED;
+
X if (ti->open_status==CLOSED) tok_init_card(dev);
X
X if (ti->open_status==IN_PROGRESS) sleep_on(&ti->wait_for_reset);
@@ -806,6 +813,7 @@
X DPRINTK("Int from tok_driver, dev : %p\n",dev);
X #endif
X ti = (struct tok_info *) dev->priv;
+ spin_lock(&(ti->lock));
X
X /* Disable interrupts till processing is finished */
X dev->interrupt=1;
@@ -832,6 +840,7 @@
X if (status == 0xFF)
X {
X DPRINTK("PCMCIA card removed.\n");
+ spin_unlock(&(ti->lock));
X dev->interrupt = 0;
X return;
X }
@@ -840,6 +849,7 @@
X if ( readb (ti->mmio + ACA_OFFSET + ACA_RW + ISRP_EVEN) == 0xFF)
X {
X DPRINTK("PCMCIA card removed.\n");
+ spin_unlock(&(ti->lock));
X dev->interrupt = 0;
X return;
X }
@@ -1167,6 +1177,7 @@
X DPRINTK("Unexpected interrupt from tr adapter\n");
X
X }
+ spin_unlock(&(ti->lock));
X }
X
X static void initial_tok_int(struct device *dev)
@@ -1598,12 +1609,19 @@
X if (test_and_set_bit(0,(void *)&dev->tbusy)!=0)
X DPRINTK("Transmitter access conflict\n");
X else {
+ int flags;
+
+ /* lock against other CPUs */
+ spin_lock_irqsave(&(ti->lock), flags);
+
X /* Save skb; we'll need it when the adapter asks for the data */
X ti->current_skb=skb;
X writeb(XMIT_UI_FRAME, ti->srb + offsetof(struct srb_xmit, command));
X writew(ti->exsap_station_id, ti->srb
X +offsetof(struct srb_xmit, station_id));
X writeb(CMD_IN_SRB, (ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD));
+ spin_unlock_irqrestore(&(ti->lock), flags);
+
X dev->trans_start=jiffies;
X }
X
diff -u --recursive --new-file v2.2.3/linux/drivers/net/ibmtr.h linux/drivers/net/ibmtr.h
--- v2.2.3/linux/drivers/net/ibmtr.h Tue Jul 28 14:21:08 1998
+++ linux/drivers/net/ibmtr.h Tue Mar 16 14:21:52 1999
@@ -217,6 +217,7 @@
X unsigned char ring_speed;
X __u32 func_addr;
X unsigned int retry_count;
+ spinlock_t lock; /* SMP protection */
X };
X
X /* token ring adapter commands */
diff -u --recursive --new-file v2.2.3/linux/drivers/net/mace.c linux/drivers/net/mace.c
--- v2.2.3/linux/drivers/net/mace.c Mon Oct 5 13:13:39 1998
+++ linux/drivers/net/mace.c Wed Mar 10 21:48:46 1999
@@ -4,6 +4,12 @@
X *
X * Copyright (C) 1996 Paul Mackerras.
X */
+
+#ifdef MODULE
+#include <linux/module.h>
+#include <linux/version.h>
+#endif
+
X #include <linux/kernel.h>
X #include <linux/netdevice.h>
X #include <linux/etherdevice.h>
@@ -16,6 +22,10 @@
X #include <asm/pgtable.h>
X #include "mace.h"
X
+#ifdef MODULE
+static struct device *mace_devs = NULL;
+#endif
+
X #define N_RX_RING 8
X #define N_TX_RING 6
X #define MAX_TX_ACTIVE 1
@@ -71,6 +81,9 @@
X static void mace_rxdma_intr(int irq, void *dev_id, struct pt_regs *regs);
X static void mace_set_timeout(struct device *dev);
X static void mace_tx_timeout(unsigned long data);
+static inline void dbdma_reset(volatile struct dbdma_regs *dma);
+static inline void mace_clean_rings(struct mace_data *mp);
+static void __mace_set_address(struct device *dev, void *addr);
X
X /*
X * If we can't get a skbuff when we need it, we use this area for DMA.
@@ -78,7 +91,7 @@
X static unsigned char dummy_buf[RX_BUFLEN+2];
X
X /* Bit-reverse one byte of an ethernet hardware address. */
-static int
+static inline int
X bitrev(int b)
X {
X int d = 0, i;
@@ -144,7 +157,8 @@
X dev->dev_addr[j] = rev? bitrev(addr[j]): addr[j];
X printk("%c%.2x", (j? ':': ' '), dev->dev_addr[j]);
X }
- printk("\n");
+ printk(", chip revision %d.%d\n",
+ in_8(&mp->mace->chipid_hi), in_8(&mp->mace->chipid_lo));
X
X mp = (struct mace_data *) dev->priv;
X mp->maccc = ENXMT | ENRCV;
@@ -193,6 +207,21 @@
X return 0;
X }
X
+static void dbdma_reset(volatile struct dbdma_regs *dma)
+{
+ int i;
+
+ out_le32(&dma->control, (WAKE|FLUSH|PAUSE|RUN) << 16);
+
+ /*
+ * Yes this looks peculiar, but apparently it needs to be this
+ * way on some machines.
+ */
+ for (i = 200; i > 0; --i)
+ if (ld_le32(&dma->control) & RUN)
+ udelay(1);
+}
+
X static void mace_reset(struct device *dev)
X {
X struct mace_data *mp = (struct mace_data *) dev->priv;
@@ -203,14 +232,14 @@
X i = 200;
X while (--i) {
X out_8(&mb->biucc, SWRST);
- if (mb->biucc & SWRST) {
- udelay(20);
+ if (in_8(&mb->biucc) & SWRST) {
+ udelay(10);
X continue;
X }
X break;
X }
X if (!i) {
- printk("mace: cannot reset chip!\n");
+ printk(KERN_ERR "mace: cannot reset chip!\n");
X return;
X }
X
@@ -218,19 +247,14 @@
X i = in_8(&mb->ir);
X out_8(&mb->maccc, 0); /* turn off tx, rx */
X
- mb->biucc = XMTSP_64;
- mb->utr = RTRD;
- mb->fifocc = RCVFW_32 | XMTFW_16 | XMTFWU | RCVFWU | XMTBRST;
- mb->xmtfc = AUTO_PAD_XMIT; /* auto-pad short frames */
- mb->rcvfc = 0;
+ out_8(&mb->biucc, XMTSP_64);
+ out_8(&mb->utr, RTRD);
+ out_8(&mb->fifocc, RCVFW_32 | XMTFW_16 | XMTFWU | RCVFWU | XMTBRST);
+ out_8(&mb->xmtfc, AUTO_PAD_XMIT); /* auto-pad short frames */
+ out_8(&mb->rcvfc, 0);
X
X /* load up the hardware address */
- out_8(&mb->iac, ADDRCHG | PHYADDR);
- while ((in_8(&mb->iac) & ADDRCHG) != 0)
- ;
- for (i = 0; i < 6; ++i) {
- out_8(&mb->padr, dev->dev_addr[i]);
- }
+ __mace_set_address(dev, dev->dev_addr);
X
X /* clear the multicast filter */
X out_8(&mb->iac, ADDRCHG | LOGADDR);
@@ -245,23 +269,30 @@
X out_8(&mb->plscc, PORTSEL_GPSI + ENPLSIO);
X }
X
-static int mace_set_address(struct device *dev, void *addr)
+static void __mace_set_address(struct device *dev, void *addr)
X {
+ volatile struct mace *mb = ((struct mace_data *) dev->priv)->mace;
X unsigned char *p = addr;
- struct mace_data *mp = (struct mace_data *) dev->priv;
- volatile struct mace *mb = mp->mace;
X int i;
- unsigned long flags;
-
- save_flags(flags); cli();
X
X /* load up the hardware address */
X out_8(&mb->iac, ADDRCHG | PHYADDR);
X while ((in_8(&mb->iac) & ADDRCHG) != 0)
X ;
- for (i = 0; i < 6; ++i) {
+ for (i = 0; i < 6; ++i)
X out_8(&mb->padr, dev->dev_addr[i] = p[i]);
- }
+}
+
+static int mace_set_address(struct device *dev, void *addr)
+{
+ struct mace_data *mp = (struct mace_data *) dev->priv;
+ volatile struct mace *mb = mp->mace;
+ unsigned long flags;
+
+ save_flags(flags); cli();
+
+ __mace_set_address(dev, addr);
+
X out_8(&mb->iac, 0);
X /* note: setting ADDRCHG clears ENRCV */
X out_8(&mb->maccc, mp->maccc);
@@ -285,6 +316,7 @@
X mace_reset(dev);
X
X /* initialize list of sk_buffs for receiving and set up recv dma */
+ mace_clean_rings(mp);
X memset((char *)mp->rx_cmds, 0, N_RX_RING * sizeof(struct dbdma_cmd));
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 29'
echo 'File patch-2.2.4 is continued in part 30'
echo 30 > _shar_seq_.tmp
#!/bin/sh
# this is part 27 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 27; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+0x934205b0, 0x10000048, 0x304200bf, 0x934205b0,
+0x8f440240, 0x8f450244, 0x8f4301a4, 0x304200bf,
+0x14a30006, 0xa34205b0, 0x8f420260, 0x8f430264,
+0x8f4401a8, 0x1064000b, 0x0, 0x8f420240,
+0x8f430244, 0x934405b0, 0x8f460260, 0x8f470264,
+0x38840020, 0xaf4301a4, 0xaf4701a8, 0x10000033,
+0xa34405b0, 0x934205b0, 0x1000002f, 0x34420020,
+0x934205b0, 0x8f4300d4, 0x34420020, 0xa34205b0,
+0x24620001, 0x10000023, 0x28630033, 0x8f4200e4,
+0x8f4300e0, 0x24420001, 0xaf4200e4, 0x43102a,
+0x14400006, 0x24030001, 0x8f4200e8, 0x14430002,
+0xaf4000e4, 0x24030004, 0xaf4300e8, 0x8f420004,
+0x30420001, 0x1040000d, 0x3c020400, 0x2c21024,
+0x10400007, 0x0, 0x934205b0, 0x34420040,
+0xa34205b0, 0x934205b0, 0x1000000f, 0x304200df,
+0x934205b0, 0x1000000c, 0x34420060, 0x934205b0,
+0x8f4300d4, 0x34420020, 0xa34205b0, 0x24620001,
+0x286300fb, 0x14600005, 0xaf4200d4, 0x934205b0,
+0xaf4000d4, 0x38420040, 0xa34205b0, 0x934205b0,
+0x8f4300e8, 0x3042007f, 0xa34205b0, 0x24020001,
+0x14620005, 0x0, 0x934405b0, 0x42102,
+0x10000003, 0x348400f0, 0x934405b0, 0x3484000f,
+0xc004b04, 0x0, 0x2402ff7f, 0x282a024,
+0x8fbf0048, 0x8fbe0044, 0x8fb50040, 0x8fb3003c,
+0x8fb20038, 0x8fb10034, 0x8fb00030, 0x3e00008,
+0x27bd0050, 0x3e00008, 0x0, 0x27bdffb0,
+0x274401b0, 0x26e30028, 0x24650400, 0x65102b,
+0xafbf0048, 0xafbe0044, 0xafb50040, 0xafb3003c,
+0xafb20038, 0xafb10034, 0x10400007, 0xafb00030,
+0x8c820000, 0xac620000, 0x24630004, 0x65102b,
+0x1440fffb, 0x24840004, 0x8c020080, 0xaee20044,
+0x8c0200c0, 0xaee20040, 0x8c020084, 0xaee20030,
+0x8c020084, 0xaee2023c, 0x8c020088, 0xaee20240,
+0x8c02008c, 0xaee20244, 0x8c020090, 0xaee20248,
+0x8c020094, 0xaee2024c, 0x8c020098, 0xaee20250,
+0x8c02009c, 0xaee20254, 0x8c0200a0, 0xaee20258,
+0x8c0200a4, 0xaee2025c, 0x8c0200a8, 0xaee20260,
+0x8c0200ac, 0xaee20264, 0x8c0200b0, 0xaee20268,
+0x8c0200b4, 0xaee2026c, 0x8c0200b8, 0xaee20270,
+0x8c0200bc, 0x24040001, 0xaee20274, 0xaee00034,
+0x41080, 0x571021, 0x8ee30034, 0x8c42023c,
+0x24840001, 0x621821, 0x2c82000f, 0xaee30034,
+0x1440fff8, 0x41080, 0x8c0200cc, 0xaee20048,
+0x8c0200d0, 0xaee2004c, 0x8c0200e0, 0xaee201f8,
+0x8c0200e4, 0xaee201fc, 0x8c0200e8, 0xaee20200,
+0x8c0200ec, 0xaee20204, 0x8c0200f0, 0xaee20208,
+0x8ee400c0, 0x8ee500c4, 0x8c0200fc, 0x45102b,
+0x1040000b, 0x0, 0x8ee200c0, 0x8ee300c4,
+0x24040001, 0x24050000, 0x651821, 0x65302b,
+0x441021, 0x461021, 0xaee200c0, 0xaee300c4,
+0x8c0200fc, 0x8ee400c0, 0x8ee500c4, 0x2408ffff,
+0x24090000, 0x401821, 0x1021, 0x882024,
+0xa92824, 0x822025, 0xa32825, 0xaee400c0,
+0xaee500c4, 0x8ee400d0, 0x8ee500d4, 0x8c0200f4,
+0x45102b, 0x1040000b, 0x0, 0x8ee200d0,
+0x8ee300d4, 0x24040001, 0x24050000, 0x651821,
+0x65302b, 0x441021, 0x461021, 0xaee200d0,
+0xaee300d4, 0x8c0200f4, 0x8ee400d0, 0x8ee500d4,
+0x401821, 0x1021, 0x882024, 0xa92824,
+0x822025, 0xa32825, 0xaee400d0, 0xaee500d4,
+0x8ee400c8, 0x8ee500cc, 0x8c0200f8, 0x45102b,
+0x1040000b, 0x0, 0x8ee200c8, 0x8ee300cc,
+0x24040001, 0x24050000, 0x651821, 0x65302b,
+0x441021, 0x461021, 0xaee200c8, 0xaee300cc,
+0x8c0200f8, 0x8ee400c8, 0x8ee500cc, 0x401821,
+0x1021, 0x882024, 0xa92824, 0x822025,
+0xa32825, 0x24020008, 0xaee400c8, 0xaee500cc,
+0xafa20010, 0xafa00014, 0x8f42000c, 0x8c040208,
+0x8c05020c, 0xafa20018, 0x8f42010c, 0x26e60028,
+0x40f809, 0x24070400, 0x104000f0, 0x3c020400,
+0xafa20020, 0x934205b7, 0x10400089, 0x1821,
+0x8f5e0018, 0x27aa0020, 0x240200ff, 0x13c20002,
+0xafaa002c, 0x27c30001, 0x8c020228, 0x609021,
+0x1642000e, 0x1e38c0, 0x8f42032c, 0x24420001,
+0xaf42032c, 0x8f42032c, 0x8c020228, 0x3c040001,
+0x24843168, 0x3c050009, 0xafa00014, 0xafa20010,
+0x8fa60020, 0x1000006b, 0x34a50500, 0xf71021,
+0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4,
+0x8f830054, 0x8f820054, 0x247003e8, 0x2021023,
+0x2c4203e9, 0x1040001b, 0x9821, 0xe08821,
+0x263504c0, 0x8f440168, 0x8f45016c, 0x2201821,
+0x240a0004, 0xafaa0010, 0xafb20014, 0x8f48000c,
+0x1021, 0x2f53021, 0xafa80018, 0x8f48010c,
+0x24070008, 0xa32821, 0xa3482b, 0x822021,
+0x100f809, 0x892021, 0x54400006, 0x24130001,
+0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9,
+0x0, 0x326200ff, 0x54400017, 0xaf520018,
+0x8f420368, 0x24420001, 0xaf420368, 0x8f420368,
+0x8f820120, 0x8faa002c, 0xafa20010, 0x8f820124,
+0x3c040001, 0x24843174, 0x3c050009, 0xafa20014,
+0x8d460000, 0x10000033, 0x34a50600, 0x8f4202f8,
+0x24130001, 0x24420001, 0xaf4202f8, 0x8f4202f8,
+0x1000001c, 0x326200ff, 0x8f830054, 0x8f820054,
+0x247003e8, 0x2021023, 0x2c4203e9, 0x10400014,
+0x9821, 0x24110010, 0x8f42000c, 0x8f440150,
+0x8f450154, 0x8f860120, 0xafb10010, 0xafb20014,
+0xafa20018, 0x8f42010c, 0x24070008, 0x40f809,
+0x24c6001c, 0x1440ffe5, 0x0, 0x8f820054,
+0x2021023, 0x2c4203e9, 0x1440ffef, 0x0,
+0x326200ff, 0x54400012, 0x24020001, 0x8f420368,
+0x24420001, 0xaf420368, 0x8f420368, 0x8f820120,
+0x8faa002c, 0xafa20010, 0x8f820124, 0x3c040001,
+0x2484317c, 0x3c050009, 0xafa20014, 0x8d460000,
+0x34a50700, 0xc0029d3, 0x3c03821, 0x1021,
+0x1440005b, 0x24020001, 0x10000065, 0x0,
+0x8f510018, 0x240200ff, 0x12220002, 0x8021,
+0x26300001, 0x8c020228, 0x1602000e, 0x1130c0,
+0x8f42032c, 0x24420001, 0xaf42032c, 0x8f42032c,
+0x8c020228, 0x3c040001, 0x24843150, 0x3c050009,
+0xafa00014, 0xafa20010, 0x8fa60020, 0x1000003f,
+0x34a50100, 0xd71021, 0x8fa30020, 0x8fa40024,
+0xac4304c0, 0xac4404c4, 0xc01821, 0x8f440168,
+0x8f45016c, 0x1021, 0x24070004, 0xafa70010,
+0xafb00014, 0x8f48000c, 0x24c604c0, 0x2e63021,
+0xafa80018, 0x8f48010c, 0x24070008, 0xa32821,
+0xa3482b, 0x822021, 0x100f809, 0x892021,
+0x1440000b, 0x24070008, 0x8f820120, 0xafa20010,
+0x8f820124, 0x3c040001, 0x24843158, 0x3c050009,
+0xafa20014, 0x8fa60020, 0x1000001c, 0x34a50200,
+0x8f440150, 0x8f450154, 0x8f43000c, 0xaf500018,
+0x8f860120, 0x24020010, 0xafa20010, 0xafb00014,
+0xafa30018, 0x8f42010c, 0x40f809, 0x24c6001c,
+0x54400011, 0x24020001, 0x8f420330, 0x24420001,
+0xaf420330, 0x8f420330, 0x8f820120, 0xafa20010,
+0x8f820124, 0x3c040001, 0x24843160, 0x3c050009,
+0xafa20014, 0x8fa60020, 0x34a50300, 0xc0029d3,
+0x2203821, 0x1021, 0x1040000d, 0x24020001,
+0x8f4202d8, 0xa34005b7, 0xaf4001a0, 0x24420001,
+0xaf4202d8, 0x8f4202d8, 0x8ee20150, 0x24420001,
+0xaee20150, 0x10000003, 0x8ee20150, 0x24020001,
+0xa34205b7, 0x8fbf0048, 0x8fbe0044, 0x8fb50040,
+0x8fb3003c, 0x8fb20038, 0x8fb10034, 0x8fb00030,
+0x3e00008, 0x27bd0050, 0x27bdffd8, 0xafbf0020,
+0x8f8200b0, 0x30420004, 0x10400068, 0x0,
+0x8f43011c, 0x8f820104, 0x14620005, 0x0,
+0x8f430124, 0x8f8200b4, 0x10620006, 0x0,
+0x8f820104, 0xaf42011c, 0x8f8200b4, 0x1000005b,
+0xaf420124, 0x8f8200b0, 0x3c030080, 0x431024,
+0x1040000d, 0x0, 0x8f82011c, 0x34420002,
+0xaf82011c, 0x8f8200b0, 0x2403fffb, 0x431024,
+0xaf8200b0, 0x8f82011c, 0x2403fffd, 0x431024,
+0x1000004a, 0xaf82011c, 0x8f43011c, 0x8f820104,
+0x14620005, 0x0, 0x8f430124, 0x8f8200b4,
+0x10620010, 0x0, 0x8f820104, 0xaf42011c,
+0x8f8200b4, 0x8f43011c, 0xaf420124, 0xafa30010,
+0x8f420124, 0x3c040001, 0x248431a0, 0xafa20014,
+0x8f86011c, 0x8f8700b0, 0x3c050005, 0x10000031,
+0x34a50900, 0x8f42011c, 0xafa20010, 0x8f420124,
+0x3c040001, 0x248431ac, 0xafa20014, 0x8f86011c,
+0x8f8700b0, 0x3c050005, 0xc0029d3, 0x34a51000,
+0x8f82011c, 0x34420002, 0xaf82011c, 0x8f830104,
+0x8f8200b0, 0x34420001, 0xaf8200b0, 0x24020008,
+0xaf830104, 0xafa20010, 0xafa00014, 0x8f42000c,
+0x8c040208, 0x8c05020c, 0xafa20018, 0x8f42010c,
+0x26e60028, 0x40f809, 0x24070400, 0x8f82011c,
+0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201dc,
+0x24420001, 0xaee201dc, 0x8ee201dc, 0x8f42011c,
+0xafa20010, 0x8f420124, 0x3c040001, 0x248431b8,
+0xafa20014, 0x8f86011c, 0x8f8700b0, 0x3c050005,
+0x34a51100, 0xc0029d3, 0x0, 0x8f8200a0,
+0x30420004, 0x10400069, 0x0, 0x8f430120,
+0x8f820124, 0x14620005, 0x0, 0x8f430128,
+0x8f8200a4, 0x10620006, 0x0, 0x8f820124,
+0xaf420120, 0x8f8200a4, 0x1000005c, 0xaf420128,
+0x8f8200a0, 0x3c030080, 0x431024, 0x1040000d,
+0x0, 0x8f82011c, 0x34420002, 0xaf82011c,
+0x8f8200a0, 0x2403fffb, 0x431024, 0xaf8200a0,
+0x8f82011c, 0x2403fffd, 0x431024, 0x1000004b,
+0xaf82011c, 0x8f430120, 0x8f820124, 0x14620005,
+0x0, 0x8f430128, 0x8f8200a4, 0x10620010,
+0x0, 0x8f820124, 0xaf420120, 0x8f8200a4,
+0x8f430120, 0xaf420128, 0xafa30010, 0x8f420128,
+0x3c040001, 0x248431c4, 0xafa20014, 0x8f86011c,
+0x8f8700a0, 0x3c050005, 0x10000032, 0x34a51200,
+0x8f420120, 0xafa20010, 0x8f420128, 0x3c040001,
+0x248431d0, 0xafa20014, 0x8f86011c, 0x8f8700a0,
+0x3c050005, 0xc0029d3, 0x34a51300, 0x8f82011c,
+0x34420002, 0xaf82011c, 0x8f830124, 0x8f8200a0,
+0x34420001, 0xaf8200a0, 0x24020080, 0xaf830124,
+0xafa20010, 0xafa00014, 0x8f420014, 0x8c040208,
+0x8c05020c, 0xafa20018, 0x8f420108, 0x3c060001,
+0x24c63e14, 0x40f809, 0x24070004, 0x8f82011c,
+0x2403fffd, 0x431024, 0xaf82011c, 0x8ee201dc,
+0x24420001, 0xaee201dc, 0x8ee201dc, 0x8f420120,
+0xafa20010, 0x8f420128, 0x3c040001, 0x248431dc,
+0xafa20014, 0x8f86011c, 0x8f8700a0, 0x3c050005,
+0x34a51400, 0xc0029d3, 0x0, 0x8fbf0020,
+0x3e00008, 0x27bd0028, 0x3c081000, 0x24070001,
+0x3c060080, 0x3c050100, 0x8f820070, 0x481024,
+0x1040fffd, 0x0, 0x8f820054, 0x24420005,
+0xaf820078, 0x8c040234, 0x10800016, 0x1821,
+0x3c020001, 0x571021, 0x8c4240e8, 0x24420005,
+0x3c010001, 0x370821, 0xac2240e8, 0x3c020001,
+0x571021, 0x8c4240e8, 0x44102b, 0x14400009,
+0x0, 0x3c030080, 0x3c010001, 0x370821,
+0xac2040e8, 0x3c010001, 0x370821, 0x1000000b,
+0xa02740f0, 0x3c020001, 0x571021, 0x904240f0,
+0x54400006, 0x661825, 0x3c020001, 0x571021,
+0x904240f1, 0x54400001, 0x661825, 0x8c040230,
+0x10800013, 0x0, 0x3c020001, 0x571021,
+0x8c4240ec, 0x24420005, 0x3c010001, 0x370821,
+0xac2240ec, 0x3c020001, 0x571021, 0x8c4240ec,
+0x44102b, 0x14400006, 0x0, 0x3c010001,
+0x370821, 0xac2040ec, 0x10000006, 0x651825,
+0x3c020001, 0x571021, 0x904240f2, 0x54400001,
+0x651825, 0x1060ffbc, 0x0, 0x8f420000,
+0x10400007, 0x0, 0xaf80004c, 0x8f82004c,
+0x1040fffd, 0x0, 0x10000005, 0x0,
+0xaf800048, 0x8f820048, 0x1040fffd, 0x0,
+0x8f820060, 0x431025, 0xaf820060, 0x8f420000,
+0x10400003, 0x0, 0x1000ffa7, 0xaf80004c,
+0x1000ffa5, 0xaf800048, 0x3e00008, 0x0,
+0x0, 0x0, 0x0, 0x27bdffe0,
+0xafbf001c, 0xafb00018, 0x8f860064, 0x30c20004,
+0x10400025, 0x24040004, 0x8c020114, 0xaf420020,
+0xaf840064, 0x8f4202ec, 0x24420001, 0xaf4202ec,
+0x8f4202ec, 0x8f820064, 0x30420004, 0x14400005,
+0x0, 0x8c030114, 0x8f420020, 0x1462fff2,
+0x0, 0x8f420000, 0x10400007, 0x8f43003c,
+0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0,
+0x10000005, 0x0, 0xaf800048, 0x8f820048,
+0x1040fffd, 0x0, 0x8f820060, 0x431025,
+0xaf820060, 0x8f420000, 0x10400073, 0x0,
+0x1000006f, 0x0, 0x30c20008, 0x10400020,
+0x24040008, 0x8c02011c, 0xaf420048, 0xaf840064,
+0x8f420298, 0x24420001, 0xaf420298, 0x8f420298,
+0x8f820064, 0x30420008, 0x14400005, 0x0,
+0x8c03011c, 0x8f420048, 0x1462fff2, 0x0,
+0x8f420000, 0x10400007, 0x0, 0xaf80004c,
+0x8f82004c, 0x1040fffd, 0x0, 0x10000005,
+0x0, 0xaf800048, 0x8f820048, 0x1040fffd,
+0x0, 0x8f820060, 0x1000ffd9, 0x34420200,
+0x30c20020, 0x10400023, 0x24040020, 0x8c02012c,
+0xaf420068, 0xaf840064, 0x8f4202c8, 0x24420001,
+0xaf4202c8, 0x8f4202c8, 0x8f820064, 0x30420020,
+0x14400005, 0x32c24000, 0x8c03012c, 0x8f420068,
+0x1462fff2, 0x32c24000, 0x14400002, 0x3c020001,
+0x2c2b025, 0x8f420000, 0x10400007, 0x0,
+0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0,
+0x10000005, 0x0, 0xaf800048, 0x8f820048,
+0x1040fffd, 0x0, 0x8f820060, 0x1000ffb4,
+0x34420800, 0x30c20010, 0x10400029, 0x24040010,
+0x8c020124, 0xaf420058, 0xaf840064, 0x8f4202c4,
+0x24420001, 0xaf4202c4, 0x8f4202c4, 0x8f820064,
+0x30420010, 0x14400005, 0x32c22000, 0x8c030124,
+0x8f420058, 0x1462fff2, 0x32c22000, 0x50400001,
+0x36d68000, 0x8f420000, 0x10400007, 0x0,
+0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0,
+0x10000005, 0x0, 0xaf800048, 0x8f820048,
+0x1040fffd, 0x0, 0x8f820060, 0x34420100,
+0xaf820060, 0x8f420000, 0x10400003, 0x0,
+0x1000006b, 0xaf80004c, 0x10000069, 0xaf800048,
+0x30c20001, 0x10400004, 0x24020001, 0xaf820064,
+0x10000063, 0x0, 0x30c20002, 0x1440000b,
+0x3c050003, 0x3c040001, 0x248432a4, 0x34a50500,
+0x3821, 0xafa00010, 0xc0029d3, 0xafa00014,
+0x2402ffc0, 0x10000056, 0xaf820064, 0x8c10022c,
+0x8c02010c, 0x12020047, 0x101080, 0x8c450300,
+0x26020001, 0x3050003f, 0x24020003, 0xac10022c,
+0x51e02, 0x10620005, 0x24020010, 0x1062001d,
+0x30a20fff, 0x10000039, 0x0, 0x8f430298,
+0x8f440000, 0x30a20fff, 0xaf420048, 0x24630001,
+0xaf430298, 0x10800007, 0x8f420298, 0xaf80004c,
+0x8f82004c, 0x1040fffd, 0x0, 0x10000005,
+0x0, 0xaf800048, 0x8f820048, 0x1040fffd,
+0x0, 0x8f820060, 0x34420200, 0xaf820060,
+0x8f420000, 0x1040001f, 0x0, 0x1000001b,
+0x0, 0xaf420058, 0x32c22000, 0x50400001,
+0x36d68000, 0x8f4202c4, 0x8f430000, 0x24420001,
+0xaf4202c4, 0x10600007, 0x8f4202c4, 0xaf80004c,
+0x8f82004c, 0x1040fffd, 0x0, 0x10000005,
+0x0, 0xaf800048, 0x8f820048, 0x1040fffd,
+0x0, 0x8f820060, 0x34420100, 0xaf820060,
+0x8f420000, 0x10400003, 0x0, 0x10000005,
+0xaf80004c, 0x10000003, 0xaf800048, 0xc002033,
+0xa02021, 0x8c02010c, 0x16020002, 0x24020002,
+0xaf820064, 0x8f820064, 0x30420002, 0x14400004,
+0x0, 0x8c02010c, 0x1602ffad, 0x0,
+0x8fbf001c, 0x8fb00018, 0x3e00008, 0x27bd0020,
+0x3e00008, 0x0, 0x27bdffa8, 0xafb00038,
+0x808021, 0x101602, 0x2442ffff, 0x304300ff,
+0x2c620013, 0xafbf0050, 0xafbe004c, 0xafb50048,
+0xafb30044, 0xafb20040, 0x104001e6, 0xafb1003c,
+0x31080, 0x3c010001, 0x220821, 0x8c2232e8,
+0x400008, 0x0, 0x101302, 0x30440fff,
+0x24020001, 0x10820005, 0x24020002, 0x1082000a,
+0x2402fffe, 0x10000021, 0x3c050003, 0x8f430004,
+0x3c020001, 0x8c423e40, 0xaf4401f0, 0xaf4401f4,
+0x10000007, 0x34630001, 0x8f430004, 0xaf4401f0,
+0xaf4401f4, 0x621824, 0x3c020001, 0x2442c254,
+0x21100, 0x21182, 0xaf430004, 0x3c030800,
+0x431025, 0x3c010000, 0xac224138, 0x8f840054,
+0x41442, 0x41c82, 0x431021, 0x41cc2,
+0x431023, 0x41d02, 0x431021, 0x41d42,
+0x431023, 0x10000009, 0xaf4201f8, 0x3c040001,
+0x248432b0, 0x34a51000, 0x2003021, 0x3821,
+0xafa00010, 0xc0029d3, 0xafa00014, 0x8f420290,
+0x24420001, 0xaf420290, 0x10000215, 0x8f420290,
+0x27b00028, 0x2002021, 0x24050210, 0xc002a57,
+0x24060008, 0xc0023a0, 0x2002021, 0x1000020c,
+0x0, 0x8c06022c, 0x27a40028, 0x61880,
+0x24c20001, 0x3046003f, 0x8c650300, 0x61080,
+0x8c430300, 0x24c20001, 0x3042003f, 0xac02022c,
+0xafa50028, 0xc0023a0, 0xafa3002c, 0x100001fc,
+0x0, 0x27b00028, 0x2002021, 0x24050210,
+0xc002a57, 0x24060008, 0xc0024df, 0x2002021,
+0x100001f3, 0x0, 0x8c06022c, 0x27a40028,
+0x61880, 0x24c20001, 0x3046003f, 0x8c650300,
+0x61080, 0x8c430300, 0x24c20001, 0x3042003f,
+0xac02022c, 0xafa50028, 0xc0024df, 0xafa3002c,
+0x100001e3, 0x0, 0x101302, 0x30430fff,
+0x24020001, 0x10620005, 0x24020002, 0x1062001e,
+0x3c020002, 0x10000033, 0x3c050003, 0x3c030002,
+0x2c31024, 0x54400037, 0x2c3b025, 0x8f820228,
+0x3c010001, 0x370821, 0xac2238d8, 0x8f82022c,
+0x3c010001, 0x370821, 0xac2238dc, 0x8f820230,
+0x3c010001, 0x370821, 0xac2238e0, 0x8f820234,
+0x3c010001, 0x370821, 0xac2238e4, 0x2402ffff,
+0xaf820228, 0xaf82022c, 0xaf820230, 0xaf820234,
+0x10000020, 0x2c3b025, 0x2c21024, 0x10400012,
+0x3c02fffd, 0x3c020001, 0x571021, 0x8c4238d8,
+0xaf820228, 0x3c020001, 0x571021, 0x8c4238dc,
+0xaf82022c, 0x3c020001, 0x571021, 0x8c4238e0,
+0xaf820230, 0x3c020001, 0x571021, 0x8c4238e4,
+0xaf820234, 0x3c02fffd, 0x3442ffff, 0x10000009,
+0x2c2b024, 0x3c040001, 0x248432bc, 0x34a51100,
+0x2003021, 0x3821, 0xafa00010, 0xc0029d3,
+0xafa00014, 0x8f4202bc, 0x24420001, 0xaf4202bc,
+0x1000019b, 0x8f4202bc, 0x101302, 0x30450fff,
+0x24020001, 0x10a20005, 0x24020002, 0x10a2000d,
+0x3c0408ff, 0x10000014, 0x3c050003, 0x3c0208ff,
+0x3442ffff, 0x8f830220, 0x3c040004, 0x2c4b025,
+0x621824, 0x34630008, 0xaf830220, 0x10000012,
+0xaf450288, 0x3484fff7, 0x3c03fffb, 0x8f820220,
+0x3463ffff, 0x2c3b024, 0x441024, 0xaf820220,
+0x10000009, 0xaf450288, 0x3c040001, 0x248432c8,
+0x34a51200, 0x2003021, 0x3821, 0xafa00010,
+0xc0029d3, 0xafa00014, 0x8f4202ac, 0x24420001,
+0xaf4202ac, 0x10000172, 0x8f4202ac, 0x27840208,
+0x24050200, 0xc002a57, 0x24060008, 0x27440214,
+0x24050200, 0xc002a57, 0x24060008, 0x8f4202b4,
+0x24420001, 0xaf4202b4, 0x10000165, 0x8f4202b4,
+0x101302, 0x30430fff, 0x24020001, 0x10620011,
+0x28620002, 0x50400005, 0x24020002, 0x10600007,
+0x0, 0x10000017, 0x0, 0x1062000f,
+0x0, 0x10000013, 0x0, 0x8c060248,
+0x2021, 0xc004878, 0x24050004, 0x10000007,
+0x0, 0x8c060248, 0x2021, 0xc004878,
+0x24050004, 0x10000010, 0x0, 0x8c06024c,
+0x2021, 0xc004878, 0x24050001, 0x1000000a,
+0x0, 0x3c040001, 0x248432d4, 0x3c050003,
+0x34a51300, 0x2003021, 0x3821, 0xafa00010,
+0xc0029d3, 0xafa00014, 0x8f4202b0, 0x24420001,
+0xaf4202b0, 0x10000136, 0x8f4202b0, 0xc0022b4,
+0x0, 0x10000132, 0x0, 0x24020001,
+0xa34205b6, 0x24100100, 0x8f440198, 0x8f45019c,
+0xafb00010, 0xafa00014, 0x8f420014, 0xafa20018,
+0x8f420108, 0x26e60028, 0x40f809, 0x24070400,
+0x1040fff5, 0x0, 0x10000121, 0x0,
+0x3c02ffff, 0x34427fff, 0x2c2b024, 0x1821,
+0x3c020900, 0xaf400058, 0xaf40005c, 0xaf400060,
+0xaf400064, 0xaf400350, 0xafa20020, 0x8f5e0018,
+0x27aa0020, 0x240200ff, 0x13c20002, 0xafaa0034,
+0x27c30001, 0x8c020228, 0x609021, 0x1642000e,
+0x1e38c0, 0x8f42032c, 0x24420001, 0xaf42032c,
+0x8f42032c, 0x8c020228, 0x3c040001, 0x2484326c,
+0x3c050009, 0xafa00014, 0xafa20010, 0x8fa60020,
+0x1000006b, 0x34a50500, 0xf71021, 0x8fa30020,
+0x8fa40024, 0xac4304c0, 0xac4404c4, 0x8f830054,
+0x8f820054, 0x247003e8, 0x2021023, 0x2c4203e9,
+0x1040001b, 0x9821, 0xe08821, 0x263504c0,
+0x8f440168, 0x8f45016c, 0x2201821, 0x240a0004,
+0xafaa0010, 0xafb20014, 0x8f48000c, 0x1021,
+0x2f53021, 0xafa80018, 0x8f48010c, 0x24070008,
+0xa32821, 0xa3482b, 0x822021, 0x100f809,
+0x892021, 0x54400006, 0x24130001, 0x8f820054,
+0x2021023, 0x2c4203e9, 0x1440ffe9, 0x0,
+0x326200ff, 0x54400017, 0xaf520018, 0x8f420368,
+0x24420001, 0xaf420368, 0x8f420368, 0x8f820120,
+0x8faa0034, 0xafa20010, 0x8f820124, 0x3c040001,
+0x24843278, 0x3c050009, 0xafa20014, 0x8d460000,
+0x10000033, 0x34a50600, 0x8f4202f8, 0x24130001,
+0x24420001, 0xaf4202f8, 0x8f4202f8, 0x1000001c,
+0x326200ff, 0x8f830054, 0x8f820054, 0x247003e8,
+0x2021023, 0x2c4203e9, 0x10400014, 0x9821,
+0x24110010, 0x8f42000c, 0x8f440150, 0x8f450154,
+0x8f860120, 0xafb10010, 0xafb20014, 0xafa20018,
+0x8f42010c, 0x24070008, 0x40f809, 0x24c6001c,
+0x1440ffe5, 0x0, 0x8f820054, 0x2021023,
+0x2c4203e9, 0x1440ffef, 0x0, 0x326200ff,
+0x14400011, 0x0, 0x8f420368, 0x24420001,
+0xaf420368, 0x8f420368, 0x8f820120, 0x8faa0034,
+0xafa20010, 0x8f820124, 0x3c040001, 0x24843280,
+0x3c050009, 0xafa20014, 0x8d460000, 0x34a50700,
+0xc0029d3, 0x3c03821, 0x8f4202a0, 0x24420001,
+0xaf4202a0, 0x8f4202a0, 0x8f4202e8, 0x24420001,
+0xaf4202e8, 0x1000008a, 0x8f4202e8, 0x8c02025c,
+0x27440214, 0xaf4201e0, 0x8c020260, 0x24050200,
+0x24060008, 0xc002a57, 0xaf4201e8, 0x8f820220,
+0x30420008, 0x14400002, 0x24020001, 0x24020002,
+0xaf420288, 0x8f42029c, 0x24420001, 0xaf42029c,
+0x10000077, 0x8f42029c, 0x3c0200ff, 0x3442ffff,
+0x2021824, 0x32c20180, 0x14400006, 0x3402fffb,
+0x43102b, 0x14400003, 0x0, 0x1000006c,
+0xaf4300bc, 0x3c040001, 0x248432e0, 0x3c050003,
+0x34a51500, 0x2003021, 0x3821, 0xafa00010,
+0xc0029d3, 0xafa00014, 0x3c020700, 0x34421000,
+0x101e02, 0x621825, 0xafa30020, 0x8f510018,
+0x240200ff, 0x12220002, 0x8021, 0x26300001,
+0x8c020228, 0x1602000e, 0x1130c0, 0x8f42032c,
+0x24420001, 0xaf42032c, 0x8f42032c, 0x8c020228,
+0x3c040001, 0x24843254, 0x3c050009, 0xafa00014,
+0xafa20010, 0x8fa60020, 0x1000003f, 0x34a50100,
+0xd71021, 0x8fa30020, 0x8fa40024, 0xac4304c0,
+0xac4404c4, 0xc01821, 0x8f440168, 0x8f45016c,
+0x1021, 0x24070004, 0xafa70010, 0xafb00014,
+0x8f48000c, 0x24c604c0, 0x2e63021, 0xafa80018,
+0x8f48010c, 0x24070008, 0xa32821, 0xa3482b,
+0x822021, 0x100f809, 0x892021, 0x1440000b,
+0x24070008, 0x8f820120, 0xafa20010, 0x8f820124,
+0x3c040001, 0x2484325c, 0x3c050009, 0xafa20014,
+0x8fa60020, 0x1000001c, 0x34a50200, 0x8f440150,
+0x8f450154, 0x8f43000c, 0xaf500018, 0x8f860120,
+0x24020010, 0xafa20010, 0xafb00014, 0xafa30018,
+0x8f42010c, 0x40f809, 0x24c6001c, 0x14400010,
+0x0, 0x8f420330, 0x24420001, 0xaf420330,
+0x8f420330, 0x8f820120, 0xafa20010, 0x8f820124,
+0x3c040001, 0x24843264, 0x3c050009, 0xafa20014,
+0x8fa60020, 0x34a50300, 0xc0029d3, 0x2203821,
+0x8f4202d0, 0x24420001, 0xaf4202d0, 0x8f4202d0,
+0x8f4202e0, 0x24420001, 0xaf4202e0, 0x8f4202e0,
+0x8fbf0050, 0x8fbe004c, 0x8fb50048, 0x8fb30044,
+0x8fb20040, 0x8fb1003c, 0x8fb00038, 0x3e00008,
+0x27bd0058, 0x27bdfff8, 0x2408ffff, 0x10a00014,
+0x4821, 0x3c0aedb8, 0x354a8320, 0x90870000,
+0x24840001, 0x3021, 0x1071026, 0x30420001,
+0x10400002, 0x81842, 0x6a1826, 0x604021,
+0x24c60001, 0x2cc20008, 0x1440fff7, 0x73842,
+0x25290001, 0x125102b, 0x1440fff0, 0x0,
+0x1001021, 0x3e00008, 0x27bd0008, 0x27bdffb8,
+0xafbf0040, 0xafbe003c, 0xafb50038, 0xafb30034,
+0xafb20030, 0xafb1002c, 0xafb00028, 0x8f870220,
+0xafa7001c, 0x8f870200, 0xafa70024, 0x8f820220,
+0x3c0308ff, 0x3463ffff, 0x431024, 0x34420004,
+0xaf820220, 0x8f820200, 0x3c03c0ff, 0x3463ffff,
+0x431024, 0x34420004, 0xaf820200, 0x8f53034c,
+0x8f550350, 0x8f5e0354, 0x8f470358, 0xafa70014,
+0x8f4202c0, 0x274401b0, 0x24420001, 0xaf4202c0,
+0x8f5002c0, 0x8f5101f4, 0x8f5201f0, 0xc002a40,
+0x24050400, 0xaf53034c, 0xaf550350, 0xaf5e0354,
+0x8fa70014, 0xaf470358, 0xaf5002c0, 0xaf5101f4,
+0xaf5201f0, 0x8c02025c, 0x27440214, 0xaf4201e0,
+0x8c020260, 0x24050200, 0x24060008, 0xaf4201e8,
+0x24020006, 0xc002a57, 0xaf4201e4, 0x3c023b9a,
+0x3442ca00, 0xaf4201ec, 0x240203e8, 0x24040002,
+0x24030001, 0xaf420284, 0xaf440280, 0xaf43028c,
+0x8f820220, 0x30420008, 0x10400004, 0x0,
+0xaf430288, 0x10000003, 0x3021, 0xaf440288,
+0x3021, 0x3c030001, 0x661821, 0x90633c80,
+0x3461021, 0x24c60001, 0xa043021c, 0x2cc2000f,
+0x1440fff8, 0x3461821, 0x24c60001, 0x8f820040,
+0x24040080, 0x24050080, 0x21702, 0x24420030,
+0xa062021c, 0x3461021, 0xc002a40, 0xa040021c,
+0x8fa7001c, 0x30e20004, 0x14400006, 0x0,
+0x8f820220, 0x3c0308ff, 0x3463fffb, 0x431024,
+0xaf820220, 0x8fa70024, 0x30e20004, 0x14400006,
+0x0, 0x8f820200, 0x3c03c0ff, 0x3463fffb,
+0x431024, 0xaf820200, 0x8fbf0040, 0x8fbe003c,
+0x8fb50038, 0x8fb30034, 0x8fb20030, 0x8fb1002c,
+0x8fb00028, 0x3e00008, 0x27bd0048, 0xaf400104,
+0x24040001, 0x410c0, 0x2e21821, 0x24820001,
+0x3c010001, 0x230821, 0xa42234d0, 0x402021,
+0x2c820080, 0x1440fff8, 0x410c0, 0x24020001,
+0x3c010001, 0x370821, 0xa42038d0, 0xaf420100,
+0xaf800228, 0xaf80022c, 0xaf800230, 0xaf800234,
+0x3e00008, 0x0, 0x27bdffe8, 0xafbf0014,
+0xafb00010, 0x8f420104, 0x28420005, 0x10400026,
+0x808021, 0x3c020001, 0x8f430104, 0x344230d0,
+0x2e22021, 0x318c0, 0x621821, 0x2e31821,
+0x83102b, 0x10400015, 0x1021, 0x96070000,
+0x24840006, 0x24660006, 0x9482fffc, 0x14470009,
+0x2821, 0x9483fffe, 0x96020002, 0x14620006,
+0xa01021, 0x94820000, 0x96030004, 0x431026,
+0x2c450001, 0xa01021, 0x14400009, 0x24840008,
+0x86102b, 0x1440fff0, 0x1021, 0x304200ff,
+0x14400030, 0x24020001, 0x1000002e, 0x1021,
+0x1000fffa, 0x24020001, 0x2002021, 0xc00229a,
+0x24050006, 0x3042007f, 0x218c0, 0x2e31021,
+0x3c010001, 0x220821, 0x942230d0, 0x1040fff2,
+0x2e31021, 0x3c060001, 0xc23021, 0x94c630d0,
+0x10c0ffed, 0x3c080001, 0x350834d2, 0x96070000,
+0x610c0, 0x572021, 0x882021, 0x94820000,
+0x14470009, 0x2821, 0x94830002, 0x96020002,
+0x14620006, 0xa01021, 0x94820004, 0x96030004,
+0x431026, 0x2c450001, 0xa01021, 0x14400007,
+0x610c0, 0x2e21021, 0x3c060001, 0xc23021,
+0x94c634d0, 0x14c0ffeb, 0x610c0, 0x10c0ffd2,
+0x24020001, 0x8fbf0014, 0x8fb00010, 0x3e00008,
+0x27bd0018, 0x3e00008, 0x0, 0x27bdffb0,
+0x801021, 0xafb00030, 0x24500002, 0x2002021,
+0x24050006, 0xafb10034, 0x408821, 0xafbf0048,
+0xafbe0044, 0xafb50040, 0xafb3003c, 0xc00229a,
+0xafb20038, 0x3047007f, 0x710c0, 0x2e21021,
+0x3c050001, 0xa22821, 0x94a530d0, 0x50a0001c,
+0xa03021, 0x3c090001, 0x352934d2, 0x96280002,
+0x510c0, 0x572021, 0x892021, 0x94820000,
+0x14480009, 0x3021, 0x94830002, 0x96020002,
+0x14620006, 0xc01021, 0x94820004, 0x96030004,
+0x431026, 0x2c460001, 0xc01021, 0x14400007,
+0x510c0, 0x2e21021, 0x3c050001, 0xa22821,
+0x94a534d0, 0x14a0ffeb, 0x510c0, 0xa03021,
+0x10c00014, 0x610c0, 0x571821, 0x3c010001,
+0x230821, 0x8c2334d0, 0x571021, 0xafa30010,
+0x3c010001, 0x220821, 0x8c2234d4, 0x3c040001,
+0x248433f0, 0xafa20014, 0x8e260000, 0x8e270004,
+0x3c050004, 0xc0029d3, 0x34a50400, 0x10000063,
+0x3c020800, 0x8f450100, 0x10a00006, 0x510c0,
+0x2e21021, 0x3c010001, 0x220821, 0x942234d0,
+0xaf420100, 0xa03021, 0x14c00011, 0x628c0,
+0x710c0, 0x2e21021, 0xafa70010, 0x3c010001,
+0x220821, 0x942230d0, 0x3c040001, 0x248433fc,
+0xafa20014, 0x8e260000, 0x8e270004, 0x3c050004,
+0xc0029d3, 0x34a50500, 0x10000048, 0x3c020800,
+0xb71821, 0x3c020001, 0x96040000, 0x344234d2,
+0x621821, 0xa4640000, 0x8e020002, 0x720c0,
+0xac620002, 0x2e41021, 0x3c030001, 0x621821,
+0x946330d0, 0x2e51021, 0x3c010001, 0x220821,
+0xa42334d0, 0x2e41021, 0x3c010001, 0x220821,
+0xa42630d0, 0x8f420104, 0x24420001, 0x28420080,
+0x1040000f, 0x3c020002, 0x8f420104, 0x3c040001,
+0x348430d2, 0x96030000, 0x210c0, 0x571021,
+0x441021, 0xa4430000, 0x8e030002, 0xac430002,
+0x8f420104, 0x24420001, 0xaf420104, 0x3c020002,
+0x2c21024, 0x10400011, 0x72142, 0x3c030001,
+0x346338d8, 0x24020003, 0x441023, 0x21080,
+0x572021, 0x832021, 0x571021, 0x431021,
+0x30e5001f, 0x8c430000, 0x24020001, 0xa21004,
+0x621825, 0x1000000c, 0xac830000, 0x24020003,
+0x441023, 0x21080, 0x5c2821, 0x5c1021,
+0x30e4001f, 0x8c430228, 0x24020001, 0x821004,
+0x621825, 0xaca30228, 0x3c020800, 0x34421000,
+0x1821, 0xafa20020, 0x8f5e0018, 0x27aa0020,
+0x240200ff, 0x13c20002, 0xafaa002c, 0x27c30001,
+0x8c020228, 0x609021, 0x1642000e, 0x1e38c0,
+0x8f42032c, 0x24420001, 0xaf42032c, 0x8f42032c,
+0x8c020228, 0x3c040001, 0x248433b8, 0x3c050009,
+0xafa00014, 0xafa20010, 0x8fa60020, 0x1000006b,
+0x34a50500, 0xf71021, 0x8fa30020, 0x8fa40024,
+0xac4304c0, 0xac4404c4, 0x8f830054, 0x8f820054,
+0x247003e8, 0x2021023, 0x2c4203e9, 0x1040001b,
+0x9821, 0xe08821, 0x263504c0, 0x8f440168,
+0x8f45016c, 0x2201821, 0x240a0004, 0xafaa0010,
+0xafb20014, 0x8f48000c, 0x1021, 0x2f53021,
+0xafa80018, 0x8f48010c, 0x24070008, 0xa32821,
+0xa3482b, 0x822021, 0x100f809, 0x892021,
+0x54400006, 0x24130001, 0x8f820054, 0x2021023,
+0x2c4203e9, 0x1440ffe9, 0x0, 0x326200ff,
+0x54400017, 0xaf520018, 0x8f420368, 0x24420001,
+0xaf420368, 0x8f420368, 0x8f820120, 0x8faa002c,
+0xafa20010, 0x8f820124, 0x3c040001, 0x248433c4,
+0x3c050009, 0xafa20014, 0x8d460000, 0x10000033,
+0x34a50600, 0x8f4202f8, 0x24130001, 0x24420001,
+0xaf4202f8, 0x8f4202f8, 0x1000001c, 0x326200ff,
+0x8f830054, 0x8f820054, 0x247003e8, 0x2021023,
+0x2c4203e9, 0x10400014, 0x9821, 0x24110010,
+0x8f42000c, 0x8f440150, 0x8f450154, 0x8f860120,
+0xafb10010, 0xafb20014, 0xafa20018, 0x8f42010c,
+0x24070008, 0x40f809, 0x24c6001c, 0x1440ffe5,
+0x0, 0x8f820054, 0x2021023, 0x2c4203e9,
+0x1440ffef, 0x0, 0x326200ff, 0x14400011,
+0x0, 0x8f420368, 0x24420001, 0xaf420368,
+0x8f420368, 0x8f820120, 0x8faa002c, 0xafa20010,
+0x8f820124, 0x3c040001, 0x248433cc, 0x3c050009,
+0xafa20014, 0x8d460000, 0x34a50700, 0xc0029d3,
+0x3c03821, 0x8f4202a4, 0x24420001, 0xaf4202a4,
+0x8f4202a4, 0x8f4202e4, 0x24420001, 0xaf4202e4,
+0x8f4202e4, 0x8fbf0048, 0x8fbe0044, 0x8fb50040,
+0x8fb3003c, 0x8fb20038, 0x8fb10034, 0x8fb00030,
+0x3e00008, 0x27bd0050, 0x27bdffa0, 0x801021,
+0xafb00040, 0x24500002, 0x2002021, 0x24050006,
+0xafb10044, 0x408821, 0xafbf0058, 0xafbe0054,
+0xafb50050, 0xafb3004c, 0xc00229a, 0xafb20048,
+0x3048007f, 0x810c0, 0x2e21021, 0x3c060001,
+0xc23021, 0x94c630d0, 0x10c0001c, 0x3821,
+0x3c0a0001, 0x354a34d2, 0x96290002, 0x610c0,
+0x572021, 0x8a2021, 0x94820000, 0x14490009,
+0x2821, 0x94830002, 0x96020002, 0x14620006,
+0xa01021, 0x94820004, 0x96030004, 0x431026,
+0x2c450001, 0xa01021, 0x14400008, 0x610c0,
+0xc03821, 0x2e21021, 0x3c060001, 0xc23021,
+0x94c634d0, 0x14c0ffea, 0x610c0, 0x14c00011,
+0xafa70028, 0x810c0, 0x2e21021, 0xafa80010,
+0x3c010001, 0x220821, 0x942230d0, 0x3c040001,
+0x24843408, 0xafa20014, 0x8e260000, 0x8e270004,
+0x3c050004, 0xc0029d3, 0x34a50900, 0x10000075,
+0x3c020800, 0x10e0000c, 0x610c0, 0x2e21021,
+0x3c030001, 0x621821, 0x946334d0, 0x710c0,
+0x2e21021, 0x3c010001, 0x220821, 0xa42334d0,
+0x1000000b, 0x3c040001, 0x2e21021, 0x3c030001,
+0x621821, 0x946334d0, 0x810c0, 0x2e21021,
+0x3c010001, 0x220821, 0xa42330d0, 0x3c040001,
+0x348430d0, 0x8f430100, 0x610c0, 0x2e21021,
+0x3c010001, 0x220821, 0xa42334d0, 0x8f420104,
+0x2e43821, 0x2821, 0x18400029, 0xaf460100,
+0x24e60006, 0x94c3fffc, 0x96020000, 0x14620009,
+0x2021, 0x94c3fffe, 0x96020002, 0x14620006,
+0x801021, 0x94c20000, 0x96030004, 0x431026,
+0x2c440001, 0x801021, 0x50400014, 0x24a50001,
+0x8f420104, 0x2442ffff, 0xa2102a, 0x1040000b,
+0x24e40004, 0x94820006, 0x8c830008, 0xa482fffe,
+0xac830000, 0x8f420104, 0x24a50001, 0x2442ffff,
+0xa2102a, 0x1440fff7, 0x24840008, 0x8f420104,
+0x2442ffff, 0x10000006, 0xaf420104, 0x8f420104,
+0x24c60008, 0xa2102a, 0x1440ffda, 0x24e70008,
+0x810c0, 0x2e21021, 0x3c010001, 0x220821,
+0x942230d0, 0x14400023, 0x3c020800, 0x3c020002,
+0x2c21024, 0x10400012, 0x82142, 0x3c030001,
+0x346338d8, 0x24020003, 0x441023, 0x21080,
+0x572021, 0x832021, 0x571021, 0x431021,
+0x3105001f, 0x24030001, 0x8c420000, 0xa31804,
+0x31827, 0x431024, 0x1000000d, 0xac820000,
+0x24020003, 0x441023, 0x21080, 0x5c2821,
+0x5c1021, 0x3104001f, 0x24030001, 0x8c420228,
+0x831804, 0x31827, 0x431024, 0xaca20228,
+0x3c020800, 0x34422000, 0x1821, 0xafa20020,
+0x8f5e0018, 0x27ab0020, 0x240200ff, 0x13c20002,
+0xafab0034, 0x27c30001, 0x8c020228, 0x609021,
+0x1642000e, 0x1e38c0, 0x8f42032c, 0x24420001,
+0xaf42032c, 0x8f42032c, 0x8c020228, 0x3c040001,
+0x248433b8, 0x3c050009, 0xafa00014, 0xafa20010,
+0x8fa60020, 0x1000006b, 0x34a50500, 0xf71021,
+0x8fa30020, 0x8fa40024, 0xac4304c0, 0xac4404c4,
+0x8f830054, 0x8f820054, 0x247003e8, 0x2021023,
+0x2c4203e9, 0x1040001b, 0x9821, 0xe08821,
+0x263504c0, 0x8f440168, 0x8f45016c, 0x2201821,
+0x240b0004, 0xafab0010, 0xafb20014, 0x8f48000c,
+0x1021, 0x2f53021, 0xafa80018, 0x8f48010c,
+0x24070008, 0xa32821, 0xa3482b, 0x822021,
+0x100f809, 0x892021, 0x54400006, 0x24130001,
+0x8f820054, 0x2021023, 0x2c4203e9, 0x1440ffe9,
+0x0, 0x326200ff, 0x54400017, 0xaf520018,
+0x8f420368, 0x24420001, 0xaf420368, 0x8f420368,
+0x8f820120, 0x8fab0034, 0xafa20010, 0x8f820124,
+0x3c040001, 0x248433c4, 0x3c050009, 0xafa20014,
+0x8d660000, 0x10000033, 0x34a50600, 0x8f4202f8,
+0x24130001, 0x24420001, 0xaf4202f8, 0x8f4202f8,
+0x1000001c, 0x326200ff, 0x8f830054, 0x8f820054,
+0x247003e8, 0x2021023, 0x2c4203e9, 0x10400014,
+0x9821, 0x24110010, 0x8f42000c, 0x8f440150,
+0x8f450154, 0x8f860120, 0xafb10010, 0xafb20014,
+0xafa20018, 0x8f42010c, 0x24070008, 0x40f809,
+0x24c6001c, 0x1440ffe5, 0x0, 0x8f820054,
+0x2021023, 0x2c4203e9, 0x1440ffef, 0x0,
+0x326200ff, 0x14400011, 0x0, 0x8f420368,
+0x24420001, 0xaf420368, 0x8f420368, 0x8f820120,
+0x8fab0034, 0xafa20010, 0x8f820124, 0x3c040001,
+0x248433cc, 0x3c050009, 0xafa20014, 0x8d660000,
+0x34a50700, 0xc0029d3, 0x3c03821, 0x8f4202a8,
+0x24420001, 0xaf4202a8, 0x8f4202a8, 0x8f4202e4,
+0x24420001, 0xaf4202e4, 0x8f4202e4, 0x8fbf0058,
+0x8fbe0054, 0x8fb50050, 0x8fb3004c, 0x8fb20048,
+0x8fb10044, 0x8fb00040, 0x3e00008, 0x27bd0060,
+0x0, 0x0, 0x0, 0x27bdffe0,
+0x27644000, 0xafbf0018, 0xc002a40, 0x24051000,
+0x3c030001, 0x34632cc0, 0x3c040001, 0x34842ec8,
+0x24020020, 0xaf82011c, 0x2e31021, 0xaf800100,
+0xaf800104, 0xaf800108, 0xaf800110, 0xaf800114,
+0xaf800118, 0xaf800120, 0xaf800124, 0xaf800128,
+0xaf800130, 0xaf800134, 0xaf800138, 0xaf4200ec,
+0x2e31021, 0xaf4200f0, 0x2e41021, 0xaf4200f4,
+0x2e41021, 0xaf4200f8, 0x3c020001, 0x571021,
+0x904240f4, 0x1440001c, 0x3c050001, 0x8f82011c,
+0x3c040001, 0x248434d0, 0x3c050001, 0x34420001,
+0xaf82011c, 0xafa00010, 0xafa00014, 0x8f86011c,
+0x34a50100, 0xc0029d3, 0x3821, 0x8c020218,
+0x30420040, 0x10400014, 0x0, 0x8f82011c,
+0x3c040001, 0x248434dc, 0x3c050001, 0x34420004,
+0xaf82011c, 0xafa00010, 0xafa00014, 0x8f86011c,
+0x10000007, 0x34a50200, 0x3c040001, 0x248434e4,
+0xafa00010, 0xafa00014, 0x8f86011c, 0x34a50300,
+0xc0029d3, 0x3821, 0x8fbf0018, 0x3e00008,
+0x27bd0020, 0x8fa90010, 0x8f83012c, 0x8faa0014,
+0x8fab0018, 0x1060000a, 0x27624fe0, 0x14620002,
+0x24680020, 0x27684800, 0x8f820128, 0x11020004,
+0x0, 0x8f820124, 0x15020007, 0x0,
+0x8f430324, 0x1021, 0x24630001, 0xaf430324,
+0x10000039, 0x8f430324, 0xac640000, 0xac650004,
+0xac660008, 0xa467000e, 0xac690018, 0xac6a001c,
+0xac6b0010, 0xac620014, 0xaf880120, 0x8f4200fc,
+0x8f4400f4, 0x2442ffff, 0xaf4200fc, 0x8c820000,
+0x10490005, 0x3042ff8f, 0x10400019, 0x3122ff8f,
+0x10400018, 0x3c020001, 0x8c830004, 0x2c620010,
+0x10400013, 0x3c020001, 0x24630001, 0xac830004,
+0x8f4300f8, 0x344230c8, 0x2e21021, 0x54620004,
+0x24620008, 0x3c020001, 0x34422ec8, 0x2e21021,
+0x14440015, 0x24020001, 0x8f820128, 0x24420020,
+0xaf820128, 0x8f820128, 0x1000000f, 0x24020001,
+0x3c020001, 0x344230c8, 0x2e21021, 0x54820004,
+0x24820008, 0x3c020001, 0x34422ec8, 0x2e21021,
+0x402021, 0x24020001, 0xaf4400f4, 0xac890000,
+0xac820004, 0x24020001, 0x3e00008, 0x0,
+0x3e00008, 0x0, 0x8fa90010, 0x8faa0014,
+0x8f830120, 0x8fab0018, 0x27624fe0, 0x14620002,
+0x24680020, 0x27684800, 0x8f820128, 0x1102000f,
+0x24620016, 0xac640000, 0xac650004, 0xac660008,
+0xa467000e, 0xac690018, 0xac6a001c, 0xac620014,
+0xac6b0010, 0xaf880120, 0x8f4300fc, 0x24020001,
+0x2463ffff, 0x10000006, 0xaf4300fc, 0x8f430324,
+0x1021, 0x24630001, 0xaf430324, 0x8f430324,
+0x3e00008, 0x0, 0x3e00008, 0x0,
+0x8fa90010, 0x8f83010c, 0x8faa0014, 0x8fab0018,
+0x1060000a, 0x276247e0, 0x14620002, 0x24680020,
+0x27684000, 0x8f820108, 0x11020004, 0x0,
+0x8f820104, 0x15020007, 0x0, 0x8f430328,
+0x1021, 0x24630001, 0xaf430328, 0x10000035,
+0x8f430328, 0xac640000, 0xac650004, 0xac660008,
+0xa467000e, 0xac690018, 0xac6a001c, 0xac6b0010,
+0xac620014, 0xaf880100, 0x8f4400ec, 0x8c820000,
+0x30420006, 0x10400019, 0x31220006, 0x10400018,
+0x3c020001, 0x8c830004, 0x2c620010, 0x10400013,
+0x3c020001, 0x24630001, 0xac830004, 0x8f4300f0,
+0x34422ec0, 0x2e21021, 0x54620004, 0x24620008,
+0x3c020001, 0x34422cc0, 0x2e21021, 0x14440015,
+0x24020001, 0x8f820108, 0x24420020, 0xaf820108,
+0x8f820108, 0x1000000f, 0x24020001, 0x3c020001,
+0x34422ec0, 0x2e21021, 0x54820004, 0x24820008,
+0x3c020001, 0x34422cc0, 0x2e21021, 0x402021,
+0x24020001, 0xaf4400ec, 0xac890000, 0xac820004,
+0x24020001, 0x3e00008, 0x0, 0x3e00008,
+0x0, 0x8fa30010, 0x8faa0014, 0x8f880100,
+0x8fab0018, 0x276247e0, 0x15020002, 0x25090020,
+0x27694000, 0x8f820108, 0x1122000d, 0x0,
+0xad030018, 0x25030016, 0xad040000, 0xad050004,
+0xad060008, 0xa507000e, 0xad0a001c, 0xad030014,
+0xad0b0010, 0xaf890100, 0x10000006, 0x24020001,
+0x8f430328, 0x1021, 0x24630001, 0xaf430328,
+0x8f430328, 0x3e00008, 0x0, 0x3e00008,
+0x0, 0x27bdffd8, 0x3c040001, 0x248434ec,
+0x3c050001, 0xafbf0024, 0xafb20020, 0xafb1001c,
+0xafb00018, 0x8f900104, 0x8f9100b0, 0x8f92011c,
+0x34a52500, 0x8f820100, 0x2403021, 0x2203821,
+0xafa20010, 0xc0029d3, 0xafb00014, 0x8e020008,
+0xafa20010, 0x8e02000c, 0x3c040001, 0x248434f8,
+0xafa20014, 0x8e060000, 0x8e070004, 0x3c050001,
+0xc0029d3, 0x34a52510, 0x8e020018, 0xafa20010,
+0x8e02001c, 0x3c040001, 0x24843504, 0xafa20014,
+0x8e060010, 0x8e070014, 0x3c050001, 0xc0029d3,
+0x34a52520, 0x3c030200, 0x2c31024, 0x1040000d,
+0x2231024, 0x1040000b, 0x36420002, 0xaf82011c,
+0x36220001, 0xaf8200b0, 0xaf900104, 0xaf92011c,
+0x8f420320, 0x24420001, 0xaf420320, 0x10000015,
+0x8f420320, 0x3c040001, 0x24843510, 0x24020290,
+0xafa20010, 0xafa00014, 0x8f860144, 0x3c070001,
+0x24e73518, 0xc0029d3, 0x3405dead, 0x8f82011c,
+0x34420002, 0xaf82011c, 0x8f820220, 0x34420004,
+0xaf820220, 0x8f820140, 0x3c030001, 0x431025,
+0xaf820140, 0x8fbf0024, 0x8fb20020, 0x8fb1001c,
+0x8fb00018, 0x3e00008, 0x27bd0028, 0x27bdffd8,
+0x3c040001, 0x24843540, 0x3c050001, 0xafbf0024,
+0xafb20020, 0xafb1001c, 0xafb00018, 0x8f900124,
+0x8f9100a0, 0x8f92011c, 0x34a52600, 0x8f820120,
+0x2403021, 0x2203821, 0xafa20010, 0xc0029d3,
+0xafb00014, 0x8e020008, 0xafa20010, 0x8e02000c,
+0x3c040001, 0x2484354c, 0xafa20014, 0x8e060000,
+0x8e070004, 0x3c050001, 0xc0029d3, 0x34a52610,
+0x8e020018, 0xafa20010, 0x8e02001c, 0x3c040001,
+0x24843558, 0xafa20014, 0x8e060010, 0x8e070014,
+0x3c050001, 0xc0029d3, 0x34a52620, 0x3c030200,
+0x2c31024, 0x1040000d, 0x2231024, 0x1040000b,
+0x36420002, 0xaf82011c, 0x36220001, 0xaf8200a0,
+0xaf900124, 0xaf92011c, 0x8f42031c, 0x24420001,
+0xaf42031c, 0x10000015, 0x8f42031c, 0x3c040001,
+0x24843510, 0x240202bc, 0xafa20010, 0xafa00014,
+0x8f860144, 0x3c070001, 0x24e73518, 0xc0029d3,
+0x3405dead, 0x8f82011c, 0x34420002, 0xaf82011c,
+0x8f820220, 0x34420004, 0xaf820220, 0x8f820140,
+0x3c030001, 0x431025, 0xaf820140, 0x8fbf0024,
+0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x3e00008,
+0x27bd0028, 0x6021, 0x5021, 0x3021,
+0x2821, 0x6821, 0x4821, 0x7821,
+0x7021, 0x8f880124, 0x8f870104, 0x1580002e,
+0x8f8b011c, 0x11a00014, 0x31620800, 0x8f820120,
+0x10460029, 0x0, 0x3c040001, 0x8c843e20,
+0x8cc20000, 0x8cc30004, 0xac820000, 0xac830004,
+0x8cc20008, 0xac820008, 0x94c2000e, 0xa482000e,
+0x8cc20010, 0x240c0001, 0xac820010, 0x8cc20014,
+0x10000012, 0x24c60020, 0x10400017, 0x0,
+0x3c040001, 0x8c843e20, 0x8d020000, 0x8d030004,
+0xac820000, 0xac830004, 0x8d020008, 0xac820008,
+0x9502000e, 0xa482000e, 0x8d020010, 0x25060020,
+0xac820010, 0x8d020014, 0x240c0001, 0xc01821,
+0xac820014, 0x27624fe0, 0x43102b, 0x54400001,
+0x27634800, 0x603021, 0x1540002f, 0x31620100,
+0x11200014, 0x31628000, 0x8f820100, 0x1045002a,
+0x31620100, 0x3c040001, 0x8c843e1c, 0x8ca20000,
+0x8ca30004, 0xac820000, 0xac830004, 0x8ca20008,
+0xac820008, 0x94a2000e, 0xa482000e, 0x8ca20010,
+0x240a0001, 0xac820010, 0x8ca20014, 0x10000012,
+0x24a50020, 0x10400018, 0x31620100, 0x3c040001,
+0x8c843e1c, 0x8ce20000, 0x8ce30004, 0xac820000,
+0xac830004, 0x8ce20008, 0xac820008, 0x94e2000e,
+0xa482000e, 0x8ce20010, 0x24e50020, 0xac820010,
+0x8ce20014, 0x240a0001, 0xa01821, 0xac820014,
+0x276247e0, 0x43102b, 0x54400001, 0x27634000,
+0x602821, 0x31620100, 0x5440001d, 0x31621000,
+0x11a00009, 0x31a20800, 0x10400004, 0x25020020,
+0x8f8200a8, 0xa5e20000, 0x25020020, 0xaf820124,
+0x8f880124, 0x6821, 0x11800011, 0x31621000,
+0x3c040001, 0x8c843e20, 0x8c820000, 0x8c830004,
+0xaf820080, 0xaf830084, 0x8c820008, 0xaf8200a4,
+0x9482000e, 0xaf8200ac, 0x8c820010, 0x6021,
+0xaf8200a0, 0x8c8d0010, 0x8c8f0014, 0x31621000,
+0x1440ff82, 0x0, 0x1120000f, 0x31220800,
+0x10400004, 0x3c020002, 0x8f8200b8, 0xa5c20000,
+0x3c020002, 0x1221024, 0x10400004, 0x24e20020,
+0x8f8200b4, 0xaf8200d4, 0x24e20020, 0xaf820104,
+0x8f870104, 0x4821, 0x1140ff70, 0x0,
+0x3c040001, 0x8c843e1c, 0x8c820000, 0x8c830004,
+0xaf820090, 0xaf830094, 0x8c820008, 0xaf8200b4,
+0x9482000e, 0xaf82009c, 0x8c820010, 0x5021,
+0xaf8200b0, 0x8c890010, 0x1000ff60, 0x8c8e0014,
+0x3e00008, 0x0, 0x6021, 0x5821,
+0x3021, 0x2821, 0x6821, 0x5021,
+0x7821, 0x7021, 0x8f880124, 0x8f870104,
+0x3c180100, 0x1580002e, 0x8f89011c, 0x11a00014,
+0x31220800, 0x8f820120, 0x10460029, 0x0,
+0x3c040001, 0x8c843e20, 0x8cc20000, 0x8cc30004,
+0xac820000, 0xac830004, 0x8cc20008, 0xac820008,
+0x94c2000e, 0xa482000e, 0x8cc20010, 0x240c0001,
+0xac820010, 0x8cc20014, 0x10000012, 0x24c60020,
+0x10400017, 0x0, 0x3c040001, 0x8c843e20,
+0x8d020000, 0x8d030004, 0xac820000, 0xac830004,
+0x8d020008, 0xac820008, 0x9502000e, 0xa482000e,
+0x8d020010, 0x25060020, 0xac820010, 0x8d020014,
+0x240c0001, 0xc01821, 0xac820014, 0x27624fe0,
+0x43102b, 0x54400001, 0x27634800, 0x603021,
+0x1560002f, 0x31220100, 0x11400014, 0x31228000,
+0x8f820100, 0x1045002a, 0x31220100, 0x3c040001,
+0x8c843e1c, 0x8ca20000, 0x8ca30004, 0xac820000,
+0xac830004, 0x8ca20008, 0xac820008, 0x94a2000e,
+0xa482000e, 0x8ca20010, 0x240b0001, 0xac820010,
+0x8ca20014, 0x10000012, 0x24a50020, 0x10400018,
+0x31220100, 0x3c040001, 0x8c843e1c, 0x8ce20000,
+0x8ce30004, 0xac820000, 0xac830004, 0x8ce20008,
+0xac820008, 0x94e2000e, 0xa482000e, 0x8ce20010,
+0x24e50020, 0xac820010, 0x8ce20014, 0x240b0001,
+0xa01821, 0xac820014, 0x276247e0, 0x43102b,
+0x54400001, 0x27634000, 0x602821, 0x31220100,
+0x5440001d, 0x31221000, 0x11a00009, 0x31a20800,
+0x10400004, 0x25020020, 0x8f8200a8, 0xa5e20000,
+0x25020020, 0xaf820124, 0x8f880124, 0x6821,
+0x11800011, 0x31221000, 0x3c040001, 0x8c843e20,
+0x8c820000, 0x8c830004, 0xaf820080, 0xaf830084,
+0x8c820008, 0xaf8200a4, 0x9482000e, 0xaf8200ac,
+0x8c820010, 0x6021, 0xaf8200a0, 0x8c8d0010,
+0x8c8f0014, 0x31221000, 0x14400022, 0x0,
+0x1140000f, 0x31420800, 0x10400004, 0x3c020002,
+0x8f8200b8, 0xa5c20000, 0x3c020002, 0x1421024,
+0x10400004, 0x24e20020, 0x8f8200b4, 0xaf8200d4,
+0x24e20020, 0xaf820104, 0x8f870104, 0x5021,
+0x11600010, 0x0, 0x3c040001, 0x8c843e1c,
+0x8c820000, 0x8c830004, 0xaf820090, 0xaf830094,
+0x8c820008, 0xaf8200b4, 0x9482000e, 0xaf82009c,
+0x8c820010, 0x5821, 0xaf8200b0, 0x8c8a0010,
+0x8c8e0014, 0x8f820070, 0x3c031000, 0x431024,
+0x1040ff5c, 0x0, 0x8f820054, 0x24420005,
+0xaf820078, 0x8c040234, 0x10800016, 0x1821,
+0x3c020001, 0x571021, 0x8c4240e8, 0x24420005,
+0x3c010001, 0x370821, 0xac2240e8, 0x3c020001,
+0x571021, 0x8c4240e8, 0x44102b, 0x14400009,
+0x24020001, 0x3c030080, 0x3c010001, 0x370821,
+0xac2040e8, 0x3c010001, 0x370821, 0x1000000c,
+0xa02240f0, 0x3c020001, 0x571021, 0x904240f0,
+0x14400006, 0x3c020080, 0x3c020001, 0x571021,
+0x904240f1, 0x10400002, 0x3c020080, 0x621825,
+0x8c040230, 0x10800013, 0x0, 0x3c020001,
+0x571021, 0x8c4240ec, 0x24420005, 0x3c010001,
+0x370821, 0xac2240ec, 0x3c020001, 0x571021,
+0x8c4240ec, 0x44102b, 0x14400006, 0x0,
+0x3c010001, 0x370821, 0xac2040ec, 0x10000006,
+0x781825, 0x3c020001, 0x571021, 0x904240f2,
+0x54400001, 0x781825, 0x1060ff1a, 0x0,
+0x8f420000, 0x10400007, 0x0, 0xaf80004c,
+0x8f82004c, 0x1040fffd, 0x0, 0x10000005,
+0x0, 0xaf800048, 0x8f820048, 0x1040fffd,
+0x0, 0x8f820060, 0x431025, 0xaf820060,
+0x8f420000, 0x10400003, 0x0, 0x1000ff05,
+0xaf80004c, 0x1000ff03, 0xaf800048, 0x3e00008,
+0x0, 0x0, 0x0, 0x3c020001,
+0x8c423ca8, 0x27bdffe8, 0xafbf0014, 0x14400012,
+0xafb00010, 0x3c100001, 0x26103ec0, 0x2002021,
+0xc002a40, 0x24052000, 0x26021fe0, 0x3c010001,
+0xac223e28, 0x3c010001, 0xac223e24, 0xac020250,
+0x24022000, 0xac100254, 0xac020258, 0x24020001,
+0x3c010001, 0xac223ca8, 0x8fbf0014, 0x8fb00010,
+0x3e00008, 0x27bd0018, 0x3c090001, 0x8d293e28,
+0x8c820000, 0x8fa30010, 0x8fa80014, 0xad220000,
+0x8c820004, 0xad250008, 0xad220004, 0x8f820054,
+0xad260010, 0xad270014, 0xad230018, 0xad28001c,
+0xad22000c, 0x2529ffe0, 0x3c020001, 0x24423ec0,
+0x122102b, 0x10400003, 0x0, 0x3c090001,
+0x8d293e24, 0x3c020001, 0x8c423c90, 0xad220000,
+0x3c020001, 0x8c423c90, 0x3c010001, 0xac293e28,
+0xad220004, 0xac090250, 0x3e00008, 0x0,
+0x27bdffd0, 0xafb00010, 0x3c100001, 0x8e103e28,
+0x3c020001, 0x8c423c90, 0xafb10014, 0x808821,
+0xafbe0024, 0x8fbe0040, 0x8fa40048, 0xafb20018,
+0xa09021, 0xafbf0028, 0xafb50020, 0xafb3001c,
+0xae020000, 0x3c020001, 0x8c423c90, 0xc09821,
+0xe0a821, 0x10800006, 0xae020004, 0x26050008,
+0xc002a4b, 0x24060018, 0x10000005, 0x2610ffe0,
+0x26040008, 0xc002a40, 0x24050018, 0x2610ffe0,
+0x3c030001, 0x24633ec0, 0x203102b, 0x10400003,
+0x0, 0x3c100001, 0x8e103e24, 0x8e220000,
+0xae020000, 0x8e220004, 0xae120008, 0xae020004,
+0x8f820054, 0xae130010, 0xae150014, 0xae1e0018,
+0x8fa80044, 0xae08001c, 0xae02000c, 0x2610ffe0,
+0x203102b, 0x10400003, 0x0, 0x3c100001,
+0x8e103e24, 0x3c020001, 0x8c423c90, 0xae020000,
+0x3c020001, 0x8c423c90, 0x3c010001, 0xac303e28,
+0xae020004, 0xac100250, 0x8fbf0028, 0x8fbe0024,
+0x8fb50020, 0x8fb3001c, 0x8fb20018, 0x8fb10014,
+0x8fb00010, 0x3e00008, 0x27bd0030, 0x851821,
+0x83102b, 0x10400006, 0x0, 0xac800000,
+0x24840004, 0x83102b, 0x5440fffd, 0xac800000,
+0x3e00008, 0x0, 0xa61821, 0xa3102b,
+0x10400007, 0x0, 0x8c820000, 0xaca20000,
+0x24a50004, 0xa3102b, 0x1440fffb, 0x24840004,
+0x3e00008, 0x0, 0x861821, 0x83102b,
+0x10400007, 0x0, 0x8ca20000, 0xac820000,
+0x24840004, 0x83102b, 0x1440fffb, 0x24a50004,
+0x3e00008, 0x0, 0x63080, 0x861821,
+0x83102b, 0x10400006, 0x0, 0xac850000,
+0x24840004, 0x83102b, 0x5440fffd, 0xac850000,
+0x3e00008, 0x0, 0x0, 0x27bdffd8,
+0xafbf0024, 0xafb00020, 0x8f430024, 0x8f420020,
+0x10620038, 0x0, 0x8f430020, 0x8f420024,
+0x622023, 0x4810003, 0x0, 0x8f420040,
+0x822021, 0x8f430030, 0x8f420024, 0x43102b,
+0x14400005, 0x0, 0x8f430040, 0x8f420024,
+0x10000005, 0x621023, 0x8f420030, 0x8f430024,
+0x431023, 0x2442ffff, 0x406021, 0x8c102a,
+0x54400001, 0x806021, 0x8f4a0024, 0x8f490040,
+0x8f480024, 0x8f440170, 0x8f450174, 0x8f460024,
+0x8f4b001c, 0x24070001, 0xafa70010, 0x84100,
+0x1001821, 0x14c5021, 0x2529ffff, 0x1498024,
+0xafb00014, 0x8f470014, 0x1021, 0x63100,
+0xafa70018, 0xa32821, 0xa3382b, 0x822021,
+0x872021, 0x8f420108, 0x1663021, 0x40f809,
+0xc3900, 0x54400001, 0xaf500024, 0x8f430024,
+0x8f420020, 0x14620018, 0x0, 0x8f420000,
+0x10400007, 0x0, 0xaf80004c, 0x8f82004c,
+0x1040fffd, 0x0, 0x10000005, 0x0,
+0xaf800048, 0x8f820048, 0x1040fffd, 0x0,
+0x8f820060, 0x2403ffef, 0x431024, 0xaf820060,
+0x8f420000, 0x10400003, 0x0, 0x10000002,
+0xaf80004c, 0xaf800048, 0x8fbf0024, 0x8fb00020,
+0x3e00008, 0x27bd0028, 0x3e00008, 0x0,
+0x27bdffc0, 0x32c20020, 0xafbf0038, 0xafb30034,
+0xafb20030, 0xafb1002c, 0x10400004, 0xafb00028,
+0x8f530028, 0x10000002, 0x0, 0x8f530020,
+0x8f420030, 0x105300e4, 0x21100, 0x8f43001c,
+0x628021, 0x8e040000, 0x8e050004, 0x96120008,
+0x8f420090, 0x9611000a, 0x3246ffff, 0x46102a,
+0x10400017, 0x0, 0x8f8200d8, 0x8f430098,
+0x431023, 0x2442fff8, 0xaf420090, 0x8f420090,
+0x2842fff9, 0x10400005, 0x0, 0x8f420090,
+0x8f430138, 0x431021, 0xaf420090, 0x8f420090,
+0x46102a, 0x10400006, 0x0, 0x8f420338,
+0x24420001, 0xaf420338, 0x100000da, 0x8f420338,
+0x8f8200fc, 0x14400006, 0x32c20008, 0x8f420334,
+0x24420001, 0xaf420334, 0x100000d2, 0x8f420334,
+0x5040000c, 0xaf4000ac, 0x934205b3, 0x10400008,
+0x32220200, 0x10400006, 0x3c034000, 0x9602000e,
+0xaf4300ac, 0x21400, 0x10000002, 0xaf4200b0,
+0xaf4000ac, 0x32220004, 0x1040007f, 0x32220800,
+0x10400003, 0x3247ffff, 0x10000002, 0x24020020,
+0x24020004, 0xafa20010, 0x8f420030, 0xafa20014,
+0x8f420010, 0x3c030002, 0x431025, 0xafa20018,
+0x8f460098, 0x8f420108, 0x40f809, 0x0,
+0x104000b0, 0x0, 0x8f42009c, 0x8f430094,
+0x2421021, 0xaf42009c, 0xae03000c, 0x8f4200ac,
+0x10400008, 0x3c034000, 0x8f420094, 0x431025,
+0xafa20020, 0x8f42009c, 0x8f4300b0, 0x10000004,
+0x431025, 0x8f420094, 0xafa20020, 0x8f42009c,
+0xafa20024, 0x8f8200fc, 0x8fa30020, 0x8fa40024,
+0xac430000, 0xac440004, 0x24420008, 0xaf8200f0,
+0x8f42009c, 0x8f440260, 0x8f450264, 0x401821,
+0x1021, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0x32230060, 0x24020040, 0xaf440260,
+0xaf450264, 0x10620017, 0x2c620041, 0x10400005,
+0x24020020, 0x10620008, 0x24020001, 0x10000026,
+0x0, 0x24020060, 0x10620019, 0x24020001,
+0x10000021, 0x0, 0x8f420268, 0x8f43026c,
+0x24630001, 0x2c640001, 0x441021, 0xaf420268,
+0xaf43026c, 0x8f420268, 0x8f43026c, 0x10000016,
+0x24020001, 0x8f420270, 0x8f430274, 0x24630001,
+0x2c640001, 0x441021, 0xaf420270, 0xaf430274,
+0x8f420270, 0x8f430274, 0x1000000b, 0x24020001,
+0x8f420278, 0x8f43027c, 0x24630001, 0x2c640001,
+0x441021, 0xaf420278, 0xaf43027c, 0x8f420278,
+0x8f43027c, 0x24020001, 0xa34205b3, 0x8f420098,
+0x3244ffff, 0x2406fff8, 0x8f450130, 0x441021,
+0x24420007, 0x461024, 0x24840007, 0xaf420094,
+0x8f420090, 0x8f430094, 0x862024, 0x441023,
+0x65182b, 0x14600005, 0xaf420090, 0x8f420094,
+0x8f430138, 0x431023, 0xaf420094, 0x8f420094,
+0x10000023, 0xaf40009c, 0x3247ffff, 0x10e00021,
+0x0, 0x14400002, 0x24020010, 0x24020002,
+0xafa20010, 0x8f420030, 0xafa20014, 0x8f420010,
+0xafa20018, 0x8f460098, 0x8f420108, 0x40f809,
+0x0, 0x10400033, 0x3245ffff, 0x8f420098,
+0x8f430090, 0x8f460130, 0x451021, 0xaf420098,
+0x8f42009c, 0x8f440098, 0xa34005b3, 0x651823,
+0xaf430090, 0x451021, 0x86202b, 0x14800005,
+0xaf42009c, 0x8f420098, 0x8f430138, 0x431023,
+0xaf420098, 0x8f420030, 0x8f430040, 0x24420001,
+0x2463ffff, 0x431024, 0xaf420030, 0x8f420030,
+0x14530018, 0x0, 0x8f420000, 0x10400007,
+0x0, 0xaf80004c, 0x8f82004c, 0x1040fffd,
+0x0, 0x10000005, 0x0, 0xaf800048,
+0x8f820048, 0x1040fffd, 0x0, 0x8f820060,
+0x2403fff7, 0x431024, 0xaf820060, 0x8f420000,
+0x10400003, 0x0, 0x10000002, 0xaf80004c,
+0xaf800048, 0x8fbf0038, 0x8fb30034, 0x8fb20030,
+0x8fb1002c, 0x8fb00028, 0x3e00008, 0x27bd0040,
+0x3e00008, 0x0, 0x27bdffd0, 0x32c20020,
+0xafbf002c, 0xafb20028, 0xafb10024, 0x10400004,
+0xafb00020, 0x8f520028, 0x10000002, 0x0,
+0x8f520020, 0x8f420030, 0x105200b5, 0x21100,
+0x8f43001c, 0x628021, 0x8e040000, 0x8e050004,
+0x96110008, 0x8f420090, 0x9607000a, 0x3226ffff,
+0x46102a, 0x10400017, 0x0, 0x8f8200d8,
+0x8f430098, 0x431023, 0x2442ff80, 0xaf420090,
+0x8f420090, 0x2842ff81, 0x10400005, 0x0,
+0x8f420090, 0x8f430138, 0x431021, 0xaf420090,
+0x8f420090, 0x46102a, 0x10400006, 0x0,
+0x8f420338, 0x24420001, 0xaf420338, 0x100000ab,
+0x8f420338, 0x8f8600fc, 0x10c0000c, 0x0,
+0x8f8200f4, 0x2403fff8, 0x431024, 0x461023,
+0x218c3, 0x50600001, 0x24030100, 0x8f42008c,
+0x43102b, 0x14400006, 0x712c2, 0x8f420334,
+0x24420001, 0xaf420334, 0x10000098, 0x8f420334,
+0x934305b3, 0x1060000f, 0x30460001, 0x8f420010,
+0x34480400, 0x32c20008, 0x10400008, 0x30e20200,
+0x10400006, 0x3c034000, 0x9602000e, 0xaf4300ac,
+0x21400, 0x10000004, 0xaf4200b0, 0x10000002,
+0xaf4000ac, 0x8f480010, 0x30e20004, 0x10400045,
+0x3227ffff, 0x8f4900ac, 0x11200005, 0x30c200ff,
+0x14400006, 0x24020040, 0x10000004, 0x24020008,
+0x14400002, 0x24020020, 0x24020004, 0xafa20010,
+0x8f430030, 0x11200004, 0xafa30014, 0x8f4200b0,
+0x621025, 0xafa20014, 0x3c020002, 0x1021025,
+0xafa20018, 0x8f460098, 0x8f420108, 0x40f809,
+0x0, 0x10400069, 0x3224ffff, 0x8f42008c,
+0x8f430094, 0x24420001, 0xaf42008c, 0x24020001,
+0xae03000c, 0xa34205b3, 0x8f420098, 0x2406fff8,
+0x8f450130, 0x441021, 0x24420007, 0x461024,
+0x24840007, 0xaf420094, 0x8f420090, 0x8f430094,
+0x862024, 0x441023, 0x65182b, 0x14600005,
+0xaf420090, 0x8f420094, 0x8f430138, 0x431023,
+0xaf420094, 0x8f430094, 0x8f420134, 0x43102b,
+0x10400009, 0x0, 0x8f430130, 0x8f440094,
+0x8f420090, 0x8f45012c, 0x641823, 0x431023,
+0xaf420090, 0xaf450094, 0x8f420094, 0x1000001f,
+0xaf420098, 0x10e0001d, 0x30c200ff, 0x14400002,
+0x24020010, 0x24020002, 0xafa20010, 0x8f420030,
+0xafa80018, 0xafa20014, 0x8f460098, 0x8f420108,
+0x40f809, 0x0, 0x10400030, 0x3225ffff,
+0x8f420098, 0x8f440130, 0x451021, 0xaf420098,
+0x8f420090, 0x8f430098, 0xa34005b3, 0x451023,
+0x64182b, 0x14600005, 0xaf420090, 0x8f420098,
+0x8f430138, 0x431023, 0xaf420098, 0x8f420030,
+0x8f430040, 0x24420001, 0x2463ffff, 0x431024,
+0xaf420030, 0x8f420030, 0x14520018, 0x0,
+0x8f420000, 0x10400007, 0x0, 0xaf80004c,
+0x8f82004c, 0x1040fffd, 0x0, 0x10000005,
+0x0, 0xaf800048, 0x8f820048, 0x1040fffd,
+0x0, 0x8f820060, 0x2403fff7, 0x431024,
+0xaf820060, 0x8f420000, 0x10400003, 0x0,
+0x10000002, 0xaf80004c, 0xaf800048, 0x8fbf002c,
+0x8fb20028, 0x8fb10024, 0x8fb00020, 0x3e00008,
+0x27bd0030, 0x3e00008, 0x0, 0x27bdffd8,
+0x3c020001, 0x34422ec0, 0xafbf0020, 0x8f4300f0,
+0x8f840108, 0x2e21021, 0x54620004, 0x24620008,
+0x3c020001, 0x34422cc0, 0x2e21021, 0x401821,
+0xaf4300f0, 0xac600000, 0x8f4200ec, 0x8c660004,
+0x14620004, 0x3c020001, 0x24820020, 0x1000000f,
+0xaf820108, 0x8f4300f0, 0x34422ec0, 0x2e21021,
+0x54620004, 0x24620008, 0x3c020001, 0x34422cc0,
+0x2e21021, 0x401821, 0x8c620004, 0x21140,
+0x821021, 0xaf820108, 0xac600000, 0x8c850018,
+0x30a20036, 0x1040006c, 0x30a20001, 0x8c82001c,
+0x8f430040, 0x8f440034, 0x24420001, 0x2463ffff,
+0x431024, 0x862021, 0xaf42002c, 0x30a20030,
+0x14400006, 0xaf440034, 0x8f420034, 0x8c03023c,
+0x43102b, 0x144000c9, 0x0, 0x32c20010,
+0x10400028, 0x24070008, 0x8f440160, 0x8f450164,
+0x8f43002c, 0x8f48000c, 0x8f860120, 0x24020080,
+0xafa20010, 0xafa30014, 0xafa80018, 0x8f42010c,
+0x40f809, 0x24c6001c, 0x14400011, 0x24020001,
+0x3c010001, 0x370821, 0xa02240f1, 0x8f820124,
+0xafa20010, 0x8f820128, 0x3c040001, 0x24843800,
+0xafa20014, 0x8f46002c, 0x8f870120, 0x3c050009,
+0xc0029d3, 0x34a51100, 0x10000036, 0x0,
+0x8f4202f0, 0x8f43002c, 0x24420001, 0xaf4202f0,
+0x8f4202f0, 0x24020001, 0xa34205b2, 0x10000026,
+0xaf430038, 0x8f440160, 0x8f450164, 0x8f43002c,
+0x8f48000c, 0x8f860120, 0x24020020, 0xafa20010,
+0xafa30014, 0xafa80018, 0x8f42010c, 0x40f809,
+0x24c6001c, 0x14400011, 0x24020001, 0x3c010001,
+0x370821, 0xa02240f0, 0x8f820124, 0xafa20010,
+0x8f820128, 0x3c040001, 0x248437f4, 0xafa20014,
+0x8f46002c, 0x8f870120, 0x3c050009, 0xc0029d3,
+0x34a50900, 0x1000000f, 0x0, 0x8f4202f0,
+0x24420001, 0xaf4202f0, 0x8f4202f0, 0x8f42002c,
+0xa34005b2, 0xaf420038, 0x3c010001, 0x370821,
+0xa02040f1, 0x3c010001, 0x370821, 0xa02040f0,
+0xaf400034, 0x8f420304, 0x24420001, 0xaf420304,
+0x1000006e, 0x8f420304, 0x10400025, 0x30a27000,
+0x8c85001c, 0x8f420028, 0xa22023, 0x4810003,
+0x0, 0x8f420040, 0x822021, 0x8f420348,
+0x8f430000, 0x441021, 0xaf420348, 0x8f42035c,
+0xaf450028, 0x441021, 0x10600007, 0xaf42035c,
+0xaf80004c, 0x8f82004c, 0x1040fffd, 0x0,
+0x10000005, 0x0, 0xaf800048, 0x8f820048,
+0x1040fffd, 0x0, 0x8f820060, 0x34420008,
+0xaf820060, 0x8f420000, 0x10400003, 0x0,
+0x1000004a, 0xaf80004c, 0x10000048, 0xaf800048,
+0x1040002f, 0x30a21000, 0x1040000c, 0x30a24000,
+0x8c83001c, 0x8f420050, 0x622023, 0x4820001,
+0x24840200, 0x8f42034c, 0x441021, 0xaf42034c,
+0x8f420358, 0x1000001a, 0xaf430050, 0x1040000c,
+0x32c28000, 0x8c83001c, 0x8f420070, 0x622023,
+0x4820001, 0x24840400, 0x8f420354, 0x441021,
+0xaf420354, 0x8f420358, 0x1000000d, 0xaf430070,
+0x1040000e, 0x3c020800, 0x8c83001c, 0x8f420060,
+0x622023, 0x4820001, 0x24840100, 0x8f420350,
+0x441021, 0xaf420350, 0x8f420358, 0xaf430060,
+0x441021, 0xaf420358, 0x3c020800, 0x2c21024,
+0x5040001a, 0x36940040, 0x10000018, 0x0,
+0x30a20100, 0x10400015, 0x0, 0x3c020001,
+0x8c423c54, 0x1040000c, 0x0, 0x274301b0,
+0x24650400, 0x65102b, 0x10400007, 0x26e40028,
+0x8c820000, 0xac620000, 0x24630004, 0x65102b,
+0x1440fffb, 0x24840004, 0x8f4202cc, 0xa34005b6,
+0x24420001, 0xaf4202cc, 0x8f4202cc, 0x8fbf0020,
+0x3e00008, 0x27bd0028, 0x3e00008, 0x0,
+0x27bdffa8, 0xafbf0050, 0xafbe004c, 0xafb50048,
+0xafb30044, 0xafb20040, 0xafb1003c, 0xafb00038,
+0x8f910108, 0x26220020, 0xaf820108, 0x8e320018,
+0xa821, 0x32420024, 0x104001b1, 0xf021,
+0x8e26001c, 0x8f42001c, 0x61900, 0x431021,
+0x8c50000c, 0x9603000c, 0x962d0016, 0x9453000a,
+0x2c6205dd, 0x10400015, 0x2821, 0x32c20040,
+0x10400015, 0x24020800, 0x96030014, 0x14620012,
+0x3402aaaa, 0x9603000e, 0x14620007, 0x2021,
+0x96030010, 0x24020300, 0x14620004, 0x801021,
+0x96020012, 0x2c440001, 0x801021, 0x54400006,
+0x24050016, 0x10000004, 0x0, 0x24020800,
+0x50620001, 0x2405000e, 0x934205b4, 0x14400008,
+0x5821, 0x240b0001, 0x32620180, 0xaf4500a8,
+0xaf5000a0, 0x10400002, 0xaf4600a4, 0xa34b05b4,
+0x10a00085, 0x2054021, 0x91020000, 0x3821,
+0x3042000f, 0x25080, 0x32c20002, 0x10400012,
+0x10a1821, 0x32620002, 0x10400010, 0x32c20001,
+0x1002021, 0x94820000, 0x24840002, 0xe23821,
+0x83102b, 0x1440fffb, 0x30e2ffff, 0x71c02,
+0x623821, 0x71c02, 0x30e2ffff, 0x623821,
+0x71027, 0xa502000a, 0x32c20001, 0x1040006a,
+0x32620001, 0x10400068, 0x0, 0x8f4200a8,
+0x10400065, 0x0, 0x8f4200a0, 0x8f4300a8,
+0x431021, 0x904c0009, 0x318900ff, 0x39230006,
+0x3182b, 0x39220011, 0x2102b, 0x621824,
+0x1060000c, 0x3c050006, 0x8f4200a4, 0x3c040001,
+0x24843810, 0xafa20010, 0x8f4200a0, 0x34a54600,
+0x1203821, 0xc0029d3, 0xafa20014, 0x1000004e,
+0x0, 0x32c20004, 0x14400013, 0x2821,
+0x316200ff, 0x14400004, 0x0, 0x95020002,
+0x1000000d, 0x4a2823, 0x9505000c, 0x9502000e,
+0x95030010, 0xa22821, 0xa32821, 0x95030012,
+0x91040009, 0x95020002, 0xa32821, 0xa42821,
+0x4a1023, 0xa22821, 0x2002021, 0x94820000,
+0x24840002, 0xe23821, 0x88102b, 0x1440fffb,
+0x71c02, 0x30e2ffff, 0x623821, 0x71c02,
+0x30e2ffff, 0x623821, 0x1a52821, 0x51c02,
+0x30a2ffff, 0x622821, 0x51c02, 0x30a2ffff,
+0x622821, 0xa72823, 0x51402, 0xa22821,
+0x30a5ffff, 0x50a00001, 0x3405ffff, 0x316200ff,
+0x14400008, 0x318300ff, 0x8f4300a0, 0x8f4200a8,
+0x624021, 0x91020000, 0x3042000f, 0x25080,
+0x318300ff, 0x24020006, 0x14620003, 0x10a1021,
+0x10000002, 0x24440010, 0x24440006, 0x316200ff,
+0x14400006, 0x0, 0x94820000, 0xa22821,
+0x51c02, 0x30a2ffff, 0x622821, 0x934205b4,
+0x10400003, 0x32620100, 0x50400003, 0xa4850000,
+0x52827, 0xa4850000, 0x9622000e, 0x8f43009c,
+0x621821, 0x32a200ff, 0x10400007, 0xaf43009c,
+0x3c024000, 0x2021025, 0xafa20020, 0x8f42009c,
+0x10000003, 0x5e1025, 0xafb00020, 0x8f42009c,
+0xafa20024, 0x32620080, 0x10400010, 0x32620100,
+0x8f4200b4, 0x24430001, 0x210c0, 0x571021,
+0xaf4300b4, 0x8fa30020, 0x8fa40024, 0x3c010001,
+0x220821, 0xac2338e8, 0x3c010001, 0x220821,
+0xac2438ec, 0x100000a5, 0xaf40009c, 0x10400064,
+0x0, 0x8f4200b4, 0x24430001, 0x210c0,
+0x571021, 0xaf4300b4, 0x8fa30020, 0x8fa40024,
+0x3c010001, 0x220821, 0xac2338e8, 0x3c010001,
+0x220821, 0xac2438ec, 0x8f4200b4, 0x10400051,
+0x3821, 0x3c090001, 0x352938e8, 0x3c08001f,
+0x3508ffff, 0x240bffff, 0x340affff, 0x710c0,
+0x571021, 0x491021, 0x8c430000, 0x8c440004,
+0xafa30028, 0xafa4002c, 0x8f8200fc, 0x8fa30028,
+0x8fa4002c, 0xac430000, 0xac440004, 0x24420008,
+0xaf8200f0, 0x8f42008c, 0x2442ffff, 0xaf42008c,
+0x97a2002e, 0x8f440260, 0x8f450264, 0x401821,
+0x1021, 0xa32821, 0xa3302b, 0x822021,
+0x862021, 0xaf440260, 0xaf450264, 0x8fa20028,
+0x481024, 0x90430000, 0x30630001, 0x1460000b,
+0x402021, 0x8f420268, 0x8f43026c, 0x24630001,
+0x2c640001, 0x441021, 0xaf420268, 0xaf43026c,
+0x8f420268, 0x1000001a, 0x8f43026c, 0x8c820000,
+0x144b000e, 0x0, 0x94820004, 0x144a000b,
+0x0, 0x8f420278, 0x8f43027c, 0x24630001,
+0x2c640001, 0x441021, 0xaf420278, 0xaf43027c,
+0x8f420278, 0x1000000a, 0x8f43027c, 0x8f420270,
+0x8f430274, 0x24630001, 0x2c640001, 0x441021,
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 27'
echo 'File patch-2.2.4 is continued in part 28'
echo 28 > _shar_seq_.tmp
#!/bin/sh
# this is part 30 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 30; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
X cp = mp->rx_cmds;
X for (i = 0; i < N_RX_RING - 1; ++i) {
@@ -335,25 +367,17 @@
X out_8(&mb->maccc, mp->maccc);
X /* enable all interrupts except receive interrupts */
X out_8(&mb->imr, RCVINT);
+
+#ifdef MOD_INC_USE_COUNT
+ MOD_INC_USE_COUNT;
+#endif
X return 0;
X }
X
-static int mace_close(struct device *dev)
+static inline void mace_clean_rings(struct mace_data *mp)
X {
- struct mace_data *mp = (struct mace_data *) dev->priv;
- volatile struct mace *mb = mp->mace;
- volatile struct dbdma_regs *rd = mp->rx_dma;
- volatile struct dbdma_regs *td = mp->tx_dma;
X int i;
X
- /* disable rx and tx */
- mb->maccc = 0;
- mb->imr = 0xff; /* disable all intrs */
-
- /* disable rx and tx dma */
- st_le32(&rd->control, (RUN|PAUSE|FLUSH|WAKE) << 16); /* clear run bit */
- st_le32(&td->control, (RUN|PAUSE|FLUSH|WAKE) << 16); /* clear run bit */
-
X /* free some skb's */
X for (i = 0; i < N_RX_RING; ++i) {
X if (mp->rx_bufs[i] != 0) {
@@ -366,6 +390,28 @@
X if (++i >= N_TX_RING)
X i = 0;
X }
+}
+
+static int mace_close(struct device *dev)
+{
+ struct mace_data *mp = (struct mace_data *) dev->priv;
+ volatile struct mace *mb = mp->mace;
+ volatile struct dbdma_regs *rd = mp->rx_dma;
+ volatile struct dbdma_regs *td = mp->tx_dma;
+
+ /* disable rx and tx */
+ out_8(&mb->maccc, 0);
+ out_8(&mb->imr, 0xff); /* disable all intrs */
+
+ /* disable rx and tx dma */
+ st_le32(&rd->control, (RUN|PAUSE|FLUSH|WAKE) << 16); /* clear run bit */
+ st_le32(&td->control, (RUN|PAUSE|FLUSH|WAKE) << 16); /* clear run bit */
+
+ mace_clean_rings(mp);
+
+#ifdef MOD_DEC_USE_COUNT
+ MOD_DEC_USE_COUNT;
+#endif
X
X return 0;
X }
@@ -517,10 +563,10 @@
X
X if (intr & MPCO)
X mp->stats.rx_missed_errors += 256;
- mp->stats.rx_missed_errors += mb->mpc; /* reading clears it */
+ mp->stats.rx_missed_errors += in_8(&mb->mpc); /* reading clears it */
X if (intr & RNTPCO)
X mp->stats.rx_length_errors += 256;
- mp->stats.rx_length_errors += mb->rntpc; /* reading clears it */
+ mp->stats.rx_length_errors += in_8(&mb->rntpc); /* reading clears it */
X if (intr & CERR)
X ++mp->stats.tx_heartbeat_errors;
X if (intr & BABBLE)
@@ -547,7 +593,7 @@
X mace_handle_misc_intrs(mp, intr);
X
X i = mp->tx_empty;
- while (mb->pr & XMTSV) {
+ while (in_8(&mb->pr) & XMTSV) {
X del_timer(&mp->tx_timeout);
X mp->timeout_active = 0;
X /*
@@ -555,13 +601,13 @@
X * word. This appears to unlatch any error indication from
X * the DMA controller.
X */
- intr = mb->ir;
+ intr = in_8(&mb->ir);
X if (intr != 0)
X mace_handle_misc_intrs(mp, intr);
X if (mp->tx_bad_runt) {
X fs = in_8(&mb->xmtfs);
X mp->tx_bad_runt = 0;
- mb->xmtfc = AUTO_PAD_XMIT;
+ out_8(&mb->xmtfc, AUTO_PAD_XMIT);
X continue;
X }
X dstat = ld_le32(&td->status);
@@ -571,7 +617,7 @@
X * xcount is the number of complete frames which have been
X * written to the fifo but for which status has not been read.
X */
- xcount = (mb->fifofc >> XMTFC_SH) & XMTFC_MASK;
+ xcount = (in_8(&mb->fifofc) >> XMTFC_SH) & XMTFC_MASK;
X if (xcount == 0 || (dstat & DEAD)) {
X /*
X * If a packet was aborted before the DMA controller has
@@ -586,11 +632,15 @@
X */
X out_8(&mb->xmtfc, DXMTFCS);
X }
- fs = mb->xmtfs;
+ fs = in_8(&mb->xmtfs);
X if ((fs & XMTSV) == 0) {
X printk(KERN_ERR "mace: xmtfs not valid! (fs=%x xc=%d ds=%x)\n",
X fs, xcount, dstat);
- return;
+ mace_reset(dev);
+ /*
+ * XXX mace likes to hang the machine after a xmtfs error.
+ * This is hard to reproduce, reseting *may* help
+ */
X }
X cp = mp->tx_cmds + NCMDS_TX * i;
X stat = ld_le16(&cp->xfer_status);
@@ -600,7 +650,7 @@
X * the transmit FIFO.
X */
X udelay(1);
- x = (mb->fifofc >> XMTFC_SH) & XMTFC_MASK;
+ x = (in_8(&mb->fifofc) >> XMTFC_SH) & XMTFC_MASK;
X if (x != 0) {
X /* there were two bytes with an end-of-packet indication */
X mp->tx_bad_runt = 1;
@@ -612,10 +662,10 @@
X * We flush the transmit FIFO just in case (by setting the
X * XMTFWU bit with the transmitter disabled).
X */
- out_8(&mb->maccc, mb->maccc & ~ENXMT);
- out_8(&mb->fifocc, mb->fifocc | XMTFWU);
+ out_8(&mb->maccc, in_8(&mb->maccc) & ~ENXMT);
+ out_8(&mb->fifocc, in_8(&mb->fifocc) | XMTFWU);
X udelay(1);
- out_8(&mb->maccc, mb->maccc | ENXMT);
+ out_8(&mb->maccc, in_8(&mb->maccc) | ENXMT);
X out_8(&mb->xmtfc, AUTO_PAD_XMIT);
X }
X }
@@ -632,7 +682,7 @@
X ++mp->stats.tx_carrier_errors;
X if (fs & (UFLO|LCOL|RTRY))
X ++mp->stats.tx_aborted_errors;
- } else
+ } else
X ++mp->stats.tx_packets;
X dev_kfree_skb(mp->tx_bufs[i]);
X --mp->tx_active;
@@ -686,19 +736,19 @@
X goto out;
X
X /* update various counters */
- mace_handle_misc_intrs(mp, mb->ir);
+ mace_handle_misc_intrs(mp, in_8(&mb->ir));
X
X cp = mp->tx_cmds + NCMDS_TX * mp->tx_empty;
X
X /* turn off both tx and rx and reset the chip */
X out_8(&mb->maccc, 0);
- out_le32(&td->control, (RUN|PAUSE|FLUSH|WAKE) << 16);
X printk(KERN_ERR "mace: transmit timeout - resetting\n");
+ dbdma_reset(td);
X mace_reset(dev);
X
X /* restart rx dma */
X cp = bus_to_virt(ld_le32(&rd->cmdptr));
- out_le32(&rd->control, (RUN|PAUSE|FLUSH|WAKE) << 16);
+ dbdma_reset(rd);
X out_le16(&cp->xfer_status, 0);
X out_le32(&rd->cmdptr, virt_to_bus(cp));
X out_le32(&rd->control, (RUN << 16) | RUN);
@@ -786,8 +836,8 @@
X ++mp->stats.rx_crc_errors;
X } else {
X /* Mace feature AUTO_STRIP_RCV is on by default, dropping the
- * FCS on frames with 802.3 headers. This means that Ethernet
- * frames have 8 extra octets at the end, while 802.3 frames
+ * FCS on frames with 802.3 headers. This means that Ethernet
+ * frames have 8 extra octets at the end, while 802.3 frames
X * have only 4. We need to correctly account for this. */
X if (*(unsigned short *)(data+12) < 1536) /* 802.3 header */
X nb -= 4;
@@ -846,3 +896,35 @@
X mp->rx_fill = i;
X }
X }
+
+#ifdef MODULE
+
+#if LINUX_VERSION_CODE > 0x20118
+MODULE_AUTHOR("Paul Mackerras");
+MODULE_DESCRIPTION("PowerMac MACE driver.");
+#endif
+
+int init_module(void)
+{
+ int res;
+
+ if(mace_devs != NULL)
+ return -EBUSY;
+ res = mace_probe(NULL);
+ return res;
+}
+
+void cleanup_module(void)
+{
+ struct mace_data *mp = (struct mace_data *) mace_devs->priv;
+ unregister_netdev(mace_devs);
+
+ free_irq(mace_devs->irq, mace_interrupt);
+ free_irq(mp->tx_dma_intr, mace_txdma_intr);
+ free_irq(mp->rx_dma_intr, mace_rxdma_intr);
+
+ kfree(mace_devs);
+ mace_devs = NULL;
+}
+
+#endif
diff -u --recursive --new-file v2.2.3/linux/drivers/net/myri_sbus.c linux/drivers/net/myri_sbus.c
--- v2.2.3/linux/drivers/net/myri_sbus.c Tue Jul 28 14:21:08 1998
+++ linux/drivers/net/myri_sbus.c Mon Mar 15 16:11:30 1999
@@ -278,7 +278,7 @@
X mp->rx_skbs[i] = skb;
X skb->dev = dev;
X skb_put(skb, RX_ALLOC_SIZE);
- rxd[i].myri_scatters[0].addr = (u32) ((unsigned long)skb->data);
+ rxd[i].myri_scatters[0].addr = sbus_dvma_addr(skb->data);
X rxd[i].myri_scatters[0].len = RX_ALLOC_SIZE;
X rxd[i].ctx = i;
X rxd[i].num_sg = 1;
@@ -340,12 +340,6 @@
X dev_kfree_skb(skb);
X mp->tx_skbs[entry] = NULL;
X mp->enet_stats.tx_packets++;
-
-#ifdef NEED_DMA_SYNCHRONIZATION
- mmu_sync_dma(((u32)((unsigned long)skb->data)),
- skb->len, mp->myri_sbus_dev->my_bus);
-#endif
-
X entry = NEXT_TX(entry);
X }
X mp->tx_old = entry;
@@ -437,8 +431,7 @@
X drops++;
X DRX(("DROP "));
X mp->enet_stats.rx_dropped++;
- rxd->myri_scatters[0].addr =
- (u32) ((unsigned long)skb->data);
+ rxd->myri_scatters[0].addr = sbus_dvma_addr(skb->data);
X rxd->myri_scatters[0].len = RX_ALLOC_SIZE;
X rxd->ctx = index;
X rxd->num_sg = 1;
@@ -447,7 +440,7 @@
X }
X
X #ifdef NEED_DMA_SYNCHRONIZATION
- mmu_sync_dma(((u32)((unsigned long)skb->data)),
+ mmu_sync_dma(sbus_dvma_addr(skb->data),
X skb->len, mp->myri_sbus_dev->my_bus);
X #endif
X
@@ -464,8 +457,7 @@
X mp->rx_skbs[index] = new_skb;
X new_skb->dev = dev;
X skb_put(new_skb, RX_ALLOC_SIZE);
- rxd->myri_scatters[0].addr =
- (u32) ((unsigned long)new_skb->data);
+ rxd->myri_scatters[0].addr = sbus_dvma_addr(new_skb->data);
X rxd->myri_scatters[0].len = RX_ALLOC_SIZE;
X rxd->ctx = index;
X rxd->num_sg = 1;
@@ -489,8 +481,7 @@
X
X /* Reuse original ring buffer. */
X DRX(("reuse "));
- rxd->myri_scatters[0].addr =
- (u32) ((unsigned long)skb->data);
+ rxd->myri_scatters[0].addr = sbus_dvma_addr(skb->data);
X rxd->myri_scatters[0].len = RX_ALLOC_SIZE;
X rxd->ctx = index;
X rxd->num_sg = 1;
@@ -600,6 +591,12 @@
X return 1;
X }
X
+
+#ifdef NEED_DMA_SYNCHRONIZATION
+ mmu_sync_dma(sbus_dvma_addr(skb->data),
+ skb->len, mp->myri_sbus_dev->my_bus);
+#endif
+
X /* This is just to prevent multiple PIO reads for TX_BUFFS_AVAIL. */
X head = sq->head;
X tail = sq->tail;
@@ -628,8 +625,7 @@
X txd = &sq->myri_txd[entry];
X mp->tx_skbs[entry] = skb;
X
- txd->myri_gathers[0].addr =
- (unsigned int) ((unsigned long)skb->data);
+ txd->myri_gathers[0].addr = sbus_dvma_addr(skb->data);
X txd->myri_gathers[0].len = len;
X txd->num_sg = 1;
X txd->chan = KERNEL_CHANNEL;
diff -u --recursive --new-file v2.2.3/linux/drivers/net/ne2.c linux/drivers/net/ne2.c
--- v2.2.3/linux/drivers/net/ne2.c Fri Jan 8 22:36:07 1999
+++ linux/drivers/net/ne2.c Wed Mar 10 16:51:35 1999
@@ -75,7 +75,6 @@
X #include <asm/dma.h>
X #include <linux/errno.h>
X #include <linux/init.h>
-#include <linux/ioport.h>
X #include <linux/mca.h>
X
X #include <linux/netdevice.h>
diff -u --recursive --new-file v2.2.3/linux/drivers/net/ppp.c linux/drivers/net/ppp.c
--- v2.2.3/linux/drivers/net/ppp.c Tue Feb 23 15:21:33 1999
+++ linux/drivers/net/ppp.c Wed Mar 10 16:51:35 1999
@@ -61,7 +61,6 @@
X #include <linux/malloc.h>
X #include <linux/tty.h>
X #include <linux/errno.h>
-#include <linux/sched.h> /* to get the struct task_struct */
X #include <linux/string.h> /* used in new tty drivers */
X #include <linux/signal.h> /* used in new tty drivers */
X #include <asm/system.h>
diff -u --recursive --new-file v2.2.3/linux/drivers/net/ppp_deflate.c linux/drivers/net/ppp_deflate.c
--- v2.2.3/linux/drivers/net/ppp_deflate.c Wed Apr 1 20:11:52 1998
+++ linux/drivers/net/ppp_deflate.c Wed Mar 10 16:51:35 1999
@@ -43,7 +43,6 @@
X #include <linux/malloc.h>
X #include <linux/vmalloc.h>
X #include <linux/errno.h>
-#include <linux/sched.h> /* to get the struct task_struct */
X #include <linux/string.h> /* used in new tty drivers */
X #include <linux/signal.h> /* used in new tty drivers */
X
diff -u --recursive --new-file v2.2.3/linux/drivers/net/shaper.c linux/drivers/net/shaper.c
--- v2.2.3/linux/drivers/net/shaper.c Wed Mar 10 15:29:46 1999
+++ linux/drivers/net/shaper.c Wed Mar 10 16:51:35 1999
@@ -66,7 +66,6 @@
X #include <linux/sched.h>
X #include <linux/ptrace.h>
X #include <linux/fcntl.h>
-#include <linux/sched.h>
X #include <linux/mm.h>
X #include <linux/malloc.h>
X #include <linux/string.h>
diff -u --recursive --new-file v2.2.3/linux/drivers/net/smc9194.c linux/drivers/net/smc9194.c
--- v2.2.3/linux/drivers/net/smc9194.c Thu Feb 12 20:56:09 1998
+++ linux/drivers/net/smc9194.c Wed Mar 10 16:51:35 1999
@@ -65,7 +65,6 @@
X #include <linux/in.h>
X #include <linux/malloc.h>
X #include <linux/string.h>
-#include <linux/ioport.h>
X #include <linux/init.h>
X #include <asm/bitops.h>
X #include <asm/io.h>
diff -u --recursive --new-file v2.2.3/linux/drivers/net/sunbmac.c linux/drivers/net/sunbmac.c
--- v2.2.3/linux/drivers/net/sunbmac.c Wed Dec 31 16:00:00 1969
+++ linux/drivers/net/sunbmac.c Mon Mar 15 16:11:30 1999
@@ -0,0 +1,1557 @@
+/* sunbmac.c: Driver for Sparc BigMAC 100baseT ethernet adapters.
+ *
+ * Copyright (C) 1997, 1998 David S. Miller (da...@caip.rutgers.edu)
+ */
+
+static char *version =
+ "sunbmac.c:v1.1 8/Dec/98 David S. Miller (da...@caipfs.rutgers.edu)\n";
+
+#include <linux/module.h>
+
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/types.h>
+#include <linux/fcntl.h>
+#include <linux/interrupt.h>
+#include <linux/ptrace.h>
+#include <linux/ioport.h>
+#include <linux/in.h>
+#include <linux/malloc.h>
+#include <linux/string.h>
+#include <linux/delay.h>
+#include <linux/init.h>
+#include <asm/system.h>
+#include <asm/bitops.h>
+#include <asm/io.h>
+#include <asm/dma.h>
+#include <linux/errno.h>
+#include <asm/byteorder.h>
+
+#include <asm/idprom.h>
+#include <asm/sbus.h>
+#include <asm/openprom.h>
+#include <asm/oplib.h>
+#include <asm/auxio.h>
+#include <asm/system.h>
+#include <asm/pgtable.h>
+
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+#include "sunbmac.h"
+
+#undef DEBUG_PROBE
+#undef DEBUG_TX
+#undef DEBUG_IRQ
+
+#ifdef DEBUG_PROBE
+#define DP(x) printk x
+#else
+#define DP(x)
+#endif
+
+#ifdef DEBUG_TX
+#define DTX(x) printk x
+#else
+#define DTX(x)
+#endif
+
+#ifdef DEBUG_IRQ
+#define DIRQ(x) printk x
+#else
+#define DIRQ(x)
+#endif
+
+#ifdef MODULE
+static struct bigmac *root_bigmac_dev = NULL;
+#endif
+
+#define DEFAULT_JAMSIZE 4 /* Toe jam */
+
+#define QEC_RESET_TRIES 200
+
+static inline int qec_global_reset(struct qe_globreg *gregs)
+{
+ int tries = QEC_RESET_TRIES;
+
+ gregs->ctrl = GLOB_CTRL_RESET;
+ while(--tries) {
+ if(gregs->ctrl & GLOB_CTRL_RESET) {
+ udelay(20);
+ continue;
+ }
+ break;
+ }
+ if(tries)
+ return 0;
+ printk("BigMAC: Cannot reset the QEC.\n");
+ return -1;
+}
+
+static void qec_init(struct bigmac *bp)
+{
+ struct qe_globreg *gregs = bp->gregs;
+ struct linux_sbus_device *qec_sdev = bp->qec_sbus_dev;
+ unsigned char bsizes = bp->bigmac_bursts;
+ unsigned int regval;
+
+ /* 64byte bursts do not work at the moment, do
+ * not even try to enable them. -DaveM
+ */
+ if(bsizes & DMA_BURST32)
+ regval = GLOB_CTRL_B32;
+ else
+ regval = GLOB_CTRL_B16;
+ gregs->ctrl = regval | GLOB_CTRL_BMODE;
+
+ gregs->psize = GLOB_PSIZE_2048;
+
+ /* All of memsize is given to bigmac. */
+ gregs->msize = qec_sdev->reg_addrs[1].reg_size;
+
+ /* Half to the transmitter, half to the receiver. */
+ gregs->rsize = gregs->tsize = qec_sdev->reg_addrs[1].reg_size >> 1;
+}
+
+/* XXX auto negotiation on these things might not be pleasant... */
+
+#define TX_RESET_TRIES 32
+#define RX_RESET_TRIES 32
+
+static inline void bigmac_tx_reset(struct BIG_MAC_regs *bregs)
+{
+ int tries = TX_RESET_TRIES;
+
+ bregs->tx_cfg = 0;
+
+ /* The fifo threshold bit is read-only and does
+ * not clear. -DaveM
+ */
+ while((bregs->tx_cfg & ~(BIGMAC_TXCFG_FIFO)) != 0 &&
+ --tries != 0)
+ udelay(20);
+
+ if(!tries) {
+ printk("BIGMAC: Transmitter will not reset.\n");
+ printk("BIGMAC: tx_cfg is %08x\n", bregs->tx_cfg);
+ }
+}
+
+static inline void bigmac_rx_reset(struct BIG_MAC_regs *bregs)
+{
+ int tries = RX_RESET_TRIES;
+
+ bregs->rx_cfg = 0;
+ while((bregs->rx_cfg) && --tries)
+ udelay(20);
+
+ if(!tries) {
+ printk("BIGMAC: Receiver will not reset.\n");
+ printk("BIGMAC: rx_cfg is %08x\n", bregs->rx_cfg);
+ }
+}
+
+/* Reset the transmitter and receiver. */
+static void bigmac_stop(struct bigmac *bp)
+{
+ bigmac_tx_reset(bp->bregs);
+ bigmac_rx_reset(bp->bregs);
+}
+
+static void bigmac_get_counters(struct bigmac *bp, struct BIG_MAC_regs *bregs)
+{
+ struct enet_statistics *stats = &bp->enet_stats;
+
+ stats->rx_crc_errors += bregs->rcrce_ctr;
+ bregs->rcrce_ctr = 0;
+
+ stats->rx_frame_errors += bregs->unale_ctr;
+ bregs->unale_ctr = 0;
+
+ stats->rx_length_errors += bregs->gle_ctr;
+ bregs->gle_ctr = 0;
+
+ stats->tx_aborted_errors += bregs->ex_ctr;
+
+ stats->collisions += (bregs->ex_ctr + bregs->lt_ctr);
+ bregs->ex_ctr = bregs->lt_ctr = 0;
+}
+
+static inline void bigmac_clean_rings(struct bigmac *bp)
+{
+ int i;
+
+ for(i = 0; i < RX_RING_SIZE; i++) {
+ if(bp->rx_skbs[i] != NULL) {
+ dev_kfree_skb(bp->rx_skbs[i]);
+ bp->rx_skbs[i] = NULL;
+ }
+ }
+
+ for(i = 0; i < TX_RING_SIZE; i++) {
+ if(bp->tx_skbs[i] != NULL) {
+ dev_kfree_skb(bp->tx_skbs[i]);
+ bp->tx_skbs[i] = NULL;
+ }
+ }
+}
+
+static void bigmac_init_rings(struct bigmac *bp, int from_irq)
+{
+ struct bmac_init_block *bb = bp->bmac_block;
+ struct device *dev = bp->dev;
+ int i, gfp_flags = GFP_KERNEL;
+
+ if(from_irq || in_interrupt())
+ gfp_flags = GFP_ATOMIC;
+
+ bp->rx_new = bp->rx_old = bp->tx_new = bp->tx_old = 0;
+
+ /* Free any skippy bufs left around in the rings. */
+ bigmac_clean_rings(bp);
+
+ /* Now get new skippy bufs for the receive ring. */
+ for(i = 0; i < RX_RING_SIZE; i++) {
+ struct sk_buff *skb;
+
+ skb = big_mac_alloc_skb(RX_BUF_ALLOC_SIZE, gfp_flags);
+ if(!skb)
+ continue;
+
+ bp->rx_skbs[i] = skb;
+ skb->dev = dev;
+
+ /* Because we reserve afterwards. */
+ skb_put(skb, ETH_FRAME_LEN);
+ skb_reserve(skb, 34);
+
+ bb->be_rxd[i].rx_addr = sbus_dvma_addr(skb->data);
+ bb->be_rxd[i].rx_flags =
+ (RXD_OWN | ((RX_BUF_ALLOC_SIZE - 34) & RXD_LENGTH));
+ }
+
+ for(i = 0; i < TX_RING_SIZE; i++)
+ bb->be_txd[i].tx_flags = bb->be_txd[i].tx_addr = 0;
+}
+
+#ifndef __sparc_v9__
+static void sun4c_bigmac_init_rings(struct bigmac *bp)
+{
+ struct bmac_init_block *bb = bp->bmac_block;
+ __u32 bbufs_dvma = bp->s4c_buf_dvma;
+ int i;
+
+ bp->rx_new = bp->rx_old = bp->tx_new = bp->tx_old = 0;
+
+ for(i = 0; i < RX_RING_SIZE; i++) {
+ bb->be_rxd[i].rx_addr = bbufs_dvma + bbuf_offset(rx_buf, i);
+ bb->be_rxd[i].rx_flags =
+ (RXD_OWN | (SUN4C_RX_BUFF_SIZE & RXD_LENGTH));
+ }
+
+ for(i = 0; i < TX_RING_SIZE; i++)
+ bb->be_txd[i].tx_flags = bb->be_txd[i].tx_addr = 0;
+}
+#endif
+
+#define MGMT_CLKON (MGMT_PAL_INT_MDIO|MGMT_PAL_EXT_MDIO|MGMT_PAL_OENAB|MGMT_PAL_DCLOCK)
+#define MGMT_CLKOFF (MGMT_PAL_INT_MDIO|MGMT_PAL_EXT_MDIO|MGMT_PAL_OENAB)
+
+static inline void idle_transceiver(struct bmac_tcvr *tregs)
+{
+ volatile unsigned int garbage;
+ int i = 20;
+
+ while(i--) {
+ tregs->mgmt_pal = MGMT_CLKOFF;
+ garbage = tregs->mgmt_pal;
+ tregs->mgmt_pal = MGMT_CLKON;
+ garbage = tregs->mgmt_pal;
+ }
+}
+
+static void write_tcvr_bit(struct bigmac *bp, struct bmac_tcvr *tregs, int bit)
+{
+ volatile unsigned int garbage;
+
+ if(bp->tcvr_type == internal) {
+ bit = (bit & 1) << 3;
+ tregs->mgmt_pal = bit | (MGMT_PAL_OENAB | MGMT_PAL_EXT_MDIO);
+ garbage = tregs->mgmt_pal;
+ tregs->mgmt_pal = bit | (MGMT_PAL_OENAB |
+ MGMT_PAL_EXT_MDIO |
+ MGMT_PAL_DCLOCK);
+ garbage = tregs->mgmt_pal;
+ } else if(bp->tcvr_type == external) {
+ bit = (bit & 1) << 2;
+ tregs->mgmt_pal = bit | (MGMT_PAL_INT_MDIO | MGMT_PAL_OENAB);
+ garbage = tregs->mgmt_pal;
+ tregs->mgmt_pal = bit | (MGMT_PAL_INT_MDIO |
+ MGMT_PAL_OENAB |
+ MGMT_PAL_DCLOCK);
+ garbage = tregs->mgmt_pal;
+ } else {
+ printk("write_tcvr_bit: No transceiver type known!\n");
+ }
+}
+
+static int read_tcvr_bit(struct bigmac *bp, struct bmac_tcvr *tregs)
+{
+ volatile unsigned int garbage;
+ int retval = 0;
+
+ if(bp->tcvr_type == internal) {
+ tregs->mgmt_pal = MGMT_PAL_EXT_MDIO;
+ garbage = tregs->mgmt_pal;
+ tregs->mgmt_pal = MGMT_PAL_EXT_MDIO | MGMT_PAL_DCLOCK;
+ garbage = tregs->mgmt_pal;
+ retval = (tregs->mgmt_pal & MGMT_PAL_INT_MDIO) >> 3;
+ } else if(bp->tcvr_type == external) {
+ tregs->mgmt_pal = MGMT_PAL_INT_MDIO;
+ garbage = tregs->mgmt_pal;
+ tregs->mgmt_pal = MGMT_PAL_INT_MDIO | MGMT_PAL_DCLOCK;
+ garbage = tregs->mgmt_pal;
+ retval = (tregs->mgmt_pal & MGMT_PAL_EXT_MDIO) >> 2;
+ } else {
+ printk("read_tcvr_bit: No transceiver type known!\n");
+ }
+ return retval;
+}
+
+static int read_tcvr_bit2(struct bigmac *bp, struct bmac_tcvr *tregs)
+{
+ volatile unsigned int garbage;
+ int retval = 0;
+
+ if(bp->tcvr_type == internal) {
+ tregs->mgmt_pal = MGMT_PAL_EXT_MDIO;
+ garbage = tregs->mgmt_pal;
+ retval = (tregs->mgmt_pal & MGMT_PAL_INT_MDIO) >> 3;
+ tregs->mgmt_pal = (MGMT_PAL_EXT_MDIO | MGMT_PAL_DCLOCK);
+ garbage = tregs->mgmt_pal;
+ } else if(bp->tcvr_type == external) {
+ tregs->mgmt_pal = MGMT_PAL_INT_MDIO;
+ garbage = tregs->mgmt_pal;
+ retval = (tregs->mgmt_pal & MGMT_PAL_EXT_MDIO) >> 2;
+ tregs->mgmt_pal = (MGMT_PAL_INT_MDIO | MGMT_PAL_DCLOCK);
+ garbage = tregs->mgmt_pal;
+ } else {
+ printk("read_tcvr_bit2: No transceiver type known!\n");
+ }
+ return retval;
+}
+
+static inline void put_tcvr_byte(struct bigmac *bp,
+ struct bmac_tcvr *tregs,
+ unsigned int byte)
+{
+ int shift = 4;
+
+ do {
+ write_tcvr_bit(bp, tregs, ((byte >> shift) & 1));
+ shift -= 1;
+ } while (shift >= 0);
+}
+
+static void bigmac_tcvr_write(struct bigmac *bp, struct bmac_tcvr *tregs,
+ int reg, unsigned short val)
+{
+ int shift;
+
+ reg &= 0xff;
+ val &= 0xffff;
+ switch(bp->tcvr_type) {
+ case internal:
+ case external:
+ break;
+
+ default:
+ printk("bigmac_tcvr_read: Whoops, no known transceiver type.\n");
+ return;
+ };
+
+ idle_transceiver(tregs);
+ write_tcvr_bit(bp, tregs, 0);
+ write_tcvr_bit(bp, tregs, 1);
+ write_tcvr_bit(bp, tregs, 0);
+ write_tcvr_bit(bp, tregs, 1);
+
+ put_tcvr_byte(bp, tregs,
+ ((bp->tcvr_type == internal) ?
+ BIGMAC_PHY_INTERNAL : BIGMAC_PHY_EXTERNAL));
+
+ put_tcvr_byte(bp, tregs, reg);
+
+ write_tcvr_bit(bp, tregs, 1);
+ write_tcvr_bit(bp, tregs, 0);
+
+ shift = 15;
+ do {
+ write_tcvr_bit(bp, tregs, (val >> shift) & 1);
+ shift -= 1;
+ } while(shift >= 0);
+}
+
+static unsigned short bigmac_tcvr_read(struct bigmac *bp,
+ struct bmac_tcvr *tregs,
+ int reg)
+{
+ unsigned short retval = 0;
+
+ reg &= 0xff;
+ switch(bp->tcvr_type) {
+ case internal:
+ case external:
+ break;
+
+ default:
+ printk("bigmac_tcvr_read: Whoops, no known transceiver type.\n");
+ return 0xffff;
+ };
+
+ idle_transceiver(tregs);
+ write_tcvr_bit(bp, tregs, 0);
+ write_tcvr_bit(bp, tregs, 1);
+ write_tcvr_bit(bp, tregs, 1);
+ write_tcvr_bit(bp, tregs, 0);
+
+ put_tcvr_byte(bp, tregs,
+ ((bp->tcvr_type == internal) ?
+ BIGMAC_PHY_INTERNAL : BIGMAC_PHY_EXTERNAL));
+
+ put_tcvr_byte(bp, tregs, reg);
+
+ if(bp->tcvr_type == external) {
+ int shift = 15;
+
+ (void) read_tcvr_bit2(bp, tregs);
+ (void) read_tcvr_bit2(bp, tregs);
+
+ do {
+ int tmp;
+
+ tmp = read_tcvr_bit2(bp, tregs);
+ retval |= ((tmp & 1) << shift);
+ shift -= 1;
+ } while(shift >= 0);
+
+ (void) read_tcvr_bit2(bp, tregs);
+ (void) read_tcvr_bit2(bp, tregs);
+ (void) read_tcvr_bit2(bp, tregs);
+ } else {
+ int shift = 15;
+
+ (void) read_tcvr_bit(bp, tregs);
+ (void) read_tcvr_bit(bp, tregs);
+
+ do {
+ int tmp;
+
+ tmp = read_tcvr_bit(bp, tregs);
+ retval |= ((tmp & 1) << shift);
+ shift -= 1;
+ } while(shift >= 0);
+
+ (void) read_tcvr_bit(bp, tregs);
+ (void) read_tcvr_bit(bp, tregs);
+ (void) read_tcvr_bit(bp, tregs);
+ }
+ return retval;
+}
+
+static void bigmac_tcvr_init(struct bigmac *bp)
+{
+ volatile unsigned int garbage;
+ struct bmac_tcvr *tregs = bp->tregs;
+
+ idle_transceiver(tregs);
+ tregs->mgmt_pal = (MGMT_PAL_INT_MDIO |
+ MGMT_PAL_EXT_MDIO |
+ MGMT_PAL_DCLOCK);
+ garbage = tregs->mgmt_pal;
+
+ /* Only the bit for the present transceiver (internal or
+ * external) will stick, set them both and see what stays.
+ */
+ tregs->mgmt_pal = (MGMT_PAL_INT_MDIO |
+ MGMT_PAL_EXT_MDIO);
+ garbage = tregs->mgmt_pal;
+ udelay(20);
+
+ if(tregs->mgmt_pal & MGMT_PAL_EXT_MDIO) {
+ bp->tcvr_type = external;
+ tregs->tcvr_pal = ~(TCVR_PAL_EXTLBACK |
+ TCVR_PAL_MSENSE |
+ TCVR_PAL_LTENABLE);
+ garbage = tregs->tcvr_pal;
+ } else if(tregs->mgmt_pal & MGMT_PAL_INT_MDIO) {
+ bp->tcvr_type = internal;
+ tregs->tcvr_pal = ~(TCVR_PAL_SERIAL |
+ TCVR_PAL_EXTLBACK |
+ TCVR_PAL_MSENSE |
+ TCVR_PAL_LTENABLE);
+ garbage = tregs->tcvr_pal;
+ } else {
+ printk("BIGMAC: AIEEE, neither internal nor "
+ "external MDIO available!\n");
+ printk("BIGMAC: mgmt_pal[%08x] tcvr_pal[%08x]\n",
+ tregs->mgmt_pal, tregs->tcvr_pal);
+ }
+}
+
+static int bigmac_init(struct bigmac *, int);
+
+static int try_next_permutation(struct bigmac *bp, struct bmac_tcvr *tregs)
+{
+ if(bp->sw_bmcr & BMCR_SPEED100) {
+ int timeout;
+
+ /* Reset the PHY. */
+ bp->sw_bmcr = (BMCR_ISOLATE | BMCR_PDOWN | BMCR_LOOPBACK);
+ bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr);
+ bp->sw_bmcr = (BMCR_RESET);
+ bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr);
+
+ timeout = 64;
+ while(--timeout) {
+ bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR);
+ if((bp->sw_bmcr & BMCR_RESET) == 0)
+ break;
+ udelay(20);
+ }
+ if(timeout == 0)
+ printk("%s: PHY reset failed.\n", bp->dev->name);
+
+ bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR);
+
+ /* Now we try 10baseT. */
+ bp->sw_bmcr &= ~(BMCR_SPEED100);
+ bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr);
+ return 0;
+ }
+
+ /* We've tried them all. */
+ return -1;
+}
+
+static void bigmac_timer(unsigned long data)
+{
+ struct bigmac *bp = (struct bigmac *) data;
+ struct bmac_tcvr *tregs = bp->tregs;
+ int restart_timer = 0;
+
+ bp->timer_ticks++;
+ if(bp->timer_state == ltrywait) {
+ bp->sw_bmsr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMSR);
+ bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR);
+ if(bp->sw_bmsr & BMSR_LSTATUS) {
+ printk("%s: Link is now up at %s.\n",
+ bp->dev->name,
+ (bp->sw_bmcr & BMCR_SPEED100) ?
+ "100baseT" : "10baseT");
+ bp->timer_state = asleep;
+ restart_timer = 0;
+ } else {
+ if(bp->timer_ticks >= 4) {
+ int ret;
+
+ ret = try_next_permutation(bp, tregs);
+ if(ret == -1) {
+ printk("%s: Link down, cable problem?\n",
+ bp->dev->name);
+ ret = bigmac_init(bp, 0);
+ if(ret) {
+ printk("%s: Error, cannot re-init the "
+ "BigMAC.\n", bp->dev->name);
+ }
+ return;
+ }
+ bp->timer_ticks = 0;
+ restart_timer = 1;
+ } else {
+ restart_timer = 1;
+ }
+ }
+ } else {
+ /* Can't happens.... */
+ printk("%s: Aieee, link timer is asleep but we got one anyways!\n",
+ bp->dev->name);
+ restart_timer = 0;
+ bp->timer_ticks = 0;
+ bp->timer_state = asleep; /* foo on you */
+ }
+
+ if(restart_timer != 0) {
+ bp->bigmac_timer.expires = jiffies + ((12 * HZ)/10); /* 1.2 sec. */
+ add_timer(&bp->bigmac_timer);
+ }
+}
+
+/* Well, really we just force the chip into 100baseT then
+ * 10baseT, each time checking for a link status.
+ */
+static void bigmac_begin_auto_negotiation(struct bigmac *bp)
+{
+ struct bmac_tcvr *tregs = bp->tregs;
+ int timeout;
+
+ /* Grab new software copies of PHY registers. */
+ bp->sw_bmsr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMSR);
+ bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR);
+
+ /* Reset the PHY. */
+ bp->sw_bmcr = (BMCR_ISOLATE | BMCR_PDOWN | BMCR_LOOPBACK);
+ bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr);
+ bp->sw_bmcr = (BMCR_RESET);
+ bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr);
+
+ timeout = 64;
+ while(--timeout) {
+ bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR);
+ if((bp->sw_bmcr & BMCR_RESET) == 0)
+ break;
+ udelay(20);
+ }
+ if(timeout == 0)
+ printk("%s: PHY reset failed.\n", bp->dev->name);
+
+ bp->sw_bmcr = bigmac_tcvr_read(bp, tregs, BIGMAC_BMCR);
+
+ /* First we try 100baseT. */
+ bp->sw_bmcr |= BMCR_SPEED100;
+ bigmac_tcvr_write(bp, tregs, BIGMAC_BMCR, bp->sw_bmcr);
+
+ bp->timer_state = ltrywait;
+ bp->timer_ticks = 0;
+ bp->bigmac_timer.expires = jiffies + (12 * HZ) / 10;
+ bp->bigmac_timer.data = (unsigned long) bp;
+ bp->bigmac_timer.function = &bigmac_timer;
+ add_timer(&bp->bigmac_timer);
+}
+
+static int bigmac_init(struct bigmac *bp, int from_irq)
+{
+ struct qe_globreg *gregs = bp->gregs;
+ struct qe_creg *cregs = bp->creg;
+ struct BIG_MAC_regs *bregs = bp->bregs;
+ unsigned char *e = &bp->dev->dev_addr[0];
+
+ /* Latch current counters into statistics. */
+ bigmac_get_counters(bp, bregs);
+
+ /* Reset QEC. */
+ qec_global_reset(gregs);
+
+ /* Init QEC. */
+ qec_init(bp);
+
+ /* Alloc and reset the tx/rx descriptor chains. */
+#ifndef __sparc_v9__
+ if(sparc_cpu_model == sun4c)
+ sun4c_bigmac_init_rings(bp);
+ else
+#endif
+ bigmac_init_rings(bp, from_irq);
+
+ /* Initialize the PHY. */
+ bigmac_tcvr_init(bp);
+
+ /* Stop transmitter and receiver. */
+ bigmac_stop(bp);
+
+ /* Set hardware ethernet address. */
+ bregs->mac_addr2 = ((e[4] << 8) | e[5]);
+ bregs->mac_addr1 = ((e[2] << 8) | e[3]);
+ bregs->mac_addr0 = ((e[0] << 8) | e[1]);
+
+ /* Clear the hash table until mc upload occurs. */
+ bregs->htable3 = 0;
+ bregs->htable2 = 0;
+ bregs->htable1 = 0;
+ bregs->htable0 = 0;
+
+ /* Enable Big Mac hash table filter. */
+ bregs->rx_cfg = (BIGMAC_RXCFG_HENABLE | BIGMAC_RXCFG_FIFO);
+
+ udelay(20);
+
+ /* Ok, configure the Big Mac transmitter. */
+ bregs->tx_cfg = BIGMAC_TXCFG_FIFO;
+
+ /* The HME docs recommend to use the 10LSB of our MAC here. */
+ bregs->rand_seed = ((e[5] | e[4] << 8) & 0x3ff);
+
+ /* Enable the output drivers no matter what. */
+ bregs->xif_cfg = (BIGMAC_XCFG_ODENABLE | BIGMAC_XCFG_RESV);
+
+ /* Tell the QEC where the ring descriptors are. */
+ cregs->rxds = bp->bblock_dvma + bib_offset(be_rxd, 0);
+ cregs->txds = bp->bblock_dvma + bib_offset(be_txd, 0);
+
+ /* Setup the FIFO pointers into QEC local memory. */
+ cregs->rxwbufptr = cregs->rxrbufptr = 0;
+ cregs->txwbufptr = cregs->txrbufptr = gregs->rsize;
+
+ /* Tell bigmac what interrupts we don't want to hear about. */
+ bregs->imask = (BIGMAC_IMASK_GOTFRAME | BIGMAC_IMASK_SENTFRAME);
+
+ /* Enable the various other irq's. */
+ cregs->rimask = 0;
+ cregs->timask = 0;
+ cregs->qmask = 0;
+ cregs->bmask = 0;
+
+ /* Set jam size to a reasonable default. */
+ bregs->jsize = DEFAULT_JAMSIZE;
+
+ /* Clear collision counter. */
+ cregs->ccnt = 0;
+
+ /* Enable transmitter and receiver. */
+ bregs->tx_cfg |= BIGMAC_TXCFG_ENABLE;
+ bregs->rx_cfg |= BIGMAC_RXCFG_ENABLE;
+
+ /* Ok, start detecting link speed/duplex. */
+ bigmac_begin_auto_negotiation(bp);
+
+ /* Success. */
+ return 0;
+}
+
+/* Error interrupts get sent here. */
+static void bigmac_is_medium_rare(struct bigmac *bp,
+ unsigned int qec_status,
+ unsigned int bmac_status)
+{
+ printk("bigmac_is_medium_rare: ");
+ if(qec_status & (GLOB_STAT_ER | GLOB_STAT_BM)) {
+ if(qec_status & GLOB_STAT_ER)
+ printk("QEC_ERROR, ");
+ if(qec_status & GLOB_STAT_BM)
+ printk("QEC_BMAC_ERROR, ");
+ }
+ if(bmac_status & CREG_STAT_ERRORS) {
+ if(bmac_status & CREG_STAT_BERROR)
+ printk("BMAC_ERROR, ");
+ if(bmac_status & CREG_STAT_TXDERROR)
+ printk("TXD_ERROR, ");
+ if(bmac_status & CREG_STAT_TXLERR)
+ printk("TX_LATE_ERROR, ");
+ if(bmac_status & CREG_STAT_TXPERR)
+ printk("TX_PARITY_ERROR, ");
+ if(bmac_status & CREG_STAT_TXSERR)
+ printk("TX_SBUS_ERROR, ");
+
+ if(bmac_status & CREG_STAT_RXDROP)
+ printk("RX_DROP_ERROR, ");
+
+ if(bmac_status & CREG_STAT_RXSMALL)
+ printk("RX_SMALL_ERROR, ");
+ if(bmac_status & CREG_STAT_RXLERR)
+ printk("RX_LATE_ERROR, ");
+ if(bmac_status & CREG_STAT_RXPERR)
+ printk("RX_PARITY_ERROR, ");
+ if(bmac_status & CREG_STAT_RXSERR)
+ printk("RX_SBUS_ERROR, ");
+ }
+
+ printk(" RESET\n");
+ bigmac_init(bp, 1);
+}
+
+/* BigMAC transmit complete service routines. */
+static inline void bigmac_tx(struct bigmac *bp)
+{
+ struct be_txd *txbase = &bp->bmac_block->be_txd[0];
+ struct be_txd *this;
+ int elem = bp->tx_old;
+
+ DTX(("bigmac_tx: tx_old[%d] ", elem));
+ while(elem != bp->tx_new) {
+ struct sk_buff *skb;
+
+ this = &txbase[elem];
+
+ DTX(("this(%p) [flags(%08x)addr(%08x)]",
+ this, this->tx_flags, this->tx_addr));
+
+ if(this->tx_flags & TXD_OWN)
+ break;
+ skb = bp->tx_skbs[elem];
+ DTX(("skb(%p) ", skb));
+ bp->tx_skbs[elem] = NULL;
+ dev_kfree_skb(skb);
+
+ bp->enet_stats.tx_packets++;
+ elem = NEXT_TX(elem);
+ }
+ DTX((" DONE, tx_old=%d\n", elem));
+ bp->tx_old = elem;
+}
+
+#ifndef __sparc_v9__
+static inline void sun4c_bigmac_tx(struct bigmac *bp)
+{
+ struct be_txd *txbase = &bp->bmac_block->be_txd[0];
+ struct be_txd *this;
+ int elem = bp->tx_old;
+
+ while(elem != bp->tx_new) {
+ this = &txbase[elem];
+ if(this->tx_flags & TXD_OWN)
+ break;
+ bp->enet_stats.tx_packets++;
+ elem = NEXT_TX(elem);
+ }
+ bp->tx_old = elem;
+}
+#endif
+
+/* BigMAC receive complete service routines. */
+static inline void bigmac_rx(struct bigmac *bp)
+{
+ struct be_rxd *rxbase = &bp->bmac_block->be_rxd[0];
+ struct be_rxd *this;
+ int elem = bp->rx_new, drops = 0;
+
+ this = &rxbase[elem];
+ while(!(this->rx_flags & RXD_OWN)) {
+ struct sk_buff *skb;
+ unsigned int flags = this->rx_flags;
+ int len = (flags & RXD_LENGTH); /* FCS not included */
+
+ /* Check for errors. */
+ if(len < ETH_ZLEN) {
+ bp->enet_stats.rx_errors++;
+ bp->enet_stats.rx_length_errors++;
+
+ drop_it:
+ /* Return it to the BigMAC. */
+ bp->enet_stats.rx_dropped++;
+ this->rx_addr = sbus_dvma_addr(bp->rx_skbs[elem]->data);
+ this->rx_flags =
+ (RXD_OWN | (RX_BUF_ALLOC_SIZE & RXD_LENGTH));
+ goto next;
+ }
+ skb = bp->rx_skbs[elem];
+#ifdef NEED_DMA_SYNCHRONIZATION
+#ifdef __sparc_v9__
+ if ((unsigned long) (skb->data + skb->len) >= MAX_DMA_ADDRESS) {
+ printk("sunbmac: Bogus DMA buffer address "
+ "[%016lx]\n", ((unsigned long) skb->data));
+ panic("DMA address too large, tell DaveM");
+ }
+#endif
+ mmu_sync_dma(sbus_dvma_addr(skb->data),
+ skb->len, bp->bigmac_sbus_dev->my_bus);
+#endif
+ if(len > RX_COPY_THRESHOLD) {
+ struct sk_buff *new_skb;
+
+ /* Now refill the entry, if we can. */
+ new_skb = big_mac_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC);
+ if(!new_skb) {
+ drops++;
+ goto drop_it;
+ }
+ bp->rx_skbs[elem] = new_skb;
+ new_skb->dev = bp->dev;
+ skb_put(new_skb, ETH_FRAME_LEN);
+ skb_reserve(new_skb, 34);
+ rxbase[elem].rx_addr = sbus_dvma_addr(new_skb->data);
+ rxbase[elem].rx_flags =
+ (RXD_OWN | ((RX_BUF_ALLOC_SIZE - 34) & RXD_LENGTH));
+
+ /* Trim the original skb for the netif. */
+ skb_trim(skb, len);
+ } else {
+ struct sk_buff *copy_skb = dev_alloc_skb(len + 2);
+
+ if(!copy_skb) {
+ drops++;
+ goto drop_it;
+ }
+ copy_skb->dev = bp->dev;
+ skb_reserve(copy_skb, 2);
+ skb_put(copy_skb, len);
+ eth_copy_and_sum(copy_skb, (unsigned char *)skb->data, len, 0);
+
+ /* Reuse otiginal ring buffer. */
+ rxbase[elem].rx_addr = sbus_dvma_addr(skb->data);
+ rxbase[elem].rx_flags =
+ (RXD_OWN | ((RX_BUF_ALLOC_SIZE - 34) & RXD_LENGTH));
+
+ skb = copy_skb;
+ }
+
+ /* No checksums done by the BigMAC ;-( */
+ skb->protocol = eth_type_trans(skb, bp->dev);
+ netif_rx(skb);
+ bp->enet_stats.rx_packets++;
+ next:
+ elem = NEXT_RX(elem);
+ this = &rxbase[elem];
+ }
+ bp->rx_new = elem;
+ if(drops)
+ printk("%s: Memory squeeze, deferring packet.\n", bp->dev->name);
+}
+
+#ifndef __sparc_v9__
+static inline void sun4c_bigmac_rx(struct bigmac *bp)
+{
+ struct be_rxd *rxbase = &bp->bmac_block->be_rxd[0];
+ struct be_rxd *this;
+ struct bigmac_buffers *bbufs = bp->sun4c_buffers;
+ __u32 bbufs_dvma = bp->s4c_buf_dvma;
+ int elem = bp->rx_new, drops = 0;
+
+ this = &rxbase[elem];
+ while(!(this->rx_flags & RXD_OWN)) {
+ struct sk_buff *skb;
+ unsigned char *this_bbuf =
+ bbufs->rx_buf[elem & (SUN4C_RX_RING_SIZE - 1)];
+ __u32 this_bbuf_dvma = bbufs_dvma +
+ bbuf_offset(rx_buf, (elem & (SUN4C_RX_RING_SIZE - 1)));
+ struct be_rxd *end_rxd =
+ &rxbase[(elem+SUN4C_RX_RING_SIZE)&(RX_RING_SIZE-1)];
+ unsigned int flags = this->rx_flags;
+ int len = (flags & RXD_LENGTH) - 4; /* FCS not included */
+
+ /* Check for errors. */
+ if(len < ETH_ZLEN) {
+ bp->enet_stats.rx_errors++;
+ bp->enet_stats.rx_length_errors++;
+ bp->enet_stats.rx_dropped++;
+ } else {
+ skb = dev_alloc_skb(len + 2);
+ if(skb == 0) {
+ drops++;
+ bp->enet_stats.rx_dropped++;
+ } else {
+ skb->dev = bp->dev;
+ skb_reserve(skb, 2);
+ skb_put(skb, len);
+ eth_copy_and_sum(skb, (unsigned char *)this_bbuf,
+ len, 0);
+ skb->protocol = eth_type_trans(skb, bp->dev);
+ netif_rx(skb);
+ bp->enet_stats.rx_packets++;
+ }
+ }
+ end_rxd->rx_addr = this_bbuf_dvma;
+ end_rxd->rx_flags = (RXD_OWN | (SUN4C_RX_BUFF_SIZE & RXD_LENGTH));
+
+ elem = NEXT_RX(elem);
+ this = &rxbase[elem];
+ }
+ bp->rx_new = elem;
+ if(drops)
+ printk("%s: Memory squeeze, deferring packet.\n", bp->dev->name);
+}
+#endif
+
+static void bigmac_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+ struct bigmac *bp = (struct bigmac *) dev_id;
+ unsigned int qec_status, bmac_status;
+
+ DIRQ(("bigmac_interrupt: "));
+
+ /* Latch status registers now. */
+ bmac_status = bp->creg->stat;
+ qec_status = bp->gregs->stat;
+
+ bp->dev->interrupt = 1;
+
+ DIRQ(("qec_status=%08x bmac_status=%08x\n", qec_status, bmac_status));
+ if((qec_status & (GLOB_STAT_ER | GLOB_STAT_BM)) ||
+ (bmac_status & CREG_STAT_ERRORS))
+ bigmac_is_medium_rare(bp, qec_status, bmac_status);
+
+ if(bmac_status & CREG_STAT_TXIRQ)
+ bigmac_tx(bp);
+
+ if(bmac_status & CREG_STAT_RXIRQ)
+ bigmac_rx(bp);
+
+ if(bp->dev->tbusy && (TX_BUFFS_AVAIL(bp) >= 0)) {
+ bp->dev->tbusy = 0;
+ mark_bh(NET_BH);
+ }
+
+ bp->dev->interrupt = 0;
+}
+
+#ifndef __sparc_v9__
+static void sun4c_bigmac_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+ struct bigmac *bp = (struct bigmac *) dev_id;
+ unsigned int qec_status, bmac_status;
+
+ /* Latch status registers now. */
+ bmac_status = bp->creg->stat;
+ qec_status = bp->gregs->stat;
+
+ bp->dev->interrupt = 1;
+
+ if(qec_status & (GLOB_STAT_ER | GLOB_STAT_BM) ||
+ (bmac_status & CREG_STAT_ERRORS))
+ bigmac_is_medium_rare(bp, qec_status, bmac_status);
+
+ if(bmac_status & CREG_STAT_TXIRQ)
+ sun4c_bigmac_tx(bp);
+
+ if(bmac_status & CREG_STAT_RXIRQ)
+ sun4c_bigmac_rx(bp);
+
+ if(bp->dev->tbusy && (SUN4C_TX_BUFFS_AVAIL(bp) >= 0)) {
+ bp->dev->tbusy = 0;
+ mark_bh(NET_BH);
+ }
+
+ bp->dev->interrupt = 0;
+}
+#endif
+
+static int bigmac_open(struct device *dev)
+{
+ struct bigmac *bp = (struct bigmac *) dev->priv;
+ int res;
+
+#ifndef __sparc_v9__
+ if(sparc_cpu_model == sun4c) {
+ if(request_irq(dev->irq, &sun4c_bigmac_interrupt,
+ SA_SHIRQ, "BIG MAC", (void *) bp)) {
+ printk("BIGMAC: Can't order irq %d to go.\n", dev->irq);
+ return -EAGAIN;
+ }
+ } else
+#endif
+ if(request_irq(dev->irq, &bigmac_interrupt,
+ SA_SHIRQ, "BIG MAC", (void *) bp)) {
+ printk("BIGMAC: Can't order irq %d to go.\n", dev->irq);
+ return -EAGAIN;
+ }
+ init_timer(&bp->bigmac_timer);
+ res = bigmac_init(bp, 0);
+ if(!res) {
+ MOD_INC_USE_COUNT;
+ }
+ return res;
+}
+
+static int bigmac_close(struct device *dev)
+{
+ struct bigmac *bp = (struct bigmac *) dev->priv;
+
+ del_timer(&bp->bigmac_timer);
+ bp->timer_state = asleep;
+ bp->timer_ticks = 0;
+
+ bigmac_stop(bp);
+ bigmac_clean_rings(bp);
+ free_irq(dev->irq, (void *)bp);
+ MOD_DEC_USE_COUNT;
+ return 0;
+}
+
+/* Put a packet on the wire. */
+static int bigmac_start_xmit(struct sk_buff *skb, struct device *dev)
+{
+ struct bigmac *bp = (struct bigmac *) dev->priv;
+ int len, entry;
+
+ if(dev->tbusy) {
+ int tickssofar = jiffies - dev->trans_start;
+
+ if (tickssofar < 40) {
+ return 1;
+ } else {
+ printk ("%s: transmit timed out, resetting\n", dev->name);
+ bp->enet_stats.tx_errors++;
+ bigmac_init(bp, 0);
+ dev->tbusy = 0;
+ dev->trans_start = jiffies;
+ dev_kfree_skb(skb);
+ return 0;
+ }
+ }
+
+ if(test_and_set_bit(0, (void *) &dev->tbusy) != 0) {
+ printk("%s: Transmitter access conflict.\n", dev->name);
+ return 1;
+ }
+
+ if(!TX_BUFFS_AVAIL(bp))
+ return 1;
+
+#ifdef NEED_DMA_SYNCHRONIZATION
+#ifdef __sparc_v9__
+ if ((unsigned long) (skb->data + skb->len) >= MAX_DMA_ADDRESS) {
+ struct sk_buff *new_skb = skb_copy(skb, GFP_DMA | GFP_ATOMIC);
+ if(!new_skb)
+ return 1;
+ dev_kfree_skb(skb);
+ skb = new_skb;
+ }
+#endif
+ mmu_sync_dma(sbus_dvma_addr(skb->data),
+ skb->len, bp->bigmac_sbus_dev->my_bus);
+#endif
+ len = skb->len;
+ entry = bp->tx_new;
+ DTX(("bigmac_start_xmit: len(%d) entry(%d)\n", len, entry));
+
+ /* Avoid a race... */
+ bp->bmac_block->be_txd[entry].tx_flags = TXD_UPDATE;
+
+ bp->tx_skbs[entry] = skb;
+ bp->bmac_block->be_txd[entry].tx_addr = sbus_dvma_addr(skb->data);
+ bp->bmac_block->be_txd[entry].tx_flags =
+ (TXD_OWN | TXD_SOP | TXD_EOP | (len & TXD_LENGTH));
+ dev->trans_start = jiffies;
+ bp->tx_new = NEXT_TX(entry);
+
+ /* Get it going. */
+ bp->creg->ctrl = CREG_CTRL_TWAKEUP;
+
+ if(TX_BUFFS_AVAIL(bp))
+ dev->tbusy = 0;
+
+ return 0;
+}
+
+#ifndef __sparc_v9__
+static int sun4c_bigmac_start_xmit(struct sk_buff *skb, struct device *dev)
+{
+ struct bigmac *bp = (struct bigmac *) dev->priv;
+ struct bigmac_buffers *bbufs = bp->sun4c_buffers;
+ __u32 txbuf_dvma, bbufs_dvma = bp->s4c_buf_dvma;
+ unsigned char *txbuf;
+ int len, entry;
+
+ if(dev->tbusy) {
+ int tickssofar = jiffies - dev->trans_start;
+
+ if (tickssofar < 40) {
+ return 1;
+ } else {
+ printk ("%s: transmit timed out, resetting\n", dev->name);
+ bp->enet_stats.tx_errors++;
+ bigmac_init(bp, 0);
+ dev->tbusy = 0;
+ dev->trans_start = jiffies;
+ return 0;
+ }
+ }
+
+ if(test_and_set_bit(0, (void *) &dev->tbusy) != 0) {
+ printk("%s: Transmitter access conflict.\n", dev->name);
+ return 1;
+ }
+
+ if(!SUN4C_TX_BUFFS_AVAIL(bp))
+ return 1;
+
+ len = skb->len;
+ entry = bp->tx_new;
+
+ txbuf = &bbufs->tx_buf[entry][0];
+ txbuf_dvma = bbufs_dvma + bbuf_offset(tx_buf, entry);
+ memcpy(txbuf, skb->data, len);
+
+ /* Avoid a race... */
+ bp->bmac_block->be_txd[entry].tx_flags = TXD_UPDATE;
+
+ bp->bmac_block->be_txd[entry].tx_addr = txbuf_dvma;
+ bp->bmac_block->be_txd[entry].tx_flags =
+ (TXD_OWN | TXD_SOP | TXD_EOP | (len & TXD_LENGTH));
+ bp->tx_new = NEXT_TX(entry);
+
+ /* Get it going. */
+ dev->trans_start = jiffies;
+ bp->creg->ctrl = CREG_CTRL_TWAKEUP;
+
+ dev_kfree_skb(skb);
+
+ if(SUN4C_TX_BUFFS_AVAIL(bp))
+ dev->tbusy = 0;
+
+ return 0;
+}
+#endif
+
+static struct enet_statistics *bigmac_get_stats(struct device *dev)
+{
+ struct bigmac *bp = (struct bigmac *) dev->priv;
+
+ bigmac_get_counters(bp, bp->bregs);
+ return &bp->enet_stats;
+}
+
+#define CRC_POLYNOMIAL_BE 0x04c11db7UL /* Ethernet CRC, big endian */
+#define CRC_POLYNOMIAL_LE 0xedb88320UL /* Ethernet CRC, little endian */
+
+static void bigmac_set_multicast(struct device *dev)
+{
+ struct bigmac *bp = (struct bigmac *) dev->priv;
+ struct BIG_MAC_regs *bregs = bp->bregs;
+ struct dev_mc_list *dmi = dev->mc_list;
+ char *addrs;
+ int i, j, bit, byte;
+ u32 crc, poly = CRC_POLYNOMIAL_LE;
+
+ /* Disable the receiver. The bit self-clears when
+ * the operation is complete.
+ */
+ bregs->rx_cfg &= ~(BIGMAC_RXCFG_ENABLE);
+ while((bregs->rx_cfg & BIGMAC_RXCFG_ENABLE) != 0)
+ udelay(20);
+
+ if((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 64)) {
+ bregs->htable0 = 0xffff;
+ bregs->htable1 = 0xffff;
+ bregs->htable2 = 0xffff;
+ bregs->htable3 = 0xffff;
+ } else if(dev->flags & IFF_PROMISC) {
+ bregs->rx_cfg |= BIGMAC_RXCFG_PMISC;
+ } else {
+ u16 hash_table[4];
+
+ for(i = 0; i < 4; i++)
+ hash_table[i] = 0;
+
+ for(i = 0; i < dev->mc_count; i++) {
+ addrs = dmi->dmi_addr;
+ dmi = dmi->next;
+
+ if(!(*addrs & 1))
+ continue;
+
+ crc = 0xffffffffU;
+ for(byte = 0; byte < 6; byte++) {
+ for(bit = *addrs++, j = 0; j < 8; j++, bit >>= 1) {
+ int test;
+
+ test = ((bit ^ crc) & 0x01);
+ crc >>= 1;
+ if(test)
+ crc = crc ^ poly;
+ }
+ }
+ crc >>= 26;
+ hash_table[crc >> 4] |= 1 << (crc & 0xf);
+ }
+ bregs->htable0 = hash_table[0];
+ bregs->htable1 = hash_table[1];
+ bregs->htable2 = hash_table[2];
+ bregs->htable3 = hash_table[3];
+ }
+
+ /* Re-enable the receiver. */
+ bregs->rx_cfg |= BIGMAC_RXCFG_ENABLE;
+}
+
+__initfunc(static int bigmac_ether_init(struct device *dev, struct linux_sbus_device *qec_sdev))
+{
+ static unsigned version_printed = 0;
+ struct bigmac *bp = 0;
+ unsigned char bsizes, bsizes_more;
+ int i, j, num_qranges, res = ENOMEM;
+ struct linux_prom_ranges qranges[8];
+
+ /* Get a new device struct for this interface. */
+ dev = init_etherdev(0, sizeof(struct bigmac));
+
+ if(version_printed++ == 0)
+ printk(version);
+
+ /* Report what we have found to the user. */
+ printk("%s: BigMAC 100baseT Ethernet ", dev->name);
+ dev->base_addr = (long) qec_sdev;
+ for(i = 0; i < 6; i++)
+ printk("%2.2x%c", dev->dev_addr[i] = idprom->id_ethaddr[i],
+ i == 5 ? ' ' : ':');
+ printk("\n");
+
+ /* Setup softc, with backpointers to QEC and BigMAC SBUS device structs. */
+ bp = (struct bigmac *) dev->priv;
+ bp->qec_sbus_dev = qec_sdev;
+ bp->bigmac_sbus_dev = qec_sdev->child;
+
+ /* All further failures we find return this. */
+ res = ENODEV;
+
+ /* Verify the registers we expect, are actually there. */
+ if((bp->bigmac_sbus_dev->num_registers != 3) ||
+ (bp->qec_sbus_dev->num_registers != 2)) {
+ printk("BIGMAC: Device does not have 2 and 3 regs, it has %d and %d.\n",
+ bp->qec_sbus_dev->num_registers,
+ bp->bigmac_sbus_dev->num_registers);
+ printk("BIGMAC: Would you like that for here or to go?\n");
+ goto fail_and_cleanup;
+ }
+
+ /* Fun with QEC ranges... */
+ if(bp->bigmac_sbus_dev->ranges_applied == 0) {
+ i = prom_getproperty(bp->qec_sbus_dev->prom_node, "ranges",
+ (char *)&qranges[0], sizeof(qranges));
+ num_qranges = (i / sizeof(struct linux_prom_ranges));
+
+ /* Now, apply all the ranges for the BigMAC. */
+ for(j = 0; j < bp->bigmac_sbus_dev->num_registers; j++) {
+ int k;
+
+ for(k = 0; k < num_qranges; k++)
+ if(bp->bigmac_sbus_dev->reg_addrs[j].which_io ==
+ qranges[k].ot_child_space)
+ break;
+ if(k >= num_qranges) {
+ printk("BigMAC: Aieee, bogus QEC range for space %08x\n",
+ bp->bigmac_sbus_dev->reg_addrs[j].which_io);
+ goto fail_and_cleanup;
+ }
+ bp->bigmac_sbus_dev->reg_addrs[j].which_io = qranges[k].ot_parent_space;
+ bp->bigmac_sbus_dev->reg_addrs[j].phys_addr += qranges[k].ot_parent_base;
+ }
+
+ /* Next, apply SBUS ranges on top of what we just changed. */
+ prom_apply_sbus_ranges(bp->bigmac_sbus_dev->my_bus,
+ &bp->bigmac_sbus_dev->reg_addrs[0],
+ bp->bigmac_sbus_dev->num_registers,
+ bp->bigmac_sbus_dev);
+ }
+
+ /* Apply SBUS ranges for the QEC parent. */
+ prom_apply_sbus_ranges(bp->qec_sbus_dev->my_bus,
+ &bp->qec_sbus_dev->reg_addrs[0],
+ bp->qec_sbus_dev->num_registers,
+ bp->qec_sbus_dev);
+
+ /* Map in QEC global control registers. */
+ bp->gregs = sparc_alloc_io(bp->qec_sbus_dev->reg_addrs[0].phys_addr,
+ 0,
+ sizeof(struct qe_globreg),
+ "BigMAC QEC Global Regs",
+ bp->qec_sbus_dev->reg_addrs[0].which_io,
+ 0);
+ if(!bp->gregs) {
+ printk("BIGMAC: Cannot map QEC global registers.\n");
+ goto fail_and_cleanup;
+ }
+
+ /* Make sure QEC is in BigMAC mode. */
+ if((bp->gregs->ctrl & 0xf0000000) != GLOB_CTRL_BMODE) {
+ printk("BigMAC: AIEEE, QEC is not in BigMAC mode!\n");
+ goto fail_and_cleanup;
+ }
+
+ /* Reset the QEC. */
+ if(qec_global_reset(bp->gregs))
+ goto fail_and_cleanup;
+
+ /* Get supported SBUS burst sizes. */
+ bsizes = prom_getintdefault(bp->qec_sbus_dev->prom_node,
+ "burst-sizes",
+ 0xff);
+
+ bsizes_more = prom_getintdefault(bp->qec_sbus_dev->my_bus->prom_node,
+ "burst-sizes",
+ 0xff);
+
+ bsizes &= 0xff;
+ if(bsizes_more != 0xff)
+ bsizes &= bsizes_more;
+ if(bsizes == 0xff || (bsizes & DMA_BURST16) == 0 ||
+ (bsizes & DMA_BURST32) == 0)
+ bsizes = (DMA_BURST32 - 1);
+ bp->bigmac_bursts = bsizes;
+
+ /* Perform QEC initialization. */
+ qec_init(bp);
+
+ /* Map in the BigMAC channel registers. */
+ bp->creg = sparc_alloc_io(bp->bigmac_sbus_dev->reg_addrs[0].phys_addr,
+ 0,
+ sizeof(struct qe_creg),
+ "BigMAC QEC Channel Regs",
+ bp->bigmac_sbus_dev->reg_addrs[0].which_io,
+ 0);
+ if(!bp->creg) {
+ printk("BIGMAC: Cannot map QEC channel registers.\n");
+ goto fail_and_cleanup;
+ }
+
+ /* Map in the BigMAC control registers. */
+ bp->bregs = sparc_alloc_io(bp->bigmac_sbus_dev->reg_addrs[1].phys_addr,
+ 0,
+ sizeof(struct BIG_MAC_regs),
+ "BigMAC Primary Regs",
+ bp->bigmac_sbus_dev->reg_addrs[1].which_io,
+ 0);
+ if(!bp->bregs) {
+ printk("BIGMAC: Cannot map BigMAC primary registers.\n");
+ goto fail_and_cleanup;
+ }
+
+ /* Map in the BigMAC transceiver registers, this is how you poke at
+ * the BigMAC's PHY.
+ */
+ bp->tregs = sparc_alloc_io(bp->bigmac_sbus_dev->reg_addrs[2].phys_addr,
+ 0,
+ sizeof(struct bmac_tcvr),
+ "BigMAC Transceiver Regs",
+ bp->bigmac_sbus_dev->reg_addrs[2].which_io,
+ 0);
+ if(!bp->tregs) {
+ printk("BIGMAC: Cannot map BigMAC transceiver registers.\n");
+ goto fail_and_cleanup;
+ }
+
+ /* Stop the BigMAC. */
+ bigmac_stop(bp);
+
+ /* Allocate transmit/receive descriptor DVMA block. */
+ bp->bmac_block = (struct bmac_init_block *)
+ sparc_dvma_malloc(PAGE_SIZE, "BigMAC Init Block",
+ &bp->bblock_dvma);
+
+ /* Get the board revision of this BigMAC. */
+ bp->board_rev = prom_getintdefault(bp->bigmac_sbus_dev->prom_node,
+ "board-version", 1);
+
+ /* If on sun4c, we use a static buffer pool, on sun4m we DMA directly
+ * in and out of sk_buffs instead for speed and one copy to userspace.
+ */
+#ifndef __sparc_v9__
+ if(sparc_cpu_model == sun4c)
+ bp->sun4c_buffers = (struct bigmac_buffers *)
+ sparc_dvma_malloc(sizeof(struct bigmac_buffers),
+ "BigMAC Bufs",
+ &bp->s4c_buf_dvma);
+ else
+#endif
+ bp->sun4c_buffers = 0;
+
+ /* Init auto-negotiation timer state. */
+ init_timer(&bp->bigmac_timer);
+ bp->timer_state = asleep;
+ bp->timer_ticks = 0;
+
+ /* Backlink to generic net device struct. */
+ bp->dev = dev;
+
+ /* Set links to our BigMAC open and close routines. */
+ dev->open = &bigmac_open;
+ dev->stop = &bigmac_close;
+
+ /* Choose transmit routine based upon buffering scheme. */
+#ifndef __sparc_v9__
+ if(sparc_cpu_model == sun4c)
+ dev->hard_start_xmit = &sun4c_bigmac_start_xmit;
+ else
+#endif
+ dev->hard_start_xmit = &bigmac_start_xmit;
+
+ /* Set links to BigMAC statistic and multi-cast loading code. */
+ dev->get_stats = &bigmac_get_stats;
+ dev->set_multicast_list = &bigmac_set_multicast;
+
+ /* Finish net device registration. */
+ dev->irq = bp->bigmac_sbus_dev->irqs[0];
+ dev->dma = 0;
+ ether_setup(dev);
+
+#ifdef MODULE
+ /* Put us into the list of instances attached for later module unloading. */
+ bp->next_module = root_bigmac_dev;
+ root_bigmac_dev = bp;
+#endif
+ return 0;
+
+fail_and_cleanup:
+ /* Something went wrong, undo whatever we did so far. */
+ if(bp) {
+ /* Free register mappings if any. */
+ if(bp->gregs)
+ sparc_free_io(bp->gregs, sizeof(struct qe_globreg));
+ if(bp->creg)
+ sparc_free_io(bp->creg, sizeof(struct qe_creg));
+ if(bp->bregs)
+ sparc_free_io(bp->bregs, sizeof(struct BIG_MAC_regs));
+ if(bp->tregs)
+ sparc_free_io(bp->tregs, sizeof(struct bmac_tcvr));
+
+ /* XXX todo, bmac_block and sun4c_buffers */
+
+ /* Free the BigMAC softc. */
+ kfree(bp);
+ dev->priv = 0;
+ }
+ return res; /* Return error code. */
+}
+
+__initfunc(int bigmac_probe(struct device *dev))
+{
+ struct linux_sbus *bus;
+ struct linux_sbus_device *sdev = 0;
+ static int called = 0;
+ int cards = 0, v;
+
+ if(called)
+ return ENODEV;
+ called++;
+
+ for_each_sbus(bus) {
+ for_each_sbusdev(sdev, bus) {
+ if(cards) dev = NULL;
+
+ /* QEC can be the parent of either QuadEthernet or
+ * a BigMAC. We want the latter.
+ */
+ if(!strcmp(sdev->prom_name, "qec") && sdev->child &&
+ !strcmp(sdev->child->prom_name, "be")) {
+ cards++;
+ if((v = bigmac_ether_init(dev, sdev)))
+ return v;
+ }
+ }
+ }
+ if(!cards)
+ return ENODEV;
+ return 0;
+}
+
+#ifdef MODULE
+
+int
+init_module(void)
+{
+ root_bigmac_dev = NULL;
+ return bigmac_probe(NULL);
+}
+
+void
+cleanup_module(void)
+{
+ /* No need to check MOD_IN_USE, as sys_delete_module() checks. */
+ while (root_bigmac_dev) {
+ struct bigmac *bp = root_bigmac_dev;
+ struct bigmac *bp_nxt = root_bigmac_dev->next_module;
+
+ sparc_free_io(bp->gregs, sizeof(struct qe_globreg));
+ sparc_free_io(bp->creg, sizeof(struct qe_creg));
+ sparc_free_io(bp->bregs, sizeof(struct BIG_MAC_regs));
+ sparc_free_io(bp->tregs, sizeof(struct bmac_tcvr));
+
+ /* XXX todo, bmac_block and sun4c_buffers */
+
+ unregister_netdev(bp->dev);
+ kfree(bp->dev);
+ root_bigmac_dev = bp_nxt;
+ }
+}
+
+#endif /* MODULE */
diff -u --recursive --new-file v2.2.3/linux/drivers/net/sunbmac.h linux/drivers/net/sunbmac.h
--- v2.2.3/linux/drivers/net/sunbmac.h Wed Dec 31 16:00:00 1969
+++ linux/drivers/net/sunbmac.h Mon Mar 15 16:11:30 1999
@@ -0,0 +1,381 @@
+/* sunbmac.h: Defines for the Sun "Big MAC" 100baseT ethernet cards.
+ *
+ * Copyright (C) 1997 David S. Miller (da...@caip.rutgers.edu)
+ */
+
+#ifndef _SUNBMAC_H
+#define _SUNBMAC_H
+
+/* QEC global registers. */
+struct qe_globreg {
+ volatile unsigned int ctrl; /* Control */
+ volatile unsigned int stat; /* Status */
+ volatile unsigned int psize; /* Packet Size */
+ volatile unsigned int msize; /* Local-mem size (64K) */
+ volatile unsigned int rsize; /* Receive partition size */
+ volatile unsigned int tsize; /* Transmit partition size */
+};
+
+#define GLOB_CTRL_MMODE 0x40000000 /* MACE qec mode */
+#define GLOB_CTRL_BMODE 0x10000000 /* BigMAC qec mode */
+#define GLOB_CTRL_EPAR 0x00000020 /* Enable parity */
+#define GLOB_CTRL_ACNTRL 0x00000018 /* SBUS arbitration control */
+#define GLOB_CTRL_B64 0x00000004 /* 64 byte dvma bursts */
+#define GLOB_CTRL_B32 0x00000002 /* 32 byte dvma bursts */
+#define GLOB_CTRL_B16 0x00000000 /* 16 byte dvma bursts */
+#define GLOB_CTRL_RESET 0x00000001 /* Reset the QEC */
+
+#define GLOB_STAT_TX 0x00000008 /* BigMAC Transmit IRQ */
+#define GLOB_STAT_RX 0x00000004 /* BigMAC Receive IRQ */
+#define GLOB_STAT_BM 0x00000002 /* BigMAC Global IRQ */
+#define GLOB_STAT_ER 0x00000001 /* BigMAC Error IRQ */
+
+#define GLOB_PSIZE_2048 0x00 /* 2k packet size */
+#define GLOB_PSIZE_4096 0x01 /* 4k packet size */
+#define GLOB_PSIZE_6144 0x10 /* 6k packet size */
+#define GLOB_PSIZE_8192 0x11 /* 8k packet size */
+
+/* QEC BigMAC channel registers. */
+struct qe_creg {
+ volatile unsigned int ctrl; /* Control */
+ volatile unsigned int stat; /* Status */
+ volatile unsigned int rxds; /* RX descriptor ring ptr */
+ volatile unsigned int txds; /* TX descriptor ring ptr */
+ volatile unsigned int rimask; /* RX Interrupt Mask */
+ volatile unsigned int timask; /* TX Interrupt Mask */
+ volatile unsigned int qmask; /* QEC Error Interrupt Mask */
+ volatile unsigned int bmask; /* BigMAC Error Interrupt Mask */
+ volatile unsigned int rxwbufptr; /* Local memory rx write ptr */
+ volatile unsigned int rxrbufptr; /* Local memory rx read ptr */
+ volatile unsigned int txwbufptr; /* Local memory tx write ptr */
+ volatile unsigned int txrbufptr; /* Local memory tx read ptr */
+ volatile unsigned int ccnt; /* Collision Counter */
+};
+
+#define CREG_CTRL_TWAKEUP 0x00000001 /* Transmitter Wakeup, 'go'. */
+
+#define CREG_STAT_BERROR 0x80000000 /* BigMAC error */
+#define CREG_STAT_TXIRQ 0x00200000 /* Transmit Interrupt */
+#define CREG_STAT_TXDERROR 0x00080000 /* TX Descriptor is bogus */
+#define CREG_STAT_TXLERR 0x00040000 /* Late Transmit Error */
+#define CREG_STAT_TXPERR 0x00020000 /* Transmit Parity Error */
+#define CREG_STAT_TXSERR 0x00010000 /* Transmit SBUS error ack */
+#define CREG_STAT_RXIRQ 0x00000020 /* Receive Interrupt */
+#define CREG_STAT_RXDROP 0x00000010 /* Dropped a RX'd packet */
+#define CREG_STAT_RXSMALL 0x00000008 /* Receive buffer too small */
+#define CREG_STAT_RXLERR 0x00000004 /* Receive Late Error */
+#define CREG_STAT_RXPERR 0x00000002 /* Receive Parity Error */
+#define CREG_STAT_RXSERR 0x00000001 /* Receive SBUS Error ACK */
+
+#define CREG_STAT_ERRORS (CREG_STAT_BERROR|CREG_STAT_TXDERROR|CREG_STAT_TXLERR| \
+ CREG_STAT_TXPERR|CREG_STAT_TXSERR|CREG_STAT_RXDROP| \
+ CREG_STAT_RXSMALL|CREG_STAT_RXLERR|CREG_STAT_RXPERR| \
+ CREG_STAT_RXSERR)
+
+#define CREG_QMASK_TXDERROR 0x00080000 /* TXD error */
+#define CREG_QMASK_TXLERR 0x00040000 /* TX late error */
+#define CREG_QMASK_TXPERR 0x00020000 /* TX parity error */
+#define CREG_QMASK_TXSERR 0x00010000 /* TX sbus error ack */
+#define CREG_QMASK_RXDROP 0x00000010 /* RX drop */
+#define CREG_QMASK_RXBERROR 0x00000008 /* RX buffer error */
+#define CREG_QMASK_RXLEERR 0x00000004 /* RX late error */
+#define CREG_QMASK_RXPERR 0x00000002 /* RX parity error */
+#define CREG_QMASK_RXSERR 0x00000001 /* RX sbus error ack */
+
+struct BIG_MAC_regs {
+ volatile unsigned int xif_cfg; /* XIF config register */
+ volatile unsigned int _unused[63]; /* Reserved... */
+ volatile unsigned int status; /* Status register, clear on read */
+ volatile unsigned int imask; /* Interrupt mask register */
+ volatile unsigned int _unused2[64]; /* Reserved... */
+ volatile unsigned int tx_swreset; /* Transmitter software reset */
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 30'
echo 'File patch-2.2.4 is continued in part 31'
echo 31 > _shar_seq_.tmp
#!/bin/sh
# this is part 33 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 33; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+ printk(KERN_INFO "audio%d: cs4231%c at 0x%x irq %d\n",
X drv->index, (cs4231_chip->status & CS_STATUS_REV_A) ? 'a' : ' ',
X (unsigned long)cs4231_chip->regs, cs4231_chip->irq);
+#else
+ printk(KERN_INFO "audio%d: cs4231%c at %p irq %s\n",
+ drv->index, (cs4231_chip->status & CS_STATUS_REV_A) ? 'a' : ' ',
+ cs4231_chip->regs, __irq_itoa(cs4231_chip->irq));
+#endif
+
+ /* Success! */
+ return 0;
+}
+
+#ifdef EB4231_SUPPORT
+/* Attach to an cs4231 chip given its PROM node. */
+static int eb4231_attach(struct sparcaudio_driver *drv,
+ struct linux_ebus_device *edev)
+{
+ struct cs4231_chip *cs4231_chip;
+ int len, err, nregs;
+ struct linux_prom_registers regs[4];
+
+ /* Allocate our private information structure. */
+ drv->private = kmalloc(sizeof(struct cs4231_chip), GFP_KERNEL);
+ if (!drv->private)
+ return -ENOMEM;
+
+ /* Point at the information structure and initialize it. */
+ drv->ops = &eb4231_ops;
+ cs4231_chip = (struct cs4231_chip *)drv->private;
+ cs4231_chip->input_ptr = cs4231_chip->output_ptr = NULL;
+ cs4231_chip->input_size = cs4231_chip->output_size = 0;
+ cs4231_chip->status = 0;
+
+ len = prom_getproperty(edev->prom_node, "reg", (void *)regs, sizeof(regs));
+
+ if ((len % sizeof(regs[0])) != 0) {
+ printk("eb4231: Strange reg property size %d\n", len);
+ return -ENODEV;
+ }
+
+ nregs = len / sizeof(regs[0]);
+
+ /* Make sure we can map the registers first */
+ if (check_region(edev->base_address[0],
+ sizeof(struct cs4231_regs))) {
+ printk("eb4231_attach: can't get region at %016lx\n",
+ edev->base_address[0]);
+ goto cleanup;
+ }
+ if (check_region(edev->base_address[1],
+ sizeof(struct linux_ebus_dma))) {
+ printk("eb4231_attach: can't get region at %016lx\n",
+ edev->base_address[1]);
+ goto cleanup;
+ }
+ if (check_region(edev->base_address[2],
+ sizeof(struct linux_ebus_dma))) {
+ printk("eb4231_attach: can't get region at %016lx\n",
+ edev->base_address[2]);
+ goto cleanup;
+ }
+
+ cs4231_chip->regs = (struct cs4231_regs *)edev->base_address[0];
+ cs4231_chip->eb2p = (struct linux_ebus_dma *)edev->base_address[1];
+ cs4231_chip->eb2c = (struct linux_ebus_dma *)edev->base_address[2];
+
+ request_region((unsigned long)cs4231_chip->regs,
+ sizeof(struct cs4231_regs), "cs4231 regs");
+ request_region((unsigned long)cs4231_chip->eb2c,
+ sizeof(struct linux_ebus_dma), "4231 capture DMA");
+ request_region((unsigned long)cs4231_chip->eb2p,
+ sizeof(struct linux_ebus_dma), "4231 playback DMA");
+
+ cs4231_chip->status |= CS_STATUS_IS_EBUS;
+
+ /* Attach the interrupt handler to the audio interrupt. */
+ cs4231_chip->irq = edev->irqs[0];
+ cs4231_chip->irq2 = edev->irqs[1];
+
+ request_irq(cs4231_chip->irq, eb4231_cinterrupt, SA_SHIRQ, "cs4231", drv);
+#if 0
+ enable_irq(cs4231_chip->irq);
+#endif
+
+ request_irq(cs4231_chip->irq2, eb4231_pinterrupt, SA_SHIRQ, "cs4231", drv);
+ enable_irq(cs4231_chip->irq2);
+
+ cs4231_chip->nirqs = 2;
+
+ cs4231_enable_interrupts(drv);
+
+ /* Reset the audio chip. */
+ cs4231_chip_reset(drv);
+
+ /* Register ourselves with the midlevel audio driver. */
+ err = register_sparcaudio_driver(drv, 1);
+
+ if (err < 0) {
+ printk(KERN_ERR "cs4231: unable to register\n");
+ cs4231_disable_interrupts(drv);
+ disable_irq(cs4231_chip->irq);
+ free_irq(cs4231_chip->irq, drv);
+ if (cs4231_chip->nirqs == 2) {
+ disable_irq(cs4231_chip->irq2);
+ free_irq(cs4231_chip->irq2, drv);
+ }
+ release_region((unsigned long)cs4231_chip->regs,
+ sizeof(struct cs4231_regs));
+ release_region((unsigned long)cs4231_chip->eb2c,
+ sizeof(struct linux_ebus_dma));
+ release_region((unsigned long)cs4231_chip->eb2p,
+ sizeof(struct linux_ebus_dma));
+ cleanup:
+ kfree(drv->private);
+ return -EIO;
+ }
+
+ cs4231_chip->perchip_info.play.active =
+ cs4231_chip->perchip_info.play.pause = 0;
+
+ cs4231_chip->perchip_info.record.active =
+ cs4231_chip->perchip_info.record.pause = 0;
+
+ cs4231_chip->perchip_info.play.avail_ports = (AUDIO_HEADPHONE |
+ AUDIO_SPEAKER |
+ AUDIO_LINE_OUT);
+
+ cs4231_chip->perchip_info.record.avail_ports = (AUDIO_INTERNAL_CD_IN |
+ AUDIO_LINE_IN |
+ AUDIO_MICROPHONE |
+ AUDIO_ANALOG_LOOPBACK);
+
+ /* Announce the hardware to the user. */
+ printk(KERN_INFO "audio%d: cs4231%c(eb2) at %p irq %s\n",
+ drv->index, (cs4231_chip->status & CS_STATUS_REV_A) ? 'a' : ' ',
+ cs4231_chip->regs, __irq_itoa(cs4231_chip->irq));
X
X /* Success! */
X return 0;
X }
+#endif
X
X /* Probe for the cs4231 chip and then attach the driver. */
X #ifdef MODULE
@@ -1691,13 +2258,17 @@
X __initfunc(int cs4231_init(void))
X #endif
X {
- struct linux_sbus *bus;
+ struct linux_sbus *sbus;
X struct linux_sbus_device *sdev;
-
+#ifdef EB4231_SUPPORT
+ struct linux_ebus *ebus;
+ struct linux_ebus_device *edev;
+#endif
+
X num_drivers = 0;
X
X /* Probe each SBUS for cs4231 chips. */
- for_all_sbusdev(sdev,bus) {
+ for_all_sbusdev(sdev,sbus) {
X if (!strcmp(sdev->prom_name, "SUNW,CS4231")) {
X /* Don't go over the max number of drivers. */
X if (num_drivers >= MAX_DRIVERS)
@@ -1708,6 +2279,21 @@
X }
X }
X
+#ifdef EB4231_SUPPORT
+ for_each_ebus(ebus) {
+ for_each_ebusdev(edev, ebus) {
+ if (!strcmp(edev->prom_name, "SUNW,CS4231")) {
+ /* Don't go over the max number of drivers. */
+ if (num_drivers >= MAX_DRIVERS)
+ continue;
+
+ if (eb4231_attach(&drivers[num_drivers], edev) == 0)
+ num_drivers++;
+ }
+ }
+ }
+#endif
+
X /* Only return success if we found some cs4231 chips. */
X return (num_drivers > 0) ? 0 : -EIO;
X }
@@ -1716,13 +2302,21 @@
X /* Detach from an cs4231 chip given the device structure. */
X static void cs4231_detach(struct sparcaudio_driver *drv)
X {
- struct cs4231_chip *info = (struct cs4231_chip *)drv->private;
+ struct cs4231_chip *cs4231_chip = (struct cs4231_chip *)drv->private;
X
X cs4231_disable_interrupts(drv);
X unregister_sparcaudio_driver(drv, 1);
- disable_irq(info->irq);
- free_irq(info->irq, drv);
- sparc_free_io(info->regs, info->regs_size);
+ disable_irq(cs4231_chip->irq);
+ free_irq(cs4231_chip->irq, drv);
+ if (!(cs4231_chip->status & CS_STATUS_IS_EBUS)) {
+ sparc_free_io(cs4231_chip->regs, cs4231_chip->regs_size);
+ } else {
+#ifdef EB4231_SUPPORT
+ release_region(cs4231_chip->regs, sizeof(struct cs4231_regs));
+ release_region(cs4231_chip->eb2c, sizeof(struct linux_ebus_dma));
+ release_region(cs4231_chip->eb2p, sizeof(struct linux_ebus_dma));
+#endif
+ }
X kfree(drv->private);
X }
X
diff -u --recursive --new-file v2.2.3/linux/drivers/sbus/audio/cs4231.h linux/drivers/sbus/audio/cs4231.h
--- v2.2.3/linux/drivers/sbus/audio/cs4231.h Thu Nov 19 09:56:28 1998
+++ linux/drivers/sbus/audio/cs4231.h Mon Mar 15 16:11:30 1999
@@ -37,9 +37,11 @@
X
X struct cs4231_chip {
X struct cs4231_regs *regs;
+ struct linux_ebus_dma *eb2c;
+ struct linux_ebus_dma *eb2p;
X struct audio_info perchip_info;
X unsigned int playlen, reclen;
- int irq;
+ int irq, irq2, nirqs;
X unsigned long regs_size;
X
X /* Keep track of various info */
@@ -48,13 +50,13 @@
X /* Current buffer that the driver is playing. */
X volatile __u8 * output_ptr;
X volatile unsigned long output_size;
- volatile __u32 * output_dma_handle, * output_next_dma_handle;
+ volatile __u32 output_dma_handle, output_next_dma_handle;
X volatile unsigned long output_dma_size, output_next_dma_size;
X
X /* Current record buffer. */
X volatile __u8 * input_ptr;
X volatile unsigned long input_size;
- volatile __u32 * input_dma_handle, * input_next_dma_handle;
+ volatile __u32 input_dma_handle, input_next_dma_handle;
X volatile unsigned long input_dma_size, input_next_dma_size;
X
X /* Number of buffers in the pipe. */
@@ -68,6 +70,7 @@
X #define CS_STATUS_REV_A 0x04
X #define CS_STATUS_INTS_ON 0x08
X #define CS_STATUS_IS_ULTRA 0x10
+#define CS_STATUS_IS_EBUS 0x20
X
X #define CS_TIMEOUT 9000000
X
@@ -221,36 +224,43 @@
X /* 30 - Capture Upper */
X /* 31 - Capture Lower */
X
-/* Following are CSR register definitions for the Sparc */
+/* Following are APC CSR register definitions for the Sparc */
X
-#define CS_INT_PENDING 0x800000 /* Interrupt Pending */
-#define CS_PLAY_INT 0x400000 /* Playback interrupt */
-#define CS_CAPT_INT 0x200000 /* Capture interrupt */
-#define CS_GENL_INT 0x100000 /* General interrupt */
-#define CS_XINT_ENA 0x80000 /* General ext int. enable */
-#define CS_XINT_PLAY 0x40000 /* Playback ext intr */
-#define CS_XINT_CAPT 0x20000 /* Capture ext intr */
-#define CS_XINT_GENL 0x10000 /* Error ext intr */
-#define CS_XINT_EMPT 0x8000 /* Pipe empty interrupt */
-#define CS_XINT_PEMP 0x4000 /* Play pipe empty */
-#define CS_XINT_PNVA 0x2000 /* Playback NVA dirty */
-#define CS_XINT_PENA 0x1000 /* play pipe empty Int enable */
-#define CS_XINT_COVF 0x800 /* Cap data dropped on floor */
-#define CS_XINT_CNVA 0x400 /* Capture NVA dirty */
-#define CS_XINT_CEMP 0x200 /* Capture pipe empty interrupt */
-#define CS_XINT_CENA 0x100 /* Cap. pipe empty int enable */
-#define CS_PPAUSE 0x80 /* Pause the play DMA */
-#define CS_CPAUSE 0x40 /* Pause the capture DMA */
-#define CS_CDC_RESET 0x20 /* CODEC RESET */
-#define PDMA_READY 0x08 /* Play DMA Go */
-#define CDMA_READY 0x04 /* Capture DMA Go */
-#define CS_CHIP_RESET 0x01 /* Reset the chip */
+#define APC_INT_PENDING 0x800000 /* Interrupt Pending */
+#define APC_PLAY_INT 0x400000 /* Playback interrupt */
+#define APC_CAPT_INT 0x200000 /* Capture interrupt */
+#define APC_GENL_INT 0x100000 /* General interrupt */
+#define APC_XINT_ENA 0x80000 /* General ext int. enable */
+#define APC_XINT_PLAY 0x40000 /* Playback ext intr */
+#define APC_XINT_CAPT 0x20000 /* Capture ext intr */
+#define APC_XINT_GENL 0x10000 /* Error ext intr */
+#define APC_XINT_EMPT 0x8000 /* Pipe empty interrupt */
+#define APC_XINT_PEMP 0x4000 /* Play pipe empty */
+#define APC_XINT_PNVA 0x2000 /* Playback NVA dirty */
+#define APC_XINT_PENA 0x1000 /* play pipe empty Int enable */
+#define APC_XINT_COVF 0x800 /* Cap data dropped on floor */
+#define APC_XINT_CNVA 0x400 /* Capture NVA dirty */
+#define APC_XINT_CEMP 0x200 /* Capture pipe empty interrupt */
+#define APC_XINT_CENA 0x100 /* Cap. pipe empty int enable */
+#define APC_PPAUSE 0x80 /* Pause the play DMA */
+#define APC_CPAUSE 0x40 /* Pause the capture DMA */
+#define APC_CDC_RESET 0x20 /* CODEC RESET */
+#define APC_PDMA_READY 0x08 /* Play DMA Go */
+#define APC_CDMA_READY 0x04 /* Capture DMA Go */
+#define APC_CHIP_RESET 0x01 /* Reset the chip */
+
+#define APC_INIT_SETUP (APC_CDMA_READY | APC_PDMA_READY | APC_XINT_ENA | APC_XINT_PLAY | APC_XINT_GENL | APC_INT_PENDING | APC_PLAY_INT | APC_CAPT_INT | APC_GENL_INT)
+
+#define APC_PLAY_SETUP (APC_GENL_INT | APC_PLAY_INT | APC_XINT_ENA | APC_XINT_PLAY | APC_XINT_EMPT | APC_XINT_GENL | APC_XINT_PENA | APC_PDMA_READY)
X
-#define CS_INIT_SETUP (CDMA_READY | PDMA_READY | CS_XINT_ENA | CS_XINT_PLAY | CS_XINT_GENL | CS_INT_PENDING | CS_PLAY_INT | CS_CAPT_INT | CS_GENL_INT)
+#define APC_CAPT_SETUP (APC_GENL_INT | APC_CAPT_INT | APC_XINT_ENA | APC_XINT_CAPT | APC_XINT_CEMP | APC_XINT_GENL | APC_CDMA_READY)
X
-#define CS_PLAY_SETUP (CS_GENL_INT | CS_PLAY_INT | CS_XINT_ENA | CS_XINT_PLAY | CS_XINT_EMPT | CS_XINT_GENL | CS_XINT_PENA | PDMA_READY)
+/* Following are EB2 CSR register definitions for the Sparc */
X
-#define CS_CAPT_SETUP (CS_GENL_INT | CS_CAPT_INT | CS_XINT_ENA | CS_XINT_CAPT | CS_XINT_CEMP | CS_XINT_GENL | CDMA_READY)
+/* asm/ebus.h has the base settings */
+
+#define EB2_PLAY_SETUP (EBUS_DCSR_BURST_SZ_8|EBUS_DCSR_INT_EN|EBUS_DCSR_EN_DMA|EBUS_DCSR_EN_CNT|EBUS_DCSR_TC)
+#define EB2_CAPT_SETUP (EBUS_DCSR_BURST_SZ_8|EBUS_DCSR_INT_EN|EBUS_DCSR_EN_DMA|EBUS_DCSR_EN_CNT|EBUS_DCSR_TC|EBUS_DCSR_WRITE)
X
X #define CS4231_MIN_ATEN (0)
X #define CS4231_MAX_ATEN (31)
diff -u --recursive --new-file v2.2.3/linux/drivers/sbus/audio/dbri.c linux/drivers/sbus/audio/dbri.c
--- v2.2.3/linux/drivers/sbus/audio/dbri.c Thu Nov 19 09:56:28 1998
+++ linux/drivers/sbus/audio/dbri.c Mon Mar 15 16:11:30 1999
@@ -2,11 +2,10 @@
X * drivers/sbus/audio/dbri.c
X *
X * Copyright (C) 1997 Rudolf Koenig (rfko...@immd4.informatik.uni-erlangen.de)
- * The SparcLinux interface was adopted from the CS4231 driver.
+ * Copyright (C) 1998, 1999 Brent Baccala (bac...@freesoft.org)
X *
X * This is the lowlevel driver for the DBRI & MMCODEC duo used for ISDN & AUDIO
X * on Sun SPARCstation 10, 20, LX and Voyager models.
- * NOTE: This driver only supports audio for now, there is NO SUPPORT for ISDN.
X *
X * - DBRI: AT&T T5900FX Dual Basic Rates ISDN Interface. It is a 32 channel
X * data time multiplexer with ISDN support (aka T7259)
@@ -59,6 +58,7 @@
X #include <asm/io.h>
X #include <asm/delay.h>
X #include <asm/sbus.h>
+#include <asm/pgtable.h>
X
X #include <asm/audioio.h>
X #include "dbri.h"
@@ -69,7 +69,7 @@
X #include "../../isdn/hisax/foreign.h"
X #endif
X
-/* #define DBRI_DEBUG */
+#define DBRI_DEBUG
X
X #ifdef DBRI_DEBUG
X
@@ -80,14 +80,17 @@
X #define D_MM (1<<3)
X #define D_USR (1<<4)
X
-static int dbri_debug = D_GEN|D_INT|D_CMD|D_MM|D_USR;
+/* static int dbri_debug = D_GEN|D_INT|D_CMD|D_MM|D_USR; */
+static int dbri_debug = 0;
+MODULE_PARM(dbri_debug, "i");
+
X static char *cmds[] = {
X "WAIT", "PAUSE", "JUMP", "IIQ", "REX", "SDP", "CDP", "DTS",
X "SSP", "CHI", "NT", "TE", "CDEC", "TEST", "CDM", "RESRV"
X };
X
X /* Bit hunting */
-#define dumpcmd {int i; for(i=0; i<n; i++) printk("DBRI: %x\n", dbri->cmd[i]); }
+#define dumpcmd {int i; for(i=0; i<n; i++) printk("DBRI: %x\n", dbri->dma->cmd[i]); }
X
X #define DBRI_CMD(cmd, intr, value) ((cmd << 28) | (1 << 27) | value)
X
@@ -103,14 +106,16 @@
X
X #define MAX_DRIVERS 2 /* Increase this if need more than 2 DBRI's */
X
-#define WAIT_INTR1 0xbe
-#define WAIT_INTR2 0xbf
-
X static struct sparcaudio_driver drivers[MAX_DRIVERS];
-static char drv_name[] = "DBRI/audio";
-static int num_drivers;
+static int num_drivers = 0;
+
+
+/*
+****************************************************************************
+************** DBRI initialization and command synchronization *************
+****************************************************************************
+*/
X
-static void * output_callback_arg;
X
X /*
X * Commands are sent to the DBRI by building a list of them in memory,
@@ -137,35 +142,46 @@
X * in DBRI register 0. I've tried to implement this in such a way
X * that might make implementing a more sophisticated scheme easier.
X *
- * Every time a routine wants to write commands to the DBRI, it
- * must first call dbri_cmdlock() and get an initial index into dbri->cmd
- * (currently always 0) in return. After the commands have been
- * write (index incremented after each one), dbri_cmdsend() is called
- * with the final index value.
+ * Every time a routine wants to write commands to the DBRI, it must
+ * first call dbri_cmdlock() and get an initial pointer into dbri->dma->cmd
+ * in return. After the commands have been writen, dbri_cmdsend() is
+ * called with the final pointer value.
X */
X
-static int dbri_cmdlock(struct dbri *dbri)
+static int dbri_locked = 0; /* XXX not SMP safe! XXX */
+
+static volatile int * dbri_cmdlock(struct dbri *dbri)
X {
- return 0;
+ if (dbri_locked) {
+ printk("DBRI: Command buffer locked! (bug in driver)\n");
+ }
+ dbri_locked ++;
+ return dbri->dma->cmd;
X }
X
-static void dbri_cmdsend(struct dbri *dbri, int n)
+static void dbri_cmdsend(struct dbri *dbri, volatile int * cmd)
X {
X int maxloops = 1000000;
X
- dbri->cmd[n++] = DBRI_CMD(D_WAIT, 0, WAIT_INTR1);
- dbri->regs->reg8 = (int)dbri->cmd;
-
- while (maxloops > 0 && (dbri->regs->reg0 & D_P));
+ dbri_locked --;
+ if (dbri_locked != 0) {
+ printk("DBRI: Command buffer improperly locked! (bug in driver)\n");
+ } else if ((cmd - dbri->dma->cmd) >= DBRI_NO_CMDS-1) {
+ printk("DBRI: Command buffer overflow! (bug in driver)\n");
+ } else {
+ *(cmd++) = DBRI_CMD(D_PAUSE, 0, 0);
+ *(cmd++) = DBRI_CMD(D_WAIT, 0, 0);
+ dbri->regs->reg8 = (int)dbri->dma_dvma->cmd;
+ while ((maxloops--) > 0 && (dbri->regs->reg0 & D_P));
+ }
X
X if (maxloops == 0) {
- printk("DBRI: Maxloops exceeded in dbri_cmdsend\n");
+ printk("DBRI: Chip never completed command buffer\n");
X }
X }
X
-static void dbri_reset(struct sparcaudio_driver *drv)
+static void dbri_reset(struct dbri *dbri)
X {
- struct dbri *dbri = (struct dbri *)drv->private;
X int i;
X
X dprintk(D_GEN, ("DBRI: reset 0:%x 2:%x 8:%x 9:%x\n",
@@ -177,75 +193,662 @@
X udelay(10);
X }
X
-static void dbri_detach(struct sparcaudio_driver *drv)
+static void dbri_detach(struct dbri *dbri)
X {
- struct dbri *info = (struct dbri *)drv->private;
-
- dbri_reset(drv);
- unregister_sparcaudio_driver(drv, 1);
- free_irq(info->irq, drv);
- sparc_free_io(info->regs, info->regs_size);
- kfree(drv->private);
+ dbri_reset(dbri);
+ free_irq(dbri->irq, dbri);
+ sparc_free_io(dbri->regs, dbri->regs_size);
+ /* Should we release the DMA structure dbri->dma here? */
+ kfree(dbri);
X }
X
X
-static void dbri_initialize(struct sparcaudio_driver *drv)
+static void dbri_initialize(struct dbri *dbri)
X {
- struct dbri *dbri = (struct dbri *)drv->private;
- int n;
+ int n;
+ volatile int *cmd;
X
- dbri_reset(drv);
- dbri->wait = NULL;
+ dbri_reset(dbri);
X
X dprintk(D_GEN, ("DBRI: init: cmd: %x, int: %x\n",
- (int)dbri->cmd, (int)dbri->intr));
+ (int)dbri->dma->cmd, (int)dbri->dma->intr));
X
X /*
X * Initialize the interrupt ringbuffer.
X */
X for(n = 0; n < DBRI_NO_INTS-1; n++)
- dbri->intr[n * DBRI_INT_BLK] =
- (int)(&dbri->intr[(n+1)*DBRI_INT_BLK]);
- dbri->intr[n * DBRI_INT_BLK] = (int)(dbri->intr);
+ dbri->dma->intr[n * DBRI_INT_BLK] =
+ (int)(&dbri->dma_dvma->intr[(n+1)*DBRI_INT_BLK]);
+ dbri->dma->intr[n * DBRI_INT_BLK] = (int)(dbri->dma_dvma->intr);
X dbri->dbri_irqp = 1;
X
-#ifdef USE_SBUS_BURSTS
- /* Enable 4-word, 8-word, and 16-word SBus Bursts */
- dbri->regs->reg0 |= (D_G|D_S|D_E);
-#else
- /* Disable 4-word, 8-word, and 16-word SBus Bursts */
+ /* We should query the openprom to see what burst sizes this
+ * SBus supports. For now, just disable all SBus bursts */
X dbri->regs->reg0 &= ~(D_G|D_S|D_E);
-#endif
X
X /*
X * Set up the interrupt queue
X */
- n = dbri_cmdlock(dbri);
+ cmd = dbri_cmdlock(dbri);
X
- dbri->cmd[n++] = DBRI_CMD(D_IIQ, 0, 0);
- dbri->cmd[n++] = (int)(dbri->intr);
+ *(cmd++) = DBRI_CMD(D_IIQ, 0, 0);
+ *(cmd++) = (int)(dbri->dma_dvma->intr);
X
- dbri_cmdsend(dbri, n);
+ dbri_cmdsend(dbri, cmd);
X }
X
X
+/*
+****************************************************************************
+*************************** DBRI interrupt handler *************************
+****************************************************************************
+*/
+
X
X /*
X * Short data pipes transmit LSB first. The CS4215 receives MSB first. Grrr.
- * So we have to reverse the bits. Note: only 1, 2 or 4 bytes are supported.
+ * So we have to reverse the bits. Note: not all bit lengths are supported
X */
X static __u32 reverse_bytes(__u32 b, int len)
X {
X switch(len) {
- case 4: b = ((b & 0xffff0000) >> 16) | ((b & 0x0000ffff) << 16);
- case 2: b = ((b & 0xff00ff00) >> 8) | ((b & 0x00ff00ff) << 8);
- case 1: b = ((b & 0xf0f0f0f0) >> 4) | ((b & 0x0f0f0f0f) << 4);
- b = ((b & 0xcccccccc) >> 2) | ((b & 0x33333333) << 2);
- b = ((b & 0xaaaaaaaa) >> 1) | ((b & 0x55555555) << 1);
+ case 32:
+ b = ((b & 0xffff0000) >> 16) | ((b & 0x0000ffff) << 16);
+ case 16:
+ b = ((b & 0xff00ff00) >> 8) | ((b & 0x00ff00ff) << 8);
+ case 8:
+ b = ((b & 0xf0f0f0f0) >> 4) | ((b & 0x0f0f0f0f) << 4);
+ case 4:
+ b = ((b & 0xcccccccc) >> 2) | ((b & 0x33333333) << 2);
+ case 2:
+ b = ((b & 0xaaaaaaaa) >> 1) | ((b & 0x55555555) << 1);
+ case 1:
+ break;
+ default:
+ printk("DBRI reverse_bytes: unsupported length\n");
X }
X return b;
X }
X
+/* transmission_complete_intr()
+ *
+ * Called by main interrupt handler when DBRI signals transmission complete
+ * on a pipe.
+ *
+ * Walks through the pipe's list of transmit buffer descriptors, releasing
+ * each one's DMA buffer (if present) and signaling its callback routine
+ * (if present), before flaging the descriptor available and proceeding
+ * to the next one.
+ *
+ * Assumes that only the last in a chain of descriptors will have FINT
+ * sent to signal an interrupt, so that the chain will be completely
+ * transmitted by the time we get here, and there's no need to save
+ * any of the descriptors. In particular, use of the DBRI's CDP command
+ * is precluded, but I've not been able to get CDP working reliably anyway.
+ */
+
+static void transmission_complete_intr(struct dbri *dbri, int pipe)
+{
+ int td = dbri->pipes[pipe].desc;
+ int status;
+ void *buffer;
+ void (*callback)(void *, int);
+
+ dbri->pipes[pipe].desc = -1;
+
+ for (; td >= 0; td = dbri->descs[td].next) {
+
+ if (td >= DBRI_NO_DESCS) {
+ printk("DBRI: invalid td on pipe %d\n", pipe);
+ return;
+ }
+
+ status = dbri->dma->desc[td].word4;
+
+ buffer = dbri->descs[td].buffer;
+ if (buffer) {
+ mmu_release_scsi_one(sbus_dvma_addr(buffer),
+ dbri->descs[td].len,
+ dbri->sdev->my_bus);
+ }
+
+ callback = dbri->descs[td].output_callback;
+ if (callback != NULL) {
+ callback(dbri->descs[td].output_callback_arg,
+ DBRI_TD_STATUS(status) & 0xe);
+ }
+
+ dbri->descs[td].inuse = 0;
+ }
+}
+
+static void reception_complete_intr(struct dbri *dbri, int pipe)
+{
+ int rd = dbri->pipes[pipe].desc;
+ int status;
+ void *buffer;
+ void (*callback)(void *, int, unsigned int);
+
+ if (rd < 0 || rd >= DBRI_NO_DESCS) {
+ printk("DBRI: invalid rd on pipe %d\n", pipe);
+ return;
+ }
+
+ dbri->descs[rd].inuse = 0;
+ dbri->pipes[pipe].desc = -1;
+ status = dbri->dma->desc[rd].word1;
+
+ buffer = dbri->descs[rd].buffer;
+ if (buffer) {
+ mmu_release_scsi_one(sbus_dvma_addr(buffer),
+ dbri->descs[rd].len,
+ dbri->sdev->my_bus);
+ }
+
+ callback = dbri->descs[rd].input_callback;
+ if (callback != NULL) {
+ callback(dbri->descs[rd].input_callback_arg,
+ DBRI_RD_STATUS(status),
+ DBRI_RD_CNT(status)-2);
+ }
+}
+
+static void dbri_intr(int irq, void *opaque, struct pt_regs *regs)
+{
+ struct dbri *dbri = (struct dbri *)opaque;
+ int x;
+
+ /*
+ * Read it, so the interrupt goes away.
+ */
+ x = dbri->regs->reg1;
+
+ if ( x & (D_MRR|D_MLE|D_LBG|D_MBE) ) {
+ /*
+ * What should I do here ?
+ */
+ if(x & D_MRR) printk("DBRI: Multiple Error Ack on SBus\n");
+ if(x & D_MLE) printk("DBRI: Multiple Late Error on SBus\n");
+ if(x & D_LBG) printk("DBRI: Lost Bus Grant on SBus\n");
+ if(x & D_MBE) printk("DBRI: Burst Error on SBus\n");
+ }
+
+ if (!(x & D_IR)) /* Not for us */
+ return;
+
+ x = dbri->dma->intr[dbri->dbri_irqp];
+ while (x != 0) {
+ int val = D_INTR_GETVAL(x);
+ int channel = D_INTR_GETCHAN(x);
+
+ dbri->dma->intr[dbri->dbri_irqp] = 0;
+
+ if(D_INTR_GETCHAN(x) == D_INTR_CMD) {
+ dprintk(D_INT,("DBRI: INTR: Command: %-5s Value:%d\n",
+ cmds[D_INTR_GETCMD(x)], D_INTR_GETVAL(x)));
+ } else {
+ dprintk(D_INT,("DBRI: INTR: Chan:%d Code:%d Val:%#x\n",
+ D_INTR_GETCHAN(x), D_INTR_GETCODE(x),
+ D_INTR_GETRVAL(x)));
+ }
+
+ if (D_INTR_GETCODE(x) == D_INTR_SBRI) {
+
+ /* SBRI - BRI status change */
+
+ int liu_states[] = {1, 0, 8, 3, 4, 5, 6, 7};
+ dbri->liu_state = liu_states[val & 0x7];
+ if (dbri->liu_callback)
+ dbri->liu_callback(dbri->liu_callback_arg);
+ }
+
+ if (D_INTR_GETCODE(x) == D_INTR_BRDY) {
+ reception_complete_intr(dbri, channel);
+ }
+
+ if (D_INTR_GETCODE(x) == D_INTR_XCMP) {
+ transmission_complete_intr(dbri, channel);
+ }
+
+ if (D_INTR_GETCODE(x) == D_INTR_FXDT) {
+
+ /* FXDT - Fixed data change */
+
+ if (dbri->pipes[D_INTR_GETCHAN(x)].sdp & D_SDP_MSB) {
+ val = reverse_bytes(val, dbri->pipes[channel].length);
+ }
+
+ if (dbri->pipes[D_INTR_GETCHAN(x)].recv_fixed_ptr) {
+ * dbri->pipes[channel].recv_fixed_ptr = val;
+ }
+ }
+
+
+ dbri->dbri_irqp++;
+ if (dbri->dbri_irqp == (DBRI_NO_INTS * DBRI_INT_BLK))
+ dbri->dbri_irqp = 1;
+ else if ((dbri->dbri_irqp & (DBRI_INT_BLK-1)) == 0)
+ dbri->dbri_irqp++;
+ x = dbri->dma->intr[dbri->dbri_irqp];
+ }
+}
+
+
+/*
+****************************************************************************
+************************** DBRI data pipe management ***********************
+****************************************************************************
+*/
+
+
+/* reset_pipe(dbri, pipe)
+ *
+ * Called on an in-use pipe to clear anything being transmitted or received
+ */
+
+static void reset_pipe(struct dbri *dbri, int pipe)
+{
+ int sdp;
+ volatile int *cmd;
+
+ if (pipe < 0 || pipe > 31) {
+ printk("DBRI: reset_pipe called with illegal pipe number\n");
+ return;
+ }
+
+ sdp = dbri->pipes[pipe].sdp;
+ if (sdp == 0) {
+ printk("DBRI: reset_pipe called on uninitialized pipe\n");
+ return;
+ }
+
+ cmd = dbri_cmdlock(dbri);
+ *(cmd++) = DBRI_CMD(D_SDP, 0, sdp | D_SDP_C | D_SDP_P);
+ *(cmd++) = 0;
+ dbri_cmdsend(dbri, cmd);
+
+ dbri->pipes[pipe].desc = -1;
+}
+
+static void setup_pipe(struct dbri *dbri, int pipe, int sdp)
+{
+ if (pipe < 0 || pipe > 31) {
+ printk("DBRI: setup_pipe called with illegal pipe number\n");
+ return;
+ }
+
+ if ((sdp & 0xf800) != sdp) {
+ printk("DBRI: setup_pipe called with strange SDP value\n");
+ /* sdp &= 0xf800; */
+ }
+
+ sdp |= D_PIPE(pipe);
+ dbri->pipes[pipe].sdp = sdp;
+
+ reset_pipe(dbri, pipe);
+}
+
+enum master_or_slave { CHImaster, CHIslave };
+
+static void reset_chi(struct dbri *dbri, enum master_or_slave master_or_slave,
+ int bits_per_frame)
+{
+ volatile int *cmd;
+ int val;
+
+ cmd = dbri_cmdlock(dbri);
+
+ /* Set CHI Anchor: Pipe 16 */
+
+ val = D_DTS_VI | D_DTS_VO | D_DTS_INS |
+ D_DTS_PRVIN(D_P_16) | D_DTS_PRVOUT(D_P_16) | D_PIPE(D_P_16);
+ *(cmd++) = DBRI_CMD(D_DTS, 0, val);
+ *(cmd++) = D_TS_ANCHOR | D_TS_NEXT(D_P_16);
+ *(cmd++) = D_TS_ANCHOR | D_TS_NEXT(D_P_16);
+
+ dbri->pipes[16].sdp = 1;
+ dbri->pipes[16].nextpipe = 16;
+
+ if (master_or_slave == CHIslave) {
+ /* Setup DBRI for CHI Slave - receive clock, frame sync (FS)
+ *
+ * CHICM = 0 (slave mode, 8 kHz frame rate)
+ * IR = give immediate CHI status interrupt
+ * EN = give CHI status interrupt upon change
+ */
+ *(cmd++) = DBRI_CMD(D_CHI, 0, D_CHI_CHICM(0)
+ | D_CHI_IR | D_CHI_EN);
+ } else {
+ /* Setup DBRI for CHI Master - generate clock, FS
+ *
+ * BPF = bits per 8 kHz frame
+ * 12.288 MHz / CHICM_divisor = clock rate
+ * FD = 1 - drive CHIFS on rising edge of CHICK
+ */
+
+ int clockrate = bits_per_frame * 8;
+ int divisor = 12288 / clockrate;
+
+ if (divisor > 255 || divisor * clockrate != 12288) {
+ printk("DBRI: illegal bits_per_frame in setup_chi\n");
+ }
+
+ *(cmd++) = DBRI_CMD(D_CHI, 0, D_CHI_CHICM(divisor) | D_CHI_FD
+ | D_CHI_IR | D_CHI_EN
+ | D_CHI_BPF(bits_per_frame));
+ }
+
+ /* CHI Data Mode
+ *
+ * RCE = 0 - receive on falling edge of CHICK
+ * XCE = 1 - transmit on rising edge of CHICK
+ * XEN = 1 - enable transmitter
+ * REN = 1 - enable receiver
+ */
+
+ *(cmd++) = DBRI_CMD(D_PAUSE, 0, 0);
+
+ *(cmd++) = DBRI_CMD(D_CDM, 0, D_CDM_XCE|D_CDM_XEN|D_CDM_REN);
+
+ dbri_cmdsend(dbri, cmd);
+}
+
+enum in_or_out { PIPEinput, PIPEoutput };
+
+static void link_time_slot(struct dbri *dbri, int pipe,
+ enum in_or_out direction, int prevpipe,
+ int length, int cycle)
+{
+ volatile int *cmd;
+ int val;
+ int nextpipe;
+
+ if (pipe < 0 || pipe > 31 || prevpipe < 0 || prevpipe > 31) {
+ printk("DBRI: link_time_slot called with illegal pipe number\n");
+ return;
+ }
+
+ if (dbri->pipes[pipe].sdp == 0 || dbri->pipes[prevpipe].sdp == 0) {
+ printk("DBRI: link_time_slot called on uninitialized pipe\n");
+ return;
+ }
+
+ if (pipe == prevpipe) {
+ nextpipe = pipe;
+ } else {
+ nextpipe = dbri->pipes[prevpipe].nextpipe;
+ }
+
+ dbri->pipes[pipe].nextpipe = nextpipe;
+ dbri->pipes[pipe].cycle = cycle;
+ dbri->pipes[pipe].length = length;
+
+ cmd = dbri_cmdlock(dbri);
+
+ if (direction == PIPEinput) {
+ val = D_DTS_VI | D_DTS_INS | D_DTS_PRVIN(prevpipe) | pipe;
+ *(cmd++) = DBRI_CMD(D_DTS, 0, val);
+ *(cmd++) = D_TS_LEN(length) | D_TS_CYCLE(cycle) | D_TS_NEXT(nextpipe);
+ *(cmd++) = 0;
+ } else {
+ val = D_DTS_VO | D_DTS_INS | D_DTS_PRVOUT(prevpipe) | pipe;
+ *(cmd++) = DBRI_CMD(D_DTS, 0, val);
+ *(cmd++) = 0;
+ *(cmd++) = D_TS_LEN(length) | D_TS_CYCLE(cycle) | D_TS_NEXT(nextpipe);
+ }
+
+ dbri_cmdsend(dbri, cmd);
+}
+
+static void xmit_fixed(struct dbri *dbri, int pipe, unsigned int data)
+{
+ volatile int *cmd;
+
+ if (pipe < 16 || pipe > 31) {
+ printk("DBRI: xmit_fixed called with illegal pipe number\n");
+ return;
+ }
+
+ if (D_SDP_MODE(dbri->pipes[pipe].sdp) != D_SDP_FIXED) {
+ printk("DBRI: xmit_fixed called on non-fixed pipe\n");
+ return;
+ }
+
+ if (! dbri->pipes[pipe].sdp & D_SDP_TO_SER) {
+ printk("DBRI: xmit_fixed called on receive pipe\n");
+ return;
+ }
+
+ /* DBRI short pipes always transmit LSB first */
+
+ if (dbri->pipes[pipe].sdp & D_SDP_MSB) {
+ data = reverse_bytes(data, dbri->pipes[pipe].length);
+ }
+
+ cmd = dbri_cmdlock(dbri);
+
+ *(cmd++) = DBRI_CMD(D_SSP, 0, pipe);
+ *(cmd++) = data;
+
+ dbri_cmdsend(dbri, cmd);
+}
+
+/* recv_fixed()
+ *
+ * Receive data on a "fixed" pipe - i.e, one whose contents are not
+ * expected to change much, and which we don't need to read constantly
+ * into a buffer. The DBRI only interrupts us when the data changes.
+ * Only short pipes (numbers 16-31) can be used in fixed data mode.
+ *
+ * Pass this function a pointer to a 32-bit field, no matter how large
+ * the actual time slot is. The interrupt handler takes care of bit
+ * ordering and alignment. An 8-bit time slot will always end up
+ * in the low-order 8 bits, filled either MSB-first or LSB-first,
+ * depending on the settings passed to setup_pipe()
+ */
+
+static void recv_fixed(struct dbri *dbri, int pipe, __u32 *ptr)
+{
+ if (pipe < 16 || pipe > 31) {
+ printk("DBRI: recv_fixed called with illegal pipe number\n");
+ return;
+ }
+
+ if (D_SDP_MODE(dbri->pipes[pipe].sdp) != D_SDP_FIXED) {
+ printk("DBRI: recv_fixed called on non-fixed pipe\n");
+ return;
+ }
+
+ if (dbri->pipes[pipe].sdp & D_SDP_TO_SER) {
+ printk("DBRI: recv_fixed called on transmit pipe\n");
+ return;
+ }
+
+ dbri->pipes[pipe].recv_fixed_ptr = ptr;
+}
+
+
+static void xmit_on_pipe(struct dbri *dbri, int pipe,
+ void * buffer, unsigned int len,
+ void (*callback)(void *, int), void * callback_arg)
+{
+ volatile int *cmd;
+ int td = 0;
+ int first_td = -1;
+ int last_td;
+ __u32 dvma_buffer;
+
+ if (pipe < 0 || pipe > 15) {
+ printk("DBRI: xmit_on_pipe called with illegal pipe number\n");
+ return;
+ }
+
+ if (dbri->pipes[pipe].sdp == 0) {
+ printk("DBRI: xmit_on_pipe called on uninitialized pipe\n");
+ return;
+ }
+
+ if (! dbri->pipes[pipe].sdp & D_SDP_TO_SER) {
+ printk("DBRI: xmit_on_pipe called on receive pipe\n");
+ return;
+ }
+
+ /* XXX Fix this XXX
+ * Should be able to queue multiple buffers to send on a pipe
+ */
+
+ if (dbri->pipes[pipe].desc != -1) {
+ printk("DBRI: xmit_on_pipe called on active pipe\n");
+ return;
+ }
+
+ dvma_buffer = mmu_get_scsi_one(buffer, len, dbri->sdev->my_bus);
+
+ while (len > 0) {
+ int mylen;
+
+ for (td; td < DBRI_NO_DESCS; td ++) {
+ if (! dbri->descs[td].inuse) break;
+ }
+ if (td == DBRI_NO_DESCS) {
+ break;
+ }
+
+ if (len > (1 << 13) - 1) {
+ mylen = (1 << 13) - 1;
+ } else {
+ mylen = len;
+ }
+
+ dbri->descs[td].inuse = 1;
+ dbri->descs[td].next = -1;
+ dbri->descs[td].buffer = NULL;
+ dbri->descs[td].output_callback = NULL;
+ dbri->descs[td].input_callback = NULL;
+
+ dbri->dma->desc[td].word1 = DBRI_TD_CNT(mylen);
+ dbri->dma->desc[td].ba = dvma_buffer;
+ dbri->dma->desc[td].nda = 0;
+ dbri->dma->desc[td].word4 = 0;
+
+ if (first_td == -1) {
+ first_td = td;
+ } else {
+ dbri->descs[last_td].next = td;
+ dbri->dma->desc[last_td].nda =
+ (int) & dbri->dma_dvma->desc[td];
+ }
+
+ last_td = td;
+ dvma_buffer += mylen;
+ len -= mylen;
+ }
+
+ if (first_td == -1) {
+ printk("xmit_on_pipe: No descriptors available\n");
+ return;
+ }
+
+ if (len > 0) {
+ printk("xmit_on_pipe: Insufficient descriptors; data truncated\n");
+ }
+
+ dbri->dma->desc[last_td].word1 |= DBRI_TD_I | DBRI_TD_F | DBRI_TD_B;
+
+ dbri->descs[last_td].buffer = buffer;
+ dbri->descs[last_td].len = len;
+ dbri->descs[last_td].output_callback = callback;
+ dbri->descs[last_td].output_callback_arg = callback_arg;
+
+ dbri->pipes[pipe].desc = first_td;
+
+ cmd = dbri_cmdlock(dbri);
+
+ *(cmd++) = DBRI_CMD(D_SDP, 0, dbri->pipes[pipe].sdp | D_SDP_P | D_SDP_C);
+ *(cmd++) = (int) & dbri->dma_dvma->desc[first_td];
+
+ dbri_cmdsend(dbri, cmd);
+}
+
+static void recv_on_pipe(struct dbri *dbri, int pipe,
+ void * buffer, unsigned int len,
+ void (*callback)(void *, int, unsigned int),
+ void * callback_arg)
+{
+ volatile int *cmd;
+ int rd;
+
+ if (pipe < 0 || pipe > 15) {
+ printk("DBRI: recv_on_pipe called with illegal pipe number\n");
+ return;
+ }
+
+ if (dbri->pipes[pipe].sdp == 0) {
+ printk("DBRI: recv_on_pipe called on uninitialized pipe\n");
+ return;
+ }
+
+ if (dbri->pipes[pipe].sdp & D_SDP_TO_SER) {
+ printk("DBRI: recv_on_pipe called on transmit pipe\n");
+ return;
+ }
+
+ /* XXX Fix this XXX
+ * Should be able to queue multiple buffers to send on a pipe
+ */
+
+ if (dbri->pipes[pipe].desc != -1) {
+ printk("DBRI: recv_on_pipe called on active pipe\n");
+ return;
+ }
+
+ /* XXX Fix this XXX
+ * Use multiple descriptors, if needed, to fit in all the data
+ */
+
+ if (len > (1 << 13) - 1) {
+ printk("recv_on_pipe called with len=%d; truncated\n", len);
+ len = (1 << 13) - 1;
+ }
+
+ /* Make sure buffer size is multiple of four */
+ len &= ~3;
+
+ for (rd = 0; rd < DBRI_NO_DESCS; rd ++) {
+ if (! dbri->descs[rd].inuse) break;
+ }
+ if (rd == DBRI_NO_DESCS) {
+ printk("DBRI xmit_on_pipe: No descriptors available\n");
+ return;
+ }
+
+ dbri->dma->desc[rd].word1 = 0;
+ dbri->dma->desc[rd].ba = mmu_get_scsi_one(buffer, len,
+ dbri->sdev->my_bus);
+ dbri->dma->desc[rd].nda = 0;
+ dbri->dma->desc[rd].word4 = DBRI_RD_B | DBRI_RD_BCNT(len);
+
+ dbri->descs[rd].buffer = buffer;
+ dbri->descs[rd].len = len;
+ dbri->descs[rd].input_callback = callback;
+ dbri->descs[rd].input_callback_arg = callback_arg;
+
+ dbri->pipes[pipe].desc = rd;
+
+ cmd = dbri_cmdlock(dbri);
+
+ *(cmd++) = DBRI_CMD(D_SDP, 0, dbri->pipes[pipe].sdp | D_SDP_P);
+ *(cmd++) = (int) & dbri->dma_dvma->desc[rd];
+
+ dbri_cmdsend(dbri, cmd);
+}
+
+
+/*
+****************************************************************************
+*********************** CS4215 audio codec management **********************
+****************************************************************************
+*/
X
X
X static void mmcodec_default(struct cs4215 *mm)
@@ -266,7 +869,7 @@
X * Control Time Slot 1-4
X * 0: Default I/O voltage scale
X * 1: 8 bit ulaw, 8kHz, mono, high pass filter disabled
- * 2: Serial enable, CHI master, 1 CHI device (64bit), clock 1
+ * 2: Serial enable, CHI master, 128 bits per frame, clock 1
X * 3: Tests disabled
X */
X mm->ctrl[0] = CS4215_RSRVD_1;
@@ -278,10 +881,6 @@
X
X static void mmcodec_init_data(struct dbri *dbri)
X {
- int val, n;
-
- n = dbri_cmdlock(dbri);
-
X /*
X * Data mode:
X * Pipe 4: Send timeslots 1-4 (audio data)
@@ -295,80 +894,27 @@
X * bits. The CS4215, it seems, observes TSIN (the delayed signal)
X * even if it's the CHI master. Don't ask me...
X */
-
-
- /* Pipe 4: SDP */
- val = D_SDP_MEM|D_SDP_TO_SER|D_SDP_C|D_SDP_P|D_SDP_MSB|D_PIPE(D_P_4);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0;
-
-
- /* Pipe 17: SDP */
- val = D_SDP_FIXED|D_SDP_TO_SER|D_SDP_C|D_PIPE(D_P_17);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0; /* Fixed data */
-
- /* Pipe 17: SSP */
- dbri->cmd[n++] = DBRI_CMD(D_SSP, 0, D_PIPE(D_P_17));
- dbri->cmd[n++] = reverse_bytes(*(int *)dbri->mm.data, 4);
-
-
- /* Pipe 6: SDP */
- val=D_SDP_MEM|D_SDP_FROM_SER|D_SDP_C|D_SDP_P|D_SDP_MSB|D_PIPE(D_P_6);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0;
-
-
- /* Pipe 20: SDP */
- val = D_SDP_FIXED|D_SDP_FROM_SER|D_SDP_CHANGE|D_SDP_C|D_PIPE(D_P_20);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0; /* Fixed data */
-
X
X
- dbri->cmd[n++] = DBRI_CMD(D_PAUSE, 0, 0);
+ /* Switch CS4215 to data mode - set PIO3 to 1 */
+ dbri->regs->reg2 = D_ENPIO | D_PIO1 | D_PIO3 |
+ (dbri->mm.onboard ? D_PIO0 : D_PIO2);
X
+ reset_chi(dbri, CHIslave, 0);
X
- /* Pipe 4: DTS */
- val = D_DTS_VO | D_DTS_INS | D_DTS_PRVOUT(D_P_16) | D_PIPE(D_P_4);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = 0;
-#if 0
- /* Full blown, four time slots, 16 bit stereo */
- dbri->cmd[n++] = D_TS_LEN(32) | D_TS_CYCLE(8)| D_TS_NEXT(D_P_16);
-#else
- /* Single time slot, 8 bit mono */
- dbri->cmd[n++] = D_TS_LEN(8) | D_TS_CYCLE(8)| D_TS_NEXT(D_P_16);
-#endif
+ setup_pipe(dbri, 4, D_SDP_MEM | D_SDP_TO_SER | D_SDP_MSB);
+ setup_pipe(dbri, 17, D_SDP_FIXED | D_SDP_TO_SER | D_SDP_MSB);
+ setup_pipe(dbri, 6, D_SDP_MEM | D_SDP_FROM_SER | D_SDP_MSB);
+ setup_pipe(dbri, 20, D_SDP_FIXED | D_SDP_FROM_SER | D_SDP_MSB);
X
- /* Pipe 17: DTS */
- val = D_DTS_VO | D_DTS_INS | D_DTS_PRVOUT(D_P_4) | D_PIPE(D_P_17);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = 0;
- dbri->cmd[n++] = D_TS_LEN(32) | D_TS_CYCLE(40) | D_TS_NEXT(D_P_16);
-
- /* Pipe 6: DTS */
- val = D_DTS_VI | D_DTS_INS | D_DTS_PRVIN(D_P_16) | D_PIPE(D_P_6);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
-#if 0
- /* Full blown, four time slots, 16 bit stereo */
- dbri->cmd[n++] = D_TS_LEN(32) | D_TS_CYCLE(8)| D_TS_NEXT(D_P_16);
-#else
- /* Single time slot, 8 bit mono */
- dbri->cmd[n++] = D_TS_LEN(8) | D_TS_CYCLE(8)| D_TS_NEXT(D_P_16);
-#endif
- dbri->cmd[n++] = 0;
-
- /* Pipe 20: DTS */
- val = D_DTS_VI | D_DTS_INS | D_DTS_PRVIN(D_P_6) | D_PIPE(D_P_20);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = D_TS_LEN(16) | D_TS_CYCLE(48) | D_TS_NEXT(D_P_16);
- dbri->cmd[n++] = 0;
+ /* Pipes 4 and 6 - Single time slot, 8 bit mono */
X
- /* CHI: Slave mode; enable interrupts */
- dbri->cmd[n++] = DBRI_CMD(D_CHI, 0, D_CHI_CHICM(0) | D_CHI_IR | D_CHI_EN);
+ link_time_slot(dbri, 17, PIPEoutput, 16, 32, 32);
+ link_time_slot(dbri, 4, PIPEoutput, 17, 8, 128);
+ link_time_slot(dbri, 6, PIPEinput, 16, 8, 0);
+ link_time_slot(dbri, 20, PIPEinput, 6, 16, 40);
X
- dbri_cmdsend(dbri, n);
+ xmit_fixed(dbri, 17, *(int *)dbri->mm.data);
X }
X
X
@@ -377,7 +923,7 @@
X */
X static void mmcodec_setctrl(struct dbri *dbri)
X {
- int n, val;
+ int i, val;
X
X /*
X * Enable Control mode: Set DBRI's PIO3 (4215's D/~C) to 0, then wait
@@ -398,15 +944,15 @@
X * into Data mode and put the DBRI into slave mode. Various timing
X * requirements must be observed along the way.
X *
- * Oh, and one more thing - when the DBRI is master (and only when
- * the DBRI is master), the addressing of the CS4215's time slots
- * is offset by eight bits, so we add eight to all the "cycle"
- * values in the Define Time Slot (DTS) commands. This is done in
- * hardware by a TI 248 that delays the DBRI->4215 frame sync signal
- * by eight clock cycles. Anybody know why?
+ * Oh, and one more thing, on a SPARCStation 20 (and maybe
+ * others?), the addressing of the CS4215's time slots is
+ * offset by eight bits, so we add eight to all the "cycle"
+ * values in the Define Time Slot (DTS) commands. This is
+ * done in hardware by a TI 248 that delays the DBRI->4215
+ * frame sync signal by eight clock cycles. Anybody know why?
X */
X
- n = dbri_cmdlock(dbri);
+ reset_chi(dbri, CHImaster, 128);
X
X /*
X * Control mode:
@@ -415,472 +961,325 @@
X * Pipe 19: Receive timeslot 7 (version).
X */
X
- /* Set CHI Anchor: Pipe 16. This should take care of the rest. */
- val = D_DTS_VI | D_DTS_VO | D_DTS_INS |
- D_DTS_PRVIN(D_P_16) | D_DTS_PRVOUT(D_P_16) | D_PIPE(D_P_16);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = D_TS_ANCHOR | D_TS_NEXT(D_P_16);
- dbri->cmd[n++] = D_TS_ANCHOR | D_TS_NEXT(D_P_16);
-
-
- /* Setup the pipes first */
- val = D_SDP_FIXED|D_SDP_TO_SER|D_SDP_P|D_SDP_C|D_PIPE(D_P_17);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0;
-
- val = D_SDP_FIXED|D_SDP_CHANGE|D_SDP_C|D_PIPE(D_P_18);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0;
-
- val = D_SDP_FIXED|D_SDP_CHANGE|D_SDP_C|D_PIPE(D_P_19);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0;
+ setup_pipe(dbri, 17, D_SDP_FIXED | D_SDP_TO_SER | D_SDP_MSB);
+ setup_pipe(dbri, 18, D_SDP_FIXED | D_SDP_CHANGE | D_SDP_MSB);
+ setup_pipe(dbri, 19, D_SDP_FIXED | D_SDP_CHANGE | D_SDP_MSB);
+
+ link_time_slot(dbri, 17, PIPEoutput, 16, 32, 128);
+ link_time_slot(dbri, 18, PIPEinput, 16, 8, 0);
+ link_time_slot(dbri, 19, PIPEinput, 18, 8, 48);
+
+ recv_fixed(dbri, 18, & dbri->mm.status);
+ recv_fixed(dbri, 19, & dbri->mm.version);
+
+ /* Wait for the chip to echo back CLB (Control Latch Bit) as zero */
X
- /* Fill in the data to send */
X dbri->mm.ctrl[0] &= ~CS4215_CLB;
- dbri->cmd[n++] = DBRI_CMD(D_SSP, 0, D_PIPE(D_P_17));
- dbri->cmd[n++] = reverse_bytes(*(int *)dbri->mm.ctrl, 4);
+ xmit_fixed(dbri, 17, *(int *)dbri->mm.ctrl);
X
- dbri->cmd[n++] = DBRI_CMD(D_PAUSE, 0, 0);
+ i = 1000000;
+ while ((! dbri->mm.status & CS4215_CLB) && i--);
+ if (i == 0) {
+ printk("CS4215 didn't respond to CLB\n");
+ return;
+ }
X
+ /* Terminate CS4215 control mode - data sheet says
+ * "Set CLB=1 and send two more frames of valid control info"
+ */
X
+ dbri->mm.ctrl[0] |= CS4215_CLB;
+ xmit_fixed(dbri, 17, *(int *)dbri->mm.ctrl);
X
- /* Link the timeslots */
+ /* Two frames of control info @ 8kHz frame rate = 250 us delay */
+ udelay(250);
+}
X
- /* Pipe 17 - CS4215 Status, Data Format, Serial Control, Test - output
- * time slots 1, 2, 3 and 4 - 32 bits
- */
+static int mmcodec_init(struct sparcaudio_driver *drv)
+{
+ struct dbri *dbri = (struct dbri *)drv->private;
+ int reg2 = dbri->regs->reg2;
X
- val = D_DTS_VO | D_DTS_INS | D_DTS_PRVOUT(D_P_16) | D_PIPE(D_P_17);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = 0;
- dbri->cmd[n++] = D_TS_LEN(32) | D_TS_CYCLE(8) | D_TS_NEXT(D_P_16);
X
- /* Pipe 18 - CS4215 Status and Data Format - input
- * time slots 1 & 2 - 16 bits
- */
+ /* Look for the cs4215 chips */
+ if(reg2 & D_PIO2) {
+ dprintk(D_MM, ("DBRI: Onboard CS4215 detected\n"));
+ dbri->mm.onboard = 1;
+ }
+ if(reg2 & D_PIO0) {
+ dprintk(D_MM, ("DBRI: Speakerbox detected\n"));
+ dbri->mm.onboard = 0;
+ }
+
X
- val = D_DTS_VI | D_DTS_INS | D_DTS_PRVIN(D_P_16) | D_PIPE(D_P_18);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = D_TS_LEN(16) | D_TS_CYCLE(8) | D_TS_NEXT(D_P_16);
- dbri->cmd[n++] = 0;
+ /* Using the Speakerbox, if both are attached. */
+ if((reg2 & D_PIO2) && (reg2 & D_PIO0)) {
+ printk("DBRI: Using speakerbox / ignoring onboard mmcodec.\n");
+ dbri->regs->reg2 = D_ENPIO2;
+ dbri->mm.onboard = 0;
+ }
+ if( !(reg2 & (D_PIO0|D_PIO2)) ) {
+ printk("DBRI: no mmcodec found.\n");
+ return -EIO;
+ }
X
- /* Pipe 19 - CS4215 Revision - time slot 7, eight bits - input
- */
X
- val = D_DTS_VI | D_DTS_INS | D_DTS_PRVIN(D_P_18) | D_PIPE(D_P_19);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = D_TS_LEN(8) | D_TS_CYCLE(56) | D_TS_NEXT(D_P_16);
- dbri->cmd[n++] = 0;
+ /* Now talk to our baby */
+ dbri->regs->reg0 |= D_C; /* Enable CHI */
X
+ mmcodec_default(&dbri->mm);
X
- /* Setup DBRI for CHI Master
- *
- * BPF = 128 (128 bits per 8 kHz frame = 1.024 MHz clock rate)
- * CHICM = 12 (12.288 MHz / 24 = 1.024 MHz clock rate)
- * FD = 1 - drive CHIFS on rising edge of CHICK
- *
- * RCE = 0 - receive on falling edge of CHICK
- * XCE = 1 - transmit on rising edge of CHICK
- */
- dbri->cmd[n++] = DBRI_CMD(D_CHI, 0, D_CHI_CHICM(12) | D_CHI_FD |
- D_CHI_IR | D_CHI_EN | D_CHI_BPF(128));
- dbri->cmd[n++] = DBRI_CMD(D_CDM, 0, D_CDM_XCE|D_CDM_XEN|D_CDM_REN);
- dbri->cmd[n++] = DBRI_CMD(D_PAUSE, 0, 0);
+ dbri->mm.version = 0xff;
+ mmcodec_setctrl(dbri);
+ if(dbri->mm.version == 0xff)
+ return -EIO;
X
- /* Wait for the command to complete */
- dbri_cmdsend(dbri, n);
+ mmcodec_init_data(dbri);
X
- /* Switch CS4215 to data mode - data sheet says
- * "Set CLB=1 and send two more frames of valid control info"
- */
- n = dbri_cmdlock(dbri);
+ return 0;
+}
X
- dbri->mm.ctrl[0] |= CS4215_CLB;
- dbri->cmd[n++] = DBRI_CMD(D_SSP, 0, D_PIPE(D_P_17));
- dbri->cmd[n++] = reverse_bytes(*(int *)dbri->mm.ctrl, 4);
X
- dbri_cmdsend(dbri, n);
+/*
+****************************************************************************
+******************** Interface with sparcaudio midlevel ********************
+****************************************************************************
+*/
X
- /* Two frames of control info @ 8kHz frame rate = 250 us delay */
- udelay(250);
X
- n = dbri_cmdlock(dbri);
+static int dbri_open(struct inode * inode, struct file * file,
+ struct sparcaudio_driver *drv)
+{
+ struct dbri *dbri = (struct dbri *)drv->private;
X
- /* Now switch back to data mode */
- /* Reset CHI Anchor: Stop Send/Receive */
- val = D_DTS_VI | D_DTS_VO | D_DTS_INS |
- D_DTS_PRVIN(D_P_16) | D_DTS_PRVOUT(D_P_16) | D_PIPE(D_P_16);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = D_TS_ANCHOR | D_TS_NEXT(D_P_16);
- dbri->cmd[n++] = D_TS_ANCHOR | D_TS_NEXT(D_P_16);
+ MOD_INC_USE_COUNT;
X
+ return 0;
+}
X
- /* Setup DBRI for CHI Slave */
- dbri->cmd[n++] = DBRI_CMD(D_CHI, 0, D_CHI_CHICM(0));
- /* dbri->cmd[n++] = DBRI_CMD(D_CHI, 0, D_CHI_CHICM(0) | D_CHI_IR | D_CHI_EN); */
- dbri->cmd[n++] = DBRI_CMD(D_PAUSE, 0, 0x16);
+static void dbri_release(struct inode * inode, struct file * file,
+ struct sparcaudio_driver *drv)
+{
+ MOD_DEC_USE_COUNT;
+}
X
+static int dbri_ioctl(struct inode * inode, struct file * file,
+ unsigned int x, unsigned long y,
+ struct sparcaudio_driver *drv)
+{
+ return 0;
+}
X
- /* Wait for command to complete */
- dbri_cmdsend(dbri, n);
+static void dbri_audio_output_callback(void * callback_arg, int status)
+{
+ struct sparcaudio_driver *drv = callback_arg;
X
- /* Switch CS4215 to data mode - set PIO3 to 1 */
- dbri->regs->reg2 = D_ENPIO | D_PIO1 | D_PIO3 |
- (dbri->mm.onboard ? D_PIO0 : D_PIO2);
+ sparcaudio_output_done(drv, 1);
X }
X
-static int mmcodec_init(struct sparcaudio_driver *drv)
+static void dbri_start_output(struct sparcaudio_driver *drv,
+ __u8 * buffer, unsigned long count)
X {
X struct dbri *dbri = (struct dbri *)drv->private;
- int reg2 = dbri->regs->reg2;
-
X
- /* Look for the cs4215 chips */
- if(reg2 & D_PIO2) {
- dprintk(D_MM, ("DBRI: Onboard CS4215 detected\n"));
- dbri->mm.onboard = 1;
- }
- if(reg2 & D_PIO0) {
- dprintk(D_MM, ("DBRI: Speakerbox detected\n"));
- dbri->mm.onboard = 0;
- }
-
+ /* Pipe 4 is audio transmit */
+ xmit_on_pipe(dbri, 4, buffer, count, &dbri_audio_output_callback, drv);
+}
X
- /* Using the Speakerbox, if both are attached. */
- if((reg2 & D_PIO2) && (reg2 & D_PIO0)) {
- printk("DBRI: Using speakerbox / ignoring onboard mmcodec.\n");
- dbri->regs->reg2 = D_ENPIO2;
- dbri->mm.onboard = 0;
- }
- if( !(reg2 & (D_PIO0|D_PIO2)) ) {
- printk("DBRI: no mmcodec found.\n");
- return -EIO;
- }
+static void dbri_stop_output(struct sparcaudio_driver *drv)
+{
+ struct dbri *dbri = (struct dbri *)drv->private;
X
+ reset_pipe(dbri, 4);
+}
X
- /* Now talk to our baby */
- dbri->regs->reg0 |= D_C; /* Enable CHI */
+static void dbri_start_input(struct sparcaudio_driver *drv,
+ __u8 * buffer, unsigned long len)
+{
+}
X
- mmcodec_default(&dbri->mm);
+static void dbri_stop_input(struct sparcaudio_driver *drv)
+{
+}
X
- dbri->mm.version = 0xff;
- mmcodec_setctrl(dbri);
- if(dbri->mm.version == 0xff)
- return -EIO;
+static void dbri_audio_getdev(struct sparcaudio_driver *drv,
+ audio_device_t *devptr)
+{
+}
X
- mmcodec_init_data(dbri);
+static int dbri_set_output_volume(struct sparcaudio_driver *drv, int volume)
+{
+ return 0;
+}
X
- return 0;
+static int dbri_get_output_volume(struct sparcaudio_driver *drv)
+{
+ return 0;
X }
X
-void dbri_isdn_init(struct dbri *dbri)
+static int dbri_set_input_volume(struct sparcaudio_driver *drv, int volume)
X {
- int n, val;
+ return 0;
+}
X
- /* Pipe 0: Receive D channel
- * Pipe 8: Receive B1 channel
- * Pipe 9: Receive B2 channel
- * Pipe 1: Transmit D channel
- * Pipe 10: Transmit B1 channel
- * Pipe 11: Transmit B2 channel
- */
+static int dbri_get_input_volume(struct sparcaudio_driver *drv)
+{
+ return 0;
+}
X
- n = dbri_cmdlock(dbri);
+static int dbri_set_monitor_volume(struct sparcaudio_driver *drv, int volume)
+{
+ return 0;
+}
X
- /* Pipe 0: SDP */
- val = D_SDP_HDLC|D_SDP_FROM_SER|D_SDP_C|D_SDP_P|D_SDP_LSB|D_PIPE(D_P_0);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0;
-
- /* Pipe 8: SDP */
- val = D_SDP_HDLC|D_SDP_FROM_SER|D_SDP_C|D_SDP_P|D_SDP_LSB|D_PIPE(D_P_8);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0;
-
- /* Pipe 9: SDP */
- val = D_SDP_HDLC|D_SDP_FROM_SER|D_SDP_C|D_SDP_P|D_SDP_LSB|D_PIPE(D_P_9);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0;
-
- /* Pipe 1: SDP */
- val = D_SDP_HDLC_D|D_SDP_TO_SER|D_SDP_C|D_SDP_P|D_SDP_LSB|D_PIPE(D_P_1);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0;
-
- /* Pipe 10: SDP */
- val = D_SDP_HDLC|D_SDP_TO_SER|D_SDP_C|D_SDP_P|D_SDP_LSB|D_PIPE(D_P_10);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0;
-
- /* Pipe 11: SDP */
- val = D_SDP_HDLC|D_SDP_TO_SER|D_SDP_C|D_SDP_P|D_SDP_LSB|D_PIPE(D_P_11);
- dbri->cmd[n++] = DBRI_CMD(D_SDP, 0, val);
- dbri->cmd[n++] = 0;
-
-
- dbri->cmd[n++] = DBRI_CMD(D_PAUSE, 0, 0);
-
- /* Pipe 0: DTS */
- val = D_DTS_VI | D_DTS_INS | D_DTS_PRVIN(D_P_0) | D_PIPE(D_P_0);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = D_TS_LEN(2) | D_TS_CYCLE(17)| D_TS_NEXT(D_P_0);
- dbri->cmd[n++] = 0;
-
- /* Pipe 8: DTS */
- val = D_DTS_VI | D_DTS_INS | D_DTS_PRVIN(D_P_0) | D_PIPE(D_P_8);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = D_TS_LEN(8) | D_TS_CYCLE(0)| D_TS_NEXT(D_P_0);
- dbri->cmd[n++] = 0;
-
- /* Pipe 9: DTS */
- val = D_DTS_VI | D_DTS_INS | D_DTS_PRVIN(D_P_8) | D_PIPE(D_P_9);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = D_TS_LEN(8) | D_TS_CYCLE(8)| D_TS_NEXT(D_P_0);
- dbri->cmd[n++] = 0;
-
- /* Pipe 1: DTS */
- val = D_DTS_VO | D_DTS_INS | D_DTS_PRVOUT(D_P_1) | D_PIPE(D_P_1);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = 0;
- dbri->cmd[n++] = D_TS_LEN(2) | D_TS_CYCLE(17)| D_TS_NEXT(D_P_1);
-
- /* Pipe 10: DTS */
- val = D_DTS_VO | D_DTS_INS | D_DTS_PRVOUT(D_P_1) | D_PIPE(D_P_10);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = 0;
- dbri->cmd[n++] = D_TS_LEN(8) | D_TS_CYCLE(0)| D_TS_NEXT(D_P_1);
-
- /* Pipe 11: DTS */
- val = D_DTS_VO | D_DTS_INS | D_DTS_PRVOUT(D_P_10) | D_PIPE(D_P_11);
- dbri->cmd[n++] = DBRI_CMD(D_DTS, 0, val);
- dbri->cmd[n++] = 0;
- dbri->cmd[n++] = D_TS_LEN(8) | D_TS_CYCLE(8)| D_TS_NEXT(D_P_1);
+static int dbri_get_monitor_volume(struct sparcaudio_driver *drv)
+{
+ return 0;
+}
X
+static int dbri_set_output_balance(struct sparcaudio_driver *drv, int balance)
+{
+ return 0;
+}
X
- /* Wait for command to complete */
- dbri_cmdsend(dbri, n);
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 33'
echo 'File patch-2.2.4 is continued in part 34'
echo 34 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 31 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 31; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+ volatile unsigned int tx_cfg; /* Transmitter config register */
+ volatile unsigned int ipkt_gap1; /* Inter-packet gap 1 */
+ volatile unsigned int ipkt_gap2; /* Inter-packet gap 2 */
+ volatile unsigned int attempt_limit; /* Transmit attempt limit */
+ volatile unsigned int stime; /* Transmit slot time */
+ volatile unsigned int preamble_len; /* Size of transmit preamble */
+ volatile unsigned int preamble_pattern; /* Pattern for transmit preamble */
+ volatile unsigned int tx_sframe_delim; /* Transmit delimiter */
+ volatile unsigned int jsize; /* Toe jam... */
+ volatile unsigned int tx_pkt_max; /* Transmit max pkt size */
+ volatile unsigned int tx_pkt_min; /* Transmit min pkt size */
+ volatile unsigned int peak_attempt; /* Count of transmit peak attempts */
+ volatile unsigned int dt_ctr; /* Transmit defer timer */
+ volatile unsigned int nc_ctr; /* Transmit normal-collision counter */
+ volatile unsigned int fc_ctr; /* Transmit first-collision counter */
+ volatile unsigned int ex_ctr; /* Transmit excess-collision counter */
+ volatile unsigned int lt_ctr; /* Transmit late-collision counter */
+ volatile unsigned int rand_seed; /* Transmit random number seed */
+ volatile unsigned int tx_smachine; /* Transmit state machine */
+ volatile unsigned int _unused3[44]; /* Reserved */
+ volatile unsigned int rx_swreset; /* Receiver software reset */
+ volatile unsigned int rx_cfg; /* Receiver config register */
+ volatile unsigned int rx_pkt_max; /* Receive max pkt size */
+ volatile unsigned int rx_pkt_min; /* Receive min pkt size */
+ volatile unsigned int mac_addr2; /* Ether address register 2 */
+ volatile unsigned int mac_addr1; /* Ether address register 1 */
+ volatile unsigned int mac_addr0; /* Ether address register 0 */
+ volatile unsigned int fr_ctr; /* Receive frame receive counter */
+ volatile unsigned int gle_ctr; /* Receive giant-length error counter */
+ volatile unsigned int unale_ctr; /* Receive unaligned error counter */
+ volatile unsigned int rcrce_ctr; /* Receive CRC error counter */
+ volatile unsigned int rx_smachine; /* Receiver state machine */
+ volatile unsigned int rx_cvalid; /* Receiver code violation */
+ volatile unsigned int _unused4; /* Reserved... */
+ volatile unsigned int htable3; /* Hash table 3 */
+ volatile unsigned int htable2; /* Hash table 2 */
+ volatile unsigned int htable1; /* Hash table 1 */
+ volatile unsigned int htable0; /* Hash table 0 */
+ volatile unsigned int afilter2; /* Address filter 2 */
+ volatile unsigned int afilter1; /* Address filter 1 */
+ volatile unsigned int afilter0; /* Address filter 0 */
+ volatile unsigned int afilter_mask; /* Address filter mask */
+};
+
+/* BigMac XIF config register. */
+#define BIGMAC_XCFG_ODENABLE 0x00000001 /* Output driver enable */
+#define BIGMAC_XCFG_RESV 0x00000002 /* Reserved, write always as 1 */
+#define BIGMAC_XCFG_MLBACK 0x00000004 /* Loopback-mode MII enable */
+#define BIGMAC_XCFG_SMODE 0x00000008 /* Enable serial mode */
+
+/* BigMAC status register. */
+#define BIGMAC_STAT_GOTFRAME 0x00000001 /* Received a frame */
+#define BIGMAC_STAT_RCNTEXP 0x00000002 /* Receive frame counter expired */
+#define BIGMAC_STAT_ACNTEXP 0x00000004 /* Align-error counter expired */
+#define BIGMAC_STAT_CCNTEXP 0x00000008 /* CRC-error counter expired */
+#define BIGMAC_STAT_LCNTEXP 0x00000010 /* Length-error counter expired */
+#define BIGMAC_STAT_RFIFOVF 0x00000020 /* Receive FIFO overflow */
+#define BIGMAC_STAT_CVCNTEXP 0x00000040 /* Code-violation counter expired */
+#define BIGMAC_STAT_SENTFRAME 0x00000100 /* Transmitted a frame */
+#define BIGMAC_STAT_TFIFO_UND 0x00000200 /* Transmit FIFO underrun */
+#define BIGMAC_STAT_MAXPKTERR 0x00000400 /* Max-packet size error */
+#define BIGMAC_STAT_NCNTEXP 0x00000800 /* Normal-collision counter expired */
+#define BIGMAC_STAT_ECNTEXP 0x00001000 /* Excess-collision counter expired */
+#define BIGMAC_STAT_LCCNTEXP 0x00002000 /* Late-collision counter expired */
+#define BIGMAC_STAT_FCNTEXP 0x00004000 /* First-collision counter expired */
+#define BIGMAC_STAT_DTIMEXP 0x00008000 /* Defer-timer expired */
+
+/* BigMAC interrupt mask register. */
+#define BIGMAC_IMASK_GOTFRAME 0x00000001 /* Received a frame */
+#define BIGMAC_IMASK_RCNTEXP 0x00000002 /* Receive frame counter expired */
+#define BIGMAC_IMASK_ACNTEXP 0x00000004 /* Align-error counter expired */
+#define BIGMAC_IMASK_CCNTEXP 0x00000008 /* CRC-error counter expired */
+#define BIGMAC_IMASK_LCNTEXP 0x00000010 /* Length-error counter expired */
+#define BIGMAC_IMASK_RFIFOVF 0x00000020 /* Receive FIFO overflow */
+#define BIGMAC_IMASK_CVCNTEXP 0x00000040 /* Code-violation counter expired */
+#define BIGMAC_IMASK_SENTFRAME 0x00000100 /* Transmitted a frame */
+#define BIGMAC_IMASK_TFIFO_UND 0x00000200 /* Transmit FIFO underrun */
+#define BIGMAC_IMASK_MAXPKTERR 0x00000400 /* Max-packet size error */
+#define BIGMAC_IMASK_NCNTEXP 0x00000800 /* Normal-collision counter expired */
+#define BIGMAC_IMASK_ECNTEXP 0x00001000 /* Excess-collision counter expired */
+#define BIGMAC_IMASK_LCCNTEXP 0x00002000 /* Late-collision counter expired */
+#define BIGMAC_IMASK_FCNTEXP 0x00004000 /* First-collision counter expired */
+#define BIGMAC_IMASK_DTIMEXP 0x00008000 /* Defer-timer expired */
+
+/* BigMac transmit config register. */
+#define BIGMAC_TXCFG_ENABLE 0x00000001 /* Enable the transmitter */
+#define BIGMAC_TXCFG_FIFO 0x00000010 /* Default tx fthresh... */
+#define BIGMAC_TXCFG_SMODE 0x00000020 /* Enable slow transmit mode */
+#define BIGMAC_TXCFG_CIGN 0x00000040 /* Ignore transmit collisions */
+#define BIGMAC_TXCFG_FCSOFF 0x00000080 /* Do not emit FCS */
+#define BIGMAC_TXCFG_DBACKOFF 0x00000100 /* Disable backoff */
+#define BIGMAC_TXCFG_FULLDPLX 0x00000200 /* Enable full-duplex */
+
+/* BigMac receive config register. */
+#define BIGMAC_RXCFG_ENABLE 0x00000001 /* Enable the receiver */
+#define BIGMAC_RXCFG_FIFO 0x0000000e /* Default rx fthresh... */
+#define BIGMAC_RXCFG_PSTRIP 0x00000020 /* Pad byte strip enable */
+#define BIGMAC_RXCFG_PMISC 0x00000040 /* Enable promiscous mode */
+#define BIGMAC_RXCFG_DERR 0x00000080 /* Disable error checking */
+#define BIGMAC_RXCFG_DCRCS 0x00000100 /* Disable CRC stripping */
+#define BIGMAC_RXCFG_ME 0x00000200 /* Receive packets addressed to me */
+#define BIGMAC_RXCFG_PGRP 0x00000400 /* Enable promisc group mode */
+#define BIGMAC_RXCFG_HENABLE 0x00000800 /* Enable the hash filter */
+#define BIGMAC_RXCFG_AENABLE 0x00001000 /* Enable the address filter */
+
+/* The BigMAC PHY transceiver. Not nearly as sophisticated as the happy meal
+ * one. But it does have the "bit banger", oh baby.
+ */
+struct bmac_tcvr {
+ unsigned int tcvr_pal;
+ unsigned int mgmt_pal;
+};
+
+/* Frame commands. */
+#define FRAME_WRITE 0x50020000
+#define FRAME_READ 0x60020000
+
+/* Tranceiver registers. */
+#define TCVR_PAL_SERIAL 0x00000001 /* Enable serial mode */
+#define TCVR_PAL_EXTLBACK 0x00000002 /* Enable external loopback */
+#define TCVR_PAL_MSENSE 0x00000004 /* Media sense */
+#define TCVR_PAL_LTENABLE 0x00000008 /* Link test enable */
+#define TCVR_PAL_LTSTATUS 0x00000010 /* Link test status (P1 only) */
+
+/* Management PAL. */
+#define MGMT_PAL_DCLOCK 0x00000001 /* Data clock */
+#define MGMT_PAL_OENAB 0x00000002 /* Output enabler */
+#define MGMT_PAL_MDIO 0x00000004 /* MDIO Data/attached */
+#define MGMT_PAL_TIMEO 0x00000008 /* Transmit enable timeout error */
+#define MGMT_PAL_EXT_MDIO MGMT_PAL_MDIO
+#define MGMT_PAL_INT_MDIO MGMT_PAL_TIMEO
+
+/* Here are some PHY addresses. */
+#define BIGMAC_PHY_EXTERNAL 0 /* External transceiver */
+#define BIGMAC_PHY_INTERNAL 1 /* Internal transceiver */
+
+/* PHY registers */
+#define BIGMAC_BMCR 0x00 /* Basic mode control register */
+#define BIGMAC_BMSR 0x01 /* Basic mode status register */
+
+/* BMCR bits */
+#define BMCR_ISOLATE 0x0400 /* Disconnect DP83840 from MII */
+#define BMCR_PDOWN 0x0800 /* Powerdown the DP83840 */
+#define BMCR_ANENABLE 0x1000 /* Enable auto negotiation */
+#define BMCR_SPEED100 0x2000 /* Select 100Mbps */
+#define BMCR_LOOPBACK 0x4000 /* TXD loopback bits */
+#define BMCR_RESET 0x8000 /* Reset the DP83840 */
+
+/* BMSR bits */
+#define BMSR_ERCAP 0x0001 /* Ext-reg capability */
+#define BMSR_JCD 0x0002 /* Jabber detected */
+#define BMSR_LSTATUS 0x0004 /* Link status */
+
+/* Ring descriptors and such, same as Quad Ethernet. */
+struct be_rxd {
+ unsigned int rx_flags;
+ unsigned int rx_addr;
+};
+
+#define RXD_OWN 0x80000000 /* Ownership. */
+#define RXD_UPDATE 0x10000000 /* Being Updated? */
+#define RXD_LENGTH 0x000007ff /* Packet Length. */
+
+struct be_txd {
+ unsigned int tx_flags;
+ unsigned int tx_addr;
+};
+
+#define TXD_OWN 0x80000000 /* Ownership. */
+#define TXD_SOP 0x40000000 /* Start Of Packet */
+#define TXD_EOP 0x20000000 /* End Of Packet */
+#define TXD_UPDATE 0x10000000 /* Being Updated? */
+#define TXD_LENGTH 0x000007ff /* Packet Length. */
+
+#define TX_RING_MAXSIZE 256
+#define RX_RING_MAXSIZE 256
+
+#define TX_RING_SIZE 256
+#define RX_RING_SIZE 256
+
+#define NEXT_RX(num) (((num) + 1) & (RX_RING_SIZE - 1))
+#define NEXT_TX(num) (((num) + 1) & (TX_RING_SIZE - 1))
+#define PREV_RX(num) (((num) - 1) & (RX_RING_SIZE - 1))
+#define PREV_TX(num) (((num) - 1) & (TX_RING_SIZE - 1))
+
+#define TX_BUFFS_AVAIL(bp) \
+ (((bp)->tx_old <= (bp)->tx_new) ? \
+ (bp)->tx_old + (TX_RING_SIZE - 1) - (bp)->tx_new : \
+ (bp)->tx_old - (bp)->tx_new - 1)
+
+
+#define SUN4C_TX_BUFFS_AVAIL(bp) \
+ (((bp)->tx_old <= (bp)->tx_new) ? \
+ (bp)->tx_old + (SUN4C_TX_RING_SIZE - 1) - (bp)->tx_new : \
+ (bp)->tx_old - (bp)->tx_new - (TX_RING_SIZE - SUN4C_TX_RING_SIZE))
+
+
+#define RX_COPY_THRESHOLD 128
+#define RX_BUF_ALLOC_SIZE (ETH_FRAME_LEN + (64 * 3))
+
+struct bmac_init_block {
+ struct be_rxd be_rxd[RX_RING_MAXSIZE];
+ struct be_txd be_txd[TX_RING_MAXSIZE];
+};
+
+#define bib_offset(mem, elem) \
+((__u32)((unsigned long)(&(((struct bmac_init_block *)0)->mem[elem]))))
+
+#define SUN4C_PKT_BUF_SZ 1546
+#define SUN4C_RX_BUFF_SIZE SUN4C_PKT_BUF_SZ
+#define SUN4C_TX_BUFF_SIZE SUN4C_PKT_BUF_SZ
+
+#define SUN4C_RX_RING_SIZE 16
+#define SUN4C_TX_RING_SIZE 16
+
+struct bigmac_buffers {
+ char tx_buf[SUN4C_TX_RING_SIZE][SUN4C_TX_BUFF_SIZE];
+ char pad[2]; /* Align rx_buf for copy_and_sum(). */
+ char rx_buf[SUN4C_RX_RING_SIZE][SUN4C_RX_BUFF_SIZE];
+};
+
+#define bbuf_offset(mem, elem) \
+((__u32)((unsigned long)(&(((struct bigmac_buffers *)0)->mem[elem][0]))))
+
+/* Now software state stuff. */
+enum bigmac_transceiver {
+ external = 0,
+ internal = 1,
+ none = 2,
+};
+
+/* Timer state engine. */
+enum bigmac_timer_state {
+ ltrywait = 1, /* Forcing try of all modes, from fastest to slowest. */
+ asleep = 2, /* Timer inactive. */
+};
+
+struct bigmac {
+ struct qe_globreg *gregs; /* QEC Global Registers */
+ struct qe_creg *creg; /* QEC BigMAC Channel Registers */
+ struct BIG_MAC_regs *bregs; /* BigMAC Registers */
+ struct bmac_tcvr *tregs; /* BigMAC Transceiver */
+ struct bmac_init_block *bmac_block; /* RX and TX descriptors */
+ __u32 bblock_dvma; /* RX and TX descriptors */
+
+ struct sk_buff *rx_skbs[RX_RING_SIZE];
+ struct sk_buff *tx_skbs[TX_RING_SIZE];
+
+ int rx_new, tx_new, rx_old, tx_old;
+
+ struct bigmac_buffers *sun4c_buffers;
+ __u32 s4c_buf_dvma;
+
+ int board_rev; /* BigMAC board revision. */
+
+ enum bigmac_transceiver tcvr_type;
+ unsigned int bigmac_bursts;
+ unsigned int paddr;
+ unsigned short sw_bmsr; /* SW copy of PHY BMSR */
+ unsigned short sw_bmcr; /* SW copy of PHY BMCR */
+ struct timer_list bigmac_timer;
+ enum bigmac_timer_state timer_state;
+ unsigned int timer_ticks;
+
+ struct enet_statistics enet_stats;
+ struct linux_sbus_device *qec_sbus_dev;
+ struct linux_sbus_device *bigmac_sbus_dev;
+ struct device *dev;
+ struct bigmac *next_module;
+};
+
+/* We use this to acquire receive skb's that we can DMA directly into. */
+#define ALIGNED_RX_SKB_ADDR(addr) \
+ ((((unsigned long)(addr) + (64 - 1)) & ~(64 - 1)) - (unsigned long)(addr))
+
+static inline struct sk_buff *big_mac_alloc_skb(unsigned int length, int gfp_flags)
+{
+ struct sk_buff *skb;
+
+ skb = alloc_skb(length + 64, gfp_flags);
+ if(skb) {
+ int offset = ALIGNED_RX_SKB_ADDR(skb->data);
+
+ if(offset)
+ skb_reserve(skb, offset);
+ }
+ return skb;
+}
+
+#endif /* !(_SUNBMAC_H) */
diff -u --recursive --new-file v2.2.3/linux/drivers/net/sunhme.c linux/drivers/net/sunhme.c
--- v2.2.3/linux/drivers/net/sunhme.c Thu Nov 19 09:56:28 1998
+++ linux/drivers/net/sunhme.c Mon Mar 15 16:11:30 1999
@@ -2,11 +2,11 @@
X * auto carrier detecting ethernet driver. Also known as the
X * "Happy Meal Ethernet" found on SunSwift SBUS cards.
X *
- * Copyright (C) 1996 David S. Miller (da...@caipfs.rutgers.edu)
+ * Copyright (C) 1996, 1998 David S. Miller (da...@caipfs.rutgers.edu)
X */
X
X static char *version =
- "sunhme.c:v1.2 10/Oct/96 David S. Miller (da...@caipfs.rutgers.edu)\n";
+ "sunhme.c:v1.10 27/Jan/99 David S. Miller (da...@caipfs.rutgers.edu)\n";
X
X #include <linux/module.h>
X
@@ -35,12 +35,13 @@
X #include <asm/openprom.h>
X #include <asm/oplib.h>
X #include <asm/auxio.h>
-#include <asm/system.h>
X #include <asm/pgtable.h>
X #include <asm/irq.h>
X #ifndef __sparc_v9__
X #include <asm/io-unit.h>
X #endif
+#include <asm/ethtool.h>
+#include <asm/uaccess.h>
X
X #include <linux/netdevice.h>
X #include <linux/etherdevice.h>
@@ -57,6 +58,11 @@
X static struct happy_meal *root_happy_dev = NULL;
X #endif
X
+static struct quattro *qfe_sbus_list = NULL;
+#ifdef CONFIG_PCI
+static struct quattro *qfe_pci_list = NULL;
+#endif
+
X #undef HMEDEBUG
X #undef SXDEBUG
X #undef RXDEBUG
@@ -363,6 +369,15 @@
X {
X hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, DP83840_BMCR);
X
+ /* Downgrade from full to half duplex. Only possible
+ * via ethtool.
+ */
+ if(hp->sw_bmcr & BMCR_FULLDPLX) {
+ hp->sw_bmcr &= ~(BMCR_FULLDPLX);
+ happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr);
+ return 0;
+ }
+
X /* Downgrade from 100 to 10. */
X if(hp->sw_bmcr & BMCR_SPEED100) {
X hp->sw_bmcr &= ~(BMCR_SPEED100);
@@ -1049,7 +1064,7 @@
X for(i = 0; i < RX_RING_SIZE; i++) {
X struct sk_buff *skb;
X
- skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, gfp_flags);
+ skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, gfp_flags | GFP_DMA);
X if(!skb)
X continue;
X hp->rx_skbs[i] = skb;
@@ -1077,7 +1092,7 @@
X } else
X #endif
X {
- hb->happy_meal_rxd[i].rx_addr = (u32)((unsigned long) skb->data);
+ hb->happy_meal_rxd[i].rx_addr = sbus_dvma_addr(skb->data);
X hb->happy_meal_rxd[i].rx_flags =
X (RXFLAG_OWN | ((RX_BUF_ALLOC_SIZE - RX_OFFSET) << 16));
X }
@@ -1115,7 +1130,8 @@
X #endif
X
X static void happy_meal_begin_auto_negotiation(struct happy_meal *hp,
- struct hmeal_tcvregs *tregs)
+ struct hmeal_tcvregs *tregs,
+ struct ethtool_cmd *ep)
X {
X int timeout;
X
@@ -1124,93 +1140,108 @@
X hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, DP83840_BMCR);
X hp->sw_physid1 = happy_meal_tcvr_read(hp, tregs, DP83840_PHYSID1);
X hp->sw_physid2 = happy_meal_tcvr_read(hp, tregs, DP83840_PHYSID2);
- hp->sw_advertise = happy_meal_tcvr_read(hp, tregs, DP83840_ADVERTISE);
X
X /* XXX Check BMSR_ANEGCAPABLE, should not be necessary though. */
X
- /* Advertise everything we can support. */
- if(hp->sw_bmsr & BMSR_10HALF)
- hp->sw_advertise |= (ADVERTISE_10HALF);
- else
- hp->sw_advertise &= ~(ADVERTISE_10HALF);
+ hp->sw_advertise = happy_meal_tcvr_read(hp, tregs, DP83840_ADVERTISE);
+ if(ep == NULL || ep->autoneg == AUTONEG_ENABLE) {
+ /* Advertise everything we can support. */
+ if(hp->sw_bmsr & BMSR_10HALF)
+ hp->sw_advertise |= (ADVERTISE_10HALF);
+ else
+ hp->sw_advertise &= ~(ADVERTISE_10HALF);
X
- if(hp->sw_bmsr & BMSR_10FULL)
- hp->sw_advertise |= (ADVERTISE_10FULL);
- else
- hp->sw_advertise &= ~(ADVERTISE_10FULL);
- if(hp->sw_bmsr & BMSR_100HALF)
- hp->sw_advertise |= (ADVERTISE_100HALF);
- else
- hp->sw_advertise &= ~(ADVERTISE_100HALF);
- if(hp->sw_bmsr & BMSR_100FULL)
- hp->sw_advertise |= (ADVERTISE_100FULL);
- else
- hp->sw_advertise &= ~(ADVERTISE_100FULL);
+ if(hp->sw_bmsr & BMSR_10FULL)
+ hp->sw_advertise |= (ADVERTISE_10FULL);
+ else
+ hp->sw_advertise &= ~(ADVERTISE_10FULL);
+ if(hp->sw_bmsr & BMSR_100HALF)
+ hp->sw_advertise |= (ADVERTISE_100HALF);
+ else
+ hp->sw_advertise &= ~(ADVERTISE_100HALF);
+ if(hp->sw_bmsr & BMSR_100FULL)
+ hp->sw_advertise |= (ADVERTISE_100FULL);
+ else
+ hp->sw_advertise &= ~(ADVERTISE_100FULL);
+ happy_meal_tcvr_write(hp, tregs, DP83840_ADVERTISE, hp->sw_advertise);
X
- /* XXX Currently no Happy Meal cards I know off support 100BaseT4,
- * XXX and this is because the DP83840 does not support it, changes
- * XXX would need to be made to the tx/rx logic in the driver as well
- * XXX so I completely skip checking for it in the BMSR for now.
- */
+ /* XXX Currently no Happy Meal cards I know off support 100BaseT4,
+ * XXX and this is because the DP83840 does not support it, changes
+ * XXX would need to be made to the tx/rx logic in the driver as well
+ * XXX so I completely skip checking for it in the BMSR for now.
+ */
X
X #ifdef AUTO_SWITCH_DEBUG
- ASD(("%s: Advertising [ ", hp->dev->name));
- if(hp->sw_advertise & ADVERTISE_10HALF)
- ASD(("10H "));
- if(hp->sw_advertise & ADVERTISE_10FULL)
- ASD(("10F "));
- if(hp->sw_advertise & ADVERTISE_100HALF)
- ASD(("100H "));
- if(hp->sw_advertise & ADVERTISE_100FULL)
- ASD(("100F "));
+ ASD(("%s: Advertising [ ", hp->dev->name));
+ if(hp->sw_advertise & ADVERTISE_10HALF)
+ ASD(("10H "));
+ if(hp->sw_advertise & ADVERTISE_10FULL)
+ ASD(("10F "));
+ if(hp->sw_advertise & ADVERTISE_100HALF)
+ ASD(("100H "));
+ if(hp->sw_advertise & ADVERTISE_100FULL)
+ ASD(("100F "));
X #endif
X
- happy_meal_tcvr_write(hp, tregs, DP83840_ADVERTISE, hp->sw_advertise);
+ /* Enable Auto-Negotiation, this is usually on already... */
+ hp->sw_bmcr |= BMCR_ANENABLE;
+ happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr);
X
- /* Enable Auto-Negotiation, this is usually on already... */
- hp->sw_bmcr |= BMCR_ANENABLE;
- happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr);
+ /* Restart it to make sure it is going. */
+ hp->sw_bmcr |= BMCR_ANRESTART;
+ happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr);
X
- /* Restart it to make sure it is going. */
- hp->sw_bmcr |= BMCR_ANRESTART;
- happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr);
+ /* BMCR_ANRESTART self clears when the process has begun. */
X
- /* BMCR_ANRESTART self clears when the process has begun. */
+ timeout = 64; /* More than enough. */
+ while(--timeout) {
+ hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, DP83840_BMCR);
+ if(!(hp->sw_bmcr & BMCR_ANRESTART))
+ break; /* got it. */
+ udelay(10);
+ }
+ if(!timeout) {
+ printk("%s: Happy Meal would not start auto negotiation "
+ "BMCR=0x%04x\n", hp->dev->name, hp->sw_bmcr);
+ printk("%s: Performing force link detection.\n",
+ hp->dev->name);
+ goto force_link;
+ } else {
+ hp->timer_state = arbwait;
+ }
+ } else {
+force_link:
+ /* Force the link up, trying first a particular mode.
+ * Either we are here at the request of ethtool or
+ * because the Happy Meal would not start to autoneg.
+ */
X
- timeout = 64; /* More than enough. */
- while(--timeout) {
- hp->sw_bmcr = happy_meal_tcvr_read(hp, tregs, DP83840_BMCR);
- if(!(hp->sw_bmcr & BMCR_ANRESTART))
- break; /* got it. */
- udelay(10);
- }
- if(!timeout) {
- printk("%s: Happy Meal would not start auto negotiation BMCR=0x%04x\n",
- hp->dev->name, hp->sw_bmcr);
- printk("%s: Performing force link detection.\n", hp->dev->name);
-
- /* Disable auto-negotiation in BMCR, enable FULL duplex and 100mb/s,
- * setup the timer state machine, and fire it off.
- *
- * XXX Should probably reset the DP83840 first
- * XXX as this is a gross fatal error...
+ /* Disable auto-negotiation in BMCR, enable the duplex and
+ * speed setting, init the timer state machine, and fire it off.
X */
- hp->sw_bmcr = BMCR_SPEED100;
+ if(ep == NULL || ep->autoneg == AUTONEG_ENABLE) {
+ hp->sw_bmcr = BMCR_SPEED100;
+ } else {
+ if(ep->speed == SPEED_100)
+ hp->sw_bmcr = BMCR_SPEED100;
+ else
+ hp->sw_bmcr = 0;
+ if(ep->duplex == DUPLEX_FULL)
+ hp->sw_bmcr |= BMCR_FULLDPLX;
+ }
X happy_meal_tcvr_write(hp, tregs, DP83840_BMCR, hp->sw_bmcr);
X
X /* OK, seems we need do disable the transceiver for the first
X * tick to make sure we get an accurate link state at the
X * second tick.
X */
- hp->sw_csconfig = happy_meal_tcvr_read(hp, tregs, DP83840_CSCONFIG);
- printk("%s: CSCONFIG [%04x], disabling transceiver\n", hp->dev->name,
- hp->sw_csconfig);
+ hp->sw_csconfig = happy_meal_tcvr_read(hp, tregs,
+ DP83840_CSCONFIG);
X hp->sw_csconfig &= ~(CSCONFIG_TCVDISAB);
- happy_meal_tcvr_write(hp, tregs, DP83840_CSCONFIG, hp->sw_csconfig);
+ happy_meal_tcvr_write(hp, tregs, DP83840_CSCONFIG,
+ hp->sw_csconfig);
X
X hp->timer_state = ltrywait;
- } else {
- hp->timer_state = arbwait;
X }
X
X hp->timer_ticks = 0;
@@ -1220,6 +1251,9 @@
X add_timer(&hp->happy_timer);
X }
X
+#define CRC_POLYNOMIAL_BE 0x04c11db7UL /* Ethernet CRC, big endian */
+#define CRC_POLYNOMIAL_LE 0xedb88320UL /* Ethernet CRC, little endian */
+
X static int happy_meal_init(struct happy_meal *hp, int from_irq)
X {
X struct hmeal_gregs *gregs = hp->gregs;
@@ -1227,9 +1261,12 @@
X struct hmeal_erxregs *erxregs = hp->erxregs;
X struct hmeal_bigmacregs *bregs = hp->bigmacregs;
X struct hmeal_tcvregs *tregs = hp->tcvregs;
- unsigned long regtmp;
+ unsigned long regtmp, rxcfg;
X unsigned char *e = &hp->dev->dev_addr[0];
X
+ /* If auto-negotiation timer is running, kill it. */
+ del_timer(&hp->happy_timer);
+
X HMD(("happy_meal_init: happy_flags[%08x] ",
X hp->happy_flags));
X if(!(hp->happy_flags & HFLAG_INIT)) {
@@ -1322,12 +1359,54 @@
X hme_write32(hp, &bregs->mac_addr1, ((e[2] << 8) | e[3]));
X hme_write32(hp, &bregs->mac_addr0, ((e[0] << 8) | e[1]));
X
- /* Ick, figure out how to properly program the hash table later... */
X HMD(("htable, "));
- hme_write32(hp, &bregs->htable3, 0);
- hme_write32(hp, &bregs->htable2, 0);
- hme_write32(hp, &bregs->htable1, 0);
- hme_write32(hp, &bregs->htable0, 0);
+ if((hp->dev->flags & IFF_ALLMULTI) ||
+ (hp->dev->mc_count > 64)) {
+ hme_write32(hp, &bregs->htable0, 0xffff);
+ hme_write32(hp, &bregs->htable1, 0xffff);
+ hme_write32(hp, &bregs->htable2, 0xffff);
+ hme_write32(hp, &bregs->htable3, 0xffff);
+ } else if((hp->dev->flags & IFF_PROMISC) == 0) {
+ u16 hash_table[4];
+ struct dev_mc_list *dmi = hp->dev->mc_list;
+ char *addrs;
+ int i, j, bit, byte;
+ u32 crc, poly = CRC_POLYNOMIAL_LE;
+
+ for(i = 0; i < 4; i++)
+ hash_table[i] = 0;
+
+ for(i = 0; i < hp->dev->mc_count; i++) {
+ addrs = dmi->dmi_addr;
+ dmi = dmi->next;
+
+ if(!(*addrs & 1))
+ continue;
+
+ crc = 0xffffffffU;
+ for(byte = 0; byte < 6; byte++) {
+ for(bit = *addrs++, j = 0; j < 8; j++, bit >>= 1) {
+ int test;
+
+ test = ((bit ^ crc) & 0x01);
+ crc >>= 1;
+ if(test)
+ crc = crc ^ poly;
+ }
+ }
+ crc >>= 26;
+ hash_table[crc >> 4] |= 1 << (crc & 0xf);
+ }
+ hme_write32(hp, &bregs->htable0, hash_table[0]);
+ hme_write32(hp, &bregs->htable1, hash_table[1]);
+ hme_write32(hp, &bregs->htable2, hash_table[2]);
+ hme_write32(hp, &bregs->htable3, hash_table[3]);
+ } else {
+ hme_write32(hp, &bregs->htable3, 0);
+ hme_write32(hp, &bregs->htable2, 0);
+ hme_write32(hp, &bregs->htable1, 0);
+ hme_write32(hp, &bregs->htable0, 0);
+ }
X
X /* Set the RX and TX ring ptrs. */
X HMD(("ring ptrs rxr[%08x] txr[%08x]\n",
@@ -1343,9 +1422,22 @@
X hme_read32(hp, &gregs->cfg)));
X
X #ifdef __sparc_v9__
+ /* XXX Can sun4d do these too? */
X if(hp->happy_bursts & DMA_BURST64) {
+ u32 gcfg = GREG_CFG_BURST64;
+
+ /* I have no idea if I should set the extended
+ * transfer mode bit for Cheerio, so for now I
+ * do not. -DaveM
+ */
+ if((hp->happy_flags & HFLAG_PCI) == 0) {
+ mmu_set_sbus64(hp->happy_sbus_dev,
+ hp->happy_bursts);
+ gcfg |= GREG_CFG_64BIT;
+ }
+
X HMD(("64>"));
- hme_write32(hp, &gregs->cfg, GREG_CFG_BURST64);
+ hme_write32(hp, &gregs->cfg, gcfg);
X } else
X #endif
X if(hp->happy_bursts & DMA_BURST32) {
@@ -1396,7 +1488,10 @@
X /* Enable Big Mac hash table filter. */
X HMD(("happy_meal_init: enable hash rx_cfg_old[%08x], ",
X hme_read32(hp, &bregs->rx_cfg)));
- hme_write32(hp, &bregs->rx_cfg, BIGMAC_RXCFG_HENABLE);
+ rxcfg = BIGMAC_RXCFG_HENABLE;
+ if(hp->dev->flags & IFF_PROMISC)
+ rxcfg |= BIGMAC_RXCFG_PMISC;
+ hme_write32(hp, &bregs->rx_cfg, rxcfg);
X
X /* Let the bits settle in the chip. */
X udelay(10);
@@ -1433,7 +1528,7 @@
X hme_read32(hp, &bregs->rx_cfg) | BIGMAC_RXCFG_ENABLE);
X
X /* Get the autonegotiation started, and the watch timer ticking. */
- happy_meal_begin_auto_negotiation(hp, tregs);
+ happy_meal_begin_auto_negotiation(hp, tregs, NULL);
X
X /* Success. */
X return 0;
@@ -1505,7 +1600,7 @@
X
X /* Only print messages for non-counter related interrupts. */
X if(status & (GREG_STAT_RFIFOVF | GREG_STAT_STSTERR | GREG_STAT_TFIFO_UND |
- GREG_STAT_MAXPKTERR | GREG_STAT_NORXD | GREG_STAT_RXERR |
+ GREG_STAT_MAXPKTERR | GREG_STAT_RXERR |
X GREG_STAT_RXPERR | GREG_STAT_RXTERR | GREG_STAT_EOPERR |
X GREG_STAT_MIFIRQ | GREG_STAT_TXEACK | GREG_STAT_TXLERR |
X GREG_STAT_TXPERR | GREG_STAT_TXTERR | GREG_STAT_SLVERR |
@@ -1541,13 +1636,14 @@
X }
X
X if(status & GREG_STAT_NORXD) {
- /* AIEEE, out of receive descriptors. Check out our drop
- * processing in happy_meal_rx to see how we try very hard
- * to avoid this situation.
+ /* This is harmless, it just means the system is
+ * quite loaded and the incomming packet rate was
+ * faster than the interrupt handler could keep up
+ * with.
X */
- printk("%s: Happy Meal out of receive descriptors, aieee!\n",
+ printk(KERN_INFO "%s: Happy Meal out of receive "
+ "descriptors, packet dropped.\n",
X hp->dev->name);
- reset = 1;
X }
X
X if(status & (GREG_STAT_RXERR|GREG_STAT_RXPERR|GREG_STAT_RXTERR)) {
@@ -1662,13 +1758,6 @@
X hp->tx_skbs[elem] = NULL;
X hp->net_stats.tx_bytes+=skb->len;
X
-#ifdef NEED_DMA_SYNCHRONIZATION
-#ifdef CONFIG_PCI
- if(!(hp->happy_flags & HFLAG_PCI))
-#endif
- mmu_sync_dma(kva_to_hva(hp, skb->data),
- skb->len, hp->happy_sbus_dev->my_bus);
-#endif
X dev_kfree_skb(skb);
X
X hp->net_stats.tx_packets++;
@@ -1797,7 +1886,8 @@
X struct sk_buff *new_skb;
X
X /* Now refill the entry, if we can. */
- new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC);
+ new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE,
+ (GFP_DMA|GFP_ATOMIC));
X if(!new_skb) {
X drops++;
X goto drop_it;
@@ -1814,7 +1904,7 @@
X /* Trim the original skb for the netif. */
X skb_trim(skb, len);
X } else {
- struct sk_buff *copy_skb = dev_alloc_skb(len+2);
+ struct sk_buff *copy_skb = dev_alloc_skb(len + 2);
X
X if(!copy_skb) {
X drops++;
@@ -1908,7 +1998,8 @@
X struct sk_buff *new_skb;
X
X /* Now refill the entry, if we can. */
- new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC);
+ new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE,
+ (GFP_DMA|GFP_ATOMIC));
X if(!new_skb) {
X drops++;
X goto drop_it;
@@ -1925,7 +2016,7 @@
X /* Trim the original skb for the netif. */
X skb_trim(skb, len);
X } else {
- struct sk_buff *copy_skb = dev_alloc_skb(len+2);
+ struct sk_buff *copy_skb = dev_alloc_skb(len + 2);
X
X if(!copy_skb) {
X drops++;
@@ -2083,7 +2174,8 @@
X struct sk_buff *new_skb;
X
X /* Now refill the entry, if we can. */
- new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE, GFP_ATOMIC);
+ new_skb = happy_meal_alloc_skb(RX_BUF_ALLOC_SIZE,
+ (GFP_DMA | GFP_ATOMIC));
X if(!new_skb) {
X drops++;
X goto drop_it;
@@ -2103,7 +2195,7 @@
X /* Trim the original skb for the netif. */
X skb_trim(skb, len);
X } else {
- struct sk_buff *copy_skb = dev_alloc_skb(len+2);
+ struct sk_buff *copy_skb = dev_alloc_skb(len + 2);
X
X if(!copy_skb) {
X drops++;
@@ -2328,12 +2420,39 @@
X }
X #endif
X
+static void quattro_sbus_interrupt(int irq, void *cookie, struct pt_regs *ptregs)
+{
+ struct quattro *qp = (struct quattro *)cookie;
+ int i;
+
+ for(i = 0; i < 4; i++) {
+ struct device *hdev = qp->happy_meals[i];
+ struct happy_meal *hp = (struct happy_meal *) hdev->priv;
+ volatile u32 *sreg = qp->irq_status[i];
+
+ if(sreg &&
+ (hme_read32(hp, sreg) & (GREG_STAT_ERRORS |
+ GREG_STAT_MIFIRQ |
+ GREG_STAT_TXALL |
+ GREG_STAT_RXTOHOST)) != 0)
+ qp->handler(irq, hdev, ptregs);
+ }
+}
+
X static int happy_meal_open(struct device *dev)
X {
X struct happy_meal *hp = (struct happy_meal *) dev->priv;
X int res;
X
X HMD(("happy_meal_open: "));
+
+ /* On SBUS Quattro QFE cards, all hme interrupts are concentrated
+ * into a single source which we register handling at probe time.
+ */
+ if((hp->happy_flags & (HFLAG_QUATTRO|HFLAG_PCI)) == HFLAG_QUATTRO) {
+ hp->qfe_parent->irq_status[hp->qfe_ent] = &hp->gregs->stat;
+ goto after_request_irq;
+ }
X #ifndef __sparc_v9__
X if(sparc_cpu_model == sun4c) {
X if(request_irq(dev->irq, &sun4c_happy_meal_interrupt,
@@ -2370,8 +2489,8 @@
X __irq_itoa(dev->irq));
X return -EAGAIN;
X }
- HMD(("Init happy timer\n"));
- init_timer(&hp->happy_timer);
+
+after_request_irq:
X HMD(("to happy_meal_init\n"));
X res = happy_meal_init(hp, 0);
X if(!res) {
@@ -2390,7 +2509,17 @@
X /* If auto-negotiation timer is running, kill it. */
X del_timer(&hp->happy_timer);
X
- free_irq(dev->irq, (void *)dev);
+ /* On Quattro QFE cards, all hme interrupts are concentrated
+ * into a single source which we register handling at probe
+ * time and never unregister.
+ */
+ if((hp->happy_flags & (HFLAG_QUATTRO|HFLAG_PCI)) != HFLAG_QUATTRO) {
+ free_irq(dev->irq, (void *)dev);
+ } else {
+ /* Zap the status register pointer. */
+ hp->qfe_parent->irq_status[hp->qfe_ent] = NULL;
+ }
+
X MOD_DEC_USE_COUNT;
X return 0;
X }
@@ -2429,10 +2558,23 @@
X tx_add_log(hp, TXLOG_ACTION_TXMIT|TXLOG_ACTION_NBUFS, 0);
X return 1;
X }
+#ifdef __sparc_v9__
+ if ((unsigned long)(skb->data + skb->len) >= MAX_DMA_ADDRESS) {
+ struct sk_buff *new_skb = skb_copy(skb, GFP_DMA | GFP_ATOMIC);
+ if (!new_skb)
+ return 1;
+ dev_kfree_skb(skb);
+ skb = new_skb;
+ }
+#endif
X len = skb->len;
X entry = hp->tx_new;
X
X SXD(("SX<l[%d]e[%d]>", len, entry));
+#ifdef NEED_DMA_SYNCHRONIZATION
+ mmu_sync_dma(kva_to_hva(hp, skb->data),
+ skb->len, hp->happy_sbus_dev->my_bus);
+#endif
X hp->tx_skbs[entry] = skb;
X hp->happy_block->happy_meal_txd[entry].tx_addr = kva_to_hva(hp, skb->data);
X hp->happy_block->happy_meal_txd[entry].tx_flags =
@@ -2622,9 +2764,6 @@
X return &hp->net_stats;
X }
X
-#define CRC_POLYNOMIAL_BE 0x04c11db7UL /* Ethernet CRC, big endian */
-#define CRC_POLYNOMIAL_LE 0xedb88320UL /* Ethernet CRC, little endian */
-
X static void happy_meal_set_multicast(struct device *dev)
X {
X struct happy_meal *hp = (struct happy_meal *) dev->priv;
@@ -2634,10 +2773,6 @@
X int i, j, bit, byte;
X u32 crc, poly = CRC_POLYNOMIAL_LE;
X
- /* Let the transmits drain. */
- while(dev->tbusy)
- schedule();
-
X /* Lock out others. */
X set_bit(0, (void *) &dev->tbusy);
X
@@ -2686,13 +2821,262 @@
X dev->tbusy = 0;
X }
X
+/* Ethtool support... */
+static int happy_meal_ioctl(struct device *dev,
+ struct ifreq *rq, int cmd)
+{
+ struct happy_meal *hp = (struct happy_meal *) dev->priv;
+ struct ethtool_cmd *ep_user = (struct ethtool_cmd *) rq->ifr_data;
+ struct ethtool_cmd ecmd;
+
+ if(cmd != SIOCETHTOOL)
+ return -EOPNOTSUPP;
+ if(copy_from_user(&ecmd, ep_user, sizeof(ecmd)))
+ return -EFAULT;
+
+ if(ecmd.cmd == SPARC_ETH_GSET) {
+ ecmd.supported =
+ (SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full |
+ SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full |
+ SUPPORTED_Autoneg | SUPPORTED_TP | SUPPORTED_MII);
+
+ /* XXX hardcoded stuff for now */
+ ecmd.port = PORT_TP; /* XXX no MII support */
+ ecmd.transceiver = XCVR_INTERNAL; /* XXX no external xcvr support */
+ ecmd.phy_address = 0; /* XXX fixed PHYAD */
+
+ /* Record PHY settings. */
+ hp->sw_bmcr = happy_meal_tcvr_read(hp, hp->tcvregs, DP83840_BMCR);
+ hp->sw_lpa = happy_meal_tcvr_read(hp, hp->tcvregs, DP83840_LPA);
+ if(hp->sw_bmcr & BMCR_ANENABLE) {
+ ecmd.autoneg = AUTONEG_ENABLE;
+ ecmd.speed =
+ (hp->sw_lpa & (LPA_100HALF | LPA_100FULL)) ?
+ SPEED_100 : SPEED_10;
+ if(ecmd.speed == SPEED_100)
+ ecmd.duplex =
+ (hp->sw_lpa & (LPA_100FULL)) ?
+ DUPLEX_FULL : DUPLEX_HALF;
+ else
+ ecmd.duplex =
+ (hp->sw_lpa & (LPA_10FULL)) ?
+ DUPLEX_FULL : DUPLEX_HALF;
+ } else {
+ ecmd.autoneg = AUTONEG_DISABLE;
+ ecmd.speed =
+ (hp->sw_bmcr & BMCR_SPEED100) ?
+ SPEED_100 : SPEED_10;
+ ecmd.duplex =
+ (hp->sw_bmcr & BMCR_FULLDPLX) ?
+ DUPLEX_FULL : DUPLEX_HALF;
+ }
+ if(copy_to_user(ep_user, &ecmd, sizeof(ecmd)))
+ return -EFAULT;
+ return 0;
+ } else if(ecmd.cmd == SPARC_ETH_SSET) {
+ if(!capable(CAP_NET_ADMIN))
+ return -EPERM;
+
+ /* Verify the settings we care about. */
+ if(ecmd.autoneg != AUTONEG_ENABLE &&
+ ecmd.autoneg != AUTONEG_DISABLE)
+ return -EINVAL;
+ if(ecmd.autoneg == AUTONEG_DISABLE &&
+ ((ecmd.speed != SPEED_100 &&
+ ecmd.speed != SPEED_10) ||
+ (ecmd.duplex != DUPLEX_HALF &&
+ ecmd.duplex != DUPLEX_FULL)))
+ return -EINVAL;
+
+ /* Ok, do it to it. */
+ del_timer(&hp->happy_timer);
+ happy_meal_begin_auto_negotiation(hp,
+ hp->tcvregs,
+ &ecmd);
+
+ return 0;
+ } else
+ return -EOPNOTSUPP;
+}
+
+void __init quattro_get_ranges(struct quattro *qp)
+{
+ int err;
+
+ err = prom_getproperty(qp->quattro_sbus_dev->prom_node,
+ "ranges",
+ (char *)&qp->ranges[0],
+ sizeof(qp->ranges));
+ if(err == 0 || err == -1) {
+ qp->nranges = 0;
+ return;
+ }
+ qp->nranges = (err / sizeof(struct linux_prom_ranges));
+}
+
+static void __init quattro_apply_ranges(struct quattro *qp, struct happy_meal *hp)
+{
+ struct linux_sbus_device *sdev = hp->happy_sbus_dev;
+ int rng;
+
+ for(rng = 0; rng < qp->nranges; rng++) {
+ struct linux_prom_ranges *rngp = &qp->ranges[rng];
+ int reg;
+
+ for(reg = 0; reg < 5; reg++) {
+ if(sdev->reg_addrs[reg].which_io ==
+ rngp->ot_child_space)
+ break;
+ }
+ if(reg == 5)
+ continue;
+
+ sdev->reg_addrs[reg].which_io = rngp->ot_parent_space;
+ sdev->reg_addrs[reg].phys_addr += rngp->ot_parent_base;
+ }
+}
+
+/* Given a happy meal sbus device, find it's quattro parent.
+ * If none exist, allocate and return a new one.
+ *
+ * Return NULL on failure.
+ */
+static struct quattro * __init quattro_sbus_find(struct linux_sbus_device *goal_sdev)
+{
+ struct linux_sbus *sbus;
+ struct linux_sbus_device *sdev;
+ struct quattro *qp;
+
+ for(qp = qfe_sbus_list; qp != NULL; qp = qp->next) {
+ for(sdev = qp->quattro_sbus_dev->child;
+ sdev != NULL;
+ sdev = sdev->next) {
+ if(sdev == goal_sdev)
+ return qp;
+ }
+ }
+ for_each_sbus(sbus) {
+ for_each_sbusdev(sdev, sbus) {
+ if(sdev->child != NULL) {
+ struct linux_sbus_device *p;
+
+ for(p = sdev->child; p != NULL; p = p->next)
+ if(p == goal_sdev)
+ goto found;
+ }
+ }
+ }
+
+ /* Cannot find quattro parent, fail. */
+ return NULL;
+
+found:
+ qp = kmalloc(sizeof(struct quattro), GFP_KERNEL);
+ if(qp != NULL) {
+ int i;
+
+ for(i = 0; i < 4; i++) {
+ qp->irq_status[i] = NULL;
+ qp->happy_meals[i] = NULL;
+ }
+ qp->handler = NULL;
+ qp->quattro_sbus_dev = sdev;
+#ifdef CONFIG_PCI
+ qp->quattro_pci_dev = NULL;
+#endif
+ qp->next = qfe_sbus_list;
+ qfe_sbus_list = qp;
+ quattro_get_ranges(qp);
+ }
+ return qp;
+}
+
+#ifdef CONFIG_PCI
+static struct quattro * __init quattro_pci_find(struct pci_dev *pdev)
+{
+ struct pci_dev *bdev = pdev->bus->self;
+ struct quattro *qp;
+
+ if (!bdev) return NULL;
+ for(qp = qfe_pci_list; qp != NULL; qp = qp->next) {
+ if(qp->quattro_pci_dev == bdev)
+ return qp;
+ }
+ qp = kmalloc(sizeof(struct quattro), GFP_KERNEL);
+ if(qp != NULL) {
+ int i;
+
+ for(i = 0; i < 4; i++) {
+ qp->irq_status[i] = NULL;
+ qp->happy_meals[i] = NULL;
+ }
+ qp->handler = NULL;
+ qp->quattro_sbus_dev = NULL;
+ qp->quattro_pci_dev = bdev;
+ qp->next = qfe_pci_list;
+ qfe_pci_list = qp;
+
+ /* No range tricks necessary on PCI. */
+ qp->nranges = 0;
+ }
+ return qp;
+}
+#endif
+
+/* After all quattro cards have been probed, we call these functions
+ * to register the IRQ handlers.
+ */
+static void __init quattro_sbus_register_irqs(void)
+{
+ struct quattro *qp;
+
+ for(qp = qfe_sbus_list; qp != NULL; qp = qp->next) {
+ int err;
+
+ /* Set the handler. */
+#ifndef __sparc_v9__
+ if(sparc_cpu_model == sun4c)
+ qp->handler = sun4c_happy_meal_interrupt;
+ else if(sparc_cpu_model == sun4c)
+ qp->handler = sun4d_happy_meal_interrupt;
+ else
+#endif
+#ifdef CONFIG_PCI
+ if(qp->quattro_pci_dev != NULL)
+ panic("QFE: PCI qfe in sbus_register_irqs!");
+ else
+#endif
+ qp->handler = happy_meal_interrupt;
+
+ err = request_irq(qp->quattro_sbus_dev->irqs[0],
+ quattro_sbus_interrupt,
+ SA_SHIRQ, "Quattro",
+ qp);
+ if(err != 0) {
+ printk("Quattro: Fatal IRQ registery error %d.\n", err);
+ panic("QFE request irq");
+ }
+ }
+}
+
X static unsigned hme_version_printed = 0;
X
-static inline int happy_meal_ether_init(struct device *dev, struct linux_sbus_device *sdev)
+static int __init happy_meal_ether_init(struct device *dev, struct linux_sbus_device *sdev, int is_qfe)
X {
+ struct quattro *qp = NULL;
X struct happy_meal *hp;
- int i;
+ int i, qfe_slot = -1;
X
+ if(is_qfe) {
+ qp = quattro_sbus_find(sdev);
+ if(qp == NULL)
+ return ENODEV;
+ for(qfe_slot = 0; qfe_slot < 4; qfe_slot++)
+ if(qp->happy_meals[qfe_slot] == NULL)
+ break;
+ if(qfe_slot == 4)
+ return ENODEV;
+ }
X if(dev == NULL) {
X dev = init_etherdev(0, sizeof(struct happy_meal));
X } else {
@@ -2703,9 +3087,16 @@
X if(hme_version_printed++ == 0)
X printk(version);
X
- printk("%s: HAPPY MEAL (SBUS) 10/100baseT Ethernet ", dev->name);
+ if(qfe_slot != -1)
+ printk("%s: Quattro HME slot %d (SBUS) 10/100baseT Ethernet",
+ dev->name, qfe_slot);
+ else
+ printk("%s: HAPPY MEAL (SBUS) 10/100baseT Ethernet ",
+ dev->name);
X
X dev->base_addr = (long) sdev;
+
+ /* XXX Check for local-mac-address property on Quattro... -DaveM */
X for(i = 0; i < 6; i++)
X printk("%2.2x%c",
X dev->dev_addr[i] = idprom->id_ethaddr[i],
@@ -2727,6 +3118,13 @@
X return ENODEV;
X }
X
+ if(qp != NULL) {
+ hp->qfe_parent = qp;
+ hp->qfe_ent = qfe_slot;
+ qp->happy_meals[qfe_slot] = dev;
+ quattro_apply_ranges(qp, hp);
+ }
+
X prom_apply_sbus_ranges(sdev->my_bus, &sdev->reg_addrs[0],
X sdev->num_registers, sdev);
X hp->gregs = sparc_alloc_io(sdev->reg_addrs[0].phys_addr, 0,
@@ -2784,6 +3182,9 @@
X else if(hp->hm_revision != 0xa0)
X hp->happy_flags = HFLAG_NOT_A0;
X
+ if(qp != NULL)
+ hp->happy_flags |= HFLAG_QUATTRO;
+
X /* Get the supported DVMA burst sizes from our Happy SBUS. */
X hp->happy_bursts = prom_getintdefault(hp->happy_sbus_dev->my_bus->prom_node,
X "burst-sizes", 0x00);
@@ -2817,6 +3218,8 @@
X */
X happy_meal_set_initial_advertisement(hp);
X
+ init_timer(&hp->happy_timer);
+
X hp->dev = dev;
X dev->open = &happy_meal_open;
X dev->stop = &happy_meal_close;
@@ -2830,6 +3233,7 @@
X dev->hard_start_xmit = &happy_meal_start_xmit;
X dev->get_stats = &happy_meal_get_stats;
X dev->set_multicast_list = &happy_meal_set_multicast;
+ dev->do_ioctl = &happy_meal_ioctl;
X
X dev->irq = sdev->irqs[0];
X dev->dma = 0;
@@ -2846,14 +3250,35 @@
X }
X
X #ifdef CONFIG_PCI
-__initfunc(int happy_meal_pci_init(struct device *dev, struct pci_dev *pdev))
+static int __init happy_meal_pci_init(struct device *dev, struct pci_dev *pdev)
X {
+ struct quattro *qp = NULL;
X struct pcidev_cookie *pcp;
X struct happy_meal *hp;
X unsigned long hpreg_base;
X unsigned short pci_command;
- int i, node;
+ int i, node, qfe_slot = -1;
+ char prom_name[64];
X
+ /* Now make sure pci_dev cookie is there. */
+ pcp = pdev->sysdata;
+ if(pcp == NULL || pcp->prom_node == -1) {
+ printk("happymeal(PCI): Some PCI device info missing\n");
+ return ENODEV;
+ }
+ node = pcp->prom_node;
+
+ prom_getstring(node, "name", prom_name, sizeof(prom_name));
+ if (!strcmp(prom_name, "SUNW,qfe") || !strcmp(prom_name, "qfe")) {
+ qp = quattro_pci_find(pdev);
+ if(qp == NULL)
+ return ENODEV;
+ for(qfe_slot = 0; qfe_slot < 4; qfe_slot++)
+ if(qp->happy_meals[qfe_slot] == NULL)
+ break;
+ if(qfe_slot == 4)
+ return ENODEV;
+ }
X if(dev == NULL) {
X dev = init_etherdev(0, sizeof(struct happy_meal));
X } else {
@@ -2864,15 +3289,28 @@
X if(hme_version_printed++ == 0)
X printk(version);
X
- printk("%s: HAPPY MEAL (PCI/CheerIO) 10/100BaseT Ethernet ", dev->name);
+ if (!qfe_slot) {
+ prom_name[0] = 0;
+ if (!strncmp(dev->name, "eth", 3)) {
+ int i = simple_strtoul(dev->name + 3, NULL, 10);
+ sprintf(prom_name, "-%d", i + 3);
+ }
+ printk("%s%s: Quattro HME (PCI/CheerIO) 10/100baseT Ethernet ", dev->name, prom_name);
+ if (qp->quattro_pci_dev->vendor == PCI_VENDOR_ID_DEC &&
+ qp->quattro_pci_dev->device == PCI_DEVICE_ID_DEC_21153)
+ printk("DEC 21153 PCI Bridge\n");
+ else
+ printk("unknown bridge %04x.%04x\n",
+ qp->quattro_pci_dev->vendor, qp->quattro_pci_dev->device);
+ }
+ if(qfe_slot != -1)
+ printk("%s: Quattro HME slot %d (PCI/CheerIO) 10/100baseT Ethernet ",
+ dev->name, qfe_slot);
+ else
+ printk("%s: HAPPY MEAL (PCI/CheerIO) 10/100BaseT Ethernet ",
+ dev->name);
X
X dev->base_addr = (long) pdev;
- for(i = 0; i < 6; i++)
- printk("%2.2x%c",
- dev->dev_addr[i] = idprom->id_ethaddr[i],
- i == 5 ? ' ' : ':');
-
- printk("\n");
X
X hp = (struct happy_meal *)dev->priv;
X memset(hp, 0, sizeof(*hp));
@@ -2880,6 +3318,12 @@
X hp->happy_sbus_dev = NULL;
X hp->happy_pci_dev = pdev;
X
+ if(qp != NULL) {
+ hp->qfe_parent = qp;
+ hp->qfe_ent = qfe_slot;
+ qp->happy_meals[qfe_slot] = dev;
+ }
+
X hpreg_base = pdev->base_address[0];
X if((hpreg_base & PCI_BASE_ADDRESS_SPACE) != PCI_BASE_ADDRESS_SPACE_MEMORY) {
X printk("happymeal(PCI): Cannot find proper PCI device base address.\n");
@@ -2887,13 +3331,14 @@
X }
X hpreg_base &= PCI_BASE_ADDRESS_MEM_MASK;
X
- /* Now make sure pci_dev cookie is there. */
- pcp = pdev->sysdata;
- if(pcp == NULL || pcp->prom_node == -1) {
- printk("happymeal(PCI): Some PCI device info missing\n");
- return ENODEV;
- }
- node = pcp->prom_node;
+ if (qfe_slot != -1 && prom_getproplen(node, "local-mac-address") == 6)
+ prom_getproperty(node, "local-mac-address", dev->dev_addr, 6);
+ else
+ memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
+ for(i = 0; i < 6; i++)
+ printk("%2.2x%c", dev->dev_addr[i], i == 5 ? ' ' : ':');
+
+ printk("\n");
X
X /* Layout registers. */
X hp->gregs = (struct hmeal_gregs *) (hpreg_base + 0x0000);
@@ -2912,6 +3357,9 @@
X else if(hp->hm_revision != 0xa0)
X hp->happy_flags = HFLAG_NOT_A0;
X
+ if(qp != NULL)
+ hp->happy_flags |= HFLAG_QUATTRO;
+
X /* And of course, indicate this is PCI. */
X hp->happy_flags |= HFLAG_PCI;
X
@@ -2937,29 +3385,32 @@
X hp->timer_ticks = 0;
X happy_meal_set_initial_advertisement(hp);
X
+ init_timer(&hp->happy_timer);
+
X hp->dev = dev;
X dev->open = &happy_meal_open;
X dev->stop = &happy_meal_close;
X dev->hard_start_xmit = &pci_happy_meal_start_xmit;
X dev->get_stats = &happy_meal_get_stats;
X dev->set_multicast_list = &happy_meal_set_multicast;
+ dev->do_ioctl = &happy_meal_ioctl;
X dev->irq = pdev->irq;
X dev->dma = 0;
X ether_setup(dev);
X
X /* If we don't do this, nothing works. */
- pcibios_read_config_word(pdev->bus->number,
- pdev->devfn,
- PCI_COMMAND, &pci_command);
+ pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
X pci_command |= PCI_COMMAND_MASTER;
- pcibios_write_config_word(pdev->bus->number,
- pdev->devfn,
- PCI_COMMAND, pci_command);
-
- /* Set the latency timer as well, PROM leaves it at zero. */
- pcibios_write_config_byte(pdev->bus->number,
- pdev->devfn,
- PCI_LATENCY_TIMER, 240);
+ pci_write_config_word(pdev, PCI_COMMAND, pci_command);
+
+ /* Set the latency timer and cache line size as well,
+ * PROM leaves it at zero.
+ */
+ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 128);
+#ifdef __sparc_v9__
+ /* NOTE: Cache line size is in 32-bit word units. */
+ pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x10);
+#endif
X
X #ifdef MODULE
X /* We are home free at this point, link us in to the happy
@@ -2973,7 +3424,7 @@
X }
X #endif
X
-__initfunc(int happy_meal_probe(struct device *dev))
+int __init happy_meal_probe(struct device *dev)
X {
X struct linux_sbus *bus;
X struct linux_sbus_device *sdev = 0;
@@ -2990,11 +3441,18 @@
X dev = NULL;
X if(!strcmp(sdev->prom_name, "SUNW,hme")) {
X cards++;
- if((v = happy_meal_ether_init(dev, sdev)))
+ if((v = happy_meal_ether_init(dev, sdev, 0)))
+ return v;
+ } else if(!strcmp(sdev->prom_name, "qfe") ||
+ !strcmp(sdev->prom_name, "SUNW,qfe")) {
+ cards++;
+ if((v = happy_meal_ether_init(dev, sdev, 1)))
X return v;
X }
X }
X }
+ if(cards != 0)
+ quattro_sbus_register_irqs();
X #ifdef CONFIG_PCI
X if(pci_present()) {
X struct pci_dev *pdev;
diff -u --recursive --new-file v2.2.3/linux/drivers/net/sunhme.h linux/drivers/net/sunhme.h
--- v2.2.3/linux/drivers/net/sunhme.h Thu Nov 19 09:56:28 1998
+++ linux/drivers/net/sunhme.h Mon Mar 15 16:11:30 1999
@@ -507,6 +507,8 @@
X asleep = 3, /* Time inactive. */
X };
X
+struct quattro;
+
X /* Happy happy, joy joy! */
X struct happy_meal {
X struct hmeal_gregs *gregs; /* Happy meal global registers */
@@ -559,6 +561,8 @@
X struct pci_dev *happy_pci_dev;
X #endif
X struct device *dev; /* Backpointer */
+ struct quattro *qfe_parent; /* For Quattro cards */
+ int qfe_ent; /* Which instance on quattro */
X struct happy_meal *next_module;
X };
X
@@ -575,10 +579,28 @@
X #define HFLAG_INIT 0x00000200 /* Init called at least once */
X #define HFLAG_LINKUP 0x00000400 /* 1 = Link is up */
X #define HFLAG_PCI 0x00000800 /* PCI based Happy Meal */
+#define HFLAG_QUATTRO 0x00001000 /* On QFE/Quattro card */
X
X #define HFLAG_20_21 (HFLAG_POLLENABLE | HFLAG_FENABLE)
X #define HFLAG_NOT_A0 (HFLAG_POLLENABLE | HFLAG_FENABLE | HFLAG_LANCE | HFLAG_RXCV)
X
+/* Support for QFE/Quattro cards. */
+struct quattro {
+ volatile u32 *irq_status[4];
+ struct device *happy_meals[4];
+ void (*handler)(int, void *, struct pt_regs *);
+
+ struct linux_sbus_device *quattro_sbus_dev;
+#ifdef CONFIG_PCI
+ struct pci_dev *quattro_pci_dev;
+#endif
+ struct quattro *next;
+
+ /* PROM ranges, if any. */
+ struct linux_prom_ranges ranges[8];
+ int nranges;
+};
+
X /* We use this to acquire receive skb's that we can DMA directly into. */
X #define ALIGNED_RX_SKB_ADDR(addr) \
X ((((unsigned long)(addr) + (64 - 1)) & ~(64 - 1)) - (unsigned long)(addr))
@@ -606,7 +628,16 @@
X return (u32) virt_to_bus((volatile void *)addr);
X else
X #endif
- return (u32) ((unsigned long)addr);
+ {
+#ifdef __sparc_v9__
+ if (((unsigned long) addr) >= MAX_DMA_ADDRESS) {
+ printk("sunhme: Bogus DMA buffer address "
+ "[%016lx]\n", ((unsigned long) addr));
+ panic("DMA address too large, tell DaveM");
+ }
+#endif
+ return sbus_dvma_addr(addr);
+ }
X }
X
X extern inline unsigned int hme_read32(struct happy_meal *hp,
diff -u --recursive --new-file v2.2.3/linux/drivers/net/sunlance.c linux/drivers/net/sunlance.c
--- v2.2.3/linux/drivers/net/sunlance.c Sat Sep 5 16:46:40 1998
+++ linux/drivers/net/sunlance.c Sun Mar 21 07:22:00 1999
@@ -1,4 +1,4 @@
-/* $Id: sunlance.c,v 1.81 1998/08/10 09:08:23 jj Exp $
+/* $Id: sunlance.c,v 1.85 1999/03/21 05:22:05 davem Exp $
X * lance.c: Linux/Sparc/Lance driver
X *
X * Written 1995, 1996 by Miguel de Icaza
@@ -56,12 +56,16 @@
X *
X * 1.11:
X * 12/27/97: Added sun4d support. (j...@sunsite.mff.cuni.cz)
+ *
+ * 1.12:
+ * 11/3/99: Fixed SMP race in lance_start_xmit found by davem.
+ * Anton Blanchard (an...@progsoc.uts.edu.au)
X */
X
X #undef DEBUG_DRIVER
X
X static char *version =
- "sunlance.c:v1.11 27/Dec/97 Miguel de Icaza (mig...@nuclecu.unam.mx)\n";
+ "sunlance.c:v1.12 11/Mar/99 Miguel de Icaza (mig...@nuclecu.unam.mx)\n";
X
X static char *lancestr = "LANCE";
X static char *lancedma = "LANCE DMA";
@@ -252,6 +256,7 @@
X struct device *dev; /* Backpointer */
X struct lance_private *next_module;
X struct linux_sbus *sbus;
+ struct timer_list multicast_timer;
X };
X
X #define TX_BUFFS_AVAIL ((lp->tx_old<=lp->tx_new)?\
@@ -326,8 +331,6 @@
X lp->rx_new = lp->tx_new = 0;
X lp->rx_old = lp->tx_old = 0;
X
- ib->mode = 0;
-
X /* Copy the ethernet address to the lance init block
X * Note that on the sparc you need to swap the ethernet address.
X * Note also we want the CPU ptr of the init_block here.
@@ -384,10 +387,6 @@
X ib->tx_ptr = leptr;
X if (ZERO)
X printk ("TX ptr: %8.8x\n", leptr);
-
- /* Clear the multicast filter */
- ib->filter [0] = 0;
- ib->filter [1] = 0;
X }
X
X static int init_restart_lance (struct lance_private *lp)
@@ -668,6 +667,7 @@
X {
X struct lance_private *lp = (struct lance_private *)dev->priv;
X volatile struct lance_regs *ll = lp->ll;
+ volatile struct lance_init_block *ib = lp->init_block;
X int status = 0;
X
X last_dev = dev;
@@ -686,6 +686,16 @@
X if (lp->ledma)
X lp->ledma->regs->dma_test = ((__u32) lp->init_block_dvma) & 0xff000000;
X
+ /* Set mode and clear multicast filter only at device open,
+ so that lance_init_ring() called at any error will not
+ forget multicast filters.
+
+ BTW it is common bug in all lance drivers! --ANK
+ */
+ ib->mode = 0;
+ ib->filter [0] = 0;
+ ib->filter [1] = 0;
+
X lance_init_ring (dev);
X load_csrs (lp);
X
@@ -742,6 +752,7 @@
X
X dev->start = 0;
X dev->tbusy = 1;
+ del_timer(&lp->multicast_timer);
X
X /* Stop the card */
X ll->rap = LE_CSR0;
@@ -791,27 +802,19 @@
X volatile unsigned long flush;
X unsigned long flags;
X int entry, skblen, len;
- int status = 0;
- static int outs;
X
- /* Transmitter timeout, serious problems */
- if (dev->tbusy) {
+ if (test_and_set_bit (0, (void *) &dev->tbusy) != 0) {
X int tickssofar = jiffies - dev->trans_start;
-
- if (tickssofar < 100) {
- status = -1;
- } else {
- printk ("%s: transmit timed out, status %04x, reset\n",
- dev->name, ll->rdp);
- lance_reset (dev);
- }
- return status;
- }
X
- /* Block a timer-based transmit from overlapping. */
- if (test_and_set_bit (0, (void *) &dev->tbusy) != 0) {
- printk ("Transmitter access conflict.\n");
- return -1;
+ if (tickssofar < 100)
+ return 1;
+
+ printk ("%s: transmit timed out, status %04x, reset\n",
+ dev->name, ll->rdp);
+ lp->stats.tx_errors++;
+ lance_reset (dev);
+
+ return 1;
X }
X
X skblen = skb->len;
@@ -820,13 +823,13 @@
X
X if (!TX_BUFFS_AVAIL) {
X restore_flags(flags);
- return -1;
+ return 1;
X }
X
X len = (skblen <= ETH_ZLEN) ? ETH_ZLEN : skblen;
-
+
X lp->stats.tx_bytes += len;
-
+
X entry = lp->tx_new & TX_RING_MOD_MASK;
X ib->btx_ring [entry].length = (-len) | 0xf000;
X ib->btx_ring [entry].misc = 0;
@@ -842,7 +845,6 @@
X ib->btx_ring [entry].tmd1_bits = (LE_T1_POK|LE_T1_OWN);
X lp->tx_new = (lp->tx_new+1) & TX_RING_MOD_MASK;
X
- outs++;
X /* Kick the lance: transmit now */
X ll->rdp = LE_C0_INEA | LE_C0_TDMD;
X dev->trans_start = jiffies;
@@ -857,7 +859,7 @@
X flush = ll->rdp;
X
X restore_flags(flags);
- return status;
+ return 0;
X }
X
X static struct net_device_stats *lance_get_stats (struct device *dev)
@@ -879,7 +881,7 @@
X u32 crc, poly = CRC_POLYNOMIAL_LE;
X
X /* set all multicast bits */
- if (dev->flags & IFF_ALLMULTI){
+ if (dev->flags & IFF_ALLMULTI) {
X ib->filter [0] = 0xffffffff;
X ib->filter [1] = 0xffffffff;
X return;
@@ -889,31 +891,29 @@
X ib->filter [1] = 0;
X
X /* Add addresses */
- for (i = 0; i < dev->mc_count; i++){
+ for (i = 0; i < dev->mc_count; i++) {
X addrs = dmi->dmi_addr;
X dmi = dmi->next;
X
X /* multicast address? */
X if (!(*addrs & 1))
X continue;
-
+
X crc = 0xffffffff;
- for (byte = 0; byte < 6; byte++)
+ for (byte = 0; byte < 6; byte++) {
X for (bit = *addrs++, j = 0; j < 8; j++, bit >>= 1) {
X int test;
X
X test = ((bit ^ crc) & 0x01);
X crc >>= 1;
X
- if (test) {
+ if (test)
X crc = crc ^ poly;
- }
X }
-
+ }
X crc = crc >> 26;
X mcast_table [crc >> 4] |= 1 << (crc & 0xf);
X }
- return;
X }
X
X static void lance_set_multicast (struct device *dev)
@@ -922,12 +922,33 @@
X volatile struct lance_init_block *ib = lp->init_block;
X volatile struct lance_regs *ll = lp->ll;
X
- while (dev->tbusy)
- schedule();
+ if (!dev->start)
+ return;
+
+ if (dev->tbusy) {
+ mod_timer(&lp->multicast_timer, jiffies + 2);
+ return;
+ }
+ /* This CANNOT be correct. Chip is running
+ and dev->tbusy may change any moment.
+ It is useless to set it.
+
+ Generally, usage of dev->tbusy in this driver is completely
+ wrong.
+
+ I protected calls to this function
+ with start_bh_atomic, so that set_multicast_list
+ and hard_start_xmit are serialized now by top level. --ANK
+
+ The same is true about a2065.
+ */
X set_bit (0, (void *) &dev->tbusy);
X
- while (lp->tx_old != lp->tx_new)
- schedule();
+ if (lp->tx_old != lp->tx_new) {
+ mod_timer(&lp->multicast_timer, jiffies + 4);
+ dev->tbusy = 0;
+ return;
+ }
X
X ll->rap = LE_CSR0;
X ll->rdp = LE_C0_STOP;
@@ -942,6 +963,7 @@
X load_csrs (lp);
X init_restart_lance (lp);
X dev->tbusy = 0;
+ mark_bh(NET_BH);
X }
X
X __initfunc(static int
@@ -1100,6 +1122,16 @@
X
X dev->dma = 0;
X ether_setup (dev);
+
+ /* We cannot sleep if the chip is busy during a
+ * multicast list update event, because such events
+ * can occur from interrupts (ex. IPv6). So we
+ * use a timer to try again later when necessary. -DaveM
+ */
+ init_timer(&lp->multicast_timer);
+ lp->multicast_timer.data = (unsigned long) dev;
+ lp->multicast_timer.function =
+ (void (*)(unsigned long)) &lance_set_multicast;
X
X #ifdef MODULE
X dev->ifindex = dev_new_index();
diff -u --recursive --new-file v2.2.3/linux/drivers/net/sunqe.c linux/drivers/net/sunqe.c
--- v2.2.3/linux/drivers/net/sunqe.c Tue Jul 28 14:21:08 1998
+++ linux/drivers/net/sunqe.c Mon Mar 15 16:11:30 1999
@@ -36,7 +36,6 @@
X #include <asm/openprom.h>
X #include <asm/oplib.h>
X #include <asm/auxio.h>
-#include <asm/system.h>
X #include <asm/pgtable.h>
X #include <asm/irq.h>
X
@@ -145,7 +144,7 @@
X for(i = 0; i < RX_RING_SIZE; i++) {
X struct sk_buff *skb;
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 31'
echo 'File patch-2.2.4 is continued in part 32'
echo 32 > _shar_seq_.tmp
#!/bin/sh
# this is part 35 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 35; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+ * Copyright (C) 1998 Derrick J. Brashear (sha...@dementia.org)
+ */
+
+#ifndef _DUMMY_H_
+#define _DUMMY_H_
+
+#include <linux/types.h>
+#include <linux/tqueue.h>
+
+#define DUMMY_OUTFILE "/usr/tmp/dummy.au"
+
+/* Our structure for each chip */
+
+struct dummy_chip {
+ struct audio_info perchip_info;
+ unsigned int playlen;
+ struct tq_struct tqueue;
+};
+
+#define DUMMY_MIN_ATEN (0)
+#define DUMMY_MAX_ATEN (31)
+#define DUMMY_MAX_DEV_ATEN (63)
+
+#define DUMMY_MON_MIN_ATEN (0)
+#define DUMMY_MON_MAX_ATEN (63)
+
+#define DUMMY_DEFAULT_PLAYGAIN (132)
+#define DUMMY_DEFAULT_RECGAIN (126)
+
+#define DUMMY_MIN_GAIN (0)
+#define DUMMY_MAX_GAIN (15)
+
+#define DUMMY_PRECISION (8) /* # of bits/sample */
+#define DUMMY_CHANNELS (1) /* channels/sample */
+
+#define DUMMY_RATE (8000) /* default sample rate */
+
+#endif
diff -u --recursive --new-file v2.2.3/linux/drivers/sbus/char/bpp.c linux/drivers/sbus/char/bpp.c
--- v2.2.3/linux/drivers/sbus/char/bpp.c Mon Dec 28 15:00:52 1998
+++ linux/drivers/sbus/char/bpp.c Mon Mar 15 16:11:30 1999
@@ -337,7 +337,7 @@
X * responds real good. The first while loop guesses an expire
X * time accounting for possible wraparound of jiffies.
X */
- while (time_after_eq(jiffies, extime) extime = jiffies + 1;
+ while (time_after_eq(jiffies, extime)) extime = jiffies + 1;
X while ( (time_before(jiffies, extime))
X && (((pins & set) != set) || ((pins & clr) != 0)) ) {
X pins = get_pins(minor);
@@ -470,13 +470,14 @@
X * mode as this is a reasonable place to clean up from messes made by
X * ioctls, or other mayhem.
X */
-static void bpp_release(struct inode *inode, struct file *f)
+static int bpp_release(struct inode *inode, struct file *f)
X {
X unsigned minor = MINOR(inode->i_rdev);
X instances[minor].opened = 0;
X
X if (instances[minor].mode != COMPATIBILITY)
X terminate(minor);
+ return 0;
X }
X
X static long read_nibble(unsigned minor, char *c, unsigned long cnt)
@@ -624,11 +625,10 @@
X return cnt - remaining;
X }
X
-static long bpp_read(struct inode *inode, struct file *f,
- char *c, unsigned long cnt)
+static ssize_t bpp_read(struct file *f, char *c, size_t cnt, loff_t * ppos)
X {
X long rc;
- const unsigned minor = MINOR(inode->i_rdev);
+ const unsigned minor = MINOR(f->f_dentry->d_inode->i_rdev);
X if (minor >= BPP_NO) return -ENODEV;
X if (!instances[minor].present) return -ENODEV;
X
@@ -694,10 +694,12 @@
X
X unsigned long remaining = cnt;
X
+
X while (remaining > 0) {
X unsigned char byte;
- c += 1;
+
X get_user_ret(byte, c, -EFAULT);
+ c += 1;
X
X rc = wait_for(BPP_GP_nAck, BPP_GP_Busy, TIME_IDLE_LIMIT, minor);
X if (rc == -1) return -ETIMEDOUT;
@@ -774,11 +776,10 @@
X * that. Otherwise, terminate and do my writing in compat mode. This
X * is the safest course as any device can handle it.
X */
-static long bpp_write(struct inode *inode, struct file *f,
- const char *c, unsigned long cnt)
+static ssize_t bpp_write(struct file *f, const char *c, size_t cnt, loff_t * ppos)
X {
X long errno = 0;
- unsigned minor = MINOR(inode->i_rdev);
+ const unsigned minor = MINOR(f->f_dentry->d_inode->i_rdev);
X if (minor >= BPP_NO) return -ENODEV;
X if (!instances[minor].present) return -ENODEV;
X
@@ -861,6 +862,11 @@
X bpp_open,
X NULL, /* flush */
X bpp_release,
+ NULL, /* fsync */
+ NULL, /* fasync */
+ NULL, /* check media change */
+ NULL, /* revalidate */
+ NULL, /* lock */
X };
X
X #if defined(__i386__)
diff -u --recursive --new-file v2.2.3/linux/drivers/sbus/char/flash.c linux/drivers/sbus/char/flash.c
--- v2.2.3/linux/drivers/sbus/char/flash.c Wed Mar 10 15:29:46 1999
+++ linux/drivers/sbus/char/flash.c Mon Mar 15 16:11:30 1999
@@ -1,4 +1,4 @@
-/* $Id: flash.c,v 1.10 1998/08/26 10:29:41 davem Exp $
+/* $Id: flash.c,v 1.11 1999/03/09 14:06:45 davem Exp $
X * flash.c: Allow mmap access to the OBP Flash, for OBP updates.
X *
X * Copyright (C) 1997 Eddie C. Dost (e...@skynet.be)
diff -u --recursive --new-file v2.2.3/linux/drivers/sbus/char/pcikbd.c linux/drivers/sbus/char/pcikbd.c
--- v2.2.3/linux/drivers/sbus/char/pcikbd.c Thu Nov 19 09:56:28 1998
+++ linux/drivers/sbus/char/pcikbd.c Mon Mar 15 16:11:30 1999
@@ -1,4 +1,4 @@
-/* $Id: pcikbd.c,v 1.24 1998/11/08 11:15:24 davem Exp $
+/* $Id: pcikbd.c,v 1.25 1999/02/08 07:01:48 ecd Exp $
X * pcikbd.c: Ultra/AX PC keyboard support.
X *
X * Copyright (C) 1997 Eddie C. Dost (e...@skynet.be)
@@ -985,9 +985,11 @@
X }
X
X queue = (struct aux_queue *) kmalloc(sizeof(*queue), GFP_KERNEL);
+ if (!queue) {
+ printk("pcimouse_init: kmalloc(aux_queue) failed.\n");
+ return -ENOMEM;
+ }
X memset(queue, 0, sizeof(*queue));
- queue->head = queue->tail = 0;
- queue->proc_list = NULL;
X
X if (request_irq(pcimouse_irq, &pcimouse_interrupt,
X SA_SHIRQ, "mouse", (void *)pcimouse_iobase)) {
diff -u --recursive --new-file v2.2.3/linux/drivers/sbus/char/sab82532.c linux/drivers/sbus/char/sab82532.c
--- v2.2.3/linux/drivers/sbus/char/sab82532.c Mon Dec 28 15:00:52 1998
+++ linux/drivers/sbus/char/sab82532.c Mon Mar 15 16:11:30 1999
@@ -1,4 +1,4 @@
-/* $Id: sab82532.c,v 1.27 1998/11/08 11:15:25 davem Exp $
+/* $Id: sab82532.c,v 1.28 1999/01/02 16:47:35 davem Exp $
X * sab82532.c: ASYNC Driver for the SIEMENS SAB82532 DUSCC.
X *
X * Copyright (C) 1997 Eddie C. Dost (e...@skynet.be)
@@ -2136,7 +2136,7 @@
X
X __initfunc(static inline void show_serial_version(void))
X {
- char *revision = "$Revision: 1.27 $";
+ char *revision = "$Revision: 1.28 $";
X char *version, *p;
X
X version = strchr(revision, ' ');
diff -u --recursive --new-file v2.2.3/linux/drivers/sbus/char/su.c linux/drivers/sbus/char/su.c
--- v2.2.3/linux/drivers/sbus/char/su.c Mon Dec 28 15:00:52 1998
+++ linux/drivers/sbus/char/su.c Mon Mar 15 16:11:30 1999
@@ -1,4 +1,4 @@
-/* $Id: su.c,v 1.16 1998/11/14 23:02:54 ecd Exp $
+/* $Id: su.c,v 1.18 1999/01/02 16:47:37 davem Exp $
X * su.c: Small serial driver for keyboard/mouse interface on sparc32/PCI
X *
X * Copyright (C) 1997 Eddie C. Dost (e...@skynet.be)
@@ -157,7 +157,7 @@
X #define WAKEUP_CHARS 256
X
X static void autoconfig(struct su_struct *info);
-static void change_speed(struct su_struct *info);
+static void change_speed(struct su_struct *info, struct termios *old);
X static void su_wait_until_sent(struct tty_struct *tty, int timeout);
X
X /*
@@ -845,7 +845,7 @@
X /*
X * and set the speed of the serial port
X */
- change_speed(info);
+ change_speed(info, 0);
X
X info->flags |= ASYNC_INITIALIZED;
X restore_flags(flags);
@@ -948,7 +948,8 @@
X * the specified baud rate for a serial port.
X */
X static void
-change_speed(struct su_struct *info)
+change_speed(struct su_struct *info,
+ struct termios *old_termios)
X {
X int quot = 0, baud;
X unsigned int cval, fcr = 0;
@@ -999,7 +1000,25 @@
X else if (baud)
X quot = info->baud_base / baud;
X }
- /* If the quotient is ever zero, default to 9600 bps */
+ /* If the quotient is zero refuse the change */
+ if (!quot && old_termios) {
+ info->tty->termios->c_cflag &= ~CBAUD;
+ info->tty->termios->c_cflag |= (old_termios->c_cflag & CBAUD);
+ baud = tty_get_baud_rate(info->tty);
+ if (!baud)
+ baud = 9600;
+ if (baud == 38400 &&
+ ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST))
+ quot = info->custom_divisor;
+ else {
+ if (baud == 134)
+ /* Special case since 134 is really 134.5 */
+ quot = (2*info->baud_base / 269);
+ else if (baud)
+ quot = info->baud_base / baud;
+ }
+ }
+ /* As a last resort, if the quotient is zero, default to 9600 bps */
X if (!quot)
X quot = info->baud_base / 9600;
X info->timeout = ((info->xmit_fifo_size*HZ*bits*quot) / info->baud_base);
@@ -1157,7 +1176,7 @@
X info->cflag |= 1200;
X break;
X }
- change_speed(info);
+ change_speed(info, 0);
X }
X
X static void
@@ -1303,6 +1322,9 @@
X if (serial_paranoia_check(info, tty->device, "su_send_char"))
X return;
X
+ if (!(info->flags & ASYNC_INITIALIZED))
+ return;
+
X info->x_char = ch;
X if (ch) {
X /* Make sure transmit interrupts are on */
@@ -1618,7 +1640,7 @@
X == RELEVANT_IFLAG(old_termios->c_iflag)))
X return;
X
- change_speed(info);
+ change_speed(info, old_termios);
X
X /* Handle transition to B0 status */
X if ((old_termios->c_cflag & CBAUD) &&
@@ -2067,13 +2089,13 @@
X *tty->termios = info->normal_termios;
X else
X *tty->termios = info->callout_termios;
- change_speed(info);
+ change_speed(info, 0);
X }
X #ifdef CONFIG_SERIAL_CONSOLE
X if (sercons.cflag && sercons.index == line) {
X tty->termios->c_cflag = sercons.cflag;
X sercons.cflag = 0;
- change_speed(info);
+ change_speed(info, 0);
X }
X #endif
X info->session = current->session;
@@ -2193,7 +2215,7 @@
X */
X __initfunc(static __inline__ void show_su_version(void))
X {
- char *revision = "$Revision: 1.16 $";
+ char *revision = "$Revision: 1.18 $";
X char *version, *p;
X
X version = strchr(revision, ' ');
@@ -2207,8 +2229,8 @@
X * This routine is called by su_init() to initialize a specific serial
X * port. It determines what type of UART chip this serial port is
X * using: 8250, 16450, 16550, 16550A. The important question is
- * whether or not this UART is a 16550A or not, since this will
- * determine whether or not we can use its FIFO features or not.
+ * whether or not this UART is a 16550A, since this will determine
+ * whether or not we can use its FIFO features.
X */
X static void
X autoconfig(struct su_struct *info)
diff -u --recursive --new-file v2.2.3/linux/drivers/sbus/char/sunkbd.c linux/drivers/sbus/char/sunkbd.c
--- v2.2.3/linux/drivers/sbus/char/sunkbd.c Mon Oct 5 13:13:40 1998
+++ linux/drivers/sbus/char/sunkbd.c Mon Mar 15 16:11:30 1999
@@ -514,8 +514,13 @@
X mark_bh(CONSOLE_BH);
X add_keyboard_randomness(keycode);
X
+ tty = ttytab? ttytab[fg_console]: NULL;
+ if (tty && (!tty->driver_data)) {
+ /* This is to workaround ugly bug in tty_io.c, which
+ does not do locking when it should */
+ tty = NULL;
+ }
X kbd = kbd_table + fg_console;
- tty = ttytab[fg_console];
X if((raw_mode = (kbd->kbdmode == VC_RAW))) {
X if (kbd_redirected == fg_console+1)
X push_kbd (keycode);
diff -u --recursive --new-file v2.2.3/linux/drivers/sbus/char/sunserial.c linux/drivers/sbus/char/sunserial.c
--- v2.2.3/linux/drivers/sbus/char/sunserial.c Sun Nov 8 14:03:01 1998
+++ linux/drivers/sbus/char/sunserial.c Mon Mar 15 16:11:30 1999
@@ -1,4 +1,4 @@
-/* $Id: sunserial.c,v 1.67 1998/10/25 03:22:46 jj Exp $
+/* $Id: sunserial.c,v 1.68 1998/12/09 18:53:51 davem Exp $
X * serial.c: Serial port driver infrastructure for the Sparc.
X *
X * Copyright (C) 1997 Eddie C. Dost (e...@skynet.be)
@@ -401,10 +401,10 @@
X return memory_start;
X
X #ifdef __sparc_v9__
- ret = prom_finddevice("/ssp-serial");
- if (ret && ret != -1) {
+ { extern int this_is_starfire;
X /* Hello, Starfire. Pleased to meet you :) */
- return memory_start;
+ if(this_is_starfire != 0)
+ return memory_start;
X }
X #endif
X
diff -u --recursive --new-file v2.2.3/linux/drivers/sbus/char/zs.c linux/drivers/sbus/char/zs.c
--- v2.2.3/linux/drivers/sbus/char/zs.c Thu Nov 19 09:56:28 1998
+++ linux/drivers/sbus/char/zs.c Mon Mar 15 16:11:30 1999
@@ -1,4 +1,4 @@
-/* $Id: zs.c,v 1.32 1998/11/08 11:15:29 davem Exp $
+/* $Id: zs.c,v 1.40 1999/02/23 15:14:45 jj Exp $
X * zs.c: Zilog serial port driver for the Sparc.
X *
X * Copyright (C) 1995 David S. Miller (da...@caip.rutgers.edu)
@@ -53,6 +53,22 @@
X #define KEYBOARD_LINE 0x2
X #define MOUSE_LINE 0x3
X
+/* On 32-bit sparcs we need to delay after register accesses
+ * to accomodate sun4 systems, but we do not need to flush writes.
+ * On 64-bit sparc we only need to flush single writes to ensure
+ * completion.
+ */
+#ifndef __sparc_v9__
+#define ZSDELAY() udelay(5)
+#define ZSDELAY_LONG() udelay(20)
+#define ZS_WSYNC(channel) do { } while(0)
+#else
+#define ZSDELAY()
+#define ZSDELAY_LONG()
+#define ZS_WSYNC(channel) \
+ ((void) *((volatile unsigned char *)(&((channel)->control))))
+#endif
+
X struct sun_zslayout **zs_chips;
X struct sun_zschannel **zs_channels;
X struct sun_zschannel *zs_mousechan;
@@ -200,9 +216,9 @@
X unsigned char retval;
X
X channel->control = reg;
- udelay(5);
+ ZSDELAY();
X retval = channel->control;
- udelay(5);
+ ZSDELAY();
X return retval;
X }
X
@@ -210,9 +226,9 @@
X unsigned char reg, unsigned char value)
X {
X channel->control = reg;
- udelay(5);
+ ZSDELAY();
X channel->control = value;
- udelay(5);
+ ZSDELAY();
X }
X
X static inline void load_zsregs(struct sun_serial *info, unsigned char *regs)
@@ -239,7 +255,7 @@
X write_zsreg(channel, R9, CHRA);
X else
X write_zsreg(channel, R9, CHRB);
- udelay(20); /* wait for some old sun4's */
+ ZSDELAY_LONG();
X write_zsreg(channel, R4, regs[R4]);
X write_zsreg(channel, R3, regs[R3] & ~RxENAB);
X write_zsreg(channel, R5, regs[R5] & ~TxENAB);
@@ -267,10 +283,16 @@
X {
X int loops = ZS_PUT_CHAR_MAX_DELAY;
X
+ /* Do not change this to use ZSDELAY as this is
+ * a timed polling loop and on sparc64 ZSDELAY
+ * is a nop. -DaveM
+ */
X while((channel->control & Tx_BUF_EMP) == 0 && --loops)
X udelay(5);
+
X channel->data = ch;
- udelay(5);
+ ZSDELAY();
+ ZS_WSYNC(channel);
X }
X
X /* Sets or clears DTR/RTS on the requested line */
@@ -420,7 +442,7 @@
X
X do {
X ch = (info->zs_channel->data) & info->parity_mask;
- udelay(5);
+ ZSDELAY();
X
X /* If this is the console keyboard, we need to handle
X * L1-A's here.
@@ -482,7 +504,7 @@
X
X /* Check if we have another character... */
X stat = info->zs_channel->control;
- udelay(5);
+ ZSDELAY();
X if (!(stat & Rx_CH_AV))
X break;
X
@@ -507,7 +529,8 @@
X if((info->xmit_cnt <= 0) || (tty != 0 && tty->stopped)) {
X /* That's peculiar... */
X info->zs_channel->control = RES_Tx_P;
- udelay(5);
+ ZSDELAY();
+ ZS_WSYNC(info->zs_channel);
X return;
X }
X
@@ -521,7 +544,8 @@
X
X if(info->xmit_cnt <= 0) {
X info->zs_channel->control = RES_Tx_P;
- udelay(5);
+ ZSDELAY();
+ ZS_WSYNC(info->zs_channel);
X }
X }
X
@@ -531,10 +555,11 @@
X
X /* Get status from Read Register 0 */
X status = info->zs_channel->control;
- udelay(5);
+ ZSDELAY();
X /* Clear status condition... */
X info->zs_channel->control = RES_EXT_INT;
- udelay(5);
+ ZSDELAY();
+ ZS_WSYNC(info->zs_channel);
X
X #if 0
X if(status & DCD) {
@@ -571,7 +596,7 @@
X stat = read_zsreg(info->zs_channel, R1);
X if (stat & (PAR_ERR | Rx_OVR | CRC_ERR)) {
X ch = info->zs_channel->data;
- udelay(5);
+ ZSDELAY();
X }
X
X if (!tty)
@@ -592,7 +617,8 @@
X queue_task(&tty->flip.tqueue, &tq_timer);
X clear:
X info->zs_channel->control = ERR_RES;
- udelay(5);
+ ZSDELAY();
+ ZS_WSYNC(info->zs_channel);
X }
X
X
@@ -772,9 +798,12 @@
X * Clear the interrupt registers.
X */
X info->zs_channel->control = ERR_RES;
- udelay(5);
+ ZSDELAY();
+ ZS_WSYNC(info->zs_channel);
+
X info->zs_channel->control = RES_H_IUS;
- udelay(5);
+ ZSDELAY();
+ ZS_WSYNC(info->zs_channel);
X
X /*
X * Now, initialize the Zilog
@@ -798,9 +827,12 @@
X * And clear the interrupt registers again for luck.
X */
X info->zs_channel->control = ERR_RES;
- udelay(5);
+ ZSDELAY();
+ ZS_WSYNC(info->zs_channel);
+
X info->zs_channel->control = RES_H_IUS;
- udelay(5);
+ ZSDELAY();
+ ZS_WSYNC(info->zs_channel);
X
X if (info->tty)
X clear_bit(TTY_IO_ERROR, &info->tty->flags);
@@ -1006,6 +1038,7 @@
X while((chan->control & Tx_BUF_EMP)==0)
X udelay(5);
X chan->data = kgdb_char;
+ ZS_WSYNC(chan);
X }
X
X char getDebugChar(void)
@@ -1013,7 +1046,7 @@
X struct sun_zschannel *chan = zs_kgdbchan;
X
X while((chan->control & Rx_CH_AV)==0)
- barrier();
+ udelay(5);
X return chan->data;
X }
X
@@ -1254,6 +1287,9 @@
X goto check_and_exit;
X }
X
+ if(new_serial.baud_base < 9600)
+ return -EINVAL;
+
X if (info->count > 1)
X return -EBUSY;
X
@@ -1291,6 +1327,7 @@
X
X cli();
X status = info->zs_channel->control;
+ ZSDELAY();
X sti();
X put_user_ret(status,value, -EFAULT);
X return 0;
@@ -1303,6 +1340,7 @@
X
X cli();
X status = info->zs_channel->control;
+ ZSDELAY();
X sti();
X result = ((info->curregs[5] & RTS) ? TIOCM_RTS : 0)
X | ((info->curregs[5] & DTR) ? TIOCM_DTR : 0)
@@ -1806,7 +1844,7 @@
X
X static void show_serial_version(void)
X {
- char *revision = "$Revision: 1.32 $";
+ char *revision = "$Revision: 1.40 $";
X char *version, *p;
X
X version = strchr(revision, ' ');
@@ -1853,8 +1891,8 @@
X int len = prom_getproperty(zsnode, "address",
X (void *) vaddr, sizeof(vaddr));
X
- if(len == -1) {
- struct linux_sbus *sbus;
+ if(len == -1 || central_bus != NULL) {
+ struct linux_sbus *sbus = NULL;
X struct linux_sbus_device *sdev = NULL;
X
X /* "address" property is not guarenteed,
@@ -1862,20 +1900,40 @@
X * anyways by our clever TLB miss handling
X * scheme, so don't fail here. -DaveM
X */
- for_each_sbus(sbus) {
- for_each_sbusdev(sdev, sbus) {
- if (sdev->prom_node == zsnode)
- goto found;
+ if (central_bus == NULL) {
+ for_each_sbus(sbus) {
+ for_each_sbusdev(sdev, sbus) {
+ if (sdev->prom_node == zsnode)
+ goto found;
+ }
X }
X }
X found:
- if (sdev == NULL)
+ if (sdev == NULL && central_bus == NULL)
X prom_halt();
- prom_apply_sbus_ranges(sbus, sdev->reg_addrs, 1, sdev);
- mapped_addr = (unsigned long)
- sparc_alloc_io(sdev->reg_addrs[0].phys_addr, 0,
- PAGE_SIZE, "Zilog Registers",
- sdev->reg_addrs[0].which_io, 0x0);
+ if (central_bus == NULL) {
+ prom_apply_sbus_ranges(sbus, sdev->reg_addrs, 1, sdev);
+ mapped_addr = (unsigned long)
+ sparc_alloc_io(sdev->reg_addrs[0].phys_addr, 0,
+ PAGE_SIZE, "Zilog Registers",
+ sdev->reg_addrs[0].which_io, 0x0);
+ } else {
+ struct linux_prom_registers zsregs[1];
+ int err;
+
+ err = prom_getproperty(zsnode, "reg",
+ (char *)&zsregs[0],
+ sizeof(zsregs));
+ if (err == -1) {
+ prom_printf("ZS: Cannot map Zilog regs.\n");
+ prom_halt();
+ }
+ prom_apply_fhc_ranges(central_bus->child, &zsregs[0], 1);
+ prom_apply_central_ranges(central_bus, &zsregs[0], 1);
+ mapped_addr = (unsigned long)
+ __va((((unsigned long)zsregs[0].which_io)<<32) |
+ (((unsigned long)zsregs[0].phys_addr)));
+ }
X } else if(len % sizeof(unsigned int)) {
X prom_printf("WHOOPS: proplen for %s "
X "was %d, need multiple of "
@@ -1954,25 +2012,27 @@
X /* Can use the prom for other machine types */
X zsnode = prom_getchild(prom_root_node);
X if (sparc_cpu_model == sun4d) {
- int board, node;
+ int node;
+ int no = 0;
X
X tmpnode = zsnode;
+ zsnode = 0;
+ bbnode = 0;
X while (tmpnode && (tmpnode = prom_searchsiblings(tmpnode, "cpu-unit"))) {
- board = prom_getintdefault (tmpnode, "board#", -1);
- if (board == (chip >> 1)) {
- node = prom_getchild(tmpnode);
- if (node && (node = prom_searchsiblings(node, "bootbus"))) {
+ bbnode = prom_getchild(tmpnode);
+ if (bbnode && (bbnode = prom_searchsiblings(bbnode, "bootbus"))) {
+ if (no == (chip >> 1)) {
X cpunode = tmpnode;
- bbnode = node;
- zsnode = prom_getchild(node);
+ zsnode = prom_getchild(bbnode);
X chipid = (chip & 1);
X break;
X }
+ no++;
X }
X tmpnode = prom_getsibling(tmpnode);
X }
X if (!tmpnode)
- panic ("get_zs: couldn't find board%d's bootbus\n", chip >> 1);
+ panic ("get_zs: couldn't find %dth bootbus\n", chip >> 1);
X } else {
X tmpnode = prom_searchsiblings(zsnode, "obio");
X if(tmpnode)
@@ -2066,13 +2126,12 @@
X
X node = prom_getchild(prom_root_node);
X if (sparc_cpu_model == sun4d) {
- node = prom_searchsiblings(node, "boards");
- if (!node)
- panic ("Cannot find out count of boards");
- else
- node = prom_getchild(node);
- while (node && (node = prom_searchsiblings(node, "bif"))) {
- NUM_SERIAL += 2;
+ int bbnode;
+
+ while (node && (node = prom_searchsiblings(node, "cpu-unit"))) {
+ bbnode = prom_getchild(node);
+ if (bbnode && prom_searchsiblings(bbnode, "bootbus"))
+ NUM_SERIAL += 2;
X node = prom_getsibling(node);
X }
X goto no_probe;
@@ -2082,7 +2141,7 @@
X int central_node;
X
X /* Central bus zilogs must be checked for first,
- * since Enterprise boxes have SBUS as well.
+ * since Enterprise boxes might have SBUSes as well.
X */
X central_node = prom_finddevice("/central");
X if(central_node != 0 && central_node != -1)
@@ -2290,13 +2349,21 @@
X /* Initialize Softinfo */
X zs_prepare();
X
+ /* Grab IRQ line before poking the chips so we do
+ * not lose any interrupts.
+ */
+ if (request_irq(zilog_irq, zs_interrupt,
+ (SA_INTERRUPT | SA_STATIC_ALLOC),
+ "Zilog8530", zs_chain))
+ panic("Unable to attach zs intr\n");
+
X /* Initialize Hardware */
X for(channel = 0; channel < NUM_CHANNELS; channel++) {
X
X /* Hardware reset each chip */
X if (!(channel & 1)) {
X write_zsreg(zs_soft[channel].zs_channel, R9, FHWRES);
- udelay(20); /* wait for some old sun4's */
+ ZSDELAY_LONG();
X dummy = read_zsreg(zs_soft[channel].zs_channel, R0);
X }
X
@@ -2462,10 +2529,6 @@
X printk(" is a Zilog8530\n");
X }
X
- if (request_irq(zilog_irq, zs_interrupt,
- (SA_INTERRUPT | SA_STATIC_ALLOC),
- "Zilog8530", zs_chain))
- panic("Unable to attach zs intr\n");
X restore_flags(flags);
X
X keyboard_zsinit(kbd_put_char);
@@ -2549,7 +2612,7 @@
X
X /* Last character is being transmitted now (hopefully). */
X info->zs_channel->control = RES_Tx_P;
- udelay(5);
+ ZSDELAY();
X
X restore_flags(flags);
X return;
diff -u --recursive --new-file v2.2.3/linux/drivers/sbus/sbus.c linux/drivers/sbus/sbus.c
--- v2.2.3/linux/drivers/sbus/sbus.c Sun Nov 8 14:03:01 1998
+++ linux/drivers/sbus/sbus.c Mon Mar 15 16:11:30 1999
@@ -1,4 +1,4 @@
-/* $Id: sbus.c,v 1.73 1998/10/07 11:35:50 jj Exp $
+/* $Id: sbus.c,v 1.76 1998/12/17 11:11:26 davem Exp $
X * sbus.c: SBus support routines.
X *
X * Copyright (C) 1995 David S. Miller (da...@caip.rutgers.edu)
@@ -71,7 +71,7 @@
X base = (unsigned long) sbus_dev->reg_addrs[0].phys_addr;
X if(base>=SUN_SBUS_BVADDR ||
X (sparc_cpu_model != sun4c &&
- sparc_cpu_model != sun4)) {
+ sparc_cpu_model != sun4)) {
X /* Ahh, we can determine the slot and offset */
X if(sparc_cpu_model == sun4u) {
X /* A bit tricky on the SYSIO. */
@@ -261,6 +261,11 @@
X if (!pcibios_present()) {
X prom_printf("Neither SBUS nor PCI found.\n");
X prom_halt();
+ } else {
+#ifdef __sparc_v9__
+ extern void firetruck_init(void);
+ firetruck_init();
+#endif
X }
X return;
X #else
@@ -296,6 +301,7 @@
X */
X sbus = SBus_chain = kmalloc(sizeof(struct linux_sbus), GFP_ATOMIC);
X sbus->next = 0;
+ sbus->prom_node = nd;
X this_sbus=nd;
X
X if(iommund && sparc_cpu_model != sun4u && sparc_cpu_model != sun4d)
@@ -319,7 +325,6 @@
X
X prom_getstring(this_sbus, "name", lbuf, sizeof(lbuf));
X lbuf[sizeof(sbus->prom_name) - 1] = 0;
- sbus->prom_node = this_sbus;
X strcpy(sbus->prom_name, lbuf);
X sbus->clock_freq = sbus_clock;
X #ifndef __sparc_v9__
@@ -406,6 +411,7 @@
X sbus->next = kmalloc(sizeof(struct linux_sbus), GFP_ATOMIC);
X sbus = sbus->next;
X sbus->next = 0;
+ sbus->prom_node = this_sbus;
X } else {
X break;
X }
@@ -415,6 +421,13 @@
X sun4d_init_sbi_irq();
X }
X
+#ifdef __sparc_v9__
+ if (sparc_cpu_model == sun4u) {
+ extern void firetruck_init(void);
+
+ firetruck_init();
+ }
+#endif
X #ifdef CONFIG_SUN_OPENPROMIO
X openprom_init();
X #endif
diff -u --recursive --new-file v2.2.3/linux/drivers/scsi/Makefile linux/drivers/scsi/Makefile
--- v2.2.3/linux/drivers/scsi/Makefile Wed Mar 10 15:29:46 1999
+++ linux/drivers/scsi/Makefile Mon Mar 15 16:11:30 1999
@@ -560,6 +560,14 @@
X endif
X endif
X
+ifeq ($(CONFIG_SCSI_FCAL),y)
+L_OBJS += fcal.o
+else
+ ifeq ($(CONFIG_SCSI_FCAL),m)
+ M_OBJS += fcal.o
+ endif
+endif
+
X ifeq ($(CONFIG_SCSI_EATA),y)
X L_OBJS += eata.o
X else
diff -u --recursive --new-file v2.2.3/linux/drivers/scsi/esp.c linux/drivers/scsi/esp.c
--- v2.2.3/linux/drivers/scsi/esp.c Thu Nov 19 09:56:28 1998
+++ linux/drivers/scsi/esp.c Mon Mar 15 16:11:31 1999
@@ -1,6 +1,6 @@
X /* esp.c: EnhancedScsiProcessor Sun SCSI driver code.
X *
- * Copyright (C) 1995 David S. Miller (da...@caip.rutgers.edu)
+ * Copyright (C) 1995, 1998 David S. Miller (da...@caip.rutgers.edu)
X */
X
X /* TODO:
@@ -162,6 +162,17 @@
X in_tgterror = 0x84, /* Target did something stupid */
X };
X
+enum {
+ /* Zero has special meaning, see skipahead[12]. */
+/*0*/ do_never,
+
+/*1*/ do_phase_determine,
+/*2*/ do_reset_bus,
+/*3*/ do_reset_complete,
+/*4*/ do_work_bus,
+/*5*/ do_intr_end
+};
+
X struct proc_dir_entry proc_scsi_esp = {
X PROC_SCSI_ESP, 3, "esp",
X S_IFDIR | S_IRUGO | S_IXUGO, 2
@@ -354,24 +365,30 @@
X };
X }
X
+#ifdef DEBUG_STATE_MACHINE
X static inline void esp_advance_phase(Scsi_Cmnd *s, int newphase)
X {
-#ifdef DEBUG_STATE_MACHINE
X ESPLOG(("<%s>", phase_string(newphase)));
-#endif
X s->SCp.sent_command = s->SCp.phase;
X s->SCp.phase = newphase;
X }
+#else
+#define esp_advance_phase(__s, __newphase) \
+ (__s)->SCp.sent_command = (__s)->SCp.phase; \
+ (__s)->SCp.phase = (__newphase);
+#endif
X
+#ifdef DEBUG_ESP_CMDS
X extern inline void esp_cmd(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs,
X unchar cmd)
X {
-#ifdef DEBUG_ESP_CMDS
X esp->espcmdlog[esp->espcmdent] = cmd;
X esp->espcmdent = (esp->espcmdent + 1) & 31;
-#endif
X eregs->esp_cmd = cmd;
X }
+#else
+#define esp_cmd(__esp, __eregs, __cmd) (__eregs)->esp_cmd = (__cmd)
+#endif
X
X /* How we use the various Linux SCSI data structures for operation.
X *
@@ -442,14 +459,23 @@
X }
X
X /* Resetting various pieces of the ESP scsi driver chipset/buses. */
-static inline void esp_reset_dma(struct Sparc_ESP *esp)
+static void esp_reset_dma(struct Sparc_ESP *esp)
X {
X struct sparc_dma_registers *dregs = esp->dregs;
- unsigned long tmp, flags;
- int can_do_burst16, can_do_burst32;
+ unsigned long flags;
+ int can_do_burst16, can_do_burst32, can_do_burst64;
+ int can_do_sbus64;
X
X can_do_burst16 = esp->bursts & DMA_BURST16;
X can_do_burst32 = esp->bursts & DMA_BURST32;
+ can_do_burst64 = 0;
+ can_do_sbus64 = 0;
+#ifdef __sparc_v9__
+ /* XXX Can sun4d do these too? */
+ can_do_burst64 = esp->bursts & DMA_BURST64;
+ can_do_sbus64 = 1;
+ mmu_set_sbus64(esp->edev, esp->bursts);
+#endif
X
X /* Punt the DVMA into a known state. */
X if(esp->dma->revision != dvmahme) {
@@ -462,14 +488,19 @@
X
X save_flags(flags); cli(); /* I really hate this chip. */
X
- dregs->cond_reg = 0x08000000; /* Reset interface to FAS */
- dregs->cond_reg = DMA_RST_SCSI; /* Reset DVMA itself */
+ dregs->cond_reg = DMA_RESET_FAS366; /* Reset interface to FAS */
+ dregs->cond_reg = DMA_RST_SCSI; /* Reset DVMA itself */
X
- tmp = (DMA_PARITY_OFF|DMA_2CLKS|DMA_SCSI_DISAB|DMA_INT_ENAB);
- tmp &= ~(DMA_ENABLE|DMA_ST_WRITE|DMA_BRST_SZ);
+ esp->prev_hme_dmacsr = (DMA_PARITY_OFF|DMA_2CLKS|DMA_SCSI_DISAB|DMA_INT_ENAB);
+ esp->prev_hme_dmacsr &= ~(DMA_ENABLE|DMA_ST_WRITE|DMA_BRST_SZ);
X
X if(can_do_burst32)
- tmp |= DMA_BRST32;
+ esp->prev_hme_dmacsr |= DMA_BRST32;
+ else if(can_do_burst64)
+ esp->prev_hme_dmacsr |= DMA_BRST64;
+
+ if(can_do_sbus64)
+ esp->prev_hme_dmacsr |= DMA_SCSI_SBUS64;
X
X /* This chip is horrible. */
X while(dregs->cond_reg & DMA_PEND_READ)
@@ -477,8 +508,14 @@
X
X dregs->cond_reg = 0;
X
- dregs->cond_reg = tmp; /* bite me */
- restore_flags(flags); /* ugh... */
+ dregs->cond_reg = esp->prev_hme_dmacsr;
+
+ /* This is necessary to avoid having the SCSI channel
+ * engine lock up on us.
+ */
+ dregs->st_addr = 0;
+
+ restore_flags(flags);
X break;
X case dvmarev2:
X /* This is the gate array found in the sun4m
@@ -512,7 +549,7 @@
X }
X
X /* Reset the ESP chip, _not_ the SCSI bus. */
-static inline void esp_reset_esp(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs)
+static void esp_reset_esp(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs)
X {
X int family_code, version, i;
X volatile int trash;
@@ -524,8 +561,8 @@
X
X /* Reload the configuration registers */
X eregs->esp_cfact = esp->cfact;
- eregs->esp_stp = 0;
- eregs->esp_soff = 0;
+ eregs->esp_stp = esp->prev_stp = 0;
+ eregs->esp_soff = esp->prev_soff = 0;
X eregs->esp_timeo = esp->neg_defp;
X
X /* This is the only point at which it is reliable to read
@@ -541,11 +578,11 @@
X esp->erev = fashme; /* Version is usually '5'. */
X else
X esp->erev = fas100a;
- printk("esp%d: FAST chip is %s (family=%d, version=%d)\n",
- esp->esp_id,
- (esp->erev == fas236) ? "fas236" :
- ((esp->erev == fas100a) ? "fas100a" :
- "fasHME"), family_code, (version & 7));
+ ESPMISC(("esp%d: FAST chip is %s (family=%d, version=%d)\n",
+ esp->esp_id,
+ (esp->erev == fas236) ? "fas236" :
+ ((esp->erev == fas100a) ? "fas100a" :
+ "fasHME"), family_code, (version & 7)));
X
X esp->min_period = ((4 * esp->ccycle) / 1000);
X } else {
@@ -565,7 +602,7 @@
X case esp236:
X /* Slow 236 */
X eregs->esp_cfg2 = esp->config2;
- eregs->esp_cfg3 = esp->config3[0];
+ eregs->esp_cfg3 = esp->prev_cfg3 = esp->config3[0];
X break;
X case fashme:
X esp->config2 |= (ESP_CONFIG2_HME32 | ESP_CONFIG2_HMEFENAB);
@@ -574,13 +611,18 @@
X /* Fast 236 or HME */
X eregs->esp_cfg2 = esp->config2;
X for(i=0; i<8; i++) {
- if(esp->erev == fashme)
- esp->config3[i] |=
- (ESP_CONFIG3_FCLOCK | ESP_CONFIG3_BIGID | ESP_CONFIG3_OBPUSH);
- else
+ if(esp->erev == fashme) {
+ unsigned char cfg3;
+
+ cfg3 = ESP_CONFIG3_FCLOCK | ESP_CONFIG3_OBPUSH;
+ if (esp->scsi_id >= 8)
+ cfg3 |= ESP_CONFIG3_IDBIT3;
+ esp->config3[i] |= cfg3;
+ } else {
X esp->config3[i] |= ESP_CONFIG3_FCLK;
+ }
X }
- eregs->esp_cfg3 = esp->config3[0];
+ eregs->esp_cfg3 = esp->prev_cfg3 = esp->config3[0];
X if(esp->erev == fashme) {
X esp->radelay = 80;
X } else {
@@ -595,7 +637,7 @@
X eregs->esp_cfg2 = esp->config2;
X for(i=0; i<8; i++)
X esp->config3[i] |= ESP_CONFIG3_FCLOCK;
- eregs->esp_cfg3 = esp->config3[0];
+ eregs->esp_cfg3 = esp->prev_cfg3 = esp->config3[0];
X esp->radelay = 32;
X break;
X default:
@@ -609,7 +651,7 @@
X }
X
X /* This places the ESP into a known state at boot time. */
-static inline void esp_bootup_reset(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs)
+static void esp_bootup_reset(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs)
X {
X volatile unchar trash;
X
@@ -654,6 +696,10 @@
X esp->edev = esp_dev;
X esp->esp_id = id;
X
+#ifdef __sparc_v9__
+ esp_host->unchecked_isa_dma = 1;
+#endif
+
X /* Put into the chain of esp chips detected */
X if(espchain) {
X elink = espchain;
@@ -877,7 +923,7 @@
X esp->ctick = ESP_TICK(ccf, esp->ccycle);
X esp->neg_defp = ESP_NEG_DEFP(fmhz, ccf);
X esp->sync_defp = SYNC_DEFP_SLOW;
- printk("SCSI ID %d Clock %d MHz CCF=%d Time-Out %d ",
+ printk("SCSI ID %d Clk %dMHz CCF=%d TOut %d ",
X esp->scsi_id, (fmhz / 1000000),
X ccf, (int) esp->neg_defp);
X
@@ -910,28 +956,28 @@
X eregs->esp_cfg2 = esp->config2;
X if((eregs->esp_cfg2 & ~(ESP_CONFIG2_MAGIC)) !=
X (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY)) {
- printk("NCR53C90(esp100) detected\n");
+ printk("NCR53C90(esp100)\n");
X esp->erev = esp100;
X } else {
X eregs->esp_cfg2 = esp->config2 = 0;
X eregs->esp_cfg3 = 0;
- eregs->esp_cfg3 = esp->config3[0] = 5;
+ eregs->esp_cfg3 = esp->prev_cfg3 = esp->config3[0] = 5;
X if(eregs->esp_cfg3 != 5) {
- printk("NCR53C90A(esp100a) detected\n");
+ printk("NCR53C90A(esp100a)\n");
X esp->erev = esp100a;
X } else {
X int target;
X
X for(target=0; target<8; target++)
X esp->config3[target] = 0;
- eregs->esp_cfg3 = 0;
+ eregs->esp_cfg3 = esp->prev_cfg3 = 0;
X if(ccf > ESP_CCF_F5) {
- printk("NCR53C9XF(espfast) detected\n");
+ printk("NCR53C9XF(espfast)\n");
X esp->erev = fast;
X eregs->esp_cfg2 = esp->config2 = 0;
X esp->sync_defp = SYNC_DEFP_FAST;
X } else {
- printk("NCR53C9x(esp236) detected\n");
+ printk("NCR53C9x(esp236)\n");
X esp->erev = esp236;
X eregs->esp_cfg2 = esp->config2 = 0;
X }
@@ -958,6 +1004,10 @@
X esp->prevmsgout = esp->prevmsgin = 0;
X esp->msgout_len = esp->msgin_len = 0;
X
+ /* Clear the one behind caches to hold unmatchable values. */
+ esp->prev_soff = esp->prev_stp = esp->prev_cfg3 = 0xff;
+ esp->prev_hme_dmacsr = 0xffffffff;
+
X /* Reset the thing before we try anything... */
X esp_bootup_reset(esp, eregs);
X
@@ -1238,6 +1288,59 @@
X return esp_host_info(esp, buffer, offset, length);
X }
X
+static void esp_get_dmabufs(struct Sparc_ESP *esp, Scsi_Cmnd *sp)
+{
+ if(sp->use_sg == 0) {
+ sp->SCp.this_residual = sp->request_bufflen;
+ sp->SCp.buffer = (struct scatterlist *) sp->request_buffer;
+ sp->SCp.buffers_residual = 0;
+ sp->SCp.have_data_in = mmu_get_scsi_one((char *)sp->SCp.buffer,
+ sp->SCp.this_residual,
+ esp->edev->my_bus);
+ sp->SCp.ptr = (char *) ((unsigned long)sp->SCp.have_data_in);
+ } else {
+ sp->SCp.buffer = (struct scatterlist *) sp->buffer;
+ sp->SCp.buffers_residual = sp->use_sg - 1;
+ sp->SCp.this_residual = sp->SCp.buffer->length;
+ mmu_get_scsi_sgl((struct mmu_sglist *) sp->SCp.buffer,
+ sp->SCp.buffers_residual,
+ esp->edev->my_bus);
+ sp->SCp.ptr = (char *) ((unsigned long)sp->SCp.buffer->dvma_address);
+ }
+}
+
+static void esp_release_dmabufs(struct Sparc_ESP *esp, Scsi_Cmnd *sp)
+{
+ if(sp->use_sg == 0)
+ mmu_release_scsi_one(sp->SCp.have_data_in,
+ sp->request_bufflen,
+ esp->edev->my_bus);
+ else
+ mmu_release_scsi_sgl((struct mmu_sglist *)
+ sp->buffer, sp->use_sg - 1,
+ esp->edev->my_bus);
+}
+
+static void esp_restore_pointers(struct Sparc_ESP *esp, Scsi_Cmnd *sp)
+{
+ struct esp_pointers *ep = &esp->data_pointers[sp->target];
+
+ sp->SCp.ptr = ep->saved_ptr;
+ sp->SCp.buffer = ep->saved_buffer;
+ sp->SCp.this_residual = ep->saved_this_residual;
+ sp->SCp.buffers_residual = ep->saved_buffers_residual;
+}
+
+static void esp_save_pointers(struct Sparc_ESP *esp, Scsi_Cmnd *sp)
+{
+ struct esp_pointers *ep = &esp->data_pointers[sp->target];
+
+ ep->saved_ptr = sp->SCp.ptr;
+ ep->saved_buffer = sp->SCp.buffer;
+ ep->saved_this_residual = sp->SCp.this_residual;
+ ep->saved_buffers_residual = sp->SCp.buffers_residual;
+}
+
X /* Some rules:
X *
X * 1) Never ever panic while something is live on the bus.
@@ -1307,7 +1410,7 @@
X esp->msgout_len = 4;
X }
X
-static inline void esp_exec_cmd(struct Sparc_ESP *esp)
+static void esp_exec_cmd(struct Sparc_ESP *esp)
X {
X struct sparc_dma_registers *dregs = esp->dregs;
X struct Sparc_ESP_regs *eregs = esp->eregs;
@@ -1318,15 +1421,18 @@
X int lun, target;
X int i;
X
- /* Hold off if we've been reselected or an IRQ is showing... */
- if(esp->disconnected_SC || DMA_IRQ_P(dregs))
+ /* Hold off if we have disconnected commands and
+ * an IRQ is showing...
+ */
+ if(esp->disconnected_SC && DMA_IRQ_P(dregs))
X return;
X
X /* Grab first member of the issue queue. */
X SCptr = esp->current_SC = remove_first_SC(&esp->issue_SC);
X
X /* Safe to panic here because current_SC is null. */
- if(!SCptr) panic("esp: esp_exec_cmd and issue queue is NULL");
+ if(!SCptr)
+ panic("esp: esp_exec_cmd and issue queue is NULL");
X
X SDptr = SCptr->device;
X lun = SCptr->lun;
@@ -1402,7 +1508,10 @@
X SDptr->sync_max_offset = 0;
X SDptr->sync_min_period = 0;
X } else {
- int toshiba_cdrom_hwbug_wkaround = 0;
+ /* Sorry, I have had way too many problems with
+ * various CDROM devices on ESP. -DaveM
+ */
+ int cdrom_hwbug_wkaround = 0;
X
X /* Never allow disconnects or synchronous transfers on
X * SparcStation1 and SparcStation1+. Allowing those
@@ -1429,8 +1538,7 @@
X */
X if(esp->erev == fashme && !SDptr->wide) {
X if(!SDptr->borken &&
- (SDptr->type != TYPE_ROM ||
- strncmp(SDptr->vendor, "TOSHIBA", 7))) {
+ SDptr->type != TYPE_ROM) {
X build_wide_nego_msg(esp, 16);
X SDptr->wide = 1;
X esp->wnip = 1;
@@ -1442,12 +1550,11 @@
X }
X
X if(!SDptr->borken) {
- if((SDptr->type == TYPE_ROM) &&
- (!strncmp(SDptr->vendor, "TOSHIBA", 7))) {
+ if((SDptr->type == TYPE_ROM)) {
X /* Nice try sucker... */
- printk(KERN_INFO "esp%d: Disabling sync for buggy "
- "Toshiba CDROM.\n", esp->esp_id);
- toshiba_cdrom_hwbug_wkaround = 1;
+ ESPMISC(("esp%d: Disabling sync for buggy "
+ "CDROM.\n", esp->esp_id));
+ cdrom_hwbug_wkaround = 1;
X build_sync_nego_msg(esp, 0, 0);
X } else {
X build_sync_nego_msg(esp, esp->sync_defp, 15);
@@ -1483,13 +1590,9 @@
X * thank you very much. ;-)
X */
X if(((SDptr->scsi_level < 3) && (SDptr->type != TYPE_TAPE)) ||
-#if 1 /* Until I find out why HME barfs with disconnects enabled... */
- toshiba_cdrom_hwbug_wkaround || SDptr->borken || esp->erev == fashme) {
-#else
- toshiba_cdrom_hwbug_wkaround || SDptr->borken) {
-#endif
- printk(KERN_INFO "esp%d: Disabling DISCONNECT for target %d "
- "lun %d\n", esp->esp_id, SCptr->target, SCptr->lun);
+ cdrom_hwbug_wkaround || SDptr->borken) {
+ ESPMISC((KERN_INFO "esp%d: Disabling DISCONNECT for target %d "
+ "lun %d\n", esp->esp_id, SCptr->target, SCptr->lun));
X SDptr->disconnect = 0;
X *cmdp++ = IDENTIFY(0, lun);
X } else {
@@ -1517,16 +1620,20 @@
X (ESP_BUSID_RESELID | ESP_BUSID_CTR32BIT);
X else
X eregs->esp_busid = (target & 7);
- eregs->esp_soff = SDptr->sync_max_offset;
- eregs->esp_stp = SDptr->sync_min_period;
- if(esp->erev > esp100a)
- eregs->esp_cfg3 = esp->config3[target];
-
+ if (esp->prev_soff != SDptr->sync_max_offset ||
+ esp->prev_stp != SDptr->sync_min_period ||
+ (esp->erev > esp100a &&
+ esp->prev_cfg3 != esp->config3[target])) {
+ eregs->esp_soff = esp->prev_soff = SDptr->sync_max_offset;
+ eregs->esp_stp = esp->prev_stp = SDptr->sync_min_period;
+ if(esp->erev > esp100a)
+ eregs->esp_cfg3 =
+ esp->prev_cfg3 =
+ esp->config3[target];
+ }
X i = (cmdp - esp->esp_command);
X
X if(esp->erev == fashme) {
- unsigned long tmp;
-
X esp_cmd(esp, eregs, ESP_CMD_FLUSH); /* Grrr! */
X
X /* Set up the DMA and HME counters */
@@ -1537,12 +1644,12 @@
X esp_cmd(esp, eregs, the_esp_command);
X
X /* Talk about touchy hardware... */
- tmp = dregs->cond_reg;
- tmp |= (DMA_SCSI_DISAB | DMA_ENABLE);
- tmp &= ~(DMA_ST_WRITE);
+ esp->prev_hme_dmacsr = ((esp->prev_hme_dmacsr |
+ (DMA_SCSI_DISAB | DMA_ENABLE)) &
+ ~(DMA_ST_WRITE));
X dregs->cnt = 16;
X dregs->st_addr = esp->esp_command_dvma;
- dregs->cond_reg = tmp;
+ dregs->cond_reg = esp->prev_hme_dmacsr;
X } else {
X /* Set up the DMA and ESP counters */
X eregs->esp_tclow = i;
@@ -1575,35 +1682,10 @@
X /* We use the scratch area. */
X ESPQUEUE(("esp_queue: target=%d lun=%d ", SCpnt->target, SCpnt->lun));
X ESPDISC(("N<%02x,%02x>", SCpnt->target, SCpnt->lun));
- if(!SCpnt->use_sg) {
- ESPQUEUE(("!use_sg\n"));
- SCpnt->SCp.this_residual = SCpnt->request_bufflen;
- SCpnt->SCp.buffer =
- (struct scatterlist *) SCpnt->request_buffer;
- SCpnt->SCp.buffers_residual = 0;
- /* Sneaky. */
- SCpnt->SCp.have_data_in = mmu_get_scsi_one((char *)SCpnt->SCp.buffer,
- SCpnt->SCp.this_residual,
- esp->edev->my_bus);
- /* XXX The casts are extremely gross, but with 64-bit kernel
- * XXX and 32-bit SBUS what am I to do? -DaveM
- */
- SCpnt->SCp.ptr = (char *)((unsigned long)SCpnt->SCp.have_data_in);
- } else {
- ESPQUEUE(("use_sg "));
-#ifdef DEBUG_ESP_SG
- printk("esp%d: sglist at %p with %d buffers\n",
- esp->esp_id, SCpnt->buffer, SCpnt->use_sg);
-#endif
- SCpnt->SCp.buffer = (struct scatterlist *) SCpnt->buffer;
- SCpnt->SCp.buffers_residual = SCpnt->use_sg - 1;
- SCpnt->SCp.this_residual = SCpnt->SCp.buffer->length;
- mmu_get_scsi_sgl((struct mmu_sglist *) SCpnt->SCp.buffer,
- SCpnt->SCp.buffers_residual,
- esp->edev->my_bus);
- /* XXX Again these casts are sick... -DaveM */
- SCpnt->SCp.ptr=(char *)((unsigned long)SCpnt->SCp.buffer->dvma_address);
- }
+
+ esp_get_dmabufs(esp, SCpnt);
+ esp_save_pointers(esp, SCpnt); /* FIXME for tag queueing */
+
X SCpnt->SCp.Status = CHECK_CONDITION;
X SCpnt->SCp.Message = 0xff;
X SCpnt->SCp.sent_command = 0;
@@ -1634,7 +1716,7 @@
X }
X
X /* Dump driver state. */
-static inline void esp_dump_cmd(Scsi_Cmnd *SCptr)
+static void esp_dump_cmd(Scsi_Cmnd *SCptr)
X {
X ESPLOG(("[tgt<%02x> lun<%02x> "
X "pphase<%s> cphase<%s>]",
@@ -1643,8 +1725,8 @@
X phase_string(SCptr->SCp.phase)));
X }
X
-static inline void esp_dump_state(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs,
- struct sparc_dma_registers *dregs)
+static void esp_dump_state(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs,
+ struct sparc_dma_registers *dregs)
X {
X Scsi_Cmnd *SCptr = esp->current_SC;
X #ifdef DEBUG_ESP_CMDS
@@ -1735,6 +1817,7 @@
X if(this == SCptr) {
X *prev = (Scsi_Cmnd *) this->host_scribble;
X this->host_scribble = NULL;
+ esp_release_dmabufs(esp, this);
X this->result = DID_ABORT << 16;
X this->done(this);
X if(don)
@@ -1749,8 +1832,11 @@
X * on the bus at this time. So, we let the SCSI code wait
X * a little bit and try again later.
X */
- if(esp->current_SC)
+ if(esp->current_SC) {
+ if(don)
+ DMA_INTSON(dregs);
X return SCSI_ABORT_BUSY;
+ }
X
X /* It's disconnected, we have to reconnect to re-establish
X * the nexus and tell the device to abort. However, we really
@@ -1759,20 +1845,70 @@
X * happens, we are really hung so reset the bus.
X */
X
+ if(don)
+ DMA_INTSON(dregs);
X return SCSI_ABORT_SNOOZE;
X }
X
+/* We've sent ESP_CMD_RS to the ESP, the interrupt had just
+ * arrived indicating the end of the SCSI bus reset. Our job
+ * is to clean out the command queues and begin re-execution
+ * of SCSI commands once more.
+ */
+static int esp_finish_reset(struct Sparc_ESP *esp,
+ struct Sparc_ESP_regs *eregs,
+ struct sparc_dma_registers *dregs)
+{
+ Scsi_Cmnd *sp = esp->current_SC;
+
+ /* Clean up currently executing command, if any. */
+ if (sp != NULL) {
+ esp_release_dmabufs(esp, sp);
+ sp->result = (DID_RESET << 16);
+ sp->scsi_done(sp);
+ esp->current_SC = NULL;
+ }
+
+ /* Clean up disconnected queue, they have been invalidated
+ * by the bus reset.
+ */
+ if (esp->disconnected_SC) {
+ while((sp = remove_first_SC(&esp->disconnected_SC)) != NULL) {
+ esp_release_dmabufs(esp, sp);
+ sp->result = (DID_RESET << 16);
+ sp->scsi_done(sp);
+ }
+ }
+
+ /* SCSI bus reset is complete. */
+ esp->resetting_bus = 0;
+
+ /* Ok, now it is safe to get commands going once more. */
+ if(esp->issue_SC)
+ esp_exec_cmd(esp);
+
+ return do_intr_end;
+}
+
+static int esp_do_resetbus(struct Sparc_ESP *esp,
+ struct Sparc_ESP_regs *eregs,
+ struct sparc_dma_registers *dregs)
+{
+ ESPLOG(("esp%d: Resetting scsi bus\n", esp->esp_id));
+ esp->resetting_bus = 1;
+ esp_cmd(esp, eregs, ESP_CMD_RS);
+
+ return do_intr_end;
+}
+
X /* Reset ESP chip, reset hanging bus, then kill active and
X * disconnected commands for targets without soft reset.
X */
X int esp_reset(Scsi_Cmnd *SCptr, unsigned int how)
X {
X struct Sparc_ESP *esp = (struct Sparc_ESP *) SCptr->host->hostdata;
- struct Sparc_ESP_regs *eregs = esp->eregs;
X
- ESPLOG(("esp%d: Resetting scsi bus\n", esp->esp_id));
- esp->resetting_bus = 1;
- esp_cmd(esp, eregs, ESP_CMD_RS);
+ (void) esp_do_resetbus(esp, esp->eregs, esp->dregs);
X return SCSI_RESET_PENDING;
X }
X
@@ -1784,25 +1920,7 @@
X if(esp->current_SC) {
X done_SC = esp->current_SC;
X esp->current_SC = NULL;
-
- /* Free dvma entry. */
- if(!done_SC->use_sg) {
- /* Sneaky. */
- mmu_release_scsi_one(done_SC->SCp.have_data_in,
- done_SC->request_bufflen,
- esp->edev->my_bus);
- } else {
-#ifdef DEBUG_ESP_SG
- printk("esp%d: unmapping sg ", esp->esp_id);
-#endif
- mmu_release_scsi_sgl((struct mmu_sglist *) done_SC->buffer,
- done_SC->use_sg - 1,
- esp->edev->my_bus);
-#ifdef DEBUG_ESP_SG
- printk("done.\n");
-#endif
- }
-
+ esp_release_dmabufs(esp, done_SC);
X done_SC->result = error;
X done_SC->scsi_done(done_SC);
X
@@ -1820,11 +1938,6 @@
X
X /* Wheee, ESP interrupt engine. */
X
-enum {
- do_phase_determine, do_reset_bus, do_reset_complete,
- do_work_bus, do_intr_end,
-};
-
X /* Forward declarations. */
X static int esp_do_phase_determine(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs,
X struct sparc_dma_registers *dregs);
@@ -1843,29 +1956,29 @@
X static int esp_do_cmdbegin(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs,
X struct sparc_dma_registers *dregs);
X
-static inline int sreg_datainp(unchar sreg)
-{
- return (sreg & ESP_STAT_PMASK) == ESP_DIP;
-}
-
-static inline int sreg_dataoutp(unchar sreg)
-{
- return (sreg & ESP_STAT_PMASK) == ESP_DOP;
-}
+#define sreg_datainp(__sreg) (((__sreg) & ESP_STAT_PMASK) == ESP_DIP)
+#define sreg_dataoutp(__sreg) (((__sreg) & ESP_STAT_PMASK) == ESP_DOP)
X
-/* Did they drop these fabs on the floor or what?!?!! */
-static inline void hme_fifo_hwbug_workaround(struct Sparc_ESP *esp,
- struct Sparc_ESP_regs *eregs)
+/* Read any bytes found in the FAS366 fifo, storing them into
+ * the ESP driver software state structure.
+ */
+static void hme_fifo_read(struct Sparc_ESP *esp,
+ struct Sparc_ESP_regs *eregs)
X {
+ unsigned long count = 0;
X unchar status = esp->sreg;
X
- /* Cannot safely frob the fifo for these following cases. */
- if(sreg_datainp(status) || sreg_dataoutp(status) ||
- (esp->current_SC && esp->current_SC->SCp.phase == in_data_done)) {
+ /* Cannot safely frob the fifo for these following cases, but
+ * we must always read the fifo when the reselect interrupt
+ * is pending.
+ */
+ if(((esp->ireg & ESP_INTR_RSEL) == 0) &&
+ (sreg_datainp(status) ||
+ sreg_dataoutp(status) ||
+ (esp->current_SC &&
+ esp->current_SC->SCp.phase == in_data_done))) {
X ESPHME(("<wkaround_skipped>"));
- return;
X } else {
- unsigned long count = 0;
X unsigned long fcnt = eregs->esp_fflags & ESP_FF_FBYTES;
X
X /* The HME stores bytes in multiples of 2 in the fifo. */
@@ -1886,9 +1999,9 @@
X } else {
X ESPHME(("no_xtra_byte"));
X }
- esp->hme_fifo_workaround_count = count;
- ESPHME(("wkarnd_cnt=%d]", (int)count));
X }
+ ESPHME(("wkarnd_cnt=%d]", (int)count));
+ esp->hme_fifo_workaround_count = count;
X }
X
X static inline void hme_fifo_push(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs,
@@ -1913,7 +2026,10 @@
X return 0;
X if(DMA_IRQ_P(dregs)) {
X /* Yes, we are able to save an interrupt. */
- esp->sreg = eregs->esp_status;
+ if (esp->erev == fashme)
+ esp->sreg2 = eregs->esp_status2;
+ esp->sreg = (eregs->esp_status & ~(ESP_STAT_INTR));
+ esp->ireg = eregs->esp_intrpt;
X if(esp->erev == fashme) {
X /* This chip is really losing. */
X ESPHME(("HME["));
@@ -1923,10 +2039,10 @@
X * Happy Meal indeed....
X */
X ESPHME(("fifo_workaround]"));
- hme_fifo_hwbug_workaround(esp, eregs);
+ if(!(esp->sreg2 & ESP_STAT2_FEMPTY) ||
+ (esp->sreg2 & ESP_STAT2_F1BYTE))
+ hme_fifo_read(esp, eregs);
X }
- esp->ireg = eregs->esp_intrpt;
- esp->sreg &= ~(ESP_STAT_INTR);
X if(!(esp->ireg & ESP_INTR_SR))
X return 0;
X else
@@ -1947,7 +2063,10 @@
X return 0;
X if(DMA_IRQ_P(dregs)) {
X /* Yes, we are able to save an interrupt. */
- esp->sreg = eregs->esp_status;
+ if (esp->erev == fashme)
+ esp->sreg2 = eregs->esp_status2;
+ esp->sreg = (eregs->esp_status & ~(ESP_STAT_INTR));
+ esp->ireg = eregs->esp_intrpt;
X if(esp->erev == fashme) {
X /* This chip is really losing. */
X ESPHME(("HME["));
@@ -1958,10 +2077,10 @@
X * Happy Meal indeed....
X */
X ESPHME(("fifo_workaround]"));
- hme_fifo_hwbug_workaround(esp, eregs);
+ if(!(esp->sreg2 & ESP_STAT2_FEMPTY) ||
+ (esp->sreg2 & ESP_STAT2_F1BYTE))
+ hme_fifo_read(esp, eregs);
X }
- esp->ireg = eregs->esp_intrpt;
- esp->sreg &= ~(ESP_STAT_INTR);
X if(!(esp->ireg & ESP_INTR_SR))
X return 0;
X else
@@ -2012,21 +2131,27 @@
X }
X }
X
-static inline void dma_invalidate(struct sparc_dma_registers *dregs, enum dvma_rev drev)
+static inline void dma_invalidate(struct Sparc_ESP *esp,
+ struct sparc_dma_registers *dregs,
+ enum dvma_rev drev)
X {
X unsigned int tmp;
X
X if(drev == dvmahme) {
- /* SMCC can bite me. */
- tmp = dregs->cond_reg;
X dregs->cond_reg = DMA_RST_SCSI;
X
- /* This would explain a lot. */
- tmp |= (DMA_PARITY_OFF|DMA_2CLKS|DMA_SCSI_DISAB);
+ esp->prev_hme_dmacsr = ((esp->prev_hme_dmacsr |
+ (DMA_PARITY_OFF | DMA_2CLKS |
+ DMA_SCSI_DISAB | DMA_INT_ENAB)) &
+ ~(DMA_ST_WRITE | DMA_ENABLE));
X
- tmp &= ~(DMA_ENABLE|DMA_ST_WRITE);
X dregs->cond_reg = 0;
- dregs->cond_reg = tmp;
+ dregs->cond_reg = esp->prev_hme_dmacsr;
+
+ /* This is necessary to avoid having the SCSI channel
+ * engine lock up on us.
+ */
+ dregs->st_addr = 0;
X } else {
X while(dregs->cond_reg & DMA_PEND_READ)
X udelay(1);
@@ -2039,10 +2164,12 @@
X }
X }
X
-static inline void dma_flashclear(struct sparc_dma_registers *dregs, enum dvma_rev drev)
+static inline void dma_flashclear(struct Sparc_ESP *esp,
+ struct sparc_dma_registers *dregs,
+ enum dvma_rev drev)
X {
X dma_drain(dregs, drev);
- dma_invalidate(dregs, drev);
+ dma_invalidate(esp, dregs, drev);
X }
X
X static inline int dma_can_transfer(Scsi_Cmnd *sp, enum dvma_rev drev)
@@ -2064,56 +2191,38 @@
X return sz;
X }
X
-/* Misc. esp helper routines. */
-static inline void esp_setcount(struct Sparc_ESP_regs *eregs, int cnt, int hme)
-{
- eregs->esp_tclow = (cnt & 0xff);
- eregs->esp_tcmed = ((cnt >> 8) & 0xff);
- if(hme) {
- eregs->fas_rlo = 0;
- eregs->fas_rhi = 0;
- }
-}
-
-static inline int esp_getcount(struct Sparc_ESP_regs *eregs)
-{
- return (((eregs->esp_tclow)&0xff) |
- (((eregs->esp_tcmed)&0xff) << 8));
-}
-
-static inline int fcount(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs)
-{
- if(esp->erev == fashme)
- return esp->hme_fifo_workaround_count;
- else
- return eregs->esp_fflags & ESP_FF_FBYTES;
-}
-
-static inline int fnzero(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs)
-{
- if(esp->erev == fashme)
- return 0;
- else
- return eregs->esp_fflags & ESP_FF_ONOTZERO;
-}
+/* Misc. esp helper macros. */
+#define esp_setcount(__eregs, __cnt, __hme) \
+ (__eregs)->esp_tclow = ((__cnt) & 0xff); \
+ (__eregs)->esp_tcmed = (((__cnt) >> 8) & 0xff); \
+ if(__hme) { \
+ (__eregs)->fas_rlo = 0; \
+ (__eregs)->fas_rhi = 0; \
+ }
+
+#define esp_getcount(__eregs) \
+ ((((__eregs)->esp_tclow)&0xff) | \
+ ((((__eregs)->esp_tcmed)&0xff) << 8))
+
+#define fcount(__esp, __eregs) \
+ (((__esp)->erev == fashme) ? \
+ (__esp)->hme_fifo_workaround_count : \
+ (__eregs)->esp_fflags & ESP_FF_FBYTES)
+
+#define fnzero(__esp, __eregs) \
+ (((__esp)->erev == fashme) ? 0 : \
+ (__eregs)->esp_fflags & ESP_FF_ONOTZERO)
X
X /* XXX speculative nops unnecessary when continuing amidst a data phase
X * XXX even on esp100!!! another case of flooding the bus with I/O reg
X * XXX writes...
X */
-static inline void esp_maybe_nop(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs)
-{
- if(esp->erev == esp100)
- esp_cmd(esp, eregs, ESP_CMD_NULL);
-}
+#define esp_maybe_nop(__esp, __eregs) \
+ if((__esp)->erev == esp100) \
+ esp_cmd((__esp), (__eregs), ESP_CMD_NULL)
X
-static inline int sreg_to_dataphase(unchar sreg)
-{
- if((sreg & ESP_STAT_PMASK) == ESP_DOP)
- return in_dataout;
- else
- return in_datain;
-}
+#define sreg_to_dataphase(__sreg) \
+ ((((__sreg) & ESP_STAT_PMASK) == ESP_DOP) ? in_dataout : in_datain)
X
X /* The ESP100 when in synchronous data phase, can mistake a long final
X * REQ pulse from the target as an extra byte, it places whatever is on
@@ -2205,10 +2314,19 @@
X lun = esp->hme_fifo_workaround_buffer[1];
X else
X lun = eregs->esp_fdata;
+
+ /* Yes, you read this correctly. We report lun of zero
+ * if we see parity error. ESP reports parity error for
+ * the lun byte, and this is the only way to hope to recover
+ * because the target is connected.
+ */
X if(esp->sreg & ESP_STAT_PERR)
X return 0;
+
+ /* Check for illegal bits being set in the lun. */
X if((lun & 0x40) || !(lun & 0x80))
X return -1;
+
X return lun & 7;
X }
X
@@ -2219,13 +2337,18 @@
X Scsi_Cmnd *sp)
X {
X Scsi_Device *dp = sp->device;
- eregs->esp_soff = dp->sync_max_offset;
- eregs->esp_stp = dp->sync_min_period;
- if(esp->erev > esp100a)
- eregs->esp_cfg3 = esp->config3[sp->target];
- if(esp->erev == fashme)
- eregs->esp_busid = (sp->target & 0xf) |
- (ESP_BUSID_RESELID | ESP_BUSID_CTR32BIT);
+
+ if(esp->prev_soff != dp->sync_max_offset ||
+ esp->prev_stp != dp->sync_min_period ||
+ (esp->erev > esp100a &&
+ esp->prev_cfg3 != esp->config3[sp->target])) {
+ eregs->esp_soff = esp->prev_soff = dp->sync_max_offset;
+ eregs->esp_stp = esp->prev_stp = dp->sync_min_period;
+ if(esp->erev > esp100a)
+ eregs->esp_cfg3 =
+ esp->prev_cfg3 =
+ esp->config3[sp->target];
+ }
X esp->current_SC = sp;
X }
X
@@ -2235,8 +2358,8 @@
X static inline void esp_reconnect(struct Sparc_ESP *esp, Scsi_Cmnd *sp)
X {
X if(!esp->disconnected_SC)
- printk("esp%d: Weird, being reselected but disconnected "
- "command queue is empty.\n", esp->esp_id);
+ ESPLOG(("esp%d: Weird, being reselected but disconnected "
+ "command queue is empty.\n", esp->esp_id));
X esp->snip = 0;
X esp->current_SC = 0;
X sp->SCp.phase = not_issued;
@@ -2244,8 +2367,8 @@
X }
X
X /* Begin message in phase. */
-static inline int esp_do_msgin(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs,
- struct sparc_dma_registers *dregs)
+static int esp_do_msgin(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs,
+ struct sparc_dma_registers *dregs)
X {
X /* Must be very careful with the fifo on the HME */
X if((esp->erev != fashme) || !(eregs->esp_status2 & ESP_STAT2_FEMPTY))
@@ -2298,8 +2421,8 @@
X * within a buffer or sub-buffer should not upset us at all no matter
X * how bad the target and/or ESP fucks things up.
X */
-static inline int esp_do_data(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs,
- struct sparc_dma_registers *dregs)
+static int esp_do_data(struct Sparc_ESP *esp, struct Sparc_ESP_regs *eregs,
+ struct sparc_dma_registers *dregs)
X {
X Scsi_Cmnd *SCptr = esp->current_SC;
X int thisphase, hmuch;
@@ -2313,19 +2436,28 @@
X ESPDATA(("hmuch<%d> ", hmuch));
X esp->current_transfer_size = hmuch;
X if(esp->erev == fashme) {
- unsigned long tmp = dregs->cond_reg;
+ unsigned long tmp = esp->prev_hme_dmacsr;
X
- /* Touchy chip, this stupid HME scsi adapter... */
+ /* Always set the ESP count registers first. */
X esp_setcount(eregs, hmuch, 1);
- esp_cmd(esp, eregs, ESP_CMD_DMA | ESP_CMD_TI);
- dregs->cnt = hmuch;
+
+ /* Get the DMA csr computed. */
X tmp |= (DMA_SCSI_DISAB | DMA_ENABLE);
- if(thisphase == in_datain)
+ if (thisphase == in_datain)
X tmp |= DMA_ST_WRITE;
X else
X tmp &= ~(DMA_ST_WRITE);
+ esp->prev_hme_dmacsr = tmp;
+
+ if (thisphase == in_datain) {
+ dregs->cnt = hmuch;
+ esp_cmd(esp, eregs, ESP_CMD_DMA | ESP_CMD_TI);
+ } else {
+ esp_cmd(esp, eregs, ESP_CMD_DMA | ESP_CMD_TI);
+ dregs->cnt = hmuch;
+ }
X dregs->st_addr = ((__u32)((unsigned long)SCptr->SCp.ptr));
- dregs->cond_reg = tmp;
+ dregs->cond_reg = esp->prev_hme_dmacsr;
X } else {
X esp_setcount(eregs, hmuch, 0);
X dma_setup(dregs, esp->dma->revision,
@@ -2338,9 +2470,9 @@
X }
X
X /* See how successful the data transfer was. */
-static inline int esp_do_data_finale(struct Sparc_ESP *esp,
- struct Sparc_ESP_regs *eregs,
- struct sparc_dma_registers *dregs)
+static int esp_do_data_finale(struct Sparc_ESP *esp,
+ struct Sparc_ESP_regs *eregs,
+ struct sparc_dma_registers *dregs)
X {
X Scsi_Cmnd *SCptr = esp->current_SC;
X int bogus_data = 0, bytes_sent = 0, fifocnt, ecount = 0;
@@ -2361,7 +2493,7 @@
X }
X dma_drain(dregs, esp->dma->revision);
X }
- dma_invalidate(dregs, esp->dma->revision);
+ dma_invalidate(esp, dregs, esp->dma->revision);
X
X /* This could happen for the above parity error case. */
X if(!(esp->ireg == ESP_INTR_BSERV)) {
@@ -2387,26 +2519,43 @@
X ecount = esp_getcount(eregs);
X bytes_sent = esp->current_transfer_size;
X
- /* Uhhh, might not want both of these conditionals to run
- * at once on HME due to the fifo problems it has. Consider
- * changing it to:
- *
- * if(!(esp->sreg & ESP_STAT_TCNT)) {
- * bytes_sent -= ecount;
- * } else if(SCptr->SCp.phase == in_dataout) {
- * bytes_sent -= fifocnt;
- * }
- *
- * But only for the HME case, leave the current code alone
- * for all other ESP revisions as we know the existing code
- * works just fine for them.
- */
X ESPDATA(("trans_sz=%d, ", bytes_sent));
X if(esp->erev == fashme) {
X if(!(esp->sreg & ESP_STAT_TCNT)) {
- bytes_sent -= esp_getcount(eregs);
- } else if(SCptr->SCp.phase == in_dataout) {
+ ecount = esp_getcount(eregs);
+ bytes_sent -= ecount;
+ }
+
+ /* Always subtract any cruft remaining in the FIFO. */
+ if(esp->prev_cfg3 & ESP_CONFIG3_EWIDE)
+ fifocnt <<= 1;
+ if(SCptr->SCp.phase == in_dataout)
X bytes_sent -= fifocnt;
+
+ /* I have an IBM disk which exhibits the following
+ * behavior during writes to it. It disconnects in
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 35'
echo 'File patch-2.2.4 is continued in part 36'
echo 36 > _shar_seq_.tmp
#!/bin/sh
# this is part 41 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 41; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+static void activate_par(struct sgivwfb_par *par);
+static void sgivwfb_encode_fix(struct fb_fix_screeninfo *fix,
+ struct fb_var_screeninfo *var);
+static int sgivwfb_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue,
+ u_int *transp, struct fb_info *info);
+static int sgivwfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+ u_int transp, struct fb_info *info);
+static void do_install_cmap(int con, struct fb_info *info);
+
+static unsigned long get_line_length(int xres_virtual, int bpp)
+{
+ return(xres_virtual * bytes_per_pixel(bpp));
+}
+
+static unsigned long bytes_per_pixel(int bpp)
+{
+ unsigned long length;
+
+ switch (bpp) {
+ case 8:
+ length = 1;
+ break;
+ case 16:
+ length = 2;
+ break;
+ case 32:
+ length = 4;
+ break;
+ default:
+ printk("sgivwfb: unsupported bpp=%d\n", bpp);
+ length = 0;
+ break;
+ }
+ return(length);
+}
+
+/*
+ * Function: dbe_TurnOffDma
+ * Parameters: (None)
+ * Description: This should turn off the monitor and dbe. This is used
+ * when switching between the serial console and the graphics
+ * console.
+ */
+
+static void dbe_TurnOffDma(void)
+{
+ int i;
+ unsigned int readVal;
+
+ // Check to see if things are already turned off:
+ // 1) Check to see if dbe is not using the internal dotclock.
+ // 2) Check to see if the xy counter in dbe is already off.
+
+ DBE_GETREG(ctrlstat, readVal);
+ if (GET_DBE_FIELD(CTRLSTAT, PCLKSEL, readVal) < 2)
+ return;
+
+ DBE_GETREG(vt_xy, readVal);
+ if (GET_DBE_FIELD(VT_XY, VT_FREEZE, readVal) == 1)
+ return;
+
+ // Otherwise, turn off dbe
+
+ DBE_GETREG(ovr_control, readVal);
+ SET_DBE_FIELD(OVR_CONTROL, OVR_DMA_ENABLE, readVal, 0);
+ DBE_SETREG(ovr_control, readVal);
+ udelay(1000);
+ DBE_GETREG(frm_control, readVal);
+ SET_DBE_FIELD(FRM_CONTROL, FRM_DMA_ENABLE, readVal, 0);
+ DBE_SETREG(frm_control, readVal);
+ udelay(1000);
+ DBE_GETREG(did_control, readVal);
+ SET_DBE_FIELD(DID_CONTROL, DID_DMA_ENABLE, readVal, 0);
+ DBE_SETREG(did_control, readVal);
+ udelay(1000);
+
+ // XXX HACK:
+ //
+ // This was necessary for GBE--we had to wait through two
+ // vertical retrace periods before the pixel DMA was
+ // turned off for sure. I've left this in for now, in
+ // case dbe needs it.
+
+ for (i = 0; i < 10000; i++)
+ {
+ DBE_GETREG(frm_inhwctrl, readVal);
+ if (GET_DBE_FIELD(FRM_INHWCTRL, FRM_DMA_ENABLE, readVal) == 0)
+ udelay(10);
+ else
+ {
+ DBE_GETREG(ovr_inhwctrl, readVal);
+ if (GET_DBE_FIELD(OVR_INHWCTRL, OVR_DMA_ENABLE, readVal) == 0)
+ udelay(10);
+ else
+ {
+ DBE_GETREG(did_inhwctrl, readVal);
+ if (GET_DBE_FIELD(DID_INHWCTRL, DID_DMA_ENABLE, readVal) == 0)
+ udelay(10);
+ else
+ break;
+ }
+ }
+ }
+}
+
+/*
+ * Set the hardware according to 'par'.
+ */
+static void activate_par(struct sgivwfb_par *par)
+{
+ int i,j, htmp, temp;
+ u32 readVal, outputVal;
+ int wholeTilesX, maxPixelsPerTileX;
+ int frmWrite1, frmWrite2, frmWrite3b;
+ dbe_timing_info_t *currentTiming; /* Current Video Timing */
+ int xpmax, ypmax; // Monitor resolution
+ int bytesPerPixel; // Bytes per pixel
+
+ currentTiming = &dbeVTimings[par->timing_num];
+ bytesPerPixel = bytes_per_pixel(par->var.bits_per_pixel);
+ xpmax = currentTiming->width;
+ ypmax = currentTiming->height;
+
+ /* dbe_InitGraphicsBase(); */
+ /* Turn on dotclock PLL */
+ DBE_SETREG(ctrlstat, 0x20000000);
+
+ dbe_TurnOffDma();
+
+ /* dbe_CalculateScreenParams(); */
+ maxPixelsPerTileX = 512/bytesPerPixel;
+ wholeTilesX = xpmax/maxPixelsPerTileX;
+ if (wholeTilesX*maxPixelsPerTileX < xpmax)
+ wholeTilesX++;
+
+ printk("sgivwfb: pixPerTile=%d wholeTilesX=%d\n",
+ maxPixelsPerTileX, wholeTilesX);
+
+ /* dbe_InitGammaMap(); */
+ udelay(10);
+
+ for (i = 0; i < 256; i++)
+ {
+ DBE_ISETREG(gmap, i, (i << 24) | (i << 16) | (i << 8));
+ }
+
+ /* dbe_TurnOn(); */
+ DBE_GETREG(vt_xy, readVal);
+ if (GET_DBE_FIELD(VT_XY, VT_FREEZE, readVal) == 1)
+ {
+ DBE_SETREG(vt_xy, 0x00000000);
+ udelay(1);
+ }
+ else
+ dbe_TurnOffDma();
+
+ /* dbe_Initdbe(); */
+ for (i = 0; i < 256; i++)
+ {
+ for (j = 0; j < 100; j++)
+ {
+ DBE_GETREG(cm_fifo, readVal);
+ if (readVal != 0x00000000)
+ break;
+ else
+ udelay(10);
+ }
+
+ // DBE_ISETREG(cmap, i, 0x00000000);
+ DBE_ISETREG(cmap, i, (i<<8)|(i<<16)|(i<<24));
+ }
+
+ /* dbe_InitFramebuffer(); */
+ frmWrite1 = 0;
+ SET_DBE_FIELD(FRM_SIZE_TILE, FRM_WIDTH_TILE, frmWrite1, wholeTilesX);
+ SET_DBE_FIELD(FRM_SIZE_TILE, FRM_RHS, frmWrite1, 0);
+
+ switch(bytesPerPixel)
+ {
+ case 1:
+ SET_DBE_FIELD(FRM_SIZE_TILE, FRM_DEPTH, frmWrite1, DBE_FRM_DEPTH_8);
+ break;
+ case 2:
+ SET_DBE_FIELD(FRM_SIZE_TILE, FRM_DEPTH, frmWrite1, DBE_FRM_DEPTH_16);
+ break;
+ case 4:
+ SET_DBE_FIELD(FRM_SIZE_TILE, FRM_DEPTH, frmWrite1, DBE_FRM_DEPTH_32);
+ break;
+ }
+
+ frmWrite2 = 0;
+ SET_DBE_FIELD(FRM_SIZE_PIXEL, FB_HEIGHT_PIX, frmWrite2, ypmax);
+
+ // Tell dbe about the framebuffer location and type
+ // XXX What format is the FRM_TILE_PTR?? 64K aligned address?
+ frmWrite3b = 0;
+ SET_DBE_FIELD(FRM_CONTROL, FRM_TILE_PTR, frmWrite3b, sgivwfb_mem_phys>>9);
+ SET_DBE_FIELD(FRM_CONTROL, FRM_DMA_ENABLE, frmWrite3b, 1);
+ SET_DBE_FIELD(FRM_CONTROL, FRM_LINEAR, frmWrite3b, 1);
+
+ /* Initialize DIDs */
+
+ outputVal = 0;
+ switch(bytesPerPixel)
+ {
+ case 1:
+ SET_DBE_FIELD(WID, TYP, outputVal, DBE_CMODE_I8);
+ break;
+ case 2:
+ SET_DBE_FIELD(WID, TYP, outputVal, DBE_CMODE_RGBA5);
+ break;
+ case 4:
+ SET_DBE_FIELD(WID, TYP, outputVal, DBE_CMODE_RGB8);
+ break;
+ }
+ SET_DBE_FIELD(WID, BUF, outputVal, DBE_BMODE_BOTH);
+
+ for (i = 0; i < 32; i++)
+ {
+ DBE_ISETREG(mode_regs, i, outputVal);
+ }
+
+ /* dbe_InitTiming(); */
+ DBE_SETREG(vt_intr01, 0xffffffff);
+ DBE_SETREG(vt_intr23, 0xffffffff);
+
+ DBE_GETREG(dotclock, readVal);
+ DBE_SETREG(dotclock, readVal & 0xffff);
+
+ DBE_SETREG(vt_xymax, 0x00000000);
+ outputVal = 0;
+ SET_DBE_FIELD(VT_VSYNC, VT_VSYNC_ON, outputVal, currentTiming->vsync_start);
+ SET_DBE_FIELD(VT_VSYNC, VT_VSYNC_OFF, outputVal, currentTiming->vsync_end);
+ DBE_SETREG(vt_vsync, outputVal);
+ outputVal = 0;
+ SET_DBE_FIELD(VT_HSYNC, VT_HSYNC_ON, outputVal, currentTiming->hsync_start);
+ SET_DBE_FIELD(VT_HSYNC, VT_HSYNC_OFF, outputVal, currentTiming->hsync_end);
+ DBE_SETREG(vt_hsync, outputVal);
+ outputVal = 0;
+ SET_DBE_FIELD(VT_VBLANK, VT_VBLANK_ON, outputVal, currentTiming->vblank_start);
+ SET_DBE_FIELD(VT_VBLANK, VT_VBLANK_OFF, outputVal, currentTiming->vblank_end);
+ DBE_SETREG(vt_vblank, outputVal);
+ outputVal = 0;
+ SET_DBE_FIELD(VT_HBLANK, VT_HBLANK_ON, outputVal, currentTiming->hblank_start);
+ SET_DBE_FIELD(VT_HBLANK, VT_HBLANK_OFF, outputVal, currentTiming->hblank_end-3);
+ DBE_SETREG(vt_hblank, outputVal);
+ outputVal = 0;
+ SET_DBE_FIELD(VT_VCMAP, VT_VCMAP_ON, outputVal, currentTiming->vblank_start);
+ SET_DBE_FIELD(VT_VCMAP, VT_VCMAP_OFF, outputVal, currentTiming->vblank_end);
+ DBE_SETREG(vt_vcmap, outputVal);
+ outputVal = 0;
+ SET_DBE_FIELD(VT_HCMAP, VT_HCMAP_ON, outputVal, currentTiming->hblank_start);
+ SET_DBE_FIELD(VT_HCMAP, VT_HCMAP_OFF, outputVal, currentTiming->hblank_end-3);
+ DBE_SETREG(vt_hcmap, outputVal);
+
+ outputVal = 0;
+ temp = currentTiming->vblank_start - currentTiming->vblank_end - 1;
+ if (temp > 0)
+ temp = -temp;
+
+ SET_DBE_FIELD(DID_START_XY, DID_STARTY, outputVal, (u32)temp);
+ if (currentTiming->hblank_end >= 20)
+ SET_DBE_FIELD(DID_START_XY, DID_STARTX, outputVal,
+ currentTiming->hblank_end - 20);
+ else
+ SET_DBE_FIELD(DID_START_XY, DID_STARTX, outputVal,
+ currentTiming->htotal - (20 - currentTiming->hblank_end));
+ DBE_SETREG(did_start_xy, outputVal);
+
+ outputVal = 0;
+ SET_DBE_FIELD(CRS_START_XY, CRS_STARTY, outputVal, (u32)(temp+1));
+ if (currentTiming->hblank_end >= DBE_CRS_MAGIC)
+ SET_DBE_FIELD(CRS_START_XY, CRS_STARTX, outputVal,
+ currentTiming->hblank_end - DBE_CRS_MAGIC);
+ else
+ SET_DBE_FIELD(CRS_START_XY, CRS_STARTX, outputVal,
+ currentTiming->htotal - (DBE_CRS_MAGIC - currentTiming->hblank_end));
+ DBE_SETREG(crs_start_xy, outputVal);
+
+ outputVal = 0;
+ SET_DBE_FIELD(VC_START_XY, VC_STARTY, outputVal, (u32)temp);
+ SET_DBE_FIELD(VC_START_XY, VC_STARTX, outputVal,
+ currentTiming->hblank_end - 4);
+ DBE_SETREG(vc_start_xy, outputVal);
+
+ DBE_SETREG(frm_size_tile, frmWrite1);
+ DBE_SETREG(frm_size_pixel, frmWrite2);
+
+ outputVal = 0;
+ SET_DBE_FIELD(DOTCLK, M, outputVal, currentTiming->pll_m-1);
+ SET_DBE_FIELD(DOTCLK, N, outputVal, currentTiming->pll_n-1);
+ SET_DBE_FIELD(DOTCLK, P, outputVal, currentTiming->pll_p);
+ SET_DBE_FIELD(DOTCLK, RUN, outputVal, 1);
+ DBE_SETREG(dotclock, outputVal);
+
+ udelay(11*1000);
+
+ DBE_SETREG(vt_vpixen, 0xffffff);
+ DBE_SETREG(vt_hpixen, 0xffffff);
+
+ outputVal = 0;
+ SET_DBE_FIELD(VT_XYMAX, VT_MAXX, outputVal, currentTiming->htotal);
+ SET_DBE_FIELD(VT_XYMAX, VT_MAXY, outputVal, currentTiming->vtotal);
+ DBE_SETREG(vt_xymax, outputVal);
+
+ outputVal = frmWrite1;
+ SET_DBE_FIELD(FRM_SIZE_TILE, FRM_FIFO_RESET, outputVal, 1);
+ DBE_SETREG(frm_size_tile, outputVal);
+ DBE_SETREG(frm_size_tile, frmWrite1);
+
+ outputVal = 0;
+ SET_DBE_FIELD(OVR_WIDTH_TILE, OVR_FIFO_RESET, outputVal, 1);
+ DBE_SETREG(ovr_width_tile, outputVal);
+ DBE_SETREG(ovr_width_tile, 0);
+
+ DBE_SETREG(frm_control, frmWrite3b);
+ DBE_SETREG(did_control, 0);
+
+ // Wait for dbe to take frame settings
+ for (i=0; i<100000; i++)
+ {
+ DBE_GETREG(frm_inhwctrl, readVal);
+ if (GET_DBE_FIELD(FRM_INHWCTRL, FRM_DMA_ENABLE, readVal) != 0)
+ break;
+ else
+ udelay(1);
+ }
+
+ if (i==100000)
+ printk("sgivwfb: timeout waiting for frame DMA enable.\n");
+
+ outputVal = 0;
+ htmp = currentTiming->hblank_end - 19;
+ if (htmp < 0)
+ htmp += currentTiming->htotal; /* allow blank to wrap around */
+ SET_DBE_FIELD(VT_HPIXEN, VT_HPIXEN_ON, outputVal, htmp);
+ SET_DBE_FIELD(VT_HPIXEN, VT_HPIXEN_OFF, outputVal,
+ ((htmp + currentTiming->width - 2) % currentTiming->htotal));
+ DBE_SETREG(vt_hpixen, outputVal);
+
+ outputVal = 0;
+ SET_DBE_FIELD(VT_VPIXEN, VT_VPIXEN_OFF, outputVal,
+ currentTiming->vblank_start);
+ SET_DBE_FIELD(VT_VPIXEN, VT_VPIXEN_ON, outputVal,
+ currentTiming->vblank_end);
+ DBE_SETREG(vt_vpixen, outputVal);
+
+ // Turn off mouse cursor
+ regs->crs_ctl = 0;
+
+ // XXX What's this section for??
+ DBE_GETREG(ctrlstat, readVal);
+ readVal &= 0x02000000;
+
+ if (readVal != 0)
+ {
+ DBE_SETREG(ctrlstat, 0x30000000);
+ }
+}
+
+static void sgivwfb_encode_fix(struct fb_fix_screeninfo *fix,
+ struct fb_var_screeninfo *var)
+{
+ memset(fix, 0, sizeof(struct fb_fix_screeninfo));
+ strcpy(fix->id, sgivwfb_name);
+ fix->smem_start = (char *) sgivwfb_mem_phys;
+ fix->smem_len = sgivwfb_mem_size;
+ fix->type = FB_TYPE_PACKED_PIXELS;
+ fix->type_aux = 0;
+ switch (var->bits_per_pixel) {
+ case 8:
+ fix->visual = FB_VISUAL_PSEUDOCOLOR;
+ break;
+ default:
+ fix->visual = FB_VISUAL_TRUECOLOR;
+ break;
+ }
+ fix->ywrapstep = ywrap;
+ fix->xpanstep = 0;
+ fix->ypanstep = ypan;
+ fix->line_length = get_line_length(var->xres_virtual, var->bits_per_pixel);
+ fix->mmio_start = (char *) DBE_REG_PHYS;
+ fix->mmio_len = DBE_REG_SIZE;
+}
+
+/*
+ * Read a single color register and split it into
+ * colors/transparent. Return != 0 for invalid regno.
+ */
+static int sgivwfb_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue,
+ u_int *transp, struct fb_info *info)
+{
+ if (regno > 255)
+ return 1;
+
+ *red = palette[regno].red << 8;
+ *green = palette[regno].green << 8;
+ *blue = palette[regno].blue << 8;
+ *transp = 0;
+ return 0;
+}
+
+/*
+ * Set a single color register. The values supplied are already
+ * rounded down to the hardware's capabilities (according to the
+ * entries in the var structure). Return != 0 for invalid regno.
+ */
+
+static int sgivwfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+ u_int transp, struct fb_info *info)
+{
+ if (regno > 255)
+ return 1;
+ red >>= 8;
+ green >>= 8;
+ blue >>= 8;
+ palette[regno].red = red;
+ palette[regno].green = green;
+ palette[regno].blue = blue;
+
+ /* wait for the color map FIFO to have a free entry */
+ while (cmap_fifo == 0)
+ cmap_fifo = regs->cm_fifo;
+
+ regs->cmap[regno] = (red << 24) | (green << 16) | (blue << 8);
+ cmap_fifo--; /* assume FIFO is filling up */
+ return 0;
+}
+
+static void do_install_cmap(int con, struct fb_info *info)
+{
+ if (con != currcon)
+ return;
+ if (fb_display[con].cmap.len)
+ fb_set_cmap(&fb_display[con].cmap, 1, sgivwfb_setcolreg, info);
+ else
+ fb_set_cmap(fb_default_cmap(1<<fb_display[con].var.bits_per_pixel), 1,
+ sgivwfb_setcolreg, info);
+}
+
+/* ---------------------------------------------------- */
+
+/*
+ * Open/Release the frame buffer device
+ */
+static int sgivwfb_open(struct fb_info *info, int user)
+{
+ /*
+ * Nothing, only a usage count for the moment
+ */
+ MOD_INC_USE_COUNT;
+ return(0);
+}
+
+static int sgivwfb_release(struct fb_info *info, int user)
+{
+ MOD_DEC_USE_COUNT;
+ return(0);
+}
+
+/*
+ * Get the Fixed Part of the Display
+ */
+static int sgivwfb_get_fix(struct fb_fix_screeninfo *fix, int con,
+ struct fb_info *info)
+{
+ struct fb_var_screeninfo *var;
+
+ if (con == -1)
+ var = &par_current.var;
+ else
+ var = &fb_display[con].var;
+ sgivwfb_encode_fix(fix, var);
+ return 0;
+}
+
+/*
+ * Get the User Defined Part of the Display. If a real par get it form there
+ */
+static int sgivwfb_get_var(struct fb_var_screeninfo *var, int con,
+ struct fb_info *info)
+{
+ if (con == -1)
+ *var = par_current.var;
+ else
+ *var = fb_display[con].var;
+ return 0;
+}
+
+/*
+ * Set the User Defined Part of the Display. Again if par use it to get
+ * real video mode.
+ */
+static int sgivwfb_set_var(struct fb_var_screeninfo *var, int con,
+ struct fb_info *info)
+{
+ int err, activate = var->activate;
+ int oldxres, oldyres, oldvxres, oldvyres, oldbpp;
+ u_long line_length;
+ u_long min_mode;
+ int req_dot;
+ int test_mode;
+
+ struct dbe_timing_info *timing;
+
+ struct display *display;
+
+ if (con >= 0)
+ display = &fb_display[con];
+ else
+ display = &disp; /* used during initialization */
+
+ /*
+ * FB_VMODE_CONUPDATE and FB_VMODE_SMOOTH_XPAN are equal!
+ * as FB_VMODE_SMOOTH_XPAN is only used internally
+ */
+
+ if (var->vmode & FB_VMODE_CONUPDATE) {
+ var->vmode |= FB_VMODE_YWRAP;
+ var->xoffset = display->var.xoffset;
+ var->yoffset = display->var.yoffset;
+ }
+
+ /* XXX FIXME - forcing var's */
+ var->xoffset = 0;
+ var->yoffset = 0;
+
+ /* Limit bpp to 8, 16, and 32 */
+ if (var->bits_per_pixel <= 8)
+ var->bits_per_pixel = 8;
+ else if (var->bits_per_pixel <= 16)
+ var->bits_per_pixel = 16;
+ else if (var->bits_per_pixel <= 32)
+ var->bits_per_pixel = 32;
+ else
+ return -EINVAL;
+
+ var->grayscale = 0; /* No grayscale for now */
+
+ /* determine valid resolution and timing */
+ for (min_mode=0; min_mode<DBE_VT_SIZE; min_mode++) {
+ if (dbeVTimings[min_mode].width >= var->xres &&
+ dbeVTimings[min_mode].height >= var->yres)
+ break;
+ }
+
+ if (min_mode == DBE_VT_SIZE)
+ return -EINVAL; /* Resolution to high */
+
+ /* XXX FIXME - should try to pick best refresh rate */
+ /* for now, pick closest dot-clock within 3MHz*/
+ req_dot = (int)((1.0e3/1.0e6) / (1.0e-12 * (float)var->pixclock));
+ printk("sgivwfb: requested pixclock=%d ps (%d KHz)\n", var->pixclock,
+ req_dot);
+ test_mode=min_mode;
+ while (dbeVTimings[min_mode].width == dbeVTimings[test_mode].width) {
+ if (dbeVTimings[test_mode].cfreq+3000 > req_dot)
+ break;
+ test_mode++;
+ }
+ if (dbeVTimings[min_mode].width != dbeVTimings[test_mode].width)
+ test_mode--;
+ min_mode = test_mode;
+ timing = &dbeVTimings[min_mode];
+ printk("sgivwfb: granted dot-clock=%d KHz\n", timing->cfreq);
+
+ /* Adjust virtual resolution, if necessary */
+ if (var->xres > var->xres_virtual || (!ywrap && !ypan))
+ var->xres_virtual = var->xres;
+ if (var->yres > var->yres_virtual || (!ywrap && !ypan))
+ var->yres_virtual = var->yres;
+
+ /*
+ * Memory limit
+ */
+ line_length = get_line_length(var->xres_virtual, var->bits_per_pixel);
+ if (line_length*var->yres_virtual > sgivwfb_mem_size)
+ return -ENOMEM; /* Virtual resolution to high */
+
+ switch (var->bits_per_pixel)
+ {
+ case 8:
+ var->red.offset = 0;
+ var->red.length = 8;
+ var->green.offset = 0;
+ var->green.length = 8;
+ var->blue.offset = 0;
+ var->blue.length = 8;
+ var->transp.offset = 0;
+ var->transp.length = 0;
+ break;
+ case 16: /* RGBA 5551 */
+ var->red.offset = 11;
+ var->red.length = 5;
+ var->green.offset = 6;
+ var->green.length = 5;
+ var->blue.offset = 1;
+ var->blue.length = 5;
+ var->transp.offset = 0;
+ var->transp.length = 0;
+ break;
+ case 32: /* RGB 8888 */
+ var->red.offset = 0;
+ var->red.length = 8;
+ var->green.offset = 8;
+ var->green.length = 8;
+ var->blue.offset = 16;
+ var->blue.length = 8;
+ var->transp.offset = 24;
+ var->transp.length = 8;
+ break;
+ }
+ var->red.msb_right = 0;
+ var->green.msb_right = 0;
+ var->blue.msb_right = 0;
+ var->transp.msb_right = 0;
+
+ /* set video timing information */
+ var->pixclock = (__u32)(1.0e+9/(float)timing->cfreq);
+ var->left_margin = timing->htotal - timing->hsync_end;
+ var->right_margin = timing->hsync_start - timing->width;
+ var->upper_margin = timing->vtotal - timing->vsync_end;
+ var->lower_margin = timing->vsync_start - timing->height;
+ var->hsync_len = timing->hsync_end - timing->hsync_start;
+ var->vsync_len = timing->vsync_end - timing->vsync_start;
+
+ if ((activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) {
+ oldxres = display->var.xres;
+ oldyres = display->var.yres;
+ oldvxres = display->var.xres_virtual;
+ oldvyres = display->var.yres_virtual;
+ oldbpp = display->var.bits_per_pixel;
+ display->var = *var;
+ par_current.var = *var;
+ par_current.timing_num = min_mode;
+ if (oldxres != var->xres || oldyres != var->yres ||
+ oldvxres != var->xres_virtual || oldvyres != var->yres_virtual ||
+ oldbpp != var->bits_per_pixel || !par_current.valid) {
+ struct fb_fix_screeninfo fix;
+ printk("sgivwfb: new video mode xres=%d yres=%d bpp=%d\n",
+ var->xres, var->yres, var->bits_per_pixel);
+ printk(" vxres=%d vyres=%d\n",
+ var->xres_virtual, var->yres_virtual);
+ activate_par(&par_current);
+ sgivwfb_encode_fix(&fix, var);
+ display->screen_base = (char *)fbmem;
+ display->visual = fix.visual;
+ display->type = fix.type;
+ display->type_aux = fix.type_aux;
+ display->ypanstep = fix.ypanstep;
+ display->ywrapstep = fix.ywrapstep;
+ display->line_length = fix.line_length;
+ display->can_soft_blank = 1;
+ display->inverse = 0;
+ if (oldbpp != var->bits_per_pixel || !par_current.valid) {
+ if ((err = fb_alloc_cmap(&display->cmap, 0, 0)))
+ return err;
+ do_install_cmap(con, info);
+ }
+ switch (var->bits_per_pixel) {
+#ifdef FBCON_HAS_CFB8
+ case 8:
+ display->dispsw = &fbcon_cfb8;
+ break;
+#endif
+#ifdef FBCON_HAS_CFB16
+ case 16:
+ display->dispsw = &fbcon_cfb16;
+ display->dispsw_data = fbcon_cmap.cfb16;
+ break;
+#endif
+#ifdef FBCON_HAS_CFB32
+ case 32:
+ display->dispsw = &fbcon_cfb32;
+ display->dispsw_data = fbcon_cmap.cfb32;
+ break;
+#endif
+ default:
+ display->dispsw = &fbcon_dummy;
+ break;
+ }
+ par_current.valid = 1;
+ if (fb_info.changevar)
+ (*fb_info.changevar)(con);
+ }
+ }
+ return 0;
+}
+
+/*
+ * Pan or Wrap the Display
+ *
+ * This call looks only at xoffset, yoffset and the FB_VMODE_YWRAP flag
+ */
+
+static int sgivwfb_pan_display(struct fb_var_screeninfo *var, int con,
+ struct fb_info *info)
+{
+#if 0
+ if (var->vmode & FB_VMODE_YWRAP) {
+ if (var->yoffset < 0 ||
+ var->yoffset >= fb_display[con].var.yres_virtual ||
+ var->xoffset)
+ return -EINVAL;
+ } else {
+ if (var->xoffset+fb_display[con].var.xres >
+ fb_display[con].var.xres_virtual ||
+ var->yoffset+fb_display[con].var.yres >
+ fb_display[con].var.yres_virtual)
+ return -EINVAL;
+ }
+ fb_display[con].var.xoffset = var->xoffset;
+ fb_display[con].var.yoffset = var->yoffset;
+ if (var->vmode & FB_VMODE_YWRAP)
+ fb_display[con].var.vmode |= FB_VMODE_YWRAP;
+ else
+ fb_display[con].var.vmode &= ~FB_VMODE_YWRAP;
+ return 0;
+#endif
+ return -EINVAL;
+}
+
+/*
+ * Get the Colormap
+ */
+static int sgivwfb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
+ struct fb_info *info)
+{
+ if (con == currcon) /* current console? */
+ return fb_get_cmap(cmap, kspc, sgivwfb_getcolreg, info);
+ else if (fb_display[con].cmap.len) /* non default colormap? */
+ fb_copy_cmap(&fb_display[con].cmap, cmap, kspc ? 0 : 2);
+ else
+ fb_copy_cmap(fb_default_cmap(1<<fb_display[con].var.bits_per_pixel),
+ cmap, kspc ? 0 : 2);
+ return 0;
+}
+
+/*
+ * Set the Colormap
+ */
+static int sgivwfb_set_cmap(struct fb_cmap *cmap, int kspc, int con,
+ struct fb_info *info)
+{
+ int err;
+
+ if (!fb_display[con].cmap.len) { /* no colormap allocated? */
+ if ((err = fb_alloc_cmap(&fb_display[con].cmap,
+ 1<<fb_display[con].var.bits_per_pixel, 0)))
+ return err;
+ }
+ if (con == currcon) /* current console? */
+ return fb_set_cmap(cmap, kspc, sgivwfb_setcolreg, info);
+ else
+ fb_copy_cmap(cmap, &fb_display[con].cmap, kspc ? 0 : 1);
+ return 0;
+}
+
+/*
+ * Virtual Frame Buffer Specific ioctls
+ */
+static int sgivwfb_ioctl(struct inode *inode, struct file *file, u_int cmd,
+ u_long arg, int con, struct fb_info *info)
+{
+ return -EINVAL;
+}
+
+static int sgivwfb_mmap(struct fb_info *info, struct file *file,
+ struct vm_area_struct *vma)
+{
+ unsigned long size = vma->vm_end - vma->vm_start;
+ unsigned long offset = sgivwfb_mem_phys + vma->vm_offset;
+ if (vma->vm_offset+size > sgivwfb_mem_size)
+ return -EINVAL;
+ pgprot_val(vma->vm_page_prot) = pgprot_val(vma->vm_page_prot) | _PAGE_PCD;
+ vma->vm_flags |= VM_IO;
+ if (remap_page_range(vma->vm_start, offset, size, vma->vm_page_prot))
+ return -EAGAIN;
+ vma->vm_file = file;
+ printk("sgivwfb: mmap framebuffer P(%lx)->V(%lx)\n", offset, vma->vm_start);
+ return 0;
+}
+
+__initfunc(void sgivwfb_setup(char *options, int *ints))
+{
+ char *this_opt;
+
+ fb_info.fontname[0] = '\0';
+
+ if (!options || !*options)
+ return;
+
+ for (this_opt = strtok(options, ","); this_opt;
+ this_opt = strtok(NULL, ",")) {
+ if (!strncmp(this_opt, "font:", 5))
+ strcpy(fb_info.fontname, this_opt+5);
+ }
+}
+
+/*
+ * Initialisation
+ */
+__initfunc(void sgivwfb_init(void))
+{
+ printk("sgivwfb: framebuffer at 0x%lx, size %ldk\n",
+ sgivwfb_mem_phys, sgivwfb_mem_size/1024);
+
+ regs = (asregs*)ioremap_nocache(DBE_REG_PHYS, DBE_REG_SIZE);
+ if (!regs) {
+ printk("sgivwfb: couldn't ioremap registers\n");
+ goto fail_ioremap_regs;
+ }
+
+#ifdef CONFIG_MTRR
+ mtrr_add((unsigned long)sgivwfb_mem_phys, sgivwfb_mem_size, MTRR_TYPE_WRCOMB, 1);
+#endif
+
+ strcpy(fb_info.modename, sgivwfb_name);
+ fb_info.changevar = NULL;
+ fb_info.node = -1;
+ fb_info.fbops = &sgivwfb_ops;
+ fb_info.disp = &disp;
+ fb_info.switch_con = &sgivwfbcon_switch;
+ fb_info.updatevar = &sgivwfbcon_updatevar;
+ fb_info.blank = &sgivwfbcon_blank;
+ fb_info.flags = FBINFO_FLAG_DEFAULT;
+
+ fbmem = ioremap_nocache((unsigned long)sgivwfb_mem_phys, sgivwfb_mem_size);
+ if (!fbmem) {
+ printk("sgivwfb: couldn't ioremap fbmem\n");
+ goto fail_ioremap_fbmem;
+ }
+
+ /* turn on default video mode */
+ sgivwfb_set_var(&par_current.var, -1, &fb_info);
+
+ if (register_framebuffer(&fb_info) < 0) {
+ printk("sgivwfb: couldn't register framebuffer\n");
+ goto fail_register_framebuffer;
+ }
+
+ printk("fb%d: Virtual frame buffer device, using %ldK of video memory\n",
+ GET_FB_IDX(fb_info.node), sgivwfb_mem_size>>10);
+
+ return;
+
+ fail_register_framebuffer:
+ iounmap((char*)fbmem);
+ fail_ioremap_fbmem:
+ iounmap(regs);
+ fail_ioremap_regs:
+ return;
+}
+
+static int sgivwfbcon_switch(int con, struct fb_info *info)
+{
+ /* Do we have to save the colormap? */
+ if (fb_display[currcon].cmap.len)
+ fb_get_cmap(&fb_display[currcon].cmap, 1, sgivwfb_getcolreg, info);
+
+ currcon = con;
+ /* Install new colormap */
+ do_install_cmap(con, info);
+ return 0;
+}
+
+/*
+ * Update the `var' structure (called by fbcon.c)
+ */
+static int sgivwfbcon_updatevar(int con, struct fb_info *info)
+{
+ /* Nothing */
+ return 0;
+}
+
+/*
+ * Blank the display.
+ */
+static void sgivwfbcon_blank(int blank, struct fb_info *info)
+{
+ /* Nothing */
+}
+
+#ifdef MODULE
+int init_module(void)
+{
+ sgivwfb_init();
+ return 0;
+}
+
+void cleanup_module(void)
+{
+ unregister_framebuffer(&fb_info);
+ dbe_TurnOffDma();
+ iounmap(regs);
+ iounmap(fbmem);
+}
+
+#endif /* MODULE */
diff -u --recursive --new-file v2.2.3/linux/drivers/video/sgivwfb.h linux/drivers/video/sgivwfb.h
--- v2.2.3/linux/drivers/video/sgivwfb.h Wed Dec 31 16:00:00 1969
+++ linux/drivers/video/sgivwfb.h Wed Mar 17 09:17:22 1999
@@ -0,0 +1,660 @@
+/*
+ * linux/drivers/video/sgivwfb.h -- SGI DBE frame buffer device header
+ *
+ * Copyright (C) 1999 Silicon Graphics, Inc.
+ * Jeffrey Newquist, newq...@engr.sgi.som
+ *
+ * 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 __SGIVWFB_H__
+#define __SGIVWFB_H__
+
+#define DBE_GETREG(reg, dest) ((dest) = DBE_REG_BASE->##reg)
+#define DBE_SETREG(reg, src) DBE_REG_BASE->##reg = (src)
+#define DBE_IGETREG(reg, idx, dest) ((dest) = DBE_REG_BASE->##reg##[idx])
+#define DBE_ISETREG(reg, idx, src) (DBE_REG_BASE->##reg##[idx] = (src))
+
+#define MASK(msb, lsb) ( (((u32)1<<((msb)-(lsb)+1))-1) << (lsb) )
+#define GET(v, msb, lsb) ( ((u32)(v) & MASK(msb,lsb)) >> (lsb) )
+#define SET(v, f, msb, lsb) ( (v) = ((v)&~MASK(msb,lsb)) | (( (u32)(f)<<(lsb) ) & MASK(msb,lsb)) )
+
+#define GET_DBE_FIELD(reg, field, v) GET((v), DBE_##reg##_##field##_MSB, DBE_##reg##_##field##_LSB)
+#define SET_DBE_FIELD(reg, field, v, f) SET((v), (f), DBE_##reg##_##field##_MSB, DBE_##reg##_##field##_LSB)
+
+/* NOTE: All loads/stores must be 32 bits and uncached */
+
+#define DBE_REG_PHYS 0xd0000000
+#define DBE_REG_SIZE 0x01000000
+
+typedef struct {
+ volatile u32 ctrlstat; /* 0x000000 general control */
+ volatile u32 dotclock; /* 0x000004 dot clock PLL control */
+ volatile u32 i2c; /* 0x000008 crt I2C control */
+ volatile u32 sysclk; /* 0x00000c system clock PLL control */
+ volatile u32 i2cfp; /* 0x000010 flat panel I2C control */
+ volatile u32 id; /* 0x000014 device id/chip revision */
+ volatile u32 config; /* 0x000018 power on configuration */
+ volatile u32 bist; /* 0x00001c internal bist status */
+
+ char _pad0[ 0x010000 - 0x000020 ];
+
+ volatile u32 vt_xy; /* 0x010000 current dot coords */
+ volatile u32 vt_xymax; /* 0x010004 maximum dot coords */
+ volatile u32 vt_vsync; /* 0x010008 vsync on/off */
+ volatile u32 vt_hsync; /* 0x01000c hsync on/off */
+ volatile u32 vt_vblank; /* 0x010010 vblank on/off */
+ volatile u32 vt_hblank; /* 0x010014 hblank on/off */
+ volatile u32 vt_flags; /* 0x010018 polarity of vt signals */
+ volatile u32 vt_f2rf_lock; /* 0x01001c f2rf & framelck y coord */
+ volatile u32 vt_intr01; /* 0x010020 intr 0,1 y coords */
+ volatile u32 vt_intr23; /* 0x010024 intr 2,3 y coords */
+ volatile u32 fp_hdrv; /* 0x010028 flat panel hdrv on/off */
+ volatile u32 fp_vdrv; /* 0x01002c flat panel vdrv on/off */
+ volatile u32 fp_de; /* 0x010030 flat panel de on/off */
+ volatile u32 vt_hpixen; /* 0x010034 intrnl horiz pixel on/off*/
+ volatile u32 vt_vpixen; /* 0x010038 intrnl vert pixel on/off */
+ volatile u32 vt_hcmap; /* 0x01003c cmap write (horiz) */
+ volatile u32 vt_vcmap; /* 0x010040 cmap write (vert) */
+ volatile u32 did_start_xy; /* 0x010044 eol/f did/xy reset val */
+ volatile u32 crs_start_xy; /* 0x010048 eol/f crs/xy reset val */
+ volatile u32 vc_start_xy; /* 0x01004c eol/f vc/xy reset val */
+
+ char _pad1[ 0x020000 - 0x010050 ];
+
+ volatile u32 ovr_width_tile; /* 0x020000 overlay plane ctrl 0 */
+ volatile u32 ovr_inhwctrl; /* 0x020004 overlay plane ctrl 1 */
+ volatile u32 ovr_control; /* 0x020008 overlay plane ctrl 1 */
+
+ char _pad2[ 0x030000 - 0x02000C ];
+
+ volatile u32 frm_size_tile; /* 0x030000 normal plane ctrl 0 */
+ volatile u32 frm_size_pixel; /* 0x030004 normal plane ctrl 1 */
+ volatile u32 frm_inhwctrl; /* 0x030008 normal plane ctrl 2 */
+ volatile u32 frm_control; /* 0x03000C normal plane ctrl 3 */
+
+ char _pad3[ 0x040000 - 0x030010 ];
+
+ volatile u32 did_inhwctrl; /* 0x040000 DID control */
+ volatile u32 did_control; /* 0x040004 DID shadow */
+
+ char _pad4[ 0x048000 - 0x040008 ];
+
+ volatile u32 mode_regs[32]; /* 0x048000 - 0x04807c WID table */
+
+ char _pad5[ 0x050000 - 0x048080 ];
+
+ volatile u32 cmap[6144]; /* 0x050000 - 0x055ffc color map */
+
+ char _pad6[ 0x058000 - 0x056000 ];
+
+ volatile u32 cm_fifo; /* 0x058000 color map fifo status */
+
+ char _pad7[ 0x060000 - 0x058004 ];
+
+ volatile u32 gmap[256]; /* 0x060000 - 0x0603fc gamma map */
+
+ char _pad8[ 0x068000 - 0x060400 ];
+
+ volatile u32 gmap10[1024]; /* 0x068000 - 0x068ffc gamma map */
+
+ char _pad9[ 0x070000 - 0x069000 ];
+
+ volatile u32 crs_pos; /* 0x070000 cusror control 0 */
+ volatile u32 crs_ctl; /* 0x070004 cusror control 1 */
+ volatile u32 crs_cmap[3]; /* 0x070008 - 0x070010 crs cmap */
+
+ char _pad10[ 0x078000 - 0x070014 ];
+
+ volatile u32 crs_glyph[64]; /* 0x078000 - 0x0780fc crs glyph */
+
+ char _pad11[ 0x080000 - 0x078100 ];
+
+ volatile u32 vc_0; /* 0x080000 video capture crtl 0 */
+ volatile u32 vc_1; /* 0x080004 video capture crtl 1 */
+ volatile u32 vc_2; /* 0x080008 video capture crtl 2 */
+ volatile u32 vc_3; /* 0x08000c video capture crtl 3 */
+ volatile u32 vc_4; /* 0x080010 video capture crtl 3 */
+ volatile u32 vc_5; /* 0x080014 video capture crtl 3 */
+ volatile u32 vc_6; /* 0x080018 video capture crtl 3 */
+ volatile u32 vc_7; /* 0x08001c video capture crtl 3 */
+ volatile u32 vc_8; /* 0x08000c video capture crtl 3 */
+} asregs;
+
+/* Bit mask information */
+
+#define DBE_CTRLSTAT_CHIPID_MSB 3
+#define DBE_CTRLSTAT_CHIPID_LSB 0
+#define DBE_CTRLSTAT_SENSE_N_MSB 4
+#define DBE_CTRLSTAT_SENSE_N_LSB 4
+#define DBE_CTRLSTAT_PCLKSEL_MSB 29
+#define DBE_CTRLSTAT_PCLKSEL_LSB 28
+
+#define DBE_DOTCLK_M_MSB 7
+#define DBE_DOTCLK_M_LSB 0
+#define DBE_DOTCLK_N_MSB 13
+#define DBE_DOTCLK_N_LSB 8
+#define DBE_DOTCLK_P_MSB 15
+#define DBE_DOTCLK_P_LSB 14
+#define DBE_DOTCLK_RUN_MSB 20
+#define DBE_DOTCLK_RUN_LSB 20
+
+#define DBE_VT_XY_VT_FREEZE_MSB 31
+#define DBE_VT_XY_VT_FREEZE_LSB 31
+
+#define DBE_VT_VSYNC_VT_VSYNC_ON_MSB 23
+#define DBE_VT_VSYNC_VT_VSYNC_ON_LSB 12
+#define DBE_VT_VSYNC_VT_VSYNC_OFF_MSB 11
+#define DBE_VT_VSYNC_VT_VSYNC_OFF_LSB 0
+
+#define DBE_VT_HSYNC_VT_HSYNC_ON_MSB 23
+#define DBE_VT_HSYNC_VT_HSYNC_ON_LSB 12
+#define DBE_VT_HSYNC_VT_HSYNC_OFF_MSB 11
+#define DBE_VT_HSYNC_VT_HSYNC_OFF_LSB 0
+
+#define DBE_VT_VBLANK_VT_VBLANK_ON_MSB 23
+#define DBE_VT_VBLANK_VT_VBLANK_ON_LSB 12
+#define DBE_VT_VBLANK_VT_VBLANK_OFF_MSB 11
+#define DBE_VT_VBLANK_VT_VBLANK_OFF_LSB 0
+
+#define DBE_VT_HBLANK_VT_HBLANK_ON_MSB 23
+#define DBE_VT_HBLANK_VT_HBLANK_ON_LSB 12
+#define DBE_VT_HBLANK_VT_HBLANK_OFF_MSB 11
+#define DBE_VT_HBLANK_VT_HBLANK_OFF_LSB 0
+
+#define DBE_VT_VCMAP_VT_VCMAP_ON_MSB 23
+#define DBE_VT_VCMAP_VT_VCMAP_ON_LSB 12
+#define DBE_VT_VCMAP_VT_VCMAP_OFF_MSB 11
+#define DBE_VT_VCMAP_VT_VCMAP_OFF_LSB 0
+
+#define DBE_VT_HCMAP_VT_HCMAP_ON_MSB 23
+#define DBE_VT_HCMAP_VT_HCMAP_ON_LSB 12
+#define DBE_VT_HCMAP_VT_HCMAP_OFF_MSB 11
+#define DBE_VT_HCMAP_VT_HCMAP_OFF_LSB 0
+
+#define DBE_VT_XYMAX_VT_MAXX_MSB 11
+#define DBE_VT_XYMAX_VT_MAXX_LSB 0
+#define DBE_VT_XYMAX_VT_MAXY_MSB 23
+#define DBE_VT_XYMAX_VT_MAXY_LSB 12
+
+#define DBE_VT_HPIXEN_VT_HPIXEN_ON_MSB 23
+#define DBE_VT_HPIXEN_VT_HPIXEN_ON_LSB 12
+#define DBE_VT_HPIXEN_VT_HPIXEN_OFF_MSB 11
+#define DBE_VT_HPIXEN_VT_HPIXEN_OFF_LSB 0
+
+#define DBE_VT_VPIXEN_VT_VPIXEN_ON_MSB 23
+#define DBE_VT_VPIXEN_VT_VPIXEN_ON_LSB 12
+#define DBE_VT_VPIXEN_VT_VPIXEN_OFF_MSB 11
+#define DBE_VT_VPIXEN_VT_VPIXEN_OFF_LSB 0
+
+#define DBE_OVR_CONTROL_OVR_DMA_ENABLE_MSB 0
+#define DBE_OVR_CONTROL_OVR_DMA_ENABLE_LSB 0
+
+#define DBE_OVR_INHWCTRL_OVR_DMA_ENABLE_MSB 0
+#define DBE_OVR_INHWCTRL_OVR_DMA_ENABLE_LSB 0
+
+#define DBE_OVR_WIDTH_TILE_OVR_FIFO_RESET_MSB 13
+#define DBE_OVR_WIDTH_TILE_OVR_FIFO_RESET_LSB 13
+
+#define DBE_FRM_CONTROL_FRM_DMA_ENABLE_MSB 0
+#define DBE_FRM_CONTROL_FRM_DMA_ENABLE_LSB 0
+#define DBE_FRM_CONTROL_FRM_TILE_PTR_MSB 31
+#define DBE_FRM_CONTROL_FRM_TILE_PTR_LSB 9
+#define DBE_FRM_CONTROL_FRM_LINEAR_MSB 1
+#define DBE_FRM_CONTROL_FRM_LINEAR_LSB 1
+
+#define DBE_FRM_INHWCTRL_FRM_DMA_ENABLE_MSB 0
+#define DBE_FRM_INHWCTRL_FRM_DMA_ENABLE_LSB 0
+
+#define DBE_FRM_SIZE_TILE_FRM_WIDTH_TILE_MSB 12
+#define DBE_FRM_SIZE_TILE_FRM_WIDTH_TILE_LSB 5
+#define DBE_FRM_SIZE_TILE_FRM_RHS_MSB 4
+#define DBE_FRM_SIZE_TILE_FRM_RHS_LSB 0
+#define DBE_FRM_SIZE_TILE_FRM_DEPTH_MSB 14
+#define DBE_FRM_SIZE_TILE_FRM_DEPTH_LSB 13
+#define DBE_FRM_SIZE_TILE_FRM_FIFO_RESET_MSB 15
+#define DBE_FRM_SIZE_TILE_FRM_FIFO_RESET_LSB 15
+
+#define DBE_FRM_SIZE_PIXEL_FB_HEIGHT_PIX_MSB 31
+#define DBE_FRM_SIZE_PIXEL_FB_HEIGHT_PIX_LSB 16
+
+#define DBE_DID_CONTROL_DID_DMA_ENABLE_MSB 0
+#define DBE_DID_CONTROL_DID_DMA_ENABLE_LSB 0
+#define DBE_DID_INHWCTRL_DID_DMA_ENABLE_MSB 0
+#define DBE_DID_INHWCTRL_DID_DMA_ENABLE_LSB 0
+
+#define DBE_DID_START_XY_DID_STARTY_MSB 23
+#define DBE_DID_START_XY_DID_STARTY_LSB 12
+#define DBE_DID_START_XY_DID_STARTX_MSB 11
+#define DBE_DID_START_XY_DID_STARTX_LSB 0
+
+#define DBE_CRS_START_XY_CRS_STARTY_MSB 23
+#define DBE_CRS_START_XY_CRS_STARTY_LSB 12
+#define DBE_CRS_START_XY_CRS_STARTX_MSB 11
+#define DBE_CRS_START_XY_CRS_STARTX_LSB 0
+
+#define DBE_WID_TYP_MSB 4
+#define DBE_WID_TYP_LSB 2
+#define DBE_WID_BUF_MSB 1
+#define DBE_WID_BUF_LSB 0
+
+#define DBE_VC_START_XY_VC_STARTY_MSB 23
+#define DBE_VC_START_XY_VC_STARTY_LSB 12
+#define DBE_VC_START_XY_VC_STARTX_MSB 11
+#define DBE_VC_START_XY_VC_STARTX_LSB 0
+
+/* Constants */
+
+#define DBE_FRM_DEPTH_8 0
+#define DBE_FRM_DEPTH_16 1
+#define DBE_FRM_DEPTH_32 2
+
+#define DBE_CMODE_I8 0
+#define DBE_CMODE_I12 1
+#define DBE_CMODE_RG3B2 2
+#define DBE_CMODE_RGB4 3
+#define DBE_CMODE_ARGB5 4
+#define DBE_CMODE_RGB8 5
+#define DBE_CMODE_RGBA5 6
+#define DBE_CMODE_RGB10 7
+
+#define DBE_BMODE_BOTH 3
+
+#define DBE_CRS_MAGIC 54
+
+/* Config Register (DBE Only) Definitions */
+
+#define DBE_CONFIG_VDAC_ENABLE 0x00000001
+#define DBE_CONFIG_VDAC_GSYNC 0x00000002
+#define DBE_CONFIG_VDAC_PBLANK 0x00000004
+#define DBE_CONFIG_FPENABLE 0x00000008
+#define DBE_CONFIG_LENDIAN 0x00000020
+#define DBE_CONFIG_TILEHIST 0x00000040
+#define DBE_CONFIG_EXT_ADDR 0x00000080
+
+#define DBE_CONFIG_FBDEV ( DBE_CONFIG_VDAC_ENABLE | \
+ DBE_CONFIG_VDAC_GSYNC | \
+ DBE_CONFIG_VDAC_PBLANK | \
+ DBE_CONFIG_LENDIAN | \
+ DBE_CONFIG_EXT_ADDR )
+
+/*
+ * Available Video Timings and Corresponding Indices
+ */
+
+typedef enum {
+ DBE_VT_640_480_60,
+
+ DBE_VT_800_600_60,
+ DBE_VT_800_600_75,
+ DBE_VT_800_600_120,
+
+ DBE_VT_1024_768_50,
+ DBE_VT_1024_768_60,
+ DBE_VT_1024_768_75,
+ DBE_VT_1024_768_85,
+ DBE_VT_1024_768_120,
+
+ DBE_VT_1280_1024_50,
+ DBE_VT_1280_1024_60,
+ DBE_VT_1280_1024_75,
+ DBE_VT_1280_1024_85,
+
+ DBE_VT_1600_1024_53,
+ DBE_VT_1600_1024_60,
+
+ DBE_VT_1600_1200_50,
+ DBE_VT_1600_1200_60,
+ DBE_VT_1600_1200_75,
+
+ DBE_VT_1920_1080_50,
+ DBE_VT_1920_1080_60,
+ DBE_VT_1920_1080_72,
+
+ DBE_VT_1920_1200_50,
+ DBE_VT_1920_1200_60,
+ DBE_VT_1920_1200_66,
+
+ DBE_VT_UNKNOWN
+} dbe_timing_t;
+
+
+
+/*
+ * Crime Video Timing Data Structure
+ */
+
+typedef struct dbe_timing_info
+{
+ dbe_timing_t type;
+ int flags;
+ short width; /* Monitor resolution */
+ short height;
+ int fields_sec; /* fields/sec (Hz -3 dec. places */
+ int cfreq; /* pixel clock frequency (MHz -3 dec. places) */
+ short htotal; /* Horizontal total pixels */
+ short hblank_start; /* Horizontal blank start */
+ short hblank_end; /* Horizontal blank end */
+ short hsync_start; /* Horizontal sync start */
+ short hsync_end; /* Horizontal sync end */
+ short vtotal; /* Vertical total lines */
+ short vblank_start; /* Vertical blank start */
+ short vblank_end; /* Vertical blank end */
+ short vsync_start; /* Vertical sync start */
+ short vsync_end; /* Vertical sync end */
+ short pll_m; /* PLL M parameter */
+ short pll_n; /* PLL P parameter */
+ short pll_p; /* PLL N parameter */
+} dbe_timing_info_t;
+
+/* Defines for dbe_vof_info_t flags */
+
+#define DBE_VOF_UNKNOWNMON 1
+#define DBE_VOF_STEREO 2
+#define DBE_VOF_DO_GENSYNC 4 /* enable incoming sync */
+#define DBE_VOF_SYNC_ON_GREEN 8 /* sync on green */
+#define DBE_VOF_FLATPANEL 0x1000 /* FLATPANEL Timing */
+#define DBE_VOF_MAGICKEY 0x2000 /* Backdoor key */
+
+/*
+ * DBE Timing Tables
+ */
+
+#ifdef INCLUDE_TIMING_TABLE_DATA
+struct dbe_timing_info dbeVTimings[] = {
+ {
+ DBE_VT_640_480_60,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 640, 480, 59940, 25175,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 800, 640, 800, 656, 752,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 525, 480, 525, 490, 492,
+ /* pll_m, pll_n, pll_p */
+ 15, 2, 3
+ },
+
+ {
+ DBE_VT_800_600_60,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 800, 600, 60317, 40000,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1056, 800, 1056, 840, 968,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 628, 600, 628, 601, 605,
+ /* pll_m, pll_n, pll_p */
+ 3, 1, 1
+ },
+
+ {
+ DBE_VT_800_600_75,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 800, 600, 75000, 49500,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1056, 800, 1056, 816, 896,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 625, 600, 625, 601, 604,
+ /* pll_m, pll_n, pll_p */
+ 11, 3, 1
+ },
+
+ {
+ DBE_VT_800_600_120,
+ /* flags, width, height, fields_sec, cfreq */
+ DBE_VOF_STEREO, 800, 600, 119800, 82978,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1040, 800, 1040, 856, 976,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 666, 600, 666, 637, 643,
+ /* pll_m, pll_n, pll_p */
+ 31, 5, 1
+ },
+
+ {
+ DBE_VT_1024_768_50,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1024, 768, 50000, 54163,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1344, 1024, 1344, 1048, 1184,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 806, 768, 806, 771, 777,
+ /* pll_m, pll_n, pll_p */
+ 4, 1, 1
+ },
+
+ {
+ DBE_VT_1024_768_60,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1024, 768, 60004, 65000,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1344, 1024, 1344, 1048, 1184,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 806, 768, 806, 771, 777,
+ /* pll_m, pll_n, pll_p */
+ 12, 5, 0
+ },
+
+ {
+ DBE_VT_1024_768_75,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1024, 768, 75029, 78750,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1312, 1024, 1312, 1040, 1136,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 800, 768, 800, 769, 772,
+ /* pll_m, pll_n, pll_p */
+ 29, 5, 1
+ },
+
+ {
+ DBE_VT_1024_768_85,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1024, 768, 84997, 94500,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1376, 1024, 1376, 1072, 1168,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 808, 768, 808, 769, 772,
+ /* pll_m, pll_n, pll_p */
+ 7, 2, 0
+ },
+
+ {
+ DBE_VT_1024_768_120,
+ /* flags, width, height, fields_sec, cfreq */
+ DBE_VOF_STEREO, 1024, 768, 119800, 133195,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1376, 1024, 1376, 1072, 1168,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 808, 768, 808, 769, 772,
+ /* pll_m, pll_n, pll_p */
+ 5, 1, 0
+ },
+
+ {
+ DBE_VT_1280_1024_50,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1280, 1024, 50000, 89460,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1680, 1280, 1680, 1360, 1480,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1065, 1024, 1065, 1027, 1030,
+ /* pll_m, pll_n, pll_p */
+ 10, 3, 0
+ },
+
+ {
+ DBE_VT_1280_1024_60,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1280, 1024, 60020, 108000,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1688, 1280, 1688, 1328, 1440,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1066, 1024, 1066, 1025, 1028,
+ /* pll_m, pll_n, pll_p */
+ 4, 1, 0
+ },
+
+ {
+ DBE_VT_1280_1024_75,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1280, 1024, 75025, 135000,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1688, 1280, 1688, 1296, 1440,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1066, 1024, 1066, 1025, 1028,
+ /* pll_m, pll_n, pll_p */
+ 5, 1, 0
+ },
+
+ {
+ DBE_VT_1280_1024_85,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1280, 1024, 85024, 157500,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1728, 1280, 1728, 1344, 1504,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1072, 1024, 1072, 1025, 1028,
+ /* pll_m, pll_n, pll_p */
+ 29, 5, 0
+ },
+
+ {
+ DBE_VT_1600_1024_53,
+ /* flags, width, height, fields_sec, cfreq */
+ DBE_VOF_FLATPANEL | DBE_VOF_MAGICKEY,
+ 1600, 1024, 53000, 107447,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1900, 1600, 1900, 1630, 1730,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1067, 1024, 1067, 1027, 1030,
+ /* pll_m, pll_n, pll_p */
+ 4, 1, 0
+ },
+
+ {
+ DBE_VT_1600_1024_60,
+ /* flags, width, height, fields_sec, cfreq */
+ DBE_VOF_FLATPANEL, 1600, 1024, 60000, 106913,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 1670, 1600, 1670, 1630, 1650,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1067, 1024, 1067, 1027, 1030,
+ /* pll_m, pll_n, pll_p */
+ 4, 1, 0
+ },
+
+ {
+ DBE_VT_1600_1200_50,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1600, 1200, 50000, 130500,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 2088, 1600, 2088, 1644, 1764,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1250, 1200, 1250, 1205, 1211,
+ /* pll_m, pll_n, pll_p */
+ 24, 5, 0
+ },
+
+ {
+ DBE_VT_1600_1200_60,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1600, 1200, 59940, 162000,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 2160, 1600, 2160, 1644, 1856,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1250, 1200, 1250, 1201, 1204,
+ /* pll_m, pll_n, pll_p */
+ 6, 1, 0
+ },
+
+ {
+ DBE_VT_1600_1200_75,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1600, 1200, 75000, 202500,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 2160, 1600, 2160, 1644, 1856,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1250, 1200, 1250, 1201, 1204,
+ /* pll_m, pll_n, pll_p */
+ 15, 2, 0
+ },
+
+ {
+ DBE_VT_1920_1080_50,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1920, 1080, 50000, 133200,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 2368, 1920, 2368, 1952, 2096,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1125, 1080, 1125, 1083, 1086,
+ /* pll_m, pll_n, pll_p */
+ 5, 1, 0
+ },
+
+ {
+ DBE_VT_1920_1080_60,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1920, 1080, 59940, 159840,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 2368, 1920, 2368, 1952, 2096,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1125, 1080, 1125, 1083, 1086,
+ /* pll_m, pll_n, pll_p */
+ 6, 1, 0
+ },
+
+ {
+ DBE_VT_1920_1080_72,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1920, 1080, 72000, 216023,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 2560, 1920, 2560, 1968, 2184,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1172, 1080, 1172, 1083, 1086,
+ /* pll_m, pll_n, pll_p */
+ 8, 1, 0
+ },
+
+ {
+ DBE_VT_1920_1200_50,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1920, 1200, 50000, 161500,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 2584, 1920, 2584, 1984, 2240,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1250, 1200, 1250, 1203, 1206,
+ /* pll_m, pll_n, pll_p */
+ 6, 1, 0
+ },
+
+ {
+ DBE_VT_1920_1200_60,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1920, 1200, 59940, 193800,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 2584, 1920, 2584, 1984, 2240,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1250, 1200, 1250, 1203, 1206,
+ /* pll_m, pll_n, pll_p */
+ 29, 4, 0
+ },
+
+ {
+ DBE_VT_1920_1200_66,
+ /* flags, width, height, fields_sec, cfreq */
+ 0, 1920, 1200, 66000, 213180,
+ /* htotal, hblank_start, hblank_end, hsync_start, hsync_end */
+ 2584, 1920, 2584, 1984, 2240,
+ /* vtotal, vblank_start, vblank_end, vsync_start, vsync_end */
+ 1250, 1200, 1250, 1203, 1206,
+ /* pll_m, pll_n, pll_p */
+ 8, 1, 0
+ }
+};
+
+#define DBE_VT_SIZE (sizeof(dbeVTimings)/sizeof(dbeVTimings[0]))
+#endif // INCLUDE_TIMING_TABLE_DATA
+
+#endif // ! __SGIVWFB_H__
diff -u --recursive --new-file v2.2.3/linux/fs/affs/Changes linux/fs/affs/Changes
--- v2.2.3/linux/fs/affs/Changes Wed Jun 24 22:54:08 1998
+++ linux/fs/affs/Changes Sun Mar 21 07:11:37 1999
@@ -28,6 +28,15 @@
X
X Please direct bug reports to: h...@zvw.de
X
+Version 3.10
+------------
+
+- Changed partition checker to allow devices
+ with physical blocks != 512 bytes.
+
+- The partition checker now also ignores the
+ word at 0xd0 that Windows likes to write to.
+
X Version 3.9
X -----------
X
diff -u --recursive --new-file v2.2.3/linux/fs/autofs/root.c linux/fs/autofs/root.c
--- v2.2.3/linux/fs/autofs/root.c Tue Feb 23 15:21:34 1999
+++ linux/fs/autofs/root.c Wed Mar 10 15:07:56 1999
@@ -281,7 +281,7 @@
X autofs_say(dentry->d_name.name,dentry->d_name.len);
X
X if ( !autofs_oz_mode(sbi) )
- return -EPERM;
+ return -EACCES;
X
X if ( dentry->d_name.len > NAME_MAX )
X return -ENAMETOOLONG;
@@ -349,17 +349,20 @@
X struct autofs_dir_ent *ent;
X unsigned int n;
X
- if ( !autofs_oz_mode(sbi) )
- return -EPERM;
+ /* This allows root to remove symlinks */
+ if ( !autofs_oz_mode(sbi) && !capable(CAP_SYS_ADMIN) )
+ return -EACCES;
X
X ent = autofs_hash_lookup(dh, &dentry->d_name);
X if ( !ent )
X return -ENOENT;
X
X n = ent->ino - AUTOFS_FIRST_SYMLINK;
- if ( n >= AUTOFS_MAX_SYMLINKS || !test_bit(n,sbi->symlink_bitmap) )
- return -EINVAL; /* Not a symlink inode, can't unlink */
-
+ if ( n >= AUTOFS_MAX_SYMLINKS )
+ return -EISDIR; /* It's a directory, dummy */
+ if ( !test_bit(n,sbi->symlink_bitmap) )
+ return -EINVAL; /* Nonexistent symlink? Shouldn't happen */
+
X dentry->d_time = (unsigned long)(struct autofs_dirhash *)NULL;
X autofs_hash_delete(ent);
X clear_bit(n,sbi->symlink_bitmap);
@@ -376,7 +379,7 @@
X struct autofs_dir_ent *ent;
X
X if ( !autofs_oz_mode(sbi) )
- return -EPERM;
+ return -EACCES;
X
X ent = autofs_hash_lookup(dh, &dentry->d_name);
X if ( !ent )
@@ -405,7 +408,7 @@
X ino_t ino;
X
X if ( !autofs_oz_mode(sbi) )
- return -EPERM;
+ return -EACCES;
X
X if ( dentry->d_name.len > NAME_MAX )
X return -ENAMETOOLONG;
diff -u --recursive --new-file v2.2.3/linux/fs/binfmt_aout.c linux/fs/binfmt_aout.c
--- v2.2.3/linux/fs/binfmt_aout.c Thu Nov 12 16:21:22 1998
+++ linux/fs/binfmt_aout.c Tue Mar 23 09:33:05 1999
@@ -59,13 +59,13 @@
X * macros to write out all the necessary info.
X */
X #define DUMP_WRITE(addr,nr) \
-while (file.f_op->write(&file,(char *)(addr),(nr),&file.f_pos) != (nr)) goto close_coredump
+while (file->f_op->write(file,(char *)(addr),(nr),&file->f_pos) != (nr)) goto close_coredump
X
X #define DUMP_SEEK(offset) \
-if (file.f_op->llseek) { \
- if (file.f_op->llseek(&file,(offset),0) != (offset)) \
+if (file->f_op->llseek) { \
+ if (file->f_op->llseek(file,(offset),0) != (offset)) \
X goto close_coredump; \
-} else file.f_pos = (offset)
+} else file->f_pos = (offset)
X
X /*
X * Routine writes a core dump image in the current directory.
@@ -82,7 +82,7 @@
X {
X struct dentry * dentry = NULL;
X struct inode * inode = NULL;
- struct file file;
+ struct file * file;
X mm_segment_t fs;
X int has_dumped = 0;
X char corefile[6+sizeof(current->comm)];
@@ -116,21 +116,16 @@
X #else
X corefile[4] = '\0';
X #endif
- dentry = open_namei(corefile,O_CREAT | 2 | O_TRUNC | O_NOFOLLOW, 0600);
- if (IS_ERR(dentry)) {
- dentry = NULL;
+ file = filp_open(corefile,O_CREAT | 2 | O_TRUNC | O_NOFOLLOW, 0600);
+ if (IS_ERR(file))
X goto end_coredump;
- }
+ dentry = file->f_dentry;
X inode = dentry->d_inode;
X if (!S_ISREG(inode->i_mode))
- goto end_coredump;
+ goto close_coredump;
X if (!inode->i_op || !inode->i_op->default_file_ops)
- goto end_coredump;
- if (get_write_access(inode))
- goto end_coredump;
- if (init_private_file(&file, dentry, 3))
- goto end_coredump_write;
- if (!file.f_op->write)
+ goto close_coredump;
+ if (!file->f_op->write)
X goto close_coredump;
X has_dumped = 1;
X current->flags |= PF_DUMPCORE;
@@ -211,13 +206,9 @@
X set_fs(KERNEL_DS);
X DUMP_WRITE(current,sizeof(*current));
X close_coredump:
- if (file.f_op->release)
- file.f_op->release(inode,&file);
-end_coredump_write:
- put_write_access(inode);
+ filp_close(file, NULL);
X end_coredump:
X set_fs(fs);
- dput(dentry);
X return has_dumped;
X }
X
@@ -327,6 +318,8 @@
X }
X
X if (N_MAGIC(ex) == ZMAGIC && ex.a_text &&
+ bprm->dentry->d_inode->i_op &&
+ bprm->dentry->d_inode->i_op->bmap &&
X (fd_offset < bprm->dentry->d_inode->i_sb->s_blocksize)) {
X printk(KERN_NOTICE "N_TXTOFF < BLOCK_SIZE. Please convert binary.\n");
X return -ENOEXEC;
diff -u --recursive --new-file v2.2.3/linux/fs/binfmt_elf.c linux/fs/binfmt_elf.c
--- v2.2.3/linux/fs/binfmt_elf.c Sun Nov 8 14:03:05 1998
+++ linux/fs/binfmt_elf.c Mon Mar 22 10:04:30 1999
@@ -1032,10 +1032,10 @@
X #undef DUMP_SEEK
X
X #define DUMP_WRITE(addr, nr) \
- if (!dump_write(&file, (addr), (nr))) \
+ if (!dump_write(file, (addr), (nr))) \
X goto close_coredump;
X #define DUMP_SEEK(off) \
- if (!dump_seek(&file, (off))) \
+ if (!dump_seek(file, (off))) \
X goto close_coredump;
X /*
X * Actual dumper
@@ -1047,7 +1047,7 @@
X static int elf_core_dump(long signr, struct pt_regs * regs)
X {
X int has_dumped = 0;
- struct file file;
+ struct file *file;
X struct dentry *dentry;
X struct inode *inode;
X mm_segment_t fs;
@@ -1118,30 +1118,28 @@
X
X fs = get_fs();
X set_fs(KERNEL_DS);
+
X memcpy(corefile,"core.",5);
X #if 0
X memcpy(corefile+5,current->comm,sizeof(current->comm));
X #else
X corefile[4] = '\0';
X #endif
- dentry = open_namei(corefile, O_CREAT | 2 | O_TRUNC | O_NOFOLLOW, 0600);
- if (IS_ERR(dentry)) {
- dentry = NULL;
+ file = filp_open(corefile, O_CREAT | 2 | O_TRUNC | O_NOFOLLOW, 0600);
+ if (IS_ERR(file))
X goto end_coredump;
- }
+ dentry = file->f_dentry;
X inode = dentry->d_inode;
-
- if(inode->i_nlink > 1)
- goto end_coredump; /* multiple links - don't dump */
+ if (inode->i_nlink > 1)
+ goto close_coredump; /* multiple links - don't dump */
X
X if (!S_ISREG(inode->i_mode))
- goto end_coredump;
+ goto close_coredump;
X if (!inode->i_op || !inode->i_op->default_file_ops)
- goto end_coredump;
- if (init_private_file(&file, dentry, 3))
- goto end_coredump;
- if (!file.f_op->write)
X goto close_coredump;
+ if (!file->f_op->write)
+ goto close_coredump;
+
X has_dumped = 1;
X current->flags |= PF_DUMPCORE;
X
@@ -1297,7 +1295,7 @@
X }
X
X for(i = 0; i < numnote; i++)
- if (!writenote(¬es[i], &file))
+ if (!writenote(¬es[i], file))
X goto close_coredump;
X
X set_fs(fs);
@@ -1319,19 +1317,17 @@
X DUMP_WRITE((void *)addr, len);
X }
X
- if ((off_t) file.f_pos != offset) {
+ if ((off_t) file->f_pos != offset) {
X /* Sanity check */
- printk("elf_core_dump: file.f_pos (%ld) != offset (%ld)\n",
- (off_t) file.f_pos, offset);
+ printk("elf_core_dump: file->f_pos (%ld) != offset (%ld)\n",
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 41'
echo 'File patch-2.2.4 is continued in part 42'
echo 42 > _shar_seq_.tmp
#!/bin/sh
# this is part 42 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 42; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+ (off_t) file->f_pos, offset);
X }
X
X close_coredump:
- if (file.f_op->release)
- file.f_op->release(inode,&file);
+ filp_close(file, NULL);
X
X end_coredump:
X set_fs(fs);
- dput(dentry);
X #ifndef CONFIG_BINFMT_ELF
X MOD_DEC_USE_COUNT;
X #endif
diff -u --recursive --new-file v2.2.3/linux/fs/buffer.c linux/fs/buffer.c
--- v2.2.3/linux/fs/buffer.c Wed Mar 10 15:29:49 1999
+++ linux/fs/buffer.c Sat Mar 20 12:42:40 1999
@@ -76,6 +76,7 @@
X static int nr_buffers_type[NR_LIST] = {0,};
X static int nr_buffer_heads = 0;
X static int nr_unused_buffer_heads = 0;
+static int nr_hashed_buffers = 0;
X
X /* This is used by some architectures to estimate available memory. */
X int buffermem = 0;
@@ -434,6 +435,7 @@
X *pprev = next;
X bh->b_pprev = NULL;
X }
+ nr_hashed_buffers--;
X }
X
X static inline void remove_from_lru_list(struct buffer_head * bh)
@@ -568,6 +570,7 @@
X *bhp = bh;
X bh->b_pprev = bhp;
X }
+ nr_hashed_buffers++;
X }
X }
X
@@ -839,21 +842,19 @@
X }
X
X /*
- * bforget() is like brelse(), except it removes the buffer
- * from the hash-queues (so that it won't be re-used if it's
- * shared).
+ * bforget() is like brelse(), except it puts the buffer on the
+ * free list if it can.. We can NOT free the buffer if:
+ * - there are other users of it
+ * - it is locked and thus can have active IO
X */
X void __bforget(struct buffer_head * buf)
X {
- mark_buffer_clean(buf);
- clear_bit(BH_Protected, &buf->b_state);
- remove_from_hash_queue(buf);
- buf->b_dev = NODEV;
- refile_buffer(buf);
- if (!--buf->b_count)
+ if (buf->b_count != 1 || buffer_locked(buf)) {
+ __brelse(buf);
X return;
- printk("VFS: forgot an in-use buffer! (count=%d)\n",
- buf->b_count);
+ }
+ remove_from_queues(buf);
+ put_last_free(buf);
X }
X
X /*
@@ -862,20 +863,17 @@
X */
X struct buffer_head * bread(kdev_t dev, int block, int size)
X {
- struct buffer_head * bh = getblk(dev, block, size);
+ struct buffer_head * bh;
X
- if (bh) {
- touch_buffer(bh);
- if (buffer_uptodate(bh))
- return bh;
- ll_rw_block(READ, 1, &bh);
- wait_on_buffer(bh);
- if (buffer_uptodate(bh))
- return bh;
- brelse(bh);
- return NULL;
- }
- printk("VFS: bread: impossible error\n");
+ bh = getblk(dev, block, size);
+ touch_buffer(bh);
+ if (buffer_uptodate(bh))
+ return bh;
+ ll_rw_block(READ, 1, &bh);
+ wait_on_buffer(bh);
+ if (buffer_uptodate(bh))
+ return bh;
+ brelse(bh);
X return NULL;
X }
X
@@ -899,9 +897,10 @@
X if (pos >= filesize)
X return NULL;
X
- if (block < 0 || !(bh = getblk(dev,block,bufsize)))
+ if (block < 0)
X return NULL;
X
+ bh = getblk(dev, block, bufsize);
X index = BUFSIZE_INDEX(bh->b_size);
X
X touch_buffer(bh);
@@ -1010,9 +1009,9 @@
X
X /* This is critical. We can't swap out pages to get
X * more buffer heads, because the swap-out may need
- * more buffer-heads itself. Thus SLAB_ATOMIC.
+ * more buffer-heads itself. Thus SLAB_BUFFER.
X */
- if((bh = kmem_cache_alloc(bh_cachep, SLAB_ATOMIC)) != NULL) {
+ if((bh = kmem_cache_alloc(bh_cachep, SLAB_BUFFER)) != NULL) {
X memset(bh, 0, sizeof(*bh));
X nr_buffer_heads++;
X return bh;
@@ -1491,6 +1490,7 @@
X printk("Buffer memory: %6dkB\n",buffermem>>10);
X printk("Buffer heads: %6d\n",nr_buffer_heads);
X printk("Buffer blocks: %6d\n",nr_buffers);
+ printk("Buffer hashed: %6d\n",nr_hashed_buffers);
X
X for(nlist = 0; nlist < NR_LIST; nlist++) {
X found = locked = dirty = used = lastused = protected = 0;
diff -u --recursive --new-file v2.2.3/linux/fs/coda/inode.c linux/fs/coda/inode.c
--- v2.2.3/linux/fs/coda/inode.c Tue Dec 22 14:16:57 1998
+++ linux/fs/coda/inode.c Wed Mar 10 17:03:52 1999
@@ -23,9 +23,6 @@
X
X #include <linux/fs.h>
X #include <linux/stat.h>
-#include <linux/errno.h>
-#include <linux/locks.h>
-#include <linux/string.h>
X #include <asm/uaccess.h>
X #include <linux/vmalloc.h>
X #include <asm/segment.h>
diff -u --recursive --new-file v2.2.3/linux/fs/coda/upcall.c linux/fs/coda/upcall.c
--- v2.2.3/linux/fs/coda/upcall.c Fri Jan 8 22:36:13 1999
+++ linux/fs/coda/upcall.c Wed Mar 10 17:03:52 1999
@@ -30,7 +30,6 @@
X #include <linux/string.h>
X #include <asm/uaccess.h>
X #include <linux/vmalloc.h>
-#include <asm/segment.h>
X
X #include <linux/coda.h>
X #include <linux/coda_linux.h>
diff -u --recursive --new-file v2.2.3/linux/fs/dcache.c linux/fs/dcache.c
--- v2.2.3/linux/fs/dcache.c Wed Mar 10 15:29:49 1999
+++ linux/fs/dcache.c Fri Mar 19 08:08:54 1999
@@ -2,7 +2,8 @@
X * fs/dcache.c
X *
X * Complete reimplementation
- * (C) 1997 Thomas Schoebel-Theuer
+ * (C) 1997 Thomas Schoebel-Theuer,
+ * with heavy changes by Linus Torvalds
X */
X
X /*
diff -u --recursive --new-file v2.2.3/linux/fs/ext2/inode.c linux/fs/ext2/inode.c
--- v2.2.3/linux/fs/ext2/inode.c Thu May 7 22:51:53 1998
+++ linux/fs/ext2/inode.c Wed Mar 10 10:42:56 1999
@@ -697,7 +697,7 @@
X if (buffer_req(bh) && !buffer_uptodate(bh)) {
X printk ("IO error syncing ext2 inode ["
X "%s:%08lx]\n",
- kdevname(inode->i_dev), inode->i_ino);
+ bdevname(inode->i_dev), inode->i_ino);
X err = -EIO;
X }
X }
diff -u --recursive --new-file v2.2.3/linux/fs/ext2/super.c linux/fs/ext2/super.c
--- v2.2.3/linux/fs/ext2/super.c Sun Nov 8 14:03:05 1998
+++ linux/fs/ext2/super.c Wed Mar 10 11:04:27 1999
@@ -56,9 +56,9 @@
X (le16_to_cpu(sb->u.ext2_sb.s_es->s_errors) == EXT2_ERRORS_PANIC &&
X !test_opt (sb, ERRORS_CONT) && !test_opt (sb, ERRORS_RO)))
X panic ("EXT2-fs panic (device %s): %s: %s\n",
- kdevname(sb->s_dev), function, error_buf);
+ bdevname(sb->s_dev), function, error_buf);
X printk (KERN_CRIT "EXT2-fs error (device %s): %s: %s\n",
- kdevname(sb->s_dev), function, error_buf);
+ bdevname(sb->s_dev), function, error_buf);
X if (test_opt (sb, ERRORS_RO) ||
X (le16_to_cpu(sb->u.ext2_sb.s_es->s_errors) == EXT2_ERRORS_RO &&
X !test_opt (sb, ERRORS_CONT) && !test_opt (sb, ERRORS_PANIC))) {
@@ -87,7 +87,7 @@
X sb->s_lock=0;
X sb->s_flags |= MS_RDONLY;
X panic ("EXT2-fs panic (device %s): %s: %s\n",
- kdevname(sb->s_dev), function, error_buf);
+ bdevname(sb->s_dev), function, error_buf);
X }
X
X void ext2_warning (struct super_block * sb, const char * function,
@@ -99,7 +99,7 @@
X vsprintf (error_buf, fmt, args);
X va_end (args);
X printk (KERN_WARNING "EXT2-fs warning (device %s): %s: %s\n",
- kdevname(sb->s_dev), function, error_buf);
+ bdevname(sb->s_dev), function, error_buf);
X }
X
X void ext2_put_super (struct super_block * sb)
@@ -444,7 +444,7 @@
X if (sb->s_magic != EXT2_SUPER_MAGIC) {
X if (!silent)
X printk ("VFS: Can't find an ext2 filesystem on dev "
- "%s.\n", kdevname(dev));
+ "%s.\n", bdevname(dev));
X failed_mount:
X sb->s_dev = 0;
X unlock_super (sb);
@@ -457,14 +457,14 @@
X if (le32_to_cpu(es->s_feature_incompat) & ~EXT2_FEATURE_INCOMPAT_SUPP) {
X printk("EXT2-fs: %s: couldn't mount because of "
X "unsupported optional features.\n",
- kdevname(dev));
+ bdevname(dev));
X goto failed_mount;
X }
X if (!(sb->s_flags & MS_RDONLY) &&
X (le32_to_cpu(es->s_feature_ro_compat) & ~EXT2_FEATURE_RO_COMPAT_SUPP)) {
X printk("EXT2-fs: %s: couldn't mount RDWR because of "
X "unsupported optional features.\n",
- kdevname(dev));
+ bdevname(dev));
X goto failed_mount;
X }
X }
@@ -553,13 +553,13 @@
X if (!silent)
X printk ("VFS: Can't find an ext2 filesystem on dev "
X "%s.\n",
- kdevname(dev));
+ bdevname(dev));
X goto failed_mount;
X }
X if (sb->s_blocksize != bh->b_size) {
X if (!silent)
X printk ("VFS: Unsupported blocksize on dev "
- "%s.\n", kdevname(dev));
+ "%s.\n", bdevname(dev));
X goto failed_mount;
X }
X
diff -u --recursive --new-file v2.2.3/linux/fs/inode.c linux/fs/inode.c
--- v2.2.3/linux/fs/inode.c Tue Feb 23 15:21:34 1999
+++ linux/fs/inode.c Mon Mar 22 10:40:30 1999
@@ -404,13 +404,20 @@
X spin_unlock(&inode_lock);
X }
X
-#define INODES_PER_PAGE PAGE_SIZE/sizeof(struct inode)
+
X /*
X * This is called with the spinlock held, but releases
X * the lock when freeing or allocating inodes.
X * Look out! This returns with the inode lock held if
X * it got an inode..
+ *
+ * We do inode allocations two pages at a time to reduce
+ * fragmentation.
X */
+#define INODE_PAGE_ORDER 1
+#define INODE_ALLOCATION_SIZE (PAGE_SIZE << INODE_PAGE_ORDER)
+#define INODES_PER_ALLOCATION (INODE_ALLOCATION_SIZE/sizeof(struct inode))
+
X static struct inode * grow_inodes(void)
X {
X struct inode * inode;
@@ -431,14 +438,14 @@
X }
X
X spin_unlock(&inode_lock);
- inode = (struct inode *)__get_free_page(GFP_KERNEL);
+ inode = (struct inode *)__get_free_pages(GFP_KERNEL,INODE_PAGE_ORDER);
X if (inode) {
X int size;
X struct inode * tmp;
X
- spin_lock(&inode_lock);
- size = PAGE_SIZE - 2*sizeof(struct inode);
+ size = INODE_ALLOCATION_SIZE - 2*sizeof(struct inode);
X tmp = inode;
+ spin_lock(&inode_lock);
X do {
X tmp++;
X init_once(tmp);
@@ -449,8 +456,8 @@
X /*
X * Update the inode statistics
X */
- inodes_stat.nr_inodes += INODES_PER_PAGE;
- inodes_stat.nr_free_inodes += INODES_PER_PAGE - 1;
+ inodes_stat.nr_inodes += INODES_PER_ALLOCATION;
+ inodes_stat.nr_free_inodes += INODES_PER_ALLOCATION - 1;
X return inode;
X }
X
@@ -752,7 +759,7 @@
X * Initialize the hash tables and default
X * value for max inodes
X */
-#define MAX_INODE (8192)
+#define MAX_INODE (12288)
X
X void __init inode_init(void)
X {
diff -u --recursive --new-file v2.2.3/linux/fs/locks.c linux/fs/locks.c
--- v2.2.3/linux/fs/locks.c Mon Dec 28 15:00:52 1998
+++ linux/fs/locks.c Tue Mar 16 11:31:28 1999
@@ -111,7 +111,7 @@
X
X #include <asm/uaccess.h>
X
-#define OFFSET_MAX ((off_t)0x7fffffff) /* FIXME: move elsewhere? */
+#define OFFSET_MAX ((off_t)LONG_MAX) /* FIXME: move elsewhere? */
X
X static int flock_make_lock(struct file *filp, struct file_lock *fl,
X unsigned int cmd);
@@ -1170,7 +1170,7 @@
X
X static char *lock_get_status(struct file_lock *fl, int id, char *pfx)
X {
- static char temp[129];
+ static char temp[155];
X char *p = temp;
X struct inode *inode;
X
diff -u --recursive --new-file v2.2.3/linux/fs/ncpfs/inode.c linux/fs/ncpfs/inode.c
--- v2.2.3/linux/fs/ncpfs/inode.c Mon Dec 28 15:00:52 1998
+++ linux/fs/ncpfs/inode.c Wed Mar 10 15:16:58 1999
@@ -472,7 +472,7 @@
X goto out;
X
X if (((attr->ia_valid & ATTR_GID) &&
- (attr->ia_uid != NCP_SERVER(inode)->m.gid)))
+ (attr->ia_gid != NCP_SERVER(inode)->m.gid)))
X goto out;
X
X if (((attr->ia_valid & ATTR_MODE) &&
diff -u --recursive --new-file v2.2.3/linux/fs/nfs/file.c linux/fs/nfs/file.c
--- v2.2.3/linux/fs/nfs/file.c Wed Mar 10 15:29:49 1999
+++ linux/fs/nfs/file.c Fri Mar 19 14:20:47 1999
@@ -36,7 +36,6 @@
X static ssize_t nfs_file_read(struct file *, char *, size_t, loff_t *);
X static ssize_t nfs_file_write(struct file *, const char *, size_t, loff_t *);
X static int nfs_file_flush(struct file *);
-static int nfs_file_close(struct inode *, struct file *);
X static int nfs_fsync(struct file *, struct dentry *dentry);
X
X static struct file_operations nfs_file_operations = {
@@ -49,7 +48,7 @@
X nfs_file_mmap, /* mmap */
X NULL, /* no special open is needed */
X nfs_file_flush, /* flush */
- nfs_file_close, /* release */
+ NULL, /* release */
X nfs_fsync, /* fsync */
X NULL, /* fasync */
X NULL, /* check_media_change */
@@ -86,35 +85,23 @@
X #endif
X
X /*
- * Sync the file..
+ * Flush all dirty pages, and check for write errors.
+ *
X */
X static int
-nfs_file_close(struct inode *inode, struct file *file)
+nfs_file_flush(struct file *file)
X {
- int status;
+ struct inode *inode = file->f_dentry->d_inode;
+ int status;
X
- dfprintk(VFS, "nfs: close(%x/%ld)\n", inode->i_dev, inode->i_ino);
+ dfprintk(VFS, "nfs: flush(%x/%ld)\n", inode->i_dev, inode->i_ino);
X
- status = nfs_wb_all(inode);
- if (!status)
+ status = nfs_wb_file(inode, file);
+ if (!status) {
X status = file->f_error;
+ file->f_error = 0;
+ }
X return status;
-}
-
-/*
- * Flush all dirty pages, and check for write errors.
- *
- * We should probably do this better - this does get called at every
- * close, so we should probably just flush the changes that "this"
- * file has done and report on only those.
- *
- * Right now we use the "flush everything" approach. Overkill, but
- * works.
- */
-static int
-nfs_file_flush(struct file *file)
-{
- return nfs_file_close(file->f_dentry->d_inode, file);
X }
X
X static ssize_t
diff -u --recursive --new-file v2.2.3/linux/fs/nfsd/nfsfh.c linux/fs/nfsd/nfsfh.c
--- v2.2.3/linux/fs/nfsd/nfsfh.c Tue Jan 19 11:32:52 1999
+++ linux/fs/nfsd/nfsfh.c Sat Mar 20 12:28:14 1999
@@ -13,6 +13,7 @@
X #include <linux/string.h>
X #include <linux/stat.h>
X #include <linux/dcache.h>
+#include <asm/pgtable.h>
X
X #include <linux/sunrpc/svc.h>
X #include <linux/nfsd/nfsd.h>
@@ -235,7 +236,7 @@
X /*
X * Search for a path entry for the specified (dev, inode).
X */
-struct nfsd_path *get_path_entry(kdev_t dev, ino_t ino)
+static struct nfsd_path *get_path_entry(kdev_t dev, ino_t ino)
X {
X struct nfsd_path *pe;
X struct list_head *tmp;
@@ -713,7 +714,6 @@
X dentry = dget(fhe->dentry);
X goto out;
X }
-
X /*
X * Search the path cache ...
X */
@@ -859,6 +859,34 @@
X return NULL;
X }
X
+void
+expire_all(void)
+{
+ if (time_after_eq(jiffies, nfsd_next_expire)) {
+ expire_old(NFSD_FILE_CACHE, 5*HZ);
+ expire_old(NFSD_DIR_CACHE , 60*HZ);
+ nfsd_next_expire = jiffies + 5*HZ;
+ }
+}
+
+/*
+ * Free cache after unlink/rmdir.
+ */
+void
+expire_by_dentry(struct dentry *dentry)
+{
+ struct fh_entry *fhe;
+
+ fhe = find_fhe(dentry, NFSD_FILE_CACHE, NULL);
+ if (fhe) {
+ expire_fhe(fhe, NFSD_FILE_CACHE);
+ }
+ fhe = find_fhe(dentry, NFSD_DIR_CACHE, NULL);
+ if (fhe) {
+ expire_fhe(fhe, NFSD_DIR_CACHE);
+ }
+}
+
X /*
X * The is the basic lookup mechanism for turning an NFS file handle
X * into a dentry. There are several levels to the search:
@@ -997,15 +1025,8 @@
X add_to_lookup_cache(dentry, fh);
X }
X
- /*
- * Perform any needed housekeeping ...
- * N.B. move this into one of the daemons ...
- */
- if (time_after_eq(jiffies, nfsd_next_expire)) {
- expire_old(NFSD_FILE_CACHE, 5*HZ);
- expire_old(NFSD_DIR_CACHE , 60*HZ);
- nfsd_next_expire = jiffies + 5*HZ;
- }
+ expire_all();
+
X return dentry;
X }
X
@@ -1133,7 +1154,7 @@
X #ifdef NFSD_PARANOIA
X if (error)
X printk("fh_verify: %s/%s permission failure, acc=%x, error=%d\n",
-dentry->d_parent->d_name.name, dentry->d_name.name, access, error);
+dentry->d_parent->d_name.name, dentry->d_name.name, access, (error >> 24));
X #endif
X out:
X return error;
@@ -1260,11 +1281,8 @@
X goto bad_addr;
X if ((dent_addr & ~align_mask) != dent_addr)
X goto bad_align;
- /* XXX: Should test here, whether the address doesn't belong to
- a physical memory hole on sparc32/sparc64. Then it is not
- safe to dereference it. On the other side, the previous
- use of num_physpages instead of max_mapnr caused the same
- to happen, plus some valid addresses could get rejected. -jj */
+ if (!kern_addr_valid(dent_addr))
+ goto bad_addr;
X /*
X * Looks safe enough to dereference ...
X */
diff -u --recursive --new-file v2.2.3/linux/fs/nfsd/nfssvc.c linux/fs/nfsd/nfssvc.c
--- v2.2.3/linux/fs/nfsd/nfssvc.c Thu Dec 31 10:29:02 1998
+++ linux/fs/nfsd/nfssvc.c Sat Mar 20 12:28:14 1999
@@ -101,7 +101,7 @@
X nfsd(struct svc_rqst *rqstp)
X {
X struct svc_serv *serv = rqstp->rq_server;
- int oldumask, err;
+ int oldumask, err, first = 0;
X
X /* Lock module and set up kernel thread */
X MOD_INC_USE_COUNT;
@@ -115,8 +115,10 @@
X
X oldumask = current->fs->umask; /* Set umask to 0. */
X current->fs->umask = 0;
- if (!nfsd_active++)
+ if (!nfsd_active++) {
X nfssvc_boot = xtime; /* record boot time */
+ first = 1;
+ }
X lockd_up(); /* start lockd */
X
X /*
@@ -133,8 +135,14 @@
X * Find a socket with data available and call its
X * recvfrom routine.
X */
- while ((err = svc_recv(serv, rqstp, MAX_SCHEDULE_TIMEOUT)) == -EAGAIN)
- ;
+ while ((err = svc_recv(serv, rqstp,
+ first?5*HZ:MAX_SCHEDULE_TIMEOUT)) == -EAGAIN) {
+ if (first && 1) {
+ exp_readlock();
+ expire_all();
+ exp_unlock();
+ }
+ }
X if (err < 0)
X break;
X
diff -u --recursive --new-file v2.2.3/linux/fs/nfsd/vfs.c linux/fs/nfsd/vfs.c
--- v2.2.3/linux/fs/nfsd/vfs.c Tue Feb 23 15:21:34 1999
+++ linux/fs/nfsd/vfs.c Sat Mar 20 12:28:14 1999
@@ -11,7 +11,7 @@
X * So if you notice code paths that apparently fail to dput() the
X * dentry, don't worry--they have been taken care of.
X *
- * Copyright (C) 1995, 1996, 1997 Olaf Kirch <ok...@monad.swb.de>
+ * Copyright (C) 1995-1999 Olaf Kirch <ok...@monad.swb.de>
X */
X
X #include <linux/config.h>
@@ -1139,8 +1139,11 @@
X goto out;
X }
X
+ expire_by_dentry(rdentry);
+
X if (type != S_IFDIR) {
X /* It's UNLINK */
+
X err = fh_lock_parent(fhp, rdentry);
X if (err)
X goto out;
@@ -1155,6 +1158,7 @@
X } else {
X /* It's RMDIR */
X /* See comments in fs/namei.c:do_rmdir */
+
X rdentry->d_count++;
X nfsd_double_down(&dirp->i_sem, &rdentry->d_inode->i_sem);
X if (!fhp->fh_pre_mtime)
diff -u --recursive --new-file v2.2.3/linux/fs/ntfs/fs.c linux/fs/ntfs/fs.c
--- v2.2.3/linux/fs/ntfs/fs.c Mon Jan 4 15:08:17 1999
+++ linux/fs/ntfs/fs.c Fri Mar 19 08:07:34 1999
@@ -505,6 +505,7 @@
X #endif
X r->i_mode &= ~vol->umask;
X
+ insert_inode_hash(r);
X d_instantiate(d,r);
X return 0;
X fail:
@@ -567,6 +568,7 @@
X #endif
X r->i_mode &= ~vol->umask;
X
+ insert_inode_hash(r);
X d_instantiate(d, r);
X error = 0;
X out:
diff -u --recursive --new-file v2.2.3/linux/fs/open.c linux/fs/open.c
--- v2.2.3/linux/fs/open.c Tue Feb 23 15:21:34 1999
+++ linux/fs/open.c Mon Mar 22 10:04:44 1999
@@ -751,12 +751,7 @@
X */
X asmlinkage int sys_creat(const char * pathname, int mode)
X {
- int ret;
-
- lock_kernel();
- ret = sys_open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);
- unlock_kernel();
- return ret;
+ return sys_open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);
X }
X
X #endif
@@ -781,7 +776,7 @@
X * "id" is the POSIX thread ID. We use the
X * files pointer for this..
X */
-int close_fp(struct file *filp, fl_owner_t id)
+int filp_close(struct file *filp, fl_owner_t id)
X {
X int retval;
X struct dentry *dentry = filp->f_dentry;
@@ -817,7 +812,7 @@
X files->fd[fd] = NULL;
X put_unused_fd(fd);
X FD_CLR(fd, &files->close_on_exec);
- error = close_fp(filp, files);
+ error = filp_close(filp, files);
X }
X unlock_kernel();
X return error;
diff -u --recursive --new-file v2.2.3/linux/fs/proc/array.c linux/fs/proc/array.c
--- v2.2.3/linux/fs/proc/array.c Wed Mar 10 15:29:49 1999
+++ linux/fs/proc/array.c Wed Mar 10 21:49:10 1999
@@ -550,7 +550,23 @@
X } while (count++ < 16);
X }
X #elif defined(__powerpc__)
- return (p->tss.wchan);
+ {
+ unsigned long ip, sp;
+ unsigned long stack_page = (unsigned long) p;
+ int count = 0;
+
+ sp = p->tss.ksp;
+ do {
+ sp = *(unsigned long *)sp;
+ if (sp < stack_page || sp >= stack_page + 8188)
+ return 0;
+ if (count > 0) {
+ ip = *(unsigned long *)(sp + 4);
+ if (ip < first_sched || ip >= last_sched)
+ return ip;
+ }
+ } while (count++ < 16);
+ }
X #elif defined (CONFIG_ARM)
X {
X unsigned long fp, lr;
diff -u --recursive --new-file v2.2.3/linux/fs/sysv/ialloc.c linux/fs/sysv/ialloc.c
--- v2.2.3/linux/fs/sysv/ialloc.c Fri Oct 23 22:01:22 1998
+++ linux/fs/sysv/ialloc.c Sun Mar 21 07:11:37 1999
@@ -86,6 +86,7 @@
X return;
X }
X raw_inode = (struct sysv_inode *) bh->b_data + ((ino-1) & sb->sv_inodes_per_block_1);
+ clear_inode(inode);
X lock_super(sb);
X if (*sb->sv_sb_fic_count < sb->sv_fic_size)
X *sv_sb_fic_inode(sb,(*sb->sv_sb_fic_count)++) = ino;
@@ -97,7 +98,6 @@
X mark_buffer_dirty(bh, 1);
X unlock_super(sb);
X brelse(bh);
- clear_inode(inode);
X }
X
X struct inode * sysv_new_inode(const struct inode * dir)
diff -u --recursive --new-file v2.2.3/linux/fs/sysv/inode.c linux/fs/sysv/inode.c
--- v2.2.3/linux/fs/sysv/inode.c Thu Dec 31 10:29:02 1998
+++ linux/fs/sysv/inode.c Sun Mar 21 07:11:37 1999
@@ -55,10 +55,8 @@
X }
X #endif
X
-void sysv_put_inode(struct inode *inode)
+static void sysv_delete_inode(struct inode *inode)
X {
- if (inode->i_nlink)
- return;
X inode->i_size = 0;
X sysv_truncate(inode);
X sysv_free_inode(inode);
@@ -68,8 +66,8 @@
X static struct super_operations sysv_sops = {
X sysv_read_inode,
X sysv_write_inode,
- sysv_put_inode,
- NULL, /* delete_inode */
+ NULL, /* nothing special on put_inode() */
+ sysv_delete_inode,
X sysv_notify_change,
X sysv_put_super,
X sysv_write_super,
diff -u --recursive --new-file v2.2.3/linux/fs/sysv/namei.c linux/fs/sysv/namei.c
--- v2.2.3/linux/fs/sysv/namei.c Thu Dec 31 10:29:02 1998
+++ linux/fs/sysv/namei.c Sun Mar 21 20:52:44 1999
@@ -576,6 +576,7 @@
X oldinode->i_nlink++;
X oldinode->i_ctime = CURRENT_TIME;
X mark_inode_dirty(oldinode);
+ oldinode->i_count++;
X d_instantiate(dentry, oldinode);
X return 0;
X }
diff -u --recursive --new-file v2.2.3/linux/include/asm-alpha/cache.h linux/include/asm-alpha/cache.h
--- v2.2.3/linux/include/asm-alpha/cache.h Mon Jan 12 14:51:14 1998
+++ linux/include/asm-alpha/cache.h Mon Mar 15 16:11:55 1999
@@ -8,5 +8,6 @@
X read-allocate, direct-mapped, physical. */
X #define L1_CACHE_BYTES 32
X #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
+#define SMP_CACHE_BYTES L1_CACHE_BYTES
X
X #endif
diff -u --recursive --new-file v2.2.3/linux/include/asm-alpha/pgtable.h linux/include/asm-alpha/pgtable.h
--- v2.2.3/linux/include/asm-alpha/pgtable.h Thu Dec 31 10:29:02 1998
+++ linux/include/asm-alpha/pgtable.h Wed Mar 10 18:11:51 1999
@@ -651,5 +651,6 @@
X
X /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
X #define PageSkip(page) (0)
+#define kern_addr_valid(addr) (1)
X
X #endif /* _ALPHA_PGTABLE_H */
diff -u --recursive --new-file v2.2.3/linux/include/asm-alpha/semaphore-helper.h linux/include/asm-alpha/semaphore-helper.h
--- v2.2.3/linux/include/asm-alpha/semaphore-helper.h Wed Mar 10 15:29:49 1999
+++ linux/include/asm-alpha/semaphore-helper.h Fri Mar 19 08:06:56 1999
@@ -73,7 +73,10 @@
X ret = 1;
X }
X else if (pending) {
- tmp += 1;
+ // Since -1 + 1 carries into the high word, we have
+ // to be more careful adding 1 here.
+ tmp = (tmp & 0xffffffff00000000)
+ | ((tmp + 1) & 0x00000000ffffffff;
X ret = -EINTR;
X }
X else {
@@ -89,11 +92,13 @@
X __asm__ __volatile__(
X "1: ldq_l %1,%4\n"
X " lda %0,0\n"
- " addq %1,1,%2\n"
- " ldah %3,0x8000(%1)\n"
X " cmovne %5,%6,%0\n"
- " ldah %3,0x8000(%3)\n"
+ " addq %1,1,%2\n"
+ " and %1,%7,%3\n"
+ " andnot %2,%7,%2\n"
X " cmovge %1,1,%0\n"
+ " or %3,%2,%2\n"
+ " addq %1,%7,%3\n"
X " cmovne %5,%2,%1\n"
X " cmovge %2,%3,%1\n"
X " stq_c %1,%4\n"
@@ -103,7 +108,8 @@
X "3: br 1b\n"
X ".previous"
X : "=&r"(ret), "=&r"(tmp), "=&r"(tmp2), "=&r"(tmp3), "=m"(*sem)
- : "r"(signal_pending(tsk)), "r"(-EINTR));
+ : "r"(signal_pending(tsk)), "r"(-EINTR),
+ "r"(0xffffffff00000000));
X
X return ret;
X }
diff -u --recursive --new-file v2.2.3/linux/include/asm-alpha/semaphore.h linux/include/asm-alpha/semaphore.h
--- v2.2.3/linux/include/asm-alpha/semaphore.h Wed Mar 10 15:29:49 1999
+++ linux/include/asm-alpha/semaphore.h Sun Mar 21 20:53:46 1999
@@ -141,8 +141,8 @@
X " subq %1,1,%1\n"
X " blt %2,2f\n"
X " blt %1,2f\n"
- " ldah %1,0x8000(%1)\n"
- " ldah %1,0x8000(%1)\n"
+ " ldah %1,-32768(%1)\n"
+ " ldah %1,-32768(%1)\n"
X " lda %0,1\n"
X " stq_c %1,%3\n"
X " beq %1,3f\n"
diff -u --recursive --new-file v2.2.3/linux/include/asm-alpha/sysinfo.h linux/include/asm-alpha/sysinfo.h
--- v2.2.3/linux/include/asm-alpha/sysinfo.h Wed Apr 23 19:01:27 1997
+++ linux/include/asm-alpha/sysinfo.h Sun Mar 21 20:53:46 1999
@@ -11,6 +11,8 @@
X #define GSI_UACPROC 8
X #define GSI_IEEE_FP_CONTROL 45
X #define GSI_IEEE_STATE_AT_SIGNAL 46
+#define GSI_PROC_TYPE 60
+#define GSI_GET_HWRPB 101
X
X #define SSI_NVPAIRS 1
X #define SSI_IEEE_FP_CONTROL 14
diff -u --recursive --new-file v2.2.3/linux/include/asm-arm/cache.h linux/include/asm-arm/cache.h
--- v2.2.3/linux/include/asm-arm/cache.h Tue Jan 20 16:39:42 1998
+++ linux/include/asm-arm/cache.h Mon Mar 15 16:11:55 1999
@@ -6,5 +6,6 @@
X
X #define L1_CACHE_BYTES 32
X #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
+#define SMP_CACHE_BYTES L1_CACHE_BYTES
X
X #endif
diff -u --recursive --new-file v2.2.3/linux/include/asm-arm/pgtable.h linux/include/asm-arm/pgtable.h
--- v2.2.3/linux/include/asm-arm/pgtable.h Wed Sep 9 14:51:12 1998
+++ linux/include/asm-arm/pgtable.h Wed Mar 10 18:11:51 1999
@@ -11,5 +11,6 @@
X
X /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
X #define PageSkip(page) (0)
+#define kern_addr_valid(addr) (1)
X
X #endif /* _ASMARM_PGTABLE_H */
diff -u --recursive --new-file v2.2.3/linux/include/asm-i386/cache.h linux/include/asm-i386/cache.h
--- v2.2.3/linux/include/asm-i386/cache.h Sun Jan 26 02:07:46 1997
+++ linux/include/asm-i386/cache.h Mon Mar 15 16:11:55 1999
@@ -13,4 +13,6 @@
X
X #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
X
+#define SMP_CACHE_BYTES L1_CACHE_BYTES
+
X #endif
diff -u --recursive --new-file v2.2.3/linux/include/asm-i386/pgtable.h linux/include/asm-i386/pgtable.h
--- v2.2.3/linux/include/asm-i386/pgtable.h Fri Jan 1 12:58:21 1999
+++ linux/include/asm-i386/pgtable.h Tue Mar 23 13:54:15 1999
@@ -594,5 +594,6 @@
X
X /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
X #define PageSkip(page) (0)
+#define kern_addr_valid(addr) (1)
X
X #endif /* _I386_PAGE_H */
diff -u --recursive --new-file v2.2.3/linux/include/asm-m68k/cache.h linux/include/asm-m68k/cache.h
--- v2.2.3/linux/include/asm-m68k/cache.h Wed Apr 23 19:01:27 1997
+++ linux/include/asm-m68k/cache.h Mon Mar 15 16:11:55 1999
@@ -9,4 +9,6 @@
X
X #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
X
+#define SMP_CACHE_BYTES L1_CACHE_BYTES
+
X #endif
diff -u --recursive --new-file v2.2.3/linux/include/asm-m68k/pgtable.h linux/include/asm-m68k/pgtable.h
--- v2.2.3/linux/include/asm-m68k/pgtable.h Wed Jan 20 23:14:06 1999
+++ linux/include/asm-m68k/pgtable.h Wed Mar 10 18:11:51 1999
@@ -813,5 +813,6 @@
X
X /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
X #define PageSkip(page) (0)
+#define kern_addr_valid(addr) (1)
X
X #endif /* _M68K_PGTABLE_H */
diff -u --recursive --new-file v2.2.3/linux/include/asm-mips/cache.h linux/include/asm-mips/cache.h
--- v2.2.3/linux/include/asm-mips/cache.h Thu Jun 26 12:33:39 1997
+++ linux/include/asm-mips/cache.h Mon Mar 15 16:11:55 1999
@@ -9,4 +9,6 @@
X
X #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
X
+#define SMP_CACHE_BYTES L1_CACHE_BYTES
+
X #endif /* __ASM_MIPS_CACHE_H */
diff -u --recursive --new-file v2.2.3/linux/include/asm-mips/pgtable.h linux/include/asm-mips/pgtable.h
--- v2.2.3/linux/include/asm-mips/pgtable.h Fri Oct 23 22:01:23 1998
+++ linux/include/asm-mips/pgtable.h Wed Mar 10 18:11:51 1999
@@ -1,4 +1,4 @@
-/* $Id: pgtable.h,v 1.15 1998/08/20 14:40:57 ralf Exp $
+/* $Id: pgtable.h,v 1.19 1998/10/26 19:59:39 davem Exp $
X *
X * This file is subject to the terms and conditions of the GNU General Public
X * License. See the file "COPYING" in the main directory of this archive
@@ -589,6 +589,7 @@
X
X /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
X #define PageSkip(page) (0)
+#define kern_addr_valid(addr) (1)
X
X /* TLB operations. */
X extern inline void tlb_probe(void)
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/adb.h linux/include/asm-ppc/adb.h
--- v2.2.3/linux/include/asm-ppc/adb.h Thu Nov 19 09:56:29 1998
+++ linux/include/asm-ppc/adb.h Wed Mar 10 21:30:32 1999
@@ -60,6 +60,9 @@
X void (*handler)(unsigned char *, int, struct pt_regs *, int));
X void adb_input(unsigned char *, int, struct pt_regs *, int);
X
+int adb_try_handler_change(int address, int new_id);
+int adb_get_infos(int address, int *original_address, int *handler_id);
+
X #endif /* __KERNEL__ */
X
X #endif /* __PPC_ADB_H */
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/bootx.h linux/include/asm-ppc/bootx.h
--- v2.2.3/linux/include/asm-ppc/bootx.h Mon Oct 5 13:13:43 1998
+++ linux/include/asm-ppc/bootx.h Wed Mar 10 21:30:32 1999
@@ -18,7 +18,14 @@
X #pragma options align=power
X #endif
X
-#define BOOT_INFO_VERSION 1
+/* On boostrap entry:
+ *
+ * r3 = 0x426f6f58 ('BooX')
+ * r4 = pointer to boot_infos
+ * r5 = NULL
+ */
+
+#define BOOT_INFO_VERSION 2
X #define BOOT_INFO_COMPATIBLE_VERSION 1
X
X /* Here are the boot informations that are passed to the bootstrap
@@ -31,8 +38,12 @@
X /* backward compatible down to version: */
X unsigned long compatible_version;
X
+ /* NEW (vers. 2) this holds the current _logical_ base addr of
+ the frame buffer (for use by early boot message) */
+ unsigned char* logicalDisplayBase;
+
X /* Set to 0 by current BootX */
- unsigned long unused[3];
+ unsigned long unused[2];
X
X /* The device tree (internal addresses relative to the beginning of the tree,
X * device tree offset relative to the beginning of this structure). */
@@ -55,17 +66,18 @@
X
X /* Kernel command line arguments (offset from this structure) */
X unsigned long kernelParamsOffset;
-
+
X } boot_infos_t;
X
X /* (*) The format of the colormap is 256 * 3 * 2 bytes. Each color index is represented
X * by 3 short words containing a 16 bits (unsigned) color component.
X * Later versions may contain the gamma table for direct-color devices here.
X */
-#define BOOTX_COLORTABLE_SIZE (256UL*3UL*2UL);
+#define BOOTX_COLORTABLE_SIZE (256UL*3UL*2UL)
X
X #ifdef macintosh
X #pragma options align=reset
X #endif
X
X #endif
+
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/cache.h linux/include/asm-ppc/cache.h
--- v2.2.3/linux/include/asm-ppc/cache.h Mon Oct 5 13:13:43 1998
+++ linux/include/asm-ppc/cache.h Fri Mar 19 10:50:51 1999
@@ -13,7 +13,11 @@
X #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
X #define L1_CACHE_PAGES 8
X
+#define SMP_CACHE_BYTES L1_CACHE_BYTES
+
X #if defined(__KERNEL__) && !defined(__ASSEMBLY__)
+extern void flush_dcache_range(unsigned long start, unsigned long stop);
+
X static inline unsigned long unlock_dcache(void)
X {
X #ifndef CONFIG_8xx
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/dma.h linux/include/asm-ppc/dma.h
--- v2.2.3/linux/include/asm-ppc/dma.h Fri Jan 8 22:36:24 1999
+++ linux/include/asm-ppc/dma.h Fri Mar 19 10:50:09 1999
@@ -223,15 +223,47 @@
X /* enable/disable a specific DMA channel */
X static __inline__ void enable_dma(unsigned int dmanr)
X {
+ /*
+ * The Radstone PPC2 and PPC2a boards have inverted DREQ
+ * lines (active low) so each command needs to be logically
+ * ORed with 0x40
+ */
+ unsigned char ucDmaCmd=0x00;
+
+ if(_prep_type==_PREP_Radstone)
+ {
+ switch(ucSystemType)
+ {
+ case RS_SYS_TYPE_PPC2:
+ case RS_SYS_TYPE_PPC2a:
+ case RS_SYS_TYPE_PPC2ep:
+ {
+ /*
+ * DREQ lines are active low
+ */
+ ucDmaCmd=0x40;
+ break;
+ }
+
+ default:
+ {
+ /*
+ * DREQ lines are active high
+ */
+ break;
+ }
+ }
+ }
+
X if (dmanr != 4)
X {
X dma_outb(0, DMA2_MASK_REG); /* This may not be enabled */
- dma_outb(0, DMA2_CMD_REG); /* Enable group */
+ dma_outb(ucDmaCmd, DMA2_CMD_REG); /* Enable group */
X }
X if (dmanr<=3)
X {
X dma_outb(dmanr, DMA1_MASK_REG);
- dma_outb(0, DMA1_CMD_REG); /* Enable group */
+ dma_outb(ucDmaCmd, DMA1_CMD_REG); /* Enable group */
X } else
X {
X dma_outb(dmanr & 3, DMA2_MASK_REG);
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/feature.h linux/include/asm-ppc/feature.h
--- v2.2.3/linux/include/asm-ppc/feature.h Thu Nov 19 09:56:29 1998
+++ linux/include/asm-ppc/feature.h Wed Mar 10 21:30:32 1999
@@ -35,7 +35,6 @@
X FEATURE_Mediabay_floppy_enable,
X FEATURE_BMac_reset,
X FEATURE_BMac_IO_enable,
- FEATURE_Modem_PowerOn,
X FEATURE_Modem_Reset,
X FEATURE_last,
X };
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/ide.h linux/include/asm-ppc/ide.h
--- v2.2.3/linux/include/asm-ppc/ide.h Fri Jan 8 22:36:24 1999
+++ linux/include/asm-ppc/ide.h Wed Mar 10 21:30:32 1999
@@ -12,79 +12,85 @@
X #define __ASMPPC_IDE_H
X
X #include <linux/config.h>
+/*
+ * On APUS, nearly everything comes from the m68k file
+ * -- Cort
+ */
X #ifdef CONFIG_APUS
X #include <linux/hdreg.h>
-
X #define ide_init_hwif_ports m68k_ide_init_hwif_ports
X #include <asm-m68k/ide.h>
X #undef ide_init_hwif_ports
-#undef insw
+#endif /* CONFIG_APUS */
+
+#ifndef MAX_HWIFS
+#define MAX_HWIFS 4
+#endif
+
+typedef unsigned int ide_ioreg_t;
+
+extern int pmac_ide_ports_known;
+extern ide_ioreg_t pmac_ide_regbase[MAX_HWIFS];
+extern int pmac_ide_irq[MAX_HWIFS];
+extern void pmac_ide_probe(void);
+
+extern int chrp_ide_ports_known;
+extern ide_ioreg_t chrp_ide_regbase[MAX_HWIFS];
+extern ide_ioreg_t chrp_idedma_regbase; /* one for both channels */
+extern unsigned int chrp_ide_irq;
+extern void chrp_ide_probe(void);
X
X void ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
+void prep_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
+void mbx_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
+void pmac_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
+void chrp_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
X void ide_insw(ide_ioreg_t port, void *buf, int ns);
X void ide_outsw(ide_ioreg_t port, void *buf, int ns);
-#define insw(port, buf, ns) do { \
- if ( _machine != _MACH_Pmac && _machine != _MACH_apus ) \
+
+#undef insw
+#define insw(port, buf, ns) do { \
+ if ( _machine & (_MACH_chrp|_MACH_mbx) ) \
+ ide_insw((port)+_IO_BASE, (buf), (ns)); \
+ else if ( _machine & (_MACH_Pmac|_MACH_apus) ) \
+ ide_insw((port), (buf), (ns)); \
+ else \
X /* this must be the same as insw in io.h!! */ \
X _insw((unsigned short *)((port)+_IO_BASE), (buf), (ns)); \
- else \
- ide_insw((port), (buf), (ns)); \
X } while (0)
+
X #undef outsw
-#define outsw(port, buf, ns) do { \
- if ( _machine != _MACH_Pmac && _machine != _MACH_apus ) \
+#define outsw(port, buf, ns) do { \
+ if ( _machine & (_MACH_chrp|_MACH_mbx) ) \
+ ide_outsw((port)+_IO_BASE, (buf), (ns)); \
+ else if ( _machine & (_MACH_Pmac|_MACH_apus) ) \
+ ide_outsw((port), (buf), (ns)); \
+ else \
X /* this must be the same as outsw in io.h!! */ \
X _outsw((unsigned short *)((port)+_IO_BASE), (buf), (ns)); \
- else \
- ide_outsw((port), (buf), (ns)); \
X } while (0)
-#else /* CONFIG_APUS */
X
+#ifndef CONFIG_APUS
X #ifdef __KERNEL__
X
X #include <linux/hdreg.h>
X #include <linux/ioport.h>
-#include <asm/io.h> /* so we can redefine insw/outsw */
-
-#ifndef MAX_HWIFS
-#define MAX_HWIFS 4
-#endif
+#include <asm/io.h>
X
X #undef SUPPORT_SLOW_DATA_PORTS
X #define SUPPORT_SLOW_DATA_PORTS 0
X #undef SUPPORT_VLB_SYNC
X #define SUPPORT_VLB_SYNC 0
X
-
X #define ide__sti() __sti()
X
-typedef unsigned int ide_ioreg_t;
-void ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
-void prep_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
-void mbx_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
-void pmac_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
-void chrp_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);
-
-extern int pmac_ide_ports_known;
-extern ide_ioreg_t pmac_ide_regbase[MAX_HWIFS];
-extern int pmac_ide_irq[MAX_HWIFS];
-extern void pmac_ide_probe(void);
-
-extern int chrp_ide_ports_known;
-extern ide_ioreg_t chrp_ide_regbase[MAX_HWIFS];
-extern ide_ioreg_t chrp_idedma_regbase; /* one for both channels */
-extern unsigned int chrp_ide_irq;
-extern void chrp_ide_probe(void);
-
X static __inline__ int ide_default_irq(ide_ioreg_t base)
X {
X if ( _machine == _MACH_Pmac )
X return 0;
X else if ( _machine == _MACH_mbx )
- /* hardcode IRQ 14 on the MBX */
- return 14+16;
+ /* IRQ 14 when in legacy mode on MBX */
+ return 14;
X else if ( _machine == _MACH_chrp) {
X if (chrp_ide_ports_known == 0)
X chrp_ide_probe();
@@ -149,7 +155,7 @@
X (Despite what it says in drivers/block/ide.h, they come up as little endian...)
X Changes to linux/hdreg.h may require changes here. */
X static __inline__ void ide_fix_driveid (struct hd_driveid *id) {
- if (( _machine == _MACH_Pmac ) || (_machine == _MACH_chrp)|| (_machine == _MACH_mbx) ) {
+ if ( _machine & (_MACH_chrp|_MACH_mbx|_MACH_Pmac) ) { \
X int i;
X unsigned short *stringcast;
X id->config = __le16_to_cpu(id->config);
@@ -255,45 +261,17 @@
X }
X }
X
-#undef insw
-#define insw(port, buf, ns) do { \
- if ( _machine == _MACH_chrp) {\
- ide_insw((port)+_IO_BASE, (buf), (ns)); \
- }\
- else if ( (_machine == _MACH_Pmac) || (_machine == _MACH_mbx) ) \
- ide_insw((port)+((_machine==_MACH_mbx)? 0x80000000: 0), \
- (buf), (ns)); \
- else \
- /* this must be the same as insw in io.h!! */ \
- _insw((unsigned short *)((port)+_IO_BASE), (buf), (ns)); \
-} while (0)
-#undef outsw
-/* printk("port: %x buf: %p ns: %d\n",port,buf,ns); \ */
-#define outsw(port, buf, ns) do { \
- if ( _machine == _MACH_chrp) {\
- ide_outsw((port)+_IO_BASE, (buf), (ns)); \
- }\
- else if ( (_machine == _MACH_Pmac) || (_machine == _MACH_mbx) ) \
- ide_outsw((port)+((_machine==_MACH_mbx)? 0x80000000: 0), \
- (buf), (ns)); \
- else \
- /* this must be the same as outsw in io.h!! */ \
- _outsw((unsigned short *)((port)+_IO_BASE), (buf), (ns)); \
-} while (0)
-
X #undef inb
X #define inb(port) \
X in_8((unsigned char *)((port) + \
- ((_machine==_MACH_Pmac)? 0: _IO_BASE) + \
- ((_machine==_MACH_mbx)? 0x80000000: 0)) )
+ ((_machine==_MACH_Pmac)? 0: _IO_BASE) ) )
X #undef inb_p
X #define inb_p(port) inb(port)
X
X #undef outb
X #define outb(val, port) \
X out_8((unsigned char *)((port) + \
- ((_machine==_MACH_Pmac)? 0: _IO_BASE) + \
- ((_machine==_MACH_mbx)? 0x80000000: 0)), (val) )
+ ((_machine==_MACH_Pmac)? 0: _IO_BASE) ), (val) )
X #undef outb_p
X #define outb_p(val, port) outb(val, port)
X
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/io.h linux/include/asm-ppc/io.h
--- v2.2.3/linux/include/asm-ppc/io.h Tue Dec 22 14:16:58 1998
+++ linux/include/asm-ppc/io.h Wed Mar 10 21:30:32 1999
@@ -7,17 +7,9 @@
X
X #define KERNELBASE 0xc0000000
X
-/* from the Carolina Technical Spec -- Cort */
-#define IBM_ACORN 0x82A
X #define SIO_CONFIG_RA 0x398
X #define SIO_CONFIG_RD 0x399
X
-#define IBM_HDD_LED 0x808
-#define IBM_EQUIP_PRESENT 0x80c
-#define IBM_L2_STATUS 0x80d
-#define IBM_L2_INVALIDATE 0x814
-#define IBM_SYS_CTL 0x81c
-
X #define SLOW_DOWN_IO
X
X #define PMAC_ISA_MEM_BASE 0
@@ -27,11 +19,10 @@
X #define CHRP_PCI_DRAM_OFFSET 0
X #define PREP_ISA_IO_BASE 0x80000000
X #define PREP_ISA_MEM_BASE 0xd0000000
-/*#define PREP_ISA_MEM_BASE 0xc0000000*/
X #define PREP_PCI_DRAM_OFFSET 0x80000000
X
X #ifdef CONFIG_MBX
-#define _IO_BASE 0
+#define _IO_BASE 0x80000000
X #define _ISA_MEM_BASE 0
X #define PCI_DRAM_OFFSET 0x80000000
X #else /* CONFIG_MBX8xx */
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/irq.h linux/include/asm-ppc/irq.h
--- v2.2.3/linux/include/asm-ppc/irq.h Thu Nov 19 09:56:29 1998
+++ linux/include/asm-ppc/irq.h Wed Mar 10 21:30:32 1999
@@ -5,6 +5,9 @@
X
X #include <asm/processor.h> /* for is_prep() */
X
+extern void disable_irq(unsigned int);
+extern void enable_irq(unsigned int);
+
X #ifndef CONFIG_8xx
X
X #ifdef CONFIG_APUS
@@ -31,9 +34,6 @@
X #define irq_to_openpic(n) ((n)-NUM_8259_INTERRUPTS)
X #define IRQ_8259_CASCADE NUM_8259_INTERRUPTS
X
-extern void disable_irq(unsigned int);
-extern void enable_irq(unsigned int);
-
X #ifndef CONFIG_APUS
X /*
X * This gets called from serial.c, which is now used on
@@ -54,28 +54,26 @@
X * There are eight external interrupts (IRQs) that can be configured
X * as either level or edge sensitive.
X * On the MBX implementation, there is also the possibility of an 8259
- * through the PCI and PCI-ISA bridges. All 8259 interrupts appear
- * on the 8xx as IRQ3, but I may eventually add some of the 8259 code
- * back into this port to handle that controller.
+ * through the PCI and PCI-ISA bridges.
X */
-#define NR_IRQS 16
+#define NR_IRQS (16+16) /* 8259 has 16, too -- Cort */
X
-#define SIU_IRQ0 0 /* Highest priority */
-#define SIU_LEVEL0 1
-#define SIU_IRQ1 2
-#define SIU_LEVEL1 3
-#define SIU_IRQ2 4
-#define SIU_LEVEL2 5
-#define SIU_IRQ3 6
-#define SIU_LEVEL3 7
-#define SIU_IRQ4 8
-#define SIU_LEVEL4 9
-#define SIU_IRQ5 10
-#define SIU_LEVEL5 11
-#define SIU_IRQ6 12
-#define SIU_LEVEL6 13
-#define SIU_IRQ7 14
-#define SIU_LEVEL7 15
+#define SIU_IRQ0 (0+16) /* Highest priority */
+#define SIU_LEVEL0 (1+16)
+#define SIU_IRQ1 (2+16)
+#define SIU_LEVEL1 (3+16)
+#define SIU_IRQ2 (4+16)
+#define SIU_LEVEL2 (5+16)
+#define SIU_IRQ3 (6+16)
+#define SIU_LEVEL3 (7+16)
+#define SIU_IRQ4 (8+16)
+#define SIU_LEVEL4 (9+16)
+#define SIU_IRQ5 (10+16)
+#define SIU_LEVEL5 (11+16)
+#define SIU_IRQ6 (12+16)
+#define SIU_LEVEL6 (13+16)
+#define SIU_IRQ7 (14+16)
+#define SIU_LEVEL7 (15+16)
X
X /* The internal interrupts we can configure as we see fit.
X * My personal preference is CPM at level 2, which puts it above the
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/keyboard.h linux/include/asm-ppc/keyboard.h
--- v2.2.3/linux/include/asm-ppc/keyboard.h Thu Aug 6 14:06:33 1998
+++ linux/include/asm-ppc/keyboard.h Fri Mar 19 10:50:09 1999
@@ -46,7 +46,7 @@
X
X static inline int kbd_setkeycode(unsigned int scancode, unsigned int keycode)
X {
- if ( is_prep )
+ if ( is_prep || (_machine == _MACH_mbx) )
X return pckbd_setkeycode(scancode,keycode);
X else if ( is_chrp )
X #ifndef CONFIG_MAC_KEYBOARD
@@ -69,7 +69,7 @@
X
X static inline int kbd_getkeycode(unsigned int x)
X {
- if ( is_prep )
+ if ( is_prep || (_machine == _MACH_mbx) )
X return pckbd_getkeycode(x);
X else if ( is_chrp )
X #ifndef CONFIG_MAC_KEYBOARD
@@ -86,7 +86,7 @@
X
X static inline int kbd_pretranslate(unsigned char x,char y)
X {
- if ( is_prep )
+ if ( is_prep || (_machine == _MACH_mbx) )
X return pckbd_pretranslate(x,y);
X else if ( is_chrp )
X #ifndef CONFIG_MAC_KEYBOARD
@@ -104,7 +104,7 @@
X static inline int kbd_translate(unsigned char keycode, unsigned char *keycodep,
X char raw_mode)
X {
- if ( is_prep )
+ if ( is_prep || (_machine == _MACH_mbx) )
X return pckbd_translate(keycode,keycodep,raw_mode);
X else if ( is_chrp )
X #ifndef CONFIG_MAC_KEYBOARD
@@ -122,7 +122,7 @@
X
X static inline int kbd_unexpected_up(unsigned char keycode)
X {
- if ( is_prep )
+ if ( is_prep || (_machine == _MACH_mbx) )
X return pckbd_unexpected_up(keycode);
X else if ( is_chrp )
X #ifndef CONFIG_MAC_KEYBOARD
@@ -140,7 +140,7 @@
X
X static inline void kbd_leds(unsigned char leds)
X {
- if ( is_prep )
+ if ( is_prep || (_machine == _MACH_mbx) )
X pckbd_leds(leds);
X else if ( is_chrp )
X #ifndef CONFIG_MAC_KEYBOARD
@@ -157,7 +157,7 @@
X
X static inline void kbd_init_hw(void)
X {
- if ( is_prep )
+ if ( is_prep || (_machine == _MACH_mbx) )
X pckbd_init_hw();
X else if ( is_chrp )
X #ifndef CONFIG_MAC_KEYBOARD
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/mmu.h linux/include/asm-ppc/mmu.h
--- v2.2.3/linux/include/asm-ppc/mmu.h Thu Apr 23 20:21:37 1998
+++ linux/include/asm-ppc/mmu.h Fri Mar 19 10:50:09 1999
@@ -88,25 +88,6 @@
X P601_BATL batl; /* Lower register */
X } P601_BAT;
X
-/* Block size masks */
-#define BL_128K 0x000
-#define BL_256K 0x001
-#define BL_512K 0x003
-#define BL_1M 0x007
-#define BL_2M 0x00F
-#define BL_4M 0x01F
-#define BL_8M 0x03F
-#define BL_16M 0x07F
-#define BL_32M 0x0FF
-#define BL_64M 0x1FF
-#define BL_128M 0x3FF
-#define BL_256M 0x7FF
-
-/* BAT Access Protection */
-#define BPP_XX 0x00 /* No access */
-#define BPP_RX 0x01 /* Read only */
-#define BPP_RW 0x02 /* Read/write */
-
X /*
X * Simulated two-level MMU. This structure is used by the kernel
X * to keep track of MMU mappings and is used to update/maintain
@@ -135,6 +116,35 @@
X pte **pmap; /* Two-level page-map structure */
X } MMU_context;
X
+/* invalidate a TLB entry */
+extern inline void _tlbie(unsigned long va)
+{
+ asm volatile ("tlbie %0" : : "r"(va));
+}
+
+extern void _tlbia(void); /* invalidate all TLB entries */
+
+#endif /* __ASSEMBLY__ */
+
+/* Block size masks */
+#define BL_128K 0x000
+#define BL_256K 0x001
+#define BL_512K 0x003
+#define BL_1M 0x007
+#define BL_2M 0x00F
+#define BL_4M 0x01F
+#define BL_8M 0x03F
+#define BL_16M 0x07F
+#define BL_32M 0x0FF
+#define BL_64M 0x1FF
+#define BL_128M 0x3FF
+#define BL_256M 0x7FF
+
+/* BAT Access Protection */
+#define BPP_XX 0x00 /* No access */
+#define BPP_RX 0x01 /* Read only */
+#define BPP_RW 0x02 /* Read/write */
+
X /* Used to set up SDR1 register */
X #define HASH_TABLE_SIZE_64K 0x00010000
X #define HASH_TABLE_SIZE_128K 0x00020000
@@ -150,15 +160,6 @@
X #define HASH_TABLE_MASK_1M 0x00F
X #define HASH_TABLE_MASK_2M 0x01F
X #define HASH_TABLE_MASK_4M 0x03F
-
-/* invalidate a TLB entry */
-extern inline void _tlbie(unsigned long va)
-{
- asm volatile ("tlbie %0" : : "r"(va));
-}
-
-extern void _tlbia(void); /* invalidate all TLB entries */
-#endif /* __ASSEMBLY__ */
X
X /* Control/status registers for the MPC8xx.
X * A write operation to these registers causes serialized access.
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/ohare.h linux/include/asm-ppc/ohare.h
--- v2.2.3/linux/include/asm-ppc/ohare.h Thu Apr 23 20:21:37 1998
+++ linux/include/asm-ppc/ohare.h Wed Mar 10 21:30:32 1999
@@ -22,8 +22,8 @@
X #define OH_SCC_ENABLE 0x200
X #define OH_MESH_ENABLE 0x400
X #define OH_FLOPPY_ENABLE 0x800
-#define OH_SCCA_IO 0x2000
-#define OH_SCCB_IO 0x4000
+#define OH_SCCA_IO 0x4000
+#define OH_SCCB_IO 0x8000
X #define OH_VIA_ENABLE 0x10000
X #define OH_IDECD_POWER 0x800000
X
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/page.h linux/include/asm-ppc/page.h
--- v2.2.3/linux/include/asm-ppc/page.h Thu Aug 6 14:06:33 1998
+++ linux/include/asm-ppc/page.h Wed Mar 10 21:30:32 1999
@@ -63,9 +63,9 @@
X /* to align the pointer to the (next) page boundary */
X #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
X
-
-#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
+extern void clear_page(unsigned long page);
X #define copy_page(to,from) memcpy((void *)(to), (void *)(from), PAGE_SIZE)
+
X /* map phys->virtual and virtual->phys for RAM pages */
X #ifdef CONFIG_APUS
X #include <asm/amigappc.h>
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/pgtable.h linux/include/asm-ppc/pgtable.h
--- v2.2.3/linux/include/asm-ppc/pgtable.h Fri Jan 8 22:36:24 1999
+++ linux/include/asm-ppc/pgtable.h Wed Mar 10 21:30:32 1999
@@ -359,47 +359,46 @@
X return (pte_t *) pmd_page(*dir) + ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1));
X }
X
-
X /*
X * This is handled very differently on the PPC since out page tables
X * are all 0's and I want to be able to use these zero'd pages elsewhere
X * as well - it gives us quite a speedup.
X *
- * 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
+ * Note that the SMP/UP versions are the same but we don't need a
+ * per cpu list of zero pages because we do the zero-ing with the cache
X * 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
+ * is per-cpu since it isn't done with any lock-free access routines
X * (although I think we need arch-specific routines so I can do lock-free).
X *
X * I need to generalize this so we can use it for other arch's as well.
X * -- Cort
X */
+#ifdef __SMP__
+#define quicklists cpu_data[smp_processor_id()]
+#else
X extern struct pgtable_cache_struct {
X unsigned long *pgd_cache;
X unsigned long *pte_cache;
X 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 */
X } quicklists;
+#endif
X
-#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)
-#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)
+#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 unsigned long *zero_cache; /* head linked list of pre-zero'd pages */
+extern unsigned long zero_sz; /* # currently pre-zero'd pages */
+extern unsigned long zeropage_hits; /* # zero'd pages request that we've done */
+extern unsigned long zeropage_calls; /* # zero'd pages request that've been made */
+extern unsigned long zerototal; /* # pages zero'd over time */
+
+#define zero_quicklist (zero_cache)
+#define zero_cache_sz (zero_sz)
+#define zero_cache_calls (zeropage_calls)
+#define zero_cache_hits (zeropage_hits)
+#define zero_cache_total (zerototal)
X
X /* return a pre-zero'd page from the list, return NULL if none available -- Cort */
X extern unsigned long get_zero_page_fast(void);
@@ -410,8 +409,8 @@
X
X if ( (ret = (pgd_t *)get_zero_page_fast()) == NULL )
X {
- ret = (pgd_t *)__get_free_page(GFP_KERNEL);
- memset (ret, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
+ if ( (ret = (pgd_t *)__get_free_page(GFP_KERNEL)) != NULL )
+ memset (ret, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
X }
X if (ret) {
X init = pgd_offset(&init_mm, 0);
@@ -553,7 +552,7 @@
X /* To pgd_alloc/pgd_free, one holds master kernel lock and so does our callee, so we can
X modify pgd caches of other CPUs as well. -jj */
X for (i = 0; i < NR_CPUS; i++)
- for (pgd = (pgd_t *)cpu_data[i].pgd_quick; pgd; pgd = (pgd_t *)*(unsigned long *)pgd)
+ for (pgd = (pgd_t *)cpu_data[i].pgd_cache; pgd; pgd = (pgd_t *)*(unsigned long *)pgd)
X pgd[address >> PGDIR_SHIFT] = entry;
X #endif
X }
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/pmu.h linux/include/asm-ppc/pmu.h
--- v2.2.3/linux/include/asm-ppc/pmu.h Thu Nov 19 09:56:29 1998
+++ linux/include/asm-ppc/pmu.h Wed Mar 10 21:30:32 1999
@@ -9,7 +9,7 @@
X /*
X * PMU commands
X */
-#define PMU_BACKLIGHT_CTRL 0x11 /* control backlight */
+#define PMU_POWER_CTRL 0x11 /* control power of some devices */
X #define PMU_ADB_CMD 0x20 /* send ADB packet */
X #define PMU_ADB_POLL_OFF 0x21 /* disable ADB auto-poll */
X #define PMU_WRITE_NVRAM 0x33 /* write non-volatile RAM */
@@ -29,6 +29,12 @@
X #define PMU_GET_BRIGHTBUTTON 0xd9 /* report brightness up/down pos */
X #define PMU_GET_COVER 0xdc /* report cover open/closed */
X
+/* Bits to use with the PMU_POWER_CTRL command */
+#define PMU_POW_ON 0x80 /* OR this to power ON the device */
+#define PMU_POW_OFF 0x00 /* leave bit 7 to 0 to power it OFF */
+#define PMU_POW_BACKLIGHT 0x01 /* backlight power */
+#define PMU_POW_IRLED 0x04 /* IR led power (on wallstreet) ??? */
+
X /* Bits in PMU interrupt and interrupt mask bytes */
X #define PMU_INT_ADB_AUTO 0x04 /* ADB autopoll, when PMU_INT_ADB */
X #define PMU_INT_PCEJECT 0x04 /* PC-card eject buttons */
@@ -36,13 +42,26 @@
X #define PMU_INT_ADB 0x10 /* ADB autopoll or reply data */
X #define PMU_INT_TICK 0x80 /* 1-second tick interrupt */
X
+/* Kind of PMU (model) */
+enum {
+ PMU_UNKNOWN,
+ PMU_OHARE_BASED,
+ PMU_HEATHROW_BASED
+};
X
X /*
X * Ioctl commands for the /dev/pmu device
X */
X #include <linux/ioctl.h>
X
+/* no param */
X #define PMU_IOC_SLEEP _IO('B', 0)
+/* out param: u32* backlight value: 0 to 31 */
+#define PMU_IOC_GET_BACKLIGHT _IOR('B', 1, sizeof(__u32*))
+/* in param: u32 backlight value: 0 to 31 */
+#define PMU_IOC_SET_BACKLIGHT _IOW('B', 2, sizeof(__u32))
+/* out param: u32* backlight value: 0 to 31 */
+#define PMU_IOC_GET_MODEL _IOR('B', 3, sizeof(__u32*))
X
X #ifdef __KERNEL__
X void find_via_pmu(void);
@@ -53,9 +72,14 @@
X void pmu_poll(void);
X
X void pmu_enable_backlight(int on);
+void pmu_set_brightness(int level);
+
+void pmu_enable_irled(int on);
X
X void pmu_restart(void);
X void pmu_shutdown(void);
+
+int pmu_get_model(void);
X
X /*
X * Stuff for putting the powerbook to sleep and waking it again.
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/posix_types.h linux/include/asm-ppc/posix_types.h
--- v2.2.3/linux/include/asm-ppc/posix_types.h Thu Aug 6 14:06:33 1998
+++ linux/include/asm-ppc/posix_types.h Fri Mar 19 10:50:09 1999
@@ -43,7 +43,7 @@
X
X #else /* __GNUC__ */
X
-#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ <= 2)
X /* With GNU C, use inline functions instead so args are evaluated only once: */
X
X #undef __FD_SET
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/processor.h linux/include/asm-ppc/processor.h
--- v2.2.3/linux/include/asm-ppc/processor.h Tue Jan 19 11:32:53 1999
+++ linux/include/asm-ppc/processor.h Fri Mar 19 10:50:09 1999
@@ -60,21 +60,36 @@
X #define FPSCR_FEX (1<<30)
X
X #define _MACH_prep 1
-#define _MACH_Pmac 2 /* pmac or pmac clone (non-chrp) */
-#define _MACH_chrp 4 /* chrp machine */
-#define _MACH_mbx 8 /* Motorola MBX board */
-#define _MACH_apus 16 /* amiga with phase5 powerup */
-#define _MACH_fads 32 /* Motorola FADS board */
+#define _MACH_Pmac 2 /* pmac or pmac clone (non-chrp) */
+#define _MACH_chrp 4 /* chrp machine */
+#define _MACH_mbx 8 /* Motorola MBX board */
+#define _MACH_apus 16 /* amiga with phase5 powerup */
+#define _MACH_fads 32 /* Motorola FADS board */
+#define _MACH_rpxlite 64 /* RPCG RPX-Lite 8xx board */
+#define _MACH_bseip 128 /* Bright Star Engineering ip-Engine */
+#define _MACH_yk 256 /* Motorola Yellowknife */
X
X /* see residual.h for these */
X #define _PREP_Motorola 0x01 /* motorola prep */
X #define _PREP_Firm 0x02 /* firmworks prep */
X #define _PREP_IBM 0x00 /* ibm prep */
X #define _PREP_Bull 0x03 /* bull prep */
+#define _PREP_Radstone 0x04 /* Radstone Technology PLC prep */
+
+/*
+ * Radstone board types
+ */
+#define RS_SYS_TYPE_PPC1 0
+#define RS_SYS_TYPE_PPC2 1
+#define RS_SYS_TYPE_PPC1a 2
+#define RS_SYS_TYPE_PPC2a 3
+#define RS_SYS_TYPE_PPC4 4
+#define RS_SYS_TYPE_PPC4a 5
+#define RS_SYS_TYPE_PPC2ep 6
X
X /* these are arbitrary */
X #define _CHRP_Motorola 0x04 /* motorola chrp, the cobra */
-#define _CHRP_IBM 0x05 /* IBM chrp, the longtrail and longtrail 2 */
+#define _CHRP_IBM 0x05 /* IBM chrp, the longtrail and longtrail 2 */
X
X #define _GLOBAL(n)\
X .globl n;\
@@ -224,6 +239,13 @@
X
X /* what kind of prep workstation we are */
X extern int _prep_type;
+/*
+ * This is used to identify the board type from a given PReP board
+ * vendor. Board revision is also made available.
+ */
+extern unsigned char ucSystemType;
+extern unsigned char ucBoardRev;
+extern unsigned char ucBoardRevMaj, ucBoardRevMin;
X
X struct task_struct;
X void start_thread(struct pt_regs *regs, unsigned long nip, unsigned long sp);
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/semaphore-helper.h linux/include/asm-ppc/semaphore-helper.h
--- v2.2.3/linux/include/asm-ppc/semaphore-helper.h Wed Dec 31 16:00:00 1969
+++ linux/include/asm-ppc/semaphore-helper.h Wed Mar 10 21:30:32 1999
@@ -0,0 +1,107 @@
+#ifndef _PPC_SEMAPHORE_HELPER_H
+#define _PPC_SEMAPHORE_HELPER_H
+
+/*
+ * SMP- and interrupt-safe semaphores..
+ *
+ * (C) Copyright 1996 Linus Torvalds
+ * Adapted for PowerPC by Gary Thomas and Paul Mackerras
+ */
+
+#include <asm/atomic.h>
+
+/*
+ * These two (wake_one_more and waking_non_zero) _must_ execute
+ * atomically wrt each other.
+ *
+ * This is trivially done with load with reservation and
+ * store conditional on the ppc.
+ */
+
+static inline void wake_one_more(struct semaphore * sem)
+{
+ atomic_inc(&sem->waking);
+}
+
+static inline int waking_non_zero(struct semaphore *sem)
+{
+ int ret, tmp;
+
+ /* Atomic decrement sem->waking iff it is > 0 */
+ __asm__ __volatile__(
+ "1: lwarx %1,0,%2\n" /* tmp = sem->waking */
+ " cmpwi 0,%1,0\n" /* test tmp */
+ " addic %1,%1,-1\n" /* --tmp */
+ " ble- 2f\n" /* exit if tmp was <= 0 */
+ " stwcx. %1,0,%2\n" /* update sem->waking */
+ " bne- 1b\n" /* try again if update failed*/
+ " li %0,1\n" /* ret = 1 */
+ "2:"
+ : "=r" (ret), "=&r" (tmp)
+ : "r" (&sem->waking), "0" (0)
+ : "cr0", "memory");
+
+ return ret;
+}
+/*
+ * waking_non_zero_interruptible:
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 42'
echo 'File patch-2.2.4 is continued in part 43'
echo 43 > _shar_seq_.tmp
#!/bin/sh
# this is part 45 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 45; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+#define AOFF_task_euid 0x000003c8
X #define ASIZ_task_euid 0x00000004
-#define AOFF_task_suid 0x000003e0
+#define AOFF_task_suid 0x000003cc
X #define ASIZ_task_suid 0x00000004
-#define AOFF_task_fsuid 0x000003e4
+#define AOFF_task_fsuid 0x000003d0
X #define ASIZ_task_fsuid 0x00000004
-#define AOFF_task_gid 0x000003e8
+#define AOFF_task_gid 0x000003d4
X #define ASIZ_task_gid 0x00000004
-#define AOFF_task_egid 0x000003ec
+#define AOFF_task_egid 0x000003d8
X #define ASIZ_task_egid 0x00000004
-#define AOFF_task_sgid 0x000003f0
+#define AOFF_task_sgid 0x000003dc
X #define ASIZ_task_sgid 0x00000004
-#define AOFF_task_fsgid 0x000003f4
+#define AOFF_task_fsgid 0x000003e0
X #define ASIZ_task_fsgid 0x00000004
-#define AOFF_task_ngroups 0x000003f8
+#define AOFF_task_ngroups 0x000003e4
X #define ASIZ_task_ngroups 0x00000004
-#define AOFF_task_groups 0x000003fc
+#define AOFF_task_groups 0x000003e8
X #define ASIZ_task_groups 0x00000080
-#define AOFF_task_cap_effective 0x0000047c
+#define AOFF_task_cap_effective 0x00000468
X #define ASIZ_task_cap_effective 0x00000004
-#define AOFF_task_cap_inheritable 0x00000480
+#define AOFF_task_cap_inheritable 0x0000046c
X #define ASIZ_task_cap_inheritable 0x00000004
-#define AOFF_task_cap_permitted 0x00000484
+#define AOFF_task_cap_permitted 0x00000470
X #define ASIZ_task_cap_permitted 0x00000004
-#define AOFF_task_user 0x00000488
+#define AOFF_task_user 0x00000478
X #define ASIZ_task_user 0x00000008
-#define AOFF_task_rlim 0x00000490
+#define AOFF_task_rlim 0x00000480
X #define ASIZ_task_rlim 0x000000a0
-#define AOFF_task_used_math 0x00000530
+#define AOFF_task_used_math 0x00000520
X #define ASIZ_task_used_math 0x00000002
-#define AOFF_task_comm 0x00000532
+#define AOFF_task_comm 0x00000522
X #define ASIZ_task_comm 0x00000010
-#define AOFF_task_link_count 0x00000544
+#define AOFF_task_link_count 0x00000534
X #define ASIZ_task_link_count 0x00000004
-#define AOFF_task_tty 0x00000548
+#define AOFF_task_tty 0x00000538
X #define ASIZ_task_tty 0x00000008
-#define AOFF_task_semundo 0x00000550
+#define AOFF_task_semundo 0x00000540
X #define ASIZ_task_semundo 0x00000008
-#define AOFF_task_semsleeping 0x00000558
+#define AOFF_task_semsleeping 0x00000548
X #define ASIZ_task_semsleeping 0x00000008
-#define AOFF_task_tss 0x00000560
+#define AOFF_task_tss 0x00000550
X #define ASIZ_task_tss 0x00000470
-#define AOFF_task_fs 0x000009d0
+#define AOFF_task_fs 0x000009c0
X #define ASIZ_task_fs 0x00000008
-#define AOFF_task_files 0x000009d8
+#define AOFF_task_files 0x000009c8
X #define ASIZ_task_files 0x00000008
-#define AOFF_task_mm 0x000009e0
+#define AOFF_task_mm 0x000009d0
X #define ASIZ_task_mm 0x00000008
-#define AOFF_task_sigmask_lock 0x000009e8
+#define AOFF_task_sigmask_lock 0x000009d8
X #define ASIZ_task_sigmask_lock 0x00000001
-#define AOFF_task_sig 0x000009f0
+#define AOFF_task_sig 0x000009e0
X #define ASIZ_task_sig 0x00000008
-#define AOFF_task_signal 0x000009f8
+#define AOFF_task_signal 0x000009e8
X #define ASIZ_task_signal 0x00000008
-#define AOFF_task_blocked 0x00000a00
+#define AOFF_task_blocked 0x000009f0
X #define ASIZ_task_blocked 0x00000008
-#define AOFF_task_sigqueue 0x00000a08
+#define AOFF_task_sigqueue 0x000009f8
X #define ASIZ_task_sigqueue 0x00000008
-#define AOFF_task_sigqueue_tail 0x00000a10
+#define AOFF_task_sigqueue_tail 0x00000a00
X #define ASIZ_task_sigqueue_tail 0x00000008
-#define AOFF_task_sas_ss_sp 0x00000a18
+#define AOFF_task_sas_ss_sp 0x00000a08
X #define ASIZ_task_sas_ss_sp 0x00000008
-#define AOFF_task_sas_ss_size 0x00000a20
+#define AOFF_task_sas_ss_size 0x00000a10
X #define ASIZ_task_sas_ss_size 0x00000008
-#define ASIZ_task 0x00000a30
+#define ASIZ_task 0x00000a20
X #define AOFF_mm_mmap 0x00000000
X #define ASIZ_mm_mmap 0x00000008
-#define AOFF_mm_mmap_cache 0x00000008
+#define AOFF_mm_mmap_avl 0x00000008
+#define ASIZ_mm_mmap_avl 0x00000008
+#define AOFF_mm_mmap_cache 0x00000010
X #define ASIZ_mm_mmap_cache 0x00000008
-#define AOFF_mm_pgd 0x00000010
+#define AOFF_mm_pgd 0x00000018
X #define ASIZ_mm_pgd 0x00000008
-#define AOFF_mm_count 0x00000018
+#define AOFF_mm_count 0x00000020
X #define ASIZ_mm_count 0x00000004
-#define AOFF_mm_map_count 0x0000001c
+#define AOFF_mm_map_count 0x00000024
X #define ASIZ_mm_map_count 0x00000004
-#define AOFF_mm_mmap_sem 0x00000020
+#define AOFF_mm_mmap_sem 0x00000028
X #define ASIZ_mm_mmap_sem 0x00000010
-#define AOFF_mm_context 0x00000030
+#define AOFF_mm_context 0x00000038
X #define ASIZ_mm_context 0x00000008
-#define AOFF_mm_start_code 0x00000038
+#define AOFF_mm_start_code 0x00000040
X #define ASIZ_mm_start_code 0x00000008
-#define AOFF_mm_end_code 0x00000040
+#define AOFF_mm_end_code 0x00000048
X #define ASIZ_mm_end_code 0x00000008
-#define AOFF_mm_start_data 0x00000048
+#define AOFF_mm_start_data 0x00000050
X #define ASIZ_mm_start_data 0x00000008
-#define AOFF_mm_end_data 0x00000050
+#define AOFF_mm_end_data 0x00000058
X #define ASIZ_mm_end_data 0x00000008
-#define AOFF_mm_start_brk 0x00000058
+#define AOFF_mm_start_brk 0x00000060
X #define ASIZ_mm_start_brk 0x00000008
-#define AOFF_mm_brk 0x00000060
+#define AOFF_mm_brk 0x00000068
X #define ASIZ_mm_brk 0x00000008
-#define AOFF_mm_start_stack 0x00000068
+#define AOFF_mm_start_stack 0x00000070
X #define ASIZ_mm_start_stack 0x00000008
-#define AOFF_mm_arg_start 0x00000070
+#define AOFF_mm_arg_start 0x00000078
X #define ASIZ_mm_arg_start 0x00000008
-#define AOFF_mm_arg_end 0x00000078
+#define AOFF_mm_arg_end 0x00000080
X #define ASIZ_mm_arg_end 0x00000008
-#define AOFF_mm_env_start 0x00000080
+#define AOFF_mm_env_start 0x00000088
X #define ASIZ_mm_env_start 0x00000008
-#define AOFF_mm_env_end 0x00000088
+#define AOFF_mm_env_end 0x00000090
X #define ASIZ_mm_env_end 0x00000008
-#define AOFF_mm_rss 0x00000090
+#define AOFF_mm_rss 0x00000098
X #define ASIZ_mm_rss 0x00000008
-#define AOFF_mm_total_vm 0x00000098
+#define AOFF_mm_total_vm 0x000000a0
X #define ASIZ_mm_total_vm 0x00000008
-#define AOFF_mm_locked_vm 0x000000a0
+#define AOFF_mm_locked_vm 0x000000a8
X #define ASIZ_mm_locked_vm 0x00000008
-#define AOFF_mm_def_flags 0x000000a8
+#define AOFF_mm_def_flags 0x000000b0
X #define ASIZ_mm_def_flags 0x00000008
-#define AOFF_mm_cpu_vm_mask 0x000000b0
+#define AOFF_mm_cpu_vm_mask 0x000000b8
X #define ASIZ_mm_cpu_vm_mask 0x00000008
-#define AOFF_mm_segments 0x000000b8
+#define AOFF_mm_swap_cnt 0x000000c0
+#define ASIZ_mm_swap_cnt 0x00000008
+#define AOFF_mm_swap_address 0x000000c8
+#define ASIZ_mm_swap_address 0x00000008
+#define AOFF_mm_segments 0x000000d0
X #define ASIZ_mm_segments 0x00000008
-#define ASIZ_mm 0x000000c0
+#define ASIZ_mm 0x000000d8
X #define AOFF_thread_ksp 0x00000000
X #define ASIZ_thread_ksp 0x00000008
X #define AOFF_thread_wstate 0x00000008
@@ -586,220 +592,222 @@
X #define ASIZ_task_counter 0x00000008
X #define AOFF_task_priority 0x00000038
X #define ASIZ_task_priority 0x00000008
-#define AOFF_task_has_cpu 0x00000040
+#define AOFF_task_avg_slice 0x00000040
+#define ASIZ_task_avg_slice 0x00000008
+#define AOFF_task_has_cpu 0x00000048
X #define ASIZ_task_has_cpu 0x00000004
-#define AOFF_task_processor 0x00000044
+#define AOFF_task_processor 0x0000004c
X #define ASIZ_task_processor 0x00000004
-#define AOFF_task_last_processor 0x00000048
+#define AOFF_task_last_processor 0x00000050
X #define ASIZ_task_last_processor 0x00000004
-#define AOFF_task_lock_depth 0x0000004c
+#define AOFF_task_lock_depth 0x00000054
X #define ASIZ_task_lock_depth 0x00000004
-#define AOFF_task_next_task 0x00000050
+#define AOFF_task_next_task 0x00000058
X #define ASIZ_task_next_task 0x00000008
-#define AOFF_task_prev_task 0x00000058
+#define AOFF_task_prev_task 0x00000060
X #define ASIZ_task_prev_task 0x00000008
-#define AOFF_task_next_run 0x00000060
+#define AOFF_task_next_run 0x00000068
X #define ASIZ_task_next_run 0x00000008
-#define AOFF_task_prev_run 0x00000068
+#define AOFF_task_prev_run 0x00000070
X #define ASIZ_task_prev_run 0x00000008
-#define AOFF_task_binfmt 0x00000070
+#define AOFF_task_binfmt 0x00000078
X #define ASIZ_task_binfmt 0x00000008
-#define AOFF_task_exit_code 0x00000078
+#define AOFF_task_exit_code 0x00000080
X #define ASIZ_task_exit_code 0x00000004
-#define AOFF_task_exit_signal 0x0000007c
+#define AOFF_task_exit_signal 0x00000084
X #define ASIZ_task_exit_signal 0x00000004
-#define AOFF_task_pdeath_signal 0x00000080
+#define AOFF_task_pdeath_signal 0x00000088
X #define ASIZ_task_pdeath_signal 0x00000004
-#define AOFF_task_personality 0x00000088
+#define AOFF_task_personality 0x00000090
X #define ASIZ_task_personality 0x00000008
-#define AOFF_task_pid 0x00000094
+#define AOFF_task_pid 0x0000009c
X #define ASIZ_task_pid 0x00000004
-#define AOFF_task_pgrp 0x00000098
+#define AOFF_task_pgrp 0x000000a0
X #define ASIZ_task_pgrp 0x00000004
-#define AOFF_task_tty_old_pgrp 0x0000009c
+#define AOFF_task_tty_old_pgrp 0x000000a4
X #define ASIZ_task_tty_old_pgrp 0x00000004
-#define AOFF_task_session 0x000000a0
+#define AOFF_task_session 0x000000a8
X #define ASIZ_task_session 0x00000004
-#define AOFF_task_leader 0x000000a4
+#define AOFF_task_leader 0x000000ac
X #define ASIZ_task_leader 0x00000004
-#define AOFF_task_p_opptr 0x000000a8
+#define AOFF_task_p_opptr 0x000000b0
X #define ASIZ_task_p_opptr 0x00000008
-#define AOFF_task_p_pptr 0x000000b0
+#define AOFF_task_p_pptr 0x000000b8
X #define ASIZ_task_p_pptr 0x00000008
-#define AOFF_task_p_cptr 0x000000b8
+#define AOFF_task_p_cptr 0x000000c0
X #define ASIZ_task_p_cptr 0x00000008
-#define AOFF_task_p_ysptr 0x000000c0
+#define AOFF_task_p_ysptr 0x000000c8
X #define ASIZ_task_p_ysptr 0x00000008
-#define AOFF_task_p_osptr 0x000000c8
+#define AOFF_task_p_osptr 0x000000d0
X #define ASIZ_task_p_osptr 0x00000008
-#define AOFF_task_pidhash_next 0x000000d0
+#define AOFF_task_pidhash_next 0x000000d8
X #define ASIZ_task_pidhash_next 0x00000008
-#define AOFF_task_pidhash_pprev 0x000000d8
+#define AOFF_task_pidhash_pprev 0x000000e0
X #define ASIZ_task_pidhash_pprev 0x00000008
-#define AOFF_task_tarray_ptr 0x000000e0
+#define AOFF_task_tarray_ptr 0x000000e8
X #define ASIZ_task_tarray_ptr 0x00000008
-#define AOFF_task_wait_chldexit 0x000000e8
+#define AOFF_task_wait_chldexit 0x000000f0
X #define ASIZ_task_wait_chldexit 0x00000008
-#define AOFF_task_policy 0x000000f0
+#define AOFF_task_vfork_sem 0x000000f8
+#define ASIZ_task_vfork_sem 0x00000008
+#define AOFF_task_policy 0x00000100
X #define ASIZ_task_policy 0x00000008
-#define AOFF_task_rt_priority 0x000000f8
+#define AOFF_task_rt_priority 0x00000108
X #define ASIZ_task_rt_priority 0x00000008
-#define AOFF_task_it_real_value 0x00000100
+#define AOFF_task_it_real_value 0x00000110
X #define ASIZ_task_it_real_value 0x00000008
-#define AOFF_task_it_prof_value 0x00000108
+#define AOFF_task_it_prof_value 0x00000118
X #define ASIZ_task_it_prof_value 0x00000008
-#define AOFF_task_it_virt_value 0x00000110
+#define AOFF_task_it_virt_value 0x00000120
X #define ASIZ_task_it_virt_value 0x00000008
-#define AOFF_task_it_real_incr 0x00000118
+#define AOFF_task_it_real_incr 0x00000128
X #define ASIZ_task_it_real_incr 0x00000008
-#define AOFF_task_it_prof_incr 0x00000120
+#define AOFF_task_it_prof_incr 0x00000130
X #define ASIZ_task_it_prof_incr 0x00000008
-#define AOFF_task_it_virt_incr 0x00000128
+#define AOFF_task_it_virt_incr 0x00000138
X #define ASIZ_task_it_virt_incr 0x00000008
-#define AOFF_task_real_timer 0x00000130
+#define AOFF_task_real_timer 0x00000140
X #define ASIZ_task_real_timer 0x00000028
-#define AOFF_task_times 0x00000158
+#define AOFF_task_times 0x00000168
X #define ASIZ_task_times 0x00000020
-#define AOFF_task_start_time 0x00000178
+#define AOFF_task_start_time 0x00000188
X #define ASIZ_task_start_time 0x00000008
-#define AOFF_task_per_cpu_utime 0x00000180
+#define AOFF_task_per_cpu_utime 0x00000190
X #define ASIZ_task_per_cpu_utime 0x00000100
-#define AOFF_task_min_flt 0x00000380
+#define AOFF_task_min_flt 0x00000390
X #define ASIZ_task_min_flt 0x00000008
-#define AOFF_task_maj_flt 0x00000388
+#define AOFF_task_maj_flt 0x00000398
X #define ASIZ_task_maj_flt 0x00000008
-#define AOFF_task_nswap 0x00000390
+#define AOFF_task_nswap 0x000003a0
X #define ASIZ_task_nswap 0x00000008
-#define AOFF_task_cmin_flt 0x00000398
+#define AOFF_task_cmin_flt 0x000003a8
X #define ASIZ_task_cmin_flt 0x00000008
-#define AOFF_task_cmaj_flt 0x000003a0
+#define AOFF_task_cmaj_flt 0x000003b0
X #define ASIZ_task_cmaj_flt 0x00000008
-#define AOFF_task_cnswap 0x000003a8
+#define AOFF_task_cnswap 0x000003b8
X #define ASIZ_task_cnswap 0x00000008
-#define AOFF_task_swap_address 0x000003b8
-#define ASIZ_task_swap_address 0x00000008
-#define AOFF_task_old_maj_flt 0x000003c0
-#define ASIZ_task_old_maj_flt 0x00000008
-#define AOFF_task_dec_flt 0x000003c8
-#define ASIZ_task_dec_flt 0x00000008
-#define AOFF_task_swap_cnt 0x000003d0
-#define ASIZ_task_swap_cnt 0x00000008
-#define AOFF_task_uid 0x000003d8
+#define AOFF_task_uid 0x000003c4
X #define ASIZ_task_uid 0x00000004
-#define AOFF_task_euid 0x000003dc
+#define AOFF_task_euid 0x000003c8
X #define ASIZ_task_euid 0x00000004
-#define AOFF_task_suid 0x000003e0
+#define AOFF_task_suid 0x000003cc
X #define ASIZ_task_suid 0x00000004
-#define AOFF_task_fsuid 0x000003e4
+#define AOFF_task_fsuid 0x000003d0
X #define ASIZ_task_fsuid 0x00000004
-#define AOFF_task_gid 0x000003e8
+#define AOFF_task_gid 0x000003d4
X #define ASIZ_task_gid 0x00000004
-#define AOFF_task_egid 0x000003ec
+#define AOFF_task_egid 0x000003d8
X #define ASIZ_task_egid 0x00000004
-#define AOFF_task_sgid 0x000003f0
+#define AOFF_task_sgid 0x000003dc
X #define ASIZ_task_sgid 0x00000004
-#define AOFF_task_fsgid 0x000003f4
+#define AOFF_task_fsgid 0x000003e0
X #define ASIZ_task_fsgid 0x00000004
-#define AOFF_task_ngroups 0x000003f8
+#define AOFF_task_ngroups 0x000003e4
X #define ASIZ_task_ngroups 0x00000004
-#define AOFF_task_groups 0x000003fc
+#define AOFF_task_groups 0x000003e8
X #define ASIZ_task_groups 0x00000080
-#define AOFF_task_cap_effective 0x0000047c
+#define AOFF_task_cap_effective 0x00000468
X #define ASIZ_task_cap_effective 0x00000004
-#define AOFF_task_cap_inheritable 0x00000480
+#define AOFF_task_cap_inheritable 0x0000046c
X #define ASIZ_task_cap_inheritable 0x00000004
-#define AOFF_task_cap_permitted 0x00000484
+#define AOFF_task_cap_permitted 0x00000470
X #define ASIZ_task_cap_permitted 0x00000004
-#define AOFF_task_user 0x00000488
+#define AOFF_task_user 0x00000478
X #define ASIZ_task_user 0x00000008
-#define AOFF_task_rlim 0x00000490
+#define AOFF_task_rlim 0x00000480
X #define ASIZ_task_rlim 0x000000a0
-#define AOFF_task_used_math 0x00000530
+#define AOFF_task_used_math 0x00000520
X #define ASIZ_task_used_math 0x00000002
-#define AOFF_task_comm 0x00000532
+#define AOFF_task_comm 0x00000522
X #define ASIZ_task_comm 0x00000010
-#define AOFF_task_link_count 0x00000544
+#define AOFF_task_link_count 0x00000534
X #define ASIZ_task_link_count 0x00000004
-#define AOFF_task_tty 0x00000548
+#define AOFF_task_tty 0x00000538
X #define ASIZ_task_tty 0x00000008
-#define AOFF_task_semundo 0x00000550
+#define AOFF_task_semundo 0x00000540
X #define ASIZ_task_semundo 0x00000008
-#define AOFF_task_semsleeping 0x00000558
+#define AOFF_task_semsleeping 0x00000548
X #define ASIZ_task_semsleeping 0x00000008
-#define AOFF_task_tss 0x00000560
+#define AOFF_task_tss 0x00000550
X #define ASIZ_task_tss 0x00000470
-#define AOFF_task_fs 0x000009d0
+#define AOFF_task_fs 0x000009c0
X #define ASIZ_task_fs 0x00000008
-#define AOFF_task_files 0x000009d8
+#define AOFF_task_files 0x000009c8
X #define ASIZ_task_files 0x00000008
-#define AOFF_task_mm 0x000009e0
+#define AOFF_task_mm 0x000009d0
X #define ASIZ_task_mm 0x00000008
-#define AOFF_task_sigmask_lock 0x000009e8
+#define AOFF_task_sigmask_lock 0x000009d8
X #define ASIZ_task_sigmask_lock 0x0000000c
-#define AOFF_task_sig 0x000009f8
+#define AOFF_task_sig 0x000009e8
X #define ASIZ_task_sig 0x00000008
-#define AOFF_task_signal 0x00000a00
+#define AOFF_task_signal 0x000009f0
X #define ASIZ_task_signal 0x00000008
-#define AOFF_task_blocked 0x00000a08
+#define AOFF_task_blocked 0x000009f8
X #define ASIZ_task_blocked 0x00000008
-#define AOFF_task_sigqueue 0x00000a10
+#define AOFF_task_sigqueue 0x00000a00
X #define ASIZ_task_sigqueue 0x00000008
-#define AOFF_task_sigqueue_tail 0x00000a18
+#define AOFF_task_sigqueue_tail 0x00000a08
X #define ASIZ_task_sigqueue_tail 0x00000008
-#define AOFF_task_sas_ss_sp 0x00000a20
+#define AOFF_task_sas_ss_sp 0x00000a10
X #define ASIZ_task_sas_ss_sp 0x00000008
-#define AOFF_task_sas_ss_size 0x00000a28
+#define AOFF_task_sas_ss_size 0x00000a18
X #define ASIZ_task_sas_ss_size 0x00000008
-#define ASIZ_task 0x00000a30
+#define ASIZ_task 0x00000a20
X #define AOFF_mm_mmap 0x00000000
X #define ASIZ_mm_mmap 0x00000008
-#define AOFF_mm_mmap_cache 0x00000008
+#define AOFF_mm_mmap_avl 0x00000008
+#define ASIZ_mm_mmap_avl 0x00000008
+#define AOFF_mm_mmap_cache 0x00000010
X #define ASIZ_mm_mmap_cache 0x00000008
-#define AOFF_mm_pgd 0x00000010
+#define AOFF_mm_pgd 0x00000018
X #define ASIZ_mm_pgd 0x00000008
-#define AOFF_mm_count 0x00000018
+#define AOFF_mm_count 0x00000020
X #define ASIZ_mm_count 0x00000004
-#define AOFF_mm_map_count 0x0000001c
+#define AOFF_mm_map_count 0x00000024
X #define ASIZ_mm_map_count 0x00000004
-#define AOFF_mm_mmap_sem 0x00000020
+#define AOFF_mm_mmap_sem 0x00000028
X #define ASIZ_mm_mmap_sem 0x00000010
-#define AOFF_mm_context 0x00000030
+#define AOFF_mm_context 0x00000038
X #define ASIZ_mm_context 0x00000008
-#define AOFF_mm_start_code 0x00000038
+#define AOFF_mm_start_code 0x00000040
X #define ASIZ_mm_start_code 0x00000008
-#define AOFF_mm_end_code 0x00000040
+#define AOFF_mm_end_code 0x00000048
X #define ASIZ_mm_end_code 0x00000008
-#define AOFF_mm_start_data 0x00000048
+#define AOFF_mm_start_data 0x00000050
X #define ASIZ_mm_start_data 0x00000008
-#define AOFF_mm_end_data 0x00000050
+#define AOFF_mm_end_data 0x00000058
X #define ASIZ_mm_end_data 0x00000008
-#define AOFF_mm_start_brk 0x00000058
+#define AOFF_mm_start_brk 0x00000060
X #define ASIZ_mm_start_brk 0x00000008
-#define AOFF_mm_brk 0x00000060
+#define AOFF_mm_brk 0x00000068
X #define ASIZ_mm_brk 0x00000008
-#define AOFF_mm_start_stack 0x00000068
+#define AOFF_mm_start_stack 0x00000070
X #define ASIZ_mm_start_stack 0x00000008
-#define AOFF_mm_arg_start 0x00000070
+#define AOFF_mm_arg_start 0x00000078
X #define ASIZ_mm_arg_start 0x00000008
-#define AOFF_mm_arg_end 0x00000078
+#define AOFF_mm_arg_end 0x00000080
X #define ASIZ_mm_arg_end 0x00000008
-#define AOFF_mm_env_start 0x00000080
+#define AOFF_mm_env_start 0x00000088
X #define ASIZ_mm_env_start 0x00000008
-#define AOFF_mm_env_end 0x00000088
+#define AOFF_mm_env_end 0x00000090
X #define ASIZ_mm_env_end 0x00000008
-#define AOFF_mm_rss 0x00000090
+#define AOFF_mm_rss 0x00000098
X #define ASIZ_mm_rss 0x00000008
-#define AOFF_mm_total_vm 0x00000098
+#define AOFF_mm_total_vm 0x000000a0
X #define ASIZ_mm_total_vm 0x00000008
-#define AOFF_mm_locked_vm 0x000000a0
+#define AOFF_mm_locked_vm 0x000000a8
X #define ASIZ_mm_locked_vm 0x00000008
-#define AOFF_mm_def_flags 0x000000a8
+#define AOFF_mm_def_flags 0x000000b0
X #define ASIZ_mm_def_flags 0x00000008
-#define AOFF_mm_cpu_vm_mask 0x000000b0
+#define AOFF_mm_cpu_vm_mask 0x000000b8
X #define ASIZ_mm_cpu_vm_mask 0x00000008
-#define AOFF_mm_segments 0x000000b8
+#define AOFF_mm_swap_cnt 0x000000c0
+#define ASIZ_mm_swap_cnt 0x00000008
+#define AOFF_mm_swap_address 0x000000c8
+#define ASIZ_mm_swap_address 0x00000008
+#define AOFF_mm_segments 0x000000d0
X #define ASIZ_mm_segments 0x00000008
-#define ASIZ_mm 0x000000c0
+#define ASIZ_mm 0x000000d8
X #define AOFF_thread_ksp 0x00000000
X #define ASIZ_thread_ksp 0x00000008
X #define AOFF_thread_wstate 0x00000008
@@ -851,6 +859,6 @@
X #define ASIZ_thread 0x00000470
X #endif /* SPIN_LOCK_DEBUG */
X
-#endif /* __SMP__ */
+#endif /* CONFIG_SMP */
X
X #endif /* __ASM_OFFSETS_H__ */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/bitops.h linux/include/asm-sparc64/bitops.h
--- v2.2.3/linux/include/asm-sparc64/bitops.h Thu Aug 6 14:06:34 1998
+++ linux/include/asm-sparc64/bitops.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: bitops.h,v 1.25 1998/07/26 03:05:51 davem Exp $
+/* $Id: bitops.h,v 1.26 1999/01/07 14:14:15 jj Exp $
X * bitops.h: Bit string operations on the V9.
X *
X * Copyright 1996, 1997 David S. Miller (da...@caip.rutgers.edu)
@@ -14,8 +14,8 @@
X * primitives used are not privileged.
X */
X
-/* Set bit 'nr' in 32-bit quantity at address 'addr' where bit '0'
- * is in the highest of the four bytes and bit '31' is the high bit
+/* Set bit 'nr' in 64-bit quantity at address 'addr' where bit '0'
+ * is in the highest of the eight bytes and bit '63' is the high bit
X * within the first byte. Sparc is BIG-Endian. Unless noted otherwise
X * all bit-ops return 0 if bit was previously clear and != 0 otherwise.
X */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/cache.h linux/include/asm-sparc64/cache.h
--- v2.2.3/linux/include/asm-sparc64/cache.h Thu May 29 21:53:09 1997
+++ linux/include/asm-sparc64/cache.h Wed Mar 10 16:53:38 1999
@@ -9,4 +9,6 @@
X
X #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
X
+#define SMP_CACHE_BYTES 64 /* L2 cache line size. */
+
X #endif
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/dma.h linux/include/asm-sparc64/dma.h
--- v2.2.3/linux/include/asm-sparc64/dma.h Thu Nov 19 09:56:29 1998
+++ linux/include/asm-sparc64/dma.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: dma.h,v 1.10 1998/10/27 23:28:50 davem Exp $
+/* $Id: dma.h,v 1.13 1998/12/16 04:33:55 davem Exp $
X * include/asm-sparc64/dma.h
X *
X * Copyright 1996 (C) David S. Miller (da...@caip.rutgers.edu)
@@ -30,10 +30,13 @@
X * things can compile.
X */
X #define MAX_DMA_CHANNELS 8
-#define MAX_DMA_ADDRESS ((0xf0000000) + PAGE_OFFSET)
X #define DMA_MODE_READ 1
X #define DMA_MODE_WRITE 2
X
+/* This is actually used. */
+extern unsigned long phys_base;
+#define MAX_DMA_ADDRESS (phys_base + (0xfe000000UL) + PAGE_OFFSET)
+
X /* Useful constants */
X #define SIZE_16MB (16*1024*1024)
X #define SIZE_64K (64*1024)
@@ -115,13 +118,14 @@
X #define DMA_DSBL_RD_DRN 0x00001000 /* No EC drain on slave reads */
X #define DMA_BCNT_ENAB 0x00002000 /* If on, use the byte counter */
X #define DMA_TERM_CNTR 0x00004000 /* Terminal counter */
+#define DMA_SCSI_SBUS64 0x00008000 /* HME: Enable 64-bit SBUS mode. */
X #define DMA_CSR_DISAB 0x00010000 /* No FIFO drains during csr */
X #define DMA_SCSI_DISAB 0x00020000 /* No FIFO drains during reg */
X #define DMA_DSBL_WR_INV 0x00020000 /* No EC inval. on slave writes */
X #define DMA_ADD_ENABLE 0x00040000 /* Special ESC DVMA optimization */
X #define DMA_E_BURST8 0x00040000 /* ENET: SBUS r/w burst size */
X #define DMA_BRST_SZ 0x000c0000 /* SCSI: SBUS r/w burst size */
-#define DMA_BRST64 0x00080000 /* SCSI: 64byte bursts (HME on UltraSparc only) */
+#define DMA_BRST64 0x000c0000 /* SCSI: 64byte bursts (HME on UltraSparc only) */
X #define DMA_BRST32 0x00040000 /* SCSI: 32byte bursts */
X #define DMA_BRST16 0x00000000 /* SCSI: 16byte bursts */
X #define DMA_BRST0 0x00080000 /* SCSI: no bursts (non-HME gate arrays) */
@@ -135,6 +139,7 @@
X #define DMA_PARITY_OFF 0x02000000 /* HME: disable parity checking */
X #define DMA_LOADED_ADDR 0x04000000 /* Address has been loaded */
X #define DMA_LOADED_NADDR 0x08000000 /* Next address has been loaded */
+#define DMA_RESET_FAS366 0x08000000 /* HME: Assert RESET to FAS366 */
X
X /* Values describing the burst-size property from the PROM */
X #define DMA_BURST1 0x01
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/ethtool.h linux/include/asm-sparc64/ethtool.h
--- v2.2.3/linux/include/asm-sparc64/ethtool.h Wed Dec 31 16:00:00 1969
+++ linux/include/asm-sparc64/ethtool.h Wed Mar 10 16:53:38 1999
@@ -0,0 +1,79 @@
+/* $Id: ethtool.h,v 1.1 1998/12/19 15:09:40 davem Exp $
+ * ethtool.h: Defines for SparcLinux ethtool.
+ *
+ * Copyright (C) 1998 David S. Miller (da...@dm.cobaltmicro.com)
+ */
+
+#ifndef _SPARC64_ETHTOOL_H
+#define _SPARC64_ETHTOOL_H
+
+/* We do things like this so it does not matter what kernel
+ * headers you have on your system etc.
+ */
+#undef SIOCETHTOOL
+#define SIOCETHTOOL (SIOCDEVPRIVATE + 0x0f)
+
+/* This should work for both 32 and 64 bit userland. */
+struct ethtool_cmd {
+ u32 cmd;
+ u32 supported;
+ u16 speed;
+ u8 duplex;
+ u8 port;
+ u8 phy_address;
+ u8 transceiver;
+ u8 autoneg;
+};
+
+/* CMDs currently supported */
+#define SPARC_ETH_GSET 0x00000001 /* Get settings, non-privileged. */
+#define SPARC_ETH_SSET 0x00000002 /* Set settings, privileged. */
+
+/* Indicates what features are supported by the interface. */
+#define SUPPORTED_10baseT_Half 0x00000001
+#define SUPPORTED_10baseT_Full 0x00000002
+#define SUPPORTED_100baseT_Half 0x00000004
+#define SUPPORTED_100baseT_Full 0x00000008
+#define SUPPORTED_1000baseT_Half 0x00000010
+#define SUPPORTED_1000baseT_Full 0x00000020
+#define SUPPORTED_Autoneg 0x00000040
+#define SUPPORTED_TP 0x00000080
+#define SUPPORTED_AUI 0x00000100
+#define SUPPORTED_MII 0x00000200
+#define SUPPORTED_FIBRE 0x00000400
+
+/* The following are all involved in forcing a particular link
+ * mode for the device for setting things. When getting the
+ * devices settings, these indicate the current mode and whether
+ * it was foced up into this mode or autonegotiated.
+ */
+
+/* The forced speec, 10Mb, 100Mb, gigabit. */
+#define SPEED_10 10
+#define SPEED_100 100
+#define SPEED_1000 1000
+
+/* Duplex, half or full. */
+#define DUPLEX_HALF 0x00
+#define DUPLEX_FULL 0x01
+
+/* Which connector port. */
+#define PORT_TP 0x00
+#define PORT_AUI 0x01
+#define PORT_MII 0x02
+#define PORT_FIBRE 0x03
+
+/* Which tranceiver to use. */
+#define XCVR_INTERNAL 0x00
+#define XCVR_EXTERNAL 0x01
+#define XCVR_DUMMY1 0x02
+#define XCVR_DUMMY2 0x03
+#define XCVR_DUMMY3 0x04
+
+/* Enable or disable autonegotiation. If this is set to enable,
+ * the forced link modes above are completely ignored.
+ */
+#define AUTONEG_DISABLE 0x00
+#define AUTONEG_ENABLE 0x01
+
+#endif /* _SPARC64_ETHTOOL_H */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/fhc.h linux/include/asm-sparc64/fhc.h
--- v2.2.3/linux/include/asm-sparc64/fhc.h Sat Aug 16 09:51:10 1997
+++ linux/include/asm-sparc64/fhc.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: fhc.h,v 1.1 1997/08/08 04:26:40 davem Exp $
+/* $Id: fhc.h,v 1.4 1998/12/14 12:18:20 davem Exp $
X * fhc.h: Structures for central/fhc pseudo driver on Sunfire/Starfire/Wildfire.
X *
X * Copyright (C) 1997 David S. Miller (da...@caip.rutgers.edu)
@@ -7,13 +7,42 @@
X #ifndef _SPARC64_FHC_H
X #define _SPARC64_FHC_H
X
+#include <linux/timer.h>
+
X #include <asm/firehose.h>
X #include <asm/oplib.h>
X
X struct linux_fhc;
X
+struct clock_board_regs {
+ u8 control;
+ u8 _unused1[0x10 - 0x01];
+ u8 stat1;
+ u8 _unused2[0x10 - 0x01];
+ u8 stat2;
+ u8 _unused3[0x10 - 0x01];
+ u8 pwr_stat;
+ u8 _unused4[0x10 - 0x01];
+ u8 pwr_presence;
+ u8 _unused5[0x10 - 0x01];
+ u8 temperature;
+ u8 _unused6[0x10 - 0x01];
+ u8 irq_diag;
+ u8 _unused7[0x10 - 0x01];
+ u8 pwr_stat2;
+ u8 _unused8[0x10 - 0x01];
+};
+
+#define CLOCK_CTRL_LLED 0x04 /* Left LED, 0 == on */
+#define CLOCK_CTRL_MLED 0x02 /* Mid LED, 1 == on */
+#define CLOCK_CTRL_RLED 0x01 /* RIght LED, 1 == on */
+
X struct linux_central {
X struct linux_fhc *child;
+ volatile u8 *cfreg;
+ struct clock_board_regs *clkregs;
+ volatile u8 *clkver;
+ int slots;
X int prom_node;
X char prom_name[64];
X
@@ -25,6 +54,8 @@
X struct linux_fhc *next;
X struct linux_central *parent; /* NULL if not central FHC */
X struct fhc_regs fhc_regs;
+ int board;
+ int jtag_master;
X int prom_node;
X char prom_name[64];
X
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/firehose.h linux/include/asm-sparc64/firehose.h
--- v2.2.3/linux/include/asm-sparc64/firehose.h Thu Aug 6 14:06:34 1998
+++ linux/include/asm-sparc64/firehose.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: firehose.h,v 1.3 1998/06/10 07:28:43 davem Exp $
+/* $Id: firehose.h,v 1.4 1998/12/02 10:16:47 davem Exp $
X * firehose.h: Defines for the Fire Hose Controller (FHC) found
X * on Sunfire/Starfire/Wildfire systems.
X *
@@ -10,8 +10,6 @@
X
X #include <linux/types.h>
X
-/* XXX I have not fully verified the register sizes in this file yet... -DaveM */
-
X /* Fire Hose Controller Internal Registers */
X struct fhc_internal_regs {
X /*0x0000*/ u32 fhc_id; /* FHC ID Register */
@@ -33,31 +31,31 @@
X * for the FHC, thus we have the following few structs...
X */
X struct fhc_ign_reg {
-/*0x2000*/ u64 fhc_ign; /* FHC Interrupt Group Number */
+/*0x2000*/ u32 fhc_ign; /* FHC Interrupt Group Number */
X };
X
X struct fhc_fanfail_regs {
-/*0x4000*/ u32 _pad0, fhc_ff_imap; /* FHC FanFail Interrupt Map */
- u64 _pad1;
-/*0x4010*/ u32 _pad2, fhc_ff_iclr; /* FHC FanFail Interrupt Clear */
+/*0x4000*/ u32 fhc_ff_imap; /* FHC FanFail Interrupt Map */
+ u32 _pad[3];
+/*0x4010*/ u32 fhc_ff_iclr; /* FHC FanFail Interrupt Clear */
X };
X
X struct fhc_system_regs {
-/*0x6000*/ u32 _pad0, fhc_sys_imap; /* FHC System Interrupt Map */
- u64 _pad1;
-/*0x6010*/ u32 _pad2, fhc_sys_iclr; /* FHC System Interrupt Clear */
+/*0x6000*/ u32 fhc_sys_imap; /* FHC System Interrupt Map */
+ u32 _pad[3];
+/*0x6010*/ u32 fhc_sys_iclr; /* FHC System Interrupt Clear */
X };
X
X struct fhc_uart_regs {
-/*0x8000*/ u32 _pad0, fhc_uart_imap; /* FHC UART Interrupt Map */
- u64 _pad1;
-/*0x8010*/ u32 _pad2, fhc_uart_iclr; /* FHC UART Interrupt Clear */
+/*0x8000*/ u32 fhc_uart_imap; /* FHC UART Interrupt Map */
+ u32 _pad[3];
+/*0x8010*/ u32 fhc_uart_iclr; /* FHC UART Interrupt Clear */
X };
X
X struct fhc_tod_regs {
-/*0xa000*/ u32 _pad0, fhc_tod_imap; /* FHC TOD Interrupt Map */
- u64 _pad1;
-/*0xa010*/ u32 _pad2, fhc_tod_iclr; /* FHC TOD Interrupt Clear */
+/*0xa000*/ u32 fhc_tod_imap; /* FHC TOD Interrupt Map */
+ u32 _pad1[3];
+/*0xa010*/ u32 fhc_tod_iclr; /* FHC TOD Interrupt Clear */
X };
X
X /* All of the above. */
@@ -105,15 +103,19 @@
X #define FHC_RCS_FENAB 0x01000000 /* Fatal errors elicit system reset */
X
X /* FHC Board Status Register */
-#define FHC_BSD_DA64 0x00040000 /* Port A: 0=128bit 1=64bit data path */
-#define FHC_BSD_DB64 0x00020000 /* Port B: 0=128bit 1=64bit data path */
-#define FHC_BSD_BID 0x0001e000 /* Board ID */
-#define FHC_BSD_SA 0x00001c00 /* Port A UPA Speed (from the pins) */
-#define FHC_BSD_SB 0x00000380 /* Port B UPA Speed (from the pins) */
-#define FHC_BSD_NDIAG 0x00000040 /* Not in Diag Mode */
-#define FHC_BSD_NTBED 0x00000020 /* Not in TestBED Mode */
-#define FHC_BSD_NIA 0x0000001c /* Jumper, bit 18 in PROM space */
-#define FHC_BSD_SI 0x00000001 /* Spare input pin value */
+#define FHC_BSR_DA64 0x00040000 /* Port A: 0=128bit 1=64bit data path */
+#define FHC_BSR_DB64 0x00020000 /* Port B: 0=128bit 1=64bit data path */
+#define FHC_BSR_BID 0x0001e000 /* Board ID */
+#define FHC_BSR_SA 0x00001c00 /* Port A UPA Speed (from the pins) */
+#define FHC_BSR_SB 0x00000380 /* Port B UPA Speed (from the pins) */
+#define FHC_BSR_NDIAG 0x00000040 /* Not in Diag Mode */
+#define FHC_BSR_NTBED 0x00000020 /* Not in TestBED Mode */
+#define FHC_BSR_NIA 0x0000001c /* Jumper, bit 18 in PROM space */
+#define FHC_BSR_SI 0x00000001 /* Spare input pin value */
+
+/* FHC JTAG Control Register */
+#define FHC_JTAG_CTRL_MENAB 0x80000000 /* Indicates this is JTAG Master */
+#define FHC_JTAG_CTRL_MNONE 0x40000000 /* Indicates no JTAG Master present */
X
X /* FHC then has an Interrupt Group Number register, essentially this is a 32-bit
X * register with the low 5 bits specifying the IGN of this FHC for interrupt
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/floppy.h linux/include/asm-sparc64/floppy.h
--- v2.2.3/linux/include/asm-sparc64/floppy.h Sun Nov 8 14:03:10 1998
+++ linux/include/asm-sparc64/floppy.h Sun Mar 21 07:23:38 1999
@@ -1,4 +1,4 @@
-/* $Id: floppy.h,v 1.16 1998/10/06 20:32:15 ecd Exp $
+/* $Id: floppy.h,v 1.18 1999/03/21 10:51:38 davem Exp $
X * asm-sparc64/floppy.h: Sparc specific parts of the Floppy driver.
X *
X * Copyright (C) 1996 David S. Miller (da...@caip.rutgers.edu)
@@ -114,6 +114,7 @@
X
X static unsigned char sun_82077_fd_inb(unsigned long port)
X {
+ udelay(5);
X switch(port & 7) {
X default:
X printk("floppy: Asked to read unknown port %lx\n", port);
@@ -131,6 +132,7 @@
X
X static void sun_82077_fd_outb(unsigned char value, unsigned long port)
X {
+ udelay(5);
X switch(port & 7) {
X default:
X printk("floppy: Asked to write to unknown port %lx\n", port);
@@ -702,7 +704,7 @@
X sun_fdops.fd_inb = sun_82077_fd_inb;
X sun_fdops.fd_outb = sun_82077_fd_outb;
X
- use_virtual_dma = 1;
+ can_use_virtual_dma = use_virtual_dma = 1;
X sun_fdops.fd_enable_dma = sun_fd_enable_dma;
X sun_fdops.fd_disable_dma = sun_fd_disable_dma;
X sun_fdops.fd_set_dma_mode = sun_fd_set_dma_mode;
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/init.h linux/include/asm-sparc64/init.h
--- v2.2.3/linux/include/asm-sparc64/init.h Wed Apr 23 19:01:28 1997
+++ linux/include/asm-sparc64/init.h Wed Mar 10 16:53:38 1999
@@ -11,4 +11,6 @@
X #define __FINIT .previous
X #define __INITDATA .section ".data.init",#alloc,#write
X
+#define __cacheline_aligned __attribute__ ((aligned (64)))
+
X #endif
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/iommu.h linux/include/asm-sparc64/iommu.h
--- v2.2.3/linux/include/asm-sparc64/iommu.h Sat Aug 16 09:51:10 1997
+++ linux/include/asm-sparc64/iommu.h Wed Mar 10 16:53:38 1999
@@ -38,22 +38,17 @@
X #define IOPTE_VALID 0x8000000000000000 /* IOPTE is valid */
X #define IOPTE_64K 0x2000000000000000 /* IOPTE is for 64k page */
X #define IOPTE_STBUF 0x1000000000000000 /* DVMA can use streaming buffer */
-#define IOPTE_INTRA 0x0800000000000000 /* XXX what does this thing do? */
+#define IOPTE_INTRA 0x0800000000000000 /* SBUS slot-->slot direct transfer */
X #define IOPTE_PAGE 0x000001ffffffe000 /* Physical page number (PA[40:13]) */
X #define IOPTE_CACHE 0x0000000000000010 /* Cached (in UPA E-cache) */
X #define IOPTE_WRITE 0x0000000000000002 /* Writeable */
X
X struct iommu_struct {
X struct sysio_regs *sysio_regs;
- unsigned int *sbuf_flushflag_va;
- unsigned long sbuf_flushflag_pa;
- spinlock_t iommu_lock;
-
X iopte_t *page_table;
-
- /* For convenience */
- unsigned long start; /* First managed virtual address */
- unsigned long end; /* Last managed virtual address */
+ volatile unsigned int flushflag;
+ unsigned int strbuf_enabled;
+ spinlock_t iommu_lock;
X };
X
X #endif /* !(_SPARC_IOMMU_H) */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/irq.h linux/include/asm-sparc64/irq.h
--- v2.2.3/linux/include/asm-sparc64/irq.h Thu Aug 6 14:06:34 1998
+++ linux/include/asm-sparc64/irq.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: irq.h,v 1.10 1998/05/29 06:00:39 ecd Exp $
+/* $Id: irq.h,v 1.14 1998/12/19 11:05:41 davem Exp $
X * irq.h: IRQ registers on the 64-bit Sparc.
X *
X * Copyright (C) 1996 David S. Miller (da...@caip.rutgers.edu)
@@ -15,23 +15,71 @@
X int dummy;
X };
X
-/* You should not mess with this directly. That's the job of irq.c. */
+/* You should not mess with this directly. That's the job of irq.c.
+ *
+ * If you make changes here, please update hand coded assembler of
+ * SBUS/floppy interrupt handler in entry.S -DaveM
+ *
+ * This is currently one DCACHE line, two buckets per L2 cache
+ * line. Keep this in mind please.
+ */
X struct ino_bucket {
- unsigned short ino;
- short imap_off;
- unsigned short pil;
- unsigned short flags;
- unsigned int *iclr;
+ /* Next handler in per-CPU PIL worklist. We know that
+ * bucket pointers have the high 32-bits clear, so to
+ * save space we only store the bits we need.
+ */
+/*0x00*/unsigned int irq_chain;
+
+ /* PIL to schedule this IVEC at. */
+/*0x04*/unsigned char pil;
+
+ /* If an IVEC arrives while irq_info is NULL, we
+ * set this to notify request_irq() about the event.
+ */
+/*0x05*/unsigned char pending;
+
+ /* Miscellaneous flags. */
+/*0x06*/unsigned char flags;
+
+ /* Unused right now, but we will use it for proper
+ * enable_irq()/disable_irq() nesting.
+ */
+/*0x07*/unsigned char __unused;
+
+ /* Reference to handler for this IRQ. If this is
+ * non-NULL this means it is active and should be
+ * serviced. Else the pending member is set to one
+ * and later registry of the interrupt checks for
+ * this condition.
+ *
+ * Normally this is just an irq_action structure.
+ * But, on PCI, if multiple interrupt sources behind
+ * a bridge have multiple interrupt sources that share
+ * the same INO bucket, this points to an array of
+ * pointers to four IRQ action structures.
+ */
+/*0x08*/void *irq_info;
+
+ /* Sun5 Interrupt Clear Register. */
+/*0x10*/unsigned int *iclr;
+
+ /* Sun5 Interrupt Mapping Register. */
+/*0x18*/unsigned int *imap;
+
X };
X
-#define __irq_ino(irq) ((struct ino_bucket *)(unsigned long)(irq))->ino
+#define NUM_IVECS 8192
+extern struct ino_bucket ivector_table[NUM_IVECS];
+
+#define __irq_ino(irq) \
+ (((struct ino_bucket *)(unsigned long)(irq)) - &ivector_table[0])
X #define __irq_pil(irq) ((struct ino_bucket *)(unsigned long)(irq))->pil
X
X static __inline__ char *__irq_itoa(unsigned int irq)
X {
X static char buff[16];
X
- sprintf(buff, "%d,%x", __irq_pil(irq), __irq_ino(irq));
+ sprintf(buff, "%d,%x", __irq_pil(irq), (unsigned int)__irq_ino(irq));
X return buff;
X }
X
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/mmu_context.h linux/include/asm-sparc64/mmu_context.h
--- v2.2.3/linux/include/asm-sparc64/mmu_context.h Sun Nov 8 14:03:10 1998
+++ linux/include/asm-sparc64/mmu_context.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: mmu_context.h,v 1.32 1998/10/13 14:03:52 davem Exp $ */
+/* $Id: mmu_context.h,v 1.34 1999/01/11 13:45:44 davem Exp $ */
X #ifndef __SPARC64_MMU_CONTEXT_H
X #define __SPARC64_MMU_CONTEXT_H
X
@@ -89,7 +89,7 @@
X paddr = __pa(mm->pgd);
X if((tsk->tss.flags & (SPARC_FLAG_32BIT|SPARC_FLAG_KTHREAD)) ==
X (SPARC_FLAG_32BIT))
- pgd_cache = (unsigned long) mm->pgd[0];
+ pgd_cache = ((unsigned long) mm->pgd[0]) << 11UL;
X else
X pgd_cache = 0;
X __asm__ __volatile__("
@@ -115,13 +115,21 @@
X
X /*
X * After we have set current->mm to a new value, this activates
- * the context for the new mm so we see the new mappings.
+ * the context for the new mm so we see the new mappings. Currently,
+ * this is always called for 'current', if that changes put appropriate
+ * checks here.
+ *
+ * We set the cpu_vm_mask first to zero to enforce a tlb flush for
+ * the new context above, then we set it to the current cpu so the
+ * smp tlb flush routines do not get confused.
X */
X #define activate_context(__tsk) \
X do { flushw_user(); \
+ (__tsk)->mm->cpu_vm_mask = 0; \
X spin_lock(&scheduler_lock); \
X __get_mmu_context(__tsk); \
X spin_unlock(&scheduler_lock); \
+ (__tsk)->mm->cpu_vm_mask = (1UL<<smp_processor_id()); \
X } while(0)
X
X #endif /* !(__ASSEMBLY__) */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/oplib.h linux/include/asm-sparc64/oplib.h
--- v2.2.3/linux/include/asm-sparc64/oplib.h Sun Nov 8 14:03:10 1998
+++ linux/include/asm-sparc64/oplib.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: oplib.h,v 1.9 1998/10/06 20:56:05 ecd Exp $
+/* $Id: oplib.h,v 1.10 1998/12/18 10:02:03 davem Exp $
X * oplib.h: Describes the interface and available routines in the
X * Linux Prom library.
X *
@@ -175,20 +175,52 @@
X extern enum prom_output_device prom_query_output_device(void);
X
X /* Multiprocessor operations... */
-
+#ifdef __SMP__
X /* Start the CPU with the given device tree node, context table, and context
X * at the passed program counter.
X */
X extern void prom_startcpu(int cpunode, unsigned long pc, unsigned long o0);
X
-/* Stop the CPU with the passed device tree node. */
-extern int prom_stopcpu(int cpunode);
+/* Stop the current CPU. */
+extern void prom_stopself(void);
+
+/* Idle the current CPU. */
+extern void prom_idleself(void);
+
+/* Resume the CPU with the passed device tree node. */
+extern void prom_resumecpu(int cpunode);
+#endif
+
+/* Power management interfaces. */
+
+/* Put the current CPU to sleep. */
+extern void prom_sleepself(void);
+
+/* Put the entire system to sleep. */
+extern int prom_sleepsystem(void);
+
+/* Initiate a wakeup event. */
+extern int prom_wakeupsystem(void);
+
+/* MMU and memory related OBP interfaces. */
+
+/* Get unique string identifying SIMM at given physical address. */
+extern int prom_getunumber(unsigned long phys_lo, unsigned long phys_hi,
+ char *buf, int buflen);
+
+/* Retain physical memory to the caller across soft resets. */
+extern unsigned long prom_retain(char *name,
+ unsigned long pa_low, unsigned long pa_high,
+ long size, long align);
X
-/* Idle the CPU with the passed device tree node. */
-extern int prom_idlecpu(int cpunode);
+/* Load explicit I/D TLB entries into the calling processor. */
+extern long prom_itlb_load(unsigned long index,
+ unsigned long tte_data,
+ unsigned long vaddr);
X
-/* Re-Start the CPU with the passed device tree node. */
-extern int prom_restartcpu(int cpunode);
+extern long prom_dtlb_load(unsigned long index,
+ unsigned long tte_data,
+ unsigned long vaddr);
X
X /* PROM device tree traversal functions... */
X
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/pbm.h linux/include/asm-sparc64/pbm.h
--- v2.2.3/linux/include/asm-sparc64/pbm.h Thu Aug 6 14:06:34 1998
+++ linux/include/asm-sparc64/pbm.h Mon Mar 15 16:10:44 1999
@@ -1,4 +1,4 @@
-/* $Id: pbm.h,v 1.14 1998/05/29 06:00:40 ecd Exp $
+/* $Id: pbm.h,v 1.16 1999/03/14 18:13:03 davem Exp $
X * pbm.h: U2P PCI bus module pseudo driver software state.
X *
X * Copyright (C) 1997 David S. Miller (da...@caip.rutgers.edu)
@@ -30,15 +30,21 @@
X
X struct linux_psycho;
X
+/* There can be quite a few ranges and interrupt maps on a PCI
+ * segment. Thus...
+ */
+#define PROM_PCIRNG_MAX 64
+#define PROM_PCIIMAP_MAX 64
+
X struct linux_pbm_info {
X struct linux_psycho *parent;
X struct pci_vma *IO_assignments;
X struct pci_vma *MEM_assignments;
X int prom_node;
X char prom_name[64];
- struct linux_prom_pci_ranges pbm_ranges[PROMREG_MAX];
+ struct linux_prom_pci_ranges pbm_ranges[PROM_PCIRNG_MAX];
X int num_pbm_ranges;
- struct linux_prom_pci_intmap pbm_intmap[PROMREG_MAX];
+ struct linux_prom_pci_intmap pbm_intmap[PROM_PCIIMAP_MAX];
X int num_pbm_intmap;
X struct linux_prom_pci_intmask pbm_intmask;
X
@@ -63,6 +69,8 @@
X unsigned int pci_first_busno;
X unsigned int pci_last_busno;
X struct pci_bus *pci_bus;
+
+ void *starfire_cookie;
X };
X
X /* PCI devices which are not bridges have this placed in their pci_dev
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/pgtable.h linux/include/asm-sparc64/pgtable.h
--- v2.2.3/linux/include/asm-sparc64/pgtable.h Wed Jan 20 23:14:06 1999
+++ linux/include/asm-sparc64/pgtable.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: pgtable.h,v 1.96 1998/10/27 23:28:42 davem Exp $
+/* $Id: pgtable.h,v 1.102 1999/01/22 16:19:29 jj Exp $
X * pgtable.h: SpitFire page table operations.
X *
X * Copyright 1996,1997 David S. Miller (da...@caip.rutgers.edu)
@@ -14,6 +14,7 @@
X
X #ifndef __ASSEMBLY__
X #include <linux/mm.h>
+#include <linux/pagemap.h>
X #endif
X #include <asm/spitfire.h>
X #include <asm/asi.h>
@@ -106,8 +107,9 @@
X
X #define PAGE_NONE __pgprot (_PAGE_PRESENT | _PAGE_ACCESSED)
X
+/* Don't set the TTE _PAGE_W bit here, else the dirty bit never gets set. */
X #define PAGE_SHARED __pgprot (_PAGE_PRESENT | _PAGE_VALID | _PAGE_CACHE | \
- __ACCESS_BITS | _PAGE_W | _PAGE_WRITE)
+ __ACCESS_BITS | _PAGE_WRITE)
X
X #define PAGE_COPY __pgprot (_PAGE_PRESENT | _PAGE_VALID | _PAGE_CACHE | \
X __ACCESS_BITS)
@@ -250,11 +252,13 @@
X #define mk_pte_phys(physpage, pgprot) (__pte((physpage) | pgprot_val(pgprot)))
X #define pte_modify(_pte, newprot) \
X (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 pmd_set(pmdp, ptep) \
+ (pmd_val(*(pmdp)) = (__pa((unsigned long) (ptep)) >> 11UL))
+#define pgd_set(pgdp, pmdp) \
+ (pgd_val(*(pgdp)) = (__pa((unsigned long) (pmdp)) >> 11UL))
X #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 pmd_page(pmd) ((unsigned long) __va((pmd_val(pmd)<<11UL)))
+#define pgd_page(pgd) ((unsigned long) __va((pgd_val(pgd)<<11UL)))
X #define pte_none(pte) (!pte_val(pte))
X #define pte_present(pte) (pte_val(pte) & _PAGE_PRESENT)
X #define pte_clear(pte) (pte_val(*(pte)) = 0UL)
@@ -371,7 +375,7 @@
X (unsigned long)ret->pprev_hash = mask;
X if (!mask)
X pgd_quicklist = (unsigned long *)ret->next_hash;
- ret = (struct page *) (page_address(ret) + off);
+ ret = (struct page *)(page_address(ret) + off);
X pgd_cache_size--;
X } else {
X ret = (struct page *) __get_free_page(GFP_KERNEL);
@@ -519,7 +523,7 @@
X
X extern inline void SET_PAGE_DIR(struct task_struct *tsk, pgd_t *pgdir)
X {
- if(pgdir != swapper_pg_dir && tsk->mm == current->mm) {
+ if(pgdir != swapper_pg_dir && tsk == current) {
X register unsigned long paddr asm("o5");
X
X paddr = __pa(pgdir);
@@ -642,9 +646,11 @@
X
X extern void * module_map (unsigned long size);
X extern void module_unmap (void *addr);
+extern unsigned long *sparc64_valid_addr_bitmap;
X
X /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
X #define PageSkip(page) (test_bit(PG_skip, &(page)->flags))
+#define kern_addr_valid(addr) (test_bit(__pa((unsigned long)(addr))>>22, sparc64_valid_addr_bitmap))
X
X extern int io_remap_page_range(unsigned long from, unsigned long offset,
X unsigned long size, pgprot_t prot, int space);
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/posix_types.h linux/include/asm-sparc64/posix_types.h
--- v2.2.3/linux/include/asm-sparc64/posix_types.h Mon Oct 5 13:13:44 1998
+++ linux/include/asm-sparc64/posix_types.h Wed Mar 10 16:53:38 1999
@@ -38,7 +38,11 @@
X #endif
X
X typedef struct {
+#if defined(__KERNEL__) || defined(__USE_ALL)
X int val[2];
+#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */
+ int __val[2];
+#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
X } __kernel_fsid_t;
X
X /* Now 32bit compatibility types */
@@ -62,6 +66,8 @@
X typedef long __kernel_loff_t32;
X typedef __kernel_fsid_t __kernel_fsid_t32;
X
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+
X #undef __FD_SET
X static __inline__ void __FD_SET(unsigned long fd, __kernel_fd_set *fdsetp)
X {
@@ -130,5 +136,7 @@
X tmp++;
X }
X }
+
+#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
X
X #endif /* !(__ARCH_SPARC64_POSIX_TYPES_H) */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/processor.h linux/include/asm-sparc64/processor.h
--- v2.2.3/linux/include/asm-sparc64/processor.h Tue Jan 19 11:32:53 1999
+++ linux/include/asm-sparc64/processor.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: processor.h,v 1.51 1998/10/21 03:21:19 davem Exp $
+/* $Id: processor.h,v 1.53 1999/01/19 07:57:51 davem Exp $
X * include/asm-sparc64/processor.h
X *
X * Copyright (C) 1996 David S. Miller (da...@caip.rutgers.edu)
@@ -82,7 +82,7 @@
X #define SPARC_FLAG_PERFCTR 0x200 /* task has performance counters active */
X
X #define INIT_MMAP { &init_mm, 0xfffff80000000000, 0xfffff80001000000, \
- PAGE_SHARED , VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap }
+ NULL, PAGE_SHARED , VM_READ | VM_WRITE | VM_EXEC, 1, NULL, NULL }
X
X #define INIT_TSS { \
X /* ksp, wstate, cwp, flags, ctx, */ \
@@ -200,7 +200,8 @@
X : \
X : "r" (regs), "r" (sp - REGWIN32_SZ), \
X "i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0])), \
- "r" (current->mm->pgd[0]), "r" (TSB_REG), "i" (ASI_DMMU)); \
+ "r" (((unsigned long)current->mm->pgd[0])<<11UL), \
+ "r" (TSB_REG), "i" (ASI_DMMU)); \
X } while(0)
X
X /* Free all resources held by a thread. */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/psycho.h linux/include/asm-sparc64/psycho.h
--- v2.2.3/linux/include/asm-sparc64/psycho.h Thu Apr 23 20:21:38 1998
+++ linux/include/asm-sparc64/psycho.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: psycho.h,v 1.3 1998/03/15 13:24:28 ecd Exp $
+/* $Id: psycho.h,v 1.4 1998/12/23 10:08:16 davem Exp $
X * psycho.h: UltraSparc AX specific PCI definitions.
X *
X * Copyright (C) 1997 Eddie C. Dost (e...@skynet.be)
@@ -263,14 +263,43 @@
X #define PSYCHO_CEAFSR_BLK 0x0000000000800000 /* Trans was block operation */
X #define PSYCHO_CEAFSR_RESV2 0x00000000007fffff /* Reserved */
X
-/* DMA Scoreboard Diagnostic Register(s) */
-#define PSYCHO_DSCORE_VALID 0x8000000000000000 /* Entry is valid */
-#define PSYCHO_DSCORE_C 0x4000000000000000 /* Transaction cacheable */
-#define PSYCHO_DSCORE_READ 0x2000000000000000 /* Transaction was a read */
-#define PSYCHO_DSCORE_TAG 0x1f00000000000000 /* Transaction ID */
-#define PSYCHO_DSCORE_ADDR 0x00fffffffff80000 /* Transaction PADDR */
-#define PSYCHO_DSCORE_BMSK 0x000000000007fff8 /* Bytemask of pending transfer */
-#define PSYCHO_DSCORE_SRC 0x0000000000000007 /* Transaction source */
+/* PSYCHO Performance Monitor Register, the counter holds 2 32-bit event counters. */
+#define PSYCHO_PMCTRL_RESV3 0xffffffffffff0000 /* Reserved */
+#define PSYCHO_PMCTRL_CLR1 0x0000000000008000 /* Clear SEL1 counter */
+#define PSYCHO_PMCTRL_RESV2 0x0000000000006000 /* Reserved */
+#define PSYCHO_PMCTRL_SEL1 0x0000000000001f00 /* Event source 1 */
+#define PSYCHO_PMCTRL_CLR0 0x0000000000000080 /* Clear SEL0 counter */
+#define PSYCHO_PMCTRL_RESV1 0x0000000000000060 /* Reserved */
+#define PSYCHO_PMCTRL_SEL0 0x000000000000001f /* Event source 0 */
+
+/* SEL0/SEL1 each can take any one of the following values. */
+#define PMCTRL_SEL_NSDRA 0x00 /* # of streaming dvma reads for PCI A */
+#define PMCTRL_SEL_NSDWA 0x01 /* # of streaming dvma writes for PCI A */
+#define PMCTRL_SEL_NCDRA 0x02 /* # of consistent dvma reads for PCI A */
+#define PMCTRL_SEL_NCDWA 0x03 /* # of consistent dvma writes for PCI A */
+#define PMCTRL_SEL_SBMA 0x04 /* # of streaming buffer misses on PCI A */
+#define PMCTRL_SEL_DCGA 0x05 /* # of DVMA granted cycles on PCI A */
+#define PMCTRL_SEL_DWTA 0x06 /* # of DVMA words transferred on PCI A */
+#define PMCTRL_SEL_CPIOA 0x07 /* # of PIO cycles used by PSYCHO on PCI A */
+#define PMCTRL_SEL_NSDRB 0x08 /* # of streaming dvma reads for PCI B */
+#define PMCTRL_SEL_NSDWB 0x09 /* # of streaming dvma writes for PCI B */
+#define PMCTRL_SEL_NCDRB 0x0a /* # of consistent dvma reads for PCI B */
+#define PMCTRL_SEL_NCDWB 0x0b /* # of consistent dvma writes for PCI B */
+#define PMCTRL_SEL_SBMB 0x0c /* # of streaming buffer misses on PCI B */
+#define PMCTRL_SEL_DCGB 0x0d /* # of DVMA granted cycles on PCI B */
+#define PMCTRL_SEL_DWTB 0x0e /* # of DVMA words transferred on PCI B */
+#define PMCTRL_SEL_CPIOB 0x0f /* # of PIO cycles used by PSYCHO on PCI B */
+#define PMCTRL_SEL_TMISS 0x10 /* # of IOMMU TLB misses */
+#define PMCTRL_SEL_IRQ 0x11 /* # of interrupts */
+#define PMCTRL_SEL_INACK 0x12 /* # of interrupt NACKs on UPA */
+#define PMCTRL_SEL_PRD 0x13 /* # of PIO reads */
+#define PMCTRL_SEL_PWR 0x14 /* # of PIO writes */
+#define PMCTRL_SEL_MBT 0x15 /* # of Merge Buffer transactions */
+#define PMCTRL_SEL_PDRTA 0x16 /* # of PCI A DVMA tablewalk induced retries */
+#define PMCTRL_SEL_PDRSA 0x17 /* # of PCI A DVMA str buf induced retries */
+#define PMCTRL_SEL_PDRTB 0x18 /* # of PCI B DVMA tablewalk induced retries */
+#define PMCTRL_SEL_PDRSB 0x19 /* # of PCI B DVMA str buf induced retries */
+/* Values 0x1a --> 0x1f are reserved. */
X
X /* PSYCHO PCI Control Register */
X #define PSYCHO_PCICTRL_RESV1 0xfffffff000000000 /* Reserved */
@@ -302,6 +331,16 @@
X #define PSYCHO_PCIAFSR_MID 0x000000003e000000 /* MID causing the error */
X #define PSYCHO_PCIAFSR_RESV3 0x0000000001ffffff /* Reserved */
X
+/* PSYCHO Diagnostic Register. */
+#define PSYCHO_PSYDIAG_RESV 0xffffffffffffff80 /* Reserved */
+#define PSYCHO_PCIDIAG_DRETRY 0x0000000000000040 /* Disable retry limit */
+#define PSYCHO_PCIDIAG_DISYNC 0x0000000000000020 /* Disable DMA wr / irq sync */
+#define PSYCHO_PCIDIAG_DDWSYNC 0x0000000000000010 /* Disable DMA wr / PIO rd sync */
+#define PSYCHO_PCIDIAG_IDDPAR 0x0000000000000008 /* Invert DMA data parity */
+#define PSYCHO_PCIDIAG_IPDPAR 0x0000000000000004 /* Invert PIO data parity */
+#define PSYCHO_PCIDIAG_IPAPAR 0x0000000000000002 /* Invert PIO address parity */
+#define PSYCHO_PCIDIAG_LPBACK 0x0000000000000001 /* Enable loopback mode */
+
X /* IOMMU things defined fully in asm-sparc64/iommu.h */
X
X /* Streaming Buffer Control Register */
@@ -319,6 +358,15 @@
X /* Streaming Buffer Flush Synchronization Register */
X #define PSYCHO_SBUFSYNC_ADDR 0x000001ffffffffc0 /* Physical address to update */
X #define PSYCHO_SBUFSYNC_RESV 0x000000000000003f /* Ignored bits */
+
+/* DMA Scoreboard Diagnostic Register(s) */
+#define PSYCHO_DSCORE_VALID 0x8000000000000000 /* Entry is valid */
+#define PSYCHO_DSCORE_C 0x4000000000000000 /* Transaction cacheable */
+#define PSYCHO_DSCORE_READ 0x2000000000000000 /* Transaction was a read */
+#define PSYCHO_DSCORE_TAG 0x1f00000000000000 /* Transaction ID */
+#define PSYCHO_DSCORE_ADDR 0x00fffffffff80000 /* Transaction PADDR */
+#define PSYCHO_DSCORE_BMSK 0x000000000007fff8 /* Bytemask of pending transfer */
+#define PSYCHO_DSCORE_SRC 0x0000000000000007 /* Transaction source */
X
X /* PSYCHO Interrupt mapping register(s). */
X #define PSYCHO_IMAP_RESV1 0xffffffff00000000 /* Reserved */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/resource.h linux/include/asm-sparc64/resource.h
--- v2.2.3/linux/include/asm-sparc64/resource.h Thu Jun 26 12:33:40 1997
+++ linux/include/asm-sparc64/resource.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: resource.h,v 1.3 1997/06/14 17:35:09 davem Exp $
+/* $Id: resource.h,v 1.4 1998/11/19 20:01:49 davem Exp $
X * resource.h: Resource definitions.
X *
X * Copyright (C) 1996 David S. Miller (da...@caip.rutgers.edu)
@@ -28,7 +28,7 @@
X #define INIT_RLIMITS \
X { \
X {LONG_MAX, LONG_MAX}, {LONG_MAX, LONG_MAX}, \
- {LONG_MAX, LONG_MAX}, {_STK_LIM, _STK_LIM}, \
+ {LONG_MAX, LONG_MAX}, {_STK_LIM, LONG_MAX}, \
X { 0, LONG_MAX}, {LONG_MAX, LONG_MAX}, \
X {NR_OPEN, NR_OPEN}, {MAX_TASKS_PER_USER, MAX_TASKS_PER_USER}, \
X {LONG_MAX, LONG_MAX}, {LONG_MAX, LONG_MAX} \
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/sbus.h linux/include/asm-sparc64/sbus.h
--- v2.2.3/linux/include/asm-sparc64/sbus.h Thu Aug 6 14:06:34 1998
+++ linux/include/asm-sparc64/sbus.h Wed Mar 10 16:53:38 1999
@@ -1,4 +1,4 @@
-/* $Id: sbus.h,v 1.7 1998/05/22 14:33:40 jj Exp $
+/* $Id: sbus.h,v 1.10 1998/12/16 04:33:58 davem Exp $
X * sbus.h: Defines for the Sun SBus.
X *
X * Copyright (C) 1996 David S. Miller (da...@caip.rutgers.edu)
@@ -74,6 +74,8 @@
X int clock_freq;
X struct linux_prom_ranges sbus_ranges[PROMREG_MAX];
X int num_sbus_ranges;
+ int upaid;
+ void *starfire_cookie;
X };
X
X extern struct linux_sbus *SBus_chain;
@@ -87,6 +89,16 @@
X
X #define for_all_sbusdev(device, bus) \
X for((bus) = SBus_chain, ((device) = (bus) ? (bus)->devices : 0); (bus); (device)=((device)->next ? (device)->next : ((bus) = (bus)->next, (bus) ? (bus)->devices : 0)))
+
+extern void mmu_set_sbus64(struct linux_sbus_device *, int);
+
+/* If you did not get the buffer from mmu_get_*() or sparc_alloc_dvma()
+ * then you must use this to get the 32-bit SBUS dvma address.
+ * And in this case it is your responsibility to make sure the buffer
+ * is GFP_DMA, ie. that it is not greater than MAX_DMA_ADDRESS.
+ */
+extern unsigned long phys_base;
+#define sbus_dvma_addr(__addr) ((__u32)(__pa(__addr) - phys_base))
X
X /* Apply promlib probed SBUS ranges to registers. */
X extern void prom_apply_sbus_ranges(struct linux_sbus *sbus,
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/scatterlist.h linux/include/asm-sparc64/scatterlist.h
--- v2.2.3/linux/include/asm-sparc64/scatterlist.h Mon Apr 14 16:28:24 1997
+++ linux/include/asm-sparc64/scatterlist.h Wed Mar 10 16:53:38 1999
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 45'
echo 'File patch-2.2.4 is continued in part 46'
echo 46 > _shar_seq_.tmp
#!/bin/sh
# this is part 47 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 47; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
- return pri;
X }
X
X /*
diff -u --recursive --new-file v2.2.3/linux/include/net/neighbour.h linux/include/net/neighbour.h
--- v2.2.3/linux/include/net/neighbour.h Fri Jul 31 17:11:08 1998
+++ linux/include/net/neighbour.h Tue Mar 23 13:55:07 1999
@@ -226,7 +226,6 @@
X neigh->confirmed = jiffies;
X }
X
-
X extern __inline__ struct neighbour *
X neigh_lookup(struct neigh_table *tbl, const void *pkey, struct device *dev)
X {
@@ -258,6 +257,7 @@
X extern __inline__ void neigh_table_lock(struct neigh_table *tbl)
X {
X atomic_inc(&tbl->lock);
+ synchronize_bh();
X }
X
X extern __inline__ void neigh_table_unlock(struct neigh_table *tbl)
diff -u --recursive --new-file v2.2.3/linux/include/net/pkt_cls.h linux/include/net/pkt_cls.h
--- v2.2.3/linux/include/net/pkt_cls.h Sat May 2 14:19:54 1998
+++ linux/include/net/pkt_cls.h Sun Mar 21 07:22:00 1999
@@ -50,7 +50,7 @@
X
X unsigned long (*get)(struct tcf_proto*, u32 handle);
X void (*put)(struct tcf_proto*, unsigned long);
- int (*change)(struct tcf_proto*, u32 handle, struct rtattr **, unsigned long *);
+ int (*change)(struct tcf_proto*, unsigned long, u32 handle, struct rtattr **, unsigned long *);
X int (*delete)(struct tcf_proto*, unsigned long);
X void (*walk)(struct tcf_proto*, struct tcf_walker *arg);
X
@@ -75,6 +75,14 @@
X return err;
X }
X return -1;
+}
+
+extern __inline__ unsigned long cls_set_class(unsigned long *clp, unsigned long cl)
+{
+ net_serialize_enter();
+ cl = xchg(clp, cl);
+ net_serialize_leave();
+ return cl;
X }
X
X extern int register_tcf_proto_ops(struct tcf_proto_ops *ops);
diff -u --recursive --new-file v2.2.3/linux/include/net/pkt_sched.h linux/include/net/pkt_sched.h
--- v2.2.3/linux/include/net/pkt_sched.h Sat Sep 5 16:46:41 1998
+++ linux/include/net/pkt_sched.h Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X #define PSCHED_JIFFIES 2
X #define PSCHED_CPU 3
X
-#define PSCHED_CLOCK_SOURCE PSCHED_GETTIMEOFDAY
+#define PSCHED_CLOCK_SOURCE PSCHED_JIFFIES
X
X #include <linux/pkt_sched.h>
X #include <net/pkt_cls.h>
@@ -25,6 +25,7 @@
X {
X /* Child qdisc manipulation */
X int (*graft)(struct Qdisc *, unsigned long cl, struct Qdisc *, struct Qdisc **);
+ struct Qdisc * (*leaf)(struct Qdisc *, unsigned long cl);
X
X /* Class manipulation routines */
X unsigned long (*get)(struct Qdisc *, u32 classid);
@@ -35,7 +36,7 @@
X
X /* Filter manipulation */
X struct tcf_proto ** (*tcf_chain)(struct Qdisc *, unsigned long);
- unsigned long (*bind_tcf)(struct Qdisc *, u32 classid);
+ unsigned long (*bind_tcf)(struct Qdisc *, unsigned long, u32 classid);
X void (*unbind_tcf)(struct Qdisc *, unsigned long);
X
X /* rtnetlink specific */
@@ -57,6 +58,7 @@
X int (*init)(struct Qdisc *, struct rtattr *arg);
X void (*reset)(struct Qdisc *);
X void (*destroy)(struct Qdisc *);
+ int (*change)(struct Qdisc *, struct rtattr *arg);
X
X int (*dump)(struct Qdisc *, struct sk_buff *);
X };
@@ -74,13 +76,12 @@
X int (*enqueue)(struct sk_buff *skb, struct Qdisc *dev);
X struct sk_buff * (*dequeue)(struct Qdisc *dev);
X unsigned flags;
-#define TCQ_F_DEFAULT 1
-#define TCQ_F_BUILTIN 2
+#define TCQ_F_BUILTIN 1
+#define TCQ_F_THROTTLED 2
X struct Qdisc_ops *ops;
X struct Qdisc *next;
X u32 handle;
- u32 classid;
- struct Qdisc *parent;
+ atomic_t refcnt;
X struct sk_buff_head q;
X struct device *dev;
X
@@ -89,6 +90,11 @@
X unsigned long tx_last;
X int (*reshape_fail)(struct sk_buff *skb, struct Qdisc *q);
X
+ /* This field is deprecated, but it is still used by CBQ
+ * and it will live until better solution will be invented.
+ */
+ struct Qdisc *__parent;
+
X char data[0];
X };
X
@@ -129,6 +135,15 @@
X which have fast and precise clock source, but it is too expensive.
X */
X
+/* General note about internal clock.
+
+ Any clock source returns time intervals, measured in units
+ close to 1usec. With source PSCHED_GETTIMEOFDAY it is precisely
+ microseconds, otherwise something close but different chosen to minimize
+ arithmetic cost. Ratio usec/internal untis in form nominator/denominator
+ may be read from /proc/net/psched.
+ */
+
X
X #if PSCHED_CLOCK_SOURCE == PSCHED_GETTIMEOFDAY
X
@@ -138,8 +153,12 @@
X #define PSCHED_GET_TIME(stamp) do_gettimeofday(&(stamp))
X #define PSCHED_US2JIFFIE(usecs) (((usecs)+(1000000/HZ-1))/(1000000/HZ))
X
+#define PSCHED_EXPORTLIST EXPORT_SYMBOL(psched_tod_diff);
+
X #else /* PSCHED_CLOCK_SOURCE != PSCHED_GETTIMEOFDAY */
X
+#define PSCHED_EXPORTLIST PSCHED_EXPORTLIST_1 PSCHED_EXPORTLIST_2
+
X typedef u64 psched_time_t;
X typedef long psched_tdiff_t;
X
@@ -147,10 +166,6 @@
X
X #if PSCHED_CLOCK_SOURCE == PSCHED_JIFFIES
X
-#define PSCHED_WATCHER unsigned long
-
-extern PSCHED_WATCHER psched_time_mark;
-
X #if HZ == 100
X #define PSCHED_JSCALE 13
X #elif HZ == 1024
@@ -159,22 +174,45 @@
X #define PSCHED_JSCALE 0
X #endif
X
+#define PSCHED_EXPORTLIST_2
+
+#if ~0UL == 0xFFFFFFFF
+
+#define PSCHED_WATCHER unsigned long
+
+extern PSCHED_WATCHER psched_time_mark;
+
X #define PSCHED_GET_TIME(stamp) ((stamp) = psched_time_base + (((unsigned long)(jiffies-psched_time_mark))<<PSCHED_JSCALE))
-#define PSCHED_US2JIFFIE(delay) ((delay)>>PSCHED_JSCALE)
+
+#define PSCHED_EXPORTLIST_1 EXPORT_SYMBOL(psched_time_base); \
+ EXPORT_SYMBOL(psched_time_mark);
+
+#else
+
+#define PSCHED_GET_TIME(stamp) ((stamp) = (jiffies<<PSCHED_JSCALE))
+
+#define PSCHED_EXPORTLIST_1
+
+#endif
+
+#define PSCHED_US2JIFFIE(delay) (((delay)+(1<<PSCHED_JSCALE)-1)>>PSCHED_JSCALE)
X
X #elif PSCHED_CLOCK_SOURCE == PSCHED_CPU
X
X extern psched_tdiff_t psched_clock_per_hz;
X extern int psched_clock_scale;
X
+#define PSCHED_EXPORTLIST_2 EXPORT_SYMBOL(psched_clock_per_hz); \
+ EXPORT_SYMBOL(psched_clock_scale);
+
X #define PSCHED_US2JIFFIE(delay) (((delay)+psched_clock_per_hz-1)/psched_clock_per_hz)
X
X #if CPU == 586 || CPU == 686
X
X #define PSCHED_GET_TIME(stamp) \
-({ u32 hi, lo; \
- __asm__ __volatile__ (".byte 0x0f,0x31" :"=a" (lo), "=d" (hi)); \
- (stamp) = ((((u64)hi)<<32) + lo)>>psched_clock_scale; \
+({ u64 __cur; \
+ __asm__ __volatile__ (".byte 0x0f,0x31" :"=A" (__cur)); \
+ (stamp) = __cur>>psched_clock_scale; \
X })
X
X #elif defined (__alpha__)
@@ -191,6 +229,9 @@
X (stamp) = (psched_time_base + __res)>>psched_clock_scale; \
X })
X
+#define PSCHED_EXPORTLIST_1 EXPORT_SYMBOL(psched_time_base); \
+ EXPORT_SYMBOL(psched_time_mark);
+
X #else
X
X #error PSCHED_CLOCK_SOURCE=PSCHED_CPU is not supported on this arch.
@@ -219,13 +260,15 @@
X __delta; \
X })
X
+extern int psched_tod_diff(int delta_sec, int bound);
+
X #define PSCHED_TDIFF_SAFE(tv1, tv2, bound, guard) \
X ({ \
X int __delta_sec = (tv1).tv_sec - (tv2).tv_sec; \
X int __delta = (tv1).tv_usec - (tv2).tv_usec; \
X switch (__delta_sec) { \
X default: \
- __delta = (bound); guard; break; \
+ __delta = psched_tod_diff(__delta_sec, bound); guard; break; \
X case 2: \
X __delta += 1000000; \
X case 1: \
@@ -290,6 +333,8 @@
X u32 index;
X
X int action;
+ int result;
+ u32 ewma_rate;
X u32 burst;
X u32 mtu;
X
@@ -298,10 +343,12 @@
X psched_time_t t_c;
X struct qdisc_rate_table *R_tab;
X struct qdisc_rate_table *P_tab;
+
+ struct tc_stats stats;
X };
X
X extern void tcf_police_destroy(struct tcf_police *p);
-extern struct tcf_police * tcf_police_locate(struct rtattr *rta);
+extern struct tcf_police * tcf_police_locate(struct rtattr *rta, struct rtattr *est);
X extern int tcf_police_dump(struct sk_buff *skb, struct tcf_police *p);
X extern int tcf_police(struct sk_buff *skb, struct tcf_police *p);
X
@@ -327,7 +374,6 @@
X void qdisc_reset(struct Qdisc *qdisc);
X void qdisc_destroy(struct Qdisc *qdisc);
X struct Qdisc * qdisc_create_dflt(struct device *dev, struct Qdisc_ops *ops);
-struct Qdisc * dev_set_scheduler(struct device *dev, struct Qdisc *qdisc);
X int qdisc_new_estimator(struct tc_stats *stats, struct rtattr *opt);
X void qdisc_kill_estimator(struct tc_stats *stats);
X struct qdisc_rate_table *qdisc_get_rtab(struct tc_ratespec *r, struct rtattr *tab);
diff -u --recursive --new-file v2.2.3/linux/include/net/route.h linux/include/net/route.h
--- v2.2.3/linux/include/net/route.h Sat Sep 5 16:46:42 1998
+++ linux/include/net/route.h Tue Mar 23 13:55:11 1999
@@ -57,6 +57,9 @@
X __u32 src;
X int iif;
X int oif;
+#ifdef CONFIG_IP_ROUTE_FWMARK
+ __u32 fwmark;
+#endif
X __u8 tos;
X __u8 scope;
X };
@@ -92,6 +95,16 @@
X };
X
X extern struct rtable *rt_hash_table[RT_HASH_DIVISOR];
+
+struct ip_rt_acct
+{
+ __u32 o_bytes;
+ __u32 o_packets;
+ __u32 i_bytes;
+ __u32 i_packets;
+};
+
+extern struct ip_rt_acct ip_rt_acct[256];
X
X extern void ip_rt_init(void);
X extern void ip_rt_redirect(u32 old_gw, u32 dst, u32 new_gw,
diff -u --recursive --new-file v2.2.3/linux/include/net/sock.h linux/include/net/sock.h
--- v2.2.3/linux/include/net/sock.h Wed Mar 10 15:29:50 1999
+++ linux/include/net/sock.h Tue Mar 23 13:55:14 1999
@@ -918,6 +918,18 @@
X extern void net_reset_timer (struct sock *, int, unsigned long);
X extern void net_timer (unsigned long);
X
+extern __inline__ int gfp_any(void)
+{
+ return in_interrupt() ? GFP_ATOMIC : GFP_KERNEL;
+}
+
+#ifdef __SMP__
+#define net_serialize_enter() start_bh_atomic()
+#define net_serialize_leave() end_bh_atomic()
+#else
+#define net_serialize_enter() barrier();
+#define net_serialize_leave() barrier();
+#endif
X
X /*
X * Enable debug/info messages
diff -u --recursive --new-file v2.2.3/linux/include/net/tcp.h linux/include/net/tcp.h
--- v2.2.3/linux/include/net/tcp.h Tue Feb 23 15:21:35 1999
+++ linux/include/net/tcp.h Tue Mar 23 13:55:18 1999
@@ -487,9 +487,7 @@
X extern int tcp_v4_rcv(struct sk_buff *skb,
X unsigned short len);
X
-extern int tcp_do_sendmsg(struct sock *sk,
- int iovlen, struct iovec *iov,
- int flags);
+extern int tcp_do_sendmsg(struct sock *sk, struct msghdr *msg);
X
X extern int tcp_ioctl(struct sock *sk,
X int cmd,
@@ -808,6 +806,23 @@
X (tcp_packets_in_flight(tp) < tp->snd_cwnd) &&
X !after(TCP_SKB_CB(skb)->end_seq, tp->snd_una + tp->snd_wnd) &&
X tp->retransmits == 0);
+}
+
+/* Push out any pending frames which were held back due to
+ * TCP_CORK or attempt at coalescing tiny packets.
+ * The socket must be locked by the caller.
+ */
+static __inline__ void tcp_push_pending_frames(struct sock *sk, struct tcp_opt *tp)
+{
+ if(tp->send_head) {
+ if(tcp_snd_test(sk, tp->send_head))
+ tcp_write_xmit(sk);
+ else if(tp->packets_out == 0 && !tp->pending) {
+ /* We held off on this in tcp_send_skb() */
+ tp->pending = TIME_PROBE0;
+ tcp_reset_xmit_timer(sk, TIME_PROBE0, tp->rto);
+ }
+ }
X }
X
X /* This tells the input processing path that an ACK should go out
diff -u --recursive --new-file v2.2.3/linux/include/scsi/scsi.h linux/include/scsi/scsi.h
--- v2.2.3/linux/include/scsi/scsi.h Tue Dec 2 11:41:45 1997
+++ linux/include/scsi/scsi.h Mon Mar 15 16:11:31 1999
@@ -133,6 +133,7 @@
X #define TYPE_MOD 0x07 /* Magneto-optical disk -
X * - treated as TYPE_DISK */
X #define TYPE_MEDIUM_CHANGER 0x08
+#define TYPE_ENCLOSURE 0x0d /* Enclosure Services Device */
X #define TYPE_NO_LUN 0x7f
X
X /*
diff -u --recursive --new-file v2.2.3/linux/kernel/acct.c linux/kernel/acct.c
--- v2.2.3/linux/kernel/acct.c Thu Dec 31 10:29:03 1998
+++ linux/kernel/acct.c Mon Mar 22 10:08:50 1999
@@ -194,13 +194,13 @@
X }
X if (old_acct) {
X do_acct_process(0,old_acct);
- fput(old_acct);
+ filp_close(old_acct);
X }
X out:
X unlock_kernel();
X return error;
X out_err:
- fput(file);
+ filp_close(file);
X goto out;
X }
X
diff -u --recursive --new-file v2.2.3/linux/kernel/exit.c linux/kernel/exit.c
--- v2.2.3/linux/kernel/exit.c Tue Jan 19 11:32:53 1999
+++ linux/kernel/exit.c Mon Mar 22 10:04:59 1999
@@ -169,7 +169,7 @@
X struct file * file = files->fd[i];
X if (file) {
X files->fd[i] = NULL;
- close_fp(file, files);
+ filp_close(file, files);
X }
X }
X i++;
diff -u --recursive --new-file v2.2.3/linux/kernel/fork.c linux/kernel/fork.c
--- v2.2.3/linux/kernel/fork.c Wed Mar 10 15:29:50 1999
+++ linux/kernel/fork.c Wed Mar 17 12:47:19 1999
@@ -510,6 +510,7 @@
X down(¤t->mm->mmap_sem);
X lock_kernel();
X
+ retval = -EAGAIN;
X if (p->user) {
X if (atomic_read(&p->user->count) >= p->rlim[RLIMIT_NPROC].rlim_cur)
X goto bad_fork_free;
@@ -518,7 +519,6 @@
X {
X struct task_struct **tslot;
X tslot = find_empty_process();
- retval = -EAGAIN;
X if (!tslot)
X goto bad_fork_free;
X p->tarray_ptr = tslot;
diff -u --recursive --new-file v2.2.3/linux/kernel/ksyms.c linux/kernel/ksyms.c
--- v2.2.3/linux/kernel/ksyms.c Tue Feb 23 15:21:35 1999
+++ linux/kernel/ksyms.c Mon Mar 22 10:03:32 1999
@@ -136,6 +136,7 @@
X EXPORT_SYMBOL(get_empty_filp);
X EXPORT_SYMBOL(init_private_file);
X EXPORT_SYMBOL(filp_open);
+EXPORT_SYMBOL(filp_close);
X EXPORT_SYMBOL(fput);
X EXPORT_SYMBOL(put_filp);
X EXPORT_SYMBOL(check_disk_change);
diff -u --recursive --new-file v2.2.3/linux/kernel/sched.c linux/kernel/sched.c
--- v2.2.3/linux/kernel/sched.c Tue Feb 23 15:21:35 1999
+++ linux/kernel/sched.c Mon Mar 15 16:11:55 1999
@@ -3,7 +3,6 @@
X *
X * Copyright (C) 1991, 1992 Linus Torvalds
X *
- * 1996-04-21 Modified by Ulrich Windl to make NTP work
X * 1996-12-23 Modified by Dave Grothe to fix bugs in semaphores and
X * make semaphores SMP safe
X * 1997-01-28 Modified by Finn Arne Gangstad to make timers scale better.
@@ -15,6 +14,7 @@
X * serialize accesses to xtime/lost_ticks).
X * Copyright (C) 1998 Andrea Arcangeli
X * 1998-12-28 Implemented better SMP scheduling by Ingo Molnar
+ * 1999-03-10 Improved NTP compatibility by Ulrich Windl
X */
X
X /*
@@ -62,7 +62,7 @@
X * phase-lock loop variables
X */
X /* TIME_ERROR prevents overwriting the CMOS clock */
-int time_state = TIME_ERROR; /* clock synchronization status */
+int time_state = TIME_OK; /* clock synchronization status */
X int time_status = STA_UNSYNC; /* clock status bits */
X long time_offset = 0; /* time adjustment (us) */
X long time_constant = 2; /* pll time constant */
@@ -585,7 +585,7 @@
X long prevstate;
X cycles_t last_schedule;
X } schedule_data;
- char __pad [L1_CACHE_BYTES];
+ char __pad [SMP_CACHE_BYTES];
X } aligned_data [NR_CPUS] __cacheline_aligned = { {{&init_task,0}}};
X
X
@@ -1138,7 +1138,6 @@
X time_maxerror += time_tolerance >> SHIFT_USEC;
X if ( time_maxerror > NTP_PHASE_LIMIT ) {
X time_maxerror = NTP_PHASE_LIMIT;
- time_state = TIME_ERROR; /* p. 17, sect. 4.3, (b) */
X time_status |= STA_UNSYNC;
X }
X
diff -u --recursive --new-file v2.2.3/linux/kernel/softirq.c linux/kernel/softirq.c
--- v2.2.3/linux/kernel/softirq.c Tue Dec 22 14:16:59 1998
+++ linux/kernel/softirq.c Sun Mar 21 07:22:00 1999
@@ -62,6 +62,7 @@
X if (hardirq_trylock(cpu)) {
X __sti();
X run_bottom_halves();
+ __cli();
X hardirq_endlock(cpu);
X }
X softirq_endlock(cpu);
diff -u --recursive --new-file v2.2.3/linux/kernel/time.c linux/kernel/time.c
--- v2.2.3/linux/kernel/time.c Wed Jan 20 23:14:07 1999
+++ linux/kernel/time.c Thu Mar 11 23:26:03 1999
@@ -96,7 +96,6 @@
X xtime.tv_usec = 0;
X time_adjust = 0; /* stop active adjtime() */
X time_status |= STA_UNSYNC;
- time_state = TIME_ERROR; /* p. 24, (a) */
X time_maxerror = NTP_PHASE_LIMIT;
X time_esterror = NTP_PHASE_LIMIT;
X sti();
@@ -221,7 +220,7 @@
X int do_adjtimex(struct timex *txc)
X {
X long ltemp, mtemp, save_adjust;
- int error = 0;
+ int result = time_state; /* mostly `TIME_OK' */
X
X /* In order to modify anything, you gotta be super-user! */
X if (txc->modes && !capable(CAP_SYS_TIME))
@@ -250,16 +249,13 @@
X /* If there are input parameters, then process them */
X if (txc->modes)
X {
- if (time_state == TIME_ERROR)
- time_state = TIME_OK; /* reset error -- why? */
-
X if (txc->modes & ADJ_STATUS) /* only set allowed bits */
X time_status = (txc->status & ~STA_RONLY) |
X (time_status & STA_RONLY);
X
X if (txc->modes & ADJ_FREQUENCY) { /* p. 22 */
X if (txc->freq > MAXFREQ || txc->freq < -MAXFREQ) {
- error = -EINVAL;
+ result = -EINVAL;
X goto leave;
X }
X time_freq = txc->freq - pps_freq;
@@ -267,7 +263,7 @@
X
X if (txc->modes & ADJ_MAXERROR) {
X if (txc->maxerror < 0 || txc->maxerror >= NTP_PHASE_LIMIT) {
- error = -EINVAL;
+ result = -EINVAL;
X goto leave;
X }
X time_maxerror = txc->maxerror;
@@ -275,7 +271,7 @@
X
X if (txc->modes & ADJ_ESTERROR) {
X if (txc->esterror < 0 || txc->esterror >= NTP_PHASE_LIMIT) {
- error = -EINVAL;
+ result = -EINVAL;
X goto leave;
X }
X time_esterror = txc->esterror;
@@ -283,7 +279,7 @@
X
X if (txc->modes & ADJ_TIMECONST) { /* p. 24 */
X if (txc->constant < 0) { /* NTP v4 uses values > 6 */
- error = -EINVAL;
+ result = -EINVAL;
X goto leave;
X }
X time_constant = txc->constant;
@@ -329,7 +325,7 @@
X else
X time_freq += ltemp >> SHIFT_KH;
X } else /* calibration interval too short (p. 12) */
- time_state = TIME_ERROR;
+ result = TIME_ERROR;
X } else { /* PLL mode */
X if (mtemp < MAXSEC) {
X ltemp *= mtemp;
@@ -342,7 +338,7 @@
X time_constant +
X SHIFT_KF - SHIFT_USEC);
X } else /* calibration interval too long (p. 12) */
- time_state = TIME_ERROR;
+ result = TIME_ERROR;
X }
X if (time_freq > time_tolerance)
X time_freq = time_tolerance;
@@ -354,7 +350,7 @@
X /* if the quartz is off by more than 10% something is
X VERY wrong ! */
X if (txc->tick < 900000/HZ || txc->tick > 1100000/HZ) {
- error = -EINVAL;
+ result = -EINVAL;
X goto leave;
X }
X tick = txc->tick;
@@ -370,7 +366,7 @@
X || ((time_status & STA_PPSFREQ) != 0
X && (time_status & (STA_PPSWANDER|STA_PPSERROR)) != 0))
X /* p. 24, (d) */
- time_state = TIME_ERROR;
+ result = TIME_ERROR;
X
X if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT)
X txc->offset = save_adjust;
@@ -399,7 +395,7 @@
X txc->stbcnt = pps_stbcnt;
X
X sti();
- return(error < 0 ? error : time_state);
+ return(result);
X }
X
X asmlinkage int sys_adjtimex(struct timex *txc_p)
diff -u --recursive --new-file v2.2.3/linux/lib/vsprintf.c linux/lib/vsprintf.c
--- v2.2.3/linux/lib/vsprintf.c Thu Nov 19 09:56:29 1998
+++ linux/lib/vsprintf.c Mon Mar 15 11:19:05 1999
@@ -261,6 +261,10 @@
X }
X continue;
X
+ case '%':
+ *str++ = '%';
+ continue;
+
X /* integer number formats - set up the flags and "break" */
X case 'o':
X base = 8;
@@ -279,8 +283,7 @@
X break;
X
X default:
- if (*fmt != '%')
- *str++ = '%';
+ *str++ = '%';
X if (*fmt)
X *str++ = *fmt;
X else
@@ -313,4 +316,3 @@
X va_end(args);
X return i;
X }
-
diff -u --recursive --new-file v2.2.3/linux/mm/filemap.c linux/mm/filemap.c
--- v2.2.3/linux/mm/filemap.c Wed Mar 10 15:29:50 1999
+++ linux/mm/filemap.c Tue Mar 23 09:33:05 1999
@@ -1326,7 +1326,8 @@
X return -EINVAL;
X } else {
X ops = &file_private_mmap;
- if (vma->vm_offset & (inode->i_sb->s_blocksize - 1))
+ if (inode->i_op && inode->i_op->bmap &&
+ (vma->vm_offset & (inode->i_sb->s_blocksize - 1)))
X return -EINVAL;
X }
X if (!inode->i_sb || !S_ISREG(inode->i_mode))
diff -u --recursive --new-file v2.2.3/linux/net/Makefile linux/net/Makefile
--- v2.2.3/linux/net/Makefile Wed Mar 10 15:29:50 1999
+++ linux/net/Makefile Mon Mar 22 11:18:17 1999
@@ -63,6 +63,8 @@
X
X ifeq ($(CONFIG_IPX),y)
X SUB_DIRS += ipx
+# SPX can be still a module
+MOD_SUB_DIRS += ipx
X else
X ifeq ($(CONFIG_IPX),m)
X MOD_SUB_DIRS += ipx
diff -u --recursive --new-file v2.2.3/linux/net/core/dev.c linux/net/core/dev.c
--- v2.2.3/linux/net/core/dev.c Fri Jan 8 22:36:25 1999
+++ linux/net/core/dev.c Sun Mar 21 07:22:00 1999
@@ -232,7 +232,9 @@
X {
X if(pt==(*pt1))
X {
+ net_serialize_enter();
X *pt1=pt->next;
+ net_serialize_leave();
X #ifdef CONFIG_NET_FASTROUTE
X if (pt->data)
X netdev_fastroute_obstacles--;
@@ -328,6 +330,12 @@
X return dev;
X }
X
+void netdev_state_change(struct device *dev)
+{
+ if (dev->flags&IFF_UP)
+ notifier_call_chain(&netdev_chain, NETDEV_CHANGE, dev);
+}
+
X
X /*
X * Find and possibly load an interface.
@@ -422,7 +430,7 @@
X int i;
X
X for (i=0; i<=NETDEV_FASTROUTE_HMASK; i++)
- dst_release(xchg(dev->fastpath+i, NULL));
+ dst_release_irqwait(xchg(dev->fastpath+i, NULL));
X }
X }
X
@@ -895,22 +903,6 @@
X #endif
X
X /*
- * Fetch the packet protocol ID.
- */
-
- type = skb->protocol;
-
-
-#ifdef CONFIG_BRIDGE
- /*
- * If we are bridging then pass the frame up to the
- * bridging code (if this protocol is to be bridged).
- * If it is bridged then move on
- */
- handle_bridge(skb, type);
-#endif
-
- /*
X * Bump the pointer to the next structure.
X *
X * On entry to the protocol layer. skb->data and
@@ -927,11 +919,26 @@
X }
X
X /*
+ * Fetch the packet protocol ID.
+ */
+
+ type = skb->protocol;
+
+#ifdef CONFIG_BRIDGE
+ /*
+ * If we are bridging then pass the frame up to the
+ * bridging code (if this protocol is to be bridged).
+ * If it is bridged then move on
+ */
+ handle_bridge(skb, type);
+#endif
+
+ /*
X * We got a packet ID. Now loop over the "known protocols"
X * list. There are two lists. The ptype_all list of taps (normally empty)
X * and the main protocol list which is hashed perfectly for normal protocols.
X */
-
+
X pt_prev = NULL;
X for (ptype = ptype_all; ptype!=NULL; ptype=ptype->next)
X {
@@ -1536,8 +1543,7 @@
X return 0;
X
X case SIOCSIFTXQLEN:
- /* Why <2? 0 and 1 are valid values. --ANK (980807) */
- if(/*ifr->ifr_qlen<2 ||*/ ifr->ifr_qlen>1024)
+ if(ifr->ifr_qlen<0)
X return -EINVAL;
X dev->tx_queue_len = ifr->ifr_qlen;
X return 0;
@@ -1817,8 +1823,11 @@
X /* And unlink it from device chain. */
X for (dp = &dev_base; (d=*dp) != NULL; dp=&d->next) {
X if (d == dev) {
+ net_serialize_enter();
X *dp = d->next;
+ net_serialize_leave();
X d->next = NULL;
+
X if (dev->destructor)
X dev->destructor(dev);
X return 0;
@@ -1977,7 +1986,9 @@
X /*
X * It failed to come up. Unhook it.
X */
+ net_serialize_enter();
X *dp = dev->next;
+ net_serialize_leave();
X }
X else
X {
diff -u --recursive --new-file v2.2.3/linux/net/core/dev_mcast.c linux/net/core/dev_mcast.c
--- v2.2.3/linux/net/core/dev_mcast.c Mon Jan 12 15:28:19 1998
+++ linux/net/core/dev_mcast.c Sun Mar 21 07:22:00 1999
@@ -56,10 +56,9 @@
X * protocols without doing damage to the protocols when it deletes the
X * entries. It also helps IP as it tracks overlapping maps.
X *
- * BUGGGG! IPv6 calls dev_mac_add/delete from BH, it means
- * that all the functions in this file are racy. [NOT FIXED] --ANK
+ * Device mc lists are changed by bh at least if IPv6 is enabled,
+ * so that it must be bh protected.
X */
-
X
X /*
X * Update the multicast list into the physical NIC controller.
@@ -77,11 +76,13 @@
X /*
X * Devices with no set multicast don't get set
X */
-
+
X if(dev->set_multicast_list==NULL)
X return;
-
+
+ start_bh_atomic();
X dev->set_multicast_list(dev);
+ end_bh_atomic();
X }
X
X /*
@@ -90,8 +91,10 @@
X
X int dev_mc_delete(struct device *dev, void *addr, int alen, int glbl)
X {
+ int err = 0;
X struct dev_mc_list *dmi, **dmip;
X
+ start_bh_atomic();
X for (dmip=&dev->mc_list; (dmi=*dmip)!=NULL; dmip=&dmi->next) {
X /*
X * Find the entry we want to delete. The device could
@@ -102,10 +105,10 @@
X int old_glbl = dmi->dmi_gusers;
X dmi->dmi_gusers = 0;
X if (old_glbl == 0)
- return -ENOENT;
+ break;
X }
X if(--dmi->dmi_users)
- return 0;
+ goto done;
X
X /*
X * Last user. So delete the entry.
@@ -117,11 +120,15 @@
X * We have altered the list, so the card
X * loaded filter is now wrong. Fix it
X */
+ end_bh_atomic();
X dev_mc_upload(dev);
X return 0;
X }
X }
- return -ENOENT;
+ err = -ENOENT;
+done:
+ end_bh_atomic();
+ return err;
X }
X
X /*
@@ -130,30 +137,27 @@
X
X int dev_mc_add(struct device *dev, void *addr, int alen, int glbl)
X {
- struct dev_mc_list *dmi;
+ int err = 0;
+ struct dev_mc_list *dmi, *dmi1;
+
+ dmi1 = (struct dev_mc_list *)kmalloc(sizeof(*dmi), gfp_any());
X
+ start_bh_atomic();
X for(dmi=dev->mc_list; dmi!=NULL; dmi=dmi->next) {
X if (memcmp(dmi->dmi_addr,addr,dmi->dmi_addrlen)==0 && dmi->dmi_addrlen==alen) {
X if (glbl) {
X int old_glbl = dmi->dmi_gusers;
X dmi->dmi_gusers = 1;
X if (old_glbl)
- return 0;
+ goto done;
X }
X dmi->dmi_users++;
- return 0;
+ goto done;
X }
X }
X
- /* GFP_ATOMIC!! It is used by IPv6 from interrupt,
- when new address arrives.
-
- Particularly, it means that this part of code is weirdly
- racy, and needs numerous *_bh_atomic --ANK
- */
- dmi=(struct dev_mc_list *)kmalloc(sizeof(*dmi), GFP_ATOMIC);
- if (dmi==NULL)
- return -ENOBUFS;
+ if ((dmi=dmi1)==NULL)
+ return -ENOMEM;
X memcpy(dmi->dmi_addr, addr, alen);
X dmi->dmi_addrlen=alen;
X dmi->next=dev->mc_list;
@@ -161,8 +165,15 @@
X dmi->dmi_gusers=glbl ? 1 : 0;
X dev->mc_list=dmi;
X dev->mc_count++;
+ end_bh_atomic();
X dev_mc_upload(dev);
X return 0;
+
+done:
+ end_bh_atomic();
+ if (dmi1)
+ kfree(dmi1);
+ return err;
X }
X
X /*
@@ -171,6 +182,7 @@
X
X void dev_mc_discard(struct device *dev)
X {
+ start_bh_atomic();
X while (dev->mc_list!=NULL) {
X struct dev_mc_list *tmp=dev->mc_list;
X dev->mc_list=tmp->next;
@@ -179,6 +191,7 @@
X kfree_s(tmp,sizeof(*tmp));
X }
X dev->mc_count=0;
+ end_bh_atomic();
X }
X
X #ifdef CONFIG_PROC_FS
@@ -189,7 +202,9 @@
X struct dev_mc_list *m;
X int len=0;
X struct device *dev;
-
+
+ start_bh_atomic();
+
X for (dev = dev_base; dev; dev = dev->next) {
X for (m = dev->mc_list; m; m = m->next) {
X int i;
@@ -214,10 +229,13 @@
X *eof = 1;
X
X done:
+ end_bh_atomic();
X *start=buffer+(offset-begin);
X len-=(offset-begin);
X if(len>length)
X len=length;
+ if(len<0)
+ len=0;
X return len;
X }
X #endif
diff -u --recursive --new-file v2.2.3/linux/net/core/filter.c linux/net/core/filter.c
--- v2.2.3/linux/net/core/filter.c Tue Feb 23 15:21:35 1999
+++ linux/net/core/filter.c Sun Mar 21 07:22:00 1999
@@ -441,8 +441,9 @@
X
X if ((err = sk_chk_filter(fp->insns, fp->len))==0) {
X struct sk_filter *old_fp = sk->filter;
+ net_serialize_enter();
X sk->filter = fp;
- wmb();
+ net_serialize_leave();
X fp = old_fp;
X }
X
diff -u --recursive --new-file v2.2.3/linux/net/core/neighbour.c linux/net/core/neighbour.c
--- v2.2.3/linux/net/core/neighbour.c Mon Oct 5 13:13:47 1998
+++ linux/net/core/neighbour.c Sun Mar 21 07:22:00 1999
@@ -25,8 +25,36 @@
X #endif
X #include <net/neighbour.h>
X #include <net/dst.h>
+#include <net/sock.h>
X #include <linux/rtnetlink.h>
X
+/*
+ NOTE. The most unpleasent question is serialization of
+ accesses to resolved addresses. The problem is that addresses
+ are modified by bh, but they are referenced from normal
+ kernel thread. Before today no locking was made.
+ My reasoning was that corrupted address token will be copied
+ to packet with cosmologically small probability
+ (it is even difficult to estimate such small number)
+ and it is very silly to waste cycles in fast path to lock them.
+
+ But now I changed my mind, but not because previous statement
+ is wrong. Actually, neigh->ha MAY BE not opaque byte array,
+ but reference to some private data. In this case even neglibible
+ corruption probability becomes bug.
+
+ - hh cache is protected by rwlock. It assumes that
+ hh cache update procedure is short and fast, and that
+ read_lock is cheaper than start_bh_atomic().
+ - ha tokens, saved in neighbour entries, are protected
+ by bh_atomic().
+ - no protection is made in /proc reading. It is OK, because
+ /proc is broken by design in any case, and
+ corrupted output is normal behaviour there.
+
+ --ANK (981025)
+ */
+
X #define NEIGH_DEBUG 1
X
X #define NEIGH_PRINTK(x...) printk(x)
@@ -48,6 +76,7 @@
X #ifdef CONFIG_ARPD
X static void neigh_app_notify(struct neighbour *n);
X #endif
+static int pneigh_ifdown(struct neigh_table *tbl, struct device *dev);
X
X static int neigh_glbl_allocs;
X static struct neigh_table *neigh_tables;
@@ -83,8 +112,20 @@
X
X np = &tbl->hash_buckets[i];
X while ((n = *np) != NULL) {
+ /* Neighbour record may be discarded if:
+ - nobody refers to it.
+ - it is not premanent
+ - (NEW and probably wrong)
+ INCOMPLETE entries are kept at least for
+ n->parms->retrans_time, otherwise we could
+ flood network with resolution requests.
+ It is not clear, what is better table overflow
+ or flooding.
+ */
X if (atomic_read(&n->refcnt) == 0 &&
- !(n->nud_state&NUD_PERMANENT)) {
+ !(n->nud_state&NUD_PERMANENT) &&
+ (n->nud_state != NUD_INCOMPLETE ||
+ jiffies - n->used > n->parms->retrans_time)) {
X *np = n->next;
X n->tbl = NULL;
X tbl->entries--;
@@ -149,6 +190,7 @@
X
X del_timer(&tbl->proxy_timer);
X skb_queue_purge(&tbl->proxy_queue);
+ pneigh_ifdown(tbl, dev);
X end_bh_atomic();
X return 0;
X }
@@ -295,7 +337,9 @@
X
X for (np = &tbl->phash_buckets[hash_val]; (n=*np) != NULL; np = &n->next) {
X if (memcmp(n->key, pkey, key_len) == 0 && n->dev == dev) {
+ net_serialize_enter();
X *np = n->next;
+ net_serialize_leave();
X if (tbl->pdestructor)
X tbl->pdestructor(n);
X kfree(n);
@@ -305,6 +349,30 @@
X return -ENOENT;
X }
X
+static int pneigh_ifdown(struct neigh_table *tbl, struct device *dev)
+{
+ struct pneigh_entry *n, **np;
+ u32 h;
+
+ for (h=0; h<=PNEIGH_HASHMASK; h++) {
+ np = &tbl->phash_buckets[h];
+ for (np = &tbl->phash_buckets[h]; (n=*np) != NULL; np = &n->next) {
+ if (n->dev == dev || dev == NULL) {
+ net_serialize_enter();
+ *np = n->next;
+ net_serialize_leave();
+ if (tbl->pdestructor)
+ tbl->pdestructor(n);
+ kfree(n);
+ continue;
+ }
+ np = &n->next;
+ }
+ }
+ return -ENOENT;
+}
+
+
X /*
X * neighbour must already be out of the table;
X *
@@ -516,11 +584,11 @@
X return;
X }
X
- neigh->probes++;
X neigh->timer.expires = now + neigh->parms->retrans_time;
X add_timer(&neigh->timer);
X
X neigh->ops->solicit(neigh, skb_peek(&neigh->arp_queue));
+ neigh->probes++;
X }
X
X int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
@@ -542,6 +610,7 @@
X add_timer(&neigh->timer);
X
X neigh->ops->solicit(neigh, skb);
+ neigh->probes++;
X } else {
X neigh->nud_state = NUD_FAILED;
X if (skb)
@@ -581,8 +650,11 @@
X neigh->dev->header_cache_update;
X
X if (update) {
- for (hh=neigh->hh; hh; hh=hh->hh_next)
+ for (hh=neigh->hh; hh; hh=hh->hh_next) {
+ write_lock_irq(&hh->hh_lock);
X update(hh, neigh->dev, neigh->ha);
+ write_unlock_irq(&hh->hh_lock);
+ }
X }
X }
X
@@ -655,7 +727,7 @@
X del_timer(&neigh->timer);
X neigh->nud_state = new;
X if (lladdr != neigh->ha) {
- memcpy(neigh->ha, lladdr, dev->addr_len);
+ memcpy(&neigh->ha, lladdr, dev->addr_len);
X neigh_update_hhs(neigh);
X neigh->confirmed = jiffies - (neigh->parms->base_reachable_time<<1);
X #ifdef CONFIG_ARPD
@@ -764,14 +836,20 @@
X __skb_pull(skb, skb->nh.raw - skb->data);
X
X if (neigh_event_send(neigh, skb) == 0) {
+ int err;
X struct device *dev = neigh->dev;
- if (dev->hard_header_cache) {
+ if (dev->hard_header_cache && dst->hh == NULL) {
X start_bh_atomic();
X if (dst->hh == NULL)
X neigh_hh_init(neigh, dst, dst->ops->protocol);
+ err = dev->hard_header(skb, dev, ntohs(skb->protocol), neigh->ha, NULL, skb->len);
+ end_bh_atomic();
+ } else {
+ start_bh_atomic();
+ err = dev->hard_header(skb, dev, ntohs(skb->protocol), neigh->ha, NULL, skb->len);
X end_bh_atomic();
X }
- if (dev->hard_header(skb, dev, ntohs(skb->protocol), neigh->ha, NULL, skb->len) >= 0)
+ if (err >= 0)
X return neigh->ops->queue_xmit(skb);
X kfree_skb(skb);
X return -EINVAL;
@@ -788,13 +866,17 @@
X
X int neigh_connected_output(struct sk_buff *skb)
X {
+ int err;
X struct dst_entry *dst = skb->dst;
X struct neighbour *neigh = dst->neighbour;
X struct device *dev = neigh->dev;
X
X __skb_pull(skb, skb->nh.raw - skb->data);
X
- if (dev->hard_header(skb, dev, ntohs(skb->protocol), neigh->ha, NULL, skb->len) >= 0)
+ start_bh_atomic();
+ err = dev->hard_header(skb, dev, ntohs(skb->protocol), neigh->ha, NULL, skb->len);
+ end_bh_atomic();
+ if (err >= 0)
X return neigh->ops->queue_xmit(skb);
X kfree_skb(skb);
X return -EINVAL;
@@ -868,7 +950,6 @@
X }
X }
X p->next = tbl->parms.next;
- /* ATOMIC_SET */
X tbl->parms.next = p;
X }
X return p;
@@ -882,8 +963,9 @@
X return;
X for (p = &tbl->parms.next; *p; p = &(*p)->next) {
X if (*p == parms) {
- /* ATOMIC_SET */
+ net_serialize_enter();
X *p = parms->next;
+ net_serialize_leave();
X #ifdef CONFIG_SYSCTL
X neigh_sysctl_unregister(parms);
X #endif
@@ -926,14 +1008,15 @@
X del_timer(&tbl->gc_timer);
X del_timer(&tbl->proxy_timer);
X skb_queue_purge(&tbl->proxy_queue);
- if (tbl->entries)
- neigh_ifdown(tbl, NULL);
+ neigh_ifdown(tbl, NULL);
X end_bh_atomic();
X if (tbl->entries)
X printk(KERN_CRIT "neighbour leakage\n");
X for (tp = &neigh_tables; *tp; tp = &(*tp)->next) {
X if (*tp == tbl) {
+ net_serialize_enter();
X *tp = tbl->next;
+ net_serialize_leave();
X break;
X }
X }
@@ -976,7 +1059,7 @@
X return -EINVAL;
X
X start_bh_atomic();
- n = neigh_lookup(tbl, RTA_DATA(nda[NDA_DST-1]), dev);
+ n = __neigh_lookup(tbl, RTA_DATA(nda[NDA_DST-1]), dev, 0);
X if (n) {
X err = neigh_update(n, NULL, NUD_FAILED, 1, 0);
X neigh_release(n);
@@ -1020,7 +1103,7 @@
X nda[NDA_LLADDR-1]->rta_len != RTA_LENGTH(dev->addr_len))
X return -EINVAL;
X start_bh_atomic();
- n = neigh_lookup(tbl, RTA_DATA(nda[NDA_DST-1]), dev);
+ n = __neigh_lookup(tbl, RTA_DATA(nda[NDA_DST-1]), dev, 0);
X if (n) {
X if (nlh->nlmsg_flags&NLM_F_EXCL)
X err = -EEXIST;
@@ -1091,7 +1174,7 @@
X for (h=0; h <= NEIGH_HASHMASK; h++) {
X if (h < s_h) continue;
X if (h > s_h)
- memset(&cb->args[2], 0, sizeof(cb->args) - 2*sizeof(int));
+ memset(&cb->args[2], 0, sizeof(cb->args) - 2*sizeof(cb->args[0]));
X start_bh_atomic();
X for (n = tbl->hash_buckets[h], idx = 0; n;
X n = n->next, idx++) {
@@ -1125,7 +1208,7 @@
X if (family && tbl->family != family)
X continue;
X if (t > s_t)
- memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(int));
+ memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(cb->args[0]));
X if (neigh_dump_table(tbl, skb, cb) < 0)
X break;
X }
diff -u --recursive --new-file v2.2.3/linux/net/core/rtnetlink.c linux/net/core/rtnetlink.c
--- v2.2.3/linux/net/core/rtnetlink.c Sat Sep 5 16:46:42 1998
+++ linux/net/core/rtnetlink.c Sun Mar 21 07:22:00 1999
@@ -41,7 +41,6 @@
X
X #include <linux/inet.h>
X #include <linux/netdevice.h>
-#include <net/pkt_sched.h>
X #include <net/ip.h>
X #include <net/protocol.h>
X #include <net/arp.h>
@@ -49,6 +48,7 @@
X #include <net/tcp.h>
X #include <net/udp.h>
X #include <net/sock.h>
+#include <net/pkt_sched.h>
X
X atomic_t rtnl_rlockct;
X struct wait_queue *rtnl_wait;
diff -u --recursive --new-file v2.2.3/linux/net/core/sock.c linux/net/core/sock.c
--- v2.2.3/linux/net/core/sock.c Wed Mar 10 15:29:52 1999
+++ linux/net/core/sock.c Sun Mar 21 07:22:00 1999
@@ -7,7 +7,7 @@
X * handler for protocols to use and generic option handler.
X *
X *
- * Version: $Id: sock.c,v 1.76 1999/02/23 08:12:29 davem Exp $
+ * Version: $Id: sock.c,v 1.77 1999/03/21 05:22:26 davem Exp $
X *
X * Authors: Ross Biro, <bi...@leland.Stanford.Edu>
X * Fred N. van Kempen, <wal...@uWalt.NL.Mugnet.ORG>
@@ -251,12 +251,10 @@
X break;
X
X case SO_PRIORITY:
- if (val >= 0 && val <= 7)
- {
- if(val==7 && !capable(CAP_NET_ADMIN))
- return -EPERM;
+ if ((val >= 0 && val <= 6) || capable(CAP_NET_ADMIN))
X sk->priority = val;
- }
+ else
+ return(-EPERM);
X break;
X
X case SO_LINGER:
@@ -348,8 +346,9 @@
X
X filter = sk->filter;
X
+ net_serialize_enter();
X sk->filter = NULL;
- wmb();
+ net_serialize_leave();
X
X if (filter)
X sk_filter_release(sk, filter);
@@ -504,6 +503,16 @@
X {
X if (sk->destruct)
X sk->destruct(sk);
+
+#ifdef CONFIG_FILTER
+ if (sk->filter) {
+ sk_filter_release(sk, sk->filter);
+ sk->filter = NULL;
+ }
+#endif
+
+ if (atomic_read(&sk->omem_alloc))
+ printk(KERN_DEBUG "sk_free: optmem leakage (%d bytes) detected.\n", atomic_read(&sk->omem_alloc));
X
X #ifdef CONFIG_FILTER
X if (sk->filter) {
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/Config.in linux/net/ipv4/Config.in
--- v2.2.3/linux/net/ipv4/Config.in Wed Mar 10 15:29:52 1999
+++ linux/net/ipv4/Config.in Sun Mar 21 07:22:00 1999
@@ -32,6 +32,9 @@
X fi
X fi
X bool 'IP: always defragment (required for masquerading)' CONFIG_IP_ALWAYS_DEFRAG
+ if [ "$CONFIG_IP_MULTIPLE_TABLES" = "y" ]; then
+ bool 'IP: use FWMARK value as routing key' CONFIG_IP_ROUTE_FWMARK
+ fi
X fi
X fi
X if [ "$CONFIG_IP_FIREWALL" = "y" ]; then
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/af_inet.c linux/net/ipv4/af_inet.c
--- v2.2.3/linux/net/ipv4/af_inet.c Tue Feb 23 15:21:35 1999
+++ linux/net/ipv4/af_inet.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X *
X * PF_INET protocol family socket handler.
X *
- * Version: $Id: af_inet.c,v 1.83 1999/02/22 13:54:18 davem Exp $
+ * Version: $Id: af_inet.c,v 1.85 1999/03/21 05:22:28 davem Exp $
X *
X * Authors: Ross Biro, <bi...@leland.Stanford.Edu>
X * Fred N. van Kempen, <wal...@uWalt.NL.Mugnet.ORG>
@@ -53,6 +53,7 @@
X * David S. Miller : New socket lookup architecture.
X * Some other random speedups.
X * Cyrus Durgin : Cleaned up file for kmod hacks.
+ * Andi Kleen : Fix inet_stream_connect TCP race.
X *
X * This program is free software; you can redistribute it and/or
X * modify it under the terms of the GNU General Public License
@@ -175,8 +176,6 @@
X if(sk->opt)
X kfree(sk->opt);
X dst_release(sk->dst_cache);
- if (atomic_read(&sk->omem_alloc))
- printk(KERN_DEBUG "kill_sk_now: optmem leakage (%d bytes) detected.\n", atomic_read(&sk->omem_alloc));
X sk_free(sk);
X }
X
@@ -613,15 +612,16 @@
X }
X
X if(sock->state == SS_CONNECTING) {
+ /* Note: tcp_connected contains SYN_RECV, which may cause
+ bogus results here. -AK */
X if(tcp_connected(sk->state)) {
X sock->state = SS_CONNECTED;
X return 0;
X }
- if(sk->protocol == IPPROTO_TCP && (flags & O_NONBLOCK)) {
- if(sk->err)
- return sock_error(sk);
+ if (sk->zapped || sk->err)
+ goto sock_error;
+ if (flags & O_NONBLOCK)
X return -EALREADY;
- }
X } else {
X /* We may need to bind the socket. */
X if (inet_autobind(sk) != 0)
@@ -629,15 +629,17 @@
X if (sk->prot->connect == NULL)
X return(-EOPNOTSUPP);
X err = sk->prot->connect(sk, uaddr, addr_len);
+ /* Note: there is a theoretical race here when an wake up
+ occurred before inet_wait_for_connect is entered. In 2.3
+ the wait queue setup should be moved before the low level
+ connect call. -AK*/
X if (err < 0)
X return(err);
X sock->state = SS_CONNECTING;
X }
X
- if (sk->state > TCP_FIN_WAIT2 && sock->state == SS_CONNECTING) {
- sock->state = SS_UNCONNECTED;
- return sock_error(sk);
- }
+ if (sk->state > TCP_FIN_WAIT2 && sock->state == SS_CONNECTING)
+ goto sock_error;
X
X if (sk->state != TCP_ESTABLISHED && (flags & O_NONBLOCK))
X return (-EINPROGRESS);
@@ -649,17 +651,19 @@
X }
X
X sock->state = SS_CONNECTED;
- if ((sk->state != TCP_ESTABLISHED) && sk->err) {
- /* This is ugly but needed to fix a race in the ICMP error handler */
- if (sk->protocol == IPPROTO_TCP && sk->zapped) {
- lock_sock(sk);
- tcp_set_state(sk, TCP_CLOSE);
- release_sock(sk);
- }
- sock->state = SS_UNCONNECTED;
- return sock_error(sk);
- }
+ if ((sk->state != TCP_ESTABLISHED) && sk->err)
+ goto sock_error;
X return(0);
+
+sock_error:
+ /* This is ugly but needed to fix a race in the ICMP error handler */
+ if (sk->zapped && sk->state != TCP_CLOSE) {
+ lock_sock(sk);
+ tcp_set_state(sk, TCP_CLOSE);
+ release_sock(sk);
+ }
+ sock->state = SS_UNCONNECTED;
+ return sock_error(sk);
X }
X
X /*
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/arp.c linux/net/ipv4/arp.c
--- v2.2.3/linux/net/ipv4/arp.c Wed Mar 10 15:29:52 1999
+++ linux/net/ipv4/arp.c Sun Mar 21 07:22:00 1999
@@ -1,6 +1,6 @@
X /* linux/net/inet/arp.c
X *
- * Version: $Id: arp.c,v 1.75 1998/11/16 04:51:56 davem Exp $
+ * Version: $Id: arp.c,v 1.77 1999/03/21 05:22:30 davem Exp $
X *
X * Copyright (C) 1994 by Florian La Roche
X *
@@ -294,7 +294,7 @@
X
X static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb)
X {
- icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_UNREACH, 0);
+ dst_link_failure(skb);
X kfree_skb(skb);
X }
X
@@ -401,8 +401,12 @@
X
X if (dev == NULL)
X return 0;
- if (dst->neighbour == NULL)
- dst->neighbour = __neigh_lookup(&arp_tbl, &((struct rtable*)dst)->rt_gateway, dev, 1);
+ if (dst->neighbour == NULL) {
+ u32 nexthop = ((struct rtable*)dst)->rt_gateway;
+ if (dev->flags&(IFF_LOOPBACK|IFF_POINTOPOINT))
+ nexthop = 0;
+ dst->neighbour = __neigh_lookup(&arp_tbl, &nexthop, dev, 1);
+ }
X return (dst->neighbour != NULL);
X }
X
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/devinet.c linux/net/ipv4/devinet.c
--- v2.2.3/linux/net/ipv4/devinet.c Thu Jan 7 15:11:41 1999
+++ linux/net/ipv4/devinet.c Sun Mar 21 07:22:00 1999
@@ -1,7 +1,7 @@
X /*
X * NET3 IP device support routines.
X *
- * Version: $Id: devinet.c,v 1.25 1999/01/04 20:14:33 davem Exp $
+ * Version: $Id: devinet.c,v 1.26 1999/03/21 05:22:31 davem Exp $
X *
X * This program is free software; you can redistribute it and/or
X * modify it under the terms of the GNU General Public License
@@ -138,7 +138,9 @@
X #ifdef CONFIG_SYSCTL
X devinet_sysctl_unregister(&in_dev->cnf);
X #endif
+ net_serialize_enter();
X in_dev->dev->ip_ptr = NULL;
+ net_serialize_leave();
X neigh_parms_release(&arp_tbl, in_dev->arp_parms);
X kfree(in_dev);
X }
@@ -172,7 +174,10 @@
X ifap1 = &ifa->ifa_next;
X continue;
X }
+ net_serialize_enter();
X *ifap1 = ifa->ifa_next;
+ net_serialize_leave();
+
X rtmsg_ifa(RTM_DELADDR, ifa);
X notifier_call_chain(&inetaddr_chain, NETDEV_DOWN, ifa);
X inet_free_ifa(ifa);
@@ -181,8 +186,9 @@
X
X /* 2. Unlink it */
X
+ net_serialize_enter();
X *ifap = ifa1->ifa_next;
-
+ net_serialize_leave();
X
X /* 3. Announce address deletion */
X
@@ -238,8 +244,9 @@
X }
X
X ifa->ifa_next = *ifap;
- /* ATOMIC_SET */
+ net_serialize_enter();
X *ifap = ifa;
+ net_serialize_leave();
X
X /* Send message first, then call notifier.
X Notifier will trigger FIB update, so that
@@ -650,8 +657,25 @@
X if (!dst || inet_ifa_match(dst, ifa))
X return addr;
X } endfor_ifa(in_dev);
+
+ if (addr || scope >= RT_SCOPE_LINK)
+ return addr;
X
- return addr;
+ /* Not loopback addresses on loopback should be preferred
+ in this case. It is importnat that lo is the first interface
+ in dev_base list.
+ */
+ for (dev=dev_base; dev; dev=dev->next) {
+ if ((in_dev=dev->ip_ptr) == NULL)
+ continue;
+
+ for_primary_ifa(in_dev) {
+ if (ifa->ifa_scope <= scope)
+ return ifa->ifa_local;
+ } endfor_ifa(in_dev);
+ }
+
+ return 0;
X }
X
X /*
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/fib_frontend.c linux/net/ipv4/fib_frontend.c
--- v2.2.3/linux/net/ipv4/fib_frontend.c Thu Jan 7 15:11:41 1999
+++ linux/net/ipv4/fib_frontend.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X *
X * IPv4 Forwarding Information Base: FIB frontend.
X *
- * Version: $Id: fib_frontend.c,v 1.14 1999/01/04 20:13:55 davem Exp $
+ * Version: $Id: fib_frontend.c,v 1.15 1999/03/21 05:22:31 davem Exp $
X *
X * Authors: Alexey Kuznetsov, <kuz...@ms2.inr.ac.ru>
X *
@@ -189,7 +189,7 @@
X */
X
X int fib_validate_source(u32 src, u32 dst, u8 tos, int oif,
- struct device *dev, u32 *spec_dst)
+ struct device *dev, u32 *spec_dst, u32 *itag)
X {
X struct in_device *in_dev = dev->ip_ptr;
X struct rt_key key;
@@ -209,6 +209,8 @@
X if (res.type != RTN_UNICAST)
X return -EINVAL;
X *spec_dst = FIB_RES_PREFSRC(res);
+ if (itag)
+ fib_combine_itag(itag, &res);
X #ifdef CONFIG_IP_ROUTE_MULTIPATH
X if (FIB_RES_DEV(res) == dev || res.fi->fib_nhs > 1)
X #else
@@ -231,6 +233,7 @@
X if (IN_DEV_RPFILTER(in_dev))
X return -EINVAL;
X *spec_dst = inet_select_addr(dev, 0, RT_SCOPE_UNIVERSE);
+ *itag = 0;
X return 0;
X }
X
@@ -354,7 +357,7 @@
X for (t=s_t; t<=RT_TABLE_MAX; t++) {
X if (t < s_t) continue;
X if (t > s_t)
- memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(int));
+ memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(cb->args[0]));
X if ((tb = fib_get_table(t))==NULL)
X continue;
X if (tb->tb_dump(tb, skb, cb) < 0)
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/fib_hash.c linux/net/ipv4/fib_hash.c
--- v2.2.3/linux/net/ipv4/fib_hash.c Mon Oct 5 13:13:48 1998
+++ linux/net/ipv4/fib_hash.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X *
X * IPv4 FIB: lookup engine and maintenance routines.
X *
- * Version: $Id: fib_hash.c,v 1.6 1998/10/03 09:37:06 davem Exp $
+ * Version: $Id: fib_hash.c,v 1.7 1999/03/21 05:22:32 davem Exp $
X *
X * Authors: Alexey Kuznetsov, <kuz...@ms2.inr.ac.ru>
X *
@@ -302,6 +302,90 @@
X return 1;
X }
X
+static int fn_hash_last_dflt=-1;
+
+static int fib_detect_death(struct fib_info *fi, int order,
+ struct fib_info **last_resort, int *last_idx)
+{
+ struct neighbour *n;
+ int state = NUD_NONE;
+
+ n = neigh_lookup(&arp_tbl, &fi->fib_nh[0].nh_gw, fi->fib_dev);
+ if (n) {
+ state = n->nud_state;
+ neigh_release(n);
+ }
+ if (state==NUD_REACHABLE)
+ return 0;
+ if ((state&NUD_VALID) && order != fn_hash_last_dflt)
+ return 0;
+ if ((state&NUD_VALID) ||
+ (*last_idx<0 && order > fn_hash_last_dflt)) {
+ *last_resort = fi;
+ *last_idx = order;
+ }
+ return 1;
+}
+
+static void
+fn_hash_select_default(struct fib_table *tb, const struct rt_key *key, struct fib_result *res)
+{
+ int order, last_idx;
+ struct fib_node *f;
+ struct fib_info *fi = NULL;
+ struct fib_info *last_resort;
+ struct fn_hash *t = (struct fn_hash*)tb->tb_data;
+ struct fn_zone *fz = t->fn_zones[0];
+
+ if (fz == NULL)
+ return;
+
+ last_idx = -1;
+ last_resort = NULL;
+ order = -1;
+
+ for (f = fz->fz_hash[0]; f; f = f->fn_next) {
+ struct fib_info *next_fi = FIB_INFO(f);
+
+ if ((f->fn_state&FN_S_ZOMBIE) ||
+ f->fn_scope != res->scope ||
+ f->fn_type != RTN_UNICAST)
+ continue;
+
+ if (next_fi->fib_priority > res->fi->fib_priority)
+ break;
+ if (!next_fi->fib_nh[0].nh_gw || next_fi->fib_nh[0].nh_scope != RT_SCOPE_LINK)
+ continue;
+ f->fn_state |= FN_S_ACCESSED;
+
+ if (fi == NULL) {
+ if (next_fi != res->fi)
+ break;
+ } else if (!fib_detect_death(fi, order, &last_resort, &last_idx)) {
+ res->fi = fi;
+ fn_hash_last_dflt = order;
+ return;
+ }
+ fi = next_fi;
+ order++;
+ }
+
+ if (order<=0 || fi==NULL) {
+ fn_hash_last_dflt = -1;
+ return;
+ }
+
+ if (!fib_detect_death(fi, order, &last_resort, &last_idx)) {
+ res->fi = fi;
+ fn_hash_last_dflt = order;
+ return;
+ }
+
+ if (last_idx >= 0)
+ res->fi = last_resort;
+ fn_hash_last_dflt = last_idx;
+}
+
X #define FIB_SCAN(f, fp) \
X for ( ; ((f) = *(fp)) != NULL; (fp) = &(f)->fn_next)
X
@@ -476,14 +560,16 @@
X */
X
X new_f->fn_next = f;
- /* ATOMIC_SET */
X *fp = new_f;
X fz->fz_nent++;
X
X if (del_fp) {
X f = *del_fp;
X /* Unlink replaced node */
+ net_serialize_enter();
X *del_fp = f->fn_next;
+ net_serialize_leave();
+
X if (!(f->fn_state&FN_S_ZOMBIE))
X rtmsg_fib(RTM_DELROUTE, f, z, tb->tb_id, n, req);
X if (f->fn_state&FN_S_ACCESSED)
@@ -570,7 +656,10 @@
X rtmsg_fib(RTM_DELROUTE, f, z, tb->tb_id, n, req);
X
X if (matched != 1) {
+ net_serialize_enter();
X *del_fp = f->fn_next;
+ net_serialize_leave();
+
X if (f->fn_state&FN_S_ACCESSED)
X rt_cache_flush(-1);
X fn_free_node(f);
@@ -600,7 +689,10 @@
X struct fib_info *fi = FIB_INFO(f);
X
X if (fi && ((f->fn_state&FN_S_ZOMBIE) || (fi->fib_flags&RTNH_F_DEAD))) {
+ net_serialize_enter();
X *fp = f->fn_next;
+ net_serialize_leave();
+
X fn_free_node(f);
X found++;
X continue;
@@ -710,7 +802,7 @@
X for (h=0; h < fz->fz_divisor; h++) {
X if (h < s_h) continue;
X if (h > s_h)
- memset(&cb->args[3], 0, sizeof(cb->args) - 3*sizeof(int));
+ memset(&cb->args[3], 0, sizeof(cb->args) - 3*sizeof(cb->args[0]));
X if (fz->fz_hash == NULL || fz->fz_hash[h] == NULL)
X continue;
X if (fn_hash_dump_bucket(skb, cb, tb, fz, fz->fz_hash[h]) < 0) {
@@ -732,7 +824,7 @@
X for (fz = table->fn_zone_list, m=0; fz; fz = fz->fz_next, m++) {
X if (m < s_m) continue;
X if (m > s_m)
- memset(&cb->args[2], 0, sizeof(cb->args) - 2*sizeof(int));
+ memset(&cb->args[2], 0, sizeof(cb->args) - 2*sizeof(cb->args[0]));
X if (fn_hash_dump_zone(skb, cb, tb, fz) < 0) {
X cb->args[1] = m;
X return -1;
@@ -784,6 +876,7 @@
X tb->tb_insert = fn_hash_insert;
X tb->tb_delete = fn_hash_delete;
X tb->tb_flush = fn_hash_flush;
+ tb->tb_select_default = fn_hash_select_default;
X #ifdef CONFIG_RTNETLINK
X tb->tb_dump = fn_hash_dump;
X #endif
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/fib_rules.c linux/net/ipv4/fib_rules.c
--- v2.2.3/linux/net/ipv4/fib_rules.c Mon Oct 5 13:13:48 1998
+++ linux/net/ipv4/fib_rules.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X *
X * IPv4 Forwarding Information Base: policy rules.
X *
- * Version: $Id: fib_rules.c,v 1.7 1998/10/03 09:37:09 davem Exp $
+ * Version: $Id: fib_rules.c,v 1.8 1999/03/21 05:22:33 davem Exp $
X *
X * Authors: Alexey Kuznetsov, <kuz...@ms2.inr.ac.ru>
X *
@@ -16,6 +16,7 @@
X *
X * Fixes:
X * Rani Assaf : local_rule cannot be deleted
+ * Marc Boucher : routing by fwmark
X */
X
X #include <linux/config.h>
@@ -63,6 +64,9 @@
X u32 r_srcmap;
X u8 r_flags;
X u8 r_tos;
+#ifdef CONFIG_IP_ROUTE_FWMARK
+ u32 r_fwmark;
+#endif
X int r_ifindex;
X #ifdef CONFIG_NET_CLS_ROUTE
X __u32 r_tclassid;
@@ -88,13 +92,18 @@
X rtm->rtm_dst_len == r->r_dst_len &&
X (!rta[RTA_DST-1] || memcmp(RTA_DATA(rta[RTA_DST-1]), &r->r_dst, 4) == 0) &&
X rtm->rtm_tos == r->r_tos &&
+#ifdef CONFIG_IP_ROUTE_FWMARK
+ (!rta[RTA_PROTOINFO-1] || memcmp(RTA_DATA(rta[RTA_PROTOINFO-1]), &r->r_fwmark, 4) == 0) &&
+#endif
X (!rtm->rtm_type || rtm->rtm_type == r->r_action) &&
X (!rta[RTA_PRIORITY-1] || memcmp(RTA_DATA(rta[RTA_PRIORITY-1]), &r->r_preference, 4) == 0) &&
X (!rta[RTA_IIF-1] || strcmp(RTA_DATA(rta[RTA_IIF-1]), r->r_ifname) == 0) &&
X (!rtm->rtm_table || (r && rtm->rtm_table == r->r_table))) {
X if (r == &local_rule)
X return -EPERM;
+ net_serialize_enter();
X *rp = r->r_next;
+ net_serialize_leave();
X if (r != &default_rule && r != &main_rule)
X kfree(r);
X return 0;
@@ -155,6 +164,10 @@
X new_r->r_srcmask = inet_make_mask(rtm->rtm_src_len);
X new_r->r_dstmask = inet_make_mask(rtm->rtm_dst_len);
X new_r->r_tos = rtm->rtm_tos;
+#ifdef CONFIG_IP_ROUTE_FWMARK
+ if (rta[RTA_PROTOINFO-1])
+ memcpy(&new_r->r_fwmark, RTA_DATA(rta[RTA_PROTOINFO-1]), 4);
+#endif
X new_r->r_action = rtm->rtm_type;
X new_r->r_flags = rtm->rtm_flags;
X if (rta[RTA_PRIORITY-1])
@@ -267,14 +280,15 @@
X #ifdef CONFIG_IP_ROUTE_TOS
X (r->r_tos && r->r_tos != key->tos) ||
X #endif
+#ifdef CONFIG_IP_ROUTE_FWMARK
+ (r->r_fwmark && r->r_fwmark != key->fwmark) ||
+#endif
X (r->r_ifindex && r->r_ifindex != key->iif))
X continue;
X
X FRprintk("tb %d r %d ", r->r_table, r->r_action);
X switch (r->r_action) {
X case RTN_UNICAST:
- policy = NULL;
- break;
X case RTN_NAT:
X policy = r;
X break;
@@ -295,14 +309,23 @@
X res->r = policy;
X return 0;
X }
- if (err < 0)
+ if (err < 0 && err != -EAGAIN)
X return err;
-FRprintk("RCONT ");
X }
X FRprintk("FAILURE\n");
X return -ENETUNREACH;
X }
X
+void fib_select_default(const struct rt_key *key, struct fib_result *res)
+{
+ if (res->r && res->r->r_action == RTN_UNICAST &&
+ FIB_RES_GW(*res) && FIB_RES_NH(*res).nh_scope == RT_SCOPE_LINK) {
+ struct fib_table *tb;
+ if ((tb = fib_get_table(res->r->r_table)) != NULL)
+ tb->tb_select_default(tb, key, res);
+ }
+}
+
X static int fib_rules_event(struct notifier_block *this, unsigned long event, void *ptr)
X {
X struct device *dev = ptr;
@@ -337,6 +360,10 @@
X rtm->rtm_dst_len = r->r_dst_len;
X rtm->rtm_src_len = r->r_src_len;
X rtm->rtm_tos = r->r_tos;
+#ifdef CONFIG_IP_ROUTE_FWMARK
+ if (r->r_fwmark)
+ RTA_PUT(skb, RTA_PROTOINFO, 4, &r->r_fwmark);
+#endif
X rtm->rtm_table = r->r_table;
X rtm->rtm_protocol = 0;
X rtm->rtm_scope = 0;
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/fib_semantics.c linux/net/ipv4/fib_semantics.c
--- v2.2.3/linux/net/ipv4/fib_semantics.c Tue Feb 23 15:21:35 1999
+++ linux/net/ipv4/fib_semantics.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X *
X * IPv4 Forwarding Information Base: semantics.
X *
- * Version: $Id: fib_semantics.c,v 1.12 1999/01/26 05:33:44 davem Exp $
+ * Version: $Id: fib_semantics.c,v 1.13 1999/03/21 05:22:34 davem Exp $
X *
X * Authors: Alexey Kuznetsov, <kuz...@ms2.inr.ac.ru>
X *
@@ -89,7 +89,7 @@
X { -EINVAL, RT_SCOPE_UNIVERSE}, /* RTN_BLACKHOLE */
X { -EHOSTUNREACH, RT_SCOPE_UNIVERSE},/* RTN_UNREACHABLE */
X { -EACCES, RT_SCOPE_UNIVERSE}, /* RTN_PROHIBIT */
- { 1, RT_SCOPE_UNIVERSE}, /* RTN_THROW */
+ { -EAGAIN, RT_SCOPE_UNIVERSE}, /* RTN_THROW */
X #ifdef CONFIG_IP_ROUTE_NAT
X { 0, RT_SCOPE_HOST}, /* RTN_NAT */
X #else
@@ -420,7 +420,7 @@
X unsigned flavor = attr->rta_type;
X if (flavor) {
X if (flavor > FIB_MAX_METRICS)
- goto failure;
+ goto err_inval;
X fi->fib_metrics[flavor-1] = *(unsigned*)RTA_DATA(attr);
X }
X attr = RTA_NEXT(attr, attrlen);
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/icmp.c linux/net/ipv4/icmp.c
--- v2.2.3/linux/net/ipv4/icmp.c Wed Mar 10 15:29:52 1999
+++ linux/net/ipv4/icmp.c Sun Mar 21 07:22:00 1999
@@ -3,7 +3,7 @@
X *
X * Alan Cox, <al...@cymru.net>
X *
- * Version: $Id: icmp.c,v 1.49 1999/02/23 08:12:37 davem Exp $
+ * Version: $Id: icmp.c,v 1.52 1999/03/21 12:04:11 davem Exp $
X *
X * This program is free software; you can redistribute it and/or
X * modify it under the terms of the GNU General Public License
@@ -279,6 +279,10 @@
X #include <asm/uaccess.h>
X #include <net/checksum.h>
X
+#ifdef CONFIG_IP_MASQUERADE
+#include <net/ip_masq.h>
+#endif
+
X #define min(a,b) ((a)<(b)?(a):(b))
X
X /*
@@ -369,6 +373,12 @@
X * works for icmp destinations. This means the rate limiting information
X * for one "ip object" is shared.
X *
+ * Note that the same dst_entry fields are modified by functions in
+ * route.c too, but these work for packet destinations while xrlim_allow
+ * works for icmp destinations. This means the rate limiting information
+ * for one "ip object" is shared - and these ICMPs are twice limited:
+ * by source and by destination.
+ *
X * RFC 1812: 4.3.2.8 SHOULD be able to limit error message rate
X * SHOULD allow setting of rate limits
X *
@@ -381,10 +391,10 @@
X
X now = jiffies;
X dst->rate_tokens += now - dst->rate_last;
+ dst->rate_last = now;
X if (dst->rate_tokens > XRLIM_BURST_FACTOR*timeout)
X dst->rate_tokens = XRLIM_BURST_FACTOR*timeout;
X if (dst->rate_tokens >= timeout) {
- dst->rate_last = now;
X dst->rate_tokens -= timeout;
X return 1;
X }
@@ -402,6 +412,10 @@
X if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED)
X return 1;
X
+ /* Redirect has its own rate limit mechanism */
+ if (type == ICMP_REDIRECT)
+ return 1;
+
X /* No rate limit on loopback */
X if (dst->dev && (dst->dev->flags&IFF_LOOPBACK))
X return 1;
@@ -522,8 +536,13 @@
X /*
X * Now check at the protocol level
X */
- if (!rt)
+ if (!rt) {
+#ifndef CONFIG_IP_ALWAYS_DEFRAG
+ if (net_ratelimit())
+ printk(KERN_DEBUG "icmp_send: destinationless packet\n");
+#endif
X return;
+ }
X if (rt->rt_flags&(RTCF_BROADCAST|RTCF_MULTICAST))
X return;
X
@@ -568,6 +587,11 @@
X if (rt->rt_flags&RTCF_NAT && IPCB(skb_in)->flags&IPSKB_TRANSLATED) {
X iph->daddr = rt->key.dst;
X iph->saddr = rt->key.src;
+ }
+#endif
+#ifdef CONFIG_IP_MASQUERADE
+ if (type==ICMP_DEST_UNREACH && IPCB(skb_in)->flags&IPSKB_MASQUERADED) {
+ ip_fw_unmasq_icmp(skb_in);
X }
X #endif
X
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/igmp.c linux/net/ipv4/igmp.c
--- v2.2.3/linux/net/ipv4/igmp.c Thu Jan 7 15:11:41 1999
+++ linux/net/ipv4/igmp.c Sun Mar 21 07:22:00 1999
@@ -8,7 +8,7 @@
X * the older version didn't come out right using gcc 2.5.8, the newer one
X * seems to fall out with gcc 2.6.2.
X *
- * Version: $Id: igmp.c,v 1.28 1998/11/30 15:53:13 davem Exp $
+ * Version: $Id: igmp.c,v 1.29 1999/03/21 05:22:36 davem Exp $
X *
X * Authors:
X * Alan Cox <Alan...@linux.org>
@@ -97,6 +97,7 @@
X #include <linux/mroute.h>
X #endif
X
+#define IP_MAX_MEMBERSHIPS 20
X
X #ifdef CONFIG_IP_MULTICAST
X
@@ -462,7 +463,9 @@
X for (ip=&in_dev->mc_list; (i=*ip)!=NULL; ip=&i->next) {
X if (i->multiaddr==addr) {
X if (--i->users == 0) {
+ net_serialize_enter();
X *ip = i->next;
+ net_serialize_leave();
X igmp_group_dropped(i);
X if (in_dev->dev->flags & IFF_UP)
X ip_rt_multicast_event(in_dev);
@@ -610,7 +613,9 @@
X struct in_device *in_dev;
X if (--iml->count)
X return 0;
+ net_serialize_enter();
X *imlp = iml->next;
+ net_serialize_leave();
X in_dev = inetdev_by_index(iml->multi.imr_ifindex);
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 47'
echo 'File patch-2.2.4 is continued in part 48'
echo 48 > _shar_seq_.tmp
#!/bin/sh
# this is part 43 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 43; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
+ * 1 got the lock
+ * 0 go to sleep
+ * -EINTR interrupted
+ */
+static inline int waking_non_zero_interruptible(struct semaphore *sem,
+ struct task_struct *tsk)
+{
+ int ret, tmp;
+
+ /* Atomic decrement sem->waking iff it is > 0 */
+ __asm__ __volatile__(
+ "1: lwarx %1,0,%2\n" /* tmp = sem->waking */
+ " cmpwi 0,%1,0\n" /* test tmp */
+ " addic %1,%1,-1\n" /* --tmp */
+ " ble- 2f\n" /* exit if tmp was <= 0 */
+ " stwcx. %1,0,%2\n" /* update sem->waking */
+ " bne- 1b\n" /* try again if update failed*/
+ " li %0,1\n" /* ret = 1 */
+ "2:"
+ : "=r" (ret), "=&r" (tmp)
+ : "r" (&sem->waking), "0" (0)
+ : "cr0", "memory");
+
+ if (ret == 0 && signal_pending(tsk)) {
+ atomic_inc(&sem->count);
+ ret = -EINTR;
+ }
+ return ret;
+}
+
+/*
+ * waking_non_zero_trylock:
+ * 1 failed to lock
+ * 0 got the lock
+ */
+static inline int waking_non_zero_trylock(struct semaphore *sem)
+{
+ int ret, tmp;
+
+ /* Atomic decrement sem->waking iff it is > 0 */
+ __asm__ __volatile__(
+ "1: lwarx %1,0,%2\n" /* tmp = sem->waking */
+ " cmpwi 0,%1,0\n" /* test tmp */
+ " addic %1,%1,-1\n" /* --tmp */
+ " ble- 2f\n" /* exit if tmp was <= 0 */
+ " stwcx. %1,0,%2\n" /* update sem->waking */
+ " bne- 1b\n" /* try again if update failed*/
+ " li %0,0\n" /* ret = 0 */
+ "2:"
+ : "=r" (ret), "=&r" (tmp)
+ : "r" (&sem->waking), "0" (1)
+ : "cr0", "memory");
+
+ if (ret)
+ atomic_inc(&sem->count);
+
+ return ret;
+}
+
+#endif /* _PPC_SEMAPHORE_HELPER_H */
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/semaphore.h linux/include/asm-ppc/semaphore.h
--- v2.2.3/linux/include/asm-ppc/semaphore.h Tue Jan 19 11:32:53 1999
+++ linux/include/asm-ppc/semaphore.h Wed Mar 10 21:30:32 1999
@@ -13,66 +13,54 @@
X struct semaphore {
X atomic_t count;
X atomic_t waking;
- struct wait_queue * wait;
+ struct wait_queue *wait;
X };
X
-#define MUTEX ((struct semaphore) { ATOMIC_INIT(1), ATOMIC_INIT(0), NULL })
-#define MUTEX_LOCKED ((struct semaphore) { ATOMIC_INIT(0), ATOMIC_INIT(0), NULL })
+#define sema_init(sem, val) atomic_set(&((sem)->count), (val))
+
+#define MUTEX ((struct semaphore) \
+ { ATOMIC_INIT(1), ATOMIC_INIT(0), NULL })
+#define MUTEX_LOCKED ((struct semaphore) \
+ { ATOMIC_INIT(0), ATOMIC_INIT(0), NULL })
X
X extern void __down(struct semaphore * sem);
X extern int __down_interruptible(struct semaphore * sem);
+extern int __down_trylock(struct semaphore * sem);
X extern void __up(struct semaphore * sem);
X
-#define sema_init(sem, val) atomic_set(&((sem)->count), (val))
-
-/*
- * These two _must_ execute atomically wrt each other.
- *
- * This is trivially done with load_locked/store_cond,
- * i.e. load with reservation and store conditional on the ppc.
- */
-
-static inline void wake_one_more(struct semaphore * sem)
+extern inline void down(struct semaphore * sem)
X {
- atomic_inc(&sem->waking);
+ if (atomic_dec_return(&sem->count) >= 0)
+ wmb();
+ else
+ __down(sem);
X }
X
-static inline int waking_non_zero(struct semaphore *sem, struct task_struct *tsk)
+extern inline int down_interruptible(struct semaphore * sem)
X {
- int ret, tmp;
-
- __asm__ __volatile__(
- "1: lwarx %1,0,%2\n"
- " cmpwi 0,%1,0\n"
- " addic %1,%1,-1\n"
- " ble- 2f\n"
- " stwcx. %1,0,%2\n"
- " bne- 1b\n"
- " li %0,1\n"
- "2:"
- : "=r" (ret), "=&r" (tmp)
- : "r" (&sem->waking), "0" (0)
- : "cr0", "memory");
+ int ret = 0;
X
+ if (atomic_dec_return(&sem->count) >= 0)
+ wmb();
+ else
+ ret = __down_interruptible(sem);
X return ret;
X }
X
-extern inline void down(struct semaphore * sem)
-{
- if (atomic_dec_return(&sem->count) < 0)
- __down(sem);
-}
-
-extern inline int down_interruptible(struct semaphore * sem)
+extern inline int down_trylock(struct semaphore * sem)
X {
X int ret = 0;
- if (atomic_dec_return(&sem->count) < 0)
- ret = __down_interruptible(sem);
+
+ if (atomic_dec_return(&sem->count) >= 0)
+ wmb();
+ else
+ ret = __down_trylock(sem);
X return ret;
X }
X
X extern inline void up(struct semaphore * sem)
X {
+ mb();
X if (atomic_inc_return(&sem->count) <= 0)
X __up(sem);
X }
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/smp.h linux/include/asm-ppc/smp.h
--- v2.2.3/linux/include/asm-ppc/smp.h Thu Nov 19 09:56:29 1998
+++ linux/include/asm-ppc/smp.h Wed Mar 10 21:30:32 1999
@@ -6,13 +6,22 @@
X #ifndef _PPC_SMP_H
X #define _PPC_SMP_H
X
-#include <linux/kernel.h> /* for panic */
-#include <linux/tasks.h> /* for NR_CPUS */
+#include <linux/kernel.h>
+#include <linux/tasks.h>
X
X #ifdef __SMP__
X
X #ifndef __ASSEMBLY__
X
+struct cpuinfo_PPC {
+ unsigned long loops_per_sec;
+ unsigned long pvr;
+ unsigned long *pgd_cache;
+ unsigned long *pte_cache;
+ unsigned long pgtable_cache_sz;
+};
+extern struct cpuinfo_PPC cpu_data[NR_CPUS];
+
X extern int first_cpu_booted;
X extern unsigned long smp_proc_in_lock[NR_CPUS];
X
@@ -20,7 +29,7 @@
X extern void smp_store_cpu_info(int id);
X
X #define NO_PROC_ID 0xFF /* No processor magic marker */
-#define PROC_CHANGE_PENALTY 2000
+#define PROC_CHANGE_PENALTY 20
X
X /* 1 to 1 mapping on PPC -- Cort */
X #define cpu_logical_map(cpu) (cpu)
@@ -29,17 +38,6 @@
X
X #define hard_smp_processor_id() (0)
X #define smp_processor_id() (current->processor)
-
-/* per processor PPC parameters we need. */
-struct cpuinfo_PPC {
- unsigned long loops_per_sec;
- unsigned long pvr;
- unsigned long *pgd_quick;
- unsigned long *pte_quick;
- unsigned long pgtable_cache_sz;
-};
-
-extern struct cpuinfo_PPC cpu_data[NR_CPUS];
X
X struct klock_info_struct {
X unsigned long kernel_flag;
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/softirq.h linux/include/asm-ppc/softirq.h
--- v2.2.3/linux/include/asm-ppc/softirq.h Mon Dec 28 15:00:53 1998
+++ linux/include/asm-ppc/softirq.h Wed Mar 10 21:30:32 1999
@@ -18,8 +18,9 @@
X
X extern inline void remove_bh(int nr)
X {
- bh_base[nr] = NULL;
X bh_mask &= ~(1 << nr);
+ wmb();
+ bh_base[nr] = NULL;
X }
X
X extern inline void mark_bh(int nr)
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/spinlock.h linux/include/asm-ppc/spinlock.h
--- v2.2.3/linux/include/asm-ppc/spinlock.h Thu Dec 31 10:29:02 1998
+++ linux/include/asm-ppc/spinlock.h Wed Mar 10 21:30:32 1999
@@ -102,6 +102,8 @@
X #define spin_unlock_irqrestore(lock, flags) \
X do { spin_unlock(lock); __restore_flags(flags); } while (0)
X
+extern unsigned long __spin_trylock(volatile unsigned long *lock);
+
X /*
X * Read-write spinlocks, allowing multiple readers
X * but only one writer.
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/system.h linux/include/asm-ppc/system.h
--- v2.2.3/linux/include/asm-ppc/system.h Thu Dec 31 10:29:02 1998
+++ linux/include/asm-ppc/system.h Wed Mar 10 21:30:32 1999
@@ -9,32 +9,33 @@
X * Memory barrier.
X * The sync instruction guarantees that all memory accesses initiated
X * by this processor have been performed (with respect to all other
- * mechanisms that access memory).
+ * mechanisms that access memory). The eieio instruction is a barrier
+ * providing an ordering (separately) for (a) cacheable stores and (b)
+ * loads and stores to non-cacheable memory (e.g. I/O devices).
+ *
+ * mb() prevents loads and stores being reordered across this point.
+ * rmb() prevents loads being reordered across this point.
+ * wmb() prevents stores being reordered across this point.
+ *
+ * We can use the eieio instruction for wmb, but since it doesn't
+ * give any ordering guarantees about loads, we have to use the
+ * stronger but slower sync instruction for mb and rmb.
X */
X #define mb() __asm__ __volatile__ ("sync" : : : "memory")
X #define rmb() __asm__ __volatile__ ("sync" : : : "memory")
-#define wmb() __asm__ __volatile__ ("sync" : : : "memory")
+#define wmb() __asm__ __volatile__ ("eieio" : : : "memory")
X
X #define __save_flags(flags) ({\
X __asm__ __volatile__ ("mfmsr %0" : "=r" ((flags)) : : "memory"); })
X #define __save_and_cli(flags) ({__save_flags(flags);__cli();})
X
+/* Data cache block flush - write out the cache line containing the
+ specified address and then invalidate it in the cache. */
X extern __inline__ void dcbf(void *line)
X {
- asm("dcbf %0,%1\n\t"
- "sync \n\t"
- "isync \n\t"
- :: "r" (line), "r" (0));
+ asm("dcbf %0,%1; sync" : : "r" (line), "r" (0));
X }
X
-extern __inline__ void dcbi(void *line)
-{
- asm("dcbi %0,%1\n\t"
- "sync \n\t"
- "isync \n\t"
- :: "r" (line), "r" (0));
-}
-
X extern __inline__ void __restore_flags(unsigned long flags)
X {
X extern atomic_t n_lost_interrupts;
@@ -54,6 +55,7 @@
X extern int _disable_interrupts(void);
X extern void _enable_interrupts(int);
X
+extern void instruction_dump(unsigned long *);
X extern void print_backtrace(unsigned long *);
X extern void show_regs(struct pt_regs * regs);
X extern void flush_instruction_cache(void);
@@ -107,8 +109,8 @@
X
X #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
X
-extern void *xchg_u64(void *ptr, unsigned long val);
-extern void *xchg_u32(void *m, unsigned long val);
+extern unsigned long xchg_u64(void *ptr, unsigned long val);
+extern unsigned long xchg_u32(void *ptr, unsigned long val);
X
X /*
X * This function doesn't exist, so you'll get a linker error
@@ -126,10 +128,10 @@
X static inline unsigned long __xchg(unsigned long x, void * ptr, int size)
X {
X switch (size) {
- case 4:
- return (unsigned long )xchg_u32(ptr, x);
- case 8:
- return (unsigned long )xchg_u64(ptr, x);
+ case 4:
+ return (unsigned long )xchg_u32(ptr, x);
+ case 8:
+ return (unsigned long )xchg_u64(ptr, x);
X }
X __xchg_called_with_bad_pointer();
X return x;
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/termbits.h linux/include/asm-ppc/termbits.h
--- v2.2.3/linux/include/asm-ppc/termbits.h Fri Jan 8 22:36:24 1999
+++ linux/include/asm-ppc/termbits.h Wed Mar 10 21:30:32 1999
@@ -121,7 +121,7 @@
X #define B38400 0000017
X #define EXTA B19200
X #define EXTB B38400
-#define CBAUDEX 0000020
+#define CBAUDEX 0000000
X #define B57600 00020
X #define B115200 00021
X #define B230400 00022
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/types.h linux/include/asm-ppc/types.h
--- v2.2.3/linux/include/asm-ppc/types.h Mon Oct 5 13:13:43 1998
+++ linux/include/asm-ppc/types.h Wed Mar 10 21:30:32 1999
@@ -6,6 +6,8 @@
X * header files exported to user space
X */
X
+typedef unsigned short umode_t;
+
X typedef __signed__ char __s8;
X typedef unsigned char __u8;
X
@@ -24,8 +26,6 @@
X * These aren't exported outside the kernel to avoid name space clashes
X */
X #ifdef __KERNEL__
-
-typedef unsigned short umode_t;
X
X typedef signed char s8;
X typedef unsigned char u8;
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/uaccess.h linux/include/asm-ppc/uaccess.h
--- v2.2.3/linux/include/asm-ppc/uaccess.h Mon Oct 5 13:13:43 1998
+++ linux/include/asm-ppc/uaccess.h Fri Mar 19 10:50:09 1999
@@ -27,7 +27,7 @@
X #define segment_eq(a,b) ((a).seg == (b).seg)
X
X #define __kernel_ok (segment_eq(get_fs(), KERNEL_DS))
-#define __user_ok(addr,size) (((size) <= 0x80000000)&&((addr) <= 0x80000000-(size)))
+#define __user_ok(addr,size) (((size) <= TASK_SIZE)&&((addr) <= TASK_SIZE-(size)))
X #define __access_ok(addr,size) (__kernel_ok || __user_ok((addr),(size)))
X #define access_ok(type,addr,size) __access_ok((unsigned long)(addr),(size))
X
@@ -223,6 +223,10 @@
X return __copy_tofrom_user(to, from, n);
X return n;
X }
+
+#define copy_to_user_ret(to,from,n,retval) ({ if (copy_to_user(to,from,n)) return retval; })
+
+#define copy_from_user_ret(to,from,n,retval) ({ if (copy_from_user(to,from,n)) return retval; })
X
X #define __copy_from_user(to, from, size) \
X __copy_tofrom_user((to), (from), (size))
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/unistd.h linux/include/asm-ppc/unistd.h
--- v2.2.3/linux/include/asm-ppc/unistd.h Thu Nov 19 09:56:29 1998
+++ linux/include/asm-ppc/unistd.h Wed Mar 10 21:30:32 1999
@@ -193,6 +193,7 @@
X #define __NR_sendfile 186
X #define __NR_getpmsg 187 /* some people actually want streams */
X #define __NR_putpmsg 188 /* some people actually want streams */
+#define __NR_vfork 189
X
X #define __NR(n) #n
X
diff -u --recursive --new-file v2.2.3/linux/include/asm-ppc/vga.h linux/include/asm-ppc/vga.h
--- v2.2.3/linux/include/asm-ppc/vga.h Wed Mar 10 15:29:49 1999
+++ linux/include/asm-ppc/vga.h Fri Mar 19 10:50:09 1999
@@ -8,17 +8,38 @@
X #define _LINUX_ASM_VGA_H_
X
X #include <asm/io.h>
+#include <asm/processor.h>
+
+#include <linux/config.h>
+#include <linux/console.h>
X
X #define VT_BUF_HAVE_RW
X
X extern inline void scr_writew(u16 val, u16 *addr)
X {
- st_le16(addr, val);
+ /* If using vgacon (not fbcon) byteswap the writes.
+ * If non-vgacon assume fbcon and don't byteswap
+ * just like include/linux/vt_buffer.h.
+ * XXX: this is a performance loss so get rid of it
+ * as soon as fbcon works on prep.
+ * -- Cort
+ */
+#ifdef CONFIG_FB
+ if ( conswitchp != &vga_con )
+ (*(addr) = (val));
+ else
+#endif /* CONFIG_FB */
+ st_le16(addr, val);
X }
X
X extern inline u16 scr_readw(const u16 *addr)
X {
- return ld_le16(addr);
+#ifdef CONFIG_FB
+ if ( conswitchp != &vga_con )
+ return (*(addr));
+ else
+#endif /* CONFIG_FB */
+ return ld_le16((unsigned short *)addr);
X }
X
X #define VT_BUF_HAVE_MEMCPYF
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/asm_offsets.h linux/include/asm-sparc/asm_offsets.h
--- v2.2.3/linux/include/asm-sparc/asm_offsets.h Thu Nov 19 09:56:29 1998
+++ linux/include/asm-sparc/asm_offsets.h Wed Mar 10 16:53:37 1999
@@ -2,7 +2,9 @@
X #ifndef __ASM_OFFSETS_H__
X #define __ASM_OFFSETS_H__
X
-#ifndef __SMP__
+#include <linux/config.h>
+
+#ifndef CONFIG_SMP
X
X #define AOFF_task_state 0x00000000
X #define ASIZ_task_state 0x00000004
@@ -20,217 +22,219 @@
X #define ASIZ_task_counter 0x00000004
X #define AOFF_task_priority 0x0000001c
X #define ASIZ_task_priority 0x00000004
-#define AOFF_task_has_cpu 0x00000020
+#define AOFF_task_avg_slice 0x00000020
+#define ASIZ_task_avg_slice 0x00000004
+#define AOFF_task_has_cpu 0x00000024
X #define ASIZ_task_has_cpu 0x00000004
-#define AOFF_task_processor 0x00000024
+#define AOFF_task_processor 0x00000028
X #define ASIZ_task_processor 0x00000004
-#define AOFF_task_last_processor 0x00000028
+#define AOFF_task_last_processor 0x0000002c
X #define ASIZ_task_last_processor 0x00000004
-#define AOFF_task_lock_depth 0x0000002c
+#define AOFF_task_lock_depth 0x00000030
X #define ASIZ_task_lock_depth 0x00000004
-#define AOFF_task_next_task 0x00000030
+#define AOFF_task_next_task 0x00000034
X #define ASIZ_task_next_task 0x00000004
-#define AOFF_task_prev_task 0x00000034
+#define AOFF_task_prev_task 0x00000038
X #define ASIZ_task_prev_task 0x00000004
-#define AOFF_task_next_run 0x00000038
+#define AOFF_task_next_run 0x0000003c
X #define ASIZ_task_next_run 0x00000004
-#define AOFF_task_prev_run 0x0000003c
+#define AOFF_task_prev_run 0x00000040
X #define ASIZ_task_prev_run 0x00000004
-#define AOFF_task_binfmt 0x00000040
+#define AOFF_task_binfmt 0x00000044
X #define ASIZ_task_binfmt 0x00000004
-#define AOFF_task_exit_code 0x00000044
+#define AOFF_task_exit_code 0x00000048
X #define ASIZ_task_exit_code 0x00000004
-#define AOFF_task_exit_signal 0x00000048
+#define AOFF_task_exit_signal 0x0000004c
X #define ASIZ_task_exit_signal 0x00000004
-#define AOFF_task_pdeath_signal 0x0000004c
+#define AOFF_task_pdeath_signal 0x00000050
X #define ASIZ_task_pdeath_signal 0x00000004
-#define AOFF_task_personality 0x00000050
+#define AOFF_task_personality 0x00000054
X #define ASIZ_task_personality 0x00000004
-#define AOFF_task_pid 0x00000058
+#define AOFF_task_pid 0x0000005c
X #define ASIZ_task_pid 0x00000004
-#define AOFF_task_pgrp 0x0000005c
+#define AOFF_task_pgrp 0x00000060
X #define ASIZ_task_pgrp 0x00000004
-#define AOFF_task_tty_old_pgrp 0x00000060
+#define AOFF_task_tty_old_pgrp 0x00000064
X #define ASIZ_task_tty_old_pgrp 0x00000004
-#define AOFF_task_session 0x00000064
+#define AOFF_task_session 0x00000068
X #define ASIZ_task_session 0x00000004
-#define AOFF_task_leader 0x00000068
+#define AOFF_task_leader 0x0000006c
X #define ASIZ_task_leader 0x00000004
-#define AOFF_task_p_opptr 0x0000006c
+#define AOFF_task_p_opptr 0x00000070
X #define ASIZ_task_p_opptr 0x00000004
-#define AOFF_task_p_pptr 0x00000070
+#define AOFF_task_p_pptr 0x00000074
X #define ASIZ_task_p_pptr 0x00000004
-#define AOFF_task_p_cptr 0x00000074
+#define AOFF_task_p_cptr 0x00000078
X #define ASIZ_task_p_cptr 0x00000004
-#define AOFF_task_p_ysptr 0x00000078
+#define AOFF_task_p_ysptr 0x0000007c
X #define ASIZ_task_p_ysptr 0x00000004
-#define AOFF_task_p_osptr 0x0000007c
+#define AOFF_task_p_osptr 0x00000080
X #define ASIZ_task_p_osptr 0x00000004
-#define AOFF_task_pidhash_next 0x00000080
+#define AOFF_task_pidhash_next 0x00000084
X #define ASIZ_task_pidhash_next 0x00000004
-#define AOFF_task_pidhash_pprev 0x00000084
+#define AOFF_task_pidhash_pprev 0x00000088
X #define ASIZ_task_pidhash_pprev 0x00000004
-#define AOFF_task_tarray_ptr 0x00000088
+#define AOFF_task_tarray_ptr 0x0000008c
X #define ASIZ_task_tarray_ptr 0x00000004
-#define AOFF_task_wait_chldexit 0x0000008c
+#define AOFF_task_wait_chldexit 0x00000090
X #define ASIZ_task_wait_chldexit 0x00000004
-#define AOFF_task_policy 0x00000090
+#define AOFF_task_vfork_sem 0x00000094
+#define ASIZ_task_vfork_sem 0x00000004
+#define AOFF_task_policy 0x00000098
X #define ASIZ_task_policy 0x00000004
-#define AOFF_task_rt_priority 0x00000094
+#define AOFF_task_rt_priority 0x0000009c
X #define ASIZ_task_rt_priority 0x00000004
-#define AOFF_task_it_real_value 0x00000098
+#define AOFF_task_it_real_value 0x000000a0
X #define ASIZ_task_it_real_value 0x00000004
-#define AOFF_task_it_prof_value 0x0000009c
+#define AOFF_task_it_prof_value 0x000000a4
X #define ASIZ_task_it_prof_value 0x00000004
-#define AOFF_task_it_virt_value 0x000000a0
+#define AOFF_task_it_virt_value 0x000000a8
X #define ASIZ_task_it_virt_value 0x00000004
-#define AOFF_task_it_real_incr 0x000000a4
+#define AOFF_task_it_real_incr 0x000000ac
X #define ASIZ_task_it_real_incr 0x00000004
-#define AOFF_task_it_prof_incr 0x000000a8
+#define AOFF_task_it_prof_incr 0x000000b0
X #define ASIZ_task_it_prof_incr 0x00000004
-#define AOFF_task_it_virt_incr 0x000000ac
+#define AOFF_task_it_virt_incr 0x000000b4
X #define ASIZ_task_it_virt_incr 0x00000004
-#define AOFF_task_real_timer 0x000000b0
+#define AOFF_task_real_timer 0x000000b8
X #define ASIZ_task_real_timer 0x00000014
-#define AOFF_task_times 0x000000c4
+#define AOFF_task_times 0x000000cc
X #define ASIZ_task_times 0x00000010
-#define AOFF_task_start_time 0x000000d4
+#define AOFF_task_start_time 0x000000dc
X #define ASIZ_task_start_time 0x00000004
-#define AOFF_task_per_cpu_utime 0x000000d8
+#define AOFF_task_per_cpu_utime 0x000000e0
X #define ASIZ_task_per_cpu_utime 0x00000004
-#define AOFF_task_min_flt 0x000000e0
+#define AOFF_task_min_flt 0x000000e8
X #define ASIZ_task_min_flt 0x00000004
-#define AOFF_task_maj_flt 0x000000e4
+#define AOFF_task_maj_flt 0x000000ec
X #define ASIZ_task_maj_flt 0x00000004
-#define AOFF_task_nswap 0x000000e8
+#define AOFF_task_nswap 0x000000f0
X #define ASIZ_task_nswap 0x00000004
-#define AOFF_task_cmin_flt 0x000000ec
+#define AOFF_task_cmin_flt 0x000000f4
X #define ASIZ_task_cmin_flt 0x00000004
-#define AOFF_task_cmaj_flt 0x000000f0
+#define AOFF_task_cmaj_flt 0x000000f8
X #define ASIZ_task_cmaj_flt 0x00000004
-#define AOFF_task_cnswap 0x000000f4
+#define AOFF_task_cnswap 0x000000fc
X #define ASIZ_task_cnswap 0x00000004
-#define AOFF_task_swap_address 0x000000fc
-#define ASIZ_task_swap_address 0x00000004
-#define AOFF_task_old_maj_flt 0x00000100
-#define ASIZ_task_old_maj_flt 0x00000004
-#define AOFF_task_dec_flt 0x00000104
-#define ASIZ_task_dec_flt 0x00000004
-#define AOFF_task_swap_cnt 0x00000108
-#define ASIZ_task_swap_cnt 0x00000004
-#define AOFF_task_uid 0x0000010c
+#define AOFF_task_uid 0x00000102
X #define ASIZ_task_uid 0x00000002
-#define AOFF_task_euid 0x0000010e
+#define AOFF_task_euid 0x00000104
X #define ASIZ_task_euid 0x00000002
-#define AOFF_task_suid 0x00000110
+#define AOFF_task_suid 0x00000106
X #define ASIZ_task_suid 0x00000002
-#define AOFF_task_fsuid 0x00000112
+#define AOFF_task_fsuid 0x00000108
X #define ASIZ_task_fsuid 0x00000002
-#define AOFF_task_gid 0x00000114
+#define AOFF_task_gid 0x0000010a
X #define ASIZ_task_gid 0x00000002
-#define AOFF_task_egid 0x00000116
+#define AOFF_task_egid 0x0000010c
X #define ASIZ_task_egid 0x00000002
-#define AOFF_task_sgid 0x00000118
+#define AOFF_task_sgid 0x0000010e
X #define ASIZ_task_sgid 0x00000002
-#define AOFF_task_fsgid 0x0000011a
+#define AOFF_task_fsgid 0x00000110
X #define ASIZ_task_fsgid 0x00000002
-#define AOFF_task_ngroups 0x0000011c
+#define AOFF_task_ngroups 0x00000114
X #define ASIZ_task_ngroups 0x00000004
-#define AOFF_task_groups 0x00000120
+#define AOFF_task_groups 0x00000118
X #define ASIZ_task_groups 0x00000040
-#define AOFF_task_cap_effective 0x00000160
+#define AOFF_task_cap_effective 0x00000158
X #define ASIZ_task_cap_effective 0x00000004
-#define AOFF_task_cap_inheritable 0x00000164
+#define AOFF_task_cap_inheritable 0x0000015c
X #define ASIZ_task_cap_inheritable 0x00000004
-#define AOFF_task_cap_permitted 0x00000168
+#define AOFF_task_cap_permitted 0x00000160
X #define ASIZ_task_cap_permitted 0x00000004
-#define AOFF_task_user 0x0000016c
+#define AOFF_task_user 0x00000164
X #define ASIZ_task_user 0x00000004
-#define AOFF_task_rlim 0x00000170
+#define AOFF_task_rlim 0x00000168
X #define ASIZ_task_rlim 0x00000050
-#define AOFF_task_used_math 0x000001c0
+#define AOFF_task_used_math 0x000001b8
X #define ASIZ_task_used_math 0x00000002
-#define AOFF_task_comm 0x000001c2
+#define AOFF_task_comm 0x000001ba
X #define ASIZ_task_comm 0x00000010
-#define AOFF_task_link_count 0x000001d4
+#define AOFF_task_link_count 0x000001cc
X #define ASIZ_task_link_count 0x00000004
-#define AOFF_task_tty 0x000001d8
+#define AOFF_task_tty 0x000001d0
X #define ASIZ_task_tty 0x00000004
-#define AOFF_task_semundo 0x000001dc
+#define AOFF_task_semundo 0x000001d4
X #define ASIZ_task_semundo 0x00000004
-#define AOFF_task_semsleeping 0x000001e0
+#define AOFF_task_semsleeping 0x000001d8
X #define ASIZ_task_semsleeping 0x00000004
-#define AOFF_task_tss 0x000001e8
+#define AOFF_task_tss 0x000001e0
X #define ASIZ_task_tss 0x00000388
-#define AOFF_task_fs 0x00000570
+#define AOFF_task_fs 0x00000568
X #define ASIZ_task_fs 0x00000004
-#define AOFF_task_files 0x00000574
+#define AOFF_task_files 0x0000056c
X #define ASIZ_task_files 0x00000004
-#define AOFF_task_mm 0x00000578
+#define AOFF_task_mm 0x00000570
X #define ASIZ_task_mm 0x00000004
-#define AOFF_task_sigmask_lock 0x0000057c
+#define AOFF_task_sigmask_lock 0x00000574
X #define ASIZ_task_sigmask_lock 0x00000001
-#define AOFF_task_sig 0x00000580
+#define AOFF_task_sig 0x00000578
X #define ASIZ_task_sig 0x00000004
-#define AOFF_task_signal 0x00000584
+#define AOFF_task_signal 0x0000057c
X #define ASIZ_task_signal 0x00000008
-#define AOFF_task_blocked 0x0000058c
+#define AOFF_task_blocked 0x00000584
X #define ASIZ_task_blocked 0x00000008
-#define AOFF_task_sigqueue 0x00000594
+#define AOFF_task_sigqueue 0x0000058c
X #define ASIZ_task_sigqueue 0x00000004
-#define AOFF_task_sigqueue_tail 0x00000598
+#define AOFF_task_sigqueue_tail 0x00000590
X #define ASIZ_task_sigqueue_tail 0x00000004
-#define AOFF_task_sas_ss_sp 0x0000059c
+#define AOFF_task_sas_ss_sp 0x00000594
X #define ASIZ_task_sas_ss_sp 0x00000004
-#define AOFF_task_sas_ss_size 0x000005a0
+#define AOFF_task_sas_ss_size 0x00000598
X #define ASIZ_task_sas_ss_size 0x00000004
X #define AOFF_mm_mmap 0x00000000
X #define ASIZ_mm_mmap 0x00000004
-#define AOFF_mm_mmap_cache 0x00000004
+#define AOFF_mm_mmap_avl 0x00000004
+#define ASIZ_mm_mmap_avl 0x00000004
+#define AOFF_mm_mmap_cache 0x00000008
X #define ASIZ_mm_mmap_cache 0x00000004
-#define AOFF_mm_pgd 0x00000008
+#define AOFF_mm_pgd 0x0000000c
X #define ASIZ_mm_pgd 0x00000004
-#define AOFF_mm_count 0x0000000c
+#define AOFF_mm_count 0x00000010
X #define ASIZ_mm_count 0x00000004
-#define AOFF_mm_map_count 0x00000010
+#define AOFF_mm_map_count 0x00000014
X #define ASIZ_mm_map_count 0x00000004
-#define AOFF_mm_mmap_sem 0x00000014
+#define AOFF_mm_mmap_sem 0x00000018
X #define ASIZ_mm_mmap_sem 0x0000000c
-#define AOFF_mm_context 0x00000020
+#define AOFF_mm_context 0x00000024
X #define ASIZ_mm_context 0x00000004
-#define AOFF_mm_start_code 0x00000024
+#define AOFF_mm_start_code 0x00000028
X #define ASIZ_mm_start_code 0x00000004
-#define AOFF_mm_end_code 0x00000028
+#define AOFF_mm_end_code 0x0000002c
X #define ASIZ_mm_end_code 0x00000004
-#define AOFF_mm_start_data 0x0000002c
+#define AOFF_mm_start_data 0x00000030
X #define ASIZ_mm_start_data 0x00000004
-#define AOFF_mm_end_data 0x00000030
+#define AOFF_mm_end_data 0x00000034
X #define ASIZ_mm_end_data 0x00000004
-#define AOFF_mm_start_brk 0x00000034
+#define AOFF_mm_start_brk 0x00000038
X #define ASIZ_mm_start_brk 0x00000004
-#define AOFF_mm_brk 0x00000038
+#define AOFF_mm_brk 0x0000003c
X #define ASIZ_mm_brk 0x00000004
-#define AOFF_mm_start_stack 0x0000003c
+#define AOFF_mm_start_stack 0x00000040
X #define ASIZ_mm_start_stack 0x00000004
-#define AOFF_mm_arg_start 0x00000040
+#define AOFF_mm_arg_start 0x00000044
X #define ASIZ_mm_arg_start 0x00000004
-#define AOFF_mm_arg_end 0x00000044
+#define AOFF_mm_arg_end 0x00000048
X #define ASIZ_mm_arg_end 0x00000004
-#define AOFF_mm_env_start 0x00000048
+#define AOFF_mm_env_start 0x0000004c
X #define ASIZ_mm_env_start 0x00000004
-#define AOFF_mm_env_end 0x0000004c
+#define AOFF_mm_env_end 0x00000050
X #define ASIZ_mm_env_end 0x00000004
-#define AOFF_mm_rss 0x00000050
+#define AOFF_mm_rss 0x00000054
X #define ASIZ_mm_rss 0x00000004
-#define AOFF_mm_total_vm 0x00000054
+#define AOFF_mm_total_vm 0x00000058
X #define ASIZ_mm_total_vm 0x00000004
-#define AOFF_mm_locked_vm 0x00000058
+#define AOFF_mm_locked_vm 0x0000005c
X #define ASIZ_mm_locked_vm 0x00000004
-#define AOFF_mm_def_flags 0x0000005c
+#define AOFF_mm_def_flags 0x00000060
X #define ASIZ_mm_def_flags 0x00000004
-#define AOFF_mm_cpu_vm_mask 0x00000060
+#define AOFF_mm_cpu_vm_mask 0x00000064
X #define ASIZ_mm_cpu_vm_mask 0x00000004
-#define AOFF_mm_segments 0x00000064
+#define AOFF_mm_swap_cnt 0x00000068
+#define ASIZ_mm_swap_cnt 0x00000004
+#define AOFF_mm_swap_address 0x0000006c
+#define ASIZ_mm_swap_address 0x00000004
+#define AOFF_mm_segments 0x00000070
X #define ASIZ_mm_segments 0x00000004
X #define AOFF_thread_uwinmask 0x00000000
X #define ASIZ_thread_uwinmask 0x00000004
@@ -275,7 +279,7 @@
X #define AOFF_thread_new_signal 0x00000380
X #define ASIZ_thread_new_signal 0x00000004
X
-#else /* __SMP__ */
+#else /* CONFIG_SMP */
X
X #define AOFF_task_state 0x00000000
X #define ASIZ_task_state 0x00000004
@@ -293,217 +297,219 @@
X #define ASIZ_task_counter 0x00000004
X #define AOFF_task_priority 0x0000001c
X #define ASIZ_task_priority 0x00000004
-#define AOFF_task_has_cpu 0x00000020
+#define AOFF_task_avg_slice 0x00000020
+#define ASIZ_task_avg_slice 0x00000004
+#define AOFF_task_has_cpu 0x00000024
X #define ASIZ_task_has_cpu 0x00000004
-#define AOFF_task_processor 0x00000024
+#define AOFF_task_processor 0x00000028
X #define ASIZ_task_processor 0x00000004
-#define AOFF_task_last_processor 0x00000028
+#define AOFF_task_last_processor 0x0000002c
X #define ASIZ_task_last_processor 0x00000004
-#define AOFF_task_lock_depth 0x0000002c
+#define AOFF_task_lock_depth 0x00000030
X #define ASIZ_task_lock_depth 0x00000004
-#define AOFF_task_next_task 0x00000030
+#define AOFF_task_next_task 0x00000034
X #define ASIZ_task_next_task 0x00000004
-#define AOFF_task_prev_task 0x00000034
+#define AOFF_task_prev_task 0x00000038
X #define ASIZ_task_prev_task 0x00000004
-#define AOFF_task_next_run 0x00000038
+#define AOFF_task_next_run 0x0000003c
X #define ASIZ_task_next_run 0x00000004
-#define AOFF_task_prev_run 0x0000003c
+#define AOFF_task_prev_run 0x00000040
X #define ASIZ_task_prev_run 0x00000004
-#define AOFF_task_binfmt 0x00000040
+#define AOFF_task_binfmt 0x00000044
X #define ASIZ_task_binfmt 0x00000004
-#define AOFF_task_exit_code 0x00000044
+#define AOFF_task_exit_code 0x00000048
X #define ASIZ_task_exit_code 0x00000004
-#define AOFF_task_exit_signal 0x00000048
+#define AOFF_task_exit_signal 0x0000004c
X #define ASIZ_task_exit_signal 0x00000004
-#define AOFF_task_pdeath_signal 0x0000004c
+#define AOFF_task_pdeath_signal 0x00000050
X #define ASIZ_task_pdeath_signal 0x00000004
-#define AOFF_task_personality 0x00000050
+#define AOFF_task_personality 0x00000054
X #define ASIZ_task_personality 0x00000004
-#define AOFF_task_pid 0x00000058
+#define AOFF_task_pid 0x0000005c
X #define ASIZ_task_pid 0x00000004
-#define AOFF_task_pgrp 0x0000005c
+#define AOFF_task_pgrp 0x00000060
X #define ASIZ_task_pgrp 0x00000004
-#define AOFF_task_tty_old_pgrp 0x00000060
+#define AOFF_task_tty_old_pgrp 0x00000064
X #define ASIZ_task_tty_old_pgrp 0x00000004
-#define AOFF_task_session 0x00000064
+#define AOFF_task_session 0x00000068
X #define ASIZ_task_session 0x00000004
-#define AOFF_task_leader 0x00000068
+#define AOFF_task_leader 0x0000006c
X #define ASIZ_task_leader 0x00000004
-#define AOFF_task_p_opptr 0x0000006c
+#define AOFF_task_p_opptr 0x00000070
X #define ASIZ_task_p_opptr 0x00000004
-#define AOFF_task_p_pptr 0x00000070
+#define AOFF_task_p_pptr 0x00000074
X #define ASIZ_task_p_pptr 0x00000004
-#define AOFF_task_p_cptr 0x00000074
+#define AOFF_task_p_cptr 0x00000078
X #define ASIZ_task_p_cptr 0x00000004
-#define AOFF_task_p_ysptr 0x00000078
+#define AOFF_task_p_ysptr 0x0000007c
X #define ASIZ_task_p_ysptr 0x00000004
-#define AOFF_task_p_osptr 0x0000007c
+#define AOFF_task_p_osptr 0x00000080
X #define ASIZ_task_p_osptr 0x00000004
-#define AOFF_task_pidhash_next 0x00000080
+#define AOFF_task_pidhash_next 0x00000084
X #define ASIZ_task_pidhash_next 0x00000004
-#define AOFF_task_pidhash_pprev 0x00000084
+#define AOFF_task_pidhash_pprev 0x00000088
X #define ASIZ_task_pidhash_pprev 0x00000004
-#define AOFF_task_tarray_ptr 0x00000088
+#define AOFF_task_tarray_ptr 0x0000008c
X #define ASIZ_task_tarray_ptr 0x00000004
-#define AOFF_task_wait_chldexit 0x0000008c
+#define AOFF_task_wait_chldexit 0x00000090
X #define ASIZ_task_wait_chldexit 0x00000004
-#define AOFF_task_policy 0x00000090
+#define AOFF_task_vfork_sem 0x00000094
+#define ASIZ_task_vfork_sem 0x00000004
+#define AOFF_task_policy 0x00000098
X #define ASIZ_task_policy 0x00000004
-#define AOFF_task_rt_priority 0x00000094
+#define AOFF_task_rt_priority 0x0000009c
X #define ASIZ_task_rt_priority 0x00000004
-#define AOFF_task_it_real_value 0x00000098
+#define AOFF_task_it_real_value 0x000000a0
X #define ASIZ_task_it_real_value 0x00000004
-#define AOFF_task_it_prof_value 0x0000009c
+#define AOFF_task_it_prof_value 0x000000a4
X #define ASIZ_task_it_prof_value 0x00000004
-#define AOFF_task_it_virt_value 0x000000a0
+#define AOFF_task_it_virt_value 0x000000a8
X #define ASIZ_task_it_virt_value 0x00000004
-#define AOFF_task_it_real_incr 0x000000a4
+#define AOFF_task_it_real_incr 0x000000ac
X #define ASIZ_task_it_real_incr 0x00000004
-#define AOFF_task_it_prof_incr 0x000000a8
+#define AOFF_task_it_prof_incr 0x000000b0
X #define ASIZ_task_it_prof_incr 0x00000004
-#define AOFF_task_it_virt_incr 0x000000ac
+#define AOFF_task_it_virt_incr 0x000000b4
X #define ASIZ_task_it_virt_incr 0x00000004
-#define AOFF_task_real_timer 0x000000b0
+#define AOFF_task_real_timer 0x000000b8
X #define ASIZ_task_real_timer 0x00000014
-#define AOFF_task_times 0x000000c4
+#define AOFF_task_times 0x000000cc
X #define ASIZ_task_times 0x00000010
-#define AOFF_task_start_time 0x000000d4
+#define AOFF_task_start_time 0x000000dc
X #define ASIZ_task_start_time 0x00000004
-#define AOFF_task_per_cpu_utime 0x000000d8
+#define AOFF_task_per_cpu_utime 0x000000e0
X #define ASIZ_task_per_cpu_utime 0x00000080
-#define AOFF_task_min_flt 0x000001d8
+#define AOFF_task_min_flt 0x000001e0
X #define ASIZ_task_min_flt 0x00000004
-#define AOFF_task_maj_flt 0x000001dc
+#define AOFF_task_maj_flt 0x000001e4
X #define ASIZ_task_maj_flt 0x00000004
-#define AOFF_task_nswap 0x000001e0
+#define AOFF_task_nswap 0x000001e8
X #define ASIZ_task_nswap 0x00000004
-#define AOFF_task_cmin_flt 0x000001e4
+#define AOFF_task_cmin_flt 0x000001ec
X #define ASIZ_task_cmin_flt 0x00000004
-#define AOFF_task_cmaj_flt 0x000001e8
+#define AOFF_task_cmaj_flt 0x000001f0
X #define ASIZ_task_cmaj_flt 0x00000004
-#define AOFF_task_cnswap 0x000001ec
+#define AOFF_task_cnswap 0x000001f4
X #define ASIZ_task_cnswap 0x00000004
-#define AOFF_task_swap_address 0x000001f4
-#define ASIZ_task_swap_address 0x00000004
-#define AOFF_task_old_maj_flt 0x000001f8
-#define ASIZ_task_old_maj_flt 0x00000004
-#define AOFF_task_dec_flt 0x000001fc
-#define ASIZ_task_dec_flt 0x00000004
-#define AOFF_task_swap_cnt 0x00000200
-#define ASIZ_task_swap_cnt 0x00000004
-#define AOFF_task_uid 0x00000204
+#define AOFF_task_uid 0x000001fa
X #define ASIZ_task_uid 0x00000002
-#define AOFF_task_euid 0x00000206
+#define AOFF_task_euid 0x000001fc
X #define ASIZ_task_euid 0x00000002
-#define AOFF_task_suid 0x00000208
+#define AOFF_task_suid 0x000001fe
X #define ASIZ_task_suid 0x00000002
-#define AOFF_task_fsuid 0x0000020a
+#define AOFF_task_fsuid 0x00000200
X #define ASIZ_task_fsuid 0x00000002
-#define AOFF_task_gid 0x0000020c
+#define AOFF_task_gid 0x00000202
X #define ASIZ_task_gid 0x00000002
-#define AOFF_task_egid 0x0000020e
+#define AOFF_task_egid 0x00000204
X #define ASIZ_task_egid 0x00000002
-#define AOFF_task_sgid 0x00000210
+#define AOFF_task_sgid 0x00000206
X #define ASIZ_task_sgid 0x00000002
-#define AOFF_task_fsgid 0x00000212
+#define AOFF_task_fsgid 0x00000208
X #define ASIZ_task_fsgid 0x00000002
-#define AOFF_task_ngroups 0x00000214
+#define AOFF_task_ngroups 0x0000020c
X #define ASIZ_task_ngroups 0x00000004
-#define AOFF_task_groups 0x00000218
+#define AOFF_task_groups 0x00000210
X #define ASIZ_task_groups 0x00000040
-#define AOFF_task_cap_effective 0x00000258
+#define AOFF_task_cap_effective 0x00000250
X #define ASIZ_task_cap_effective 0x00000004
-#define AOFF_task_cap_inheritable 0x0000025c
+#define AOFF_task_cap_inheritable 0x00000254
X #define ASIZ_task_cap_inheritable 0x00000004
-#define AOFF_task_cap_permitted 0x00000260
+#define AOFF_task_cap_permitted 0x00000258
X #define ASIZ_task_cap_permitted 0x00000004
-#define AOFF_task_user 0x00000264
+#define AOFF_task_user 0x0000025c
X #define ASIZ_task_user 0x00000004
-#define AOFF_task_rlim 0x00000268
+#define AOFF_task_rlim 0x00000260
X #define ASIZ_task_rlim 0x00000050
-#define AOFF_task_used_math 0x000002b8
+#define AOFF_task_used_math 0x000002b0
X #define ASIZ_task_used_math 0x00000002
-#define AOFF_task_comm 0x000002ba
+#define AOFF_task_comm 0x000002b2
X #define ASIZ_task_comm 0x00000010
-#define AOFF_task_link_count 0x000002cc
+#define AOFF_task_link_count 0x000002c4
X #define ASIZ_task_link_count 0x00000004
-#define AOFF_task_tty 0x000002d0
+#define AOFF_task_tty 0x000002c8
X #define ASIZ_task_tty 0x00000004
-#define AOFF_task_semundo 0x000002d4
+#define AOFF_task_semundo 0x000002cc
X #define ASIZ_task_semundo 0x00000004
-#define AOFF_task_semsleeping 0x000002d8
+#define AOFF_task_semsleeping 0x000002d0
X #define ASIZ_task_semsleeping 0x00000004
-#define AOFF_task_tss 0x000002e0
+#define AOFF_task_tss 0x000002d8
X #define ASIZ_task_tss 0x00000388
-#define AOFF_task_fs 0x00000668
+#define AOFF_task_fs 0x00000660
X #define ASIZ_task_fs 0x00000004
-#define AOFF_task_files 0x0000066c
+#define AOFF_task_files 0x00000664
X #define ASIZ_task_files 0x00000004
-#define AOFF_task_mm 0x00000670
+#define AOFF_task_mm 0x00000668
X #define ASIZ_task_mm 0x00000004
-#define AOFF_task_sigmask_lock 0x00000674
+#define AOFF_task_sigmask_lock 0x0000066c
X #define ASIZ_task_sigmask_lock 0x00000008
-#define AOFF_task_sig 0x0000067c
+#define AOFF_task_sig 0x00000674
X #define ASIZ_task_sig 0x00000004
-#define AOFF_task_signal 0x00000680
+#define AOFF_task_signal 0x00000678
X #define ASIZ_task_signal 0x00000008
-#define AOFF_task_blocked 0x00000688
+#define AOFF_task_blocked 0x00000680
X #define ASIZ_task_blocked 0x00000008
-#define AOFF_task_sigqueue 0x00000690
+#define AOFF_task_sigqueue 0x00000688
X #define ASIZ_task_sigqueue 0x00000004
-#define AOFF_task_sigqueue_tail 0x00000694
+#define AOFF_task_sigqueue_tail 0x0000068c
X #define ASIZ_task_sigqueue_tail 0x00000004
-#define AOFF_task_sas_ss_sp 0x00000698
+#define AOFF_task_sas_ss_sp 0x00000690
X #define ASIZ_task_sas_ss_sp 0x00000004
-#define AOFF_task_sas_ss_size 0x0000069c
+#define AOFF_task_sas_ss_size 0x00000694
X #define ASIZ_task_sas_ss_size 0x00000004
X #define AOFF_mm_mmap 0x00000000
X #define ASIZ_mm_mmap 0x00000004
-#define AOFF_mm_mmap_cache 0x00000004
+#define AOFF_mm_mmap_avl 0x00000004
+#define ASIZ_mm_mmap_avl 0x00000004
+#define AOFF_mm_mmap_cache 0x00000008
X #define ASIZ_mm_mmap_cache 0x00000004
-#define AOFF_mm_pgd 0x00000008
+#define AOFF_mm_pgd 0x0000000c
X #define ASIZ_mm_pgd 0x00000004
-#define AOFF_mm_count 0x0000000c
+#define AOFF_mm_count 0x00000010
X #define ASIZ_mm_count 0x00000004
-#define AOFF_mm_map_count 0x00000010
+#define AOFF_mm_map_count 0x00000014
X #define ASIZ_mm_map_count 0x00000004
-#define AOFF_mm_mmap_sem 0x00000014
+#define AOFF_mm_mmap_sem 0x00000018
X #define ASIZ_mm_mmap_sem 0x0000000c
-#define AOFF_mm_context 0x00000020
+#define AOFF_mm_context 0x00000024
X #define ASIZ_mm_context 0x00000004
-#define AOFF_mm_start_code 0x00000024
+#define AOFF_mm_start_code 0x00000028
X #define ASIZ_mm_start_code 0x00000004
-#define AOFF_mm_end_code 0x00000028
+#define AOFF_mm_end_code 0x0000002c
X #define ASIZ_mm_end_code 0x00000004
-#define AOFF_mm_start_data 0x0000002c
+#define AOFF_mm_start_data 0x00000030
X #define ASIZ_mm_start_data 0x00000004
-#define AOFF_mm_end_data 0x00000030
+#define AOFF_mm_end_data 0x00000034
X #define ASIZ_mm_end_data 0x00000004
-#define AOFF_mm_start_brk 0x00000034
+#define AOFF_mm_start_brk 0x00000038
X #define ASIZ_mm_start_brk 0x00000004
-#define AOFF_mm_brk 0x00000038
+#define AOFF_mm_brk 0x0000003c
X #define ASIZ_mm_brk 0x00000004
-#define AOFF_mm_start_stack 0x0000003c
+#define AOFF_mm_start_stack 0x00000040
X #define ASIZ_mm_start_stack 0x00000004
-#define AOFF_mm_arg_start 0x00000040
+#define AOFF_mm_arg_start 0x00000044
X #define ASIZ_mm_arg_start 0x00000004
-#define AOFF_mm_arg_end 0x00000044
+#define AOFF_mm_arg_end 0x00000048
X #define ASIZ_mm_arg_end 0x00000004
-#define AOFF_mm_env_start 0x00000048
+#define AOFF_mm_env_start 0x0000004c
X #define ASIZ_mm_env_start 0x00000004
-#define AOFF_mm_env_end 0x0000004c
+#define AOFF_mm_env_end 0x00000050
X #define ASIZ_mm_env_end 0x00000004
-#define AOFF_mm_rss 0x00000050
+#define AOFF_mm_rss 0x00000054
X #define ASIZ_mm_rss 0x00000004
-#define AOFF_mm_total_vm 0x00000054
+#define AOFF_mm_total_vm 0x00000058
X #define ASIZ_mm_total_vm 0x00000004
-#define AOFF_mm_locked_vm 0x00000058
+#define AOFF_mm_locked_vm 0x0000005c
X #define ASIZ_mm_locked_vm 0x00000004
-#define AOFF_mm_def_flags 0x0000005c
+#define AOFF_mm_def_flags 0x00000060
X #define ASIZ_mm_def_flags 0x00000004
-#define AOFF_mm_cpu_vm_mask 0x00000060
+#define AOFF_mm_cpu_vm_mask 0x00000064
X #define ASIZ_mm_cpu_vm_mask 0x00000004
-#define AOFF_mm_segments 0x00000064
+#define AOFF_mm_swap_cnt 0x00000068
+#define ASIZ_mm_swap_cnt 0x00000004
+#define AOFF_mm_swap_address 0x0000006c
+#define ASIZ_mm_swap_address 0x00000004
+#define AOFF_mm_segments 0x00000070
X #define ASIZ_mm_segments 0x00000004
X #define AOFF_thread_uwinmask 0x00000000
X #define ASIZ_thread_uwinmask 0x00000004
@@ -548,6 +554,6 @@
X #define AOFF_thread_new_signal 0x00000380
X #define ASIZ_thread_new_signal 0x00000004
X
-#endif /* __SMP__ */
+#endif /* CONFIG_SMP */
X
X #endif /* __ASM_OFFSETS_H__ */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/atomic.h linux/include/asm-sparc/atomic.h
--- v2.2.3/linux/include/asm-sparc/atomic.h Wed Apr 23 19:01:28 1997
+++ linux/include/asm-sparc/atomic.h Wed Mar 10 16:53:37 1999
@@ -9,16 +9,22 @@
X #ifdef __SMP__
X /* This is a temporary measure. -DaveM */
X typedef struct { volatile int counter; } atomic_t;
+#define ATOMIC_INIT(i) { (i << 8) }
X #else
X typedef struct { int counter; } atomic_t;
+#define ATOMIC_INIT(i) { (i) }
X #endif
X
-#define ATOMIC_INIT(i) { (i << 8) }
-
X #ifdef __KERNEL__
X #include <asm/system.h>
X #include <asm/psr.h>
X
+#ifndef __SMP__
+
+#define atomic_read(v) ((v)->counter)
+#define atomic_set(v, i) (((v)->counter) = i)
+
+#else
X /* We do the bulk of the actual work out of line in two common
X * routines in assembler, see arch/sparc/lib/atomic.S for the
X * "fun" details.
@@ -43,6 +49,7 @@
X return val;
X }
X #define atomic_set(v, i) (((v)->counter) = ((i) << 8))
+#endif
X
X /* Make sure gcc doesn't try to be clever and move things around
X * on us. We need to use _exactly_ the address the user gave us,
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/cache.h linux/include/asm-sparc/cache.h
--- v2.2.3/linux/include/asm-sparc/cache.h Thu May 15 16:48:04 1997
+++ linux/include/asm-sparc/cache.h Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: cache.h,v 1.7 1997/05/06 09:31:46 davem Exp $
+/* $Id: cache.h,v 1.8 1999/03/11 00:14:45 davem Exp $
X * cache.h: Cache specific code for the Sparc. These include flushing
X * and direct tag/data line access.
X *
@@ -12,6 +12,8 @@
X
X #define L1_CACHE_BYTES 32
X #define L1_CACHE_ALIGN(x) ((((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)))
+
+#define SMP_CACHE_BYTES 32
X
X /* Direct access to the instruction cache is provided through and
X * alternate address space. The IDC bit must be off in the ICCR on
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/checksum.h linux/include/asm-sparc/checksum.h
--- v2.2.3/linux/include/asm-sparc/checksum.h Sat May 2 14:19:54 1998
+++ linux/include/asm-sparc/checksum.h Sun Mar 21 07:23:38 1999
@@ -1,4 +1,4 @@
-/* $Id: checksum.h,v 1.28 1998/04/17 02:37:25 davem Exp $ */
+/* $Id: checksum.h,v 1.29 1999/03/21 05:22:07 davem Exp $ */
X #ifndef __SPARC_CHECKSUM_H
X #define __SPARC_CHECKSUM_H
X
@@ -117,7 +117,10 @@
X return ret;
X }
X }
-
+
+#define HAVE_CSUM_COPY_USER
+#define csum_and_copy_to_user csum_partial_copy_to_user
+
X /* ihl is always 5 or greater, almost always is 5, and iph is word aligned
X * the majority of the time.
X */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/dma.h linux/include/asm-sparc/dma.h
--- v2.2.3/linux/include/asm-sparc/dma.h Sun Nov 8 14:03:08 1998
+++ linux/include/asm-sparc/dma.h Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: dma.h,v 1.28 1998/10/26 20:03:09 davem Exp $
+/* $Id: dma.h,v 1.29 1998/11/29 15:49:44 davem Exp $
X * include/asm-sparc/dma.h
X *
X * Copyright 1995 (C) David S. Miller (da...@caip.rutgers.edu)
@@ -127,6 +127,7 @@
X #define DMA_DSBL_RD_DRN 0x00001000 /* No EC drain on slave reads */
X #define DMA_BCNT_ENAB 0x00002000 /* If on, use the byte counter */
X #define DMA_TERM_CNTR 0x00004000 /* Terminal counter */
+#define DMA_SCSI_SBUS64 0x00008000 /* HME: Enable 64-bit SBUS mode. */
X #define DMA_CSR_DISAB 0x00010000 /* No FIFO drains during csr */
X #define DMA_SCSI_DISAB 0x00020000 /* No FIFO drains during reg */
X #define DMA_DSBL_WR_INV 0x00020000 /* No EC inval. on slave writes */
@@ -147,6 +148,7 @@
X #define DMA_PARITY_OFF 0x02000000 /* HME: disable parity checking */
X #define DMA_LOADED_ADDR 0x04000000 /* Address has been loaded */
X #define DMA_LOADED_NADDR 0x08000000 /* Next address has been loaded */
+#define DMA_RESET_FAS366 0x08000000 /* HME: Assert RESET to FAS366 */
X
X /* Values describing the burst-size property from the PROM */
X #define DMA_BURST1 0x01
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/ethtool.h linux/include/asm-sparc/ethtool.h
--- v2.2.3/linux/include/asm-sparc/ethtool.h Wed Dec 31 16:00:00 1969
+++ linux/include/asm-sparc/ethtool.h Wed Mar 10 16:53:37 1999
@@ -0,0 +1,79 @@
+/* $Id: ethtool.h,v 1.1 1998/12/19 15:09:38 davem Exp $
+ * ethtool.h: Defines for SparcLinux ethtool.
+ *
+ * Copyright (C) 1998 David S. Miller (da...@dm.cobaltmicro.com)
+ */
+
+#ifndef _SPARC_ETHTOOL_H
+#define _SPARC_ETHTOOL_H
+#endif /* _SPARC_ETHTOOL_H */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/floppy.h linux/include/asm-sparc/floppy.h
--- v2.2.3/linux/include/asm-sparc/floppy.h Mon Oct 5 13:13:43 1998
+++ linux/include/asm-sparc/floppy.h Sun Mar 21 07:23:38 1999
@@ -99,6 +99,7 @@
X /* Routines unique to each controller type on a Sun. */
X static unsigned char sun_82072_fd_inb(int port)
X {
+ udelay(5);
X switch(port & 7) {
X default:
X printk("floppy: Asked to read unknown port %d\n", port);
@@ -115,6 +116,7 @@
X
X static void sun_82072_fd_outb(unsigned char value, int port)
X {
+ udelay(5);
X switch(port & 7) {
X default:
X printk("floppy: Asked to write to unknown port %d\n", port);
@@ -150,6 +152,7 @@
X
X static unsigned char sun_82077_fd_inb(int port)
X {
+ udelay(5);
X switch(port & 7) {
X default:
X printk("floppy: Asked to read unknown port %d\n", port);
@@ -167,6 +170,7 @@
X
X static void sun_82077_fd_outb(unsigned char value, int port)
X {
+ udelay(5);
X switch(port & 7) {
X default:
X printk("floppy: Asked to write to unknown port %d\n", port);
@@ -337,6 +341,7 @@
X }
X
X /* Success... */
+ allowed_drive_mask = 0x01;
X return (int) sun_fdc;
X
X no_sun_fdc:
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/init.h linux/include/asm-sparc/init.h
--- v2.2.3/linux/include/asm-sparc/init.h Wed Apr 23 19:01:28 1997
+++ linux/include/asm-sparc/init.h Wed Mar 10 16:53:37 1999
@@ -7,6 +7,8 @@
X #define __initfunc(__arginit) \
X __arginit __init; \
X __arginit
+#define __cacheline_aligned __attribute__ \
+ ((__section__ (".data.cacheline_aligned")))
X /* For assembly routines */
X #define __INIT .section ".text.init",#alloc,#execinstr
X #define __FINIT .previous
@@ -15,6 +17,7 @@
X #define __init
X #define __initdata
X #define __initfunc(__arginit) __arginit
+#define __cacheline_aligned
X /* For assembly routines */
X #define __INIT
X #define __FINIT
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/io-unit.h linux/include/asm-sparc/io-unit.h
--- v2.2.3/linux/include/asm-sparc/io-unit.h Thu Nov 19 09:56:29 1998
+++ linux/include/asm-sparc/io-unit.h Wed Mar 10 16:53:37 1999
@@ -27,14 +27,18 @@
X #define IOUNIT_DVMA_SIZE 0x00100000 /* 1M */
X
X /* The format of an iopte in the external page tables */
-#define IOUPTE_PAGE 0xffffff00 /* Physical page number (PA[35:12]) */
-#define IOUPTE_CACHE 0x00000080 /* Cached (in Viking/MXCC) */
-#define IOUPTE_STREAM 0x00000040
-#define IOUPTE_INTRA 0x00000008 /* Not regular memory - probably direct sbus<->sbus dma
- FIXME: Play with this and find out how we can make use of this */
-#define IOUPTE_WRITE 0x00000004 /* Writeable */
-#define IOUPTE_VALID 0x00000002 /* IOPTE is valid */
-#define IOUPTE_PARITY 0x00000001
+#define IOUPTE_PAGE 0xffffff00 /* Physical page number (PA[35:12]) */
+#define IOUPTE_CACHE 0x00000080 /* Cached (in Viking/MXCC) */
+/* XXX Jakub, find out how to program SBUS streaming cache on XDBUS/sun4d.
+ * XXX Actually, all you should need to do is find out where the registers
+ * XXX are and copy over the sparc64 implementation I wrote. There may be
+ * XXX some horrible hwbugs though, so be careful. -DaveM
+ */
+#define IOUPTE_STREAM 0x00000040 /* Translation can use streaming cache */
+#define IOUPTE_INTRA 0x00000008 /* SBUS direct slot->slot transfer */
+#define IOUPTE_WRITE 0x00000004 /* Writeable */
+#define IOUPTE_VALID 0x00000002 /* IOPTE is valid */
+#define IOUPTE_PARITY 0x00000001 /* Parity is checked during DVMA */
X
X struct iounit_struct {
X unsigned int bmap[(IOUNIT_DMA_SIZE >> (PAGE_SHIFT + 3)) / sizeof(unsigned int)];
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/mmu_context.h linux/include/asm-sparc/mmu_context.h
--- v2.2.3/linux/include/asm-sparc/mmu_context.h Thu May 7 22:51:54 1998
+++ linux/include/asm-sparc/mmu_context.h Sun Mar 21 07:23:38 1999
@@ -22,11 +22,9 @@
X
X #define destroy_context(mm) BTFIXUP_CALL(destroy_context)(mm)
X
-/*
- * After we have set current->mm to a new value, this activates
+/* After we have set current->mm to a new value, this activates
X * the context for the new mm so we see the new mappings.
- * XXX this presumably needs a sensible implementation - paulus.
X */
-#define activate_context(tsk) do { } while(0)
+#define activate_context(tsk) switch_to_context(tsk)
X
X #endif /* !(__SPARC_MMU_CONTEXT_H) */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/page.h linux/include/asm-sparc/page.h
--- v2.2.3/linux/include/asm-sparc/page.h Wed Jan 13 15:00:43 1999
+++ linux/include/asm-sparc/page.h Wed Mar 10 16:53:37 1999
@@ -19,6 +19,7 @@
X
X #ifdef __KERNEL__
X
+#include <linux/config.h>
X #include <asm/head.h> /* for KERNBASE */
X #include <asm/btfixup.h>
X
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/pgtable.h linux/include/asm-sparc/pgtable.h
--- v2.2.3/linux/include/asm-sparc/pgtable.h Thu Aug 6 14:06:34 1998
+++ linux/include/asm-sparc/pgtable.h Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: pgtable.h,v 1.77 1998/08/04 20:51:19 davem Exp $ */
+/* $Id: pgtable.h,v 1.78 1999/01/07 14:14:05 jj Exp $ */
X #ifndef _SPARC_PGTABLE_H
X #define _SPARC_PGTABLE_H
X
@@ -574,8 +574,10 @@
X
X #define module_map vmalloc
X #define module_unmap vfree
+extern unsigned long *sparc_valid_addr_bitmap;
X
X /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
X #define PageSkip(page) (test_bit(PG_skip, &(page)->flags))
+#define kern_addr_valid(addr) (test_bit(__pa((unsigned long)(addr))>>20, sparc_valid_addr_bitmap))
X
X #endif /* !(_SPARC_PGTABLE_H) */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/posix_types.h linux/include/asm-sparc/posix_types.h
--- v2.2.3/linux/include/asm-sparc/posix_types.h Mon Dec 8 23:58:04 1997
+++ linux/include/asm-sparc/posix_types.h Wed Mar 10 16:53:37 1999
@@ -37,9 +37,15 @@
X #endif
X
X typedef struct {
+#if defined(__KERNEL__) || defined(__USE_ALL)
X int val[2];
+#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */
+ int __val[2];
+#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
X } __kernel_fsid_t;
X
+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
+
X #undef __FD_SET
X static __inline__ void __FD_SET(unsigned long fd, __kernel_fd_set *fdsetp)
X {
@@ -108,5 +114,7 @@
X tmp++;
X }
X }
+
+#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
X
X #endif /* !(__ARCH_SPARC_POSIX_TYPES_H) */
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/processor.h linux/include/asm-sparc/processor.h
--- v2.2.3/linux/include/asm-sparc/processor.h Tue Jan 19 11:32:53 1999
+++ linux/include/asm-sparc/processor.h Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: processor.h,v 1.67 1998/07/31 20:03:23 zaitcev Exp $
+/* $Id: processor.h,v 1.69 1999/01/19 07:57:44 davem Exp $
X * include/asm-sparc/processor.h
X *
X * Copyright (C) 1994 David S. Miller (da...@caip.rutgers.edu)
@@ -88,7 +88,7 @@
X #define SPARC_FLAG_UNALIGNED 0x2 /* is allowed to do unaligned accesses */
X
X #define INIT_MMAP { &init_mm, (0), (0), \
- __pgprot(0x0) , VM_READ | VM_WRITE | VM_EXEC, NULL, &init_mm.mmap }
+ NULL, __pgprot(0x0) , VM_READ | VM_WRITE | VM_EXEC, 1, NULL, NULL }
X
X #define INIT_TSS { \
X /* uwinmask, kregs, sig_address, sig_desc, ksp, kpc, kpsr, kwim */ \
@@ -145,6 +145,8 @@
X
X /* Free all resources held by a thread. */
X #define release_thread(tsk) do { } while(0)
+extern pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
X
X #define copy_segments(nr, tsk, mm) do { } while (0)
X #define release_segments(mm) do { } while (0)
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/resource.h linux/include/asm-sparc/resource.h
--- v2.2.3/linux/include/asm-sparc/resource.h Fri Dec 13 01:37:40 1996
+++ linux/include/asm-sparc/resource.h Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: resource.h,v 1.6 1996/11/25 03:30:25 ecd Exp $
+/* $Id: resource.h,v 1.7 1998/11/19 20:01:44 davem Exp $
X * resource.h: Resource definitions.
X *
X * Copyright (C) 1995 David S. Miller (da...@caip.rutgers.edu)
@@ -29,7 +29,7 @@
X #define INIT_RLIMITS \
X { \
X {LONG_MAX, LONG_MAX}, {LONG_MAX, LONG_MAX}, \
- {LONG_MAX, LONG_MAX}, {_STK_LIM, _STK_LIM}, \
+ {LONG_MAX, LONG_MAX}, {_STK_LIM, LONG_MAX}, \
X { 0, LONG_MAX}, {LONG_MAX, LONG_MAX}, \
X {NR_OPEN, NR_OPEN}, {MAX_TASKS_PER_USER, MAX_TASKS_PER_USER}, \
X {LONG_MAX, LONG_MAX}, {LONG_MAX, LONG_MAX} \
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/sbus.h linux/include/asm-sparc/sbus.h
--- v2.2.3/linux/include/asm-sparc/sbus.h Thu Aug 6 14:06:34 1998
+++ linux/include/asm-sparc/sbus.h Wed Mar 10 16:53:37 1999
@@ -1,4 +1,4 @@
-/* $Id: sbus.h,v 1.15 1998/05/22 14:33:36 jj Exp $
+/* $Id: sbus.h,v 1.16 1998/12/16 04:33:52 davem Exp $
X * sbus.h: Defines for the Sun SBus.
X *
X * Copyright (C) 1995 David S. Miller (da...@caip.rutgers.edu)
@@ -94,6 +94,13 @@
X
X #define for_all_sbusdev(device, bus) \
X for((bus) = SBus_chain, (device) = (bus)->devices; (bus); (device)=((device)->next ? (device)->next : ((bus) = (bus)->next, (bus) ? (bus)->devices : 0)))
+
+/* If you did not get the buffer from mmu_get_*() or sparc_alloc_dvma()
+ * then you must use this to get the 32-bit SBUS dvma address.
+ * And in this case it is your responsibility to make sure the buffer
+ * is GFP_DMA, ie. that it is not greater than MAX_DMA_ADDRESS.
+ */
+#define sbus_dvma_addr(__addr) ((__u32)(__addr))
X
X /* Apply promlib probed SBUS ranges to registers. */
X extern void prom_apply_sbus_ranges(struct linux_sbus *sbus,
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc/semaphore-helper.h linux/include/asm-sparc/semaphore-helper.h
--- v2.2.3/linux/include/asm-sparc/semaphore-helper.h Wed Dec 31 16:00:00 1969
+++ linux/include/asm-sparc/semaphore-helper.h Wed Mar 10 16:53:37 1999
@@ -0,0 +1,167 @@
+#ifndef _SPARC_SEMAPHORE_HELPER_H
+#define _SPARC_SEMAPHORE_HELPER_H
+
+/*
+ * (barely) SMP- and interrupt-safe semaphore helper functions, sparc version.
+ *
+ * (C) Copyright 1999 David S. Miller (da...@redhat.com)
+ * (C) Copyright 1999 Jakub Jelinek (j...@ultra.linux.cz)
+ */
+#define wake_one_more(sem) atomic_inc(&(sem)->waking)
+static __inline__ int waking_non_zero(struct semaphore *sem)
+{
+ int ret;
+
+#ifdef __SMP__
+ int tmp;
+
+ __asm__ __volatile__("
+ rd %%psr, %%g1
+ or %%g1, %3, %0
+ wr %0, 0x0, %%psr
+ nop; nop; nop;
+1: ldstub [%2 + 3], %0
+ tst %0
+ bne 1b
+ ld [%2], %0
+ andn %0, 0xff, %1
+ subcc %0, 0x1ff, %0
+ bl,a 1f
+ mov 0, %0
+ mov %0, %1
+ mov 1, %0
+1: st %1, [%2]
+ wr %%g1, 0x0, %%psr
+ nop; nop; nop\n"
+ : "=&r" (ret), "=&r" (tmp)
+ : "r" (&sem->waking), "i" (PSR_PIL)
+ : "g1", "memory", "cc");
+#else
+ __asm__ __volatile__("
+ rd %%psr, %%g1
+ or %%g1, %2, %0
+ wr %0, 0x0, %%psr
+ nop; nop; nop;
+ ld [%1], %0
+ subcc %0, 1, %0
+ bl,a 1f
+ mov 0, %0
+ st %0, [%1]
+ mov 1, %0
+1: wr %%g1, 0x0, %%psr
+ nop; nop; nop\n"
+ : "=&r" (ret)
+ : "r" (&sem->waking), "i" (PSR_PIL)
+ : "g1", "memory", "cc");
+#endif
+ return ret;
+}
+
+static __inline__ int waking_non_zero_interruptible(struct semaphore *sem,
+ struct task_struct *tsk)
+{
+ int ret;
+
+#ifdef __SMP__
+ int tmp;
+
+ __asm__ __volatile__("
+ rd %%psr, %%g1
+ or %%g1, %3, %0
+ wr %0, 0x0, %%psr
+ nop; nop; nop;
+1: ldstub [%2 + 3], %0
+ tst %0
+ bne 1b
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 43'
echo 'File patch-2.2.4 is continued in part 44'
echo 44 > _shar_seq_.tmp
#!/bin/sh
# this is part 49 of a 51 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.4 continued
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 49; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.4'
else
echo 'x - continuing with patch-2.2.4'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.4' &&
X * Fred N. van Kempen, <wal...@uWalt.NL.Mugnet.ORG>
@@ -345,6 +345,7 @@
X {
X unsigned char *ptr;
X int length=(th->doff*4)-sizeof(struct tcphdr);
+ int saw_mss = 0;
X
X ptr = (unsigned char *)(th + 1);
X tp->saw_tstamp = 0;
@@ -373,6 +374,7 @@
X in_mss = 536;
X if (tp->mss_clamp > in_mss)
X tp->mss_clamp = in_mss;
+ saw_mss = 1;
X }
X break;
X case TCPOPT_WINDOW:
@@ -426,6 +428,8 @@
X length-=opsize;
X };
X }
+ if(th->syn && saw_mss == 0)
+ tp->mss_clamp = 536;
X }
X
X /* Fast parse options. This hopes to only see timestamps.
@@ -662,7 +666,7 @@
X tp->probes_out = 0;
X
X /* Was it a usable window open? */
-
+
X /* should always be non-null */
X if (tp->send_head != NULL &&
X !before (ack + tp->snd_wnd, TCP_SKB_CB(tp->send_head)->end_seq)) {
@@ -949,7 +953,9 @@
X tcp_tw_deschedule(tw);
X tcp_timewait_kill(tw);
X sk = af_specific->get_sock(skb, th);
- if(sk == NULL || !ipsec_sk_policy(sk,skb))
+ if(sk == NULL ||
+ !ipsec_sk_policy(sk,skb) ||
+ atomic_read(&sk->sock_readers) != 0)
X return 0;
X skb_set_owner_r(skb, sk);
X af_specific = sk->tp_pinfo.af_tcp.af_specific;
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/tcp_ipv4.c linux/net/ipv4/tcp_ipv4.c
--- v2.2.3/linux/net/ipv4/tcp_ipv4.c Wed Mar 10 15:29:52 1999
+++ linux/net/ipv4/tcp_ipv4.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X *
X * Implementation of the Transmission Control Protocol(TCP).
X *
- * Version: $Id: tcp_ipv4.c,v 1.166 1999/02/23 08:12:41 davem Exp $
+ * Version: $Id: tcp_ipv4.c,v 1.170 1999/03/21 05:22:47 davem Exp $
X *
X * IPv4 specific functions
X *
@@ -657,7 +657,6 @@
X
X static int tcp_v4_sendmsg(struct sock *sk, struct msghdr *msg, int len)
X {
- struct tcp_opt *tp;
X int retval = -EINVAL;
X
X /* Do sanity checking for sendmsg/sendto/send. */
@@ -679,15 +678,7 @@
X if (addr->sin_addr.s_addr != sk->daddr)
X goto out;
X }
-
- lock_sock(sk);
- retval = tcp_do_sendmsg(sk, msg->msg_iovlen, msg->msg_iov,
- msg->msg_flags);
- /* Push out partial tail frames if needed. */
- tp = &(sk->tp_pinfo.af_tcp);
- if(tp->send_head && tcp_snd_test(sk, tp->send_head))
- tcp_write_xmit(sk);
- release_sock(sk);
+ retval = tcp_do_sendmsg(sk, msg);
X
X out:
X return retval;
@@ -735,6 +726,9 @@
X {
X struct tcp_opt *tp = &sk->tp_pinfo.af_tcp;
X
+ if (atomic_read(&sk->sock_readers))
+ return;
+
X /* Don't interested in TCP_LISTEN and open_requests (SYN-ACKs
X * send out by Linux are always <576bytes so they should go through
X * unfragmented).
@@ -748,19 +742,18 @@
X * There is a small race when the user changes this flag in the
X * route, but I think that's acceptable.
X */
- if (sk->ip_pmtudisc != IP_PMTUDISC_DONT && sk->dst_cache) {
- if (tp->pmtu_cookie > sk->dst_cache->pmtu &&
- !atomic_read(&sk->sock_readers)) {
- tcp_sync_mss(sk, sk->dst_cache->pmtu);
-
- /* Resend the TCP packet because it's
- * clear that the old packet has been
- * dropped. This is the new "fast" path mtu
- * discovery.
- */
- tcp_simple_retransmit(sk);
- } /* else let the usual retransmit timer handle it */
- }
+ if (sk->dst_cache &&
+ sk->ip_pmtudisc != IP_PMTUDISC_DONT &&
+ tp->pmtu_cookie > sk->dst_cache->pmtu) {
+ tcp_sync_mss(sk, sk->dst_cache->pmtu);
+
+ /* Resend the TCP packet because it's
+ * clear that the old packet has been
+ * dropped. This is the new "fast" path mtu
+ * discovery.
+ */
+ tcp_simple_retransmit(sk);
+ } /* else let the usual retransmit timer handle it */
X }
X
X /*
@@ -787,6 +780,11 @@
X struct tcp_opt *tp;
X int type = skb->h.icmph->type;
X int code = skb->h.icmph->code;
+#if ICMP_MIN_LENGTH < 14
+ int no_flags = 0;
+#else
+#define no_flags 0
+#endif
X struct sock *sk;
X __u32 seq;
X int err;
@@ -795,6 +793,10 @@
X icmp_statistics.IcmpInErrors++;
X return;
X }
+#if ICMP_MIN_LENGTH < 14
+ if (len < (iph->ihl << 2) + 14)
+ no_flags = 1;
+#endif
X
X th = (struct tcphdr*)(dp+(iph->ihl<<2));
X
@@ -861,7 +863,7 @@
X * ACK should set the opening flag, but that is too
X * complicated right now.
X */
- if (!th->syn && !th->ack)
+ if (!no_flags && !th->syn && !th->ack)
X return;
X
X req = tcp_v4_search_req(tp, iph, th, &prev);
@@ -896,7 +898,7 @@
X break;
X case TCP_SYN_SENT:
X case TCP_SYN_RECV: /* Cannot happen */
- if (!th->syn)
+ if (!no_flags && !th->syn)
X return;
X tcp_statistics.TcpAttemptFails++;
X sk->err = err;
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/tcp_output.c linux/net/ipv4/tcp_output.c
--- v2.2.3/linux/net/ipv4/tcp_output.c Wed Mar 10 15:29:52 1999
+++ linux/net/ipv4/tcp_output.c Thu Mar 11 23:24:45 1999
@@ -5,7 +5,7 @@
X *
X * Implementation of the Transmission Control Protocol(TCP).
X *
- * Version: $Id: tcp_output.c,v 1.104 1999/03/07 13:26:04 davem Exp $
+ * Version: $Id: tcp_output.c,v 1.106 1999/03/12 03:43:51 davem Exp $
X *
X * Authors: Ross Biro, <bi...@leland.Stanford.Edu>
X * Fred N. van Kempen, <wal...@uWalt.NL.Mugnet.ORG>
@@ -233,8 +233,9 @@
X buff->csum = csum_partial_copy(skb->data + len, skb_put(buff, nsize),
X nsize, 0);
X
- TCP_SKB_CB(skb)->end_seq -= nsize;
- skb_trim(skb, skb->len - nsize);
+ /* This takes care of the FIN sequence number too. */
+ TCP_SKB_CB(skb)->end_seq = TCP_SKB_CB(buff)->seq;
+ skb_trim(skb, len);
X
X /* Rechecksum original buffer. */
X skb->csum = csum_partial(skb->data, skb->len, 0);
@@ -993,7 +994,7 @@
X tp->delack_timer.expires = timeout;
X add_timer(&tp->delack_timer);
X } else {
- if (timeout < tp->delack_timer.expires)
+ if (time_before(timeout, tp->delack_timer.expires))
X mod_timer(&tp->delack_timer, timeout);
X }
X }
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/tcp_timer.c linux/net/ipv4/tcp_timer.c
--- v2.2.3/linux/net/ipv4/tcp_timer.c Wed Jan 20 23:14:07 1999
+++ linux/net/ipv4/tcp_timer.c Tue Mar 23 13:20:34 1999
@@ -5,7 +5,7 @@
X *
X * Implementation of the Transmission Control Protocol(TCP).
X *
- * Version: $Id: tcp_timer.c,v 1.57 1999/01/20 07:20:21 davem Exp $
+ * Version: $Id: tcp_timer.c,v 1.59 1999/03/23 21:21:09 davem Exp $
X *
X * Authors: Ross Biro, <bi...@leland.Stanford.Edu>
X * Fred N. van Kempen, <wal...@uWalt.NL.Mugnet.ORG>
@@ -403,7 +403,7 @@
X for(i = chain_start; i < (chain_start + ((TCP_HTABLE_SIZE/2) >> 2)); i++) {
X struct sock *sk = tcp_established_hash[i];
X while(sk) {
- if(sk->keepopen) {
+ if(!atomic_read(&sk->sock_readers) && sk->keepopen) {
X count += tcp_keepopen_proc(sk);
X if(count == sysctl_tcp_max_ka_probes)
X goto out;
@@ -445,7 +445,6 @@
X tcp_reset_xmit_timer(sk, TIME_RETRANS, HZ/20);
X return;
X }
- lock_sock(sk);
X
X /* Clear delay ack timer. */
X tcp_clear_xmit_timer(sk, TIME_DACK);
@@ -510,8 +509,6 @@
X tcp_reset_xmit_timer(sk, TIME_RETRANS, tp->rto);
X
X tcp_write_timeout(sk);
-
- release_sock(sk);
X }
X
X /*
diff -u --recursive --new-file v2.2.3/linux/net/ipv4/udp.c linux/net/ipv4/udp.c
--- v2.2.3/linux/net/ipv4/udp.c Thu Nov 19 09:56:29 1998
+++ linux/net/ipv4/udp.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X *
X * The User Datagram Protocol (UDP).
X *
- * Version: $Id: udp.c,v 1.64 1998/11/08 11:17:07 davem Exp $
+ * Version: $Id: udp.c,v 1.65 1999/03/21 05:22:49 davem Exp $
X *
X * Authors: Ross Biro, <bi...@leland.Stanford.Edu>
X * Fred N. van Kempen, <wal...@uWalt.NL.Mugnet.ORG>
@@ -570,7 +570,6 @@
X struct udphdr uh;
X u32 saddr;
X u32 daddr;
- u32 other;
X struct iovec *iov;
X u32 wcheck;
X };
@@ -778,7 +777,6 @@
X ufh.daddr = ipc.addr = rt->rt_dst;
X ufh.uh.len = htons(ulen);
X ufh.uh.check = 0;
- ufh.other = (htons(ulen) << 16) + IPPROTO_UDP*256;
X ufh.iov = msg->msg_iov;
X ufh.wcheck = 0;
X
@@ -846,7 +844,7 @@
X return(0);
X }
X
-#if defined(CONFIG_FILTER) || !defined(HAVE_CSUM_COPY_USER)
+#ifndef HAVE_CSUM_COPY_USER
X #undef CONFIG_UDP_DELAY_CSUM
X #endif
X
@@ -890,11 +888,11 @@
X err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov,
X copied);
X #else
- if (sk->no_check || skb->ip_summed==CHECKSUM_UNNECESSARY) {
+ if (skb->ip_summed==CHECKSUM_UNNECESSARY) {
X err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov,
X copied);
X } else if (copied > msg->msg_iov[0].iov_len || (msg->msg_flags&MSG_TRUNC)) {
- if (csum_fold(csum_partial(skb->h.raw, ntohs(skb->h.uh->len), skb->csum)))
+ if ((unsigned short)csum_fold(csum_partial(skb->h.raw, skb->len, skb->csum)))
X goto csum_copy_err;
X err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov,
X copied);
@@ -907,7 +905,7 @@
X copied, csum, &err);
X if (err)
X goto out_free;
- if (csum_fold(csum))
+ if ((unsigned short)csum_fold(csum))
X goto csum_copy_err;
X }
X #endif
@@ -1030,6 +1028,19 @@
X * Charge it to the socket, dropping if the queue is full.
X */
X
+#if defined(CONFIG_FILTER) && defined(CONFIG_UDP_DELAY_CSUM)
+ if (sk->filter && skb->ip_summed != CHECKSUM_UNNECESSARY) {
+ if ((unsigned short)csum_fold(csum_partial(skb->h.raw, skb->len, skb->csum))) {
+ udp_statistics.UdpInErrors++;
+ ip_statistics.IpInDiscards++;
+ ip_statistics.IpInDelivers--;
+ kfree_skb(skb);
+ return -1;
+ }
+ skb->ip_summed = CHECKSUM_UNNECESSARY;
+ }
+#endif
+
X if (sock_queue_rcv_skb(sk,skb)<0) {
X udp_statistics.UdpInErrors++;
X ip_statistics.IpInDiscards++;
@@ -1179,7 +1190,7 @@
X if (sk == NULL) {
X #ifdef CONFIG_UDP_DELAY_CSUM
X if (skb->ip_summed != CHECKSUM_UNNECESSARY &&
- csum_fold(csum_partial((char*)uh, ulen, skb->csum)))
+ (unsigned short)csum_fold(csum_partial((char*)uh, ulen, skb->csum)))
X goto csum_error;
X #endif
X udp_statistics.UdpNoPorts++;
diff -u --recursive --new-file v2.2.3/linux/net/ipv6/addrconf.c linux/net/ipv6/addrconf.c
--- v2.2.3/linux/net/ipv6/addrconf.c Tue Jan 19 11:32:53 1999
+++ linux/net/ipv6/addrconf.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X * Authors:
X * Pedro Roque <ro...@di.fc.ul.pt>
X *
- * $Id: addrconf.c,v 1.46 1999/01/12 14:34:47 davem Exp $
+ * $Id: addrconf.c,v 1.47 1999/03/21 05:22:50 davem Exp $
X *
X * This program is free software; you can redistribute it and/or
X * modify it under the terms of the GNU General Public License
@@ -88,6 +88,34 @@
X 0, 0, addrconf_verify
X };
X
+/* These locks protect only against address deletions,
+ but not against address adds or status updates.
+ It is OK. The only race is when address is selected,
+ which becomes invalid immediately after selection.
+ It is harmless, because this address could be already invalid
+ several usecs ago.
+
+ Its important, that:
+
+ 1. The result of inet6_add_addr() is used only inside lock
+ or from bh_atomic context.
+
+ 2. inet6_get_lladdr() is used only from bh protected context.
+
+ 3. The result of ipv6_chk_addr() is not used outside of bh protected context.
+ */
+
+static __inline__ void addrconf_lock(void)
+{
+ atomic_inc(&addr_list_lock);
+ synchronize_bh();
+}
+
+static __inline__ void addrconf_unlock(void)
+{
+ atomic_dec(&addr_list_lock);
+}
+
X static int addrconf_ifdown(struct device *dev, int how);
X
X static void addrconf_dad_start(struct inet6_ifaddr *ifp);
@@ -188,7 +216,7 @@
X if (dev->mtu < IPV6_MIN_MTU)
X return NULL;
X
- ndev = kmalloc(sizeof(struct inet6_dev), gfp_any());
+ ndev = kmalloc(sizeof(struct inet6_dev), GFP_KERNEL);
X
X if (ndev) {
X memset(ndev, 0, sizeof(struct inet6_dev));
@@ -227,9 +255,9 @@
X idev = ipv6_add_dev(dev);
X if (idev == NULL)
X return NULL;
+ if (dev->flags&IFF_UP)
+ ipv6_mc_up(idev);
X }
- if (dev->flags&IFF_UP)
- ipv6_mc_up(idev);
X return idev;
X }
X
@@ -260,13 +288,13 @@
X return NULL;
X }
X
-struct inet6_ifaddr * ipv6_add_addr(struct inet6_dev *idev,
- struct in6_addr *addr, int scope)
+static struct inet6_ifaddr *
+ipv6_add_addr(struct inet6_dev *idev, struct in6_addr *addr, int scope)
X {
X struct inet6_ifaddr *ifa;
X int hash;
X
- ifa = kmalloc(sizeof(struct inet6_ifaddr), gfp_any());
+ ifa = kmalloc(sizeof(struct inet6_ifaddr), GFP_ATOMIC);
X
X if (ifa == NULL) {
X ADBG(("ipv6_add_addr: malloc failed\n"));
@@ -312,7 +340,9 @@
X
X for (; iter; iter = iter->lst_next) {
X if (iter == ifp) {
+ net_serialize_enter();
X *back = ifp->lst_next;
+ net_serialize_leave();
X ifp->lst_next = NULL;
X break;
X }
@@ -324,7 +354,9 @@
X
X for (; iter; iter = iter->if_next) {
X if (iter == ifp) {
+ net_serialize_enter();
X *back = ifp->if_next;
+ net_serialize_leave();
X ifp->if_next = NULL;
X break;
X }
@@ -343,24 +375,23 @@
X * ii) see if there is a specific route for the destination and use
X * an address of the attached interface
X * iii) don't use deprecated addresses
- *
- * at the moment I believe only iii) is missing.
X */
-struct inet6_ifaddr * ipv6_get_saddr(struct dst_entry *dst,
- struct in6_addr *daddr)
+int ipv6_get_saddr(struct dst_entry *dst,
+ struct in6_addr *daddr, struct in6_addr *saddr)
X {
X int scope;
X struct inet6_ifaddr *ifp = NULL;
X struct inet6_ifaddr *match = NULL;
X struct device *dev = NULL;
X struct rt6_info *rt;
+ int err;
X int i;
X
X rt = (struct rt6_info *) dst;
X if (rt)
X dev = rt->rt6i_dev;
X
- atomic_inc(&addr_list_lock);
+ addrconf_lock();
X
X scope = ipv6_addr_scope(daddr);
X if (rt && (rt->rt6i_flags & RTF_ALLONLINK)) {
@@ -388,10 +419,10 @@
X if (idev->dev == dev) {
X for (ifp=idev->addr_list; ifp; ifp=ifp->if_next) {
X if (ifp->scope == scope) {
- if (!(ifp->flags & ADDR_STATUS))
+ if (!(ifp->flags & (ADDR_STATUS|DAD_STATUS)))
X goto out;
X
- if (!(ifp->flags & ADDR_INVALID))
+ if (!(ifp->flags & (ADDR_INVALID|DAD_STATUS)))
X match = ifp;
X }
X }
@@ -410,10 +441,10 @@
X for (i=0; i < IN6_ADDR_HSIZE; i++) {
X for (ifp=inet6_addr_lst[i]; ifp; ifp=ifp->lst_next) {
X if (ifp->scope == scope) {
- if (!(ifp->flags & ADDR_STATUS))
+ if (!(ifp->flags & (ADDR_STATUS|DAD_STATUS)))
X goto out;
X
- if (!(ifp->flags & ADDR_INVALID))
+ if (!(ifp->flags & (ADDR_INVALID|DAD_STATUS)))
X match = ifp;
X }
X }
@@ -422,28 +453,30 @@
X out:
X if (ifp == NULL)
X ifp = match;
- atomic_dec(&addr_list_lock);
- return ifp;
+
+ err = -ENETUNREACH;
+ if (ifp) {
+ memcpy(saddr, &ifp->addr, sizeof(struct in6_addr));
+ err = 0;
+ }
+ addrconf_unlock();
+ return err;
X }
X
X struct inet6_ifaddr * ipv6_get_lladdr(struct device *dev)
X {
- struct inet6_ifaddr *ifp;
+ struct inet6_ifaddr *ifp = NULL;
X struct inet6_dev *idev;
- int hash;
X
- hash = ipv6_devindex_hash(dev->ifindex);
-
- for (idev = inet6_dev_lst[hash]; idev; idev=idev->next) {
- if (idev->dev == dev) {
- for (ifp=idev->addr_list; ifp; ifp=ifp->if_next) {
- if (ifp->scope == IFA_LINK)
- return ifp;
- }
- break;
+ if ((idev = ipv6_get_idev(dev)) != NULL) {
+ addrconf_lock();
+ for (ifp=idev->addr_list; ifp; ifp=ifp->if_next) {
+ if (ifp->scope == IFA_LINK)
+ break;
X }
+ addrconf_unlock();
X }
- return NULL;
+ return ifp;
X }
X
X /*
@@ -461,7 +494,7 @@
X if (!nd)
X flags |= DAD_STATUS|ADDR_INVALID;
X
- atomic_inc(&addr_list_lock);
+ addrconf_lock();
X
X hash = ipv6_addr_hash(addr);
X for(ifp = inet6_addr_lst[hash]; ifp; ifp=ifp->lst_next) {
@@ -472,7 +505,7 @@
X }
X }
X
- atomic_dec(&addr_list_lock);
+ addrconf_unlock();
X return ifp;
X }
X
@@ -665,13 +698,6 @@
X }
X
X /*
- * If we where using an "all destinations on link" route
- * delete it
- */
-
- rt6_purge_dflt_routers(RTF_ALLONLINK);
-
- /*
X * Two things going on here:
X * 1) Add routes for on-link prefixes
X * 2) Configure prefixes with the auto flag set
@@ -845,14 +871,17 @@
X
X scope = ipv6_addr_scope(pfx);
X
- if ((ifp = ipv6_add_addr(idev, pfx, scope)) == NULL)
- return -ENOMEM;
-
- ifp->prefix_len = plen;
- ifp->flags |= ADDR_PERMANENT;
+ addrconf_lock();
+ if ((ifp = ipv6_add_addr(idev, pfx, scope)) != NULL) {
+ ifp->prefix_len = plen;
+ ifp->flags |= ADDR_PERMANENT;
+ addrconf_dad_start(ifp);
+ addrconf_unlock();
+ return 0;
+ }
+ addrconf_unlock();
X
- addrconf_dad_start(ifp);
- return 0;
+ return -ENOBUFS;
X }
X
X static int inet6_addr_del(int ifindex, struct in6_addr *pfx, int plen)
@@ -870,20 +899,22 @@
X
X scope = ipv6_addr_scope(pfx);
X
+ start_bh_atomic();
X for (ifp = idev->addr_list; ifp; ifp=ifp->if_next) {
X if (ifp->scope == scope && ifp->prefix_len == plen &&
X (!memcmp(pfx, &ifp->addr, sizeof(struct in6_addr)))) {
X ipv6_del_addr(ifp);
+ end_bh_atomic();
X
X /* If the last address is deleted administratively,
X disable IPv6 on this interface.
X */
-
X if (idev->addr_list == NULL)
X addrconf_ifdown(idev->dev, 1);
X return 0;
X }
X }
+ end_bh_atomic();
X return -EADDRNOTAVAIL;
X }
X
@@ -940,12 +971,14 @@
X }
X
X if (addr.s6_addr32[3]) {
+ addrconf_lock();
X ifp = ipv6_add_addr(idev, &addr, scope);
X if (ifp) {
X ifp->flags |= ADDR_PERMANENT;
X ifp->prefix_len = 128;
X ipv6_ifa_notify(RTM_NEWADDR, ifp);
X }
+ addrconf_unlock();
X return;
X }
X
@@ -967,17 +1000,17 @@
X flag |= IFA_HOST;
X }
X
+ addrconf_lock();
X ifp = ipv6_add_addr(idev, &addr, flag);
-
- if (ifp == NULL)
- continue;
-
- if (idev->dev->flags&IFF_POINTOPOINT)
- ifp->prefix_len = 10;
- else
- ifp->prefix_len = 96;
- ifp->flags |= ADDR_PERMANENT;
- ipv6_ifa_notify(RTM_NEWADDR, ifp);
+ if (ifp) {
+ if (idev->dev->flags&IFF_POINTOPOINT)
+ ifp->prefix_len = 10;
+ else
+ ifp->prefix_len = 96;
+ ifp->flags |= ADDR_PERMANENT;
+ ipv6_ifa_notify(RTM_NEWADDR, ifp);
+ }
+ addrconf_unlock();
X }
X }
X }
@@ -999,31 +1032,29 @@
X return;
X }
X
+ addrconf_lock();
X ifp = ipv6_add_addr(idev, &addr, IFA_HOST);
X
- if (ifp == NULL) {
- printk(KERN_DEBUG "init_loopback: add_addr failed\n");
- return;
+ if (ifp) {
+ ifp->flags |= ADDR_PERMANENT;
+ ifp->prefix_len = 128;
+ ipv6_ifa_notify(RTM_NEWADDR, ifp);
X }
-
- ifp->flags |= ADDR_PERMANENT;
- ifp->prefix_len = 128;
-
- ipv6_ifa_notify(RTM_NEWADDR, ifp);
+ addrconf_unlock();
X }
X
X static void addrconf_add_linklocal(struct inet6_dev *idev, struct in6_addr *addr)
X {
X struct inet6_ifaddr * ifp;
X
+ addrconf_lock();
X ifp = ipv6_add_addr(idev, addr, IFA_LINK);
- if (ifp == NULL)
- return;
-
- ifp->flags = ADDR_PERMANENT;
- ifp->prefix_len = 10;
-
- addrconf_dad_start(ifp);
+ if (ifp) {
+ ifp->flags = ADDR_PERMANENT;
+ ifp->prefix_len = 10;
+ addrconf_dad_start(ifp);
+ }
+ addrconf_unlock();
X }
X
X static void addrconf_dev_config(struct device *dev)
@@ -1375,8 +1406,12 @@
X struct inet6_ifaddr *ifp;
X int i;
X int len = 0;
+ off_t pos=0;
+ off_t begin=0;
+
+ addrconf_lock();
X
- for (i=0; i < IN6_ADDR_HSIZE; i++)
+ for (i=0; i < IN6_ADDR_HSIZE; i++) {
X for (ifp=inet6_addr_lst[i]; ifp; ifp=ifp->lst_next) {
X int j;
X
@@ -1393,14 +1428,25 @@
X ifp->scope,
X ifp->flags,
X ifp->idev->dev->name);
+ pos=begin+len;
+ if(pos<offset) {
+ len=0;
+ begin=pos;
+ }
+ if(pos>offset+length)
+ goto done;
X }
+ }
X
- *start = buffer + offset;
-
- len -= offset;
+done:
+ addrconf_unlock();
X
- if (len > length)
- len = length;
+ *start=buffer+(offset-begin);
+ len-=(offset-begin);
+ if(len>length)
+ len=length;
+ if(len<0)
+ len=0;
X return len;
X }
X
@@ -1422,6 +1468,12 @@
X struct inet6_ifaddr *ifp;
X unsigned long now = jiffies;
X int i;
+
+ if (atomic_read(&addr_list_lock)) {
+ addr_chk_timer.expires = jiffies + 1*HZ;
+ add_timer(&addr_chk_timer);
+ return;
+ }
X
X for (i=0; i < IN6_ADDR_HSIZE; i++) {
X for (ifp=inet6_addr_lst[i]; ifp;) {
diff -u --recursive --new-file v2.2.3/linux/net/ipv6/icmp.c linux/net/ipv6/icmp.c
--- v2.2.3/linux/net/ipv6/icmp.c Mon Oct 5 13:13:49 1998
+++ linux/net/ipv6/icmp.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X * Authors:
X * Pedro Roque <ro...@di.fc.ul.pt>
X *
- * $Id: icmp.c,v 1.20 1998/10/03 09:38:31 davem Exp $
+ * $Id: icmp.c,v 1.21 1999/03/21 05:22:51 davem Exp $
X *
X * Based on net/ipv4/icmp.c
X *
@@ -200,9 +200,11 @@
X * this lookup should be more aggressive (not longer than timeout).
X */
X dst = ip6_route_output(sk, fl);
- if (dst->error)
+ if (dst->error) {
X ipv6_statistics.Ip6OutNoRoutes++;
- else {
+ } else if (dst->dev && (dst->dev->flags&IFF_LOOPBACK)) {
+ res = 1;
+ } else {
X struct rt6_info *rt = (struct rt6_info *)dst;
X int tmo = sysctl_icmpv6_time;
X
diff -u --recursive --new-file v2.2.3/linux/net/ipv6/ip6_fib.c linux/net/ipv6/ip6_fib.c
--- v2.2.3/linux/net/ipv6/ip6_fib.c Sat Sep 5 16:46:42 1998
+++ linux/net/ipv6/ip6_fib.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X * Authors:
X * Pedro Roque <ro...@di.fc.ul.pt>
X *
- * $Id: ip6_fib.c,v 1.15 1998/08/26 12:04:55 davem Exp $
+ * $Id: ip6_fib.c,v 1.16 1999/03/21 05:22:52 davem Exp $
X *
X * This program is free software; you can redistribute it and/or
X * modify it under the terms of the GNU General Public License
@@ -103,8 +103,8 @@
X static __inline__ u32 fib6_new_sernum(void)
X {
X u32 n = ++rt_sernum;
- if (n == 0)
- n = ++rt_sernum;
+ if ((__s32)n <= 0)
+ rt_sernum = n = 1;
X return n;
X }
X
@@ -1157,7 +1157,6 @@
X return -1;
X }
X gc_args.more++;
- return 0;
X }
X
X /*
@@ -1171,7 +1170,6 @@
X return -1;
X }
X gc_args.more++;
- return 0;
X }
X
X return 0;
diff -u --recursive --new-file v2.2.3/linux/net/ipv6/ip6_output.c linux/net/ipv6/ip6_output.c
--- v2.2.3/linux/net/ipv6/ip6_output.c Mon Oct 5 13:13:49 1998
+++ linux/net/ipv6/ip6_output.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X * Authors:
X * Pedro Roque <ro...@di.fc.ul.pt>
X *
- * $Id: ip6_output.c,v 1.15 1998/10/03 09:38:34 davem Exp $
+ * $Id: ip6_output.c,v 1.16 1999/03/21 05:22:54 davem Exp $
X *
X * Based on linux/net/ipv4/ip_output.c
X *
@@ -77,11 +77,14 @@
X /* Alpha has disguisting memcpy. Help it. */
X u64 *aligned_hdr = (u64*)(skb->data - 16);
X u64 *aligned_hdr0 = hh->hh_data;
+ read_lock_irq(&hh->hh_lock);
X aligned_hdr[0] = aligned_hdr0[0];
X aligned_hdr[1] = aligned_hdr0[1];
X #else
+ read_lock_irq(&hh->hh_lock);
X memcpy(skb->data - 16, hh->hh_data, 16);
X #endif
+ read_unlock_irq(&hh->hh_lock);
X skb_push(skb, dev->hard_header_len);
X return hh->hh_output(skb);
X } else if (dst->neighbour)
@@ -164,7 +167,9 @@
X }
X
X printk(KERN_DEBUG "IPv6: sending pkt_too_big to self\n");
+ start_bh_atomic();
X icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, dst->pmtu, skb->dev);
+ end_bh_atomic();
X kfree_skb(skb);
X return -EMSGSIZE;
X }
@@ -427,6 +432,7 @@
X struct dst_entry *dst;
X int err = 0;
X unsigned int pktlength, jumbolen, mtu;
+ struct in6_addr saddr;
X
X if (opt && opt->srcrt) {
X struct rt0_hdr *rt0 = (struct rt0_hdr *) opt->srcrt;
@@ -481,19 +487,16 @@
X }
X
X if (fl->nl_u.ip6_u.saddr == NULL) {
- struct inet6_ifaddr *ifa;
-
- ifa = ipv6_get_saddr(dst, fl->nl_u.ip6_u.daddr);
+ err = ipv6_get_saddr(dst, fl->nl_u.ip6_u.daddr, &saddr);
X
- if (ifa == NULL) {
+ if (err) {
X #if IP6_DEBUG >= 2
X printk(KERN_DEBUG "ip6_build_xmit: "
X "no availiable source address\n");
X #endif
- err = -ENETUNREACH;
X goto out;
X }
- fl->nl_u.ip6_u.saddr = &ifa->addr;
+ fl->nl_u.ip6_u.saddr = &saddr;
X }
X pktlength = length;
X
diff -u --recursive --new-file v2.2.3/linux/net/ipv6/ipv6_sockglue.c linux/net/ipv6/ipv6_sockglue.c
--- v2.2.3/linux/net/ipv6/ipv6_sockglue.c Mon Oct 5 13:13:49 1998
+++ linux/net/ipv6/ipv6_sockglue.c Sun Mar 21 07:22:00 1999
@@ -7,7 +7,7 @@
X *
X * Based on linux/net/ipv4/ip_sockglue.c
X *
- * $Id: ipv6_sockglue.c,v 1.24 1998/10/03 09:38:37 davem Exp $
+ * $Id: ipv6_sockglue.c,v 1.25 1999/03/21 05:22:54 davem Exp $
X *
X * This program is free software; you can redistribute it and/or
X * modify it under the terms of the GNU General Public License
@@ -86,7 +86,9 @@
X kfree(new_ra);
X return -EADDRINUSE;
X }
+ net_serialize_enter();
X *rap = ra->next;
+ net_serialize_leave();
X if (ra->destructor)
X ra->destructor(sk);
X kfree(ra);
@@ -136,15 +138,16 @@
X if (sk->protocol != IPPROTO_UDP &&
X sk->protocol != IPPROTO_TCP)
X goto out;
-
+
+ lock_sock(sk);
X if (sk->state != TCP_ESTABLISHED) {
X retv = ENOTCONN;
- goto out;
+ goto addrform_done;
X }
X
X if (!(ipv6_addr_type(&np->daddr) & IPV6_ADDR_MAPPED)) {
X retv = -EADDRNOTAVAIL;
- goto out;
+ goto addrform_done;
X }
X
X if (sk->protocol == IPPROTO_TCP) {
@@ -166,6 +169,9 @@
X if (pktopt)
X kfree_skb(pktopt);
X retv = 0;
+
+addrform_done:
+ release_sock(sk);
X } else {
X retv = -EINVAL;
X }
diff -u --recursive --new-file v2.2.3/linux/net/ipv6/mcast.c linux/net/ipv6/mcast.c
--- v2.2.3/linux/net/ipv6/mcast.c Sat Sep 5 16:46:42 1998
+++ linux/net/ipv6/mcast.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X * Authors:
X * Pedro Roque <ro...@di.fc.ul.pt>
X *
- * $Id: mcast.c,v 1.17 1998/08/26 12:05:06 davem Exp $
+ * $Id: mcast.c,v 1.18 1999/03/21 05:22:55 davem Exp $
X *
X * Based on linux/ipv4/igmp.c and linux/ipv4/ip_sockglue.c
X *
@@ -132,7 +132,9 @@
X if (mc_lst->ifindex == ifindex &&
X ipv6_addr_cmp(&mc_lst->addr, addr) == 0) {
X struct device *dev;
+ net_serialize_enter();
X *lnk = mc_lst->next;
+ net_serialize_leave();
X if ((dev = dev_get_by_index(ifindex)) != NULL)
X ipv6_dev_mc_dec(dev, &mc_lst->addr);
X sock_kfree_s(sk, mc_lst, sizeof(*mc_lst));
@@ -252,7 +254,9 @@
X
X for (lnk = &idev->mc_list; (iter = *lnk) != NULL; lnk = &iter->if_next) {
X if (iter == ma) {
+ net_serialize_enter();
X *lnk = iter->if_next;
+ net_serialize_leave();
X return;
X }
X }
@@ -273,7 +277,9 @@
X if (ipv6_addr_cmp(&ma->mca_addr, addr) == 0 && ma->dev == dev) {
X if (atomic_dec_and_test(&ma->mca_users)) {
X igmp6_group_dropped(ma);
+ net_serialize_enter();
X *lnk = ma->next;
+ net_serialize_leave();
X ipv6_mca_remove(dev, ma);
X kfree(ma);
X }
@@ -496,10 +502,10 @@
X if ((addr_type & (IPV6_ADDR_LINKLOCAL|IPV6_ADDR_LOOPBACK)))
X return;
X
+ start_bh_atomic();
X igmp6_send(&ma->mca_addr, ma->dev, ICMPV6_MGM_REPORT);
X
X delay = net_random() % IGMP6_UNSOLICITED_IVAL;
- start_bh_atomic();
X if (del_timer(&ma->mca_timer))
X delay = ma->mca_timer.expires - jiffies;
X
@@ -519,11 +525,13 @@
X if ((addr_type & IPV6_ADDR_LINKLOCAL))
X return;
X
+ start_bh_atomic();
X if (ma->mca_flags & MAF_LAST_REPORTER)
X igmp6_send(&ma->mca_addr, ma->dev, ICMPV6_MGM_REDUCTION);
X
X if (ma->mca_flags & MAF_TIMER_RUNNING)
X del_timer(&ma->mca_timer);
+ end_bh_atomic();
X }
X
X void igmp6_timer_handler(unsigned long data)
@@ -577,10 +585,22 @@
X
X void ipv6_mc_destroy_dev(struct inet6_dev *idev)
X {
- struct ifmcaddr6 *i;
+ int hash;
+ struct ifmcaddr6 *i, **lnk;
X
X while ((i = idev->mc_list) != NULL) {
X idev->mc_list = i->if_next;
+
+ hash = ipv6_addr_hash(&i->mca_addr);
+
+ for (lnk = &inet6_mcast_lst[hash]; *lnk; lnk = &(*lnk)->next) {
+ if (*lnk == i) {
+ net_serialize_enter();
+ *lnk = i->next;
+ net_serialize_leave();
+ break;
+ }
+ }
X igmp6_group_dropped(i);
X kfree(i);
X }
@@ -631,6 +651,8 @@
X len-=(offset-begin);
X if(len>length)
X len=length;
+ if (len<0)
+ len=0;
X return len;
X }
X #endif
diff -u --recursive --new-file v2.2.3/linux/net/ipv6/ndisc.c linux/net/ipv6/ndisc.c
--- v2.2.3/linux/net/ipv6/ndisc.c Tue Jan 19 11:32:53 1999
+++ linux/net/ipv6/ndisc.c Sun Mar 21 07:22:00 1999
@@ -335,7 +335,7 @@
X msg->icmph.icmp6_unused = 0;
X msg->icmph.icmp6_router = router;
X msg->icmph.icmp6_solicited = solicited;
- msg->icmph.icmp6_override = override;
+ msg->icmph.icmp6_override = !!override;
X
X /* Set the target address. */
X ipv6_addr_copy(&msg->target, solicited_addr);
@@ -497,7 +497,7 @@
X * "The sender MUST return an ICMP
X * destination unreachable"
X */
- icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH, 0, skb->dev);
+ dst_link_failure(skb);
X kfree_skb(skb);
X }
X
@@ -604,6 +604,13 @@
X return;
X }
X neigh->flags |= NTF_ROUTER;
+
+ /*
+ * If we where using an "all destinations on link" route
+ * delete it
+ */
+
+ rt6_purge_dflt_routers(RTF_ALLONLINK);
X }
X
X if (rt)
@@ -989,7 +996,7 @@
X
X if (neigh) {
X ndisc_send_na(dev, neigh, saddr, &msg->target,
- 0, 0, inc, inc);
+ 0, 1, 0, inc);
X neigh_release(neigh);
X }
X } else {
@@ -1173,7 +1180,6 @@
X sk = ndisc_socket->sk;
X sk->allocation = GFP_ATOMIC;
X sk->net_pinfo.af_inet6.hop_limit = 255;
- sk->net_pinfo.af_inet6.priority = 15;
X /* Do not loopback ndisc messages */
X sk->net_pinfo.af_inet6.mc_loop = 0;
X sk->num = 256;
diff -u --recursive --new-file v2.2.3/linux/net/ipv6/route.c linux/net/ipv6/route.c
--- v2.2.3/linux/net/ipv6/route.c Mon Oct 5 13:13:49 1998
+++ linux/net/ipv6/route.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X * Authors:
X * Pedro Roque <ro...@di.fc.ul.pt>
X *
- * $Id: route.c,v 1.34 1998/10/03 09:38:43 davem Exp $
+ * $Id: route.c,v 1.35 1999/03/21 05:22:57 davem Exp $
X *
X * This program is free software; you can redistribute it and/or
X * modify it under the terms of the GNU General Public License
@@ -71,6 +71,7 @@
X int ip6_rt_gc_timeout = 60*HZ;
X int ip6_rt_gc_interval = 30*HZ;
X int ip6_rt_gc_elasticity = 9;
+int ip6_rt_mtu_expires = 10*60*HZ;
X
X static struct rt6_info * ip6_rt_copy(struct rt6_info *ort);
X static struct dst_entry *ip6_dst_check(struct dst_entry *dst, u32 cookie);
@@ -97,7 +98,7 @@
X
X struct rt6_info ip6_null_entry = {
X {{NULL, ATOMIC_INIT(1), ATOMIC_INIT(1), &loopback_dev,
- -1, 0, 0, 0, 0, 0, 0, 0,
+ -1, 0, 0, 0, 0, 0, 0, 0, 0,
X -ENETUNREACH, NULL, NULL,
X ip6_pkt_discard, ip6_pkt_discard,
X #ifdef CONFIG_NET_CLS_ROUTE
@@ -105,7 +106,7 @@
X #endif
X &ip6_dst_ops}},
X NULL, {{{0}}}, RTF_REJECT|RTF_NONEXTHOP, ~0U,
- 255, 0, ATOMIC_INIT(1), {NULL}, {{{{0}}}, 0}, {{{{0}}}, 0}
+ 255, ATOMIC_INIT(1), {NULL}, {{{{0}}}, 0}, {{{{0}}}, 0}
X };
X
X struct fib6_node ip6_routing_table = {
@@ -515,13 +516,30 @@
X
X static struct dst_entry *ip6_negative_advice(struct dst_entry *dst)
X {
- dst_release(dst);
+ struct rt6_info *rt = (struct rt6_info *) dst;
+
+ if (rt) {
+ if (rt->rt6i_flags & RTF_CACHE)
+ ip6_del_rt(rt);
+ dst_release(dst);
+ }
X return NULL;
X }
X
X static void ip6_link_failure(struct sk_buff *skb)
X {
+ struct rt6_info *rt;
+
X icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH, 0, skb->dev);
+
+ rt = (struct rt6_info *) skb->dst;
+ if (rt) {
+ if (rt->rt6i_flags&RTF_CACHE) {
+ dst_set_expires(&rt->u.dst, 0);
+ rt->rt6i_flags |= RTF_EXPIRES;
+ } else if (rt->rt6i_node && (rt->rt6i_flags & RTF_DEFAULT))
+ rt->rt6i_node->fn_sernum = -1;
+ }
X }
X
X static int ip6_dst_gc()
@@ -1009,12 +1027,10 @@
X when cache entry will expire old pmtu
X would return automatically.
X */
- if (rt->rt6i_dst.plen == 128) {
- /*
- * host route
- */
+ if (rt->rt6i_flags & RTF_CACHE) {
X rt->u.dst.pmtu = pmtu;
- rt->rt6i_flags |= RTF_MODIFIED;
+ dst_set_expires(&rt->u.dst, ip6_rt_mtu_expires);
+ rt->rt6i_flags |= RTF_MODIFIED|RTF_EXPIRES;
X goto out;
X }
X
@@ -1025,9 +1041,12 @@
X */
X if (!rt->rt6i_nexthop && !(rt->rt6i_flags & RTF_NONEXTHOP)) {
X nrt = rt6_cow(rt, daddr, saddr);
- nrt->u.dst.pmtu = pmtu;
- nrt->rt6i_flags |= RTF_DYNAMIC;
- dst_release(&nrt->u.dst);
+ if (!nrt->u.dst.error) {
+ nrt->u.dst.pmtu = pmtu;
+ dst_set_expires(&rt->u.dst, ip6_rt_mtu_expires);
+ nrt->rt6i_flags |= RTF_DYNAMIC|RTF_EXPIRES;
+ dst_release(&nrt->u.dst);
+ }
X } else {
X nrt = ip6_rt_copy(rt);
X if (nrt == NULL)
@@ -1035,7 +1054,8 @@
X ipv6_addr_copy(&nrt->rt6i_dst.addr, daddr);
X nrt->rt6i_dst.plen = 128;
X nrt->rt6i_nexthop = neigh_clone(rt->rt6i_nexthop);
- nrt->rt6i_flags |= (RTF_DYNAMIC | RTF_CACHE);
+ dst_set_expires(&rt->u.dst, ip6_rt_mtu_expires);
+ nrt->rt6i_flags |= RTF_DYNAMIC|RTF_CACHE|RTF_EXPIRES;
X nrt->u.dst.pmtu = pmtu;
X rt6_ins(nrt);
X }
@@ -1069,7 +1089,7 @@
X
X ipv6_addr_copy(&rt->rt6i_gateway, &ort->rt6i_gateway);
X rt->rt6i_flags = ort->rt6i_flags & ~RTF_EXPIRES;
- rt->rt6i_metric = ort->rt6i_metric;
+ rt->rt6i_metric = 0;
X
X memcpy(&rt->rt6i_dst, &ort->rt6i_dst, sizeof(struct rt6key));
X #ifdef CONFIG_IPV6_SUBTREES
@@ -1521,9 +1541,9 @@
X if (iif)
X RTA_PUT(skb, RTA_IIF, 4, &iif);
X else if (dst) {
- struct inet6_ifaddr *ifp = ipv6_get_saddr(&rt->u.dst, dst);
- if (ifp)
- RTA_PUT(skb, RTA_PREFSRC, 16, &ifp->addr);
+ struct in6_addr saddr_buf;
+ if (ipv6_get_saddr(&rt->u.dst, dst, &saddr_buf))
+ RTA_PUT(skb, RTA_PREFSRC, 16, &saddr_buf);
X }
X mx = (struct rtattr*)skb->tail;
X RTA_PUT(skb, RTA_METRICS, 0, NULL);
@@ -1722,7 +1742,7 @@
X struct sk_buff *skb;
X int size = NLMSG_SPACE(sizeof(struct rtmsg)+256);
X
- skb = alloc_skb(size, GFP_ATOMIC);
+ skb = alloc_skb(size, gfp_any());
X if (!skb) {
X netlink_set_err(rtnl, 0, RTMGRP_IPV6_ROUTE, ENOBUFS);
X return;
@@ -1733,7 +1753,7 @@
X return;
X }
X NETLINK_CB(skb).dst_groups = RTMGRP_IPV6_ROUTE;
- netlink_broadcast(rtnl, skb, 0, RTMGRP_IPV6_ROUTE, GFP_ATOMIC);
+ netlink_broadcast(rtnl, skb, 0, RTMGRP_IPV6_ROUTE, gfp_any());
X }
X
X #endif
@@ -1915,6 +1935,9 @@
X &proc_dointvec_jiffies},
X {NET_IPV6_ROUTE_GC_ELASTICITY, "gc_elasticity",
X &ip6_rt_gc_elasticity, sizeof(int), 0644, NULL,
+ &proc_dointvec_jiffies},
+ {NET_IPV6_ROUTE_MTU_EXPIRES, "mtu_expires",
+ &ip6_rt_mtu_expires, sizeof(int), 0644, NULL,
X &proc_dointvec_jiffies},
X {0}
X };
diff -u --recursive --new-file v2.2.3/linux/net/ipv6/sit.c linux/net/ipv6/sit.c
--- v2.2.3/linux/net/ipv6/sit.c Mon Oct 5 13:13:49 1998
+++ linux/net/ipv6/sit.c Sun Mar 21 07:22:00 1999
@@ -6,7 +6,7 @@
X * Pedro Roque <ro...@di.fc.ul.pt>
X * Alexey Kuznetsov <kuz...@ms2.inr.ac.ru>
X *
- * $Id: sit.c,v 1.29 1998/10/03 09:38:47 davem Exp $
+ * $Id: sit.c,v 1.30 1999/03/21 05:22:58 davem Exp $
X *
X * This program is free software; you can redistribute it and/or
X * modify it under the terms of the GNU General Public License
@@ -94,6 +94,48 @@
X return NULL;
X }
X
+static struct ip_tunnel ** ipip6_bucket(struct ip_tunnel *t)
+{
+ u32 remote = t->parms.iph.daddr;
+ u32 local = t->parms.iph.saddr;
+ unsigned h = 0;
+ int prio = 0;
+
+ if (remote) {
+ prio |= 2;
+ h ^= HASH(remote);
+ }
+ if (local) {
+ prio |= 1;
+ h ^= HASH(local);
+ }
+ return &tunnels[prio][h];
+}
+
+static void ipip6_tunnel_unlink(struct ip_tunnel *t)
+{
+ struct ip_tunnel **tp;
+
+ for (tp = ipip6_bucket(t); *tp; tp = &(*tp)->next) {
+ if (t == *tp) {
+ net_serialize_enter();
+ *tp = t->next;
+ net_serialize_leave();
+ break;
+ }
+ }
+}
+
+static void ipip6_tunnel_link(struct ip_tunnel *t)
+{
+ struct ip_tunnel **tp = ipip6_bucket(t);
+
+ net_serialize_enter();
+ t->next = *tp;
+ *tp = t;
+ net_serialize_leave();
+}
+
X struct ip_tunnel * ipip6_tunnel_locate(struct ip_tunnel_parm *parms, int create)
X {
X u32 remote = parms->iph.daddr;
@@ -145,10 +187,7 @@
X if (register_netdevice(dev) < 0)
X goto failed;
X
- start_bh_atomic();
- nt->next = t;
- *tp = nt;
- end_bh_atomic();
+ ipip6_tunnel_link(nt);
X /* Do not decrement MOD_USE_COUNT here. */
X return nt;
X
@@ -160,37 +199,18 @@
X
X static void ipip6_tunnel_destroy(struct device *dev)
X {
- struct ip_tunnel *t, **tp;
- struct ip_tunnel *t0 = (struct ip_tunnel*)dev->priv;
- u32 remote = t0->parms.iph.daddr;
- u32 local = t0->parms.iph.saddr;
- unsigned h = 0;
- int prio = 0;
-
X if (dev == &ipip6_fb_tunnel_dev) {
+ net_serialize_enter();
X tunnels_wc[0] = NULL;
+ net_serialize_leave();
X return;
- }
-
- if (remote) {
- prio |= 2;
- h ^= HASH(remote);
- }
- if (local) {
- prio |= 1;
- h ^= HASH(local);
- }
- for (tp = &tunnels[prio][h]; (t = *tp) != NULL; tp = &t->next) {
- if (t == t0) {
- *tp = t->next;
- kfree(dev);
- MOD_DEC_USE_COUNT;
- break;
- }
+ } else {
+ ipip6_tunnel_unlink((struct ip_tunnel*)dev->priv);
+ kfree(dev);
+ MOD_DEC_USE_COUNT;
X }
X }
X
-
X void ipip6_err(struct sk_buff *skb, unsigned char *dp, int len)
X {
X #ifndef I_WISH_WORLD_WERE_PERFECT
@@ -570,6 +590,32 @@
X p.iph.frag_off |= __constant_htons(IP_DF);
X
X t = ipip6_tunnel_locate(&p, cmd == SIOCADDTUNNEL);
+
+ if (dev != &ipip6_fb_tunnel_dev && cmd == SIOCCHGTUNNEL &&
+ t != &ipip6_fb_tunnel) {
+ if (t != NULL) {
+ if (t->dev != dev) {
+ err = -EEXIST;
+ break;
+ }
+ } else {
+ if (((dev->flags&IFF_POINTOPOINT) && !p.iph.daddr) ||
+ (!(dev->flags&IFF_POINTOPOINT) && p.iph.daddr)) {
+ err = -EINVAL;
+ break;
+ }
+ t = (struct ip_tunnel*)dev->priv;
+ start_bh_atomic();
+ ipip6_tunnel_unlink(t);
+ t->parms.iph.saddr = p.iph.saddr;
+ t->parms.iph.daddr = p.iph.daddr;
+ memcpy(dev->dev_addr, &p.iph.saddr, 4);
+ memcpy(dev->broadcast, &p.iph.daddr, 4);
+ ipip6_tunnel_link(t);
+ end_bh_atomic();
+ netdev_state_change(dev);
+ }
+ }
X
X if (t) {
X err = 0;
diff -u --recursive --new-file v2.2.3/linux/net/ipv6/tcp_ipv6.c linux/net/ipv6/tcp_ipv6.c
--- v2.2.3/linux/net/ipv6/tcp_ipv6.c Wed Mar 10 15:29:52 1999
+++ linux/net/ipv6/tcp_ipv6.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X * Authors:
X * Pedro Roque <ro...@di.fc.ul.pt>
X *
- * $Id: tcp_ipv6.c,v 1.96 1999/03/05 13:23:13 davem Exp $
+ * $Id: tcp_ipv6.c,v 1.100 1999/03/21 05:22:59 davem Exp $
X *
X * Based on:
X * linux/net/ipv4/tcp.c
@@ -376,12 +376,13 @@
X struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr;
X struct ipv6_pinfo *np = &sk->net_pinfo.af_inet6;
X struct tcp_opt *tp = &sk->tp_pinfo.af_tcp;
- struct inet6_ifaddr *ifa;
X struct in6_addr *saddr = NULL;
+ struct in6_addr saddr_buf;
X struct flowi fl;
X struct dst_entry *dst;
X struct sk_buff *buff;
X int addr_type;
+ int err;
X
X if (sk->state != TCP_CLOSE)
X return(-EISCONN);
@@ -428,7 +429,6 @@
X if (addr_type == IPV6_ADDR_MAPPED) {
X u32 exthdrlen = tp->ext_header_len;
X struct sockaddr_in sin;
- int err;
X
X SOCK_DEBUG(sk, "connect: ipv4 mapped\n");
X
@@ -472,9 +472,9 @@
X
X dst = ip6_route_output(sk, &fl);
X
- if (dst->error) {
+ if ((err = dst->error) != 0) {
X dst_release(dst);
- return dst->error;
+ return err;
X }
X
X if (fl.oif == 0 && addr_type&IPV6_ADDR_LINKLOCAL) {
@@ -489,18 +489,17 @@
X ip6_dst_store(sk, dst, NULL);
X
X if (saddr == NULL) {
- ifa = ipv6_get_saddr(dst, &np->daddr);
-
- if (ifa == NULL)
- return -ENETUNREACH;
-
- saddr = &ifa->addr;
+ err = ipv6_get_saddr(dst, &np->daddr, &saddr_buf);
+ if (err)
+ return err;
X
- /* set the source address */
- ipv6_addr_copy(&np->rcv_saddr, saddr);
- ipv6_addr_copy(&np->saddr, saddr);
+ saddr = &saddr_buf;
X }
X
+ /* set the source address */
+ ipv6_addr_copy(&np->rcv_saddr, saddr);
+ ipv6_addr_copy(&np->saddr, saddr);
+
X tp->ext_header_len = 0;
X if (np->opt)
X tp->ext_header_len = np->opt->opt_flen+np->opt->opt_nflen;
@@ -535,7 +534,6 @@
X
X static int tcp_v6_sendmsg(struct sock *sk, struct msghdr *msg, int len)
X {
- struct tcp_opt *tp;
X struct ipv6_pinfo *np = &sk->net_pinfo.af_inet6;
X int retval = -EINVAL;
X
@@ -564,14 +562,7 @@
X goto out;
X }
X
- lock_sock(sk);
- retval = tcp_do_sendmsg(sk, msg->msg_iovlen, msg->msg_iov,
- msg->msg_flags);
- /* Push out partial tail frames if needed. */
- tp = &(sk->tp_pinfo.af_tcp);
- if(tp->send_head && tcp_snd_test(sk, tp->send_head))
- tcp_write_xmit(sk);
- release_sock(sk);
+ retval = tcp_do_sendmsg(sk, msg);
X
X out:
X return retval;
@@ -610,11 +601,14 @@
X np = &sk->net_pinfo.af_inet6;
X if (type == ICMPV6_PKT_TOOBIG) {
X struct dst_entry *dst = NULL;
- /* icmp should have updated the destination cache entry */
+
+ if (atomic_read(&sk->sock_readers))
+ return;
X
X if (sk->state == TCP_LISTEN)
X return;
X
+ /* icmp should have updated the destination cache entry */
X if (sk->dst_cache)
X dst = dst_check(&sk->dst_cache, np->dst_cookie);
X
@@ -639,8 +633,7 @@
X
X if (dst->error) {
X sk->err_soft = -dst->error;
- } else if (tp->pmtu_cookie > dst->pmtu
- && !atomic_read(&sk->sock_readers)) {
+ } else if (tp->pmtu_cookie > dst->pmtu) {
X tcp_sync_mss(sk, dst->pmtu);
X tcp_simple_retransmit(sk);
X } /* else let the usual retransmit timer handle it */
@@ -1201,6 +1194,11 @@
X if (skb->protocol == __constant_htons(ETH_P_IP))
X return tcp_v4_do_rcv(sk, skb);
X
+#ifdef CONFIG_FILTER
+ if (sk->filter && sk_filter(skb, sk->filter))
+ goto discard;
+#endif /* CONFIG_FILTER */
+
X /*
X * socket locking is here for SMP purposes as backlog rcv
X * is currently called with bh processing disabled.
@@ -1428,6 +1426,9 @@
X {
X struct in6_addr *saddr;
X struct in6_addr *daddr;
+
+ if (skb->protocol == __constant_htons(ETH_P_IP))
+ return ipv4_specific.get_sock(skb, th);
X
X saddr = &skb->nh.ipv6h->saddr;
X daddr = &skb->nh.ipv6h->daddr;
diff -u --recursive --new-file v2.2.3/linux/net/ipv6/udp.c linux/net/ipv6/udp.c
--- v2.2.3/linux/net/ipv6/udp.c Thu Nov 19 09:56:29 1998
+++ linux/net/ipv6/udp.c Sun Mar 21 07:22:00 1999
@@ -7,7 +7,7 @@
X *
X * Based on linux/ipv4/udp.c
X *
- * $Id: udp.c,v 1.37 1998/11/08 11:17:10 davem Exp $
+ * $Id: udp.c,v 1.38 1999/03/21 05:23:00 davem Exp $
X *
X * This program is free software; you can redistribute it and/or
X * modify it under the terms of the GNU General Public License
@@ -201,8 +201,8 @@
X struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr;
X struct ipv6_pinfo *np = &sk->net_pinfo.af_inet6;
X struct in6_addr *daddr;
+ struct in6_addr saddr;
X struct dst_entry *dst;
- struct inet6_ifaddr *ifa;
X struct flowi fl;
X int addr_type;
X int err;
@@ -284,28 +284,29 @@
X
X dst = ip6_route_output(sk, &fl);
X
- if (dst->error) {
+ if ((err = dst->error) != 0) {
X dst_release(dst);
- return dst->error;
+ return err;
X }
X
X ip6_dst_store(sk, dst, fl.nl_u.ip6_u.daddr);
X
X /* get the source adddress used in the apropriate device */
X
- ifa = ipv6_get_saddr(dst, daddr);
+ err = ipv6_get_saddr(dst, daddr, &saddr);
X
- if(ipv6_addr_any(&np->saddr))
- ipv6_addr_copy(&np->saddr, &ifa->addr);
+ if (err == 0) {
+ if(ipv6_addr_any(&np->saddr))
+ ipv6_addr_copy(&np->saddr, &saddr);
X
- if(ipv6_addr_any(&np->rcv_saddr)) {
- ipv6_addr_copy(&np->rcv_saddr, &ifa->addr);
- sk->rcv_saddr = 0xffffffff;
+ if(ipv6_addr_any(&np->rcv_saddr)) {
+ ipv6_addr_copy(&np->rcv_saddr, &saddr);
+ sk->rcv_saddr = 0xffffffff;
+ }
+ sk->state = TCP_ESTABLISHED;
X }
X
- sk->state = TCP_ESTABLISHED;
-
- return(0);
+ return err;
X }
X
X static void udpv6_close(struct sock *sk, long timeout)
@@ -317,7 +318,7 @@
X destroy_sock(sk);
X }
X
-#if defined(CONFIG_FILTER) || !defined(HAVE_CSUM_COPY_USER)
+#ifndef HAVE_CSUM_COPY_USER
X #undef CONFIG_UDP_DELAY_CSUM
X #endif
X
@@ -352,11 +353,11 @@
X err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr),
X msg->msg_iov, copied);
X #else
- if (sk->no_check || skb->ip_summed==CHECKSUM_UNNECESSARY) {
+ if (skb->ip_summed==CHECKSUM_UNNECESSARY) {
X err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov,
X copied);
X } else if (copied > msg->msg_iov[0].iov_len || (msg->msg_flags&MSG_TRUNC)) {
- if (csum_fold(csum_partial(skb->h.raw, ntohs(skb->h.uh->len), skb->csum))) {
+ if ((unsigned short)csum_fold(csum_partial(skb->h.raw, skb->len, skb->csum))) {
X /* Error for blocking case is chosen to masquerade
X as some normal condition.
X */
@@ -373,7 +374,7 @@
X csum = csum_and_copy_to_user((char*)&skb->h.uh[1], msg->msg_iov[0].iov_base, copied, csum, &err);
X if (err)
X goto out_free;
- if (csum_fold(csum)) {
+ if ((unsigned short)csum_fold(csum)) {
X /* Error for blocking case is chosen to masquerade
X as some normal condition.
X */
@@ -454,6 +455,17 @@
X
X static inline int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
X {
+#if defined(CONFIG_FILTER) && defined(CONFIG_UDP_DELAY_CSUM)
+ if (sk->filter && skb->ip_summed != CHECKSUM_UNNECESSARY) {
+ if ((unsigned short)csum_fold(csum_partial(skb->h.raw, skb->len, skb->csum))) {
+ udp_stats_in6.UdpInErrors++;
+ ipv6_statistics.Ip6InDiscards++;
+ kfree_skb(skb);
+ return 0;
+ }
+ skb->ip_summed = CHECKSUM_UNNECESSARY;
+ }
+#endif
X if (sock_queue_rcv_skb(sk,skb)<0) {
X udp_stats_in6.UdpInErrors++;
X ipv6_statistics.Ip6InDiscards++;
@@ -627,14 +639,13 @@
X if (sk == NULL) {
X #ifdef CONFIG_UDP_DELAY_CSUM
X if (skb->ip_summed != CHECKSUM_UNNECESSARY &&
- csum_fold(csum_partial((char*)uh, len, skb->csum)))
+ (unsigned short)csum_fold(csum_partial((char*)uh, len, skb->csum)))
X goto discard;
X #endif
-
X udp_stats_in6.UdpNoPorts++;
X
X icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_PORT_UNREACH, 0, dev);
-
+
X kfree_skb(skb);
X return(0);
X }
diff -u --recursive --new-file v2.2.3/linux/net/ipx/Makefile linux/net/ipx/Makefile
--- v2.2.3/linux/net/ipx/Makefile Tue Apr 14 14:29:26 1998
+++ linux/net/ipx/Makefile Mon Mar 22 11:20:51 1999
@@ -10,8 +10,12 @@
X # We only get in/to here if CONFIG_IPX = 'y' or 'm'
X
X O_TARGET := ipx.o
-M_OBJS := $(O_TARGET)
-OX_OBJS += af_ipx.o
+M_OBJS :=
+OX_OBJS := af_ipx.o
+
+ifeq ($(CONFIG_IPX),m)
+ M_OBJS += $(O_TARGET)
+endif
X
X ifeq ($(CONFIG_SYSCTL),y)
X O_OBJS += sysctl_net_ipx.o
diff -u --recursive --new-file v2.2.3/linux/net/netlink/af_netlink.c linux/net/netlink/af_netlink.c
--- v2.2.3/linux/net/netlink/af_netlink.c Sun Nov 8 14:03:15 1998
+++ linux/net/netlink/af_netlink.c Sun Mar 21 07:22:00 1999
@@ -55,6 +55,13 @@
X static int netlink_dump(struct sock *sk);
X static void netlink_destroy_callback(struct netlink_callback *cb);
X
+/* Netlink table lock. It protects against sk list changes
+ during uninterruptible sleeps in netlink_broadcast.
+
+ These lock MUST NOT be used from bh/irq on SMP kernels, because
+ It would result in race in netlink_wait_on_table.
+ */
+
X extern __inline__ void
X netlink_wait_on_table(int protocol)
X {
@@ -69,16 +76,16 @@
X }
X
X extern __inline__ void
-netlink_unlock_table(int protocol, int wakeup)
+netlink_unlock_table(int protocol)
X {
X #if 0
X /* F...g gcc does not eat it! */
X
- if (atomic_dec_and_test(&nl_table_lock[protocol]) && wakeup)
+ if (atomic_dec_and_test(&nl_table_lock[protocol]))
X wake_up(&nl_table_wait);
X #else
X atomic_dec(&nl_table_lock[protocol]);
- if (atomic_read(&nl_table_lock[protocol]) && wakeup)
+ if (!atomic_read(&nl_table_lock[protocol]))
X wake_up(&nl_table_wait);
X #endif
X }
@@ -125,7 +132,9 @@
X struct sock **skp;
X for (skp = &nl_table[sk->protocol]; *skp; skp = &((*skp)->next)) {
X if (*skp == sk) {
+ start_bh_atomic();
X *skp = sk->next;
+ end_bh_atomic();
X return;
X }
X }
@@ -186,7 +195,7 @@
X transport (and AF_UNIX datagram, when it will be repaired).
X
X Someone could wait on our sock->wait now.
- We cannot release socket until waiter will remove yourself
+ We cannot release socket until waiter will remove itself
X from wait queue. I choose the most conservetive way of solving
X the problem.
X
@@ -218,8 +227,6 @@
X struct sock *sk = sock->sk;
X struct sock *osk;
X
- netlink_wait_on_table(sk->protocol);
-
X sk->protinfo.af_netlink.groups = 0;
X sk->protinfo.af_netlink.pid = current->pid;
X
@@ -264,8 +271,6 @@
X return 0;
X }
X
- netlink_wait_on_table(sk->protocol);
-
X for (osk=nl_table[sk->protocol]; osk; osk=osk->next) {
X if (osk->protinfo.af_netlink.pid == nladdr->nl_pid)
X return -EADDRINUSE;
@@ -332,7 +337,7 @@
X retry:
X for (sk = nl_table[protocol]; sk; sk = sk->next) {
X if (sk->protinfo.af_netlink.pid != pid)
- continue;
+ continue;
X
X netlink_lock(sk);
X
@@ -416,7 +421,8 @@
X
X /* While we sleep in clone, do not allow to change socket list */
X
- netlink_lock_table(protocol);
+ if (allocation == GFP_KERNEL)
+ netlink_lock_table(protocol);
X
X for (sk = nl_table[protocol]; sk; sk = sk->next) {
X if (ssk == sk)
@@ -454,7 +460,8 @@
X netlink_unlock(sk);
X }
X
- netlink_unlock_table(protocol, allocation == GFP_KERNEL);
+ if (allocation == GFP_KERNEL)
+ netlink_unlock_table(protocol);
X
X if (skb2)
X kfree_skb(skb2);
@@ -475,7 +482,7 @@
X !(sk->protinfo.af_netlink.groups&group))
X continue;
X
- sk->err = -code;
+ sk->err = code;
X sk->state_change(sk);
X }
X }
@@ -739,15 +746,20 @@
X void netlink_detach(int unit)
X {
X struct socket *sock = netlink_kernel[unit];
+
+ net_serialize_enter();
X netlink_kernel[unit] = NULL;
+ net_serialize_leave();
X sock_release(sock);
X }
X
X int netlink_post(int unit, struct sk_buff *skb)
X {
- if (netlink_kernel[unit]) {
+ struct socket *sock = netlink_kernel[unit];
+ barrier();
+ if (sock) {
X memset(skb->cb, 0, sizeof(skb->cb));
- netlink_broadcast(netlink_kernel[unit]->sk, skb, 0, ~0, GFP_ATOMIC);
+ netlink_broadcast(sock->sk, skb, 0, ~0, GFP_ATOMIC);
X return 0;
X }
X return -EUNATCH;;
@@ -800,6 +812,8 @@
X len-=(offset-begin);
X if(len>length)
X len=length;
+ if(len<0)
+ len=0;
X return len;
X }
X #endif
diff -u --recursive --new-file v2.2.3/linux/net/netsyms.c linux/net/netsyms.c
--- v2.2.3/linux/net/netsyms.c Tue Feb 23 15:21:36 1999
+++ linux/net/netsyms.c Mon Mar 22 11:20:51 1999
@@ -12,6 +12,7 @@
X #include <linux/net.h>
X #include <linux/in.h>
X #include <linux/netdevice.h>
+#include <linux/inetdevice.h>
X #include <linux/fddidevice.h>
X #include <linux/trdevice.h>
X #include <linux/ioport.h>
@@ -239,6 +240,10 @@
X EXPORT_SYMBOL(ip_cmsg_recv);
X EXPORT_SYMBOL(__release_sock);
X
+/* Route manipulation */
+EXPORT_SYMBOL(ip_rt_ioctl);
+EXPORT_SYMBOL(devinet_ioctl);
+
X /* needed for ip_gre -cw */
X EXPORT_SYMBOL(ip_statistics);
X
@@ -428,12 +433,14 @@
X EXPORT_SYMBOL(unregister_netdevice);
X EXPORT_SYMBOL(register_netdev);
X EXPORT_SYMBOL(unregister_netdev);
+EXPORT_SYMBOL(netdev_state_change);
X EXPORT_SYMBOL(ether_setup);
X EXPORT_SYMBOL(dev_new_index);
X EXPORT_SYMBOL(dev_get_by_index);
X EXPORT_SYMBOL(eth_type_trans);
X #ifdef CONFIG_FDDI
X EXPORT_SYMBOL(fddi_type_trans);
+EXPORT_SYMBOL(fddi_setup);
X #endif /* CONFIG_FDDI */
X EXPORT_SYMBOL(eth_copy_and_sum);
X EXPORT_SYMBOL(alloc_skb);
@@ -482,6 +489,7 @@
X EXPORT_SYMBOL(qdisc_create_dflt);
X EXPORT_SYMBOL(noop_qdisc);
X #ifdef CONFIG_NET_SCHED
+PSCHED_EXPORTLIST;
X EXPORT_SYMBOL(pfifo_qdisc_ops);
X EXPORT_SYMBOL(register_qdisc);
X EXPORT_SYMBOL(unregister_qdisc);
diff -u --recursive --new-file v2.2.3/linux/net/packet/af_packet.c linux/net/packet/af_packet.c
--- v2.2.3/linux/net/packet/af_packet.c Mon Oct 5 13:13:49 1998
+++ linux/net/packet/af_packet.c Sun Mar 21 07:22:00 1999
@@ -5,7 +5,7 @@
X *
X * PACKET - implements raw packet sockets.
X *
- * Version: $Id: af_packet.c,v 1.18 1998/10/03 15:55:24 freitag Exp $
+ * Version: $Id: af_packet.c,v 1.19 1999/03/21 05:23:03 davem Exp $
X *
X * Authors: Ross Biro, <bi...@leland.Stanford.Edu>
X * Fred N. van Kempen, <wal...@uWalt.NL.Mugnet.ORG>
@@ -831,7 +831,7 @@
X * Free or return the buffer as appropriate. Again this
X * hides all the races and re-entrancy issues from us.
X */
- err = copied;
+ err = (flags&MSG_TRUNC) ? skb->len : copied;
X
X out_free:
X skb_free_datagram(sk, skb);
diff -u --recursive --new-file v2.2.3/linux/net/sched/Config.in linux/net/sched/Config.in
--- v2.2.3/linux/net/sched/Config.in Thu May 14 19:47:45 1998
+++ linux/net/sched/Config.in Sun Mar 21 07:22:00 1999
@@ -18,10 +18,11 @@
X fi
X bool 'Packet classifier API' CONFIG_NET_CLS
X if [ "$CONFIG_NET_CLS" = "y" ]; then
- bool 'Routing tables based classifier' CONFIG_NET_CLS_ROUTE
- if [ "$CONFIG_IP_FIREWALL" = "y" ]; then
- bool 'Firewall based classifier' CONFIG_NET_CLS_FW
+ tristate 'Routing table based classifier' CONFIG_NET_CLS_ROUTE4
+ if [ "$CONFIG_NET_CLS_ROUTE4" != "n" ]; then
+ define_bool CONFIG_NET_CLS_ROUTE y
X fi
+ tristate 'Firewall based classifier' CONFIG_NET_CLS_FW
X tristate 'U32 classifier' CONFIG_NET_CLS_U32
X if [ "$CONFIG_NET_QOS" = "y" ]; then
X tristate 'Special RSVP classifier' CONFIG_NET_CLS_RSVP
diff -u --recursive --new-file v2.2.3/linux/net/sched/Makefile linux/net/sched/Makefile
--- v2.2.3/linux/net/sched/Makefile Sat May 2 14:19:55 1998
+++ linux/net/sched/Makefile Sun Mar 21 07:22:00 1999
@@ -125,12 +125,20 @@
X endif
X endif
X
-ifeq ($(CONFIG_NET_CLS_ROUTE), y)
+ifeq ($(CONFIG_NET_CLS_ROUTE4), y)
X O_OBJS += cls_route.o
+else
+ ifeq ($(CONFIG_NET_CLS_ROUTE4), m)
+ M_OBJS += cls_route.o
+ endif
X endif
X
X ifeq ($(CONFIG_NET_CLS_FW), y)
X O_OBJS += cls_fw.o
+else
+ ifeq ($(CONFIG_NET_CLS_FW), m)
+ M_OBJS += cls_fw.o
+ endif
X endif
X
X endif
diff -u --recursive --new-file v2.2.3/linux/net/sched/cls_api.c linux/net/sched/cls_api.c
--- v2.2.3/linux/net/sched/cls_api.c Sat Sep 5 16:46:42 1998
+++ linux/net/sched/cls_api.c Sun Mar 21 07:22:00 1999
@@ -7,6 +7,10 @@
X * 2 of the License, or (at your option) any later version.
X *
X * Authors: Alexey Kuznetsov, <kuz...@ms2.inr.ac.ru>
+ *
+ * Changes:
+ *
+ * Eduardo J. Blanco <ej...@netlabs.com.uy> :990222: kmod support
X */
X
X #include <asm/uaccess.h>
@@ -27,6 +31,7 @@
X #include <linux/skbuff.h>
X #include <linux/rtnetlink.h>
X #include <linux/init.h>
+#include <linux/kmod.h>
X #include <net/sock.h>
X #include <net/pkt_sched.h>
X
@@ -87,21 +92,13 @@
X
X /* Select new prio value from the range, managed by kernel. */
X
-static __inline__ u32 tcf_auto_prio(struct tcf_proto *tp, u32 prio)
+static __inline__ u32 tcf_auto_prio(struct tcf_proto *tp)
X {
X u32 first = TC_H_MAKE(0xC0000000U,0U);
X
- if (!tp || tp->next == NULL)
- return first;
-
- if (prio == TC_H_MAKE(0xFFFF0000U,0U))
- first = tp->prio+1;
- else
+ if (tp)
X first = tp->prio-1;
X
- if (first == prio)
- first = tp->prio;
-
X return first;
X }
X
@@ -129,10 +126,7 @@
X /* If no priority is given, user wants we allocated it. */
X if (n->nlmsg_type != RTM_NEWTFILTER || !(n->nlmsg_flags&NLM_F_CREATE))
X return -ENOENT;
- if (n->nlmsg_flags&NLM_F_APPEND)
- prio = TC_H_MAKE(0xFFFF0000U,0U);
- else
- prio = TC_H_MAKE(0x80000000U,0U);
+ prio = TC_H_MAKE(0x80000000U,0U);
X }
X
X /* Find head of filter chain. */
@@ -194,6 +188,18 @@
X if ((tp = kmalloc(sizeof(*tp), GFP_KERNEL)) == NULL)
X goto errout;
X tp_ops = tcf_proto_lookup_ops(tca[TCA_KIND-1]);
+#ifdef CONFIG_KMOD
+ if (tp_ops==NULL && tca[TCA_KIND-1] != NULL) {
+ struct rtattr *kind = tca[TCA_KIND-1];
+ char module_name[4 + IFNAMSIZ + 1];
+
+ if (RTA_PAYLOAD(kind) <= IFNAMSIZ) {
+ sprintf(module_name, "cls_%s", (char*)RTA_DATA(kind));
+ request_module (module_name);
+ tp_ops = tcf_proto_lookup_ops(kind);
+ }
+ }
+#endif
X if (tp_ops == NULL) {
X err = -EINVAL;
X kfree(tp);
@@ -202,7 +208,7 @@
X memset(tp, 0, sizeof(*tp));
X tp->ops = tp_ops;
X tp->protocol = protocol;
- tp->prio = nprio ? : tcf_auto_prio(*back, prio);
+ tp->prio = nprio ? : tcf_auto_prio(*back);
X tp->q = q;
X tp->classify = tp_ops->classify;
X tp->classid = parent;
@@ -220,7 +226,9 @@
X
X if (fh == 0) {
X if (n->nlmsg_type == RTM_DELTFILTER && t->tcm_handle == 0) {
+ net_serialize_enter();
X *back = tp->next;
+ net_serialize_leave();
X tp->ops->destroy(tp);
X kfree(tp);
X err = 0;
@@ -249,7 +257,7 @@
X }
X }
X
- err = tp->ops->change(tp, t->tcm_handle, tca, &fh);
+ err = tp->ops->change(tp, cl, t->tcm_handle, tca, &fh);
X if (err == 0)
X tfilter_notify(skb, n, tp, fh, RTM_NEWTFILTER);
X
@@ -336,12 +344,16 @@
X return skb->len;
X if ((dev = dev_get_by_index(tcm->tcm_ifindex)) == NULL)
X return skb->len;
- if ((q = qdisc_lookup(dev, tcm->tcm_parent)) == NULL)
+ if (!tcm->tcm_parent)
+ q = dev->qdisc_sleeping;
+ else
+ q = qdisc_lookup(dev, TC_H_MAJ(tcm->tcm_parent));
+ if (q == NULL)
X return skb->len;
- cops = q->ops->cl_ops;
+ if ((cops = q->ops->cl_ops) == NULL)
+ goto errout;
X if (TC_H_MIN(tcm->tcm_parent)) {
- if (cops)
- cl = cops->get(q, tcm->tcm_parent);
+ cl = cops->get(q, tcm->tcm_parent);
X if (cl == 0)
X goto errout;
X }
@@ -360,7 +372,7 @@
X TC_H_MIN(tcm->tcm_info) != tp->protocol)
X continue;
X if (t > s_t)
- memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(int));
+ memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(cb->args[0]));
X if (cb->args[1] == 0) {
X if (tcf_fill_node(skb, tp, 0, NETLINK_CB(cb->skb).pid,
X cb->nlh->nlmsg_seq, NLM_F_MULTI, RTM_NEWTFILTER) <= 0) {
@@ -418,8 +430,8 @@
X #ifdef CONFIG_NET_CLS_U32
X INIT_TC_FILTER(u32);
X #endif
-#ifdef CONFIG_NET_CLS_ROUTE
- INIT_TC_FILTER(route);
+#ifdef CONFIG_NET_CLS_ROUTE4
+ INIT_TC_FILTER(route4);
X #endif
X #ifdef CONFIG_NET_CLS_FW
X INIT_TC_FILTER(fw);
diff -u --recursive --new-file v2.2.3/linux/net/sched/cls_fw.c linux/net/sched/cls_fw.c
--- v2.2.3/linux/net/sched/cls_fw.c Thu May 14 19:47:45 1998
+++ linux/net/sched/cls_fw.c Sun Mar 21 07:22:00 1999
@@ -1,5 +1,5 @@
X /*
- * net/sched/cls_fw.c Routing table based packet classifier.
+ * net/sched/cls_fw.c Classifier mapping ipchains' fwmark to traffic class.
X *
X * This program is free software; you can redistribute it and/or
X * modify it under the terms of the GNU General Public License
@@ -9,6 +9,7 @@
X * Authors: Alexey Kuznetsov, <kuz...@ms2.inr.ac.ru>
X */
X
+#include <linux/config.h>
X #include <linux/module.h>
X #include <asm/uaccess.h>
X #include <asm/system.h>
@@ -34,15 +35,56 @@
X #include <net/sock.h>
X #include <net/pkt_sched.h>
X
+struct fw_head
+{
+ struct fw_filter *ht[256];
+};
+
+struct fw_filter
+{
+ struct fw_filter *next;
+ u32 id;
+ struct tcf_result res;
+#ifdef CONFIG_NET_CLS_POLICE
+ struct tcf_police *police;
+#endif
+};
+
+static __inline__ int fw_hash(u32 handle)
SHAR_EOF
true || echo 'restore of patch-2.2.4 failed'
fi
echo 'End of part 49'
echo 'File patch-2.2.4 is continued in part 50'
echo 50 > _shar_seq_.tmp