# This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/02/04 13:51:43-08:00 James.Bottomley@SteelEye.com # [PATCH] use cramfs as an initrd # # Now that Al Viro fixed cramfs, it works beautifully as an initrd # filesystem. # # So finally plumb it in. # # init/do_mounts_rd.c # 2003/11/03 07:09:51-08:00 James.Bottomley@SteelEye.com +12 -0 # use cramfs as an initrd # # ChangeSet # 2004/02/04 11:33:43-08:00 davem@nuts.davemloft.net # [SPARC64}: Fix ultra-III and later support of new-style SILO booting. # # arch/sparc64/kernel/head.S # 2004/02/04 11:31:19-08:00 davem@nuts.davemloft.net +18 -2 # [SPARC64}: Fix ultra-III and later support of new-style SILO booting. # # ChangeSet # 2004/02/04 11:24:21-08:00 ysato@users.sourceforge.jp # [PATCH] H8/300 support update (3/3): bitops # # o Cleanup reduced and faster code # # include/asm-h8300/bitops.h # 2004/02/04 06:17:58-08:00 ysato@users.sourceforge.jp +128 -149 # H8/300 support update (3/3): bitops # # ChangeSet # 2004/02/04 11:24:09-08:00 ysato@users.sourceforge.jp # [PATCH] H8/300 support update (2/3): compiler warnings # # o gcc-3.4 warning fix. # # arch/h8300/platform/h8s/ints.c # 2004/02/01 09:09:58-08:00 ysato@users.sourceforge.jp +6 -7 # H8/300 support update (2/3): compiler warnings # # arch/h8300/platform/h8300h/ints.c # 2004/02/04 06:36:33-08:00 ysato@users.sourceforge.jp +6 -7 # H8/300 support update (2/3): compiler warnings # # ChangeSet # 2004/02/04 11:23:57-08:00 ysato@users.sourceforge.jp # [PATCH] H8/300 support update (1/3): obsolete header # # o Deleted obsolute header include # # arch/h8300/lib/checksum.c # 2004/02/04 06:21:23-08:00 ysato@users.sourceforge.jp +0 -1 # H8/300 support update (1/3): obsolete header # # ChangeSet # 2004/02/04 11:20:10-08:00 torvalds@home.osdl.org # Merge bk://linux-scsi.bkbits.net/scsi-for-linus-2.6 # into home.osdl.org:/home/torvalds/v2.5/linux # # include/linux/bio.h # 2004/02/04 11:20:06-08:00 torvalds@home.osdl.org +0 -0 # Auto merged # # drivers/scsi/sd.c # 2004/02/04 11:20:06-08:00 torvalds@home.osdl.org +0 -0 # Auto merged # # drivers/ide/ide.c # 2004/02/04 11:20:06-08:00 torvalds@home.osdl.org +0 -0 # Auto merged # # drivers/cdrom/cdrom.c # 2004/02/04 11:20:06-08:00 torvalds@home.osdl.org +0 -0 # Auto merged # # ChangeSet # 2004/02/04 10:57:45-08:00 sct@redhat.com # [PATCH] Fix block device inode list corruptions # # I've been chasing a weird SELinux bug which shows up mostly when doing # installs of a dev-* rpm (ie. creating and overwriting lots of block # device inodes), but which I've also seen when doing mkinitrd. # # It turned out not to be an SELinux problem at all, but a core VFS # S_ISBLK bug. It seems that SELinux simply widens the race window. # # The code at fault is fs/fs-writeback.c:__mark_inode_dirty(): # # /* # * Only add valid (hashed) inodes to the superblock's # * dirty list. Add blockdev inodes as well. # */ # if (!S_ISBLK(inode->i_mode)) { # if (hlist_unhashed(&inode->i_hash)) # goto out; # if (inode->i_state & (I_FREEING|I_CLEAR)) # goto out; # } # # The "I_FREEING|I_CLEAR" condition was added after the ISBLK/unhashed # tests were already in the source, but I can't see any reason why we'd # want the I_FREEING test not to apply to block devices. And indeed, this # results in all sorts of inode list corruptions. Simply moving the # I_FREEING|I_CLEAR test out of the protection of the S_ISBLK() condition # fixes things entirely. # # The existing 2.6 kernel will reliably fail on me in about 2 seconds once # "rpm -Uvh --force dev*.rpm" starts its actual installation of the new # inodes. With the patch below I can't reproduce it at all. # # fs/fs-writeback.c # 2004/02/03 16:00:00-08:00 sct@redhat.com +2 -2 # Fix block device inode list corruptions # # ChangeSet # 2004/02/04 10:54:15-08:00 akpm@osdl.org # [PATCH] Fix ptrace in the vsyscall dso area # # From: Roland McGrath # # The #include is the part of this patch that matters, so the #ifdef below # works. # # The rest of the patch removes gratuitous duplication due to some strange # aversion to concision in the presence of #ifdef, the kind that is all too # common, utterly pointless, and error prone. # # include/linux/mm.h # 2004/02/03 21:55:34-08:00 akpm@osdl.org +6 -12 # Fix ptrace in the vsyscall dso area # # ChangeSet # 2004/02/04 10:54:06-08:00 akpm@osdl.org # [PATCH] Altix update: pci_bus_cvlink.c fixes # # From: Pat Gefre # # rch/ia64/sn/io/machvec/pci_bus_cvlink.c # Some pretty-print mods # Use pin instead of slot for dma_flush init # # arch/ia64/sn/io/machvec/pci_bus_cvlink.c # 2004/02/03 21:40:01-08:00 akpm@osdl.org +29 -16 # Altix update: pci_bus_cvlink.c fixes # # ChangeSet # 2004/02/04 10:53:57-08:00 akpm@osdl.org # [PATCH] Altix update: pci_bus_cvlink.c fixes # # From: Pat Gefre # # arch/ia64/sn/io/machvec/pci_bus_cvlink.c # Couple of checks for kmalloc <= 0 were fixed # Some __init and static fixes # # arch/ia64/sn/io/machvec/pci_bus_cvlink.c # 2004/02/03 22:08:45-08:00 akpm@osdl.org +17 -11 # Altix update: pci_bus_cvlink.c fixes # # ChangeSet # 2004/02/04 10:53:48-08:00 akpm@osdl.org # [PATCH] Altix update: irq fixes # # From: Pat Gefre # # arch/ia64/sn/kernel/irq.c # Need to get the cpu from the passed in pcibr struct # Made the interrupt list static and gave it a better name - credit jes # Some lindent'isms # Took out some code that isn't used ..... yet # # arch/ia64/sn/kernel/irq.c # 2004/02/03 21:40:00-08:00 akpm@osdl.org +58 -103 # Altix update: irq fixes # # ChangeSet # 2004/02/04 10:53:39-08:00 akpm@osdl.org # [PATCH] Altix update: remove pcibr_intr_func() # # From: Pat Gefre # # arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c # Kill pcibr_intr_func() # # arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c # 2004/02/03 21:39:59-08:00 akpm@osdl.org +2 -134 # Altix update: remove pcibr_intr_func() # # ChangeSet # 2004/02/04 10:53:30-08:00 akpm@osdl.org # [PATCH] Altix update: VGA, keyboard, other changes # # From: Pat Gefre # # arch/ia64/sn/kernel/setup.c # # If generic enabled legacy VGA or kbd - disable them # Slightly different check for work arounds and only do it once # If there is no klconfig info and we are in the simulator - ignore it # Update the pxm_to_nasid() routine. It failed for SP configurations and some # SMP configurations where M-bricks used pxm numbers lower that the first # c-brick. # If we don't find the cpu for pxm, search the memblks for it. # # arch/ia64/sn/kernel/setup.c # 2004/02/03 21:39:58-08:00 akpm@osdl.org +76 -13 # Altix update: VGA, keyboard, other changes # # ChangeSet # 2004/02/04 10:53:22-08:00 akpm@osdl.org # [PATCH] Altix update: early_probe_for_widget() improvement # # From: Pat Gefre # # arch/ia64/sn/io/sn2/ml_iograph.c # Better code for early_probe_for_widget() # # arch/ia64/sn/io/sn2/ml_iograph.c # 2004/02/03 21:39:57-08:00 akpm@osdl.org +14 -15 # Altix update: early_probe_for_widget() improvement # # ChangeSet # 2004/02/04 10:53:13-08:00 akpm@osdl.org # [PATCH] Altix update: pcibr_invalidate_ate check # # From: Pat Gefre # # arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c # check for pcibr_invalidate_ate 0 used for debugging # # arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c # 2004/02/03 21:39:55-08:00 akpm@osdl.org +6 -3 # Altix update: pcibr_invalidate_ate check # # ChangeSet # 2004/02/04 10:53:04-08:00 akpm@osdl.org # [PATCH] Altix update: io changes # # From: Pat Gefre # # arch/ia64/sn/io/platform_init/sgi_io_init.c # use numionodes instead of numnodes # # arch/ia64/sn/io/sn2/klconflib.c # find_lboard changes - generalized a number of the interface funcs # # arch/ia64/sn/io/sn2/klgraph.c # call the more general find_lboard funcs # # arch/ia64/sn/io/sn2/ml_iograph.c # call the more general lboard funcs # # arch/ia64/sn/io/sn2/module.c # lboard changes # mod for headless/memless nodes # # arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c # isIO9 mod # # arch/ia64/sn/kernel/setup.c # headless/memless mod # # include/asm-ia64/sn/klconfig.h # generalized find_lboard funs # # include/asm-ia64/sn/klconfig.h # 2004/02/03 21:39:53-08:00 akpm@osdl.org +4 -3 # Altix update: io changes # # arch/ia64/sn/kernel/setup.c # 2004/02/03 22:08:46-08:00 akpm@osdl.org +31 -4 # Altix update: io changes # # arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c # 2004/02/03 21:39:53-08:00 akpm@osdl.org +11 -3 # Altix update: io changes # # arch/ia64/sn/io/sn2/module.c # 2004/02/03 21:39:53-08:00 akpm@osdl.org +32 -5 # Altix update: io changes # # arch/ia64/sn/io/sn2/ml_iograph.c # 2004/02/03 22:08:47-08:00 akpm@osdl.org +6 -7 # Altix update: io changes # # arch/ia64/sn/io/sn2/klgraph.c # 2004/02/03 21:39:53-08:00 akpm@osdl.org +9 -78 # Altix update: io changes # # arch/ia64/sn/io/sn2/klconflib.c # 2004/02/03 21:39:53-08:00 akpm@osdl.org +59 -156 # Altix update: io changes # # arch/ia64/sn/io/platform_init/sgi_io_init.c # 2004/02/03 21:39:53-08:00 akpm@osdl.org +1 -1 # Altix update: io changes # # ChangeSet # 2004/02/04 10:52:55-08:00 akpm@osdl.org # [PATCH] Altix update: add MINIMAL_ATE_FLAG # # From: Pat Gefre # # arch/ia64/sn/io/machvec/pci_dma.c # Add MINIMAL_ATE_FLAGS() macro usage # # include/asm-ia64/sn/pci/pcibr.h # Add MINIMAL_ATE_FLAG() macro # # include/asm-ia64/sn/pci/pcibr.h # 2004/02/03 21:39:53-08:00 akpm@osdl.org +6 -0 # Altix update: add MINIMAL_ATE_FLAG # # arch/ia64/sn/io/machvec/pci_dma.c # 2004/02/03 21:39:53-08:00 akpm@osdl.org +6 -2 # Altix update: add MINIMAL_ATE_FLAG # # ChangeSet # 2004/02/04 10:52:46-08:00 akpm@osdl.org # [PATCH] Altix update: misc changes # # From: Pat Gefre # # arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c # extern for pcibr_rrb_alloc_more() # # include/asm-ia64/sn/pci/pcibr_private.h # more unsigned to unsigned int # # include/asm-ia64/sn/pci/pcibr_private.h # 2004/02/03 21:39:52-08:00 akpm@osdl.org +5 -5 # Altix update: misc changes # # arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c # 2004/02/03 22:08:48-08:00 akpm@osdl.org +2 -0 # Altix update: misc changes # # ChangeSet # 2004/02/04 10:52:37-08:00 akpm@osdl.org # [PATCH] Altix update: small cleanups # # From: Pat Gefre # # arch/ia64/sn/io/io.c@1.12 # misc code cleanup # no parens on returns # remove __psunsigned_t # # arch/ia64/sn/io/sn2/ml_iograph.c@1.18 # no parens on returns # # arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c@1.25 # no parens on returns # use -errno # # arch/ia64/sn/io/sn2/pcibr/pcibr_hints.c@1.8 # no parens on returns # # arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c@1.15 # no parens on returns # unsigned to unsigned int # # arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c@1.13 # no parens on returns # use -errno # # arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c@1.18 # no parens on returns # use -errno # # arch/ia64/sn/io/sn2/pciio.c@1.14 # oom handling # removed ASSERT and funcs not needed # # arch/ia64/sn/io/sn2/pic.c@1.13 # use -errno # # arch/ia64/sn/io/sn2/shuberror.c@1.12 # add delay.h # # arch/ia64/sn/io/sn2/xbow.c@1.10 # include file clean up # # arch/ia64/sn/io/sn2/xtalk.c@1.9 # misc code cleanup # no parens on returns # # arch/ia64/sn/io/xswitch.c@1.11 # misc code cleanup # # arch/ia64/sn/kernel/bte.c@1.5 # include file clean up # # arch/ia64/sn/kernel/mca.c@1.8 # include file clean up # # arch/ia64/sn/kernel/probe.c@1.5 # include file clean up # # arch/ia64/sn/kernel/sn2/prominfo_proc.c@1.3 # include file clean up # # arch/ia64/sn/kernel/sn2/sn2_smp.c@1.9 # include file clean up # # arch/ia64/sn/kernel/sn2/sn_proc_fs.c@1.4 # include file clean up # # drivers/char/sn_serial.c@1.3 # include file clean up # # include/asm-ia64/sn/addrs.h@1.8 # include file clean up # remove __psunsigned_t # # include/asm-ia64/sn/alenlist.h@1.8 # unsigned to unsigned int # # include/asm-ia64/sn/arch.h@1.7 # include file clean up # # include/asm-ia64/sn/bte.h@1.6 # include file clean up # # include/asm-ia64/sn/clksupport.h@1.8 # include file clean up # # include/asm-ia64/sn/driver.h@1.5 # remove __psunsigned_t # # include/asm-ia64/sn/hcl.h@1.13 # include file clean up # # include/asm-ia64/sn/hcl_util.h@1.7 # include file clean up # # include/asm-ia64/sn/hwgfs.h@1.5 # include file clean up # # include/asm-ia64/sn/iograph.h@1.9 # include file clean up # # include/asm-ia64/sn/klconfig.h@1.14 # remove __psunsigned_t # # include/asm-ia64/sn/kldir.h@1.5 # remove __psunsigned_t # include file clean up # # include/asm-ia64/sn/module.h@1.12 # include file clean up # # include/asm-ia64/sn/nodepda.h@1.14 # include file clean up # # include/asm-ia64/sn/pci/bridge.h@1.13 # uchar_t to unsigned char # # include/asm-ia64/sn/pci/pcibr_private.h@1.20 # move PVnnnnnn's # # include/asm-ia64/sn/pci/pciio.h@1.14 # unsigned to unsigned int # # include/asm-ia64/sn/pci/pciio_private.h@1.10 # unsigned to unsigned int # # include/asm-ia64/sn/pda.h@1.9 # include file clean up # # include/asm-ia64/sn/pio.h@1.7 # include file clean up # ulong to unsigned long # # include/asm-ia64/sn/sgi.h@1.11 # include file clean up # move PVnnnnnn's to here # # include/asm-ia64/sn/sn2/arch.h@1.6 # include file clean up # # include/asm-ia64/sn/sn2/sn_private.h@1.12 # include file clean up # remove __psunsigned_t # # include/asm-ia64/sn/sn_cpuid.h@1.8 # include file clean up # # include/asm-ia64/sn/sn_private.h@1.6 # include file clean up # # include/asm-ia64/sn/types.h@1.6 # include file clean up # remove __psunsigned_t # # include/asm-ia64/sn/vector.h@1.6 # include file clean up # # include/asm-ia64/sn/xtalk/xbow.h@1.9 # include file clean up # misc code cleanup # # include/asm-ia64/sn/xtalk/xtalk.h@1.12 # unsigned to unsigned int # # include/asm-ia64/sn/xtalk/xwidget.h@1.8 # unsigned to unsigned int # # include/asm-ia64/sn/xtalk/xwidget.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +13 -13 # Altix update: small cleanups # # include/asm-ia64/sn/xtalk/xtalk.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +8 -8 # Altix update: small cleanups # # include/asm-ia64/sn/xtalk/xbow.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -18 # Altix update: small cleanups # # include/asm-ia64/sn/vector.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +0 -2 # Altix update: small cleanups # # include/asm-ia64/sn/types.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -7 # Altix update: small cleanups # # include/asm-ia64/sn/sn_private.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +0 -5 # Altix update: small cleanups # # include/asm-ia64/sn/sn_cpuid.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -5 # Altix update: small cleanups # # include/asm-ia64/sn/sn2/sn_private.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +5 -7 # Altix update: small cleanups # # include/asm-ia64/sn/sn2/arch.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +0 -3 # Altix update: small cleanups # # include/asm-ia64/sn/sgi.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +15 -2 # Altix update: small cleanups # # include/asm-ia64/sn/pio.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +2 -4 # Altix update: small cleanups # # include/asm-ia64/sn/pda.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +0 -3 # Altix update: small cleanups # # include/asm-ia64/sn/pci/pciio_private.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +3 -3 # Altix update: small cleanups # # include/asm-ia64/sn/pci/pciio.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +10 -10 # Altix update: small cleanups # # include/asm-ia64/sn/pci/pcibr_private.h # 2004/02/03 22:08:48-08:00 akpm@osdl.org +0 -15 # Altix update: small cleanups # # include/asm-ia64/sn/pci/bridge.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +8 -8 # Altix update: small cleanups # # include/asm-ia64/sn/nodepda.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +2 -2 # Altix update: small cleanups # # include/asm-ia64/sn/module.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -1 # Altix update: small cleanups # # include/asm-ia64/sn/kldir.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +2 -2 # Altix update: small cleanups # # include/asm-ia64/sn/klconfig.h # 2004/02/03 22:08:48-08:00 akpm@osdl.org +4 -4 # Altix update: small cleanups # # include/asm-ia64/sn/iograph.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -0 # Altix update: small cleanups # # include/asm-ia64/sn/hwgfs.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +3 -0 # Altix update: small cleanups # # include/asm-ia64/sn/hcl_util.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +2 -0 # Altix update: small cleanups # # include/asm-ia64/sn/hcl.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -1 # Altix update: small cleanups # # include/asm-ia64/sn/driver.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -1 # Altix update: small cleanups # # include/asm-ia64/sn/clksupport.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +0 -2 # Altix update: small cleanups # # include/asm-ia64/sn/bte.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -2 # Altix update: small cleanups # # include/asm-ia64/sn/arch.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +2 -5 # Altix update: small cleanups # # include/asm-ia64/sn/alenlist.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +9 -9 # Altix update: small cleanups # # include/asm-ia64/sn/addrs.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -3 # Altix update: small cleanups # # drivers/char/sn_serial.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -0 # Altix update: small cleanups # # arch/ia64/sn/kernel/sn2/sn_proc_fs.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -0 # Altix update: small cleanups # # arch/ia64/sn/kernel/sn2/sn2_smp.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -0 # Altix update: small cleanups # # arch/ia64/sn/kernel/sn2/prominfo_proc.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -0 # Altix update: small cleanups # # arch/ia64/sn/kernel/probe.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -0 # Altix update: small cleanups # # arch/ia64/sn/kernel/mca.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -0 # Altix update: small cleanups # # arch/ia64/sn/kernel/bte.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +2 -0 # Altix update: small cleanups # # arch/ia64/sn/io/xswitch.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +7 -3 # Altix update: small cleanups # # arch/ia64/sn/io/sn2/xtalk.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +7 -11 # Altix update: small cleanups # # arch/ia64/sn/io/sn2/xbow.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +4 -0 # Altix update: small cleanups # # arch/ia64/sn/io/sn2/shuberror.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +1 -0 # Altix update: small cleanups # # arch/ia64/sn/io/sn2/pic.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +3 -3 # Altix update: small cleanups # # arch/ia64/sn/io/sn2/pciio.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +5 -7 # Altix update: small cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +41 -41 # Altix update: small cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +6 -6 # Altix update: small cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c # 2004/02/03 22:08:46-08:00 akpm@osdl.org +4 -4 # Altix update: small cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_hints.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +5 -2 # Altix update: small cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c # 2004/02/03 22:08:48-08:00 akpm@osdl.org +17 -21 # Altix update: small cleanups # # arch/ia64/sn/io/sn2/ml_iograph.c # 2004/02/03 22:08:48-08:00 akpm@osdl.org +4 -3 # Altix update: small cleanups # # arch/ia64/sn/io/io.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +21 -21 # Altix update: small cleanups # # ChangeSet # 2004/02/04 10:52:26-08:00 akpm@osdl.org # [PATCH] Altix update: various, mainly cleanups # # From: Pat Gefre # # arch/ia64/sn/io/machvec/pci_bus_cvlink.c # Changes for new pcireg_ interfaces # pcibr reorg # Some code cleanup/reorg # # arch/ia64/sn/io/machvec/pci_dma.c # IS_PCIA64() not needed # # arch/ia64/sn/io/sn2/ml_iograph.c # new pcireg_ interface # # arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c # code reorg/clean up # # arch/ia64/sn/io/sn2/pcibr/pcibr_config.c # code reorg/cleanup # # arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c # reorg/cleanup # # arch/ia64/sn/io/sn2/pcibr/pcibr_error.c # reorg/cleanup # # arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c # reorg/cleanup # # arch/ia64/sn/io/sn2/pcibr/pcibr_reg.c # Fixed the interface to these functions - one call/data type # # arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c # reorg/cleanup # # arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c # reorg/cleanup # # arch/ia64/sn/io/sn2/pciio.c # removed unused functions # # arch/ia64/sn/io/sn2/pic.c # reorg/cleanup # # arch/ia64/sn/kernel/irq.c # IS_PIC_SOFT not needed # mod for new pcireg_ interfaces # # include/asm-ia64/sn/module.h # nodes/geoid[] -> MAX_SLABS # # include/asm-ia64/sn/pci/bridge.h # IS_[X]BRIDGE not needed # # include/asm-ia64/sn/pci/pci_bus_cvlink.h # SET_PCIA64 and IS_PCIA64 not needed # isa64, dma_buf_sync, xbow_buf_sync gone # # include/asm-ia64/sn/pci/pcibr.h # mostly cleanup # some reorg mods # # include/asm-ia64/sn/pci/pcibr_private.h # some reorg code # protos for new pcireg_ interfaces # # include/asm-ia64/sn/pci/pciio.h # cleanup # # include/asm-ia64/sn/pci/pic.h # cleanup # # include/asm-ia64/sn/sn2/intr.h # changed IA64_SN2_FIRST_DEVICE_VECTOR and IA64_SN2_LAST_DEVICE_VECTOR # # include/asm-ia64/sn/sn2/intr.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +2 -2 # Altix update: various, mainly cleanups # # include/asm-ia64/sn/pci/pic.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +141 -668 # Altix update: various, mainly cleanups # # include/asm-ia64/sn/pci/pciio.h # 2004/02/03 22:08:50-08:00 akpm@osdl.org +4 -21 # Altix update: various, mainly cleanups # # include/asm-ia64/sn/pci/pcibr_private.h # 2004/02/03 22:08:50-08:00 akpm@osdl.org +120 -29 # Altix update: various, mainly cleanups # # include/asm-ia64/sn/pci/pcibr.h # 2004/02/03 22:08:48-08:00 akpm@osdl.org +15 -32 # Altix update: various, mainly cleanups # # include/asm-ia64/sn/pci/pci_bus_cvlink.h # 2004/02/03 21:39:51-08:00 akpm@osdl.org +0 -7 # Altix update: various, mainly cleanups # # include/asm-ia64/sn/pci/bridge.h # 2004/02/03 22:08:50-08:00 akpm@osdl.org +4 -4 # Altix update: various, mainly cleanups # # include/asm-ia64/sn/module.h # 2004/02/03 22:08:50-08:00 akpm@osdl.org +3 -6 # Altix update: various, mainly cleanups # # arch/ia64/sn/kernel/irq.c # 2004/02/03 22:08:46-08:00 akpm@osdl.org +2 -6 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/sn2/pic.c # 2004/02/03 22:08:50-08:00 akpm@osdl.org +571 -18 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/sn2/pciio.c # 2004/02/03 22:08:50-08:00 akpm@osdl.org +0 -33 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c # 2004/02/03 22:08:50-08:00 akpm@osdl.org +134 -145 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c # 2004/02/03 22:08:50-08:00 akpm@osdl.org +223 -194 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_reg.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +820 -47 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c # 2004/02/03 22:08:50-08:00 akpm@osdl.org +71 -218 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_error.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +424 -266 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c # 2004/02/03 22:08:50-08:00 akpm@osdl.org +183 -1403 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_config.c # 2004/02/03 21:39:51-08:00 akpm@osdl.org +9 -54 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c # 2004/02/03 22:08:47-08:00 akpm@osdl.org +50 -305 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/sn2/ml_iograph.c # 2004/02/03 22:08:50-08:00 akpm@osdl.org +1 -2 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/machvec/pci_dma.c # 2004/02/03 22:08:48-08:00 akpm@osdl.org +0 -19 # Altix update: various, mainly cleanups # # arch/ia64/sn/io/machvec/pci_bus_cvlink.c # 2004/02/03 22:08:45-08:00 akpm@osdl.org +125 -236 # Altix update: various, mainly cleanups # # ChangeSet # 2004/02/04 10:52:16-08:00 akpm@osdl.org # [PATCH] Fix x86-64 boot problem # # From: Andi Kleen # # Fix a bug introduced with the last merge that prevented booting with # CONFIG_DEBUG_INFO on on x86-64. It would corrupt registers in interrupts. # This has hit a few people, so I would consider it as a critical fix. # # arch/x86_64/kernel/entry.S # 2004/02/03 21:39:43-08:00 akpm@osdl.org +1 -1 # Fix x86-64 boot problem # # ChangeSet # 2004/02/04 10:52:07-08:00 akpm@osdl.org # [PATCH] fix memory leak while coredumping # # From: IWAMOTO Toshihiro # # This patch fixes a memory leak that happens when a core file hits the # process's resource limit. # # fs/binfmt_elf.c # 2004/02/03 21:39:43-08:00 akpm@osdl.org +7 -1 # fix memory leak while coredumping # # ChangeSet # 2004/02/04 10:51:58-08:00 akpm@osdl.org # [PATCH] SElinux compile fix # # From: Geert Uytterhoeven # # Spinlock code needs # # security/selinux/ss/sidtab.c # 2004/02/03 21:39:39-08:00 akpm@osdl.org +1 -0 # SElinux compile fix # # security/selinux/ss/services.c # 2004/02/03 21:39:39-08:00 akpm@osdl.org +1 -0 # SElinux compile fix # # ChangeSet # 2004/02/04 10:51:49-08:00 akpm@osdl.org # [PATCH] DVB compile fix # # From: Geert Uytterhoeven # # Never include directly # # drivers/media/dvb/frontends/dst.c # 2004/02/03 21:39:38-08:00 akpm@osdl.org +1 -1 # DVB compile fix # # ChangeSet # 2004/02/04 10:51:40-08:00 akpm@osdl.org # [PATCH] Hisax compile fix # # From: Geert Uytterhoeven # # Never include directly # # drivers/isdn/hisax/hisax_hfcpci.c # 2004/02/03 21:39:37-08:00 akpm@osdl.org +1 -1 # Hisax compile fix # # ChangeSet # 2004/02/04 10:51:31-08:00 akpm@osdl.org # [PATCH] Specialix compile fix # # From: Geert Uytterhoeven # # Compile fix: add missing #include # # drivers/char/specialix.c # 2004/02/03 21:39:36-08:00 akpm@osdl.org +1 -0 # Specialix compile fix # # ChangeSet # 2004/02/04 10:51:22-08:00 akpm@osdl.org # [PATCH] Moxa serial compile fixes # # From: Geert Uytterhoeven # # Compile fixes for the Moxa serial drivers: # # - Add missing #include # # - Kill warning if CONFIG_PCI is not set # # drivers/char/mxser.c # 2004/02/03 21:39:35-08:00 akpm@osdl.org +3 -4 # Moxa serial compile fixes # # drivers/char/moxa.c # 2004/02/03 21:39:35-08:00 akpm@osdl.org +3 -2 # Moxa serial compile fixes # # ChangeSet # 2004/02/04 10:51:13-08:00 akpm@osdl.org # [PATCH] istallion compile fix # # From: Geert Uytterhoeven # # Fix compilation if CONFIG_PCI is not set # # drivers/char/istallion.c # 2004/02/03 21:39:35-08:00 akpm@osdl.org +2 -1 # istallion compile fix # # ChangeSet # 2004/02/04 10:51:04-08:00 akpm@osdl.org # [PATCH] fix compilation warnings in neofb.c # # From: Junio C Hamano # # Compiling neofb.c without MTRR results in two "unused variable" warnings. # # drivers/video/neofb.c # 2004/02/03 21:39:34-08:00 akpm@osdl.org +2 -4 # fix compilation warnings in neofb.c # # ChangeSet # 2004/02/04 10:50:55-08:00 akpm@osdl.org # [PATCH] ppp: try harder to allocate the deflate buffer # # We're using a 4-order allocation in there and it can fail. Change it to just # keep reclaiming memory until something gives. # # drivers/net/ppp_deflate.c # 2004/02/03 21:39:33-08:00 akpm@osdl.org +1 -1 # ppp: try harder to allocate the deflate buffer # # ChangeSet # 2004/02/04 10:50:46-08:00 akpm@osdl.org # [PATCH] Remove the unused kmalloc_percpu_init() # # From: Martin Hicks # # This patch removes kmalloc_percpu_init() from include/linux/percpu.h # # It is unused and doesn't seem to be required. # # include/linux/percpu.h # 2004/02/03 21:39:33-08:00 akpm@osdl.org +0 -2 # Remove the unused kmalloc_percpu_init() # # ChangeSet # 2004/02/04 10:50:37-08:00 akpm@osdl.org # [PATCH] missing export of cpu_2_node # # From: Patrick Mansfield # # On NUMAQ, any module which calls __alloc_pages() needs cpu_2_node() (via # cpu_to_node()). # # This patch exports cpu_2_node. # # arch/i386/kernel/smpboot.c # 2004/02/03 21:39:33-08:00 akpm@osdl.org +2 -0 # missing export of cpu_2_node # # ChangeSet # 2004/02/04 10:50:28-08:00 akpm@osdl.org # [PATCH] Remove uneeded dentry assignment # # From: James Morris # # It seems to me that this dentry assignment in open_namei is not needed per # the patch below. On this path, dentry is not referenced. # # fs/namei.c # 2004/02/03 21:39:32-08:00 akpm@osdl.org +0 -1 # Remove uneeded dentry assignment # # ChangeSet # 2004/02/04 10:50:19-08:00 akpm@osdl.org # [PATCH] CDROMREADAUDIO frames # # From: Jens Axboe # # 2.6 imposes a 64 frame limit where 2.4 does not (just relies on kmalloc() # failing and limiting frames from that). That breaks at least on guys app. # With MSF adressing, it's much simpler to be able to ask for a full second # at the time, so I think we should just allow that. So bump the limit from # 64 to CD_FRAMES (which is 75). # # drivers/cdrom/cdrom.c # 2004/02/03 21:38:27-08:00 akpm@osdl.org +1 -1 # CDROMREADAUDIO frames # # ChangeSet # 2004/02/04 10:50:09-08:00 akpm@osdl.org # [PATCH] PCI Scan all functions # # From: Jake Moilanen # # On a ppc64 logically partitioned system, there can be a setup where function # 0 of a PCI-PCI bridge is assigned to one partition and (for example) function # 2 is assigned to a second partition. On the second partition, it would # appear that function 0 does not exist, but function 2 does. If all the # functions are not scanned, everything under function 2 would not be detected. # # This patch allows devices that don't respond to function 0, but do respond to # other functions to be marked with a quirk and have all of their functions # scanned. # # include/asm-x86_64/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-v850/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +2 -0 # PCI Scan all functions # # include/asm-um/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-sparc64/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-sparc/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-sh/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-ppc64/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +2 -0 # PCI Scan all functions # # include/asm-ppc/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-parisc/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-mips/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-m68knommu/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +2 -0 # PCI Scan all functions # # include/asm-m68k/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-ia64/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-i386/pci.h # 2004/02/03 21:38:25-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-h8300/pci.h # 2004/02/03 21:38:24-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # include/asm-generic/pci.h # 2004/02/03 21:38:24-08:00 akpm@osdl.org +2 -0 # PCI Scan all functions # # include/asm-arm26/pci.h # 2004/02/03 21:38:24-08:00 akpm@osdl.org +2 -1 # PCI Scan all functions # # include/asm-arm/pci.h # 2004/02/03 21:38:24-08:00 akpm@osdl.org +2 -0 # PCI Scan all functions # # include/asm-alpha/pci.h # 2004/02/03 21:38:24-08:00 akpm@osdl.org +1 -0 # PCI Scan all functions # # drivers/pci/probe.c # 2004/02/03 21:38:24-08:00 akpm@osdl.org +4 -1 # PCI Scan all functions # # arch/ppc64/kernel/pSeries_pci.c # 2004/02/03 21:38:24-08:00 akpm@osdl.org +26 -0 # PCI Scan all functions # # ChangeSet # 2004/02/04 10:49:59-08:00 akpm@osdl.org # [PATCH] Move cpu_vm_mask to be closer to mmu_context_t in struct mm # # From: Jack Steiner # # The cpu_vm_mask use to be close to the mmu_context_t field in the mm # struct. Recently some large members were added between "cpu_vm_mask" and # "context". I suspect that was an oversight. # # Here is a patch that puts the fields close together. This makes it likely # that both fields are in the same cache line. Since both fields are likely # to be updated at the same time, this may improve performance. # # include/linux/sched.h # 2004/02/03 21:38:15-08:00 akpm@osdl.org +2 -1 # Move cpu_vm_mask to be closer to mmu_context_t in struct mm # # ChangeSet # 2004/02/04 10:49:50-08:00 akpm@osdl.org # [PATCH] Lindent fixed to match reality # # From: Matt Mackall # # I've been fiddling with cleaning up some old code here and suggest the # following to make Lindent match actual practice more closely. This does: # # a) (no -psl) # # void *foo(void) # { # # instead of # # void * # foo(void) { # # b) (no -bs) "sizeof(foo)" rather than "sizeof (foo)" # # c) (-ncs) "(void *)foo" rather than "(void *) foo" # # scripts/Lindent # 2004/02/03 21:38:08-08:00 akpm@osdl.org +1 -1 # Lindent fixed to match reality # # ChangeSet # 2004/02/04 10:49:41-08:00 akpm@osdl.org # [PATCH] enable fast symbol lookup via an inverted index in cscope # # From: Louis Zhuang # # enable fast symbol lookup via an inverted index. # # Makefile # 2004/02/03 21:38:00-08:00 akpm@osdl.org +1 -1 # enable fast symbol lookup via an inverted index in cscope # # ChangeSet # 2004/02/04 10:49:32-08:00 akpm@osdl.org # [PATCH] as-iosched.txt update # # From: Dave Olien # # acked by npiggin. # # Documentation/as-iosched.txt # 2004/02/03 21:37:59-08:00 akpm@osdl.org +120 -8 # as-iosched.txt update # # ChangeSet # 2004/02/04 10:49:23-08:00 akpm@osdl.org # [PATCH] shrink_list(): check PageSwapCache() after add_to_swap() # # From: Nikita Danilov # # shrink_list() checks PageSwapCache() before calling add_to_swap(), this # means that anonymous page that is going to be added to the swap right # now these checks return false and: # # (*) it will be unaccounted for in nr_mapped, and # # (*) it won't be written to the swap if gfp_flags include __GFP_IO but # not __GFP_FS. # # (Both will happen only on the next round of scanning.) # # Patch below just moves may_enter_fs initialization down. I am not sure # about (*nr_mapped) increase though. # # mm/vmscan.c # 2004/02/03 21:37:56-08:00 akpm@osdl.org +3 -2 # shrink_list(): check PageSwapCache() after add_to_swap() # # ChangeSet # 2004/02/04 10:49:14-08:00 akpm@osdl.org # [PATCH] Use address hint in mmap for search # # From: Andi Kleen # # When the user gave an address hint in mmap use it as starting point for the # search for !MAP_FIXED. # # Currently it is only checked directly and when already used the free area # cache is used as starting point. With this change you can use mmap(4096, # ....) to e.g. get the lowest free address in your address space, which is # sometimes useful. For example on x86-64 glibc wants to preferably allocate # thread local data in the first 4GB but use higher addresses when this is # not possible. # # This can be a bit more costly in CPU time because it may have to skip over # more VMAs, but gives better semantics for most cases. Most programs pass # NULL as hint anyways so it won't make any difference for them. # # I did it for the generic mmap and for x86-64 for now. Also minor white # space fixes for x86-64. # # mm/mmap.c # 2004/02/03 21:37:50-08:00 akpm@osdl.org +3 -2 # Use address hint in mmap for search # # arch/x86_64/kernel/sys_x86_64.c # 2004/02/03 21:37:50-08:00 akpm@osdl.org +3 -3 # Use address hint in mmap for search # # ChangeSet # 2004/02/04 10:49:05-08:00 akpm@osdl.org # [PATCH] rate limit nr_free_pages # # From: Jes Sorensen # # nr_free_pages() is expensive, especially on large SMP machines. The patch # changes the memory overcommit code so that it only calls nr_free_pages() is # we're about to fail the allocation attempt. # # security/commoncap.c # 2004/02/03 21:37:46-08:00 akpm@osdl.org +14 -1 # rate limit nr_free_pages # # ChangeSet # 2004/02/04 10:48:56-08:00 akpm@osdl.org # [PATCH] ide-cd mo write protect # # From: Jens Axboe # # It's from Pascal Schmidt and adds write protect handling to ide-cd along # with support for non-2kb block sizes. # # include/linux/cdrom.h # 2004/02/03 21:37:42-08:00 akpm@osdl.org +1 -0 # ide-cd mo write protect # # drivers/ide/ide-cd.c # 2004/02/03 21:37:42-08:00 akpm@osdl.org +60 -45 # ide-cd mo write protect # # drivers/cdrom/cdrom.c # 2004/02/03 22:08:56-08:00 akpm@osdl.org +30 -4 # ide-cd mo write protect # # ChangeSet # 2004/02/04 10:48:48-08:00 akpm@osdl.org # [PATCH] proc_check_root() locking fix # # From: Maneesh Soni # # The patch fixes locking in proc_check_root(). It brings is_subdir() call # under vfsmount_lock. Holding vfsmount_lock will ensure mnt_mountpoint # dentry is intact and the dentry does not go away while it is being checked # in is_subdir(). # # fs/proc/base.c # 2004/02/03 21:37:38-08:00 akpm@osdl.org +3 -4 # proc_check_root() locking fix # # ChangeSet # 2004/02/04 10:48:39-08:00 akpm@osdl.org # [PATCH] is_subdir locking fix # # From: Maneesh Soni # # o The following patch fixes is_subdir() races with d_move. Due to concurrent # d_move, in is_subdir() we can end up accessing freed d_parent pointer in # case of pre-emptible kernel. To avoid this we can use rcu_read_lock() and # rcu_read_unlock(). # # o This also fixes the seqlock uses in is_subdir() as we need to restart the # the inner loop with the origianl new_dentry passed to the routine in case # of any rename occured while we are traversing d_parent links. # # fs/dcache.c # 2004/02/03 21:37:33-08:00 akpm@osdl.org +9 -0 # is_subdir locking fix # # ChangeSet # 2004/02/04 10:48:30-08:00 akpm@osdl.org # [PATCH] ac97 OSS driver removal fix # # From: Andrew Zabolotny # # ac97_unregister_driver() is nulling out the ->driver field for all codecs. # It should only null the codecs which are using this driver. # # sound/oss/ac97_codec.c # 2004/02/03 21:37:32-08:00 akpm@osdl.org +6 -6 # ac97 OSS driver removal fix # # ChangeSet # 2004/02/04 10:48:21-08:00 akpm@osdl.org # [PATCH] u_int32_t causes cross-compile problems # # From: Pratik Solanki # # I came across this C standards issue while cross-compiling the Linux kernel # with gcc on Solaris. The file gen_crc32table.c uses the non-standard type # u_int32_t. It's possible that the host machine's sys/types.h does not # define u_int32_t. The attached patch replaces u_int32_t with the POSIX # standard uint32_t and includes POSIX inttypes.h instead of sys/types.h. # # lib/gen_crc32table.c # 2004/02/03 21:37:29-08:00 akpm@osdl.org +6 -6 # u_int32_t causes cross-compile problems # # ChangeSet # 2004/02/04 10:48:12-08:00 akpm@osdl.org # [PATCH] fix menuconfig choice item help display # # From: Bjorn Helgaas # Anders Gustafsson # Roman Zippel # # This patch fixes menuconfig so it can display help text for individual # choice group config entries. # # Previously it would only display the help text attached to the "choice" # item. There was no way to display the help attached to individual config # entries inside the choice group. Typically, the "choice" item has no help # text, and all the useful help is attached to the individual entries, so # this was a bit of a problem. # # scripts/lxdialog/checklist.c # 2004/02/03 21:37:27-08:00 akpm@osdl.org +7 -3 # fix menuconfig choice item help display # # scripts/kconfig/mconf.c # 2004/02/03 21:37:27-08:00 akpm@osdl.org +14 -5 # fix menuconfig choice item help display # # ChangeSet # 2004/02/04 10:48:03-08:00 akpm@osdl.org # [PATCH] /proc/stat:btime fix # # From: George Anzinger , # Petri Kaukasoina # # btime in /proc/stat does not stay constant but decreases at a rate of 15 # secs/day, because we're assuming that HZ is exactly 100. Use the correct # adjustments to fix that up. # # fs/proc/proc_misc.c # 2004/02/03 21:37:27-08:00 akpm@osdl.org +4 -15 # /proc/stat:btime fix # # ChangeSet # 2004/02/04 10:47:54-08:00 akpm@osdl.org # [PATCH] Fine tune the time conversion to eliminate conversion errors. # # From: George Anzinger # # The time conversion code is erroring on the side of a bit too small. The # attached patch forces any error to be on the high side. The current code will # convert 1 nanosecond to zero jiffies (standard says that should be 1). It also # is around 1 nanosecond late on each roll to the next jiffie. # # I have done some error checks with this patch applied and get the following # errors in PPB ( Parts Per Billion): # # HZ nano sec conversion microsecond conversion # 1000 315 45 # 1024 227 40 # 100 28 317 # # In all cases the error is on the high side, which means that the final shift # will, most likely, eliminate the error bits. # # include/linux/time.h # 2004/02/03 21:37:21-08:00 akpm@osdl.org +6 -6 # Fine tune the time conversion to eliminate conversion errors. # # ChangeSet # 2004/02/04 10:47:44-08:00 akpm@osdl.org # [PATCH] UFS: honour `silent' parameter. # # From: GOTO Masanori # # Teach ufs_fill_super() to honour the `silent' parameter. # # fs/ufs/super.c # 2004/02/03 21:37:19-08:00 akpm@osdl.org +20 -12 # UFS: honour `silent' parameter. # # ChangeSet # 2004/02/04 10:47:35-08:00 akpm@osdl.org # [PATCH] try reiserfs before other filesystems # # reiserfs places its superblock in weird places which can result in false # positives and various printks when other filesystems probe a resierfs # filesystem. # # fs/Makefile # 2004/02/03 21:37:17-08:00 akpm@osdl.org +1 -1 # try reiserfs before other filesystems # # ChangeSet # 2004/02/04 10:47:27-08:00 akpm@osdl.org # [PATCH] namei.c: take vfsmount_lock # # From: Mike Waychison # # The attached patch ensures that we grab vfsmount_lock when grabbing a # reference to mnt_parent in follow_up and follow_dotdot. # # We also don't need to access ->mnt_parent in follow_mount and # __follow_down to mntput because we already the parent pointer on the stack. # # fs/namei.c # 2004/02/03 22:08:56-08:00 akpm@osdl.org +9 -7 # namei.c: take vfsmount_lock # # ChangeSet # 2004/02/04 10:47:18-08:00 akpm@osdl.org # [PATCH] __d_path needs vfsmount_lock # # From: Mike Waychison # # - protect vfsmount->mnt_parent by taking vfsmount_lock in __d_path # # fs/dcache.c # 2004/02/03 22:09:01-08:00 akpm@osdl.org +5 -1 # __d_path needs vfsmount_lock # # ChangeSet # 2004/02/04 10:47:09-08:00 akpm@osdl.org # [PATCH] [janitor] vga16fb: add missing iounmap() # # From: "Randy.Dunlap" # Leann Ogasawara # # Patch inserts missing iounmap() on error. # # drivers/video/vga16fb.c # 2004/02/03 21:37:07-08:00 akpm@osdl.org +3 -1 # [janitor] vga16fb: add missing iounmap() # # ChangeSet # 2004/02/04 10:47:00-08:00 akpm@osdl.org # [PATCH] janitor: vgastate: cleanup iounmap() usage # # From: "Randy.Dunlap" # # From: Leann Ogasawara # # Patch inserts missing iounmap's on error and also removes unnecessary # iounmap's. # # drivers/video/vgastate.c # 2004/02/03 21:37:05-08:00 akpm@osdl.org +13 -12 # janitor: vgastate: cleanup iounmap() usage # # ChangeSet # 2004/02/04 10:46:51-08:00 akpm@osdl.org # [PATCH] copy_namespace ENOMEM fix # # From: Marcus Alanen # # The copy_tree() function can return NULL, so this checks for it. # # fs/namespace.c # 2004/02/03 21:37:02-08:00 akpm@osdl.org +5 -1 # copy_namespace ENOMEM fix # # ChangeSet # 2004/02/04 10:46:42-08:00 akpm@osdl.org # [PATCH] oprofile, typo in alpha driver # # From: Philippe Elie # # Unless I miss something this look like a typo, one user reported to get # error from the daemon: 'Unknown event for counter 1' (alpha ev6) and the # behavior was better but not completly sane after trying this patch: he get # spurious event for counter 1 when enabling only counter 0 but rarely now. # No alpha box to test this. # # arch/alpha/oprofile/common.c # 2004/02/03 21:36:59-08:00 akpm@osdl.org +1 -1 # oprofile, typo in alpha driver # # ChangeSet # 2004/02/04 10:46:33-08:00 akpm@osdl.org # [PATCH] oprofile per-cpu buffer overrun # # From: Philippe Elie # # In a ring buffer controlled by a read and write positions we can't use # buffer_size but only buffer_size - 1 entry, the last free entry act as a # guard to avoid write pos overrun. This bug was hidden because the writer, # oprofile_add_sample(), request one more entry than really needed. # # drivers/oprofile/cpu_buffer.c # 2004/02/03 21:36:54-08:00 akpm@osdl.org +2 -2 # oprofile per-cpu buffer overrun # # ChangeSet # 2004/02/04 10:46:26-08:00 akpm@osdl.org # [PATCH] console cleanup # # From: Sam Ravnborg , # Ben Collins # # Fix up the console makefiles and logo generation. # # 1) To make output look like the rest of the kernel build. # # 2) To avoid make utilising chained rules, and therefore issuing a 'rm # drivers/video/logo/linux_logo.c ...' during the build. # # I have previously submitted a few patches for logo/Makefile, but this is the # first one that actually address the problems I have seen in a proper way. # # And no, I did not like such a simple thing to look that complicated, the # other option was to list too many files or to use other types of kbuild/make # magic. # # drivers/video/logo/Makefile # 2004/02/03 21:36:50-08:00 akpm@osdl.org +25 -23 # console cleanup # # drivers/video/console/Makefile # 2004/02/03 21:36:50-08:00 akpm@osdl.org +2 -2 # console cleanup # # ChangeSet # 2004/02/04 10:46:18-08:00 akpm@osdl.org # [PATCH] janitor: sound/oss: use C99 inits. # # From: "Randy.Dunlap" , # "Maciej Soltysiak" # # C99 initializers for linux/sound. # # sound/oss/sb_card.h # 2004/02/03 21:36:39-08:00 akpm@osdl.org +50 -50 # janitor: sound/oss: use C99 inits. # # sound/oss/dmasound/trans_16.c # 2004/02/03 21:36:39-08:00 akpm@osdl.org +22 -22 # janitor: sound/oss: use C99 inits. # # sound/oss/dmasound/tas3004_tables.c # 2004/02/03 21:36:39-08:00 akpm@osdl.org +120 -120 # janitor: sound/oss: use C99 inits. # # sound/oss/dmasound/tas3001c_tables.c # 2004/02/03 21:36:39-08:00 akpm@osdl.org +166 -166 # janitor: sound/oss: use C99 inits. # # sound/oss/dmasound/tas3001c.c # 2004/02/03 21:36:39-08:00 akpm@osdl.org +1 -1 # janitor: sound/oss: use C99 inits. # # ChangeSet # 2004/02/04 10:46:09-08:00 akpm@osdl.org # [PATCH] janitor: dz: verify_area() removal # # From: "Randy.Dunlap" , # Domen Puncer # # drivers/char/dz.c # 2004/02/03 21:36:39-08:00 akpm@osdl.org +1 -9 # janitor: dz: verify_area() removal # # ChangeSet # 2004/02/04 10:46:00-08:00 akpm@osdl.org # [PATCH] janitor: change a few SYSRQ to MAGIC_SYSRQ # # From: "Randy.Dunlap" , # Domen Puncer # # Noone tested that code to see if it really works? # # arch/um/kernel/um_arch.c # 2004/02/03 21:36:27-08:00 akpm@osdl.org +1 -1 # janitor: change a few SYSRQ to MAGIC_SYSRQ # # arch/arm26/kernel/process.c # 2004/02/03 21:36:06-08:00 akpm@osdl.org +1 -1 # janitor: change a few SYSRQ to MAGIC_SYSRQ # # arch/arm/kernel/process.c # 2004/02/03 21:36:06-08:00 akpm@osdl.org +1 -1 # janitor: change a few SYSRQ to MAGIC_SYSRQ # # ChangeSet # 2004/02/04 10:45:51-08:00 akpm@osdl.org # [PATCH] futex: remove redundant test # # From: Jamie Lokier # # One of the tests in unqueue_me() is redundant. If we acquire the spinlock, # the futex must be queued. # # kernel/futex.c # 2004/02/03 21:35:57-08:00 akpm@osdl.org +3 -4 # futex: remove redundant test # # ChangeSet # 2004/02/04 10:45:42-08:00 akpm@osdl.org # [PATCH] Zero last byte of mount option page. # # From: James Morris # # Here's a patch which zeroes the last byte of the mount option data copied # from userspace during mount(2). # # For filesystems which parse mount options as strings (the majority), lack # of a zero terminator could cause the page to be overrun. The source code # comments specify that the maximum size of the mount data is PAGE_SIZE-1, so # this patch will not affect any valid binary-formatted mount data. # # fs/namespace.c # 2004/02/03 22:09:04-08:00 akpm@osdl.org +3 -0 # Zero last byte of mount option page. # # ChangeSet # 2004/02/04 10:45:33-08:00 akpm@osdl.org # [PATCH] posix_timers fixes # # From: George Anzinger # # - Removes C++ comment in favor of C style. # # - Removes the special treatment for MIPS SIGEV values. We only require # (and error if this fails) that the SIGEV_THREAD_ID value not share bits # with the other SIGEV values. Note that mips has yet to define this value # so when they do... # # - Corrects the check for the signal range to be from 1 to SIGRTMAX # inclusive. # # - Adds a check to verify that kmem_cache_alloc() actually returned a timer, # error if not. # # - Fixes a bug in timer_gettime() where the incorrect value was returned if # a signal was pending on the timer OR the timer was a SIGEV_NONE timer. # # kernel/posix-timers.c # 2004/02/03 21:35:50-08:00 akpm@osdl.org +45 -26 # posix_timers fixes # # ChangeSet # 2004/02/04 10:45:24-08:00 akpm@osdl.org # [PATCH] Better "Losing Ticks" Error Message # # From: timothy parkinson # # Seems like a lot of people see the below error message, but aren't quite # sure why it happens or how to fix it. I sure didn't. Here's my attempt at # remedying that. # # arch/i386/kernel/timers/timer_tsc.c # 2004/02/03 21:35:49-08:00 akpm@osdl.org +7 -3 # Better "Losing Ticks" Error Message # # ChangeSet # 2004/02/04 10:45:15-08:00 akpm@osdl.org # [PATCH] Clean up raid6 kbuild output # # From: Sam Ravnborg # # During raid6 compilation with KBUILD_VERBOSE unset we see invokations of # perl commands which should not have been displayed. # # drivers/md/Makefile # 2004/02/03 21:35:35-08:00 akpm@osdl.org +40 -23 # Clean up raid6 kbuild output # # ChangeSet # 2004/02/04 10:45:06-08:00 akpm@osdl.org # [PATCH] Remove memblks from the kernel # # From: "Martin J. Bligh" # # This patch removes memblks from the kernel ... we don't use them, and the # NUMA API that was planning to use them when they were originally designed # isn't going to use them anymore. They're just unnecessary added complexity # now ... time for them to go. # # There's a slight complication in that ia64 uses something with a similar # name for part of its memory layout, but Jes Sorensen kindly untangled them # from each other for us. The patch with his modifications is below. Jes # tested it on ia64, and I testbuilt it with every config in my arsenal. # # mm/page_alloc.c # 2004/02/03 21:35:18-08:00 akpm@osdl.org +0 -2 # Remove memblks from the kernel # # include/linux/mmzone.h # 2004/02/03 21:35:17-08:00 akpm@osdl.org +0 -29 # Remove memblks from the kernel # # include/asm-x86_64/topology.h # 2004/02/03 21:35:17-08:00 akpm@osdl.org +0 -2 # Remove memblks from the kernel # # include/asm-ppc64/topology.h # 2004/02/03 21:35:17-08:00 akpm@osdl.org +0 -4 # Remove memblks from the kernel # # include/asm-ia64/topology.h # 2004/02/03 21:35:17-08:00 akpm@osdl.org +0 -15 # Remove memblks from the kernel # # include/asm-ia64/numa.h # 2004/02/03 21:35:17-08:00 akpm@osdl.org +2 -2 # Remove memblks from the kernel # # include/asm-ia64/mmzone.h # 2004/02/03 21:35:17-08:00 akpm@osdl.org +3 -3 # Remove memblks from the kernel # # include/asm-i386/topology.h # 2004/02/03 21:35:17-08:00 akpm@osdl.org +0 -6 # Remove memblks from the kernel # # include/asm-generic/topology.h # 2004/02/03 21:35:17-08:00 akpm@osdl.org +0 -6 # Remove memblks from the kernel # # include/asm-alpha/topology.h # 2004/02/03 21:35:17-08:00 akpm@osdl.org +0 -3 # Remove memblks from the kernel # # drivers/base/Makefile # 2004/02/03 21:35:17-08:00 akpm@osdl.org +1 -1 # Remove memblks from the kernel # # arch/ia64/mm/numa.c # 2004/02/03 21:35:17-08:00 akpm@osdl.org +4 -21 # Remove memblks from the kernel # # arch/ia64/mm/discontig.c # 2004/02/03 21:35:17-08:00 akpm@osdl.org +3 -3 # Remove memblks from the kernel # # arch/ia64/kernel/acpi.c # 2004/02/03 21:35:17-08:00 akpm@osdl.org +5 -5 # Remove memblks from the kernel # # arch/i386/mach-es7000/topology.c # 2004/02/03 21:35:17-08:00 akpm@osdl.org +0 -4 # Remove memblks from the kernel # # arch/i386/mach-default/topology.c # 2004/02/03 21:35:17-08:00 akpm@osdl.org +0 -4 # Remove memblks from the kernel # # BitKeeper/deleted/.del-memblk.h~e98a9447d32eb831 # 2004/02/04 10:45:02-08:00 akpm@osdl.org +0 -0 # Delete: include/linux/memblk.h # # BitKeeper/deleted/.del-memblk.h~668c4e49b585b458 # 2004/02/04 10:45:01-08:00 akpm@osdl.org +0 -0 # Delete: include/asm-i386/memblk.h # # BitKeeper/deleted/.del-memblk.h~27adb1c9aba284f6 # 2004/02/04 10:45:01-08:00 akpm@osdl.org +0 -0 # Delete: include/asm-x86_64/memblk.h # # BitKeeper/deleted/.del-memblk.c~2bbef07288c2aba2 # 2004/02/04 10:45:01-08:00 akpm@osdl.org +0 -0 # Delete: drivers/base/memblk.c # # ChangeSet # 2004/02/04 10:44:56-08:00 akpm@osdl.org # [PATCH] remove SIIG combo cards PCI ids from parport_pc # # From: Andrey Panin # # support for SIIG made serial/parallel conbo cards was moved to # parport_serial driver some months ago, but their PCI ids still remain in # parport_pc PCI device table. Attached patch removes them. # # drivers/parport/parport_pc.c # 2004/02/03 21:34:24-08:00 akpm@osdl.org +1 -61 # remove SIIG combo cards PCI ids from parport_pc # # ChangeSet # 2004/02/04 10:44:47-08:00 akpm@osdl.org # [PATCH] /proc/paritions: omit removable media # # From: Neil Brown # # If programs like mount use /proc/partitions to find filesystems based on # labels, then surely we want md devices in there as they often contain # filesystems. # # If the problem is that mount-by-label takes forever with removable media # then surely the "right" approch is the following patch, and then actually # set this flag on the "floppy.c" device. (It is already set for ide-floppy # and sd devices). # # drivers/ide/ide-cd.c # 2004/02/03 22:09:00-08:00 akpm@osdl.org +1 -1 # /proc/paritions: omit removable media # # drivers/block/genhd.c # 2004/02/03 21:34:23-08:00 akpm@osdl.org +4 -2 # /proc/paritions: omit removable media # # drivers/block/floppy.c # 2004/02/03 21:34:23-08:00 akpm@osdl.org +1 -0 # /proc/paritions: omit removable media # # ChangeSet # 2004/02/04 10:44:38-08:00 akpm@osdl.org # [PATCH] md: Change the way the name of an md device is printed in error messages. # # From: NeilBrown # # Instead of using ("md%d", mdidx(mddev)), we now use ("%s", mdname(mddev)) # where mdname is the disk_name field in the associated gendisk structure. # This allows future flexability in naming. # # include/linux/raid/md_k.h # 2004/02/03 21:34:10-08:00 akpm@osdl.org +4 -0 # md: Change the way the name of an md device is printed in error messages. # # drivers/md/raid6main.c # 2004/02/03 21:34:10-08:00 akpm@osdl.org +21 -21 # md: Change the way the name of an md device is printed in error messages. # # drivers/md/raid5.c # 2004/02/03 21:34:10-08:00 akpm@osdl.org +20 -20 # md: Change the way the name of an md device is printed in error messages. # # drivers/md/raid1.c # 2004/02/03 21:34:10-08:00 akpm@osdl.org +15 -15 # md: Change the way the name of an md device is printed in error messages. # # drivers/md/raid0.c # 2004/02/03 21:34:10-08:00 akpm@osdl.org +2 -2 # md: Change the way the name of an md device is printed in error messages. # # drivers/md/multipath.c # 2004/02/03 21:34:10-08:00 akpm@osdl.org +14 -16 # md: Change the way the name of an md device is printed in error messages. # # drivers/md/md.c # 2004/02/03 21:34:10-08:00 akpm@osdl.org +66 -66 # md: Change the way the name of an md device is printed in error messages. # # ChangeSet # 2004/02/04 10:44:29-08:00 akpm@osdl.org # [PATCH] md: Collect device IO statistics for MD personalities. # # From: NeilBrown # # Update {read,write}{s,_sectors} on each request to an MD array. # # drivers/md/raid6main.c # 2004/02/03 22:09:10-08:00 akpm@osdl.org +8 -0 # md: Collect device IO statistics for MD personalities. # # drivers/md/raid5.c # 2004/02/03 22:09:10-08:00 akpm@osdl.org +8 -0 # md: Collect device IO statistics for MD personalities. # # drivers/md/raid1.c # 2004/02/03 22:09:10-08:00 akpm@osdl.org +8 -0 # md: Collect device IO statistics for MD personalities. # # drivers/md/raid0.c # 2004/02/03 22:09:10-08:00 akpm@osdl.org +8 -0 # md: Collect device IO statistics for MD personalities. # # drivers/md/multipath.c # 2004/02/03 22:09:10-08:00 akpm@osdl.org +7 -0 # md: Collect device IO statistics for MD personalities. # # drivers/md/linear.c # 2004/02/03 21:34:09-08:00 akpm@osdl.org +8 -0 # md: Collect device IO statistics for MD personalities. # # ChangeSet # 2004/02/04 10:44:20-08:00 akpm@osdl.org # [PATCH] md: Fixes to make debuging output nicer. # # From: NeilBrown # # This patch thanks to Paul Clements and only has # effect if md is compiled with #define DEBUG 1 # # drivers/md/md.c # 2004/02/03 22:09:10-08:00 akpm@osdl.org +8 -7 # md: Fixes to make debuging output nicer. # # ChangeSet # 2004/02/04 10:44:11-08:00 akpm@osdl.org # [PATCH] md: Move the test in preferred_minor to where it is used. # # From: NeilBrown # # A RAID superblock can indicate which minor number the array should be # assembled under. As this is only meaningful when doing auto-start, we move # the test for it being in the valid range to the place where auto-start # happens. When an array is started any other way, it doesn't matter what # value is here. # # drivers/md/md.c # 2004/02/03 22:09:11-08:00 akpm@osdl.org +4 -7 # md: Move the test in preferred_minor to where it is used. # # ChangeSet # 2004/02/04 10:44:02-08:00 akpm@osdl.org # [PATCH] remove_suid() fix # # From: viro@parcelfarce.linux.theplanet.co.uk # # bernhard_heibler@gmx.de has discovered that NFS is very slow when writing to # a file which has execute permissions. See # # http://bugme.osdl.org/show_bug.cgi?id=1936 # # This patch fixes remove_suid() to not try to modify the inode mode on every # write to such a file. # # mm/filemap.c # 2004/02/03 21:34:00-08:00 akpm@osdl.org +22 -9 # remove_suid() fix # # ChangeSet # 2004/02/04 10:43:53-08:00 akpm@osdl.org # [PATCH] Fix deep stack usage in ncpfs # # From: Petr Vandrovec # # # Arjan van de Ven pointed out to me there are no checks on name component # lengths in ncpfs, so potentially 4KB regions could be allocated on stack, # leading to the user controlled stack overflow. # # It was using variable-sized arrays, so this snuck past the static # stack-usage checking tools. # # As NCP is limited to 255 bytes on components, we can simple limit these # local variables to 256 bytes, and after this stack usage looks more # acceptable. Length checking occurs inside ncp_vol2io, during # iocharset->codepage conversion. # # As a side effect support for multibyte codepages now works as it should, # instead of returning -EINVAL whenever filename in 'codepage' encoding was # longer than in 'iocharset'. # # Other part fixes typo where atime change updated ctime and not atime field. # # fs/ncpfs/inode.c # 2004/02/03 21:33:59-08:00 akpm@osdl.org +1 -1 # Fix deep stack usage in ncpfs # # fs/ncpfs/dir.c # 2004/02/03 21:33:59-08:00 akpm@osdl.org +42 -31 # Fix deep stack usage in ncpfs # # ChangeSet # 2004/02/04 10:43:44-08:00 akpm@osdl.org # [PATCH] deprecate the raw driver # # Fat chance, but we should try. # # drivers/char/Kconfig # 2004/02/03 21:33:50-08:00 akpm@osdl.org +5 -1 # deprecate the raw driver # # ChangeSet # 2004/02/04 10:43:35-08:00 akpm@osdl.org # [PATCH] initialise cpu_vm_mask in init_mm # # From: Anton Blanchard # # Some architectures use cpu_vm_mask to optimise TLB flushes. On ppc64 we # are now using a common flush infrastructure that handles both userspace and # kernelspace (vmalloc) pages. In order to avoid triggering this # optimisation we need to mark the init mm as having scheduled on all cpus. # # Things currently work by luck (we check for the cpu only having run on the # local cpu, and the field is initialised to 0), but it would be safer to # initialise it CPU_MASK_ALL. # # include/linux/init_task.h # 2004/02/03 21:33:48-08:00 akpm@osdl.org +1 -0 # initialise cpu_vm_mask in init_mm # # ChangeSet # 2004/02/04 10:43:27-08:00 akpm@osdl.org # [PATCH] osst.c: suppress page allocation failure warnings # # This driver is trying an order-9 allocation and if that fails, order 8, etc. # Crufty, but we do expect failures, so suppress the warnings. # # drivers/scsi/osst.c # 2004/02/03 21:33:43-08:00 akpm@osdl.org +2 -0 # osst.c: suppress page allocation failure warnings # # ChangeSet # 2004/02/04 10:43:18-08:00 akpm@osdl.org # [PATCH] remove valid_addr_bitmap # # From: William Lee Irwin III # # ->valid_addr_bitmap is initialized nowhere. Any kern_addr_valid() testing # it returns 0 unconditionally. # # This patch converts kern_addr_valid() implementations using it to return 0 # as per the above and removes it from structures and zone initialization. # Untested (not even compiletested), though a similar patch also nuking # d_validate() was in use in -wli for several months. # # mm/page_alloc.c # 2004/02/03 22:09:09-08:00 akpm@osdl.org +0 -20 # remove valid_addr_bitmap # # include/linux/mmzone.h # 2004/02/03 22:09:09-08:00 akpm@osdl.org +0 -1 # remove valid_addr_bitmap # # include/asm-ppc64/mmzone.h # 2004/02/03 21:33:37-08:00 akpm@osdl.org +2 -5 # remove valid_addr_bitmap # # include/asm-mips/mmzone.h # 2004/02/03 21:33:37-08:00 akpm@osdl.org +2 -3 # remove valid_addr_bitmap # # include/asm-i386/mmzone.h # 2004/02/03 21:33:37-08:00 akpm@osdl.org +2 -6 # remove valid_addr_bitmap # # include/asm-alpha/mmzone.h # 2004/02/03 21:33:37-08:00 akpm@osdl.org +2 -3 # remove valid_addr_bitmap # # ChangeSet # 2004/02/04 10:43:09-08:00 akpm@osdl.org # [PATCH] console: support for > 127 chars # # From: Nigel Cunningham # # Change the console code to support up to 256 (maybe 255?) columns. # # include/linux/selection.h # 2004/02/03 21:33:35-08:00 akpm@osdl.org +2 -2 # console: support for > 127 chars # # drivers/char/vt.c # 2004/02/03 21:33:35-08:00 akpm@osdl.org +2 -2 # console: support for > 127 chars # # ChangeSet # 2004/02/04 10:43:00-08:00 akpm@osdl.org # [PATCH] fix blockdev --getro for sr, sd, ide-floppy # # From: John McKell # # This 2.6.1 patch works by setting gendisk->policy to the correct value # during initialization as the various drivers decide whether or not the disk # is writeable. This patch persuades "blockdev --getro ..." to correctly # report the read-only state of a newly inserted disk. This patch applies to # sr.c, sd.c and ide-floppy.c. ide-cd.c already has this functionality built # into it. # # Using an Iomega Zip drive as the test case... # # Without the patch, I always see: # # $ sudo blockdev --getro /dev/sda # 0 # $ # # That's only correct for writeable disks though. Only when the patch # is applied do I see a write-protected disk described correctly: # # $ sudo blockdev --getro /dev/sda # 1 # $ # # drivers/scsi/sr.c # 2004/02/03 21:33:20-08:00 akpm@osdl.org +7 -1 # fix blockdev --getro for sr, sd, ide-floppy # # drivers/scsi/sd.c # 2004/02/03 21:33:20-08:00 akpm@osdl.org +2 -0 # fix blockdev --getro for sr, sd, ide-floppy # # drivers/ide/ide-floppy.c # 2004/02/03 21:33:20-08:00 akpm@osdl.org +1 -0 # fix blockdev --getro for sr, sd, ide-floppy # # ChangeSet # 2004/02/04 10:42:51-08:00 akpm@osdl.org # [PATCH] ppc32: Set HZ to 1000 on ppc32 # # From: Benjamin Herrenschmidt # # This patch has been in my tree for monthes and Paulus agrees that it should # be made generic, so here we go, PPC32 is now proud to run at 1000HZ :) # # include/asm-ppc/param.h # 2004/02/03 21:33:14-08:00 akpm@osdl.org +5 -5 # ppc32: Set HZ to 1000 on ppc32 # # ChangeSet # 2004/02/04 10:42:42-08:00 akpm@osdl.org # [PATCH] Make naming of parititions in sysfs match /proc/partitions. # # From: Neil Brown # # In fs/partitions/check.c there are two pieces of code that add a # partition number to a block-device name: # # - the 'disk_name' function # - a snprintf in add_partitions. # # 'disk_name' inserts a 'p' before the partition number if the device # name ends with a digit. The snprintf in add_partitions doesn't. # # This patch rectifies this anomoly so that names in sysfs can be # parsed more reliably. # # # This has been extensively discussed. It will probably break the external # `iostat' tool. But only for disks whose name ends in a digit, which appears # to be only DAC960. # # fs/partitions/check.c # 2004/02/03 21:33:12-08:00 akpm@osdl.org +4 -1 # Make naming of parititions in sysfs match /proc/partitions. # # ChangeSet # 2004/02/04 10:42:35-08:00 akpm@osdl.org # [PATCH] missing `console_driver' with CONFIG_VT && !CONFIG_VT_CONSOLE # # From: Jun Sun # # 'console_driver' is defined only when CONFIG_VT_CONSOLE is set. However it # is used by vty_init() which is outside the scope of CONFIG_VT_CONSOLE. # # drivers/char/vt.c # 2004/02/03 22:09:14-08:00 akpm@osdl.org +2 -2 # missing `console_driver' with CONFIG_VT && !CONFIG_VT_CONSOLE # # ChangeSet # 2004/02/04 10:42:26-08:00 akpm@osdl.org # [PATCH] check do_munmap() failure # # From: Andrea Arcangeli # # Return the proper error code # # mm/mremap.c # 2004/02/04 00:04:56-08:00 akpm@osdl.org +7 -3 # check do_munmap() failure # # ChangeSet # 2004/02/04 10:42:17-08:00 akpm@osdl.org # [PATCH] hugetlbfs cleanup # # From: Anton Blanchard # # Remove some duplicated hugetlbfs code. # # fs/hugetlbfs/inode.c # 2004/02/03 21:33:06-08:00 akpm@osdl.org +4 -59 # hugetlbfs cleanup # # ChangeSet # 2004/02/04 10:42:08-08:00 akpm@osdl.org # [PATCH] libfs mtime/ctime updates # # From: Anton Blanchard # # Update ctime/mtime in libfs where appropriate. # # fs/libfs.c # 2004/02/03 21:33:00-08:00 akpm@osdl.org +7 -0 # libfs mtime/ctime updates # # ChangeSet # 2004/02/04 10:41:59-08:00 akpm@osdl.org # [PATCH] hugetlbfs directory entry cleanup # # From: Anton Blanchard # # hugetlbfs is doing strange things with directory sizes. Al says there is no # semantics for reported size of directories so we can remove this code. # # include/linux/hugetlb.h # 2004/02/03 21:32:57-08:00 akpm@osdl.org +0 -2 # hugetlbfs directory entry cleanup # # fs/hugetlbfs/inode.c # 2004/02/03 22:09:16-08:00 akpm@osdl.org +0 -6 # hugetlbfs directory entry cleanup # # ChangeSet # 2004/02/04 10:41:50-08:00 akpm@osdl.org # [PATCH] vmalloc address offset fix # # From: Anton Blanchard # # Paul wrote a patch to use some of the rmap infrastructure to flush TLB # entries on ppc64. When testing it we found a problem in vmalloc where it # sets up the pte -> address mapping incorrectly. We clear the top bits of # the address but then forget to pass in the full address to # pte_alloc_kernel. The end result is the address in page->index is # truncated. # # I fixed it in a similar way to how zeromap_pmd_range etc does it. I'm # guessing no one uses the rmap hooks on vmalloc pages yet, so havent seen # this problem. # # mm/vmalloc.c # 2004/02/03 21:32:57-08:00 akpm@osdl.org +3 -2 # vmalloc address offset fix # # ChangeSet # 2004/02/04 10:41:41-08:00 akpm@osdl.org # [PATCH] Allow software_suspend to fail # # From: Pavel Machek # # software_suspend() can fail for quite a lot of reasons (for example not # enough swapspace). However current interface returned void, so you could # not propagate error back to userland. This fixes it. Plus # __read_suspend_image() is only done during init time, so we might as well # mark it __init. # # kernel/sys.c # 2004/02/03 21:32:29-08:00 akpm@osdl.org +3 -5 # Allow software_suspend to fail # # kernel/power/swsusp.c # 2004/02/03 21:32:29-08:00 akpm@osdl.org +17 -18 # Allow software_suspend to fail # # include/linux/suspend.h # 2004/02/03 21:32:29-08:00 akpm@osdl.org +19 -7 # Allow software_suspend to fail # # drivers/macintosh/via-pmu.c # 2004/02/03 21:32:35-08:00 akpm@osdl.org +0 -2 # Allow software_suspend to fail # # ChangeSet # 2004/02/04 10:41:31-08:00 akpm@osdl.org # [PATCH] Trivial cleanups for swsusp # # From: Pavel Machek # # This kills unused part of struct and fixes spelling. # # It also fixes codingstyle a bit, converts "can not happen" panic into BUG_ON # (fill_suspend_header() allocates no memory so panic is meaningless) and adds # check for sizeof (struct link) [if that is not PAGE_SIZE, we have *bad* # problem, better check early]. # # kernel/power/swsusp.c # 2004/02/03 22:09:17-08:00 akpm@osdl.org +10 -9 # Trivial cleanups for swsusp # # include/linux/suspend.h # 2004/02/03 22:09:17-08:00 akpm@osdl.org +0 -3 # Trivial cleanups for swsusp # # ChangeSet # 2004/02/04 10:41:21-08:00 akpm@osdl.org # [PATCH] swsusp does not stop DMA properly during resume # # From: Pavel Machek # # To correctly stop all DMA activity, make the boot kernel put all devices # into suspend state before entering the resume kernel image. # # kernel/power/swsusp.c # 2004/02/03 22:09:18-08:00 akpm@osdl.org +13 -30 # swsusp does not stop DMA properly during resume # # ChangeSet # 2004/02/04 10:41:10-08:00 akpm@osdl.org # [PATCH] EDD: read disk80 MBR signature, export through edd module # # From: Matt Domsch # # # There are 4 bytes in the MSDOS master boot record, at offset 0x1b8, # which may contain a per-system-unique signature. By first writing a unique # signature to each disk in the system, then rebooting, and then reading the # MBR to get the signature for the boot disk (int13 dev 80h), userspace may # use it to compare against disks it knows as named /dev/[hs]d[a-z], and thus # determine which disk is the BIOS boot disk, thus where the /boot, / and # boot loaders should be placed. # # This is useful in the case where the BIOS is not EDD3.0 compliant, thus # doesn't provide the PCI bus/dev/fn and IDE/SCSI location of the boot disk, # yet you need to know which disk is the boot disk. It's most useful in OS # installers. # # This patch retrieves the signature from the disk in setup.S, stores it in a # space reserved in the empty_zero_page, copies it somewhere safe in setup.c, # and exports it via /sys/firmware/edd/int13_disk80/mbr_signature in edd.c. # Code is covered under CONFIG_EDD=[ym]. # # include/asm-i386/setup.h # 2004/02/03 21:31:26-08:00 akpm@osdl.org +1 -0 # EDD: read disk80 MBR signature, export through edd module # # include/asm-i386/edd.h # 2004/02/03 21:31:26-08:00 akpm@osdl.org +5 -1 # EDD: read disk80 MBR signature, export through edd module # # arch/i386/kernel/setup.c # 2004/02/03 21:31:26-08:00 akpm@osdl.org +7 -0 # EDD: read disk80 MBR signature, export through edd module # # arch/i386/kernel/i386_ksyms.c # 2004/02/03 21:31:26-08:00 akpm@osdl.org +0 -6 # EDD: read disk80 MBR signature, export through edd module # # arch/i386/kernel/edd.c # 2004/02/03 21:31:29-08:00 akpm@osdl.org +22 -2 # EDD: read disk80 MBR signature, export through edd module # # arch/i386/boot/setup.S # 2004/02/03 21:31:26-08:00 akpm@osdl.org +21 -0 # EDD: read disk80 MBR signature, export through edd module # # Documentation/i386/zero-page.txt # 2004/02/03 21:31:26-08:00 akpm@osdl.org +3 -1 # EDD: read disk80 MBR signature, export through edd module # # ChangeSet # 2004/02/04 10:41:01-08:00 akpm@osdl.org # [PATCH] use __attribute_const__ everywhere # # From: Nikita Danilov # # Replace all existing usages of __attribute__((const)) with # __attribute_const__. # # include/linux/reiserfs_fs.h # 2004/02/03 21:31:19-08:00 akpm@osdl.org +1 -1 # use __attribute_const__ everywhere # # include/asm-sparc/pgtable.h # 2004/02/03 21:31:19-08:00 akpm@osdl.org +10 -10 # use __attribute_const__ everywhere # # include/asm-sparc/btfixup.h # 2004/02/03 21:31:18-08:00 akpm@osdl.org +7 -7 # use __attribute_const__ everywhere # # include/asm-ppc/pgtable.h # 2004/02/03 21:31:18-08:00 akpm@osdl.org +1 -1 # use __attribute_const__ everywhere # # include/asm-ppc/io.h # 2004/02/03 21:31:18-08:00 akpm@osdl.org +1 -1 # use __attribute_const__ everywhere # # include/asm-m68k/virtconvert.h # 2004/02/03 21:31:18-08:00 akpm@osdl.org +2 -2 # use __attribute_const__ everywhere # # include/asm-arm26/thread_info.h # 2004/02/03 21:31:18-08:00 akpm@osdl.org +1 -1 # use __attribute_const__ everywhere # # include/asm-arm26/current.h # 2004/02/03 21:31:18-08:00 akpm@osdl.org +1 -1 # use __attribute_const__ everywhere # # include/asm-arm/thread_info.h # 2004/02/03 21:31:18-08:00 akpm@osdl.org +1 -1 # use __attribute_const__ everywhere # # include/asm-arm/current.h # 2004/02/03 21:31:18-08:00 akpm@osdl.org +1 -1 # use __attribute_const__ everywhere # # include/asm-alpha/byteorder.h # 2004/02/03 21:31:18-08:00 akpm@osdl.org +1 -1 # use __attribute_const__ everywhere # # drivers/usb/class/audio.c # 2004/02/03 21:31:18-08:00 akpm@osdl.org +2 -2 # use __attribute_const__ everywhere # # arch/ia64/kernel/unwind.c # 2004/02/03 21:31:18-08:00 akpm@osdl.org +1 -1 # use __attribute_const__ everywhere # # ChangeSet # 2004/02/04 10:40:51-08:00 akpm@osdl.org # [PATCH] kconfig/wireless: Replace enable with select # # From: Sam Ravnborg # # 'enable' is not documented in Documentation/kbuild/kconfig-language.txt So # remove usage in the only Kconfig file in the kernel tree where it was used. # # drivers/net/wireless/Kconfig # 2004/02/03 21:31:17-08:00 akpm@osdl.org +2 -2 # kconfig/wireless: Replace enable with select # # ChangeSet # 2004/02/04 10:40:42-08:00 akpm@osdl.org # [PATCH] Kconfig: use select statements # # From: Sam Ravnborg # # - Use keyword select in relevant warning # # - Include more information in warnings related to select # # - Move part of error-checking to a sepearate function # # - Added helpers used when issuing warnings - makes code simpler # # - Wrapped most edited lines at column 80 # # scripts/kconfig/menu.c # 2004/02/03 21:31:11-08:00 akpm@osdl.org +79 -45 # Kconfig: use select statements # # ChangeSet # 2004/02/04 10:40:32-08:00 akpm@osdl.org # [PATCH] add readX_relaxed() interface # # From: jbarnes@sgi.com (Jesse Barnes) # # Here's the patch to add the new _relaxed variants for PIO read accesses. # It's been ack'd by gregkh and Grant Grundler, and I think it's ready to # go. # # PCI ordering rules also guarantee that PIO read responses arrive after any # outstanding DMA writes on that bus, since for some devices the result of a # readb() call may signal to the driver that a DMA transaction is complete. In # many cases, however, the driver may want to indicate that the next readb() # call has no relation to any previous DMA writes performed by the device. The # driver can use the readb_relaxed() for these cases, although only some # platforms will honor the relaxed semantics. # # include/asm-x86_64/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +4 -0 # add readX_relaxed() interface # # include/asm-v850/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +4 -0 # add readX_relaxed() interface # # include/asm-sparc64/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +4 -0 # add readX_relaxed() interface # # include/asm-sparc/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +3 -0 # add readX_relaxed() interface # # include/asm-sh/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +4 -0 # add readX_relaxed() interface # # include/asm-s390/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +4 -0 # add readX_relaxed() interface # # include/asm-ppc64/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +4 -0 # add readX_relaxed() interface # # include/asm-ppc/io.h # 2004/02/03 22:09:19-08:00 akpm@osdl.org +3 -0 # add readX_relaxed() interface # # include/asm-parisc/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +5 -0 # add readX_relaxed() interface # # include/asm-mips/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +4 -0 # add readX_relaxed() interface # # include/asm-m68knommu/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +4 -0 # add readX_relaxed() interface # # include/asm-m68k/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +4 -0 # add readX_relaxed() interface # # include/asm-ia64/sn/sn2/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +8 -4 # add readX_relaxed() interface # # include/asm-ia64/machvec_sn2.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +8 -0 # add readX_relaxed() interface # # include/asm-ia64/machvec.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +28 -0 # add readX_relaxed() interface # # include/asm-ia64/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +16 -0 # add readX_relaxed() interface # # include/asm-i386/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +3 -0 # add readX_relaxed() interface # # include/asm-h8300/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +4 -0 # add readX_relaxed() interface # # include/asm-cris/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +3 -0 # add readX_relaxed() interface # # include/asm-arm26/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +3 -0 # add readX_relaxed() interface # # include/asm-arm/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +3 -0 # add readX_relaxed() interface # # include/asm-arm/arch-ebsa110/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +3 -0 # add readX_relaxed() interface # # include/asm-alpha/io.h # 2004/02/03 21:31:10-08:00 akpm@osdl.org +5 -0 # add readX_relaxed() interface # # arch/ia64/sn/kernel/sn2/io.c # 2004/02/03 21:31:10-08:00 akpm@osdl.org +28 -0 # add readX_relaxed() interface # # Documentation/DocBook/deviceiobook.tmpl # 2004/02/03 21:31:10-08:00 akpm@osdl.org +15 -1 # add readX_relaxed() interface # # ChangeSet # 2004/02/04 10:40:22-08:00 akpm@osdl.org # [PATCH] printk_ratelimit() tweaks # # From: Anton Blanchard # # I made a few changes, basically the burst parameter is now in units of # messages, makes much more sense than the old net ratelimit one. # # I also screwed up adding a sysctl_jiffies strategy for the burst parameter. # # net/core/utils.c # 2004/02/03 21:30:55-08:00 akpm@osdl.org +1 -1 # printk_ratelimit() tweaks # # net/core/sysctl_net_core.c # 2004/02/03 21:30:55-08:00 akpm@osdl.org +1 -2 # printk_ratelimit() tweaks # # kernel/sysctl.c # 2004/02/03 21:30:55-08:00 akpm@osdl.org +0 -1 # printk_ratelimit() tweaks # # Documentation/sysctl/kernel.txt # 2004/02/03 21:30:55-08:00 akpm@osdl.org +2 -2 # printk_ratelimit() tweaks # # ChangeSet # 2004/02/04 10:40:13-08:00 akpm@osdl.org # [PATCH] i387: handle copy_from_user() error # # From: "Randy.Dunlap" # Eugene TEO # # arch/i386/kernel/i387.c # 2004/02/03 21:30:39-08:00 akpm@osdl.org +7 -4 # i387: handle copy_from_user() error # # ChangeSet # 2004/02/04 10:40:05-08:00 akpm@osdl.org # [PATCH] bitmap parsing/printing routines, version 4 # # From: Joe Korty # # 1) the version in 2.6.1 is broken, doesn't work on 64bit big endian # machines at all. This needed fixing. I thought it best to fix by # rewriting the printer/parser with an algorithm that is naturally endian & # sizeof(long) resistant. # # 2) I wanted all digits to print, eg, 0000ffff,00000004 not ffff,4. # # 3) I wanted exactly NR_CPUS bits to print (or whatever the bitmap size is # in bits, and not have what is displayed rounded up to the nearest full # byte, as the current version did. # # 4) The bitmap printer and parser should be part of bitmap.[ch] with syntax # and semantics to match. The original lib/mask.c versions did not # recognize this commonality. # # lib/bitmap.c # 2004/02/03 21:30:22-08:00 akpm@osdl.org +146 -3 # bitmap parsing/printing routines, version 4 # # lib/Makefile # 2004/02/03 21:30:01-08:00 akpm@osdl.org +1 -1 # bitmap parsing/printing routines, version 4 # # include/linux/cpumask.h # 2004/02/03 21:30:01-08:00 akpm@osdl.org +3 -8 # bitmap parsing/printing routines, version 4 # # include/linux/bitmap.h # 2004/02/03 21:30:01-08:00 akpm@osdl.org +4 -0 # bitmap parsing/printing routines, version 4 # # BitKeeper/deleted/.del-mask.c~42f93f301bfdde38 # 2004/02/04 10:40:01-08:00 akpm@osdl.org +0 -0 # Delete: lib/mask.c # # ChangeSet # 2004/02/04 10:39:56-08:00 akpm@osdl.org # [PATCH] x86-64 fixes for gcc 3.5 # # From: Andi Kleen # # Fix all the x86-64 warnings with gcc 3.5 and make it compile again. # # include/asm-x86_64/hw_irq.h # 2004/02/03 21:29:32-08:00 akpm@osdl.org +2 -2 # x86-64 fixes for gcc 3.5 # # include/asm-x86_64/apic.h # 2004/02/03 21:29:32-08:00 akpm@osdl.org +1 -1 # x86-64 fixes for gcc 3.5 # # arch/x86_64/mm/init.c # 2004/02/03 21:29:32-08:00 akpm@osdl.org +3 -3 # x86-64 fixes for gcc 3.5 # # arch/x86_64/mm/fault.c # 2004/02/03 21:29:32-08:00 akpm@osdl.org +7 -3 # x86-64 fixes for gcc 3.5 # # arch/x86_64/lib/csum-partial.c # 2004/02/03 21:29:32-08:00 akpm@osdl.org +4 -2 # x86-64 fixes for gcc 3.5 # # arch/x86_64/kernel/suspend_asm.S # 2004/02/03 21:29:32-08:00 akpm@osdl.org +1 -1 # x86-64 fixes for gcc 3.5 # # arch/x86_64/kernel/pci-gart.c # 2004/02/03 21:29:32-08:00 akpm@osdl.org +6 -6 # x86-64 fixes for gcc 3.5 # # arch/x86_64/kernel/nmi.c # 2004/02/03 21:29:32-08:00 akpm@osdl.org +2 -2 # x86-64 fixes for gcc 3.5 # # arch/x86_64/kernel/aperture.c # 2004/02/03 21:29:32-08:00 akpm@osdl.org +19 -11 # x86-64 fixes for gcc 3.5 # # arch/x86_64/ia32/sys_ia32.c # 2004/02/03 21:29:32-08:00 akpm@osdl.org +14 -6 # x86-64 fixes for gcc 3.5 # # ChangeSet # 2004/02/04 10:39:47-08:00 akpm@osdl.org # [PATCH] gcc-3.5: arch/i386/kernel/traps.c # # ++nmi_count(cpu); # # arch/i386/kernel/traps.c: In function `do_nmi': # arch/i386/kernel/traps.c:552: error: invalid lvalue in increment # # and # # include/linux/netdevice.h: In function `__netif_rx_schedule': # include/linux/netdevice.h:818: error: invalid lvalue in assignment # include/linux/netdevice.h: In function `netif_rx_reschedule': # include/linux/netdevice.h:842: error: invalid lvalue in assignment # # # This fix will probably reintroduce unused variable warnings... # # include/linux/irq_cpustat.h # 2004/02/03 21:29:31-08:00 akpm@osdl.org +0 -4 # gcc-3.5: arch/i386/kernel/traps.c # # ChangeSet # 2004/02/04 10:39:38-08:00 akpm@osdl.org # [PATCH] gcc-3.5: drivers/video/vgastate.c # # drivers/video/vgastate.c: In function `save_vga': # drivers/video/vgastate.c:368: error: invalid lvalue in assignment # # drivers/video/vgastate.c # 2004/02/03 22:09:04-08:00 akpm@osdl.org +1 -1 # gcc-3.5: drivers/video/vgastate.c # # ChangeSet # 2004/02/04 10:39:30-08:00 akpm@osdl.org # [PATCH] gcc-3.5: drivers/video/cfbimgblt.c # # drivers/video/cfbimgblt.c: In function `color_imageblit': # drivers/video/cfbimgblt.c:140: error: invalid lvalue in assignment # drivers/video/cfbimgblt.c: In function `slow_imageblit': # drivers/video/cfbimgblt.c:206: error: invalid lvalue in assignment # # drivers/video/cfbimgblt.c # 2004/02/03 21:29:31-08:00 akpm@osdl.org +2 -5 # gcc-3.5: drivers/video/cfbimgblt.c # # ChangeSet # 2004/02/04 10:39:20-08:00 akpm@osdl.org # [PATCH] gcc-3.5: drivers/video/riva/fbdev.c # # drivers/video/riva/fbdev.c: In function `rivafb_load_cursor_image': # drivers/video/riva/fbdev.c:498: error: invalid lvalue in increment # drivers/video/riva/fbdev.c:499: error: invalid lvalue in increment # drivers/video/riva/fbdev.c: In function `rivafb_imageblit': # drivers/video/riva/fbdev.c:1440: error: invalid lvalue in increment # drivers/video/riva/fbdev.c:1449: error: invalid lvalue in increment # # drivers/video/riva/fbdev.c # 2004/02/03 21:29:30-08:00 akpm@osdl.org +8 -4 # gcc-3.5: drivers/video/riva/fbdev.c # # ChangeSet # 2004/02/04 10:39:11-08:00 akpm@osdl.org # [PATCH] gcc-3.5: fbcon.c # # drivers/video/console/fbcon.c: In function `fbcon_set_font': # drivers/video/console/fbcon.c:2000: error: invalid lvalue in decrement # # drivers/video/console/fbcon.c # 2004/02/03 21:29:30-08:00 akpm@osdl.org +4 -2 # gcc-3.5: fbcon.c # # ChangeSet # 2004/02/04 10:39:03-08:00 akpm@osdl.org # [PATCH] gcc-3.5: gdth.c # # drivers/scsi/gdth.c:267:10: warning: extra tokens at end of #ident directive # # drivers/scsi/gdth.c # 2004/02/03 21:29:30-08:00 akpm@osdl.org +0 -1 # gcc-3.5: gdth.c # # ChangeSet # 2004/02/04 10:38:54-08:00 akpm@osdl.org # [PATCH] gcc-3.5: atp870u.c # # drivers/scsi/atp870u.c: In function `send_s870': drivers/scsi/atp870u.c:706: error: invalid lvalue in assignment # drivers/scsi/atp870u.c:707: error: invalid lvalue in assignment # drivers/scsi/atp870u.c:708: error: invalid lvalue in assignment # drivers/scsi/atp870u.c:713: error: invalid lvalue in assignment drivers/scsi/atp870u.c:714: error: invalid lvalue in assignment # drivers/scsi/atp870u.c:715: error: invalid lvalue in assignment # drivers/scsi/atp870u.c:718: error: invalid lvalue in assignment # drivers/scsi/atp870u.c:727: error: invalid lvalue in assignment drivers/scsi/atp870u.c:728: error: invalid lvalue in assignment # drivers/scsi/atp870u.c:729: error: invalid lvalue in assignment # drivers/scsi/atp870u.c:734: error: invalid lvalue in assignment drivers/scsi/atp870u.c:735: error: invalid lvalue in assignment # drivers/scsi/atp870u.c:736: error: invalid lvalue in assignment # # drivers/scsi/atp870u.c # 2004/02/03 21:29:29-08:00 akpm@osdl.org +13 -13 # gcc-3.5: atp870u.c # # ChangeSet # 2004/02/04 10:38:45-08:00 akpm@osdl.org # [PATCH] gcc-3.5: advansys.c # # drivers/scsi/advansys.c: In function `advansys_reset': # drivers/scsi/advansys.c:6022: error: invalid lvalue in assignment # drivers/scsi/advansys.c:6045: error: invalid lvalue in assignment # drivers/scsi/advansys.c: In function `advansys_interrupt': # drivers/scsi/advansys.c:6314: error: invalid lvalue in assignment # drivers/scsi/advansys.c: In function `asc_scsi_done_list': # drivers/scsi/advansys.c:6386: error: invalid lvalue in assignment # drivers/scsi/advansys.c: In function `asc_enqueue': # drivers/scsi/advansys.c:7437: error: invalid lvalue in assignment # drivers/scsi/advansys.c:7445: error: invalid lvalue in assignment # drivers/scsi/advansys.c:7448: error: invalid lvalue in assignment # drivers/scsi/advansys.c: In function `asc_dequeue_list': # drivers/scsi/advansys.c:7569: error: invalid lvalue in assignment # drivers/scsi/advansys.c: In function `asc_rmqueue': # drivers/scsi/advansys.c:7647: error: invalid lvalue in assignment # drivers/scsi/advansys.c:7648: error: invalid lvalue in assignment # # drivers/scsi/advansys.c # 2004/02/03 21:29:29-08:00 akpm@osdl.org +13 -13 # gcc-3.5: advansys.c # # ChangeSet # 2004/02/04 10:38:36-08:00 akpm@osdl.org # [PATCH] gcc-3.5: drivers/scsi/53c700 # # In file included from drivers/scsi/53c700.c:140: # drivers/scsi/53c700.h: In function `NCR_700_set_SXFER': # drivers/scsi/53c700.h:106: error: invalid lvalue in assignment # drivers/scsi/53c700.h:107: error: invalid lvalue in assignment # drivers/scsi/53c700.h: In function `NCR_700_set_depth': # drivers/scsi/53c700.h:116: error: invalid lvalue in assignment # drivers/scsi/53c700.h:117: error: invalid lvalue in assignment # drivers/scsi/53c700.h: In function `NCR_700_set_flag': # drivers/scsi/53c700.h:137: error: invalid lvalue in assignment # drivers/scsi/53c700.h: In function `NCR_700_clear_flag': # drivers/scsi/53c700.h:142: error: invalid lvalue in assignment # # drivers/scsi/53c700.h # 2004/02/03 21:29:29-08:00 akpm@osdl.org +9 -6 # gcc-3.5: drivers/scsi/53c700 # # ChangeSet # 2004/02/04 10:38:27-08:00 akpm@osdl.org # [PATCH] gcc-3.5: pnpbios # # drivers/pnp/pnpbios/core.c:438: warning: use of cast expressions as lvalues is deprecated # # drivers/pnp/pnpbios/core.c # 2004/02/03 21:29:28-08:00 akpm@osdl.org +1 -1 # gcc-3.5: pnpbios # # ChangeSet # 2004/02/04 10:38:18-08:00 akpm@osdl.org # [PATCH] gcc-3.5: video # # drivers/media/video/mxb.c: In function `mxb_probe': # drivers/media/video/mxb.c:264: error: invalid lvalue in assignment # # drivers/media/video/mxb.c # 2004/02/03 21:29:28-08:00 akpm@osdl.org +1 -1 # gcc-3.5: video # # drivers/media/video/hexium_orion.c # 2004/02/03 21:29:28-08:00 akpm@osdl.org +3 -3 # gcc-3.5: video # # drivers/media/video/hexium_gemini.c # 2004/02/03 21:29:28-08:00 akpm@osdl.org +1 -1 # gcc-3.5: video # # drivers/media/video/dpc7146.c # 2004/02/03 21:29:28-08:00 akpm@osdl.org +1 -1 # gcc-3.5: video # # ChangeSet # 2004/02/04 10:38:09-08:00 akpm@osdl.org # [PATCH] gcc-3.5: PCMCIA # # include/pcmcia/mem_op.h: In function `copy_from_pc': # include/pcmcia/mem_op.h:85: error: invalid lvalue in assignment # include/pcmcia/mem_op.h:85: error: invalid lvalue in assignment # include/pcmcia/mem_op.h: In function `copy_to_pc': # include/pcmcia/mem_op.h:97: error: invalid lvalue in assignment # include/pcmcia/mem_op.h:97: error: invalid lvalue in assignment # include/pcmcia/mem_op.h: In function `copy_pc_to_user': # include/pcmcia/mem_op.h:109: error: invalid lvalue in assignment # include/pcmcia/mem_op.h:109: error: invalid lvalue in assignment # include/pcmcia/mem_op.h: In function `copy_user_to_pc': # include/pcmcia/mem_op.h:124: error: invalid lvalue in assignment # include/pcmcia/mem_op.h:124: error: invalid lvalue in assignment # # include/pcmcia/mem_op.h # 2004/02/03 21:29:28-08:00 akpm@osdl.org +15 -5 # gcc-3.5: PCMCIA # # drivers/pcmcia/bulkmem.c # 2004/02/03 21:29:28-08:00 akpm@osdl.org +1 -1 # gcc-3.5: PCMCIA # # ChangeSet # 2004/02/04 10:38:01-08:00 akpm@osdl.org # [PATCH] gcc-3.5: DVB # # drivers/media/dvb/frontends/ves1820.c: In function `ves1820_setup_reg0': # drivers/media/dvb/frontends/ves1820.c:244: error: invalid lvalue in assignment # drivers/media/dvb/frontends/ves1820.c:244: error: invalid lvalue in assignment # drivers/media/dvb/frontends/ves1820.c: In function `ves1820_attach': # drivers/media/dvb/frontends/ves1820.c:541: error: invalid lvalue in assignment # drivers/media/dvb/frontends/ves1820.c:541: error: invalid lvalue in assignment # drivers/media/dvb/frontends/ves1820.c:544: error: invalid lvalue in assignment # drivers/media/dvb/frontends/ves1820.c:544: error: invalid lvalue in assignment # drivers/media/dvb/frontends/ves1820.c:545: error: invalid lvalue in assignment # drivers/media/dvb/frontends/ves1820.c:545: error: invalid lvalue in assignment # drivers/media/dvb/frontends/ves1820.c:546: error: invalid lvalue in assignment # drivers/media/dvb/frontends/ves1820.c:546: error: invalid lvalue in assignment # drivers/media/dvb/frontends/ves1820.c:547: error: invalid lvalue in assignment # drivers/media/dvb/frontends/ves1820.c:547: error: invalid lvalue in assignment # # drivers/media/dvb/frontends/ves1820.c # 2004/02/03 21:29:27-08:00 akpm@osdl.org +16 -8 # gcc-3.5: DVB # # ChangeSet # 2004/02/04 10:37:52-08:00 akpm@osdl.org # [PATCH] gcc-3.5: mtd # # drivers/mtd/chips/cfi_cmdset_0020.c:545: error: invalid lvalue in increment # drivers/mtd/chips/cfi_cmdset_0020.c:547: error: invalid lvalue in increment # drivers/mtd/chips/cfi_cmdset_0020.c:549: error: invalid lvalue in increment # # drivers/mtd/maps/sbc_gxx.c # 2004/02/03 21:29:27-08:00 akpm@osdl.org +1 -1 # gcc-3.5: mtd # # drivers/mtd/maps/elan-104nc.c # 2004/02/03 21:29:27-08:00 akpm@osdl.org +1 -1 # gcc-3.5: mtd # # drivers/mtd/chips/cfi_cmdset_0020.c # 2004/02/03 21:29:27-08:00 akpm@osdl.org +12 -3 # gcc-3.5: mtd # # drivers/mtd/chips/cfi_cmdset_0001.c # 2004/02/03 21:29:27-08:00 akpm@osdl.org +28 -7 # gcc-3.5: mtd # # ChangeSet # 2004/02/04 10:37:43-08:00 akpm@osdl.org # [PATCH] gcc-3.5: raid6 # # drivers/md/raid6x86.h:1:10: warning: extra tokens at end of #ident directive # # drivers/md/raid6x86.h # 2004/02/03 21:29:27-08:00 akpm@osdl.org +0 -1 # gcc-3.5: raid6 # # ChangeSet # 2004/02/04 10:37:34-08:00 akpm@osdl.org # [PATCH] gcc-3.5: drivers/ide/pci/sc1200.c # # drivers/ide/pci/sc1200.c: In function `sc1200_suspend': # drivers/ide/pci/sc1200.c:423: error: invalid lvalue in assignment # # drivers/ide/pci/sc1200.c # 2004/02/03 21:29:26-08:00 akpm@osdl.org +1 -1 # gcc-3.5: drivers/ide/pci/sc1200.c # # ChangeSet # 2004/02/04 10:37:25-08:00 akpm@osdl.org # [PATCH] gcc-3.5: radeon # # drivers/char/drm/radeon_state.c: In function `radeon_cp_dispatch_texture': # drivers/char/drm/radeon_state.c:1411: error: invalid lvalue in assignment # # drivers/char/drm/radeon_state.c # 2004/02/03 21:29:26-08:00 akpm@osdl.org +1 -1 # gcc-3.5: radeon # # ChangeSet # 2004/02/04 10:37:16-08:00 akpm@osdl.org # [PATCH] gcc-3.5: drivers/i2c/chips/it87.c # # drivers/i2c/chips/it87.c:130: warning: conflicting types for built-in function 'log2' # # drivers/i2c/chips/it87.c # 2004/02/03 21:29:26-08:00 akpm@osdl.org +1 -2 # gcc-3.5: drivers/i2c/chips/it87.c # # ChangeSet # 2004/02/04 10:37:07-08:00 akpm@osdl.org # [PATCH] gcc-3.5: net/atm/common.c # # net/atm/common.c: In function `vcc_create': # net/atm/common.c:151: error: invalid lvalue in assignment # # net/atm/common.c # 2004/02/03 21:29:25-08:00 akpm@osdl.org +1 -1 # gcc-3.5: net/atm/common.c # # ChangeSet # 2004/02/04 10:36:59-08:00 akpm@osdl.org # [PATCH] gcc-3.5: drivers/atm/he.c # # drivers/atm/he.c: In function `he_init_one': # drivers/atm/he.c:383: error: invalid lvalue in assignment # drivers/atm/he.c: In function `he_open': # drivers/atm/he.c:2364: error: invalid lvalue in assignment # # drivers/atm/he.c # 2004/02/03 21:29:25-08:00 akpm@osdl.org +2 -2 # gcc-3.5: drivers/atm/he.c # # ChangeSet # 2004/02/04 10:36:50-08:00 akpm@osdl.org # [PATCH] gcc-3.5: drivers/atm/idt77105.c # # drivers/atm/idt77105.c: In function `idt77105_start': # drivers/atm/idt77105.c:268: error: invalid lvalue in assignment # drivers/atm/idt77105.c: In function `idt77105_stop': # drivers/atm/idt77105.c:346: error: invalid lvalue in assignment # # drivers/atm/idt77105.c # 2004/02/03 21:29:25-08:00 akpm@osdl.org +2 -2 # gcc-3.5: drivers/atm/idt77105.c # # ChangeSet # 2004/02/04 10:36:41-08:00 akpm@osdl.org # [PATCH] gcc-3.5: drivers/atm/eni.c # # drivers/atm/eni.c: In function `eni_close': # drivers/atm/eni.c:1878: error: invalid lvalue in assignment # drivers/atm/eni.c: In function `eni_open': # drivers/atm/eni.c:1894: error: invalid lvalue in assignment # drivers/atm/eni.c:1905: error: invalid lvalue in assignment # drivers/atm/eni.c: In function `eni_init_one': # drivers/atm/eni.c:2233: error: invalid lvalue in assignment # # drivers/atm/eni.c # 2004/02/03 21:29:24-08:00 akpm@osdl.org +5 -4 # gcc-3.5: drivers/atm/eni.c # # ChangeSet # 2004/02/04 10:36:32-08:00 akpm@osdl.org # [PATCH] gcc-3.5: ncpfs # # fs/ncpfs/ncplib_kernel.h:164: sorry, unimplemented: inlining failed in call to 'ncp_strnicmp': function body not available # # fs/ncpfs/ncplib_kernel.h # 2004/02/03 21:29:24-08:00 akpm@osdl.org +1 -1 # gcc-3.5: ncpfs # # ChangeSet # 2004/02/04 10:36:23-08:00 akpm@osdl.org # [PATCH] gcc-3.5: drivers/atm/fore200e.c # # drivers/atm/fore200e.c: In function `fore200e_open': # drivers/atm/fore200e.c:1420: error: invalid lvalue in assignment # drivers/atm/fore200e.c: In function `fore200e_register': # drivers/atm/fore200e.c:2485: error: invalid lvalue in assignment # # drivers/atm/fore200e.c # 2004/02/03 21:29:24-08:00 akpm@osdl.org +2 -2 # gcc-3.5: drivers/atm/fore200e.c # # ChangeSet # 2004/02/04 10:36:14-08:00 akpm@osdl.org # [PATCH] gcc-3.5: suni.c # # drivers/atm/suni.c: In function `suni_start': # drivers/atm/suni.c:233: error: invalid lvalue in assignment # # drivers/atm/suni.c # 2004/02/03 21:29:23-08:00 akpm@osdl.org +1 -1 # gcc-3.5: suni.c # # ChangeSet # 2004/02/04 10:36:05-08:00 akpm@osdl.org # [PATCH] gcc-3.5: iphase.c # # drivers/atm/iphase.c: In function `open_tx': # drivers/atm/iphase.c:1757: error: invalid lvalue in assignment # drivers/atm/iphase.c: In function `ia_close': # drivers/atm/iphase.c:2674: error: invalid lvalue in assignment # drivers/atm/iphase.c: In function `ia_open': # drivers/atm/iphase.c:2687: error: invalid lvalue in assignment # drivers/atm/iphase.c:2703: error: invalid lvalue in assignment # drivers/atm/iphase.c: In function `ia_init_one': # drivers/atm/iphase.c:3199: error: invalid lvalue in assignment # # drivers/atm/iphase.c # 2004/02/03 21:29:23-08:00 akpm@osdl.org +5 -5 # gcc-3.5: iphase.c # # ChangeSet # 2004/02/04 10:35:56-08:00 akpm@osdl.org # [PATCH] gcc-3.5: intermezzo # # fs/intermezzo/dir.c: In function `presto_prep': # fs/intermezzo/intermezzo_fs.h:414: sorry, unimplemented: inlining failed in call to 'presto_is_read_only': function body not available # # fs/intermezzo/presto.c: In function `izo_mark_cache': # fs/intermezzo/presto.c:341: error: invalid lvalue in assignment # fs/intermezzo/presto.c:342: error: invalid lvalue in assignment # # fs/intermezzo/sysctl.c # 2004/02/03 21:29:23-08:00 akpm@osdl.org +4 -1 # gcc-3.5: intermezzo # # fs/intermezzo/presto.c # 2004/02/03 21:29:23-08:00 akpm@osdl.org +4 -4 # gcc-3.5: intermezzo # # fs/intermezzo/intermezzo_fs.h # 2004/02/03 21:29:23-08:00 akpm@osdl.org +57 -67 # gcc-3.5: intermezzo # # fs/intermezzo/cache.c # 2004/02/03 21:29:23-08:00 akpm@osdl.org +8 -0 # gcc-3.5: intermezzo # # ChangeSet # 2004/02/04 10:35:47-08:00 akpm@osdl.org # [PATCH] gcc-3.5: drivers/atm/uPD98402.c # # drivers/atm/uPD98402.c: In function `uPD98402_start': # drivers/atm/uPD98402.c:214: error: invalid lvalue in assignment # # drivers/atm/uPD98402.c # 2004/02/03 21:29:22-08:00 akpm@osdl.org +1 -1 # gcc-3.5: drivers/atm/uPD98402.c # # ChangeSet # 2004/02/04 10:35:38-08:00 akpm@osdl.org # [PATCH] gcc-3.5: hfs fixes # # fs/hfs/file_hdr.c: In function `dup_layout': # fs/hfs/file_hdr.c:246: error: invalid lvalue in assignment # # fs/hfs/file_hdr.c # 2004/02/03 21:29:22-08:00 akpm@osdl.org +2 -1 # gcc-3.5: hfs fixes # # ChangeSet # 2004/02/04 10:35:28-08:00 akpm@osdl.org # [PATCH] gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs.h:33:10: warning: extra tokens at end of #ident directive # fs/freevxfs/vxfs_extern.h:75: sorry, unimplemented: inlining failed in call to 'vxfs_put_page': function body not available # # fs/freevxfs/vxfs_super.c # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_subr.c # 2004/02/03 21:29:22-08:00 akpm@osdl.org +6 -9 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_olt.h # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_olt.c # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_lookup.c # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_inode.h # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_inode.c # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_immed.c # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_fshead.h # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_fshead.c # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_extern.h # 2004/02/03 21:29:22-08:00 akpm@osdl.org +1 -3 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_dir.h # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs_bmap.c # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # fs/freevxfs/vxfs.h # 2004/02/03 21:29:22-08:00 akpm@osdl.org +0 -2 # gcc-3.5: vxfs fixes # # ChangeSet # 2004/02/04 10:35:18-08:00 akpm@osdl.org # [PATCH] gcc-3.5: zatm.c fix # # drivers/atm/zatm.c: In function `zatm_close': # drivers/atm/zatm.c:1371: error: invalid lvalue in assignment # drivers/atm/zatm.c: In function `zatm_open': # drivers/atm/zatm.c:1386: error: invalid lvalue in assignment # drivers/atm/zatm.c:1398: error: invalid lvalue in assignment # drivers/atm/zatm.c: In function `zatm_module_init': # drivers/atm/zatm.c:1600: error: invalid lvalue in assignment # # drivers/atm/zatm.c # 2004/02/03 21:29:21-08:00 akpm@osdl.org +5 -4 # gcc-3.5: zatm.c fix # # ChangeSet # 2004/02/04 10:35:09-08:00 akpm@osdl.org # [PATCH] gcc-3.5: fsfilter.h, ntfs.h # # From: Tim Cambrant # # Fix inline decls in fsfilter.h, ntfs.h # # include/linux/fsfilter.h # 2004/02/03 21:29:21-08:00 akpm@osdl.org +16 -16 # gcc-3.5: fsfilter.h, ntfs.h # # fs/ntfs/ntfs.h # 2004/02/03 21:29:21-08:00 akpm@osdl.org +1 -1 # gcc-3.5: fsfilter.h, ntfs.h # # ChangeSet # 2004/02/04 10:35:00-08:00 akpm@osdl.org # [PATCH] gcc-3.5: misc.c warning fix # # arch/i386/boot/compressed/misc.c:107: warning: conflicting types for built-in function 'puts' # # arch/i386/boot/compressed/misc.c # 2004/02/03 21:29:21-08:00 akpm@osdl.org +7 -7 # gcc-3.5: misc.c warning fix # # ChangeSet # 2004/02/04 10:34:51-08:00 akpm@osdl.org # [PATCH] gcc-3.5: i810_accel fix # # drivers/video/i810/i810_accel.c: In function `i810fb_init_ringbuffer': # drivers/video/i810/i810_accel.c:30: sorry, unimplemented: inlining failed in call to 'flush_cache': function body not available # # drivers/video/i810/i810_accel.c # 2004/02/03 21:29:20-08:00 akpm@osdl.org +1 -1 # gcc-3.5: i810_accel fix # # ChangeSet # 2004/02/04 10:34:42-08:00 akpm@osdl.org # [PATCH] gcc-3.5: parport warnings # # drivers/pnp/pnpbios/core.c: In function `pnpbios_probe_system': # drivers/pnp/pnpbios/core.c:438: warning: use of cast expressions as lvalues is deprecated # # drivers/parport/parport_pc.c # 2004/02/03 22:09:09-08:00 akpm@osdl.org +10 -5 # gcc-3.5: parport warnings # # ChangeSet # 2004/02/04 10:34:33-08:00 akpm@osdl.org # [PATCH] gcc-3.5: sound/core/seq/seq_clientmgr.c # # sound/core/seq/seq_clientmgr.c: In function `snd_seq_open': # sound/core/seq/seq_clientmgr.c:331: warning: use of cast expressions as lvalues is deprecated # # sound/core/seq/seq_clientmgr.c # 2004/02/03 21:29:20-08:00 akpm@osdl.org +1 -1 # gcc-3.5: sound/core/seq/seq_clientmgr.c # # ChangeSet # 2004/02/04 10:34:24-08:00 akpm@osdl.org # [PATCH] More 3.4 compilation fixes # # From: Jan Hubicka # # GCC now converts sprintf (a,"%s",b) to strcpy. This lose on kernel as # strcpy is not inlined and not present in library, so one gets linker # failure. It seems to make sense to apply this optimization by hand. # # fs/reiserfs/prints.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +1 -1 # More 3.4 compilation fixes # # drivers/acpi/thermal.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +3 -3 # More 3.4 compilation fixes # # drivers/acpi/scan.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +8 -8 # More 3.4 compilation fixes # # drivers/acpi/processor.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +2 -2 # More 3.4 compilation fixes # # drivers/acpi/power.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +3 -3 # More 3.4 compilation fixes # # drivers/acpi/pci_root.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +2 -2 # More 3.4 compilation fixes # # drivers/acpi/pci_link.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +2 -2 # More 3.4 compilation fixes # # drivers/acpi/fan.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +2 -2 # More 3.4 compilation fixes # # drivers/acpi/ec.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +2 -2 # More 3.4 compilation fixes # # drivers/acpi/button.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +5 -5 # More 3.4 compilation fixes # # drivers/acpi/bus.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +2 -2 # More 3.4 compilation fixes # # drivers/acpi/battery.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +2 -2 # More 3.4 compilation fixes # # drivers/acpi/asus_acpi.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +2 -2 # More 3.4 compilation fixes # # drivers/acpi/ac.c # 2004/02/03 21:29:19-08:00 akpm@osdl.org +2 -2 # More 3.4 compilation fixes # # ChangeSet # 2004/02/04 10:34:15-08:00 akpm@osdl.org # [PATCH] Fix inlining failure (all GCCs) in parport # # From: Jan Hubicka # # GCC never inline extern inline function redefined by new body (because it is # not clear what body one should choose) # # parport contains such duplicated functions for apparently no good reasons. # Both copies differ slightly, not sure whether it is intentional or just # garbage. # # include/linux/parport_pc.h # 2004/02/03 21:29:19-08:00 akpm@osdl.org +10 -10 # Fix inlining failure (all GCCs) in parport # # drivers/parport/parport_pc.c # 2004/02/03 22:09:36-08:00 akpm@osdl.org +2 -89 # Fix inlining failure (all GCCs) in parport # # ChangeSet # 2004/02/04 10:34:06-08:00 akpm@osdl.org # [PATCH] gcc-3.5: _exit fix # # include/asm/unistd.h:397: warning: conflicting types for built-in function '_exit' # # # Just remove the dang thing - nobody uses _exit(). # # Except for the vmware stub, which breaks. So I kindly exported do_exit() to # kernel modules, just for vmware... # # kernel/exit.c # 2004/02/03 21:29:18-08:00 akpm@osdl.org +1 -0 # gcc-3.5: _exit fix # # include/asm-i386/unistd.h # 2004/02/03 21:29:18-08:00 akpm@osdl.org +0 -2 # gcc-3.5: _exit fix # # ChangeSet # 2004/02/04 10:33:57-08:00 akpm@osdl.org # [PATCH] gcc-3.5: keyboard.c fixes # # drivers/char/keyboard.c:205: warning: use of conditional expressions as lvalues is deprecated # # include/linux/input.h # 2004/02/03 21:29:18-08:00 akpm@osdl.org +21 -0 # gcc-3.5: keyboard.c fixes # # drivers/input/evdev.c # 2004/02/03 21:29:18-08:00 akpm@osdl.org +1 -1 # gcc-3.5: keyboard.c fixes # # drivers/char/keyboard.c # 2004/02/03 21:29:18-08:00 akpm@osdl.org +1 -1 # gcc-3.5: keyboard.c fixes # # ChangeSet # 2004/02/04 10:33:48-08:00 akpm@osdl.org # [PATCH] gcc-3.5: elevator.h fixes # # include/linux/elevator.h:106: sorry, unimplemented: inlining failed in call to 'elv_try_last_merge': function body not available # # include/linux/elevator.h # 2004/02/03 21:29:18-08:00 akpm@osdl.org +3 -3 # gcc-3.5: elevator.h fixes # # ChangeSet # 2004/02/04 10:33:39-08:00 akpm@osdl.org # [PATCH] gcc-3.5: ide.h fixes # # include/linux/ide.h:1424: sorry, unimplemented: inlining failed in call to 'SELECT_MASK': function body not available # # include/linux/ide.h # 2004/02/03 21:29:17-08:00 akpm@osdl.org +5 -5 # gcc-3.5: ide.h fixes # # ChangeSet # 2004/02/04 10:33:30-08:00 akpm@osdl.org # [PATCH] gcc-3.5: reiserfs fixes # # include/linux/reiserfs_fs.h:1837: sorry, unimplemented: inlining failed in call to 'decrement_bcount': function body not available # # include/linux/reiserfs_fs.h # 2004/02/03 22:09:19-08:00 akpm@osdl.org +3 -3 # gcc-3.5: reiserfs fixes # # ChangeSet # 2004/02/04 10:33:21-08:00 akpm@osdl.org # [PATCH] gcc-3.5: fix pcm_plugin warnings # # sound/core/oss/pcm_plugin.c # 2004/02/03 21:29:17-08:00 akpm@osdl.org +4 -1 # gcc-3.5: fix pcm_plugin warnings # # ChangeSet # 2004/02/04 10:33:12-08:00 akpm@osdl.org # [PATCH] gcc-3.5: pcm_misc.c warnings # # sound/core/pcm_misc.c:557: warning: use of cast expressions as lvalues is deprecated # sound/core/pcm_misc.c:568: warning: use of cast expressions as lvalues is deprecated # sound/core/pcm_misc.c:569: warning: use of cast expressions as lvalues is deprecated # sound/core/pcm_misc.c:570: warning: use of cast expressions as lvalues is deprecated # sound/core/pcm_misc.c:586: warning: use of cast expressions as lvalues is deprecated # sound/core/pcm_misc.c:596: warning: use of cast expressions as lvalues is deprecated # # sound/core/pcm_misc.c # 2004/02/03 21:29:16-08:00 akpm@osdl.org +13 -9 # gcc-3.5: pcm_misc.c warnings # # ChangeSet # 2004/02/04 10:33:03-08:00 akpm@osdl.org # [PATCH] gcc-3.5: binfmt_elf warning fix # # fs/binfmt_elf.c:171: warning: use of cast expressions as lvalues is deprecated # # fs/binfmt_elf.c # 2004/02/03 22:08:52-08:00 akpm@osdl.org +2 -2 # gcc-3.5: binfmt_elf warning fix # # ChangeSet # 2004/02/04 10:32:55-08:00 akpm@osdl.org # [PATCH] gcc-3.5: #ident fixes # # arch/i386/kernel/msr.c:1:10: warning: extra tokens at end of #ident directive # arch/i386/kernel/cpuid.c:1:10: warning: extra tokens at end of #ident directive # # arch/i386/kernel/msr.c # 2004/02/03 21:29:16-08:00 akpm@osdl.org +0 -1 # gcc-3.5: #ident fixes # # arch/i386/kernel/cpuid.c # 2004/02/03 21:29:16-08:00 akpm@osdl.org +0 -1 # gcc-3.5: #ident fixes # # ChangeSet # 2004/02/04 10:32:45-08:00 akpm@osdl.org # [PATCH] gcc-3.5: fix extern inline decls # # include/linux/bio.h:234: sorry, unimplemented: inlining failed in call to 'bio_phys_segments': function body not available # # include/linux/bio.h # 2004/02/03 21:29:15-08:00 akpm@osdl.org +4 -4 # gcc-3.5: fix extern inline decls # # ChangeSet # 2004/02/04 10:32:36-08:00 akpm@osdl.org # [PATCH] string fixes for gcc 3.4 # # From: Andi Kleen # # gcc 3.4 optimizes sprintf(foo,"%s",string) into strcpy. Unfortunately that # isn't seen by the inliner and linux/i386 has no out-of-line strcpy so you # end up with a linker error. # # This patch adds out of line copies for most string functions to avoid this. # Actually it doesn't export them to modules yet, that would be the next # step. # # BTW In my opinion we shouldn't use inline string functions at all. The # __builtin_str* in modern gcc are better (I used them very successfully on # x86-64) and for the bigger functions like strrchr,strtok et.al. it just # doesn't make any sense to inline them or even code them in assembler. # # Also fix the bcopy prototype gcc was complaining about. # # lib/string.c # 2004/02/03 21:29:15-08:00 akpm@osdl.org +6 -3 # string fixes for gcc 3.4 # # include/asm-i386/string.h # 2004/02/03 21:29:15-08:00 akpm@osdl.org +6 -8 # string fixes for gcc 3.4 # # ChangeSet # 2004/02/04 10:32:27-08:00 akpm@osdl.org # [PATCH] Fix more gcc 3.4 warnings # # From: Andi Kleen # # Just many more warning fixes for a gcc 3.4 snapshot. # # It warns for a lot of things now, e.g. for ?: and ({ ... }) and casts as # lvalues. And for functions marked inline in headers, but no body. # # Actually there are more warnings, i stopped fixing at some point. Some of # the warnings seem to be dubious (e.g. the binfmt_elf.c one, which looks # more like a compiler bug to me) # # I also fixed the _exit() prototype to be void because gcc was complaining # about this. # # lib/crc32.c # 2004/02/03 21:29:15-08:00 akpm@osdl.org +12 -4 # Fix more gcc 3.4 warnings # # kernel/fork.c # 2004/02/03 21:29:15-08:00 akpm@osdl.org +1 -1 # Fix more gcc 3.4 warnings # # include/linux/sched.h # 2004/02/03 22:08:58-08:00 akpm@osdl.org +1 -1 # Fix more gcc 3.4 warnings # # include/linux/reiserfs_fs.h # 2004/02/03 22:09:39-08:00 akpm@osdl.org +9 -9 # Fix more gcc 3.4 warnings # # include/linux/efi.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +2 -2 # Fix more gcc 3.4 warnings # # include/asm-i386/unistd.h # 2004/02/03 22:09:38-08:00 akpm@osdl.org +1 -1 # Fix more gcc 3.4 warnings # # include/asm-i386/hw_irq.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +1 -1 # Fix more gcc 3.4 warnings # # include/asm-i386/apic.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +1 -1 # Fix more gcc 3.4 warnings # # fs/readdir.c # 2004/02/03 21:29:14-08:00 akpm@osdl.org +2 -2 # Fix more gcc 3.4 warnings # # fs/ext3/namei.c # 2004/02/03 21:29:14-08:00 akpm@osdl.org +1 -1 # Fix more gcc 3.4 warnings # # fs/compat_ioctl.c # 2004/02/03 21:29:14-08:00 akpm@osdl.org +3 -1 # Fix more gcc 3.4 warnings # # drivers/ieee1394/highlevel.c # 2004/02/03 21:29:14-08:00 akpm@osdl.org +2 -2 # Fix more gcc 3.4 warnings # # ChangeSet # 2004/02/04 10:32:18-08:00 akpm@osdl.org # [PATCH] sisfb update # # From: Thomas Winischhofer # # sisfb is simply broken in current 2.6.x. This patch updates sisfb to the # current development version which no less than 11 months ahead of the version # in the kernel. # # Updated includes # # - many fixes (duh) # # - support for new chipsets (661, 741, 760) # # - support for new video bridges (301C, 302ELV) # # - removal of all offending fp code (as discussed earlier this month) # # - a lot of code clean-up (which is the main reason for its size) # # include/video/sisfb.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +190 -99 # sisfb update # # drivers/video/sis/vstruct.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +182 -46 # sisfb update # # drivers/video/sis/vgatypes.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +117 -168 # sisfb update # # drivers/video/sis/sis_main.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +509 -220 # sisfb update # # drivers/video/sis/sis_main.c # 2004/02/03 21:29:14-08:00 akpm@osdl.org +2321 -1845 # sisfb update # # drivers/video/sis/sis_accel.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +34 -10 # sisfb update # # drivers/video/sis/sis_accel.c # 2004/02/03 21:29:14-08:00 akpm@osdl.org +111 -65 # sisfb update # # drivers/video/sis/osdef.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +76 -98 # sisfb update # # drivers/video/sis/oem310.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +386 -138 # sisfb update # # drivers/video/sis/oem300.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +211 -354 # sisfb update # # drivers/video/sis/initdef.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +311 -141 # sisfb update # # drivers/video/sis/init301.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +286 -305 # sisfb update # # drivers/video/sis/init301.c # 2004/02/03 21:29:14-08:00 akpm@osdl.org +9299 -8592 # sisfb update # # drivers/video/sis/init.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +2720 -187 # sisfb update # # drivers/video/sis/init.c # 2004/02/03 21:29:14-08:00 akpm@osdl.org +3627 -3976 # sisfb update # # drivers/video/sis/310vtbl.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +1519 -3200 # sisfb update # # drivers/video/sis/300vtbl.h # 2004/02/03 21:29:14-08:00 akpm@osdl.org +702 -2008 # sisfb update # # drivers/video/Kconfig # 2004/02/03 21:29:14-08:00 akpm@osdl.org +11 -10 # sisfb update # # ChangeSet # 2004/02/04 10:32:08-08:00 akpm@osdl.org # [PATCH] kbuild: Unmangle include options for gcc # # From: Sam Ravnborg # # When utilising the make O=... option the include options for gcc were # mangled even when absolute paths was used. Also remove duplication of # CPPFLAGS. They were assigned twice. [It is still possible for # architectures to modify CPPFLAGS]. # # This patch allows xconfig to be build with make O=... xconfig.It will also # help development of external modules with absolute paths for their -I # options. # # Note: As a side effect a full recompile of the kernel takes place due to # changes in number of gcc options. # # scripts/Makefile.lib # 2004/02/03 21:29:13-08:00 akpm@osdl.org +14 -11 # kbuild: Unmangle include options for gcc # # ChangeSet # 2004/02/04 10:31:59-08:00 akpm@osdl.org # [PATCH] ia32 MSI vector handling fix # # From: "Nakajima, Jun" # # To get the vector-based interrupt handling work, we need to give the vector # number to device drivers instead of the IRQ if IRQ < 16. It was not # happening for SCI, and the patch fixes it. In many cases, the IRQ for SCI is # 9, and the problem was not detected, but one particular machine exposed the # bug. # # include/asm-i386/acpi.h # 2004/02/03 21:28:39-08:00 akpm@osdl.org +1 -0 # ia32 MSI vector handling fix # # drivers/acpi/osl.c # 2004/02/03 21:28:39-08:00 akpm@osdl.org +2 -2 # ia32 MSI vector handling fix # # arch/i386/kernel/mpparse.c # 2004/02/03 21:28:39-08:00 akpm@osdl.org +4 -7 # ia32 MSI vector handling fix # # arch/i386/kernel/acpi/boot.c # 2004/02/03 21:29:08-08:00 akpm@osdl.org +9 -1 # ia32 MSI vector handling fix # # ChangeSet # 2004/02/04 10:31:50-08:00 akpm@osdl.org # [PATCH] lock_cpu_hotplug only if CONFIG_CPU_HOTPLUG # # From: Rusty Russell # # The cpucontrol mutex is not required when no cpus can go up and down. # Andrew wrote a wrapper for it to avoid #ifdefs, this expands that to only # be defined for CONFIG_HOTPLUG_CPU, and uses it everywhere. # # The only downside is that the cpucontrol lock was overloaded by my recent # patch to net/core/flow.c to protect it from reentrance, so this # reintroduces the local flow_flush_sem. This code isn't speed critical, so # taking two locks when CONFIG_HOTPLUG_CPU=y is not really an issue. # # net/core/flow.c # 2004/02/03 21:28:12-08:00 akpm@osdl.org +4 -2 # lock_cpu_hotplug only if CONFIG_CPU_HOTPLUG # # kernel/module.c # 2004/02/03 21:28:12-08:00 akpm@osdl.org +3 -3 # lock_cpu_hotplug only if CONFIG_CPU_HOTPLUG # # include/linux/cpu.h # 2004/02/03 21:28:12-08:00 akpm@osdl.org +8 -6 # lock_cpu_hotplug only if CONFIG_CPU_HOTPLUG # # ChangeSet # 2004/02/04 10:31:40-08:00 akpm@osdl.org # [PATCH] VT locking fixes # # From: Benjamin Herrenschmidt # # - Make sure that all console operations are approriately protected under # console_sem. # # - Adds checks to make sure that people are taking console_sem when it is # expected to be held. # # kernel/printk.c # 2004/02/03 21:28:11-08:00 akpm@osdl.org +20 -0 # VT locking fixes # # kernel/power/console.c # 2004/02/03 21:28:11-08:00 akpm@osdl.org +10 -6 # VT locking fixes # # include/linux/console.h # 2004/02/03 21:28:11-08:00 akpm@osdl.org +8 -0 # VT locking fixes # # drivers/char/vt_ioctl.c # 2004/02/03 21:28:11-08:00 akpm@osdl.org +46 -15 # VT locking fixes # # drivers/char/vt.c # 2004/02/03 22:09:15-08:00 akpm@osdl.org +111 -46 # VT locking fixes # # drivers/char/tty_io.c # 2004/02/03 21:28:11-08:00 akpm@osdl.org +6 -1 # VT locking fixes # # drivers/char/selection.c # 2004/02/03 21:28:11-08:00 akpm@osdl.org +4 -0 # VT locking fixes # # ChangeSet # 2004/02/04 10:31:31-08:00 akpm@osdl.org # [PATCH] quiet down SMP boot messages # # From: Jes Sorensen # # I'd like to propose the following for 2.6.1-mm/2.6.2. On systems with a # large number of CPUs the number of printk's flowing by for each CPU # booting starts becoming a real console hog. # # The following patch eliminates a couple of them (already sent a patch to # David for the ia64 specific ones) as well as changes the # "Building zonelist : X" in "Built Y zonelists". IMHO it doesn't make any # sense to print for each zonelist since it's run in a for loop running # from 0 to Y-1 anyway. # # The patch nukes a few new printk's that were introduced with the # scheduler changes to the NUMA code in -mm3, if these are still needed # then I won't fight for that part of the patch. # # mm/page_alloc.c # 2004/02/03 22:09:14-08:00 akpm@osdl.org +1 -1 # quiet down SMP boot messages # # kernel/cpu.c # 2004/02/03 21:28:11-08:00 akpm@osdl.org +0 -1 # quiet down SMP boot messages # # init/main.c # 2004/02/03 21:28:11-08:00 akpm@osdl.org +3 -3 # quiet down SMP boot messages # # ChangeSet # 2004/02/04 10:31:19-08:00 akpm@osdl.org # [PATCH] Allow PCI BARs that start at 0 # # From: Anton Blanchard # # We have IO BARs on ppc64 machines that begin at address 0. The current # pci probe code will ignore anything that starts at 0. Remove these checks. # # drivers/pci/probe.c # 2004/02/03 22:08:57-08:00 akpm@osdl.org +3 -3 # Allow PCI BARs that start at 0 # # ChangeSet # 2004/02/04 10:31:09-08:00 akpm@osdl.org # [PATCH] Remove useless argument from __ste_allocate() # # From: David Gibson # # In the current ppc64 code the function __ste_allocate() in # arch/ppc64/mm/stab.c takes a context parameter which is never used. This # patch removes it. # # arch/ppc64/kernel/stab.c # 2004/02/03 21:28:10-08:00 akpm@osdl.org +5 -6 # Remove useless argument from __ste_allocate() # # ChangeSet # 2004/02/04 10:30:59-08:00 akpm@osdl.org # [PATCH] Make PPC601_SYNC_FIX depend on pmac||prep # # From: Tom Rini # # The following has been approved by Paul, FWIW. # # The following patch makes PPC601_SYNC_FIX depend on PPC_PMAC || PPC_PREP. # It used to depend on ALL_PPC I believe, but this was (at least # semi-intentionally I gather) backed out. The last time this was discussed, # the only platforms old enough to have a 601 to support were pmacs and # preps, so it makes some sense to only ask for these machines. # # arch/ppc/Kconfig # 2004/02/03 21:28:10-08:00 akpm@osdl.org +1 -1 # Make PPC601_SYNC_FIX depend on pmac||prep # # ChangeSet # 2004/02/04 10:30:50-08:00 akpm@osdl.org # [PATCH] Fixes / Enhancements for PPC_GEN550 # # From: Tom Rini # # Various fixes for the PPC_GEN550 backend. # # - Move PPC_GEN550 bool into a more appropriate spot. # # - Add PPC_GEN550 support to the MCPN765 platform. # # - Allow for SERIAL_TEXT_DEBUG on PPC_GEN550. # # - Add missing headers to arch/ppc/syslib/gen550_dbg.c # # - Clean-up the KGDB interface such that we allow for a kgdb_map_scc call, # but do not require one. # # - Add gen550 prototypes to # # - PPC_GEN550 backend code doesn't depend on 8250_SERIAL. # # include/asm-ppc/machdep.h # 2004/02/03 21:28:09-08:00 akpm@osdl.org +1 -0 # Fixes / Enhancements for PPC_GEN550 # # include/asm-ppc/kgdb.h # 2004/02/03 21:28:09-08:00 akpm@osdl.org +10 -1 # Fixes / Enhancements for PPC_GEN550 # # arch/ppc/syslib/gen550_kgdb.c # 2004/02/03 21:28:09-08:00 akpm@osdl.org +1 -1 # Fixes / Enhancements for PPC_GEN550 # # arch/ppc/syslib/gen550_dbg.c # 2004/02/03 21:28:09-08:00 akpm@osdl.org +2 -0 # Fixes / Enhancements for PPC_GEN550 # # arch/ppc/syslib/Makefile # 2004/02/03 21:28:09-08:00 akpm@osdl.org +1 -1 # Fixes / Enhancements for PPC_GEN550 # # arch/ppc/platforms/sandpoint.c # 2004/02/03 21:28:09-08:00 akpm@osdl.org +4 -3 # Fixes / Enhancements for PPC_GEN550 # # arch/ppc/platforms/mcpn765_setup.c # 2004/02/03 21:28:09-08:00 akpm@osdl.org +4 -3 # Fixes / Enhancements for PPC_GEN550 # # arch/ppc/kernel/setup.c # 2004/02/03 21:28:09-08:00 akpm@osdl.org +2 -6 # Fixes / Enhancements for PPC_GEN550 # # arch/ppc/Kconfig # 2004/02/03 22:09:47-08:00 akpm@osdl.org +6 -6 # Fixes / Enhancements for PPC_GEN550 # # ChangeSet # 2004/02/04 10:30:41-08:00 akpm@osdl.org # [PATCH] sn2: set iommu bounce limit # # From: Jes Sorensen # # The following patch sets the IOMMU bounce limit on the SN2 which is require # to avoid some ISA checks in ll_rw_blk.c causing a BUG_ON(). # # arch/ia64/sn/io/machvec/pci_bus_cvlink.c # 2004/02/03 22:08:51-08:00 akpm@osdl.org +5 -0 # sn2: set iommu bounce limit # # ChangeSet # 2004/02/04 10:30:32-08:00 akpm@osdl.org # [PATCH] Eicon isdn driver flush_scheduled_work() fix # # From: Armin # # flush_scheduled_work() may not be called from irq-context and it is not # necessary for the diva_os_cancel_soft_isr() function anyway. # # drivers/isdn/hardware/eicon/divasmain.c # 2004/02/03 21:28:09-08:00 akpm@osdl.org +2 -3 # Eicon isdn driver flush_scheduled_work() fix # # ChangeSet # 2004/02/04 10:30:23-08:00 akpm@osdl.org # [PATCH] Fix race in sched_exit() # # From: Martin Schwidefsky # # Fix a race on sleep_avg in sched_exit(). # # The symptom I saw on 64-bit s390 has been a fixpoint divide exception # because sleep_avg had a value > NS_MAX_SLEEP_AVG. I tracked it down and # the problem is sched_exit which recalculates the parents sleep average # without taking the runqueue lock. schedule() subtracts run_time from # sleep_avg of the previous process. This can turn out negative and is # corrected shortly after the subtraction but that is already too late. # sched_exit() already read the negative value an miscalculated the parents # sleep_avg -> bang. # # I fixed this by adding task_rq_lock/task_rq_unlock to sched_exit(). # # kernel/sched.c # 2004/02/03 21:28:08-08:00 akpm@osdl.org +3 -0 # Fix race in sched_exit() # # ChangeSet # 2004/02/04 03:06:25-05:00 scott.feldman@intel.com # [netdrvr e1000] 82547 interrupt assert/de-assert re-ordering # # * 82547 needs interrupt disable/enable to keep interrupt assertion # state synced between 82547 and APIC. 82547 will re-order # assert and de-assert messages if hub link bus is busy (heavy # traffic). Disabling interrupt on device works around re- # order issue. Note: this is a re-patch. We backed out the # patch because of a report on a system with a 8086:1019 device # would lock up with this patch. Turns out that system was a # pre-production sample. # # drivers/net/e1000/e1000_main.c # 2004/02/02 15:10:43-05:00 scott.feldman@intel.com +16 -0 # 82547 interrupt assert/de-assert re-ordering # # ChangeSet # 2004/02/04 03:06:18-05:00 scott.feldman@intel.com # [netdrvr e1000] on-demand stats support # # * Provide updated stats when requested via ->get_stats or ethtool. # Previously, driver would only update stats every 2 seconds, # which would cause some monitoring apps to show zero change # from one second to the next. # # drivers/net/e1000/e1000_main.c # 2004/02/02 15:06:46-05:00 scott.feldman@intel.com +18 -8 # on-demand stats support # # drivers/net/e1000/e1000_ethtool.c # 2004/02/02 15:05:31-05:00 scott.feldman@intel.com +2 -0 # on-demand stats support # # drivers/net/e1000/e1000.h # 2004/02/02 15:05:38-05:00 scott.feldman@intel.com +4 -0 # on-demand stats support # # ChangeSet # 2004/02/04 03:06:11-05:00 scott.feldman@intel.com # [netdrvr e1000] Misc - copyright, changelog spelling # # * Misc - copyright update, changelog, spelling fixes. # # drivers/net/e1000/e1000_param.c # 2004/02/02 15:14:52-05:00 scott.feldman@intel.com +4 -4 # Misc - copyright, changelog spelling # # drivers/net/e1000/e1000_osdep.h # 2004/02/02 15:14:13-05:00 scott.feldman@intel.com +1 -1 # Misc - copyright, changelog spelling # # drivers/net/e1000/e1000_main.c # 2004/02/02 15:14:08-05:00 scott.feldman@intel.com +9 -4 # Misc - copyright, changelog spelling # # drivers/net/e1000/e1000_hw.h # 2004/02/02 15:12:03-05:00 scott.feldman@intel.com +1 -1 # Misc - copyright, changelog spelling # # drivers/net/e1000/e1000_hw.c # 2004/02/02 15:11:59-05:00 scott.feldman@intel.com +1 -1 # Misc - copyright, changelog spelling # # drivers/net/e1000/e1000_ethtool.c # 2004/02/02 15:11:52-05:00 scott.feldman@intel.com +1 -1 # Misc - copyright, changelog spelling # # drivers/net/e1000/e1000.h # 2004/02/02 15:11:56-05:00 scott.feldman@intel.com +1 -1 # Misc - copyright, changelog spelling # # ChangeSet # 2004/02/04 03:06:04-05:00 scott.feldman@intel.com # [netdrvr e1000] Allow 1000/Full setting for Autoneg param # # * Allow 1000/Full setting for AutoNeg param for Fiber connections. # Jon D Mason [jonmason@us.ibm.com]. # # drivers/net/e1000/e1000_param.c # 2004/02/02 15:11:26-05:00 scott.feldman@intel.com +3 -3 # Allow 1000/Full setting for Autoneg param # # ChangeSet # 2004/02/04 03:05:56-05:00 scott.feldman@intel.com # [netdrvr e1000] tx_lock # # * Fix race in Tx performance path with tx_lock. Between checking # if we're out of resources and stopping the queue, we can get # a hard interrupt which will clean up all Tx work, and wake # the queue. Coming out of hard interrupt context, we stop the # queue even though no work was queued, and all work completed # has been cleaned up. Scenario requires ring to be completely # filled, which is more likely to happen with TSO, since each # TSO send consumes multiple ring entries. # # drivers/net/e1000/e1000_main.c # 2004/02/02 15:08:10-05:00 scott.feldman@intel.com +12 -0 # tx_lock # # drivers/net/e1000/e1000.h # 2004/02/02 15:07:29-05:00 scott.feldman@intel.com +1 -0 # tx_lock # # ChangeSet # 2004/02/04 03:05:49-05:00 scott.feldman@intel.com # [netdrvr e1000] Serial-over-LAN (SoL) fix # # * Set VLAN filtering to IEEE 802.1Q after reset so we don't # break Serial-over-LAN (SoL) connections that use VLANs. # # drivers/net/e1000/e1000_main.c # 2004/02/02 15:09:00-05:00 scott.feldman@intel.com +4 -2 # Serial-over-LAN (SoL) fix # # ChangeSet # 2004/02/04 03:05:42-05:00 rddunlap@osdl.org # [PATCH] sundance: correct printk of dma_addr_t # # fix dma_addr_t type error with CONFIG_HIGHMEM64G=y; # # drivers/net/sundance.c # 2004/02/03 17:54:28-05:00 rddunlap@osdl.org +4 -4 # sundance: correct printk of dma_addr_t # # ChangeSet # 2004/02/04 03:05:35-05:00 rddunlap@osdl.org # [PATCH] yellowfin: correct printk of dma_addr_t # # fix dma_addr_t type error with CONFIG_HIGHMEM64G=y; # # drivers/net/yellowfin.c # 2004/02/03 18:02:22-05:00 rddunlap@osdl.org +4 -2 # yellowfin: correct printk of dma_addr_t # # ChangeSet # 2004/02/03 10:12:45-06:00 James.Bottomley@steeleye.com # [PATCH] scsi_mid_low_api.txt update to clarify queuecommand return values # # The only documentation about the MLQUEUE returns is in the code, it # should also be in here. # # Documentation/scsi/scsi_mid_low_api.txt # 2004/02/01 04:45:23-06:00 James.Bottomley@steeleye.com +38 -8 # scsi_mid_low_api.txt update to clarify queuecommand return values # # ChangeSet # 2004/02/02 16:55:53-06:00 jejb@raven.il.steeleye.com # minor mptfusion fix # # I found a minor bug in that patch. Its in mptbase_remove(). I saw # it this morning when compiling a driver for x86_64 platform. Funny # how it didn't complain in x86 system. # # drivers/message/fusion/mptbase.c # 2004/02/02 16:55:17-06:00 jejb@raven.il.steeleye.com +1 -1 # minor mptfusion fix # # ChangeSet # 2004/02/02 14:54:26-06:00 jejb@raven.il.steeleye.com # SCSI: remove mac_NCR5380 driver # # It's vestigial (it doesn't have a build entry in the Makefile) # # BitKeeper/deleted/.del-mac_NCR5380.c~84295528992f65ce # 2004/02/02 14:52:16-06:00 jejb@raven.il.steeleye.com +0 -0 # Delete: drivers/scsi/mac_NCR5380.c # # ChangeSet # 2004/02/02 14:51:38-06:00 jejb@raven.il.steeleye.com # SCSI: Remove AM53c974 driver # # It hasn't compiled for ages and no-one seems to care ... # # drivers/scsi/Makefile # 2004/02/02 14:51:02-06:00 jejb@raven.il.steeleye.com +0 -1 # SCSI: Remove AM53c974 driver # # drivers/scsi/Kconfig # 2004/02/02 14:51:02-06:00 jejb@raven.il.steeleye.com +0 -17 # SCSI: Remove AM53c974 driver # # BitKeeper/deleted/.del-AM53C974.txt~cb6c9945387d9bf4 # 2004/02/02 14:49:47-06:00 jejb@raven.il.steeleye.com +0 -0 # Delete: Documentation/scsi/AM53C974.txt # # BitKeeper/deleted/.del-AM53C974.h~179b676db2a06b4e # 2004/02/02 14:49:38-06:00 jejb@raven.il.steeleye.com +0 -0 # Delete: drivers/scsi/AM53C974.h # # BitKeeper/deleted/.del-AM53C974.c~3084fff5b31a0a96 # 2004/02/02 14:49:37-06:00 jejb@raven.il.steeleye.com +0 -0 # Delete: drivers/scsi/AM53C974.c # # ChangeSet # 2004/02/02 12:30:01-06:00 jejb@raven.il.steeleye.com # SCSI: remove qlogicfc driver # # The qla2xxx drivers take its place # # drivers/scsi/Makefile # 2004/02/02 12:28:47-06:00 jejb@raven.il.steeleye.com +0 -1 # SCSI: remove qlogicfc driver # # drivers/scsi/Kconfig # 2004/02/02 12:28:47-06:00 jejb@raven.il.steeleye.com +0 -17 # SCSI: remove qlogicfc driver # # BitKeeper/deleted/.del-qlogicfc_asm.c~f8b6cc75b1a90f03 # 2004/02/02 12:25:27-06:00 jejb@raven.il.steeleye.com +0 -0 # Delete: drivers/scsi/qlogicfc_asm.c # # BitKeeper/deleted/.del-qlogicfc.h~5a27b5a5e3feb3a # 2004/02/02 12:25:27-06:00 jejb@raven.il.steeleye.com +0 -0 # Delete: drivers/scsi/qlogicfc.h # # BitKeeper/deleted/.del-qlogicfc.c~90c4f6da353fe49f # 2004/02/02 12:25:26-06:00 jejb@raven.il.steeleye.com +0 -0 # Delete: drivers/scsi/qlogicfc.c # # ChangeSet # 2004/02/02 11:35:38-06:00 jejb@raven.il.steeleye.com # SCSI: BusLogic update # # From: Bob Doyle # # Deleted dead code: # - BusLogic_ReportTargetDeviceInfo() # - BusLogic_SelectQueueDepths() # - BusLogic_SendBusDeviceReset() # - BusLogic_ResetCommand() # # Fixed: # - removed dependency on "scsi_obsolete.h" # o Changes to BusLogic_ResetHostAdapter() # o Changes to BusLogic_AbortCommand() # - removed the gratuitous typedefs per Christoph's comments # - several functions with incorrect __init and __exit sections. # - Removed vestiges of the 'Error Recovery' command line function (which # is fundamentally incompatible with the new EH design). # # Left to do: # - Test eh_abort_handler # - Test eh_host_reset_handler # - Test as module # - Straighten out FlashPoint conditional compile so it doesn't # require #include "FlashPoint.c". # - Please ignore the long line length and the very lengthy # identifiers (for now). # # drivers/scsi/FlashPoint.c # 2004/02/02 11:34:27-06:00 jejb@raven.il.steeleye.com +8 -8 # SCSI: BusLogic update # # drivers/scsi/BusLogic.h # 2004/02/02 11:34:26-06:00 jejb@raven.il.steeleye.com +288 -604 # SCSI: BusLogic update # # drivers/scsi/BusLogic.c # 2004/02/02 11:34:26-06:00 jejb@raven.il.steeleye.com +414 -956 # SCSI: BusLogic update # # Documentation/scsi/BusLogic.txt # 2004/02/02 11:34:25-06:00 jejb@raven.il.steeleye.com +7 -53 # SCSI: BusLogic update # # ChangeSet # 2004/02/02 10:56:42-06:00 patmans@us.ibm.com # [PATCH] add scsi_cmd_ioctl (SG_IO) support for st # # Add SG_IO support for st, so we can send scsi commands directly to an st # device. # # Though st (still?) needs to move to move away from cdev for udev to # function with it. # # drivers/scsi/st.c # 2004/02/01 05:53:03-06:00 patmans@us.ibm.com +43 -1 # add scsi_cmd_ioctl (SG_IO) support for st # # ChangeSet # 2004/02/02 10:53:17-06:00 patmans@us.ibm.com # [PATCH] change scsi_cmd_ioctl to take a gendisk instead of a queue # # This patch against a recent bk 2.6 changes scsi_cmd_ioctl to take a # gendisk as an argument instead of a request_queue_t. This allows scsi char # devices to use the scsi_cmd_ioctl interface. # # In turn, change bio_map_user to also pass a request_queue_t, and add a # __bio_add_page helper that takes a request_queue_t. # # Tested ide cd burning with no problems. # # If the scsi upper level scsi_cmd_ioctl usage were consolidated in # scsi_prep_fn, we could pass a request_queue_t instead of a gendisk to # scsi_cmd_ioctl. # # include/linux/blkdev.h # 2004/02/01 05:53:03-06:00 patmans@us.ibm.com +1 -1 # change scsi_cmd_ioctl to take a gendisk instead of a queue # # include/linux/bio.h # 2004/02/01 05:53:03-06:00 patmans@us.ibm.com +2 -2 # change scsi_cmd_ioctl to take a gendisk instead of a queue # # fs/bio.c # 2004/02/01 05:55:27-06:00 patmans@us.ibm.com +27 -22 # change scsi_cmd_ioctl to take a gendisk instead of a queue # # drivers/scsi/sd.c # 2004/02/01 05:53:03-06:00 patmans@us.ibm.com +1 -1 # change scsi_cmd_ioctl to take a gendisk instead of a queue # # drivers/ide/ide.c # 2004/02/01 05:53:03-06:00 patmans@us.ibm.com +1 -1 # change scsi_cmd_ioctl to take a gendisk instead of a queue # # drivers/cdrom/cdrom.c # 2004/02/01 05:53:03-06:00 patmans@us.ibm.com +1 -1 # change scsi_cmd_ioctl to take a gendisk instead of a queue # # drivers/block/scsi_ioctl.c # 2004/02/01 05:53:03-06:00 patmans@us.ibm.com +14 -13 # change scsi_cmd_ioctl to take a gendisk instead of a queue # # ChangeSet # 2004/02/02 10:14:59-06:00 jejb@raven.il.steeleye.com # scsi: scatter gather alignment constraints # # Make sg and st respect any block alignment # constraints for the data. Usb storage already # sets these to what it needs. # # Also reset the default to 7 for other SCSI devices. # # drivers/scsi/st.c # 2004/02/02 10:14:23-06:00 jejb@raven.il.steeleye.com +2 -1 # scsi: scatter gather alignment constraints # # drivers/scsi/sg.c # 2004/02/02 10:14:22-06:00 jejb@raven.il.steeleye.com +4 -0 # scsi: scatter gather alignment constraints # # drivers/scsi/scsi_lib.c # 2004/02/02 10:14:22-06:00 jejb@raven.il.steeleye.com +9 -0 # scsi: scatter gather alignment constraints # # ChangeSet # 2004/02/02 10:06:54-06:00 andmike@us.ibm.com # [PATCH] media change check fails for busy unplugged device # # If a request is sent through scsi_wait_req the function may be woken up # from the completion by a function other than scsi_wait_done. This can # happen as a result of cases that return BLKPREP_KILL in the scsi_prep_fn # function. # # author: Mike Anderson # patch_version: Thu Jan 29 09:03:44 UTC 2004 # # patched-2.6-andmike/drivers/scsi/scsi_lib.c | 2 ++ # 1 files changed, 2 insertions(+) # # drivers/scsi/scsi_lib.c # 2004/02/02 10:06:16-06:00 andmike@us.ibm.com +2 -0 # Re: 2.6.1: media change check fails for busy unplugged device # # ChangeSet # 2004/02/02 10:05:35-06:00 patmans@us.ibm.com # [PATCH] fix badness in scsi_single_lun_run # # This patch against recent mainline bk removes the bogus WARN_ON for # single_lun devices, and a meaningless comment. # # We clear the starget_sdev_user, and immediately blk_run_queue for the LUN # that just issued IO. Another LUN could race in scsi_request_fn, but it is # most likely that the last user will get there first, and reset # starget_sdev_user. If it does not, it will have to wait for the other LUN # to finish all of its IO. # # drivers/scsi/scsi_lib.c # 2004/02/02 10:04:56-06:00 patmans@us.ibm.com +0 -5 # fix badness in scsi_single_lun_run # # ChangeSet # 2004/02/02 10:04:13-06:00 jejb@mulgrave.(none) # qla2xxx: Resync with latest released firmware 3.02.21 # # From: Andrew Vasquez # # drivers/scsi/qla2xxx/ql2300_fw.c # 2004/02/02 10:03:33-06:00 jejb@mulgrave.(none) +7216 -7189 # qla2xxx: Resync with latest released firmware 3.02.21 # # drivers/scsi/qla2xxx/ql6312_fw.c # 2004/02/02 10:03:32-06:00 jejb@mulgrave.(none) +6425 -6398 # qla2xxx: Resync with latest released firmware 3.02.21 # # drivers/scsi/qla2xxx/ql2322_fw.c # 2004/02/02 10:03:32-06:00 jejb@mulgrave.(none) +7446 -7440 # qla2xxx: Resync with latest released firmware 3.02.21 # # drivers/scsi/qla2xxx/ql6322_fw.c # 2004/02/02 10:03:31-06:00 jejb@mulgrave.(none) +6827 -6822 # qla2xxx: Resync with latest released firmware 3.02.21 # # ChangeSet # 2004/02/02 10:02:44-06:00 andrew.vasquez@qlogic.com # [PATCH] Updated qla2xxx driver. # # - Bump version number -> 8.00.00b10. # # - Use down() not down_interruptible() while waiting for mailbox # completions. # # o down_interruptible() is the wrong thing to do here # (in case a signal hits you sooo do the wrong thing # and corrupt the semaphore) # (Arjan van de Ven arjanv_redhat.com) # # - Misc. ISP6312/ISP6322 changes: # # o Asynchronous IOCB handling is not available on # ISP6312 and ISP6322 type boards. # # o Firmware type (FLX) desgnation fix. # # - Clean up some extraneous code: # # o Remove duplicate call to qla2x00_config_os(). # o Remove unused structure member rsvd in struct dev_id. # # - Create single module firmware loaders for each firmware image # shipped with the driver (2/2). # # - Create single module firmware loaders for each firmware image # shipped with the driver. # # - Resync with latest released firmware 3.02.21. # # drivers/scsi/qla2xxx/ql2300.c # 2004/02/02 10:02:05-06:00 andrew.vasquez@qlogic.com +2 -121 # Updated qla2xxx driver. # # drivers/scsi/qla2xxx/Makefile # 2004/02/02 10:02:05-06:00 andrew.vasquez@qlogic.com +8 -2 # Updated qla2xxx driver. # # drivers/scsi/qla2xxx/Kconfig # 2004/02/02 10:02:05-06:00 andrew.vasquez@qlogic.com +22 -4 # Updated qla2xxx driver. # # drivers/scsi/qla2xxx/ql2322.c # 2004/02/02 10:02:03-06:00 andrew.vasquez@qlogic.com +108 -0 # # drivers/scsi/qla2xxx/ql2322.c # 2004/02/02 10:02:03-06:00 andrew.vasquez@qlogic.com +0 -0 # BitKeeper file /home/jejb/BK/scsi-misc-2.6-new/drivers/scsi/qla2xxx/ql2322.c # # drivers/scsi/qla2xxx/qla_isr.c # 2004/02/02 10:02:02-06:00 andrew.vasquez@qlogic.com +4 -3 # Updated qla2xxx driver. # # drivers/scsi/qla2xxx/qla_init.c # 2004/02/02 10:02:02-06:00 andrew.vasquez@qlogic.com +1 -3 # Updated qla2xxx driver. # # drivers/scsi/qla2xxx/qla_def.h # 2004/02/02 10:02:02-06:00 andrew.vasquez@qlogic.com +19 -7 # Updated qla2xxx driver. # # drivers/scsi/qla2xxx/qla_version.h # 2004/02/02 10:02:01-06:00 andrew.vasquez@qlogic.com +2 -2 # Updated qla2xxx driver. # # drivers/scsi/qla2xxx/qla_os.c # 2004/02/02 10:02:01-06:00 andrew.vasquez@qlogic.com +1 -2 # Updated qla2xxx driver. # # drivers/scsi/qla2xxx/qla_mbx.c # 2004/02/02 10:02:01-06:00 andrew.vasquez@qlogic.com +1 -1 # Updated qla2xxx driver. # # drivers/scsi/qla2xxx/ql6312.c # 2004/02/02 10:01:58-06:00 andrew.vasquez@qlogic.com +90 -0 # # drivers/scsi/qla2xxx/ql6312.c # 2004/02/02 10:01:58-06:00 andrew.vasquez@qlogic.com +0 -0 # BitKeeper file /home/jejb/BK/scsi-misc-2.6-new/drivers/scsi/qla2xxx/ql6312.c # # drivers/scsi/qla2xxx/ql6322.c # 2004/02/02 10:01:56-06:00 andrew.vasquez@qlogic.com +108 -0 # # drivers/scsi/qla2xxx/ql6322.c # 2004/02/02 10:01:56-06:00 andrew.vasquez@qlogic.com +0 -0 # BitKeeper file /home/jejb/BK/scsi-misc-2.6-new/drivers/scsi/qla2xxx/ql6322.c # # ChangeSet # 2004/02/02 10:01:14-06:00 jejb@mulgrave.(none) # Fix mptfusion to compile without CONFIG_PM # # drivers/message/fusion/mptbase.h # 2004/02/02 10:00:36-06:00 jejb@mulgrave.(none) +2 -2 # Fix mptfusion to compile without CONFIG_PM # # ChangeSet # 2004/02/02 09:59:55-06:00 jejb@mulgrave.(none) # qla2xxx - Use RIO mode 4 for ISP2100/ISP2200 operation. [3/3] # # From: Andrew Vasquez # # RIO mode 3 (originally used in the qla2xxx driver) will not work on # big-endian platforms due to the firmware returning only the first-word # of the dword command handle returned after SCSI completion. Use RIO # mode 4 since full 32bit handle is returned during status. # # I've recently added an IBM p630 machine (ppc64) to my test ring with a # mix of 2200 and 2300 cards -- I feel fairly confident that most endian # type issues are addressed. # # drivers/scsi/qla2xxx/qla_isr.c # 2004/02/02 09:59:17-06:00 jejb@mulgrave.(none) +10 -5 # qla2xxx - Use RIO mode 4 for ISP2100/ISP2200 operation. [3/3] # # drivers/scsi/qla2xxx/qla_init.c # 2004/02/02 09:59:17-06:00 jejb@mulgrave.(none) +1 -1 # qla2xxx - Use RIO mode 4 for ISP2100/ISP2200 operation. [3/3] # # ChangeSet # 2004/02/02 09:58:36-06:00 jejb@mulgrave.(none) # qla2xxx - Remove unused GFT_ID code. [2/3] # # From: Andrew Vasquez # # The driver does not issue GFT_IDs for each of the ports discovered # during its SNS scan. Remove unused code. # # drivers/scsi/qla2xxx/qla_gs.c # 2004/02/02 09:57:57-06:00 jejb@mulgrave.(none) +0 -63 # qla2xxx - Remove unused GFT_ID code. [2/3] # # drivers/scsi/qla2xxx/qla_gbl.h # 2004/02/02 09:57:57-06:00 jejb@mulgrave.(none) +0 -1 # qla2xxx - Remove unused GFT_ID code. [2/3] # # ChangeSet # 2004/02/02 09:57:16-06:00 jejb@mulgrave.(none) # qla2xxx - perform proper SNS scans with ISP2200 HBAs. [1/3] # # From: Andrew Vasquez # # The 2200 firmware doesn't support the MS IOCB interface the driver # uses to issue CT commands to the SNS. Basically, I had to # forward-port some code from the 6.x driver to get the SNS calls # to go through. I've had several machines (mixture of 2200s/ # 2300s/others with loop and fabric connections) running with this # patch for the past week. # # drivers/scsi/qla2xxx/qla_os.c # 2004/02/02 09:56:38-06:00 jejb@mulgrave.(none) +58 -30 # qla2xxx - perform proper SNS scans with ISP2200 HBAs. [1/3] # # drivers/scsi/qla2xxx/qla_gs.c # 2004/02/02 09:56:38-06:00 jejb@mulgrave.(none) +498 -1 # qla2xxx - perform proper SNS scans with ISP2200 HBAs. [1/3] # # drivers/scsi/qla2xxx/qla_def.h # 2004/02/02 09:56:38-06:00 jejb@mulgrave.(none) +58 -0 # qla2xxx - perform proper SNS scans with ISP2200 HBAs. [1/3] # # ChangeSet # 2004/02/02 09:42:26-06:00 jejb@raven.il.steeleye.com # Update qla2xxx to 8.00.00b9 # # From: Andrew Vasquez # http://sourceforge.net/projects/linux-qla2xxx/ # # drivers/scsi/qla2xxx/ql6322_fw.c # 2004/02/02 09:41:45-06:00 jejb@raven.il.steeleye.com +7348 -0 # # drivers/scsi/qla2xxx/ql6322_fw.c # 2004/02/02 09:41:45-06:00 jejb@raven.il.steeleye.com +0 -0 # BitKeeper file /home/jejb/BK/scsi-misc-2.6-new/drivers/scsi/qla2xxx/ql6322_fw.c # # drivers/scsi/qla2xxx/ql6312_fw.c # 2004/02/02 09:41:43-06:00 jejb@raven.il.steeleye.com +6746 -0 # # drivers/scsi/qla2xxx/ql6312_fw.c # 2004/02/02 09:41:43-06:00 jejb@raven.il.steeleye.com +0 -0 # BitKeeper file /home/jejb/BK/scsi-misc-2.6-new/drivers/scsi/qla2xxx/ql6312_fw.c # # drivers/scsi/qla2xxx/ql2322_fw.c # 2004/02/02 09:41:40-06:00 jejb@raven.il.steeleye.com +8013 -0 # # drivers/scsi/qla2xxx/qla_sup.c # 2004/02/02 09:41:40-06:00 jejb@raven.il.steeleye.com +42 -9 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/qla_settings.h # 2004/02/02 09:41:40-06:00 jejb@raven.il.steeleye.com +0 -2 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/qla_os.c # 2004/02/02 09:41:40-06:00 jejb@raven.il.steeleye.com +91 -220 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/ql2322_fw.c # 2004/02/02 09:41:40-06:00 jejb@raven.il.steeleye.com +0 -0 # BitKeeper file /home/jejb/BK/scsi-misc-2.6-new/drivers/scsi/qla2xxx/ql2322_fw.c # # drivers/scsi/qla2xxx/qla_mbx.c # 2004/02/02 09:41:39-06:00 jejb@raven.il.steeleye.com +5 -345 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/qla_isr.c # 2004/02/02 09:41:39-06:00 jejb@raven.il.steeleye.com +6 -12 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/qla_iocb.c # 2004/02/02 09:41:39-06:00 jejb@raven.il.steeleye.com +0 -12 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/qla_init.c # 2004/02/02 09:41:39-06:00 jejb@raven.il.steeleye.com +112 -82 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/qla_gs.c # 2004/02/02 09:41:39-06:00 jejb@raven.il.steeleye.com +1 -7 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/qla_gbl.h # 2004/02/02 09:41:39-06:00 jejb@raven.il.steeleye.com +2 -18 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/qla_def.h # 2004/02/02 09:41:38-06:00 jejb@raven.il.steeleye.com +51 -73 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/qla_dbg.h # 2004/02/02 09:41:38-06:00 jejb@raven.il.steeleye.com +51 -49 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/qla_dbg.c # 2004/02/02 09:41:38-06:00 jejb@raven.il.steeleye.com +2 -77 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/ql2300_fw.c # 2004/02/02 09:41:37-06:00 jejb@raven.il.steeleye.com +6793 -6083 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/ql2300.c # 2004/02/02 09:41:37-06:00 jejb@raven.il.steeleye.com +103 -42 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/Makefile # 2004/02/02 09:41:37-06:00 jejb@raven.il.steeleye.com +2 -2 # Update qla2xxx to 8.00.00b9 # # drivers/scsi/qla2xxx/Kconfig # 2004/02/02 09:41:37-06:00 jejb@raven.il.steeleye.com +5 -11 # Update qla2xxx to 8.00.00b9 # # ChangeSet # 2004/01/31 01:28:09-05:00 jgarzik@redhat.com # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skxmac2.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -457 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skvpd.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -141 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/sktimer.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -56 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skrlmt.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -250 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skqueue.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -73 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skproc.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -94 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/sklm80.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -82 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/ski2c.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -215 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skgesirq.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -370 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skgepnmi.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -465 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skgemib.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -50 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skgeinit.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -442 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skgehwt.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -56 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skge.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -419 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skdim.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -36 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skcsum.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -59 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/skaddr.c # 2004/01/31 01:28:04-05:00 jgarzik@redhat.com +0 -199 # [netdrvr sk98lin 2/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # ChangeSet # 2004/01/31 01:22:14-05:00 jgarzik@redhat.com # [netdrvr sk98lin 1/2] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/xmac_ii.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -203 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skvpd.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -66 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skversion.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -38 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/sktypes.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -27 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/sktimer.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -44 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skrlmt.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -133 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skqueue.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -64 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/ski2c.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -124 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skgesirq.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -107 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skgepnmi.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -233 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skgepnm2.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -140 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skgeinit.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -349 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skgei2c.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -96 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skgehwt.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -30 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skgehw.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -232 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skgedrv.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -43 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skerror.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -34 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skdrv2nd.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -118 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skdrv1st.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -83 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skdebug.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -54 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skcsum.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -48 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/skaddr.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -108 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # drivers/net/sk98lin/h/lm80.h # 2004/01/31 01:22:09-05:00 jgarzik@redhat.com +0 -28 # [netdrvr sk98lin] Remove CVS substitution keywords/spam. # # With vendor's OK, remove Log, Revision, and Date from each file. # # This data is generated from non-public CVS, and mirrors the BitKeeper # changelog. Further, every driver submission usually contains updates to # each and every file, just because of the updated CVS revisions. # # ChangeSet # 2004/01/26 12:01:00-06:00 rddunlap@osdl.org # [PATCH] fix sym53c8xx_2 doc. location # # A very simple patch against 2.6.0 follows, which fixes an improper file # reference in the scsi sym53c8xx_2 driver help text. The referenced # documentation file was moved in 2.5.48 but the help text was not updated # accordingly. # # linux-262-rc1-bk1-rddunlap/drivers/scsi/Kconfig | 2 +- # 1 files changed, 1 insertion(+), 1 deletion(-) # # drivers/scsi/Kconfig # 2004/01/23 17:52:42-06:00 rddunlap@osdl.org +1 -1 # fix sym53c8xx_2 doc. location # # ChangeSet # 2004/01/26 11:59:49-06:00 rddunlap@osdl.org # [PATCH] aha1542: add kmalloc type # # From: Timmy Yee # # In drivers/scsi/aha1542.c, kmalloc() is called with no memtype (i.e. # without some flag like GFP_KERNEL). The following patch will fix that. # # diff -puN drivers/scsi/aha1542.c~aha1542_kmalloc_type drivers/scsi/aha1542.c # # # linux-262-rc1-bk1-rddunlap/drivers/scsi/aha1542.c | 2 +- # 1 files changed, 1 insertion(+), 1 deletion(-) # # drivers/scsi/aha1542.c # 2004/01/23 17:50:19-06:00 rddunlap@osdl.org +1 -1 # aha1542: add kmalloc type # # ChangeSet # 2004/01/26 11:57:44-06:00 rddunlap@osdl.org # [PATCH] aha1542: queuecommand: change panic() to return # # From: Timmy Yee # # The aha1542 driver calls panic() if kmalloc() fails, which it shouldn't # do. This patch changes that by having the code return a nonzero value, so # it tells the SCSI mid-layer to retry the command, as suggested by Randy. # # # diffstat:= # drivers/scsi/aha1542.c | 7 +++++-- # 1 files changed, 5 insertions(+), 2 deletions(-) # # drivers/scsi/aha1542.c # 2004/01/25 14:31:07-06:00 rddunlap@osdl.org +5 -2 # aha1542: queuecommand: change panic() to return # # ChangeSet # 2004/01/26 11:56:31-06:00 jejb@mulgrave.(none) # Fusion update to 3.00.02 # # From: Moore, Eric Dean # # Here is list of fix's. # * added new PCI API support # * added ACPI support # * added CONFIG_LBA, READ16, WRITE16 support # * underun fix # * chain buffer free list not being init properly # * reduce task management # (abort=2sec,reset bus=5sec, timeout=10sec) # * Hot plug fix's requested from Christoph Hellwig, and several # others from the linux-scsi@ list. # # drivers/message/fusion/mptscsih.h # 2004/01/26 11:56:15-06:00 jejb@mulgrave.(none) +4 -20 # Fusion update to 3.00.02 # # drivers/message/fusion/mptscsih.c # 2004/01/26 11:56:15-06:00 jejb@mulgrave.(none) +558 -398 # Fusion update to 3.00.02 # # drivers/message/fusion/mptbase.h # 2004/01/26 11:56:15-06:00 jejb@mulgrave.(none) +17 -2 # Fusion update to 3.00.02 # # drivers/message/fusion/mptbase.c # 2004/01/26 11:56:15-06:00 jejb@mulgrave.(none) +299 -118 # Fusion update to 3.00.02 # # ChangeSet # 2004/01/26 11:52:02-06:00 dougg@torque.net # [PATCH] sg driver update # # > This patch is against the sg driver found in lk 2.6.1-bk6 . # > It is an update on the sg patch sent in the "devices with more # > than one node" thread: # > http://marc.theaimsgroup.com/?l=linux-scsi&m=107415435300783&w=2 # # Attached is an updated patch adding the cdev_unmap() call # which Kai Makisara reported as required. # # drivers/scsi/sg.c # 2004/01/24 06:17:15-06:00 dougg@torque.net +45 -26 # sg driver update # # ChangeSet # 2004/01/26 11:51:21-06:00 jejb@mulgrave.(none) # aha152x request region fix # # Noticed by: Guennadi Liakhovetski # Fixed By: Juergen E. Fischer # # On Sat, Jan 24, 2004 at 15:02:12 +0100, Guennadi Liakhovetski wrote: # > Correct and forgive me if I am wrong, it looks like you are now poking at # > ports without requesting them - in *_porttest. Is it a good idea? # # Ouch. No, of course not, you are right. Thanks for pointing. I # thought I had moved the port testing to aha152x_probe_one... # # Following patch cleans that up. # # The port test during autoconfiguration was also done without requesting # the region first and there was a bug in auto configuration of a TC1550 # controller (both even before the patch). # # drivers/scsi/aha152x.c # 2004/01/26 11:51:08-06:00 jejb@mulgrave.(none) +32 -27 # aha152x request region fix # # ChangeSet # 2004/01/26 11:47:15-06:00 fischer@linux-buechse.de # [PATCH] aha152x # # attached my patch for the aha152x driver. Tested for pcmcia and not # pcmcia and various devices. # # changes in the aha152x driver: # - gather code that is not used by PCMCIA at the end # - move request_region for !PCMCIA case to detection # - migration to new scsi host api (remove legacy code) # - free host scribble before scsi_done # - fix error handling # - one isapnp device added to id_table # # and in the pcmcia stub module: # - default to synchronous transfers # - release_region hack removed # - let core module do the scsi host api calls. # # drivers/scsi/pcmcia/aha152x_stub.c # 2004/01/24 05:06:31-06:00 fischer@linux-buechse.de +2 -9 # aha152x # # drivers/scsi/aha152x.h # 2004/01/24 05:45:17-06:00 fischer@linux-buechse.de +4 -3 # aha152x # # drivers/scsi/aha152x.c # 2004/01/24 05:45:14-06:00 fischer@linux-buechse.de +620 -567 # aha152x # # ChangeSet # 2004/01/26 11:44:55-06:00 Kai.Makisara@kolumbus.fi # [PATCH] SCSI tape cdev fixes for 2.6.2-rc1 # # The patch at the end of this message fixes the following problems: # # - cdev allocation moved outside st_dev_arr_lock, prevents the debugging # error messages reported by Mike and Mike # - cdev_unmap() added before cdev_del(), prevents oops (and kernel data # corruption) in case someone tries to use a device after removing the # module # - better error handling for failures in cdev allocation # # As far as I am concerned, the patch is tested but testing by others might # be useful :-) # # drivers/scsi/st.c # 2004/01/22 15:16:04-06:00 Kai.Makisara@kolumbus.fi +66 -46 # SCSI tape cdev fixes for 2.6.2-rc1 # # ChangeSet # 2004/01/25 18:03:46-05:00 akpm@osdl.org # [PATCH] gcc-3.5: ne2k-pci.c # # drivers/net/ne2k-pci.c: In function `ne2k_pci_block_input': # drivers/net/ne2k-pci.c:539: error: invalid lvalue in increment # drivers/net/ne2k-pci.c: In function `ne2k_pci_block_output': # drivers/net/ne2k-pci.c:600: error: invalid lvalue in increment # # drivers/net/ne2k-pci.c # 2004/01/25 06:01:38-05:00 akpm@osdl.org +12 -4 # gcc-3.5: ne2k-pci.c # # ChangeSet # 2004/01/25 18:03:40-05:00 akpm@osdl.org # [PATCH] gcc-35: drivers/net/wan/lmc # # drivers/net/wan/lmc/lmc_media.c:1061: sorry, unimplemented: called from here # drivers/net/wan/lmc/lmc_debug.h:50: sorry, unimplemented: inlining failed in call to 'lmc_trace': function body not available # # drivers/net/wan/lmc/lmc_debug.h # 2004/01/24 00:40:40-05:00 akpm@osdl.org +1 -1 # gcc-35: drivers/net/wan/lmc # # ChangeSet # 2004/01/25 18:01:17-05:00 rddunlap@osdl.org # [netdrvr] remove unnecessary type casting # # drivers/net/sundance.c # 2004/01/23 18:47:13-05:00 rddunlap@osdl.org +1 -1 # net: remove unnecessary type casting # # drivers/net/fealnx.c # 2004/01/23 18:47:13-05:00 rddunlap@osdl.org +1 -1 # net: remove unnecessary type casting # # drivers/net/dl2k.c # 2004/01/23 18:47:13-05:00 rddunlap@osdl.org +2 -2 # net: remove unnecessary type casting # # ChangeSet # 2004/01/10 16:45:02-05:00 scott.feldman@intel.com # [netdrvr e1000] back out CSA interrupt fix # # * 8086:1019 82547 CSA-based LOMs lock up the system with # this code, so let's revert back to what's in 2.6.0 until # we can figure out why this is causing problems. # # drivers/net/e1000/e1000_main.c # 2004/01/10 11:44:57-05:00 scott.feldman@intel.com +0 -16 # [netdrvr e1000] back out CSA interrupt fix # # * 8086:1019 82547 CSA-based LOMs lock up the system with # this code, so let's revert back to what's in 2.6.0 until # we can figure out why this is causing problems. # # ChangeSet # 2004/01/10 16:44:47-05:00 scott.feldman@intel.com # [netdrvr e1000] netpoll support # # * Add netpoll support. [Prasanna S. Panshamukhi (prasanna@in.ibm.com)] # # drivers/net/e1000/e1000_main.c # 2004/01/10 11:44:42-05:00 scott.feldman@intel.com +27 -2 # [netdrvr e1000] netpoll support # # * Add netpoll support. [Prasanna S. Panshamukhi (prasanna@in.ibm.com)] # # ChangeSet # 2004/01/10 16:44:34-05:00 scott.feldman@intel.com # [netdrvr e1000] h/w workarounds + remove device ID. # # * Remove device ID 8086:1014 support: never a production ID. # * Add #define for stripping CRC on Rx. # * Added polarity reversal workaround for forced 10Mbps on 82543/4 # controllers. The polirity detection algorithm check the link # pulse to see if the polarity is reversed. The end of packet # waveform of 10Base-T packets look like an inverted link pulse # and can make 82443/4 polarity detection algorithms think that # the polarity is reversed by mistake. # * Change the condition for applying the TBI workaround on 82543: # previously enabled workaround if link partner advertised # capabilities; now enable based on negotiated speed - only # enable for gig speed. # # drivers/net/e1000/e1000_main.c # 2004/01/10 11:44:28-05:00 scott.feldman@intel.com +0 -1 # [netdrvr e1000] h/w workarounds + remove device ID. # # * Remove device ID 8086:1014 support: never a production ID. # * Add #define for stripping CRC on Rx. # * Added polarity reversal workaround for forced 10Mbps on 82543/4 # controllers. The polirity detection algorithm check the link # pulse to see if the polarity is reversed. The end of packet # waveform of 10Base-T packets look like an inverted link pulse # and can make 82443/4 polarity detection algorithms think that # the polarity is reversed by mistake. # * Change the condition for applying the TBI workaround on 82543: # previously enabled workaround if link partner advertised # capabilities; now enable based on negotiated speed - only # enable for gig speed. # # drivers/net/e1000/e1000_hw.h # 2004/01/10 11:44:28-05:00 scott.feldman@intel.com +1 -0 # [netdrvr e1000] h/w workarounds + remove device ID. # # * Remove device ID 8086:1014 support: never a production ID. # * Add #define for stripping CRC on Rx. # * Added polarity reversal workaround for forced 10Mbps on 82543/4 # controllers. The polirity detection algorithm check the link # pulse to see if the polarity is reversed. The end of packet # waveform of 10Base-T packets look like an inverted link pulse # and can make 82443/4 polarity detection algorithms think that # the polarity is reversed by mistake. # * Change the condition for applying the TBI workaround on 82543: # previously enabled workaround if link partner advertised # capabilities; now enable based on negotiated speed - only # enable for gig speed. # # drivers/net/e1000/e1000_hw.c # 2004/01/10 11:44:28-05:00 scott.feldman@intel.com +44 -23 # [netdrvr e1000] h/w workarounds + remove device ID. # # * Remove device ID 8086:1014 support: never a production ID. # * Add #define for stripping CRC on Rx. # * Added polarity reversal workaround for forced 10Mbps on 82543/4 # controllers. The polirity detection algorithm check the link # pulse to see if the polarity is reversed. The end of packet # waveform of 10Base-T packets look like an inverted link pulse # and can make 82443/4 polarity detection algorithms think that # the polarity is reversed by mistake. # * Change the condition for applying the TBI workaround on 82543: # previously enabled workaround if link partner advertised # capabilities; now enable based on negotiated speed - only # enable for gig speed. # # ChangeSet # 2004/01/10 15:26:23-05:00 scott.feldman@intel.com # [e100] missed a kfree -> free_netdev # # * missed a kfree -> free_netdev # # drivers/net/e100/e100_main.c # 2004/01/10 15:24:47-05:00 scott.feldman@intel.com +8 -10 # [e100] missed a kfree -> free_netdev # # * missed a kfree -> free_netdev # # ChangeSet # 2004/01/10 15:20:59-05:00 scott.feldman@intel.com # [e1000] Internal SERDES link detect; delay after SPI # # * Internal SERDES designs must use indirect method to sample # link status based on sampling MAC sync bits. # * Need 10 msec delay after SPI eeprom write, otherwise back-to- # back writes can get corrupted. # * Allow for setup of multiple MAC addresses (not used for # Linux - shared code change). # * Updated comment block. # # drivers/net/e1000/e1000_main.c # 2004/01/10 10:20:54-05:00 scott.feldman@intel.com +25 -20 # [e1000] Internal SERDES link detect; delay after SPI # # * Internal SERDES designs must use indirect method to sample # link status based on sampling MAC sync bits. # * Need 10 msec delay after SPI eeprom write, otherwise back-to- # back writes can get corrupted. # * Allow for setup of multiple MAC addresses (not used for # Linux - shared code change). # * Updated comment block. # # drivers/net/e1000/e1000_hw.h # 2004/01/10 10:20:54-05:00 scott.feldman@intel.com +2 -1 # [e1000] Internal SERDES link detect; delay after SPI # # * Internal SERDES designs must use indirect method to sample # link status based on sampling MAC sync bits. # * Need 10 msec delay after SPI eeprom write, otherwise back-to- # back writes can get corrupted. # * Allow for setup of multiple MAC addresses (not used for # Linux - shared code change). # * Updated comment block. # # drivers/net/e1000/e1000_hw.c # 2004/01/10 10:20:54-05:00 scott.feldman@intel.com +33 -24 # [e1000] Internal SERDES link detect; delay after SPI # # * Internal SERDES designs must use indirect method to sample # link status based on sampling MAC sync bits. # * Need 10 msec delay after SPI eeprom write, otherwise back-to- # back writes can get corrupted. # * Allow for setup of multiple MAC addresses (not used for # Linux - shared code change). # * Updated comment block. # # ChangeSet # 2004/01/10 15:20:50-05:00 scott.feldman@intel.com # [e1000] exit polling loop if interface is brought down # # * Exit polling loop if interface is brought down. # # drivers/net/e1000/e1000_main.c # 2004/01/10 10:20:46-05:00 scott.feldman@intel.com +1 -1 # [e1000] exit polling loop if interface is brought down # # * Exit polling loop if interface is brought down. # # ChangeSet # 2004/01/10 15:20:42-05:00 scott.feldman@intel.com # [e1000] improve Tx flush method # # * Flush queued in-flight Tx descriptors when link is lost. 8254x stops # processing Tx descriptors when link is lost, so outstanding Tx # buffers will not be returned to OS unless we flush the Tx descriptor # ring. This patch move the flush from the watchdog timer callback # to process context to work around some issue with holding xmit_lock # in timer callback. # # drivers/net/e1000/e1000_main.c # 2004/01/10 10:20:37-05:00 scott.feldman@intel.com +5 -39 # [e1000] improve Tx flush method # # * Flush queued in-flight Tx descriptors when link is lost. 8254x stops # processing Tx descriptors when link is lost, so outstanding Tx # buffers will not be returned to OS unless we flush the Tx descriptor # ring. This patch move the flush from the watchdog timer callback # to process context to work around some issue with holding xmit_lock # in timer callback. # # ChangeSet # 2004/01/10 15:20:33-05:00 scott.feldman@intel.com # [e1000] print message if user overrides default ITR # # * Print message if user overrides default setting of ITR. # # drivers/net/e1000/e1000_param.c # 2004/01/10 10:20:29-05:00 scott.feldman@intel.com +11 -5 # [e1000] print message if user overrides default ITR # # * Print message if user overrides default setting of ITR. # # ChangeSet # 2004/01/10 15:20:25-05:00 scott.feldman@intel.com # [e1000] 82547 interrupt assert/de-assert re-ordering # # * 82547 needs interrupt disable/enable to keep interrupt assertion # state synced between 82547 and APIC. 82547 will re-order # assert and de-assert messages if hub link bus is busy (heavy # traffic). Disabling interrupt on device works around re- # order issue. # # drivers/net/e1000/e1000_main.c # 2004/01/10 10:20:20-05:00 scott.feldman@intel.com +19 -2 # [e1000] 82547 interrupt assert/de-assert re-ordering # # * 82547 needs interrupt disable/enable to keep interrupt assertion # state synced between 82547 and APIC. 82547 will re-order # assert and de-assert messages if hub link bus is busy (heavy # traffic). Disabling interrupt on device works around re- # order issue. # # ChangeSet # 2004/01/10 15:20:16-05:00 scott.feldman@intel.com # [e1000] use unsigned long for I/O base addr # # * Use unsigned long for I/O base addr; can be 64-bit on some archs. # # drivers/net/e1000/e1000_main.c # 2004/01/10 10:20:12-05:00 scott.feldman@intel.com +2 -2 # [e1000] use unsigned long for I/O base addr # # * Use unsigned long for I/O base addr; can be 64-bit on some archs. # # drivers/net/e1000/e1000_hw.h # 2004/01/10 10:20:12-05:00 scott.feldman@intel.com +3 -3 # [e1000] use unsigned long for I/O base addr # # * Use unsigned long for I/O base addr; can be 64-bit on some archs. # # drivers/net/e1000/e1000_hw.c # 2004/01/10 10:20:12-05:00 scott.feldman@intel.com +4 -4 # [e1000] use unsigned long for I/O base addr # # * Use unsigned long for I/O base addr; can be 64-bit on some archs. # # ChangeSet # 2004/01/10 15:20:08-05:00 scott.feldman@intel.com # [e1000] loopback diag test failing on big-endian # # * ethtool diag loopback test was failing on ppc because of # endianness issue. # # drivers/net/e1000/e1000_ethtool.c # 2004/01/10 10:20:03-05:00 scott.feldman@intel.com +3 -3 # [e1000] loopback diag test failing on big-endian # # * ethtool diag loopback test was failing on ppc because of # endianness issue. # # ChangeSet # 2004/01/10 15:19:59-05:00 scott.feldman@intel.com # [e1000] use pdev->irq rather than netdev->irq for # # * Use pdev->irq rather than netdev->irq for interrupt # registration in anticipation of MSI interrupt API support. # # drivers/net/e1000/e1000_main.c # 2004/01/10 10:19:55-05:00 scott.feldman@intel.com +3 -4 # [e1000] use pdev->irq rather than netdev->irq for # # * Use pdev->irq rather than netdev->irq for interrupt # registration in anticipation of MSI interrupt API support. # # drivers/net/e1000/e1000_ethtool.c # 2004/01/10 10:19:55-05:00 scott.feldman@intel.com +3 -3 # [e1000] use pdev->irq rather than netdev->irq for # # * Use pdev->irq rather than netdev->irq for interrupt # registration in anticipation of MSI interrupt API support. # # ChangeSet # 2004/01/10 15:19:51-05:00 scott.feldman@intel.com # [e1000] add ethtool ring param support # # * Add ethtool ring param support # # drivers/net/e1000/e1000_param.c # 2004/01/10 10:18:45-05:00 scott.feldman@intel.com +11 -18 # [e1000] add ethtool ring param support # # * Add ethtool ring param support # # drivers/net/e1000/e1000_main.c # 2004/01/10 10:18:45-05:00 scott.feldman@intel.com +10 -10 # [e1000] add ethtool ring param support # # * Add ethtool ring param support # # drivers/net/e1000/e1000_ethtool.c # 2004/01/10 10:18:45-05:00 scott.feldman@intel.com +82 -0 # [e1000] add ethtool ring param support # # * Add ethtool ring param support # # drivers/net/e1000/e1000.h # 2004/01/10 10:18:45-05:00 scott.feldman@intel.com +10 -0 # [e1000] add ethtool ring param support # # * Add ethtool ring param support # diff -Nru a/Documentation/DocBook/deviceiobook.tmpl b/Documentation/DocBook/deviceiobook.tmpl --- a/Documentation/DocBook/deviceiobook.tmpl Wed Feb 4 16:51:35 2004 +++ b/Documentation/DocBook/deviceiobook.tmpl Wed Feb 4 16:51:35 2004 @@ -126,7 +126,9 @@ The functions are named readb, readw, readl, - readq, writeb, + readq, readb_relaxed, + readw_relaxed, readl_relaxed, + readq_relaxed, writeb, writew, writel and writeq. @@ -158,6 +160,18 @@ device to ensure that writes have occurred in the specific cases the author cares. This kind of property cannot be hidden from driver writers in the API. + + + + PCI ordering rules also guarantee that PIO read responses arrive + after any outstanding DMA writes on that bus, since for some devices + the result of a readb call may signal to the + driver that a DMA transaction is complete. In many cases, however, + the driver may want to indicate that the next + readb call has no relation to any previous DMA + writes performed by the device. The driver can use + readb_relaxed for these cases, although only + some platforms will honor the relaxed semantics. diff -Nru a/Documentation/as-iosched.txt b/Documentation/as-iosched.txt --- a/Documentation/as-iosched.txt Wed Feb 4 16:51:34 2004 +++ b/Documentation/as-iosched.txt Wed Feb 4 16:51:34 2004 @@ -11,6 +11,15 @@ me. Database users don't bother unless you're willing to test a lot of patches from me ;) its a known issue. +Also, users with hardware RAID controllers, doing striping, may find +highly variable performance results with using the as-iosched. The +as-iosched anticipatory implementation is based on the notion that a disk +device has only one physical seeking head. A striped RAID controller +actually has a head for each physical device in the logical RAID device. + +However, setting the antic_expire (see tunable parameters below) produces +very similar behavior to the deadline IO scheduler. + Selecting IO schedulers ----------------------- @@ -19,6 +28,107 @@ globally at boot time only presently. +Anticipatory IO scheduler Policies +---------------------------------- +The as-iosched implementation implements several layers of policies +to determine when an IO request is dispatched to the disk controller. +Here are the policies outlined, in order of application. + +1. one-way Elevator algorithm. + +The elevator algorithm is similar to that used in deadline scheduler, with +the addition that it allows limited backward movement of the elevator +(i.e. seeks backwards). A seek backwards can occur when choosing between +two IO requests where one is behind the elevator's current position, and +the other is in front of the elevator's position. If the seek distance to +the request in back of the elevator is less than half the seek distance to +the request in front of the elevator, then the request in back can be chosen. +Backward seeks are also limited to a maximum of MAXBACK (1024*1024) sectors. +This favors forward movement of the elevator, while allowing opportunistic +"short" backward seeks. + +2. FIFO expiration times for reads and for writes. + +This is again very similar to the deadline IO scheduler. The expiration +times for requests on these lists is tunable using the parameters read_expire +and write_expire discussed below. When a read or a write expires in this way, +the IO scheduler will interrupt its current elevator sweep or read anticipation +to service the expired request. + +3. Read and write request batching + +A batch is a collection of read requests or a collection of write +requests. The as scheduler alternates dispatching read and write batches +to the driver. In the case a read batch, the scheduler submits read +requests to the driver as long as there are read requests to submit, and +the read batch time limit has not been exceeded (read_batch_expire). +The read batch time limit begins counting down only when there are +competing write requests pending. + +In the case of a write batch, the scheduler submits write requests to +the driver as long as there are write requests available, and the +write batch time limit has not been exceeded (write_batch_expire). +However, the length of write batches will be gradually shortened +when read batches frequently exceed their time limit. + +When changing between batch types, the scheduler waits for all requests +from the previous batch to complete before scheduling requests for the +next batch. + +The read and write fifo expiration times described in policy 2 above +are checked only when in scheduling IO of a batch for the corresponding +(read/write) type. So for example, the read FIFO timeout values are +tested only during read batches. Likewise, the write FIFO timeout +values are tested only during write batches. For this reason, +it is generally not recommended for the read batch time +to be longer than the write expiration time, nor for the write batch +time to exceed the read expiration time (see tunable parameters below). + +When the IO scheduler changes from a read to a write batch, +it begins the elevator from the request that is on the head of the +write expiration FIFO. Likewise, when changing from a write batch to +a read batch, scheduler begins the elevator from the first entry +on the read expiration FIFO. + +4. Read anticipation. + +Read anticipation occurs only when scheduling a read batch. +This implementation of read anticipation allows only one read request +to be dispatched to the disk controller at a time. In +contrast, many write requests may be dispatched to the disk controller +at a time during a write batch. It is this characteristic that can make +the anticipatory scheduler perform anomalously with controllers supporting +TCQ, or with hardware striped RAID devices. Setting the antic_expire +queue paramter (see below) to zero disables this behavior, and the anticipatory +scheduler behaves essentially like the deadline scheduler. + +When read anticipation is enabled (antic_expire is not zero), reads +are dispatched to the disk controller one at a time. +At the end of each read request, the IO scheduler examines its next +candidate read request from its sorted read list. If that next request +is from the same process as the request that just completed, +or if the next request in the queue is "very close" to the +just completed request, it is dispatched immediately. Otherwise, +statistics (average think time, average seek distance) on the process +that submitted the just completed request are examined. If it seems +likely that that process will submit another request soon, and that +request is likely to be near the just completed request, then the IO +scheduler will stop dispatching more read requests for up time (antic_expire) +milliseconds, hoping that process will submit a new request near the one +that just completed. If such a request is made, then it is dispatched +immediately. If the antic_expire wait time expires, then the IO scheduler +will dispatch the next read request from the sorted read queue. + +To decide whether an anticipatory wait is worthwhile, the scheduler +maintains statistics for each process that can be used to compute +mean "think time" (the time between read requests), and mean seek +distance for that process. One observation is that these statistics +are associated with each process, but those statistics are not associated +with a specific IO device. So for example, if a process is doing IO +on several file systems on separate devices, the statistics will be +a combination of IO behavior from all those devices. + + Tuning the anticipatory IO scheduler ------------------------------------ When using 'as', the anticipatory IO scheduler there are 5 parameters under @@ -26,17 +136,18 @@ The parameters are: * read_expire - Controls how long until a request becomes "expired". It also controls the + Controls how long until a read request becomes "expired". It also controls the interval between which expired requests are served, so set to 50, a request might take anywhere < 100ms to be serviced _if_ it is the next on the - expired list. Obviously it won't make the disk go faster. The result - basically equates to the timeslice a single reader gets in the presence of - other IO. 100*((seek time / read_expire) + 1) is very roughly the % - streaming read efficiency your disk should get with multiple readers. - + expired list. Obviously request expiration strategies won't make the disk + go faster. The result basically equates to the timeslice a single reader + gets in the presence of other IO. 100*((seek time / read_expire) + 1) is + very roughly the % streaming read efficiency your disk should get with + multiple readers. + * read_batch_expire Controls how much time a batch of reads is given before pending writes are - served. Higher value is more efficient. This might be set below read_expire + served. A higher value is more efficient. This might be set below read_expire if writes are to be given higher priority than reads, but reads are to be as efficient as possible when there are no writes. Generally though, it should be some multiple of read_expire. @@ -45,7 +156,8 @@ * write_batch_expire are equivalent to the above, for writes. * antic_expire - Controls the maximum amount of time we can anticipate a good read before + Controls the maximum amount of time we can anticipate a good read (one + with a short seek distance from the most recently completed request) before giving up. Many other factors may cause anticipation to be stopped early, or some processes will not be "anticipated" at all. Should be a bit higher for big seek time devices though not a linear correspondence - most diff -Nru a/Documentation/i386/zero-page.txt b/Documentation/i386/zero-page.txt --- a/Documentation/i386/zero-page.txt Wed Feb 4 16:51:34 2004 +++ b/Documentation/i386/zero-page.txt Wed Feb 4 16:51:34 2004 @@ -72,8 +72,10 @@ 0x21c unsigned long INITRD_SIZE, size in bytes of ramdisk image 0x220 4 bytes (setup.S) 0x224 unsigned short setup.S heap end pointer +0x2cc 4 bytes DISK80_SIG_BUFFER (setup.S) 0x2d0 - 0x600 E820MAP -0x600 - 0x7D4 EDDBUF (setup.S) +0x600 - 0x7ff EDDBUF (setup.S) for disk signature read sector +0x600 - 0x7d3 EDDBUF (setup.S) for edd data 0x800 string, 2K max COMMAND_LINE, the kernel commandline as copied using CL_OFFSET. diff -Nru a/Documentation/scsi/AM53C974.txt b/Documentation/scsi/AM53C974.txt --- a/Documentation/scsi/AM53C974.txt Wed Feb 4 16:51:34 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,246 +0,0 @@ -SUBJECT -------- -AM53/79C974 PC-SCSI Driver - - -DISCLAIMER ----------- -*** THIS SHOULD BE CONSIDERED AS BETA SOFTWARE *** -*** USE AT YOUR OWN RISK! *** - - -Copyright ---------- -The architecture and much of the code of this device driver was -originally developed by Drew Eckhardt for the NCR5380. The -following copyrights apply: - -For the architecture and all pieces of code which can also be found -in the NCR5380 device driver: -Copyright 1993, Drew Eckhardt - Visionary Computing - (Unix and Linux consulting and custom programming) - drew@colorado.edu - +1 (303) 666-5836 - -The AM53C974_nobios_detect code was originally developed by -Robin Cutshaw (robin@xfree86.org) and is used here in a -slightly modified form. - -For the remaining code: - Copyright 1994, D. Frieauff - EMail: fri@rsx42sun0.dofn.de - Phone: x49-7545-8-2256 , x49-7541-42305 - - -Version -------- -AM53/79C974 (PC-SCSI) Linux driver ALPHA release 0.5, 19 November 1995 - - -Changelog ---------- -0.1 -> 0.2: - - Extended message handling re-written to eliminate 'invalid message 17' bug - - Parameters of AM53C974_intr adapted - - Debug messages structured - - Spelling improved -0.2 -> 0.3: - - README file updated -- please read this file up to the end! - - Automatic scanning of io_port and irq implemented; no need for BIOS32 - anymore - - Improved configuration (now via LILO parameter string) - - Cleanup of probing and initialization code - - Improved sync. negotiation (can be setup individually for every device) - - Improved/ debugged code for reception of ext. messages -0.3 -> 0.4: - - Improved PCI probing and initialization code - - Compatibility changes for Linux 1.3.x -0.4 -> 0.5: - - Compatibility changes for Linux 1.3.42 - - -Bugs & Todo ------------ - - Add proc info function - - Support SCSI-2 tagged queuing - - Finalize abort code - - -Features --------- -This driver supports asynchronous and synchronous SCSI-I and SCSI-II -devices. It is capable of transfer rate and synchronous negotiation -(see below). The driver supports scatter-gather. Transfers are DMA -based, but do not (yet) make use of the AM53/79C974 MDL mode. -Max. transfer rate is 10MHz (whatever this is in real life). The -transfer rate is negotiated with each device (see dmesg output). The -AM53/79C974 has a 96-byte DMA FIFO to the PCI bus and a 16-byte SCSI -FIFO. It provides active negation and glitch suppression functions. -Burst DMA transfer rate is 132 MBytes/sec. - - -Configuration -------------- - -The following communication characteristics can be set individually -for every SCSI device on the bus: - - - enable/disable sync. negotiation - - transfer rate - - asynchronous or synchronous communication - - in case of sync. communication, the sync. offset - -The sync. offset specifies the number of bytes that can be sent or -received from the SCSI bus without ACK resp. REQ signal. -CAUTION: USING SYNCHRONOUS MODE ON LONG SCSI CABLES MAY CAUSE - COMMUNICATION PROBLEMS LEADING TO LOSS OF DATA. - -The default setting of the SCSI communication parameters is as follows: - - no negotiation - - 5.0 MHz transfer rate - - asynchronous mode - - zero offset - -The parameters can be modified by passing a string with the following -syntax to the kernel: - - AM53C974=host-scsi-id,target-scsi-id,max-rate,max-offset - -The parameters will be used by the driver as negotiation basis. The -range of the rate parameter is 3 to 10 MHz. The range of the -sync. offset parameter is 0 to 15 bytes. A value of 0 denotes -asynchronous comm. mode. If the target cannot cope with the specified -transfer rate, sync. mode or sync. offset, the negotiation result -will differ from the specified values. The negotiation result is -printed out at the end of the negotiation process (to read it, use the -dmesg program or the appropriate syslog). The parameter strings -(blank separated) can be passed to the kernel at the LILO prompt, or -as part of the LILO configuration file. - -For example, the string "AM53C974=7,2,8,15" would be interpreted as -follows: - -For communication between the controller with SCSI-ID 7 and the -device with SCSI-ID 2 a transfer rate of 8MHz in synchronous mode with -max. 15 bytes offset should be negotiated. - -As an example, here my LILO configuration file: - boot = /dev/sda - compact - #prompt - delay = 50 # optional, for systems that boot very quickly - vga = normal # force sane state - ramdisk = 0 # paranoia setting - root = current # use "current" root - image = /usr/src/linux/arch/i386/boot/zImage - label = linux - append = "AM53C974=7,0,10,0 AM53C974=7,1,10,0 AM53C974=7,2,10,15 AM53C974=7,4,10,0 AM53C974=7,5,10,0" - read-only - other = /dev/sda4 - label = os2 - other = /dev/sdb3 - loader = /boot/any_d.b - table = /dev/sdb - label = setup - -The same parameters at the LILO prompt: - - LILO boot: linux AM53C974=7,0,10,0 AM53C974=7,1,10,0 AM53C974=7,2,10,15 AM53C974=7,4,10,0 AM53C974=7,5,10,0 - -You can override parameters specified in the LILO configuration file -by parameters specified on the LILO command line. - - -BIOS usage ----------- -Version 0.4 of the driver will use the BIOS, if available. Otherwise -it will try its internal PCI scan and access routines. The driver -assumes that the controller's SCSI-ID (usually 7) has been correctly -loaded by the BIOS into the controller's register during system -boot. If the driver detects that the controller's SCSI ID is not '7' -it will print out a warning. If this happens to you please correct -setting of the controller's SCSI-ID. If it is wrong, then edit the -AM53C974_SCSI_ID definition in file AM53C974.h accordingly. - - -Test environment ----------------- -This driver was tested on a Compaq XL566 with the following SCSI configuration: -2 x HP C2247 fixed disk (internal, rate=10MHz, async.) -1 x Micropolis 1624 fixed disk (external, rate=8MHz, sync., offset=15 bytes) -1 x Wangtek W5525ES cartridge streamer (internal, rate=5MHz, async.) -1 x Toshiba XM-3301B CD-ROM (external, rate=5MHz, async.) - - -Known problems --------------- - - Compaq/Matsushita CD-ROM: - Use of this device with AM53C974 driver version 0.2 caused the kernel to - hang during Linux boot. If you encounter the problem, don't enable sync. - negotiation with the CD-ROM, i.e. simply don't specify comm. parameters - for this device on the LILO command line or configuration file. - The driver will thus use its default for the CD-ROM, which is 5MHz - transfer rate async and no sync. negotiation. - - Some disks cause problems. - - -What to do if there is a SCSI problem possibly related to the driver --------------------------------------------------------------------- - -Read Klaus Liedl's WWW page (http://www-c724.uibk.ac.at/XL/). In case -this does not help: Send me a complete description of the problem, -including your SCSI configuration plus as much debugging information -as possible. Don't wait until I ask you for this information. To -enable the generation of debugging output, remove the comments from -the following definitions in the AM53C974.h file: - - AM53C974_DEBUG - AM53C974_DEBUG_MSG - AM53C974_DEBUG_KEYWAIT - AM53C974_DEBUG_INFO - AM53C974_DEBUG_INTR - -With these definitions enabled, the driver will enter single-step mode -during Linux boot. Use the spacebar for stepping. Take note of at -least the last 10 printout sections (marked by dashes) before the -crash/hangup or whatever happens and send me all of this information -via email. If the system can boot, use the syslogd daemon to record -the debugging output. Maybe you can use the ramdisk for this purpose -too (if necessary, kindly ask K. Liedl (Klaus.Liedl@uibk.ac.at) for -support, he knows how to do it -- I never tried). Stay in email -contact with me. Be aware that the following weeks/months could be the -worst of your life. Note: If single-stepping takes up too much time, -you can try to let the driver catch the problem by pressing the 'r' -key. The driver will automatically enter single-step mode if it has -detected something weird. - - -Author's Contact Address ------------------------ -Email: fri@rsx42sun0.dofn.de -Phone: x49-7545-2256 (office), x49-7541-42305 (home) -Home address: D. Frieauff, Stockerholzstr. 27, 88048 Friedrichshafen, Germany - - -!!!! Important Notice !!!! ------------------------------ -- Klaus Liedl maintains an excellent WWW page about Linux on Compaq XL. - It includes an FAQ, lots of tips & tricks as well as downloadable - boot disk images. The URL is: http://www-c724.uibk.ac.at/XL/ -- Volunteer wanted for further maintenance of this driver software. I - don't have the time anymore to do serious support as some of you will know. - - -Literature ----------- - - AMD AM53C974 PC-SCSI Technical Manual, publication #18624B - - Amendment to the AMD AM53C974 PC-SCSI Technical Manual - - AMD AM79C974 PC-NET Datasheet, publication #18681 - - Amendment to the AMD AM79C974 PC-NET Datasheet - - -THANKS to ---------- - - Drew Eckhardt, Robin Cutshaw, K. Liedl, Robert J. Pappas, A. Grenier, - Mark Stockton, David C. Niemi, Ben Craft, and many others who have helped diff -Nru a/Documentation/scsi/BusLogic.txt b/Documentation/scsi/BusLogic.txt --- a/Documentation/scsi/BusLogic.txt Wed Feb 4 16:51:34 2004 +++ b/Documentation/scsi/BusLogic.txt Wed Feb 4 16:51:34 2004 @@ -40,10 +40,9 @@ to achieve the full performance that BusLogic SCSI Host Adapters and modern SCSI peripherals are capable of, and to provide a highly robust driver that can be depended upon for high performance mission critical applications. All of -the major performance and error recovery features can be configured from the -Linux kernel command line or at module initialization time, allowing individual -installations to tune driver performance and error recovery to their particular -needs. +the major performance features can be configured from the Linux kernel command +line or at module initialization time, allowing individual installations to +tune driver performance and error recovery to their particular needs. The latest information on Linux support for BusLogic SCSI Host Adapters, as well as the most recent release of this driver and the latest firmware for the @@ -95,10 +94,10 @@ adapter hardware configuration, including the synchronous transfer parameters requested and negotiated with each target device. AutoSCSI settings for Synchronous Negotiation, Wide Negotiation, and Disconnect/Reconnect are - reported for each target device, as well as the status of Tagged Queuing and - Error Recovery. If the same setting is in effect for all target devices, - then a single word or phrase is used; otherwise, a letter is provided for - each target device to indicate the individual status. The following examples + reported for each target device, as well as the status of Tagged Queuing. + If the same setting is in effect for all target devices, then a single word + or phrase is used; otherwise, a letter is provided for each target device to + indicate the individual status. The following examples should clarify this reporting format: Synchronous Negotiation: Ultra @@ -131,9 +130,6 @@ The status of Wide Negotiation, Disconnect/Reconnect, and Tagged Queuing are reported as "Enabled", Disabled", or a sequence of "Y" and "N" letters. - The Error Recovery option is reported as "Default", "Hard Reset", - "Bus Device Reset", "None" or a sequence of "D", "H", "B", and "N" letters. - o Performance Features BusLogic SCSI Host Adapters directly implement SCSI-2 Tagged Queuing, and so @@ -476,48 +472,6 @@ Target Device 1, and so on; if the sequence of "Y", "N", and "X" characters does not cover all the Target Devices, unspecified characters are assumed to be "X". - -The BusLogic Driver Error Recovery Option allows for explicitly specifying -the Error Recovery action to be performed when BusLogic_ResetCommand is -called due to a SCSI Command failing to complete successfully. The following -options are available: - -ErrorRecovery:Default - - The "ErrorRecovery:Default" or "ER:Default" option selects between the Hard - Reset and Bus Device Reset options based on the recommendation of the SCSI - Subsystem. - -ErrorRecovery:HardReset - - The "ErrorRecovery:HardReset" or "ER:HardReset" option will initiate a Host - Adapter Hard Reset which also causes a SCSI Bus Reset. - -ErrorRecovery:BusDeviceReset - - The "ErrorRecovery:BusDeviceReset" or "ER:BusDeviceReset" option will send - a Bus Device Reset message to the individual Target Device causing the - error. If Error Recovery is again initiated for this Target Device and no - SCSI Command to this Target Device has completed successfully since the Bus - Device Reset message was sent, then a Hard Reset will be attempted. - -ErrorRecovery:None - - The "ErrorRecovery:None" or "ER:None" option suppresses Error Recovery. - This option should only be selected if a SCSI Bus Reset or Bus Device Reset - will cause the Target Device or a critical operation to suffer a complete - and unrecoverable failure. - -ErrorRecovery: - - The "ErrorRecovery:" or "ER:" option controls - Error Recovery individually for each Target Device. is a - sequence of "D", "H", "B", and "N" characters. "D" selects Default, "H" - selects Hard Reset, "B" selects Bus Device Reset, and "N" selects None. - The first character refers to Target Device 0, the second to Target Device - 1, and so on; if the sequence of "D", "H", "B", and "N" characters does not - cover all the possible Target Devices, unspecified characters are assumed - to be "D". The BusLogic Driver Miscellaneous Options comprise the following: diff -Nru a/Documentation/scsi/scsi_mid_low_api.txt b/Documentation/scsi/scsi_mid_low_api.txt --- a/Documentation/scsi/scsi_mid_low_api.txt Wed Feb 4 16:51:36 2004 +++ b/Documentation/scsi/scsi_mid_low_api.txt Wed Feb 4 16:51:36 2004 @@ -1091,14 +1091,44 @@ * @scp: pointer to scsi command object * @done: function pointer to be invoked on completion * - * Returns 0 on success and 1 if the LLD or the HBA is busy (i.e. run - * out of resources to queue further commands). Other types of errors - * that are detected immediately are flagged by setting scp->result - * to an appropriate value, invoking the 'done' callback, and then - * returning 0 from this function. If the command is not performed - * immediately (and the LLD is starting (or will start) the given - * command) then this function should place 0 in scp->result and - * return 0. + * Returns 0 on success. + * + * If there's a failure, return either: + * + * SCSI_MLQUEUE_DEVICE_BUSY if the device queue is full, or + * SCSI_MLQUEUE_HOST_BUSY if the entire host queue is full + * + * On both of these returns, the mid-layer will requeue the I/O + * + * - if the return is SCSI_MLQUEUE_DEVICE_BUSY, only that particular + * device will be paused, and it will be unpaused when a command to + * the device returns (or after a brief delay if there are no more + * outstanding commands to it). Commands to other devices continue + * to be processed normally. + * + * - if the return is SCSI_MLQUEUE_HOST_BUSY, all I/O to the host + * is paused and will be unpaused when any command returns from + * the host (or after a brief delay if there are no outstanding + * commands to the host). + * + * For compatibility with earlier versions of queuecommand, any + * other return value is treated the same as + * SCSI_MLQUEUE_HOST_BUSY. + * + * Other types of errors that are detected immediately may be + * flagged by setting scp->result to an appropriate value, + * invoking the 'done' callback, and then returning 0 from this + * function. If the command is not performed immediately (and the + * LLD is starting (or will start) the given command) then this + * function should place 0 in scp->result and return 0. + * + * Command ownership. If the driver returns zero, it owns the + * command and must take responsibility for ensuring the 'done' + * callback is executed. Note: the driver may call done before + * returning zero, but after it has called done, it may not + * return any value other than zero. If the driver makes a + * non-zero return, it must not execute the command's done + * callback at any time. * * Locks: struct Scsi_Host::host_lock held on entry (with "irqsave") * and is expected to be held on return. diff -Nru a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt --- a/Documentation/sysctl/kernel.txt Wed Feb 4 16:51:35 2004 +++ b/Documentation/sysctl/kernel.txt Wed Feb 4 16:51:35 2004 @@ -254,8 +254,8 @@ printk_ratelimit: Some warning messages are rate limited. printk_ratelimit specifies -the minimum length of time between these messages, by default we -allow one every 5 seconds. +the minimum length of time between these messages (in jiffies), by +default we allow one every 5 seconds. A value of 0 will disable rate limiting. diff -Nru a/Makefile b/Makefile --- a/Makefile Wed Feb 4 16:51:36 2004 +++ b/Makefile Wed Feb 4 16:51:36 2004 @@ -830,7 +830,7 @@ cmd_cscope-file = $(all-sources) > cscope.files quiet_cmd_cscope = MAKE cscope.out - cmd_cscope = cscope -k -b + cmd_cscope = cscope -k -b -q cscope: FORCE $(call cmd,cscope-file) diff -Nru a/arch/alpha/oprofile/common.c b/arch/alpha/oprofile/common.c --- a/arch/alpha/oprofile/common.c Wed Feb 4 16:51:33 2004 +++ b/arch/alpha/oprofile/common.c Wed Feb 4 16:51:33 2004 @@ -57,7 +57,7 @@ /* Compute the mask of enabled counters. */ for (i = e = 0; i < model->num_counters; ++i) - if (ctr[0].enabled) + if (ctr[i].enabled) e |= 1 << i; reg.enable = e; diff -Nru a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c --- a/arch/arm/kernel/process.c Wed Feb 4 16:51:37 2004 +++ b/arch/arm/kernel/process.c Wed Feb 4 16:51:37 2004 @@ -264,7 +264,7 @@ if (!thread) thread = ll_alloc_task_struct(); -#ifdef CONFIG_SYSRQ +#ifdef CONFIG_MAGIC_SYSRQ /* * The stack must be cleared if you want SYSRQ-T to * give sensible stack usage information diff -Nru a/arch/arm26/kernel/process.c b/arch/arm26/kernel/process.c --- a/arch/arm26/kernel/process.c Wed Feb 4 16:51:37 2004 +++ b/arch/arm26/kernel/process.c Wed Feb 4 16:51:37 2004 @@ -257,7 +257,7 @@ if (!thread) thread = ll_alloc_task_struct(); -#ifdef CONFIG_SYSRQ +#ifdef CONFIG_MAGIC_SYSRQ /* * The stack must be cleared if you want SYSRQ-T to * give sensible stack usage information diff -Nru a/arch/h8300/lib/checksum.c b/arch/h8300/lib/checksum.c --- a/arch/h8300/lib/checksum.c Wed Feb 4 16:51:33 2004 +++ b/arch/h8300/lib/checksum.c Wed Feb 4 16:51:33 2004 @@ -32,7 +32,6 @@ of the assembly has to go. */ #include -#include static inline unsigned short from32to16(unsigned long x) { diff -Nru a/arch/h8300/platform/h8300h/ints.c b/arch/h8300/platform/h8300h/ints.c --- a/arch/h8300/platform/h8300h/ints.c Wed Feb 4 16:51:34 2004 +++ b/arch/h8300/platform/h8300h/ints.c Wed Feb 4 16:51:34 2004 @@ -140,8 +140,9 @@ if (use_kmalloc) irq_handle = (irq_handler_t *)kmalloc(sizeof(irq_handler_t), GFP_ATOMIC); else { - irq_handle = alloc_bootmem(sizeof(irq_handler_t)); - (unsigned long)irq_handle |= 0x80000000; /* bootmem allocater */ + /* use bootmem allocater */ + irq_handle = (irq_handler_t *)alloc_bootmem(sizeof(irq_handler_t)); + irq_handle = (irq_handler_t *)((unsigned long)irq_handle | 0x80000000); } if (irq_handle == NULL) @@ -230,11 +231,9 @@ { int i = *(loff_t *) v; - if (i < NR_IRQS) { - if (irq_list[i]) { - seq_printf(p, "%3d: %10u ",i,irq_list[i]->count); - seq_printf(p, "%s\n", irq_list[i]->devname); - } + if ((i < NR_IRQS) && (irq_list[i]!=NULL)) { + seq_printf(p, "%3d: %10u ",i,irq_list[i]->count); + seq_printf(p, "%s\n", irq_list[i]->devname); } return 0; diff -Nru a/arch/h8300/platform/h8s/ints.c b/arch/h8300/platform/h8s/ints.c --- a/arch/h8300/platform/h8s/ints.c Wed Feb 4 16:51:35 2004 +++ b/arch/h8300/platform/h8s/ints.c Wed Feb 4 16:51:35 2004 @@ -178,8 +178,9 @@ if (use_kmalloc) irq_handle = (irq_handler_t *)kmalloc(sizeof(irq_handler_t), GFP_ATOMIC); else { - irq_handle = alloc_bootmem(sizeof(irq_handler_t)); - (unsigned long)irq_handle |= 0x80000000; /* bootmem allocater */ + /* use bootmem allocater */ + irq_handle = (irq_handler_t *)alloc_bootmem(sizeof(irq_handler_t)); + irq_handle = (irq_handler_t *)((unsigned long)irq_handle | 0x80000000); } if (irq_handle == NULL) @@ -282,11 +283,9 @@ { int i = *(loff_t *) v; - if (i < NR_IRQS) { - if (irq_list[i]) { - seq_printf(p, "%3d: %10u ",i,irq_list[i]->count); - seq_printf(p, "%s\n", irq_list[i]->devname); - } + if ((i < NR_IRQS) && (irq_list[i] !=NULL)) { + seq_printf(p, "%3d: %10u ",i,irq_list[i]->count); + seq_printf(p, "%s\n", irq_list[i]->devname); } return 0; diff -Nru a/arch/i386/boot/compressed/misc.c b/arch/i386/boot/compressed/misc.c --- a/arch/i386/boot/compressed/misc.c Wed Feb 4 16:51:36 2004 +++ b/arch/i386/boot/compressed/misc.c Wed Feb 4 16:51:36 2004 @@ -104,7 +104,7 @@ static void *malloc(int size); static void free(void *where); -static void puts(const char *); +static void putstr(const char *); extern int end; static long free_mem_ptr = (long)&end; @@ -169,7 +169,7 @@ vidmem[i] = ' '; } -static void puts(const char *s) +static void putstr(const char *s) { int x,y,pos; char c; @@ -287,9 +287,9 @@ static void error(char *x) { - puts("\n\n"); - puts(x); - puts("\n\n -- System halted"); + putstr("\n\n"); + putstr(x); + putstr("\n\n -- System halted"); while(1); /* Halt */ } @@ -373,9 +373,9 @@ else setup_output_buffer_if_we_run_high(mv); makecrc(); - puts("Uncompressing Linux... "); + putstr("Uncompressing Linux... "); gunzip(); - puts("Ok, booting the kernel.\n"); + putstr("Ok, booting the kernel.\n"); if (high_loaded) close_output_buffer_if_we_run_high(mv); return high_loaded; } diff -Nru a/arch/i386/boot/setup.S b/arch/i386/boot/setup.S --- a/arch/i386/boot/setup.S Wed Feb 4 16:51:35 2004 +++ b/arch/i386/boot/setup.S Wed Feb 4 16:51:35 2004 @@ -49,6 +49,8 @@ * by Matt Domsch October 2002 * conformant to T13 Committee www.t13.org * projects 1572D, 1484D, 1386D, 1226DT + * disk signature read by Matt Domsch + * and Andrew Wilks September 2003 */ #include @@ -578,6 +580,25 @@ #endif #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) +# Read the first sector of device 80h and store the 4-byte signature + movl $0xFFFFFFFF, %eax + movl %eax, (DISK80_SIG_BUFFER) # assume failure + movb $READ_SECTORS, %ah + movb $1, %al # read 1 sector + movb $0x80, %dl # from device 80 + movb $0, %dh # at head 0 + movw $1, %cx # cylinder 0, sector 0 + pushw %es + pushw %ds + popw %es + movw $EDDBUF, %bx + int $0x13 + jc disk_sig_done + movl (EDDBUF+MBR_SIG_OFFSET), %eax + movl %eax, (DISK80_SIG_BUFFER) # store success +disk_sig_done: + popw %es + # Do the BIOS Enhanced Disk Drive calls # This consists of two calls: # int 13h ah=41h "Check Extensions Present" diff -Nru a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c --- a/arch/i386/kernel/acpi/boot.c Wed Feb 4 16:51:37 2004 +++ b/arch/i386/kernel/acpi/boot.c Wed Feb 4 16:51:37 2004 @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -311,7 +312,14 @@ #endif /* CONFIG_ACPI_BUS */ - +#ifdef CONFIG_X86_IO_APIC +int acpi_irq_to_vector(u32 irq) +{ + if (use_pci_vector() && !platform_legacy_irq(irq)) + irq = IO_APIC_VECTOR(irq); + return irq; +} +#endif static unsigned long __init acpi_scan_rsdp ( diff -Nru a/arch/i386/kernel/cpuid.c b/arch/i386/kernel/cpuid.c --- a/arch/i386/kernel/cpuid.c Wed Feb 4 16:51:33 2004 +++ b/arch/i386/kernel/cpuid.c Wed Feb 4 16:51:33 2004 @@ -1,4 +1,3 @@ -#ident "$Id$" /* ----------------------------------------------------------------------- * * * Copyright 2000 H. Peter Anvin - All Rights Reserved diff -Nru a/arch/i386/kernel/edd.c b/arch/i386/kernel/edd.c --- a/arch/i386/kernel/edd.c Wed Feb 4 16:51:34 2004 +++ b/arch/i386/kernel/edd.c Wed Feb 4 16:51:34 2004 @@ -2,6 +2,7 @@ * linux/arch/i386/kernel/edd.c * Copyright (C) 2002, 2003 Dell Inc. * by Matt Domsch + * disk80 signature by Matt Domsch, Andrew Wilks, and Sandeep K. Shandilya * * BIOS Enhanced Disk Drive Services (EDD) * conformant to T13 Committee www.t13.org @@ -59,9 +60,9 @@ MODULE_DESCRIPTION("sysfs interface to BIOS EDD information"); MODULE_LICENSE("GPL"); -#define EDD_VERSION "0.10 2003-Oct-11" +#define EDD_VERSION "0.12 2004-Jan-26" #define EDD_DEVICE_NAME_SIZE 16 -#define REPORT_URL "http://domsch.com/linux/edd30/results.html" +#define REPORT_URL "http://linux.dell.com/edd/results.html" #define left (PAGE_SIZE - (p - buf) - 1) @@ -260,6 +261,14 @@ } static ssize_t +edd_show_disk80_sig(struct edd_device *edev, char *buf) +{ + char *p = buf; + p += snprintf(p, left, "0x%08x\n", edd_disk80_sig); + return (p - buf); +} + +static ssize_t edd_show_extensions(struct edd_device *edev, char *buf) { struct edd_info *info = edd_dev_get_info(edev); @@ -429,6 +438,15 @@ return 1; } +static int +edd_has_disk80_sig(struct edd_device *edev) +{ + struct edd_info *info = edd_dev_get_info(edev); + if (!edev || !info) + return 0; + return info->device == 0x80; +} + static EDD_DEVICE_ATTR(raw_data, 0444, edd_show_raw_data, NULL); static EDD_DEVICE_ATTR(version, 0444, edd_show_version, NULL); static EDD_DEVICE_ATTR(extensions, 0444, edd_show_extensions, NULL); @@ -443,6 +461,7 @@ edd_has_default_sectors_per_track); static EDD_DEVICE_ATTR(interface, 0444, edd_show_interface, edd_has_edd30); static EDD_DEVICE_ATTR(host_bus, 0444, edd_show_host_bus, edd_has_edd30); +static EDD_DEVICE_ATTR(mbr_signature, 0444, edd_show_disk80_sig, edd_has_disk80_sig); /* These are default attributes that are added for every edd @@ -464,6 +483,7 @@ &edd_attr_default_sectors_per_track, &edd_attr_interface, &edd_attr_host_bus, + &edd_attr_mbr_signature, NULL, }; diff -Nru a/arch/i386/kernel/i386_ksyms.c b/arch/i386/kernel/i386_ksyms.c --- a/arch/i386/kernel/i386_ksyms.c Wed Feb 4 16:51:37 2004 +++ b/arch/i386/kernel/i386_ksyms.c Wed Feb 4 16:51:37 2004 @@ -32,7 +32,6 @@ #include #include #include -#include #include extern void dump_thread(struct pt_regs *, struct user *); @@ -201,11 +200,6 @@ EXPORT_SYMBOL(kmap_atomic); EXPORT_SYMBOL(kunmap_atomic); EXPORT_SYMBOL(kmap_atomic_to_page); -#endif - -#ifdef CONFIG_EDD_MODULE -EXPORT_SYMBOL(edd); -EXPORT_SYMBOL(eddnr); #endif #if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE) diff -Nru a/arch/i386/kernel/i387.c b/arch/i386/kernel/i387.c --- a/arch/i386/kernel/i387.c Wed Feb 4 16:51:37 2004 +++ b/arch/i386/kernel/i387.c Wed Feb 4 16:51:37 2004 @@ -451,15 +451,18 @@ int set_fpxregs( struct task_struct *tsk, struct user_fxsr_struct __user *buf ) { + int ret = 0; + if ( cpu_has_fxsr ) { - __copy_from_user( &tsk->thread.i387.fxsave, buf, - sizeof(struct user_fxsr_struct) ); + if (__copy_from_user( &tsk->thread.i387.fxsave, buf, + sizeof(struct user_fxsr_struct) )) + ret = -EFAULT; /* mxcsr bit 6 and 31-16 must be zero for security reasons */ tsk->thread.i387.fxsave.mxcsr &= 0xffbf; - return 0; } else { - return -EIO; + ret = -EIO; } + return ret; } /* diff -Nru a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c --- a/arch/i386/kernel/mpparse.c Wed Feb 4 16:51:34 2004 +++ b/arch/i386/kernel/mpparse.c Wed Feb 4 16:51:34 2004 @@ -1126,7 +1126,8 @@ /* Don't set up the ACPI SCI because it's already set up */ if (acpi_fadt.sci_int == irq) { - entry->irq = irq; /*we still need to set entry's irq*/ + irq = acpi_irq_to_vector(irq); + entry->irq = irq; /* we still need to set entry's irq */ continue; } @@ -1156,18 +1157,14 @@ if ((1<irq = irq; + entry->irq = acpi_irq_to_vector(irq); continue; } mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<irq = irq; + entry->irq = acpi_irq_to_vector(irq); } printk(KERN_DEBUG "%02x:%02x:%02x[%c] -> %d-%d -> IRQ %d\n", entry->id.segment, entry->id.bus, diff -Nru a/arch/i386/kernel/msr.c b/arch/i386/kernel/msr.c --- a/arch/i386/kernel/msr.c Wed Feb 4 16:51:35 2004 +++ b/arch/i386/kernel/msr.c Wed Feb 4 16:51:35 2004 @@ -1,4 +1,3 @@ -#ident "$Id$" /* ----------------------------------------------------------------------- * * * Copyright 2000 H. Peter Anvin - All Rights Reserved diff -Nru a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c --- a/arch/i386/kernel/setup.c Wed Feb 4 16:51:35 2004 +++ b/arch/i386/kernel/setup.c Wed Feb 4 16:51:35 2004 @@ -444,6 +444,12 @@ #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) unsigned char eddnr; struct edd_info edd[EDDMAXNR]; +unsigned int edd_disk80_sig; +#ifdef CONFIG_EDD_MODULE +EXPORT_SYMBOL(eddnr); +EXPORT_SYMBOL(edd); +EXPORT_SYMBOL(edd_disk80_sig); +#endif /** * copy_edd() - Copy the BIOS EDD information * from empty_zero_page into a safe place. @@ -453,6 +459,7 @@ { eddnr = EDD_NR; memcpy(edd, EDD_BUF, sizeof(edd)); + edd_disk80_sig = DISK80_SIGNATURE; } #else #define copy_edd() do {} while (0) diff -Nru a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c --- a/arch/i386/kernel/smpboot.c Wed Feb 4 16:51:35 2004 +++ b/arch/i386/kernel/smpboot.c Wed Feb 4 16:51:35 2004 @@ -33,6 +33,7 @@ * Dave Jones : Report invalid combinations of Athlon CPUs. * Rusty Russell : Hacked into shape for new "hotplug" boot process. */ +#include #include #include #include @@ -503,6 +504,7 @@ { [0 ... MAX_NUMNODES-1] = CPU_MASK_NONE }; /* which node each logical CPU is on */ int cpu_2_node[NR_CPUS] = { [0 ... NR_CPUS-1] = 0 }; +EXPORT_SYMBOL(cpu_2_node); /* set up a mapping between cpu and node. */ static inline void map_cpu_to_node(int cpu, int node) diff -Nru a/arch/i386/kernel/timers/timer_tsc.c b/arch/i386/kernel/timers/timer_tsc.c --- a/arch/i386/kernel/timers/timer_tsc.c Wed Feb 4 16:51:36 2004 +++ b/arch/i386/kernel/timers/timer_tsc.c Wed Feb 4 16:51:36 2004 @@ -232,9 +232,13 @@ /* sanity check to ensure we're not always losing ticks */ if (lost_count++ > 100) { printk(KERN_WARNING "Losing too many ticks!\n"); - printk(KERN_WARNING "TSC cannot be used as a timesource." - " (Are you running with SpeedStep?)\n"); - printk(KERN_WARNING "Falling back to a sane timesource.\n"); + printk(KERN_WARNING "TSC cannot be used as a timesource. "); + printk(KERN_WARNING "Possible reasons for this are:\n"); + printk(KERN_WARNING " You're running with Speedstep,\n"); + printk(KERN_WARNING " You don't have DMA enabled for your hard disk (see hdparm),\n"); + printk(KERN_WARNING " Incorrect TSC synchronization on an SMP system (see dmesg).\n"); + printk(KERN_WARNING "Falling back to a sane timesource now.\n"); + clock_fallback(); } } else diff -Nru a/arch/i386/mach-default/topology.c b/arch/i386/mach-default/topology.c --- a/arch/i386/mach-default/topology.c Wed Feb 4 16:51:37 2004 +++ b/arch/i386/mach-default/topology.c Wed Feb 4 16:51:37 2004 @@ -34,10 +34,8 @@ #ifdef CONFIG_NUMA #include #include -#include struct i386_node node_devices[MAX_NUMNODES]; -struct i386_memblk memblk_devices[MAX_NR_MEMBLKS]; static int __init topology_init(void) { @@ -47,8 +45,6 @@ arch_register_node(i); for (i = 0; i < NR_CPUS; i++) if (cpu_possible(i)) arch_register_cpu(i); - for (i = 0; i < num_online_memblks(); i++) - arch_register_memblk(i); return 0; } diff -Nru a/arch/i386/mach-es7000/topology.c b/arch/i386/mach-es7000/topology.c --- a/arch/i386/mach-es7000/topology.c Wed Feb 4 16:51:37 2004 +++ b/arch/i386/mach-es7000/topology.c Wed Feb 4 16:51:37 2004 @@ -34,10 +34,8 @@ #ifdef CONFIG_NUMA #include #include -#include struct i386_node node_devices[MAX_NUMNODES]; -struct i386_memblk memblk_devices[MAX_NR_MEMBLKS]; static int __init topology_init(void) { @@ -47,8 +45,6 @@ arch_register_node(i); for (i = 0; i < NR_CPUS; i++) if (cpu_possible(i)) arch_register_cpu(i); - for (i = 0; i < num_online_memblks(); i++) - arch_register_memblk(i); return 0; } diff -Nru a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c --- a/arch/ia64/kernel/acpi.c Wed Feb 4 16:51:35 2004 +++ b/arch/ia64/kernel/acpi.c Wed Feb 4 16:51:35 2004 @@ -409,7 +409,7 @@ pxm_bit_set(pxm); /* Insertion sort based on base address */ - pend = &node_memblk[num_memblks]; + pend = &node_memblk[num_node_memblks]; for (p = &node_memblk[0]; p < pend; p++) { if (paddr < p->start_paddr) break; @@ -421,7 +421,7 @@ p->start_paddr = paddr; p->size = size; p->nid = pxm; - num_memblks++; + num_node_memblks++; } void __init @@ -448,7 +448,7 @@ } /* set logical node id in memory chunk structure */ - for (i = 0; i < num_memblks; i++) + for (i = 0; i < num_node_memblks; i++) node_memblk[i].nid = pxm_to_nid_map[node_memblk[i].nid]; /* assign memory bank numbers for each chunk on each node */ @@ -456,7 +456,7 @@ int bank; bank = 0; - for (j = 0; j < num_memblks; j++) + for (j = 0; j < num_node_memblks; j++) if (node_memblk[j].nid == i) node_memblk[j].bank = bank++; } @@ -466,7 +466,7 @@ node_cpuid[i].nid = pxm_to_nid_map[node_cpuid[i].nid]; printk(KERN_INFO "Number of logical nodes in system = %d\n", numnodes); - printk(KERN_INFO "Number of memory chunks in system = %d\n", num_memblks); + printk(KERN_INFO "Number of memory chunks in system = %d\n", num_node_memblks); if (!slit_table) return; memset(numa_slit, -1, sizeof(numa_slit)); diff -Nru a/arch/ia64/kernel/unwind.c b/arch/ia64/kernel/unwind.c --- a/arch/ia64/kernel/unwind.c Wed Feb 4 16:51:37 2004 +++ b/arch/ia64/kernel/unwind.c Wed Feb 4 16:51:37 2004 @@ -650,7 +650,7 @@ /* Unwind decoder routines */ -static enum unw_register_index __attribute__((const)) +static enum unw_register_index __attribute_const__ decode_abreg (unsigned char abreg, int memory) { switch (abreg) { diff -Nru a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c --- a/arch/ia64/mm/discontig.c Wed Feb 4 16:51:37 2004 +++ b/arch/ia64/mm/discontig.c Wed Feb 4 16:51:37 2004 @@ -419,14 +419,14 @@ func = arg; - if (!num_memblks) { - /* No SRAT table, to assume one node (node 0) */ + if (!num_node_memblks) { + /* No SRAT table, so assume one node (node 0) */ if (start < end) (*func)(start, len, 0); return; } - for (i = 0; i < num_memblks; i++) { + for (i = 0; i < num_node_memblks; i++) { rs = max(start, node_memblk[i].start_paddr); re = min(end, node_memblk[i].start_paddr + node_memblk[i].size); diff -Nru a/arch/ia64/mm/numa.c b/arch/ia64/mm/numa.c --- a/arch/ia64/mm/numa.c Wed Feb 4 16:51:34 2004 +++ b/arch/ia64/mm/numa.c Wed Feb 4 16:51:34 2004 @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -21,7 +20,6 @@ #include #include -static struct memblk *sysfs_memblks; static struct node *sysfs_nodes; static struct cpu *sysfs_cpus; @@ -29,8 +27,8 @@ * The following structures are usually initialized by ACPI or * similar mechanisms and describe the NUMA characteristics of the machine. */ -int num_memblks; -struct node_memblk_s node_memblk[NR_MEMBLKS]; +int num_node_memblks; +struct node_memblk_s node_memblk[NR_NODE_MEMBLKS]; struct node_cpuid_s node_cpuid[NR_CPUS]; /* * This is a matrix with "distances" between nodes, they should be @@ -44,12 +42,12 @@ { int i; - for (i = 0; i < num_memblks; i++) + for (i = 0; i < num_node_memblks; i++) if (paddr >= node_memblk[i].start_paddr && paddr < node_memblk[i].start_paddr + node_memblk[i].size) break; - return (i < num_memblks) ? node_memblk[i].nid : (num_memblks ? -1 : 0); + return (i < num_node_memblks) ? node_memblk[i].nid : (num_node_memblks ? -1 : 0); } static int __init topology_init(void) @@ -63,18 +61,8 @@ } memset(sysfs_nodes, 0, sizeof(struct node) * numnodes); - sysfs_memblks = kmalloc(sizeof(struct memblk) * num_memblks, - GFP_KERNEL); - if (!sysfs_memblks) { - kfree(sysfs_nodes); - err = -ENOMEM; - goto out; - } - memset(sysfs_memblks, 0, sizeof(struct memblk) * num_memblks); - sysfs_cpus = kmalloc(sizeof(struct cpu) * NR_CPUS, GFP_KERNEL); if (!sysfs_cpus) { - kfree(sysfs_memblks); kfree(sysfs_nodes); err = -ENOMEM; goto out; @@ -83,11 +71,6 @@ for (i = 0; i < numnodes; i++) if ((err = register_node(&sysfs_nodes[i], i, 0))) - goto out; - - for (i = 0; i < num_memblks; i++) - if ((err = register_memblk(&sysfs_memblks[i], i, - &sysfs_nodes[memblk_to_node(i)]))) goto out; for (i = 0; i < NR_CPUS; i++) diff -Nru a/arch/ia64/sn/io/io.c b/arch/ia64/sn/io/io.c --- a/arch/ia64/sn/io/io.c Wed Feb 4 16:51:35 2004 +++ b/arch/ia64/sn/io/io.c Wed Feb 4 16:51:35 2004 @@ -6,9 +6,9 @@ * Copyright (C) 1992-1997, 2000-2003 Silicon Graphics, Inc. All Rights Reserved. */ -#include #include #include +#include #include #include #include @@ -123,7 +123,7 @@ /* sanity check */ if (byte_count_max > byte_count) - return(NULL); + return NULL; hubinfo_get(hubv, &hubinfo); @@ -152,7 +152,7 @@ * For now, reject requests that span big windows. */ if ((xtalk_addr % BWIN_SIZE) + byte_count > BWIN_SIZE) - return(NULL); + return NULL; /* Round xtalk address down for big window alignement */ @@ -184,7 +184,7 @@ widget == bw_piomap->hpio_xtalk_info.xp_target) { bw_piomap->hpio_holdcnt++; spin_unlock(&hubinfo->h_bwlock); - return(bw_piomap); + return bw_piomap; } } @@ -264,7 +264,7 @@ done: spin_unlock(&hubinfo->h_bwlock); - return(bw_piomap); + return bw_piomap; } /* @@ -330,18 +330,18 @@ { /* Verify that range can be mapped using the specified piomap */ if (xtalk_addr < hub_piomap->hpio_xtalk_info.xp_xtalk_addr) - return(0); + return 0; if (xtalk_addr + byte_count > ( hub_piomap->hpio_xtalk_info.xp_xtalk_addr + hub_piomap->hpio_xtalk_info.xp_mapsz)) - return(0); + return 0; if (hub_piomap->hpio_flags & HUB_PIOMAP_IS_VALID) - return(hub_piomap->hpio_xtalk_info.xp_kvaddr + - (xtalk_addr % hub_piomap->hpio_xtalk_info.xp_mapsz)); + return hub_piomap->hpio_xtalk_info.xp_kvaddr + + (xtalk_addr % hub_piomap->hpio_xtalk_info.xp_mapsz); else - return(0); + return 0; } @@ -388,9 +388,9 @@ addr = (caddr_t)iaddr; } #endif - return(addr); + return addr; } else - return(0); + return 0; } @@ -425,7 +425,7 @@ if (flags & XTALK_FIXED) dmamap->hdma_flags |= HUB_DMAMAP_IS_FIXED; - return(dmamap); + return dmamap; } /* @@ -467,7 +467,7 @@ } /* There isn't actually any DMA mapping hardware on the hub. */ - return( (PHYS_TO_DMA(paddr)) ); + return (PHYS_TO_DMA(paddr)); } /* @@ -497,7 +497,7 @@ } /* There isn't actually any DMA mapping hardware on the hub. */ - return(palenlist); + return palenlist; } /* @@ -532,7 +532,7 @@ size_t byte_count, /* length */ unsigned flags) /* defined in dma.h */ { - return( (PHYS_TO_DMA(paddr)) ); + return (PHYS_TO_DMA(paddr)); } /* @@ -549,7 +549,7 @@ { BUG(); /* no translation needed */ - return(palenlist); + return palenlist; } /*ARGSUSED*/ @@ -609,8 +609,8 @@ { nasid_t nasid = NASID_GET(addr); - if (((__psunsigned_t)addr >= RAW_NODE_SWIN_BASE(nasid, 0)) && - ((__psunsigned_t)addr < RAW_NODE_SWIN_BASE(nasid, 1))) + if (((unsigned long)addr >= RAW_NODE_SWIN_BASE(nasid, 0)) && + ((unsigned long)addr < RAW_NODE_SWIN_BASE(nasid, 1))) return 1; return 0; } @@ -626,8 +626,8 @@ return 1; /* XXX - Assume this is really a small window address */ - if (WIDGETID_GET((__psunsigned_t)addra) == - WIDGETID_GET((__psunsigned_t)addrb)) + if (WIDGETID_GET((unsigned long)addra) == + WIDGETID_GET((unsigned long)addrb)) return 1; return 0; diff -Nru a/arch/ia64/sn/io/machvec/pci_bus_cvlink.c b/arch/ia64/sn/io/machvec/pci_bus_cvlink.c --- a/arch/ia64/sn/io/machvec/pci_bus_cvlink.c Wed Feb 4 16:51:36 2004 +++ b/arch/ia64/sn/io/machvec/pci_bus_cvlink.c Wed Feb 4 16:51:36 2004 @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -22,13 +23,20 @@ static int done_probing; extern irqpda_t *irqpdaindr; -static int pci_bus_map_create(vertex_hdl_t xtalk, char * io_moduleid); +static int pci_bus_map_create(struct pcibr_list_s *softlistp, moduleid_t io_moduleid); vertex_hdl_t devfn_to_vertex(unsigned char busnum, unsigned int devfn); extern void register_pcibr_intr(int irq, pcibr_intr_t intr); -void sn_dma_flush_init(unsigned long start, unsigned long end, int idx, int pin, int slot); +static void sn_dma_flush_init(unsigned long start, + unsigned long end, + int idx, int pin, int slot); extern int cbrick_type_get_nasid(nasid_t); +extern void ioconfig_bus_new_entries(void); +extern void ioconfig_get_busnum(char *, int *); +extern int iomoduleid_get(nasid_t); +extern int pcibr_widget_to_bus(vertex_hdl_t); +extern int isIO9(int); #define IS_OPUS(nasid) (cbrick_type_get_nasid(nasid) == MODULE_OPUSBRICK) #define IS_ALTIX(nasid) (cbrick_type_get_nasid(nasid) == MODULE_CBRICK) @@ -37,7 +45,7 @@ * Init the provider asic for a given device */ -static void +static inline void __init set_pci_provider(struct sn_device_sysdata *device_sysdata) { pciio_info_t pciio_info = pciio_info_get(device_sysdata->vhdl); @@ -69,7 +77,7 @@ * pci_bus_to_vertex() - Given a logical Linux Bus Number returns the associated * pci bus vertex from the SGI IO Infrastructure. */ -vertex_hdl_t +static inline vertex_hdl_t pci_bus_to_vertex(unsigned char busnum) { @@ -157,16 +165,15 @@ * on the in use pin. This will prevent the race condition between PIO read responses and * DMA writes. */ -void -sn_dma_flush_init(unsigned long start, unsigned long end, int idx, int pin, int slot) { +static void +sn_dma_flush_init(unsigned long start, unsigned long end, int idx, int pin, int slot) +{ nasid_t nasid; unsigned long dnasid; int wid_num; int bus; struct sn_flush_device_list *p; - bridge_t *b; - bridgereg_t dev_sel; - extern int isIO9(int); + void *b; int bwin; int i; @@ -178,8 +185,8 @@ if (flush_nasid_list[nasid].widget_p == NULL) { flush_nasid_list[nasid].widget_p = (struct sn_flush_device_list **)kmalloc((HUB_WIDGET_ID_MAX+1) * sizeof(struct sn_flush_device_list *), GFP_KERNEL); - if (flush_nasid_list[nasid].widget_p <= 0) { - printk("sn_dma_flush_init: Cannot allocate memory for nasid list\n"); + if (!flush_nasid_list[nasid].widget_p) { + printk(KERN_WARNING "sn_dma_flush_init: Cannot allocate memory for nasid list\n"); return; } memset(flush_nasid_list[nasid].widget_p, 0, (HUB_WIDGET_ID_MAX+1) * sizeof(struct sn_flush_device_list *)); @@ -209,8 +216,8 @@ if (flush_nasid_list[nasid].widget_p[wid_num] == NULL) { flush_nasid_list[nasid].widget_p[wid_num] = (struct sn_flush_device_list *)kmalloc( DEV_PER_WIDGET * sizeof (struct sn_flush_device_list), GFP_KERNEL); - if (flush_nasid_list[nasid].widget_p[wid_num] <= 0) { - printk("sn_dma_flush_init: Cannot allocate memory for nasid sub-list\n"); + if (!flush_nasid_list[nasid].widget_p[wid_num]) { + printk(KERN_WARNING "sn_dma_flush_init: Cannot allocate memory for nasid sub-list\n"); return; } memset(flush_nasid_list[nasid].widget_p[wid_num], 0, @@ -243,7 +250,7 @@ break; } } - b = (bridge_t *)(NODE_SWIN_BASE(nasid, wid_num) | (bus << 23) ); + b = (void *)(NODE_SWIN_BASE(nasid, wid_num) | (bus << 23) ); /* If it's IO9, then slot 2 maps to slot 7 and slot 6 maps to slot 8. * To see this is non-trivial. By drawing pictures and reading manuals and talking @@ -267,39 +274,34 @@ if (isIO9(nasid) && ( (IS_ALTIX(nasid) && wid_num == 0xc) || (IS_OPUS(nasid) && wid_num == 0xf) ) && bus == 0) { - if (slot == 2) { - p->force_int_addr = (unsigned long)&b->b_force_always[6].intr; - dev_sel = b->b_int_device; - dev_sel |= (1<<18); - b->b_int_device = dev_sel; + if (pin == 1) { + p->force_int_addr = (unsigned long)pcireg_bridge_force_always_addr_get(b, 6); + pcireg_bridge_intr_device_bit_set(b, (1<<18)); dnasid = NASID_GET(virt_to_phys(&p->flush_addr)); - b->p_int_addr_64[6] = (virt_to_phys(&p->flush_addr) & 0xfffffffff) | - (dnasid << 36) | (0xfUL << 48); - } else if (slot == 3) { /* 12160 SCSI device in IO9 */ - p->force_int_addr = (unsigned long)&b->b_force_always[4].intr; - dev_sel = b->b_int_device; - dev_sel |= (2<<12); - b->b_int_device = dev_sel; + pcireg_bridge_intr_addr_set(b, 6, ((virt_to_phys(&p->flush_addr) & 0xfffffffff) | + (dnasid << 36) | (0xfUL << 48))); + } else if (pin == 2) { /* 12160 SCSI device in IO9 */ + p->force_int_addr = (unsigned long)pcireg_bridge_force_always_addr_get(b, 4); + pcireg_bridge_intr_device_bit_set(b, (2<<12)); dnasid = NASID_GET(virt_to_phys(&p->flush_addr)); - b->p_int_addr_64[4] = (virt_to_phys(&p->flush_addr) & 0xfffffffff) | - (dnasid << 36) | (0xfUL << 48); + pcireg_bridge_intr_addr_set(b, 4, + ((virt_to_phys(&p->flush_addr) & 0xfffffffff) | + (dnasid << 36) | (0xfUL << 48))); } else { /* slot == 6 */ - p->force_int_addr = (unsigned long)&b->b_force_always[7].intr; - dev_sel = b->b_int_device; - dev_sel |= (5<<21); - b->b_int_device = dev_sel; + p->force_int_addr = (unsigned long)pcireg_bridge_force_always_addr_get(b, 7); + pcireg_bridge_intr_device_bit_set(b, (5<<21)); dnasid = NASID_GET(virt_to_phys(&p->flush_addr)); - b->p_int_addr_64[7] = (virt_to_phys(&p->flush_addr) & 0xfffffffff) | - (dnasid << 36) | (0xfUL << 48); + pcireg_bridge_intr_addr_set(b, 7, + ((virt_to_phys(&p->flush_addr) & 0xfffffffff) | + (dnasid << 36) | (0xfUL << 48))); } } else { - p->force_int_addr = (unsigned long)&b->b_force_always[pin + 2].intr; - dev_sel = b->b_int_device; - dev_sel |= ((slot - 1) << ( pin * 3) ); - b->b_int_device = dev_sel; + p->force_int_addr = (unsigned long)pcireg_bridge_force_always_addr_get(b, (pin +2)); + pcireg_bridge_intr_device_bit_set(b, (pin << (pin * 3))); dnasid = NASID_GET(virt_to_phys(&p->flush_addr)); - b->p_int_addr_64[pin + 2] = (virt_to_phys(&p->flush_addr) & 0xfffffffff) | - (dnasid << 36) | (0xfUL << 48); + pcireg_bridge_intr_addr_set(b, (pin + 2), + ((virt_to_phys(&p->flush_addr) & 0xfffffffff) | + (dnasid << 36) | (0xfUL << 48))); } } @@ -310,7 +312,7 @@ * * Other platform specific fixup can also be done here. */ -void +static void __init sn_pci_fixup(int arg) { struct list_head *ln; @@ -321,7 +323,7 @@ pcibr_intr_t intr_handle; pciio_provider_t *pci_provider; vertex_hdl_t device_vertex; - pciio_intr_line_t lines; + pciio_intr_line_t lines = 0; extern int numnodes; int cnode; @@ -357,6 +359,11 @@ pci_bus = pci_bus_b(ln); widget_sysdata = kmalloc(sizeof(struct sn_widget_sysdata), GFP_KERNEL); + if (!widget_sysdata) { + printk(KERN_WARNING "sn_pci_fixup(): Unable to " + "allocate memory for widget_sysdata\n"); + return; + } widget_sysdata->vhdl = pci_bus_to_vertex(pci_bus->number); pci_bus->sysdata = (void *)widget_sysdata; } @@ -394,13 +401,12 @@ device_sysdata = kmalloc(sizeof(struct sn_device_sysdata), GFP_KERNEL); - if (device_sysdata <= 0) { - printk("sn_pci_fixup: Cannot allocate memory for device sysdata\n"); + if (!device_sysdata) { + printk(KERN_WARNING "sn_pci_fixup: Cannot allocate memory for device sysdata\n"); return; } device_sysdata->vhdl = devfn_to_vertex(device_dev->bus->number, device_dev->devfn); - device_sysdata->isa64 = 0; device_dev->sysdata = (void *) device_sysdata; set_pci_provider(device_sysdata); @@ -486,14 +492,22 @@ device_vertex = device_sysdata->vhdl; pci_provider = device_sysdata->pci_provider; + if (!lines) { + continue; + } + irqpdaindr->curr = device_dev; intr_handle = (pci_provider->intr_alloc)(device_vertex, NULL, lines, device_vertex); + if (intr_handle == NULL) { + printk("sn_pci_fixup: pcibr_intr_alloc() failed\n"); + continue; + } irq = intr_handle->bi_irq; irqpdaindr->device_dev[irq] = device_dev; (pci_provider->intr_connect)(intr_handle, (intr_func_t)0, (intr_arg_t)0); device_dev->irq = irq; - register_pcibr_intr(irq, intr_handle); + register_pcibr_intr(irq, (pcibr_intr_t)intr_handle); for (idx = 0; idx < PCI_ROM_RESOURCE; idx++) { int ibits = intr_handle->bi_ibits; @@ -507,10 +521,10 @@ for (i=0; i<8; i++) { if (ibits & (1 << i) ) { sn_dma_flush_init(device_dev->resource[idx].start, - device_dev->resource[idx].end, - idx, - i, - PCI_SLOT(device_dev->devfn)); + device_dev->resource[idx].end, + idx, + i, + PCIBR_INFO_SLOT_GET_EXT(pcibr_info_get(device_sysdata->vhdl))); } } } @@ -548,238 +562,132 @@ * pci_bus_map_create() - Called by pci_bus_to_hcl_cvlink() to finish the job. * * Linux PCI Bus numbers are assigned from lowest module_id numbers - * (rack/slot etc.) starting from HUB_WIDGET_ID_MAX down to - * HUB_WIDGET_ID_MIN: - * widgetnum 15 gets lower Bus Number than widgetnum 14 etc. - * - * Given 2 modules 001c01 and 001c02 we get the following mappings: - * 001c01, widgetnum 15 = Bus number 0 - * 001c01, widgetnum 14 = Bus number 1 - * 001c02, widgetnum 15 = Bus number 3 - * 001c02, widgetnum 14 = Bus number 4 - * etc. - * - * The rational for starting Bus Number 0 with Widget number 15 is because - * the system boot disks are always connected via Widget 15 Slot 0 of the - * I-brick. Linux creates /dev/sd* devices(naming) strating from Bus Number 0 - * Therefore, /dev/sda1 will be the first disk, on Widget 15 of the lowest - * module id(Master Cnode) of the system. - * + * (rack/slot etc.) */ static int -pci_bus_map_create(vertex_hdl_t xtalk, char * io_moduleid) +pci_bus_map_create(struct pcibr_list_s *softlistp, moduleid_t moduleid) { + + int basebus_num, bus_number; + vertex_hdl_t pci_bus = softlistp->bl_vhdl; + char moduleid_str[16]; - vertex_hdl_t master_node_vertex = NULL; - vertex_hdl_t xwidget = NULL; - vertex_hdl_t pci_bus = NULL; - hubinfo_t hubinfo = NULL; - xwidgetnum_t widgetnum; - char pathname[128]; - graph_error_t rv; - int bus; - int basebus_num; - extern void ioconfig_get_busnum(char *, int *); - - int bus_number; + memset(moduleid_str, 0, 16); + format_module_id(moduleid_str, moduleid, MODULE_FORMAT_BRIEF); + (void) ioconfig_get_busnum((char *)moduleid_str, &basebus_num); /* - * Loop throught this vertex and get the Xwidgets .. + * Assign the correct bus number and also the nasid of this + * pci Xwidget. */ - - - /* PCI devices */ - - for (widgetnum = HUB_WIDGET_ID_MAX; widgetnum >= HUB_WIDGET_ID_MIN; widgetnum--) { - sprintf(pathname, "%d", widgetnum); - xwidget = NULL; - - /* - * Example - /hw/module/001c16/Pbrick/xtalk/8 is the xwidget - * /hw/module/001c16/Pbrick/xtalk/8/pci/1 is device - */ - rv = hwgraph_traverse(xtalk, pathname, &xwidget); - if ( (rv != GRAPH_SUCCESS) ) { - if (!xwidget) { - continue; - } - } - - sprintf(pathname, "%d/"EDGE_LBL_PCI, widgetnum); - pci_bus = NULL; - if (hwgraph_traverse(xtalk, pathname, &pci_bus) != GRAPH_SUCCESS) - if (!pci_bus) { - continue; -} - - /* - * Assign the correct bus number and also the nasid of this - * pci Xwidget. - * - * Should not be any race here ... - */ - num_bridges++; - busnum_to_pcibr_vhdl[num_bridges - 1] = pci_bus; - - /* - * Get the master node and from there get the NASID. - */ - master_node_vertex = device_master_get(xwidget); - if (!master_node_vertex) { - printk("WARNING: pci_bus_map_create: Unable to get .master for vertex 0x%p\n", (void *)xwidget); - } - - hubinfo_get(master_node_vertex, &hubinfo); - if (!hubinfo) { - printk("WARNING: pci_bus_map_create: Unable to get hubinfo for master node vertex 0x%p\n", (void *)master_node_vertex); - return(1); - } else { - busnum_to_nid[num_bridges - 1] = hubinfo->h_nasid; - } - - /* - * Pre assign DMA maps needed for 32 Bits Page Map DMA. - */ - busnum_to_atedmamaps[num_bridges - 1] = (void *) kmalloc( - sizeof(struct pcibr_dmamap_s) * MAX_ATE_MAPS, GFP_KERNEL); - if (!busnum_to_atedmamaps[num_bridges - 1]) - printk("WARNING: pci_bus_map_create: Unable to precreate ATE DMA Maps for busnum %d vertex 0x%p\n", num_bridges - 1, (void *)xwidget); - - memset(busnum_to_atedmamaps[num_bridges - 1], 0x0, - sizeof(struct pcibr_dmamap_s) * MAX_ATE_MAPS); - + bus_number = basebus_num + pcibr_widget_to_bus(pci_bus); +#ifdef DEBUG + { + char hwpath[MAXDEVNAME] = "\0"; + extern int hwgraph_vertex_name_get(vertex_hdl_t, char *, uint); + + pcibr_soft_t pcibr_soft = softlistp->bl_soft; + hwgraph_vertex_name_get(pci_bus, hwpath, MAXDEVNAME); + printk("%s:\n\tbus_num %d, basebus_num %d, brick_bus %d, " + "bus_vhdl 0x%lx, brick_type %d\n", hwpath, bus_number, + basebus_num, pcibr_widget_to_bus(pci_bus), + (uint64_t)pci_bus, pcibr_soft->bs_bricktype); } +#endif + busnum_to_pcibr_vhdl[bus_number] = pci_bus; /* - * PCIX devices - * We number busses differently for PCI-X devices. - * We start from Lowest Widget on up .. + * Pre assign DMA maps needed for 32 Bits Page Map DMA. */ - - (void) ioconfig_get_busnum((char *)io_moduleid, &basebus_num); - - for (widgetnum = HUB_WIDGET_ID_MIN; widgetnum <= HUB_WIDGET_ID_MAX; widgetnum++) { - - /* Do both buses */ - for ( bus = 0; bus < 2; bus++ ) { - sprintf(pathname, "%d", widgetnum); - xwidget = NULL; - - /* - * Example - /hw/module/001c16/Pbrick/xtalk/8 is the xwidget - * /hw/module/001c16/Pbrick/xtalk/8/pci-x/0 is the bus - * /hw/module/001c16/Pbrick/xtalk/8/pci-x/0/1 is device - */ - rv = hwgraph_traverse(xtalk, pathname, &xwidget); - if ( (rv != GRAPH_SUCCESS) ) { - if (!xwidget) { - continue; - } - } - - if ( bus == 0 ) - sprintf(pathname, "%d/"EDGE_LBL_PCIX_0, widgetnum); - else - sprintf(pathname, "%d/"EDGE_LBL_PCIX_1, widgetnum); - pci_bus = NULL; - if (hwgraph_traverse(xtalk, pathname, &pci_bus) != GRAPH_SUCCESS) - if (!pci_bus) { - continue; - } - - /* - * Assign the correct bus number and also the nasid of this - * pci Xwidget. - * - * Should not be any race here ... - */ - bus_number = basebus_num + bus + io_brick_map_widget(MODULE_PXBRICK, widgetnum); -#ifdef DEBUG - printk("bus_number %d basebus_num %d bus %d io %d\n", - bus_number, basebus_num, bus, - io_brick_map_widget(MODULE_PXBRICK, widgetnum)); -#endif - busnum_to_pcibr_vhdl[bus_number] = pci_bus; - - /* - * Pre assign DMA maps needed for 32 Bits Page Map DMA. - */ - busnum_to_atedmamaps[bus_number] = (void *) kmalloc( - sizeof(struct pcibr_dmamap_s) * MAX_ATE_MAPS, GFP_KERNEL); - if (!busnum_to_atedmamaps[bus_number]) - printk("WARNING: pci_bus_map_create: Unable to precreate ATE DMA Maps for busnum %d vertex 0x%p\n", num_bridges - 1, (void *)xwidget); - - memset(busnum_to_atedmamaps[bus_number], 0x0, - sizeof(struct pcibr_dmamap_s) * MAX_ATE_MAPS); - } + busnum_to_atedmamaps[bus_number] = (void *) vmalloc( + sizeof(struct pcibr_dmamap_s)*MAX_ATE_MAPS); + if (busnum_to_atedmamaps[bus_number] <= 0) { + printk("pci_bus_map_create: Cannot allocate memory for ate maps\n"); + return -1; } - - return(0); + memset(busnum_to_atedmamaps[bus_number], 0x0, + sizeof(struct pcibr_dmamap_s) * MAX_ATE_MAPS); + return(0); } /* - * pci_bus_to_hcl_cvlink() - This routine is called after SGI IO Infrastructure - * initialization has completed to set up the mappings between Xbridge - * and logical pci bus numbers. We also set up the NASID for each of these - * xbridges. + * pci_bus_to_hcl_cvlink() - This routine is called after SGI IO Infrastructure + * initialization has completed to set up the mappings between PCI BRIDGE + * ASIC and logical pci bus numbers. * * Must be called before pci_init() is invoked. */ int pci_bus_to_hcl_cvlink(void) { + int i; + extern pcibr_list_p pcibr_list; - vertex_hdl_t devfs_hdl = NULL; - vertex_hdl_t xtalk = NULL; - int rv = 0; - char name[256]; - char tmp_name[256]; - int i, ii, j; - char *brick_name; - extern void ioconfig_bus_new_entries(void); - - /* - * Figure out which IO Brick is connected to the Compute Bricks. - */ for (i = 0; i < nummodules; i++) { - extern int iomoduleid_get(nasid_t); - moduleid_t iobrick_id; - nasid_t nasid = -1; - int nodecnt; - int n = 0; - - nodecnt = modules[i]->nodecnt; - for ( n = 0; n < nodecnt; n++ ) { - nasid = cnodeid_to_nasid(modules[i]->nodes[n]); - iobrick_id = iomoduleid_get(nasid); - if ((int)iobrick_id > 0) { /* Valid module id */ - char name[12]; - memset(name, 0, 12); - format_module_id((char *)&(modules[i]->io[n].moduleid), iobrick_id, MODULE_FORMAT_BRIEF); + struct pcibr_list_s *softlistp = pcibr_list; + struct pcibr_list_s *first_in_list = NULL; + struct pcibr_list_s *last_in_list = NULL; + + /* Walk the list of pcibr_soft structs looking for matches */ + while (softlistp) { + struct pcibr_soft_s *pcibr_soft = softlistp->bl_soft; + moduleid_t moduleid; + + /* Is this PCI bus associated with this moduleid? */ + moduleid = NODE_MODULEID( + NASID_TO_COMPACT_NODEID(pcibr_soft->bs_nasid)); + if (modules[i]->id == moduleid) { + struct pcibr_list_s *new_element; + + new_element = kmalloc(sizeof (struct pcibr_soft_s), GFP_KERNEL); + if (new_element == NULL) { + printk("%s: Couldn't allocate memory\n",__FUNCTION__); + return -ENOMEM; + } + new_element->bl_soft = softlistp->bl_soft; + new_element->bl_vhdl = softlistp->bl_vhdl; + new_element->bl_next = NULL; + + /* list empty so just put it on the list */ + if (first_in_list == NULL) { + first_in_list = new_element; + last_in_list = new_element; + softlistp = softlistp->bl_next; + continue; + } + + /* + * BASEIO IObricks attached to a module have + * a higher priority than non BASEIO IOBricks + * when it comes to persistant pci bus + * numbering, so put them on the front of the + * list. + */ + if (isIO9(pcibr_soft->bs_nasid)) { + new_element->bl_next = first_in_list; + first_in_list = new_element; + } else { + last_in_list->bl_next = new_element; + last_in_list = new_element; + } } + softlistp = softlistp->bl_next; } - } - devfs_hdl = hwgraph_path_to_vertex("hw/module"); - for (i = 0; i < nummodules ; i++) { - for ( j = 0; j < 2; j++ ) { - if ( j == 0 ) - brick_name = EDGE_LBL_PXBRICK; - else - brick_name = EDGE_LBL_IXBRICK; - - for ( ii = 0; ii < 2 ; ii++ ) { - memset(name, 0, 256); - memset(tmp_name, 0, 256); - format_module_id(name, modules[i]->id, MODULE_FORMAT_BRIEF); - sprintf(tmp_name, "/slab/%d/%s/xtalk", geo_slab(modules[i]->geoid[ii]), brick_name); - strcat(name, tmp_name); - xtalk = NULL; - rv = hwgraph_edge_get(devfs_hdl, name, &xtalk); - if ( rv == 0 ) - pci_bus_map_create(xtalk, (char *)&(modules[i]->io[ii].moduleid)); + /* + * We now have a list of all the pci bridges associated with + * the module_id, modules[i]. Call pci_bus_map_create() for + * each pci bridge + */ + softlistp = first_in_list; + while (softlistp) { + moduleid_t iobrick; + struct pcibr_list_s *next = softlistp->bl_next; + iobrick = iomoduleid_get(softlistp->bl_soft->bs_nasid); + pci_bus_map_create(softlistp, iobrick); + kfree(softlistp); + softlistp = next; } - } } /* @@ -804,6 +712,11 @@ if (!ia64_platform_is("sn2") || IS_RUNNING_ON_SIMULATOR()) return 0; + + /* + * This is needed to avoid bounce limit checks in the blk layer + */ + ia64_max_iommu_merge_mask = ~PAGE_MASK; /* * set pci_raw_ops, etc. diff -Nru a/arch/ia64/sn/io/machvec/pci_dma.c b/arch/ia64/sn/io/machvec/pci_dma.c --- a/arch/ia64/sn/io/machvec/pci_dma.c Wed Feb 4 16:51:34 2004 +++ b/arch/ia64/sn/io/machvec/pci_dma.c Wed Feb 4 16:51:34 2004 @@ -138,6 +138,8 @@ if (!(cpuaddr = (void *)__get_free_pages(GFP_ATOMIC, get_order(size)))) return NULL; + memset(cpuaddr, 0x0, size); + /* physical addr. of the memory we just got */ phys_addr = __pa(cpuaddr); @@ -154,7 +156,8 @@ *dma_handle = pcibr_dmatrans_addr(vhdl, NULL, phys_addr, size, PCIIO_DMA_CMD | PCIIO_DMA_A64); else { - dma_map = pcibr_dmamap_alloc(vhdl, NULL, size, PCIIO_DMA_CMD); + dma_map = pcibr_dmamap_alloc(vhdl, NULL, size, PCIIO_DMA_CMD | + MINIMAL_ATE_FLAG(phys_addr, size)); if (dma_map) { *dma_handle = (dma_addr_t) pcibr_dmamap_addr(dma_map, phys_addr, size); @@ -248,18 +251,6 @@ phys_addr = __pa((unsigned long)page_address(sg->page) + sg->offset); /* - * Handle the most common case: 64 bit cards. This - * call should always succeed. - */ - if (IS_PCIA64(hwdev)) { - sg->dma_address = pcibr_dmatrans_addr(vhdl, NULL, phys_addr, - sg->length, - PCIIO_DMA_DATA | PCIIO_DMA_A64); - sg->dma_length = sg->length; - continue; - } - - /* * Handle 32-63 bit cards via direct mapping */ if (IS_PCI32G(hwdev)) { @@ -385,13 +376,6 @@ dma_addr = 0; phys_addr = __pa(ptr); - if (IS_PCIA64(hwdev)) { - /* This device supports 64 bit DMA addresses. */ - dma_addr = pcibr_dmatrans_addr(vhdl, NULL, phys_addr, size, - PCIIO_DMA_DATA | PCIIO_DMA_A64); - return dma_addr; - } - /* * Devices that support 32 bit to 63 bit DMA addresses get * 32 bit DMA addresses. @@ -410,7 +394,8 @@ * let's use the PMU instead. */ dma_map = NULL; - dma_map = pcibr_dmamap_alloc(vhdl, NULL, size, PCIIO_DMA_DATA); + dma_map = pcibr_dmamap_alloc(vhdl, NULL, size, PCIIO_DMA_DATA | + MINIMAL_ATE_FLAG(phys_addr, size)); if (!dma_map) { printk(KERN_ERR "pci_map_single: Unable to allocate anymore " diff -Nru a/arch/ia64/sn/io/platform_init/sgi_io_init.c b/arch/ia64/sn/io/platform_init/sgi_io_init.c --- a/arch/ia64/sn/io/platform_init/sgi_io_init.c Wed Feb 4 16:51:33 2004 +++ b/arch/ia64/sn/io/platform_init/sgi_io_init.c Wed Feb 4 16:51:33 2004 @@ -131,7 +131,7 @@ klhwg_add_all_modules(hwgraph_root); klhwg_add_all_nodes(hwgraph_root); - for (cnode = 0; cnode < numnodes; cnode++) { + for (cnode = 0; cnode < numionodes; cnode++) { extern void per_hub_init(cnodeid_t); per_hub_init(cnode); } diff -Nru a/arch/ia64/sn/io/sn2/klconflib.c b/arch/ia64/sn/io/sn2/klconflib.c --- a/arch/ia64/sn/io/sn2/klconflib.c Wed Feb 4 16:51:33 2004 +++ b/arch/ia64/sn/io/sn2/klconflib.c Wed Feb 4 16:51:33 2004 @@ -31,6 +31,8 @@ #define DBG(x...) #endif /* DEBUG_KLGRAPH */ +extern int numionodes; + lboard_t *root_lboard[MAX_COMPACT_NODES]; static int hasmetarouter; @@ -38,13 +40,13 @@ char brick_types[MAX_BRICK_TYPES + 1] = "crikxdpn%#=vo^34567890123456789..."; lboard_t * -find_lboard(lboard_t *start, unsigned char brd_type) +find_lboard_any(lboard_t *start, unsigned char brd_type) { /* Search all boards stored on this node. */ while (start) { if (start->brd_type == brd_type) return start; - start = KLCF_NEXT(start); + start = KLCF_NEXT_ANY(start); } /* Didn't find it. */ @@ -52,19 +54,59 @@ } lboard_t * -find_lboard_class(lboard_t *start, unsigned char brd_type) +find_lboard_nasid(lboard_t *start, nasid_t nasid, unsigned char brd_type) { - /* Search all boards stored on this node. */ + + while (start) { + if ((start->brd_type == brd_type) && + (start->brd_nasid == nasid)) + return start; + + if (numionodes == numnodes) + start = KLCF_NEXT_ANY(start); + else + start = KLCF_NEXT(start); + } + + /* Didn't find it. */ + return (lboard_t *)NULL; +} + +lboard_t * +find_lboard_class_any(lboard_t *start, unsigned char brd_type) +{ + /* Search all boards stored on this node. */ while (start) { if (KLCLASS(start->brd_type) == KLCLASS(brd_type)) return start; - start = KLCF_NEXT(start); + start = KLCF_NEXT_ANY(start); + } + + /* Didn't find it. */ + return (lboard_t *)NULL; +} + +lboard_t * +find_lboard_class_nasid(lboard_t *start, nasid_t nasid, unsigned char brd_type) +{ + /* Search all boards stored on this node. */ + while (start) { + if (KLCLASS(start->brd_type) == KLCLASS(brd_type) && + (start->brd_nasid == nasid)) + return start; + + if (numionodes == numnodes) + start = KLCF_NEXT_ANY(start); + else + start = KLCF_NEXT(start); } /* Didn't find it. */ return (lboard_t *)NULL; } + + klinfo_t * find_component(lboard_t *brd, klinfo_t *kli, unsigned char struct_type) { @@ -116,20 +158,6 @@ return (lboard_t *)NULL; } -lboard_t * -find_lboard_module(lboard_t *start, geoid_t geoid) -{ - /* Search all boards stored on this node. */ - while (start) { - if (geo_cmp(start->brd_geoid, geoid)) - return start; - start = KLCF_NEXT(start); - } - - /* Didn't find it. */ - return (lboard_t *)NULL; -} - /* * Convert a NIC name to a name for use in the hardware graph. */ @@ -218,7 +246,7 @@ /* * look for boards that might contain an xbow or xbridge */ - brd = find_lboard((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_IOBRICK_XBOW); + brd = find_lboard_nasid((lboard_t *)KL_CONFIG_INFO(nasid), nasid, KLTYPE_IOBRICK_XBOW); if (brd == NULL) return 0; if ((xbow_p = (klxbow_t *)find_component(brd, NULL, KLSTRUCT_XBOW)) @@ -285,40 +313,6 @@ #define MHZ 1000000 - -/* Get the canonical hardware graph name for the given pci component - * on the given io board. - */ -void -device_component_canonical_name_get(lboard_t *brd, - klinfo_t *component, - char *name) -{ - slotid_t slot; - char board_name[20]; - - ASSERT(brd); - - /* Convert the [ CLASS | TYPE ] kind of slotid - * into a string - */ - slot = brd->brd_slot; - - /* Get the io board name */ - if (!brd || (brd->brd_sversion < 2)) { - strcpy(name, EDGE_LBL_XWIDGET); - } else { - nic_name_convert(brd->brd_name, board_name); - } - - /* Give out the canonical name of the pci device*/ - sprintf(name, - "/dev/hw/"EDGE_LBL_MODULE "/%x/"EDGE_LBL_SLAB"/%d/" - EDGE_LBL_SLOT"/%s/"EDGE_LBL_PCI"/%d", - geo_module(brd->brd_geoid), geo_slab(brd->brd_geoid), - board_name, KLCF_BRIDGE_W_ID(component)); -} - /* * Get the serial number of the main component of a board * Returns 0 if a valid serial number is found @@ -506,7 +500,7 @@ format_module_id(char *buffer, moduleid_t m, int fmt) { int rack, position; - char brickchar; + unsigned char brickchar; rack = MODULE_GET_RACK(m); ASSERT(MODULE_GET_BTYPE(m) < MAX_BRICK_TYPES); @@ -560,112 +554,21 @@ } -/* - * Parse a module id, in either brief or long form. - * Returns < 0 on error. - * The long form does not include a brick type, so it defaults to 0 (CBrick) - */ -int -parse_module_id(char *buffer) -{ - unsigned int v, rack, bay, type, form; - moduleid_t m; - char c; - - if (strstr(buffer, EDGE_LBL_RACK "/") == buffer) { - form = MODULE_FORMAT_LONG; - buffer += strlen(EDGE_LBL_RACK "/"); - - /* A long module ID must be exactly 5 non-template chars. */ - if (strlen(buffer) != strlen("/" EDGE_LBL_RPOS "/") + 5) - return -1; - } - else { - form = MODULE_FORMAT_BRIEF; - - /* A brief module id must be exactly 6 characters */ - if (strlen(buffer) != 6) - return -2; - } - - /* The rack number must be exactly 3 digits */ - if (!(isdigit(buffer[0]) && isdigit(buffer[1]) && isdigit(buffer[2]))) - return -3; - - rack = 0; - v = *buffer++ - '0'; - if (v > RACK_CLASS_MASK(rack) >> RACK_CLASS_SHFT(rack)) - return -4; - RACK_ADD_CLASS(rack, v); - - v = *buffer++ - '0'; - if (v > RACK_GROUP_MASK(rack) >> RACK_GROUP_SHFT(rack)) - return -5; - RACK_ADD_GROUP(rack, v); - - v = *buffer++ - '0'; - /* rack numbers are 1-based */ - if (v-1 > RACK_NUM_MASK(rack) >> RACK_NUM_SHFT(rack)) - return -6; - RACK_ADD_NUM(rack, v); - - if (form == MODULE_FORMAT_BRIEF) { - /* Next should be a module type character. Accept ucase or lcase. */ - c = *buffer++; - if (!isalpha(c)) - return -7; - - /* strchr() returns a pointer into brick_types[], or NULL */ - type = (unsigned int)(strchr(brick_types, tolower(c)) - brick_types); - if (type > MODULE_BTYPE_MASK >> MODULE_BTYPE_SHFT) - return -8; - } - else { - /* Hardcode the module type, and skip over the boilerplate */ - type = MODULE_CBRICK; - - if (strstr(buffer, "/" EDGE_LBL_RPOS "/") != buffer) - return -9; - - buffer += strlen("/" EDGE_LBL_RPOS "/"); - } - - /* The bay number is last. Make sure it's exactly two digits */ - - if (!(isdigit(buffer[0]) && isdigit(buffer[1]) && !buffer[2])) - return -10; - - bay = 10 * (buffer[0] - '0') + (buffer[1] - '0'); - - if (bay > MODULE_BPOS_MASK >> MODULE_BPOS_SHFT) - return -11; - - m = RBT_TO_MODULE(rack, bay, type); - - /* avoid sign extending the moduleid_t */ - return (int)(unsigned short)m; -} - int cbrick_type_get_nasid(nasid_t nasid) { - lboard_t *brd; moduleid_t module; - uint type; int t; - brd = find_lboard((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_SNIA); - module = geo_module(brd->brd_geoid); - type = (module & MODULE_BTYPE_MASK) >> MODULE_BTYPE_SHFT; - /* convert brick_type to lower case */ - if ((type >= 'A') && (type <= 'Z')) - type = type - 'A' + 'a'; - - /* convert to a module.h brick type */ - for( t = 0; t < MAX_BRICK_TYPES; t++ ) { - if( brick_types[t] == type ) { - return t; - } - } + module = iomoduleid_get(nasid); + if (module < 0 ) { + return MODULE_CBRICK; + } + t = MODULE_GET_BTYPE(module); + if ((char)t == 'o') { + return MODULE_OPUSBRICK; + } else { + return MODULE_CBRICK; + } return -1; } diff -Nru a/arch/ia64/sn/io/sn2/klgraph.c b/arch/ia64/sn/io/sn2/klgraph.c --- a/arch/ia64/sn/io/sn2/klgraph.c Wed Feb 4 16:51:36 2004 +++ b/arch/ia64/sn/io/sn2/klgraph.c Wed Feb 4 16:51:36 2004 @@ -124,8 +124,9 @@ /*REFERENCED*/ graph_error_t err; - if ((brd = find_lboard((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_IOBRICK_XBOW)) == NULL) - return; + if (!(brd = find_lboard_nasid((lboard_t *)KL_CONFIG_INFO(nasid), + nasid, KLTYPE_IOBRICK_XBOW))) + return; if (KL_CONFIG_DUPLICATE_BOARD(brd)) return; @@ -200,7 +201,7 @@ vertex_hdl_t cpu_dir; nasid = COMPACT_TO_NASID_NODEID(cnode); - brd = find_lboard((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_SNIA); + brd = find_lboard_any((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_SNIA); ASSERT(brd); /* Generate a hardware graph path for this board. */ @@ -280,7 +281,7 @@ for (cnode = 0; cnode < numnodes; cnode++) { nasid = COMPACT_TO_NASID_NODEID(cnode); - brd = find_lboard_class((lboard_t *)KL_CONFIG_INFO(nasid), + brd = find_lboard_class_any((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_ROUTER); if (!brd) @@ -307,7 +308,7 @@ HWGRAPH_DEBUG((__FILE__, __FUNCTION__, __LINE__, node_vertex, NULL, "Created router path.\n")); /* Find the rest of the routers stored on this node. */ - } while ( (brd = find_lboard_class(KLCF_NEXT(brd), + } while ( (brd = find_lboard_class_any(KLCF_NEXT_ANY(brd), KLTYPE_ROUTER)) ); } @@ -414,7 +415,7 @@ for (cnode = 0; cnode < numnodes; cnode++) { nasid = COMPACT_TO_NASID_NODEID(cnode); - brd = find_lboard_class((lboard_t *)KL_CONFIG_INFO(nasid), + brd = find_lboard_class_any((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_ROUTER); if (!brd) @@ -428,7 +429,7 @@ cnode, nasid); /* Find the rest of the routers stored on this node. */ - } while ( (brd = find_lboard_class(KLCF_NEXT(brd), KLTYPE_ROUTER)) ); + } while ( (brd = find_lboard_class_any(KLCF_NEXT_ANY(brd), KLTYPE_ROUTER)) ); } } @@ -452,8 +453,7 @@ for (cnode = 0; cnode < numionodes; cnode++) { nasid = COMPACT_TO_NASID_NODEID(cnode); - brd = find_lboard((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_SNIA); - ASSERT(brd); + brd = find_lboard_any((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_SNIA); hub = (klhub_t *)find_first_component(brd, KLSTRUCT_HUB); ASSERT(hub); @@ -511,69 +511,6 @@ } } -/* Store the pci/vme disabled board information as extended administrative - * hints which can later be used by the drivers using the device/driver - * admin interface. - */ -static void __init -klhwg_device_disable_hints_add(void) -{ - cnodeid_t cnode; /* node we are looking at */ - nasid_t nasid; /* nasid of the node */ - lboard_t *board; /* board we are looking at */ - int comp_index; /* component index */ - klinfo_t *component; /* component in the board we are - * looking at - */ - char device_name[MAXDEVNAME]; - - for(cnode = 0; cnode < numnodes; cnode++) { - nasid = COMPACT_TO_NASID_NODEID(cnode); - board = (lboard_t *)KL_CONFIG_INFO(nasid); - /* Check out all the board info stored on a node */ - while(board) { - /* No need to look at duplicate boards or non-io - * boards - */ - if (KL_CONFIG_DUPLICATE_BOARD(board) || - KLCLASS(board->brd_type) != KLCLASS_IO) { - board = KLCF_NEXT(board); - continue; - } - /* Check out all the components of a board */ - for (comp_index = 0; - comp_index < KLCF_NUM_COMPS(board); - comp_index++) { - component = KLCF_COMP(board,comp_index); - /* If the component is enabled move on to - * the next component - */ - if (KLCONFIG_INFO_ENABLED(component)) - continue; - /* NOTE : Since the prom only supports - * the disabling of pci devices the following - * piece of code makes sense. - * Make sure that this assumption is valid - */ - /* This component is disabled. Store this - * hint in the extended device admin table - */ - /* Get the canonical name of the pci device */ - device_component_canonical_name_get(board, - component, - device_name); -#ifdef DEBUG - printf("%s DISABLED\n",device_name); -#endif - } - /* go to the next board info stored on this - * node - */ - board = KLCF_NEXT(board); - } - } -} - void __init klhwg_add_all_modules(vertex_hdl_t hwgraph_root) { @@ -637,10 +574,4 @@ klhwg_add_all_routers(hwgraph_root); klhwg_connect_routers(hwgraph_root); klhwg_connect_hubs(hwgraph_root); - - /* Go through the entire system's klconfig - * to figure out which pci components have been disabled - */ - klhwg_device_disable_hints_add(); - } diff -Nru a/arch/ia64/sn/io/sn2/ml_iograph.c b/arch/ia64/sn/io/sn2/ml_iograph.c --- a/arch/ia64/sn/io/sn2/ml_iograph.c Wed Feb 4 16:51:33 2004 +++ b/arch/ia64/sn/io/sn2/ml_iograph.c Wed Feb 4 16:51:33 2004 @@ -46,8 +46,9 @@ int rc; xvolinfo = kmalloc(sizeof(struct xswitch_vol_s), GFP_KERNEL); - if (xvolinfo <= 0 ) { - printk("xswitch_vertex_init: out of memory\n"); + if (!xvolinfo) { + printk(KERN_WARNING "xswitch_vertex_init(): Unable to " + "allocate memory\n"); return; } memset(xvolinfo, 0, sizeof(struct xswitch_vol_s)); @@ -239,30 +240,29 @@ static void early_probe_for_widget(vertex_hdl_t hubv, xwidget_hwid_t hwid) { - hubreg_t llp_csr_reg; nasid_t nasid; hubinfo_t hubinfo; + hubreg_t llp_csr_reg; + widgetreg_t widget_id; + int result = 0; + + hwid->part_num = XWIDGET_PART_NUM_NONE; + hwid->rev_num = XWIDGET_REV_NUM_NONE; + hwid->mfg_num = XWIDGET_MFG_NUM_NONE; hubinfo_get(hubv, &hubinfo); nasid = hubinfo->h_nasid; llp_csr_reg = REMOTE_HUB_L(nasid, IIO_LLP_CSR); - /* - * If link is up, read the widget's part number. - * A direct connect widget must respond to widgetnum=0. - */ - if (llp_csr_reg & IIO_LLP_CSR_IS_UP) { - /* TBD: Put hub into "indirect" mode */ - /* - * We're able to read from a widget because our hub's - * WIDGET_ID was set up earlier. - */ - widgetreg_t widget_id = *(volatile widgetreg_t *) - (RAW_NODE_SWIN_BASE(nasid, 0x0) + WIDGET_ID); + if (!(llp_csr_reg & IIO_LLP_CSR_IS_UP)) + return; - DBG("early_probe_for_widget: Hub Vertex 0x%p is UP widget_id = 0x%x Register 0x%p\n", hubv, widget_id, - (volatile widgetreg_t *)(RAW_NODE_SWIN_BASE(nasid, 0x0) + WIDGET_ID) ); + /* Read the Cross-Talk Widget Id on the other end */ + result = snia_badaddr_val((volatile void *) + (RAW_NODE_SWIN_BASE(nasid, 0x0) + WIDGET_ID), + 4, (void *) &widget_id); + if (result == 0) { /* Found something connected */ hwid->part_num = XWIDGET_PART_NUM(widget_id); hwid->rev_num = XWIDGET_REV_NUM(widget_id); hwid->mfg_num = XWIDGET_MFG_NUM(widget_id); @@ -344,13 +344,12 @@ return; } - board = find_lboard_class( - (lboard_t *)KL_CONFIG_INFO(nasid), - KLCLASS_IOBRICK); + board = find_lboard_class_nasid( (lboard_t *)KL_CONFIG_INFO(nasid), + nasid, KLCLASS_IOBRICK); if (!board && NODEPDA(cnode)->xbow_peer != INVALID_NASID) { - board = find_lboard_class( - (lboard_t *)KL_CONFIG_INFO( NODEPDA(cnode)->xbow_peer), - KLCLASS_IOBRICK); + board = find_lboard_class_nasid( + (lboard_t *)KL_CONFIG_INFO( NODEPDA(cnode)->xbow_peer), + NODEPDA(cnode)->xbow_peer, KLCLASS_IOBRICK); } if (board) { @@ -365,7 +364,7 @@ { lboard_t *brd; - brd = find_lboard((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_SNIA); + brd = find_lboard_any((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_SNIA); if ( brd != (lboard_t *)0 ) { board->brd_geoid = brd->brd_geoid; } @@ -584,10 +583,9 @@ } else { void *bridge; - extern uint64_t pcireg_control_get(void *); bridge = (void *)NODE_SWIN_BASE(COMPACT_TO_NASID_NODEID(cnodeid), 0); - npdap->basew_id = pcireg_control_get(bridge) & WIDGET_WIDGET_ID; + npdap->basew_id = pcireg_bridge_control_get(bridge) & WIDGET_WIDGET_ID; printk(" ****io_init_node: Unknown Widget Part Number 0x%x Widget ID 0x%x attached to Hubv 0x%p ****\n", widget_partnum, npdap->basew_id, (void *)hubv); return; @@ -764,7 +762,7 @@ /* Look for brick prefix in table */ for (i = 0; i < num_bricks; i++) { if (brick_type == io_brick_tab[i].ibm_type) - return(io_brick_tab[i].ibm_map_wid[widget_num]); + return io_brick_tab[i].ibm_map_wid[widget_num]; } return 0; diff -Nru a/arch/ia64/sn/io/sn2/module.c b/arch/ia64/sn/io/sn2/module.c --- a/arch/ia64/sn/io/sn2/module.c Wed Feb 4 16:51:33 2004 +++ b/arch/ia64/sn/io/sn2/module.c Wed Feb 4 16:51:33 2004 @@ -139,7 +139,7 @@ /* * record brick serial number */ - board = find_lboard((lboard_t *) KL_CONFIG_INFO(host_nasid), KLTYPE_SNIA); + board = find_lboard_nasid((lboard_t *) KL_CONFIG_INFO(host_nasid), host_nasid, KLTYPE_SNIA); if (! board || KL_CONFIG_DUPLICATE_BOARD(board)) { @@ -152,8 +152,8 @@ m->snum_valid = 1; } - board = find_lboard((lboard_t *) KL_CONFIG_INFO(nasid), - KLTYPE_IOBRICK_XBOW); + board = find_lboard_nasid((lboard_t *) KL_CONFIG_INFO(nasid), + nasid, KLTYPE_IOBRICK_XBOW); if (! board || KL_CONFIG_DUPLICATE_BOARD(board)) return 0; @@ -185,6 +185,7 @@ nasid_t nasid; int nserial; module_t *m; + extern int numionodes; DPRINTF("*******module_init\n"); @@ -196,8 +197,7 @@ */ for (node = 0; node < numnodes; node++) { nasid = COMPACT_TO_NASID_NODEID(node); - - board = find_lboard((lboard_t *) KL_CONFIG_INFO(nasid), KLTYPE_SNIA); + board = find_lboard_nasid((lboard_t *) KL_CONFIG_INFO(nasid), nasid, KLTYPE_SNIA); ASSERT(board); HWGRAPH_DEBUG((__FILE__, __FUNCTION__, __LINE__, NULL, NULL, "Found Shub lboard 0x%lx nasid 0x%x cnode 0x%x \n", (unsigned long)board, (int)nasid, (int)node)); @@ -205,5 +205,32 @@ m = module_add_node(board->brd_geoid, node); if (! m->snum_valid && module_probe_snum(m, nasid, nasid)) nserial++; + } + + /* + * Second scan, look for headless/memless board hosted by compute nodes. + */ + for (node = numnodes; node < numionodes; node++) { + nasid_t nasid; + char serial_number[16]; + + nasid = COMPACT_TO_NASID_NODEID(node); + board = find_lboard_nasid((lboard_t *) KL_CONFIG_INFO(nasid), + nasid, KLTYPE_SNIA); + ASSERT(board); + + HWGRAPH_DEBUG((__FILE__, __FUNCTION__, __LINE__, NULL, NULL, "Found headless/memless lboard 0x%lx node %d nasid %d cnode %d\n", (unsigned long)board, node, (int)nasid, (int)node)); + + m = module_add_node(board->brd_geoid, node); + + /* + * Get and initialize the serial number. + */ + board_serial_number_get( board, serial_number ); + if( serial_number[0] != '\0' ) { + encode_str_serial( serial_number, m->snum.snum_str ); + m->snum_valid = 1; + nserial++; + } } } diff -Nru a/arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c b/arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c --- a/arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c Wed Feb 4 16:51:33 2004 +++ b/arch/ia64/sn/io/sn2/pcibr/pcibr_ate.c Wed Feb 4 16:51:33 2004 @@ -17,106 +17,13 @@ /* * functions */ -int pcibr_init_ext_ate_ram(bridge_t *); -int pcibr_ate_alloc(pcibr_soft_t, int); -void pcibr_ate_free(pcibr_soft_t, int, int); -bridge_ate_t pcibr_flags_to_ate(unsigned); -bridge_ate_p pcibr_ate_addr(pcibr_soft_t, int); -unsigned ate_freeze(pcibr_dmamap_t pcibr_dmamap, -#if PCIBR_FREEZE_TIME - unsigned *freeze_time_ptr, -#endif - unsigned *cmd_regs); -void ate_write(pcibr_soft_t pcibr_soft, bridge_ate_p ate_ptr, int ate_count, bridge_ate_t ate); -void ate_thaw(pcibr_dmamap_t pcibr_dmamap, - int ate_index, -#if PCIBR_FREEZE_TIME - bridge_ate_t ate, - int ate_total, - unsigned freeze_time_start, -#endif - unsigned *cmd_regs, - unsigned s); +int pcibr_ate_alloc(pcibr_soft_t, int, struct resource *); +void pcibr_ate_free(pcibr_soft_t, int, int, struct resource *); +bridge_ate_t pcibr_flags_to_ate(pcibr_soft_t, unsigned); +bridge_ate_p pcibr_ate_addr(pcibr_soft_t, int); +void ate_write(pcibr_soft_t, int, int, bridge_ate_t); - -/* Convert from ssram_bits in control register to number of SSRAM entries */ -#define ATE_NUM_ENTRIES(n) _ate_info[n] - -/* Possible choices for number of ATE entries in Bridge's SSRAM */ -static int _ate_info[] = -{ - 0, /* 0 entries */ - 8 * 1024, /* 8K entries */ - 16 * 1024, /* 16K entries */ - 64 * 1024 /* 64K entries */ -}; - -#define ATE_NUM_SIZES (sizeof(_ate_info) / sizeof(int)) -#define ATE_PROBE_VALUE 0x0123456789abcdefULL - -/* - * Determine the size of this bridge's external mapping SSRAM, and set - * the control register appropriately to reflect this size, and initialize - * the external SSRAM. - */ -int -pcibr_init_ext_ate_ram(bridge_t *bridge) -{ - int largest_working_size = 0; - int num_entries, entry; - int i, j; - bridgereg_t old_enable, new_enable; - - /* Probe SSRAM to determine its size. */ - old_enable = bridge->b_int_enable; - new_enable = old_enable & ~BRIDGE_IMR_PCI_MST_TIMEOUT; - bridge->b_int_enable = new_enable; - - for (i = 1; i < ATE_NUM_SIZES; i++) { - /* Try writing a value */ - bridge->b_ext_ate_ram[ATE_NUM_ENTRIES(i) - 1] = ATE_PROBE_VALUE; - - /* Guard against wrap */ - for (j = 1; j < i; j++) - bridge->b_ext_ate_ram[ATE_NUM_ENTRIES(j) - 1] = 0; - - /* See if value was written */ - if (bridge->b_ext_ate_ram[ATE_NUM_ENTRIES(i) - 1] == ATE_PROBE_VALUE) - largest_working_size = i; - } - bridge->b_int_enable = old_enable; - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ - - /* - * ensure that we write and read without any interruption. - * The read following the write is required for the Bridge war - */ - - bridge->b_wid_control = (bridge->b_wid_control - & ~BRIDGE_CTRL_SSRAM_SIZE_MASK) - | BRIDGE_CTRL_SSRAM_SIZE(largest_working_size); - bridge->b_wid_control; /* inval addr bug war */ - - num_entries = ATE_NUM_ENTRIES(largest_working_size); - - if (pcibr_debug_mask & PCIBR_DEBUG_ATE) { - if (num_entries) { - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATE, NULL, - "bridge at 0x%x: clearing %d external ATEs\n", - bridge, num_entries)); - } else { - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATE, NULL, - "bridge at 0x%x: no external ATE RAM found\n", - bridge)); - } - } - - /* Initialize external mapping entries */ - for (entry = 0; entry < num_entries; entry++) - bridge->b_ext_ate_ram[entry] = 0; - - return (num_entries); -} +int pcibr_invalidate_ate; /* by default don't invalidate ATE on free */ /* * Allocate "count" contiguous Bridge Address Translation Entries @@ -127,56 +34,48 @@ * Return the start index on success, -1 on failure. */ int -pcibr_ate_alloc(pcibr_soft_t pcibr_soft, int count) +pcibr_ate_alloc(pcibr_soft_t pcibr_soft, int count, struct resource *res) { int status = 0; - struct resource *new_res; - struct resource **allocated_res; + unsigned long flag; - new_res = (struct resource *) kmalloc( sizeof(struct resource), GFP_ATOMIC); - memset(new_res, 0, sizeof(*new_res)); - status = allocate_resource( &pcibr_soft->bs_int_ate_resource, new_res, + memset(res, 0, sizeof(struct resource)); + flag = pcibr_lock(pcibr_soft); + status = allocate_resource( &pcibr_soft->bs_int_ate_resource, res, count, pcibr_soft->bs_int_ate_resource.start, pcibr_soft->bs_int_ate_resource.end, 1, NULL, NULL); - - if ( status && (pcibr_soft->bs_ext_ate_resource.end != 0) ) { - status = allocate_resource( &pcibr_soft->bs_ext_ate_resource, new_res, - count, pcibr_soft->bs_ext_ate_resource.start, - pcibr_soft->bs_ext_ate_resource.end, 1, - NULL, NULL); - if (status) { - new_res->start = -1; - } - } - if (status) { /* Failed to allocate */ - kfree(new_res); + pcibr_unlock(pcibr_soft, flag); return -1; } /* Save the resource for freeing */ - allocated_res = (struct resource **)(((unsigned long)pcibr_soft->bs_allocated_ate_res) + new_res->start * sizeof( unsigned long)); - *allocated_res = new_res; + pcibr_unlock(pcibr_soft, flag); - return new_res->start; + return res->start; } void -pcibr_ate_free(pcibr_soft_t pcibr_soft, int index, int count) -/* Who says there's no such thing as a free meal? :-) */ +pcibr_ate_free(pcibr_soft_t pcibr_soft, int index, int count, struct resource *res) { - struct resource **allocated_res; + bridge_ate_t ate; int status = 0; + unsigned long flags; - allocated_res = (struct resource **)(((unsigned long)pcibr_soft->bs_allocated_ate_res) + index * sizeof(unsigned long)); + if (pcibr_invalidate_ate) { + /* For debugging purposes, clear the valid bit in the ATE */ + ate = *pcibr_ate_addr(pcibr_soft, index); + ate_write(pcibr_soft, index, count, (ate & ~ATE_V)); + } - status = release_resource(*allocated_res); + flags = pcibr_lock(pcibr_soft); + status = release_resource(res); + pcibr_unlock(pcibr_soft, flags); if (status) BUG(); /* Ouch .. */ - kfree(*allocated_res); } @@ -185,7 +84,7 @@ * into Bridge-specific Address Translation Entry attribute bits. */ bridge_ate_t -pcibr_flags_to_ate(unsigned flags) +pcibr_flags_to_ate(pcibr_soft_t pcibr_soft, unsigned flags) { bridge_ate_t attributes; @@ -232,6 +131,11 @@ if (flags & PCIBR_NOPRECISE) attributes &= ~ATE_PREC; + /* In PCI-X mode, Prefetch & Precise not supported */ + if (IS_PCIX(pcibr_soft)) { + attributes &= ~(ATE_PREC | ATE_PREF); + } + return (attributes); } @@ -243,189 +147,33 @@ pcibr_ate_addr(pcibr_soft_t pcibr_soft, int ate_index) { - bridge_t *bridge = pcibr_soft->bs_base; - - return (ate_index < pcibr_soft->bs_int_ate_size) - ? &(bridge->b_int_ate_ram[ate_index].wr) - : &(bridge->b_ext_ate_ram[ate_index]); -} - -/* We are starting to get more complexity - * surrounding writing ATEs, so pull - * the writing code into this new function. - */ - -#if PCIBR_FREEZE_TIME -#define ATE_FREEZE() s = ate_freeze(pcibr_dmamap, &freeze_time, cmd_regs) -#else -#define ATE_FREEZE() s = ate_freeze(pcibr_dmamap, cmd_regs) -#endif - -unsigned -ate_freeze(pcibr_dmamap_t pcibr_dmamap, -#if PCIBR_FREEZE_TIME - unsigned *freeze_time_ptr, -#endif - unsigned *cmd_regs) -{ - pcibr_soft_t pcibr_soft = pcibr_dmamap->bd_soft; -#ifdef LATER - int dma_slot = pcibr_dmamap->bd_slot; -#endif - int ext_ates = pcibr_dmamap->bd_flags & PCIBR_DMAMAP_SSRAM; - int slot; - - unsigned long s; - unsigned cmd_reg; - volatile unsigned *cmd_lwa; - unsigned cmd_lwd; - - if (!ext_ates) - return 0; - - /* Bridge Hardware Bug WAR #484930: - * Bridge can't handle updating External ATEs - * while DMA is occurring that uses External ATEs, - * even if the particular ATEs involved are disjoint. - */ - - /* need to prevent anyone else from - * unfreezing the grant while we - * are working; also need to prevent - * this thread from being interrupted - * to keep PCI grant freeze time - * at an absolute minimum. - */ - s = pcibr_lock(pcibr_soft); - -#ifdef LATER - /* just in case pcibr_dmamap_done was not called */ - if (pcibr_dmamap->bd_flags & PCIBR_DMAMAP_BUSY) { - pcibr_dmamap->bd_flags &= ~PCIBR_DMAMAP_BUSY; - if (pcibr_dmamap->bd_flags & PCIBR_DMAMAP_SSRAM) - atomic_dec(&(pcibr_soft->bs_slot[dma_slot]. bss_ext_ates_active)); - xtalk_dmamap_done(pcibr_dmamap->bd_xtalk); - } -#endif /* LATER */ -#if PCIBR_FREEZE_TIME - *freeze_time_ptr = get_timestamp(); -#endif - - cmd_lwa = 0; - for (slot = pcibr_soft->bs_min_slot; - slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) - if (atomic_read(&pcibr_soft->bs_slot[slot].bss_ext_ates_active)) { - cmd_reg = pcibr_soft-> - bs_slot[slot]. - bss_cmd_shadow; - if (cmd_reg & PCI_CMD_BUS_MASTER) { - cmd_lwa = pcibr_soft-> - bs_slot[slot]. - bss_cmd_pointer; - cmd_lwd = cmd_reg ^ PCI_CMD_BUS_MASTER; - cmd_lwa[0] = cmd_lwd; - } - cmd_regs[slot] = cmd_reg; - } else - cmd_regs[slot] = 0; - - if (cmd_lwa) { - bridge_t *bridge = pcibr_soft->bs_base; - - /* Read the last master bit that has been cleared. This PIO read - * on the PCI bus is to ensure the completion of any DMAs that - * are due to bus requests issued by PCI devices before the - * clearing of master bits. - */ - cmd_lwa[0]; - - /* Flush all the write buffers in the bridge */ - for (slot = pcibr_soft->bs_min_slot; - slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { - if (atomic_read(&pcibr_soft->bs_slot[slot].bss_ext_ates_active)) { - /* Flush the write buffer associated with this - * PCI device which might be using dma map RAM. - */ - bridge->b_wr_req_buf[slot].reg; - } - } + if (ate_index < pcibr_soft->bs_int_ate_size) { + return (pcireg_int_ate_addr(pcibr_soft, ate_index)); + } else { + printk("pcibr_ate_addr(): INVALID ate_index 0x%x", ate_index); + return (bridge_ate_p)0; } - return s; -} - -void -ate_write(pcibr_soft_t pcibr_soft, - bridge_ate_p ate_ptr, - int ate_count, - bridge_ate_t ate) -{ - while (ate_count-- > 0) { - *ate_ptr++ = ate; - ate += IOPGSIZE; - } } -#if PCIBR_FREEZE_TIME -#define ATE_THAW() ate_thaw(pcibr_dmamap, ate_index, ate, ate_total, freeze_time, cmd_regs, s) -#else -#define ATE_THAW() ate_thaw(pcibr_dmamap, ate_index, cmd_regs, s) -#endif - +/* + * Write the ATE. + */ void -ate_thaw(pcibr_dmamap_t pcibr_dmamap, - int ate_index, -#if PCIBR_FREEZE_TIME - bridge_ate_t ate, - int ate_total, - unsigned freeze_time_start, -#endif - unsigned *cmd_regs, - unsigned s) +ate_write(pcibr_soft_t pcibr_soft, int ate_index, int count, bridge_ate_t ate) { - pcibr_soft_t pcibr_soft = pcibr_dmamap->bd_soft; - int dma_slot = pcibr_dmamap->bd_slot; - int slot; - bridge_t *bridge = pcibr_soft->bs_base; - int ext_ates = pcibr_dmamap->bd_flags & PCIBR_DMAMAP_SSRAM; - - unsigned cmd_reg; - -#if PCIBR_FREEZE_TIME - unsigned freeze_time; - static unsigned max_freeze_time = 0; - static unsigned max_ate_total; -#endif - - if (!ext_ates) - return; - - /* restore cmd regs */ - for (slot = pcibr_soft->bs_min_slot; - slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { - if ((cmd_reg = cmd_regs[slot]) & PCI_CMD_BUS_MASTER) { - pcibr_slot_config_set(bridge, slot, PCI_CFG_COMMAND/4, cmd_reg); + while (count-- > 0) { + if (ate_index < pcibr_soft->bs_int_ate_size) { + pcireg_int_ate_set(pcibr_soft, ate_index, ate); + PCIBR_DEBUG((PCIBR_DEBUG_DMAMAP, pcibr_soft->bs_vhdl, + "ate_write(): ate_index=0x%x, ate=0x%lx\n", + ate_index, (uint64_t)ate)); + } else { + printk("ate_write(): INVALID ate_index 0x%x", ate_index); + return; } + ate_index++; + ate += IOPGSIZE; } - pcibr_dmamap->bd_flags |= PCIBR_DMAMAP_BUSY; - atomic_inc(&(pcibr_soft->bs_slot[dma_slot]. bss_ext_ates_active)); - -#if PCIBR_FREEZE_TIME - freeze_time = get_timestamp() - freeze_time_start; - if ((max_freeze_time < freeze_time) || - (max_ate_total < ate_total)) { - if (max_freeze_time < freeze_time) - max_freeze_time = freeze_time; - if (max_ate_total < ate_total) - max_ate_total = ate_total; - pcibr_unlock(pcibr_soft, s); - printk( "%s: pci freeze time %d usec for %d ATEs\n" - "\tfirst ate: %R\n", - pcibr_soft->bs_name, - freeze_time * 1000 / 1250, - ate_total, - ate, ate_bits); - } else -#endif - pcibr_unlock(pcibr_soft, s); + pcireg_tflush_get(pcibr_soft); /* wait until Bridge PIO complete */ } diff -Nru a/arch/ia64/sn/io/sn2/pcibr/pcibr_config.c b/arch/ia64/sn/io/sn2/pcibr/pcibr_config.c --- a/arch/ia64/sn/io/sn2/pcibr/pcibr_config.c Wed Feb 4 16:51:36 2004 +++ b/arch/ia64/sn/io/sn2/pcibr/pcibr_config.c Wed Feb 4 16:51:36 2004 @@ -34,22 +34,21 @@ * the 32bit word that contains the "offset" byte. */ cfg_p -pcibr_func_config_addr(bridge_t *bridge, pciio_bus_t bus, pciio_slot_t slot, +pcibr_func_config_addr(pcibr_soft_t soft, pciio_bus_t bus, pciio_slot_t slot, pciio_function_t func, int offset) { /* * Type 1 config space */ if (bus > 0) { - bridge->b_pci_cfg = ((bus << 16) | (slot << 11)); - return &bridge->b_type1_cfg.f[func].l[(offset)]; + pcireg_type1_cntr_set(soft, ((bus << 16) | (slot << 11))); + return (pcireg_type1_cfg_addr(soft, func, offset)); } /* * Type 0 config space */ - slot++; - return &bridge->b_type0_cfg_dev[slot].f[func].l[offset]; + return (pcireg_type0_cfg_addr(soft, slot, func, offset)); } /* @@ -58,59 +57,21 @@ * 32bit word that contains the "offset" byte. */ cfg_p -pcibr_slot_config_addr(bridge_t *bridge, pciio_slot_t slot, int offset) +pcibr_slot_config_addr(pcibr_soft_t soft, pciio_slot_t slot, int offset) { - return pcibr_func_config_addr(bridge, 0, slot, 0, offset); -} - -/* - * Return config space data for given slot / offset - */ -unsigned -pcibr_slot_config_get(bridge_t *bridge, pciio_slot_t slot, int offset) -{ - cfg_p cfg_base; - - cfg_base = pcibr_slot_config_addr(bridge, slot, 0); - return (do_pcibr_config_get(cfg_base, offset, sizeof(unsigned))); -} - -/* - * Return config space data for given slot / func / offset - */ -unsigned -pcibr_func_config_get(bridge_t *bridge, pciio_slot_t slot, - pciio_function_t func, int offset) -{ - cfg_p cfg_base; - - cfg_base = pcibr_func_config_addr(bridge, 0, slot, func, 0); - return (do_pcibr_config_get(cfg_base, offset, sizeof(unsigned))); -} - -/* - * Set config space data for given slot / offset - */ -void -pcibr_slot_config_set(bridge_t *bridge, pciio_slot_t slot, - int offset, unsigned val) -{ - cfg_p cfg_base; - - cfg_base = pcibr_slot_config_addr(bridge, slot, 0); - do_pcibr_config_set(cfg_base, offset, sizeof(unsigned), val); + return pcibr_func_config_addr(soft, 0, slot, 0, offset); } /* * Set config space data for given slot / func / offset */ void -pcibr_func_config_set(bridge_t *bridge, pciio_slot_t slot, +pcibr_func_config_set(pcibr_soft_t soft, pciio_slot_t slot, pciio_function_t func, int offset, unsigned val) { cfg_p cfg_base; - cfg_base = pcibr_func_config_addr(bridge, 0, slot, func, 0); + cfg_base = pcibr_func_config_addr(soft, 0, slot, func, 0); do_pcibr_config_set(cfg_base, offset, sizeof(unsigned), val); } @@ -124,8 +85,6 @@ pciio_bus_t pciio_bus; pciio_slot_t pciio_slot; pciio_function_t pciio_func; - pcibr_soft_t pcibr_soft; - bridge_t *bridge; cfg_p cfgbase = (cfg_p)0; pciio_info_t pciio_info; @@ -164,11 +123,7 @@ pciio_func = PCI_TYPE1_FUNC(reg); } - pcibr_soft = (pcibr_soft_t) pcibr_info->f_mfast; - - bridge = pcibr_soft->bs_base; - - cfgbase = pcibr_func_config_addr(bridge, + cfgbase = pcibr_func_config_addr((pcibr_soft_t) pcibr_info->f_mfast, pciio_bus, pciio_slot, pciio_func, 0); return cfgbase; diff -Nru a/arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c b/arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c --- a/arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c Wed Feb 4 16:51:37 2004 +++ b/arch/ia64/sn/io/sn2/pcibr/pcibr_dvr.c Wed Feb 4 16:51:37 2004 @@ -30,68 +30,17 @@ * based bricks use the corelet id. * -pcibr_debug_slot is the pci slot you want to trace. */ -uint32_t pcibr_debug_mask = 0x0; /* 0x00000000 to disable */ +uint32_t pcibr_debug_mask; /* 0x00000000 to disable */ static char *pcibr_debug_module = "all"; /* 'all' for all modules */ static int pcibr_debug_widget = -1; /* '-1' for all widgets */ static int pcibr_debug_slot = -1; /* '-1' for all slots */ -/* kbrick widgetnum-to-bus layout */ -int p_busnum[MAX_PORT_NUM] = { /* widget# */ - 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0 - 0x7 */ - 2, /* 0x8 */ - 1, /* 0x9 */ - 0, 0, /* 0xa - 0xb */ - 5, /* 0xc */ - 6, /* 0xd */ - 4, /* 0xe */ - 3, /* 0xf */ -}; - -char *pci_space[] = {"NONE", - "ROM", - "IO", - "", - "MEM", - "MEM32", - "MEM64", - "CFG", - "WIN0", - "WIN1", - "WIN2", - "WIN3", - "WIN4", - "WIN5", - "", - "BAD"}; - #if PCIBR_SOFT_LIST -pcibr_list_p pcibr_list = 0; +pcibr_list_p pcibr_list; #endif -extern int hwgraph_vertex_name_get(vertex_hdl_t vhdl, char *buf, uint buflen); -extern long atoi(register char *p); -extern cnodeid_t nodevertex_to_cnodeid(vertex_hdl_t vhdl); -extern char *dev_to_name(vertex_hdl_t dev, char *buf, uint buflen); -extern struct map *atemapalloc(uint64_t); -extern void atefree(struct map *, size_t, uint64_t); -extern void atemapfree(struct map *); -extern pciio_dmamap_t get_free_pciio_dmamap(vertex_hdl_t); -extern void free_pciio_dmamap(pcibr_dmamap_t); -extern void xwidget_error_register(vertex_hdl_t, error_handler_f *, error_handler_arg_t); - -#define ATE_WRITE() ate_write(pcibr_soft, ate_ptr, ate_count, ate) -#if PCIBR_FREEZE_TIME -#define ATE_FREEZE() s = ate_freeze(pcibr_dmamap, &freeze_time, cmd_regs) -#else -#define ATE_FREEZE() s = ate_freeze(pcibr_dmamap, cmd_regs) -#endif /* PCIBR_FREEZE_TIME */ - -#if PCIBR_FREEZE_TIME -#define ATE_THAW() ate_thaw(pcibr_dmamap, ate_index, ate, ate_total, freeze_time, cmd_regs, s) -#else -#define ATE_THAW() ate_thaw(pcibr_dmamap, ate_index, cmd_regs, s) -#endif +extern char *pci_space[]; /* ===================================================================== * Function Table of Contents @@ -102,46 +51,35 @@ * perhaps bust this file into smaller chunks. */ -extern int do_pcibr_rrb_free_all(pcibr_soft_t, bridge_t *, pciio_slot_t); +extern void do_pcibr_rrb_free_all(pcibr_soft_t, pciio_slot_t); extern void do_pcibr_rrb_autoalloc(pcibr_soft_t, int, int, int); +extern void pcibr_rrb_alloc_more(pcibr_soft_t pcibr_soft, int slot, + int vchan, int more_rrbs); extern int pcibr_wrb_flush(vertex_hdl_t); extern int pcibr_rrb_alloc(vertex_hdl_t, int *, int *); -extern void pcibr_rrb_flush(vertex_hdl_t); +void pcibr_rrb_alloc_more(pcibr_soft_t, int, int, int); -static int pcibr_try_set_device(pcibr_soft_t, pciio_slot_t, unsigned, bridgereg_t); -void pcibr_release_device(pcibr_soft_t, pciio_slot_t, bridgereg_t); +extern void pcibr_rrb_flush(vertex_hdl_t); -extern void pcibr_setwidint(xtalk_intr_t); -extern void pcibr_clearwidint(bridge_t *); +static int pcibr_try_set_device(pcibr_soft_t, pciio_slot_t, unsigned, uint64_t); +void pcibr_release_device(pcibr_soft_t, pciio_slot_t, uint64_t); extern iopaddr_t pcibr_bus_addr_alloc(pcibr_soft_t, pciio_win_info_t, pciio_space_t, int, int, int); +extern int hwgraph_vertex_name_get(vertex_hdl_t vhdl, char *buf, + uint buflen); -int pcibr_attach(vertex_hdl_t); -int pcibr_attach2(vertex_hdl_t, bridge_t *, vertex_hdl_t, - int, pcibr_soft_t *); int pcibr_detach(vertex_hdl_t); +void pcibr_directmap_init(pcibr_soft_t); int pcibr_pcix_rbars_calc(pcibr_soft_t); -extern int pcibr_init_ext_ate_ram(bridge_t *); -extern int pcibr_ate_alloc(pcibr_soft_t, int); -extern void pcibr_ate_free(pcibr_soft_t, int, int); +extern int pcibr_ate_alloc(pcibr_soft_t, int, struct resource *); +extern void pcibr_ate_free(pcibr_soft_t, int, int, struct resource *); +extern pciio_dmamap_t get_free_pciio_dmamap(vertex_hdl_t); +extern void free_pciio_dmamap(pcibr_dmamap_t); extern int pcibr_widget_to_bus(vertex_hdl_t pcibr_vhdl); -extern unsigned ate_freeze(pcibr_dmamap_t pcibr_dmamap, -#if PCIBR_FREEZE_TIME - unsigned *freeze_time_ptr, -#endif - unsigned *cmd_regs); -extern void ate_write(pcibr_soft_t pcibr_soft, bridge_ate_p ate_ptr, int ate_count, bridge_ate_t ate); -extern void ate_thaw(pcibr_dmamap_t pcibr_dmamap, int ate_index, -#if PCIBR_FREEZE_TIME - bridge_ate_t ate, - int ate_total, - unsigned freeze_time_start, -#endif - unsigned *cmd_regs, - unsigned s); +extern void ate_write(pcibr_soft_t, int, int, bridge_ate_t); pcibr_info_t pcibr_info_get(vertex_hdl_t); @@ -156,7 +94,7 @@ void pcibr_piospace_free(vertex_hdl_t, pciio_space_t, iopaddr_t, size_t); static iopaddr_t pcibr_flags_to_d64(unsigned, pcibr_soft_t); -extern bridge_ate_t pcibr_flags_to_ate(unsigned); +extern bridge_ate_t pcibr_flags_to_ate(pcibr_soft_t, unsigned); pcibr_dmamap_t pcibr_dmamap_alloc(vertex_hdl_t, device_desc_t, size_t, unsigned); void pcibr_dmamap_free(pcibr_dmamap_t); @@ -171,74 +109,18 @@ void pcibr_dmalist_drain(vertex_hdl_t, alenlist_t); iopaddr_t pcibr_dmamap_pciaddr_get(pcibr_dmamap_t); -extern unsigned pcibr_intr_bits(pciio_info_t info, - pciio_intr_line_t lines, int nslots); -extern pcibr_intr_t pcibr_intr_alloc(vertex_hdl_t, device_desc_t, pciio_intr_line_t, vertex_hdl_t); -extern void pcibr_intr_free(pcibr_intr_t); -extern void pcibr_setpciint(xtalk_intr_t); -extern int pcibr_intr_connect(pcibr_intr_t, intr_func_t, intr_arg_t); -extern void pcibr_intr_disconnect(pcibr_intr_t); - -extern vertex_hdl_t pcibr_intr_cpu_get(pcibr_intr_t); -extern void pcibr_intr_func(intr_arg_t); - -extern void print_bridge_errcmd(uint32_t, char *); - -extern void pcibr_error_dump(pcibr_soft_t); -extern uint32_t pcibr_errintr_group(uint32_t); -extern void pcibr_pioerr_check(pcibr_soft_t); -extern void pcibr_error_intr_handler(int, void *, struct pt_regs *); - -extern int pcibr_addr_toslot(pcibr_soft_t, iopaddr_t, pciio_space_t *, iopaddr_t *, pciio_function_t *); -extern void pcibr_error_cleanup(pcibr_soft_t, int); -extern void pcibr_device_disable(pcibr_soft_t, int); -extern int pcibr_pioerror(pcibr_soft_t, int, ioerror_mode_t, ioerror_t *); -extern int pcibr_dmard_error(pcibr_soft_t, int, ioerror_mode_t, ioerror_t *); -extern int pcibr_dmawr_error(pcibr_soft_t, int, ioerror_mode_t, ioerror_t *); -extern int pcibr_error_handler(error_handler_arg_t, int, ioerror_mode_t, ioerror_t *); -extern int pcibr_error_handler_wrapper(error_handler_arg_t, int, ioerror_mode_t, ioerror_t *); void pcibr_provider_startup(vertex_hdl_t); void pcibr_provider_shutdown(vertex_hdl_t); int pcibr_reset(vertex_hdl_t); pciio_endian_t pcibr_endian_set(vertex_hdl_t, pciio_endian_t, pciio_endian_t); -int pcibr_priority_bits_set(pcibr_soft_t, pciio_slot_t, pciio_priority_t); -pciio_priority_t pcibr_priority_set(vertex_hdl_t, pciio_priority_t); int pcibr_device_flags_set(vertex_hdl_t, pcibr_device_flags_t); -extern cfg_p pcibr_config_addr(vertex_hdl_t, unsigned); -extern uint64_t pcibr_config_get(vertex_hdl_t, unsigned, unsigned); -extern void pcibr_config_set(vertex_hdl_t, unsigned, unsigned, uint64_t); - -extern pcibr_hints_t pcibr_hints_get(vertex_hdl_t, int); -extern void pcibr_hints_fix_rrbs(vertex_hdl_t); -extern void pcibr_hints_dualslot(vertex_hdl_t, pciio_slot_t, pciio_slot_t); -extern void pcibr_hints_intr_bits(vertex_hdl_t, pcibr_intr_bits_f *); -extern void pcibr_set_rrb_callback(vertex_hdl_t, rrb_alloc_funct_t); -extern void pcibr_hints_handsoff(vertex_hdl_t); -extern void pcibr_hints_subdevs(vertex_hdl_t, pciio_slot_t, uint64_t); - -extern int pcibr_slot_info_init(vertex_hdl_t,pciio_slot_t); extern int pcibr_slot_info_free(vertex_hdl_t,pciio_slot_t); -extern int pcibr_slot_info_return(pcibr_soft_t, pciio_slot_t, - pcibr_slot_info_resp_t); -extern void pcibr_slot_func_info_return(pcibr_info_h, int, - pcibr_slot_func_info_resp_t); -extern int pcibr_slot_addr_space_init(vertex_hdl_t,pciio_slot_t); -extern int pcibr_slot_pcix_rbar_init(pcibr_soft_t, pciio_slot_t); -extern int pcibr_slot_device_init(vertex_hdl_t, pciio_slot_t); -extern int pcibr_slot_guest_info_init(vertex_hdl_t,pciio_slot_t); -extern int pcibr_slot_call_device_attach(vertex_hdl_t, - pciio_slot_t, int); -extern int pcibr_slot_call_device_detach(vertex_hdl_t, - pciio_slot_t, int); -extern int pcibr_slot_attach(vertex_hdl_t, pciio_slot_t, int, - char *, int *); extern int pcibr_slot_detach(vertex_hdl_t, pciio_slot_t, int, char *, int *); -extern int pcibr_slot_initial_rrb_alloc(vertex_hdl_t, pciio_slot_t); -extern int pcibr_initial_rrb(vertex_hdl_t, pciio_slot_t, pciio_slot_t); +pciio_businfo_t pcibr_businfo_get(vertex_hdl_t); /* ===================================================================== * Device(x) register management @@ -256,33 +138,23 @@ pcibr_try_set_device(pcibr_soft_t pcibr_soft, pciio_slot_t slot, unsigned flags, - bridgereg_t mask) + uint64_t mask) { - bridge_t *bridge; pcibr_soft_slot_t slotp; - bridgereg_t old; - bridgereg_t new; - bridgereg_t chg; - bridgereg_t bad; - bridgereg_t badpmu; - bridgereg_t badd32; - bridgereg_t badd64; - bridgereg_t fix; - unsigned long s; - bridgereg_t xmask; - - xmask = mask; - if (mask == BRIDGE_DEV_PMU_BITS) - xmask = XBRIDGE_DEV_PMU_BITS; - if (mask == BRIDGE_DEV_D64_BITS) - xmask = XBRIDGE_DEV_D64_BITS; + uint64_t old; + uint64_t new; + uint64_t chg; + uint64_t bad; + uint64_t badpmu; + uint64_t badd32; + uint64_t badd64; + uint64_t fix; + unsigned long s; slotp = &pcibr_soft->bs_slot[slot]; s = pcibr_lock(pcibr_soft); - bridge = pcibr_soft->bs_base; - old = slotp->bss_device; /* figure out what the desired @@ -390,21 +262,21 @@ * PIC, can cause problems for 32-bit devices. */ if (mask == BRIDGE_DEV_D64_BITS && - PCIBR_WAR_ENABLED(PV855271, pcibr_soft)) { - if (flags & PCIBR_VCHAN1) { - new |= BRIDGE_DEV_VIRTUAL_EN; - xmask |= BRIDGE_DEV_VIRTUAL_EN; - } + PCIBR_WAR_ENABLED(PV855271, pcibr_soft)) { + if (flags & PCIBR_VCHAN1) { + new |= BRIDGE_DEV_VIRTUAL_EN; + mask |= BRIDGE_DEV_VIRTUAL_EN; + } } /* PIC BRINGUP WAR (PV# 878674): Don't allow 64bit PIO accesses */ - if (IS_PIC_SOFT(pcibr_soft) && (flags & PCIBR_64BIT) && + if ((flags & PCIBR_64BIT) && PCIBR_WAR_ENABLED(PV878674, pcibr_soft)) { new &= ~(1ull << 22); } chg = old ^ new; /* what are we changing, */ - chg &= xmask; /* of the interesting bits */ + chg &= mask; /* of the interesting bits */ if (chg) { @@ -476,9 +348,10 @@ pcibr_unlock(pcibr_soft, s); return 0; } - bridge->b_device[slot].reg = new; + + pcireg_device_set(pcibr_soft, slot, new); slotp->bss_device = new; - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ + pcireg_tflush_get(pcibr_soft); /* wait until Bridge PIO complete */ pcibr_unlock(pcibr_soft, s); PCIBR_DEBUG((PCIBR_DEBUG_DEVREG, pcibr_soft->bs_vhdl, @@ -489,7 +362,7 @@ void pcibr_release_device(pcibr_soft_t pcibr_soft, pciio_slot_t slot, - bridgereg_t mask) + uint64_t mask) { pcibr_soft_slot_t slotp; unsigned long s; @@ -508,22 +381,6 @@ pcibr_unlock(pcibr_soft, s); } -/* - * flush write gather buffer for slot - */ -static void -pcibr_device_write_gather_flush(pcibr_soft_t pcibr_soft, - pciio_slot_t slot) -{ - bridge_t *bridge; - unsigned long s; - volatile uint32_t wrf; - s = pcibr_lock(pcibr_soft); - bridge = pcibr_soft->bs_base; - - wrf = bridge->b_wr_req_buf[slot].reg; - pcibr_unlock(pcibr_soft, s); -} /* ===================================================================== * Bridge (pcibr) "Device Driver" entry points @@ -535,7 +392,7 @@ { vertex_hdl_t pcibr_vhdl = file->f_dentry->d_fsdata; pcibr_soft_t pcibr_soft; - bridge_t *bridge; + void *bridge; unsigned long phys_addr; int error = 0; @@ -547,7 +404,7 @@ error = io_remap_page_range(vma, phys_addr, vma->vm_start, vma->vm_end - vma->vm_start, vma->vm_page_prot); - return(error); + return error; } /* @@ -683,7 +540,6 @@ vertex_hdl_t pcibr_vhdl; pciio_slot_t slot; pcibr_soft_t pcibr_soft; - bridge_t *bridge; int count_vchan0, count_vchan1; unsigned long s; int error_call; @@ -695,7 +551,6 @@ slot = PCIBR_INFO_SLOT_GET_INT(pciio_info); pcibr_soft = pcibr_soft_get(pcibr_vhdl); - bridge = pcibr_soft->bs_base; /* Clear all the hardware xtalk resources for this device */ xtalk_widgetdev_shutdown(pcibr_soft->bs_conn, slot); @@ -718,7 +573,7 @@ pcibr_soft->bs_rrb_valid[slot][VCHAN3]; /* Free the rrbs allocated to this slot, both the normal & virtual */ - do_pcibr_rrb_free_all(pcibr_soft, bridge, slot); + do_pcibr_rrb_free_all(pcibr_soft, slot); count_vchan0 = pcibr_soft->bs_rrb_valid_dflt[slot][VCHAN0]; count_vchan1 = pcibr_soft->bs_rrb_valid_dflt[slot][VCHAN1]; @@ -741,7 +596,7 @@ if (error_call) error = error_call; - return(error); + return error; } @@ -823,951 +678,6 @@ } } -/* - * build a convenience link path in the - * form of "...//bus/" - * - * returns 1 on success, 0 otherwise - * - * depends on hwgraph separator == '/' - */ -int -pcibr_bus_cnvlink(vertex_hdl_t f_c) -{ - char dst[MAXDEVNAME]; - char *dp = dst; - char *cp, *xp; - int widgetnum; - char pcibus[8]; - vertex_hdl_t nvtx, svtx; - int rv; - - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, f_c, "pcibr_bus_cnvlink\n")); - - if (GRAPH_SUCCESS != hwgraph_vertex_name_get(f_c, dst, MAXDEVNAME)) - return 0; - - /* dst example == /hw/module/001c02/Pbrick/xtalk/8/pci/direct */ - - /* find the widget number */ - xp = strstr(dst, "/"EDGE_LBL_XTALK"/"); - if (xp == NULL) - return 0; - widgetnum = simple_strtoul(xp+7, NULL, 0); - if (widgetnum < XBOW_PORT_8 || widgetnum > XBOW_PORT_F) - return 0; - - /* remove "/pci/direct" from path */ - cp = strstr(dst, "/" EDGE_LBL_PCI "/" EDGE_LBL_DIRECT); - if (cp == NULL) - return 0; - *cp = (char)NULL; - - /* get the vertex for the widget */ - if (GRAPH_SUCCESS != hwgraph_traverse(NULL, dp, &svtx)) - return 0; - - *xp = (char)NULL; /* remove "/xtalk/..." from path */ - - /* dst example now == /hw/module/001c02/Pbrick */ - - /* get the bus number */ - strcat(dst, "/"); - strcat(dst, EDGE_LBL_BUS); - sprintf(pcibus, "%d", p_busnum[widgetnum]); - - /* link to bus to widget */ - rv = hwgraph_path_add(NULL, dp, &nvtx); - if (GRAPH_SUCCESS == rv) - rv = hwgraph_edge_add(nvtx, svtx, pcibus); - - return (rv == GRAPH_SUCCESS); -} - - -/* - * pcibr_attach: called every time the crosstalk - * infrastructure is asked to initialize a widget - * that matches the part number we handed to the - * registration routine above. - */ -/*ARGSUSED */ -int -pcibr_attach(vertex_hdl_t xconn_vhdl) -{ - /* REFERENCED */ - graph_error_t rc; - vertex_hdl_t pcibr_vhdl; - bridge_t *bridge; - - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, xconn_vhdl, "pcibr_attach\n")); - - bridge = (bridge_t *) - xtalk_piotrans_addr(xconn_vhdl, NULL, - 0, sizeof(bridge_t), 0); - /* - * Create the vertex for the PCI bus, which we - * will also use to hold the pcibr_soft and - * which will be the "master" vertex for all the - * pciio connection points we will hang off it. - * This needs to happen before we call nic_bridge_vertex_info - * as we are some of the *_vmc functions need access to the edges. - * - * Opening this vertex will provide access to - * the Bridge registers themselves. - */ - rc = hwgraph_path_add(xconn_vhdl, EDGE_LBL_PCI, &pcibr_vhdl); - ASSERT(rc == GRAPH_SUCCESS); - - pciio_provider_register(pcibr_vhdl, &pcibr_provider); - pciio_provider_startup(pcibr_vhdl); - - return pcibr_attach2(xconn_vhdl, bridge, pcibr_vhdl, 0, NULL); -} - - -/*ARGSUSED */ -int -pcibr_attach2(vertex_hdl_t xconn_vhdl, bridge_t *bridge, - vertex_hdl_t pcibr_vhdl, int busnum, pcibr_soft_t *ret_softp) -{ - /* REFERENCED */ - vertex_hdl_t ctlr_vhdl; - bridgereg_t id; - int rev; - pcibr_soft_t pcibr_soft; - pcibr_info_t pcibr_info; - xwidget_info_t info; - xtalk_intr_t xtalk_intr; - int slot; - int ibit; - vertex_hdl_t noslot_conn; - char devnm[MAXDEVNAME], *s; - pcibr_hints_t pcibr_hints; - uint64_t int_enable; - picreg_t int_enable_64; - unsigned rrb_fixed = 0; - -#if PCI_FBBE - int fast_back_to_back_enable; -#endif - nasid_t nasid; - int iobrick_type_get_nasid(nasid_t nasid); - int iomoduleid_get(nasid_t nasid); - - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, pcibr_vhdl, - "pcibr_attach2: bridge=0x%p, busnum=%d\n", bridge, busnum)); - - ctlr_vhdl = NULL; - ctlr_vhdl = hwgraph_register(pcibr_vhdl, EDGE_LBL_CONTROLLER, 0, - 0, 0, 0, - S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, 0, 0, - (struct file_operations *)&pcibr_fops, (void *)pcibr_vhdl); - ASSERT(ctlr_vhdl != NULL); - - /* - * Get the hint structure; if some NIC callback - * marked this vertex as "hands-off" then we - * just return here, before doing anything else. - */ - pcibr_hints = pcibr_hints_get(xconn_vhdl, 0); - - if (pcibr_hints && pcibr_hints->ph_hands_off) - return -1; /* generic operations disabled */ - - id = bridge->b_wid_id; - rev = XWIDGET_PART_REV_NUM(id); - - hwgraph_info_add_LBL(pcibr_vhdl, INFO_LBL_PCIBR_ASIC_REV, (arbitrary_info_t) rev); - - /* - * allocate soft state structure, fill in some - * fields, and hook it up to our vertex. - */ - pcibr_soft = kmalloc(sizeof(*(pcibr_soft)), GFP_KERNEL); - if (ret_softp) - *ret_softp = pcibr_soft; - if (!pcibr_soft) - return -1; - - memset(pcibr_soft, 0, sizeof *pcibr_soft); - pcibr_soft_set(pcibr_vhdl, pcibr_soft); - pcibr_soft->bs_conn = xconn_vhdl; - pcibr_soft->bs_vhdl = pcibr_vhdl; - pcibr_soft->bs_base = bridge; - pcibr_soft->bs_rev_num = rev; - pcibr_soft->bs_intr_bits = (pcibr_intr_bits_f *)pcibr_intr_bits; - - pcibr_soft->bs_min_slot = 0; /* lowest possible slot# */ - pcibr_soft->bs_max_slot = 7; /* highest possible slot# */ - pcibr_soft->bs_busnum = busnum; - pcibr_soft->bs_bridge_type = PCIBR_BRIDGETYPE_PIC; - switch(pcibr_soft->bs_bridge_type) { - case PCIBR_BRIDGETYPE_BRIDGE: - pcibr_soft->bs_int_ate_size = BRIDGE_INTERNAL_ATES; - pcibr_soft->bs_bridge_mode = 0; /* speed is not available in bridge */ - break; - case PCIBR_BRIDGETYPE_PIC: - pcibr_soft->bs_min_slot = 0; - pcibr_soft->bs_max_slot = 3; - pcibr_soft->bs_int_ate_size = XBRIDGE_INTERNAL_ATES; - pcibr_soft->bs_bridge_mode = - (((bridge->p_wid_stat_64 & PIC_STAT_PCIX_SPEED) >> 33) | - ((bridge->p_wid_stat_64 & PIC_STAT_PCIX_ACTIVE) >> 33)); - - /* We have to clear PIC's write request buffer to avoid parity - * errors. See PV#854845. - */ - { - int i; - - for (i=0; i < PIC_WR_REQ_BUFSIZE; i++) { - bridge->p_wr_req_lower[i] = 0; - bridge->p_wr_req_upper[i] = 0; - bridge->p_wr_req_parity[i] = 0; - } - } - - break; - case PCIBR_BRIDGETYPE_XBRIDGE: - pcibr_soft->bs_int_ate_size = XBRIDGE_INTERNAL_ATES; - pcibr_soft->bs_bridge_mode = - ((bridge->b_wid_control & BRIDGE_CTRL_PCI_SPEED) >> 3); - break; - } - - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, pcibr_vhdl, - "pcibr_attach2: pcibr_soft=0x%x, mode=0x%x\n", - pcibr_soft, pcibr_soft->bs_bridge_mode)); - pcibr_soft->bsi_err_intr = 0; - - /* Bridges up through REV C - * are unable to set the direct - * byteswappers to BYTE_STREAM. - */ - if (pcibr_soft->bs_rev_num <= BRIDGE_PART_REV_C) { - pcibr_soft->bs_pio_end_io = PCIIO_WORD_VALUES; - pcibr_soft->bs_pio_end_mem = PCIIO_WORD_VALUES; - } -#if PCIBR_SOFT_LIST - /* - * link all the pcibr_soft structs - */ - { - pcibr_list_p self; - - self = kmalloc(sizeof(*(self)), GFP_KERNEL); - if (!self) - return -1; - memset(self, 0, sizeof(*(self))); - self->bl_soft = pcibr_soft; - self->bl_vhdl = pcibr_vhdl; - self->bl_next = pcibr_list; - pcibr_list = self; - } -#endif /* PCIBR_SOFT_LIST */ - - /* - * get the name of this bridge vertex and keep the info. Use this - * only where it is really needed now: like error interrupts. - */ - s = dev_to_name(pcibr_vhdl, devnm, MAXDEVNAME); - pcibr_soft->bs_name = kmalloc(strlen(s) + 1, GFP_KERNEL); - strcpy(pcibr_soft->bs_name, s); - - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, pcibr_vhdl, - "pcibr_attach2: %s ASIC: rev %s (code=0x%x)\n", - "PIC", - (rev == BRIDGE_PART_REV_A) ? "A" : - (rev == BRIDGE_PART_REV_B) ? "B" : - (rev == BRIDGE_PART_REV_C) ? "C" : - (rev == BRIDGE_PART_REV_D) ? "D" : - (rev == XBRIDGE_PART_REV_A) ? "A" : - (rev == XBRIDGE_PART_REV_B) ? "B" : - (IS_PIC_PART_REV_A(rev)) ? "A" : - "unknown", rev, pcibr_soft->bs_name)); - - info = xwidget_info_get(xconn_vhdl); - pcibr_soft->bs_xid = xwidget_info_id_get(info); - pcibr_soft->bs_master = xwidget_info_master_get(info); - pcibr_soft->bs_mxid = xwidget_info_masterid_get(info); - - pcibr_soft->bs_first_slot = pcibr_soft->bs_min_slot; - pcibr_soft->bs_last_slot = pcibr_soft->bs_max_slot; - /* - * Bridge can only reset slots 0, 1, 2, and 3. Ibrick internal - * slots 4, 5, 6, and 7 must be reset as a group, so do not - * reset them. - */ - pcibr_soft->bs_last_reset = 3; - - nasid = NASID_GET(bridge); - - if ((pcibr_soft->bs_bricktype = iobrick_type_get_nasid(nasid)) < 0) - printk(KERN_WARNING "0x%p: Unknown bricktype : 0x%x\n", (void *)xconn_vhdl, - (unsigned int)pcibr_soft->bs_bricktype); - - pcibr_soft->bs_moduleid = iomoduleid_get(nasid); - - if (pcibr_soft->bs_bricktype > 0) { - switch (pcibr_soft->bs_bricktype) { - case MODULE_PXBRICK: - case MODULE_IXBRICK: - pcibr_soft->bs_first_slot = 0; - pcibr_soft->bs_last_slot = 1; - pcibr_soft->bs_last_reset = 1; - - /* If Bus 1 has IO9 then there are 4 devices in that bus. Note - * we figure this out from klconfig since the kernel has yet to - * probe - */ - if (pcibr_widget_to_bus(pcibr_vhdl) == 1) { - lboard_t *brd = (lboard_t *)KL_CONFIG_INFO(nasid); - - while (brd) { - if (brd->brd_flags & LOCAL_MASTER_IO6) { - pcibr_soft->bs_last_slot = 3; - pcibr_soft->bs_last_reset = 3; - } - brd = KLCF_NEXT(brd); - } - } - break; - case MODULE_PBRICK: - pcibr_soft->bs_first_slot = 1; - pcibr_soft->bs_last_slot = 2; - pcibr_soft->bs_last_reset = 2; - break; - - case MODULE_IBRICK: - /* - * Here's the current baseio layout for SN1 style systems: - * - * 0 1 2 3 4 5 6 7 slot# - * - * x scsi x x ioc3 usb x x O300 Ibrick - * - * x == never occupied - * E == external (add-in) slot - * - */ - pcibr_soft->bs_first_slot = 1; /* Ibrick first slot == 1 */ - if (pcibr_soft->bs_xid == 0xe) { - pcibr_soft->bs_last_slot = 2; - pcibr_soft->bs_last_reset = 2; - } else { - pcibr_soft->bs_last_slot = 6; - } - break; - default: - break; - } - - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, pcibr_vhdl, - "pcibr_attach2: %cbrick, slots %d-%d\n", - MODULE_GET_BTCHAR(pcibr_soft->bs_moduleid), - pcibr_soft->bs_first_slot, pcibr_soft->bs_last_slot)); - } - - /* - * Initialize bridge and bus locks - */ - spin_lock_init(&pcibr_soft->bs_lock); - /* - * If we have one, process the hints structure. - */ - if (pcibr_hints) { - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_HINTS, pcibr_vhdl, - "pcibr_attach2: pcibr_hints=0x%x\n", pcibr_hints)); - - rrb_fixed = pcibr_hints->ph_rrb_fixed; - - pcibr_soft->bs_rrb_fixed = rrb_fixed; - - if (pcibr_hints->ph_intr_bits) { - pcibr_soft->bs_intr_bits = pcibr_hints->ph_intr_bits; - } - - for (slot = pcibr_soft->bs_min_slot; - slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { - int hslot = pcibr_hints->ph_host_slot[slot] - 1; - - if (hslot < 0) { - pcibr_soft->bs_slot[slot].host_slot = slot; - } else { - pcibr_soft->bs_slot[slot].has_host = 1; - pcibr_soft->bs_slot[slot].host_slot = hslot; - } - } - } - /* - * Set-up initial values for state fields - */ - for (slot = pcibr_soft->bs_min_slot; - slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { - pcibr_soft->bs_slot[slot].bss_devio.bssd_space = PCIIO_SPACE_NONE; - pcibr_soft->bs_slot[slot].bss_devio.bssd_ref_cnt = 0; - pcibr_soft->bs_slot[slot].bss_d64_base = PCIBR_D64_BASE_UNSET; - pcibr_soft->bs_slot[slot].bss_d32_base = PCIBR_D32_BASE_UNSET; - pcibr_soft->bs_slot[slot].bss_ext_ates_active = ATOMIC_INIT(0); - pcibr_soft->bs_rrb_valid_dflt[slot][VCHAN0] = -1; - } - - for (ibit = 0; ibit < 8; ++ibit) { - pcibr_soft->bs_intr[ibit].bsi_xtalk_intr = 0; - pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_soft = pcibr_soft; - pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_list = NULL; - pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_stat = - &(bridge->b_int_status); - pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_ibit = ibit; - pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_hdlrcnt = 0; - pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_shared = 0; - pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_connected = 0; - } - - /* - * connect up our error handler. PIC has 2 busses (thus resulting in 2 - * pcibr_soft structs under 1 widget), so only register a xwidget error - * handler for PIC's bus0. NOTE: for PIC pcibr_error_handler_wrapper() - * is a wrapper routine we register that will call the real error handler - * pcibr_error_handler() with the correct pcibr_soft struct. - */ - if (busnum == 0) { - xwidget_error_register(xconn_vhdl, pcibr_error_handler_wrapper, pcibr_soft); - } - - /* - * Initialize various Bridge registers. - */ - - /* - * On pre-Rev.D bridges, set the PCI_RETRY_CNT - * to zero to avoid dropping stores. (#475347) - */ - if (rev < BRIDGE_PART_REV_D) - bridge->b_bus_timeout &= ~BRIDGE_BUS_PCI_RETRY_MASK; - - /* - * Clear all pending interrupts. - */ - bridge->b_int_rst_stat = (BRIDGE_IRR_ALL_CLR); - - /* Initialize some PIC specific registers. */ - { - picreg_t pic_ctrl_reg = bridge->p_wid_control_64; - - /* Bridges Requester ID: bus = busnum, dev = 0, func = 0 */ - pic_ctrl_reg &= ~PIC_CTRL_BUS_NUM_MASK; - pic_ctrl_reg |= PIC_CTRL_BUS_NUM(busnum); - pic_ctrl_reg &= ~PIC_CTRL_DEV_NUM_MASK; - pic_ctrl_reg &= ~PIC_CTRL_FUN_NUM_MASK; - - pic_ctrl_reg &= ~PIC_CTRL_NO_SNOOP; - pic_ctrl_reg &= ~PIC_CTRL_RELAX_ORDER; - - /* enable parity checking on PICs internal RAM */ - pic_ctrl_reg |= PIC_CTRL_PAR_EN_RESP; - pic_ctrl_reg |= PIC_CTRL_PAR_EN_ATE; - /* PIC BRINGUP WAR (PV# 862253): dont enable write request - * parity checking. - */ - if (!PCIBR_WAR_ENABLED(PV862253, pcibr_soft)) { - pic_ctrl_reg |= PIC_CTRL_PAR_EN_REQ; - } - - bridge->p_wid_control_64 = pic_ctrl_reg; - } - bridge->b_int_device = (uint32_t) 0x006db6db; - { - bridgereg_t dirmap; - paddr_t paddr; - iopaddr_t xbase; - xwidgetnum_t xport; - iopaddr_t offset; - int num_entries = 0; - int entry; - cnodeid_t cnodeid; - nasid_t nasid; - - /* Set the Bridge's 32-bit PCI to XTalk - * Direct Map register to the most useful - * value we can determine. Note that we - * must use a single xid for all of: - * direct-mapped 32-bit DMA accesses - * direct-mapped 64-bit DMA accesses - * DMA accesses through the PMU - * interrupts - * This is the only way to guarantee that - * completion interrupts will reach a CPU - * after all DMA data has reached memory. - * (Of course, there may be a few special - * drivers/controlers that explicitly manage - * this ordering problem.) - */ - - cnodeid = 0; /* default node id */ - nasid = COMPACT_TO_NASID_NODEID(cnodeid); - paddr = NODE_OFFSET(nasid) + 0; - - /* currently, we just assume that if we ask - * for a DMA mapping to "zero" the XIO - * host will transmute this into a request - * for the lowest hunk of memory. - */ - xbase = xtalk_dmatrans_addr(xconn_vhdl, 0, - paddr, PAGE_SIZE, 0); - - if (xbase != XIO_NOWHERE) { - if (XIO_PACKED(xbase)) { - xport = XIO_PORT(xbase); - xbase = XIO_ADDR(xbase); - } else - xport = pcibr_soft->bs_mxid; - - offset = xbase & ((1ull << BRIDGE_DIRMAP_OFF_ADDRSHFT) - 1ull); - xbase >>= BRIDGE_DIRMAP_OFF_ADDRSHFT; - - dirmap = xport << BRIDGE_DIRMAP_W_ID_SHFT; - - if (xbase) - dirmap |= BRIDGE_DIRMAP_OFF & xbase; - else if (offset >= (512 << 20)) - dirmap |= BRIDGE_DIRMAP_ADD512; - - bridge->b_dir_map = dirmap; - } - /* - * Set bridge's idea of page size according to the system's - * idea of "IO page size". TBD: The idea of IO page size - * should really go away. - */ - /* - * ensure that we write and read without any interruption. - * The read following the write is required for the Bridge war - */ -#if IOPGSIZE == 4096 - bridge->p_wid_control_64 &= ~BRIDGE_CTRL_PAGE_SIZE; -#elif IOPGSIZE == 16384 - bridge->p_wid_control_64 |= BRIDGE_CTRL_PAGE_SIZE; -#else - <<>>; -#endif - bridge->b_wid_control; /* inval addr bug war */ - - /* Initialize internal mapping entries */ - for (entry = 0; entry < pcibr_soft->bs_int_ate_size; entry++) { - bridge->b_int_ate_ram[entry].wr = 0; - } - - /* - * Determine if there's external mapping SSRAM on this - * bridge. Set up Bridge control register appropriately, - * inititlize SSRAM, and set software up to manage RAM - * entries as an allocatable resource. - * - * Currently, we just use the rm* routines to manage ATE - * allocation. We should probably replace this with a - * Best Fit allocator. - * - * For now, if we have external SSRAM, avoid using - * the internal ssram: we can't turn PREFETCH on - * when we use the internal SSRAM; and besides, - * this also guarantees that no allocation will - * straddle the internal/external line, so we - * can increment ATE write addresses rather than - * recomparing against BRIDGE_INTERNAL_ATES every - * time. - */ - - num_entries = 0; - - /* we always have 128 ATEs (512 for Xbridge) inside the chip - * even if disabled for debugging. - */ - pcibr_soft->bs_int_ate_resource.start = 0; - pcibr_soft->bs_int_ate_resource.end = pcibr_soft->bs_int_ate_size - 1; - - if (num_entries > pcibr_soft->bs_int_ate_size) { -#if PCIBR_ATE_NOTBOTH /* for debug -- forces us to use external ates */ - printk("pcibr_attach: disabling internal ATEs.\n"); - pcibr_ate_alloc(pcibr_soft, pcibr_soft->bs_int_ate_size); -#endif - pcibr_soft->bs_ext_ate_resource.start = pcibr_soft->bs_int_ate_size; - pcibr_soft->bs_ext_ate_resource.end = num_entries; - } - - pcibr_soft->bs_allocated_ate_res = (void *) kmalloc(pcibr_soft->bs_int_ate_size * sizeof(unsigned long), GFP_KERNEL); - memset(pcibr_soft->bs_allocated_ate_res, 0x0, pcibr_soft->bs_int_ate_size * sizeof(unsigned long)); - - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATE, pcibr_vhdl, - "pcibr_attach2: %d ATEs, %d internal & %d external\n", - num_entries ? num_entries : pcibr_soft->bs_int_ate_size, - pcibr_soft->bs_int_ate_size, - num_entries ? num_entries-pcibr_soft->bs_int_ate_size : 0)); - } - - { - bridgereg_t dirmap; - iopaddr_t xbase; - - /* - * now figure the *real* xtalk base address - * that dirmap sends us to. - */ - dirmap = bridge->b_dir_map; - if (dirmap & BRIDGE_DIRMAP_OFF) - xbase = (iopaddr_t)(dirmap & BRIDGE_DIRMAP_OFF) - << BRIDGE_DIRMAP_OFF_ADDRSHFT; - else if (dirmap & BRIDGE_DIRMAP_ADD512) - xbase = 512 << 20; - else - xbase = 0; - - pcibr_soft->bs_dir_xbase = xbase; - - /* it is entirely possible that we may, at this - * point, have our dirmap pointing somewhere - * other than our "master" port. - */ - pcibr_soft->bs_dir_xport = - (dirmap & BRIDGE_DIRMAP_W_ID) >> BRIDGE_DIRMAP_W_ID_SHFT; - } - - /* pcibr sources an error interrupt; - * figure out where to send it. - * - * If any interrupts are enabled in bridge, - * then the prom set us up and our interrupt - * has already been reconnected in mlreset - * above. - * - * Need to set the D_INTR_ISERR flag - * in the dev_desc used for allocating the - * error interrupt, so our interrupt will - * be properly routed and prioritized. - * - * If our crosstalk provider wants to - * fix widget error interrupts to specific - * destinations, D_INTR_ISERR is how it - * knows to do this. - */ - - xtalk_intr = xtalk_intr_alloc(xconn_vhdl, (device_desc_t)0, pcibr_vhdl); - { - int irq = ((hub_intr_t)xtalk_intr)->i_bit; - int cpu = ((hub_intr_t)xtalk_intr)->i_cpuid; - - intr_unreserve_level(cpu, irq); - ((hub_intr_t)xtalk_intr)->i_bit = SGI_PCIBR_ERROR; - } - ASSERT(xtalk_intr != NULL); - - pcibr_soft->bsi_err_intr = xtalk_intr; - - /* - * On IP35 with XBridge, we do some extra checks in pcibr_setwidint - * in order to work around some addressing limitations. In order - * for that fire wall to work properly, we need to make sure we - * start from a known clean state. - */ - pcibr_clearwidint(bridge); - - xtalk_intr_connect(xtalk_intr, (intr_func_t) pcibr_error_intr_handler, - (intr_arg_t) pcibr_soft, (xtalk_intr_setfunc_t)pcibr_setwidint, (void *)bridge); - - request_irq(SGI_PCIBR_ERROR, (void *)pcibr_error_intr_handler, SA_SHIRQ, "PCIBR error", - (intr_arg_t) pcibr_soft); - - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_INTR_ALLOC, pcibr_vhdl, - "pcibr_setwidint: b_wid_int_upper=0x%x, b_wid_int_lower=0x%x\n", - bridge->b_wid_int_upper, bridge->b_wid_int_lower)); - - /* - * now we can start handling error interrupts; - * enable all of them. - * NOTE: some PCI ints may already be enabled. - */ - int_enable_64 = bridge->p_int_enable_64 | BRIDGE_ISR_ERRORS; - int_enable = (uint64_t)int_enable_64; - -#if BRIDGE_ERROR_INTR_WAR - if (pcibr_soft->bs_rev_num == BRIDGE_PART_REV_A) { - /* - * We commonly get master timeouts when talking to ql. - * We also see RESP_XTALK_ERROR and LLP_TX_RETRY interrupts. - * Insure that these are all disabled for now. - */ - int_enable &= ~(BRIDGE_IMR_PCI_MST_TIMEOUT | - BRIDGE_ISR_RESP_XTLK_ERR | - BRIDGE_ISR_LLP_TX_RETRY); - } - if (pcibr_soft->bs_rev_num < BRIDGE_PART_REV_C) { - int_enable &= ~BRIDGE_ISR_BAD_XRESP_PKT; - } -#endif /* BRIDGE_ERROR_INTR_WAR */ - -#ifdef QL_SCSI_CTRL_WAR /* for IP30 only */ - /* Really a QL rev A issue, but all newer hearts have newer QLs. - * Forces all IO6/MSCSI to be new. - */ - if (heart_rev() == HEART_REV_A) - int_enable &= ~BRIDGE_IMR_PCI_MST_TIMEOUT; -#endif - -#ifdef BRIDGE1_TIMEOUT_WAR - if (pcibr_soft->bs_rev_num == BRIDGE_PART_REV_A) { - /* - * Turn off these interrupts. They can't be trusted in bridge 1 - */ - int_enable &= ~(BRIDGE_IMR_XREAD_REQ_TIMEOUT | - BRIDGE_IMR_UNEXP_RESP); - } -#endif - - /* PIC BRINGUP WAR (PV# 856864 & 856865): allow the tnums that are - * locked out to be freed up sooner (by timing out) so that the - * read tnums are never completely used up. - */ - if (PCIBR_WAR_ENABLED(PV856864, pcibr_soft)) { - int_enable &= ~PIC_ISR_PCIX_REQ_TOUT; - int_enable &= ~BRIDGE_ISR_XREAD_REQ_TIMEOUT; - - bridge->b_wid_req_timeout = 0x750; - } - - /* - * PIC BRINGUP WAR (PV# 856866, 859504, 861476, 861478): Don't use - * RRB0, RRB8, RRB1, and RRB9. Assign them to DEVICE[2|3]--VCHAN3 - * so they are not used - */ - if (PCIBR_WAR_ENABLED(PV856866, pcibr_soft)) { - bridge->b_even_resp |= 0x000f000f; - bridge->b_odd_resp |= 0x000f000f; - } - - bridge->p_int_enable_64 = (picreg_t)int_enable; - bridge->b_int_mode = 0; /* do not send "clear interrupt" packets */ - - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ - - /* - * Depending on the rev of bridge, disable certain features. - * Easiest way seems to be to force the PCIBR_NOwhatever - * flag to be on for all DMA calls, which overrides any - * PCIBR_whatever flag or even the setting of whatever - * from the PCIIO_DMA_class flags (or even from the other - * PCIBR flags, since NO overrides YES). - */ - pcibr_soft->bs_dma_flags = 0; - - /* PREFETCH: - * Always completely disabled for REV.A; - * at "pcibr_prefetch_enable_rev", anyone - * asking for PCIIO_PREFETCH gets it. - * Between these two points, you have to ask - * for PCIBR_PREFETCH, which promises that - * your driver knows about known Bridge WARs. - */ - if (pcibr_soft->bs_rev_num < BRIDGE_PART_REV_B) - pcibr_soft->bs_dma_flags |= PCIBR_NOPREFETCH; - else if (pcibr_soft->bs_rev_num < - (BRIDGE_WIDGET_PART_NUM << 4)) - pcibr_soft->bs_dma_flags |= PCIIO_NOPREFETCH; - - /* WRITE_GATHER: Disabled */ - if (pcibr_soft->bs_rev_num < - (BRIDGE_WIDGET_PART_NUM << 4)) - pcibr_soft->bs_dma_flags |= PCIBR_NOWRITE_GATHER; - - /* PIC only supports 64-bit direct mapping in PCI-X mode. Since - * all PCI-X devices that initiate memory transactions must be - * capable of generating 64-bit addressed, we force 64-bit DMAs. - */ - if (IS_PCIX(pcibr_soft)) { - pcibr_soft->bs_dma_flags |= PCIIO_DMA_A64; - } - - { - - iopaddr_t prom_base_addr = pcibr_soft->bs_xid << 24; - int prom_base_size = 0x1000000; - int status; - struct resource *res; - - /* Allocate resource maps based on bus page size; for I/O and memory - * space, free all pages except those in the base area and in the - * range set by the PROM. - * - * PROM creates BAR addresses in this format: 0x0ws00000 where w is - * the widget number and s is the device register offset for the slot. - */ - - /* Setup the Bus's PCI IO Root Resource. */ - pcibr_soft->bs_io_win_root_resource.start = PCIBR_BUS_IO_BASE; - pcibr_soft->bs_io_win_root_resource.end = 0xffffffff; - res = (struct resource *) kmalloc( sizeof(struct resource), GFP_KERNEL); - if (!res) - panic("PCIBR:Unable to allocate resource structure\n"); - - /* Block off the range used by PROM. */ - res->start = prom_base_addr; - res->end = prom_base_addr + (prom_base_size - 1); - status = request_resource(&pcibr_soft->bs_io_win_root_resource, res); - if (status) - panic("PCIBR:Unable to request_resource()\n"); - - /* Setup the Small Window Root Resource */ - pcibr_soft->bs_swin_root_resource.start = PAGE_SIZE; - pcibr_soft->bs_swin_root_resource.end = 0x000FFFFF; - - /* Setup the Bus's PCI Memory Root Resource */ - pcibr_soft->bs_mem_win_root_resource.start = 0x200000; - pcibr_soft->bs_mem_win_root_resource.end = 0xffffffff; - res = (struct resource *) kmalloc( sizeof(struct resource), GFP_KERNEL); - if (!res) - panic("PCIBR:Unable to allocate resource structure\n"); - - /* Block off the range used by PROM. */ - res->start = prom_base_addr; - res->end = prom_base_addr + (prom_base_size - 1);; - status = request_resource(&pcibr_soft->bs_mem_win_root_resource, res); - if (status) - panic("PCIBR:Unable to request_resource()\n"); - - } - - /* build "no-slot" connection point - */ - pcibr_info = pcibr_device_info_new - (pcibr_soft, PCIIO_SLOT_NONE, PCIIO_FUNC_NONE, - PCIIO_VENDOR_ID_NONE, PCIIO_DEVICE_ID_NONE); - noslot_conn = pciio_device_info_register - (pcibr_vhdl, &pcibr_info->f_c); - - /* Remember the no slot connection point info for tearing it - * down during detach. - */ - pcibr_soft->bs_noslot_conn = noslot_conn; - pcibr_soft->bs_noslot_info = pcibr_info; -#if PCI_FBBE - fast_back_to_back_enable = 1; -#endif - -#if PCI_FBBE - if (fast_back_to_back_enable) { - /* - * All devices on the bus are capable of fast back to back, so - * we need to set the fast back to back bit in all devices on - * the bus that are capable of doing such accesses. - */ - } -#endif - - for (slot = pcibr_soft->bs_min_slot; - slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { - /* Find out what is out there */ - (void)pcibr_slot_info_init(pcibr_vhdl,slot); - } - for (slot = pcibr_soft->bs_min_slot; - slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) - /* Set up the address space for this slot in the PCI land */ - (void)pcibr_slot_addr_space_init(pcibr_vhdl, slot); - - for (slot = pcibr_soft->bs_min_slot; - slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) - /* Setup the device register */ - (void)pcibr_slot_device_init(pcibr_vhdl, slot); - - if (IS_PCIX(pcibr_soft)) { - pcibr_soft->bs_pcix_rbar_inuse = 0; - pcibr_soft->bs_pcix_rbar_avail = NUM_RBAR; - pcibr_soft->bs_pcix_rbar_percent_allowed = - pcibr_pcix_rbars_calc(pcibr_soft); - - for (slot = pcibr_soft->bs_min_slot; - slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) - /* Setup the PCI-X Read Buffer Attribute Registers (RBARs) */ - (void)pcibr_slot_pcix_rbar_init(pcibr_soft, slot); - } - - /* Set up convenience links */ - pcibr_bus_cnvlink(pcibr_soft->bs_vhdl); - - for (slot = pcibr_soft->bs_min_slot; - slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) - /* Setup host/guest relations */ - (void)pcibr_slot_guest_info_init(pcibr_vhdl, slot); - - /* Handle initial RRB management for Bridge and Xbridge */ - pcibr_initial_rrb(pcibr_vhdl, - pcibr_soft->bs_first_slot, pcibr_soft->bs_last_slot); - -{ /* Before any drivers get called that may want to re-allocate - * RRB's, let's get some special cases pre-allocated. Drivers - * may override these pre-allocations, but by doing pre-allocations - * now we're assured not to step all over what the driver intended. - * - * Note: Someday this should probably be moved over to pcibr_rrb.c - */ - /* - * Each Pbrick PCI bus only has slots 1 and 2. Similarly for - * widget 0xe on Ibricks. Allocate RRB's accordingly. - */ - if (pcibr_soft->bs_bricktype > 0) { - switch (pcibr_soft->bs_bricktype) { - case MODULE_PBRICK: - do_pcibr_rrb_autoalloc(pcibr_soft, 1, VCHAN0, 8); - do_pcibr_rrb_autoalloc(pcibr_soft, 2, VCHAN0, 8); - break; - case MODULE_IBRICK: - /* port 0xe on the Ibrick only has slots 1 and 2 */ - if (pcibr_soft->bs_xid == 0xe) { - do_pcibr_rrb_autoalloc(pcibr_soft, 1, VCHAN0, 8); - do_pcibr_rrb_autoalloc(pcibr_soft, 2, VCHAN0, 8); - } - else { - /* allocate one RRB for the serial port */ - do_pcibr_rrb_autoalloc(pcibr_soft, 0, VCHAN0, 1); - } - break; - case MODULE_PXBRICK: - case MODULE_IXBRICK: - /* - * If the IO9 is in the PXBrick (bus1, slot1) allocate - * RRBs to all the devices - */ - if ((pcibr_widget_to_bus(pcibr_vhdl) == 1) && - (pcibr_soft->bs_slot[0].bss_vendor_id == 0x10A9) && - (pcibr_soft->bs_slot[0].bss_device_id == 0x100A)) { - do_pcibr_rrb_autoalloc(pcibr_soft, 0, VCHAN0, 4); - do_pcibr_rrb_autoalloc(pcibr_soft, 1, VCHAN0, 4); - do_pcibr_rrb_autoalloc(pcibr_soft, 2, VCHAN0, 4); - do_pcibr_rrb_autoalloc(pcibr_soft, 3, VCHAN0, 4); - } else { - do_pcibr_rrb_autoalloc(pcibr_soft, 0, VCHAN0, 8); - do_pcibr_rrb_autoalloc(pcibr_soft, 1, VCHAN0, 8); - } - break; - } /* switch */ - } - -#ifdef LATER - if (strstr(nicinfo, XTALK_PCI_PART_NUM)) { - do_pcibr_rrb_autoalloc(pcibr_soft, 1, VCHAN0, 8); - } -#endif -} /* OK Special RRB allocations are done. */ - - for (slot = pcibr_soft->bs_min_slot; - slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) - /* Call the device attach */ - (void)pcibr_slot_call_device_attach(pcibr_vhdl, slot, 0); - - pciio_device_attach(noslot_conn, (int)0); - - return 0; -} - /* * pcibr_detach: * Detach the bridge device from the hwgraph after cleaning out all the @@ -1777,25 +687,22 @@ int pcibr_detach(vertex_hdl_t xconn) { - pciio_slot_t slot; - vertex_hdl_t pcibr_vhdl; - pcibr_soft_t pcibr_soft; - bridge_t *bridge; - unsigned s; + pciio_slot_t slot; + vertex_hdl_t pcibr_vhdl; + pcibr_soft_t pcibr_soft; + unsigned long s; PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_DETACH, xconn, "pcibr_detach\n")); /* Get the bridge vertex from its xtalk connection point */ if (hwgraph_traverse(xconn, EDGE_LBL_PCI, &pcibr_vhdl) != GRAPH_SUCCESS) - return(1); + return 1; pcibr_soft = pcibr_soft_get(pcibr_vhdl); - bridge = pcibr_soft->bs_base; - - s = pcibr_lock(pcibr_soft); /* Disable the interrupts from the bridge */ - bridge->p_int_enable_64 = 0; + s = pcibr_lock(pcibr_soft); + pcireg_intr_enable_set(pcibr_soft, 0); pcibr_unlock(pcibr_soft, s); /* Detach all the PCI devices talking to this bridge */ @@ -1823,26 +730,64 @@ /* Remove the Bridge revision labelled info */ (void)hwgraph_info_remove_LBL(pcibr_vhdl, INFO_LBL_PCIBR_ASIC_REV, NULL); - /* Remove the character device associated with this bridge */ - hwgraph_edge_remove(pcibr_vhdl, EDGE_LBL_CONTROLLER, NULL); - /* Remove the PCI bridge vertex */ - hwgraph_edge_remove(xconn, EDGE_LBL_PCI, NULL); - return(0); + return 0; +} + + +/* + * Set the Bridge's 32-bit PCI to XTalk Direct Map register to the most useful + * value we can determine. Note that we must use a single xid for all of: + * -direct-mapped 32-bit DMA accesses + * -direct-mapped 64-bit DMA accesses + * -DMA accesses through the PMU + * -interrupts + * This is the only way to guarantee that completion interrupts will reach a + * CPU after all DMA data has reached memory. + */ +void +pcibr_directmap_init(pcibr_soft_t pcibr_soft) +{ + paddr_t paddr; + iopaddr_t xbase; + uint64_t diroff; + cnodeid_t cnodeid = 0; /* We need api for diroff api */ + nasid_t nasid; + + nasid = COMPACT_TO_NASID_NODEID(cnodeid); + paddr = NODE_OFFSET(nasid) + 0; + + /* Assume that if we ask for a DMA mapping to zero the XIO host will + * transmute this into a request for the lowest hunk of memory. + */ + xbase = xtalk_dmatrans_addr(pcibr_soft->bs_conn, 0, paddr, PAGE_SIZE, 0); + + diroff = xbase >> BRIDGE_DIRMAP_OFF_ADDRSHFT; + pcireg_dirmap_diroff_set(pcibr_soft, diroff); + pcireg_dirmap_wid_set(pcibr_soft, pcibr_soft->bs_mxid); + pcibr_soft->bs_dir_xport = pcibr_soft->bs_mxid; + if (xbase == (512 << 20)) { /* 512Meg */ + pcireg_dirmap_add512_set(pcibr_soft); + pcibr_soft->bs_dir_xbase = (512 << 20); + } else { + pcireg_dirmap_add512_clr(pcibr_soft); + pcibr_soft->bs_dir_xbase = diroff << BRIDGE_DIRMAP_OFF_ADDRSHFT; + } } + int pcibr_asic_rev(vertex_hdl_t pconn_vhdl) { - vertex_hdl_t pcibr_vhdl; - int tmp_vhdl; + vertex_hdl_t pcibr_vhdl; + int rc; arbitrary_info_t ainfo; if (GRAPH_SUCCESS != hwgraph_traverse(pconn_vhdl, EDGE_LBL_MASTER, &pcibr_vhdl)) return -1; - tmp_vhdl = hwgraph_info_get_LBL(pcibr_vhdl, INFO_LBL_PCIBR_ASIC_REV, &ainfo); + rc = hwgraph_info_get_LBL(pcibr_vhdl, INFO_LBL_PCIBR_ASIC_REV, &ainfo); /* * Any hwgraph function that returns a vertex handle will implicity @@ -1855,20 +800,10 @@ */ hwgraph_vertex_unref(pcibr_vhdl); - if (tmp_vhdl != GRAPH_SUCCESS) + if (rc != GRAPH_SUCCESS) return -1; - return (int) ainfo; -} -int -pcibr_write_gather_flush(vertex_hdl_t pconn_vhdl) -{ - pciio_info_t pciio_info = pciio_info_get(pconn_vhdl); - pcibr_soft_t pcibr_soft = (pcibr_soft_t) pciio_info_mfast_get(pciio_info); - pciio_slot_t slot; - slot = PCIBR_INFO_SLOT_GET_INT(pciio_info); - pcibr_device_write_gather_flush(pcibr_soft, slot); - return 0; + return (int) ainfo; } /* ===================================================================== @@ -1884,14 +819,12 @@ unsigned flags) { pcibr_info_t pcibr_info = pcibr_info_get(pconn_vhdl); - pciio_info_t pciio_info = &pcibr_info->f_c; + pciio_info_t pciio_info = pciio_info_get(pconn_vhdl); pcibr_soft_t pcibr_soft = (pcibr_soft_t) pciio_info_mfast_get(pciio_info); - bridge_t *bridge = pcibr_soft->bs_base; - unsigned bar; /* which BASE reg on device is decoding */ iopaddr_t xio_addr = XIO_NOWHERE; - iopaddr_t base; /* base of devio(x) mapped area on PCI */ - iopaddr_t limit; /* base of devio(x) mapped area on PCI */ + iopaddr_t base = 0; + iopaddr_t limit = 0; pciio_space_t wspace; /* which space device is decoding */ iopaddr_t wbase; /* base of device decode on PCI */ @@ -2012,7 +945,7 @@ maxtry = PCIBR_NUM_SLOTS(pcibr_soft) * 2; halftry = PCIBR_NUM_SLOTS(pcibr_soft) - 1; for (try = 0; try < maxtry; ++try) { - bridgereg_t devreg; + uint64_t devreg; unsigned offset; /* calculate win based on slot, attempt, and max possible @@ -2080,14 +1013,13 @@ devreg &= ~BRIDGE_DEV_DEV_SWAP; if (pcibr_soft->bs_slot[win].bss_device != devreg) { - bridge->b_device[win].reg = devreg; + pcireg_device_set(pcibr_soft, win, devreg); pcibr_soft->bs_slot[win].bss_device = devreg; - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ -#ifdef PCI_LATER + pcireg_tflush_get(pcibr_soft); + PCIBR_DEBUG((PCIBR_DEBUG_DEVREG, pconn_vhdl, "pcibr_addr_pci_to_xio: Device(%d): 0x%x\n", win, devreg)); -#endif } pcibr_soft->bs_slot[win].bss_devio.bssd_space = space; pcibr_soft->bs_slot[win].bss_devio.bssd_base = mbase; @@ -2200,7 +1132,7 @@ if (xio_addr != XIO_NOWHERE) { unsigned bst; /* nonzero to set bytestream */ unsigned *bfp; /* addr of record of how swapper is set */ - unsigned swb; /* which control bit to mung */ + uint64_t swb; /* which control bit to mung */ unsigned bfo; /* current swapper setting */ unsigned bfn; /* desired swapper setting */ @@ -2226,13 +1158,13 @@ bfn & PCIIO_WORD_VALUES ? " WORD_VALUES" : "")); xio_addr = XIO_NOWHERE; } else { /* OK to make the change. */ - picreg_t octl, nctl; - swb = (space == PCIIO_SPACE_IO) ? BRIDGE_CTRL_IO_SWAP : BRIDGE_CTRL_MEM_SWAP; - octl = bridge->p_wid_control_64; - nctl = bst ? octl | (uint64_t)swb : octl & ((uint64_t)~swb); + swb = (space == PCIIO_SPACE_IO) ? 0: BRIDGE_CTRL_MEM_SWAP; + if (bst) { + pcireg_control_bit_set(pcibr_soft, swb); + } else { + pcireg_control_bit_clr(pcibr_soft, swb); + } - if (octl != nctl) /* make the change if any */ - bridge->b_wid_control = nctl; *bfp = bfn; /* record the assignment */ PCIBR_DEBUG((PCIBR_DEBUG_PIOMAP, pconn_vhdl, @@ -2324,7 +1256,7 @@ pcibr_piomap->bp_pciaddr = pci_addr; pcibr_piomap->bp_mapsz = req_size; pcibr_piomap->bp_soft = pcibr_soft; - pcibr_piomap->bp_toc[0] = ATOMIC_INIT(0); + pcibr_piomap->bp_toc = ATOMIC_INIT(0); if (mapptr) { s = pcibr_lock(pcibr_soft); @@ -2383,7 +1315,7 @@ "pcibr_piomap_addr: map=0x%lx, addr=0x%lx\n", pcibr_piomap, addr)); - return(addr); + return addr; } /*ARGSUSED */ @@ -2424,7 +1356,7 @@ PCIBR_DEBUG((PCIBR_DEBUG_PIODIR, pconn_vhdl, "pcibr_piotrans_addr: xio_addr=0x%lx, addr=0x%lx\n", xio_addr, addr)); - return(addr); + return addr; } /* @@ -2546,6 +1478,7 @@ return start_addr; } +#define ERR_MSG "!Device %s freeing size (0x%lx) different than allocated (0x%lx)" /*ARGSUSED */ void pcibr_piospace_free(vertex_hdl_t pconn_vhdl, @@ -2689,7 +1622,7 @@ attributes &= (PCI64_ATTR_BAR | PCI64_ATTR_SWAP); } - return (attributes); + return attributes; } /*ARGSUSED */ @@ -2775,7 +1708,7 @@ else min_rrbs = 1; if (have_rrbs < min_rrbs) - do_pcibr_rrb_autoalloc(pcibr_soft, slot, vchan, + pcibr_rrb_alloc_more(pcibr_soft, slot, vchan, min_rrbs - have_rrbs); } } @@ -2845,7 +1778,7 @@ - 1) + 1; /* round UP */ } - ate_index = pcibr_ate_alloc(pcibr_soft, ate_count); + ate_index = pcibr_ate_alloc(pcibr_soft, ate_count, &pcibr_dmamap->resource); if (ate_index != -1) { if (!pcibr_try_set_device(pcibr_soft, slot, flags, BRIDGE_DEV_PMU_BITS)) { @@ -2857,7 +1790,7 @@ "pcibr_dmamap_alloc: using PMU, ate_index=%d, " "pcibr_dmamap=0x%lx\n", ate_index, pcibr_dmamap)); - ate_proto = pcibr_flags_to_ate(flags); + ate_proto = pcibr_flags_to_ate(pcibr_soft, flags); pcibr_dmamap->bd_flags = flags; pcibr_dmamap->bd_pci_addr = @@ -2890,7 +1823,7 @@ else min_rrbs = 1; if (have_rrbs < min_rrbs) - do_pcibr_rrb_autoalloc(pcibr_soft, slot, vchan, + pcibr_rrb_alloc_more(pcibr_soft, slot, vchan, min_rrbs - have_rrbs); } } @@ -2900,7 +1833,7 @@ "pcibr_dmamap_alloc: PMU use failed, ate_index=%d\n", ate_index)); - pcibr_ate_free(pcibr_soft, ate_index, ate_count); + pcibr_ate_free(pcibr_soft, ate_index, ate_count, &pcibr_dmamap->resource); } /* total failure: sorry, you just can't * get from here to there that way. @@ -2920,16 +1853,6 @@ pciio_slot_t slot = PCIBR_SLOT_TO_DEVICE(pcibr_soft, pcibr_dmamap->bd_slot); - unsigned flags = pcibr_dmamap->bd_flags; - - /* Make sure that bss_ext_ates_active - * is properly kept up to date. - */ - - if (PCIBR_DMAMAP_BUSY & flags) - if (PCIBR_DMAMAP_SSRAM & flags) - atomic_dec(&(pcibr_soft->bs_slot[slot]. bss_ext_ates_active)); - xtalk_dmamap_free(pcibr_dmamap->bd_xtalk); if (pcibr_dmamap->bd_flags & PCIIO_DMA_A64) { @@ -2938,8 +1861,9 @@ if (pcibr_dmamap->bd_ate_count) { pcibr_ate_free(pcibr_dmamap->bd_soft, pcibr_dmamap->bd_ate_index, - pcibr_dmamap->bd_ate_count); - pcibr_release_device(pcibr_soft, slot, BRIDGE_DEV_PMU_BITS); + pcibr_dmamap->bd_ate_count, + &pcibr_dmamap->resource); + pcibr_release_device(pcibr_soft, slot, XBRIDGE_DEV_PMU_BITS); } PCIBR_DEBUG((PCIBR_DEBUG_DMAMAP, pcibr_dmamap->bd_dev, @@ -2992,7 +1916,7 @@ for (slot = soft->bs_min_slot; slot < PCIBR_NUM_SLOTS(soft); ++slot) if ((xio_addr >= PCIBR_BRIDGE_DEVIO(soft, slot)) && (xio_lim < PCIBR_BRIDGE_DEVIO(soft, slot + 1))) { - bridgereg_t dev; + uint64_t dev; dev = soft->bs_slot[slot].bss_device; pci_addr = dev & BRIDGE_DEV_OFF_MASK; @@ -3091,33 +2015,14 @@ paddr, paddr + req_size - 1, xio_port, xio_addr, pci_addr)); } else { - bridge_t *bridge = pcibr_soft->bs_base; iopaddr_t offset = IOPGOFF(xio_addr); bridge_ate_t ate_proto = pcibr_dmamap->bd_ate_proto; int ate_count = IOPG(offset + req_size - 1) + 1; - int ate_index = pcibr_dmamap->bd_ate_index; - unsigned cmd_regs[8]; - unsigned s; - -#if PCIBR_FREEZE_TIME - int ate_total = ate_count; - unsigned freeze_time; -#endif - bridge_ate_p ate_ptr = pcibr_dmamap->bd_ate_ptr; bridge_ate_t ate; - /* Bridge Hardware WAR #482836: - * If the transfer is not cache aligned - * and the Bridge Rev is <= B, force - * prefetch to be off. - */ - if (flags & PCIBR_NOPREFETCH) - ate_proto &= ~ATE_PREF; - - ate = ate_proto - | (xio_port << ATE_TIDSHIFT) - | (xio_addr - offset); + ate = ate_proto | (xio_addr - offset); + ate |= (xio_port << ATE_TIDSHIFT); pci_addr = pcibr_dmamap->bd_pci_addr + offset; @@ -3128,10 +2033,8 @@ ASSERT(ate_count > 0); if (ate_count <= pcibr_dmamap->bd_ate_count) { - ATE_FREEZE(); - ATE_WRITE(); - ATE_THAW(); - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ + ate_write(pcibr_soft, ate_index, ate_count, ate); + PCIBR_DEBUG((PCIBR_DEBUG_DMAMAP, pcibr_dmamap->bd_dev, "pcibr_dmamap_addr (PMU) : wanted paddr " "[0x%lx..0x%lx] returning PCI 0x%lx\n", @@ -3163,19 +2066,6 @@ void pcibr_dmamap_done(pcibr_dmamap_t pcibr_dmamap) { - /* - * We could go through and invalidate ATEs here; - * for performance reasons, we don't. - * We also don't enforce the strict alternation - * between _addr/_list and _done, but Hub does. - */ - - if (pcibr_dmamap->bd_flags & PCIBR_DMAMAP_BUSY) { - pcibr_dmamap->bd_flags &= ~PCIBR_DMAMAP_BUSY; - - if (pcibr_dmamap->bd_flags & PCIBR_DMAMAP_SSRAM) - atomic_dec(&(pcibr_dmamap->bd_soft->bs_slot[pcibr_dmamap->bd_slot]. bss_ext_ates_active)); - } xtalk_dmamap_done(pcibr_dmamap->bd_xtalk); PCIBR_DEBUG((PCIBR_DEBUG_DMAMAP, pcibr_dmamap->bd_dev, @@ -3198,7 +2088,7 @@ pciio_info_t pciio_info = pciio_info_get(pconn_vhdl); pcibr_soft_t pcibr_soft = (pcibr_soft_t) pciio_info_mfast_get(pciio_info); - return(NASID_TO_COMPACT_NODEID(NASID_GET(pcibr_soft->bs_dir_xbase))); + return NASID_TO_COMPACT_NODEID(NASID_GET(pcibr_soft->bs_dir_xbase)); } /*ARGSUSED */ @@ -3281,17 +2171,13 @@ if ((pci_addr != PCIBR_D64_BASE_UNSET) && (flags == slotp->bss_d64_flags)) { - pci_addr |= xio_addr - | ((uint64_t) xio_port << PCI64_ATTR_TARG_SHFT); - -#if HWG_PERF_CHECK - if (xio_addr != 0x20000000) -#endif - PCIBR_DEBUG((PCIBR_DEBUG_DMADIR, pconn_vhdl, - "pcibr_dmatrans_addr: wanted paddr [0x%x..0x%x], " - "xio_port=0x%x, direct64: pci_addr=0x%x\n", - paddr, paddr + req_size - 1, xio_addr, pci_addr)); - return (pci_addr); + pci_addr |= xio_addr | + ((uint64_t) xio_port << PCI64_ATTR_TARG_SHFT); + PCIBR_DEBUG((PCIBR_DEBUG_DMADIR, pconn_vhdl, + "pcibr_dmatrans_addr: wanted paddr [0x%lx..0x%lx], " + "xio_port=0x%x, direct64: pci_addr=0x%lx\n", + paddr, paddr + req_size - 1, xio_addr, pci_addr)); + return pci_addr; } if (!pcibr_try_set_device(pcibr_soft, pciio_slot, flags, BRIDGE_DEV_D64_BITS)) { pci_addr = pcibr_flags_to_d64(flags, pcibr_soft); @@ -3313,7 +2199,7 @@ else min_rrbs = 1; if (have_rrbs < min_rrbs) - do_pcibr_rrb_autoalloc(pcibr_soft, pciio_slot, vchan, + pcibr_rrb_alloc_more(pcibr_soft, pciio_slot, vchan, min_rrbs - have_rrbs); } } @@ -3322,7 +2208,7 @@ "xio_port=0x%x, direct64: pci_addr=0x%lx, " "new flags: 0x%x\n", paddr, paddr + req_size - 1, xio_addr, pci_addr, (uint64_t) flags)); - return (pci_addr); + return pci_addr; } PCIBR_DEBUG((PCIBR_DEBUG_DMADIR, pconn_vhdl, @@ -3375,7 +2261,7 @@ " xio_port=0x%x, direct32: pci_addr=0x%lx\n", paddr, paddr + req_size - 1, xio_addr, pci_addr)); - return (pci_addr); + return pci_addr; } if (!pcibr_try_set_device(pcibr_soft, pciio_slot, flags, BRIDGE_DEV_D32_BITS)) { @@ -3394,7 +2280,7 @@ else min_rrbs = 1; if (have_rrbs < min_rrbs) - do_pcibr_rrb_autoalloc(pcibr_soft, pciio_slot, + pcibr_rrb_alloc_more(pcibr_soft, pciio_slot, vchan, min_rrbs - have_rrbs); } } @@ -3404,7 +2290,7 @@ "new flags: 0x%x\n", paddr, paddr + req_size - 1, xio_addr, pci_addr, (uint64_t) flags)); - return (pci_addr); + return pci_addr; } /* our flags conflict with Device(x). */ @@ -3461,7 +2347,7 @@ iopaddr_t pcibr_dmamap_pciaddr_get(pcibr_dmamap_t pcibr_dmamap) { - return (pcibr_dmamap->bd_pci_addr); + return pcibr_dmamap->bd_pci_addr; } /* ===================================================================== @@ -3494,8 +2380,8 @@ pciio_info_t pciio_info = pciio_info_get(pconn_vhdl); pciio_slot_t pciio_slot = PCIBR_INFO_SLOT_GET_INT(pciio_info); pcibr_soft_t pcibr_soft = (pcibr_soft_t) pciio_info_mfast_get(pciio_info); - bridgereg_t devreg; - unsigned long s; + uint64_t devreg; + unsigned long s; /* * Bridge supports hardware swapping; so we can always @@ -3514,102 +2400,17 @@ * have to change the logic here. */ if (pcibr_soft->bs_slot[pciio_slot].bss_device != devreg) { - bridge_t *bridge = pcibr_soft->bs_base; - - bridge->b_device[pciio_slot].reg = devreg; - pcibr_soft->bs_slot[pciio_slot].bss_device = devreg; - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ - } - pcibr_unlock(pcibr_soft, s); - - printk("pcibr_endian_set: Device(%d): %x\n", pciio_slot, devreg); - return desired_end; -} - -/* This (re)sets the GBR and REALTIME bits and also keeps track of how - * many sets are outstanding. Reset succeeds only if the number of outstanding - * sets == 1. - */ -int -pcibr_priority_bits_set(pcibr_soft_t pcibr_soft, - pciio_slot_t pciio_slot, - pciio_priority_t device_prio) -{ - unsigned long s; - int *counter; - bridgereg_t rtbits = 0; - bridgereg_t devreg; - int rc = PRIO_SUCCESS; - - /* in dual-slot configurations, the host and the - * guest have separate DMA resources, so they - * have separate requirements for priority bits. - */ - - counter = &(pcibr_soft->bs_slot[pciio_slot].bss_pri_uctr); - - /* - * Bridge supports PCI notions of LOW and HIGH priority - * arbitration rings via a "REAL_TIME" bit in the per-device - * Bridge register. The "GBR" bit controls access to the GBR - * ring on the xbow. These two bits are (re)set together. - * - * XXX- Bug in Rev B Bridge Si: - * Symptom: Prefetcher starts operating incorrectly. This happens - * due to corruption of the address storage ram in the prefetcher - * when a non-real time PCI request is pulled and a real-time one is - * put in it's place. Workaround: Use only a single arbitration ring - * on PCI bus. GBR and RR can still be uniquely used per - * device. NETLIST MERGE DONE, WILL BE FIXED IN REV C. - */ - - if (pcibr_soft->bs_rev_num != BRIDGE_PART_REV_B) - rtbits |= BRIDGE_DEV_RT; - - /* NOTE- if we ever put DEV_RT or DEV_GBR on - * the disabled list, we will have to take - * it into account here. - */ - - s = pcibr_lock(pcibr_soft); - devreg = pcibr_soft->bs_slot[pciio_slot].bss_device; - if (device_prio == PCI_PRIO_HIGH) { - if ((++*counter == 1)) { - if (rtbits) - devreg |= rtbits; - else - rc = PRIO_FAIL; - } - } else if (device_prio == PCI_PRIO_LOW) { - if (*counter <= 0) - rc = PRIO_FAIL; - else if (--*counter == 0) - if (rtbits) - devreg &= ~rtbits; - } - if (pcibr_soft->bs_slot[pciio_slot].bss_device != devreg) { - bridge_t *bridge = pcibr_soft->bs_base; - - bridge->b_device[pciio_slot].reg = devreg; + pcireg_device_set(pcibr_soft, pciio_slot, devreg); pcibr_soft->bs_slot[pciio_slot].bss_device = devreg; - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ + pcireg_tflush_get(pcibr_soft); } pcibr_unlock(pcibr_soft, s); - return rc; -} - -pciio_priority_t -pcibr_priority_set(vertex_hdl_t pconn_vhdl, - pciio_priority_t device_prio) -{ - pciio_info_t pciio_info = pciio_info_get(pconn_vhdl); - pciio_slot_t pciio_slot = PCIBR_INFO_SLOT_GET_INT(pciio_info); - pcibr_soft_t pcibr_soft = (pcibr_soft_t) pciio_info_mfast_get(pciio_info); - - (void) pcibr_priority_bits_set(pcibr_soft, pciio_slot, device_prio); + PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_DEVREG, pconn_vhdl, + "pcibr_endian_set: Device(%d): 0x%x\n", + pciio_slot, devreg)); - return device_prio; + return desired_end; } /* @@ -3630,8 +2431,8 @@ pciio_info_t pciio_info = pciio_info_get(pconn_vhdl); pciio_slot_t pciio_slot = PCIBR_INFO_SLOT_GET_INT(pciio_info); pcibr_soft_t pcibr_soft = (pcibr_soft_t) pciio_info_mfast_get(pciio_info); - bridgereg_t set = 0; - bridgereg_t clr = 0; + uint64_t set = 0; + uint64_t clr = 0; ASSERT((flags & PCIBR_DEVICE_FLAGS) == flags); @@ -3640,11 +2441,6 @@ if (flags & PCIBR_NOWRITE_GATHER) clr |= BRIDGE_DEV_PMU_WRGA_EN; - if (flags & PCIBR_WRITE_GATHER) - set |= BRIDGE_DEV_DIR_WRGA_EN; - if (flags & PCIBR_NOWRITE_GATHER) - clr |= BRIDGE_DEV_DIR_WRGA_EN; - if (flags & PCIBR_PREFETCH) set |= BRIDGE_DEV_PREF; if (flags & PCIBR_NOPREFETCH) @@ -3665,19 +2461,22 @@ if (flags & PCIBR_NO64BIT) clr |= BRIDGE_DEV_DEV_SIZE; + /* PIC BRINGUP WAR (PV# 878674): Don't allow 64bit PIO accesses */ + if ((flags & PCIBR_64BIT) && PCIBR_WAR_ENABLED(PV878674, pcibr_soft)) { + set &= ~BRIDGE_DEV_DEV_SIZE; + } + if (set || clr) { - bridgereg_t devreg; - unsigned long s; + uint64_t devreg; + unsigned long s; s = pcibr_lock(pcibr_soft); devreg = pcibr_soft->bs_slot[pciio_slot].bss_device; devreg = (devreg & ~clr) | set; if (pcibr_soft->bs_slot[pciio_slot].bss_device != devreg) { - bridge_t *bridge = pcibr_soft->bs_base; - - bridge->b_device[pciio_slot].reg = devreg; + pcireg_device_set(pcibr_soft, pciio_slot, devreg); pcibr_soft->bs_slot[pciio_slot].bss_device = devreg; - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ + pcireg_tflush_get(pcibr_soft); } pcibr_unlock(pcibr_soft, s); @@ -3685,7 +2484,7 @@ "pcibr_device_flags_set: Device(%d): 0x%x\n", pciio_slot, devreg)); } - return (1); + return 1; } /* @@ -3711,7 +2510,7 @@ printk(KERN_WARNING "%lx: Must oversubscribe Read Buffer Attribute Registers" "(RBAR). Bus has %d RBARs but %d funcs need them.\n", - (unsigned long)pcibr_soft->bs_vhdl, NUM_RBAR, pcibr_soft->bs_pcix_num_funcs); + pcibr_soft->bs_name, NUM_RBAR, pcibr_soft->bs_pcix_num_funcs); percent_allowed = 0; } else { percent_allowed = (((NUM_RBAR-pcibr_soft->bs_pcix_num_funcs)*100) / @@ -3728,51 +2527,12 @@ percent_allowed=(percent_allowed > 100) ? 100 : percent_allowed+1; } } else { - return(ENODEV); + return -ENODEV; } - return(percent_allowed); + return percent_allowed; } -pciio_provider_t pcibr_provider = -{ - (pciio_piomap_alloc_f *) pcibr_piomap_alloc, - (pciio_piomap_free_f *) pcibr_piomap_free, - (pciio_piomap_addr_f *) pcibr_piomap_addr, - (pciio_piomap_done_f *) pcibr_piomap_done, - (pciio_piotrans_addr_f *) pcibr_piotrans_addr, - (pciio_piospace_alloc_f *) pcibr_piospace_alloc, - (pciio_piospace_free_f *) pcibr_piospace_free, - - (pciio_dmamap_alloc_f *) pcibr_dmamap_alloc, - (pciio_dmamap_free_f *) pcibr_dmamap_free, - (pciio_dmamap_addr_f *) pcibr_dmamap_addr, - (pciio_dmamap_done_f *) pcibr_dmamap_done, - (pciio_dmatrans_addr_f *) pcibr_dmatrans_addr, - (pciio_dmamap_drain_f *) pcibr_dmamap_drain, - (pciio_dmaaddr_drain_f *) pcibr_dmaaddr_drain, - (pciio_dmalist_drain_f *) pcibr_dmalist_drain, - - (pciio_intr_alloc_f *) pcibr_intr_alloc, - (pciio_intr_free_f *) pcibr_intr_free, - (pciio_intr_connect_f *) pcibr_intr_connect, - (pciio_intr_disconnect_f *) pcibr_intr_disconnect, - (pciio_intr_cpu_get_f *) pcibr_intr_cpu_get, - - (pciio_provider_startup_f *) pcibr_provider_startup, - (pciio_provider_shutdown_f *) pcibr_provider_shutdown, - (pciio_reset_f *) pcibr_reset, - (pciio_write_gather_flush_f *) pcibr_write_gather_flush, - (pciio_endian_set_f *) pcibr_endian_set, - (pciio_priority_set_f *) pcibr_priority_set, - (pciio_config_get_f *) pcibr_config_get, - (pciio_config_set_f *) pcibr_config_set, - (pciio_error_extract_f *) 0, - (pciio_driver_reg_callback_f *) 0, - (pciio_driver_unreg_callback_f *) 0, - (pciio_device_unregister_f *) pcibr_device_unregister, -}; - /* * pcibr_debug() is used to print pcibr debug messages to the console. A * user enables tracing by setting the following global variables: @@ -3794,6 +2554,7 @@ { char hwpath[MAXDEVNAME] = "\0"; char copy_of_hwpath[MAXDEVNAME]; + char *buffer; char *module = "all"; short widget = -1; short slot = -1; @@ -3836,38 +2597,59 @@ (!strcmp(module, pcibr_debug_module) && (widget == pcibr_debug_widget) && (slot == pcibr_debug_slot))) { -#ifdef LATER - printk("PCIBR_DEBUG<%d>\t: %s :", cpuid(), hwpath); -#else - printk("PCIBR_DEBUG\t: %s :", hwpath); -#endif - /* - * Kernel printk translates to this 3 line sequence. - * Since we have a variable length argument list, we - * need to call printk this way rather than directly - */ - { - char buffer[500]; + buffer = kmalloc(1024, GFP_KERNEL); + if (buffer) { + printk("PCIBR_DEBUG<%d>\t: %s :", smp_processor_id(), hwpath); + /* + * KERN_MSG translates to this 3 line sequence. Since + * we have a variable length argument list, we need to + * call KERN_MSG this way rather than directly + */ va_start(ap, format); - vsnprintf(buffer, 500, format, ap); + memset(buffer, 0, 1024); + vsnprintf(buffer, 1024, format, ap); va_end(ap); - buffer[499] = (char)0; /* just to be safe */ - printk("%s", buffer); + printk("", "%s", buffer); + kfree(buffer); } } } } +/* + * given a xconn_vhdl and a bus number under that widget, return a + * bridge_t pointer. + */ +void * +pcibr_bridge_ptr_get(vertex_hdl_t widget_vhdl, int bus_num) +{ + void *bridge; + + bridge = (void *)xtalk_piotrans_addr(widget_vhdl, 0, 0, + sizeof(bridge), 0); + + /* PIC ASIC has two bridges (ie. two buses) under a single widget */ + if (bus_num == 1) { + bridge = (void *)((char *)bridge + PIC_BUS1_OFFSET); + } + return bridge; +} + + int -isIO9(nasid_t nasid) { +isIO9(nasid_t nasid) +{ lboard_t *brd = (lboard_t *)KL_CONFIG_INFO(nasid); while (brd) { if (brd->brd_flags & LOCAL_MASTER_IO6) { return 1; } - brd = KLCF_NEXT(brd); + if (numionodes == numnodes) + brd = KLCF_NEXT_ANY(brd); + else + brd = KLCF_NEXT(brd); } /* if it's dual ported, check the peer also */ nasid = NODEPDA(NASID_TO_COMPACT_NODEID(nasid))->xbow_peer; @@ -3877,7 +2659,11 @@ if (brd->brd_flags & LOCAL_MASTER_IO6) { return 1; } - brd = KLCF_NEXT(brd); + if (numionodes == numnodes) + brd = KLCF_NEXT_ANY(brd); + else + brd = KLCF_NEXT(brd); + } return 0; } diff -Nru a/arch/ia64/sn/io/sn2/pcibr/pcibr_error.c b/arch/ia64/sn/io/sn2/pcibr/pcibr_error.c --- a/arch/ia64/sn/io/sn2/pcibr/pcibr_error.c Wed Feb 4 16:51:33 2004 +++ b/arch/ia64/sn/io/sn2/pcibr/pcibr_error.c Wed Feb 4 16:51:33 2004 @@ -45,7 +45,7 @@ BRIDGE_ISR_PCIBUS_PIOERR; #endif -int pcibr_llp_control_war_cnt; /* PCIBR_LLP_CONTROL_WAR */ +int pcibr_pioerr_dump = 1; /* always dump pio errors */ /* * register values @@ -107,29 +107,22 @@ #define F(s,n) { 1l<<(s),-(s), n } -static struct reg_values space_v[] = -{ - {PCIIO_SPACE_NONE, "none"}, - {PCIIO_SPACE_ROM, "ROM"}, - {PCIIO_SPACE_IO, "I/O"}, - {PCIIO_SPACE_MEM, "MEM"}, - {PCIIO_SPACE_MEM32, "MEM(32)"}, - {PCIIO_SPACE_MEM64, "MEM(64)"}, - {PCIIO_SPACE_CFG, "CFG"}, - {PCIIO_SPACE_WIN(0), "WIN(0)"}, - {PCIIO_SPACE_WIN(1), "WIN(1)"}, - {PCIIO_SPACE_WIN(2), "WIN(2)"}, - {PCIIO_SPACE_WIN(3), "WIN(3)"}, - {PCIIO_SPACE_WIN(4), "WIN(4)"}, - {PCIIO_SPACE_WIN(5), "WIN(5)"}, - {PCIIO_SPACE_BAD, "BAD"}, - {0} -}; -struct reg_desc space_desc[] = -{ - {0xFF, 0, "space", 0, space_v}, - {0} -}; +char *pci_space[] = {"NONE", + "ROM", + "IO", + "", + "MEM", + "MEM32", + "MEM64", + "CFG", + "WIN0", + "WIN1", + "WIN2", + "WIN3", + "WIN4", + "WIN5", + "", + "BAD"}; static char *pcibr_isr_errs[] = { @@ -261,7 +254,7 @@ static void pcibr_show_dir_state(paddr_t paddr, char *prefix) { -#ifdef LATER +#ifdef PCIBR_LATER int state; uint64_t vec_ptr; hubreg_t elo; @@ -270,15 +263,18 @@ get_dir_ent(paddr, &state, &vec_ptr, &elo); - printk("%saddr 0x%lx: state 0x%x owner 0x%lx (%s)\n", - prefix, paddr, state, vec_ptr, dir_state_str[state]); -#endif + printf("%saddr 0x%lx: state 0x%x owner 0x%lx (%s)\n", + prefix, (uint64_t)paddr, state, (uint64_t)vec_ptr, + dir_state_str[state]); +#endif /* PCIBR_LATER */ } -static void -print_bridge_errcmd(uint32_t cmdword, char *errtype) + +void +print_bridge_errcmd(pcibr_soft_t pcibr_soft, uint32_t cmdword, char *errtype) { - printk("\t Bridge %s Error Command Word Register ", errtype); + printk( + "\t Bridge %sError Command Word Register ", errtype); print_register(cmdword, xtalk_cmd_bits); } @@ -290,20 +286,12 @@ void pcibr_error_dump(pcibr_soft_t pcibr_soft) { - bridge_t *bridge = pcibr_soft->bs_base; uint64_t int_status; - picreg_t int_status_64; uint64_t mult_int; - picreg_t mult_int_64; uint64_t bit; - int number_bits; int i; - char *reg_desc; - paddr_t addr = (paddr_t)0; - int_status_64 = (bridge->p_int_status_64 & ~BRIDGE_ISR_INT_MSK); - int_status = (uint64_t)int_status_64; - number_bits = PCIBR_ISR_MAX_ERRS_PIC; + int_status = (pcireg_intr_status_get(pcibr_soft) & ~BRIDGE_ISR_INT_MSK); if (!int_status) { /* No error bits set */ @@ -320,21 +308,11 @@ int_status, pcibr_soft->bs_name, "PIC"); - for (i = PCIBR_ISR_ERR_START; i < number_bits; i++) { + for (i = PCIBR_ISR_ERR_START; i < 64; i++) { bit = 1ull << i; - /* - * A number of int_status bits are only defined for Bridge. - * Ignore them in the case of an XBridge or PIC. - */ - if (((bit == BRIDGE_ISR_MULTI_ERR) || - (bit == BRIDGE_ISR_SSRAM_PERR) || - (bit == BRIDGE_ISR_GIO_B_ENBL_ERR))) { - continue; - } - /* A number of int_status bits are only valid for PIC's bus0 */ - if (((pcibr_soft->bs_busnum != 0)) && + if ((pcibr_soft->bs_busnum != 0) && ((bit == BRIDGE_ISR_UNSUPPORTED_XOP) || (bit == BRIDGE_ISR_LLP_REC_SNERR) || (bit == BRIDGE_ISR_LLP_REC_CBERR) || @@ -351,14 +329,14 @@ case PIC_ISR_INT_RAM_PERR: /* bit41 INT_RAM_PERR */ /* XXX: should breakdown meaning of bits in reg */ - printk( "\t Internal RAM Parity Error: 0x%lx\n", - bridge->p_ate_parity_err_64); + printk("\t Internal RAM Parity Error: 0x%lx\n", + pcireg_parity_err_get(pcibr_soft)); break; case PIC_ISR_PCIX_ARB_ERR: /* bit40 PCI_X_ARB_ERR */ /* XXX: should breakdown meaning of bits in reg */ - printk( "\t Arbitration Reg: 0x%lx\n", - bridge->b_arb); + printk("\t Arbitration Reg: 0x%lx\n", + pcireg_arbitration_get(pcibr_soft)); break; case PIC_ISR_PCIX_REQ_TOUT: /* bit39 PCI_X_REQ_TOUT */ @@ -366,8 +344,8 @@ printk( "\t PCI-X DMA Request Error Address Reg: 0x%lx\n" "\t PCI-X DMA Request Error Attribute Reg: 0x%lx\n", - bridge->p_pcix_dma_req_err_addr_64, - bridge->p_pcix_dma_req_err_attr_64); + pcireg_pcix_req_err_addr_get(pcibr_soft), + pcireg_pcix_req_err_attr_get(pcibr_soft)); break; case PIC_ISR_PCIX_SPLIT_MSG_PE: /* bit45 PCI_X_SPLIT_MES_PE */ @@ -377,8 +355,8 @@ printk( "\t PCI-X Split Request Address Reg: 0x%lx\n" "\t PCI-X Split Request Attribute Reg: 0x%lx\n", - bridge->p_pcix_pio_split_addr_64, - bridge->p_pcix_pio_split_attr_64); + pcireg_pcix_pio_split_addr_get(pcibr_soft), + pcireg_pcix_pio_split_attr_get(pcibr_soft)); /* FALL THRU */ case PIC_ISR_PCIX_UNEX_COMP: /* bit42 PCI_X_UNEX_COMP */ @@ -394,20 +372,19 @@ "\t PCI-X Bus Error Address Reg: 0x%lx\n" "\t PCI-X Bus Error Attribute Reg: 0x%lx\n" "\t PCI-X Bus Error Data Reg: 0x%lx\n", - bridge->p_pcix_bus_err_addr_64, - bridge->p_pcix_bus_err_attr_64, - bridge->p_pcix_bus_err_data_64); + pcireg_pcix_bus_err_addr_get(pcibr_soft), + pcireg_pcix_bus_err_attr_get(pcibr_soft), + pcireg_pcix_bus_err_data_get(pcibr_soft)); break; - case BRIDGE_ISR_PAGE_FAULT: /* bit30 PMU_PAGE_FAULT */ - reg_desc = "Map Fault Address"; - - printk( "\t %s Register: 0x%x\n", reg_desc, - bridge->b_ram_perr_or_map_fault); + case BRIDGE_ISR_PAGE_FAULT: /* bit30 PMU_PAGE_FAULT */ + printk("\t Map Fault Address Reg: 0x%lx\n", + pcireg_map_fault_get(pcibr_soft)); break; - case BRIDGE_ISR_UNEXP_RESP: /* bit29 UNEXPECTED_RESP */ - print_bridge_errcmd(bridge->b_wid_aux_err, "Aux "); + case BRIDGE_ISR_UNEXP_RESP: /* bit29 UNEXPECTED_RESP */ + print_bridge_errcmd(pcibr_soft, + pcireg_linkside_err_get(pcibr_soft), "Aux "); /* PIC in PCI-X mode, dump the PCIX DMA Request registers */ if (IS_PCIX(pcibr_soft)) { @@ -415,96 +392,98 @@ printk( "\t PCI-X DMA Request Error Addr Reg: 0x%lx\n" "\t PCI-X DMA Request Error Attr Reg: 0x%lx\n", - bridge->p_pcix_dma_req_err_addr_64, - bridge->p_pcix_dma_req_err_attr_64); + pcireg_pcix_req_err_addr_get(pcibr_soft), + pcireg_pcix_req_err_attr_get(pcibr_soft)); } break; - case BRIDGE_ISR_BAD_XRESP_PKT: /* bit28 BAD_RESP_PACKET */ - case BRIDGE_ISR_RESP_XTLK_ERR: /* bit26 RESP_XTALK_ERROR */ - print_bridge_errcmd(bridge->b_wid_aux_err, "Aux "); + case BRIDGE_ISR_BAD_XRESP_PKT: /* bit28 BAD_RESP_PACKET */ + case BRIDGE_ISR_RESP_XTLK_ERR: /* bit26 RESP_XTALK_ERROR */ + print_bridge_errcmd(pcibr_soft, + pcireg_linkside_err_get(pcibr_soft), "Aux "); - /* XXX: should breakdown meaning of attribute bit */ - printk( + /* PCI-X mode, DMA Request Error registers are valid. But + * in PCI mode, Response Buffer Address register are valid. + */ + if (IS_PCIX(pcibr_soft)) { + /* XXX: should breakdown meaning of attribute bit */ + printk( "\t PCI-X DMA Request Error Addr Reg: 0x%lx\n" "\t PCI-X DMA Request Error Attribute Reg: 0x%lx\n", - bridge->p_pcix_dma_req_err_addr_64, - bridge->p_pcix_dma_req_err_attr_64); - if (bit == BRIDGE_ISR_RESP_XTLK_ERR) { + pcireg_pcix_req_err_addr_get(pcibr_soft), + pcireg_pcix_req_err_attr_get(pcibr_soft)); + } else { + printk( + "\t Bridge Response Buf Error Addr Reg: 0x%lx\n" + "\t dev-num %d buff-num %d addr 0x%lx\n", + pcireg_resp_err_get(pcibr_soft), + (int)pcireg_resp_err_dev_get(pcibr_soft), + (int)pcireg_resp_err_buf_get(pcibr_soft), + pcireg_resp_err_addr_get(pcibr_soft)); + if (bit == BRIDGE_ISR_RESP_XTLK_ERR) { /* display memory directory associated with cacheline */ - pcibr_show_dir_state(addr, "\t "); + pcibr_show_dir_state( + pcireg_resp_err_get(pcibr_soft), "\t "); + } } break; - case BRIDGE_ISR_BAD_XREQ_PKT: /* bit27 BAD_XREQ_PACKET */ - case BRIDGE_ISR_REQ_XTLK_ERR: /* bit25 REQ_XTALK_ERROR */ - case BRIDGE_ISR_INVLD_ADDR: /* bit24 INVALID_ADDRESS */ - print_bridge_errcmd(bridge->b_wid_err_cmdword, ""); - printk( - "\t Bridge Error Upper Address Register: 0x%lx\n" - "\t Bridge Error Lower Address Register: 0x%lx\n" + case BRIDGE_ISR_BAD_XREQ_PKT: /* bit27 BAD_XREQ_PACKET */ + case BRIDGE_ISR_REQ_XTLK_ERR: /* bit25 REQ_XTALK_ERROR */ + case BRIDGE_ISR_INVLD_ADDR: /* bit24 INVALID_ADDRESS */ + print_bridge_errcmd(pcibr_soft, + pcireg_cmdword_err_get(pcibr_soft), ""); + printk( + "\t Bridge Error Address Register: 0x%lx\n" "\t Bridge Error Address: 0x%lx\n", - (uint64_t) bridge->b_wid_err_upper, - (uint64_t) bridge->b_wid_err_lower, - (((uint64_t) bridge->b_wid_err_upper << 32) | - bridge->b_wid_err_lower)); + pcireg_bus_err_get(pcibr_soft), + pcireg_bus_err_get(pcibr_soft)); break; - case BRIDGE_ISR_UNSUPPORTED_XOP:/* bit23 UNSUPPORTED_XOP */ - print_bridge_errcmd(bridge->b_wid_aux_err, "Aux "); - printk( - "\t Address Holding Link Side Error Reg: 0x%lx\n", - bridge->p_addr_lkerr_64); + case BRIDGE_ISR_UNSUPPORTED_XOP: /* bit23 UNSUPPORTED_XOP */ + print_bridge_errcmd(pcibr_soft, + pcireg_linkside_err_get(pcibr_soft), "Aux "); + printk("\t Address Holding Link Side Error Reg: 0x%lx\n", + pcireg_linkside_err_addr_get(pcibr_soft)); break; - case BRIDGE_ISR_XREQ_FIFO_OFLOW:/* bit22 XREQ_FIFO_OFLOW */ - print_bridge_errcmd(bridge->b_wid_aux_err, "Aux "); - printk( - "\t Address Holding Link Side Error Reg: 0x%lx\n", - bridge->p_addr_lkerr_64); + case BRIDGE_ISR_XREQ_FIFO_OFLOW: /* bit22 XREQ_FIFO_OFLOW */ + print_bridge_errcmd(pcibr_soft, + pcireg_linkside_err_get(pcibr_soft), "Aux "); + printk("\t Address Holding Link Side Error Reg: 0x%lx\n", + pcireg_linkside_err_addr_get(pcibr_soft)); break; - case BRIDGE_ISR_PCI_ABORT: /* bit15 PCI_ABORT */ - case BRIDGE_ISR_PCI_PARITY: /* bit14 PCI_PARITY */ - case BRIDGE_ISR_PCI_SERR: /* bit13 PCI_SERR */ - case BRIDGE_ISR_PCI_PERR: /* bit12 PCI_PERR */ - case BRIDGE_ISR_PCI_MST_TIMEOUT:/* bit11 PCI_MASTER_TOUT */ - case BRIDGE_ISR_PCI_RETRY_CNT: /* bit10 PCI_RETRY_CNT */ - case BRIDGE_ISR_GIO_B_ENBL_ERR: /* bit08 GIO BENABLE_ERR */ - printk( - "\t PCI Error Upper Address Register: 0x%lx\n" - "\t PCI Error Lower Address Register: 0x%lx\n" + case BRIDGE_ISR_PCI_ABORT: /* bit15 PCI_ABORT */ + case BRIDGE_ISR_PCI_PARITY: /* bit14 PCI_PARITY */ + case BRIDGE_ISR_PCI_SERR: /* bit13 PCI_SERR */ + case BRIDGE_ISR_PCI_PERR: /* bit12 PCI_PERR */ + case BRIDGE_ISR_PCI_MST_TIMEOUT: /* bit11 PCI_MASTER_TOUT */ + case BRIDGE_ISR_PCI_RETRY_CNT: /* bit10 PCI_RETRY_CNT */ + printk("\t PCI Error Address Register: 0x%lx\n" "\t PCI Error Address: 0x%lx\n", - (uint64_t) bridge->b_pci_err_upper, - (uint64_t) bridge->b_pci_err_lower, - (((uint64_t) bridge->b_pci_err_upper << 32) | - bridge->b_pci_err_lower)); + pcireg_pci_bus_addr_get(pcibr_soft), + pcireg_pci_bus_addr_addr_get(pcibr_soft)); break; - case BRIDGE_ISR_XREAD_REQ_TIMEOUT: /* bit09 XREAD_REQ_TOUT */ - addr = (((uint64_t)(bridge->b_wid_resp_upper & 0xFFFF) << 32) - | bridge->b_wid_resp_lower); - printk( - "\t Bridge Response Buf Error Upper Addr Reg: 0x%x\n" - "\t Bridge Response Buf Error Lower Addr Reg: 0x%x\n" + case BRIDGE_ISR_XREAD_REQ_TIMEOUT: /* bit09 XREAD_REQ_TOUT */ + printk("\t Bridge Response Buf Error Addr Reg: 0x%lx\n" "\t dev-num %d buff-num %d addr 0x%lx\n", - bridge->b_wid_resp_upper, bridge->b_wid_resp_lower, - ((bridge->b_wid_resp_upper >> 20) & 0x3), - ((bridge->b_wid_resp_upper >> 16) & 0xF), - addr); + pcireg_resp_err_get(pcibr_soft), + (int)pcireg_resp_err_dev_get(pcibr_soft), + (int)pcireg_resp_err_buf_get(pcibr_soft), + pcireg_resp_err_get(pcibr_soft)); break; } } } - mult_int_64 = (bridge->p_mult_int_64 & ~BRIDGE_ISR_INT_MSK); - mult_int = (uint64_t)mult_int_64; - number_bits = PCIBR_ISR_MAX_ERRS_PIC; + mult_int = pcireg_intr_multiple_get(pcibr_soft); if (mult_int & ~BRIDGE_ISR_INT_MSK) { - printk( " %s Multiple Interrupt Register is 0x%lx\n", - "PIC", mult_int); - for (i = PCIBR_ISR_ERR_START; i < number_bits; i++) { + printk(" %s Multiple Interrupt Register is 0x%lx\n", + pcibr_soft->bs_asic_name, mult_int); + for (i = PCIBR_ISR_ERR_START; i < 64; i++) { if (mult_int & (1ull << i)) printk( "\t%s\n", pcibr_isr_errs[i]); } @@ -519,11 +498,7 @@ static void pcibr_pioerr_check(pcibr_soft_t soft) { - bridge_t *bridge; - uint64_t int_status; - picreg_t int_status_64; - bridgereg_t pci_err_lower; - bridgereg_t pci_err_upper; + uint64_t int_status; iopaddr_t pci_addr; pciio_slot_t slot; pcibr_piomap_t map; @@ -532,16 +507,10 @@ unsigned win; int func; - bridge = soft->bs_base; - int_status_64 = (bridge->p_int_status_64 & ~BRIDGE_ISR_INT_MSK); - int_status = (uint64_t)int_status_64; + int_status = pcireg_intr_status_get(soft); if (int_status & BRIDGE_ISR_PCIBUS_PIOERR) { - pci_err_lower = bridge->b_pci_err_lower; - pci_err_upper = bridge->b_pci_err_upper; - - pci_addr = pci_err_upper & BRIDGE_ERRUPPR_ADDRMASK; - pci_addr = (pci_addr << 32) | pci_err_lower; + pci_addr = pcireg_pci_bus_addr_get(soft); slot = PCIBR_NUM_SLOTS(soft); while (slot-- > 0) { @@ -564,7 +533,7 @@ else if (map->bp_space == PCIIO_SPACE_ROM) base += pcibr_info->f_rbase; if ((pci_addr >= base) && (pci_addr < (base + size))) - atomic_inc(&map->bp_toc[0]); + atomic_inc(&map->bp_toc); } } } @@ -595,11 +564,9 @@ pcibr_error_intr_handler(int irq, void *arg, struct pt_regs *ep) { pcibr_soft_t pcibr_soft; - bridge_t *bridge; - uint64_t int_status; - uint64_t err_status; - picreg_t int_status_64; - int number_bits; + void *bridge; + uint64_t int_status; + uint64_t err_status; int i; uint64_t disable_errintr_mask = 0; nasid_t nasid; @@ -662,9 +629,7 @@ return(pcibr_error_intr_handler(irq, arg, ep)); } - int_status_64 = (bridge->p_int_status_64 & ~BRIDGE_ISR_INT_MSK); - int_status = (uint64_t)int_status_64; - number_bits = PCIBR_ISR_MAX_ERRS_PIC; + int_status = pcireg_intr_status_get(pcibr_soft); PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_INTR_ERROR, pcibr_soft->bs_conn, "pcibr_error_intr_handler: int_status=0x%lx\n", int_status)); @@ -672,7 +637,7 @@ /* int_status is which bits we have to clear; * err_status is the bits we haven't handled yet. */ - err_status = int_status & ~BRIDGE_ISR_MULTI_ERR; + err_status = int_status; if (!(int_status & ~BRIDGE_ISR_INT_MSK)) { /* @@ -688,9 +653,10 @@ } if (err_status) { - struct bs_errintr_stat_s *bs_estat = pcibr_soft->bs_errintr_stat; + struct bs_errintr_stat_s *bs_estat ; + bs_estat = &pcibr_soft->bs_errintr_stat[PCIBR_ISR_ERR_START]; - for (i = PCIBR_ISR_ERR_START; i < number_bits; i++, bs_estat++) { + for (i = PCIBR_ISR_ERR_START; i < 64; i++, bs_estat++) { if (err_status & (1ull << i)) { uint32_t errrate = 0; uint32_t errcount = 0; @@ -827,7 +793,7 @@ * could eat up too much cpu time. */ s = pcibr_lock(pcibr_soft); - bridge->p_int_enable_64 &= (picreg_t)(~disable_errintr_mask); + pcireg_intr_enable_bit_clr(pcibr_soft, disable_errintr_mask); pcibr_unlock(pcibr_soft, s); } /* @@ -836,31 +802,22 @@ * which will cause a BRIDGE_ISR_INVLD_ADDR. */ if ((err_status & BRIDGE_ISR_INVLD_ADDR) && - (0x00000000 == bridge->b_wid_err_upper) && - (0x00C00000 == (0xFFC00000 & bridge->b_wid_err_lower)) && - (0x00402000 == (0x00F07F00 & bridge->b_wid_err_cmdword))) { + (0x00C00000 == (pcireg_bus_err_get(pcibr_soft) & 0xFFFFFFFFFFC00000)) && + (0x00402000 == (0x00F07F00 & pcireg_cmdword_err_get(pcibr_soft)))) { err_status &= ~BRIDGE_ISR_INVLD_ADDR; } /* - * The bridge bug (PCIBR_LLP_CONTROL_WAR), where the llp_config or control registers - * need to be read back after being written, affects an MP - * system since there could be small windows between writing - * the register and reading it back on one cpu while another - * cpu is fielding an interrupt. If we run into this scenario, - * workaround the problem by ignoring the error. (bug 454474) - * pcibr_llp_control_war_cnt keeps an approximate number of - * times we saw this problem on a system. - */ - - if ((err_status & BRIDGE_ISR_INVLD_ADDR) && - ((((uint64_t) bridge->b_wid_err_upper << 32) | (bridge->b_wid_err_lower)) - == (BRIDGE_INT_RST_STAT & 0xff0))) { - pcibr_llp_control_war_cnt++; - err_status &= ~BRIDGE_ISR_INVLD_ADDR; + * pcibr_pioerr_dump is a systune that make be used to not + * print bridge registers for interrupts generated by pio-errors. + * Some customers do early probes and expect a lot of failed + * pios. + */ + if (!pcibr_pioerr_dump) { + bridge_errors_to_dump &= ~BRIDGE_ISR_PCIBUS_PIOERR; + } else { + bridge_errors_to_dump |= BRIDGE_ISR_PCIBUS_PIOERR; } - bridge_errors_to_dump |= BRIDGE_ISR_PCIBUS_PIOERR; - /* Dump/Log Bridge error interrupt info */ if (err_status & bridge_errors_to_dump) { printk("BRIDGE ERR_STATUS 0x%lx\n", err_status); @@ -873,10 +830,11 @@ * has only been seen in simulation */ if (PCIBR_WAR_ENABLED(PV867308, pcibr_soft) && - (err_status & (BRIDGE_ISR_LLP_REC_SNERR | BRIDGE_ISR_LLP_REC_CBERR))) { - printk("BRIDGE ERR_STATUS 0x%lx\n", err_status); - pcibr_error_dump(pcibr_soft); - panic("PCI Bridge Error interrupt killed the system"); + (err_status & (BRIDGE_ISR_LLP_REC_SNERR | BRIDGE_ISR_LLP_REC_CBERR))) { + printk("BRIDGE ERR_STATUS 0x%lx\n", err_status); + pcibr_error_dump(pcibr_soft); + /* machine_error_dump(""); */ + panic("PCI Bridge Error interrupt killed the system"); } if (err_status & BRIDGE_ISR_ERROR_FATAL) { @@ -893,7 +851,7 @@ * * PIC doesn't require groups of interrupts to be cleared... */ - bridge->p_int_rst_stat_64 = (picreg_t)(int_status | BRIDGE_IRR_MULTI_CLR); + pcireg_intr_reset_set(pcibr_soft, (int_status | BRIDGE_IRR_MULTI_CLR)); /* PIC BRINGUP WAR (PV# 856155): * On a PCI_X_ARB_ERR error interrupt clear the DEV_BROKE bits from @@ -901,7 +859,7 @@ */ if ((err_status & PIC_ISR_PCIX_ARB_ERR) && PCIBR_WAR_ENABLED(PV856155, pcibr_soft)) { - bridge->b_arb |= (0xf << 20); + pcireg_arbitration_bit_set(pcibr_soft, (0xf << 20)); } /* Zero out bserr_intstat field */ @@ -909,18 +867,196 @@ return IRQ_HANDLED; } +/* + * pcibr_addr_toslot + * Given the 'pciaddr' find out which slot this address is + * allocated to, and return the slot number. + * While we have the info handy, construct the + * function number, space code and offset as well. + * + * NOTE: if this routine is called, we don't know whether + * the address is in CFG, MEM, or I/O space. We have to guess. + * This will be the case on PIO stores, where the only way + * we have of getting the address is to check the Bridge, which + * stores the PCI address but not the space and not the xtalk + * address (from which we could get it). + */ +static int +pcibr_addr_toslot(pcibr_soft_t pcibr_soft, + iopaddr_t pciaddr, + pciio_space_t *spacep, + iopaddr_t *offsetp, + pciio_function_t *funcp) +{ + int s, f = 0, w; + iopaddr_t base; + size_t size; + pciio_piospace_t piosp; + + /* + * Check if the address is in config space + */ + + if ((pciaddr >= BRIDGE_CONFIG_BASE) && (pciaddr < BRIDGE_CONFIG_END)) { + + if (pciaddr >= BRIDGE_CONFIG1_BASE) + pciaddr -= BRIDGE_CONFIG1_BASE; + else + pciaddr -= BRIDGE_CONFIG_BASE; + + s = pciaddr / BRIDGE_CONFIG_SLOT_SIZE; + pciaddr %= BRIDGE_CONFIG_SLOT_SIZE; + + if (funcp) { + f = pciaddr / 0x100; + pciaddr %= 0x100; + } + if (spacep) + *spacep = PCIIO_SPACE_CFG; + if (offsetp) + *offsetp = pciaddr; + if (funcp) + *funcp = f; + + return s; + } + for (s = pcibr_soft->bs_min_slot; s < PCIBR_NUM_SLOTS(pcibr_soft); ++s) { + int nf = pcibr_soft->bs_slot[s].bss_ninfo; + pcibr_info_h pcibr_infoh = pcibr_soft->bs_slot[s].bss_infos; + + for (f = 0; f < nf; f++) { + pcibr_info_t pcibr_info = pcibr_infoh[f]; + + if (!pcibr_info) + continue; + for (w = 0; w < 6; w++) { + if (pcibr_info->f_window[w].w_space + == PCIIO_SPACE_NONE) { + continue; + } + base = pcibr_info->f_window[w].w_base; + size = pcibr_info->f_window[w].w_size; + + if ((pciaddr >= base) && (pciaddr < (base + size))) { + if (spacep) + *spacep = PCIIO_SPACE_WIN(w); + if (offsetp) + *offsetp = pciaddr - base; + if (funcp) + *funcp = f; + return s; + } /* endif match */ + } /* next window */ + } /* next func */ + } /* next slot */ + + /* + * Check if the address was allocated as part of the + * pcibr_piospace_alloc calls. + */ + for (s = pcibr_soft->bs_min_slot; s < PCIBR_NUM_SLOTS(pcibr_soft); ++s) { + int nf = pcibr_soft->bs_slot[s].bss_ninfo; + pcibr_info_h pcibr_infoh = pcibr_soft->bs_slot[s].bss_infos; + + for (f = 0; f < nf; f++) { + pcibr_info_t pcibr_info = pcibr_infoh[f]; + + if (!pcibr_info) + continue; + piosp = pcibr_info->f_piospace; + while (piosp) { + if ((piosp->start <= pciaddr) && + ((piosp->count + piosp->start) > pciaddr)) { + if (spacep) + *spacep = piosp->space; + if (offsetp) + *offsetp = pciaddr - piosp->start; + return s; + } /* endif match */ + piosp = piosp->next; + } /* next piosp */ + } /* next func */ + } /* next slot */ + + /* + * Some other random address on the PCI bus ... + * we have no way of knowing whether this was + * a MEM or I/O access; so, for now, we just + * assume that the low 1G is MEM, the next + * 3G is I/O, and anything above the 4G limit + * is obviously MEM. + */ + + if (spacep) + *spacep = ((pciaddr < (1ul << 30)) ? PCIIO_SPACE_MEM : + (pciaddr < (4ul << 30)) ? PCIIO_SPACE_IO : + PCIIO_SPACE_MEM); + if (offsetp) + *offsetp = pciaddr; + + return PCIIO_SLOT_NONE; + +} + void pcibr_error_cleanup(pcibr_soft_t pcibr_soft, int error_code) { - bridge_t *bridge = pcibr_soft->bs_base; + uint64_t clr_bits = BRIDGE_IRR_ALL_CLR; ASSERT(error_code & IOECODE_PIO); error_code = error_code; - bridge->p_int_rst_stat_64 = BRIDGE_IRR_PCI_GRP_CLR | - PIC_PCIX_GRP_CLR | - BRIDGE_IRR_MULTI_CLR; - (void) bridge->b_wid_tflush; /* flushbus */ + pcireg_intr_reset_set(pcibr_soft, clr_bits); + + pcireg_tflush_get(pcibr_soft); /* flushbus */ +} + + +/* + * pcibr_error_extract + * Given the 'pcibr vertex handle' find out which slot + * the bridge status error address (from pcibr_soft info + * hanging off the vertex) + * allocated to, and return the slot number. + * While we have the info handy, construct the + * space code and offset as well. + * + * NOTE: if this routine is called, we don't know whether + * the address is in CFG, MEM, or I/O space. We have to guess. + * This will be the case on PIO stores, where the only way + * we have of getting the address is to check the Bridge, which + * stores the PCI address but not the space and not the xtalk + * address (from which we could get it). + * + * XXX- this interface has no way to return the function + * number on a multifunction card, even though that data + * is available. + */ + +pciio_slot_t +pcibr_error_extract(vertex_hdl_t pcibr_vhdl, + pciio_space_t *spacep, + iopaddr_t *offsetp) +{ + pcibr_soft_t pcibr_soft = 0; + iopaddr_t bserr_addr; + pciio_slot_t slot = PCIIO_SLOT_NONE; + arbitrary_info_t rev; + + /* Do a sanity check as to whether we really got a + * bridge vertex handle. + */ + if (hwgraph_info_get_LBL(pcibr_vhdl, INFO_LBL_PCIBR_ASIC_REV, &rev) != + GRAPH_SUCCESS) + return(slot); + + pcibr_soft = pcibr_soft_get(pcibr_vhdl); + if (pcibr_soft) { + bserr_addr = pcireg_pci_bus_addr_get(pcibr_soft); + slot = pcibr_addr_toslot(pcibr_soft, bserr_addr, + spacep, offsetp, NULL); + } + return slot; } /*ARGSUSED */ @@ -953,6 +1089,28 @@ * to handle the error, it expects the bus-interface to disable that * device, and takes any steps needed here to take away any resources * associated with this device. + * + * A note about slots: + * + * PIC-based bridges use zero-based device numbering when devices to + * internal registers. However, the physical slots are numbered using a + * one-based scheme because in PCI-X, device 0 is reserved (see comments + * in pcibr_private.h for a better description). + * + * When building up the hwgraph, we use the external (one-based) number + * scheme when numbering slot components so that hwgraph more accuratly + * reflects what is silkscreened on the bricks. + * + * Since pciio_error_handler() needs to ultimatly be able to do a hwgraph + * lookup, the ioerror that gets built up in pcibr_pioerror() encodes the + * external (one-based) slot number. However, loops in pcibr_pioerror() + * which attempt to translate the virtual address into the correct + * PCI physical address use the device (zero-based) numbering when + * walking through bridge structures. + * + * To that end, pcibr_pioerror() uses device to denote the + * zero-based device number, and external_slot to denote the corresponding + * one-based slot number. Loop counters (eg. cs) are always device based. */ /* BEM_ADD_IOE doesn't dump the whole ioerror, it just @@ -1017,7 +1175,8 @@ iopaddr_t raw_paddr; /* raw PCI address */ pciio_space_t space; /* final PCI space */ - pciio_slot_t slot; /* final PCI slot, if appropriate */ + pciio_slot_t device; /* final PCI device if appropriate */ + pciio_slot_t external_slot;/* external slot for device */ pciio_function_t func; /* final PCI func, if appropriate */ iopaddr_t offset; /* final PCI offset */ @@ -1039,16 +1198,16 @@ "pcibr_pioerror: pcibr_soft=0x%lx, bad_xaddr=0x%lx\n", pcibr_soft, bad_xaddr)); - slot = PCIIO_SLOT_NONE; + device = PCIIO_SLOT_NONE; func = PCIIO_FUNC_NONE; raw_space = PCIIO_SPACE_NONE; raw_paddr = 0; - if ((bad_xaddr >= PCIBR_BUS_TYPE0_CFG_DEV0(pcibr_soft)) && + if ((bad_xaddr >= PCIBR_BUS_TYPE0_CFG_DEV(pcibr_soft, 0)) && (bad_xaddr < PCIBR_TYPE1_CFG(pcibr_soft))) { - raw_paddr = bad_xaddr - PCIBR_BUS_TYPE0_CFG_DEV0(pcibr_soft); - slot = raw_paddr / BRIDGE_TYPE0_CFG_SLOT_OFF; - raw_paddr = raw_paddr % BRIDGE_TYPE0_CFG_SLOT_OFF; + raw_paddr = bad_xaddr - PCIBR_BUS_TYPE0_CFG_DEV(pcibr_soft, 0); + device = raw_paddr / BRIDGE_CONFIG_SLOT_SIZE; + raw_paddr = raw_paddr % BRIDGE_CONFIG_SLOT_SIZE; raw_space = PCIIO_SPACE_CFG; } if ((bad_xaddr >= PCIBR_TYPE1_CFG(pcibr_soft)) && @@ -1060,11 +1219,11 @@ raw_paddr = bad_xaddr - PCIBR_TYPE1_CFG(pcibr_soft); raw_space = PCIIO_SPACE_CFG; } - if ((bad_xaddr >= PCIBR_BRIDGE_DEVIO0(pcibr_soft)) && + if ((bad_xaddr >= PCIBR_BRIDGE_DEVIO(pcibr_soft, 0)) && (bad_xaddr < PCIBR_BRIDGE_DEVIO(pcibr_soft, BRIDGE_DEV_CNT))) { int x; - raw_paddr = bad_xaddr - PCIBR_BRIDGE_DEVIO0(pcibr_soft); + raw_paddr = bad_xaddr - PCIBR_BRIDGE_DEVIO(pcibr_soft, 0); x = raw_paddr / BRIDGE_DEVIO_OFF; raw_paddr %= BRIDGE_DEVIO_OFF; /* first two devio windows are double-sized */ @@ -1101,25 +1260,37 @@ } else raw_paddr += pcibr_soft->bs_slot[x].bss_devio.bssd_base; } - if ((bad_xaddr >= BRIDGE_PCI_MEM32_BASE) && - (bad_xaddr <= BRIDGE_PCI_MEM32_LIMIT)) { - raw_space = PCIIO_SPACE_MEM32; - raw_paddr = bad_xaddr - BRIDGE_PCI_MEM32_BASE; - } - if ((bad_xaddr >= BRIDGE_PCI_MEM64_BASE) && - (bad_xaddr <= BRIDGE_PCI_MEM64_LIMIT)) { - raw_space = PCIIO_SPACE_MEM64; - raw_paddr = bad_xaddr - BRIDGE_PCI_MEM64_BASE; - } - if ((bad_xaddr >= BRIDGE_PCI_IO_BASE) && - (bad_xaddr <= BRIDGE_PCI_IO_LIMIT)) { - raw_space = PCIIO_SPACE_IO; - raw_paddr = bad_xaddr - BRIDGE_PCI_IO_BASE; + + if (IS_PIC_BUSNUM_SOFT(pcibr_soft, 0)) { + if ((bad_xaddr >= PICBRIDGE0_PCI_MEM32_BASE) && + (bad_xaddr <= PICBRIDGE0_PCI_MEM32_LIMIT)) { + raw_space = PCIIO_SPACE_MEM32; + raw_paddr = bad_xaddr - PICBRIDGE0_PCI_MEM32_BASE; + } + if ((bad_xaddr >= PICBRIDGE0_PCI_MEM64_BASE) && + (bad_xaddr <= PICBRIDGE0_PCI_MEM64_LIMIT)) { + raw_space = PCIIO_SPACE_MEM64; + raw_paddr = bad_xaddr - PICBRIDGE0_PCI_MEM64_BASE; + } + } else if (IS_PIC_BUSNUM_SOFT(pcibr_soft, 1)) { + if ((bad_xaddr >= PICBRIDGE1_PCI_MEM32_BASE) && + (bad_xaddr <= PICBRIDGE1_PCI_MEM32_LIMIT)) { + raw_space = PCIIO_SPACE_MEM32; + raw_paddr = bad_xaddr - PICBRIDGE1_PCI_MEM32_BASE; + } + if ((bad_xaddr >= PICBRIDGE1_PCI_MEM64_BASE) && + (bad_xaddr <= PICBRIDGE1_PCI_MEM64_LIMIT)) { + raw_space = PCIIO_SPACE_MEM64; + raw_paddr = bad_xaddr - PICBRIDGE1_PCI_MEM64_BASE; + } + } else { + printk("pcibr_pioerror(): unknown bridge type"); + return IOERROR_UNHANDLED; } space = raw_space; offset = raw_paddr; - if ((slot == PCIIO_SLOT_NONE) && (space != PCIIO_SPACE_NONE)) { + if ((device == PCIIO_SLOT_NONE) && (space != PCIIO_SPACE_NONE)) { /* we've got a space/offset but not which * PCI slot decodes it. Check through our * notions of which devices decode where. @@ -1133,16 +1304,16 @@ for (cs = pcibr_soft->bs_min_slot; (cs < PCIBR_NUM_SLOTS(pcibr_soft)) && - (slot == PCIIO_SLOT_NONE); cs++) { + (device == PCIIO_SLOT_NONE); cs++) { int nf = pcibr_soft->bs_slot[cs].bss_ninfo; pcibr_info_h pcibr_infoh = pcibr_soft->bs_slot[cs].bss_infos; - for (cf = 0; (cf < nf) && (slot == PCIIO_SLOT_NONE); cf++) { + for (cf = 0; (cf < nf) && (device == PCIIO_SLOT_NONE); cf++) { pcibr_info_t pcibr_info = pcibr_infoh[cf]; if (!pcibr_info) continue; - for (cw = 0; (cw < 6) && (slot == PCIIO_SLOT_NONE); ++cw) { + for (cw = 0; (cw < 6) && (device == PCIIO_SLOT_NONE); ++cw) { if (((wx = pcibr_info->f_window[cw].w_space) != PCIIO_SPACE_NONE) && ((wb = pcibr_info->f_window[cw].w_base) != 0) && ((ws = pcibr_info->f_window[cw].w_size) != 0) && @@ -1158,7 +1329,7 @@ ((space == PCIIO_SPACE_MEM) || (space == PCIIO_SPACE_MEM32) || (space == PCIIO_SPACE_MEM64)))) { - slot = cs; + device = cs; func = cf; space = PCIIO_SPACE_WIN(cw); offset -= wb; @@ -1211,7 +1382,7 @@ wb = map->bp_pciaddr; ws = map->bp_mapsz; cw = wx - PCIIO_SPACE_WIN(0); - if (cw < 6) { + if (cw >= 0 && cw < 6) { wb += pcibr_soft->bs_slot[cs].bss_window[cw].bssw_base; wx = pcibr_soft->bs_slot[cs].bss_window[cw].bssw_space; } @@ -1224,32 +1395,35 @@ wx = PCIIO_SPACE_MEM; wl = wb + ws; if ((wx == raw_space) && (raw_paddr >= wb) && (raw_paddr < wl)) { - atomic_inc(&map->bp_toc[0]); - if (slot == PCIIO_SLOT_NONE) { - slot = cs; + atomic_inc(&map->bp_toc); + if (device == PCIIO_SLOT_NONE) { + device = cs; + func = cf; space = map->bp_space; - if (cw < 6) - offset -= pcibr_soft->bs_slot[cs].bss_window[cw].bssw_base; + if (cw >= 0 && cw < 6) + offset -= pcibr_soft->bs_slot[device].bss_window[cw].bssw_base; } + + break; } } } } PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ERROR_HDLR, pcibr_soft->bs_conn, - "pcibr_pioerror: offset=0x%x, slot=0x%x, func=0x%x\n", - offset, slot, func)); + "pcibr_pioerror: space=%d, offset=0x%lx, dev=0x%x, func=0x%x\n", + space, offset, device, func)); if (space != PCIIO_SPACE_NONE) { - if (slot != PCIIO_SLOT_NONE) { - if (func != PCIIO_FUNC_NONE) { + if (device != PCIIO_SLOT_NONE) { + external_slot = PCIBR_DEVICE_TO_SLOT(pcibr_soft, device); + + if (func != PCIIO_FUNC_NONE) IOERROR_SETVALUE(ioe, widgetdev, - pciio_widgetdev_create(slot,func)); - } - else { + pciio_widgetdev_create(external_slot,func)); + else IOERROR_SETVALUE(ioe, widgetdev, - pciio_widgetdev_create(slot,0)); - } + pciio_widgetdev_create(external_slot,0)); } IOERROR_SETVALUE(ioe, busspace, space); IOERROR_SETVALUE(ioe, busaddr, offset); @@ -1265,7 +1439,7 @@ /* if appropriate, give the error handler for this slot * a shot at this probe access as well. */ - return (slot == PCIIO_SLOT_NONE) ? IOERROR_HANDLED : + return (device == PCIIO_SLOT_NONE) ? IOERROR_HANDLED : pciio_error_handler(pcibr_vhdl, error_code, mode, ioe); } /* @@ -1355,10 +1529,11 @@ * other errors. */ if (IOERROR_FIELDVALID(ioe, widgetdev)) { - short widdev; - IOERROR_GETVALUE(widdev, ioe, widgetdev); - pcibr_device_disable(pcibr_soft, - pciio_widgetdev_slot_get(widdev)); + short widdev; + IOERROR_GETVALUE(widdev, ioe, widgetdev); + external_slot = pciio_widgetdev_slot_get(widdev); + device = PCIBR_SLOT_TO_DEVICE(pcibr_soft, external_slot); + pcibr_device_disable(pcibr_soft, device); } if (mode == MODE_DEVUSERERROR) pcibr_error_cleanup(pcibr_soft, error_code); @@ -1381,10 +1556,8 @@ ioerror_t *ioe) { vertex_hdl_t pcibr_vhdl = pcibr_soft->bs_vhdl; - bridge_t *bridge = pcibr_soft->bs_base; - bridgereg_t bus_lowaddr, bus_uppraddr; int retval = 0; - int bufnum; + int bufnum, device; /* * In case of DMA errors, bridge should have logged the @@ -1401,19 +1574,10 @@ /* * read error log registers */ - bus_lowaddr = bridge->b_wid_resp_lower; - bus_uppraddr = bridge->b_wid_resp_upper; - - bufnum = BRIDGE_RESP_ERRUPPR_BUFNUM(bus_uppraddr); - IOERROR_SETVALUE(ioe, widgetdev, - pciio_widgetdev_create( - BRIDGE_RESP_ERRUPPR_DEVICE(bus_uppraddr), - 0)); - IOERROR_SETVALUE(ioe, busaddr, - (bus_lowaddr | - ((iopaddr_t) - (bus_uppraddr & - BRIDGE_ERRUPPR_ADDRMASK) << 32))); + bufnum = pcireg_resp_err_buf_get(pcibr_soft); + device = pcireg_resp_err_dev_get(pcibr_soft); + IOERROR_SETVALUE(ioe, widgetdev, pciio_widgetdev_create(device, 0)); + IOERROR_SETVALUE(ioe, busaddr, pcireg_resp_err_get(pcibr_soft)); /* * need to ensure that the xtalk address in ioe @@ -1436,7 +1600,7 @@ * not is dependent on INT_ENABLE register. This write just makes sure * that if the interrupt was enabled, we do get the interrupt. */ - bridge->b_int_rst_stat = BRIDGE_IRR_RESP_BUF_GRP_CLR; + pcireg_intr_reset_set(pcibr_soft, BRIDGE_IRR_RESP_BUF_GRP_CLR); /* * Also, release the "bufnum" back to buffer pool that could be re-used. @@ -1445,19 +1609,13 @@ */ { - reg_p regp; - bridgereg_t regv; - bridgereg_t mask; - - regp = (bufnum & 1) - ? &bridge->b_odd_resp - : &bridge->b_even_resp; + uint64_t rrb_reg; + uint64_t mask; + rrb_reg = pcireg_rrb_get(pcibr_soft, (bufnum & 1)); mask = 0xF << ((bufnum >> 1) * 4); - - regv = *regp; - *regp = regv & ~mask; - *regp = regv; + pcireg_rrb_set(pcibr_soft, (bufnum & 1), (rrb_reg & ~mask)); + pcireg_rrb_set(pcibr_soft, (bufnum & 1), rrb_reg); } return retval; @@ -1705,9 +1863,9 @@ */ if ((pio_retval == -1) && (dma_retval == -1)) { return IOERROR_BADERRORCODE; - } else if (dma_retval != IOERROR_HANDLED) { + } else if ((dma_retval != IOERROR_HANDLED) && (dma_retval != -1)) { return dma_retval; - } else if (pio_retval != IOERROR_HANDLED) { + } else if ((pio_retval != IOERROR_HANDLED) && (pio_retval != -1)) { return pio_retval; } else { return IOERROR_HANDLED; diff -Nru a/arch/ia64/sn/io/sn2/pcibr/pcibr_hints.c b/arch/ia64/sn/io/sn2/pcibr/pcibr_hints.c --- a/arch/ia64/sn/io/sn2/pcibr/pcibr_hints.c Wed Feb 4 16:51:37 2004 +++ b/arch/ia64/sn/io/sn2/pcibr/pcibr_hints.c Wed Feb 4 16:51:37 2004 @@ -33,8 +33,11 @@ if (alloc && (rv != GRAPH_SUCCESS)) { hint = kmalloc(sizeof (*(hint)), GFP_KERNEL); - if ( !hint ) + if ( !hint ) { + printk(KERN_WARNING "pcibr_hints_get(): unable to allocate " + "memory\n"); goto abnormal_exit; + } memset(hint, 0, sizeof (*(hint))); hint->rrb_alloc_funct = NULL; @@ -57,7 +60,7 @@ abnormal_exit: kfree(hint); - return(NULL); + return NULL; } diff -Nru a/arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c b/arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c --- a/arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c Wed Feb 4 16:51:36 2004 +++ b/arch/ia64/sn/io/sn2/pcibr/pcibr_intr.c Wed Feb 4 16:51:36 2004 @@ -25,14 +25,14 @@ /* FIXME - compare_and_swap_ptr NOT ATOMIC */ if (*location == old_ptr) { *location = new_ptr; - return(1); + return 1; } else - return(0); + return 0; } #endif -unsigned pcibr_intr_bits(pciio_info_t info, pciio_intr_line_t lines, int nslots); +unsigned int pcibr_intr_bits(pciio_info_t info, pciio_intr_line_t lines, int nslots); pcibr_intr_t pcibr_intr_alloc(vertex_hdl_t, device_desc_t, pciio_intr_line_t, vertex_hdl_t); void pcibr_intr_free(pcibr_intr_t); void pcibr_setpciint(xtalk_intr_t); @@ -40,8 +40,6 @@ void pcibr_intr_disconnect(pcibr_intr_t); vertex_hdl_t pcibr_intr_cpu_get(pcibr_intr_t); -void pcibr_xintr_preset(void *, int, xwidgetnum_t, iopaddr_t, xtalk_intr_vector_t); -void pcibr_intr_func(intr_arg_t); extern pcibr_info_t pcibr_info_get(vertex_hdl_t); @@ -49,7 +47,7 @@ * INTERRUPT MANAGEMENT */ -unsigned +unsigned int pcibr_intr_bits(pciio_info_t info, pciio_intr_line_t lines, int nslots) { @@ -100,7 +98,8 @@ extern struct sn_flush_nasid_entry flush_nasid_list[MAX_NASIDS]; void -sn_dma_flush(unsigned long addr) { +sn_dma_flush(unsigned long addr) +{ nasid_t nasid; int wid_num; volatile struct sn_flush_device_list *p; @@ -144,7 +143,7 @@ /* force an interrupt. */ - *(bridgereg_t *)(p->force_int_addr) = 1; + *(volatile uint32_t *)(p->force_int_addr) = 1; /* wait for the interrupt to come back. */ @@ -152,8 +151,6 @@ /* okay, everything is synched up. */ spin_unlock_irqrestore(&p->flush_lock, flags); - - return; } EXPORT_SYMBOL(sn_dma_flush); @@ -200,7 +197,6 @@ unsigned bit; unsigned bits; pcibr_soft_t pcibr_soft = intr->bi_soft; - bridge_t *bridge = pcibr_soft->bs_base; bits = intr->bi_ibits; for (bit = 0; bit < 8; bit++) { @@ -209,7 +205,7 @@ PCIBR_DEBUG((PCIBR_DEBUG_INTR, pcibr_soft->bs_vhdl, "pcibr_force_interrupt: bit=0x%x\n", bit)); - bridge->b_force_pin[bit].intr = 1; + pcireg_force_intr_set(pcibr_soft, bit); } } } @@ -225,7 +221,6 @@ pciio_slot_t pciio_slot = PCIBR_INFO_SLOT_GET_INT(pcibr_info); pcibr_soft_t pcibr_soft = (pcibr_soft_t) pcibr_info->f_mfast; vertex_hdl_t xconn_vhdl = pcibr_soft->bs_conn; - bridge_t *bridge = pcibr_soft->bs_base; int is_threaded = 0; xtalk_intr_t *xtalk_intr_p; @@ -239,8 +234,6 @@ pcibr_intr_t pcibr_intr; pcibr_intr_list_t intr_entry; pcibr_intr_list_t intr_list; - bridgereg_t int_dev; - PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_INTR_ALLOC, pconn_vhdl, "pcibr_intr_alloc: %s%s%s%s%s\n", @@ -266,9 +259,9 @@ pcibr_intr->bi_ibuf.ib_in = 0; pcibr_intr->bi_ibuf.ib_out = 0; spin_lock_init(&pcibr_intr->bi_ibuf.ib_lock); - pcibr_int_bits = pcibr_soft->bs_intr_bits((pciio_info_t)pcibr_info, lines, - PCIBR_NUM_SLOTS(pcibr_soft)); + pcibr_int_bits = pcibr_soft->bs_intr_bits((pciio_info_t)pcibr_info, + lines, PCIBR_NUM_SLOTS(pcibr_soft)); /* * For each PCI interrupt line requested, figure @@ -336,10 +329,10 @@ * now tell the bridge which slot is * using this interrupt line. */ - int_dev = bridge->b_int_device; - int_dev &= ~BRIDGE_INT_DEV_MASK(pcibr_int_bit); - int_dev |= pciio_slot << BRIDGE_INT_DEV_SHFT(pcibr_int_bit); - bridge->b_int_device = int_dev; /* XXXMP */ + pcireg_intr_device_bit_clr(pcibr_soft, + BRIDGE_INT_DEV_MASK(pcibr_int_bit)); + pcireg_intr_device_bit_set(pcibr_soft, + (pciio_slot << BRIDGE_INT_DEV_SHFT(pcibr_int_bit))); PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_INTR_ALLOC, pconn_vhdl, "bridge intr bit %d clears my wrb\n", @@ -367,7 +360,8 @@ intr_entry->il_next = NULL; intr_entry->il_intr = pcibr_intr; - intr_entry->il_wrbf = &(bridge->b_wr_req_buf[pciio_slot].reg); + intr_entry->il_soft = pcibr_soft; + intr_entry->il_slot = pciio_slot; intr_list_p = &pcibr_soft->bs_intr[pcibr_int_bit].bsi_pcibr_intr_wrap.iw_list; @@ -479,19 +473,14 @@ if ((!intr_shared) && (*xtalk_intrp)) { - bridge_t *bridge = pcibr_soft->bs_base; - bridgereg_t int_dev; - xtalk_intr_free(*xtalk_intrp); *xtalk_intrp = 0; /* Clear the PCI device interrupt to bridge interrupt pin * mapping. */ - int_dev = bridge->b_int_device; - int_dev &= ~BRIDGE_INT_DEV_MASK(pcibr_int_bit); - bridge->b_int_device = int_dev; - + pcireg_intr_device_bit_clr(pcibr_soft, + BRIDGE_INT_DEV_MASK(pcibr_int_bit)); } } } @@ -504,17 +493,21 @@ iopaddr_t addr; xtalk_intr_vector_t vect; vertex_hdl_t vhdl; - bridge_t *bridge; - picreg_t *int_addr; - + int bus_num; + int pcibr_int_bit; + void *bridge; + addr = xtalk_intr_addr_get(xtalk_intr); vect = xtalk_intr_vector_get(xtalk_intr); vhdl = xtalk_intr_dev_get(xtalk_intr); - bridge = (bridge_t *)xtalk_piotrans_addr(vhdl, 0, 0, sizeof(bridge_t), 0); - int_addr = (picreg_t *)xtalk_intr_sfarg_get(xtalk_intr); - *int_addr = ((PIC_INT_ADDR_FLD & ((uint64_t)vect << 48)) | - (PIC_INT_ADDR_HOST & addr)); + /* bus and int_bits are stored in sfarg, bus bit3, int_bits bit2:0 */ + pcibr_int_bit = *((int *)xtalk_intr_sfarg_get(xtalk_intr)) & 0x7; + bus_num = ((*((int *)xtalk_intr_sfarg_get(xtalk_intr)) & 0x8) >> 3); + + bridge = pcibr_bridge_ptr_get(vhdl, bus_num); + pcireg_bridge_intr_addr_vect_set(bridge, pcibr_int_bit, vect); + pcireg_bridge_intr_addr_addr_set(bridge, pcibr_int_bit, addr); } /*ARGSUSED */ @@ -522,11 +515,9 @@ pcibr_intr_connect(pcibr_intr_t pcibr_intr, intr_func_t intr_func, intr_arg_t intr_arg) { pcibr_soft_t pcibr_soft = pcibr_intr->bi_soft; - bridge_t *bridge = pcibr_soft->bs_base; unsigned pcibr_int_bits = pcibr_intr->bi_ibits; unsigned pcibr_int_bit; - uint64_t int_enable; - unsigned long s; + unsigned long s; if (pcibr_intr == NULL) return -1; @@ -566,37 +557,27 @@ * Use the pcibr wrapper function to handle all Bridge interrupts * regardless of whether the interrupt line is shared or not. */ - int_addr = (void *)&(bridge->p_int_addr_64[pcibr_int_bit]); - - xtalk_intr_connect(xtalk_intr, pcibr_intr_func, (intr_arg_t) intr_wrap, - (xtalk_intr_setfunc_t) pcibr_setpciint, - (void *)int_addr); + int_addr = pcireg_intr_addr_addr(pcibr_soft, pcibr_int_bit); + pcibr_soft->bs_intr[pcibr_int_bit].bsi_int_bit = + ((pcibr_soft->bs_busnum << 3) | pcibr_int_bit); + xtalk_intr_connect(xtalk_intr, + NULL, + (intr_arg_t) intr_wrap, + (xtalk_intr_setfunc_t) pcibr_setpciint, + &pcibr_soft->bs_intr[pcibr_int_bit].bsi_int_bit); pcibr_soft->bs_intr[pcibr_int_bit].bsi_pcibr_intr_wrap.iw_connected = 1; PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_INTR_ALLOC, pcibr_intr->bi_dev, - "pcibr_setpciint: int_addr=0x%x, *int_addr=0x%x, " - "pcibr_int_bit=0x%x\n", int_addr, - *(picreg_t *)int_addr, + "pcibr_setpciint: int_addr=0x%lx, *int_addr=0x%lx, " + "pcibr_int_bit=0x%x\n", int_addr, + pcireg_intr_addr_get(pcibr_soft, pcibr_int_bit), pcibr_int_bit)); } - /* PIC WAR. PV# 854697 - * On PIC we must write 64-bit MMRs with 64-bit stores - */ s = pcibr_lock(pcibr_soft); - if (PCIBR_WAR_ENABLED(PV854697, pcibr_soft)) { - int_enable = bridge->p_int_enable_64; - int_enable |= pcibr_int_bits; - bridge->p_int_enable_64 = int_enable; - } else { - bridgereg_t int_enable; - - int_enable = bridge->b_int_enable; - int_enable |= pcibr_int_bits; - bridge->b_int_enable = int_enable; - } - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ + pcireg_intr_enable_bit_set(pcibr_soft, pcibr_int_bits); + pcireg_tflush_get(pcibr_soft); pcibr_unlock(pcibr_soft, s); return 0; @@ -607,12 +588,10 @@ pcibr_intr_disconnect(pcibr_intr_t pcibr_intr) { pcibr_soft_t pcibr_soft = pcibr_intr->bi_soft; - bridge_t *bridge = pcibr_soft->bs_base; unsigned pcibr_int_bits = pcibr_intr->bi_ibits; unsigned pcibr_int_bit; - pcibr_intr_wrap_t intr_wrap; - uint64_t int_enable; - unsigned long s; + pcibr_intr_wrap_t intr_wrap; + unsigned long s; /* Stop calling the function. Now. */ @@ -636,16 +615,8 @@ return; s = pcibr_lock(pcibr_soft); - if (PCIBR_WAR_ENABLED(PV854697, pcibr_soft)) { - int_enable = bridge->p_int_enable_64; - int_enable &= ~pcibr_int_bits; - bridge->p_int_enable_64 = int_enable; - } else { - int_enable = (uint64_t)bridge->b_int_enable; - int_enable &= ~pcibr_int_bits; - bridge->b_int_enable = (bridgereg_t)int_enable; - } - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ + pcireg_intr_enable_bit_clr(pcibr_soft, pcibr_int_bits); + pcireg_tflush_get(pcibr_soft); /* wait until Bridge PIO complete */ pcibr_unlock(pcibr_soft, s); PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_INTR_ALLOC, pcibr_intr->bi_dev, @@ -654,7 +625,6 @@ for (pcibr_int_bit = 0; pcibr_int_bit < 8; pcibr_int_bit++) if (pcibr_int_bits & (1 << pcibr_int_bit)) { - void *int_addr; /* if the interrupt line is now shared, * do not disconnect it. @@ -674,19 +644,18 @@ * where the another pcibr_intr_alloc() * was in progress as we disconnected. */ + intr_wrap = &pcibr_soft->bs_intr[pcibr_int_bit].bsi_pcibr_intr_wrap; if (!pcibr_soft->bs_intr[pcibr_int_bit].bsi_pcibr_intr_wrap.iw_shared) continue; - intr_wrap = &pcibr_soft->bs_intr[pcibr_int_bit].bsi_pcibr_intr_wrap; - if (!pcibr_soft->bs_intr[pcibr_int_bit].bsi_pcibr_intr_wrap.iw_shared) - continue; - - int_addr = (void *)&(bridge->p_int_addr_64[pcibr_int_bit]); - + pcibr_soft->bs_intr[pcibr_int_bit].bsi_int_bit = + ((pcibr_soft->bs_busnum << 3) | pcibr_int_bit); xtalk_intr_connect(pcibr_soft->bs_intr[pcibr_int_bit].bsi_xtalk_intr, - pcibr_intr_func, (intr_arg_t) intr_wrap, - (xtalk_intr_setfunc_t)pcibr_setpciint, - (void *)(long)pcibr_int_bit); + NULL, + (intr_arg_t) intr_wrap, + (xtalk_intr_setfunc_t) pcibr_setpciint, + &pcibr_soft->bs_intr[pcibr_int_bit].bsi_int_bit); + PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_INTR_ALLOC, pcibr_intr->bi_dev, "pcibr_intr_disconnect: now-sharing int_bits=0x%x\n", pcibr_int_bit)); @@ -711,10 +680,9 @@ * INTERRUPT HANDLING */ void -pcibr_clearwidint(bridge_t *bridge) +pcibr_clearwidint(pcibr_soft_t pcibr_soft) { - bridge->b_wid_int_upper = 0; - bridge->b_wid_int_lower = 0; + pcireg_intr_dst_set(pcibr_soft, 0); } @@ -724,257 +692,10 @@ xwidgetnum_t targ = xtalk_intr_target_get(intr); iopaddr_t addr = xtalk_intr_addr_get(intr); xtalk_intr_vector_t vect = xtalk_intr_vector_get(intr); - widgetreg_t NEW_b_wid_int_upper, NEW_b_wid_int_lower; - widgetreg_t OLD_b_wid_int_upper, OLD_b_wid_int_lower; - - bridge_t *bridge = (bridge_t *)xtalk_intr_sfarg_get(intr); - - NEW_b_wid_int_upper = ( (0x000F0000 & (targ << 16)) | - XTALK_ADDR_TO_UPPER(addr)); - NEW_b_wid_int_lower = XTALK_ADDR_TO_LOWER(addr); - - OLD_b_wid_int_upper = bridge->b_wid_int_upper; - OLD_b_wid_int_lower = bridge->b_wid_int_lower; - - /* Verify that all interrupts from this Bridge are using a single PI */ - if ((OLD_b_wid_int_upper != 0) && (OLD_b_wid_int_lower != 0)) { - /* - * Once set, these registers shouldn't change; they should - * be set multiple times with the same values. - * - * If we're attempting to change these registers, it means - * that our heuristics for allocating interrupts in a way - * appropriate for IP35 have failed, and the admin needs to - * explicitly direct some interrupts (or we need to make the - * heuristics more clever). - * - * In practice, we hope this doesn't happen very often, if - * at all. - */ - if ((OLD_b_wid_int_upper != NEW_b_wid_int_upper) || - (OLD_b_wid_int_lower != NEW_b_wid_int_lower)) { - printk(KERN_WARNING "Interrupt allocation is too complex.\n"); - printk(KERN_WARNING "Use explicit administrative interrupt targetting.\n"); - printk(KERN_WARNING "bridge=0x%lx targ=0x%x\n", (unsigned long)bridge, targ); - printk(KERN_WARNING "NEW=0x%x/0x%x OLD=0x%x/0x%x\n", - NEW_b_wid_int_upper, NEW_b_wid_int_lower, - OLD_b_wid_int_upper, OLD_b_wid_int_lower); - panic("PCI Bridge interrupt targetting error\n"); - } - } - - bridge->b_wid_int_upper = NEW_b_wid_int_upper; - bridge->b_wid_int_lower = NEW_b_wid_int_lower; - bridge->b_int_host_err = vect; - -} - -/* - * pcibr_intr_preset: called during mlreset time - * if the platform specific code needs to route - * one of the Bridge's xtalk interrupts before the - * xtalk infrastructure is available. - */ -void -pcibr_xintr_preset(void *which_widget, - int which_widget_intr, - xwidgetnum_t targ, - iopaddr_t addr, - xtalk_intr_vector_t vect) -{ - bridge_t *bridge = (bridge_t *) which_widget; - - if (which_widget_intr == -1) { - /* bridge widget error interrupt */ - bridge->b_wid_int_upper = ( (0x000F0000 & (targ << 16)) | - XTALK_ADDR_TO_UPPER(addr)); - bridge->b_wid_int_lower = XTALK_ADDR_TO_LOWER(addr); - bridge->b_int_host_err = vect; -printk("pcibr_xintr_preset: b_wid_int_upper 0x%lx b_wid_int_lower 0x%lx b_int_host_err 0x%x\n", - ( (0x000F0000 & (targ << 16)) | XTALK_ADDR_TO_UPPER(addr)), - XTALK_ADDR_TO_LOWER(addr), vect); - - /* turn on all interrupts except - * the PCI interrupt requests, - * at least at heart. - */ - bridge->b_int_enable |= ~BRIDGE_IMR_INT_MSK; - - } else { - /* routing a PCI device interrupt. - * targ and low 38 bits of addr must - * be the same as the already set - * value for the widget error interrupt. - */ - bridge->b_int_addr[which_widget_intr].addr = - ((BRIDGE_INT_ADDR_HOST & (addr >> 30)) | - (BRIDGE_INT_ADDR_FLD & vect)); - /* - * now bridge can let it through; - * NB: still should be blocked at - * xtalk provider end, until the service - * function is set. - */ - bridge->b_int_enable |= 1 << vect; - } - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ -} - -/* - * pcibr_intr_func() - * - * This is the pcibr interrupt "wrapper" function that is called, - * in interrupt context, to initiate the interrupt handler(s) registered - * (via pcibr_intr_alloc/connect) for the occurring interrupt. Non-threaded - * handlers will be called directly, and threaded handlers will have their - * thread woken up. - */ -void -pcibr_intr_func(intr_arg_t arg) -{ - pcibr_intr_wrap_t wrap = (pcibr_intr_wrap_t) arg; - reg_p wrbf; - intr_func_t func; - pcibr_intr_t intr; - pcibr_intr_list_t list; - int clearit; - int do_nonthreaded = 1; - int is_threaded = 0; - int x = 0; - pcibr_soft_t pcibr_soft = wrap->iw_soft; - bridge_t *bridge = pcibr_soft->bs_base; - uint64_t p_enable = pcibr_soft->bs_int_enable; - int bit = wrap->iw_ibit; - - /* - * PIC WAR. PV#855272 - * Early attempt at a workaround for the runaway - * interrupt problem. Briefly disable the enable bit for - * this device. - */ - if (PCIBR_WAR_ENABLED(PV855272, pcibr_soft)) { - unsigned s; - - /* disable-enable interrupts for this bridge pin */ - - p_enable &= ~(1 << bit); - s = pcibr_lock(pcibr_soft); - bridge->p_int_enable_64 = p_enable; - p_enable |= (1 << bit); - bridge->p_int_enable_64 = p_enable; - pcibr_unlock(pcibr_soft, s); - } - - /* - * If any handler is still running from a previous interrupt - * just return. If there's a need to call the handler(s) again, - * another interrupt will be generated either by the device or by - * pcibr_force_interrupt(). - */ - - if (wrap->iw_hdlrcnt) { - return; - } - - /* - * Call all interrupt handlers registered. - * First, the pcibr_intrd threads for any threaded handlers will be - * awoken, then any non-threaded handlers will be called sequentially. - */ - - clearit = 1; - while (do_nonthreaded) { - for (list = wrap->iw_list; list != NULL; list = list->il_next) { - if ((intr = list->il_intr) && (intr->bi_flags & PCIIO_INTR_CONNECTED)) { + pcibr_soft_t bridge = (pcibr_soft_t)xtalk_intr_sfarg_get(intr); - - /* - * This device may have initiated write - * requests since the bridge last saw - * an edge on this interrupt input; flushing - * the buffer prior to invoking the handler - * should help but may not be sufficient if we - * get more requests after the flush, followed - * by the card deciding it wants service, before - * the interrupt handler checks to see if things need - * to be done. - * - * There is a similar race condition if - * an interrupt handler loops around and - * notices further service is requred. - * Perhaps we need to have an explicit - * call that interrupt handlers need to - * do between noticing that DMA to memory - * has completed, but before observing the - * contents of memory? - */ - - if ((do_nonthreaded) && (!is_threaded)) { - /* Non-threaded - Call the interrupt handler at interrupt level */ - /* Only need to flush write buffers if sharing */ - - if ((wrap->iw_shared) && (wrbf = list->il_wrbf)) { - if ((x = *wrbf)) /* write request buffer flush */ -#ifdef SUPPORT_PRINTING_V_FORMAT - printk(KERN_ALERT "pcibr_intr_func %v: \n" - "write buffer flush failed, wrbf=0x%x\n", - list->il_intr->bi_dev, wrbf); -#else - printk(KERN_ALERT "pcibr_intr_func %p: \n" - "write buffer flush failed, wrbf=0x%lx\n", - (void *)list->il_intr->bi_dev, (long) wrbf); -#endif - } - func = intr->bi_func; - if ( func ) - func(intr->bi_arg); - } - clearit = 0; - } - } - do_nonthreaded = 0; - - /* - * If the non-threaded handler was the last to complete, - * (i.e., no threaded handlers still running) force an - * interrupt to avoid a potential deadlock situation. - */ - if (wrap->iw_hdlrcnt == 0) { - pcibr_force_interrupt((pcibr_intr_t) wrap); - } - } - - /* If there were no handlers, - * disable the interrupt and return. - * It will get enabled again after - * a handler is connected. - * If we don't do this, we would - * sit here and spin through the - * list forever. - */ - if (clearit) { - pcibr_soft_t pcibr_soft = wrap->iw_soft; - bridge_t *bridge = pcibr_soft->bs_base; - bridgereg_t int_enable; - bridgereg_t mask = 1 << wrap->iw_ibit; - unsigned long s; - - /* PIC BRINUGP WAR (PV# 854697): - * On PIC we must write 64-bit MMRs with 64-bit stores - */ - s = pcibr_lock(pcibr_soft); - if (PCIBR_WAR_ENABLED(PV854697, pcibr_soft)) { - int_enable = bridge->p_int_enable_64; - int_enable &= ~mask; - bridge->p_int_enable_64 = int_enable; - } else { - int_enable = (uint64_t)bridge->b_int_enable; - int_enable &= ~mask; - bridge->b_int_enable = (bridgereg_t)int_enable; - } - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ - pcibr_unlock(pcibr_soft, s); - return; - } + pcireg_intr_dst_target_id_set(bridge, targ); + pcireg_intr_dst_addr_set(bridge, addr); + pcireg_intr_host_err_set(bridge, vect); } diff -Nru a/arch/ia64/sn/io/sn2/pcibr/pcibr_reg.c b/arch/ia64/sn/io/sn2/pcibr/pcibr_reg.c --- a/arch/ia64/sn/io/sn2/pcibr/pcibr_reg.c Wed Feb 4 16:51:37 2004 +++ b/arch/ia64/sn/io/sn2/pcibr/pcibr_reg.c Wed Feb 4 16:51:37 2004 @@ -14,94 +14,867 @@ #include #include -#define IS_IOADDR(ptr) (!(((uint64_t)(ptr) & CAC_BASE) == CAC_BASE)) /* - * Control Register Access -- Read/Write 0000_0020 + * Identification Register Access -- Read Only 0000_0000 */ +static uint64_t +__pcireg_id_get(pic_t *bridge) +{ + return bridge->p_wid_id; +} uint64_t -pcireg_control_get(void *ptr) +pcireg_bridge_id_get(void *ptr) { - uint64_t ret = 0; - pic_t *bridge; + return __pcireg_id_get((pic_t *)ptr); +} - if (IS_IOADDR(ptr)) - bridge = (pic_t *) ptr; - else - bridge = (pic_t *) ((pcibr_soft_t) (ptr))->bs_base; +uint64_t +pcireg_id_get(pcibr_soft_t ptr) +{ + return __pcireg_id_get((pic_t *)ptr->bs_base); +} - ret = ((pic_t *) bridge)->p_wid_control; - return ret; + + +/* + * Address Bus Side Holding Register Access -- Read Only 0000_0010 + */ +uint64_t +pcireg_bus_err_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_wid_err; } + /* - * Interrupt Status Register Access -- Read Only 0000_0100 + * Control Register Access -- Read/Write 0000_0020 */ +static uint64_t +__pcireg_control_get(pic_t *bridge) +{ + return bridge->p_wid_control; +} + +uint64_t +pcireg_bridge_control_get(void *ptr) +{ + return __pcireg_control_get((pic_t *)ptr); +} + uint64_t -pcireg_intr_status_get(void *ptr) +pcireg_control_get(pcibr_soft_t ptr) +{ + return __pcireg_control_get((pic_t *)ptr->bs_base); +} + + +void +pcireg_control_set(pcibr_soft_t ptr, uint64_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + /* WAR for PV 439897 & 454474. Add a readback of the control + * register. Lock to protect against MP accesses to this + * register along with other write-only registers (See PVs). + * This register isnt accessed in the "hot path" so the splhi + * shouldn't be a bottleneck + */ + + bridge->p_wid_control = val; + bridge->p_wid_control; /* WAR */ +} + + +void +pcireg_control_bit_clr(pcibr_soft_t ptr, uint64_t bits) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + /* WAR for PV 439897 & 454474. Add a readback of the control + * register. Lock to protect against MP accesses to this + * register along with other write-only registers (See PVs). + * This register isnt accessed in the "hot path" so the splhi + * shouldn't be a bottleneck + */ + + bridge->p_wid_control &= ~bits; + bridge->p_wid_control; /* WAR */ +} + + +void +pcireg_control_bit_set(pcibr_soft_t ptr, uint64_t bits) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + /* WAR for PV 439897 & 454474. Add a readback of the control + * register. Lock to protect against MP accesses to this + * register along with other write-only registers (See PVs). + * This register isnt accessed in the "hot path" so the splhi + * shouldn't be a bottleneck + */ + + bridge->p_wid_control |= bits; + bridge->p_wid_control; /* WAR */ +} + +/* + * Bus Speed (from control register); -- Read Only access 0000_0020 + * 0x00 == 33MHz, 0x01 == 66MHz, 0x10 == 100MHz, 0x11 == 133MHz + */ +uint64_t +pcireg_speed_get(pcibr_soft_t ptr) +{ + uint64_t speedbits; + pic_t *bridge = (pic_t *)ptr->bs_base; + + speedbits = bridge->p_wid_control & PIC_CTRL_PCI_SPEED; + return (speedbits >> 4); +} + +/* + * Bus Mode (ie. PCIX or PCI) (from Status register); 0000_0008 + * 0x0 == PCI, 0x1 == PCI-X + */ +uint64_t +pcireg_mode_get(pcibr_soft_t ptr) +{ + uint64_t pcix_active_bit; + pic_t *bridge = (pic_t *)ptr->bs_base; + + pcix_active_bit = bridge->p_wid_stat & PIC_STAT_PCIX_ACTIVE; + return (pcix_active_bit >> PIC_STAT_PCIX_ACTIVE_SHFT); +} + +void +pcireg_req_timeout_set(pcibr_soft_t ptr, uint64_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_wid_req_timeout = val; +} + +/* + * Interrupt Destination Addr Register Access -- Read/Write 0000_0038 + */ + +void +pcireg_intr_dst_set(pcibr_soft_t ptr, uint64_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_wid_int = val; +} + +/* + * Intr Destination Addr Reg Access (target_id) -- Read/Write 0000_0038 + */ +uint64_t +pcireg_intr_dst_target_id_get(pcibr_soft_t ptr) +{ + uint64_t tid_bits; + pic_t *bridge = (pic_t *)ptr->bs_base; + + tid_bits = (bridge->p_wid_int & PIC_INTR_DEST_TID); + return (tid_bits >> PIC_INTR_DEST_TID_SHFT); +} + +void +pcireg_intr_dst_target_id_set(pcibr_soft_t ptr, uint64_t target_id) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_wid_int &= ~PIC_INTR_DEST_TID; + bridge->p_wid_int |= + ((target_id << PIC_INTR_DEST_TID_SHFT) & PIC_INTR_DEST_TID); +} + +/* + * Intr Destination Addr Register Access (addr) -- Read/Write 0000_0038 + */ +uint64_t +pcireg_intr_dst_addr_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_wid_int & PIC_XTALK_ADDR_MASK; +} + +void +pcireg_intr_dst_addr_set(pcibr_soft_t ptr, uint64_t addr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_wid_int &= ~PIC_XTALK_ADDR_MASK; + bridge->p_wid_int |= (addr & PIC_XTALK_ADDR_MASK); +} + +/* + * Cmd Word Holding Bus Side Error Register Access -- Read Only 0000_0040 + */ +uint64_t +pcireg_cmdword_err_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_wid_err_cmdword; +} + +/* + * PCI/PCIX Target Flush Register Access -- Read Only 0000_0050 + */ +uint64_t +pcireg_tflush_get(pcibr_soft_t ptr) { - short bridge_type; - pic_t *bridge; uint64_t ret = 0; + pic_t *bridge = (pic_t *)ptr->bs_base; - if (IS_IOADDR(ptr)) - bridge = (pic_t *) ptr; - else - bridge = (pic_t *) ((pcibr_soft_t) (ptr))->bs_base; + ret = bridge->p_wid_tflush; - ret = ((pic_t *) bridge)->p_int_status; + /* Read of the Targer Flush should always return zero */ + ASSERT_ALWAYS(ret == 0); return ret; } +/* + * Cmd Word Holding Link Side Error Register Access -- Read Only 0000_0058 + */ +uint64_t +pcireg_linkside_err_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_wid_aux_err; +} + +/* + * PCI Response Buffer Address Holding Register -- Read Only 0000_0068 + */ +uint64_t +pcireg_resp_err_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_wid_resp; +} + +/* + * PCI Resp Buffer Address Holding Reg (Address) -- Read Only 0000_0068 + */ +uint64_t +pcireg_resp_err_addr_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_wid_resp & PIC_RSP_BUF_ADDR; +} + +/* + * PCI Resp Buffer Address Holding Register (Buffer)-- Read Only 0000_0068 + */ +uint64_t +pcireg_resp_err_buf_get(pcibr_soft_t ptr) +{ + uint64_t bufnum_bits; + pic_t *bridge = (pic_t *)ptr->bs_base; + + bufnum_bits = (bridge->p_wid_resp_upper & PIC_RSP_BUF_NUM); + return (bufnum_bits >> PIC_RSP_BUF_NUM_SHFT); +} + +/* + * PCI Resp Buffer Address Holding Register (Device)-- Read Only 0000_0068 + */ +uint64_t +pcireg_resp_err_dev_get(pcibr_soft_t ptr) +{ + uint64_t devnum_bits; + pic_t *bridge = (pic_t *)ptr->bs_base; + + devnum_bits = (bridge->p_wid_resp_upper & PIC_RSP_BUF_DEV_NUM); + return (devnum_bits >> PIC_RSP_BUF_DEV_NUM_SHFT); +} + +/* + * Address Holding Register Link Side Errors -- Read Only 0000_0078 + */ +uint64_t +pcireg_linkside_err_addr_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_wid_addr_lkerr; +} + +void +pcireg_dirmap_wid_set(pcibr_soft_t ptr, uint64_t target) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_dir_map &= ~PIC_DIRMAP_WID; + bridge->p_dir_map |= + ((target << PIC_DIRMAP_WID_SHFT) & PIC_DIRMAP_WID); +} + +void +pcireg_dirmap_diroff_set(pcibr_soft_t ptr, uint64_t dir_off) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_dir_map &= ~PIC_DIRMAP_DIROFF; + bridge->p_dir_map |= (dir_off & PIC_DIRMAP_DIROFF); +} + +void +pcireg_dirmap_add512_set(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_dir_map |= PIC_DIRMAP_ADD512; +} + +void +pcireg_dirmap_add512_clr(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_dir_map &= ~PIC_DIRMAP_ADD512; +} + +/* + * PCI Page Map Fault Address Register Access -- Read Only 0000_0090 + */ +uint64_t +pcireg_map_fault_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_map_fault; +} + +/* + * Arbitration Register Access -- Read/Write 0000_00A0 + */ +uint64_t +pcireg_arbitration_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_arb; +} + +void +pcireg_arbitration_bit_set(pcibr_soft_t ptr, uint64_t bits) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_arb |= bits; +} + +/* + * Internal Ram Parity Error Register Access -- Read Only 0000_00B0 + */ +uint64_t +pcireg_parity_err_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_ate_parity_err; +} + +/* + * Type 1 Configuration Register Access -- Read/Write 0000_00C8 + */ +void +pcireg_type1_cntr_set(pcibr_soft_t ptr, uint64_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_pci_cfg = val; +} + +/* + * PCI Bus Error Lower Addr Holding Reg Access -- Read Only 0000_00D8 + */ +uint64_t +pcireg_pci_bus_addr_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_pci_err; +} + +/* + * PCI Bus Error Addr Holding Reg Access (Address) -- Read Only 0000_00D8 + */ +uint64_t +pcireg_pci_bus_addr_addr_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_pci_err & PIC_XTALK_ADDR_MASK; +} + +/* + * Interrupt Status Register Access -- Read Only 0000_0100 + */ +uint64_t +pcireg_intr_status_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_int_status; +} + +/* + * Interrupt Enable Register Access -- Read/Write 0000_0108 + */ +uint64_t +pcireg_intr_enable_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_int_enable; +} + +void +pcireg_intr_enable_set(pcibr_soft_t ptr, uint64_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_int_enable = val; +} + void -pcireg_intr_enable_bit_clr(void *ptr, uint64_t bits) +pcireg_intr_enable_bit_clr(pcibr_soft_t ptr, uint64_t bits) { - pic_t *bridge; + pic_t *bridge = (pic_t *)ptr->bs_base; - if (IS_IOADDR(ptr)) - bridge = (pic_t *) ptr; - else - bridge = (pic_t *) ((pcibr_soft_t) (ptr))->bs_base; bridge->p_int_enable &= ~bits; } void -pcireg_intr_enable_bit_set(void *ptr, uint64_t bits) +pcireg_intr_enable_bit_set(pcibr_soft_t ptr, uint64_t bits) { - pic_t *bridge; + pic_t *bridge = (pic_t *)ptr->bs_base; - if (IS_IOADDR(ptr)) - bridge = (pic_t *) ptr; - else - bridge = (pic_t *) ((pcibr_soft_t) (ptr))->bs_base; bridge->p_int_enable |= bits; } +/* + * Interrupt Reset Register Access -- Write Only 0000_0110 + */ +void +pcireg_intr_reset_set(pcibr_soft_t ptr, uint64_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_int_rst_stat = val; +} + +void +pcireg_intr_mode_set(pcibr_soft_t ptr, uint64_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_int_mode = val; +} + void -pcireg_intr_addr_addr_set(void *ptr, int int_n, uint64_t addr) +pcireg_intr_device_set(pcibr_soft_t ptr, uint64_t val) { - pic_t *bridge; + pic_t *bridge = (pic_t *)ptr->bs_base; - if (IS_IOADDR(ptr)) - bridge = (pic_t *) ptr; - else - bridge = (pic_t *) ((pcibr_soft_t) (ptr))->bs_base; - bridge->p_int_addr[int_n] &= ~(0x0000FFFFFFFFFFFF); - bridge->p_int_addr[int_n] |= (addr & 0x0000FFFFFFFFFFFF); + bridge->p_int_device = val; +} + +static void +__pcireg_intr_device_bit_set(pic_t *bridge, uint64_t bits) +{ + bridge->p_int_device |= bits; +} + +void +pcireg_bridge_intr_device_bit_set(void *ptr, uint64_t bits) +{ + __pcireg_intr_device_bit_set((pic_t *)ptr, bits); +} + +void +pcireg_intr_device_bit_set(pcibr_soft_t ptr, uint64_t bits) +{ + __pcireg_intr_device_bit_set((pic_t *)ptr->bs_base, bits); +} + +void +pcireg_intr_device_bit_clr(pcibr_soft_t ptr, uint64_t bits) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_int_device &= ~bits; } /* - * Force Interrupt Register Access -- Write Only 0000_01C0 - 0000_01F8 + * Host Error Interrupt Field Register Access -- Read/Write 0000_0128 */ void -pcireg_force_intr_set(void *ptr, int int_n) +pcireg_intr_host_err_set(pcibr_soft_t ptr, uint64_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_int_host_err = val; +} + +/* + * Interrupt Host Address Register -- Read/Write 0000_0130 - 0000_0168 + */ +uint64_t +pcireg_intr_addr_get(pcibr_soft_t ptr, int int_n) { - pic_t *bridge; + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_int_addr[int_n]; +} + +static void +__pcireg_intr_addr_set(pic_t *bridge, int int_n, uint64_t val) +{ + bridge->p_int_addr[int_n] = val; +} + +void +pcireg_bridge_intr_addr_set(void *ptr, int int_n, uint64_t val) +{ + __pcireg_intr_addr_set((pic_t *)ptr, int_n, val); +} + +void +pcireg_intr_addr_set(pcibr_soft_t ptr, int int_n, uint64_t val) +{ + __pcireg_intr_addr_set((pic_t *)ptr->bs_base, int_n, val); +} + +void * +pcireg_intr_addr_addr(pcibr_soft_t ptr, int int_n) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return (void *)&(bridge->p_int_addr[int_n]); +} + +static void +__pcireg_intr_addr_vect_set(pic_t *bridge, int int_n, uint64_t vect) +{ + bridge->p_int_addr[int_n] &= ~PIC_HOST_INTR_FLD; + bridge->p_int_addr[int_n] |= + ((vect << PIC_HOST_INTR_FLD_SHFT) & PIC_HOST_INTR_FLD); +} + +void +pcireg_bridge_intr_addr_vect_set(void *ptr, int int_n, uint64_t vect) +{ + __pcireg_intr_addr_vect_set((pic_t *)ptr, int_n, vect); +} + +void +pcireg_intr_addr_vect_set(pcibr_soft_t ptr, int int_n, uint64_t vect) +{ + __pcireg_intr_addr_vect_set((pic_t *)ptr->bs_base, int_n, vect); +} + + + +/* + * Intr Host Address Register (int_addr) -- Read/Write 0000_0130 - 0000_0168 + */ +static void +__pcireg_intr_addr_addr_set(pic_t *bridge, int int_n, uint64_t addr) +{ + bridge->p_int_addr[int_n] &= ~PIC_HOST_INTR_ADDR; + bridge->p_int_addr[int_n] |= (addr & PIC_HOST_INTR_ADDR); +} + +void +pcireg_bridge_intr_addr_addr_set(void *ptr, int int_n, uint64_t addr) +{ + __pcireg_intr_addr_addr_set((pic_t *)ptr, int_n, addr); +} + +void +pcireg_intr_addr_addr_set(pcibr_soft_t ptr, int int_n, uint64_t addr) +{ + __pcireg_intr_addr_addr_set((pic_t *)ptr->bs_base, int_n, addr); +} + +/* + * Multiple Interrupt Register Access -- Read Only 0000_0178 + */ +uint64_t +pcireg_intr_multiple_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_mult_int; +} + +/* + * Force Always Intr Register Access -- Write Only 0000_0180 - 0000_01B8 + */ +static void * +__pcireg_force_always_addr_get(pic_t *bridge, int int_n) +{ + return (void *)&(bridge->p_force_always[int_n]); +} + +void * +pcireg_bridge_force_always_addr_get(void *ptr, int int_n) +{ + return __pcireg_force_always_addr_get((pic_t *)ptr, int_n); +} + +void * +pcireg_force_always_addr_get(pcibr_soft_t ptr, int int_n) +{ + return __pcireg_force_always_addr_get((pic_t *)ptr->bs_base, int_n); +} + +/* + * Force Interrupt Register Access -- Write Only 0000_01C0 - 0000_01F8 + */ +void +pcireg_force_intr_set(pcibr_soft_t ptr, int int_n) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; - if (IS_IOADDR(ptr)) - bridge = (pic_t *) ptr; - else - bridge = (pic_t *) ((pcibr_soft_t) (ptr))->bs_base; bridge->p_force_pin[int_n] = 1; +} + +/* + * Device(x) Register Access -- Read/Write 0000_0200 - 0000_0218 + */ +uint64_t +pcireg_device_get(pcibr_soft_t ptr, int device) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + ASSERT_ALWAYS((device >= 0) && (device <= 3)); + return bridge->p_device[device]; +} + +void +pcireg_device_set(pcibr_soft_t ptr, int device, uint64_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + ASSERT_ALWAYS((device >= 0) && (device <= 3)); + bridge->p_device[device] = val; +} + +/* + * Device(x) Write Buffer Flush Reg Access -- Read Only 0000_0240 - 0000_0258 + */ +uint64_t +pcireg_wrb_flush_get(pcibr_soft_t ptr, int device) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + uint64_t ret = 0; + + ASSERT_ALWAYS((device >= 0) && (device <= 3)); + ret = bridge->p_wr_req_buf[device]; + + /* Read of the Write Buffer Flush should always return zero */ + ASSERT_ALWAYS(ret == 0); + return ret; +} + +/* + * Even/Odd RRB Register Access -- Read/Write 0000_0280 - 0000_0288 + */ +uint64_t +pcireg_rrb_get(pcibr_soft_t ptr, int even_odd) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_rrb_map[even_odd]; +} + +void +pcireg_rrb_set(pcibr_soft_t ptr, int even_odd, uint64_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_rrb_map[even_odd] = val; +} + +void +pcireg_rrb_bit_set(pcibr_soft_t ptr, int even_odd, uint64_t bits) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_rrb_map[even_odd] |= bits; +} + +/* + * RRB Status Register Access -- Read Only 0000_0290 + */ +uint64_t +pcireg_rrb_status_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_resp_status; +} + +/* + * RRB Clear Register Access -- Write Only 0000_0298 + */ +void +pcireg_rrb_clear_set(pcibr_soft_t ptr, uint64_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + bridge->p_resp_clear = val; +} + +/* + * PCIX Bus Error Address Register Access -- Read Only 0000_0600 + */ +uint64_t +pcireg_pcix_bus_err_addr_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_pcix_bus_err_addr; +} + +/* + * PCIX Bus Error Attribute Register Access -- Read Only 0000_0608 + */ +uint64_t +pcireg_pcix_bus_err_attr_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_pcix_bus_err_attr; +} + +/* + * PCIX Bus Error Data Register Access -- Read Only 0000_0610 + */ +uint64_t +pcireg_pcix_bus_err_data_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_pcix_bus_err_data; +} + +/* + * PCIX PIO Split Request Address Register Access -- Read Only 0000_0618 + */ +uint64_t +pcireg_pcix_pio_split_addr_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_pcix_pio_split_addr; +} + +/* + * PCIX PIO Split Request Attribute Register Access -- Read Only 0000_0620 + */ +uint64_t +pcireg_pcix_pio_split_attr_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_pcix_pio_split_attr; +} + +/* + * PCIX DMA Request Error Attribute Register Access -- Read Only 0000_0628 + */ +uint64_t +pcireg_pcix_req_err_attr_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_pcix_dma_req_err_attr; +} + +/* + * PCIX DMA Request Error Address Register Access -- Read Only 0000_0630 + */ +uint64_t +pcireg_pcix_req_err_addr_get(pcibr_soft_t ptr) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + return bridge->p_pcix_dma_req_err_addr; +} + +/* + * Type 0 Configuration Space Access -- Read/Write + */ +cfg_p +pcireg_type0_cfg_addr(pcibr_soft_t ptr, uint8_t slot, uint8_t func, int off) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + /* Type 0 Config space accesses on PIC are 1-4, not 0-3 since + * it is a PCIX Bridge. See sys/PCI/pic.h for explanation. + */ + slot++; + ASSERT_ALWAYS(((int) slot >= 1) && ((int) slot <= 4)); + return &(bridge->p_type0_cfg_dev[slot].f[func].l[(off / 4)]); +} + +/* + * Type 1 Configuration Space Access -- Read/Write + */ +cfg_p +pcireg_type1_cfg_addr(pcibr_soft_t ptr, uint8_t func, int offset) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + /* + * Return a config space address for the given slot/func/offset. + * Note the returned ptr is a 32bit word (ie. cfg_p) aligned ptr + * pointing to the 32bit word that contains the "offset" byte. + */ + return &(bridge->p_type1_cfg.f[func].l[(offset / 4)]); +} + +/* + * Internal ATE SSRAM Access -- Read/Write + */ +bridge_ate_t +pcireg_int_ate_get(pcibr_soft_t ptr, int ate_index) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + ASSERT_ALWAYS((ate_index >= 0) && (ate_index <= 1024)); + return bridge->p_int_ate_ram[ate_index]; +} + +void +pcireg_int_ate_set(pcibr_soft_t ptr, int ate_index, bridge_ate_t val) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + ASSERT_ALWAYS((ate_index >= 0) && (ate_index <= 1024)); + bridge->p_int_ate_ram[ate_index] = (picate_t) val; +} + +bridge_ate_p +pcireg_int_ate_addr(pcibr_soft_t ptr, int ate_index) +{ + pic_t *bridge = (pic_t *)ptr->bs_base; + + ASSERT_ALWAYS((ate_index >= 0) && (ate_index <= 1024)); + return &(bridge->p_int_ate_ram[ate_index]); } diff -Nru a/arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c b/arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c --- a/arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c Wed Feb 4 16:51:37 2004 +++ b/arch/ia64/sn/io/sn2/pcibr/pcibr_rrb.c Wed Feb 4 16:51:37 2004 @@ -14,23 +14,19 @@ #include #include -void do_pcibr_rrb_clear(bridge_t *, int); -void do_pcibr_rrb_flush(bridge_t *, int); -int do_pcibr_rrb_count_valid(bridge_t *, pciio_slot_t, int); -int do_pcibr_rrb_count_avail(bridge_t *, pciio_slot_t); -int do_pcibr_rrb_alloc(bridge_t *, pciio_slot_t, int, int); -int do_pcibr_rrb_free(bridge_t *, pciio_slot_t, int, int); -void do_pcibr_rrb_free_all(pcibr_soft_t, bridge_t *, pciio_slot_t); - -void do_pcibr_rrb_autoalloc(pcibr_soft_t, int, int, int); - -int pcibr_wrb_flush(vertex_hdl_t); -int pcibr_rrb_alloc(vertex_hdl_t, int *, int *); -int pcibr_rrb_check(vertex_hdl_t, int *, int *, int *, int *); -void pcibr_rrb_flush(vertex_hdl_t); -int pcibr_slot_initial_rrb_alloc(vertex_hdl_t,pciio_slot_t); +void pcibr_rrb_alloc_init(pcibr_soft_t, int, int, int); +void pcibr_rrb_alloc_more(pcibr_soft_t, int, int, int); + +int pcibr_wrb_flush(vertex_hdl_t); +int pcibr_rrb_alloc(vertex_hdl_t, int *, int *); +int pcibr_rrb_check(vertex_hdl_t, int *, int *, int *, int *); +int pcibr_alloc_all_rrbs(vertex_hdl_t, int, int, int, int, + int, int, int, int, int); +void pcibr_rrb_flush(vertex_hdl_t); +int pcibr_slot_initial_rrb_alloc(vertex_hdl_t,pciio_slot_t); + +void pcibr_rrb_debug(char *, pcibr_soft_t); -void pcibr_rrb_debug(char *, pcibr_soft_t); /* * RRB Management @@ -52,23 +48,27 @@ #define RRB_MASK (0xf) /* mask a single rrb within reg */ #define RRB_SIZE (4) /* sizeof rrb within reg (bits) */ -#define RRB_ENABLE_BIT(bridge) (0x8) /* [BRIDGE | PIC]_RRB_EN */ -#define NUM_PDEV_BITS(bridge) (1) -#define NUM_VDEV_BITS(bridge) (2) -#define NUMBER_VCHANNELS(bridge) (4) -#define SLOT_2_PDEV(bridge, slot) ((slot) >> 1) -#define SLOT_2_RRB_REG(bridge, slot) ((slot) & 0x1) - -/* validate that the slot and virtual channel are valid for a given bridge */ -#define VALIDATE_SLOT_n_VCHAN(bridge, s, v) \ - (((((s) != PCIIO_SLOT_NONE) && ((s) <= (pciio_slot_t)3)) && (((v) >= 0) && ((v) <= 3))) ? 1 : 0) +#define RRB_ENABLE_BIT (0x8) /* [BRIDGE | PIC]_RRB_EN */ +#define NUM_PDEV_BITS (1) +#define NUMBER_VCHANNELS (4) +#define SLOT_2_PDEV(slot) ((slot) >> 1) +#define SLOT_2_RRB_REG(slot) ((slot) & 0x1) + +#define RRB_VALID(rrb) (0x00010000 << (rrb)) +#define RRB_INUSE(rrb) (0x00000001 << (rrb)) +#define RRB_CLEAR(rrb) (0x00000001 << (rrb)) + +/* validate that the slot and virtual channel are valid */ +#define VALIDATE_SLOT_n_VCHAN(s, v) \ + (((((s) != PCIIO_SLOT_NONE) && ((s) <= (pciio_slot_t)3)) && \ + (((v) >= 0) && ((v) <= 3))) ? 1 : 0) /* * Count how many RRBs are marked valid for the specified PCI slot * and virtual channel. Return the count. */ -int -do_pcibr_rrb_count_valid(bridge_t *bridge, +static int +do_pcibr_rrb_count_valid(pcibr_soft_t pcibr_soft, pciio_slot_t slot, int vchan) { @@ -76,18 +76,18 @@ uint16_t enable_bit, vchan_bits, pdev_bits, rrb_bits; int rrb_index, cnt=0; - if (!VALIDATE_SLOT_n_VCHAN(bridge, slot, vchan)) { + if (!VALIDATE_SLOT_n_VCHAN(slot, vchan)) { printk(KERN_WARNING "do_pcibr_rrb_count_valid() invalid slot/vchan [%d/%d]\n", slot, vchan); return 0; } - enable_bit = RRB_ENABLE_BIT(bridge); - vchan_bits = vchan << NUM_PDEV_BITS(bridge); - pdev_bits = SLOT_2_PDEV(bridge, slot); + enable_bit = RRB_ENABLE_BIT; + vchan_bits = vchan << NUM_PDEV_BITS; + pdev_bits = SLOT_2_PDEV(slot); rrb_bits = enable_bit | vchan_bits | pdev_bits; - tmp = bridge->b_rrb_map[SLOT_2_RRB_REG(bridge, slot)].reg; - + tmp = pcireg_rrb_get(pcibr_soft, SLOT_2_RRB_REG(slot)); + for (rrb_index = 0; rrb_index < 8; rrb_index++) { if ((tmp & RRB_MASK) == rrb_bits) cnt++; @@ -101,23 +101,23 @@ * Count how many RRBs are available to be allocated to the specified * slot. Return the count. */ -int -do_pcibr_rrb_count_avail(bridge_t *bridge, +static int +do_pcibr_rrb_count_avail(pcibr_soft_t pcibr_soft, pciio_slot_t slot) { uint64_t tmp; uint16_t enable_bit; int rrb_index, cnt=0; - if (!VALIDATE_SLOT_n_VCHAN(bridge, slot, 0)) { + if (!VALIDATE_SLOT_n_VCHAN(slot, 0)) { printk(KERN_WARNING "do_pcibr_rrb_count_avail() invalid slot/vchan"); return 0; } - enable_bit = RRB_ENABLE_BIT(bridge); - - tmp = bridge->b_rrb_map[SLOT_2_RRB_REG(bridge, slot)].reg; - + enable_bit = RRB_ENABLE_BIT; + + tmp = pcireg_rrb_get(pcibr_soft, SLOT_2_RRB_REG(slot)); + for (rrb_index = 0; rrb_index < 8; rrb_index++) { if ((tmp & enable_bit) != enable_bit) cnt++; @@ -135,8 +135,8 @@ * Note that if a request can be partially filled, it will be, even if * we return failure. */ -int -do_pcibr_rrb_alloc(bridge_t *bridge, +static int +do_pcibr_rrb_alloc(pcibr_soft_t pcibr_soft, pciio_slot_t slot, int vchan, int more) @@ -145,18 +145,18 @@ uint16_t enable_bit, vchan_bits, pdev_bits, rrb_bits; int rrb_index; - if (!VALIDATE_SLOT_n_VCHAN(bridge, slot, vchan)) { + if (!VALIDATE_SLOT_n_VCHAN(slot, vchan)) { printk(KERN_WARNING "do_pcibr_rrb_alloc() invalid slot/vchan"); return -1; } - enable_bit = RRB_ENABLE_BIT(bridge); - vchan_bits = vchan << NUM_PDEV_BITS(bridge); - pdev_bits = SLOT_2_PDEV(bridge, slot); + enable_bit = RRB_ENABLE_BIT; + vchan_bits = vchan << NUM_PDEV_BITS; + pdev_bits = SLOT_2_PDEV(slot); rrb_bits = enable_bit | vchan_bits | pdev_bits; - - reg = tmp = bridge->b_rrb_map[SLOT_2_RRB_REG(bridge, slot)].reg; - + + reg = tmp = pcireg_rrb_get(pcibr_soft, SLOT_2_RRB_REG(slot)); + for (rrb_index = 0; ((rrb_index < 8) && (more > 0)); rrb_index++) { if ((tmp & enable_bit) != enable_bit) { /* clear the rrb and OR in the new rrb into 'reg' */ @@ -166,11 +166,41 @@ } tmp = (tmp >> RRB_SIZE); } - - bridge->b_rrb_map[SLOT_2_RRB_REG(bridge, slot)].reg = reg; + + pcireg_rrb_set(pcibr_soft, SLOT_2_RRB_REG(slot), reg); return (more ? -1 : 0); } +/* + * Wait for the the specified rrb to have no outstanding XIO pkts + * and for all data to be drained. Mark the rrb as no longer being + * valid. + */ +static void +do_pcibr_rrb_clear(pcibr_soft_t pcibr_soft, int rrb) +{ + uint64_t status; + + /* bridge_lock must be held; this RRB must be disabled. */ + + /* wait until RRB has no outstanduing XIO packets. */ + status = pcireg_rrb_status_get(pcibr_soft); + while (status & RRB_INUSE(rrb)) { + status = pcireg_rrb_status_get(pcibr_soft); + } + + /* if the RRB has data, drain it. */ + if (status & RRB_VALID(rrb)) { + pcireg_rrb_clear_set(pcibr_soft, RRB_CLEAR(rrb)); + + /* wait until RRB is no longer valid. */ + status = pcireg_rrb_status_get(pcibr_soft); + while (status & RRB_VALID(rrb)) { + status = pcireg_rrb_status_get(pcibr_soft); + } + } +} + /* * Release some of the RRBs that have been allocated for the specified @@ -180,8 +210,8 @@ * Note that if a request can be partially fulfilled, it will be, even * if we return failure. */ -int -do_pcibr_rrb_free(bridge_t *bridge, +static int +do_pcibr_rrb_free(pcibr_soft_t pcibr_soft, pciio_slot_t slot, int vchan, int less) @@ -190,18 +220,18 @@ uint16_t enable_bit, vchan_bits, pdev_bits, rrb_bits; int rrb_index; - if (!VALIDATE_SLOT_n_VCHAN(bridge, slot, vchan)) { + if (!VALIDATE_SLOT_n_VCHAN(slot, vchan)) { printk(KERN_WARNING "do_pcibr_rrb_free() invalid slot/vchan"); return -1; } - enable_bit = RRB_ENABLE_BIT(bridge); - vchan_bits = vchan << NUM_PDEV_BITS(bridge); - pdev_bits = SLOT_2_PDEV(bridge, slot); + enable_bit = RRB_ENABLE_BIT; + vchan_bits = vchan << NUM_PDEV_BITS; + pdev_bits = SLOT_2_PDEV(slot); rrb_bits = enable_bit | vchan_bits | pdev_bits; - - reg = tmp = bridge->b_rrb_map[SLOT_2_RRB_REG(bridge, slot)].reg; - + + reg = tmp = pcireg_rrb_get(pcibr_soft, SLOT_2_RRB_REG(slot)); + for (rrb_index = 0; ((rrb_index < 8) && (less > 0)); rrb_index++) { if ((tmp & RRB_MASK) == rrb_bits) { /* @@ -210,132 +240,144 @@ * reg = reg & ~(RRB_MASK << (RRB_SIZE * rrb_index)); * But to be compatible with old code we'll only clear enable. */ - reg = reg & ~(RRB_ENABLE_BIT(bridge) << (RRB_SIZE * rrb_index)); + reg = reg & ~(RRB_ENABLE_BIT << (RRB_SIZE * rrb_index)); clr = clr | (enable_bit << (RRB_SIZE * rrb_index)); less--; } tmp = (tmp >> RRB_SIZE); } - - bridge->b_rrb_map[SLOT_2_RRB_REG(bridge, slot)].reg = reg; - + + pcireg_rrb_set(pcibr_soft, SLOT_2_RRB_REG(slot), reg); + /* call do_pcibr_rrb_clear() for all the rrbs we've freed */ for (rrb_index = 0; rrb_index < 8; rrb_index++) { - int evn_odd = SLOT_2_RRB_REG(bridge, slot); + int evn_odd = SLOT_2_RRB_REG(slot); if (clr & (enable_bit << (RRB_SIZE * rrb_index))) - do_pcibr_rrb_clear(bridge, (2 * rrb_index) + evn_odd); + do_pcibr_rrb_clear(pcibr_soft, (2 * rrb_index) + evn_odd); } return (less ? -1 : 0); } - +/* + * Flush the specified rrb by calling do_pcibr_rrb_clear(). This + * routine is just a wrapper to make sure the rrb is disabled + * before calling do_pcibr_rrb_clear(). + */ +static void +do_pcibr_rrb_flush(pcibr_soft_t pcibr_soft, int rrbn) +{ + uint64_t rrbv; + int shft = (RRB_SIZE * (rrbn >> 1)); + uint64_t ebit = RRB_ENABLE_BIT << shft; + + rrbv = pcireg_rrb_get(pcibr_soft, (rrbn & 1)); + if (rrbv & ebit) { + pcireg_rrb_set(pcibr_soft, (rrbn & 1), (rrbv & ~ebit)); + } + + do_pcibr_rrb_clear(pcibr_soft, rrbn); + + if (rrbv & ebit) { + pcireg_rrb_set(pcibr_soft, (rrbn & 1), rrbv); + } +} + /* * free all the rrbs (both the normal and virtual channels) for the * specified slot. */ void do_pcibr_rrb_free_all(pcibr_soft_t pcibr_soft, - bridge_t *bridge, pciio_slot_t slot) { int vchan; - int vchan_total = NUMBER_VCHANNELS(bridge); + int vchan_total = NUMBER_VCHANNELS; /* pretend we own all 8 rrbs and just ignore the return value */ for (vchan = 0; vchan < vchan_total; vchan++) { - (void)do_pcibr_rrb_free(bridge, slot, vchan, 8); + do_pcibr_rrb_free(pcibr_soft, slot, vchan, 8); pcibr_soft->bs_rrb_valid[slot][vchan] = 0; } } - - + + /* - * Wait for the the specified rrb to have no outstanding XIO pkts - * and for all data to be drained. Mark the rrb as no longer being - * valid. + * Initialize a slot with a given number of RRBs. (this routine + * will also give back RRBs if the slot has more than we want). */ void -do_pcibr_rrb_clear(bridge_t *bridge, int rrb) -{ - uint64_t status; +pcibr_rrb_alloc_init(pcibr_soft_t pcibr_soft, + int slot, + int vchan, + int init_rrbs) +{ + int had = pcibr_soft->bs_rrb_valid[slot][vchan]; + int have = had; + int added = 0; - /* bridge_lock must be held; - * this RRB must be disabled. - */ - - /* wait until RRB has no outstanduing XIO packets. */ - while ((status = bridge->b_resp_status) & BRIDGE_RRB_INUSE(rrb)) { - ; /* XXX- beats on bridge. bad idea? */ - } - - /* if the RRB has data, drain it. */ - if (status & BRIDGE_RRB_VALID(rrb)) { - bridge->b_resp_clear = BRIDGE_RRB_CLEAR(rrb); + for (added = 0; have < init_rrbs; ++added, ++have) { + if (pcibr_soft->bs_rrb_res[slot] > 0) + pcibr_soft->bs_rrb_res[slot]--; + else if (pcibr_soft->bs_rrb_avail[slot & 1] > 0) + pcibr_soft->bs_rrb_avail[slot & 1]--; + else + break; + if (do_pcibr_rrb_alloc(pcibr_soft, slot, vchan, 1) < 0) + break; - /* wait until RRB is no longer valid. */ - while ((status = bridge->b_resp_status) & BRIDGE_RRB_VALID(rrb)) { - ; /* XXX- beats on bridge. bad idea? */ - } + pcibr_soft->bs_rrb_valid[slot][vchan]++; } -} - - -/* - * Flush the specified rrb by calling do_pcibr_rrb_clear(). This - * routine is just a wrapper to make sure the rrb is disabled - * before calling do_pcibr_rrb_clear(). - */ -void -do_pcibr_rrb_flush(bridge_t *bridge, int rrbn) -{ - reg_p rrbp = &bridge->b_rrb_map[rrbn & 1].reg; - bridgereg_t rrbv; - int shft = (RRB_SIZE * (rrbn >> 1)); - unsigned long ebit = RRB_ENABLE_BIT(bridge) << shft; - rrbv = *rrbp; - - if (rrbv & ebit) { - *rrbp = rrbv & ~ebit; + /* Free any extra RRBs that the slot may have allocated to it */ + while (have > init_rrbs) { + pcibr_soft->bs_rrb_avail[slot & 1]++; + pcibr_soft->bs_rrb_valid[slot][vchan]--; + do_pcibr_rrb_free(pcibr_soft, slot, vchan, 1); + added--; + have--; } - do_pcibr_rrb_clear(bridge, rrbn); + PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_RRB, pcibr_soft->bs_vhdl, + "pcibr_rrb_alloc_init: had %d, added/removed %d, " + "(of requested %d) RRBs " + "to slot %d, vchan %d\n", had, added, init_rrbs, + PCIBR_DEVICE_TO_SLOT(pcibr_soft, slot), vchan)); - if (rrbv & ebit) { - *rrbp = rrbv; - } + pcibr_rrb_debug("pcibr_rrb_alloc_init", pcibr_soft); } +/* + * Allocate more RRBs to a given slot (if the RRBs are available). + */ void -do_pcibr_rrb_autoalloc(pcibr_soft_t pcibr_soft, - int slot, - int vchan, - int more_rrbs) +pcibr_rrb_alloc_more(pcibr_soft_t pcibr_soft, + int slot, + int vchan, + int more_rrbs) { - bridge_t *bridge = pcibr_soft->bs_base; - int got; + int added; - for (got = 0; got < more_rrbs; ++got) { + for (added = 0; added < more_rrbs; ++added) { if (pcibr_soft->bs_rrb_res[slot] > 0) pcibr_soft->bs_rrb_res[slot]--; else if (pcibr_soft->bs_rrb_avail[slot & 1] > 0) pcibr_soft->bs_rrb_avail[slot & 1]--; else break; - if (do_pcibr_rrb_alloc(bridge, slot, vchan, 1) < 0) + if (do_pcibr_rrb_alloc(pcibr_soft, slot, vchan, 1) < 0) break; pcibr_soft->bs_rrb_valid[slot][vchan]++; } PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_RRB, pcibr_soft->bs_vhdl, - "do_pcibr_rrb_autoalloc: added %d (of %d requested) RRBs " - "to slot %d, vchan %d\n", got, more_rrbs, + "pcibr_rrb_alloc_more: added %d (of %d requested) RRBs " + "to slot %d, vchan %d\n", added, more_rrbs, PCIBR_DEVICE_TO_SLOT(pcibr_soft, slot), vchan)); - pcibr_rrb_debug("do_pcibr_rrb_autoalloc", pcibr_soft); + pcibr_rrb_debug("pcibr_rrb_alloc_more", pcibr_soft); } @@ -348,25 +390,24 @@ pciio_info_t pciio_info = pciio_info_get(pconn_vhdl); pcibr_soft_t pcibr_soft = (pcibr_soft_t)pciio_info_mfast_get(pciio_info); pciio_slot_t slot = PCIBR_INFO_SLOT_GET_INT(pciio_info); - bridge_t *bridge = pcibr_soft->bs_base; uint64_t tmp; uint16_t enable_bit, pdev_bits, rrb_bits, rrb_mask; int rrb_index; unsigned long s; - enable_bit = RRB_ENABLE_BIT(bridge); - pdev_bits = SLOT_2_PDEV(bridge, slot); + enable_bit = RRB_ENABLE_BIT; + pdev_bits = SLOT_2_PDEV(slot); rrb_bits = enable_bit | pdev_bits; - rrb_mask = enable_bit | ((NUM_PDEV_BITS(bridge) << 1) - 1); + rrb_mask = enable_bit | ((NUM_PDEV_BITS << 1) - 1); - tmp = bridge->b_rrb_map[SLOT_2_RRB_REG(bridge, slot)].reg; + tmp = pcireg_rrb_get(pcibr_soft, SLOT_2_RRB_REG(slot)); s = pcibr_lock(pcibr_soft); for (rrb_index = 0; rrb_index < 8; rrb_index++) { - int evn_odd = SLOT_2_RRB_REG(bridge, slot); + int evn_odd = SLOT_2_RRB_REG(slot); if ((tmp & rrb_mask) == rrb_bits) - do_pcibr_rrb_flush(bridge, (2 * rrb_index) + evn_odd); + do_pcibr_rrb_flush(pcibr_soft, (2 * rrb_index) + evn_odd); tmp = (tmp >> RRB_SIZE); } pcibr_unlock(pcibr_soft, s); @@ -383,13 +424,10 @@ pciio_info_t pciio_info = pciio_info_get(pconn_vhdl); pciio_slot_t pciio_slot = PCIBR_INFO_SLOT_GET_INT(pciio_info); pcibr_soft_t pcibr_soft = (pcibr_soft_t) pciio_info_mfast_get(pciio_info); - bridge_t *bridge = pcibr_soft->bs_base; - volatile bridgereg_t *wrb_flush; - wrb_flush = &(bridge->b_wr_req_buf[pciio_slot].reg); - while (*wrb_flush) - ; - return(0); + pcireg_wrb_flush_get(pcibr_soft, pciio_slot); + + return 0; } /* @@ -411,7 +449,6 @@ pciio_info_t pciio_info = pciio_info_get(pconn_vhdl); pciio_slot_t pciio_slot = PCIBR_INFO_SLOT_GET_INT(pciio_info); pcibr_soft_t pcibr_soft = (pcibr_soft_t) pciio_info_mfast_get(pciio_info); - bridge_t *bridge = pcibr_soft->bs_base; int desired_vchan0; int desired_vchan1; int orig_vchan0; @@ -441,7 +478,7 @@ s = pcibr_lock(pcibr_soft); - vchan_total = NUMBER_VCHANNELS(bridge); + vchan_total = NUMBER_VCHANNELS; /* Save the boot-time RRB configuration for this slot */ if (pcibr_soft->bs_rrb_valid_dflt[pciio_slot][VCHAN0] < 0) { @@ -507,14 +544,14 @@ /* Commit the allocations: free, then alloc. */ if (delta_vchan0 < 0) - (void) do_pcibr_rrb_free(bridge, pciio_slot, VCHAN0, -delta_vchan0); + do_pcibr_rrb_free(pcibr_soft, pciio_slot, VCHAN0, -delta_vchan0); if (delta_vchan1 < 0) - (void) do_pcibr_rrb_free(bridge, pciio_slot, VCHAN1, -delta_vchan1); + do_pcibr_rrb_free(pcibr_soft, pciio_slot, VCHAN1, -delta_vchan1); if (delta_vchan0 > 0) - (void) do_pcibr_rrb_alloc(bridge, pciio_slot, VCHAN0, delta_vchan0); + do_pcibr_rrb_alloc(pcibr_soft, pciio_slot, VCHAN0, delta_vchan0); if (delta_vchan1 > 0) - (void) do_pcibr_rrb_alloc(bridge, pciio_slot, VCHAN1, delta_vchan1); + do_pcibr_rrb_alloc(pcibr_soft, pciio_slot, VCHAN1, delta_vchan1); /* Return final values to caller. */ @@ -666,7 +703,6 @@ pcibr_soft_t pcibr_soft; pcibr_info_h pcibr_infoh; pcibr_info_t pcibr_info; - bridge_t *bridge; int vchan_total; int vchan; int chan[4]; @@ -674,17 +710,15 @@ pcibr_soft = pcibr_soft_get(pcibr_vhdl); if (!pcibr_soft) - return(-EINVAL); + return -EINVAL; if (!PCIBR_VALID_SLOT(pcibr_soft, slot)) - return(-EINVAL); - - bridge = pcibr_soft->bs_base; + return -EINVAL; /* How many RRBs are on this slot? */ - vchan_total = NUMBER_VCHANNELS(bridge); + vchan_total = NUMBER_VCHANNELS; for (vchan = 0; vchan < vchan_total; vchan++) - chan[vchan] = do_pcibr_rrb_count_valid(bridge, slot, vchan); + chan[vchan] = do_pcibr_rrb_count_valid(pcibr_soft, slot, vchan); PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_RRB, pcibr_vhdl, "pcibr_slot_initial_rrb_alloc: slot %d started with %d+%d+%d+%d\n", @@ -695,44 +729,44 @@ */ pcibr_infoh = pcibr_soft->bs_slot[slot].bss_infos; pcibr_info = pcibr_infoh[0]; + /* + * PIC BRINGUP WAR (PV# 856866, 859504, 861476, 861478): + * Don't free RRBs we allocated to device[2|3]--vchan3 as + * a WAR to those PVs mentioned above. In pcibr_attach2 + * we allocate RRB0,8,1,9 to device[2|3]--vchan3. + */ + if (PCIBR_WAR_ENABLED(PV856866, pcibr_soft) && + (slot == 2 || slot == 3) && + (pcibr_info->f_vendor == PCIIO_VENDOR_ID_NONE) && + !pcibr_soft->bs_slot[slot].has_host) { - if (PCIBR_WAR_ENABLED(PV856866, pcibr_soft) && - (slot == 2 || slot == 3) && - (pcibr_info->f_vendor == PCIIO_VENDOR_ID_NONE) && - !pcibr_soft->bs_slot[slot].has_host) { - - for (vchan = 0; vchan < 2; vchan++) { - do_pcibr_rrb_free(bridge, slot, vchan, 8); - pcibr_soft->bs_rrb_valid[slot][vchan] = 0; - } + for (vchan = 0; vchan < 2; vchan++) { + do_pcibr_rrb_free(pcibr_soft, slot, vchan, 8); + pcibr_soft->bs_rrb_valid[slot][vchan] = 0; + } pcibr_soft->bs_rrb_valid[slot][3] = chan[3]; - return(-ENODEV); + return -ENODEV; } - /* Give back any assigned to empty slots */ - if ((pcibr_info->f_vendor == PCIIO_VENDOR_ID_NONE) && !pcibr_soft->bs_slot[slot].has_host) { - do_pcibr_rrb_free_all(pcibr_soft, bridge, slot); - return(-ENODEV); + if ((pcibr_info->f_vendor == PCIIO_VENDOR_ID_NONE) && + !pcibr_soft->bs_slot[slot].has_host) { + do_pcibr_rrb_free_all(pcibr_soft, slot); + + /* Reserve RRBs for this empty slot for hot-plug */ + for (vchan = 0; vchan < vchan_total; vchan++) + pcibr_soft->bs_rrb_valid[slot][vchan] = 0; + + return -ENODEV; } for (vchan = 0; vchan < vchan_total; vchan++) pcibr_soft->bs_rrb_valid[slot][vchan] = chan[vchan]; - return(0); + return 0; } -void -rrb_reserved_free(pcibr_soft_t pcibr_soft, int slot) -{ - int res = pcibr_soft->bs_rrb_res[slot]; - - if (res) { - pcibr_soft->bs_rrb_avail[slot & 1] += res; - pcibr_soft->bs_rrb_res[slot] = 0; - } -} /* * pcibr_initial_rrb @@ -750,7 +784,6 @@ pciio_slot_t first, pciio_slot_t last) { pcibr_soft_t pcibr_soft = pcibr_soft_get(pcibr_vhdl); - bridge_t *bridge = pcibr_soft->bs_base; pciio_slot_t slot; int rrb_total; int vchan_total; @@ -763,12 +796,12 @@ have[1][0] = have[1][1] = have[1][2] = 0; res[0] = res[1] = 0; - vchan_total = NUMBER_VCHANNELS(bridge); + vchan_total = NUMBER_VCHANNELS; for (slot = pcibr_soft->bs_min_slot; slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { /* Initial RRB management; give back RRBs in all non-existent slots */ - (void) pcibr_slot_initial_rrb_alloc(pcibr_vhdl, slot); + pcibr_slot_initial_rrb_alloc(pcibr_vhdl, slot); /* Base calculations only on existing slots */ if ((slot >= first) && (slot <= last)) { @@ -782,8 +815,8 @@ } /* Initialize even/odd slot available RRB counts */ - pcibr_soft->bs_rrb_avail[0] = do_pcibr_rrb_count_avail(bridge, 0); - pcibr_soft->bs_rrb_avail[1] = do_pcibr_rrb_count_avail(bridge, 1); + pcibr_soft->bs_rrb_avail[0] = do_pcibr_rrb_count_avail(pcibr_soft, 0); + pcibr_soft->bs_rrb_avail[1] = do_pcibr_rrb_count_avail(pcibr_soft, 1); /* * Calculate reserved RRBs for slots based on current RRB usage @@ -804,6 +837,9 @@ for (slot = first; slot <= last; ++slot) { int r; + if (pcibr_soft->bs_unused_slot & (1 << slot)) + continue; + rrb_total = 0; for (vchan = 0; vchan < vchan_total; vchan++) rrb_total += pcibr_soft->bs_rrb_valid[slot][vchan]; @@ -829,7 +865,6 @@ pcibr_rrb_debug(char *calling_func, pcibr_soft_t pcibr_soft) { pciio_slot_t slot; - char tmp_str[256]; if (pcibr_debug_mask & PCIBR_DEBUG_RRB) { PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_RRB, pcibr_soft->bs_vhdl, @@ -837,23 +872,17 @@ pcibr_soft->bs_rrb_avail[0], pcibr_soft->bs_rrb_avail[1])); PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_RRB, pcibr_soft->bs_vhdl, - "\tslot\tvchan0\tvchan1\tvchan2\tvchan3\treserved\n")); + "\tslot\tvchan0\tvchan1\tvchan2\tvchan3\treserved\n")); for (slot=0; slot < PCIBR_NUM_SLOTS(pcibr_soft); slot++) { - /* - * The kernel only allows functions to have so many variable args, - * attempting to call PCIBR_DEBUG_ALWAYS() with more than 5 printf - * arguments fails so sprintf() it into a temporary string. - */ - sprintf(tmp_str, "\t %d\t %d\t %d\t %d\t %d\t %d\n", - PCIBR_DEVICE_TO_SLOT(pcibr_soft, slot), - 0xFFF & pcibr_soft->bs_rrb_valid[slot][VCHAN0], - 0xFFF & pcibr_soft->bs_rrb_valid[slot][VCHAN1], - 0xFFF & pcibr_soft->bs_rrb_valid[slot][VCHAN2], - 0xFFF & pcibr_soft->bs_rrb_valid[slot][VCHAN3], - pcibr_soft->bs_rrb_res[slot]); PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_RRB, pcibr_soft->bs_vhdl, - "%s", tmp_str)); + "\t %d\t %d\t %d\t %d\t %d\t %d\n", + PCIBR_DEVICE_TO_SLOT(pcibr_soft, slot), + 0xFFF & pcibr_soft->bs_rrb_valid[slot][VCHAN0], + 0xFFF & pcibr_soft->bs_rrb_valid[slot][VCHAN1], + 0xFFF & pcibr_soft->bs_rrb_valid[slot][VCHAN2], + 0xFFF & pcibr_soft->bs_rrb_valid[slot][VCHAN3], + pcibr_soft->bs_rrb_res[slot])); } } } diff -Nru a/arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c b/arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c --- a/arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c Wed Feb 4 16:51:35 2004 +++ b/arch/ia64/sn/io/sn2/pcibr/pcibr_slot.c Wed Feb 4 16:51:35 2004 @@ -37,11 +37,12 @@ pciio_slot_t slot, int drv_flags); int pcibr_slot_detach(vertex_hdl_t pcibr_vhdl, pciio_slot_t slot, int drv_flags, char *l1_msg, int *sub_errorp); -static int pcibr_probe_slot(bridge_t *, cfg_p, unsigned int *); +static int pcibr_probe_slot(pcibr_soft_t, cfg_p, unsigned int *); +static int pcibr_probe_work(pcibr_soft_t pcibr_soft, void *addr, int len, void *valp); void pcibr_device_info_free(vertex_hdl_t, pciio_slot_t); iopaddr_t pcibr_bus_addr_alloc(pcibr_soft_t, pciio_win_info_t, pciio_space_t, int, int, int); -void pciibr_bus_addr_free(pcibr_soft_t, pciio_win_info_t); +void pcibr_bus_addr_free(pciio_win_info_t); cfg_p pcibr_find_capability(cfg_p, unsigned); extern uint64_t do_pcibr_config_get(cfg_p, unsigned, unsigned); void do_pcibr_config_set(cfg_p, unsigned, unsigned, uint64_t); @@ -57,22 +58,6 @@ int max_splittrans_to_numbuf[MAX_SPLIT_TABLE] = {1, 2, 3, 4, 8, 12, 16, 32}; int max_readcount_to_bufsize[MAX_READCNT_TABLE] = {512, 1024, 2048, 4096 }; -char *pci_space_name[] = {"NONE", - "ROM", - "IO", - "", - "MEM", - "MEM32", - "MEM64", - "CFG", - "WIN0", - "WIN1", - "WIN2", - "WIN3", - "WIN4", - "WIN5", - "", - "BAD"}; /* * pcibr_slot_info_init @@ -87,7 +72,6 @@ pcibr_soft_t pcibr_soft; pcibr_info_h pcibr_infoh; pcibr_info_t pcibr_info; - bridge_t *bridge; cfg_p cfgw; unsigned idword; unsigned pfail; @@ -106,28 +90,28 @@ int func; vertex_hdl_t conn_vhdl; pcibr_soft_slot_t slotp; - + uint64_t device_reg; + /* Get the basic software information required to proceed */ pcibr_soft = pcibr_soft_get(pcibr_vhdl); if (!pcibr_soft) - return(EINVAL); + return -EINVAL; - bridge = pcibr_soft->bs_base; if (!PCIBR_VALID_SLOT(pcibr_soft, slot)) - return(EINVAL); + return -EINVAL; /* If we have a host slot (eg:- IOC3 has 2 PCI slots and the initialization * is done by the host slot then we are done. */ if (pcibr_soft->bs_slot[slot].has_host) { - return(0); + return 0; } /* Try to read the device-id/vendor-id from the config space */ - cfgw = pcibr_slot_config_addr(bridge, slot, 0); + cfgw = pcibr_slot_config_addr(pcibr_soft, slot, 0); - if (pcibr_probe_slot(bridge, cfgw, &idword)) - return(ENODEV); + if (pcibr_probe_slot(pcibr_soft, cfgw, &idword)) + return -ENODEV; slotp = &pcibr_soft->bs_slot[slot]; slotp->slot_status |= SLOT_POWER_UP; @@ -143,7 +127,7 @@ * and we are done. */ if (vendor == 0xFFFF) - return(ENODEV); + return -ENODEV; htype = do_pcibr_config_get(cfgw, PCI_CFG_HEADER_TYPE, 1); nfunc = 1; @@ -157,8 +141,8 @@ if (htype & 0x80) { /* MULTIFUNCTION */ for (func = 1; func < 8; ++func) { - cfgw = pcibr_func_config_addr(bridge, 0, slot, func, 0); - if (pcibr_probe_slot(bridge, cfgw, &idwords[func])) { + cfgw = pcibr_func_config_addr(pcibr_soft, 0, slot, func, 0); + if (pcibr_probe_slot(pcibr_soft, cfgw, &idwords[func])) { pfail |= 1 << func; continue; } @@ -170,11 +154,11 @@ nfunc = func + 1; rfunc = 0; } - cfgw = pcibr_slot_config_addr(bridge, slot, 0); + cfgw = pcibr_slot_config_addr(pcibr_soft, slot, 0); } pcibr_infoh = kmalloc(nfunc*sizeof (*(pcibr_infoh)), GFP_KERNEL); if ( !pcibr_infoh ) { - return ENOMEM; + return -ENOMEM; } memset(pcibr_infoh, 0, nfunc*sizeof (*(pcibr_infoh))); @@ -189,7 +173,7 @@ continue; idword = idwords[func]; - cfgw = pcibr_func_config_addr(bridge, 0, slot, func, 0); + cfgw = pcibr_func_config_addr(pcibr_soft, 0, slot, func, 0); device = 0xFFFF & (idword >> 16); htype = do_pcibr_config_get(cfgw, PCI_CFG_HEADER_TYPE, 1); @@ -223,9 +207,8 @@ */ lt_time = do_pcibr_config_get(cfgw, PCI_CFG_LATENCY_TIMER, 1); - - if ((lt_time == 0) && !(bridge->b_device[slot].reg & BRIDGE_DEV_RT) && - (device == 0x5 /* RAD_DEV */)) { + device_reg = pcireg_device_get(pcibr_soft, slot); + if ((lt_time == 0) && !(device_reg & BRIDGE_DEV_RT)) { unsigned min_gnt; unsigned min_gnt_mult; @@ -272,12 +255,14 @@ "func=%d, to 0x20\n", PCIBR_DEVICE_TO_SLOT(pcibr_soft, slot), func)); } + } - /* Get the PCI-X capability if running in PCI-X mode. If the func - * doesnt have a pcix capability, allocate a PCIIO_VENDOR_ID_NONE - * pcibr_info struct so the device driver for that function is not - * called. - */ + /* Get the PCI-X capability if running in PCI-X mode. If the func + * doesnt have a pcix capability, allocate a PCIIO_VENDOR_ID_NONE + * pcibr_info struct so the device driver for that function is not + * called. + */ + if (IS_PCIX(pcibr_soft)) { if (!(pcix_cap = pcibr_find_capability(cfgw, PCI_CAP_PCIX))) { printk(KERN_WARNING "%s: Bus running in PCI-X mode, But card in slot %d, " @@ -398,7 +383,31 @@ } if (base != 0) { /* estimate size */ + pciio_space_t tmp_space = space; + iopaddr_t tmp_base; + size = base & -base; + + /* + * Reserve this space in the relavent address map. Don't + * care about the return code from pcibr_bus_addr_alloc(). + */ + + if (space == PCIIO_SPACE_MEM && code != PCI_BA_MEM_1MEG) { + tmp_space = PCIIO_SPACE_MEM32; + } + + tmp_base = pcibr_bus_addr_alloc(pcibr_soft, + &pcibr_info->f_window[win], + tmp_space, + base, size, 0); + + PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_BAR, pcibr_vhdl, + "pcibr_slot_info_init: slot=%d, func=%d win %d " + "reserving space %s [0x%lx..0x%lx], tmp_base 0x%lx\n", + PCIBR_DEVICE_TO_SLOT(pcibr_soft, slot), func, win, + pci_space[tmp_space], (uint64_t)base, + (uint64_t)(base + size - 1), (uint64_t)tmp_base)); } else { /* calculate size */ do_pcibr_config_set(wptr, (win * 4), 4, ~0); /* write 1's */ size = do_pcibr_config_get(wptr, (win * 4), 4); /* read back */ @@ -419,7 +428,7 @@ } /* next win */ } /* next func */ - return(0); + return 0; } /* @@ -438,7 +447,7 @@ /* Check to see if there is a capabilities pointer in the cfg header */ if (!(do_pcibr_config_get(cfgw, PCI_CFG_STATUS, 2) & PCI_STAT_CAP_LIST)) { - return (NULL); + return NULL; } /* @@ -453,13 +462,13 @@ while (cap_nxt && (defend_against_circular_linkedlist <= 48)) { cap_id = do_pcibr_config_get(cfgw, cap_nxt, 1); if (cap_id == capability) { - return ((cfg_p)((char *)cfgw + cap_nxt)); + return (cfg_p)((char *)cfgw + cap_nxt); } cap_nxt = (do_pcibr_config_get(cfgw, cap_nxt+1, 1) & 0xfc); defend_against_circular_linkedlist++; } - return (NULL); + return NULL; } /* @@ -478,10 +487,10 @@ pcibr_soft = pcibr_soft_get(pcibr_vhdl); if (!pcibr_soft) - return(EINVAL); + return -EINVAL; if (!PCIBR_VALID_SLOT(pcibr_soft, slot)) - return(EINVAL); + return -EINVAL; nfunc = pcibr_soft->bs_slot[slot].bss_ninfo; @@ -491,7 +500,7 @@ kfree(pcibr_infoh); pcibr_soft->bs_slot[slot].bss_ninfo = 0; - return(0); + return 0; } /* @@ -508,13 +517,13 @@ int func; if (!PCIBR_VALID_SLOT(pcibr_soft, slot)) - return(EINVAL); + return -EINVAL; if ((nfunc = pcibr_soft->bs_slot[slot].bss_ninfo) < 1) - return(EINVAL); + return -EINVAL; if (!(pcibr_infoh = pcibr_soft->bs_slot[slot].bss_infos)) - return(EINVAL); + return -EINVAL; PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_RBAR, pcibr_soft->bs_vhdl, "pcibr_slot_pcix_rbar_init for slot %d\n", @@ -586,7 +595,7 @@ pcibr_soft->bs_pcix_rbar_inuse, pcibr_soft->bs_pcix_rbar_avail)); } - return(0); + return 0; } int as_debug = 0; @@ -602,41 +611,38 @@ pcibr_soft_t pcibr_soft; pcibr_info_h pcibr_infoh; pcibr_info_t pcibr_info; - bridge_t *bridge; iopaddr_t mask; int nbars; int nfunc; int func; int win; int rc = 0; - int align; + int align = 0; int align_slot; pcibr_soft = pcibr_soft_get(pcibr_vhdl); if (!pcibr_soft) - return(EINVAL); + return -EINVAL; if (!PCIBR_VALID_SLOT(pcibr_soft, slot)) - return(EINVAL); - - bridge = pcibr_soft->bs_base; + return -EINVAL; /* allocate address space, * for windows that have not been * previously assigned. */ if (pcibr_soft->bs_slot[slot].has_host) { - return(0); + return 0; } nfunc = pcibr_soft->bs_slot[slot].bss_ninfo; if (nfunc < 1) - return(EINVAL); + return -EINVAL; pcibr_infoh = pcibr_soft->bs_slot[slot].bss_infos; if (!pcibr_infoh) - return(EINVAL); + return -EINVAL; /* * Try to make the DevIO windows not @@ -668,7 +674,7 @@ if (pcibr_info->f_vendor == PCIIO_VENDOR_ID_NONE) continue; - cfgw = pcibr_func_config_addr(bridge, 0, slot, func, 0); + cfgw = pcibr_func_config_addr(pcibr_soft, 0, slot, func, 0); wptr = cfgw + PCI_CFG_BASE_ADDR_0 / 4; if ((do_pcibr_config_get(cfgw, PCI_CFG_HEADER_TYPE, 1) & 0x7f) != 0) @@ -821,7 +827,7 @@ do_pcibr_config_set(cfgw, PCI_CFG_COMMAND, 4, pci_cfg_cmd_reg | pci_cfg_cmd_reg_add); } /* next func */ - return(rc); + return rc; } /* @@ -834,40 +840,45 @@ pciio_slot_t slot) { pcibr_soft_t pcibr_soft; - bridge_t *bridge; - bridgereg_t devreg; + uint64_t devreg; pcibr_soft = pcibr_soft_get(pcibr_vhdl); if (!pcibr_soft) - return(EINVAL); + return -EINVAL; if (!PCIBR_VALID_SLOT(pcibr_soft, slot)) - return(EINVAL); - - bridge = pcibr_soft->bs_base; + return -EINVAL; /* - * Adjustments to Device(x) - * and init of bss_device shadow + * Adjustments to Device(x) and init of bss_device shadow */ - devreg = bridge->b_device[slot].reg; + devreg = pcireg_device_get(pcibr_soft, slot); devreg &= ~BRIDGE_DEV_PAGE_CHK_DIS; /* - * PIC WAR. PV# 855271 - * Don't enable virtual channels in the PIC by default. - * Can cause problems with 32-bit devices. (The bit is only intended - * for 64-bit devices). We set the bit in pcibr_try_set_device() - * if we're 64-bit and requesting virtual channels. + * Enable virtual channels by default (exception: see PIC WAR below) */ - if (PCIBR_WAR_ENABLED(PV855271, pcibr_soft)) - devreg |= BRIDGE_DEV_COH; - else - devreg |= BRIDGE_DEV_COH | BRIDGE_DEV_VIRTUAL_EN; + devreg |= BRIDGE_DEV_VIRTUAL_EN; + + /* + * PIC WAR. PV# 855271: Disable virtual channels in the PIC since + * it can cause problems with 32-bit devices. We'll set the bit in + * pcibr_try_set_device() iff we're 64-bit and requesting virtual + * channels. + */ + if (PCIBR_WAR_ENABLED(PV855271, pcibr_soft)) { + devreg &= ~BRIDGE_DEV_VIRTUAL_EN; + } + devreg |= BRIDGE_DEV_COH; + pcibr_soft->bs_slot[slot].bss_device = devreg; - bridge->b_device[slot].reg = devreg; - return(0); + pcireg_device_set(pcibr_soft, slot, devreg); + + PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_DEVREG, pcibr_vhdl, + "pcibr_slot_device_init: Device(%d): 0x%x\n", + slot, devreg)); + return 0; } /* @@ -886,10 +897,10 @@ pcibr_soft = pcibr_soft_get(pcibr_vhdl); if (!pcibr_soft) - return(EINVAL); + return -EINVAL; if (!PCIBR_VALID_SLOT(pcibr_soft, slot)) - return(EINVAL); + return -EINVAL; slotp = &pcibr_soft->bs_slot[slot]; @@ -901,7 +912,7 @@ if (pcibr_soft->bs_slot[slot].bss_ninfo < 1) { pcibr_infoh = kmalloc(sizeof (*(pcibr_infoh)), GFP_KERNEL); if ( !pcibr_infoh ) { - return ENOMEM; + return -ENOMEM; } memset(pcibr_infoh, 0, sizeof (*(pcibr_infoh))); @@ -939,7 +950,7 @@ EDGE_LBL_GUEST); } - return(0); + return 0; } @@ -966,13 +977,13 @@ pcibr_soft = pcibr_soft_get(pcibr_vhdl); if (!pcibr_soft) - return(EINVAL); + return -EINVAL; if (!PCIBR_VALID_SLOT(pcibr_soft, slot)) - return(EINVAL); + return -EINVAL; if (pcibr_soft->bs_slot[slot].has_host) { - return(EPERM); + return -EPERM; } xconn_vhdl = pcibr_soft->bs_conn; @@ -1018,7 +1029,7 @@ pcibr_soft->bs_slot[slot].slot_status |= SLOT_STARTUP_CMPLT; } - return(error); + return error; } /* @@ -1044,13 +1055,13 @@ pcibr_soft = pcibr_soft_get(pcibr_vhdl); if (!pcibr_soft) - return(EINVAL); + return -EINVAL; if (!PCIBR_VALID_SLOT(pcibr_soft, slot)) - return(EINVAL); + return -EINVAL; if (pcibr_soft->bs_slot[slot].has_host) - return(EPERM); + return -EPERM; nfunc = pcibr_soft->bs_slot[slot].bss_ninfo; pcibr_infoh = pcibr_soft->bs_slot[slot].bss_infos; @@ -1105,45 +1116,7 @@ pcibr_soft->bs_slot[slot].slot_status |= SLOT_SHUTDOWN_CMPLT; } - return(error); -} - -/* - * pcibr_slot_attach - * This is a place holder routine to keep track of all the - * slot-specific initialization that needs to be done. - * This is usually called when we want to initialize a new - * PCI card on the bus. - */ -int -pcibr_slot_attach(vertex_hdl_t pcibr_vhdl, - pciio_slot_t slot, - int drv_flags, - char *l1_msg, - int *sub_errorp) -{ - pcibr_soft_t pcibr_soft = pcibr_soft_get(pcibr_vhdl); - int error; - - /* Do not allow a multi-function card to be hot-plug inserted */ - if (pcibr_soft->bs_slot[slot].bss_ninfo > 1) { - if (sub_errorp) - *sub_errorp = EPERM; - return(PCI_MULTI_FUNC_ERR); - } - - /* Call the device attach */ - error = pcibr_slot_call_device_attach(pcibr_vhdl, slot, drv_flags); - if (error) { - if (sub_errorp) - *sub_errorp = error; - if (error == EUNATCH) - return(PCI_NO_DRIVER); - else - return(PCI_SLOT_DRV_ATTACH_ERR); - } - - return(0); + return error; } /* @@ -1166,7 +1139,9 @@ if (error) { if (sub_errorp) *sub_errorp = error; - return(PCI_SLOT_DRV_DETACH_ERR); + if (l1_msg) + ; + return PCI_SLOT_DRV_DETACH_ERR; } /* Recalculate the RBARs for all the devices on the bus since we've @@ -1185,7 +1160,7 @@ (void)pcibr_slot_pcix_rbar_init(pcibr_soft, tmp_slot); } - return (0); + return 0; } @@ -1197,33 +1172,35 @@ * through the valp parameter. */ static int -pcibr_probe_slot_pic(bridge_t *bridge, - cfg_p cfg, - unsigned *valp) +pcibr_probe_slot(pcibr_soft_t pcibr_soft, + cfg_p cfg, + unsigned *valp) { - int rv; - picreg_t p_old_enable = (picreg_t)0, p_new_enable; - extern int snia_badaddr_val(volatile void *, int, volatile void *); - - p_old_enable = bridge->p_int_enable_64; - p_new_enable = p_old_enable & ~(BRIDGE_IMR_PCI_MST_TIMEOUT | PIC_ISR_PCIX_MTOUT); - bridge->p_int_enable_64 = p_new_enable; - - if (bridge->p_err_int_view_64 & (BRIDGE_ISR_PCI_MST_TIMEOUT | PIC_ISR_PCIX_MTOUT)) - bridge->p_int_rst_stat_64 = BRIDGE_IRR_MULTI_CLR; - - if (bridge->p_int_status_64 & (BRIDGE_IRR_PCI_GRP | PIC_PCIX_GRP_CLR)) { - bridge->p_int_rst_stat_64 = (BRIDGE_IRR_PCI_GRP_CLR | PIC_PCIX_GRP_CLR); - (void) bridge->b_wid_tflush; /* flushbus */ - } - rv = snia_badaddr_val((void *) cfg, 4, valp); - if (bridge->p_err_int_view_64 & (BRIDGE_ISR_PCI_MST_TIMEOUT | PIC_ISR_PCIX_MTOUT)) { - bridge->p_int_rst_stat_64 = BRIDGE_IRR_MULTI_CLR; - rv = 1; /* unoccupied slot */ + return pcibr_probe_work(pcibr_soft, (void *)cfg, 4, (void *)valp); +} + +/* + * Probe an offset within a piomap with errors disabled. + * len must be 1, 2, 4, or 8. The probed address must be a multiple of + * len. + * + * Returns: 0 if the offset was probed and put valid data in valp + * -1 if there was a usage error such as improper alignment + * or out of bounds offset/len combination. In this + * case, the map was not probed + * 1 if the offset was probed but resulted in an error + * such as device not responding, bus error, etc. + */ + +int +pcibr_piomap_probe(pcibr_piomap_t piomap, off_t offset, int len, void *valp) +{ + if (offset + len > piomap->bp_mapsz) { + return -1; } - bridge->p_int_enable_64 = p_old_enable; - bridge->b_wid_tflush; /* wait until Bridge PIO complete */ - return(rv); + + return pcibr_probe_work(piomap->bp_soft, + piomap->bp_kvaddr + offset, len, valp); } /* @@ -1234,11 +1211,31 @@ * through the valp parameter. */ static int -pcibr_probe_slot(bridge_t *bridge, - cfg_p cfg, - unsigned *valp) +pcibr_probe_work(pcibr_soft_t pcibr_soft, + void *addr, + int len, + void *valp) { - return(pcibr_probe_slot_pic(bridge, cfg, valp)); + int rv; + + /* + * Sanity checks ... + */ + + if (len != 1 && len != 2 && len != 4 && len != 8) { + return -1; /* invalid len */ + } + + if ((uint64_t)addr & (len-1)) { + return -1; /* invalid alignment */ + } + + rv = snia_badaddr_val((void *)addr, len, valp); + + /* Clear the int_view register incase it was set */ + pcireg_intr_reset_set(pcibr_soft, BRIDGE_IRR_MULTI_CLR); + + return (rv ? 1 : 0); /* return 1 for snia_badaddr_val error, 0 if ok */ } @@ -1249,7 +1246,6 @@ pcibr_info_t pcibr_info; pciio_function_t func; pcibr_soft_slot_t slotp = &pcibr_soft->bs_slot[slot]; - bridge_t *bridge = pcibr_soft->bs_base; cfg_p cfgw; int nfunc = slotp->bss_ninfo; int bar; @@ -1267,7 +1263,7 @@ s = pcibr_lock(pcibr_soft); /* Disable memory and I/O BARs */ - cfgw = pcibr_func_config_addr(bridge, 0, slot, func, 0); + cfgw = pcibr_func_config_addr(pcibr_soft, 0, slot, func, 0); cmd_reg = do_pcibr_config_get(cfgw, PCI_CFG_COMMAND, 4); cmd_reg &= (PCI_CMD_MEM_SPACE | PCI_CMD_IO_SPACE); do_pcibr_config_set(cfgw, PCI_CFG_COMMAND, 4, cmd_reg); @@ -1277,7 +1273,7 @@ continue; /* Free the PCI bus space */ - pciibr_bus_addr_free(pcibr_soft, &pcibr_info->f_window[bar]); + pcibr_bus_addr_free(&pcibr_info->f_window[bar]); /* Get index of the DevIO(x) register used to access this BAR */ devio_index = pcibr_info->f_window[bar].w_devio_index; @@ -1295,7 +1291,7 @@ /* Free the Expansion ROM PCI bus space */ if(pcibr_info->f_rbase && pcibr_info->f_rsize) { - pciibr_bus_addr_free(pcibr_soft, &pcibr_info->f_rwindow); + pcibr_bus_addr_free(&pcibr_info->f_rwindow); } pcibr_unlock(pcibr_soft, s); @@ -1317,12 +1313,6 @@ slotp->bss_d64_flags = 0; slotp->bss_d32_base = PCIBR_D32_BASE_UNSET; slotp->bss_d32_flags = 0; - - /* Clear out shadow info necessary for the external SSRAM workaround */ - slotp->bss_ext_ates_active = ATOMIC_INIT(0); - slotp->bss_cmd_pointer = 0; - slotp->bss_cmd_shadow = 0; - } @@ -1360,12 +1350,12 @@ ? &win_info_p->w_win_alloc : NULL, start, size, align); - return(iopaddr); + return iopaddr; } void -pciibr_bus_addr_free(pcibr_soft_t pcibr_soft, pciio_win_info_t win_info_p) +pcibr_bus_addr_free(pciio_win_info_t win_info_p) { pciio_device_win_free(&win_info_p->w_win_alloc); } @@ -1381,17 +1371,16 @@ pcibr_soft_t pcibr_soft = pcibr_soft_get(pcibr_vhdl); xwidgetnum_t widget = pcibr_soft->bs_xid; int bricktype = pcibr_soft->bs_bricktype; - int bus = pcibr_soft->bs_busnum; + int bus; - /* - * For PIC there are 2 busses per widget and pcibr_soft->bs_busnum - * will be 0 or 1. For [X]BRIDGE there is 1 bus per widget and - * pcibr_soft->bs_busnum will always be zero. So we add bs_busnum - * to what io_brick_map_widget returns to get the bus number. - */ - if ((bus += io_brick_map_widget(bricktype, widget)) > 0) { - return bus; - } else { + if ((bus = io_brick_map_widget(bricktype, widget)) <= 0) { + printk(KERN_WARNING "pcibr_widget_to_bus() bad bricktype %d\n", bricktype); return 0; } + + /* For PIC there are 2 busses per widget and pcibr_soft->bs_busnum + * will be 0 or 1. Add in the correct PIC bus offset. + */ + bus += pcibr_soft->bs_busnum; + return bus; } diff -Nru a/arch/ia64/sn/io/sn2/pciio.c b/arch/ia64/sn/io/sn2/pciio.c --- a/arch/ia64/sn/io/sn2/pciio.c Wed Feb 4 16:51:37 2004 +++ b/arch/ia64/sn/io/sn2/pciio.c Wed Feb 4 16:51:37 2004 @@ -703,30 +703,6 @@ return (pciio_info->c_pops); } -int -pciio_businfo_multi_master_get(pciio_businfo_t businfo) -{ - return businfo->bi_multi_master; -} - -pciio_asic_type_t -pciio_businfo_asic_type_get(pciio_businfo_t businfo) -{ - return businfo->bi_asic_type; -} - -pciio_bus_type_t -pciio_businfo_bus_type_get(pciio_businfo_t businfo) -{ - return businfo->bi_bus_type; -} - -pciio_bus_speed_t -pciio_businfo_bus_speed_get(pciio_businfo_t businfo) -{ - return businfo->bi_bus_speed; -} - /* ===================================================================== * GENERIC PCI INITIALIZATION FUNCTIONS */ @@ -792,9 +768,12 @@ pciio_info = kmalloc(sizeof (*(pciio_info)), GFP_KERNEL); if ( pciio_info ) memset(pciio_info, 0, sizeof (*(pciio_info))); + else { + printk(KERN_WARNING "pciio_device_info_new(): Unable to " + "allocate memory\n"); + return NULL; + } } - ASSERT(pciio_info != NULL); - pciio_info->c_slot = slot; pciio_info->c_func = func; pciio_info->c_vendor = vendor_id; @@ -859,13 +838,8 @@ pciio_info->c_slot, pciio_info->c_func); - hwgraph_edge_remove(connectpt,name,&pconn); pciio_info_set(pconn,0); - /* Remove the link to our pci provider */ - hwgraph_edge_remove(pconn, EDGE_LBL_MASTER, NULL); - - hwgraph_vertex_unref(pconn); hwgraph_vertex_destroy(pconn); @@ -1035,13 +1009,4 @@ pciio_info_type1_get(pciio_info_t pci_info) { return (pci_info->c_type1); -} - -pciio_businfo_t -pciio_businfo_get(vertex_hdl_t conn) -{ - pciio_info_t info; - - info = pciio_info_get(conn); - return DEV_FUNC(conn, businfo_get)(conn); } diff -Nru a/arch/ia64/sn/io/sn2/pic.c b/arch/ia64/sn/io/sn2/pic.c --- a/arch/ia64/sn/io/sn2/pic.c Wed Feb 4 16:51:36 2004 +++ b/arch/ia64/sn/io/sn2/pic.c Wed Feb 4 16:51:36 2004 @@ -17,12 +17,41 @@ #include #include +extern struct file_operations pcibr_fops; +extern pcibr_list_p pcibr_list; -#define PCI_BUS_NO_1 1 +static int pic_attach2(vertex_hdl_t, void *, vertex_hdl_t, + int, pcibr_soft_t *); + +extern int isIO9(nasid_t); +extern char *dev_to_name(vertex_hdl_t dev, char *buf, uint buflen); +extern int pcibr_widget_to_bus(vertex_hdl_t pcibr_vhdl); +extern pcibr_hints_t pcibr_hints_get(vertex_hdl_t, int); +extern unsigned pcibr_intr_bits(pciio_info_t info, + pciio_intr_line_t lines, int nslots); +extern void pcibr_setwidint(xtalk_intr_t); +extern int pcibr_error_handler_wrapper(error_handler_arg_t, int, + ioerror_mode_t, ioerror_t *); +extern void pcibr_error_intr_handler(intr_arg_t); +extern void pcibr_directmap_init(pcibr_soft_t); +extern int pcibr_slot_info_init(vertex_hdl_t,pciio_slot_t); +extern int pcibr_slot_addr_space_init(vertex_hdl_t,pciio_slot_t); +extern int pcibr_slot_device_init(vertex_hdl_t, pciio_slot_t); +extern int pcibr_slot_pcix_rbar_init(pcibr_soft_t, pciio_slot_t); +extern int pcibr_slot_guest_info_init(vertex_hdl_t,pciio_slot_t); +extern int pcibr_slot_call_device_attach(vertex_hdl_t, + pciio_slot_t, int); +extern void pcibr_rrb_alloc_init(pcibr_soft_t, int, int, int); +extern int pcibr_pcix_rbars_calc(pcibr_soft_t); +extern pcibr_info_t pcibr_device_info_new(pcibr_soft_t, pciio_slot_t, + pciio_function_t, pciio_vendor_id_t, + pciio_device_id_t); +extern int pcibr_initial_rrb(vertex_hdl_t, pciio_slot_t, + pciio_slot_t); +extern void xwidget_error_register(vertex_hdl_t, error_handler_f *, + error_handler_arg_t); +extern void pcibr_clearwidint(pcibr_soft_t); -extern int pcibr_attach2(vertex_hdl_t, bridge_t *, vertex_hdl_t, int, pcibr_soft_t *); -extern void pcibr_driver_reg_callback(vertex_hdl_t, int, int, int); -extern void pcibr_driver_unreg_callback(vertex_hdl_t, int, int, int); /* @@ -30,10 +59,9 @@ */ static int pic_bus1_widget_info_dup(vertex_hdl_t conn_v, vertex_hdl_t peer_conn_v, - cnodeid_t xbow_peer) + cnodeid_t xbow_peer, char *peer_path) { xwidget_info_t widget_info, peer_widget_info; - char peer_path[256]; vertex_hdl_t peer_hubv; hubinfo_t peer_hub_info; @@ -48,7 +76,7 @@ (arbitrary_info_t *)&widget_info) == GRAPH_SUCCESS) { peer_widget_info = kmalloc(sizeof (*(peer_widget_info)), GFP_KERNEL); if ( !peer_widget_info ) { - return 0; + return -ENOMEM; } memset(peer_widget_info, 0, sizeof (*(peer_widget_info))); @@ -96,7 +124,7 @@ char pathname[256], peer_path[256], tmpbuf[256]; char *p; int rc; - vertex_hdl_t peer_conn_v; + vertex_hdl_t peer_conn_v, hubv; int pos; slabid_t slab; @@ -141,9 +169,15 @@ * vertex but that should be safe and we don't * really expect the additions to fail anyway. */ - if (!pic_bus1_widget_info_dup(conn_v, peer_conn_v, xbow_peer)) + if (!pic_bus1_widget_info_dup(conn_v, peer_conn_v, + xbow_peer, peer_path)) return 0; + hubv = cnodeid_to_vertex(xbow_peer); + ASSERT(hubv != GRAPH_VERTEX_NONE); + device_master_set(peer_conn_v, hubv); + xtalk_provider_register(hubv, &hub_provider); + xtalk_provider_startup(hubv); return peer_conn_v; } } @@ -151,12 +185,15 @@ return 0; } - +/* + * PIC has two buses under a single widget. pic_attach() calls pic_attach2() + * to attach each of those buses. + */ int pic_attach(vertex_hdl_t conn_v) { int rc; - bridge_t *bridge0, *bridge1 = (bridge_t *)0; + void *bridge0, *bridge1 = (void *)0; vertex_hdl_t pcibr_vhdl0, pcibr_vhdl1 = (vertex_hdl_t)0; pcibr_soft_t bus0_soft, bus1_soft = (pcibr_soft_t)0; vertex_hdl_t conn_v0, conn_v1, peer_conn_v; @@ -165,9 +202,8 @@ PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, conn_v, "pic_attach()\n")); - bridge0 = (bridge_t *) xtalk_piotrans_addr(conn_v, NULL, - 0, sizeof(bridge_t), 0); - bridge1 = (bridge_t *)((char *)bridge0 + PIC_BUS1_OFFSET); + bridge0 = pcibr_bridge_ptr_get(conn_v, 0); + bridge1 = pcibr_bridge_ptr_get(conn_v, 1); PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, conn_v, "pic_attach: bridge0=0x%lx, bridge1=0x%lx\n", @@ -215,8 +251,23 @@ pciio_provider_startup(pcibr_vhdl0); pciio_provider_startup(pcibr_vhdl1); - pcibr_attach2(conn_v0, bridge0, pcibr_vhdl0, 0, &bus0_soft); - pcibr_attach2(conn_v1, bridge1, pcibr_vhdl1, 1, &bus1_soft); + pic_attach2(conn_v0, bridge0, pcibr_vhdl0, 0, &bus0_soft); + pic_attach2(conn_v1, bridge1, pcibr_vhdl1, 1, &bus1_soft); + + { + /* If we're dual-ported finish duplicating the peer info structure. + * The error handler and arg are done in pic_attach2(). + */ + xwidget_info_t info0, info1; + if (conn_v0 != conn_v1) { /* dual ported */ + info0 = xwidget_info_get(conn_v0); + info1 = xwidget_info_get(conn_v1); + if (info1->w_efunc == (error_handler_f *)NULL) + info1->w_efunc = info0->w_efunc; + if (info1->w_einfo == (error_handler_arg_t)0) + info1->w_einfo = bus1_soft; + } + } /* save a pointer to the PIC's other bus's soft struct */ bus0_soft->bs_peers_soft = bus1_soft; @@ -229,6 +280,506 @@ return 0; } + +/* + * PIC has two buses under a single widget. pic_attach() calls pic_attach2() + * to attach each of those buses. + */ +static int +pic_attach2(vertex_hdl_t xconn_vhdl, void *bridge, + vertex_hdl_t pcibr_vhdl, int busnum, pcibr_soft_t *ret_softp) +{ + vertex_hdl_t ctlr_vhdl; + pcibr_soft_t pcibr_soft; + pcibr_info_t pcibr_info; + xwidget_info_t info; + xtalk_intr_t xtalk_intr; + pcibr_list_p self; + int entry, slot, ibit, i; + vertex_hdl_t noslot_conn; + char devnm[MAXDEVNAME], *s; + pcibr_hints_t pcibr_hints; + picreg_t id; + picreg_t int_enable; + picreg_t pic_ctrl_reg; + + int iobrick_type_get_nasid(nasid_t nasid); + int iomoduleid_get(nasid_t nasid); + int irq; + int cpu; + + PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, pcibr_vhdl, + "pic_attach2: bridge=0x%lx, busnum=%d\n", bridge, busnum)); + + ctlr_vhdl = NULL; + ctlr_vhdl = hwgraph_register(pcibr_vhdl, EDGE_LBL_CONTROLLER, 0, + 0, 0, 0, + S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, 0, 0, + (struct file_operations *)&pcibr_fops, (void *)pcibr_vhdl); + ASSERT(ctlr_vhdl != NULL); + + id = pcireg_bridge_id_get(bridge); + hwgraph_info_add_LBL(pcibr_vhdl, INFO_LBL_PCIBR_ASIC_REV, + (arbitrary_info_t)XWIDGET_PART_REV_NUM(id)); + + /* + * Get the hint structure; if some NIC callback marked this vertex as + * "hands-off" then we just return here, before doing anything else. + */ + pcibr_hints = pcibr_hints_get(xconn_vhdl, 0); + + if (pcibr_hints && pcibr_hints->ph_hands_off) + return -1; + + /* allocate soft structure to hang off the vertex. Link the new soft + * structure to the pcibr_list linked list + */ + pcibr_soft = kmalloc(sizeof (*(pcibr_soft)), GFP_KERNEL); + if ( !pcibr_soft ) + return -ENOMEM; + + self = kmalloc(sizeof (*(self)), GFP_KERNEL); + if ( !self ) { + kfree(pcibr_soft); + return -ENOMEM; + } + memset(pcibr_soft, 0, sizeof (*(pcibr_soft))); + memset(self, 0, sizeof (*(self))); + + self->bl_soft = pcibr_soft; + self->bl_vhdl = pcibr_vhdl; + self->bl_next = pcibr_list; + pcibr_list = self; + + if (ret_softp) + *ret_softp = pcibr_soft; + + memset(pcibr_soft, 0, sizeof *pcibr_soft); + pcibr_soft_set(pcibr_vhdl, pcibr_soft); + + s = dev_to_name(pcibr_vhdl, devnm, MAXDEVNAME); + pcibr_soft->bs_name = kmalloc(strlen(s) + 1, GFP_KERNEL); + strcpy(pcibr_soft->bs_name, s); + + pcibr_soft->bs_conn = xconn_vhdl; + pcibr_soft->bs_vhdl = pcibr_vhdl; + pcibr_soft->bs_base = (void *)bridge; + pcibr_soft->bs_rev_num = XWIDGET_PART_REV_NUM(id); + pcibr_soft->bs_intr_bits = (pcibr_intr_bits_f *)pcibr_intr_bits; + pcibr_soft->bsi_err_intr = 0; + pcibr_soft->bs_min_slot = 0; + pcibr_soft->bs_max_slot = 3; + pcibr_soft->bs_busnum = busnum; + pcibr_soft->bs_bridge_type = PCIBR_BRIDGETYPE_PIC; + pcibr_soft->bs_int_ate_size = PIC_INTERNAL_ATES; + /* Make sure this is called after setting the bs_base and bs_bridge_type */ + pcibr_soft->bs_bridge_mode = (pcireg_speed_get(pcibr_soft) << 1) | + pcireg_mode_get(pcibr_soft); + + info = xwidget_info_get(xconn_vhdl); + pcibr_soft->bs_xid = xwidget_info_id_get(info); + pcibr_soft->bs_master = xwidget_info_master_get(info); + pcibr_soft->bs_mxid = xwidget_info_masterid_get(info); + + strcpy(pcibr_soft->bs_asic_name, "PIC"); + + PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, pcibr_vhdl, + "pic_attach2: pcibr_soft=0x%lx, mode=0x%x\n", + pcibr_soft, pcibr_soft->bs_bridge_mode)); + + PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, pcibr_vhdl, + "pic_attach2: %s ASIC: rev %s (code=0x%x)\n", + pcibr_soft->bs_asic_name, + (IS_PIC_PART_REV_A(pcibr_soft->bs_rev_num)) ? "A" : + (IS_PIC_PART_REV_B(pcibr_soft->bs_rev_num)) ? "B" : + (IS_PIC_PART_REV_C(pcibr_soft->bs_rev_num)) ? "C" : + "unknown", pcibr_soft->bs_rev_num)); + + /* PV854845: Must clear write request buffer to avoid parity errors */ + for (i=0; i < PIC_WR_REQ_BUFSIZE; i++) { + ((pic_t *)bridge)->p_wr_req_lower[i] = 0; + ((pic_t *)bridge)->p_wr_req_upper[i] = 0; + ((pic_t *)bridge)->p_wr_req_parity[i] = 0; + } + + pcibr_soft->bs_nasid = NASID_GET(bridge); + + pcibr_soft->bs_bricktype = iobrick_type_get_nasid(pcibr_soft->bs_nasid); + if (pcibr_soft->bs_bricktype < 0) + printk(KERN_WARNING "%s: bricktype was unknown by L1 (ret val = 0x%x)\n", + pcibr_soft->bs_name, pcibr_soft->bs_bricktype); + + pcibr_soft->bs_moduleid = iomoduleid_get(pcibr_soft->bs_nasid); + + if (pcibr_soft->bs_bricktype > 0) { + switch (pcibr_soft->bs_bricktype) { + case MODULE_PXBRICK: + case MODULE_IXBRICK: + case MODULE_OPUSBRICK: + pcibr_soft->bs_first_slot = 0; + pcibr_soft->bs_last_slot = 1; + pcibr_soft->bs_last_reset = 1; + + /* Bus 1 of IXBrick has a IO9, so there are 4 devices, not 2 */ + if ((pcibr_widget_to_bus(pcibr_vhdl) == 1) + && isIO9(pcibr_soft->bs_nasid)) { + pcibr_soft->bs_last_slot = 3; + pcibr_soft->bs_last_reset = 3; + } + break; + + case MODULE_CGBRICK: + pcibr_soft->bs_first_slot = 0; + pcibr_soft->bs_last_slot = 0; + pcibr_soft->bs_last_reset = 0; + break; + + default: + printk(KERN_WARNING "%s: Unknown bricktype: 0x%x\n", + pcibr_soft->bs_name, pcibr_soft->bs_bricktype); + break; + } + + PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_ATTACH, pcibr_vhdl, + "pic_attach2: bricktype=%d, brickbus=%d, " + "slots %d-%d\n", pcibr_soft->bs_bricktype, + pcibr_widget_to_bus(pcibr_vhdl), + pcibr_soft->bs_first_slot, pcibr_soft->bs_last_slot)); + } + + /* + * Initialize bridge and bus locks + */ + spin_lock_init(&pcibr_soft->bs_lock); + + /* + * If we have one, process the hints structure. + */ + if (pcibr_hints) { + unsigned rrb_fixed; + PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_HINTS, pcibr_vhdl, + "pic_attach2: pcibr_hints=0x%lx\n", pcibr_hints)); + + rrb_fixed = pcibr_hints->ph_rrb_fixed; + + pcibr_soft->bs_rrb_fixed = rrb_fixed; + + if (pcibr_hints->ph_intr_bits) + pcibr_soft->bs_intr_bits = pcibr_hints->ph_intr_bits; + + + for (slot = pcibr_soft->bs_min_slot; + slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { + int hslot = pcibr_hints->ph_host_slot[slot] - 1; + + if (hslot < 0) { + pcibr_soft->bs_slot[slot].host_slot = slot; + } else { + pcibr_soft->bs_slot[slot].has_host = 1; + pcibr_soft->bs_slot[slot].host_slot = hslot; + } + } + } + + /* + * Set-up initial values for state fields + */ + for (slot = pcibr_soft->bs_min_slot; + slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { + pcibr_soft->bs_slot[slot].bss_devio.bssd_space = PCIIO_SPACE_NONE; + pcibr_soft->bs_slot[slot].bss_devio.bssd_ref_cnt = 0; + pcibr_soft->bs_slot[slot].bss_d64_base = PCIBR_D64_BASE_UNSET; + pcibr_soft->bs_slot[slot].bss_d32_base = PCIBR_D32_BASE_UNSET; + pcibr_soft->bs_rrb_valid_dflt[slot][VCHAN0] = -1; + } + + for (ibit = 0; ibit < 8; ++ibit) { + pcibr_soft->bs_intr[ibit].bsi_xtalk_intr = 0; + pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_soft = pcibr_soft; + pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_list = NULL; + pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_ibit = ibit; + pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_hdlrcnt = 0; + pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_shared = 0; + pcibr_soft->bs_intr[ibit].bsi_pcibr_intr_wrap.iw_connected = 0; + } + + + /* + * connect up our error handler. PIC has 2 busses (thus resulting in 2 + * pcibr_soft structs under 1 widget), so only register a xwidget error + * handler for PIC's bus0. NOTE: for PIC pcibr_error_handler_wrapper() + * is a wrapper routine we register that will call the real error handler + * pcibr_error_handler() with the correct pcibr_soft struct. + */ + if (busnum == 0) { + xwidget_error_register(xconn_vhdl, + pcibr_error_handler_wrapper, pcibr_soft); + } + + /* + * Clear all pending interrupts. Assume all interrupts are from slot 3 + * until otherise setup. + */ + pcireg_intr_reset_set(pcibr_soft, PIC_IRR_ALL_CLR); + pcireg_intr_device_set(pcibr_soft, 0x006db6db); + + /* Setup the mapping register used for direct mapping */ + pcibr_directmap_init(pcibr_soft); + + /* + * Initialize the PICs control register. + */ + pic_ctrl_reg = pcireg_control_get(pcibr_soft); + + /* Bridges Requester ID: bus = busnum, dev = 0, func = 0 */ + pic_ctrl_reg &= ~PIC_CTRL_BUS_NUM_MASK; + pic_ctrl_reg |= PIC_CTRL_BUS_NUM(busnum); + pic_ctrl_reg &= ~PIC_CTRL_DEV_NUM_MASK; + pic_ctrl_reg &= ~PIC_CTRL_FUN_NUM_MASK; + + pic_ctrl_reg &= ~PIC_CTRL_NO_SNOOP; + pic_ctrl_reg &= ~PIC_CTRL_RELAX_ORDER; + + /* enable parity checking on PICs internal RAM */ + pic_ctrl_reg |= PIC_CTRL_PAR_EN_RESP; + pic_ctrl_reg |= PIC_CTRL_PAR_EN_ATE; + + /* PIC BRINGUP WAR (PV# 862253): dont enable write request parity */ + if (!PCIBR_WAR_ENABLED(PV862253, pcibr_soft)) { + pic_ctrl_reg |= PIC_CTRL_PAR_EN_REQ; + } + + pic_ctrl_reg |= PIC_CTRL_PAGE_SIZE; + + pcireg_control_set(pcibr_soft, pic_ctrl_reg); + + /* Initialize internal mapping entries (ie. the ATEs) */ + for (entry = 0; entry < pcibr_soft->bs_int_ate_size; entry++) + pcireg_int_ate_set(pcibr_soft, entry, 0); + + pcibr_soft->bs_int_ate_resource.start = 0; + pcibr_soft->bs_int_ate_resource.end = pcibr_soft->bs_int_ate_size - 1; + + /* Setup the PICs error interrupt handler. */ + xtalk_intr = xtalk_intr_alloc(xconn_vhdl, (device_desc_t)0, pcibr_vhdl); + + ASSERT(xtalk_intr != NULL); + + irq = ((hub_intr_t)xtalk_intr)->i_bit; + cpu = ((hub_intr_t)xtalk_intr)->i_cpuid; + + intr_unreserve_level(cpu, irq); + ((hub_intr_t)xtalk_intr)->i_bit = SGI_PCIBR_ERROR; + xtalk_intr->xi_vector = SGI_PCIBR_ERROR; + + pcibr_soft->bsi_err_intr = xtalk_intr; + + /* + * On IP35 with XBridge, we do some extra checks in pcibr_setwidint + * in order to work around some addressing limitations. In order + * for that fire wall to work properly, we need to make sure we + * start from a known clean state. + */ + pcibr_clearwidint(pcibr_soft); + + xtalk_intr_connect(xtalk_intr, + (intr_func_t) pcibr_error_intr_handler, + (intr_arg_t) pcibr_soft, + (xtalk_intr_setfunc_t) pcibr_setwidint, + (void *) pcibr_soft); + + request_irq(SGI_PCIBR_ERROR, (void *)pcibr_error_intr_handler, SA_SHIRQ, + "PCIBR error", (intr_arg_t) pcibr_soft); + + PCIBR_DEBUG_ALWAYS((PCIBR_DEBUG_INTR_ALLOC, pcibr_vhdl, + "pcibr_setwidint: target_id=0x%lx, int_addr=0x%lx\n", + pcireg_intr_dst_target_id_get(pcibr_soft), + pcireg_intr_dst_addr_get(pcibr_soft))); + + /* now we can start handling error interrupts */ + int_enable = pcireg_intr_enable_get(pcibr_soft); + int_enable |= PIC_ISR_ERRORS; + + /* PIC BRINGUP WAR (PV# 856864 & 856865): allow the tnums that are + * locked out to be freed up sooner (by timing out) so that the + * read tnums are never completely used up. + */ + if (PCIBR_WAR_ENABLED(PV856864, pcibr_soft)) { + int_enable &= ~PIC_ISR_PCIX_REQ_TOUT; + int_enable &= ~PIC_ISR_XREAD_REQ_TIMEOUT; + + pcireg_req_timeout_set(pcibr_soft, 0x750); + } + + pcireg_intr_enable_set(pcibr_soft, int_enable); + pcireg_intr_mode_set(pcibr_soft, 0); /* dont send 'clear interrupt' pkts */ + pcireg_tflush_get(pcibr_soft); /* wait until Bridge PIO complete */ + + /* + * PIC BRINGUP WAR (PV# 856866, 859504, 861476, 861478): Don't use + * RRB0, RRB8, RRB1, and RRB9. Assign them to DEVICE[2|3]--VCHAN3 + * so they are not used. This works since there is currently no + * API to penable VCHAN3. + */ + if (PCIBR_WAR_ENABLED(PV856866, pcibr_soft)) { + pcireg_rrb_bit_set(pcibr_soft, 0, 0x000f000f); /* even rrb reg */ + pcireg_rrb_bit_set(pcibr_soft, 1, 0x000f000f); /* odd rrb reg */ + } + + /* PIC only supports 64-bit direct mapping in PCI-X mode. Since + * all PCI-X devices that initiate memory transactions must be + * capable of generating 64-bit addressed, we force 64-bit DMAs. + */ + pcibr_soft->bs_dma_flags = 0; + if (IS_PCIX(pcibr_soft)) { + pcibr_soft->bs_dma_flags |= PCIIO_DMA_A64; + } + + { + + iopaddr_t prom_base_addr = pcibr_soft->bs_xid << 24; + int prom_base_size = 0x1000000; + int status; + struct resource *res; + + /* Allocate resource maps based on bus page size; for I/O and memory + * space, free all pages except those in the base area and in the + * range set by the PROM. + * + * PROM creates BAR addresses in this format: 0x0ws00000 where w is + * the widget number and s is the device register offset for the slot. + */ + + /* Setup the Bus's PCI IO Root Resource. */ + pcibr_soft->bs_io_win_root_resource.start = PCIBR_BUS_IO_BASE; + pcibr_soft->bs_io_win_root_resource.end = 0xffffffff; + res = (struct resource *) kmalloc( sizeof(struct resource), GFP_KERNEL); + if (!res) + panic("PCIBR:Unable to allocate resource structure\n"); + + /* Block off the range used by PROM. */ + res->start = prom_base_addr; + res->end = prom_base_addr + (prom_base_size - 1); + status = request_resource(&pcibr_soft->bs_io_win_root_resource, res); + if (status) + panic("PCIBR:Unable to request_resource()\n"); + + /* Setup the Small Window Root Resource */ + pcibr_soft->bs_swin_root_resource.start = PAGE_SIZE; + pcibr_soft->bs_swin_root_resource.end = 0x000FFFFF; + + /* Setup the Bus's PCI Memory Root Resource */ + pcibr_soft->bs_mem_win_root_resource.start = 0x200000; + pcibr_soft->bs_mem_win_root_resource.end = 0xffffffff; + res = (struct resource *) kmalloc( sizeof(struct resource), GFP_KERNEL); + if (!res) + panic("PCIBR:Unable to allocate resource structure\n"); + + /* Block off the range used by PROM. */ + res->start = prom_base_addr; + res->end = prom_base_addr + (prom_base_size - 1);; + status = request_resource(&pcibr_soft->bs_mem_win_root_resource, res); + if (status) + panic("PCIBR:Unable to request_resource()\n"); + + } + + + /* build "no-slot" connection point */ + pcibr_info = pcibr_device_info_new(pcibr_soft, PCIIO_SLOT_NONE, + PCIIO_FUNC_NONE, PCIIO_VENDOR_ID_NONE, PCIIO_DEVICE_ID_NONE); + noslot_conn = pciio_device_info_register(pcibr_vhdl, &pcibr_info->f_c); + + /* Store no slot connection point info for tearing it down during detach. */ + pcibr_soft->bs_noslot_conn = noslot_conn; + pcibr_soft->bs_noslot_info = pcibr_info; + + for (slot = pcibr_soft->bs_min_slot; + slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { + /* Find out what is out there */ + (void)pcibr_slot_info_init(pcibr_vhdl, slot); + } + + for (slot = pcibr_soft->bs_min_slot; + slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { + /* Set up the address space for this slot in the PCI land */ + (void)pcibr_slot_addr_space_init(pcibr_vhdl, slot); + } + + for (slot = pcibr_soft->bs_min_slot; + slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { + /* Setup the device register */ + (void)pcibr_slot_device_init(pcibr_vhdl, slot); + } + + if (IS_PCIX(pcibr_soft)) { + pcibr_soft->bs_pcix_rbar_inuse = 0; + pcibr_soft->bs_pcix_rbar_avail = NUM_RBAR; + pcibr_soft->bs_pcix_rbar_percent_allowed = + pcibr_pcix_rbars_calc(pcibr_soft); + + for (slot = pcibr_soft->bs_min_slot; + slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { + /* Setup the PCI-X Read Buffer Attribute Registers (RBARs) */ + (void)pcibr_slot_pcix_rbar_init(pcibr_soft, slot); + } + } + + for (slot = pcibr_soft->bs_min_slot; + slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { + /* Setup host/guest relations */ + (void)pcibr_slot_guest_info_init(pcibr_vhdl, slot); + } + + /* Handle initial RRB management */ + pcibr_initial_rrb(pcibr_vhdl, + pcibr_soft->bs_first_slot, pcibr_soft->bs_last_slot); + + /* Before any drivers get called that may want to re-allocate RRB's, + * let's get some special cases pre-allocated. Drivers may override + * these pre-allocations, but by doing pre-allocations now we're + * assured not to step all over what the driver intended. + */ + if (pcibr_soft->bs_bricktype > 0) { + switch (pcibr_soft->bs_bricktype) { + case MODULE_PXBRICK: + case MODULE_IXBRICK: + case MODULE_OPUSBRICK: + /* + * If IO9 in bus 1, allocate RRBs to all the IO9 devices + */ + if ((pcibr_widget_to_bus(pcibr_vhdl) == 1) && + (pcibr_soft->bs_slot[0].bss_vendor_id == 0x10A9) && + (pcibr_soft->bs_slot[0].bss_device_id == 0x100A)) { + pcibr_rrb_alloc_init(pcibr_soft, 0, VCHAN0, 4); + pcibr_rrb_alloc_init(pcibr_soft, 1, VCHAN0, 4); + pcibr_rrb_alloc_init(pcibr_soft, 2, VCHAN0, 4); + pcibr_rrb_alloc_init(pcibr_soft, 3, VCHAN0, 4); + } else { + pcibr_rrb_alloc_init(pcibr_soft, 0, VCHAN0, 4); + pcibr_rrb_alloc_init(pcibr_soft, 1, VCHAN0, 4); + } + break; + + case MODULE_CGBRICK: + pcibr_rrb_alloc_init(pcibr_soft, 0, VCHAN0, 8); + break; + } /* switch */ + } + + + for (slot = pcibr_soft->bs_min_slot; + slot < PCIBR_NUM_SLOTS(pcibr_soft); ++slot) { + /* Call the device attach */ + (void)pcibr_slot_call_device_attach(pcibr_vhdl, slot, 0); + } + + pciio_device_attach(noslot_conn, 0); + + return 0; +} + + /* * pci provider functions * @@ -237,6 +788,8 @@ */ pciio_provider_t pci_pic_provider = { + PCIIO_ASIC_TYPE_PIC, + (pciio_piomap_alloc_f *) pcibr_piomap_alloc, (pciio_piomap_free_f *) pcibr_piomap_free, (pciio_piomap_addr_f *) pcibr_piomap_addr, @@ -263,12 +816,12 @@ (pciio_provider_startup_f *) pcibr_provider_startup, (pciio_provider_shutdown_f *) pcibr_provider_shutdown, (pciio_reset_f *) pcibr_reset, - (pciio_write_gather_flush_f *) pcibr_write_gather_flush, (pciio_endian_set_f *) pcibr_endian_set, - (pciio_priority_set_f *) pcibr_priority_set, (pciio_config_get_f *) pcibr_config_get, (pciio_config_set_f *) pcibr_config_set, - (pciio_error_extract_f *) 0, + + (pciio_error_extract_f *) pcibr_error_extract, + (pciio_driver_reg_callback_f *) pcibr_driver_reg_callback, (pciio_driver_unreg_callback_f *) pcibr_driver_unreg_callback, (pciio_device_unregister_f *) pcibr_device_unregister, diff -Nru a/arch/ia64/sn/io/sn2/shuberror.c b/arch/ia64/sn/io/sn2/shuberror.c --- a/arch/ia64/sn/io/sn2/shuberror.c Wed Feb 4 16:51:37 2004 +++ b/arch/ia64/sn/io/sn2/shuberror.c Wed Feb 4 16:51:37 2004 @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include diff -Nru a/arch/ia64/sn/io/sn2/xbow.c b/arch/ia64/sn/io/sn2/xbow.c --- a/arch/ia64/sn/io/sn2/xbow.c Wed Feb 4 16:51:35 2004 +++ b/arch/ia64/sn/io/sn2/xbow.c Wed Feb 4 16:51:35 2004 @@ -9,11 +9,15 @@ #include #include #include +#include +#include +#include #include #include #include #include #include +#include /* #define DEBUG 1 */ /* #define XBOW_DEBUG 1 */ diff -Nru a/arch/ia64/sn/io/sn2/xtalk.c b/arch/ia64/sn/io/sn2/xtalk.c --- a/arch/ia64/sn/io/sn2/xtalk.c Wed Feb 4 16:51:33 2004 +++ b/arch/ia64/sn/io/sn2/xtalk.c Wed Feb 4 16:51:33 2004 @@ -30,9 +30,6 @@ * completely disappear. */ -#define NEW(ptr) (ptr = kmalloc(sizeof (*(ptr)), GFP_KERNEL)) -#define DEL(ptr) (kfree(ptr)) - char widget_info_fingerprint[] = "widget_info"; /* ===================================================================== @@ -855,7 +852,9 @@ char *s,devnm[MAXDEVNAME]; /* Allocate widget_info and associate it with widget vertex */ - NEW(widget_info); + widget_info = kmalloc(sizeof(*widget_info), GFP_KERNEL); + if (!widget_info) + return - ENOMEM; /* Initialize widget_info */ widget_info->w_vertex = widget; @@ -898,16 +897,13 @@ /* Make sure that we have valid widget information initialized */ if (!(widget_info = xwidget_info_get(widget))) - return(1); + return 1; hwid = &(widget_info->w_hwid); - /* Clean out the xwidget information */ - (void)kfree(widget_info->w_name); - memset((void *)widget_info, 0, sizeof(widget_info)); - DEL(widget_info); - - return(0); + kfree(widget_info->w_name); + kfree(widget_info); + return 0; } void diff -Nru a/arch/ia64/sn/io/xswitch.c b/arch/ia64/sn/io/xswitch.c --- a/arch/ia64/sn/io/xswitch.c Wed Feb 4 16:51:34 2004 +++ b/arch/ia64/sn/io/xswitch.c Wed Feb 4 16:51:34 2004 @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -18,8 +19,6 @@ #include #include -#define NEW(ptr) (ptr = kmalloc(sizeof (*(ptr)), GFP_KERNEL)) -#define DEL(ptr) (kfree(ptr)) /* * This file provides generic support for Crosstalk @@ -118,7 +117,12 @@ if (xswitch_info == NULL) { int port; - NEW(xswitch_info); + xswitch_info = kmalloc(sizeof(*xswitch_info), GFP_KERNEL); + if (!xswitch_info) { + printk(KERN_WARNING "xswitch_info_new(): Unable to " + "allocate memory\n"); + return NULL; + } xswitch_info->census = 0; for (port = 0; port <= XSWITCH_CENSUS_PORT_MAX; port++) { xswitch_info_vhdl_set(xswitch_info, port, diff -Nru a/arch/ia64/sn/kernel/bte.c b/arch/ia64/sn/kernel/bte.c --- a/arch/ia64/sn/kernel/bte.c Wed Feb 4 16:51:35 2004 +++ b/arch/ia64/sn/kernel/bte.c Wed Feb 4 16:51:35 2004 @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -14,6 +15,7 @@ #include #include #include +#include #include #include diff -Nru a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c --- a/arch/ia64/sn/kernel/irq.c Wed Feb 4 16:51:34 2004 +++ b/arch/ia64/sn/kernel/irq.c Wed Feb 4 16:51:34 2004 @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -40,8 +41,12 @@ extern void pcibr_force_interrupt(pcibr_intr_t intr); extern int sn_force_interrupt_flag; -static pcibr_intr_list_t *pcibr_intr_list; +struct sn_intr_list_t { + struct sn_intr_list_t *next; + pcibr_intr_t intr; +}; +static struct sn_intr_list_t *sn_intr_list[NR_IRQS]; static unsigned int @@ -114,30 +119,24 @@ } static void -sn_set_affinity_irq(unsigned int irq, cpumask_t mask) +sn_set_affinity_irq(unsigned int irq, unsigned long cpu) { -#if CONFIG_SMP - int redir = 0; - pcibr_intr_list_t p = pcibr_intr_list[irq]; - pcibr_intr_t intr; - int cpu; - extern void sn_shub_redirect_intr(pcibr_intr_t intr, unsigned long cpu); - extern void sn_tio_redirect_intr(pcibr_intr_t intr, unsigned long cpu); - +#if CONFIG_SMP + int redir = 0; + struct sn_intr_list_t *p = sn_intr_list[irq]; + pcibr_intr_t intr; + extern void sn_shub_redirect_intr(pcibr_intr_t intr, unsigned long cpu); + extern void sn_tio_redirect_intr(pcibr_intr_t intr, unsigned long cpu); + if (p == NULL) return; - intr = p->il_intr; + intr = p->intr; if (intr == NULL) return; - cpu = first_cpu(mask); - if (IS_PIC_SOFT(intr->bi_soft) ) { - sn_shub_redirect_intr(intr, cpu); - } else { - return; - } + sn_shub_redirect_intr(intr, cpu); (void) set_irq_affinity_info(irq, cpu_physical_id(intr->bi_cpu), redir); #endif /* CONFIG_SMP */ } @@ -156,7 +155,8 @@ struct irq_desc * -sn_irq_desc(unsigned int irq) { +sn_irq_desc(unsigned int irq) +{ irq = SN_IVEC_FROM_IRQ(irq); @@ -164,12 +164,14 @@ } u8 -sn_irq_to_vector(u8 irq) { +sn_irq_to_vector(u8 irq) +{ return(irq); } unsigned int -sn_local_vector_to_irq(u8 vector) { +sn_local_vector_to_irq(u8 vector) +{ return (CPU_VECTOR_TO_IRQ(smp_processor_id(), vector)); } @@ -179,7 +181,7 @@ int i; irq_desc_t *base_desc = _irq_desc; - for (i=IA64_FIRST_DEVICE_VECTOR; ibi_cpu; + if (pdacpu(cpu)->sn_last_irq < irq) { pdacpu(cpu)->sn_last_irq = irq; } - if (pdacpu(cpu)->sn_first_irq > irq) pdacpu(cpu)->sn_first_irq = irq; - if (!p) panic("Could not allocate memory for pcibr_intr_list_t\n"); - if ((list = pcibr_intr_list[irq])) { - while (list->il_next) list = list->il_next; - list->il_next = p; - p->il_next = NULL; - p->il_intr = intr; + if (pdacpu(cpu)->sn_first_irq == 0 || pdacpu(cpu)->sn_first_irq > irq) pdacpu(cpu)->sn_first_irq = irq; + if (!p) panic("Could not allocate memory for sn_intr_list_t\n"); + if ((list = sn_intr_list[irq])) { + while (list->next) list = list->next; + list->next = p; + p->next = NULL; + p->intr = intr; } else { - pcibr_intr_list[irq] = p; - p->il_next = NULL; - p->il_intr = intr; + sn_intr_list[irq] = p; + p->next = NULL; + p->intr = intr; } } void -force_polled_int(void) { +force_polled_int(void) +{ int i; - pcibr_intr_list_t p; + struct sn_intr_list_t *p; for (i=0; iil_intr){ - pcibr_force_interrupt(p->il_intr); + if (p->intr){ + pcibr_force_interrupt(p->intr); } - p = p->il_next; + p = p->next; } } } static void -force_interrupt(int irq) { - pcibr_intr_list_t p = pcibr_intr_list[irq]; +force_interrupt(int irq) +{ + struct sn_intr_list_t *p = sn_intr_list[irq]; while (p) { - if (p->il_intr) { - pcibr_force_interrupt(p->il_intr); + if (p->intr) { + pcibr_force_interrupt(p->intr); } - p = p->il_next; + p = p->next; } } @@ -255,14 +253,15 @@ */ static void -sn_check_intr(int irq, pcibr_intr_t intr) { +sn_check_intr(int irq, pcibr_intr_t intr) +{ unsigned long regval; int irr_reg_num; int irr_bit; unsigned long irr_reg; - regval = pcireg_intr_status_get(intr->bi_soft->bs_base); + regval = pcireg_intr_status_get(intr->bi_soft); irr_reg_num = irq_to_vector(irq) / 64; irr_bit = irq_to_vector(irq) % 64; switch (irr_reg_num) { @@ -294,68 +293,20 @@ } void -sn_lb_int_war_check(void) { +sn_lb_int_war_check(void) +{ int i; if (pda->sn_first_irq == 0) return; for (i=pda->sn_first_irq; i <= pda->sn_last_irq; i++) { - pcibr_intr_list_t p = pcibr_intr_list[i]; + struct sn_intr_list_t *p = sn_intr_list[i]; if (p == NULL) { continue; } while (p) { - sn_check_intr(i, p->il_intr); - p = p->il_next; + sn_check_intr(i, p->intr); + p = p->next; } } -} - -static inline int -sn_get_next_bit(void) { - int i; - int bit; - - for (i = 3; i >= 0; i--) { - if (pda->sn_soft_irr[i] != 0) { - bit = (i * 64) + __ffs(pda->sn_soft_irr[i]); - __change_bit(bit, (volatile void *)pda->sn_soft_irr); - return(bit); - } - } - return IA64_SPURIOUS_INT_VECTOR; -} - -void -sn_set_tpr(int vector) { - if (vector > IA64_LAST_DEVICE_VECTOR || vector < IA64_FIRST_DEVICE_VECTOR) { - ia64_setreg(_IA64_REG_CR_TPR, vector); - } else { - ia64_setreg(_IA64_REG_CR_TPR, IA64_LAST_DEVICE_VECTOR); - } -} - -static inline void -sn_get_all_ivr(void) { - int vector; - - vector = ia64_get_ivr(); - while (vector != IA64_SPURIOUS_INT_VECTOR) { - __set_bit(vector, (volatile void *)pda->sn_soft_irr); - ia64_eoi(); - if (vector > IA64_LAST_DEVICE_VECTOR) return; - vector = ia64_get_ivr(); - } -} - -int -sn_get_ivr(void) { - int vector; - - vector = sn_get_next_bit(); - if (vector == IA64_SPURIOUS_INT_VECTOR) { - sn_get_all_ivr(); - vector = sn_get_next_bit(); - } - return vector; } diff -Nru a/arch/ia64/sn/kernel/mca.c b/arch/ia64/sn/kernel/mca.c --- a/arch/ia64/sn/kernel/mca.c Wed Feb 4 16:51:34 2004 +++ b/arch/ia64/sn/kernel/mca.c Wed Feb 4 16:51:34 2004 @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include diff -Nru a/arch/ia64/sn/kernel/probe.c b/arch/ia64/sn/kernel/probe.c --- a/arch/ia64/sn/kernel/probe.c Wed Feb 4 16:51:34 2004 +++ b/arch/ia64/sn/kernel/probe.c Wed Feb 4 16:51:34 2004 @@ -8,6 +8,7 @@ * Copyright (c) 2000-2003 Silicon Graphics, Inc. All rights reserved. */ +#include #include /** diff -Nru a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c --- a/arch/ia64/sn/kernel/setup.c Wed Feb 4 16:51:34 2004 +++ b/arch/ia64/sn/kernel/setup.c Wed Feb 4 16:51:34 2004 @@ -7,6 +7,7 @@ */ #include +#include #include #include #include @@ -50,8 +51,6 @@ DEFINE_PER_CPU(struct pda_s, pda_percpu); -#define pxm_to_nasid(pxm) ((pxm)<<1) - #define MAX_PHYS_MEMORY (1UL << 49) /* 1 TB */ extern void bte_init_node (nodepda_t *, cnodeid_t); @@ -61,6 +60,8 @@ extern void init_platform_hubinfo(nodepda_t **nodepdaindr); extern void (*ia64_mark_idle)(int); extern void snidle(int); +extern unsigned char acpi_kbd_controller_present; + unsigned long sn_rtc_cycles_per_second; @@ -70,8 +71,7 @@ short physical_node_map[MAX_PHYSNODE_ID]; -int numionodes; - +int numionodes; /* * This is the address of the RRegs in the HSpace of the global * master. It is used by a hack in serial.c (serial_[in|out], @@ -120,6 +120,29 @@ char drive_info[4*16]; #endif +/* + * This routine can only be used during init, since + * smp_boot_data is an init data structure. + * We have to use smp_boot_data.cpu_phys_id to find + * the physical id of the processor because the normal + * cpu_physical_id() relies on data structures that + * may not be initialized yet. + */ + +static int +pxm_to_nasid(int pxm) +{ + int i; + int nid; + + nid = pxm_to_nid_map[pxm]; + for (i = 0; i < num_memblks; i++) { + if (node_memblk[i].nid == nid) { + return NASID_GET(node_memblk[i].start_paddr); + } + } + return -1; +} /** * early_sn_setup - early setup routine for SN platforms * @@ -223,6 +246,22 @@ extern void sn_cpu_init(void); extern nasid_t snia_get_console_nasid(void); + /* + * If the generic code has enabled vga console support - lets + * get rid of it again. This is a kludge for the fact that ACPI + * currtently has no way of informing us if legacy VGA is available + * or not. + */ +#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) + if (conswitchp == &vga_con) { + printk(KERN_DEBUG "SGI: Disabling VGA console\n"); +#ifdef CONFIG_DUMMY_CONSOLE + conswitchp = &dummy_con; +#else + conswitchp = NULL; +#endif /* CONFIG_DUMMY_CONSOLE */ + } +#endif /* def(CONFIG_VT) && def(CONFIG_VGA_CONSOLE) */ MAX_DMA_ADDRESS = PAGE_OFFSET + MAX_PHYS_MEMORY; @@ -231,6 +270,19 @@ if (pxm_to_nid_map[pxm] != -1) physical_node_map[pxm_to_nasid(pxm)] = pxm_to_nid_map[pxm]; + + /* + * Old PROMs do not provide an ACPI FADT. Disable legacy keyboard + * support here so we don't have to listen to failed keyboard probe + * messages. + */ + if ((major < 2 || (major == 2 && minor <= 9)) && + acpi_kbd_controller_present) { + printk(KERN_INFO "Disabling legacy keyboard support as prom " + "is too old and doesn't provide FADT\n"); + acpi_kbd_controller_present = 0; + } + printk("SGI SAL version %x.%02x\n", major, minor); /* @@ -277,11 +329,6 @@ */ sn_init_pdas(cmdline_p); - /* - * Check for WARs. - */ - sn_check_for_wars(); - ia64_mark_idle = &snidle; /* @@ -340,7 +387,7 @@ /* * Now copy the array of nodepda pointers to each nodepda. */ - for (cnode=0; cnode < numnodes; cnode++) + for (cnode=0; cnode < numionodes; cnode++) memcpy(nodepdaindr[cnode]->pernode_pdaindr, nodepdaindr, sizeof(nodepdaindr)); @@ -371,7 +418,8 @@ int cpuphyid; int nasid; int slice; - int cnode, i; + int cnode; + static int wars_have_been_checked; /* * The boot cpu makes this call again after platform initialization is @@ -393,12 +441,24 @@ pda->hb_count = HZ/2; pda->hb_state = 0; pda->idle_flag = 0; + + if (cpuid != 0){ + memcpy(pda->cnodeid_to_nasid_table, pdacpu(0)->cnodeid_to_nasid_table, + sizeof(pda->cnodeid_to_nasid_table)); + } + + /* + * Check for WARs. + * Only needs to be done once, on BSP. + * Has to be done after loop above, because it uses pda.cnodeid_to_nasid_table[i]. + * Has to be done before assignment below. + */ + if (!wars_have_been_checked) { + sn_check_for_wars(); + wars_have_been_checked = 1; + } pda->shub_1_1_found = shub_1_1_found; - memset(pda->cnodeid_to_nasid_table, -1, sizeof(pda->cnodeid_to_nasid_table)); - for (i=0; icnodeid_to_nasid_table[i] = pxm_to_nasid(nid_to_pxm_map[i]); - if (local_node_data->active_cpu_count == 1) nodepda->node_first_cpu = cpuid; @@ -437,8 +497,10 @@ */ void -scan_for_ionodes(void) { +scan_for_ionodes(void) +{ int nasid = 0; + lboard_t *brd; /* Setup ionodes with memory */ for (nasid = 0; nasid < MAX_PHYSNODE_ID; nasid +=2) { @@ -450,12 +512,40 @@ klgraph_header = cnodeid = -1; klgraph_header = ia64_sn_get_klconfig_addr(nasid); - if (klgraph_header <= 0) + if (klgraph_header <= 0) { + if ( IS_RUNNING_ON_SIMULATOR() ) + continue; BUG(); /* All nodes must have klconfig tables! */ + } cnodeid = nasid_to_cnodeid(nasid); root_lboard[cnodeid] = (lboard_t *) NODE_OFFSET_TO_LBOARD( (nasid), ((kl_config_hdr_t *)(klgraph_header))-> ch_board_info); + } + + /* Scan headless/memless IO Nodes. */ + for (nasid = 0; nasid < MAX_PHYSNODE_ID; nasid +=2) { + /* if there's no nasid, don't try to read the klconfig on the node */ + if (physical_node_map[nasid] == -1) continue; + brd = find_lboard_any((lboard_t *)root_lboard[nasid_to_cnodeid(nasid)], KLTYPE_SNIA); + if (brd) { + brd = KLCF_NEXT_ANY(brd); /* Skip this node's lboard */ + if (!brd) + continue; + } + + brd = find_lboard_any(brd, KLTYPE_SNIA); + while (brd) { + pda->cnodeid_to_nasid_table[numionodes] = brd->brd_nasid; + physical_node_map[brd->brd_nasid] = numionodes; + root_lboard[numionodes] = brd; + numionodes++; + brd = KLCF_NEXT_ANY(brd); + if (!brd) + break; + + brd = find_lboard_any(brd, KLTYPE_SNIA); + } } } diff -Nru a/arch/ia64/sn/kernel/sn2/io.c b/arch/ia64/sn/kernel/sn2/io.c --- a/arch/ia64/sn/kernel/sn2/io.c Wed Feb 4 16:51:37 2004 +++ b/arch/ia64/sn/kernel/sn2/io.c Wed Feb 4 16:51:37 2004 @@ -23,6 +23,10 @@ #undef __sn_readw #undef __sn_readl #undef __sn_readq +#undef __sn_readb_relaxed +#undef __sn_readw_relaxed +#undef __sn_readl_relaxed +#undef __sn_readq_relaxed unsigned int __sn_inb (unsigned long port) @@ -82,6 +86,30 @@ __sn_readq (void *addr) { return ___sn_readq (addr); +} + +unsigned char +__sn_readb_relaxed (void *addr) +{ + return ___sn_readb_relaxed (addr); +} + +unsigned short +__sn_readw_relaxed (void *addr) +{ + return ___sn_readw_relaxed (addr); +} + +unsigned int +__sn_readl_relaxed (void *addr) +{ + return ___sn_readl_relaxed (addr); +} + +unsigned long +__sn_readq_relaxed (void *addr) +{ + return ___sn_readq_relaxed (addr); } #endif diff -Nru a/arch/ia64/sn/kernel/sn2/prominfo_proc.c b/arch/ia64/sn/kernel/sn2/prominfo_proc.c --- a/arch/ia64/sn/kernel/sn2/prominfo_proc.c Wed Feb 4 16:51:34 2004 +++ b/arch/ia64/sn/kernel/sn2/prominfo_proc.c Wed Feb 4 16:51:34 2004 @@ -14,6 +14,7 @@ #include #include #include +#include #include /* to lookup nasids */ diff -Nru a/arch/ia64/sn/kernel/sn2/sn2_smp.c b/arch/ia64/sn/kernel/sn2/sn2_smp.c --- a/arch/ia64/sn/kernel/sn2/sn2_smp.c Wed Feb 4 16:51:37 2004 +++ b/arch/ia64/sn/kernel/sn2/sn2_smp.c Wed Feb 4 16:51:37 2004 @@ -21,6 +21,7 @@ #include #include +#include #include #include #include diff -Nru a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c --- a/arch/ia64/sn/kernel/sn2/sn_proc_fs.c Wed Feb 4 16:51:37 2004 +++ b/arch/ia64/sn/kernel/sn2/sn_proc_fs.c Wed Feb 4 16:51:37 2004 @@ -10,6 +10,7 @@ #ifdef CONFIG_PROC_FS #include +#include #include diff -Nru a/arch/ppc/Kconfig b/arch/ppc/Kconfig --- a/arch/ppc/Kconfig Wed Feb 4 16:51:37 2004 +++ b/arch/ppc/Kconfig Wed Feb 4 16:51:37 2004 @@ -181,7 +181,7 @@ config PPC601_SYNC_FIX bool "Workarounds for PPC601 bugs" - depends on 6xx + depends on 6xx && (PPC_PREP || PPC_PMAC) help Some versions of the PPC601 (the first PowerPC chip) have bugs which mean that extra synchronization instructions are required near @@ -583,11 +583,6 @@ depends on PPC_MULTIPLATFORM default y -config PPC_GEN550 - bool - depends on SANDPOINT - default y - config PPC_PMAC bool depends on PPC_MULTIPLATFORM @@ -603,6 +598,11 @@ depends on PPC_PMAC || PPC_CHRP default y +config PPC_GEN550 + bool + depends on SANDPOINT || MCPN765 + default y + config FORCE bool depends on 6xx && (PCORE || POWERPMC250) @@ -1404,7 +1404,7 @@ config SERIAL_TEXT_DEBUG bool "Support for early boot texts over serial port" - depends on 4xx || GT64260 || LOPEC || MCPN765 || PPLUS || PRPMC800 || SANDPOINT + depends on 4xx || GT64260 || LOPEC || PPLUS || PRPMC800 || PPC_GEN550 config OCP bool diff -Nru a/arch/ppc/kernel/setup.c b/arch/ppc/kernel/setup.c --- a/arch/ppc/kernel/setup.c Wed Feb 4 16:51:37 2004 +++ b/arch/ppc/kernel/setup.c Wed Feb 4 16:51:37 2004 @@ -48,11 +48,6 @@ extern void do_cpu_ftr_fixups(unsigned long offset); extern void reloc_got2(unsigned long offset); - -#ifdef CONFIG_KGDB -extern void kgdb_map_scc(void); -#endif - extern void ppc6xx_idle(void); extern void power4_idle(void); @@ -632,7 +627,8 @@ if ( ppc_md.progress ) ppc_md.progress("setup_arch: enter", 0x3eab); #if defined(CONFIG_KGDB) - kgdb_map_scc(); + if (ppc_md.kgdb_map_scc) + ppc_md.kgdb_map_scc(); set_debug_traps(); if (strstr(cmd_line, "gdb")) { if (ppc_md.progress) diff -Nru a/arch/ppc/platforms/mcpn765_setup.c b/arch/ppc/platforms/mcpn765_setup.c --- a/arch/ppc/platforms/mcpn765_setup.c Wed Feb 4 16:51:36 2004 +++ b/arch/ppc/platforms/mcpn765_setup.c Wed Feb 4 16:51:36 2004 @@ -50,6 +50,7 @@ #include #include #include +#include #include "mcpn765.h" #include "mcpn765_serial.h" @@ -78,9 +79,6 @@ extern u_int openpic_irq(void); extern char cmd_line[]; -extern void gen550_progress(char *, unsigned short); -extern void gen550_init(int, struct uart_port *); - int use_of_interrupt_tree = 0; static void mcpn765_halt(void); @@ -472,6 +470,9 @@ #if defined(CONFIG_SERIAL_8250) && \ (defined(CONFIG_KGDB) || defined(CONFIG_SERIAL_TEXT_DEBUG)) mcpn765_early_serial_map(); +#ifdef CONFIG_KGDB + ppc_md.kgdb_map_scc = gen550_kgdb_map_scc; +#endif #ifdef CONFIG_SERIAL_TEXT_DEBUG ppc_md.progress = gen550_progress; #endif diff -Nru a/arch/ppc/platforms/sandpoint.c b/arch/ppc/platforms/sandpoint.c --- a/arch/ppc/platforms/sandpoint.c Wed Feb 4 16:51:37 2004 +++ b/arch/ppc/platforms/sandpoint.c Wed Feb 4 16:51:37 2004 @@ -103,12 +103,10 @@ #include #include #include +#include #include "sandpoint.h" -extern void gen550_progress(char *, unsigned short); -extern void gen550_init(int, struct uart_port *); - unsigned char __res[sizeof(bd_t)]; static void sandpoint_halt(void); @@ -706,6 +704,9 @@ #if defined(CONFIG_SERIAL_8250) && \ (defined(CONFIG_KGDB) || defined(CONFIG_SERIAL_TEXT_DEBUG)) sandpoint_early_serial_map(); +#ifdef CONFIG_KGDB + ppc_md.kgdb_map_scc = gen550_kgdb_map_scc; +#endif #ifdef CONFIG_SERIAL_TEXT_DEBUG ppc_md.progress = gen550_progress; #endif diff -Nru a/arch/ppc/syslib/Makefile b/arch/ppc/syslib/Makefile --- a/arch/ppc/syslib/Makefile Wed Feb 4 16:51:33 2004 +++ b/arch/ppc/syslib/Makefile Wed Feb 4 16:51:33 2004 @@ -66,7 +66,7 @@ obj-$(CONFIG_SPRUCE) += cpc700_pic.o indirect_pci.o pci_auto.o \ todc_time.o obj-$(CONFIG_8260) += m8260_setup.o ppc8260_pic.o -ifeq ($(CONFIG_SERIAL_8250)$(CONFIG_PPC_GEN550),yy) +ifeq ($(CONFIG_PPC_GEN550),y) obj-$(CONFIG_KGDB) += gen550_kgdb.o gen550_dbg.o obj-$(CONFIG_SERIAL_TEXT_DEBUG) += gen550_dbg.o endif diff -Nru a/arch/ppc/syslib/gen550_dbg.c b/arch/ppc/syslib/gen550_dbg.c --- a/arch/ppc/syslib/gen550_dbg.c Wed Feb 4 16:51:35 2004 +++ b/arch/ppc/syslib/gen550_dbg.c Wed Feb 4 16:51:35 2004 @@ -17,6 +17,8 @@ */ #include +#include +#include #include /* For linux/serial_core.h */ #include #include diff -Nru a/arch/ppc/syslib/gen550_kgdb.c b/arch/ppc/syslib/gen550_kgdb.c --- a/arch/ppc/syslib/gen550_kgdb.c Wed Feb 4 16:51:35 2004 +++ b/arch/ppc/syslib/gen550_kgdb.c Wed Feb 4 16:51:35 2004 @@ -77,7 +77,7 @@ * to use. */ void -kgdb_map_scc(void) +gen550_kgdb_map_scc(void) { printk(KERN_DEBUG "kgdb init\n"); kgdb_debugport = serial_init(KGDB_PORT, NULL); diff -Nru a/arch/ppc64/kernel/pSeries_pci.c b/arch/ppc64/kernel/pSeries_pci.c --- a/arch/ppc64/kernel/pSeries_pci.c Wed Feb 4 16:51:37 2004 +++ b/arch/ppc64/kernel/pSeries_pci.c Wed Feb 4 16:51:37 2004 @@ -721,3 +721,29 @@ } return NULL; } + +/* + * ppc64 can have multifunction devices that do not respond to function 0. + * In this case we must scan all functions. + */ +int +pcibios_scan_all_fns(struct pci_bus *bus, int devfn) +{ + struct device_node *busdn, *dn; + + if (bus->self) + busdn = pci_device_to_OF_node(bus->self); + else + busdn = bus->sysdata; /* must be a phb */ + + /* + * Check to see if there is any of the 8 functions are in the + * device tree. If they are then we need to scan all the + * functions of this slot. + */ + for (dn = busdn->child; dn; dn = dn->sibling) + if ((dn->devfn >> 3) == (devfn >> 3)) + return 1; + + return 0; +} diff -Nru a/arch/ppc64/kernel/stab.c b/arch/ppc64/kernel/stab.c --- a/arch/ppc64/kernel/stab.c Wed Feb 4 16:51:36 2004 +++ b/arch/ppc64/kernel/stab.c Wed Feb 4 16:51:36 2004 @@ -141,8 +141,7 @@ return (global_entry | (castout_entry & 0x7)); } -static inline void __ste_allocate(unsigned long esid, unsigned long vsid, - mm_context_t context) +static inline void __ste_allocate(unsigned long esid, unsigned long vsid) { unsigned char stab_entry; unsigned long *offset; @@ -185,7 +184,7 @@ } esid = GET_ESID(ea); - __ste_allocate(esid, vsid, context); + __ste_allocate(esid, vsid); /* Order update */ asm volatile("sync":::"memory"); @@ -215,7 +214,7 @@ if (!IS_VALID_EA(pc) || (REGION_ID(pc) >= KERNEL_REGION_ID)) return; vsid = get_vsid(mm->context, pc); - __ste_allocate(pc_esid, vsid, mm->context); + __ste_allocate(pc_esid, vsid); if (pc_esid == stack_esid) return; @@ -223,7 +222,7 @@ if (!IS_VALID_EA(stack) || (REGION_ID(stack) >= KERNEL_REGION_ID)) return; vsid = get_vsid(mm->context, stack); - __ste_allocate(stack_esid, vsid, mm->context); + __ste_allocate(stack_esid, vsid); if (pc_esid == unmapped_base_esid || stack_esid == unmapped_base_esid) return; @@ -232,7 +231,7 @@ (REGION_ID(unmapped_base) >= KERNEL_REGION_ID)) return; vsid = get_vsid(mm->context, unmapped_base); - __ste_allocate(unmapped_base_esid, vsid, mm->context); + __ste_allocate(unmapped_base_esid, vsid); /* Order update */ asm volatile("sync" : : : "memory"); diff -Nru a/arch/sparc64/kernel/head.S b/arch/sparc64/kernel/head.S --- a/arch/sparc64/kernel/head.S Wed Feb 4 16:51:35 2004 +++ b/arch/sparc64/kernel/head.S Wed Feb 4 16:51:35 2004 @@ -61,7 +61,7 @@ * 0x0202 : Supports kernel params string * 0x0201 : Supports reboot_command */ - .half 0x0300 /* HdrS version */ + .half 0x0300 /* HdrS version */ root_flags: .half 1 @@ -159,6 +159,21 @@ blu,pt %xcc, 1b add %l0, (1 << 3), %l0 + /* Search the small TLB. OBP never maps us like that but + * newer SILO can. + */ + clr %l0 + +1: ldxa [%l0] ASI_ITLB_TAG_READ, %g1 + membar #Sync + andn %g1, %l2, %g1 + cmp %g1, %g2 + be,pn %xcc, cheetah_got_tlbentry + nop + cmp %l0, (15 << 3) + blu,pt %xcc, 1b + add %l0, (1 << 3), %l0 + /* BUG() if we get here... */ ta 0x5 @@ -167,7 +182,8 @@ ldxa [%l0] ASI_ITLB_DATA_ACCESS, %g1 membar #Sync and %g1, %g3, %g1 - sub %g1, %g2, %g1 + set 0x5fff, %l0 + andn %g1, %l0, %g1 or %g5, %g1, %g5 /* Clear out any KERNBASE area entries. */ diff -Nru a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c --- a/arch/um/kernel/um_arch.c Wed Feb 4 16:51:36 2004 +++ b/arch/um/kernel/um_arch.c Wed Feb 4 16:51:36 2004 @@ -376,7 +376,7 @@ static int panic_exit(struct notifier_block *self, unsigned long unused1, void *unused2) { -#ifdef CONFIG_SYSRQ +#ifdef CONFIG_MAGIC_SYSRQ handle_sysrq('p', ¤t->thread.regs, NULL, NULL); #endif machine_halt(); diff -Nru a/arch/x86_64/ia32/sys_ia32.c b/arch/x86_64/ia32/sys_ia32.c --- a/arch/x86_64/ia32/sys_ia32.c Wed Feb 4 16:51:35 2004 +++ b/arch/x86_64/ia32/sys_ia32.c Wed Feb 4 16:51:35 2004 @@ -274,13 +274,16 @@ return -EINVAL; if (act) { + compat_uptr_t handler, restorer; + if (verify_area(VERIFY_READ, act, sizeof(*act)) || - __get_user((long)new_ka.sa.sa_handler, &act->sa_handler) || + __get_user(handler, &act->sa_handler) || __get_user(new_ka.sa.sa_flags, &act->sa_flags) || - __get_user((long)new_ka.sa.sa_restorer, &act->sa_restorer)|| + __get_user(restorer, &act->sa_restorer)|| __copy_from_user(&set32, &act->sa_mask, sizeof(compat_sigset_t))) return -EFAULT; - + new_ka.sa.sa_handler = compat_ptr(handler); + new_ka.sa.sa_restorer = compat_ptr(restorer); /* FIXME: here we rely on _COMPAT_NSIG_WORS to be >= than _NSIG_WORDS << 1 */ switch (_NSIG_WORDS) { case 4: new_ka.sa.sa_mask.sig[3] = set32.sig[6] @@ -331,13 +334,18 @@ if (act) { compat_old_sigset_t mask; + compat_uptr_t handler, restorer; if (verify_area(VERIFY_READ, act, sizeof(*act)) || - __get_user((long)new_ka.sa.sa_handler, &act->sa_handler) || + __get_user(handler, &act->sa_handler) || __get_user(new_ka.sa.sa_flags, &act->sa_flags) || - __get_user((long)new_ka.sa.sa_restorer, &act->sa_restorer) || + __get_user(restorer, &act->sa_restorer) || __get_user(mask, &act->sa_mask)) return -EFAULT; + + new_ka.sa.sa_handler = compat_ptr(handler); + new_ka.sa.sa_restorer = compat_ptr(restorer); + siginitset(&new_ka.sa.sa_mask, mask); } @@ -525,7 +533,7 @@ put_user(reclen, &dirent->d_reclen); copy_to_user(dirent->d_name, name, namlen); put_user(0, dirent->d_name + namlen); - ((char *) dirent) += reclen; + dirent = ((void *)dirent) + reclen; buf->current_dir = dirent; buf->count -= reclen; return 0; diff -Nru a/arch/x86_64/kernel/aperture.c b/arch/x86_64/kernel/aperture.c --- a/arch/x86_64/kernel/aperture.c Wed Feb 4 16:51:36 2004 +++ b/arch/x86_64/kernel/aperture.c Wed Feb 4 16:51:36 2004 @@ -87,13 +87,15 @@ /* Find a PCI capability */ static __u32 __init find_cap(int num, int slot, int func, int cap) { + u8 pos; + int bytes; if (!(read_pci_config_16(num,slot,func,PCI_STATUS) & PCI_STATUS_CAP_LIST)) return 0; - u8 pos = read_pci_config_byte(num,slot,func,PCI_CAPABILITY_LIST); - int bytes; + pos = read_pci_config_byte(num,slot,func,PCI_CAPABILITY_LIST); for (bytes = 0; bytes < 48 && pos >= 0x40; bytes++) { + u8 id; pos &= ~3; - u8 id = read_pci_config_byte(num,slot,func,pos+PCI_CAP_LIST_ID); + id = read_pci_config_byte(num,slot,func,pos+PCI_CAP_LIST_ID); if (id == 0xff) break; if (id == cap) @@ -106,26 +108,31 @@ /* Read a standard AGPv3 bridge header */ static __u32 __init read_agp(int num, int slot, int func, int cap, u32 *order) { - printk("AGP bridge at %02x:%02x:%02x\n", num, slot, func); - u32 apsizereg = read_pci_config_16(num,slot,func, cap + 0x14); + u32 apsize; + u32 apsizereg; + int nbits; + u32 aper_low, aper_hi; + u64 aper; + printk("AGP bridge at %02x:%02x:%02x\n", num, slot, func); + apsizereg = read_pci_config_16(num,slot,func, cap + 0x14); if (apsizereg == 0xffffffff) { printk("APSIZE in AGP bridge unreadable\n"); return 0; } - u32 apsize = apsizereg & 0xfff; + apsize = apsizereg & 0xfff; /* Some BIOS use weird encodings not in the AGPv3 table. */ if (apsize & 0xff) apsize |= 0xf00; - int nbits = hweight16(apsize); + nbits = hweight16(apsize); *order = 7 - nbits; if ((int)*order < 0) /* < 32MB */ *order = 0; - u32 aper_low = read_pci_config(num,slot,func, 0x10); - u32 aper_hi = read_pci_config(num,slot,func,0x14); - u64 aper = (aper_low & ~((1<<22)-1)) | ((u64)aper_hi << 32); + aper_low = read_pci_config(num,slot,func, 0x10); + aper_hi = read_pci_config(num,slot,func,0x14); + aper = (aper_low & ~((1<<22)-1)) | ((u64)aper_hi << 32); printk("Aperture from AGP @ %Lx size %u MB (APSIZE %x)\n", aper, 32 << *order, apsizereg); @@ -155,6 +162,7 @@ for (slot = 0; slot < 32; slot++) { for (func = 0; func < 8; func++) { u32 class, cap; + u8 type; class = read_pci_config(num,slot,func, PCI_CLASS_REVISION); if (class == 0xffffffff) @@ -172,7 +180,7 @@ } /* No multi-function device? */ - u8 type = read_pci_config_byte(num,slot,func, + type = read_pci_config_byte(num,slot,func, PCI_HEADER_TYPE); if (!(type & 0x80)) break; diff -Nru a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S --- a/arch/x86_64/kernel/entry.S Wed Feb 4 16:51:34 2004 +++ b/arch/x86_64/kernel/entry.S Wed Feb 4 16:51:35 2004 @@ -436,7 +436,7 @@ popq %rdi cli subl $1,%gs:pda_irqcount -#ifdef CONFIG_KGDB +#ifdef CONFIG_DEBUG_INFO movq RBP(%rdi),%rbp #endif leaq ARGOFFSET(%rdi),%rsp diff -Nru a/arch/x86_64/kernel/nmi.c b/arch/x86_64/kernel/nmi.c --- a/arch/x86_64/kernel/nmi.c Wed Feb 4 16:51:35 2004 +++ b/arch/x86_64/kernel/nmi.c Wed Feb 4 16:51:35 2004 @@ -311,10 +311,10 @@ void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason) { + int sum, cpu = safe_smp_processor_id(); + if (nmi_watchdog_disabled) return; - - int sum, cpu = safe_smp_processor_id(); sum = read_pda(apic_timer_irqs); if (last_irq_sums[cpu] == sum) { diff -Nru a/arch/x86_64/kernel/pci-gart.c b/arch/x86_64/kernel/pci-gart.c --- a/arch/x86_64/kernel/pci-gart.c Wed Feb 4 16:51:35 2004 +++ b/arch/x86_64/kernel/pci-gart.c Wed Feb 4 16:51:35 2004 @@ -117,11 +117,11 @@ static void free_iommu(unsigned long offset, int size) { + unsigned long flags; if (size == 1) { clear_bit(offset, iommu_gart_bitmap); return; } - unsigned long flags; spin_lock_irqsave(&iommu_bitmap_lock, flags); __clear_bit_string(iommu_gart_bitmap, offset, size); spin_unlock_irqrestore(&iommu_bitmap_lock, flags); @@ -329,6 +329,7 @@ { unsigned long npages = to_pages(phys_mem, size); unsigned long iommu_page = alloc_iommu(npages); + int i; if (iommu_page == -1) { if (!nonforced_iommu(dev, phys_mem, size)) return phys_mem; @@ -338,7 +339,6 @@ return bad_dma_address; } - int i; for (i = 0; i < npages; i++) { iommu_gatt_base[iommu_page + i] = GPTE_ENCODE(phys_mem); SET_LEAK(iommu_page + i); @@ -398,11 +398,11 @@ struct scatterlist *sout, unsigned long pages) { unsigned long iommu_start = alloc_iommu(pages); - if (iommu_start == -1) - return -1; - unsigned long iommu_page = iommu_start; int i; + + if (iommu_start == -1) + return -1; for (i = start; i < stopat; i++) { struct scatterlist *s = &sg[i]; @@ -519,12 +519,12 @@ { unsigned long iommu_page; int npages; + int i; if (dma_addr < iommu_bus_base + EMERGENCY_PAGES*PAGE_SIZE || dma_addr > iommu_bus_base + iommu_size) return; iommu_page = (dma_addr - iommu_bus_base)>>PAGE_SHIFT; npages = to_pages(dma_addr, size); - int i; for (i = 0; i < npages; i++) { iommu_gatt_base[iommu_page + i] = 0; CLEAR_LEAK(iommu_page + i); diff -Nru a/arch/x86_64/kernel/suspend_asm.S b/arch/x86_64/kernel/suspend_asm.S --- a/arch/x86_64/kernel/suspend_asm.S Wed Feb 4 16:51:37 2004 +++ b/arch/x86_64/kernel/suspend_asm.S Wed Feb 4 16:51:37 2004 @@ -122,4 +122,4 @@ .quad 0 loop2: .quad 0 - .previous \ No newline at end of file + .previous diff -Nru a/arch/x86_64/kernel/sys_x86_64.c b/arch/x86_64/kernel/sys_x86_64.c --- a/arch/x86_64/kernel/sys_x86_64.c Wed Feb 4 16:51:36 2004 +++ b/arch/x86_64/kernel/sys_x86_64.c Wed Feb 4 16:51:36 2004 @@ -105,13 +105,13 @@ return -ENOMEM; if (addr) { - addr = PAGE_ALIGN(addr); + addr = PAGE_ALIGN(addr); vma = find_vma(mm, addr); if (end - len >= addr && (!vma || addr + len <= vma->vm_start)) return addr; - } - addr = mm->free_area_cache; + } else + addr = mm->free_area_cache; if (addr < begin) addr = begin; start_addr = addr; diff -Nru a/arch/x86_64/lib/csum-partial.c b/arch/x86_64/lib/csum-partial.c --- a/arch/x86_64/lib/csum-partial.c Wed Feb 4 16:51:34 2004 +++ b/arch/x86_64/lib/csum-partial.c Wed Feb 4 16:51:34 2004 @@ -56,6 +56,8 @@ } count >>= 1; /* nr of 32-bit words.. */ if (count) { + unsigned long zero; + unsigned count64; if (4 & (unsigned long) buff) { result += *(unsigned int *) buff; count--; @@ -65,8 +67,8 @@ count >>= 1; /* nr of 64-bit words.. */ /* main loop using 64byte blocks */ - unsigned long zero = 0; - unsigned count64 = count >> 3; + zero = 0; + count64 = count >> 3; while (count64) { asm("addq 0*8(%[src]),%[res]\n\t" "adcq 1*8(%[src]),%[res]\n\t" diff -Nru a/arch/x86_64/mm/fault.c b/arch/x86_64/mm/fault.c --- a/arch/x86_64/mm/fault.c Wed Feb 4 16:51:33 2004 +++ b/arch/x86_64/mm/fault.c Wed Feb 4 16:51:33 2004 @@ -142,6 +142,10 @@ void dump_pagetable(unsigned long address) { pml4_t *pml4; + pgd_t *pgd; + pmd_t *pmd; + pte_t *pte; + asm("movq %%cr3,%0" : "=r" (pml4)); pml4 = __va((unsigned long)pml4 & PHYSICAL_PAGE_MASK); @@ -150,17 +154,17 @@ if (bad_address(pml4)) goto bad; if (!pml4_present(*pml4)) goto ret; - pgd_t *pgd = __pgd_offset_k((pgd_t *)pml4_page(*pml4), address); + pgd = __pgd_offset_k((pgd_t *)pml4_page(*pml4), address); if (bad_address(pgd)) goto bad; printk("PGD %lx ", pgd_val(*pgd)); if (!pgd_present(*pgd)) goto ret; - pmd_t *pmd = pmd_offset(pgd, address); + pmd = pmd_offset(pgd, address); if (bad_address(pmd)) goto bad; printk("PMD %lx ", pmd_val(*pmd)); if (!pmd_present(*pmd)) goto ret; - pte_t *pte = pte_offset_kernel(pmd, address); + pte = pte_offset_kernel(pmd, address); if (bad_address(pte)) goto bad; printk("PTE %lx", pte_val(*pte)); ret: diff -Nru a/arch/x86_64/mm/init.c b/arch/x86_64/mm/init.c --- a/arch/x86_64/mm/init.c Wed Feb 4 16:51:34 2004 +++ b/arch/x86_64/mm/init.c Wed Feb 4 16:51:34 2004 @@ -39,7 +39,7 @@ #define Dprintk(x...) -extern char _stext; +extern char _stext[]; DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); @@ -80,7 +80,7 @@ /* References to section boundaries */ -extern char _text, _etext, _edata, __bss_start, _end; +extern char _text, _etext, _edata, __bss_start, _end[]; extern char __init_begin, __init_end; int after_bootmem; @@ -442,7 +442,7 @@ kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT); kclist_add(&kcore_vmalloc, (void *)VMALLOC_START, VMALLOC_END-VMALLOC_START); - kclist_add(&kcore_kernel, &_stext, &_end - &_stext); + kclist_add(&kcore_kernel, &_stext, _end - _stext); kclist_add(&kcore_modules, (void *)MODULES_VADDR, MODULES_LEN); kclist_add(&kcore_vsyscall, (void *)VSYSCALL_START, VSYSCALL_END - VSYSCALL_START); diff -Nru a/drivers/acpi/ac.c b/drivers/acpi/ac.c --- a/drivers/acpi/ac.c Wed Feb 4 16:51:35 2004 +++ b/drivers/acpi/ac.c Wed Feb 4 16:51:35 2004 @@ -246,8 +246,8 @@ memset(ac, 0, sizeof(struct acpi_ac)); ac->handle = device->handle; - sprintf(acpi_device_name(device), "%s", ACPI_AC_DEVICE_NAME); - sprintf(acpi_device_class(device), "%s", ACPI_AC_CLASS); + strcpy(acpi_device_name(device), ACPI_AC_DEVICE_NAME); + strcpy(acpi_device_class(device), ACPI_AC_CLASS); acpi_driver_data(device) = ac; result = acpi_ac_get_state(ac); diff -Nru a/drivers/acpi/asus_acpi.c b/drivers/acpi/asus_acpi.c --- a/drivers/acpi/asus_acpi.c Wed Feb 4 16:51:34 2004 +++ b/drivers/acpi/asus_acpi.c Wed Feb 4 16:51:34 2004 @@ -869,8 +869,8 @@ memset(hotk, 0, sizeof(struct asus_hotk)); hotk->handle = device->handle; - sprintf(acpi_device_name(device), "%s", ACPI_HOTK_DEVICE_NAME); - sprintf(acpi_device_class(device), "%s", ACPI_HOTK_CLASS); + strcpy(acpi_device_name(device), ACPI_HOTK_DEVICE_NAME); + strcpy(acpi_device_class(device), ACPI_HOTK_CLASS); acpi_driver_data(device) = hotk; hotk->device = device; diff -Nru a/drivers/acpi/battery.c b/drivers/acpi/battery.c --- a/drivers/acpi/battery.c Wed Feb 4 16:51:36 2004 +++ b/drivers/acpi/battery.c Wed Feb 4 16:51:36 2004 @@ -735,8 +735,8 @@ memset(battery, 0, sizeof(struct acpi_battery)); battery->handle = device->handle; - sprintf(acpi_device_name(device), "%s", ACPI_BATTERY_DEVICE_NAME); - sprintf(acpi_device_class(device), "%s", ACPI_BATTERY_CLASS); + strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME); + strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS); acpi_driver_data(device) = battery; result = acpi_battery_check(battery); diff -Nru a/drivers/acpi/bus.c b/drivers/acpi/bus.c --- a/drivers/acpi/bus.c Wed Feb 4 16:51:36 2004 +++ b/drivers/acpi/bus.c Wed Feb 4 16:51:36 2004 @@ -296,8 +296,8 @@ if (!event) return_VALUE(-ENOMEM); - sprintf(event->device_class, "%s", device->pnp.device_class); - sprintf(event->bus_id, "%s", device->pnp.bus_id); + strcpy(event->device_class, device->pnp.device_class); + strcpy(event->bus_id, device->pnp.bus_id); event->type = type; event->data = data; diff -Nru a/drivers/acpi/button.c b/drivers/acpi/button.c --- a/drivers/acpi/button.c Wed Feb 4 16:51:33 2004 +++ b/drivers/acpi/button.c Wed Feb 4 16:51:33 2004 @@ -316,35 +316,35 @@ */ if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_POWER)) { button->type = ACPI_BUTTON_TYPE_POWER; - sprintf(acpi_device_name(device), "%s", + strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_POWER); sprintf(acpi_device_class(device), "%s/%s", ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_POWER); } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_POWERF)) { button->type = ACPI_BUTTON_TYPE_POWERF; - sprintf(acpi_device_name(device), "%s", + strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_POWERF); sprintf(acpi_device_class(device), "%s/%s", ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_POWER); } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_SLEEP)) { button->type = ACPI_BUTTON_TYPE_SLEEP; - sprintf(acpi_device_name(device), "%s", + strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_SLEEP); sprintf(acpi_device_class(device), "%s/%s", ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_SLEEP); } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_SLEEPF)) { button->type = ACPI_BUTTON_TYPE_SLEEPF; - sprintf(acpi_device_name(device), "%s", + strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_SLEEPF); sprintf(acpi_device_class(device), "%s/%s", ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_SLEEP); } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_LID)) { button->type = ACPI_BUTTON_TYPE_LID; - sprintf(acpi_device_name(device), "%s", + strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_LID); sprintf(acpi_device_class(device), "%s/%s", ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_LID); diff -Nru a/drivers/acpi/ec.c b/drivers/acpi/ec.c --- a/drivers/acpi/ec.c Wed Feb 4 16:51:35 2004 +++ b/drivers/acpi/ec.c Wed Feb 4 16:51:35 2004 @@ -578,8 +578,8 @@ ec->handle = device->handle; ec->uid = -1; ec->lock = SPIN_LOCK_UNLOCKED; - sprintf(acpi_device_name(device), "%s", ACPI_EC_DEVICE_NAME); - sprintf(acpi_device_class(device), "%s", ACPI_EC_CLASS); + strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME); + strcpy(acpi_device_class(device), ACPI_EC_CLASS); acpi_driver_data(device) = ec; /* Use the global lock for all EC transactions? */ diff -Nru a/drivers/acpi/fan.c b/drivers/acpi/fan.c --- a/drivers/acpi/fan.c Wed Feb 4 16:51:33 2004 +++ b/drivers/acpi/fan.c Wed Feb 4 16:51:33 2004 @@ -214,8 +214,8 @@ memset(fan, 0, sizeof(struct acpi_fan)); fan->handle = device->handle; - sprintf(acpi_device_name(device), "%s", ACPI_FAN_DEVICE_NAME); - sprintf(acpi_device_class(device), "%s", ACPI_FAN_CLASS); + strcpy(acpi_device_name(device), ACPI_FAN_DEVICE_NAME); + strcpy(acpi_device_class(device), ACPI_FAN_CLASS); acpi_driver_data(device) = fan; result = acpi_bus_get_power(fan->handle, &state); diff -Nru a/drivers/acpi/osl.c b/drivers/acpi/osl.c --- a/drivers/acpi/osl.c Wed Feb 4 16:51:36 2004 +++ b/drivers/acpi/osl.c Wed Feb 4 16:51:36 2004 @@ -249,7 +249,7 @@ */ irq = acpi_fadt.sci_int; -#ifdef CONFIG_IA64 +#if defined(CONFIG_IA64) || defined(CONFIG_PCI_USE_VECTOR) irq = acpi_irq_to_vector(irq); if (irq < 0) { printk(KERN_ERR PREFIX "SCI (ACPI interrupt %d) not registered\n", @@ -272,7 +272,7 @@ acpi_os_remove_interrupt_handler(u32 irq, OSD_HANDLER handler) { if (irq) { -#ifdef CONFIG_IA64 +#if defined(CONFIG_IA64) || defined(CONFIG_PCI_USE_VECTOR) irq = acpi_irq_to_vector(irq); #endif free_irq(irq, acpi_irq); diff -Nru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c --- a/drivers/acpi/pci_link.c Wed Feb 4 16:51:33 2004 +++ b/drivers/acpi/pci_link.c Wed Feb 4 16:51:33 2004 @@ -652,8 +652,8 @@ link->device = device; link->handle = device->handle; - sprintf(acpi_device_name(device), "%s", ACPI_PCI_LINK_DEVICE_NAME); - sprintf(acpi_device_class(device), "%s", ACPI_PCI_LINK_CLASS); + strcpy(acpi_device_name(device), ACPI_PCI_LINK_DEVICE_NAME); + strcpy(acpi_device_class(device), ACPI_PCI_LINK_CLASS); acpi_driver_data(device) = link; result = acpi_pci_link_get_possible(link); diff -Nru a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c --- a/drivers/acpi/pci_root.c Wed Feb 4 16:51:34 2004 +++ b/drivers/acpi/pci_root.c Wed Feb 4 16:51:34 2004 @@ -134,8 +134,8 @@ memset(root, 0, sizeof(struct acpi_pci_root)); root->handle = device->handle; - sprintf(acpi_device_name(device), "%s", ACPI_PCI_ROOT_DEVICE_NAME); - sprintf(acpi_device_class(device), "%s", ACPI_PCI_ROOT_CLASS); + strcpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME); + strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS); acpi_driver_data(device) = root; /* diff -Nru a/drivers/acpi/power.c b/drivers/acpi/power.c --- a/drivers/acpi/power.c Wed Feb 4 16:51:35 2004 +++ b/drivers/acpi/power.c Wed Feb 4 16:51:35 2004 @@ -503,9 +503,9 @@ memset(resource, 0, sizeof(struct acpi_power_resource)); resource->handle = device->handle; - sprintf(resource->name, "%s", device->pnp.bus_id); - sprintf(acpi_device_name(device), "%s", ACPI_POWER_DEVICE_NAME); - sprintf(acpi_device_class(device), "%s", ACPI_POWER_CLASS); + strcpy(resource->name, device->pnp.bus_id); + strcpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME); + strcpy(acpi_device_class(device), ACPI_POWER_CLASS); acpi_driver_data(device) = resource; /* Evalute the object to get the system level and resource order. */ diff -Nru a/drivers/acpi/processor.c b/drivers/acpi/processor.c --- a/drivers/acpi/processor.c Wed Feb 4 16:51:36 2004 +++ b/drivers/acpi/processor.c Wed Feb 4 16:51:36 2004 @@ -1705,8 +1705,8 @@ memset(pr, 0, sizeof(struct acpi_processor)); pr->handle = device->handle; - sprintf(acpi_device_name(device), "%s", ACPI_PROCESSOR_DEVICE_NAME); - sprintf(acpi_device_class(device), "%s", ACPI_PROCESSOR_CLASS); + strcpy(acpi_device_name(device), ACPI_PROCESSOR_DEVICE_NAME); + strcpy(acpi_device_class(device), ACPI_PROCESSOR_CLASS); acpi_driver_data(device) = pr; result = acpi_processor_get_info(pr); diff -Nru a/drivers/acpi/scan.c b/drivers/acpi/scan.c --- a/drivers/acpi/scan.c Wed Feb 4 16:51:35 2004 +++ b/drivers/acpi/scan.c Wed Feb 4 16:51:35 2004 @@ -486,13 +486,13 @@ */ switch (type) { case ACPI_BUS_TYPE_SYSTEM: - sprintf(device->pnp.bus_id, "%s", "ACPI"); + strcpy(device->pnp.bus_id, "ACPI"); break; case ACPI_BUS_TYPE_POWER_BUTTON: - sprintf(device->pnp.bus_id, "%s", "PWRF"); + strcpy(device->pnp.bus_id, "PWRF"); break; case ACPI_BUS_TYPE_SLEEP_BUTTON: - sprintf(device->pnp.bus_id, "%s", "SLPF"); + strcpy(device->pnp.bus_id, "SLPF"); break; default: acpi_get_name(handle, ACPI_SINGLE_NAME, &buffer); @@ -503,7 +503,7 @@ else break; } - sprintf(device->pnp.bus_id, "%s", bus_id); + strcpy(device->pnp.bus_id, bus_id); break; } } @@ -565,16 +565,16 @@ */ if ((parent == ACPI_ROOT_OBJECT) && (type == ACPI_BUS_TYPE_DEVICE)) { hid = ACPI_BUS_HID; - sprintf(device->pnp.device_name, "%s", ACPI_BUS_DEVICE_NAME); - sprintf(device->pnp.device_class, "%s", ACPI_BUS_CLASS); + strcpy(device->pnp.device_name, ACPI_BUS_DEVICE_NAME); + strcpy(device->pnp.device_class, ACPI_BUS_CLASS); } if (hid) { - sprintf(device->pnp.hardware_id, "%s", hid); + strcpy(device->pnp.hardware_id, hid); device->flags.hardware_id = 1; } if (uid) { - sprintf(device->pnp.unique_id, "%s", uid); + strcpy(device->pnp.unique_id, uid); device->flags.unique_id = 1; } if (cid_list) { diff -Nru a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c --- a/drivers/acpi/thermal.c Wed Feb 4 16:51:37 2004 +++ b/drivers/acpi/thermal.c Wed Feb 4 16:51:37 2004 @@ -1246,9 +1246,9 @@ memset(tz, 0, sizeof(struct acpi_thermal)); tz->handle = device->handle; - sprintf(tz->name, "%s", device->pnp.bus_id); - sprintf(acpi_device_name(device), "%s", ACPI_THERMAL_DEVICE_NAME); - sprintf(acpi_device_class(device), "%s", ACPI_THERMAL_CLASS); + strcpy(tz->name, device->pnp.bus_id); + strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME); + strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS); acpi_driver_data(device) = tz; result = acpi_thermal_get_info(tz); diff -Nru a/drivers/atm/eni.c b/drivers/atm/eni.c --- a/drivers/atm/eni.c Wed Feb 4 16:51:34 2004 +++ b/drivers/atm/eni.c Wed Feb 4 16:51:34 2004 @@ -1875,7 +1875,7 @@ DPRINTK("eni_close: done waiting\n"); /* deallocate memory */ kfree(ENI_VCC(vcc)); - ENI_VCC(vcc) = NULL; + vcc->dev_data = NULL; clear_bit(ATM_VF_ADDR,&vcc->flags); /*foo();*/ } @@ -1891,7 +1891,8 @@ DPRINTK(">eni_open\n"); EVENT("eni_open\n",0,0); - if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) ENI_VCC(vcc) = NULL; + if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) + vcc->dev_data = NULL; eni_dev = ENI_DEV(vcc->dev); if (vci != ATM_VPI_UNSPEC && vpi != ATM_VCI_UNSPEC) set_bit(ATM_VF_ADDR,&vcc->flags); @@ -1902,7 +1903,7 @@ if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) { eni_vcc = kmalloc(sizeof(struct eni_vcc),GFP_KERNEL); if (!eni_vcc) return -ENOMEM; - ENI_VCC(vcc) = eni_vcc; + vcc->dev_data = eni_vcc; eni_vcc->tx = NULL; /* for eni_close after open_rx */ if ((error = open_rx_first(vcc))) { eni_close(vcc); @@ -2230,7 +2231,7 @@ if (!dev) goto out2; pci_set_drvdata(pci_dev, dev); eni_dev->pci_dev = pci_dev; - ENI_DEV(dev) = eni_dev; + dev->dev_data = eni_dev; eni_dev->asic = ent->driver_data; error = eni_do_init(dev); if (error) goto out3; diff -Nru a/drivers/atm/fore200e.c b/drivers/atm/fore200e.c --- a/drivers/atm/fore200e.c Wed Feb 4 16:51:37 2004 +++ b/drivers/atm/fore200e.c Wed Feb 4 16:51:37 2004 @@ -1417,7 +1417,7 @@ return -ENOMEM; } - FORE200E_VCC(vcc) = fore200e_vcc; + vcc->dev_data = fore200e_vcc; if (fore200e_activate_vcin(fore200e, 1, vcc, vcc->qos.rxtp.max_sdu) < 0) { kfree(fore200e_vcc); @@ -2482,7 +2482,7 @@ return -ENODEV; } - FORE200E_DEV(atm_dev) = fore200e; + atm_dev->dev_data = fore200e; fore200e->atm_dev = atm_dev; atm_dev->ci_range.vpi_bits = 8; diff -Nru a/drivers/atm/he.c b/drivers/atm/he.c --- a/drivers/atm/he.c Wed Feb 4 16:51:34 2004 +++ b/drivers/atm/he.c Wed Feb 4 16:51:34 2004 @@ -380,7 +380,7 @@ he_dev->pci_dev = pci_dev; he_dev->atm_dev = atm_dev; he_dev->atm_dev->dev_data = he_dev; - HE_DEV(atm_dev) = he_dev; + atm_dev->dev_data = he_dev; he_dev->number = atm_dev->number; if (he_start(atm_dev)) { he_stop(he_dev); @@ -2361,7 +2361,7 @@ init_waitqueue_head(&he_vcc->rx_waitq); init_waitqueue_head(&he_vcc->tx_waitq); - HE_VCC(vcc) = he_vcc; + vcc->dev_data = he_vcc; if (vcc->qos.txtp.traffic_class != ATM_NONE) { int pcr_goal; diff -Nru a/drivers/atm/idt77105.c b/drivers/atm/idt77105.c --- a/drivers/atm/idt77105.c Wed Feb 4 16:51:36 2004 +++ b/drivers/atm/idt77105.c Wed Feb 4 16:51:36 2004 @@ -265,7 +265,7 @@ { unsigned long flags; - if (!(PRIV(dev) = kmalloc(sizeof(struct idt77105_priv),GFP_KERNEL))) + if (!(dev->dev_data = kmalloc(sizeof(struct idt77105_priv),GFP_KERNEL))) return -ENOMEM; PRIV(dev)->dev = dev; spin_lock_irqsave(&idt77105_priv_lock, flags); @@ -343,7 +343,7 @@ else idt77105_all = walk->next; dev->phy = NULL; - PRIV(dev) = NULL; + dev->dev_data = NULL; kfree(walk); break; } diff -Nru a/drivers/atm/iphase.c b/drivers/atm/iphase.c --- a/drivers/atm/iphase.c Wed Feb 4 16:51:37 2004 +++ b/drivers/atm/iphase.c Wed Feb 4 16:51:37 2004 @@ -1754,7 +1754,7 @@ (iadev->tx_buf_sz - sizeof(struct cpcs_trailer))){ printk("IA: SDU size over (%d) the configured SDU size %d\n", vcc->qos.txtp.max_sdu,iadev->tx_buf_sz); - INPH_IA_VCC(vcc) = NULL; + vcc->dev_data = NULL; kfree(ia_vcc); return -EINVAL; } @@ -2671,7 +2671,7 @@ } kfree(INPH_IA_VCC(vcc)); ia_vcc = NULL; - INPH_IA_VCC(vcc) = NULL; + vcc->dev_data = NULL; clear_bit(ATM_VF_ADDR,&vcc->flags); return; } @@ -2684,7 +2684,7 @@ if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) { IF_EVENT(printk("ia: not partially allocated resources\n");) - INPH_IA_VCC(vcc) = NULL; + vcc->dev_data = NULL; } iadev = INPH_IA_DEV(vcc->dev); if (vcc->vci != ATM_VPI_UNSPEC && vcc->vpi != ATM_VCI_UNSPEC) @@ -2700,7 +2700,7 @@ /* Device dependent initialization */ ia_vcc = kmalloc(sizeof(*ia_vcc), GFP_KERNEL); if (!ia_vcc) return -ENOMEM; - INPH_IA_VCC(vcc) = ia_vcc; + vcc->dev_data = ia_vcc; if ((error = open_rx(vcc))) { @@ -3196,7 +3196,7 @@ ret = -ENOMEM; goto err_out_disable_dev; } - INPH_IA_DEV(dev) = iadev; + dev->dev_data = iadev; IF_INIT(printk(DEV_LABEL "registered at (itf :%d)\n", dev->number);) IF_INIT(printk("dev_id = 0x%x iadev->LineRate = %d \n", (u32)dev, iadev->LineRate);) diff -Nru a/drivers/atm/suni.c b/drivers/atm/suni.c --- a/drivers/atm/suni.c Wed Feb 4 16:51:36 2004 +++ b/drivers/atm/suni.c Wed Feb 4 16:51:36 2004 @@ -230,7 +230,7 @@ unsigned long flags; int first; - if (!(PRIV(dev) = kmalloc(sizeof(struct suni_priv),GFP_KERNEL))) + if (!(dev->dev_data = kmalloc(sizeof(struct suni_priv),GFP_KERNEL))) return -ENOMEM; PRIV(dev)->dev = dev; diff -Nru a/drivers/atm/uPD98402.c b/drivers/atm/uPD98402.c --- a/drivers/atm/uPD98402.c Wed Feb 4 16:51:35 2004 +++ b/drivers/atm/uPD98402.c Wed Feb 4 16:51:35 2004 @@ -211,7 +211,7 @@ static int uPD98402_start(struct atm_dev *dev) { DPRINTK("phy_start\n"); - if (!(PRIV(dev) = kmalloc(sizeof(struct uPD98402_priv),GFP_KERNEL))) + if (!(dev->dev_data = kmalloc(sizeof(struct uPD98402_priv),GFP_KERNEL))) return -ENOMEM; spin_lock_init(&PRIV(dev)->lock); memset(&PRIV(dev)->sonet_stats,0,sizeof(struct k_sonet_stats)); diff -Nru a/drivers/atm/zatm.c b/drivers/atm/zatm.c --- a/drivers/atm/zatm.c Wed Feb 4 16:51:34 2004 +++ b/drivers/atm/zatm.c Wed Feb 4 16:51:34 2004 @@ -1368,7 +1368,7 @@ DPRINTK("zatm_close: done waiting\n"); /* deallocate memory */ kfree(ZATM_VCC(vcc)); - ZATM_VCC(vcc) = NULL; + vcc->dev_data = NULL; clear_bit(ATM_VF_ADDR,&vcc->flags); } @@ -1383,7 +1383,8 @@ DPRINTK(">zatm_open\n"); zatm_dev = ZATM_DEV(vcc->dev); - if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) ZATM_VCC(vcc) = NULL; + if (!test_bit(ATM_VF_PARTIAL,&vcc->flags)) + vcc->dev_data = NULL; if (vci != ATM_VPI_UNSPEC && vpi != ATM_VCI_UNSPEC) set_bit(ATM_VF_ADDR,&vcc->flags); if (vcc->qos.aal != ATM_AAL5) return -EINVAL; /* @@@ AAL0 */ @@ -1395,7 +1396,7 @@ clear_bit(ATM_VF_ADDR,&vcc->flags); return -ENOMEM; } - ZATM_VCC(vcc) = zatm_vcc; + vcc->dev_data = zatm_vcc; ZATM_VCC(vcc)->tx_chan = 0; /* for zatm_close after open_rx */ if ((error = open_rx_first(vcc))) { zatm_close(vcc); @@ -1597,7 +1598,7 @@ dev = atm_dev_register(DEV_LABEL,&ops,-1,NULL); if (!dev) break; zatm_dev->pci_dev = pci_dev; - ZATM_DEV(dev) = zatm_dev; + dev->dev_data = zatm_dev; zatm_dev->copper = type; if (zatm_init(dev) || zatm_start(dev)) { atm_dev_deregister(dev); diff -Nru a/drivers/base/Makefile b/drivers/base/Makefile --- a/drivers/base/Makefile Wed Feb 4 16:51:37 2004 +++ b/drivers/base/Makefile Wed Feb 4 16:51:37 2004 @@ -5,4 +5,4 @@ cpu.o firmware.o init.o map.o obj-y += power/ obj-$(CONFIG_FW_LOADER) += firmware_class.o -obj-$(CONFIG_NUMA) += node.o memblk.o +obj-$(CONFIG_NUMA) += node.o diff -Nru a/drivers/base/memblk.c b/drivers/base/memblk.c --- a/drivers/base/memblk.c Wed Feb 4 16:51:37 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,43 +0,0 @@ -/* - * drivers/base/memblk.c - basic Memory Block class support - */ - -#include -#include -#include -#include -#include - - -static struct sysdev_class memblk_class = { - set_kset_name("memblk"), -}; - -/* - * register_memblk - Setup a driverfs device for a MemBlk - * @num - MemBlk number to use when creating the device. - * - * Initialize and register the MemBlk device. - */ -int __init register_memblk(struct memblk *memblk, int num, struct node *root) -{ - int error; - - memblk->node_id = memblk_to_node(num); - memblk->sysdev.cls = &memblk_class, - memblk->sysdev.id = num; - - error = sys_device_register(&memblk->sysdev); - if (!error) - error = sysfs_create_link(&root->sysdev.kobj, - &memblk->sysdev.kobj, - kobject_name(&memblk->sysdev.kobj)); - return error; -} - - -int __init register_memblk_type(void) -{ - return sysdev_class_register(&memblk_class); -} -postcore_initcall(register_memblk_type); diff -Nru a/drivers/block/floppy.c b/drivers/block/floppy.c --- a/drivers/block/floppy.c Wed Feb 4 16:51:34 2004 +++ b/drivers/block/floppy.c Wed Feb 4 16:51:34 2004 @@ -4376,6 +4376,7 @@ /* to be cleaned up... */ disks[drive]->private_data = (void*)(long)drive; disks[drive]->queue = floppy_queue; + disks[drive]->flags |= GENHD_FL_REMOVABLE; add_disk(disks[drive]); } diff -Nru a/drivers/block/genhd.c b/drivers/block/genhd.c --- a/drivers/block/genhd.c Wed Feb 4 16:51:35 2004 +++ b/drivers/block/genhd.c Wed Feb 4 16:51:35 2004 @@ -260,8 +260,10 @@ if (&sgp->kobj.entry == block_subsys.kset.list.next) seq_puts(part, "major minor #blocks name\n\n"); - /* Don't show non-partitionable devices or empty devices */ - if (!get_capacity(sgp) || sgp->minors == 1) + /* Don't show non-partitionable removeable devices or empty devices */ + if (!get_capacity(sgp) || + (sgp->minors == 1 && (sgp->flags & GENHD_FL_REMOVABLE)) + ) return 0; /* show the full disk and all non-0 size partitions of it */ diff -Nru a/drivers/block/scsi_ioctl.c b/drivers/block/scsi_ioctl.c --- a/drivers/block/scsi_ioctl.c Wed Feb 4 16:51:37 2004 +++ b/drivers/block/scsi_ioctl.c Wed Feb 4 16:51:37 2004 @@ -46,14 +46,14 @@ #define SCSI_SENSE_BUFFERSIZE 64 #endif -static int blk_do_rq(request_queue_t *q, struct block_device *bdev, +static int blk_do_rq(request_queue_t *q, struct gendisk *bd_disk, struct request *rq) { char sense[SCSI_SENSE_BUFFERSIZE]; DECLARE_COMPLETION(wait); int err = 0; - rq->rq_disk = bdev->bd_disk; + rq->rq_disk = bd_disk; /* * we need an extra reference to the request, so we can look at @@ -142,7 +142,7 @@ return put_user(1, p); } -static int sg_io(request_queue_t *q, struct block_device *bdev, +static int sg_io(request_queue_t *q, struct gendisk *bd_disk, struct sg_io_hdr *hdr) { unsigned long start_time; @@ -190,7 +190,7 @@ * first try to map it into a bio. reading from device will * be a write to vm. */ - bio = bio_map_user(bdev, (unsigned long) hdr->dxferp, + bio = bio_map_user(q, NULL, (unsigned long) hdr->dxferp, hdr->dxfer_len, reading); /* @@ -246,7 +246,7 @@ * (if he doesn't check that is his problem). * N.B. a non-zero SCSI status is _not_ necessarily an error. */ - blk_do_rq(q, bdev, rq); + blk_do_rq(q, bd_disk, rq); if (bio) bio_unmap_user(bio, reading); @@ -296,7 +296,7 @@ #define READ_DEFECT_DATA_TIMEOUT (60 * HZ ) #define OMAX_SB_LEN 16 /* For backward compatibility */ -static int sg_scsi_ioctl(request_queue_t *q, struct block_device *bdev, +static int sg_scsi_ioctl(request_queue_t *q, struct gendisk *bd_disk, Scsi_Ioctl_Command *sic) { struct request *rq; @@ -369,7 +369,7 @@ rq->data_len = bytes; rq->flags |= REQ_BLOCK_PC; - blk_do_rq(q, bdev, rq); + blk_do_rq(q, bd_disk, rq); err = rq->errors & 0xff; /* only 8 bit SCSI status */ if (err) { if (rq->sense_len && rq->sense) { @@ -389,13 +389,13 @@ return err; } -int scsi_cmd_ioctl(struct block_device *bdev, unsigned int cmd, unsigned long arg) +int scsi_cmd_ioctl(struct gendisk *bd_disk, unsigned int cmd, unsigned long arg) { request_queue_t *q; struct request *rq; int close = 0, err; - q = bdev_get_queue(bdev); + q = bd_disk->queue; if (!q) return -ENXIO; @@ -446,7 +446,7 @@ old_cdb = hdr.cmdp; hdr.cmdp = cdb; - err = sg_io(q, bdev, &hdr); + err = sg_io(q, bd_disk, &hdr); hdr.cmdp = old_cdb; if (copy_to_user((struct sg_io_hdr *) arg, &hdr, sizeof(hdr))) @@ -493,7 +493,7 @@ hdr.timeout = cgc.timeout; hdr.cmdp = cgc.cmd; hdr.cmd_len = sizeof(cgc.cmd); - err = sg_io(q, bdev, &hdr); + err = sg_io(q, bd_disk, &hdr); if (hdr.status) err = -EIO; @@ -514,7 +514,8 @@ if (!arg) break; - err = sg_scsi_ioctl(q, bdev, (Scsi_Ioctl_Command *)arg); + err = sg_scsi_ioctl(q, bd_disk, + (Scsi_Ioctl_Command *)arg); break; case CDROMCLOSETRAY: close = 1; @@ -528,7 +529,7 @@ rq->cmd[0] = GPCMD_START_STOP_UNIT; rq->cmd[4] = 0x02 + (close != 0); rq->cmd_len = 6; - err = blk_do_rq(q, bdev, rq); + err = blk_do_rq(q, bd_disk, rq); blk_put_request(rq); break; default: diff -Nru a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c --- a/drivers/cdrom/cdrom.c Wed Feb 4 16:51:34 2004 +++ b/drivers/cdrom/cdrom.c Wed Feb 4 16:51:34 2004 @@ -695,6 +695,35 @@ return ret; } +static int mo_open_write(struct cdrom_device_info *cdi) +{ + struct cdrom_generic_command cgc; + char buffer[255]; + int ret; + + init_cdrom_command(&cgc, &buffer, 4, CGC_DATA_READ); + cgc.quiet = 1; + + /* + * obtain write protect information as per + * drivers/scsi/sd.c:sd_read_write_protect_flag + */ + + ret = cdrom_mode_sense(cdi, &cgc, GPMODE_ALL_PAGES, 0); + if (ret) + ret = cdrom_mode_sense(cdi, &cgc, GPMODE_VENDOR_PAGE, 0); + if (ret) { + cgc.buflen = 255; + ret = cdrom_mode_sense(cdi, &cgc, GPMODE_ALL_PAGES, 0); + } + + /* drive gave us no info, let the user go ahead */ + if (ret) + return 0; + + return buffer[3] & 0x80; +} + /* * returns 0 for ok to open write, non-0 to disallow */ @@ -706,11 +735,8 @@ ret = cdrom_mrw_open_write(cdi); else if (CDROM_CAN(CDC_DVD_RAM)) ret = cdrom_dvdram_open_write(cdi); - /* - * needs to really check whether media is writeable - */ else if (CDROM_CAN(CDC_MO_DRIVE)) - ret = 0; + ret = mo_open_write(cdi); return ret; } @@ -1773,7 +1799,7 @@ int ret; /* Try the generic SCSI command ioctl's first.. */ - ret = scsi_cmd_ioctl(ip->i_bdev, cmd, arg); + ret = scsi_cmd_ioctl(ip->i_bdev->bd_disk, cmd, arg); if (ret != -ENOTTY) return ret; @@ -2268,7 +2294,7 @@ return -EINVAL; /* FIXME: we need upper bound checking, too!! */ - if (lba < 0 || ra.nframes <= 0 || ra.nframes > 64) + if (lba < 0 || ra.nframes <= 0 || ra.nframes > CD_FRAMES) return -EINVAL; /* diff -Nru a/drivers/char/Kconfig b/drivers/char/Kconfig --- a/drivers/char/Kconfig Wed Feb 4 16:51:33 2004 +++ b/drivers/char/Kconfig Wed Feb 4 16:51:33 2004 @@ -962,11 +962,15 @@ If compiled as a module, it will be called scx200_gpio. config RAW_DRIVER - tristate "RAW driver (/dev/raw/rawN)" + tristate "RAW driver (/dev/raw/rawN) (OBSOLETE)" help The raw driver permits block devices to be bound to /dev/raw/rawN. Once bound, I/O against /dev/raw/rawN uses efficient zero-copy I/O. See the raw(8) manpage for more details. + + The raw driver is deprecated and may be removed from 2.7 + kernels. Applications should simply open the device (eg /dev/hda1) + with the O_DIRECT flag. config MAX_RAW_DEVS int "Maximum number of RAW devices to support (1-8192)" diff -Nru a/drivers/char/drm/radeon_state.c b/drivers/char/drm/radeon_state.c --- a/drivers/char/drm/radeon_state.c Wed Feb 4 16:51:37 2004 +++ b/drivers/char/drm/radeon_state.c Wed Feb 4 16:51:37 2004 @@ -1221,7 +1221,7 @@ /* Update the input parameters for next time */ image->y += height; image->height -= height; - (const u8 *)image->data += size; + image->data = (const u8 *)image->data + size; } while (image->height > 0); /* Flush the pixel cache after the blit completes. This ensures diff -Nru a/drivers/char/dz.c b/drivers/char/dz.c --- a/drivers/char/dz.c Wed Feb 4 16:51:33 2004 +++ b/drivers/char/dz.c Wed Feb 4 16:51:33 2004 @@ -986,11 +986,7 @@ return 0; case TIOCGSOFTCAR: - error = verify_area (VERIFY_WRITE, (void *)arg, sizeof(long)); - if (error) - return error; - put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned long *)arg); - return 0; + return put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned long *)arg); case TIOCSSOFTCAR: if (get_user (arg, (unsigned long *)arg)) @@ -1001,10 +997,6 @@ return 0; case TIOCGSERIAL: - error = verify_area(VERIFY_WRITE, (void *)arg, - sizeof(struct serial_struct)); - if (error) - return error; return get_serial_info(info, (struct serial_struct *)arg); case TIOCSSERIAL: diff -Nru a/drivers/char/istallion.c b/drivers/char/istallion.c --- a/drivers/char/istallion.c Wed Feb 4 16:51:36 2004 +++ b/drivers/char/istallion.c Wed Feb 4 16:51:36 2004 @@ -417,13 +417,14 @@ #ifndef PCI_DEVICE_ID_ECRA #define PCI_DEVICE_ID_ECRA 0x0004 #endif -#endif static struct pci_device_id istallion_pci_tbl[] = { { PCI_VENDOR_ID_STALLION, PCI_DEVICE_ID_ECRA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, { 0 } }; MODULE_DEVICE_TABLE(pci, istallion_pci_tbl); + +#endif /* CONFIG_PCI */ /*****************************************************************************/ diff -Nru a/drivers/char/keyboard.c b/drivers/char/keyboard.c --- a/drivers/char/keyboard.c Wed Feb 4 16:51:35 2004 +++ b/drivers/char/keyboard.c Wed Feb 4 16:51:35 2004 @@ -202,7 +202,7 @@ return -EINVAL; oldkey = INPUT_KEYCODE(dev, scancode); - INPUT_KEYCODE(dev, scancode) = keycode; + SET_INPUT_KEYCODE(dev, scancode, oldkey); clear_bit(oldkey, dev->keybit); set_bit(keycode, dev->keybit); diff -Nru a/drivers/char/moxa.c b/drivers/char/moxa.c --- a/drivers/char/moxa.c Wed Feb 4 16:51:37 2004 +++ b/drivers/char/moxa.c Wed Feb 4 16:51:37 2004 @@ -49,6 +49,7 @@ #include #include #include +#include #include #include @@ -292,7 +293,7 @@ static int __init moxa_init(void) { - int i, n, numBoards; + int i, numBoards; struct moxa_str *ch; printk(KERN_INFO "MOXA Intellio family driver version %s\n", MOXA_VERSION); @@ -410,7 +411,7 @@ #ifdef CONFIG_PCI { struct pci_dev *p = NULL; - n = (sizeof(moxa_pcibrds) / sizeof(moxa_pcibrds[0])) - 1; + int n = (sizeof(moxa_pcibrds) / sizeof(moxa_pcibrds[0])) - 1; i = 0; while (i < n) { while ((p = pci_find_device(moxa_pcibrds[i].vendor, moxa_pcibrds[i].device, p))!=NULL) diff -Nru a/drivers/char/mxser.c b/drivers/char/mxser.c --- a/drivers/char/mxser.c Wed Feb 4 16:51:36 2004 +++ b/drivers/char/mxser.c Wed Feb 4 16:51:36 2004 @@ -56,6 +56,7 @@ #include #include #include +#include #include #include @@ -496,7 +497,6 @@ static int __init mxser_module_init(void) { int i, m, retval, b; - int n, index; struct mxser_hwconf hwconf; mxvar_sdriver = alloc_tty_driver(MXSER_PORTS + 1); @@ -600,9 +600,8 @@ #ifdef CONFIG_PCI { struct pci_dev *pdev = NULL; - - n = (sizeof(mxser_pcibrds) / sizeof(mxser_pcibrds[0])) - 1; - index = 0; + int n = (sizeof(mxser_pcibrds) / sizeof(mxser_pcibrds[0])) - 1; + int index = 0; for (b = 0; b < n; b++) { while ((pdev = pci_find_device(mxser_pcibrds[b].vendor, mxser_pcibrds[b].device, pdev))) { diff -Nru a/drivers/char/selection.c b/drivers/char/selection.c --- a/drivers/char/selection.c Wed Feb 4 16:51:37 2004 +++ b/drivers/char/selection.c Wed Feb 4 16:51:37 2004 @@ -24,6 +24,7 @@ #include #include #include +#include #ifndef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) @@ -290,7 +291,10 @@ int pasted = 0, count; DECLARE_WAITQUEUE(wait, current); + acquire_console_sem(); poke_blanked_console(); + release_console_sem(); + add_wait_queue(&vt->paste_wait, &wait); while (sel_buffer && sel_buffer_lth > pasted) { set_current_state(TASK_INTERRUPTIBLE); diff -Nru a/drivers/char/sn_serial.c b/drivers/char/sn_serial.c --- a/drivers/char/sn_serial.c Wed Feb 4 16:51:37 2004 +++ b/drivers/char/sn_serial.c Wed Feb 4 16:51:37 2004 @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include diff -Nru a/drivers/char/specialix.c b/drivers/char/specialix.c --- a/drivers/char/specialix.c Wed Feb 4 16:51:37 2004 +++ b/drivers/char/specialix.c Wed Feb 4 16:51:37 2004 @@ -92,6 +92,7 @@ #include #include #include +#include #include #include "specialix_io8.h" diff -Nru a/drivers/char/tty_io.c b/drivers/char/tty_io.c --- a/drivers/char/tty_io.c Wed Feb 4 16:51:36 2004 +++ b/drivers/char/tty_io.c Wed Feb 4 16:51:36 2004 @@ -1484,7 +1484,12 @@ #ifdef CONFIG_VT if (tty->driver->type == TTY_DRIVER_TYPE_CONSOLE) { unsigned int currcons = tty->index; - if (vc_resize(currcons, tmp_ws.ws_col, tmp_ws.ws_row)) + int rc; + + acquire_console_sem(); + rc = vc_resize(currcons, tmp_ws.ws_col, tmp_ws.ws_row); + release_console_sem(); + if (rc) return -ENXIO; } #endif diff -Nru a/drivers/char/vt.c b/drivers/char/vt.c --- a/drivers/char/vt.c Wed Feb 4 16:51:37 2004 +++ b/drivers/char/vt.c Wed Feb 4 16:51:37 2004 @@ -148,7 +148,6 @@ static int con_open(struct tty_struct *, struct file *); static void vc_init(unsigned int console, unsigned int rows, unsigned int cols, int do_clear); -static void blank_screen(unsigned long dummy); static void gotoxy(int currcons, int new_x, int new_y); static void save_cur(int currcons); static void reset_terminal(int currcons, int do_clear); @@ -156,8 +155,8 @@ static void set_vesa_blanking(unsigned long arg); static void set_cursor(int currcons); static void hide_cursor(int currcons); -static void unblank_screen_t(unsigned long dummy); static void console_callback(void *ignored); +static void blank_screen_t(unsigned long dummy); static int printable; /* Is console ready for printing? */ @@ -214,6 +213,13 @@ int (*console_blank_hook)(int); static struct timer_list console_timer; +static int blank_state; +static int blank_timer_expired; +enum { + blank_off = 0, + blank_normal_wait, + blank_vesa_wait, +}; /* * Low-Level Functions @@ -337,6 +343,8 @@ void update_region(int currcons, unsigned long start, int count) { + WARN_CONSOLE_UNLOCKED(); + if (DO_UPDATE) { hide_cursor(currcons); do_update_region(currcons, start, count); @@ -400,6 +408,8 @@ { unsigned short *p; + WARN_CONSOLE_UNLOCKED(); + count /= 2; p = screenpos(currcons, offset, viewed); if (sw->con_invert_region) @@ -445,6 +455,8 @@ static unsigned short old; static unsigned short oldx, oldy; + WARN_CONSOLE_UNLOCKED(); + if (p) { scr_writew(old, p); if (DO_UPDATE) @@ -564,6 +576,8 @@ static void set_origin(int currcons) { + WARN_CONSOLE_UNLOCKED(); + if (!IS_VISIBLE || !sw->con_set_origin || !sw->con_set_origin(vc_cons[currcons].d)) @@ -575,6 +589,8 @@ static inline void save_screen(int currcons) { + WARN_CONSOLE_UNLOCKED(); + if (sw->con_save_screen) sw->con_save_screen(vc_cons[currcons].d); } @@ -588,6 +604,8 @@ int redraw = 1; int currcons, old_console; + WARN_CONSOLE_UNLOCKED(); + if (!vc_cons_allocated(new_console)) { /* strange ... */ /* printk("redraw_screen: tty %d not allocated ??\n", new_console+1); */ @@ -665,6 +683,8 @@ int vc_allocate(unsigned int currcons) /* return 0 on success */ { + WARN_CONSOLE_UNLOCKED(); + if (currcons >= MAX_NR_CONSOLES) return -ENXIO; if (!vc_cons[currcons].d) { @@ -731,6 +751,8 @@ unsigned int new_cols, new_rows, new_row_size, new_screen_size; unsigned short *newscreen; + WARN_CONSOLE_UNLOCKED(); + if (!vc_cons_allocated(currcons)) return -ENXIO; @@ -817,7 +839,8 @@ void vc_disallocate(unsigned int currcons) { - acquire_console_sem(); + WARN_CONSOLE_UNLOCKED(); + if (vc_cons_allocated(currcons)) { sw->con_deinit(vc_cons[currcons].d); if (kmalloced) @@ -826,7 +849,6 @@ kfree(vc_cons[currcons].d); vc_cons[currcons].d = NULL; } - release_console_sem(); } /* @@ -2081,6 +2103,10 @@ sw->con_scrolldelta(vc_cons[currcons].d, scrollback_delta); scrollback_delta = 0; } + if (blank_timer_expired) { + do_blank_screen(0); + blank_timer_expired = 0; + } release_console_sem(); } @@ -2091,6 +2117,8 @@ schedule_console_callback(); } +struct tty_driver *console_driver; + #ifdef CONFIG_VT_CONSOLE /* @@ -2190,8 +2218,6 @@ clear_bit(0, &printing); } -struct tty_driver *console_driver; - static struct tty_driver *vt_console_device(struct console *c, int *index) { *index = c->index ? c->index-1 : fg_console; @@ -2414,7 +2440,9 @@ currcons = tty->index; + acquire_console_sem(); i = vc_allocate(currcons); + release_console_sem(); if (i) return i; @@ -2480,16 +2508,20 @@ const char *display_desc = NULL; unsigned int currcons = 0; + acquire_console_sem(); + if (conswitchp) display_desc = conswitchp->con_startup(); if (!display_desc) { fg_console = 0; + release_console_sem(); return 0; } init_timer(&console_timer); - console_timer.function = blank_screen; + console_timer.function = blank_screen_t; if (blankinterval) { + blank_state = blank_normal_wait; mod_timer(&console_timer, jiffies + blankinterval); } @@ -2520,6 +2552,8 @@ printable = 1; printk("\n"); + release_console_sem(); + #ifdef CONFIG_VT_CONSOLE register_console(&vt_console_driver); #endif @@ -2599,8 +2633,13 @@ int i, j = -1; const char *desc; + acquire_console_sem(); + desc = csw->con_startup(); - if (!desc) return; + if (!desc) { + release_console_sem(); + return; + } if (deflt) conswitchp = csw; @@ -2640,6 +2679,8 @@ desc, vc_cons[j].d->vc_cols, vc_cons[j].d->vc_rows); else printk("to %s\n", desc); + + release_console_sem(); } void give_up_console(const struct consw *csw) @@ -2688,23 +2729,24 @@ } } -/* - * This is a timer handler - */ -static void vesa_powerdown_screen(unsigned long dummy) -{ - console_timer.function = unblank_screen_t; - - vesa_powerdown(); -} - -static void timer_do_blank_screen(int entering_gfx, int from_timer_handler) +void do_blank_screen(int entering_gfx) { int currcons = fg_console; int i; - if (console_blanked) + WARN_CONSOLE_UNLOCKED(); + + if (console_blanked) { + if (blank_state == blank_vesa_wait) { + blank_state = blank_off; + vesa_powerdown(); + + } + return; + } + if (blank_state != blank_normal_wait) return; + blank_state = blank_off; /* entering graphics mode? */ if (entering_gfx) { @@ -2723,9 +2765,8 @@ } hide_cursor(currcons); - if (!from_timer_handler) - del_timer_sync(&console_timer); - console_timer.function = unblank_screen_t; + del_timer_sync(&console_timer); + blank_timer_expired = 0; save_screen(currcons); /* In case we need to reset origin, blanking hook returns 1 */ @@ -2738,7 +2779,7 @@ return; if (vesa_off_interval) { - console_timer.function = vesa_powerdown_screen; + blank_state = blank_vesa_wait, mod_timer(&console_timer, jiffies + vesa_off_interval); } @@ -2746,18 +2787,6 @@ sw->con_blank(vc_cons[currcons].d, vesa_blank_mode + 1); } -void do_blank_screen(int entering_gfx) -{ - timer_do_blank_screen(entering_gfx, 0); -} - -/* - * This is a timer handler - */ -static void unblank_screen_t(unsigned long dummy) -{ - unblank_screen(); -} /* * Called by timer as well as from vt_console_driver @@ -2766,6 +2795,8 @@ { int currcons; + WARN_CONSOLE_UNLOCKED(); + ignore_poke = 0; if (!console_blanked) return; @@ -2778,9 +2809,9 @@ if (vcmode != KD_TEXT) return; /* but leave console_blanked != 0 */ - console_timer.function = blank_screen; if (blankinterval) { mod_timer(&console_timer, jiffies + blankinterval); + blank_state = blank_normal_wait; } console_blanked = 0; @@ -2794,23 +2825,33 @@ } /* - * This is both a user-level callable and a timer handler + * We defer the timer blanking to work queue so it can take the console semaphore + * (console operations can still happen at irq time, but only from printk which + * has the console semaphore. Not perfect yet, but better than no locking */ -static void blank_screen(unsigned long dummy) +static void blank_screen_t(unsigned long dummy) { - timer_do_blank_screen(0, 1); + blank_timer_expired = 1; + schedule_work(&console_work); } void poke_blanked_console(void) { + WARN_CONSOLE_UNLOCKED(); + + /* This isn't perfectly race free, but a race here would be mostly harmless, + * at worse, we'll do a spurrious blank and it's unlikely + */ del_timer(&console_timer); + blank_timer_expired = 0; + if (ignore_poke || !vt_cons[fg_console] || vt_cons[fg_console]->vc_mode == KD_GRAPHICS) return; - if (console_blanked) { - console_timer.function = unblank_screen_t; - mod_timer(&console_timer, jiffies); /* Now */ - } else if (blankinterval) { + if (console_blanked) + unblank_screen(); + else if (blankinterval) { mod_timer(&console_timer, jiffies + blankinterval); + blank_state = blank_normal_wait; } } @@ -2820,6 +2861,8 @@ void set_palette(int currcons) { + WARN_CONSOLE_UNLOCKED(); + if (vcmode != KD_GRAPHICS) sw->con_set_palette(vc_cons[currcons].d, color_table); } @@ -2828,6 +2871,8 @@ { int i, j, k; + WARN_CONSOLE_UNLOCKED(); + for (i = 0; i < 16; i++) if (set) { get_user(default_red[i], arg++); @@ -2859,12 +2904,24 @@ int con_set_cmap(unsigned char *arg) { - return set_get_cmap (arg,1); + int rc; + + acquire_console_sem(); + rc = set_get_cmap (arg,1); + release_console_sem(); + + return rc; } int con_get_cmap(unsigned char *arg) { - return set_get_cmap (arg,0); + int rc; + + acquire_console_sem(); + rc = set_get_cmap (arg,0); + release_console_sem(); + + return rc; } void reset_palette(int currcons) @@ -2938,8 +2995,12 @@ set = 1; } else if (op->op == KD_FONT_OP_GET) set = 0; - else - return sw->con_font_op(vc_cons[currcons].d, op); + else { + acquire_console_sem(); + rc = sw->con_font_op(vc_cons[currcons].d, op); + release_console_sem(); + return rc; + } if (op->data) { temp = kmalloc(size, GFP_KERNEL); if (!temp) @@ -3001,13 +3062,13 @@ return screenpos(currcons, 2 * w_offset, viewed); } -void getconsxy(int currcons, char *p) +void getconsxy(int currcons, unsigned char *p) { p[0] = x; p[1] = y; } -void putconsxy(int currcons, char *p) +void putconsxy(int currcons, unsigned char *p) { gotoxy(currcons, p[0], p[1]); set_cursor(currcons); @@ -3034,10 +3095,14 @@ switch (rqst) { case PM_RESUME: + acquire_console_sem(); unblank_screen(); + release_console_sem(); break; case PM_SUSPEND: + acquire_console_sem(); do_blank_screen(0); + release_console_sem(); break; } return 0; diff -Nru a/drivers/char/vt_ioctl.c b/drivers/char/vt_ioctl.c --- a/drivers/char/vt_ioctl.c Wed Feb 4 16:51:36 2004 +++ b/drivers/char/vt_ioctl.c Wed Feb 4 16:51:36 2004 @@ -470,6 +470,9 @@ * currently, setting the mode from KD_TEXT to KD_GRAPHICS * doesn't do a whole lot. i'm not sure if it should do any * restoration of modes or what... + * + * XXX It should at least call into the driver, fbdev's definitely + * need to restore their engine state. --BenH */ if (!perm) return -EPERM; @@ -492,10 +495,12 @@ /* * explicitly blank/unblank the screen if switching modes */ + acquire_console_sem(); if (arg == KD_TEXT) unblank_screen(); else do_blank_screen(1); + release_console_sem(); return 0; case KDGETMODE: @@ -665,18 +670,29 @@ return -EFAULT; if (tmp.mode != VT_AUTO && tmp.mode != VT_PROCESS) return -EINVAL; + acquire_console_sem(); vt_cons[console]->vt_mode = tmp; /* the frsig is ignored, so we set it to 0 */ vt_cons[console]->vt_mode.frsig = 0; vt_cons[console]->vt_pid = current->pid; /* no switch is required -- saw@shade.msu.ru */ vt_cons[console]->vt_newvt = -1; + release_console_sem(); return 0; } case VT_GETMODE: - return copy_to_user((void*)arg, &(vt_cons[console]->vt_mode), - sizeof(struct vt_mode)) ? -EFAULT : 0; + { + struct vt_mode tmp; + int rc; + + acquire_console_sem(); + memcpy(&tmp, &vt_cons[console]->vt_mode, sizeof(struct vt_mode)); + release_console_sem(); + + rc = copy_to_user((void*)arg, &tmp, sizeof(struct vt_mode)); + return rc ? -EFAULT : 0; + } /* * Returns global vt state. Note that VT 0 is always open, since @@ -718,7 +734,9 @@ if (arg == 0 || arg > MAX_NR_CONSOLES) return -ENXIO; arg--; + acquire_console_sem(); i = vc_allocate(arg); + release_console_sem(); if (i) return i; set_console(arg); @@ -768,17 +786,20 @@ * The current vt has been released, so * complete the switch. */ - int newvt = vt_cons[console]->vt_newvt; + int newvt; + acquire_console_sem(); + newvt = vt_cons[console]->vt_newvt; vt_cons[console]->vt_newvt = -1; i = vc_allocate(newvt); - if (i) + if (i) { + release_console_sem(); return i; + } /* * When we actually do the console switch, * make sure we are atomic with respect to * other console switches.. */ - acquire_console_sem(); complete_change_console(newvt); release_console_sem(); } @@ -806,16 +827,21 @@ return -ENXIO; if (arg == 0) { /* disallocate all unused consoles, but leave 0 */ - for (i=1; iv_rows) || get_user(cc, &vtsizes->v_cols)) return -EFAULT; - for (i = 0; i < MAX_NR_CONSOLES; i++) + for (i = 0; i < MAX_NR_CONSOLES; i++) { + acquire_console_sem(); vc_resize(i, cc, ll); + release_console_sem(); + } return 0; } @@ -870,11 +899,13 @@ for (i = 0; i < MAX_NR_CONSOLES; i++) { if (!vc_cons[i].d) continue; + acquire_console_sem(); if (vlin) vc_cons[i].d->vc_scan_lines = vlin; if (clin) vc_cons[i].d->vc_font.height = clin; vc_resize(i, cc, ll); + release_console_sem(); } return 0; } diff -Nru a/drivers/i2c/chips/it87.c b/drivers/i2c/chips/it87.c --- a/drivers/i2c/chips/it87.c Wed Feb 4 16:51:36 2004 +++ b/drivers/i2c/chips/it87.c Wed Feb 4 16:51:36 2004 @@ -126,14 +126,13 @@ 205-(val)*5) #define ALARMS_FROM_REG(val) (val) -static int log2(int val) +static int DIV_TO_REG(int val) { int answer = 0; while ((val >>= 1)) answer++; return answer; } -#define DIV_TO_REG(val) log2(val) #define DIV_FROM_REG(val) (1 << (val)) /* Initial limits. Use the config file to set better limits. */ diff -Nru a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c --- a/drivers/ide/ide-cd.c Wed Feb 4 16:51:35 2004 +++ b/drivers/ide/ide-cd.c Wed Feb 4 16:51:35 2004 @@ -294,10 +294,12 @@ * 4.60 Dec 17, 2003 - Add mt rainier support * - Bump timeout for packet commands, matches sr * - Odd stuff + * 4.61 Jan 22, 2004 - support hardware sector sizes other than 2kB, + * Pascal Schmidt * *************************************************************************/ -#define IDECD_VERSION "4.60" +#define IDECD_VERSION "4.61" #include #include @@ -818,6 +820,14 @@ do_end_request = 1; } else if (sense_key == ILLEGAL_REQUEST || sense_key == DATA_PROTECT) { + /* + * check if this was a write protected media + */ + if (rq_data_dir(rq) == WRITE) { + printk("ide-cd: media marked write protected\n"); + set_disk_ro(drive->disk, 1); + } + /* No point in retrying after an illegal request or data protect error.*/ ide_dump_status (drive, "command error", stat); @@ -1211,6 +1221,9 @@ { struct cdrom_info *info = drive->driver_data; struct request *rq = HWGROUP(drive)->rq; + unsigned short sectors_per_frame; + + sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS; /* Can't do anything if there's no buffer. */ if (info->buffer == NULL) return 0; @@ -1249,7 +1262,7 @@ will fail. I think that this will never happen, but let's be paranoid and check. */ if (rq->current_nr_sectors < bio_cur_sectors(rq->bio) && - (rq->sector % SECTORS_PER_FRAME) != 0) { + (rq->sector & (sectors_per_frame - 1))) { printk("%s: cdrom_read_from_buffer: buffer botch (%ld)\n", drive->name, (long)rq->sector); cdrom_end_request(drive, 0); @@ -1268,13 +1281,10 @@ static ide_startstop_t cdrom_start_read_continuation (ide_drive_t *drive) { struct request *rq = HWGROUP(drive)->rq; - int nsect, sector, nframes, frame, nskip; + unsigned short sectors_per_frame; + int nskip; - /* Number of sectors to transfer. */ - nsect = rq->nr_sectors; - - /* Starting sector. */ - sector = rq->sector; + sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS; /* If the requested sector doesn't start on a cdrom block boundary, we must adjust the start of the transfer so that it does, @@ -1283,31 +1293,19 @@ of the buffer, it will mean that we're to skip a number of sectors equal to the amount by which CURRENT_NR_SECTORS is larger than the buffer size. */ - nskip = (sector % SECTORS_PER_FRAME); + nskip = rq->sector & (sectors_per_frame - 1); if (nskip > 0) { /* Sanity check... */ if (rq->current_nr_sectors != bio_cur_sectors(rq->bio) && - (rq->sector % CD_FRAMESIZE != 0)) { + (rq->sector & (sectors_per_frame - 1))) { printk ("%s: cdrom_start_read_continuation: buffer botch (%u)\n", drive->name, rq->current_nr_sectors); cdrom_end_request(drive, 0); return ide_stopped; } - sector -= nskip; - nsect += nskip; rq->current_nr_sectors += nskip; } - /* Convert from sectors to cdrom blocks, rounding up the transfer - length if needed. */ - nframes = (nsect + SECTORS_PER_FRAME-1) / SECTORS_PER_FRAME; - frame = sector / SECTORS_PER_FRAME; - - /* Largest number of frames was can transfer at once is 64k-1. For - some drives we need to limit this even more. */ - nframes = MIN (nframes, (CDROM_CONFIG_FLAGS (drive)->limit_nframes) ? - (65534 / CD_FRAMESIZE) : 65535); - /* Set up the command */ rq->timeout = ATAPI_WAIT_PC; @@ -1346,13 +1344,9 @@ static ide_startstop_t cdrom_start_seek_continuation (ide_drive_t *drive) { struct request *rq = HWGROUP(drive)->rq; - int sector, frame, nskip; + int frame = rq->sector; - sector = rq->sector; - nskip = (sector % SECTORS_PER_FRAME); - if (nskip > 0) - sector -= nskip; - frame = sector / SECTORS_PER_FRAME; + sector_div(frame, queue_hardsect_size(drive->queue) >> SECTOR_BITS); memset(rq->cmd, 0, sizeof(rq->cmd)); rq->cmd[0] = GPCMD_SEEK; @@ -1396,6 +1390,9 @@ { struct cdrom_info *info = drive->driver_data; struct request *rq = HWGROUP(drive)->rq; + unsigned short sectors_per_frame; + + sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS; /* We may be retrying this request after an error. Fix up any weirdness which might be present in the request packet. */ @@ -1411,10 +1408,9 @@ info->nsectors_buffered = 0; /* use dma, if possible. */ - if (drive->using_dma && (rq->sector % SECTORS_PER_FRAME == 0) && - (rq->nr_sectors % SECTORS_PER_FRAME == 0)) - info->dma = 1; - else + info->dma = drive->using_dma; + if ((rq->sector & (sectors_per_frame - 1)) || + (rq->nr_sectors & (sectors_per_frame - 1))) info->dma = 0; info->cmd = READ; @@ -1950,11 +1946,22 @@ static ide_startstop_t cdrom_start_write(ide_drive_t *drive, struct request *rq) { struct cdrom_info *info = drive->driver_data; + struct gendisk *g = drive->disk; + unsigned short sectors_per_frame = queue_hardsect_size(drive->queue) >> SECTOR_BITS; /* - * writes *must* be 2kB frame aligned + * writes *must* be hardware frame aligned */ - if ((rq->nr_sectors & 3) || (rq->sector & 3)) { + if ((rq->nr_sectors & (sectors_per_frame - 1)) || + (rq->sector & (sectors_per_frame - 1))) { + cdrom_end_request(drive, 0); + return ide_stopped; + } + + /* + * disk has become write protected + */ + if (g->policy) { cdrom_end_request(drive, 0); return ide_stopped; } @@ -1969,12 +1976,12 @@ info->nsectors_buffered = 0; - /* use dma, if possible. we don't need to check more, since we - * know that the transfer is always (at least!) 2KB aligned */ + /* use dma, if possible. we don't need to check more, since we + * know that the transfer is always (at least!) frame aligned */ info->dma = drive->using_dma ? 1 : 0; info->cmd = WRITE; - /* Start sending the read request to the drive. */ + /* Start sending the write request to the drive. */ return cdrom_start_packet_command(drive, 32768, cdrom_start_write_cont); } @@ -2209,6 +2216,7 @@ } static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity, + unsigned long *sectors_per_frame, struct request_sense *sense) { struct { @@ -2227,8 +2235,11 @@ req.data_len = sizeof(capbuf); stat = cdrom_queue_packet_command(drive, &req); - if (stat == 0) + if (stat == 0) { *capacity = 1 + be32_to_cpu(capbuf.lba); + *sectors_per_frame = + be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS; + } return stat; } @@ -2270,6 +2281,7 @@ struct atapi_toc_entry ent; } ms_tmp; long last_written; + unsigned long sectors_per_frame = SECTORS_PER_FRAME; if (toc == NULL) { /* Try to allocate space. */ @@ -2289,12 +2301,15 @@ if (CDROM_STATE_FLAGS(drive)->toc_valid) return 0; - /* Try to get the total cdrom capacity. */ - stat = cdrom_read_capacity(drive, &toc->capacity, sense); + /* Try to get the total cdrom capacity and sector size. */ + stat = cdrom_read_capacity(drive, &toc->capacity, §ors_per_frame, + sense); if (stat) toc->capacity = 0x1fffff; - set_capacity(drive->disk, toc->capacity * SECTORS_PER_FRAME); + set_capacity(drive->disk, toc->capacity * sectors_per_frame); + blk_queue_hardsect_size(drive->queue, + sectors_per_frame << SECTOR_BITS); /* First read just the header, so we know how long the TOC is. */ stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr, @@ -2406,7 +2421,7 @@ stat = cdrom_get_last_written(cdi, &last_written); if (!stat && last_written) { toc->capacity = last_written; - set_capacity(drive->disk, toc->capacity * SECTORS_PER_FRAME); + set_capacity(drive->disk, toc->capacity * sectors_per_frame); } /* Remember that we've read this stuff. */ @@ -3306,12 +3321,12 @@ static sector_t ide_cdrom_capacity (ide_drive_t *drive) { - unsigned long capacity; + unsigned long capacity, sectors_per_frame; - if (cdrom_read_capacity(drive, &capacity, NULL)) + if (cdrom_read_capacity(drive, &capacity, §ors_per_frame, NULL)) return 0; - return capacity * SECTORS_PER_FRAME; + return capacity * sectors_per_frame; } static @@ -3511,7 +3526,7 @@ snprintf(g->devfs_name, sizeof(g->devfs_name), "%s/cd", drive->devfs_name); g->driverfs_dev = &drive->gendev; - g->flags = GENHD_FL_CD; + g->flags = GENHD_FL_CD | GENHD_FL_REMOVABLE; if (ide_cdrom_setup(drive)) { struct cdrom_device_info *devinfo = &info->devinfo; DRIVER(drive)->busy--; diff -Nru a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c --- a/drivers/ide/ide-floppy.c Wed Feb 4 16:51:35 2004 +++ b/drivers/ide/ide-floppy.c Wed Feb 4 16:51:35 2004 @@ -1317,6 +1317,7 @@ } header = (idefloppy_mode_parameter_header_t *) pc.buffer; floppy->wp = header->wp; + set_disk_ro(drive->disk, floppy->wp); page = (idefloppy_flexible_disk_page_t *) (header + 1); page->transfer_rate = ntohs(page->transfer_rate); diff -Nru a/drivers/ide/ide.c b/drivers/ide/ide.c --- a/drivers/ide/ide.c Wed Feb 4 16:51:34 2004 +++ b/drivers/ide/ide.c Wed Feb 4 16:51:34 2004 @@ -1689,7 +1689,7 @@ case CDROMEJECT: case CDROMCLOSETRAY: - return scsi_cmd_ioctl(bdev, cmd, arg); + return scsi_cmd_ioctl(bdev->bd_disk, cmd, arg); case HDIO_GET_BUSSTATE: if (!capable(CAP_SYS_ADMIN)) diff -Nru a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c --- a/drivers/ide/pci/sc1200.c Wed Feb 4 16:51:36 2004 +++ b/drivers/ide/pci/sc1200.c Wed Feb 4 16:51:36 2004 @@ -420,7 +420,7 @@ ss = kmalloc(sizeof(sc1200_saved_state_t), GFP_KERNEL); if (ss == NULL) return -ENOMEM; - (sc1200_saved_state_t *)hwif->config_data = ss; + hwif->config_data = (unsigned long)ss; } ss = (sc1200_saved_state_t *)hwif->config_data; // diff -Nru a/drivers/ieee1394/highlevel.c b/drivers/ieee1394/highlevel.c --- a/drivers/ieee1394/highlevel.c Wed Feb 4 16:51:37 2004 +++ b/drivers/ieee1394/highlevel.c Wed Feb 4 16:51:37 2004 @@ -521,7 +521,7 @@ rcode = RCODE_TYPE_ERROR; } - (u8 *)data += partlength; + data += partlength; length -= partlength; addr += partlength; @@ -567,7 +567,7 @@ rcode = RCODE_TYPE_ERROR; } - (u8 *)data += partlength; + data += partlength; length -= partlength; addr += partlength; diff -Nru a/drivers/input/evdev.c b/drivers/input/evdev.c --- a/drivers/input/evdev.c Wed Feb 4 16:51:36 2004 +++ b/drivers/input/evdev.c Wed Feb 4 16:51:36 2004 @@ -232,7 +232,7 @@ if (t < 0 || t > dev->keycodemax || !dev->keycodesize) return -EINVAL; if (get_user(v, ((int *) arg) + 1)) return -EFAULT; u = INPUT_KEYCODE(dev, t); - INPUT_KEYCODE(dev, t) = v; + SET_INPUT_KEYCODE(dev, t, v); for (i = 0; i < dev->keycodemax; i++) if (v == u) break; if (i == dev->keycodemax) clear_bit(u, dev->keybit); set_bit(v, dev->keybit); diff -Nru a/drivers/isdn/hardware/eicon/divasmain.c b/drivers/isdn/hardware/eicon/divasmain.c --- a/drivers/isdn/hardware/eicon/divasmain.c Wed Feb 4 16:51:33 2004 +++ b/drivers/isdn/hardware/eicon/divasmain.c Wed Feb 4 16:51:33 2004 @@ -1,4 +1,4 @@ -/* $Id: divasmain.c,v 1.46 2003/10/10 12:28:14 armin Exp $ +/* $Id: divasmain.c,v 1.47 2004/02/03 16:03:01 armin Exp $ * * Low level driver for Eicon DIVA Server ISDN cards. * @@ -41,7 +41,7 @@ #include "diva_dma.h" #include "diva_pci.h" -static char *main_revision = "$Revision: 1.46 $"; +static char *main_revision = "$Revision: 1.47 $"; static int major; @@ -594,7 +594,6 @@ int diva_os_cancel_soft_isr(diva_os_soft_isr_t * psoft_isr) { - flush_scheduled_work(); return (0); } diff -Nru a/drivers/isdn/hisax/hisax_hfcpci.c b/drivers/isdn/hisax/hisax_hfcpci.c --- a/drivers/isdn/hisax/hisax_hfcpci.c Wed Feb 4 16:51:34 2004 +++ b/drivers/isdn/hisax/hisax_hfcpci.c Wed Feb 4 16:51:34 2004 @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include "hisax_hfcpci.h" // debugging cruft diff -Nru a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c --- a/drivers/macintosh/via-pmu.c Wed Feb 4 16:51:37 2004 +++ b/drivers/macintosh/via-pmu.c Wed Feb 4 16:51:37 2004 @@ -2288,8 +2288,6 @@ } extern long sys_sync(void); -extern void pm_prepare_console(void); -extern void pm_restore_console(void); static int __pmac pmac_suspend_devices(void) diff -Nru a/drivers/md/Makefile b/drivers/md/Makefile --- a/drivers/md/Makefile Wed Feb 4 16:51:35 2004 +++ b/drivers/md/Makefile Wed Feb 4 16:51:35 2004 @@ -24,26 +24,43 @@ obj-$(CONFIG_BLK_DEV_MD) += md.o obj-$(CONFIG_BLK_DEV_DM) += dm-mod.o -# Files generated that shall be removed upon make clean -clean-files := raid6int*.c raid6tables.c mktables - -$(obj)/raid6int1.c: $(src)/raid6int.uc $(src)/unroll.pl - $(PERL) $(src)/unroll.pl 1 < $< > $@ || ( rm -f $@ && exit 1 ) - -$(obj)/raid6int2.c: $(src)/raid6int.uc $(src)/unroll.pl - $(PERL) $(src)/unroll.pl 2 < $< > $@ || ( rm -f $@ && exit 1 ) - -$(obj)/raid6int4.c: $(src)/raid6int.uc $(src)/unroll.pl - $(PERL) $(src)/unroll.pl 4 < $< > $@ || ( rm -f $@ && exit 1 ) - -$(obj)/raid6int8.c: $(src)/raid6int.uc $(src)/unroll.pl - $(PERL) $(src)/unroll.pl 8 < $< > $@ || ( rm -f $@ && exit 1 ) - -$(obj)/raid6int16.c: $(src)/raid6int.uc $(src)/unroll.pl - $(PERL) $(src)/unroll.pl 16 < $< > $@ || ( rm -f $@ && exit 1 ) - -$(obj)/raid6int32.c: $(src)/raid6int.uc $(src)/unroll.pl - $(PERL) $(src)/unroll.pl 32 < $< > $@ || ( rm -f $@ && exit 1 ) - -$(obj)/raid6tables.c: $(obj)/mktables - $(obj)/mktables > $@ || ( rm -f $@ && exit 1 ) +quiet_cmd_unroll = UNROLL $@ + cmd_unroll = $(PERL) $(srctree)/$(src)/unroll.pl $(UNROLL) \ + < $< > $@ || ( rm -f $@ && exit 1 ) + +targets += raid6int1.c +$(obj)/raid6int1.c: UNROLL := 1 +$(obj)/raid6int1.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE + $(call if_changed,unroll) + +targets += raid6int2.c +$(obj)/raid6int2.c: UNROLL := 2 +$(obj)/raid6int2.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE + $(call if_changed,unroll) + +targets += raid6int4.c +$(obj)/raid6int4.c: UNROLL := 4 +$(obj)/raid6int4.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE + $(call if_changed,unroll) + +targets += raid6int8.c +$(obj)/raid6int8.c: UNROLL := 8 +$(obj)/raid6int8.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE + $(call if_changed,unroll) + +targets += raid6int16.c +$(obj)/raid6int16.c: UNROLL := 16 +$(obj)/raid6int16.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE + $(call if_changed,unroll) + +targets += raid6int32.c +$(obj)/raid6int32.c: UNROLL := 32 +$(obj)/raid6int32.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE + $(call if_changed,unroll) + +quiet_cmd_mktable = TABLE $@ + cmd_mktable = $(obj)/mktables > $@ || ( rm -f $@ && exit 1 ) + +targets += raid6tables.c +$(obj)/raid6tables.c: $(obj)/mktables FORCE + $(call if_changed,mktable) diff -Nru a/drivers/md/linear.c b/drivers/md/linear.c --- a/drivers/md/linear.c Wed Feb 4 16:51:35 2004 +++ b/drivers/md/linear.c Wed Feb 4 16:51:35 2004 @@ -208,6 +208,14 @@ dev_info_t *tmp_dev; sector_t block; + if (bio_data_dir(bio)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); + } + tmp_dev = which_dev(mddev, bio->bi_sector); block = bio->bi_sector >> 1; diff -Nru a/drivers/md/md.c b/drivers/md/md.c --- a/drivers/md/md.c Wed Feb 4 16:51:34 2004 +++ b/drivers/md/md.c Wed Feb 4 16:51:34 2004 @@ -512,11 +512,6 @@ goto abort; } - if (sb->md_minor >= MAX_MD_DEVS) { - printk(KERN_ERR "md: %s: invalid raid minor (%x)\n", - b, sb->md_minor); - goto abort; - } if (sb->raid_disks <= 0) goto abort; @@ -999,10 +994,10 @@ same_pdev = match_dev_unit(mddev, rdev); if (same_pdev) printk(KERN_WARNING - "md%d: WARNING: %s appears to be on the same physical" + "%s: WARNING: %s appears to be on the same physical" " disk as %s. True\n protection against single-disk" " failure might be compromised.\n", - mdidx(mddev), bdevname(rdev->bdev,b), + mdname(mddev), bdevname(rdev->bdev,b), bdevname(same_pdev->bdev,b2)); /* Verify rdev->desc_nr is unique. @@ -1182,7 +1177,7 @@ printk("md: * *\n"); printk("md: **********************************\n"); ITERATE_MDDEV(mddev,tmp) { - printk("md%d: ", mdidx(mddev)); + printk("%s: ", mdname(mddev)); ITERATE_RDEV(mddev,rdev,tmp2) printk("<%s>", bdevname(rdev->bdev,b)); @@ -1262,8 +1257,8 @@ return; dprintk(KERN_INFO - "md: updating md%d RAID superblock on device (in sync %d)\n", - mdidx(mddev),mddev->in_sync); + "md: updating %s RAID superblock on device (in sync %d)\n", + mdname(mddev),mddev->in_sync); err = 0; ITERATE_RDEV(mddev,rdev,tmp) { @@ -1429,8 +1424,8 @@ if (mddev->major_version != MD_MAJOR_VERSION || mddev->minor_version > MD_MINOR_VERSION) { printk(KERN_ALERT - "md: md%d: unsupported raid array version %d.%d.%d\n", - mdidx(mddev), mddev->major_version, + "md: %s: unsupported raid array version %d.%d.%d\n", + mdname(mddev), mddev->major_version, mddev->minor_version, mddev->patch_version); goto abort; } @@ -1438,9 +1433,9 @@ if ((mddev->recovery_cp != MaxSector) && ((mddev->level == 1) || ((mddev->level >= 4) && (mddev->level <= 6)))) - printk(KERN_ERR "md: md%d: raid array is not clean" + printk(KERN_ERR "md: %s: raid array is not clean" " -- starting background reconstruction\n", - mdidx(mddev)); + mdname(mddev)); return 0; abort: @@ -1665,8 +1660,8 @@ mddev->ro = 0; set_disk_ro(disk, 0); - printk(KERN_INFO "md: md%d switched to read-write mode.\n", - mdidx(mddev)); + printk(KERN_INFO "md: %s switched to read-write mode.\n", + mdname(mddev)); /* * Kick recovery or resync if necessary */ @@ -1674,8 +1669,8 @@ md_wakeup_thread(mddev->thread); err = 0; } else { - printk(KERN_ERR "md: md%d has no personality assigned.\n", - mdidx(mddev)); + printk(KERN_ERR "md: %s has no personality assigned.\n", + mdname(mddev)); err = -EINVAL; } @@ -1690,7 +1685,7 @@ if (mddev->pers) { if (atomic_read(&mddev->active)>2) { - printk("md: md%d still in use.\n",mdidx(mddev)); + printk("md: %s still in use.\n",mdname(mddev)); return -EBUSY; } @@ -1732,7 +1727,7 @@ */ if (!ro) { struct gendisk *disk; - printk(KERN_INFO "md: md%d stopped.\n", mdidx(mddev)); + printk(KERN_INFO "md: %s stopped.\n", mdname(mddev)); export_array(mddev); @@ -1741,8 +1736,8 @@ if (disk) set_capacity(disk, 0); } else - printk(KERN_INFO "md: md%d switched to read-only mode.\n", - mdidx(mddev)); + printk(KERN_INFO "md: %s switched to read-only mode.\n", + mdname(mddev)); err = 0; out: return err; @@ -1821,16 +1816,16 @@ break; } if (mddev_lock(mddev)) - printk(KERN_WARNING "md: md%d locked, cannot run\n", - mdidx(mddev)); + printk(KERN_WARNING "md: %s locked, cannot run\n", + mdname(mddev)); else if (mddev->raid_disks || mddev->major_version || !list_empty(&mddev->disks)) { printk(KERN_WARNING - "md: md%d already running, cannot run %s\n", - mdidx(mddev), bdevname(rdev0->bdev,b)); + "md: %s already running, cannot run %s\n", + mdname(mddev), bdevname(rdev0->bdev,b)); mddev_unlock(mddev); - } else { - printk(KERN_INFO "md: created md%d\n", mdidx(mddev)); + } else if (rdev0->preferred_minor >= 0 && rdev0->preferred_minor < MAX_MD_DEVS) { + printk(KERN_INFO "md: created %s\n", mdname(mddev)); ITERATE_RDEV_GENERIC(candidates,rdev,tmp) { list_del_init(&rdev->same_set); if (bind_rdev_to_array(rdev, mddev)) @@ -1838,7 +1833,9 @@ } autorun_array(mddev); mddev_unlock(mddev); - } + } else + printk(KERN_WARNING "md: %s had invalid preferred minor %d\n", + bdevname(rdev->bdev, b), rdev0->preferred_minor); /* on success, candidates will be empty, on error * it won't... */ @@ -2062,8 +2059,8 @@ int err; if (!mddev->pers->hot_add_disk) { printk(KERN_WARNING - "md%d: personality does not support diskops!\n", - mdidx(mddev)); + "%s: personality does not support diskops!\n", + mdname(mddev)); return -EINVAL; } rdev = md_import_device(dev, mddev->major_version, @@ -2088,8 +2085,8 @@ * for major_version==0 superblocks */ if (mddev->major_version != 0) { - printk(KERN_WARNING "md%d: ADD_NEW_DISK not supported\n", - mdidx(mddev)); + printk(KERN_WARNING "%s: ADD_NEW_DISK not supported\n", + mdname(mddev)); return -EINVAL; } @@ -2143,8 +2140,8 @@ if (!mddev->pers) return -ENODEV; - printk(KERN_INFO "md: trying to generate %s error in md%d ... \n", - __bdevname(dev, b), mdidx(mddev)); + printk(KERN_INFO "md: trying to generate %s error in %s ... \n", + __bdevname(dev, b), mdname(mddev)); rdev = find_rdev(mddev, dev); if (!rdev) { @@ -2178,8 +2175,8 @@ if (!mddev->pers) return -ENODEV; - printk(KERN_INFO "md: trying to remove %s from md%d ... \n", - __bdevname(dev, b), mdidx(mddev)); + printk(KERN_INFO "md: trying to remove %s from %s ... \n", + __bdevname(dev, b), mdname(mddev)); rdev = find_rdev(mddev, dev); if (!rdev) @@ -2193,8 +2190,8 @@ return 0; busy: - printk(KERN_WARNING "md: cannot remove active disk %s from md%d ... \n", - bdevname(rdev->bdev,b), mdidx(mddev)); + printk(KERN_WARNING "md: cannot remove active disk %s from %s ... \n", + bdevname(rdev->bdev,b), mdname(mddev)); return -EBUSY; } @@ -2208,19 +2205,19 @@ if (!mddev->pers) return -ENODEV; - printk(KERN_INFO "md: trying to hot-add %s to md%d ... \n", - __bdevname(dev, b), mdidx(mddev)); + printk(KERN_INFO "md: trying to hot-add %s to %s ... \n", + __bdevname(dev, b), mdname(mddev)); if (mddev->major_version != 0) { - printk(KERN_WARNING "md%d: HOT_ADD may only be used with" + printk(KERN_WARNING "%s: HOT_ADD may only be used with" " version-0 superblocks.\n", - mdidx(mddev)); + mdname(mddev)); return -EINVAL; } if (!mddev->pers->hot_add_disk) { printk(KERN_WARNING - "md%d: personality does not support diskops!\n", - mdidx(mddev)); + "%s: personality does not support diskops!\n", + mdname(mddev)); return -EINVAL; } @@ -2238,8 +2235,8 @@ if (size < mddev->size) { printk(KERN_WARNING - "md%d: disk size %llu blocks < array size %llu\n", - mdidx(mddev), (unsigned long long)size, + "%s: disk size %llu blocks < array size %llu\n", + mdname(mddev), (unsigned long long)size, (unsigned long long)mddev->size); err = -ENOSPC; goto abort_export; @@ -2247,8 +2244,8 @@ if (rdev->faulty) { printk(KERN_WARNING - "md: can not hot-add faulty %s disk to md%d!\n", - bdevname(rdev->bdev,b), mdidx(mddev)); + "md: can not hot-add faulty %s disk to %s!\n", + bdevname(rdev->bdev,b), mdname(mddev)); err = -EINVAL; goto abort_export; } @@ -2262,8 +2259,8 @@ */ if (rdev->desc_nr == mddev->max_disks) { - printk(KERN_WARNING "md%d: can not hot-add to full array!\n", - mdidx(mddev)); + printk(KERN_WARNING "%s: can not hot-add to full array!\n", + mdname(mddev)); err = -EBUSY; goto abort_unbind_export; } @@ -2445,15 +2442,15 @@ if (!list_empty(&mddev->disks)) { printk(KERN_WARNING - "md: array md%d already has disks!\n", - mdidx(mddev)); + "md: array %s already has disks!\n", + mdname(mddev)); err = -EBUSY; goto abort_unlock; } if (mddev->raid_disks) { printk(KERN_WARNING - "md: array md%d already initialised!\n", - mdidx(mddev)); + "md: array %s already initialised!\n", + mdname(mddev)); err = -EBUSY; goto abort_unlock; } @@ -2648,7 +2645,7 @@ * Detach thread */ - daemonize(thread->name, mdidx(thread->mddev)); + daemonize(thread->name, mdname(thread->mddev)); current->exit_signal = SIGCHLD; allow_signal(SIGKILL); @@ -2693,7 +2690,7 @@ void md_wakeup_thread(mdk_thread_t *thread) { if (thread) { - dprintk("md: waking up MD thread %p.\n", thread); + dprintk("md: waking up MD thread %s.\n", thread->tsk->comm); set_bit(THREAD_WAKEUP, &thread->flags); wake_up(&thread->wqueue); } @@ -2754,12 +2751,6 @@ void md_error(mddev_t *mddev, mdk_rdev_t *rdev) { - dprintk("md_error dev:(%d:%d), rdev:(%d:%d), (caller: %p,%p,%p,%p).\n", - MD_MAJOR,mdidx(mddev), - MAJOR(rdev->bdev->bd_dev), MINOR(rdev->bdev->bd_dev), - __builtin_return_address(0),__builtin_return_address(1), - __builtin_return_address(2),__builtin_return_address(3)); - if (!mddev) { MD_BUG(); return; @@ -2767,6 +2758,13 @@ if (!rdev || rdev->faulty) return; + + dprintk("md_error dev:%s, rdev:(%d:%d), (caller: %p,%p,%p,%p).\n", + mdname(mddev), + MAJOR(rdev->bdev->bd_dev), MINOR(rdev->bdev->bd_dev), + __builtin_return_address(0),__builtin_return_address(1), + __builtin_return_address(2),__builtin_return_address(3)); + if (!mddev->pers->error_handler) return; mddev->pers->error_handler(mddev,rdev); @@ -2935,7 +2933,7 @@ if (mddev_lock(mddev)!=0) return -EINTR; if (mddev->pers || mddev->raid_disks || !list_empty(&mddev->disks)) { - seq_printf(seq, "md%d : %sactive", mdidx(mddev), + seq_printf(seq, "%s : %sactive", mdname(mddev), mddev->pers ? "" : "in"); if (mddev->pers) { if (mddev->ro) @@ -3124,8 +3122,8 @@ void md_handle_safemode(mddev_t *mddev) { if (signal_pending(current)) { - printk(KERN_INFO "md: md%d in immediate safe mode\n", - mdidx(mddev)); + printk(KERN_INFO "md: %s in immediate safe mode\n", + mdname(mddev)); mddev->safemode = 2; flush_signals(current); } @@ -3167,10 +3165,10 @@ continue; if (mddev2->curr_resync && match_mddev_units(mddev,mddev2)) { - printk(KERN_INFO "md: delaying resync of md%d" - " until md%d has finished resync (they" + printk(KERN_INFO "md: delaying resync of %s" + " until %s has finished resync (they" " share one or more physical units)\n", - mdidx(mddev), mdidx(mddev2)); + mdname(mddev), mdname(mddev2)); if (mddev < mddev2) {/* arbitrarily yield */ mddev->curr_resync = 1; wake_up(&resync_wait); @@ -3191,7 +3189,7 @@ max_sectors = mddev->size << 1; - printk(KERN_INFO "md: syncing RAID array md%d\n", mdidx(mddev)); + printk(KERN_INFO "md: syncing RAID array %s\n", mdname(mddev)); printk(KERN_INFO "md: minimum _guaranteed_ reconstruction speed:" " %d KB/sec/disc.\n", sysctl_speed_limit_min); printk(KERN_INFO "md: using maximum available idle IO bandwith " @@ -3224,8 +3222,8 @@ if (j) printk(KERN_INFO - "md: resuming recovery of md%d from checkpoint.\n", - mdidx(mddev)); + "md: resuming recovery of %s from checkpoint.\n", + mdname(mddev)); while (j < max_sectors) { int sectors; @@ -3295,7 +3293,7 @@ } } } - printk(KERN_INFO "md: md%d: sync done.\n",mdidx(mddev)); + printk(KERN_INFO "md: %s: sync done.\n",mdname(mddev)); /* * this also signals 'finished resyncing' to md_stop */ @@ -3310,8 +3308,8 @@ mddev->curr_resync > mddev->recovery_cp) { if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) { printk(KERN_INFO - "md: checkpointing recovery of md%d.\n", - mdidx(mddev)); + "md: checkpointing recovery of %s.\n", + mdname(mddev)); mddev->recovery_cp = mddev->curr_resync; } else mddev->recovery_cp = MaxSector; @@ -3431,11 +3429,11 @@ set_bit(MD_RECOVERY_SYNC, &mddev->recovery); mddev->sync_thread = md_register_thread(md_do_sync, mddev, - "md%d_resync"); + "%s_resync"); if (!mddev->sync_thread) { - printk(KERN_ERR "md%d: could not start resync" + printk(KERN_ERR "%s: could not start resync" " thread...\n", - mdidx(mddev)); + mdname(mddev)); /* leave the spares where they are, it shouldn't hurt */ mddev->recovery = 0; } else { diff -Nru a/drivers/md/multipath.c b/drivers/md/multipath.c --- a/drivers/md/multipath.c Wed Feb 4 16:51:35 2004 +++ b/drivers/md/multipath.c Wed Feb 4 16:51:35 2004 @@ -167,6 +167,13 @@ mp_bh->master_bio = bio; mp_bh->mddev = mddev; + if (bio_data_dir(bio)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); + } /* * read balancing logic: */ @@ -382,8 +389,8 @@ struct list_head *tmp; if (mddev->level != LEVEL_MULTIPATH) { - printk("multipath: md%d: raid level not set to multipath IO (%d)\n", - mdidx(mddev), mddev->level); + printk("multipath: %s: raid level not set to multipath IO (%d)\n", + mdname(mddev), mddev->level); goto out; } /* @@ -396,8 +403,8 @@ mddev->private = conf; if (!conf) { printk(KERN_ERR - "multipath: couldn't allocate memory for md%d\n", - mdidx(mddev)); + "multipath: couldn't allocate memory for %s\n", + mdname(mddev)); goto out; } memset(conf, 0, sizeof(*conf)); @@ -406,8 +413,8 @@ GFP_KERNEL); if (!conf->multipaths) { printk(KERN_ERR - "multipath: couldn't allocate memory for md%d\n", - mdidx(mddev)); + "multipath: couldn't allocate memory for %s\n", + mdname(mddev)); goto out_free_conf; } memset(conf->multipaths, 0, sizeof(struct multipath_info)*mddev->raid_disks); @@ -441,8 +448,8 @@ conf->device_lock = SPIN_LOCK_UNLOCKED; if (!conf->working_disks) { - printk(KERN_ERR "multipath: no operational IO paths for md%d\n", - mdidx(mddev)); + printk(KERN_ERR "multipath: no operational IO paths for %s\n", + mdname(mddev)); goto out_free_conf; } mddev->degraded = conf->raid_disks = conf->working_disks; @@ -452,25 +459,23 @@ NULL); if (conf->pool == NULL) { printk(KERN_ERR - "multipath: couldn't allocate memory for md%d\n", - mdidx(mddev)); + "multipath: couldn't allocate memory for %s\n", + mdname(mddev)); goto out_free_conf; } { - const char * name = "md%d_multipath"; - - mddev->thread = md_register_thread(multipathd, mddev, name); + mddev->thread = md_register_thread(multipathd, mddev, "%s_multipath"); if (!mddev->thread) { printk(KERN_ERR "multipath: couldn't allocate thread" - " for md%d\n", mdidx(mddev)); + " for %s\n", mdname(mddev)); goto out_free_conf; } } printk(KERN_INFO - "multipath: array md%d active with %d out of %d IO paths\n", - mdidx(mddev), conf->working_disks, mddev->raid_disks); + "multipath: array %s active with %d out of %d IO paths\n", + mdname(mddev), conf->working_disks, mddev->raid_disks); /* * Ok, everything is just fine now */ diff -Nru a/drivers/md/raid0.c b/drivers/md/raid0.c --- a/drivers/md/raid0.c Wed Feb 4 16:51:35 2004 +++ b/drivers/md/raid0.c Wed Feb 4 16:51:35 2004 @@ -240,8 +240,8 @@ mdk_rdev_t *rdev; struct list_head *tmp; - printk("md%d: setting max_sectors to %d, segment boundary to %d\n", - mdidx(mddev), + printk("%s: setting max_sectors to %d, segment boundary to %d\n", + mdname(mddev), mddev->chunk_size >> 9, (mddev->chunk_size>>1)-1); blk_queue_max_sectors(mddev->queue, mddev->chunk_size >> 9); @@ -364,6 +364,14 @@ mdk_rdev_t *tmp_dev; unsigned long chunk; sector_t block, rsect; + + if (bio_data_dir(bio)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); + } chunk_size = mddev->chunk_size >> 10; chunk_sects = mddev->chunk_size >> 9; diff -Nru a/drivers/md/raid1.c b/drivers/md/raid1.c --- a/drivers/md/raid1.c Wed Feb 4 16:51:35 2004 +++ b/drivers/md/raid1.c Wed Feb 4 16:51:35 2004 @@ -474,6 +474,14 @@ conf->nr_pending++; spin_unlock_irq(&conf->resync_lock); + if (bio_data_dir(bio)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bio)); + } + /* * make_request() can abort the operation when READA is being * used and no empty request is available. @@ -1044,8 +1052,8 @@ struct list_head *tmp; if (mddev->level != 1) { - printk("raid1: md%d: raid level not set to mirroring (%d)\n", - mdidx(mddev), mddev->level); + printk("raid1: %s: raid level not set to mirroring (%d)\n", + mdname(mddev), mddev->level); goto out; } /* @@ -1056,16 +1064,16 @@ conf = kmalloc(sizeof(conf_t), GFP_KERNEL); mddev->private = conf; if (!conf) { - printk(KERN_ERR "raid1: couldn't allocate memory for md%d\n", - mdidx(mddev)); + printk(KERN_ERR "raid1: couldn't allocate memory for %s\n", + mdname(mddev)); goto out; } memset(conf, 0, sizeof(*conf)); conf->mirrors = kmalloc(sizeof(struct mirror_info)*mddev->raid_disks, GFP_KERNEL); if (!conf->mirrors) { - printk(KERN_ERR "raid1: couldn't allocate memory for md%d\n", - mdidx(mddev)); + printk(KERN_ERR "raid1: couldn't allocate memory for %s\n", + mdname(mddev)); goto out_free_conf; } memset(conf->mirrors, 0, sizeof(struct mirror_info)*mddev->raid_disks); @@ -1073,8 +1081,8 @@ conf->r1bio_pool = mempool_create(NR_RAID1_BIOS, r1bio_pool_alloc, r1bio_pool_free, mddev); if (!conf->r1bio_pool) { - printk(KERN_ERR "raid1: couldn't allocate memory for md%d\n", - mdidx(mddev)); + printk(KERN_ERR "raid1: couldn't allocate memory for %s\n", + mdname(mddev)); goto out_free_conf; } @@ -1113,8 +1121,8 @@ init_waitqueue_head(&conf->wait_resume); if (!conf->working_disks) { - printk(KERN_ERR "raid1: no operational mirrors for md%d\n", - mdidx(mddev)); + printk(KERN_ERR "raid1: no operational mirrors for %s\n", + mdname(mddev)); goto out_free_conf; } @@ -1142,17 +1150,17 @@ { - mddev->thread = md_register_thread(raid1d, mddev, "md%d_raid1"); + mddev->thread = md_register_thread(raid1d, mddev, "%s_raid1"); if (!mddev->thread) { printk(KERN_ERR - "raid1: couldn't allocate thread for md%d\n", - mdidx(mddev)); + "raid1: couldn't allocate thread for %s\n", + mdname(mddev)); goto out_free_conf; } } printk(KERN_INFO - "raid1: raid set md%d active with %d out of %d mirrors\n", - mdidx(mddev), mddev->raid_disks - mddev->degraded, + "raid1: raid set %s active with %d out of %d mirrors\n", + mdname(mddev), mddev->raid_disks - mddev->degraded, mddev->raid_disks); /* * Ok, everything is just fine now diff -Nru a/drivers/md/raid5.c b/drivers/md/raid5.c --- a/drivers/md/raid5.c Wed Feb 4 16:51:34 2004 +++ b/drivers/md/raid5.c Wed Feb 4 16:51:34 2004 @@ -1326,6 +1326,14 @@ sector_t logical_sector, last_sector; struct stripe_head *sh; + if (bio_data_dir(bi)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bi)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bi)); + } + logical_sector = bi->bi_sector & ~(STRIPE_SECTORS-1); last_sector = bi->bi_sector + (bi->bi_size>>9); @@ -1477,7 +1485,7 @@ struct list_head *tmp; if (mddev->level != 5 && mddev->level != 4) { - printk("raid5: md%d: raid level not set to 4/5 (%d)\n", mdidx(mddev), mddev->level); + printk("raid5: %s: raid level not set to 4/5 (%d)\n", mdname(mddev), mddev->level); return -EIO; } @@ -1503,7 +1511,7 @@ mddev->queue->unplug_fn = raid5_unplug_device; - PRINTK("raid5: run(md%d) called.\n", mdidx(mddev)); + PRINTK("raid5: run(%s) called.\n", mdname(mddev)); ITERATE_RDEV(mddev,rdev,tmp) { raid_disk = rdev->raid_disk; @@ -1535,37 +1543,37 @@ conf->max_nr_stripes = NR_STRIPES; if (!conf->chunk_size || conf->chunk_size % 4) { - printk(KERN_ERR "raid5: invalid chunk size %d for md%d\n", - conf->chunk_size, mdidx(mddev)); + printk(KERN_ERR "raid5: invalid chunk size %d for %s\n", + conf->chunk_size, mdname(mddev)); goto abort; } if (conf->algorithm > ALGORITHM_RIGHT_SYMMETRIC) { printk(KERN_ERR - "raid5: unsupported parity algorithm %d for md%d\n", - conf->algorithm, mdidx(mddev)); + "raid5: unsupported parity algorithm %d for %s\n", + conf->algorithm, mdname(mddev)); goto abort; } if (mddev->degraded > 1) { - printk(KERN_ERR "raid5: not enough operational devices for md%d" + printk(KERN_ERR "raid5: not enough operational devices for %s" " (%d/%d failed)\n", - mdidx(mddev), conf->failed_disks, conf->raid_disks); + mdname(mddev), conf->failed_disks, conf->raid_disks); goto abort; } if (mddev->degraded == 1 && mddev->recovery_cp != MaxSector) { printk(KERN_ERR - "raid5: cannot start dirty degraded array for md%d\n", - mdidx(mddev)); + "raid5: cannot start dirty degraded array for %s\n", + mdname(mddev)); goto abort; } { - mddev->thread = md_register_thread(raid5d, mddev, "md%d_raid5"); + mddev->thread = md_register_thread(raid5d, mddev, "%s_raid5"); if (!mddev->thread) { printk(KERN_ERR - "raid5: couldn't allocate thread for md%d\n", - mdidx(mddev)); + "raid5: couldn't allocate thread for %s\n", + mdname(mddev)); goto abort; } } @@ -1578,18 +1586,18 @@ md_unregister_thread(mddev->thread); goto abort; } else - printk(KERN_INFO "raid5: allocated %dkB for md%d\n", - memory, mdidx(mddev)); + printk(KERN_INFO "raid5: allocated %dkB for %s\n", + memory, mdname(mddev)); if (mddev->degraded == 0) - printk("raid5: raid level %d set md%d active with %d out of %d" - " devices, algorithm %d\n", conf->level, mdidx(mddev), + printk("raid5: raid level %d set %s active with %d out of %d" + " devices, algorithm %d\n", conf->level, mdname(mddev), mddev->raid_disks-mddev->degraded, mddev->raid_disks, conf->algorithm); else - printk(KERN_ALERT "raid5: raid level %d set md%d active with %d" + printk(KERN_ALERT "raid5: raid level %d set %s active with %d" " out of %d devices, algorithm %d\n", conf->level, - mdidx(mddev), mddev->raid_disks - mddev->degraded, + mdname(mddev), mddev->raid_disks - mddev->degraded, mddev->raid_disks, conf->algorithm); print_raid5_conf(conf); @@ -1616,7 +1624,7 @@ kfree(conf); } mddev->private = NULL; - printk(KERN_ALERT "raid5: failed to run raid set md%d\n", mdidx(mddev)); + printk(KERN_ALERT "raid5: failed to run raid set %s\n", mdname(mddev)); return -EIO; } diff -Nru a/drivers/md/raid6main.c b/drivers/md/raid6main.c --- a/drivers/md/raid6main.c Wed Feb 4 16:51:33 2004 +++ b/drivers/md/raid6main.c Wed Feb 4 16:51:33 2004 @@ -1488,6 +1488,14 @@ sector_t logical_sector, last_sector; struct stripe_head *sh; + if (bio_data_dir(bi)==WRITE) { + disk_stat_inc(mddev->gendisk, writes); + disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bi)); + } else { + disk_stat_inc(mddev->gendisk, reads); + disk_stat_add(mddev->gendisk, read_sectors, bio_sectors(bi)); + } + logical_sector = bi->bi_sector & ~(STRIPE_SECTORS-1); last_sector = bi->bi_sector + (bi->bi_size>>9); @@ -1639,7 +1647,7 @@ struct list_head *tmp; if (mddev->level != 6) { - PRINTK("raid6: md%d: raid level not set to 6 (%d)\n", mdidx(mddev), mddev->level); + PRINTK("raid6: %s: raid level not set to 6 (%d)\n", mdname(mddev), mddev->level); return -EIO; } @@ -1665,7 +1673,7 @@ mddev->queue->unplug_fn = raid6_unplug_device; - PRINTK("raid6: run(md%d) called.\n", mdidx(mddev)); + PRINTK("raid6: run(%s) called.\n", mdname(mddev)); ITERATE_RDEV(mddev,rdev,tmp) { raid_disk = rdev->raid_disk; @@ -1698,42 +1706,42 @@ conf->max_nr_stripes = NR_STRIPES; if (conf->raid_disks < 4) { - printk(KERN_ERR "raid6: not enough configured devices for md%d (%d, minimum 4)\n", - mdidx(mddev), conf->raid_disks); + printk(KERN_ERR "raid6: not enough configured devices for %s (%d, minimum 4)\n", + mdname(mddev), conf->raid_disks); goto abort; } if (!conf->chunk_size || conf->chunk_size % 4) { - printk(KERN_ERR "raid6: invalid chunk size %d for md%d\n", - conf->chunk_size, mdidx(mddev)); + printk(KERN_ERR "raid6: invalid chunk size %d for %s\n", + conf->chunk_size, mdname(mddev)); goto abort; } if (conf->algorithm > ALGORITHM_RIGHT_SYMMETRIC) { printk(KERN_ERR - "raid6: unsupported parity algorithm %d for md%d\n", - conf->algorithm, mdidx(mddev)); + "raid6: unsupported parity algorithm %d for %s\n", + conf->algorithm, mdname(mddev)); goto abort; } if (mddev->degraded > 2) { - printk(KERN_ERR "raid6: not enough operational devices for md%d" + printk(KERN_ERR "raid6: not enough operational devices for %s" " (%d/%d failed)\n", - mdidx(mddev), conf->failed_disks, conf->raid_disks); + mdname(mddev), conf->failed_disks, conf->raid_disks); goto abort; } #if 0 /* FIX: For now */ if (mddev->degraded > 0 && mddev->recovery_cp != MaxSector) { - printk(KERN_ERR "raid6: cannot start dirty degraded array for md%d\n", mdidx(mddev)); + printk(KERN_ERR "raid6: cannot start dirty degraded array for %s\n", mdname(mddev)); goto abort; } #endif { - mddev->thread = md_register_thread(raid6d, mddev, "md%d_raid6"); + mddev->thread = md_register_thread(raid6d, mddev, "%s_raid6"); if (!mddev->thread) { printk(KERN_ERR - "raid6: couldn't allocate thread for md%d\n", - mdidx(mddev)); + "raid6: couldn't allocate thread for %s\n", + mdname(mddev)); goto abort; } } @@ -1747,18 +1755,18 @@ md_unregister_thread(mddev->thread); goto abort; } else - printk(KERN_INFO "raid6: allocated %dkB for md%d\n", - memory, mdidx(mddev)); + printk(KERN_INFO "raid6: allocated %dkB for %s\n", + memory, mdname(mddev)); if (mddev->degraded == 0) - printk(KERN_INFO "raid6: raid level %d set md%d active with %d out of %d" - " devices, algorithm %d\n", conf->level, mdidx(mddev), + printk(KERN_INFO "raid6: raid level %d set %s active with %d out of %d" + " devices, algorithm %d\n", conf->level, mdname(mddev), mddev->raid_disks-mddev->degraded, mddev->raid_disks, conf->algorithm); else - printk(KERN_ALERT "raid6: raid level %d set md%d active with %d" + printk(KERN_ALERT "raid6: raid level %d set %s active with %d" " out of %d devices, algorithm %d\n", conf->level, - mdidx(mddev), mddev->raid_disks - mddev->degraded, + mdname(mddev), mddev->raid_disks - mddev->degraded, mddev->raid_disks, conf->algorithm); print_raid6_conf(conf); @@ -1785,7 +1793,7 @@ kfree(conf); } mddev->private = NULL; - printk(KERN_ALERT "raid6: failed to run raid set md%d\n", mdidx(mddev)); + printk(KERN_ALERT "raid6: failed to run raid set %s\n", mdname(mddev)); return -EIO; } diff -Nru a/drivers/md/raid6x86.h b/drivers/md/raid6x86.h --- a/drivers/md/raid6x86.h Wed Feb 4 16:51:36 2004 +++ b/drivers/md/raid6x86.h Wed Feb 4 16:51:36 2004 @@ -1,4 +1,3 @@ -#ident "$Id: raid6x86.h,v 1.3 2002/12/12 22:41:27 hpa Exp $" /* ----------------------------------------------------------------------- * * * Copyright 2002-2004 H. Peter Anvin - All Rights Reserved diff -Nru a/drivers/media/dvb/frontends/dst.c b/drivers/media/dvb/frontends/dst.c --- a/drivers/media/dvb/frontends/dst.c Wed Feb 4 16:51:37 2004 +++ b/drivers/media/dvb/frontends/dst.c Wed Feb 4 16:51:37 2004 @@ -28,8 +28,8 @@ #include #include #include +#include #include -#include #include "dvb_frontend.h" #include "dvb_functions.h" diff -Nru a/drivers/media/dvb/frontends/ves1820.c b/drivers/media/dvb/frontends/ves1820.c --- a/drivers/media/dvb/frontends/ves1820.c Wed Feb 4 16:51:35 2004 +++ b/drivers/media/dvb/frontends/ves1820.c Wed Feb 4 16:51:35 2004 @@ -48,23 +48,31 @@ */ #define SET_PWM(data,pwm) do { \ - (long) data &= ~0xff; \ - (long) data |= pwm; \ + long d = (long)data; \ + d &= ~0xff; \ + d |= pwm; \ + data = (void *)d; \ } while (0) #define SET_REG0(data,reg0) do { \ - (long) data &= ~(0xff << 8); \ - (long) data |= reg0 << 8; \ + long d = (long)data; \ + d &= ~(0xff << 8); \ + d |= reg0 << 8; \ + data = (void *)d; \ } while (0) #define SET_TUNER(data,type) do { \ - (long) data &= ~(0xff << 16); \ - (long) data |= type << 16; \ + long d = (long)data; \ + d &= ~(0xff << 16); \ + d |= type << 16; \ + data = (void *)d; \ } while (0) #define SET_DEMOD_ADDR(data,type) do { \ - (long) data &= ~(0xff << 24); \ - (long) data |= type << 24; \ + long d = (long)data; \ + d &= ~(0xff << 24); \ + d |= type << 24; \ + data = (void *)d; \ } while (0) #define GET_PWM(data) ((u8) ((long) data & 0xff)) diff -Nru a/drivers/media/video/dpc7146.c b/drivers/media/video/dpc7146.c --- a/drivers/media/video/dpc7146.c Wed Feb 4 16:51:35 2004 +++ b/drivers/media/video/dpc7146.c Wed Feb 4 16:51:35 2004 @@ -131,7 +131,7 @@ DEB_D(("dpc_v4l2.o: dpc_probe succeeded for this device.\n")); /* we store the pointer in our private data field */ - (struct dpc*)dev->ext_priv = dpc; + dev->ext_priv = dpc; return 0; } diff -Nru a/drivers/media/video/hexium_gemini.c b/drivers/media/video/hexium_gemini.c --- a/drivers/media/video/hexium_gemini.c Wed Feb 4 16:51:34 2004 +++ b/drivers/media/video/hexium_gemini.c Wed Feb 4 16:51:34 2004 @@ -245,7 +245,7 @@ return -ENOMEM; } memset(hexium, 0x0, sizeof(struct hexium)); - (struct hexium *) dev->ext_priv = hexium; + dev->ext_priv = hexium; /* enable i2c-port pins */ saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26)); diff -Nru a/drivers/media/video/hexium_orion.c b/drivers/media/video/hexium_orion.c --- a/drivers/media/video/hexium_orion.c Wed Feb 4 16:51:37 2004 +++ b/drivers/media/video/hexium_orion.c Wed Feb 4 16:51:37 2004 @@ -255,7 +255,7 @@ if (0x17c8 == dev->pci->subsystem_vendor && 0x0101 == dev->pci->subsystem_device) { printk("hexium_orion: device is a Hexium Orion w/ 1 SVHS + 3 BNC inputs.\n"); /* we store the pointer in our private data field */ - (struct hexium *) dev->ext_priv = hexium; + dev->ext_priv = hexium; hexium->type = HEXIUM_ORION_1SVHS_3BNC; return 0; } @@ -263,7 +263,7 @@ if (0x17c8 == dev->pci->subsystem_vendor && 0x2101 == dev->pci->subsystem_device) { printk("hexium_orion: device is a Hexium Orion w/ 4 BNC inputs.\n"); /* we store the pointer in our private data field */ - (struct hexium *) dev->ext_priv = hexium; + dev->ext_priv = hexium; hexium->type = HEXIUM_ORION_4BNC; return 0; } @@ -273,7 +273,7 @@ if (0 == (err = i2c_smbus_xfer(&hexium->i2c_adapter, 0x4e, 0, I2C_SMBUS_READ, 0x00, I2C_SMBUS_BYTE_DATA, &data))) { printk("hexium_orion: device is a Hexium HV-PCI6/Orion (old).\n"); /* we store the pointer in our private data field */ - (struct hexium *) dev->ext_priv = hexium; + dev->ext_priv = hexium; hexium->type = HEXIUM_HV_PCI6_ORION; return 0; } diff -Nru a/drivers/media/video/mxb.c b/drivers/media/video/mxb.c --- a/drivers/media/video/mxb.c Wed Feb 4 16:51:33 2004 +++ b/drivers/media/video/mxb.c Wed Feb 4 16:51:33 2004 @@ -261,7 +261,7 @@ /* all devices are present, probe was successful */ /* we store the pointer in our private data field */ - (struct mxb*)dev->ext_priv = mxb; + dev->ext_priv = mxb; return 0; } diff -Nru a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c --- a/drivers/message/fusion/mptbase.c Wed Feb 4 16:51:34 2004 +++ b/drivers/message/fusion/mptbase.c Wed Feb 4 16:51:34 2004 @@ -167,6 +167,7 @@ static MPT_EVHANDLER MptEvHandlers[MPT_MAX_PROTOCOL_DRIVERS]; /* Reset handler lookup table */ static MPT_RESETHANDLER MptResetHandlers[MPT_MAX_PROTOCOL_DRIVERS]; +static struct mpt_pci_driver *MptDeviceDriverHandlers[MPT_MAX_PROTOCOL_DRIVERS]; static int FusionInitCalled = 0; static int mpt_base_index = -1; @@ -183,7 +184,6 @@ static int mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply); static int mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag); -static int mpt_adapter_install(struct pci_dev *pdev); static void mpt_detect_bound_ports(MPT_ADAPTER *this, struct pci_dev *pdev); static void mpt_adapter_disable(MPT_ADAPTER *ioc, int freeup); static void mpt_adapter_dispose(MPT_ADAPTER *ioc); @@ -232,8 +232,12 @@ static void mpt_fc_log_info(MPT_ADAPTER *ioc, u32 log_info); static void mpt_sp_log_info(MPT_ADAPTER *ioc, u32 log_info); -int fusion_init(void); -static void fusion_exit(void); +/* module entry point */ +static int __devinit mptbase_probe (struct pci_dev *, const struct pci_device_id *); +static void __devexit mptbase_remove(struct pci_dev *); +static void mptbase_shutdown(struct device * ); +static int __init fusion_init (void); +static void __exit fusion_exit (void); /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /* @@ -260,6 +264,30 @@ #endif +/**************************************************************************** + * Supported hardware + */ + +static struct pci_device_id mptbase_pci_table[] = { + { PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FC909, + PCI_ANY_ID, PCI_ANY_ID }, + { PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FC929, + PCI_ANY_ID, PCI_ANY_ID }, + { PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FC919, + PCI_ANY_ID, PCI_ANY_ID }, + { PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FC929X, + PCI_ANY_ID, PCI_ANY_ID }, + { PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FC919X, + PCI_ANY_ID, PCI_ANY_ID }, + { PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_53C1030, + PCI_ANY_ID, PCI_ANY_ID }, + { PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_1030_53C1035, + PCI_ANY_ID, PCI_ANY_ID }, + {0} /* Terminating entry */ +}; +MODULE_DEVICE_TABLE(pci, mptbase_pci_table); + + /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /* 20000207 -sralston * GRRRRR... IOSpace (port i/o) register access (for the 909) is back! @@ -518,7 +546,7 @@ * @mf: Pointer to original MPT request frame * @reply: Pointer to MPT reply frame (NULL if TurboReply) * - * Returns 1 indicating original alloc'd request frame ptr + * Returns 1 indicating original alloc'd request frame ptr * should be freed, or 0 if it shouldn't. */ static int @@ -805,6 +833,34 @@ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /** + * mpt_device_driver_register - Register device driver hooks + */ +int +mpt_device_driver_register(struct mpt_pci_driver * dd_cbfunc, int cb_idx) +{ + if (cb_idx < 1 || cb_idx >= MPT_MAX_PROTOCOL_DRIVERS) + return -1; + + MptDeviceDriverHandlers[cb_idx] = dd_cbfunc; + return 0; +} + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/** + * mpt_device_driver_deregister - DeRegister device driver hooks + */ +void +mpt_device_driver_deregister(int cb_idx) +{ + if (cb_idx < 1 || cb_idx >= MPT_MAX_PROTOCOL_DRIVERS) + return; + + MptDeviceDriverHandlers[cb_idx] = NULL; +} + + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/** * mpt_get_msg_frame - Obtain a MPT request frame from the pool (of 1024) * allocated per MPT adapter. * @handle: Handle of registered MPT protocol driver @@ -1142,88 +1198,6 @@ return next; } -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ -/* - * mpt_pci_scan - Scan PCI devices for MPT adapters. - * - * Returns count of MPT adapters found, keying off of PCI vendor and - * device_id's. - */ -static int __init -mpt_pci_scan(void) -{ - struct pci_dev *pdev = NULL; - struct pci_dev *pdev2; - int found = 0; - int count = 0; - int r; - - dprintk((KERN_INFO MYNAM ": Checking for MPT adapters...\n")); - - /* - * NOTE: The 929, 929X, 1030 and 1035 will appear as 2 separate PCI devices, - * one for each channel. - */ - while ((pdev = pci_find_device(PCI_VENDOR_ID_LSI_LOGIC, PCI_ANY_ID, pdev)) != NULL) { - pdev2 = NULL; - if ((pdev->device != MPI_MANUFACTPAGE_DEVICEID_FC909) && - (pdev->device != MPI_MANUFACTPAGE_DEVICEID_FC929) && - (pdev->device != MPI_MANUFACTPAGE_DEVICEID_FC919) && - (pdev->device != MPI_MANUFACTPAGE_DEVICEID_FC929X) && - (pdev->device != MPI_MANUFACTPAGE_DEVICEID_FC919X) && - (pdev->device != MPI_MANUFACTPAGE_DEVID_53C1030) && - (pdev->device != MPI_MANUFACTPAGE_DEVID_1030_53C1035) && - 1) { - dprintk((KERN_INFO MYNAM ": Skipping LSI device=%04xh\n", pdev->device)); - continue; - } - - /* GRRRRR - * dual function devices (929, 929X, 1030, 1035) may be presented in Func 1,0 order, - * but we'd really really rather have them in Func 0,1 order. - * Do some kind of look ahead here... - */ - if (pdev->devfn & 1) { - pdev2 = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev); - if (pdev2 && (pdev2->vendor == 0x1000) && - (PCI_SLOT(pdev2->devfn) == PCI_SLOT(pdev->devfn)) && - (pdev2->device == pdev->device) && - (pdev2->bus->number == pdev->bus->number) && - !(pdev2->devfn & 1)) { - dprintk((KERN_INFO MYNAM ": MPT adapter found: PCI bus/dfn=%02x/%02xh, class=%08x, id=%xh\n", - pdev2->bus->number, pdev2->devfn, pdev2->class, pdev2->device)); - found++; - if ((r = mpt_adapter_install(pdev2)) == 0) - count++; - } else { - pdev2 = NULL; - } - } - - dprintk((KERN_INFO MYNAM ": MPT adapter found: PCI bus/dfn=%02x/%02xh, class=%08x, id=%xh\n", - pdev->bus->number, pdev->devfn, pdev->class, pdev->device)); - found++; - if ((r = mpt_adapter_install(pdev)) == 0) - count++; - - if (pdev2) - pdev = pdev2; - } - - printk(KERN_INFO MYNAM ": %d MPT adapter%s found, %d installed.\n", - found, (found==1) ? "" : "s", count); - - if (!found || !count) { - fusion_exit(); - return -ENODEV; - } - -#ifdef CONFIG_PROC_FS - (void) procmpt_create(); -#endif - - return count; -} /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /** @@ -1253,7 +1227,7 @@ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /* - * mpt_adapter_install - Install a PCI intelligent MPT adapter. + * mptbase_probe - Install a PCI intelligent MPT adapter. * @pdev: Pointer to pci_dev structure * * This routine performs all the steps necessary to bring the IOC of @@ -1268,8 +1242,8 @@ * * TODO: Add support for polled controllers */ -static int __init -mpt_adapter_install(struct pci_dev *pdev) +static int __devinit +mptbase_probe(struct pci_dev *pdev, const struct pci_device_id *id) { MPT_ADAPTER *ioc; u8 *mem; @@ -1292,6 +1266,13 @@ return r; } + if (!pci_set_consistent_dma_mask(pdev, mask)) + dprintk((KERN_INFO MYNAM + ": Using 64 bit consistent mask\n")); + else + dprintk((KERN_INFO MYNAM + ": Not using 64 bit consistent mask\n")); + ioc = kmalloc(sizeof(MPT_ADAPTER), GFP_ATOMIC); if (ioc == NULL) { printk(KERN_ERR MYNAM ": ERROR - Insufficient memory to add adapter!\n"); @@ -1500,6 +1481,7 @@ ioc->pci_irq = pdev->irq; pci_set_master(pdev); /* ?? */ + pci_set_drvdata(pdev, ioc); #ifndef __sparc__ dprintk((KERN_INFO MYNAM ": %s installed at interrupt %d\n", ioc->name, pdev->irq)); @@ -1520,11 +1502,209 @@ ioc->name, r); } - return r; + if(r != 0 ) + return r; + + + /* call per device driver probe entry point */ + for(ii=0; iiprobe) { + MptDeviceDriverHandlers[ii]->probe(pdev,id); + } + } + + return 0; +} + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/* + * mptbase_remove - Remove a PCI intelligent MPT adapter. + * @pdev: Pointer to pci_dev structure + * + */ + +static void __devexit +mptbase_remove(struct pci_dev *pdev) +{ + MPT_ADAPTER *ioc = pci_get_drvdata(pdev); + int ii; + + /* call per device driver remove entry point */ + for(ii=0; iiremove) { + MptDeviceDriverHandlers[ii]->remove(pdev); + } + } + + /* Disable interrupts! */ + CHIPREG_WRITE32(&ioc->chip->IntMask, 0xFFFFFFFF); + + ioc->active = 0; + + /* Clear any lingering interrupt */ + CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); + + CHIPREG_READ32(&ioc->chip->IntStatus); + + Q_DEL_ITEM(ioc); + mpt_adapter_dispose(ioc); + + mptscsih_sync_irq(pdev->irq); + pci_set_drvdata(pdev, NULL); } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /* + * mptbase_shutdown - + * + */ +static void +mptbase_shutdown(struct device * dev) +{ + int ii; + + /* call per device driver shutdown entry point */ + for(ii=0; iishutdown) { + MptDeviceDriverHandlers[ii]->shutdown(dev); + } + } + +} + + +/************************************************************************** + * Power Management + */ +#ifdef CONFIG_PM +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/* + * mptbase_suspend - Fusion MPT base driver suspend routine. + * + * + */ +static int +mptbase_suspend(struct pci_dev *pdev, u32 state) +{ + u32 device_state; + MPT_ADAPTER *ioc = pci_get_drvdata(pdev); + int ii; + + switch(state) + { + case 1: /* S1 */ + device_state=1; /* D1 */; + break; + case 3: /* S3 */ + case 4: /* S4 */ + device_state=3; /* D3 */; + break; + default: + return -EAGAIN /*FIXME*/; + break; + } + + printk(MYIOC_s_INFO_FMT + "pci-suspend: pdev=0x%p, slot=%s, Entering operating state [D%d]\n", + ioc->name, pdev, pci_name(pdev), device_state); + + /* call per device driver suspend entry point */ + for(ii=0; iisuspend) { + MptDeviceDriverHandlers[ii]->suspend(pdev, state); + } + } + + pci_save_state(pdev, ioc->PciState); + + /* put ioc into READY_STATE */ + if(SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, CAN_SLEEP)) { + printk(MYIOC_s_ERR_FMT + "pci-suspend: IOC msg unit reset failed!\n", ioc->name); + } + + /* disable interrupts */ + CHIPREG_WRITE32(&ioc->chip->IntMask, 0xFFFFFFFF); + ioc->active = 0; + + /* Clear any lingering interrupt */ + CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); + + pci_disable_device(pdev); + pci_set_power_state(pdev, device_state); + + return 0; +} + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/* + * mptbase_resume - Fusion MPT base driver resume routine. + * + * + */ +static int +mptbase_resume(struct pci_dev *pdev) +{ + MPT_ADAPTER *ioc = pci_get_drvdata(pdev); + u32 device_state = pdev->current_state; + int recovery_state; + int ii; + + printk(MYIOC_s_INFO_FMT + "pci-resume: pdev=0x%p, slot=%s, Previous operating state [D%d]\n", + ioc->name, pdev, pci_name(pdev), device_state); + + pci_set_power_state(pdev, 0); + pci_restore_state(pdev, ioc->PciState); + pci_enable_device(pdev); + + /* enable interrupts */ + CHIPREG_WRITE32(&ioc->chip->IntMask, ~(MPI_HIM_RIM)); + ioc->active = 1; + + /* F/W not running */ + if(!CHIPREG_READ32(&ioc->chip->Doorbell)) { + /* enable domain validation flags */ + for (ii=0; ii < MPT_MAX_SCSI_DEVICES; ii++) { + ioc->spi_data.dvStatus[ii] |= MPT_SCSICFG_NEED_DV; + } + } + + printk(MYIOC_s_INFO_FMT + "pci-resume: ioc-state=0x%x,doorbell=0x%x\n", + ioc->name, + (mpt_GetIocState(ioc, 1) >> MPI_IOC_STATE_SHIFT), + CHIPREG_READ32(&ioc->chip->Doorbell)); + + /* bring ioc to operational state */ + if ((recovery_state = mpt_do_ioc_recovery(ioc, + MPT_HOSTEVENT_IOC_RECOVER, CAN_SLEEP)) != 0) { + printk(MYIOC_s_INFO_FMT + "pci-resume: Cannot recover, error:[%x]\n", + ioc->name, recovery_state); + } else { + printk(MYIOC_s_INFO_FMT + "pci-resume: success\n", ioc->name); + } + + /* call per device driver resume entry point */ + for(ii=0; iiresume) { + MptDeviceDriverHandlers[ii]->resume(pdev); + } + } + + return 0; +} +#endif + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/* * mpt_do_ioc_recovery - Initialize or recover MPT adapter. * @ioc: Pointer to MPT adapter structure * @reason: Event word / reason @@ -5851,6 +6031,8 @@ EXPORT_SYMBOL(mpt_event_deregister); EXPORT_SYMBOL(mpt_reset_register); EXPORT_SYMBOL(mpt_reset_deregister); +EXPORT_SYMBOL(mpt_device_driver_register); +EXPORT_SYMBOL(mpt_device_driver_deregister); EXPORT_SYMBOL(mpt_get_msg_frame); EXPORT_SYMBOL(mpt_put_msg_frame); EXPORT_SYMBOL(mpt_free_msg_frame); @@ -5877,16 +6059,32 @@ EXPORT_SYMBOL(mpt_ASCQ_TableSz); EXPORT_SYMBOL(mpt_ScsiOpcodesPtr); + +static struct pci_driver mptbase_driver = { + .name = "mptbase", + .id_table = mptbase_pci_table, + .probe = mptbase_probe, + .remove = __devexit_p(mptbase_remove), + .driver = { + .shutdown = mptbase_shutdown, + }, +#ifdef CONFIG_PM + .suspend = mptbase_suspend, + .resume = mptbase_resume, +#endif +}; + /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /* * fusion_init - Fusion MPT base driver initialization routine. * * Returns 0 for success, non-zero for failure. */ -int __init +static int __init fusion_init(void) { int i; + int r; if (FusionInitCalled++) { dprintk((KERN_INFO MYNAM ": INFO - Driver late-init entry point called\n")); @@ -5920,10 +6118,15 @@ /* FIXME! */ } - if ((i = mpt_pci_scan()) < 0) - return i; + r = pci_module_init(&mptbase_driver); + if(r) + return(r); - return 0; +#ifdef CONFIG_PROC_FS + (void) procmpt_create(); +#endif + + return r; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ @@ -5933,13 +6136,12 @@ * This routine frees all resources associated with each MPT adapter * and removes all %MPT_PROCFS_MPTBASEDIR entries. */ -static void +static void __exit fusion_exit(void) { - MPT_ADAPTER *this; - struct pci_dev *pdev = NULL; dprintk((KERN_INFO MYNAM ": fusion_exit() called!\n")); + pci_unregister_driver(&mptbase_driver); /* Whups? 20010120 -sralston * Moved this *above* removal of all MptAdapters! @@ -5948,30 +6150,9 @@ (void) procmpt_destroy(); #endif - while (! Q_IS_EMPTY(&MptAdapters)) { - this = MptAdapters.head; - - /* Disable interrupts! */ - CHIPREG_WRITE32(&this->chip->IntMask, 0xFFFFFFFF); - - this->active = 0; - - pdev = (struct pci_dev *)this->pcidev; - mptscsih_sync_irq(pdev->irq); - - /* Clear any lingering interrupt */ - CHIPREG_WRITE32(&this->chip->IntStatus, 0); - - CHIPREG_READ32(&this->chip->IntStatus); - - Q_DEL_ITEM(this); - mpt_adapter_dispose(this); - } - mpt_reset_deregister(mpt_base_index); } -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ module_init(fusion_init); module_exit(fusion_exit); diff -Nru a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h --- a/drivers/message/fusion/mptbase.h Wed Feb 4 16:51:34 2004 +++ b/drivers/message/fusion/mptbase.h Wed Feb 4 16:51:34 2004 @@ -80,8 +80,8 @@ #define COPYRIGHT "Copyright (c) 1999-2003 " MODULEAUTHOR #endif -#define MPT_LINUX_VERSION_COMMON "2.05.00.06" -#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-2.05.00.06" +#define MPT_LINUX_VERSION_COMMON "3.00.02" +#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.00.02" #define WHAT_MAGIC_STRING "@" "(" "#" ")" #define show_mptmod_ver(s,ver) \ @@ -180,6 +180,16 @@ MPTUNKNOWN_DRIVER } MPT_DRIVER_CLASS; +struct mpt_pci_driver{ + int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); + void (*remove) (struct pci_dev *dev); + void (*shutdown) (struct device * dev); +#ifdef CONFIG_PM + int (*suspend) (struct pci_dev *dev, u32 state); + int (*resume) (struct pci_dev *dev); +#endif +}; + /* * MPT adapter / port / bus / device info structures... */ @@ -629,6 +639,9 @@ FCPortPage0_t fc_port_page0[2]; LANPage0_t lan_cnfg_page0; LANPage1_t lan_cnfg_page1; +#ifdef CONFIG_PM + u32 PciState[64]; /* save PCI state to this area */ +#endif u8 FirstWhoInit; u8 upload_fw; /* If set, do a fw upload */ u8 reload_fw; /* Force a FW Reload on next reset */ @@ -1001,6 +1014,8 @@ extern void mpt_event_deregister(int cb_idx); extern int mpt_reset_register(int cb_idx, MPT_RESETHANDLER reset_func); extern void mpt_reset_deregister(int cb_idx); +extern int mpt_device_driver_register(struct mpt_pci_driver * dd_cbfunc, int cb_idx); +extern void mpt_device_driver_deregister(int cb_idx); extern int mpt_register_ascqops_strings(void *ascqTable, int ascqtbl_sz, const char **opsTable); extern void mpt_deregister_ascqops_strings(void); extern MPT_FRAME_HDR *mpt_get_msg_frame(int handle, int iocid); diff -Nru a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c --- a/drivers/message/fusion/mptscsih.c Wed Feb 4 16:51:35 2004 +++ b/drivers/message/fusion/mptscsih.c Wed Feb 4 16:51:35 2004 @@ -75,7 +75,8 @@ #include /* needed for in_interrupt() proto */ #include /* notifier code */ #include "../../scsi/scsi.h" -#include "../../scsi/hosts.h" +#include + #include "mptbase.h" #include "mptscsih.h" @@ -164,8 +165,8 @@ static MPT_FRAME_HDR *mptscsih_search_pendingQ(MPT_SCSI_HOST *hd, int scpnt_idx); static void post_pendingQ_commands(MPT_SCSI_HOST *hd); -static int mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, int sleepFlag); -static int mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, int sleepFlag); +static int mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, ulong timeout, int sleepFlag); +static int mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, ulong timeout, int sleepFlag); static int mptscsih_ioc_reset(MPT_ADAPTER *ioc, int post_reset); static int mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply); @@ -184,7 +185,7 @@ static struct mpt_work_struct mptscsih_rstTask; -#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION +#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION static int mptscsih_do_raid(MPT_SCSI_HOST *hd, u8 action, INTERNAL_CMD *io); static void mptscsih_domainValidation(void *hd); static int mptscsih_is_phys_disk(MPT_ADAPTER *ioc, int id); @@ -194,14 +195,19 @@ static void mptscsih_fillbuf(char *buffer, int size, int index, int width); #endif static int mptscsih_setup(char *str); -static int mptscsih_halt(struct notifier_block *nb, ulong event, void *buf); -/* - * Reboot Notification - */ -static struct notifier_block mptscsih_notifier = { - mptscsih_halt, NULL, 0 -}; +/* module entry point */ +static int __init mptscsih_init (void); +static void __exit mptscsih_exit (void); + +static int __devinit mptscsih_probe (struct pci_dev *, const struct pci_device_id *); +static void __devexit mptscsih_remove(struct pci_dev *); +static void mptscsih_shutdown(struct device *); +#ifdef CONFIG_PM +static int mptscsih_suspend(struct pci_dev *pdev, u32 state); +static int mptscsih_resume(struct pci_dev *pdev); +#endif + /* * Private data... @@ -216,7 +222,7 @@ #define SNS_LEN(scp) sizeof((scp)->sense_buffer) -#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION +#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION /* * Domain Validation task structure */ @@ -238,6 +244,32 @@ driver_setup = MPTSCSIH_DRIVER_SETUP; /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ + +/* see mptscsih.h */ + +static struct scsi_host_template driver_template = { + .proc_name = "mptscsih", + .proc_info = x_scsi_proc_info, + .name = "MPT SCSI Host", + .info = x_scsi_info, + .queuecommand = x_scsi_queuecommand, + .slave_alloc = x_scsi_slave_alloc, + .slave_configure = x_scsi_slave_configure, + .slave_destroy = x_scsi_slave_destroy, + .eh_abort_handler = x_scsi_abort, + .eh_device_reset_handler = x_scsi_dev_reset, + .eh_bus_reset_handler = x_scsi_bus_reset, + .eh_host_reset_handler = x_scsi_host_reset, + .bios_param = x_scsi_bios_param, + .can_queue = MPT_SCSI_CAN_QUEUE, + .this_id = -1, + .sg_tablesize = MPT_SCSI_SG_DEPTH, + .max_sectors = MPT_SCSI_MAX_SECTORS, + .cmd_per_lun = MPT_SCSI_CMD_PER_LUN, + .use_clustering = ENABLE_CLUSTERING, +}; + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /* * Private inline routines... */ @@ -264,12 +296,14 @@ mptscsih_io_direction(Scsi_Cmnd *cmd) { switch (cmd->cmnd[0]) { - case WRITE_6: - case WRITE_10: + case WRITE_6: + case WRITE_10: + case WRITE_16: return SCSI_DATA_WRITE; break; - case READ_6: - case READ_10: + case READ_6: + case READ_10: + case READ_16: return SCSI_DATA_READ; break; } @@ -280,6 +314,7 @@ switch (cmd->cmnd[0]) { /* _DATA_OUT commands */ case WRITE_6: case WRITE_10: case WRITE_12: + case WRITE_16: case WRITE_LONG: case WRITE_SAME: case WRITE_BUFFER: case WRITE_VERIFY: case WRITE_VERIFY_12: case COMPARE: case COPY: case COPY_VERIFY: @@ -826,6 +861,13 @@ sc->resid = sc->request_bufflen - xfer_cnt; dprintk((KERN_NOTICE " SET sc->resid=%02xh\n", sc->resid)); + if(sc->underflow > xfer_cnt) { + printk(MYIOC_s_INFO_FMT + "SCSI data underrun: underflow=%02x, xfercnt=%02x\n", + ioc->name, sc->underflow, xfer_cnt); + sc->result = DID_SOFT_ERROR << 16; + } + /* Report Queue Full */ if (sc->result == MPI_SCSI_STATUS_TASK_SET_FULL) @@ -1235,7 +1277,6 @@ for(ii=0;iiioc->req_depth;ii++) hd->ReqToChain[ii] = MPT_HOST_NO_CHAIN; - /* ChainToChain size must equal the total number * of chain buffers to be allocated. * index = chain_idx @@ -1277,7 +1318,6 @@ mem = (u8 *) hd->ChainToChain; } memset(mem, 0xFF, sz); - sz = num_chain * hd->ioc->req_sz; if (hd->ChainBuffer == NULL) { /* Allocate free chain buffer pool @@ -1353,28 +1393,25 @@ } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ -static int BeenHereDoneThat = 0; static char *info_kbuf = NULL; -/* SCSI host fops start here... */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ -/** - * mptscsih_detect - Register MPT adapter(s) as SCSI host(s) with - * linux scsi mid-layer. - * @tpnt: Pointer to Scsi_Host_Template structure +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/* + * mptscsih_probe - Installs scsi devices per bus. + * @pdev: Pointer to pci_dev structure * - * (linux Scsi_Host_Template.detect routine) + * Returns 0 for success, non-zero for failure. * - * Returns number of SCSI host adapters that were successfully - * registered with the linux scsi mid-layer via the scsi_register() - * API call. */ -int -mptscsih_detect(Scsi_Host_Template *tpnt) + +static int __devinit +mptscsih_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct Scsi_Host *sh = NULL; MPT_SCSI_HOST *hd = NULL; - MPT_ADAPTER *this; + MPT_ADAPTER *ioc = pci_get_drvdata(pdev); + int portnum; MPT_DONE_Q *freedoneQ; unsigned long flags; int sz, ii; @@ -1382,325 +1419,312 @@ int scale; u8 *mem; - if (! BeenHereDoneThat++) { - show_mptmod_ver(my_NAME, my_VERSION); - - ScsiDoneCtx = mpt_register(mptscsih_io_done, MPTSCSIH_DRIVER); - ScsiTaskCtx = mpt_register(mptscsih_taskmgmt_complete, MPTSCSIH_DRIVER); - ScsiScanDvCtx = mpt_register(mptscsih_scandv_complete, MPTSCSIH_DRIVER); + for (portnum=0; portnum < ioc->facts.NumberOfPorts; portnum++) { - if (mpt_event_register(ScsiDoneCtx, mptscsih_event_process) == 0) { - dprintk((KERN_INFO MYNAM ": Registered for IOC event notifications\n")); - } else { - /* FIXME! */ + /* 20010215 -sralston + * Added sanity check on SCSI Initiator-mode enabled + * for this MPT adapter. + */ + if (!(ioc->pfacts[portnum].ProtocolFlags & + MPI_PORTFACTS_PROTOCOL_INITIATOR)) { + printk(MYIOC_s_WARN_FMT + "Skipping because SCSI Initiator mode is NOT enabled!\n", + ioc->name); + continue; } - if (mpt_reset_register(ScsiDoneCtx, mptscsih_ioc_reset) == 0) { - dprintk((KERN_INFO MYNAM ": Registered for IOC reset notifications\n")); - } else { - /* FIXME! */ + /* 20010202 -sralston + * Added sanity check on readiness of the MPT adapter. + */ + if (ioc->last_state != MPI_IOC_STATE_OPERATIONAL) { + printk(MYIOC_s_WARN_FMT + "Skipping because it's not operational!\n", + ioc->name); + continue; } - } - dprintk((KERN_INFO MYNAM ": mpt_scsih_detect()\n")); -#ifdef MODULE - /* Evaluate the command line arguments, if any */ - if (mptscsih) - mptscsih_setup(mptscsih); -#endif + sh = scsi_host_alloc(&driver_template, sizeof(MPT_SCSI_HOST)); + if (sh != NULL) { + spin_lock_irqsave(&ioc->FreeQlock, flags); - this = mpt_adapter_find_first(); - while (this != NULL) { - int portnum; - for (portnum=0; portnum < this->facts.NumberOfPorts; portnum++) { - - /* 20010215 -sralston - * Added sanity check on SCSI Initiator-mode enabled - * for this MPT adapter. - */ - if (!(this->pfacts[portnum].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_INITIATOR)) { - printk(MYIOC_s_WARN_FMT "Skipping because SCSI Initiator mode is NOT enabled!\n", - this->name); - continue; - } + /* Attach the SCSI Host to the IOC structure + */ + ioc->sh = sh; - /* 20010202 -sralston - * Added sanity check on readiness of the MPT adapter. + sh->io_port = 0; + sh->n_io_port = 0; + sh->irq = 0; + + /* set 16 byte cdb's */ + sh->max_cmd_len = 16; + + /* Yikes! This is important! + * Otherwise, by default, linux + * only scans target IDs 0-7! + * pfactsN->MaxDevices unreliable + * (not supported in early + * versions of the FW). + * max_id = 1 + actual max id, + * max_lun = 1 + actual last lun, + * see hosts.h :o( */ - if (this->last_state != MPI_IOC_STATE_OPERATIONAL) { - printk(MYIOC_s_WARN_FMT "Skipping because it's not operational!\n", - this->name); - continue; + if ((int)ioc->chip_type > (int)FC929) { + sh->max_id = MPT_MAX_SCSI_DEVICES; + } else { + /* For FC, increase the queue depth + * from MPT_SCSI_CAN_QUEUE (31) + * to MPT_FC_CAN_QUEUE (63). + */ + sh->can_queue = MPT_FC_CAN_QUEUE; + sh->max_id = + MPT_MAX_FC_DEVICES<256 ? MPT_MAX_FC_DEVICES : 255; } - tpnt->proc_info = mptscsih_proc_info; - sh = scsi_register(tpnt, sizeof(MPT_SCSI_HOST)); - if (sh != NULL) { - spin_lock_irqsave(&this->FreeQlock, flags); - sh->io_port = 0; - sh->n_io_port = 0; - sh->irq = 0; - - /* Yikes! This is important! - * Otherwise, by default, linux - * only scans target IDs 0-7! - * pfactsN->MaxDevices unreliable - * (not supported in early - * versions of the FW). - * max_id = 1 + actual max id, - * max_lun = 1 + actual last lun, - * see hosts.h :o( - */ - if ((int)this->chip_type > (int)FC929) - sh->max_id = MPT_MAX_SCSI_DEVICES; - else { - /* For FC, increase the queue depth - * from MPT_SCSI_CAN_QUEUE (31) - * to MPT_FC_CAN_QUEUE (63). - */ - sh->can_queue = MPT_FC_CAN_QUEUE; - sh->max_id = MPT_MAX_FC_DEVICES<256 ? MPT_MAX_FC_DEVICES : 255; - } - sh->max_lun = MPT_LAST_LUN + 1; + sh->max_lun = MPT_LAST_LUN + 1; + sh->max_sectors = MPT_SCSI_MAX_SECTORS; + sh->this_id = ioc->pfacts[portnum].PortSCSIID; - sh->max_sectors = MPT_SCSI_MAX_SECTORS; - sh->this_id = this->pfacts[portnum].PortSCSIID; + /* Required entry. + */ + sh->unique_id = ioc->id; - /* Required entry. - */ - sh->unique_id = this->id; + /* Verify that we won't exceed the maximum + * number of chain buffers + * We can optimize: ZZ = req_sz/sizeof(SGE) + * For 32bit SGE's: + * numSGE = 1 + (ZZ-1)*(maxChain -1) + ZZ + * + (req_sz - 64)/sizeof(SGE) + * A slightly different algorithm is required for + * 64bit SGEs. + */ + scale = ioc->req_sz/(sizeof(dma_addr_t) + sizeof(u32)); + if (sizeof(dma_addr_t) == sizeof(u64)) { + numSGE = (scale - 1) * + (ioc->facts.MaxChainDepth-1) + scale + + (ioc->req_sz - 60) / (sizeof(dma_addr_t) + + sizeof(u32)); + } else { + numSGE = 1 + (scale - 1) * + (ioc->facts.MaxChainDepth-1) + scale + + (ioc->req_sz - 64) / (sizeof(dma_addr_t) + + sizeof(u32)); + } - /* Verify that we won't exceed the maximum - * number of chain buffers - * We can optimize: ZZ = req_sz/sizeof(SGE) - * For 32bit SGE's: - * numSGE = 1 + (ZZ-1)*(maxChain -1) + ZZ - * + (req_sz - 64)/sizeof(SGE) - * A slightly different algorithm is required for - * 64bit SGEs. - */ - scale = this->req_sz/(sizeof(dma_addr_t) + sizeof(u32)); - if (sizeof(dma_addr_t) == sizeof(u64)) { - numSGE = (scale - 1) * (this->facts.MaxChainDepth-1) + scale + - (this->req_sz - 60) / (sizeof(dma_addr_t) + sizeof(u32)); - } else { - numSGE = 1 + (scale - 1) * (this->facts.MaxChainDepth-1) + scale + - (this->req_sz - 64) / (sizeof(dma_addr_t) + sizeof(u32)); - } + if (numSGE < sh->sg_tablesize) { + /* Reset this value */ + dprintk((MYIOC_s_INFO_FMT + "Resetting sg_tablesize to %d from %d\n", + ioc->name, numSGE, sh->sg_tablesize)); + sh->sg_tablesize = numSGE; + } - if (numSGE < sh->sg_tablesize) { - /* Reset this value */ - dprintk((MYIOC_s_INFO_FMT - "Resetting sg_tablesize to %d from %d\n", - this->name, numSGE, sh->sg_tablesize)); - sh->sg_tablesize = numSGE; - } + /* Set the pci device pointer in Scsi_Host structure. + */ + scsi_set_device(sh, &ioc->pcidev->dev); - /* Set the pci device pointer in Scsi_Host structure. - */ - scsi_set_device(sh, &this->pcidev->dev); + spin_unlock_irqrestore(&ioc->FreeQlock, flags); - spin_unlock_irqrestore(&this->FreeQlock, flags); + hd = (MPT_SCSI_HOST *) sh->hostdata; + hd->ioc = ioc; + hd->max_sge = sh->sg_tablesize; - hd = (MPT_SCSI_HOST *) sh->hostdata; - hd->ioc = this; - hd->max_sge = sh->sg_tablesize; + if ((int)ioc->chip_type > (int)FC929) + hd->is_spi = 1; - if ((int)this->chip_type > (int)FC929) - hd->is_spi = 1; + if (DmpService && (ioc->chip_type == FC919 || + ioc->chip_type == FC929)) { + hd->is_multipath = 1; + } + hd->port = 0; /* FIXME! */ - if (DmpService && - (this->chip_type == FC919 || this->chip_type == FC929)) - hd->is_multipath = 1; + /* SCSI needs Scsi_Cmnd lookup table! + * (with size equal to req_depth*PtrSz!) + */ + sz = hd->ioc->req_depth * sizeof(void *); + mem = kmalloc(sz, GFP_ATOMIC); + if (mem == NULL) + goto mptscsih_probe_failed; - hd->port = 0; /* FIXME! */ + memset(mem, 0, sz); + hd->ScsiLookup = (struct scsi_cmnd **) mem; - /* SCSI needs Scsi_Cmnd lookup table! - * (with size equal to req_depth*PtrSz!) - */ - sz = hd->ioc->req_depth * sizeof(void *); - mem = kmalloc(sz, GFP_ATOMIC); - if (mem == NULL) - goto done; + dprintk((MYIOC_s_INFO_FMT "ScsiLookup @ %p, sz=%d\n", + ioc->name, hd->ScsiLookup, sz)); - memset(mem, 0, sz); - hd->ScsiLookup = (struct scsi_cmnd **) mem; + if (mptscsih_initChainBuffers(hd, 1) < 0) + goto mptscsih_probe_failed; - dprintk((MYIOC_s_INFO_FMT "ScsiLookup @ %p, sz=%d\n", - this->name, hd->ScsiLookup, sz)); + /* Allocate memory for free and doneQ's + */ + sz = sh->can_queue * sizeof(MPT_DONE_Q); + mem = kmalloc(sz, GFP_ATOMIC); + if (mem == NULL) + goto mptscsih_probe_failed; - if (mptscsih_initChainBuffers(hd, 1) < 0) - goto done; + memset(mem, 0xFF, sz); + hd->memQ = mem; - /* Allocate memory for free and doneQ's - */ - sz = sh->can_queue * sizeof(MPT_DONE_Q); - mem = kmalloc(sz, GFP_ATOMIC); - if (mem == NULL) - goto done; + /* Initialize the free, done and pending Qs. + */ + Q_INIT(&hd->freeQ, MPT_DONE_Q); + Q_INIT(&hd->doneQ, MPT_DONE_Q); + Q_INIT(&hd->pendingQ, MPT_DONE_Q); + spin_lock_init(&hd->freedoneQlock); + + mem = hd->memQ; + for (ii=0; ii < sh->can_queue; ii++) { + freedoneQ = (MPT_DONE_Q *) mem; + Q_ADD_TAIL(&hd->freeQ.head, freedoneQ, MPT_DONE_Q); + mem += sizeof(MPT_DONE_Q); + } - memset(mem, 0xFF, sz); - hd->memQ = mem; + /* Initialize this Scsi_Host + * internal task Q. + */ + Q_INIT(&hd->taskQ, MPT_FRAME_HDR); + hd->taskQcnt = 0; - /* Initialize the free, done and pending Qs. - */ - Q_INIT(&hd->freeQ, MPT_DONE_Q); - Q_INIT(&hd->doneQ, MPT_DONE_Q); - Q_INIT(&hd->pendingQ, MPT_DONE_Q); - spin_lock_init(&hd->freedoneQlock); - - mem = hd->memQ; - for (ii=0; ii < sh->can_queue; ii++) { - freedoneQ = (MPT_DONE_Q *) mem; - Q_ADD_TAIL(&hd->freeQ.head, freedoneQ, MPT_DONE_Q); - mem += sizeof(MPT_DONE_Q); - } + /* Allocate memory for the device structures. + * A non-Null pointer at an offset + * indicates a device exists. + * max_id = 1 + maximum id (hosts.h) + */ + sz = sh->max_id * sizeof(void *); + mem = kmalloc(sz, GFP_ATOMIC); + if (mem == NULL) + goto mptscsih_probe_failed; - /* Initialize this Scsi_Host - * internal task Q. - */ - Q_INIT(&hd->taskQ, MPT_FRAME_HDR); - hd->taskQcnt = 0; + memset(mem, 0, sz); + hd->Targets = (VirtDevice **) mem; - /* Allocate memory for the device structures. - * A non-Null pointer at an offset - * indicates a device exists. - * max_id = 1 + maximum id (hosts.h) - */ - sz = sh->max_id * sizeof(void *); - mem = kmalloc(sz, GFP_ATOMIC); - if (mem == NULL) - goto done; + dprintk((KERN_INFO + " Targets @ %p, sz=%d\n", hd->Targets, sz)); - memset(mem, 0, sz); - hd->Targets = (VirtDevice **) mem; - dprintk((KERN_INFO " Targets @ %p, sz=%d\n", hd->Targets, sz)); + /* Clear the TM flags + */ + hd->tmPending = 0; + hd->tmState = TM_STATE_NONE; + hd->resetPending = 0; + hd->abortSCpnt = NULL; + hd->tmPtr = NULL; + hd->numTMrequests = 0; + /* Clear the pointer used to store + * single-threaded commands, i.e., those + * issued during a bus scan, dv and + * configuration pages. + */ + hd->cmdPtr = NULL; - /* Clear the TM flags - */ - hd->tmPending = 0; - hd->tmState = TM_STATE_NONE; - hd->resetPending = 0; - hd->abortSCpnt = NULL; - hd->tmPtr = NULL; - hd->numTMrequests = 0; + /* Initialize this SCSI Hosts' timers + * To use, set the timer expires field + * and add_timer + */ + init_timer(&hd->timer); + hd->timer.data = (unsigned long) hd; + hd->timer.function = mptscsih_timer_expired; + + init_timer(&hd->TMtimer); + hd->TMtimer.data = (unsigned long) hd; + hd->TMtimer.function = mptscsih_taskmgmt_timeout; + hd->qtag_tick = jiffies; - /* Clear the pointer used to store - * single-threaded commands, i.e., those - * issued during a bus scan, dv and - * configuration pages. - */ - hd->cmdPtr = NULL; + /* Moved Earlier Pam D */ + /* ioc->sh = sh; */ - /* Attach the SCSI Host to the IOC structure + if (hd->is_spi) { + /* Update with the driver setup + * values. */ - this->sh = sh; + if (hd->ioc->spi_data.maxBusWidth > + driver_setup.max_width) { + hd->ioc->spi_data.maxBusWidth = + driver_setup.max_width; + } - /* Initialize this SCSI Hosts' timers - * To use, set the timer expires field - * and add_timer - */ - init_timer(&hd->timer); - hd->timer.data = (unsigned long) hd; - hd->timer.function = mptscsih_timer_expired; - - init_timer(&hd->TMtimer); - hd->TMtimer.data = (unsigned long) hd; - hd->TMtimer.function = mptscsih_taskmgmt_timeout; - hd->qtag_tick = jiffies; - - /* Moved Earlier Pam D */ - /* this->sh = sh; */ - - if (hd->is_spi) { - /* Update with the driver setup - * values. - */ - if (hd->ioc->spi_data.maxBusWidth > driver_setup.max_width) - hd->ioc->spi_data.maxBusWidth = driver_setup.max_width; - if (hd->ioc->spi_data.minSyncFactor < driver_setup.min_sync_fac) - hd->ioc->spi_data.minSyncFactor = driver_setup.min_sync_fac; + if (hd->ioc->spi_data.minSyncFactor < + driver_setup.min_sync_fac) { + hd->ioc->spi_data.minSyncFactor = + driver_setup.min_sync_fac; + } - if (hd->ioc->spi_data.minSyncFactor == MPT_ASYNC) - hd->ioc->spi_data.maxSyncOffset = 0; + if (hd->ioc->spi_data.minSyncFactor == MPT_ASYNC) { + hd->ioc->spi_data.maxSyncOffset = 0; + } - hd->negoNvram = 0; -#ifdef MPTSCSIH_DISABLE_DOMAIN_VALIDATION - hd->negoNvram = MPT_SCSICFG_USE_NVRAM; + hd->negoNvram = 0; +#ifndef MPTSCSIH_ENABLE_DOMAIN_VALIDATION + hd->negoNvram = MPT_SCSICFG_USE_NVRAM; #endif - if (driver_setup.dv == 0) - hd->negoNvram = MPT_SCSICFG_USE_NVRAM; - - hd->ioc->spi_data.forceDv = 0; - for (ii=0; ii < MPT_MAX_SCSI_DEVICES; ii++) - hd->ioc->spi_data.dvStatus[ii] = MPT_SCSICFG_NEGOTIATE; - - if (hd->negoNvram == 0) { - for (ii=0; ii < MPT_MAX_SCSI_DEVICES; ii++) - hd->ioc->spi_data.dvStatus[ii] |= MPT_SCSICFG_DV_NOT_DONE; - } + if (driver_setup.dv == 0) { + hd->negoNvram = MPT_SCSICFG_USE_NVRAM; + } - ddvprintk((MYIOC_s_INFO_FMT - "dv %x width %x factor %x \n", - hd->ioc->name, driver_setup.dv, - driver_setup.max_width, - driver_setup.min_sync_fac)); + hd->ioc->spi_data.forceDv = 0; + for (ii=0; ii < MPT_MAX_SCSI_DEVICES; ii++) { + hd->ioc->spi_data.dvStatus[ii] = + MPT_SCSICFG_NEGOTIATE; + } + if (hd->negoNvram == 0) { + for (ii=0; ii < MPT_MAX_SCSI_DEVICES; ii++) + hd->ioc->spi_data.dvStatus[ii] |= + MPT_SCSICFG_DV_NOT_DONE; } - mpt_scsi_hosts++; + ddvprintk((MYIOC_s_INFO_FMT + "dv %x width %x factor %x \n", + hd->ioc->name, driver_setup.dv, + driver_setup.max_width, + driver_setup.min_sync_fac)); + } - } /* for each adapter port */ + mpt_scsi_hosts++; - this = mpt_adapter_find_next(this); - } + if(scsi_add_host (sh, &ioc->pcidev->dev)) { + dprintk((KERN_ERR MYNAM, + "scsi_add_host failed\n")); + goto mptscsih_probe_failed; + } -done: - if (mpt_scsi_hosts > 0) - register_reboot_notifier(&mptscsih_notifier); - else { - mpt_reset_deregister(ScsiDoneCtx); - dprintk((KERN_INFO MYNAM ": Deregistered for IOC reset notifications\n")); + scsi_scan_host(sh); + return 0; - mpt_event_deregister(ScsiDoneCtx); - dprintk((KERN_INFO MYNAM ": Deregistered for IOC event notifications\n")); + } /* scsi_host_alloc */ - mpt_deregister(ScsiScanDvCtx); - mpt_deregister(ScsiTaskCtx); - mpt_deregister(ScsiDoneCtx); + } /* for each adapter port */ - if (info_kbuf != NULL) - kfree(info_kbuf); - } +mptscsih_probe_failed: + + mptscsih_remove(pdev); + return -ENODEV; - return mpt_scsi_hosts; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ -/** - * mptscsih_release - Unregister SCSI host from linux scsi mid-layer - * @host: Pointer to Scsi_Host structure +/* + * mptscsih_remove - Removed scsi devices + * @pdev: Pointer to pci_dev structure * - * (linux Scsi_Host_Template.release routine) - * This routine releases all resources associated with the SCSI host - * adapter. * - * Returns 0 for success. */ -int -mptscsih_release(struct Scsi_Host *host) +static void __devexit +mptscsih_remove(struct pci_dev *pdev) { - MPT_SCSI_HOST *hd; - int count; - unsigned long flags; + MPT_ADAPTER *ioc = pci_get_drvdata(pdev); + struct Scsi_Host *host = ioc->sh; + MPT_SCSI_HOST *hd; + int count; + unsigned long flags; + + if(!host) + return; - hd = (MPT_SCSI_HOST *) host->hostdata; + scsi_remove_host(host); -#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION +#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION /* Check DV thread active */ count = 10 * HZ; spin_lock_irqsave(&dvtaskQ_lock, flags); @@ -1721,8 +1745,7 @@ #endif #endif - unregister_reboot_notifier(&mptscsih_notifier); - + hd = (MPT_SCSI_HOST *)host->hostdata; if (hd != NULL) { int sz1, sz2, sz3, sztarget=0; int szr2chain = 0; @@ -1730,9 +1753,7 @@ int szchain = 0; int szQ = 0; - /* Synchronize disk caches - */ - (void) mptscsih_synchronize_cache(hd, 0); + mptscsih_shutdown(&pdev->dev); sz1 = sz2 = sz3 = 0; @@ -1796,72 +1817,203 @@ hd->Targets = NULL; } - dprintk((MYIOC_s_INFO_FMT "Free'd ScsiLookup (%d), chain (%d) and Target (%d+%d) memory\n", - hd->ioc->name, sz1, szchain, sz3, sztarget)); + dprintk((MYIOC_s_INFO_FMT + "Free'd ScsiLookup (%d), chain (%d) and Target (%d+%d) memory\n", + hd->ioc->name, sz1, szchain, sz3, sztarget)); dprintk(("Free'd done and free Q (%d) memory\n", szQ)); + + /* NULL the Scsi_Host pointer + */ + hd->ioc->sh = NULL; } - /* NULL the Scsi_Host pointer + + scsi_host_put(host); + +} + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/* + * mptscsih_shutdown - reboot notifier + * + */ +static void +mptscsih_shutdown(struct device * dev) +{ + MPT_ADAPTER *ioc = pci_get_drvdata(to_pci_dev(dev)); + struct Scsi_Host *host = ioc->sh; + MPT_SCSI_HOST *hd; + + if(!host) + return; + + hd = (MPT_SCSI_HOST *)host->hostdata; + + /* Flush the cache of this adapter */ - hd->ioc->sh = NULL; - scsi_unregister(host); + if(hd != NULL) + mptscsih_synchronize_cache(hd, 0); - if (mpt_scsi_hosts) { - if (--mpt_scsi_hosts == 0) { - mpt_reset_deregister(ScsiDoneCtx); - dprintk((KERN_INFO MYNAM ": Deregistered for IOC reset notifications\n")); +} - mpt_event_deregister(ScsiDoneCtx); - dprintk((KERN_INFO MYNAM ": Deregistered for IOC event notifications\n")); +#ifdef CONFIG_PM +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/* + * mptscsih_suspend - Fusion MPT scsie driver suspend routine. + * + * + */ +static int +mptscsih_suspend(struct pci_dev *pdev, u32 state) +{ + mptscsih_shutdown(&pdev->dev); + return 0; +} - mpt_deregister(ScsiScanDvCtx); - mpt_deregister(ScsiTaskCtx); - mpt_deregister(ScsiDoneCtx); +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/* + * mptscsih_resume - Fusion MPT scsi driver resume routine. + * + * + */ +static int +mptscsih_resume(struct pci_dev *pdev) +{ + MPT_ADAPTER *ioc = pci_get_drvdata(pdev); + struct Scsi_Host *host = ioc->sh; + MPT_SCSI_HOST *hd; - if (info_kbuf != NULL) - kfree(info_kbuf); - } - } + if(!host) + return 0; + hd = (MPT_SCSI_HOST *)host->hostdata; + if(!hd) + return 0; + +#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION + { + unsigned long lflags; + spin_lock_irqsave(&dvtaskQ_lock, lflags); + if (!dvtaskQ_active) { + dvtaskQ_active = 1; + spin_unlock_irqrestore(&dvtaskQ_lock, lflags); + MPT_INIT_WORK(&mptscsih_dvTask, + mptscsih_domainValidation, (void *) hd); + SCHEDULE_TASK(&mptscsih_dvTask); + } else { + spin_unlock_irqrestore(&dvtaskQ_lock, lflags); + } + } +#endif return 0; } +#endif + +static struct mpt_pci_driver mptscsih_driver = { + .probe = mptscsih_probe, + .remove = __devexit_p(mptscsih_remove), + .shutdown = mptscsih_shutdown, +#ifdef CONFIG_PM + .suspend = mptscsih_suspend, + .resume = mptscsih_resume, +#endif +}; + + +/* SCSI host fops start here... */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /** - * mptscsih_halt - Process the reboot notification - * @nb: Pointer to a struct notifier_block (ignored) - * @event: event (SYS_HALT, SYS_RESTART, SYS_POWER_OFF) - * @buf: Pointer to a data buffer (ignored) - * - * This routine called if a system shutdown or reboot is to occur. + * mptscsih_init - Register MPT adapter(s) as SCSI host(s) with + * linux scsi mid-layer. * - * Return NOTIFY_DONE if this is something other than a reboot message. - * NOTIFY_OK if this is a reboot message. + * Returns 0 for success, non-zero for failure. */ static int -mptscsih_halt(struct notifier_block *nb, ulong event, void *buf) +__init mptscsih_init(void) { - MPT_ADAPTER *ioc = NULL; - MPT_SCSI_HOST *hd = NULL; + MPT_ADAPTER *ioc; - /* Ignore all messages other than reboot message - */ - if ((event != SYS_RESTART) && (event != SYS_HALT) - && (event != SYS_POWER_OFF)) - return (NOTIFY_DONE); + show_mptmod_ver(my_NAME, my_VERSION); - for (ioc = mpt_adapter_find_first(); ioc != NULL; ioc = mpt_adapter_find_next(ioc)) { - /* Flush the cache of this adapter - */ - if (ioc->sh) { - hd = (MPT_SCSI_HOST *) ioc->sh->hostdata; - if (hd) { - mptscsih_synchronize_cache(hd, 0); - } + ScsiDoneCtx = mpt_register(mptscsih_io_done, MPTSCSIH_DRIVER); + ScsiTaskCtx = mpt_register(mptscsih_taskmgmt_complete, MPTSCSIH_DRIVER); + ScsiScanDvCtx = mpt_register(mptscsih_scandv_complete, MPTSCSIH_DRIVER); + + if(mpt_device_driver_register(&mptscsih_driver, + MPTSCSIH_DRIVER) != 0 ) { + dprintk((KERN_INFO MYNAM + ": failed to register dd callbacks\n")); + } + + if (mpt_event_register(ScsiDoneCtx, mptscsih_event_process) == 0) { + dprintk((KERN_INFO MYNAM + ": Registered for IOC event notifications\n")); + } + + if (mpt_reset_register(ScsiDoneCtx, mptscsih_ioc_reset) == 0) { + dprintk((KERN_INFO MYNAM + ": Registered for IOC reset notifications\n")); + } + +#ifdef MODULE + /* Evaluate the command line arguments, if any */ + if (mptscsih) + mptscsih_setup(mptscsih); +#endif + + /* probing for devices */ + for(ioc = mpt_adapter_find_first(); ioc != NULL; + ioc = mpt_adapter_find_next(ioc)) { + if(mptscsih_probe(ioc->pcidev, ioc->pcidev->driver->id_table)) { + dprintk((KERN_INFO MYNAM ": probe failed\n")); + return -ENODEV; } } - unregister_reboot_notifier(&mptscsih_notifier); - return NOTIFY_OK; + if (mpt_scsi_hosts > 0) + return 0; + + mptscsih_exit(); + return -ENODEV; + +} + +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ +/** + * mptscsih_exit - Unregisters MPT adapter(s) + * + */ +static void +__exit mptscsih_exit(void) +{ + MPT_ADAPTER *ioc; + + /* removing devices */ + for(ioc = mpt_adapter_find_first(); ioc != NULL; + ioc = mpt_adapter_find_next(ioc)) { + if ((ioc->last_state != MPI_IOC_STATE_OPERATIONAL) || + (ioc->sh == NULL)) + continue; + mptscsih_remove(ioc->pcidev); + } + + mpt_reset_deregister(ScsiDoneCtx); + dprintk((KERN_INFO MYNAM + ": Deregistered for IOC reset notifications\n")); + + mpt_event_deregister(ScsiDoneCtx); + dprintk((KERN_INFO MYNAM + ": Deregistered for IOC event notifications\n")); + + mpt_device_driver_deregister(MPTSCSIH_DRIVER); + mpt_deregister(ScsiScanDvCtx); + mpt_deregister(ScsiTaskCtx); + mpt_deregister(ScsiDoneCtx); + + if (info_kbuf != NULL) + kfree(info_kbuf); + } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ @@ -2436,7 +2588,7 @@ hd->ioc->spi_data.dvStatus[target] = dvStatus; } -#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION +#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION if ((dvStatus & MPT_SCSICFG_NEED_DV) || (hd->ioc->spi_data.forceDv & MPT_SCSICFG_NEED_DV)) { unsigned long lflags; @@ -2608,7 +2760,7 @@ * Returns 0 for SUCCESS or -1 if FAILED. */ static int -mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, int sleepFlag) +mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, ulong timeout, int sleepFlag) { MPT_ADAPTER *ioc = NULL; int rc = -1; @@ -2664,7 +2816,7 @@ */ if (hd->hard_resets < -1) hd->hard_resets++; - rc = mptscsih_IssueTaskMgmt(hd, type, target, lun, ctx2abort, sleepFlag); + rc = mptscsih_IssueTaskMgmt(hd, type, target, lun, ctx2abort, timeout, sleepFlag); if (rc) { printk(MYIOC_s_INFO_FMT "Issue of TaskMgmt failed!\n", hd->ioc->name); } else { @@ -2710,7 +2862,7 @@ * else other non-zero value returned. */ static int -mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, int sleepFlag) +mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, ulong timeout, int sleepFlag) { MPT_FRAME_HDR *mf; SCSITaskMgmt_t *pScsiTm; @@ -2760,7 +2912,7 @@ */ hd->tmPtr = mf; hd->numTMrequests++; - hd->TMtimer.expires = jiffies + HZ*20; /* 20 seconds */ + hd->TMtimer.expires = jiffies + timeout; add_timer(&hd->TMtimer); if ((retval = mpt_send_handshake_request(ScsiTaskCtx, hd->ioc->id, @@ -2870,7 +3022,8 @@ spin_unlock_irq(host_lock); if (mptscsih_TMHandler(hd, MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK, - SCpnt->device->id, SCpnt->device->lun, ctx2abort, CAN_SLEEP) + SCpnt->device->id, SCpnt->device->lun, + ctx2abort, (HZ*2) /* 2 second timeout */,CAN_SLEEP) < 0) { /* The TM request failed and the subsequent FW-reload failed! @@ -2940,7 +3093,7 @@ } if (mptscsih_TMHandler(hd, MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET, - SCpnt->device->id, 0, 0, CAN_SLEEP) + SCpnt->device->id, 0, 0, (HZ*5) /* 5 second timeout */, CAN_SLEEP) < 0){ /* The TM request failed and the subsequent FW-reload failed! * Fatal error case. @@ -3004,7 +3157,7 @@ /* We are now ready to execute the task management request. */ if (mptscsih_TMHandler(hd, MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS, - 0, 0, 0, CAN_SLEEP) + 0, 0, 0, (HZ*5) /* 5 second timeout */, CAN_SLEEP) < 0){ /* The TM request failed and the subsequent FW-reload failed! @@ -3087,7 +3240,7 @@ mptscsih_tm_pending_wait(MPT_SCSI_HOST * hd) { unsigned long flags; - int loop_count = 60 * 4; /* Wait 60 seconds */ + int loop_count = 10 * 4; /* Wait 10 seconds */ int status = FAILED; do { @@ -3227,18 +3380,50 @@ */ int mptscsih_bios_param(struct scsi_device * sdev, struct block_device *bdev, - sector_t capacity, int *ip) + sector_t capacity, int geom[]) { - int size; + int heads; + int sectors; + sector_t cylinders; +#ifdef CONFIG_LBD + ulong dummy; +#endif - size = capacity; - ip[0] = 64; /* heads */ - ip[1] = 32; /* sectors */ - if ((ip[2] = size >> 11) > 1024) { /* cylinders, test for big disk */ - ip[0] = 255; /* heads */ - ip[1] = 63; /* sectors */ - ip[2] = size / (255 * 63); /* cylinders */ + heads = 64; + sectors = 32; +#ifdef CONFIG_LBD + dummy = heads * sectors; + cylinders = capacity; + sector_div(cylinders,dummy); +#else + cylinders = (ulong)capacity / (heads * sectors); +#endif + + /* + * Handle extended translation size for logical drives + * > 1Gb + */ + if ((ulong)capacity >= 0x200000) { + heads = 255; + sectors = 63; +#ifdef CONFIG_LBD + dummy = heads * sectors; + cylinders = capacity; + sector_div(cylinders,dummy); +#else + cylinders = (ulong)capacity / (heads * sectors); +#endif } + + /* return result */ + geom[0] = heads; + geom[1] = sectors; + geom[2] = cylinders; + + dprintk((KERN_NOTICE + ": bios_param: Id=%i Lun=%i Channel=%i CHS=%i/%i/%i\n", + sdev->id, sdev->lun,sdev->channel,(int)cylinders,heads,sectors)); + return 0; } @@ -3368,7 +3553,7 @@ vdev->raidVolume = 0; if (hd->is_spi && (hd->ioc->spi_data.isRaid & (1 << (device->id)))) { vdev->raidVolume = 1; - ddvtprintk((KERN_INFO "RAID Volume @ id %d\n", target_id)); + ddvtprintk((KERN_INFO "RAID Volume @ id %d\n", device->id)); } mptscsih_target_settings(hd, vdev, device); @@ -3650,36 +3835,6 @@ return -1; } -/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ - -/* see mptscsih.h */ - -#ifdef MPT_SCSIHOST_NEED_ENTRY_EXIT_HOOKUPS -static Scsi_Host_Template driver_template = { - .proc_name = "mptscsih", - .proc_info = x_scsi_proc_info, - .name = "MPT SCSI Host", - .detect = x_scsi_detect, - .release = x_scsi_release, - .info = x_scsi_info, - .queuecommand = x_scsi_queuecommand, - .slave_alloc = x_scsi_slave_alloc, - .slave_configure = x_scsi_slave_configure, - .slave_destroy = x_scsi_slave_destroy, - .eh_abort_handler = x_scsi_abort, - .eh_device_reset_handler = x_scsi_dev_reset, - .eh_bus_reset_handler = x_scsi_bus_reset, - .eh_host_reset_handler = x_scsi_host_reset, - .bios_param = x_scsi_bios_param, - .can_queue = MPT_SCSI_CAN_QUEUE, - .this_id = -1, - .sg_tablesize = MPT_SCSI_SG_DEPTH, - .max_sectors = MPT_SCSI_MAX_SECTORS, - .cmd_per_lun = MPT_SCSI_CMD_PER_LUN, - .use_clustering = ENABLE_CLUSTERING, -}; -#include "../../scsi/scsi_module.c" -#endif /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /* Search the pendingQ for a command with specific index. @@ -3958,7 +4113,7 @@ break; case MPI_EVENT_INTEGRATED_RAID: /* 0B */ -#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION +#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION /* negoNvram set to 0 if DV enabled and to USE_NVRAM if * if DV disabled. Need to check for target mode. */ @@ -3972,7 +4127,7 @@ int numPDisk; u8 reason; u8 physDiskNum; - + reason = (le32_to_cpu(pEvReply->Data[0]) & 0x00FF0000) >> 16; if (reason == MPI_EVENT_RAID_RC_DOMAIN_VAL_NEEDED) { /* New or replaced disk. @@ -4320,6 +4475,8 @@ case WRITE_10: case READ_12: case WRITE_12: + case READ_16: + case WRITE_16: break; default: return 0; @@ -4618,7 +4775,7 @@ //negoFlags = MPT_TARGET_NO_NEGO_SYNC; } -#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION +#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION /* Force to async and narrow if DV has not been executed * for this ID */ @@ -5000,7 +5157,7 @@ return; } -#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION +#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /* mptscsih_do_raid - Format and Issue a RAID volume request message. * @hd: Pointer to scsi host structure @@ -5071,7 +5228,7 @@ return 0; } -#endif /* ~MPTSCSIH_DISABLE_DOMAIN_VALIDATION */ +#endif /* ~MPTSCSIH_ENABLE_DOMAIN_VALIDATION */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /** @@ -5383,7 +5540,7 @@ if (ioc->spi_data.sdp1length > 0) { pcfg1Data = (SCSIDevicePage1_t *)pci_alloc_consistent(ioc->pcidev, ioc->spi_data.sdp1length * 4, &cfg1_dma_addr); - + if (pcfg1Data != NULL) { doConfig = 1; header1.PageVersion = ioc->spi_data.sdp1version; @@ -5415,7 +5572,7 @@ flags = hd->ioc->spi_data.noQas; if (hd->ioc->spi_data.nvram && (hd->ioc->spi_data.nvram[id] != MPT_HOST_NVRAM_INVALID)) { data = hd->ioc->spi_data.nvram[id]; - + if (data & MPT_NVRAM_WIDE_DISABLE) flags |= MPT_TARGET_NO_NEGO_WIDE; @@ -5424,7 +5581,7 @@ flags |= MPT_TARGET_NO_NEGO_SYNC; } } - + /* Force to async, narrow */ mptscsih_setDevicePage1Flags(0, MPT_ASYNC, 0, &requested, &configuration, flags); @@ -5467,7 +5624,7 @@ return 0; } -#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION +#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /** * mptscsih_domainValidation - Top level handler for domain validation. @@ -5520,7 +5677,7 @@ /* DV only to SCSI adapters */ if ((int)ioc->chip_type <= (int)FC929) continue; - + /* Make sure everything looks ok */ if (ioc->sh == NULL) continue; @@ -6914,7 +7071,7 @@ break; } } -#endif /* ~MPTSCSIH_DISABLE_DOMAIN_VALIDATION */ +#endif /* ~MPTSCSIH_ENABLE_DOMAIN_VALIDATION */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /* Commandline Parsing routines and defines. @@ -7009,3 +7166,6 @@ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ + +module_init(mptscsih_init); +module_exit(mptscsih_exit); diff -Nru a/drivers/message/fusion/mptscsih.h b/drivers/message/fusion/mptscsih.h --- a/drivers/message/fusion/mptscsih.h Wed Feb 4 16:51:37 2004 +++ b/drivers/message/fusion/mptscsih.h Wed Feb 4 16:51:37 2004 @@ -98,13 +98,14 @@ #define MPT_SCSI_SG_DEPTH 40 #endif -/* To disable domain validation, uncomment the +/* To disable domain validation, comment the * following line. No effect for FC devices. * For SCSI devices, driver will negotiate to * NVRAM settings (if available) or to maximum adapter * capabilities. */ -/* #define MPTSCSIH_DISABLE_DOMAIN_VALIDATION */ + +#define MPTSCSIH_ENABLE_DOMAIN_VALIDATION /* SCSI driver setup structure. Settings can be overridden @@ -138,15 +139,6 @@ */ /* - * Conditionalizing with "#ifdef MODULE/#endif" around: - * static Scsi_Host_Template driver_template = XX; - * #include <../../scsi/scsi_module.c> - * lines was REMOVED @ lk-2.4.0-test9 - * Issue discovered 20001213 by: sshirron - */ -#define MPT_SCSIHOST_NEED_ENTRY_EXIT_HOOKUPS 1 - -/* * tq_scheduler disappeared @ lk-2.4.0-test12 * (right when newly defined TQ_ACTIVE) * tq_struct reworked in 2.5.41. Include workqueue.h. @@ -160,8 +152,6 @@ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ -#define x_scsi_detect mptscsih_detect -#define x_scsi_release mptscsih_release #define x_scsi_info mptscsih_info #define x_scsi_queuecommand mptscsih_qcmd #define x_scsi_abort mptscsih_abort @@ -170,9 +160,6 @@ #define x_scsi_host_reset mptscsih_host_reset #define x_scsi_bios_param mptscsih_bios_param -#define x_scsi_taskmgmt_bh mptscsih_taskmgmt_bh -#define x_scsi_old_abort mptscsih_old_abort -#define x_scsi_old_reset mptscsih_old_reset #define x_scsi_slave_alloc mptscsih_slave_alloc #define x_scsi_slave_configure mptscsih_slave_configure #define x_scsi_slave_destroy mptscsih_slave_destroy @@ -182,8 +169,6 @@ /* * MPT SCSI Host / Initiator decls... */ -extern int x_scsi_detect(Scsi_Host_Template *); -extern int x_scsi_release(struct Scsi_Host *host); extern const char *x_scsi_info(struct Scsi_Host *); extern int x_scsi_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); extern int x_scsi_abort(Scsi_Cmnd *); @@ -191,8 +176,7 @@ extern int x_scsi_dev_reset(Scsi_Cmnd *); extern int x_scsi_host_reset(Scsi_Cmnd *); extern int x_scsi_bios_param(struct scsi_device * sdev, struct block_device *bdev, - sector_t capacity, int *ip); -extern void x_scsi_taskmgmt_bh(void *); + sector_t capacity, int geom[]); extern int x_scsi_slave_alloc(Scsi_Device *); extern int x_scsi_slave_configure(Scsi_Device *); extern void x_scsi_slave_destroy(Scsi_Device *); diff -Nru a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c --- a/drivers/mtd/chips/cfi_cmdset_0001.c Wed Feb 4 16:51:34 2004 +++ b/drivers/mtd/chips/cfi_cmdset_0001.c Wed Feb 4 16:51:34 2004 @@ -1003,13 +1003,25 @@ z = 0; while(z < words * CFIDEV_BUSWIDTH) { if (cfi_buswidth_is_1()) { - map_write8 (map, *((__u8*)buf)++, adr+z); + u8 *b = (u8 *)buf; + + map_write8 (map, *b++, adr+z); + buf = (const u_char *)b; } else if (cfi_buswidth_is_2()) { - map_write16 (map, *((__u16*)buf)++, adr+z); + u16 *b = (u16 *)buf; + + map_write16 (map, *b++, adr+z); + buf = (const u_char *)b; } else if (cfi_buswidth_is_4()) { - map_write32 (map, *((__u32*)buf)++, adr+z); + u32 *b = (u32 *)buf; + + map_write32 (map, *b++, adr+z); + buf = (const u_char *)b; } else if (cfi_buswidth_is_8()) { - map_write64 (map, *((__u64*)buf)++, adr+z); + u64 *b = (u64 *)buf; + + map_write64 (map, *b++, adr+z); + buf = (const u_char *)b; } else { ret = -EINVAL; goto out; @@ -1025,11 +1037,20 @@ while (i < CFIDEV_BUSWIDTH) tmp_buf[i++] = 0xff; if (cfi_buswidth_is_2()) { - map_write16 (map, *((__u16*)tmp_p)++, adr+z); + u16 *b = (u16 *)tmp_p; + + map_write16 (map, *b++, adr+z); + tmp_p = (u_char *)b; } else if (cfi_buswidth_is_4()) { - map_write32 (map, *((__u32*)tmp_p)++, adr+z); + u32 *b = (u32 *)tmp_p; + + map_write32 (map, *b++, adr+z); + tmp_p = (u_char *)b; } else if (cfi_buswidth_is_8()) { - map_write64 (map, *((__u64*)tmp_p)++, adr+z); + u64 *b = (u64 *)tmp_p; + + map_write64 (map, *b++, adr+z); + tmp_p = (u_char *)b; } else { ret = -EINVAL; goto out; diff -Nru a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c --- a/drivers/mtd/chips/cfi_cmdset_0020.c Wed Feb 4 16:51:34 2004 +++ b/drivers/mtd/chips/cfi_cmdset_0020.c Wed Feb 4 16:51:34 2004 @@ -542,11 +542,20 @@ /* Write data */ for (z = 0; z < len; z += CFIDEV_BUSWIDTH) { if (cfi_buswidth_is_1()) { - map_write8 (map, *((__u8*)buf)++, adr+z); + u8 *b = (u8 *)buf; + + map_write8 (map, *b++, adr+z); + buf = (const u_char *)b; } else if (cfi_buswidth_is_2()) { - map_write16 (map, *((__u16*)buf)++, adr+z); + u16 *b = (u16 *)buf; + + map_write16 (map, *b++, adr+z); + buf = (const u_char *)b; } else if (cfi_buswidth_is_4()) { - map_write32 (map, *((__u32*)buf)++, adr+z); + u32 *b = (u32 *)buf; + + map_write32 (map, *b++, adr+z); + buf = (const u_char *)b; } else { DISABLE_VPP(map); return -EINVAL; diff -Nru a/drivers/mtd/maps/elan-104nc.c b/drivers/mtd/maps/elan-104nc.c --- a/drivers/mtd/maps/elan-104nc.c Wed Feb 4 16:51:35 2004 +++ b/drivers/mtd/maps/elan-104nc.c Wed Feb 4 16:51:35 2004 @@ -148,7 +148,7 @@ elan_104nc_page(map, from); memcpy_fromio(to, iomapadr + (from & WINDOW_MASK), thislen); spin_unlock(&elan_104nc_spin); - (__u8*)to += thislen; + to += thislen; from += thislen; len -= thislen; } diff -Nru a/drivers/mtd/maps/sbc_gxx.c b/drivers/mtd/maps/sbc_gxx.c --- a/drivers/mtd/maps/sbc_gxx.c Wed Feb 4 16:51:36 2004 +++ b/drivers/mtd/maps/sbc_gxx.c Wed Feb 4 16:51:36 2004 @@ -155,7 +155,7 @@ sbc_gxx_page(map, from); memcpy_fromio(to, iomapadr + (from & WINDOW_MASK), thislen); spin_unlock(&sbc_gxx_spin); - (__u8*)to += thislen; + to += thislen; from += thislen; len -= thislen; } diff -Nru a/drivers/net/dl2k.c b/drivers/net/dl2k.c --- a/drivers/net/dl2k.c Wed Feb 4 16:51:35 2004 +++ b/drivers/net/dl2k.c Wed Feb 4 16:51:35 2004 @@ -745,7 +745,7 @@ static void rio_free_tx (struct net_device *dev, int irq) { - struct netdev_private *np = (struct netdev_private *) dev->priv; + struct netdev_private *np = dev->priv; int entry = np->old_tx % TX_RING_SIZE; int tx_use = 0; unsigned long flag = 0; @@ -855,7 +855,7 @@ static int receive_packet (struct net_device *dev) { - struct netdev_private *np = (struct netdev_private *) dev->priv; + struct netdev_private *np = dev->priv; int entry = np->cur_rx % RX_RING_SIZE; int cnt = 30; diff -Nru a/drivers/net/e100/e100_main.c b/drivers/net/e100/e100_main.c --- a/drivers/net/e100/e100_main.c Wed Feb 4 16:51:35 2004 +++ b/drivers/net/e100/e100_main.c Wed Feb 4 16:51:35 2004 @@ -46,20 +46,18 @@ /* Change Log * - * 2.3.30 09/21/03 + * 2.3.36 11/13/03 + * o Moved to 2.6 APIs: pci_name() and free_netdev(). + * o Removed some __devinit from some functions that shouldn't be marked + * as such (Anton Blanchard [anton@samba.org]). + * + * 2.3.33 10/21/03 * o Bug fix (Bugzilla 97908): Loading e100 was causing crash on Itanium2 * with HP chipset * o Bug fix (Bugzilla 101583): e100 can't pass traffic with ipv6 * o Bug fix (Bugzilla 101360): PRO/10+ can't pass traffic * * 2.3.27 08/08/03 - * o Bug fix: read skb->len after freeing skb - * [Andrew Morton] akpm@zip.com.au - * o Bug fix: 82557 (with National PHY) timeout during init - * [Adam Kropelin] akropel1@rochester.rr.com - * o Feature add: allow to change Wake On LAN when EEPROM disabled - * - * 2.3.13 05/08/03 */ #include @@ -125,7 +123,7 @@ static inline void e100_tx_skb_free(struct e100_private *bdp, tcb_t *tcb); /* Global Data structures and variables */ char e100_copyright[] = "Copyright (c) 2003 Intel Corporation"; -char e100_driver_version[]="2.3.30-k1"; +char e100_driver_version[]="2.3.36-k1"; const char *e100_full_driver_name = "Intel(R) PRO/100 Network Driver"; char e100_short_driver_name[] = "e100"; static int e100nics = 0; @@ -696,7 +694,7 @@ pci_disable_device(pcid); err_dev: pci_set_drvdata(pcid, NULL); - kfree(dev); + free_netdev(dev); out: return rc; } diff -Nru a/drivers/net/e1000/e1000.h b/drivers/net/e1000/e1000.h --- a/drivers/net/e1000/e1000.h Wed Feb 4 16:51:33 2004 +++ b/drivers/net/e1000/e1000.h Wed Feb 4 16:51:33 2004 @@ -1,7 +1,7 @@ /******************************************************************************* - Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. + Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -92,6 +92,16 @@ #define E1000_MAX_INTR 10 +/* How many descriptors for TX and RX ? */ +#define E1000_DEFAULT_TXD 256 +#define E1000_MAX_TXD 256 +#define E1000_MIN_TXD 80 +#define E1000_MAX_82544_TXD 4096 +#define E1000_DEFAULT_RXD 256 +#define E1000_MAX_RXD 256 +#define E1000_MIN_RXD 80 +#define E1000_MAX_82544_RXD 4096 + /* Supported Rx Buffer Sizes */ #define E1000_RXBUFFER_2048 2048 #define E1000_RXBUFFER_4096 4096 @@ -192,10 +202,14 @@ /* TX */ struct e1000_desc_ring tx_ring; + spinlock_t tx_lock; uint32_t txd_cmd; uint32_t tx_int_delay; uint32_t tx_abs_int_delay; uint32_t gotcl; + uint64_t gotcl_old; + uint64_t tpt_old; + uint64_t colc_old; uint32_t tx_fifo_head; uint32_t tx_head_addr; uint32_t tx_fifo_size; @@ -210,6 +224,7 @@ uint32_t rx_abs_int_delay; boolean_t rx_csum; uint32_t gorcl; + uint64_t gorcl_old; /* Interrupt Throttle Rate */ uint32_t itr; diff -Nru a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/e1000/e1000_ethtool.c --- a/drivers/net/e1000/e1000_ethtool.c Wed Feb 4 16:51:35 2004 +++ b/drivers/net/e1000/e1000_ethtool.c Wed Feb 4 16:51:35 2004 @@ -1,7 +1,7 @@ /******************************************************************************* - Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. + Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -39,6 +39,11 @@ extern void e1000_down(struct e1000_adapter *adapter); extern void e1000_reset(struct e1000_adapter *adapter); extern int e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx); +extern int e1000_setup_rx_resources(struct e1000_adapter *adapter); +extern int e1000_setup_tx_resources(struct e1000_adapter *adapter); +extern void e1000_free_rx_resources(struct e1000_adapter *adapter); +extern void e1000_free_tx_resources(struct e1000_adapter *adapter); +extern void e1000_update_stats(struct e1000_adapter *adapter); struct e1000_stats { char stat_string[ETH_GSTRING_LEN]; @@ -440,6 +445,71 @@ return ret_val; } +static int +e1000_ethtool_gring(struct e1000_adapter *adapter, + struct ethtool_ringparam *ring) +{ + e1000_mac_type mac_type = adapter->hw.mac_type; + struct e1000_desc_ring *txdr = &adapter->tx_ring; + struct e1000_desc_ring *rxdr = &adapter->rx_ring; + + ring->rx_max_pending = (mac_type < e1000_82544) ? E1000_MAX_RXD : + E1000_MAX_82544_RXD; + ring->tx_max_pending = (mac_type < e1000_82544) ? E1000_MAX_TXD : + E1000_MAX_82544_TXD; + ring->rx_mini_max_pending = 0; + ring->rx_jumbo_max_pending = 0; + ring->rx_pending = rxdr->count; + ring->tx_pending = txdr->count; + ring->rx_mini_pending = 0; + ring->rx_jumbo_pending = 0; + + return 0; +} +static int +e1000_ethtool_sring(struct e1000_adapter *adapter, + struct ethtool_ringparam *ring) +{ + int err; + e1000_mac_type mac_type = adapter->hw.mac_type; + struct e1000_desc_ring *txdr = &adapter->tx_ring; + struct e1000_desc_ring *rxdr = &adapter->rx_ring; + + if(netif_running(adapter->netdev)) { + e1000_down(adapter); + e1000_free_rx_resources(adapter); + e1000_free_tx_resources(adapter); + } + + rxdr->count = max(ring->rx_pending,(uint32_t)E1000_MIN_RXD); + rxdr->count = min(rxdr->count,(uint32_t)(mac_type < e1000_82544 ? + E1000_MAX_RXD : E1000_MAX_82544_RXD)); + E1000_ROUNDUP(rxdr->count, REQ_RX_DESCRIPTOR_MULTIPLE); + + txdr->count = max(ring->tx_pending,(uint32_t)E1000_MIN_TXD); + txdr->count = min(txdr->count,(uint32_t)(mac_type < e1000_82544 ? + E1000_MAX_TXD : E1000_MAX_82544_TXD)); + E1000_ROUNDUP(txdr->count, REQ_TX_DESCRIPTOR_MULTIPLE); + + if(netif_running(adapter->netdev)) { + if((err = e1000_setup_rx_resources(adapter))) + goto err_setup_rx; + if((err = e1000_setup_tx_resources(adapter))) + goto err_setup_tx; + if((err = e1000_up(adapter))) + goto err_up; + } + + return 0; +err_up: + e1000_free_tx_resources(adapter); +err_setup_tx: + e1000_free_rx_resources(adapter); +err_setup_rx: + e1000_reset(adapter); + return err; +} + #define REG_PATTERN_TEST(R, M, W) \ { \ uint32_t pat, value; \ @@ -579,8 +649,8 @@ *data = 0; /* Hook up test interrupt handler just for this test */ - if(request_irq - (netdev->irq, &e1000_test_intr, SA_SHIRQ, netdev->name, netdev)) { + if(request_irq(adapter->pdev->irq, &e1000_test_intr, SA_SHIRQ, + netdev->name, netdev)) { *data = 1; return -1; } @@ -664,7 +734,7 @@ msec_delay(10); /* Unhook test interrupt handler */ - free_irq(netdev->irq, netdev); + free_irq(adapter->pdev->irq, netdev); return *data; } @@ -770,9 +840,9 @@ PCI_DMA_TODEVICE); tx_desc->buffer_addr = cpu_to_le64(txdr->buffer_info[i].dma); tx_desc->lower.data = cpu_to_le32(skb->len); - tx_desc->lower.data |= E1000_TXD_CMD_EOP; - tx_desc->lower.data |= E1000_TXD_CMD_IFCS; - tx_desc->lower.data |= E1000_TXD_CMD_RPS; + tx_desc->lower.data |= cpu_to_le32(E1000_TXD_CMD_EOP | + E1000_TXD_CMD_IFCS | + E1000_TXD_CMD_RPS); tx_desc->upper.data = 0; } @@ -1502,6 +1572,19 @@ addr += offsetof(struct ethtool_eeprom, data); return e1000_ethtool_seeprom(adapter, &eeprom, addr); } + case ETHTOOL_GRINGPARAM: { + struct ethtool_ringparam ering = {ETHTOOL_GRINGPARAM}; + e1000_ethtool_gring(adapter, &ering); + if(copy_to_user(addr, &ering, sizeof(ering))) + return -EFAULT; + return 0; + } + case ETHTOOL_SRINGPARAM: { + struct ethtool_ringparam ering; + if(copy_from_user(&ering, addr, sizeof(ering))) + return -EFAULT; + return e1000_ethtool_sring(adapter, &ering); + } case ETHTOOL_GPAUSEPARAM: { struct ethtool_pauseparam epause = {ETHTOOL_GPAUSEPARAM}; e1000_ethtool_gpause(adapter, &epause); @@ -1522,6 +1605,7 @@ } stats = { {ETHTOOL_GSTATS, E1000_STATS_LEN} }; int i; + e1000_update_stats(adapter); for(i = 0; i < E1000_STATS_LEN; i++) stats.data[i] = (e1000_gstrings_stats[i].sizeof_stat == sizeof(uint64_t)) ? diff -Nru a/drivers/net/e1000/e1000_hw.c b/drivers/net/e1000/e1000_hw.c --- a/drivers/net/e1000/e1000_hw.c Wed Feb 4 16:51:37 2004 +++ b/drivers/net/e1000/e1000_hw.c Wed Feb 4 16:51:37 2004 @@ -1,7 +1,7 @@ /******************************************************************************* - Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. + Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -96,8 +96,14 @@ hw->phy_type = e1000_phy_m88; break; case IGP01E1000_I_PHY_ID: - hw->phy_type = e1000_phy_igp; - break; + if(hw->mac_type == e1000_82541 || + hw->mac_type == e1000_82541_rev_2 || + hw->mac_type == e1000_82547 || + hw->mac_type == e1000_82547_rev_2) { + hw->phy_type = e1000_phy_igp; + break; + } + /* Fall Through */ default: /* Should never have loaded on this device */ hw->phy_type = e1000_phy_undefined; @@ -148,7 +154,6 @@ e1000_write_phy_reg(hw, 0x0000, 0x3300); - if(hw->mac_type == e1000_82547) { uint16_t fused, fine, coarse; @@ -1485,8 +1490,8 @@ if(mii_status_reg & MII_SR_LINK_STATUS) break; msec_delay(100); } - if(i == 0) { /* We didn't get link */ - /* Reset the DSP and wait again for link. */ + if((i == 0) && (hw->phy_type == e1000_phy_m88)) { + /* We didn't get link. Reset the DSP and wait again for link. */ if((ret_val = e1000_phy_reset_dsp(hw))) { DEBUGOUT("Error Resetting PHY DSP\n"); return ret_val; @@ -1533,6 +1538,25 @@ phy_data))) return ret_val; + /* Polarity reversal workaround for forced 10F/10H links. */ + if(hw->mac_type <= e1000_82544 && + (hw->forced_speed_duplex == e1000_10_full || + hw->forced_speed_duplex == e1000_10_half)) { + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, + 0x0019))) + return ret_val; + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, + 0x8F0F))) + return ret_val; + /* IEEE requirement is 150ms */ + msec_delay(200); + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, + 0x0019))) + return ret_val; + if((ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, + 0x8F00))) + return ret_val; + } } return E1000_SUCCESS; } @@ -1916,7 +1940,6 @@ uint32_t signal = 0; int32_t ret_val; uint16_t phy_data; - uint16_t lp_capability; DEBUGFUNC("e1000_check_for_link"); @@ -1996,24 +2019,17 @@ /* At this point we know that we are on copper and we have * auto-negotiated link. These are conditions for checking the link - * parter capability register. We use the link partner capability to - * determine if TBI Compatibility needs to be turned on or off. If - * the link partner advertises any speed in addition to Gigabit, then - * we assume that they are GMII-based, and TBI compatibility is not - * needed. If no other speeds are advertised, we assume the link - * partner is TBI-based, and we turn on TBI Compatibility. - */ - if(hw->tbi_compatibility_en) { - if((ret_val = e1000_read_phy_reg(hw, PHY_LP_ABILITY, - &lp_capability))) - return ret_val; - if(lp_capability & (NWAY_LPAR_10T_HD_CAPS | - NWAY_LPAR_10T_FD_CAPS | - NWAY_LPAR_100TX_HD_CAPS | - NWAY_LPAR_100TX_FD_CAPS | - NWAY_LPAR_100T4_CAPS)) { - /* If our link partner advertises anything in addition to - * gigabit, we do not need to enable TBI compatibility. + * partner capability register. We use the link speed to determine if + * TBI compatibility needs to be turned on or off. If the link is not + * at gigabit speed, then TBI compatibility is not needed. If we are + * at gigabit speed, we turn on TBI compatibility. + */ + if(hw->tbi_compatibility_en) { + uint16_t speed, duplex; + e1000_get_speed_and_duplex(hw, &speed, &duplex); + if(speed != SPEED_1000) { + /* If link speed is not set to gigabit speed, we do not need + * to enable TBI compatibility. */ if(hw->tbi_compatibility_on) { /* If we previously were in the mode, turn it off. */ @@ -2081,6 +2097,29 @@ DEBUGOUT("RXing /C/, enable AutoNeg and stop forcing link.\r\n"); E1000_WRITE_REG(hw, TXCW, hw->txcw); E1000_WRITE_REG(hw, CTRL, (ctrl & ~E1000_CTRL_SLU)); + + hw->serdes_link_down = FALSE; + } + /* If we force link for non-auto-negotiation switch, check link status + * based on MAC synchronization for internal serdes media type. + */ + else if((hw->media_type == e1000_media_type_internal_serdes) && + !(E1000_TXCW_ANE & E1000_READ_REG(hw, TXCW))) { + /* SYNCH bit and IV bit are sticky. */ + udelay(10); + if(E1000_RXCW_SYNCH & E1000_READ_REG(hw, RXCW)) { + if(!(rxcw & E1000_RXCW_IV)) { + hw->serdes_link_down = FALSE; + DEBUGOUT("SERDES: Link is up.\n"); + } + } else { + hw->serdes_link_down = TRUE; + DEBUGOUT("SERDES: Link is down.\n"); + } + } + if((hw->media_type == e1000_media_type_internal_serdes) && + (E1000_TXCW_ANE & E1000_READ_REG(hw, TXCW))) { + hw->serdes_link_down = !(E1000_STATUS_LU & E1000_READ_REG(hw, STATUS)); } return E1000_SUCCESS; } @@ -2481,8 +2520,8 @@ E1000_WRITE_REG(hw, MDIC, mdic); /* Poll the ready bit to see if the MDI read completed */ - for(i = 0; i < 64; i++) { - udelay(50); + for(i = 0; i < 640; i++) { + udelay(5); mdic = E1000_READ_REG(hw, MDIC); if(mdic & E1000_MDIC_READY) break; } @@ -3498,10 +3537,12 @@ if (e1000_acquire_eeprom(hw) != E1000_SUCCESS) return -E1000_ERR_EEPROM; - if(eeprom->type == e1000_eeprom_microwire) + if(eeprom->type == e1000_eeprom_microwire) { status = e1000_write_eeprom_microwire(hw, offset, words, data); - else + } else { status = e1000_write_eeprom_spi(hw, offset, words, data); + msec_delay(10); + } /* Done with writing */ e1000_release_eeprom(hw); @@ -3719,12 +3760,9 @@ hw->perm_mac_addr[i+1] = (uint8_t) (eeprom_data >> 8); } if(((hw->mac_type == e1000_82546) || (hw->mac_type == e1000_82546_rev_3)) && - (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)) { - if(hw->perm_mac_addr[5] & 0x01) - hw->perm_mac_addr[5] &= ~(0x01); - else - hw->perm_mac_addr[5] |= 0x01; - } + (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)) + hw->perm_mac_addr[5] ^= 0x01; + for(i = 0; i < NODE_ADDRESS_SIZE; i++) hw->mac_addr[i] = hw->perm_mac_addr[i]; return E1000_SUCCESS; @@ -3743,22 +3781,13 @@ e1000_init_rx_addrs(struct e1000_hw *hw) { uint32_t i; - uint32_t addr_low; - uint32_t addr_high; DEBUGFUNC("e1000_init_rx_addrs"); /* Setup the receive address. */ DEBUGOUT("Programming MAC Address into RAR[0]\n"); - addr_low = (hw->mac_addr[0] | - (hw->mac_addr[1] << 8) | - (hw->mac_addr[2] << 16) | (hw->mac_addr[3] << 24)); - - addr_high = (hw->mac_addr[4] | - (hw->mac_addr[5] << 8) | E1000_RAH_AV); - E1000_WRITE_REG_ARRAY(hw, RA, 0, addr_low); - E1000_WRITE_REG_ARRAY(hw, RA, 1, addr_high); + e1000_rar_set(hw, hw->mac_addr, 0); /* Zero out the other 15 receive addresses. */ DEBUGOUT("Clearing RAR[1-15]\n"); @@ -3775,6 +3804,7 @@ * mc_addr_list - the list of new multicast addresses * mc_addr_count - number of addresses * pad - number of bytes between addresses in the list + * rar_used_count - offset where to start adding mc addresses into the RAR's * * The given list replaces any existing list. Clears the last 15 receive * address registers and the multicast table. Uses receive address registers @@ -3785,11 +3815,11 @@ e1000_mc_addr_list_update(struct e1000_hw *hw, uint8_t *mc_addr_list, uint32_t mc_addr_count, - uint32_t pad) + uint32_t pad, + uint32_t rar_used_count) { uint32_t hash_value; uint32_t i; - uint32_t rar_used_count = 1; /* RAR[0] is used for our MAC address */ DEBUGFUNC("e1000_mc_addr_list_update"); @@ -4523,8 +4553,8 @@ e1000_read_reg_io(struct e1000_hw *hw, uint32_t offset) { - uint32_t io_addr = hw->io_base; - uint32_t io_data = hw->io_base + 4; + unsigned long io_addr = hw->io_base; + unsigned long io_data = hw->io_base + 4; e1000_io_write(hw, io_addr, offset); return e1000_io_read(hw, io_data); @@ -4543,8 +4573,8 @@ uint32_t offset, uint32_t value) { - uint32_t io_addr = hw->io_base; - uint32_t io_data = hw->io_base + 4; + unsigned long io_addr = hw->io_base; + unsigned long io_data = hw->io_base + 4; e1000_io_write(hw, io_addr, offset); e1000_io_write(hw, io_data, value); diff -Nru a/drivers/net/e1000/e1000_hw.h b/drivers/net/e1000/e1000_hw.h --- a/drivers/net/e1000/e1000_hw.h Wed Feb 4 16:51:37 2004 +++ b/drivers/net/e1000/e1000_hw.h Wed Feb 4 16:51:37 2004 @@ -1,7 +1,7 @@ /******************************************************************************* - Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. + Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -291,7 +291,7 @@ /* Filters (multicast, vlan, receive) */ void e1000_init_rx_addrs(struct e1000_hw *hw); -void e1000_mc_addr_list_update(struct e1000_hw *hw, uint8_t * mc_addr_list, uint32_t mc_addr_count, uint32_t pad); +void e1000_mc_addr_list_update(struct e1000_hw *hw, uint8_t * mc_addr_list, uint32_t mc_addr_count, uint32_t pad, uint32_t rar_used_count); uint32_t e1000_hash_mc_addr(struct e1000_hw *hw, uint8_t * mc_addr); void e1000_mta_set(struct e1000_hw *hw, uint32_t hash_value); void e1000_rar_set(struct e1000_hw *hw, uint8_t * mc_addr, uint32_t rar_index); @@ -317,9 +317,9 @@ void e1000_read_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t * value); void e1000_write_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t * value); /* Port I/O is only supported on 82544 and newer */ -uint32_t e1000_io_read(struct e1000_hw *hw, uint32_t port); +uint32_t e1000_io_read(struct e1000_hw *hw, unsigned long port); uint32_t e1000_read_reg_io(struct e1000_hw *hw, uint32_t offset); -void e1000_io_write(struct e1000_hw *hw, uint32_t port, uint32_t value); +void e1000_io_write(struct e1000_hw *hw, unsigned long port, uint32_t value); void e1000_write_reg_io(struct e1000_hw *hw, uint32_t offset, uint32_t value); int32_t e1000_config_dsp_after_link_change(struct e1000_hw *hw, boolean_t link_up); int32_t e1000_set_d3_lplu_state(struct e1000_hw *hw, boolean_t active); @@ -978,7 +978,7 @@ e1000_ms_type master_slave; e1000_ms_type original_master_slave; e1000_ffe_config ffe_config_state; - uint32_t io_base; + unsigned long io_base; uint32_t phy_id; uint32_t phy_revision; uint32_t phy_addr; @@ -1021,6 +1021,7 @@ boolean_t speed_downgraded; e1000_dsp_config dsp_config_state; boolean_t get_link_status; + boolean_t serdes_link_down; boolean_t tbi_compatibility_en; boolean_t tbi_compatibility_on; boolean_t phy_reset_disable; @@ -1310,6 +1311,7 @@ #define E1000_RCTL_DPF 0x00400000 /* discard pause frames */ #define E1000_RCTL_PMCF 0x00800000 /* pass MAC control frames */ #define E1000_RCTL_BSEX 0x02000000 /* Buffer size extension */ +#define E1000_RCTL_SECRC 0x04000000 /* Strip Ethernet CRC */ /* Receive Descriptor */ #define E1000_RDT_DELAY 0x0000ffff /* Delay timer (1=1024us) */ diff -Nru a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c --- a/drivers/net/e1000/e1000_main.c Wed Feb 4 16:51:35 2004 +++ b/drivers/net/e1000/e1000_main.c Wed Feb 4 16:51:35 2004 @@ -1,7 +1,7 @@ /******************************************************************************* - Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. + Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -30,10 +30,25 @@ /* Change Log * - * 5.2.20 9/30/03 + * 5.2.30.1 1/29/03 + * o Set VLAN filtering to IEEE 802.1Q after reset so we don't break + * SoL connections that use VLANs. + * o Allow 1000/Full setting for AutoNeg param for Fiber connections + * Jon D Mason [jonmason@us.ibm.com]. + * o Race between Tx queue and Tx clean fixed with a spin lock. + * o Added netpoll support. + * o Fixed endianess bug causing ethtool loopback diags to fail on ppc. + * o Use pdev->irq rather than netdev->irq in preparation for MSI support. + * o Report driver message on user override of InterruptThrottleRate + * module parameter. + * o Change I/O address storage from uint32_t to unsigned long. + * o Added ethtool RINGPARAM support. + * + * 5.2.22 10/15/03 * o Bug fix: SERDES devices might be connected to a back-plane * switch that doesn't support auto-neg, so add the capability - * to force 1000/Full. + * to force 1000/Full. Also, since forcing 1000/Full, sample + * RxSynchronize bit to detect link state. * o Bug fix: Flow control settings for hi/lo watermark didn't * consider changes in the Rx FIFO size, which could occur with * Jumbo Frames or with the reduced FIFO in 82547. @@ -42,30 +57,19 @@ * o Bug fix: hang under heavy Tx stress when running out of Tx * descriptors; wasn't clearing context descriptor when backing * out of send because of no-resource condition. + * o Bug fix: check netif_running in dev->poll so we don't have to + * hang in dev->close until all polls are finished. [Robert + * Ollson (robert.olsson@data.slu.se)]. + * o Revert TxDescriptor ring size back to 256 since change to 1024 + * wasn't accepted into the kernel. * * 5.2.16 8/8/03 - * o Added support for new controllers: 82545GM, 82546GB, 82541/7_B1 - * o Bug fix: reset h/w before first EEPROM read because we don't know - * who may have been messing with the device before we got there. - * [Dave Johnson (ddj -a-t- cascv.brown.edu)] - * o Bug fix: read the correct work from EEPROM to detect programmed - * WoL settings. - * o Bug fix: TSO would hang if space left in FIFO was being miscalculated - * when mss dropped without a correspoding drop in the DMA buffer size. - * o ASF for Fiber nics isn't supported. - * o Bug fix: Workaround added for potential hang with 82544 running in - * PCI-X if send buffer terminates within an evenly-aligned dword. - * o Feature: Add support for ethtool flow control setting. - * o Feature: Add support for ethtool TSO setting. - * o Feature: Increase default Tx Descriptor count to 1024 for >= 82544. - * - * 5.1.13 5/28/03 */ char e1000_driver_name[] = "e1000"; char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver"; -char e1000_driver_version[] = "5.2.20-k1"; -char e1000_copyright[] = "Copyright (c) 1999-2003 Intel Corporation."; +char e1000_driver_version[] = "5.2.30.1-k1"; +char e1000_copyright[] = "Copyright (c) 1999-2004 Intel Corporation."; /* e1000_pci_tbl - PCI Device ID Table * @@ -89,7 +93,6 @@ {0x8086, 0x1011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x1012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x1013, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, - {0x8086, 0x1014, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x1015, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x1016, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {0x8086, 0x1017, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, @@ -113,12 +116,17 @@ MODULE_DEVICE_TABLE(pci, e1000_pci_tbl); -/* Local Function Prototypes */ - int e1000_up(struct e1000_adapter *adapter); void e1000_down(struct e1000_adapter *adapter); void e1000_reset(struct e1000_adapter *adapter); int e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx); +int e1000_setup_tx_resources(struct e1000_adapter *adapter); +int e1000_setup_rx_resources(struct e1000_adapter *adapter); +void e1000_free_tx_resources(struct e1000_adapter *adapter); +void e1000_free_rx_resources(struct e1000_adapter *adapter); +void e1000_update_stats(struct e1000_adapter *adapter); + +/* Local Function Prototypes */ static int e1000_init_module(void); static void e1000_exit_module(void); @@ -127,15 +135,11 @@ static int e1000_sw_init(struct e1000_adapter *adapter); static int e1000_open(struct net_device *netdev); static int e1000_close(struct net_device *netdev); -static int e1000_setup_tx_resources(struct e1000_adapter *adapter); -static int e1000_setup_rx_resources(struct e1000_adapter *adapter); static void e1000_configure_tx(struct e1000_adapter *adapter); static void e1000_configure_rx(struct e1000_adapter *adapter); static void e1000_setup_rctl(struct e1000_adapter *adapter); static void e1000_clean_tx_ring(struct e1000_adapter *adapter); static void e1000_clean_rx_ring(struct e1000_adapter *adapter); -static void e1000_free_tx_resources(struct e1000_adapter *adapter); -static void e1000_free_rx_resources(struct e1000_adapter *adapter); static void e1000_set_multi(struct net_device *netdev); static void e1000_update_phy_info(unsigned long data); static void e1000_watchdog(unsigned long data); @@ -144,7 +148,6 @@ static struct net_device_stats * e1000_get_stats(struct net_device *netdev); static int e1000_change_mtu(struct net_device *netdev, int new_mtu); static int e1000_set_mac(struct net_device *netdev, void *p); -static void e1000_update_stats(struct e1000_adapter *adapter); static inline void e1000_irq_disable(struct e1000_adapter *adapter); static inline void e1000_irq_enable(struct e1000_adapter *adapter); static irqreturn_t e1000_intr(int irq, void *data, struct pt_regs *regs); @@ -182,6 +185,11 @@ static int e1000_resume(struct pci_dev *pdev); #endif +#ifdef CONFIG_NET_POLL_CONTROLLER +/* for netdump / net console */ +static void e1000_netpoll (struct net_device *dev); +#endif + struct notifier_block e1000_notifier_reboot = { .notifier_call = e1000_notify_reboot, .next = NULL, @@ -268,7 +276,7 @@ e1000_configure_rx(adapter); e1000_alloc_rx_buffers(adapter); - if((err = request_irq(netdev->irq, &e1000_intr, + if((err = request_irq(adapter->pdev->irq, &e1000_intr, SA_SHIRQ | SA_SAMPLE_RANDOM, netdev->name, netdev))) return err; @@ -285,7 +293,7 @@ struct net_device *netdev = adapter->netdev; e1000_irq_disable(adapter); - free_irq(netdev->irq, netdev); + free_irq(adapter->pdev->irq, netdev); del_timer_sync(&adapter->tx_fifo_stall_timer); del_timer_sync(&adapter->watchdog_timer); del_timer_sync(&adapter->phy_info_timer); @@ -336,6 +344,10 @@ if(adapter->hw.mac_type >= e1000_82544) E1000_WRITE_REG(&adapter->hw, WUC, 0); e1000_init_hw(&adapter->hw); + + /* Enable h/w to recognize an 802.1Q VLAN Ethernet packet */ + E1000_WRITE_REG(&adapter->hw, VET, ETHERNET_IEEE_VLAN_TYPE); + e1000_reset_adaptive(&adapter->hw); e1000_phy_get_info(&adapter->hw, &adapter->phy_info); } @@ -434,8 +446,10 @@ netdev->vlan_rx_register = e1000_vlan_rx_register; netdev->vlan_rx_add_vid = e1000_vlan_rx_add_vid; netdev->vlan_rx_kill_vid = e1000_vlan_rx_kill_vid; +#ifdef CONFIG_NET_POLL_CONTROLLER + netdev->poll_controller = e1000_netpoll; +#endif - netdev->irq = pdev->irq; netdev->mem_start = mmio_start; netdev->mem_end = mmio_start + mmio_len; netdev->base_addr = adapter->hw.io_base; @@ -669,6 +683,7 @@ atomic_set(&adapter->irq_sem, 1); spin_lock_init(&adapter->stats_lock); + spin_lock_init(&adapter->tx_lock); return 0; } @@ -749,7 +764,7 @@ * Return 0 on success, negative on failure **/ -static int +int e1000_setup_tx_resources(struct e1000_adapter *adapter) { struct e1000_desc_ring *txdr = &adapter->tx_ring; @@ -866,7 +881,7 @@ * Returns 0 on success, negative on failure **/ -static int +int e1000_setup_rx_resources(struct e1000_adapter *adapter) { struct e1000_desc_ring *rxdr = &adapter->rx_ring; @@ -1005,7 +1020,7 @@ * Free all transmit software resources **/ -static void +void e1000_free_tx_resources(struct e1000_adapter *adapter) { struct pci_dev *pdev = adapter->pdev; @@ -1073,7 +1088,7 @@ * Free all receive software resources **/ -static void +void e1000_free_rx_resources(struct e1000_adapter *adapter) { struct e1000_desc_ring *rx_ring = &adapter->rx_ring; @@ -1281,41 +1296,6 @@ e1000_leave_82542_rst(adapter); } -static void -e1000_tx_flush(struct e1000_adapter *adapter) -{ - uint32_t ctrl, tctl, txcw, icr; - - e1000_irq_disable(adapter); - - if(adapter->hw.mac_type < e1000_82543) { - /* Transmit Unit Reset */ - tctl = E1000_READ_REG(&adapter->hw, TCTL); - E1000_WRITE_REG(&adapter->hw, TCTL, tctl | E1000_TCTL_RST); - E1000_WRITE_REG(&adapter->hw, TCTL, tctl); - e1000_clean_tx_ring(adapter); - e1000_configure_tx(adapter); - } else { - txcw = E1000_READ_REG(&adapter->hw, TXCW); - E1000_WRITE_REG(&adapter->hw, TXCW, txcw & ~E1000_TXCW_ANE); - - ctrl = E1000_READ_REG(&adapter->hw, CTRL); - E1000_WRITE_REG(&adapter->hw, CTRL, ctrl | E1000_CTRL_SLU | - E1000_CTRL_ILOS); - - mdelay(10); - - e1000_clean_tx_irq(adapter); - E1000_WRITE_REG(&adapter->hw, CTRL, ctrl); - E1000_WRITE_REG(&adapter->hw, TXCW, txcw); - - /* clear the link status change interrupts this caused */ - icr = E1000_READ_REG(&adapter->hw, ICR); - } - - e1000_irq_enable(adapter); -} - /* need to wait a few seconds after link up to get diagnostic information from the phy */ static void @@ -1379,10 +1359,17 @@ struct net_device *netdev = adapter->netdev; struct e1000_desc_ring *txdr = &adapter->tx_ring; unsigned int i; + uint32_t link; e1000_check_for_link(&adapter->hw); - if(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) { + if((adapter->hw.media_type == e1000_media_type_internal_serdes) && + !(E1000_READ_REG(&adapter->hw, TXCW) & E1000_TXCW_ANE)) + link = !adapter->hw.serdes_link_down; + else + link = E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU; + + if(link) { if(!netif_carrier_ok(netdev)) { e1000_get_speed_and_duplex(&adapter->hw, &adapter->link_speed, @@ -1415,14 +1402,26 @@ } e1000_update_stats(adapter); + + adapter->hw.tx_packet_delta = adapter->stats.tpt - adapter->tpt_old; + adapter->tpt_old = adapter->stats.tpt; + adapter->hw.collision_delta = adapter->stats.colc - adapter->colc_old; + adapter->colc_old = adapter->stats.colc; + + adapter->gorcl = adapter->stats.gorcl - adapter->gorcl_old; + adapter->gorcl_old = adapter->stats.gorcl; + adapter->gotcl = adapter->stats.gotcl - adapter->gotcl_old; + adapter->gotcl_old = adapter->stats.gotcl; + e1000_update_adaptive(&adapter->hw); if(!netif_carrier_ok(netdev)) { if(E1000_DESC_UNUSED(txdr) + 1 < txdr->count) { - unsigned long flags; - spin_lock_irqsave(&netdev->xmit_lock, flags); - e1000_tx_flush(adapter); - spin_unlock_irqrestore(&netdev->xmit_lock, flags); + /* We've lost link, so the controller stops DMA, + * but we've got queued Tx work that's never going + * to get done, so reset controller to flush Tx. + * (Do the reset outside of interrupt context). */ + schedule_work(&adapter->tx_timeout_task); } } @@ -1783,6 +1782,7 @@ struct e1000_adapter *adapter = netdev->priv; unsigned int first; unsigned int tx_flags = 0; + unsigned long flags; int count; if(skb->len <= 0) { @@ -1790,10 +1790,13 @@ return 0; } + spin_lock_irqsave(&adapter->tx_lock, flags); + if(adapter->hw.mac_type == e1000_82547) { if(e1000_82547_fifo_workaround(adapter, skb)) { netif_stop_queue(netdev); mod_timer(&adapter->tx_fifo_stall_timer, jiffies); + spin_unlock_irqrestore(&adapter->tx_lock, flags); return 1; } } @@ -1814,11 +1817,14 @@ e1000_tx_queue(adapter, count, tx_flags); else { netif_stop_queue(netdev); + spin_unlock_irqrestore(&adapter->tx_lock, flags); return 1; } netdev->trans_start = jiffies; + spin_unlock_irqrestore(&adapter->tx_lock, flags); + return 0; } @@ -1860,6 +1866,7 @@ { struct e1000_adapter *adapter = netdev->priv; + e1000_update_stats(adapter); return &adapter->net_stats; } @@ -1918,7 +1925,7 @@ * @adapter: board private structure **/ -static void +void e1000_update_stats(struct e1000_adapter *adapter) { struct e1000_hw *hw = &adapter->hw; @@ -1936,8 +1943,7 @@ adapter->stats.crcerrs += E1000_READ_REG(hw, CRCERRS); adapter->stats.gprc += E1000_READ_REG(hw, GPRC); - adapter->gorcl = E1000_READ_REG(hw, GORCL); - adapter->stats.gorcl += adapter->gorcl; + adapter->stats.gorcl += E1000_READ_REG(hw, GORCL); adapter->stats.gorch += E1000_READ_REG(hw, GORCH); adapter->stats.bprc += E1000_READ_REG(hw, BPRC); adapter->stats.mprc += E1000_READ_REG(hw, MPRC); @@ -1949,8 +1955,6 @@ adapter->stats.prc1023 += E1000_READ_REG(hw, PRC1023); adapter->stats.prc1522 += E1000_READ_REG(hw, PRC1522); - spin_unlock_irqrestore(&adapter->stats_lock, flags); - /* the rest of the counters are only modified here */ adapter->stats.symerrs += E1000_READ_REG(hw, SYMERRS); @@ -1968,8 +1972,7 @@ adapter->stats.xofftxc += E1000_READ_REG(hw, XOFFTXC); adapter->stats.fcruc += E1000_READ_REG(hw, FCRUC); adapter->stats.gptc += E1000_READ_REG(hw, GPTC); - adapter->gotcl = E1000_READ_REG(hw, GOTCL); - adapter->stats.gotcl += adapter->gotcl; + adapter->stats.gotcl += E1000_READ_REG(hw, GOTCL); adapter->stats.gotch += E1000_READ_REG(hw, GOTCH); adapter->stats.rnbc += E1000_READ_REG(hw, RNBC); adapter->stats.ruc += E1000_READ_REG(hw, RUC); @@ -2051,6 +2054,8 @@ !e1000_read_phy_reg(hw, M88E1000_RX_ERR_CNTR, &phy_tmp)) adapter->phy_stats.receive_errors += phy_tmp; } + + spin_unlock_irqrestore(&adapter->stats_lock, flags); } /** @@ -2064,7 +2069,7 @@ atomic_inc(&adapter->irq_sem); E1000_WRITE_REG(&adapter->hw, IMC, ~0); E1000_WRITE_FLUSH(&adapter->hw); - synchronize_irq(adapter->netdev->irq); + synchronize_irq(adapter->pdev->irq); } /** @@ -2093,6 +2098,7 @@ { struct net_device *netdev = data; struct e1000_adapter *adapter = netdev->priv; + struct e1000_hw *hw = &adapter->hw; uint32_t icr = E1000_READ_REG(&adapter->hw, ICR); #ifndef CONFIG_E1000_NAPI unsigned int i; @@ -2102,7 +2108,7 @@ return IRQ_NONE; /* Not our interrupt */ if(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { - adapter->hw.get_link_status = 1; + hw->get_link_status = 1; mod_timer(&adapter->watchdog_timer, jiffies); } @@ -2114,14 +2120,30 @@ */ atomic_inc(&adapter->irq_sem); - E1000_WRITE_REG(&adapter->hw, IMC, ~0); + E1000_WRITE_REG(hw, IMC, ~0); __netif_rx_schedule(netdev); } #else + /* Writing IMC and IMS is needed for 82547. + Due to Hub Link bus being occupied, an interrupt + de-assertion message is not able to be sent. + When an interrupt assertion message is generated later, + two messages are re-ordered and sent out. + That causes APIC to think 82547 is in de-assertion + state, while 82547 is in assertion state, resulting + in dead lock. Writing IMC forces 82547 into + de-assertion state. + */ + if(hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2) + e1000_irq_disable(adapter); + for(i = 0; i < E1000_MAX_INTR; i++) if(!e1000_clean_rx_irq(adapter) & !e1000_clean_tx_irq(adapter)) break; + + if(hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2) + e1000_irq_enable(adapter); #endif return IRQ_HANDLED; @@ -2146,7 +2168,7 @@ *budget -= work_done; netdev->quota -= work_done; - if(work_done < work_to_do) { + if(work_done < work_to_do || !netif_running(netdev)) { netif_rx_complete(netdev); e1000_irq_enable(adapter); } @@ -2171,6 +2193,8 @@ unsigned int i, eop; boolean_t cleaned = FALSE; + spin_lock(&adapter->tx_lock); + i = tx_ring->next_to_clean; eop = tx_ring->buffer_info[i].next_to_watch; eop_desc = E1000_TX_DESC(*tx_ring, eop); @@ -2215,6 +2239,8 @@ if(cleaned && netif_queue_stopped(netdev) && netif_carrier_ok(netdev)) netif_wake_queue(netdev); + spin_unlock(&adapter->tx_lock); + return cleaned; } @@ -2642,13 +2668,13 @@ } uint32_t -e1000_io_read(struct e1000_hw *hw, uint32_t port) +e1000_io_read(struct e1000_hw *hw, unsigned long port) { return inl(port); } void -e1000_io_write(struct e1000_hw *hw, uint32_t port, uint32_t value) +e1000_io_write(struct e1000_hw *hw, unsigned long port, uint32_t value) { outl(value, port); } @@ -2665,8 +2691,6 @@ if(grp) { /* enable VLAN tag insert/strip */ - E1000_WRITE_REG(&adapter->hw, VET, ETHERNET_IEEE_VLAN_TYPE); - ctrl = E1000_READ_REG(&adapter->hw, CTRL); ctrl |= E1000_CTRL_VME; E1000_WRITE_REG(&adapter->hw, CTRL, ctrl); @@ -2897,6 +2921,22 @@ } return 0; +} +#endif + +#ifdef CONFIG_NET_POLL_CONTROLLER +/* + * Polling 'interrupt' - used by things like netconsole to send skbs + * without having to re-enable interrupts. It's not called while + * the interrupt routine is executing. + */ + +static void e1000_netpoll (struct net_device *dev) +{ + struct e1000_adapter *adapter = dev->priv; + disable_irq(adapter->pdev->irq); + e1000_intr (adapter->pdev->irq, dev, NULL); + enable_irq(adapter->pdev->irq); } #endif diff -Nru a/drivers/net/e1000/e1000_osdep.h b/drivers/net/e1000/e1000_osdep.h --- a/drivers/net/e1000/e1000_osdep.h Wed Feb 4 16:51:34 2004 +++ b/drivers/net/e1000/e1000_osdep.h Wed Feb 4 16:51:34 2004 @@ -1,7 +1,7 @@ /******************************************************************************* - Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. + Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free diff -Nru a/drivers/net/e1000/e1000_param.c b/drivers/net/e1000/e1000_param.c --- a/drivers/net/e1000/e1000_param.c Wed Feb 4 16:51:36 2004 +++ b/drivers/net/e1000/e1000_param.c Wed Feb 4 16:51:36 2004 @@ -1,7 +1,7 @@ /******************************************************************************* - Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved. + Copyright(c) 1999 - 2004 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -63,7 +63,7 @@ /* Transmit Descriptor Count * * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers - * Valid Range: 80-4096 for 82544 + * Valid Range: 80-4096 for 82544 and newer * * Default Value: 256 */ @@ -73,7 +73,7 @@ /* Receive Descriptor Count * * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers - * Valid Range: 80-4096 for 82544 + * Valid Range: 80-4096 for 82544 and newer * * Default Value: 256 */ @@ -196,16 +196,6 @@ #define AUTONEG_ADV_MASK 0x2F #define FLOW_CONTROL_DEFAULT FLOW_CONTROL_FULL -#define DEFAULT_TXD 256 -#define MAX_TXD 256 -#define MIN_TXD 80 -#define MAX_82544_TXD 4096 - -#define DEFAULT_RXD 256 -#define MAX_RXD 256 -#define MIN_RXD 80 -#define MAX_82544_RXD 4096 - #define DEFAULT_RDTR 0 #define MAX_RXDELAY 0xFFFF #define MIN_RXDELAY 0 @@ -299,7 +289,7 @@ * e1000_check_options - Range Checking for Command Line Parameters * @adapter: board private structure * - * This routine checks all command line paramters for valid user + * This routine checks all command line parameters for valid user * input. If an invalid value is given, or if no user specified * value exists, a default value is used. The final value is stored * in a variable in the adapter structure. @@ -320,14 +310,15 @@ struct e1000_option opt = { .type = range_option, .name = "Transmit Descriptors", - .err = "using default of " __MODULE_STRING(DEFAULT_TXD), - .def = DEFAULT_TXD, - .arg = { .r = { .min = MIN_TXD }} + .err = "using default of " + __MODULE_STRING(E1000_DEFAULT_TXD), + .def = E1000_DEFAULT_TXD, + .arg = { .r = { .min = E1000_MIN_TXD }} }; struct e1000_desc_ring *tx_ring = &adapter->tx_ring; e1000_mac_type mac_type = adapter->hw.mac_type; opt.arg.r.max = mac_type < e1000_82544 ? - MAX_TXD : MAX_82544_TXD; + E1000_MAX_TXD : E1000_MAX_82544_TXD; tx_ring->count = TxDescriptors[bd]; e1000_validate_option(&tx_ring->count, &opt); @@ -337,13 +328,15 @@ struct e1000_option opt = { .type = range_option, .name = "Receive Descriptors", - .err = "using default of " __MODULE_STRING(DEFAULT_RXD), - .def = DEFAULT_RXD, - .arg = { .r = { .min = MIN_RXD }} + .err = "using default of " + __MODULE_STRING(E1000_DEFAULT_RXD), + .def = E1000_DEFAULT_RXD, + .arg = { .r = { .min = E1000_MIN_RXD }} }; struct e1000_desc_ring *rx_ring = &adapter->rx_ring; e1000_mac_type mac_type = adapter->hw.mac_type; - opt.arg.r.max = mac_type < e1000_82544 ? MAX_RXD : MAX_82544_RXD; + opt.arg.r.max = mac_type < e1000_82544 ? E1000_MAX_RXD : + E1000_MAX_82544_RXD; rx_ring->count = RxDescriptors[bd]; e1000_validate_option(&rx_ring->count, &opt); @@ -446,13 +439,19 @@ }; adapter->itr = InterruptThrottleRate[bd]; - if(adapter->itr == 0) { - printk(KERN_INFO "%s turned off\n", opt.name); - } else if(adapter->itr == 1 || adapter->itr == -1) { - /* Dynamic mode */ + switch(adapter->itr) { + case -1: adapter->itr = 1; - } else { + break; + case 0: + printk(KERN_INFO "%s turned off\n", opt.name); + break; + case 1: + printk(KERN_INFO "%s set to dynamic mode\n", opt.name); + break; + default: e1000_validate_option(&adapter->itr, &opt); + break; } } @@ -490,9 +489,9 @@ printk(KERN_INFO "Duplex not valid for fiber adapters, " "parameter ignored\n"); } - if((AutoNeg[bd] != OPTION_UNSET)) { - printk(KERN_INFO "AutoNeg not valid for fiber adapters, " - "parameter ignored\n"); + if((AutoNeg[bd] != OPTION_UNSET) && (AutoNeg[bd] != 0x20)) { + printk(KERN_INFO "AutoNeg other than Full/1000 is " + "not valid for fiber adapters, parameter ignored\n"); } } diff -Nru a/drivers/net/fealnx.c b/drivers/net/fealnx.c --- a/drivers/net/fealnx.c Wed Feb 4 16:51:36 2004 +++ b/drivers/net/fealnx.c Wed Feb 4 16:51:36 2004 @@ -1426,7 +1426,7 @@ writel(0, dev->base_addr + IMR); ioaddr = dev->base_addr; - np = (struct netdev_private *) dev->priv; + np = dev->priv; do { u32 intr_status = readl(ioaddr + ISR); diff -Nru a/drivers/net/ne2k-pci.c b/drivers/net/ne2k-pci.c --- a/drivers/net/ne2k-pci.c Wed Feb 4 16:51:34 2004 +++ b/drivers/net/ne2k-pci.c Wed Feb 4 16:51:34 2004 @@ -532,8 +532,12 @@ insl(NE_BASE + NE_DATAPORT, buf, count>>2); if (count & 3) { buf += count & ~3; - if (count & 2) - *((u16*)buf)++ = le16_to_cpu(inw(NE_BASE + NE_DATAPORT)); + if (count & 2) { + u16 *b = (u16 *)buf; + + *b++ = le16_to_cpu(inw(NE_BASE + NE_DATAPORT)); + buf = (char *)b; + } if (count & 1) *buf = inb(NE_BASE + NE_DATAPORT); } @@ -593,8 +597,12 @@ outsl(NE_BASE + NE_DATAPORT, buf, count>>2); if (count & 3) { buf += count & ~3; - if (count & 2) - outw(cpu_to_le16(*((u16*)buf)++), NE_BASE + NE_DATAPORT); + if (count & 2) { + u16 *b = (u16 *)buf; + + outw(cpu_to_le16(*b++), NE_BASE + NE_DATAPORT); + buf = (char *)b; + } } } diff -Nru a/drivers/net/ppp_deflate.c b/drivers/net/ppp_deflate.c --- a/drivers/net/ppp_deflate.c Wed Feb 4 16:51:37 2004 +++ b/drivers/net/ppp_deflate.c Wed Feb 4 16:51:37 2004 @@ -351,7 +351,7 @@ state->w_size = w_size; state->strm.next_out = NULL; state->strm.workspace = kmalloc(zlib_inflate_workspacesize(), - GFP_KERNEL); + GFP_KERNEL|__GFP_REPEAT); if (state->strm.workspace == NULL) goto out_free; diff -Nru a/drivers/net/sk98lin/h/lm80.h b/drivers/net/sk98lin/h/lm80.h --- a/drivers/net/sk98lin/h/lm80.h Wed Feb 4 16:51:37 2004 +++ b/drivers/net/sk98lin/h/lm80.h Wed Feb 4 16:51:37 2004 @@ -2,8 +2,6 @@ * * Name: lm80.h * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.6 $ - * Date: $Date: 2003/05/13 17:26:52 $ * Purpose: Contains all defines for the LM80 Chip * (National Semiconductor). * @@ -20,32 +18,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * $Log: lm80.h,v $ - * Revision 1.6 2003/05/13 17:26:52 mkarl - * Editorial changes. - * - * Revision 1.5 2003/03/31 07:15:18 mkarl - * Corrected Copyright. - * Editorial changes. - * - * Revision 1.4 2002/04/25 11:04:10 rschmidt - * Editorial changes - * - * Revision 1.3 1999/11/22 13:41:19 cgoos - * Changed license header to GPL. - * - * Revision 1.2 1999/03/12 13:26:51 malthoff - * remove __STDC__. - * - * Revision 1.1 1998/06/19 09:28:31 malthoff - * created. - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skaddr.h b/drivers/net/sk98lin/h/skaddr.h --- a/drivers/net/sk98lin/h/skaddr.h Wed Feb 4 16:51:35 2004 +++ b/drivers/net/sk98lin/h/skaddr.h Wed Feb 4 16:51:35 2004 @@ -2,8 +2,6 @@ * * Name: skaddr.h * Project: Gigabit Ethernet Adapters, ADDR-Modul - * Version: $Revision: 1.29 $ - * Date: $Date: 2003/05/13 16:57:24 $ * Purpose: Header file for Address Management (MC, UC, Prom). * ******************************************************************************/ @@ -19,112 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skaddr.h,v $ - * Revision 1.29 2003/05/13 16:57:24 mkarl - * Changes for SLIM driver. - * Editorial changes. - * - * Revision 1.28 2003/04/15 09:33:22 tschilli - * Copyright messages changed. - * - * Revision 1.27 2003/04/14 15:55:11 tschilli - * "#error C++ is not yet supported." removed. - * - * Revision 1.26 2002/11/15 07:24:42 tschilli - * SK_ADDR_EQUAL macro fixed. - * - * Revision 1.25 2002/06/10 13:55:18 tschilli - * Changes for handling YUKON. - * All changes are internally and not visible to the programmer - * using this module. - * - * Revision 1.24 2001/01/22 13:41:34 rassmann - * Supporting two nets on dual-port adapters. - * - * Revision 1.23 2000/08/10 11:27:50 rassmann - * Editorial changes. - * Preserving 32-bit alignment in structs for the adapter context. - * - * Revision 1.22 2000/08/07 11:10:40 rassmann - * Editorial changes. - * - * Revision 1.21 2000/05/04 09:39:59 rassmann - * Editorial changes. - * Corrected multicast address hashing. - * - * Revision 1.20 1999/11/22 13:46:14 cgoos - * Changed license header to GPL. - * Allowing overwrite for SK_ADDR_EQUAL. - * - * Revision 1.19 1999/05/28 10:56:07 rassmann - * Editorial changes. - * - * Revision 1.18 1999/04/06 17:22:04 rassmann - * Added private "ActivePort". - * - * Revision 1.17 1999/01/14 16:18:19 rassmann - * Corrected multicast initialization. - * - * Revision 1.16 1999/01/04 10:30:36 rassmann - * SkAddrOverride only possible after SK_INIT_IO phase. - * - * Revision 1.15 1998/12/29 13:13:11 rassmann - * An address override is now preserved in the SK_INIT_IO phase. - * All functions return an int now. - * Extended parameter checking. - * - * Revision 1.14 1998/11/24 12:39:45 rassmann - * Reserved multicast entry for BPDU address. - * 13 multicast entries left for protocol. - * - * Revision 1.13 1998/11/13 17:24:32 rassmann - * Changed return value of SkAddrOverride to int. - * - * Revision 1.12 1998/11/13 16:56:19 rassmann - * Added macro SK_ADDR_COMPARE. - * Changed return type of SkAddrOverride to SK_BOOL. - * - * Revision 1.11 1998/10/28 18:16:35 rassmann - * Avoiding I/Os before SK_INIT_RUN level. - * Aligning InexactFilter. - * - * Revision 1.10 1998/10/22 11:39:10 rassmann - * Corrected signed/unsigned mismatches. - * - * Revision 1.9 1998/10/15 15:15:49 rassmann - * Changed Flags Parameters from SK_U8 to int. - * Checked with lint. - * - * Revision 1.8 1998/09/24 19:15:12 rassmann - * Code cleanup. - * - * Revision 1.7 1998/09/18 20:22:13 rassmann - * Added HW access. - * - * Revision 1.6 1998/09/04 19:40:20 rassmann - * Interface enhancements. - * - * Revision 1.5 1998/09/04 12:40:57 rassmann - * Interface cleanup. - * - * Revision 1.4 1998/09/04 12:14:13 rassmann - * Interface cleanup. - * - * Revision 1.3 1998/09/02 16:56:40 rassmann - * Updated interface. - * - * Revision 1.2 1998/08/27 14:26:09 rassmann - * Updated interface. - * - * Revision 1.1 1998/08/21 08:31:08 rassmann - * First public version. * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skcsum.h b/drivers/net/sk98lin/h/skcsum.h --- a/drivers/net/sk98lin/h/skcsum.h Wed Feb 4 16:51:33 2004 +++ b/drivers/net/sk98lin/h/skcsum.h Wed Feb 4 16:51:33 2004 @@ -2,8 +2,6 @@ * * Name: skcsum.h * Project: GEnesis - SysKonnect SK-NET Gigabit Ethernet (SK-98xx) - * Version: $Revision: 1.10 $ - * Date: $Date: 2003/08/20 13:59:57 $ * Purpose: Store/verify Internet checksum in send/receive packets. * ******************************************************************************/ @@ -18,52 +16,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skcsum.h,v $ - * Revision 1.10 2003/08/20 13:59:57 mschmid - * Changed notation of #ifndef SkCsCalculateChecksum to - * #ifndef SK_CS_CALCULATE_CHECKSUM - * - * Revision 1.9 2001/02/06 11:21:39 rassmann - * Editorial changes. - * - * Revision 1.8 2001/02/06 11:15:36 rassmann - * Supporting two nets on dual-port adapters. - * - * Revision 1.7 2000/06/29 13:17:05 rassmann - * Corrected reception of a packet with UDP checksum == 0 (which means there - * is no UDP checksum). - * - * Revision 1.6 2000/02/28 12:33:44 cgoos - * Changed C++ style comments to C style. - * - * Revision 1.5 2000/02/21 12:10:05 cgoos - * Fixed license comment. - * - * Revision 1.4 2000/02/21 11:08:37 cgoos - * Merged changes back into common source. - * - * Revision 1.1 1999/07/26 14:47:49 mkarl - * changed from common source to windows specific source - * added return SKCS_STATUS_IP_CSUM_ERROR_UDP and - * SKCS_STATUS_IP_CSUM_ERROR_TCP to pass the NidsTester - * changes for Tx csum offload - * - * Revision 1.2 1998/09/04 12:16:34 mhaveman - * Checked in for Stephan to allow compilation. - * -Added definition SK_CSUM_EVENT_CLEAR_PROTO_STATS to clear statistic - * -Added prototype for SkCsEvent() - * - * Revision 1.1 1998/09/01 15:36:53 swolf - * initial revision - * - * 01-Sep-1998 sw Created. * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skdebug.h b/drivers/net/sk98lin/h/skdebug.h --- a/drivers/net/sk98lin/h/skdebug.h Wed Feb 4 16:51:35 2004 +++ b/drivers/net/sk98lin/h/skdebug.h Wed Feb 4 16:51:35 2004 @@ -2,8 +2,6 @@ * * Name: skdebug.h * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.14 $ - * Date: $Date: 2003/05/13 17:26:00 $ * Purpose: SK specific DEBUG support * ******************************************************************************/ @@ -19,58 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * $Log: skdebug.h,v $ - * Revision 1.14 2003/05/13 17:26:00 mkarl - * Editorial changes. - * - * Revision 1.13 2003/03/31 07:16:39 mkarl - * Corrected Copyright. - * - * Revision 1.12 2002/07/15 15:37:13 rschmidt - * Power Management support - * Editorial changes - * - * Revision 1.11 2002/04/25 11:04:39 rschmidt - * Editorial changes - * - * Revision 1.10 1999/11/22 13:47:40 cgoos - * Changed license header to GPL. - * - * Revision 1.9 1999/09/14 14:02:43 rwahl - * Added SK_DBGMOD_PECP. - * - * Revision 1.8 1998/11/25 08:31:54 gklug - * fix: no C++ comments allowed in common sources - * - * Revision 1.7 1998/11/24 16:47:24 swolf - * Driver may now define its own SK_DBG_MSG() (eg. in "h/skdrv1st.h"). - * - * Revision 1.6 1998/10/28 10:23:55 rassmann - * ADDED SK_DBGMOD_ADDR. - * - * Revision 1.5 1998/10/22 09:43:55 gklug - * add: CSUM module - * - * Revision 1.4 1998/10/01 07:54:44 gklug - * add: PNMI debug module - * - * Revision 1.3 1998/09/18 08:32:34 afischer - * Macros changed according ssr-spec.: - * SK_DBG_MODCHK -> SK_DBG_CHKMOD - * SK_DBG_CATCHK -> SK_DBG_CHKCAT - * - * Revision 1.2 1998/07/03 14:38:25 malthoff - * Add category SK_DBGCAT_FATAL. - * - * Revision 1.1 1998/06/19 13:39:01 malthoff - * created. - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skdrv1st.h b/drivers/net/sk98lin/h/skdrv1st.h --- a/drivers/net/sk98lin/h/skdrv1st.h Wed Feb 4 16:51:33 2004 +++ b/drivers/net/sk98lin/h/skdrv1st.h Wed Feb 4 16:51:33 2004 @@ -2,8 +2,6 @@ * * Name: skdrv1st.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.4 $ - * Date: $Date: 2003/11/12 14:28:14 $ * Purpose: First header file for driver and all other modules * ******************************************************************************/ @@ -19,87 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skdrv1st.h,v $ - * Revision 1.4 2003/11/12 14:28:14 rroesler - * Fix: use dedicated ip_fast_csum() on X86_64 systems - * - * Revision 1.3 2003/10/07 08:16:52 mlindner - * Fix: Copyright changes - * - * Revision 1.2 2003/09/29 12:05:59 mlindner - * Fix: Added define SK_CS_CALCULSTE_CHECKSUM - * - * Revision 1.1 2003/07/21 07:22:43 rroesler - * Fix: Re-Enter after CVS crash - * - * Revision 1.15 2003/07/17 14:54:09 rroesler - * Fix: Corrected SK_PNMI_READ macros to copy right amount of bytes - * - * Revision 1.14 2003/06/03 14:36:32 mlindner - * Add: Additions for SK_SLIM - * - * Revision 1.13 2003/05/26 14:03:06 mlindner - * Add: Support for SLIM skaddr - * - * Revision 1.12 2003/05/26 12:56:39 mlindner - * Add: Support for Kernel 2.5/2.6 - * Add: New SkOsGetTimeCurrent function - * Add: SK_PNMI_HUNDREDS_SEC definition - * Fix: SK_TICKS_PER_SEC on Intel Itanium2 - * - * Revision 1.11 2003/02/25 14:16:40 mlindner - * Fix: Copyright statement - * - * Revision 1.10 2002/10/02 12:46:02 mlindner - * Add: Support for Yukon - * - * Revision 1.9.2.2 2001/12/07 12:06:42 mlindner - * Fix: malloc -> slab changes - * - * Revision 1.9.2.1 2001/03/12 16:50:59 mlindner - * chg: kernel 2.4 adaption - * - * Revision 1.9 2001/01/22 14:16:04 mlindner - * added ProcFs functionality - * Dual Net functionality integrated - * Rlmt networks added - * - * Revision 1.8 2000/02/21 12:19:18 cgoos - * Added default for SK_DEBUG_CHKMOD/_CHKCAT - * - * Revision 1.7 1999/11/22 13:50:00 cgoos - * Changed license header to GPL. - * Added overwrite for several functions. - * Removed linux 2.0.x definitions. - * Removed PCI vendor ID definition (now in kernel). - * - * Revision 1.6 1999/07/27 08:03:33 cgoos - * Changed SK_IN/OUT macros to readX/writeX instead of memory - * accesses (necessary for ALPHA). - * - * Revision 1.5 1999/07/23 12:10:21 cgoos - * Removed SK_RLMT_SLOW_LOOKAHEAD define. - * - * Revision 1.4 1999/07/14 12:31:13 cgoos - * Added SK_RLMT_SLOW_LOOKAHEAD define. - * - * Revision 1.3 1999/04/07 10:12:54 cgoos - * Added check for KERNEL and OPTIMIZATION defines. - * - * Revision 1.2 1999/03/01 08:51:47 cgoos - * Fixed pcibios_read/write definitions. - * - * Revision 1.1 1999/02/16 07:40:49 cgoos - * First version. - * - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skdrv2nd.h b/drivers/net/sk98lin/h/skdrv2nd.h --- a/drivers/net/sk98lin/h/skdrv2nd.h Wed Feb 4 16:51:37 2004 +++ b/drivers/net/sk98lin/h/skdrv2nd.h Wed Feb 4 16:51:37 2004 @@ -2,8 +2,6 @@ * * Name: skdrv2nd.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.10 $ - * Date: $Date: 2003/12/11 16:04:45 $ * Purpose: Second header file for driver and all other modules * ******************************************************************************/ @@ -19,122 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skdrv2nd.h,v $ - * Revision 1.10 2003/12/11 16:04:45 mlindner - * Add: New pnmi data backup structure - * - * Revision 1.9 2003/11/10 09:31:37 rroesler - * Add: pnmiBackup structure for DIAG backup restore - * - * Revision 1.8 2003/10/22 14:18:32 rroesler - * Fix: DIAG handling for DualNet cards - * - * Revision 1.7 2003/10/07 09:34:59 mlindner - * Add: New defines for lower and upper range values (interrupt moderation) - * - * Revision 1.6 2003/10/07 08:16:51 mlindner - * Fix: Copyright changes - * - * Revision 1.5 2003/09/01 13:10:39 rroesler - * Add: Prototypes for DIAG Attach/Detach functions - * - * Revision 1.4 2003/09/01 12:33:38 rroesler - * Add: Defines for optimized DIAG interaction - * - * Revision 1.3 2003/08/12 16:51:18 mlindner - * Fix: UDP and TCP Proto checks - * Fix: UDP header offset - * - * Revision 1.2 2003/08/07 10:50:54 mlindner - * Add: Speed and HW-Csum support for Yukon Lite chipset - * - * Revision 1.1 2003/07/21 07:25:29 rroesler - * Fix: Re-Enter after CVS crash - * - * Revision 1.19 2003/07/07 09:53:10 rroesler - * Fix: Removed proprietary RxTx defines and used the ones from skgehw.h instead - * - * Revision 1.18 2003/06/12 07:54:14 mlindner - * Fix: Changed Descriptor Alignment to 64 Byte - * - * Revision 1.17 2003/05/26 12:56:39 mlindner - * Add: Support for Kernel 2.5/2.6 - * Add: New SkOsGetTimeCurrent function - * Add: SK_PNMI_HUNDREDS_SEC definition - * Fix: SK_TICKS_PER_SEC on Intel Itanium2 - * - * Revision 1.16 2003/03/21 14:56:18 rroesler - * Added code regarding interrupt moderation - * - * Revision 1.15 2003/02/25 14:16:40 mlindner - * Fix: Copyright statement - * - * Revision 1.14 2003/02/25 13:26:26 mlindner - * Add: Support for various vendors - * - * Revision 1.13 2002/10/02 12:46:02 mlindner - * Add: Support for Yukon - * - * Revision 1.12.2.2 2001/09/05 12:14:50 mlindner - * add: New hardware revision int - * - * Revision 1.12.2.1 2001/03/12 16:50:59 mlindner - * chg: kernel 2.4 adaption - * - * Revision 1.12 2001/03/01 12:52:15 mlindner - * Fixed ring size - * - * Revision 1.11 2001/02/19 13:28:02 mlindner - * Changed PNMI parameter values - * - * Revision 1.10 2001/01/22 14:16:04 mlindner - * added ProcFs functionality - * Dual Net functionality integrated - * Rlmt networks added - * - * Revision 1.1 2000/10/05 19:46:50 phargrov - * Add directory src/vipk_devs_nonlbl/vipk_sk98lin/ - * This is the SysKonnect SK-98xx Gigabit Ethernet driver, - * contributed by SysKonnect. - * - * Revision 1.9 2000/02/21 10:39:55 cgoos - * Added flag for jumbo support usage. - * - * Revision 1.8 1999/11/22 13:50:44 cgoos - * Changed license header to GPL. - * Fixed two comments. - * - * Revision 1.7 1999/09/28 12:38:21 cgoos - * Added CheckQueue to SK_AC. - * - * Revision 1.6 1999/07/27 08:04:05 cgoos - * Added checksumming variables to SK_AC. - * - * Revision 1.5 1999/03/29 12:33:26 cgoos - * Rreversed to fine lock granularity. - * - * Revision 1.4 1999/03/15 12:14:02 cgoos - * Added DriverLock to SK_AC. - * Removed other locks. - * - * Revision 1.3 1999/03/01 08:52:27 cgoos - * Changed pAC->PciDev declaration. - * - * Revision 1.2 1999/02/18 10:57:14 cgoos - * Removed SkDrvTimeStamp prototype. - * Fixed SkGeOsGetTime prototype. - * - * Revision 1.1 1999/02/16 07:41:01 cgoos - * First version. - * - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skerror.h b/drivers/net/sk98lin/h/skerror.h --- a/drivers/net/sk98lin/h/skerror.h Wed Feb 4 16:51:35 2004 +++ b/drivers/net/sk98lin/h/skerror.h Wed Feb 4 16:51:35 2004 @@ -2,8 +2,6 @@ * * Name: skerror.h * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.7 $ - * Date: $Date: 2003/05/13 17:25:13 $ * Purpose: SK specific Error log support * ******************************************************************************/ @@ -19,38 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * $Log: skerror.h,v $ - * Revision 1.7 2003/05/13 17:25:13 mkarl - * Editorial changes. - * - * Revision 1.6 2003/03/31 07:17:48 mkarl - * Corrected Copyright. - * - * Revision 1.5 2002/04/25 11:05:10 rschmidt - * Editorial changes - * - * Revision 1.4 1999/11/22 13:51:59 cgoos - * Changed license header to GPL. - * - * Revision 1.3 1999/09/14 14:04:42 rwahl - * Added error base SK_ERRBASE_PECP. - * Changed error base for driver. - * - * Revision 1.2 1998/08/11 11:15:41 gklug - * chg: comments - * - * Revision 1.1 1998/08/11 11:09:38 gklug - * add: error bases - * add: error Classes - * first version - * - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skgedrv.h b/drivers/net/sk98lin/h/skgedrv.h --- a/drivers/net/sk98lin/h/skgedrv.h Wed Feb 4 16:51:36 2004 +++ b/drivers/net/sk98lin/h/skgedrv.h Wed Feb 4 16:51:36 2004 @@ -2,8 +2,6 @@ * * Name: skgedrv.h * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.10 $ - * Date: $Date: 2003/07/04 12:25:01 $ * Purpose: Interface with the driver * ******************************************************************************/ @@ -19,47 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skgedrv.h,v $ - * Revision 1.10 2003/07/04 12:25:01 rschmidt - * Added event SK_DRV_DOWNSHIFT_DET for Downshift 4-Pair / 2-Pair - * - * Revision 1.9 2003/05/13 17:24:21 mkarl - * Added events SK_DRV_LINK_UP and SK_DRV_LINK_DOWN for drivers not using - * RLMT (SK_NO_RLMT). - * Editorial changes. - * - * Revision 1.8 2003/03/31 07:18:54 mkarl - * Corrected Copyright. - * - * Revision 1.7 2003/03/18 09:43:47 rroesler - * Added new event for timer - * - * Revision 1.6 2002/07/15 15:38:01 rschmidt - * Power Management support - * Editorial changes - * - * Revision 1.5 2002/04/25 11:05:47 rschmidt - * Editorial changes - * - * Revision 1.4 1999/11/22 13:52:46 cgoos - * Changed license header to GPL. - * - * Revision 1.3 1998/12/01 13:31:39 cgoos - * SWITCH INTERN Event added. - * - * Revision 1.2 1998/11/25 08:28:38 gklug - * rmv: PORT SWITCH Event - * - * Revision 1.1 1998/09/29 06:14:07 gklug - * add: driver events (initial version) - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skgehw.h b/drivers/net/sk98lin/h/skgehw.h --- a/drivers/net/sk98lin/h/skgehw.h Wed Feb 4 16:51:37 2004 +++ b/drivers/net/sk98lin/h/skgehw.h Wed Feb 4 16:51:37 2004 @@ -2,8 +2,6 @@ * * Name: skgehw.h * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.56 $ - * Date: $Date: 2003/09/23 09:01:00 $ * Purpose: Defines and Macros for the Gigabit Ethernet Adapter Product Family * ******************************************************************************/ @@ -19,236 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * $Log: skgehw.h,v $ - * Revision 1.56 2003/09/23 09:01:00 malthoff - * Minor change: Define I2C device size constants as long. - * - * Revision 1.55 2003/09/16 14:03:34 rschmidt - * Added define for YUKON-Lite Rev. A1,A2 Chip Revision - * Moved defines for PHY power down modes to skgeinit.h - * Editorial changes - * - * Revision 1.54 2003/09/16 07:37:58 mschmid - * Added defines for Marvell PHY low power modes - * - * Revision 1.53 2003/07/04 12:39:01 rschmidt - * Added SK_FAR to pointers in XM_IN32() and GM_IN32() macros (for PXE) - * Editorial changes - * - * Revision 1.52 2003/05/13 17:16:36 mkarl - * Added SK_FAR for PXE. - * Editorial changes. - * - * Revision 1.51 2003/04/08 16:31:50 rschmidt - * Added defines for new Chip IDs (YUKON-Lite, YUKON-LP) - * Editorial changes - * - * Revision 1.50 2003/03/31 07:29:45 mkarl - * Corrected Copyright. - * Editorial changes. - * - * Revision 1.49 2003/01/28 09:43:49 rschmidt - * Added defines for PCI-Spec. 2.3 IRQ - * Added defines for CLK_RUN (YUKON-Lite) - * Editorial changes - * - * Revision 1.48 2002/12/05 10:25:11 rschmidt - * Added defines for Half Duplex Burst Mode On/Off - * Added defines for Rx GMAC FIFO Flush feature - * Editorial changes - * - * Revision 1.47 2002/11/12 17:01:31 rschmidt - * Added defines for WOL_CTL_DEFAULT - * Editorial changes - * - * Revision 1.46 2002/10/14 14:47:57 rschmidt - * Corrected bit mask for HW self test results - * Added defines for WOL Registers - * Editorial changes - * - * Revision 1.45 2002/10/11 09:25:22 mkarl - * Added bit mask for HW self test results. - * - * Revision 1.44 2002/08/16 14:44:36 rschmidt - * Added define GPC_HWCFG_GMII_FIB for YUKON Fiber - * - * Revision 1.43 2002/08/12 13:31:50 rschmidt - * Corrected macros for GMAC Address Registers: GM_INADDR(), - * GM_OUTADDR(), GM_INHASH, GM_OUTHASH. - * Editorial changes - * - * Revision 1.42 2002/08/08 15:37:56 rschmidt - * Added defines for Power Management Capabilities - * Editorial changes - * - * Revision 1.41 2002/07/23 16:02:25 rschmidt - * Added macro WOL_REG() to access WOL reg. (HW-Bug in YUKON 1st rev.) - * - * Revision 1.40 2002/07/15 15:41:37 rschmidt - * Added new defines for Power Management Cap. & Control - * Editorial changes - * - * Revision 1.39 2002/06/10 09:37:07 rschmidt - * Added macros for the ADDR-Module - * - * Revision 1.38 2002/06/05 08:15:19 rschmidt - * Added defines for WOL Registers - * Editorial changes - * - * Revision 1.37 2002/04/25 11:39:23 rschmidt - * Added new defines for PCI Our Register 1 - * Added new registers and defines for YUKON (Rx FIFO, Tx FIFO, - * Time Stamp Timer, GMAC Control, GPHY Control,Link Control, - * GMAC IRQ Source and Mask, Wake-up Frame Pattern Match); - * Added new defines for Control/Status (VAUX available) - * Added Chip ID for YUKON - * Added define for descriptors with UDP ext. for YUKON - * Added macros to access the GMAC - * Added new Phy Type for Marvell 88E1011S (GPHY) - * Editorial changes - * - * Revision 1.36 2000/11/09 12:32:49 rassmann - * Renamed variables. - * - * Revision 1.35 2000/05/19 10:17:13 cgoos - * Added inactivity check in PHY_READ (in DEBUG mode only). - * - * Revision 1.34 1999/11/22 13:53:40 cgoos - * Changed license header to GPL. - * - * Revision 1.33 1999/08/27 11:17:10 malthoff - * It's more savely to put brackets around macro parameters. - * Brackets added for PHY_READ and PHY_WRITE. - * - * Revision 1.32 1999/05/19 07:31:01 cgoos - * Changes for 1000Base-T. - * Added HWAC_LINK_LED macro. - * - * Revision 1.31 1999/03/12 13:27:40 malthoff - * Remove __STDC__. - * - * Revision 1.30 1999/02/09 09:28:20 malthoff - * Add PCI_ERRBITS. - * - * Revision 1.29 1999/01/26 08:55:48 malthoff - * Bugfix: The 16 bit field relations inside the descriptor are - * endianess dependend if the descriptor reversal feature - * (PCI_REV_DESC bit in PCI_OUR_REG_2) is enabled. - * Drivers which use this feature has to set the define - * SK_USE_REV_DESC. - * - * Revision 1.28 1998/12/10 11:10:22 malthoff - * bug fix: IS_IRQ_STAT and IS_IRQ_MST_ERR has been twisted. - * - * Revision 1.27 1998/11/13 14:19:21 malthoff - * Bug Fix: The bit definition of B3_PA_CTRL has completely - * changed from HW Spec v1.3 to v1.5. - * - * Revision 1.26 1998/11/04 08:31:48 cgoos - * Fixed byte ordering in XM_OUTADDR/XM_OUTHASH macros. - * - * Revision 1.25 1998/11/04 07:16:25 cgoos - * Changed byte ordering in XM_INADDR/XM_INHASH again. - * - * Revision 1.24 1998/11/02 11:08:43 malthoff - * RxCtrl and TxCtrl must be volatile. - * - * Revision 1.23 1998/10/28 13:50:45 malthoff - * Fix: Endian support missing in XM_IN/OUT-ADDR/HASH macros. - * - * Revision 1.22 1998/10/26 08:01:36 malthoff - * RX_MFF_CTRL1 is split up into RX_MFF_CTRL1, - * RX_MFF_STAT_TO, and RX_MFF_TIST_TO. - * TX_MFF_CTRL1 is split up TX_MFF_CTRL1 and TX_MFF_WAF. - * - * Revision 1.21 1998/10/20 07:43:10 malthoff - * Fix: XM_IN/OUT/ADDR/HASH macros: - * The pointer must be casted. - * - * Revision 1.20 1998/10/19 15:53:59 malthoff - * Remove ML proto definitions. - * - * Revision 1.19 1998/10/16 14:40:17 gklug - * fix: typo B0_XM_IMSK regs - * - * Revision 1.18 1998/10/16 09:46:54 malthoff - * Remove temp defines for ML diag prototype. - * Fix register definition for B0_XM1_PHY_DATA, B0_XM1_PHY_DATA - * B0_XM2_PHY_DATA, B0_XM2_PHY_ADDR, B0_XA1_CSR, B0_XS1_CSR, - * B0_XS2_CSR, and B0_XA2_CSR. - * - * Revision 1.17 1998/10/14 06:03:14 cgoos - * Changed shifted constant to ULONG. - * - * Revision 1.16 1998/10/09 07:05:41 malthoff - * Rename ALL_PA_ENA_TO to PA_ENA_TO_ALL. - * - * Revision 1.15 1998/10/05 07:54:23 malthoff - * Split up RB_CTRL and it's bit definition into - * RB_CTRL, RB_TST1, and RB_TST2. - * Rename RB_RX_HTPP to RB_RX_LTPP. - * Add ALL_PA_ENA_TO. Modify F_WATER_MARK - * according to HW Spec. v1.5. - * Add MFF_TX_CTRL_DEF. - * - * Revision 1.14 1998/09/28 13:31:16 malthoff - * bug fix: B2_MAC_3 is 0x110 not 0x114 - * - * Revision 1.13 1998/09/24 14:42:56 malthoff - * Split the RX_MFF_TST into RX_MFF_CTRL2, - * RX_MFF_TST1, and RX_MFF_TST2. - * Rename RX_MFF_CTRL to RX_MFF_CTRL1. - * Add BMU bit CSR_SV_IDLE. - * Add macros PHY_READ() and PHY_WRITE(). - * Rename macro SK_ADDR() to SK_HW_ADDR() - * because of conflicts with the Address Module. - * - * Revision 1.12 1998/09/16 07:25:33 malthoff - * Change the parameter order in the XM_INxx and XM_OUTxx macros, - * to have the IoC as first parameter. - * - * Revision 1.11 1998/09/03 09:58:41 malthoff - * Rework the XM_xxx macros. Use {} instead of () to - * be compatible with SK_xxx macros which are defined - * with {}. - * - * Revision 1.10 1998/09/02 11:16:39 malthoff - * Temporary modify B2_I2C_SW to make tests with - * the GE/ML prototype. - * - * Revision 1.9 1998/08/19 09:11:49 gklug - * fix: struct are removed from c-source (see CCC) - * add: typedefs for all structs - * - * Revision 1.8 1998/08/18 08:27:27 malthoff - * Add some temporary workarounds to test GE - * sources with the ML. - * - * Revision 1.7 1998/07/03 14:42:26 malthoff - * bug fix: Correct macro XMA(). - * Add temporary workaround to access the PCI config space over I/O - * - * Revision 1.6 1998/06/23 11:30:36 malthoff - * Remove ';' with ',' in macors. - * - * Revision 1.5 1998/06/22 14:20:57 malthoff - * Add macro SK_ADDR(Base,Addr). - * - * Revision 1.4 1998/06/19 13:35:43 malthoff - * change 'pGec' with 'pAC' - * - * Revision 1.3 1998/06/17 14:58:16 cvs - * Lost keywords reinserted. - * - * Revision 1.1 1998/06/17 14:16:36 cvs - * created - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skgehwt.h b/drivers/net/sk98lin/h/skgehwt.h --- a/drivers/net/sk98lin/h/skgehwt.h Wed Feb 4 16:51:35 2004 +++ b/drivers/net/sk98lin/h/skgehwt.h Wed Feb 4 16:51:35 2004 @@ -2,8 +2,6 @@ * * Name: skhwt.h * Project: Gigabit Ethernet Adapters, Event Scheduler Module - * Version: $Revision: 1.7 $ - * Date: $Date: 2003/09/16 12:55:08 $ * Purpose: Defines for the hardware timer functions * ******************************************************************************/ @@ -19,34 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skgehwt.h,v $ - * Revision 1.7 2003/09/16 12:55:08 rschmidt - * Editorial changes - * - * Revision 1.6 2003/05/13 17:57:48 mkarl - * Editorial changes. - * - * Revision 1.5 1999/11/22 13:54:24 cgoos - * Changed license header to GPL. - * - * Revision 1.4 1998/08/19 09:50:58 gklug - * fix: remove struct keyword from C-code (see CCC) add typedefs - * - * Revision 1.3 1998/08/14 07:09:29 gklug - * fix: chg pAc -> pAC - * - * Revision 1.2 1998/08/07 12:54:21 gklug - * fix: first compiled version - * - * Revision 1.1 1998/08/07 09:32:58 gklug - * first version * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skgei2c.h b/drivers/net/sk98lin/h/skgei2c.h --- a/drivers/net/sk98lin/h/skgei2c.h Wed Feb 4 16:51:36 2004 +++ b/drivers/net/sk98lin/h/skgei2c.h Wed Feb 4 16:51:36 2004 @@ -2,8 +2,6 @@ * * Name: skgei2c.h * Project: Gigabit Ethernet Adapters, TWSI-Module - * Version: $Revision: 1.25 $ - * Date: $Date: 2003/10/20 09:06:05 $ * Purpose: Special defines for TWSI * ******************************************************************************/ @@ -19,100 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skgei2c.h,v $ - * Revision 1.25 2003/10/20 09:06:05 rschmidt - * Editorial changes. - * - * Revision 1.24 2003/09/23 09:31:15 malthoff - * Parameter dev_size added to macro definition of SK_I2C_CTL. - * - * Revision 1.23 2002/12/19 14:34:27 rschmidt - * Added cast in macros SK_I2C_SET_BIT() and SK_I2C_CLR_BIT() - * Editorial changes (TWSI) - * - * Revision 1.22 2002/10/14 16:45:56 rschmidt - * Editorial changes (TWSI) - * - * Revision 1.21 2002/08/13 08:42:24 rschmidt - * Changed define for SK_MIN_SENSORS back to 5 - * Merged defines for PHY PLL 3V3 voltage (A and B) - * Editorial changes - * - * Revision 1.20 2002/08/06 09:43:56 jschmalz - * Extensions and changes for Yukon - * - * Revision 1.19 2002/08/02 12:00:08 rschmidt - * Added defines for YUKON sensors - * Editorial changes - * - * Revision 1.18 2001/08/16 12:44:33 afischer - * LM80 sensor init values corrected - * - * Revision 1.17 1999/11/22 13:55:25 cgoos - * Changed license header to GPL. - * - * Revision 1.16 1999/11/12 08:24:10 malthoff - * Change voltage warning and error limits - * (warning +-5%, error +-10%). - * - * Revision 1.15 1999/09/14 14:14:43 malthoff - * The 1000BT Dual Link adapter has got only one Fan. - * The second Fan has been removed. - * - * Revision 1.14 1999/05/27 13:40:50 malthoff - * Fan Divisor = 1. Assuming fan with 6500 rpm. - * - * Revision 1.13 1999/05/20 14:56:55 malthoff - * Bug Fix: Missing brace in SK_LM80_FAN_FAKTOR. - * - * Revision 1.12 1999/05/20 09:22:00 cgoos - * Changes for 1000Base-T (Fan sensors). - * - * Revision 1.11 1998/10/14 05:57:22 cgoos - * Fixed compilation warnings. - * - * Revision 1.10 1998/09/04 08:37:00 malthoff - * bugfix: correct the SK_I2C_GET_CTL() macro. - * - * Revision 1.9 1998/08/25 06:10:03 gklug - * add: thresholds for all sensors - * - * Revision 1.8 1998/08/20 11:37:42 gklug - * chg: change Ioc to IoC - * - * Revision 1.7 1998/08/20 08:53:11 gklug - * fix: compiler errors - * add: Threshold values - * - * Revision 1.6 1998/08/17 11:37:09 malthoff - * Bugfix in SK_I2C_CTL macro. The parameter 'dev' - * has to be shifted 9 bits. - * - * Revision 1.5 1998/08/17 06:52:21 malthoff - * Remove unrequired macros. - * Add macros for accessing TWSI SW register. - * - * Revision 1.4 1998/08/13 08:30:18 gklug - * add: conversion factors for read values - * add: new state SEN_VALEXT to read extension value of temperature sensor - * - * Revision 1.3 1998/08/12 13:37:56 gklug - * rmv: error numbers and messages - * - * Revision 1.2 1998/08/11 07:54:38 gklug - * add: sensor states for GE sensors - * add: Macro to access TWSI hardware register - * chg: Error messages for TWSI errors - * - * Revision 1.1 1998/07/17 11:27:56 gklug - * Created. * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skgeinit.h b/drivers/net/sk98lin/h/skgeinit.h --- a/drivers/net/sk98lin/h/skgeinit.h Wed Feb 4 16:51:36 2004 +++ b/drivers/net/sk98lin/h/skgeinit.h Wed Feb 4 16:51:36 2004 @@ -2,8 +2,6 @@ * * Name: skgeinit.h * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.83 $ - * Date: $Date: 2003/09/16 14:07:37 $ * Purpose: Structures and prototypes for the GE Init Module * ******************************************************************************/ @@ -19,353 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skgeinit.h,v $ - * Revision 1.83 2003/09/16 14:07:37 rschmidt - * Moved defines for PHY power down modes from skgehw.h - * Added prototypes for SkMacClearRst() - * Editorial changes - * - * Revision 1.82 2003/09/16 07:18:36 mschmid - * Added members to port structure for MAC control - * - PMacColThres - * - PMacJamLen - * - PMacJamIpgVal - * - PMacJamIpgData - * - PMacIpgData - * - PMacLimit4 - * Added PHY power state to port structure - * - PPhyPowerState - * Added function prototypes to enter and leave low power modes - * - * Revision 1.81 2003/07/04 12:30:38 rschmidt - * Added SK_FAR to pointers in MAC statistic functions (for PXE) - * Editorial changes - * - * Revision 1.80 2003/05/28 15:25:30 rschmidt - * Added SK_FAR to pointers in MAC/PHY read functions (for PXE) - * Minor changes to avoid LINT warnings - * Editorial changes - * - * Revision 1.79 2003/05/06 12:02:33 rschmidt - * Added entry GIYukon in s_GeInit structure - * Editorial changes - * - * Revision 1.78 2003/04/28 08:59:57 rschmidt - * Added entries GIValIrqMask and GITimeStampCnt in s_GeInit structure - * - * Revision 1.77 2003/04/08 16:27:02 rschmidt - * Added entry GILedBlinkCtrl in s_GeInit structure - * Added defines for LED Blink Control - * - * Revision 1.76 2003/03/31 07:21:01 mkarl - * Added PGmANegAdv to SK_GEPORT. - * Corrected Copyright. - * - * Revision 1.75 2003/02/05 13:36:39 rschmidt - * Added define SK_FACT_78 for YUKON's Host Clock of 78.12 MHz - * Editorial changes - * - * Revision 1.74 2003/01/28 09:39:16 rschmidt - * Added entry GIYukonLite in s_GeInit structure - * Editorial changes - * - * Revision 1.73 2002/11/15 12:47:25 rschmidt - * Replaced error message SKERR_HWI_E024 for Cable Diagnostic with - * Rx queue error in SkGeStopPort(). - * - * Revision 1.72 2002/11/12 17:08:35 rschmidt - * Added entries for Cable Diagnostic to Port structure - * Added entries GIPciSlot64 and GIPciClock66 in s_GeInit structure - * Added error message for Cable Diagnostic - * Added prototypes for SkGmCableDiagStatus() - * Editorial changes - * - * Revision 1.71 2002/10/21 11:26:10 mkarl - * Changed interface of SkGeInitAssignRamToQueues(). - * - * Revision 1.70 2002/10/14 08:21:32 rschmidt - * Changed type of GICopperType, GIVauxAvail to SK_BOOL - * Added entry PRxOverCnt to Port structure - * Added entry GIYukon32Bit in s_GeInit structure - * Editorial changes - * - * Revision 1.69 2002/10/09 16:57:15 mkarl - * Added some constants and macros for SkGeInitAssignRamToQueues(). - * - * Revision 1.68 2002/09/12 08:58:51 rwahl - * Retrieve counters needed for XMAC errata workarounds directly because - * PNMI returns corrected counter values (e.g. #10620). - * - * Revision 1.67 2002/08/16 14:40:30 rschmidt - * Added entries GIGenesis and GICopperType in s_GeInit structure - * Added prototypes for SkMacHashing() - * Editorial changes - * - * Revision 1.66 2002/08/12 13:27:21 rschmidt - * Added defines for Link speed capabilities - * Added entry PLinkSpeedCap to Port structure - * Added entry GIVauxAvail in s_GeInit structure - * Added prototypes for SkMacPromiscMode() - * Editorial changes - * - * Revision 1.65 2002/08/08 15:46:18 rschmidt - * Added define SK_PHY_ACC_TO for PHY access timeout - * Added define SK_XM_RX_HI_WM for XMAC Rx High Watermark - * Added define SK_MIN_TXQ_SIZE for Min RAM Buffer Tx Queue Size - * Added entry PhyId1 to Port structure - * - * Revision 1.64 2002/07/23 16:02:56 rschmidt - * Added entry GIWolOffs in s_GeInit struct (HW-Bug in YUKON 1st rev.) - * Added prototypes for: SkGePhyRead(), SkGePhyWrite() - * - * Revision 1.63 2002/07/18 08:17:38 rwahl - * Corrected definitions for SK_LSPEED_xxx & SK_LSPEED_STAT_xxx. - * - * Revision 1.62 2002/07/17 18:21:55 rwahl - * Added SK_LSPEED_INDETERMINATED define. - * - * Revision 1.61 2002/07/17 17:16:03 rwahl - * - MacType now member of GIni struct. - * - Struct alignment to 32bit. - * - Editorial change. - * - * Revision 1.60 2002/07/15 18:23:39 rwahl - * Added GeMacFunc to GE Init structure. - * Added prototypes for SkXmUpdateStats(), SkGmUpdateStats(), - * SkXmMacStatistic(), SkGmMacStatistic(), SkXmResetCounter(), - * SkGmResetCounter(), SkXmOverflowStatus(), SkGmOverflowStatus(). - * Added defines for current link speed state. - * Added ERRMSG defintions for MacUpdateStat() & MacStatistics(). - * - * Revision 1.59 2002/07/15 15:40:22 rschmidt - * Added entry PLinkSpeedUsed to Port structure - * Editorial changes - * - * Revision 1.58 2002/06/10 09:36:30 rschmidt - * Editorial changes. - * - * Revision 1.57 2002/06/05 08:18:00 rschmidt - * Corrected alignment in Port Structure - * Added new prototypes for GMAC - * Editorial changes - * - * Revision 1.56 2002/04/25 11:38:12 rschmidt - * Added defines for Link speed values - * Added defines for Loopback parameters for MAC and PHY - * Removed entry PRxCmd from Port structure - * Added entry PLinkSpeed to Port structure - * Added entries GIChipId and GIChipRev to GE Init structure - * Removed entry GIAnyPortAct from GE Init structure - * Added prototypes for: SkMacInit(), SkMacInitPhy(), - * SkMacRxTxDisable(), SkMacSoftRst(), SkMacHardRst(), SkMacIrq(), - * SkMacIrqDisable(), SkMacFlushTxFifo(), SkMacFlushRxFifo(), - * SkMacAutoNegDone(), SkMacAutoNegLipaPhy(), SkMacSetRxTxEn(), - * SkXmPhyRead(), SkXmPhyRead(), SkGmPhyWrite(), SkGmPhyWrite(); - * Removed prototypes for static functions in SkXmac2.c - * Editorial changes - * - * Revision 1.55 2002/02/26 15:24:53 rwahl - * Fix: no link with manual configuration (#10673). The previous fix for - * #10639 was removed. So for RLMT mode = CLS the RLMT may switch to - * misconfigured port. It should not occur for the other RLMT modes. - * - * Revision 1.54 2002/01/18 16:52:52 rwahl - * Editorial corrections. - * - * Revision 1.53 2001/11/20 09:19:58 rwahl - * Reworked bugfix #10639 (no dependency to RLMT mode). - * - * Revision 1.52 2001/10/26 07:52:23 afischer - * Port switching bug in `check local link` mode - * - * Revision 1.51 2001/02/09 12:26:38 cgoos - * Inserted #ifdef DIAG for half duplex workaround timer. - * - * Revision 1.50 2001/02/07 07:56:40 rassmann - * Corrected copyright. - * - * Revision 1.49 2001/01/31 15:32:18 gklug - * fix: problem with autosensing an SR8800 switch - * add: counter for autoneg timeouts - * - * Revision 1.48 2000/11/09 11:30:10 rassmann - * WA: Waiting after releasing reset until BCom chip is accessible. - * - * Revision 1.47 2000/10/18 12:22:40 cgoos - * Added workaround for half duplex hangup. - * - * Revision 1.46 2000/08/10 11:28:00 rassmann - * Editorial changes. - * Preserving 32-bit alignment in structs for the adapter context. - * - * Revision 1.45 1999/11/22 13:56:19 cgoos - * Changed license header to GPL. - * - * Revision 1.44 1999/10/26 07:34:15 malthoff - * The define SK_LNK_ON has been lost in v1.41. - * - * Revision 1.43 1999/10/06 09:30:16 cgoos - * Changed SK_XM_THR_JUMBO. - * - * Revision 1.42 1999/09/16 12:58:26 cgoos - * Changed SK_LED_STANDY macro to be independent of HW link sync. - * - * Revision 1.41 1999/07/30 06:56:14 malthoff - * Correct comment for SK_MS_STAT_UNSET. - * - * Revision 1.40 1999/05/27 13:38:46 cgoos - * Added SK_BMU_TX_WM. - * Made SK_BMU_TX_WM and SK_BMU_RX_WM user-definable. - * Changed XMAC Tx treshold to max. values. - * - * Revision 1.39 1999/05/20 14:35:26 malthoff - * Remove prototypes for SkGeLinkLED(). - * - * Revision 1.38 1999/05/19 11:59:12 cgoos - * Added SK_MS_CAP_INDETERMINATED define. - * - * Revision 1.37 1999/05/19 07:32:33 cgoos - * Changes for 1000Base-T. - * LED-defines for HWAC_LINK_LED macro. - * - * Revision 1.36 1999/04/08 14:00:24 gklug - * add:Port struct field PLinkResCt - * - * Revision 1.35 1999/03/25 07:43:07 malthoff - * Add error string for SKERR_HWI_E018MSG. - * - * Revision 1.34 1999/03/12 16:25:57 malthoff - * Remove PPollRxD and PPollTxD. - * Add SKERR_HWI_E017MSG. and SK_DPOLL_MAX. - * - * Revision 1.33 1999/03/12 13:34:41 malthoff - * Add Autonegotiation error codes. - * Change defines for parameter Mode in SkXmSetRxCmd(). - * Replace __STDC__ by SK_KR_PROTO. - * - * Revision 1.32 1999/01/25 14:40:20 mhaveman - * Added new return states for the virtual management port if multiple - * ports are active but differently configured. - * - * Revision 1.31 1998/12/11 15:17:02 gklug - * add: Link partnet autoneg states : Unknown Manual and Auto-negotiation - * - * Revision 1.30 1998/12/07 12:17:04 gklug - * add: Link Partner auto-negotiation flag - * - * Revision 1.29 1998/12/01 10:54:42 gklug - * add: variables for XMAC Errata - * - * Revision 1.28 1998/12/01 10:14:15 gklug - * add: PIsave saves the Interrupt status word - * - * Revision 1.27 1998/11/26 15:24:52 mhaveman - * Added link status states SK_LMODE_STAT_AUTOHALF and - * SK_LMODE_STAT_AUTOFULL which are used by PNMI. - * - * Revision 1.26 1998/11/26 14:53:01 gklug - * add:autoNeg Timeout variable - * - * Revision 1.25 1998/11/26 08:58:50 gklug - * add: Link Mode configuration (AUTO Sense mode) - * - * Revision 1.24 1998/11/24 13:30:27 gklug - * add: PCheckPar to port struct - * - * Revision 1.23 1998/11/18 13:23:26 malthoff - * Add SK_PKT_TO_MAX. - * - * Revision 1.22 1998/11/18 13:19:54 gklug - * add: PPrevShorts and PLinkBroken to port struct for WA XMAC Errata #C1 - * - * Revision 1.21 1998/10/26 08:02:57 malthoff - * Add GIRamOffs. - * - * Revision 1.20 1998/10/19 07:28:37 malthoff - * Add prototype for SkGeInitRamIface(). - * - * Revision 1.19 1998/10/14 14:47:48 malthoff - * SK_TIMER should not be defined for Diagnostics. - * Add SKERR_HWI_E015MSG and SKERR_HWI_E016MSG. - * - * Revision 1.18 1998/10/14 14:00:03 gklug - * add: timer to port struct for workaround of Errata #2 - * - * Revision 1.17 1998/10/14 11:23:09 malthoff - * Add prototype for SkXmAutoNegDone(). - * Fix SkXmSetRxCmd() prototype statement. - * - * Revision 1.16 1998/10/14 05:42:29 gklug - * add: HWLinkUp flag to Port struct - * - * Revision 1.15 1998/10/09 08:26:33 malthoff - * Rename SK_RB_ULPP_B to SK_RB_LLPP_B. - * - * Revision 1.14 1998/10/09 07:11:13 malthoff - * bug fix: SK_FACT_53 is 85 not 117. - * Rework time out init values. - * Add GIPortUsage and corresponding defines. - * Add some error log messages. - * - * Revision 1.13 1998/10/06 14:13:14 malthoff - * Add prototype for SkGeLoadLnkSyncCnt(). - * - * Revision 1.12 1998/10/05 11:29:53 malthoff - * bug fix: A comment was not closed. - * - * Revision 1.11 1998/10/05 08:01:59 malthoff - * Add default Timeout- Threshold- and - * Watermark constants. Add QRam start and end - * variables. Also add vars to store the polling - * mode and receive command. Add new Error Log - * Messages and function prototypes. - * - * Revision 1.10 1998/09/28 13:34:48 malthoff - * Add mode bits for LED functions. - * Move Autoneg and Flow Ctrl bits from shgesirq.h - * Add the required Error Log Entries - * and Function Prototypes. - * - * Revision 1.9 1998/09/16 14:38:41 malthoff - * Rework the SK_LNK_xxx defines. - * Add error log message defines. - * Add prototypes for skxmac2.c - * - * Revision 1.8 1998/09/11 05:29:18 gklug - * add: init state of a port - * - * Revision 1.7 1998/09/08 08:35:52 gklug - * add: defines of the Init Levels - * - * Revision 1.6 1998/09/03 13:48:42 gklug - * add: Link strati, capabilities to Port struct - * - * Revision 1.5 1998/09/03 13:30:59 malthoff - * Add SK_LNK_BLINK and SK_LNK_PERM. - * - * Revision 1.4 1998/09/03 09:55:31 malthoff - * Add constants for parameters Dir and RstMode - * when calling SkGeStopPort(). - * Rework the prototype section. - * Add Queue Address offsets PRxQOff, PXsQOff, and PXaQOff. - * Remove Ioc with IoC. - * - * Revision 1.3 1998/08/19 09:11:54 gklug - * fix: struct are removed from c-source (see CCC) - * add: typedefs for all structs - * - * Revision 1.2 1998/07/28 12:38:26 malthoff - * The prototypes got the parameter 'IoC'. - * - * Revision 1.1 1998/07/23 09:50:24 malthoff - * Created. * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skgepnm2.h b/drivers/net/sk98lin/h/skgepnm2.h --- a/drivers/net/sk98lin/h/skgepnm2.h Wed Feb 4 16:51:36 2004 +++ b/drivers/net/sk98lin/h/skgepnm2.h Wed Feb 4 16:51:36 2004 @@ -2,8 +2,6 @@ * * Name: skgepnm2.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.36 $ - * Date: $Date: 2003/05/23 12:45:13 $ * Purpose: Defines for Private Network Management Interface * ****************************************************************************/ @@ -21,144 +19,6 @@ * The information in this file is provided "AS IS" without warranty. * ******************************************************************************/ - -/***************************************************************************** - * - * History: - * - * $Log: skgepnm2.h,v $ - * Revision 1.36 2003/05/23 12:45:13 tschilli - * #ifndef SK_PNMI_HUNDREDS_SEC added to SK_PNMI_HUNDREDS_SEC definition - * to allow own time macro defines. - * - * Revision 1.35 2003/03/27 11:27:48 tschilli - * Copyright messages changed. - * - * Revision 1.34 2002/12/16 09:05:18 tschilli - * Code for VCT handling added. - * - * Revision 1.33 2002/09/10 09:00:03 rwahl - * Adapted boolean definitions according sktypes. - * - * Revision 1.32 2002/08/09 09:47:01 rwahl - * Added write-only flag to oid access defines. - * Editorial changes. - * - * Revision 1.31 2002/07/17 19:23:18 rwahl - * - Replaced MAC counter definitions by enumeration. - * - Added definition SK_PNMI_MAC_TYPES. - * - Added chipset defnition for Yukon. - * - * Revision 1.30 2001/02/06 10:03:41 mkunz - * - Pnmi V4 dual net support added. Interface functions and macros extended - * - Vpd bug fixed - * - OID_SKGE_MTU added - * - * Revision 1.29 2001/01/22 13:41:37 rassmann - * Supporting two nets on dual-port adapters. - * - * Revision 1.28 2000/08/03 15:12:48 rwahl - * - Additional comment for MAC statistic data structure. - * - * Revision 1.27 2000/08/01 16:10:18 rwahl - * - Added mac statistic data structure for StatRxLongFrame counter. - * - * Revision 1.26 2000/03/31 13:51:34 rwahl - * Added SK_UPTR cast to offset calculation for PNMI struct fields; - * missing cast caused compiler warnings by Win64 compiler. - * - * Revision 1.25 1999/11/22 13:57:41 cgoos - * Changed license header to GPL. - * Allowing overwrite for SK_PNMI_STORE/_READ defines. - * - * Revision 1.24 1999/04/13 15:11:11 mhaveman - * Changed copyright. - * - * Revision 1.23 1999/01/28 15:07:12 mhaveman - * Changed default threshold for port switches per hour from 10 - * to 240 which means 4 switches per minute. This fits better - * the granularity of 32 for the port switch estimate - * counter. - * - * Revision 1.22 1999/01/05 12:52:30 mhaveman - * Removed macro SK_PNMI_MICRO_SEC. - * - * Revision 1.21 1999/01/05 12:50:34 mhaveman - * Enlarged macro definition SK_PNMI_HUNDREDS_SEC() so that no 64-bit - * arithmetic is necessary if SK_TICKS_PER_SEC is 100. - * - * Revision 1.20 1998/12/09 14:02:53 mhaveman - * Defined macro SK_PNMI_DEF_RLMT_CHG_THRES for default port switch - * threshold. - * - * Revision 1.19 1998/12/03 11:28:41 mhaveman - * Removed SK_PNMI_CHECKPTR macro. - * - * Revision 1.18 1998/12/03 11:21:00 mhaveman - * -Added pointer check macro SK_PNMI_CHECKPTR - * -Added macros SK_PNMI_VPD_ARR_SIZE and SK_PNMI_VPD_STR_SIZE for - * VPD key evaluation. - * - * Revision 1.17 1998/11/20 13:20:33 mhaveman - * Fixed bug in SK_PNMI_SET_STAT macro. ErrorStatus was not correctly set. - * - * Revision 1.16 1998/11/20 08:08:49 mhaveman - * Macro SK_PNMI_CHECKFLAGS has got a if clause. - * - * Revision 1.15 1998/11/03 13:53:40 mhaveman - * Fixed alignment problem in macor SK_PNMI_SET_STAT macro. - * - * Revision 1.14 1998/10/30 15:50:13 mhaveman - * Added macro SK_PNMI_MICRO_SEC() - * - * Revision 1.13 1998/10/30 12:32:20 mhaveman - * Added forgotten cast in SK_PNMI_READ_U32 macro. - * - * Revision 1.12 1998/10/29 15:40:26 mhaveman - * -Changed SK_PNMI_TRAP_SENSOR_LEN because SensorDescr has now - * variable string length. - * -Defined SK_PNMI_CHECKFLAGS macro - * - * Revision 1.11 1998/10/29 08:53:34 mhaveman - * Removed SK_PNMI_RLM_XXX table indexed because these counters need - * not been saved over XMAC resets. - * - * Revision 1.10 1998/10/28 08:48:20 mhaveman - * -Added macros for storage according to alignment - * -Changed type of Instance to SK_U32 because of VPD - * -Removed trap structures. Not needed because of alignment problem - * -Changed type of Action form SK_U8 to int - * - * Revision 1.9 1998/10/21 13:34:45 mhaveman - * Shit, mismatched calculation of SK_PNMI_HUNDREDS_SEC. Corrected. - * - * Revision 1.8 1998/10/21 13:24:58 mhaveman - * Changed calculation of hundreds of seconds. - * - * Revision 1.7 1998/10/20 07:31:41 mhaveman - * Made type changes to unsigned int where possible. - * - * Revision 1.6 1998/09/04 17:04:05 mhaveman - * Added Sync counters to offset storage to provided settled values on - * port switch. - * - * Revision 1.5 1998/09/04 12:45:35 mhaveman - * Removed dummies for SK_DRIVER_ macros. They should be added by driver - * writer in skdrv2nd.h. - * - * Revision 1.4 1998/09/04 11:59:50 mhaveman - * Everything compiles now. Driver Macros for counting still missing. - * - * Revision 1.3 1998/08/24 12:01:35 mhaveman - * Intermediate state. - * - * Revision 1.2 1998/08/17 07:51:40 mhaveman - * Intermediate state. - * - * Revision 1.1 1998/08/11 09:08:40 mhaveman - * Intermediate state. - * - ****************************************************************************/ #ifndef _SKGEPNM2_H_ #define _SKGEPNM2_H_ diff -Nru a/drivers/net/sk98lin/h/skgepnmi.h b/drivers/net/sk98lin/h/skgepnmi.h --- a/drivers/net/sk98lin/h/skgepnmi.h Wed Feb 4 16:51:33 2004 +++ b/drivers/net/sk98lin/h/skgepnmi.h Wed Feb 4 16:51:33 2004 @@ -2,8 +2,6 @@ * * Name: skgepnmi.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.62 $ - * Date: $Date: 2003/08/15 12:31:52 $ * Purpose: Defines for Private Network Management Interface * ****************************************************************************/ @@ -21,237 +19,6 @@ * The information in this file is provided "AS IS" without warranty. * ******************************************************************************/ - -/***************************************************************************** - * - * History: - * - * $Log: skgepnmi.h,v $ - * Revision 1.62 2003/08/15 12:31:52 tschilli - * Added new OIDs: - * OID_SKGE_DRIVER_RELDATE - * OID_SKGE_DRIVER_FILENAME - * OID_SKGE_CHIPID - * OID_SKGE_RAMSIZE - * OID_SKGE_VAUXAVAIL - * OID_SKGE_PHY_TYPE - * OID_SKGE_PHY_LP_MODE - * - * Added new define SK_DIAG_ATTACHED for OID_SKGE_DIAG_MODE handling. - * - * Revision 1.61 2003/05/23 12:53:52 tschilli - * Generic PNMI IOCTL subcommands added. - * Function prototype SkPnmiGenIoctl() added. - * OID_SKGE_BOARDLEVEL added. - * Return value SK_PNMI_ERR_NOT_SUPPORTED added. - * Editorial changes. - * - * Revision 1.60 2003/03/27 11:27:26 tschilli - * Copyright messages changed. - * - * Revision 1.59 2002/12/16 14:03:50 tschilli - * New defines for VCT added. - * - * Revision 1.58 2002/12/16 09:04:59 tschilli - * Code for VCT handling added. - * - * Revision 1.57 2002/09/26 12:41:05 tschilli - * SK_PNMI_PORT BufPort entry in struct SK_PNMI added. - * - * Revision 1.56 2002/08/16 11:10:41 rwahl - * - Replaced c++ comment. - * - * Revision 1.55 2002/08/09 15:40:21 rwahl - * Editorial change (renamed ConfSpeedCap). - * - * Revision 1.54 2002/08/09 11:06:07 rwahl - * Added OID_SKGE_SPEED_CAP. - * - * Revision 1.53 2002/08/09 09:45:28 rwahl - * Added support for NDIS OID_PNP_xxx. - * Editorial changes. - * - * Revision 1.52 2002/08/06 17:54:07 rwahl - * - Added speed cap to PNMI config struct. - * - * Revision 1.51 2002/07/17 19:19:26 rwahl - * - Added OID_SKGE_SPEED_MODE and OID_SKGE_SPEED_STATUS. - * - Added SK_PNMI_CNT_RX_PMACC_ERR() & SK_PNMI_CNT_RX_LONGFRAMES(). - * - Added speed mode & status to PNMI config struct. - * - Editorial changes. - * - * Revision 1.50 2002/05/22 08:59:37 rwahl - * Added string definitions for error msgs. - * - * Revision 1.49 2001/11/20 09:23:50 rwahl - * - pnmi struct: reordered and aligned to 32bit. - * - * Revision 1.48 2001/02/23 14:34:24 mkunz - * Changed macro PHYS2INST. Added pAC to Interface - * - * Revision 1.47 2001/02/07 08:28:23 mkunz - * - Added Oids: OID_SKGE_DIAG_ACTION - * OID_SKGE_DIAG_RESULT - * OID_SKGE_MULTICAST_LIST - * OID_SKGE_CURRENT_PACKET_FILTER - * OID_SKGE_INTERMEDIATE_SUPPORT - * - Changed value of OID_SKGE_MTU - * - * Revision 1.46 2001/02/06 10:01:41 mkunz - * - Pnmi V4 dual net support added. Interface functions and macros extended - * - Vpd bug fixed - * - OID_SKGE_MTU added - * - * Revision 1.45 2001/01/22 13:41:37 rassmann - * Supporting two nets on dual-port adapters. - * - * Revision 1.44 2000/09/07 07:35:27 rwahl - * - removed NDIS counter specific data type. - * - fixed spelling for OID_SKGE_RLMT_PORT_PREFERRED. - * - * Revision 1.43 2000/08/04 11:41:08 rwahl - * - Fixed compiler warning (port is always >= 0) for macros - * SK_PNMI_CNT_RX_LONGFRAMES & SK_PNMI_CNT_SYNC_OCTETS - * - * Revision 1.42 2000/08/03 15:14:07 rwahl - * - Corrected error in driver macros addressing a physical port. - * - * Revision 1.41 2000/08/01 16:22:29 rwahl - * - Changed MDB version to 3.1. - * - Added definitions for StatRxLongFrames counter. - * - Added macro to be used by driver to count long frames received. - * - Added directive to control width (default = 32bit) of NDIS statistic - * counters (SK_NDIS_64BIT_CTR). - * - * Revision 1.40 2000/03/31 13:51:34 rwahl - * Added SK_UPTR cast to offset calculation for PNMI struct fields; - * missing cast caused compiler warnings by Win64 compiler. - * - * Revision 1.39 1999/12/06 10:09:47 rwahl - * Added new error log message. - * - * Revision 1.38 1999/11/22 13:57:55 cgoos - * Changed license header to GPL. - * - * Revision 1.37 1999/09/14 14:25:32 rwahl - * Set MDB version for 1000Base-T (sensors, Master/Slave) changes. - * - * Revision 1.36 1999/05/20 09:24:56 cgoos - * Changes for 1000Base-T (sensors, Master/Slave). - * - * Revision 1.35 1999/04/13 15:10:51 mhaveman - * Replaced RLMT macros SK_RLMT_CHECK_xxx again by those of PNMI to - * grant unified interface. But PNMI macros will store the same - * value as RLMT macros. - * - * Revision 1.34 1999/04/13 15:03:49 mhaveman - * -Changed copyright - * -Removed SK_PNMI_RLMT_MODE_CHK_xxx macros. Those of RLMT should be - * used. - * - * Revision 1.33 1999/03/23 10:41:02 mhaveman - * Changed comments. - * - * Revision 1.32 1999/01/25 15:01:33 mhaveman - * Added support for multiple simultaniously active ports. - * - * Revision 1.31 1999/01/19 10:06:26 mhaveman - * Added new error log message. - * - * Revision 1.30 1999/01/05 10:34:49 mhaveman - * Fixed little error in RlmtChangeEstimate calculation. - * - * Revision 1.29 1999/01/05 09:59:41 mhaveman - * Redesigned port switch average calculation to avoid 64bit - * arithmetic. - * - * Revision 1.28 1998/12/08 10:05:48 mhaveman - * Defined macro SK_PNMI_MIN_STRUCT_SIZE. - * - * Revision 1.27 1998/12/03 14:39:35 mhaveman - * Fixed problem that LSTAT was enumerated wrong. - * - * Revision 1.26 1998/12/03 11:19:51 mhaveman - * Changed contents of errlog message SK_PNMI_ERR016MSG - * - * Revision 1.25 1998/12/01 10:40:04 mhaveman - * Changed size of SensorNumber, ChecksumNumber and RlmtPortNumber in - * SK_PNMI_STRUCT_DATA to be conform with OID definition. - * - * Revision 1.24 1998/11/20 08:09:27 mhaveman - * Added macros to convert between logical, physical port indexes and - * instances. - * - * Revision 1.23 1998/11/10 13:41:13 mhaveman - * Needed to change interface, because NT driver needs a return value - * of needed buffer space on TOO_SHORT errors. Therefore all - * SkPnmiGet/Preset/Set functions now have a pointer to the length - * parameter, where the needed space on error is returned. - * - * Revision 1.22 1998/11/03 12:05:51 mhaveman - * Added pAC parameter to counter macors. - * - * Revision 1.21 1998/11/02 10:47:36 mhaveman - * Added syslog messages for internal errors. - * - * Revision 1.20 1998/10/30 15:49:36 mhaveman - * -Removed unused SK_PNMI_UTILIZATION_BASE and EstOldCnt. - * -Redefined SK_PNMI_CHG_EST_BASE to hundreds of seconds. - * - * Revision 1.19 1998/10/29 15:38:44 mhaveman - * Changed string lengths of PNMI_STRUCT_DATA structure because - * string OIDs are now encoded with leading length ocetet. - * - * Revision 1.18 1998/10/29 08:52:27 mhaveman - * -Added byte to strings in PNMI_STRUCT_DATA structure. - * -Shortened SK_PNMI_RLMT structure to SK_MAX_MACS elements. - * - * Revision 1.17 1998/10/28 08:49:50 mhaveman - * -Changed type of Instance back to SK_U32 because of VPD - * -Changed type from SK_U8 to char of PciBusSpeed, PciBusWidth, PMD, - * and Connector. - * - * Revision 1.16 1998/10/22 10:42:31 mhaveman - * -Removed (SK_U32) casts for OIDs - * -excluded NDIS OIDs when they are already defined with ifndef _NDIS_ - * - * Revision 1.15 1998/10/20 13:56:28 mhaveman - * Headerfile includes now directly other header files to comile correctly. - * - * Revision 1.14 1998/10/20 07:31:09 mhaveman - * Made type changes to unsigned int where possible. - * - * Revision 1.13 1998/10/19 10:53:13 mhaveman - * -Casted OID definitions to SK_U32 - * -Renamed RlmtMAC... to RlmtPort... - * -Changed wrong type of VpdEntriesList from SK_U32 to char * - * - * Revision 1.12 1998/10/13 07:42:27 mhaveman - * -Added OIDs OID_SKGE_TRAP_NUMBER and OID_SKGE_ALL_DATA - * -Removed old cvs history entries - * -Renamed MacNumber to PortNumber - * - * Revision 1.11 1998/10/07 10:55:24 mhaveman - * -Added OID_MDB_VERSION. Therefore was a renumbering of the VPD OIDs - * necessary. - * -Added OID_GEN_ Ids to support the windows driver. - * - * Revision 1.10 1998/09/30 13:41:10 mhaveman - * Renamed some OIDs to reduce usage of 'MAC' which is replaced by 'PORT'. - * - * Revision 1.9 1998/09/04 17:06:17 mhaveman - * -Added SyncCounter as macro. - * -Renamed OID_SKGE_.._NO_DESCR_CTS to OID_SKGE_.._NO_BUF_CTS. - * -Added macros for driver description and version strings. - * - * Revision 1.8 1998/09/04 14:36:52 mhaveman - * Added OIDs and Structure to access value of macro counters which are - * counted by the driver. - * - * Revision 1.7 1998/09/04 11:59:36 mhaveman - * Everything compiles now. Driver Macros for counting still missing. - * - ****************************************************************************/ #ifndef _SKGEPNMI_H_ #define _SKGEPNMI_H_ diff -Nru a/drivers/net/sk98lin/h/skgesirq.h b/drivers/net/sk98lin/h/skgesirq.h --- a/drivers/net/sk98lin/h/skgesirq.h Wed Feb 4 16:51:37 2004 +++ b/drivers/net/sk98lin/h/skgesirq.h Wed Feb 4 16:51:37 2004 @@ -2,8 +2,6 @@ * * Name: skgesirq.h * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.30 $ - * Date: $Date: 2003/07/04 12:34:13 $ * Purpose: SK specific Gigabit Ethernet special IRQ functions * ******************************************************************************/ @@ -19,111 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * $Log: skgesirq.h,v $ - * Revision 1.30 2003/07/04 12:34:13 rschmidt - * Added SKERR_SIRQ_E025 for Downshift detected (Yukon-Copper) - * - * Revision 1.29 2003/05/28 15:14:49 rschmidt - * Moved defines for return codes of SkGePortCheckUp() to header file. - * Minor changes to avoid LINT warnings. - * - * Revision 1.28 2003/05/13 17:22:43 mkarl - * Editorial changes. - * - * Revision 1.27 2003/03/31 07:32:34 mkarl - * Corrected Copyright. - * Editorial changes. - * - * Revision 1.26 2002/10/14 09:52:36 rschmidt - * Added SKERR_SIRQ_E023 and SKERR_SIRQ_E024 for GPHY (Yukon) - * Editorial changes - * - * Revision 1.25 2002/07/15 18:15:52 rwahl - * Editorial changes. - * - * Revision 1.24 2002/07/15 15:39:21 rschmidt - * Corrected define for SKERR_SIRQ_E022 - * Editorial changes - * - * Revision 1.23 2002/04/25 11:09:45 rschmidt - * Removed declarations for SkXmInitPhy(), SkXmRxTxEnable() - * Editorial changes - * - * Revision 1.22 2000/11/09 11:30:10 rassmann - * WA: Waiting after releasing reset until BCom chip is accessible. - * - * Revision 1.21 2000/10/18 12:22:40 cgoos - * Added workaround for half duplex hangup. - * - * Revision 1.20 1999/12/06 10:00:44 cgoos - * Added SET event for role. - * - * Revision 1.19 1999/11/22 13:58:26 cgoos - * Changed license header to GPL. - * - * Revision 1.18 1999/05/19 07:32:59 cgoos - * Changes for 1000Base-T. - * - * Revision 1.17 1999/03/12 13:29:31 malthoff - * Move Autonegotiation Error Codes to skgeinit.h. - * - * Revision 1.16 1999/03/08 10:11:28 gklug - * add: AutoNegDone return codes - * - * Revision 1.15 1998/11/18 13:20:53 gklug - * add: different timeouts for active and non-active links - * - * Revision 1.14 1998/11/04 07:18:14 cgoos - * Added prototype for SkXmRxTxEnable. - * - * Revision 1.13 1998/10/21 05:52:23 gklug - * add: parameter DoLoop to InitPhy function - * - * Revision 1.12 1998/10/19 06:45:03 cgoos - * Added prototype for SkXmInitPhy. - * - * Revision 1.11 1998/10/15 14:34:10 gklug - * add: WA_TIME is 500 msec - * - * Revision 1.10 1998/10/14 14:49:41 malthoff - * Remove err log defines E021 and E022. They are - * defined in skgeinit.h now. - * - * Revision 1.9 1998/10/14 14:00:39 gklug - * add: error logs for init phys - * - * Revision 1.8 1998/10/14 05:44:05 gklug - * add: E020 - * - * Revision 1.7 1998/10/02 06:24:58 gklug - * add: error messages - * - * Revision 1.6 1998/10/01 07:54:45 gklug - * add: PNMI debug module - * - * Revision 1.5 1998/09/28 13:36:31 malthoff - * Move the bit definitions for Autonegotiation - * and Flow Control to skgeinit.h. - * - * Revision 1.4 1998/09/15 12:29:34 gklug - * add: error logs - * - * Revision 1.3 1998/09/03 13:54:02 gklug - * add: function prototypes - * - * Revision 1.2 1998/09/03 10:24:36 gklug - * add: Events send by PNMI - * add: parameter definition for Flow Control etc. - * - * Revision 1.1 1998/08/27 11:50:27 gklug - * initial revision - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/ski2c.h b/drivers/net/sk98lin/h/ski2c.h --- a/drivers/net/sk98lin/h/ski2c.h Wed Feb 4 16:51:34 2004 +++ b/drivers/net/sk98lin/h/ski2c.h Wed Feb 4 16:51:34 2004 @@ -2,8 +2,6 @@ * * Name: ski2c.h * Project: Gigabit Ethernet Adapters, TWSI-Module - * Version: $Revision: 1.35 $ - * Date: $Date: 2003/10/20 09:06:30 $ * Purpose: Defines to access Voltage and Temperature Sensor * ******************************************************************************/ @@ -19,128 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: ski2c.h,v $ - * Revision 1.35 2003/10/20 09:06:30 rschmidt - * Added prototypes for SkI2cRead() and SkI2cWrite(). - * Editorial changes. - * - * Revision 1.34 2003/01/28 09:11:21 rschmidt - * Editorial changes - * - * Revision 1.33 2002/10/14 16:40:50 rschmidt - * Editorial changes (TWSI) - * - * Revision 1.32 2002/08/13 08:55:07 rschmidt - * Editorial changes - * - * Revision 1.31 2002/08/06 09:44:22 jschmalz - * Extensions and changes for Yukon - * - * Revision 1.30 2001/04/05 11:38:09 rassmann - * Set SenState to idle in SkI2cWaitIrq(). - * Changed error message in SkI2cWaitIrq(). - * - * Revision 1.29 2000/08/03 14:28:17 rassmann - * - Added function to wait for I2C being ready before resetting the board. - * - Replaced one duplicate "out of range" message with correct one. - * - * Revision 1.28 1999/11/22 13:55:46 cgoos - * Changed license header to GPL. - * - * Revision 1.27 1999/05/20 09:23:10 cgoos - * Changes for 1000Base-T (Fan sensors). - * - * Revision 1.26 1998/12/01 13:45:47 gklug - * add: InitLevel to I2c struct - * - * Revision 1.25 1998/11/03 06:55:16 gklug - * add: Dummy Reads to I2c struct - * - * Revision 1.24 1998/10/02 14:28:59 cgoos - * Added prototype for SkI2cIsr. - * - * Revision 1.23 1998/09/08 12:20:11 gklug - * add: prototypes for init and read functions - * - * Revision 1.22 1998/09/08 07:37:56 gklug - * add: log error if PCI_IO voltage sensor could not be initialized - * - * Revision 1.21 1998/09/04 08:38:05 malthoff - * Change the values for I2C_READ and I2C_WRITE - * - * Revision 1.20 1998/08/25 07:52:22 gklug - * chg: Timestamps (last) added for logging - * - * Revision 1.19 1998/08/25 06:09:00 gklug - * rmv: warning and error levels of the individual sensors. - * add: timing definitions for sending traps and logging errors - * - * Revision 1.18 1998/08/20 11:41:15 gklug - * chg: omit STRCPY macro by using char * as Sensor Description - * - * Revision 1.17 1998/08/20 11:37:43 gklug - * chg: change Ioc to IoC - * - * Revision 1.16 1998/08/20 11:30:38 gklug - * fix: SenRead declaration - * - * Revision 1.15 1998/08/20 11:27:53 gklug - * fix: Compile bugs with new awrning constants - * - * Revision 1.14 1998/08/20 08:53:12 gklug - * fix: compiler errors - * add: Threshold values - * - * Revision 1.13 1998/08/19 12:21:16 gklug - * fix: remove struct from C files (see CCC) - * add: typedefs for all structs - * - * Revision 1.12 1998/08/19 10:57:41 gklug - * add: Warning levels - * - * Revision 1.11 1998/08/18 08:37:02 malthoff - * Prototypes not required for SK_DIAG. - * - * Revision 1.10 1998/08/17 13:54:00 gklug - * fix: declaration of event function - * - * Revision 1.9 1998/08/17 06:48:39 malthoff - * Remove some unrequired macros. - * Fix the compiler errors. - * - * Revision 1.8 1998/08/14 06:47:19 gklug - * fix: Values are intergers - * - * Revision 1.7 1998/08/14 06:26:05 gklug - * add: Init error message - * - * Revision 1.6 1998/08/13 08:31:08 gklug - * add: Error message - * - * Revision 1.5 1998/08/12 14:32:04 gklug - * add: new error code/message - * - * Revision 1.4 1998/08/12 13:39:08 gklug - * chg: names of error messages - * add: defines for Sensor type and thresholds - * - * Revision 1.3 1998/08/11 07:57:16 gklug - * add: sensor struct - * add: Timeout defines - * add: I2C control struct for pAC - * - * Revision 1.2 1998/07/17 11:29:02 gklug - * rmv: Microwire and SMTPANIC - * - * Revision 1.1 1998/06/19 14:30:10 malthoff - * Created. Sources taken from ML Project. * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/skqueue.h b/drivers/net/sk98lin/h/skqueue.h --- a/drivers/net/sk98lin/h/skqueue.h Wed Feb 4 16:51:37 2004 +++ b/drivers/net/sk98lin/h/skqueue.h Wed Feb 4 16:51:37 2004 @@ -2,8 +2,6 @@ * * Name: skqueue.h * Project: Gigabit Ethernet Adapters, Event Scheduler Module - * Version: $Revision: 1.16 $ - * Date: $Date: 2003/09/16 12:50:32 $ * Purpose: Defines for the Event queue * ******************************************************************************/ @@ -21,68 +19,6 @@ * The information in this file is provided "AS IS" without warranty. * ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skqueue.h,v $ - * Revision 1.16 2003/09/16 12:50:32 rschmidt - * Editorial changes - * - * Revision 1.15 2003/05/13 17:54:57 mkarl - * Editorial changes. - * - * Revision 1.14 2002/03/15 10:52:13 mkunz - * Added event classes for link aggregation - * - * Revision 1.13 1999/11/22 13:59:05 cgoos - * Changed license header to GPL. - * - * Revision 1.12 1998/09/08 08:48:01 gklug - * add: init level handling - * - * Revision 1.11 1998/09/03 14:15:11 gklug - * add: CSUM and HWAC Eventclass and function. - * fix: pParaPtr according to CCC - * - * Revision 1.10 1998/08/20 12:43:03 gklug - * add: typedef SK_QUEUE - * - * Revision 1.9 1998/08/19 09:50:59 gklug - * fix: remove struct keyword from C-code (see CCC) add typedefs - * - * Revision 1.8 1998/08/18 07:00:01 gklug - * fix: SK_PTR not defined use void * instead. - * - * Revision 1.7 1998/08/17 13:43:19 gklug - * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR - * - * Revision 1.6 1998/08/14 07:09:30 gklug - * fix: chg pAc -> pAC - * - * Revision 1.5 1998/08/11 14:26:44 gklug - * chg: Event Dispatcher returns now int. - * - * Revision 1.4 1998/08/11 12:15:21 gklug - * add: Error numbers of skqueue module - * - * Revision 1.3 1998/08/07 12:54:23 gklug - * fix: first compiled version - * - * Revision 1.2 1998/08/07 09:34:00 gklug - * adapt structure defs to CCC - * add: prototypes for functions - * - * Revision 1.1 1998/07/30 14:52:12 gklug - * Initial version. - * Defines Event Classes, Event structs and queue management variables. - * - ******************************************************************************/ - -/* - * SKQUEUE.H contains all defines and types for the event queue - */ #ifndef _SKQUEUE_H_ #define _SKQUEUE_H_ diff -Nru a/drivers/net/sk98lin/h/skrlmt.h b/drivers/net/sk98lin/h/skrlmt.h --- a/drivers/net/sk98lin/h/skrlmt.h Wed Feb 4 16:51:37 2004 +++ b/drivers/net/sk98lin/h/skrlmt.h Wed Feb 4 16:51:37 2004 @@ -2,8 +2,6 @@ * * Name: skrlmt.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.37 $ - * Date: $Date: 2003/04/15 09:43:43 $ * Purpose: Header file for Redundant Link ManagemenT. * ******************************************************************************/ @@ -20,137 +18,6 @@ * * The information in this file is provided "AS IS" without warranty. * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skrlmt.h,v $ - * Revision 1.37 2003/04/15 09:43:43 tschilli - * Copyright messages changed. - * - * Revision 1.36 2003/04/14 15:56:22 tschilli - * "#error C++ is not yet supported." removed. - * - * Revision 1.35 2003/01/31 14:12:41 mkunz - * single port adapter runs now with two identical MAC addresses - * - * Revision 1.34 2002/09/23 15:13:41 rwahl - * Editorial changes. - * - * Revision 1.33 2001/07/03 12:16:48 mkunz - * New Flag ChgBcPrio (Change priority of last broadcast received) - * - * Revision 1.32 2001/02/14 14:06:31 rassmann - * Editorial changes. - * - * Revision 1.31 2001/02/05 14:25:26 rassmann - * Prepared RLMT for transparent operation. - * - * Revision 1.30 2001/01/22 13:41:39 rassmann - * Supporting two nets on dual-port adapters. - * - * Revision 1.29 2000/11/17 08:58:00 rassmann - * Moved CheckSwitch from SK_RLMT_PACKET_RECEIVED to SK_RLMT_TIM event. - * - * Revision 1.28 2000/11/09 12:24:34 rassmann - * Editorial changes. - * - * Revision 1.27 1999/11/22 13:59:56 cgoos - * Changed license header to GPL. - * - * Revision 1.26 1999/10/04 14:01:19 rassmann - * Corrected reaction to reception of BPDU frames (#10441). - * - * Revision 1.25 1999/07/20 12:53:39 rassmann - * Fixed documentation errors for lookahead macros. - * - * Revision 1.24 1999/05/28 11:15:56 rassmann - * Changed behaviour to reflect Design Spec v1.2. - * Controlling Link LED(s). - * Introduced RLMT Packet Version field in RLMT Packet. - * Newstyle lookahead macros (checking meta-information before looking at - * the packet). - * - * Revision 1.23 1999/01/28 12:50:42 rassmann - * Not using broadcast time stamps in CheckLinkState mode. - * - * Revision 1.22 1999/01/27 14:13:04 rassmann - * Monitoring broadcast traffic. - * Switching more reliably and not too early if switch is - * configured for spanning tree. - * - * Revision 1.21 1998/12/08 13:11:25 rassmann - * Stopping SegTimer at RlmtStop. - * - * Revision 1.20 1998/11/24 12:37:33 rassmann - * Implemented segmentation check. - * - * Revision 1.19 1998/11/17 13:43:06 rassmann - * Handling (logical) tx failure. - * Sending packet on logical address after PORT_SWITCH. - * - * Revision 1.18 1998/11/13 16:56:56 rassmann - * Added macro version of SkRlmtLookaheadPacket. - * - * Revision 1.17 1998/11/06 18:06:05 rassmann - * Corrected timing when RLMT checks fail. - * Clearing tx counter earlier in periodical checks. - * - * Revision 1.16 1998/11/03 13:53:50 rassmann - * RLMT should switch now (at least in mode 3). - * - * Revision 1.15 1998/10/22 11:39:52 rassmann - * Corrected signed/unsigned mismatches. - * Corrected receive list handling and address recognition. - * - * Revision 1.14 1998/10/15 15:16:36 rassmann - * Finished Spanning Tree checking. - * Checked with lint. - * - * Revision 1.13 1998/09/24 19:16:08 rassmann - * Code cleanup. - * Introduced Timer for PORT_DOWN due to no RX. - * - * Revision 1.12 1998/09/16 11:09:52 rassmann - * Syntax corrections. - * - * Revision 1.11 1998/09/15 11:28:50 rassmann - * Syntax corrections. - * - * Revision 1.10 1998/09/14 17:07:38 rassmann - * Added code for port checking via LAN. - * Changed Mbuf definition. - * - * Revision 1.9 1998/09/07 11:14:15 rassmann - * Syntax corrections. - * - * Revision 1.8 1998/09/07 09:06:08 rassmann - * Syntax corrections. - * - * Revision 1.7 1998/09/04 19:41:34 rassmann - * Syntax corrections. - * Started entering code for checking local links. - * - * Revision 1.6 1998/09/04 12:14:28 rassmann - * Interface cleanup. - * - * Revision 1.5 1998/09/02 16:55:29 rassmann - * Updated to reflect new DRV/HWAC/RLMT interface. - * - * Revision 1.4 1998/09/02 07:26:02 afischer - * typedef for SK_RLMT_PORT - * - * Revision 1.3 1998/08/27 14:29:03 rassmann - * Code cleanup. - * - * Revision 1.2 1998/08/27 14:26:25 rassmann - * Updated interface. - * - * Revision 1.1 1998/08/21 08:29:10 rassmann - * First public version. - * ******************************************************************************/ /****************************************************************************** diff -Nru a/drivers/net/sk98lin/h/sktimer.h b/drivers/net/sk98lin/h/sktimer.h --- a/drivers/net/sk98lin/h/sktimer.h Wed Feb 4 16:51:34 2004 +++ b/drivers/net/sk98lin/h/sktimer.h Wed Feb 4 16:51:34 2004 @@ -2,8 +2,6 @@ * * Name: sktimer.h * Project: Gigabit Ethernet Adapters, Event Scheduler Module - * Version: $Revision: 1.11 $ - * Date: $Date: 2003/09/16 12:58:18 $ * Purpose: Defines for the timer functions * ******************************************************************************/ @@ -19,48 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: sktimer.h,v $ - * Revision 1.11 2003/09/16 12:58:18 rschmidt - * Editorial changes - * - * Revision 1.10 2003/05/13 17:56:44 mkarl - * Editorial changes. - * - * Revision 1.9 1999/11/22 14:00:29 cgoos - * Changed license header to GPL. - * - * Revision 1.8 1998/09/08 08:48:02 gklug - * add: init level handling - * - * Revision 1.7 1998/08/20 12:31:29 gklug - * fix: SK_TIMCTRL needs to be defined - * - * Revision 1.6 1998/08/19 09:51:00 gklug - * fix: remove struct keyword from C-code (see CCC) add typedefs - * - * Revision 1.5 1998/08/17 13:43:21 gklug - * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR - * - * Revision 1.4 1998/08/14 07:09:31 gklug - * fix: chg pAc -> pAC - * - * Revision 1.3 1998/08/07 12:54:24 gklug - * fix: first compiled version - * - * Revision 1.2 1998/08/07 09:35:29 gklug - * add: Timer control struct for Adapters context - * add: function prototypes - * - * Revision 1.1 1998/08/05 11:27:01 gklug - * First version: adapted from SMT - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/sktypes.h b/drivers/net/sk98lin/h/sktypes.h --- a/drivers/net/sk98lin/h/sktypes.h Wed Feb 4 16:51:37 2004 +++ b/drivers/net/sk98lin/h/sktypes.h Wed Feb 4 16:51:37 2004 @@ -2,8 +2,6 @@ * * Name: sktypes.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.2 $ - * Date: $Date: 2003/10/07 08:16:51 $ * Purpose: Define data types for Linux * ******************************************************************************/ @@ -22,31 +20,6 @@ * ******************************************************************************/ - /***************************************************************************** - * - * History: - * - * $Log: sktypes.h,v $ - * Revision 1.2 2003/10/07 08:16:51 mlindner - * Fix: Copyright changes - * - * Revision 1.1 2003/07/21 07:26:01 rroesler - * Fix: Re-Enter after CVS crash - * - * Revision 1.3 2003/02/25 14:16:40 mlindner - * Fix: Copyright statement - * - * Revision 1.2 1999/11/22 14:01:58 cgoos - * Changed license header to GPL. - * Now using Linux' fixed size types instead of standard types. - * - * Revision 1.1 1999/02/16 07:41:40 cgoos - * First version. - * - * - * - *****************************************************************************/ - /****************************************************************************** * * Description: diff -Nru a/drivers/net/sk98lin/h/skversion.h b/drivers/net/sk98lin/h/skversion.h --- a/drivers/net/sk98lin/h/skversion.h Wed Feb 4 16:51:36 2004 +++ b/drivers/net/sk98lin/h/skversion.h Wed Feb 4 16:51:36 2004 @@ -2,8 +2,6 @@ * * Name: version.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.5 $ - * Date: $Date: 2003/10/07 08:16:51 $ * Purpose: SK specific Error log support * ******************************************************************************/ @@ -22,42 +20,6 @@ * ******************************************************************************/ -/****************************************************************************** - * - * History: - * $Log: skversion.h,v $ - * Revision 1.5 2003/10/07 08:16:51 mlindner - * Fix: Copyright changes - * - * Revision 1.4 2003/09/22 08:40:10 mlindner - * Add: Added DRIVER_FILE_NAME and DRIVER_REL_DATE - * - * Revision 1.3 2003/08/25 13:34:48 mlindner - * Fix: Lint changes - * - * Revision 1.2 2003/08/13 12:01:01 mlindner - * Add: Changes for Lint - * - * Revision 1.1 2003/07/24 09:29:56 rroesler - * Fix: Re-Enter after CVS crash - * - * Revision 1.4 2003/02/25 14:16:40 mlindner - * Fix: Copyright statement - * - * Revision 1.3 2003/02/25 13:30:18 mlindner - * Add: Support for various vendors - * - * Revision 1.1.2.1 2001/09/05 13:38:30 mlindner - * Removed FILE description - * - * Revision 1.1 2001/03/06 09:25:00 mlindner - * first version - * - * - * - ******************************************************************************/ - - #ifdef lint static const char SysKonnectFileId[] = "@(#) (C) SysKonnect GmbH."; static const char SysKonnectBuildNumber[] = diff -Nru a/drivers/net/sk98lin/h/skvpd.h b/drivers/net/sk98lin/h/skvpd.h --- a/drivers/net/sk98lin/h/skvpd.h Wed Feb 4 16:51:34 2004 +++ b/drivers/net/sk98lin/h/skvpd.h Wed Feb 4 16:51:34 2004 @@ -2,8 +2,6 @@ * * Name: skvpd.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.15 $ - * Date: $Date: 2003/01/13 10:39:38 $ * Purpose: Defines and Macros for VPD handling * ******************************************************************************/ @@ -18,70 +16,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skvpd.h,v $ - * Revision 1.15 2003/01/13 10:39:38 rschmidt - * Replaced define for PCI device Id for YUKON with GENESIS - * Editorial changes - * - * Revision 1.14 2002/11/14 15:18:10 gheinig - * Added const specifier to key and buf parameters for VpdPara,VpdRead - * and VpdWrite. This is necessary for the Diag 7 GUI API - * - * Revision 1.13 2002/10/14 15:58:18 rschmidt - * Added entry in rom_size struct s_vpd - * Editorial changes - * - * Revision 1.12 2002/09/09 14:43:51 mkarl - * added PCI Id of Yukon for reading VPD in diag before the adapter has - * been initialized - * editorial changes - * - * Revision 1.11 2002/07/26 13:19:16 mkarl - * added support for Yukon - * added vpd_size to VPD struct - * - * Revision 1.10 2000/08/10 11:29:07 rassmann - * Editorial changes. - * Preserving 32-bit alignment in structs for the adapter context. - * Removed unused function VpdWriteDword() (#if 0). - * Made VpdReadKeyword() available for SKDIAG only. - * - * Revision 1.9 1999/11/22 14:02:27 cgoos - * Changed license header to GPL. - * - * Revision 1.8 1999/03/11 14:26:40 malthoff - * Replace __STDC__ with SK_KR_PROTO. - * - * Revision 1.7 1998/10/28 07:27:17 gklug - * rmv: SWAP macros - * add: VPD_IN/OUT8 macros - * chg: interface definition - * - * Revision 1.6 1998/10/22 10:03:44 gklug - * fix: use SK_OUT16 instead of SK_OUTW - * - * Revision 1.5 1998/10/14 07:05:31 cgoos - * Changed constants in SK_SWAP_32 to UL. - * - * Revision 1.4 1998/08/19 08:14:09 gklug - * fix: remove struct keyword as much as possible from the C-code (see CCC) - * - * Revision 1.3 1998/08/18 08:18:56 malthoff - * Modify VPD in and out macros for SK_DIAG - * - * Revision 1.2 1998/07/03 14:49:08 malthoff - * Add VPD_INxx() and VPD_OUTxx() macros for the Diagnostics tool. - * - * Revision 1.1 1998/06/19 14:08:03 malthoff - * Created. - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/h/xmac_ii.h b/drivers/net/sk98lin/h/xmac_ii.h --- a/drivers/net/sk98lin/h/xmac_ii.h Wed Feb 4 16:51:37 2004 +++ b/drivers/net/sk98lin/h/xmac_ii.h Wed Feb 4 16:51:37 2004 @@ -2,8 +2,6 @@ * * Name: xmac_ii.h * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.52 $ - * Date: $Date: 2003/10/02 16:35:50 $ * Purpose: Defines and Macros for Gigabit Ethernet Controller * ******************************************************************************/ @@ -19,207 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: xmac_ii.h,v $ - * Revision 1.52 2003/10/02 16:35:50 rschmidt - * Added defines for default values of GMAC parameters - * Changed defines for setting GMAC parameters - * Editorial changes - * - * Revision 1.51 2003/09/23 09:04:27 malthoff - * Add bit definitions for PHY_MARV_EXT_P_STAT. - * - * Revision 1.50 2003/09/16 14:15:07 rschmidt - * Added defines for Extended PHY Specific Control - * Editorial changes - * - * Revision 1.49 2003/09/16 07:22:46 mschmid - * Added defines for Marvell PHY energy detect modes - * Added macros for MAC parameter setting in port structure - * - * Revision 1.48 2003/05/13 17:17:55 mkarl - * Editorial changes. - * - * Revision 1.47 2003/03/31 07:37:25 mkarl - * Corrected Copyright. - * Editorial changes. - * - * Revision 1.46 2003/01/28 09:47:45 rschmidt - * Added defines for copper MDI/MDIX configuration - * Added defines for LED Control Register - * Editorial changes - * - * Revision 1.45 2002/12/10 14:35:13 rschmidt - * Corrected defines for Extended PHY Specific Control - * Added defines for Ext. PHY Specific Ctrl 2 Reg. (Fiber specific) - * - * Revision 1.44 2002/12/09 14:58:41 rschmidt - * Added defines for Ext. PHY Specific Ctrl Reg. (downshift feature) - * Added 'GMR_FS_UN_SIZE'-Bit to Rx GMAC FIFO Flush Mask - * - * Revision 1.43 2002/12/05 10:14:45 rschmidt - * Added define for GMAC's Half Duplex Burst Mode - * Added define for Rx GMAC FIFO Flush Mask (default) - * - * Revision 1.42 2002/11/12 16:48:19 rschmidt - * Added defines for Cable Diagnostic Register (GPHY) - * Editorial changes - * - * Revision 1.41 2002/10/21 11:20:22 rschmidt - * Added bit GMR_FS_GOOD_FC to GMR_FS_ANY_ERR - * Editorial changes - * - * Revision 1.40 2002/10/14 14:54:14 rschmidt - * Added defines for GPHY Specific Status and GPHY Interrupt Status - * Added bits PHY_M_IS_AN_ERROR and PHY_M_IS_FIFO_ERROR to PHY_M_DEF_MSK - * Editorial changes - * - * Revision 1.39 2002/10/10 15:53:44 mkarl - * added some bit definitions for link speed status and LED's - * - * Revision 1.38 2002/08/21 16:23:46 rschmidt - * Added defines for PHY Specific Ctrl Reg - * Editorial changes - * - * Revision 1.37 2002/08/16 14:50:33 rschmidt - * Added defines for Auto-Neg. Advertisement YUKON Fiber (88E1011S only) - * Changed define PHY_M_DEF_MSK for GPHY IRQ Mask - * Editorial changes - * - * Revision 1.36 2002/08/12 13:21:10 rschmidt - * Added defines for different Broadcom PHY Ids - * - * Revision 1.35 2002/08/08 15:58:01 rschmidt - * Added defines for Manual LED Override register (YUKON) - * Editorial changes - * - * Revision 1.34 2002/07/31 17:23:36 rwahl - * Added define GMR_FS_ANY_ERR (analogous to XMR_FS_ANY_ERR). - * - * Revision 1.33 2002/07/23 16:03:37 rschmidt - * Added defines for GPHY registers - * Editorial changes - * - * Revision 1.32 2002/07/15 18:14:37 rwahl - * Added GMAC MIB counters definitions. - * Editorial changes. - * - * Revision 1.31 2002/07/15 15:42:50 rschmidt - * Removed defines from PHY specific reg. which are - * common to all PHYs - * Added defines for GMAC MIB Counters - * Editorial changes - * - * Revision 1.30 2002/06/05 08:22:12 rschmidt - * Changed defines for GMAC Rx Control Register and Rx Status - * Editorial changes - * - * Revision 1.29 2002/04/25 11:43:56 rschmidt - * Added define PHY_B_AS_PAUSE_MSK for BCom Pause Res. - * Added new registers and defines for YUKON (GMAC, GPHY) - * Added Receive Frame Status Encoding for YUKON - * Editorial changes - * - * Revision 1.28 2000/11/09 12:32:49 rassmann - * Renamed variables. - * - * Revision 1.27 2000/05/17 11:00:46 malthoff - * Add bit for enable/disable power management in BCOM chip. - * - * Revision 1.26 1999/11/22 14:03:00 cgoos - * Changed license header to GPL. - * - * Revision 1.25 1999/08/12 19:19:38 malthoff - * Add PHY_B_AC_TX_TST bit according to BCOM A1 errata sheet. - * - * Revision 1.24 1999/07/30 11:27:21 cgoos - * Fixed a missing end-of-comment. - * - * Revision 1.23 1999/07/30 07:03:31 malthoff - * Cut some long comments. - * Correct the XMAC PHY ID definitions. - * - * Revision 1.22 1999/05/19 07:33:18 cgoos - * Changes for 1000Base-T. - * - * Revision 1.21 1999/03/25 07:46:11 malthoff - * Add XM_HW_CFG, XM_TS_READ, and XM_TS_LOAD registers. - * - * Revision 1.20 1999/03/12 13:36:09 malthoff - * Remove __STDC__. - * - * Revision 1.19 1998/12/10 12:22:54 gklug - * fix: RX_PAGE must be in interrupt mask - * - * Revision 1.18 1998/12/10 10:36:36 gklug - * fix: swap of pause bits - * - * Revision 1.17 1998/11/18 13:21:45 gklug - * fix: Default interrupt mask - * - * Revision 1.16 1998/10/29 15:53:21 gklug - * fix: Default mask uses ASS (GP0) signal - * - * Revision 1.15 1998/10/28 13:52:52 malthoff - * Add new bits in RX_CMD register. - * - * Revision 1.14 1998/10/19 15:34:53 gklug - * fix: typos - * - * Revision 1.13 1998/10/14 07:19:03 malthoff - * bug fix: Every define which describes bit 31 - * must be declared as unsigned long 'UL'. - * fix bit definitions of PHY_AN_RFB and PHY_AN_PAUSE. - * Remove ANP defines. Rework the RFB defines. - * - * Revision 1.12 1998/10/14 06:22:44 cgoos - * Changed shifted constant to ULONG. - * - * Revision 1.11 1998/10/14 05:43:26 gklug - * add: shift pause coding - * fix: PAUSE bits definition - * - * Revision 1.10 1998/10/13 09:19:21 malthoff - * Again change XMR_FS_ANY_ERR because of new info from XaQti. - * - * Revision 1.9 1998/10/09 07:58:30 malthoff - * Add XMR_FS_FCS_ERR to XMR_FS_ANY_ERR. - * - * Revision 1.8 1998/10/09 07:18:17 malthoff - * bug fix of a bug fix: XM_PAUSE_MODE and XM_DEF_MODE - * are not inverted! Bug XM_DEF_MSK is inverted. - * - * Revision 1.7 1998/10/05 08:04:32 malthoff - * bug fix: XM_PAUSE_MODE and XM_DEF_MODE - * must be inverted declarations. - * - * Revision 1.6 1998/09/28 13:38:18 malthoff - * Add default modes and masks XM_DEF_MSK, - * XM_PAUSE_MODE and XM_DEF_MODE - * - * Revision 1.5 1998/09/16 14:42:04 malthoff - * Bug Fix: XM_GP_PORT is a 32 bit (not a 16 bit) register. - * - * Revision 1.4 1998/08/20 14:59:47 malthoff - * Rework this file after reading the XaQti data sheet - * "Differences between Rev. B2 & Rev. C XMAC II". - * This file is now 100% XMAC II Rev. C complained. - * - * Revision 1.3 1998/06/29 12:18:23 malthoff - * Correct XMR_FS_ANY_ERR definition. - * - * Revision 1.2 1998/06/29 12:10:56 malthoff - * Add define XMR_FS_ANY_ERR. - * - * Revision 1.1 1998/06/19 13:37:17 malthoff - * created. - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/skaddr.c b/drivers/net/sk98lin/skaddr.c --- a/drivers/net/sk98lin/skaddr.c Wed Feb 4 16:51:36 2004 +++ b/drivers/net/sk98lin/skaddr.c Wed Feb 4 16:51:36 2004 @@ -2,8 +2,6 @@ * * Name: skaddr.c * Project: Gigabit Ethernet Adapters, ADDR-Module - * Version: $Revision: 1.52 $ - * Date: $Date: 2003/06/02 13:46:15 $ * Purpose: Manage Addresses (Multicast and Unicast) and Promiscuous Mode. * ******************************************************************************/ @@ -19,203 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skaddr.c,v $ - * Revision 1.52 2003/06/02 13:46:15 tschilli - * Editorial changes. - * - * Revision 1.51 2003/05/13 17:12:43 mkarl - * Changes for SLIM Driver via SK_SLIM. - * Changes for driver not using RLMT via SK_NO_RLMT. - * Changes for driver not supporting MAC address override via SK_NO_MAO. - * Separeted GENESIS and YUKON only code to reduce code size. - * Editorial changes. - * - * Revision 1.50 2003/05/08 12:29:31 rschmidt - * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis. - * Changed initialisation for Next0[SK_MAX_MACS] to avoid - * compiler errors when SK_MAX_MACS=1. - * Editorial changes. - * - * Revision 1.49 2003/04/15 09:30:51 tschilli - * Copyright messages changed. - * "#error C++ is not yet supported." removed. - * - * Revision 1.48 2003/02/12 17:09:37 tschilli - * Fix in SkAddrOverride() to set both (physical and logical) MAC addresses - * in case that both addresses are identical. - * - * Revision 1.47 2002/09/17 06:31:10 tschilli - * Handling of SK_PROM_MODE_ALL_MC flag in SkAddrGmacMcUpdate() - * and SkAddrGmacPromiscuousChange() fixed. - * Editorial changes. - * - * Revision 1.46 2002/08/22 07:55:41 tschilli - * New function SkGmacMcHash() for GMAC multicast hashing algorithm added. - * Editorial changes. - * - * Revision 1.45 2002/08/15 12:29:35 tschilli - * SkAddrGmacMcUpdate() and SkAddrGmacPromiscuousChange() changed. - * - * Revision 1.44 2002/08/14 12:18:03 rschmidt - * Replaced direct handling of MAC Hashing (XMAC and GMAC) - * with routine SkMacHashing(). - * Replaced wrong 3rd para 'i' with 'PortNumber' in SkMacPromiscMode(). - * - * Revision 1.43 2002/08/13 09:37:43 rschmidt - * Corrected some SK_DBG_MSG outputs. - * Replaced wrong 2nd para pAC with IoC in SkMacPromiscMode(). - * Editorial changes. - * - * Revision 1.42 2002/08/12 11:24:36 rschmidt - * Remove setting of logical MAC address GM_SRC_ADDR_2 in SkAddrInit(). - * Replaced direct handling of MAC Promiscuous Mode (XMAC and GMAC) - * with routine SkMacPromiscMode(). - * Editorial changes. - * - * Revision 1.41 2002/06/10 13:52:18 tschilli - * Changes for handling YUKON. - * All changes are internally and not visible to the programmer - * using this module. - * - * Revision 1.40 2001/02/14 14:04:59 rassmann - * Editorial changes. - * - * Revision 1.39 2001/01/30 10:30:04 rassmann - * Editorial changes. - * - * Revision 1.38 2001/01/25 16:26:52 rassmann - * Ensured that logical address overrides are done on net's active port. - * - * Revision 1.37 2001/01/22 13:41:34 rassmann - * Supporting two nets on dual-port adapters. - * - * Revision 1.36 2000/08/07 11:10:39 rassmann - * Editorial changes. - * - * Revision 1.35 2000/05/04 09:38:41 rassmann - * Editorial changes. - * Corrected multicast address hashing. - * - * Revision 1.34 1999/11/22 13:23:44 cgoos - * Changed license header to GPL. - * - * Revision 1.33 1999/05/28 10:56:06 rassmann - * Editorial changes. - * - * Revision 1.32 1999/03/31 10:59:20 rassmann - * Returning Success instead of DupAddr if address shall be overridden - * with same value. - * - * Revision 1.31 1999/01/14 16:18:17 rassmann - * Corrected multicast initialization. - * - * Revision 1.30 1999/01/04 10:30:35 rassmann - * SkAddrOverride only possible after SK_INIT_IO phase. - * - * Revision 1.29 1998/12/29 13:13:10 rassmann - * An address override is now preserved in the SK_INIT_IO phase. - * All functions return an int now. - * Extended parameter checking. - * - * Revision 1.28 1998/12/01 11:45:53 rassmann - * Code cleanup. - * - * Revision 1.27 1998/12/01 09:22:49 rassmann - * SkAddrMcAdd and SkAddrMcUpdate returned SK_MC_FILTERING_INEXACT - * too often. - * - * Revision 1.26 1998/11/24 12:39:44 rassmann - * Reserved multicast entry for BPDU address. - * 13 multicast entries left for protocol. - * - * Revision 1.25 1998/11/17 16:54:23 rassmann - * Using exact match for up to 14 multicast addresses. - * Still receiving all multicasts if more addresses are added. - * - * Revision 1.24 1998/11/13 17:24:31 rassmann - * Changed return value of SkAddrOverride to int. - * - * Revision 1.23 1998/11/13 16:56:18 rassmann - * Added macro SK_ADDR_COMPARE. - * Changed return type of SkAddrOverride to SK_BOOL. - * - * Revision 1.22 1998/11/04 17:06:17 rassmann - * Corrected McUpdate and PromiscuousChange functions. - * - * Revision 1.21 1998/10/29 14:34:04 rassmann - * Clearing SK_ADDR struct at startup. - * - * Revision 1.20 1998/10/28 18:16:34 rassmann - * Avoiding I/Os before SK_INIT_RUN level. - * Aligning InexactFilter. - * - * Revision 1.19 1998/10/28 11:29:28 rassmann - * Programming physical address in SkAddrMcUpdate. - * Corrected programming of exact match entries. - * - * Revision 1.18 1998/10/28 10:34:48 rassmann - * Corrected reading of physical addresses. - * - * Revision 1.17 1998/10/28 10:26:13 rassmann - * Getting ports' current MAC addresses from EPROM now. - * Added debug output. - * - * Revision 1.16 1998/10/27 16:20:12 rassmann - * Reading MAC address byte by byte. - * - * Revision 1.15 1998/10/22 11:39:09 rassmann - * Corrected signed/unsigned mismatches. - * - * Revision 1.14 1998/10/19 17:12:35 rassmann - * Syntax corrections. - * - * Revision 1.13 1998/10/19 17:02:19 rassmann - * Now reading permanent MAC addresses from CRF. - * - * Revision 1.12 1998/10/15 15:15:48 rassmann - * Changed Flags Parameters from SK_U8 to int. - * Checked with lint. - * - * Revision 1.11 1998/09/24 19:15:12 rassmann - * Code cleanup. - * - * Revision 1.10 1998/09/18 20:18:54 rassmann - * Added HW access. - * Implemented swapping. - * - * Revision 1.9 1998/09/16 11:32:00 rassmann - * Including skdrv1st.h again. :( - * - * Revision 1.8 1998/09/16 11:09:34 rassmann - * Syntax corrections. - * - * Revision 1.7 1998/09/14 17:06:34 rassmann - * Minor changes. - * - * Revision 1.6 1998/09/07 08:45:41 rassmann - * Syntax corrections. - * - * Revision 1.5 1998/09/04 19:40:19 rassmann - * Interface enhancements. - * - * Revision 1.4 1998/09/04 12:14:12 rassmann - * Interface cleanup. - * - * Revision 1.3 1998/09/02 16:56:40 rassmann - * Updated interface. - * - * Revision 1.2 1998/08/27 14:26:09 rassmann - * Updated interface. - * - * Revision 1.1 1998/08/21 08:30:22 rassmann - * First public version. * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/skcsum.c b/drivers/net/sk98lin/skcsum.c --- a/drivers/net/sk98lin/skcsum.c Wed Feb 4 16:51:33 2004 +++ b/drivers/net/sk98lin/skcsum.c Wed Feb 4 16:51:33 2004 @@ -2,8 +2,6 @@ * * Name: skcsum.c * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.12 $ - * Date: $Date: 2003/08/20 13:55:53 $ * Purpose: Store/verify Internet checksum in send/receive packets. * ******************************************************************************/ @@ -18,63 +16,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skcsum.c,v $ - * Revision 1.12 2003/08/20 13:55:53 mschmid - * Changed notation of #ifndef SkCsCalculateChecksum to - * #ifndef SK_CS_CALCULATE_CHECKSUM - * - * Revision 1.11 2003/03/11 14:05:55 rschmidt - * Replaced memset() by macro SK_MEMSET() - * Editorial changes - * - * Revision 1.10 2002/04/11 10:02:04 rwahl - * Fix in SkCsGetSendInfo(): - * - function did not return ProtocolFlags in every case. - * - pseudo header csum calculated wrong for big endian. - * - * Revision 1.9 2001/06/13 07:42:08 gklug - * fix: NetNumber was wrong in CLEAR_STAT event - * add: check for good NetNumber in Clear STAT - * - * Revision 1.8 2001/02/06 11:15:36 rassmann - * Supporting two nets on dual-port adapters. - * - * Revision 1.7 2000/06/29 13:17:05 rassmann - * Corrected reception of a packet with UDP checksum == 0 (which means there - * is no UDP checksum). - * - * Revision 1.6 2000/02/21 12:35:10 cgoos - * Fixed license header comment. - * - * Revision 1.5 2000/02/21 11:05:19 cgoos - * Merged changes back to common source. - * Fixed rx path for BIG ENDIAN architecture. - * - * Revision 1.1 1999/07/26 15:28:12 mkarl - * added return SKCS_STATUS_IP_CSUM_ERROR_UDP and - * SKCS_STATUS_IP_CSUM_ERROR_TCP to pass the NidsTester - * changed from common source to windows specific source - * therefore restarting with v1.0 - * - * Revision 1.3 1999/05/10 08:39:33 mkarl - * prevent overflows in SKCS_HTON16 - * fixed a bug in pseudo header checksum calculation - * added some comments - * - * Revision 1.2 1998/10/22 11:53:28 swolf - * Now using SK_DBG_MSG. - * - * Revision 1.1 1998/09/01 15:35:41 swolf - * initial revision - * - * 13-May-1998 sw Created. * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/skdim.c b/drivers/net/sk98lin/skdim.c --- a/drivers/net/sk98lin/skdim.c Wed Feb 4 16:51:34 2004 +++ b/drivers/net/sk98lin/skdim.c Wed Feb 4 16:51:34 2004 @@ -2,8 +2,6 @@ * * Name: skdim.c * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.5 $ - * Date: $Date: 2003/11/28 12:55:40 $ * Purpose: All functions to maintain interrupt moderation * ******************************************************************************/ @@ -19,40 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skdim.c,v $ - * Revision 1.5 2003/11/28 12:55:40 rroesler - * Fix: support for new process timing interface added - * - * Revision 1.4 2003/10/10 10:58:56 mlindner - * Fix: CPU detection under the kernel 2.6 - * - * Revision 1.3 2003/10/07 08:17:08 mlindner - * Fix: Copyright changes - * - * Revision 1.2 2003/08/21 12:35:05 mlindner - * Fix: Corrected CPU detection and compile errors on single CPU machines - * - * Revision 1.1 2003/07/18 13:39:55 rroesler - * Fix: Re-enter after CVS crash - * - * Revision 1.4 2003/07/07 09:45:47 rroesler - * Fix: Compiler warnings corrected - * - * Revision 1.3 2003/06/10 09:16:40 rroesler - * Adapt GetCurrentSystemLoad() to NOT access the kernels - * kstat-structure in kernel 2.5/2.6. This must be done - * due to a not exported symbol. Instead of evaluating the - * SystemLoad directly, the nbr of interrupts is used as - * a rough basis for the load. - * - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/skge.c b/drivers/net/sk98lin/skge.c --- a/drivers/net/sk98lin/skge.c Wed Feb 4 16:51:34 2004 +++ b/drivers/net/sk98lin/skge.c Wed Feb 4 16:51:34 2004 @@ -2,8 +2,6 @@ * * Name: skge.c * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.43 $ - * Date: $Date: 2004/01/29 15:47:07 $ * Purpose: The main driver source module * ******************************************************************************/ @@ -33,423 +31,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skge.c,v $ - * Revision 1.43 2004/01/29 15:47:07 mlindner - * Fix: Reset Xmac when stopping the port - * - * Revision 1.42 2003/12/12 10:05:43 mlindner - * Fix: Format of error message corrected - * - * Revision 1.41 2003/12/11 16:03:57 mlindner - * Fix: Create backup from pnmi data structure - * - * Revision 1.40 2003/12/11 12:14:48 mlindner - * Fix: Initalize Board before network configuration - * Fix: Change device names to driver name - * - * Revision 1.39 2003/12/10 08:57:38 rroesler - * Fix: Modifications regarding try_module_get() and capable() - * - * Revision 1.38 2003/12/01 17:16:50 mlindner - * Fix: Remove useless register_netdev - * - * Revision 1.37 2003/12/01 17:11:30 mlindner - * Fix: Register net device before SkGeBoardInit - * - * Revision 1.36 2003/11/28 13:04:27 rroesler - * Fix: do not print interface status in case DIAG is used - * - * Revision 1.35 2003/11/17 14:41:06 mlindner - * Fix: Endif command - * - * Revision 1.34 2003/11/17 13:29:05 mlindner - * Fix: Editorial changes - * - * Revision 1.33 2003/11/14 14:56:54 rroesler - * Fix: corrected compilation warnings kernel 2.2 - * - * Revision 1.32 2003/11/13 14:18:47 rroesler - * Fix: added latest changes regarding the use of the proc system - * - * Revision 1.31 2003/11/13 09:28:35 rroesler - * Fix: removed kernel warning 'driver changed get_stats after register' - * - * Revision 1.30 2003/11/11 13:15:27 rroesler - * Fix: use suitables kernel usage count macros when using the diag - * - * Revision 1.29 2003/11/10 09:38:26 rroesler - * Fix: restore PNMI structure backup for DIAG actions - * - * Revision 1.28 2003/11/07 17:28:45 rroesler - * Fix: Additions for the LeaveDiagMode - * - * Revision 1.27 2003/11/03 13:21:14 mlindner - * Add: SkGeBuffPad function for padding to ensure the trailing bytes exist - * - * Revision 1.26 2003/10/30 09:20:40 mlindner - * Fix: Control bit check - * - * Revision 1.25 2003/10/29 07:43:37 rroesler - * Fix: Implemented full None values handling for parameter Moderation - * - * Revision 1.24 2003/10/22 14:18:12 rroesler - * Fix: DIAG handling for DualNet cards - * - * Revision 1.23 2003/10/17 10:05:13 mlindner - * Add: New blinkmode for Morvell cards - * - * Revision 1.22 2003/10/15 12:31:25 rroesler - * Fix: Corrected bugreport #10954 (Linux System crash when using vlans) - * - * Revision 1.21 2003/10/07 12:32:28 mlindner - * Fix: Editorial changes - * - * Revision 1.20 2003/10/07 12:22:40 mlindner - * Fix: Compiler warnings - * - * Revision 1.19 2003/10/07 09:33:40 mlindner - * Fix: No warnings for illegal values of Mod and IntsPerSec - * Fix: Speed 100 in Half Duplex not allowed for Yukon - * Fix: PrefPort=B not allowed on single NICs - * - * Revision 1.18 2003/10/07 08:17:08 mlindner - * Fix: Copyright changes - * - * Revision 1.17 2003/09/29 12:06:59 mlindner - * *** empty log message *** - * - * Revision 1.16 2003/09/23 11:07:35 mlindner - * Fix: IO-control return race condition - * Fix: Interrupt moderation value check - * - * Revision 1.15 2003/09/22 08:40:05 mlindner - * Add: Added DRIVER_FILE_NAME and DRIVER_REL_DATE - * - * Revision 1.14 2003/09/22 08:11:10 mlindner - * Add: New function for PCI initialization (SkGeInitPCI) - * Add: Yukon Plus changes (ChipID, PCI...) - * Fix: TCP and UDP Checksum calculation - * - * Revision 1.13 2003/09/01 13:30:08 rroesler - * Fix: Corrected missing defines - * - * Revision 1.12 2003/09/01 13:12:02 rroesler - * Add: Code for improved DIAG Attach/Detach interface - * - * Revision 1.11 2003/08/26 16:05:19 mlindner - * Fix: Compiler warnings (void *) - * - * Revision 1.10 2003/08/25 09:24:08 mlindner - * Add: Dynamic Interrupt Moderation (DIM) port up message - * - * Revision 1.9 2003/08/21 14:09:43 mlindner - * Fix: Disable Half Duplex with Gigabit-Speed (Yukon). Enable Full Duplex. - * - * Revision 1.8 2003/08/19 15:09:18 mlindner - * Fix: Ignore ConType parameter if empty value - * - * Revision 1.7 2003/08/13 12:00:35 mlindner - * Fix: Removed useless defines - * - * Revision 1.6 2003/08/12 16:49:41 mlindner - * Fix: UDP and TCP HW-CSum calculation (Kernel 2.5/2.6) - * Fix: UDP and TCP Proto checks - * Fix: Build without ProcFS - * Fix: Kernel 2.6 editorial changes - * - * Revision 1.5 2003/08/07 12:25:07 mlindner - * Fix: ConType parameter check and error detection - * Fix: Insert various fixes applied to the kernel tree - * - * Revision 1.4 2003/08/07 10:50:21 mlindner - * Add: Speed and HW-Csum support for Yukon Lite chipset - * - * Revision 1.3 2003/08/06 11:24:08 mlindner - * Add: Kernel updates - * - * Revision 1.2 2003/07/21 08:28:47 rroesler - * Fix: Handle padded bytes using skb_put() - * - * Revision 1.63 2003/07/15 09:26:23 rroesler - * Fix: Removed memory leak when sending short padded frames - * - * Revision 1.62 2003/07/09 11:11:16 rroesler - * Fix: Call of ReceiveIrq() performed with parameter SK_FALSE in - * order not to hang the system with multiple spinlocks - * - * Revision 1.61 2003/07/08 07:32:41 rroesler - * Fix: Correct Kernel-version - * - * Revision 1.60 2003/07/07 15:42:30 rroesler - * Fix: Removed function pci_present() for 2.5/2.6 kernels (deprecated) - * Fix: Corrected warning in GetConfiguration() - * - * Revision 1.59 2003/07/07 09:44:32 rroesler - * Add: HW checksumming on kernel 2.5/2.6 - * Add: padding of short frames (<60 bytes) with 0x00 instead of 0xaa - * Add: ConType parameter combining multiple other parameters into one - * Fix: Corrected bugreport #10721 (warning when changing MTU size) - * Fix: Removed obsolete function SetQueueSize() - * Fix: Function ChangeMtuSize() returns new MTU size in kernel 2.5/2.6 - * - * Revision 1.58 2003/06/17 07:14:29 mlindner - * Add: Disable checksum functionality - * Fix: Unload module (Kernel 2.5) - * - * Revision 1.57 2003/06/05 14:55:27 mlindner - * Fix: ProcFS creation (Kernel 2.2.x) - * Fix: ProcFS OWNER (Kernel 2.2.x) - * - * Revision 1.56 2003/06/03 14:34:29 mlindner - * Add: Additions for SK_SLIM - * Fix: SkGeIoctl SK_IOCTL_GEN - * - * Revision 1.55 2003/05/26 13:00:52 mlindner - * Add: Support for Kernel 2.5/2.6 - * Add: Support for new IO-control MIB data structure - * Add: New SkOsGetTime function - * Fix: Race condition with broken LM80 chip - * Fix: Race condition with padded frames - * - * Revision 1.54 2003/04/28 13:07:27 mlindner - * Fix: Delay race condition with some server machines - * - * Revision 1.53 2003/04/28 12:49:49 mlindner - * Fix: Code optimization - * - * Revision 1.52 2003/04/28 12:24:32 mlindner - * Fix: Disabled HW Error IRQ on 32-bit Yukon if sensor IRQ occurs - * - * Revision 1.51 2003/04/16 08:31:14 mlindner - * Fix: Kernel 2.2 compilation - * - * Revision 1.49 2003/04/10 09:08:51 mlindner - * Add: Blink mode verification - * Fix: Checksum calculation - * - * Revision 1.48 2003/03/21 14:48:38 rroesler - * Added code for interrupt moderation - * - * Revision 1.47 2003/03/12 13:56:15 mlindner - * Fix: Mac update during SK_DRV_NET_UP - * - * Revision 1.46 2003/02/25 14:16:36 mlindner - * Fix: Copyright statement - * - * Revision 1.45 2003/02/25 13:25:55 mlindner - * Add: Performance improvements - * Add: Support for various vendors - * Fix: Init function - * - * Revision 1.44 2003/01/09 09:25:26 mlindner - * Fix: Remove useless init_module/cleanup_module forward declarations - * - * Revision 1.43 2002/11/29 08:42:41 mlindner - * Fix: Boot message - * - * Revision 1.42 2002/11/28 13:30:23 mlindner - * Add: New frame check - * - * Revision 1.41 2002/11/27 13:55:18 mlindner - * Fix: Drop wrong csum packets - * Fix: Initialize proc_entry after hw check - * - * Revision 1.40 2002/10/31 07:50:37 tschilli - * Function SkGeInitAssignRamToQueues() from common module inserted. - * Autonegotiation is set to ON for all adapters. - * LinkSpeedUsed is used in link up status report. - * Role parameter will show up for 1000 Mbps links only. - * GetConfiguration() inserted after init level 1 in SkGeChangeMtu(). - * All return values of SkGeInit() and SkGeInitPort() are checked. - * - * Revision 1.39 2002/10/02 12:56:05 mlindner - * Add: Support for Yukon - * Add: Support for ZEROCOPY, scatter-gather and hw checksum - * Add: New transmit ring function (use SG and TCP/UDP hardware checksumming) - * Add: New init function - * Add: Speed check and setup - * Add: Merge source for kernel 2.2.x and 2.4.x - * Add: Opcode check for tcp - * Add: Frame length check - * Fix: Transmit complete interrupt - * Fix: Interrupt moderation - * - * Revision 1.29.2.13 2002/01/14 12:44:52 mlindner - * Fix: Rlmt modes - * - * Revision 1.29.2.12 2001/12/07 12:06:18 mlindner - * Fix: malloc -> slab changes - * - * Revision 1.29.2.11 2001/12/06 15:19:20 mlindner - * Add: DMA attributes - * Fix: Module initialisation - * Fix: pci_map_single and pci_unmap_single replaced - * - * Revision 1.29.2.10 2001/12/06 09:56:50 mlindner - * Corrected some printk's - * - * Revision 1.29.2.9 2001/09/05 12:15:34 mlindner - * Add: LBFO Changes - * Fix: Counter Errors (Jumbo == to long errors) - * Fix: Changed pAC->PciDev declaration - * Fix: too short counters - * - * Revision 1.29.2.8 2001/06/25 12:10:44 mlindner - * fix: ReceiveIrq() changed. - * - * Revision 1.29.2.7 2001/06/25 08:07:05 mlindner - * fix: RLMT locking in ReceiveIrq() changed. - * - * Revision 1.29.2.6 2001/05/21 07:59:29 mlindner - * fix: MTU init problems - * - * Revision 1.29.2.5 2001/05/08 11:25:08 mlindner - * fix: removed VLAN error message - * - * Revision 1.29.2.4 2001/05/04 13:31:43 gklug - * fix: do not handle eth_copy on bad fragments received. - * - * Revision 1.29.2.3 2001/04/23 08:06:43 mlindner - * Fix: error handling - * - * Revision 1.29.2.2 2001/03/15 12:04:54 mlindner - * Fixed memory problem - * - * Revision 1.29.2.1 2001/03/12 16:41:44 mlindner - * add: procfs function - * add: dual-net function - * add: RLMT networks - * add: extended PNMI features - * - * Kernel 2.4.x specific: - * Revision 1.xx 2000/09/12 13:31:56 cgoos - * Fixed missign "dev=NULL in skge_probe. - * Added counting for jumbo frames (corrects error statistic). - * Removed VLAN tag check (enables VLAN support). - * - * Kernel 2.2.x specific: - * Revision 1.29 2000/02/21 13:31:56 cgoos - * Fixed "unused" warning for UltraSPARC change. - * - * Partially kernel 2.2.x specific: - * Revision 1.28 2000/02/21 10:32:36 cgoos - * Added fixes for UltraSPARC. - * Now printing RlmtMode and PrefPort setting at startup. - * Changed XmitFrame return value. - * Fixed rx checksum calculation for BIG ENDIAN systems. - * Fixed rx jumbo frames counted as ierrors. - * - * - * Revision 1.27 1999/11/25 09:06:28 cgoos - * Changed base_addr to unsigned long. - * - * Revision 1.26 1999/11/22 13:29:16 cgoos - * Changed license header to GPL. - * Changes for inclusion in linux kernel (2.2.13). - * Removed 2.0.x defines. - * Changed SkGeProbe to skge_probe. - * Added checks in SkGeIoctl. - * - * Revision 1.25 1999/10/07 14:47:52 cgoos - * Changed 984x to 98xx. - * - * Revision 1.24 1999/09/30 07:21:01 cgoos - * Removed SK_RLMT_SLOW_LOOKAHEAD option. - * Giving spanning tree packets also to OS now. - * - * Revision 1.23 1999/09/29 07:36:50 cgoos - * Changed assignment for IsBc/IsMc. - * - * Revision 1.22 1999/09/28 12:57:09 cgoos - * Added CheckQueue also to Single-Port-ISR. - * - * Revision 1.21 1999/09/28 12:42:41 cgoos - * Changed parameter strings for RlmtMode. - * - * Revision 1.20 1999/09/28 12:37:57 cgoos - * Added CheckQueue for fast delivery of RLMT frames. - * - * Revision 1.19 1999/09/16 07:57:25 cgoos - * Copperfield changes. - * - * Revision 1.18 1999/09/03 13:06:30 cgoos - * Fixed RlmtMode=CheckSeg bug: wrong DEV_KFREE_SKB in RLMT_SEND caused - * double allocated skb's. - * FrameStat in ReceiveIrq was accessed via wrong Rxd. - * Queue size for async. standby Tx queue was zero. - * FillRxLimit of 0 could cause problems with ReQueue, changed to 1. - * Removed debug output of checksum statistic. - * - * Revision 1.17 1999/08/11 13:55:27 cgoos - * Transmit descriptor polling was not reenabled after SkGePortInit. - * - * Revision 1.16 1999/07/27 15:17:29 cgoos - * Added some "\n" in output strings (removed while debuging...). - * - * Revision 1.15 1999/07/23 12:09:30 cgoos - * Performance optimization, rx checksumming, large frame support. - * - * Revision 1.14 1999/07/14 11:26:27 cgoos - * Removed Link LED settings (now in RLMT). - * Added status output at NET UP. - * Fixed SMP problems with Tx and SWITCH running in parallel. - * Fixed return code problem at RLMT_SEND event. - * - * Revision 1.13 1999/04/07 10:11:42 cgoos - * Fixed Single Port problems. - * Fixed Multi-Adapter problems. - * Always display startup string. - * - * Revision 1.12 1999/03/29 12:26:37 cgoos - * Reversed locking to fine granularity. - * Fixed skb double alloc problem (caused by incorrect xmit return code). - * Enhanced function descriptions. - * - * Revision 1.11 1999/03/15 13:10:51 cgoos - * Changed device identifier in output string to ethX. - * - * Revision 1.10 1999/03/15 12:12:34 cgoos - * Changed copyright notice. - * - * Revision 1.9 1999/03/15 12:10:17 cgoos - * Changed locking to one driver lock. - * Added check of SK_AC-size (for consistency with library). - * - * Revision 1.8 1999/03/08 11:44:02 cgoos - * Fixed missing dev->tbusy in SkGeXmit. - * Changed large frame (jumbo) buffer number. - * Added copying of short frames. - * - * Revision 1.7 1999/03/04 13:26:57 cgoos - * Fixed spinlock calls for SMP. - * - * Revision 1.6 1999/03/02 09:53:51 cgoos - * Added descriptor revertion for big endian machines. - * - * Revision 1.5 1999/03/01 08:50:59 cgoos - * Fixed SkGeChangeMtu. - * Fixed pci config space accesses. - * - * Revision 1.4 1999/02/18 15:48:44 cgoos - * Corrected some printk's. - * - * Revision 1.3 1999/02/18 12:45:55 cgoos - * Changed SK_MAX_CARD_PARAM to default 16 - * - * Revision 1.2 1999/02/18 10:55:32 cgoos - * Removed SkGeDrvTimeStamp function. - * Printing "ethX:" before adapter type at adapter init. - * - * - * 10-Feb-1999 cg Created, based on Linux' acenic.c, 3c59x.c and - * SysKonnects GEnesis Solaris driver * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/skgehwt.c b/drivers/net/sk98lin/skgehwt.c --- a/drivers/net/sk98lin/skgehwt.c Wed Feb 4 16:51:37 2004 +++ b/drivers/net/sk98lin/skgehwt.c Wed Feb 4 16:51:37 2004 @@ -2,8 +2,6 @@ * * Name: skgehwt.c * Project: Gigabit Ethernet Adapters, Event Scheduler Module - * Version: $Revision: 1.15 $ - * Date: $Date: 2003/09/16 13:41:23 $ * Purpose: Hardware Timer * ******************************************************************************/ @@ -19,60 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skgehwt.c,v $ - * Revision 1.15 2003/09/16 13:41:23 rschmidt - * Added (C) Marvell to SysKonnectFileId - * Editorial changes - * - * Revision 1.14 2003/05/13 18:01:58 mkarl - * Editorial changes. - * - * Revision 1.13 1999/11/22 13:31:12 cgoos - * Changed license header to GPL. - * - * Revision 1.12 1998/10/15 15:11:34 gklug - * fix: ID_sccs to SysKonnectFileId - * - * Revision 1.11 1998/10/08 15:27:51 gklug - * chg: correction factor is host clock dependent - * - * Revision 1.10 1998/09/15 14:18:31 cgoos - * Changed more BOOLEANs to SK_xxx - * - * Revision 1.9 1998/09/15 14:16:06 cgoos - * Changed line 107: FALSE to SK_FALSE - * - * Revision 1.8 1998/08/24 13:04:44 gklug - * fix: typo - * - * Revision 1.7 1998/08/19 09:50:49 gklug - * fix: remove struct keyword from c-code (see CCC) add typedefs - * - * Revision 1.6 1998/08/17 09:59:02 gklug - * fix: typos - * - * Revision 1.5 1998/08/14 07:09:10 gklug - * fix: chg pAc -> pAC - * - * Revision 1.4 1998/08/10 14:14:52 gklug - * rmv: unneccessary SK_ADDR macro - * - * Revision 1.3 1998/08/07 12:53:44 gklug - * fix: first compiled version - * - * Revision 1.2 1998/08/07 09:19:29 gklug - * adapt functions to the C coding conventions - * rmv unneccessary functions. - * - * Revision 1.1 1998/08/05 11:28:36 gklug - * first version: adapted from SMT/FDDI * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/skgeinit.c b/drivers/net/sk98lin/skgeinit.c --- a/drivers/net/sk98lin/skgeinit.c Wed Feb 4 16:51:35 2004 +++ b/drivers/net/sk98lin/skgeinit.c Wed Feb 4 16:51:35 2004 @@ -2,8 +2,6 @@ * * Name: skgeinit.c * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.97 $ - * Date: $Date: 2003/10/02 16:45:31 $ * Purpose: Contains functions to initialize the adapter * ******************************************************************************/ @@ -22,446 +20,6 @@ * ******************************************************************************/ -/****************************************************************************** - * - * History: - * - * $Log: skgeinit.c,v $ - * Revision 1.97 2003/10/02 16:45:31 rschmidt - * Replaced default values of GMAC parameters with defines. - * Removed hard reset of MACs in SkGeDeInit(). - * Added define SK_PHY_LP_MODE around power saving mode in SkGeDeInit(). - * Added check for VAUX available before switch power to VAUX. - * - * Revision 1.96 2003/09/18 14:02:41 rroesler - * Add: Perform a hardreset of MACs in GeDeInit() - * - * Revision 1.95 2003/09/16 14:26:59 rschmidt - * Added switch power to VCC (WA for VAUX problem) in SkGeInit1(). - * Fixed setting PHY to coma mode and D3 power state in SkGeDeInit(). - * Editorial changes. - * - * Revision 1.94 2003/09/16 07:17:10 mschmid - * Added init for new members in port structure for MAC control - * - PMacColThres - * - PMacJamLen - * - PMacJamIpgVal - * - PMacJamIpgData - * - PMacIpgData - * - PMacLimit4 - * Added init for PHY power state in port structure - * - PPhyPowerState - * Added shutdown handling for Yukon Plus in SkGeDeInit() - * - * Revision 1.93 2003/05/28 15:44:43 rschmidt - * Added check for chip Id on WOL WA for chip Rev. A. - * Added setting of GILevel in SkGeDeInit(). - * Minor changes to avoid LINT warnings. - * Editorial changes. - * - * Revision 1.92 2003/05/13 17:42:26 mkarl - * Added SK_FAR for PXE. - * Separated code pathes not used for SLIM driver to reduce code size. - * Removed calls to I2C for SLIM driver. - * Removed currently unused function SkGeLoadLnkSyncCnt. - * Editorial changes. - * - * Revision 1.91 2003/05/06 12:21:48 rschmidt - * Added use of pAC->GIni.GIYukon for selection of YUKON branches. - * Added defines around GENESIS resp. YUKON branches to reduce - * code size for PXE. - * Editorial changes. - * - * Revision 1.90 2003/04/28 09:12:20 rschmidt - * Added init for GIValIrqMask (common IRQ mask). - * Disabled HW Error IRQ on Yukon if sensor IRQ is set in SkGeInit1() - * by changing the common mask stored in GIValIrqMask. - * Editorial changes. - * - * Revision 1.89 2003/04/10 14:33:10 rschmidt - * Fixed alignement error of patchable configuration parameter - * in struct OemConfig caused by length of recognition string. - * - * Revision 1.88 2003/04/09 12:59:45 rschmidt - * Added define around initialization of patchable OEM specific - * configuration parameter. - * - * Revision 1.87 2003/04/08 16:46:13 rschmidt - * Added configuration variable for OEMs and initialization for - * GILedBlinkCtrl (LED Blink Control). - * Improved detection for YUKON-Lite Rev. A1. - * Editorial changes. - * - * Revision 1.86 2003/03/31 06:53:13 mkarl - * Corrected Copyright. - * Editorial changes. - * - * Revision 1.85 2003/02/05 15:30:33 rschmidt - * Corrected setting of GIHstClkFact (Host Clock Factor) and - * GIPollTimerVal (Descr. Poll Timer Init Value) for YUKON. - * Editorial changes. - * - * Revision 1.84 2003/01/28 09:57:25 rschmidt - * Added detection of YUKON-Lite Rev. A0 (stored in GIYukonLite). - * Disabled Rx GMAC FIFO Flush for YUKON-Lite Rev. A0. - * Added support for CLK_RUN (YUKON-Lite). - * Added additional check of PME from D3cold for setting GIVauxAvail. - * Editorial changes. - * - * Revision 1.83 2002/12/17 16:15:41 rschmidt - * Added default setting of PhyType (Copper) for YUKON. - * Added define around check for HW self test results. - * Editorial changes. - * - * Revision 1.82 2002/12/05 13:40:21 rschmidt - * Added setting of Rx GMAC FIFO Flush Mask register. - * Corrected PhyType with new define SK_PHY_MARV_FIBER when - * YUKON Fiber board was found. - * Editorial changes. - * - * Revision 1.81 2002/11/15 12:48:35 rschmidt - * Replaced message SKERR_HWI_E018 with SKERR_HWI_E024 for Rx queue error - * in SkGeStopPort(). - * Added init for pAC->GIni.GIGenesis with SK_FALSE in YUKON-branch. - * Editorial changes. - * - * Revision 1.80 2002/11/12 17:28:30 rschmidt - * Initialized GIPciSlot64 and GIPciClock66 in SkGeInit1(). - * Reduced PCI FIFO watermarks for 32bit/33MHz bus in SkGeInitBmu(). - * Editorial changes. - * - * Revision 1.79 2002/10/21 09:31:02 mkarl - * Changed SkGeInitAssignRamToQueues(), removed call to - * SkGeInitAssignRamToQueues in SkGeInit1 and fixed compiler warning in - * SkGeInit1. - * - * Revision 1.78 2002/10/16 15:55:07 mkarl - * Fixed a bug in SkGeInitAssignRamToQueues. - * - * Revision 1.77 2002/10/14 15:07:22 rschmidt - * Corrected timeout handling for Rx queue in SkGeStopPort() (#10748) - * Editorial changes. - * - * Revision 1.76 2002/10/11 09:24:38 mkarl - * Added check for HW self test results. - * - * Revision 1.75 2002/10/09 16:56:44 mkarl - * Now call SkGeInitAssignRamToQueues() in Init Level 1 in order to assign - * the adapter memory to the queues. This default assignment is not suitable - * for dual net mode. - * - * Revision 1.74 2002/09/12 08:45:06 rwahl - * Set defaults for PMSCap, PLinkSpeed & PLinkSpeedCap dependent on PHY. - * - * Revision 1.73 2002/08/16 15:19:45 rschmidt - * Corrected check for Tx queues in SkGeCheckQSize(). - * Added init for new entry GIGenesis and GICopperType - * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis. - * Replaced wrong 1st para pAC with IoC in SK_IN/OUT macros. - * - * Revision 1.72 2002/08/12 13:38:55 rschmidt - * Added check if VAUX is available (stored in GIVauxAvail) - * Initialized PLinkSpeedCap in Port struct with SK_LSPEED_CAP_1000MBPS - * Editorial changes. - * - * Revision 1.71 2002/08/08 16:32:58 rschmidt - * Added check for Tx queues in SkGeCheckQSize(). - * Added start of Time Stamp Timer (YUKON) in SkGeInit2(). - * Editorial changes. - * - * Revision 1.70 2002/07/23 16:04:26 rschmidt - * Added init for GIWolOffs (HW-Bug in YUKON 1st rev.) - * Minor changes - * - * Revision 1.69 2002/07/17 17:07:08 rwahl - * - SkGeInit1(): fixed PHY type debug output; corrected init of GIFunc - * table & GIMacType. - * - Editorial changes. - * - * Revision 1.68 2002/07/15 18:38:31 rwahl - * Added initialization for MAC type dependent function table. - * - * Revision 1.67 2002/07/15 15:45:39 rschmidt - * Added Tx Store & Forward for YUKON (GMAC Tx FIFO is only 1 kB) - * Replaced SK_PHY_MARV by SK_PHY_MARV_COPPER - * Editorial changes - * - * Revision 1.66 2002/06/10 09:35:08 rschmidt - * Replaced C++ comments (//) - * Editorial changes - * - * Revision 1.65 2002/06/05 08:33:37 rschmidt - * Changed GIRamSize and Reset sequence for YUKON. - * SkMacInit() replaced by SkXmInitMac() resp. SkGmInitMac() - * - * Revision 1.64 2002/04/25 13:03:20 rschmidt - * Changes for handling YUKON. - * Removed reference to xmac_ii.h (not necessary). - * Moved all defines into header file. - * Replaced all SkXm...() functions with SkMac...() to handle also - * YUKON's GMAC. - * Added handling for GMAC FIFO in SkGeInitMacFifo(), SkGeStopPort(). - * Removed 'goto'-directive from SkGeCfgSync(), SkGeCheckQSize(). - * Replaced all XMAC-access macros by functions: SkMacRxTxDisable(), - * SkMacFlushTxFifo(). - * Optimized timeout handling in SkGeStopPort(). - * Initialized PLinkSpeed in Port struct with SK_LSPEED_AUTO. - * Release of GMAC Link Control reset in SkGeInit1(). - * Initialized GIChipId and GIChipRev in GE Init structure. - * Added GIRamSize and PhyType values for YUKON. - * Removed use of PRxCmd to setup XMAC. - * Moved setting of XM_RX_DIS_CEXT to SkXmInitMac(). - * Use of SkGeXmitLED() only for GENESIS. - * Changes for V-CPU support. - * Editorial changes. - * - * Revision 1.63 2001/04/05 11:02:09 rassmann - * Stop Port check of the STOP bit did not take 2/18 sec as wanted. - * - * Revision 1.62 2001/02/07 07:54:21 rassmann - * Corrected copyright. - * - * Revision 1.61 2001/01/31 15:31:40 gklug - * fix: problem with autosensing an SR8800 switch - * - * Revision 1.60 2000/10/18 12:22:21 cgoos - * Added workaround for half duplex hangup. - * - * Revision 1.59 2000/10/10 11:22:06 gklug - * add: in manual half duplex mode ignore carrier extension errors - * - * Revision 1.58 2000/10/02 14:10:27 rassmann - * Reading BCOM PHY after releasing reset until it returns a valid value. - * - * Revision 1.57 2000/08/03 14:55:28 rassmann - * Waiting for I2C to be ready before de-initializing adapter - * (prevents sensors from hanging up). - * - * Revision 1.56 2000/07/27 12:16:48 gklug - * fix: Stop Port check of the STOP bit does now take 2/18 sec as wanted - * - * Revision 1.55 1999/11/22 13:32:26 cgoos - * Changed license header to GPL. - * - * Revision 1.54 1999/10/26 07:32:54 malthoff - * Initialize PHWLinkUp with SK_FALSE. Required for Diagnostics. - * - * Revision 1.53 1999/08/12 19:13:50 malthoff - * Fix for 1000BT. Do not owerwrite XM_MMU_CMD when - * disabling receiver and transmitter. Other bits - * may be lost. - * - * Revision 1.52 1999/07/01 09:29:54 gklug - * fix: DoInitRamQueue needs pAC - * - * Revision 1.51 1999/07/01 08:42:21 gklug - * chg: use Store & forward for RAM buffer when Jumbos are used - * - * Revision 1.50 1999/05/27 13:19:38 cgoos - * Added Tx PCI watermark initialization. - * Removed Tx RAM queue Store & Forward setting. - * - * Revision 1.49 1999/05/20 14:32:45 malthoff - * SkGeLinkLED() is completly removed now. - * - * Revision 1.48 1999/05/19 07:28:24 cgoos - * SkGeLinkLED no more available for drivers. - * Changes for 1000Base-T. - * - * Revision 1.47 1999/04/08 13:57:45 gklug - * add: Init of new port struct fiels PLinkResCt - * chg: StopPort Timer check - * - * Revision 1.46 1999/03/25 07:42:15 malthoff - * SkGeStopPort(): Add workaround for cache incoherency. - * Create error log entry, disable port, and - * exit loop if it does not terminate. - * Add XM_RX_LENERR_OK to the default value for the - * XMAC receive command register. - * - * Revision 1.45 1999/03/12 16:24:47 malthoff - * Remove PPollRxD and PPollTxD. - * Add check for GIPollTimerVal. - * - * Revision 1.44 1999/03/12 13:40:23 malthoff - * Fix: SkGeXmitLED(), SK_LED_TST mode does not work. - * Add: Jumbo frame support. - * Chg: Resolution of parameter IntTime in SkGeCfgSync(). - * - * Revision 1.43 1999/02/09 10:29:46 malthoff - * Bugfix: The previous modification again also for the second location. - * - * Revision 1.42 1999/02/09 09:35:16 malthoff - * Bugfix: The bits '66 MHz Capable' and 'NEWCAP are reset while - * clearing the error bits in the PCI status register. - * - * Revision 1.41 1999/01/18 13:07:02 malthoff - * Bugfix: Do not use CFG cycles after during Init- or Runtime, because - * they may not be available after Boottime. - * - * Revision 1.40 1999/01/11 12:40:49 malthoff - * Bug fix: PCI_STATUS: clearing error bits sets the UDF bit. - * - * Revision 1.39 1998/12/11 15:17:33 gklug - * chg: Init LipaAutoNeg with Unknown - * - * Revision 1.38 1998/12/10 11:02:57 malthoff - * Disable Error Log Message when calling SkGeInit(level 2) - * more than once. - * - * Revision 1.37 1998/12/07 12:18:25 gklug - * add: refinement of autosense mode: take into account the autoneg cap of LiPa - * - * Revision 1.36 1998/12/07 07:10:39 gklug - * fix: init values of LinkBroken/ Capabilities for management - * - * Revision 1.35 1998/12/02 10:56:20 gklug - * fix: do NOT init LoinkSync Counter. - * - * Revision 1.34 1998/12/01 10:53:21 gklug - * add: init of additional Counters for workaround - * - * Revision 1.33 1998/12/01 10:00:49 gklug - * add: init PIsave var in Port struct - * - * Revision 1.32 1998/11/26 14:50:40 gklug - * chg: Default is autosensing with AUTOFULL mode - * - * Revision 1.31 1998/11/25 15:36:16 gklug - * fix: do NOT stop LED Timer when port should be stopped - * - * Revision 1.30 1998/11/24 13:15:28 gklug - * add: Init PCkeckPar struct member - * - * Revision 1.29 1998/11/18 13:19:27 malthoff - * Disable packet arbiter timeouts on receive side. - * Use maximum timeout value for packet arbiter - * transmit timeouts. - * Add TestStopBit() function to handle stop RX/TX - * problem with active descriptor poll timers. - * Bug Fix: Descriptor Poll Timer not started, because - * GIPollTimerVal was initialized with 0. - * - * Revision 1.28 1998/11/13 14:24:26 malthoff - * Bug Fix: SkGeStopPort() may hang if a Packet Arbiter Timout - * is pending or occurs while waiting for TX_STOP and RX_STOP. - * The PA timeout is cleared now while waiting for TX- or RX_STOP. - * - * Revision 1.27 1998/11/02 11:04:36 malthoff - * fix the last fix - * - * Revision 1.26 1998/11/02 10:37:03 malthoff - * Fix: SkGePollTxD() enables always the synchronounous poll timer. - * - * Revision 1.25 1998/10/28 07:12:43 cgoos - * Fixed "LED_STOP" in SkGeLnkSyncCnt, "== SK_INIT_IO" in SkGeInit. - * Removed: Reset of RAM Interface in SkGeStopPort. - * - * Revision 1.24 1998/10/27 08:13:12 malthoff - * Remove temporary code. - * - * Revision 1.23 1998/10/26 07:45:03 malthoff - * Add Address Calculation Workaround: If the EPROM byte - * Id is 3, the address offset is 512 kB. - * Initialize default values for PLinkMode and PFlowCtrlMode. - * - * Revision 1.22 1998/10/22 09:46:47 gklug - * fix SysKonnectFileId typo - * - * Revision 1.21 1998/10/20 12:11:56 malthoff - * Don't dendy the Queue config if the size of the unused - * Rx qeueu is zero. - * - * Revision 1.20 1998/10/19 07:27:58 malthoff - * SkGeInitRamIface() is public to be called by diagnostics. - * - * Revision 1.19 1998/10/16 13:33:45 malthoff - * Fix: enabling descriptor polling is not allowed until - * the descriptor addresses are set. Descriptor polling - * must be handled by the driver. - * - * Revision 1.18 1998/10/16 10:58:27 malthoff - * Remove temp. code for Diag prototype. - * Remove lint warning for dummy reads. - * Call SkGeLoadLnkSyncCnt() during SkGeInitPort(). - * - * Revision 1.17 1998/10/14 09:16:06 malthoff - * Change parameter LimCount and programming of - * the limit counter in SkGeCfgSync(). - * - * Revision 1.16 1998/10/13 09:21:16 malthoff - * Don't set XM_RX_SELF_RX in RxCmd Reg, because it's - * like a Loopback Mode in half duplex. - * - * Revision 1.15 1998/10/09 06:47:40 malthoff - * SkGeInitMacArb(): set recovery counters init value - * to zero although this counters are not uesd. - * Bug fix in Rx Upper/Lower Pause Threshold calculation. - * Add XM_RX_SELF_RX to RxCmd. - * - * Revision 1.14 1998/10/06 15:15:53 malthoff - * Make sure no pending IRQ is cleared in SkGeLoadLnkSyncCnt(). - * - * Revision 1.13 1998/10/06 14:09:36 malthoff - * Add SkGeLoadLnkSyncCnt(). Modify - * the 'port stopped' condition according - * to the current problem report. - * - * Revision 1.12 1998/10/05 08:17:21 malthoff - * Add functions: SkGePollRxD(), SkGePollTxD(), - * DoCalcAddr(), SkGeCheckQSize(), - * DoInitRamQueue(), and SkGeCfgSync(). - * Add coding for SkGeInitMacArb(), SkGeInitPktArb(), - * SkGeInitMacFifo(), SkGeInitRamBufs(), - * SkGeInitRamIface(), and SkGeInitBmu(). - * - * Revision 1.11 1998/09/29 08:26:29 malthoff - * bug fix: SkGeInit0() 'i' should be increment. - * - * Revision 1.10 1998/09/28 13:19:01 malthoff - * Coding time: Save the done work. - * Modify SkGeLinkLED(), add SkGeXmitLED(), - * define SkGeCheckQSize(), SkGeInitMacArb(), - * SkGeInitPktArb(), SkGeInitMacFifo(), - * SkGeInitRamBufs(), SkGeInitRamIface(), - * and SkGeInitBmu(). Do coding for SkGeStopPort(), - * SkGeInit1(), SkGeInit2(), and SkGeInit3(). - * Do coding for SkGeDinit() and SkGeInitPort(). - * - * Revision 1.9 1998/09/16 14:29:05 malthoff - * Some minor changes. - * - * Revision 1.8 1998/09/11 05:29:14 gklug - * add: init state of a port - * - * Revision 1.7 1998/09/04 09:26:25 malthoff - * Short temporary modification. - * - * Revision 1.6 1998/09/04 08:27:59 malthoff - * Remark the do-while in StopPort() because it never ends - * without a GE adapter. - * - * Revision 1.5 1998/09/03 14:05:45 malthoff - * Change comment for SkGeInitPort(). Do not - * repair the queue sizes if invalid. - * - * Revision 1.4 1998/09/03 10:03:19 malthoff - * Implement the new interface according to the - * reviewed interface specification. - * - * Revision 1.3 1998/08/19 09:11:25 gklug - * fix: struct are removed from c-source (see CCC) - * - * Revision 1.2 1998/07/28 12:33:58 malthoff - * Add 'IoC' parameter in function declaration and SK IO macros. - * - * Revision 1.1 1998/07/23 09:48:57 malthoff - * Creation. First dummy 'C' file. - * SkGeInit(Level 0) is card_start for GE. - * SkGeDeInit() is card_stop for GE. - * - * - ******************************************************************************/ #include "h/skdrv1st.h" #include "h/skdrv2nd.h" diff -Nru a/drivers/net/sk98lin/skgemib.c b/drivers/net/sk98lin/skgemib.c --- a/drivers/net/sk98lin/skgemib.c Wed Feb 4 16:51:33 2004 +++ b/drivers/net/sk98lin/skgemib.c Wed Feb 4 16:51:33 2004 @@ -2,8 +2,6 @@ * * Name: skgemib.c * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.11 $ - * Date: $Date: 2003/09/15 13:38:12 $ * Purpose: Private Network Management Interface Management Database * ****************************************************************************/ @@ -21,54 +19,6 @@ * The information in this file is provided "AS IS" without warranty. * ******************************************************************************/ - -/***************************************************************************** - * - * History: - * - * $Log: skgemib.c,v $ - * Revision 1.11 2003/09/15 13:38:12 tschilli - * OID_SKGE_PHY_LP_MODE included only after using #define SK_PHY_LP_MODE. - * - * Revision 1.10 2003/08/15 12:28:59 tschilli - * Added new OIDs: - * OID_SKGE_DRIVER_RELDATE - * OID_SKGE_DRIVER_FILENAME - * OID_SKGE_CHIPID - * OID_SKGE_RAMSIZE - * OID_SKGE_VAUXAVAIL - * OID_SKGE_PHY_TYPE - * OID_SKGE_PHY_LP_MODE - * - * Revision 1.9 2003/05/23 12:55:20 tschilli - * OID_SKGE_BOARDLEVEL added. - * - * Revision 1.8 2003/03/27 11:19:15 tschilli - * Copyright messages changed. - * - * Revision 1.7 2002/12/16 09:04:34 tschilli - * Code for VCT handling added. - * - * Revision 1.6 2002/08/09 15:40:21 rwahl - * Editorial change (renamed ConfSpeedCap). - * - * Revision 1.5 2002/08/09 11:05:34 rwahl - * Added oid handling for link speed cap. - * - * Revision 1.4 2002/08/09 09:40:27 rwahl - * Added support for NDIS OID_PNP_xxx. - * - * Revision 1.3 2002/07/17 19:39:54 rwahl - * Added handler for OID_SKGE_SPEED_MODE & OID_SKGE_SPEED_STATUS. - * - * Revision 1.2 2002/05/22 08:59:00 rwahl - * - static functions only for release build. - * - Source file must be included. - * - * Revision 1.1 2002/05/22 08:12:42 rwahl - * Initial version. - * - ****************************************************************************/ /* * PRIVATE OID handler function prototypes diff -Nru a/drivers/net/sk98lin/skgepnmi.c b/drivers/net/sk98lin/skgepnmi.c --- a/drivers/net/sk98lin/skgepnmi.c Wed Feb 4 16:51:36 2004 +++ b/drivers/net/sk98lin/skgepnmi.c Wed Feb 4 16:51:36 2004 @@ -2,8 +2,6 @@ * * Name: skgepnmi.c * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.111 $ - * Date: $Date: 2003/09/15 13:35:35 $ * Purpose: Private Network Management Interface * ****************************************************************************/ @@ -21,469 +19,6 @@ * The information in this file is provided "AS IS" without warranty. * ******************************************************************************/ - -/***************************************************************************** - * - * History: - * - * $Log: skgepnmi.c,v $ - * Revision 1.111 2003/09/15 13:35:35 tschilli - * Code for OID_SKGE_PHY_LP_MODE completed (using #define SK_PHY_LP_MODE). - * SK_DIAG_ATTACHED handling for OID_SKGE_DIAG_MODE in DiagActions() changed. - * - * Revision 1.110 2003/08/15 12:28:04 tschilli - * Added new OIDs: - * OID_SKGE_DRIVER_RELDATE - * OID_SKGE_DRIVER_FILENAME - * OID_SKGE_CHIPID - * OID_SKGE_RAMSIZE - * OID_SKGE_VAUXAVAIL - * OID_SKGE_PHY_TYPE - * OID_SKGE_PHY_LP_MODE - * - * Added SK_DIAG_ATTACHED handling for OID_SKGE_DIAG_MODE in DiagActions(). - * - * Revision 1.109 2003/07/17 14:15:24 tschilli - * Bug in SkPnmiGenIoctl() fixed. - * - * Revision 1.108 2003/05/27 07:10:11 tschilli - * Bug in SkPnmiGenIoctl() fixed. - * - * Revision 1.107 2003/05/23 13:01:10 tschilli - * Code for DIAG support added (#define SK_DIAG_SUPPORT). - * Code for generic PNMI IOCTL support added. The new function - * SkPnmiGenIoctl() is used for this purpose. - * Handling of OID_SKGE_BOARDLEVEL added. - * Incorrect buffer size handling of OID_SKGE_MTU during GET action fixed. - * Return code handling in PowerManagement() fixed. - * Editorial changes. - * - * Revision 1.106 2003/04/10 14:47:31 rschmidt - * Fixed handling for OID_GEN_RCV_OK and OID_GEN_XMIT_OK for YUKON's GMAC - * in GetPhysStatVal(). - * Replaced macro PHY_READ() with function call SkXmPhyRead(). - * Made optimisations for readability and code size. - * Editorial changes. - * - * Revision 1.105 2003/04/09 12:51:32 rschmidt - * Fixed XMAC only handling for some events in SkPnmiEvent(). - * Fixed return value for OID_GEN_RCV_OK (SK_PNMI_HRX) in GetPhysStatVal(). - * Editorial changes. - * - * Revision 1.104 2003/03/27 11:18:21 tschilli - * BRK statements from DEBUG code removed. - * OID_GEN_XMIT_OK and OID_GEN_RCV_OK work with Yukon now. - * Copyright messages changed. - * - * Revision 1.103 2002/12/20 09:57:13 tschilli - * SK_PNMI_EVT_VCT_RESET event code changed. - * Unused variable from Vct() removed. - * - * Revision 1.102 2002/12/16 14:03:24 tschilli - * VCT code in Vct() changed. - * - * Revision 1.101 2002/12/16 09:04:10 tschilli - * Code for VCT handling added. - * - * Revision 1.100 2002/09/26 14:28:13 tschilli - * For XMAC the values in the SK_PNMI_PORT Port struct are copied to - * the new SK_PNMI_PORT BufPort struct during a MacUpdate() call. - * These values are used when GetPhysStatVal() is called. With this - * mechanism you get the best results when software corrections for - * counters are needed. Example: RX_LONGFRAMES. - * - * Revision 1.99 2002/09/17 12:31:19 tschilli - * OID_SKGE_TX_HW_ERROR_CTS, OID_SKGE_OUT_ERROR_CTS, OID_GEN_XMIT_ERROR: - * Double count of SK_PNMI_HTX_EXCESS_COL in function General() removed. - * OID_PNP_CAPABILITIES: sizeof(SK_PM_WAKE_UP_CAPABILITIES) changed to - * sizeof(SK_PNP_CAPABILITIES) in function PowerManagement(). - * - * Revision 1.98 2002/09/10 09:00:03 rwahl - * Adapted boolean definitions according sktypes. - * - * Revision 1.97 2002/09/05 15:07:03 rwahl - * Editorial changes. - * - * Revision 1.96 2002/09/05 11:04:14 rwahl - * - Rx/Tx packets statistics of virtual port were zero on link down (#10750) - * - For GMAC the overflow IRQ for Rx longframe counter was not counted. - * - Incorrect calculation for oids OID_SKGE_RX_HW_ERROR_CTS, - * OID_SKGE_IN_ERRORS_CTS, OID_GEN_RCV_ERROR. - * - Moved correction for OID_SKGE_STAT_RX_TOO_LONG to GetPhysStatVal(). - * - Editorial changes. - * - * Revision 1.95 2002/09/04 08:53:37 rwahl - * - Incorrect statistics for Rx_too_long counter with jumbo frame (#10751) - * - StatRxFrameTooLong & StatRxPMaccErr counters were not reset. - * - Fixed compiler warning for debug msg arg types. - * - * Revision 1.94 2002/08/09 15:42:14 rwahl - * - Fixed StatAddr table for GMAC. - * - VirtualConf(): returned indeterminated status for speed oids if no - * active port. - * - * Revision 1.93 2002/08/09 11:04:59 rwahl - * Added handler for link speed caps. - * - * Revision 1.92 2002/08/09 09:43:03 rwahl - * - Added handler for NDIS OID_PNP_xxx ids. - * - * Revision 1.91 2002/07/17 19:53:03 rwahl - * - Added StatOvrflwBit table for XMAC & GMAC. - * - Extended StatAddr table for GMAC. Added check of number of counters - * in enumeration and size of StatAddr table on init level. - * - Added use of GIFunc table. - * - ChipSet is not static anymore, - * - Extended SIRQ event handler for both mac types. - * - Fixed rx short counter bug (#10620) - * - Added handler for oids SKGE_SPEED_MODE & SKGE_SPEED_STATUS. - * - Extended GetPhysStatVal() for GMAC. - * - Editorial changes. - * - * Revision 1.90 2002/05/22 08:56:25 rwahl - * - Moved OID table to separate source file. - * - Fix: TX_DEFFERAL counter incremented in full-duplex mode. - * - Use string definitions for error msgs. - * - * Revision 1.89 2001/09/18 10:01:30 mkunz - * some OID's fixed for dualnetmode - * - * Revision 1.88 2001/08/02 07:58:08 rwahl - * - Fixed NetIndex to csum module at ResetCounter(). - * - * Revision 1.87 2001/04/06 13:35:09 mkunz - * -Bugs fixed in handling of OID_SKGE_MTU and the VPD OID's - * - * Revision 1.86 2001/03/09 09:18:03 mkunz - * Changes in SK_DBG_MSG - * - * Revision 1.85 2001/03/08 09:37:31 mkunz - * Bugfix in ResetCounter for Pnmi.Port structure - * - * Revision 1.84 2001/03/06 09:04:55 mkunz - * Made some changes in instance calculation - * - * Revision 1.83 2001/02/15 09:15:32 mkunz - * Necessary changes for dual net mode added - * - * Revision 1.82 2001/02/07 08:24:19 mkunz - * -Made changes in handling of OID_SKGE_MTU - * - * Revision 1.81 2001/02/06 09:58:00 mkunz - * -Vpd bug fixed - * -OID_SKGE_MTU added - * -pnmi support for dual net mode. Interface function and macros extended - * - * Revision 1.80 2001/01/22 13:41:35 rassmann - * Supporting two nets on dual-port adapters. - * - * Revision 1.79 2000/12/05 14:57:40 cgoos - * SetStruct failed before first Link Up (link mode of virtual - * port "INDETERMINATED"). - * - * Revision 1.78 2000/09/12 10:44:58 cgoos - * Fixed SK_PNMI_STORE_U32 calls with typecasted argument. - * - * Revision 1.77 2000/09/07 08:10:19 rwahl - * - Modified algorithm for 64bit NDIS statistic counters; - * returns 64bit or 32bit value depending on passed buffer - * size. Indicate capability for 64bit NDIS counter, if passed - * buffer size is zero. OID_GEN_XMIT_ERROR, OID_GEN_RCV_ERROR, - * and OID_GEN_RCV_NO_BUFFER handled as 64bit counter, too. - * - corrected OID_SKGE_RLMT_PORT_PREFERRED. - * - * Revision 1.76 2000/08/03 15:23:39 rwahl - * - Correction for FrameTooLong counter has to be moved to OID handling - * routines (instead of statistic counter routine). - * - Fix in XMAC Reset Event handling: Only offset counter for hardware - * statistic registers are updated. - * - * Revision 1.75 2000/08/01 16:46:05 rwahl - * - Added StatRxLongFrames counter and correction of FrameTooLong counter. - * - Added directive to control width (default = 32bit) of NDIS statistic - * counters (SK_NDIS_64BIT_CTR). - * - * Revision 1.74 2000/07/04 11:41:53 rwahl - * - Added volition connector type. - * - * Revision 1.73 2000/03/15 16:33:10 rwahl - * Fixed bug 10510; wrong reset of virtual port statistic counters. - * - * Revision 1.72 1999/12/06 16:15:53 rwahl - * Fixed problem of instance range for current and factory MAC address. - * - * Revision 1.71 1999/12/06 10:14:20 rwahl - * Fixed bug 10476; set operation for PHY_OPERATION_MODE. - * - * Revision 1.70 1999/11/22 13:33:34 cgoos - * Changed license header to GPL. - * - * Revision 1.69 1999/10/18 11:42:15 rwahl - * Added typecasts for checking event dependent param (debug only). - * - * Revision 1.68 1999/10/06 09:35:59 cgoos - * Added state check to PHY_READ call (hanged if called during startup). - * - * Revision 1.67 1999/09/22 09:53:20 rwahl - * - Read Broadcom register for updating FCS error counter (1000Base-T). - * - * Revision 1.66 1999/08/26 13:47:56 rwahl - * Added SK_DRIVER_SENDEVENT when queueing RLMT_CHANGE_THRES trap. - * - * Revision 1.65 1999/07/26 07:49:35 cgoos - * Added two typecasts to avoid compiler warnings. - * - * Revision 1.64 1999/05/20 09:24:12 cgoos - * Changes for 1000Base-T (sensors, Master/Slave). - * - * Revision 1.63 1999/04/13 15:11:58 mhaveman - * Moved include of rlmt.h to header skgepnmi.h because some macros - * are needed there. - * - * Revision 1.62 1999/04/13 15:08:07 mhaveman - * Replaced again SK_RLMT_CHECK_LINK with SK_PNMI_RLMT_MODE_CHK_LINK - * to grant unified interface by only using the PNMI header file. - * SK_PNMI_RLMT_MODE_CHK_LINK is defined the same as SK_RLMT_CHECK_LINK. - * - * Revision 1.61 1999/04/13 15:02:48 mhaveman - * Changes caused by review: - * -Changed some comments - * -Removed redundant check for OID_SKGE_PHYS_FAC_ADDR - * -Optimized PRESET check. - * -Meaning of error SK_ADDR_DUPLICATE_ADDRESS changed. Set of same - * address will now not cause this error. Removed corresponding check. - * - * Revision 1.60 1999/03/23 10:41:23 mhaveman - * Added comments. - * - * Revision 1.59 1999/02/19 08:01:28 mhaveman - * Fixed bug 10372 that after counter reset all ports were displayed - * as inactive. - * - * Revision 1.58 1999/02/16 18:04:47 mhaveman - * Fixed problem of twisted OIDs SENSOR_WAR_TIME and SENSOR_ERR_TIME. - * - * Revision 1.56 1999/01/27 12:29:11 mhaveman - * SkTimerStart was called with time value in milli seconds but needs - * micro seconds. - * - * Revision 1.55 1999/01/25 15:00:38 mhaveman - * Added support to allow multiple ports to be active. If this feature in - * future will be used, the Management Data Base variables PORT_ACTIVE - * and PORT_PREFERED should be moved to the port specific part of RLMT. - * Currently they return the values of the first active physical port - * found. A set to the virtual port will actually change all active - * physical ports. A get returns the melted values of all active physical - * ports. If the port values differ a return value INDETERMINATED will - * be returned. This effects especially the CONF group. - * - * Revision 1.54 1999/01/19 10:10:22 mhaveman - * -Fixed bug 10354: Counter values of virtual port were wrong after port - * switches - * -Added check if a switch to the same port is notified. - * - * Revision 1.53 1999/01/07 09:25:21 mhaveman - * Forgot to initialize a variable. - * - * Revision 1.52 1999/01/05 10:34:33 mhaveman - * Fixed little error in RlmtChangeEstimate calculation. - * - * Revision 1.51 1999/01/05 09:59:07 mhaveman - * -Moved timer start to init level 2 - * -Redesigned port switch average calculation to avoid 64bit - * arithmetic. - * - * Revision 1.50 1998/12/10 15:13:59 mhaveman - * -Fixed: PHYS_CUR_ADDR returned wrong addresses - * -Fixed: RLMT_PORT_PREFERED and RLMT_CHANGE_THRES preset returned - * always BAD_VALUE. - * -Fixed: TRAP buffer seemed to sometimes suddenly empty - * - * Revision 1.49 1998/12/09 16:17:07 mhaveman - * Fixed: Couldnot delete VPD keys on UNIX. - * - * Revision 1.48 1998/12/09 14:11:10 mhaveman - * -Add: Debugmessage for XMAC_RESET supressed to minimize output. - * -Fixed: RlmtChangeThreshold will now be initialized. - * -Fixed: VPD_ENTRIES_LIST extended value with unnecessary space char. - * -Fixed: On VPD key creation an invalid key name could be created - * (e.g. A5) - * -Some minor changes in comments and code. - * - * Revision 1.47 1998/12/08 16:00:31 mhaveman - * -Fixed: For RLMT_PORT_ACTIVE will now be returned a 0 if no port - * is active. - * -Fixed: For the RLMT statistics group only the last value was - * returned and the rest of the buffer was filled with 0xff - * -Fixed: Mysteriously the preset on RLMT_MODE still returned - * BAD_VALUE. - * Revision 1.46 1998/12/08 10:04:56 mhaveman - * -Fixed: Preset on RLMT_MODE returned always BAD_VALUE error. - * -Fixed: Alignment error in GetStruct - * -Fixed: If for Get/Preset/SetStruct the buffer size is equal or - * larger than SK_PNMI_MIN_STRUCT_SIZE the return value is stored - * to the buffer. In this case the caller should always return - * ok to its upper routines. Only if the buffer size is less - * than SK_PNMI_MIN_STRUCT_SIZE and the return value is unequal - * to 0, an error should be returned by the caller. - * -Fixed: Wrong number of instances with RLMT statistic. - * -Fixed: Return now SK_LMODE_STAT_UNKNOWN if the LinkModeStatus is 0. - * - * Revision 1.45 1998/12/03 17:17:24 mhaveman - * -Removed for VPD create action the buffer size limitation to 4 bytes. - * -Pass now physical/active physical port to ADDR for CUR_ADDR set - * - * Revision 1.44 1998/12/03 15:14:35 mhaveman - * Another change to Vpd instance evaluation. - * - * Revision 1.43 1998/12/03 14:18:10 mhaveman - * -Fixed problem in PnmiSetStruct. It was impossible to set any value. - * -Removed VPD key evaluation for VPD_FREE_BYTES and VPD_ACTION. - * - * Revision 1.42 1998/12/03 11:31:47 mhaveman - * Inserted cast to satisfy lint. - * - * Revision 1.41 1998/12/03 11:28:16 mhaveman - * Removed SK_PNMI_CHECKPTR - * - * Revision 1.40 1998/12/03 11:19:07 mhaveman - * Fixed problems - * -A set to virtual port will now be ignored. A set with broadcast - * address to any port will be ignored. - * -GetStruct function made VPD instance calculation wrong. - * -Prefered port returned -1 instead of 0. - * - * Revision 1.39 1998/11/26 15:30:29 mhaveman - * Added sense mode to link mode. - * - * Revision 1.38 1998/11/23 15:34:00 mhaveman - * -Fixed bug for RX counters. On an RX overflow interrupt the high - * words of all RX counters were incremented. - * -SET operations on FLOWCTRL_MODE and LINK_MODE accept now the - * value 0, which has no effect. It is usefull for multiple instance - * SETs. - * - * Revision 1.37 1998/11/20 08:02:04 mhaveman - * -Fixed: Ports were compared with MAX_SENSORS - * -Fixed: Crash in GetTrapEntry with MEMSET macro - * -Fixed: Conversions between physical, logical port index and instance - * - * Revision 1.36 1998/11/16 07:48:53 mhaveman - * Casted SK_DRIVER_SENDEVENT with (void) to eleminate compiler warnings - * on Solaris. - * - * Revision 1.35 1998/11/16 07:45:34 mhaveman - * SkAddrOverride now returns value and will be checked. - * - * Revision 1.34 1998/11/10 13:40:37 mhaveman - * Needed to change interface, because NT driver needs a return value - * of needed buffer space on TOO_SHORT errors. Therefore all - * SkPnmiGet/Preset/Set functions now have a pointer to the length - * parameter, where the needed space on error is returned. - * - * Revision 1.33 1998/11/03 13:52:46 mhaveman - * Made file lint conform. - * - * Revision 1.32 1998/11/03 13:19:07 mhaveman - * The events SK_HWEV_SET_LMODE and SK_HWEV_SET_FLOWMODE pass now in - * Para32[0] the physical MAC index and in Para32[1] the new mode. - * - * Revision 1.31 1998/11/03 12:30:40 gklug - * fix: compiler warning memset - * - * Revision 1.30 1998/11/03 12:04:46 mhaveman - * Fixed problem in SENSOR_VALUE, which wrote beyond the buffer end - * Fixed alignment problem with CHIPSET. - * - * Revision 1.29 1998/11/02 11:23:54 mhaveman - * Corrected SK_ERROR_LOG to SK_ERR_LOG. Sorry. - * - * Revision 1.28 1998/11/02 10:47:16 mhaveman - * Added syslog messages for internal errors. - * - * Revision 1.27 1998/10/30 15:48:06 mhaveman - * Fixed problems after simulation of SK_PNMI_EVT_CHG_EST_TIMER and - * RlmtChangeThreshold calculation. - * - * Revision 1.26 1998/10/29 15:36:55 mhaveman - * -Fixed bug in trap buffer handling. - * -OID_SKGE_DRIVER_DESCR, OID_SKGE_DRIVER_VERSION, OID_SKGE_HW_DESCR, - * OID_SKGE_HW_VERSION, OID_SKGE_VPD_ENTRIES_LIST, OID_SKGE_VPD_KEY, - * OID_SKGE_VPD_VALUE, and OID_SKGE_SENSOR_DESCR return values with - * a leading octet before each string storing the string length. - * -Perform a RlmtUpdate during SK_PNMI_EVT_XMAC_RESET to minimize - * RlmtUpdate calls in GetStatVal. - * -Inserted SK_PNMI_CHECKFLAGS macro increase readability. - * - * Revision 1.25 1998/10/29 08:50:36 mhaveman - * Fixed problems after second event simulation. - * - * Revision 1.24 1998/10/28 08:44:37 mhaveman - * -Fixed alignment problem - * -Fixed problems during event simulation - * -Fixed sequence of error return code (INSTANCE -> ACCESS -> SHORT) - * -Changed type of parameter Instance back to SK_U32 because of VPD - * -Updated new VPD function calls - * - * Revision 1.23 1998/10/23 10:16:37 mhaveman - * Fixed bugs after buffer test simulation. - * - * Revision 1.22 1998/10/21 13:23:52 mhaveman - * -Call syntax of SkOsGetTime() changed to SkOsGetTime(pAc). - * -Changed calculation of hundrets of seconds. - * - * Revision 1.20 1998/10/20 07:30:45 mhaveman - * Made type changes to unsigned integer where possible. - * - * Revision 1.19 1998/10/19 10:51:30 mhaveman - * -Made Bug fixes after simulation run - * -Renamed RlmtMAC... to RlmtPort... - * -Marked workarounds with Errata comments - * - * Revision 1.18 1998/10/14 07:50:08 mhaveman - * -For OID_SKGE_LINK_STATUS the link down detection has moved from RLMT - * to HWACCESS. - * -Provided all MEMCPY/MEMSET macros with (char *) pointers, because - * Solaris throwed warnings when mapping to bcopy/bset. - * - * Revision 1.17 1998/10/13 07:42:01 mhaveman - * -Added OIDs OID_SKGE_TRAP_NUMBER and OID_SKGE_ALL_DATA - * -Removed old cvs history entries - * -Renamed MacNumber to PortNumber - * - * Revision 1.16 1998/10/07 10:52:49 mhaveman - * -Inserted handling of some OID_GEN_ Ids for windows - * -Fixed problem with 803.2 statistic. - * - * Revision 1.15 1998/10/01 09:16:29 mhaveman - * Added Debug messages for function call and UpdateFlag tracing. - * - * Revision 1.14 1998/09/30 13:39:09 mhaveman - * -Reduced namings of 'MAC' by replacing them with 'PORT'. - * -Completed counting of OID_SKGE_RX_HW_ERROR_CTS, - * OID_SKGE_TX_HW_ERROR_CTS, - * OID_SKGE_IN_ERRORS_CTS, and OID_SKGE_OUT_ERROR_CTS. - * -SET check for RlmtMode - * - * Revision 1.13 1998/09/28 13:13:08 mhaveman - * Hide strcmp, strlen, and strncpy behind macros SK_STRCMP, SK_STRLEN, - * and SK_STRNCPY. (Same reasons as for mem.. and MEM..) - * - * Revision 1.12 1998/09/16 08:18:36 cgoos - * Fix: XM_INxx and XM_OUTxx called with different parameter order: - * sometimes IoC,Mac,... sometimes Mac,IoC,... Now always first variant. - * Fix: inserted "Pnmi." into some pAC->pDriverDescription / Version. - * Change: memset, memcpy to makros SK_MEMSET, SK_MEMCPY - * - * Revision 1.11 1998/09/04 17:01:45 mhaveman - * Added SyncCounter as macro and OID_SKGE_.._NO_DESCR_CTS to - * OID_SKGE_RX_NO_BUF_CTS. - * - * Revision 1.10 1998/09/04 14:35:35 mhaveman - * Added macro counters, that are counted by driver. - * - ****************************************************************************/ - #ifndef _lint static const char SysKonnectFileId[] = diff -Nru a/drivers/net/sk98lin/skgesirq.c b/drivers/net/sk98lin/skgesirq.c --- a/drivers/net/sk98lin/skgesirq.c Wed Feb 4 16:51:33 2004 +++ b/drivers/net/sk98lin/skgesirq.c Wed Feb 4 16:51:33 2004 @@ -2,8 +2,6 @@ * * Name: skgesirq.c * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.92 $ - * Date: $Date: 2003/09/16 14:37:07 $ * Purpose: Special IRQ module * ******************************************************************************/ @@ -19,374 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skgesirq.c,v $ - * Revision 1.92 2003/09/16 14:37:07 rschmidt - * Added debug messages in some SkGePortCheckUp...() routines. - * Fixed compiler warnings for different types. - * Avoided port check up in reset state (eg. coma mode). - * Editorial changes. - * - * Revision 1.91 2003/07/04 12:46:22 rschmidt - * Added debug messages in SkGePortCheckUpGmac(). - * Added error log message and new driver event SK_DRV_DOWNSHIFT_DET - * for Downshift detection (Yukon-Copper). - * Editorial changes. - * - * Revision 1.90 2003/05/28 15:35:45 rschmidt - * Added parameter AutoNeg in all SkGePortCheckUp...() to save code. - * Added setting for AutoNeg only once in SkGePortCheckUp(). - * Moved defines for return codes of SkGePortCheckUp() to header file. - * Editorial changes. - * - * Revision 1.89 2003/05/13 17:32:20 mkarl - * Removed links to RLMT and PNMI for SLIM driver (SK_SLIM). - * Separated GENESIS and YUKON only code to reduce code size. - * - * Revision 1.88 2003/05/06 13:20:34 rschmidt - * Changed workaround for Tx hang in half duplex only for Genesis. - * Replaced SkPnmiGetVar() calls for Tx Octets Counter - * with SkXmMacStatistic() in SkGeSirqIsr(). - * Added defines around GENESIS resp. YUKON branches to reduce - * code size for PXE. - * Editorial changes. - * - * Revision 1.87 2003/04/28 09:18:31 rschmidt - * Added increment for GITimeStampCnt (high dword for - * Time Stamp Timer counter), when overflow IRQ occurs. - * Disabled HW Error IRQ on 32-bit Yukon if sensor IRQ occurs - * by changing the common mask stored in GIValIrqMask. - * Changed handling for HW Error IRQ in SkGeSirqIsr(). - * Added clearing of the software forced IRQ in SkGeSirqIsr(). - * Editorial changes. - * - * Revision 1.86 2003/04/09 13:03:24 rschmidt - * Added workaround for configuration of GPHY's Auto-negotiation - * advertisement register after link down event in SkPhyIsrGmac(). - * - * Revision 1.85 2003/04/08 16:39:02 rschmidt - * Changed handling for different PhyTypes for source code - * portability to PXE, UNDI. - * Editorial changes. - * - * Revision 1.84 2003/03/31 07:01:43 mkarl - * Corrected Copyright. - * Editorial changes. - * - * Revision 1.83 2003/02/05 15:10:59 rschmidt - * Fixed setting of PLinkSpeedUsed in SkHWLinkUp() when - * auto-negotiation is disabled. - * Editorial changes. - * - * Revision 1.82 2003/01/29 13:34:33 rschmidt - * Added some typecasts to avoid compiler warnings. - * - * Revision 1.81 2002/12/05 10:49:51 rschmidt - * Fixed missing Link Down Event for fiber (Bug Id #10768) - * Added reading of cable length when link is up - * Removed testing of unused error bits in PHY ISR - * Editorial changes. - * - * Revision 1.80 2002/11/12 17:15:21 rschmidt - * Replaced SkPnmiGetVar() by ...MacStatistic() in SkMacParity(). - * Editorial changes. - * - * Revision 1.79 2002/10/14 15:14:51 rschmidt - * Changed clearing of IS_M1_PAR_ERR (MAC 1 Parity Error) in - * SkMacParity() depending on GIChipRev (HW-Bug #8). - * Added error messages for GPHY Auto-Negotiation Error and - * FIFO Overflow/Underrun in SkPhyIsrGmac(). - * Editorial changes. - * - * Revision 1.78 2002/10/10 15:54:29 mkarl - * changes for PLinkSpeedUsed - * - * Revision 1.77 2002/09/12 08:58:51 rwahl - * Retrieve counters needed for XMAC errata workarounds directly because - * PNMI returns corrected counter values (e.g. #10620). - * - * Revision 1.76 2002/08/16 15:21:54 rschmidt - * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis. - * Replaced wrong 1st para pAC with IoC in SK_IN/OUT macros. - * Editorial changes. - * - * Revision 1.75 2002/08/12 13:50:47 rschmidt - * Changed clearing of IS_M1_PAR_ERR (MAC 1 Parity Error) in - * SkMacParity() by GMF_CLI_TX_FC instead of GMF_CLI_TX_PE (HW-Bug #8). - * Added clearing of IS_IRQ_TIST_OV and IS_IRQ_SENSOR in SkGeHwErr(). - * Corrected handling of Link Up and Auto-Negotiation Over for GPHY. - * in SkGePortCheckUpGmac(). - * Editorial changes. - * - * Revision 1.74 2002/08/08 16:17:04 rschmidt - * Added PhyType check for SK_HWEV_SET_ROLE event (copper only) - * Changed Link Up check reading PHY Specific Status (YUKON) - * Editorial changes - * - * Revision 1.73 2002/07/15 18:36:53 rwahl - * Editorial changes. - * - * Revision 1.72 2002/07/15 15:46:26 rschmidt - * Added new event: SK_HWEV_SET_SPEED - * Editorial changes - * - * Revision 1.71 2002/06/10 09:34:19 rschmidt - * Editorial changes - * - * Revision 1.70 2002/06/05 08:29:18 rschmidt - * SkXmRxTxEnable() replaced by SkMacRxTxEnable(). - * Editorial changes. - * - * Revision 1.69 2002/04/25 13:03:49 rschmidt - * Changes for handling YUKON. - * Use of #ifdef OTHER_PHY to eliminate code for unused Phy types. - * Replaced all XMAC-access macros by functions: SkMacRxTxDisable(), - * SkMacIrqDisable(). - * Added handling for GMAC FIFO in SkMacParity(). - * Replaced all SkXm...() functions with SkMac...() to handle also - * YUKON's GMAC. - * Macros for XMAC PHY access PHY_READ(), PHY_WRITE() replaced - * by functions SkXmPhyRead(), SkXmPhyWrite(). - * Disabling all PHY interrupts moved to SkMacIrqDisable(). - * Added handling for GPHY IRQ in SkGeSirqIsr(). - * Removed status parameter from MAC IRQ handler SkMacIrq(). - * Added SkGePortCheckUpGmac(), SkPhyIsrGmac() for GMAC. - * Editorial changes - * - * Revision 1.68 2002/02/26 15:24:53 rwahl - * Fix: no link with manual configuration (#10673). The previous fix for - * #10639 was removed. So for RLMT mode = CLS the RLMT may switch to - * misconfigured port. It should not occur for the other RLMT modes. - * - * Revision 1.67 2001/11/20 09:19:58 rwahl - * Reworked bugfix #10639 (no dependency to RLMT mode). - * - * Revision 1.66 2001/10/26 07:52:53 afischer - * Port switching bug in `check local link` mode - * - * Revision 1.65 2001/02/23 13:41:51 gklug - * fix: PHYS2INST should be used correctly for Dual Net operation - * chg: do no longer work with older PNMI - * - * Revision 1.64 2001/02/15 11:27:04 rassmann - * Working with RLMT v1 if SK_MAX_NETS undefined. - * - * Revision 1.63 2001/02/06 10:44:23 mkunz - * - NetIndex added to interface functions of pnmi V4 with dual net support - * - * Revision 1.62 2001/01/31 15:31:41 gklug - * fix: problem with autosensing an SR8800 switch - * - * Revision 1.61 2000/11/09 11:30:09 rassmann - * WA: Waiting after releasing reset until BCom chip is accessible. - * - * Revision 1.60 2000/10/18 12:37:48 cgoos - * Reinserted the comment for version 1.56. - * - * Revision 1.59 2000/10/18 12:22:20 cgoos - * Added workaround for half duplex hangup. - * - * Revision 1.58 2000/09/28 13:06:04 gklug - * fix: BCom may NOT be touched if XMAC is in RESET state - * - * Revision 1.57 2000/09/08 12:38:39 cgoos - * Added forgotten variable declaration. - * - * Revision 1.56 2000/09/08 08:12:13 cgoos - * Changed handling of parity errors in SkGeHwErr (correct reset of error). - * - * Revision 1.55 2000/06/19 08:36:25 cgoos - * Changed comment. - * - * Revision 1.54 2000/05/22 08:45:57 malthoff - * Fix: #10523 is valid for all BCom PHYs. - * - * Revision 1.53 2000/05/19 10:20:30 cgoos - * Removed Solaris debug output code. - * - * Revision 1.52 2000/05/19 10:19:37 cgoos - * Added PHY state check in HWLinkDown. - * Move PHY interrupt code to IS_EXT_REG case in SkGeSirqIsr. - * - * Revision 1.51 2000/05/18 05:56:20 cgoos - * Fixed typo. - * - * Revision 1.50 2000/05/17 12:49:49 malthoff - * Fixes BCom link bugs (#10523). - * - * Revision 1.49 1999/12/17 11:02:50 gklug - * fix: read PHY_STAT of Broadcom chip more often to assure good status - * - * Revision 1.48 1999/12/06 10:01:17 cgoos - * Added SET function for Role. - * - * Revision 1.47 1999/11/22 13:34:24 cgoos - * Changed license header to GPL. - * - * Revision 1.46 1999/09/16 10:30:07 cgoos - * Removed debugging output statement from Linux. - * - * Revision 1.45 1999/09/16 07:32:55 cgoos - * Fixed dual-port copperfield bug (PHY_READ from resetted port). - * Removed some unused variables. - * - * Revision 1.44 1999/08/03 15:25:04 cgoos - * Removed workaround for disabled interrupts in half duplex mode. - * - * Revision 1.43 1999/08/03 14:27:58 cgoos - * Removed SENSE mode code from SkGePortCheckUpBcom. - * - * Revision 1.42 1999/07/26 09:16:54 cgoos - * Added some typecasts to avoid compiler warnings. - * - * Revision 1.41 1999/05/19 07:28:59 cgoos - * Changes for 1000Base-T. - * - * Revision 1.40 1999/04/08 13:59:39 gklug - * fix: problem with 3Com switches endless RESTARTs - * - * Revision 1.39 1999/03/08 10:10:52 gklug - * fix: AutoSensing did switch to next mode even if LiPa indicated offline - * - * Revision 1.38 1999/03/08 09:49:03 gklug - * fix: Bug using pAC instead of IoC, causing AIX problems - * fix: change compare for Linux compiler bug workaround - * - * Revision 1.37 1999/01/28 14:51:33 gklug - * fix: monitor for autosensing and extra RESETS the RX on wire counters - * - * Revision 1.36 1999/01/22 09:19:55 gklug - * fix: Init DupMode and InitPauseMd are now called in RxTxEnable - * - * Revision 1.35 1998/12/11 15:22:59 gklug - * chg: autosensing: check for receive if manual mode was guessed - * chg: simplified workaround for XMAC errata - * chg: wait additional 100 ms before link goes up. - * chg: autoneg timeout to 600 ms - * chg: restart autoneg even if configured to autonegotiation - * - * Revision 1.34 1998/12/10 10:33:14 gklug - * add: more debug messages - * fix: do a new InitPhy if link went down (AutoSensing problem) - * chg: Check for zero shorts if link is NOT up - * chg: reset Port if link goes down - * chg: wait additional 100 ms when link comes up to check shorts - * fix: dummy read extended autoneg status to prevent link going down immediately - * - * Revision 1.33 1998/12/07 12:18:29 gklug - * add: refinement of autosense mode: take into account the autoneg cap of LiPa - * - * Revision 1.32 1998/12/07 07:11:21 gklug - * fix: compiler warning - * - * Revision 1.31 1998/12/02 09:29:05 gklug - * fix: WA XMAC Errata: FCSCt check was not correct. - * fix: WA XMAC Errata: Prec Counter were NOT updated in case of short checks. - * fix: Clear Stat : now clears the Prev counters of all known Ports - * - * Revision 1.30 1998/12/01 10:54:15 gklug - * dd: workaround for XMAC errata changed. Check RX count and CRC err Count, too. - * - * Revision 1.29 1998/12/01 10:01:53 gklug - * fix: if MAC IRQ occurs during port down, this will be handled correctly - * - * Revision 1.28 1998/11/26 16:22:11 gklug - * fix: bug in autosense if manual modes are used - * - * Revision 1.27 1998/11/26 15:50:06 gklug - * fix: PNMI needs to set PLinkModeConf - * - * Revision 1.26 1998/11/26 14:51:58 gklug - * add: AutoSensing functionalty - * - * Revision 1.25 1998/11/26 07:34:37 gklug - * fix: Init PrevShorts when restarting port due to Link connection - * - * Revision 1.24 1998/11/25 10:57:32 gklug - * fix: remove unreferenced local vars - * - * Revision 1.23 1998/11/25 08:26:40 gklug - * fix: don't do a RESET on a starting or stopping port - * - * Revision 1.22 1998/11/24 13:29:44 gklug - * add: Workaround for MAC parity errata - * - * Revision 1.21 1998/11/18 15:31:06 gklug - * fix: lint bugs - * - * Revision 1.20 1998/11/18 12:58:54 gklug - * fix: use PNMI query instead of hardware access - * - * Revision 1.19 1998/11/18 12:54:55 gklug - * chg: add new workaround for XMAC Errata - * add: short event counter monitoring on active link too - * - * Revision 1.18 1998/11/13 14:27:41 malthoff - * Bug Fix: Packet Arbiter Timeout was not cleared correctly - * for timeout on TX1 and TX2. - * - * Revision 1.17 1998/11/04 07:01:59 cgoos - * Moved HW link poll sequence. - * Added call to SkXmRxTxEnable. - * - * Revision 1.16 1998/11/03 13:46:03 gklug - * add: functionality of SET_LMODE and SET_FLOW_MODE - * fix: send RLMT LinkDown event when Port stop is given with LinkUp - * - * Revision 1.15 1998/11/03 12:56:47 gklug - * fix: Needs more events - * - * Revision 1.14 1998/10/30 07:36:35 gklug - * rmv: unnecessary code - * - * Revision 1.13 1998/10/29 15:21:57 gklug - * add: Poll link feature for activating HW link - * fix: Deactivate HWLink when Port STOP is given - * - * Revision 1.12 1998/10/28 07:38:57 cgoos - * Checking link status at begin of SkHWLinkUp. - * - * Revision 1.11 1998/10/22 09:46:50 gklug - * fix SysKonnectFileId typo - * - * Revision 1.10 1998/10/14 13:57:47 gklug - * add: Port start/stop event - * - * Revision 1.9 1998/10/14 05:48:29 cgoos - * Added definition for Para. - * - * Revision 1.8 1998/10/14 05:40:09 gklug - * add: Hardware Linkup signal used - * - * Revision 1.7 1998/10/09 06:50:20 malthoff - * Remove ID_sccs by SysKonnectFileId. - * - * Revision 1.6 1998/10/08 09:11:49 gklug - * add: clear IRQ commands - * - * Revision 1.5 1998/10/02 14:27:35 cgoos - * Fixed some typos and wrong event names. - * - * Revision 1.4 1998/10/02 06:24:17 gklug - * add: HW error function - * fix: OUT macros - * - * Revision 1.3 1998/10/01 07:03:00 gklug - * add: ISR for the usual interrupt source register - * - * Revision 1.2 1998/09/03 13:50:33 gklug - * add: function prototypes - * - * Revision 1.1 1998/08/27 11:50:21 gklug - * initial revision - * - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/ski2c.c b/drivers/net/sk98lin/ski2c.c --- a/drivers/net/sk98lin/ski2c.c Wed Feb 4 16:51:33 2004 +++ b/drivers/net/sk98lin/ski2c.c Wed Feb 4 16:51:33 2004 @@ -2,8 +2,6 @@ * * Name: ski2c.c * Project: Gigabit Ethernet Adapters, TWSI-Module - * Version: $Revision: 1.59 $ - * Date: $Date: 2003/10/20 09:07:25 $ * Purpose: Functions to access Voltage and Temperature Sensor * ******************************************************************************/ @@ -19,219 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: ski2c.c,v $ - * Revision 1.59 2003/10/20 09:07:25 rschmidt - * Added cast SK_U32 in SkI2cWrite() to avoid compiler warning. - * Editorial changes. - * - * Revision 1.58 2003/09/23 09:22:53 malthoff - * Parameter I2cDevSize added in SkI2cRead and SkI2cWrite to - * support larger devices on the TWSI bus. - * - * Revision 1.57 2003/01/28 09:17:38 rschmidt - * Fixed handling for sensors on YUKON Fiber. - * Editorial changes. - * - * Revision 1.56 2002/12/19 14:20:41 rschmidt - * Added debugging code in SkI2cWait(). - * Replaced all I2C-write operations with function SkI2cWrite(). - * Fixed compiler warning because of uninitialized 'Time' in SkI2cEvent(). - * Editorial changes. - * - * Revision 1.55 2002/10/15 07:23:55 rschmidt - * Added setting of the GIYukon32Bit bool variable to distinguish - * 32-bit adapters. - * Editorial changes (TWSI). - * - * Revision 1.54 2002/08/13 09:05:06 rschmidt - * Added new thresholds if VAUX is not available (GIVauxAvail). - * Merged defines for PHY PLL 3V3 voltage (A and B). - * Editorial changes. - * - * Revision 1.53 2002/08/08 11:04:53 rwahl - * Added missing comment for revision 1.51 - * - * Revision 1.52 2002/08/08 10:09:02 jschmalz - * Sensor init state caused wrong error log entry - * - * Revision 1.51 2002/08/06 09:43:03 jschmalz - * Extensions and changes for Yukon - * - * Revision 1.50 2002/08/02 12:09:22 rschmidt - * Added support for YUKON sensors. - * Editorial changes. - * - * Revision 1.49 2002/07/30 11:07:52 rschmidt - * Replaced MaxSens init by update for Copper in SkI2cInit1(), - * because it was already initialized in SkI2cInit0(). - * Editorial changes. - * - * Revision 1.48 2001/08/16 12:44:33 afischer - * LM80 sensor init values corrected - * - * Revision 1.47 2001/04/05 11:38:09 rassmann - * Set SenState to idle in SkI2cWaitIrq(). - * Changed error message in SkI2cWaitIrq(). - * - * Revision 1.46 2001/04/02 14:03:35 rassmann - * Changed pAC to IoC in SK_IN32(). - * - * Revision 1.45 2001/03/21 12:12:49 rassmann - * Resetting I2C_READY interrupt in SkI2cInit1(). - * - * Revision 1.44 2000/08/07 15:49:03 gklug - * Fix: SK_INFAST only in NetWare driver. - * - * Revision 1.43 2000/08/03 14:28:17 rassmann - * Added function to wait for I2C being ready before resetting the board. - * Replaced one duplicate "out of range" message with correct one. - * - * Revision 1.42 1999/11/22 13:35:12 cgoos - * Changed license header to GPL. - * - * Revision 1.41 1999/09/14 14:11:30 malthoff - * The 1000BT Dual Link adapter has got only one Fan. - * The second Fan has been removed. - * - * Revision 1.40 1999/05/27 13:37:27 malthoff - * Set divisor of 1 for fan count calculation. - * - * Revision 1.39 1999/05/20 14:54:43 malthoff - * I2c.DummyReads is not used in Diagnostics. - * - * Revision 1.38 1999/05/20 09:20:56 cgoos - * Changes for 1000Base-T (up to 9 sensors and fans). - * - * Revision 1.37 1999/03/25 15:11:36 gklug - * fix: reset error flag if sensor reads correct value - * - * Revision 1.36 1999/01/07 14:11:16 gklug - * fix: break added - * - * Revision 1.35 1999/01/05 15:31:49 gklug - * fix: CLEAR STAT command is now added correctly - * - * Revision 1.34 1998/12/01 13:45:16 gklug - * fix: introduced Init level, because we don't need reinits - * - * Revision 1.33 1998/11/09 14:54:25 malthoff - * Modify I2C Transfer Timeout handling for Diagnostics. - * - * Revision 1.32 1998/11/03 06:54:35 gklug - * fix: Need dummy reads at the beginning to init sensors - * - * Revision 1.31 1998/11/03 06:42:42 gklug - * fix: select correctVIO range only if between warning levels - * - * Revision 1.30 1998/11/02 07:36:53 gklug - * fix: Error should not include WARNING message - * - * Revision 1.29 1998/10/30 15:07:43 malthoff - * Disable 'I2C does not compelete' error log for diagnostics. - * - * Revision 1.28 1998/10/22 09:48:11 gklug - * fix: SysKonnectFileId typo - * - * Revision 1.27 1998/10/20 09:59:46 gklug - * add: parameter to SkOsGetTime - * - * Revision 1.26 1998/10/09 06:10:59 malthoff - * Remove ID_sccs by SysKonnectFileId. - * - * Revision 1.25 1998/09/08 12:40:26 gklug - * fix: syntax error in if clause - * - * Revision 1.24 1998/09/08 12:19:42 gklug - * chg: INIT Level checking - * - * Revision 1.23 1998/09/08 07:37:20 gklug - * fix: log error if PCI_IO voltage sensor could not be initialized - * - * Revision 1.22 1998/09/04 08:30:03 malthoff - * Bugfixes during SK_DIAG testing: - * - correct NS2BCLK() macro - * - correct SkI2cSndDev() - * - correct SkI2cWait() loop waiting for an event - * - * Revision 1.21 1998/08/27 14:46:01 gklug - * chg: if-then-else replaced by switch - * - * Revision 1.20 1998/08/27 14:40:07 gklug - * test: integral types - * - * Revision 1.19 1998/08/25 07:51:54 gklug - * fix: typos for compiling - * - * Revision 1.18 1998/08/25 06:12:24 gklug - * add: count errors and warnings - * fix: check not the sensor state but the ErrFlag! - * - * Revision 1.17 1998/08/25 05:56:48 gklug - * add: CheckSensor function - * - * Revision 1.16 1998/08/20 11:41:10 gklug - * chg: omit STRCPY macro by using char * as Sensor Description - * - * Revision 1.15 1998/08/20 11:37:35 gklug - * chg: change Ioc to IoC - * - * Revision 1.14 1998/08/20 11:32:52 gklug - * fix: Para compile error - * - * Revision 1.13 1998/08/20 11:27:41 gklug - * fix: Compile bugs with new awrning constants - * - * Revision 1.12 1998/08/20 08:53:05 gklug - * fix: compiler errors - * add: Threshold values - * - * Revision 1.11 1998/08/19 12:39:22 malthoff - * Compiler Fix: Some names have changed. - * - * Revision 1.10 1998/08/19 12:20:56 gklug - * fix: remove struct from C files (see CCC) - * - * Revision 1.9 1998/08/19 06:28:46 malthoff - * SkOsGetTime returns SK_U64 now. - * - * Revision 1.8 1998/08/17 13:53:33 gklug - * fix: Parameter of event function and its result - * - * Revision 1.7 1998/08/17 07:02:15 malthoff - * Modify the functions for accessing the I2C SW Registers. - * Modify SkI2cWait(). - * Put Lm80RcvReg into sklm80.c - * Remove Compiler Errors. - * - * Revision 1.6 1998/08/14 07:13:20 malthoff - * remove pAc with pAC - * remove smc with pAC - * change names to new convention - * - * Revision 1.5 1998/08/14 06:24:49 gklug - * add: init level 1 and 2 - * - * Revision 1.4 1998/08/12 14:31:12 gklug - * add: error log for unknown event - * - * Revision 1.3 1998/08/12 13:37:04 gklug - * add: Init 0 function - * - * Revision 1.2 1998/08/11 07:27:15 gklug - * add: functions of the interface - * adapt rest of source to C coding Conventions - * rmv: unnecessary code taken from Mona Lisa - * - * Revision 1.1 1998/06/19 14:28:43 malthoff - * Created. Sources taken from ML Projekt. - * Sources have to be reworked for GE. * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/sklm80.c b/drivers/net/sk98lin/sklm80.c --- a/drivers/net/sk98lin/sklm80.c Wed Feb 4 16:51:37 2004 +++ b/drivers/net/sk98lin/sklm80.c Wed Feb 4 16:51:37 2004 @@ -2,8 +2,6 @@ * * Name: sklm80.c * Project: Gigabit Ethernet Adapters, TWSI-Module - * Version: $Revision: 1.22 $ - * Date: $Date: 2003/10/20 09:08:21 $ * Purpose: Functions to access Voltage and Temperature Sensor (LM80) * ******************************************************************************/ @@ -19,86 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: sklm80.c,v $ - * Revision 1.22 2003/10/20 09:08:21 rschmidt - * Editorial changes. - * - * Revision 1.21 2003/09/23 09:29:04 malthoff - * Parameter Dev_Size added to macro SK_I2C_CTL. - * - * Revision 1.20 2002/08/13 09:16:27 rschmidt - * Changed return value for SkLm80ReadSensor() back to 'int' - * Editorial changes. - * - * Revision 1.19 2002/08/06 09:43:31 jschmalz - * Extensions and changes for Yukon. - * - * Revision 1.18 2002/08/02 12:26:57 rschmidt - * Editorial changes. - * - * Revision 1.17 1999/11/22 13:35:51 cgoos - * Changed license header to GPL. - * - * Revision 1.16 1999/05/27 14:05:47 malthoff - * Fans: Set SenVal to 0 if the fan value is 0 or 0xff. Both values - * are outside the limits (0: div zero error, 0xff: value not in - * range, assume 0). - * - * Revision 1.15 1999/05/27 13:38:51 malthoff - * Pervent from Division by zero errors. - * - * Revision 1.14 1999/05/20 09:20:01 cgoos - * Changes for 1000Base-T (Fan sensors). - * - * Revision 1.13 1998/10/22 09:48:14 gklug - * fix: SysKonnectFileId typo - * - * Revision 1.12 1998/10/09 06:12:06 malthoff - * Remove ID_sccs by SysKonnectFileId. - * - * Revision 1.11 1998/09/04 08:33:48 malthoff - * bug fix: SenState = SK_SEN_IDLE when - * leaving SK_SEN_VALEXT state - * - * Revision 1.10 1998/08/20 12:02:10 gklug - * fix: compiler warnings type mismatch - * - * Revision 1.9 1998/08/20 11:37:38 gklug - * chg: change Ioc to IoC - * - * Revision 1.8 1998/08/19 12:20:58 gklug - * fix: remove struct from C files (see CCC) - * - * Revision 1.7 1998/08/17 07:04:57 malthoff - * Take SkLm80RcvReg() function from ski2c.c. - * Add IoC parameter to BREAK_OR_WAIT() macro. - * - * Revision 1.6 1998/08/14 07:11:28 malthoff - * remove pAc with pAC. - * - * Revision 1.5 1998/08/14 06:46:55 gklug - * fix: temperature can get negative - * - * Revision 1.4 1998/08/13 08:27:04 gklug - * add: temperature reading now o.k. - * fix: pSen declaration, SK_ERR_LOG call, ADDR macro - * - * Revision 1.3 1998/08/13 07:28:21 gklug - * fix: pSen was wrong initialized - * add: correct conversion for voltage readings - * - * Revision 1.2 1998/08/11 07:52:14 gklug - * add: Lm80 read sensor function - * - * Revision 1.1 1998/07/17 09:57:12 gklug - * initial version * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/skproc.c b/drivers/net/sk98lin/skproc.c --- a/drivers/net/sk98lin/skproc.c Wed Feb 4 16:51:33 2004 +++ b/drivers/net/sk98lin/skproc.c Wed Feb 4 16:51:33 2004 @@ -2,8 +2,6 @@ * * Name: skproc.c * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.11 $ - * Date: $Date: 2003/12/11 16:03:57 $ * Purpose: Funktions to display statictic data * ******************************************************************************/ @@ -22,98 +20,6 @@ * Author: Mirko Lindner (mlindner@syskonnect.de) * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ -/****************************************************************************** - * - * History: - * - * $Log: skproc.c,v $ - * Revision 1.11 2003/12/11 16:03:57 mlindner - * Fix: Create backup from pnmi data structure - * - * Revision 1.10 2003/11/19 16:25:36 mlindner - * Fix: Print output as 64-bit digit - * - * Revision 1.9 2003/11/17 13:29:05 mlindner - * Fix: Editorial changes - * - * Revision 1.8 2003/11/13 14:18:48 rroesler - * Fix: added latest changes regarding the use of the proc system - * - * Revision 1.7 2003/11/10 09:35:07 rroesler - * Fix: diag backup restore of PNMI structure - * - * Revision 1.6 2003/11/07 17:31:39 rroesler - * Add: security counter for the proc file system - * - * Revision 1.5 2003/10/07 08:17:08 mlindner - * Fix: Copyright changes - * - * Revision 1.4 2003/09/01 15:29:24 mlindner - * Fix: Editorial changes - * - * Revision 1.3 2003/08/29 12:30:58 mlindner - * Add: Version entry in the proc file system - * - * Revision 1.2 2003/08/12 16:45:29 mlindner - * Add: Removed SkNumber and SkDoDiv - * Add: Counter output as (unsigned long long) - * - * Revision 1.1 2003/07/18 13:39:57 rroesler - * Fix: Re-enter after CVS crash - * - * Revision 1.8 2003/06/27 14:41:42 rroesler - * Corrected compiler-warning kernel 2.2 - * - * Revision 1.7 2003/06/27 12:09:51 rroesler - * corrected minor edits - * - * Revision 1.6 2003/05/26 12:58:53 mlindner - * Add: Support for Kernel 2.5/2.6 - * - * Revision 1.5 2003/03/19 14:40:47 mlindner - * Fix: Editorial changes - * - * Revision 1.4 2003/02/25 14:16:37 mlindner - * Fix: Copyright statement - * - * Revision 1.3 2002/10/02 12:59:51 mlindner - * Add: Support for Yukon - * Add: Speed check and setup - * Add: Merge source for kernel 2.2.x and 2.4.x - * Add: Read sensor names directly from VPD - * Fix: Volt values - * - * Revision 1.2.2.7 2002/01/14 12:45:15 mlindner - * Fix: Editorial changes - * - * Revision 1.2.2.6 2001/12/06 15:26:07 mlindner - * Fix: Return value of proc_read - * - * Revision 1.2.2.5 2001/12/06 09:57:39 mlindner - * New ProcFs entries - * - * Revision 1.2.2.4 2001/09/05 12:16:02 mlindner - * Add: New ProcFs entries - * Fix: Counter Errors (Jumbo == to long errors) - * Fix: Kernel error compilation - * Fix: too short counters - * - * Revision 1.2.2.3 2001/06/25 07:26:26 mlindner - * Add: More error messages - * - * Revision 1.2.2.2 2001/03/15 12:50:13 mlindner - * fix: ProcFS owner protection - * - * Revision 1.2.2.1 2001/03/12 16:43:48 mlindner - * chg: 2.4 requirements for procfs - * - * Revision 1.1 2001/01/22 14:15:31 mlindner - * added ProcFs functionality - * Dual Net functionality integrated - * Rlmt networks added - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/skqueue.c b/drivers/net/sk98lin/skqueue.c --- a/drivers/net/sk98lin/skqueue.c Wed Feb 4 16:51:34 2004 +++ b/drivers/net/sk98lin/skqueue.c Wed Feb 4 16:51:34 2004 @@ -2,8 +2,6 @@ * * Name: skqueue.c * Project: Gigabit Ethernet Adapters, Event Scheduler Module - * Version: $Revision: 1.20 $ - * Date: $Date: 2003/09/16 13:44:00 $ * Purpose: Management of an event queue. * ******************************************************************************/ @@ -21,77 +19,6 @@ * The information in this file is provided "AS IS" without warranty. * ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skqueue.c,v $ - * Revision 1.20 2003/09/16 13:44:00 rschmidt - * Added (C) Marvell to SysKonnectFileId - * Editorial changes - * - * Revision 1.19 2003/05/13 18:00:07 mkarl - * Removed calls to RLMT, TWSI, and PNMI for SLIM driver (SK_SLIM). - * Editorial changes. - * - * Revision 1.18 2002/05/07 14:11:11 rwahl - * Fixed Watcom Precompiler error. - * - * Revision 1.17 2002/03/25 10:06:41 mkunz - * SkIgnoreEvent deleted - * - * Revision 1.16 2002/03/15 10:51:59 mkunz - * Added event classes for link aggregation - * - * Revision 1.15 1999/11/22 13:36:29 cgoos - * Changed license header to GPL. - * - * Revision 1.14 1998/10/15 15:11:35 gklug - * fix: ID_sccs to SysKonnectFileId - * - * Revision 1.13 1998/09/08 08:47:52 gklug - * add: init level handling - * - * Revision 1.12 1998/09/08 07:43:20 gklug - * fix: Sirq Event function name - * - * Revision 1.11 1998/09/08 05:54:34 gklug - * chg: define SK_CSUM is replaced by SK_USE_CSUM - * - * Revision 1.10 1998/09/03 14:14:49 gklug - * add: CSUM and HWAC Eventclass and function. - * - * Revision 1.9 1998/08/19 09:50:50 gklug - * fix: remove struct keyword from c-code (see CCC) add typedefs - * - * Revision 1.8 1998/08/17 13:43:11 gklug - * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR - * - * Revision 1.7 1998/08/14 07:09:11 gklug - * fix: chg pAc -> pAC - * - * Revision 1.6 1998/08/11 12:13:14 gklug - * add: return code feature of Event service routines - * add: correct Error log calls - * - * Revision 1.5 1998/08/07 12:53:45 gklug - * fix: first compiled version - * - * Revision 1.4 1998/08/07 09:20:48 gklug - * adapt functions to C coding conventions. - * - * Revision 1.3 1998/08/05 11:29:32 gklug - * rmv: Timer event entry. Timer will queue event directly - * - * Revision 1.2 1998/07/31 11:22:40 gklug - * Initial version - * - * Revision 1.1 1998/07/30 15:14:01 gklug - * Initial version. Adapted from SMT - * - ******************************************************************************/ - /* * Event queue and dispatcher diff -Nru a/drivers/net/sk98lin/skrlmt.c b/drivers/net/sk98lin/skrlmt.c --- a/drivers/net/sk98lin/skrlmt.c Wed Feb 4 16:51:36 2004 +++ b/drivers/net/sk98lin/skrlmt.c Wed Feb 4 16:51:36 2004 @@ -2,8 +2,6 @@ * * Name: skrlmt.c * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.69 $ - * Date: $Date: 2003/04/15 09:39:22 $ * Purpose: Manage links on SK-NET Adapters, esp. redundant ones. * ******************************************************************************/ @@ -19,254 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skrlmt.c,v $ - * Revision 1.69 2003/04/15 09:39:22 tschilli - * Copyright messages changed. - * "#error C++ is not yet supported." removed. - * - * Revision 1.68 2003/01/31 15:26:56 rschmidt - * Added init for local variables in RlmtInit(). - * - * Revision 1.67 2003/01/31 14:12:41 mkunz - * single port adapter runs now with two identical MAC addresses - * - * Revision 1.66 2002/09/23 15:14:19 rwahl - * - Reset broadcast timestamp on link down. - * - Editorial corrections. - * - * Revision 1.65 2002/07/22 14:29:48 rwahl - * - Removed BRK statement from debug check. - * - * Revision 1.64 2001/11/28 19:36:14 rwahl - * - RLMT Packets sent to an invalid MAC address in CLP/CLPSS mode - * (#10650). - * - Reworked fix for port switching in CLS mode (#10639) - * (no dependency to RLMT module). - * - Enabled dbg output for entry/exit of event functions. - * - Editorial changes. - * - * Revision 1.63 2001/10/26 07:53:18 afischer - * Port switching bug in `check local link` mode - * - * Revision 1.62 2001/07/03 12:16:30 mkunz - * New Flag ChgBcPrio (Change priority of last broadcast received) - * - * Revision 1.61 2001/03/14 12:52:08 rassmann - * Fixed reporting of active port up/down to PNMI. - * - * Revision 1.60 2001/02/21 16:02:25 gklug - * fix: when RLMT starts set Active Port for PNMI - * - * Revision 1.59 2001/02/16 14:38:19 rassmann - * Initializing some pointers earlier in the init phase. - * Rx Mbufs are freed if the net which they belong to is stopped. - * - * Revision 1.58 2001/02/14 14:06:31 rassmann - * Editorial changes. - * - * Revision 1.57 2001/02/05 14:25:26 rassmann - * Prepared RLMT for transparent operation. - * - * Revision 1.56 2001/01/30 10:29:09 rassmann - * Not checking switching befor RlmtStart. - * Editorial changes. - * - * Revision 1.55 2001/01/22 13:41:38 rassmann - * Supporting two nets on dual-port adapters. - * - * Revision 1.54 2000/11/30 13:25:07 rassmann - * Setting SK_TICK_INCR to 1 by default. - * - * Revision 1.53 2000/11/30 10:48:07 cgoos - * Changed definition of SK_RLMT_BC_DELTA. - * - * Revision 1.52 2000/11/27 12:50:03 rassmann - * Checking ports after receiving broadcasts. - * - * Revision 1.51 2000/11/17 08:58:00 rassmann - * Moved CheckSwitch from SK_RLMT_PACKET_RECEIVED to SK_RLMT_TIM event. - * - * Revision 1.50 2000/11/09 12:24:34 rassmann - * Indicating that segmentation check is not running anymore after - * SkRlmtCheckSeg(). - * Restarting segmentation timer after segmentation log. - * Editorial changes. - * - * Revision 1.49 1999/11/22 13:38:02 cgoos - * Changed license header to GPL. - * Added initialization to some variables to avoid compiler warnings. - * - * Revision 1.48 1999/10/04 14:01:17 rassmann - * Corrected reaction to reception of BPDU frames (#10441). - * - * Revision 1.47 1999/07/20 12:53:36 rassmann - * Fixed documentation errors for lookahead macros. - * - * Revision 1.46 1999/05/28 13:29:16 rassmann - * Replaced C++-style comment. - * - * Revision 1.45 1999/05/28 13:28:08 rassmann - * Corrected syntax error (xxx). - * - * Revision 1.44 1999/05/28 11:15:54 rassmann - * Changed behaviour to reflect Design Spec v1.2. - * Controlling Link LED(s). - * Introduced RLMT Packet Version field in RLMT Packet. - * Newstyle lookahead macros (checking meta-information before looking at - * the packet). - * - * Revision 1.43 1999/01/28 13:12:43 rassmann - * Corrected Lookahead (bug introduced in previous Rev.). - * - * Revision 1.42 1999/01/28 12:50:41 rassmann - * Not using broadcast time stamps in CheckLinkState mode. - * - * Revision 1.41 1999/01/27 14:13:02 rassmann - * Monitoring broadcast traffic. - * Switching more reliably and not too early if switch is - * configured for spanning tree. - * - * Revision 1.40 1999/01/22 13:17:30 rassmann - * Informing PNMI of NET_UP. - * Clearing RLMT multicast addresses before setting them for the first time. - * Reporting segmentation earlier, setting a "quiet time" - * after a report. - * - * Revision 1.39 1998/12/10 15:29:53 rassmann - * Corrected SuspectStatus in SkRlmtBuildCheckChain(). - * Corrected CHECK_SEG mode. - * - * Revision 1.38 1998/12/08 13:11:23 rassmann - * Stopping SegTimer at RlmtStop. - * - * Revision 1.37 1998/12/07 16:51:42 rassmann - * Corrected comments. - * - * Revision 1.36 1998/12/04 10:58:56 rassmann - * Setting next pointer to NULL when receiving. - * - * Revision 1.35 1998/12/03 16:12:42 rassmann - * Ignoring/correcting illegal PrefPort values. - * - * Revision 1.34 1998/12/01 11:45:35 rassmann - * Code cleanup. - * - * Revision 1.33 1998/12/01 10:29:32 rassmann - * Starting standby ports before getting the net up. - * Checking if a port is started when the link comes up. - * - * Revision 1.32 1998/11/30 16:19:50 rassmann - * New default for PortNoRx. - * - * Revision 1.31 1998/11/27 19:17:13 rassmann - * Corrected handling of LINK_DOWN coming shortly after LINK_UP. - * - * Revision 1.30 1998/11/24 12:37:31 rassmann - * Implemented segmentation check. - * - * Revision 1.29 1998/11/18 13:04:32 rassmann - * Secured PortUpTimer event. - * Waiting longer before starting standby port(s). - * - * Revision 1.28 1998/11/17 13:43:04 rassmann - * Handling (logical) tx failure. - * Sending packet on logical address after PORT_SWITCH. - * - * Revision 1.27 1998/11/13 17:09:50 rassmann - * Secured some events against being called in wrong state. - * - * Revision 1.26 1998/11/13 16:56:54 rassmann - * Added macro version of SkRlmtLookaheadPacket. - * - * Revision 1.25 1998/11/06 18:06:04 rassmann - * Corrected timing when RLMT checks fail. - * Clearing tx counter earlier in periodical checks. - * - * Revision 1.24 1998/11/05 10:37:27 rassmann - * Checking destination address in Lookahead. - * - * Revision 1.23 1998/11/03 13:53:49 rassmann - * RLMT should switch now (at least in mode 3). - * - * Revision 1.22 1998/10/29 14:34:49 rassmann - * Clearing SK_RLMT struct at startup. - * Initializing PortsUp during SK_RLMT_START. - * - * Revision 1.21 1998/10/28 11:30:17 rassmann - * Default mode is now SK_RLMT_CHECK_LOC_LINK. - * - * Revision 1.20 1998/10/26 16:02:03 rassmann - * Ignoring LINK_DOWN for links that are down. - * - * Revision 1.19 1998/10/22 15:54:01 rassmann - * Corrected EtherLen. - * Starting Link Check when second port comes up. - * - * Revision 1.18 1998/10/22 11:39:50 rassmann - * Corrected signed/unsigned mismatches. - * Corrected receive list handling and address recognition. - * - * Revision 1.17 1998/10/19 17:01:20 rassmann - * More detailed checking of received packets. - * - * Revision 1.16 1998/10/15 15:16:34 rassmann - * Finished Spanning Tree checking. - * Checked with lint. - * - * Revision 1.15 1998/09/24 19:16:07 rassmann - * Code cleanup. - * Introduced Timer for PORT_DOWN due to no RX. - * - * Revision 1.14 1998/09/18 20:27:14 rassmann - * Added address override. - * - * Revision 1.13 1998/09/16 11:31:48 rassmann - * Including skdrv1st.h again. :( - * - * Revision 1.12 1998/09/16 11:09:50 rassmann - * Syntax corrections. - * - * Revision 1.11 1998/09/15 12:32:03 rassmann - * Syntax correction. - * - * Revision 1.10 1998/09/15 11:28:49 rassmann - * Syntax corrections. - * - * Revision 1.9 1998/09/14 17:07:37 rassmann - * Added code for port checking via LAN. - * Changed Mbuf definition. - * - * Revision 1.8 1998/09/07 11:14:14 rassmann - * Syntax corrections. - * - * Revision 1.7 1998/09/07 09:06:07 rassmann - * Syntax corrections. - * - * Revision 1.6 1998/09/04 19:41:33 rassmann - * Syntax corrections. - * Started entering code for checking local links. - * - * Revision 1.5 1998/09/04 12:14:27 rassmann - * Interface cleanup. - * - * Revision 1.4 1998/09/02 16:55:28 rassmann - * Updated to reflect new DRV/HWAC/RLMT interface. - * - * Revision 1.3 1998/08/27 14:29:03 rassmann - * Code cleanup. - * - * Revision 1.2 1998/08/27 14:26:24 rassmann - * Updated interface. - * - * Revision 1.1 1998/08/21 08:26:49 rassmann - * First public version. * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/sktimer.c b/drivers/net/sk98lin/sktimer.c --- a/drivers/net/sk98lin/sktimer.c Wed Feb 4 16:51:33 2004 +++ b/drivers/net/sk98lin/sktimer.c Wed Feb 4 16:51:33 2004 @@ -2,8 +2,6 @@ * * Name: sktimer.c * Project: Gigabit Ethernet Adapters, Event Scheduler Module - * Version: $Revision: 1.14 $ - * Date: $Date: 2003/09/16 13:46:51 $ * Purpose: High level timer functions. * ******************************************************************************/ @@ -21,60 +19,6 @@ * The information in this file is provided "AS IS" without warranty. * ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: sktimer.c,v $ - * Revision 1.14 2003/09/16 13:46:51 rschmidt - * Added (C) Marvell to SysKonnectFileId - * Editorial changes - * - * Revision 1.13 2003/05/13 18:01:01 mkarl - * Editorial changes. - * - * Revision 1.12 1999/11/22 13:38:51 cgoos - * Changed license header to GPL. - * - * Revision 1.11 1998/12/17 13:24:13 gklug - * fix: restart problem: do NOT destroy timer queue if init 1 is done - * - * Revision 1.10 1998/10/15 15:11:36 gklug - * fix: ID_sccs to SysKonnectFileId - * - * Revision 1.9 1998/09/15 15:15:04 cgoos - * Changed TRUE/FALSE to SK_TRUE/SK_FALSE - * - * Revision 1.8 1998/09/08 08:47:55 gklug - * add: init level handling - * - * Revision 1.7 1998/08/19 09:50:53 gklug - * fix: remove struct keyword from c-code (see CCC) add typedefs - * - * Revision 1.6 1998/08/17 13:43:13 gklug - * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR - * - * Revision 1.5 1998/08/14 07:09:14 gklug - * fix: chg pAc -> pAC - * - * Revision 1.4 1998/08/07 12:53:46 gklug - * fix: first compiled version - * - * Revision 1.3 1998/08/07 09:31:53 gklug - * fix: delta spelling - * - * Revision 1.2 1998/08/07 09:31:02 gklug - * adapt functions to new c coding conventions - * rmv: "fast" handling - * chg: inserting of new timer in queue. - * chg: event queue generation when timer runs out - * - * Revision 1.1 1998/08/05 11:27:55 gklug - * first version: adapted from SMT - * - ******************************************************************************/ - /* * Event queue and dispatcher diff -Nru a/drivers/net/sk98lin/skvpd.c b/drivers/net/sk98lin/skvpd.c --- a/drivers/net/sk98lin/skvpd.c Wed Feb 4 16:51:36 2004 +++ b/drivers/net/sk98lin/skvpd.c Wed Feb 4 16:51:36 2004 @@ -2,8 +2,6 @@ * * Name: skvpd.c * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.37 $ - * Date: $Date: 2003/01/13 10:42:45 $ * Purpose: Shared software to read and write VPD data * ******************************************************************************/ @@ -18,145 +16,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skvpd.c,v $ - * Revision 1.37 2003/01/13 10:42:45 rschmidt - * Replaced check for PCI device Id from YUKON with GENESIS - * to set the VPD size in VpdInit() - * Editorial changes - * - * Revision 1.36 2002/11/14 15:16:56 gheinig - * Added const specifier to key and buf parameters for VpdPara, VpdRead - * and VpdWrite for Diag 7 GUI - * - * Revision 1.35 2002/10/21 14:31:59 gheinig - * Took out CVS web garbage at head of file - * - * Revision 1.34 2002/10/21 11:47:24 gheinig - * Reverted to version 1.32 due to unwanted commit - * - * Revision 1.32 2002/10/14 16:04:29 rschmidt - * Added saving of VPD ROM Size from PCI_OUR_REG_2 - * Avoid reading of PCI_OUR_REG_2 in VpdTransferBlock() - * Editorial changes - * - * Revision 1.31 2002/09/10 09:21:32 mkarl - * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis - * - * Revision 1.30 2002/09/09 14:43:03 mkarl - * changes for diagnostics in order to read VPD data before the adapter - * has been initialized - * editorial changes - * - * Revision 1.29 2002/07/26 13:20:43 mkarl - * added Yukon support - * save size of VPD in pAC->vpd.vpd_size - * - * Revision 1.28 2002/04/02 15:31:47 afischer - * Bug fix in VpdWait() - * - * Revision 1.27 2000/08/10 11:29:06 rassmann - * Editorial changes. - * Preserving 32-bit alignment in structs for the adapter context. - * Removed unused function VpdWriteDword() (#if 0). - * Made VpdReadKeyword() available for SKDIAG only. - * - * Revision 1.26 2000/06/13 08:00:01 mkarl - * additional cast to avoid compile problems in 64 bit environment - * - * Revision 1.25 1999/11/22 13:39:32 cgoos - * Changed license header to GPL. - * - * Revision 1.24 1999/03/11 14:25:49 malthoff - * Replace __STDC__ with SK_KR_PROTO. - * - * Revision 1.23 1999/01/11 15:13:11 gklug - * fix: syntax error - * - * Revision 1.22 1998/10/30 06:41:15 gklug - * rmv: WARNING - * - * Revision 1.21 1998/10/29 07:15:14 gklug - * fix: Write Stream function needs verify. - * - * Revision 1.20 1998/10/28 18:05:08 gklug - * chg: no DEBUG in VpdMayWrite - * - * Revision 1.19 1998/10/28 15:56:11 gklug - * fix: Return len at end of ReadStream - * fix: Write even less than 4 bytes correctly - * - * Revision 1.18 1998/10/28 09:00:47 gklug - * fix: unreferenced local vars - * - * Revision 1.17 1998/10/28 08:25:45 gklug - * fix: WARNING - * - * Revision 1.16 1998/10/28 08:17:30 gklug - * fix: typo - * - * Revision 1.15 1998/10/28 07:50:32 gklug - * fix: typo - * - * Revision 1.14 1998/10/28 07:20:38 gklug - * chg: Interface functions to use IoC as parameter as well - * fix: VpdRead/WriteDWord now returns SK_U32 - * chg: VPD_IN/OUT names conform to SK_IN/OUT - * add: usage of VPD_IN/OUT8 macros - * add: VpdRead/Write Stream functions to r/w a stream of data - * fix: VpdTransferBlock swapped illegal - * add: VpdMayWrite - * - * Revision 1.13 1998/10/22 10:02:37 gklug - * fix: SysKonnectFileId typo - * - * Revision 1.12 1998/10/20 10:01:01 gklug - * fix: parameter to SkOsGetTime - * - * Revision 1.11 1998/10/15 12:51:48 malthoff - * Remove unrequired parameter p in vpd_setup_para(). - * - * Revision 1.10 1998/10/08 14:52:43 malthoff - * Remove CvsId by SysKonnectFileId. - * - * Revision 1.9 1998/09/16 07:33:52 malthoff - * replace memcmp() by SK_MEMCMP and - * memcpy() by SK_MEMCPY() to be - * independent from the 'C' Standard Library. - * - * Revision 1.8 1998/08/19 12:52:35 malthoff - * compiler fix: use SK_VPD_KEY instead of S_VPD. - * - * Revision 1.7 1998/08/19 08:14:01 gklug - * fix: remove struct keyword as much as possible from the C-code (see CCC) - * - * Revision 1.6 1998/08/18 13:03:58 gklug - * SkOsGetTime now returns SK_U64 - * - * Revision 1.5 1998/08/18 08:17:29 malthoff - * Ensure we issue a VPD read in vpd_read_dword(). - * Discard all VPD keywords other than Vx or Yx, where - * x is '0..9' or 'A..Z'. - * - * Revision 1.4 1998/07/03 14:52:19 malthoff - * Add category SK_DBGCAT_FATAL to some debug macros. - * bug fix: correct the keyword name check in vpd_write(). - * - * Revision 1.3 1998/06/26 11:16:53 malthoff - * Correct the modified File Identifier. - * - * Revision 1.2 1998/06/26 11:13:43 malthoff - * Modify the File Identifier. - * - * Revision 1.1 1998/06/19 14:11:08 malthoff - * Created, Tests with AIX were performed successfully - * * ******************************************************************************/ diff -Nru a/drivers/net/sk98lin/skxmac2.c b/drivers/net/sk98lin/skxmac2.c --- a/drivers/net/sk98lin/skxmac2.c Wed Feb 4 16:51:37 2004 +++ b/drivers/net/sk98lin/skxmac2.c Wed Feb 4 16:51:37 2004 @@ -2,8 +2,6 @@ * * Name: skxmac2.c * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.102 $ - * Date: $Date: 2003/10/02 16:53:58 $ * Purpose: Contains functions to initialize the MACs and PHYs * ******************************************************************************/ @@ -19,461 +17,6 @@ * (at your option) any later version. * * The information in this file is provided "AS IS" without warranty. - * - ******************************************************************************/ - -/****************************************************************************** - * - * History: - * - * $Log: skxmac2.c,v $ - * Revision 1.102 2003/10/02 16:53:58 rschmidt - * Changed setting of GMAC parameters with new macros. - * Added define SLIM around SkGm...LowPowerMode(). - * Editorial changes. - * - * Revision 1.101 2003/09/16 14:49:07 rschmidt - * Added routines SkGmClearRst(), SkXmClearRst, SkMacClearRst(). - * Added WA code for Yukon-Lite's COMA mode in SkGmHardRst(). - * Replaced PCI-Config R/W through internal access. - * Fixed return from coma mode in SkGmLeaveLowPowerMode(). - * Fixed compiler warnings for different types. - * Editorial changes. - * - * Revision 1.100 2003/09/16 07:09:11 mschmid - * Added functions SkGmEnterLowPowerMode() and - * SkGmLeaveLowPowerMode() - * - * Revision 1.99 2003/07/11 12:19:33 rschmidt - * Reduced init values for Master & Slave downshift counters to - * minimum values. - * Editorial changes. - * - * Revision 1.98 2003/07/04 12:53:56 rschmidt - * Changed setting of downshift feature in SkGmInitPhyMarv(). - * Enabled downshift feature only for para 'Speed' set to 'Auto'. - * Changed init values for Master & Slave downshift counters. - * Editorial changes. - * - * Revision 1.97 2003/05/28 15:53:47 rschmidt - * Removed setting of Yukon PHY's 'force link good' in loopback mode. - * Replaced call pFnMacOverflow() with SkXmOverflowStatus() resp. - * SkGmOverflowStatus(). - * Editorial changes. - * - * Revision 1.96 2003/05/13 17:37:11 mkarl - * Removed calls to PNMI for SLIM driver. - * Added SK_FAR for PXE. - * Separated code pathes not used for SLIM driver. - * Some further separations for YUKON and GENESIS. - * Editorial changes. - * - * Revision 1.95 2003/05/06 13:09:53 rschmidt - * Changed init sequence for auto-negotiation disabled in SkGmInitMac(). - * Added defines around GENESIS resp. YUKON branches to reduce - * code size for PXE. - * Editorial changes. - * - * Revision 1.94 2003/04/10 14:36:40 rschmidt - * Fixed define for debug code in SkGmInitPhyMarv(). - * - * Revision 1.93 2003/04/08 16:58:16 rschmidt - * Changed initialisation of GMAC and GPHY for disabling - * Flow-Control with parameter 'none' (Bug Id #10769). - * Changed init for blinking active LED and normal duplex LED - * depending on value from GILedBlinkCtrl (LED Blink Control). - * Added control for Link100 LED. - * Changed handling for different PhyTypes for source code - * portability to PXE, UNDI. - * Editorial changes. - * - * Revision 1.92 2003/03/31 07:12:33 mkarl - * Restore PHY_MARV_AUNE_ADV after writing to GM_GP_CTRL in order to make - * auto-negotiation of limited flow-control possible. - * Corrected Copyright. - * Editorial changes. - * - * Revision 1.91 2003/02/05 15:09:34 rschmidt - * Removed setting of 'Collision Test'-bit in SkGmInitPhyMarv(). - * Disabled auto-update for speed, duplex and flow-control when - * auto-negotiation is not enabled (Bug Id #10766). - * Editorial changes. - * - * Revision 1.90 2003/01/29 13:35:19 rschmidt - * Increment Rx FIFO Overflow counter only in DEBUG-mode. - * Corrected define for blinking active LED. - * - * Revision 1.89 2003/01/28 16:37:45 rschmidt - * Changed init for blinking active LED - * - * Revision 1.88 2003/01/28 10:09:38 rschmidt - * Added debug outputs in SkGmInitMac(). - * Added customized init of LED registers in SkGmInitPhyMarv(), - * for blinking active LED (#ifdef ACT_LED_BLINK) and - * for normal duplex LED (#ifdef DUP_LED_NORMAL). - * Editorial changes. - * - * Revision 1.87 2002/12/10 14:39:05 rschmidt - * Improved initialization of GPHY in SkGmInitPhyMarv(). - * Editorial changes. - * - * Revision 1.86 2002/12/09 15:01:12 rschmidt - * Added setup of Ext. PHY Specific Ctrl Reg (downshift feature). - * - * Revision 1.85 2002/12/05 14:09:16 rschmidt - * Improved avoiding endless loop in SkGmPhyRead(), SkGmPhyWrite(). - * Added additional advertising for 10Base-T when 100Base-T is selected. - * Added case SK_PHY_MARV_FIBER for YUKON Fiber adapter. - * Editorial changes. - * - * Revision 1.84 2002/11/15 12:50:09 rschmidt - * Changed SkGmCableDiagStatus() when getting results. - * - * Revision 1.83 2002/11/13 10:28:29 rschmidt - * Added some typecasts to avoid compiler warnings. - * - * Revision 1.82 2002/11/13 09:20:46 rschmidt - * Replaced for(..) with do {} while (...) in SkXmUpdateStats(). - * Replaced 2 macros GM_IN16() with 1 GM_IN32() in SkGmMacStatistic(). - * Added SkGmCableDiagStatus() for Virtual Cable Test (VCT). - * Editorial changes. - * - * Revision 1.81 2002/10/28 14:28:08 rschmidt - * Changed MAC address setup for GMAC in SkGmInitMac(). - * Optimized handling of counter overflow IRQ in SkGmOverflowStatus(). - * Editorial changes. - * - * Revision 1.80 2002/10/14 15:29:44 rschmidt - * Corrected disabling of all PHY IRQs. - * Added WA for deviation #16 (address used for pause packets). - * Set Pause Mode in SkMacRxTxEnable() only for Genesis. - * Added IRQ and counter for Receive FIFO Overflow in DEBUG-mode. - * SkXmTimeStamp() replaced by SkMacTimeStamp(). - * Added clearing of GMAC Tx FIFO Underrun IRQ in SkGmIrq(). - * Editorial changes. - * - * Revision 1.79 2002/10/10 15:55:36 mkarl - * changes for PLinkSpeedUsed - * - * Revision 1.78 2002/09/12 09:39:51 rwahl - * Removed deactivate code for SIRQ overflow event separate for TX/RX. - * - * Revision 1.77 2002/09/09 12:26:37 mkarl - * added handling for Yukon to SkXmTimeStamp - * - * Revision 1.76 2002/08/21 16:41:16 rschmidt - * Added bit GPC_ENA_XC (Enable MDI crossover) in HWCFG_MODE. - * Added forced speed settings in SkGmInitPhyMarv(). - * Added settings of full/half duplex capabilities for YUKON Fiber. - * Editorial changes. - * - * Revision 1.75 2002/08/16 15:12:01 rschmidt - * Replaced all if(GIChipId == CHIP_ID_GENESIS) with new entry GIGenesis. - * Added function SkMacHashing() for ADDR-Module. - * Removed functions SkXmClrSrcCheck(), SkXmClrHashAddr() (calls replaced - * with macros). - * Removed functions SkGmGetMuxConfig(). - * Added HWCFG_MODE init for YUKON Fiber. - * Changed initialization of GPHY in SkGmInitPhyMarv(). - * Changed check of parameter in SkXmMacStatistic(). - * Editorial changes. - * - * Revision 1.74 2002/08/12 14:00:17 rschmidt - * Replaced usage of Broadcom PHY Ids with defines. - * Corrected error messages in SkGmMacStatistic(). - * Made SkMacPromiscMode() public for ADDR-Module. - * Editorial changes. - * - * Revision 1.73 2002/08/08 16:26:24 rschmidt - * Improved reset sequence for YUKON in SkGmHardRst() and SkGmInitMac(). - * Replaced XMAC Rx High Watermark init value with SK_XM_RX_HI_WM. - * Editorial changes. - * - * Revision 1.72 2002/07/24 15:11:19 rschmidt - * Fixed wrong placement of parenthesis. - * Editorial changes. - * - * Revision 1.71 2002/07/23 16:05:18 rschmidt - * Added global functions for PHY: SkGePhyRead(), SkGePhyWrite(). - * Fixed Tx Counter Overflow IRQ (Bug ID #10730). - * Editorial changes. - * - * Revision 1.70 2002/07/18 14:27:27 rwahl - * Fixed syntax error. - * - * Revision 1.69 2002/07/17 17:08:47 rwahl - * Fixed check in SkXmMacStatistic(). - * - * Revision 1.68 2002/07/16 07:35:24 rwahl - * Removed check for cleared mib counter in SkGmResetCounter(). - * - * Revision 1.67 2002/07/15 18:35:56 rwahl - * Added SkXmUpdateStats(), SkGmUpdateStats(), SkXmMacStatistic(), - * SkGmMacStatistic(), SkXmResetCounter(), SkGmResetCounter(), - * SkXmOverflowStatus(), SkGmOverflowStatus(). - * Changes to SkXmIrq() & SkGmIrq(): Combined SIRQ Overflow for both - * RX & TX. - * Changes to SkGmInitMac(): call to SkGmResetCounter(). - * Editorial changes. - * - * Revision 1.66 2002/07/15 15:59:30 rschmidt - * Added PHY Address in SkXmPhyRead(), SkXmPhyWrite(). - * Added MIB Clear Counter in SkGmInitMac(). - * Added Duplex and Flow-Control settings. - * Reset all Multicast filtering Hash reg. in SkGmInitMac(). - * Added new function: SkGmGetMuxConfig(). - * Editorial changes. - * - * Revision 1.65 2002/06/10 09:35:39 rschmidt - * Replaced C++ comments (//). - * Added #define VCPU around VCPUwaitTime. - * Editorial changes. - * - * Revision 1.64 2002/06/05 08:41:10 rschmidt - * Added function for XMAC2: SkXmTimeStamp(). - * Added function for YUKON: SkGmSetRxCmd(). - * Changed SkGmInitMac() resp. SkGmHardRst(). - * Fixed wrong variable in SkXmAutoNegLipaXmac() (debug mode). - * SkXmRxTxEnable() replaced by SkMacRxTxEnable(). - * Editorial changes. - * - * Revision 1.63 2002/04/25 13:04:44 rschmidt - * Changes for handling YUKON. - * Use of #ifdef OTHER_PHY to eliminate code for unused Phy types. - * Macros for XMAC PHY access PHY_READ(), PHY_WRITE() replaced - * by functions SkXmPhyRead(), SkXmPhyWrite(); - * Removed use of PRxCmd to setup XMAC. - * Added define PHY_B_AS_PAUSE_MSK for BCom Pause Res. - * Added setting of XM_RX_DIS_CEXT in SkXmInitMac(). - * Removed status parameter from MAC IRQ handler SkMacIrq(), - * SkXmIrq() and SkGmIrq(). - * SkXmAutoNegLipa...() for ext. Phy replaced by SkMacAutoNegLipaPhy(). - * Added SkMac...() functions to handle both XMAC and GMAC. - * Added functions for YUKON: SkGmHardRst(), SkGmSoftRst(), - * SkGmSetRxTxEn(), SkGmIrq(), SkGmInitMac(), SkGmInitPhyMarv(), - * SkGmAutoNegDoneMarv(), SkGmPhyRead(), SkGmPhyWrite(). - * Changes for V-CPU support. - * Editorial changes. - * - * Revision 1.62 2001/08/06 09:50:14 rschmidt - * Workaround BCOM Errata #1 for the C5 type. - * Editorial changes. - * - * Revision 1.61 2001/02/09 15:40:59 rassmann - * Editorial changes. - * - * Revision 1.60 2001/02/07 15:02:01 cgoos - * Added workaround for Fujitsu switch link down. - * - * Revision 1.59 2001/01/10 09:38:06 cgoos - * Fixed Broadcom C0/A1 Id check for workaround. - * - * Revision 1.58 2000/11/29 11:30:38 cgoos - * Changed DEBUG sections with NW output to xDEBUG - * - * Revision 1.57 2000/11/27 12:40:40 rassmann - * Suppressing preamble after first access to BCom, not before (#10556). - * - * Revision 1.56 2000/11/09 12:32:48 rassmann - * Renamed variables. - * - * Revision 1.55 2000/11/09 11:30:10 rassmann - * WA: Waiting after releasing reset until BCom chip is accessible. - * - * Revision 1.54 2000/10/02 14:10:27 rassmann - * Reading BCOM PHY after releasing reset until it returns a valid value. - * - * Revision 1.53 2000/07/27 12:22:11 gklug - * fix: possible endless loop in XmHardRst. - * - * Revision 1.52 2000/05/22 08:48:31 malthoff - * Fix: #10523 errata valid for all BCOM PHYs. - * - * Revision 1.51 2000/05/17 12:52:18 malthoff - * Fixes BCom link errata (#10523). - * - * Revision 1.50 1999/11/22 13:40:14 cgoos - * Changed license header to GPL. - * - * Revision 1.49 1999/11/22 08:12:13 malthoff - * Add workaround for power consumption feature of BCom C0 chip. - * - * Revision 1.48 1999/11/16 08:39:01 malthoff - * Fix: MDIO preamble suppression is port dependent. - * - * Revision 1.47 1999/08/27 08:55:35 malthoff - * 1000BT: Optimizing MDIO transfer by oppressing MDIO preamble. - * - * Revision 1.46 1999/08/13 11:01:12 malthoff - * Fix for 1000BT: pFlowCtrlMode was not set correctly. - * - * Revision 1.45 1999/08/12 19:18:28 malthoff - * 1000BT Fixes: Do not owerwrite XM_MMU_CMD. - * Do not execute BCOM A1 workaround for B1 chips. - * Fix pause frame setting. - * Always set PHY_B_AC_TX_TST in PHY_BCOM_AUX_CTRL. - * - * Revision 1.44 1999/08/03 15:23:48 cgoos - * Fixed setting of PHY interrupt mask in half duplex mode. - * - * Revision 1.43 1999/08/03 15:22:17 cgoos - * Added some debug output. - * Disabled XMac GP0 interrupt for external PHYs. - * - * Revision 1.42 1999/08/02 08:39:23 malthoff - * BCOM PHY: TX LED: To get the mono flop behaviour it is required - * to set the LED Traffic Mode bit in PHY_BCOM_P_EXT_CTRL. - * - * Revision 1.41 1999/07/30 06:54:31 malthoff - * Add temp. workarounds for the BCOM Phy revision A1. - * - * Revision 1.40 1999/06/01 07:43:26 cgoos - * Changed Link Mode Status in SkXmAutoNegDone... from FULL/HALF to - * AUTOFULL/AUTOHALF. - * - * Revision 1.39 1999/05/19 07:29:51 cgoos - * Changes for 1000Base-T. - * - * Revision 1.38 1999/04/08 14:35:10 malthoff - * Add code for enabling signal detect. Enabling signal detect is disabled. - * - * Revision 1.37 1999/03/12 13:42:54 malthoff - * Add: Jumbo Frame Support. - * Add: Receive modes SK_LENERR_OK_ON/OFF and - * SK_BIG_PK_OK_ON/OFF in SkXmSetRxCmd(). - * - * Revision 1.36 1999/03/08 10:10:55 gklug - * fix: AutoSensing did switch to next mode even if LiPa indicated offline - * - * Revision 1.35 1999/02/22 15:16:41 malthoff - * Remove some compiler warnings. - * - * Revision 1.34 1999/01/22 09:19:59 gklug - * fix: Init DupMode and InitPauseMd are now called in RxTxEnable - * - * Revision 1.33 1998/12/11 15:19:11 gklug - * chg: lipa autoneg stati - * chg: debug messages - * chg: do NOT use spurious XmIrq - * - * Revision 1.32 1998/12/10 11:08:44 malthoff - * bug fix: pAC has been used for IOs in SkXmHardRst(). - * SkXmInitPhy() is also called for the Diag in SkXmInitMac(). - * - * Revision 1.31 1998/12/10 10:39:11 gklug - * fix: do 4 RESETS of the XMAC at the beginning - * fix: dummy read interrupt source register BEFORE initializing the Phy - * add: debug messages - * fix: Linkpartners autoneg capability cannot be shown by TX_PAGE interrupt - * - * Revision 1.30 1998/12/07 12:18:32 gklug - * add: refinement of autosense mode: take into account the autoneg cap of LiPa - * - * Revision 1.29 1998/12/07 07:12:29 gklug - * fix: if page is received the link is down. - * - * Revision 1.28 1998/12/01 10:12:47 gklug - * chg: if spurious IRQ from XMAC encountered, save it - * - * Revision 1.27 1998/11/26 07:33:38 gklug - * add: InitPhy call is now in XmInit function - * - * Revision 1.26 1998/11/18 13:38:24 malthoff - * 'Imsk' is also unused in SkXmAutoNegDone. - * - * Revision 1.25 1998/11/18 13:28:01 malthoff - * Remove unused variable 'Reg' in SkXmAutoNegDone(). - * - * Revision 1.24 1998/11/18 13:18:45 gklug - * add: workaround for xmac errata #1 - * add: detect Link Down also when Link partner requested config - * chg: XMIrq is only used when link is up - * - * Revision 1.23 1998/11/04 07:07:04 cgoos - * Added function SkXmRxTxEnable. - * - * Revision 1.22 1998/10/30 07:35:54 gklug - * fix: serve LinkDown interrupt when link is already down - * - * Revision 1.21 1998/10/29 15:32:03 gklug - * fix: Link Down signaling - * - * Revision 1.20 1998/10/29 11:17:27 gklug - * fix: AutoNegDone bug - * - * Revision 1.19 1998/10/29 10:14:43 malthoff - * Add endainesss comment for reading/writing MAC addresses. - * - * Revision 1.18 1998/10/28 07:48:55 cgoos - * Fix: ASS somtimes signaled although link is up. - * - * Revision 1.17 1998/10/26 07:55:39 malthoff - * Fix in SkXmInitPauseMd(): Pause Mode - * was disabled and not enabled. - * Fix in SkXmAutoNegDone(): Checking Mode bits - * always failed, becaues of some missing braces. - * - * Revision 1.16 1998/10/22 09:46:52 gklug - * fix SysKonnectFileId typo - * - * Revision 1.15 1998/10/21 05:51:37 gklug - * add: para DoLoop to InitPhy function for loopback set-up - * - * Revision 1.14 1998/10/16 10:59:23 malthoff - * Remove Lint warning for dummy reads. - * - * Revision 1.13 1998/10/15 14:01:20 malthoff - * Fix: SkXmAutoNegDone() is (int) but does not return a value. - * - * Revision 1.12 1998/10/14 14:45:04 malthoff - * Remove SKERR_SIRQ_E0xx and SKERR_SIRQ_E0xxMSG by - * SKERR_HWI_Exx and SKERR_HWI_E0xxMSG to be independent - * from the Sirq module. - * - * Revision 1.11 1998/10/14 13:59:01 gklug - * add: InitPhy function - * - * Revision 1.10 1998/10/14 11:20:57 malthoff - * Make SkXmAutoNegDone() public, because it's - * used in diagnostics, too. - * The Link Up event to the RLMT is issued in SkXmIrq(). - * SkXmIrq() is not available in diagnostics. - * Use PHY_READ when reading PHY registers. - * - * Revision 1.9 1998/10/14 05:50:10 cgoos - * Added definition for Para. - * - * Revision 1.8 1998/10/14 05:41:28 gklug - * add: Xmac IRQ - * add: auto-negotiation done function - * - * Revision 1.7 1998/10/09 06:55:20 malthoff - * The configuration of the XMACs Tx Request Threshold - * depends from the drivers port usage now. The port - * usage is configured in GIPortUsage. - * - * Revision 1.6 1998/10/05 07:48:00 malthoff - * minor changes - * - * Revision 1.5 1998/10/01 07:03:54 gklug - * add: dummy function for XMAC ISR - * - * Revision 1.4 1998/09/30 12:37:44 malthoff - * Add SkXmSetRxCmd() and related code. - * - * Revision 1.3 1998/09/28 13:26:40 malthoff - * Add SkXmInitMac(), SkXmInitDupMd(), and SkXmInitPauseMd() - * - * Revision 1.2 1998/09/16 14:34:21 malthoff - * Add SkXmClrExactAddr(), SkXmClrSrcCheck(), - * SkXmClrHashAddr(), SkXmFlushTxFifo(), - * SkXmFlushRxFifo(), and SkXmHardRst(). - * Finish Coding of SkXmSoftRst(). - * The sources may be compiled now. - * - * Revision 1.1 1998/09/04 10:05:56 malthoff - * Created. - * * ******************************************************************************/ diff -Nru a/drivers/net/sundance.c b/drivers/net/sundance.c --- a/drivers/net/sundance.c Wed Feb 4 16:51:36 2004 +++ b/drivers/net/sundance.c Wed Feb 4 16:51:36 2004 @@ -986,8 +986,8 @@ { int i; for (i=0; itx_ring_dma + i*sizeof(*np->tx_ring), + printk(KERN_DEBUG "%02x %08llx %08x %08x(%02x) %08x %08x\n", i, + (unsigned long long)np->tx_ring_dma + i*sizeof(*np->tx_ring), le32_to_cpu(np->tx_ring[i].next_desc), le32_to_cpu(np->tx_ring[i].status), (le32_to_cpu(np->tx_ring[i].status) >> 2) & 0xff, @@ -1136,7 +1136,7 @@ static int reset_tx (struct net_device *dev) { - struct netdev_private *np = (struct netdev_private*) dev->priv; + struct netdev_private *np = dev->priv; long ioaddr = dev->base_addr; struct sk_buff *skb; int i; @@ -1672,8 +1672,8 @@ switch (cmd) { case SIOCDEVPRIVATE: for (i=0; itx_ring_dma + i*sizeof(*np->tx_ring), + printk(KERN_DEBUG "%02x %08llx %08x %08x(%02x) %08x %08x\n", i, + (unsigned long long)np->tx_ring_dma + i*sizeof(*np->tx_ring), le32_to_cpu(np->tx_ring[i].next_desc), le32_to_cpu(np->tx_ring[i].status), (le32_to_cpu(np->tx_ring[i].status) >> 2) diff -Nru a/drivers/net/wan/lmc/lmc_debug.h b/drivers/net/wan/lmc/lmc_debug.h --- a/drivers/net/wan/lmc/lmc_debug.h Wed Feb 4 16:51:33 2004 +++ b/drivers/net/wan/lmc/lmc_debug.h Wed Feb 4 16:51:33 2004 @@ -47,6 +47,6 @@ void lmcConsoleLog(char *type, unsigned char *ucData, int iLen); void lmcEventLog (u_int32_t EventNum, u_int32_t arg2, u_int32_t arg3); -inline void lmc_trace(struct net_device *dev, char *msg); +void lmc_trace(struct net_device *dev, char *msg); #endif diff -Nru a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig --- a/drivers/net/wireless/Kconfig Wed Feb 4 16:51:34 2004 +++ b/drivers/net/wireless/Kconfig Wed Feb 4 16:51:34 2004 @@ -270,8 +270,8 @@ config PCMCIA_ATMEL tristate "Atmel at76c502/at76c504 PCMCIA cards" depends on NET_RADIO && EXPERIMENTAL && PCMCIA - enable FW_LOADER - enable CRC32 + select FW_LOADER + select CRC32 ---help--- A driver for PCMCIA 802.11 wireless cards based on the Atmel fast-vnet chips. This driver supports standard diff -Nru a/drivers/net/yellowfin.c b/drivers/net/yellowfin.c --- a/drivers/net/yellowfin.c Wed Feb 4 16:51:35 2004 +++ b/drivers/net/yellowfin.c Wed Feb 4 16:51:35 2004 @@ -1286,7 +1286,8 @@ #if defined(__i386__) if (yellowfin_debug > 2) { - printk("\n"KERN_DEBUG" Tx ring at %8.8x:\n", yp->tx_ring_dma); + printk("\n"KERN_DEBUG" Tx ring at %8.8llx:\n", + (unsigned long long)yp->tx_ring_dma); for (i = 0; i < TX_RING_SIZE*2; i++) printk(" %c #%d desc. %8.8x %8.8x %8.8x %8.8x.\n", inl(ioaddr + TxPtr) == (long)&yp->tx_ring[i] ? '>' : ' ', @@ -1298,7 +1299,8 @@ i, yp->tx_status[i].tx_cnt, yp->tx_status[i].tx_errs, yp->tx_status[i].total_tx_cnt, yp->tx_status[i].paused); - printk("\n"KERN_DEBUG " Rx ring %8.8x:\n", yp->rx_ring_dma); + printk("\n"KERN_DEBUG " Rx ring %8.8llx:\n", + (unsigned long long)yp->rx_ring_dma); for (i = 0; i < RX_RING_SIZE; i++) { printk(KERN_DEBUG " %c #%d desc. %8.8x %8.8x %8.8x\n", inl(ioaddr + RxPtr) == (long)&yp->rx_ring[i] ? '>' : ' ', diff -Nru a/drivers/oprofile/cpu_buffer.c b/drivers/oprofile/cpu_buffer.c --- a/drivers/oprofile/cpu_buffer.c Wed Feb 4 16:51:33 2004 +++ b/drivers/oprofile/cpu_buffer.c Wed Feb 4 16:51:33 2004 @@ -86,9 +86,9 @@ unsigned long tail = b->tail_pos; if (tail > head) - return tail - head; + return (tail - head) - 1; - return tail + (b->buffer_size - head); + return tail + (b->buffer_size - head) - 1; } diff -Nru a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c --- a/drivers/parport/parport_pc.c Wed Feb 4 16:51:37 2004 +++ b/drivers/parport/parport_pc.c Wed Feb 4 16:51:37 2004 @@ -270,95 +270,6 @@ return IRQ_HANDLED; } -void parport_pc_write_data(struct parport *p, unsigned char d) -{ - outb (d, DATA (p)); -} - -unsigned char parport_pc_read_data(struct parport *p) -{ - return inb (DATA (p)); -} - -void parport_pc_write_control(struct parport *p, unsigned char d) -{ - const unsigned char wm = (PARPORT_CONTROL_STROBE | - PARPORT_CONTROL_AUTOFD | - PARPORT_CONTROL_INIT | - PARPORT_CONTROL_SELECT); - - /* Take this out when drivers have adapted to the newer interface. */ - if (d & 0x20) { - printk (KERN_DEBUG "%s (%s): use data_reverse for this!\n", - p->name, p->cad->name); - parport_pc_data_reverse (p); - } - - __parport_pc_frob_control (p, wm, d & wm); -} - -unsigned char parport_pc_read_control(struct parport *p) -{ - const unsigned char wm = (PARPORT_CONTROL_STROBE | - PARPORT_CONTROL_AUTOFD | - PARPORT_CONTROL_INIT | - PARPORT_CONTROL_SELECT); - const struct parport_pc_private *priv = p->physport->private_data; - return priv->ctr & wm; /* Use soft copy */ -} - -unsigned char parport_pc_frob_control (struct parport *p, unsigned char mask, - unsigned char val) -{ - const unsigned char wm = (PARPORT_CONTROL_STROBE | - PARPORT_CONTROL_AUTOFD | - PARPORT_CONTROL_INIT | - PARPORT_CONTROL_SELECT); - - /* Take this out when drivers have adapted to the newer interface. */ - if (mask & 0x20) { - printk (KERN_DEBUG "%s (%s): use data_%s for this!\n", - p->name, p->cad->name, - (val & 0x20) ? "reverse" : "forward"); - if (val & 0x20) - parport_pc_data_reverse (p); - else - parport_pc_data_forward (p); - } - - /* Restrict mask and val to control lines. */ - mask &= wm; - val &= wm; - - return __parport_pc_frob_control (p, mask, val); -} - -unsigned char parport_pc_read_status(struct parport *p) -{ - return inb (STATUS (p)); -} - -void parport_pc_disable_irq(struct parport *p) -{ - __parport_pc_frob_control (p, 0x10, 0); -} - -void parport_pc_enable_irq(struct parport *p) -{ - if (p->irq != PARPORT_IRQ_NONE) - __parport_pc_frob_control (p, 0x10, 0x10); -} - -void parport_pc_data_forward (struct parport *p) -{ - __parport_pc_frob_control (p, 0x20, 0); -} - -void parport_pc_data_reverse (struct parport *p) -{ - __parport_pc_frob_control (p, 0x20, 0x20); -} - void parport_pc_init_state(struct pardevice *dev, struct parport_state *s) { s->u.pc.ctr = 0xc; @@ -418,7 +329,8 @@ left -= 16; } else { /* grab single byte from the warp fifo */ - *((char *)buf)++ = inb (EPPDATA (port)); + *((char *)buf) = inb (EPPDATA (port)); + buf++; got++; left--; } @@ -445,7 +357,8 @@ return length; } for (; got < length; got++) { - *((char*)buf)++ = inb (EPPDATA(port)); + *((char*)buf) = inb (EPPDATA(port)); + buf++; if (inb (STATUS (port)) & 0x01) { /* EPP timeout */ clear_epp_timeout (port); @@ -474,7 +387,8 @@ return length; } for (; written < length; written++) { - outb (*((char*)buf)++, EPPDATA(port)); + outb (*((char*)buf), EPPDATA(port)); + buf++; if (inb (STATUS(port)) & 0x01) { clear_epp_timeout (port); break; @@ -498,7 +412,8 @@ return length; } for (; got < length; got++) { - *((char*)buf)++ = inb (EPPADDR (port)); + *((char*)buf) = inb (EPPADDR (port)); + buf++; if (inb (STATUS (port)) & 0x01) { clear_epp_timeout (port); break; @@ -523,7 +438,8 @@ return length; } for (; written < length; written++) { - outb (*((char*)buf)++, EPPADDR (port)); + outb (*((char*)buf), EPPADDR (port)); + buf++; if (inb (STATUS (port)) & 0x01) { clear_epp_timeout (port); break; @@ -1235,6 +1151,8 @@ * ****************************************** */ +/* GCC is not inlining extern inline function later overwriten to non-inline, + so we use outlined_ variants here. */ struct parport_operations parport_pc_ops = { .write_data = parport_pc_write_data, @@ -2686,25 +2604,10 @@ enum parport_pc_pci_cards { - siig_1s1p_10x_550 = last_sio, - siig_1s1p_10x_650, - siig_1s1p_10x_850, - siig_1p_10x, + siig_1p_10x = last_sio, siig_2p_10x, - siig_2s1p_10x_550, - siig_2s1p_10x_650, - siig_2s1p_10x_850, siig_1p_20x, siig_2p_20x, - siig_2p1s_20x_550, - siig_2p1s_20x_650, - siig_2p1s_20x_850, - siig_1s1p_20x_550, - siig_1s1p_20x_650, - siig_1s1p_20x_850, - siig_2s1p_20x_550, - siig_2s1p_20x_650, - siig_2s1p_20x_850, lava_parallel, lava_parallel_dual_a, lava_parallel_dual_b, @@ -2766,25 +2669,10 @@ * is non-zero we couldn't use any of the ports. */ void (*postinit_hook) (struct pci_dev *pdev, int failed); } cards[] __devinitdata = { - /* siig_1s1p_10x_550 */ { 1, { { 3, 4 }, } }, - /* siig_1s1p_10x_650 */ { 1, { { 3, 4 }, } }, - /* siig_1s1p_10x_850 */ { 1, { { 3, 4 }, } }, /* siig_1p_10x */ { 1, { { 2, 3 }, } }, /* siig_2p_10x */ { 2, { { 2, 3 }, { 4, 5 }, } }, - /* siig_2s1p_10x_550 */ { 1, { { 4, 5 }, } }, - /* siig_2s1p_10x_650 */ { 1, { { 4, 5 }, } }, - /* siig_2s1p_10x_850 */ { 1, { { 4, 5 }, } }, /* siig_1p_20x */ { 1, { { 0, 1 }, } }, /* siig_2p_20x */ { 2, { { 0, 1 }, { 2, 3 }, } }, - /* siig_2p1s_20x_550 */ { 2, { { 1, 2 }, { 3, 4 }, } }, - /* siig_2p1s_20x_650 */ { 2, { { 1, 2 }, { 3, 4 }, } }, - /* siig_2p1s_20x_850 */ { 2, { { 1, 2 }, { 3, 4 }, } }, - /* siig_1s1p_20x_550 */ { 1, { { 1, 2 }, } }, - /* siig_1s1p_20x_650 */ { 1, { { 1, 2 }, } }, - /* siig_1s1p_20x_850 */ { 1, { { 1, 2 }, } }, - /* siig_2s1p_20x_550 */ { 1, { { 2, 3 }, } }, - /* siig_2s1p_20x_650 */ { 1, { { 2, 3 }, } }, - /* siig_2s1p_20x_850 */ { 1, { { 2, 3 }, } }, /* lava_parallel */ { 1, { { 0, -1 }, } }, /* lava_parallel_dual_a */ { 1, { { 0, -1 }, } }, /* lava_parallel_dual_b */ { 1, { { 0, -1 }, } }, @@ -2836,44 +2724,14 @@ PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_ite_8872 }, /* PCI cards */ - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_550, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1s1p_10x_550 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_650, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1s1p_10x_650 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_850, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1s1p_10x_850 }, { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_10x, PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1p_10x }, { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_10x, PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p_10x }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_550, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_10x_550 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_650, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_10x_650 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_850, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_10x_850 }, { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_20x, PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1p_20x }, { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_20x, PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p_20x }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_550, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p1s_20x_550 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_650, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p1s_20x_650 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_850, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p1s_20x_850 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_550, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x_550 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_650, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1s1p_20x_650 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_850, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1s1p_20x_850 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_550, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x_550 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_650, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x_650 }, - { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_850, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x_850 }, { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PARALLEL, PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel }, { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_A, diff -Nru a/drivers/pci/probe.c b/drivers/pci/probe.c --- a/drivers/pci/probe.c Wed Feb 4 16:51:36 2004 +++ b/drivers/pci/probe.c Wed Feb 4 16:51:36 2004 @@ -214,7 +214,7 @@ limit |= (io_limit_hi << 16); } - if (base && base <= limit) { + if (base <= limit) { res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO; res->start = base; res->end = limit + 0xfff; @@ -225,7 +225,7 @@ pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo); base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16; limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16; - if (base && base <= limit) { + if (base <= limit) { res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM; res->start = base; res->end = limit + 0xfffff; @@ -251,7 +251,7 @@ } #endif } - if (base && base <= limit) { + if (base <= limit) { res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH; res->start = base; res->end = limit + 0xfffff; @@ -620,6 +620,9 @@ int __devinit pci_scan_slot(struct pci_bus *bus, int devfn) { int func, nr = 0; + int scan_all_fns; + + scan_all_fns = pcibios_scan_all_fns(bus, devfn); for (func = 0; func < 8; func++, devfn++) { struct pci_dev *dev; @@ -640,7 +643,7 @@ } } } else { - if (func == 0) + if (func == 0 && !scan_all_fns) break; } } diff -Nru a/drivers/pcmcia/bulkmem.c b/drivers/pcmcia/bulkmem.c --- a/drivers/pcmcia/bulkmem.c Wed Feb 4 16:51:37 2004 +++ b/drivers/pcmcia/bulkmem.c Wed Feb 4 16:51:37 2004 @@ -298,7 +298,7 @@ { window_handle_t w; int ret = pcmcia_request_window(a1, a2, &w); - (window_handle_t *)a1 = w; + a1 = w; return ret; } break; diff -Nru a/drivers/pnp/pnpbios/core.c b/drivers/pnp/pnpbios/core.c --- a/drivers/pnp/pnpbios/core.c Wed Feb 4 16:51:33 2004 +++ b/drivers/pnp/pnpbios/core.c Wed Feb 4 16:51:33 2004 @@ -435,7 +435,7 @@ */ for (check = (union pnp_bios_install_struct *) __va(0xf0000); check < (union pnp_bios_install_struct *) __va(0xffff0); - ((void *) (check)) += 16) { + check = (void *)check + 16) { if (check->fields.signature != PNP_SIGNATURE) continue; printk(KERN_INFO "PnPBIOS: Found PnP BIOS installation structure at 0x%p\n", check); diff -Nru a/drivers/scsi/53c700.h b/drivers/scsi/53c700.h --- a/drivers/scsi/53c700.h Wed Feb 4 16:51:33 2004 +++ b/drivers/scsi/53c700.h Wed Feb 4 16:51:33 2004 @@ -103,8 +103,8 @@ static inline void NCR_700_set_SXFER(Scsi_Device *SDp, __u8 sxfer) { - ((unsigned long)SDp->hostdata) &= 0xffffff00; - ((unsigned long)SDp->hostdata) |= sxfer & 0xff; + SDp->hostdata = (void *)(((long)SDp->hostdata & 0xffffff00) | + (sxfer & 0xff)); } static inline __u8 NCR_700_get_SXFER(Scsi_Device *SDp) { @@ -113,8 +113,11 @@ static inline void NCR_700_set_depth(Scsi_Device *SDp, __u8 depth) { - ((unsigned long)SDp->hostdata) &= 0xffff00ff; - ((unsigned long)SDp->hostdata) |= (0xff00 & (depth << 8)); + long l = (long)SDp->hostdata; + + l &= 0xffff00ff; + l |= 0xff00 & (depth << 8); + SDp->hostdata = (void *)l; } static inline __u8 NCR_700_get_depth(Scsi_Device *SDp) @@ -134,12 +137,12 @@ static inline void NCR_700_set_flag(Scsi_Device *SDp, __u32 flag) { - ((unsigned long)SDp->hostdata) |= (flag & 0xffff0000); + SDp->hostdata = (void *)((long)SDp->hostdata | (flag & 0xffff0000)); } static inline void NCR_700_clear_flag(Scsi_Device *SDp, __u32 flag) { - ((unsigned long)SDp->hostdata) &= ~(flag & 0xffff0000); + SDp->hostdata = (void *)((long)SDp->hostdata & ~(flag & 0xffff0000)); } struct NCR_700_command_slot { diff -Nru a/drivers/scsi/AM53C974.c b/drivers/scsi/AM53C974.c --- a/drivers/scsi/AM53C974.c Wed Feb 4 16:51:35 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,2463 +0,0 @@ -#error Please convert me to Documentation/DMA-mapping.txt - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "scsi.h" -#include "hosts.h" -#include "AM53C974.h" - -/* AM53/79C974 (PCscsi) driver release 0.5 - - * The architecture and much of the code of this device - * driver was originally developed by Drew Eckhardt for - * the NCR5380. The following copyrights apply: - * For the architecture and all pieces of code which can also be found - * in the NCR5380 device driver: - * Copyright 1993, Drew Eckhardt - * Visionary Computing - * (Unix and Linux consulting and custom programming) - * drew@colorado.edu - * +1 (303) 666-5836 - * - * The AM53C974_nobios_detect code was originally developed by - * Robin Cutshaw (robin@xfree86.org) and is used here in a - * slightly modified form. - * - * PCI detection rewritten by Martin Mares - * - * For the remaining code: - * Copyright 1994, D. Frieauff - * EMail: fri@rsx42sun0.dofn.de - * Phone: x49-7545-8-2256 , x49-7541-42305 - */ - -/* - * $Log: AM53C974.c,v $ - */ - -#ifdef AM53C974_DEBUG -#define DEB(x) x -#ifdef AM53C974_DEBUG_KEYWAIT -#define KEYWAIT() AM53C974_keywait() -#else -#define KEYWAIT() -#endif -#ifdef AM53C974_DEBUG_INIT -#define DEB_INIT(x) x -#else -#define DEB_INIT(x) -#endif -#ifdef AM53C974_DEBUG_MSG -#define DEB_MSG(x) x -#else -#define DEB_MSG(x) -#endif -#ifdef AM53C974_DEB_RESEL -#define DEB_RESEL(x) x -#else -#define DEB_RESEL(x) -#endif -#ifdef AM53C974_DEBUG_QUEUE -#define DEB_QUEUE(x) x -#define LIST(x,y) {printk("LINE:%d Adding %p to %p\n", __LINE__, (void*)(x), (void*)(y)); if ((x)==(y)) udelay(5); } -#define REMOVE(w,x,y,z) {printk("LINE:%d Removing: %p->%p %p->%p \n", __LINE__, (void*)(w), (void*)(x), (void*)(y), (void*)(z)); if ((x)==(y)) udelay(5); } -#else -#define DEB_QUEUE(x) -#define LIST(x,y) -#define REMOVE(w,x,y,z) -#endif -#ifdef AM53C974_DEBUG_INFO -#define DEB_INFO(x) x -#else -#define DEB_INFO(x) -#endif -#ifdef AM53C974_DEBUG_LINKED -#define DEB_LINKED(x) x -#else -#define DEB_LINKED(x) -#endif -#ifdef AM53C974_DEBUG_INTR -#define DEB_INTR(x) x -#else -#define DEB_INTR(x) -#endif -#else -#define DEB_INIT(x) -#define DEB(x) -#define DEB_QUEUE(x) -#define LIST(x,y) -#define REMOVE(w,x,y,z) -#define DEB_INFO(x) -#define DEB_LINKED(x) -#define DEB_INTR(x) -#define DEB_MSG(x) -#define DEB_RESEL(x) -#define KEYWAIT() -#endif -#ifdef AM53C974_DEBUG_ABORT -#define DEB_ABORT(x) x -#else -#define DEB_ABORT(x) -#endif - -#ifdef VERBOSE_AM53C974_DEBUG -#define VDEB(x) x -#else -#define VDEB(x) -#endif - -#define INSIDE(x,l,h) ( ((x) >= (l)) && ((x) <= (h)) ) - - -#include - -/*************************************************************************************** -* Default setting of the controller's SCSI id. Edit and uncomment this only if your * -* BIOS does not correctly initialize the controller's SCSI id. * -* If you don't get a warning during boot, it is correctly initialized. * -****************************************************************************************/ -/* #define AM53C974_SCSI_ID 7 */ - -/*************************************************************************************** -* Default settings for sync. negotiation enable, transfer rate and sync. offset. * -* These settings can be replaced by LILO overrides (append) with the following syntax: * -* AM53C974=host-scsi-id, target-scsi-id, max-rate, max-offset * -* Sync. negotiation is disabled by default and will be enabled for those targets which * -* are specified in the LILO override * -****************************************************************************************/ -#define DEFAULT_SYNC_NEGOTIATION_ENABLED 0 /* 0 or 1 */ -#define DEFAULT_RATE 5 /* MHz, min: 3; max: 10 */ -#define DEFAULT_SYNC_OFFSET 0 /* bytes, min: 0; max: 15; use 0 for async. mode */ - -/*************************************************************************************** -* If defined, don't allow targets to disconnect during commands. This will reduce * -* performance, but may be worthwhile if you suspect the driver of corrupting data when * -* a disconnect happens. * -***************************************************************************************/ -#define AM53C974_PROHIBIT_DISCONNECT - -/* --------------------- don't edit below here --------------------- */ - -#define AM53C974_DRIVER_REVISION_MAJOR 0 -#define AM53C974_DRIVER_REVISION_MINOR 5 -#define SEPARATOR_LINE \ -"--------------------------------------------------------------------------\n" - -/* debug control */ -/* #define AM53C974_DEBUG */ -/* #define AM53C974_DEBUG_MSG */ -/* #define AM53C974_DEBUG_KEYWAIT */ -/* #define AM53C974_DEBUG_INIT */ -/* #define AM53C974_DEBUG_QUEUE */ -/* #define AM53C974_DEBUG_INFO */ -/* #define AM53C974_DEBUG_LINKED */ -/* #define VERBOSE_AM53C974_DEBUG */ -/* #define AM53C974_DEBUG_INTR */ -/* #define AM53C974_DEB_RESEL */ -#define AM53C974_DEBUG_ABORT -/* #define AM53C974_OPTION_DEBUG_PROBE_ONLY */ - -/* special options/constants */ -#define DEF_CLK 40 /* chip clock freq. in MHz */ -#define MIN_PERIOD 4 /* for negotiation: min. number of clocks per cycle */ -#define MAX_PERIOD 13 /* for negotiation: max. number of clocks per cycle */ -#define MAX_OFFSET 15 /* for negotiation: max. offset (0=async) */ - -#define DEF_SCSI_TIMEOUT 245 /* STIMREG value, 40 Mhz */ -#define DEF_STP 8 /* STPREG value assuming 5.0 MB/sec, FASTCLK, FASTSCSI */ -#define DEF_SOF_RAD 0 /* REQ/ACK deassertion delay */ -#define DEF_SOF_RAA 0 /* REQ/ACK assertion delay */ -#define DEF_ETM 0 /* CNTLREG1, ext. timing mode */ -#define DEF_PERE 1 /* CNTLREG1, parity error reporting */ -#define DEF_CLKF 0 /* CLKFREG, 0=40 Mhz */ -#define DEF_ENF 1 /* CNTLREG2, enable features */ -#define DEF_ADIDCHK 0 /* CNTLREG3, additional ID check */ -#define DEF_FASTSCSI 1 /* CNTLREG3, fast SCSI */ -#define DEF_FASTCLK 1 /* CNTLREG3, fast clocking, 5 MB/sec at 40MHz chip clk */ -#define DEF_GLITCH 1 /* CNTLREG4, glitch eater, 0=12ns, 1=35ns, 2=25ns, 3=off */ -#define DEF_PWD 0 /* CNTLREG4, reduced power feature */ -#define DEF_RAE 0 /* CNTLREG4, RAE active negation on REQ, ACK only */ -#define DEF_RADE 1 /* 1CNTLREG4, active negation on REQ, ACK and data */ - -/*** SCSI block ***/ -#define CTCLREG 0x00 /* r current transf. count, low byte */ -#define CTCMREG 0x04 /* r current transf. count, middle byte */ -#define CTCHREG 0x38 /* r current transf. count, high byte */ -#define STCLREG 0x00 /* w start transf. count, low byte */ -#define STCMREG 0x04 /* w start transf. count, middle byte */ -#define STCHREG 0x38 /* w start transf. count, high byte */ -#define FFREG 0x08 /* rw SCSI FIFO reg. */ -#define STIMREG 0x14 /* w SCSI timeout reg. */ - -#define SDIDREG 0x10 /* w SCSI destination ID reg. */ -#define SDIREG_MASK 0x07 /* mask */ - -#define STPREG 0x18 /* w synchronous transf. period reg. */ -#define STPREG_STP 0x1F /* synchr. transfer period */ - -#define CLKFREG 0x24 /* w clock factor reg. */ -#define CLKFREG_MASK 0x07 /* mask */ - -#define CMDREG 0x0C /* rw SCSI command reg. */ -#define CMDREG_DMA 0x80 /* set DMA mode (set together with opcodes below) */ -#define CMDREG_IT 0x10 /* information transfer */ -#define CMDREG_ICCS 0x11 /* initiator command complete steps */ -#define CMDREG_MA 0x12 /* message accepted */ -#define CMDREG_TPB 0x98 /* transfer pad bytes, DMA mode only */ -#define CMDREG_SATN 0x1A /* set ATN */ -#define CMDREG_RATN 0x1B /* reset ATN */ -#define CMDREG_SOAS 0x41 /* select without ATN steps */ -#define CMDREG_SAS 0x42 /* select with ATN steps (1 msg byte) */ -#define CMDREG_SASS 0x43 /* select with ATN and stop steps */ -#define CMDREG_ESR 0x44 /* enable selection/reselection */ -#define CMDREG_DSR 0x45 /* disable selection/reselection */ -#define CMDREG_SA3S 0x46 /* select with ATN 3 steps (3 msg bytes) */ -#define CMDREG_NOP 0x00 /* no operation */ -#define CMDREG_CFIFO 0x01 /* clear FIFO */ -#define CMDREG_RDEV 0x02 /* reset device */ -#define CMDREG_RBUS 0x03 /* reset SCSI bus */ - -#define STATREG 0x10 /* r SCSI status reg. */ -#define STATREG_INT 0x80 /* SCSI interrupt condition detected */ -#define STATREG_IOE 0x40 /* SCSI illegal operation error detected */ -#define STATREG_PE 0x20 /* SCSI parity error detected */ -#define STATREG_CTZ 0x10 /* CTC reg decremented to zero */ -#define STATREG_MSG 0x04 /* SCSI MSG phase (latched?) */ -#define STATREG_CD 0x02 /* SCSI C/D phase (latched?) */ -#define STATREG_IO 0x01 /* SCSI I/O phase (latched?) */ -#define STATREG_PHASE 0x07 /* SCSI phase mask */ - -#define INSTREG 0x14 /* r interrupt status reg. */ -#define INSTREG_SRST 0x80 /* SCSI reset detected */ -#define INSTREG_ICMD 0x40 /* SCSI invalid command detected */ -#define INSTREG_DIS 0x20 /* target disconnected or sel/resel timeout */ -#define INSTREG_SR 0x10 /* device on bus has service request */ -#define INSTREG_SO 0x08 /* successful operation */ -#define INSTREG_RESEL 0x04 /* device reselected as initiator */ - -#define ISREG 0x18 /* r internal state reg. */ -#define ISREG_SOF 0x08 /* synchronous offset flag (act. low) */ -#define ISREG_IS 0x07 /* status of intermediate op. */ -#define ISREG_OK_NO_STOP 0x04 /* selection successful */ -#define ISREG_OK_STOP 0x01 /* selection successful */ - -#define CFIREG 0x1C /* r current FIFO/internal state reg. */ -#define CFIREG_IS 0xE0 /* status of intermediate op. */ -#define CFIREG_CF 0x1F /* number of bytes in SCSI FIFO */ - -#define SOFREG 0x1C /* w synchr. offset reg. */ -#define SOFREG_RAD 0xC0 /* REQ/ACK deassertion delay (sync.) */ -#define SOFREG_RAA 0x30 /* REQ/ACK assertion delay (sync.) */ -#define SOFREG_SO 0x0F /* synch. offset (sync.) */ - -#define CNTLREG1 0x20 /* rw control register one */ -#define CNTLREG1_ETM 0x80 /* set extended timing mode */ -#define CNTLREG1_DISR 0x40 /* disable interrupt on SCSI reset */ -#define CNTLREG1_PERE 0x10 /* enable parity error reporting */ -#define CNTLREG1_SID 0x07 /* host adapter SCSI ID */ - -#define CNTLREG2 0x2C /* rw control register two */ -#define CNTLREG2_ENF 0x40 /* enable features */ - -#define CNTLREG3 0x30 /* rw control register three */ -#define CNTLREG3_ADIDCHK 0x80 /* additional ID check */ -#define CNTLREG3_FASTSCSI 0x10 /* fast SCSI */ -#define CNTLREG3_FASTCLK 0x08 /* fast SCSI clocking */ - -#define CNTLREG4 0x34 /* rw control register four */ -#define CNTLREG4_GLITCH 0xC0 /* glitch eater */ -#define CNTLREG4_PWD 0x20 /* reduced power feature */ -#define CNTLREG4_RAE 0x08 /* write only, active negot. ctrl. */ -#define CNTLREG4_RADE 0x04 /* active negot. ctrl. */ -#define CNTLREG4_RES 0x10 /* reserved bit, must be 1 */ - -/*** DMA block ***/ -#define DMACMD 0x40 /* rw command */ -#define DMACMD_DIR 0x80 /* transfer direction (1=read from device) */ -#define DMACMD_INTE_D 0x40 /* DMA transfer interrupt enable */ -#define DMACMD_INTE_P 0x20 /* page transfer interrupt enable */ -#define DMACMD_MDL 0x10 /* map to memory descriptor list */ -#define DMACMD_DIAG 0x04 /* diagnostics, set to 0 */ -#define DMACMD_IDLE 0x00 /* idle cmd */ -#define DMACMD_BLAST 0x01 /* flush FIFO to memory */ -#define DMACMD_ABORT 0x02 /* terminate DMA */ -#define DMACMD_START 0x03 /* start DMA */ - -#define DMASTATUS 0x54 /* r status register */ -#define DMASTATUS_BCMPLT 0x20 /* BLAST complete */ -#define DMASTATUS_SCSIINT 0x10 /* SCSI interrupt pending */ -#define DMASTATUS_DONE 0x08 /* DMA transfer terminated */ -#define DMASTATUS_ABORT 0x04 /* DMA transfer aborted */ -#define DMASTATUS_ERROR 0x02 /* DMA transfer error */ -#define DMASTATUS_PWDN 0x02 /* power down indicator */ - -#define DMASTC 0x44 /* rw starting transfer count */ -#define DMASPA 0x48 /* rw starting physical address */ -#define DMAWBC 0x4C /* r working byte counter */ -#define DMAWAC 0x50 /* r working address counter */ -#define DMASMDLA 0x58 /* rw starting MDL address */ -#define DMAWMAC 0x5C /* r working MDL counter */ - -/*** SCSI phases ***/ -#define PHASE_MSGIN 0x07 -#define PHASE_MSGOUT 0x06 -#define PHASE_RES_1 0x05 -#define PHASE_RES_0 0x04 -#define PHASE_STATIN 0x03 -#define PHASE_CMDOUT 0x02 -#define PHASE_DATAIN 0x01 -#define PHASE_DATAOUT 0x00 - - -#define AM53C974_local_declare() unsigned long io_port -#define AM53C974_setio(instance) io_port = instance->io_port -#define AM53C974_read_8(addr) inb(io_port + (addr)) -#define AM53C974_write_8(addr,x) outb((x), io_port + (addr)) -#define AM53C974_read_16(addr) inw(io_port + (addr)) -#define AM53C974_write_16(addr,x) outw((x), io_port + (addr)) -#define AM53C974_read_32(addr) inl(io_port + (addr)) -#define AM53C974_write_32(addr,x) outl((x), io_port + (addr)) - -#define AM53C974_poll_int() { do { statreg = AM53C974_read_8(STATREG); } \ - while (!(statreg & STATREG_INT)) ; \ - AM53C974_read_8(INSTREG) ; } /* clear int */ -#define AM53C974_cfifo() (AM53C974_read_8(CFIREG) & CFIREG_CF) - -/* These are "special" values for the tag parameter passed to AM53C974_select. */ -#define TAG_NEXT -1 /* Use next free tag */ -#define TAG_NONE -2 /* Establish I_T_L nexus instead of I_T_L_Q - * even on SCSI-II devices */ - -/************ LILO overrides *************/ -typedef struct _override_t { - int host_scsi_id; /* SCSI id of the bus controller */ - int target_scsi_id; /* SCSI id of target */ - int max_rate; /* max. transfer rate */ - int max_offset; /* max. sync. offset, 0 = asynchronous */ -} override_t; - - -#ifdef AM53C974_DEBUG -static void AM53C974_print_phase(struct Scsi_Host *instance); -static void AM53C974_print_queues(struct Scsi_Host *instance); -#endif /* AM53C974_DEBUG */ -static void AM53C974_print(struct Scsi_Host *instance); -static void AM53C974_keywait(void); -static __inline__ int AM53C974_pci_detect(Scsi_Host_Template * tpnt); -static int AM53C974_init(Scsi_Host_Template * tpnt, struct pci_dev *pdev); -static void AM53C974_config_after_reset(struct Scsi_Host *instance); -static __inline__ void initialize_SCp(Scsi_Cmnd * cmd); -static __inline__ void run_main(void); -static void AM53C974_main(void); -static void AM53C974_intr(int irq, void *dev_id, struct pt_regs *regs); -static void do_AM53C974_intr(int irq, void *dev_id, struct pt_regs *regs); -static void AM53C974_intr_disconnect(struct Scsi_Host *instance); -static int AM53C974_sync_neg(struct Scsi_Host *instance, int target, unsigned char *msg); -static __inline__ void AM53C974_set_async(struct Scsi_Host *instance, int target); -static __inline__ void AM53C974_set_sync(struct Scsi_Host *instance, int target); -static void AM53C974_information_transfer(struct Scsi_Host *instance, - unsigned char statreg, unsigned char isreg, - unsigned char instreg, unsigned char cfifo, - unsigned char dmastatus); -static int AM53C974_message(struct Scsi_Host *instance, Scsi_Cmnd * cmd, unsigned char msg); -static void AM53C974_select(struct Scsi_Host *instance, Scsi_Cmnd * cmd, int tag); -static void AM53C974_intr_reselect(struct Scsi_Host *instance, unsigned char statreg); -static __inline__ void AM53C974_transfer_dma(struct Scsi_Host *instance, short dir, - unsigned long length, char *data); -static void AM53C974_dma_blast(struct Scsi_Host *instance, unsigned char dmastatus, - unsigned char statreg); -static void AM53C974_intr_bus_reset(struct Scsi_Host *instance); - -static struct Scsi_Host *first_instance; -static Scsi_Host_Template *the_template; -static struct Scsi_Host *first_host; /* Head of list of AMD boards */ -static volatile int main_running; -static int commandline_current; -override_t overrides[7] = -{ - {-1, 0, 0, 0},}; /* LILO overrides */ - -#ifdef AM53C974_DEBUG -static int deb_stop = 1; - -static struct { - unsigned char value; - char *name; -} phases[] = { - - { - PHASE_DATAOUT, "DATAOUT" - }, { - PHASE_DATAIN, "DATAIN" - }, { - PHASE_CMDOUT, "CMDOUT" - }, - { - PHASE_STATIN, "STATIN" - }, { - PHASE_MSGOUT, "MSGOUT" - }, { - PHASE_MSGIN, "MSGIN" - }, - { - PHASE_RES_0, "RESERVED 0" - }, { - PHASE_RES_1, "RESERVED 1" - } -}; - -/************************************************************************** - * Function : void AM53C974_print_phase(struct Scsi_Host *instance) - * - * Purpose : print the current SCSI phase for debugging purposes - * - * Input : instance - which AM53C974 - **************************************************************************/ -static void AM53C974_print_phase(struct Scsi_Host *instance) -{ - AM53C974_local_declare(); - unsigned char statreg, latched; - int i; - AM53C974_setio(instance); - - latched = (AM53C974_read_8(CNTLREG2)) & CNTLREG2_ENF; - statreg = AM53C974_read_8(STATREG); - for (i = 0; (phases[i].value != PHASE_RES_1) && - (phases[i].value != (statreg & STATREG_PHASE)); ++i); - if (latched) - printk("scsi%d : phase %s, latched at end of last command\n", instance->host_no, phases[i].name); - else - printk("scsi%d : phase %s, real time\n", instance->host_no, phases[i].name); -} - -/************************************************************************** - * Function : void AM53C974_print_queues(struct Scsi_Host *instance) - * - * Purpose : print commands in the various queues - * - * Inputs : instance - which AM53C974 - **************************************************************************/ -static void AM53C974_print_queues(struct Scsi_Host *instance) -{ - unsigned long flags; - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - Scsi_Cmnd *ptr; - - printk("AM53C974: coroutine is%s running.\n", main_running ? "" : "n't"); - - save_flags(flags); - cli(); - - if (!hostdata->connected) { - printk("scsi%d: no currently connected command\n", instance->host_no); - } else { - print_Scsi_Cmnd((Scsi_Cmnd *) hostdata->connected); - } - if (!hostdata->sel_cmd) { - printk("scsi%d: no currently arbitrating command\n", instance->host_no); - } else { - print_Scsi_Cmnd((Scsi_Cmnd *) hostdata->sel_cmd); - } - - printk("scsi%d: issue_queue ", instance->host_no); - if (!hostdata->issue_queue) - printk("empty\n"); - else { - printk(":\n"); - for (ptr = (Scsi_Cmnd *) hostdata->issue_queue; ptr; ptr = (Scsi_Cmnd *) ptr->host_scribble) - print_Scsi_Cmnd(ptr); - } - - printk("scsi%d: disconnected_queue ", instance->host_no); - if (!hostdata->disconnected_queue) - printk("empty\n"); - else { - printk(":\n"); - for (ptr = (Scsi_Cmnd *) hostdata->disconnected_queue; ptr; ptr = (Scsi_Cmnd *) ptr->host_scribble) - print_Scsi_Cmnd(ptr); - } - - restore_flags(flags); -} - -#endif /* AM53C974_DEBUG */ - -/************************************************************************** - * Function : void AM53C974_print(struct Scsi_Host *instance) - * - * Purpose : dump the chip registers for debugging purposes - * - * Input : instance - which AM53C974 - **************************************************************************/ -static void AM53C974_print(struct Scsi_Host *instance) -{ - AM53C974_local_declare(); - unsigned long flags; - unsigned long ctcreg, dmastc, dmaspa, dmawbc, dmawac; - unsigned char cmdreg, statreg, isreg, cfireg, cntlreg[4], dmacmd, - dmastatus; - AM53C974_setio(instance); - - save_flags(flags); - cli(); - ctcreg = AM53C974_read_8(CTCHREG) << 16; - ctcreg |= AM53C974_read_8(CTCMREG) << 8; - ctcreg |= AM53C974_read_8(CTCLREG); - cmdreg = AM53C974_read_8(CMDREG); - statreg = AM53C974_read_8(STATREG); - isreg = AM53C974_read_8(ISREG); - cfireg = AM53C974_read_8(CFIREG); - cntlreg[0] = AM53C974_read_8(CNTLREG1); - cntlreg[1] = AM53C974_read_8(CNTLREG2); - cntlreg[2] = AM53C974_read_8(CNTLREG3); - cntlreg[3] = AM53C974_read_8(CNTLREG4); - dmacmd = AM53C974_read_8(DMACMD); - dmastc = AM53C974_read_32(DMASTC); - dmaspa = AM53C974_read_32(DMASPA); - dmawbc = AM53C974_read_32(DMAWBC); - dmawac = AM53C974_read_32(DMAWAC); - dmastatus = AM53C974_read_8(DMASTATUS); - restore_flags(flags); - - printk("AM53C974 register dump:\n"); - printk("IO base: 0x%04lx; CTCREG: 0x%04lx; CMDREG: 0x%02x; STATREG: 0x%02x; ISREG: 0x%02x\n", - io_port, ctcreg, cmdreg, statreg, isreg); - printk("CFIREG: 0x%02x; CNTLREG1-4: 0x%02x; 0x%02x; 0x%02x; 0x%02x\n", - cfireg, cntlreg[0], cntlreg[1], cntlreg[2], cntlreg[3]); - printk("DMACMD: 0x%02x; DMASTC: 0x%04lx; DMASPA: 0x%04lx\n", dmacmd, dmastc, dmaspa); - printk("DMAWBC: 0x%04lx; DMAWAC: 0x%04lx; DMASTATUS: 0x%02x\n", dmawbc, dmawac, dmastatus); - printk("---------------------------------------------------------\n"); -} - -/************************************************************************** -* Function : void AM53C974_keywait(void) -* -* Purpose : wait until a key is pressed, if it was the 'r' key leave singlestep mode; -* this function is used for debugging only -* -* Input : none -**************************************************************************/ -static void AM53C974_keywait(void) -{ - unsigned long flags; -#ifdef AM53C974_DEBUG - int key; - - if (!deb_stop) - return; -#endif - - save_flags(flags); - cli(); - while ((inb_p(0x64) & 0x01) != 0x01); -#ifdef AM53C974_DEBUG - key = inb(0x60); - if (key == 0x93) - deb_stop = 0; /* don't stop if 'r' was pressed */ -#endif - restore_flags(flags); -} - -#ifndef MODULE -/************************************************************************** -* Function : AM53C974_setup(char *str) -* -* Purpose : LILO command line initialization of the overrides array, -* -* Input : str - parameter string. -* -* Returns : 1. -* -* NOTE : this function needs to be declared as an external function -* in init/main.c and included there in the bootsetups list -***************************************************************************/ -static int AM53C974_setup(char *str) -{ - int ints[5]; - - get_options(str, ARRAY_SIZE(ints), ints); - - if (ints[0] < 4) - printk("AM53C974_setup: wrong number of parameters;\n correct syntax is: AM53C974=host-scsi-id, target-scsi-id, max-rate, max-offset\n"); - else { - if (commandline_current < (sizeof(overrides) / sizeof(override_t))) { - if ((ints[1] < 0) || (ints[1] > 7) || - (ints[2] < 0) || (ints[2] > 7) || - (ints[1] == ints[2]) || - (ints[3] < (DEF_CLK / MAX_PERIOD)) || (ints[3] > (DEF_CLK / MIN_PERIOD)) || - (ints[4] < 0) || (ints[4] > MAX_OFFSET)) - printk("AM53C974_setup: invalid parameter\n"); - else { - overrides[commandline_current].host_scsi_id = ints[1]; - overrides[commandline_current].target_scsi_id = ints[2]; - overrides[commandline_current].max_rate = ints[3]; - overrides[commandline_current].max_offset = ints[4]; - commandline_current++; - } - } else - printk("AM53C974_setup: too many overrides\n"); - } - - return 1; -} -__setup("AM53C974=", AM53C974_setup); - -#endif /* !MODULE */ - -/************************************************************************** -* Function : int AM53C974_pci_detect(Scsi_Host_Template *tpnt) -* -* Purpose : detects and initializes AM53C974 SCSI chips with PCI Bios -* -* Inputs : tpnt - host template -* -* Returns : number of host adapters detected -**************************************************************************/ -static int __init AM53C974_pci_detect(Scsi_Host_Template * tpnt) -{ - int count = 0; /* number of boards detected */ - struct pci_dev *pdev = NULL; - unsigned short command; - - while ((pdev = pci_find_device(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_SCSI, pdev))) { - if (pci_enable_device(pdev)) - continue; - pci_read_config_word(pdev, PCI_COMMAND, &command); - - /* check whether device is I/O mapped -- should be */ - if (!(command & PCI_COMMAND_IO)) - continue; - - pci_set_master (pdev); - - /* everything seems OK now, so initialize */ - if (AM53C974_init(tpnt, pdev)) - count++; - } - return (count); -} - -/************************************************************************** -* Function : int AM53C974_init(Scsi_Host_Template *tpnt, struct pci_dev *pdev) -* -* Purpose : initializes instance and corresponding AM53/79C974 chip, -* -* Inputs : tpnt - template, pci_config - PCI configuration, -* -* Returns : 1 on success, 0 on failure. -* -* NOTE: If no override for the controller's SCSI id is given and AM53C974_SCSI_ID -* is not defined we assume that the SCSI address of this controller is correctly -* set up by the BIOS (as reflected by contents of register CNTLREG1). -* This is the only BIOS assistance we need. -**************************************************************************/ -static int __init AM53C974_init(Scsi_Host_Template * tpnt, struct pci_dev *pdev) -{ - AM53C974_local_declare(); - int i, j; - struct Scsi_Host *instance, *search; - struct AM53C974_hostdata *hostdata; - -#ifdef AM53C974_OPTION_DEBUG_PROBE_ONLY - printk("AM53C974: probe only enabled, aborting initialization\n"); - return 0; -#endif - - instance = scsi_register(tpnt, sizeof(struct AM53C974_hostdata)); - if (!instance) { - printk(KERN_WARNING "AM53C974: Unable to register host, aborting.\n"); - return 0; - } - scsi_set_device(instance, &pdev->dev); - hostdata = (struct AM53C974_hostdata *) instance->hostdata; - instance->base = 0; - instance->io_port = pci_resource_start(pdev, 0); - instance->irq = pdev->irq; - instance->dma_channel = -1; - AM53C974_setio(instance); - -#ifdef AM53C974_SCSI_ID - instance->this_id = AM53C974_SCSI_ID; - AM53C974_write_8(CNTLREG1, instance->this_id & CNTLREG1_SID); -#else - instance->this_id = AM53C974_read_8(CNTLREG1) & CNTLREG1_SID; - if (instance->this_id != 7) - printk("scsi%d: WARNING: unusual hostadapter SCSI id %d; please verify!\n", - instance->host_no, instance->this_id); -#endif - - for (i = 0; i < sizeof(hostdata->msgout); i++) { - hostdata->msgout[i] = NOP; - hostdata->last_message[i] = NOP; - } - for (i = 0; i < 8; i++) { - hostdata->busy[i] = 0; - hostdata->sync_per[i] = DEF_STP; - hostdata->sync_off[i] = 0; - hostdata->sync_neg[i] = 0; - hostdata->sync_en[i] = DEFAULT_SYNC_NEGOTIATION_ENABLED; - hostdata->max_rate[i] = DEFAULT_RATE; - hostdata->max_offset[i] = DEFAULT_SYNC_OFFSET; - } - -/* overwrite defaults by LILO overrides */ - for (i = 0; i < commandline_current; i++) { - if (overrides[i].host_scsi_id == instance->this_id) { - j = overrides[i].target_scsi_id; - hostdata->sync_en[j] = 1; - hostdata->max_rate[j] = overrides[i].max_rate; - hostdata->max_offset[j] = overrides[i].max_offset; - } - } - - hostdata->sel_cmd = NULL; - hostdata->connected = NULL; - hostdata->issue_queue = NULL; - hostdata->disconnected_queue = NULL; - hostdata->in_reset = 0; - hostdata->aborted = 0; - hostdata->selecting = 0; - hostdata->disconnecting = 0; - hostdata->dma_busy = 0; - - if (!request_region (instance->io_port, 128, "AM53C974")) { - printk ("AM53C974 (scsi%d): Could not get IO region %04lx.\n", - instance->host_no, instance->io_port); - scsi_unregister(instance); - return 0; - } -/* Set up an interrupt handler if we aren't already sharing an IRQ with another board */ - for (search = first_host; - search && (((the_template != NULL) && (search->hostt != the_template)) || - (search->irq != instance->irq) || (search == instance)); - search = search->next); - if (!search) { - if (request_irq(instance->irq, do_AM53C974_intr, SA_SHIRQ, "AM53C974", instance)) { - printk("scsi%d: IRQ%d not free, detaching\n", instance->host_no, instance->irq); - scsi_unregister(instance); - return 0; - } - } else { - printk("scsi%d: using interrupt handler previously installed for scsi%d\n", - instance->host_no, search->host_no); - } - - if (!the_template) { - the_template = instance->hostt; - first_instance = instance; - } -/* do hard reset */ - AM53C974_write_8(CMDREG, CMDREG_RDEV); /* reset device */ - udelay(5); - AM53C974_write_8(CMDREG, CMDREG_NOP); - AM53C974_write_8(CNTLREG1, CNTLREG1_DISR | instance->this_id); - AM53C974_write_8(CMDREG, CMDREG_RBUS); /* reset SCSI bus */ - udelay(10); - AM53C974_config_after_reset(instance); - mdelay(500); - return (1); -} - -/********************************************************************* -* Function : AM53C974_config_after_reset(struct Scsi_Host *instance) * -* * -* Purpose : initializes chip registers after reset * -* * -* Inputs : instance - which AM53C974 * -* * -* Returns : nothing * -**********************************************************************/ -static void AM53C974_config_after_reset(struct Scsi_Host *instance) -{ - AM53C974_local_declare(); - AM53C974_setio(instance); - -/* clear SCSI FIFO */ - AM53C974_write_8(CMDREG, CMDREG_CFIFO); - -/* configure device */ - AM53C974_write_8(STIMREG, DEF_SCSI_TIMEOUT); - AM53C974_write_8(STPREG, DEF_STP & STPREG_STP); - AM53C974_write_8(SOFREG, (DEF_SOF_RAD << 6) | (DEF_SOF_RAA << 4)); - AM53C974_write_8(CLKFREG, DEF_CLKF & CLKFREG_MASK); - AM53C974_write_8(CNTLREG1, (DEF_ETM << 7) | CNTLREG1_DISR | (DEF_PERE << 4) | instance->this_id); - AM53C974_write_8(CNTLREG2, (DEF_ENF << 6)); - AM53C974_write_8(CNTLREG3, (DEF_ADIDCHK << 7) | (DEF_FASTSCSI << 4) | (DEF_FASTCLK << 3)); - AM53C974_write_8(CNTLREG4, (DEF_GLITCH << 6) | (DEF_PWD << 5) | (DEF_RAE << 3) | (DEF_RADE << 2) | CNTLREG4_RES); -} - -/*********************************************************************** -* Function : const char *AM53C974_info(struct Scsi_Host *instance) * -* * -* Purpose : return device driver information * -* * -* Inputs : instance - which AM53C974 * -* * -* Returns : info string * -************************************************************************/ -static const char *AM53C974_info(struct Scsi_Host *instance) -{ - static char info[100]; - - sprintf(info, "AM53/79C974 PCscsi driver rev. %d.%d; host I/O address: 0x%lx; irq: %d\n", - AM53C974_DRIVER_REVISION_MAJOR, AM53C974_DRIVER_REVISION_MINOR, - instance->io_port, instance->irq); - return (info); -} - -/************************************************************************** -* Function : void initialize_SCp(Scsi_Cmnd *cmd) * -* * -* Purpose : initialize the saved data pointers for cmd to point to the * -* start of the buffer. * -* * -* Inputs : cmd - Scsi_Cmnd structure to have pointers reset. * -* * -* Returns : nothing * -**************************************************************************/ -static __inline__ void initialize_SCp(Scsi_Cmnd * cmd) -{ - if (cmd->use_sg) { - cmd->SCp.buffer = (struct scatterlist *) cmd->buffer; - cmd->SCp.buffers_residual = cmd->use_sg - 1; - cmd->SCp.ptr = (char *) cmd->SCp.buffer->address; - cmd->SCp.this_residual = cmd->SCp.buffer->length; - } else { - cmd->SCp.buffer = NULL; - cmd->SCp.buffers_residual = 0; - cmd->SCp.ptr = (char *) cmd->request_buffer; - cmd->SCp.this_residual = cmd->request_bufflen; - } -} - -/************************************************************************** -* Function : run_main(void) * -* * -* Purpose : insure that the coroutine is running and will process our * -* request. main_running is checked/set here (in an inline * -* function rather than in AM53C974_main itself to reduce the * -* chances of stack overflow. * -* * -* * -* Inputs : none * -* * -* Returns : nothing * -**************************************************************************/ -static __inline__ void run_main(void) -{ - unsigned long flags; - save_flags(flags); - cli(); - if (!main_running) { - /* main_running is cleared in AM53C974_main once it can't do - more work, and AM53C974_main exits with interrupts disabled. */ - main_running = 1; - AM53C974_main(); - } - restore_flags(flags); -} - -/************************************************************************** -* Function : int AM53C974_queue_command(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *)) -* -* Purpose : writes SCSI command into AM53C974 FIFO -* -* Inputs : cmd - SCSI command, done - function called on completion, with -* a pointer to the command descriptor. -* -* Returns : status, see hosts.h for details -* -* Side effects : -* cmd is added to the per instance issue_queue, with minor -* twiddling done to the host specific fields of cmd. If the -* main coroutine is not running, it is restarted. -**************************************************************************/ -static int AM53C974_queue_command(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)) -{ - unsigned long flags; - struct Scsi_Host *instance = cmd->device->host; - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - Scsi_Cmnd *tmp; - - save_flags(flags); - cli(); - DEB_QUEUE(printk(SEPARATOR_LINE)); - DEB_QUEUE(printk("scsi%d: AM53C974_queue_command called\n", instance->host_no)); - DEB_QUEUE(printk("cmd=%02x target=%02x lun=%02x bufflen=%d use_sg = %02x\n", - cmd->cmnd[0], cmd->target, cmd->device->lun, cmd->request_bufflen, cmd->use_sg)); - -/* We use the host_scribble field as a pointer to the next command in a queue */ - cmd->host_scribble = NULL; - cmd->scsi_done = done; - cmd->result = 0; - cmd->device->disconnect = 0; - -/* Insert the cmd into the issue queue. Note that REQUEST SENSE - * commands are added to the head of the queue since any command will - * clear the contingent allegiance condition that exists and the - * sense data is only guaranteed to be valid while the condition exists. */ - if (!(hostdata->issue_queue) || (cmd->cmnd[0] == REQUEST_SENSE)) { - LIST(cmd, hostdata->issue_queue); - cmd->host_scribble = (unsigned char *) hostdata->issue_queue; - hostdata->issue_queue = cmd; - } else { - for (tmp = (Scsi_Cmnd *) hostdata->issue_queue; tmp->host_scribble; - tmp = (Scsi_Cmnd *) tmp->host_scribble); - LIST(cmd, tmp); - tmp->host_scribble = (unsigned char *) cmd; - } - - DEB_QUEUE(printk("scsi%d : command added to %s of queue\n", instance->host_no, - (cmd->cmnd[0] == REQUEST_SENSE) ? "head" : "tail")); - -/* Run the coroutine if it isn't already running. */ - run_main(); - restore_flags(flags); - return 0; -} - -/************************************************************************** - * Function : AM53C974_main (void) - * - * Purpose : AM53C974_main is a coroutine that runs as long as more work can - * be done on the AM53C974 host adapters in a system. Both - * AM53C974_queue_command() and AM53C974_intr() will try to start it - * in case it is not running. - * - * NOTE : AM53C974_main exits with interrupts *disabled*, the caller should - * reenable them. This prevents reentrancy and kernel stack overflow. - **************************************************************************/ -static void AM53C974_main(void) -{ - AM53C974_local_declare(); - unsigned long flags; - Scsi_Cmnd *tmp, *prev; - struct Scsi_Host *instance; - struct AM53C974_hostdata *hostdata; - int done; - -/* We run (with interrupts disabled) until we're sure that none of - * the host adapters have anything that can be done, at which point - * we set main_running to 0 and exit. */ - - save_flags(flags); - cli(); /* Freeze request queues */ - do { - done = 1; - for (instance = first_instance; instance && instance->hostt == the_template; - instance = instance->next) { - hostdata = (struct AM53C974_hostdata *) instance->hostdata; - AM53C974_setio(instance); - /* start to select target if we are not connected and not in the - selection process */ - if (!hostdata->connected && !hostdata->sel_cmd) { - /* Search through the issue_queue for a command destined for a target - that is not busy. */ - for (tmp = (Scsi_Cmnd *) hostdata->issue_queue, prev = NULL; tmp; - prev = tmp, tmp = (Scsi_Cmnd *) tmp->host_scribble) { - /* When we find one, remove it from the issue queue. */ - if (!(hostdata->busy[tmp->device->id] & (1 << tmp->device->lun))) { - if (prev) { - REMOVE(prev, (Scsi_Cmnd *) (prev->host_scribble), tmp, - (Scsi_Cmnd *) (tmp->host_scribble)); - prev->host_scribble = tmp->host_scribble; - } else { - REMOVE(-1, hostdata->issue_queue, tmp, tmp->host_scribble); - hostdata->issue_queue = (Scsi_Cmnd *) tmp->host_scribble; - } - tmp->host_scribble = NULL; - - /* go into selection mode, disable reselection and wait for - SO interrupt which will continue with the selection process */ - hostdata->selecting = 1; - hostdata->sel_cmd = tmp; - AM53C974_write_8(CMDREG, CMDREG_DSR); - break; - } /* if target/lun is not busy */ - } /* for */ - } - /* if (!hostdata->connected) */ - else { - DEB(printk("main: connected; cmd = 0x%lx, sel_cmd = 0x%lx\n", - (long) hostdata->connected, (long) hostdata->sel_cmd)); - } - } /* for instance */ - } while (!done); - main_running = 0; - restore_flags(flags); -} - -/************************************************************************ -* Function : AM53C974_intr(int irq, void *dev_id, struct pt_regs *regs) * -* * -* Purpose : interrupt handler * -* * -* Inputs : irq - interrupt line, regs - ? * -* * -* Returns : nothing * -************************************************************************/ -static void do_AM53C974_intr(int irq, void *dev_id, struct pt_regs *regs) -{ - unsigned long flags; - struct Scsi_Host *dev = dev_id; - - spin_lock_irqsave(dev->host_lock, flags); - AM53C974_intr(irq, dev_id, regs); - spin_unlock_irqrestore(dev->host_lock, flags); -} - -/************************************************************************ -* Function : AM53C974_intr(int irq, void *dev_id, struct pt_regs *regs) * -* * -* Purpose : interrupt handler * -* * -* Inputs : irq - interrupt line, regs - ? * -* * -* Returns : nothing * -************************************************************************/ -static void AM53C974_intr(int irq, void *dev_id, struct pt_regs *regs) -{ - AM53C974_local_declare(); - struct Scsi_Host *instance; - struct AM53C974_hostdata *hostdata; - unsigned char cmdreg, dmastatus, statreg, isreg, instreg, cfifo; - -/* find AM53C974 hostadapter responsible for this interrupt */ - for (instance = first_instance; instance; instance = instance->next) - if ((instance->irq == irq) && (instance->hostt == the_template)) - goto FOUND; - return; - -/* found; now decode and process */ - FOUND: - hostdata = (struct AM53C974_hostdata *) instance->hostdata; - AM53C974_setio(instance); - dmastatus = AM53C974_read_8(DMASTATUS); - - DEB_INTR(printk(SEPARATOR_LINE)); - DEB_INTR(printk("AM53C974 interrupt; dmastatus=0x%02x\n", dmastatus)); - KEYWAIT(); - -/*** DMA related interrupts ***/ - if (hostdata->connected && (dmastatus & (DMASTATUS_ERROR | DMASTATUS_PWDN | - DMASTATUS_ABORT))) { - /* DMA error or POWERDOWN */ - printk("scsi%d: DMA error or powerdown; dmastatus: 0x%02x\n", - instance->host_no, dmastatus); -#ifdef AM53C974_DEBUG - deb_stop = 1; -#endif - panic("scsi%d: cannot recover\n", instance->host_no); - } - if (hostdata->connected && (dmastatus & DMASTATUS_DONE)) { - /* DMA transfer done */ - unsigned long residual; - unsigned long flags; - save_flags(flags); - cli(); - if (!(AM53C974_read_8(DMACMD) & DMACMD_DIR)) { - do { - dmastatus = AM53C974_read_8(DMASTATUS); - residual = AM53C974_read_8(CTCLREG) | (AM53C974_read_8(CTCMREG) << 8) | - (AM53C974_read_8(CTCHREG) << 16); - residual += AM53C974_read_8(CFIREG) & CFIREG_CF; - } while (!(dmastatus & DMASTATUS_SCSIINT) && residual); - residual = AM53C974_read_8(CTCLREG) | (AM53C974_read_8(CTCMREG) << 8) | - (AM53C974_read_8(CTCHREG) << 16); - residual += AM53C974_read_8(CFIREG) & CFIREG_CF; - } else - residual = 0; - hostdata->connected->SCp.ptr += hostdata->connected->SCp.this_residual - residual; - hostdata->connected->SCp.this_residual = residual; - - AM53C974_write_8(DMACMD, DMACMD_IDLE); - - /* if service request missed before, process it now (ugly) */ - if (hostdata->dma_busy) { - hostdata->dma_busy = 0; - cmdreg = AM53C974_read_8(CMDREG); - statreg = AM53C974_read_8(STATREG); - isreg = AM53C974_read_8(ISREG); - instreg = AM53C974_read_8(INSTREG); - cfifo = AM53C974_cfifo(); - AM53C974_information_transfer(instance, statreg, isreg, instreg, cfifo, - dmastatus); - } - restore_flags(flags); - } - if (!(dmastatus & DMASTATUS_SCSIINT)) { - return; - } -/*** SCSI related interrupts ***/ - cmdreg = AM53C974_read_8(CMDREG); - statreg = AM53C974_read_8(STATREG); - isreg = AM53C974_read_8(ISREG); - instreg = AM53C974_read_8(INSTREG); - cfifo = AM53C974_cfifo(); - - DEB_INTR(printk("scsi%d: statreg: 0x%02x; isreg: 0x%02x; instreg: 0x%02x; cfifo: 0x%02x\n", - instance->host_no, statreg, isreg, instreg, cfifo)); - - if (statreg & STATREG_PE) { - /* parity error */ -#ifdef AM53C974_DEBUG - deb_stop = 1; -#endif - printk("scsi%d : PARITY error\n", instance->host_no); - if (hostdata->connected) - hostdata->sync_off[hostdata->connected->device->id] = 0; /* setup asynchronous transfer */ - hostdata->aborted = 1; - } - if (statreg & STATREG_IOE) { - /* illegal operation error */ -#ifdef AM53C974_DEBUG - deb_stop = 1; -#endif - printk("scsi%d : ILLEGAL OPERATION error\n", instance->host_no); - printk("cmdreg: 0x%02x; dmacmd: 0x%02x; statreg: 0x%02x; \n" - "isreg: 0x%02x; instreg: 0x%02x; cfifo: 0x%02x\n", - cmdreg, AM53C974_read_8(DMACMD), statreg, isreg, instreg, cfifo); - } - if (hostdata->in_reset && (instreg & INSTREG_SRST)) { - unsigned long flags; - /* RESET INTERRUPT */ -#ifdef AM53C974_DEBUG - deb_stop = 1; -#endif - DEB(printk("Bus reset interrupt received\n")); - AM53C974_intr_bus_reset(instance); - save_flags(flags); - cli(); - if (hostdata->connected) { - hostdata->connected->result = DID_RESET << 16; - hostdata->connected->scsi_done((Scsi_Cmnd *) hostdata->connected); - hostdata->connected = NULL; - } else { - if (hostdata->sel_cmd) { - hostdata->sel_cmd->result = DID_RESET << 16; - hostdata->sel_cmd->scsi_done((Scsi_Cmnd *) hostdata->sel_cmd); - hostdata->sel_cmd = NULL; - } - } - restore_flags(flags); - if (hostdata->in_reset == 1) - goto EXIT; - else - return; - } - if (instreg & INSTREG_ICMD) { - /* INVALID COMMAND INTERRUPT */ -#ifdef AM53C974_DEBUG - deb_stop = 1; -#endif - printk("scsi%d: Invalid command interrupt\n", instance->host_no); - printk("cmdreg: 0x%02x; dmacmd: 0x%02x; statreg: 0x%02x; dmastatus: 0x%02x; \n" - "isreg: 0x%02x; instreg: 0x%02x; cfifo: 0x%02x\n", - cmdreg, AM53C974_read_8(DMACMD), statreg, dmastatus, isreg, instreg, cfifo); - panic("scsi%d: cannot recover\n", instance->host_no); - } - if (instreg & INSTREG_DIS) { - unsigned long flags; - /* DISCONNECT INTERRUPT */ - DEB_INTR(printk("Disconnect interrupt received; ")); - save_flags(flags); - cli(); - AM53C974_intr_disconnect(instance); - restore_flags(flags); - goto EXIT; - } - if (instreg & INSTREG_RESEL) { - unsigned long flags; - /* RESELECTION INTERRUPT */ - DEB_INTR(printk("Reselection interrupt received\n")); - save_flags(flags); - cli(); - AM53C974_intr_reselect(instance, statreg); - restore_flags(flags); - goto EXIT; - } - if (instreg & INSTREG_SO) { - DEB_INTR(printk("Successful operation interrupt received\n")); - if (hostdata->selecting) { - unsigned long flags; - DEB_INTR(printk("DSR completed, starting select\n")); - save_flags(flags); - cli(); - AM53C974_select(instance, (Scsi_Cmnd *) hostdata->sel_cmd, - (hostdata->sel_cmd->cmnd[0] == REQUEST_SENSE) ? - TAG_NONE : TAG_NEXT); - hostdata->selecting = 0; - AM53C974_set_sync(instance, hostdata->sel_cmd->device->id); - restore_flags(flags); - return; - } - if (hostdata->sel_cmd != NULL) { - if (((isreg & ISREG_IS) != ISREG_OK_NO_STOP) && - ((isreg & ISREG_IS) != ISREG_OK_STOP)) { - unsigned long flags; - /* UNSUCCESSFUL SELECTION */ - DEB_INTR(printk("unsuccessful selection\n")); - save_flags(flags); - cli(); - hostdata->dma_busy = 0; - LIST(hostdata->sel_cmd, hostdata->issue_queue); - hostdata->sel_cmd->host_scribble = (unsigned char *) hostdata->issue_queue; - hostdata->issue_queue = hostdata->sel_cmd; - hostdata->sel_cmd = NULL; - hostdata->selecting = 0; - restore_flags(flags); - goto EXIT; - } else { - unsigned long flags; - /* SUCCESSFUL SELECTION */ - DEB(printk("successful selection; cmd=0x%02lx\n", (long) hostdata->sel_cmd)); - save_flags(flags); - cli(); - hostdata->dma_busy = 0; - hostdata->disconnecting = 0; - hostdata->connected = hostdata->sel_cmd; - hostdata->sel_cmd = NULL; - hostdata->selecting = 0; -#ifdef SCSI2 - if (!hostdata->conneted->device->simple_tags) -#else - hostdata->busy[hostdata->connected->device->id] |= (1 << hostdata->connected->device->lun); - /* very strange -- use_sg is sometimes nonzero for request sense commands !! */ - if ((hostdata->connected->cmnd[0] == REQUEST_SENSE) && hostdata->connected->use_sg) { - DEB(printk("scsi%d: REQUEST_SENSE command with nonzero use_sg\n", instance->host_no)); - KEYWAIT(); - hostdata->connected->use_sg = 0; - } - initialize_SCp((Scsi_Cmnd *) hostdata->connected); - hostdata->connected->SCp.phase = PHASE_CMDOUT; - AM53C974_information_transfer(instance, statreg, isreg, instreg, cfifo, dmastatus); - restore_flags(flags); - return; - } - } else { - unsigned long flags; - save_flags(flags); - cli(); - AM53C974_information_transfer(instance, statreg, isreg, instreg, cfifo, dmastatus); - restore_flags(flags); - return; - } - } - if (instreg & INSTREG_SR) { - DEB_INTR(printk("Service request interrupt received, ")); - if (hostdata->connected) { - unsigned long flags; - DEB_INTR(printk("calling information_transfer\n")); - save_flags(flags); - cli(); - AM53C974_information_transfer(instance, statreg, isreg, instreg, cfifo, dmastatus); - restore_flags(flags); - } else { - printk("scsi%d: weird: service request when no command connected\n", instance->host_no); - AM53C974_write_8(CMDREG, CMDREG_CFIFO); - } /* clear FIFO */ - return; - } - EXIT: - DEB_INTR(printk("intr: starting main\n")); - run_main(); - DEB_INTR(printk("end of intr\n")); -} - -/************************************************************************** -* Function : AM53C974_intr_disconnect(struct Scsi_Host *instance) -* -* Purpose : manage target disconnection -* -* Inputs : instance -- which AM53C974 -* -* Returns : nothing -**************************************************************************/ -static void AM53C974_intr_disconnect(struct Scsi_Host *instance) -{ - AM53C974_local_declare(); - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - Scsi_Cmnd *cmd; - AM53C974_setio(instance); - - if (hostdata->sel_cmd != NULL) { - /* normal selection timeout, typical for nonexisting targets */ - cmd = (Scsi_Cmnd *) hostdata->sel_cmd; - DEB_INTR(printk("bad target\n")); - cmd->result = DID_BAD_TARGET << 16; - goto EXIT_FINISHED; - } - if (!hostdata->connected) { - /* can happen if controller was reset, a device tried to reconnect, - failed and disconnects now */ - AM53C974_write_8(CMDREG, CMDREG_CFIFO); - return; - } - if (hostdata->disconnecting) { - /* target sent disconnect message, so we are prepared */ - cmd = (Scsi_Cmnd *) hostdata->connected; - AM53C974_set_async(instance, cmd->device->id); - DEB_INTR(printk("scsi%d : disc. from cmnd %d for ta %d, lun %d\n", - instance->host_no, cmd->cmnd[0], cmd->target, cmd->device->lun)); - if (cmd->device->disconnect) { - /* target wants to reselect later */ - DEB_INTR(printk("ok, re-enabling selection\n")); - LIST(cmd, hostdata->disconnected_queue); - cmd->host_scribble = (unsigned char *) hostdata->disconnected_queue; - hostdata->disconnected_queue = cmd; - DEB_QUEUE(printk("scsi%d : command for target %d lun %d this %d was moved from connected to" - " the disconnected_queue\n", instance->host_no, cmd->target, - cmd->device->lun, hostdata->disconnected_queue->SCp.this_residual)); - DEB_QUEUE(AM53C974_print_queues(instance)); - goto EXIT_UNFINISHED; - } else { - /* target does not want to reselect later, we are really finished */ -#ifdef AM53C974_DEBUG - if (cmd->cmnd[0] == REQUEST_SENSE) { - int i; - printk("Request sense data dump:\n"); - for (i = 0; i < cmd->request_bufflen; i++) { - printk("%02x ", *((char *) (cmd->request_buffer) + i)); - if (i && !(i % 16)) - printk("\n"); - } - printk("\n"); - } -#endif - goto EXIT_FINISHED; - } /* !cmd->device->disconnect */ - } /* if (hostdata->disconnecting) */ - /* no disconnect message received; unexpected disconnection */ - cmd = (Scsi_Cmnd *) hostdata->connected; - if (cmd) { -#ifdef AM53C974_DEBUG - deb_stop = 1; -#endif - AM53C974_set_async(instance, cmd->device->id); - printk("scsi%d: Unexpected disconnect; phase: %d; target: %d; this_residual: %d; buffers_residual: %d; message: %d\n", - instance->host_no, cmd->SCp.phase, cmd->device->id, cmd->SCp.this_residual, cmd->SCp.buffers_residual, - cmd->SCp.Message); - printk("cmdreg: 0x%02x; statreg: 0x%02x; isreg: 0x%02x; cfifo: 0x%02x\n", - AM53C974_read_8(CMDREG), AM53C974_read_8(STATREG), AM53C974_read_8(ISREG), - AM53C974_read_8(CFIREG) & CFIREG_CF); - - if ((hostdata->last_message[0] == EXTENDED_MESSAGE) && - (hostdata->last_message[2] == EXTENDED_SDTR)) { - /* sync. negotiation was aborted, setup asynchronous transfer with target */ - hostdata->sync_off[cmd->device->id] = 0; - } - if (hostdata->aborted || hostdata->msgout[0] == ABORT) - cmd->result = DID_ABORT << 16; - else - cmd->result = DID_ERROR << 16; - goto EXIT_FINISHED; - } - EXIT_FINISHED: - hostdata->aborted = 0; - hostdata->msgout[0] = NOP; - hostdata->sel_cmd = NULL; - hostdata->connected = NULL; - hostdata->selecting = 0; - hostdata->disconnecting = 0; - hostdata->dma_busy = 0; - hostdata->busy[cmd->device->id] &= ~(1 << cmd->device->lun); - AM53C974_write_8(CMDREG, CMDREG_CFIFO); - DEB(printk("disconnect; issue_queue: 0x%lx, disconnected_queue: 0x%lx\n", - (long) hostdata->issue_queue, (long) hostdata->disconnected_queue)); - cmd->scsi_done(cmd); - - if (!hostdata->selecting) { - AM53C974_set_async(instance, cmd->device->id); - AM53C974_write_8(CMDREG, CMDREG_ESR); - } /* allow reselect */ - return; - - EXIT_UNFINISHED: - hostdata->msgout[0] = NOP; - hostdata->sel_cmd = NULL; - hostdata->connected = NULL; - hostdata->aborted = 0; - hostdata->selecting = 0; - hostdata->disconnecting = 0; - hostdata->dma_busy = 0; - DEB(printk("disconnect; issue_queue: 0x%lx, disconnected_queue: 0x%lx\n", - (long) hostdata->issue_queue, (long) hostdata->disconnected_queue)); - if (!hostdata->selecting) { - AM53C974_set_async(instance, cmd->device->id); - AM53C974_write_8(CMDREG, CMDREG_ESR); - } /* allow reselect */ - return; -} - -/************************************************************************** -* Function : int AM53C974_sync_neg(struct Scsi_Host *instance, int target, unsigned char *msg) -* -* Purpose : setup message string for sync. negotiation -* -* Inputs : instance -- which AM53C974 -* target -- which SCSI target to deal with -* msg -- input message string -* -* Returns : 0 if parameters accepted or 1 if not accepted -* -* Side effects: hostdata is changed -* -* Note: we assume here that fastclk is enabled -**************************************************************************/ -static int AM53C974_sync_neg(struct Scsi_Host *instance, int target, unsigned char *msg) -{ - AM53C974_local_declare(); - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - int period, offset, i, rate, rate_rem; - AM53C974_setio(instance); - - period = (DEF_CLK * msg[3] * 8 + 1000) / 2000; - if (period < MIN_PERIOD) { - period = MIN_PERIOD; - hostdata->msgout[3] = period / 4; - } else if (period > MAX_PERIOD) { - period = MAX_PERIOD; - hostdata->msgout[3] = period / 4; - } else - hostdata->msgout[3] = msg[3]; - offset = msg[4]; - if (offset > MAX_OFFSET) - offset = MAX_OFFSET; - hostdata->msgout[4] = offset; - hostdata->sync_per[target] = period; - hostdata->sync_off[target] = offset; - for (i = 0; i < 3; i++) - hostdata->msgout[i] = msg[i]; - if ((hostdata->msgout[3] != msg[3]) || (msg[4] != offset)) - return (1); - - rate = DEF_CLK / period; - rate_rem = 10 * (DEF_CLK - period * rate) / period; - - if (offset) - printk("\ntarget %d: rate=%d.%d Mhz, synchronous, sync offset=%d bytes\n", - target, rate, rate_rem, offset); - else - printk("\ntarget %d: rate=%d.%d Mhz, asynchronous\n", target, rate, rate_rem); - - return (0); -} - -/************************************************************************** -* Function : AM53C974_set_async(struct Scsi_Host *instance, int target) -* -* Purpose : put controller into async. mode -* -* Inputs : instance -- which AM53C974 -* target -- which SCSI target to deal with -* -* Returns : nothing -**************************************************************************/ -static __inline__ void AM53C974_set_async(struct Scsi_Host *instance, int target) -{ - AM53C974_local_declare(); - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - AM53C974_setio(instance); - - AM53C974_write_8(STPREG, hostdata->sync_per[target]); - AM53C974_write_8(SOFREG, (DEF_SOF_RAD << 6) | (DEF_SOF_RAA << 4)); -} - -/************************************************************************** -* Function : AM53C974_set_sync(struct Scsi_Host *instance, int target) -* -* Purpose : put controller into sync. mode -* -* Inputs : instance -- which AM53C974 -* target -- which SCSI target to deal with -* -* Returns : nothing -**************************************************************************/ -static __inline__ void AM53C974_set_sync(struct Scsi_Host *instance, int target) -{ - AM53C974_local_declare(); - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - AM53C974_setio(instance); - - AM53C974_write_8(STPREG, hostdata->sync_per[target]); - AM53C974_write_8(SOFREG, (SOFREG_SO & hostdata->sync_off[target]) | - (DEF_SOF_RAD << 6) | (DEF_SOF_RAA << 4)); -} - -/*********************************************************************** -* Function : AM53C974_information_transfer(struct Scsi_Host *instance, * -* unsigned char statreg, unsigned char isreg, * -* unsigned char instreg, unsigned char cfifo, * -* unsigned char dmastatus) * -* * -* Purpose : handle phase changes * -* * -* Inputs : instance - which AM53C974 * -* statreg - status register * -* isreg - internal state register * -* instreg - interrupt status register * -* cfifo - number of bytes in FIFO * -* dmastatus - dma status register * -* * -* Returns : nothing * -************************************************************************/ -static void AM53C974_information_transfer(struct Scsi_Host *instance, - unsigned char statreg, unsigned char isreg, - unsigned char instreg, unsigned char cfifo, - unsigned char dmastatus) -{ - AM53C974_local_declare(); - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - Scsi_Cmnd *cmd = (Scsi_Cmnd *) hostdata->connected; - int ret, i, len, residual = -1; - AM53C974_setio(instance); - - DEB_INFO(printk(SEPARATOR_LINE)); - switch (statreg & STATREG_PHASE) { /* scsi phase */ - case PHASE_DATAOUT: - DEB_INFO(printk("Dataout phase; cmd=0x%lx, sel_cmd=0x%lx, this_residual=%d, buffers_residual=%d\n", - (long) hostdata->connected, (long) hostdata->sel_cmd, cmd->SCp.this_residual, cmd->SCp.buffers_residual)); - cmd->SCp.phase = PHASE_DATAOUT; - goto PHASE_DATA_IO; - - case PHASE_DATAIN: - DEB_INFO(printk("Datain phase; cmd=0x%lx, sel_cmd=0x%lx, this_residual=%d, buffers_residual=%d\n", - (long) hostdata->connected, (long) hostdata->sel_cmd, cmd->SCp.this_residual, cmd->SCp.buffers_residual)); - cmd->SCp.phase = PHASE_DATAIN; - PHASE_DATA_IO: - if (hostdata->aborted) { - AM53C974_write_8(DMACMD, DMACMD_IDLE); - AM53C974_write_8(CMDREG, CMDREG_CFIFO); - AM53C974_write_8(CMDREG, CMDREG_SATN); - return; - } - if ((!cmd->SCp.this_residual) && cmd->SCp.buffers_residual) { - cmd->SCp.buffer++; - cmd->SCp.buffers_residual--; - cmd->SCp.ptr = (unsigned char *) cmd->SCp.buffer->address; - cmd->SCp.this_residual = cmd->SCp.buffer->length; - } - if (cmd->SCp.this_residual) { - if (!(AM53C974_read_8(DMACMD) & DMACMD_START)) { - hostdata->dma_busy = 0; - AM53C974_transfer_dma(instance, statreg & STATREG_IO, - (unsigned long) cmd->SCp.this_residual, - cmd->SCp.ptr); - } else - hostdata->dma_busy = 1; - } - return; - - case PHASE_MSGIN: - DEB_INFO(printk("Message-In phase; cmd=0x%lx, sel_cmd=0x%lx\n", - (long) hostdata->connected, (long) hostdata->sel_cmd)); - AM53C974_set_async(instance, cmd->device->id); - if (cmd->SCp.phase == PHASE_DATAIN) - AM53C974_dma_blast(instance, dmastatus, statreg); - if ((cmd->SCp.phase == PHASE_DATAOUT) && (AM53C974_read_8(DMACMD) & DMACMD_START)) { - AM53C974_write_8(DMACMD, DMACMD_IDLE); - residual = cfifo + (AM53C974_read_8(CTCLREG) | (AM53C974_read_8(CTCMREG) << 8) | - (AM53C974_read_8(CTCHREG) << 16)); - cmd->SCp.ptr += cmd->SCp.this_residual - residual; - cmd->SCp.this_residual = residual; - if (cfifo) { - AM53C974_write_8(CMDREG, CMDREG_CFIFO); - cfifo = 0; - } - } - if (cmd->SCp.phase == PHASE_STATIN) { - while ((AM53C974_read_8(CFIREG) & CFIREG_CF) < 2); - cmd->SCp.Status = AM53C974_read_8(FFREG); - cmd->SCp.Message = AM53C974_read_8(FFREG); - DEB_INFO(printk("Message-In phase; status=0x%02x, message=0x%02x\n", - cmd->SCp.Status, cmd->SCp.Message)); - ret = AM53C974_message(instance, cmd, cmd->SCp.Message); - } else { - if (!cfifo) { - AM53C974_write_8(CMDREG, CMDREG_IT); - AM53C974_poll_int(); - cmd->SCp.Message = AM53C974_read_8(FFREG); - } - ret = AM53C974_message(instance, cmd, cmd->SCp.Message); - } - cmd->SCp.phase = PHASE_MSGIN; - AM53C974_set_sync(instance, cmd->device->id); - break; - case PHASE_MSGOUT: - DEB_INFO(printk("Message-Out phase; cfifo=%d; msgout[0]=0x%02x\n", - AM53C974_read_8(CFIREG) & CFIREG_CF, hostdata->msgout[0])); - AM53C974_write_8(DMACMD, DMACMD_IDLE); - AM53C974_set_async(instance, cmd->device->id); - for (i = 0; i < sizeof(hostdata->last_message); i++) - hostdata->last_message[i] = hostdata->msgout[i]; - if ((hostdata->msgout[0] == 0) || INSIDE(hostdata->msgout[0], 0x02, 0x1F) || - INSIDE(hostdata->msgout[0], 0x80, 0xFF)) - len = 1; - else { - if (hostdata->msgout[0] == EXTENDED_MESSAGE) { -#ifdef AM53C974_DEBUG_INFO - printk("Extended message dump:\n"); - for (i = 0; i < hostdata->msgout[1] + 2; i++) { - printk("%02x ", hostdata->msgout[i]); - if (i && !(i % 16)) - printk("\n"); - } - printk("\n"); -#endif - len = hostdata->msgout[1] + 2; - } else - len = 2; - } - for (i = 0; i < len; i++) - AM53C974_write_8(FFREG, hostdata->msgout[i]); - AM53C974_write_8(CMDREG, CMDREG_IT); - cmd->SCp.phase = PHASE_MSGOUT; - hostdata->msgout[0] = NOP; - AM53C974_set_sync(instance, cmd->device->id); - break; - - case PHASE_CMDOUT: - DEB_INFO(printk("Command-Out phase\n")); - AM53C974_set_async(instance, cmd->device->id); - for (i = 0; i < cmd->cmd_len; i++) - AM53C974_write_8(FFREG, cmd->cmnd[i]); - AM53C974_write_8(CMDREG, CMDREG_IT); - cmd->SCp.phase = PHASE_CMDOUT; - AM53C974_set_sync(instance, cmd->device->id); - break; - - case PHASE_STATIN: - DEB_INFO(printk("Status phase\n")); - if (cmd->SCp.phase == PHASE_DATAIN) - AM53C974_dma_blast(instance, dmastatus, statreg); - AM53C974_set_async(instance, cmd->device->id); - if (cmd->SCp.phase == PHASE_DATAOUT) { - unsigned long residual; - - if (AM53C974_read_8(DMACMD) & DMACMD_START) { - AM53C974_write_8(DMACMD, DMACMD_IDLE); - residual = cfifo + (AM53C974_read_8(CTCLREG) | (AM53C974_read_8(CTCMREG) << 8) | - (AM53C974_read_8(CTCHREG) << 16)); - cmd->SCp.ptr += cmd->SCp.this_residual - residual; - cmd->SCp.this_residual = residual; - } - if (cfifo) { - AM53C974_write_8(CMDREG, CMDREG_CFIFO); - cfifo = 0; - } - } - cmd->SCp.phase = PHASE_STATIN; - AM53C974_write_8(CMDREG, CMDREG_ICCS); /* command complete */ - break; - - case PHASE_RES_0: - case PHASE_RES_1: -#ifdef AM53C974_DEBUG - deb_stop = 1; -#endif - DEB_INFO(printk("Reserved phase\n")); - break; - } - KEYWAIT(); -} - -/****************************************************************************** -* Function : int AM53C974_message(struct Scsi_Host *instance, Scsi_Cmnd *cmd, -* unsigned char msg) -* -* Purpose : handle SCSI messages -* -* Inputs : instance -- which AM53C974 -* cmd -- SCSI command the message belongs to -* msg -- message id byte -* -* Returns : 1 on success, 0 on failure. -**************************************************************************/ -static int AM53C974_message(struct Scsi_Host *instance, Scsi_Cmnd * cmd, - unsigned char msg) -{ - AM53C974_local_declare(); - static unsigned char extended_msg[10]; - unsigned char statreg; - int len, ret = 0; - unsigned char *p; -#ifdef AM53C974_DEBUG_MSG - int j; -#endif - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - AM53C974_setio(instance); - - DEB_MSG(printk(SEPARATOR_LINE)); - -/* Linking lets us reduce the time required to get the - * next command out to the device, hopefully this will - * mean we don't waste another revolution due to the delays - * required by ARBITRATION and another SELECTION. - * In the current implementation proposal, low level drivers - * merely have to start the next command, pointed to by - * next_link, done() is called as with unlinked commands. */ - switch (msg) { -#ifdef LINKED - case LINKED_CMD_COMPLETE: - case LINKED_FLG_CMD_COMPLETE: - /* Accept message by releasing ACK */ - DEB_LINKED(printk("scsi%d : target %d lun %d linked command complete.\n", - instance->host_no, cmd->device->id, cmd->device->lun)); - /* Sanity check : A linked command should only terminate with - * one of these messages if there are more linked commands available. */ - if (!cmd->next_link) { - printk("scsi%d : target %d lun %d linked command complete, no next_link\n" - instance->host_no, cmd->device->id, cmd->device->lun); - hostdata->aborted = 1; - AM53C974_write_8(CMDREG, CMDREG_SATN); - AM53C974_write_8(CMDREG, CMDREG_MA); - break; - } - if (hostdata->aborted) { - DEB_ABORT(printk("ATN set for cmnd %d upon reception of LINKED_CMD_COMPLETE or" - "LINKED_FLG_CMD_COMPLETE message\n", cmd->cmnd[0])); - AM53C974_write_8(CMDREG, CMDREG_SATN); - } - AM53C974_write_8(CMDREG, CMDREG_MA); - - initialize_SCp(cmd->next_link); - /* The next command is still part of this process */ - cmd->next_link->tag = cmd->tag; - cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8); - DEB_LINKED(printk("scsi%d : target %d lun %d linked request done, calling scsi_done().\n", - instance->host_no, cmd->device->id, cmd->device->lun)); - cmd->scsi_done(cmd); - cmd = hostdata->connected; - break; - -#endif /* def LINKED */ - - case ABORT: - case COMMAND_COMPLETE: - DEB_MSG(printk("scsi%d: command complete message received; cmd %d for target %d, lun %d\n", - instance->host_no, cmd->cmnd[0], cmd->device->id, cmd->device->lun)); - hostdata->disconnecting = 1; - cmd->device->disconnect = 0; - - /* I'm not sure what the correct thing to do here is : - - * If the command that just executed is NOT a request - * sense, the obvious thing to do is to set the result - * code to the values of the stored parameters. - * If it was a REQUEST SENSE command, we need some way - * to differentiate between the failure code of the original - * and the failure code of the REQUEST sense - the obvious - * case is success, where we fall through and leave the result - * code unchanged. - * - * The non-obvious place is where the REQUEST SENSE failed */ - if (cmd->cmnd[0] != REQUEST_SENSE) - cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8); - else if (cmd->SCp.Status != GOOD) - cmd->result = (cmd->result & 0x00ffff) | (DID_ERROR << 16); - if (hostdata->aborted) { - AM53C974_write_8(CMDREG, CMDREG_SATN); - AM53C974_write_8(CMDREG, CMDREG_MA); - DEB_ABORT(printk("ATN set for cmnd %d upon reception of ABORT or" - "COMMAND_COMPLETE message\n", cmd->cmnd[0])); - break; - } - if ((cmd->cmnd[0] != REQUEST_SENSE) && (cmd->SCp.Status == CHECK_CONDITION)) { - DEB_MSG(printk("scsi%d : performing request sense\n", instance->host_no)); - cmd->cmnd[0] = REQUEST_SENSE; - cmd->cmnd[1] &= 0xe0; - cmd->cmnd[2] = 0; - cmd->cmnd[3] = 0; - cmd->cmnd[4] = sizeof(cmd->sense_buffer); - cmd->cmnd[5] = 0; - cmd->SCp.buffer = NULL; - cmd->SCp.buffers_residual = 0; - cmd->SCp.ptr = (char *) cmd->sense_buffer; - cmd->SCp.this_residual = sizeof(cmd->sense_buffer); - LIST(cmd, hostdata->issue_queue); - cmd->host_scribble = (unsigned char *) hostdata->issue_queue; - hostdata->issue_queue = (Scsi_Cmnd *) cmd; - DEB_MSG(printk("scsi%d : REQUEST SENSE added to head of issue queue\n", instance->host_no)); - } - /* Accept message by clearing ACK */ - AM53C974_write_8(CMDREG, CMDREG_MA); - break; - - case MESSAGE_REJECT: - DEB_MSG(printk("scsi%d: reject message received; cmd %d for target %d, lun %d\n", - instance->host_no, cmd->cmnd[0], cmd->device->id, cmd->device->lun)); - switch (hostdata->last_message[0]) { - case EXTENDED_MESSAGE: - if (hostdata->last_message[2] == EXTENDED_SDTR) { - /* sync. negotiation was rejected, setup asynchronous transfer with target */ - printk("\ntarget %d: rate=%d Mhz, asynchronous (sync. negotiation rejected)\n", - cmd->device->id, DEF_CLK / DEF_STP); - hostdata->sync_off[cmd->device->id] = 0; - hostdata->sync_per[cmd->device->id] = DEF_STP; - } - break; - case HEAD_OF_QUEUE_TAG: - case ORDERED_QUEUE_TAG: - case SIMPLE_QUEUE_TAG: - cmd->device->simple_tags = 0; - hostdata->busy[cmd->device->id] |= (1 << cmd->device->lun); - break; - default: - break; - } - if (hostdata->aborted) - AM53C974_write_8(CMDREG, CMDREG_SATN); - AM53C974_write_8(CMDREG, CMDREG_MA); - break; - - case DISCONNECT: - DEB_MSG(printk("scsi%d: disconnect message received; cmd %d for target %d, lun %d\n", - instance->host_no, cmd->cmnd[0], cmd->device->id, cmd->device->lun)); - cmd->device->disconnect = 1; - hostdata->disconnecting = 1; - AM53C974_write_8(CMDREG, CMDREG_MA); /* Accept message by clearing ACK */ - break; - - case SAVE_POINTERS: - case RESTORE_POINTERS: - DEB_MSG(printk("scsi%d: save/restore pointers message received; cmd %d for target %d, lun %d\n", - instance->host_no, cmd->cmnd[0], cmd->device->id, cmd->device->lun)); - /* The SCSI data pointer is *IMPLICITLY* saved on a disconnect - * operation, in violation of the SCSI spec so we can safely - * ignore SAVE/RESTORE pointers calls. - * - * Unfortunately, some disks violate the SCSI spec and - * don't issue the required SAVE_POINTERS message before - * disconnecting, and we have to break spec to remain - * compatible. */ - if (hostdata->aborted) { - DEB_ABORT(printk("ATN set for cmnd %d upon reception of SAVE/REST. POINTERS message\n", - cmd->cmnd[0])); - AM53C974_write_8(CMDREG, CMDREG_SATN); - } - AM53C974_write_8(CMDREG, CMDREG_MA); - break; - - case EXTENDED_MESSAGE: - DEB_MSG(printk("scsi%d: extended message received; cmd %d for target %d, lun %d\n", - instance->host_no, cmd->cmnd[0], cmd->device->id, cmd->device->lun)); - /* Extended messages are sent in the following format : - * Byte - * 0 EXTENDED_MESSAGE == 1 - * 1 length (includes one byte for code, doesn't include first two bytes) - * 2 code - * 3..length+1 arguments - */ - /* BEWARE!! THIS CODE IS EXTREMELY UGLY */ - extended_msg[0] = EXTENDED_MESSAGE; - AM53C974_read_8(INSTREG); /* clear int */ - AM53C974_write_8(CMDREG, CMDREG_MA); /* ack. msg byte, then wait for SO */ - AM53C974_poll_int(); - /* get length */ - AM53C974_write_8(CMDREG, CMDREG_IT); - AM53C974_poll_int(); - AM53C974_write_8(CMDREG, CMDREG_MA); /* ack. msg byte, then wait for SO */ - AM53C974_poll_int(); - extended_msg[1] = len = AM53C974_read_8(FFREG); /* get length */ - p = extended_msg + 2; - /* read the remaining (len) bytes */ - while (len) { - AM53C974_write_8(CMDREG, CMDREG_IT); - AM53C974_poll_int(); - if (len > 1) { - AM53C974_write_8(CMDREG, CMDREG_MA); /* ack. msg byte, then wait for SO */ - AM53C974_poll_int(); - } - *p = AM53C974_read_8(FFREG); - p++; - len--; - } - -#ifdef AM53C974_DEBUG_MSG - printk("scsi%d: received extended message: ", instance->host_no); - for (j = 0; j < extended_msg[1] + 2; j++) { - printk("0x%02x ", extended_msg[j]); - if (j && !(j % 16)) - printk("\n"); - } - printk("\n"); -#endif - - /* check message */ - if (extended_msg[2] == EXTENDED_SDTR) - ret = AM53C974_sync_neg(instance, cmd->device->id, extended_msg); - if (ret || hostdata->aborted) - AM53C974_write_8(CMDREG, CMDREG_SATN); - - AM53C974_write_8(CMDREG, CMDREG_MA); - break; - - default: - printk("scsi%d: unknown message 0x%02x received\n", instance->host_no, msg); -#ifdef AM53C974_DEBUG - deb_stop = 1; -#endif - /* reject message */ - hostdata->msgout[0] = MESSAGE_REJECT; - AM53C974_write_8(CMDREG, CMDREG_SATN); - AM53C974_write_8(CMDREG, CMDREG_MA); - return (0); - break; - - } /* switch (msg) */ - KEYWAIT(); - return (1); -} - -/************************************************************************** -* Function : AM53C974_select(struct Scsi_Host *instance, Scsi_Cmnd *cmd, int tag) -* -* Purpose : try to establish nexus for the command; -* start sync negotiation via start stop and transfer the command in -* cmdout phase in case of an inquiry or req. sense command with no -* sync. neg. performed yet -* -* Inputs : instance -- which AM53C974 -* cmd -- command which requires the selection -* tag -- tagged queueing -* -* Returns : nothing -* -* Note: this function initializes the selection process, which is continued -* in the interrupt handler -**************************************************************************/ -static void AM53C974_select(struct Scsi_Host *instance, Scsi_Cmnd * cmd, int tag) -{ - AM53C974_local_declare(); - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - unsigned char cfifo, tmp[3]; - unsigned int i, len, cmd_size = COMMAND_SIZE(cmd->cmnd[0]); - AM53C974_setio(instance); - - cfifo = AM53C974_cfifo(); - if (cfifo) { - printk("scsi%d: select error; %d residual bytes in FIFO\n", instance->host_no, cfifo); - AM53C974_write_8(CMDREG, CMDREG_CFIFO); /* clear FIFO */ - } -#ifdef AM53C974_PROHIBIT_DISCONNECT - tmp[0] = IDENTIFY(0, cmd->device->lun); -#else - tmp[0] = IDENTIFY(1, cmd->device->lun); -#endif - -#ifdef SCSI2 - if (cmd->device->simple_tags && (tag != TAG_NONE)) { - tmp[1] = SIMPLE_QUEUE_TAG; - if (tag == TAG_NEXT) { - /* 0 is TAG_NONE, used to imply no tag for this command */ - if (cmd->device->current_tag == 0) - cmd->device->current_tag = 1; - cmd->tag = cmd->device->current_tag; - cmd->device->current_tag++; - } else - cmd->tag = (unsigned char) tag; - tmp[2] = cmd->tag; - hostdata->last_message[0] = SIMPLE_QUEUE_TAG; - len = 3; - AM53C974_write_8(FFREG, tmp[0]); - AM53C974_write_8(FFREG, tmp[1]); - AM53C974_write_8(FFREG, tmp[2]); - } else -#endif /* def SCSI2 */ - { - len = 1; - AM53C974_write_8(FFREG, tmp[0]); - cmd->tag = 0; - } - -/* in case of an inquiry or req. sense command with no sync. neg performed yet, we start - sync negotiation via start stops and transfer the command in cmdout phase */ - if (((cmd->cmnd[0] == INQUIRY) || (cmd->cmnd[0] == REQUEST_SENSE)) && - !(hostdata->sync_neg[cmd->device->id]) && hostdata->sync_en[cmd->device->id]) { - hostdata->sync_neg[cmd->device->id] = 1; - hostdata->msgout[0] = EXTENDED_MESSAGE; - hostdata->msgout[1] = 3; - hostdata->msgout[2] = EXTENDED_SDTR; - hostdata->msgout[3] = 250 / (int) hostdata->max_rate[cmd->device->id]; - hostdata->msgout[4] = hostdata->max_offset[cmd->device->id]; - len += 5; - } - AM53C974_write_8(SDIDREG, SDIREG_MASK & cmd->device->id); /* setup dest. id */ - AM53C974_write_8(STIMREG, DEF_SCSI_TIMEOUT); /* setup timeout reg */ - switch (len) { - case 1: - for (i = 0; i < cmd_size; i++) - AM53C974_write_8(FFREG, cmd->cmnd[i]); - AM53C974_write_8(CMDREG, CMDREG_SAS); /* select with ATN, 1 msg byte */ - hostdata->msgout[0] = NOP; - break; - case 3: - for (i = 0; i < cmd_size; i++) - AM53C974_write_8(FFREG, cmd->cmnd[i]); - AM53C974_write_8(CMDREG, CMDREG_SA3S); /* select with ATN, 3 msg bytes */ - hostdata->msgout[0] = NOP; - break; - default: - AM53C974_write_8(CMDREG, CMDREG_SASS); /* select with ATN, stop steps; continue in message out phase */ - break; - } -} - -/************************************************************************** -* Function : AM53C974_intr_select(struct Scsi_Host *instance, unsigned char statreg) -* -* Purpose : handle reselection -* -* Inputs : instance -- which AM53C974 -* statreg -- status register -* -* Returns : nothing -* -* side effects: manipulates hostdata -**************************************************************************/ -static void AM53C974_intr_reselect(struct Scsi_Host *instance, unsigned char statreg) -{ - AM53C974_local_declare(); - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - unsigned char cfifo, msg[3], lun, t, target = 0; -#ifdef SCSI2 - unsigned char tag; -#endif - Scsi_Cmnd *tmp = NULL, *prev; - AM53C974_setio(instance); - - cfifo = AM53C974_cfifo(); - - if (hostdata->selecting) { - /* caught reselect interrupt in selection process; - put selecting command back into the issue queue and continue with the - reselecting command */ - DEB_RESEL(printk("AM53C974_intr_reselect: in selection process\n")); - LIST(hostdata->sel_cmd, hostdata->issue_queue); - hostdata->sel_cmd->host_scribble = (unsigned char *) hostdata->issue_queue; - hostdata->issue_queue = hostdata->sel_cmd; - hostdata->sel_cmd = NULL; - hostdata->selecting = 0; - } -/* 2 bytes must be in the FIFO now */ - if (cfifo != 2) { - printk("scsi %d: error: %d bytes in fifo, 2 expected\n", instance->host_no, cfifo); - hostdata->aborted = 1; - goto EXIT_ABORT; - } -/* determine target which reselected */ - t = AM53C974_read_8(FFREG); - if (!(t & (1 << instance->this_id))) { - printk("scsi %d: error: invalid host id\n", instance->host_no); - hostdata->aborted = 1; - goto EXIT_ABORT; - } - t ^= (1 << instance->this_id); - target = 0; - while (t != 1) { - t >>= 1; - target++; - } - DEB_RESEL(printk("scsi %d: reselect; target: %d\n", instance->host_no, target)); - - if (hostdata->aborted) - goto EXIT_ABORT; - - if ((statreg & STATREG_PHASE) != PHASE_MSGIN) { - printk("scsi %d: error: upon reselection interrupt not in MSGIN\n", instance->host_no); - hostdata->aborted = 1; - goto EXIT_ABORT; - } - msg[0] = AM53C974_read_8(FFREG); - if (!(msg[0] & 0x80)) { - printk("scsi%d: error: expecting IDENTIFY message, got ", instance->host_no); - print_msg(msg); - hostdata->aborted = 1; - goto EXIT_ABORT; - } - lun = (msg[0] & 0x07); - -/* We need to add code for SCSI-II to track which devices have - * I_T_L_Q nexuses established, and which have simple I_T_L - * nexuses so we can chose to do additional data transfer. */ -#ifdef SCSI2 -#error "SCSI-II tagged queueing is not supported yet" -#endif - -/* Find the command corresponding to the I_T_L or I_T_L_Q nexus we - * just reestablished, and remove it from the disconnected queue. */ - for (tmp = (Scsi_Cmnd *) hostdata->disconnected_queue, prev = NULL; - tmp; prev = tmp, tmp = (Scsi_Cmnd *) tmp->host_scribble) - if ((target == tmp->device->id) && (lun == tmp->device->lun) -#ifdef SCSI2 - && (tag == tmp->tag) -#endif - ) { - if (prev) { - REMOVE(prev, (Scsi_Cmnd *) (prev->host_scribble), tmp, - (Scsi_Cmnd *) (tmp->host_scribble)); - prev->host_scribble = tmp->host_scribble; - } else { - REMOVE(-1, hostdata->disconnected_queue, tmp, tmp->host_scribble); - hostdata->disconnected_queue = (Scsi_Cmnd *) tmp->host_scribble; - } - tmp->host_scribble = NULL; - hostdata->connected = tmp; - break; - } - if (!tmp) { -#ifdef SCSI2 - printk("scsi%d: warning : target %d lun %d tag %d not in disconnect_queue.\n", - instance->host_no, target, lun, tag); -#else - printk("scsi%d: warning : target %d lun %d not in disconnect_queue.\n", - instance->host_no, target, lun); -#endif - /* Since we have an established nexus that we can't do anything with, we must abort it. */ - hostdata->aborted = 1; - DEB(AM53C974_keywait()); - goto EXIT_ABORT; - } else - goto EXIT_OK; - - EXIT_ABORT: - AM53C974_write_8(CMDREG, CMDREG_SATN); - AM53C974_write_8(CMDREG, CMDREG_MA); - return; - - EXIT_OK: - DEB_RESEL(printk("scsi%d: nexus established, target = %d, lun = %d, tag = %d\n", - instance->host_no, target, tmp->lun, tmp->tag)); - AM53C974_set_sync(instance, target); - AM53C974_write_8(SDIDREG, SDIREG_MASK & target); /* setup dest. id */ - AM53C974_write_8(CMDREG, CMDREG_MA); - hostdata->dma_busy = 0; - hostdata->connected->SCp.phase = PHASE_CMDOUT; -} - -/************************************************************************** -* Function : AM53C974_transfer_dma(struct Scsi_Host *instance, short dir, -* unsigned long length, char *data) -* -* Purpose : setup DMA transfer -* -* Inputs : instance -- which AM53C974 -* dir -- direction flag, 0: write to device, read from memory; -* 1: read from device, write to memory -* length -- number of bytes to transfer to from buffer -* data -- pointer to data buffer -* -* Returns : nothing -**************************************************************************/ -static __inline__ void AM53C974_transfer_dma(struct Scsi_Host *instance, short dir, - unsigned long length, char *data) -{ - AM53C974_local_declare(); - AM53C974_setio(instance); - - AM53C974_write_8(CMDREG, CMDREG_NOP); - AM53C974_write_8(DMACMD, (dir << 7) | DMACMD_INTE_D); /* idle command */ - AM53C974_write_8(STCLREG, (unsigned char) (length & 0xff)); - AM53C974_write_8(STCMREG, (unsigned char) ((length & 0xff00) >> 8)); - AM53C974_write_8(STCHREG, (unsigned char) ((length & 0xff0000) >> 16)); - AM53C974_write_32(DMASTC, length & 0xffffff); - AM53C974_write_32(DMASPA, virt_to_bus(data)); - AM53C974_write_8(CMDREG, CMDREG_IT | CMDREG_DMA); - AM53C974_write_8(DMACMD, (dir << 7) | DMACMD_INTE_D | DMACMD_START); -} - -/************************************************************************** -* Function : AM53C974_dma_blast(struct Scsi_Host *instance, unsigned char dmastatus, -* unsigned char statreg) -* -* Purpose : cleanup DMA transfer -* -* Inputs : instance -- which AM53C974 -* dmastatus -- dma status register -* statreg -- status register -* -* Returns : nothing -**************************************************************************/ -static void AM53C974_dma_blast(struct Scsi_Host *instance, unsigned char dmastatus, - unsigned char statreg) -{ - AM53C974_local_declare(); - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - unsigned long ctcreg; - int dir = statreg & STATREG_IO; - int cfifo, pio, i = 0; - AM53C974_setio(instance); - - do { - cfifo = AM53C974_cfifo(); - i++; - } while (cfifo && (i < 50000)); - pio = (i == 50000) ? 1 : 0; - - if (statreg & STATREG_CTZ) { - AM53C974_write_8(DMACMD, DMACMD_IDLE); - return; - } - if (dmastatus & DMASTATUS_DONE) { - AM53C974_write_8(DMACMD, DMACMD_IDLE); - return; - } - AM53C974_write_8(DMACMD, ((dir << 7) & DMACMD_DIR) | DMACMD_BLAST); - while (!(AM53C974_read_8(DMASTATUS) & DMASTATUS_BCMPLT)); - AM53C974_write_8(DMACMD, DMACMD_IDLE); - - if (pio) { - /* transfer residual bytes via PIO */ - unsigned char *wac = (unsigned char *) AM53C974_read_32(DMAWAC); - printk("pio mode, residual=%d\n", AM53C974_read_8(CFIREG) & CFIREG_CF); - while (AM53C974_read_8(CFIREG) & CFIREG_CF) - *(wac++) = AM53C974_read_8(FFREG); - } - ctcreg = AM53C974_read_8(CTCLREG) | (AM53C974_read_8(CTCMREG) << 8) | - (AM53C974_read_8(CTCHREG) << 16); - - hostdata->connected->SCp.ptr += hostdata->connected->SCp.this_residual - ctcreg; - hostdata->connected->SCp.this_residual = ctcreg; -} - -/************************************************************************** -* Function : AM53C974_intr_bus_reset(struct Scsi_Host *instance) -* -* Purpose : handle bus reset interrupt -* -* Inputs : instance -- which AM53C974 -* -* Returns : nothing -**************************************************************************/ -static void AM53C974_intr_bus_reset(struct Scsi_Host *instance) -{ - AM53C974_local_declare(); - unsigned char cntlreg1; - AM53C974_setio(instance); - - AM53C974_write_8(CMDREG, CMDREG_CFIFO); - AM53C974_write_8(CMDREG, CMDREG_NOP); - - cntlreg1 = AM53C974_read_8(CNTLREG1); - AM53C974_write_8(CNTLREG1, cntlreg1 | CNTLREG1_DISR); -} - -/************************************************************************** -* Function : int AM53C974_abort(Scsi_Cmnd *cmd) -* -* Purpose : abort a command -* -* Inputs : cmd - the Scsi_Cmnd to abort, code - code to set the -* host byte of the result field to, if zero DID_ABORTED is -* used. -* -* Returns : 0 - success, -1 on failure. - **************************************************************************/ -static int AM53C974_abort(Scsi_Cmnd * cmd) -{ - AM53C974_local_declare(); - unsigned long flags; - struct Scsi_Host *instance = cmd->device->host; - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - Scsi_Cmnd *tmp, **prev; - -#ifdef AM53C974_DEBUG - deb_stop = 1; -#endif - save_flags(flags); - cli(); - AM53C974_setio(instance); - - DEB_ABORT(printk(SEPARATOR_LINE)); - DEB_ABORT(printk("scsi%d : AM53C974_abort called -- trouble starts!!\n", instance->host_no)); - DEB_ABORT(AM53C974_print(instance)); - DEB_ABORT(AM53C974_keywait()); - -/* Case 1 : If the command is the currently executing command, - we'll set the aborted flag and return control so that the - information transfer routine can exit cleanly. */ - if ((hostdata->connected == cmd) || (hostdata->sel_cmd == cmd)) { - DEB_ABORT(printk("scsi%d: aborting connected command\n", instance->host_no)); - hostdata->aborted = 1; - hostdata->msgout[0] = ABORT; - restore_flags(flags); - return (SCSI_ABORT_PENDING); - } -/* Case 2 : If the command hasn't been issued yet, - we simply remove it from the issue queue. */ - for (prev = (Scsi_Cmnd **) & (hostdata->issue_queue), - tmp = (Scsi_Cmnd *) hostdata->issue_queue; tmp; - prev = (Scsi_Cmnd **) & (tmp->host_scribble), - tmp = (Scsi_Cmnd *) tmp->host_scribble) { - if (cmd == tmp) { - DEB_ABORT(printk("scsi%d : abort removed command from issue queue.\n", instance->host_no)); - REMOVE(5, *prev, tmp, tmp->host_scribble); - (*prev) = (Scsi_Cmnd *) tmp->host_scribble; - tmp->host_scribble = NULL; - tmp->result = DID_ABORT << 16; - restore_flags(flags); - tmp->done(tmp); - return (SCSI_ABORT_SUCCESS); - } -#ifdef AM53C974_DEBUG_ABORT - else { - if (prev == (Scsi_Cmnd **) tmp) - printk("scsi%d : LOOP\n", instance->host_no); - } -#endif - } - -/* Case 3 : If any commands are connected, we're going to fail the abort - * and let the high level SCSI driver retry at a later time or - * issue a reset. - * - * Timeouts, and therefore aborted commands, will be highly unlikely - * and handling them cleanly in this situation would make the common - * case of noresets less efficient, and would pollute our code. So, - * we fail. */ - if (hostdata->connected || hostdata->sel_cmd) { - DEB_ABORT(printk("scsi%d : abort failed, other command connected.\n", instance->host_no)); - restore_flags(flags); - return (SCSI_ABORT_NOT_RUNNING); - } -/* Case 4: If the command is currently disconnected from the bus, and - * there are no connected commands, we reconnect the I_T_L or - * I_T_L_Q nexus associated with it, go into message out, and send - * an abort message. */ - for (tmp = (Scsi_Cmnd *) hostdata->disconnected_queue; tmp; - tmp = (Scsi_Cmnd *) tmp->host_scribble) { - if (cmd == tmp) { - DEB_ABORT(printk("scsi%d: aborting disconnected command\n", instance->host_no)); - hostdata->aborted = 1; - hostdata->msgout[0] = ABORT; - hostdata->selecting = 1; - hostdata->sel_cmd = tmp; - AM53C974_write_8(CMDREG, CMDREG_DSR); - restore_flags(flags); - return (SCSI_ABORT_PENDING); - } - } - -/* Case 5 : If we reached this point, the command was not found in any of - * the queues. - * - * We probably reached this point because of an unlikely race condition - * between the command completing successfully and the abortion code, - * so we won't panic, but we will notify the user in case something really - * broke. */ - DEB_ABORT(printk("scsi%d : abort failed, command not found.\n", instance->host_no)); - restore_flags(flags); - return (SCSI_ABORT_NOT_RUNNING); -} - -/************************************************************************** -* Function : int AM53C974_reset(Scsi_Cmnd *cmd) -* -* Purpose : reset the SCSI controller and bus -* -* Inputs : cmd -- which command within the command block was responsible for the reset -* -* Returns : status (SCSI_ABORT_SUCCESS) -* -* FIXME(eric) the reset_flags are ignored. -**************************************************************************/ -static int AM53C974_reset(Scsi_Cmnd * cmd, unsigned int reset_flags) -{ - AM53C974_local_declare(); - unsigned long flags; - int i; - struct Scsi_Host *instance = cmd->device->host; - struct AM53C974_hostdata *hostdata = (struct AM53C974_hostdata *) instance->hostdata; - AM53C974_setio(instance); - - save_flags(flags); - cli(); - DEB(printk("AM53C974_reset called; ")); - - printk("AM53C974_reset called\n"); - AM53C974_print(instance); - AM53C974_keywait(); - -/* do hard reset */ - AM53C974_write_8(CMDREG, CMDREG_RDEV); - AM53C974_write_8(CMDREG, CMDREG_NOP); - hostdata->msgout[0] = NOP; - for (i = 0; i < 8; i++) { - hostdata->busy[i] = 0; - hostdata->sync_per[i] = DEF_STP; - hostdata->sync_off[i] = 0; - hostdata->sync_neg[i] = 0; - } - hostdata->last_message[0] = NOP; - hostdata->sel_cmd = NULL; - hostdata->connected = NULL; - hostdata->issue_queue = NULL; - hostdata->disconnected_queue = NULL; - hostdata->in_reset = 0; - hostdata->aborted = 0; - hostdata->selecting = 0; - hostdata->disconnecting = 0; - hostdata->dma_busy = 0; - -/* reset bus */ - AM53C974_write_8(CNTLREG1, CNTLREG1_DISR | instance->this_id); /* disable interrupt upon SCSI RESET */ - AM53C974_write_8(CMDREG, CMDREG_RBUS); /* reset SCSI bus */ - udelay(40); - AM53C974_config_after_reset(instance); - - restore_flags(flags); - cmd->result = DID_RESET << 16; - cmd->scsi_done(cmd); - return SCSI_ABORT_SUCCESS; -} - - -/* - * AM53C974_release() - * - * Release resources allocated for a single AM53C974 adapter. - */ -static int AM53C974_release(struct Scsi_Host *shp) -{ - free_irq(shp->irq, shp); - release_region(shp->io_port, 128); - scsi_unregister(shp); - return 0; -} - - -/* You can specify overrides=a,b,c,d in the same format at AM53C974=a,b,c,d - on boot up */ -MODULE_PARM(overrides, "1-32i"); -MODULE_LICENSE("GPL"); - - -static Scsi_Host_Template driver_template = { - .proc_name = "am53c974", - .name = "AM53C974", - .detect = AM53C974_pci_detect, - .release = AM53C974_release, - .info = AM53C974_info, - .queuecommand = AM53C974_queue_command, - .abort = AM53C974_abort, - .reset = AM53C974_reset, - .can_queue = 12, - .this_id = -1, - .sg_tablesize = SG_ALL, - .cmd_per_lun = 1, - .use_clustering = DISABLE_CLUSTERING, -}; - -#include "scsi_module.c" diff -Nru a/drivers/scsi/AM53C974.h b/drivers/scsi/AM53C974.h --- a/drivers/scsi/AM53C974.h Wed Feb 4 16:51:37 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,61 +0,0 @@ -/* AM53/79C974 (PCscsi) driver release 0.5 - - * The architecture and much of the code of this device - * driver was originally developed by Drew Eckhardt for - * the NCR5380. The following copyrights apply: - * For the architecture and all parts similar to the NCR5380: - * Copyright 1993, Drew Eckhardt - * Visionary Computing - * (Unix and Linux consulting and custom programming) - * drew@colorado.edu - * +1 (303) 666-5836 - * - * The AM53C974_nobios_detect code was originally developed by - * Robin Cutshaw (robin@xfree86.org) and is used here in a - * modified form. - * - * For the other parts: - * Copyright 1994, D. Frieauff - * EMail: fri@rsx42sun0.dofn.de - * Phone: x49-7545-8-2256 , x49-7541-42305 - */ - -/* - * $Log: AM53C974.h,v $ - */ - -#ifndef AM53C974_H -#define AM53C974_H - -#include - -struct AM53C974_hostdata { - volatile unsigned in_reset:1; /* flag, says bus reset pending */ - volatile unsigned aborted:1; /* flag, says aborted */ - volatile unsigned selecting:1; /* selection started, but not yet finished */ - volatile unsigned disconnecting: 1; /* disconnection started, but not yet finished */ - volatile unsigned dma_busy:1; /* dma busy when service request for info transfer received */ - volatile unsigned char msgout[10]; /* message to output in MSGOUT_PHASE */ - volatile unsigned char last_message[10]; /* last message OUT */ - volatile Scsi_Cmnd *issue_queue; /* waiting to be issued */ - volatile Scsi_Cmnd *disconnected_queue; /* waiting for reconnect */ - volatile Scsi_Cmnd *sel_cmd; /* command for selection */ - volatile Scsi_Cmnd *connected; /* currently connected command */ - volatile unsigned char busy[8]; /* index = target, bit = lun */ - unsigned char sync_per[8]; /* synchronous transfer period (in effect) */ - unsigned char sync_off[8]; /* synchronous offset (in effect) */ - unsigned char sync_neg[8]; /* sync. negotiation performed (in effect) */ - unsigned char sync_en[8]; /* sync. negotiation performed (in effect) */ - unsigned char max_rate[8]; /* max. transfer rate (setup) */ - unsigned char max_offset[8]; /* max. sync. offset (setup), only valid if corresponding sync_en is nonzero */ -}; - -static int AM53C974_pci_detect(Scsi_Host_Template * tpnt); -static int AM53C974_release(struct Scsi_Host *shp); -static const char *AM53C974_info(struct Scsi_Host *); -static int AM53C974_command(Scsi_Cmnd * SCpnt); -static int AM53C974_queue_command(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)); -static int AM53C974_abort(Scsi_Cmnd * cmd); -static int AM53C974_reset(Scsi_Cmnd * cmd, unsigned int); - -#endif /* AM53C974_H */ diff -Nru a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c --- a/drivers/scsi/BusLogic.c Wed Feb 4 16:51:37 2004 +++ b/drivers/scsi/BusLogic.c Wed Feb 4 16:51:37 2004 @@ -26,7 +26,6 @@ */ - #define BusLogic_DriverVersion "2.1.16" #define BusLogic_DriverDate "18 July 2002" @@ -42,7 +41,7 @@ #include #include #include -/* #include This include file is currently busted */ +#include #include #include @@ -53,6 +52,9 @@ #include "BusLogic.h" #include "FlashPoint.c" +#ifndef FAILURE +#define FAILURE (-1) +#endif /* BusLogic_DriverOptionsCount is a count of the number of BusLogic Driver @@ -60,8 +62,7 @@ the Loadable Kernel Module Installation Facility. */ -static int - BusLogic_DriverOptionsCount; +static int BusLogic_DriverOptionsCount; /* @@ -70,14 +71,14 @@ Line or via the Loadable Kernel Module Installation Facility. */ -static BusLogic_DriverOptions_T - BusLogic_DriverOptions[BusLogic_MaxHostAdapters]; +static struct BusLogic_DriverOptions BusLogic_DriverOptions[BusLogic_MaxHostAdapters]; /* BusLogic can be assigned a string by insmod. */ +MODULE_LICENSE("GPL"); #ifdef MODULE static char *BusLogic; MODULE_PARM(BusLogic, "s"); @@ -89,8 +90,7 @@ all BusLogic Host Adapters. */ -static BusLogic_ProbeOptions_T - BusLogic_ProbeOptions; +static struct BusLogic_ProbeOptions BusLogic_ProbeOptions; /* @@ -98,8 +98,7 @@ all BusLogic Host Adapters. */ -static BusLogic_GlobalOptions_T - BusLogic_GlobalOptions; +static struct BusLogic_GlobalOptions BusLogic_GlobalOptions; /* @@ -107,17 +106,15 @@ are pointers to the first and last registered BusLogic Host Adapters. */ -static BusLogic_HostAdapter_T - *BusLogic_FirstRegisteredHostAdapter, - *BusLogic_LastRegisteredHostAdapter; +static struct BusLogic_HostAdapter *BusLogic_FirstRegisteredHostAdapter; +static struct BusLogic_HostAdapter *BusLogic_LastRegisteredHostAdapter; /* BusLogic_ProbeInfoCount is the number of entries in BusLogic_ProbeInfoList. */ -static int - BusLogic_ProbeInfoCount; +static int BusLogic_ProbeInfoCount; /* @@ -127,8 +124,7 @@ list of standard BusLogic I/O Addresses. */ -static BusLogic_ProbeInfo_T - *BusLogic_ProbeInfoList; +static struct BusLogic_ProbeInfo *BusLogic_ProbeInfoList; /* @@ -137,15 +133,14 @@ returns a failure code. */ -static char - *BusLogic_CommandFailureReason; +static char *BusLogic_CommandFailureReason; /* BusLogic_AnnounceDriver announces the Driver Version and Date, Author's Name, Copyright Notice, and Electronic Mail Address. */ -static void BusLogic_AnnounceDriver(BusLogic_HostAdapter_T *HostAdapter) +static void __init BusLogic_AnnounceDriver(struct BusLogic_HostAdapter *HostAdapter) { BusLogic_Announce("***** BusLogic SCSI Driver Version " BusLogic_DriverVersion " of " @@ -160,10 +155,10 @@ Driver and Host Adapter. */ -const char *BusLogic_DriverInfo(SCSI_Host_T *Host) +static const char *BusLogic_DriverInfo(struct Scsi_Host *Host) { - BusLogic_HostAdapter_T *HostAdapter = - (BusLogic_HostAdapter_T *) Host->hostdata; + struct BusLogic_HostAdapter *HostAdapter = + (struct BusLogic_HostAdapter *) Host->hostdata; return HostAdapter->FullModelName; } @@ -173,7 +168,7 @@ BusLogic Host Adapters. */ -static void BusLogic_RegisterHostAdapter(BusLogic_HostAdapter_T *HostAdapter) +static void __init BusLogic_RegisterHostAdapter(struct BusLogic_HostAdapter *HostAdapter) { HostAdapter->Next = NULL; if (BusLogic_FirstRegisteredHostAdapter == NULL) @@ -194,7 +189,7 @@ registered BusLogic Host Adapters. */ -static void BusLogic_UnregisterHostAdapter(BusLogic_HostAdapter_T *HostAdapter) +static void __init BusLogic_UnregisterHostAdapter(struct BusLogic_HostAdapter *HostAdapter) { if (HostAdapter == BusLogic_FirstRegisteredHostAdapter) { @@ -205,7 +200,7 @@ } else { - BusLogic_HostAdapter_T *PreviousHostAdapter = + struct BusLogic_HostAdapter *PreviousHostAdapter = BusLogic_FirstRegisteredHostAdapter; while (PreviousHostAdapter != NULL && PreviousHostAdapter->Next != HostAdapter) @@ -223,20 +218,20 @@ created CCBs are added to Host Adapter's free list. */ -static void BusLogic_InitializeCCBs(BusLogic_HostAdapter_T *HostAdapter, +static void BusLogic_InitializeCCBs(struct BusLogic_HostAdapter *HostAdapter, void *BlockPointer, int BlockSize, dma_addr_t BlockPointerHandle) { - BusLogic_CCB_T *CCB = (BusLogic_CCB_T *) BlockPointer; + struct BusLogic_CCB *CCB = (struct BusLogic_CCB *) BlockPointer; unsigned int offset = 0; memset(BlockPointer, 0, BlockSize); CCB->AllocationGroupHead = BlockPointerHandle; CCB->AllocationGroupSize = BlockSize; - while ((BlockSize -= sizeof(BusLogic_CCB_T)) >= 0) + while ((BlockSize -= sizeof(struct BusLogic_CCB)) >= 0) { CCB->Status = BusLogic_CCB_Free; CCB->HostAdapter = HostAdapter; - CCB->DMA_Handle = (BusLogic_BusAddress_T)BlockPointerHandle + offset; + CCB->DMA_Handle = (u32)BlockPointerHandle + offset; if (BusLogic_FlashPointHostAdapterP(HostAdapter)) { CCB->CallbackFunction = BusLogic_QueueCompletedCCB; @@ -248,7 +243,7 @@ HostAdapter->All_CCBs = CCB; HostAdapter->AllocatedCCBs++; CCB++; - offset += sizeof(BusLogic_CCB_T); + offset += sizeof(struct BusLogic_CCB); } } @@ -257,9 +252,9 @@ BusLogic_CreateInitialCCBs allocates the initial CCBs for Host Adapter. */ -static boolean BusLogic_CreateInitialCCBs(BusLogic_HostAdapter_T *HostAdapter) +static boolean __init BusLogic_CreateInitialCCBs(struct BusLogic_HostAdapter *HostAdapter) { - int BlockSize = BusLogic_CCB_AllocationGroupSize * sizeof(BusLogic_CCB_T); + int BlockSize = BusLogic_CCB_AllocationGroupSize * sizeof(struct BusLogic_CCB); void *BlockPointer; dma_addr_t BlockPointerHandle; while (HostAdapter->AllocatedCCBs < HostAdapter->InitialCCBs) @@ -283,9 +278,9 @@ BusLogic_DestroyCCBs deallocates the CCBs for Host Adapter. */ -static void BusLogic_DestroyCCBs(BusLogic_HostAdapter_T *HostAdapter) +static void BusLogic_DestroyCCBs(struct BusLogic_HostAdapter *HostAdapter) { - BusLogic_CCB_T *NextCCB = HostAdapter->All_CCBs, *CCB, *Last_CCB = NULL; + struct BusLogic_CCB *NextCCB = HostAdapter->All_CCBs, *CCB, *Last_CCB = NULL; HostAdapter->All_CCBs = NULL; HostAdapter->Free_CCBs = NULL; while ((CCB = NextCCB) != NULL) @@ -314,11 +309,11 @@ multiple host adapters share the same IRQ Channel. */ -static void BusLogic_CreateAdditionalCCBs(BusLogic_HostAdapter_T *HostAdapter, +static void BusLogic_CreateAdditionalCCBs(struct BusLogic_HostAdapter *HostAdapter, int AdditionalCCBs, boolean SuccessMessageP) { - int BlockSize = BusLogic_CCB_AllocationGroupSize * sizeof(BusLogic_CCB_T); + int BlockSize = BusLogic_CCB_AllocationGroupSize * sizeof(struct BusLogic_CCB); int PreviouslyAllocated = HostAdapter->AllocatedCCBs; void *BlockPointer; dma_addr_t BlockPointerHandle; @@ -350,18 +345,17 @@ } } - /* BusLogic_AllocateCCB allocates a CCB from Host Adapter's free list, allocating more memory from the Kernel if necessary. The Host Adapter's Lock should already have been acquired by the caller. */ -static BusLogic_CCB_T *BusLogic_AllocateCCB(BusLogic_HostAdapter_T +static struct BusLogic_CCB *BusLogic_AllocateCCB(struct BusLogic_HostAdapter *HostAdapter) { static unsigned long SerialNumber = 0; - BusLogic_CCB_T *CCB; + struct BusLogic_CCB *CCB; CCB = HostAdapter->Free_CCBs; if (CCB != NULL) { @@ -392,13 +386,13 @@ caller. */ -static void BusLogic_DeallocateCCB(BusLogic_CCB_T *CCB) +static void BusLogic_DeallocateCCB(struct BusLogic_CCB *CCB) { - BusLogic_HostAdapter_T *HostAdapter = CCB->HostAdapter; + struct BusLogic_HostAdapter *HostAdapter = CCB->HostAdapter; if (CCB->Command->use_sg != 0) { pci_unmap_sg(HostAdapter->PCI_Device, - (SCSI_ScatterList_T *)CCB->Command->request_buffer, + (struct scatterlist *)CCB->Command->request_buffer, CCB->Command->use_sg, scsi_to_pci_dma_dir(CCB->Command->sc_data_direction)); } @@ -435,8 +429,8 @@ waiting for the Host Adapter Ready bit to be set in the Status Register. */ -static int BusLogic_Command(BusLogic_HostAdapter_T *HostAdapter, - BusLogic_OperationCode_T OperationCode, +static int BusLogic_Command(struct BusLogic_HostAdapter *HostAdapter, + enum BusLogic_OperationCode OperationCode, void *ParameterData, int ParameterLength, void *ReplyData, @@ -444,9 +438,9 @@ { unsigned char *ParameterPointer = (unsigned char *) ParameterData; unsigned char *ReplyPointer = (unsigned char *) ReplyData; - BusLogic_StatusRegister_T StatusRegister; - BusLogic_InterruptRegister_T InterruptRegister; - ProcessorFlags_T ProcessorFlags = 0; + union BusLogic_StatusRegister StatusRegister; + union BusLogic_InterruptRegister InterruptRegister; + unsigned long ProcessorFlags = 0; int ReplyBytes = 0, Result; long TimeoutCounter; /* @@ -473,8 +467,8 @@ while (--TimeoutCounter >= 0) { StatusRegister.All = BusLogic_ReadStatusRegister(HostAdapter); - if (StatusRegister.Bits.HostAdapterReady && - !StatusRegister.Bits.CommandParameterRegisterBusy) + if (StatusRegister.HostAdapterReady && + !StatusRegister.CommandParameterRegisterBusy) break; udelay(100); } @@ -510,10 +504,10 @@ udelay(100); InterruptRegister.All = BusLogic_ReadInterruptRegister(HostAdapter); StatusRegister.All = BusLogic_ReadStatusRegister(HostAdapter); - if (InterruptRegister.Bits.CommandComplete) break; + if (InterruptRegister.CommandComplete) break; if (HostAdapter->HostAdapterCommandCompleted) break; - if (StatusRegister.Bits.DataInRegisterReady) break; - if (StatusRegister.Bits.CommandParameterRegisterBusy) continue; + if (StatusRegister.DataInRegisterReady) break; + if (StatusRegister.CommandParameterRegisterBusy) continue; BusLogic_WriteCommandParameterRegister(HostAdapter, *ParameterPointer++); ParameterLength--; } @@ -530,7 +524,7 @@ if (OperationCode == BusLogic_ModifyIOAddress) { StatusRegister.All = BusLogic_ReadStatusRegister(HostAdapter); - if (StatusRegister.Bits.CommandInvalid) + if (StatusRegister.CommandInvalid) { BusLogic_CommandFailureReason = "Modify I/O Address Invalid"; Result = -1; @@ -568,16 +562,16 @@ { InterruptRegister.All = BusLogic_ReadInterruptRegister(HostAdapter); StatusRegister.All = BusLogic_ReadStatusRegister(HostAdapter); - if (InterruptRegister.Bits.CommandComplete) break; + if (InterruptRegister.CommandComplete) break; if (HostAdapter->HostAdapterCommandCompleted) break; - if (StatusRegister.Bits.DataInRegisterReady) + if (StatusRegister.DataInRegisterReady) { if (++ReplyBytes <= ReplyLength) *ReplyPointer++ = BusLogic_ReadDataInRegister(HostAdapter); else BusLogic_ReadDataInRegister(HostAdapter); } if (OperationCode == BusLogic_FetchHostAdapterLocalRAM && - StatusRegister.Bits.HostAdapterReady) break; + StatusRegister.HostAdapterReady) break; udelay(100); } if (TimeoutCounter < 0) @@ -608,7 +602,7 @@ /* Process Command Invalid conditions. */ - if (StatusRegister.Bits.CommandInvalid) + if (StatusRegister.CommandInvalid) { /* Some early BusLogic Host Adapters may not recover properly from @@ -620,14 +614,14 @@ */ udelay(1000); StatusRegister.All = BusLogic_ReadStatusRegister(HostAdapter); - if (StatusRegister.Bits.CommandInvalid || - StatusRegister.Bits.Reserved || - StatusRegister.Bits.DataInRegisterReady || - StatusRegister.Bits.CommandParameterRegisterBusy || - !StatusRegister.Bits.HostAdapterReady || - !StatusRegister.Bits.InitializationRequired || - StatusRegister.Bits.DiagnosticActive || - StatusRegister.Bits.DiagnosticFailure) + if (StatusRegister.CommandInvalid || + StatusRegister.Reserved || + StatusRegister.DataInRegisterReady || + StatusRegister.CommandParameterRegisterBusy || + !StatusRegister.HostAdapterReady || + !StatusRegister.InitializationRequired || + StatusRegister.DiagnosticActive || + StatusRegister.DiagnosticFailure) { BusLogic_SoftReset(HostAdapter); udelay(1000); @@ -666,9 +660,9 @@ Host Adapters. */ -static void BusLogic_AppendProbeAddressISA(BusLogic_IO_Address_T IO_Address) +static void __init BusLogic_AppendProbeAddressISA(unsigned long IO_Address) { - BusLogic_ProbeInfo_T *ProbeInfo; + struct BusLogic_ProbeInfo *ProbeInfo; if (BusLogic_ProbeInfoCount >= BusLogic_MaxHostAdapters) return; ProbeInfo = &BusLogic_ProbeInfoList[BusLogic_ProbeInfoCount++]; ProbeInfo->HostAdapterType = BusLogic_MultiMaster; @@ -684,8 +678,8 @@ only from the list of standard BusLogic MultiMaster ISA I/O Addresses. */ -static void BusLogic_InitializeProbeInfoListISA(BusLogic_HostAdapter_T - *PrototypeHostAdapter) +static void __init BusLogic_InitializeProbeInfoListISA(struct BusLogic_HostAdapter + *PrototypeHostAdapter) { /* If BusLogic Driver Options specifications requested that ISA Bus Probes @@ -730,8 +724,8 @@ of increasing PCI Bus and Device Number. */ -static void BusLogic_SortProbeInfo(BusLogic_ProbeInfo_T *ProbeInfoList, - int ProbeInfoCount) +static void __init BusLogic_SortProbeInfo(struct BusLogic_ProbeInfo *ProbeInfoList, + int ProbeInfoCount) { int LastInterchange = ProbeInfoCount-1, Bound, j; while (LastInterchange > 0) @@ -740,16 +734,16 @@ LastInterchange = 0; for (j = 0; j < Bound; j++) { - BusLogic_ProbeInfo_T *ProbeInfo1 = &ProbeInfoList[j]; - BusLogic_ProbeInfo_T *ProbeInfo2 = &ProbeInfoList[j+1]; + struct BusLogic_ProbeInfo *ProbeInfo1 = &ProbeInfoList[j]; + struct BusLogic_ProbeInfo *ProbeInfo2 = &ProbeInfoList[j+1]; if (ProbeInfo1->Bus > ProbeInfo2->Bus || (ProbeInfo1->Bus == ProbeInfo2->Bus && (ProbeInfo1->Device > ProbeInfo2->Device))) { - BusLogic_ProbeInfo_T TempProbeInfo; - memcpy(&TempProbeInfo, ProbeInfo1, sizeof(BusLogic_ProbeInfo_T)); - memcpy(ProbeInfo1, ProbeInfo2, sizeof(BusLogic_ProbeInfo_T)); - memcpy(ProbeInfo2, &TempProbeInfo, sizeof(BusLogic_ProbeInfo_T)); + struct BusLogic_ProbeInfo TempProbeInfo; + memcpy(&TempProbeInfo, ProbeInfo1, sizeof(struct BusLogic_ProbeInfo)); + memcpy(ProbeInfo1, ProbeInfo2, sizeof(struct BusLogic_ProbeInfo)); + memcpy(ProbeInfo2, &TempProbeInfo, sizeof(struct BusLogic_ProbeInfo)); LastInterchange = j; } } @@ -765,17 +759,17 @@ I/O Addresses. It returns the number of PCI MultiMaster Host Adapters found. */ -static int BusLogic_InitializeMultiMasterProbeInfo(BusLogic_HostAdapter_T - *PrototypeHostAdapter) +static int __init BusLogic_InitializeMultiMasterProbeInfo(struct BusLogic_HostAdapter + *PrototypeHostAdapter) { - BusLogic_ProbeInfo_T *PrimaryProbeInfo = + struct BusLogic_ProbeInfo *PrimaryProbeInfo = &BusLogic_ProbeInfoList[BusLogic_ProbeInfoCount]; int NonPrimaryPCIMultiMasterIndex = BusLogic_ProbeInfoCount + 1; int NonPrimaryPCIMultiMasterCount = 0, PCIMultiMasterCount = 0; boolean ForceBusDeviceScanningOrder = false; boolean ForceBusDeviceScanningOrderChecked = false; boolean StandardAddressSeen[6]; - PCI_Device_T *PCI_Device = NULL; + struct pci_dev *PCI_Device = NULL; int i; if (BusLogic_ProbeInfoCount >= BusLogic_MaxHostAdapters) return 0; BusLogic_ProbeInfoCount++; @@ -798,16 +792,16 @@ PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER, PCI_Device)) != NULL) { - BusLogic_HostAdapter_T *HostAdapter = PrototypeHostAdapter; - BusLogic_PCIHostAdapterInformation_T PCIHostAdapterInformation; - BusLogic_ModifyIOAddressRequest_T ModifyIOAddressRequest; + struct BusLogic_HostAdapter *HostAdapter = PrototypeHostAdapter; + struct BusLogic_PCIHostAdapterInformation PCIHostAdapterInformation; + enum BusLogic_ISACompatibleIOPort ModifyIOAddressRequest; unsigned char Bus; unsigned char Device; unsigned int IRQ_Channel; unsigned long BaseAddress0; unsigned long BaseAddress1; - BusLogic_IO_Address_T IO_Address; - BusLogic_PCI_Address_T PCI_Address; + unsigned long IO_Address; + unsigned long PCI_Address; if (pci_enable_device(PCI_Device)) continue; @@ -874,9 +868,12 @@ else PCIHostAdapterInformation.ISACompatibleIOPort = BusLogic_IO_Disable; /* - Issue the Modify I/O Address command to disable the ISA Compatible - I/O Port. - */ + * Issue the Modify I/O Address command to disable the ISA Compatible + * I/O Port. On PCI Host Adapters, the Modify I/O Address command + * allows modification of the ISA compatible I/O Address that the Host + * Adapter responds to; it does not affect the PCI compliant I/O Address + * assigned at system initialization. + */ ModifyIOAddressRequest = BusLogic_IO_Disable; BusLogic_Command(HostAdapter, BusLogic_ModifyIOAddress, &ModifyIOAddressRequest, @@ -890,10 +887,10 @@ */ if (!ForceBusDeviceScanningOrderChecked) { - BusLogic_FetchHostAdapterLocalRAMRequest_T + struct BusLogic_FetchHostAdapterLocalRAMRequest FetchHostAdapterLocalRAMRequest; - BusLogic_AutoSCSIByte45_T AutoSCSIByte45; - BusLogic_BoardID_T BoardID; + struct BusLogic_AutoSCSIByte45 AutoSCSIByte45; + struct BusLogic_BoardID BoardID; FetchHostAdapterLocalRAMRequest.ByteOffset = BusLogic_AutoSCSI_BaseOffset + 45; FetchHostAdapterLocalRAMRequest.ByteCount = @@ -931,7 +928,7 @@ } else if (BusLogic_ProbeInfoCount < BusLogic_MaxHostAdapters) { - BusLogic_ProbeInfo_T *ProbeInfo = + struct BusLogic_ProbeInfo *ProbeInfo = &BusLogic_ProbeInfoList[BusLogic_ProbeInfoCount++]; ProbeInfo->HostAdapterType = BusLogic_MultiMaster; ProbeInfo->HostAdapterBusType = BusLogic_PCI_Bus; @@ -1020,7 +1017,7 @@ unsigned char Bus; unsigned char Device; unsigned int IRQ_Channel; - BusLogic_IO_Address_T IO_Address; + unsigned long IO_Address; if (pci_enable_device(PCI_Device)) continue; @@ -1036,7 +1033,7 @@ if (IO_Address == 0 || IRQ_Channel == 0) continue; for (i = 0; i < BusLogic_ProbeInfoCount; i++) { - BusLogic_ProbeInfo_T *ProbeInfo = &BusLogic_ProbeInfoList[i]; + struct BusLogic_ProbeInfo *ProbeInfo = &BusLogic_ProbeInfoList[i]; if (ProbeInfo->IO_Address == IO_Address && ProbeInfo->HostAdapterType == BusLogic_MultiMaster) { @@ -1061,11 +1058,11 @@ number of FlashPoint Host Adapters found. */ -static int BusLogic_InitializeFlashPointProbeInfo(BusLogic_HostAdapter_T - *PrototypeHostAdapter) +static int __init BusLogic_InitializeFlashPointProbeInfo(struct BusLogic_HostAdapter + *PrototypeHostAdapter) { int FlashPointIndex = BusLogic_ProbeInfoCount, FlashPointCount = 0; - PCI_Device_T *PCI_Device = NULL; + struct pci_dev *PCI_Device = NULL; /* Interrogate PCI Configuration Space for any FlashPoint Host Adapters. */ @@ -1078,8 +1075,8 @@ unsigned int IRQ_Channel; unsigned long BaseAddress0; unsigned long BaseAddress1; - BusLogic_IO_Address_T IO_Address; - BusLogic_PCI_Address_T PCI_Address; + unsigned long IO_Address; + unsigned long PCI_Address; if (pci_enable_device(PCI_Device)) continue; @@ -1127,7 +1124,7 @@ } if (BusLogic_ProbeInfoCount < BusLogic_MaxHostAdapters) { - BusLogic_ProbeInfo_T *ProbeInfo = + struct BusLogic_ProbeInfo *ProbeInfo = &BusLogic_ProbeInfoList[BusLogic_ProbeInfoCount++]; ProbeInfo->HostAdapterType = BusLogic_FlashPoint; ProbeInfo->HostAdapterBusType = BusLogic_PCI_Bus; @@ -1174,8 +1171,8 @@ a particular probe order. */ -static void BusLogic_InitializeProbeInfoList(BusLogic_HostAdapter_T - *PrototypeHostAdapter) +static void __init BusLogic_InitializeProbeInfoList(struct BusLogic_HostAdapter + *PrototypeHostAdapter) { /* If a PCI BIOS is present, interrogate it for MultiMaster and FlashPoint @@ -1201,12 +1198,12 @@ BusLogic_InitializeMultiMasterProbeInfo(PrototypeHostAdapter); if (FlashPointCount > 0 && PCIMultiMasterCount > 0) { - BusLogic_ProbeInfo_T *ProbeInfo = + struct BusLogic_ProbeInfo *ProbeInfo = &BusLogic_ProbeInfoList[FlashPointCount]; - BusLogic_HostAdapter_T *HostAdapter = PrototypeHostAdapter; - BusLogic_FetchHostAdapterLocalRAMRequest_T + struct BusLogic_HostAdapter *HostAdapter = PrototypeHostAdapter; + struct BusLogic_FetchHostAdapterLocalRAMRequest FetchHostAdapterLocalRAMRequest; - BusLogic_BIOSDriveMapByte_T Drive0MapByte; + struct BusLogic_BIOSDriveMapByte Drive0MapByte; while (ProbeInfo->HostAdapterBusType != BusLogic_PCI_Bus) ProbeInfo++; HostAdapter->IO_Address = ProbeInfo->IO_Address; @@ -1228,20 +1225,20 @@ if (Drive0MapByte.DiskGeometry != BusLogic_BIOS_Disk_Not_Installed) { - BusLogic_ProbeInfo_T + struct BusLogic_ProbeInfo SavedProbeInfo[BusLogic_MaxHostAdapters]; int MultiMasterCount = BusLogic_ProbeInfoCount - FlashPointCount; memcpy(SavedProbeInfo, BusLogic_ProbeInfoList, BusLogic_ProbeInfoCount - * sizeof(BusLogic_ProbeInfo_T)); + * sizeof(struct BusLogic_ProbeInfo)); memcpy(&BusLogic_ProbeInfoList[0], &SavedProbeInfo[FlashPointCount], - MultiMasterCount * sizeof(BusLogic_ProbeInfo_T)); + MultiMasterCount * sizeof(struct BusLogic_ProbeInfo)); memcpy(&BusLogic_ProbeInfoList[MultiMasterCount], &SavedProbeInfo[0], - FlashPointCount * sizeof(BusLogic_ProbeInfo_T)); + FlashPointCount * sizeof(struct BusLogic_ProbeInfo)); } } } @@ -1257,7 +1254,7 @@ BusLogic_Failure prints a standardized error message, and then returns false. */ -static boolean BusLogic_Failure(BusLogic_HostAdapter_T *HostAdapter, +static boolean BusLogic_Failure(struct BusLogic_HostAdapter *HostAdapter, char *ErrorMessage) { BusLogic_AnnounceDriver(HostAdapter); @@ -1284,19 +1281,19 @@ BusLogic_ProbeHostAdapter probes for a BusLogic Host Adapter. */ -static boolean BusLogic_ProbeHostAdapter(BusLogic_HostAdapter_T *HostAdapter) +static boolean __init BusLogic_ProbeHostAdapter(struct BusLogic_HostAdapter *HostAdapter) { - BusLogic_StatusRegister_T StatusRegister; - BusLogic_InterruptRegister_T InterruptRegister; - BusLogic_GeometryRegister_T GeometryRegister; + union BusLogic_StatusRegister StatusRegister; + union BusLogic_InterruptRegister InterruptRegister; + union BusLogic_GeometryRegister GeometryRegister; /* FlashPoint Host Adapters are Probed by the FlashPoint SCCB Manager. */ if (BusLogic_FlashPointHostAdapterP(HostAdapter)) { - FlashPoint_Info_T *FlashPointInfo = &HostAdapter->FlashPointInfo; + struct FlashPoint_Info *FlashPointInfo = &HostAdapter->FlashPointInfo; FlashPointInfo->BaseAddress = - (BusLogic_Base_Address_T) HostAdapter->IO_Address; + (u32) HostAdapter->IO_Address; FlashPointInfo->IRQ_Channel = HostAdapter->IRQ_Channel; FlashPointInfo->Present = false; if (!(FlashPoint_ProbeHostAdapter(FlashPointInfo) == 0 && @@ -1336,11 +1333,11 @@ HostAdapter->IO_Address, StatusRegister.All, InterruptRegister.All, GeometryRegister.All); if (StatusRegister.All == 0 || - StatusRegister.Bits.DiagnosticActive || - StatusRegister.Bits.CommandParameterRegisterBusy || - StatusRegister.Bits.Reserved || - StatusRegister.Bits.CommandInvalid || - InterruptRegister.Bits.Reserved != 0) + StatusRegister.DiagnosticActive || + StatusRegister.CommandParameterRegisterBusy || + StatusRegister.Reserved || + StatusRegister.CommandInvalid || + InterruptRegister.Reserved != 0) return false; /* Check the undocumented Geometry Register to test if there is an I/O port @@ -1372,18 +1369,18 @@ SCSI Bus Reset. */ -static boolean BusLogic_HardwareResetHostAdapter(BusLogic_HostAdapter_T +static boolean BusLogic_HardwareResetHostAdapter(struct BusLogic_HostAdapter *HostAdapter, boolean HardReset) { - BusLogic_StatusRegister_T StatusRegister; + union BusLogic_StatusRegister StatusRegister; int TimeoutCounter; /* FlashPoint Host Adapters are Hard Reset by the FlashPoint SCCB Manager. */ if (BusLogic_FlashPointHostAdapterP(HostAdapter)) { - FlashPoint_Info_T *FlashPointInfo = &HostAdapter->FlashPointInfo; + struct FlashPoint_Info *FlashPointInfo = &HostAdapter->FlashPointInfo; FlashPointInfo->HostSoftReset = !HardReset; FlashPointInfo->ReportDataUnderrun = true; HostAdapter->CardHandle = @@ -1408,7 +1405,7 @@ while (--TimeoutCounter >= 0) { StatusRegister.All = BusLogic_ReadStatusRegister(HostAdapter); - if (StatusRegister.Bits.DiagnosticActive) break; + if (StatusRegister.DiagnosticActive) break; udelay(100); } if (BusLogic_GlobalOptions.TraceHardwareReset) @@ -1429,7 +1426,7 @@ while (--TimeoutCounter >= 0) { StatusRegister.All = BusLogic_ReadStatusRegister(HostAdapter); - if (!StatusRegister.Bits.DiagnosticActive) break; + if (!StatusRegister.DiagnosticActive) break; udelay(100); } if (BusLogic_GlobalOptions.TraceHardwareReset) @@ -1445,9 +1442,9 @@ while (--TimeoutCounter >= 0) { StatusRegister.All = BusLogic_ReadStatusRegister(HostAdapter); - if (StatusRegister.Bits.DiagnosticFailure || - StatusRegister.Bits.HostAdapterReady || - StatusRegister.Bits.DataInRegisterReady) + if (StatusRegister.DiagnosticFailure || + StatusRegister.HostAdapterReady || + StatusRegister.DataInRegisterReady) break; udelay(100); } @@ -1461,14 +1458,14 @@ error occurred during the Host Adapter diagnostics. If Data In Register Ready is set, then there is an Error Code available. */ - if (StatusRegister.Bits.DiagnosticFailure || - !StatusRegister.Bits.HostAdapterReady) + if (StatusRegister.DiagnosticFailure || + !StatusRegister.HostAdapterReady) { BusLogic_CommandFailureReason = NULL; BusLogic_Failure(HostAdapter, "HARD RESET DIAGNOSTICS"); BusLogic_Error("HOST ADAPTER STATUS REGISTER = %02X\n", HostAdapter, StatusRegister.All); - if (StatusRegister.Bits.DataInRegisterReady) + if (StatusRegister.DataInRegisterReady) { unsigned char ErrorCode = BusLogic_ReadDataInRegister(HostAdapter); BusLogic_Error("HOST ADAPTER ERROR CODE = %d\n", @@ -1488,10 +1485,10 @@ Host Adapter. */ -static boolean BusLogic_CheckHostAdapter(BusLogic_HostAdapter_T *HostAdapter) +static boolean __init BusLogic_CheckHostAdapter(struct BusLogic_HostAdapter *HostAdapter) { - BusLogic_ExtendedSetupInformation_T ExtendedSetupInformation; - BusLogic_RequestedReplyLength_T RequestedReplyLength; + struct BusLogic_ExtendedSetupInformation ExtendedSetupInformation; + unsigned char RequestedReplyLength; boolean Result = true; /* FlashPoint Host Adapters do not require this protection. @@ -1527,21 +1524,21 @@ from Host Adapter and initializes the Host Adapter structure. */ -static boolean BusLogic_ReadHostAdapterConfiguration(BusLogic_HostAdapter_T - *HostAdapter) +static boolean __init BusLogic_ReadHostAdapterConfiguration(struct BusLogic_HostAdapter + *HostAdapter) { - BusLogic_BoardID_T BoardID; - BusLogic_Configuration_T Configuration; - BusLogic_SetupInformation_T SetupInformation; - BusLogic_ExtendedSetupInformation_T ExtendedSetupInformation; - BusLogic_HostAdapterModelNumber_T HostAdapterModelNumber; - BusLogic_FirmwareVersion3rdDigit_T FirmwareVersion3rdDigit; - BusLogic_FirmwareVersionLetter_T FirmwareVersionLetter; - BusLogic_PCIHostAdapterInformation_T PCIHostAdapterInformation; - BusLogic_FetchHostAdapterLocalRAMRequest_T FetchHostAdapterLocalRAMRequest; - BusLogic_AutoSCSIData_T AutoSCSIData; - BusLogic_GeometryRegister_T GeometryRegister; - BusLogic_RequestedReplyLength_T RequestedReplyLength; + struct BusLogic_BoardID BoardID; + struct BusLogic_Configuration Configuration; + struct BusLogic_SetupInformation SetupInformation; + struct BusLogic_ExtendedSetupInformation ExtendedSetupInformation; + unsigned char HostAdapterModelNumber[5]; + unsigned char FirmwareVersion3rdDigit; + unsigned char FirmwareVersionLetter; + struct BusLogic_PCIHostAdapterInformation PCIHostAdapterInformation; + struct BusLogic_FetchHostAdapterLocalRAMRequest FetchHostAdapterLocalRAMRequest; + struct BusLogic_AutoSCSIData AutoSCSIData; + union BusLogic_GeometryRegister GeometryRegister; + unsigned char RequestedReplyLength; unsigned char *TargetPointer, Character; int TargetID, i; /* @@ -1552,7 +1549,7 @@ */ if (BusLogic_FlashPointHostAdapterP(HostAdapter)) { - FlashPoint_Info_T *FlashPointInfo = &HostAdapter->FlashPointInfo; + struct FlashPoint_Info *FlashPointInfo = &HostAdapter->FlashPointInfo; TargetPointer = HostAdapter->ModelName; *TargetPointer++ = 'B'; *TargetPointer++ = 'T'; @@ -1759,7 +1756,7 @@ */ GeometryRegister.All = BusLogic_ReadGeometryRegister(HostAdapter); HostAdapter->ExtendedTranslationEnabled = - GeometryRegister.Bits.ExtendedTranslationEnabled; + GeometryRegister.ExtendedTranslationEnabled; /* Save the Scatter Gather Limits, Level Sensitive Interrupt flag, Wide SCSI flag, Differential SCSI flag, SCAM Supported flag, and @@ -2024,17 +2021,7 @@ HostAdapter->DriverOptions->TaggedQueuingPermittedMask) | (HostAdapter->TaggedQueuingPermitted & ~HostAdapter->DriverOptions->TaggedQueuingPermittedMask); - /* - Select appropriate values for the Error Recovery Strategy array - either from a BusLogic Driver Options specification, or using - BusLogic_ErrorRecovery_Default. - */ - for (TargetID = 0; TargetID < BusLogic_MaxTargetDevices; TargetID++) - if (HostAdapter->DriverOptions != NULL) - HostAdapter->ErrorRecoveryStrategy[TargetID] = - HostAdapter->DriverOptions->ErrorRecoveryStrategy[TargetID]; - else HostAdapter->ErrorRecoveryStrategy[TargetID] = - BusLogic_ErrorRecovery_Default; + /* Select an appropriate value for Bus Settle Time either from a BusLogic Driver Options specification, or from BusLogic_DefaultBusSettleTime. @@ -2055,25 +2042,22 @@ Host Adapter. */ -static boolean BusLogic_ReportHostAdapterConfiguration(BusLogic_HostAdapter_T - *HostAdapter) +static boolean __init BusLogic_ReportHostAdapterConfiguration(struct BusLogic_HostAdapter + *HostAdapter) { unsigned short AllTargetsMask = (1 << HostAdapter->MaxTargetDevices) - 1; unsigned short SynchronousPermitted, FastPermitted; unsigned short UltraPermitted, WidePermitted; unsigned short DisconnectPermitted, TaggedQueuingPermitted; boolean CommonSynchronousNegotiation, CommonTaggedQueueDepth; - boolean CommonErrorRecovery; char SynchronousString[BusLogic_MaxTargetDevices+1]; char WideString[BusLogic_MaxTargetDevices+1]; char DisconnectString[BusLogic_MaxTargetDevices+1]; char TaggedQueuingString[BusLogic_MaxTargetDevices+1]; - char ErrorRecoveryString[BusLogic_MaxTargetDevices+1]; char *SynchronousMessage = SynchronousString; char *WideMessage = WideString; char *DisconnectMessage = DisconnectString; char *TaggedQueuingMessage = TaggedQueuingString; - char *ErrorRecoveryMessage = ErrorRecoveryString; int TargetID; BusLogic_Info("Configuring BusLogic Model %s %s%s%s%s SCSI Host Adapter\n", HostAdapter, HostAdapter->ModelName, @@ -2241,30 +2225,6 @@ else BusLogic_Info("Individual", HostAdapter); BusLogic_Info(", Untagged Queue Depth: %d\n", HostAdapter, HostAdapter->UntaggedQueueDepth); - CommonErrorRecovery = true; - for (TargetID = 1; TargetID < HostAdapter->MaxTargetDevices; TargetID++) - if (HostAdapter->ErrorRecoveryStrategy[TargetID] != - HostAdapter->ErrorRecoveryStrategy[0]) - { - CommonErrorRecovery = false; - break; - } - if (CommonErrorRecovery) - ErrorRecoveryMessage = - BusLogic_ErrorRecoveryStrategyNames[ - HostAdapter->ErrorRecoveryStrategy[0]]; - else - { - for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) - ErrorRecoveryString[TargetID] = - BusLogic_ErrorRecoveryStrategyLetters[ - HostAdapter->ErrorRecoveryStrategy[TargetID]]; - ErrorRecoveryString[HostAdapter->SCSI_ID] = '#'; - ErrorRecoveryString[HostAdapter->MaxTargetDevices] = '\0'; - } - BusLogic_Info(" Error Recovery Strategy: %s, SCSI Bus Reset: %s\n", - HostAdapter, ErrorRecoveryMessage, - (HostAdapter->BusResetEnabled ? "Enabled" : "Disabled")); if (HostAdapter->TerminationInfoValid) { if (HostAdapter->HostWideSCSI) @@ -2297,7 +2257,7 @@ Host Adapter. */ -static boolean BusLogic_AcquireResources(BusLogic_HostAdapter_T *HostAdapter) +static boolean __init BusLogic_AcquireResources(struct BusLogic_HostAdapter *HostAdapter) { if (HostAdapter->IRQ_Channel == 0) { @@ -2344,7 +2304,7 @@ by BusLogic_AcquireResources. */ -static void BusLogic_ReleaseResources(BusLogic_HostAdapter_T *HostAdapter) +static void BusLogic_ReleaseResources(struct BusLogic_HostAdapter *HostAdapter) { /* Release shared access to the IRQ Channel. @@ -2375,12 +2335,12 @@ of the Host Adapter from its initial power on or hard reset state. */ -static boolean BusLogic_InitializeHostAdapter(BusLogic_HostAdapter_T +static boolean BusLogic_InitializeHostAdapter(struct BusLogic_HostAdapter *HostAdapter) { - BusLogic_ExtendedMailboxRequest_T ExtendedMailboxRequest; - BusLogic_RoundRobinModeRequest_T RoundRobinModeRequest; - BusLogic_SetCCBFormatRequest_T SetCCBFormatRequest; + struct BusLogic_ExtendedMailboxRequest ExtendedMailboxRequest; + enum BusLogic_RoundRobinModeRequest RoundRobinModeRequest; + enum BusLogic_SetCCBFormatRequest SetCCBFormatRequest; int TargetID; /* Initialize the pointers to the first and last CCBs that are queued for @@ -2409,18 +2369,18 @@ Initialize the Outgoing and Incoming Mailbox pointers. */ HostAdapter->MailboxSize = HostAdapter->MailboxCount * - (sizeof(BusLogic_OutgoingMailbox_T) + sizeof(BusLogic_IncomingMailbox_T)); + (sizeof(struct BusLogic_OutgoingMailbox) + sizeof(struct BusLogic_IncomingMailbox)); HostAdapter->MailboxSpace = pci_alloc_consistent(HostAdapter->PCI_Device, HostAdapter->MailboxSize, &HostAdapter->MailboxSpaceHandle); if (HostAdapter->MailboxSpace == NULL) return BusLogic_Failure(HostAdapter, "MAILBOX ALLOCATION"); HostAdapter->FirstOutgoingMailbox = - (BusLogic_OutgoingMailbox_T *) HostAdapter->MailboxSpace; + (struct BusLogic_OutgoingMailbox *) HostAdapter->MailboxSpace; HostAdapter->LastOutgoingMailbox = HostAdapter->FirstOutgoingMailbox + HostAdapter->MailboxCount - 1; HostAdapter->NextOutgoingMailbox = HostAdapter->FirstOutgoingMailbox; HostAdapter->FirstIncomingMailbox = - (BusLogic_IncomingMailbox_T *) (HostAdapter->LastOutgoingMailbox + 1); + (struct BusLogic_IncomingMailbox *) (HostAdapter->LastOutgoingMailbox + 1); HostAdapter->LastIncomingMailbox = HostAdapter->FirstIncomingMailbox + HostAdapter->MailboxCount - 1; HostAdapter->NextIncomingMailbox = HostAdapter->FirstIncomingMailbox; @@ -2429,15 +2389,15 @@ Initialize the Outgoing and Incoming Mailbox structures. */ memset(HostAdapter->FirstOutgoingMailbox, 0, - HostAdapter->MailboxCount * sizeof(BusLogic_OutgoingMailbox_T)); + HostAdapter->MailboxCount * sizeof(struct BusLogic_OutgoingMailbox)); memset(HostAdapter->FirstIncomingMailbox, 0, - HostAdapter->MailboxCount * sizeof(BusLogic_IncomingMailbox_T)); + HostAdapter->MailboxCount * sizeof(struct BusLogic_IncomingMailbox)); /* Initialize the Host Adapter's Pointer to the Outgoing/Incoming Mailboxes. */ ExtendedMailboxRequest.MailboxCount = HostAdapter->MailboxCount; ExtendedMailboxRequest.BaseMailboxAddress = - (BusLogic_BusAddress_T) HostAdapter->MailboxSpaceHandle; + (u32) HostAdapter->MailboxSpaceHandle; if (BusLogic_Command(HostAdapter, BusLogic_InitializeExtendedMailbox, &ExtendedMailboxRequest, sizeof(ExtendedMailboxRequest), NULL, 0) < 0) @@ -2494,14 +2454,14 @@ through Host Adapter. */ -static boolean BusLogic_TargetDeviceInquiry(BusLogic_HostAdapter_T - *HostAdapter) +static boolean __init BusLogic_TargetDeviceInquiry(struct BusLogic_HostAdapter + *HostAdapter) { - BusLogic_InstalledDevices_T InstalledDevices; - BusLogic_InstalledDevices8_T InstalledDevicesID0to7; - BusLogic_SetupInformation_T SetupInformation; - BusLogic_SynchronousPeriod_T SynchronousPeriod; - BusLogic_RequestedReplyLength_T RequestedReplyLength; + u16 InstalledDevices; + u8 InstalledDevicesID0to7[8]; + struct BusLogic_SetupInformation SetupInformation; + u8 SynchronousPeriod[BusLogic_MaxTargetDevices]; + unsigned char RequestedReplyLength; int TargetID; /* Wait a few seconds between the Host Adapter Hard Reset which initiates @@ -2530,6 +2490,15 @@ */ if (strcmp(HostAdapter->FirmwareVersion, "4.25") >= 0) { + + /* + * Issue a Inquire Target Devices command. Inquire Target Devices only + * tests Logical Unit 0 of each Target Device unlike the Inquire Installed + * Devices commands which test Logical Units 0 - 7. Two bytes are + * returned, where byte 0 bit 0 set indicates that Target Device 0 exists, + * and so on. + */ + if (BusLogic_Command(HostAdapter, BusLogic_InquireTargetDevices, NULL, 0, &InstalledDevices, sizeof(InstalledDevices)) != sizeof(InstalledDevices)) @@ -2540,6 +2509,13 @@ } else { + + /* + * Issue an Inquire Installed Devices command. For each Target Device, + * a byte is returned where bit 0 set indicates that Logical Unit 0 + * exists, bit 1 set indicates that Logical Unit 1 exists, and so on. + */ + if (BusLogic_Command(HostAdapter, BusLogic_InquireInstalledDevicesID0to7, NULL, 0, &InstalledDevicesID0to7, sizeof(InstalledDevicesID0to7)) @@ -2577,6 +2553,12 @@ */ if (HostAdapter->FirmwareVersion[0] >= '3') { + + /* Issue a Inquire Synchronous Period command. For each Target Device, + * a byte is returned which represents the Synchronous Transfer Period + * in units of 10 nanoseconds. + */ + RequestedReplyLength = sizeof(SynchronousPeriod); if (BusLogic_Command(HostAdapter, BusLogic_InquireSynchronousPeriod, &RequestedReplyLength, sizeof(RequestedReplyLength), @@ -2598,84 +2580,6 @@ return true; } - -/* - BusLogic_ReportTargetDeviceInfo reports about the Target Devices accessible - through Host Adapter. -*/ - -/*static void BusLogic_ReportTargetDeviceInfo(BusLogic_HostAdapter_T - *HostAdapter) -{ - int TargetID; -*/ /* - Inhibit the Target Device Inquiry and Reporting if requested. - */ -/* if (BusLogic_MultiMasterHostAdapterP(HostAdapter) && - HostAdapter->DriverOptions != NULL && - HostAdapter->DriverOptions->LocalOptions.InhibitTargetInquiry) - return; -*/ /* - Report on the Target Devices found. - */ -/* for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) - { - BusLogic_TargetFlags_T *TargetFlags = &HostAdapter->TargetFlags[TargetID]; - if (TargetFlags->TargetExists && !TargetFlags->TargetInfoReported) - { - int SynchronousTransferRate = 0; - if (BusLogic_FlashPointHostAdapterP(HostAdapter)) - { - unsigned char WideTransfersActive; - FlashPoint_InquireTargetInfo( - HostAdapter->CardHandle, TargetID, - &HostAdapter->SynchronousPeriod[TargetID], - &HostAdapter->SynchronousOffset[TargetID], - &WideTransfersActive); - TargetFlags->WideTransfersActive = WideTransfersActive; - } - else if (TargetFlags->WideTransfersSupported && - (HostAdapter->WidePermitted & (1 << TargetID)) && - strcmp(HostAdapter->FirmwareVersion, "5.06L") < 0) - TargetFlags->WideTransfersActive = true; - if (HostAdapter->SynchronousPeriod[TargetID] > 0) - SynchronousTransferRate = - 100000 / HostAdapter->SynchronousPeriod[TargetID]; - if (TargetFlags->WideTransfersActive) - SynchronousTransferRate <<= 1; - if (SynchronousTransferRate >= 9950) - { - SynchronousTransferRate = (SynchronousTransferRate + 50) / 100; - BusLogic_Info("Target %d: Queue Depth %d, %sSynchronous at " - "%d.%01d MB/sec, offset %d\n", - HostAdapter, TargetID, - HostAdapter->QueueDepth[TargetID], - (TargetFlags->WideTransfersActive ? "Wide " : ""), - SynchronousTransferRate / 10, - SynchronousTransferRate % 10, - HostAdapter->SynchronousOffset[TargetID]); - } - else if (SynchronousTransferRate > 0) - { - SynchronousTransferRate = (SynchronousTransferRate + 5) / 10; - BusLogic_Info("Target %d: Queue Depth %d, %sSynchronous at " - "%d.%02d MB/sec, offset %d\n", - HostAdapter, TargetID, - HostAdapter->QueueDepth[TargetID], - (TargetFlags->WideTransfersActive ? "Wide " : ""), - SynchronousTransferRate / 100, - SynchronousTransferRate % 100, - HostAdapter->SynchronousOffset[TargetID]); - } - else BusLogic_Info("Target %d: Queue Depth %d, Asynchronous\n", - HostAdapter, TargetID, - HostAdapter->QueueDepth[TargetID]); - TargetFlags->TargetInfoReported = true; - } - } -} -*/ - /* BusLogic_InitializeHostStructure initializes the fields in the SCSI Host structure. The base, io_port, n_io_ports, irq, and dma_channel fields in the @@ -2685,9 +2589,9 @@ through explicit acquisition and release of the Host Adapter's Lock. */ -static void BusLogic_InitializeHostStructure(BusLogic_HostAdapter_T - *HostAdapter, - SCSI_Host_T *Host) +static void __init BusLogic_InitializeHostStructure(struct BusLogic_HostAdapter + *HostAdapter, + struct Scsi_Host *Host) { Host->max_id = HostAdapter->MaxTargetDevices; Host->max_lun = HostAdapter->MaxLogicalUnits; @@ -2708,10 +2612,10 @@ but instead get called for each device, we have to do things a bit differently. */ -int BusLogic_SlaveConfigure(SCSI_Device_T *Device) +static int BusLogic_SlaveConfigure(struct scsi_device *Device) { - BusLogic_HostAdapter_T *HostAdapter = - (BusLogic_HostAdapter_T *) Device->host->hostdata; + struct BusLogic_HostAdapter *HostAdapter = + (struct BusLogic_HostAdapter *) Device->host->hostdata; int TargetID = Device->id; int QueueDepth = HostAdapter->QueueDepth[TargetID]; @@ -2745,85 +2649,6 @@ } /* - BusLogic_SelectQueueDepths selects Queue Depths for each Target Device based - on the Host Adapter's Total Queue Depth and the number, type, speed, and - capabilities of the Target Devices. When called for the last Host Adapter, - it reports on the Target Device Information for all BusLogic Host Adapters - since all the Target Devices have now been probed. -*/ - -/* static void BusLogic_SelectQueueDepths(SCSI_Host_T *Host, - SCSI_Device_T *DeviceList) -{ - BusLogic_HostAdapter_T *HostAdapter = - (BusLogic_HostAdapter_T *) Host->hostdata; - int TaggedDeviceCount = 0, AutomaticTaggedDeviceCount = 0; - int UntaggedDeviceCount = 0, AutomaticTaggedQueueDepth = 0; - int AllocatedQueueDepth = 0; - SCSI_Device_T *Device; - int TargetID; - for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) - if (HostAdapter->TargetFlags[TargetID].TargetExists) - { - int QueueDepth = HostAdapter->QueueDepth[TargetID]; - if (HostAdapter->TargetFlags[TargetID].TaggedQueuingSupported && - (HostAdapter->TaggedQueuingPermitted & (1 << TargetID))) - { - TaggedDeviceCount++; - if (QueueDepth == 0) AutomaticTaggedDeviceCount++; - } - else - { - UntaggedDeviceCount++; - if (QueueDepth == 0 || - QueueDepth > HostAdapter->UntaggedQueueDepth) - { - QueueDepth = HostAdapter->UntaggedQueueDepth; - HostAdapter->QueueDepth[TargetID] = QueueDepth; - } - } - AllocatedQueueDepth += QueueDepth; - if (QueueDepth == 1) - HostAdapter->TaggedQueuingPermitted &= ~(1 << TargetID); - } - HostAdapter->TargetDeviceCount = TaggedDeviceCount + UntaggedDeviceCount; - if (AutomaticTaggedDeviceCount > 0) - { - AutomaticTaggedQueueDepth = - (HostAdapter->HostAdapterQueueDepth - AllocatedQueueDepth) - / AutomaticTaggedDeviceCount; - if (AutomaticTaggedQueueDepth > BusLogic_MaxAutomaticTaggedQueueDepth) - AutomaticTaggedQueueDepth = BusLogic_MaxAutomaticTaggedQueueDepth; - if (AutomaticTaggedQueueDepth < BusLogic_MinAutomaticTaggedQueueDepth) - AutomaticTaggedQueueDepth = BusLogic_MinAutomaticTaggedQueueDepth; - for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) - if (HostAdapter->TargetFlags[TargetID].TargetExists && - HostAdapter->QueueDepth[TargetID] == 0) - { - AllocatedQueueDepth += AutomaticTaggedQueueDepth; - HostAdapter->QueueDepth[TargetID] = AutomaticTaggedQueueDepth; - } - } - for (Device = DeviceList; Device != NULL; Device = Device->next) - if (Device->host == Host) - Device->queue_depth = HostAdapter->QueueDepth[Device->id]; -*/ /* Allocate an extra CCB for each Target Device for a Bus Device Reset. */ -/* AllocatedQueueDepth += HostAdapter->TargetDeviceCount; - if (AllocatedQueueDepth > HostAdapter->DriverQueueDepth) - AllocatedQueueDepth = HostAdapter->DriverQueueDepth; - BusLogic_CreateAdditionalCCBs(HostAdapter, - AllocatedQueueDepth - - HostAdapter->AllocatedCCBs, - false); - if (HostAdapter == BusLogic_LastRegisteredHostAdapter) - for (HostAdapter = BusLogic_FirstRegisteredHostAdapter; - HostAdapter != NULL; - HostAdapter = HostAdapter->Next) - BusLogic_ReportTargetDeviceInfo(HostAdapter); -} -*/ - -/* BusLogic_DetectHostAdapter probes for BusLogic Host Adapters at the standard I/O Addresses where they may be located, initializing, registering, and reporting the configuration of each BusLogic Host Adapter it finds. It @@ -2831,13 +2656,13 @@ registered. */ -int BusLogic_DetectHostAdapter(SCSI_Host_Template_T *HostTemplate) +static int __init BusLogic_DetectHostAdapter(struct scsi_host_template *HostTemplate) { int BusLogicHostAdapterCount = 0, DriverOptionsIndex = 0, ProbeIndex; - BusLogic_HostAdapter_T *PrototypeHostAdapter; + struct BusLogic_HostAdapter *PrototypeHostAdapter; if (BusLogic_ProbeOptions.NoProbe) return 0; - BusLogic_ProbeInfoList = (BusLogic_ProbeInfo_T *) - kmalloc(BusLogic_MaxHostAdapters * sizeof(BusLogic_ProbeInfo_T), + BusLogic_ProbeInfoList = (struct BusLogic_ProbeInfo *) + kmalloc(BusLogic_MaxHostAdapters * sizeof(struct BusLogic_ProbeInfo), GFP_ATOMIC); if (BusLogic_ProbeInfoList == NULL) { @@ -2845,9 +2670,9 @@ return 0; } memset(BusLogic_ProbeInfoList, 0, - BusLogic_MaxHostAdapters * sizeof(BusLogic_ProbeInfo_T)); - PrototypeHostAdapter = (BusLogic_HostAdapter_T *) - kmalloc(sizeof(BusLogic_HostAdapter_T), GFP_ATOMIC); + BusLogic_MaxHostAdapters * sizeof(struct BusLogic_ProbeInfo)); + PrototypeHostAdapter = (struct BusLogic_HostAdapter *) + kmalloc(sizeof(struct BusLogic_HostAdapter), GFP_ATOMIC); if (PrototypeHostAdapter == NULL) { kfree(BusLogic_ProbeInfoList); @@ -2855,7 +2680,7 @@ "Host Adapter\n", NULL); return 0; } - memset(PrototypeHostAdapter, 0, sizeof(BusLogic_HostAdapter_T)); + memset(PrototypeHostAdapter, 0, sizeof(struct BusLogic_HostAdapter)); #ifdef MODULE if (BusLogic != NULL) BusLogic_Setup(BusLogic); @@ -2863,11 +2688,11 @@ BusLogic_InitializeProbeInfoList(PrototypeHostAdapter); for (ProbeIndex = 0; ProbeIndex < BusLogic_ProbeInfoCount; ProbeIndex++) { - BusLogic_ProbeInfo_T *ProbeInfo = &BusLogic_ProbeInfoList[ProbeIndex]; - BusLogic_HostAdapter_T *HostAdapter = PrototypeHostAdapter; - SCSI_Host_T *Host; + struct BusLogic_ProbeInfo *ProbeInfo = &BusLogic_ProbeInfoList[ProbeIndex]; + struct BusLogic_HostAdapter *HostAdapter = PrototypeHostAdapter; + struct Scsi_Host *Host; if (ProbeInfo->IO_Address == 0) continue; - memset(HostAdapter, 0, sizeof(BusLogic_HostAdapter_T)); + memset(HostAdapter, 0, sizeof(struct BusLogic_HostAdapter)); HostAdapter->HostAdapterType = ProbeInfo->HostAdapterType; HostAdapter->HostAdapterBusType = ProbeInfo->HostAdapterBusType; HostAdapter->IO_Address = ProbeInfo->IO_Address; @@ -2914,21 +2739,18 @@ /* Register the SCSI Host structure. */ - Host = scsi_register(HostTemplate, sizeof(BusLogic_HostAdapter_T)); + + Host = scsi_host_alloc(HostTemplate, sizeof(struct BusLogic_HostAdapter)); if(Host==NULL) { release_region(HostAdapter->IO_Address, HostAdapter->AddressCount); continue; } - HostAdapter = (BusLogic_HostAdapter_T *) Host->hostdata; - memcpy(HostAdapter, PrototypeHostAdapter, sizeof(BusLogic_HostAdapter_T)); + HostAdapter = (struct BusLogic_HostAdapter *) Host->hostdata; + memcpy(HostAdapter, PrototypeHostAdapter, sizeof(struct BusLogic_HostAdapter)); HostAdapter->SCSI_Host = Host; HostAdapter->HostNumber = Host->host_no; /* - * This function is deprecated - Host->select_queue_depths = BusLogic_SelectQueueDepths; - */ - /* Add Host Adapter to the end of the list of registered BusLogic Host Adapters. */ @@ -2963,10 +2785,12 @@ BusLogic_DestroyCCBs(HostAdapter); BusLogic_ReleaseResources(HostAdapter); BusLogic_UnregisterHostAdapter(HostAdapter); - scsi_unregister(Host); + scsi_host_put(Host); } else { BusLogic_InitializeHostStructure(HostAdapter, Host); + scsi_add_host(Host, NULL); + scsi_scan_host(Host); BusLogicHostAdapterCount++; } } @@ -2983,7 +2807,7 @@ BusLogic_DestroyCCBs(HostAdapter); BusLogic_ReleaseResources(HostAdapter); BusLogic_UnregisterHostAdapter(HostAdapter); - scsi_unregister(Host); + scsi_host_put(Host); } } kfree(PrototypeHostAdapter); @@ -2999,10 +2823,10 @@ unregisters the BusLogic Host Adapter. */ -int BusLogic_ReleaseHostAdapter(SCSI_Host_T *Host) +static int __exit BusLogic_ReleaseHostAdapter(struct Scsi_Host *Host) { - BusLogic_HostAdapter_T *HostAdapter = - (BusLogic_HostAdapter_T *) Host->hostdata; + struct BusLogic_HostAdapter *HostAdapter = + (struct BusLogic_HostAdapter *) Host->hostdata; /* FlashPoint Host Adapters must first be released by the FlashPoint SCCB Manager. @@ -3031,9 +2855,9 @@ BusLogic_QueueCompletedCCB queues CCB for completion processing. */ -static void BusLogic_QueueCompletedCCB(BusLogic_CCB_T *CCB) +static void BusLogic_QueueCompletedCCB(struct BusLogic_CCB *CCB) { - BusLogic_HostAdapter_T *HostAdapter = CCB->HostAdapter; + struct BusLogic_HostAdapter *HostAdapter = CCB->HostAdapter; CCB->Status = BusLogic_CCB_Completed; CCB->Next = NULL; if (HostAdapter->FirstCompletedCCB == NULL) @@ -3055,10 +2879,10 @@ the Host Adapter Status and Target Device Status. */ -static int BusLogic_ComputeResultCode(BusLogic_HostAdapter_T *HostAdapter, - BusLogic_HostAdapterStatus_T +static int BusLogic_ComputeResultCode(struct BusLogic_HostAdapter *HostAdapter, + enum BusLogic_HostAdapterStatus HostAdapterStatus, - BusLogic_TargetDeviceStatus_T + enum BusLogic_TargetDeviceStatus TargetDeviceStatus) { int HostStatus; @@ -3114,7 +2938,7 @@ Incoming Mailbox entries for completion processing. */ -static void BusLogic_ScanIncomingMailboxes(BusLogic_HostAdapter_T *HostAdapter) +static void BusLogic_ScanIncomingMailboxes(struct BusLogic_HostAdapter *HostAdapter) { /* Scan through the Incoming Mailboxes in Strict Round Robin fashion, saving @@ -3128,9 +2952,9 @@ was processed, and so completion processing has already occurred and no further action should be taken. */ - BusLogic_IncomingMailbox_T *NextIncomingMailbox = + struct BusLogic_IncomingMailbox *NextIncomingMailbox = HostAdapter->NextIncomingMailbox; - BusLogic_CompletionCode_T CompletionCode; + enum BusLogic_CompletionCode CompletionCode; while ((CompletionCode = NextIncomingMailbox->CompletionCode) != BusLogic_IncomingMailboxFree) { @@ -3141,7 +2965,7 @@ replace bus_to_virt() or else this code is going to become very innefficient. */ - BusLogic_CCB_T *CCB = (BusLogic_CCB_T *) + struct BusLogic_CCB *CCB = (struct BusLogic_CCB *) Bus_to_Virtual(NextIncomingMailbox->CCB); if (CompletionCode != BusLogic_AbortedCommandNotFound) { @@ -3182,14 +3006,14 @@ should already have been acquired by the caller. */ -static void BusLogic_ProcessCompletedCCBs(BusLogic_HostAdapter_T *HostAdapter) +static void BusLogic_ProcessCompletedCCBs(struct BusLogic_HostAdapter *HostAdapter) { if (HostAdapter->ProcessCompletedCCBsActive) return; HostAdapter->ProcessCompletedCCBsActive = true; while (HostAdapter->FirstCompletedCCB != NULL) { - BusLogic_CCB_T *CCB = HostAdapter->FirstCompletedCCB; - SCSI_Command_T *Command = CCB->Command; + struct BusLogic_CCB *CCB = HostAdapter->FirstCompletedCCB; + struct scsi_cmnd *Command = CCB->Command; HostAdapter->FirstCompletedCCB = CCB->Next; if (HostAdapter->FirstCompletedCCB == NULL) HostAdapter->LastCompletedCCB = NULL; @@ -3221,7 +3045,7 @@ */ while (Command != NULL) { - SCSI_Command_T *NextCommand = Command->reset_chain; + struct scsi_cmnd *NextCommand = Command->reset_chain; Command->reset_chain = NULL; Command->result = DID_RESET << 16; Command->scsi_done(Command); @@ -3312,10 +3136,10 @@ if (CCB->CDB[0] == INQUIRY && CCB->CDB[1] == 0 && CCB->HostAdapterStatus == BusLogic_CommandCompletedNormally) { - BusLogic_TargetFlags_T *TargetFlags = + struct BusLogic_TargetFlags *TargetFlags = &HostAdapter->TargetFlags[CCB->TargetID]; - SCSI_Inquiry_T *InquiryResult = - (SCSI_Inquiry_T *) Command->request_buffer; + struct SCSI_Inquiry *InquiryResult = + (struct SCSI_Inquiry *) Command->request_buffer; TargetFlags->TargetExists = true; TargetFlags->TaggedQueuingSupported = InquiryResult->CmdQue; TargetFlags->WideTransfersSupported = InquiryResult->WBus16; @@ -3341,11 +3165,11 @@ static irqreturn_t BusLogic_InterruptHandler(int IRQ_Channel, void *DeviceIdentifier, - Registers_T *InterruptRegisters) + struct pt_regs *InterruptRegisters) { - BusLogic_HostAdapter_T *HostAdapter = - (BusLogic_HostAdapter_T *) DeviceIdentifier; - ProcessorFlags_T ProcessorFlags; + struct BusLogic_HostAdapter *HostAdapter = + (struct BusLogic_HostAdapter *) DeviceIdentifier; + unsigned long ProcessorFlags; /* Acquire exclusive access to Host Adapter. */ @@ -3355,12 +3179,12 @@ */ if (BusLogic_MultiMasterHostAdapterP(HostAdapter)) { - BusLogic_InterruptRegister_T InterruptRegister; + union BusLogic_InterruptRegister InterruptRegister; /* Read the Host Adapter Interrupt Register. */ InterruptRegister.All = BusLogic_ReadInterruptRegister(HostAdapter); - if (InterruptRegister.Bits.InterruptValid) + if (InterruptRegister.InterruptValid) { /* Acknowledge the interrupt and reset the Host Adapter @@ -3373,11 +3197,11 @@ and Outgoing Mailbox Available Interrupts are ignored, as they are never enabled. */ - if (InterruptRegister.Bits.ExternalBusReset) + if (InterruptRegister.ExternalBusReset) HostAdapter->HostAdapterExternalReset = true; - else if (InterruptRegister.Bits.IncomingMailboxLoaded) + else if (InterruptRegister.IncomingMailboxLoaded) BusLogic_ScanIncomingMailboxes(HostAdapter); - else if (InterruptRegister.Bits.CommandComplete) + else if (InterruptRegister.CommandComplete) HostAdapter->HostAdapterCommandCompleted = true; } } @@ -3409,11 +3233,20 @@ /* Reset the Host Adapter if requested. */ - if (HostAdapter->HostAdapterExternalReset || - HostAdapter->HostAdapterInternalError) + if (HostAdapter->HostAdapterExternalReset) { - BusLogic_ResetHostAdapter(HostAdapter, NULL, 0); + BusLogic_Warning("Resetting %s due to External SCSI Bus Reset\n", + HostAdapter, HostAdapter->FullModelName); + BusLogic_IncrementErrorCounter(&HostAdapter->ExternalHostAdapterResets); + BusLogic_ResetHostAdapter(HostAdapter, false); HostAdapter->HostAdapterExternalReset = false; + } + else if (HostAdapter->HostAdapterInternalError) + { + BusLogic_Warning("Resetting %s due to Host Adapter Internal Error\n", + HostAdapter, HostAdapter->FullModelName); + BusLogic_IncrementErrorCounter(&HostAdapter->HostAdapterInternalErrors); + BusLogic_ResetHostAdapter(HostAdapter, true); HostAdapter->HostAdapterInternalError = false; } /* @@ -3430,12 +3263,12 @@ already have been acquired by the caller. */ -static boolean BusLogic_WriteOutgoingMailbox(BusLogic_HostAdapter_T +static boolean BusLogic_WriteOutgoingMailbox(struct BusLogic_HostAdapter *HostAdapter, - BusLogic_ActionCode_T ActionCode, - BusLogic_CCB_T *CCB) + enum BusLogic_ActionCode ActionCode, + struct BusLogic_CCB *CCB) { - BusLogic_OutgoingMailbox_T *NextOutgoingMailbox; + struct BusLogic_OutgoingMailbox *NextOutgoingMailbox; NextOutgoingMailbox = HostAdapter->NextOutgoingMailbox; if (NextOutgoingMailbox->ActionCode == BusLogic_OutgoingMailboxFree) { @@ -3466,13 +3299,14 @@ static int BusLogic_host_reset(Scsi_Cmnd *SCpnt) { - BusLogic_HostAdapter_T *HostAdapter = - (BusLogic_HostAdapter_T *) SCpnt->device->host->hostdata; + struct BusLogic_HostAdapter *HostAdapter = + (struct BusLogic_HostAdapter *) SCpnt->device->host->hostdata; - /* printk("BusLogic_host_reset\n"); */ - HostAdapter->HostAdapterExternalReset = 1; - BusLogic_ResetHostAdapter(HostAdapter, NULL, 0); - return SUCCESS; + unsigned int id = SCpnt->device->id; + struct BusLogic_TargetStatistics *stats = &HostAdapter->TargetStatistics[id]; + BusLogic_IncrementErrorCounter(&stats->HostAdapterResetsRequested); + + return BusLogic_ResetHostAdapter(HostAdapter, false); } /* @@ -3480,14 +3314,14 @@ Outgoing Mailbox for execution by the associated Host Adapter. */ -int BusLogic_QueueCommand(SCSI_Command_T *Command, - void (*CompletionRoutine)(SCSI_Command_T *)) +static int BusLogic_QueueCommand(struct scsi_cmnd *Command, + void (*CompletionRoutine)(struct scsi_cmnd *)) { - BusLogic_HostAdapter_T *HostAdapter = - (BusLogic_HostAdapter_T *) Command->device->host->hostdata; - BusLogic_TargetFlags_T *TargetFlags = + struct BusLogic_HostAdapter *HostAdapter = + (struct BusLogic_HostAdapter *) Command->device->host->hostdata; + struct BusLogic_TargetFlags *TargetFlags = &HostAdapter->TargetFlags[Command->device->id]; - BusLogic_TargetStatistics_T *TargetStatistics = + struct BusLogic_TargetStatistics *TargetStatistics = HostAdapter->TargetStatistics; unsigned char *CDB = Command->cmnd; int CDB_Length = Command->cmd_len; @@ -3496,7 +3330,7 @@ void *BufferPointer = Command->request_buffer; int BufferLength = Command->request_bufflen; int SegmentCount = Command->use_sg; - BusLogic_CCB_T *CCB; + struct BusLogic_CCB *CCB; /* SCSI REQUEST_SENSE commands will be executed automatically by the Host Adapter for any errors, so they should not be executed explicitly unless @@ -3541,13 +3375,13 @@ } else if (SegmentCount != 0) { - SCSI_ScatterList_T *ScatterList = (SCSI_ScatterList_T *) BufferPointer; + struct scatterlist *ScatterList = (struct scatterlist *) BufferPointer; int Segment, Count; Count = pci_map_sg(HostAdapter->PCI_Device, ScatterList, SegmentCount, scsi_to_pci_dma_dir(Command->sc_data_direction)); CCB->Opcode = BusLogic_InitiatorCCB_ScatterGather; - CCB->DataLength = Count * sizeof(BusLogic_ScatterGatherSegment_T); + CCB->DataLength = Count * sizeof(struct BusLogic_ScatterGatherSegment); if (BusLogic_MultiMasterHostAdapterP(HostAdapter)) CCB->DataPointer = (unsigned int)CCB->DMA_Handle + ((unsigned long)&CCB->ScatterGatherList - @@ -3625,7 +3459,7 @@ } if (TargetFlags->TaggedQueuingActive) { - BusLogic_QueueTag_T QueueTag = BusLogic_SimpleQueueTag; + enum BusLogic_QueueTag QueueTag = BusLogic_SimpleQueueTag; /* When using Tagged Queuing with Simple Queue Tags, it appears that disk drive controllers do not guarantee that a queued command will not @@ -3718,14 +3552,13 @@ BusLogic_AbortCommand aborts Command if possible. */ -int BusLogic_AbortCommand(SCSI_Command_T *Command) +static int BusLogic_AbortCommand(struct scsi_cmnd *Command) { - BusLogic_HostAdapter_T *HostAdapter = - (BusLogic_HostAdapter_T *) Command->device->host->hostdata; + struct BusLogic_HostAdapter *HostAdapter = + (struct BusLogic_HostAdapter *) Command->device->host->hostdata; int TargetID = Command->device->id; - BusLogic_CCB_T *CCB; - int Result; + struct BusLogic_CCB *CCB; BusLogic_IncrementErrorCounter( &HostAdapter->TargetStatistics[TargetID].CommandAbortsRequested); /* @@ -3735,7 +3568,7 @@ { BusLogic_Warning("Unable to Abort Command to Target %d - " "Already Completed\n", HostAdapter, TargetID); - return SCSI_ABORT_NOT_RUNNING; + return SUCCESS; } /* Attempt to find an Active CCB for this Command. If no Active CCB for this @@ -3747,19 +3580,19 @@ { BusLogic_Warning("Unable to Abort Command to Target %d - " "No CCB Found\n", HostAdapter, TargetID); - return SCSI_ABORT_NOT_RUNNING; + return SUCCESS; } else if (CCB->Status == BusLogic_CCB_Completed) { BusLogic_Warning("Unable to Abort Command to Target %d - " "CCB Completed\n", HostAdapter, TargetID); - return SCSI_ABORT_NOT_RUNNING; + return SUCCESS; } else if (CCB->Status == BusLogic_CCB_Reset) { BusLogic_Warning("Unable to Abort Command to Target %d - " "CCB Reset\n", HostAdapter, TargetID); - return SCSI_ABORT_PENDING; + return SUCCESS; } if (BusLogic_MultiMasterHostAdapterP(HostAdapter)) { @@ -3779,7 +3612,7 @@ BusLogic_Warning("Unable to Abort CCB #%ld to Target %d - " "Abort Tag Not Supported\n", HostAdapter, CCB->SerialNumber, TargetID); - Result = SCSI_ABORT_SNOOZE; + return FAILURE; } else if (BusLogic_WriteOutgoingMailbox( HostAdapter, BusLogic_MailboxAbortCommand, CCB)) @@ -3788,14 +3621,14 @@ HostAdapter, CCB->SerialNumber, TargetID); BusLogic_IncrementErrorCounter( &HostAdapter->TargetStatistics[TargetID].CommandAbortsAttempted); - Result = SCSI_ABORT_PENDING; + return SUCCESS; } else { BusLogic_Warning("Unable to Abort CCB #%ld to Target %d - " "No Outgoing Mailboxes\n", HostAdapter, CCB->SerialNumber, TargetID); - Result = SCSI_ABORT_BUSY; + return FAILURE; } } else @@ -3813,413 +3646,63 @@ BusLogic_QueueCompletedCCB been called, or it may still be pending. */ - Result = SCSI_ABORT_PENDING; if (CCB->Status == BusLogic_CCB_Completed) { BusLogic_ProcessCompletedCCBs(HostAdapter); - Result = SCSI_ABORT_SUCCESS; } + return SUCCESS; } - return Result; + return SUCCESS; } - /* BusLogic_ResetHostAdapter resets Host Adapter if possible, marking all currently executing SCSI Commands as having been Reset. */ -static int BusLogic_ResetHostAdapter(BusLogic_HostAdapter_T *HostAdapter, - SCSI_Command_T *Command, - unsigned int ResetFlags) -{ - BusLogic_CCB_T *CCB; - int TargetID, Result; - boolean HardReset; - if (HostAdapter->HostAdapterExternalReset) - { - BusLogic_IncrementErrorCounter(&HostAdapter->ExternalHostAdapterResets); - HardReset = false; - } - else if (HostAdapter->HostAdapterInternalError) - { - BusLogic_IncrementErrorCounter(&HostAdapter->HostAdapterInternalErrors); - HardReset = true; - } - else - { - BusLogic_IncrementErrorCounter( - &HostAdapter->TargetStatistics[Command->device->id] - .HostAdapterResetsRequested); - HardReset = true; - } - /* - If this is an Asynchronous Reset and this Command has already completed, - then no Reset is necessary. - */ - if (ResetFlags & SCSI_RESET_ASYNCHRONOUS) - { - TargetID = Command->device->id; - if (Command->serial_number != Command->serial_number_at_timeout) - { - BusLogic_Warning("Unable to Reset Command to Target %d - " - "Already Completed or Reset\n", - HostAdapter, TargetID); - Result = SCSI_RESET_NOT_RUNNING; - goto Done; - } - for (CCB = HostAdapter->All_CCBs; CCB != NULL; CCB = CCB->NextAll) - if (CCB->Command == Command) break; - if (CCB == NULL) - { - BusLogic_Warning("Unable to Reset Command to Target %d - " - "No CCB Found\n", HostAdapter, TargetID); - Result = SCSI_RESET_NOT_RUNNING; - goto Done; - } - else if (CCB->Status == BusLogic_CCB_Completed) - { - BusLogic_Warning("Unable to Reset Command to Target %d - " - "CCB Completed\n", HostAdapter, TargetID); - Result = SCSI_RESET_NOT_RUNNING; - goto Done; - } - else if (CCB->Status == BusLogic_CCB_Reset && - HostAdapter->BusDeviceResetPendingCCB[TargetID] == NULL) - { - BusLogic_Warning("Unable to Reset Command to Target %d - " - "Reset Pending\n", HostAdapter, TargetID); - Result = SCSI_RESET_PENDING; - goto Done; - } - } - if (Command == NULL) - { - if (HostAdapter->HostAdapterInternalError) - BusLogic_Warning("Resetting %s due to Host Adapter Internal Error\n", - HostAdapter, HostAdapter->FullModelName); - else BusLogic_Warning("Resetting %s due to External SCSI Bus Reset\n", - HostAdapter, HostAdapter->FullModelName); - } - else - { - BusLogic_Warning("Resetting %s due to Target %d\n", HostAdapter, - HostAdapter->FullModelName, Command->device->id); - BusLogic_IncrementErrorCounter( - &HostAdapter->TargetStatistics[Command->device->id] - .HostAdapterResetsAttempted); - } - /* - Attempt to Reset and Reinitialize the Host Adapter. - */ - if (!(BusLogic_HardwareResetHostAdapter(HostAdapter, HardReset) && - BusLogic_InitializeHostAdapter(HostAdapter))) - { - BusLogic_Error("Resetting %s Failed\n", HostAdapter, - HostAdapter->FullModelName); - Result = SCSI_RESET_ERROR; - goto Done; - } - if (Command != NULL) - BusLogic_IncrementErrorCounter( - &HostAdapter->TargetStatistics[Command->device->id] - .HostAdapterResetsCompleted); - /* - Mark all currently executing CCBs as having been Reset. - */ - for (CCB = HostAdapter->All_CCBs; CCB != NULL; CCB = CCB->NextAll) - if (CCB->Status == BusLogic_CCB_Active) - CCB->Status = BusLogic_CCB_Reset; - /* - Wait a few seconds between the Host Adapter Hard Reset which initiates - a SCSI Bus Reset and issuing any SCSI Commands. Some SCSI devices get - confused if they receive SCSI Commands too soon after a SCSI Bus Reset. - Note that a timer interrupt may occur here, but all active CCBs have - already been marked Reset and so a reentrant call will return Pending. - */ - if (HardReset) - { - BusLogic_ReleaseHostAdapterLock(HostAdapter); - BusLogic_Delay(HostAdapter->BusSettleTime); - BusLogic_AcquireHostAdapterLock(HostAdapter); - } - /* - If this is a Synchronous Reset, perform completion processing for - the Command being Reset. - */ - if (ResetFlags & SCSI_RESET_SYNCHRONOUS) - { - Command->result = DID_RESET << 16; - Command->scsi_done(Command); - } - /* - Perform completion processing for all CCBs marked as Reset. - */ - for (CCB = HostAdapter->All_CCBs; CCB != NULL; CCB = CCB->NextAll) - if (CCB->Status == BusLogic_CCB_Reset) - { - Command = CCB->Command; - BusLogic_DeallocateCCB(CCB); -#if 0 /* this needs to be redone different for new EH */ - while (Command != NULL) - { - SCSI_Command_T *NextCommand = Command->reset_chain; - Command->reset_chain = NULL; - Command->result = DID_RESET << 16; - Command->scsi_done(Command); - Command = NextCommand; - } -#endif - } - for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) - { - HostAdapter->LastResetAttempted[TargetID] = jiffies; - HostAdapter->LastResetCompleted[TargetID] = jiffies; - } - Result = SCSI_RESET_SUCCESS | SCSI_RESET_HOST_RESET; -Done: - return Result; -} - -#if 0 /* old-style EH code references a dead struct scsi_cmnd member */ -/* - BusLogic_SendBusDeviceReset sends a Bus Device Reset to the Target - Device associated with Command. -*/ - -static int BusLogic_SendBusDeviceReset(BusLogic_HostAdapter_T *HostAdapter, - SCSI_Command_T *Command, - unsigned int ResetFlags) +static int BusLogic_ResetHostAdapter(struct BusLogic_HostAdapter *HostAdapter, + boolean HardReset) { - int TargetID = Command->device->id; - BusLogic_CCB_T *CCB, *XCCB; - int Result = -1; - BusLogic_IncrementErrorCounter( - &HostAdapter->TargetStatistics[TargetID].BusDeviceResetsRequested); - /* - If this is an Asynchronous Reset and this Command has already completed, - then no Reset is necessary. - */ - if (ResetFlags & SCSI_RESET_ASYNCHRONOUS) - { - if (Command->serial_number != Command->serial_number_at_timeout) - { - BusLogic_Warning("Unable to Reset Command to Target %d - " - "Already Completed\n", HostAdapter, TargetID); - Result = SCSI_RESET_NOT_RUNNING; - goto Done; - } - for (CCB = HostAdapter->All_CCBs; CCB != NULL; CCB = CCB->NextAll) - if (CCB->Command == Command) break; - if (CCB == NULL) - { - BusLogic_Warning("Unable to Reset Command to Target %d - " - "No CCB Found\n", HostAdapter, TargetID); - Result = SCSI_RESET_NOT_RUNNING; - goto Done; - } - else if (CCB->Status == BusLogic_CCB_Completed) - { - BusLogic_Warning("Unable to Reset Command to Target %d - " - "CCB Completed\n", HostAdapter, TargetID); - Result = SCSI_RESET_NOT_RUNNING; - goto Done; - } - else if (CCB->Status == BusLogic_CCB_Reset) - { - BusLogic_Warning("Unable to Reset Command to Target %d - " - "Reset Pending\n", HostAdapter, TargetID); - Result = SCSI_RESET_PENDING; - goto Done; - } - else if (HostAdapter->BusDeviceResetPendingCCB[TargetID] != NULL) - { - BusLogic_Warning("Bus Device Reset already pending to Target %d\n", - HostAdapter, TargetID); - goto Done; - } - } - /* - If this is a Synchronous Reset and a Bus Device Reset is already pending - for this Target Device, do not send a second one. Add this Command to - the list of Commands for which completion processing must be performed - when the Bus Device Reset CCB completes. - */ - if (ResetFlags & SCSI_RESET_SYNCHRONOUS) - if ((CCB = HostAdapter->BusDeviceResetPendingCCB[TargetID]) != NULL) - { - Command->reset_chain = CCB->Command; - CCB->Command = Command; - BusLogic_Warning("Unable to Reset Command to Target %d - " - "Reset Pending\n", HostAdapter, TargetID); - Result = SCSI_RESET_PENDING; - goto Done; - } - if (BusLogic_MultiMasterHostAdapterP(HostAdapter)) - { - /* - MultiMaster Firmware versions prior to 5.xx treat a Bus Device Reset as - a non-tagged command. Since non-tagged commands are not sent by the - Host Adapter until the queue of outstanding tagged commands has - completed, it is effectively impossible to send a Bus Device Reset - while there are tagged commands outstanding. Therefore, in that case a - full Host Adapter Hard Reset and SCSI Bus Reset must be done. - */ - if (HostAdapter->TargetFlags[TargetID].TaggedQueuingActive && - HostAdapter->ActiveCommands[TargetID] > 0 && - HostAdapter->FirmwareVersion[0] < '5') - goto Done; - } - /* - Allocate a CCB from the Host Adapter's free list. In the unlikely event - that there are none available and memory allocation fails, attempt a full - Host Adapter Hard Reset and SCSI Bus Reset. - */ - CCB = BusLogic_AllocateCCB(HostAdapter); - if (CCB == NULL) goto Done; - BusLogic_Warning("Sending Bus Device Reset CCB #%ld to Target %d\n", - HostAdapter, CCB->SerialNumber, TargetID); - CCB->Opcode = BusLogic_BusDeviceReset; - CCB->TargetID = TargetID; - /* - For Synchronous Resets, arrange for the interrupt handler to perform - completion processing for the Command being Reset. - */ - if (ResetFlags & SCSI_RESET_SYNCHRONOUS) - { - Command->reset_chain = NULL; - CCB->Command = Command; - } - if (BusLogic_MultiMasterHostAdapterP(HostAdapter)) - { - /* - Attempt to write an Outgoing Mailbox with the Bus Device Reset CCB. - If sending a Bus Device Reset is impossible, attempt a full Host - Adapter Hard Reset and SCSI Bus Reset. - */ - if (!(BusLogic_WriteOutgoingMailbox( - HostAdapter, BusLogic_MailboxStartCommand, CCB))) - { - BusLogic_Warning("Unable to write Outgoing Mailbox for " - "Bus Device Reset\n", HostAdapter); - BusLogic_DeallocateCCB(CCB); - goto Done; - } - } - else - { - /* - Call the FlashPoint SCCB Manager to start execution of the CCB. - */ - CCB->Status = BusLogic_CCB_Active; - HostAdapter->ActiveCommands[TargetID]++; - FlashPoint_StartCCB(HostAdapter->CardHandle, CCB); - } - /* - If there is a currently executing CCB in the Host Adapter for this Command - (i.e. this is an Asynchronous Reset), then an Incoming Mailbox entry may be - made with a completion code of BusLogic_HostAdapterAssertedBusDeviceReset. - If there is no active CCB for this Command (i.e. this is a Synchronous - Reset), then the Bus Device Reset CCB's Command field will have been set - to the Command so that the interrupt for the completion of the Bus Device - Reset can call the Completion Routine for the Command. On successful - execution of a Bus Device Reset, older firmware versions did return the - pending CCBs with the appropriate completion code, but more recent firmware - versions only return the Bus Device Reset CCB itself. This driver handles - both cases by marking all the currently executing CCBs to this Target - Device as Reset. When the Bus Device Reset CCB is processed by the - interrupt handler, any remaining CCBs marked as Reset will have completion - processing performed. - */ - BusLogic_IncrementErrorCounter( - &HostAdapter->TargetStatistics[TargetID].BusDeviceResetsAttempted); - HostAdapter->BusDeviceResetPendingCCB[TargetID] = CCB; - HostAdapter->LastResetAttempted[TargetID] = jiffies; - for (XCCB = HostAdapter->All_CCBs; XCCB != NULL; XCCB = XCCB->NextAll) - if (XCCB->Status == BusLogic_CCB_Active && XCCB->TargetID == TargetID) - XCCB->Status = BusLogic_CCB_Reset; - /* - FlashPoint Host Adapters may have already completed the Bus Device - Reset and BusLogic_QueueCompletedCCB been called, or it may still be - pending. - */ - Result = SCSI_RESET_PENDING; - if (BusLogic_FlashPointHostAdapterP(HostAdapter)) - if (CCB->Status == BusLogic_CCB_Completed) - { - BusLogic_ProcessCompletedCCBs(HostAdapter); - Result = SCSI_RESET_SUCCESS; - } - /* - If a Bus Device Reset was not possible for some reason, force a full - Host Adapter Hard Reset and SCSI Bus Reset. - */ -Done: - if (Result < 0) - Result = BusLogic_ResetHostAdapter(HostAdapter, Command, ResetFlags); - return Result; -} - - -/* - BusLogic_ResetCommand takes appropriate action to reset Command. -*/ + struct BusLogic_CCB *CCB; + int TargetID; -int BusLogic_ResetCommand(SCSI_Command_T *Command, unsigned int ResetFlags) -{ - BusLogic_HostAdapter_T *HostAdapter = - (BusLogic_HostAdapter_T *) Command->device->host->hostdata; - int TargetID = Command->device->id; - BusLogic_ErrorRecoveryStrategy_T - ErrorRecoveryStrategy = HostAdapter->ErrorRecoveryStrategy[TargetID]; - /* - Disable Tagged Queuing if it is active for this Target Device and if - it has been less than 10 minutes since the last reset occurred, or since - the system was initialized if no prior resets have occurred. - */ - if (HostAdapter->TargetFlags[TargetID].TaggedQueuingActive && - jiffies - HostAdapter->LastResetCompleted[TargetID] < 10*60*HZ) - { - HostAdapter->TaggedQueuingPermitted &= ~(1 << TargetID); - HostAdapter->TargetFlags[TargetID].TaggedQueuingActive = false; - BusLogic_Warning("Tagged Queuing now disabled for Target %d\n", - HostAdapter, TargetID); - } - switch (ErrorRecoveryStrategy) - { - case BusLogic_ErrorRecovery_Default: - if (ResetFlags & SCSI_RESET_SUGGEST_HOST_RESET) - return BusLogic_ResetHostAdapter(HostAdapter, Command, ResetFlags); - else if (ResetFlags & SCSI_RESET_SUGGEST_BUS_RESET) - return BusLogic_ResetHostAdapter(HostAdapter, Command, ResetFlags); - /* Fall through to Bus Device Reset case. */ - case BusLogic_ErrorRecovery_BusDeviceReset: - /* - The Bus Device Reset Error Recovery Strategy only graduates to a Hard - Reset when no commands have completed successfully since the last Bus - Device Reset and it has been at least 100 milliseconds. This prevents - a sequence of commands that all timeout together from immediately - forcing a Hard Reset before the Bus Device Reset has had a chance to - clear the error condition. - */ - if (HostAdapter->TargetFlags[TargetID].CommandSuccessfulFlag || - jiffies - HostAdapter->LastResetAttempted[TargetID] < HZ/10) - { - HostAdapter->TargetFlags[TargetID].CommandSuccessfulFlag = false; - return BusLogic_SendBusDeviceReset(HostAdapter, Command, ResetFlags); + /* + * Attempt to Reset and Reinitialize the Host Adapter. + */ + + if (!(BusLogic_HardwareResetHostAdapter(HostAdapter, HardReset) && + BusLogic_InitializeHostAdapter(HostAdapter))) { + BusLogic_Error("Resetting %s Failed\n", HostAdapter, + HostAdapter->FullModelName); + return FAILURE; + } + + /* + * Deallocate all currently executing CCBs. + */ + + for (CCB = HostAdapter->All_CCBs; CCB != NULL; CCB = CCB->NextAll) + if (CCB->Status == BusLogic_CCB_Active) + BusLogic_DeallocateCCB(CCB); + /* + * Wait a few seconds between the Host Adapter Hard Reset which + * initiates a SCSI Bus Reset and issuing any SCSI Commands. Some + * SCSI devices get confused if they receive SCSI Commands too soon + * after a SCSI Bus Reset. + */ + + if (HardReset) { + BusLogic_ReleaseHostAdapterLock(HostAdapter); + BusLogic_Delay(HostAdapter->BusSettleTime); + BusLogic_AcquireHostAdapterLock(HostAdapter); + } + + for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) { + HostAdapter->LastResetAttempted[TargetID] = jiffies; + HostAdapter->LastResetCompleted[TargetID] = jiffies; } - /* Fall through to Hard Reset case. */ - case BusLogic_ErrorRecovery_HardReset: - return BusLogic_ResetHostAdapter(HostAdapter, Command, ResetFlags); - case BusLogic_ErrorRecovery_None: - BusLogic_Warning("Error Recovery for Target %d Suppressed\n", - HostAdapter, TargetID); - break; - } - return SCSI_RESET_PUNT; + return SUCCESS; } -#endif - /* BusLogic_BIOSDiskParameters returns the Heads/Sectors/Cylinders BIOS Disk @@ -4237,12 +3720,12 @@ table, then the translation inferred from the partition table will be used by the BIOS, and a warning may be displayed. */ -unsigned char *scsi_bios_ptable(struct block_device *); -int BusLogic_BIOSDiskParameters(struct scsi_device *sdev, struct block_device *Device, - sector_t capacity, int *Parameters) + +static int BusLogic_BIOSDiskParameters(struct scsi_device *sdev, struct block_device *Device, + sector_t capacity, int *Parameters) { - BusLogic_HostAdapter_T *HostAdapter = (BusLogic_HostAdapter_T *) sdev->host->hostdata; - BIOS_DiskParameters_T *DiskParameters = (BIOS_DiskParameters_T *) Parameters; + struct BusLogic_HostAdapter *HostAdapter = (struct BusLogic_HostAdapter *) sdev->host->hostdata; + struct BIOS_DiskParameters *DiskParameters = (struct BIOS_DiskParameters *) Parameters; unsigned char *buf; if (HostAdapter->ExtendedTranslationEnabled && capacity >= 2*1024*1024 /* 1 GB in 512 byte sectors */) @@ -4274,8 +3757,8 @@ */ if (*(unsigned short *) (buf+64) == 0xAA55) { - PartitionTable_T *FirstPartitionEntry = (PartitionTable_T *) buf; - PartitionTable_T *PartitionEntry = FirstPartitionEntry; + struct partition *FirstPartitionEntry = (struct partition *) buf; + struct partition *PartitionEntry = FirstPartitionEntry; int SavedCylinders = DiskParameters->Cylinders, PartitionNumber; unsigned char PartitionEntryEndHead=0, PartitionEntryEndSector=0; for (PartitionNumber = 0; PartitionNumber < 4; PartitionNumber++) @@ -4337,12 +3820,12 @@ BugLogic_ProcDirectoryInfo implements /proc/scsi/BusLogic/. */ -int BusLogic_ProcDirectoryInfo(struct Scsi_Host *shost, char *ProcBuffer, char **StartPointer, - off_t Offset, int BytesAvailable, - int WriteFlag) +static int BusLogic_ProcDirectoryInfo(struct Scsi_Host *shost, char *ProcBuffer, + char **StartPointer, off_t Offset, + int BytesAvailable, int WriteFlag) { - BusLogic_HostAdapter_T *HostAdapter; - BusLogic_TargetStatistics_T *TargetStatistics; + struct BusLogic_HostAdapter *HostAdapter; + struct BusLogic_TargetStatistics *TargetStatistics; int TargetID, Length; char *Buffer; for (HostAdapter = BusLogic_FirstRegisteredHostAdapter; @@ -4361,7 +3844,7 @@ HostAdapter->ExternalHostAdapterResets = 0; HostAdapter->HostAdapterInternalErrors = 0; memset(TargetStatistics, 0, - BusLogic_MaxTargetDevices * sizeof(BusLogic_TargetStatistics_T)); + BusLogic_MaxTargetDevices * sizeof(struct BusLogic_TargetStatistics)); return 0; } Buffer = HostAdapter->MessageBuffer; @@ -4378,7 +3861,7 @@ ====== ============== =========== ====== ========= =========\n"); for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) { - BusLogic_TargetFlags_T *TargetFlags = &HostAdapter->TargetFlags[TargetID]; + struct BusLogic_TargetFlags *TargetFlags = &HostAdapter->TargetFlags[TargetID]; if (!TargetFlags->TargetExists) continue; Length += sprintf(&Buffer[Length], " %2d %s", TargetID, @@ -4400,7 +3883,7 @@ ====== ============= ============== =================== ===================\n"); for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) { - BusLogic_TargetFlags_T *TargetFlags = &HostAdapter->TargetFlags[TargetID]; + struct BusLogic_TargetFlags *TargetFlags = &HostAdapter->TargetFlags[TargetID]; if (!TargetFlags->TargetExists) continue; Length += sprintf(&Buffer[Length], " %2d %9u %9u", TargetID, @@ -4430,7 +3913,7 @@ ====== ======= ========= ========= ========= ========= =========\n"); for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) { - BusLogic_TargetFlags_T *TargetFlags = &HostAdapter->TargetFlags[TargetID]; + struct BusLogic_TargetFlags *TargetFlags = &HostAdapter->TargetFlags[TargetID]; if (!TargetFlags->TargetExists) continue; Length += sprintf(&Buffer[Length], @@ -4454,7 +3937,7 @@ ====== ======= ========= ========= ========= ========= =========\n"); for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) { - BusLogic_TargetFlags_T *TargetFlags = &HostAdapter->TargetFlags[TargetID]; + struct BusLogic_TargetFlags *TargetFlags = &HostAdapter->TargetFlags[TargetID]; if (!TargetFlags->TargetExists) continue; Length += sprintf(&Buffer[Length], @@ -4482,7 +3965,7 @@ ====== ===== ===== ===== ===== ===== ===== ===== ===== =====\n"); for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++) { - BusLogic_TargetFlags_T *TargetFlags = &HostAdapter->TargetFlags[TargetID]; + struct BusLogic_TargetFlags *TargetFlags = &HostAdapter->TargetFlags[TargetID]; if (!TargetFlags->TargetExists) continue; Length += sprintf(&Buffer[Length], "\ @@ -4516,9 +3999,9 @@ BusLogic_Message prints Driver Messages. */ -static void BusLogic_Message(BusLogic_MessageLevel_T MessageLevel, +static void BusLogic_Message(enum BusLogic_MessageLevel MessageLevel, char *Format, - BusLogic_HostAdapter_T *HostAdapter, + struct BusLogic_HostAdapter *HostAdapter, ...) { static char Buffer[BusLogic_LineBufferSize]; @@ -4570,7 +4053,7 @@ and updates the pointer if the keyword is recognized and false otherwise. */ -static boolean BusLogic_ParseKeyword(char **StringPointer, char *Keyword) +static boolean __init BusLogic_ParseKeyword(char **StringPointer, char *Keyword) { char *Pointer = *StringPointer; while (*Keyword != '\0') @@ -4609,19 +4092,16 @@ { while (true) { - BusLogic_DriverOptions_T *DriverOptions = + struct BusLogic_DriverOptions *DriverOptions = &BusLogic_DriverOptions[BusLogic_DriverOptionsCount++]; int TargetID; - memset(DriverOptions, 0, sizeof(BusLogic_DriverOptions_T)); - for (TargetID = 0; TargetID < BusLogic_MaxTargetDevices; TargetID++) - DriverOptions->ErrorRecoveryStrategy[TargetID] = - BusLogic_ErrorRecovery_Default; + memset(DriverOptions, 0, sizeof(struct BusLogic_DriverOptions)); while (*OptionsString != '\0' && *OptionsString != ';') { /* Probing Options. */ if (BusLogic_ParseKeyword(&OptionsString, "IO:")) { - BusLogic_IO_Address_T IO_Address = + unsigned long IO_Address = simple_strtoul(OptionsString, &OptionsString, 0); BusLogic_ProbeOptions.LimitedProbeISA = true; switch (IO_Address) @@ -4763,62 +4243,6 @@ } } } - /* Error Recovery Option. */ - else if (BusLogic_ParseKeyword(&OptionsString, "ErrorRecovery:") || - BusLogic_ParseKeyword(&OptionsString, "ER:")) - { - if (BusLogic_ParseKeyword(&OptionsString, "Default")) - for (TargetID = 0; - TargetID < BusLogic_MaxTargetDevices; - TargetID++) - DriverOptions->ErrorRecoveryStrategy[TargetID] = - BusLogic_ErrorRecovery_Default; - else if (BusLogic_ParseKeyword(&OptionsString, "HardReset")) - for (TargetID = 0; - TargetID < BusLogic_MaxTargetDevices; - TargetID++) - DriverOptions->ErrorRecoveryStrategy[TargetID] = - BusLogic_ErrorRecovery_HardReset; - else if (BusLogic_ParseKeyword(&OptionsString, "BusDeviceReset")) - for (TargetID = 0; - TargetID < BusLogic_MaxTargetDevices; - TargetID++) - DriverOptions->ErrorRecoveryStrategy[TargetID] = - BusLogic_ErrorRecovery_BusDeviceReset; - else if (BusLogic_ParseKeyword(&OptionsString, "None")) - for (TargetID = 0; - TargetID < BusLogic_MaxTargetDevices; - TargetID++) - DriverOptions->ErrorRecoveryStrategy[TargetID] = - BusLogic_ErrorRecovery_None; - else - for (TargetID = 0; - TargetID < BusLogic_MaxTargetDevices; - TargetID++) - switch (*OptionsString++) - { - case 'D': - DriverOptions->ErrorRecoveryStrategy[TargetID] = - BusLogic_ErrorRecovery_Default; - break; - case 'H': - DriverOptions->ErrorRecoveryStrategy[TargetID] = - BusLogic_ErrorRecovery_HardReset; - break; - case 'B': - DriverOptions->ErrorRecoveryStrategy[TargetID] = - BusLogic_ErrorRecovery_BusDeviceReset; - break; - case 'N': - DriverOptions->ErrorRecoveryStrategy[TargetID] = - BusLogic_ErrorRecovery_None; - break; - default: - OptionsString--; - TargetID = BusLogic_MaxTargetDevices; - break; - } - } /* Miscellaneous Options. */ else if (BusLogic_ParseKeyword(&OptionsString, "BusSettleTime:") || BusLogic_ParseKeyword(&OptionsString, "BST:")) @@ -4887,13 +4311,33 @@ return 1; } +/* + Get it all started +*/ + +static struct scsi_host_template driver_template = { + .module = THIS_MODULE, + .proc_name = "BusLogic", + .proc_info = BusLogic_ProcDirectoryInfo, + .name = "BusLogic", + .info = BusLogic_DriverInfo, + .queuecommand = BusLogic_QueueCommand, + .slave_configure = BusLogic_SlaveConfigure, + .bios_param = BusLogic_BIOSDiskParameters, + .eh_host_reset_handler = BusLogic_host_reset, +#if 0 + .eh_abort_handler = BusLogic_AbortCommand, +#endif + .unchecked_isa_dma = 1, + .max_sectors = 128, + .use_clustering = ENABLE_CLUSTERING, +}; /* BusLogic_Setup handles processing of Kernel Command Line Arguments. */ -static int __init -BusLogic_Setup(char *str) +static int __init BusLogic_Setup(char *str) { int ints[3]; @@ -4909,27 +4353,41 @@ return BusLogic_ParseDriverOptions(str); } -__setup("BusLogic=", BusLogic_Setup); +/* + * Initialization function + */ + +static int __init BusLogic_init(void) { + +#ifdef MODULE + if (BusLogic) + BusLogic_Setup(BusLogic); +#endif + + return BusLogic_DetectHostAdapter(&driver_template) ? 0 : -ENODEV; +} /* - Get it all started -*/ -MODULE_LICENSE("GPL"); + * Exit function. Deletes all hosts associated with this driver. + */ -static SCSI_Host_Template_T driver_template = { - .proc_name = "BusLogic", - .proc_info = BusLogic_ProcDirectoryInfo, - .name = "BusLogic", - .detect = BusLogic_DetectHostAdapter, - .release = BusLogic_ReleaseHostAdapter, - .info = BusLogic_DriverInfo, - .queuecommand = BusLogic_QueueCommand, - .slave_configure = BusLogic_SlaveConfigure, - .bios_param = BusLogic_BIOSDiskParameters, - .eh_host_reset_handler = BusLogic_host_reset, - .unchecked_isa_dma = 1, - .max_sectors = 128, - .use_clustering = ENABLE_CLUSTERING, -}; -#include "scsi_module.c" +static void __exit BusLogic_exit(void) +{ + struct BusLogic_HostAdapter *HostAdapter; + for (HostAdapter = BusLogic_FirstRegisteredHostAdapter; + HostAdapter != NULL; HostAdapter = HostAdapter->Next) { + struct Scsi_Host *host = HostAdapter->SCSI_Host; + scsi_remove_host(host); + + } + for (HostAdapter = BusLogic_FirstRegisteredHostAdapter; + HostAdapter != NULL; HostAdapter = HostAdapter->Next) { + struct Scsi_Host *host = HostAdapter->SCSI_Host; + BusLogic_ReleaseHostAdapter(host); + } +} + +__setup("BusLogic=", BusLogic_Setup); +module_init(BusLogic_init); +module_exit(BusLogic_exit); diff -Nru a/drivers/scsi/BusLogic.h b/drivers/scsi/BusLogic.h --- a/drivers/scsi/BusLogic.h Wed Feb 4 16:51:35 2004 +++ b/drivers/scsi/BusLogic.h Wed Feb 4 16:51:35 2004 @@ -25,42 +25,14 @@ */ +#ifndef _BUSLOGIC_H +#define _BUSLOGIC_H #include - -/* - Define types for some of the structures that interface with the rest - of the Linux Kernel and SCSI Subsystem. -*/ - -typedef unsigned long ProcessorFlags_T; -typedef struct pt_regs Registers_T; -typedef struct partition PartitionTable_T; -typedef struct pci_dev PCI_Device_T; -typedef Scsi_Host_Template SCSI_Host_Template_T; -typedef struct Scsi_Host SCSI_Host_T; -typedef struct scsi_device SCSI_Device_T; -typedef struct scsi_cmnd SCSI_Command_T; -typedef struct scatterlist SCSI_ScatterList_T; - - -/* - Define prototypes for the BusLogic Driver Interface Functions. -*/ - -extern const char *BusLogic_DriverInfo(SCSI_Host_T *); -extern int BusLogic_DetectHostAdapter(SCSI_Host_Template_T *); -extern int BusLogic_ReleaseHostAdapter(SCSI_Host_T *); -extern int BusLogic_QueueCommand(SCSI_Command_T *, - void (*CompletionRoutine)(SCSI_Command_T *)); -extern int BusLogic_BIOSDiskParameters(struct scsi_device *, - struct block_device *, sector_t, int *); -extern int BusLogic_ProcDirectoryInfo(struct Scsi_Host *, char *, char **, off_t, int, int); -extern int BusLogic_SlaveConfigure(SCSI_Device_T *); - -#ifdef BusLogic_DriverVersion - +#ifndef PACKED +#define PACKED __attribute__((packed)) +#endif /* FlashPoint support is only available for the Intel x86 Architecture with @@ -75,8 +47,7 @@ #ifndef CONFIG_PCI #undef CONFIG_SCSI_OMIT_FLASHPOINT #define CONFIG_SCSI_OMIT_FLASHPOINT -#define BusLogic_InitializeProbeInfoListISA \ - BusLogic_InitializeProbeInfoList +#define BusLogic_InitializeProbeInfoListISA BusLogic_InitializeProbeInfoList #endif @@ -157,18 +128,16 @@ Define the Driver Message Levels. */ -typedef enum BusLogic_MessageLevel +enum BusLogic_MessageLevel { BusLogic_AnnounceLevel = 0, BusLogic_InfoLevel = 1, BusLogic_NoticeLevel = 2, BusLogic_WarningLevel = 3, BusLogic_ErrorLevel = 4 -} -BusLogic_MessageLevel_T; +}; -static char - *BusLogic_MessageLevelMap[] = +static char *BusLogic_MessageLevelMap[] = { KERN_NOTICE, KERN_NOTICE, KERN_NOTICE, KERN_WARNING, KERN_ERR }; @@ -197,19 +166,16 @@ of I/O Addresses required by each type. */ -typedef enum +enum BusLogic_HostAdapterType { BusLogic_MultiMaster = 1, BusLogic_FlashPoint = 2 -} -__attribute__ ((packed)) -BusLogic_HostAdapterType_T; +} PACKED; #define BusLogic_MultiMasterAddressCount 4 #define BusLogic_FlashPointAddressCount 256 -static int - BusLogic_HostAdapterAddressCount[3] = +static int BusLogic_HostAdapterAddressCount[3] = { 0, BusLogic_MultiMasterAddressCount, BusLogic_FlashPointAddressCount }; @@ -240,7 +206,7 @@ Define the possible Host Adapter Bus Types. */ -typedef enum +enum BusLogic_HostAdapterBusType { BusLogic_Unknown_Bus = 0, BusLogic_ISA_Bus = 1, @@ -248,116 +214,75 @@ BusLogic_PCI_Bus = 3, BusLogic_VESA_Bus = 4, BusLogic_MCA_Bus = 5 -} -__attribute__ ((packed)) -BusLogic_HostAdapterBusType_T; +} PACKED; -static char - *BusLogic_HostAdapterBusNames[] = +static char *BusLogic_HostAdapterBusNames[] = { "Unknown", "ISA", "EISA", "PCI", "VESA", "MCA" }; -static BusLogic_HostAdapterBusType_T - BusLogic_HostAdapterBusTypes[] = - { BusLogic_VESA_Bus, /* BT-4xx */ - BusLogic_ISA_Bus, /* BT-5xx */ - BusLogic_MCA_Bus, /* BT-6xx */ - BusLogic_EISA_Bus, /* BT-7xx */ - BusLogic_Unknown_Bus, /* BT-8xx */ - BusLogic_PCI_Bus }; /* BT-9xx */ - +static enum BusLogic_HostAdapterBusType BusLogic_HostAdapterBusTypes[] = +{ + BusLogic_VESA_Bus, /* BT-4xx */ + BusLogic_ISA_Bus, /* BT-5xx */ + BusLogic_MCA_Bus, /* BT-6xx */ + BusLogic_EISA_Bus, /* BT-7xx */ + BusLogic_Unknown_Bus, /* BT-8xx */ + BusLogic_PCI_Bus /* BT-9xx */ +}; /* Define the possible Host Adapter BIOS Disk Geometry Translations. */ -typedef enum BusLogic_BIOS_DiskGeometryTranslation +enum BusLogic_BIOS_DiskGeometryTranslation { BusLogic_BIOS_Disk_Not_Installed = 0, BusLogic_BIOS_Disk_Installed_64x32 = 1, BusLogic_BIOS_Disk_Installed_128x32 = 2, BusLogic_BIOS_Disk_Installed_255x63 = 3 -} -__attribute__ ((packed)) -BusLogic_BIOS_DiskGeometryTranslation_T; +} PACKED; /* Define a Boolean data type. */ -typedef enum { false, true } __attribute__ ((packed)) boolean; - - -/* - Define a 32 bit I/O Address data type. -*/ - -typedef unsigned int BusLogic_IO_Address_T; - - -/* - Define a 32 bit PCI Bus Address data type. -*/ - -typedef unsigned int BusLogic_PCI_Address_T; - - -/* - Define a 32 bit Base Address data type. -*/ - -typedef unsigned int BusLogic_Base_Address_T; - - -/* - Define a 32 bit Bus Address data type. -*/ - -typedef unsigned int BusLogic_BusAddress_T; - - -/* - Define a 32 bit Byte Count data type. -*/ - -typedef unsigned int BusLogic_ByteCount_T; - +typedef enum { + false, + true +} PACKED boolean; /* Define a 10^18 Statistics Byte Counter data type. */ -typedef struct BusLogic_ByteCounter +struct BusLogic_ByteCounter { unsigned int Units; unsigned int Billions; -} -BusLogic_ByteCounter_T; +}; /* Define the structure for I/O Address and Bus Probing Information. */ -typedef struct BusLogic_ProbeInfo +struct BusLogic_ProbeInfo { - BusLogic_HostAdapterType_T HostAdapterType; - BusLogic_HostAdapterBusType_T HostAdapterBusType; - BusLogic_IO_Address_T IO_Address; - BusLogic_PCI_Address_T PCI_Address; - PCI_Device_T *PCI_Device; + enum BusLogic_HostAdapterType HostAdapterType; + enum BusLogic_HostAdapterBusType HostAdapterBusType; + unsigned long IO_Address; + unsigned long PCI_Address; + struct pci_dev *PCI_Device; unsigned char Bus; unsigned char Device; unsigned char IRQ_Channel; -} -BusLogic_ProbeInfo_T; - +}; /* Define the Probe Options. */ -typedef struct BusLogic_ProbeOptions +struct BusLogic_ProbeOptions { boolean NoProbe:1; /* Bit 0 */ boolean NoProbeISA:1; /* Bit 1 */ @@ -372,55 +297,28 @@ boolean Probe234:1; /* Bit 10 */ boolean Probe130:1; /* Bit 11 */ boolean Probe134:1; /* Bit 12 */ -} -BusLogic_ProbeOptions_T; - +}; /* Define the Global Options. */ -typedef struct BusLogic_GlobalOptions +struct BusLogic_GlobalOptions { boolean TraceProbe:1; /* Bit 0 */ boolean TraceHardwareReset:1; /* Bit 1 */ boolean TraceConfiguration:1; /* Bit 2 */ boolean TraceErrors:1; /* Bit 3 */ -} -BusLogic_GlobalOptions_T; - +}; /* Define the Local Options. */ -typedef struct BusLogic_LocalOptions +struct BusLogic_LocalOptions { boolean InhibitTargetInquiry:1; /* Bit 0 */ -} -BusLogic_LocalOptions_T; - - -/* - Define the Error Recovery Strategy Options. -*/ - -typedef enum -{ - BusLogic_ErrorRecovery_Default = 0, - BusLogic_ErrorRecovery_BusDeviceReset = 1, - BusLogic_ErrorRecovery_HardReset = 2, - BusLogic_ErrorRecovery_None = 3 -} -__attribute__ ((packed)) -BusLogic_ErrorRecoveryStrategy_T; - -static char - *BusLogic_ErrorRecoveryStrategyNames[] = - { "Default", "Bus Device Reset", "Hard Reset", "None" }, - BusLogic_ErrorRecoveryStrategyLetters[] = - { 'D', 'B', 'H', 'N' }; - +}; /* Define the BusLogic SCSI Host Adapter I/O Register Offsets. @@ -433,12 +331,11 @@ #define BusLogic_InterruptRegisterOffset 2 /* RO register */ #define BusLogic_GeometryRegisterOffset 3 /* RO register */ - /* Define the structure of the write-only Control Register. */ -typedef union BusLogic_ControlRegister +union BusLogic_ControlRegister { unsigned char All; struct { @@ -447,16 +344,14 @@ boolean InterruptReset:1; /* Bit 5 */ boolean SoftReset:1; /* Bit 6 */ boolean HardReset:1; /* Bit 7 */ - } Bits; -} -BusLogic_ControlRegister_T; - + }; +}; /* Define the structure of the read-only Status Register. */ -typedef union BusLogic_StatusRegister +union BusLogic_StatusRegister { unsigned char All; struct { @@ -468,16 +363,14 @@ boolean InitializationRequired:1; /* Bit 5 */ boolean DiagnosticFailure:1; /* Bit 6 */ boolean DiagnosticActive:1; /* Bit 7 */ - } Bits; -} -BusLogic_StatusRegister_T; - + }; +}; /* Define the structure of the read-only Interrupt Register. */ -typedef union BusLogic_InterruptRegister +union BusLogic_InterruptRegister { unsigned char All; struct { @@ -487,121 +380,93 @@ boolean ExternalBusReset:1; /* Bit 3 */ unsigned char Reserved:3; /* Bits 4-6 */ boolean InterruptValid:1; /* Bit 7 */ - } Bits; -} -BusLogic_InterruptRegister_T; - + }; +}; /* Define the structure of the read-only Geometry Register. */ -typedef union BusLogic_GeometryRegister +union BusLogic_GeometryRegister { unsigned char All; struct { - BusLogic_BIOS_DiskGeometryTranslation_T Drive0Geometry:2; /* Bits 0-1 */ - BusLogic_BIOS_DiskGeometryTranslation_T Drive1Geometry:2; /* Bits 2-3 */ - unsigned char :3; /* Bits 4-6 */ - boolean ExtendedTranslationEnabled:1; /* Bit 7 */ - } Bits; -} -BusLogic_GeometryRegister_T; - + enum BusLogic_BIOS_DiskGeometryTranslation Drive0Geometry:2;/* Bits 0-1 */ + enum BusLogic_BIOS_DiskGeometryTranslation Drive1Geometry:2;/* Bits 2-3 */ + unsigned char :3; /* Bits 4-6 */ + boolean ExtendedTranslationEnabled:1; /* Bit 7 */ + }; +}; /* Define the BusLogic SCSI Host Adapter Command Register Operation Codes. */ -typedef enum +enum BusLogic_OperationCode { - BusLogic_TestCommandCompleteInterrupt = 0x00, - BusLogic_InitializeMailbox = 0x01, - BusLogic_ExecuteMailboxCommand = 0x02, - BusLogic_ExecuteBIOSCommand = 0x03, - BusLogic_InquireBoardID = 0x04, - BusLogic_EnableOutgoingMailboxAvailableInt = 0x05, - BusLogic_SetSCSISelectionTimeout = 0x06, - BusLogic_SetPreemptTimeOnBus = 0x07, - BusLogic_SetTimeOffBus = 0x08, - BusLogic_SetBusTransferRate = 0x09, - BusLogic_InquireInstalledDevicesID0to7 = 0x0A, - BusLogic_InquireConfiguration = 0x0B, - BusLogic_EnableTargetMode = 0x0C, - BusLogic_InquireSetupInformation = 0x0D, - BusLogic_WriteAdapterLocalRAM = 0x1A, - BusLogic_ReadAdapterLocalRAM = 0x1B, - BusLogic_WriteBusMasterChipFIFO = 0x1C, - BusLogic_ReadBusMasterChipFIFO = 0x1D, - BusLogic_EchoCommandData = 0x1F, - BusLogic_HostAdapterDiagnostic = 0x20, - BusLogic_SetAdapterOptions = 0x21, - BusLogic_InquireInstalledDevicesID8to15 = 0x23, - BusLogic_InquireTargetDevices = 0x24, - BusLogic_DisableHostAdapterInterrupt = 0x25, - BusLogic_InitializeExtendedMailbox = 0x81, - BusLogic_ExecuteSCSICommand = 0x83, - BusLogic_InquireFirmwareVersion3rdDigit = 0x84, - BusLogic_InquireFirmwareVersionLetter = 0x85, - BusLogic_InquirePCIHostAdapterInformation = 0x86, - BusLogic_InquireHostAdapterModelNumber = 0x8B, - BusLogic_InquireSynchronousPeriod = 0x8C, - BusLogic_InquireExtendedSetupInformation = 0x8D, - BusLogic_EnableStrictRoundRobinMode = 0x8F, - BusLogic_StoreHostAdapterLocalRAM = 0x90, - BusLogic_FetchHostAdapterLocalRAM = 0x91, - BusLogic_StoreLocalDataInEEPROM = 0x92, - BusLogic_UploadAutoSCSICode = 0x94, - BusLogic_ModifyIOAddress = 0x95, - BusLogic_SetCCBFormat = 0x96, - BusLogic_WriteInquiryBuffer = 0x9A, - BusLogic_ReadInquiryBuffer = 0x9B, - BusLogic_FlashROMUploadDownload = 0xA7, - BusLogic_ReadSCAMData = 0xA8, - BusLogic_WriteSCAMData = 0xA9 -} -BusLogic_OperationCode_T; - + BusLogic_TestCommandCompleteInterrupt = 0x00, + BusLogic_InitializeMailbox = 0x01, + BusLogic_ExecuteMailboxCommand = 0x02, + BusLogic_ExecuteBIOSCommand = 0x03, + BusLogic_InquireBoardID = 0x04, + BusLogic_EnableOutgoingMailboxAvailableInt = 0x05, + BusLogic_SetSCSISelectionTimeout = 0x06, + BusLogic_SetPreemptTimeOnBus = 0x07, + BusLogic_SetTimeOffBus = 0x08, + BusLogic_SetBusTransferRate = 0x09, + BusLogic_InquireInstalledDevicesID0to7 = 0x0A, + BusLogic_InquireConfiguration = 0x0B, + BusLogic_EnableTargetMode = 0x0C, + BusLogic_InquireSetupInformation = 0x0D, + BusLogic_WriteAdapterLocalRAM = 0x1A, + BusLogic_ReadAdapterLocalRAM = 0x1B, + BusLogic_WriteBusMasterChipFIFO = 0x1C, + BusLogic_ReadBusMasterChipFIFO = 0x1D, + BusLogic_EchoCommandData = 0x1F, + BusLogic_HostAdapterDiagnostic = 0x20, + BusLogic_SetAdapterOptions = 0x21, + BusLogic_InquireInstalledDevicesID8to15 = 0x23, + BusLogic_InquireTargetDevices = 0x24, + BusLogic_DisableHostAdapterInterrupt = 0x25, + BusLogic_InitializeExtendedMailbox = 0x81, + BusLogic_ExecuteSCSICommand = 0x83, + BusLogic_InquireFirmwareVersion3rdDigit = 0x84, + BusLogic_InquireFirmwareVersionLetter = 0x85, + BusLogic_InquirePCIHostAdapterInformation = 0x86, + BusLogic_InquireHostAdapterModelNumber = 0x8B, + BusLogic_InquireSynchronousPeriod = 0x8C, + BusLogic_InquireExtendedSetupInformation = 0x8D, + BusLogic_EnableStrictRoundRobinMode = 0x8F, + BusLogic_StoreHostAdapterLocalRAM = 0x90, + BusLogic_FetchHostAdapterLocalRAM = 0x91, + BusLogic_StoreLocalDataInEEPROM = 0x92, + BusLogic_UploadAutoSCSICode = 0x94, + BusLogic_ModifyIOAddress = 0x95, + BusLogic_SetCCBFormat = 0x96, + BusLogic_WriteInquiryBuffer = 0x9A, + BusLogic_ReadInquiryBuffer = 0x9B, + BusLogic_FlashROMUploadDownload = 0xA7, + BusLogic_ReadSCAMData = 0xA8, + BusLogic_WriteSCAMData = 0xA9 +}; /* Define the Inquire Board ID reply structure. */ -typedef struct BusLogic_BoardID +struct BusLogic_BoardID { unsigned char BoardType; /* Byte 0 */ unsigned char CustomFeatures; /* Byte 1 */ unsigned char FirmwareVersion1stDigit; /* Byte 2 */ unsigned char FirmwareVersion2ndDigit; /* Byte 3 */ -} -BusLogic_BoardID_T; - - -/* - Define the Inquire Installed Devices ID 0 to 7 and Inquire Installed - Devices ID 8 to 15 reply type. For each Target Device, a byte is returned - where bit 0 set indicates that Logical Unit 0 exists, bit 1 set indicates - that Logical Unit 1 exists, and so on. -*/ - -typedef unsigned char BusLogic_InstalledDevices8_T[8]; - - -/* - Define the Inquire Target Devices reply type. Inquire Target Devices only - tests Logical Unit 0 of each Target Device unlike the Inquire Installed - Devices commands which test Logical Units 0 - 7. Two bytes are returned, - where byte 0 bit 0 set indicates that Target Device 0 exists, and so on. -*/ - -typedef unsigned short BusLogic_InstalledDevices_T; - +}; /* Define the Inquire Configuration reply structure. */ -typedef struct BusLogic_Configuration +struct BusLogic_Configuration { unsigned char :5; /* Byte 0 Bits 0-4 */ boolean DMA_Channel5:1; /* Byte 0 Bit 5 */ @@ -617,29 +482,20 @@ unsigned char :1; /* Byte 1 Bit 7 */ unsigned char HostAdapterID:4; /* Byte 2 Bits 0-3 */ unsigned char :4; /* Byte 2 Bits 4-7 */ -} -BusLogic_Configuration_T; - +}; /* Define the Inquire Setup Information reply structure. */ -typedef struct BusLogic_SynchronousValue +struct BusLogic_SynchronousValue { unsigned char Offset:4; /* Bits 0-3 */ unsigned char TransferPeriod:3; /* Bits 4-6 */ boolean Synchronous:1; /* Bit 7 */ -} -BusLogic_SynchronousValue_T; +}; -typedef BusLogic_SynchronousValue_T - BusLogic_SynchronousValues8_T[8]; - -typedef BusLogic_SynchronousValue_T - BusLogic_SynchronousValues_T[BusLogic_MaxTargetDevices]; - -typedef struct BusLogic_SetupInformation +struct BusLogic_SetupInformation { boolean SynchronousInitiationEnabled:1; /* Byte 0 Bit 0 */ boolean ParityCheckingEnabled:1; /* Byte 0 Bit 1 */ @@ -649,47 +505,29 @@ unsigned char TimeOffBus; /* Byte 3 */ unsigned char MailboxCount; /* Byte 4 */ unsigned char MailboxAddress[3]; /* Bytes 5-7 */ - BusLogic_SynchronousValues8_T SynchronousValuesID0to7; /* Bytes 8-15 */ + struct BusLogic_SynchronousValue SynchronousValuesID0to7[8];/* Bytes 8-15 */ unsigned char DisconnectPermittedID0to7; /* Byte 16 */ unsigned char Signature; /* Byte 17 */ unsigned char CharacterD; /* Byte 18 */ unsigned char HostBusType; /* Byte 19 */ unsigned char WideTransfersPermittedID0to7; /* Byte 20 */ unsigned char WideTransfersActiveID0to7; /* Byte 21 */ - BusLogic_SynchronousValues8_T SynchronousValuesID8to15; /* Bytes 22-29 */ + struct BusLogic_SynchronousValue SynchronousValuesID8to15[8]; /* Bytes 22-29 */ unsigned char DisconnectPermittedID8to15; /* Byte 30 */ unsigned char :8; /* Byte 31 */ unsigned char WideTransfersPermittedID8to15; /* Byte 32 */ unsigned char WideTransfersActiveID8to15; /* Byte 33 */ -} -BusLogic_SetupInformation_T; - +}; /* Define the Initialize Extended Mailbox request structure. */ -typedef struct BusLogic_ExtendedMailboxRequest +struct BusLogic_ExtendedMailboxRequest { unsigned char MailboxCount; /* Byte 0 */ - BusLogic_BusAddress_T BaseMailboxAddress; /* Bytes 1-4 */ -} -__attribute__ ((packed)) -BusLogic_ExtendedMailboxRequest_T; - - -/* - Define the Inquire Firmware Version 3rd Digit reply type. -*/ - -typedef unsigned char BusLogic_FirmwareVersion3rdDigit_T; - - -/* - Define the Inquire Firmware Version Letter reply type. -*/ - -typedef unsigned char BusLogic_FirmwareVersionLetter_T; + u32 BaseMailboxAddress; /* Bytes 1-4 */ +} PACKED; /* @@ -698,7 +536,7 @@ the Modify I/O Address command. */ -typedef enum BusLogic_ISACompatibleIOPort +enum BusLogic_ISACompatibleIOPort { BusLogic_IO_330 = 0, BusLogic_IO_334 = 1, @@ -708,13 +546,11 @@ BusLogic_IO_134 = 5, BusLogic_IO_Disable = 6, BusLogic_IO_Disable2 = 7 -} -__attribute__ ((packed)) -BusLogic_ISACompatibleIOPort_T; +} PACKED; -typedef struct BusLogic_PCIHostAdapterInformation +struct BusLogic_PCIHostAdapterInformation { - BusLogic_ISACompatibleIOPort_T ISACompatibleIOPort; /* Byte 0 */ + enum BusLogic_ISACompatibleIOPort ISACompatibleIOPort;/* Byte 0 */ unsigned char PCIAssignedIRQChannel; /* Byte 1 */ boolean LowByteTerminated:1; /* Byte 2 Bit 0 */ boolean HighByteTerminated:1; /* Byte 2 Bit 1 */ @@ -724,42 +560,26 @@ boolean JP3:1; /* Byte 2 Bit 6 */ boolean GenericInfoValid:1; /* Byte 2 Bit 7 */ unsigned char :8; /* Byte 3 */ -} -BusLogic_PCIHostAdapterInformation_T; - - -/* - Define the Inquire Host Adapter Model Number reply type. -*/ - -typedef unsigned char BusLogic_HostAdapterModelNumber_T[5]; - - -/* - Define the Inquire Synchronous Period reply type. For each Target Device, - a byte is returned which represents the Synchronous Transfer Period in units - of 10 nanoseconds. -*/ - -typedef unsigned char BusLogic_SynchronousPeriod_T[BusLogic_MaxTargetDevices]; - +}; /* Define the Inquire Extended Setup Information reply structure. */ -typedef struct BusLogic_ExtendedSetupInformation +struct BusLogic_ExtendedSetupInformation { unsigned char BusType; /* Byte 0 */ unsigned char BIOS_Address; /* Byte 1 */ unsigned short ScatterGatherLimit; /* Bytes 2-3 */ unsigned char MailboxCount; /* Byte 4 */ - BusLogic_BusAddress_T BaseMailboxAddress; /* Bytes 5-8 */ - struct { unsigned char :2; /* Byte 9 Bits 0-1 */ + u32 BaseMailboxAddress; /* Bytes 5-8 */ + struct { + unsigned char :2; /* Byte 9 Bits 0-1 */ boolean FastOnEISA:1; /* Byte 9 Bit 2 */ unsigned char :3; /* Byte 9 Bits 3-5 */ boolean LevelSensitiveInterrupt:1; /* Byte 9 Bit 6 */ - unsigned char :1; } Misc; /* Byte 9 Bit 7 */ + unsigned char :1; /* Byte 9 Bit 7 */ + } Misc; unsigned char FirmwareRevision[3]; /* Bytes 10-12 */ boolean HostWideSCSI:1; /* Byte 13 Bit 0 */ boolean HostDifferentialSCSI:1; /* Byte 13 Bit 1 */ @@ -767,22 +587,17 @@ boolean HostUltraSCSI:1; /* Byte 13 Bit 3 */ boolean HostSmartTermination:1; /* Byte 13 Bit 4 */ unsigned char :3; /* Byte 13 Bits 5-7 */ -} -__attribute__ ((packed)) -BusLogic_ExtendedSetupInformation_T; - +} PACKED; /* Define the Enable Strict Round Robin Mode request type. */ -typedef enum BusLogic_RoundRobinModeRequest +enum BusLogic_RoundRobinModeRequest { BusLogic_AggressiveRoundRobinMode = 0, BusLogic_StrictRoundRobinMode = 1 -} -__attribute__ ((packed)) -BusLogic_RoundRobinModeRequest_T; +} PACKED; /* @@ -792,19 +607,17 @@ #define BusLogic_BIOS_BaseOffset 0 #define BusLogic_AutoSCSI_BaseOffset 64 -typedef struct BusLogic_FetchHostAdapterLocalRAMRequest +struct BusLogic_FetchHostAdapterLocalRAMRequest { unsigned char ByteOffset; /* Byte 0 */ unsigned char ByteCount; /* Byte 1 */ -} -BusLogic_FetchHostAdapterLocalRAMRequest_T; - +}; /* Define the Host Adapter Local RAM AutoSCSI structure. */ -typedef struct BusLogic_AutoSCSIData +struct BusLogic_AutoSCSIData { unsigned char InternalFactorySignature[2]; /* Bytes 0-1 */ unsigned char InformationByteCount; /* Byte 2 */ @@ -874,22 +687,17 @@ unsigned char Reserved[10]; /* Bytes 50-59 */ unsigned char ManufacturingDiagnostic[2]; /* Bytes 60-61 */ unsigned short Checksum; /* Bytes 62-63 */ -} -__attribute__ ((packed)) -BusLogic_AutoSCSIData_T; - +} PACKED; /* Define the Host Adapter Local RAM Auto SCSI Byte 45 structure. */ -typedef struct BusLogic_AutoSCSIByte45 +struct BusLogic_AutoSCSIByte45 { unsigned char ForceBusDeviceScanningOrder:1; /* Bit 0 */ unsigned char :7; /* Bits 1-7 */ -} -BusLogic_AutoSCSIByte45_T; - +}; /* Define the Host Adapter Local RAM BIOS Drive Map Byte structure. @@ -897,61 +705,35 @@ #define BusLogic_BIOS_DriveMapOffset 17 -typedef struct BusLogic_BIOSDriveMapByte +struct BusLogic_BIOSDriveMapByte { unsigned char TargetIDBit3:1; /* Bit 0 */ unsigned char :2; /* Bits 1-2 */ - BusLogic_BIOS_DiskGeometryTranslation_T DiskGeometry:2; /* Bits 3-4 */ + enum BusLogic_BIOS_DiskGeometryTranslation DiskGeometry:2; /* Bits 3-4 */ unsigned char TargetID:3; /* Bits 5-7 */ -} -BusLogic_BIOSDriveMapByte_T; - - -/* - Define the Modify I/O Address request type. On PCI Host Adapters, the - Modify I/O Address command allows modification of the ISA compatible I/O - Address that the Host Adapter responds to; it does not affect the PCI - compliant I/O Address assigned at system initialization. -*/ - -typedef BusLogic_ISACompatibleIOPort_T BusLogic_ModifyIOAddressRequest_T; - +}; /* Define the Set CCB Format request type. Extended LUN Format CCBs are necessary to support more than 8 Logical Units per Target Device. */ -typedef enum BusLogic_SetCCBFormatRequest +enum BusLogic_SetCCBFormatRequest { BusLogic_LegacyLUNFormatCCB = 0, BusLogic_ExtendedLUNFormatCCB = 1 -} -__attribute__ ((packed)) -BusLogic_SetCCBFormatRequest_T; - - -/* - Define the Requested Reply Length type used by the Inquire Setup Information, - Inquire Host Adapter Model Number, Inquire Synchronous Period, and Inquire - Extended Setup Information commands. -*/ - -typedef unsigned char BusLogic_RequestedReplyLength_T; - +} PACKED; /* Define the Outgoing Mailbox Action Codes. */ -typedef enum +enum BusLogic_ActionCode { BusLogic_OutgoingMailboxFree = 0x00, BusLogic_MailboxStartCommand = 0x01, BusLogic_MailboxAbortCommand = 0x02 -} -__attribute__ ((packed)) -BusLogic_ActionCode_T; +} PACKED; /* @@ -960,7 +742,7 @@ completion codes are stored in the CCB; it only uses codes 1, 2, 4, and 5. */ -typedef enum +enum BusLogic_CompletionCode { BusLogic_IncomingMailboxFree = 0x00, BusLogic_CommandCompletedWithoutError = 0x01, @@ -968,16 +750,13 @@ BusLogic_AbortedCommandNotFound = 0x03, BusLogic_CommandCompletedWithError = 0x04, BusLogic_InvalidCCB = 0x05 -} -__attribute__ ((packed)) -BusLogic_CompletionCode_T; - +} PACKED; /* Define the Command Control Block (CCB) Opcodes. */ -typedef enum +enum BusLogic_CCB_Opcode { BusLogic_InitiatorCCB = 0x00, BusLogic_TargetCCB = 0x01, @@ -985,23 +764,20 @@ BusLogic_InitiatorCCB_ResidualDataLength = 0x03, BusLogic_InitiatorCCB_ScatterGatherResidual = 0x04, BusLogic_BusDeviceReset = 0x81 -} -__attribute__ ((packed)) -BusLogic_CCB_Opcode_T; +} PACKED; /* Define the CCB Data Direction Codes. */ -typedef enum +enum BusLogic_DataDirection { BusLogic_UncheckedDataTransfer = 0, BusLogic_DataInLengthChecked = 1, BusLogic_DataOutLengthChecked = 2, BusLogic_NoDataTransfer = 3 -} -BusLogic_DataDirection_T; +}; /* @@ -1009,7 +785,7 @@ return status code 0x0C; it uses 0x12 for both overruns and underruns. */ -typedef enum +enum BusLogic_HostAdapterStatus { BusLogic_CommandCompletedNormally = 0x00, BusLogic_LinkedCommandCompleted = 0x0A, @@ -1036,38 +812,31 @@ BusLogic_HostAdapterSoftwareError = 0x27, BusLogic_HostAdapterHardwareTimeoutError = 0x30, BusLogic_SCSIParityErrorDetected = 0x34 -} -__attribute__ ((packed)) -BusLogic_HostAdapterStatus_T; +} PACKED; /* Define the SCSI Target Device Status Codes. */ -typedef enum +enum BusLogic_TargetDeviceStatus { BusLogic_OperationGood = 0x00, BusLogic_CheckCondition = 0x02, BusLogic_DeviceBusy = 0x08 -} -__attribute__ ((packed)) -BusLogic_TargetDeviceStatus_T; - +} PACKED; /* Define the Queue Tag Codes. */ -typedef enum +enum BusLogic_QueueTag { BusLogic_SimpleQueueTag = 0, BusLogic_HeadOfQueueTag = 1, BusLogic_OrderedQueueTag = 2, BusLogic_ReservedQT = 3 -} -BusLogic_QueueTag_T; - +}; /* Define the SCSI Command Descriptor Block (CDB). @@ -1083,27 +852,23 @@ Firmware Interface and the FlashPoint SCCB Manager. */ -typedef struct BusLogic_ScatterGatherSegment +struct BusLogic_ScatterGatherSegment { - BusLogic_ByteCount_T SegmentByteCount; /* Bytes 0-3 */ - BusLogic_BusAddress_T SegmentDataPointer; /* Bytes 4-7 */ -} -BusLogic_ScatterGatherSegment_T; - + u32 SegmentByteCount; /* Bytes 0-3 */ + u32 SegmentDataPointer; /* Bytes 4-7 */ +}; /* Define the Driver CCB Status Codes. */ -typedef enum +enum BusLogic_CCB_Status { BusLogic_CCB_Free = 0, BusLogic_CCB_Active = 1, BusLogic_CCB_Completed = 2, BusLogic_CCB_Reset = 3 -} -__attribute__ ((packed)) -BusLogic_CCB_Status_T; +} PACKED; /* @@ -1125,39 +890,39 @@ 32 Logical Units per Target Device. */ -typedef struct BusLogic_CCB +struct BusLogic_CCB { /* MultiMaster Firmware and FlashPoint SCCB Manager Common Portion. */ - BusLogic_CCB_Opcode_T Opcode; /* Byte 0 */ + enum BusLogic_CCB_Opcode Opcode; /* Byte 0 */ unsigned char :3; /* Byte 1 Bits 0-2 */ - BusLogic_DataDirection_T DataDirection:2; /* Byte 1 Bits 3-4 */ + enum BusLogic_DataDirection DataDirection:2; /* Byte 1 Bits 3-4 */ boolean TagEnable:1; /* Byte 1 Bit 5 */ - BusLogic_QueueTag_T QueueTag:2; /* Byte 1 Bits 6-7 */ + enum BusLogic_QueueTag QueueTag:2; /* Byte 1 Bits 6-7 */ unsigned char CDB_Length; /* Byte 2 */ unsigned char SenseDataLength; /* Byte 3 */ - BusLogic_ByteCount_T DataLength; /* Bytes 4-7 */ - BusLogic_BusAddress_T DataPointer; /* Bytes 8-11 */ + u32 DataLength; /* Bytes 4-7 */ + u32 DataPointer; /* Bytes 8-11 */ unsigned char :8; /* Byte 12 */ unsigned char :8; /* Byte 13 */ - BusLogic_HostAdapterStatus_T HostAdapterStatus; /* Byte 14 */ - BusLogic_TargetDeviceStatus_T TargetDeviceStatus; /* Byte 15 */ + enum BusLogic_HostAdapterStatus HostAdapterStatus; /* Byte 14 */ + enum BusLogic_TargetDeviceStatus TargetDeviceStatus; /* Byte 15 */ unsigned char TargetID; /* Byte 16 */ unsigned char LogicalUnit:5; /* Byte 17 Bits 0-4 */ boolean LegacyTagEnable:1; /* Byte 17 Bit 5 */ - BusLogic_QueueTag_T LegacyQueueTag:2; /* Byte 17 Bits 6-7 */ + enum BusLogic_QueueTag LegacyQueueTag:2; /* Byte 17 Bits 6-7 */ SCSI_CDB_T CDB; /* Bytes 18-29 */ unsigned char :8; /* Byte 30 */ unsigned char :8; /* Byte 31 */ unsigned int :32; /* Bytes 32-35 */ - BusLogic_BusAddress_T SenseDataPointer; /* Bytes 36-39 */ + u32 SenseDataPointer; /* Bytes 36-39 */ /* FlashPoint SCCB Manager Defined Portion. */ void (*CallbackFunction)(struct BusLogic_CCB *); /* Bytes 40-43 */ - BusLogic_Base_Address_T BaseAddress; /* Bytes 44-47 */ - BusLogic_CompletionCode_T CompletionCode; /* Byte 48 */ + u32 BaseAddress; /* Bytes 44-47 */ + enum BusLogic_CompletionCode CompletionCode; /* Byte 48 */ #ifndef CONFIG_SCSI_OMIT_FLASHPOINT unsigned char :8; /* Byte 49 */ unsigned short OS_Flags; /* Bytes 50-51 */ @@ -1168,70 +933,61 @@ */ dma_addr_t AllocationGroupHead; unsigned int AllocationGroupSize; - BusLogic_BusAddress_T DMA_Handle; - BusLogic_CCB_Status_T Status; + u32 DMA_Handle; + enum BusLogic_CCB_Status Status; unsigned long SerialNumber; - SCSI_Command_T *Command; + struct scsi_cmnd *Command; struct BusLogic_HostAdapter *HostAdapter; struct BusLogic_CCB *Next; struct BusLogic_CCB *NextAll; - BusLogic_ScatterGatherSegment_T + struct BusLogic_ScatterGatherSegment ScatterGatherList[BusLogic_ScatterGatherLimit]; -} -BusLogic_CCB_T; - +}; /* Define the 32 Bit Mode Outgoing Mailbox structure. */ -typedef struct BusLogic_OutgoingMailbox +struct BusLogic_OutgoingMailbox { - BusLogic_BusAddress_T CCB; /* Bytes 0-3 */ + u32 CCB; /* Bytes 0-3 */ unsigned int :24; /* Bytes 4-6 */ - BusLogic_ActionCode_T ActionCode; /* Byte 7 */ -} -BusLogic_OutgoingMailbox_T; - + enum BusLogic_ActionCode ActionCode; /* Byte 7 */ +}; /* Define the 32 Bit Mode Incoming Mailbox structure. */ -typedef struct BusLogic_IncomingMailbox +struct BusLogic_IncomingMailbox { - BusLogic_BusAddress_T CCB; /* Bytes 0-3 */ - BusLogic_HostAdapterStatus_T HostAdapterStatus; /* Byte 4 */ - BusLogic_TargetDeviceStatus_T TargetDeviceStatus; /* Byte 5 */ + u32 CCB; /* Bytes 0-3 */ + enum BusLogic_HostAdapterStatus HostAdapterStatus; /* Byte 4 */ + enum BusLogic_TargetDeviceStatus TargetDeviceStatus; /* Byte 5 */ unsigned char :8; /* Byte 6 */ - BusLogic_CompletionCode_T CompletionCode; /* Byte 7 */ -} -BusLogic_IncomingMailbox_T; + enum BusLogic_CompletionCode CompletionCode; /* Byte 7 */ +}; /* Define the BusLogic Driver Options structure. */ -typedef struct BusLogic_DriverOptions +struct BusLogic_DriverOptions { unsigned short TaggedQueuingPermitted; unsigned short TaggedQueuingPermittedMask; unsigned short BusSettleTime; - BusLogic_LocalOptions_T LocalOptions; + struct BusLogic_LocalOptions LocalOptions; unsigned char CommonQueueDepth; unsigned char QueueDepth[BusLogic_MaxTargetDevices]; - BusLogic_ErrorRecoveryStrategy_T - ErrorRecoveryStrategy[BusLogic_MaxTargetDevices]; -} -BusLogic_DriverOptions_T; - +}; /* Define the Host Adapter Target Flags structure. */ -typedef struct BusLogic_TargetFlags +struct BusLogic_TargetFlags { boolean TargetExists:1; boolean TaggedQueuingSupported:1; @@ -1240,9 +996,7 @@ boolean WideTransfersActive:1; boolean CommandSuccessfulFlag:1; boolean TargetInfoReported:1; -} -BusLogic_TargetFlags_T; - +}; /* Define the Host Adapter Target Statistics structure. @@ -1252,14 +1006,14 @@ typedef unsigned int BusLogic_CommandSizeBuckets_T[BusLogic_SizeBuckets]; -typedef struct BusLogic_TargetStatistics +struct BusLogic_TargetStatistics { unsigned int CommandsAttempted; unsigned int CommandsCompleted; unsigned int ReadCommands; unsigned int WriteCommands; - BusLogic_ByteCounter_T TotalBytesRead; - BusLogic_ByteCounter_T TotalBytesWritten; + struct BusLogic_ByteCounter TotalBytesRead; + struct BusLogic_ByteCounter TotalBytesWritten; BusLogic_CommandSizeBuckets_T ReadCommandSizeBuckets; BusLogic_CommandSizeBuckets_T WriteCommandSizeBuckets; unsigned short CommandAbortsRequested; @@ -1271,9 +1025,7 @@ unsigned short HostAdapterResetsRequested; unsigned short HostAdapterResetsAttempted; unsigned short HostAdapterResetsCompleted; -} -BusLogic_TargetStatistics_T; - +}; /* Define the FlashPoint Card Handle data type. @@ -1289,9 +1041,9 @@ by the FlashPoint SCCB Manager. */ -typedef struct FlashPoint_Info +struct FlashPoint_Info { - BusLogic_Base_Address_T BaseAddress; /* Bytes 0-3 */ + u32 BaseAddress; /* Bytes 0-3 */ boolean Present; /* Byte 4 */ unsigned char IRQ_Channel; /* Byte 5 */ unsigned char SCSI_ID; /* Byte 6 */ @@ -1321,22 +1073,20 @@ unsigned char TranslationInfo[4]; /* Bytes 36-39 */ unsigned int Reserved2[5]; /* Bytes 40-59 */ unsigned int SecondaryRange; /* Bytes 60-63 */ -} -FlashPoint_Info_T; - +}; /* Define the BusLogic Driver Host Adapter structure. */ -typedef struct BusLogic_HostAdapter +struct BusLogic_HostAdapter { - SCSI_Host_T *SCSI_Host; - PCI_Device_T *PCI_Device; - BusLogic_HostAdapterType_T HostAdapterType; - BusLogic_HostAdapterBusType_T HostAdapterBusType; - BusLogic_IO_Address_T IO_Address; - BusLogic_PCI_Address_T PCI_Address; + struct Scsi_Host *SCSI_Host; + struct pci_dev *PCI_Device; + enum BusLogic_HostAdapterType HostAdapterType; + enum BusLogic_HostAdapterBusType HostAdapterBusType; + unsigned long IO_Address; + unsigned long PCI_Address; unsigned short AddressCount; unsigned char HostNumber; unsigned char ModelName[9]; @@ -1393,19 +1143,17 @@ unsigned short HostAdapterInternalErrors; unsigned short TargetDeviceCount; unsigned short MessageBufferLength; - BusLogic_BusAddress_T BIOS_Address; - BusLogic_DriverOptions_T *DriverOptions; - FlashPoint_Info_T FlashPointInfo; + u32 BIOS_Address; + struct BusLogic_DriverOptions *DriverOptions; + struct FlashPoint_Info FlashPointInfo; FlashPoint_CardHandle_T CardHandle; struct BusLogic_HostAdapter *Next; - BusLogic_CCB_T *All_CCBs; - BusLogic_CCB_T *Free_CCBs; - BusLogic_CCB_T *FirstCompletedCCB; - BusLogic_CCB_T *LastCompletedCCB; - BusLogic_CCB_T *BusDeviceResetPendingCCB[BusLogic_MaxTargetDevices]; - BusLogic_ErrorRecoveryStrategy_T - ErrorRecoveryStrategy[BusLogic_MaxTargetDevices]; - BusLogic_TargetFlags_T TargetFlags[BusLogic_MaxTargetDevices]; + struct BusLogic_CCB *All_CCBs; + struct BusLogic_CCB *Free_CCBs; + struct BusLogic_CCB *FirstCompletedCCB; + struct BusLogic_CCB *LastCompletedCCB; + struct BusLogic_CCB *BusDeviceResetPendingCCB[BusLogic_MaxTargetDevices]; + struct BusLogic_TargetFlags TargetFlags[BusLogic_MaxTargetDevices]; unsigned char QueueDepth[BusLogic_MaxTargetDevices]; unsigned char SynchronousPeriod[BusLogic_MaxTargetDevices]; unsigned char SynchronousOffset[BusLogic_MaxTargetDevices]; @@ -1414,43 +1162,36 @@ unsigned long LastSequencePoint[BusLogic_MaxTargetDevices]; unsigned long LastResetAttempted[BusLogic_MaxTargetDevices]; unsigned long LastResetCompleted[BusLogic_MaxTargetDevices]; - BusLogic_OutgoingMailbox_T *FirstOutgoingMailbox; - BusLogic_OutgoingMailbox_T *LastOutgoingMailbox; - BusLogic_OutgoingMailbox_T *NextOutgoingMailbox; - BusLogic_IncomingMailbox_T *FirstIncomingMailbox; - BusLogic_IncomingMailbox_T *LastIncomingMailbox; - BusLogic_IncomingMailbox_T *NextIncomingMailbox; - BusLogic_TargetStatistics_T TargetStatistics[BusLogic_MaxTargetDevices]; + struct BusLogic_OutgoingMailbox *FirstOutgoingMailbox; + struct BusLogic_OutgoingMailbox *LastOutgoingMailbox; + struct BusLogic_OutgoingMailbox *NextOutgoingMailbox; + struct BusLogic_IncomingMailbox *FirstIncomingMailbox; + struct BusLogic_IncomingMailbox *LastIncomingMailbox; + struct BusLogic_IncomingMailbox *NextIncomingMailbox; + struct BusLogic_TargetStatistics TargetStatistics[BusLogic_MaxTargetDevices]; unsigned char *MailboxSpace; - dma_addr_t MailboxSpaceHandle; + dma_addr_t MailboxSpaceHandle; unsigned int MailboxSize; unsigned long CCB_Offset; -/* [BusLogic_MaxMailboxes - * (sizeof(BusLogic_OutgoingMailbox_T) - + sizeof(BusLogic_IncomingMailbox_T))]; */ char MessageBuffer[BusLogic_MessageBufferSize]; -} -BusLogic_HostAdapter_T; - +}; /* Define a structure for the BIOS Disk Parameters. */ -typedef struct BIOS_DiskParameters +struct BIOS_DiskParameters { int Heads; int Sectors; int Cylinders; -} -BIOS_DiskParameters_T; - +}; /* Define a structure for the SCSI Inquiry command results. */ -typedef struct SCSI_Inquiry +struct SCSI_Inquiry { unsigned char PeripheralDeviceType:5; /* Byte 0 Bits 0-4 */ unsigned char PeripheralQualifier:3; /* Byte 0 Bits 5-7 */ @@ -1477,27 +1218,22 @@ unsigned char VendorIdentification[8]; /* Bytes 8-15 */ unsigned char ProductIdentification[16]; /* Bytes 16-31 */ unsigned char ProductRevisionLevel[4]; /* Bytes 32-35 */ -} -SCSI_Inquiry_T; - +}; /* BusLogic_AcquireHostAdapterLock acquires exclusive access to Host Adapter. */ -static inline -void BusLogic_AcquireHostAdapterLock(BusLogic_HostAdapter_T *HostAdapter) +static inline void BusLogic_AcquireHostAdapterLock(struct BusLogic_HostAdapter *HostAdapter) { spin_lock_irq(HostAdapter->SCSI_Host->host_lock); } - /* BusLogic_ReleaseHostAdapterLock releases exclusive access to Host Adapter. */ -static inline -void BusLogic_ReleaseHostAdapterLock(BusLogic_HostAdapter_T *HostAdapter) +static inline void BusLogic_ReleaseHostAdapterLock(struct BusLogic_HostAdapter *HostAdapter) { spin_unlock_irq(HostAdapter->SCSI_Host->host_lock); } @@ -1508,9 +1244,8 @@ but is only called from the interrupt handler. */ -static inline -void BusLogic_AcquireHostAdapterLockIH(BusLogic_HostAdapter_T *HostAdapter, - ProcessorFlags_T *ProcessorFlags) +static inline void BusLogic_AcquireHostAdapterLockIH(struct BusLogic_HostAdapter *HostAdapter, + unsigned long *ProcessorFlags) { spin_lock_irqsave(HostAdapter->SCSI_Host->host_lock, *ProcessorFlags); } @@ -1521,9 +1256,8 @@ but is only called from the interrupt handler. */ -static inline -void BusLogic_ReleaseHostAdapterLockIH(BusLogic_HostAdapter_T *HostAdapter, - ProcessorFlags_T *ProcessorFlags) +static inline void BusLogic_ReleaseHostAdapterLockIH(struct BusLogic_HostAdapter *HostAdapter, + unsigned long *ProcessorFlags) { spin_unlock_irqrestore(HostAdapter->SCSI_Host->host_lock, *ProcessorFlags); } @@ -1534,96 +1268,80 @@ Host Adapter I/O Registers. */ -static inline -void BusLogic_SCSIBusReset(BusLogic_HostAdapter_T *HostAdapter) +static inline void BusLogic_SCSIBusReset(struct BusLogic_HostAdapter *HostAdapter) { - BusLogic_ControlRegister_T ControlRegister; + union BusLogic_ControlRegister ControlRegister; ControlRegister.All = 0; - ControlRegister.Bits.SCSIBusReset = true; + ControlRegister.SCSIBusReset = true; outb(ControlRegister.All, HostAdapter->IO_Address + BusLogic_ControlRegisterOffset); } -static inline -void BusLogic_InterruptReset(BusLogic_HostAdapter_T *HostAdapter) +static inline void BusLogic_InterruptReset(struct BusLogic_HostAdapter *HostAdapter) { - BusLogic_ControlRegister_T ControlRegister; + union BusLogic_ControlRegister ControlRegister; ControlRegister.All = 0; - ControlRegister.Bits.InterruptReset = true; + ControlRegister.InterruptReset = true; outb(ControlRegister.All, HostAdapter->IO_Address + BusLogic_ControlRegisterOffset); } -static inline -void BusLogic_SoftReset(BusLogic_HostAdapter_T *HostAdapter) +static inline void BusLogic_SoftReset(struct BusLogic_HostAdapter *HostAdapter) { - BusLogic_ControlRegister_T ControlRegister; + union BusLogic_ControlRegister ControlRegister; ControlRegister.All = 0; - ControlRegister.Bits.SoftReset = true; + ControlRegister.SoftReset = true; outb(ControlRegister.All, HostAdapter->IO_Address + BusLogic_ControlRegisterOffset); } -static inline -void BusLogic_HardReset(BusLogic_HostAdapter_T *HostAdapter) +static inline void BusLogic_HardReset(struct BusLogic_HostAdapter *HostAdapter) { - BusLogic_ControlRegister_T ControlRegister; + union BusLogic_ControlRegister ControlRegister; ControlRegister.All = 0; - ControlRegister.Bits.HardReset = true; + ControlRegister.HardReset = true; outb(ControlRegister.All, HostAdapter->IO_Address + BusLogic_ControlRegisterOffset); } -static inline -unsigned char BusLogic_ReadStatusRegister(BusLogic_HostAdapter_T *HostAdapter) +static inline unsigned char BusLogic_ReadStatusRegister(struct BusLogic_HostAdapter *HostAdapter) { return inb(HostAdapter->IO_Address + BusLogic_StatusRegisterOffset); } -static inline -void BusLogic_WriteCommandParameterRegister(BusLogic_HostAdapter_T - *HostAdapter, - unsigned char Value) +static inline void BusLogic_WriteCommandParameterRegister(struct BusLogic_HostAdapter + *HostAdapter, + unsigned char Value) { - outb(Value, - HostAdapter->IO_Address + BusLogic_CommandParameterRegisterOffset); + outb(Value, HostAdapter->IO_Address + BusLogic_CommandParameterRegisterOffset); } -static inline -unsigned char BusLogic_ReadDataInRegister(BusLogic_HostAdapter_T *HostAdapter) +static inline unsigned char BusLogic_ReadDataInRegister(struct BusLogic_HostAdapter *HostAdapter) { return inb(HostAdapter->IO_Address + BusLogic_DataInRegisterOffset); } -static inline -unsigned char BusLogic_ReadInterruptRegister(BusLogic_HostAdapter_T - *HostAdapter) +static inline unsigned char BusLogic_ReadInterruptRegister(struct BusLogic_HostAdapter *HostAdapter) { return inb(HostAdapter->IO_Address + BusLogic_InterruptRegisterOffset); } -static inline -unsigned char BusLogic_ReadGeometryRegister(BusLogic_HostAdapter_T - *HostAdapter) +static inline unsigned char BusLogic_ReadGeometryRegister(struct BusLogic_HostAdapter *HostAdapter) { return inb(HostAdapter->IO_Address + BusLogic_GeometryRegisterOffset); } - /* BusLogic_StartMailboxCommand issues an Execute Mailbox Command, which notifies the Host Adapter that an entry has been made in an Outgoing Mailbox. */ -static inline -void BusLogic_StartMailboxCommand(BusLogic_HostAdapter_T *HostAdapter) +static inline void BusLogic_StartMailboxCommand(struct BusLogic_HostAdapter *HostAdapter) { - BusLogic_WriteCommandParameterRegister(HostAdapter, - BusLogic_ExecuteMailboxCommand); + BusLogic_WriteCommandParameterRegister(HostAdapter, BusLogic_ExecuteMailboxCommand); } - /* BusLogic_Delay waits for Seconds to elapse. */ @@ -1633,36 +1351,32 @@ mdelay(1000 * Seconds); } - /* Virtual_to_Bus and Bus_to_Virtual map between Kernel Virtual Addresses and PCI/VLB/EISA/ISA Bus Addresses. */ -static inline BusLogic_BusAddress_T Virtual_to_Bus(void *VirtualAddress) +static inline u32 Virtual_to_Bus(void *VirtualAddress) { - return (BusLogic_BusAddress_T) virt_to_bus(VirtualAddress); + return (u32) virt_to_bus(VirtualAddress); } -static inline void *Bus_to_Virtual(BusLogic_BusAddress_T BusAddress) +static inline void *Bus_to_Virtual(u32 BusAddress) { return (void *) bus_to_virt(BusAddress); } - /* Virtual_to_32Bit_Virtual maps between Kernel Virtual Addresses and 32 bit Kernel Virtual Addresses. This avoids compilation warnings on 64 bit architectures. */ -static inline -BusLogic_BusAddress_T Virtual_to_32Bit_Virtual(void *VirtualAddress) +static inline u32 Virtual_to_32Bit_Virtual(void *VirtualAddress) { - return (BusLogic_BusAddress_T) (unsigned long) VirtualAddress; + return (u32) (unsigned long) VirtualAddress; } - /* BusLogic_IncrementErrorCounter increments Error Counter by 1, stopping at 65535 rather than wrapping around to 0. @@ -1673,13 +1387,12 @@ if (*ErrorCounter < 65535) (*ErrorCounter)++; } - /* BusLogic_IncrementByteCounter increments Byte Counter by Amount. */ -static inline void BusLogic_IncrementByteCounter(BusLogic_ByteCounter_T - *ByteCounter, +static inline void BusLogic_IncrementByteCounter(struct BusLogic_ByteCounter + *ByteCounter, unsigned int Amount) { ByteCounter->Units += Amount; @@ -1690,13 +1403,12 @@ } } - /* BusLogic_IncrementSizeBucket increments the Bucket for Amount. */ static inline void BusLogic_IncrementSizeBucket(BusLogic_CommandSizeBuckets_T - CommandSizeBuckets, + CommandSizeBuckets, unsigned int Amount) { int Index = 0; @@ -1716,14 +1428,12 @@ CommandSizeBuckets[Index]++; } - /* Define the version number of the FlashPoint Firmware (SCCB Manager). */ #define FlashPoint_FirmwareVersion "5.02" - /* Define the possible return values from FlashPoint_HandleInterrupt. */ @@ -1732,54 +1442,28 @@ #define FlashPoint_InternalError 0xFE #define FlashPoint_ExternalBusReset 0xFF - /* Define prototypes for the forward referenced BusLogic Driver Internal Functions. */ -static void BusLogic_QueueCompletedCCB(BusLogic_CCB_T *); -static irqreturn_t BusLogic_InterruptHandler(int, void *, Registers_T *); -static int BusLogic_ResetHostAdapter(BusLogic_HostAdapter_T *, - SCSI_Command_T *, unsigned int); -static void BusLogic_Message(BusLogic_MessageLevel_T, char *, - BusLogic_HostAdapter_T *, ...); - -/* - Declare the Initialization Functions. -*/ - -static void BusLogic_AnnounceDriver(BusLogic_HostAdapter_T *) __init; -static void BusLogic_RegisterHostAdapter(BusLogic_HostAdapter_T *) __init; -static void BusLogic_UnregisterHostAdapter(BusLogic_HostAdapter_T *) __init; -static boolean BusLogic_CreateInitialCCBs(BusLogic_HostAdapter_T *) __init; -static void BusLogic_DestroyCCBs(BusLogic_HostAdapter_T *) __init; -static void BusLogic_AppendProbeAddressISA(BusLogic_IO_Address_T) __init; -static void -BusLogic_InitializeProbeInfoListISA(BusLogic_HostAdapter_T *) __init; -static void BusLogic_SortProbeInfo(BusLogic_ProbeInfo_T *, int) __init; -static int -BusLogic_InitializeMultiMasterProbeInfo(BusLogic_HostAdapter_T *) __init; -static int -BusLogic_InitializeFlashPointProbeInfo(BusLogic_HostAdapter_T *) __init; -static void BusLogic_InitializeProbeInfoList(BusLogic_HostAdapter_T *) __init; -static boolean BusLogic_Failure(BusLogic_HostAdapter_T *, char *) __init; -static boolean BusLogic_ProbeHostAdapter(BusLogic_HostAdapter_T *) __init; -static boolean BusLogic_CheckHostAdapter(BusLogic_HostAdapter_T *) __init; -static boolean -BusLogic_ReadHostAdapterConfiguration(BusLogic_HostAdapter_T *) __init; -static boolean -BusLogic_ReportHostAdapterConfiguration(BusLogic_HostAdapter_T *) __init; -static boolean BusLogic_AcquireResources(BusLogic_HostAdapter_T *) __init; -static void BusLogic_ReleaseResources(BusLogic_HostAdapter_T *) __init; -static boolean BusLogic_TargetDeviceInquiry(BusLogic_HostAdapter_T *) __init; -static void BusLogic_InitializeHostStructure(BusLogic_HostAdapter_T *, - SCSI_Host_T *) __init; -int BusLogic_DetectHostAdapter(SCSI_Host_Template_T *) __init; -int BusLogic_ReleaseHostAdapter(SCSI_Host_T *) __init; -static boolean BusLogic_ParseKeyword(char **, char *) __init; -static int BusLogic_ParseDriverOptions(char *) __init; -static int BusLogic_Setup(char *) __init; - +static const char *BusLogic_DriverInfo(struct Scsi_Host *); +static int BusLogic_DetectHostAdapter(struct scsi_host_template *); +static int BusLogic_ReleaseHostAdapter(struct Scsi_Host *); +static int BusLogic_QueueCommand(struct scsi_cmnd *, + void (*CompletionRoutine)(struct scsi_cmnd *)); +static int BusLogic_BIOSDiskParameters(struct scsi_device *, + struct block_device *, + sector_t, int *); +static int BusLogic_ProcDirectoryInfo(struct Scsi_Host *, char *, + char **, off_t, int, int); +static int BusLogic_SlaveConfigure(struct scsi_device *); +static void BusLogic_QueueCompletedCCB(struct BusLogic_CCB *); +static irqreturn_t BusLogic_InterruptHandler(int, void *, struct pt_regs *); +static int BusLogic_ResetHostAdapter(struct BusLogic_HostAdapter *, + boolean HardReset); +static void BusLogic_Message(enum BusLogic_MessageLevel, char *, + struct BusLogic_HostAdapter *, ...); +static int __init BusLogic_Setup(char *); -#endif /* BusLogic_DriverVersion */ +#endif /* _BUSLOGIC_H */ diff -Nru a/drivers/scsi/FlashPoint.c b/drivers/scsi/FlashPoint.c --- a/drivers/scsi/FlashPoint.c Wed Feb 4 16:51:34 2004 +++ b/drivers/scsi/FlashPoint.c Wed Feb 4 16:51:34 2004 @@ -12053,14 +12053,14 @@ */ static inline unsigned char -FlashPoint__ProbeHostAdapter(FlashPoint_Info_T *FlashPointInfo) +FlashPoint__ProbeHostAdapter(struct FlashPoint_Info *FlashPointInfo) { return FlashPoint_ProbeHostAdapter((PSCCBMGR_INFO) FlashPointInfo); } static inline FlashPoint_CardHandle_T -FlashPoint__HardwareResetHostAdapter(FlashPoint_Info_T *FlashPointInfo) +FlashPoint__HardwareResetHostAdapter(struct FlashPoint_Info *FlashPointInfo) { return FlashPoint_HardwareResetHostAdapter((PSCCBMGR_INFO) FlashPointInfo); } @@ -12073,14 +12073,14 @@ static inline void -FlashPoint__StartCCB(FlashPoint_CardHandle_T CardHandle, BusLogic_CCB_T *CCB) +FlashPoint__StartCCB(FlashPoint_CardHandle_T CardHandle, struct BusLogic_CCB *CCB) { FlashPoint_StartCCB(CardHandle, (PSCCB) CCB); } static inline void -FlashPoint__AbortCCB(FlashPoint_CardHandle_T CardHandle, BusLogic_CCB_T *CCB) +FlashPoint__AbortCCB(FlashPoint_CardHandle_T CardHandle, struct BusLogic_CCB *CCB) { FlashPoint_AbortCCB(CardHandle, (PSCCB) CCB); } @@ -12143,11 +12143,11 @@ Define prototypes for the FlashPoint SCCB Manager Functions. */ -extern unsigned char FlashPoint_ProbeHostAdapter(FlashPoint_Info_T *); +extern unsigned char FlashPoint_ProbeHostAdapter(struct FlashPoint_Info *); extern FlashPoint_CardHandle_T - FlashPoint_HardwareResetHostAdapter(FlashPoint_Info_T *); -extern void FlashPoint_StartCCB(FlashPoint_CardHandle_T, BusLogic_CCB_T *); -extern int FlashPoint_AbortCCB(FlashPoint_CardHandle_T, BusLogic_CCB_T *); + FlashPoint_HardwareResetHostAdapter(struct FlashPoint_Info *); +extern void FlashPoint_StartCCB(FlashPoint_CardHandle_T, struct BusLogic_CCB *); +extern int FlashPoint_AbortCCB(FlashPoint_CardHandle_T, struct BusLogic_CCB *); extern boolean FlashPoint_InterruptPending(FlashPoint_CardHandle_T); extern int FlashPoint_HandleInterrupt(FlashPoint_CardHandle_T); extern void FlashPoint_ReleaseHostAdapter(FlashPoint_CardHandle_T); diff -Nru a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig --- a/drivers/scsi/Kconfig Wed Feb 4 16:51:37 2004 +++ b/drivers/scsi/Kconfig Wed Feb 4 16:51:37 2004 @@ -376,23 +376,6 @@ To compile this driver as a module, choose M here: the module will be called in2000. -# does not use pci dma and seems to be onboard only for old machines -config SCSI_AM53C974 - tristate "AM53/79C974 PCI SCSI support" - depends on X86 && PCI && SCSI && BROKEN - ---help--- - This is support for the AM53/79C974 SCSI host adapters. Please read - for details. Also, the - SCSI-HOWTO, available from - , is for you. - - Note that there is another driver for AM53C974 based adapters: - "Tekram DC390(T) and Am53/79C974 (PCscsi) SCSI support", above. You - can pick either one. - - To compile this driver as a module, choose M here: the - module will be called AM53C974. - config SCSI_MEGARAID tristate "AMI MegaRAID support" depends on PCI && SCSI @@ -903,7 +886,7 @@ language. It does not support LSI53C10XX Ultra-320 PCI-X SCSI controllers; you need to use the Fusion MPT driver for that. - Please read for more + Please read for more information. config SCSI_SYM53C8XX_DMA_ADDRESSING_MODE @@ -1171,23 +1154,6 @@ To compile this driver as a module, choose M here: the module will be called qlogicisp. - -config SCSI_QLOGIC_FC - tristate "Qlogic ISP FC SCSI support" - depends on PCI && SCSI - help - This is a driver for the QLogic ISP2100 SCSI-FCP host adapter. - - To compile this driver as a module, choose M here: the - module will be called qlogicfc. - -config SCSI_QLOGIC_FC_FIRMWARE - bool "Include loadable firmware in driver" - depends on SCSI_QLOGIC_FC - help - Say Y to include ISP2X00 Fabric Initiator/Target Firmware, with - expanded LUN addressing and FcTape (FCP-2) support, in the - qlogicfc driver. This is required on some platforms. config SCSI_QLOGIC_1280 tristate "Qlogic QLA 1280 SCSI support" diff -Nru a/drivers/scsi/Makefile b/drivers/scsi/Makefile --- a/drivers/scsi/Makefile Wed Feb 4 16:51:36 2004 +++ b/drivers/scsi/Makefile Wed Feb 4 16:51:36 2004 @@ -69,7 +69,6 @@ obj-$(CONFIG_SCSI_SYM53C416) += sym53c416.o obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicfas.o obj-$(CONFIG_SCSI_QLOGIC_ISP) += qlogicisp.o -obj-$(CONFIG_SCSI_QLOGIC_FC) += qlogicfc.o obj-$(CONFIG_SCSI_QLOGIC_1280) += qla1280.o obj-$(CONFIG_SCSI_QLA2XXX) += qla2xxx/ obj-$(CONFIG_SCSI_PAS16) += pas16.o @@ -87,7 +86,6 @@ obj-$(CONFIG_SCSI_EATA) += eata.o obj-$(CONFIG_SCSI_DC395x) += dc395x.o obj-$(CONFIG_SCSI_DC390T) += tmscsim.o -obj-$(CONFIG_SCSI_AM53C974) += AM53C974.o obj-$(CONFIG_SCSI_MEGARAID) += megaraid.o obj-$(CONFIG_SCSI_ACARD) += atp870u.o obj-$(CONFIG_SCSI_SUNESP) += esp.o diff -Nru a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c --- a/drivers/scsi/advansys.c Wed Feb 4 16:51:34 2004 +++ b/drivers/scsi/advansys.c Wed Feb 4 16:51:34 2004 @@ -6018,8 +6018,8 @@ } else { /* Append to 'done_scp' at the end with 'last_scp'. */ ASC_ASSERT(last_scp != NULL); - REQPNEXT(last_scp) = asc_dequeue_list(&boardp->active, - &new_last_scp, ASC_TID_ALL); + last_scp->host_scribble = (unsigned char *)asc_dequeue_list( + &boardp->active, &new_last_scp, ASC_TID_ALL); if (new_last_scp != NULL) { ASC_ASSERT(REQPNEXT(last_scp) != NULL); for (tscp = REQPNEXT(last_scp); tscp; tscp = REQPNEXT(tscp)) { @@ -6041,8 +6041,8 @@ } else { /* Append to 'done_scp' at the end with 'last_scp'. */ ASC_ASSERT(last_scp != NULL); - REQPNEXT(last_scp) = asc_dequeue_list(&boardp->waiting, - &new_last_scp, ASC_TID_ALL); + last_scp->host_scribble = (unsigned char *)asc_dequeue_list( + &boardp->waiting, &new_last_scp, ASC_TID_ALL); if (new_last_scp != NULL) { ASC_ASSERT(REQPNEXT(last_scp) != NULL); for (tscp = REQPNEXT(last_scp); tscp; tscp = REQPNEXT(tscp)) { @@ -6310,8 +6310,8 @@ ASC_TID_ALL); } else { ASC_ASSERT(last_scp != NULL); - REQPNEXT(last_scp) = asc_dequeue_list(&boardp->done, - &new_last_scp, ASC_TID_ALL); + last_scp->host_scribble = (unsigned char *)asc_dequeue_list( + &boardp->done, &new_last_scp, ASC_TID_ALL); if (new_last_scp != NULL) { ASC_ASSERT(REQPNEXT(last_scp) != NULL); last_scp = new_last_scp; @@ -6383,7 +6383,7 @@ while (scp != NULL) { ASC_DBG1(3, "asc_scsi_done_list: scp 0x%lx\n", (ulong) scp); tscp = REQPNEXT(scp); - REQPNEXT(scp) = NULL; + scp->host_scribble = NULL; ASC_STATS(scp->device->host, done); ASC_ASSERT(scp->scsi_done != NULL); if (from_isr) @@ -7434,7 +7434,7 @@ tid = REQPTID(reqp); ASC_ASSERT(tid >= 0 && tid <= ADV_MAX_TID); if (flag == ASC_FRONT) { - REQPNEXT(reqp) = ascq->q_first[tid]; + reqp->host_scribble = (unsigned char *)ascq->q_first[tid]; ascq->q_first[tid] = reqp; /* If the queue was empty, set the last pointer. */ if (ascq->q_last[tid] == NULL) { @@ -7442,10 +7442,10 @@ } } else { /* ASC_BACK */ if (ascq->q_last[tid] != NULL) { - REQPNEXT(ascq->q_last[tid]) = reqp; + ascq->q_last[tid]->host_scribble = (unsigned char *)reqp; } ascq->q_last[tid] = reqp; - REQPNEXT(reqp) = NULL; + reqp->host_scribble = NULL; /* If the queue was empty, set the first pointer. */ if (ascq->q_first[tid] == NULL) { ascq->q_first[tid] = reqp; @@ -7566,7 +7566,7 @@ lastp = ascq->q_last[i]; } else { ASC_ASSERT(lastp != NULL); - REQPNEXT(lastp) = ascq->q_first[i]; + lastp->host_scribble = (unsigned char *)ascq->q_first[i]; lastp = ascq->q_last[i]; } ascq->q_first[i] = ascq->q_last[i] = NULL; @@ -7644,8 +7644,8 @@ currp; prevp = currp, currp = REQPNEXT(currp)) { if (currp == reqp) { ret = ASC_TRUE; - REQPNEXT(prevp) = REQPNEXT(currp); - REQPNEXT(reqp) = NULL; + prevp->host_scribble = (unsigned char *)REQPNEXT(currp); + reqp->host_scribble = NULL; if (ascq->q_last[tid] == reqp) { ascq->q_last[tid] = prevp; } diff -Nru a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c --- a/drivers/scsi/aha152x.c Wed Feb 4 16:51:33 2004 +++ b/drivers/scsi/aha152x.c Wed Feb 4 16:51:33 2004 @@ -1,6 +1,6 @@ /* aha152x.c -- Adaptec AHA-152x driver * Author: Jürgen E. Fischer, fischer@norbit.de - * Copyright 1993-2000 Jürgen E. Fischer + * Copyright 1993-2004 Jürgen E. Fischer * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -13,9 +13,17 @@ * General Public License for more details. * * - * $Id: aha152x.c,v 2.6 2003/10/30 20:52:47 fischer Exp $ + * $Id: aha152x.c,v 2.7 2004/01/24 11:42:59 fischer Exp $ * * $Log: aha152x.c,v $ + * Revision 2.7 2004/01/24 11:42:59 fischer + * - gather code that is not used by PCMCIA at the end + * - move request_region for !PCMCIA case to detection + * - migration to new scsi host api (remove legacy code) + * - free host scribble before scsi_done + * - fix error handling + * - one isapnp device added to id_table + * * Revision 2.6 2003/10/30 20:52:47 fischer * - interfaces changes for kernel 2.6 * - aha152x_probe_one introduced for pcmcia stub @@ -344,7 +352,8 @@ MODULE_DESCRIPTION(AHA152X_REVID); MODULE_LICENSE("GPL"); -#if defined(MODULE) && !defined(PCMCIA) +#if !defined(PCMCIA) +#if defined(MODULE) MODULE_PARM(io, "1-2i"); MODULE_PARM_DESC(io,"base io address of controller"); static int io[] = {0, 0}; @@ -398,21 +407,23 @@ MODULE_PARM_DESC(aha152x1, "parameters for second controller"); static int aha152x1[] = {0, 11, 7, 1, 1, 1, DELAY_DEFAULT, 0, DEBUG_DEFAULT}; #endif /* !defined(AHA152X_DEBUG) */ -#endif /* MODULE && !PCMCIA */ +#endif /* MODULE */ #ifdef __ISAPNP__ static struct isapnp_device_id id_table[] __devinitdata = { - { ISAPNP_DEVICE_SINGLE('A','D','P',0x1505, 'A','D','P',0x1505), }, + { ISAPNP_ANY_ID, ISAPNP_ANY_ID, + ISAPNP_VENDOR('A','D','P'), ISAPNP_FUNCTION(0x1505), 0 }, + { ISAPNP_ANY_ID, ISAPNP_ANY_ID, + ISAPNP_VENDOR('A','D','P'), ISAPNP_FUNCTION(0x1530), 0 }, { ISAPNP_DEVICE_SINGLE_END, } }; MODULE_DEVICE_TABLE(isapnp, id_table); #endif /* ISAPNP */ -/* set by aha152x_setup according to the command line */ -static int setup_count; -static int registered_count; -static struct aha152x_setup setup[2]; -static struct Scsi_Host *aha152x_host[2]; +#endif /* !PCMCIA */ + +static int registered_count=0; +static struct Scsi_Host *aha152x_host[2] = {0, 0}; static Scsi_Host_Template aha152x_driver_template; /* @@ -658,7 +669,6 @@ static void reset_ports(struct Scsi_Host *shpnt); static void aha152x_error(struct Scsi_Host *shpnt, char *msg); static void done(struct Scsi_Host *shpnt, int error); -static int checksetup(struct aha152x_setup *setup); /* diagnostics */ static void disp_ports(struct Scsi_Host *shpnt); @@ -666,66 +676,6 @@ static void show_queues(struct Scsi_Host *shpnt); static void disp_enintr(struct Scsi_Host *shpnt); -/* possible i/o addresses for the AIC-6260; default first */ -static unsigned short ports[] = { 0x340, 0x140 }; - -#if !defined(SKIP_BIOSTEST) -/* possible locations for the Adaptec BIOS; defaults first */ -static unsigned int addresses[] = -{ - 0xdc000, /* default first */ - 0xc8000, - 0xcc000, - 0xd0000, - 0xd4000, - 0xd8000, - 0xe0000, - 0xeb800, /* VTech Platinum SMP */ - 0xf0000, -}; - -/* signatures for various AIC-6[23]60 based controllers. - The point in detecting signatures is to avoid useless and maybe - harmful probes on ports. I'm not sure that all listed boards pass - auto-configuration. For those which fail the BIOS signature is - obsolete, because user intervention to supply the configuration is - needed anyway. May be an information whether or not the BIOS supports - extended translation could be also useful here. */ -static struct signature { - unsigned char *signature; - int sig_offset; - int sig_length; -} signatures[] = -{ - { "Adaptec AHA-1520 BIOS", 0x102e, 21 }, - /* Adaptec 152x */ - { "Adaptec AHA-1520B", 0x000b, 17 }, - /* Adaptec 152x rev B */ - { "Adaptec AHA-1520B", 0x0026, 17 }, - /* Iomega Jaz Jet ISA (AIC6370Q) */ - { "Adaptec ASW-B626 BIOS", 0x1029, 21 }, - /* on-board controller */ - { "Adaptec BIOS: ASW-B626", 0x000f, 22 }, - /* on-board controller */ - { "Adaptec ASW-B626 S2", 0x2e6c, 19 }, - /* on-board controller */ - { "Adaptec BIOS:AIC-6360", 0x000c, 21 }, - /* on-board controller */ - { "ScsiPro SP-360 BIOS", 0x2873, 19 }, - /* ScsiPro-Controller */ - { "GA-400 LOCAL BUS SCSI BIOS", 0x102e, 26 }, - /* Gigabyte Local-Bus-SCSI */ - { "Adaptec BIOS:AVA-282X", 0x000c, 21 }, - /* Adaptec 282x */ - { "Adaptec IBM Dock II SCSI", 0x2edd, 24 }, - /* IBM Thinkpad Dock II */ - { "Adaptec BIOS:AHA-1532P", 0x001c, 22 }, - /* IBM Thinkpad Dock II SCSI */ - { "DTC3520A Host Adapter BIOS", 0x318a, 26 }, - /* DTC 3520A ISA SCSI */ -}; -#endif - /* * queue services: @@ -799,141 +749,6 @@ return ptr; } -#if defined(PCMCIA) || !defined(MODULE) -static void aha152x_setup(char *str, int *ints) -{ - if(setup_count>=ARRAY_SIZE(setup)) { - printk(KERN_ERR "aha152x: you can only configure up to two controllers\n"); - return; - } - - setup[setup_count].conf = str; - setup[setup_count].io_port = ints[0] >= 1 ? ints[1] : 0x340; - setup[setup_count].irq = ints[0] >= 2 ? ints[2] : 11; - setup[setup_count].scsiid = ints[0] >= 3 ? ints[3] : 7; - setup[setup_count].reconnect = ints[0] >= 4 ? ints[4] : 1; - setup[setup_count].parity = ints[0] >= 5 ? ints[5] : 1; - setup[setup_count].synchronous = ints[0] >= 6 ? ints[6] : 1; - setup[setup_count].delay = ints[0] >= 7 ? ints[7] : DELAY_DEFAULT; - setup[setup_count].ext_trans = ints[0] >= 8 ? ints[8] : 0; -#if defined(AHA152X_DEBUG) - setup[setup_count].debug = ints[0] >= 9 ? ints[9] : DEBUG_DEFAULT; - if (ints[0] > 9) { - printk(KERN_NOTICE "aha152x: usage: aha152x=[,[," - "[,[,[,[,[,[,]]]]]]]]\n"); -#else - if (ints[0] > 8) { /*}*/ - printk(KERN_NOTICE "aha152x: usage: aha152x=[,[," - "[,[,[,[,[,]]]]]]]\n"); -#endif - } else { - setup_count++; - } -} -#endif - -#if !defined(MODULE) -static int __init do_setup(char *str) -{ - -#if defined(AHA152X_DEBUG) - int ints[11]; -#else - int ints[10]; -#endif - int count=setup_count; - - get_options(str, ARRAY_SIZE(ints), ints); - aha152x_setup(str,ints); - - return countio_port)) { - setup->tc1550=0; - } else if(tc1550_porttest(setup->io_port)) { - setup->tc1550=1; - } else { - release_region(setup->io_port, IO_RANGE); - return 0; - } - - release_region(setup->io_port, IO_RANGE); - - - if ((setup->irq < IRQ_MIN) || (setup->irq > IRQ_MAX)) - return 0; - - if ((setup->scsiid < 0) || (setup->scsiid > 7)) - return 0; - - if ((setup->reconnect < 0) || (setup->reconnect > 1)) - return 0; - - if ((setup->parity < 0) || (setup->parity > 1)) - return 0; - - if ((setup->synchronous < 0) || (setup->synchronous > 1)) - return 0; - - if ((setup->ext_trans < 0) || (setup->ext_trans > 1)) - return 0; - - - return 1; -} - static inline struct Scsi_Host *lookup_irq(int irqno) { int i; @@ -950,7 +765,6 @@ struct Scsi_Host *shpnt = lookup_irq(irqno); if (!shpnt) { - /* no point using HOSTNO here! */ printk(KERN_ERR "aha152x: catched software interrupt %d for unknown controller.\n", irqno); return IRQ_NONE; } @@ -961,17 +775,19 @@ return IRQ_HANDLED; } - struct Scsi_Host *aha152x_probe_one(struct aha152x_setup *setup) { struct Scsi_Host *shpnt; shpnt = scsi_host_alloc(&aha152x_driver_template, sizeof(struct aha152x_hostdata)); if (!shpnt) { - printk(KERN_ERR "aha152x: scsi_register failed\n"); + printk(KERN_ERR "aha152x: scsi_host_alloc failed\n"); return NULL; } + /* need to have host registered before triggering any interrupt */ + aha152x_host[registered_count] = shpnt; + memset(HOSTDATA(shpnt), 0, sizeof *HOSTDATA(shpnt)); shpnt->io_port = setup->io_port; @@ -1034,24 +850,19 @@ DELAY, EXT_TRANS ? "enabled" : "disabled"); - if (!request_region(shpnt->io_port, IO_RANGE, "aha152x")) - goto out_unregister; - /* not expecting any interrupts */ SETPORT(SIMODE0, 0); SETPORT(SIMODE1, 0); - if (request_irq(shpnt->irq, swintr, SA_INTERRUPT|SA_SHIRQ, "aha152x", shpnt) < 0) { - printk(KERN_ERR "aha152x%d: driver needs an IRQ.\n", shpnt->host_no); - goto out_release_region; + if( request_irq(shpnt->irq, swintr, SA_INTERRUPT|SA_SHIRQ, "aha152x", shpnt) ) { + printk(KERN_ERR "aha152x%d: irq %d busy.\n", shpnt->host_no, shpnt->irq); + goto out_host_put; } HOSTDATA(shpnt)->swint = 0; printk(KERN_INFO "aha152x%d: trying software interrupt, ", shpnt->host_no); - /* need to have host registered before triggering any interrupt */ - aha152x_host[registered_count] = shpnt; mb(); SETPORT(DMACNTRL0, SWINT|INTEN); mdelay(1000); @@ -1066,9 +877,9 @@ SETPORT(DMACNTRL0, INTEN); - printk(KERN_ERR "aha152x%d: IRQ %d possibly wrong. " + printk(KERN_ERR "aha152x%d: irq %d possibly wrong. " "Please verify.\n", shpnt->host_no, shpnt->irq); - goto out_unregister_host; + goto out_host_put; } printk("ok.\n"); @@ -1077,322 +888,50 @@ SETPORT(SSTAT0, 0x7f); SETPORT(SSTAT1, 0xef); - if (request_irq(shpnt->irq, intr, SA_INTERRUPT|SA_SHIRQ, "aha152x", shpnt) < 0) { - printk(KERN_ERR "aha152x%d: failed to reassign interrupt.\n", shpnt->host_no); - goto out_unregister_host; - } - - scsi_add_host(shpnt, 0); - scsi_scan_host(shpnt); - return shpnt; /* the pcmcia stub needs the return value; */ - -out_unregister_host: - aha152x_host[registered_count] = NULL; -out_release_region: - release_region(shpnt->io_port, IO_RANGE); -out_unregister: - scsi_host_put(shpnt); - return NULL; -} - -static int __init aha152x_init(void) -{ - int i, j, ok; -#if defined(AUTOCONF) - aha152x_config conf; -#endif -#ifdef __ISAPNP__ - struct pnp_dev *dev=0, *pnpdev[2] = {0, 0}; -#endif - - if (setup_count) { - printk(KERN_INFO "aha152x: processing commandline: "); - - for (i = 0; i < setup_count; i++) - if (!checksetup(&setup[i])) { - printk(KERN_ERR "\naha152x: %s\n", setup[i].conf); - printk(KERN_ERR "aha152x: invalid line\n"); - } - printk("ok\n"); - } - -#if defined(SETUP0) - if (setup_count < ARRAY_SIZE(setup)) { - struct aha152x_setup override = SETUP0; - - if (setup_count == 0 || (override.io_port != setup[0].io_port)) { - if (!checksetup(&override)) { - printk(KERN_ERR "\naha152x: invalid override SETUP0={0x%x,%d,%d,%d,%d,%d,%d,%d}\n", - override.io_port, - override.irq, - override.scsiid, - override.reconnect, - override.parity, - override.synchronous, - override.delay, - override.ext_trans); - } else - setup[setup_count++] = override; - } - } -#endif - -#if defined(SETUP1) - if (setup_count < ARRAY_SIZE(setup)) { - struct aha152x_setup override = SETUP1; - - if (setup_count == 0 || (override.io_port != setup[0].io_port)) { - if (!checksetup(&override)) { - printk(KERN_ERR "\naha152x: invalid override SETUP1={0x%x,%d,%d,%d,%d,%d,%d,%d}\n", - override.io_port, - override.irq, - override.scsiid, - override.reconnect, - override.parity, - override.synchronous, - override.delay, - override.ext_trans); - } else - setup[setup_count++] = override; - } - } -#endif - -#if defined(MODULE) && !defined(PCMCIA) - if (setup_countirq, intr, SA_INTERRUPT|SA_SHIRQ, "aha152x", shpnt) ) { + printk(KERN_ERR "aha152x%d: failed to reassign irq %d.\n", shpnt->host_no, shpnt->irq); + goto out_host_put; } -#endif -#ifdef __ISAPNP__ - while ( setup_countirq, shpnt); + printk(KERN_ERR "aha152x%d: failed to add host.\n", shpnt->host_no); + goto out_host_put; } -#endif - -#if defined(AUTOCONF) - if (setup_countpnpdev=pnpdev[i]; -#endif - registered_count++; - } - } +out_host_put: + aha152x_host[registered_count]=0; + scsi_host_put(shpnt); - return registered_count>0; + return 0; } -static int aha152x_release(struct Scsi_Host *shpnt) +void aha152x_release(struct Scsi_Host *shpnt) { + if(!shpnt) + return; + if (shpnt->irq) free_irq(shpnt->irq, shpnt); +#if !defined(PCMCIA) if (shpnt->io_port) release_region(shpnt->io_port, IO_RANGE); +#endif #ifdef __ISAPNP__ if (HOSTDATA(shpnt)->pnpdev) pnp_device_detach(HOSTDATA(shpnt)->pnpdev); #endif + scsi_remove_host(shpnt); scsi_host_put(shpnt); - - return 0; -} - -static void __exit aha152x_exit(void) -{ - int i; - - for(i=0; idebug & debug_queue) { - printk(INFO_LEAD "queue: cmd_len=%d pieces=%d size=%u cmnd=", - CMDINFO(SCpnt), SCpnt->cmd_len, SCpnt->use_sg, SCpnt->request_bufflen); + printk(INFO_LEAD "queue: %p; cmd_len=%d pieces=%d size=%u cmnd=", + CMDINFO(SCpnt), SCpnt, SCpnt->cmd_len, SCpnt->use_sg, SCpnt->request_bufflen); print_command(SCpnt->cmnd); } #endif @@ -1466,7 +1005,7 @@ return FAILED; } } else { - SCpnt->host_scribble = kmalloc(sizeof(struct aha152x_scdata), GFP_ATOMIC); + SCpnt->host_scribble = kmalloc(sizeof(struct aha152x_scdata), GFP_ATOMIC); if(SCpnt->host_scribble==0) { printk(ERR_LEAD "allocation failed\n", CMDINFO(SCpnt)); return FAILED; @@ -1561,11 +1100,6 @@ Scsi_Cmnd *ptr; unsigned long flags; - if(!shpnt) { - printk(ERR_LEAD "abort(%p): no host structure\n", CMDINFO(SCpnt), SCpnt); - return FAILED; - } - #if defined(AHA152X_DEBUG) if(HOSTDATA(shpnt)->debug & debug_eh) { printk(DEBUG_LEAD "abort(%p)", CMDINFO(SCpnt), SCpnt); @@ -1610,15 +1144,12 @@ Scsi_Cmnd *SCp = (Scsi_Cmnd *)p; struct semaphore *sem = SCSEM(SCp); struct Scsi_Host *shpnt = SCp->device->host; + unsigned long flags; /* remove command from issue queue */ - if(remove_SC(&ISSUE_SC, SCp)) { - printk(KERN_INFO "aha152x: ABORT timed out - removed from issue queue\n"); - kfree(SCp->host_scribble); - SCp->host_scribble=0; - } else { - printk(KERN_INFO "aha152x: ABORT timed out - not on issue queue\n"); - } + DO_LOCK(flags); + remove_SC(&ISSUE_SC, SCp); + DO_UNLOCK(flags); up(sem); } @@ -1626,15 +1157,14 @@ /* * Reset a device * - * FIXME: never seen this live. might lockup... - * */ static int aha152x_device_reset(Scsi_Cmnd * SCpnt) { struct Scsi_Host *shpnt = SCpnt->device->host; DECLARE_MUTEX_LOCKED(sem); struct timer_list timer; - int ret; + int ret, issued, disconnected; + unsigned long flags; #if defined(AHA152X_DEBUG) if(HOSTDATA(shpnt)->debug & debug_eh) { @@ -1648,13 +1178,18 @@ return FAILED; } + DO_LOCK(flags); + issued = remove_SC(&ISSUE_SC, SCpnt)==0; + disconnected = issued && remove_SC(&DISCONNECTED_SC, SCpnt); + DO_UNLOCK(flags); + SCpnt->cmd_len = 0; SCpnt->use_sg = 0; SCpnt->request_buffer = 0; SCpnt->request_bufflen = 0; init_timer(&timer); - timer.data = (unsigned long) cmd; + timer.data = (unsigned long) SCpnt; timer.expires = jiffies + 100*HZ; /* 10s */ timer.function = (void (*)(unsigned long)) timer_expired; @@ -1662,18 +1197,35 @@ add_timer(&timer); down(&sem); del_timer(&timer); - + SCpnt->cmd_len = SCpnt->old_cmd_len; SCpnt->use_sg = SCpnt->old_use_sg; SCpnt->request_buffer = SCpnt->buffer; SCpnt->request_bufflen = SCpnt->bufflen; + DO_LOCK(flags); + if(SCpnt->SCp.phase & resetted) { + HOSTDATA(shpnt)->commands--; + if (!HOSTDATA(shpnt)->commands) + SETPORT(PORTA, 0); + kfree(SCpnt->host_scribble); + SCpnt->host_scribble=0; + ret = SUCCESS; } else { + /* requeue */ + if(!issued) { + append_SC(&ISSUE_SC, SCpnt); + } else if(disconnected) { + append_SC(&DISCONNECTED_SC, SCpnt); + } + ret = FAILED; } + DO_UNLOCK(flags); + spin_lock_irq(shpnt->host_lock); return ret; } @@ -1681,13 +1233,17 @@ static void free_hard_reset_SCs(struct Scsi_Host *shpnt, Scsi_Cmnd **SCs) { Scsi_Cmnd *ptr; - unsigned long flags; - - DO_LOCK(flags); ptr=*SCs; while(ptr) { - Scsi_Cmnd *next = SCNEXT(ptr); + Scsi_Cmnd *next; + + if(SCDATA(ptr)) { + next = SCNEXT(ptr); + } else { + printk(DEBUG_LEAD "queue corrupted at %p\n", CMDINFO(ptr), ptr); + next = 0; + } if (!ptr->device->soft_reset) { DPRINTK(debug_eh, DEBUG_LEAD "disconnected command %p removed\n", CMDINFO(ptr), ptr); @@ -1699,8 +1255,6 @@ ptr = next; } - - DO_UNLOCK(flags); } /* @@ -1712,6 +1266,8 @@ struct Scsi_Host *shpnt = SCpnt->device->host; unsigned long flags; + DO_LOCK(flags); + #if defined(AHA152X_DEBUG) if(HOSTDATA(shpnt)->debug & debug_eh) { printk(DEBUG_LEAD "aha152x_bus_reset(%p)", CMDINFO(SCpnt), SCpnt); @@ -1729,12 +1285,12 @@ SETPORT(SCSISEQ, 0); mdelay(DELAY); - DPRINTK(debug_eh, DEBUG_LEAD "bus reset returns\n", CMDINFO(SCpnt)); + DPRINTK(debug_eh, DEBUG_LEAD "bus resetted\n", CMDINFO(SCpnt)); - DO_LOCK(flags); setup_expected_interrupts(shpnt); if(HOSTDATA(shpnt)->commands==0) SETPORT(PORTA, 0); + DO_UNLOCK(flags); return SUCCESS; @@ -2000,6 +1556,7 @@ #if defined(AHA152X_STAT) action++; #endif + if(DONE_SC->SCp.phase & check_condition) { #if 0 if(HOSTDATA(shpnt)->debug & debug_eh) { @@ -2029,47 +1586,57 @@ #endif if(!(DONE_SC->SCp.Status & not_issued)) { + Scsi_Cmnd *ptr = DONE_SC; + DONE_SC=0; #if 0 - DPRINTK(debug_eh, ERR_LEAD "requesting sense\n", CMDINFO(DONE_SC)); + DPRINTK(debug_eh, ERR_LEAD "requesting sense\n", CMDINFO(ptr)); #endif - DONE_SC->cmnd[0] = REQUEST_SENSE; - DONE_SC->cmnd[1] = 0; - DONE_SC->cmnd[2] = 0; - DONE_SC->cmnd[3] = 0; - DONE_SC->cmnd[4] = sizeof(DONE_SC->sense_buffer); - DONE_SC->cmnd[5] = 0; - DONE_SC->cmd_len = 6; - DONE_SC->use_sg = 0; - DONE_SC->request_buffer = DONE_SC->sense_buffer; - DONE_SC->request_bufflen = sizeof(DONE_SC->sense_buffer); + ptr->cmnd[0] = REQUEST_SENSE; + ptr->cmnd[1] = 0; + ptr->cmnd[2] = 0; + ptr->cmnd[3] = 0; + ptr->cmnd[4] = sizeof(ptr->sense_buffer); + ptr->cmnd[5] = 0; + ptr->cmd_len = 6; + ptr->use_sg = 0; + ptr->request_buffer = ptr->sense_buffer; + ptr->request_bufflen = sizeof(ptr->sense_buffer); DO_UNLOCK(flags); - aha152x_internal_queue(DONE_SC, 0, check_condition, DONE_SC->scsi_done); + aha152x_internal_queue(ptr, 0, check_condition, ptr->scsi_done); DO_LOCK(flags); - - DONE_SC=0; - } else { #if 0 + } else { DPRINTK(debug_eh, ERR_LEAD "command not issued - CHECK CONDITION ignored\n", CMDINFO(DONE_SC)); #endif } } if(DONE_SC && DONE_SC->scsi_done) { +#if defined(AHA152X_DEBUG) + int hostno=DONE_SC->device->host->host_no; + int id=DONE_SC->device->id & 0xf; + int lun=DONE_SC->device->lun & 0x7; +#endif + Scsi_Cmnd *ptr = DONE_SC; + DONE_SC=0; + /* turn led off, when no commands are in the driver */ HOSTDATA(shpnt)->commands--; if (!HOSTDATA(shpnt)->commands) SETPORT(PORTA, 0); /* turn led off */ + if(ptr->scsi_done != reset_done) { + kfree(ptr->host_scribble); + ptr->host_scribble=0; + } + DO_UNLOCK(flags); - DPRINTK(debug_done, DEBUG_LEAD "calling scsi_done(%p)\n", CMDINFO(DONE_SC), DONE_SC); - DONE_SC->scsi_done(DONE_SC); - DPRINTK(debug_done, DEBUG_LEAD "scsi_done(%p) returned\n", CMDINFO(DONE_SC), DONE_SC); + DPRINTK(debug_done, DEBUG_LEAD "calling scsi_done(%p)\n", hostno, id, lun, ptr); + ptr->scsi_done(ptr); + DPRINTK(debug_done, DEBUG_LEAD "scsi_done(%p) returned\n", hostno, id, lun, ptr); DO_LOCK(flags); - - kfree(DONE_SC->host_scribble); - DONE_SC->host_scribble=0; } DONE_SC=0; @@ -2936,11 +2503,11 @@ if (!ptr->device->soft_reset) { remove_SC(&DISCONNECTED_SC, ptr); - ptr->result = DID_RESET << 16; - ptr->scsi_done(ptr); - kfree(ptr->host_scribble); ptr->host_scribble=0; + + ptr->result = DID_RESET << 16; + ptr->scsi_done(ptr); } ptr = next; @@ -3382,7 +2949,11 @@ printk("aborted|"); if (ptr->SCp.phase & resetted) printk("resetted|"); - printk("; next=0x%p\n", SCNEXT(ptr)); + if( SCDATA(ptr) ) { + printk("; next=0x%p\n", SCNEXT(ptr)); + } else { + printk("; next=(host scribble NULL)\n"); + } } /* @@ -3406,7 +2977,7 @@ printk(KERN_DEBUG "none\n"); printk(KERN_DEBUG "disconnected_SC:\n"); - for (ptr = DISCONNECTED_SC; ptr; ptr = SCNEXT(ptr)) + for (ptr = DISCONNECTED_SC; ptr; ptr = SCDATA(ptr) ? SCNEXT(ptr) : 0) show_command(ptr); disp_ports(shpnt); @@ -3914,7 +3485,494 @@ .use_clustering = DISABLE_CLUSTERING, }; -#ifndef PCMCIA +#if !defined(PCMCIA) +static int setup_count; +static struct aha152x_setup setup[2]; + +/* possible i/o addresses for the AIC-6260; default first */ +static unsigned short ports[] = { 0x340, 0x140 }; + +#if !defined(SKIP_BIOSTEST) +/* possible locations for the Adaptec BIOS; defaults first */ +static unsigned int addresses[] = +{ + 0xdc000, /* default first */ + 0xc8000, + 0xcc000, + 0xd0000, + 0xd4000, + 0xd8000, + 0xe0000, + 0xeb800, /* VTech Platinum SMP */ + 0xf0000, +}; + +/* signatures for various AIC-6[23]60 based controllers. + The point in detecting signatures is to avoid useless and maybe + harmful probes on ports. I'm not sure that all listed boards pass + auto-configuration. For those which fail the BIOS signature is + obsolete, because user intervention to supply the configuration is + needed anyway. May be an information whether or not the BIOS supports + extended translation could be also useful here. */ +static struct signature { + unsigned char *signature; + int sig_offset; + int sig_length; +} signatures[] = +{ + { "Adaptec AHA-1520 BIOS", 0x102e, 21 }, + /* Adaptec 152x */ + { "Adaptec AHA-1520B", 0x000b, 17 }, + /* Adaptec 152x rev B */ + { "Adaptec AHA-1520B", 0x0026, 17 }, + /* Iomega Jaz Jet ISA (AIC6370Q) */ + { "Adaptec ASW-B626 BIOS", 0x1029, 21 }, + /* on-board controller */ + { "Adaptec BIOS: ASW-B626", 0x000f, 22 }, + /* on-board controller */ + { "Adaptec ASW-B626 S2", 0x2e6c, 19 }, + /* on-board controller */ + { "Adaptec BIOS:AIC-6360", 0x000c, 21 }, + /* on-board controller */ + { "ScsiPro SP-360 BIOS", 0x2873, 19 }, + /* ScsiPro-Controller */ + { "GA-400 LOCAL BUS SCSI BIOS", 0x102e, 26 }, + /* Gigabyte Local-Bus-SCSI */ + { "Adaptec BIOS:AVA-282X", 0x000c, 21 }, + /* Adaptec 282x */ + { "Adaptec IBM Dock II SCSI", 0x2edd, 24 }, + /* IBM Thinkpad Dock II */ + { "Adaptec BIOS:AHA-1532P", 0x001c, 22 }, + /* IBM Thinkpad Dock II SCSI */ + { "DTC3520A Host Adapter BIOS", 0x318a, 26 }, + /* DTC 3520A ISA SCSI */ +}; +#endif /* !SKIP_BIOSTEST */ + +/* + * Test, if port_base is valid. + * + */ +static int aha152x_porttest(int io_port) +{ + int i; + + SETPORT(io_port + O_DMACNTRL1, 0); /* reset stack pointer */ + for (i = 0; i < 16; i++) + SETPORT(io_port + O_STACK, i); + + SETPORT(io_port + O_DMACNTRL1, 0); /* reset stack pointer */ + for (i = 0; i < 16 && GETPORT(io_port + O_STACK) == i; i++) + ; + + return (i == 16); +} + +static int tc1550_porttest(int io_port) +{ + int i; + + SETPORT(io_port + O_TC_DMACNTRL1, 0); /* reset stack pointer */ + for (i = 0; i < 16; i++) + SETPORT(io_port + O_STACK, i); + + SETPORT(io_port + O_TC_DMACNTRL1, 0); /* reset stack pointer */ + for (i = 0; i < 16 && GETPORT(io_port + O_TC_STACK) == i; i++) + ; + + return (i == 16); +} + + +static int checksetup(struct aha152x_setup *setup) +{ + int i; + for (i = 0; i < ARRAY_SIZE(ports) && (setup->io_port != ports[i]); i++) + ; + + if (i == ARRAY_SIZE(ports)) + return 0; + + if ( request_region(setup->io_port, IO_RANGE, "aha152x")==0 ) { + printk(KERN_ERR "aha152x: io port 0x%x busy.\n", setup->io_port); + return 0; + } + + if( aha152x_porttest(setup->io_port) ) { + setup->tc1550=0; + } else if( tc1550_porttest(setup->io_port) ) { + setup->tc1550=1; + } else { + release_region(setup->io_port, IO_RANGE); + return 0; + } + + release_region(setup->io_port, IO_RANGE); + + if ((setup->irq < IRQ_MIN) || (setup->irq > IRQ_MAX)) + return 0; + + if ((setup->scsiid < 0) || (setup->scsiid > 7)) + return 0; + + if ((setup->reconnect < 0) || (setup->reconnect > 1)) + return 0; + + if ((setup->parity < 0) || (setup->parity > 1)) + return 0; + + if ((setup->synchronous < 0) || (setup->synchronous > 1)) + return 0; + + if ((setup->ext_trans < 0) || (setup->ext_trans > 1)) + return 0; + + + return 1; +} + + +static int __init aha152x_init(void) +{ + int i, j, ok; +#if defined(AUTOCONF) + aha152x_config conf; +#endif +#ifdef __ISAPNP__ + struct pnp_dev *dev=0, *pnpdev[2] = {0, 0}; +#endif + + if ( setup_count ) { + printk(KERN_INFO "aha152x: processing commandline: "); + + for (i = 0; ipnpdev=pnpdev[i]; + pnpdev[i]=0; +#endif + } + } else { + printk(KERN_ERR "aha152x: io port 0x%x busy.\n", setup[i].io_port); + } + +#if defined(__ISAPNP__) + if( pnpdev[i] ) + pnp_device_detach(pnpdev[i]); +#endif + } + + return registered_count>0; +} + +static void __exit aha152x_exit(void) +{ + int i; + + for(i=0; i=ARRAY_SIZE(setup)) { + printk(KERN_ERR "aha152x: you can only configure up to two controllers\n"); + return 1; + } + + setup[setup_count].conf = str; + setup[setup_count].io_port = ints[0] >= 1 ? ints[1] : 0x340; + setup[setup_count].irq = ints[0] >= 2 ? ints[2] : 11; + setup[setup_count].scsiid = ints[0] >= 3 ? ints[3] : 7; + setup[setup_count].reconnect = ints[0] >= 4 ? ints[4] : 1; + setup[setup_count].parity = ints[0] >= 5 ? ints[5] : 1; + setup[setup_count].synchronous = ints[0] >= 6 ? ints[6] : 1; + setup[setup_count].delay = ints[0] >= 7 ? ints[7] : DELAY_DEFAULT; + setup[setup_count].ext_trans = ints[0] >= 8 ? ints[8] : 0; +#if defined(AHA152X_DEBUG) + setup[setup_count].debug = ints[0] >= 9 ? ints[9] : DEBUG_DEFAULT; + if (ints[0] > 9) { + printk(KERN_NOTICE "aha152x: usage: aha152x=[,[," + "[,[,[,[,[,[,]]]]]]]]\n"); +#else + if (ints[0] > 8) { /*}*/ + printk(KERN_NOTICE "aha152x: usage: aha152x=[,[," + "[,[,[,[,[,]]]]]]]\n"); +#endif + } else { + setup_count++; + return 0; + } + + return 1; +} +__setup("aha152x=", aha152x_setup); #endif + +#endif /* !PCMCIA */ diff -Nru a/drivers/scsi/aha152x.h b/drivers/scsi/aha152x.h --- a/drivers/scsi/aha152x.h Wed Feb 4 16:51:36 2004 +++ b/drivers/scsi/aha152x.h Wed Feb 4 16:51:36 2004 @@ -2,14 +2,14 @@ #define _AHA152X_H /* - * $Id: aha152x.h,v 2.5 2002/04/14 11:24:12 fischer Exp $ + * $Id: aha152x.h,v 2.7 2004/01/24 11:39:03 fischer Exp $ */ /* number of queueable commands (unless we support more than 1 cmd_per_lun this should do) */ #define AHA152X_MAXQUEUE 7 -#define AHA152X_REVID "Adaptec 152x SCSI driver; $Revision: 2.5 $" +#define AHA152X_REVID "Adaptec 152x SCSI driver; $Revision: 2.7 $" /* port addresses */ #define SCSISEQ (HOSTIOPORT0+0x00) /* SCSI sequence control */ @@ -331,6 +331,7 @@ }; struct Scsi_Host *aha152x_probe_one(struct aha152x_setup *); -int aha152x_host_reset(struct scsi_cmnd *); +void aha152x_release(struct Scsi_Host *); +int aha152x_host_reset(Scsi_Cmnd *); #endif /* _AHA152X_H */ diff -Nru a/drivers/scsi/aha1542.c b/drivers/scsi/aha1542.c --- a/drivers/scsi/aha1542.c Wed Feb 4 16:51:35 2004 +++ b/drivers/scsi/aha1542.c Wed Feb 4 16:51:35 2004 @@ -704,11 +704,14 @@ #endif int i; ccb[mbo].op = 2; /* SCSI Initiator Command w/scatter-gather */ - SCpnt->host_scribble = (unsigned char *) kmalloc(512, GFP_DMA); + SCpnt->host_scribble = (unsigned char *) kmalloc(512, GFP_KERNEL | GFP_DMA); sgpnt = (struct scatterlist *) SCpnt->request_buffer; cptr = (struct chain *) SCpnt->host_scribble; - if (cptr == NULL) - panic("aha1542.c: unable to allocate DMA memory\n"); + if (cptr == NULL) { + /* free the claimed mailbox slot */ + HOSTDATA(SCpnt->device->host)->SCint[mbo] = NULL; + return SCSI_MLQUEUE_HOST_BUSY; + } for (i = 0; i < SCpnt->use_sg; i++) { if (sgpnt[i].length == 0 || SCpnt->use_sg > 16 || (((int) sgpnt[i].offset) & 1) || (sgpnt[i].length & 1)) { diff -Nru a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c --- a/drivers/scsi/atp870u.c Wed Feb 4 16:51:35 2004 +++ b/drivers/scsi/atp870u.c Wed Feb 4 16:51:35 2004 @@ -703,19 +703,19 @@ bttl = sg_dma_address(&sgpnt[j]); l = sg_dma_len(&sgpnt[j]); while (l > 0x10000) { - (u16) (((u16 *) (prd))[i + 3]) = 0x0000; - (u16) (((u16 *) (prd))[i + 2]) = 0x0000; - (u32) (((u32 *) (prd))[i >> 1]) = cpu_to_le32(bttl); + (((u16 *) (prd))[i + 3]) = 0x0000; + (((u16 *) (prd))[i + 2]) = 0x0000; + (((u32 *) (prd))[i >> 1]) = cpu_to_le32(bttl); l -= 0x10000; bttl += 0x10000; i += 0x04; } - (u32) (((u32 *) (prd))[i >> 1]) = cpu_to_le32(bttl); - (u16) (((u16 *) (prd))[i + 2]) = cpu_to_le16(l); - (u16) (((u16 *) (prd))[i + 3]) = 0; + (((u32 *) (prd))[i >> 1]) = cpu_to_le32(bttl); + (((u16 *) (prd))[i + 2]) = cpu_to_le16(l); + (((u16 *) (prd))[i + 3]) = 0; i += 0x04; } - (u16) (((u16 *) (prd))[i - 1]) = cpu_to_le16(0x8000); + (((u16 *) (prd))[i - 1]) = cpu_to_le16(0x8000); } else { /* * For a linear request write a chain of blocks @@ -724,16 +724,16 @@ l = workrequ->request_bufflen; i = 0; while (l > 0x10000) { - (u16) (((u16 *) (prd))[i + 3]) = 0x0000; - (u16) (((u16 *) (prd))[i + 2]) = 0x0000; - (u32) (((u32 *) (prd))[i >> 1]) = cpu_to_le32(bttl); + (((u16 *) (prd))[i + 3]) = 0x0000; + (((u16 *) (prd))[i + 2]) = 0x0000; + (((u32 *) (prd))[i >> 1]) = cpu_to_le32(bttl); l -= 0x10000; bttl += 0x10000; i += 0x04; } - (u16) (((u16 *) (prd))[i + 3]) = cpu_to_le16(0x8000); - (u16) (((u16 *) (prd))[i + 2]) = cpu_to_le16(l); - (u32) (((u32 *) (prd))[i >> 1]) = cpu_to_le32(bttl); + (((u16 *) (prd))[i + 3]) = cpu_to_le16(0x8000); + (((u16 *) (prd))[i + 2]) = cpu_to_le16(l); + (((u32 *) (prd))[i >> 1]) = cpu_to_le32(bttl); } tmpcip = tmpcip + 4; dev->id[target_id].prdaddru = dev->id[target_id].prd_phys; diff -Nru a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c --- a/drivers/scsi/gdth.c Wed Feb 4 16:51:36 2004 +++ b/drivers/scsi/gdth.c Wed Feb 4 16:51:36 2004 @@ -264,7 +264,6 @@ * Initial revision * ************************************************************************/ -#ident "$Id: gdth.c,v 1.64 2003/09/17 08:30:26 achim Exp $" /* All GDT Disk Array Controllers are fully supported by this driver. * This includes the PCI/EISA/ISA SCSI Disk Array Controllers and the diff -Nru a/drivers/scsi/mac_NCR5380.c b/drivers/scsi/mac_NCR5380.c --- a/drivers/scsi/mac_NCR5380.c Wed Feb 4 16:51:36 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,3127 +0,0 @@ -/* - * NCR 5380 generic driver routines. These should make it *trivial* - * to implement 5380 SCSI drivers under Linux with a non-trantor - * architecture. - * - * Note that these routines also work with NR53c400 family chips. - * - * Copyright 1993, Drew Eckhardt - * Visionary Computing - * (Unix and Linux consulting and custom programming) - * drew@colorado.edu - * +1 (303) 666-5836 - * - * DISTRIBUTION RELEASE 6. - * - * For more information, please consult - * - * NCR 5380 Family - * SCSI Protocol Controller - * Databook - * - * NCR Microelectronics - * 1635 Aeroplaza Drive - * Colorado Springs, CO 80916 - * 1+ (719) 578-3400 - * 1+ (800) 334-5454 - */ - -/* - * ++roman: To port the 5380 driver to the Atari, I had to do some changes in - * this file, too: - * - * - Some of the debug statements were incorrect (undefined variables and the - * like). I fixed that. - * - * - In information_transfer(), I think a #ifdef was wrong. Looking at the - * possible DMA transfer size should also happen for REAL_DMA. I added this - * in the #if statement. - * - * - When using real DMA, information_transfer() should return in a DATAOUT - * phase after starting the DMA. It has nothing more to do. - * - * - The interrupt service routine should run main after end of DMA, too (not - * only after RESELECTION interrupts). Additionally, it should _not_ test - * for more interrupts after running main, since a DMA process may have - * been started and interrupts are turned on now. The new int could happen - * inside the execution of NCR5380_intr(), leading to recursive - * calls. - * - * - I've added a function merge_contiguous_buffers() that tries to - * merge scatter-gather buffers that are located at contiguous - * physical addresses and can be processed with the same DMA setup. - * Since most scatter-gather operations work on a page (4K) of - * 4 buffers (1K), in more than 90% of all cases three interrupts and - * DMA setup actions are saved. - * - * - I've deleted all the stuff for AUTOPROBE_IRQ, REAL_DMA_POLL, PSEUDO_DMA - * and USLEEP, because these were messing up readability and will never be - * needed for Atari SCSI. - * - * - I've revised the NCR5380_main() calling scheme (relax the 'main_running' - * stuff), and 'main' is executed in a bottom half if awoken by an - * interrupt. - * - * - The code was quite cluttered up by "#if (NDEBUG & NDEBUG_*) printk..." - * constructs. In my eyes, this made the source rather unreadable, so I - * finally replaced that by the *_PRINTK() macros. - * - */ - -/* - * Further development / testing that should be done : - * 1. Test linked command handling code after Eric is ready with - * the high level code. - */ - -/* - * Michael: To port Romans driver to the Macintosh, I've left most of the code - * unchanged, in order to make later implemantation of REAL_DMA easier. - * - * Alan: In order to make it easier to read and as the 5380 based Mac's never - * have DMA I took the real DMA out of mac_scsi.c but not this file. - * - * With luck we can merge this back with the ST folks in time. - * - * Changes: - * - * - all Falcon-specific stuff (ST-DMA locking) was removed - * - * - */ - -#if (NDEBUG & NDEBUG_LISTS) -#define LIST(x,y) \ - { printk("LINE:%d Adding %p to %p\n", __LINE__, (void*)(x), (void*)(y)); \ - if ((x)==(y)) udelay(5); } -#define REMOVE(w,x,y,z) \ - { printk("LINE:%d Removing: %p->%p %p->%p \n", __LINE__, \ - (void*)(w), (void*)(x), (void*)(y), (void*)(z)); \ - if ((x)==(y)) udelay(5); } -#else -#define LIST(x,y) -#define REMOVE(w,x,y,z) -#endif - -#ifndef notyet -#undef LINKED -#endif - -/* - * Design - * Issues : - * - * The other Linux SCSI drivers were written when Linux was Intel PC-only, - * and specifically for each board rather than each chip. This makes their - * adaptation to platforms like the Mac (Some of which use NCR5380's) - * more difficult than it has to be. - * - * Also, many of the SCSI drivers were written before the command queuing - * routines were implemented, meaning their implementations of queued - * commands were hacked on rather than designed in from the start. - * - * When I designed the Linux SCSI drivers I figured that - * while having two different SCSI boards in a system might be useful - * for debugging things, two of the same type wouldn't be used. - * Well, I was wrong and a number of users have mailed me about running - * multiple high-performance SCSI boards in a server. - * - * Finally, when I get questions from users, I have no idea what - * revision of my driver they are running. - * - * This driver attempts to address these problems : - * This is a generic 5380 driver. To use it on a different platform, - * one simply writes appropriate system specific macros (ie, data - * transfer - some PC's will use the I/O bus, 68K's must use - * memory mapped) and drops this file in their 'C' wrapper. - * - * As far as command queueing, two queues are maintained for - * each 5380 in the system - commands that haven't been issued yet, - * and commands that are currently executing. This means that an - * unlimited number of commands may be queued, letting - * more commands propagate from the higher driver levels giving higher - * throughput. Note that both I_T_L and I_T_L_Q nexuses are supported, - * allowing multiple commands to propagate all the way to a SCSI-II device - * while a command is already executing. - * - * To solve the multiple-boards-in-the-same-system problem, - * there is a separate instance structure for each instance - * of a 5380 in the system. So, multiple NCR5380 drivers will - * be able to coexist with appropriate changes to the high level - * SCSI code. - * - * A NCR5380_PUBLIC_REVISION macro is provided, with the release - * number (updated for each public release) printed by the - * NCR5380_print_options command, which should be called from the - * wrapper detect function, so that I know what release of the driver - * users are using. - * - * Issues specific to the NCR5380 : - * - * When used in a PIO or pseudo-dma mode, the NCR5380 is a braindead - * piece of hardware that requires you to sit in a loop polling for - * the REQ signal as long as you are connected. Some devices are - * brain dead (ie, many TEXEL CD ROM drives) and won't disconnect - * while doing long seek operations. - * - * The workaround for this is to keep track of devices that have - * disconnected. If the device hasn't disconnected, for commands that - * should disconnect, we do something like - * - * while (!REQ is asserted) { sleep for N usecs; poll for M usecs } - * - * Some tweaking of N and M needs to be done. An algorithm based - * on "time to data" would give the best results as long as short time - * to datas (ie, on the same track) were considered, however these - * broken devices are the exception rather than the rule and I'd rather - * spend my time optimizing for the normal case. - * - * Architecture : - * - * At the heart of the design is a coroutine, NCR5380_main, - * which is started when not running by the interrupt handler, - * timer, and queue command function. It attempts to establish - * I_T_L or I_T_L_Q nexuses by removing the commands from the - * issue queue and calling NCR5380_select() if a nexus - * is not established. - * - * Once a nexus is established, the NCR5380_information_transfer() - * phase goes through the various phases as instructed by the target. - * if the target goes into MSG IN and sends a DISCONNECT message, - * the command structure is placed into the per instance disconnected - * queue, and NCR5380_main tries to find more work. If USLEEP - * was defined, and the target is idle for too long, the system - * will try to sleep. - * - * If a command has disconnected, eventually an interrupt will trigger, - * calling NCR5380_intr() which will in turn call NCR5380_reselect - * to reestablish a nexus. This will run main if necessary. - * - * On command termination, the done function will be called as - * appropriate. - * - * SCSI pointers are maintained in the SCp field of SCSI command - * structures, being initialized after the command is connected - * in NCR5380_select, and set as appropriate in NCR5380_information_transfer. - * Note that in violation of the standard, an implicit SAVE POINTERS operation - * is done, since some BROKEN disks fail to issue an explicit SAVE POINTERS. - */ - -/* - * Using this file : - * This file a skeleton Linux SCSI driver for the NCR 5380 series - * of chips. To use it, you write a architecture specific functions - * and macros and include this file in your driver. - * - * These macros control options : - * AUTOSENSE - if defined, REQUEST SENSE will be performed automatically - * for commands that return with a CHECK CONDITION status. - * - * LINKED - if defined, linked commands are supported. - * - * PSEUDO_DMA - if defined, PSEUDO DMA is used during the data transfer phases. - * - * REAL_DMA - if defined, REAL DMA is used during the data transfer phases. - * - * SUPPORT_TAGS - if defined, SCSI-2 tagged queuing is used where possible - * - * These macros MUST be defined : - * - * NCR5380_read(register) - read from the specified register - * - * NCR5380_write(register, value) - write to the specific register - * - * Either real DMA *or* pseudo DMA may be implemented - * REAL functions : - * NCR5380_REAL_DMA should be defined if real DMA is to be used. - * Note that the DMA setup functions should return the number of bytes - * that they were able to program the controller for. - * - * Also note that generic i386/PC versions of these macros are - * available as NCR5380_i386_dma_write_setup, - * NCR5380_i386_dma_read_setup, and NCR5380_i386_dma_residual. - * - * NCR5380_dma_write_setup(instance, src, count) - initialize - * NCR5380_dma_read_setup(instance, dst, count) - initialize - * NCR5380_dma_residual(instance); - residual count - * - * PSEUDO functions : - * NCR5380_pwrite(instance, src, count) - * NCR5380_pread(instance, dst, count); - * - * If nothing specific to this implementation needs doing (ie, with external - * hardware), you must also define - * - * NCR5380_queue_command - * NCR5380_reset - * NCR5380_abort - * NCR5380_proc_info - * - * to be the global entry points into the specific driver, ie - * #define NCR5380_queue_command t128_queue_command. - * - * If this is not done, the routines will be defined as static functions - * with the NCR5380* names and the user must provide a globally - * accessible wrapper function. - * - * The generic driver is initialized by calling NCR5380_init(instance), - * after setting the appropriate host specific fields and ID. If the - * driver wishes to autoprobe for an IRQ line, the NCR5380_probe_irq(instance, - * possible) function may be used. Before the specific driver initialization - * code finishes, NCR5380_print_options should be called. - */ - -static struct Scsi_Host *first_instance = NULL; -static Scsi_Host_Template *the_template = NULL; - -/* Macros ease life... :-) */ -#define SETUP_HOSTDATA(in) \ - struct NCR5380_hostdata *hostdata = \ - (struct NCR5380_hostdata *)(in)->hostdata -#define HOSTDATA(in) ((struct NCR5380_hostdata *)(in)->hostdata) - -#define NEXT(cmd) ((Scsi_Cmnd *)((cmd)->host_scribble)) -#define NEXTADDR(cmd) ((Scsi_Cmnd **)&((cmd)->host_scribble)) - -#define HOSTNO instance->host_no -#define H_NO(cmd) (cmd)->host->host_no - -#ifdef SUPPORT_TAGS - -/* - * Functions for handling tagged queuing - * ===================================== - * - * ++roman (01/96): Now I've implemented SCSI-2 tagged queuing. Some notes: - * - * Using consecutive numbers for the tags is no good idea in my eyes. There - * could be wrong re-usings if the counter (8 bit!) wraps and some early - * command has been preempted for a long time. My solution: a bitfield for - * remembering used tags. - * - * There's also the problem that each target has a certain queue size, but we - * cannot know it in advance :-( We just see a QUEUE_FULL status being - * returned. So, in this case, the driver internal queue size assumption is - * reduced to the number of active tags if QUEUE_FULL is returned by the - * target. The command is returned to the mid-level, but with status changed - * to BUSY, since --as I've seen-- the mid-level can't handle QUEUE_FULL - * correctly. - * - * We're also not allowed running tagged commands as long as an untagged - * command is active. And REQUEST SENSE commands after a contingent allegiance - * condition _must_ be untagged. To keep track whether an untagged command has - * been issued, the host->busy array is still employed, as it is without - * support for tagged queuing. - * - * One could suspect that there are possible race conditions between - * is_lun_busy(), cmd_get_tag() and cmd_free_tag(). But I think this isn't the - * case: is_lun_busy() and cmd_get_tag() are both called from NCR5380_main(), - * which already guaranteed to be running at most once. It is also the only - * place where tags/LUNs are allocated. So no other allocation can slip - * between that pair, there could only happen a reselection, which can free a - * tag, but that doesn't hurt. Only the sequence in cmd_free_tag() becomes - * important: the tag bit must be cleared before 'nr_allocated' is decreased. - */ - -/* -1 for TAG_NONE is not possible with unsigned char cmd->tag */ -#undef TAG_NONE -#define TAG_NONE 0xff - -/* For the m68k, the number of bits in 'allocated' must be a multiple of 32! */ -#if (MAX_TAGS % 32) != 0 -#error "MAX_TAGS must be a multiple of 32!" -#endif - -typedef struct { - char allocated[MAX_TAGS/8]; - int nr_allocated; - int queue_size; -} TAG_ALLOC; - -static TAG_ALLOC TagAlloc[8][8]; /* 8 targets and 8 LUNs */ - - -static void init_tags( void ) -{ - int target, lun; - TAG_ALLOC *ta; - - if (!setup_use_tagged_queuing) - return; - - for( target = 0; target < 8; ++target ) { - for( lun = 0; lun < 8; ++lun ) { - ta = &TagAlloc[target][lun]; - memset( &ta->allocated, 0, MAX_TAGS/8 ); - ta->nr_allocated = 0; - /* At the beginning, assume the maximum queue size we could - * support (MAX_TAGS). This value will be decreased if the target - * returns QUEUE_FULL status. - */ - ta->queue_size = MAX_TAGS; - } - } -} - - -/* Check if we can issue a command to this LUN: First see if the LUN is marked - * busy by an untagged command. If the command should use tagged queuing, also - * check that there is a free tag and the target's queue won't overflow. This - * function should be called with interrupts disabled to avoid race - * conditions. - */ - -static int is_lun_busy( Scsi_Cmnd *cmd, int should_be_tagged ) -{ - SETUP_HOSTDATA(cmd->host); - - if (hostdata->busy[cmd->target] & (1 << cmd->lun)) - return( 1 ); - if (!should_be_tagged || - !setup_use_tagged_queuing || !cmd->device->tagged_supported) - return( 0 ); - if (TagAlloc[cmd->target][cmd->lun].nr_allocated >= - TagAlloc[cmd->target][cmd->lun].queue_size ) { - TAG_PRINTK( "scsi%d: target %d lun %d: no free tags\n", - H_NO(cmd), cmd->target, cmd->lun ); - return( 1 ); - } - return( 0 ); -} - - -/* Allocate a tag for a command (there are no checks anymore, check_lun_busy() - * must be called before!), or reserve the LUN in 'busy' if the command is - * untagged. - */ - -static void cmd_get_tag( Scsi_Cmnd *cmd, int should_be_tagged ) -{ - SETUP_HOSTDATA(cmd->host); - - /* If we or the target don't support tagged queuing, allocate the LUN for - * an untagged command. - */ - if (!should_be_tagged || - !setup_use_tagged_queuing || !cmd->device->tagged_supported) { - cmd->tag = TAG_NONE; - hostdata->busy[cmd->target] |= (1 << cmd->lun); - TAG_PRINTK( "scsi%d: target %d lun %d now allocated by untagged " - "command\n", H_NO(cmd), cmd->target, cmd->lun ); - } - else { - TAG_ALLOC *ta = &TagAlloc[cmd->target][cmd->lun]; - - cmd->tag = find_first_zero_bit( &ta->allocated, MAX_TAGS ); - set_bit( cmd->tag, &ta->allocated ); - ta->nr_allocated++; - TAG_PRINTK( "scsi%d: using tag %d for target %d lun %d " - "(now %d tags in use)\n", - H_NO(cmd), cmd->tag, cmd->target, cmd->lun, - ta->nr_allocated ); - } -} - - -/* Mark the tag of command 'cmd' as free, or in case of an untagged command, - * unlock the LUN. - */ - -static void cmd_free_tag( Scsi_Cmnd *cmd ) -{ - SETUP_HOSTDATA(cmd->host); - - if (cmd->tag == TAG_NONE) { - hostdata->busy[cmd->target] &= ~(1 << cmd->lun); - TAG_PRINTK( "scsi%d: target %d lun %d untagged cmd finished\n", - H_NO(cmd), cmd->target, cmd->lun ); - } - else if (cmd->tag >= MAX_TAGS) { - printk(KERN_NOTICE "scsi%d: trying to free bad tag %d!\n", - H_NO(cmd), cmd->tag ); - } - else { - TAG_ALLOC *ta = &TagAlloc[cmd->target][cmd->lun]; - clear_bit( cmd->tag, &ta->allocated ); - ta->nr_allocated--; - TAG_PRINTK( "scsi%d: freed tag %d for target %d lun %d\n", - H_NO(cmd), cmd->tag, cmd->target, cmd->lun ); - } -} - - -static void free_all_tags( void ) -{ - int target, lun; - TAG_ALLOC *ta; - - if (!setup_use_tagged_queuing) - return; - - for( target = 0; target < 8; ++target ) { - for( lun = 0; lun < 8; ++lun ) { - ta = &TagAlloc[target][lun]; - memset( &ta->allocated, 0, MAX_TAGS/8 ); - ta->nr_allocated = 0; - } - } -} - -#endif /* SUPPORT_TAGS */ - - -/* - * Function: void merge_contiguous_buffers( Scsi_Cmnd *cmd ) - * - * Purpose: Try to merge several scatter-gather requests into one DMA - * transfer. This is possible if the scatter buffers lie on - * physical contiguous addresses. - * - * Parameters: Scsi_Cmnd *cmd - * The command to work on. The first scatter buffer's data are - * assumed to be already transfered into ptr/this_residual. - */ - -static void merge_contiguous_buffers( Scsi_Cmnd *cmd ) -{ - unsigned long endaddr; -#if (NDEBUG & NDEBUG_MERGING) - unsigned long oldlen = cmd->SCp.this_residual; - int cnt = 1; -#endif - - for (endaddr = virt_to_phys(cmd->SCp.ptr + cmd->SCp.this_residual - 1) + 1; - cmd->SCp.buffers_residual && - virt_to_phys(cmd->SCp.buffer[1].address) == endaddr; ) { - - MER_PRINTK("VTOP(%p) == %08lx -> merging\n", - cmd->SCp.buffer[1].address, endaddr); -#if (NDEBUG & NDEBUG_MERGING) - ++cnt; -#endif - ++cmd->SCp.buffer; - --cmd->SCp.buffers_residual; - cmd->SCp.this_residual += cmd->SCp.buffer->length; - endaddr += cmd->SCp.buffer->length; - } -#if (NDEBUG & NDEBUG_MERGING) - if (oldlen != cmd->SCp.this_residual) - MER_PRINTK("merged %d buffers from %p, new length %08x\n", - cnt, cmd->SCp.ptr, cmd->SCp.this_residual); -#endif -} - -/* - * Function : void initialize_SCp(Scsi_Cmnd *cmd) - * - * Purpose : initialize the saved data pointers for cmd to point to the - * start of the buffer. - * - * Inputs : cmd - Scsi_Cmnd structure to have pointers reset. - */ - -static __inline__ void initialize_SCp(Scsi_Cmnd *cmd) -{ - /* - * Initialize the Scsi Pointer field so that all of the commands in the - * various queues are valid. - */ - - if (cmd->use_sg) { - cmd->SCp.buffer = (struct scatterlist *) cmd->buffer; - cmd->SCp.buffers_residual = cmd->use_sg - 1; - cmd->SCp.ptr = (char *) cmd->SCp.buffer->address; - cmd->SCp.this_residual = cmd->SCp.buffer->length; - /* ++roman: Try to merge some scatter-buffers if they are at - * contiguous physical addresses. - */ - merge_contiguous_buffers( cmd ); - } else { - cmd->SCp.buffer = NULL; - cmd->SCp.buffers_residual = 0; - cmd->SCp.ptr = (char *) cmd->request_buffer; - cmd->SCp.this_residual = cmd->request_bufflen; - } -} - -#include -#include - -#if 1 -static struct { - unsigned char mask; - const char * name;} -signals[] = {{ SR_DBP, "PARITY"}, { SR_RST, "RST" }, { SR_BSY, "BSY" }, - { SR_REQ, "REQ" }, { SR_MSG, "MSG" }, { SR_CD, "CD" }, { SR_IO, "IO" }, - { SR_SEL, "SEL" }, {0, NULL}}, -basrs[] = {{BASR_ATN, "ATN"}, {BASR_ACK, "ACK"}, {0, NULL}}, -icrs[] = {{ICR_ASSERT_RST, "ASSERT RST"},{ICR_ASSERT_ACK, "ASSERT ACK"}, - {ICR_ASSERT_BSY, "ASSERT BSY"}, {ICR_ASSERT_SEL, "ASSERT SEL"}, - {ICR_ASSERT_ATN, "ASSERT ATN"}, {ICR_ASSERT_DATA, "ASSERT DATA"}, - {0, NULL}}, -mrs[] = {{MR_BLOCK_DMA_MODE, "MODE BLOCK DMA"}, {MR_TARGET, "MODE TARGET"}, - {MR_ENABLE_PAR_CHECK, "MODE PARITY CHECK"}, {MR_ENABLE_PAR_INTR, - "MODE PARITY INTR"}, {MR_ENABLE_EOP_INTR,"MODE EOP INTR"}, - {MR_MONITOR_BSY, "MODE MONITOR BSY"}, - {MR_DMA_MODE, "MODE DMA"}, {MR_ARBITRATE, "MODE ARBITRATION"}, - {0, NULL}}; - -/* - * Function : void NCR5380_print(struct Scsi_Host *instance) - * - * Purpose : print the SCSI bus signals for debugging purposes - * - * Input : instance - which NCR5380 - */ - -static void NCR5380_print(struct Scsi_Host *instance) { - unsigned char status, data, basr, mr, icr, i; - unsigned long flags; - - local_irq_save(flags); - data = NCR5380_read(CURRENT_SCSI_DATA_REG); - status = NCR5380_read(STATUS_REG); - mr = NCR5380_read(MODE_REG); - icr = NCR5380_read(INITIATOR_COMMAND_REG); - basr = NCR5380_read(BUS_AND_STATUS_REG); - local_irq_restore(flags); - printk("STATUS_REG: %02x ", status); - for (i = 0; signals[i].mask ; ++i) - if (status & signals[i].mask) - printk(",%s", signals[i].name); - printk("\nBASR: %02x ", basr); - for (i = 0; basrs[i].mask ; ++i) - if (basr & basrs[i].mask) - printk(",%s", basrs[i].name); - printk("\nICR: %02x ", icr); - for (i = 0; icrs[i].mask; ++i) - if (icr & icrs[i].mask) - printk(",%s", icrs[i].name); - printk("\nMODE: %02x ", mr); - for (i = 0; mrs[i].mask; ++i) - if (mr & mrs[i].mask) - printk(",%s", mrs[i].name); - printk("\n"); -} - -static struct { - unsigned char value; - const char *name; -} phases[] = { - {PHASE_DATAOUT, "DATAOUT"}, {PHASE_DATAIN, "DATAIN"}, {PHASE_CMDOUT, "CMDOUT"}, - {PHASE_STATIN, "STATIN"}, {PHASE_MSGOUT, "MSGOUT"}, {PHASE_MSGIN, "MSGIN"}, - {PHASE_UNKNOWN, "UNKNOWN"}}; - -/* - * Function : void NCR5380_print_phase(struct Scsi_Host *instance) - * - * Purpose : print the current SCSI phase for debugging purposes - * - * Input : instance - which NCR5380 - */ - -static void NCR5380_print_phase(struct Scsi_Host *instance) -{ - unsigned char status; - int i; - - status = NCR5380_read(STATUS_REG); - if (!(status & SR_REQ)) - printk(KERN_DEBUG "scsi%d: REQ not asserted, phase unknown.\n", HOSTNO); - else { - for (i = 0; (phases[i].value != PHASE_UNKNOWN) && - (phases[i].value != (status & PHASE_MASK)); ++i); - printk(KERN_DEBUG "scsi%d: phase %s\n", HOSTNO, phases[i].name); - } -} - -#else /* !NDEBUG */ - -/* dummies... */ -__inline__ void NCR5380_print(struct Scsi_Host *instance) { }; -__inline__ void NCR5380_print_phase(struct Scsi_Host *instance) { }; - -#endif - -/* - * ++roman: New scheme of calling NCR5380_main() - * - * If we're not in an interrupt, we can call our main directly, it cannot be - * already running. Else, we queue it on a task queue, if not 'main_running' - * tells us that a lower level is already executing it. This way, - * 'main_running' needs not be protected in a special way. - * - * queue_main() is a utility function for putting our main onto the task - * queue, if main_running is false. It should be called only from a - * interrupt or bottom half. - */ - -#include -#include - -static volatile int main_running = 0; -static DECLARE_WORK(NCR5380_tqueue, (void (*)(void*))NCR5380_main, NULL); - -static __inline__ void queue_main(void) -{ - if (!main_running) { - /* If in interrupt and NCR5380_main() not already running, - queue it on the 'immediate' task queue, to be processed - immediately after the current interrupt processing has - finished. */ - schedule_work(&NCR5380_tqueue); - } - /* else: nothing to do: the running NCR5380_main() will pick up - any newly queued command. */ -} - - -static void NCR5380_all_init (void) -{ - static int done = 0; - if (!done) { - INI_PRINTK("scsi : NCR5380_all_init()\n"); - done = 1; - } -} - - -/* - * Function : void NCR58380_print_options (struct Scsi_Host *instance) - * - * Purpose : called by probe code indicating the NCR5380 driver - * options that were selected. - * - * Inputs : instance, pointer to this instance. Unused. - */ - -static void NCR5380_print_options (struct Scsi_Host *instance) -{ - printk(" generic options" -#ifdef AUTOSENSE - " AUTOSENSE" -#endif -#ifdef REAL_DMA - " REAL DMA" -#endif -#ifdef PSEUDO_DMA - " PSEUDO DMA" -#endif -#ifdef PARITY - " PARITY" -#endif -#ifdef SUPPORT_TAGS - " SCSI-2 TAGGED QUEUING" -#endif - ); - printk(" generic release=%d", NCR5380_PUBLIC_RELEASE); -} - -/* - * Function : void NCR5380_print_status (struct Scsi_Host *instance) - * - * Purpose : print commands in the various queues, called from - * NCR5380_abort and NCR5380_debug to aid debugging. - * - * Inputs : instance, pointer to this instance. - */ - -static void NCR5380_print_status (struct Scsi_Host *instance) -{ - char *pr_bfr; - char *start; - int len; - - NCR_PRINT(NDEBUG_ANY); - NCR_PRINT_PHASE(NDEBUG_ANY); - - pr_bfr = (char *) __get_free_page(GFP_ATOMIC); - if (!pr_bfr) { - printk("NCR5380_print_status: no memory for print buffer\n"); - return; - } - len = NCR5380_proc_info(instance, pr_bfr, &start, 0, PAGE_SIZE, 0); - pr_bfr[len] = 0; - printk("\n%s\n", pr_bfr); - free_page((unsigned long) pr_bfr); -} - - -/******************************************/ -/* - * /proc/scsi/[dtc pas16 t128 generic]/[0-ASC_NUM_BOARD_SUPPORTED] - * - * *buffer: I/O buffer - * **start: if inout == FALSE pointer into buffer where user read should start - * offset: current offset - * length: length of buffer - * hostno: Scsi_Host host_no - * inout: TRUE - user is writing; FALSE - user is reading - * - * Return the number of bytes read from or written -*/ - -#undef SPRINTF -#define SPRINTF(fmt,args...) \ - do { if (pos + strlen(fmt) + 20 /* slop */ < buffer + length) \ - pos += sprintf(pos, fmt , ## args); } while(0) -static -char *lprint_Scsi_Cmnd (Scsi_Cmnd *cmd, char *pos, char *buffer, int length); - -static -int NCR5380_proc_info (struct Scsi_Host *instance, char *buffer, char **start, off_t offset, - int length, int inout) -{ - char *pos = buffer; - struct NCR5380_hostdata *hostdata; - Scsi_Cmnd *ptr; - unsigned long flags; - off_t begin = 0; -#define check_offset() \ - do { \ - if (pos - buffer < offset - begin) { \ - begin += pos - buffer; \ - pos = buffer; \ - } \ - } while (0) - - if (inout) { /* Has data been written to the file ? */ - return(-ENOSYS); /* Currently this is a no-op */ - } - SPRINTF("NCR5380 core release=%d.\n", NCR5380_PUBLIC_RELEASE); - check_offset(); - local_irq_save(flags); - SPRINTF("NCR5380: coroutine is%s running.\n", main_running ? "" : "n't"); - check_offset(); - if (!hostdata->connected) - SPRINTF("scsi%d: no currently connected command\n", HOSTNO); - else - pos = lprint_Scsi_Cmnd ((Scsi_Cmnd *) hostdata->connected, - pos, buffer, length); - SPRINTF("scsi%d: issue_queue\n", HOSTNO); - check_offset(); - for (ptr = (Scsi_Cmnd *) hostdata->issue_queue; ptr; ptr = NEXT(ptr)) { - pos = lprint_Scsi_Cmnd (ptr, pos, buffer, length); - check_offset(); - } - - SPRINTF("scsi%d: disconnected_queue\n", HOSTNO); - check_offset(); - for (ptr = (Scsi_Cmnd *) hostdata->disconnected_queue; ptr; - ptr = NEXT(ptr)) { - pos = lprint_Scsi_Cmnd (ptr, pos, buffer, length); - check_offset(); - } - - local_irq_restore(flags); - *start = buffer + (offset - begin); - if (pos - buffer < offset - begin) - return 0; - else if (pos - buffer - (offset - begin) < length) - return pos - buffer - (offset - begin); - return length; -} - -static char * -lprint_Scsi_Cmnd (Scsi_Cmnd *cmd, char *pos, char *buffer, int length) -{ - int i, s; - unsigned char *command; - SPRINTF("scsi%d: destination target %d, lun %d\n", - H_NO(cmd), cmd->target, cmd->lun); - SPRINTF(" command = "); - command = cmd->cmnd; - SPRINTF("%2d (0x%02x)", command[0], command[0]); - for (i = 1, s = COMMAND_SIZE(command[0]); i < s; ++i) - SPRINTF(" %02x", command[i]); - SPRINTF("\n"); - return pos; -} - - -/* - * Function : void NCR5380_init (struct Scsi_Host *instance, int flags) - * - * Purpose : initializes *instance and corresponding 5380 chip. - * - * Inputs : instance - instantiation of the 5380 driver. - * - * Notes : I assume that the host, hostno, and id bits have been - * set correctly. I don't care about the irq and other fields. - * - */ - -static int NCR5380_init (struct Scsi_Host *instance, int flags) -{ - int i; - SETUP_HOSTDATA(instance); - - NCR5380_all_init(); - - hostdata->aborted = 0; - hostdata->id_mask = 1 << instance->this_id; - hostdata->id_higher_mask = 0; - for (i = hostdata->id_mask; i <= 0x80; i <<= 1) - if (i > hostdata->id_mask) - hostdata->id_higher_mask |= i; - for (i = 0; i < 8; ++i) - hostdata->busy[i] = 0; -#ifdef SUPPORT_TAGS - init_tags(); -#endif -#if defined (REAL_DMA) - hostdata->dma_len = 0; -#endif - hostdata->targets_present = 0; - hostdata->connected = NULL; - hostdata->issue_queue = NULL; - hostdata->disconnected_queue = NULL; - hostdata->flags = FLAG_CHECK_LAST_BYTE_SENT; - - if (!the_template) { - the_template = instance->hostt; - first_instance = instance; - } - - -#ifndef AUTOSENSE - if ((instance->cmd_per_lun > 1) || (instance->can_queue > 1)) - printk("scsi%d: WARNING : support for multiple outstanding commands enabled\n" - " without AUTOSENSE option, contingent allegiance conditions may\n" - " be incorrectly cleared.\n", HOSTNO); -#endif /* def AUTOSENSE */ - - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - NCR5380_write(MODE_REG, MR_BASE); - NCR5380_write(TARGET_COMMAND_REG, 0); - NCR5380_write(SELECT_ENABLE_REG, 0); - - return 0; -} - -/* - * Function : int NCR5380_queue_command (Scsi_Cmnd *cmd, - * void (*done)(Scsi_Cmnd *)) - * - * Purpose : enqueues a SCSI command - * - * Inputs : cmd - SCSI command, done - function called on completion, with - * a pointer to the command descriptor. - * - * Returns : 0 - * - * Side effects : - * cmd is added to the per instance issue_queue, with minor - * twiddling done to the host specific fields of cmd. If the - * main coroutine is not running, it is restarted. - * - */ - -static -int NCR5380_queue_command (Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *)) -{ - SETUP_HOSTDATA(cmd->host); - Scsi_Cmnd *tmp; - int oldto; - unsigned long flags; - -#if (NDEBUG & NDEBUG_NO_WRITE) - switch (cmd->cmnd[0]) { - case WRITE_6: - case WRITE_10: - printk(KERN_NOTICE "scsi%d: WRITE attempted with NO_WRITE debugging flag set\n", - H_NO(cmd)); - cmd->result = (DID_ERROR << 16); - done(cmd); - return 0; - } -#endif /* (NDEBUG & NDEBUG_NO_WRITE) */ - - -#ifdef NCR5380_STATS -# if 0 - if (!hostdata->connected && !hostdata->issue_queue && - !hostdata->disconnected_queue) { - hostdata->timebase = jiffies; - } -# endif -# ifdef NCR5380_STAT_LIMIT - if (cmd->request_bufflen > NCR5380_STAT_LIMIT) -# endif - switch (cmd->cmnd[0]) - { - case WRITE: - case WRITE_6: - case WRITE_10: - hostdata->time_write[cmd->target] -= (jiffies - hostdata->timebase); - hostdata->bytes_write[cmd->target] += cmd->request_bufflen; - hostdata->pendingw++; - break; - case READ: - case READ_6: - case READ_10: - hostdata->time_read[cmd->target] -= (jiffies - hostdata->timebase); - hostdata->bytes_read[cmd->target] += cmd->request_bufflen; - hostdata->pendingr++; - break; - } -#endif - - /* - * We use the host_scribble field as a pointer to the next command - * in a queue - */ - - NEXT(cmd) = NULL; - cmd->scsi_done = done; - - cmd->result = 0; - - - /* - * Insert the cmd into the issue queue. Note that REQUEST SENSE - * commands are added to the head of the queue since any command will - * clear the contingent allegiance condition that exists and the - * sense data is only guaranteed to be valid while the condition exists. - */ - - local_irq_save(flags); - - if (!(hostdata->issue_queue) || (cmd->cmnd[0] == REQUEST_SENSE)) { - LIST(cmd, hostdata->issue_queue); - NEXT(cmd) = hostdata->issue_queue; - hostdata->issue_queue = cmd; - } else { - for (tmp = (Scsi_Cmnd *)hostdata->issue_queue; - NEXT(tmp); tmp = NEXT(tmp)) - ; - LIST(cmd, tmp); - NEXT(tmp) = cmd; - } - local_irq_restore(flags); - - QU_PRINTK("scsi%d: command added to %s of queue\n", H_NO(cmd), - (cmd->cmnd[0] == REQUEST_SENSE) ? "head" : "tail"); - - /* If queue_command() is called from an interrupt (real one or bottom - * half), we let queue_main() do the job of taking care about main. If it - * is already running, this is a no-op, else main will be queued. - * - * If we're not in an interrupt, we can call NCR5380_main() - * unconditionally, because it cannot be already running. - */ - if (in_interrupt() > 0 || ((flags >> 8) & 7) >= 6) - queue_main(); - else - NCR5380_main(NULL); - return 0; -} - -/* - * Function : NCR5380_main (void *bl) - * - * Purpose : NCR5380_main is a coroutine that runs as long as more work can - * be done on the NCR5380 host adapters in a system. Both - * NCR5380_queue_command() and NCR5380_intr() will try to start it - * in case it is not running. - * - * NOTE : NCR5380_main exits with interrupts *disabled*, the caller should - * reenable them. This prevents reentrancy and kernel stack overflow. - */ - -static void NCR5380_main (void *bl) -{ - Scsi_Cmnd *tmp, *prev; - struct Scsi_Host *instance = first_instance; - struct NCR5380_hostdata *hostdata = HOSTDATA(instance); - int done; - unsigned long flags; - - /* - * We run (with interrupts disabled) until we're sure that none of - * the host adapters have anything that can be done, at which point - * we set main_running to 0 and exit. - * - * Interrupts are enabled before doing various other internal - * instructions, after we've decided that we need to run through - * the loop again. - * - * this should prevent any race conditions. - * - * ++roman: Just disabling the NCR interrupt isn't sufficient here, - * because also a timer int can trigger an abort or reset, which can - * alter queues and touch the Falcon lock. - */ - - /* Tell int handlers main() is now already executing. Note that - no races are possible here. If an int comes in before - 'main_running' is set here, and queues/executes main via the - task queue, it doesn't do any harm, just this instance of main - won't find any work left to do. */ - if (main_running) - return; - main_running = 1; - - local_save_flags(flags); - do { - local_irq_disable(); /* Freeze request queues */ - done = 1; - - if (!hostdata->connected) { - MAIN_PRINTK( "scsi%d: not connected\n", HOSTNO ); - /* - * Search through the issue_queue for a command destined - * for a target that's not busy. - */ -#if (NDEBUG & NDEBUG_LISTS) - for (tmp = (Scsi_Cmnd *) hostdata->issue_queue, prev = NULL; - tmp && (tmp != prev); prev = tmp, tmp = NEXT(tmp)) - ; - /*printk("%p ", tmp);*/ - if ((tmp == prev) && tmp) printk(" LOOP\n");/* else printk("\n");*/ -#endif - for (tmp = (Scsi_Cmnd *) hostdata->issue_queue, - prev = NULL; tmp; prev = tmp, tmp = NEXT(tmp) ) { - -#if (NDEBUG & NDEBUG_LISTS) - if (prev != tmp) - printk("MAIN tmp=%p target=%d busy=%d lun=%d\n", - tmp, tmp->target, hostdata->busy[tmp->target], - tmp->lun); -#endif - /* When we find one, remove it from the issue queue. */ - if ( -#ifdef SUPPORT_TAGS - !is_lun_busy( tmp, tmp->cmnd[0] != REQUEST_SENSE) -#else - !(hostdata->busy[tmp->target] & (1 << tmp->lun)) -#endif - ) { - /* ++guenther: just to be sure, this must be atomic */ - local_irq_disable(); - if (prev) { - REMOVE(prev, NEXT(prev), tmp, NEXT(tmp)); - NEXT(prev) = NEXT(tmp); - } else { - REMOVE(-1, hostdata->issue_queue, tmp, NEXT(tmp)); - hostdata->issue_queue = NEXT(tmp); - } - NEXT(tmp) = NULL; - - /* reenable interrupts after finding one */ - local_irq_restore(flags); - - /* - * Attempt to establish an I_T_L nexus here. - * On success, instance->hostdata->connected is set. - * On failure, we must add the command back to the - * issue queue so we can keep trying. - */ - MAIN_PRINTK("scsi%d: main(): command for target %d " - "lun %d removed from issue_queue\n", - HOSTNO, tmp->target, tmp->lun); - /* - * REQUEST SENSE commands are issued without tagged - * queueing, even on SCSI-II devices because the - * contingent allegiance condition exists for the - * entire unit. - */ - /* ++roman: ...and the standard also requires that - * REQUEST SENSE command are untagged. - */ - -#ifdef SUPPORT_TAGS - cmd_get_tag( tmp, tmp->cmnd[0] != REQUEST_SENSE ); -#endif - if (!NCR5380_select(instance, tmp, - (tmp->cmnd[0] == REQUEST_SENSE) ? TAG_NONE : - TAG_NEXT)) { - break; - } else { - local_irq_disable(); - LIST(tmp, hostdata->issue_queue); - NEXT(tmp) = hostdata->issue_queue; - hostdata->issue_queue = tmp; -#ifdef SUPPORT_TAGS - cmd_free_tag( tmp ); -#endif - local_irq_restore(flags); - MAIN_PRINTK("scsi%d: main(): select() failed, " - "returned to issue_queue\n", HOSTNO); - if (hostdata->connected) - break; - } - } /* if target/lun/target queue is not busy */ - } /* for issue_queue */ - } /* if (!hostdata->connected) */ - - if (hostdata->connected -#ifdef REAL_DMA - && !hostdata->dma_len -#endif - ) { - local_irq_restore(flags); - MAIN_PRINTK("scsi%d: main: performing information transfer\n", - HOSTNO); - NCR5380_information_transfer(instance); - MAIN_PRINTK("scsi%d: main: done set false\n", HOSTNO); - done = 0; - } - } while (!done); - - /* Better allow ints _after_ 'main_running' has been cleared, else - an interrupt could believe we'll pick up the work it left for - us, but we won't see it anymore here... */ - main_running = 0; - local_irq_restore(flags); -} - - -#ifdef REAL_DMA -/* - * Function : void NCR5380_dma_complete (struct Scsi_Host *instance) - * - * Purpose : Called by interrupt handler when DMA finishes or a phase - * mismatch occurs (which would finish the DMA transfer). - * - * Inputs : instance - this instance of the NCR5380. - * - */ - -static void NCR5380_dma_complete( struct Scsi_Host *instance ) -{ - SETUP_HOSTDATA(instance); - int transfered, saved_data = 0, overrun = 0, cnt, toPIO; - unsigned char **data, p; - volatile int *count; - - if (!hostdata->connected) { - printk(KERN_WARNING "scsi%d: received end of DMA interrupt with " - "no connected cmd\n", HOSTNO); - return; - } - - if (mac_read_overruns) { - p = hostdata->connected->SCp.phase; - if (p & SR_IO) { - udelay(10); - if ((((NCR5380_read(BUS_AND_STATUS_REG)) & - (BASR_PHASE_MATCH|BASR_ACK)) == - (BASR_PHASE_MATCH|BASR_ACK))) { - saved_data = NCR5380_read(INPUT_DATA_REG); - overrun = 1; - DMA_PRINTK("scsi%d: read overrun handled\n", HOSTNO); - } - } - } - - DMA_PRINTK("scsi%d: real DMA transfer complete, basr 0x%X, sr 0x%X\n", - HOSTNO, NCR5380_read(BUS_AND_STATUS_REG), - NCR5380_read(STATUS_REG)); - - (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG); - NCR5380_write(MODE_REG, MR_BASE); - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - - transfered = hostdata->dma_len - NCR5380_dma_residual(instance); - hostdata->dma_len = 0; - - data = (unsigned char **) &(hostdata->connected->SCp.ptr); - count = &(hostdata->connected->SCp.this_residual); - *data += transfered; - *count -= transfered; - - if (mac_read_overruns) { - if ((NCR5380_read(STATUS_REG) & PHASE_MASK) == p && (p & SR_IO)) { - cnt = toPIO = mac_read_overruns; - if (overrun) { - DMA_PRINTK("Got an input overrun, using saved byte\n"); - *(*data)++ = saved_data; - (*count)--; - cnt--; - toPIO--; - } - DMA_PRINTK("Doing %d-byte PIO to 0x%08lx\n", cnt, (long)*data); - NCR5380_transfer_pio(instance, &p, &cnt, data); - *count -= toPIO - cnt; - } - } -} -#endif /* REAL_DMA */ - - -/* - * Function : void NCR5380_intr (int irq) - * - * Purpose : handle interrupts, reestablishing I_T_L or I_T_L_Q nexuses - * from the disconnected queue, and restarting NCR5380_main() - * as required. - * - * Inputs : int irq, irq that caused this interrupt. - * - */ - -static void NCR5380_intr (int irq, void *dev_id, struct pt_regs *regs) -{ - struct Scsi_Host *instance = first_instance; - int done = 1, handled = 0; - unsigned char basr; - - INT_PRINTK("scsi%d: NCR5380 irq triggered\n", HOSTNO); - - /* Look for pending interrupts */ - basr = NCR5380_read(BUS_AND_STATUS_REG); - INT_PRINTK("scsi%d: BASR=%02x\n", HOSTNO, basr); - /* dispatch to appropriate routine if found and done=0 */ - if (basr & BASR_IRQ) { - NCR_PRINT(NDEBUG_INTR); - if ((NCR5380_read(STATUS_REG) & (SR_SEL|SR_IO)) == (SR_SEL|SR_IO)) { - done = 0; - ENABLE_IRQ(); - INT_PRINTK("scsi%d: SEL interrupt\n", HOSTNO); - NCR5380_reselect(instance); - (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG); - } - else if (basr & BASR_PARITY_ERROR) { - INT_PRINTK("scsi%d: PARITY interrupt\n", HOSTNO); - (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG); - } - else if ((NCR5380_read(STATUS_REG) & SR_RST) == SR_RST) { - INT_PRINTK("scsi%d: RESET interrupt\n", HOSTNO); - (void)NCR5380_read(RESET_PARITY_INTERRUPT_REG); - } - else { - /* - * The rest of the interrupt conditions can occur only during a - * DMA transfer - */ - -#if defined(REAL_DMA) - /* - * We should only get PHASE MISMATCH and EOP interrupts if we have - * DMA enabled, so do a sanity check based on the current setting - * of the MODE register. - */ - - if ((NCR5380_read(MODE_REG) & MR_DMA_MODE) && - ((basr & BASR_END_DMA_TRANSFER) || - !(basr & BASR_PHASE_MATCH))) { - - INT_PRINTK("scsi%d: PHASE MISM or EOP interrupt\n", HOSTNO); - NCR5380_dma_complete( instance ); - done = 0; - ENABLE_IRQ(); - } else -#endif /* REAL_DMA */ - { -/* MS: Ignore unknown phase mismatch interrupts (caused by EOP interrupt) */ - if (basr & BASR_PHASE_MATCH) - printk(KERN_NOTICE "scsi%d: unknown interrupt, " - "BASR 0x%x, MR 0x%x, SR 0x%x\n", - HOSTNO, basr, NCR5380_read(MODE_REG), - NCR5380_read(STATUS_REG)); - (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG); - } - } /* if !(SELECTION || PARITY) */ - handled = 1; - } /* BASR & IRQ */ - else { - printk(KERN_NOTICE "scsi%d: interrupt without IRQ bit set in BASR, " - "BASR 0x%X, MR 0x%X, SR 0x%x\n", HOSTNO, basr, - NCR5380_read(MODE_REG), NCR5380_read(STATUS_REG)); - (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG); - } - - if (!done) { - INT_PRINTK("scsi%d: in int routine, calling main\n", HOSTNO); - /* Put a call to NCR5380_main() on the queue... */ - queue_main(); - } - return IRQ_RETVAL(handled); -} - -#ifdef NCR5380_STATS -static void collect_stats(struct NCR5380_hostdata* hostdata, Scsi_Cmnd* cmd) -{ -# ifdef NCR5380_STAT_LIMIT - if (cmd->request_bufflen > NCR5380_STAT_LIMIT) -# endif - switch (cmd->cmnd[0]) - { - case WRITE: - case WRITE_6: - case WRITE_10: - hostdata->time_write[cmd->target] += (jiffies - hostdata->timebase); - /*hostdata->bytes_write[cmd->target] += cmd->request_bufflen;*/ - hostdata->pendingw--; - break; - case READ: - case READ_6: - case READ_10: - hostdata->time_read[cmd->target] += (jiffies - hostdata->timebase); - /*hostdata->bytes_read[cmd->target] += cmd->request_bufflen;*/ - hostdata->pendingr--; - break; - } -} -#endif - -/* - * Function : int NCR5380_select (struct Scsi_Host *instance, Scsi_Cmnd *cmd, - * int tag); - * - * Purpose : establishes I_T_L or I_T_L_Q nexus for new or existing command, - * including ARBITRATION, SELECTION, and initial message out for - * IDENTIFY and queue messages. - * - * Inputs : instance - instantiation of the 5380 driver on which this - * target lives, cmd - SCSI command to execute, tag - set to TAG_NEXT for - * new tag, TAG_NONE for untagged queueing, otherwise set to the tag for - * the command that is presently connected. - * - * Returns : -1 if selection could not execute for some reason, - * 0 if selection succeeded or failed because the target - * did not respond. - * - * Side effects : - * If bus busy, arbitration failed, etc, NCR5380_select() will exit - * with registers as they should have been on entry - ie - * SELECT_ENABLE will be set appropriately, the NCR5380 - * will cease to drive any SCSI bus signals. - * - * If successful : I_T_L or I_T_L_Q nexus will be established, - * instance->connected will be set to cmd. - * SELECT interrupt will be disabled. - * - * If failed (no target) : cmd->scsi_done() will be called, and the - * cmd->result host byte set to DID_BAD_TARGET. - */ - -static int NCR5380_select (struct Scsi_Host *instance, Scsi_Cmnd *cmd, int tag) -{ - SETUP_HOSTDATA(instance); - unsigned char tmp[3], phase; - unsigned char *data; - int len; - unsigned long timeout; - unsigned long flags; - - hostdata->restart_select = 0; - NCR_PRINT(NDEBUG_ARBITRATION); - ARB_PRINTK("scsi%d: starting arbitration, id = %d\n", HOSTNO, - instance->this_id); - - /* - * Set the phase bits to 0, otherwise the NCR5380 won't drive the - * data bus during SELECTION. - */ - - local_irq_save(flags); - if (hostdata->connected) { - local_irq_restore(flags); - return -1; - } - NCR5380_write(TARGET_COMMAND_REG, 0); - - - /* - * Start arbitration. - */ - - NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask); - NCR5380_write(MODE_REG, MR_ARBITRATE); - - local_irq_restore(flags); - - /* Wait for arbitration logic to complete */ -#if NCR_TIMEOUT - { - unsigned long timeout = jiffies + 2*NCR_TIMEOUT; - - while (!(NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_PROGRESS) - && time_before(jiffies, timeout) && !hostdata->connected) - ; - if (time_after_eq(jiffies, timeout)) - { - printk("scsi : arbitration timeout at %d\n", __LINE__); - NCR5380_write(MODE_REG, MR_BASE); - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - return -1; - } - } -#else /* NCR_TIMEOUT */ - while (!(NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_PROGRESS) - && !hostdata->connected); -#endif - - ARB_PRINTK("scsi%d: arbitration complete\n", HOSTNO); - - if (hostdata->connected) { - NCR5380_write(MODE_REG, MR_BASE); - return -1; - } - /* - * The arbitration delay is 2.2us, but this is a minimum and there is - * no maximum so we can safely sleep for ceil(2.2) usecs to accommodate - * the integral nature of udelay(). - * - */ - - udelay(3); - - /* Check for lost arbitration */ - if ((NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST) || - (NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_higher_mask) || - (NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST) || - hostdata->connected) { - NCR5380_write(MODE_REG, MR_BASE); - ARB_PRINTK("scsi%d: lost arbitration, deasserting MR_ARBITRATE\n", - HOSTNO); - return -1; - } - - /* after/during arbitration, BSY should be asserted. - IBM DPES-31080 Version S31Q works now */ - /* Tnx to Thomas_Roesch@m2.maus.de for finding this! (Roman) */ - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_SEL | - ICR_ASSERT_BSY ) ; - - if ((NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST) || - hostdata->connected) { - NCR5380_write(MODE_REG, MR_BASE); - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - ARB_PRINTK("scsi%d: lost arbitration, deasserting ICR_ASSERT_SEL\n", - HOSTNO); - return -1; - } - - /* - * Again, bus clear + bus settle time is 1.2us, however, this is - * a minimum so we'll udelay ceil(1.2) - */ - -#ifdef CONFIG_ATARI_SCSI_TOSHIBA_DELAY - /* ++roman: But some targets (see above :-) seem to need a bit more... */ - udelay(15); -#else - udelay(2); -#endif - - if (hostdata->connected) { - NCR5380_write(MODE_REG, MR_BASE); - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - return -1; - } - - ARB_PRINTK("scsi%d: won arbitration\n", HOSTNO); - - /* - * Now that we have won arbitration, start Selection process, asserting - * the host and target ID's on the SCSI bus. - */ - - NCR5380_write(OUTPUT_DATA_REG, (hostdata->id_mask | (1 << cmd->target))); - - /* - * Raise ATN while SEL is true before BSY goes false from arbitration, - * since this is the only way to guarantee that we'll get a MESSAGE OUT - * phase immediately after selection. - */ - - NCR5380_write(INITIATOR_COMMAND_REG, (ICR_BASE | ICR_ASSERT_BSY | - ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_SEL )); - NCR5380_write(MODE_REG, MR_BASE); - - /* - * Reselect interrupts must be turned off prior to the dropping of BSY, - * otherwise we will trigger an interrupt. - */ - - if (hostdata->connected) { - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - return -1; - } - - NCR5380_write(SELECT_ENABLE_REG, 0); - - /* - * The initiator shall then wait at least two deskew delays and release - * the BSY signal. - */ - udelay(1); /* wingel -- wait two bus deskew delay >2*45ns */ - - /* Reset BSY */ - NCR5380_write(INITIATOR_COMMAND_REG, (ICR_BASE | ICR_ASSERT_DATA | - ICR_ASSERT_ATN | ICR_ASSERT_SEL)); - - /* - * Something weird happens when we cease to drive BSY - looks - * like the board/chip is letting us do another read before the - * appropriate propagation delay has expired, and we're confusing - * a BSY signal from ourselves as the target's response to SELECTION. - * - * A small delay (the 'C++' frontend breaks the pipeline with an - * unnecessary jump, making it work on my 386-33/Trantor T128, the - * tighter 'C' code breaks and requires this) solves the problem - - * the 1 us delay is arbitrary, and only used because this delay will - * be the same on other platforms and since it works here, it should - * work there. - * - * wingel suggests that this could be due to failing to wait - * one deskew delay. - */ - - udelay(1); - - SEL_PRINTK("scsi%d: selecting target %d\n", HOSTNO, cmd->target); - - /* - * The SCSI specification calls for a 250 ms timeout for the actual - * selection. - */ - - timeout = jiffies + 25; - - /* - * XXX very interesting - we're seeing a bounce where the BSY we - * asserted is being reflected / still asserted (propagation delay?) - * and it's detecting as true. Sigh. - */ - -#if 0 - /* ++roman: If a target conformed to the SCSI standard, it wouldn't assert - * IO while SEL is true. But again, there are some disks out the in the - * world that do that nevertheless. (Somebody claimed that this announces - * reselection capability of the target.) So we better skip that test and - * only wait for BSY... (Famous german words: Der Klügere gibt nach :-) - */ - - while (time_before(jiffies, timeout) && !(NCR5380_read(STATUS_REG) & - (SR_BSY | SR_IO))); - - if ((NCR5380_read(STATUS_REG) & (SR_SEL | SR_IO)) == - (SR_SEL | SR_IO)) { - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - NCR5380_reselect(instance); - printk (KERN_ERR "scsi%d: reselection after won arbitration?\n", - HOSTNO); - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - return -1; - } -#else - while (time_before(jiffies, timeout) && !(NCR5380_read(STATUS_REG) & SR_BSY)); -#endif - - /* - * No less than two deskew delays after the initiator detects the - * BSY signal is true, it shall release the SEL signal and may - * change the DATA BUS. -wingel - */ - - udelay(1); - - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN); - - if (!(NCR5380_read(STATUS_REG) & SR_BSY)) { - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - if (hostdata->targets_present & (1 << cmd->target)) { - printk(KERN_ERR "scsi%d: weirdness\n", HOSTNO); - if (hostdata->restart_select) - printk(KERN_NOTICE "\trestart select\n"); - NCR_PRINT(NDEBUG_ANY); - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - return -1; - } - cmd->result = DID_BAD_TARGET << 16; -#ifdef NCR5380_STATS - collect_stats(hostdata, cmd); -#endif -#ifdef SUPPORT_TAGS - cmd_free_tag( cmd ); -#endif - cmd->scsi_done(cmd); - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - SEL_PRINTK("scsi%d: target did not respond within 250ms\n", HOSTNO); - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - return 0; - } - - hostdata->targets_present |= (1 << cmd->target); - - /* - * Since we followed the SCSI spec, and raised ATN while SEL - * was true but before BSY was false during selection, the information - * transfer phase should be a MESSAGE OUT phase so that we can send the - * IDENTIFY message. - * - * If SCSI-II tagged queuing is enabled, we also send a SIMPLE_QUEUE_TAG - * message (2 bytes) with a tag ID that we increment with every command - * until it wraps back to 0. - * - * XXX - it turns out that there are some broken SCSI-II devices, - * which claim to support tagged queuing but fail when more than - * some number of commands are issued at once. - */ - - /* Wait for start of REQ/ACK handshake */ - while (!(NCR5380_read(STATUS_REG) & SR_REQ)); - - SEL_PRINTK("scsi%d: target %d selected, going into MESSAGE OUT phase.\n", - HOSTNO, cmd->target); - tmp[0] = IDENTIFY(1, cmd->lun); - -#ifdef SUPPORT_TAGS - if (cmd->tag != TAG_NONE) { - tmp[1] = hostdata->last_message = SIMPLE_QUEUE_TAG; - tmp[2] = cmd->tag; - len = 3; - } else - len = 1; -#else - len = 1; - cmd->tag=0; -#endif /* SUPPORT_TAGS */ - - /* Send message(s) */ - data = tmp; - phase = PHASE_MSGOUT; - NCR5380_transfer_pio(instance, &phase, &len, &data); - SEL_PRINTK("scsi%d: nexus established.\n", HOSTNO); - /* XXX need to handle errors here */ - hostdata->connected = cmd; -#ifndef SUPPORT_TAGS - hostdata->busy[cmd->target] |= (1 << cmd->lun); -#endif - - initialize_SCp(cmd); - - - return 0; -} - -/* - * Function : int NCR5380_transfer_pio (struct Scsi_Host *instance, - * unsigned char *phase, int *count, unsigned char **data) - * - * Purpose : transfers data in given phase using polled I/O - * - * Inputs : instance - instance of driver, *phase - pointer to - * what phase is expected, *count - pointer to number of - * bytes to transfer, **data - pointer to data pointer. - * - * Returns : -1 when different phase is entered without transferring - * maximum number of bytes, 0 if all bytes are transfered or exit - * is in same phase. - * - * Also, *phase, *count, *data are modified in place. - * - * XXX Note : handling for bus free may be useful. - */ - -/* - * Note : this code is not as quick as it could be, however it - * IS 100% reliable, and for the actual data transfer where speed - * counts, we will always do a pseudo DMA or DMA transfer. - */ - -static int NCR5380_transfer_pio( struct Scsi_Host *instance, - unsigned char *phase, int *count, - unsigned char **data) -{ - register unsigned char p = *phase, tmp; - register int c = *count; - register unsigned char *d = *data; - - /* - * The NCR5380 chip will only drive the SCSI bus when the - * phase specified in the appropriate bits of the TARGET COMMAND - * REGISTER match the STATUS REGISTER - */ - - NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(p)); - - do { - /* - * Wait for assertion of REQ, after which the phase bits will be - * valid - */ - while (!((tmp = NCR5380_read(STATUS_REG)) & SR_REQ)); - - HSH_PRINTK("scsi%d: REQ detected\n", HOSTNO); - - /* Check for phase mismatch */ - if ((tmp & PHASE_MASK) != p) { - PIO_PRINTK("scsi%d: phase mismatch\n", HOSTNO); - NCR_PRINT_PHASE(NDEBUG_PIO); - break; - } - - /* Do actual transfer from SCSI bus to / from memory */ - if (!(p & SR_IO)) - NCR5380_write(OUTPUT_DATA_REG, *d); - else - *d = NCR5380_read(CURRENT_SCSI_DATA_REG); - - ++d; - - /* - * The SCSI standard suggests that in MSGOUT phase, the initiator - * should drop ATN on the last byte of the message phase - * after REQ has been asserted for the handshake but before - * the initiator raises ACK. - */ - - if (!(p & SR_IO)) { - if (!((p & SR_MSG) && c > 1)) { - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | - ICR_ASSERT_DATA); - NCR_PRINT(NDEBUG_PIO); - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | - ICR_ASSERT_DATA | ICR_ASSERT_ACK); - } else { - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | - ICR_ASSERT_DATA | ICR_ASSERT_ATN); - NCR_PRINT(NDEBUG_PIO); - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | - ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_ACK); - } - } else { - NCR_PRINT(NDEBUG_PIO); - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ACK); - } - - while (NCR5380_read(STATUS_REG) & SR_REQ); - - HSH_PRINTK("scsi%d: req false, handshake complete\n", HOSTNO); - -/* - * We have several special cases to consider during REQ/ACK handshaking : - * 1. We were in MSGOUT phase, and we are on the last byte of the - * message. ATN must be dropped as ACK is dropped. - * - * 2. We are in a MSGIN phase, and we are on the last byte of the - * message. We must exit with ACK asserted, so that the calling - * code may raise ATN before dropping ACK to reject the message. - * - * 3. ACK and ATN are clear and the target may proceed as normal. - */ - if (!(p == PHASE_MSGIN && c == 1)) { - if (p == PHASE_MSGOUT && c > 1) - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN); - else - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - } - } while (--c); - - PIO_PRINTK("scsi%d: residual %d\n", HOSTNO, c); - - *count = c; - *data = d; - tmp = NCR5380_read(STATUS_REG); - /* The phase read from the bus is valid if either REQ is (already) - * asserted or if ACK hasn't been released yet. The latter is the case if - * we're in MSGIN and all wanted bytes have been received. */ - if ((tmp & SR_REQ) || (p == PHASE_MSGIN && c == 0)) - *phase = tmp & PHASE_MASK; - else - *phase = PHASE_UNKNOWN; - - if (!c || (*phase == p)) - return 0; - else - return -1; -} - -/* - * Function : do_abort (Scsi_Host *host) - * - * Purpose : abort the currently established nexus. Should only be - * called from a routine which can drop into a - * - * Returns : 0 on success, -1 on failure. - */ - -static int do_abort (struct Scsi_Host *host) -{ - unsigned char tmp, *msgptr, phase; - int len; - - /* Request message out phase */ - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN); - - /* - * Wait for the target to indicate a valid phase by asserting - * REQ. Once this happens, we'll have either a MSGOUT phase - * and can immediately send the ABORT message, or we'll have some - * other phase and will have to source/sink data. - * - * We really don't care what value was on the bus or what value - * the target sees, so we just handshake. - */ - - while (!(tmp = NCR5380_read(STATUS_REG)) & SR_REQ); - - NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(tmp)); - - if ((tmp & PHASE_MASK) != PHASE_MSGOUT) { - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN | - ICR_ASSERT_ACK); - while (NCR5380_read(STATUS_REG) & SR_REQ); - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN); - } - - tmp = ABORT; - msgptr = &tmp; - len = 1; - phase = PHASE_MSGOUT; - NCR5380_transfer_pio (host, &phase, &len, &msgptr); - - /* - * If we got here, and the command completed successfully, - * we're about to go into bus free state. - */ - - return len ? -1 : 0; -} - -#if defined(REAL_DMA) || defined(PSEUDO_DMA) -/* - * Function : int NCR5380_transfer_dma (struct Scsi_Host *instance, - * unsigned char *phase, int *count, unsigned char **data) - * - * Purpose : transfers data in given phase using either real - * or pseudo DMA. - * - * Inputs : instance - instance of driver, *phase - pointer to - * what phase is expected, *count - pointer to number of - * bytes to transfer, **data - pointer to data pointer. - * - * Returns : -1 when different phase is entered without transferring - * maximum number of bytes, 0 if all bytes or transfered or exit - * is in same phase. - * - * Also, *phase, *count, *data are modified in place. - * - */ - - -static int NCR5380_transfer_dma( struct Scsi_Host *instance, - unsigned char *phase, int *count, - unsigned char **data) -{ - SETUP_HOSTDATA(instance); - register int c = *count; - register unsigned char p = *phase; - register unsigned char *d = *data; - register int foo; - unsigned char tmp; - unsigned long flags; - - - if ((tmp = (NCR5380_read(STATUS_REG) & PHASE_MASK)) != p) { - *phase = tmp; - return -1; - } - - if (mac_read_overruns && (p & SR_IO)) { - c -= mac_read_overruns; - } - - DMA_PRINTK("scsi%d: initializing DMA for %s, %d bytes %s %p\n", - HOSTNO, (p & SR_IO) ? "reading" : "writing", - c, (p & SR_IO) ? "to" : "from", d); - - NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(p)); - -#ifdef REAL_DMA - NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE | MR_ENABLE_EOP_INTR | MR_MONITOR_BSY); -#else /* PSEUDO_DMA! */ -#if defined(PSEUDO_DMA) && !defined(UNSAFE) - local_irq_save(flags); -#endif - /* KLL May need eop and parity in 53c400 */ - if (hostdata->flags & FLAG_NCR53C400) - NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE | MR_ENABLE_PAR_CHECK - | MR_ENABLE_PAR_INTR | MR_ENABLE_EOP_INTR | MR_DMA_MODE - | MR_MONITOR_BSY); - else -#ifndef EMULATE_PSEUDO_DMA - NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE); -#else - NCR5380_write(MODE_REG, MR_BASE); -#endif -#endif /* def REAL_DMA */ - -#ifdef REAL_DMA - /* On the Medusa, it is a must to initialize the DMA before - * starting the NCR. This is also the cleaner way for the TT. - */ - local_irq_save(flags); - hostdata->dma_len = (p & SR_IO) ? - NCR5380_dma_read_setup(instance, d, c) : - NCR5380_dma_write_setup(instance, d, c); - local_irq_restore(flags); -#endif /* def REAL_DMA */ - -#ifndef EMULATE_PSEUDO_DMA - if (p & SR_IO) - NCR5380_write(START_DMA_INITIATOR_RECEIVE_REG, 0); - else { - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA); - NCR5380_write(START_DMA_SEND_REG, 0); - } -#else - hostdata->dma_len = c; -#endif - -#if defined(REAL_DMA) - return 0; -#else /* defined(PSEUDO_DMA) */ - if (p & SR_IO) { -#ifdef DMA_WORKS_RIGHT - foo = NCR5380_pread(instance, d, c); -#else - int diff = 1; - if (hostdata->flags & FLAG_NCR53C400) { - diff=0; - } - - if (!(foo = NCR5380_pread(instance, d, c - diff))) { - /* - * We can't disable DMA mode after successfully transferring - * what we plan to be the last byte, since that would open up - * a race condition where if the target asserted REQ before - * we got the DMA mode reset, the NCR5380 would have latched - * an additional byte into the INPUT DATA register and we'd - * have dropped it. - * - * The workaround was to transfer one fewer bytes than we - * intended to with the pseudo-DMA read function, wait for - * the chip to latch the last byte, read it, and then disable - * pseudo-DMA mode. - * - * After REQ is asserted, the NCR5380 asserts DRQ and ACK. - * REQ is deasserted when ACK is asserted, and not reasserted - * until ACK goes false. Since the NCR5380 won't lower ACK - * until DACK is asserted, which won't happen unless we twiddle - * the DMA port or we take the NCR5380 out of DMA mode, we - * can guarantee that we won't handshake another extra - * byte. - */ - - if (!(hostdata->flags & FLAG_NCR53C400)) { - while (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_DRQ)); - /* Wait for clean handshake */ - while (NCR5380_read(STATUS_REG) & SR_REQ); - d[c - 1] = NCR5380_read(INPUT_DATA_REG); - } - } -#endif - } else { -#ifdef DMA_WORKS_RIGHT - foo = NCR5380_pwrite(instance, d, c); -#else - int timeout; -#if (NDEBUG & NDEBUG_C400_PWRITE) - printk("About to pwrite %d bytes\n", c); -#endif - if (!(foo = NCR5380_pwrite(instance, d, c))) { - /* - * Wait for the last byte to be sent. If REQ is being asserted for - * the byte we're interested, we'll ACK it and it will go false. - */ - if (!(hostdata->flags & FLAG_HAS_LAST_BYTE_SENT)) { - timeout = 20000; -#if 1 -#if 1 - while (!(NCR5380_read(BUS_AND_STATUS_REG) & - BASR_DRQ) && (NCR5380_read(BUS_AND_STATUS_REG) & - BASR_PHASE_MATCH)); -#else - if (NCR5380_read(STATUS_REG) & SR_REQ) { - for (; timeout && - !(NCR5380_read(BUS_AND_STATUS_REG) & BASR_ACK); - --timeout); - for (; timeout && (NCR5380_read(STATUS_REG) & SR_REQ); - --timeout); - } -#endif - - -#if (NDEBUG & NDEBUG_LAST_BYTE_SENT) - if (!timeout) - printk("scsi%d : timed out on last byte\n", - instance->host_no); -#endif - - - if (hostdata->flags & FLAG_CHECK_LAST_BYTE_SENT) { - hostdata->flags &= ~FLAG_CHECK_LAST_BYTE_SENT; - if (NCR5380_read(TARGET_COMMAND_REG) & TCR_LAST_BYTE_SENT) { - hostdata->flags |= FLAG_HAS_LAST_BYTE_SENT; -#if (NDEBUG & NDEBUG_LAST_BYTE_SENT) - printk("scsi%d : last bit sent works\n", - instance->host_no); -#endif - } - } - } else { -#if (NDEBUG & NDEBUG_C400_PWRITE) - printk("Waiting for LASTBYTE\n"); -#endif - while (!(NCR5380_read(TARGET_COMMAND_REG) & TCR_LAST_BYTE_SENT)); -#if (NDEBUG & NDEBUG_C400_PWRITE) - printk("Got LASTBYTE\n"); -#endif - } -#else - udelay (5); -#endif - } -#endif - } - - NCR5380_write(MODE_REG, MR_BASE); - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - - if ((!(p & SR_IO)) && (hostdata->flags & FLAG_NCR53C400)) { -#if (NDEBUG & NDEBUG_C400_PWRITE) - printk("53C400w: Checking for IRQ\n"); -#endif - if (NCR5380_read(BUS_AND_STATUS_REG) & BASR_IRQ) { -#if (NDEBUG & NDEBUG_C400_PWRITE) - printk("53C400w: got it, reading reset interrupt reg\n"); -#endif - NCR5380_read(RESET_PARITY_INTERRUPT_REG); - } else { - printk("53C400w: IRQ NOT THERE!\n"); - } - } - - *data = d + c; - *count = 0; - *phase = NCR5380_read(STATUS_REG) & PHASE_MASK; -#if 0 - NCR5380_print_phase(instance); -#endif -#if defined(PSEUDO_DMA) && !defined(UNSAFE) - local_irq_restore(flags); -#endif /* defined(REAL_DMA_POLL) */ - return foo; -#endif /* def REAL_DMA */ -} -#endif /* defined(REAL_DMA) || defined(PSEUDO_DMA) */ - - -/* - * Function : NCR5380_information_transfer (struct Scsi_Host *instance) - * - * Purpose : run through the various SCSI phases and do as the target - * directs us to. Operates on the currently connected command, - * instance->connected. - * - * Inputs : instance, instance for which we are doing commands - * - * Side effects : SCSI things happen, the disconnected queue will be - * modified if a command disconnects, *instance->connected will - * change. - * - * XXX Note : we need to watch for bus free or a reset condition here - * to recover from an unexpected bus free condition. - */ - -static void NCR5380_information_transfer (struct Scsi_Host *instance) -{ - SETUP_HOSTDATA(instance); - unsigned long flags; - unsigned char msgout = NOP; - int sink = 0; - int len; -#if defined(PSEUDO_DMA) || defined(REAL_DMA_POLL) - int transfersize; -#endif - unsigned char *data; - unsigned char phase, tmp, extended_msg[10], old_phase=0xff; - Scsi_Cmnd *cmd = (Scsi_Cmnd *) hostdata->connected; - - while (1) { - tmp = NCR5380_read(STATUS_REG); - /* We only have a valid SCSI phase when REQ is asserted */ - if (tmp & SR_REQ) { - phase = (tmp & PHASE_MASK); - if (phase != old_phase) { - old_phase = phase; - NCR_PRINT_PHASE(NDEBUG_INFORMATION); - } - - if (sink && (phase != PHASE_MSGOUT)) { - NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(tmp)); - - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN | - ICR_ASSERT_ACK); - while (NCR5380_read(STATUS_REG) & SR_REQ); - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | - ICR_ASSERT_ATN); - sink = 0; - continue; - } - - switch (phase) { - case PHASE_DATAOUT: -#if (NDEBUG & NDEBUG_NO_DATAOUT) - printk("scsi%d: NDEBUG_NO_DATAOUT set, attempted DATAOUT " - "aborted\n", HOSTNO); - sink = 1; - do_abort(instance); - cmd->result = DID_ERROR << 16; - cmd->done(cmd); - return; -#endif - case PHASE_DATAIN: - /* - * If there is no room left in the current buffer in the - * scatter-gather list, move onto the next one. - */ - - if (!cmd->SCp.this_residual && cmd->SCp.buffers_residual) { - ++cmd->SCp.buffer; - --cmd->SCp.buffers_residual; - cmd->SCp.this_residual = cmd->SCp.buffer->length; - cmd->SCp.ptr = cmd->SCp.buffer->address; - /* ++roman: Try to merge some scatter-buffers if - * they are at contiguous physical addresses. - */ - merge_contiguous_buffers( cmd ); - INF_PRINTK("scsi%d: %d bytes and %d buffers left\n", - HOSTNO, cmd->SCp.this_residual, - cmd->SCp.buffers_residual); - } - - /* - * The preferred transfer method is going to be - * PSEUDO-DMA for systems that are strictly PIO, - * since we can let the hardware do the handshaking. - * - * For this to work, we need to know the transfersize - * ahead of time, since the pseudo-DMA code will sit - * in an unconditional loop. - */ - -/* ++roman: I suggest, this should be - * #if def(REAL_DMA) - * instead of leaving REAL_DMA out. - */ - -#if defined(REAL_DMA) || defined(PSEUDO_DMA) - if (!cmd->device->borken && - !(hostdata->flags & FLAG_NO_PSEUDO_DMA) && - (transfersize = NCR5380_dma_xfer_len(instance,cmd,phase)) > 31) { - - len = transfersize; - cmd->SCp.phase = phase; - if (NCR5380_transfer_dma(instance, &phase, - &len, (unsigned char **) &cmd->SCp.ptr)) { - /* - * If the watchdog timer fires, all future - * accesses to this device will use the - * polled-IO. */ - printk(KERN_NOTICE "scsi%d: switching target %d " - "lun %d to slow handshake\n", HOSTNO, - cmd->target, cmd->lun); - cmd->device->borken = 1; - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | - ICR_ASSERT_ATN); - sink = 1; - do_abort(instance); - cmd->result = DID_ERROR << 16; - cmd->done(cmd); - /* XXX - need to source or sink data here, as appropriate */ - } else { -#ifdef REAL_DMA - /* ++roman: When using real DMA, - * information_transfer() should return after - * starting DMA since it has nothing more to - * do. - */ - return; -#else - /* Michael: When using pseudo-DMA emulation, we must - * take care to take into account the residual from - * the current transfer as determined by either the - * interrupt routine ot the pseudo-transfer functions - * (whichever notices it first). - */ - if (mac_pdma_residual) - len -= mac_pdma_residual; - cmd->SCp.this_residual -= transfersize - len; -#endif - } - } else -#endif /* defined(REAL_DMA) || defined(PSEUDO_DMA) */ - NCR5380_transfer_pio(instance, &phase, - (int *) &cmd->SCp.this_residual, (unsigned char **) - &cmd->SCp.ptr); - break; - case PHASE_MSGIN: - len = 1; - data = &tmp; - NCR5380_write(SELECT_ENABLE_REG, 0); /* disable reselects */ - NCR5380_transfer_pio(instance, &phase, &len, &data); - cmd->SCp.Message = tmp; - - switch (tmp) { - /* - * Linking lets us reduce the time required to get the - * next command out to the device, hopefully this will - * mean we don't waste another revolution due to the delays - * required by ARBITRATION and another SELECTION. - * - * In the current implementation proposal, low level drivers - * merely have to start the next command, pointed to by - * next_link, done() is called as with unlinked commands. - */ -#ifdef LINKED - case LINKED_CMD_COMPLETE: - case LINKED_FLG_CMD_COMPLETE: - /* Accept message by clearing ACK */ - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - - LNK_PRINTK("scsi%d: target %d lun %d linked command " - "complete.\n", HOSTNO, cmd->target, cmd->lun); - - /* Enable reselect interrupts */ - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - /* - * Sanity check : A linked command should only terminate - * with one of these messages if there are more linked - * commands available. - */ - - if (!cmd->next_link) { - printk(KERN_NOTICE "scsi%d: target %d lun %d " - "linked command complete, no next_link\n", - HOSTNO, cmd->target, cmd->lun); - sink = 1; - do_abort (instance); - return; - } - - initialize_SCp(cmd->next_link); - /* The next command is still part of this process; copy it - * and don't free it! */ - cmd->next_link->tag = cmd->tag; - cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8); - LNK_PRINTK("scsi%d: target %d lun %d linked request " - "done, calling scsi_done().\n", - HOSTNO, cmd->target, cmd->lun); -#ifdef NCR5380_STATS - collect_stats(hostdata, cmd); -#endif - cmd->scsi_done(cmd); - cmd = hostdata->connected; - break; -#endif /* def LINKED */ - case ABORT: - case COMMAND_COMPLETE: - /* Accept message by clearing ACK */ - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - hostdata->connected = NULL; - QU_PRINTK("scsi%d: command for target %d, lun %d " - "completed\n", HOSTNO, cmd->target, cmd->lun); -#ifdef SUPPORT_TAGS - cmd_free_tag( cmd ); - if (status_byte(cmd->SCp.Status) == QUEUE_FULL) { - /* Turn a QUEUE FULL status into BUSY, I think the - * mid level cannot handle QUEUE FULL :-( (The - * command is retried after BUSY). Also update our - * queue size to the number of currently issued - * commands now. - */ - /* ++Andreas: the mid level code knows about - QUEUE_FULL now. */ - TAG_ALLOC *ta = &TagAlloc[cmd->target][cmd->lun]; - TAG_PRINTK("scsi%d: target %d lun %d returned " - "QUEUE_FULL after %d commands\n", - HOSTNO, cmd->target, cmd->lun, - ta->nr_allocated); - if (ta->queue_size > ta->nr_allocated) - ta->nr_allocated = ta->queue_size; - } -#else - hostdata->busy[cmd->target] &= ~(1 << cmd->lun); -#endif - /* Enable reselect interrupts */ - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - - /* - * I'm not sure what the correct thing to do here is : - * - * If the command that just executed is NOT a request - * sense, the obvious thing to do is to set the result - * code to the values of the stored parameters. - * - * If it was a REQUEST SENSE command, we need some way to - * differentiate between the failure code of the original - * and the failure code of the REQUEST sense - the obvious - * case is success, where we fall through and leave the - * result code unchanged. - * - * The non-obvious place is where the REQUEST SENSE failed - */ - - if (cmd->cmnd[0] != REQUEST_SENSE) - cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8); - else if (status_byte(cmd->SCp.Status) != GOOD) - cmd->result = (cmd->result & 0x00ffff) | (DID_ERROR << 16); - -#ifdef AUTOSENSE - if ((cmd->cmnd[0] != REQUEST_SENSE) && - (status_byte(cmd->SCp.Status) == CHECK_CONDITION)) { - ASEN_PRINTK("scsi%d: performing request sense\n", - HOSTNO); - cmd->cmnd[0] = REQUEST_SENSE; - cmd->cmnd[1] &= 0xe0; - cmd->cmnd[2] = 0; - cmd->cmnd[3] = 0; - cmd->cmnd[4] = sizeof(cmd->sense_buffer); - cmd->cmnd[5] = 0; - cmd->cmd_len = COMMAND_SIZE(cmd->cmnd[0]); - - cmd->use_sg = 0; - /* this is initialized from initialize_SCp - cmd->SCp.buffer = NULL; - cmd->SCp.buffers_residual = 0; - */ - cmd->request_buffer = (char *) cmd->sense_buffer; - cmd->request_bufflen = sizeof(cmd->sense_buffer); - - local_irq_save(flags); - LIST(cmd,hostdata->issue_queue); - NEXT(cmd) = hostdata->issue_queue; - hostdata->issue_queue = (Scsi_Cmnd *) cmd; - local_irq_restore(flags); - QU_PRINTK("scsi%d: REQUEST SENSE added to head of " - "issue queue\n", H_NO(cmd)); - } else -#endif /* def AUTOSENSE */ - { -#ifdef NCR5380_STATS - collect_stats(hostdata, cmd); -#endif - cmd->scsi_done(cmd); - } - - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - /* - * Restore phase bits to 0 so an interrupted selection, - * arbitration can resume. - */ - NCR5380_write(TARGET_COMMAND_REG, 0); - - while ((NCR5380_read(STATUS_REG) & SR_BSY) && !hostdata->connected) - barrier(); - - return; - case MESSAGE_REJECT: - /* Accept message by clearing ACK */ - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - /* Enable reselect interrupts */ - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - switch (hostdata->last_message) { - case HEAD_OF_QUEUE_TAG: - case ORDERED_QUEUE_TAG: - case SIMPLE_QUEUE_TAG: - /* The target obviously doesn't support tagged - * queuing, even though it announced this ability in - * its INQUIRY data ?!? (maybe only this LUN?) Ok, - * clear 'tagged_supported' and lock the LUN, since - * the command is treated as untagged further on. - */ - cmd->device->tagged_supported = 0; - hostdata->busy[cmd->target] |= (1 << cmd->lun); - cmd->tag = TAG_NONE; - TAG_PRINTK("scsi%d: target %d lun %d rejected " - "QUEUE_TAG message; tagged queuing " - "disabled\n", - HOSTNO, cmd->target, cmd->lun); - break; - } - break; - case DISCONNECT: - /* Accept message by clearing ACK */ - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - local_irq_save(flags); - cmd->device->disconnect = 1; - LIST(cmd,hostdata->disconnected_queue); - NEXT(cmd) = hostdata->disconnected_queue; - hostdata->connected = NULL; - hostdata->disconnected_queue = cmd; - local_irq_restore(flags); - QU_PRINTK("scsi%d: command for target %d lun %d was " - "moved from connected to the " - "disconnected_queue\n", HOSTNO, - cmd->target, cmd->lun); - /* - * Restore phase bits to 0 so an interrupted selection, - * arbitration can resume. - */ - NCR5380_write(TARGET_COMMAND_REG, 0); - - /* Enable reselect interrupts */ - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - /* Wait for bus free to avoid nasty timeouts */ - while ((NCR5380_read(STATUS_REG) & SR_BSY) && !hostdata->connected) - barrier(); - return; - /* - * The SCSI data pointer is *IMPLICITLY* saved on a disconnect - * operation, in violation of the SCSI spec so we can safely - * ignore SAVE/RESTORE pointers calls. - * - * Unfortunately, some disks violate the SCSI spec and - * don't issue the required SAVE_POINTERS message before - * disconnecting, and we have to break spec to remain - * compatible. - */ - case SAVE_POINTERS: - case RESTORE_POINTERS: - /* Accept message by clearing ACK */ - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - /* Enable reselect interrupts */ - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - break; - case EXTENDED_MESSAGE: -/* - * Extended messages are sent in the following format : - * Byte - * 0 EXTENDED_MESSAGE == 1 - * 1 length (includes one byte for code, doesn't - * include first two bytes) - * 2 code - * 3..length+1 arguments - * - * Start the extended message buffer with the EXTENDED_MESSAGE - * byte, since print_msg() wants the whole thing. - */ - extended_msg[0] = EXTENDED_MESSAGE; - /* Accept first byte by clearing ACK */ - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - - EXT_PRINTK("scsi%d: receiving extended message\n", HOSTNO); - - len = 2; - data = extended_msg + 1; - phase = PHASE_MSGIN; - NCR5380_transfer_pio(instance, &phase, &len, &data); - EXT_PRINTK("scsi%d: length=%d, code=0x%02x\n", HOSTNO, - (int)extended_msg[1], (int)extended_msg[2]); - - if (!len && extended_msg[1] <= - (sizeof (extended_msg) - 1)) { - /* Accept third byte by clearing ACK */ - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - len = extended_msg[1] - 1; - data = extended_msg + 3; - phase = PHASE_MSGIN; - - NCR5380_transfer_pio(instance, &phase, &len, &data); - EXT_PRINTK("scsi%d: message received, residual %d\n", - HOSTNO, len); - - switch (extended_msg[2]) { - case EXTENDED_SDTR: - case EXTENDED_WDTR: - case EXTENDED_MODIFY_DATA_POINTER: - case EXTENDED_EXTENDED_IDENTIFY: - tmp = 0; - } - } else if (len) { - printk(KERN_NOTICE "scsi%d: error receiving " - "extended message\n", HOSTNO); - tmp = 0; - } else { - printk(KERN_NOTICE "scsi%d: extended message " - "code %02x length %d is too long\n", - HOSTNO, extended_msg[2], extended_msg[1]); - tmp = 0; - } - /* Fall through to reject message */ - - /* - * If we get something weird that we aren't expecting, - * reject it. - */ - default: - if (!tmp) { - printk(KERN_DEBUG "scsi%d: rejecting message ", HOSTNO); - print_msg (extended_msg); - printk("\n"); - } else if (tmp != EXTENDED_MESSAGE) - printk(KERN_DEBUG "scsi%d: rejecting unknown " - "message %02x from target %d, lun %d\n", - HOSTNO, tmp, cmd->target, cmd->lun); - else - printk(KERN_DEBUG "scsi%d: rejecting unknown " - "extended message " - "code %02x, length %d from target %d, lun %d\n", - HOSTNO, extended_msg[1], extended_msg[0], - cmd->target, cmd->lun); - - - msgout = MESSAGE_REJECT; - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | - ICR_ASSERT_ATN); - break; - } /* switch (tmp) */ - break; - case PHASE_MSGOUT: - len = 1; - data = &msgout; - hostdata->last_message = msgout; - NCR5380_transfer_pio(instance, &phase, &len, &data); - if (msgout == ABORT) { -#ifdef SUPPORT_TAGS - cmd_free_tag( cmd ); -#else - hostdata->busy[cmd->target] &= ~(1 << cmd->lun); -#endif - hostdata->connected = NULL; - cmd->result = DID_ERROR << 16; -#ifdef NCR5380_STATS - collect_stats(hostdata, cmd); -#endif - cmd->scsi_done(cmd); - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); - return; - } - msgout = NOP; - break; - case PHASE_CMDOUT: - len = cmd->cmd_len; - data = cmd->cmnd; - /* - * XXX for performance reasons, on machines with a - * PSEUDO-DMA architecture we should probably - * use the dma transfer function. - */ - NCR5380_transfer_pio(instance, &phase, &len, - &data); - break; - case PHASE_STATIN: - len = 1; - data = &tmp; - NCR5380_transfer_pio(instance, &phase, &len, &data); - cmd->SCp.Status = tmp; - break; - default: - printk("scsi%d: unknown phase\n", HOSTNO); - NCR_PRINT(NDEBUG_ANY); - } /* switch(phase) */ - } /* if (tmp * SR_REQ) */ - } /* while (1) */ -} - -/* - * Function : void NCR5380_reselect (struct Scsi_Host *instance) - * - * Purpose : does reselection, initializing the instance->connected - * field to point to the Scsi_Cmnd for which the I_T_L or I_T_L_Q - * nexus has been reestablished, - * - * Inputs : instance - this instance of the NCR5380. - * - */ - - -static void NCR5380_reselect (struct Scsi_Host *instance) -{ - SETUP_HOSTDATA(instance); - unsigned char target_mask; - unsigned char lun, phase; - int len; -#ifdef SUPPORT_TAGS - unsigned char tag; -#endif - unsigned char msg[3]; - unsigned char *data; - Scsi_Cmnd *tmp = NULL, *prev; -/* unsigned long flags; */ - - /* - * Disable arbitration, etc. since the host adapter obviously - * lost, and tell an interrupted NCR5380_select() to restart. - */ - - NCR5380_write(MODE_REG, MR_BASE); - hostdata->restart_select = 1; - - target_mask = NCR5380_read(CURRENT_SCSI_DATA_REG) & ~(hostdata->id_mask); - - RSL_PRINTK("scsi%d: reselect\n", HOSTNO); - - /* - * At this point, we have detected that our SCSI ID is on the bus, - * SEL is true and BSY was false for at least one bus settle delay - * (400 ns). - * - * We must assert BSY ourselves, until the target drops the SEL - * signal. - */ - - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_BSY); - - while (NCR5380_read(STATUS_REG) & SR_SEL); - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - - /* - * Wait for target to go into MSGIN. - */ - - while (!(NCR5380_read(STATUS_REG) & SR_REQ)); - - len = 1; - data = msg; - phase = PHASE_MSGIN; - NCR5380_transfer_pio(instance, &phase, &len, &data); - - if (!(msg[0] & 0x80)) { - printk(KERN_DEBUG "scsi%d: expecting IDENTIFY message, got ", HOSTNO); - print_msg(msg); - do_abort(instance); - return; - } - lun = (msg[0] & 0x07); - -#ifdef SUPPORT_TAGS - /* If the phase is still MSGIN, the target wants to send some more - * messages. In case it supports tagged queuing, this is probably a - * SIMPLE_QUEUE_TAG for the I_T_L_Q nexus. - */ - tag = TAG_NONE; - if (phase == PHASE_MSGIN && setup_use_tagged_queuing) { - /* Accept previous IDENTIFY message by clearing ACK */ - NCR5380_write( INITIATOR_COMMAND_REG, ICR_BASE ); - len = 2; - data = msg+1; - if (!NCR5380_transfer_pio(instance, &phase, &len, &data) && - msg[1] == SIMPLE_QUEUE_TAG) - tag = msg[2]; - TAG_PRINTK("scsi%d: target mask %02x, lun %d sent tag %d at " - "reselection\n", HOSTNO, target_mask, lun, tag); - } -#endif - - /* - * Find the command corresponding to the I_T_L or I_T_L_Q nexus we - * just reestablished, and remove it from the disconnected queue. - */ - - for (tmp = (Scsi_Cmnd *) hostdata->disconnected_queue, prev = NULL; - tmp; prev = tmp, tmp = NEXT(tmp) ) { - if ((target_mask == (1 << tmp->target)) && (lun == tmp->lun) -#ifdef SUPPORT_TAGS - && (tag == tmp->tag) -#endif - ) { - if (prev) { - REMOVE(prev, NEXT(prev), tmp, NEXT(tmp)); - NEXT(prev) = NEXT(tmp); - } else { - REMOVE(-1, hostdata->disconnected_queue, tmp, NEXT(tmp)); - hostdata->disconnected_queue = NEXT(tmp); - } - NEXT(tmp) = NULL; - break; - } - } - - if (!tmp) { - printk(KERN_WARNING "scsi%d: warning: target bitmask %02x lun %d " -#ifdef SUPPORT_TAGS - "tag %d " -#endif - "not in disconnect_queue.\n", - HOSTNO, target_mask, lun -#ifdef SUPPORT_TAGS - , tag -#endif - ); - /* - * Since we have an established nexus that we can't do anything - * with, we must abort it. - */ - do_abort(instance); - return; - } - - /* Accept message by clearing ACK */ - NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE); - - hostdata->connected = tmp; - RSL_PRINTK("scsi%d: nexus established, target = %d, lun = %d, tag = %d\n", - HOSTNO, tmp->target, tmp->lun, tmp->tag); -} - - -/* - * Function : int NCR5380_abort (Scsi_Cmnd *cmd) - * - * Purpose : abort a command - * - * Inputs : cmd - the Scsi_Cmnd to abort, code - code to set the - * host byte of the result field to, if zero DID_ABORTED is - * used. - * - * Returns : 0 - success, -1 on failure. - * - * XXX - there is no way to abort the command that is currently - * connected, you have to wait for it to complete. If this is - * a problem, we could implement longjmp() / setjmp(), setjmp() - * called where the loop started in NCR5380_main(). - */ - -int NCR5380_abort (Scsi_Cmnd *cmd) -{ - struct Scsi_Host *instance = cmd->host; - SETUP_HOSTDATA(instance); - Scsi_Cmnd *tmp, **prev; - unsigned long flags; - - printk(KERN_NOTICE "scsi%d: aborting command\n", HOSTNO); - print_Scsi_Cmnd (cmd); - - NCR5380_print_status (instance); - - local_irq_save(flags); - - ABRT_PRINTK("scsi%d: abort called basr 0x%02x, sr 0x%02x\n", HOSTNO, - NCR5380_read(BUS_AND_STATUS_REG), - NCR5380_read(STATUS_REG)); - -#if 1 -/* - * Case 1 : If the command is the currently executing command, - * we'll set the aborted flag and return control so that - * information transfer routine can exit cleanly. - */ - - if (hostdata->connected == cmd) { - - ABRT_PRINTK("scsi%d: aborting connected command\n", HOSTNO); -/* - * We should perform BSY checking, and make sure we haven't slipped - * into BUS FREE. - */ - -/* NCR5380_write(INITIATOR_COMMAND_REG, ICR_ASSERT_ATN); */ -/* - * Since we can't change phases until we've completed the current - * handshake, we have to source or sink a byte of data if the current - * phase is not MSGOUT. - */ - -/* - * Return control to the executing NCR drive so we can clear the - * aborted flag and get back into our main loop. - */ - - if (do_abort(instance) == 0) { - hostdata->aborted = 1; - hostdata->connected = NULL; - cmd->result = DID_ABORT << 16; -#ifdef SUPPORT_TAGS - cmd_free_tag( cmd ); -#else - hostdata->busy[cmd->target] &= ~(1 << cmd->lun); -#endif - local_irq_restore(flags); - cmd->scsi_done(cmd); - return SCSI_ABORT_SUCCESS; - } else { -/* local_irq_restore(flags); */ - printk("scsi%d: abort of connected command failed!\n", HOSTNO); - return SCSI_ABORT_ERROR; - } - } -#endif - -/* - * Case 2 : If the command hasn't been issued yet, we simply remove it - * from the issue queue. - */ - for (prev = (Scsi_Cmnd **) &(hostdata->issue_queue), - tmp = (Scsi_Cmnd *) hostdata->issue_queue; - tmp; prev = NEXTADDR(tmp), tmp = NEXT(tmp) ) - if (cmd == tmp) { - REMOVE(5, *prev, tmp, NEXT(tmp)); - (*prev) = NEXT(tmp); - NEXT(tmp) = NULL; - tmp->result = DID_ABORT << 16; - local_irq_restore(flags); - ABRT_PRINTK("scsi%d: abort removed command from issue queue.\n", - HOSTNO); - /* Tagged queuing note: no tag to free here, hasn't been assigned - * yet... */ - tmp->scsi_done(tmp); - return SCSI_ABORT_SUCCESS; - } - -/* - * Case 3 : If any commands are connected, we're going to fail the abort - * and let the high level SCSI driver retry at a later time or - * issue a reset. - * - * Timeouts, and therefore aborted commands, will be highly unlikely - * and handling them cleanly in this situation would make the common - * case of noresets less efficient, and would pollute our code. So, - * we fail. - */ - - if (hostdata->connected) { - local_irq_restore(flags); - ABRT_PRINTK("scsi%d: abort failed, command connected.\n", HOSTNO); - return SCSI_ABORT_SNOOZE; - } - -/* - * Case 4: If the command is currently disconnected from the bus, and - * there are no connected commands, we reconnect the I_T_L or - * I_T_L_Q nexus associated with it, go into message out, and send - * an abort message. - * - * This case is especially ugly. In order to reestablish the nexus, we - * need to call NCR5380_select(). The easiest way to implement this - * function was to abort if the bus was busy, and let the interrupt - * handler triggered on the SEL for reselect take care of lost arbitrations - * where necessary, meaning interrupts need to be enabled. - * - * When interrupts are enabled, the queues may change - so we - * can't remove it from the disconnected queue before selecting it - * because that could cause a failure in hashing the nexus if that - * device reselected. - * - * Since the queues may change, we can't use the pointers from when we - * first locate it. - * - * So, we must first locate the command, and if NCR5380_select() - * succeeds, then issue the abort, relocate the command and remove - * it from the disconnected queue. - */ - - for (tmp = (Scsi_Cmnd *) hostdata->disconnected_queue; tmp; - tmp = NEXT(tmp)) - if (cmd == tmp) { - local_irq_restore(flags); - ABRT_PRINTK("scsi%d: aborting disconnected command.\n", HOSTNO); - - if (NCR5380_select (instance, cmd, (int) cmd->tag)) - return SCSI_ABORT_BUSY; - - ABRT_PRINTK("scsi%d: nexus reestablished.\n", HOSTNO); - - do_abort (instance); - - local_irq_save(flags); - for (prev = (Scsi_Cmnd **) &(hostdata->disconnected_queue), - tmp = (Scsi_Cmnd *) hostdata->disconnected_queue; - tmp; prev = NEXTADDR(tmp), tmp = NEXT(tmp) ) - if (cmd == tmp) { - REMOVE(5, *prev, tmp, NEXT(tmp)); - *prev = NEXT(tmp); - NEXT(tmp) = NULL; - tmp->result = DID_ABORT << 16; - /* We must unlock the tag/LUN immediately here, since the - * target goes to BUS FREE and doesn't send us another - * message (COMMAND_COMPLETE or the like) - */ -#ifdef SUPPORT_TAGS - cmd_free_tag( tmp ); -#else - hostdata->busy[cmd->target] &= ~(1 << cmd->lun); -#endif - local_irq_restore(flags); - tmp->scsi_done(tmp); - return SCSI_ABORT_SUCCESS; - } - } - -/* - * Case 5 : If we reached this point, the command was not found in any of - * the queues. - * - * We probably reached this point because of an unlikely race condition - * between the command completing successfully and the abortion code, - * so we won't panic, but we will notify the user in case something really - * broke. - */ - - local_irq_restore(flags); - printk(KERN_INFO "scsi%d: warning : SCSI command probably completed successfully\n" - KERN_INFO " before abortion\n", HOSTNO); - -/* Maybe it is sufficient just to release the ST-DMA lock... (if - * possible at all) At least, we should check if the lock could be - * released after the abort, in case it is kept due to some bug. - */ - - return SCSI_ABORT_NOT_RUNNING; -} - - -/* - * Function : int NCR5380_bus_reset (Scsi_Cmnd *cmd) - * - * Purpose : reset the SCSI bus. - * - * Returns : SCSI_RESET_WAKEUP - * - */ - -static int NCR5380_bus_reset( Scsi_Cmnd *cmd) -{ - SETUP_HOSTDATA(cmd->host); - int i; - unsigned long flags; -#if 1 - Scsi_Cmnd *connected, *disconnected_queue; -#endif - - NCR5380_print_status (cmd->host); - - /* get in phase */ - NCR5380_write( TARGET_COMMAND_REG, - PHASE_SR_TO_TCR( NCR5380_read(STATUS_REG) )); - /* assert RST */ - NCR5380_write( INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_RST ); - udelay (40); - /* reset NCR registers */ - NCR5380_write( INITIATOR_COMMAND_REG, ICR_BASE ); - NCR5380_write( MODE_REG, MR_BASE ); - NCR5380_write( TARGET_COMMAND_REG, 0 ); - NCR5380_write( SELECT_ENABLE_REG, 0 ); - /* ++roman: reset interrupt condition! otherwise no interrupts don't get - * through anymore ... */ - (void)NCR5380_read( RESET_PARITY_INTERRUPT_REG ); - -#if 1 /* XXX Should now be done by midlevel code, but it's broken XXX */ - /* XXX see below XXX */ - - /* MSch: old-style reset: actually abort all command processing here */ - - /* After the reset, there are no more connected or disconnected commands - * and no busy units; to avoid problems with re-inserting the commands - * into the issue_queue (via scsi_done()), the aborted commands are - * remembered in local variables first. - */ - local_irq_save(flags); - connected = (Scsi_Cmnd *)hostdata->connected; - hostdata->connected = NULL; - disconnected_queue = (Scsi_Cmnd *)hostdata->disconnected_queue; - hostdata->disconnected_queue = NULL; -#ifdef SUPPORT_TAGS - free_all_tags(); -#endif - for( i = 0; i < 8; ++i ) - hostdata->busy[i] = 0; -#ifdef REAL_DMA - hostdata->dma_len = 0; -#endif - local_irq_restore(flags); - - /* In order to tell the mid-level code which commands were aborted, - * set the command status to DID_RESET and call scsi_done() !!! - * This ultimately aborts processing of these commands in the mid-level. - */ - - if ((cmd = connected)) { - ABRT_PRINTK("scsi%d: reset aborted a connected command\n", H_NO(cmd)); - cmd->result = (cmd->result & 0xffff) | (DID_RESET << 16); - cmd->scsi_done( cmd ); - } - - for (i = 0; (cmd = disconnected_queue); ++i) { - disconnected_queue = NEXT(cmd); - NEXT(cmd) = NULL; - cmd->result = (cmd->result & 0xffff) | (DID_RESET << 16); - cmd->scsi_done( cmd ); - } - if (i > 0) - ABRT_PRINTK("scsi: reset aborted %d disconnected command(s)\n", i); - - /* since all commands have been explicitly terminated, we need to tell - * the midlevel code that the reset was SUCCESSFUL, and there is no - * need to 'wake up' the commands by a request_sense - */ - return SCSI_RESET_SUCCESS | SCSI_RESET_BUS_RESET; -#else /* 1 */ - - /* MSch: new-style reset handling: let the mid-level do what it can */ - - /* ++guenther: MID-LEVEL IS STILL BROKEN. - * Mid-level is supposed to requeue all commands that were active on the - * various low-level queues. In fact it does this, but that's not enough - * because all these commands are subject to timeout. And if a timeout - * happens for any removed command, *_abort() is called but all queues - * are now empty. Abort then gives up the falcon lock, which is fatal, - * since the mid-level will queue more commands and must have the lock - * (it's all happening inside timer interrupt handler!!). - * Even worse, abort will return NOT_RUNNING for all those commands not - * on any queue, so they won't be retried ... - * - * Conclusion: either scsi.c disables timeout for all resetted commands - * immediately, or we lose! As of linux-2.0.20 it doesn't. - */ - - /* After the reset, there are no more connected or disconnected commands - * and no busy units; so clear the low-level status here to avoid - * conflicts when the mid-level code tries to wake up the affected - * commands! - */ - - if (hostdata->issue_queue) - ABRT_PRINTK("scsi%d: reset aborted issued command(s)\n", H_NO(cmd)); - if (hostdata->connected) - ABRT_PRINTK("scsi%d: reset aborted a connected command\n", H_NO(cmd)); - if (hostdata->disconnected_queue) - ABRT_PRINTK("scsi%d: reset aborted disconnected command(s)\n", H_NO(cmd)); - - local_irq_save(flags); - hostdata->issue_queue = NULL; - hostdata->connected = NULL; - hostdata->disconnected_queue = NULL; -#ifdef SUPPORT_TAGS - free_all_tags(); -#endif - for( i = 0; i < 8; ++i ) - hostdata->busy[i] = 0; -#ifdef REAL_DMA - hostdata->dma_len = 0; -#endif - local_irq_restore(flags); - - /* we did no complete reset of all commands, so a wakeup is required */ - return SCSI_RESET_WAKEUP | SCSI_RESET_BUS_RESET; -#endif /* 1 */ -} - -static Scsi_Host_Template driver_template = { - .name = "Macintosh NCR5380 SCSI", - .detect = macscsi_detect, - .release = macscsi_release, - .info = macscsi_info, - .queuecommand = macscsi_queue_command, - .abort = macscsi_abort, - .reset = macscsi_reset, - .can_queue = CAN_QUEUE, - .this_id = 7, - .sg_tablesize = SG_ALL, - .cmd_per_lun = CMD_PER_LUN, - .use_clustering = DISABLE_CLUSTERING -}; - - -#include "scsi_module.c" - -/* Local Variables: */ -/* tab-width: 8 */ -/* End: */ diff -Nru a/drivers/scsi/osst.c b/drivers/scsi/osst.c --- a/drivers/scsi/osst.c Wed Feb 4 16:51:35 2004 +++ b/drivers/scsi/osst.c Wed Feb 4 16:51:35 2004 @@ -5106,6 +5106,8 @@ if (need_dma) priority |= GFP_DMA; + priority |= __GFP_NOWARN; + /* Try to allocate the first segment up to OS_DATA_SIZE and the others big enough to reach the goal (code assumes no segments in place) */ for (b_size = OS_DATA_SIZE, order = OSST_FIRST_ORDER; b_size >= PAGE_SIZE; order--, b_size /= 2) { diff -Nru a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c --- a/drivers/scsi/pcmcia/aha152x_stub.c Wed Feb 4 16:51:37 2004 +++ b/drivers/scsi/pcmcia/aha152x_stub.c Wed Feb 4 16:51:37 2004 @@ -78,7 +78,7 @@ static int host_id = 7; static int reconnect = 1; static int parity = 1; -static int synchronous = 0; +static int synchronous = 1; static int reset_delay = 100; static int ext_trans = 0; @@ -244,9 +244,6 @@ CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq)); CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf)); - /* A bad hack... */ - release_region(link->io.BasePort1, link->io.NumPorts1); - /* Set configuration options for the aha152x driver */ memset(&s, 0, sizeof(s)); s.conf = "PCMCIA setup"; @@ -266,9 +263,6 @@ goto cs_failed; } - scsi_add_host(host, NULL); /* XXX handle failure */ - scsi_scan_host(host); - sprintf(info->node.dev_name, "scsi%d", host->host_no); link->dev = &info->node; info->host = host; @@ -286,7 +280,7 @@ { scsi_info_t *info = link->priv; - scsi_remove_host(info->host); + aha152x_release(info->host); link->dev = NULL; pcmcia_release_configuration(link->handle); @@ -294,7 +288,6 @@ pcmcia_release_irq(link->handle, &link->irq); link->state &= ~DEV_CONFIG; - scsi_unregister(info->host); } static int aha152x_event(event_t event, int priority, diff -Nru a/drivers/scsi/qla2xxx/Kconfig b/drivers/scsi/qla2xxx/Kconfig --- a/drivers/scsi/qla2xxx/Kconfig Wed Feb 4 16:51:37 2004 +++ b/drivers/scsi/qla2xxx/Kconfig Wed Feb 4 16:51:37 2004 @@ -3,27 +3,39 @@ default (SCSI && PCI) depends on SCSI && PCI -config SCSI_QLA2XXX - tristate - config SCSI_QLA21XX - tristate "Qlogic ISP2100 host adapter family support" - select SCSI_QLA2XXX + tristate "QLogic ISP2100 host adapter family support" depends on SCSI_QLA2XXX_CONFIG ---help--- This driver supports the QLogic 21xx (ISP2100) host adapter family. config SCSI_QLA22XX - tristate "Qlogic ISP2200 host adapter family support" - select SCSI_QLA2XXX + tristate "QLogic ISP2200 host adapter family support" depends on SCSI_QLA2XXX_CONFIG ---help--- This driver supports the QLogic 22xx (ISP2200) host adapter family. -config SCSI_QLA23XX - tristate "Qlogic ISP23xx host adapter family support" - select SCSI_QLA2XXX +config SCSI_QLA2300 + tristate "QLogic ISP2300 host adapter family support" + depends on SCSI_QLA2XXX_CONFIG + ---help--- + This driver supports the QLogic 2300 (ISP2300, and ISP2312) host + adapter family. + +config SCSI_QLA2322 + tristate "QLogic ISP2322 host adapter family support" + depends on SCSI_QLA2XXX_CONFIG + ---help--- + This driver supports the QLogic 2322 (ISP2322) host adapter family. + +config SCSI_QLA6312 + tristate "QLogic ISP6312 host adapter family support" + depends on SCSI_QLA2XXX_CONFIG + ---help--- + This driver supports the QLogic 6312 (ISP6312) host adapter family. + +config SCSI_QLA6322 + tristate "QLogic ISP6322 host adapter family support" depends on SCSI_QLA2XXX_CONFIG ---help--- - This driver supports the QLogic 23xx (ISP2300, ISP2312, and ISP2322) - host adapter family. + This driver supports the QLogic 6322 (ISP6322) host adapter family. diff -Nru a/drivers/scsi/qla2xxx/Makefile b/drivers/scsi/qla2xxx/Makefile --- a/drivers/scsi/qla2xxx/Makefile Wed Feb 4 16:51:33 2004 +++ b/drivers/scsi/qla2xxx/Makefile Wed Feb 4 16:51:33 2004 @@ -1,12 +1,18 @@ -EXTRA_CFLAGS += -g -Idrivers/scsi -DUNIQUE_FW_NAME +EXTRA_CFLAGS += -Idrivers/scsi -DUNIQUE_FW_NAME qla2xxx-y := qla_os.o qla_init.o qla_mbx.o qla_iocb.o qla_isr.o qla_gs.o \ qla_dbg.o qla_sup.o qla_rscn.o qla2100-y := ql2100.o ql2100_fw.o qla2200-y := ql2200.o ql2200_fw.o -qla2300-y := ql2300.o ql2300_fw.o #ql2322_fw.o +qla2300-y := ql2300.o ql2300_fw.o +qla2322-y := ql2322.o ql2322_fw.o +qla6312-y := ql6312.o ql6312_fw.o +qla6322-y := ql6322.o ql6322_fw.o obj-$(CONFIG_SCSI_QLA21XX) += qla2xxx.o qla2100.o obj-$(CONFIG_SCSI_QLA22XX) += qla2xxx.o qla2200.o -obj-$(CONFIG_SCSI_QLA23XX) += qla2xxx.o qla2300.o +obj-$(CONFIG_SCSI_QLA2300) += qla2xxx.o qla2300.o +obj-$(CONFIG_SCSI_QLA2322) += qla2xxx.o qla2322.o +obj-$(CONFIG_SCSI_QLA6312) += qla2xxx.o qla6312.o +obj-$(CONFIG_SCSI_QLA6322) += qla2xxx.o qla6322.o diff -Nru a/drivers/scsi/qla2xxx/ql2300.c b/drivers/scsi/qla2xxx/ql2300.c --- a/drivers/scsi/qla2xxx/ql2300.c Wed Feb 4 16:51:37 2004 +++ b/drivers/scsi/qla2xxx/ql2300.c Wed Feb 4 16:51:37 2004 @@ -1,5 +1,5 @@ /* - * QLogic ISP23XX device driver for Linux 2.6.x + * QLogic ISP2300 device driver for Linux 2.6.x * Copyright (C) 2003 Christoph Hellwig. * Copyright (C) 2003 QLogic Corporation (www.qlogic.com) * @@ -15,80 +15,33 @@ static char qla_driver_name[] = "qla2300"; -extern unsigned char fw2300tpx_version[]; -extern unsigned char fw2300tpx_version_str[]; -extern unsigned short fw2300tpx_addr01; -extern unsigned short fw2300tpx_code01[]; -extern unsigned short fw2300tpx_length01; - -extern unsigned char fw2322tpx_version[]; -extern unsigned char fw2322tpx_version_str[]; -extern unsigned short fw2322tpx_addr01; -extern unsigned short fw2322tpx_code01[]; -extern unsigned short fw2322tpx_length01; -extern unsigned long rseqtpx_code_addr01; -extern unsigned short rseqtpx_code01[]; -extern unsigned short rseqtpx_code_length01; -extern unsigned long xseqtpx_code_addr01; -extern unsigned short xseqtpx_code01[]; -extern unsigned short xseqtpx_code_length01; +extern unsigned char fw2300ipx_version[]; +extern unsigned char fw2300ipx_version_str[]; +extern unsigned short fw2300ipx_addr01; +extern unsigned short fw2300ipx_code01[]; +extern unsigned short fw2300ipx_length01; static struct qla_fw_info qla_fw_tbl[] = { { .addressing = FW_INFO_ADDR_NORMAL, - .fwcode = &fw2300tpx_code01[0], - .fwlen = &fw2300tpx_length01, - .fwstart = &fw2300tpx_addr01, + .fwcode = &fw2300ipx_code01[0], + .fwlen = &fw2300ipx_length01, + .fwstart = &fw2300ipx_addr01, }, -#if defined(ISP2322) - /* End of 23xx firmware list */ - { FW_INFO_ADDR_NOMORE, }, - - /* Start of 232x firmware list */ - { - .addressing = FW_INFO_ADDR_NORMAL, - .fwcode = &fw2322tpx_code01[0], - .fwlen = &fw2322tpx_length01, - .fwstart = &fw2322tpx_addr01, - }, - { - .addressing = FW_INFO_ADDR_EXTENDED, - .fwcode = &rseqtpx_code01[0], - .fwlen = &rseqtpx_code_length01, - .lfwstart = &rseqtpx_code_addr01, - }, - { - .addressing = FW_INFO_ADDR_EXTENDED, - .fwcode = &xseqtpx_code01[0], - .fwlen = &xseqtpx_code_length01, - .lfwstart = &xseqtpx_code_addr01, - }, -#endif { FW_INFO_ADDR_NOMORE, }, }; static struct qla_board_info qla_board_tbl[] = { { .drv_name = qla_driver_name, - .isp_name = "ISP2300", .fw_info = qla_fw_tbl, }, - { .drv_name = qla_driver_name, - .isp_name = "ISP2312", .fw_info = qla_fw_tbl, }, -#if defined(ISP2322) - { - .drv_name = qla_driver_name, - - .isp_name = "ISP2322", - .fw_info = &qla_fw_tbl[2], - }, -#endif }; static struct pci_device_id qla2300_pci_tbl[] = { @@ -99,7 +52,6 @@ .subdevice = PCI_ANY_ID, .driver_data = (unsigned long)&qla_board_tbl[0], }, - { .vendor = PCI_VENDOR_ID_QLOGIC, .device = PCI_DEVICE_ID_QLOGIC_ISP2312, @@ -107,16 +59,6 @@ .subdevice = PCI_ANY_ID, .driver_data = (unsigned long)&qla_board_tbl[1], }, - -#if defined(ISP2322) - { - .vendor = PCI_VENDOR_ID_QLOGIC, - .device = PCI_DEVICE_ID_QLOGIC_ISP2322, - .subvendor = PCI_ANY_ID, - .subdevice = PCI_ANY_ID, - .driver_data = (unsigned long)&qla_board_tbl[2], - }, -#endif {0, 0}, }; MODULE_DEVICE_TABLE(pci, qla2300_pci_tbl); @@ -157,5 +99,5 @@ module_exit(qla2300_exit); MODULE_AUTHOR("QLogic Corporation"); -MODULE_DESCRIPTION("QLogic ISP23xx FC-SCSI Host Bus Adapter driver"); +MODULE_DESCRIPTION("QLogic ISP2300 FC-SCSI Host Bus Adapter driver"); MODULE_LICENSE("GPL"); diff -Nru a/drivers/scsi/qla2xxx/ql2300_fw.c b/drivers/scsi/qla2xxx/ql2300_fw.c --- a/drivers/scsi/qla2xxx/ql2300_fw.c Wed Feb 4 16:51:35 2004 +++ b/drivers/scsi/qla2xxx/ql2300_fw.c Wed Feb 4 16:51:35 2004 @@ -18,44 +18,44 @@ *************************************************************************/ /* - * Firmware Version 3.02.18 (10:33 Nov 03, 2003) + * Firmware Version 3.02.21 (16:31 Jan 19, 2004) */ #ifdef UNIQUE_FW_NAME -unsigned short fw2300tpx_version = 3*1024+2; +unsigned short fw2300ipx_version = 3*1024+2; #else unsigned short risc_code_version = 3*1024+2; #endif #ifdef UNIQUE_FW_NAME -unsigned char fw2300tpx_version_str[] = {3, 2,18}; +unsigned char fw2300ipx_version_str[] = {3, 2,21}; #else -unsigned char firmware_version[] = {3, 2,18}; +unsigned char firmware_version[] = {3, 2,21}; #endif #ifdef UNIQUE_FW_NAME -#define fw2300tpx_VERSION_STRING "3.02.18" +#define fw2300ipx_VERSION_STRING "3.02.21" #else -#define FW_VERSION_STRING "3.02.18" +#define FW_VERSION_STRING "3.02.21" #endif #ifdef UNIQUE_FW_NAME -unsigned short fw2300tpx_addr01 = 0x0800 ; +unsigned short fw2300ipx_addr01 = 0x0800 ; #else unsigned short risc_code_addr01 = 0x0800 ; #endif #ifdef UNIQUE_FW_NAME -unsigned short fw2300tpx_code01[] = { +unsigned short fw2300ipx_code01[] = { #else unsigned short risc_code01[] = { #endif - 0x0470, 0x0000, 0x0000, 0xcf5b, 0x0000, 0x0003, 0x0002, 0x0012, - 0x0117, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030, + 0x0470, 0x0000, 0x0000, 0xe666, 0x0000, 0x0003, 0x0002, 0x0015, + 0x0137, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030, 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, - 0x332e, 0x3032, 0x2e31, 0x3820, 0x2020, 0x2020, 0x2400, 0x20a9, + 0x332e, 0x3032, 0x2e32, 0x3120, 0x2020, 0x2020, 0x2400, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000, @@ -63,3375 +63,3545 @@ 0x2091, 0x2a00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001, - 0x0000, 0x20c1, 0x0004, 0x2001, 0x017f, 0x2003, 0x0000, 0x20c9, - 0x1bff, 0x2059, 0x0000, 0x2b78, 0x7883, 0x0004, 0x2089, 0x29be, - 0x2051, 0x1800, 0x2a70, 0x20e1, 0x0001, 0x20e9, 0x0001, 0x2029, + 0x0000, 0x20c1, 0x0004, 0x20c9, 0x1bff, 0x2059, 0x0000, 0x2b78, + 0x7883, 0x0004, 0x2089, 0x2bdb, 0x2051, 0x1800, 0x2a70, 0x20e1, + 0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e51, 0x2029, 0x4d00, 0x2031, 0xffff, 0x2039, 0x4cd0, 0x2021, 0x0200, 0x20e9, 0x0001, 0x20a1, 0x0000, 0x20a9, 0x0800, 0x900e, 0x4104, 0x20e9, 0x0001, 0x20a1, 0x1000, 0x900e, 0x2001, 0x0cc0, 0x9084, 0x0fff, 0x20a8, 0x4104, 0x2001, 0x0000, 0x9086, 0x0000, 0x0120, 0x21a8, - 0x4104, 0x8001, 0x1de0, 0x7566, 0x766a, 0x7762, 0x746e, 0x7472, - 0x00e6, 0x2071, 0x1a8b, 0x2472, 0x00ee, 0x20a1, 0x1cd0, 0x7168, + 0x4104, 0x8001, 0x1de0, 0x756e, 0x7672, 0x776a, 0x7476, 0x747a, + 0x00e6, 0x2071, 0x1abf, 0x2472, 0x00ee, 0x20a1, 0x1cd0, 0x7170, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x000f, 0x2001, 0x0001, - 0x9112, 0x900e, 0x21a8, 0x4104, 0x8211, 0x1de0, 0x7168, 0x3400, + 0x9112, 0x900e, 0x21a8, 0x4104, 0x8211, 0x1de0, 0x7170, 0x3400, 0x8001, 0x9102, 0x0120, 0x0218, 0x20a8, 0x900e, 0x4104, 0x2009, 0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f, 0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e, - 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0eed, 0x080c, - 0x5a2f, 0x080c, 0x996c, 0x080c, 0x10a4, 0x080c, 0x127c, 0x080c, - 0x196d, 0x080c, 0x0d4b, 0x080c, 0x1029, 0x080c, 0x3092, 0x080c, - 0x6f3e, 0x080c, 0x62c8, 0x080c, 0x7b85, 0x080c, 0x217b, 0x080c, - 0x7eaf, 0x080c, 0x757c, 0x080c, 0x1fb8, 0x080c, 0x20ec, 0x080c, - 0x2170, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880, - 0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833, - 0x0010, 0x0e04, 0x0911, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, - 0x0089, 0x2004, 0xd084, 0x190c, 0x1167, 0x2071, 0x1800, 0x7003, - 0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, 0x1168, 0x080c, - 0x4737, 0x080c, 0x30b9, 0x080c, 0x6faf, 0x080c, 0x6787, 0x080c, - 0x7bae, 0x080c, 0x292b, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941, - 0x0ad4, 0x093e, 0x0b94, 0x0d4a, 0x0d4a, 0x0d4a, 0x080c, 0x0db2, - 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086, 0x0001, - 0x1904, 0x0aa7, 0x080c, 0x0e5a, 0x080c, 0x6c53, 0x0150, 0x080c, - 0x6c76, 0x1590, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a, - 0x0458, 0x080c, 0x6b8a, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aa7, - 0x7090, 0x9086, 0x0028, 0x1904, 0x0aa7, 0x080c, 0x7b7c, 0x2001, - 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, - 0x9295, 0x5e2f, 0x7a2a, 0x2011, 0x6ad9, 0x080c, 0x7c4a, 0x2011, - 0x6acc, 0x080c, 0x7d1b, 0x2011, 0x588a, 0x080c, 0x7c4a, 0x2011, - 0x8030, 0x901e, 0x738e, 0x04a0, 0x080c, 0x5137, 0x2079, 0x0100, - 0x7844, 0x9005, 0x1904, 0x0aa7, 0x2011, 0x588a, 0x080c, 0x7c4a, - 0x2011, 0x6ad9, 0x080c, 0x7c4a, 0x2011, 0x6acc, 0x080c, 0x7d1b, - 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, - 0xfffb, 0x7842, 0x2001, 0x1975, 0x2004, 0x9005, 0x1140, 0x00c6, - 0x2061, 0x0100, 0x080c, 0x59d7, 0x00ce, 0x0804, 0x0aa7, 0x780f, - 0x006b, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, 0x2011, 0x8010, 0x73d0, - 0x2001, 0x1976, 0x2003, 0x0001, 0x080c, 0x27f1, 0x080c, 0x4672, - 0x7240, 0xc284, 0x7242, 0x2001, 0x180c, 0x200c, 0xc1ac, 0xc1cc, - 0x2102, 0x080c, 0x91bb, 0x2011, 0x0004, 0x080c, 0xb60b, 0x080c, - 0x61a1, 0x080c, 0x6c53, 0x1120, 0x080c, 0x2835, 0x02e0, 0x0400, - 0x080c, 0x59de, 0x0140, 0x708f, 0x0001, 0x70cb, 0x0000, 0x080c, - 0x5304, 0x0804, 0x0aa7, 0x080c, 0x5113, 0xd094, 0x0188, 0x2011, - 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x5117, 0xd0d4, 0x1118, - 0x080c, 0x2835, 0x1270, 0x2011, 0x180c, 0x2204, 0xc0bc, 0x00a8, - 0x080c, 0x5117, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd, - 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x629c, - 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, 0x2012, 0x080c, 0x6262, - 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, 0x7077, 0x0000, 0x080c, - 0x6c53, 0x1130, 0x70a8, 0x9005, 0x1168, 0x080c, 0xba40, 0x0050, - 0x080c, 0xba40, 0x70d4, 0xd09c, 0x1128, 0x70a8, 0x9005, 0x0110, - 0x080c, 0x59b4, 0x70df, 0x0000, 0x70db, 0x0000, 0x709f, 0x0000, - 0x080c, 0x283d, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012, - 0x72d4, 0x080c, 0x6c53, 0x1178, 0x9016, 0x0016, 0x080c, 0x25ee, - 0x2019, 0x193e, 0x211a, 0x001e, 0x7057, 0xffff, 0x705b, 0x00ef, - 0x707b, 0x0000, 0x0020, 0x2019, 0x193e, 0x201b, 0x0000, 0x2079, - 0x1853, 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72d6, 0x080c, 0x6c53, - 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, 0x0001, 0x080c, 0xb60b, - 0x70a3, 0x0000, 0x70a7, 0xffff, 0x7003, 0x0002, 0x2079, 0x0100, - 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, 0x080c, - 0x2c2b, 0x2011, 0x0005, 0x080c, 0x92ec, 0x080c, 0x8582, 0x080c, - 0x6c53, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x25ee, - 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a3, 0x0000, 0x70a7, - 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100, 0x7827, 0x0003, - 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, 0x2011, 0x0005, 0x080c, - 0x92ec, 0x080c, 0x8582, 0x080c, 0x6c53, 0x0148, 0x00c6, 0x2061, - 0x0100, 0x0016, 0x080c, 0x25ee, 0x61e2, 0x001e, 0x00ce, 0x00fe, - 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x6c53, 0x1118, 0x20a9, - 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x6c53, 0x1110, 0x900e, - 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, 0x9180, 0x1000, 0x2004, - 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x2f28, 0x8108, 0x1f04, - 0x0abb, 0x7077, 0x0000, 0x7078, 0x9084, 0x00ff, 0x707a, 0x70ab, - 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, - 0x7000, 0x9086, 0x0002, 0x1904, 0x0b91, 0x70a4, 0x9086, 0xffff, - 0x0130, 0x080c, 0x2c2b, 0x080c, 0x8582, 0x0804, 0x0b91, 0x70d4, - 0xd0ac, 0x1110, 0xd09c, 0x0558, 0xd084, 0x0548, 0x0006, 0x2001, - 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c, 0x0508, 0x080c, 0x2f8b, - 0x11d0, 0x70d8, 0x9086, 0xffff, 0x01b0, 0x080c, 0x2d9c, 0x080c, - 0x8582, 0x70d4, 0xd094, 0x1904, 0x0b91, 0x2011, 0x0001, 0x080c, - 0xbcec, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x2dd6, 0x080c, - 0x8582, 0x0804, 0x0b91, 0x70dc, 0x9005, 0x1904, 0x0b91, 0x70a0, - 0x9005, 0x1904, 0x0b91, 0x70d4, 0xd0a4, 0x0118, 0xd0b4, 0x0904, - 0x0b91, 0x080c, 0x6262, 0x1904, 0x0b91, 0x080c, 0x62b5, 0x1904, - 0x0b91, 0x080c, 0x629c, 0x01c0, 0x0156, 0x00c6, 0x20a9, 0x007f, - 0x900e, 0x0016, 0x080c, 0x5f7e, 0x1118, 0xb800, 0xd0ec, 0x1138, - 0x001e, 0x8108, 0x1f04, 0x0b31, 0x00ce, 0x015e, 0x0028, 0x001e, - 0x00ce, 0x015e, 0x0804, 0x0b91, 0x0006, 0x2001, 0x0103, 0x2003, - 0x006b, 0x000e, 0x2011, 0x1982, 0x080c, 0x0f5d, 0x2011, 0x199c, - 0x080c, 0x0f5d, 0x7030, 0xc08c, 0x7032, 0x7003, 0x0003, 0x70a7, - 0xffff, 0x080c, 0x0e3c, 0x9006, 0x080c, 0x247f, 0x080c, 0x2f8b, - 0x0118, 0x080c, 0x480f, 0x0050, 0x0036, 0x0046, 0x2019, 0xffff, - 0x2021, 0x0006, 0x080c, 0x4829, 0x004e, 0x003e, 0x00f6, 0x2079, - 0x0100, 0x080c, 0x6c76, 0x0150, 0x080c, 0x6c53, 0x7828, 0x0118, - 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x2001, - 0x19b7, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011, 0x0000, 0x080c, - 0x92ec, 0x2011, 0x0000, 0x080c, 0x92f6, 0x080c, 0x8582, 0x080c, - 0x865d, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, - 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c, 0xfffd, 0x7906, - 0x2009, 0x00f7, 0x080c, 0x599d, 0x7940, 0x918c, 0x0010, 0x7942, - 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, 0x0110, 0x7827, - 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, 0x1904, 0x0c21, - 0x2001, 0x1976, 0x2004, 0x9005, 0x1518, 0x080c, 0x28b8, 0x1148, - 0x2001, 0x0001, 0x080c, 0x2820, 0x2001, 0x0001, 0x080c, 0x2803, - 0x00b8, 0x080c, 0x28c0, 0x1138, 0x9006, 0x080c, 0x2820, 0x9006, - 0x080c, 0x2803, 0x0068, 0x080c, 0x28c8, 0x1d50, 0x2001, 0x1967, - 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x261a, 0x0804, 0x0d01, - 0x080c, 0x6c64, 0x0148, 0x080c, 0x6c76, 0x1118, 0x080c, 0x6f39, - 0x0050, 0x080c, 0x6c5b, 0x0dd0, 0x080c, 0x6f34, 0x080c, 0x6f2a, - 0x080c, 0x6b8a, 0x0058, 0x080c, 0x6c53, 0x0140, 0x2009, 0x00f8, - 0x080c, 0x599d, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x09c4, - 0x7820, 0xd09c, 0x1138, 0x080c, 0x6c53, 0x0138, 0x7824, 0xd0ac, - 0x1904, 0x0d06, 0x1f04, 0x0c00, 0x0070, 0x7824, 0x080c, 0x6c6d, - 0x0118, 0xd0ac, 0x1904, 0x0d06, 0x9084, 0x1800, 0x0d98, 0x7003, - 0x0001, 0x0804, 0x0d06, 0x2001, 0x0001, 0x080c, 0x247f, 0x0804, - 0x0d19, 0x2001, 0x1976, 0x2004, 0x9005, 0x1518, 0x080c, 0x28b8, - 0x1148, 0x2001, 0x0001, 0x080c, 0x2820, 0x2001, 0x0001, 0x080c, - 0x2803, 0x00b8, 0x080c, 0x28c0, 0x1138, 0x9006, 0x080c, 0x2820, - 0x9006, 0x080c, 0x2803, 0x0068, 0x080c, 0x28c8, 0x1d50, 0x2001, - 0x1967, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x261a, 0x0804, - 0x0d01, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938, 0x7850, 0x9084, - 0xfbcf, 0x7852, 0x080c, 0x28d0, 0x9085, 0x2000, 0x7852, 0x793a, - 0x20a9, 0x0046, 0x1d04, 0x0c5a, 0x080c, 0x7cfb, 0x1f04, 0x0c5a, - 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, 0x793a, 0x080c, - 0x6c64, 0x0148, 0x080c, 0x6c76, 0x1118, 0x080c, 0x6f39, 0x0050, - 0x080c, 0x6c5b, 0x0dd0, 0x080c, 0x6f34, 0x080c, 0x6f2a, 0x080c, - 0x6b8a, 0x0020, 0x2009, 0x00f8, 0x080c, 0x599d, 0x20a9, 0x0028, - 0xa001, 0x1f04, 0x0c80, 0x7850, 0x9085, 0x1400, 0x7852, 0x080c, - 0x6c53, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678, - 0x2019, 0xea60, 0x0d0c, 0x7cfb, 0x7820, 0xd09c, 0x1588, 0x080c, - 0x6c53, 0x0904, 0x0ce6, 0x7824, 0xd0ac, 0x1904, 0x0d06, 0x080c, - 0x6c76, 0x1530, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e, - 0x7827, 0x1800, 0x080c, 0x28d0, 0x7824, 0x9084, 0x1800, 0x1168, - 0x9484, 0x0fff, 0x1140, 0x2001, 0x180f, 0x2004, 0x9084, 0x9000, - 0x0110, 0x080c, 0x0d27, 0x8421, 0x1158, 0x1d04, 0x0cc1, 0x080c, - 0x7cfb, 0x080c, 0x6f34, 0x080c, 0x6f2a, 0x7003, 0x0001, 0x04f0, - 0x8319, 0x1940, 0x1d04, 0x0cce, 0x080c, 0x7cfb, 0x2009, 0x196a, - 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b, 0x000a, - 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x28b1, 0x7924, 0x080c, - 0x28d0, 0xd19c, 0x0110, 0x080c, 0x27f1, 0x00d8, 0x080c, 0x6c64, - 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x6c2d, 0x7003, 0x0001, - 0x00a8, 0x7827, 0x1800, 0x080c, 0x28d0, 0x7824, 0x080c, 0x6c6d, - 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003, 0x0001, - 0x0028, 0x2001, 0x0001, 0x080c, 0x247f, 0x0078, 0x2009, 0x180c, - 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906, 0x7827, - 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085, 0x0400, - 0x7852, 0x2001, 0x1976, 0x2003, 0x0000, 0x9006, 0x78f2, 0x015e, - 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, - 0x0016, 0x0036, 0x0046, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, - 0x0156, 0x0069, 0x0d0c, 0x7cfb, 0x015e, 0x00fe, 0x00ee, 0x00de, - 0x00ce, 0x00be, 0x004e, 0x003e, 0x001e, 0x000e, 0x0005, 0x00e6, - 0x2071, 0x1894, 0x7004, 0x9086, 0x0001, 0x1110, 0x080c, 0x30b9, - 0x00ee, 0x0005, 0x0005, 0x2a70, 0x2061, 0x197a, 0x2063, 0x0003, - 0x6007, 0x0002, 0x600b, 0x0012, 0x600f, 0x0117, 0x2001, 0x194d, - 0x900e, 0x2102, 0x718e, 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, - 0x0218, 0x7057, 0xffff, 0x0008, 0x7156, 0x705f, 0xffff, 0x7176, - 0x717a, 0x080c, 0xba40, 0x70e3, 0x00c0, 0x2061, 0x193d, 0x6003, - 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013, 0x00ff, - 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0, 0x2061, 0x1945, 0x6003, - 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, 0x6013, 0x00ff, 0x6116, - 0x601b, 0x0001, 0x611e, 0x2061, 0x1958, 0x6003, 0x514c, 0x6007, - 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001, 0x182a, 0x2102, - 0x0005, 0x9016, 0x080c, 0x5f7e, 0x1178, 0xb804, 0x90c4, 0x00ff, - 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, 0x98c6, 0x0600, 0x1120, - 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, 0x9186, 0x0800, 0x1d50, - 0x2208, 0x0005, 0x2091, 0x8000, 0x0e04, 0x0db4, 0x0006, 0x0016, - 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e, 0x7882, 0x7836, - 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886, 0x3900, 0x789a, - 0x7833, 0x0012, 0x2091, 0x5000, 0x0156, 0x00d6, 0x0036, 0x0026, - 0x2079, 0x0300, 0x2069, 0x1a66, 0x7a18, 0x226a, 0x8d68, 0x7a1c, - 0x226a, 0x782c, 0x2019, 0x1a73, 0x201a, 0x2019, 0x1a76, 0x9016, - 0x7808, 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386, - 0x1a8b, 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead, - 0x2019, 0x1a74, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000, - 0x2069, 0x1a46, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, - 0x8d68, 0x8318, 0x1f04, 0x0dfd, 0x002e, 0x003e, 0x00de, 0x015e, - 0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x0180, 0x2001, 0x19e8, 0x2004, 0x9005, 0x0128, - 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, - 0x0002, 0x2003, 0x1001, 0x080c, 0x5122, 0x1108, 0x0011, 0x0cd8, - 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c, 0x0eb4, 0x20a9, - 0x0900, 0x080c, 0x0ed5, 0x2011, 0x0040, 0x080c, 0x0eb4, 0x20a9, - 0x0900, 0x080c, 0x0ed5, 0x0c78, 0x0026, 0x080c, 0x0ec1, 0x1118, - 0x2011, 0x0040, 0x0098, 0x2011, 0x010e, 0x2214, 0x9294, 0x0007, - 0x9296, 0x0007, 0x0118, 0x2011, 0xa880, 0x0010, 0x2011, 0x6840, - 0xd0e4, 0x70e7, 0x0000, 0x1128, 0x70e7, 0x0fa0, 0x080c, 0x0ec6, - 0x002e, 0x0005, 0x0026, 0x080c, 0x0ec1, 0x0128, 0xd0a4, 0x1138, - 0x2011, 0xcdd5, 0x0010, 0x2011, 0x0080, 0x080c, 0x0ec6, 0x002e, - 0x0005, 0x0026, 0x70e7, 0x0000, 0x080c, 0x0ec1, 0x1148, 0x080c, - 0x28c8, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011, 0x8282, 0x0040, - 0x080c, 0x28c8, 0x1118, 0x2011, 0xcdc5, 0x0010, 0x2011, 0xcac2, - 0x080c, 0x0ec6, 0x002e, 0x0005, 0x00e6, 0x0006, 0x2071, 0x1800, - 0xd0b4, 0x70e0, 0x1110, 0xc0e4, 0x0048, 0x0006, 0x3b00, 0x9084, - 0xff3f, 0x20d8, 0x000e, 0x70e7, 0x0000, 0xc0e5, 0x0079, 0x000e, - 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0xd0e4, 0x70e0, 0x1110, - 0xc0dc, 0x0008, 0xc0dd, 0x0011, 0x00ee, 0x0005, 0x70e2, 0x7000, - 0x9084, 0x0007, 0x000b, 0x0005, 0x0e83, 0x0e5a, 0x0e5a, 0x0e3c, - 0x0e69, 0x0e5a, 0x0e5a, 0x0e69, 0x0016, 0x3b08, 0x3a00, 0x9104, - 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0, 0x001e, - 0x0005, 0x2001, 0x1838, 0x2004, 0xd0dc, 0x0005, 0x9e86, 0x1800, - 0x190c, 0x0db2, 0x70e0, 0xd0e4, 0x0108, 0xc2e5, 0x72e2, 0xd0e4, - 0x1118, 0x9294, 0x00c0, 0x0c01, 0x0005, 0x1d04, 0x0ed5, 0x2091, - 0x6000, 0x1f04, 0x0ed5, 0x0005, 0x890e, 0x810e, 0x810f, 0x9194, - 0x003f, 0x918c, 0xffc0, 0x0005, 0x0006, 0x2200, 0x914d, 0x894f, - 0x894d, 0x894d, 0x000e, 0x000e, 0x0005, 0x01d6, 0x0146, 0x0036, - 0x0096, 0x2061, 0x1883, 0x600b, 0x0000, 0x600f, 0x0000, 0x6003, - 0x0000, 0x6007, 0x0000, 0x2009, 0xffc0, 0x2105, 0x0006, 0x2001, - 0xaaaa, 0x200f, 0x2019, 0x5555, 0x9016, 0x2049, 0x0bff, 0xab02, - 0xa001, 0xa001, 0xa800, 0x9306, 0x1138, 0x2105, 0x9306, 0x0120, - 0x8210, 0x99c8, 0x0400, 0x0c98, 0x000e, 0x200f, 0x2001, 0x1893, - 0x928a, 0x000e, 0x1638, 0x928a, 0x0006, 0x2011, 0x0006, 0x1210, - 0x2011, 0x0000, 0x2202, 0x9006, 0x2008, 0x82ff, 0x01b0, 0x8200, - 0x600a, 0x600f, 0xffff, 0x6003, 0x0002, 0x6007, 0x0000, 0x0026, - 0x2019, 0x0010, 0x9280, 0x0001, 0x20e8, 0x21a0, 0x21a8, 0x4104, - 0x8319, 0x1de0, 0x8211, 0x1da0, 0x002e, 0x009e, 0x003e, 0x014e, - 0x01de, 0x0005, 0x2011, 0x000e, 0x08e8, 0x0016, 0x0026, 0x0096, - 0x3348, 0x080c, 0x0edc, 0x2100, 0x9300, 0x2098, 0x22e0, 0x009e, - 0x002e, 0x001e, 0x0036, 0x3518, 0x20a9, 0x0001, 0x4002, 0x8007, - 0x4004, 0x8319, 0x1dd8, 0x003e, 0x0005, 0x20e9, 0x0001, 0x71b0, - 0x81ff, 0x11c0, 0x9006, 0x2009, 0x0200, 0x20a9, 0x0002, 0x9298, - 0x0018, 0x23a0, 0x4001, 0x2009, 0x0700, 0x20a9, 0x0002, 0x9298, - 0x0008, 0x23a0, 0x4001, 0x7074, 0x8007, 0x7178, 0x810f, 0x20a9, - 0x0002, 0x4001, 0x9298, 0x000c, 0x23a0, 0x900e, 0x080c, 0x0d99, - 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x4001, 0x0005, 0x89ff, - 0x0140, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x1007, 0x009e, - 0x0cb0, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x1080, 0x090c, - 0x0db2, 0x00ee, 0x0005, 0x0086, 0x00e6, 0x0006, 0x0026, 0x0036, - 0x0126, 0x2091, 0x8000, 0x00c9, 0x2071, 0x1800, 0x73b8, 0x702c, - 0x9016, 0x9045, 0x0158, 0x8210, 0x9906, 0x090c, 0x0db2, 0x2300, - 0x9202, 0x0120, 0x1a0c, 0x0db2, 0xa000, 0x0c98, 0x012e, 0x003e, - 0x002e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x0086, 0x00e6, 0x0006, - 0x0126, 0x2091, 0x8000, 0x2071, 0x1906, 0x7010, 0x9005, 0x0140, - 0x7018, 0x9045, 0x0128, 0x9906, 0x090c, 0x0db2, 0xa000, 0x0cc8, - 0x012e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x00e6, 0x2071, 0x1800, - 0x0126, 0x2091, 0x8000, 0x70b8, 0x8001, 0x0270, 0x70ba, 0x702c, - 0x2048, 0x9085, 0x0001, 0xa800, 0x702e, 0xa803, 0x0000, 0xa807, - 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, - 0x2091, 0x8000, 0x2071, 0x1800, 0x70b8, 0x90ca, 0x0040, 0x0268, - 0x8001, 0x70ba, 0x702c, 0x2048, 0xa800, 0x702e, 0xa803, 0x0000, - 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6, - 0x0126, 0x2091, 0x8000, 0x0016, 0x890e, 0x810e, 0x810f, 0x9184, - 0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6, - 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, - 0x702e, 0x70b8, 0x8000, 0x70ba, 0x080c, 0x7b7c, 0x012e, 0x00ee, - 0x0005, 0x2071, 0x1800, 0x9026, 0x2009, 0x0000, 0x2049, 0x0400, - 0x2900, 0x702e, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, - 0x8420, 0x9886, 0x0440, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, - 0x2071, 0x1883, 0x7000, 0x9005, 0x11a0, 0x2001, 0x0534, 0xa802, - 0x2048, 0x2009, 0x4d00, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, - 0x0001, 0x8420, 0x9886, 0x0800, 0x0120, 0x2848, 0x9188, 0x0040, - 0x0c90, 0x2071, 0x1883, 0x7104, 0x7200, 0x82ff, 0x01d0, 0x7308, - 0x8318, 0x831f, 0x831b, 0x831b, 0x7312, 0x8319, 0x2001, 0x0800, - 0xa802, 0x2048, 0x8900, 0xa802, 0x2040, 0xa95e, 0xaa62, 0x8420, - 0x2300, 0x9906, 0x0130, 0x2848, 0x9188, 0x0040, 0x9291, 0x0000, - 0x0c88, 0xa803, 0x0000, 0x2071, 0x1800, 0x74b6, 0x74ba, 0x0005, - 0x00e6, 0x0016, 0x9984, 0xfc00, 0x01e8, 0x908c, 0xf800, 0x1168, - 0x9982, 0x0400, 0x02b8, 0x9982, 0x0440, 0x0278, 0x9982, 0x0534, - 0x0288, 0x9982, 0x0800, 0x1270, 0x0040, 0x9982, 0x0800, 0x0250, - 0x2071, 0x1883, 0x7010, 0x9902, 0x1228, 0x9085, 0x0001, 0x001e, - 0x00ee, 0x0005, 0x9006, 0x0cd8, 0x00e6, 0x2071, 0x19e7, 0x7007, - 0x0000, 0x9006, 0x701e, 0x7022, 0x7002, 0x2071, 0x0000, 0x7010, - 0x9085, 0x8004, 0x7012, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, - 0x00e6, 0xa06f, 0x0000, 0x2071, 0x19e7, 0x701c, 0x9088, 0x19f1, - 0x280a, 0x8000, 0x9084, 0x003f, 0x701e, 0x7120, 0x9106, 0x090c, - 0x0db2, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x00a9, - 0x00fe, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, - 0x2071, 0x19e7, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, - 0x0021, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x7004, 0x9086, 0x0000, - 0x1110, 0x7007, 0x0006, 0x7000, 0x0002, 0x10f7, 0x10f5, 0x10f5, - 0x10f5, 0x126b, 0x126b, 0x126b, 0x126b, 0x080c, 0x0db2, 0x701c, - 0x7120, 0x9106, 0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc, - 0x1110, 0x7007, 0x0000, 0x0005, 0x0096, 0x9180, 0x19f1, 0x2004, - 0x700a, 0x2048, 0x8108, 0x918c, 0x003f, 0x7122, 0x782b, 0x0026, - 0xa88c, 0x7802, 0xa890, 0x7806, 0xa894, 0x780a, 0xa898, 0x780e, - 0xa878, 0x700e, 0xa870, 0x7016, 0xa874, 0x701a, 0xa868, 0x009e, - 0xd084, 0x0120, 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, - 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, - 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812, - 0x782b, 0x0020, 0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, - 0x0026, 0x0136, 0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098, - 0x20e9, 0x0000, 0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011, - 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8, - 0x4006, 0x8203, 0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b, - 0x0001, 0x015e, 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x2009, - 0x19e7, 0x2104, 0xc095, 0x200a, 0x080c, 0x10d4, 0x0005, 0x0016, - 0x00e6, 0x2071, 0x19e7, 0x00f6, 0x2079, 0x0080, 0x792c, 0x782b, - 0x0002, 0xd1fc, 0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, - 0x00ee, 0x001e, 0x0005, 0x10e5, 0x118a, 0x11be, 0x0db2, 0x0db2, - 0x1277, 0x0db2, 0x918c, 0x0700, 0x1550, 0x0136, 0x0146, 0x0156, - 0x7014, 0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, - 0x782b, 0x0040, 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e, - 0x014e, 0x013e, 0x700c, 0x9005, 0x0578, 0x7800, 0x7802, 0x7804, - 0x7806, 0x080c, 0x112a, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, - 0x0100, 0x009e, 0x7007, 0x0000, 0x080c, 0x10e5, 0x0005, 0x7008, - 0x0096, 0x2048, 0xa86f, 0x0200, 0x009e, 0x0ca0, 0x918c, 0x0700, - 0x1150, 0x700c, 0x9005, 0x0180, 0x7800, 0x7802, 0x7804, 0x7806, - 0x080c, 0x113f, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0200, - 0x009e, 0x7007, 0x0000, 0x0080, 0x0096, 0x7008, 0x2048, 0x7800, - 0xa88e, 0x7804, 0xa892, 0x7808, 0xa896, 0x780c, 0xa89a, 0xa86f, - 0x0100, 0x009e, 0x7007, 0x0000, 0x0096, 0x00d6, 0x7008, 0x2048, - 0x2001, 0x18af, 0x2004, 0x9906, 0x1128, 0xa89c, 0x080f, 0x00de, - 0x009e, 0x00a0, 0x00de, 0x009e, 0x0096, 0x00d6, 0x7008, 0x2048, - 0x0081, 0x0150, 0xa89c, 0x0086, 0x2940, 0x080f, 0x008e, 0x00de, - 0x009e, 0x080c, 0x10d4, 0x0005, 0x00de, 0x009e, 0x080c, 0x10d4, - 0x0005, 0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0, 0x904d, 0x090c, - 0x0db2, 0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b, 0x0030, 0xa883, - 0x0000, 0xa897, 0x4002, 0x080c, 0x6529, 0xa09f, 0x0000, 0xa0a3, - 0x0000, 0x2848, 0x080c, 0x1007, 0x009e, 0x0005, 0x00a6, 0xa0a0, - 0x904d, 0x090c, 0x0db2, 0xa06c, 0x908e, 0x0100, 0x0128, 0xa87b, - 0x0001, 0xa883, 0x0000, 0x00c0, 0xa80c, 0x2050, 0xb004, 0x9005, - 0x0198, 0xa80e, 0x2050, 0x8006, 0x8006, 0x8007, 0x908c, 0x003f, - 0x9084, 0xffc0, 0x9080, 0x0002, 0xa076, 0xa172, 0xb000, 0xa07a, - 0x2810, 0x080c, 0x10b5, 0x00e8, 0xa97c, 0xa894, 0x0016, 0x0006, - 0x080c, 0x6529, 0x000e, 0x001e, 0xd1fc, 0x1138, 0xd1f4, 0x0128, - 0x00c6, 0x2060, 0x080c, 0x99d6, 0x00ce, 0x7008, 0x2048, 0xa89f, - 0x0000, 0xa8a3, 0x0000, 0x080c, 0x1007, 0x7007, 0x0000, 0x080c, - 0x10d4, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001, - 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e, 0x0005, 0x7007, - 0x0000, 0x080c, 0x10e5, 0x0005, 0x0126, 0x2091, 0x2200, 0x2079, - 0x0300, 0x2071, 0x1a31, 0x7003, 0x0000, 0x78bf, 0x00f6, 0x00c1, - 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9, 0x01ed, 0x2061, 0xd372, - 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, 0x7916, 0x1f04, 0x1290, - 0x7807, 0x0001, 0x7803, 0x0000, 0x7803, 0x0001, 0x012e, 0x0005, - 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c, 0x0110, 0x7820, 0x0cd8, - 0x2001, 0x1a32, 0x2003, 0x0000, 0x78ab, 0x0004, 0x78ac, 0xd0ac, - 0x1de8, 0x78ab, 0x0002, 0x7807, 0x0001, 0x7827, 0x0030, 0x782b, - 0x0400, 0x7827, 0x0031, 0x782b, 0x1a46, 0x781f, 0xff00, 0x781b, - 0xff00, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, - 0x2061, 0x1a46, 0x602f, 0x1cd0, 0x2001, 0x1818, 0x2004, 0x9082, - 0x1cd0, 0x6032, 0x603b, 0x1da2, 0x00ce, 0x0005, 0x0126, 0x2091, - 0x2200, 0x7808, 0xd09c, 0x0158, 0x7820, 0x908c, 0xf000, 0x1588, - 0x908a, 0x0021, 0x1a0c, 0x0db2, 0x0043, 0x012e, 0x0005, 0x9084, - 0x0070, 0x190c, 0x0db2, 0x012e, 0x0005, 0x130f, 0x130f, 0x1318, - 0x131d, 0x1321, 0x1326, 0x134e, 0x1352, 0x1360, 0x1364, 0x130f, - 0x13ee, 0x13f2, 0x1455, 0x130f, 0x130f, 0x130f, 0x130f, 0x130f, - 0x130f, 0x130f, 0x130f, 0x130f, 0x130f, 0x130f, 0x130f, 0x130f, - 0x1328, 0x130f, 0x130f, 0x130f, 0x130f, 0x130f, 0x130f, 0x080c, - 0x0db2, 0x2009, 0x0048, 0x2060, 0x080c, 0x9a50, 0x012e, 0x0005, - 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, - 0x0005, 0x080c, 0x145c, 0x080c, 0x1518, 0x0005, 0x080c, 0x0db2, - 0x080c, 0x145c, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, - 0x009e, 0x2009, 0x0048, 0x080c, 0x9a50, 0x2001, 0x015d, 0x2003, - 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, - 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, - 0x1461, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, - 0x7006, 0x0005, 0x080c, 0x145c, 0x2060, 0x6014, 0x0096, 0x2048, - 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0x9a50, 0x0005, - 0x080c, 0x145c, 0x080c, 0x0db2, 0x080c, 0x145c, 0x080c, 0x13d9, - 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0540, 0x7827, 0x0015, 0x7828, - 0x782b, 0x0000, 0x9065, 0x0138, 0x2001, 0x020d, 0x2003, 0x0050, - 0x2003, 0x0020, 0x0400, 0x7004, 0x9005, 0x1180, 0x78ab, 0x0004, - 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc, 0x090c, 0x0db2, 0x2001, - 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0480, 0x78ab, 0x0004, - 0x7803, 0x0001, 0x080c, 0x13f2, 0x0005, 0x7828, 0x782b, 0x0000, - 0x9065, 0x090c, 0x0db2, 0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, - 0x0700, 0x0198, 0x080c, 0x763f, 0x080c, 0x1872, 0x080c, 0xb5fb, - 0x0158, 0xa9ac, 0xa936, 0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, - 0xffff, 0xa880, 0xc0bd, 0xa882, 0x0005, 0x6010, 0x00b6, 0x2058, - 0xb800, 0x00be, 0xd0bc, 0x6024, 0x190c, 0xb9d9, 0x2029, 0x00c8, - 0x8529, 0x0128, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, - 0x080c, 0xd31b, 0xd5a4, 0x1118, 0x080c, 0x1461, 0x0005, 0x080c, - 0x763f, 0x080c, 0x1872, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001, - 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, - 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c, - 0x14d2, 0x00fe, 0x007e, 0x006e, 0x001e, 0x0005, 0x7004, 0xc09d, - 0x7006, 0x0005, 0x7104, 0x9184, 0x0004, 0x190c, 0x0db2, 0xd184, - 0x1189, 0xd19c, 0x0158, 0xc19c, 0x7106, 0x2001, 0x020d, 0x2003, - 0x0050, 0x2003, 0x0020, 0x080c, 0x1461, 0x0005, 0x81ff, 0x190c, - 0x0db2, 0x0005, 0xc184, 0xd1b4, 0xc1b4, 0x7106, 0x0016, 0x00e6, - 0x15e0, 0x2071, 0x0200, 0x080c, 0x150c, 0x6014, 0x9005, 0x05a8, - 0x0096, 0x2048, 0xa864, 0x009e, 0x9084, 0x00ff, 0x908e, 0x0029, - 0x0160, 0x908e, 0x0048, 0x1548, 0x601c, 0xd084, 0x11d8, 0x00f6, - 0x2c78, 0x080c, 0x1582, 0x00fe, 0x00a8, 0x00f6, 0x2c78, 0x080c, - 0x16b6, 0x00fe, 0x2009, 0x01f4, 0x8109, 0x0160, 0x2001, 0x0201, - 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, - 0x0401, 0x0040, 0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x12a0, + 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f18, 0x080c, + 0x5e06, 0x080c, 0xab01, 0x080c, 0x10cf, 0x080c, 0x12e4, 0x080c, + 0x1afa, 0x080c, 0x0d69, 0x080c, 0x1054, 0x080c, 0x32d0, 0x080c, + 0x7479, 0x080c, 0x675b, 0x080c, 0x8485, 0x080c, 0x81bc, 0x080c, + 0x232a, 0x080c, 0x8d27, 0x080c, 0x7b3e, 0x080c, 0x2163, 0x080c, + 0x2297, 0x080c, 0x231f, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, + 0x091f, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, + 0x4000, 0x7833, 0x0010, 0x0e04, 0x0913, 0x2091, 0x5000, 0x2091, + 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1192, 0x2071, + 0x1800, 0x7003, 0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, + 0x1178, 0x080c, 0x49c0, 0x080c, 0x32f7, 0x080c, 0x74ea, 0x080c, + 0x6c9c, 0x080c, 0x8563, 0x080c, 0x81e5, 0x080c, 0x2b45, 0x0c58, + 0x000b, 0x0c78, 0x0944, 0x0945, 0x0ae7, 0x0942, 0x0bae, 0x0d68, + 0x0d68, 0x0d68, 0x080c, 0x0dd5, 0x0005, 0x0126, 0x00f6, 0x2091, + 0x8000, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aba, 0x080c, 0x54c6, + 0x1130, 0x0026, 0x2011, 0x0080, 0x080c, 0x0edf, 0x002e, 0x080c, + 0x717d, 0x0150, 0x080c, 0x71a0, 0x15a0, 0x2079, 0x0100, 0x7828, + 0x9085, 0x1800, 0x782a, 0x0468, 0x080c, 0x70af, 0x7000, 0x9086, + 0x0001, 0x1904, 0x0aba, 0x7098, 0x9086, 0x0028, 0x1904, 0x0aba, + 0x080c, 0x81b4, 0x080c, 0x81a6, 0x2001, 0x0161, 0x2003, 0x0001, + 0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, + 0x2011, 0x7013, 0x080c, 0x8285, 0x2011, 0x7006, 0x080c, 0x835c, + 0x2011, 0x5c61, 0x080c, 0x8285, 0x2011, 0x8030, 0x901e, 0x7396, + 0x04d0, 0x080c, 0x550e, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, + 0x0aba, 0x2011, 0x5c61, 0x080c, 0x8285, 0x2011, 0x7013, 0x080c, + 0x8285, 0x2011, 0x7006, 0x080c, 0x835c, 0x2001, 0x0265, 0x2001, + 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001, + 0x19a4, 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, + 0x5dae, 0x00ce, 0x0804, 0x0aba, 0x780f, 0x006b, 0x7a28, 0x080c, + 0x7185, 0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a, + 0x2011, 0x8010, 0x73d8, 0x2001, 0x19a5, 0x2003, 0x0001, 0x080c, + 0x2a0b, 0x080c, 0x48fb, 0x7248, 0xc284, 0x724a, 0x2001, 0x180c, + 0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0xa213, 0x2011, 0x0004, + 0x080c, 0xc835, 0x080c, 0x65f0, 0x080c, 0x717d, 0x1120, 0x080c, + 0x2a4f, 0x02e0, 0x0400, 0x080c, 0x5db5, 0x0140, 0x7097, 0x0001, + 0x70d3, 0x0000, 0x080c, 0x56db, 0x0804, 0x0aba, 0x080c, 0x54b7, + 0xd094, 0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, + 0x54bb, 0xd0d4, 0x1118, 0x080c, 0x2a4f, 0x1270, 0x2011, 0x180c, + 0x2204, 0xc0bc, 0x00a8, 0x080c, 0x54bb, 0xd0d4, 0x1db8, 0x2011, + 0x180c, 0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd, + 0x2012, 0x080c, 0x672f, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, + 0x2012, 0x080c, 0x66f5, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, + 0x707f, 0x0000, 0x080c, 0x717d, 0x1130, 0x70b0, 0x9005, 0x1168, + 0x080c, 0xcc6a, 0x0050, 0x080c, 0xcc6a, 0x70dc, 0xd09c, 0x1128, + 0x70b0, 0x9005, 0x0110, 0x080c, 0x5d8b, 0x70e7, 0x0000, 0x70e3, + 0x0000, 0x70a7, 0x0000, 0x080c, 0x2a57, 0x0228, 0x2011, 0x0101, + 0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x717d, 0x1178, 0x9016, + 0x0016, 0x080c, 0x2808, 0x2019, 0x196d, 0x211a, 0x001e, 0x705f, + 0xffff, 0x7063, 0x00ef, 0x7083, 0x0000, 0x0020, 0x2019, 0x196d, + 0x201b, 0x0000, 0x2079, 0x1847, 0x7804, 0xd0ac, 0x0108, 0xc295, + 0x72de, 0x080c, 0x717d, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, + 0x0001, 0x080c, 0xc835, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, + 0x0002, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, + 0x782a, 0x00fe, 0x080c, 0x2e48, 0x2011, 0x0005, 0x080c, 0xa349, + 0x080c, 0x941c, 0x080c, 0x717d, 0x0148, 0x00c6, 0x2061, 0x0100, + 0x0016, 0x080c, 0x2808, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, + 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, + 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, + 0x2011, 0x0005, 0x080c, 0xa349, 0x080c, 0x941c, 0x080c, 0x717d, + 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2808, 0x61e2, + 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, + 0x717d, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, + 0x717d, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, + 0x9180, 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, + 0x3166, 0x8108, 0x1f04, 0x0ace, 0x707f, 0x0000, 0x7080, 0x9084, + 0x00ff, 0x7082, 0x70b3, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6, + 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0bab, + 0x70ac, 0x9086, 0xffff, 0x0130, 0x080c, 0x2e48, 0x080c, 0x941c, + 0x0804, 0x0bab, 0x70dc, 0xd0ac, 0x1110, 0xd09c, 0x0558, 0xd084, + 0x0548, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c, + 0x0508, 0x080c, 0x31c9, 0x11d0, 0x70e0, 0x9086, 0xffff, 0x01b0, + 0x080c, 0x2fda, 0x080c, 0x941c, 0x70dc, 0xd094, 0x1904, 0x0bab, + 0x2011, 0x0001, 0x080c, 0xcf18, 0x0110, 0x2011, 0x0003, 0x901e, + 0x080c, 0x3014, 0x080c, 0x941c, 0x0804, 0x0bab, 0x70e4, 0x9005, + 0x1904, 0x0bab, 0x70a8, 0x9005, 0x1904, 0x0bab, 0x70dc, 0xd0a4, + 0x0118, 0xd0b4, 0x0904, 0x0bab, 0x080c, 0x66f5, 0x1904, 0x0bab, + 0x080c, 0x6748, 0x1904, 0x0bab, 0x080c, 0x672f, 0x01c0, 0x0156, + 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x63cd, 0x1118, + 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b44, 0x00ce, + 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0bab, 0x0006, + 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0x2011, 0x19b1, 0x080c, + 0x0f88, 0x2011, 0x19cb, 0x080c, 0x0f88, 0x7030, 0xc08c, 0x7032, + 0x7003, 0x0003, 0x70af, 0xffff, 0x080c, 0x54c6, 0x1130, 0x0026, + 0x2011, 0x0040, 0x080c, 0x0edf, 0x002e, 0x9006, 0x080c, 0x269c, + 0x080c, 0x31c9, 0x0118, 0x080c, 0x4a98, 0x0050, 0x0036, 0x0046, + 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4ab2, 0x004e, 0x003e, + 0x00f6, 0x2079, 0x0100, 0x080c, 0x71a0, 0x0150, 0x080c, 0x717d, + 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, + 0x00fe, 0x2001, 0x19e6, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011, + 0x0000, 0x080c, 0xa349, 0x2011, 0x0000, 0x080c, 0xa353, 0x080c, + 0x941c, 0x080c, 0x9548, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046, + 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c, + 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5d74, 0x7940, 0x918c, + 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, + 0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, + 0x1904, 0x0c3b, 0x2001, 0x19a5, 0x2004, 0x9005, 0x1518, 0x080c, + 0x2ad2, 0x1148, 0x2001, 0x0001, 0x080c, 0x2a3a, 0x2001, 0x0001, + 0x080c, 0x2a1d, 0x00b8, 0x080c, 0x2ada, 0x1138, 0x9006, 0x080c, + 0x2a3a, 0x9006, 0x080c, 0x2a1d, 0x0068, 0x080c, 0x2ae2, 0x1d50, + 0x2001, 0x1996, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2834, + 0x0804, 0x0d1a, 0x080c, 0x718e, 0x0148, 0x080c, 0x71a0, 0x1118, + 0x080c, 0x7474, 0x0050, 0x080c, 0x7185, 0x0dd0, 0x080c, 0x746f, + 0x080c, 0x7465, 0x080c, 0x70af, 0x0058, 0x080c, 0x717d, 0x0140, + 0x2009, 0x00f8, 0x080c, 0x5d74, 0x7843, 0x0090, 0x7843, 0x0010, + 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x717d, 0x0138, + 0x7824, 0xd0ac, 0x1904, 0x0d1f, 0x1f04, 0x0c1a, 0x0070, 0x7824, + 0x080c, 0x7197, 0x0118, 0xd0ac, 0x1904, 0x0d1f, 0x9084, 0x1800, + 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d1f, 0x2001, 0x0001, 0x080c, + 0x269c, 0x0804, 0x0d32, 0x2001, 0x19a5, 0x2004, 0x9005, 0x1518, + 0x080c, 0x2ad2, 0x1148, 0x2001, 0x0001, 0x080c, 0x2a3a, 0x2001, + 0x0001, 0x080c, 0x2a1d, 0x00b8, 0x080c, 0x2ada, 0x1138, 0x9006, + 0x080c, 0x2a3a, 0x9006, 0x080c, 0x2a1d, 0x0068, 0x080c, 0x2ae2, + 0x1d50, 0x2001, 0x1996, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, + 0x2834, 0x0804, 0x0d1a, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938, + 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2aea, 0x9085, 0x2000, + 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c74, 0x080c, 0x833c, + 0x1f04, 0x0c74, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, + 0x793a, 0x080c, 0x718e, 0x0148, 0x080c, 0x71a0, 0x1118, 0x080c, + 0x7474, 0x0050, 0x080c, 0x7185, 0x0dd0, 0x080c, 0x746f, 0x080c, + 0x7465, 0x080c, 0x70af, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5d74, + 0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c9a, 0x7850, 0x9085, 0x1400, + 0x7852, 0x080c, 0x717d, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, + 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x833c, 0x7820, 0xd09c, + 0x1580, 0x080c, 0x717d, 0x0904, 0x0cff, 0x7824, 0xd0ac, 0x1904, + 0x0d1f, 0x080c, 0x71a0, 0x1528, 0x0046, 0x2021, 0x0320, 0x8421, + 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2aea, 0x7824, 0x9084, + 0x1800, 0x1160, 0x9484, 0x0fff, 0x1138, 0x2001, 0x1810, 0x2004, + 0xd0fc, 0x0110, 0x080c, 0x0d45, 0x8421, 0x1158, 0x1d04, 0x0cda, + 0x080c, 0x833c, 0x080c, 0x746f, 0x080c, 0x7465, 0x7003, 0x0001, + 0x04f0, 0x8319, 0x1948, 0x1d04, 0x0ce7, 0x080c, 0x833c, 0x2009, + 0x1999, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b, + 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2acb, 0x7924, + 0x080c, 0x2aea, 0xd19c, 0x0110, 0x080c, 0x2a0b, 0x00d8, 0x080c, + 0x718e, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x7155, 0x7003, + 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2aea, 0x7824, 0x080c, + 0x7197, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003, + 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x269c, 0x0078, 0x2009, + 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906, + 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085, + 0x0400, 0x7852, 0x2001, 0x19a5, 0x2003, 0x0000, 0x9006, 0x78f2, + 0x015e, 0x003e, 0x000e, 0x080c, 0x54c6, 0x1110, 0x080c, 0x0e62, + 0x012e, 0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036, + 0x0046, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, + 0x0d0c, 0x833c, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, + 0x004e, 0x003e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189e, + 0x7004, 0x9086, 0x0001, 0x1110, 0x080c, 0x32f7, 0x00ee, 0x0005, + 0x0005, 0x2a70, 0x2061, 0x19a9, 0x2063, 0x0003, 0x6007, 0x0002, + 0x600b, 0x0015, 0x600f, 0x0137, 0x2001, 0x197c, 0x900e, 0x2102, + 0x7196, 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705f, + 0xffff, 0x0008, 0x715e, 0x7067, 0xffff, 0x717e, 0x7182, 0x080c, + 0xcc6a, 0x2061, 0x196c, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, + 0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x611a, 0x601f, + 0x07d0, 0x2061, 0x1974, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, + 0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, + 0x1987, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, + 0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x63cd, + 0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, + 0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, + 0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, + 0x2079, 0x0000, 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04, + 0x0dd7, 0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, + 0x000e, 0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, + 0x7886, 0x3900, 0x789a, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156, + 0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a99, 0x7a08, + 0x226a, 0x2069, 0x1a9a, 0x7a18, 0x226a, 0x8d68, 0x7a1c, 0x226a, + 0x782c, 0x2019, 0x1aa7, 0x201a, 0x2019, 0x1aaa, 0x9016, 0x7808, + 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386, 0x1abf, + 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead, 0x2019, + 0x1aa8, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000, 0x2069, + 0x1a79, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, 0x8d68, + 0x8318, 0x1f04, 0x0e24, 0x002e, 0x003e, 0x00de, 0x015e, 0x2079, + 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, + 0xd084, 0x0180, 0x2001, 0x1a17, 0x2004, 0x9005, 0x0128, 0x2001, + 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, + 0x2003, 0x1001, 0x080c, 0x54c6, 0x1110, 0x080c, 0x0e99, 0x0cd0, + 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004, 0x9084, 0x0600, + 0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000, 0x2001, 0x017f, + 0x2102, 0x0005, 0x00f6, 0x0006, 0x2079, 0x1827, 0x2f04, 0x8000, + 0x207a, 0x080c, 0x2ae2, 0x1150, 0x0006, 0x2001, 0x1996, 0x2004, + 0xd0fc, 0x000e, 0x1118, 0x9082, 0x7530, 0x0010, 0x9082, 0x000f, + 0x0258, 0x9006, 0x207a, 0x2079, 0x182a, 0x2f04, 0x9084, 0x0001, + 0x9086, 0x0001, 0x207a, 0x0090, 0x2079, 0x182a, 0x2f7c, 0x8fff, + 0x1138, 0x0026, 0x2011, 0x0080, 0x080c, 0x0edf, 0x002e, 0x0030, + 0x0026, 0x2011, 0x0000, 0x080c, 0x0edf, 0x002e, 0x000e, 0x00fe, + 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c, 0x0edf, 0x20a9, + 0x0fff, 0x080c, 0x0f00, 0x2011, 0x0040, 0x04c9, 0x20a9, 0x0fff, + 0x080c, 0x0f00, 0x0c80, 0x7038, 0xd0b4, 0x1128, 0x0026, 0x2011, + 0x0040, 0x0469, 0x002e, 0x0005, 0x7038, 0xd0b4, 0x1128, 0x0026, + 0x2011, 0x0080, 0x0421, 0x002e, 0x0005, 0x0026, 0x70ef, 0x0000, + 0x0459, 0x1148, 0x080c, 0x2ae2, 0x1118, 0x2011, 0x8484, 0x0058, + 0x2011, 0x8282, 0x0040, 0x080c, 0x2ae2, 0x1118, 0x2011, 0xcdc5, + 0x0010, 0x2011, 0xcac2, 0x00e9, 0x002e, 0x0005, 0xd0b4, 0x0130, + 0x0006, 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x000e, 0x0005, 0x0016, + 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, + 0x9205, 0x20d0, 0x001e, 0x0005, 0x2001, 0x183a, 0x2004, 0xd0dc, + 0x0005, 0x9e86, 0x1800, 0x190c, 0x0dd5, 0x70e8, 0xd0e4, 0x0108, + 0xc2e5, 0x72ea, 0xd0e4, 0x1118, 0x9294, 0x00c0, 0x0c01, 0x0005, + 0x1d04, 0x0f00, 0x2091, 0x6000, 0x1f04, 0x0f00, 0x0005, 0x890e, + 0x810e, 0x810f, 0x9194, 0x003f, 0x918c, 0xffc0, 0x0005, 0x0006, + 0x2200, 0x914d, 0x894f, 0x894d, 0x894d, 0x000e, 0x000e, 0x0005, + 0x01d6, 0x0146, 0x0036, 0x0096, 0x2061, 0x188d, 0x600b, 0x0000, + 0x600f, 0x0000, 0x6003, 0x0000, 0x6007, 0x0000, 0x2009, 0xffc0, + 0x2105, 0x0006, 0x2001, 0xaaaa, 0x200f, 0x2019, 0x5555, 0x9016, + 0x2049, 0x0bff, 0xab02, 0xa001, 0xa001, 0xa800, 0x9306, 0x1138, + 0x2105, 0x9306, 0x0120, 0x8210, 0x99c8, 0x0400, 0x0c98, 0x000e, + 0x200f, 0x2001, 0x189d, 0x928a, 0x000e, 0x1638, 0x928a, 0x0006, + 0x2011, 0x0006, 0x1210, 0x2011, 0x0000, 0x2202, 0x9006, 0x2008, + 0x82ff, 0x01b0, 0x8200, 0x600a, 0x600f, 0xffff, 0x6003, 0x0002, + 0x6007, 0x0000, 0x0026, 0x2019, 0x0010, 0x9280, 0x0001, 0x20e8, + 0x21a0, 0x21a8, 0x4104, 0x8319, 0x1de0, 0x8211, 0x1da0, 0x002e, + 0x009e, 0x003e, 0x014e, 0x01de, 0x0005, 0x2011, 0x000e, 0x08e8, + 0x0016, 0x0026, 0x0096, 0x3348, 0x080c, 0x0f07, 0x2100, 0x9300, + 0x2098, 0x22e0, 0x009e, 0x002e, 0x001e, 0x0036, 0x3518, 0x20a9, + 0x0001, 0x4002, 0x8007, 0x4004, 0x8319, 0x1dd8, 0x003e, 0x0005, + 0x20e9, 0x0001, 0x71b8, 0x81ff, 0x11c0, 0x9006, 0x2009, 0x0200, + 0x20a9, 0x0002, 0x9298, 0x0018, 0x23a0, 0x4001, 0x2009, 0x0700, + 0x20a9, 0x0002, 0x9298, 0x0008, 0x23a0, 0x4001, 0x707c, 0x8007, + 0x7180, 0x810f, 0x20a9, 0x0002, 0x4001, 0x9298, 0x000c, 0x23a0, + 0x900e, 0x080c, 0x0db5, 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, + 0x4001, 0x0005, 0x89ff, 0x0140, 0xa804, 0xa807, 0x0000, 0x0006, + 0x080c, 0x1032, 0x009e, 0x0cb0, 0x0005, 0x00e6, 0x2071, 0x1800, + 0x080c, 0x10ab, 0x090c, 0x0dd5, 0x00ee, 0x0005, 0x0086, 0x00e6, + 0x0006, 0x0026, 0x0036, 0x0126, 0x2091, 0x8000, 0x00c9, 0x2071, + 0x1800, 0x73c0, 0x702c, 0x9016, 0x9045, 0x0158, 0x8210, 0x9906, + 0x090c, 0x0dd5, 0x2300, 0x9202, 0x0120, 0x1a0c, 0x0dd5, 0xa000, + 0x0c98, 0x012e, 0x003e, 0x002e, 0x000e, 0x00ee, 0x008e, 0x0005, + 0x0086, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x1910, + 0x7010, 0x9005, 0x0140, 0x7018, 0x9045, 0x0128, 0x9906, 0x090c, + 0x0dd5, 0xa000, 0x0cc8, 0x012e, 0x000e, 0x00ee, 0x008e, 0x0005, + 0x00e6, 0x2071, 0x1800, 0x0126, 0x2091, 0x8000, 0x70c0, 0x8001, + 0x0270, 0x70c2, 0x702c, 0x2048, 0x9085, 0x0001, 0xa800, 0x702e, + 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, + 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x70c0, + 0x90ca, 0x0020, 0x0268, 0x8001, 0x70c2, 0x702c, 0x2048, 0xa800, + 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, + 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x0016, 0x890e, + 0x810e, 0x810f, 0x9184, 0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, + 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, + 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, + 0x81a6, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9026, 0x2009, + 0x0000, 0x2049, 0x0400, 0x2900, 0x702e, 0x8940, 0x2800, 0xa802, + 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0440, 0x0120, 0x2848, + 0x9188, 0x0040, 0x0c90, 0x2071, 0x188d, 0x7000, 0x9005, 0x11a0, + 0x2001, 0x0534, 0xa802, 0x2048, 0x2009, 0x4d00, 0x8940, 0x2800, + 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0800, 0x0120, + 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188d, 0x7104, 0x7200, + 0x82ff, 0x01d0, 0x7308, 0x8318, 0x831f, 0x831b, 0x831b, 0x7312, + 0x8319, 0x2001, 0x0800, 0xa802, 0x2048, 0x8900, 0xa802, 0x2040, + 0xa95e, 0xaa62, 0x8420, 0x2300, 0x9906, 0x0130, 0x2848, 0x9188, + 0x0040, 0x9291, 0x0000, 0x0c88, 0xa803, 0x0000, 0x2071, 0x1800, + 0x74be, 0x74c2, 0x0005, 0x00e6, 0x0016, 0x9984, 0xfc00, 0x01e8, + 0x908c, 0xf800, 0x1168, 0x9982, 0x0400, 0x02b8, 0x9982, 0x0440, + 0x0278, 0x9982, 0x0534, 0x0288, 0x9982, 0x0800, 0x1270, 0x0040, + 0x9982, 0x0800, 0x0250, 0x2071, 0x188d, 0x7010, 0x9902, 0x1228, + 0x9085, 0x0001, 0x001e, 0x00ee, 0x0005, 0x9006, 0x0cd8, 0x00e6, + 0x2071, 0x1a16, 0x7007, 0x0000, 0x9006, 0x701e, 0x7022, 0x7002, + 0x2071, 0x0000, 0x7010, 0x9085, 0x8044, 0x7012, 0x00ee, 0x0005, + 0x0126, 0x2091, 0x8000, 0x00e6, 0xa06f, 0x0000, 0x2071, 0x1a16, + 0x701c, 0x9088, 0x1a20, 0x280a, 0x8000, 0x9084, 0x003f, 0x701e, + 0x7120, 0x9106, 0x090c, 0x0dd5, 0x7004, 0x9005, 0x1128, 0x00f6, + 0x2079, 0x0080, 0x00a9, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x0126, + 0x2091, 0x8000, 0x00e6, 0x2071, 0x1a16, 0x7004, 0x9005, 0x1128, + 0x00f6, 0x2079, 0x0080, 0x0021, 0x00fe, 0x00ee, 0x012e, 0x0005, + 0x7004, 0x9086, 0x0000, 0x1110, 0x7007, 0x0006, 0x7000, 0x0002, + 0x1122, 0x12a5, 0x1120, 0x1120, 0x1299, 0x1299, 0x1299, 0x1299, + 0x080c, 0x0dd5, 0x701c, 0x7120, 0x9106, 0x1148, 0x792c, 0x9184, + 0x0001, 0x1120, 0xd1fc, 0x1110, 0x7007, 0x0000, 0x0005, 0x0096, + 0x9180, 0x1a20, 0x2004, 0x700a, 0x2048, 0x8108, 0x918c, 0x003f, + 0x7122, 0x782b, 0x0026, 0xa88c, 0x7802, 0xa890, 0x7806, 0xa894, + 0x780a, 0xa898, 0x780e, 0xa878, 0x700e, 0xa870, 0x7016, 0xa874, + 0x701a, 0xa868, 0x009e, 0xd084, 0x0120, 0x7007, 0x0001, 0x0029, + 0x0005, 0x7007, 0x0002, 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c, + 0x2011, 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, + 0x7212, 0x8203, 0x7812, 0x782b, 0x0020, 0x782b, 0x0041, 0x002e, + 0x001e, 0x0005, 0x0016, 0x0026, 0x0136, 0x0146, 0x0156, 0x7014, + 0x20e0, 0x7018, 0x2098, 0x20e9, 0x0000, 0x20a1, 0x0088, 0x782b, + 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, + 0x9006, 0x700e, 0x22a8, 0x4006, 0x8203, 0x7812, 0x782b, 0x0020, + 0x3300, 0x701a, 0x782b, 0x0001, 0x015e, 0x014e, 0x013e, 0x002e, + 0x001e, 0x0005, 0x2009, 0x1a16, 0x2104, 0xc095, 0x200a, 0x080c, + 0x10ff, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1a16, 0x00f6, 0x2079, + 0x0080, 0x792c, 0xd1bc, 0x190c, 0x0dce, 0x782b, 0x0002, 0xd1fc, + 0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e, + 0x0005, 0x1110, 0x11b8, 0x11ec, 0x12c4, 0x0dd5, 0x12df, 0x0dd5, + 0x918c, 0x0700, 0x1550, 0x0136, 0x0146, 0x0156, 0x7014, 0x20e8, + 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b, 0x0040, + 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e, 0x014e, 0x013e, + 0x700c, 0x9005, 0x0578, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c, + 0x1155, 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0100, 0x009e, + 0x7007, 0x0000, 0x080c, 0x1110, 0x0005, 0x7008, 0x0096, 0x2048, + 0xa86f, 0x0200, 0x009e, 0x0ca0, 0x918c, 0x0700, 0x1150, 0x700c, + 0x9005, 0x0180, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c, 0x116a, + 0x0005, 0x7008, 0x0096, 0x2048, 0xa86f, 0x0200, 0x009e, 0x7007, + 0x0000, 0x0080, 0x0096, 0x7008, 0x2048, 0x7800, 0xa88e, 0x7804, + 0xa892, 0x7808, 0xa896, 0x780c, 0xa89a, 0xa86f, 0x0100, 0x009e, + 0x7007, 0x0000, 0x0096, 0x00d6, 0x7008, 0x2048, 0x2001, 0x18b9, + 0x2004, 0x9906, 0x1128, 0xa89c, 0x080f, 0x00de, 0x009e, 0x00a0, + 0x00de, 0x009e, 0x0096, 0x00d6, 0x7008, 0x2048, 0x0081, 0x0150, + 0xa89c, 0x0086, 0x2940, 0x080f, 0x008e, 0x00de, 0x009e, 0x080c, + 0x10ff, 0x0005, 0x00de, 0x009e, 0x080c, 0x10ff, 0x0005, 0xa8a8, + 0xd08c, 0x0005, 0x0096, 0xa0a0, 0x904d, 0x090c, 0x0dd5, 0xa06c, + 0x908e, 0x0100, 0x0130, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, + 0x4002, 0x080c, 0x6a3a, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x2848, + 0x080c, 0x1032, 0x009e, 0x0005, 0x00a6, 0xa0a0, 0x904d, 0x090c, + 0x0dd5, 0xa06c, 0x908e, 0x0100, 0x0128, 0xa87b, 0x0001, 0xa883, + 0x0000, 0x00c0, 0xa80c, 0x2050, 0xb004, 0x9005, 0x0198, 0xa80e, + 0x2050, 0x8006, 0x8006, 0x8007, 0x908c, 0x003f, 0x9084, 0xffc0, + 0x9080, 0x0002, 0xa076, 0xa172, 0xb000, 0xa07a, 0x2810, 0x080c, + 0x10e0, 0x00e8, 0xa97c, 0xa894, 0x0016, 0x0006, 0x080c, 0x6a3a, + 0x000e, 0x001e, 0xd1fc, 0x1138, 0xd1f4, 0x0128, 0x00c6, 0x2060, + 0x080c, 0xab6b, 0x00ce, 0x7008, 0x2048, 0xa89f, 0x0000, 0xa8a3, + 0x0000, 0x080c, 0x1032, 0x7007, 0x0000, 0x080c, 0x10ff, 0x00ae, + 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001, 0x7007, 0x0005, + 0x7000, 0xc094, 0x7002, 0x012e, 0x0005, 0x0096, 0x2001, 0x192e, + 0x204c, 0xa87c, 0x7812, 0xa88c, 0x7802, 0xa890, 0x7806, 0xa894, + 0x780a, 0xa898, 0x780e, 0x782b, 0x0020, 0x0126, 0x2091, 0x8000, + 0x782b, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x2900, + 0x700a, 0x012e, 0x009e, 0x0005, 0x20e1, 0x0000, 0x2099, 0x0088, + 0x782b, 0x0040, 0x0096, 0x2001, 0x192e, 0x204c, 0xaa7c, 0x009e, + 0x080c, 0x879b, 0x2009, 0x188c, 0x2104, 0x9084, 0xfffc, 0x200a, + 0x080c, 0x860e, 0x7007, 0x0000, 0x080c, 0x1110, 0x0005, 0x7007, + 0x0000, 0x080c, 0x1110, 0x0005, 0x0126, 0x2091, 0x2200, 0x2079, + 0x0300, 0x2071, 0x1a60, 0x7003, 0x0000, 0x78bf, 0x00f6, 0x00c1, + 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9, 0x03ce, 0x2061, 0xe6bb, + 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, 0x7916, 0x1f04, 0x12f8, + 0x7807, 0x0007, 0x7803, 0x0000, 0x7803, 0x0001, 0x012e, 0x0005, + 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c, 0x0118, 0x7820, 0x04a9, + 0x0cd0, 0x2001, 0x1a61, 0x2003, 0x0000, 0x78ab, 0x0004, 0x78ac, + 0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807, 0x0007, 0x7827, 0x0030, + 0x782b, 0x0400, 0x7827, 0x0031, 0x782b, 0x1a79, 0x781f, 0xff00, + 0x781b, 0xff00, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f, + 0x0303, 0x2061, 0x1a79, 0x602f, 0x1cd0, 0x2001, 0x181a, 0x2004, + 0x9082, 0x1cd0, 0x6032, 0x603b, 0x1f4a, 0x604f, 0x193c, 0x2001, + 0x1927, 0x2004, 0x6042, 0x00ce, 0x0005, 0x9086, 0x000d, 0x11d0, + 0x7808, 0xd09c, 0x01b8, 0x7820, 0x0026, 0x2010, 0x080c, 0xc813, + 0x0180, 0x2260, 0x6000, 0x9086, 0x0004, 0x1158, 0x0016, 0x6120, + 0x9186, 0x0009, 0x0108, 0x0020, 0x2009, 0x004c, 0x080c, 0xabe6, + 0x001e, 0x002e, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, 0x9184, + 0x0070, 0x190c, 0x0dce, 0xd19c, 0x0158, 0x7820, 0x908c, 0xf000, + 0x15e8, 0x908a, 0x0024, 0x1a0c, 0x0dd5, 0x0023, 0x012e, 0x0005, + 0x012e, 0x0005, 0x139e, 0x139e, 0x13b5, 0x13ba, 0x13be, 0x13c3, + 0x13eb, 0x13ef, 0x13fd, 0x1401, 0x139e, 0x14cc, 0x14d0, 0x1535, + 0x153c, 0x139e, 0x153d, 0x153e, 0x1549, 0x1550, 0x139e, 0x139e, + 0x139e, 0x139e, 0x139e, 0x139e, 0x139e, 0x13c5, 0x139e, 0x139e, + 0x139e, 0x139e, 0x139e, 0x139e, 0x13a2, 0x13a0, 0x080c, 0x0dd5, + 0x080c, 0x0dce, 0x080c, 0x155b, 0x2009, 0x1a78, 0x2104, 0x8000, + 0x200a, 0x080c, 0x7c01, 0x080c, 0x19ff, 0x0005, 0x2009, 0x0048, + 0x2060, 0x080c, 0xabe6, 0x012e, 0x0005, 0x7004, 0xc085, 0xc0b5, + 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x155b, + 0x080c, 0x161f, 0x0005, 0x080c, 0x0dd5, 0x080c, 0x155b, 0x2060, + 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, + 0x080c, 0xabe6, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, + 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, + 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x1560, 0x2001, 0x0307, + 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c, + 0x155b, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, + 0x2009, 0x0048, 0x080c, 0xabe6, 0x0005, 0x080c, 0x155b, 0x080c, + 0x0dd5, 0x080c, 0x155b, 0x080c, 0x14b7, 0x7827, 0x0018, 0x79ac, + 0xd1dc, 0x0904, 0x146a, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, + 0x9065, 0x0140, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, + 0x0804, 0x1470, 0x7004, 0x9005, 0x01c8, 0x1188, 0x78ab, 0x0004, + 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc, 0x090c, 0x0dd5, 0x2001, + 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0804, 0x149c, 0x78ab, + 0x0004, 0x7803, 0x0001, 0x080c, 0x14d0, 0x0005, 0x7827, 0x0018, + 0xa001, 0x7828, 0x7827, 0x0011, 0xa001, 0x7928, 0x9106, 0x0110, + 0x79ac, 0x08e0, 0x00e6, 0x2071, 0x0200, 0x702c, 0xd0c4, 0x0140, + 0x00ee, 0x080c, 0x19ff, 0x080c, 0x1308, 0x7803, 0x0001, 0x0005, + 0x7037, 0x0001, 0xa001, 0x7150, 0x00ee, 0x918c, 0xff00, 0x9186, + 0x0500, 0x0110, 0x79ac, 0x0810, 0x7004, 0xc09d, 0x7006, 0x78ab, + 0x0004, 0x7803, 0x0001, 0x080c, 0x14d0, 0x2001, 0x020d, 0x2003, + 0x0020, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0dd5, + 0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, 0x080c, + 0x7c01, 0x080c, 0x19ff, 0x080c, 0xc825, 0x0158, 0xa9ac, 0xa936, + 0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880, 0xc0bd, + 0xa882, 0x0005, 0x6020, 0x9086, 0x0009, 0x1128, 0x2009, 0x004c, + 0x080c, 0xabe6, 0x0048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, + 0xd0bc, 0x6024, 0x190c, 0xcc03, 0x2029, 0x00c8, 0x8529, 0x0128, + 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xe664, + 0xd5a4, 0x1118, 0x080c, 0x1560, 0x0005, 0x080c, 0x7c01, 0x080c, + 0x19ff, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, + 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, + 0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c, 0x15d1, 0x00fe, + 0x007e, 0x006e, 0x001e, 0x0005, 0x7004, 0xc09d, 0x7006, 0x0005, + 0x7104, 0x9184, 0x0004, 0x190c, 0x0dd5, 0xd184, 0x1189, 0xd19c, + 0x0158, 0xc19c, 0x7106, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, + 0x0020, 0x080c, 0x1560, 0x0005, 0x81ff, 0x190c, 0x0dd5, 0x0005, + 0xc184, 0xd1b4, 0xc1b4, 0x7106, 0x0016, 0x00e6, 0x15f0, 0x2071, + 0x0200, 0x080c, 0x160c, 0x05c8, 0x6014, 0x9005, 0x05b0, 0x0096, + 0x2048, 0xa864, 0x009e, 0x9084, 0x00ff, 0x908e, 0x0029, 0x0160, + 0x908e, 0x0048, 0x1550, 0x601c, 0xd084, 0x11e0, 0x00f6, 0x2c78, + 0x080c, 0x1689, 0x00fe, 0x00b0, 0x00f6, 0x2c78, 0x080c, 0x180e, + 0x00fe, 0x2009, 0x01f4, 0x8109, 0x0168, 0x2001, 0x0201, 0x2004, + 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1118, 0x080c, + 0x1560, 0x0040, 0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x1308, 0x7803, 0x0001, 0x00ee, 0x001e, 0x0005, 0x2001, 0x020d, 0x2003, - 0x0050, 0x2003, 0x0020, 0x0069, 0x0ca8, 0x0031, 0x2060, 0x2009, - 0x0053, 0x080c, 0x9a50, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, - 0x0005, 0x080c, 0x13d9, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, - 0x8109, 0x0510, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, - 0x0000, 0x79bc, 0xd1a4, 0x1528, 0x79b8, 0x918c, 0x0fff, 0x0180, - 0x9182, 0x0841, 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, - 0x810c, 0x810c, 0x080c, 0x14c4, 0x6827, 0x0001, 0x8109, 0x1dd0, - 0x04d9, 0x6827, 0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, - 0xd0e4, 0x1500, 0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1130, - 0x08c0, 0x080c, 0x763f, 0x080c, 0x1872, 0x0090, 0x7827, 0x0015, - 0x782b, 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, - 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, - 0x00de, 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30, - 0x7827, 0x0015, 0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085, - 0x1800, 0x6802, 0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0, - 0x0005, 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086, - 0x0041, 0x0005, 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, 0xd09c, - 0x0140, 0x0016, 0x0026, 0x00c6, 0x080c, 0x12d6, 0x00ce, 0x002e, - 0x001e, 0x000e, 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, - 0x2009, 0xff00, 0x8109, 0x0130, 0x7818, 0xd0bc, 0x1dd8, 0x000e, - 0x00fe, 0x0005, 0x000e, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c, - 0x0db2, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x2009, 0xff00, - 0x8109, 0x0120, 0x7818, 0xd0bc, 0x1dd8, 0x0005, 0x792c, 0x3900, - 0x8000, 0x2004, 0x080c, 0x0db2, 0x7037, 0x0001, 0x7150, 0x7037, - 0x0002, 0x7050, 0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060, 0x0005, - 0x00e6, 0x0016, 0x2071, 0x0200, 0x0c79, 0x6124, 0xd1dc, 0x01f8, - 0x701c, 0xd08c, 0x0904, 0x1577, 0x7017, 0x0000, 0x2001, 0x0264, - 0x2004, 0xd0bc, 0x0904, 0x1577, 0x2001, 0x0268, 0x00c6, 0x2064, - 0x6104, 0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x1577, 0x9c06, - 0x15f0, 0x0126, 0x2091, 0x2600, 0x080c, 0x7597, 0x012e, 0x7358, - 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, - 0xb800, 0x00be, 0xd0bc, 0x190c, 0xb9b4, 0xab42, 0xac3e, 0x2001, - 0x1875, 0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, - 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, - 0xa837, 0xffff, 0x080c, 0x1dc2, 0x1190, 0x080c, 0x1705, 0x2a00, - 0xa816, 0x0130, 0x2800, 0xa80e, 0x2c05, 0xa80a, 0x2c00, 0xa812, - 0x7037, 0x0020, 0x781f, 0x0300, 0x001e, 0x00ee, 0x0005, 0x7037, - 0x0050, 0x7037, 0x0020, 0x001e, 0x00ee, 0x080c, 0x1461, 0x0005, - 0x080c, 0x0db2, 0x2ff0, 0x0126, 0x2091, 0x2200, 0x3e60, 0x6014, - 0x2048, 0x2940, 0x903e, 0x2730, 0xa864, 0x2068, 0xa81a, 0x9d84, - 0x000f, 0x9088, 0x1da2, 0x2165, 0x0002, 0x15ac, 0x15f9, 0x15ac, - 0x15ac, 0x15ac, 0x15db, 0x15ac, 0x15b0, 0x15a5, 0x15f0, 0x15ac, - 0x15ac, 0x15ac, 0x16b4, 0x15c4, 0x15ba, 0xa964, 0x918c, 0x00ff, - 0x918e, 0x0048, 0x0904, 0x15f0, 0x9085, 0x0001, 0x0804, 0x16ac, - 0xa87c, 0xd0bc, 0x0dc8, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, - 0x0804, 0x1600, 0xa87c, 0xd0bc, 0x0d78, 0xa890, 0xa842, 0xa88c, - 0xa83e, 0xa888, 0x0804, 0x164f, 0xa87c, 0xd0bc, 0x0d28, 0xa890, - 0xa842, 0xa88c, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0db2, 0xa164, - 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1da2, 0x2065, 0xa888, 0xd19c, - 0x1904, 0x164f, 0x0428, 0xa87c, 0xd0ac, 0x0970, 0xa804, 0x9045, - 0x090c, 0x0db2, 0xa164, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1da2, - 0x2065, 0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x164f, 0x0080, - 0xa87c, 0xd0ac, 0x0904, 0x15ac, 0x9006, 0xa842, 0xa83e, 0x0804, - 0x164f, 0xa87c, 0xd0ac, 0x0904, 0x15ac, 0x9006, 0xa842, 0xa83e, - 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0db2, 0x9082, 0x001b, 0x0002, - 0x1623, 0x1623, 0x1625, 0x1623, 0x1623, 0x1623, 0x162b, 0x1623, - 0x1623, 0x1623, 0x1631, 0x1623, 0x1623, 0x1623, 0x1637, 0x1623, - 0x1623, 0x1623, 0x163d, 0x1623, 0x1623, 0x1623, 0x1643, 0x1623, - 0x1623, 0x1623, 0x1649, 0x080c, 0x0db2, 0xa574, 0xa478, 0xa37c, - 0xa280, 0x0804, 0x1694, 0xa584, 0xa488, 0xa38c, 0xa290, 0x0804, - 0x1694, 0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x1694, 0xa5a4, - 0xa4a8, 0xa3ac, 0xa2b0, 0x0804, 0x1694, 0xa5b4, 0xa4b8, 0xa3bc, - 0xa2c0, 0x0804, 0x1694, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0, 0x0804, - 0x1694, 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x1694, 0x2c05, - 0x908a, 0x0034, 0x1a0c, 0x0db2, 0x9082, 0x001b, 0x0002, 0x1672, - 0x1670, 0x1670, 0x1670, 0x1670, 0x1670, 0x1679, 0x1670, 0x1670, - 0x1670, 0x1670, 0x1670, 0x1680, 0x1670, 0x1670, 0x1670, 0x1670, - 0x1670, 0x1687, 0x1670, 0x1670, 0x1670, 0x1670, 0x1670, 0x168e, - 0x080c, 0x0db2, 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c, 0xa280, - 0x00d8, 0xa584, 0xa488, 0xa78c, 0xa690, 0xa394, 0xa298, 0x00a0, - 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0, 0x0068, 0xa5b4, - 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8, 0x0030, 0xa5cc, 0xa4d0, - 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, 0xab2e, 0xaa32, 0xad1e, 0xac22, + 0x0050, 0x2003, 0x0020, 0x0461, 0x0ca8, 0x0429, 0x2060, 0x2009, + 0x0053, 0x080c, 0xabe6, 0x0005, 0x0005, 0x0005, 0x00e1, 0x2008, + 0x00d1, 0x0006, 0x7004, 0xc09d, 0x7006, 0x000e, 0x080c, 0x8af8, + 0x0005, 0x0089, 0x9005, 0x0118, 0x080c, 0x86fb, 0x0cd0, 0x0005, + 0x2001, 0x0036, 0x2009, 0x1820, 0x210c, 0x2011, 0x181f, 0x2214, + 0x080c, 0x15d1, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, + 0x080c, 0x14b7, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, + 0x0510, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, + 0x79bc, 0xd1a4, 0x1528, 0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182, + 0x0841, 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, + 0x810c, 0x080c, 0x15c3, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9, + 0x6827, 0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, + 0x1500, 0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, + 0x080c, 0x7c01, 0x080c, 0x19ff, 0x0090, 0x7827, 0x0015, 0x782b, + 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, 0x2003, + 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, 0x00de, + 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30, 0x7827, + 0x0015, 0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085, 0x1800, + 0x6802, 0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0, 0x0005, + 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086, 0x0041, + 0x0005, 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, 0xd09c, 0x0140, + 0x0016, 0x0026, 0x00c6, 0x080c, 0x1363, 0x00ce, 0x002e, 0x001e, + 0x000e, 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x0059, + 0x1118, 0x000e, 0x00fe, 0x0005, 0x000e, 0x792c, 0x3900, 0x8000, + 0x2004, 0x080c, 0x0dd5, 0x2009, 0xff00, 0x8109, 0x0120, 0x7818, + 0xd0bc, 0x1dd8, 0x0005, 0x9085, 0x0001, 0x0005, 0x7832, 0x7936, + 0x7a3a, 0x781b, 0x8080, 0x0c79, 0x1108, 0x0005, 0x792c, 0x3900, + 0x8000, 0x2004, 0x080c, 0x0dd5, 0x7037, 0x0001, 0x7150, 0x7037, + 0x0002, 0x7050, 0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060, 0x918c, + 0xff00, 0x9186, 0x0500, 0x0110, 0x9085, 0x0001, 0x0005, 0x00e6, + 0x0016, 0x2071, 0x0200, 0x0c41, 0x6124, 0xd1dc, 0x01f8, 0x701c, + 0xd08c, 0x0904, 0x167e, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004, + 0xd0bc, 0x0904, 0x167e, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104, + 0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x167e, 0x9c06, 0x15f0, + 0x0126, 0x2091, 0x2600, 0x080c, 0x7b59, 0x012e, 0x7358, 0x745c, + 0x6014, 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800, + 0x00be, 0xd0bc, 0x190c, 0xcbde, 0xab42, 0xac3e, 0x2001, 0x1869, + 0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837, + 0xffff, 0x080c, 0x1f6a, 0x1190, 0x080c, 0x185d, 0x2a00, 0xa816, + 0x0130, 0x2800, 0xa80e, 0x2c05, 0xa80a, 0x2c00, 0xa812, 0x7037, + 0x0020, 0x781f, 0x0300, 0x001e, 0x00ee, 0x0005, 0x7037, 0x0050, + 0x7037, 0x0020, 0x001e, 0x00ee, 0x080c, 0x1560, 0x0005, 0x080c, + 0x0dd5, 0x2ff0, 0x0126, 0x2091, 0x2200, 0x3e60, 0x6014, 0x2048, + 0x2940, 0x903e, 0x2730, 0xa864, 0x2068, 0xa81a, 0x9d84, 0x000f, + 0x9088, 0x1f4a, 0x2165, 0x0002, 0x16b3, 0x1721, 0x16b3, 0x16b3, + 0x16b7, 0x1702, 0x16b3, 0x16d7, 0x16ac, 0x1718, 0x16b3, 0x16b3, + 0x16bc, 0x180c, 0x16eb, 0x16e1, 0xa964, 0x918c, 0x00ff, 0x918e, + 0x0048, 0x0904, 0x1718, 0x9085, 0x0001, 0x0804, 0x1804, 0xa87c, + 0xd0ac, 0x0dc8, 0x0804, 0x1728, 0xa87c, 0xd0ac, 0x0da0, 0x0804, + 0x1793, 0xa898, 0x901d, 0x1108, 0xab9c, 0x9016, 0xaab2, 0xaa3e, + 0xaa42, 0x3e00, 0x9080, 0x0008, 0x2004, 0x9080, 0x8cbf, 0x2005, + 0x9005, 0x090c, 0x0dd5, 0x2004, 0xa8ae, 0x0804, 0x17ec, 0xa87c, + 0xd0bc, 0x09c8, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, + 0x1728, 0xa87c, 0xd0bc, 0x0978, 0xa890, 0xa842, 0xa88c, 0xa83e, + 0xa888, 0x0804, 0x1793, 0xa87c, 0xd0bc, 0x0928, 0xa890, 0xa842, + 0xa88c, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0dd5, 0xa164, 0xa91a, + 0x91ec, 0x000f, 0x9d80, 0x1f4a, 0x2065, 0xa888, 0xd19c, 0x1904, + 0x1793, 0x0430, 0xa87c, 0xd0ac, 0x0904, 0x16b3, 0xa804, 0x9045, + 0x090c, 0x0dd5, 0xa164, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1f4a, + 0x2065, 0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x1793, 0x0080, + 0xa87c, 0xd0ac, 0x0904, 0x16b3, 0x9006, 0xa842, 0xa83e, 0x0804, + 0x1793, 0xa87c, 0xd0ac, 0x0904, 0x16b3, 0x9006, 0xa842, 0xa83e, + 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, + 0x174b, 0x174b, 0x174d, 0x174b, 0x174b, 0x174b, 0x1757, 0x174b, + 0x174b, 0x174b, 0x1761, 0x174b, 0x174b, 0x174b, 0x176b, 0x174b, + 0x174b, 0x174b, 0x1775, 0x174b, 0x174b, 0x174b, 0x177f, 0x174b, + 0x174b, 0x174b, 0x1789, 0x080c, 0x0dd5, 0xa574, 0xa478, 0x9d86, + 0x0024, 0x0904, 0x16c1, 0xa37c, 0xa280, 0x0804, 0x17ec, 0xa584, + 0xa488, 0x9d86, 0x0024, 0x0904, 0x16c1, 0xa38c, 0xa290, 0x0804, + 0x17ec, 0xa594, 0xa498, 0x9d86, 0x0024, 0x0904, 0x16c1, 0xa39c, + 0xa2a0, 0x0804, 0x17ec, 0xa5a4, 0xa4a8, 0x9d86, 0x0024, 0x0904, + 0x16c1, 0xa3ac, 0xa2b0, 0x0804, 0x17ec, 0xa5b4, 0xa4b8, 0x9d86, + 0x0024, 0x0904, 0x16c1, 0xa3bc, 0xa2c0, 0x0804, 0x17ec, 0xa5c4, + 0xa4c8, 0x9d86, 0x0024, 0x0904, 0x16c1, 0xa3cc, 0xa2d0, 0x0804, + 0x17ec, 0xa5d4, 0xa4d8, 0x9d86, 0x0024, 0x0904, 0x16c1, 0xa3dc, + 0xa2e0, 0x0804, 0x17ec, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dd5, + 0x9082, 0x001b, 0x0002, 0x17b6, 0x17b4, 0x17b4, 0x17b4, 0x17b4, + 0x17b4, 0x17c1, 0x17b4, 0x17b4, 0x17b4, 0x17b4, 0x17b4, 0x17cc, + 0x17b4, 0x17b4, 0x17b4, 0x17b4, 0x17b4, 0x17d7, 0x17b4, 0x17b4, + 0x17b4, 0x17b4, 0x17b4, 0x17e2, 0x080c, 0x0dd5, 0xa56c, 0xa470, + 0xa774, 0xa678, 0x9d86, 0x002c, 0x0904, 0x16c1, 0xa37c, 0xa280, + 0x0458, 0xa584, 0xa488, 0xa78c, 0xa690, 0x9d86, 0x002c, 0x0904, + 0x16c1, 0xa394, 0xa298, 0x0400, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, + 0x9d86, 0x002c, 0x0904, 0x16c1, 0xa3ac, 0xa2b0, 0x00a8, 0xa5b4, + 0xa4b8, 0xa7bc, 0xa6c0, 0x9d86, 0x002c, 0x0904, 0x16c1, 0xa3c4, + 0xa2c8, 0x0050, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0x9d86, 0x002c, + 0x0904, 0x16c1, 0xa3dc, 0xa2e0, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0xa988, 0x8c60, 0x2c1d, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x8109, 0xa916, 0x1150, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa87c, 0xc0dd, 0xa87e, 0x9006, 0x012e, 0x0005, 0x2800, 0xa80e, - 0xab0a, 0x2c00, 0xa812, 0x0c80, 0x0804, 0x15ac, 0x2ff0, 0x0126, + 0xab0a, 0x2c00, 0xa812, 0x0c80, 0x0804, 0x16b3, 0x2ff0, 0x0126, 0x2091, 0x2200, 0x3e60, 0x6014, 0x2048, 0x2940, 0xa80e, 0x2061, - 0x1d9d, 0xa80b, 0x1d9d, 0x2c05, 0xa812, 0xa964, 0xa91a, 0xa87c, - 0xd0ac, 0x090c, 0x0db2, 0x9006, 0xa842, 0xa83e, 0x2c05, 0x908a, - 0x0034, 0x1a0c, 0x0db2, 0xadcc, 0xacd0, 0xafd4, 0xaed8, 0xabdc, + 0x1f45, 0xa813, 0x1f45, 0x2c05, 0xa80a, 0xa964, 0xa91a, 0xa87c, + 0xd0ac, 0x090c, 0x0dd5, 0x9006, 0xa842, 0xa83e, 0x2c05, 0x908a, + 0x0034, 0x1a0c, 0x0dd5, 0xadcc, 0xacd0, 0xafd4, 0xaed8, 0xabdc, 0xaae0, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0xa988, 0x918a, 0x0002, 0xa916, 0x1150, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa87c, 0xc0dd, 0xa87e, 0x9006, - 0x012e, 0x0005, 0xa804, 0x9045, 0x090c, 0x0db2, 0xa80e, 0xa064, - 0xa81a, 0x9084, 0x000f, 0x9080, 0x1da2, 0x2015, 0x82ff, 0x090c, - 0x0db2, 0xaa0a, 0x2205, 0xa812, 0x0c18, 0x903e, 0x2730, 0xa880, - 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x17fa, 0x175c, 0x175c, 0x17fa, - 0x17fa, 0x17f4, 0x17fa, 0x175c, 0x17fa, 0x17ab, 0x17ab, 0x17fa, - 0x17fa, 0x17fa, 0x17f1, 0x17ab, 0xc0fc, 0xa882, 0xab2c, 0xaa30, - 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x17fc, 0x2c05, 0x908a, 0x0034, - 0x1a0c, 0x0db2, 0x9082, 0x001b, 0x0002, 0x1748, 0x1746, 0x1746, - 0x1746, 0x1746, 0x1746, 0x174c, 0x1746, 0x1746, 0x1746, 0x1746, - 0x1746, 0x1750, 0x1746, 0x1746, 0x1746, 0x1746, 0x1746, 0x1754, - 0x1746, 0x1746, 0x1746, 0x1746, 0x1746, 0x1758, 0x080c, 0x0db2, - 0xa774, 0xa678, 0x0804, 0x17fc, 0xa78c, 0xa690, 0x0804, 0x17fc, - 0xa7a4, 0xa6a8, 0x0804, 0x17fc, 0xa7bc, 0xa6c0, 0x0804, 0x17fc, - 0xa7d4, 0xa6d8, 0x0804, 0x17fc, 0x2c05, 0x908a, 0x0036, 0x1a0c, - 0x0db2, 0x9082, 0x001b, 0x0002, 0x177f, 0x177f, 0x1781, 0x177f, - 0x177f, 0x177f, 0x1787, 0x177f, 0x177f, 0x177f, 0x178d, 0x177f, - 0x177f, 0x177f, 0x1793, 0x177f, 0x177f, 0x177f, 0x1799, 0x177f, - 0x177f, 0x177f, 0x179f, 0x177f, 0x177f, 0x177f, 0x17a5, 0x080c, - 0x0db2, 0xa574, 0xa478, 0xa37c, 0xa280, 0x0804, 0x17fc, 0xa584, - 0xa488, 0xa38c, 0xa290, 0x0804, 0x17fc, 0xa594, 0xa498, 0xa39c, - 0xa2a0, 0x0804, 0x17fc, 0xa5a4, 0xa4a8, 0xa3ac, 0xa2b0, 0x0804, - 0x17fc, 0xa5b4, 0xa4b8, 0xa3bc, 0xa2c0, 0x0804, 0x17fc, 0xa5c4, - 0xa4c8, 0xa3cc, 0xa2d0, 0x0804, 0x17fc, 0xa5d4, 0xa4d8, 0xa3dc, - 0xa2e0, 0x0804, 0x17fc, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0db2, - 0x9082, 0x001b, 0x0002, 0x17ce, 0x17cc, 0x17cc, 0x17cc, 0x17cc, - 0x17cc, 0x17d5, 0x17cc, 0x17cc, 0x17cc, 0x17cc, 0x17cc, 0x17dc, - 0x17cc, 0x17cc, 0x17cc, 0x17cc, 0x17cc, 0x17e3, 0x17cc, 0x17cc, - 0x17cc, 0x17cc, 0x17cc, 0x17ea, 0x080c, 0x0db2, 0xa56c, 0xa470, - 0xa774, 0xa678, 0xa37c, 0xa280, 0x0438, 0xa584, 0xa488, 0xa78c, - 0xa690, 0xa394, 0xa298, 0x0400, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, - 0xa3ac, 0xa2b0, 0x00c8, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, - 0xa2c8, 0x0090, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, - 0x0058, 0x9d86, 0x000e, 0x1130, 0x080c, 0x1d60, 0x1904, 0x1705, - 0x900e, 0x0050, 0x080c, 0x0db2, 0xab2e, 0xaa32, 0xad1e, 0xac22, - 0xaf26, 0xae2a, 0x080c, 0x1d60, 0x0005, 0x6014, 0x2048, 0x6118, - 0x810c, 0x810c, 0x810c, 0x81ff, 0x1118, 0xa887, 0x0001, 0x0008, - 0xa986, 0x601b, 0x0002, 0xa974, 0xd1dc, 0x1108, 0x0005, 0xa934, - 0xa88c, 0x9106, 0x1158, 0xa938, 0xa890, 0x9106, 0x1138, 0x601c, - 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, 0x9a50, 0x0005, 0x0126, - 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, - 0x0000, 0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, - 0x0006, 0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, - 0x0120, 0x080c, 0x12d6, 0x8631, 0x1db8, 0x00ce, 0x781f, 0x0800, - 0x2031, 0x0168, 0x00c6, 0x7808, 0xd09c, 0x190c, 0x12d6, 0x00ce, - 0x2001, 0x0038, 0x080c, 0x18ff, 0x7930, 0x9186, 0x0040, 0x0160, - 0x9186, 0x0042, 0x190c, 0x0db2, 0x2001, 0x001e, 0x8001, 0x1df0, - 0x8631, 0x1d40, 0x080c, 0x190e, 0x000e, 0x6022, 0x012e, 0x0005, - 0x080c, 0x18fb, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, - 0x0000, 0x0ca0, 0x00f6, 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, - 0x0004, 0x00fe, 0x080c, 0x6c53, 0x11b0, 0x2001, 0x0138, 0x2003, - 0x0000, 0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, - 0xa001, 0x8211, 0x1de0, 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, - 0x6d03, 0x006e, 0x0005, 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, - 0x2001, 0x0138, 0x2202, 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, - 0x28dc, 0x2009, 0x003c, 0x080c, 0x20d9, 0x2001, 0x015d, 0x2003, - 0x0000, 0x7000, 0x9084, 0x003c, 0x1de0, 0x080c, 0x7b7c, 0x70a0, - 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, - 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c, 0x12a0, 0x7803, 0x0001, - 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, - 0x2001, 0x0160, 0x202c, 0x2003, 0x0000, 0x080c, 0x6c53, 0x1108, - 0x0005, 0x2021, 0x0260, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, - 0x2001, 0x0109, 0x201c, 0x939c, 0x0048, 0x1160, 0x2001, 0x0111, - 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70, 0x2001, 0x015d, 0x2003, - 0x0000, 0x0005, 0x0046, 0x2021, 0x0019, 0x2003, 0x0048, 0xa001, - 0xa001, 0x201c, 0x939c, 0x0048, 0x0120, 0x8421, 0x1db0, 0x004e, - 0x0c60, 0x004e, 0x0c40, 0x601c, 0xc084, 0x601e, 0x0005, 0x2c08, - 0x621c, 0x080c, 0x14d2, 0x7930, 0x0005, 0x2c08, 0x621c, 0x080c, - 0x14f9, 0x7930, 0x0005, 0x8001, 0x1df0, 0x0005, 0x2031, 0x0005, - 0x781c, 0x9084, 0x0007, 0x0170, 0x2001, 0x0038, 0x0c41, 0x9186, - 0x0040, 0x0904, 0x196c, 0x2001, 0x001e, 0x0c69, 0x8631, 0x1d80, - 0x080c, 0x0db2, 0x781f, 0x0202, 0x2001, 0x015d, 0x2003, 0x0000, - 0x2001, 0x0b10, 0x0c01, 0x781c, 0xd084, 0x0110, 0x0861, 0x04e0, - 0x2001, 0x0030, 0x0891, 0x9186, 0x0040, 0x0568, 0x781c, 0xd084, - 0x1da8, 0x781f, 0x0101, 0x2001, 0x0014, 0x0869, 0x2001, 0x0037, - 0x0821, 0x9186, 0x0040, 0x0140, 0x2001, 0x0030, 0x080c, 0x1905, - 0x9186, 0x0040, 0x190c, 0x0db2, 0x00d6, 0x2069, 0x0200, 0x692c, - 0xd1f4, 0x1170, 0xd1c4, 0x0160, 0xd19c, 0x0130, 0x6800, 0x9085, - 0x1800, 0x6802, 0x00de, 0x0080, 0x6908, 0x9184, 0x0007, 0x1db0, - 0x00de, 0x781f, 0x0100, 0x791c, 0x9184, 0x0007, 0x090c, 0x0db2, - 0xa001, 0xa001, 0x781f, 0x0200, 0x0005, 0x0126, 0x2091, 0x2400, - 0x2071, 0x1a34, 0x2079, 0x0090, 0x012e, 0x0005, 0x9280, 0x0005, - 0x2004, 0x2048, 0xa97c, 0xd1dc, 0x1904, 0x19f1, 0xa964, 0x9184, - 0x0007, 0x0002, 0x198a, 0x19dc, 0x1991, 0x1991, 0x1991, 0x19c4, - 0x19a4, 0x1993, 0x2100, 0x9084, 0x00ff, 0x9086, 0x0048, 0x0904, - 0x19dc, 0x080c, 0x0db2, 0xa87c, 0xd0b4, 0x0904, 0x1ba3, 0xa890, - 0xa842, 0xa83a, 0xa88c, 0xa83e, 0xa836, 0xa8ac, 0xa846, 0xa8b0, - 0xa84a, 0xa988, 0x0804, 0x19e4, 0xa864, 0x9084, 0x00ff, 0x9086, - 0x001e, 0x1d38, 0xa87c, 0xd0b4, 0x0904, 0x1ba3, 0xa890, 0xa842, - 0xa83a, 0xa88c, 0xa83e, 0xa836, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, - 0xa804, 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f, 0x9080, 0x1da2, - 0x2005, 0xa812, 0xa988, 0x0448, 0x918c, 0x00ff, 0x9186, 0x0015, - 0x1540, 0xa87c, 0xd0b4, 0x0904, 0x1ba3, 0xa804, 0xa85a, 0x2040, - 0xa064, 0x9084, 0x000f, 0x9080, 0x1da2, 0x2005, 0xa812, 0xa988, - 0x9006, 0xa842, 0xa83e, 0x0088, 0xa87c, 0xd0b4, 0x0904, 0x1ba3, - 0xa988, 0x9006, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa864, 0x9084, - 0x000f, 0x9080, 0x1da2, 0x2005, 0xa812, 0xa916, 0xa87c, 0xc0dd, - 0xa87e, 0x0005, 0x00f6, 0x2079, 0x0090, 0x782c, 0xd0fc, 0x190c, - 0x1be4, 0x00e6, 0x2071, 0x1a34, 0x7000, 0x9005, 0x1904, 0x1a4b, - 0x7206, 0x9280, 0x0005, 0x204c, 0x9280, 0x0004, 0x2004, 0x782b, - 0x0004, 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040, 0x00fe, 0x00b6, - 0x2058, 0xb86c, 0x7836, 0xb890, 0x00be, 0x00f6, 0x2079, 0x0200, - 0x7803, 0x0040, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, - 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x00fe, 0xa814, 0x2050, - 0xa858, 0x2040, 0xa810, 0x2060, 0xa064, 0x90ec, 0x000f, 0xa944, - 0x791a, 0x7116, 0xa848, 0x781e, 0x701a, 0x9006, 0x700e, 0x7012, - 0x7004, 0xa940, 0xa838, 0x9106, 0x1188, 0xa93c, 0xa834, 0x9106, - 0x1168, 0x8aff, 0x01a8, 0x0126, 0x2091, 0x8000, 0x00a1, 0x0108, - 0x0091, 0x012e, 0x9006, 0x00ee, 0x00fe, 0x0005, 0x0036, 0x0046, - 0xab38, 0xac34, 0x080c, 0x1dc2, 0x004e, 0x003e, 0x0d50, 0x0c98, - 0x9085, 0x0001, 0x0c80, 0x0076, 0x0066, 0x0056, 0x0046, 0x0036, - 0x0026, 0x8aff, 0x0904, 0x1b9c, 0x700c, 0x7214, 0x923a, 0x7010, - 0x7218, 0x9203, 0x0a04, 0x1b9b, 0x9705, 0x0904, 0x1b9b, 0x903e, - 0x2730, 0xa880, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1b7f, 0x1ac6, - 0x1ac6, 0x1b7f, 0x1b7f, 0x1b62, 0x1b7f, 0x1ac6, 0x1b68, 0x1b15, - 0x1b15, 0x1b7f, 0x1b7f, 0x1b7f, 0x1b5c, 0x1b15, 0xc0fc, 0xa882, - 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1b81, 0x2c05, - 0x908a, 0x0034, 0x1a0c, 0x0db2, 0x9082, 0x001b, 0x0002, 0x1ab2, - 0x1ab0, 0x1ab0, 0x1ab0, 0x1ab0, 0x1ab0, 0x1ab6, 0x1ab0, 0x1ab0, - 0x1ab0, 0x1ab0, 0x1ab0, 0x1aba, 0x1ab0, 0x1ab0, 0x1ab0, 0x1ab0, - 0x1ab0, 0x1abe, 0x1ab0, 0x1ab0, 0x1ab0, 0x1ab0, 0x1ab0, 0x1ac2, - 0x080c, 0x0db2, 0xa774, 0xa678, 0x0804, 0x1b81, 0xa78c, 0xa690, - 0x0804, 0x1b81, 0xa7a4, 0xa6a8, 0x0804, 0x1b81, 0xa7bc, 0xa6c0, - 0x0804, 0x1b81, 0xa7d4, 0xa6d8, 0x0804, 0x1b81, 0x2c05, 0x908a, - 0x0036, 0x1a0c, 0x0db2, 0x9082, 0x001b, 0x0002, 0x1ae9, 0x1ae9, - 0x1aeb, 0x1ae9, 0x1ae9, 0x1ae9, 0x1af1, 0x1ae9, 0x1ae9, 0x1ae9, - 0x1af7, 0x1ae9, 0x1ae9, 0x1ae9, 0x1afd, 0x1ae9, 0x1ae9, 0x1ae9, - 0x1b03, 0x1ae9, 0x1ae9, 0x1ae9, 0x1b09, 0x1ae9, 0x1ae9, 0x1ae9, - 0x1b0f, 0x080c, 0x0db2, 0xa574, 0xa478, 0xa37c, 0xa280, 0x0804, - 0x1b81, 0xa584, 0xa488, 0xa38c, 0xa290, 0x0804, 0x1b81, 0xa594, - 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x1b81, 0xa5a4, 0xa4a8, 0xa3ac, - 0xa2b0, 0x0804, 0x1b81, 0xa5b4, 0xa4b8, 0xa3bc, 0xa2c0, 0x0804, - 0x1b81, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0, 0x0804, 0x1b81, 0xa5d4, - 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x1b81, 0x2c05, 0x908a, 0x0034, - 0x1a0c, 0x0db2, 0x9082, 0x001b, 0x0002, 0x1b38, 0x1b36, 0x1b36, - 0x1b36, 0x1b36, 0x1b36, 0x1b40, 0x1b36, 0x1b36, 0x1b36, 0x1b36, - 0x1b36, 0x1b47, 0x1b36, 0x1b36, 0x1b36, 0x1b36, 0x1b36, 0x1b4e, - 0x1b36, 0x1b36, 0x1b36, 0x1b36, 0x1b36, 0x1b55, 0x080c, 0x0db2, - 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c, 0xa280, 0x0804, 0x1b81, - 0xa584, 0xa488, 0xa78c, 0xa690, 0xa394, 0xa298, 0x04d0, 0xa59c, - 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0, 0x0498, 0xa5b4, 0xa4b8, - 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8, 0x0460, 0xa5cc, 0xa4d0, 0xa7d4, - 0xa6d8, 0xa3dc, 0xa2e0, 0x0428, 0xa864, 0x9084, 0x00ff, 0x9086, - 0x001e, 0x11e8, 0x080c, 0x1d60, 0x1904, 0x1a61, 0x900e, 0x04a0, - 0xa864, 0x9084, 0x00ff, 0x9086, 0x0048, 0x190c, 0x0db2, 0x00c6, - 0x7004, 0x2060, 0x6004, 0x9086, 0x0043, 0x00ce, 0x0904, 0x1b15, - 0xab9c, 0x9016, 0xad8c, 0xac90, 0xaf94, 0xae98, 0x0010, 0x080c, - 0x0db2, 0x7b12, 0x7a16, 0x7d02, 0x7c06, 0x7f0a, 0x7e0e, 0x782b, + 0x012e, 0x0005, 0xa804, 0x9045, 0x090c, 0x0dd5, 0xa80e, 0xa064, + 0xa81a, 0x9084, 0x000f, 0x9080, 0x1f4a, 0x2015, 0x82ff, 0x090c, + 0x0dd5, 0xaa12, 0x2205, 0xa80a, 0x0c18, 0x903e, 0x2730, 0xa880, + 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1987, 0x18b4, 0x18b4, 0x1987, + 0x18b4, 0x1981, 0x1987, 0x18b4, 0x1987, 0x1924, 0x1924, 0x1987, + 0x1924, 0x1987, 0x197e, 0x1924, 0xc0fc, 0xa882, 0xab2c, 0xaa30, + 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1989, 0x2c05, 0x908a, 0x0034, + 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x18a0, 0x189e, 0x189e, + 0x189e, 0x189e, 0x189e, 0x18a4, 0x189e, 0x189e, 0x189e, 0x189e, + 0x189e, 0x18a8, 0x189e, 0x189e, 0x189e, 0x189e, 0x189e, 0x18ac, + 0x189e, 0x189e, 0x189e, 0x189e, 0x189e, 0x18b0, 0x080c, 0x0dd5, + 0xa774, 0xa678, 0x0804, 0x1989, 0xa78c, 0xa690, 0x0804, 0x1989, + 0xa7a4, 0xa6a8, 0x0804, 0x1989, 0xa7bc, 0xa6c0, 0x0804, 0x1989, + 0xa7d4, 0xa6d8, 0x0804, 0x1989, 0xa898, 0x901d, 0x1108, 0xab9c, + 0x9016, 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0dd5, 0x9082, 0x001b, + 0x0002, 0x18dc, 0x18dc, 0x18de, 0x18dc, 0x18dc, 0x18dc, 0x18e8, + 0x18dc, 0x18dc, 0x18dc, 0x18f2, 0x18dc, 0x18dc, 0x18dc, 0x18fc, + 0x18dc, 0x18dc, 0x18dc, 0x1906, 0x18dc, 0x18dc, 0x18dc, 0x1910, + 0x18dc, 0x18dc, 0x18dc, 0x191a, 0x080c, 0x0dd5, 0xa574, 0xa478, + 0x9d86, 0x0004, 0x0904, 0x1989, 0xa37c, 0xa280, 0x0804, 0x1989, + 0xa584, 0xa488, 0x9d86, 0x0004, 0x0904, 0x1989, 0xa38c, 0xa290, + 0x0804, 0x1989, 0xa594, 0xa498, 0x9d86, 0x0004, 0x0904, 0x1989, + 0xa39c, 0xa2a0, 0x0804, 0x1989, 0xa5a4, 0xa4a8, 0x9d86, 0x0004, + 0x0904, 0x1989, 0xa3ac, 0xa2b0, 0x0804, 0x1989, 0xa5b4, 0xa4b8, + 0x9d86, 0x0004, 0x0904, 0x1989, 0xa3bc, 0xa2c0, 0x0804, 0x1989, + 0xa5c4, 0xa4c8, 0x9d86, 0x0004, 0x0904, 0x1989, 0xa3cc, 0xa2d0, + 0x0804, 0x1989, 0xa5d4, 0xa4d8, 0x9d86, 0x0004, 0x0904, 0x1989, + 0xa3dc, 0xa2e0, 0x0804, 0x1989, 0xa898, 0x901d, 0x1108, 0xab9c, + 0x9016, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dd5, 0x9082, 0x001b, + 0x0002, 0x194c, 0x194a, 0x194a, 0x194a, 0x194a, 0x194a, 0x1956, + 0x194a, 0x194a, 0x194a, 0x194a, 0x194a, 0x1960, 0x194a, 0x194a, + 0x194a, 0x194a, 0x194a, 0x196a, 0x194a, 0x194a, 0x194a, 0x194a, + 0x194a, 0x1974, 0x080c, 0x0dd5, 0xa56c, 0xa470, 0xa774, 0xa678, + 0x9d86, 0x000c, 0x05b0, 0xa37c, 0xa280, 0x0498, 0xa584, 0xa488, + 0xa78c, 0xa690, 0x9d86, 0x000c, 0x0560, 0xa394, 0xa298, 0x0448, + 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0x9d86, 0x000c, 0x0510, 0xa3ac, + 0xa2b0, 0x00f8, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0x9d86, 0x000c, + 0x01c0, 0xa3c4, 0xa2c8, 0x00a8, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, + 0x9d86, 0x000c, 0x0170, 0xa3dc, 0xa2e0, 0x0058, 0x9d86, 0x000e, + 0x1130, 0x080c, 0x1f08, 0x1904, 0x185d, 0x900e, 0x0050, 0x080c, + 0x0dd5, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c, + 0x1f08, 0x0005, 0x6014, 0x2048, 0x6118, 0x810c, 0x810c, 0x810c, + 0x81ff, 0x1118, 0xa887, 0x0001, 0x0008, 0xa986, 0x601b, 0x0002, + 0xa974, 0xd1dc, 0x1108, 0x0005, 0xa934, 0xa88c, 0x9106, 0x1158, + 0xa938, 0xa890, 0x9106, 0x1138, 0x601c, 0xc084, 0x601e, 0x2009, + 0x0048, 0x0804, 0xabe6, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, + 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000, 0x05b0, 0x9186, + 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0008, + 0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120, 0x080c, 0x1363, + 0x8631, 0x1db8, 0x00ce, 0x781f, 0x0800, 0x2031, 0x0168, 0x00c6, + 0x7808, 0xd09c, 0x190c, 0x1363, 0x00ce, 0x2001, 0x0038, 0x080c, + 0x1a8c, 0x7930, 0x9186, 0x0040, 0x0160, 0x9186, 0x0042, 0x190c, + 0x0dd5, 0x2001, 0x001e, 0x8001, 0x1df0, 0x8631, 0x1d40, 0x080c, + 0x1a9b, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c, 0x1a88, 0x7827, + 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0, 0x00f6, + 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c, + 0x717d, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160, + 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0, + 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x722d, 0x006e, 0x0005, + 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, + 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x2af6, 0x2009, 0x003c, + 0x080c, 0x2284, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, + 0x003c, 0x1de0, 0x080c, 0x81a6, 0x70a0, 0x70a2, 0x7098, 0x709a, + 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, + 0x0300, 0x080c, 0x1308, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, + 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, + 0x2003, 0x0000, 0x080c, 0x717d, 0x1108, 0x0005, 0x2021, 0x0260, + 0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, + 0x939c, 0x0048, 0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, + 0x8421, 0x1d70, 0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, + 0x2021, 0x0019, 0x2003, 0x0048, 0xa001, 0xa001, 0x201c, 0x939c, + 0x0048, 0x0120, 0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40, + 0x601c, 0xc084, 0x601e, 0x0005, 0x2c08, 0x621c, 0x080c, 0x15d1, + 0x7930, 0x0005, 0x2c08, 0x621c, 0x080c, 0x15fe, 0x7930, 0x0005, + 0x8001, 0x1df0, 0x0005, 0x2031, 0x0005, 0x781c, 0x9084, 0x0007, + 0x0170, 0x2001, 0x0038, 0x0c41, 0x9186, 0x0040, 0x0904, 0x1af9, + 0x2001, 0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c, 0x0dd5, 0x781f, + 0x0202, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0b10, 0x0c01, + 0x781c, 0xd084, 0x0110, 0x0861, 0x04e0, 0x2001, 0x0030, 0x0891, + 0x9186, 0x0040, 0x0568, 0x781c, 0xd084, 0x1da8, 0x781f, 0x0101, + 0x2001, 0x0014, 0x0869, 0x2001, 0x0037, 0x0821, 0x9186, 0x0040, + 0x0140, 0x2001, 0x0030, 0x080c, 0x1a92, 0x9186, 0x0040, 0x190c, + 0x0dd5, 0x00d6, 0x2069, 0x0200, 0x692c, 0xd1f4, 0x1170, 0xd1c4, + 0x0160, 0xd19c, 0x0130, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, + 0x0080, 0x6908, 0x9184, 0x0007, 0x1db0, 0x00de, 0x781f, 0x0100, + 0x791c, 0x9184, 0x0007, 0x090c, 0x0dd5, 0xa001, 0xa001, 0x781f, + 0x0200, 0x0005, 0x0126, 0x2091, 0x2400, 0x2071, 0x1a64, 0x2079, + 0x0090, 0x012e, 0x0005, 0x9280, 0x0005, 0x2004, 0x2048, 0xa97c, + 0xd1dc, 0x1904, 0x1b8b, 0xa964, 0x9184, 0x0007, 0x0002, 0x1b17, + 0x1b76, 0x1b1e, 0x1b20, 0x1b1e, 0x1b5e, 0x1b3e, 0x1b2d, 0x2100, + 0x9084, 0x00ff, 0x9086, 0x0048, 0x0904, 0x1b76, 0x080c, 0x0dd5, + 0x9184, 0x00ff, 0x9086, 0x0013, 0x0904, 0x1b76, 0x9184, 0x00ff, + 0x9086, 0x001b, 0x0904, 0x1b76, 0x0c88, 0xa87c, 0xd0b4, 0x0904, + 0x1d4b, 0xa890, 0xa842, 0xa83a, 0xa88c, 0xa83e, 0xa836, 0xa8ac, + 0xa846, 0xa8b0, 0xa84a, 0xa988, 0x0804, 0x1b7e, 0xa864, 0x9084, + 0x00ff, 0x9086, 0x001e, 0x19d0, 0xa87c, 0xd0b4, 0x0904, 0x1d4b, + 0xa890, 0xa842, 0xa83a, 0xa88c, 0xa83e, 0xa836, 0xa8ac, 0xa846, + 0xa8b0, 0xa84a, 0xa804, 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f, + 0x9080, 0x1f4a, 0x2005, 0xa812, 0xa988, 0x0448, 0x918c, 0x00ff, + 0x9186, 0x0015, 0x1540, 0xa87c, 0xd0b4, 0x0904, 0x1d4b, 0xa804, + 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f, 0x9080, 0x1f4a, 0x2005, + 0xa812, 0xa988, 0x9006, 0xa842, 0xa83e, 0x0088, 0xa87c, 0xd0b4, + 0x0904, 0x1d4b, 0xa988, 0x9006, 0xa842, 0xa83e, 0x2900, 0xa85a, + 0xa864, 0x9084, 0x000f, 0x9080, 0x1f4a, 0x2005, 0xa812, 0xa916, + 0xa87c, 0xc0dd, 0xa87e, 0x0005, 0x00f6, 0x2079, 0x0090, 0x782c, + 0xd0fc, 0x190c, 0x1d8c, 0x00e6, 0x2071, 0x1a64, 0x7000, 0x9005, + 0x1904, 0x1be5, 0x7206, 0x9280, 0x0005, 0x204c, 0x9280, 0x0004, + 0x2004, 0x782b, 0x0004, 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040, + 0x00fe, 0x00b6, 0x2058, 0xb86c, 0x7836, 0xb890, 0x00be, 0x00f6, + 0x2079, 0x0200, 0x7803, 0x0040, 0xa001, 0xa001, 0xa001, 0xa001, + 0xa001, 0xa001, 0x781a, 0x2079, 0x0100, 0x8004, 0x78d6, 0x00fe, + 0xa814, 0x2050, 0xa858, 0x2040, 0xa810, 0x2060, 0xa064, 0x90ec, + 0x000f, 0xa944, 0x791a, 0x7116, 0xa848, 0x781e, 0x701a, 0x9006, + 0x700e, 0x7012, 0x7004, 0xa940, 0xa838, 0x9106, 0x1188, 0xa93c, + 0xa834, 0x9106, 0x1168, 0x8aff, 0x01a8, 0x0126, 0x2091, 0x8000, + 0x00a1, 0x0108, 0x0091, 0x012e, 0x9006, 0x00ee, 0x00fe, 0x0005, + 0x0036, 0x0046, 0xab38, 0xac34, 0x080c, 0x1f6a, 0x004e, 0x003e, + 0x0d50, 0x0c98, 0x9085, 0x0001, 0x0c80, 0x0076, 0x0066, 0x0056, + 0x0046, 0x0036, 0x0026, 0x8aff, 0x0904, 0x1d44, 0x700c, 0x7214, + 0x923a, 0x7010, 0x7218, 0x9203, 0x0a04, 0x1d43, 0x9705, 0x0904, + 0x1d43, 0x903e, 0x2730, 0xa880, 0xd0fc, 0x1190, 0x2d00, 0x0002, + 0x1d1c, 0x1c60, 0x1c60, 0x1d1c, 0x1d1c, 0x1cfe, 0x1d1c, 0x1c60, + 0x1d05, 0x1caf, 0x1caf, 0x1d1c, 0x1d1c, 0x1d1c, 0x1cf8, 0x1caf, + 0xc0fc, 0xa882, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, + 0x1d29, 0x2c05, 0x908a, 0x0034, 0x1a0c, 0x0dd5, 0x9082, 0x001b, + 0x0002, 0x1c4c, 0x1c4a, 0x1c4a, 0x1c4a, 0x1c4a, 0x1c4a, 0x1c50, + 0x1c4a, 0x1c4a, 0x1c4a, 0x1c4a, 0x1c4a, 0x1c54, 0x1c4a, 0x1c4a, + 0x1c4a, 0x1c4a, 0x1c4a, 0x1c58, 0x1c4a, 0x1c4a, 0x1c4a, 0x1c4a, + 0x1c4a, 0x1c5c, 0x080c, 0x0dd5, 0xa774, 0xa678, 0x0804, 0x1d29, + 0xa78c, 0xa690, 0x0804, 0x1d29, 0xa7a4, 0xa6a8, 0x0804, 0x1d29, + 0xa7bc, 0xa6c0, 0x0804, 0x1d29, 0xa7d4, 0xa6d8, 0x0804, 0x1d29, + 0x2c05, 0x908a, 0x0036, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, + 0x1c83, 0x1c83, 0x1c85, 0x1c83, 0x1c83, 0x1c83, 0x1c8b, 0x1c83, + 0x1c83, 0x1c83, 0x1c91, 0x1c83, 0x1c83, 0x1c83, 0x1c97, 0x1c83, + 0x1c83, 0x1c83, 0x1c9d, 0x1c83, 0x1c83, 0x1c83, 0x1ca3, 0x1c83, + 0x1c83, 0x1c83, 0x1ca9, 0x080c, 0x0dd5, 0xa574, 0xa478, 0xa37c, + 0xa280, 0x0804, 0x1d29, 0xa584, 0xa488, 0xa38c, 0xa290, 0x0804, + 0x1d29, 0xa594, 0xa498, 0xa39c, 0xa2a0, 0x0804, 0x1d29, 0xa5a4, + 0xa4a8, 0xa3ac, 0xa2b0, 0x0804, 0x1d29, 0xa5b4, 0xa4b8, 0xa3bc, + 0xa2c0, 0x0804, 0x1d29, 0xa5c4, 0xa4c8, 0xa3cc, 0xa2d0, 0x0804, + 0x1d29, 0xa5d4, 0xa4d8, 0xa3dc, 0xa2e0, 0x0804, 0x1d29, 0x2c05, + 0x908a, 0x0034, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x1cd2, + 0x1cd0, 0x1cd0, 0x1cd0, 0x1cd0, 0x1cd0, 0x1cda, 0x1cd0, 0x1cd0, + 0x1cd0, 0x1cd0, 0x1cd0, 0x1ce2, 0x1cd0, 0x1cd0, 0x1cd0, 0x1cd0, + 0x1cd0, 0x1cea, 0x1cd0, 0x1cd0, 0x1cd0, 0x1cd0, 0x1cd0, 0x1cf1, + 0x080c, 0x0dd5, 0xa56c, 0xa470, 0xa774, 0xa678, 0xa37c, 0xa280, + 0x0804, 0x1d29, 0xa584, 0xa488, 0xa78c, 0xa690, 0xa394, 0xa298, + 0x0804, 0x1d29, 0xa59c, 0xa4a0, 0xa7a4, 0xa6a8, 0xa3ac, 0xa2b0, + 0x0804, 0x1d29, 0xa5b4, 0xa4b8, 0xa7bc, 0xa6c0, 0xa3c4, 0xa2c8, + 0x04c0, 0xa5cc, 0xa4d0, 0xa7d4, 0xa6d8, 0xa3dc, 0xa2e0, 0x0488, + 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x11f0, 0x080c, 0x1f08, + 0x1904, 0x1bfb, 0x900e, 0x0804, 0x1d44, 0xa864, 0x9084, 0x00ff, + 0x9086, 0x0048, 0x190c, 0x0dd5, 0x00c6, 0x7004, 0x2060, 0x6004, + 0x9086, 0x0043, 0x00ce, 0x0904, 0x1caf, 0xab9c, 0x9016, 0xad8c, + 0xac90, 0xaf94, 0xae98, 0x0068, 0xa964, 0x918c, 0x00ff, 0x9186, + 0x0013, 0x0904, 0x1c60, 0x9186, 0x001b, 0x0904, 0x1caf, 0x080c, + 0x0dd5, 0x7b12, 0x7a16, 0x7d02, 0x7c06, 0x7f0a, 0x7e0e, 0x782b, 0x0001, 0x7000, 0x8000, 0x7002, 0xa83c, 0x9300, 0xa83e, 0xa840, 0x9201, 0xa842, 0x700c, 0x9300, 0x700e, 0x7010, 0x9201, 0x7012, - 0x080c, 0x1d60, 0x0008, 0x9006, 0x002e, 0x003e, 0x004e, 0x005e, - 0x006e, 0x007e, 0x0005, 0x080c, 0x0db2, 0x0026, 0x2001, 0x0105, + 0x080c, 0x1f08, 0x0008, 0x9006, 0x002e, 0x003e, 0x004e, 0x005e, + 0x006e, 0x007e, 0x0005, 0x080c, 0x0dd5, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003, 0x0000, 0x7004, 0x2060, - 0x6014, 0x2048, 0x080c, 0xb5fb, 0x0118, 0xa880, 0xc0bd, 0xa882, + 0x6014, 0x2048, 0x080c, 0xc825, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89a, - 0x60c8, 0xa896, 0x7004, 0x2060, 0x00c6, 0x080c, 0xb251, 0x00ce, - 0x2001, 0x19c5, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c, - 0x20d9, 0x080c, 0x9479, 0x2011, 0x0000, 0x080c, 0x92f6, 0x080c, - 0x865d, 0x002e, 0x0804, 0x1d12, 0x0126, 0x2091, 0x2400, 0xa858, - 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1ba5, - 0x7000, 0x0002, 0x1d12, 0x1bf6, 0x1c63, 0x1d10, 0x8001, 0x7002, - 0xd19c, 0x1150, 0x8aff, 0x05b0, 0x080c, 0x1a5b, 0x0904, 0x1d12, - 0x080c, 0x1a5b, 0x0804, 0x1d12, 0x782b, 0x0004, 0xd194, 0x0148, + 0x60c8, 0xa896, 0x7004, 0x2060, 0x00c6, 0x080c, 0xc472, 0x00ce, + 0x2001, 0x19f4, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c, + 0x2284, 0x080c, 0xa4d6, 0x2011, 0x0000, 0x080c, 0xa353, 0x080c, + 0x9548, 0x002e, 0x0804, 0x1eba, 0x0126, 0x2091, 0x2400, 0xa858, + 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d4d, + 0x7000, 0x0002, 0x1eba, 0x1d9e, 0x1e0b, 0x1eb8, 0x8001, 0x7002, + 0xd19c, 0x1150, 0x8aff, 0x05b0, 0x080c, 0x1bf5, 0x0904, 0x1eba, + 0x080c, 0x1bf5, 0x0804, 0x1eba, 0x782b, 0x0004, 0xd194, 0x0148, 0xa880, 0xc0fc, 0xa882, 0x8aff, 0x11d8, 0xa87c, 0xc0f5, 0xa87e, 0x00b8, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x7810, 0xa82e, 0x931a, 0x7814, 0xa832, 0x9213, 0x7800, 0xa81e, 0x7804, 0xa822, 0xab3e, - 0xaa42, 0x003e, 0x002e, 0x080c, 0x1d78, 0xa880, 0xc0fd, 0xa882, + 0xaa42, 0x003e, 0x002e, 0x080c, 0x1f20, 0xa880, 0xc0fd, 0xa882, 0x2a00, 0xa816, 0x2800, 0xa85a, 0x2c00, 0xa812, 0x7003, 0x0000, - 0x0804, 0x1d12, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818, 0x0006, + 0x0804, 0x1eba, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816, - 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0db2, 0x7820, 0xd0bc, + 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0dd5, 0x7820, 0xd0bc, 0x1dd0, 0x003e, 0x79c8, 0x000e, 0x9102, 0x001e, 0x0006, 0x0016, 0x79c4, 0x000e, 0x9103, 0x78c6, 0x000e, 0x78ca, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816, 0x002e, 0x00fe, 0x782b, 0x0008, 0x7003, - 0x0000, 0x0804, 0x1d12, 0x8001, 0x7002, 0xd194, 0x0170, 0x782c, - 0xd0fc, 0x1904, 0x1be9, 0xd19c, 0x1904, 0x1d0e, 0x8aff, 0x0904, - 0x1d12, 0x080c, 0x1a5b, 0x0804, 0x1d12, 0x0026, 0x0036, 0xab3c, - 0xaa40, 0x080c, 0x1d78, 0xdd9c, 0x1904, 0x1ccd, 0x2c05, 0x908a, - 0x0036, 0x1a0c, 0x0db2, 0x9082, 0x001b, 0x0002, 0x1ca1, 0x1ca1, - 0x1ca3, 0x1ca1, 0x1ca1, 0x1ca1, 0x1ca9, 0x1ca1, 0x1ca1, 0x1ca1, - 0x1caf, 0x1ca1, 0x1ca1, 0x1ca1, 0x1cb5, 0x1ca1, 0x1ca1, 0x1ca1, - 0x1cbb, 0x1ca1, 0x1ca1, 0x1ca1, 0x1cc1, 0x1ca1, 0x1ca1, 0x1ca1, - 0x1cc7, 0x080c, 0x0db2, 0xa07c, 0x931a, 0xa080, 0x9213, 0x0804, - 0x1c15, 0xa08c, 0x931a, 0xa090, 0x9213, 0x0804, 0x1c15, 0xa09c, - 0x931a, 0xa0a0, 0x9213, 0x0804, 0x1c15, 0xa0ac, 0x931a, 0xa0b0, - 0x9213, 0x0804, 0x1c15, 0xa0bc, 0x931a, 0xa0c0, 0x9213, 0x0804, - 0x1c15, 0xa0cc, 0x931a, 0xa0d0, 0x9213, 0x0804, 0x1c15, 0xa0dc, - 0x931a, 0xa0e0, 0x9213, 0x0804, 0x1c15, 0x2c05, 0x908a, 0x0034, - 0x1a0c, 0x0db2, 0x9082, 0x001b, 0x0002, 0x1cf0, 0x1cee, 0x1cee, - 0x1cee, 0x1cee, 0x1cee, 0x1cf6, 0x1cee, 0x1cee, 0x1cee, 0x1cee, - 0x1cee, 0x1cfc, 0x1cee, 0x1cee, 0x1cee, 0x1cee, 0x1cee, 0x1d02, - 0x1cee, 0x1cee, 0x1cee, 0x1cee, 0x1cee, 0x1d08, 0x080c, 0x0db2, - 0xa07c, 0x931a, 0xa080, 0x9213, 0x0804, 0x1c15, 0xa094, 0x931a, - 0xa098, 0x9213, 0x0804, 0x1c15, 0xa0ac, 0x931a, 0xa0b0, 0x9213, - 0x0804, 0x1c15, 0xa0c4, 0x931a, 0xa0c8, 0x9213, 0x0804, 0x1c15, - 0xa0dc, 0x931a, 0xa0e0, 0x9213, 0x0804, 0x1c15, 0x0804, 0x1c11, - 0x080c, 0x0db2, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a34, - 0x7000, 0x9086, 0x0000, 0x0904, 0x1d5d, 0x2079, 0x0090, 0x2009, + 0x0000, 0x0804, 0x1eba, 0x8001, 0x7002, 0xd194, 0x0170, 0x782c, + 0xd0fc, 0x1904, 0x1d91, 0xd19c, 0x1904, 0x1eb6, 0x8aff, 0x0904, + 0x1eba, 0x080c, 0x1bf5, 0x0804, 0x1eba, 0x0026, 0x0036, 0xab3c, + 0xaa40, 0x080c, 0x1f20, 0xdd9c, 0x1904, 0x1e75, 0x2c05, 0x908a, + 0x0036, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x1e49, 0x1e49, + 0x1e4b, 0x1e49, 0x1e49, 0x1e49, 0x1e51, 0x1e49, 0x1e49, 0x1e49, + 0x1e57, 0x1e49, 0x1e49, 0x1e49, 0x1e5d, 0x1e49, 0x1e49, 0x1e49, + 0x1e63, 0x1e49, 0x1e49, 0x1e49, 0x1e69, 0x1e49, 0x1e49, 0x1e49, + 0x1e6f, 0x080c, 0x0dd5, 0xa07c, 0x931a, 0xa080, 0x9213, 0x0804, + 0x1dbd, 0xa08c, 0x931a, 0xa090, 0x9213, 0x0804, 0x1dbd, 0xa09c, + 0x931a, 0xa0a0, 0x9213, 0x0804, 0x1dbd, 0xa0ac, 0x931a, 0xa0b0, + 0x9213, 0x0804, 0x1dbd, 0xa0bc, 0x931a, 0xa0c0, 0x9213, 0x0804, + 0x1dbd, 0xa0cc, 0x931a, 0xa0d0, 0x9213, 0x0804, 0x1dbd, 0xa0dc, + 0x931a, 0xa0e0, 0x9213, 0x0804, 0x1dbd, 0x2c05, 0x908a, 0x0034, + 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x1e98, 0x1e96, 0x1e96, + 0x1e96, 0x1e96, 0x1e96, 0x1e9e, 0x1e96, 0x1e96, 0x1e96, 0x1e96, + 0x1e96, 0x1ea4, 0x1e96, 0x1e96, 0x1e96, 0x1e96, 0x1e96, 0x1eaa, + 0x1e96, 0x1e96, 0x1e96, 0x1e96, 0x1e96, 0x1eb0, 0x080c, 0x0dd5, + 0xa07c, 0x931a, 0xa080, 0x9213, 0x0804, 0x1dbd, 0xa094, 0x931a, + 0xa098, 0x9213, 0x0804, 0x1dbd, 0xa0ac, 0x931a, 0xa0b0, 0x9213, + 0x0804, 0x1dbd, 0xa0c4, 0x931a, 0xa0c8, 0x9213, 0x0804, 0x1dbd, + 0xa0dc, 0x931a, 0xa0e0, 0x9213, 0x0804, 0x1dbd, 0x0804, 0x1db9, + 0x080c, 0x0dd5, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a64, + 0x7000, 0x9086, 0x0000, 0x0904, 0x1f05, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, - 0x0003, 0x0188, 0x080c, 0xd364, 0x2001, 0x0133, 0x2004, 0x9005, - 0x090c, 0x0db2, 0x0016, 0x2009, 0x0040, 0x080c, 0x20d9, 0x001e, + 0x0003, 0x0188, 0x080c, 0xe6ad, 0x2001, 0x0133, 0x2004, 0x9005, + 0x090c, 0x0dd5, 0x0016, 0x2009, 0x0040, 0x080c, 0x2284, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, - 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x20d9, 0x782c, - 0xd0fc, 0x09a8, 0x080c, 0x1be4, 0x7000, 0x9086, 0x0000, 0x1978, + 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x2284, 0x782c, + 0xd0fc, 0x09a8, 0x080c, 0x1d8c, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, - 0x20d9, 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, + 0x2284, 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51, 0x0005, 0xa004, 0x9005, - 0x0168, 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f, 0x9080, 0x1da2, - 0x2065, 0x8cff, 0x090c, 0x0db2, 0x8a51, 0x0005, 0x2050, 0x0005, + 0x0168, 0xa85a, 0x2040, 0xa064, 0x9084, 0x000f, 0x9080, 0x1f4a, + 0x2065, 0x8cff, 0x090c, 0x0dd5, 0x8a51, 0x0005, 0x2050, 0x0005, 0x8a50, 0x8c61, 0x2c05, 0x9005, 0x1190, 0x2800, 0x9906, 0x0120, 0xa000, 0x9005, 0x1108, 0x2900, 0x2040, 0xa85a, 0xa064, 0x9084, - 0x000f, 0x9080, 0x1db2, 0x2065, 0x8cff, 0x090c, 0x0db2, 0x0005, + 0x000f, 0x9080, 0x1f5a, 0x2065, 0x8cff, 0x090c, 0x0dd5, 0x0005, 0x0000, 0x001d, 0x0021, 0x0025, 0x0029, 0x002d, 0x0031, 0x0035, 0x0000, 0x001b, 0x0021, 0x0027, 0x002d, 0x0033, 0x0000, 0x0000, - 0x0023, 0x0000, 0x0000, 0x1d95, 0x1d91, 0x0000, 0x0000, 0x1d9f, - 0x0000, 0x1d95, 0x1d9c, 0x1d9c, 0x1d99, 0x0000, 0x0000, 0x0000, - 0x1d9f, 0x1d9c, 0x0000, 0x1d97, 0x1d97, 0x0000, 0x0000, 0x1d9f, - 0x0000, 0x1d97, 0x1d9d, 0x1d9d, 0x1d9d, 0x0000, 0x0000, 0x0000, - 0x1d9f, 0x1d9d, 0x00c6, 0x00d6, 0x0086, 0xab42, 0xac3e, 0xa888, - 0x9055, 0x0904, 0x1f99, 0x2940, 0xa064, 0x90ec, 0x000f, 0x9de0, - 0x1da2, 0x9d86, 0x0007, 0x0130, 0x9d86, 0x000e, 0x0118, 0x9d86, + 0x0023, 0x0000, 0x0000, 0x1f3d, 0x1f39, 0x1f3d, 0x1f3d, 0x1f47, + 0x0000, 0x1f3d, 0x1f44, 0x1f44, 0x1f41, 0x1f44, 0x1f44, 0x0000, + 0x1f47, 0x1f44, 0x0000, 0x1f3f, 0x1f3f, 0x0000, 0x1f3f, 0x1f47, + 0x0000, 0x1f3f, 0x1f45, 0x1f45, 0x1f45, 0x0000, 0x1f45, 0x0000, + 0x1f47, 0x1f45, 0x00c6, 0x00d6, 0x0086, 0xab42, 0xac3e, 0xa888, + 0x9055, 0x0904, 0x2141, 0x2940, 0xa064, 0x90ec, 0x000f, 0x9de0, + 0x1f4a, 0x9d86, 0x0007, 0x0130, 0x9d86, 0x000e, 0x0118, 0x9d86, 0x000f, 0x1120, 0xa08c, 0x9422, 0xa090, 0x931b, 0x2c05, 0x9065, - 0x1140, 0x0310, 0x0804, 0x1f99, 0xa004, 0x9045, 0x0904, 0x1f99, - 0x0c18, 0x2c05, 0x9005, 0x0904, 0x1e81, 0xdd9c, 0x1904, 0x1e3d, - 0x908a, 0x0036, 0x1a0c, 0x0db2, 0x9082, 0x001b, 0x0002, 0x1e12, - 0x1e12, 0x1e14, 0x1e12, 0x1e12, 0x1e12, 0x1e1a, 0x1e12, 0x1e12, - 0x1e12, 0x1e20, 0x1e12, 0x1e12, 0x1e12, 0x1e26, 0x1e12, 0x1e12, - 0x1e12, 0x1e2c, 0x1e12, 0x1e12, 0x1e12, 0x1e32, 0x1e12, 0x1e12, - 0x1e12, 0x1e38, 0x080c, 0x0db2, 0xa07c, 0x9422, 0xa080, 0x931b, - 0x0804, 0x1e77, 0xa08c, 0x9422, 0xa090, 0x931b, 0x0804, 0x1e77, - 0xa09c, 0x9422, 0xa0a0, 0x931b, 0x0804, 0x1e77, 0xa0ac, 0x9422, - 0xa0b0, 0x931b, 0x0804, 0x1e77, 0xa0bc, 0x9422, 0xa0c0, 0x931b, - 0x0804, 0x1e77, 0xa0cc, 0x9422, 0xa0d0, 0x931b, 0x0804, 0x1e77, + 0x1140, 0x0310, 0x0804, 0x2141, 0xa004, 0x9045, 0x0904, 0x2141, + 0x0c18, 0x2c05, 0x9005, 0x0904, 0x2029, 0xdd9c, 0x1904, 0x1fe5, + 0x908a, 0x0036, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x1fba, + 0x1fba, 0x1fbc, 0x1fba, 0x1fba, 0x1fba, 0x1fc2, 0x1fba, 0x1fba, + 0x1fba, 0x1fc8, 0x1fba, 0x1fba, 0x1fba, 0x1fce, 0x1fba, 0x1fba, + 0x1fba, 0x1fd4, 0x1fba, 0x1fba, 0x1fba, 0x1fda, 0x1fba, 0x1fba, + 0x1fba, 0x1fe0, 0x080c, 0x0dd5, 0xa07c, 0x9422, 0xa080, 0x931b, + 0x0804, 0x201f, 0xa08c, 0x9422, 0xa090, 0x931b, 0x0804, 0x201f, + 0xa09c, 0x9422, 0xa0a0, 0x931b, 0x0804, 0x201f, 0xa0ac, 0x9422, + 0xa0b0, 0x931b, 0x0804, 0x201f, 0xa0bc, 0x9422, 0xa0c0, 0x931b, + 0x0804, 0x201f, 0xa0cc, 0x9422, 0xa0d0, 0x931b, 0x0804, 0x201f, 0xa0dc, 0x9422, 0xa0e0, 0x931b, 0x04d0, 0x908a, 0x0034, 0x1a0c, - 0x0db2, 0x9082, 0x001b, 0x0002, 0x1e5f, 0x1e5d, 0x1e5d, 0x1e5d, - 0x1e5d, 0x1e5d, 0x1e64, 0x1e5d, 0x1e5d, 0x1e5d, 0x1e5d, 0x1e5d, - 0x1e69, 0x1e5d, 0x1e5d, 0x1e5d, 0x1e5d, 0x1e5d, 0x1e6e, 0x1e5d, - 0x1e5d, 0x1e5d, 0x1e5d, 0x1e5d, 0x1e73, 0x080c, 0x0db2, 0xa07c, + 0x0dd5, 0x9082, 0x001b, 0x0002, 0x2007, 0x2005, 0x2005, 0x2005, + 0x2005, 0x2005, 0x200c, 0x2005, 0x2005, 0x2005, 0x2005, 0x2005, + 0x2011, 0x2005, 0x2005, 0x2005, 0x2005, 0x2005, 0x2016, 0x2005, + 0x2005, 0x2005, 0x2005, 0x2005, 0x201b, 0x080c, 0x0dd5, 0xa07c, 0x9422, 0xa080, 0x931b, 0x0098, 0xa094, 0x9422, 0xa098, 0x931b, 0x0070, 0xa0ac, 0x9422, 0xa0b0, 0x931b, 0x0048, 0xa0c4, 0x9422, 0xa0c8, 0x931b, 0x0020, 0xa0dc, 0x9422, 0xa0e0, 0x931b, 0x0630, - 0x2300, 0x9405, 0x0160, 0x8a51, 0x0904, 0x1f99, 0x8c60, 0x0804, - 0x1de9, 0xa004, 0x9045, 0x0904, 0x1f99, 0x0804, 0x1dcc, 0x8a51, - 0x0904, 0x1f99, 0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, - 0x0904, 0x1f99, 0xa064, 0x90ec, 0x000f, 0x9de0, 0x1da2, 0x2c05, - 0x2060, 0xa880, 0xc0fc, 0xa882, 0x0804, 0x1f8e, 0x2c05, 0x8422, + 0x2300, 0x9405, 0x0160, 0x8a51, 0x0904, 0x2141, 0x8c60, 0x0804, + 0x1f91, 0xa004, 0x9045, 0x0904, 0x2141, 0x0804, 0x1f74, 0x8a51, + 0x0904, 0x2141, 0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, + 0x0904, 0x2141, 0xa064, 0x90ec, 0x000f, 0x9de0, 0x1f4a, 0x2c05, + 0x2060, 0xa880, 0xc0fc, 0xa882, 0x0804, 0x2136, 0x2c05, 0x8422, 0x8420, 0x831a, 0x9399, 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, - 0x1f2b, 0x9082, 0x001b, 0x0002, 0x1ec7, 0x1ec7, 0x1ec9, 0x1ec7, - 0x1ec7, 0x1ec7, 0x1ed7, 0x1ec7, 0x1ec7, 0x1ec7, 0x1ee5, 0x1ec7, - 0x1ec7, 0x1ec7, 0x1ef3, 0x1ec7, 0x1ec7, 0x1ec7, 0x1f01, 0x1ec7, - 0x1ec7, 0x1ec7, 0x1f0f, 0x1ec7, 0x1ec7, 0x1ec7, 0x1f1d, 0x080c, - 0x0db2, 0xa17c, 0x2400, 0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, - 0x0db2, 0xa074, 0x9420, 0xa078, 0x9319, 0x0804, 0x1f89, 0xa18c, - 0x2400, 0x9122, 0xa190, 0x2300, 0x911b, 0x0a0c, 0x0db2, 0xa084, - 0x9420, 0xa088, 0x9319, 0x0804, 0x1f89, 0xa19c, 0x2400, 0x9122, - 0xa1a0, 0x2300, 0x911b, 0x0a0c, 0x0db2, 0xa094, 0x9420, 0xa098, - 0x9319, 0x0804, 0x1f89, 0xa1ac, 0x2400, 0x9122, 0xa1b0, 0x2300, - 0x911b, 0x0a0c, 0x0db2, 0xa0a4, 0x9420, 0xa0a8, 0x9319, 0x0804, - 0x1f89, 0xa1bc, 0x2400, 0x9122, 0xa1c0, 0x2300, 0x911b, 0x0a0c, - 0x0db2, 0xa0b4, 0x9420, 0xa0b8, 0x9319, 0x0804, 0x1f89, 0xa1cc, - 0x2400, 0x9122, 0xa1d0, 0x2300, 0x911b, 0x0a0c, 0x0db2, 0xa0c4, - 0x9420, 0xa0c8, 0x9319, 0x0804, 0x1f89, 0xa1dc, 0x2400, 0x9122, - 0xa1e0, 0x2300, 0x911b, 0x0a0c, 0x0db2, 0xa0d4, 0x9420, 0xa0d8, - 0x9319, 0x0804, 0x1f89, 0x9082, 0x001b, 0x0002, 0x1f49, 0x1f47, - 0x1f47, 0x1f47, 0x1f47, 0x1f47, 0x1f56, 0x1f47, 0x1f47, 0x1f47, - 0x1f47, 0x1f47, 0x1f63, 0x1f47, 0x1f47, 0x1f47, 0x1f47, 0x1f47, - 0x1f70, 0x1f47, 0x1f47, 0x1f47, 0x1f47, 0x1f47, 0x1f7d, 0x080c, - 0x0db2, 0xa17c, 0x2400, 0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, - 0x0db2, 0xa06c, 0x9420, 0xa070, 0x9319, 0x0498, 0xa194, 0x2400, - 0x9122, 0xa198, 0x2300, 0x911b, 0x0a0c, 0x0db2, 0xa084, 0x9420, + 0x20d3, 0x9082, 0x001b, 0x0002, 0x206f, 0x206f, 0x2071, 0x206f, + 0x206f, 0x206f, 0x207f, 0x206f, 0x206f, 0x206f, 0x208d, 0x206f, + 0x206f, 0x206f, 0x209b, 0x206f, 0x206f, 0x206f, 0x20a9, 0x206f, + 0x206f, 0x206f, 0x20b7, 0x206f, 0x206f, 0x206f, 0x20c5, 0x080c, + 0x0dd5, 0xa17c, 0x2400, 0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, + 0x0dd5, 0xa074, 0x9420, 0xa078, 0x9319, 0x0804, 0x2131, 0xa18c, + 0x2400, 0x9122, 0xa190, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa084, + 0x9420, 0xa088, 0x9319, 0x0804, 0x2131, 0xa19c, 0x2400, 0x9122, + 0xa1a0, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa094, 0x9420, 0xa098, + 0x9319, 0x0804, 0x2131, 0xa1ac, 0x2400, 0x9122, 0xa1b0, 0x2300, + 0x911b, 0x0a0c, 0x0dd5, 0xa0a4, 0x9420, 0xa0a8, 0x9319, 0x0804, + 0x2131, 0xa1bc, 0x2400, 0x9122, 0xa1c0, 0x2300, 0x911b, 0x0a0c, + 0x0dd5, 0xa0b4, 0x9420, 0xa0b8, 0x9319, 0x0804, 0x2131, 0xa1cc, + 0x2400, 0x9122, 0xa1d0, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa0c4, + 0x9420, 0xa0c8, 0x9319, 0x0804, 0x2131, 0xa1dc, 0x2400, 0x9122, + 0xa1e0, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa0d4, 0x9420, 0xa0d8, + 0x9319, 0x0804, 0x2131, 0x9082, 0x001b, 0x0002, 0x20f1, 0x20ef, + 0x20ef, 0x20ef, 0x20ef, 0x20ef, 0x20fe, 0x20ef, 0x20ef, 0x20ef, + 0x20ef, 0x20ef, 0x210b, 0x20ef, 0x20ef, 0x20ef, 0x20ef, 0x20ef, + 0x2118, 0x20ef, 0x20ef, 0x20ef, 0x20ef, 0x20ef, 0x2125, 0x080c, + 0x0dd5, 0xa17c, 0x2400, 0x9122, 0xa180, 0x2300, 0x911b, 0x0a0c, + 0x0dd5, 0xa06c, 0x9420, 0xa070, 0x9319, 0x0498, 0xa194, 0x2400, + 0x9122, 0xa198, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa084, 0x9420, 0xa088, 0x9319, 0x0430, 0xa1ac, 0x2400, 0x9122, 0xa1b0, 0x2300, - 0x911b, 0x0a0c, 0x0db2, 0xa09c, 0x9420, 0xa0a0, 0x9319, 0x00c8, - 0xa1c4, 0x2400, 0x9122, 0xa1c8, 0x2300, 0x911b, 0x0a0c, 0x0db2, + 0x911b, 0x0a0c, 0x0dd5, 0xa09c, 0x9420, 0xa0a0, 0x9319, 0x00c8, + 0xa1c4, 0x2400, 0x9122, 0xa1c8, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa0b4, 0x9420, 0xa0b8, 0x9319, 0x0060, 0xa1dc, 0x2400, 0x9122, - 0xa1e0, 0x2300, 0x911b, 0x0a0c, 0x0db2, 0xa0cc, 0x9420, 0xa0d0, + 0xa1e0, 0x2300, 0x911b, 0x0a0c, 0x0dd5, 0xa0cc, 0x9420, 0xa0d0, 0x9319, 0xac1e, 0xab22, 0xa880, 0xc0fd, 0xa882, 0x2800, 0xa85a, 0x2c00, 0xa812, 0x2a00, 0xa816, 0x000e, 0x000e, 0x000e, 0x9006, 0x0028, 0x008e, 0x00de, 0x00ce, 0x9085, 0x0001, 0x0005, 0x2001, - 0x0005, 0x2004, 0x9084, 0x0007, 0x0002, 0x1fb7, 0x1be4, 0x1fb7, - 0x1fad, 0x1fb0, 0x1fb3, 0x1fb0, 0x1fb3, 0x080c, 0x1be4, 0x0005, - 0x080c, 0x116f, 0x0005, 0x080c, 0x1be4, 0x080c, 0x116f, 0x0005, - 0x0126, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x0260, 0x2069, - 0x1800, 0x7817, 0x0000, 0x789b, 0x0814, 0x78a3, 0x0406, 0x789f, - 0x0410, 0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002, 0x783b, - 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005, 0x2091, - 0x2600, 0x781c, 0xd0a4, 0x190c, 0x20d6, 0x7900, 0xd1dc, 0x1118, - 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x1ffe, 0x1ff6, - 0x7597, 0x1ff6, 0x1ff8, 0x1ff8, 0x1ff8, 0x1ff8, 0x757d, 0x1ff6, - 0x1ffa, 0x1ff6, 0x1ff8, 0x1ff6, 0x1ff8, 0x1ff6, 0x080c, 0x0db2, - 0x0031, 0x0020, 0x080c, 0x757d, 0x080c, 0x7597, 0x0005, 0x0006, - 0x0016, 0x0026, 0x080c, 0xd364, 0x7930, 0x9184, 0x0003, 0x01c0, - 0x2001, 0x19c5, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133, 0x2004, - 0x9005, 0x090c, 0x0db2, 0x00c6, 0x2001, 0x19c5, 0x2064, 0x080c, - 0xb251, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x20d9, 0x00d0, - 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, - 0x6c53, 0x1138, 0x080c, 0x6f2a, 0x080c, 0x5a21, 0x080c, 0x6b8a, - 0x0010, 0x080c, 0x58e0, 0x080c, 0x7635, 0x0041, 0x0018, 0x9184, - 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, - 0x0046, 0x0056, 0x2071, 0x1a31, 0x080c, 0x1872, 0x005e, 0x004e, - 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, 0x1800, - 0x7128, 0x2001, 0x1940, 0x2102, 0x2001, 0x1948, 0x2102, 0x2001, - 0x013b, 0x2102, 0x2079, 0x0200, 0x2001, 0x0201, 0x789e, 0x78a3, - 0x0200, 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398, 0x0005, - 0x2320, 0x9182, 0x0204, 0x1230, 0x2011, 0x0008, 0x8423, 0x8423, - 0x8423, 0x0488, 0x9182, 0x024c, 0x1240, 0x2011, 0x0007, 0x8403, - 0x8003, 0x9400, 0x9400, 0x9420, 0x0430, 0x9182, 0x02bc, 0x1238, - 0x2011, 0x0006, 0x8403, 0x8003, 0x9400, 0x9420, 0x00e0, 0x9182, - 0x034c, 0x1230, 0x2011, 0x0005, 0x8403, 0x8003, 0x9420, 0x0098, - 0x9182, 0x042c, 0x1228, 0x2011, 0x0004, 0x8423, 0x8423, 0x0058, - 0x9182, 0x059c, 0x1228, 0x2011, 0x0003, 0x8403, 0x9420, 0x0018, - 0x2011, 0x0002, 0x8423, 0x9482, 0x0228, 0x8002, 0x8020, 0x8301, - 0x9402, 0x0110, 0x0208, 0x8321, 0x8217, 0x8203, 0x9405, 0x789a, - 0x012e, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6814, 0x9084, - 0xffc0, 0x910d, 0x6916, 0x00de, 0x000e, 0x0005, 0x00d6, 0x2069, - 0x0200, 0x9005, 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4, 0x6812, - 0x00de, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810, 0x9084, - 0xfff8, 0x910d, 0x6912, 0x00de, 0x000e, 0x0005, 0x7938, 0x080c, - 0x0db2, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001, 0xa001, - 0xa001, 0xa001, 0xa001, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001, - 0xa001, 0xa001, 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800, 0x2061, - 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x28d6, 0x080c, - 0x27f1, 0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084, 0x000c, - 0x6150, 0x918c, 0xfff3, 0x9105, 0x6052, 0x6050, 0x9084, 0xb17f, - 0x9085, 0x2000, 0x6052, 0x2009, 0x196c, 0x2011, 0x196d, 0x6358, - 0x939c, 0x38f0, 0x2320, 0x080c, 0x2835, 0x1238, 0x939d, 0x4003, - 0x94a5, 0x8603, 0x230a, 0x2412, 0x0030, 0x939d, 0x0203, 0x94a5, - 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, 0x2820, 0x9006, 0x080c, - 0x2803, 0x20a9, 0x0012, 0x1d04, 0x212b, 0x2091, 0x6000, 0x1f04, - 0x212b, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, - 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x250f, 0x2009, - 0x00ef, 0x6132, 0x6136, 0x080c, 0x251f, 0x60e7, 0x0000, 0x61ea, - 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080, - 0x602f, 0x0000, 0x6007, 0x049f, 0x60bb, 0x0000, 0x20a9, 0x0018, - 0x60bf, 0x0000, 0x1f04, 0x2158, 0x60bb, 0x0000, 0x60bf, 0x0108, - 0x60bf, 0x0012, 0x60bf, 0x0320, 0x60bf, 0x0018, 0x601b, 0x00f0, - 0x601f, 0x001e, 0x600f, 0x006b, 0x602b, 0x402f, 0x012e, 0x0005, - 0x00f6, 0x2079, 0x0140, 0x78c3, 0x0080, 0x78c3, 0x0083, 0x78c3, - 0x0000, 0x00fe, 0x0005, 0x2001, 0x1833, 0x2003, 0x0000, 0x2001, - 0x1832, 0x2003, 0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006, - 0x0016, 0x0026, 0x6124, 0x9184, 0x5e2c, 0x1118, 0x9184, 0x0007, - 0x002a, 0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x21b8, 0x219e, - 0x21a1, 0x21a4, 0x21a9, 0x21ab, 0x21af, 0x21b3, 0x080c, 0x7eec, - 0x00b8, 0x080c, 0x7fb9, 0x00a0, 0x080c, 0x7fb9, 0x080c, 0x7eec, - 0x0078, 0x0099, 0x0068, 0x080c, 0x7eec, 0x0079, 0x0048, 0x080c, - 0x7fb9, 0x0059, 0x0028, 0x080c, 0x7fb9, 0x080c, 0x7eec, 0x0029, - 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, - 0xd09c, 0x0118, 0xd19c, 0x1904, 0x2408, 0xd1f4, 0x0110, 0x080c, - 0x0db2, 0x080c, 0x6c53, 0x0904, 0x2214, 0x080c, 0xbcec, 0x1120, - 0x7000, 0x9086, 0x0003, 0x0570, 0x6024, 0x9084, 0x1800, 0x0550, - 0x080c, 0x6c76, 0x0118, 0x080c, 0x6c64, 0x1520, 0x6027, 0x0020, - 0x6043, 0x0000, 0x080c, 0xbcec, 0x0168, 0x080c, 0x6c76, 0x1150, - 0x2001, 0x1976, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x6ad9, - 0x0804, 0x240b, 0x709c, 0x9005, 0x1150, 0x709f, 0x0001, 0x00d6, - 0x2069, 0x0140, 0x080c, 0x6caa, 0x00de, 0x1904, 0x240b, 0x080c, - 0x6f34, 0x0428, 0x080c, 0x6c76, 0x1590, 0x6024, 0x9084, 0x1800, - 0x1108, 0x0468, 0x080c, 0x6f34, 0x080c, 0x6f2a, 0x080c, 0x5a21, - 0x080c, 0x6b8a, 0x0804, 0x2408, 0xd1ac, 0x1508, 0x6024, 0xd0dc, - 0x1170, 0xd0e4, 0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7090, - 0x9086, 0x0028, 0x1110, 0x080c, 0x6e17, 0x0804, 0x2408, 0x080c, - 0x6f2f, 0x0048, 0x2001, 0x194e, 0x2003, 0x0002, 0x0020, 0x080c, - 0x6d8d, 0x0804, 0x2408, 0x080c, 0x6eb2, 0x0804, 0x2408, 0xd1ac, - 0x0904, 0x2329, 0x080c, 0x6c53, 0x11c0, 0x6027, 0x0020, 0x0006, - 0x0026, 0x0036, 0x080c, 0x6c6d, 0x1158, 0x080c, 0x6f2a, 0x080c, - 0x5a21, 0x080c, 0x6b8a, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, - 0x003e, 0x002e, 0x000e, 0x080c, 0x6c2d, 0x0016, 0x0046, 0x00c6, - 0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, - 0x0090, 0x6043, 0x0010, 0x74d2, 0x948c, 0xff00, 0x7034, 0xd084, - 0x0178, 0x9186, 0xf800, 0x1160, 0x7040, 0xd084, 0x1148, 0xc085, - 0x7042, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x4672, 0x003e, - 0x080c, 0xbce5, 0x1904, 0x2306, 0x9196, 0xff00, 0x05a8, 0x7058, - 0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, - 0xd184, 0x1550, 0x080c, 0x2f86, 0x0128, 0xc18d, 0x7132, 0x080c, - 0x629c, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, - 0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2306, - 0x7034, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, - 0x2306, 0xc1ad, 0x2102, 0x0036, 0x73d0, 0x2011, 0x8013, 0x080c, - 0x4672, 0x003e, 0x0804, 0x2306, 0x7034, 0xd08c, 0x1140, 0x2001, - 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2306, 0xc1ad, 0x2102, 0x0036, - 0x73d0, 0x2011, 0x8013, 0x080c, 0x4672, 0x003e, 0x7130, 0xc185, - 0x7132, 0x2011, 0x1854, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009, - 0x0001, 0x2011, 0x0100, 0x080c, 0x7e3e, 0x2019, 0x000e, 0x00c6, - 0x2061, 0x0000, 0x080c, 0xcf62, 0x00ce, 0x9484, 0x00ff, 0x9080, - 0x2f92, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, - 0x000e, 0x080c, 0xcfe6, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, - 0x0002, 0x2019, 0x0004, 0x080c, 0x2dfb, 0x001e, 0x0078, 0x0156, - 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x5f7e, 0x1110, 0x080c, - 0x5a3b, 0x8108, 0x1f04, 0x22fc, 0x00be, 0x015e, 0x00ce, 0x004e, - 0x080c, 0x9947, 0x60e3, 0x0000, 0x001e, 0x2001, 0x1800, 0x2014, - 0x9296, 0x0004, 0x1170, 0xd19c, 0x11a0, 0x2011, 0x180c, 0x2214, - 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, 0x6206, 0x6228, 0xc29d, - 0x622a, 0x2003, 0x0001, 0x2001, 0x1824, 0x2003, 0x0000, 0x6027, - 0x0020, 0xd194, 0x0904, 0x2408, 0x0016, 0x6220, 0xd2b4, 0x0904, - 0x23b1, 0x080c, 0x7cc7, 0x080c, 0x8fbb, 0x6027, 0x0004, 0x00f6, - 0x2019, 0x19bf, 0x2304, 0x907d, 0x0904, 0x2380, 0x7804, 0x9086, - 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140, - 0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003, - 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0, - 0x080c, 0x2997, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9, 0x0009, - 0x080c, 0x28b1, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001, 0x0100, - 0x080c, 0x2987, 0x9006, 0x080c, 0x2987, 0x080c, 0x847d, 0x080c, - 0x8582, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0x99d6, - 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005, - 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, - 0x080c, 0x2997, 0x00de, 0x00c6, 0x2061, 0x19b6, 0x6028, 0x080c, - 0xbcec, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8, - 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x8f97, 0x0804, 0x2407, - 0x2061, 0x0100, 0x62c0, 0x080c, 0x97d2, 0x2019, 0x19bf, 0x2304, - 0x9065, 0x0120, 0x2009, 0x0027, 0x080c, 0x9a50, 0x00ce, 0x0804, - 0x2407, 0xd2bc, 0x0904, 0x23f4, 0x080c, 0x7cd4, 0x6014, 0x9084, - 0x1984, 0x9085, 0x0010, 0x6016, 0x6027, 0x0004, 0x00d6, 0x2069, - 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2997, 0x00de, - 0x00c6, 0x2061, 0x19b6, 0x6044, 0x080c, 0xbcec, 0x0120, 0x909a, - 0x0003, 0x1628, 0x0018, 0x909a, 0x00c8, 0x1608, 0x8000, 0x6046, - 0x603c, 0x00ce, 0x9005, 0x0558, 0x2009, 0x07d0, 0x080c, 0x7ccc, - 0x9080, 0x0008, 0x2004, 0x9086, 0x0006, 0x1138, 0x6114, 0x918c, - 0x1984, 0x918d, 0x0012, 0x6116, 0x00d0, 0x6114, 0x918c, 0x1984, - 0x918d, 0x0016, 0x6116, 0x0098, 0x6027, 0x0004, 0x0080, 0x0036, - 0x2019, 0x0001, 0x080c, 0x9254, 0x003e, 0x2019, 0x19c5, 0x2304, - 0x9065, 0x0120, 0x2009, 0x004f, 0x080c, 0x9a50, 0x00ce, 0x001e, - 0xd19c, 0x0904, 0x247a, 0x7034, 0xd0ac, 0x1904, 0x244f, 0x0016, - 0x0156, 0x6027, 0x0008, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, - 0x9084, 0xfbcf, 0x6052, 0x080c, 0x28d0, 0x9085, 0x2000, 0x6052, - 0x20a9, 0x0012, 0x1d04, 0x2422, 0x080c, 0x7cfb, 0x1f04, 0x2422, - 0x6050, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x6052, 0x20a9, 0x0028, - 0xa001, 0x1f04, 0x2430, 0x6150, 0x9185, 0x1400, 0x6052, 0x20a9, - 0x0366, 0x1d04, 0x2439, 0x080c, 0x7cfb, 0x6020, 0xd09c, 0x1130, - 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x04a0, 0x080c, 0x2898, - 0x1f04, 0x2439, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0016, - 0x6028, 0xc09c, 0x602a, 0x080c, 0x9947, 0x60e3, 0x0000, 0x080c, - 0xd343, 0x080c, 0xd35e, 0x080c, 0x5117, 0xd0fc, 0x1138, 0x080c, - 0xbce5, 0x1120, 0x9085, 0x0001, 0x080c, 0x6c9a, 0x9006, 0x080c, - 0x2987, 0x2009, 0x0002, 0x080c, 0x28d6, 0x00e6, 0x2071, 0x1800, - 0x7003, 0x0004, 0x080c, 0x0e69, 0x00ee, 0x6027, 0x0008, 0x080c, - 0x0b94, 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae, 0x0005, 0x0006, - 0x0016, 0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, - 0x2071, 0x1800, 0x71c8, 0x70ca, 0x9116, 0x0904, 0x24ce, 0x81ff, - 0x01a0, 0x2009, 0x0000, 0x080c, 0x28d6, 0x2011, 0x8011, 0x2019, - 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019, 0x0001, 0x0010, - 0x2019, 0x0000, 0x080c, 0x4672, 0x0448, 0x2001, 0x1977, 0x200c, - 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, 0x0118, 0x2019, - 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, 0x4672, 0x080c, - 0x0e69, 0x080c, 0x5117, 0xd0fc, 0x1188, 0x080c, 0xbce5, 0x1170, - 0x00c6, 0x080c, 0x256a, 0x080c, 0x91bb, 0x2061, 0x0100, 0x2019, - 0x0028, 0x2009, 0x0002, 0x080c, 0x2dfb, 0x00ce, 0x012e, 0x00fe, - 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, - 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1835, 0x2214, - 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181d, 0x2204, 0x9106, - 0x1190, 0x2011, 0x181e, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00, - 0x9206, 0x1148, 0x2011, 0x181e, 0x2214, 0x9294, 0x00ff, 0x9584, - 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x7876, 0x0048, 0x9584, - 0x00ff, 0x9080, 0x2f92, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, - 0x0005, 0x9080, 0x2f92, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, - 0x2069, 0x0140, 0x2001, 0x1816, 0x2003, 0x00ef, 0x20a9, 0x0010, - 0x9006, 0x6852, 0x6856, 0x1f04, 0x251a, 0x00de, 0x0005, 0x0006, - 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1816, 0x2102, 0x8114, - 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, - 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xd74a, 0x2005, 0x6856, - 0x8211, 0x1f04, 0x252f, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, - 0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, - 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, - 0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230, 0x8212, 0x8210, - 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, - 0x1f04, 0x255f, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, - 0x015e, 0x0005, 0x080c, 0x5113, 0xd0c4, 0x0150, 0xd0a4, 0x0140, - 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xcfe6, 0x004e, - 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, - 0x0904, 0x25d6, 0x080c, 0x2835, 0x0660, 0x9084, 0x0700, 0x908e, - 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, - 0x1120, 0x2011, 0x8000, 0x900e, 0x0420, 0x908e, 0x0400, 0x1120, - 0x9016, 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, 0x1120, 0x9016, - 0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016, 0x2009, - 0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016, 0x2009, 0x0008, - 0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500, 0x2011, 0x0030, - 0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x7e7f, 0x928c, - 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, - 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x6c53, 0x1118, 0x2009, - 0x193e, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, - 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, - 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, - 0x0db2, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x2001, 0x0171, - 0x2004, 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, 0x918c, 0x00ff, - 0x918e, 0x004c, 0x1128, 0x200c, 0x918c, 0xff00, 0x810f, 0x0005, - 0x900e, 0x2001, 0x0227, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, - 0x9108, 0x2001, 0x0226, 0x2004, 0x8007, 0x9084, 0x00ff, 0x8004, - 0x9108, 0x0005, 0x0018, 0x000c, 0x0018, 0x0020, 0x1000, 0x0800, - 0x1000, 0x1800, 0x0156, 0x0006, 0x0016, 0x0026, 0x00e6, 0x2001, - 0x195f, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0db2, 0x0033, 0x00ee, - 0x002e, 0x001e, 0x000e, 0x015e, 0x0005, 0x2634, 0x2652, 0x2676, - 0x2678, 0x26a1, 0x26a3, 0x26a5, 0x2001, 0x0001, 0x080c, 0x247f, - 0x080c, 0x2893, 0x2001, 0x1961, 0x2003, 0x0000, 0x7828, 0x9084, - 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x2851, 0x2001, - 0x195f, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x26a6, 0x080c, - 0x7cd9, 0x0005, 0x2009, 0x1964, 0x200b, 0x0000, 0x2001, 0x1969, - 0x2003, 0x0036, 0x2001, 0x1968, 0x2003, 0x002a, 0x2001, 0x1961, - 0x2003, 0x0001, 0x9006, 0x080c, 0x2803, 0x2001, 0xffff, 0x20a9, - 0x0009, 0x080c, 0x2851, 0x2001, 0x195f, 0x2003, 0x0006, 0x2009, - 0x001e, 0x2011, 0x26a6, 0x080c, 0x7cd9, 0x0005, 0x080c, 0x0db2, - 0x2001, 0x1969, 0x2003, 0x0036, 0x2001, 0x1961, 0x2003, 0x0003, - 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, - 0x2001, 0x0001, 0x080c, 0x2803, 0x2001, 0x1965, 0x2003, 0x0000, - 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2851, 0x2001, 0x195f, - 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x26a6, 0x080c, 0x7cd9, - 0x0005, 0x080c, 0x0db2, 0x080c, 0x0db2, 0x0005, 0x0006, 0x0016, - 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, - 0x0100, 0x2001, 0x1961, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0db2, - 0x0043, 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e, 0x000e, - 0x0005, 0x26c8, 0x26e8, 0x2728, 0x2758, 0x277c, 0x278c, 0x278e, - 0x080c, 0x2845, 0x11b0, 0x7850, 0x9084, 0xefff, 0x7852, 0x2009, - 0x1967, 0x2104, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, - 0xc08d, 0x0008, 0xc085, 0x200a, 0x2001, 0x195f, 0x2003, 0x0001, - 0x0030, 0x080c, 0x27b2, 0x2001, 0xffff, 0x080c, 0x2643, 0x0005, - 0x080c, 0x2790, 0x05e0, 0x2009, 0x1968, 0x2104, 0x8001, 0x200a, - 0x080c, 0x2845, 0x1178, 0x7850, 0x9084, 0xefff, 0x7852, 0x7a38, - 0x9294, 0x0005, 0x9296, 0x0005, 0x0518, 0x2009, 0x1967, 0x2104, - 0xc085, 0x200a, 0x2009, 0x1964, 0x2104, 0x8000, 0x200a, 0x9086, - 0x0005, 0x0118, 0x080c, 0x2798, 0x00c0, 0x200b, 0x0000, 0x7a38, - 0x9294, 0x0006, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, - 0x0001, 0x080c, 0x2820, 0x2001, 0x1961, 0x2003, 0x0002, 0x0028, - 0x2001, 0x195f, 0x2003, 0x0003, 0x0010, 0x080c, 0x2665, 0x0005, - 0x080c, 0x2790, 0x0560, 0x2009, 0x1968, 0x2104, 0x8001, 0x200a, - 0x080c, 0x2845, 0x1168, 0x7850, 0x9084, 0xefff, 0x7852, 0x2001, - 0x195f, 0x2003, 0x0003, 0x2001, 0x1960, 0x2003, 0x0000, 0x00b8, - 0x2009, 0x1968, 0x2104, 0x9005, 0x1118, 0x080c, 0x27d5, 0x0010, - 0x080c, 0x27a5, 0x080c, 0x2798, 0x2009, 0x1964, 0x200b, 0x0000, - 0x2001, 0x1961, 0x2003, 0x0001, 0x080c, 0x2665, 0x0000, 0x0005, - 0x04b9, 0x0508, 0x080c, 0x2845, 0x11b8, 0x7850, 0x9084, 0xefff, - 0x7852, 0x2009, 0x1965, 0x2104, 0x8000, 0x200a, 0x9086, 0x0007, - 0x0108, 0x0078, 0x2001, 0x196a, 0x2003, 0x000a, 0x2009, 0x1967, - 0x2104, 0xc0fd, 0x200a, 0x0038, 0x0419, 0x2001, 0x1961, 0x2003, - 0x0004, 0x080c, 0x2690, 0x0005, 0x0099, 0x0168, 0x080c, 0x2845, - 0x1138, 0x7850, 0x9084, 0xefff, 0x7852, 0x080c, 0x267c, 0x0018, - 0x0079, 0x080c, 0x2690, 0x0005, 0x080c, 0x0db2, 0x080c, 0x0db2, - 0x2009, 0x1969, 0x2104, 0x8001, 0x200a, 0x090c, 0x27f1, 0x0005, - 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, - 0x2001, 0x0001, 0x080c, 0x2820, 0x0005, 0x7a38, 0x9294, 0x0006, - 0x9296, 0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, - 0x2803, 0x0005, 0x2009, 0x1964, 0x2104, 0x8000, 0x200a, 0x9086, - 0x0005, 0x0108, 0x0068, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, - 0x9296, 0x0006, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, - 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, - 0x2001, 0x0001, 0x080c, 0x2820, 0x0005, 0x0086, 0x2001, 0x1967, - 0x2004, 0x9084, 0x7fff, 0x090c, 0x0db2, 0x2009, 0x1966, 0x2144, - 0x8846, 0x280a, 0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, - 0x080c, 0x0db2, 0x9006, 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, - 0x0005, 0x0006, 0x0156, 0x2001, 0x195f, 0x20a9, 0x0009, 0x2003, - 0x0000, 0x8000, 0x1f04, 0x27f7, 0x2001, 0x1966, 0x2003, 0x8000, - 0x015e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, - 0x0158, 0x7838, 0x9084, 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, - 0x196c, 0x210c, 0x795a, 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, - 0x0006, 0x783a, 0x2009, 0x196d, 0x210c, 0x795a, 0x00fe, 0x0005, - 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0138, 0x7838, 0x9084, - 0xfffa, 0x9085, 0x0004, 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, - 0x9085, 0x0005, 0x783a, 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, - 0x2004, 0x9082, 0x0007, 0x000e, 0x0005, 0x0006, 0x2001, 0x0100, - 0x2004, 0x9082, 0x0009, 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, - 0x7820, 0x080c, 0x28d0, 0xd09c, 0x1110, 0x1f04, 0x2848, 0x015e, - 0x0005, 0x0126, 0x0016, 0x0006, 0x2091, 0x8000, 0x7850, 0x9085, - 0x0040, 0x7852, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x28d0, - 0x9085, 0x2000, 0x7852, 0x000e, 0x2008, 0x9186, 0x0000, 0x1118, - 0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, - 0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, - 0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x287e, - 0x080c, 0x7cfb, 0x1f04, 0x287e, 0x7850, 0x9085, 0x0400, 0x9084, - 0xdfbf, 0x7852, 0x080c, 0x28d0, 0x9085, 0x1000, 0x7852, 0x000e, - 0x001e, 0x012e, 0x0005, 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, - 0x0006, 0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, - 0xd0ac, 0x1130, 0x7820, 0xd0e4, 0x1140, 0x1f04, 0x28a2, 0x0028, - 0x7854, 0xd08c, 0x1110, 0x1f04, 0x28a8, 0x00fe, 0x015e, 0x000e, - 0x0005, 0x1d04, 0x28b1, 0x080c, 0x7cfb, 0x1f04, 0x28b1, 0x0005, - 0x0006, 0x2001, 0x196b, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, - 0x0006, 0x2001, 0x196b, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, - 0x0006, 0x2001, 0x196b, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, - 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, - 0x1977, 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, - 0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, - 0x200a, 0x0005, 0x0036, 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, - 0xff00, 0x9186, 0x2000, 0x0118, 0x9186, 0x0100, 0x1588, 0x2009, - 0x017f, 0x200b, 0x00a2, 0x2019, 0x0160, 0x2324, 0x2011, 0x0003, - 0x2009, 0x0169, 0x2104, 0x9084, 0x0007, 0x210c, 0x918c, 0x0007, - 0x910e, 0x1db0, 0x9086, 0x0003, 0x11b8, 0x2304, 0x9402, 0x02a0, - 0x1d60, 0x8211, 0x1d68, 0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, - 0x918c, 0xff00, 0x9186, 0x0100, 0x0130, 0x2009, 0x180c, 0x2104, - 0xc0dd, 0x200a, 0x0008, 0x0419, 0x2001, 0x017f, 0x2003, 0x0000, - 0x004e, 0x003e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, - 0x2001, 0x0160, 0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004, - 0x9084, 0xff00, 0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000, - 0x0016, 0x0026, 0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, - 0x2061, 0x0100, 0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000, - 0x6017, 0x0018, 0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e, - 0x0010, 0x6106, 0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x04b9, - 0x001e, 0x9184, 0x0003, 0x01e0, 0x0036, 0x0016, 0x2019, 0x0141, - 0x6124, 0x918c, 0x0028, 0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, - 0x001e, 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, - 0x6016, 0x9184, 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, - 0x2001, 0x180c, 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, - 0x0026, 0x080c, 0x6c6d, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, - 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, - 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, - 0x200a, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, + 0x0005, 0x2004, 0xd0bc, 0x190c, 0x0dce, 0x9084, 0x0007, 0x0002, + 0x2162, 0x1d8c, 0x2162, 0x2158, 0x215b, 0x215e, 0x215b, 0x215e, + 0x080c, 0x1d8c, 0x0005, 0x080c, 0x119a, 0x0005, 0x080c, 0x1d8c, + 0x080c, 0x119a, 0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200, + 0x2071, 0x0260, 0x2069, 0x1800, 0x7817, 0x0000, 0x789b, 0x0814, + 0x78a3, 0x0406, 0x789f, 0x0410, 0x2009, 0x013b, 0x200b, 0x0400, + 0x781b, 0x0002, 0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, + 0x012e, 0x0005, 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x2281, + 0x7900, 0xd1dc, 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, + 0x0002, 0x21a9, 0x21a1, 0x7b59, 0x21a1, 0x21a3, 0x21a3, 0x21a3, + 0x21a3, 0x7b3f, 0x21a1, 0x21a5, 0x21a1, 0x21a3, 0x21a1, 0x21a3, + 0x21a1, 0x080c, 0x0dd5, 0x0031, 0x0020, 0x080c, 0x7b3f, 0x080c, + 0x7b59, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xe6ad, 0x7930, + 0x9184, 0x0003, 0x01c0, 0x2001, 0x19f4, 0x2004, 0x9005, 0x0170, + 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dd5, 0x00c6, 0x2001, + 0x19f4, 0x2064, 0x080c, 0xc472, 0x00ce, 0x00f8, 0x2009, 0x0040, + 0x080c, 0x2284, 0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, + 0x0003, 0x0160, 0x080c, 0x717d, 0x1138, 0x080c, 0x7465, 0x080c, + 0x5df8, 0x080c, 0x70af, 0x0010, 0x080c, 0x5cb7, 0x080c, 0x7bf7, + 0x0041, 0x0018, 0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, + 0x0005, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a60, 0x080c, + 0x19ff, 0x005e, 0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, + 0x2e00, 0x2071, 0x1800, 0x7128, 0x2001, 0x196f, 0x2102, 0x2001, + 0x1977, 0x2102, 0x2001, 0x013b, 0x2102, 0x2079, 0x0200, 0x2001, + 0x0201, 0x789e, 0x78a3, 0x0200, 0x9198, 0x0007, 0x831c, 0x831c, + 0x831c, 0x9398, 0x0005, 0x2320, 0x9182, 0x0204, 0x1230, 0x2011, + 0x0008, 0x8423, 0x8423, 0x8423, 0x0488, 0x9182, 0x024c, 0x1240, + 0x2011, 0x0007, 0x8403, 0x8003, 0x9400, 0x9400, 0x9420, 0x0430, + 0x9182, 0x02bc, 0x1238, 0x2011, 0x0006, 0x8403, 0x8003, 0x9400, + 0x9420, 0x00e0, 0x9182, 0x034c, 0x1230, 0x2011, 0x0005, 0x8403, + 0x8003, 0x9420, 0x0098, 0x9182, 0x042c, 0x1228, 0x2011, 0x0004, + 0x8423, 0x8423, 0x0058, 0x9182, 0x059c, 0x1228, 0x2011, 0x0003, + 0x8403, 0x9420, 0x0018, 0x2011, 0x0002, 0x8423, 0x9482, 0x0228, + 0x8002, 0x8020, 0x8301, 0x9402, 0x0110, 0x0208, 0x8321, 0x8217, + 0x8203, 0x9405, 0x789a, 0x012e, 0x0005, 0x0006, 0x00d6, 0x2069, + 0x0200, 0x6814, 0x9084, 0xffc0, 0x910d, 0x6916, 0x00de, 0x000e, + 0x0005, 0x00d6, 0x2069, 0x0200, 0x9005, 0x6810, 0x0110, 0xc0a5, + 0x0008, 0xc0a4, 0x6812, 0x00de, 0x0005, 0x0006, 0x00d6, 0x2069, + 0x0200, 0x6810, 0x9084, 0xfff8, 0x910d, 0x6912, 0x00de, 0x000e, + 0x0005, 0x7938, 0x080c, 0x0dce, 0x00f6, 0x2079, 0x0200, 0x7902, + 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x7902, 0xa001, + 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x00fe, 0x0005, 0x0126, + 0x2091, 0x2800, 0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, + 0x080c, 0x2af0, 0x080c, 0x2a0b, 0x6054, 0x8004, 0x8004, 0x8004, + 0x8004, 0x9084, 0x000c, 0x6150, 0x918c, 0xfff3, 0x9105, 0x6052, + 0x6050, 0x9084, 0xb17f, 0x9085, 0x2000, 0x6052, 0x2009, 0x199b, + 0x2011, 0x199c, 0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x2a4f, + 0x1238, 0x939d, 0x4003, 0x94a5, 0x8603, 0x230a, 0x2412, 0x0030, + 0x939d, 0x0203, 0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, + 0x2a3a, 0x9006, 0x080c, 0x2a1d, 0x20a9, 0x0012, 0x1d04, 0x22d6, + 0x2091, 0x6000, 0x1f04, 0x22d6, 0x602f, 0x0100, 0x602f, 0x0000, + 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, + 0x080c, 0x2729, 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x2739, + 0x60e7, 0x0000, 0x61ea, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043, + 0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x349f, 0x60bb, + 0x0000, 0x20a9, 0x0018, 0x60bf, 0x0000, 0x1f04, 0x2303, 0x60bb, + 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x60bf, 0x0405, 0x60bf, + 0x0014, 0x60bf, 0x0320, 0x60bf, 0x0018, 0x601b, 0x00f0, 0x601f, + 0x001e, 0x600f, 0x006b, 0x602b, 0x402f, 0x012e, 0x0005, 0x00f6, + 0x2079, 0x0140, 0x78c3, 0x0080, 0x78c3, 0x0083, 0x78c3, 0x0000, + 0x00fe, 0x0005, 0x2001, 0x1835, 0x2003, 0x0000, 0x2001, 0x1834, + 0x2003, 0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, + 0x0026, 0x6124, 0x0066, 0x2031, 0x1837, 0x2634, 0x96b4, 0x0028, + 0x006e, 0x1138, 0x6020, 0xd1bc, 0x0120, 0xd0bc, 0x1168, 0xd0b4, + 0x1198, 0x9184, 0x5e2c, 0x1118, 0x9184, 0x0007, 0x00aa, 0x9195, + 0x0004, 0x9284, 0x0007, 0x0082, 0x0016, 0x2001, 0x188b, 0x200c, + 0xd184, 0x001e, 0x0d70, 0x0c98, 0x0016, 0x2001, 0x188b, 0x200c, + 0xd194, 0x001e, 0x0d30, 0x0c58, 0x2386, 0x236c, 0x236f, 0x2372, + 0x2377, 0x2379, 0x237d, 0x2381, 0x080c, 0x8d64, 0x00b8, 0x080c, + 0x8e31, 0x00a0, 0x080c, 0x8e31, 0x080c, 0x8d64, 0x0078, 0x0099, + 0x0068, 0x080c, 0x8d64, 0x0079, 0x0048, 0x080c, 0x8e31, 0x0059, + 0x0028, 0x080c, 0x8e31, 0x080c, 0x8d64, 0x0029, 0x002e, 0x001e, + 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, + 0xd19c, 0x1904, 0x25ee, 0xd1f4, 0x190c, 0x0dce, 0x080c, 0x717d, + 0x0904, 0x23e1, 0x080c, 0xcf18, 0x1120, 0x7000, 0x9086, 0x0003, + 0x0570, 0x6024, 0x9084, 0x1800, 0x0550, 0x080c, 0x71a0, 0x0118, + 0x080c, 0x718e, 0x1520, 0x6027, 0x0020, 0x6043, 0x0000, 0x080c, + 0xcf18, 0x0168, 0x080c, 0x71a0, 0x1150, 0x2001, 0x19a5, 0x2003, + 0x0001, 0x6027, 0x1800, 0x080c, 0x7013, 0x0804, 0x25f1, 0x70a4, + 0x9005, 0x1150, 0x70a7, 0x0001, 0x00d6, 0x2069, 0x0140, 0x080c, + 0x71d4, 0x00de, 0x1904, 0x25f1, 0x080c, 0x746f, 0x0428, 0x080c, + 0x71a0, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, 0x0468, 0x080c, + 0x746f, 0x080c, 0x7465, 0x080c, 0x5df8, 0x080c, 0x70af, 0x0804, + 0x25ee, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1178, + 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7098, 0x9086, 0x0028, 0x1110, + 0x080c, 0x7352, 0x0804, 0x25ee, 0x080c, 0x746a, 0x0048, 0x2001, + 0x197d, 0x2003, 0x0002, 0x0020, 0x080c, 0x72b7, 0x0804, 0x25ee, + 0x080c, 0x73ed, 0x0804, 0x25ee, 0x6220, 0xd1bc, 0x0138, 0xd2bc, + 0x1904, 0x2661, 0xd2b4, 0x1904, 0x2674, 0x0000, 0xd1ac, 0x0904, + 0x2503, 0x0036, 0x6328, 0xc3bc, 0x632a, 0x003e, 0x080c, 0x717d, + 0x11c0, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0x7197, + 0x1158, 0x080c, 0x7465, 0x080c, 0x5df8, 0x080c, 0x70af, 0x003e, + 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c, + 0x7155, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486, 0xf0f0, 0x1138, + 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74da, + 0x948c, 0xff00, 0x7038, 0xd084, 0x0178, 0x9186, 0xf800, 0x1160, + 0x7048, 0xd084, 0x1148, 0xc085, 0x704a, 0x0036, 0x2418, 0x2011, + 0x8016, 0x080c, 0x48fb, 0x003e, 0x080c, 0xcf11, 0x1904, 0x24e0, + 0x9196, 0xff00, 0x05a8, 0x7060, 0x9084, 0x00ff, 0x810f, 0x81ff, + 0x0110, 0x9116, 0x0568, 0x7130, 0xd184, 0x1550, 0x080c, 0x31c4, + 0x0128, 0xc18d, 0x7132, 0x080c, 0x672f, 0x1510, 0x6240, 0x9294, + 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296, 0xff00, 0x01c0, + 0x7030, 0xd08c, 0x0904, 0x24e0, 0x7038, 0xd08c, 0x1140, 0x2001, + 0x180c, 0x200c, 0xd1ac, 0x1904, 0x24e0, 0xc1ad, 0x2102, 0x0036, + 0x73d8, 0x2011, 0x8013, 0x080c, 0x48fb, 0x003e, 0x0804, 0x24e0, + 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, + 0x24e0, 0xc1ad, 0x2102, 0x0036, 0x73d8, 0x2011, 0x8013, 0x080c, + 0x48fb, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011, 0x1848, 0x220c, + 0xd1a4, 0x01f0, 0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, + 0x846c, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000, 0x080c, 0xe1f4, + 0x00ce, 0x9484, 0x00ff, 0x9080, 0x31d0, 0x200d, 0x918c, 0xff00, + 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, 0x080c, 0xe280, 0x001e, + 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x3039, 0x001e, + 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x63cd, + 0x1110, 0x080c, 0x5e12, 0x8108, 0x1f04, 0x24d6, 0x00be, 0x015e, + 0x00ce, 0x004e, 0x080c, 0xaadc, 0x60e3, 0x0000, 0x001e, 0x2001, + 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11a0, 0x2011, + 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, 0x6206, + 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1826, 0x2003, + 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, 0x25ee, 0x0016, 0x6220, + 0xd2b4, 0x0904, 0x258b, 0x080c, 0x8308, 0x080c, 0x9ffc, 0x6027, + 0x0004, 0x00f6, 0x2019, 0x19ee, 0x2304, 0x907d, 0x0904, 0x255a, + 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, + 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, + 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, + 0x8001, 0x1df0, 0x080c, 0x2bb1, 0x2001, 0x001e, 0x8001, 0x0240, + 0x20a9, 0x0009, 0x080c, 0x2acb, 0x6904, 0xd1dc, 0x1140, 0x0cb0, + 0x2001, 0x0100, 0x080c, 0x2ba1, 0x9006, 0x080c, 0x2ba1, 0x080c, + 0x9317, 0x080c, 0x941c, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, + 0x080c, 0xab6b, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, + 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, + 0x4000, 0x0110, 0x080c, 0x2bb1, 0x00de, 0x00c6, 0x2061, 0x19e5, + 0x6028, 0x080c, 0xcf18, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, + 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0x9fd8, + 0x0804, 0x25ed, 0x2061, 0x0100, 0x62c0, 0x080c, 0xa967, 0x2019, + 0x19ee, 0x2304, 0x9065, 0x0120, 0x2009, 0x0027, 0x080c, 0xabe6, + 0x00ce, 0x0804, 0x25ed, 0xd2bc, 0x0904, 0x25d4, 0x080c, 0x8315, + 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016, 0x6027, 0x0004, + 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, + 0x2bb1, 0x00de, 0x00c6, 0x2061, 0x19e5, 0x6044, 0x080c, 0xcf18, + 0x0120, 0x909a, 0x0003, 0x1658, 0x0018, 0x909a, 0x00c8, 0x1638, + 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, 0x05b8, 0x2009, 0x07d0, + 0x080c, 0x830d, 0x9080, 0x0008, 0x2004, 0x9086, 0x0006, 0x1138, + 0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116, 0x0430, 0x9080, + 0x0008, 0x2004, 0x9086, 0x0009, 0x0d98, 0x6114, 0x918c, 0x1984, + 0x918d, 0x0016, 0x6116, 0x00c8, 0x6027, 0x0004, 0x00b0, 0x0036, + 0x2019, 0x0001, 0x080c, 0xa2ac, 0x003e, 0x2019, 0x19f4, 0x2304, + 0x9065, 0x0150, 0x2009, 0x004f, 0x6020, 0x9086, 0x0009, 0x1110, + 0x2009, 0x004f, 0x080c, 0xabe6, 0x00ce, 0x001e, 0xd19c, 0x0904, + 0x265c, 0x7038, 0xd0ac, 0x1904, 0x2635, 0x0016, 0x0156, 0x6027, + 0x0008, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf, + 0x6052, 0x080c, 0x2aea, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012, + 0x1d04, 0x2608, 0x080c, 0x833c, 0x1f04, 0x2608, 0x6050, 0x9085, + 0x0400, 0x9084, 0xdfbf, 0x6052, 0x20a9, 0x0028, 0xa001, 0x1f04, + 0x2616, 0x6150, 0x9185, 0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04, + 0x261f, 0x080c, 0x833c, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, + 0x001e, 0x6027, 0x0008, 0x0480, 0x080c, 0x2ab2, 0x1f04, 0x261f, + 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, + 0x602a, 0x080c, 0xaadc, 0x60e3, 0x0000, 0x080c, 0xe68c, 0x080c, + 0xe6a7, 0x080c, 0x54bb, 0xd0fc, 0x1138, 0x080c, 0xcf11, 0x1120, + 0x9085, 0x0001, 0x080c, 0x71c4, 0x9006, 0x080c, 0x2ba1, 0x2009, + 0x0002, 0x080c, 0x2af0, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, + 0x0008, 0x080c, 0x0bae, 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae, + 0x0005, 0x0016, 0x2001, 0x188b, 0x200c, 0xd184, 0x001e, 0x0904, + 0x240e, 0x0016, 0x2009, 0x266d, 0x00d0, 0x2001, 0x188b, 0x200c, + 0xc184, 0x2102, 0x001e, 0x0c40, 0x0016, 0x2001, 0x188b, 0x200c, + 0xd194, 0x001e, 0x0904, 0x240e, 0x0016, 0x2009, 0x2680, 0x0038, + 0x2001, 0x188b, 0x200c, 0xc194, 0x2102, 0x001e, 0x08a8, 0x6028, + 0xc0bc, 0x602a, 0x2001, 0x0156, 0x2003, 0xbc91, 0x8000, 0x2003, + 0xffff, 0x6043, 0x0001, 0x080c, 0x2aea, 0x6027, 0x0080, 0x6017, + 0x0000, 0x6043, 0x0000, 0x0817, 0x0006, 0x0016, 0x0026, 0x0036, + 0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x71d0, + 0x70d2, 0x9116, 0x05e8, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, + 0x2af0, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, + 0x1118, 0x2019, 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x48fb, + 0x0438, 0x2001, 0x19a6, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, + 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, + 0x8012, 0x080c, 0x48fb, 0x080c, 0x54bb, 0xd0fc, 0x1188, 0x080c, + 0xcf11, 0x1170, 0x00c6, 0x080c, 0x2784, 0x080c, 0xa213, 0x2061, + 0x0100, 0x2019, 0x0028, 0x2009, 0x0002, 0x080c, 0x3039, 0x00ce, + 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, + 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, + 0x1837, 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181f, + 0x2204, 0x9106, 0x1190, 0x2011, 0x1820, 0x2214, 0x9294, 0xff00, + 0x9584, 0xff00, 0x9206, 0x1148, 0x2011, 0x1820, 0x2214, 0x9294, + 0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x7e50, + 0x0048, 0x9584, 0x00ff, 0x9080, 0x31d0, 0x200d, 0x918c, 0xff00, + 0x810f, 0x9006, 0x0005, 0x9080, 0x31d0, 0x200d, 0x918c, 0x00ff, + 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0x1818, 0x2003, 0x00ef, + 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x2734, 0x00de, + 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1818, + 0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, + 0x0000, 0x9006, 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xee55, + 0x2005, 0x6856, 0x8211, 0x1f04, 0x2749, 0x002e, 0x00de, 0x000e, + 0x0005, 0x00c6, 0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008, + 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, + 0x0006, 0x2069, 0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230, + 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, + 0x0404, 0x680e, 0x1f04, 0x2779, 0x680f, 0x0000, 0x000e, 0x001e, + 0x002e, 0x00de, 0x015e, 0x0005, 0x080c, 0x54b7, 0xd0c4, 0x0150, + 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, + 0xe280, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, + 0x78c4, 0xd0dc, 0x0904, 0x27f0, 0x080c, 0x2a4f, 0x0660, 0x9084, + 0x0700, 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, + 0x908e, 0x0500, 0x1120, 0x2011, 0x8000, 0x900e, 0x0420, 0x908e, + 0x0400, 0x1120, 0x9016, 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, + 0x1120, 0x9016, 0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, + 0x9016, 0x2009, 0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016, + 0x2009, 0x0008, 0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500, + 0x2011, 0x0030, 0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, + 0x8cf7, 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, + 0x9085, 0x004c, 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x717d, + 0x1118, 0x2009, 0x196d, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, + 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, + 0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, + 0x0110, 0x080c, 0x0dce, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, + 0x2001, 0x0171, 0x2004, 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, + 0x918c, 0x00ff, 0x918e, 0x004c, 0x1128, 0x200c, 0x918c, 0xff00, + 0x810f, 0x0005, 0x900e, 0x2001, 0x0227, 0x2004, 0x8007, 0x9084, + 0x00ff, 0x8004, 0x9108, 0x2001, 0x0226, 0x2004, 0x8007, 0x9084, + 0x00ff, 0x8004, 0x9108, 0x0005, 0x0018, 0x000c, 0x0018, 0x0020, + 0x1000, 0x0800, 0x1000, 0x1800, 0x0156, 0x0006, 0x0016, 0x0026, + 0x00e6, 0x2001, 0x198e, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dd5, + 0x0033, 0x00ee, 0x002e, 0x001e, 0x000e, 0x015e, 0x0005, 0x284e, + 0x286c, 0x2890, 0x2892, 0x28bb, 0x28bd, 0x28bf, 0x2001, 0x0001, + 0x080c, 0x269c, 0x080c, 0x2aad, 0x2001, 0x1990, 0x2003, 0x0000, + 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, + 0x2a6b, 0x2001, 0x198e, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, + 0x28c0, 0x080c, 0x831a, 0x0005, 0x2009, 0x1993, 0x200b, 0x0000, + 0x2001, 0x1998, 0x2003, 0x0036, 0x2001, 0x1997, 0x2003, 0x002a, + 0x2001, 0x1990, 0x2003, 0x0001, 0x9006, 0x080c, 0x2a1d, 0x2001, + 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a6b, 0x2001, 0x198e, 0x2003, + 0x0006, 0x2009, 0x001e, 0x2011, 0x28c0, 0x080c, 0x831a, 0x0005, + 0x080c, 0x0dd5, 0x2001, 0x1998, 0x2003, 0x0036, 0x2001, 0x1990, + 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, + 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2a1d, 0x2001, 0x1994, + 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a6b, + 0x2001, 0x198e, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x28c0, + 0x080c, 0x831a, 0x0005, 0x080c, 0x0dd5, 0x080c, 0x0dd5, 0x0005, + 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, + 0x8000, 0x2079, 0x0100, 0x2001, 0x1990, 0x2004, 0x908a, 0x0007, + 0x1a0c, 0x0dd5, 0x0043, 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, + 0x001e, 0x000e, 0x0005, 0x28e2, 0x2902, 0x2942, 0x2972, 0x2996, + 0x29a6, 0x29a8, 0x080c, 0x2a5f, 0x11b0, 0x7850, 0x9084, 0xefff, + 0x7852, 0x2009, 0x1996, 0x2104, 0x7a38, 0x9294, 0x0005, 0x9296, + 0x0004, 0x0110, 0xc08d, 0x0008, 0xc085, 0x200a, 0x2001, 0x198e, + 0x2003, 0x0001, 0x0030, 0x080c, 0x29cc, 0x2001, 0xffff, 0x080c, + 0x285d, 0x0005, 0x080c, 0x29aa, 0x05e0, 0x2009, 0x1997, 0x2104, + 0x8001, 0x200a, 0x080c, 0x2a5f, 0x1178, 0x7850, 0x9084, 0xefff, + 0x7852, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0518, 0x2009, + 0x1996, 0x2104, 0xc085, 0x200a, 0x2009, 0x1993, 0x2104, 0x8000, + 0x200a, 0x9086, 0x0005, 0x0118, 0x080c, 0x29b2, 0x00c0, 0x200b, + 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0004, 0x0110, 0x9006, + 0x0010, 0x2001, 0x0001, 0x080c, 0x2a3a, 0x2001, 0x1990, 0x2003, + 0x0002, 0x0028, 0x2001, 0x198e, 0x2003, 0x0003, 0x0010, 0x080c, + 0x287f, 0x0005, 0x080c, 0x29aa, 0x0560, 0x2009, 0x1997, 0x2104, + 0x8001, 0x200a, 0x080c, 0x2a5f, 0x1168, 0x7850, 0x9084, 0xefff, + 0x7852, 0x2001, 0x198e, 0x2003, 0x0003, 0x2001, 0x198f, 0x2003, + 0x0000, 0x00b8, 0x2009, 0x1997, 0x2104, 0x9005, 0x1118, 0x080c, + 0x29ef, 0x0010, 0x080c, 0x29bf, 0x080c, 0x29b2, 0x2009, 0x1993, + 0x200b, 0x0000, 0x2001, 0x1990, 0x2003, 0x0001, 0x080c, 0x287f, + 0x0000, 0x0005, 0x04b9, 0x0508, 0x080c, 0x2a5f, 0x11b8, 0x7850, + 0x9084, 0xefff, 0x7852, 0x2009, 0x1994, 0x2104, 0x8000, 0x200a, + 0x9086, 0x0007, 0x0108, 0x0078, 0x2001, 0x1999, 0x2003, 0x000a, + 0x2009, 0x1996, 0x2104, 0xc0fd, 0x200a, 0x0038, 0x0419, 0x2001, + 0x1990, 0x2003, 0x0004, 0x080c, 0x28aa, 0x0005, 0x0099, 0x0168, + 0x080c, 0x2a5f, 0x1138, 0x7850, 0x9084, 0xefff, 0x7852, 0x080c, + 0x2896, 0x0018, 0x0079, 0x080c, 0x28aa, 0x0005, 0x080c, 0x0dd5, + 0x080c, 0x0dd5, 0x2009, 0x1998, 0x2104, 0x8001, 0x200a, 0x090c, + 0x2a0b, 0x0005, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, + 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2a3a, 0x0005, 0x7a38, + 0x9294, 0x0006, 0x9296, 0x0006, 0x0110, 0x9006, 0x0010, 0x2001, + 0x0001, 0x080c, 0x2a1d, 0x0005, 0x2009, 0x1993, 0x2104, 0x8000, + 0x200a, 0x9086, 0x0005, 0x0108, 0x0068, 0x200b, 0x0000, 0x7a38, + 0x9294, 0x0006, 0x9296, 0x0006, 0x0110, 0x9006, 0x0010, 0x2001, + 0x0001, 0x04d9, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0110, + 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2a3a, 0x0005, 0x0086, + 0x2001, 0x1996, 0x2004, 0x9084, 0x7fff, 0x090c, 0x0dd5, 0x2009, + 0x1995, 0x2144, 0x8846, 0x280a, 0x9844, 0x0dd8, 0xd08c, 0x1120, + 0xd084, 0x1120, 0x080c, 0x0dd5, 0x9006, 0x0010, 0x2001, 0x0001, + 0x00a1, 0x008e, 0x0005, 0x0006, 0x0156, 0x2001, 0x198e, 0x20a9, + 0x0009, 0x2003, 0x0000, 0x8000, 0x1f04, 0x2a11, 0x2001, 0x1995, + 0x2003, 0x8000, 0x015e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0100, + 0x9085, 0x0000, 0x0158, 0x7838, 0x9084, 0xfff9, 0x9085, 0x0004, + 0x783a, 0x2009, 0x199b, 0x210c, 0x795a, 0x0050, 0x7838, 0x9084, + 0xfffb, 0x9085, 0x0006, 0x783a, 0x2009, 0x199c, 0x210c, 0x795a, + 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0138, + 0x7838, 0x9084, 0xfffa, 0x9085, 0x0004, 0x783a, 0x0030, 0x7838, + 0x9084, 0xfffb, 0x9085, 0x0005, 0x783a, 0x00fe, 0x0005, 0x0006, + 0x2001, 0x0100, 0x2004, 0x9082, 0x0007, 0x000e, 0x0005, 0x0006, + 0x2001, 0x0100, 0x2004, 0x9082, 0x0009, 0x000e, 0x0005, 0x0156, + 0x20a9, 0x0064, 0x7820, 0x080c, 0x2aea, 0xd09c, 0x1110, 0x1f04, + 0x2a62, 0x015e, 0x0005, 0x0126, 0x0016, 0x0006, 0x2091, 0x8000, + 0x7850, 0x9085, 0x0040, 0x7852, 0x7850, 0x9084, 0xfbcf, 0x7852, + 0x080c, 0x2aea, 0x9085, 0x2000, 0x7852, 0x000e, 0x2008, 0x9186, + 0x0000, 0x1118, 0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118, + 0x783b, 0x0006, 0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005, + 0x0030, 0x9186, 0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006, + 0x1d04, 0x2a98, 0x080c, 0x833c, 0x1f04, 0x2a98, 0x7850, 0x9085, + 0x0400, 0x9084, 0xdfbf, 0x7852, 0x080c, 0x2aea, 0x9085, 0x1000, + 0x7852, 0x000e, 0x001e, 0x012e, 0x0005, 0x7850, 0x9084, 0xffcf, + 0x7852, 0x0005, 0x0006, 0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, + 0x000a, 0x7854, 0xd0ac, 0x1130, 0x7820, 0xd0e4, 0x1140, 0x1f04, + 0x2abc, 0x0028, 0x7854, 0xd08c, 0x1110, 0x1f04, 0x2ac2, 0x00fe, + 0x015e, 0x000e, 0x0005, 0x1d04, 0x2acb, 0x080c, 0x833c, 0x1f04, + 0x2acb, 0x0005, 0x0006, 0x2001, 0x199a, 0x2004, 0x9086, 0x0000, + 0x000e, 0x0005, 0x0006, 0x2001, 0x199a, 0x2004, 0x9086, 0x0001, + 0x000e, 0x0005, 0x0006, 0x2001, 0x199a, 0x2004, 0x9086, 0x0002, + 0x000e, 0x0005, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, + 0x0006, 0x2001, 0x19a6, 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, + 0x2104, 0xd0dc, 0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, + 0xa001, 0xa001, 0x200a, 0x0005, 0x0036, 0x0046, 0x2001, 0x0141, + 0x200c, 0x918c, 0xff00, 0x9186, 0x2000, 0x0118, 0x9186, 0x0100, + 0x1588, 0x2009, 0x00a2, 0x080c, 0x0e51, 0x2019, 0x0160, 0x2324, + 0x2011, 0x0003, 0x2009, 0x0169, 0x2104, 0x9084, 0x0007, 0x210c, + 0x918c, 0x0007, 0x910e, 0x1db0, 0x9086, 0x0003, 0x11b8, 0x2304, + 0x9402, 0x02a0, 0x1d60, 0x8211, 0x1d68, 0x84ff, 0x0170, 0x2001, + 0x0141, 0x200c, 0x918c, 0xff00, 0x9186, 0x0100, 0x0130, 0x2009, + 0x180c, 0x2104, 0xc0dd, 0x200a, 0x0008, 0x0419, 0x2009, 0x0000, + 0x080c, 0x0e51, 0x004e, 0x003e, 0x0005, 0x2001, 0x180c, 0x2004, + 0xd0dc, 0x01b0, 0x2001, 0x0160, 0x2004, 0x9005, 0x0140, 0x2001, + 0x0141, 0x2004, 0x9084, 0xff00, 0x9086, 0x0100, 0x1148, 0x0126, + 0x2091, 0x8000, 0x0016, 0x0026, 0x0021, 0x002e, 0x001e, 0x012e, + 0x0005, 0x00c6, 0x2061, 0x0100, 0x6014, 0x0006, 0x2001, 0x0161, + 0x2003, 0x0000, 0x6017, 0x0018, 0xa001, 0xa001, 0x602f, 0x0008, + 0x6104, 0x918e, 0x0010, 0x6106, 0x918e, 0x0010, 0x6106, 0x6017, + 0x0040, 0x04b9, 0x001e, 0x9184, 0x0003, 0x01e0, 0x0036, 0x0016, + 0x2019, 0x0141, 0x6124, 0x918c, 0x0028, 0x1120, 0x2304, 0x9084, + 0x2800, 0x0dc0, 0x001e, 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118, + 0x9385, 0x0009, 0x6016, 0x9184, 0x0002, 0x0118, 0x9385, 0x0012, + 0x6016, 0x003e, 0x2001, 0x180c, 0x200c, 0xc1dc, 0x2102, 0x00ce, + 0x0005, 0x0016, 0x0026, 0x080c, 0x7197, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, - 0x0005, 0x0006, 0x0016, 0x2009, 0x0140, 0x2104, 0x1110, 0xc0bc, - 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x2c2a, 0x2c2a, - 0x2a4e, 0x2a4e, 0x2a5a, 0x2a5a, 0x2a66, 0x2a66, 0x2a74, 0x2a74, - 0x2a80, 0x2a80, 0x2a8e, 0x2a8e, 0x2a9c, 0x2a9c, 0x2aae, 0x2aae, - 0x2aba, 0x2aba, 0x2ac8, 0x2ac8, 0x2ae6, 0x2ae6, 0x2b06, 0x2b06, - 0x2ad6, 0x2ad6, 0x2af6, 0x2af6, 0x2b14, 0x2b14, 0x2aac, 0x2aac, - 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, - 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, - 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, - 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2b26, 0x2b26, - 0x2b32, 0x2b32, 0x2b40, 0x2b40, 0x2b4e, 0x2b4e, 0x2b5e, 0x2b5e, - 0x2b6c, 0x2b6c, 0x2b7c, 0x2b7c, 0x2b8c, 0x2b8c, 0x2b9e, 0x2b9e, - 0x2bac, 0x2bac, 0x2bbc, 0x2bbc, 0x2bde, 0x2bde, 0x2c00, 0x2c00, - 0x2bcc, 0x2bcc, 0x2bef, 0x2bef, 0x2c0f, 0x2c0f, 0x2aac, 0x2aac, - 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, - 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, - 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, - 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, - 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, - 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x2aac, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2184, - 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x1f9f, 0x0804, 0x2c22, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f9f, - 0x080c, 0x2184, 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1fd7, 0x0804, 0x2c22, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x2184, 0x080c, 0x1fd7, 0x0804, 0x2c22, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f9f, - 0x080c, 0x1fd7, 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f9f, 0x080c, 0x2184, - 0x080c, 0x1fd7, 0x0804, 0x2c22, 0xa001, 0x0cf0, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x12d6, - 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x2184, 0x080c, 0x12d6, 0x0804, 0x2c22, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x1f9f, 0x080c, 0x12d6, 0x0804, 0x2c22, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2184, - 0x080c, 0x12d6, 0x080c, 0x1fd7, 0x0804, 0x2c22, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f9f, - 0x080c, 0x2184, 0x080c, 0x12d6, 0x0804, 0x2c22, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f9f, - 0x080c, 0x12d6, 0x080c, 0x1fd7, 0x0804, 0x2c22, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x12d6, - 0x080c, 0x1fd7, 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f9f, 0x080c, 0x2184, - 0x080c, 0x12d6, 0x080c, 0x1fd7, 0x0804, 0x2c22, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x25d9, - 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x25d9, 0x080c, 0x2184, 0x0804, 0x2c22, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x25d9, 0x080c, 0x1f9f, 0x0804, 0x2c22, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x25d9, - 0x080c, 0x1f9f, 0x080c, 0x2184, 0x0804, 0x2c22, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x25d9, - 0x080c, 0x1fd7, 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x25d9, 0x080c, 0x2184, - 0x080c, 0x1fd7, 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x25d9, 0x080c, 0x1f9f, - 0x080c, 0x1fd7, 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x25d9, 0x080c, 0x1f9f, - 0x080c, 0x2184, 0x080c, 0x1fd7, 0x0804, 0x2c22, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x25d9, - 0x080c, 0x12d6, 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x25d9, 0x080c, 0x2184, - 0x080c, 0x12d6, 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x25d9, 0x080c, 0x1f9f, - 0x080c, 0x12d6, 0x0804, 0x2c22, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x25d9, 0x080c, 0x2184, - 0x080c, 0x12d6, 0x080c, 0x1fd7, 0x0804, 0x2c22, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x25d9, - 0x080c, 0x1f9f, 0x080c, 0x2184, 0x080c, 0x12d6, 0x0498, 0x0106, + 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, + 0x9285, 0x1000, 0x200a, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, + 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, + 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x2009, 0x0140, 0x2104, + 0x1128, 0x080c, 0x7197, 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, + 0x001e, 0x000e, 0x0005, 0x2e47, 0x2e47, 0x2c6b, 0x2c6b, 0x2c77, + 0x2c77, 0x2c83, 0x2c83, 0x2c91, 0x2c91, 0x2c9d, 0x2c9d, 0x2cab, + 0x2cab, 0x2cb9, 0x2cb9, 0x2ccb, 0x2ccb, 0x2cd7, 0x2cd7, 0x2ce5, + 0x2ce5, 0x2d03, 0x2d03, 0x2d23, 0x2d23, 0x2cf3, 0x2cf3, 0x2d13, + 0x2d13, 0x2d31, 0x2d31, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, + 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, + 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, + 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, + 0x2cc9, 0x2cc9, 0x2cc9, 0x2d43, 0x2d43, 0x2d4f, 0x2d4f, 0x2d5d, + 0x2d5d, 0x2d6b, 0x2d6b, 0x2d7b, 0x2d7b, 0x2d89, 0x2d89, 0x2d99, + 0x2d99, 0x2da9, 0x2da9, 0x2dbb, 0x2dbb, 0x2dc9, 0x2dc9, 0x2dd9, + 0x2dd9, 0x2dfb, 0x2dfb, 0x2e1d, 0x2e1d, 0x2de9, 0x2de9, 0x2e0c, + 0x2e0c, 0x2e2c, 0x2e2c, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, + 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, + 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, + 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, + 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, + 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, 0x2cc9, + 0x2cc9, 0x2cc9, 0x2cc9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x2333, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, - 0x25d9, 0x080c, 0x1f9f, 0x080c, 0x12d6, 0x080c, 0x1fd7, 0x0410, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x25d9, 0x080c, 0x12d6, 0x080c, 0x1fd7, 0x0098, 0x0106, + 0x2147, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x2147, 0x080c, 0x2333, 0x0804, + 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x2182, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2333, 0x080c, + 0x2182, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x2147, 0x080c, 0x2182, 0x0804, + 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x2147, 0x080c, 0x2333, 0x080c, 0x2182, 0x0804, + 0x2e3f, 0xa001, 0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x1363, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, - 0x25d9, 0x080c, 0x1f9f, 0x080c, 0x2184, 0x080c, 0x12d6, 0x080c, - 0x1fd7, 0x0000, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, - 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026, - 0x080c, 0x6262, 0x1904, 0x2d17, 0x72d4, 0x2001, 0x194d, 0x2004, - 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, - 0x2d17, 0x080c, 0x2d1c, 0x0804, 0x2d17, 0xd2cc, 0x1904, 0x2d17, - 0x080c, 0x6c53, 0x1120, 0x70a7, 0xffff, 0x0804, 0x2d17, 0xd294, - 0x0120, 0x70a7, 0xffff, 0x0804, 0x2d17, 0x080c, 0x2f81, 0x0160, - 0x080c, 0xbcec, 0x0128, 0x2001, 0x1816, 0x203c, 0x0804, 0x2cb5, - 0x70a7, 0xffff, 0x0804, 0x2d17, 0x2001, 0x1816, 0x203c, 0x728c, - 0xd284, 0x0904, 0x2cb5, 0xd28c, 0x1904, 0x2cb5, 0x0036, 0x73a4, - 0x938e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, - 0x2c04, 0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, - 0x9084, 0x00ff, 0x970e, 0x0540, 0x908e, 0x0000, 0x0528, 0x908e, - 0x00ff, 0x1150, 0x7230, 0xd284, 0x1518, 0x728c, 0xc28d, 0x728e, - 0x70a7, 0xffff, 0x003e, 0x0408, 0x900e, 0x080c, 0x24d6, 0x080c, - 0x5f1e, 0x11a0, 0x080c, 0x62a4, 0x1150, 0x7030, 0xd08c, 0x0118, - 0xb800, 0xd0bc, 0x0120, 0x080c, 0x2d35, 0x0140, 0x0028, 0x080c, - 0x2e71, 0x080c, 0x2d61, 0x0110, 0x8318, 0x0838, 0x73a6, 0x0010, - 0x70a7, 0xffff, 0x003e, 0x0804, 0x2d17, 0x9780, 0x2f92, 0x203d, - 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e, 0x70a4, 0x9096, 0xffff, - 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, - 0x20a8, 0x0020, 0x70a7, 0xffff, 0x0804, 0x2d17, 0x2700, 0x0156, - 0x0016, 0x9106, 0x05c8, 0xc484, 0x080c, 0x5f7e, 0x0138, 0x080c, - 0xbcec, 0x1590, 0x080c, 0x5f1e, 0x15b8, 0x0008, 0xc485, 0x080c, - 0x62a4, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, - 0x728c, 0xd28c, 0x0180, 0x080c, 0x62a4, 0x9082, 0x0006, 0x02e0, - 0xd484, 0x1118, 0x080c, 0x5f42, 0x0028, 0x080c, 0x2efd, 0x01a0, - 0x080c, 0x2f28, 0x0088, 0x080c, 0x2e71, 0x080c, 0xbcec, 0x1160, - 0x080c, 0x2d61, 0x0188, 0x0040, 0x080c, 0xbcec, 0x1118, 0x080c, - 0x2efd, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, - 0x2cce, 0x70a7, 0xffff, 0x0018, 0x001e, 0x015e, 0x71a6, 0x004e, - 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70a7, 0x0001, - 0x2009, 0x007e, 0x080c, 0x5f1e, 0x1168, 0xb813, 0x00ff, 0xb817, - 0xfffe, 0x080c, 0x2e71, 0x04a9, 0x0128, 0x70d4, 0xc0bd, 0x70d6, - 0x080c, 0xba40, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, - 0x00c6, 0x2001, 0x1858, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, - 0x9a23, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xba69, 0x6023, 0x0001, - 0x9006, 0x080c, 0x5ebb, 0x2001, 0x0000, 0x080c, 0x5ecf, 0x0126, - 0x2091, 0x8000, 0x70a0, 0x8000, 0x70a2, 0x012e, 0x2009, 0x0004, - 0x080c, 0x9a50, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, - 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1858, 0x2004, - 0x9084, 0x00ff, 0xb842, 0x080c, 0x9a23, 0x0548, 0x2b00, 0x6012, - 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804, - 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x2e30, 0x080c, - 0xba69, 0x6023, 0x0001, 0x9006, 0x080c, 0x5ebb, 0x2001, 0x0002, - 0x080c, 0x5ecf, 0x0126, 0x2091, 0x8000, 0x70a0, 0x8000, 0x70a2, - 0x012e, 0x2009, 0x0002, 0x080c, 0x9a50, 0x9085, 0x0001, 0x00ce, - 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009, - 0x0080, 0x080c, 0x5f1e, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc, - 0x0039, 0x0110, 0x70db, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005, - 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0x9980, 0x01d0, 0x2b00, - 0x6012, 0x080c, 0xba69, 0x6023, 0x0001, 0x9006, 0x080c, 0x5ebb, - 0x2001, 0x0002, 0x080c, 0x5ecf, 0x0126, 0x2091, 0x8000, 0x70dc, - 0x8000, 0x70de, 0x012e, 0x2009, 0x0002, 0x080c, 0x9a50, 0x9085, - 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, - 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x5f1e, 0x11b8, - 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004, 0x080c, 0x9980, - 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, - 0xba69, 0x2009, 0x0022, 0x080c, 0x9a50, 0x9085, 0x0001, 0x012e, - 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, - 0x00b6, 0x21f0, 0x080c, 0x818b, 0x080c, 0x811a, 0x080c, 0x9819, - 0x080c, 0xa893, 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, - 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x5f7e, - 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, - 0x5a3b, 0x001e, 0x8108, 0x1f04, 0x2e15, 0x9686, 0x0001, 0x190c, - 0x2f55, 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, - 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210, 0x2258, - 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x8180, 0x0076, 0x2039, - 0x0000, 0x080c, 0x8078, 0x2c08, 0x080c, 0xcd62, 0x007e, 0x001e, - 0xba10, 0xbb14, 0x080c, 0x5a3b, 0xba12, 0xbb16, 0x00be, 0x001e, - 0x002e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, - 0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, - 0x1800, 0x70a0, 0x9005, 0x0110, 0x8001, 0x70a2, 0x000e, 0x00ee, - 0x0005, 0x2071, 0x1800, 0x70dc, 0x9005, 0x0dc0, 0x8001, 0x70de, - 0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, - 0x00b6, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, - 0x20a9, 0x0001, 0x0088, 0x080c, 0x5113, 0xd0c4, 0x0150, 0xd0a4, - 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xcfe6, - 0x004e, 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e, 0x007e, 0x0904, - 0x2edd, 0x928e, 0x007f, 0x0904, 0x2edd, 0x928e, 0x0080, 0x05e8, - 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c0, 0x8fff, 0x1148, 0x2001, - 0x195d, 0x0006, 0x2003, 0x0001, 0x04e9, 0x000e, 0x2003, 0x0000, - 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c, 0x626e, 0x00ce, - 0x00be, 0x2019, 0x0029, 0x080c, 0x8180, 0x0076, 0x2039, 0x0000, - 0x080c, 0x8078, 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, - 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, - 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, - 0x2c08, 0x080c, 0xcd62, 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, - 0x2e94, 0x015e, 0x001e, 0x002e, 0x003e, 0x00be, 0x00ce, 0x00ee, - 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x080c, 0x5113, 0xd0c4, - 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, 0x2009, 0x0029, 0x080c, - 0xcfe6, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, - 0x00c6, 0x728c, 0x82ff, 0x01e8, 0x080c, 0x629c, 0x11d0, 0x2100, - 0x080c, 0x2509, 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, - 0x1c80, 0x2c04, 0xd384, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, - 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, - 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, - 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0036, 0x2019, 0x0029, - 0x00a9, 0x003e, 0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016, - 0x00c6, 0x2061, 0x1a73, 0x001e, 0x6112, 0x080c, 0x2e30, 0x001e, - 0x080c, 0x5f42, 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, - 0x2110, 0x080c, 0x94b5, 0x080c, 0xd29b, 0x002e, 0x001e, 0x0005, - 0x2001, 0x1835, 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, - 0x6c53, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, - 0x6c53, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000, - 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, - 0x5f42, 0x8108, 0x1f04, 0x2f66, 0x2061, 0x1800, 0x6077, 0x0000, - 0x6078, 0x9084, 0x00ff, 0x607a, 0x60ab, 0x0000, 0x00be, 0x00ce, - 0x0005, 0x2001, 0x1875, 0x2004, 0xd0bc, 0x0005, 0x2011, 0x1854, - 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011, 0x1873, 0x2214, 0xd2dc, - 0x002e, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, - 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, - 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, - 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, - 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, - 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, - 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, - 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, - 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, - 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, - 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, - 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, - 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, - 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, - 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, - 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, - 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, - 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, - 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, - 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, - 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, - 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, - 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, - 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, - 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, - 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, - 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x2333, 0x080c, 0x1363, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2147, 0x080c, + 0x1363, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x2333, 0x080c, 0x1363, 0x080c, + 0x2182, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x2147, 0x080c, 0x2333, 0x080c, + 0x1363, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x2147, 0x080c, 0x1363, 0x080c, + 0x2182, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x1363, 0x080c, 0x2182, 0x0804, + 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x2147, 0x080c, 0x2333, 0x080c, 0x1363, 0x080c, + 0x2182, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x27f3, 0x0804, 0x2e3f, 0x0106, + 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, + 0x27f3, 0x080c, 0x2333, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27f3, 0x080c, + 0x2147, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x27f3, 0x080c, 0x2147, 0x080c, + 0x2333, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x27f3, 0x080c, 0x2182, 0x0804, + 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x27f3, 0x080c, 0x2333, 0x080c, 0x2182, 0x0804, + 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x27f3, 0x080c, 0x2147, 0x080c, 0x2182, 0x0804, + 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x27f3, 0x080c, 0x2147, 0x080c, 0x2333, 0x080c, + 0x2182, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x27f3, 0x080c, 0x1363, 0x0804, + 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x27f3, 0x080c, 0x2333, 0x080c, 0x1363, 0x0804, + 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x27f3, 0x080c, 0x2147, 0x080c, 0x1363, 0x0804, + 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x27f3, 0x080c, 0x2333, 0x080c, 0x1363, 0x080c, + 0x2182, 0x0804, 0x2e3f, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x27f3, 0x080c, 0x2147, 0x080c, + 0x2333, 0x080c, 0x1363, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, + 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27f3, 0x080c, 0x2147, + 0x080c, 0x1363, 0x080c, 0x2182, 0x0410, 0x0106, 0x0006, 0x0126, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27f3, 0x080c, + 0x1363, 0x080c, 0x2182, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, + 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27f3, 0x080c, 0x2147, + 0x080c, 0x2333, 0x080c, 0x1363, 0x080c, 0x2182, 0x0000, 0x015e, + 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, + 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026, 0x080c, 0x66f5, 0x1904, + 0x2f55, 0x72dc, 0x2001, 0x197c, 0x2004, 0x9005, 0x1110, 0xd29c, + 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x2f55, 0x080c, 0x2f5a, + 0x0804, 0x2f55, 0xd2cc, 0x1904, 0x2f55, 0x080c, 0x717d, 0x1120, + 0x70af, 0xffff, 0x0804, 0x2f55, 0xd294, 0x0120, 0x70af, 0xffff, + 0x0804, 0x2f55, 0x080c, 0x31bf, 0x0160, 0x080c, 0xcf18, 0x0128, + 0x2001, 0x1818, 0x203c, 0x0804, 0x2ee2, 0x70af, 0xffff, 0x0804, + 0x2f55, 0x2001, 0x1818, 0x203c, 0x7294, 0xd284, 0x0904, 0x2ee2, + 0xd28c, 0x1904, 0x2ee2, 0x0036, 0x73ac, 0x938e, 0xffff, 0x1110, + 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, + 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, + 0x05b8, 0x908e, 0x0000, 0x05a0, 0x908e, 0x00ff, 0x1150, 0x7230, + 0xd284, 0x1598, 0x7294, 0xc28d, 0x7296, 0x70af, 0xffff, 0x003e, + 0x0488, 0x900e, 0x080c, 0x26f0, 0x080c, 0x636c, 0x1520, 0x9006, + 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c, + 0x8710, 0x00ce, 0x090c, 0x8ab4, 0xb8af, 0x0000, 0x080c, 0x6737, + 0x1150, 0x7030, 0xd08c, 0x0118, 0xb800, 0xd0bc, 0x0120, 0x080c, + 0x2f73, 0x0148, 0x0028, 0x080c, 0x30af, 0x080c, 0x2f9f, 0x0118, + 0x8318, 0x0804, 0x2e92, 0x73ae, 0x0010, 0x70af, 0xffff, 0x003e, + 0x0804, 0x2f55, 0x9780, 0x31d0, 0x203d, 0x97bc, 0xff00, 0x873f, + 0x2041, 0x007e, 0x70ac, 0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, + 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, 0x70af, + 0xffff, 0x0804, 0x2f55, 0x2700, 0x0156, 0x0016, 0x9106, 0x0904, + 0x2f4a, 0xc484, 0x080c, 0x63cd, 0x0148, 0x080c, 0xcf18, 0x1904, + 0x2f4a, 0x080c, 0x636c, 0x1904, 0x2f52, 0x0008, 0xc485, 0xb8bb, + 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c, 0x8710, + 0x00ce, 0x090c, 0x8ab4, 0xb8af, 0x0000, 0x080c, 0x6737, 0x1130, + 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x7294, 0xd28c, + 0x0180, 0x080c, 0x6737, 0x9082, 0x0006, 0x02e0, 0xd484, 0x1118, + 0x080c, 0x6391, 0x0028, 0x080c, 0x313b, 0x01a0, 0x080c, 0x3166, + 0x0088, 0x080c, 0x30af, 0x080c, 0xcf18, 0x1160, 0x080c, 0x2f9f, + 0x0188, 0x0040, 0x080c, 0xcf18, 0x1118, 0x080c, 0x313b, 0x0110, + 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, 0x2efb, 0x70af, + 0xffff, 0x0018, 0x001e, 0x015e, 0x71ae, 0x004e, 0x002e, 0x00ce, + 0x00be, 0x0005, 0x00c6, 0x0016, 0x70af, 0x0001, 0x2009, 0x007e, + 0x080c, 0x636c, 0x1168, 0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, + 0x30af, 0x04a9, 0x0128, 0x70dc, 0xc0bd, 0x70de, 0x080c, 0xcc6a, + 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, + 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xabb9, 0x01d0, + 0x2b00, 0x6012, 0x080c, 0xcc93, 0x6023, 0x0001, 0x9006, 0x080c, + 0x6309, 0x2001, 0x0000, 0x080c, 0x631d, 0x0126, 0x2091, 0x8000, + 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0004, 0x080c, 0xabe6, + 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x0016, + 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, + 0xb842, 0x080c, 0xabb9, 0x0548, 0x2b00, 0x6012, 0xb800, 0xc0c4, + 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804, 0x9084, 0x00ff, + 0x9086, 0x0006, 0x1110, 0x080c, 0x306e, 0x080c, 0xcc93, 0x6023, + 0x0001, 0x9006, 0x080c, 0x6309, 0x2001, 0x0002, 0x080c, 0x631d, + 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, + 0x0002, 0x080c, 0xabe6, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, + 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, + 0x636c, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039, 0x0110, + 0x70e3, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016, 0x0076, + 0x00d6, 0x00c6, 0x080c, 0xab15, 0x01d0, 0x2b00, 0x6012, 0x080c, + 0xcc93, 0x6023, 0x0001, 0x9006, 0x080c, 0x6309, 0x2001, 0x0002, + 0x080c, 0x631d, 0x0126, 0x2091, 0x8000, 0x70e4, 0x8000, 0x70e6, + 0x012e, 0x2009, 0x0002, 0x080c, 0xabe6, 0x9085, 0x0001, 0x00ce, + 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, + 0x8000, 0x2009, 0x007f, 0x080c, 0x636c, 0x11b8, 0xb813, 0x00ff, + 0xb817, 0xfffd, 0xb8cf, 0x0004, 0x080c, 0xab15, 0x0170, 0x2b00, + 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, 0xcc93, 0x2009, + 0x0022, 0x080c, 0xabe6, 0x9085, 0x0001, 0x012e, 0x00de, 0x00ce, + 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6, 0x21f0, + 0x080c, 0x9025, 0x080c, 0x8faa, 0x080c, 0xa9ae, 0x080c, 0xba81, + 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, + 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x63cd, 0x1140, 0x9686, + 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x5e12, 0x001e, + 0x8108, 0x1f04, 0x3053, 0x9686, 0x0001, 0x190c, 0x3193, 0x00be, + 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, + 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210, 0x2258, 0xbaa0, 0x0026, + 0x2019, 0x0029, 0x080c, 0x901a, 0x0076, 0x2039, 0x0000, 0x080c, + 0x8ef7, 0x2c08, 0x080c, 0xdfbd, 0x007e, 0x001e, 0xba10, 0xbb14, + 0x080c, 0x5e12, 0xba12, 0xbb16, 0x00be, 0x001e, 0x002e, 0x003e, + 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058, + 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a8, + 0x9005, 0x0110, 0x8001, 0x70aa, 0x000e, 0x00ee, 0x0005, 0x2071, + 0x1800, 0x70e4, 0x9005, 0x0dc0, 0x8001, 0x70e6, 0x0ca8, 0xb800, + 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0036, + 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, + 0x0088, 0x080c, 0x54b7, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, + 0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xe280, 0x004e, 0x20a9, + 0x0800, 0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x311b, 0x928e, + 0x007f, 0x0904, 0x311b, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, + 0x210c, 0x81ff, 0x05c0, 0x8fff, 0x1148, 0x2001, 0x198c, 0x0006, + 0x2003, 0x0001, 0x04e9, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, + 0x2158, 0x2001, 0x0001, 0x080c, 0x6701, 0x00ce, 0x00be, 0x2019, + 0x0029, 0x080c, 0x901a, 0x0076, 0x2039, 0x0000, 0x080c, 0x8ef7, + 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, + 0x0006, 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, + 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, + 0xdfbd, 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x30d2, 0x015e, + 0x001e, 0x002e, 0x003e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, + 0x0046, 0x0026, 0x0016, 0x080c, 0x54b7, 0xd0c4, 0x0140, 0xd0a4, + 0x0130, 0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xe280, 0x001e, + 0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, + 0x82ff, 0x01e8, 0x080c, 0x672f, 0x11d0, 0x2100, 0x080c, 0x2723, + 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, + 0xd384, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, + 0x9116, 0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, + 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, + 0x0126, 0x2091, 0x8000, 0x0036, 0x2019, 0x0029, 0x00a9, 0x003e, + 0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061, + 0x1aa7, 0x001e, 0x6112, 0x080c, 0x306e, 0x001e, 0x080c, 0x6391, + 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, + 0xa512, 0x080c, 0xe5e4, 0x002e, 0x001e, 0x0005, 0x2001, 0x1837, + 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x717d, 0x1118, + 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x717d, 0x1110, + 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, + 0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x6391, 0x8108, + 0x1f04, 0x31a4, 0x2061, 0x1800, 0x607f, 0x0000, 0x6080, 0x9084, + 0x00ff, 0x6082, 0x60b3, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, + 0x1869, 0x2004, 0xd0bc, 0x0005, 0x2011, 0x1848, 0x2214, 0xd2ec, + 0x0005, 0x0026, 0x2011, 0x1867, 0x2214, 0xd2dc, 0x002e, 0x0005, + 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, + 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, + 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, + 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, + 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, + 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, + 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, + 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, + 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, + 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, + 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, + 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, + 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, + 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, + 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, + 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, + 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, + 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, + 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, + 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, + 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, + 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, + 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, + 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, + 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, + 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, + 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, + 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, + 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x2071, 0x1894, 0x7003, 0x0002, 0x9006, 0x7016, - 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046, 0x703b, 0x18b0, - 0x703f, 0x18b0, 0x7007, 0x0001, 0x080c, 0x0fee, 0x090c, 0x0db2, - 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c, 0x0fee, - 0x090c, 0x0db2, 0x2900, 0x706e, 0xa867, 0x0002, 0xa8ab, 0xdcb0, - 0x0005, 0x2071, 0x1894, 0x7004, 0x0002, 0x30c1, 0x30c2, 0x30d5, - 0x30e9, 0x0005, 0x1004, 0x30d2, 0x0e04, 0x30d2, 0x2079, 0x0000, - 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128, 0x700f, 0x0001, - 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, 0x2061, - 0x18ae, 0x2c4c, 0xa86c, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, - 0x0904, 0x31bd, 0x0005, 0x7018, 0x2048, 0x2061, 0x1800, 0x701c, - 0x0807, 0x7014, 0x2048, 0xa864, 0x9094, 0x00ff, 0x9296, 0x0029, - 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, - 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c, 0x0807, 0x2061, - 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61c8, 0x0042, 0x2100, - 0x908a, 0x003f, 0x1a04, 0x31ba, 0x61c8, 0x0804, 0x314f, 0x3191, - 0x31c9, 0x31d3, 0x31d7, 0x31e1, 0x31e7, 0x31eb, 0x31fb, 0x31fe, - 0x3208, 0x320d, 0x3212, 0x321d, 0x3228, 0x3237, 0x3246, 0x3254, - 0x326b, 0x3286, 0x31ba, 0x332f, 0x336d, 0x3413, 0x3424, 0x3447, - 0x31ba, 0x31ba, 0x31ba, 0x347f, 0x349b, 0x34a4, 0x34d3, 0x34d9, - 0x31ba, 0x351f, 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x352a, - 0x3533, 0x353b, 0x353d, 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x31ba, - 0x31ba, 0x3569, 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x3586, - 0x35e1, 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x0002, - 0x360b, 0x360e, 0x366d, 0x3686, 0x36b6, 0x3954, 0x31ba, 0x4cec, - 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x31ba, 0x31ba, - 0x3208, 0x320d, 0x3e75, 0x31ba, 0x3e8b, 0x4d7b, 0x4dcc, 0x4ecf, - 0x31ba, 0x4f31, 0x4f6d, 0x4f9e, 0x50a2, 0x4fcb, 0x5022, 0x31ba, - 0x3e8f, 0x404f, 0x4065, 0x408a, 0x40ef, 0x4163, 0x4183, 0x41fa, - 0x420b, 0x421c, 0x421f, 0x4244, 0x42b7, 0x431d, 0x4325, 0x4457, - 0x459c, 0x45d0, 0x4834, 0x31ba, 0x4852, 0x48fe, 0x49d4, 0x31ba, - 0x31ba, 0x31ba, 0x31ba, 0x4a3a, 0x4a55, 0x4325, 0x4c9b, 0x714c, - 0x0000, 0x2021, 0x4000, 0x080c, 0x464e, 0x0126, 0x2091, 0x8000, - 0x0e04, 0x319b, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, - 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, - 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, - 0x190c, 0x1167, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, - 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, 0x0898, - 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868, 0x2021, 0x4006, - 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, - 0x7990, 0x0804, 0x465b, 0x7883, 0x0004, 0x7884, 0x0807, 0x2039, + 0x2071, 0x189e, 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a, + 0x704e, 0x700e, 0x7042, 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, + 0x7007, 0x0001, 0x080c, 0x1019, 0x090c, 0x0dd5, 0x2900, 0x706a, + 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c, 0x1019, 0x090c, 0x0dd5, + 0x2900, 0x706e, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071, + 0x189e, 0x7004, 0x0002, 0x32ff, 0x3300, 0x3313, 0x3327, 0x0005, + 0x1004, 0x3310, 0x0e04, 0x3310, 0x2079, 0x0000, 0x0126, 0x2091, + 0x8000, 0x700c, 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468, + 0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18b8, 0x2c4c, + 0xa86c, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x33fb, + 0x0005, 0x7018, 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014, + 0x2048, 0xa864, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78, + 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079, + 0x0000, 0x2061, 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880, + 0x908a, 0x0040, 0x1210, 0x61d0, 0x0042, 0x2100, 0x908a, 0x003f, + 0x1a04, 0x33f8, 0x61d0, 0x0804, 0x338d, 0x33cf, 0x3407, 0x3411, + 0x3415, 0x341f, 0x3425, 0x3429, 0x3439, 0x343c, 0x3446, 0x344b, + 0x3450, 0x345b, 0x3466, 0x3475, 0x3484, 0x3492, 0x34a9, 0x34c4, + 0x33f8, 0x356d, 0x35ab, 0x3651, 0x3662, 0x3685, 0x33f8, 0x33f8, + 0x33f8, 0x36bd, 0x36d9, 0x36e2, 0x3711, 0x3717, 0x33f8, 0x375d, + 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x3768, 0x3771, 0x3779, + 0x377b, 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x37a7, + 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x37c4, 0x3825, 0x33f8, + 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x0002, 0x384f, 0x3852, + 0x38b1, 0x38ca, 0x38fa, 0x3b98, 0x33f8, 0x5090, 0x33f8, 0x33f8, + 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x33f8, 0x3446, 0x344b, + 0x40b9, 0x54db, 0x40d7, 0x511f, 0x5170, 0x5273, 0x33f8, 0x52d5, + 0x5311, 0x5342, 0x5446, 0x536f, 0x53c6, 0x33f8, 0x40db, 0x42a4, + 0x42ba, 0x42df, 0x4344, 0x43b8, 0x43d8, 0x444f, 0x4460, 0x4478, + 0x447b, 0x44a0, 0x4510, 0x4576, 0x457e, 0x46b0, 0x4825, 0x4859, + 0x4abd, 0x33f8, 0x4adb, 0x4b87, 0x4c69, 0x4cc3, 0x33f8, 0x4d78, + 0x33f8, 0x4dde, 0x4df9, 0x457e, 0x503f, 0x714c, 0x0000, 0x2021, + 0x4000, 0x080c, 0x48d7, 0x0126, 0x2091, 0x8000, 0x0e04, 0x33d9, + 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, + 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, + 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1192, + 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, + 0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003, + 0x0880, 0x2021, 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, - 0x465e, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804, 0x3191, 0x7984, - 0x2114, 0x0804, 0x3191, 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9, - 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88, - 0x7b8c, 0x0804, 0x3191, 0x7884, 0x2060, 0x04d8, 0x2009, 0x0003, - 0x2011, 0x0002, 0x2019, 0x0012, 0x789b, 0x0117, 0x0804, 0x3191, - 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800, 0x2039, 0x0001, 0x7d98, - 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x31c6, - 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x31cd, 0x79a0, 0x9182, 0x0040, - 0x0210, 0x0804, 0x31c6, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x31db, - 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x31c6, 0x21e8, 0x7984, - 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x3191, 0x2061, - 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, - 0x2010, 0x9005, 0x0904, 0x3191, 0x0804, 0x31c0, 0x79a0, 0x9182, - 0x0040, 0x0210, 0x0804, 0x31c6, 0x21e0, 0x20a9, 0x0001, 0x7984, - 0x2198, 0x4012, 0x0804, 0x3191, 0x2069, 0x1853, 0x7884, 0x7990, - 0x911a, 0x1a04, 0x31c6, 0x8019, 0x0904, 0x31c6, 0x684a, 0x6942, - 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, - 0x6f5b, 0x0804, 0x3191, 0x2069, 0x1853, 0x7884, 0x7994, 0x911a, - 0x1a04, 0x31c6, 0x8019, 0x0904, 0x31c6, 0x684e, 0x6946, 0x788c, - 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, - 0x8000, 0x080c, 0x630e, 0x012e, 0x0804, 0x3191, 0x902e, 0x2520, - 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x31c3, 0x7984, 0x7b88, - 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x189c, 0x4101, - 0x080c, 0x4612, 0x1120, 0x2009, 0x0002, 0x0804, 0x31c3, 0x2009, - 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x465b, 0x701f, - 0x32aa, 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, - 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, - 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, 0x31c3, 0x810f, 0x918c, - 0x00ff, 0x0904, 0x31c3, 0x7112, 0x7010, 0x8001, 0x0560, 0x7012, - 0x080c, 0x4612, 0x1120, 0x2009, 0x0002, 0x0804, 0x31c3, 0x2009, - 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0x9290, - 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, - 0x9080, 0x0019, 0xaf60, 0x080c, 0x465b, 0x701f, 0x32e8, 0x0005, - 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, - 0x1904, 0x31c3, 0x0888, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, - 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1160, 0xc2fd, 0xaa7a, - 0x080c, 0x5b2d, 0x0150, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, - 0x012e, 0x0050, 0x080c, 0x5e34, 0x1128, 0x7007, 0x0003, 0x701f, - 0x3314, 0x0005, 0x080c, 0x6770, 0x0126, 0x2091, 0x8000, 0x20a9, - 0x0005, 0x20e1, 0x0001, 0x2099, 0x189c, 0x400a, 0x2100, 0x9210, - 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, - 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, 0x465e, 0x2091, - 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883, 0x4000, 0x7887, - 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009, 0x017f, 0x2104, - 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, - 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd, 0x2104, 0x789e, - 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, - 0x0180, 0x2001, 0x19e8, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, - 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003, - 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904, 0x31c3, - 0x7984, 0x080c, 0x5f7e, 0x1904, 0x31c6, 0x7e98, 0x9684, 0x3fff, - 0x9082, 0x4000, 0x1a04, 0x31c6, 0x7c88, 0x7d8c, 0x080c, 0x60e1, - 0x080c, 0x60b0, 0x0000, 0x1518, 0x2061, 0x1cd0, 0x0126, 0x2091, - 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, - 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e, 0x9ce0, - 0x0018, 0x2001, 0x1818, 0x2004, 0x9c02, 0x1a04, 0x31c3, 0x0c30, - 0x080c, 0xb251, 0x012e, 0x0904, 0x31c3, 0x0804, 0x3191, 0x900e, - 0x2001, 0x0005, 0x080c, 0x6770, 0x0126, 0x2091, 0x8000, 0x080c, - 0xb8e9, 0x080c, 0x6536, 0x012e, 0x0804, 0x3191, 0x00a6, 0x2950, - 0xb198, 0x080c, 0x5f7e, 0x1904, 0x3400, 0xb6a4, 0x9684, 0x3fff, - 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x60e1, 0x080c, - 0x60b0, 0x1520, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, + 0x48e4, 0x7883, 0x0004, 0x7884, 0x0807, 0x2039, 0x0001, 0x902e, + 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x48e7, 0x7984, + 0x7888, 0x2114, 0x200a, 0x0804, 0x33cf, 0x7984, 0x2114, 0x0804, + 0x33cf, 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, + 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, + 0x33cf, 0x7884, 0x2060, 0x04d8, 0x2009, 0x0003, 0x2011, 0x0002, + 0x2019, 0x0015, 0x789b, 0x0137, 0x0804, 0x33cf, 0x2039, 0x0001, + 0x7d98, 0x7c9c, 0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, + 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3404, 0x2138, 0x7d98, + 0x7c9c, 0x0804, 0x340b, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, + 0x3404, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x3419, 0x79a0, 0x9182, + 0x0040, 0x0210, 0x0804, 0x3404, 0x21e8, 0x7984, 0x7888, 0x20a9, + 0x0001, 0x21a0, 0x4004, 0x0804, 0x33cf, 0x2061, 0x0800, 0xe10c, + 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, + 0x0904, 0x33cf, 0x0804, 0x33fe, 0x79a0, 0x9182, 0x0040, 0x0210, + 0x0804, 0x3404, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, + 0x0804, 0x33cf, 0x2069, 0x1847, 0x7884, 0x7990, 0x911a, 0x1a04, + 0x3404, 0x8019, 0x0904, 0x3404, 0x684a, 0x6942, 0x788c, 0x6852, + 0x7888, 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x7496, 0x0804, + 0x33cf, 0x2069, 0x1847, 0x7884, 0x7994, 0x911a, 0x1a04, 0x3404, + 0x8019, 0x0904, 0x3404, 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, + 0x6866, 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, + 0x67a1, 0x012e, 0x0804, 0x33cf, 0x902e, 0x2520, 0x81ff, 0x0120, + 0x2009, 0x0001, 0x0804, 0x3401, 0x7984, 0x7b88, 0x7a8c, 0x20a9, + 0x0005, 0x20e9, 0x0001, 0x20a1, 0x18a6, 0x4101, 0x080c, 0x489b, + 0x1120, 0x2009, 0x0002, 0x0804, 0x3401, 0x2009, 0x0020, 0xa85c, + 0x9080, 0x0019, 0xaf60, 0x080c, 0x48e4, 0x701f, 0x34e8, 0x0005, + 0xa864, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, + 0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048, 0x0120, + 0x9096, 0x0029, 0x1904, 0x3401, 0x810f, 0x918c, 0x00ff, 0x0904, + 0x3401, 0x7112, 0x7010, 0x8001, 0x0560, 0x7012, 0x080c, 0x489b, + 0x1120, 0x2009, 0x0002, 0x0804, 0x3401, 0x2009, 0x0020, 0x7068, + 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0x9290, 0x0040, 0x9399, + 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, + 0xaf60, 0x080c, 0x48e4, 0x701f, 0x3526, 0x0005, 0xa864, 0x9084, + 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904, 0x3401, + 0x0888, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, + 0x00ff, 0x9096, 0x0029, 0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x5f69, + 0x0150, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, 0x012e, 0x0050, + 0x080c, 0x6282, 0x1128, 0x7007, 0x0003, 0x701f, 0x3552, 0x0005, + 0x080c, 0x6c85, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, + 0x0001, 0x2099, 0x18a6, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, + 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, + 0x0020, 0x012e, 0xaf60, 0x0804, 0x48e7, 0x2091, 0x8000, 0x7837, + 0x4000, 0x7833, 0x0010, 0x7883, 0x4000, 0x7887, 0x4953, 0x788b, + 0x5020, 0x788f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7892, 0x3f00, + 0x7896, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, + 0x9205, 0x789a, 0x2009, 0x04fd, 0x2104, 0x789e, 0x2091, 0x5000, + 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, + 0x1a17, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, + 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, + 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904, 0x3401, 0x7984, 0x080c, + 0x63cd, 0x1904, 0x3404, 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, + 0x1a04, 0x3404, 0x7c88, 0x7d8c, 0x080c, 0x6530, 0x080c, 0x64ff, + 0x0000, 0x1518, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, - 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x0018, 0x2001, - 0x1818, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, - 0xb251, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, - 0x0005, 0x080c, 0x6770, 0x0126, 0x2091, 0x8000, 0x080c, 0xb8e9, - 0x080c, 0x6529, 0x012e, 0x0070, 0xb097, 0x4005, 0xb19a, 0x0010, - 0xb097, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x2a48, - 0x00ae, 0x0005, 0xb097, 0x4000, 0x9006, 0x918d, 0x0001, 0x2008, - 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x31c3, 0x080c, 0x4629, - 0x0904, 0x31c6, 0x080c, 0x6045, 0x0904, 0x31c3, 0x080c, 0x60e7, - 0x0904, 0x31c3, 0x0804, 0x417a, 0x81ff, 0x1904, 0x31c3, 0x080c, - 0x4645, 0x0904, 0x31c6, 0x080c, 0x6175, 0x0904, 0x31c3, 0x2019, - 0x0005, 0x79a8, 0x080c, 0x6102, 0x0904, 0x31c3, 0x7888, 0x908a, - 0x1000, 0x1a04, 0x31c6, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, - 0x7c58, 0x7984, 0xd184, 0x1904, 0x3191, 0x0804, 0x417a, 0x0126, - 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, - 0x07ff, 0x6454, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x5f7e, - 0x11d8, 0x080c, 0x6175, 0x1128, 0x2009, 0x0002, 0x62b8, 0x2518, - 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x6102, 0x1118, 0x2009, - 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, - 0x810b, 0x9108, 0x080c, 0x7c58, 0x8529, 0x1ae0, 0x012e, 0x0804, - 0x3191, 0x012e, 0x0804, 0x31c3, 0x012e, 0x0804, 0x31c6, 0x080c, - 0x4629, 0x0904, 0x31c6, 0x080c, 0x6045, 0x0904, 0x31c3, 0xbaa0, - 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x8180, 0x0076, 0x903e, - 0x080c, 0x8078, 0x900e, 0x080c, 0xcd62, 0x007e, 0x00ce, 0x080c, - 0x60e1, 0x0804, 0x3191, 0x080c, 0x4629, 0x0904, 0x31c6, 0x080c, - 0x60e1, 0x2208, 0x0804, 0x3191, 0x0156, 0x00d6, 0x00e6, 0x2069, - 0x1906, 0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, - 0x901e, 0x20a9, 0x007e, 0x2069, 0x1000, 0x2d04, 0x905d, 0x0118, - 0xb84c, 0x0059, 0x9210, 0x8d68, 0x1f04, 0x34b5, 0x2300, 0x9218, - 0x00ee, 0x00de, 0x015e, 0x0804, 0x3191, 0x00f6, 0x0016, 0x907d, - 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178, 0x0cd0, - 0x001e, 0x00fe, 0x0005, 0x2069, 0x1906, 0x6910, 0x62b4, 0x0804, - 0x3191, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x31c3, 0x0126, - 0x2091, 0x8000, 0x080c, 0x5127, 0x0128, 0x2009, 0x0007, 0x012e, - 0x0804, 0x31c3, 0x012e, 0x6154, 0x9190, 0x2f92, 0x2215, 0x9294, - 0x00ff, 0x6374, 0x83ff, 0x0108, 0x6278, 0x67d4, 0x97c4, 0x000a, - 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, 0x0022, - 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, 0x0012, - 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068, 0x080c, 0x6c53, - 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, 0x0005, - 0x0804, 0x31c3, 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x3191, 0x6144, - 0x6248, 0x2019, 0x1955, 0x231c, 0x2001, 0x1956, 0x2004, 0x789a, - 0x0804, 0x3191, 0x0126, 0x2091, 0x8000, 0x6134, 0x6238, 0x633c, - 0x012e, 0x0804, 0x3191, 0x080c, 0x4645, 0x0904, 0x31c6, 0xba44, - 0xbb38, 0x0804, 0x3191, 0x080c, 0x0db2, 0x080c, 0x4645, 0x2110, - 0x0904, 0x31c6, 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, 0x0140, - 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009, 0x1904, 0x31c3, - 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, - 0x94b5, 0x080c, 0x8180, 0x0076, 0x903e, 0x080c, 0x8078, 0x900e, - 0x080c, 0xcd62, 0x007e, 0x00ce, 0xb807, 0x0407, 0x012e, 0x0804, - 0x3191, 0x6144, 0x6248, 0x7884, 0x6046, 0x7b88, 0x634a, 0x2069, - 0x1853, 0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x1955, 0x2d1c, - 0x206a, 0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, - 0x1956, 0x2d04, 0x266a, 0x789a, 0x0804, 0x3191, 0x0126, 0x2091, - 0x8000, 0x6134, 0x7884, 0x6036, 0x910e, 0xd1b4, 0x190c, 0x0e84, - 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x196c, 0x200a, 0x78ac, - 0x2011, 0x196d, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, - 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, - 0x603a, 0x2011, 0x0114, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, - 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112, 0x613c, 0x788c, 0x603e, - 0x910e, 0xd1e4, 0x190c, 0x0e9a, 0x603c, 0xd0cc, 0x0120, 0x78b0, - 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x3191, 0x00f6, 0x2079, - 0x1800, 0x7a34, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, - 0xfebf, 0x8002, 0x9214, 0x7834, 0x9084, 0x0140, 0x9215, 0x7a36, - 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, - 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x31c6, - 0x788c, 0x902d, 0x0904, 0x31c6, 0x900e, 0x080c, 0x5f7e, 0x1120, - 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, - 0x0ca0, 0x080c, 0x4645, 0x0904, 0x31c6, 0x7888, 0x900d, 0x0904, - 0x31c6, 0x788c, 0x9005, 0x0904, 0x31c6, 0xba44, 0xb946, 0xbb38, - 0xb83a, 0x0804, 0x3191, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, - 0x080c, 0x5127, 0x1904, 0x31c3, 0x00c6, 0x2061, 0x0100, 0x7984, - 0x9186, 0x00ff, 0x1130, 0x2001, 0x1816, 0x2004, 0x9085, 0xff00, - 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x2f92, 0x210d, 0x918c, - 0x00ff, 0x2001, 0x1816, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, - 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x9980, - 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x5f24, - 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4612, - 0x01d0, 0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, - 0xa86a, 0x701f, 0x3666, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, - 0x9a50, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x31c3, - 0x00ce, 0x0804, 0x31c6, 0x080c, 0x99d6, 0x0cb0, 0xa830, 0x9086, - 0x0100, 0x0904, 0x31c3, 0x0804, 0x3191, 0x2061, 0x1a3e, 0x0126, - 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, - 0x1800, 0x634c, 0x606c, 0x789a, 0x60b8, 0x789e, 0x60b4, 0x78aa, - 0x012e, 0x0804, 0x3191, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, - 0x31c3, 0x080c, 0x6c53, 0x0904, 0x31c3, 0x0126, 0x2091, 0x8000, - 0x624c, 0x606c, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x253f, - 0x080c, 0x5304, 0x012e, 0x0804, 0x3191, 0x012e, 0x0804, 0x31c6, - 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x1978, 0x2070, 0x2061, - 0x1853, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x7e7f, - 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, - 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3193, - 0x7884, 0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, - 0x0288, 0x012e, 0x0804, 0x31c6, 0x2001, 0x002a, 0x2004, 0x2069, - 0x1853, 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x31c6, 0x012e, - 0x0804, 0x31c3, 0x080c, 0x9940, 0x0dd0, 0x7884, 0xd0fc, 0x0904, - 0x3731, 0x00c6, 0x080c, 0x4612, 0x00ce, 0x0d88, 0xa867, 0x0000, - 0x7884, 0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, - 0x2004, 0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, - 0x2004, 0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, - 0x2004, 0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, - 0x2004, 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, - 0x38b7, 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, - 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, - 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, - 0x001b, 0x080c, 0x465b, 0x701f, 0x37f4, 0x7023, 0x0001, 0x012e, - 0x0005, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, - 0x00e6, 0x00f6, 0x080c, 0x36a0, 0x2001, 0x196e, 0x2003, 0x0000, - 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, - 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3926, 0x080c, 0x38e5, - 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a34, 0x2079, 0x0090, - 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, - 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, - 0x0001, 0x080c, 0x3cb9, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3be6, - 0x080c, 0x3aeb, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, - 0x1db8, 0x080c, 0x3d2d, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, - 0x908c, 0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, - 0x9084, 0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, - 0x9084, 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, - 0x7037, 0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x181e, 0x2004, - 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, - 0x00ce, 0x0138, 0x080c, 0x3af5, 0x080c, 0x38e0, 0x0058, 0x080c, - 0x38e0, 0x080c, 0x3c51, 0x080c, 0x3bdc, 0x2001, 0x020b, 0x2004, - 0xd0e4, 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, - 0x6027, 0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, - 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, - 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x127c, 0x2009, 0x0028, - 0x080c, 0x20d9, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, - 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, - 0x196e, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x3191, 0x012e, - 0x2021, 0x400c, 0x0804, 0x3193, 0x0016, 0x0026, 0x0036, 0x0046, - 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, - 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904, 0x3850, - 0x2048, 0x1f04, 0x3804, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, - 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, - 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e, 0x9086, 0x0103, - 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, - 0x9080, 0x001b, 0x080c, 0x465b, 0x701f, 0x37f4, 0x00b0, 0x8906, - 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, - 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f52, - 0x000e, 0x080c, 0x465e, 0x701f, 0x37f4, 0x015e, 0x00de, 0x009e, - 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, - 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701f, 0x38b5, - 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009, 0x007f, - 0x080c, 0x5f1e, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, - 0xfffd, 0x080c, 0xbab8, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, - 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x31c3, 0x0016, - 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, - 0x0156, 0x701f, 0x3887, 0x7007, 0x0003, 0x0804, 0x3845, 0x0076, - 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x3193, 0xad10, - 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, - 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, + 0x1118, 0xa870, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, + 0x181a, 0x2004, 0x9c02, 0x1a04, 0x3401, 0x0c30, 0x080c, 0xc472, + 0x012e, 0x0904, 0x3401, 0x0804, 0x33cf, 0x900e, 0x2001, 0x0005, + 0x080c, 0x6c85, 0x0126, 0x2091, 0x8000, 0x080c, 0xcb13, 0x080c, + 0x6a46, 0x012e, 0x0804, 0x33cf, 0x00a6, 0x2950, 0xb198, 0x080c, + 0x63cd, 0x1904, 0x363e, 0xb6a4, 0x9684, 0x3fff, 0x9082, 0x4000, + 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x6530, 0x080c, 0x64ff, 0x1520, + 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, + 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, + 0x9506, 0x0158, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, + 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, 0xc472, 0x012e, + 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, + 0x6c85, 0x0126, 0x2091, 0x8000, 0x080c, 0xcb13, 0x080c, 0x6a3a, + 0x012e, 0x0070, 0xb097, 0x4005, 0xb19a, 0x0010, 0xb097, 0x4006, + 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x2a48, 0x00ae, 0x0005, + 0xb097, 0x4000, 0x9006, 0x918d, 0x0001, 0x2008, 0x2a48, 0x00ae, + 0x0005, 0x81ff, 0x1904, 0x3401, 0x080c, 0x48b2, 0x0904, 0x3404, + 0x080c, 0x6494, 0x0904, 0x3401, 0x080c, 0x6536, 0x0904, 0x3401, + 0x0804, 0x43cf, 0x81ff, 0x1904, 0x3401, 0x080c, 0x48ce, 0x0904, + 0x3404, 0x080c, 0x65c4, 0x0904, 0x3401, 0x2019, 0x0005, 0x79a8, + 0x080c, 0x6551, 0x0904, 0x3401, 0x7888, 0x908a, 0x1000, 0x1a04, + 0x3404, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8293, 0x7984, + 0xd184, 0x1904, 0x33cf, 0x0804, 0x43cf, 0x0126, 0x2091, 0x8000, + 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x07ff, 0x645c, + 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x63cd, 0x11d8, 0x080c, + 0x65c4, 0x1128, 0x2009, 0x0002, 0x62c0, 0x2518, 0x00c0, 0x2019, + 0x0004, 0x900e, 0x080c, 0x6551, 0x1118, 0x2009, 0x0006, 0x0078, + 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108, + 0x080c, 0x8293, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x33cf, 0x012e, + 0x0804, 0x3401, 0x012e, 0x0804, 0x3404, 0x080c, 0x48b2, 0x0904, + 0x3404, 0x080c, 0x6494, 0x0904, 0x3401, 0xbaa0, 0x2019, 0x0005, + 0x00c6, 0x9066, 0x080c, 0x901a, 0x0076, 0x903e, 0x080c, 0x8ef7, + 0x900e, 0x080c, 0xdfbd, 0x007e, 0x00ce, 0x080c, 0x6530, 0x0804, + 0x33cf, 0x080c, 0x48b2, 0x0904, 0x3404, 0x080c, 0x6530, 0x2208, + 0x0804, 0x33cf, 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1910, 0x6810, + 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, + 0x007e, 0x2069, 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, + 0x9210, 0x8d68, 0x1f04, 0x36f3, 0x2300, 0x9218, 0x00ee, 0x00de, + 0x015e, 0x0804, 0x33cf, 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, + 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, + 0x0005, 0x2069, 0x1910, 0x6910, 0x62bc, 0x0804, 0x33cf, 0x81ff, + 0x0120, 0x2009, 0x0001, 0x0804, 0x3401, 0x0126, 0x2091, 0x8000, + 0x080c, 0x54cb, 0x0128, 0x2009, 0x0007, 0x012e, 0x0804, 0x3401, + 0x012e, 0x615c, 0x9190, 0x31d0, 0x2215, 0x9294, 0x00ff, 0x637c, + 0x83ff, 0x0108, 0x6280, 0x67dc, 0x97c4, 0x000a, 0x98c6, 0x000a, + 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, + 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, + 0x1118, 0x2031, 0x0002, 0x0068, 0x080c, 0x717d, 0x1118, 0x2031, + 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x3401, + 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x33cf, 0x614c, 0x6250, 0x2019, + 0x1984, 0x231c, 0x2001, 0x1985, 0x2004, 0x789a, 0x0804, 0x33cf, + 0x0126, 0x2091, 0x8000, 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, + 0x33cf, 0x080c, 0x48ce, 0x0904, 0x3404, 0xba44, 0xbb38, 0x0804, + 0x33cf, 0x080c, 0x0dd5, 0x080c, 0x48ce, 0x2110, 0x0904, 0x3404, + 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, + 0x9086, 0x0600, 0x2009, 0x0009, 0x1904, 0x3401, 0x0126, 0x2091, + 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0xa512, 0x080c, + 0x901a, 0x0076, 0x903e, 0x080c, 0x8ef7, 0x900e, 0x080c, 0xdfbd, + 0x007e, 0x00ce, 0xb807, 0x0407, 0x012e, 0x0804, 0x33cf, 0x614c, + 0x6250, 0x7884, 0x604e, 0x7b88, 0x6352, 0x2069, 0x1847, 0x831f, + 0x9305, 0x6816, 0x788c, 0x2069, 0x1984, 0x2d1c, 0x206a, 0x7e98, + 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1985, 0x2d04, + 0x266a, 0x789a, 0x0804, 0x33cf, 0x0126, 0x2091, 0x8000, 0x7884, + 0x603a, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x199b, 0x200a, + 0x78ac, 0x2011, 0x199c, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, + 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, + 0x7884, 0xd0b4, 0x0120, 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7888, + 0x603e, 0x2011, 0x0114, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, + 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112, 0x788c, 0x6042, 0x9084, + 0x0020, 0x0130, 0x78b4, 0x6046, 0x9084, 0x0001, 0x090c, 0x40b9, + 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, + 0x0804, 0x33cf, 0x00f6, 0x2079, 0x1800, 0x7a38, 0xa898, 0x9084, + 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, + 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897, 0x4000, 0x900e, 0x9085, + 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, + 0x7888, 0x9025, 0x0904, 0x3404, 0x788c, 0x902d, 0x0904, 0x3404, + 0x900e, 0x080c, 0x63cd, 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, + 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x48ce, 0x0904, + 0x3404, 0x7888, 0x900d, 0x0904, 0x3404, 0x788c, 0x9005, 0x0904, + 0x3404, 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, 0x33cf, 0x2011, + 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, 0x54cb, 0x1904, 0x3401, + 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, + 0x1818, 0x2004, 0x9085, 0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, + 0x9188, 0x31d0, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1818, 0x2004, + 0x0026, 0x9116, 0x002e, 0x0580, 0x810f, 0x9105, 0x0126, 0x2091, + 0x8000, 0x0006, 0x080c, 0xab15, 0x000e, 0x0510, 0x602e, 0x620a, + 0x7984, 0x00b6, 0x080c, 0x6372, 0x2b08, 0x00be, 0x1500, 0x6112, + 0x6023, 0x0001, 0x080c, 0x489b, 0x01d0, 0x9006, 0xa866, 0x7007, + 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x701f, 0x38aa, 0x2900, + 0x6016, 0x2009, 0x0032, 0x080c, 0xabe6, 0x012e, 0x00ce, 0x0005, + 0x012e, 0x00ce, 0x0804, 0x3401, 0x00ce, 0x0804, 0x3404, 0x080c, + 0xab6b, 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, 0x3401, 0x0804, + 0x33cf, 0x2061, 0x1a6e, 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, + 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, 0x6354, 0x6074, 0x789a, + 0x60c0, 0x789e, 0x60bc, 0x78aa, 0x012e, 0x0804, 0x33cf, 0x900e, + 0x2110, 0x0c88, 0x81ff, 0x1904, 0x3401, 0x080c, 0x717d, 0x0904, + 0x3401, 0x0126, 0x2091, 0x8000, 0x6254, 0x6074, 0x9202, 0x0248, + 0x9085, 0x0001, 0x080c, 0x2759, 0x080c, 0x56db, 0x012e, 0x0804, + 0x33cf, 0x012e, 0x0804, 0x3404, 0x0006, 0x0016, 0x00c6, 0x00e6, + 0x2001, 0x19a7, 0x2070, 0x2061, 0x1847, 0x6008, 0x2072, 0x900e, + 0x2011, 0x1400, 0x080c, 0x8cf7, 0x7206, 0x00ee, 0x00ce, 0x001e, + 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, + 0x2021, 0x400b, 0x0804, 0x33d1, 0x7884, 0xd0fc, 0x0148, 0x2001, + 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288, 0x012e, 0x0804, 0x3404, + 0x2001, 0x002a, 0x2004, 0x2069, 0x1847, 0x6908, 0x9102, 0x1230, + 0x012e, 0x0804, 0x3404, 0x012e, 0x0804, 0x3401, 0x080c, 0xaad5, + 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x3975, 0x00c6, 0x080c, 0x489b, + 0x00ce, 0x0d88, 0xa867, 0x0000, 0x7884, 0xa80a, 0x7898, 0xa80e, + 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a, 0x2001, 0x002f, + 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822, 0x2001, 0x0031, + 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a, 0x2001, 0x0035, + 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080, 0x0003, 0x9084, + 0x00fc, 0x8004, 0xa816, 0x080c, 0x3afb, 0x0928, 0x7014, 0x2048, + 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120, + 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, + 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x48e4, 0x701f, + 0x3a38, 0x7023, 0x0001, 0x012e, 0x0005, 0x0046, 0x0086, 0x0096, + 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x38e4, + 0x2001, 0x199d, 0x2003, 0x0000, 0x2021, 0x000a, 0x2061, 0x0100, + 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, + 0x080c, 0x3b6a, 0x080c, 0x3b29, 0x00f6, 0x00e6, 0x0086, 0x2940, + 0x2071, 0x1a64, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, + 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e, 0x2001, 0x0034, + 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3efd, 0x008e, + 0x00ee, 0x00fe, 0x080c, 0x3e2a, 0x080c, 0x3d2f, 0x05b8, 0x2001, + 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c, 0x3f71, 0x00f6, + 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x1560, 0x2071, + 0x0200, 0x7037, 0x0000, 0x7050, 0x9084, 0xff00, 0x9086, 0x3200, + 0x1510, 0x7037, 0x0001, 0x7050, 0x9084, 0xff00, 0x9086, 0xe100, + 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037, 0x0000, 0x715c, 0x9106, + 0x1190, 0x2001, 0x1820, 0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, + 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c, 0x3d39, + 0x080c, 0x3b24, 0x0058, 0x080c, 0x3b24, 0x080c, 0x3e95, 0x080c, + 0x3e20, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a, + 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x001e, 0x6106, + 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108, + 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, + 0x080c, 0x12e4, 0x2009, 0x0028, 0x080c, 0x2284, 0x2001, 0x0227, + 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, + 0x009e, 0x008e, 0x004e, 0x2001, 0x199d, 0x2004, 0x9005, 0x1118, + 0x012e, 0x0804, 0x33cf, 0x012e, 0x2021, 0x400c, 0x0804, 0x33d1, + 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, + 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, + 0xa804, 0x9005, 0x0904, 0x3a94, 0x2048, 0x1f04, 0x3a48, 0x7068, + 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, + 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, + 0xa864, 0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, + 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x48e4, + 0x701f, 0x3a38, 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, - 0x20a0, 0x0006, 0x080c, 0x0f52, 0x000e, 0x080c, 0x465e, 0x007e, - 0x701f, 0x37f4, 0x7023, 0x0001, 0x0005, 0x0804, 0x3191, 0x0156, - 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, - 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4612, 0x001e, - 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, - 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, - 0x2079, 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, - 0x2001, 0x196e, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, - 0x2061, 0x0200, 0x2001, 0x1979, 0x2004, 0x601a, 0x2061, 0x0100, - 0x2001, 0x1978, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, - 0x4612, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, - 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2061, - 0x0090, 0x2079, 0x0100, 0x2001, 0x1978, 0x2004, 0x6036, 0x2009, - 0x0040, 0x080c, 0x20d9, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, - 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, - 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, - 0x4612, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, - 0x2001, 0x0030, 0x2004, 0xa866, 0x2001, 0x0031, 0x2004, 0xa86a, - 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0xa873, 0x0000, - 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, - 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, - 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, - 0x0148, 0x080c, 0x28c8, 0x1130, 0x9006, 0x080c, 0x2820, 0x9006, - 0x080c, 0x2803, 0x7884, 0x9084, 0x0007, 0x0002, 0x3971, 0x397a, - 0x3983, 0x396e, 0x396e, 0x396e, 0x396e, 0x396e, 0x012e, 0x0804, - 0x31c6, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a, 0x080c, - 0x3b3f, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000, 0x200a, - 0x080c, 0x3b3f, 0x0078, 0x080c, 0x6c53, 0x1128, 0x012e, 0x2009, - 0x0016, 0x0804, 0x31c3, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, - 0x0804, 0x3193, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, - 0x00e6, 0x00f6, 0x080c, 0x36a0, 0x2009, 0x0101, 0x210c, 0x0016, - 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x3e08, - 0x080c, 0x3d58, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, - 0x2071, 0x1a34, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, - 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, - 0x0001, 0x080c, 0x3cb9, 0x080c, 0x28d0, 0x080c, 0x28d0, 0x080c, - 0x28d0, 0x080c, 0x28d0, 0x080c, 0x3cb9, 0x008e, 0x00ee, 0x00fe, - 0x080c, 0x3be6, 0x2009, 0x0190, 0x8109, 0x11b0, 0x080c, 0x3af5, - 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, - 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, - 0x0017, 0x080c, 0x31c3, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, - 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, - 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3bc4, - 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3af5, 0x0804, 0x3aa2, - 0x080c, 0x3d2d, 0x080c, 0x3c51, 0x080c, 0x3ba7, 0x080c, 0x3bdc, - 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, - 0x3af5, 0x00fe, 0x0804, 0x3aa2, 0x00fe, 0x080c, 0x3aeb, 0x1150, - 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, - 0x3af5, 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, - 0x1908, 0x8739, 0x0038, 0x2001, 0x1a31, 0x2004, 0x9086, 0x0000, - 0x1904, 0x39f2, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, - 0x8529, 0x2500, 0x9605, 0x0904, 0x3aa2, 0x7884, 0xd0bc, 0x0128, - 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3aa2, 0xa013, 0x0019, 0x2001, - 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a31, - 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, - 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, - 0x0040, 0x080c, 0x20d9, 0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, - 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, - 0x0090, 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3a79, - 0x00ce, 0x0030, 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, - 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, - 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, - 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, - 0x0804, 0x39ac, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, - 0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, - 0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, - 0x127c, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, - 0x0028, 0x080c, 0x20d9, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, - 0x9084, 0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, - 0x0090, 0x6043, 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, - 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, - 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x3191, 0x012e, 0x2021, - 0x400c, 0x0804, 0x3193, 0x9085, 0x0001, 0x1d04, 0x3af4, 0x2091, - 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, - 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a31, 0x2003, - 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x20d9, 0x2001, 0x0227, - 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, - 0x00f6, 0x00e6, 0x2071, 0x1a34, 0x7000, 0x9086, 0x0000, 0x0520, - 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, - 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x20d9, 0x782c, 0xd0fc, - 0x0d88, 0x080c, 0x3d2d, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b, - 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x20d9, - 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, - 0x2079, 0x0100, 0x2001, 0x1816, 0x200c, 0x7932, 0x7936, 0x080c, - 0x251f, 0x7850, 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019, - 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852, - 0x20a9, 0x0046, 0x1d04, 0x3b5a, 0x2091, 0x6000, 0x1f04, 0x3b5a, - 0x7850, 0x9085, 0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021, - 0x2004, 0x9084, 0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084, - 0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010, - 0x20a9, 0x0028, 0xa001, 0x1f04, 0x3b7a, 0x7850, 0x9085, 0x1400, - 0x7852, 0x2019, 0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110, - 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852, - 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, - 0x2001, 0x0100, 0x080c, 0x2987, 0x7827, 0x0020, 0x7843, 0x0000, - 0x9006, 0x080c, 0x2987, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884, - 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a31, 0x2079, 0x0320, - 0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, - 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, - 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, - 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, - 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, - 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, - 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, - 0x0100, 0x2001, 0x1979, 0x2004, 0x70e2, 0x080c, 0x38d6, 0x1188, - 0x2001, 0x181e, 0x2004, 0x2009, 0x181d, 0x210c, 0x918c, 0x00ff, - 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, - 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1816, 0x210c, - 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, - 0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, - 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, - 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, - 0x9085, 0x0092, 0x7016, 0x080c, 0x3d2d, 0x00f6, 0x2071, 0x1a31, - 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, - 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, 0x8109, - 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011, - 0x080c, 0x3cb9, 0x2011, 0x0001, 0x080c, 0x3cb9, 0x00fe, 0x00ee, - 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a31, 0x2079, 0x0320, 0x792c, - 0xd1fc, 0x0904, 0x3cb6, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904, - 0x3cb2, 0x7000, 0x0002, 0x3cb6, 0x3c67, 0x3c97, 0x3cb2, 0xd1bc, - 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c, - 0x3cb9, 0x0904, 0x3cb6, 0x080c, 0x3cb9, 0x0804, 0x3cb6, 0x00f6, - 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b, - 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8, - 0x080c, 0x3bc4, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8, - 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001, - 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x3c5b, - 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004, 0x9086, - 0x0015, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031, 0xa212, 0xd1dc, - 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe, - 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016, - 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c, - 0x938a, 0x0007, 0x1a0c, 0x0db2, 0x9398, 0x3ce7, 0x231d, 0x083f, - 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e, - 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a, - 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x3d24, - 0x3d1b, 0x3d12, 0x3d09, 0x3d00, 0x3cf7, 0x3cee, 0xa964, 0x7902, - 0xa968, 0x7906, 0xa96c, 0x7912, 0xa970, 0x7916, 0x0005, 0xa974, - 0x7902, 0xa978, 0x7906, 0xa97c, 0x7912, 0xa980, 0x7916, 0x0005, - 0xa984, 0x7902, 0xa988, 0x7906, 0xa98c, 0x7912, 0xa990, 0x7916, - 0x0005, 0xa994, 0x7902, 0xa998, 0x7906, 0xa99c, 0x7912, 0xa9a0, - 0x7916, 0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912, - 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc, - 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906, - 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086, - 0x2071, 0x1a34, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b, - 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x3d54, 0x3d40, 0x3d4b, - 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x3cb9, - 0x190c, 0x3cb9, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc, 0x1d38, - 0x2011, 0x0001, 0x080c, 0x3cb9, 0x008e, 0x00ee, 0x00fe, 0x0005, - 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x1979, - 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x1978, 0x2004, 0x60ce, - 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520, - 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, - 0x4612, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, - 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, - 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3dd0, - 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4612, 0xa813, 0x0019, - 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, - 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, - 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090, - 0x2079, 0x0100, 0x2001, 0x1978, 0x2004, 0x6036, 0x2009, 0x0040, - 0x080c, 0x20d9, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, - 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, - 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, - 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1, 0x0000, - 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006, 0x700a, - 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b, 0x0041, - 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040, 0x4005, - 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940, 0x0086, - 0x080c, 0x4612, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900, 0xb006, - 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee, 0x0005, - 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038, 0x2001, - 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4612, 0x2940, - 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, - 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, - 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3dd0, 0x1d68, - 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4612, 0x2940, 0xa013, 0x0019, - 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa066, - 0x2001, 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a, 0x2004, 0x9084, - 0xfff8, 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072, 0x2001, 0x032a, - 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101, 0x200c, - 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a31, 0x2003, - 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300, 0x2003, - 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, - 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, - 0x20a9, 0x0013, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, - 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, - 0x0005, 0x0804, 0x3191, 0x7d98, 0x7c9c, 0x0804, 0x3288, 0x080c, - 0x6c53, 0x190c, 0x59e6, 0x2069, 0x1853, 0x2d00, 0x2009, 0x0030, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x465b, - 0x701f, 0x3ea3, 0x0005, 0x080c, 0x5122, 0x1130, 0x3b00, 0x3a08, - 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069, 0x1853, 0x6800, 0x9005, - 0x0904, 0x31c6, 0x6804, 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x31c6, + 0x20a0, 0x0006, 0x080c, 0x0f7d, 0x000e, 0x080c, 0x48e7, 0x701f, + 0x3a38, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, + 0x003e, 0x002e, 0x001e, 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, + 0x0103, 0x1118, 0x701f, 0x3af9, 0x0450, 0x7014, 0x2048, 0xa868, + 0xc0fd, 0xa86a, 0x2009, 0x007f, 0x080c, 0x636c, 0x0110, 0x9006, + 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, 0xcce2, 0x015e, + 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, + 0x001e, 0x0904, 0x3401, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, + 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, 0x3acb, 0x7007, + 0x0003, 0x0804, 0x3a89, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, + 0x0904, 0x33d1, 0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, + 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, + 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, + 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f7d, + 0x000e, 0x080c, 0x48e7, 0x007e, 0x701f, 0x3a38, 0x7023, 0x0001, + 0x0005, 0x0804, 0x33cf, 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, + 0x0218, 0xa833, 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, + 0x0016, 0x080c, 0x489b, 0x001e, 0x0130, 0xa800, 0x2040, 0xa008, + 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, + 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, + 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001, 0x199d, 0x2003, 0x0001, + 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x19a8, + 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a7, 0x2004, 0x60ce, + 0x6104, 0xc1ac, 0x6106, 0x080c, 0x489b, 0xa813, 0x0019, 0xa817, + 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, + 0x002f, 0x2004, 0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, + 0x19a7, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x2284, 0x2001, + 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, + 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, + 0x00fe, 0x0005, 0x00e6, 0x080c, 0x489b, 0x2940, 0xa013, 0x0019, + 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, + 0x2001, 0x0031, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, + 0xfff8, 0xa86e, 0xa873, 0x0000, 0x2001, 0x032a, 0x2003, 0x0004, + 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, + 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, + 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x2ae2, 0x1130, + 0x9006, 0x080c, 0x2a3a, 0x9006, 0x080c, 0x2a1d, 0x7884, 0x9084, + 0x0007, 0x0002, 0x3bb5, 0x3bbe, 0x3bc7, 0x3bb2, 0x3bb2, 0x3bb2, + 0x3bb2, 0x3bb2, 0x012e, 0x0804, 0x3404, 0x2009, 0x0114, 0x2104, + 0x9085, 0x0800, 0x200a, 0x080c, 0x3d83, 0x00c0, 0x2009, 0x0114, + 0x2104, 0x9085, 0x4000, 0x200a, 0x080c, 0x3d83, 0x0078, 0x080c, + 0x717d, 0x1128, 0x012e, 0x2009, 0x0016, 0x0804, 0x3401, 0x81ff, + 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x33d1, 0x0086, 0x0096, + 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x38e4, + 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, + 0x2060, 0x2058, 0x080c, 0x404c, 0x080c, 0x3f9c, 0x903e, 0x2720, + 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a64, 0x2079, 0x0090, + 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, + 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3efd, 0x080c, + 0x2aea, 0x080c, 0x2aea, 0x080c, 0x2aea, 0x080c, 0x2aea, 0x080c, + 0x3efd, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3e2a, 0x2009, 0x9c40, + 0x8109, 0x11b0, 0x080c, 0x3d39, 0x2001, 0x0004, 0x200c, 0x918c, + 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, + 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, 0x3401, 0x0cf8, + 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079, + 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c, + 0x81ff, 0x0150, 0x080c, 0x3e08, 0x2d00, 0x9c05, 0x9b05, 0x0120, + 0x080c, 0x3d39, 0x0804, 0x3ce6, 0x080c, 0x3f71, 0x080c, 0x3e95, + 0x080c, 0x3deb, 0x080c, 0x3e20, 0x00f6, 0x2079, 0x0100, 0x7824, + 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3d39, 0x00fe, 0x0804, 0x3ce6, + 0x00fe, 0x080c, 0x3d2f, 0x1150, 0x8d68, 0x2001, 0x0032, 0x2602, + 0x2001, 0x0033, 0x2502, 0x080c, 0x3d39, 0x0080, 0x87ff, 0x0138, + 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038, 0x2001, + 0x1a60, 0x2004, 0x9086, 0x0000, 0x1904, 0x3c36, 0x2001, 0x032f, + 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605, 0x0904, + 0x3ce6, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904, + 0x3ce6, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, + 0xd0ac, 0x1148, 0x2001, 0x1a60, 0x2003, 0x0003, 0x2001, 0x032a, + 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005, 0x0108, + 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, 0x2284, 0x2900, + 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000, + 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, 0x0008, 0x2001, + 0x0203, 0x2004, 0x1f04, 0x3cbd, 0x00ce, 0x0030, 0xa817, 0x0001, + 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6, 0x2079, 0x0100, + 0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a, 0x2004, 0x9084, + 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, + 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3bf0, 0x001e, 0x00c6, + 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, + 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, 0x0004, 0x200c, + 0x918c, 0xfffd, 0x2102, 0x080c, 0x12e4, 0x7884, 0x9084, 0x0003, + 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028, 0x080c, 0x2284, 0x2001, + 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ef, 0x6052, 0x602f, + 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043, 0x0010, 0x00ce, + 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05, 0x9d05, 0x00fe, 0x00ee, + 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x1118, 0x012e, + 0x0804, 0x33cf, 0x012e, 0x2021, 0x400c, 0x0804, 0x33d1, 0x9085, + 0x0001, 0x1d04, 0x3d38, 0x2091, 0x6000, 0x8420, 0x9486, 0x0064, + 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001, 0x032a, 0x2003, + 0x0004, 0x2001, 0x1a60, 0x2003, 0x0000, 0x0071, 0x2009, 0x0048, + 0x080c, 0x2284, 0x2001, 0x0227, 0x2024, 0x2402, 0x2001, 0x0109, + 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a64, + 0x7000, 0x9086, 0x0000, 0x0520, 0x2079, 0x0090, 0x2009, 0x0206, + 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, + 0x080c, 0x2284, 0x782c, 0xd0fc, 0x0d88, 0x080c, 0x3f71, 0x7000, + 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, + 0x2009, 0x0040, 0x080c, 0x2284, 0x782b, 0x0002, 0x7003, 0x0000, + 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0x1818, + 0x200c, 0x7932, 0x7936, 0x080c, 0x2739, 0x7850, 0x9084, 0xfbff, + 0x9085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0, 0x9084, + 0xffcf, 0x9085, 0x2000, 0x7852, 0x20a9, 0x0046, 0x1d04, 0x3d9e, + 0x2091, 0x6000, 0x1f04, 0x3d9e, 0x7850, 0x9085, 0x0400, 0x9084, + 0xdfff, 0x7852, 0x2001, 0x0021, 0x2004, 0x9084, 0x0003, 0x9086, + 0x0001, 0x1120, 0x7850, 0x9084, 0xdfff, 0x7852, 0x784b, 0xf7f7, + 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x0028, 0xa001, 0x1f04, + 0x3dbe, 0x7850, 0x9085, 0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, + 0xa001, 0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, + 0x7850, 0x9085, 0x0400, 0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, + 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x2ba1, + 0x7827, 0x0020, 0x7843, 0x0000, 0x9006, 0x080c, 0x2ba1, 0x7827, + 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, + 0x2071, 0x1a60, 0x2079, 0x0320, 0x2001, 0x0201, 0x2004, 0x9005, + 0x0160, 0x7000, 0x9086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, + 0x8738, 0x7003, 0x0003, 0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005, + 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178, + 0x2009, 0x0032, 0x260a, 0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108, + 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4, 0x0108, 0x8b58, 0x0005, + 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0110, 0x7837, 0x0050, + 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001, 0x19a8, 0x2004, + 0x70e2, 0x080c, 0x3b1a, 0x1188, 0x2001, 0x1820, 0x2004, 0x2009, + 0x181f, 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, + 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, 0x702c, 0x9085, 0x0002, + 0x702e, 0x2009, 0x1818, 0x210c, 0x716e, 0x7063, 0x0100, 0x7166, + 0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077, 0x0008, 0x7078, + 0x9080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa, + 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af, + 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085, 0x0092, 0x7016, 0x080c, + 0x3f71, 0x00f6, 0x2071, 0x1a60, 0x2079, 0x0320, 0x00d6, 0x2069, + 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e, 0x6898, 0x780a, + 0x00de, 0x2009, 0x03e8, 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, + 0x782b, 0x0004, 0x2011, 0x0011, 0x080c, 0x3efd, 0x2011, 0x0001, + 0x080c, 0x3efd, 0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, + 0x1a60, 0x2079, 0x0320, 0x792c, 0xd1fc, 0x0904, 0x3efa, 0x782b, + 0x0002, 0x9026, 0xd19c, 0x1904, 0x3ef6, 0x7000, 0x0002, 0x3efa, + 0x3eab, 0x3edb, 0x3ef6, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, + 0x7002, 0x2011, 0x0001, 0x080c, 0x3efd, 0x0904, 0x3efa, 0x080c, + 0x3efd, 0x0804, 0x3efa, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, + 0x00fe, 0x7810, 0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, + 0x0201, 0x200c, 0x81ff, 0x0de8, 0x080c, 0x3e08, 0x2009, 0x0001, + 0x00f6, 0x2079, 0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, + 0x0011, 0x792a, 0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, + 0x782c, 0xd0fc, 0x1904, 0x3e9f, 0x2011, 0x0001, 0x00b1, 0x0090, + 0xa010, 0x9092, 0x0004, 0x9086, 0x0015, 0x1120, 0xa000, 0xa05a, + 0x2011, 0x0031, 0xa212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, + 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, + 0x8001, 0x0036, 0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, + 0x0031, 0x911a, 0x831c, 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dd5, + 0x9398, 0x3f2b, 0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, + 0x8108, 0x7102, 0x009e, 0x003e, 0x908a, 0x0035, 0x1140, 0x0096, + 0xa058, 0x2048, 0xa804, 0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, + 0x9085, 0x0001, 0x0005, 0x3f68, 0x3f5f, 0x3f56, 0x3f4d, 0x3f44, + 0x3f3b, 0x3f32, 0xa964, 0x7902, 0xa968, 0x7906, 0xa96c, 0x7912, + 0xa970, 0x7916, 0x0005, 0xa974, 0x7902, 0xa978, 0x7906, 0xa97c, + 0x7912, 0xa980, 0x7916, 0x0005, 0xa984, 0x7902, 0xa988, 0x7906, + 0xa98c, 0x7912, 0xa990, 0x7916, 0x0005, 0xa994, 0x7902, 0xa998, + 0x7906, 0xa99c, 0x7912, 0xa9a0, 0x7916, 0x0005, 0xa9a4, 0x7902, + 0xa9a8, 0x7906, 0xa9ac, 0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, + 0x7902, 0xa9b8, 0x7906, 0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, + 0xa9c4, 0x7902, 0xa9c8, 0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, + 0x0005, 0x00f6, 0x00e6, 0x0086, 0x2071, 0x1a64, 0x2079, 0x0090, + 0x792c, 0xd1fc, 0x01e8, 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, + 0x0002, 0x3f98, 0x3f84, 0x3f8f, 0x8001, 0x7002, 0xd19c, 0x1180, + 0x2011, 0x0001, 0x080c, 0x3efd, 0x190c, 0x3efd, 0x0048, 0x8001, + 0x7002, 0x782c, 0xd0fc, 0x1d38, 0x2011, 0x0001, 0x080c, 0x3efd, + 0x008e, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, + 0x2061, 0x0200, 0x2001, 0x19a8, 0x2004, 0x601a, 0x2061, 0x0100, + 0x2001, 0x19a7, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, + 0x002c, 0x2004, 0x9005, 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, + 0x2001, 0x002f, 0x201c, 0x080c, 0x489b, 0xa813, 0x0019, 0xaf16, + 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, + 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, + 0x0019, 0x009e, 0x080c, 0x4014, 0x1d68, 0x2900, 0xa85a, 0x00d0, + 0x080c, 0x489b, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, + 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, + 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, + 0x2004, 0xa872, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19a7, + 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x2284, 0x2001, 0x002a, + 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, + 0x601e, 0x78c6, 0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, + 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, + 0x22e8, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, + 0x7402, 0x7306, 0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, + 0x810b, 0x7112, 0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, + 0x0002, 0x702b, 0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, + 0x0086, 0x0096, 0x2940, 0x0086, 0x080c, 0x489b, 0x008e, 0xa058, + 0x00a6, 0x2050, 0x2900, 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, + 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, + 0x9005, 0x0528, 0x2038, 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, + 0x201c, 0x080c, 0x489b, 0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, + 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, + 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, + 0x009e, 0x080c, 0x4014, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, + 0x489b, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, + 0x2001, 0x0030, 0x2004, 0xa066, 0x2001, 0x0031, 0x2004, 0xa06a, + 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa06e, 0x2001, 0x002b, + 0x2004, 0xa072, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, + 0x1180, 0x2001, 0x0101, 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, + 0x0000, 0x2001, 0x1a60, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, + 0x0009, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, + 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, + 0x0005, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0007, 0x20a1, 0x1840, + 0x20e9, 0x0001, 0x9006, 0x4004, 0x20a9, 0x000c, 0x20a1, 0xfff4, + 0x20e9, 0x0000, 0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, + 0x7880, 0x9086, 0x0052, 0x0108, 0x0005, 0x0804, 0x33cf, 0x7d98, + 0x7c9c, 0x0804, 0x34c6, 0x080c, 0x54c6, 0x1128, 0x3a00, 0x9084, + 0x0010, 0x0904, 0x3404, 0x080c, 0x717d, 0x190c, 0x5dbd, 0x6040, + 0x9084, 0x0020, 0x0971, 0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, + 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x48e4, + 0x701f, 0x40fb, 0x0005, 0x080c, 0x54c6, 0x1130, 0x3b00, 0x3a08, + 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, + 0x0904, 0x3404, 0x6804, 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x3404, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce, 0xd084, 0x0158, - 0x6a28, 0x928a, 0x007f, 0x1a04, 0x31c6, 0x9288, 0x2f92, 0x210d, - 0x918c, 0x00ff, 0x615e, 0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, - 0x1a04, 0x31c6, 0x6056, 0x6888, 0x9084, 0x0030, 0x8004, 0x8004, - 0x8004, 0x8004, 0x0006, 0x2009, 0x1980, 0x9080, 0x2612, 0x2005, - 0x200a, 0x000e, 0x2009, 0x1981, 0x9080, 0x2616, 0x2005, 0x200a, - 0x6808, 0x908a, 0x0100, 0x0a04, 0x31c6, 0x908a, 0x0841, 0x1a04, - 0x31c6, 0x9084, 0x0007, 0x1904, 0x31c6, 0x680c, 0x9005, 0x0904, - 0x31c6, 0x6810, 0x9005, 0x0904, 0x31c6, 0x6848, 0x6940, 0x910a, - 0x1a04, 0x31c6, 0x8001, 0x0904, 0x31c6, 0x684c, 0x6944, 0x910a, - 0x1a04, 0x31c6, 0x8001, 0x0904, 0x31c6, 0x2009, 0x1950, 0x200b, - 0x0000, 0x2001, 0x1875, 0x2004, 0xd0c4, 0x0140, 0x7884, 0x200a, + 0x6a28, 0x928a, 0x007f, 0x1a04, 0x3404, 0x9288, 0x31d0, 0x210d, + 0x918c, 0x00ff, 0x6166, 0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, + 0x1a04, 0x3404, 0x605e, 0x6888, 0x9084, 0x0030, 0x8004, 0x8004, + 0x8004, 0x8004, 0x0006, 0x2009, 0x19af, 0x9080, 0x282c, 0x2005, + 0x200a, 0x000e, 0x2009, 0x19b0, 0x9080, 0x2830, 0x2005, 0x200a, + 0x6808, 0x908a, 0x0100, 0x0a04, 0x3404, 0x908a, 0x0841, 0x1a04, + 0x3404, 0x9084, 0x0007, 0x1904, 0x3404, 0x680c, 0x9005, 0x0904, + 0x3404, 0x6810, 0x9005, 0x0904, 0x3404, 0x6848, 0x6940, 0x910a, + 0x1a04, 0x3404, 0x8001, 0x0904, 0x3404, 0x684c, 0x6944, 0x910a, + 0x1a04, 0x3404, 0x8001, 0x0904, 0x3404, 0x2009, 0x197f, 0x200b, + 0x0000, 0x2001, 0x1869, 0x2004, 0xd0c4, 0x0140, 0x7884, 0x200a, 0x2009, 0x017f, 0x200a, 0x3b00, 0xc085, 0x20d8, 0x6814, 0x908c, - 0x00ff, 0x6146, 0x8007, 0x9084, 0x00ff, 0x604a, 0x080c, 0x6f5b, - 0x080c, 0x62da, 0x080c, 0x630e, 0x6808, 0x602a, 0x080c, 0x204b, + 0x00ff, 0x614e, 0x8007, 0x9084, 0x00ff, 0x6052, 0x080c, 0x7496, + 0x080c, 0x676d, 0x080c, 0x67a1, 0x6808, 0x602a, 0x080c, 0x21f6, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001, 0x200b, 0x0000, - 0x0036, 0x6b08, 0x080c, 0x2579, 0x003e, 0x6000, 0x9086, 0x0000, - 0x1904, 0x403f, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, + 0x0036, 0x6b08, 0x080c, 0x2793, 0x003e, 0x6000, 0x9086, 0x0000, + 0x1904, 0x4292, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, - 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1, 0x1982, - 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, 0x199c, 0x20e9, - 0x0001, 0x4001, 0x080c, 0x7d50, 0x00c6, 0x900e, 0x20a9, 0x0001, + 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1, 0x19b1, + 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, 0x19cb, 0x20e9, + 0x0001, 0x4001, 0x080c, 0x837e, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009, 0x0100, 0x210c, 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0, 0x3508, - 0x8109, 0x080c, 0x74e0, 0x6878, 0x6016, 0x6874, 0x2008, 0x9084, + 0x8109, 0x080c, 0x7a4c, 0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, - 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x3f94, 0x00ce, - 0x00c6, 0x2061, 0x196b, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, - 0x0000, 0x1158, 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x2820, - 0x2001, 0x0001, 0x080c, 0x2803, 0x0088, 0x9286, 0x4000, 0x1148, - 0x2063, 0x0001, 0x9006, 0x080c, 0x2820, 0x9006, 0x080c, 0x2803, - 0x0028, 0x9286, 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x00e6, - 0x2c70, 0x080c, 0x0e69, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, - 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, - 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, - 0x2001, 0x194d, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, - 0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, - 0x080c, 0x25ee, 0x2001, 0x193e, 0x2102, 0x0008, 0x2102, 0x00c6, - 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, - 0x6c53, 0x0128, 0x080c, 0x4a2e, 0x0110, 0x080c, 0x253f, 0x60cc, - 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, 0x4027, 0x00d0, 0x080c, - 0x6c53, 0x1168, 0x2011, 0x6ad9, 0x080c, 0x7c4a, 0x2011, 0x6acc, - 0x080c, 0x7d1b, 0x080c, 0x6f2f, 0x080c, 0x6b8a, 0x0040, 0x080c, - 0x58e0, 0x0028, 0x6003, 0x0004, 0x2009, 0x403f, 0x0010, 0x0804, - 0x3191, 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, - 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, - 0x9086, 0x0000, 0x0904, 0x31c3, 0x2069, 0x1853, 0x7890, 0x6842, - 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, - 0x7d98, 0x2039, 0x0001, 0x0804, 0x465e, 0x9006, 0x080c, 0x253f, - 0x81ff, 0x1904, 0x31c3, 0x080c, 0x6c53, 0x11b0, 0x080c, 0x6f2a, - 0x080c, 0x5a21, 0x080c, 0x2f86, 0x0118, 0x6130, 0xc18d, 0x6132, - 0x080c, 0xbcec, 0x0130, 0x080c, 0x6c76, 0x1118, 0x080c, 0x6c2d, - 0x0038, 0x080c, 0x6b8a, 0x0020, 0x080c, 0x59e6, 0x080c, 0x58e0, - 0x0804, 0x3191, 0x81ff, 0x1904, 0x31c3, 0x080c, 0x6c53, 0x1110, - 0x0804, 0x31c3, 0x618c, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, - 0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, - 0x2091, 0x8000, 0x2039, 0x0001, 0x080c, 0x465e, 0x701f, 0x318f, - 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, - 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, - 0x6554, 0x9588, 0x2f92, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, - 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x5f7e, 0x1190, - 0xb814, 0x821c, 0x0238, 0x9398, 0x1c80, 0x9085, 0xff00, 0x8007, - 0x201a, 0x0038, 0x9398, 0x1c80, 0x2324, 0x94a4, 0xff00, 0x9405, - 0x201a, 0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, - 0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, - 0x1c80, 0x2099, 0x1c80, 0x080c, 0x5971, 0x0804, 0x4097, 0x080c, - 0x4645, 0x0904, 0x31c6, 0x080c, 0x4612, 0x1120, 0x2009, 0x0002, - 0x0804, 0x31c3, 0x080c, 0x5113, 0xd0b4, 0x0558, 0x7884, 0x908e, - 0x007e, 0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, - 0x080c, 0x2f81, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, - 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, - 0xa86a, 0x080c, 0xb7bd, 0x1120, 0x2009, 0x0003, 0x0804, 0x31c3, - 0x7007, 0x0003, 0x701f, 0x4125, 0x0005, 0x080c, 0x4645, 0x0904, - 0x31c6, 0x20a9, 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, - 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, - 0x9080, 0x0006, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, - 0x2098, 0x080c, 0x0f52, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, - 0x000a, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, - 0x080c, 0x0f52, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, - 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, - 0x7d98, 0x0804, 0x465e, 0x81ff, 0x1904, 0x31c3, 0x080c, 0x4629, - 0x0904, 0x31c6, 0x080c, 0x60f0, 0x0904, 0x31c3, 0x0058, 0xa878, - 0x9005, 0x0120, 0x2009, 0x0004, 0x0804, 0x31c3, 0xa974, 0xaa94, - 0x0804, 0x3191, 0x080c, 0x511b, 0x0904, 0x3191, 0x701f, 0x416f, - 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, 0x31c3, 0x7888, 0x908a, - 0x1000, 0x1a04, 0x31c6, 0x080c, 0x4645, 0x0904, 0x31c6, 0x080c, - 0x62a4, 0x0120, 0x080c, 0x62ac, 0x1904, 0x31c6, 0x080c, 0x6175, - 0x0904, 0x31c3, 0x2019, 0x0004, 0x900e, 0x080c, 0x6102, 0x0904, - 0x31c3, 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, - 0x12f8, 0x080c, 0x4643, 0x01e0, 0x080c, 0x62a4, 0x0118, 0x080c, - 0x62ac, 0x11b0, 0x080c, 0x6175, 0x2009, 0x0002, 0x0168, 0x2009, - 0x0002, 0x2019, 0x0004, 0x080c, 0x6102, 0x2009, 0x0003, 0x0120, - 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, - 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, - 0xa897, 0x4000, 0x080c, 0x511b, 0x0110, 0x9006, 0x0018, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, - 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6454, 0x2400, - 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, - 0x5f7e, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, - 0x7c58, 0x0005, 0x81ff, 0x1904, 0x31c3, 0x080c, 0x4629, 0x0904, - 0x31c6, 0x080c, 0x6045, 0x0904, 0x31c3, 0x080c, 0x60f9, 0x0904, - 0x31c3, 0x0804, 0x417a, 0x81ff, 0x1904, 0x31c3, 0x080c, 0x4629, - 0x0904, 0x31c6, 0x080c, 0x6045, 0x0904, 0x31c3, 0x080c, 0x60e7, - 0x0904, 0x31c3, 0x0804, 0x417a, 0x6100, 0x0804, 0x3191, 0x080c, - 0x4645, 0x0904, 0x31c6, 0x080c, 0x5127, 0x1904, 0x31c3, 0x79a8, - 0xd184, 0x1158, 0xb834, 0x8007, 0x789e, 0xb830, 0x8007, 0x789a, - 0xbb2c, 0x831f, 0xba28, 0x8217, 0x0050, 0xb824, 0x8007, 0x789e, - 0xb820, 0x8007, 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900, - 0x918c, 0x0200, 0x0804, 0x3191, 0x78a8, 0x909c, 0x0003, 0xd0b4, - 0x1140, 0x939a, 0x0003, 0x1a04, 0x31c3, 0x6254, 0x7884, 0x9206, - 0x1560, 0x2031, 0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, - 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, - 0x0006, 0x78a8, 0x9084, 0x0080, 0x1118, 0x000e, 0x0804, 0x465e, - 0x000e, 0x2031, 0x0000, 0x2061, 0x18ae, 0x2c44, 0xa66a, 0xa17a, - 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10b5, - 0x7007, 0x0002, 0x701f, 0x429d, 0x0005, 0x81ff, 0x1904, 0x31c3, - 0x080c, 0x4645, 0x0904, 0x31c6, 0x080c, 0x62a4, 0x1904, 0x31c3, - 0x00c6, 0x080c, 0x4612, 0x00ce, 0x0904, 0x31c3, 0xa867, 0x0000, - 0xa868, 0xc0fd, 0xa86a, 0x7ea8, 0x080c, 0xb763, 0x0904, 0x31c3, - 0x7007, 0x0003, 0x701f, 0x42a1, 0x0005, 0x080c, 0x3e75, 0x0804, - 0x3191, 0xa830, 0x9086, 0x0100, 0x0904, 0x31c3, 0x8906, 0x8006, - 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x2009, - 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x465e, 0x9006, - 0x080c, 0x253f, 0x78a8, 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, - 0x81ff, 0x1904, 0x31c3, 0x080c, 0x6c53, 0x0110, 0x080c, 0x59e6, - 0x7888, 0x908a, 0x1000, 0x1a04, 0x31c6, 0x7984, 0x9186, 0x00ff, - 0x0138, 0x9182, 0x007f, 0x1a04, 0x31c6, 0x2100, 0x080c, 0x2509, - 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0x19c9, 0x601b, - 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077, 0x0000, 0x080c, - 0x6c53, 0x1158, 0x080c, 0x6f2a, 0x080c, 0x5a21, 0x9085, 0x0001, - 0x080c, 0x6c9a, 0x080c, 0x6b8a, 0x00d0, 0x080c, 0x9947, 0x2061, - 0x0100, 0x2001, 0x1816, 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, - 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1968, 0x200b, - 0x0000, 0x2009, 0x002d, 0x2011, 0x590c, 0x080c, 0x7cd9, 0x7984, - 0x080c, 0x6c53, 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c, 0x41dd, - 0x012e, 0x00ce, 0x002e, 0x0804, 0x3191, 0x7984, 0x080c, 0x5f1e, - 0x2b08, 0x1904, 0x31c6, 0x0804, 0x3191, 0x81ff, 0x0120, 0x2009, - 0x0001, 0x0804, 0x31c3, 0x60d4, 0xd0ac, 0x1130, 0xd09c, 0x1120, - 0x2009, 0x0005, 0x0804, 0x31c3, 0x080c, 0x4612, 0x1120, 0x2009, - 0x0002, 0x0804, 0x31c3, 0x7984, 0x9192, 0x0021, 0x1a04, 0x31c6, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0x702a, - 0xaf60, 0x7736, 0x080c, 0x465b, 0x701f, 0x4355, 0x7880, 0x9086, - 0x006e, 0x0110, 0x701f, 0x4be0, 0x0005, 0x2009, 0x0080, 0x080c, - 0x5f7e, 0x1118, 0x080c, 0x62a4, 0x0120, 0x2021, 0x400a, 0x0804, - 0x3193, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70, 0xac74, 0xad78, - 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x43ee, 0x90be, 0x0112, - 0x0904, 0x43ee, 0x90be, 0x0113, 0x0904, 0x43ee, 0x90be, 0x0114, - 0x0904, 0x43ee, 0x90be, 0x0117, 0x0904, 0x43ee, 0x90be, 0x011a, - 0x0904, 0x43ee, 0x90be, 0x011c, 0x0904, 0x43ee, 0x90be, 0x0121, - 0x0904, 0x43d5, 0x90be, 0x0131, 0x0904, 0x43d5, 0x90be, 0x0171, - 0x0904, 0x43ee, 0x90be, 0x0173, 0x0904, 0x43ee, 0x90be, 0x01a1, - 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x43f9, 0x90be, 0x0212, - 0x0904, 0x43e2, 0x90be, 0x0213, 0x05e8, 0x90be, 0x0214, 0x0500, - 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120, 0xa89c, 0x8007, - 0xa89e, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be, 0x0300, 0x05b0, - 0x009e, 0x00de, 0x0804, 0x31c6, 0x7028, 0x9080, 0x0010, 0x2098, - 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c, 0x4437, - 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, - 0x20a9, 0x0001, 0x080c, 0x4437, 0x00c8, 0x7028, 0x9080, 0x000c, - 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, - 0x4444, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, - 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4444, 0x7028, 0x9080, + 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x41ec, 0x00ce, + 0x00c6, 0x2061, 0x199a, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, + 0x0000, 0x1158, 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x2a3a, + 0x2001, 0x0001, 0x080c, 0x2a1d, 0x0088, 0x9286, 0x4000, 0x1148, + 0x2063, 0x0001, 0x9006, 0x080c, 0x2a3a, 0x9006, 0x080c, 0x2a1d, + 0x0028, 0x9286, 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x6888, + 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, + 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, + 0x9295, 0x0020, 0x6a82, 0x2001, 0x197c, 0x6a80, 0x9294, 0x0030, + 0x928e, 0x0000, 0x0170, 0x928e, 0x0010, 0x0118, 0x928e, 0x0020, + 0x0140, 0x2003, 0xaaaa, 0x080c, 0x2808, 0x2001, 0x196d, 0x2102, + 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, + 0x0000, 0x00ce, 0x080c, 0x717d, 0x0128, 0x080c, 0x4dd2, 0x0110, + 0x080c, 0x2759, 0x60d4, 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, + 0x427a, 0x00e0, 0x080c, 0x717d, 0x1168, 0x2011, 0x7013, 0x080c, + 0x8285, 0x2011, 0x7006, 0x080c, 0x835c, 0x080c, 0x746a, 0x080c, + 0x70af, 0x0040, 0x080c, 0x5cb7, 0x0028, 0x6003, 0x0004, 0x2009, + 0x4292, 0x0020, 0x080c, 0x66a2, 0x0804, 0x33cf, 0x2001, 0x0170, + 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, + 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, 0x9086, 0x0000, 0x0904, + 0x3401, 0x2069, 0x1847, 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, + 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, + 0x0804, 0x48e7, 0x9006, 0x080c, 0x2759, 0x81ff, 0x1904, 0x3401, + 0x080c, 0x717d, 0x11b0, 0x080c, 0x7465, 0x080c, 0x5df8, 0x080c, + 0x31c4, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c, 0xcf18, 0x0130, + 0x080c, 0x71a0, 0x1118, 0x080c, 0x7155, 0x0038, 0x080c, 0x70af, + 0x0020, 0x080c, 0x5dbd, 0x080c, 0x5cb7, 0x0804, 0x33cf, 0x81ff, + 0x1904, 0x3401, 0x080c, 0x717d, 0x1110, 0x0804, 0x3401, 0x6194, + 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1c80, 0x2009, 0x0040, + 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091, 0x8000, 0x2039, + 0x0001, 0x080c, 0x48e7, 0x701f, 0x33cd, 0x012e, 0x0005, 0x704f, + 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9, 0x0001, + 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, 0x655c, 0x9588, 0x31d0, + 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002, 0x2100, + 0x9506, 0x01a8, 0x080c, 0x63cd, 0x1190, 0xb814, 0x821c, 0x0238, + 0x9398, 0x1c80, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038, 0x9398, + 0x1c80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210, 0x8108, + 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c, 0x9105, + 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099, 0x1c80, + 0x080c, 0x5d48, 0x0804, 0x42ec, 0x080c, 0x48ce, 0x0904, 0x3404, + 0x080c, 0x489b, 0x1120, 0x2009, 0x0002, 0x0804, 0x3401, 0x080c, + 0x54b7, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, 0x0538, 0x908e, + 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, 0x31bf, 0x1148, + 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, + 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xc9e7, + 0x1120, 0x2009, 0x0003, 0x0804, 0x3401, 0x7007, 0x0003, 0x701f, + 0x437a, 0x0005, 0x080c, 0x48ce, 0x0904, 0x3404, 0x20a9, 0x002b, + 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, + 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7d, + 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0, 0xb8c4, + 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7d, 0x8906, + 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, + 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x48e7, + 0x81ff, 0x1904, 0x3401, 0x080c, 0x48b2, 0x0904, 0x3404, 0x080c, + 0x653f, 0x0904, 0x3401, 0x0058, 0xa878, 0x9005, 0x0120, 0x2009, + 0x0004, 0x0804, 0x3401, 0xa974, 0xaa94, 0x0804, 0x33cf, 0x080c, + 0x54bf, 0x0904, 0x33cf, 0x701f, 0x43c4, 0x7007, 0x0003, 0x0005, + 0x81ff, 0x1904, 0x3401, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3404, + 0x080c, 0x48ce, 0x0904, 0x3404, 0x080c, 0x6737, 0x0120, 0x080c, + 0x673f, 0x1904, 0x3404, 0x080c, 0x65c4, 0x0904, 0x3401, 0x2019, + 0x0004, 0x900e, 0x080c, 0x6551, 0x0904, 0x3401, 0x7984, 0x7a88, + 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8, 0x080c, 0x48cc, + 0x01e0, 0x080c, 0x6737, 0x0118, 0x080c, 0x673f, 0x11b0, 0x080c, + 0x65c4, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002, 0x2019, 0x0004, + 0x080c, 0x6551, 0x2009, 0x0003, 0x0120, 0xa998, 0xaa9c, 0x00d1, + 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, + 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x080c, + 0x54bf, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, + 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, + 0x007e, 0x2061, 0x1800, 0x645c, 0x2400, 0x9506, 0x0110, 0x2508, + 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x63cd, 0x1138, 0x2200, + 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8293, 0x0005, 0x81ff, + 0x1904, 0x3401, 0x080c, 0x48b2, 0x0904, 0x3404, 0x080c, 0x6494, + 0x0904, 0x3401, 0x080c, 0x6548, 0x0904, 0x3401, 0x0804, 0x43cf, + 0x81ff, 0x1904, 0x3401, 0x080c, 0x48b2, 0x0904, 0x3404, 0x080c, + 0x6737, 0x0120, 0x080c, 0x673f, 0x1904, 0x3404, 0x080c, 0x6494, + 0x0904, 0x3401, 0x080c, 0x6536, 0x0904, 0x3401, 0x0804, 0x43cf, + 0x6100, 0x0804, 0x33cf, 0x080c, 0x48ce, 0x0904, 0x3404, 0x080c, + 0x54cb, 0x1904, 0x3401, 0x79a8, 0xd184, 0x1158, 0xb834, 0x8007, + 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217, + 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c, + 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0200, 0x0804, 0x33cf, + 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1140, 0x939a, 0x0003, 0x1a04, + 0x3401, 0x625c, 0x7884, 0x9206, 0x1548, 0x080c, 0x8368, 0x2001, + 0xfff4, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, + 0x0000, 0x0006, 0x78a8, 0x9084, 0x0080, 0x1118, 0x000e, 0x0804, + 0x48e7, 0x000e, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, 0xa66a, + 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, + 0x10e0, 0x7007, 0x0002, 0x701f, 0x44f6, 0x0005, 0x81ff, 0x1904, + 0x3401, 0x080c, 0x48ce, 0x0904, 0x3404, 0x080c, 0x6737, 0x1904, + 0x3401, 0x00c6, 0x080c, 0x489b, 0x00ce, 0x0904, 0x3401, 0xa867, + 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8, 0x080c, 0xc98d, 0x0904, + 0x3401, 0x7007, 0x0003, 0x701f, 0x44fa, 0x0005, 0x080c, 0x40b9, + 0x0804, 0x33cf, 0xa830, 0x9086, 0x0100, 0x0904, 0x3401, 0x8906, + 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, + 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x48e7, + 0x9006, 0x080c, 0x2759, 0x78a8, 0x9084, 0x00ff, 0x9086, 0x00ff, + 0x0118, 0x81ff, 0x1904, 0x3401, 0x080c, 0x717d, 0x0110, 0x080c, + 0x5dbd, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3404, 0x7984, 0x9186, + 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x3404, 0x2100, 0x080c, + 0x2723, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0x19f8, + 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077, 0x0000, + 0x080c, 0x717d, 0x1158, 0x080c, 0x7465, 0x080c, 0x5df8, 0x9085, + 0x0001, 0x080c, 0x71c4, 0x080c, 0x70af, 0x00d0, 0x080c, 0xaadc, + 0x2061, 0x0100, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x810f, + 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1997, + 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5ce3, 0x080c, 0x831a, + 0x7984, 0x080c, 0x717d, 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c, + 0x4432, 0x012e, 0x00ce, 0x002e, 0x0804, 0x33cf, 0x7984, 0x080c, + 0x636c, 0x2b08, 0x1904, 0x3404, 0x0804, 0x33cf, 0x81ff, 0x0120, + 0x2009, 0x0001, 0x0804, 0x3401, 0x60dc, 0xd0ac, 0x1130, 0xd09c, + 0x1120, 0x2009, 0x0005, 0x0804, 0x3401, 0x080c, 0x489b, 0x1120, + 0x2009, 0x0002, 0x0804, 0x3401, 0x7984, 0x9192, 0x0021, 0x1a04, + 0x3404, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, + 0x702a, 0xaf60, 0x7736, 0x080c, 0x48e4, 0x701f, 0x45ae, 0x7880, + 0x9086, 0x006e, 0x0110, 0x701f, 0x4f84, 0x0005, 0x2009, 0x0080, + 0x080c, 0x63cd, 0x1118, 0x080c, 0x6737, 0x0120, 0x2021, 0x400a, + 0x0804, 0x33d1, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70, 0xac74, + 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4647, 0x90be, + 0x0112, 0x0904, 0x4647, 0x90be, 0x0113, 0x0904, 0x4647, 0x90be, + 0x0114, 0x0904, 0x4647, 0x90be, 0x0117, 0x0904, 0x4647, 0x90be, + 0x011a, 0x0904, 0x4647, 0x90be, 0x011c, 0x0904, 0x4647, 0x90be, + 0x0121, 0x0904, 0x462e, 0x90be, 0x0131, 0x0904, 0x462e, 0x90be, + 0x0171, 0x0904, 0x4647, 0x90be, 0x0173, 0x0904, 0x4647, 0x90be, + 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x4652, 0x90be, + 0x0212, 0x0904, 0x463b, 0x90be, 0x0213, 0x05e8, 0x90be, 0x0214, + 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120, 0xa89c, + 0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be, 0x0300, + 0x05b0, 0x009e, 0x00de, 0x0804, 0x3404, 0x7028, 0x9080, 0x0010, + 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c, + 0x4690, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, + 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4690, 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, - 0x04f1, 0x00c6, 0x080c, 0x4612, 0x0550, 0xa868, 0xc0fd, 0xa86a, - 0xa867, 0x0119, 0x9006, 0xa882, 0xa87f, 0x0020, 0xa88b, 0x0001, - 0x810b, 0xa9ae, 0xa8b2, 0xaab6, 0xabba, 0xacbe, 0xadc2, 0xa9c6, - 0xa8ca, 0x00ce, 0x009e, 0x00de, 0xa866, 0xa822, 0xa868, 0xc0fd, - 0xa86a, 0xa804, 0x2048, 0x080c, 0xb77e, 0x1120, 0x2009, 0x0003, - 0x0804, 0x31c3, 0x7007, 0x0003, 0x701f, 0x442e, 0x0005, 0x00ce, - 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x31c3, 0xa820, 0x9086, - 0x8001, 0x1904, 0x3191, 0x2009, 0x0004, 0x0804, 0x31c3, 0x0016, - 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104, 0x4004, 0x8211, - 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0036, 0x0046, - 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204, 0x4104, 0x4004, - 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x81ff, - 0x0120, 0x2009, 0x0001, 0x0804, 0x31c3, 0x60d4, 0xd0ac, 0x1130, - 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x31c3, 0x7984, 0x78a8, - 0x2040, 0x080c, 0x9940, 0x1120, 0x9182, 0x007f, 0x0a04, 0x31c6, - 0x9186, 0x00ff, 0x0904, 0x31c6, 0x9182, 0x0800, 0x1a04, 0x31c6, - 0x7a8c, 0x7b88, 0x6074, 0x9306, 0x1140, 0x6078, 0x924e, 0x0904, - 0x31c6, 0x99cc, 0xff00, 0x0904, 0x31c6, 0x0126, 0x2091, 0x8000, - 0x080c, 0x452c, 0x0560, 0x90c6, 0x4000, 0x1170, 0x00c6, 0x0006, - 0x900e, 0x080c, 0x619e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, - 0xc18d, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, - 0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, - 0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, - 0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3193, 0x2b00, - 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9a23, - 0x0904, 0x4501, 0x2b00, 0x6012, 0x080c, 0xba69, 0x2e58, 0x00ee, - 0x00e6, 0x00c6, 0x080c, 0x4612, 0x00ce, 0x2b70, 0x1158, 0x080c, - 0x99d6, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, - 0x0804, 0x31c3, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, - 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x080c, 0x2e30, - 0x6023, 0x0001, 0x9006, 0x080c, 0x5ebb, 0x2001, 0x0002, 0x080c, - 0x5ecf, 0x2009, 0x0002, 0x080c, 0x9a50, 0x78a8, 0xd094, 0x0138, - 0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085, - 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, - 0x0003, 0x0804, 0x31c3, 0x7007, 0x0003, 0x701f, 0x4510, 0x0005, - 0xa830, 0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, - 0xba04, 0x9294, 0x00ff, 0x0804, 0x5070, 0x900e, 0xa868, 0xd0f4, - 0x1904, 0x3191, 0x080c, 0x619e, 0x1108, 0xc185, 0xb800, 0xd0bc, - 0x0108, 0xc18d, 0x0804, 0x3191, 0x00e6, 0x00d6, 0x0096, 0x83ff, - 0x0904, 0x4574, 0x902e, 0x080c, 0x9940, 0x0130, 0x9026, 0x20a9, - 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, - 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, - 0x2428, 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, - 0x94ce, 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, - 0x11d8, 0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, - 0xbe14, 0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, - 0x0568, 0xd894, 0x1558, 0x080c, 0x62a4, 0x1540, 0x2001, 0x4000, - 0x0430, 0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, - 0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, - 0x9940, 0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, - 0x4542, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, - 0x0030, 0x080c, 0x5f1e, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, - 0x009e, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, - 0x0804, 0x31c3, 0x080c, 0x4612, 0x1120, 0x2009, 0x0002, 0x0804, - 0x31c3, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, - 0x0904, 0x31c6, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, - 0x31c6, 0x2010, 0x2918, 0x080c, 0x2dd6, 0x1120, 0x2009, 0x0003, - 0x0804, 0x31c3, 0x7007, 0x0003, 0x701f, 0x45c7, 0x0005, 0xa830, - 0x9086, 0x0100, 0x1904, 0x3191, 0x2009, 0x0004, 0x0804, 0x31c3, - 0x7984, 0x080c, 0x9940, 0x1120, 0x9182, 0x007f, 0x0a04, 0x31c6, - 0x9186, 0x00ff, 0x0904, 0x31c6, 0x9182, 0x0800, 0x1a04, 0x31c6, - 0x2001, 0x9000, 0x080c, 0x50cb, 0x1904, 0x31c3, 0x0804, 0x3191, - 0xa998, 0x080c, 0x9940, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, - 0x00ff, 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, - 0x50cb, 0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, - 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, - 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, - 0x000a, 0x0c48, 0x080c, 0x0fd5, 0x0198, 0x9006, 0xa802, 0x7014, - 0x9005, 0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, - 0x0086, 0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, - 0x0005, 0x7984, 0x080c, 0x5f7e, 0x1130, 0x7e88, 0x9684, 0x3fff, - 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, - 0x5f7e, 0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, - 0x905e, 0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, - 0x5f7e, 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, - 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c, 0x1007, 0x0cc8, 0x7116, - 0x711a, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, - 0x2061, 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, - 0xa392, 0xa496, 0xa59a, 0x080c, 0x10b5, 0x7007, 0x0002, 0x701f, - 0x3191, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, - 0x2001, 0x18a6, 0x2004, 0x9005, 0x1190, 0x0e04, 0x468f, 0x7a36, - 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, - 0x0089, 0x2004, 0xd084, 0x190c, 0x1167, 0x0804, 0x46f5, 0x0016, - 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071, 0x1894, 0x7044, 0x9005, - 0x1540, 0x7148, 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, - 0x0fd5, 0x0904, 0x46ed, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, - 0x0002, 0x9080, 0x1da2, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, - 0x0004, 0x2001, 0x18b0, 0x9c82, 0x18f0, 0x0210, 0x2061, 0x18b0, - 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, - 0x0460, 0x7148, 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, - 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0db2, 0x2060, 0x001e, 0x8108, - 0x2105, 0x9005, 0xa146, 0x1520, 0x080c, 0x0fd5, 0x1130, 0x8109, - 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, - 0xa046, 0x2800, 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, - 0x9080, 0x1da2, 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, - 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, - 0x2c00, 0x9082, 0x001b, 0x0002, 0x4717, 0x4717, 0x4719, 0x4717, - 0x4717, 0x4717, 0x471d, 0x4717, 0x4717, 0x4717, 0x4721, 0x4717, - 0x4717, 0x4717, 0x4725, 0x4717, 0x4717, 0x4717, 0x4729, 0x4717, - 0x4717, 0x4717, 0x472d, 0x4717, 0x4717, 0x4717, 0x4732, 0x080c, - 0x0db2, 0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, - 0x0878, 0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, - 0x0838, 0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, - 0x0804, 0x46f0, 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x46f0, 0x00e6, - 0x2071, 0x1894, 0x7048, 0x9005, 0x0904, 0x47c9, 0x0126, 0x2091, - 0x8000, 0x0e04, 0x47c8, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, - 0x0086, 0x0076, 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, - 0xa948, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0db2, 0x2060, - 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a, 0x1904, 0x47cb, 0xa804, - 0x9005, 0x090c, 0x0db2, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, - 0x2001, 0x0002, 0x9080, 0x1da2, 0x2005, 0xa04a, 0x0804, 0x47cb, - 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, - 0x7833, 0x0012, 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, - 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1167, 0x87ff, - 0x0118, 0x2748, 0x080c, 0x1007, 0x7048, 0x8001, 0x704a, 0x9005, - 0x1170, 0x7040, 0x2048, 0x9005, 0x0128, 0x080c, 0x1007, 0x9006, - 0x7042, 0x7046, 0x703b, 0x18b0, 0x703f, 0x18b0, 0x0420, 0x7040, - 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, - 0x90fa, 0x18f0, 0x0210, 0x2001, 0x18b0, 0x703e, 0x00a0, 0x9006, - 0x703e, 0x703a, 0x7044, 0x9005, 0x090c, 0x0db2, 0x2048, 0xa800, - 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1da2, - 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, - 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x47ea, - 0x47ea, 0x47ec, 0x47ea, 0x47ea, 0x47ea, 0x47f1, 0x47ea, 0x47ea, - 0x47ea, 0x47f6, 0x47ea, 0x47ea, 0x47ea, 0x47fb, 0x47ea, 0x47ea, - 0x47ea, 0x4800, 0x47ea, 0x47ea, 0x47ea, 0x4805, 0x47ea, 0x47ea, - 0x47ea, 0x480a, 0x080c, 0x0db2, 0xaa74, 0xab78, 0xac7c, 0x0804, - 0x4776, 0xaa84, 0xab88, 0xac8c, 0x0804, 0x4776, 0xaa94, 0xab98, - 0xac9c, 0x0804, 0x4776, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x4776, - 0xaab4, 0xabb8, 0xacbc, 0x0804, 0x4776, 0xaac4, 0xabc8, 0xaccc, - 0x0804, 0x4776, 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x4776, 0x0016, - 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009, 0x007e, 0x080c, 0x5f7e, - 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110, 0x2019, 0x0000, 0x2011, - 0x801b, 0x080c, 0x4672, 0x00ce, 0x00be, 0x003e, 0x002e, 0x001e, - 0x0005, 0x0026, 0x080c, 0x5113, 0xd0c4, 0x0120, 0x2011, 0x8014, - 0x080c, 0x4672, 0x002e, 0x0005, 0x81ff, 0x1904, 0x31c3, 0x0126, - 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, - 0x6c53, 0x1158, 0x080c, 0x6f2a, 0x080c, 0x5a21, 0x9085, 0x0001, - 0x080c, 0x6c9a, 0x080c, 0x6b8a, 0x0010, 0x080c, 0x58e0, 0x012e, - 0x0804, 0x3191, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x31c3, - 0x080c, 0x5127, 0x0120, 0x2009, 0x0007, 0x0804, 0x31c3, 0x080c, - 0x629c, 0x0120, 0x2009, 0x0008, 0x0804, 0x31c3, 0x080c, 0x2f81, - 0x0128, 0x7984, 0x080c, 0x5f1e, 0x1904, 0x31c6, 0x080c, 0x4645, - 0x0904, 0x31c6, 0x2b00, 0x7026, 0x080c, 0x62a4, 0x7888, 0x1170, - 0x9084, 0x0005, 0x1158, 0x900e, 0x080c, 0x619e, 0x1108, 0xc185, - 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3191, 0x080c, 0x4612, - 0x0904, 0x31c3, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, - 0x080c, 0xb817, 0x0904, 0x31c3, 0x7888, 0xd094, 0x0118, 0xb8bc, - 0xc08d, 0xb8be, 0x7007, 0x0003, 0x701f, 0x48eb, 0x0005, 0x2061, - 0x1800, 0x080c, 0x5127, 0x2009, 0x0007, 0x1578, 0x080c, 0x629c, - 0x0118, 0x2009, 0x0008, 0x0448, 0x080c, 0x2f81, 0x0120, 0xa998, - 0x080c, 0x5f1e, 0x1530, 0x080c, 0x4643, 0x0518, 0x080c, 0x62a4, - 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150, 0x900e, 0x080c, 0x619e, - 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x00d0, 0xa868, - 0xc0fc, 0xa86a, 0x080c, 0xb817, 0x11e0, 0xa89c, 0xd094, 0x0118, - 0xb8bc, 0xc08d, 0xb8be, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, - 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, - 0x0005, 0xa897, 0x4000, 0xa99a, 0x9006, 0x918d, 0x0001, 0x2008, - 0x0005, 0x9006, 0x0005, 0xa830, 0x9086, 0x0100, 0x7024, 0x2058, - 0x1110, 0x0804, 0x5070, 0x900e, 0x080c, 0x619e, 0x1108, 0xc185, - 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3191, 0x080c, 0x5127, - 0x0120, 0x2009, 0x0007, 0x0804, 0x31c3, 0x7f84, 0x7a8c, 0x7b88, - 0x7c9c, 0x7d98, 0x080c, 0x4612, 0x1120, 0x2009, 0x0002, 0x0804, - 0x31c3, 0x900e, 0x2130, 0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, - 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c, 0x5f7e, 0x1904, - 0x4981, 0x080c, 0x62a4, 0x0120, 0x080c, 0x62ac, 0x1904, 0x4981, - 0x080c, 0x629c, 0x1130, 0x080c, 0x619e, 0x1118, 0xd79c, 0x0904, - 0x4981, 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8b4, 0x20e0, 0xb8b8, - 0x9080, 0x0006, 0x2098, 0x3400, 0xd794, 0x0160, 0x20a9, 0x0008, - 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, - 0x4444, 0x0048, 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, - 0x20e0, 0x080c, 0x4444, 0x4104, 0xd794, 0x0528, 0xb8b4, 0x20e0, - 0xb8b8, 0x2060, 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, - 0x9c80, 0x0003, 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, - 0x2098, 0x3400, 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00, - 0x20e0, 0x080c, 0x4437, 0x9c80, 0x0026, 0x2098, 0xb8b4, 0x20e0, - 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, - 0x0005, 0x8108, 0x080c, 0x9940, 0x0118, 0x9186, 0x0800, 0x0040, - 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, - 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, - 0x0150, 0x0804, 0x491d, 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, - 0x3191, 0x7033, 0x0001, 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, - 0x2061, 0x18ae, 0x2c44, 0xa06b, 0x0000, 0xa67a, 0x7034, 0xa072, - 0x7028, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10b5, - 0x7007, 0x0002, 0x701f, 0x49bd, 0x0005, 0x7030, 0x9005, 0x1180, - 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, - 0x18ae, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x0804, 0x491d, - 0x7124, 0x810b, 0x0804, 0x3191, 0x2029, 0x007e, 0x7984, 0x7a88, - 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, - 0x31c6, 0x9502, 0x0a04, 0x31c6, 0x9184, 0x00ff, 0x90e2, 0x0020, - 0x0a04, 0x31c6, 0x9502, 0x0a04, 0x31c6, 0x9284, 0xff00, 0x8007, - 0x90e2, 0x0020, 0x0a04, 0x31c6, 0x9502, 0x0a04, 0x31c6, 0x9284, - 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x31c6, 0x9502, 0x0a04, 0x31c6, - 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x31c6, 0x9502, - 0x0a04, 0x31c6, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x31c6, - 0x9502, 0x0a04, 0x31c6, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, - 0x0a04, 0x31c6, 0x9502, 0x0a04, 0x31c6, 0x9484, 0x00ff, 0x90e2, - 0x0020, 0x0a04, 0x31c6, 0x9502, 0x0a04, 0x31c6, 0x2061, 0x1958, - 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x3191, 0x0006, 0x080c, - 0x5113, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x080c, 0x5117, 0xd0bc, - 0x000e, 0x0005, 0x616c, 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, - 0x0804, 0x3191, 0x83ff, 0x1904, 0x31c6, 0x2001, 0xfff0, 0x9200, - 0x1a04, 0x31c6, 0x2019, 0xffff, 0x6070, 0x9302, 0x9200, 0x0a04, - 0x31c6, 0x7986, 0x626e, 0x0804, 0x3191, 0x080c, 0x5127, 0x1904, - 0x31c3, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4612, 0x0904, - 0x31c3, 0x900e, 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, - 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, - 0x8bff, 0x0178, 0x080c, 0x62a4, 0x0118, 0x080c, 0x62ac, 0x1148, - 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, - 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0170, - 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, - 0x7e7f, 0x2208, 0x0804, 0x3191, 0x7033, 0x0001, 0x7122, 0x7024, - 0x9300, 0x7026, 0x2061, 0x18ae, 0x2c44, 0xa06b, 0x0000, 0xa37a, - 0x7028, 0xa076, 0x7034, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, - 0x080c, 0x10b5, 0x7007, 0x0002, 0x701f, 0x4aaf, 0x0005, 0x7030, - 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, - 0x2061, 0x18ae, 0x2c44, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0804, - 0x4a6d, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x7e7f, 0x2208, - 0x0804, 0x3191, 0x00f6, 0x00e6, 0x080c, 0x5127, 0x2009, 0x0007, - 0x1904, 0x4b42, 0x2071, 0x1894, 0x745c, 0x84ff, 0x2009, 0x000e, - 0x1904, 0x4b42, 0xac9c, 0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c, - 0x0fee, 0x2009, 0x0002, 0x0904, 0x4b42, 0x2900, 0x705e, 0x900e, - 0x901e, 0x7356, 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, - 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, - 0x62a4, 0x0118, 0x080c, 0x62ac, 0x1148, 0xb814, 0x20a9, 0x0001, - 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, - 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, - 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x7e7f, 0x2208, 0x009e, - 0xa897, 0x4000, 0xa99a, 0x715c, 0x81ff, 0x090c, 0x0db2, 0x2148, - 0x080c, 0x1007, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0x0418, - 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0x2061, 0x18af, - 0x2c44, 0xa37a, 0x7058, 0xa076, 0x7064, 0xa072, 0xa48e, 0xa592, - 0xa696, 0xa79a, 0xa09f, 0x4b4e, 0x000e, 0xa0a2, 0x080c, 0x10b5, - 0x9006, 0x0048, 0x009e, 0xa897, 0x4005, 0xa99a, 0x900e, 0x9085, - 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0, - 0x904d, 0x090c, 0x0db2, 0x00e6, 0x2071, 0x1894, 0xa06c, 0x908e, - 0x0100, 0x0138, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, - 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, - 0x7064, 0x20e8, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0428, 0xa87b, - 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x7254, 0x900e, 0x2001, - 0x0003, 0x080c, 0x7e7f, 0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0db2, - 0x2148, 0x080c, 0x1007, 0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126, - 0x2091, 0x8000, 0x080c, 0x6536, 0x012e, 0xa09f, 0x0000, 0xa0a3, - 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, - 0x0178, 0x080c, 0x62a4, 0x0118, 0x080c, 0x62ac, 0x1148, 0xb814, - 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, - 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, - 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99a, 0xa897, 0x4000, 0x715c, - 0x81ff, 0x090c, 0x0db2, 0x2148, 0x080c, 0x1007, 0x9006, 0x705e, - 0x918d, 0x0001, 0x2008, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, - 0x080c, 0x6536, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070, - 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e, - 0xa592, 0xa696, 0xa79a, 0x080c, 0x10b5, 0x9006, 0x00ee, 0x0005, - 0x0096, 0xa88c, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, - 0x90be, 0x7200, 0x0118, 0x009e, 0x0804, 0x31c6, 0xa884, 0xa988, - 0x080c, 0x24d6, 0x1518, 0x080c, 0x5f1e, 0x1500, 0x7126, 0xbe12, - 0xbd16, 0xae7c, 0x080c, 0x4612, 0x01c8, 0x080c, 0x4612, 0x01b0, - 0x009e, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000, - 0xa804, 0x2048, 0x080c, 0xb79e, 0x1120, 0x2009, 0x0003, 0x0804, - 0x31c3, 0x7007, 0x0003, 0x701f, 0x4c1b, 0x0005, 0x009e, 0x2009, - 0x0002, 0x0804, 0x31c3, 0x7124, 0x080c, 0x2f28, 0xa820, 0x9086, - 0x8001, 0x1120, 0x2009, 0x0004, 0x0804, 0x31c3, 0x2900, 0x7022, - 0xa804, 0x0096, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, - 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076, 0x0006, 0x2098, - 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f52, 0xaa6c, - 0xab70, 0xac74, 0xad78, 0x2061, 0x18ae, 0x2c44, 0xa06b, 0x0000, - 0xae64, 0xaf8c, 0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, - 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, 0x000e, 0x007e, 0x0804, - 0x465e, 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, - 0x007e, 0x2061, 0x18ae, 0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a, - 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10b5, 0x7007, 0x0002, - 0x701f, 0x4c77, 0x0005, 0x000e, 0x007e, 0x0804, 0x31c6, 0x7020, - 0x2048, 0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, - 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, - 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f52, 0x2100, 0x2238, - 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, - 0x002a, 0x0804, 0x465e, 0x81ff, 0x1904, 0x31c3, 0x798c, 0x2001, - 0x194f, 0x2102, 0x080c, 0x4629, 0x0904, 0x31c6, 0x080c, 0x62a4, - 0x0120, 0x080c, 0x62ac, 0x1904, 0x31c6, 0x080c, 0x6045, 0x0904, - 0x31c3, 0x0126, 0x2091, 0x8000, 0x080c, 0x610b, 0x012e, 0x0904, - 0x31c3, 0x0804, 0x417a, 0xa9a0, 0x2001, 0x194f, 0xc18d, 0x2102, - 0x080c, 0x4636, 0x01a0, 0x080c, 0x62a4, 0x0118, 0x080c, 0x62ac, - 0x1170, 0x080c, 0x6045, 0x2009, 0x0002, 0x0128, 0x080c, 0x610b, - 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, - 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, - 0x4000, 0x080c, 0x511b, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, - 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084, - 0x0904, 0x40ef, 0x080c, 0x4645, 0x0904, 0x31c6, 0x080c, 0x4612, - 0x1120, 0x2009, 0x0002, 0x0804, 0x31c3, 0x080c, 0x62a4, 0x0130, - 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c, - 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, 0x5113, 0xd0b4, - 0x0904, 0x4129, 0x7884, 0x908e, 0x007e, 0x0904, 0x4129, 0x908e, - 0x007f, 0x0904, 0x4129, 0x908e, 0x0080, 0x0904, 0x4129, 0xb800, - 0xd08c, 0x1904, 0x4129, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, - 0x080c, 0xb7bd, 0x1120, 0x2009, 0x0003, 0x0804, 0x31c3, 0x7007, - 0x0003, 0x701f, 0x4d34, 0x0005, 0x080c, 0x4645, 0x0904, 0x31c6, - 0x0804, 0x4129, 0x080c, 0x2f81, 0x0108, 0x0005, 0x2009, 0x1832, - 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x31c3, 0x080c, - 0x5127, 0x0120, 0x2009, 0x0007, 0x0804, 0x31c3, 0x080c, 0x629c, - 0x0120, 0x2009, 0x0008, 0x0804, 0x31c3, 0xb89c, 0xd0a4, 0x1118, - 0xd0ac, 0x1904, 0x4129, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, - 0xa86a, 0x080c, 0xb817, 0x1120, 0x2009, 0x0003, 0x0804, 0x31c3, - 0x7007, 0x0003, 0x701f, 0x4d6d, 0x0005, 0xa830, 0x9086, 0x0100, - 0x1120, 0x2009, 0x0004, 0x0804, 0x5070, 0x080c, 0x4645, 0x0904, - 0x31c6, 0x0804, 0x4d06, 0x81ff, 0x2009, 0x0001, 0x1904, 0x31c3, - 0x080c, 0x5127, 0x2009, 0x0007, 0x1904, 0x31c3, 0x080c, 0x629c, - 0x0120, 0x2009, 0x0008, 0x0804, 0x31c3, 0x080c, 0x4645, 0x0904, - 0x31c6, 0x080c, 0x62a4, 0x2009, 0x0009, 0x1904, 0x31c3, 0x080c, - 0x4612, 0x2009, 0x0002, 0x0904, 0x31c3, 0x9006, 0xa866, 0xa832, - 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194, 0xff00, 0x918c, 0x00ff, - 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, - 0x928e, 0x0100, 0x1904, 0x31c6, 0xc0e5, 0xa952, 0xa956, 0xa83e, - 0x080c, 0xba6a, 0x2009, 0x0003, 0x0904, 0x31c3, 0x7007, 0x0003, - 0x701f, 0x4dc3, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, - 0x0904, 0x31c3, 0x0804, 0x3191, 0x7aa8, 0x9284, 0xc000, 0x0148, - 0xd2ec, 0x01a0, 0x080c, 0x5127, 0x1188, 0x2009, 0x0014, 0x0804, - 0x31c3, 0xd2dc, 0x1568, 0x81ff, 0x2009, 0x0001, 0x1904, 0x31c3, - 0x080c, 0x5127, 0x2009, 0x0007, 0x1904, 0x31c3, 0xd2f4, 0x0130, - 0x9284, 0x5000, 0x080c, 0x50ee, 0x0804, 0x3191, 0xd2fc, 0x0158, - 0x080c, 0x4645, 0x0904, 0x31c6, 0x7984, 0x9284, 0x9000, 0x080c, - 0x50cb, 0x0804, 0x3191, 0x080c, 0x4645, 0x0904, 0x31c6, 0xb804, - 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904, 0x4eac, - 0x080c, 0x4612, 0x2009, 0x0002, 0x0904, 0x4eac, 0xa85c, 0x9080, - 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, - 0x080c, 0x465b, 0x701f, 0x4e1d, 0x0005, 0xa86c, 0x9086, 0x0500, - 0x1138, 0xa870, 0x9005, 0x1120, 0xa874, 0x9084, 0xff00, 0x0110, - 0x1904, 0x31c6, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, - 0x4645, 0x1110, 0x0804, 0x31c6, 0x2009, 0x0043, 0x080c, 0xbad2, - 0x2009, 0x0003, 0x0904, 0x4eac, 0x7007, 0x0003, 0x701f, 0x4e41, - 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x4eac, - 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c, 0x50cb, 0x0804, 0x3191, - 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140, 0xd2ec, 0x0168, 0x080c, - 0x5127, 0x1150, 0x2009, 0x0014, 0x04f0, 0x2061, 0x1800, 0x080c, - 0x5127, 0x2009, 0x0007, 0x15b8, 0xd2f4, 0x0128, 0x9284, 0x5000, - 0x080c, 0x50ee, 0x0050, 0xd2fc, 0x0178, 0x080c, 0x4643, 0x0588, - 0xa998, 0x9284, 0x9000, 0x080c, 0x50cb, 0xa87b, 0x0000, 0xa883, - 0x0000, 0xa897, 0x4000, 0x0438, 0x080c, 0x4643, 0x0510, 0x080c, - 0x62a4, 0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086, 0x0500, 0x11c8, - 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00, 0x1190, 0x080c, - 0x4643, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xbad2, 0x2009, - 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0, 0xa897, 0x4005, 0xa99a, - 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, - 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x31c3, - 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x50cb, 0x001e, - 0x1904, 0x31c3, 0x0804, 0x3191, 0x00f6, 0x2d78, 0x0011, 0x00fe, - 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016, 0xa998, 0x9284, 0x1000, - 0xc0fd, 0x080c, 0x50cb, 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, - 0x0120, 0x2009, 0x0001, 0x0804, 0x31c3, 0x080c, 0x5127, 0x0120, - 0x2009, 0x0007, 0x0804, 0x31c3, 0x7984, 0x7ea8, 0x96b4, 0x00ff, - 0x080c, 0x5f7e, 0x1904, 0x31c6, 0x9186, 0x007f, 0x0138, 0x080c, - 0x62a4, 0x0120, 0x2009, 0x0009, 0x0804, 0x31c3, 0x080c, 0x4612, - 0x1120, 0x2009, 0x0002, 0x0804, 0x31c3, 0xa867, 0x0000, 0xa868, - 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c, 0xb7d7, - 0x1120, 0x2009, 0x0003, 0x0804, 0x31c3, 0x7007, 0x0003, 0x701f, - 0x4f0a, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120, 0x2009, - 0x0004, 0x0804, 0x31c3, 0xa8e0, 0xa866, 0xa810, 0x8007, 0x9084, - 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9080, - 0x0002, 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, - 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, - 0x465e, 0x080c, 0x4612, 0x1120, 0x2009, 0x0002, 0x0804, 0x31c3, - 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, - 0x7023, 0x1982, 0x0040, 0x92c6, 0x0001, 0x1118, 0x7023, 0x199c, - 0x0010, 0x0804, 0x31c6, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, - 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x465b, 0x701f, - 0x4f5a, 0x0005, 0x2001, 0x182c, 0x2003, 0x0001, 0xa85c, 0x9080, - 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, - 0x20e9, 0x0001, 0x4003, 0x0804, 0x3191, 0x080c, 0x4612, 0x1120, - 0x2009, 0x0002, 0x0804, 0x31c3, 0x7984, 0x9194, 0xff00, 0x918c, - 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x1982, 0x0040, 0x92c6, - 0x0001, 0x1118, 0x2099, 0x199c, 0x0010, 0x0804, 0x31c6, 0xa85c, - 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, - 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, - 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804, 0x465e, 0x7884, 0x908a, - 0x1000, 0x1a04, 0x31c6, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, - 0x810b, 0x9108, 0x00c6, 0x2061, 0x19c9, 0x6142, 0x00ce, 0x012e, - 0x0804, 0x3191, 0x00c6, 0x080c, 0x6c53, 0x1160, 0x080c, 0x6f2a, - 0x080c, 0x5a21, 0x9085, 0x0001, 0x080c, 0x6c9a, 0x080c, 0x6b8a, - 0x080c, 0x0db2, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, - 0x58e0, 0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800, 0x2004, 0x908e, - 0x0000, 0x0904, 0x31c3, 0x7884, 0x9005, 0x0188, 0x7888, 0x2061, - 0x196b, 0x2c0c, 0x2062, 0x080c, 0x28b8, 0x01a0, 0x080c, 0x28c0, - 0x0188, 0x080c, 0x28c8, 0x0170, 0x2162, 0x0804, 0x31c6, 0x2061, - 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001, 0x0010, - 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1548, 0x2061, 0x0100, - 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011, 0x0003, 0x080c, 0x92ec, - 0x2011, 0x0002, 0x080c, 0x92f6, 0x002e, 0x080c, 0x91de, 0x0036, - 0x901e, 0x080c, 0x9254, 0x003e, 0x60e3, 0x0000, 0x080c, 0xd343, - 0x080c, 0xd35e, 0x9085, 0x0001, 0x080c, 0x6c9a, 0x9006, 0x080c, - 0x2987, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x00ce, - 0x0804, 0x3191, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x31c3, - 0x080c, 0x5127, 0x0120, 0x2009, 0x0007, 0x0804, 0x31c3, 0x7984, - 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x5f7e, 0x1904, 0x31c6, 0x9186, - 0x007f, 0x0138, 0x080c, 0x62a4, 0x0120, 0x2009, 0x0009, 0x0804, - 0x31c3, 0x080c, 0x4612, 0x1120, 0x2009, 0x0002, 0x0804, 0x31c3, - 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xb7da, 0x1120, - 0x2009, 0x0003, 0x0804, 0x31c3, 0x7007, 0x0003, 0x701f, 0x5059, + 0x080c, 0x469d, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, + 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x469d, 0x7028, + 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, + 0x0001, 0x04f1, 0x00c6, 0x080c, 0x489b, 0x0550, 0xa868, 0xc0fd, + 0xa86a, 0xa867, 0x0119, 0x9006, 0xa882, 0xa87f, 0x0020, 0xa88b, + 0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6, 0xabba, 0xacbe, 0xadc2, + 0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de, 0xa866, 0xa822, 0xa868, + 0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c, 0xc9a8, 0x1120, 0x2009, + 0x0003, 0x0804, 0x3401, 0x7007, 0x0003, 0x701f, 0x4687, 0x0005, + 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x3401, 0xa820, + 0x9086, 0x8001, 0x1904, 0x33cf, 0x2009, 0x0004, 0x0804, 0x3401, + 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104, 0x4004, + 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0036, + 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204, 0x4104, + 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, + 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3401, 0x60dc, 0xd0ac, + 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3401, 0x7984, + 0x78a8, 0x2040, 0x080c, 0xaad5, 0x1120, 0x9182, 0x007f, 0x0a04, + 0x3404, 0x9186, 0x00ff, 0x0904, 0x3404, 0x9182, 0x0800, 0x1a04, + 0x3404, 0x7a8c, 0x7b88, 0x607c, 0x9306, 0x1140, 0x6080, 0x924e, + 0x0904, 0x3404, 0x99cc, 0xff00, 0x0904, 0x3404, 0x0126, 0x2091, + 0x8000, 0x080c, 0x47ae, 0x0904, 0x472e, 0x0086, 0x90c6, 0x4000, + 0x008e, 0x1538, 0x00c6, 0x0006, 0x0036, 0xb818, 0xbb1c, 0x9305, + 0xbb20, 0x9305, 0xbb24, 0x9305, 0xbb28, 0x9305, 0xbb2c, 0x9305, + 0xbb30, 0x9305, 0xbb34, 0x9305, 0x003e, 0x0570, 0xd88c, 0x1128, + 0x080c, 0x6737, 0x0110, 0xc89d, 0x0438, 0x900e, 0x080c, 0x65ed, + 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x000e, 0x00ce, + 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6, 0x4008, + 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108, 0x0040, + 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009, 0x000a, + 0x2020, 0x012e, 0x0804, 0x33d1, 0x000e, 0x00ce, 0x2b00, 0x7026, + 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0xabb9, 0x0904, + 0x4783, 0x2b00, 0x6012, 0x080c, 0xcc93, 0x2e58, 0x00ee, 0x00e6, + 0x00c6, 0x080c, 0x489b, 0x00ce, 0x2b70, 0x1158, 0x080c, 0xab6b, + 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, 0x0804, + 0x3401, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, 0xa868, + 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0xd89c, 0x1110, 0x080c, + 0x306e, 0x6023, 0x0001, 0x9006, 0x080c, 0x6309, 0xd89c, 0x0138, + 0x2001, 0x0004, 0x080c, 0x631d, 0x2009, 0x0003, 0x0030, 0x2001, + 0x0002, 0x080c, 0x631d, 0x2009, 0x0002, 0x080c, 0xabe6, 0x78a8, + 0xd094, 0x0138, 0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8cc, 0xc08d, + 0xb8ce, 0x9085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, + 0x1120, 0x2009, 0x0003, 0x0804, 0x3401, 0x7007, 0x0003, 0x701f, + 0x4792, 0x0005, 0xa830, 0x9086, 0x0100, 0x7024, 0x2058, 0x1138, + 0x2009, 0x0004, 0xba04, 0x9294, 0x00ff, 0x0804, 0x5414, 0x900e, + 0xa868, 0xd0f4, 0x1904, 0x33cf, 0x080c, 0x65ed, 0x1108, 0xc185, + 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x33cf, 0x00e6, 0x00d6, + 0x0096, 0x83ff, 0x0904, 0x47fd, 0x902e, 0x080c, 0xaad5, 0x0130, + 0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, + 0x20a9, 0x0781, 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b8, 0x2100, + 0x9406, 0x1904, 0x480e, 0x2428, 0x94ce, 0x007f, 0x1120, 0x92ce, + 0xfffd, 0x1558, 0x0030, 0x94ce, 0x0080, 0x1130, 0x92ce, 0xfffc, + 0x1520, 0x93ce, 0x00ff, 0x1508, 0xc5fd, 0x0480, 0x2058, 0xbf10, + 0x2700, 0x9306, 0x11e8, 0xbe14, 0x2600, 0x9206, 0x11c8, 0x2400, + 0x9106, 0x1180, 0xd884, 0x0598, 0xd894, 0x1588, 0x080c, 0x66d7, + 0x1570, 0x2001, 0x4000, 0x0460, 0x080c, 0x6737, 0x1540, 0x2001, + 0x4000, 0x0430, 0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, + 0x2400, 0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0918, + 0x080c, 0xaad5, 0x1900, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, + 0x1f04, 0x47c4, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, + 0x0001, 0x0030, 0x080c, 0x636c, 0x1dd0, 0xbb12, 0xba16, 0x9006, + 0x9005, 0x009e, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, + 0x0001, 0x0804, 0x3401, 0x080c, 0x489b, 0x1120, 0x2009, 0x0002, + 0x0804, 0x3401, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, + 0x9005, 0x0904, 0x3404, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, + 0x1a04, 0x3404, 0x2010, 0x2918, 0x080c, 0x3014, 0x1120, 0x2009, + 0x0003, 0x0804, 0x3401, 0x7007, 0x0003, 0x701f, 0x4850, 0x0005, + 0xa830, 0x9086, 0x0100, 0x1904, 0x33cf, 0x2009, 0x0004, 0x0804, + 0x3401, 0x7984, 0x080c, 0xaad5, 0x1120, 0x9182, 0x007f, 0x0a04, + 0x3404, 0x9186, 0x00ff, 0x0904, 0x3404, 0x9182, 0x0800, 0x1a04, + 0x3404, 0x2001, 0x9000, 0x080c, 0x546f, 0x1904, 0x3401, 0x0804, + 0x33cf, 0xa998, 0x080c, 0xaad5, 0x1118, 0x9182, 0x007f, 0x0280, + 0x9186, 0x00ff, 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9000, + 0x080c, 0x546f, 0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, + 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, + 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, + 0x2009, 0x000a, 0x0c48, 0x080c, 0x1000, 0x0198, 0x9006, 0xa802, + 0x7014, 0x9005, 0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, + 0xa802, 0x0086, 0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, + 0x0001, 0x0005, 0x7984, 0x080c, 0x63cd, 0x1130, 0x7e88, 0x9684, + 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, + 0x080c, 0x63cd, 0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, + 0x0208, 0x905e, 0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, + 0x080c, 0x63cd, 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, + 0x7114, 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c, 0x1032, 0x0cc8, + 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, + 0x0000, 0x2061, 0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, + 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10e0, 0x7007, 0x0002, + 0x701f, 0x33cf, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, + 0x0000, 0x2001, 0x18b0, 0x2004, 0x9005, 0x1190, 0x0e04, 0x4918, + 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1192, 0x0804, 0x497e, + 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071, 0x189e, 0x7044, + 0x9005, 0x1540, 0x7148, 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, + 0x080c, 0x1000, 0x0904, 0x4976, 0xa84b, 0x0000, 0x2900, 0x7046, + 0x2001, 0x0002, 0x9080, 0x1f4a, 0x2005, 0xa846, 0x0098, 0x7038, + 0x90e0, 0x0004, 0x2001, 0x18ba, 0x9c82, 0x18fa, 0x0210, 0x2061, + 0x18ba, 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, + 0x714a, 0x0460, 0x7148, 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, + 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0dd5, 0x2060, 0x001e, + 0x8108, 0x2105, 0x9005, 0xa146, 0x1520, 0x080c, 0x1000, 0x1130, + 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, + 0xa84a, 0xa046, 0x2800, 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, + 0x0002, 0x9080, 0x1f4a, 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, + 0x640a, 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, + 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x49a0, 0x49a0, 0x49a2, + 0x49a0, 0x49a0, 0x49a0, 0x49a6, 0x49a0, 0x49a0, 0x49a0, 0x49aa, + 0x49a0, 0x49a0, 0x49a0, 0x49ae, 0x49a0, 0x49a0, 0x49a0, 0x49b2, + 0x49a0, 0x49a0, 0x49a0, 0x49b6, 0x49a0, 0x49a0, 0x49a0, 0x49bb, + 0x080c, 0x0dd5, 0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, + 0xa48e, 0x0878, 0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, + 0xa4ae, 0x0838, 0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, + 0xa4ce, 0x0804, 0x4979, 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4979, + 0x00e6, 0x2071, 0x189e, 0x7048, 0x9005, 0x0904, 0x4a52, 0x0126, + 0x2091, 0x8000, 0x0e04, 0x4a51, 0x00f6, 0x2079, 0x0000, 0x00c6, + 0x0096, 0x0086, 0x0076, 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, + 0x0500, 0xa948, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0dd5, + 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a, 0x1904, 0x4a54, + 0xa804, 0x9005, 0x090c, 0x0dd5, 0x7042, 0x2938, 0x2040, 0xa003, + 0x0000, 0x2001, 0x0002, 0x9080, 0x1f4a, 0x2005, 0xa04a, 0x0804, + 0x4a54, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, + 0x7836, 0x7833, 0x0012, 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, + 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1192, + 0x87ff, 0x0118, 0x2748, 0x080c, 0x1032, 0x7048, 0x8001, 0x704a, + 0x9005, 0x1170, 0x7040, 0x2048, 0x9005, 0x0128, 0x080c, 0x1032, + 0x9006, 0x7042, 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, 0x0420, + 0x7040, 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, + 0x0004, 0x90fa, 0x18fa, 0x0210, 0x2001, 0x18ba, 0x703e, 0x00a0, + 0x9006, 0x703e, 0x703a, 0x7044, 0x9005, 0x090c, 0x0dd5, 0x2048, + 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, + 0x1f4a, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, + 0x00fe, 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, + 0x4a73, 0x4a73, 0x4a75, 0x4a73, 0x4a73, 0x4a73, 0x4a7a, 0x4a73, + 0x4a73, 0x4a73, 0x4a7f, 0x4a73, 0x4a73, 0x4a73, 0x4a84, 0x4a73, + 0x4a73, 0x4a73, 0x4a89, 0x4a73, 0x4a73, 0x4a73, 0x4a8e, 0x4a73, + 0x4a73, 0x4a73, 0x4a93, 0x080c, 0x0dd5, 0xaa74, 0xab78, 0xac7c, + 0x0804, 0x49ff, 0xaa84, 0xab88, 0xac8c, 0x0804, 0x49ff, 0xaa94, + 0xab98, 0xac9c, 0x0804, 0x49ff, 0xaaa4, 0xaba8, 0xacac, 0x0804, + 0x49ff, 0xaab4, 0xabb8, 0xacbc, 0x0804, 0x49ff, 0xaac4, 0xabc8, + 0xaccc, 0x0804, 0x49ff, 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x49ff, + 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009, 0x007e, 0x080c, + 0x63cd, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110, 0x2019, 0x0000, + 0x2011, 0x801b, 0x080c, 0x48fb, 0x00ce, 0x00be, 0x003e, 0x002e, + 0x001e, 0x0005, 0x0026, 0x080c, 0x54b7, 0xd0c4, 0x0120, 0x2011, + 0x8014, 0x080c, 0x48fb, 0x002e, 0x0005, 0x81ff, 0x1904, 0x3401, + 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, + 0x080c, 0x717d, 0x1158, 0x080c, 0x7465, 0x080c, 0x5df8, 0x9085, + 0x0001, 0x080c, 0x71c4, 0x080c, 0x70af, 0x0010, 0x080c, 0x5cb7, + 0x012e, 0x0804, 0x33cf, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, + 0x3401, 0x080c, 0x54cb, 0x0120, 0x2009, 0x0007, 0x0804, 0x3401, + 0x080c, 0x672f, 0x0120, 0x2009, 0x0008, 0x0804, 0x3401, 0x080c, + 0x31bf, 0x0128, 0x7984, 0x080c, 0x636c, 0x1904, 0x3404, 0x080c, + 0x48ce, 0x0904, 0x3404, 0x2b00, 0x7026, 0x080c, 0x6737, 0x7888, + 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c, 0x65ed, 0x1108, + 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x33cf, 0x080c, + 0x489b, 0x0904, 0x3401, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, + 0xa86a, 0x080c, 0xca41, 0x0904, 0x3401, 0x7888, 0xd094, 0x0118, + 0xb8cc, 0xc08d, 0xb8ce, 0x7007, 0x0003, 0x701f, 0x4b74, 0x0005, + 0x2061, 0x1800, 0x080c, 0x54cb, 0x2009, 0x0007, 0x1578, 0x080c, + 0x672f, 0x0118, 0x2009, 0x0008, 0x0448, 0x080c, 0x31bf, 0x0120, + 0xa998, 0x080c, 0x636c, 0x1530, 0x080c, 0x48cc, 0x0518, 0x080c, + 0x6737, 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150, 0x900e, 0x080c, + 0x65ed, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x00d0, + 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xca41, 0x11e0, 0xa89c, 0xd094, + 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x2009, 0x0003, 0xa897, 0x4005, + 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, + 0x0030, 0x0005, 0xa897, 0x4000, 0xa99a, 0x9006, 0x918d, 0x0001, + 0x2008, 0x0005, 0x9006, 0x0005, 0xa830, 0x9086, 0x0100, 0x7024, + 0x2058, 0x1110, 0x0804, 0x5414, 0x900e, 0x080c, 0x65ed, 0x1108, + 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x33cf, 0x080c, + 0x54cb, 0x0120, 0x2009, 0x0007, 0x0804, 0x3401, 0x7f84, 0x7a8c, + 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x489b, 0x1120, 0x2009, 0x0002, + 0x0804, 0x3401, 0x900e, 0x2130, 0x7126, 0x7132, 0xa860, 0x20e8, + 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c, 0x63cd, + 0x1904, 0x4c16, 0x080c, 0x6737, 0x0138, 0x080c, 0x673f, 0x0120, + 0x080c, 0x66d7, 0x1904, 0x4c16, 0xd794, 0x1110, 0xd784, 0x01a8, + 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x3400, 0xd794, + 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, + 0x20a9, 0x0002, 0x080c, 0x469d, 0x0048, 0x20a9, 0x0004, 0x4003, + 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x469d, 0x9186, 0x007e, + 0x0170, 0x9186, 0x0080, 0x0158, 0x080c, 0x6737, 0x90c2, 0x0006, + 0x1210, 0xc1fd, 0x0020, 0x080c, 0x65ed, 0x1108, 0xc1fd, 0x4104, + 0xc1fc, 0xd794, 0x0528, 0xb8c4, 0x20e0, 0xb8c8, 0x2060, 0x9c80, + 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003, 0x2098, + 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400, 0x20a9, + 0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4690, + 0x9c80, 0x0026, 0x2098, 0xb8c4, 0x20e0, 0x20a9, 0x0002, 0x4003, + 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, + 0xaad5, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, + 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, + 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4ba6, + 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x33cf, 0x7033, 0x0001, + 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18b8, 0x2c44, + 0xa06b, 0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, + 0xa392, 0xa496, 0xa59a, 0x080c, 0x10e0, 0x7007, 0x0002, 0x701f, + 0x4c52, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, + 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18b8, 0x2c44, 0xa28c, + 0xa390, 0xa494, 0xa598, 0x0804, 0x4ba6, 0x7124, 0x810b, 0x0804, + 0x33cf, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, + 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3404, 0x9502, 0x0a04, + 0x3404, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3404, 0x9502, + 0x0a04, 0x3404, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, + 0x3404, 0x9502, 0x0a04, 0x3404, 0x9284, 0x00ff, 0x90e2, 0x0020, + 0x0a04, 0x3404, 0x9502, 0x0a04, 0x3404, 0x9384, 0xff00, 0x8007, + 0x90e2, 0x0020, 0x0a04, 0x3404, 0x9502, 0x0a04, 0x3404, 0x9384, + 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3404, 0x9502, 0x0a04, 0x3404, + 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3404, 0x9502, + 0x0a04, 0x3404, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3404, + 0x9502, 0x0a04, 0x3404, 0x2061, 0x1987, 0x6102, 0x6206, 0x630a, + 0x640e, 0x0804, 0x33cf, 0x080c, 0x489b, 0x0904, 0x3401, 0x2009, + 0x0016, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, + 0xaf60, 0x080c, 0x48e4, 0x701f, 0x4cd6, 0x0005, 0x2001, 0x0138, + 0x2003, 0x0000, 0x00e6, 0x2071, 0x0300, 0x701c, 0xd0a4, 0x1de8, + 0x00ee, 0x20a9, 0x0016, 0x896e, 0x8d6e, 0x8d6f, 0x9d84, 0xffc0, + 0x9080, 0x0019, 0x2098, 0x9d84, 0x003f, 0x20e0, 0x2069, 0x1877, + 0x20e9, 0x0001, 0x2da0, 0x4003, 0x6800, 0x9005, 0x0904, 0x4d57, + 0x6804, 0x2008, 0x918c, 0xfff8, 0x1904, 0x4d57, 0x680c, 0x9005, + 0x0904, 0x4d57, 0x9082, 0xff01, 0x1a04, 0x4d57, 0x6810, 0x9082, + 0x005c, 0x0a04, 0x4d57, 0x6824, 0x2008, 0x9082, 0x0008, 0x0a04, + 0x4d57, 0x9182, 0x0400, 0x1a04, 0x4d57, 0x0056, 0x2029, 0x0000, + 0x080c, 0x888a, 0x005e, 0x6944, 0x6820, 0x9102, 0x06c0, 0x6820, + 0x9082, 0x0019, 0x16a0, 0x6828, 0x6944, 0x810c, 0x9102, 0x0678, + 0x6840, 0x9082, 0x000f, 0x1658, 0x080c, 0x1019, 0x2900, 0x0904, + 0x4d71, 0x684e, 0x00e6, 0x2071, 0x1930, 0x00b6, 0x2059, 0x0000, + 0x080c, 0x8746, 0x00be, 0x00ee, 0x0558, 0x080c, 0x84a0, 0x080c, + 0x84e6, 0x11e0, 0x6857, 0x0000, 0x00c6, 0x2061, 0x0100, 0x6104, + 0x918d, 0x2000, 0x6106, 0x6b10, 0x2061, 0x1a60, 0x630a, 0x00ce, + 0x080c, 0x2808, 0x2001, 0x0138, 0x2102, 0x0804, 0x33cf, 0x080c, + 0x2808, 0x2001, 0x0138, 0x2102, 0x0804, 0x3404, 0x00e6, 0x2071, + 0x1930, 0x080c, 0x891b, 0x080c, 0x892a, 0x080c, 0x8735, 0x00ee, + 0x2001, 0x188a, 0x204c, 0x080c, 0x1032, 0x2001, 0x188a, 0x2003, + 0x0000, 0x080c, 0x2808, 0x2001, 0x0138, 0x2102, 0x0804, 0x3401, + 0x2001, 0x1924, 0x200c, 0x918e, 0x0000, 0x0904, 0x4dd0, 0x080c, + 0x8730, 0x0904, 0x4dd0, 0x2001, 0x0101, 0x200c, 0x918c, 0xdfff, + 0x2102, 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6, 0x2071, 0x0300, + 0x701c, 0xd0a4, 0x1de8, 0x00ee, 0x080c, 0x8735, 0x2001, 0x0035, + 0x080c, 0x15d1, 0x00c6, 0x2061, 0x193c, 0x6004, 0x6100, 0x9106, + 0x1de0, 0x00ce, 0x080c, 0x2808, 0x2001, 0x0138, 0x2102, 0x00e6, + 0x00f6, 0x2071, 0x1923, 0x080c, 0x8671, 0x0120, 0x2f00, 0x080c, + 0x86fb, 0x0cc8, 0x00fe, 0x00ee, 0x0126, 0x2091, 0x8000, 0x2001, + 0x188a, 0x200c, 0x81ff, 0x0138, 0x2148, 0x080c, 0x1032, 0x2001, + 0x188a, 0x2003, 0x0000, 0x2001, 0x183c, 0x2003, 0x0020, 0x00e6, + 0x2071, 0x1930, 0x080c, 0x891b, 0x080c, 0x892a, 0x00ee, 0x012e, + 0x0804, 0x33cf, 0x0006, 0x080c, 0x54b7, 0xd0cc, 0x000e, 0x0005, + 0x0006, 0x080c, 0x54bb, 0xd0bc, 0x000e, 0x0005, 0x6174, 0x7a84, + 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x33cf, 0x83ff, 0x1904, + 0x3404, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x3404, 0x2019, 0xffff, + 0x6078, 0x9302, 0x9200, 0x0a04, 0x3404, 0x7986, 0x6276, 0x0804, + 0x33cf, 0x080c, 0x54cb, 0x1904, 0x3401, 0x7c88, 0x7d84, 0x7e98, + 0x7f8c, 0x080c, 0x489b, 0x0904, 0x3401, 0x900e, 0x901e, 0x7326, + 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, + 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6737, + 0x0118, 0x080c, 0x673f, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, + 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, + 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, + 0x900e, 0x2001, 0x0003, 0x080c, 0x8cf7, 0x2208, 0x0804, 0x33cf, + 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, 0x18b8, + 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, 0xa072, + 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10e0, 0x7007, 0x0002, + 0x701f, 0x4e53, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, 0x7028, + 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18b8, 0x2c44, 0xa48c, + 0xa590, 0xa694, 0xa798, 0x0804, 0x4e11, 0x7224, 0x900e, 0x2001, + 0x0003, 0x080c, 0x8cf7, 0x2208, 0x0804, 0x33cf, 0x00f6, 0x00e6, + 0x080c, 0x54cb, 0x2009, 0x0007, 0x1904, 0x4ee6, 0x2071, 0x189e, + 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x4ee6, 0xac9c, 0xad98, + 0xaea4, 0xafa0, 0x0096, 0x080c, 0x1019, 0x2009, 0x0002, 0x0904, + 0x4ee6, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, 0xa860, + 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, + 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6737, 0x0118, 0x080c, 0x673f, + 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, + 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, + 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, + 0x080c, 0x8cf7, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x715c, + 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c, 0x1032, 0x9006, 0x705e, + 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, 0x7054, + 0x9300, 0x7056, 0x2061, 0x18b9, 0x2c44, 0xa37a, 0x7058, 0xa076, + 0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x4ef2, + 0x000e, 0xa0a2, 0x080c, 0x10e0, 0x9006, 0x0048, 0x009e, 0xa897, + 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, + 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0dd5, 0x00e6, + 0x2071, 0x189e, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030, + 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, + 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590, + 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, + 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8cf7, 0xaa9a, + 0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c, 0x1032, 0x705f, + 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6a46, + 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005, + 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6737, 0x0118, + 0x080c, 0x673f, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, + 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, + 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, + 0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, + 0x080c, 0x1032, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0, + 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6a46, 0x012e, 0xa09f, + 0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, 0x7054, + 0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, + 0x10e0, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, 0x7000, + 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x009e, + 0x0804, 0x3404, 0xa884, 0xa988, 0x080c, 0x26f0, 0x1518, 0x080c, + 0x636c, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, 0x489b, + 0x01c8, 0x080c, 0x489b, 0x01b0, 0x009e, 0xa867, 0x0000, 0xa868, + 0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, 0xc9c8, + 0x1120, 0x2009, 0x0003, 0x0804, 0x3401, 0x7007, 0x0003, 0x701f, + 0x4fbf, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x3401, 0x7124, + 0x080c, 0x3166, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, + 0x0804, 0x3401, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, + 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, + 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, + 0x002a, 0x080c, 0x0f7d, 0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061, + 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000, + 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, + 0x0004, 0x000e, 0x007e, 0x0804, 0x48e7, 0x97c6, 0x7200, 0x11b8, + 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18b8, 0x2c44, + 0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a, + 0x080c, 0x10e0, 0x7007, 0x0002, 0x701f, 0x501b, 0x0005, 0x000e, + 0x007e, 0x0804, 0x3404, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, + 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, + 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, + 0x080c, 0x0f7d, 0x2100, 0x2238, 0x2061, 0x18b8, 0x2c44, 0xa28c, + 0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x48e7, 0x81ff, + 0x1904, 0x3401, 0x798c, 0x2001, 0x197e, 0x2102, 0x080c, 0x48b2, + 0x0904, 0x3404, 0x080c, 0x6737, 0x0120, 0x080c, 0x673f, 0x1904, + 0x3404, 0x080c, 0x6494, 0x0904, 0x3401, 0x0126, 0x2091, 0x8000, + 0x080c, 0x655a, 0x012e, 0x0904, 0x3401, 0x0804, 0x43cf, 0xa9a0, + 0x2001, 0x197e, 0xc18d, 0x2102, 0x080c, 0x48bf, 0x01a0, 0x080c, + 0x6737, 0x0118, 0x080c, 0x673f, 0x1170, 0x080c, 0x6494, 0x2009, + 0x0002, 0x0128, 0x080c, 0x655a, 0x1170, 0x2009, 0x0003, 0xa897, + 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, + 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x080c, 0x54bf, 0x0110, + 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, + 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x4344, 0x080c, 0x48ce, + 0x0904, 0x3404, 0x080c, 0x489b, 0x1120, 0x2009, 0x0002, 0x0804, + 0x3401, 0x080c, 0x6737, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, + 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, + 0x0028, 0x080c, 0x54b7, 0xd0b4, 0x0904, 0x437e, 0x7884, 0x908e, + 0x007e, 0x0904, 0x437e, 0x908e, 0x007f, 0x0904, 0x437e, 0x908e, + 0x0080, 0x0904, 0x437e, 0xb800, 0xd08c, 0x1904, 0x437e, 0xa867, + 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xc9e7, 0x1120, 0x2009, + 0x0003, 0x0804, 0x3401, 0x7007, 0x0003, 0x701f, 0x50d8, 0x0005, + 0x080c, 0x48ce, 0x0904, 0x3404, 0x0804, 0x437e, 0x080c, 0x31bf, + 0x0108, 0x0005, 0x2009, 0x1834, 0x210c, 0x81ff, 0x0120, 0x2009, + 0x0001, 0x0804, 0x3401, 0x080c, 0x54cb, 0x0120, 0x2009, 0x0007, + 0x0804, 0x3401, 0x080c, 0x672f, 0x0120, 0x2009, 0x0008, 0x0804, + 0x3401, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x437e, 0x9006, + 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xca41, 0x1120, + 0x2009, 0x0003, 0x0804, 0x3401, 0x7007, 0x0003, 0x701f, 0x5111, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, - 0x31c3, 0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, - 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x465e, - 0xa898, 0x9086, 0x000d, 0x1904, 0x31c3, 0x2021, 0x4005, 0x0126, - 0x2091, 0x8000, 0x0e04, 0x507d, 0x0010, 0x012e, 0x0cc0, 0x7c36, - 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, - 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a, 0xa9a8, 0x799e, - 0x080c, 0x464e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, - 0x190c, 0x1167, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, - 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x19c9, - 0x7984, 0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009, 0x7898, - 0x606a, 0x789c, 0x6066, 0x7888, 0x6062, 0x788c, 0x605e, 0x2001, - 0x19d7, 0x2044, 0x2001, 0x19de, 0xa076, 0xa060, 0xa072, 0xa07b, - 0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f, 0x0000, 0x00ce, - 0x012e, 0x0804, 0x3191, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, - 0x90e4, 0xc000, 0x0128, 0x0006, 0x080c, 0xb648, 0x000e, 0x1198, - 0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, - 0x5a3b, 0x080c, 0x9940, 0x0110, 0xb817, 0x0000, 0x9006, 0x00ce, - 0x00be, 0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0126, 0x2091, - 0x8000, 0x0156, 0x2010, 0x900e, 0x20a9, 0x0800, 0x0016, 0x9180, - 0x1000, 0x2004, 0x9005, 0x0180, 0x9186, 0x007e, 0x0168, 0x9186, - 0x007f, 0x0150, 0x9186, 0x0080, 0x0138, 0x9186, 0x00ff, 0x0120, - 0x0026, 0x2200, 0x0801, 0x002e, 0x001e, 0x8108, 0x1f04, 0x50f6, - 0x015e, 0x012e, 0x0005, 0x2001, 0x1854, 0x2004, 0x0005, 0x2001, - 0x1873, 0x2004, 0x0005, 0x0006, 0x2001, 0x180f, 0x2004, 0xd0d4, - 0x000e, 0x0005, 0x2001, 0x180d, 0x2004, 0xd0b4, 0x0005, 0x2001, - 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, 0x0016, 0x00e6, 0x2071, - 0x1894, 0x7108, 0x910d, 0x710a, 0x00ee, 0x001e, 0x0005, 0x0126, - 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, - 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, - 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x52e0, 0x0068, 0xd08c, - 0x0118, 0x080c, 0x51e9, 0x0040, 0xd094, 0x0118, 0x080c, 0x51b9, - 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, - 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, - 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006, - 0x7090, 0x9005, 0x000e, 0x0120, 0x7093, 0x0000, 0x708b, 0x0000, - 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, - 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, - 0x9296, 0xf700, 0x0178, 0x7134, 0xd1a4, 0x1160, 0x6240, 0x9295, - 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, - 0x599d, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, - 0x6043, 0x0000, 0x707f, 0x0000, 0x709b, 0x0001, 0x70bf, 0x0000, - 0x70d7, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, 0x708f, 0x0000, - 0x7083, 0x000f, 0x2009, 0x000f, 0x2011, 0x5883, 0x080c, 0x7cd9, - 0x0005, 0x2001, 0x1875, 0x2004, 0xd08c, 0x0110, 0x7057, 0xffff, - 0x7080, 0x9005, 0x1528, 0x2011, 0x5883, 0x080c, 0x7c4a, 0x6040, - 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, - 0xd08c, 0x1168, 0x1f04, 0x51cf, 0x6242, 0x7093, 0x0000, 0x6040, - 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, - 0x7093, 0x0000, 0x7087, 0x0000, 0x9006, 0x080c, 0x5a26, 0x0000, - 0x0005, 0x7084, 0x908a, 0x0003, 0x1a0c, 0x0db2, 0x000b, 0x0005, - 0x51f3, 0x5244, 0x52df, 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, - 0x7087, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, - 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x5202, - 0x080c, 0x0db2, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, - 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, - 0x5a02, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, - 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1c0e, 0x20a9, - 0x0004, 0x4003, 0x080c, 0x97ce, 0x20e1, 0x0001, 0x2099, 0x1c00, + 0x5414, 0x080c, 0x48ce, 0x0904, 0x3404, 0x0804, 0x50aa, 0x81ff, + 0x2009, 0x0001, 0x1904, 0x3401, 0x080c, 0x54cb, 0x2009, 0x0007, + 0x1904, 0x3401, 0x080c, 0x672f, 0x0120, 0x2009, 0x0008, 0x0804, + 0x3401, 0x080c, 0x48ce, 0x0904, 0x3404, 0x080c, 0x6737, 0x2009, + 0x0009, 0x1904, 0x3401, 0x080c, 0x489b, 0x2009, 0x0002, 0x0904, + 0x3401, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, + 0x9194, 0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, + 0xa952, 0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x3404, + 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c, 0xcc94, 0x2009, 0x0003, + 0x0904, 0x3401, 0x7007, 0x0003, 0x701f, 0x5167, 0x0005, 0xa830, + 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x3401, 0x0804, 0x33cf, + 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x54cb, + 0x1188, 0x2009, 0x0014, 0x0804, 0x3401, 0xd2dc, 0x1568, 0x81ff, + 0x2009, 0x0001, 0x1904, 0x3401, 0x080c, 0x54cb, 0x2009, 0x0007, + 0x1904, 0x3401, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x5492, + 0x0804, 0x33cf, 0xd2fc, 0x0158, 0x080c, 0x48ce, 0x0904, 0x3404, + 0x7984, 0x9284, 0x9000, 0x080c, 0x546f, 0x0804, 0x33cf, 0x080c, + 0x48ce, 0x0904, 0x3404, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, + 0x2009, 0x0009, 0x1904, 0x5250, 0x080c, 0x489b, 0x2009, 0x0002, + 0x0904, 0x5250, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, + 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x48e4, 0x701f, 0x51c1, + 0x0005, 0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, + 0xa874, 0x9084, 0xff00, 0x0110, 0x1904, 0x3404, 0xa866, 0xa832, + 0xa868, 0xc0fd, 0xa86a, 0x080c, 0x48ce, 0x1110, 0x0804, 0x3404, + 0x2009, 0x0043, 0x080c, 0xccfc, 0x2009, 0x0003, 0x0904, 0x5250, + 0x7007, 0x0003, 0x701f, 0x51e5, 0x0005, 0xa830, 0x9086, 0x0100, + 0x2009, 0x0004, 0x0904, 0x5250, 0x7984, 0x7aa8, 0x9284, 0x1000, + 0x080c, 0x546f, 0x0804, 0x33cf, 0x00c6, 0xaab0, 0x9284, 0xc000, + 0x0140, 0xd2ec, 0x0168, 0x080c, 0x54cb, 0x1150, 0x2009, 0x0014, + 0x04f0, 0x2061, 0x1800, 0x080c, 0x54cb, 0x2009, 0x0007, 0x15b8, + 0xd2f4, 0x0128, 0x9284, 0x5000, 0x080c, 0x5492, 0x0050, 0xd2fc, + 0x0178, 0x080c, 0x48cc, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, + 0x546f, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, + 0x080c, 0x48cc, 0x0510, 0x080c, 0x6737, 0x2009, 0x0009, 0x11b8, + 0xa8c4, 0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, + 0x9084, 0xff00, 0x1190, 0x080c, 0x48cc, 0x1108, 0x0070, 0x2009, + 0x004b, 0x080c, 0xccfc, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, + 0x19c0, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, + 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, + 0x7aa8, 0xd2dc, 0x0904, 0x3401, 0x0016, 0x7984, 0x9284, 0x1000, + 0xc0fd, 0x080c, 0x546f, 0x001e, 0x1904, 0x3401, 0x0804, 0x33cf, + 0x00f6, 0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, + 0x0016, 0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x546f, 0x001e, + 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, + 0x3401, 0x080c, 0x54cb, 0x0120, 0x2009, 0x0007, 0x0804, 0x3401, + 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x63cd, 0x1904, 0x3404, + 0x9186, 0x007f, 0x0138, 0x080c, 0x6737, 0x0120, 0x2009, 0x0009, + 0x0804, 0x3401, 0x080c, 0x489b, 0x1120, 0x2009, 0x0002, 0x0804, + 0x3401, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, + 0x8007, 0xa80a, 0x080c, 0xca01, 0x1120, 0x2009, 0x0003, 0x0804, + 0x3401, 0x7007, 0x0003, 0x701f, 0x52ae, 0x0005, 0xa808, 0x8007, + 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x3401, 0xa8e0, + 0xa866, 0xa810, 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, + 0x9084, 0x00ff, 0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, + 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, + 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x48e7, 0x080c, 0x489b, 0x1120, + 0x2009, 0x0002, 0x0804, 0x3401, 0x7984, 0x9194, 0xff00, 0x918c, + 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023, 0x19b1, 0x0040, 0x92c6, + 0x0001, 0x1118, 0x7023, 0x19cb, 0x0010, 0x0804, 0x3404, 0x2009, + 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, + 0xaf60, 0x080c, 0x48e4, 0x701f, 0x52fe, 0x0005, 0x2001, 0x182e, + 0x2003, 0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, + 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, + 0x33cf, 0x080c, 0x489b, 0x1120, 0x2009, 0x0002, 0x0804, 0x3401, + 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, + 0x2099, 0x19b1, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x19cb, + 0x0010, 0x0804, 0x3404, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, + 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, + 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, + 0x0804, 0x48e7, 0x7884, 0x908a, 0x1000, 0x1a04, 0x3404, 0x0126, + 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, + 0x19f8, 0x6142, 0x00ce, 0x012e, 0x0804, 0x33cf, 0x00c6, 0x080c, + 0x717d, 0x1160, 0x080c, 0x7465, 0x080c, 0x5df8, 0x9085, 0x0001, + 0x080c, 0x71c4, 0x080c, 0x70af, 0x080c, 0x0dd5, 0x2061, 0x1800, + 0x6030, 0xc09d, 0x6032, 0x080c, 0x5cb7, 0x00ce, 0x0005, 0x00c6, + 0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x3401, 0x7884, + 0x9005, 0x0188, 0x7888, 0x2061, 0x199a, 0x2c0c, 0x2062, 0x080c, + 0x2ad2, 0x01a0, 0x080c, 0x2ada, 0x0188, 0x080c, 0x2ae2, 0x0170, + 0x2162, 0x0804, 0x3404, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, + 0x1118, 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, + 0x0002, 0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, + 0x2011, 0x0003, 0x080c, 0xa349, 0x2011, 0x0002, 0x080c, 0xa353, + 0x002e, 0x080c, 0xa236, 0x0036, 0x901e, 0x080c, 0xa2ac, 0x003e, + 0x60e3, 0x0000, 0x080c, 0xe68c, 0x080c, 0xe6a7, 0x9085, 0x0001, + 0x080c, 0x71c4, 0x9006, 0x080c, 0x2ba1, 0x2001, 0x1800, 0x2003, + 0x0004, 0x6027, 0x0008, 0x00ce, 0x0804, 0x33cf, 0x81ff, 0x0120, + 0x2009, 0x0001, 0x0804, 0x3401, 0x080c, 0x54cb, 0x0120, 0x2009, + 0x0007, 0x0804, 0x3401, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, + 0x63cd, 0x1904, 0x3404, 0x9186, 0x007f, 0x0138, 0x080c, 0x6737, + 0x0120, 0x2009, 0x0009, 0x0804, 0x3401, 0x080c, 0x489b, 0x1120, + 0x2009, 0x0002, 0x0804, 0x3401, 0xa867, 0x0000, 0xa868, 0xc0fd, + 0xa86a, 0x080c, 0xca04, 0x1120, 0x2009, 0x0003, 0x0804, 0x3401, + 0x7007, 0x0003, 0x701f, 0x53fd, 0x0005, 0xa830, 0x9086, 0x0100, + 0x1120, 0x2009, 0x0004, 0x0804, 0x3401, 0xa8e0, 0xa866, 0xa834, + 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, + 0x7d98, 0xaf60, 0x0804, 0x48e7, 0xa898, 0x9086, 0x000d, 0x1904, + 0x3401, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x5421, + 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, + 0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, + 0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c, 0x48d7, 0x2091, 0x4080, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1192, 0x7007, 0x0001, + 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, + 0x8000, 0x00c6, 0x2061, 0x19f8, 0x7984, 0x6152, 0x614e, 0x6057, + 0x0000, 0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, + 0x6062, 0x788c, 0x605e, 0x2001, 0x1a06, 0x2044, 0x2001, 0x1a0d, + 0xa076, 0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, + 0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x33cf, 0x0126, + 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006, + 0x080c, 0xc872, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, + 0x2004, 0x905d, 0x0160, 0x080c, 0x5e12, 0x080c, 0xaad5, 0x0110, + 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085, + 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e, + 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0180, + 0x9186, 0x007e, 0x0168, 0x9186, 0x007f, 0x0150, 0x9186, 0x0080, + 0x0138, 0x9186, 0x00ff, 0x0120, 0x0026, 0x2200, 0x0801, 0x002e, + 0x001e, 0x8108, 0x1f04, 0x549a, 0x015e, 0x012e, 0x0005, 0x2001, + 0x1848, 0x2004, 0x0005, 0x2001, 0x1867, 0x2004, 0x0005, 0x0006, + 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, + 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, + 0x0005, 0x0016, 0x00e6, 0x2071, 0x189e, 0x7108, 0x910d, 0x710a, + 0x00ee, 0x001e, 0x0005, 0x080c, 0x489b, 0x080c, 0x0f07, 0x2100, + 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x79a4, 0x9182, 0x0081, + 0x1a04, 0x3404, 0x810c, 0x080c, 0x48e4, 0x701f, 0x54f0, 0x0005, + 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c, + 0x2061, 0x18b8, 0x2c44, 0xa770, 0xa074, 0x2071, 0x189e, 0x080c, + 0x48e7, 0x701f, 0x5504, 0x0005, 0x2061, 0x18b8, 0x2c44, 0xa074, + 0x2048, 0x9006, 0xa802, 0xa806, 0x0804, 0x33cf, 0x0126, 0x0156, + 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, + 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, + 0x11e8, 0xd084, 0x0118, 0x080c, 0x56b7, 0x0068, 0xd08c, 0x0118, + 0x080c, 0x55c0, 0x0040, 0xd094, 0x0118, 0x080c, 0x5590, 0x0018, + 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, + 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, + 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006, 0x7098, + 0x9005, 0x000e, 0x0120, 0x709b, 0x0000, 0x7093, 0x0000, 0x624c, + 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, + 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, + 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, + 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5d74, + 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, + 0x0000, 0x7087, 0x0000, 0x70a3, 0x0001, 0x70c7, 0x0000, 0x70df, + 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, 0x7097, 0x0000, 0x708b, + 0x000f, 0x2009, 0x000f, 0x2011, 0x5c5a, 0x080c, 0x831a, 0x0005, + 0x2001, 0x1869, 0x2004, 0xd08c, 0x0110, 0x705f, 0xffff, 0x7088, + 0x9005, 0x1528, 0x2011, 0x5c5a, 0x080c, 0x8285, 0x6040, 0x9094, + 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, + 0x1168, 0x1f04, 0x55a6, 0x6242, 0x709b, 0x0000, 0x6040, 0x9094, + 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x709b, + 0x0000, 0x708f, 0x0000, 0x9006, 0x080c, 0x5dfd, 0x0000, 0x0005, + 0x708c, 0x908a, 0x0003, 0x1a0c, 0x0dd5, 0x000b, 0x0005, 0x55ca, + 0x561b, 0x56b6, 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, 0x708f, + 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, + 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x55d9, 0x080c, + 0x0dd5, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, + 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, 0x5dd9, + 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, + 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1c0e, 0x20a9, 0x0004, + 0x4003, 0x080c, 0xa82b, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, + 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, + 0x600f, 0x0000, 0x080c, 0x5c8b, 0x00fe, 0x9006, 0x7092, 0x6043, + 0x0008, 0x6042, 0x0005, 0x00f6, 0x7090, 0x7093, 0x0000, 0x9025, + 0x0904, 0x5693, 0x6020, 0xd0b4, 0x1904, 0x5691, 0x71a0, 0x81ff, + 0x0904, 0x567f, 0x9486, 0x000c, 0x1904, 0x568c, 0x9480, 0x0018, + 0x8004, 0x20a8, 0x080c, 0x5dd2, 0x2011, 0x0260, 0x2019, 0x1c00, + 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x5638, + 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, + 0x2061, 0x0100, 0x6043, 0x0006, 0x708f, 0x0002, 0x709b, 0x0002, + 0x2009, 0x07d0, 0x2011, 0x5c61, 0x080c, 0x831a, 0x080c, 0x5dd9, + 0x04c0, 0x080c, 0x5dd2, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, + 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, + 0x7804, 0x9005, 0x0190, 0x080c, 0x5dd2, 0x2011, 0x026e, 0x2019, + 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, + 0x8210, 0x8318, 0x1f04, 0x5673, 0x0078, 0x70a3, 0x0000, 0x080c, + 0x5dd2, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, + 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, + 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, + 0xd0b4, 0x1db8, 0x080c, 0xa82b, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, - 0x000c, 0x600f, 0x0000, 0x080c, 0x58b4, 0x00fe, 0x9006, 0x708a, - 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x7088, 0x708b, 0x0000, - 0x9025, 0x0904, 0x52bc, 0x6020, 0xd0b4, 0x1904, 0x52ba, 0x7198, - 0x81ff, 0x0904, 0x52a8, 0x9486, 0x000c, 0x1904, 0x52b5, 0x9480, - 0x0018, 0x8004, 0x20a8, 0x080c, 0x59fb, 0x2011, 0x0260, 0x2019, - 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, - 0x5261, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, - 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x7087, 0x0002, 0x7093, - 0x0002, 0x2009, 0x07d0, 0x2011, 0x588a, 0x080c, 0x7cd9, 0x080c, - 0x5a02, 0x04c0, 0x080c, 0x59fb, 0x2079, 0x0260, 0x7930, 0x918e, - 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, - 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x59fb, 0x2011, 0x026e, - 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, - 0x11a0, 0x8210, 0x8318, 0x1f04, 0x529c, 0x0078, 0x709b, 0x0000, - 0x080c, 0x59fb, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, - 0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, - 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, - 0x6020, 0xd0b4, 0x1db8, 0x080c, 0x97ce, 0x20e1, 0x0001, 0x2099, - 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, - 0x60c3, 0x000c, 0x2011, 0x19c0, 0x2013, 0x0000, 0x708b, 0x0000, - 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x8fb2, 0x08d8, 0x0005, - 0x7090, 0x908a, 0x001d, 0x1a0c, 0x0db2, 0x000b, 0x0005, 0x5311, - 0x5324, 0x534d, 0x536d, 0x5393, 0x53c2, 0x53e8, 0x5420, 0x5446, - 0x5474, 0x54af, 0x54e7, 0x5505, 0x5530, 0x5552, 0x556d, 0x5577, - 0x55ab, 0x55d1, 0x5600, 0x5626, 0x565e, 0x56a2, 0x56df, 0x5700, - 0x5759, 0x577b, 0x57a9, 0x57a9, 0x00c6, 0x2061, 0x1800, 0x6003, - 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, - 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, - 0x0100, 0x6043, 0x0002, 0x7093, 0x0001, 0x2009, 0x07d0, 0x2011, - 0x588a, 0x080c, 0x7cd9, 0x0005, 0x00f6, 0x7088, 0x9086, 0x0014, - 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x59fb, 0x2079, - 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, - 0x7a38, 0xd2fc, 0x0128, 0x70bc, 0x9005, 0x1110, 0x70bf, 0x0001, - 0x2011, 0x588a, 0x080c, 0x7c4a, 0x7093, 0x0010, 0x080c, 0x5577, - 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0003, - 0x6043, 0x0004, 0x2011, 0x588a, 0x080c, 0x7c4a, 0x080c, 0x597f, - 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, - 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x5362, 0x60c3, - 0x0014, 0x080c, 0x58b4, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, - 0x0500, 0x2011, 0x588a, 0x080c, 0x7c4a, 0x9086, 0x0014, 0x11b8, - 0x080c, 0x59fb, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, - 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70bc, 0x9005, - 0x1110, 0x70bf, 0x0001, 0x7093, 0x0004, 0x0029, 0x0010, 0x080c, - 0x59d7, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x0005, 0x080c, 0x597f, - 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x59fb, - 0x080c, 0x59de, 0x1170, 0x707c, 0x9005, 0x1158, 0x7154, 0x9186, - 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5837, 0x0168, 0x080c, - 0x59b4, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, - 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x58b4, - 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011, 0x588a, - 0x080c, 0x7c4a, 0x9086, 0x0014, 0x11b8, 0x080c, 0x59fb, 0x2079, + 0x000c, 0x2011, 0x19ef, 0x2013, 0x0000, 0x7093, 0x0000, 0x60a3, + 0x0056, 0x60a7, 0x9575, 0x080c, 0x9ff3, 0x08d8, 0x0005, 0x7098, + 0x908a, 0x001d, 0x1a0c, 0x0dd5, 0x000b, 0x0005, 0x56e8, 0x56fb, + 0x5724, 0x5744, 0x576a, 0x5799, 0x57bf, 0x57f7, 0x581d, 0x584b, + 0x5886, 0x58be, 0x58dc, 0x5907, 0x5929, 0x5944, 0x594e, 0x5982, + 0x59a8, 0x59d7, 0x59fd, 0x5a35, 0x5a79, 0x5ab6, 0x5ad7, 0x5b30, + 0x5b52, 0x5b80, 0x5b80, 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, + 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, + 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, + 0x6043, 0x0002, 0x709b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x5c61, + 0x080c, 0x831a, 0x0005, 0x00f6, 0x7090, 0x9086, 0x0014, 0x1510, + 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5dd2, 0x2079, 0x0260, + 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, + 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x2011, + 0x5c61, 0x080c, 0x8285, 0x709b, 0x0010, 0x080c, 0x594e, 0x0010, + 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0003, 0x6043, + 0x0004, 0x2011, 0x5c61, 0x080c, 0x8285, 0x080c, 0x5d56, 0x2079, + 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, + 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x5739, 0x60c3, 0x0014, + 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, + 0x2011, 0x5c61, 0x080c, 0x8285, 0x9086, 0x0014, 0x11b8, 0x080c, + 0x5dd2, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, + 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, + 0x70c7, 0x0001, 0x709b, 0x0004, 0x0029, 0x0010, 0x080c, 0x5dae, + 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0005, 0x080c, 0x5d56, 0x2079, + 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5dd2, 0x080c, + 0x5db5, 0x1170, 0x7084, 0x9005, 0x1158, 0x715c, 0x9186, 0xffff, + 0x0138, 0x2011, 0x0008, 0x080c, 0x5c0e, 0x0168, 0x080c, 0x5d8b, + 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, + 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5c8b, 0x00fe, + 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5c61, 0x080c, + 0x8285, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5dd2, 0x2079, 0x0260, + 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, + 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, + 0x0006, 0x0029, 0x0010, 0x080c, 0x5dae, 0x00fe, 0x0005, 0x00f6, + 0x709b, 0x0007, 0x080c, 0x5d56, 0x2079, 0x0240, 0x7833, 0x1104, + 0x7837, 0x0000, 0x080c, 0x5dd2, 0x080c, 0x5db5, 0x11b8, 0x7084, + 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, 0x0180, 0x9180, 0x31d0, + 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5c0e, + 0x0180, 0x080c, 0x4dd8, 0x0110, 0x080c, 0x2759, 0x20a9, 0x0008, + 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, + 0x4003, 0x60c3, 0x0014, 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6, + 0x7090, 0x9005, 0x0500, 0x2011, 0x5c61, 0x080c, 0x8285, 0x9086, + 0x0014, 0x11b8, 0x080c, 0x5dd2, 0x2079, 0x0260, 0x7a30, 0x9296, + 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, + 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0008, 0x0029, + 0x0010, 0x080c, 0x5dae, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0009, + 0x080c, 0x5d56, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, + 0x080c, 0x5db5, 0x1150, 0x7084, 0x9005, 0x1138, 0x080c, 0x5b81, + 0x1188, 0x9085, 0x0001, 0x080c, 0x2759, 0x20a9, 0x0008, 0x080c, + 0x5dd2, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, + 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5c8b, 0x0010, 0x080c, + 0x56db, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x05a8, 0x2011, + 0x5c61, 0x080c, 0x8285, 0x9086, 0x0014, 0x1560, 0x080c, 0x5dd2, + 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, 0x9084, + 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, + 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x000a, 0x00b1, + 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, + 0x1110, 0x70c7, 0x0001, 0x7097, 0x0000, 0x709b, 0x000e, 0x080c, + 0x5929, 0x0010, 0x080c, 0x5dae, 0x00fe, 0x0005, 0x00f6, 0x709b, + 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, + 0x2019, 0xffff, 0x4304, 0x080c, 0x5d56, 0x2079, 0x0240, 0x7833, + 0x1106, 0x7837, 0x0000, 0x080c, 0x5db5, 0x0118, 0x2013, 0x0000, + 0x0020, 0x7060, 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, + 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, + 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x58ab, + 0x60c3, 0x0084, 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6, 0x7090, + 0x9005, 0x01c0, 0x2011, 0x5c61, 0x080c, 0x8285, 0x9086, 0x0084, + 0x1178, 0x080c, 0x5dd2, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, + 0x1138, 0x7834, 0x9005, 0x1120, 0x709b, 0x000c, 0x0029, 0x0010, + 0x080c, 0x5dae, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x000d, 0x080c, + 0x5d56, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, 0x080c, + 0x5dd2, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, 0x220e, + 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, + 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, + 0x58ef, 0x60c3, 0x0084, 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6, + 0x7090, 0x9005, 0x01e0, 0x2011, 0x5c61, 0x080c, 0x8285, 0x9086, + 0x0084, 0x1198, 0x080c, 0x5dd2, 0x2079, 0x0260, 0x7a30, 0x9296, + 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7097, 0x0001, 0x080c, + 0x5d28, 0x709b, 0x000e, 0x0029, 0x0010, 0x080c, 0x5dae, 0x00fe, + 0x0005, 0x918d, 0x0001, 0x080c, 0x5dfd, 0x709b, 0x000f, 0x7093, + 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, + 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, + 0x5c61, 0x080c, 0x8279, 0x0005, 0x7090, 0x9005, 0x0130, 0x2011, + 0x5c61, 0x080c, 0x8285, 0x709b, 0x0000, 0x0005, 0x709b, 0x0011, + 0x080c, 0xa82b, 0x080c, 0x5dd2, 0x20e1, 0x0000, 0x2099, 0x0260, + 0x20e9, 0x0000, 0x20a1, 0x0240, 0x7490, 0x9480, 0x0018, 0x9080, + 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x5db5, + 0x11a0, 0x717c, 0x81ff, 0x0188, 0x900e, 0x7080, 0x9084, 0x00ff, + 0x0160, 0x080c, 0x26f0, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, + 0x0120, 0x2011, 0x0008, 0x080c, 0x5c0e, 0x60c3, 0x0014, 0x080c, + 0x5c8b, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5c61, + 0x080c, 0x8285, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5dd2, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, - 0x7a38, 0xd2fc, 0x0128, 0x70bc, 0x9005, 0x1110, 0x70bf, 0x0001, - 0x7093, 0x0006, 0x0029, 0x0010, 0x080c, 0x59d7, 0x00fe, 0x0005, - 0x00f6, 0x7093, 0x0007, 0x080c, 0x597f, 0x2079, 0x0240, 0x7833, - 0x1104, 0x7837, 0x0000, 0x080c, 0x59fb, 0x080c, 0x59de, 0x11b8, - 0x707c, 0x9005, 0x11a0, 0x715c, 0x9186, 0xffff, 0x0180, 0x9180, - 0x2f92, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, - 0x5837, 0x0180, 0x080c, 0x4a34, 0x0110, 0x080c, 0x253f, 0x20a9, - 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, - 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x58b4, 0x00fe, 0x0005, - 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011, 0x588a, 0x080c, 0x7c4a, - 0x9086, 0x0014, 0x11b8, 0x080c, 0x59fb, 0x2079, 0x0260, 0x7a30, - 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, - 0x0128, 0x70bc, 0x9005, 0x1110, 0x70bf, 0x0001, 0x7093, 0x0008, - 0x0029, 0x0010, 0x080c, 0x59d7, 0x00fe, 0x0005, 0x00f6, 0x7093, - 0x0009, 0x080c, 0x597f, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, - 0x0100, 0x080c, 0x59de, 0x1150, 0x707c, 0x9005, 0x1138, 0x080c, - 0x57aa, 0x1188, 0x9085, 0x0001, 0x080c, 0x253f, 0x20a9, 0x0008, - 0x080c, 0x59fb, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, - 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x58b4, 0x0010, - 0x080c, 0x5304, 0x00fe, 0x0005, 0x00f6, 0x7088, 0x9005, 0x05a8, - 0x2011, 0x588a, 0x080c, 0x7c4a, 0x9086, 0x0014, 0x1560, 0x080c, - 0x59fb, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, - 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, - 0x0128, 0x70bc, 0x9005, 0x1110, 0x70bf, 0x0001, 0x7093, 0x000a, - 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70bc, - 0x9005, 0x1110, 0x70bf, 0x0001, 0x708f, 0x0000, 0x7093, 0x000e, - 0x080c, 0x5552, 0x0010, 0x080c, 0x59d7, 0x00fe, 0x0005, 0x00f6, - 0x7093, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, - 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x597f, 0x2079, 0x0240, - 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x59de, 0x0118, 0x2013, - 0x0000, 0x0020, 0x7058, 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, - 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, 0x8108, 0x9186, - 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, - 0x54d4, 0x60c3, 0x0084, 0x080c, 0x58b4, 0x00fe, 0x0005, 0x00f6, - 0x7088, 0x9005, 0x01c0, 0x2011, 0x588a, 0x080c, 0x7c4a, 0x9086, - 0x0084, 0x1178, 0x080c, 0x59fb, 0x2079, 0x0260, 0x7a30, 0x9296, - 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7093, 0x000c, 0x0029, - 0x0010, 0x080c, 0x59d7, 0x00fe, 0x0005, 0x00f6, 0x7093, 0x000d, - 0x080c, 0x597f, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, - 0x080c, 0x59fb, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, - 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, - 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, - 0x1f04, 0x5518, 0x60c3, 0x0084, 0x080c, 0x58b4, 0x00fe, 0x0005, - 0x00f6, 0x7088, 0x9005, 0x01e0, 0x2011, 0x588a, 0x080c, 0x7c4a, - 0x9086, 0x0084, 0x1198, 0x080c, 0x59fb, 0x2079, 0x0260, 0x7a30, - 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x708f, 0x0001, - 0x080c, 0x5951, 0x7093, 0x000e, 0x0029, 0x0010, 0x080c, 0x59d7, - 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5a26, 0x7093, 0x000f, - 0x708b, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, - 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, - 0x2011, 0x588a, 0x080c, 0x7c3e, 0x0005, 0x7088, 0x9005, 0x0130, - 0x2011, 0x588a, 0x080c, 0x7c4a, 0x7093, 0x0000, 0x0005, 0x7093, - 0x0011, 0x080c, 0x97ce, 0x080c, 0x59fb, 0x20e1, 0x0000, 0x2099, - 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x7488, 0x9480, 0x0018, - 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, - 0x59de, 0x11a0, 0x7174, 0x81ff, 0x0188, 0x900e, 0x7078, 0x9084, - 0x00ff, 0x0160, 0x080c, 0x24d6, 0x9186, 0x007e, 0x0138, 0x9186, - 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5837, 0x60c3, 0x0014, - 0x080c, 0x58b4, 0x0005, 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011, - 0x588a, 0x080c, 0x7c4a, 0x9086, 0x0014, 0x11b8, 0x080c, 0x59fb, - 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, - 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70bc, 0x9005, 0x1110, 0x70bf, - 0x0001, 0x7093, 0x0012, 0x0029, 0x0010, 0x708b, 0x0000, 0x00fe, - 0x0005, 0x00f6, 0x7093, 0x0013, 0x080c, 0x598d, 0x2079, 0x0240, - 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x59fb, 0x080c, 0x59de, - 0x1170, 0x707c, 0x9005, 0x1158, 0x7154, 0x9186, 0xffff, 0x0138, - 0x2011, 0x0008, 0x080c, 0x5837, 0x0168, 0x080c, 0x59b4, 0x20a9, - 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, - 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x58b4, 0x00fe, 0x0005, - 0x00f6, 0x7088, 0x9005, 0x0500, 0x2011, 0x588a, 0x080c, 0x7c4a, - 0x9086, 0x0014, 0x11b8, 0x080c, 0x59fb, 0x2079, 0x0260, 0x7a30, - 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, - 0x0128, 0x70bc, 0x9005, 0x1110, 0x70bf, 0x0001, 0x7093, 0x0014, - 0x0029, 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7093, - 0x0015, 0x080c, 0x598d, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, - 0x0000, 0x080c, 0x59fb, 0x080c, 0x59de, 0x11b8, 0x707c, 0x9005, - 0x11a0, 0x715c, 0x9186, 0xffff, 0x0180, 0x9180, 0x2f92, 0x200d, - 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5837, 0x0180, - 0x080c, 0x4a34, 0x0110, 0x080c, 0x253f, 0x20a9, 0x0008, 0x20e1, - 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, - 0x60c3, 0x0014, 0x080c, 0x58b4, 0x00fe, 0x0005, 0x00f6, 0x7088, - 0x9005, 0x05f0, 0x2011, 0x588a, 0x080c, 0x7c4a, 0x9086, 0x0014, - 0x15a8, 0x080c, 0x59fb, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, - 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, - 0x9085, 0x0001, 0x080c, 0x5a26, 0x7a38, 0xd2fc, 0x0128, 0x70bc, - 0x9005, 0x1110, 0x70bf, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, - 0xd2fc, 0x0128, 0x70bc, 0x9005, 0x1110, 0x70bf, 0x0001, 0x9085, - 0x0001, 0x080c, 0x5a26, 0x708f, 0x0000, 0x7a38, 0xd2f4, 0x0110, - 0x70d7, 0x0008, 0x7093, 0x0016, 0x0029, 0x0010, 0x708b, 0x0000, - 0x00fe, 0x0005, 0x080c, 0x97ce, 0x080c, 0x59fb, 0x20e1, 0x0000, - 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, - 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, - 0x2012, 0x2011, 0x026e, 0x7093, 0x0017, 0x080c, 0x59de, 0x1150, - 0x707c, 0x9005, 0x1138, 0x080c, 0x57aa, 0x1188, 0x9085, 0x0001, - 0x080c, 0x253f, 0x20a9, 0x0008, 0x080c, 0x59fb, 0x20e1, 0x0000, + 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, + 0x709b, 0x0012, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, + 0x00f6, 0x709b, 0x0013, 0x080c, 0x5d64, 0x2079, 0x0240, 0x7833, + 0x1103, 0x7837, 0x0000, 0x080c, 0x5dd2, 0x080c, 0x5db5, 0x1170, + 0x7084, 0x9005, 0x1158, 0x715c, 0x9186, 0xffff, 0x0138, 0x2011, + 0x0008, 0x080c, 0x5c0e, 0x0168, 0x080c, 0x5d8b, 0x20a9, 0x0008, + 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, + 0x4003, 0x60c3, 0x0014, 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6, + 0x7090, 0x9005, 0x0500, 0x2011, 0x5c61, 0x080c, 0x8285, 0x9086, + 0x0014, 0x11b8, 0x080c, 0x5dd2, 0x2079, 0x0260, 0x7a30, 0x9296, + 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, + 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0014, 0x0029, + 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0015, + 0x080c, 0x5d64, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, + 0x080c, 0x5dd2, 0x080c, 0x5db5, 0x11b8, 0x7084, 0x9005, 0x11a0, + 0x7164, 0x9186, 0xffff, 0x0180, 0x9180, 0x31d0, 0x200d, 0x918c, + 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5c0e, 0x0180, 0x080c, + 0x4dd8, 0x0110, 0x080c, 0x2759, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, - 0x0014, 0x080c, 0x58b4, 0x0010, 0x080c, 0x5304, 0x0005, 0x00f6, - 0x7088, 0x9005, 0x01d8, 0x2011, 0x588a, 0x080c, 0x7c4a, 0x9086, - 0x0084, 0x1190, 0x080c, 0x59fb, 0x2079, 0x0260, 0x7a30, 0x9296, - 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, 0x5a26, - 0x7093, 0x0018, 0x0029, 0x0010, 0x708b, 0x0000, 0x00fe, 0x0005, - 0x00f6, 0x7093, 0x0019, 0x080c, 0x598d, 0x2079, 0x0240, 0x7833, - 0x1106, 0x7837, 0x0000, 0x080c, 0x59fb, 0x2009, 0x026e, 0x2039, - 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, - 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, 0x5713, - 0x2039, 0x1c0e, 0x080c, 0x59de, 0x11e8, 0x2728, 0x2514, 0x8207, - 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, - 0x202a, 0x7058, 0x2310, 0x8214, 0x92a0, 0x1c0e, 0x2414, 0x938c, - 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007, - 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e, 0x8738, - 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, - 0x0240, 0x1f04, 0x5746, 0x60c3, 0x0084, 0x080c, 0x58b4, 0x00fe, - 0x0005, 0x00f6, 0x7088, 0x9005, 0x01e0, 0x2011, 0x588a, 0x080c, - 0x7c4a, 0x9086, 0x0084, 0x1198, 0x080c, 0x59fb, 0x2079, 0x0260, - 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x708f, - 0x0001, 0x080c, 0x5951, 0x7093, 0x001a, 0x0029, 0x0010, 0x708b, - 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5a26, 0x7093, - 0x001b, 0x080c, 0x97ce, 0x080c, 0x59fb, 0x2011, 0x0260, 0x2009, - 0x0240, 0x7488, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, - 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, - 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, - 0x2011, 0x0260, 0x1f04, 0x5792, 0x60c3, 0x0084, 0x080c, 0x58b4, - 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1854, 0x252c, 0x20a9, - 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, 0x080c, 0x59fb, - 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, - 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, - 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, - 0x57c4, 0x0804, 0x5833, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, - 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5833, 0x918d, - 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, - 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, - 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x57ea, 0x04d8, - 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x57fc, 0x2328, - 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, - 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x580b, 0x7556, - 0x95c8, 0x2f92, 0x292d, 0x95ac, 0x00ff, 0x757a, 0x6532, 0x6536, - 0x0016, 0x2508, 0x080c, 0x251f, 0x001e, 0x60e7, 0x0000, 0x65ea, - 0x2018, 0x2304, 0x9405, 0x201a, 0x707f, 0x0001, 0x20e9, 0x0000, - 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, - 0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e, 0x0005, 0x0156, - 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, - 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, - 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, 0x2001, 0x0007, - 0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, - 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, - 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, - 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x7156, 0x91a0, 0x2f92, - 0x242d, 0x95ac, 0x00ff, 0x757a, 0x6532, 0x6536, 0x0016, 0x2508, - 0x080c, 0x251f, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x707f, 0x0001, - 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7083, 0x0000, - 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, - 0x080c, 0x5940, 0x080c, 0x8fbb, 0x7004, 0x9084, 0x4000, 0x0110, - 0x080c, 0x2997, 0x0126, 0x2091, 0x8000, 0x2071, 0x1824, 0x2073, - 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x599d, - 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, - 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, - 0x283d, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, - 0x19c0, 0x2013, 0x0000, 0x708b, 0x0000, 0x012e, 0x60a3, 0x0056, - 0x60a7, 0x9575, 0x080c, 0x8fb2, 0x6144, 0xd184, 0x0120, 0x7190, - 0x918d, 0x2000, 0x0018, 0x7184, 0x918d, 0x1000, 0x2011, 0x1968, - 0x2112, 0x2009, 0x07d0, 0x2011, 0x588a, 0x080c, 0x7cd9, 0x0005, - 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9947, - 0x2009, 0x00f7, 0x080c, 0x599d, 0x2061, 0x19c9, 0x900e, 0x611a, - 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001, 0x2061, - 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1968, 0x200b, - 0x0000, 0x2009, 0x002d, 0x2011, 0x590c, 0x080c, 0x7c3e, 0x012e, - 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, - 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x8fbb, 0x2071, 0x0140, - 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2997, 0x080c, 0x6c5b, - 0x0188, 0x080c, 0x6c76, 0x1170, 0x080c, 0x6f34, 0x0016, 0x080c, - 0x25ee, 0x2001, 0x193e, 0x2102, 0x001e, 0x080c, 0x6f2f, 0x080c, - 0x6b8a, 0x0050, 0x2009, 0x0001, 0x080c, 0x28d6, 0x2001, 0x0001, - 0x080c, 0x247f, 0x080c, 0x58e0, 0x012e, 0x000e, 0x00ee, 0x0005, - 0x2001, 0x180d, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011, - 0x8017, 0x2001, 0x1968, 0x201c, 0x080c, 0x4672, 0x003e, 0x002e, - 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x080c, - 0x59fb, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020, - 0x080c, 0x59f5, 0x2099, 0x0260, 0x20a1, 0x1c92, 0x0051, 0x20a9, - 0x000e, 0x080c, 0x59f8, 0x2099, 0x0260, 0x20a1, 0x1cb2, 0x0009, - 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, 0x2012, - 0x8108, 0x8210, 0x1f04, 0x5975, 0x002e, 0x001e, 0x0005, 0x080c, - 0x97ce, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, - 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0x97ce, 0x080c, - 0x59fb, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, - 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061, - 0x0100, 0x810f, 0x2001, 0x1832, 0x2004, 0x9005, 0x1138, 0x2001, - 0x1816, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7, - 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, 0x62a0, - 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xcfe6, 0x2001, - 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, 0x080c, - 0x2dfb, 0x080c, 0xbcec, 0x0140, 0x0036, 0x2019, 0xffff, 0x2021, - 0x0007, 0x080c, 0x4829, 0x003e, 0x004e, 0x001e, 0x0005, 0x080c, - 0x58e0, 0x7093, 0x0000, 0x708b, 0x0000, 0x0005, 0x0006, 0x2001, - 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016, - 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d, 0x0006, - 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001, 0x0020, - 0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d, - 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9, - 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004, 0x2079, 0x1c00, - 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138, - 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe, - 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001, 0x1975, - 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, 0x0156, - 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04, - 0x5a35, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, - 0x2069, 0x1853, 0x9006, 0xb802, 0xb8be, 0xb807, 0x0707, 0xb80a, - 0xb80e, 0xb812, 0x9198, 0x2f92, 0x231d, 0x939c, 0x00ff, 0xbb16, - 0x0016, 0x0026, 0xb8b2, 0x080c, 0x9940, 0x1120, 0x9192, 0x007e, - 0x1208, 0xbbb2, 0x20a9, 0x0004, 0xb8b4, 0x20e8, 0xb9b8, 0x9198, - 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a, - 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb84e, 0xb852, - 0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, - 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, - 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110, - 0x080c, 0x1007, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810, - 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e, - 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000, - 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x5b0b, - 0x9182, 0x0800, 0x1a04, 0x5b0f, 0x2001, 0x180c, 0x2004, 0x9084, - 0x0003, 0x1904, 0x5b15, 0x9188, 0x1000, 0x2104, 0x905d, 0x0518, - 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4, 0x900d, - 0x1904, 0x5b27, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, 0xb852, - 0xb84e, 0x080c, 0x801d, 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, - 0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, - 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, - 0x0006, 0x1290, 0x080c, 0x9940, 0x1160, 0xb8a0, 0x9084, 0xff80, - 0x1140, 0xb900, 0xd1fc, 0x0990, 0x2001, 0x0029, 0x2009, 0x1000, - 0x0408, 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, - 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, - 0x0040, 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, - 0x0048, 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, - 0x0029, 0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c, 0x2004, - 0xd084, 0x19d0, 0x9188, 0x1000, 0x2104, 0x905d, 0x09a8, 0x080c, - 0x62a4, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x5abe, 0x080c, - 0x611a, 0x0904, 0x5ad7, 0x0804, 0x5ac2, 0x00b6, 0x00e6, 0x0126, - 0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x5ba8, 0x9188, - 0x1000, 0x2104, 0x905d, 0x0904, 0x5b80, 0xb8a0, 0x9086, 0x007f, - 0x0178, 0x080c, 0x62ac, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, - 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x62a4, 0x1598, - 0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, - 0x2010, 0x080c, 0xb5e9, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, - 0x5baa, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, - 0x5baa, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, - 0x9980, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, - 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0x9a50, 0x9006, 0x0458, - 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0x9940, - 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, - 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, - 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, - 0xd184, 0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, - 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, - 0x002c, 0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0, - 0x9005, 0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005, - 0x1518, 0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800, - 0x9182, 0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98, - 0xab94, 0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118, + 0x0014, 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, + 0x05f0, 0x2011, 0x5c61, 0x080c, 0x8285, 0x9086, 0x0014, 0x15a8, + 0x080c, 0x5dd2, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, + 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, 0x9085, + 0x0001, 0x080c, 0x5dfd, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, + 0x1110, 0x70c7, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, + 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x9085, 0x0001, + 0x080c, 0x5dfd, 0x7097, 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70df, + 0x0008, 0x709b, 0x0016, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, + 0x0005, 0x080c, 0xa82b, 0x080c, 0x5dd2, 0x20e1, 0x0000, 0x2099, + 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, + 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, 0x2012, + 0x2011, 0x026e, 0x709b, 0x0017, 0x080c, 0x5db5, 0x1150, 0x7084, + 0x9005, 0x1138, 0x080c, 0x5b81, 0x1188, 0x9085, 0x0001, 0x080c, + 0x2759, 0x20a9, 0x0008, 0x080c, 0x5dd2, 0x20e1, 0x0000, 0x2099, + 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, + 0x080c, 0x5c8b, 0x0010, 0x080c, 0x56db, 0x0005, 0x00f6, 0x7090, + 0x9005, 0x01d8, 0x2011, 0x5c61, 0x080c, 0x8285, 0x9086, 0x0084, + 0x1190, 0x080c, 0x5dd2, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, + 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, 0x5dfd, 0x709b, + 0x0018, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, + 0x709b, 0x0019, 0x080c, 0x5d64, 0x2079, 0x0240, 0x7833, 0x1106, + 0x7837, 0x0000, 0x080c, 0x5dd2, 0x2009, 0x026e, 0x2039, 0x1c0e, + 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, 0x1128, + 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, 0x5aea, 0x2039, + 0x1c0e, 0x080c, 0x5db5, 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, + 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, + 0x7060, 0x2310, 0x8214, 0x92a0, 0x1c0e, 0x2414, 0x938c, 0x0001, + 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007, 0x9215, + 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e, 0x8738, 0x8108, + 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, + 0x1f04, 0x5b1d, 0x60c3, 0x0084, 0x080c, 0x5c8b, 0x00fe, 0x0005, + 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, 0x5c61, 0x080c, 0x8285, + 0x9086, 0x0084, 0x1198, 0x080c, 0x5dd2, 0x2079, 0x0260, 0x7a30, + 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7097, 0x0001, + 0x080c, 0x5d28, 0x709b, 0x001a, 0x0029, 0x0010, 0x7093, 0x0000, + 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5dfd, 0x709b, 0x001b, + 0x080c, 0xa82b, 0x080c, 0x5dd2, 0x2011, 0x0260, 0x2009, 0x0240, + 0x7490, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, + 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, + 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, + 0x0260, 0x1f04, 0x5b69, 0x60c3, 0x0084, 0x080c, 0x5c8b, 0x0005, + 0x0005, 0x0086, 0x0096, 0x2029, 0x1848, 0x252c, 0x20a9, 0x0008, + 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5dd2, 0x20e1, + 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, + 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, + 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x5b9b, + 0x0804, 0x5c0a, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, + 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5c0a, 0x918d, 0xc000, + 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, + 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, + 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5bc1, 0x04d8, 0x23a8, + 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5bd3, 0x2328, 0x8529, + 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, + 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5be2, 0x755e, 0x95c8, + 0x31d0, 0x292d, 0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536, 0x0016, + 0x2508, 0x080c, 0x2739, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, + 0x2304, 0x9405, 0x201a, 0x7087, 0x0001, 0x20e9, 0x0000, 0x20a1, + 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, 0x9085, + 0x0001, 0x0008, 0x9006, 0x009e, 0x008e, 0x0005, 0x0156, 0x01c6, + 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e, + 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, 0x013e, + 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, 0x2001, 0x0007, 0x939a, + 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, + 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, + 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, 0x2504, + 0x942c, 0x11b8, 0x9405, 0x203a, 0x715e, 0x91a0, 0x31d0, 0x242d, + 0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, + 0x2739, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7087, 0x0001, 0x9084, + 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708b, 0x0000, 0x00ee, + 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, + 0x5d17, 0x080c, 0x9ffc, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, + 0x2bb1, 0x0126, 0x2091, 0x8000, 0x2071, 0x1826, 0x2073, 0x0000, + 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x5d74, 0x001e, + 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, + 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x2a57, + 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19ef, + 0x2013, 0x0000, 0x7093, 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, + 0x9575, 0x080c, 0x9ff3, 0x6144, 0xd184, 0x0120, 0x7198, 0x918d, + 0x2000, 0x0018, 0x718c, 0x918d, 0x1000, 0x2011, 0x1997, 0x2112, + 0x2009, 0x07d0, 0x2011, 0x5c61, 0x080c, 0x831a, 0x0005, 0x0016, + 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xaadc, 0x2009, + 0x00f7, 0x080c, 0x5d74, 0x2061, 0x19f8, 0x900e, 0x611a, 0x611e, + 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001, 0x2061, 0x0100, + 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1997, 0x200b, 0x0000, + 0x2009, 0x002d, 0x2011, 0x5ce3, 0x080c, 0x8279, 0x012e, 0x00ce, + 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, + 0x0471, 0x2071, 0x0100, 0x080c, 0x9ffc, 0x2071, 0x0140, 0x7004, + 0x9084, 0x4000, 0x0110, 0x080c, 0x2bb1, 0x080c, 0x7185, 0x0188, + 0x080c, 0x71a0, 0x1170, 0x080c, 0x746f, 0x0016, 0x080c, 0x2808, + 0x2001, 0x196d, 0x2102, 0x001e, 0x080c, 0x746a, 0x080c, 0x70af, + 0x0050, 0x2009, 0x0001, 0x080c, 0x2af0, 0x2001, 0x0001, 0x080c, + 0x269c, 0x080c, 0x5cb7, 0x012e, 0x000e, 0x00ee, 0x0005, 0x2001, + 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011, 0x8017, + 0x2001, 0x1997, 0x201c, 0x080c, 0x48fb, 0x003e, 0x002e, 0x0005, + 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x080c, 0x5dd2, + 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020, 0x080c, + 0x5dcc, 0x2099, 0x0260, 0x20a1, 0x1c92, 0x0051, 0x20a9, 0x000e, + 0x080c, 0x5dcf, 0x2099, 0x0260, 0x20a1, 0x1cb2, 0x0009, 0x0005, + 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, + 0x8210, 0x1f04, 0x5d4c, 0x002e, 0x001e, 0x0005, 0x080c, 0xa82b, + 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, + 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0xa82b, 0x080c, 0x5dd2, + 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, + 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, + 0x810f, 0x2001, 0x1834, 0x2004, 0x9005, 0x1138, 0x2001, 0x1818, + 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7, 0x604a, + 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, 0x6733, 0x0158, + 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe280, 0x2001, 0x180c, + 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, 0x080c, 0x3039, + 0x080c, 0xcf18, 0x0140, 0x0036, 0x2019, 0xffff, 0x2021, 0x0007, + 0x080c, 0x4ab2, 0x003e, 0x004e, 0x001e, 0x0005, 0x080c, 0x5cb7, + 0x709b, 0x0000, 0x7093, 0x0000, 0x0005, 0x0006, 0x2001, 0x180c, + 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, + 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d, 0x0006, 0x2102, + 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001, 0x0020, 0x2009, + 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d, 0x6916, + 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9, 0x0080, + 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004, 0x2079, 0x1c00, 0x7803, + 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7823, + 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe, 0x0005, + 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001, 0x19a4, 0x0118, + 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, 0x0156, 0x20a9, + 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04, 0x5e0c, + 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, + 0x1847, 0x9006, 0xb802, 0xb8ce, 0xb807, 0x0707, 0xb80a, 0xb80e, + 0xb812, 0x9198, 0x31d0, 0x231d, 0x939c, 0x00ff, 0xbb16, 0x0016, + 0x0026, 0xb8c2, 0x080c, 0xaad5, 0x1120, 0x9192, 0x007e, 0x1208, + 0xbbc2, 0x20a9, 0x0004, 0xb8c4, 0x20e8, 0xb9c8, 0x9198, 0x0006, + 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a, 0x23a0, + 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb84e, 0xb852, 0xb856, + 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, 0xb872, + 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, 0xb89a, + 0xb89e, 0xb8be, 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110, 0x080c, + 0x1032, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810, 0xb83a, + 0x680c, 0xb846, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0198, 0x00c6, + 0x2060, 0x9c82, 0x1cd0, 0x0a0c, 0x0dd5, 0x2001, 0x181a, 0x2004, + 0x9c02, 0x1a0c, 0x0dd5, 0x080c, 0x8710, 0x00ce, 0x090c, 0x8ab4, + 0xb8af, 0x0000, 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e, 0x013e, + 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000, 0xa974, + 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x5efa, 0x9182, + 0x0800, 0x1a04, 0x5efe, 0x2001, 0x180c, 0x2004, 0x9084, 0x0003, + 0x1904, 0x5f04, 0x9188, 0x1000, 0x2104, 0x905d, 0x0518, 0xb804, + 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4, 0x900d, 0x1904, + 0x5f16, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, 0xb852, 0xb84e, + 0x080c, 0x8e9c, 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, 0x2900, + 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, 0x0005, + 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006, + 0x1290, 0x080c, 0xaad5, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, + 0xb900, 0xd1fc, 0x0990, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408, + 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, + 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, + 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048, + 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, + 0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd084, + 0x19d0, 0x9188, 0x1000, 0x2104, 0x905d, 0x09a8, 0x080c, 0x6737, + 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x5ead, 0x080c, 0x6569, + 0x0904, 0x5ec6, 0x0804, 0x5eb1, 0x00b6, 0x00e6, 0x0126, 0x2091, + 0x8000, 0xa874, 0x908e, 0x00ff, 0x1120, 0x2001, 0x196b, 0x205c, + 0x0060, 0xa974, 0x9182, 0x0800, 0x1690, 0x9188, 0x1000, 0x2104, + 0x905d, 0x01d0, 0x080c, 0x66d7, 0x11d0, 0x080c, 0xab15, 0x0570, + 0x2b00, 0x6012, 0x2900, 0x6016, 0x6023, 0x0009, 0x600b, 0x0000, + 0xa874, 0x908e, 0x00ff, 0x1110, 0x600b, 0x8000, 0x2009, 0x0043, + 0x080c, 0xabe6, 0x9006, 0x00b0, 0x2001, 0x0028, 0x0090, 0x2009, + 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, + 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x0010, 0x2001, + 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c, + 0x0cc0, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa974, 0x9182, + 0x0800, 0x1a04, 0x5fe4, 0x9188, 0x1000, 0x2104, 0x905d, 0x0904, + 0x5fbc, 0xb8a0, 0x9086, 0x007f, 0x0178, 0x080c, 0x673f, 0x0160, + 0xa994, 0x81ff, 0x0130, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, + 0x0118, 0x080c, 0x6737, 0x1598, 0xa87c, 0xd0fc, 0x01e0, 0xa894, + 0x9005, 0x01c8, 0x2060, 0x0026, 0x2010, 0x080c, 0xc813, 0x002e, + 0x1120, 0x2001, 0x0008, 0x0804, 0x5fe6, 0x6020, 0x9086, 0x000a, + 0x0120, 0x2001, 0x0008, 0x0804, 0x5fe6, 0x601a, 0x6003, 0x0008, + 0x2900, 0x6016, 0x0058, 0x080c, 0xab15, 0x05e8, 0x2b00, 0x6012, + 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0x2009, 0x0003, + 0x080c, 0xabe6, 0x9006, 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, + 0x0006, 0x1290, 0x080c, 0xaad5, 0x1160, 0xb8a0, 0x9084, 0xff80, + 0x1140, 0xb900, 0xd1fc, 0x0900, 0x2001, 0x0029, 0x2009, 0x1000, + 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, + 0x0118, 0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001, 0x0004, + 0x0028, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0x9005, 0x012e, + 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c, 0x0cc0, 0x00f6, 0x00b6, + 0x0126, 0x2091, 0x8000, 0xa8e0, 0x9005, 0x1550, 0xa8dc, 0x9082, + 0x0101, 0x1630, 0xa8c8, 0x9005, 0x1518, 0xa8c4, 0x9082, 0x0101, + 0x12f8, 0xa974, 0x2079, 0x1800, 0x9182, 0x0800, 0x12e8, 0x7830, + 0x9084, 0x0003, 0x1130, 0xaa98, 0xab94, 0xa878, 0x9084, 0x0007, + 0x00ea, 0x7930, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, + 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0038, + 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9006, + 0x0008, 0x9005, 0x012e, 0x00be, 0x00fe, 0x0005, 0x607b, 0x6036, + 0x604d, 0x607b, 0x607b, 0x607b, 0x607b, 0x607b, 0x2100, 0x9082, + 0x007e, 0x1278, 0x080c, 0x636c, 0x0148, 0x9046, 0xb810, 0x9306, + 0x1904, 0x6083, 0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, + 0x0010, 0x080c, 0x47ae, 0x0150, 0x04b0, 0x080c, 0x63cd, 0x1598, + 0xb810, 0x9306, 0x1580, 0xb814, 0x9206, 0x1568, 0x080c, 0xab15, + 0x0530, 0x2b00, 0x6012, 0x080c, 0xcc93, 0x2900, 0x6016, 0x600b, + 0xffff, 0x6023, 0x000a, 0xa878, 0x9086, 0x0001, 0x1170, 0x080c, + 0x306e, 0x9006, 0x080c, 0x6309, 0x2001, 0x0002, 0x080c, 0x631d, + 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, + 0xabe6, 0x9006, 0x0068, 0x2001, 0x0001, 0x900e, 0x0038, 0x2001, + 0x002c, 0x900e, 0x0018, 0x2001, 0x0028, 0x900e, 0x9005, 0x0000, + 0x012e, 0x00be, 0x00fe, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x0126, + 0x2091, 0x8000, 0xa894, 0x90c6, 0x0015, 0x0904, 0x6262, 0x90c6, + 0x0056, 0x0904, 0x6266, 0x90c6, 0x0066, 0x0904, 0x626a, 0x90c6, + 0x0071, 0x0904, 0x626e, 0x90c6, 0x0074, 0x0904, 0x6272, 0x90c6, + 0x007c, 0x0904, 0x6276, 0x90c6, 0x007e, 0x0904, 0x627a, 0x90c6, + 0x0037, 0x0904, 0x627e, 0x9016, 0x2079, 0x1800, 0xa974, 0x9186, + 0x00ff, 0x0904, 0x625d, 0x9182, 0x0800, 0x1a04, 0x625d, 0x080c, + 0x63cd, 0x1198, 0xb804, 0x9084, 0x00ff, 0x9082, 0x0006, 0x1268, + 0xa894, 0x90c6, 0x006f, 0x0148, 0x080c, 0xaad5, 0x1904, 0x6246, + 0xb8a0, 0x9084, 0xff80, 0x1904, 0x6246, 0xa894, 0x90c6, 0x006f, + 0x0158, 0x90c6, 0x005e, 0x0904, 0x61a6, 0x90c6, 0x0064, 0x0904, + 0x61cf, 0x2008, 0x0804, 0x6168, 0xa998, 0xa8b0, 0x2040, 0x080c, + 0xaad5, 0x1120, 0x9182, 0x007f, 0x0a04, 0x6168, 0x9186, 0x00ff, + 0x0904, 0x6168, 0x9182, 0x0800, 0x1a04, 0x6168, 0xaaa0, 0xab9c, + 0x787c, 0x9306, 0x1188, 0x7880, 0x0096, 0x924e, 0x1128, 0x2208, + 0x2310, 0x009e, 0x0804, 0x6168, 0x99cc, 0xff00, 0x009e, 0x1120, + 0x2208, 0x2310, 0x0804, 0x6168, 0x080c, 0x47ae, 0x0904, 0x6172, + 0x900e, 0x9016, 0x90c6, 0x4000, 0x15e0, 0x0006, 0x080c, 0x65ed, + 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x20a9, 0x0004, + 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0, + 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7d, 0x20a9, 0x0004, + 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c4, 0x20e0, + 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7d, 0xa8c4, 0xabc8, + 0x9305, 0xabcc, 0x9305, 0xabd0, 0x9305, 0xabd4, 0x9305, 0xabd8, + 0x9305, 0xabdc, 0x9305, 0xabe0, 0x9305, 0x9005, 0x0510, 0x000e, + 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x00a0, 0x90c6, 0x4008, + 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, 0x4009, 0x1108, 0x0050, + 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, 0x2009, 0x000a, 0x0010, + 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, 0x2001, 0x0030, 0x900e, + 0x0478, 0x000e, 0x080c, 0xab15, 0x1130, 0x2001, 0x4005, 0x2009, + 0x0003, 0x9016, 0x0c78, 0x2b00, 0x6012, 0x080c, 0xcc93, 0x2900, + 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108, 0xc0f5, 0xa86a, + 0x0126, 0x2091, 0x8000, 0x080c, 0x306e, 0x012e, 0x9006, 0x080c, + 0x6309, 0x2001, 0x0002, 0x080c, 0x631d, 0x2009, 0x0002, 0x080c, + 0xabe6, 0xa8b0, 0xd094, 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x9006, + 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x080c, 0x54cb, + 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0, 0x080c, 0x63cd, + 0x1904, 0x6163, 0x9186, 0x007f, 0x0130, 0x080c, 0x6737, 0x0118, + 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x1000, 0x1120, 0x009e, + 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806, 0x080c, 0xca04, + 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x616a, 0xa998, + 0xaeb0, 0x080c, 0x63cd, 0x1904, 0x6163, 0x0096, 0x080c, 0x1000, + 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x6223, 0x2900, 0x009e, + 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8, + 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, + 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xbbc8, 0x9398, 0x0006, + 0x2398, 0x080c, 0x0f7d, 0x009e, 0xa87b, 0x0000, 0xa883, 0x0000, + 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x54b7, 0xd0b4, 0x1118, + 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118, 0xa89b, 0x000c, + 0x00b0, 0x080c, 0x6737, 0x0118, 0xa89b, 0x0009, 0x0080, 0x080c, + 0x54cb, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c, 0xc9e7, 0x1904, + 0x619f, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x616a, 0xa87b, + 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, + 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, + 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x123a, 0x080c, + 0xb084, 0x1904, 0x619f, 0x2009, 0x0002, 0x08e8, 0x2001, 0x0028, + 0x900e, 0x0804, 0x61a0, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, - 0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, - 0x2001, 0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be, - 0x00fe, 0x0005, 0x5c3f, 0x5bfa, 0x5c11, 0x5c3f, 0x5c3f, 0x5c3f, - 0x5c3f, 0x5c3f, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x5f1e, - 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x5c47, 0xb814, 0x9206, - 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x452c, 0x0150, - 0x04b0, 0x080c, 0x5f7e, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, - 0x9206, 0x1568, 0x080c, 0x9980, 0x0530, 0x2b00, 0x6012, 0x080c, - 0xba69, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, - 0x9086, 0x0001, 0x1170, 0x080c, 0x2e30, 0x9006, 0x080c, 0x5ebb, - 0x2001, 0x0002, 0x080c, 0x5ecf, 0x2001, 0x0200, 0xb86e, 0xb893, - 0x0002, 0x2009, 0x0003, 0x080c, 0x9a50, 0x9006, 0x0068, 0x2001, - 0x0001, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, - 0x0028, 0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005, - 0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6, - 0x0015, 0x0904, 0x5e14, 0x90c6, 0x0056, 0x0904, 0x5e18, 0x90c6, - 0x0066, 0x0904, 0x5e1c, 0x90c6, 0x0071, 0x0904, 0x5e20, 0x90c6, - 0x0074, 0x0904, 0x5e24, 0x90c6, 0x007c, 0x0904, 0x5e28, 0x90c6, - 0x007e, 0x0904, 0x5e2c, 0x90c6, 0x0037, 0x0904, 0x5e30, 0x9016, - 0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x5e0f, 0x9182, - 0x0800, 0x1a04, 0x5e0f, 0x080c, 0x5f7e, 0x1198, 0xb804, 0x9084, - 0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, - 0x080c, 0x9940, 0x1904, 0x5df8, 0xb8a0, 0x9084, 0xff80, 0x1904, - 0x5df8, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, - 0x5d58, 0x90c6, 0x0064, 0x0904, 0x5d81, 0x2008, 0x0804, 0x5d1b, - 0xa998, 0xa8b0, 0x2040, 0x080c, 0x9940, 0x1120, 0x9182, 0x007f, - 0x0a04, 0x5d1b, 0x9186, 0x00ff, 0x0904, 0x5d1b, 0x9182, 0x0800, - 0x1a04, 0x5d1b, 0xaaa0, 0xab9c, 0x7874, 0x9306, 0x1188, 0x7878, - 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x5d1b, - 0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x5d1b, - 0x080c, 0x452c, 0x0904, 0x5d24, 0x900e, 0x9016, 0x90c6, 0x4000, - 0x1558, 0x0006, 0x080c, 0x619e, 0x1108, 0xc185, 0xb800, 0xd0bc, - 0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, - 0x0031, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, - 0x080c, 0x0f52, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, - 0x0035, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, - 0x080c, 0x0f52, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, - 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, - 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, - 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, - 0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0x9980, 0x1130, 0x2001, - 0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012, 0x080c, - 0xba69, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108, - 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2e30, 0x012e, - 0x9006, 0x080c, 0x5ebb, 0x2001, 0x0002, 0x080c, 0x5ecf, 0x2009, - 0x0002, 0x080c, 0x9a50, 0xa8b0, 0xd094, 0x0118, 0xb8bc, 0xc08d, - 0xb8be, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005, - 0x080c, 0x5127, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0, - 0x080c, 0x5f7e, 0x1904, 0x5d16, 0x9186, 0x007f, 0x0130, 0x080c, - 0x62a4, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x0fd5, - 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806, - 0x080c, 0xb7da, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, - 0x5d1d, 0xa998, 0xaeb0, 0x080c, 0x5f7e, 0x1904, 0x5d16, 0x0096, - 0x080c, 0x0fd5, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x5dd5, - 0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, 0xb8b4, - 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, - 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xbbb8, - 0x9398, 0x0006, 0x2398, 0x080c, 0x0f52, 0x009e, 0xa87b, 0x0000, - 0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x5113, - 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118, - 0xa89b, 0x000c, 0x00b0, 0x080c, 0x62a4, 0x0118, 0xa89b, 0x0009, - 0x0080, 0x080c, 0x5127, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c, - 0xb7bd, 0x1904, 0x5d51, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, - 0x5d1d, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006, - 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, - 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, - 0x120c, 0x080c, 0x9ed6, 0x1904, 0x5d51, 0x2009, 0x0002, 0x08e8, - 0x2001, 0x0028, 0x900e, 0x0804, 0x5d52, 0x2009, 0x180c, 0x210c, - 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, - 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x5d52, 0x2001, - 0x0029, 0x900e, 0x0804, 0x5d52, 0x080c, 0x33b6, 0x0804, 0x5d53, - 0x080c, 0x4e50, 0x0804, 0x5d53, 0x080c, 0x41a5, 0x0804, 0x5d53, - 0x080c, 0x45e8, 0x0804, 0x5d53, 0x080c, 0x489f, 0x0804, 0x5d53, - 0x080c, 0x4aca, 0x0804, 0x5d53, 0x080c, 0x4cbb, 0x0804, 0x5d53, - 0x080c, 0x35c6, 0x0804, 0x5d53, 0x00b6, 0xa974, 0xae78, 0x9684, - 0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800, 0x1268, 0x9188, - 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x62a4, 0x1148, 0x00e9, - 0x080c, 0x60a9, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090, - 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001, 0x0029, - 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, - 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, - 0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802, 0x009e, - 0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e, - 0xa803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0xb84c, 0x9005, - 0x0170, 0x00e6, 0x2071, 0x19b6, 0x7004, 0x9086, 0x0002, 0x0168, - 0x00ee, 0xb84c, 0xa802, 0x2900, 0xb84e, 0x012e, 0x0005, 0x2900, - 0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x701c, 0x9b06, 0x1d80, - 0xb84c, 0x00a6, 0x2050, 0xb000, 0xa802, 0x2900, 0xb002, 0x00ae, - 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0xb84c, 0x904d, - 0x0130, 0xa800, 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, 0x012e, - 0x0005, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108, 0xb852, - 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026, 0x2091, - 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285, 0x0008, - 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, - 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, - 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c, 0x62a0, - 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011, - 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086, - 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0db2, 0x000e, 0x00ce, - 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, - 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c, - 0xd0a4, 0x0150, 0x080c, 0x629c, 0x1138, 0x9284, 0x00ff, 0x9086, - 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007, - 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800, - 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000, - 0x2204, 0x905d, 0x1180, 0x0096, 0x080c, 0x0fd5, 0x2958, 0x009e, - 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860, 0xb8b6, 0x9006, - 0xb8a6, 0x080c, 0x5a3b, 0x9006, 0x0010, 0x9085, 0x0001, 0x002e, - 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026, - 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6, 0x9190, - 0x1000, 0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4, 0x904d, - 0x0110, 0x080c, 0x1007, 0x00d6, 0x00c6, 0xb8ac, 0x2060, 0x8cff, - 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xb5fb, 0x0110, - 0x080c, 0x0f87, 0x080c, 0x99d6, 0x00ce, 0x0c88, 0x00ce, 0x00de, - 0x2b48, 0xb8b8, 0xb85e, 0xb8b4, 0xb862, 0x080c, 0x1017, 0x00de, - 0x9006, 0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, - 0x0800, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, - 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, - 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, - 0x6c53, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0x9940, - 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1951, - 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, - 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, - 0x6886, 0x2069, 0x1800, 0x68ae, 0x7040, 0xb85e, 0x7048, 0xb862, - 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8b4, 0x20e8, - 0xb8b8, 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, - 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, - 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, - 0xb872, 0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, - 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, - 0x2009, 0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, - 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, - 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, - 0x2009, 0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, - 0x0010, 0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, - 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, - 0x703c, 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbbc, 0xc384, 0xba00, - 0x2009, 0x1873, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, - 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, - 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbbe, - 0x003e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126, 0x2091, - 0x8000, 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0, 0xaa04, - 0x9282, 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906, - 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080, - 0x0004, 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002, 0x9086, - 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0db2, 0x3c00, 0x20e8, - 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce, - 0x014e, 0x013e, 0x0060, 0x080c, 0x0fd5, 0x0170, 0x2900, 0xb8a6, - 0xa803, 0x0000, 0x080c, 0x613a, 0xa807, 0x0001, 0xae12, 0x9085, - 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, - 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150, - 0x080c, 0x6149, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001, - 0xa806, 0x0020, 0x080c, 0x1007, 0xb8a7, 0x0000, 0x009e, 0x012e, - 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x801d, 0x012e, 0x0005, - 0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000, - 0xb84c, 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500, 0x83ff, - 0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, - 0xa870, 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70, 0x080c, - 0x933f, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6, - 0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e, - 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, - 0x619e, 0x0128, 0x080c, 0xb6c3, 0x0010, 0x9085, 0x0001, 0x0005, - 0x080c, 0x619e, 0x0128, 0x080c, 0xb65d, 0x0010, 0x9085, 0x0001, - 0x0005, 0x080c, 0x619e, 0x0128, 0x080c, 0xb6c0, 0x0010, 0x9085, - 0x0001, 0x0005, 0x080c, 0x619e, 0x0128, 0x080c, 0xb681, 0x0010, - 0x9085, 0x0001, 0x0005, 0x080c, 0x619e, 0x0128, 0x080c, 0xb6ed, - 0x0010, 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085, - 0x0001, 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, - 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, - 0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, - 0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006, 0x01ce, - 0x013e, 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c, 0x9080, - 0x0004, 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104, 0x01de, - 0x014e, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e, + 0x2001, 0x0029, 0x900e, 0x0804, 0x61a0, 0x2001, 0x0029, 0x900e, + 0x0804, 0x61a0, 0x080c, 0x35f4, 0x0804, 0x61a1, 0x080c, 0x51f4, + 0x0804, 0x61a1, 0x080c, 0x43fa, 0x0804, 0x61a1, 0x080c, 0x4871, + 0x0804, 0x61a1, 0x080c, 0x4b28, 0x0804, 0x61a1, 0x080c, 0x4e6e, + 0x0804, 0x61a1, 0x080c, 0x505f, 0x0804, 0x61a1, 0x080c, 0x380a, + 0x0804, 0x61a1, 0x00b6, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, + 0x4000, 0x1618, 0x9182, 0x0800, 0x1268, 0x9188, 0x1000, 0x2104, + 0x905d, 0x0140, 0x080c, 0x6737, 0x1148, 0x00e9, 0x080c, 0x64f8, + 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090, 0x9082, 0x0006, + 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001, 0x0029, 0x2009, 0x1000, + 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, + 0x9005, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0xb850, 0x900d, + 0x0150, 0x2900, 0x0096, 0x2148, 0xa802, 0x009e, 0xa803, 0x0000, + 0xb852, 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e, 0xa803, 0x0000, + 0x0cc0, 0x0126, 0x2091, 0x8000, 0xb84c, 0x9005, 0x0170, 0x00e6, + 0x2071, 0x19e5, 0x7004, 0x9086, 0x0002, 0x0168, 0x00ee, 0xb84c, + 0xa802, 0x2900, 0xb84e, 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e, + 0xa803, 0x0000, 0x0cc0, 0x701c, 0x9b06, 0x1d80, 0xb84c, 0x00a6, + 0x2050, 0xb000, 0xa802, 0x2900, 0xb002, 0x00ae, 0x00ee, 0x012e, + 0x0005, 0x0126, 0x2091, 0x8000, 0xb84c, 0x904d, 0x0130, 0xa800, + 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, 0x012e, 0x0005, 0xb84c, + 0x904d, 0x0130, 0xa800, 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, + 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026, 0x2091, 0x8000, 0x6210, + 0x2258, 0xba00, 0x9005, 0x0110, 0xc285, 0x0008, 0xc284, 0xba02, + 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, + 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, + 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c, 0x6733, 0x0140, 0x9284, + 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011, 0x0600, 0x000e, + 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086, 0x0006, 0x1120, + 0xba90, 0x82ff, 0x090c, 0x0dd5, 0x000e, 0x00ce, 0x012e, 0x00be, + 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, + 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150, + 0x080c, 0x672f, 0x1138, 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110, + 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007, 0x9215, 0xba06, + 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800, 0x0218, 0x9085, + 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000, 0x2204, 0x905d, + 0x1188, 0x0096, 0x080c, 0x1000, 0x2958, 0x009e, 0x0168, 0x2b00, + 0x2012, 0xb85c, 0xb8ca, 0xb860, 0xb8c6, 0x9006, 0xb8a6, 0xb8ae, + 0x080c, 0x5e12, 0x9006, 0x0010, 0x9085, 0x0001, 0x002e, 0x00de, + 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026, 0x9182, + 0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6, 0x9190, 0x1000, + 0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4, 0x904d, 0x0110, + 0x080c, 0x1032, 0x00d6, 0x00c6, 0xb8bc, 0x2060, 0x8cff, 0x0168, + 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xc825, 0x0110, 0x080c, + 0x0fb2, 0x080c, 0xab6b, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x2b48, + 0xb8c8, 0xb85e, 0xb8c4, 0xb862, 0x080c, 0x1042, 0x00de, 0x9006, + 0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, 0x0800, + 0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, 0x905d, + 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, + 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, 0x717d, + 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xaad5, 0x11d8, + 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1980, 0x7048, + 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce, + 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886, + 0x2069, 0x1800, 0x68b6, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c, + 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8c4, 0x20e8, 0xb8c8, + 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a, + 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200, + 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, 0xb872, + 0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, 0x9086, + 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, 0x2009, + 0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, + 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349, + 0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009, + 0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, + 0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, + 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, 0x703c, + 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbcc, 0xc384, 0xba00, 0x2009, + 0x1867, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, + 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128, + 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbce, 0x003e, + 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000, + 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0, 0xaa04, 0x9282, + 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906, 0x8006, + 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080, 0x0004, + 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002, 0x9086, 0xffff, + 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dd5, 0x3c00, 0x20e8, 0x3300, + 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce, 0x014e, + 0x013e, 0x0060, 0x080c, 0x1000, 0x0170, 0x2900, 0xb8a6, 0xa803, + 0x0000, 0x080c, 0x6589, 0xa807, 0x0001, 0xae12, 0x9085, 0x0001, + 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, 0x8000, + 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150, 0x080c, + 0x6598, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001, 0xa806, + 0x0020, 0x080c, 0x1032, 0xb8a7, 0x0000, 0x009e, 0x012e, 0x0005, + 0x0126, 0x2091, 0x8000, 0x080c, 0x8e9c, 0x012e, 0x0005, 0x901e, + 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000, 0xb84c, + 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500, 0x83ff, 0x0120, + 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870, + 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70, 0x080c, 0xa39c, + 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6, 0x2150, + 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e, 0x0005, + 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, 0x65ed, + 0x0128, 0x080c, 0xc8ed, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, + 0x65ed, 0x0128, 0x080c, 0xc887, 0x0010, 0x9085, 0x0001, 0x0005, + 0x080c, 0x65ed, 0x0128, 0x080c, 0xc8ea, 0x0010, 0x9085, 0x0001, + 0x0005, 0x080c, 0x65ed, 0x0128, 0x080c, 0xc8ab, 0x0010, 0x9085, + 0x0001, 0x0005, 0x080c, 0x65ed, 0x0128, 0x080c, 0xc917, 0x0010, + 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085, 0x0001, + 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128, - 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300, - 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de, - 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, 0x2091, - 0x8000, 0xb8a4, 0x904d, 0x1128, 0x080c, 0x0fd5, 0x0168, 0x2900, - 0xb8a6, 0x080c, 0x613a, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085, - 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126, - 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c, - 0x1007, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, - 0x0005, 0x00b6, 0x00f6, 0x080c, 0x6c53, 0x01b0, 0x71bc, 0x81ff, - 0x1198, 0x71d4, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, - 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, - 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1853, 0x7804, 0xd0a4, - 0x01d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x5f7e, - 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, - 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, - 0x1f04, 0x61c5, 0x015e, 0x080c, 0x6262, 0x0120, 0x2001, 0x1954, - 0x200c, 0x0038, 0x2079, 0x1853, 0x7804, 0xd0a4, 0x0130, 0x2009, - 0x07d0, 0x2011, 0x61f0, 0x080c, 0x7cd9, 0x00fe, 0x00be, 0x0005, - 0x00b6, 0x2011, 0x61f0, 0x080c, 0x7c4a, 0x080c, 0x6262, 0x01d8, - 0x2001, 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, - 0x62a0, 0x0130, 0x2009, 0x07d0, 0x2011, 0x61f0, 0x080c, 0x7cd9, - 0x00e6, 0x2071, 0x1800, 0x9006, 0x7076, 0x7058, 0x707a, 0x080c, - 0x2c2b, 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, - 0x0016, 0x080c, 0x5f7e, 0x1538, 0xb800, 0xd0ec, 0x0520, 0x0046, - 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xcfe6, 0xb800, - 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x629c, 0x2001, 0x0707, 0x1128, - 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019, 0x0029, - 0x080c, 0x8180, 0x0076, 0x903e, 0x080c, 0x8078, 0x900e, 0x080c, - 0xcd62, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x6218, 0x00ce, - 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800, 0xc0ec, - 0xb802, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, 0x00be, - 0xd0ac, 0x0005, 0x6010, 0x00b6, 0x905d, 0x0108, 0xb800, 0x00be, - 0xd0bc, 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004, 0x905d, - 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126, 0x0026, - 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, - 0x190c, 0x0db2, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, - 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1835, 0x2204, - 0xd0cc, 0x0138, 0x2001, 0x1952, 0x200c, 0x2011, 0x6292, 0x080c, - 0x7cd9, 0x0005, 0x2011, 0x6292, 0x080c, 0x7c4a, 0x2011, 0x1835, - 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, 0x5113, 0xd0ac, 0x0005, - 0x080c, 0x5113, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, - 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, - 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, - 0xbcec, 0x0158, 0x70d4, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, - 0x2004, 0x905d, 0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be, 0x0005, - 0x2071, 0x1906, 0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, - 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, 0x2001, 0x1919, 0x2003, - 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x191a, 0x900e, 0x710a, - 0x080c, 0x5113, 0xd0fc, 0x1140, 0x080c, 0x5113, 0x900e, 0xd09c, - 0x0108, 0x8108, 0x7102, 0x00f8, 0x2001, 0x1873, 0x200c, 0x9184, - 0x0007, 0x0002, 0x62e4, 0x62e4, 0x62e4, 0x62e4, 0x62e4, 0x62fa, - 0x6308, 0x62e4, 0x7003, 0x0003, 0x2009, 0x1874, 0x210c, 0x9184, - 0xff00, 0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, - 0x7003, 0x0005, 0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, - 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6, 0x2071, 0x1906, 0x7028, - 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, - 0x0158, 0x080c, 0x6f9c, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, - 0x7006, 0x9006, 0x7012, 0x7016, 0x6860, 0x7002, 0x6864, 0x7006, - 0x6868, 0x700a, 0x686c, 0x700e, 0x6844, 0x9005, 0x1110, 0x7012, - 0x7016, 0x684c, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x7037, - 0x0019, 0x702b, 0x0001, 0x00e6, 0x2071, 0x1906, 0x7028, 0xc084, - 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, - 0x0005, 0xa868, 0xd0fc, 0x11d8, 0x00e6, 0x0026, 0x2001, 0x191a, - 0x2004, 0x9005, 0x0904, 0x653b, 0xa87c, 0xd0bc, 0x1904, 0x653b, - 0xa978, 0xa874, 0x9105, 0x1904, 0x653b, 0x2001, 0x191a, 0x2004, - 0x0002, 0x653b, 0x6394, 0x63d0, 0x63d0, 0x653b, 0x63d0, 0x0005, - 0xa868, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0x2009, 0x191a, 0x210c, - 0x81ff, 0x0904, 0x653b, 0xa87c, 0xd0cc, 0x0904, 0x653b, 0xa880, - 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x653b, 0x9186, 0x0003, - 0x0904, 0x63d0, 0x9186, 0x0005, 0x0904, 0x63d0, 0xa84f, 0x8021, - 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, - 0x2071, 0x1906, 0x701c, 0x9005, 0x1904, 0x66fb, 0x0e04, 0x6746, - 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850, 0x7032, 0xa86c, 0x7086, - 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, - 0xd084, 0x190c, 0x1167, 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, - 0x900d, 0x702c, 0x1158, 0xa802, 0x2900, 0x702e, 0x70b8, 0x9200, - 0x70ba, 0x080c, 0x7b7c, 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, - 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, - 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1906, 0xa803, - 0x0000, 0x7010, 0x9005, 0x1904, 0x64bf, 0x782c, 0x908c, 0x0780, - 0x190c, 0x686d, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, - 0x63ee, 0x64bf, 0x6413, 0x645a, 0x080c, 0x0db2, 0x2071, 0x1800, - 0x2900, 0x7822, 0xa804, 0x900d, 0x1170, 0x2071, 0x19c9, 0x703c, - 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, + 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006, 0x01ce, 0x013e, + 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0004, + 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104, 0x01de, 0x014e, + 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e, 0x810f, + 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004, 0x2098, + 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128, 0x8109, + 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300, 0x8001, + 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de, 0x014e, + 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000, + 0xb8a4, 0x904d, 0x1128, 0x080c, 0x1000, 0x0168, 0x2900, 0xb8a6, + 0x080c, 0x6589, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085, 0x0001, + 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126, 0x2091, + 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c, 0x1032, + 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, 0x0005, + 0x00b6, 0x00f6, 0x080c, 0x717d, 0x01b0, 0x71c4, 0x81ff, 0x1198, + 0x71dc, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004, + 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118, + 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x01d0, + 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x63cd, 0x1168, + 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086, + 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04, + 0x6614, 0x015e, 0x080c, 0x66f5, 0x0120, 0x2001, 0x1983, 0x200c, + 0x0038, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0, + 0x2011, 0x663f, 0x080c, 0x831a, 0x00fe, 0x00be, 0x0005, 0x00b6, + 0x2011, 0x663f, 0x080c, 0x8285, 0x080c, 0x66f5, 0x01d8, 0x2001, + 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6733, + 0x0130, 0x2009, 0x07d0, 0x2011, 0x663f, 0x080c, 0x831a, 0x00e6, + 0x2071, 0x1800, 0x9006, 0x707e, 0x7060, 0x7082, 0x080c, 0x2e48, + 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, + 0x080c, 0x63cd, 0x1538, 0xb800, 0xd0ec, 0x0520, 0x0046, 0xbaa0, + 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xe280, 0xb800, 0xc0e5, + 0xc0ec, 0xb802, 0x080c, 0x672f, 0x2001, 0x0707, 0x1128, 0xb804, + 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019, 0x0029, 0x080c, + 0x901a, 0x0076, 0x903e, 0x080c, 0x8ef7, 0x900e, 0x080c, 0xdfbd, + 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x6667, 0x00ce, 0x015e, + 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800, 0xc0ec, 0xb802, + 0x00be, 0x0005, 0x00b6, 0x00c6, 0x0096, 0x080c, 0x1019, 0x090c, + 0x0dd5, 0x2958, 0x009e, 0x2001, 0x196b, 0x2b02, 0xb8af, 0x0000, + 0x2009, 0x00ff, 0x080c, 0x5e12, 0xb807, 0x0006, 0xb813, 0x00ff, + 0xb817, 0xffff, 0xb86f, 0x0200, 0xb86c, 0xb893, 0x0002, 0xb8bb, + 0x0520, 0xb8a3, 0x00ff, 0xb8af, 0x0000, 0x00ce, 0x00be, 0x0005, + 0x7810, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ac, 0x0005, 0x6010, + 0x00b6, 0x905d, 0x0108, 0xb800, 0x00be, 0xd0bc, 0x0005, 0x0006, + 0x0016, 0x0026, 0xb804, 0x908c, 0x00ff, 0x9196, 0x0006, 0x0188, + 0x9196, 0x0004, 0x0170, 0x9196, 0x0005, 0x0158, 0x908c, 0xff00, + 0x810f, 0x9196, 0x0006, 0x0128, 0x9196, 0x0004, 0x0110, 0x9196, + 0x0005, 0x002e, 0x001e, 0x000e, 0x0005, 0x00b6, 0x00f6, 0x2001, + 0x107e, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, + 0x0005, 0x0126, 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, + 0x1000, 0x2204, 0x9b06, 0x190c, 0x0dd5, 0x000e, 0xba00, 0x9005, + 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, + 0x2011, 0x1837, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x1981, 0x200c, + 0x2011, 0x6725, 0x080c, 0x831a, 0x0005, 0x2011, 0x6725, 0x080c, + 0x8285, 0x2011, 0x1837, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, + 0x54b7, 0xd0ac, 0x0005, 0x080c, 0x54b7, 0xd0a4, 0x0005, 0x0016, + 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, + 0xb904, 0x9184, 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, + 0x00b6, 0x00f6, 0x080c, 0xcf18, 0x0158, 0x70dc, 0x9084, 0x0028, + 0x0138, 0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8cc, 0xd094, + 0x00fe, 0x00be, 0x0005, 0x2071, 0x1910, 0x7003, 0x0001, 0x7007, + 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, + 0x2001, 0x1947, 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, + 0x1948, 0x900e, 0x710a, 0x080c, 0x54b7, 0xd0fc, 0x1140, 0x080c, + 0x54b7, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x00f8, 0x2001, + 0x1867, 0x200c, 0x9184, 0x0007, 0x0002, 0x6777, 0x6777, 0x6777, + 0x6777, 0x6777, 0x678d, 0x679b, 0x6777, 0x7003, 0x0003, 0x2009, + 0x1868, 0x210c, 0x9184, 0xff00, 0x8007, 0x9005, 0x1110, 0x2001, + 0x0002, 0x7006, 0x0018, 0x7003, 0x0005, 0x0c88, 0x00ee, 0x001e, + 0x0005, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6, + 0x2071, 0x1910, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, + 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x74d7, 0x6a60, 0x9200, + 0x7002, 0x6864, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860, + 0x7002, 0x6864, 0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844, + 0x9005, 0x1110, 0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085, + 0x0040, 0x701e, 0x7037, 0x0019, 0x702b, 0x0001, 0x00e6, 0x2071, + 0x1910, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, + 0x00ee, 0x9006, 0x00ee, 0x0005, 0x00e6, 0x0026, 0x2071, 0x1948, + 0x7000, 0x9015, 0x0904, 0x6a4b, 0x9286, 0x0003, 0x0904, 0x68e1, + 0x9286, 0x0005, 0x0904, 0x68e1, 0x2071, 0x1877, 0xa87c, 0x9005, + 0x0904, 0x6842, 0x7140, 0xa868, 0x9102, 0x0a04, 0x6a4b, 0xa878, + 0xd084, 0x15d8, 0xa853, 0x0019, 0x2001, 0x8023, 0xa84e, 0x2071, + 0x1910, 0x701c, 0x9005, 0x1904, 0x6bed, 0x0e04, 0x6c5b, 0x2071, + 0x0000, 0xa850, 0x7032, 0xa84c, 0x7082, 0xa870, 0x7086, 0xa86c, + 0x708a, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, + 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, + 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce, + 0x013e, 0x01de, 0x014e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, + 0xd084, 0x190c, 0x1192, 0x0804, 0x68c4, 0xa853, 0x001b, 0x2001, + 0x8027, 0x0820, 0x7004, 0xd08c, 0x1904, 0x6a4b, 0xa853, 0x001a, + 0x2001, 0x8024, 0x0804, 0x6806, 0x00e6, 0x0026, 0x2071, 0x1948, + 0x7000, 0x9015, 0x0904, 0x6a4b, 0x9286, 0x0003, 0x0904, 0x68e1, + 0x9286, 0x0005, 0x0904, 0x68e1, 0xa84f, 0x8022, 0xa853, 0x0018, + 0x0804, 0x68a9, 0xa868, 0xd0fc, 0x11d8, 0x00e6, 0x0026, 0x2001, + 0x1948, 0x2004, 0x9005, 0x0904, 0x6a4b, 0xa87c, 0xd0bc, 0x1904, + 0x6a4b, 0xa978, 0xa874, 0x9105, 0x1904, 0x6a4b, 0x2001, 0x1948, + 0x2004, 0x0002, 0x6a4b, 0x68a5, 0x68e1, 0x68e1, 0x6a4b, 0x68e1, + 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0x2009, 0x1948, + 0x210c, 0x81ff, 0x0904, 0x6a4b, 0xa87c, 0xd0cc, 0x0904, 0x6a4b, + 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x6a4b, 0x9186, + 0x0003, 0x0904, 0x68e1, 0x9186, 0x0005, 0x0904, 0x68e1, 0xa84f, + 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853, + 0x0016, 0x2071, 0x1910, 0x701c, 0x9005, 0x1904, 0x6bed, 0x0e04, + 0x6c5b, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850, 0x7032, 0xa86c, + 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, + 0x2004, 0xd084, 0x190c, 0x1192, 0x2071, 0x1800, 0x2011, 0x0001, + 0xa804, 0x900d, 0x702c, 0x1158, 0xa802, 0x2900, 0x702e, 0x70c0, + 0x9200, 0x70c2, 0x080c, 0x81a6, 0x002e, 0x00ee, 0x0005, 0x0096, + 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e, + 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1910, + 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x69d0, 0x782c, 0x908c, + 0x0780, 0x190c, 0x6da7, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, + 0x0002, 0x68ff, 0x69d0, 0x6924, 0x696b, 0x080c, 0x0dd5, 0x2071, + 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1170, 0x2071, 0x19f8, + 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, + 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, + 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, + 0x70c2, 0x080c, 0x81a6, 0x0c10, 0x2071, 0x1800, 0x2900, 0x7822, + 0xa804, 0x900d, 0x1580, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, + 0xd19c, 0x1148, 0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0218, + 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, + 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x81a6, 0x782c, 0x9094, + 0x0780, 0x190c, 0x6da7, 0xd0a4, 0x19f0, 0x2071, 0x19f8, 0x703c, + 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, - 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70b8, 0x9200, 0x70ba, - 0x080c, 0x7b7c, 0x0c10, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, - 0x900d, 0x1580, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, - 0x1148, 0x2009, 0x182e, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, - 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, - 0x70b8, 0x8000, 0x70ba, 0x080c, 0x7b7c, 0x782c, 0x9094, 0x0780, - 0x190c, 0x686d, 0xd0a4, 0x19f0, 0x2071, 0x19c9, 0x703c, 0x9005, - 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, - 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, - 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70b8, 0x9200, 0x70ba, 0x080c, - 0x7b7c, 0x0800, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, - 0x702c, 0xa802, 0x2900, 0x702e, 0x70b8, 0x8000, 0x70ba, 0x080c, - 0x7b7c, 0x782c, 0x9094, 0x0780, 0x190c, 0x686d, 0xd0a4, 0x1d60, - 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x686d, 0xd09c, 0x11a0, - 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1560, 0x2071, 0x19c9, - 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, - 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, - 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, - 0x2148, 0xa804, 0x900d, 0x1170, 0x2071, 0x19c9, 0x703c, 0x9005, - 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, + 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, + 0x080c, 0x81a6, 0x0800, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, + 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, + 0x080c, 0x81a6, 0x782c, 0x9094, 0x0780, 0x190c, 0x6da7, 0xd0a4, + 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x6da7, 0xd09c, + 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1560, 0x2071, + 0x19f8, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, + 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, + 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, + 0x711e, 0x2148, 0xa804, 0x900d, 0x1170, 0x2071, 0x19f8, 0x703c, + 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, + 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, + 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, + 0x9200, 0x70c2, 0x080c, 0x81a6, 0x00fe, 0x002e, 0x00ee, 0x0005, + 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, + 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6a25, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6da7, 0xd09c, 0x1198, 0x701c, + 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, + 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6da7, + 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x6da7, 0xd0a4, + 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, + 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x81a6, 0x782c, + 0x9094, 0x0780, 0x190c, 0x6da7, 0xd0a4, 0x1d60, 0x00ee, 0x2071, + 0x19f8, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, + 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, + 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, + 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x81a6, 0x00ee, + 0x0804, 0x69e0, 0xa868, 0xd0fc, 0x1560, 0x0096, 0xa804, 0xa807, + 0x0000, 0x904d, 0x190c, 0x0fb2, 0x009e, 0x0018, 0xa868, 0xd0fc, + 0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, + 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6b67, + 0x782c, 0x908c, 0x0780, 0x190c, 0x6da7, 0x8004, 0x8004, 0x8004, + 0x9084, 0x0003, 0x0002, 0x6a6a, 0x6b67, 0x6a85, 0x6af6, 0x080c, + 0x0dd5, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, + 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, + 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, + 0x9200, 0x70c2, 0x080c, 0x81a6, 0x0c60, 0x2071, 0x1800, 0x2900, + 0x7822, 0xa804, 0x900d, 0x1904, 0x6ae5, 0x7830, 0x8007, 0x9084, + 0x001f, 0x9082, 0x0005, 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, + 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, + 0x1830, 0x210c, 0x918a, 0x0020, 0x0218, 0x7022, 0x00ee, 0x0058, + 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, + 0x70c2, 0x080c, 0x81a6, 0x782c, 0x9094, 0x0780, 0x190c, 0x6da7, + 0xd0a4, 0x19f0, 0x0e04, 0x6adc, 0x7838, 0x7938, 0x910e, 0x1de0, + 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, + 0x1921, 0x200c, 0xc184, 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, + 0x2004, 0xd084, 0x190c, 0x1192, 0x2009, 0x1947, 0x200b, 0x0000, + 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001, 0x1921, 0x200c, 0xc185, + 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, + 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, + 0x9200, 0x70c2, 0x080c, 0x81a6, 0x0804, 0x6a98, 0x0096, 0x00e6, + 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, + 0x70c0, 0x8000, 0x70c2, 0x080c, 0x81a6, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6da7, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6b3a, 0x7838, + 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, + 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, + 0x0089, 0x2004, 0xd084, 0x190c, 0x1192, 0x2009, 0x1947, 0x200b, + 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, 0x6da7, 0xd09c, 0x1170, + 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x11e0, 0x00fe, 0x002e, + 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x0c58, 0x009e, 0x2908, + 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, + 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, - 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70b8, 0x9200, - 0x70ba, 0x080c, 0x7b7c, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, + 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, + 0x70c2, 0x080c, 0x81a6, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, - 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6514, 0x782c, - 0x9094, 0x0780, 0x190c, 0x686d, 0xd09c, 0x1198, 0x701c, 0x904d, - 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, - 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x686d, 0xd09c, - 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x686d, 0xd0a4, 0x01b0, - 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, - 0x702e, 0x70b8, 0x8000, 0x70ba, 0x080c, 0x7b7c, 0x782c, 0x9094, - 0x0780, 0x190c, 0x686d, 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x19c9, - 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, - 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, + 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6bd8, 0x782c, + 0x9094, 0x0780, 0x190c, 0x6da7, 0xd09c, 0x11b0, 0x701c, 0x904d, + 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010, 0x8001, 0x7012, 0x1108, + 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6da7, 0xd09c, 0x0d50, 0x782c, 0x9094, 0x0780, 0x190c, + 0x6da7, 0xd0a4, 0x05c8, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, + 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, + 0x81a6, 0x782c, 0x9094, 0x0780, 0x190c, 0x6da7, 0xd0a4, 0x1d60, + 0x00ee, 0x0e04, 0x6bd1, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, + 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, + 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, + 0x1192, 0x2009, 0x1947, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, + 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, + 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, + 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, + 0x080c, 0x81a6, 0x00ee, 0x0804, 0x6b77, 0x2071, 0x1910, 0xa803, + 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, + 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1128, + 0x1e04, 0x6c18, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, - 0x702e, 0x70b8, 0x9200, 0x70ba, 0x080c, 0x7b7c, 0x00ee, 0x0804, - 0x64cf, 0xa868, 0xd0fc, 0x1904, 0x6577, 0x0096, 0xa804, 0xa807, - 0x0000, 0x904d, 0x190c, 0x0f87, 0x009e, 0x0018, 0xa868, 0xd0fc, - 0x15f0, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, - 0x2071, 0x1800, 0x70e4, 0x8001, 0x01d0, 0x1678, 0x2071, 0x1906, - 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6675, 0x782c, 0x908c, - 0x0780, 0x190c, 0x686d, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, - 0x0002, 0x6578, 0x6675, 0x6593, 0x6604, 0x080c, 0x0db2, 0x70e7, - 0x0fa0, 0x71e0, 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, - 0x9205, 0x70e2, 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, - 0x9084, 0xff3f, 0x9205, 0x20d0, 0x0888, 0x70e6, 0x0878, 0x0005, - 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, - 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, - 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70b8, 0x9200, 0x70ba, - 0x080c, 0x7b7c, 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, - 0x900d, 0x1904, 0x65f3, 0x7830, 0x8007, 0x9084, 0x001f, 0x9082, - 0x0005, 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, - 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182e, 0x210c, - 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, - 0x702c, 0xa802, 0x2900, 0x702e, 0x70b8, 0x8000, 0x70ba, 0x080c, - 0x7b7c, 0x782c, 0x9094, 0x0780, 0x190c, 0x686d, 0xd0a4, 0x19f0, - 0x0e04, 0x65ea, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, - 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1917, 0x200c, - 0xc184, 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, - 0x190c, 0x1167, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x002e, - 0x00ee, 0x0005, 0x2001, 0x1917, 0x200c, 0xc185, 0x2102, 0x00fe, - 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, - 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70b8, 0x9200, 0x70ba, - 0x080c, 0x7b7c, 0x0804, 0x65a6, 0x0096, 0x00e6, 0x7824, 0x2048, - 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70b8, 0x8000, - 0x70ba, 0x080c, 0x7b7c, 0x782c, 0x9094, 0x0780, 0x190c, 0x686d, - 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6648, 0x7838, 0x7938, 0x910e, - 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, - 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, - 0xd084, 0x190c, 0x1167, 0x2009, 0x1919, 0x200b, 0x0000, 0x782c, - 0x9094, 0x0780, 0x190c, 0x686d, 0xd09c, 0x1170, 0x009e, 0x2900, - 0x7822, 0xa804, 0x900d, 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, - 0x7044, 0xc085, 0x7046, 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, - 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, - 0x2148, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, - 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, - 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70b8, 0x9200, 0x70ba, 0x080c, - 0x7b7c, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, - 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, - 0x2148, 0xa804, 0x900d, 0x1904, 0x66e6, 0x782c, 0x9094, 0x0780, - 0x190c, 0x686d, 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, - 0x9005, 0x1180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, - 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x686d, - 0xd09c, 0x0d50, 0x782c, 0x9094, 0x0780, 0x190c, 0x686d, 0xd0a4, - 0x05c8, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, - 0x2900, 0x702e, 0x70b8, 0x8000, 0x70ba, 0x080c, 0x7b7c, 0x782c, - 0x9094, 0x0780, 0x190c, 0x686d, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, - 0x66df, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, - 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, - 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1167, 0x2009, - 0x1919, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, - 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, - 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, - 0x81ff, 0x1dc8, 0x702e, 0x70b8, 0x9200, 0x70ba, 0x080c, 0x7b7c, - 0x00ee, 0x0804, 0x6685, 0x2071, 0x1906, 0xa803, 0x0000, 0x2908, + 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x81a6, 0x0e04, 0x6c02, + 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18, 0x2071, + 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, + 0x708a, 0xa850, 0x9082, 0x0019, 0x1278, 0x2091, 0x4080, 0x2001, + 0x0089, 0x2004, 0xd084, 0x190c, 0x1192, 0x2071, 0x1910, 0x080c, + 0x6d93, 0x002e, 0x00ee, 0x0005, 0xa850, 0x9082, 0x001c, 0x1e68, + 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156, + 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0, + 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce, 0x013e, + 0x01de, 0x014e, 0x0890, 0x2071, 0x1910, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, - 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1128, 0x1e04, 0x6726, - 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, - 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70b8, - 0x9200, 0x70ba, 0x080c, 0x7b7c, 0x0e04, 0x6710, 0x2071, 0x1906, - 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, - 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, - 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1167, 0x2071, - 0x1906, 0x080c, 0x6859, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1906, - 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, - 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, - 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, - 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, - 0x70b8, 0x9200, 0x70ba, 0x080c, 0x7b7c, 0x002e, 0x00ee, 0x0005, - 0x0006, 0xa87c, 0x0006, 0xa867, 0x0103, 0x20a9, 0x001c, 0xa860, - 0x20e8, 0xa85c, 0x9080, 0x001d, 0x20a0, 0x9006, 0x4004, 0x000e, - 0x9084, 0x00ff, 0xa87e, 0x000e, 0xa87a, 0xa982, 0x0005, 0x2071, - 0x1906, 0x7004, 0x0002, 0x6791, 0x6792, 0x6858, 0x6792, 0x0db2, - 0x6858, 0x0005, 0x2001, 0x191a, 0x2004, 0x0002, 0x679c, 0x679c, - 0x67f1, 0x67f2, 0x679c, 0x67f2, 0x0126, 0x2091, 0x8000, 0x1e0c, - 0x6878, 0x701c, 0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, - 0x67c0, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, - 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x190c, 0x1167, 0x2071, 0x1906, 0x080c, 0x6859, - 0x012e, 0x0470, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, - 0x686d, 0xd09c, 0x2071, 0x1906, 0x1510, 0x2071, 0x1906, 0x700f, - 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, - 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, - 0x0050, 0x6822, 0x00de, 0x2071, 0x1906, 0x701c, 0x2048, 0x7010, - 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, - 0x0005, 0x0005, 0x00d6, 0x2008, 0x2069, 0x19c9, 0x683c, 0x9005, - 0x0760, 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1813, 0x2004, - 0x2009, 0x1a8b, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, - 0x2069, 0x0050, 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04, 0x6824, - 0x2069, 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, - 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1167, - 0x2069, 0x19c9, 0x683f, 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, - 0x8000, 0x1e0c, 0x68e9, 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, - 0x2004, 0x9094, 0x0780, 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1906, - 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, - 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, - 0x2069, 0x0050, 0x6822, 0x00de, 0x701c, 0x2048, 0x7010, 0x8001, - 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, - 0x0005, 0x0126, 0x2091, 0x8000, 0x701c, 0x904d, 0x0160, 0x7010, - 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, - 0x080c, 0x1007, 0x0005, 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, - 0x686f, 0x0006, 0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0dbb, - 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01e0, 0xc084, - 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, - 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x190c, 0x1167, 0x2009, 0x1919, 0x200b, 0x0000, - 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094, 0x0780, 0x1971, 0xd0a4, - 0x0db8, 0x2009, 0x1919, 0x2104, 0x8000, 0x200a, 0x9082, 0x000f, - 0x0e78, 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6, 0x2071, 0x0040, - 0x712c, 0xd19c, 0x1148, 0x2009, 0x182e, 0x210c, 0x918a, 0x0040, - 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, - 0x2900, 0x702e, 0x70b8, 0x8000, 0x70ba, 0x080c, 0x7b7c, 0x782c, - 0x9094, 0x0780, 0x190c, 0x686d, 0xd0a4, 0x19f0, 0x7838, 0x7938, - 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, - 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, - 0x1167, 0x2009, 0x1919, 0x200b, 0x0000, 0x00ee, 0x00fe, 0x009e, - 0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084, - 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, - 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x190c, 0x1167, 0x00fe, 0x0005, 0x782c, 0x9094, - 0x0780, 0x190c, 0x686d, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, - 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70b8, 0x8000, - 0x70ba, 0x080c, 0x7b7c, 0x782c, 0x9094, 0x0780, 0x190c, 0x686d, - 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x191a, - 0x6808, 0x690a, 0x2069, 0x19c9, 0x9102, 0x1118, 0x683c, 0x9005, - 0x1328, 0x2001, 0x191b, 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, - 0x00fe, 0x0005, 0x7090, 0x908a, 0x0029, 0x1a0c, 0x0db2, 0x9082, - 0x001d, 0x001b, 0x6027, 0x1e00, 0x0005, 0x6a0d, 0x6997, 0x69b3, - 0x69db, 0x69fc, 0x6a3c, 0x6a4e, 0x69b3, 0x6a24, 0x6952, 0x6980, - 0x6951, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, - 0x6808, 0x9005, 0x1518, 0x7093, 0x0028, 0x2069, 0x195e, 0x2d04, - 0x7002, 0x080c, 0x6d8d, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, - 0x7093, 0x0028, 0x2069, 0x195e, 0x2d04, 0x7002, 0x6028, 0x9085, - 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a31, - 0x080c, 0x1872, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, - 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, - 0x1160, 0x7093, 0x0028, 0x2069, 0x195e, 0x2d04, 0x7002, 0x080c, - 0x6e17, 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, - 0x2001, 0x0090, 0x080c, 0x2987, 0x000e, 0x6124, 0xd1e4, 0x1190, - 0x080c, 0x6abb, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, - 0x7093, 0x0020, 0x080c, 0x6abb, 0x0028, 0x7093, 0x001d, 0x0010, - 0x7093, 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2987, 0x6124, - 0xd1cc, 0x11d8, 0xd1dc, 0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00, - 0x11c8, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x6c7f, - 0x2001, 0x0080, 0x080c, 0x2987, 0x7093, 0x0028, 0x0058, 0x7093, - 0x001e, 0x0040, 0x7093, 0x001d, 0x0028, 0x7093, 0x0020, 0x0010, - 0x7093, 0x001f, 0x0005, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, - 0x080c, 0x6c7f, 0x2001, 0x0080, 0x080c, 0x2987, 0x6124, 0xd1d4, - 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, - 0x7093, 0x0028, 0x0040, 0x7093, 0x001e, 0x0028, 0x7093, 0x001d, - 0x0010, 0x7093, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c, 0x2987, - 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x189c, 0x7093, - 0x001e, 0x0010, 0x7093, 0x001d, 0x0005, 0x080c, 0x6b3e, 0x6124, - 0xd1dc, 0x1188, 0x080c, 0x6abb, 0x0016, 0x080c, 0x189c, 0x001e, - 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x7093, 0x001e, 0x0020, 0x7093, - 0x001f, 0x080c, 0x6abb, 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, - 0x2987, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, - 0x1128, 0xd1e4, 0x0140, 0x7093, 0x001e, 0x0028, 0x7093, 0x001d, - 0x0010, 0x7093, 0x0021, 0x0005, 0x080c, 0x6b3e, 0x6124, 0xd1d4, - 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7093, 0x001e, 0x0028, - 0x7093, 0x001d, 0x0010, 0x7093, 0x001f, 0x0005, 0x0006, 0x2001, - 0x0090, 0x080c, 0x2987, 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, - 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x7093, 0x001e, 0x0040, - 0x7093, 0x001d, 0x0028, 0x7093, 0x0020, 0x0010, 0x7093, 0x001f, - 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, - 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c, 0x6c53, - 0x11d8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0, 0xc1b4, 0x2102, - 0x6027, 0x0200, 0x080c, 0x28d0, 0x6024, 0xd0cc, 0x0148, 0x2001, - 0x00a0, 0x080c, 0x2987, 0x080c, 0x6f2a, 0x080c, 0x5a21, 0x0428, - 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x6c6d, 0x0150, 0x080c, - 0x6c64, 0x1138, 0x2001, 0x0001, 0x080c, 0x247f, 0x080c, 0x6c2d, - 0x00a0, 0x080c, 0x6b3b, 0x0178, 0x2001, 0x0001, 0x080c, 0x247f, - 0x7090, 0x9086, 0x001e, 0x0120, 0x7090, 0x9086, 0x0022, 0x1118, - 0x7093, 0x0025, 0x0010, 0x7093, 0x0021, 0x012e, 0x00ee, 0x00de, - 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x6acc, 0x080c, 0x7d1b, - 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x6acc, 0x080c, - 0x7d12, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, - 0x8fbb, 0x2071, 0x1800, 0x080c, 0x6a69, 0x001e, 0x00fe, 0x00ee, - 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, - 0x0126, 0x080c, 0x8fbb, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, - 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, - 0x080c, 0x92ec, 0x2011, 0x0002, 0x080c, 0x92f6, 0x080c, 0x91de, - 0x080c, 0x7cc7, 0x0036, 0x901e, 0x080c, 0x9254, 0x003e, 0x60e3, - 0x0000, 0x080c, 0xd343, 0x080c, 0xd35e, 0x2009, 0x0004, 0x080c, - 0x28d6, 0x080c, 0x27f1, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, - 0x0008, 0x2011, 0x6acc, 0x080c, 0x7d1b, 0x080c, 0x6c6d, 0x0118, - 0x9006, 0x080c, 0x2987, 0x080c, 0x0b94, 0x2001, 0x0001, 0x080c, - 0x247f, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, - 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x6ad9, 0x2071, 0x19c9, - 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, - 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, - 0xfffe, 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0, 0x080c, 0x2987, - 0x0156, 0x20a9, 0x002d, 0x1d04, 0x6b4b, 0x2091, 0x6000, 0x1f04, - 0x6b4b, 0x015e, 0x00d6, 0x2069, 0x1800, 0x6894, 0x8001, 0x0220, - 0x0118, 0x6896, 0x00de, 0x0005, 0x6897, 0x0014, 0x68e0, 0xd0dc, - 0x0dc8, 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c, 0x7d27, 0x0c90, - 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, - 0x1800, 0x080c, 0x6f39, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, - 0x7092, 0x60e2, 0x6886, 0x080c, 0x254a, 0x9006, 0x080c, 0x2987, - 0x080c, 0x58e0, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, - 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, - 0x0140, 0x2071, 0x1800, 0x2001, 0x194e, 0x200c, 0x9186, 0x0000, - 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186, - 0x0003, 0x0158, 0x0804, 0x6c1d, 0x7093, 0x0022, 0x0040, 0x7093, - 0x0021, 0x0028, 0x7093, 0x0023, 0x0010, 0x7093, 0x0024, 0x60e3, - 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x254a, 0x0026, - 0x080c, 0x9947, 0x002e, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b, - 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, - 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c, - 0xbcec, 0x0118, 0x9006, 0x080c, 0x29b1, 0x0804, 0x6c29, 0x6800, - 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x28d0, 0x6904, 0xd1d4, - 0x1140, 0x2001, 0x0100, 0x080c, 0x2987, 0x1f04, 0x6bca, 0x080c, - 0x6caa, 0x012e, 0x015e, 0x080c, 0x6c64, 0x01a8, 0x6044, 0x9005, - 0x0168, 0x6050, 0x0006, 0x9085, 0x0020, 0x6052, 0x080c, 0x6caa, - 0x9006, 0x8001, 0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, - 0x1110, 0x080c, 0x6caa, 0x080c, 0xbcec, 0x0118, 0x9006, 0x080c, - 0x29b1, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, 0x2009, - 0x00c8, 0x2011, 0x6ad9, 0x080c, 0x7cd9, 0x002e, 0x001e, 0x080c, - 0x7b73, 0x2001, 0x194e, 0x2003, 0x0004, 0x080c, 0x693a, 0x080c, - 0x6c64, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, - 0x6f2f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, - 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x7b7c, - 0x080c, 0x6f39, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, 0x7092, - 0x60e2, 0x6886, 0x080c, 0x254a, 0x9006, 0x080c, 0x2987, 0x6043, - 0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, - 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x194d, 0x2004, 0x9086, - 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x5117, 0x9084, 0x0030, - 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c, 0x5117, 0x9084, - 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006, 0x080c, 0x5117, - 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, - 0x5117, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, - 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013, 0x0180, 0x0020, - 0x080c, 0x256a, 0x900e, 0x0028, 0x080c, 0x629c, 0x1dc8, 0x2009, - 0x0002, 0x2019, 0x0028, 0x080c, 0x2dfb, 0x9006, 0x0019, 0x001e, - 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, - 0xbce5, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072, - 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, - 0x6004, 0x0006, 0x6028, 0x0006, 0x0016, 0x6138, 0x6050, 0x9084, - 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a, 0x20a9, 0x0012, 0x1d04, - 0x6cbf, 0x2091, 0x6000, 0x1f04, 0x6cbf, 0x602f, 0x0100, 0x602f, - 0x0000, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x613a, - 0x001e, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e, - 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, - 0x0001, 0x2001, 0x0001, 0x080c, 0x254a, 0x2001, 0x00a0, 0x0006, - 0x080c, 0xbcec, 0x000e, 0x0130, 0x080c, 0x29a5, 0x9006, 0x080c, - 0x29b1, 0x0010, 0x080c, 0x2987, 0x000e, 0x6052, 0x6050, 0x0006, - 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2845, 0x00fe, - 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, + 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, + 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, + 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, + 0x080c, 0x81a6, 0x002e, 0x00ee, 0x0005, 0x0006, 0xa87c, 0x0006, + 0xa867, 0x0103, 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x001d, 0x20a0, 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa87e, + 0x000e, 0xa87a, 0xa982, 0x0005, 0x2071, 0x1910, 0x7004, 0x0002, + 0x6ca6, 0x6ca7, 0x6d92, 0x6ca7, 0x0dd5, 0x6d92, 0x0005, 0x2001, + 0x1948, 0x2004, 0x0002, 0x6cb1, 0x6cb1, 0x6d2b, 0x6d2c, 0x6cb1, + 0x6d2c, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6db2, 0x701c, 0x904d, + 0x0508, 0xa84c, 0x9005, 0x0904, 0x6cfc, 0x0e04, 0x6cda, 0xa94c, + 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, + 0xa870, 0x708a, 0xa850, 0x9082, 0x0019, 0x1278, 0x2091, 0x4080, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1192, 0x2071, 0x1910, + 0x080c, 0x6d93, 0x012e, 0x0804, 0x6d2a, 0xa850, 0x9082, 0x001c, + 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6, 0x0136, 0x01c6, + 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868, 0x20a8, 0xa860, + 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003, 0x015e, 0x01ce, + 0x013e, 0x01de, 0x014e, 0x0890, 0x2001, 0x005b, 0x2004, 0x9094, + 0x0780, 0x190c, 0x6da7, 0xd09c, 0x2071, 0x1910, 0x1510, 0x2071, + 0x1910, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, + 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, + 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1910, 0x701c, + 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, + 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6, 0x2008, 0x2069, 0x19f8, + 0x683c, 0x9005, 0x0760, 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, + 0x1815, 0x2004, 0x2009, 0x1abf, 0x210c, 0x9102, 0x1500, 0x0126, + 0x2091, 0x8000, 0x2069, 0x0050, 0x693c, 0x6838, 0x9106, 0x0190, + 0x0e04, 0x6d5e, 0x2069, 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, + 0x6883, 0x8040, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, + 0x190c, 0x1192, 0x2069, 0x19f8, 0x683f, 0xffff, 0x012e, 0x00de, + 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6e23, 0x701c, 0x904d, 0x0540, + 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x15c9, 0xd09c, 0x1500, + 0x2071, 0x1910, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, + 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, + 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x701c, 0x2048, + 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, + 0x012e, 0x0005, 0x0005, 0x0126, 0x2091, 0x8000, 0x701c, 0x904d, + 0x0160, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, + 0x701a, 0x012e, 0x080c, 0x1032, 0x0005, 0x012e, 0x0005, 0x2091, + 0x8000, 0x0e04, 0x6da9, 0x0006, 0x0016, 0x2001, 0x8004, 0x0006, + 0x0804, 0x0dde, 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, + 0x01e0, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, + 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1192, 0x2009, 0x1947, + 0x200b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094, 0x0780, + 0x1971, 0xd0a4, 0x0db8, 0x2009, 0x1947, 0x2104, 0x8000, 0x200a, + 0x9082, 0x000f, 0x0e78, 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6, + 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x1830, 0x210c, + 0x918a, 0x0020, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, + 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, + 0x81a6, 0x782c, 0x9094, 0x0780, 0x190c, 0x6da7, 0xd0a4, 0x19f0, + 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, + 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, + 0xd084, 0x190c, 0x1192, 0x2009, 0x1947, 0x200b, 0x0000, 0x00ee, + 0x00fe, 0x009e, 0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, + 0x01b8, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, + 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1192, 0x00fe, 0x0005, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6da7, 0xd0a4, 0x0db8, 0x00e6, + 0x2071, 0x1800, 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, + 0x70c0, 0x8000, 0x70c2, 0x080c, 0x81a6, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6da7, 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, + 0x2069, 0x1948, 0x6808, 0x690a, 0x2069, 0x19f8, 0x9102, 0x1118, + 0x683c, 0x9005, 0x1328, 0x2001, 0x1949, 0x200c, 0x810d, 0x693e, + 0x00de, 0x00ee, 0x00fe, 0x0005, 0x7098, 0x908a, 0x0029, 0x1a0c, + 0x0dd5, 0x9082, 0x001d, 0x001b, 0x6027, 0x1e00, 0x0005, 0x6f47, + 0x6ed1, 0x6eed, 0x6f15, 0x6f36, 0x6f76, 0x6f88, 0x6eed, 0x6f5e, + 0x6e8c, 0x6eba, 0x6e8b, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, + 0x9005, 0x1180, 0x6808, 0x9005, 0x1518, 0x709b, 0x0028, 0x2069, + 0x198d, 0x2d04, 0x7002, 0x080c, 0x72b7, 0x6028, 0x9085, 0x0600, + 0x602a, 0x00b0, 0x709b, 0x0028, 0x2069, 0x198d, 0x2d04, 0x7002, + 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, + 0x2071, 0x1a60, 0x080c, 0x19ff, 0x005e, 0x004e, 0x003e, 0x00ee, + 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, + 0x6808, 0x9005, 0x1160, 0x709b, 0x0028, 0x2069, 0x198d, 0x2d04, + 0x7002, 0x080c, 0x7352, 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, + 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2ba1, 0x000e, 0x6124, + 0xd1e4, 0x1190, 0x080c, 0x6ff5, 0xd1d4, 0x1160, 0xd1dc, 0x1138, + 0xd1cc, 0x0150, 0x709b, 0x0020, 0x080c, 0x6ff5, 0x0028, 0x709b, + 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, + 0x2ba1, 0x6124, 0xd1cc, 0x11d8, 0xd1dc, 0x11b0, 0xd1e4, 0x1188, + 0x9184, 0x1e00, 0x11c8, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, + 0x080c, 0x71a9, 0x2001, 0x0080, 0x080c, 0x2ba1, 0x709b, 0x0028, + 0x0058, 0x709b, 0x001e, 0x0040, 0x709b, 0x001d, 0x0028, 0x709b, + 0x0020, 0x0010, 0x709b, 0x001f, 0x0005, 0x60e3, 0x0001, 0x600c, + 0xc0b4, 0x600e, 0x080c, 0x71a9, 0x2001, 0x0080, 0x080c, 0x2ba1, + 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, + 0x1e00, 0x1158, 0x709b, 0x0028, 0x0040, 0x709b, 0x001e, 0x0028, + 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x2001, 0x00a0, + 0x080c, 0x2ba1, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, + 0x1a29, 0x709b, 0x001e, 0x0010, 0x709b, 0x001d, 0x0005, 0x080c, + 0x7078, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x6ff5, 0x0016, 0x080c, + 0x1a29, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x709b, 0x001e, + 0x0020, 0x709b, 0x001f, 0x080c, 0x6ff5, 0x0005, 0x0006, 0x2001, + 0x00a0, 0x080c, 0x2ba1, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, + 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028, + 0x709b, 0x001d, 0x0010, 0x709b, 0x0021, 0x0005, 0x080c, 0x7078, + 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, + 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, + 0x0006, 0x2001, 0x0090, 0x080c, 0x2ba1, 0x000e, 0x6124, 0xd1d4, + 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x709b, + 0x001e, 0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, + 0x709b, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, + 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, + 0x080c, 0x717d, 0x11d8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0, + 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c, 0x2aea, 0x6024, 0xd0cc, + 0x0148, 0x2001, 0x00a0, 0x080c, 0x2ba1, 0x080c, 0x7465, 0x080c, + 0x5df8, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x7197, + 0x0150, 0x080c, 0x718e, 0x1138, 0x2001, 0x0001, 0x080c, 0x269c, + 0x080c, 0x7155, 0x00a0, 0x080c, 0x7075, 0x0178, 0x2001, 0x0001, + 0x080c, 0x269c, 0x7098, 0x9086, 0x001e, 0x0120, 0x7098, 0x9086, + 0x0022, 0x1118, 0x709b, 0x0025, 0x0010, 0x709b, 0x0021, 0x012e, + 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x7006, + 0x080c, 0x835c, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, + 0x7006, 0x080c, 0x8353, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, + 0x0016, 0x080c, 0x9ffc, 0x2071, 0x1800, 0x080c, 0x6fa3, 0x001e, + 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, + 0x00e6, 0x00f6, 0x0126, 0x080c, 0x9ffc, 0x2061, 0x0100, 0x2069, + 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, + 0x2011, 0x0003, 0x080c, 0xa349, 0x2011, 0x0002, 0x080c, 0xa353, + 0x080c, 0xa236, 0x080c, 0x8308, 0x0036, 0x901e, 0x080c, 0xa2ac, + 0x003e, 0x60e3, 0x0000, 0x080c, 0xe68c, 0x080c, 0xe6a7, 0x2009, + 0x0004, 0x080c, 0x2af0, 0x080c, 0x2a0b, 0x2001, 0x1800, 0x2003, + 0x0004, 0x6027, 0x0008, 0x2011, 0x7006, 0x080c, 0x835c, 0x080c, + 0x7197, 0x0118, 0x9006, 0x080c, 0x2ba1, 0x080c, 0x0bae, 0x2001, + 0x0001, 0x080c, 0x269c, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, + 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x7013, + 0x2071, 0x19f8, 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, + 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, + 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x0170, 0x2001, 0x00c0, + 0x080c, 0x2ba1, 0x0156, 0x20a9, 0x002d, 0x1d04, 0x7085, 0x2091, + 0x6000, 0x1f04, 0x7085, 0x015e, 0x0005, 0x00c6, 0x00d6, 0x00e6, + 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x7474, + 0x2001, 0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, + 0x080c, 0x2764, 0x9006, 0x080c, 0x2ba1, 0x080c, 0x5cb7, 0x6027, + 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, - 0x6020, 0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c, 0xc1c5, - 0x2102, 0x0804, 0x6d7f, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, - 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001, 0x0090, - 0x080c, 0x2987, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518, 0x1d04, - 0x6d2c, 0x2091, 0x6000, 0x1f04, 0x6d2c, 0x2011, 0x0003, 0x080c, - 0x92ec, 0x2011, 0x0002, 0x080c, 0x92f6, 0x080c, 0x91de, 0x901e, - 0x080c, 0x9254, 0x2001, 0x00a0, 0x080c, 0x2987, 0x080c, 0x6f2a, - 0x080c, 0x5a21, 0x080c, 0xbcec, 0x0110, 0x080c, 0x0d27, 0x9085, - 0x0001, 0x0498, 0x86ff, 0x1110, 0x080c, 0x189c, 0x60e3, 0x0000, - 0x2001, 0x193e, 0x2004, 0x080c, 0x254a, 0x60e2, 0x2001, 0x0080, - 0x080c, 0x2987, 0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, - 0x080c, 0x28d0, 0x6024, 0x910c, 0x0138, 0x1d04, 0x6d64, 0x2091, - 0x6000, 0x1f04, 0x6d64, 0x0808, 0x6028, 0x9085, 0x1e00, 0x602a, - 0x70ac, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, - 0xbcec, 0x0110, 0x080c, 0x0d27, 0x9006, 0x00ee, 0x00de, 0x00ce, - 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, - 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, - 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, - 0x1904, 0x6de1, 0x2001, 0x0088, 0x080c, 0x2987, 0x9006, 0x60e2, - 0x6886, 0x080c, 0x254a, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, - 0x6808, 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, - 0x0400, 0x2069, 0x195e, 0x7000, 0x206a, 0x7093, 0x0026, 0x7003, - 0x0001, 0x20a9, 0x0002, 0x1d04, 0x6dc3, 0x2091, 0x6000, 0x1f04, - 0x6dc3, 0x0804, 0x6e0f, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, - 0x1e00, 0x2009, 0x1e00, 0x080c, 0x28d0, 0x6024, 0x910c, 0x0508, - 0x9084, 0x1a00, 0x11f0, 0x1d04, 0x6dcf, 0x2091, 0x6000, 0x1f04, - 0x6dcf, 0x2011, 0x0003, 0x080c, 0x92ec, 0x2011, 0x0002, 0x080c, - 0x92f6, 0x080c, 0x91de, 0x901e, 0x080c, 0x9254, 0x2001, 0x00a0, - 0x080c, 0x2987, 0x080c, 0x6f2a, 0x080c, 0x5a21, 0x9085, 0x0001, - 0x00b0, 0x2001, 0x0080, 0x080c, 0x2987, 0x2069, 0x0140, 0x60e3, - 0x0000, 0x70ac, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, - 0x2001, 0x193e, 0x2004, 0x080c, 0x254a, 0x60e2, 0x9006, 0x00ee, + 0x2001, 0x197d, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, + 0x0158, 0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, + 0x7145, 0x709b, 0x0022, 0x0040, 0x709b, 0x0021, 0x0028, 0x709b, + 0x0023, 0x0010, 0x709b, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, + 0x2001, 0x0001, 0x080c, 0x2764, 0x0026, 0x080c, 0xaadc, 0x002e, + 0x7000, 0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, + 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, + 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c, 0xcf18, 0x0118, 0x9006, + 0x080c, 0x2bcb, 0x0804, 0x7151, 0x6800, 0x9084, 0x00a1, 0xc0bd, + 0x6802, 0x080c, 0x2aea, 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, + 0x080c, 0x2ba1, 0x1f04, 0x70ef, 0x080c, 0x71d4, 0x012e, 0x015e, + 0x080c, 0x718e, 0x01a8, 0x6044, 0x9005, 0x0168, 0x6050, 0x0006, + 0x9085, 0x0020, 0x6052, 0x080c, 0x71d4, 0x9006, 0x8001, 0x1df0, + 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x71d4, + 0x080c, 0xcf18, 0x0118, 0x9006, 0x080c, 0x2bcb, 0x0016, 0x0026, + 0x7000, 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x7013, + 0x080c, 0x831a, 0x002e, 0x001e, 0x080c, 0x819d, 0x7034, 0xc085, + 0x7036, 0x2001, 0x197d, 0x2003, 0x0004, 0x080c, 0x6e74, 0x080c, + 0x718e, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, + 0x746a, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, + 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x81b4, + 0x080c, 0x81a6, 0x080c, 0x7474, 0x2001, 0x196d, 0x2003, 0x0000, + 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c, 0x2764, 0x9006, 0x080c, + 0x2ba1, 0x6043, 0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b, + 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x197c, + 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x54bb, + 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c, + 0x54bb, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006, + 0x080c, 0x54bb, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005, + 0x0006, 0x080c, 0x54bb, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e, + 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013, + 0x0180, 0x0020, 0x080c, 0x2784, 0x900e, 0x0028, 0x080c, 0x672f, + 0x1dc8, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x3039, 0x9006, + 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, + 0x0130, 0x080c, 0xcf11, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, + 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, + 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x0016, 0x6138, + 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a, 0x20a9, + 0x0012, 0x1d04, 0x71e9, 0x2091, 0x6000, 0x1f04, 0x71e9, 0x602f, + 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, + 0x6052, 0x613a, 0x001e, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, + 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, + 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x2764, 0x2001, + 0x00a0, 0x0006, 0x080c, 0xcf18, 0x000e, 0x0130, 0x080c, 0x2bbf, + 0x9006, 0x080c, 0x2bcb, 0x0010, 0x080c, 0x2ba1, 0x000e, 0x6052, + 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, + 0x2a5f, 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, + 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, + 0x2071, 0x1800, 0x6020, 0x9084, 0x0080, 0x0138, 0x2001, 0x180c, + 0x200c, 0xc1c5, 0x2102, 0x0804, 0x72a9, 0x2001, 0x180c, 0x200c, + 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, + 0x2001, 0x0090, 0x080c, 0x2ba1, 0x20a9, 0x0366, 0x6024, 0xd0cc, + 0x1518, 0x1d04, 0x7256, 0x2091, 0x6000, 0x1f04, 0x7256, 0x2011, + 0x0003, 0x080c, 0xa349, 0x2011, 0x0002, 0x080c, 0xa353, 0x080c, + 0xa236, 0x901e, 0x080c, 0xa2ac, 0x2001, 0x00a0, 0x080c, 0x2ba1, + 0x080c, 0x7465, 0x080c, 0x5df8, 0x080c, 0xcf18, 0x0110, 0x080c, + 0x0d45, 0x9085, 0x0001, 0x0498, 0x86ff, 0x1110, 0x080c, 0x1a29, + 0x60e3, 0x0000, 0x2001, 0x196d, 0x2004, 0x080c, 0x2764, 0x60e2, + 0x2001, 0x0080, 0x080c, 0x2ba1, 0x20a9, 0x0366, 0x6027, 0x1e00, + 0x2009, 0x1e00, 0x080c, 0x2aea, 0x6024, 0x910c, 0x0138, 0x1d04, + 0x728e, 0x2091, 0x6000, 0x1f04, 0x728e, 0x0808, 0x6028, 0x9085, + 0x1e00, 0x602a, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, + 0x6886, 0x080c, 0xcf18, 0x0110, 0x080c, 0x0d45, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, - 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, 0x01c8, 0x2011, 0x0003, - 0x080c, 0x92ec, 0x2011, 0x0002, 0x080c, 0x92f6, 0x080c, 0x91de, - 0x901e, 0x080c, 0x9254, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, - 0x2987, 0x080c, 0x6f2a, 0x080c, 0x5a21, 0x0804, 0x6eaa, 0x2001, - 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x6ac1, - 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, 0x2987, 0x60e3, 0x0000, - 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180, - 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x195e, - 0x7000, 0x206a, 0x7093, 0x0027, 0x7003, 0x0001, 0x0804, 0x6eaa, - 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x28d0, 0x6024, 0x910c, - 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x6e68, 0x0006, 0x0016, - 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x7bae, 0x00ee, 0x00de, 0x00ce, - 0x001e, 0x000e, 0x00e6, 0x2071, 0x19c9, 0x7018, 0x00ee, 0x9005, - 0x19f8, 0x0500, 0x0026, 0x2011, 0x6ad9, 0x080c, 0x7c4a, 0x2011, - 0x6acc, 0x080c, 0x7d1b, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, - 0x70ac, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, - 0x193e, 0x2004, 0x080c, 0x254a, 0x60e2, 0x2001, 0x180c, 0x200c, - 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, - 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, - 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c, 0xbce5, 0x1904, - 0x6f18, 0x7130, 0xd184, 0x1170, 0x080c, 0x2f86, 0x0138, 0xc18d, - 0x7132, 0x2011, 0x1854, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, - 0x0904, 0x6f18, 0x2011, 0x1854, 0x220c, 0xd1a4, 0x0538, 0x0016, - 0x2019, 0x000e, 0x080c, 0xcf62, 0x0156, 0x00b6, 0x20a9, 0x007f, - 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c, - 0x5f7e, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c, - 0xcfe6, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x7e3e, 0x001e, - 0x8108, 0x1f04, 0x6ee1, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148, - 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x2dfb, 0x001e, - 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x5f7e, - 0x1110, 0x080c, 0x5a3b, 0x8108, 0x1f04, 0x6f0e, 0x00be, 0x015e, - 0x080c, 0x189c, 0x080c, 0x9947, 0x60e3, 0x0000, 0x080c, 0x5a21, - 0x080c, 0x6b8a, 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, - 0x015e, 0x0005, 0x2001, 0x194e, 0x2003, 0x0001, 0x0005, 0x2001, - 0x194e, 0x2003, 0x0000, 0x0005, 0x2001, 0x194d, 0x2003, 0xaaaa, - 0x0005, 0x2001, 0x194d, 0x2003, 0x0000, 0x0005, 0x2071, 0x18f0, - 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x0fee, 0x090c, 0x0db2, - 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x0fee, 0x090c, 0x0db2, - 0xa8ab, 0xdcb0, 0x2900, 0x7052, 0xa867, 0x0000, 0xa86b, 0x0001, - 0xa89f, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040, 0x6848, 0x9005, - 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840, 0x9005, 0x0150, 0x04a1, - 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101, 0x7006, 0x9006, 0x7012, - 0x7016, 0x6850, 0x7002, 0x6854, 0x7006, 0x6858, 0x700a, 0x685c, - 0x700e, 0x6840, 0x9005, 0x1110, 0x7012, 0x7016, 0x6848, 0x701a, - 0x701c, 0x9085, 0x0040, 0x701e, 0x2001, 0x0019, 0x7036, 0x702b, - 0x0001, 0x2001, 0x0004, 0x200c, 0x918c, 0xfff7, 0x918d, 0x8000, - 0x2102, 0x00d6, 0x2069, 0x18f0, 0x6807, 0x0001, 0x00de, 0x080c, - 0x74e5, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156, 0x20a9, 0x0006, - 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, 0x0008, 0x1110, 0x818d, - 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x6fa0, 0x015e, 0x0005, 0x2079, - 0x0040, 0x2071, 0x18f0, 0x7004, 0x0002, 0x6fbf, 0x6fc0, 0x6ff7, - 0x7052, 0x714d, 0x6fbd, 0x6fbd, 0x7177, 0x080c, 0x0db2, 0x0005, - 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c, 0x7571, 0xd0a4, - 0x01f0, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, - 0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, 0x2001, 0x1800, 0x200c, - 0x9186, 0x0003, 0x1160, 0x7104, 0x9186, 0x0004, 0x0140, 0x9186, - 0x0007, 0x0128, 0x9186, 0x0003, 0x19e8, 0x080c, 0x7052, 0x782c, - 0xd09c, 0x090c, 0x74e5, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100, - 0x003b, 0x0c18, 0x080c, 0x7088, 0x0c90, 0x00e3, 0x08f0, 0x0005, - 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, - 0x70aa, 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, - 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, - 0x7088, 0x7088, 0x7088, 0x7088, 0x7094, 0x7088, 0x724c, 0x7088, - 0x7088, 0x7088, 0x7088, 0x7088, 0x7094, 0x728d, 0x72ce, 0x7315, - 0x7329, 0x7088, 0x7088, 0x70aa, 0x7094, 0x7088, 0x7088, 0x7121, - 0x73d4, 0x73ef, 0x7088, 0x70aa, 0x7088, 0x7088, 0x7088, 0x7088, - 0x7117, 0x73ef, 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, - 0x7088, 0x7088, 0x7088, 0x70be, 0x7088, 0x7088, 0x7088, 0x7088, - 0x7088, 0x7088, 0x7088, 0x7088, 0x7088, 0x7515, 0x7088, 0x7088, - 0x7088, 0x7088, 0x7088, 0x70d2, 0x7088, 0x7088, 0x7088, 0x7088, - 0x7088, 0x7088, 0x2079, 0x0040, 0x7004, 0x9086, 0x0003, 0x1198, - 0x782c, 0x080c, 0x750e, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006, - 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x001a, 0x1210, - 0x002b, 0x0c50, 0x00e9, 0x080c, 0x74e5, 0x0005, 0x7088, 0x7094, - 0x7238, 0x7088, 0x7094, 0x7088, 0x7094, 0x7094, 0x7088, 0x7094, - 0x7238, 0x7094, 0x7094, 0x7094, 0x7094, 0x7094, 0x7088, 0x7094, - 0x7238, 0x7088, 0x7088, 0x7094, 0x7088, 0x7088, 0x7088, 0x7094, - 0x00e6, 0x2071, 0x18f0, 0x2009, 0x0400, 0x0071, 0x00ee, 0x0005, - 0x2009, 0x1000, 0x0049, 0x0005, 0x2009, 0x2000, 0x0029, 0x0005, - 0x2009, 0x0800, 0x0009, 0x0005, 0x7007, 0x0001, 0xa868, 0x9084, - 0x00ff, 0x9105, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6536, - 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001, - 0x1120, 0x7007, 0x0001, 0x0804, 0x71f6, 0x7007, 0x0003, 0x7012, - 0x2900, 0x7016, 0x701a, 0x704b, 0x71f6, 0x0005, 0xa864, 0x8007, - 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, - 0x7211, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, - 0x7211, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, - 0x1904, 0x7090, 0x7007, 0x0001, 0x2009, 0x1832, 0x210c, 0x81ff, + 0x2071, 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, + 0x2004, 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a76, + 0x2d04, 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, + 0x0120, 0x6884, 0x9005, 0x1904, 0x731c, 0x2001, 0x0088, 0x080c, + 0x2ba1, 0x9006, 0x60e2, 0x6886, 0x080c, 0x2764, 0x2069, 0x0200, + 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x01c0, 0x6028, 0x9084, + 0xfbff, 0x602a, 0x6027, 0x0400, 0x2069, 0x198d, 0x7000, 0x206a, + 0x709b, 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x72fe, + 0x2091, 0x6000, 0x1f04, 0x72fe, 0x0804, 0x734a, 0x2069, 0x0140, + 0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2aea, + 0x6024, 0x910c, 0x0508, 0x9084, 0x1a00, 0x11f0, 0x1d04, 0x730a, + 0x2091, 0x6000, 0x1f04, 0x730a, 0x2011, 0x0003, 0x080c, 0xa349, + 0x2011, 0x0002, 0x080c, 0xa353, 0x080c, 0xa236, 0x901e, 0x080c, + 0xa2ac, 0x2001, 0x00a0, 0x080c, 0x2ba1, 0x080c, 0x7465, 0x080c, + 0x5df8, 0x9085, 0x0001, 0x00b0, 0x2001, 0x0080, 0x080c, 0x2ba1, + 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, + 0x0001, 0x0008, 0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x2764, + 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, + 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, + 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, + 0x01c8, 0x2011, 0x0003, 0x080c, 0xa349, 0x2011, 0x0002, 0x080c, + 0xa353, 0x080c, 0xa236, 0x901e, 0x080c, 0xa2ac, 0x2069, 0x0140, + 0x2001, 0x00a0, 0x080c, 0x2ba1, 0x080c, 0x7465, 0x080c, 0x5df8, + 0x0804, 0x73e5, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, + 0x2102, 0x080c, 0x6ffb, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, + 0x2ba1, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, + 0x6808, 0x9005, 0x0180, 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, + 0x0200, 0x2069, 0x198d, 0x7000, 0x206a, 0x709b, 0x0027, 0x7003, + 0x0001, 0x0804, 0x73e5, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, + 0x2aea, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, + 0x73a3, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x81e5, + 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19f8, + 0x7018, 0x00ee, 0x9005, 0x19f8, 0x0500, 0x0026, 0x2011, 0x7013, + 0x080c, 0x8285, 0x2011, 0x7006, 0x080c, 0x835c, 0x002e, 0x2069, + 0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, + 0x0008, 0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x2764, 0x60e2, + 0x2001, 0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, + 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, + 0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, + 0x080c, 0xcf11, 0x1904, 0x7453, 0x7130, 0xd184, 0x1170, 0x080c, + 0x31c4, 0x0138, 0xc18d, 0x7132, 0x2011, 0x1848, 0x2214, 0xd2ac, + 0x1120, 0x7030, 0xd08c, 0x0904, 0x7453, 0x2011, 0x1848, 0x220c, + 0xd1a4, 0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xe1f4, 0x0156, + 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, + 0x0080, 0x0188, 0x080c, 0x63cd, 0x1170, 0x2120, 0x9006, 0x0016, + 0x2009, 0x000e, 0x080c, 0xe280, 0x2009, 0x0001, 0x2011, 0x0100, + 0x080c, 0x846c, 0x001e, 0x8108, 0x1f04, 0x741c, 0x00be, 0x015e, + 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, + 0x080c, 0x3039, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, + 0x900e, 0x080c, 0x63cd, 0x1110, 0x080c, 0x5e12, 0x8108, 0x1f04, + 0x7449, 0x00be, 0x015e, 0x080c, 0x1a29, 0x080c, 0xaadc, 0x60e3, + 0x0000, 0x080c, 0x5df8, 0x080c, 0x70af, 0x00ee, 0x00ce, 0x004e, + 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x197d, 0x2003, + 0x0001, 0x0005, 0x2001, 0x197d, 0x2003, 0x0000, 0x0005, 0x2001, + 0x197c, 0x2003, 0xaaaa, 0x0005, 0x2001, 0x197c, 0x2003, 0x0000, + 0x0005, 0x2071, 0x18fa, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, + 0x1019, 0x090c, 0x0dd5, 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c, + 0x1019, 0x090c, 0x0dd5, 0xa8ab, 0xdcb0, 0x2900, 0x7052, 0xa867, + 0x0000, 0xa86b, 0x0001, 0xa89f, 0x0000, 0x0005, 0x00e6, 0x2071, + 0x0040, 0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840, + 0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101, + 0x7006, 0x9006, 0x7012, 0x7016, 0x6850, 0x7002, 0x6854, 0x7006, + 0x6858, 0x700a, 0x685c, 0x700e, 0x6840, 0x9005, 0x1110, 0x7012, + 0x7016, 0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x2001, + 0x0019, 0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c, 0x918c, + 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18fa, 0x6807, + 0x0001, 0x00de, 0x080c, 0x7a51, 0x9006, 0x00ee, 0x0005, 0x900e, + 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, + 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x74db, + 0x015e, 0x0005, 0x2079, 0x0040, 0x2071, 0x18fa, 0x7004, 0x0002, + 0x74fa, 0x74fb, 0x7532, 0x758d, 0x769d, 0x74f8, 0x74f8, 0x76c7, + 0x080c, 0x0dd5, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, + 0x190c, 0x7b33, 0xd0a4, 0x01f0, 0x7824, 0x2048, 0x9006, 0xa802, + 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, + 0x2001, 0x1800, 0x200c, 0x9186, 0x0003, 0x1160, 0x7104, 0x9186, + 0x0004, 0x0140, 0x9186, 0x0007, 0x0128, 0x9186, 0x0003, 0x19e8, + 0x080c, 0x758d, 0x782c, 0xd09c, 0x090c, 0x7a51, 0x0005, 0x9082, + 0x005a, 0x1218, 0x2100, 0x003b, 0x0c18, 0x080c, 0x75c3, 0x0c90, + 0x00e3, 0x08f0, 0x0005, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, + 0x75c3, 0x75c3, 0x75c3, 0x75e5, 0x75c3, 0x75c3, 0x75c3, 0x75c3, + 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, + 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75cf, + 0x75c3, 0x77b8, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75cf, + 0x77f9, 0x783a, 0x7881, 0x7895, 0x75c3, 0x75c3, 0x75e5, 0x75cf, + 0x75f9, 0x75c3, 0x7671, 0x7940, 0x795b, 0x75c3, 0x75e5, 0x75c3, + 0x75f9, 0x75c3, 0x75c3, 0x7667, 0x795b, 0x75c3, 0x75c3, 0x75c3, + 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x760d, 0x75c3, + 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, + 0x7ad7, 0x75c3, 0x7a81, 0x75c3, 0x7a81, 0x75c3, 0x7622, 0x75c3, + 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x75c3, 0x2079, 0x0040, 0x7004, + 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x7a7a, 0xd0a4, 0x0170, + 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, + 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7a51, + 0x0005, 0x75c3, 0x75cf, 0x77a4, 0x75c3, 0x75cf, 0x75c3, 0x75cf, + 0x75cf, 0x75c3, 0x75cf, 0x77a4, 0x75cf, 0x75cf, 0x75cf, 0x75cf, + 0x75cf, 0x75c3, 0x75cf, 0x77a4, 0x75c3, 0x75c3, 0x75cf, 0x75c3, + 0x75c3, 0x75c3, 0x75cf, 0x00e6, 0x2071, 0x18fa, 0x2009, 0x0400, + 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005, 0x2009, + 0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005, 0x7007, + 0x0001, 0xa868, 0x9084, 0x00ff, 0x9105, 0xa86a, 0x0126, 0x2091, + 0x8000, 0x080c, 0x6a46, 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, + 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7746, + 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7746, + 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, + 0x7007, 0x0001, 0x0804, 0x7761, 0x7007, 0x0003, 0x7012, 0x2900, + 0x7016, 0x701a, 0x704b, 0x7761, 0x0005, 0xa864, 0x8007, 0x9084, + 0x00ff, 0x0904, 0x75cb, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, + 0x777d, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, + 0x777d, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, + 0x1904, 0x75cb, 0x7007, 0x0001, 0x2009, 0x1834, 0x210c, 0x81ff, 0x11a8, 0xa868, 0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, - 0x5c50, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, - 0xa87a, 0xa982, 0x080c, 0x6536, 0x012e, 0x0ca0, 0xa994, 0x9186, + 0x608c, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, + 0xa87a, 0xa982, 0x080c, 0x6a46, 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071, 0x0d38, 0x9186, 0x0064, 0x0d20, 0x9186, 0x007c, 0x0d08, 0x9186, 0x0028, 0x09f0, 0x9186, 0x0038, 0x09d8, 0x9186, 0x0078, 0x09c0, 0x9186, 0x005f, 0x09a8, 0x9186, 0x0056, 0x0990, 0xa897, 0x4005, 0xa89b, 0x0001, 0x2001, 0x0030, 0x900e, 0x08a0, 0xa87c, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, - 0x7406, 0x2900, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa860, 0x20e0, + 0x7972, 0x2900, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0030, 0x2098, 0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0023, 0x20a0, 0x4003, 0xa888, 0x7012, 0x9082, - 0x0401, 0x1a04, 0x7098, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x7098, - 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x71b4, - 0x0018, 0x9280, 0x71aa, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, - 0x7195, 0x080c, 0x0fee, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, + 0x0401, 0x1a04, 0x75d3, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x75d3, + 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x7704, + 0x0018, 0x9280, 0x76fa, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, + 0x76e5, 0x080c, 0x1019, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, - 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c, 0x10b5, 0xa06c, + 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c, 0x10e0, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, - 0x0005, 0x7020, 0x2048, 0x080c, 0x1007, 0x7014, 0x2048, 0x0804, - 0x7098, 0x7020, 0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, - 0x2048, 0xa906, 0x711a, 0x0804, 0x714d, 0x7014, 0x2048, 0x7007, + 0x0005, 0x7020, 0x2048, 0x080c, 0x1032, 0x7014, 0x2048, 0x0804, + 0x75d3, 0x7020, 0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, + 0x2048, 0xa906, 0x711a, 0x0804, 0x769d, 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, - 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x7406, - 0x0804, 0x71f6, 0x71ac, 0x71b0, 0x0002, 0x001d, 0x0007, 0x0004, + 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x7972, + 0x0804, 0x7746, 0x76fc, 0x7700, 0x0002, 0x001d, 0x0007, 0x0004, 0x000a, 0x001b, 0x0005, 0x0006, 0x000a, 0x001d, 0x0005, 0x0004, 0x0076, 0x0066, 0xafb8, 0xaebc, 0xa804, 0x2050, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0de, 0xb0b8, 0xb0d2, 0xb0b4, 0xb0ce, 0xb6da, 0xb7d6, @@ -3440,1419 +3610,1812 @@ 0xb094, 0xb09e, 0xb6aa, 0xb7a6, 0xb090, 0xb09a, 0xb08c, 0xb096, 0xb088, 0xb08a, 0xb084, 0xb086, 0xb692, 0xb78e, 0xb080, 0xb082, 0xb07c, 0xb07e, 0xb078, 0xb072, 0xb074, 0xb06e, 0xb67a, 0xb776, - 0xb004, 0x9055, 0x1958, 0x006e, 0x007e, 0x0005, 0x2009, 0x1832, - 0x210c, 0x81ff, 0x1178, 0x080c, 0x5a9d, 0x1108, 0x0005, 0x080c, - 0x6770, 0x0126, 0x2091, 0x8000, 0x080c, 0xb8e3, 0x080c, 0x6536, - 0x012e, 0x0ca0, 0x080c, 0xbce5, 0x1d70, 0x2001, 0x0028, 0x900e, - 0x0c70, 0x2009, 0x1832, 0x210c, 0x81ff, 0x11d8, 0xa888, 0x9005, - 0x01e0, 0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x5bb2, - 0x1138, 0x0005, 0x9006, 0xa87a, 0x080c, 0x5b2d, 0x1108, 0x0005, - 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, 0x080c, 0x6536, 0x012e, - 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80, - 0x7018, 0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001, - 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007, - 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa974, - 0xa878, 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001, - 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002, - 0x0160, 0x9005, 0x11d8, 0xa974, 0x080c, 0x5f7e, 0x11b8, 0x0066, - 0xae80, 0x080c, 0x608e, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, - 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x5f7e, 0x1110, - 0x080c, 0x618e, 0x8108, 0x1f04, 0x7275, 0x00ce, 0xa87c, 0xd084, - 0x1120, 0x080c, 0x1007, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, - 0x080c, 0x6536, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, - 0x7007, 0x0001, 0x080c, 0x62a0, 0x0580, 0x2061, 0x1a3e, 0x6100, - 0xd184, 0x0178, 0xa888, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084, - 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, - 0x00c8, 0x2011, 0x0001, 0xa890, 0x9005, 0x1110, 0x2001, 0x001e, - 0x8000, 0x6016, 0xa888, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa888, - 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0xa888, 0x8000, 0x1108, - 0xc28d, 0x6202, 0x012e, 0x0804, 0x74cf, 0x012e, 0x0804, 0x74c9, - 0x012e, 0x0804, 0x74c3, 0x012e, 0x0804, 0x74c6, 0x0126, 0x2091, - 0x8000, 0x7007, 0x0001, 0x080c, 0x62a0, 0x05e0, 0x2061, 0x1a3e, - 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac78, - 0x9484, 0x0003, 0x0170, 0xa988, 0x918c, 0x00ff, 0x8001, 0x1120, - 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212, - 0x02f0, 0x9484, 0x000c, 0x0188, 0xa988, 0x810f, 0x918c, 0x00ff, - 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082, - 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0xa890, 0x9005, 0x0110, - 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x74cf, 0x012e, - 0x0804, 0x74cc, 0x012e, 0x0804, 0x74c9, 0x0126, 0x2091, 0x8000, - 0x7007, 0x0001, 0x2061, 0x1a3e, 0x6300, 0xd38c, 0x1120, 0x6308, - 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x74dd, 0x012e, 0x0804, - 0x74cc, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, - 0xa87c, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a3e, 0x6000, 0x9084, - 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, - 0x9065, 0x0598, 0x2001, 0x1832, 0x2004, 0x9005, 0x0118, 0x080c, - 0x9a06, 0x0068, 0x6017, 0xf400, 0x605b, 0x0000, 0xa97c, 0xd1a4, - 0x0110, 0xa980, 0x615a, 0x2009, 0x0041, 0x080c, 0x9a50, 0xa988, - 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, - 0xfdff, 0x080c, 0x7e3e, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, - 0x1a3e, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, - 0x00ce, 0x012e, 0x00be, 0x0804, 0x74cf, 0x00ce, 0x012e, 0x00be, - 0x0804, 0x74c9, 0xa984, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d, - 0x0d18, 0x9186, 0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001, - 0x180c, 0x200c, 0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158, - 0x9186, 0x0029, 0x1d10, 0xa974, 0x080c, 0x5f7e, 0x1968, 0xb800, - 0xc0e4, 0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, - 0x2001, 0x1955, 0x2004, 0x601a, 0x0804, 0x7364, 0xa88c, 0x9065, - 0x0960, 0x00e6, 0xa890, 0x9075, 0x2001, 0x1832, 0x2004, 0x9005, - 0x0150, 0x080c, 0x9a06, 0x8eff, 0x0118, 0x2e60, 0x080c, 0x9a06, - 0x00ee, 0x0804, 0x7364, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, - 0x6007, 0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, - 0x602e, 0xa8a8, 0x6016, 0x6003, 0x0001, 0x080c, 0x8000, 0x080c, - 0x8582, 0x00ee, 0x0804, 0x7364, 0x2061, 0x1a3e, 0x6000, 0xd084, - 0x0190, 0xd08c, 0x1904, 0x74dd, 0x0126, 0x2091, 0x8000, 0x6204, - 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x74dd, 0x012e, 0xa883, - 0x0016, 0x0804, 0x74d6, 0xa883, 0x0007, 0x0804, 0x74d6, 0xa864, - 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, - 0x0069, 0x0005, 0x080c, 0x7090, 0x0040, 0x7007, 0x0003, 0x7012, - 0x2900, 0x7016, 0x701a, 0x704b, 0x7406, 0x0005, 0x00b6, 0x00e6, - 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61c8, 0x81ff, - 0x1904, 0x7488, 0x6130, 0xd194, 0x1904, 0x74b2, 0xa878, 0x2070, - 0x9e82, 0x1cd0, 0x0a04, 0x747c, 0x6060, 0x9e02, 0x1a04, 0x747c, - 0x7120, 0x9186, 0x0006, 0x1904, 0x746e, 0x7010, 0x905d, 0x0904, - 0x7488, 0xb800, 0xd0e4, 0x1904, 0x74ac, 0x2061, 0x1a3e, 0x6100, - 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, - 0x74b5, 0xa883, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, - 0x1198, 0x7116, 0xa87c, 0xd0f4, 0x1904, 0x74b8, 0x080c, 0x5113, - 0xd09c, 0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x7d5e, - 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, - 0xa902, 0x2148, 0xa87c, 0xd0f4, 0x1904, 0x74b8, 0x012e, 0x00ee, - 0x00be, 0x0005, 0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, - 0x74d6, 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, - 0x5f7e, 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, - 0x1118, 0xa883, 0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, - 0x000e, 0x0460, 0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, - 0x080c, 0x5117, 0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1cd0, - 0x02c0, 0x6060, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, - 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, - 0x7000, 0x9086, 0x0007, 0x1904, 0x7412, 0x7003, 0x0002, 0x0804, - 0x7412, 0xa883, 0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, - 0x00be, 0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, - 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xcbad, 0x012e, - 0x00ee, 0x00be, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004, - 0x0040, 0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009, - 0x0001, 0xa884, 0x9084, 0xff00, 0x9105, 0xa886, 0x0126, 0x2091, - 0x8000, 0x080c, 0x6536, 0x012e, 0x0005, 0x080c, 0x1007, 0x0005, - 0x00d6, 0x080c, 0x7d55, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, - 0x2091, 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, - 0x0780, 0x190c, 0x7571, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70b8, - 0x90ea, 0x0040, 0x0278, 0x8001, 0x70ba, 0x702c, 0x2048, 0xa800, - 0x702e, 0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, - 0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, - 0x0780, 0x190c, 0x7571, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036, - 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, - 0x1a04, 0x7562, 0xa97c, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804, - 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, - 0x1108, 0x04b0, 0x2b10, 0x080c, 0x9980, 0x1118, 0x080c, 0x9a23, - 0x05a8, 0x6212, 0xa874, 0x0002, 0x7540, 0x7545, 0x7548, 0x754e, - 0x2019, 0x0002, 0x080c, 0xcf62, 0x0060, 0x080c, 0xcefe, 0x0048, - 0x2019, 0x0002, 0xa980, 0x080c, 0xcf19, 0x0018, 0xa980, 0x080c, - 0xcefe, 0x080c, 0x99d6, 0xa887, 0x0000, 0x0126, 0x2091, 0x8000, - 0x080c, 0x6536, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, - 0x00de, 0x0005, 0xa887, 0x0006, 0x0c80, 0xa887, 0x0002, 0x0c68, - 0xa887, 0x0005, 0x0c50, 0xa887, 0x0004, 0x0c38, 0xa887, 0x0007, - 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7573, 0x0006, 0x0016, 0x2001, - 0x8003, 0x0006, 0x0804, 0x0dbb, 0x0005, 0x00f6, 0x2079, 0x0300, - 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, - 0x210c, 0xd1ec, 0x1120, 0x080c, 0x1461, 0x00fe, 0x0005, 0x2001, - 0x020d, 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, - 0xd08c, 0x0904, 0x75dd, 0x68b8, 0x90aa, 0x0005, 0x0a04, 0x7b73, - 0x7d44, 0x7c40, 0x9584, 0x00f6, 0x1508, 0x9484, 0x7000, 0x0138, - 0x908a, 0x2000, 0x1258, 0x9584, 0x0700, 0x8007, 0x04a8, 0x7000, - 0x9084, 0xff00, 0x9086, 0x8100, 0x0db0, 0x00b0, 0x9484, 0x0fff, - 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, - 0xd31b, 0x080c, 0x7ab8, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, - 0x1118, 0x080c, 0x7b16, 0x19c8, 0xd5a4, 0x0148, 0x0046, 0x0056, - 0x080c, 0x763f, 0x080c, 0x203e, 0x005e, 0x004e, 0x0020, 0x080c, - 0xd31b, 0x7817, 0x0140, 0x080c, 0x7620, 0x2001, 0x19bf, 0x2004, - 0x9005, 0x090c, 0x8582, 0x0005, 0x0002, 0x75f6, 0x78da, 0x75ed, - 0x75ed, 0x75ed, 0x75ed, 0x75ed, 0x75ed, 0x7817, 0x0140, 0x2001, - 0x19bf, 0x2004, 0x9005, 0x090c, 0x8582, 0x0005, 0x7000, 0x908c, - 0xff00, 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x688a, 0x9286, - 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x5137, - 0x0070, 0x080c, 0x765f, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, - 0x7815, 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x79e8, 0x7817, - 0x0140, 0x2001, 0x19bf, 0x2004, 0x9005, 0x090c, 0x8582, 0x0005, - 0x2001, 0x180f, 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, - 0x9086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, - 0x080c, 0x4672, 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, - 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, - 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, - 0xffff, 0x2001, 0x180f, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, - 0x2004, 0x9086, 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, - 0x4672, 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, - 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, - 0x9096, 0x0023, 0x1904, 0x77e6, 0x9186, 0x0023, 0x15c0, 0x080c, - 0x7a7d, 0x0904, 0x77e6, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186, - 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904, - 0x77e6, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009, - 0x0015, 0x080c, 0x9a50, 0x0804, 0x77e6, 0x908e, 0x0214, 0x0118, - 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x9a50, 0x0804, - 0x77e6, 0x908e, 0x0100, 0x1904, 0x77e6, 0x7034, 0x9005, 0x1904, - 0x77e6, 0x2009, 0x0016, 0x080c, 0x9a50, 0x0804, 0x77e6, 0x9186, - 0x0022, 0x1904, 0x77e6, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d4, - 0xd0a4, 0x0528, 0xc0b5, 0x68d6, 0x7100, 0x918c, 0x00ff, 0x6976, - 0x7004, 0x687a, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, - 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x251f, 0x7932, 0x7936, - 0x001e, 0x000e, 0x00fe, 0x080c, 0x24d6, 0x6956, 0x703c, 0x00e6, - 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70ae, 0x00ee, 0x7034, - 0x9005, 0x1904, 0x77e6, 0x2009, 0x0017, 0x0804, 0x77b3, 0x908e, - 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x77e6, 0x080c, 0x6c53, - 0x0120, 0x2009, 0x001d, 0x0804, 0x77b3, 0x68d4, 0xc0a5, 0x68d6, - 0x2009, 0x0030, 0x0804, 0x77b3, 0x908e, 0x0500, 0x1140, 0x7034, - 0x9005, 0x1904, 0x77e6, 0x2009, 0x0018, 0x0804, 0x77b3, 0x908e, - 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x77b3, 0x908e, 0x2110, - 0x1120, 0x2009, 0x001a, 0x0804, 0x77b3, 0x908e, 0x5200, 0x1140, - 0x7034, 0x9005, 0x1904, 0x77e6, 0x2009, 0x001b, 0x0804, 0x77b3, - 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x77e6, 0x2009, - 0x001c, 0x0804, 0x77b3, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, - 0x0804, 0x77b3, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, - 0x77e6, 0x2009, 0x0024, 0x0804, 0x77b3, 0x908c, 0xff00, 0x918e, - 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x180f, 0x2004, 0xd09c, - 0x0904, 0x77b3, 0x080c, 0xc384, 0x1904, 0x77e6, 0x0804, 0x77b1, - 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, - 0x77b3, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x77b3, - 0x908e, 0x5300, 0x1108, 0x0440, 0x908e, 0x6104, 0x1528, 0x2029, - 0x0205, 0x2011, 0x026d, 0x8208, 0x2204, 0x9082, 0x0004, 0x8004, - 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, - 0x080c, 0x4672, 0x004e, 0x8108, 0x0f04, 0x777f, 0x9186, 0x0280, - 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009, 0x0260, 0x0c58, 0x202b, - 0x0000, 0x2009, 0x0023, 0x0478, 0x908e, 0x6000, 0x1118, 0x2009, - 0x003f, 0x0448, 0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0418, - 0x908e, 0x1000, 0x1118, 0x2009, 0x004e, 0x00e8, 0x908e, 0x6300, - 0x1118, 0x2009, 0x004a, 0x00b8, 0x908c, 0xff00, 0x918e, 0x5600, - 0x1118, 0x2009, 0x004f, 0x0078, 0x908c, 0xff00, 0x918e, 0x5700, - 0x1118, 0x2009, 0x0050, 0x0038, 0x2009, 0x001d, 0x6834, 0xd0d4, - 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, - 0x220c, 0x080c, 0x24d6, 0x1568, 0x080c, 0x5f1e, 0x1550, 0xbe12, - 0xbd16, 0x001e, 0x0016, 0xb8b0, 0x9005, 0x1168, 0x9186, 0x0046, - 0x1150, 0x6874, 0x9606, 0x1138, 0x6878, 0x9506, 0x9084, 0xff00, - 0x1110, 0x001e, 0x0098, 0x080c, 0x9980, 0x01a8, 0x2b08, 0x6112, - 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c, 0x1110, - 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x9a50, 0x00ce, 0x00be, - 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180d, 0x2004, 0xd0ec, 0x0120, - 0x2011, 0x8049, 0x080c, 0x4672, 0x080c, 0x9a23, 0x0d90, 0x2b08, - 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016, 0x9186, - 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009, 0x6017, - 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f, 0x0009, - 0x6003, 0x0001, 0x080c, 0x8048, 0x08a0, 0x080c, 0x2f50, 0x1140, - 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108, 0x0009, - 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00, 0x810f, - 0x9186, 0x0033, 0x11e8, 0x080c, 0x7a7d, 0x0904, 0x7872, 0x7124, - 0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005, 0x15d0, - 0x2009, 0x0015, 0x080c, 0x9a50, 0x04a8, 0x908e, 0x0100, 0x1590, - 0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0x9a50, 0x0450, - 0x9186, 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518, 0x2009, - 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, - 0x24d6, 0x11b8, 0x080c, 0x5f1e, 0x11a0, 0xbe12, 0xbd16, 0x080c, - 0x9980, 0x0178, 0x2b08, 0x6112, 0x080c, 0xba69, 0x6023, 0x0004, - 0x7120, 0x610a, 0x001e, 0x080c, 0x9a50, 0x080c, 0x8582, 0x0010, - 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x0046, - 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8, 0x9592, - 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804, - 0x78d4, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, 0x78d4, - 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011, 0x0000, - 0x2019, 0x1835, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9, 0x0800, - 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f, 0x2071, - 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0, 0x9496, - 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600, 0x9706, - 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745, 0x1148, - 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6, 0x0080, - 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x78a9, 0x82ff, 0x1118, 0x9085, - 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, 0x004e, - 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, 0x000f, - 0x0002, 0x78f1, 0x78f1, 0x78f1, 0x7a8f, 0x78f1, 0x78fa, 0x7925, - 0x79b3, 0x78f1, 0x78f1, 0x78f1, 0x78f1, 0x78f1, 0x78f1, 0x78f1, - 0x78f1, 0x7817, 0x0140, 0x2001, 0x19bf, 0x2004, 0x9005, 0x090c, - 0x8582, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120, 0x2160, - 0x9c8c, 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6860, 0x9c02, - 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, - 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a, 0x2009, - 0x0046, 0x080c, 0x9a50, 0x7817, 0x0140, 0x2001, 0x19bf, 0x2004, - 0x9005, 0x090c, 0x8582, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484, - 0x0fff, 0x0904, 0x7989, 0x7110, 0xd1bc, 0x1904, 0x7989, 0x7108, - 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x15b0, - 0x81ff, 0x15a0, 0x9080, 0x2f92, 0x200d, 0x918c, 0xff00, 0x810f, - 0x2001, 0x0080, 0x9106, 0x0904, 0x7989, 0x080c, 0x5f1e, 0x1904, - 0x7989, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04, 0x9294, - 0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0x9980, 0x05e8, 0x2b08, - 0x7028, 0x604a, 0x702c, 0x6046, 0x6112, 0x6023, 0x0006, 0x7120, - 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xc5dc, 0x0408, - 0x080c, 0x62a4, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c, 0x7876, - 0x11c0, 0x0898, 0x080c, 0x9980, 0x2b08, 0x0198, 0x6112, 0x6023, - 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005, - 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x8048, 0x080c, - 0x8582, 0x7817, 0x0140, 0x2001, 0x19bf, 0x2004, 0x9005, 0x090c, - 0x8582, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180d, 0x2004, 0xd0ec, - 0x0120, 0x2011, 0x8049, 0x080c, 0x4672, 0x080c, 0x9a23, 0x0d48, - 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156, - 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x8000, - 0x080c, 0x8582, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7020, - 0x2060, 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0, 0x02a8, 0x6860, - 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, - 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a, - 0x2009, 0x0045, 0x080c, 0x9a50, 0x7817, 0x0140, 0x2001, 0x19bf, - 0x2004, 0x9005, 0x090c, 0x8582, 0x00be, 0x0005, 0x6120, 0x9186, - 0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005, - 0x080c, 0x2f50, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, - 0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, - 0x0005, 0x79ff, 0x7a00, 0x79ff, 0x79ff, 0x7a5f, 0x7a6e, 0x0005, - 0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x7a5d, - 0x700c, 0x7108, 0x080c, 0x24d6, 0x1904, 0x7a5d, 0x080c, 0x5f1e, - 0x1904, 0x7a5d, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c, - 0x62a4, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x7a7d, - 0x00ce, 0x05d8, 0x080c, 0x9980, 0x2b08, 0x05b8, 0x6112, 0x080c, - 0xba69, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, - 0x9a50, 0x0458, 0x080c, 0x62a4, 0x0148, 0x9086, 0x0004, 0x0130, - 0x080c, 0x62ac, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0x9980, - 0x2b08, 0x01d8, 0x6112, 0x080c, 0xba69, 0x6023, 0x0005, 0x7120, - 0x610a, 0x2009, 0x0088, 0x080c, 0x9a50, 0x0078, 0x080c, 0x9980, - 0x2b08, 0x0158, 0x6112, 0x080c, 0xba69, 0x6023, 0x0004, 0x7120, - 0x610a, 0x2009, 0x0001, 0x080c, 0x9a50, 0x00be, 0x0005, 0x7110, - 0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x79de, 0x1130, 0x7124, - 0x610a, 0x2009, 0x0089, 0x080c, 0x9a50, 0x0005, 0x7110, 0xd1bc, - 0x0158, 0x0059, 0x0148, 0x080c, 0x79de, 0x1130, 0x7124, 0x610a, - 0x2009, 0x008a, 0x080c, 0x9a50, 0x0005, 0x7020, 0x2060, 0x9c84, - 0x0007, 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001, 0x1818, 0x2004, - 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, - 0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0007, 0x11b0, - 0x9c82, 0x1cd0, 0x0298, 0x6860, 0x9c02, 0x1280, 0x7008, 0x9084, - 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914, - 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x9a50, 0x7817, 0x0140, - 0x2001, 0x19bf, 0x2004, 0x9005, 0x090c, 0x8582, 0x00be, 0x0005, - 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005, - 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005, - 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086, 0xc000, - 0x05d0, 0x080c, 0x9980, 0x05b8, 0x0066, 0x00c6, 0x0046, 0x2011, - 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x24d6, 0x15a0, 0x080c, - 0x5f1e, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, 0x6012, - 0x080c, 0xba69, 0x080c, 0x0fd5, 0x0510, 0x2900, 0x605a, 0x9006, - 0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, 0x20a9, 0x000e, - 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003, 0x006e, - 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001, 0x080c, - 0x8048, 0x080c, 0x8582, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, - 0x99d6, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, - 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904, - 0x7b6d, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, - 0x1904, 0x7b6f, 0x7030, 0x908e, 0x0400, 0x0904, 0x7b6f, 0x908e, - 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, - 0x2009, 0x1835, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c, - 0x6262, 0x0558, 0x68a8, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, - 0x9106, 0x1518, 0x6878, 0x69a8, 0x918c, 0xff00, 0x9105, 0x7104, - 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4, 0x11a8, - 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e, 0x5000, - 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x7a7d, 0x0128, - 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, - 0x0001, 0x00ce, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, - 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, - 0x9085, 0x1200, 0x7802, 0x00fe, 0x0005, 0x2071, 0x19c9, 0x7003, - 0x0003, 0x700f, 0x0361, 0x9006, 0x701a, 0x7072, 0x7012, 0x7017, - 0x1cd0, 0x7007, 0x0000, 0x7026, 0x702b, 0x8fd1, 0x7032, 0x7037, - 0x903f, 0x703f, 0xffff, 0x7042, 0x7047, 0x4fb2, 0x704a, 0x705b, - 0x7ce2, 0x080c, 0x0fee, 0x090c, 0x0db2, 0x2900, 0x703a, 0xa867, - 0x0003, 0xa86f, 0x0100, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19c9, - 0x1d04, 0x7c39, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x1510, - 0x2001, 0x1875, 0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c, 0x1140, - 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, 0x0db2, - 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x080c, - 0x7d27, 0x7040, 0x900d, 0x0148, 0x8109, 0x7142, 0x1130, 0x7044, - 0x080f, 0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0x900d, 0x0188, - 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, - 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, - 0x080f, 0x7030, 0x900d, 0x0180, 0x702c, 0x8001, 0x702e, 0x1160, - 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c, - 0x90b9, 0x0010, 0x7034, 0x080f, 0x703c, 0x9005, 0x0118, 0x0310, - 0x8001, 0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001, 0x704a, - 0x1148, 0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e, - 0x7058, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7070, 0x900d, - 0x0158, 0x706c, 0x8001, 0x706e, 0x1138, 0x706f, 0x0009, 0x8109, - 0x7172, 0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a, - 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f, - 0x012e, 0x7004, 0x0002, 0x7c61, 0x7c62, 0x7c7e, 0x00e6, 0x2071, - 0x19c9, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009, - 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19c9, 0x701c, 0x9206, - 0x1120, 0x701a, 0x701e, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, - 0x00e6, 0x2071, 0x19c9, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee, - 0x0005, 0x0005, 0x00b6, 0x7110, 0x080c, 0x5f7e, 0x1168, 0xb888, - 0x8001, 0x0250, 0xb88a, 0x1140, 0x0126, 0x2091, 0x8000, 0x0016, - 0x080c, 0x8582, 0x001e, 0x012e, 0x8108, 0x9182, 0x0800, 0x0218, - 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, 0x7014, 0x2060, - 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128, 0x8001, 0x6042, - 0x1110, 0x080c, 0xb8fa, 0x6018, 0x9005, 0x0510, 0x8001, 0x601a, - 0x11f8, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x11b0, - 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082, 0x1999, - 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, - 0x810b, 0x9108, 0x611a, 0xa87c, 0xd0e4, 0x0110, 0x080c, 0xb313, - 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x1818, 0x2004, 0x9102, - 0x0220, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, - 0x19c9, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, - 0x19d2, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19c9, 0x7132, - 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x19d5, 0x2013, 0x0000, - 0x0005, 0x00e6, 0x2071, 0x19c9, 0x711a, 0x721e, 0x700b, 0x0009, - 0x00ee, 0x0005, 0x0086, 0x0026, 0x7054, 0x8000, 0x7056, 0x2001, - 0x19d7, 0x2044, 0xa06c, 0x9086, 0x0000, 0x0150, 0x7068, 0xa09a, - 0x7064, 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c, 0x10b5, - 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6, 0x00b6, - 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x7bae, 0x015e, - 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, - 0x000e, 0x0005, 0x00e6, 0x2071, 0x19c9, 0x7172, 0x7276, 0x706f, - 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19c9, 0x7074, - 0x9206, 0x1110, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x2069, - 0x1800, 0x69e0, 0xd1e4, 0x1518, 0x0026, 0xd1ec, 0x0140, 0x6a4c, - 0x686c, 0x9202, 0x0288, 0x8117, 0x9294, 0x00c0, 0x0088, 0x9184, - 0x0007, 0x01a0, 0x8109, 0x9184, 0x0007, 0x0110, 0x69e2, 0x0070, - 0x8107, 0x9084, 0x0007, 0x910d, 0x8107, 0x9106, 0x9094, 0x00c0, - 0x9184, 0xff3f, 0x9205, 0x68e2, 0x080c, 0x0eb4, 0x002e, 0x0005, - 0x00c6, 0x2061, 0x1a3e, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, - 0x8003, 0x8003, 0x9080, 0x1a3e, 0x2060, 0x0005, 0xa884, 0x908a, - 0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a3e, 0x6014, - 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, - 0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c, - 0x00c0, 0x918e, 0x00c0, 0x0904, 0x7de8, 0xd0b4, 0x1168, 0xd0bc, - 0x1904, 0x7dc1, 0x2009, 0x0006, 0x080c, 0x7e15, 0x0005, 0x900e, - 0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x0160, 0x908c, 0x0003, - 0x0120, 0x918e, 0x0003, 0x1904, 0x7e0f, 0x908c, 0x2020, 0x918e, - 0x2020, 0x01a8, 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1875, 0x2104, - 0xd084, 0x1138, 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0x9a50, - 0x0005, 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0x9a50, 0x6110, - 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, - 0x6026, 0x0c00, 0xc0d4, 0x6026, 0xa890, 0x602e, 0xa88c, 0x6032, - 0x08e0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, - 0x1904, 0x7e0f, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, - 0x00f6, 0x2c78, 0x080c, 0x1582, 0x00fe, 0x007e, 0x87ff, 0x1120, - 0x2009, 0x0042, 0x080c, 0x9a50, 0x0005, 0x6110, 0x00b6, 0x2158, - 0xb900, 0x00be, 0xd1ac, 0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, - 0xd0fc, 0x0188, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, - 0x0003, 0x908e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, - 0x080c, 0x9a50, 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, - 0x0043, 0x080c, 0x9a50, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, - 0x00be, 0xd1ac, 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, - 0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x0096, 0x080c, 0xb5fb, - 0x0518, 0x6014, 0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, - 0x1188, 0xa97c, 0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, - 0x2061, 0x1a3e, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, - 0x6206, 0x00ce, 0x080c, 0x6370, 0x6014, 0x904d, 0x0076, 0x2039, - 0x0000, 0x190c, 0x7d5e, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, - 0x2061, 0x1a3e, 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, - 0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, - 0x9005, 0x0120, 0x8001, 0x680a, 0x9085, 0x0001, 0x0005, 0x0126, + 0xb004, 0x9055, 0x1958, 0x006e, 0x007e, 0x0005, 0x2009, 0x1834, + 0x210c, 0x81ff, 0x1178, 0x080c, 0x5e8c, 0x1108, 0x0005, 0x080c, + 0x6c85, 0x0126, 0x2091, 0x8000, 0x080c, 0xcb0d, 0x080c, 0x6a46, + 0x012e, 0x0ca0, 0x080c, 0xcf11, 0x1d70, 0x2001, 0x0028, 0x900e, + 0x0c70, 0x2009, 0x1834, 0x210c, 0x81ff, 0x1188, 0xa888, 0x9005, + 0x0188, 0xa883, 0x0000, 0x080c, 0x5f1c, 0x1108, 0x0005, 0xa87a, + 0x0126, 0x2091, 0x8000, 0x080c, 0x6a46, 0x012e, 0x0cb8, 0x2001, + 0x0028, 0x0ca8, 0x2001, 0x0000, 0x0c90, 0x2009, 0x1834, 0x210c, + 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c, + 0xd0f4, 0x0120, 0x080c, 0x5fee, 0x1138, 0x0005, 0x9006, 0xa87a, + 0x080c, 0x5f69, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a, + 0xa982, 0x080c, 0x6a46, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, + 0x0c98, 0x2001, 0x0000, 0x0c80, 0x7018, 0xa802, 0x2908, 0x2048, + 0xa906, 0x711a, 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, + 0x0030, 0x7014, 0x2048, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, + 0x00b6, 0x7007, 0x0001, 0xa974, 0xa878, 0x9084, 0x00ff, 0x9096, + 0x0004, 0x0540, 0x20a9, 0x0001, 0x9096, 0x0001, 0x0190, 0x900e, + 0x20a9, 0x0800, 0x9096, 0x0002, 0x0160, 0x9005, 0x11d8, 0xa974, + 0x080c, 0x63cd, 0x11b8, 0x0066, 0xae80, 0x080c, 0x64dd, 0x006e, + 0x0088, 0x0046, 0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, + 0x00c6, 0x080c, 0x63cd, 0x1110, 0x080c, 0x65dd, 0x8108, 0x1f04, + 0x77e1, 0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c, 0x1032, 0x00be, + 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x6a46, 0x012e, 0x00be, + 0x0005, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x6733, + 0x0580, 0x2061, 0x1a6e, 0x6100, 0xd184, 0x0178, 0xa888, 0x9084, + 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, + 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0xa890, + 0x9005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0xa888, 0x9084, + 0x00ff, 0x0178, 0x6006, 0xa888, 0x8007, 0x9084, 0x00ff, 0x0148, + 0x600a, 0xa888, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, + 0x7a3b, 0x012e, 0x0804, 0x7a35, 0x012e, 0x0804, 0x7a2f, 0x012e, + 0x0804, 0x7a32, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, + 0x6733, 0x05e0, 0x2061, 0x1a6e, 0x6000, 0xd084, 0x05b8, 0x6204, + 0x6308, 0xd08c, 0x1530, 0xac78, 0x9484, 0x0003, 0x0170, 0xa988, + 0x918c, 0x00ff, 0x8001, 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, + 0x8001, 0x1508, 0x2100, 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, + 0xa988, 0x810f, 0x918c, 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, + 0x9318, 0x0288, 0x0030, 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, + 0x0250, 0xa890, 0x9005, 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, + 0x012e, 0x0804, 0x7a3b, 0x012e, 0x0804, 0x7a38, 0x012e, 0x0804, + 0x7a35, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a6e, + 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, + 0x0804, 0x7a49, 0x012e, 0x0804, 0x7a38, 0x00b6, 0x0126, 0x00c6, + 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6, + 0x2061, 0x1a6e, 0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, + 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1834, + 0x2004, 0x9005, 0x0118, 0x080c, 0xab9c, 0x0068, 0x6017, 0xf400, + 0x605b, 0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980, 0x615a, 0x2009, + 0x0041, 0x080c, 0xabe6, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000, + 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff, 0x080c, 0x846c, 0x002e, + 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a6e, 0x6000, 0xd08c, 0x1120, + 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, + 0x7a3b, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7a35, 0xa984, 0x9186, + 0x002e, 0x0d30, 0x9186, 0x002d, 0x0d18, 0x9186, 0x0045, 0x0510, + 0x9186, 0x002a, 0x1130, 0x2001, 0x180c, 0x200c, 0xc194, 0x2102, + 0x08b8, 0x9186, 0x0020, 0x0158, 0x9186, 0x0029, 0x1d10, 0xa974, + 0x080c, 0x63cd, 0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c, + 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001, 0x1984, 0x2004, 0x601a, + 0x0804, 0x78d0, 0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075, + 0x2001, 0x1834, 0x2004, 0x9005, 0x0150, 0x080c, 0xab9c, 0x8eff, + 0x0118, 0x2e60, 0x080c, 0xab9c, 0x00ee, 0x0804, 0x78d0, 0x6024, + 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005, + 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003, + 0x0001, 0x080c, 0x8e7f, 0x080c, 0x941c, 0x00ee, 0x0804, 0x78d0, + 0x2061, 0x1a6e, 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x7a49, + 0x0126, 0x2091, 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, + 0x0804, 0x7a49, 0x012e, 0xa883, 0x0016, 0x0804, 0x7a42, 0xa883, + 0x0007, 0x0804, 0x7a42, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130, + 0x8001, 0x1138, 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x75cb, + 0x0040, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, + 0x7972, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, + 0x2061, 0x1800, 0x61d0, 0x81ff, 0x1904, 0x79f4, 0x6130, 0xd194, + 0x1904, 0x7a1e, 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x0a04, 0x79e8, + 0x6068, 0x9e02, 0x1a04, 0x79e8, 0x7120, 0x9186, 0x0006, 0x1904, + 0x79da, 0x7010, 0x905d, 0x0904, 0x79f4, 0xb800, 0xd0e4, 0x1904, + 0x7a18, 0x2061, 0x1a6e, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, + 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x7a21, 0xa883, 0x0000, 0xa803, + 0x0000, 0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4, + 0x1904, 0x7a24, 0x080c, 0x54b7, 0xd09c, 0x1118, 0xa87c, 0xc0cc, + 0xa87e, 0x2e60, 0x080c, 0x838c, 0x012e, 0x00ee, 0x00be, 0x0005, + 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4, + 0x1904, 0x7a24, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, + 0xa883, 0x0006, 0x00be, 0x0804, 0x7a42, 0xd184, 0x0db8, 0xd1c4, + 0x1190, 0x00a0, 0xa974, 0x080c, 0x63cd, 0x15d0, 0xb800, 0xd0e4, + 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490, + 0xa883, 0x0008, 0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017, + 0x0448, 0xa883, 0x0035, 0x0430, 0x080c, 0x54bb, 0xd0fc, 0x01e8, + 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x02c0, 0x6068, 0x9e02, 0x12a8, + 0x7120, 0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, + 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, + 0x797e, 0x7003, 0x0002, 0x0804, 0x797e, 0xa883, 0x0028, 0x0010, + 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a, + 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b, + 0x0014, 0x080c, 0xde08, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2009, + 0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, + 0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0xa884, 0x9084, 0xff00, + 0x9105, 0xa886, 0x0126, 0x2091, 0x8000, 0x080c, 0x6a46, 0x012e, + 0x0005, 0x080c, 0x1032, 0x0005, 0x00d6, 0x080c, 0x8383, 0x00de, + 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, + 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780, 0x190c, 0x7b33, 0xd09c, + 0x11a8, 0x2071, 0x1800, 0x70c0, 0x90ea, 0x0020, 0x0278, 0x8001, + 0x70c2, 0x702c, 0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806, + 0x2071, 0x0040, 0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee, + 0x00de, 0x0005, 0x0006, 0x9084, 0x0780, 0x190c, 0x7b33, 0x000e, + 0x0005, 0xa898, 0x9084, 0x0003, 0x05a8, 0x080c, 0xab15, 0x05d8, + 0x2900, 0x6016, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x1138, + 0x6008, 0xc0fd, 0x600a, 0x2001, 0x196b, 0x2004, 0x0098, 0xa8a0, + 0x9084, 0x00ff, 0xa99c, 0x918c, 0xff00, 0x9105, 0xa99c, 0x918c, + 0x00ff, 0x080c, 0x26f0, 0x1540, 0x00b6, 0x080c, 0x63cd, 0x2b00, + 0x00be, 0x1510, 0x6012, 0x6023, 0x0001, 0x2009, 0x0040, 0xa864, + 0x9084, 0x00ff, 0x9086, 0x0035, 0x0110, 0x2009, 0x0041, 0x080c, + 0xabe6, 0x0005, 0xa87b, 0x0101, 0x0126, 0x2091, 0x8000, 0x080c, + 0x6a46, 0x012e, 0x0005, 0xa87b, 0x002c, 0x0126, 0x2091, 0x8000, + 0x080c, 0x6a46, 0x012e, 0x0005, 0xa87b, 0x0028, 0x0126, 0x2091, + 0x8000, 0x080c, 0x6a46, 0x012e, 0x080c, 0xab6b, 0x0005, 0x00d6, + 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74, + 0x9282, 0x0004, 0x1a04, 0x7b24, 0xa97c, 0x9188, 0x1000, 0x2104, + 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, + 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c, 0xab15, 0x1118, + 0x080c, 0xabb9, 0x05a8, 0x6212, 0xa874, 0x0002, 0x7b02, 0x7b07, + 0x7b0a, 0x7b10, 0x2019, 0x0002, 0x080c, 0xe1f4, 0x0060, 0x080c, + 0xe190, 0x0048, 0x2019, 0x0002, 0xa980, 0x080c, 0xe1ab, 0x0018, + 0xa980, 0x080c, 0xe190, 0x080c, 0xab6b, 0xa887, 0x0000, 0x0126, + 0x2091, 0x8000, 0x080c, 0x6a46, 0x012e, 0x00be, 0x001e, 0x002e, + 0x003e, 0x00ce, 0x00de, 0x0005, 0xa887, 0x0006, 0x0c80, 0xa887, + 0x0002, 0x0c68, 0xa887, 0x0005, 0x0c50, 0xa887, 0x0004, 0x0c38, + 0xa887, 0x0007, 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7b35, 0x0006, + 0x0016, 0x2001, 0x8003, 0x0006, 0x0804, 0x0dde, 0x0005, 0x00f6, + 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102, + 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, 0x1560, 0x00fe, + 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe, + 0x0005, 0x781c, 0xd08c, 0x0904, 0x7b9f, 0x68c0, 0x90aa, 0x0005, + 0x0a04, 0x819d, 0x7d44, 0x7c40, 0x9584, 0x00f6, 0x1508, 0x9484, + 0x7000, 0x0138, 0x908a, 0x2000, 0x1258, 0x9584, 0x0700, 0x8007, + 0x04a8, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0db0, 0x00b0, + 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, + 0x11c0, 0x080c, 0xe664, 0x080c, 0x8092, 0x7817, 0x0140, 0x00a8, + 0x9584, 0x0076, 0x1118, 0x080c, 0x80f0, 0x19c8, 0xd5a4, 0x0148, + 0x0046, 0x0056, 0x080c, 0x7c01, 0x080c, 0x21e9, 0x005e, 0x004e, + 0x0020, 0x080c, 0xe664, 0x7817, 0x0140, 0x080c, 0x7be2, 0x2001, + 0x19ee, 0x2004, 0x9005, 0x090c, 0x941c, 0x0005, 0x0002, 0x7bb8, + 0x7eb4, 0x7baf, 0x7baf, 0x7baf, 0x7baf, 0x7baf, 0x7baf, 0x7817, + 0x0140, 0x2001, 0x19ee, 0x2004, 0x9005, 0x090c, 0x941c, 0x0005, + 0x7000, 0x908c, 0xff00, 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, + 0x6892, 0x9286, 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, + 0x080c, 0x550e, 0x0070, 0x080c, 0x7c21, 0x0058, 0x9286, 0x3000, + 0x1118, 0x080c, 0x7def, 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, + 0x7fc2, 0x7817, 0x0140, 0x2001, 0x19ee, 0x2004, 0x9005, 0x090c, + 0x941c, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, 0x2001, + 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011, + 0x8048, 0x2518, 0x080c, 0x48fb, 0x003e, 0x002e, 0x0005, 0x0036, + 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, + 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, + 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0160, + 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026, 0x2011, + 0x8048, 0x080c, 0x48fb, 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, + 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, 0x9096, + 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x7dc0, 0x9186, 0x0023, + 0x15c0, 0x080c, 0x8057, 0x0904, 0x7dc0, 0x6120, 0x9186, 0x0001, + 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, + 0x000a, 0x1904, 0x7dc0, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, + 0x1130, 0x2009, 0x0015, 0x080c, 0xabe6, 0x0804, 0x7dc0, 0x908e, + 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, + 0xabe6, 0x0804, 0x7dc0, 0x908e, 0x0100, 0x1904, 0x7dc0, 0x7034, + 0x9005, 0x1904, 0x7dc0, 0x2009, 0x0016, 0x080c, 0xabe6, 0x0804, + 0x7dc0, 0x9186, 0x0022, 0x1904, 0x7dc0, 0x7030, 0x908e, 0x0300, + 0x1580, 0x68dc, 0xd0a4, 0x0528, 0xc0b5, 0x68de, 0x7100, 0x918c, + 0x00ff, 0x697e, 0x7004, 0x6882, 0x00f6, 0x2079, 0x0100, 0x79e6, + 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x2739, + 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x26f0, 0x695e, + 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b6, + 0x00ee, 0x7034, 0x9005, 0x1904, 0x7dc0, 0x2009, 0x0017, 0x0804, + 0x7d8d, 0x908e, 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x7dc0, + 0x080c, 0x717d, 0x0120, 0x2009, 0x001d, 0x0804, 0x7d8d, 0x68dc, + 0xc0a5, 0x68de, 0x2009, 0x0030, 0x0804, 0x7d8d, 0x908e, 0x0500, + 0x1140, 0x7034, 0x9005, 0x1904, 0x7dc0, 0x2009, 0x0018, 0x0804, + 0x7d8d, 0x908e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x7d8d, + 0x908e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x7d8d, 0x908e, + 0x5200, 0x1140, 0x7034, 0x9005, 0x1904, 0x7dc0, 0x2009, 0x001b, + 0x0804, 0x7d8d, 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, + 0x7dc0, 0x2009, 0x001c, 0x0804, 0x7d8d, 0x908e, 0x1300, 0x1120, + 0x2009, 0x0034, 0x0804, 0x7d8d, 0x908e, 0x1200, 0x1140, 0x7034, + 0x9005, 0x1904, 0x7dc0, 0x2009, 0x0024, 0x0804, 0x7d8d, 0x908c, + 0xff00, 0x918e, 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, + 0x2004, 0xd09c, 0x0904, 0x7d8d, 0x080c, 0xd5dd, 0x1904, 0x7dc0, + 0x0804, 0x7d8b, 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, + 0x002a, 0x0804, 0x7d8d, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, + 0x0804, 0x7d8d, 0x908e, 0x5300, 0x1108, 0x0448, 0x908e, 0x6104, + 0x1530, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204, 0x9082, + 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, + 0x0046, 0x2124, 0x080c, 0x48fb, 0x004e, 0x8108, 0x0f04, 0x7d41, + 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009, 0x0260, + 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x0804, 0x7d8d, 0x908e, + 0x6000, 0x1120, 0x2009, 0x003f, 0x0804, 0x7d8d, 0x908e, 0x5400, + 0x1138, 0x080c, 0x814d, 0x1904, 0x7dc0, 0x2009, 0x0046, 0x04a8, + 0x908e, 0x5500, 0x1148, 0x080c, 0x8175, 0x1118, 0x2009, 0x0041, + 0x0460, 0x2009, 0x0042, 0x0448, 0x908e, 0x7800, 0x1118, 0x2009, + 0x0045, 0x0418, 0x908e, 0x1000, 0x1118, 0x2009, 0x004e, 0x00e8, + 0x908e, 0x6300, 0x1118, 0x2009, 0x004a, 0x00b8, 0x908c, 0xff00, + 0x918e, 0x5600, 0x1118, 0x2009, 0x004f, 0x0078, 0x908c, 0xff00, + 0x918e, 0x5700, 0x1118, 0x2009, 0x0050, 0x0038, 0x2009, 0x001d, + 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, + 0x2204, 0x8211, 0x220c, 0x080c, 0x26f0, 0x1568, 0x080c, 0x636c, + 0x1550, 0xbe12, 0xbd16, 0x001e, 0x0016, 0xb8c0, 0x9005, 0x1168, + 0x9186, 0x0046, 0x1150, 0x687c, 0x9606, 0x1138, 0x6880, 0x9506, + 0x9084, 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0xab15, 0x01a8, + 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, + 0x004c, 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0xabe6, + 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004, + 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48fb, 0x080c, 0xabb9, + 0x0d90, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, + 0x0016, 0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, + 0x0009, 0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, + 0x602f, 0x0009, 0x6003, 0x0001, 0x080c, 0x8ec7, 0x08a0, 0x080c, + 0x318e, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, + 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, + 0xff00, 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x8057, 0x0904, + 0x7e4c, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, + 0x9005, 0x15d0, 0x2009, 0x0015, 0x080c, 0xabe6, 0x04a8, 0x908e, + 0x0100, 0x1590, 0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, + 0xabe6, 0x0450, 0x9186, 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, + 0x1518, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, + 0x220c, 0x080c, 0x26f0, 0x11b8, 0x080c, 0x636c, 0x11a0, 0xbe12, + 0xbd16, 0x080c, 0xab15, 0x0178, 0x2b08, 0x6112, 0x080c, 0xcc93, + 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0xabe6, 0x080c, + 0x941c, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, + 0x00b6, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, + 0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, + 0x007f, 0x0804, 0x7eae, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, + 0x0804, 0x7eae, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, + 0x2011, 0x0000, 0x2019, 0x1837, 0x231c, 0xd3ac, 0x0130, 0x9026, + 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, + 0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, + 0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, + 0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, + 0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, + 0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7e83, 0x82ff, + 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, + 0x00ee, 0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, + 0x9184, 0x000f, 0x0002, 0x7ecb, 0x7ecb, 0x7ecb, 0x8069, 0x7ecb, + 0x7ed4, 0x7eff, 0x7f8d, 0x7ecb, 0x7ecb, 0x7ecb, 0x7ecb, 0x7ecb, + 0x7ecb, 0x7ecb, 0x7ecb, 0x7817, 0x0140, 0x2001, 0x19ee, 0x2004, + 0x9005, 0x090c, 0x941c, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, + 0x7120, 0x2160, 0x9c8c, 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, + 0x6868, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, + 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, + 0x610a, 0x2009, 0x0046, 0x080c, 0xabe6, 0x7817, 0x0140, 0x2001, + 0x19ee, 0x2004, 0x9005, 0x090c, 0x941c, 0x00be, 0x0005, 0x00b6, + 0x00c6, 0x9484, 0x0fff, 0x0904, 0x7f63, 0x7110, 0xd1bc, 0x1904, + 0x7f63, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, + 0xff00, 0x15b0, 0x81ff, 0x15a0, 0x9080, 0x31d0, 0x200d, 0x918c, + 0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x7f63, 0x080c, + 0x636c, 0x1904, 0x7f63, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, + 0xba04, 0x9294, 0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0xab15, + 0x05e8, 0x2b08, 0x7028, 0x604a, 0x702c, 0x6046, 0x6112, 0x6023, + 0x0006, 0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, + 0xd837, 0x0408, 0x080c, 0x6737, 0x1138, 0xb807, 0x0606, 0x0c30, + 0x190c, 0x7e50, 0x11c0, 0x0898, 0x080c, 0xab15, 0x2b08, 0x0198, + 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, + 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, + 0x8ec7, 0x080c, 0x941c, 0x7817, 0x0140, 0x2001, 0x19ee, 0x2004, + 0x9005, 0x090c, 0x941c, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, + 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48fb, 0x080c, + 0xabb9, 0x0d48, 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, + 0x7130, 0x6156, 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, + 0x080c, 0x8e7f, 0x080c, 0x941c, 0x08b0, 0x00b6, 0x7110, 0xd1bc, + 0x01e8, 0x7020, 0x2060, 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0, + 0x02a8, 0x6868, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, + 0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, + 0x7124, 0x610a, 0x2009, 0x0045, 0x080c, 0xabe6, 0x7817, 0x0140, + 0x2001, 0x19ee, 0x2004, 0x9005, 0x090c, 0x941c, 0x00be, 0x0005, + 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, + 0x0001, 0x0005, 0x080c, 0x318e, 0x1168, 0x7010, 0x9084, 0xff00, + 0x8007, 0x9086, 0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, + 0x1208, 0x000b, 0x0005, 0x7fd9, 0x7fda, 0x7fd9, 0x7fd9, 0x8039, + 0x8048, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, + 0x0904, 0x8037, 0x700c, 0x7108, 0x080c, 0x26f0, 0x1904, 0x8037, + 0x080c, 0x636c, 0x1904, 0x8037, 0xbe12, 0xbd16, 0x7110, 0xd1bc, + 0x01d8, 0x080c, 0x6737, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, + 0x080c, 0x8057, 0x00ce, 0x05d8, 0x080c, 0xab15, 0x2b08, 0x05b8, + 0x6112, 0x080c, 0xcc93, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, + 0x0088, 0x080c, 0xabe6, 0x0458, 0x080c, 0x6737, 0x0148, 0x9086, + 0x0004, 0x0130, 0x080c, 0x673f, 0x0118, 0x9086, 0x0004, 0x1180, + 0x080c, 0xab15, 0x2b08, 0x01d8, 0x6112, 0x080c, 0xcc93, 0x6023, + 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xabe6, 0x0078, + 0x080c, 0xab15, 0x2b08, 0x0158, 0x6112, 0x080c, 0xcc93, 0x6023, + 0x0004, 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0xabe6, 0x00be, + 0x0005, 0x7110, 0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x7fb8, + 0x1130, 0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0xabe6, 0x0005, + 0x7110, 0xd1bc, 0x0158, 0x0059, 0x0148, 0x080c, 0x7fb8, 0x1130, + 0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0xabe6, 0x0005, 0x7020, + 0x2060, 0x9c84, 0x0007, 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001, + 0x181a, 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, + 0x0ce8, 0x00b6, 0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, + 0x0007, 0x11b0, 0x9c82, 0x1cd0, 0x0298, 0x6868, 0x9c02, 0x1280, + 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, + 0x700c, 0xb914, 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0xabe6, + 0x7817, 0x0140, 0x2001, 0x19ee, 0x2004, 0x9005, 0x090c, 0x941c, + 0x00be, 0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, + 0x0049, 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, + 0x0009, 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, + 0x9086, 0xc000, 0x05d0, 0x080c, 0xab15, 0x05b8, 0x0066, 0x00c6, + 0x0046, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x26f0, + 0x15a0, 0x080c, 0x636c, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, + 0x00ce, 0x6012, 0x080c, 0xcc93, 0x080c, 0x1000, 0x0510, 0x2900, + 0x605a, 0x9006, 0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, + 0x20a9, 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, + 0x4003, 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, + 0x0001, 0x080c, 0x8ec7, 0x080c, 0x941c, 0x00fe, 0x009e, 0x00ce, + 0x0005, 0x080c, 0xab6b, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, + 0x00c6, 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, + 0x2000, 0x1904, 0x8147, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, + 0x2004, 0x9005, 0x1904, 0x8149, 0x7030, 0x908e, 0x0400, 0x0904, + 0x8149, 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, + 0x0300, 0x11d8, 0x2009, 0x1837, 0x210c, 0xd18c, 0x1590, 0xd1a4, + 0x1580, 0x080c, 0x66f5, 0x0558, 0x68b0, 0x9084, 0x00ff, 0x7100, + 0x918c, 0x00ff, 0x9106, 0x1518, 0x6880, 0x69b0, 0x918c, 0xff00, + 0x9105, 0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, + 0xd1b4, 0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, + 0x908e, 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, + 0x8057, 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, + 0x0010, 0x9085, 0x0001, 0x00ce, 0x0005, 0x0156, 0x0046, 0x0016, + 0x0036, 0x7038, 0x2020, 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, + 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x027a, 0x080c, 0xbb13, + 0x1178, 0xd48c, 0x0148, 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, + 0x027e, 0x080c, 0xbb13, 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, + 0x003e, 0x001e, 0x004e, 0x015e, 0x0005, 0x0156, 0x0046, 0x0016, + 0x0036, 0x7038, 0x2020, 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, + 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0272, 0x080c, 0xbb13, + 0x1178, 0xd48c, 0x0148, 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, + 0x0276, 0x080c, 0xbb13, 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, + 0x003e, 0x001e, 0x004e, 0x015e, 0x0005, 0x00f6, 0x2079, 0x0200, + 0x7800, 0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, + 0x1800, 0x7834, 0xd084, 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, + 0x1200, 0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, + 0xc084, 0x7036, 0x00ee, 0x0005, 0x2071, 0x19f8, 0x7003, 0x0003, + 0x700f, 0x0361, 0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x1cd0, + 0x7007, 0x0000, 0x7026, 0x702b, 0xa012, 0x7032, 0x7037, 0xa080, + 0x703f, 0xffff, 0x7042, 0x7047, 0x5356, 0x704a, 0x705b, 0x8323, + 0x080c, 0x1019, 0x090c, 0x0dd5, 0x2900, 0x703a, 0xa867, 0x0003, + 0xa86f, 0x0100, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19f8, 0x1d04, + 0x8274, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x1530, 0x2001, + 0x013c, 0x2004, 0x9005, 0x190c, 0x8368, 0x2001, 0x1869, 0x2004, + 0xd0c4, 0x0158, 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, + 0x0001, 0x20d1, 0x0000, 0x080c, 0x0dd5, 0x700f, 0x0361, 0x7007, + 0x0001, 0x0126, 0x2091, 0x8000, 0x7040, 0x900d, 0x0148, 0x8109, + 0x7142, 0x1130, 0x7044, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000, + 0x7024, 0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, + 0x0009, 0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f, + 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x0180, 0x702c, + 0x8001, 0x702e, 0x1160, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, + 0x9184, 0x007f, 0x090c, 0xa10e, 0x0010, 0x7034, 0x080f, 0x703c, + 0x9005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0x900d, 0x0168, + 0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e, + 0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0x900d, 0x01d8, + 0x0016, 0x7070, 0x900d, 0x0158, 0x706c, 0x8001, 0x706e, 0x1138, + 0x706f, 0x0009, 0x8109, 0x7172, 0x1110, 0x7074, 0x080f, 0x001e, + 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, + 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x829c, 0x829d, + 0x82b9, 0x00e6, 0x2071, 0x19f8, 0x7018, 0x9005, 0x1120, 0x711a, + 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, + 0x19f8, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x7072, 0x7076, + 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x19f8, 0xb888, 0x9102, + 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, 0x00b6, 0x7110, 0x080c, + 0x63cd, 0x1168, 0xb888, 0x8001, 0x0250, 0xb88a, 0x1140, 0x0126, + 0x2091, 0x8000, 0x0016, 0x080c, 0x941c, 0x001e, 0x012e, 0x8108, + 0x9182, 0x0800, 0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, + 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, + 0x0128, 0x8001, 0x6042, 0x1110, 0x080c, 0xcb24, 0x6018, 0x9005, + 0x0540, 0x8001, 0x601a, 0x1528, 0x6120, 0x9186, 0x0003, 0x0148, + 0x9186, 0x0006, 0x0130, 0x9186, 0x0009, 0x11c8, 0x611c, 0xd1c4, + 0x1100, 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082, + 0x1999, 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, + 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0xd0e4, 0x0110, 0x080c, + 0xc53d, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x181a, 0x2004, + 0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x0005, 0x00e6, + 0x2071, 0x19f8, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, + 0x2001, 0x1a01, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19f8, + 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x1a04, 0x2013, + 0x0000, 0x0005, 0x00e6, 0x2071, 0x19f8, 0x711a, 0x721e, 0x700b, + 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026, 0x7054, 0x8000, 0x7056, + 0x2001, 0x1a06, 0x2044, 0xa06c, 0x9086, 0x0000, 0x0150, 0x7068, + 0xa09a, 0x7064, 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c, + 0x10e0, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6, + 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x81e5, + 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, + 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19f8, 0x7172, 0x7276, + 0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19f8, + 0x7074, 0x9206, 0x1110, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, + 0x0016, 0x00c6, 0x2009, 0xfffc, 0x210d, 0x2061, 0x0100, 0x60f0, + 0x9100, 0x60f3, 0x0000, 0x2009, 0xfffc, 0x200f, 0x1220, 0x8108, + 0x2105, 0x8000, 0x200f, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x2061, + 0x1a6e, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, 0x8003, 0x8003, + 0x9080, 0x1a6e, 0x2060, 0x0005, 0xa884, 0x908a, 0x199a, 0x1638, + 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a6e, 0x6014, 0x00ce, 0x9005, + 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003, + 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c, 0x00c0, 0x918e, + 0x00c0, 0x0904, 0x8416, 0xd0b4, 0x1168, 0xd0bc, 0x1904, 0x83ef, + 0x2009, 0x0006, 0x080c, 0x8443, 0x0005, 0x900e, 0x0c60, 0x2001, + 0x1999, 0x08b0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, + 0x0003, 0x1904, 0x843d, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, + 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084, 0x1138, + 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0xabe6, 0x0005, 0x87ff, + 0x1de8, 0x2009, 0x0042, 0x0804, 0xabe6, 0x6110, 0x00b6, 0x2158, + 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00, + 0xc0d4, 0x6026, 0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0, 0xd0fc, + 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x843d, + 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, + 0x080c, 0x1689, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, + 0x080c, 0xabe6, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, + 0xd1ac, 0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188, + 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, + 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0xabe6, + 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, + 0xabe6, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, + 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, + 0x0005, 0x2009, 0x0001, 0x0096, 0x080c, 0xc825, 0x0518, 0x6014, + 0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c, + 0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a6e, + 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, + 0x080c, 0x6881, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, + 0x838c, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a6e, + 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, + 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, + 0x8001, 0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1923, 0x7003, + 0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001, 0x080c, + 0x1019, 0x090c, 0x0dd5, 0xa867, 0x0006, 0xa86b, 0x0001, 0xa8ab, + 0xdcb0, 0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000, 0x0005, + 0x0096, 0x00e6, 0x2071, 0x1923, 0x702c, 0x2048, 0x6a2c, 0x721e, + 0x6b30, 0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a, 0xa89a, + 0x6824, 0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a, 0x9005, + 0x0148, 0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100, 0x9210, + 0x1208, 0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0178, 0xc084, + 0x7007, 0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x181d, 0x2104, + 0x9082, 0x0007, 0x2009, 0x1abf, 0x200a, 0x000e, 0xc095, 0x7012, + 0x2008, 0x2001, 0x003b, 0x080c, 0x15d1, 0x9006, 0x2071, 0x193c, + 0x7002, 0x7006, 0x702a, 0x00ee, 0x009e, 0x0005, 0x00e6, 0x0126, + 0x0156, 0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001, 0x0008, + 0x910a, 0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080, 0x0008, + 0x1f04, 0x84f6, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877, 0x20a9, + 0x0007, 0x00c6, 0x080c, 0xab15, 0x6023, 0x0009, 0x6003, 0x0004, + 0x601f, 0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c, 0x867c, + 0x012e, 0x1f04, 0x8502, 0x9006, 0x00ce, 0x015e, 0x012e, 0x00ee, + 0x0005, 0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096, 0x0086, + 0x0056, 0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004, 0xd084, + 0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021, 0x002c, + 0x2029, 0x000a, 0x080c, 0x1000, 0x090c, 0x0dd5, 0x2900, 0x6016, + 0x2058, 0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a, 0xa8aa, + 0xa887, 0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010, 0xa89e, + 0xae8a, 0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160, 0x080c, + 0x1000, 0x090c, 0x0dd5, 0xad66, 0x2b00, 0xa802, 0x2900, 0xb806, + 0x2058, 0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e, 0x009e, + 0x00be, 0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1923, 0x7004, + 0x004b, 0x700c, 0x0002, 0x856e, 0x8567, 0x8567, 0x0005, 0x8578, + 0x85d9, 0x85d9, 0x85d9, 0x85da, 0x85eb, 0x85eb, 0x700c, 0x0cba, + 0x0126, 0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x0128, 0x78a0, + 0x79a0, 0x9106, 0x1904, 0x85cc, 0x2001, 0x0005, 0x2004, 0xd0bc, + 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e, + 0x7018, 0x910a, 0x1130, 0x7030, 0x9005, 0x05a8, 0x080c, 0x861a, + 0x0490, 0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210, 0x2009, + 0x000a, 0x2001, 0x1888, 0x2014, 0x2001, 0x1935, 0x2004, 0x9100, + 0x9202, 0x0e48, 0x080c, 0x8766, 0x2200, 0x9102, 0x0208, 0x2208, + 0x0096, 0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c, 0x886f, + 0x2100, 0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091, 0x8000, + 0x2009, 0x1a16, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002, 0x012e, + 0x080c, 0x10ff, 0x1de8, 0x0005, 0x2001, 0x0005, 0x2004, 0xd0bc, + 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e, + 0x0005, 0x0005, 0x700c, 0x0002, 0x85df, 0x85e2, 0x85e1, 0x080c, + 0x8576, 0x0005, 0x8001, 0x700e, 0x0096, 0x702c, 0x2048, 0xa974, + 0x009e, 0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048, 0x7018, + 0x9100, 0x7214, 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020, 0xa892, + 0x9006, 0x0068, 0x0006, 0x080c, 0x886f, 0x2100, 0xaa8c, 0x9210, + 0xaa8e, 0x1220, 0xa890, 0x9081, 0x0000, 0xa892, 0x000e, 0x009e, + 0x2f08, 0x9188, 0x0028, 0x200a, 0x701a, 0x0005, 0x00e6, 0x2071, + 0x1923, 0x700c, 0x0002, 0x8618, 0x8618, 0x8616, 0x700f, 0x0001, + 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005, 0x0508, + 0x2078, 0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000, 0x080c, + 0x8685, 0x00be, 0x01b0, 0x00e6, 0x2071, 0x193c, 0x080c, 0x86cc, + 0x00ee, 0x0178, 0x0096, 0x080c, 0x1019, 0x2900, 0x009e, 0x0148, + 0xa8aa, 0x04b9, 0x0041, 0x2001, 0x1946, 0x2003, 0x0000, 0x012e, + 0x08c8, 0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6, 0x2940, + 0x2650, 0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f, 0x2068, + 0x9d88, 0x1f4a, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c, 0x87f4, + 0x080c, 0x1f08, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f, 0x2004, + 0xa88a, 0x080c, 0x1689, 0x781f, 0x0101, 0x7813, 0x0000, 0x0126, + 0x2091, 0x8000, 0x080c, 0x86db, 0x012e, 0x008e, 0x00ce, 0x00de, + 0x0005, 0x7030, 0x9005, 0x0138, 0x2078, 0x780c, 0x7032, 0x2001, + 0x1946, 0x2003, 0x0001, 0x0005, 0x00e6, 0x2071, 0x1923, 0x7030, + 0x600e, 0x2c00, 0x7032, 0x00ee, 0x0005, 0x00d6, 0x00c6, 0x0026, + 0x9b80, 0x894e, 0x2005, 0x906d, 0x090c, 0x0dd5, 0x9b80, 0x8946, + 0x2005, 0x9065, 0x090c, 0x0dd5, 0x6114, 0x2600, 0x9102, 0x0248, + 0x6828, 0x9102, 0x02f0, 0x9085, 0x0001, 0x002e, 0x00ce, 0x00de, + 0x0005, 0x6804, 0xd094, 0x0148, 0x6854, 0xd084, 0x1178, 0xc085, + 0x6856, 0x2011, 0x8026, 0x080c, 0x48fb, 0x684c, 0x0096, 0x904d, + 0x090c, 0x0dd5, 0xa804, 0x8000, 0xa806, 0x009e, 0x9006, 0x2030, + 0x0c20, 0x6854, 0xd08c, 0x1d08, 0xc08d, 0x6856, 0x2011, 0x8025, + 0x080c, 0x48fb, 0x684c, 0x0096, 0x904d, 0x090c, 0x0dd5, 0xa800, + 0x8000, 0xa802, 0x009e, 0x0888, 0x7000, 0x2019, 0x0008, 0x8319, + 0x7104, 0x9102, 0x1118, 0x2300, 0x9005, 0x0020, 0x0210, 0x9302, + 0x0008, 0x8002, 0x0005, 0x00d6, 0x7814, 0x9005, 0x090c, 0x0dd5, + 0x781c, 0x9084, 0x0101, 0x9086, 0x0101, 0x190c, 0x0dd5, 0x2069, + 0x193c, 0x6804, 0x9080, 0x193e, 0x2f08, 0x2102, 0x6904, 0x8108, + 0x9182, 0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193e, 0x2003, + 0x0000, 0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014, 0x2048, + 0xa8a8, 0x0096, 0x2048, 0x9005, 0x190c, 0x1032, 0x009e, 0xa8ab, + 0x0000, 0x080c, 0x0fb2, 0x080c, 0xab6b, 0x00ce, 0x009e, 0x0005, + 0x6020, 0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110, 0x9006, + 0x0005, 0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000, 0x0178, + 0x6010, 0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x8a81, 0x00be, + 0x6013, 0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861, 0x0005, + 0x2009, 0x1927, 0x210c, 0xd194, 0x0005, 0x00e6, 0x2071, 0x1923, + 0x7110, 0xc194, 0xd19c, 0x1118, 0xc185, 0x7007, 0x0000, 0x7112, + 0x2001, 0x003b, 0x080c, 0x15d1, 0x00ee, 0x0005, 0x0096, 0x00d6, + 0x9006, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a, + 0x7026, 0x702f, 0x0000, 0x080c, 0x88ce, 0x0170, 0x080c, 0x8903, + 0x0158, 0x2900, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f, + 0x000a, 0x00de, 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6, 0x0096, + 0x0086, 0x00d6, 0x00c6, 0x2071, 0x1930, 0x721c, 0x2100, 0x9202, + 0x1618, 0x080c, 0x8903, 0x090c, 0x0dd5, 0x7018, 0x9005, 0x1160, + 0x2900, 0x7002, 0x700a, 0x701a, 0x9006, 0x7006, 0x700e, 0xa806, + 0xa802, 0x7012, 0x701e, 0x0038, 0x2040, 0xa806, 0x2900, 0xa002, + 0x701a, 0xa803, 0x0000, 0x7010, 0x8000, 0x7012, 0x701c, 0x9080, + 0x000a, 0x701e, 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de, 0x008e, + 0x009e, 0x00ee, 0x0005, 0x0096, 0x0156, 0x0136, 0x0146, 0x00e6, + 0x0126, 0x2091, 0x8000, 0x2071, 0x1930, 0x7300, 0x831f, 0x831e, + 0x831e, 0x9384, 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398, 0x0003, + 0x7104, 0x080c, 0x886f, 0x810c, 0x2100, 0x9318, 0x8003, 0x2228, + 0x2021, 0x0078, 0x9402, 0x9532, 0x0208, 0x2028, 0x2500, 0x8004, + 0x20a8, 0x23a0, 0xa001, 0xa001, 0x4005, 0x2508, 0x080c, 0x8878, + 0x2130, 0x7014, 0x9600, 0x7016, 0x2600, 0x711c, 0x9102, 0x701e, + 0x7004, 0x9600, 0x2008, 0x9082, 0x000a, 0x1190, 0x7000, 0x2048, + 0xa800, 0x9005, 0x1148, 0x2009, 0x0001, 0x0026, 0x080c, 0x8766, + 0x002e, 0x7000, 0x2048, 0xa800, 0x7002, 0x7007, 0x0000, 0x0008, + 0x7106, 0x2500, 0x9212, 0x1904, 0x87a5, 0x012e, 0x00ee, 0x014e, + 0x013e, 0x015e, 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x0126, + 0x2091, 0x8000, 0x9580, 0x8946, 0x2005, 0x9075, 0x090c, 0x0dd5, + 0x080c, 0x884a, 0x012e, 0x9580, 0x8942, 0x2005, 0x9075, 0x090c, + 0x0dd5, 0x0156, 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f, 0x831e, + 0x831e, 0x9384, 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100, 0x2098, + 0xa860, 0x20e8, 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9, 0x0002, + 0x4003, 0x2e0c, 0x2d00, 0x0002, 0x8834, 0x8834, 0x8836, 0x8834, + 0x8836, 0x8834, 0x8834, 0x8834, 0x8834, 0x8834, 0x883c, 0x8834, + 0x883c, 0x8834, 0x8834, 0x8834, 0x080c, 0x0dd5, 0x4104, 0x20a9, + 0x0002, 0x4002, 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003, 0x4104, + 0x4003, 0x01de, 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee, 0x002e, + 0x001e, 0x0005, 0x0096, 0x7014, 0x8001, 0x7016, 0x710c, 0x2110, + 0x00f1, 0x810c, 0x9188, 0x0003, 0x7308, 0x8210, 0x9282, 0x000a, + 0x1198, 0x7008, 0x2048, 0xa800, 0x9005, 0x0158, 0x0006, 0x080c, + 0x8912, 0x009e, 0xa807, 0x0000, 0x2900, 0x700a, 0x7010, 0x8001, + 0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x009e, 0x0005, 0x0006, + 0x810b, 0x810b, 0x2100, 0x810b, 0x9100, 0x2008, 0x000e, 0x0005, + 0x0006, 0x0026, 0x2100, 0x9005, 0x0158, 0x9092, 0x000c, 0x0240, + 0x900e, 0x8108, 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e, 0x0005, + 0x900e, 0x0cd8, 0x2d00, 0x90b8, 0x0008, 0x690c, 0x6810, 0x2019, + 0x0001, 0x2031, 0x88b8, 0x9112, 0x0220, 0x0118, 0x8318, 0x2208, + 0x0cd0, 0x6808, 0x9005, 0x0108, 0x8318, 0x233a, 0x6804, 0xd084, + 0x2300, 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967, 0x0a67, + 0x8420, 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082, 0x0002, + 0x0967, 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67, 0x0cd0, + 0x6c1a, 0x2d00, 0x90b8, 0x0007, 0x00e6, 0x2071, 0x1800, 0x7128, + 0x6810, 0x2019, 0x0001, 0x910a, 0x0118, 0x0210, 0x8318, 0x0cd8, + 0x2031, 0x88cb, 0x0870, 0x6c16, 0x00ee, 0x0005, 0x0096, 0x0046, + 0x0126, 0x2091, 0x8000, 0x2b00, 0x9080, 0x894a, 0x2005, 0x9005, + 0x090c, 0x0dd5, 0x2004, 0x90a0, 0x000a, 0x080c, 0x1019, 0x01d0, + 0x2900, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x080c, 0x1019, + 0x0188, 0x7024, 0xa802, 0xa807, 0x0000, 0x2900, 0x7026, 0x94a2, + 0x000a, 0x0110, 0x0208, 0x0c90, 0x9085, 0x0001, 0x012e, 0x004e, + 0x009e, 0x0005, 0x7024, 0x9005, 0x0dc8, 0x2048, 0xac00, 0x080c, + 0x1032, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x7024, 0x2048, + 0x9005, 0x0130, 0xa800, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, + 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024, 0xa802, 0x2900, + 0x7026, 0x012e, 0x0005, 0x0096, 0x9e80, 0x0009, 0x2004, 0x9005, + 0x0138, 0x2048, 0xa800, 0x0006, 0x080c, 0x1032, 0x000e, 0x0cb8, + 0x009e, 0x0005, 0x0096, 0x7008, 0x9005, 0x0138, 0x2048, 0xa800, + 0x0006, 0x080c, 0x1032, 0x000e, 0x0cb8, 0x9006, 0x7002, 0x700a, + 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x702a, 0x7026, 0x702e, + 0x009e, 0x0005, 0x1a62, 0x0000, 0x0000, 0x0000, 0x1930, 0x0000, + 0x0000, 0x0000, 0x1888, 0x0000, 0x0000, 0x0000, 0x1877, 0x0000, + 0x0000, 0x0000, 0x00e6, 0x00c6, 0x00b6, 0x00a6, 0xa8a8, 0x2040, + 0x2071, 0x1877, 0x080c, 0x8a6c, 0xa067, 0x0023, 0x6010, 0x905d, + 0x0904, 0x8a41, 0xb814, 0xa06e, 0xb910, 0xa172, 0xb9a0, 0xa176, + 0x2001, 0x0003, 0xa07e, 0xa834, 0xa082, 0xa07b, 0x0000, 0xa898, + 0x9005, 0x0118, 0xa078, 0xc085, 0xa07a, 0x2858, 0x2031, 0x0018, + 0xa068, 0x908a, 0x0019, 0x1a0c, 0x0dd5, 0x2020, 0x2050, 0x2940, + 0xa864, 0x90bc, 0x00ff, 0x908c, 0x000f, 0x91e0, 0x1f4a, 0x2c65, + 0x9786, 0x0024, 0x2c05, 0x1590, 0x908a, 0x0036, 0x1a0c, 0x0dd5, + 0x9082, 0x001b, 0x0002, 0x89ae, 0x89ae, 0x89b0, 0x89ae, 0x89ae, + 0x89ae, 0x89b2, 0x89ae, 0x89ae, 0x89ae, 0x89b4, 0x89ae, 0x89ae, + 0x89ae, 0x89b6, 0x89ae, 0x89ae, 0x89ae, 0x89b8, 0x89ae, 0x89ae, + 0x89ae, 0x89ba, 0x89ae, 0x89ae, 0x89ae, 0x89bc, 0x080c, 0x0dd5, + 0xa180, 0x04b8, 0xa190, 0x04a8, 0xa1a0, 0x0498, 0xa1b0, 0x0488, + 0xa1c0, 0x0478, 0xa1d0, 0x0468, 0xa1e0, 0x0458, 0x908a, 0x0034, + 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x89e0, 0x89de, 0x89de, + 0x89de, 0x89de, 0x89de, 0x89e2, 0x89de, 0x89de, 0x89de, 0x89de, + 0x89de, 0x89e4, 0x89de, 0x89de, 0x89de, 0x89de, 0x89de, 0x89e6, + 0x89de, 0x89de, 0x89de, 0x89de, 0x89de, 0x89e8, 0x080c, 0x0dd5, + 0xa180, 0x0038, 0xa198, 0x0028, 0xa1b0, 0x0018, 0xa1c8, 0x0008, + 0xa1e0, 0x2600, 0x0002, 0x8a04, 0x8a06, 0x8a08, 0x8a0a, 0x8a0c, + 0x8a0e, 0x8a10, 0x8a12, 0x8a14, 0x8a16, 0x8a18, 0x8a1a, 0x8a1c, + 0x8a1e, 0x8a20, 0x8a22, 0x8a24, 0x8a26, 0x8a28, 0x8a2a, 0x8a2c, + 0x8a2e, 0x8a30, 0x8a32, 0x8a34, 0x080c, 0x0dd5, 0xb9e2, 0x0468, + 0xb9de, 0x0458, 0xb9da, 0x0448, 0xb9d6, 0x0438, 0xb9d2, 0x0428, + 0xb9ce, 0x0418, 0xb9ca, 0x0408, 0xb9c6, 0x00f8, 0xb9c2, 0x00e8, + 0xb9be, 0x00d8, 0xb9ba, 0x00c8, 0xb9b6, 0x00b8, 0xb9b2, 0x00a8, + 0xb9ae, 0x0098, 0xb9aa, 0x0088, 0xb9a6, 0x0078, 0xb9a2, 0x0068, + 0xb99e, 0x0058, 0xb99a, 0x0048, 0xb996, 0x0038, 0xb992, 0x0028, + 0xb98e, 0x0018, 0xb98a, 0x0008, 0xb986, 0x8631, 0x8421, 0x0120, + 0x080c, 0x1f08, 0x0804, 0x8988, 0x00ae, 0x00be, 0x00ce, 0x00ee, + 0x0005, 0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff, 0x9006, + 0x0804, 0x896a, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058, 0xb810, + 0x9005, 0x01b0, 0x2001, 0x1924, 0x2004, 0x9005, 0x0188, 0x2001, + 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0xbba0, + 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x48fb, 0x004e, 0x003e, + 0x00be, 0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834, 0x910a, + 0xa936, 0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0238, 0x0130, + 0x7010, 0x8210, 0x910a, 0x0210, 0x0108, 0x0cd8, 0xaa8a, 0xa26a, + 0x0005, 0x00f6, 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b, 0x0200, + 0x7818, 0xd094, 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001, 0x7818, + 0xd094, 0x1da0, 0xb8ac, 0x9005, 0x01b8, 0x2068, 0x2079, 0x0000, + 0x2c08, 0x911e, 0x1118, 0x680c, 0xb8ae, 0x0060, 0x9106, 0x0140, + 0x2d00, 0x2078, 0x680c, 0x9005, 0x090c, 0x0dd5, 0x2068, 0x0cb0, + 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b, 0x0200, + 0x003e, 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x00c6, + 0x0036, 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff, 0x2071, + 0x0300, 0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04, 0x8ac1, + 0x701b, 0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90, 0xb8ac, + 0x9005, 0x01d0, 0x2060, 0x600c, 0xb8ae, 0x6003, 0x0004, 0x601b, + 0x0000, 0x6013, 0x0000, 0x601f, 0x0101, 0x6014, 0x2048, 0xa88b, + 0x0000, 0xa8a8, 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0dd5, 0x080c, + 0x1032, 0x080c, 0x867c, 0x0c18, 0x2071, 0x0300, 0x701b, 0x0200, + 0x015e, 0x012e, 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x0005, + 0x00c6, 0x00b6, 0x0016, 0x0006, 0x0156, 0x080c, 0x26f0, 0x015e, + 0x11b0, 0x080c, 0x636c, 0x190c, 0x0dd5, 0x000e, 0x001e, 0xb912, + 0xb816, 0x080c, 0xab15, 0x0140, 0x2b00, 0x6012, 0x6023, 0x0001, + 0x2009, 0x0001, 0x080c, 0xabe6, 0x00be, 0x00ce, 0x0005, 0x000e, + 0x001e, 0x0cd0, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, + 0x0013, 0x006e, 0x0005, 0x8b33, 0x8b33, 0x8b33, 0x8b35, 0x8b86, + 0x8b33, 0x8b33, 0x8b33, 0x8be9, 0x8b33, 0x8c26, 0x8b33, 0x8b33, + 0x8b33, 0x8b33, 0x8b33, 0x080c, 0x0dd5, 0x9182, 0x0040, 0x0002, + 0x8b48, 0x8b48, 0x8b48, 0x8b48, 0x8b48, 0x8b48, 0x8b48, 0x8b48, + 0x8b48, 0x8b4a, 0x8b5f, 0x8b48, 0x8b48, 0x8b48, 0x8b48, 0x8b72, + 0x080c, 0x0dd5, 0x0096, 0x080c, 0x93cc, 0x080c, 0x9548, 0x6114, + 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0500, + 0x00be, 0x080c, 0x684c, 0x080c, 0xab6b, 0x009e, 0x0005, 0x080c, + 0x93cc, 0x00d6, 0x6114, 0x080c, 0xc825, 0x0130, 0x0096, 0x6114, + 0x2148, 0x080c, 0x6a46, 0x009e, 0x00de, 0x080c, 0xab6b, 0x080c, + 0x9548, 0x0005, 0x080c, 0x93cc, 0x080c, 0x306e, 0x6114, 0x0096, + 0x2148, 0x080c, 0xc825, 0x0120, 0xa87b, 0x0029, 0x080c, 0x6a46, + 0x009e, 0x080c, 0xab6b, 0x080c, 0x9548, 0x0005, 0x601b, 0x0000, + 0x9182, 0x0040, 0x0096, 0x0002, 0x8ba1, 0x8ba1, 0x8ba1, 0x8ba1, + 0x8ba1, 0x8ba1, 0x8ba1, 0x8ba1, 0x8ba3, 0x8ba1, 0x8ba1, 0x8ba1, + 0x8be5, 0x8ba1, 0x8ba1, 0x8ba1, 0x8ba1, 0x8ba1, 0x8ba1, 0x8ba9, + 0x8ba1, 0x080c, 0x0dd5, 0x6114, 0x2148, 0xa938, 0x918e, 0xffff, + 0x05e0, 0x00e6, 0x6114, 0x2148, 0x080c, 0x8952, 0x0096, 0xa8a8, + 0x2048, 0x080c, 0x67e4, 0x009e, 0xa8ab, 0x0000, 0x6010, 0x9005, + 0x0128, 0x00b6, 0x2058, 0x080c, 0x8a81, 0x00be, 0xae88, 0x00b6, + 0x2059, 0x0000, 0x080c, 0x8685, 0x00be, 0x01e0, 0x2071, 0x193c, + 0x080c, 0x86cc, 0x01b8, 0x9086, 0x0001, 0x1128, 0x2001, 0x1946, + 0x2004, 0x9005, 0x1178, 0x0096, 0x080c, 0x1000, 0x2900, 0x009e, + 0x0148, 0xa8aa, 0x00f6, 0x2c78, 0x080c, 0x8643, 0x00fe, 0x00ee, + 0x009e, 0x0005, 0x080c, 0x867c, 0x0cd0, 0x080c, 0x8c93, 0x009e, + 0x0005, 0x9182, 0x0040, 0x0096, 0x0002, 0x8bfd, 0x8bfd, 0x8bfd, + 0x8bff, 0x8bfd, 0x8bfd, 0x8bfd, 0x8c24, 0x8bfd, 0x8bfd, 0x8bfd, + 0x8bfd, 0x8bfd, 0x8bfd, 0x8bfd, 0x8bfd, 0x080c, 0x0dd5, 0x6003, + 0x0003, 0x6106, 0x6014, 0x2048, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, + 0xa837, 0x0000, 0xa83b, 0x0000, 0xa884, 0x9092, 0x199a, 0x0210, + 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x2c10, + 0x080c, 0x1b03, 0x080c, 0x8ee4, 0x0126, 0x2091, 0x8000, 0x080c, + 0x9548, 0x012e, 0x009e, 0x0005, 0x080c, 0x0dd5, 0x080c, 0x93cc, + 0x080c, 0x9548, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, + 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6a46, 0x080c, 0xab6b, + 0x009e, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096, + 0x0013, 0x009e, 0x0005, 0x8c53, 0x8c53, 0x8c53, 0x8c55, 0x8c66, + 0x8c53, 0x8c53, 0x8c53, 0x8c53, 0x8c53, 0x8c53, 0x8c53, 0x8c53, + 0x8c53, 0x8c53, 0x8c53, 0x080c, 0x0dd5, 0x080c, 0xa4d6, 0x6114, + 0x2148, 0xa87b, 0x0006, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0500, + 0x00be, 0x080c, 0x6a46, 0x080c, 0xab6b, 0x0005, 0x0461, 0x0005, + 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096, 0x0013, 0x009e, + 0x0005, 0x8c81, 0x8c81, 0x8c81, 0x8c83, 0x8c93, 0x8c81, 0x8c81, + 0x8c81, 0x8c81, 0x8c81, 0x8c81, 0x8c81, 0x8c81, 0x8c81, 0x8c81, + 0x8c81, 0x080c, 0x0dd5, 0x0036, 0x00e6, 0x2071, 0x19e5, 0x703c, + 0x9c06, 0x1120, 0x2019, 0x0000, 0x080c, 0xa2ac, 0x080c, 0xa4d6, + 0x00ee, 0x003e, 0x0005, 0x00f6, 0x00e6, 0x601b, 0x0000, 0x6014, + 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c, 0x8a81, + 0x00be, 0x2071, 0x193c, 0x080c, 0x86cc, 0x0160, 0x2001, 0x187f, + 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c, 0x8643, 0x00ee, + 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8, 0x2048, 0x080c, + 0x1032, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x867c, 0x0c80, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x187a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006, 0x8004, 0x2019, 0x0100, 0x231c, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x1208, 0x9200, 0x1f04, - 0x7e60, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020, 0x80f6, + 0x8cd8, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x004e, 0x003e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600, 0x8213, 0x2039, 0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x0228, 0x911a, 0x1220, - 0x1f04, 0x7e8a, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, 0x7e8a, + 0x1f04, 0x8d02, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, 0x8d02, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, - 0x2091, 0x2800, 0x2079, 0x19b6, 0x012e, 0x00d6, 0x2069, 0x19b6, + 0x2091, 0x2800, 0x2079, 0x19e5, 0x012e, 0x00d6, 0x2069, 0x19e5, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, - 0x0200, 0x080c, 0x97ce, 0x0401, 0x080c, 0x97b9, 0x00e9, 0x080c, - 0x97bc, 0x00d1, 0x080c, 0x97bf, 0x00b9, 0x080c, 0x97c2, 0x00a1, - 0x080c, 0x97c5, 0x0089, 0x080c, 0x97c8, 0x0071, 0x080c, 0x97cb, + 0x0200, 0x080c, 0xa82b, 0x0401, 0x080c, 0xa816, 0x00e9, 0x080c, + 0xa819, 0x00d1, 0x080c, 0xa81c, 0x00b9, 0x080c, 0xa81f, 0x00a1, + 0x080c, 0xa822, 0x0089, 0x080c, 0xa825, 0x0071, 0x080c, 0xa828, 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, - 0x9084, 0x0007, 0x0002, 0x7efd, 0x7f21, 0x7f60, 0x7f03, 0x7f21, - 0x7efd, 0x7efb, 0x7efb, 0x080c, 0x0db2, 0x080c, 0x7cc7, 0x080c, - 0x8582, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, - 0x2011, 0x588a, 0x080c, 0x7c4a, 0x7828, 0x9092, 0x00c8, 0x1228, - 0x8000, 0x782a, 0x080c, 0x58ca, 0x0c88, 0x62c0, 0x080c, 0x97d2, - 0x080c, 0x588a, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, - 0x0c28, 0x080c, 0x7cc7, 0x6220, 0xd2a4, 0x0160, 0x782b, 0x0000, - 0x7824, 0x9065, 0x090c, 0x0db2, 0x2009, 0x0013, 0x080c, 0x9a50, - 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0db2, 0x7828, - 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, 0x283d, - 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, 0x0db2, - 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8582, 0x0c00, - 0x080c, 0x8f97, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, 0x97d2, - 0x080c, 0xd358, 0x2009, 0x0014, 0x080c, 0x9a50, 0x00ce, 0x0880, - 0x2001, 0x19d2, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b, - 0x0000, 0x7824, 0x9065, 0x090c, 0x0db2, 0x2009, 0x0013, 0x080c, - 0x9aa2, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005, - 0x090c, 0x0db2, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, 0x782a, - 0x00de, 0x00ce, 0x00be, 0x080c, 0x283d, 0x02f0, 0x00b6, 0x00c6, - 0x00d6, 0x781c, 0x905d, 0x090c, 0x0db2, 0xb800, 0xc0dc, 0xb802, - 0x7924, 0x2160, 0x080c, 0x99d6, 0xb93c, 0x81ff, 0x090c, 0x0db2, + 0x9084, 0x0007, 0x0002, 0x8d75, 0x8d99, 0x8dd8, 0x8d7b, 0x8d99, + 0x8d75, 0x8d73, 0x8d73, 0x080c, 0x0dd5, 0x080c, 0x8308, 0x080c, + 0x941c, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, + 0x2011, 0x5c61, 0x080c, 0x8285, 0x7828, 0x9092, 0x00c8, 0x1228, + 0x8000, 0x782a, 0x080c, 0x5ca1, 0x0c88, 0x62c0, 0x080c, 0xa967, + 0x080c, 0x5c61, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, + 0x0c28, 0x080c, 0x8308, 0x6220, 0xd2a4, 0x0160, 0x782b, 0x0000, + 0x7824, 0x9065, 0x090c, 0x0dd5, 0x2009, 0x0013, 0x080c, 0xabe6, + 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dd5, 0x7828, + 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, 0x2a57, + 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, 0x0dd5, + 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x941c, 0x0c00, + 0x080c, 0x9fd8, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, 0xa967, + 0x080c, 0xe6a1, 0x2009, 0x0014, 0x080c, 0xabe6, 0x00ce, 0x0880, + 0x2001, 0x1a01, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b, + 0x0000, 0x7824, 0x9065, 0x090c, 0x0dd5, 0x2009, 0x0013, 0x080c, + 0xac38, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005, + 0x090c, 0x0dd5, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, 0x782a, + 0x00de, 0x00ce, 0x00be, 0x080c, 0x2a57, 0x02f0, 0x00b6, 0x00c6, + 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dd5, 0xb800, 0xc0dc, 0xb802, + 0x7924, 0x2160, 0x080c, 0xab6b, 0xb93c, 0x81ff, 0x090c, 0x0dd5, 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce, - 0x00be, 0x080c, 0x8582, 0x0868, 0x080c, 0x8f97, 0x0850, 0x2011, - 0x0130, 0x2214, 0x080c, 0x97d2, 0x080c, 0xd358, 0x7824, 0x9065, - 0x2009, 0x0014, 0x080c, 0x9a50, 0x00de, 0x00ce, 0x00be, 0x0804, - 0x7f71, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, 0x1be4, - 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4, 0x9205, - 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, 0x9a50, - 0x00ce, 0x0005, 0x2011, 0x19d5, 0x2013, 0x0000, 0x0cc8, 0x793c, - 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108, 0x7946, + 0x00be, 0x080c, 0x941c, 0x0868, 0x080c, 0x9fd8, 0x0850, 0x2011, + 0x0130, 0x2214, 0x080c, 0xa967, 0x080c, 0xe6a1, 0x7824, 0x9065, + 0x2009, 0x0014, 0x080c, 0xabe6, 0x00de, 0x00ce, 0x00be, 0x0804, + 0x8de9, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, 0x1d8c, + 0x6024, 0x6027, 0x0002, 0xd0f4, 0x15b8, 0x62c8, 0x60c4, 0x9205, + 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, 0xabe6, + 0x00ce, 0x0005, 0x2011, 0x1a04, 0x2013, 0x0000, 0x0cc8, 0x793c, + 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x1628, 0x8108, 0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014, - 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014, 0x9084, - 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160, 0x2009, - 0x004a, 0x080c, 0x9a50, 0x08a0, 0x7848, 0xc085, 0x784a, 0x0880, - 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, - 0x2c08, 0x2061, 0x19b6, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005, - 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, - 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19b6, - 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001, - 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8582, 0x00de, 0x0005, - 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000, - 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069, - 0x19b6, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8, - 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, - 0x2c08, 0x2061, 0x19b6, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005, - 0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, - 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, - 0x2c08, 0x2061, 0x19b6, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003, - 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005, - 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, - 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, - 0x19b6, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, - 0x80ef, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x80ea, 0x87ff, - 0x0120, 0x6054, 0x9106, 0x1904, 0x80ea, 0x703c, 0x9c06, 0x1178, - 0x0036, 0x2019, 0x0001, 0x080c, 0x9254, 0x7033, 0x0000, 0x9006, - 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001, 0x7038, - 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, - 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, - 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, - 0x0000, 0x080c, 0xb5fb, 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086, - 0x0003, 0x1590, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, - 0x0036, 0x0076, 0x080c, 0xb8e3, 0x080c, 0xd28c, 0x080c, 0x6536, - 0x007e, 0x003e, 0x001e, 0x080c, 0xb7dd, 0x080c, 0x9a06, 0x00ce, - 0x0804, 0x808e, 0x2c78, 0x600c, 0x2060, 0x0804, 0x808e, 0x85ff, - 0x0120, 0x0036, 0x080c, 0x865d, 0x003e, 0x012e, 0x000e, 0x001e, - 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, - 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, - 0x0016, 0x0036, 0x0076, 0x080c, 0xd28c, 0x080c, 0xcf91, 0x007e, - 0x003e, 0x001e, 0x0890, 0x6020, 0x9086, 0x000a, 0x0904, 0x80d4, - 0x0804, 0x80d2, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, - 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x19b6, 0x7838, 0x9065, - 0x0904, 0x816a, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0x9c06, - 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0x9254, 0x7833, 0x0000, - 0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c, 0xb5fb, + 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x793c, 0x9188, + 0x0008, 0x210c, 0x918e, 0x0009, 0x0d90, 0x6014, 0x9084, 0x1984, + 0x9085, 0x0016, 0x6016, 0x08a0, 0x793c, 0x2160, 0x2009, 0x004a, + 0x080c, 0xabe6, 0x0868, 0x7848, 0xc085, 0x784a, 0x0848, 0x0006, + 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, + 0x2061, 0x19e5, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005, 0x0148, + 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, 0x000e, + 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19e5, 0xb800, + 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001, 0x1110, + 0x2b00, 0x681e, 0x00de, 0x0804, 0x941c, 0x00de, 0x0005, 0xc0d5, + 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000, 0x0086, + 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069, 0x19e5, + 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8, 0x0006, + 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, + 0x2061, 0x19e5, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005, 0x0148, + 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e, + 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08, + 0x2061, 0x19e5, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, + 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005, 0x00f6, + 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056, + 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19e5, + 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x8f6e, + 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x8f69, 0x87ff, 0x0120, + 0x6054, 0x9106, 0x1904, 0x8f69, 0x703c, 0x9c06, 0x1178, 0x0036, + 0x2019, 0x0001, 0x080c, 0xa2ac, 0x7033, 0x0000, 0x9006, 0x703e, + 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001, 0x7038, 0x9c36, + 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, + 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, + 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, + 0x080c, 0xc825, 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, + 0x1590, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, + 0x0076, 0x080c, 0xcb0d, 0x080c, 0xe5d5, 0x080c, 0x6a46, 0x007e, + 0x003e, 0x001e, 0x080c, 0xca07, 0x080c, 0xab9c, 0x00ce, 0x0804, + 0x8f0d, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8f0d, 0x85ff, 0x0120, + 0x0036, 0x080c, 0x9548, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, + 0x003e, 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, + 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, + 0x0036, 0x0076, 0x080c, 0xe5d5, 0x080c, 0xe223, 0x007e, 0x003e, + 0x001e, 0x0890, 0x6020, 0x9086, 0x0009, 0x1168, 0xa87b, 0x0006, + 0x0016, 0x0036, 0x0076, 0x080c, 0x6a46, 0x080c, 0xab6b, 0x007e, + 0x003e, 0x001e, 0x0818, 0x6020, 0x9086, 0x000a, 0x0904, 0x8f53, + 0x0804, 0x8f51, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, + 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x19e5, 0x7838, 0x9065, + 0x0904, 0x8ffa, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0x9c06, + 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa2ac, 0x7833, 0x0000, + 0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c, 0xc825, 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1568, 0x3e08, 0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6040, 0x9005, 0x1180, 0x2001, - 0x1957, 0x2004, 0x6042, 0x0058, 0xa867, 0x0103, 0xab7a, 0xa877, - 0x0000, 0x080c, 0x6529, 0x080c, 0xb7dd, 0x080c, 0x9a06, 0x000e, - 0x0804, 0x8127, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, + 0x1986, 0x2004, 0x6042, 0x0058, 0xa867, 0x0103, 0xab7a, 0xa877, + 0x0000, 0x080c, 0x6a3a, 0x080c, 0xca07, 0x080c, 0xab9c, 0x000e, + 0x0804, 0x8fb7, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, - 0x080c, 0xcf91, 0x0c50, 0x6020, 0x9086, 0x000a, 0x09f8, 0x08e0, - 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, 0x080c, 0x8269, 0x008e, - 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0x19b6, 0x2091, - 0x8000, 0x080c, 0x8300, 0x080c, 0x838e, 0x012e, 0x00fe, 0x0005, - 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, - 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b6, 0x7614, 0x2660, - 0x2678, 0x8cff, 0x0904, 0x822e, 0x6010, 0x2058, 0xb8a0, 0x9206, - 0x1904, 0x8229, 0x88ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x8229, - 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, - 0x080c, 0x7cc7, 0x080c, 0x8fbb, 0x68c3, 0x0000, 0x080c, 0x9469, - 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, - 0x0138, 0x2001, 0x0100, 0x080c, 0x2987, 0x9006, 0x080c, 0x2987, + 0x080c, 0xe223, 0x0c50, 0x6020, 0x9086, 0x0009, 0x1130, 0xab7a, + 0x080c, 0x6a46, 0x080c, 0xab6b, 0x0c10, 0x6020, 0x9086, 0x000a, + 0x09a8, 0x0890, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, 0x080c, + 0x9103, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, + 0x19e5, 0x2091, 0x8000, 0x080c, 0x919a, 0x080c, 0x9228, 0x012e, + 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, + 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e5, + 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x90c8, 0x6010, 0x2058, + 0xb8a0, 0x9206, 0x1904, 0x90c3, 0x88ff, 0x0120, 0x6054, 0x9106, + 0x1904, 0x90c3, 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100, 0x6820, + 0xd0a4, 0x1508, 0x080c, 0x8308, 0x080c, 0x9ffc, 0x68c3, 0x0000, + 0x080c, 0xa4c6, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, + 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2ba1, 0x9006, + 0x080c, 0x2ba1, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, + 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x0804, 0x90c3, + 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, 0x1140, + 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, + 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, + 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xc825, 0x01e8, 0x6020, + 0x9086, 0x0003, 0x1580, 0x080c, 0xca24, 0x1118, 0x080c, 0xb51d, + 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, + 0x0086, 0x080c, 0xcb0d, 0x080c, 0xe5d5, 0x080c, 0x6a46, 0x008e, + 0x003e, 0x001e, 0x080c, 0xca07, 0x080c, 0xab9c, 0x080c, 0xa39c, + 0x00ce, 0x0804, 0x9043, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9043, + 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, + 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, + 0x0036, 0x0086, 0x080c, 0xe5d5, 0x080c, 0xe223, 0x008e, 0x003e, + 0x001e, 0x08d0, 0x080c, 0xb51d, 0x6020, 0x9086, 0x0002, 0x1160, + 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x90a9, 0x9086, + 0x008b, 0x0904, 0x90a9, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920, + 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086, 0x008b, + 0x09b0, 0x0804, 0x90bc, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006, + 0x0126, 0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x0904, + 0x9193, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19e5, 0xbe54, + 0x7018, 0x9b06, 0x1108, 0x761a, 0x701c, 0x9b06, 0x1130, 0x86ff, + 0x1118, 0x7018, 0x701e, 0x0008, 0x761e, 0xb858, 0x904d, 0x0108, + 0xae56, 0x96d5, 0x0000, 0x0110, 0x2900, 0xb05a, 0xb857, 0x0000, + 0xb85b, 0x0000, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x62ff, + 0x0904, 0x918f, 0x7624, 0x86ff, 0x0904, 0x917e, 0x9680, 0x0005, + 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, + 0x0560, 0x080c, 0x8308, 0x080c, 0x9ffc, 0x68c3, 0x0000, 0x080c, + 0xa4c6, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, + 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2ba1, 0x9006, 0x080c, + 0x2ba1, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, + 0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, + 0x2660, 0x080c, 0xab9c, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, + 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x9136, 0x89ff, 0x0158, + 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xcb0d, 0x080c, + 0xe5d5, 0x080c, 0x6a46, 0x080c, 0xa39c, 0x0804, 0x9136, 0x006e, + 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e, 0x00ae, + 0x00be, 0x0005, 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036, + 0x7814, 0x9065, 0x0904, 0x91fb, 0x600c, 0x0006, 0x600f, 0x0000, + 0x7824, 0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, + 0x080c, 0x8308, 0x080c, 0x9ffc, 0x68c3, 0x0000, 0x080c, 0xa4c6, + 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, + 0x0138, 0x2001, 0x0100, 0x080c, 0x2ba1, 0x9006, 0x080c, 0x2ba1, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, - 0x0028, 0x6003, 0x0009, 0x630a, 0x0804, 0x8229, 0x7014, 0x9c36, - 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, - 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, - 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, - 0x6014, 0x2048, 0x080c, 0xb5fb, 0x01e8, 0x6020, 0x9086, 0x0003, - 0x1580, 0x080c, 0xb7fa, 0x1118, 0x080c, 0xa364, 0x0098, 0xa867, - 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, - 0xb8e3, 0x080c, 0xd28c, 0x080c, 0x6536, 0x008e, 0x003e, 0x001e, - 0x080c, 0xb7dd, 0x080c, 0x9a06, 0x080c, 0x933f, 0x00ce, 0x0804, - 0x81a9, 0x2c78, 0x600c, 0x2060, 0x0804, 0x81a9, 0x012e, 0x000e, - 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, - 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, - 0x080c, 0xd28c, 0x080c, 0xcf91, 0x008e, 0x003e, 0x001e, 0x08d0, - 0x080c, 0xa364, 0x6020, 0x9086, 0x0002, 0x1160, 0x6004, 0x0006, - 0x9086, 0x0085, 0x000e, 0x0904, 0x820f, 0x9086, 0x008b, 0x0904, - 0x820f, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920, 0x6004, 0x0006, - 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, - 0x8222, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006, 0x0126, 0x2091, - 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x0904, 0x82f9, 0x00f6, - 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19b6, 0xbe54, 0x7018, 0x9b06, - 0x1108, 0x761a, 0x701c, 0x9b06, 0x1130, 0x86ff, 0x1118, 0x7018, - 0x701e, 0x0008, 0x761e, 0xb858, 0x904d, 0x0108, 0xae56, 0x96d5, - 0x0000, 0x0110, 0x2900, 0xb05a, 0xb857, 0x0000, 0xb85b, 0x0000, - 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x5eb1, 0x0904, 0x82f5, - 0x7624, 0x86ff, 0x0904, 0x82e4, 0x9680, 0x0005, 0x2004, 0x9906, - 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0560, 0x080c, - 0x7cc7, 0x080c, 0x8fbb, 0x68c3, 0x0000, 0x080c, 0x9469, 0x7027, - 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, - 0x2001, 0x0100, 0x080c, 0x2987, 0x9006, 0x080c, 0x2987, 0x2069, - 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, + 0x0040, 0x080c, 0x66cf, 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, + 0x00f8, 0x6014, 0x2048, 0x080c, 0xc823, 0x01b0, 0x6020, 0x9086, + 0x0003, 0x1508, 0x080c, 0xca24, 0x1118, 0x080c, 0xb51d, 0x0060, + 0x080c, 0x66cf, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, + 0x080c, 0x6a46, 0x080c, 0xca07, 0x080c, 0xab9c, 0x080c, 0xa39c, + 0x000e, 0x0804, 0x91a1, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, + 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, + 0xe223, 0x0c50, 0x080c, 0xb51d, 0x6020, 0x9086, 0x0002, 0x1150, + 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086, 0x008b, + 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, + 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, + 0x0006, 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, + 0x0904, 0x92a8, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, + 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x62ff, 0x0904, 0x92a5, 0x7e24, + 0x86ff, 0x0904, 0x9298, 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, + 0x9298, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x928f, + 0x080c, 0x8308, 0x080c, 0x9ffc, 0x68c3, 0x0000, 0x080c, 0xa4c6, + 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, + 0x0138, 0x2001, 0x0100, 0x080c, 0x2ba1, 0x9006, 0x080c, 0x2ba1, + 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, + 0x00de, 0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc, + 0x0150, 0x9680, 0x0010, 0x200c, 0x81ff, 0x1518, 0x2009, 0x1986, + 0x210c, 0x2102, 0x00f0, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, + 0x2660, 0x600f, 0x0000, 0x080c, 0xab9c, 0x00ce, 0x0048, 0x00de, + 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x923b, + 0x89ff, 0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, + 0x6a46, 0x080c, 0xa39c, 0x0804, 0x923b, 0x000e, 0x0804, 0x922f, + 0x781e, 0x781a, 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, + 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, + 0xb84c, 0x904d, 0x0188, 0xa878, 0x9606, 0x1170, 0x2071, 0x19e5, + 0x7024, 0x9035, 0x0148, 0x9080, 0x0005, 0x2004, 0x9906, 0x1120, + 0xb800, 0xc0dc, 0xb802, 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, + 0x0005, 0x00f6, 0x2079, 0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6, + 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c, 0x9ffc, + 0x78c3, 0x0000, 0x080c, 0xa4c6, 0x7027, 0x0000, 0x0036, 0x2079, + 0x0140, 0x7b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, + 0x2ba1, 0x9006, 0x080c, 0x2ba1, 0x2079, 0x0100, 0x7824, 0xd084, + 0x0110, 0x7827, 0x0001, 0x080c, 0xa4c6, 0x003e, 0x080c, 0x62ff, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, - 0x9a06, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, - 0x630a, 0x00ce, 0x0804, 0x829c, 0x89ff, 0x0158, 0xa867, 0x0103, - 0xab7a, 0xa877, 0x0000, 0x080c, 0xb8e3, 0x080c, 0xd28c, 0x080c, - 0x6536, 0x080c, 0x933f, 0x0804, 0x829c, 0x006e, 0x00de, 0x00ee, - 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e, 0x00ae, 0x00be, 0x0005, - 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065, - 0x0904, 0x8361, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824, 0x9c06, - 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x7cc7, - 0x080c, 0x8fbb, 0x68c3, 0x0000, 0x080c, 0x9469, 0x7827, 0x0000, - 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, - 0x0100, 0x080c, 0x2987, 0x9006, 0x080c, 0x2987, 0x2069, 0x0100, - 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x080c, - 0x625a, 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00f8, 0x6014, - 0x2048, 0x080c, 0xb5f9, 0x01b0, 0x6020, 0x9086, 0x0003, 0x1508, - 0x080c, 0xb7fa, 0x1118, 0x080c, 0xa364, 0x0060, 0x080c, 0x625a, - 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6536, - 0x080c, 0xb7dd, 0x080c, 0x9a06, 0x080c, 0x933f, 0x000e, 0x0804, - 0x8307, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, 0x009e, - 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xcf91, 0x0c50, - 0x080c, 0xa364, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004, 0x0006, - 0x9086, 0x0085, 0x000e, 0x0990, 0x9086, 0x008b, 0x0978, 0x08d0, - 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086, 0x0085, - 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006, 0x0066, - 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904, 0x840e, - 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4, 0xc0dc, - 0xb802, 0x080c, 0x5eb1, 0x0904, 0x840b, 0x7e24, 0x86ff, 0x0904, - 0x83fe, 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, 0x83fe, 0x00d6, - 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x83f5, 0x080c, 0x7cc7, - 0x080c, 0x8fbb, 0x68c3, 0x0000, 0x080c, 0x9469, 0x7827, 0x0000, - 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, - 0x0100, 0x080c, 0x2987, 0x9006, 0x080c, 0x2987, 0x2069, 0x0100, - 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, - 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc, 0x0150, 0x9680, - 0x0010, 0x200c, 0x81ff, 0x1518, 0x2009, 0x1957, 0x210c, 0x2102, - 0x00f0, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x600f, - 0x0000, 0x080c, 0x9a06, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, - 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x83a1, 0x89ff, 0x0138, - 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6536, 0x080c, - 0x933f, 0x0804, 0x83a1, 0x000e, 0x0804, 0x8395, 0x781e, 0x781a, - 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, 0x0005, 0x00e6, - 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c, 0x904d, - 0x0188, 0xa878, 0x9606, 0x1170, 0x2071, 0x19b6, 0x7024, 0x9035, - 0x0148, 0x9080, 0x0005, 0x2004, 0x9906, 0x1120, 0xb800, 0xc0dc, - 0xb802, 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00f6, - 0x2079, 0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003, - 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c, 0x8fbb, 0x78c3, 0x0000, - 0x080c, 0x9469, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, - 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2987, 0x9006, - 0x080c, 0x2987, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, - 0x0001, 0x080c, 0x9469, 0x003e, 0x080c, 0x5eb1, 0x00c6, 0xb83c, - 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x99d6, 0x00ce, - 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xb8e3, 0x080c, - 0x6536, 0x080c, 0x933f, 0x00fe, 0x0005, 0x00b6, 0x00e6, 0x00c6, - 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c, 0x2014, - 0xc2e4, 0x2202, 0x2071, 0x19b6, 0x7004, 0x9084, 0x0007, 0x0002, - 0x849a, 0x849e, 0x84b5, 0x84de, 0x851c, 0x849a, 0x84b5, 0x8498, - 0x080c, 0x0db2, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, - 0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0x9015, 0x0158, 0x7216, - 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, - 0x00be, 0x0005, 0x7216, 0x7212, 0x0ca8, 0x6010, 0x2058, 0x080c, - 0x5eb1, 0xb800, 0xc0dc, 0xb802, 0x7007, 0x0000, 0x7027, 0x0000, - 0x7020, 0x8001, 0x7022, 0x1148, 0x2001, 0x180c, 0x2014, 0xd2ec, - 0x1180, 0x00ce, 0x00ee, 0x00be, 0x0005, 0xb854, 0x9015, 0x0120, - 0x721e, 0x080c, 0x8582, 0x0ca8, 0x7218, 0x721e, 0x080c, 0x8582, - 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x865d, 0x0c58, 0x7024, 0x9065, - 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c, 0x933f, 0x600c, 0x9015, - 0x0120, 0x720e, 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, - 0x7014, 0x9c06, 0x1160, 0x080c, 0x933f, 0x600c, 0x9015, 0x0120, - 0x7216, 0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, - 0x9086, 0x0003, 0x1198, 0x6010, 0x2058, 0x080c, 0x5eb1, 0xb800, - 0xc0dc, 0xb802, 0x080c, 0x933f, 0x701c, 0x9065, 0x0138, 0xb854, - 0x9015, 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, - 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0140, 0x080c, - 0x933f, 0x600c, 0x9015, 0x0158, 0x720e, 0x600f, 0x0000, 0x080c, - 0x9469, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x720e, - 0x720a, 0x0ca8, 0x00d6, 0x2069, 0x19b6, 0x6830, 0x9084, 0x0003, - 0x0002, 0x853f, 0x8541, 0x8565, 0x853d, 0x080c, 0x0db2, 0x00de, - 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001, 0x01b8, 0x683c, 0x9065, - 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, - 0x0000, 0x683f, 0x0000, 0x2011, 0x19d5, 0x2013, 0x0000, 0x00ce, - 0x00de, 0x0005, 0x683a, 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, - 0x9065, 0x0d68, 0x6003, 0x0003, 0x0c50, 0x00c6, 0x9006, 0x6842, - 0x6846, 0x684a, 0x683c, 0x9065, 0x0160, 0x600c, 0x9015, 0x0130, - 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0018, 0x683e, 0x683a, - 0x6836, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1e5, - 0x2102, 0x0005, 0x2001, 0x180c, 0x200c, 0xd1ec, 0x0120, 0xc1ec, - 0x2102, 0x080c, 0x865d, 0x2001, 0x19c2, 0x2004, 0x9086, 0x0001, - 0x0d58, 0x00d6, 0x2069, 0x19b6, 0x6804, 0x9084, 0x0007, 0x0002, - 0x85a2, 0x8645, 0x8645, 0x8645, 0x8645, 0x8647, 0x8645, 0x85a0, - 0x080c, 0x0db2, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, - 0x680c, 0x9065, 0x0150, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, - 0x080c, 0x86b3, 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065, 0x0150, - 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x86b3, 0x00ce, - 0x00de, 0x0005, 0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904, - 0x8631, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0, 0xb854, - 0x905d, 0x0120, 0x920e, 0x0904, 0x8631, 0x0028, 0x6818, 0x920e, - 0x0904, 0x8631, 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, - 0x1d70, 0x2b00, 0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c, - 0x99ad, 0x0904, 0x8631, 0x8318, 0xbb3e, 0x6116, 0x2b10, 0x6212, - 0x0096, 0x2148, 0xa880, 0x9084, 0x00ff, 0x605e, 0xa883, 0x0000, - 0xa884, 0x009e, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, - 0x801b, 0x831b, 0x9318, 0x631a, 0x6114, 0x0096, 0x2148, 0xa964, - 0x009e, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0538, 0x00f6, 0x2c78, - 0x2061, 0x0100, 0xbab0, 0x629a, 0x2069, 0x0200, 0x2071, 0x0240, - 0x080c, 0x8bf2, 0x2069, 0x19b6, 0xbb00, 0xc3dd, 0xbb02, 0x6807, - 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823, 0x0003, 0x7803, - 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be, 0x00ce, 0x00de, - 0x0005, 0x00ee, 0x00be, 0x00ce, 0x0cd0, 0xbb00, 0xc3dd, 0xbb02, - 0x6807, 0x0006, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x080c, 0x97f2, - 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005, 0x00c6, - 0x680c, 0x9065, 0x0138, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, - 0x080c, 0x86b3, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, 0x2014, - 0xc2ed, 0x2202, 0x00de, 0x00fe, 0x0005, 0x00f6, 0x00d6, 0x2069, - 0x19b6, 0x6830, 0x9086, 0x0000, 0x1548, 0x2001, 0x180c, 0x2014, - 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8591, 0x2069, 0x19b6, - 0x2001, 0x180c, 0x200c, 0xd1c4, 0x11e0, 0x6838, 0x907d, 0x01b0, - 0x6a04, 0x9296, 0x0000, 0x1588, 0x6833, 0x0001, 0x683e, 0x6847, + 0xab6b, 0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, + 0xcb0d, 0x080c, 0x6a46, 0x080c, 0xa39c, 0x00fe, 0x0005, 0x00b6, + 0x00e6, 0x00c6, 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001, + 0x180c, 0x2014, 0xc2e4, 0x2202, 0x2071, 0x19e5, 0x7004, 0x9084, + 0x0007, 0x0002, 0x9334, 0x9338, 0x934f, 0x9378, 0x93b6, 0x9334, + 0x934f, 0x9332, 0x080c, 0x0dd5, 0x00ce, 0x00ee, 0x00be, 0x0005, + 0x7024, 0x9065, 0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0x9015, + 0x0158, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, + 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7216, 0x7212, 0x0ca8, 0x6010, + 0x2058, 0x080c, 0x62ff, 0xb800, 0xc0dc, 0xb802, 0x7007, 0x0000, + 0x7027, 0x0000, 0x7020, 0x8001, 0x7022, 0x1148, 0x2001, 0x180c, + 0x2014, 0xd2ec, 0x1180, 0x00ce, 0x00ee, 0x00be, 0x0005, 0xb854, + 0x9015, 0x0120, 0x721e, 0x080c, 0x941c, 0x0ca8, 0x7218, 0x721e, + 0x080c, 0x941c, 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x9548, 0x0c58, + 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c, 0xa39c, + 0x600c, 0x9015, 0x0120, 0x720e, 0x600f, 0x0000, 0x0448, 0x720e, + 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160, 0x080c, 0xa39c, 0x600c, + 0x9015, 0x0120, 0x7216, 0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, + 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198, 0x6010, 0x2058, 0x080c, + 0x62ff, 0xb800, 0xc0dc, 0xb802, 0x080c, 0xa39c, 0x701c, 0x9065, + 0x0138, 0xb854, 0x9015, 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, + 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, + 0x0140, 0x080c, 0xa39c, 0x600c, 0x9015, 0x0158, 0x720e, 0x600f, + 0x0000, 0x080c, 0xa4c6, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, + 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6, 0x2069, 0x19e5, 0x6830, + 0x9084, 0x0003, 0x0002, 0x93d9, 0x93db, 0x93ff, 0x93d7, 0x080c, + 0x0dd5, 0x00de, 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001, 0x01b8, + 0x683c, 0x9065, 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a, 0x600f, + 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011, 0x1a04, 0x2013, + 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a, 0x6836, 0x0c90, 0x6843, + 0x0000, 0x6838, 0x9065, 0x0d68, 0x6003, 0x0003, 0x0c50, 0x00c6, + 0x9006, 0x6842, 0x6846, 0x684a, 0x683c, 0x9065, 0x0160, 0x600c, + 0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0018, + 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, + 0x200c, 0xc1e5, 0x2102, 0x0005, 0x2001, 0x180c, 0x200c, 0xd1ec, + 0x0120, 0xc1ec, 0x2102, 0x080c, 0x9548, 0x2001, 0x19f1, 0x2004, + 0x9086, 0x0001, 0x0d58, 0x00d6, 0x2069, 0x19e5, 0x6804, 0x9084, + 0x0007, 0x0006, 0x9005, 0x11c8, 0x2001, 0x1837, 0x2004, 0x9084, + 0x0028, 0x1198, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x0168, + 0x2001, 0x188b, 0x2004, 0xd08c, 0x1118, 0xd084, 0x1118, 0x0028, + 0x080c, 0x9548, 0x000e, 0x00de, 0x0005, 0x000e, 0x0002, 0x9459, + 0x9516, 0x9516, 0x9516, 0x9516, 0x9518, 0x9516, 0x9457, 0x080c, + 0x0dd5, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, + 0x9065, 0x0520, 0x6114, 0x0096, 0x2148, 0xa964, 0x009e, 0x918c, + 0x00ff, 0x918e, 0x0035, 0x1180, 0x2009, 0x1837, 0x210c, 0x918c, + 0x0028, 0x1150, 0x080c, 0x717d, 0x0138, 0x0006, 0x2009, 0x188b, + 0x2104, 0xc095, 0x200a, 0x000e, 0x6807, 0x0004, 0x6826, 0x682b, + 0x0000, 0x080c, 0x95f0, 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065, + 0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x95f0, + 0x00ce, 0x00de, 0x0005, 0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000, + 0x0904, 0x9502, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0, + 0xb854, 0x905d, 0x0120, 0x920e, 0x0904, 0x9502, 0x0028, 0x6818, + 0x920e, 0x0904, 0x9502, 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888, + 0x9005, 0x1d70, 0x2b00, 0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40, + 0x080c, 0xab42, 0x0904, 0x9502, 0x8318, 0xbb3e, 0x6116, 0x2b10, + 0x6212, 0x0096, 0x2148, 0xa880, 0x9084, 0x00ff, 0x605e, 0xa883, + 0x0000, 0xa884, 0x009e, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, + 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x6114, 0x0096, 0x2148, + 0xa964, 0x009e, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0538, 0x00f6, + 0x2c78, 0x2061, 0x0100, 0xbac0, 0x629a, 0x2069, 0x0200, 0x2071, + 0x0240, 0x080c, 0x9b3d, 0x2069, 0x19e5, 0xbb00, 0xc3dd, 0xbb02, + 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823, 0x0003, + 0x7803, 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be, 0x00ce, + 0x00de, 0x0005, 0x00ee, 0x00be, 0x00ce, 0x0cd0, 0xbb00, 0xc3dd, + 0xbb02, 0x6807, 0x0006, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x080c, + 0xa987, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005, + 0x00c6, 0x680c, 0x9065, 0x0508, 0x6114, 0x0096, 0x2148, 0xa964, + 0x009e, 0x918c, 0x00ff, 0x918e, 0x0035, 0x1180, 0x2009, 0x1837, + 0x210c, 0x918c, 0x0028, 0x1150, 0x080c, 0x717d, 0x0138, 0x0006, + 0x2009, 0x188b, 0x2104, 0xc095, 0x200a, 0x000e, 0x6807, 0x0004, + 0x6826, 0x682b, 0x0000, 0x080c, 0x95f0, 0x00ce, 0x00de, 0x0005, + 0x2001, 0x180c, 0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe, 0x0005, + 0x00f6, 0x00d6, 0x2069, 0x19e5, 0x6830, 0x9086, 0x0000, 0x1570, + 0x2001, 0x180c, 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, + 0x942b, 0x2069, 0x19e5, 0x2001, 0x180c, 0x200c, 0xd1c4, 0x1508, + 0x6838, 0x907d, 0x01d8, 0x6a04, 0x9296, 0x0000, 0x1904, 0x95e9, + 0x7920, 0x918e, 0x0009, 0x0588, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, - 0x080c, 0x19f2, 0x1178, 0x012e, 0x080c, 0x8e0a, 0x00de, 0x00fe, - 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c, 0x6d03, - 0x006e, 0x08d8, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, + 0x080c, 0x1b8c, 0x1178, 0x012e, 0x080c, 0x9e4a, 0x00de, 0x00fe, + 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c, 0x722d, + 0x006e, 0x08b0, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, - 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0, 0x6a04, 0x9296, 0x0006, - 0x0958, 0x0804, 0x8655, 0x6020, 0x9084, 0x000f, 0x000b, 0x0005, - 0x86c7, 0x86cc, 0x8b2c, 0x8bbb, 0x86cc, 0x8b2c, 0x8bbb, 0x86c7, - 0x86cc, 0x86c7, 0x86c7, 0x86c7, 0x86c7, 0x86c7, 0x86c7, 0x080c, - 0x847d, 0x080c, 0x8582, 0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, - 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, - 0x2071, 0x0240, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0db2, 0x6110, - 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x908a, 0x0040, - 0x1a04, 0x8738, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, - 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x88af, 0x88ea, - 0x8913, 0x89bb, 0x89dd, 0x89e3, 0x89f0, 0x89f8, 0x8a04, 0x8a0a, - 0x8a1b, 0x8a0a, 0x8a73, 0x89f8, 0x8a7f, 0x8a85, 0x8a04, 0x8a85, - 0x8a91, 0x8736, 0x8736, 0x8736, 0x8736, 0x8736, 0x8736, 0x8736, - 0x8736, 0x8736, 0x8736, 0x8736, 0x910b, 0x912e, 0x913f, 0x915f, - 0x9191, 0x89f0, 0x8736, 0x89f0, 0x8a0a, 0x8736, 0x8913, 0x89bb, - 0x8736, 0x9556, 0x8a0a, 0x8736, 0x9572, 0x8a0a, 0x8736, 0x8a04, - 0x88a9, 0x8759, 0x8736, 0x958e, 0x95fb, 0x96d2, 0x8736, 0x96df, - 0x89ed, 0x970a, 0x8736, 0x919b, 0x9737, 0x8736, 0x080c, 0x0db2, - 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, - 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8757, 0x8757, 0x8757, - 0x8780, 0x882c, 0x8837, 0x8757, 0x8757, 0x8757, 0x887e, 0x888a, - 0x879b, 0x8757, 0x87b6, 0x87ea, 0x98b4, 0x98f9, 0x8a0a, 0x080c, - 0x0db2, 0x00d6, 0x0096, 0x080c, 0x8aa4, 0x7003, 0x2414, 0x7007, - 0x0018, 0x700b, 0x0800, 0x7814, 0x2048, 0xa83c, 0x700e, 0xa850, - 0x7022, 0xa854, 0x7026, 0x60c3, 0x0018, 0x080c, 0x8f8f, 0x009e, - 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, - 0x9940, 0x1118, 0x9084, 0xff80, 0x0110, 0x9085, 0x0001, 0x0005, - 0x00d6, 0x0096, 0x080c, 0x8aa4, 0x7003, 0x0500, 0x7814, 0x2048, - 0xa874, 0x700a, 0xa878, 0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, - 0xa884, 0x701a, 0xa888, 0x701e, 0x60c3, 0x0010, 0x080c, 0x8f8f, - 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8aa4, 0x7003, - 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, - 0x7012, 0xa8d8, 0x7016, 0xa8dc, 0x701a, 0xa8e0, 0x701e, 0x60c3, - 0x0010, 0x080c, 0x8f8f, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, - 0x0126, 0x2091, 0x8000, 0x080c, 0x8aa4, 0x20e9, 0x0000, 0x2001, - 0x1972, 0x2003, 0x0000, 0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, - 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, - 0x2001, 0x1972, 0x0016, 0x200c, 0x2001, 0x0001, 0x080c, 0x20be, - 0x080c, 0xc2e6, 0x9006, 0x080c, 0x20be, 0x001e, 0xa804, 0x9005, - 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c, 0x8f8f, 0x012e, 0x009e, - 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, - 0x8aef, 0x20e9, 0x0000, 0x2001, 0x1972, 0x2003, 0x0000, 0x7814, - 0x2048, 0xa86f, 0x0200, 0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, - 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, - 0x2001, 0x1972, 0x0016, 0x200c, 0x080c, 0xc2e6, 0x001e, 0xa804, - 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, - 0x0f87, 0x080c, 0x8f8f, 0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, - 0x8004, 0x9084, 0x0003, 0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, - 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c, 0x8aa4, 0x7003, 0x7800, - 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, 0x0804, 0x8f8f, 0x00d6, - 0x00e6, 0x080c, 0x8aef, 0x7814, 0x9084, 0xff00, 0x2073, 0x0200, - 0x8e70, 0x8e70, 0x9095, 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, - 0x8e70, 0x2069, 0x1805, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, - 0x1f04, 0x884d, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, - 0x8e70, 0x1f04, 0x8856, 0x2069, 0x1982, 0x9086, 0xdf00, 0x0110, - 0x2069, 0x199c, 0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, - 0x2061, 0x0200, 0x6010, 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, - 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x8864, 0x60c3, - 0x004c, 0x080c, 0x8f8f, 0x00ee, 0x00de, 0x0005, 0x080c, 0x8aa4, - 0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, - 0x0804, 0x8f8f, 0x00d6, 0x0026, 0x0016, 0x080c, 0x8aef, 0x7003, - 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, - 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70, 0x2073, 0x0000, 0x00ee, - 0x7206, 0x710a, 0x62c2, 0x080c, 0x8f8f, 0x001e, 0x002e, 0x00de, - 0x0005, 0x2001, 0x1816, 0x2004, 0x609a, 0x0804, 0x8f8f, 0x080c, - 0x8aa4, 0x7003, 0x5200, 0x2069, 0x1853, 0x6804, 0xd084, 0x0130, - 0x6828, 0x0016, 0x080c, 0x2509, 0x710e, 0x001e, 0x20a9, 0x0004, - 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, - 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x0254, 0x4003, - 0x080c, 0x9940, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, - 0x181d, 0x2004, 0x7032, 0x2001, 0x181e, 0x2004, 0x7036, 0x0030, - 0x2001, 0x1816, 0x2004, 0x9084, 0x00ff, 0x7036, 0x60c3, 0x001c, - 0x0804, 0x8f8f, 0x080c, 0x8aa4, 0x7003, 0x0500, 0x080c, 0x9940, - 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181d, 0x2004, - 0x700a, 0x2001, 0x181e, 0x2004, 0x700e, 0x0030, 0x2001, 0x1816, - 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, 0x20e1, 0x0001, - 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x60c3, - 0x0010, 0x0804, 0x8f8f, 0x080c, 0x8aa4, 0x9006, 0x080c, 0x626e, - 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003, 0x0400, 0x620c, 0xc2b4, - 0x620e, 0x0058, 0x7814, 0x0096, 0x904d, 0x0120, 0x9006, 0xa89a, - 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300, 0xb8a0, 0x9086, 0x007e, - 0x1904, 0x8982, 0x00d6, 0x2069, 0x193d, 0x2001, 0x1835, 0x2004, - 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808, 0x9084, 0x2000, 0x7012, - 0x080c, 0x9957, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022, - 0x681c, 0x7026, 0x0090, 0x6800, 0x700a, 0x6804, 0x700e, 0x6808, - 0x080c, 0x6c53, 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084, 0x3fff, - 0x7012, 0x080c, 0x9957, 0x680c, 0x7016, 0x00de, 0x20a9, 0x0004, - 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, - 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, - 0x00d6, 0x080c, 0x97b9, 0x2069, 0x1945, 0x2071, 0x024e, 0x6800, - 0xc0dd, 0x7002, 0x080c, 0x5117, 0xd0e4, 0x0110, 0x680c, 0x700e, - 0x00de, 0x04a8, 0x2001, 0x1835, 0x2004, 0xd0a4, 0x0170, 0x0016, - 0x2001, 0x193e, 0x200c, 0x60e0, 0x9106, 0x0130, 0x2100, 0x60e3, - 0x0000, 0x080c, 0x254a, 0x61e2, 0x001e, 0x20e1, 0x0001, 0x2099, - 0x193d, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x4003, - 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, 0x0256, 0x4003, 0x20a9, - 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, 0x080c, 0x97b9, - 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, 0x1945, 0x4003, 0x60c3, - 0x0074, 0x0804, 0x8f8f, 0x080c, 0x8aa4, 0x7003, 0x2010, 0x7007, - 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, 0x9006, 0x00f6, 0x2079, - 0x1853, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, - 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, 0x00d6, 0x0804, 0x8a54, - 0x7026, 0x60c3, 0x0014, 0x0804, 0x8f8f, 0x080c, 0x8aa4, 0x7003, - 0x5000, 0x0804, 0x892d, 0x080c, 0x8aa4, 0x7003, 0x2110, 0x7007, - 0x0014, 0x60c3, 0x0014, 0x0804, 0x8f8f, 0x080c, 0x8ae6, 0x0010, - 0x080c, 0x8aef, 0x7003, 0x0200, 0x60c3, 0x0004, 0x0804, 0x8f8f, - 0x080c, 0x8aef, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, - 0x60c3, 0x0008, 0x0804, 0x8f8f, 0x080c, 0x8aef, 0x7003, 0x0200, - 0x0804, 0x892d, 0x080c, 0x8aef, 0x7003, 0x0100, 0x782c, 0x9005, - 0x0110, 0x700a, 0x0010, 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, - 0x0008, 0x0804, 0x8f8f, 0x00d6, 0x080c, 0x8aef, 0x7003, 0x0210, - 0x7007, 0x0014, 0x700b, 0x0800, 0xb894, 0x9086, 0x0014, 0x1198, - 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998, 0x9184, 0xc000, 0x1140, - 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058, 0x700f, 0x0100, 0x0040, - 0x700f, 0x0400, 0x0028, 0x700f, 0x0700, 0x0010, 0x700f, 0x0800, - 0x00f6, 0x2079, 0x1853, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, - 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x2009, 0x1875, 0x210c, - 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, 0x2009, 0x1873, 0x210c, - 0xd1e4, 0x0150, 0xc0c5, 0xbabc, 0xd28c, 0x1108, 0xc0cd, 0x9094, - 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, 0x0130, 0x9094, 0x0030, - 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x7026, 0x60c3, 0x0014, - 0x00de, 0x0804, 0x8f8f, 0x080c, 0x8aef, 0x7003, 0x0210, 0x7007, - 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, 0x0804, 0x8f8f, 0x080c, - 0x8aef, 0x7003, 0x0200, 0x0804, 0x88b3, 0x080c, 0x8aef, 0x7003, - 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, - 0x8f8f, 0x080c, 0x8aef, 0x7003, 0x0100, 0x700b, 0x000b, 0x60c3, - 0x0008, 0x0804, 0x8f8f, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, - 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, - 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0x97ce, 0xb810, 0x9305, - 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878, - 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, 0x003e, 0x00de, 0x080c, - 0x8f7d, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027, 0xffff, 0x2071, - 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0x97ce, 0x7003, 0x02ff, - 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878, - 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10, 0x7003, 0x0100, 0x7007, - 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000, 0x0005, 0x0026, 0x00d6, - 0x0036, 0x0046, 0x2019, 0x3300, 0x2021, 0x0800, 0x0040, 0x0026, - 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300, 0x2021, 0x0100, 0x080c, - 0x97ce, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, - 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, 0x1128, 0x700b, 0x00ff, - 0x700f, 0xfffe, 0x0020, 0x6874, 0x700a, 0x6878, 0x700e, 0x0000, - 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, 0x00de, 0x080c, 0x8f7d, - 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x002e, - 0x0005, 0x080c, 0x8f7d, 0x721a, 0x7a08, 0x7222, 0x7814, 0x7026, - 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x00e6, - 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0085, - 0x0a0c, 0x0db2, 0x908a, 0x0092, 0x1a0c, 0x0db2, 0x6110, 0x2158, - 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082, 0x0085, 0x0033, - 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, 0x8b5d, 0x8b6c, - 0x8b77, 0x8b5b, 0x8b5b, 0x8b5b, 0x8b5d, 0x8b5b, 0x8b5b, 0x8b5b, - 0x8b5b, 0x8b5b, 0x8b5b, 0x080c, 0x0db2, 0x0411, 0x60c3, 0x0000, - 0x0026, 0x080c, 0x283d, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, - 0x2012, 0x002e, 0x0804, 0x8f8f, 0x0431, 0x7808, 0x700a, 0x7814, - 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, 0x0804, 0x8f8f, 0x0479, - 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004, 0x0804, 0x8f8f, - 0x0026, 0x080c, 0x97ce, 0xb810, 0x9085, 0x8100, 0x7002, 0xb814, - 0x7006, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878, 0x700e, 0x7013, - 0x0009, 0x0804, 0x8abf, 0x0026, 0x080c, 0x97ce, 0xb810, 0x9085, - 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6874, 0x700a, - 0x6878, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x8b21, 0x0026, - 0x080c, 0x97ce, 0xb810, 0x9085, 0x8500, 0x7002, 0xb814, 0x7006, - 0x2069, 0x1800, 0x6874, 0x700a, 0x6878, 0x700e, 0x2001, 0x0099, - 0x7012, 0x0804, 0x8b21, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, - 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240, 0x7804, 0x908a, 0x0040, - 0x0a0c, 0x0db2, 0x908a, 0x0054, 0x1a0c, 0x0db2, 0x7910, 0x2158, - 0xb9b0, 0x2061, 0x0100, 0x619a, 0x9082, 0x0040, 0x0033, 0x00fe, - 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, 0x8bf2, 0x8c99, 0x8c6c, - 0x8dbb, 0x8bf0, 0x8bf0, 0x8bf0, 0x8bf0, 0x8bf0, 0x8bf0, 0x8bf0, - 0x930c, 0x9318, 0x9324, 0x9330, 0x8bf0, 0x9716, 0x8bf0, 0x9300, - 0x080c, 0x0db2, 0x0096, 0x780b, 0xffff, 0x080c, 0x8c48, 0x7914, - 0x2148, 0xa978, 0x7956, 0x7132, 0xa97c, 0x9184, 0x000f, 0x1118, - 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, 0x2001, 0x0004, 0x0018, - 0x9084, 0x0006, 0x8004, 0x2010, 0x785c, 0x9084, 0x00ff, 0x8007, - 0x9205, 0x7042, 0xd1ac, 0x0128, 0x7047, 0x0002, 0x080c, 0x1582, - 0x0050, 0xd1b4, 0x0118, 0x7047, 0x0001, 0x0028, 0x7047, 0x0000, - 0x9016, 0x2230, 0x0010, 0xaab0, 0xaeac, 0x726a, 0x766e, 0x20a9, - 0x0008, 0x20e9, 0x0000, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, - 0x2098, 0x20a1, 0x0252, 0x2069, 0x0200, 0x6813, 0x0018, 0x4003, - 0x6813, 0x0008, 0x60c3, 0x0020, 0x6017, 0x0009, 0x2001, 0x19d2, - 0x2003, 0x07d0, 0x2001, 0x19d1, 0x2003, 0x0009, 0x009e, 0x0005, - 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8bc, 0xd084, 0x0128, 0x7a46, - 0x7b14, 0x7b4a, 0x722e, 0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217, - 0x721a, 0xba10, 0x9295, 0x0600, 0x7202, 0xba14, 0x7206, 0x2069, - 0x1800, 0x6a74, 0x720a, 0x6a78, 0x720e, 0x7013, 0x0829, 0x2f10, - 0x7222, 0x7027, 0xffff, 0x0005, 0x00d6, 0x0096, 0x0081, 0x7814, - 0x2048, 0xa890, 0x7002, 0xa88c, 0x7006, 0xa8b0, 0x700a, 0xa8ac, - 0x700e, 0x60c3, 0x000c, 0x009e, 0x00de, 0x0804, 0x8f8f, 0x6813, - 0x0008, 0xb810, 0x9085, 0x0500, 0x7002, 0xb814, 0x7006, 0x2069, - 0x1800, 0x6874, 0x700a, 0x6878, 0x700e, 0x7013, 0x0889, 0x080c, - 0x8f7d, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, - 0x0005, 0x00d6, 0x0096, 0x080c, 0x8d99, 0x7814, 0x2048, 0x080c, - 0xb5f9, 0x1130, 0x7814, 0x9084, 0x0700, 0x8007, 0x0033, 0x0010, - 0x9006, 0x001b, 0x009e, 0x00de, 0x0005, 0x8cb7, 0x8d20, 0x8d30, - 0x8d56, 0x8d62, 0x8d73, 0x8d7b, 0x8cb5, 0x080c, 0x0db2, 0x0016, - 0x0036, 0xa97c, 0x918c, 0x0003, 0x0118, 0x9186, 0x0003, 0x1198, - 0xaba8, 0x7824, 0xd0cc, 0x1168, 0x7316, 0xa898, 0x701a, 0xa894, - 0x701e, 0x003e, 0x001e, 0x2001, 0x1980, 0x2004, 0x60c2, 0x0804, - 0x8f8f, 0xc3e5, 0x0c88, 0x9186, 0x0001, 0x190c, 0x0db2, 0xaba8, - 0x7824, 0xd0cc, 0x1904, 0x8d1d, 0x7316, 0xa898, 0x701a, 0xa894, - 0x701e, 0xa8a4, 0x7026, 0xa8ac, 0x702e, 0x2009, 0x0018, 0x9384, - 0x0300, 0x0570, 0xd3c4, 0x0110, 0xa8ac, 0x9108, 0xd3cc, 0x0110, - 0xa8a4, 0x9108, 0x6810, 0x9085, 0x0010, 0x6812, 0x2011, 0x0258, - 0x20e9, 0x0000, 0x22a0, 0x0156, 0x20a9, 0x0008, 0xa860, 0x20e0, - 0xa85c, 0x9080, 0x002c, 0x2098, 0x4003, 0x6810, 0x8000, 0x6812, - 0x2011, 0x0240, 0x22a0, 0x20a9, 0x0005, 0x4003, 0x6810, 0xc084, - 0x6812, 0x015e, 0x9184, 0x0003, 0x0118, 0x2019, 0x0245, 0x201a, - 0x61c2, 0x003e, 0x001e, 0x0804, 0x8f8f, 0xc3e5, 0x0804, 0x8cdc, - 0x2011, 0x0008, 0x2001, 0x180e, 0x2004, 0xd0a4, 0x0110, 0x2011, - 0x0028, 0x7824, 0xd0cc, 0x1110, 0x7216, 0x0470, 0x0ce8, 0xc2e5, - 0x2011, 0x0302, 0x0016, 0x782c, 0x701a, 0x7930, 0x711e, 0x9105, - 0x0108, 0xc2dd, 0x001e, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, - 0x7027, 0x0012, 0x702f, 0x0008, 0x7043, 0x7000, 0x7047, 0x0500, - 0x704f, 0x000a, 0x2069, 0x0200, 0x6813, 0x0009, 0x2071, 0x0240, - 0x700b, 0x2500, 0x60c3, 0x0032, 0x0804, 0x8f8f, 0x2011, 0x0028, - 0x7824, 0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804, 0x8f8f, - 0x0cd0, 0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc, 0x0108, 0xc2e5, - 0x7216, 0x702f, 0x0008, 0x7858, 0x9084, 0x00ff, 0x7036, 0x60c3, - 0x0020, 0x0804, 0x8f8f, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0108, - 0xc2e5, 0x7216, 0x0c08, 0x0036, 0x7b14, 0x9384, 0xff00, 0x7816, - 0x9384, 0x00ff, 0x8001, 0x1138, 0x7824, 0xd0cc, 0x0108, 0xc2e5, - 0x7216, 0x003e, 0x0888, 0x0046, 0x2021, 0x0800, 0x0006, 0x7824, - 0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x7416, 0x004e, 0x701e, 0x003e, - 0x0818, 0x00d6, 0x6813, 0x0008, 0xb810, 0x9085, 0x0700, 0x7002, - 0xb814, 0x7006, 0x2069, 0x1800, 0x6874, 0x700a, 0x6878, 0x700e, - 0x7824, 0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0x8f7d, 0x721a, - 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, - 0x7013, 0x0889, 0x0c90, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, - 0x0013, 0x001e, 0x0005, 0x8dcb, 0x8dcb, 0x8dcd, 0x8dcb, 0x8dcb, - 0x8dcb, 0x8de7, 0x8dcb, 0x080c, 0x0db2, 0x7914, 0x918c, 0x08ff, - 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1853, - 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, - 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x8f8f, 0x2009, - 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0x97ce, - 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, - 0x1800, 0x6a74, 0x720a, 0x6a78, 0x720e, 0x7013, 0x0888, 0x918d, - 0x0008, 0x7116, 0x080c, 0x8f7d, 0x721a, 0x7a08, 0x7222, 0x2f10, - 0x7226, 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, + 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0, 0x7908, 0xd1fc, 0x1198, + 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, + 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1b8c, 0x19d8, 0x012e, + 0x080c, 0x9dcb, 0x0858, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, + 0x1188, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x0158, 0x2001, + 0x19e6, 0x2004, 0x9005, 0x11f0, 0x2001, 0x188b, 0x200c, 0xc185, + 0xc18c, 0x2102, 0x2f00, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, + 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, + 0x1b8c, 0x1904, 0x958a, 0x012e, 0x6a3c, 0x2278, 0x080c, 0x9d55, + 0x0804, 0x957e, 0x2011, 0x188b, 0x2204, 0xc08d, 0x2012, 0x0804, + 0x957e, 0x6a04, 0x9296, 0x0006, 0x0904, 0x9568, 0x0804, 0x9540, + 0x6020, 0x9084, 0x000f, 0x000b, 0x0005, 0x9604, 0x9609, 0x9a77, + 0x9b06, 0x9609, 0x9a77, 0x9b06, 0x9604, 0x9609, 0x9604, 0x9604, + 0x9604, 0x9604, 0x9604, 0x9604, 0x080c, 0x9317, 0x080c, 0x941c, + 0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, + 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, + 0x908a, 0x0053, 0x1a0c, 0x0dd5, 0x6110, 0x2158, 0xb9c0, 0x2c78, + 0x2061, 0x0100, 0x619a, 0x908a, 0x0040, 0x1a04, 0x9675, 0x005b, + 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, + 0x015e, 0x00be, 0x0005, 0x97fa, 0x9835, 0x985e, 0x9906, 0x9928, + 0x992e, 0x993b, 0x9943, 0x994f, 0x9955, 0x9966, 0x9955, 0x99be, + 0x9943, 0x99ca, 0x99d0, 0x994f, 0x99d0, 0x99dc, 0x9673, 0x9673, + 0x9673, 0x9673, 0x9673, 0x9673, 0x9673, 0x9673, 0x9673, 0x9673, + 0x9673, 0xa163, 0xa186, 0xa197, 0xa1b7, 0xa1e9, 0x993b, 0x9673, + 0x993b, 0x9955, 0x9673, 0x985e, 0x9906, 0x9673, 0xa5b3, 0x9955, + 0x9673, 0xa5cf, 0x9955, 0x9673, 0x994f, 0x97f4, 0x9696, 0x9673, + 0xa5eb, 0xa658, 0xa72f, 0x9673, 0xa73c, 0x9938, 0xa767, 0x9673, + 0xa1f3, 0xa794, 0x9673, 0x080c, 0x0dd5, 0x2100, 0x005b, 0x00fe, + 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, + 0x00be, 0x0005, 0xa82f, 0xa8e1, 0x9694, 0x96bd, 0x9769, 0x9774, + 0x9694, 0x993b, 0x9694, 0x97bb, 0x97c7, 0x96d8, 0x9694, 0x96f3, + 0x9727, 0xaa49, 0xaa8e, 0x9955, 0x080c, 0x0dd5, 0x00d6, 0x0096, + 0x080c, 0x99ef, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800, + 0x7814, 0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, + 0x60c3, 0x0018, 0x080c, 0x9fd0, 0x009e, 0x00de, 0x0005, 0x7810, + 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xaad5, 0x1118, 0x9084, + 0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, + 0x99ef, 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878, + 0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888, + 0x701e, 0x60c3, 0x0010, 0x080c, 0x9fd0, 0x009e, 0x00de, 0x0005, + 0x00d6, 0x0096, 0x080c, 0x99ef, 0x7003, 0x0500, 0x7814, 0x2048, + 0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, + 0xa8dc, 0x701a, 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0x9fd0, + 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, + 0x080c, 0x99ef, 0x20e9, 0x0000, 0x2001, 0x19a1, 0x2003, 0x0000, + 0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, + 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a1, 0x0016, + 0x200c, 0x2001, 0x0001, 0x080c, 0x2269, 0x080c, 0xd53f, 0x9006, + 0x080c, 0x2269, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, + 0x04d9, 0x080c, 0x9fd0, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, + 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x9a3a, 0x20e9, 0x0000, + 0x2001, 0x19a1, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, + 0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, + 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a1, 0x0016, + 0x200c, 0x080c, 0xd53f, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, + 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fb2, 0x080c, 0x9fd0, + 0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, + 0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, + 0x0005, 0x080c, 0x99ef, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, + 0x60c3, 0x0008, 0x0804, 0x9fd0, 0x00d6, 0x00e6, 0x080c, 0x9a3a, + 0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095, + 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, + 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x978a, 0x2069, + 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9793, + 0x2069, 0x19b1, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19cb, 0x20a9, + 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, + 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, + 0x8d68, 0x8e70, 0x1f04, 0x97a1, 0x60c3, 0x004c, 0x080c, 0x9fd0, + 0x00ee, 0x00de, 0x0005, 0x080c, 0x99ef, 0x7003, 0x6300, 0x7007, + 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9fd0, 0x00d6, + 0x0026, 0x0016, 0x080c, 0x9a3a, 0x7003, 0x0200, 0x7814, 0x700e, + 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2069, + 0x1923, 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70, 0x2073, + 0x0000, 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800, 0x8e70, + 0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x9fd0, + 0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004, 0x609a, + 0x0804, 0x9fd0, 0x080c, 0x99ef, 0x7003, 0x5200, 0x2069, 0x1847, + 0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2723, 0x710e, + 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, + 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, + 0x20a1, 0x0254, 0x4003, 0x080c, 0xaad5, 0x1120, 0xb8a0, 0x9082, + 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001, 0x1820, + 0x2004, 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, + 0x7036, 0x60c3, 0x001c, 0x0804, 0x9fd0, 0x080c, 0x99ef, 0x7003, + 0x0500, 0x080c, 0xaad5, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, + 0x2001, 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004, 0x700e, + 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, + 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, + 0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0x9fd0, 0x080c, 0x99ef, + 0x9006, 0x080c, 0x6701, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003, + 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d, + 0x0120, 0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300, + 0xb8a0, 0x9086, 0x007e, 0x1904, 0x98cd, 0x00d6, 0x2069, 0x196c, + 0x2001, 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808, + 0x9084, 0x2000, 0x7012, 0x080c, 0xaaec, 0x680c, 0x7016, 0x701f, + 0x2710, 0x6818, 0x7022, 0x681c, 0x7026, 0x0090, 0x6800, 0x700a, + 0x6804, 0x700e, 0x6808, 0x080c, 0x717d, 0x1118, 0x9084, 0x37ff, + 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xaaec, 0x680c, 0x7016, + 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, + 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, + 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xa816, 0x2069, 0x1974, + 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x54bb, 0xd0e4, + 0x0110, 0x680c, 0x700e, 0x00de, 0x04a8, 0x2001, 0x1837, 0x2004, + 0xd0a4, 0x0170, 0x0016, 0x2001, 0x196d, 0x200c, 0x60e0, 0x9106, + 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x2764, 0x61e2, 0x001e, + 0x20e1, 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1, 0x024e, + 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, + 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, + 0x4003, 0x080c, 0xa816, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, + 0x1974, 0x4003, 0x60c3, 0x0074, 0x0804, 0x9fd0, 0x080c, 0x99ef, + 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, + 0x9006, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac, 0x1110, + 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, + 0x00d6, 0x0804, 0x999f, 0x7026, 0x60c3, 0x0014, 0x0804, 0x9fd0, + 0x080c, 0x99ef, 0x7003, 0x5000, 0x0804, 0x9878, 0x080c, 0x99ef, + 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x9fd0, + 0x080c, 0x9a31, 0x0010, 0x080c, 0x9a3a, 0x7003, 0x0200, 0x60c3, + 0x0004, 0x0804, 0x9fd0, 0x080c, 0x9a3a, 0x7003, 0x0100, 0x700b, + 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x9fd0, 0x080c, + 0x9a3a, 0x7003, 0x0200, 0x0804, 0x9878, 0x080c, 0x9a3a, 0x7003, + 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003, + 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9fd0, 0x00d6, 0x080c, + 0x9a3a, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894, + 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998, + 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058, + 0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700, + 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, + 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, + 0x2009, 0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, + 0x2009, 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbacc, 0xd28c, + 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, + 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, + 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x9fd0, 0x080c, 0x9a3a, + 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, + 0x0804, 0x9fd0, 0x080c, 0x9a3a, 0x7003, 0x0200, 0x0804, 0x97fe, + 0x080c, 0x9a3a, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, + 0x60c3, 0x0008, 0x0804, 0x9fd0, 0x080c, 0x9a3a, 0x7003, 0x0100, + 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x9fd0, 0x0026, 0x00d6, + 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, + 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, + 0xa82b, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, + 0x687c, 0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, + 0x003e, 0x00de, 0x080c, 0x9fbe, 0x721a, 0x9f95, 0x0000, 0x7222, + 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, + 0xa82b, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, + 0x687c, 0x700a, 0x6880, 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10, + 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000, + 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300, 0x2021, + 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300, + 0x2021, 0x0100, 0x080c, 0xa82b, 0xb810, 0x9305, 0x7002, 0xb814, + 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, + 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c, 0x700a, + 0x6880, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, + 0x00de, 0x080c, 0x9fbe, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, + 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x9fbe, 0x721a, 0x7a08, + 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, + 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, + 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, 0x908a, 0x0092, 0x1a0c, + 0x0dd5, 0x6110, 0x2158, 0xb9c0, 0x2c78, 0x2061, 0x0100, 0x619a, + 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, + 0x0005, 0x9aa8, 0x9ab7, 0x9ac2, 0x9aa6, 0x9aa6, 0x9aa6, 0x9aa8, + 0x9aa6, 0x9aa6, 0x9aa6, 0x9aa6, 0x9aa6, 0x9aa6, 0x080c, 0x0dd5, + 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x2a57, 0x0228, 0x2011, + 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x9fd0, 0x0431, + 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, + 0x0804, 0x9fd0, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, + 0x0004, 0x0804, 0x9fd0, 0x0026, 0x080c, 0xa82b, 0xb810, 0x9085, + 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, + 0x6880, 0x700e, 0x7013, 0x0009, 0x0804, 0x9a0a, 0x0026, 0x080c, + 0xa82b, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, + 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099, 0x7012, + 0x0804, 0x9a6c, 0x0026, 0x080c, 0xa82b, 0xb810, 0x9085, 0x8500, + 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, + 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x9a6c, 0x00b6, 0x00c6, + 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240, + 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0dd5, 0x908a, 0x0054, 0x1a0c, + 0x0dd5, 0x7910, 0x2158, 0xb9c0, 0x2061, 0x0100, 0x619a, 0x9082, + 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, + 0x9b3d, 0x9be4, 0x9bb7, 0x9d06, 0x9b3b, 0x9b3b, 0x9b3b, 0x9b3b, + 0x9b3b, 0x9b3b, 0x9b3b, 0xa369, 0xa375, 0xa381, 0xa38d, 0x9b3b, + 0xa773, 0x9b3b, 0xa35d, 0x080c, 0x0dd5, 0x0096, 0x780b, 0xffff, + 0x080c, 0x9b93, 0x7914, 0x2148, 0xa978, 0x7956, 0x7132, 0xa97c, + 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, + 0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010, 0x785c, + 0x9084, 0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0128, 0x7047, + 0x0002, 0x080c, 0x1689, 0x0050, 0xd1b4, 0x0118, 0x7047, 0x0001, + 0x0028, 0x7047, 0x0000, 0x9016, 0x2230, 0x0010, 0xaab0, 0xaeac, + 0x726a, 0x766e, 0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860, 0x20e0, + 0xa85c, 0x9080, 0x0023, 0x2098, 0x20a1, 0x0252, 0x2069, 0x0200, + 0x6813, 0x0018, 0x4003, 0x6813, 0x0008, 0x60c3, 0x0020, 0x6017, + 0x0009, 0x2001, 0x1a01, 0x2003, 0x07d0, 0x2001, 0x1a00, 0x2003, + 0x0009, 0x009e, 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8cc, + 0xd084, 0x0128, 0x7a46, 0x7b14, 0x7b4a, 0x722e, 0x732a, 0x9294, + 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295, 0x0600, 0x7202, + 0xba14, 0x7206, 0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e, + 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005, 0x00d6, + 0x0096, 0x0081, 0x7814, 0x2048, 0xa890, 0x7002, 0xa88c, 0x7006, + 0xa8b0, 0x700a, 0xa8ac, 0x700e, 0x60c3, 0x000c, 0x009e, 0x00de, + 0x0804, 0x9fd0, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500, 0x7002, + 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, + 0x7013, 0x0889, 0x080c, 0x9fbe, 0x721a, 0x7a08, 0x7222, 0x2f10, + 0x7226, 0x2071, 0x024c, 0x0005, 0x00d6, 0x0096, 0x080c, 0x9ce4, + 0x7814, 0x2048, 0x080c, 0xc823, 0x1130, 0x7814, 0x9084, 0x0700, + 0x8007, 0x0033, 0x0010, 0x9006, 0x001b, 0x009e, 0x00de, 0x0005, + 0x9c02, 0x9c6b, 0x9c7b, 0x9ca1, 0x9cad, 0x9cbe, 0x9cc6, 0x9c00, + 0x080c, 0x0dd5, 0x0016, 0x0036, 0xa97c, 0x918c, 0x0003, 0x0118, + 0x9186, 0x0003, 0x1198, 0xaba8, 0x7824, 0xd0cc, 0x1168, 0x7316, + 0xa898, 0x701a, 0xa894, 0x701e, 0x003e, 0x001e, 0x2001, 0x19af, + 0x2004, 0x60c2, 0x0804, 0x9fd0, 0xc3e5, 0x0c88, 0x9186, 0x0001, + 0x190c, 0x0dd5, 0xaba8, 0x7824, 0xd0cc, 0x1904, 0x9c68, 0x7316, + 0xa898, 0x701a, 0xa894, 0x701e, 0xa8a4, 0x7026, 0xa8ac, 0x702e, + 0x2009, 0x0018, 0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110, 0xa8ac, + 0x9108, 0xd3cc, 0x0110, 0xa8a4, 0x9108, 0x6810, 0x9085, 0x0010, + 0x6812, 0x2011, 0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156, 0x20a9, + 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x002c, 0x2098, 0x4003, + 0x6810, 0x8000, 0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9, 0x0005, + 0x4003, 0x6810, 0xc084, 0x6812, 0x015e, 0x9184, 0x0003, 0x0118, + 0x2019, 0x0245, 0x201a, 0x61c2, 0x003e, 0x001e, 0x0804, 0x9fd0, + 0xc3e5, 0x0804, 0x9c27, 0x2011, 0x0008, 0x2001, 0x180f, 0x2004, + 0xd0a4, 0x0110, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1110, 0x7216, + 0x0470, 0x0ce8, 0xc2e5, 0x2011, 0x0302, 0x0016, 0x782c, 0x701a, + 0x7930, 0x711e, 0x9105, 0x0108, 0xc2dd, 0x001e, 0x7824, 0xd0cc, + 0x0108, 0xc2e5, 0x7216, 0x7027, 0x0012, 0x702f, 0x0008, 0x7043, + 0x7000, 0x7047, 0x0500, 0x704f, 0x000a, 0x2069, 0x0200, 0x6813, + 0x0009, 0x2071, 0x0240, 0x700b, 0x2500, 0x60c3, 0x0032, 0x0804, + 0x9fd0, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1128, 0x7216, 0x60c3, + 0x0018, 0x0804, 0x9fd0, 0x0cd0, 0xc2e5, 0x2011, 0x0100, 0x7824, + 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858, 0x9084, + 0x00ff, 0x7036, 0x60c3, 0x0020, 0x0804, 0x9fd0, 0x2011, 0x0008, + 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x0c08, 0x0036, 0x7b14, + 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1138, 0x7824, + 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x003e, 0x0888, 0x0046, 0x2021, + 0x0800, 0x0006, 0x7824, 0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x7416, + 0x004e, 0x701e, 0x003e, 0x0818, 0x00d6, 0x6813, 0x0008, 0xb810, + 0x9085, 0x0700, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, + 0x700a, 0x6880, 0x700e, 0x7824, 0xd0cc, 0x1168, 0x7013, 0x0898, + 0x080c, 0x9fbe, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, + 0x024c, 0x00de, 0x0005, 0x7013, 0x0889, 0x0c90, 0x0016, 0x7814, + 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005, 0x9d16, 0x9d16, + 0x9d18, 0x9d16, 0x9d16, 0x9d16, 0x9d32, 0x9d16, 0x080c, 0x0dd5, + 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, + 0x00b9, 0x2069, 0x1847, 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, + 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, + 0x0804, 0x9fd0, 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, + 0x0016, 0x080c, 0xa82b, 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, + 0xb814, 0x7006, 0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e, + 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0x9fbe, 0x721a, + 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x00e6, 0x00d6, + 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, + 0x1800, 0x7160, 0x7810, 0x2058, 0x76dc, 0x96b4, 0x0028, 0x0110, + 0x737c, 0x7480, 0x2500, 0x76dc, 0x96b4, 0x0028, 0x0140, 0x2001, + 0x04ff, 0x6062, 0x6067, 0xffff, 0x636a, 0x646e, 0x0050, 0x2001, + 0x00ff, 0x9085, 0x0400, 0x6062, 0x6067, 0xffff, 0x606b, 0x0000, + 0x616e, 0xb8b8, 0x6073, 0x0530, 0x6077, 0x0008, 0xb88c, 0x8000, + 0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, + 0x0000, 0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, + 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, + 0x009e, 0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, + 0x0000, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x0128, 0x609f, + 0x0000, 0x2001, 0x0092, 0x0048, 0x6028, 0xc0bd, 0x602a, 0x609f, + 0x00ff, 0x6027, 0xffff, 0x2001, 0x00b2, 0x6016, 0x2009, 0x07d0, + 0x080c, 0x830d, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, + 0x00ee, 0x00be, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, + 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, + 0x7810, 0x2058, 0xb8a0, 0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582, + 0x007e, 0x1250, 0x2500, 0x9094, 0xff80, 0x1130, 0x9080, 0x31d0, + 0x2015, 0x9294, 0x00ff, 0x0020, 0xb910, 0xba14, 0x737c, 0x7480, + 0x70dc, 0xd0ac, 0x1130, 0x9582, 0x007e, 0x1218, 0x9584, 0xff80, + 0x0138, 0x9185, 0x0400, 0x6062, 0x6266, 0x636a, 0x646e, 0x0030, + 0x6063, 0x0400, 0x6266, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072, + 0x6077, 0x0000, 0xb864, 0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c, + 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, + 0x607f, 0x0000, 0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096, + 0x2048, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, + 0x60ca, 0x009e, 0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, + 0x60d7, 0x0000, 0xbac0, 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, + 0x0000, 0x00fe, 0x2009, 0x0092, 0x6116, 0x2009, 0x07d0, 0x080c, + 0x830d, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, + 0x00be, 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, - 0xb8a0, 0x2028, 0xb910, 0xba14, 0x7374, 0x7478, 0x7820, 0x90be, - 0x0006, 0x0904, 0x8eec, 0x90be, 0x000a, 0x1904, 0x8ea8, 0x609f, - 0x0000, 0x7814, 0x2048, 0xa87c, 0xd0fc, 0x05c8, 0xaf90, 0x9784, + 0xb8a0, 0x2028, 0xb910, 0xba14, 0x737c, 0x7480, 0x7820, 0x90be, + 0x0006, 0x0904, 0x9f2d, 0x90be, 0x000a, 0x1904, 0x9ee9, 0x609f, + 0x0000, 0x7814, 0x2048, 0xa87c, 0xd0fc, 0x05d0, 0xaf90, 0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, - 0x2048, 0xa878, 0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0510, - 0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, - 0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, - 0x609f, 0x0000, 0x2001, 0x1835, 0x2004, 0xd0ac, 0x11a8, 0xd09c, - 0x0130, 0x7814, 0x2048, 0xa874, 0x9082, 0x0080, 0x1268, 0xb814, - 0x609e, 0x0050, 0x2039, 0x0029, 0x9705, 0x6072, 0x0c48, 0x9185, - 0x0200, 0x6062, 0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118, 0xaf94, - 0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a, - 0x646e, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, - 0x8007, 0x607a, 0x607f, 0x0000, 0xa838, 0x608a, 0xa834, 0x608e, - 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, - 0x60d7, 0x0000, 0x080c, 0x97b3, 0x2009, 0x07d0, 0x60c4, 0x9084, - 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x7ccc, 0x003e, - 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, - 0x7804, 0x9086, 0x0040, 0x0904, 0x8f28, 0x9185, 0x0100, 0x6062, - 0x6266, 0x636a, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x60af, - 0x95d5, 0x60d7, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, - 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, - 0x7814, 0x2048, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, - 0xa844, 0x60ca, 0xb86c, 0x60ce, 0xbab0, 0x629e, 0x080c, 0x97b3, - 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, - 0x1b58, 0x080c, 0x7ccc, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, - 0x00ee, 0x009e, 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c, 0x9084, - 0x0003, 0x9086, 0x0002, 0x0904, 0x8f44, 0x9185, 0x0100, 0x6062, - 0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0xb88c, - 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838, 0x607e, - 0x2f00, 0x6086, 0x7808, 0x6082, 0xa890, 0x608a, 0xa88c, 0x608e, - 0xa8b0, 0x60c6, 0xa8ac, 0x60ca, 0xa8ac, 0x7930, 0x9108, 0x7932, - 0xa8b0, 0x792c, 0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5, - 0x60d7, 0x0000, 0xbab0, 0x629e, 0x080c, 0x9790, 0x0804, 0x8ed8, - 0xb8bc, 0xd084, 0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c, 0x7846, - 0xa836, 0x2900, 0xa83a, 0xb04a, 0x9185, 0x0600, 0x6062, 0x6266, - 0x636a, 0x646e, 0x6073, 0x0829, 0x6077, 0x0000, 0x60af, 0x9575, - 0x60d7, 0x0000, 0x0804, 0x8ebb, 0x9185, 0x0700, 0x6062, 0x6266, - 0x636a, 0x646e, 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889, - 0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, - 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, - 0x7808, 0x6082, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, - 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, - 0xbab0, 0x629e, 0x7824, 0xd0cc, 0x0120, 0x080c, 0x97b3, 0x0804, - 0x8ed8, 0x080c, 0x9790, 0x0804, 0x8ed8, 0x7a10, 0x00b6, 0x2258, - 0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, - 0x00d6, 0x2069, 0x19b6, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, - 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x7cbe, 0x0005, 0x0016, - 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, - 0x0089, 0x080c, 0x7cbe, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, - 0x2102, 0x2001, 0x19b7, 0x2003, 0x0000, 0x2001, 0x19bf, 0x2003, - 0x0000, 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009, - 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, - 0x61a4, 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008, - 0x6016, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, - 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, - 0x0140, 0x080c, 0x6c53, 0x11e8, 0x2001, 0x19d2, 0x2004, 0x9005, - 0x1904, 0x9021, 0x0066, 0x2031, 0x0001, 0x080c, 0x6d03, 0x006e, - 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084, - 0x090c, 0x0db2, 0x080c, 0x7cbe, 0x0460, 0x00c6, 0x2061, 0x19b6, - 0x00d0, 0x6904, 0x9194, 0x4000, 0x0548, 0x080c, 0x8fbb, 0x080c, - 0x2997, 0x00c6, 0x2061, 0x19b6, 0x6128, 0x9192, 0x0008, 0x1258, - 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x7cbe, - 0x080c, 0x8fb2, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c, - 0xd358, 0x080c, 0x7cc7, 0x2009, 0x0014, 0x080c, 0x9a50, 0x00ce, - 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19d2, - 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19b6, 0x6128, 0x9192, - 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x7cbe, 0x080c, - 0x58e0, 0x2009, 0x1852, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, - 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x7cd4, 0x2071, - 0x19b6, 0x713c, 0x81ff, 0x0904, 0x90ad, 0x2061, 0x0100, 0x2069, - 0x0140, 0x080c, 0x6c53, 0x11b0, 0x0036, 0x2019, 0x0002, 0x080c, - 0x9254, 0x003e, 0x713c, 0x2160, 0x080c, 0xd358, 0x2009, 0x004a, - 0x080c, 0x9a50, 0x0066, 0x2031, 0x0001, 0x080c, 0x6d03, 0x006e, - 0x0804, 0x90ad, 0x6904, 0xd1f4, 0x0904, 0x90b4, 0x080c, 0x2997, - 0x00c6, 0x703c, 0x9065, 0x090c, 0x0db2, 0x6020, 0x00ce, 0x9086, - 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009, 0x180c, - 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294, 0x1800, 0x1128, 0x6224, - 0x9294, 0x0002, 0x1510, 0x0030, 0xc0d4, 0x200a, 0xd0cc, 0x0110, - 0x080c, 0x28ea, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, - 0x703c, 0x2060, 0x2009, 0x0049, 0x080c, 0x9a50, 0x0070, 0x0036, - 0x2019, 0x0001, 0x080c, 0x9254, 0x003e, 0x713c, 0x2160, 0x080c, - 0xd358, 0x2009, 0x004a, 0x080c, 0x9a50, 0x002e, 0x001e, 0x00ee, - 0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904, 0x906e, 0x0804, - 0x9070, 0x0026, 0x00e6, 0x2071, 0x19b6, 0x7048, 0xd084, 0x01c0, - 0x713c, 0x81ff, 0x01a8, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, - 0x928e, 0x0006, 0x1138, 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, - 0x7016, 0x0030, 0x7014, 0x9084, 0x1984, 0x9085, 0x0016, 0x7016, + 0x2048, 0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, + 0x0510, 0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082, 0x2f00, + 0x6086, 0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129, 0x6077, + 0x0000, 0x609f, 0x0000, 0x2001, 0x1837, 0x2004, 0xd0ac, 0x11a8, + 0xd09c, 0x0130, 0x7814, 0x2048, 0xa874, 0x9082, 0x0080, 0x1268, + 0xb814, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705, 0x6072, 0x0c48, + 0x9185, 0x0200, 0x6062, 0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118, + 0xaf94, 0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, + 0x636a, 0x646e, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, + 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0xa838, 0x608a, 0xa834, + 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, + 0x95d5, 0x60d7, 0x0000, 0x080c, 0xa810, 0x2009, 0x07d0, 0x60c4, + 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x830d, + 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, + 0x0005, 0x7804, 0x9086, 0x0040, 0x0904, 0x9f69, 0x9185, 0x0100, + 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, + 0x60af, 0x95d5, 0x60d7, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, + 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, + 0x6086, 0x7814, 0x2048, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, + 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0xbac0, 0x629e, 0x080c, + 0xa810, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, + 0x2009, 0x1b58, 0x080c, 0x830d, 0x003e, 0x004e, 0x005e, 0x00ce, + 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c, + 0x9084, 0x0003, 0x9086, 0x0002, 0x0904, 0x9f85, 0x9185, 0x0100, + 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, + 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838, + 0x607e, 0x2f00, 0x6086, 0x7808, 0x6082, 0xa890, 0x608a, 0xa88c, + 0x608e, 0xa8b0, 0x60c6, 0xa8ac, 0x60ca, 0xa8ac, 0x7930, 0x9108, + 0x7932, 0xa8b0, 0x792c, 0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af, + 0x95d5, 0x60d7, 0x0000, 0xbac0, 0x629e, 0x080c, 0xa7ed, 0x0804, + 0x9f19, 0xb8cc, 0xd084, 0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c, + 0x7846, 0xa836, 0x2900, 0xa83a, 0xb04a, 0x9185, 0x0600, 0x6062, + 0x6266, 0x636a, 0x646e, 0x6073, 0x0829, 0x6077, 0x0000, 0x60af, + 0x9575, 0x60d7, 0x0000, 0x0804, 0x9efc, 0x9185, 0x0700, 0x6062, + 0x6266, 0x636a, 0x646e, 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, + 0x0889, 0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, + 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, + 0x6086, 0x7808, 0x6082, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, + 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, + 0x0000, 0xbac0, 0x629e, 0x7824, 0xd0cc, 0x0120, 0x080c, 0xa810, + 0x0804, 0x9f19, 0x080c, 0xa7ed, 0x0804, 0x9f19, 0x7a10, 0x00b6, + 0x2258, 0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, + 0x0005, 0x00d6, 0x2069, 0x19e5, 0x6843, 0x0001, 0x00de, 0x0005, + 0x60a3, 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x82ff, 0x0005, + 0x0016, 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, + 0x0128, 0x0089, 0x080c, 0x82ff, 0x001e, 0x0005, 0xc1e5, 0x2001, + 0x180c, 0x2102, 0x2001, 0x19e6, 0x2003, 0x0000, 0x2001, 0x19ee, + 0x2003, 0x0000, 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, + 0x0009, 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, + 0x0100, 0x61a4, 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, + 0x0008, 0x6016, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, + 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, + 0x2069, 0x0140, 0x080c, 0x717d, 0x11e8, 0x2001, 0x1a01, 0x2004, + 0x9005, 0x1904, 0xa062, 0x0066, 0x2031, 0x0001, 0x080c, 0x722d, + 0x006e, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, + 0xd084, 0x090c, 0x0dd5, 0x080c, 0x82ff, 0x0460, 0x00c6, 0x2061, + 0x19e5, 0x00d0, 0x6904, 0x9194, 0x4000, 0x0548, 0x080c, 0x9ffc, + 0x080c, 0x2bb1, 0x00c6, 0x2061, 0x19e5, 0x6128, 0x9192, 0x0008, + 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, + 0x82ff, 0x080c, 0x9ff3, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, + 0x080c, 0xe6a1, 0x080c, 0x8308, 0x2009, 0x0014, 0x080c, 0xabe6, + 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, + 0x1a01, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19e5, 0x6128, + 0x9192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x82ff, + 0x080c, 0x5cb7, 0x2009, 0x1846, 0x2114, 0x8210, 0x220a, 0x0c10, + 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x8315, + 0x2071, 0x19e5, 0x713c, 0x81ff, 0x0904, 0xa102, 0x2061, 0x0100, + 0x2069, 0x0140, 0x080c, 0x717d, 0x1500, 0x0036, 0x2019, 0x0002, + 0x080c, 0xa2ac, 0x003e, 0x713c, 0x2160, 0x080c, 0xe6a1, 0x2009, + 0x004a, 0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, + 0x0006, 0x2009, 0x004a, 0x080c, 0xabe6, 0x0066, 0x2031, 0x0001, + 0x080c, 0x722d, 0x006e, 0x0804, 0xa102, 0x6904, 0xd1f4, 0x0904, + 0xa109, 0x080c, 0x2bb1, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0dd5, + 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105, + 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294, + 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1560, 0x0030, 0xc0d4, + 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2b04, 0x6014, 0x9084, 0xe7fd, + 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c, + 0xabe6, 0x00c0, 0x0036, 0x2019, 0x0001, 0x080c, 0xa2ac, 0x003e, + 0x713c, 0x2160, 0x080c, 0xe6a1, 0x2009, 0x004a, 0x6220, 0x9296, + 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, 0x2009, 0x004a, + 0x080c, 0xabe6, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, + 0x0005, 0xd1ec, 0x1904, 0xa0b9, 0x0804, 0xa0bb, 0x0026, 0x00e6, + 0x2071, 0x19e5, 0x7048, 0xd084, 0x01d8, 0x713c, 0x81ff, 0x01c0, + 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, + 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016, 0x0048, 0x928e, + 0x0009, 0x0db0, 0x7014, 0x9084, 0x1984, 0x9085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6010, 0x2058, - 0xbca0, 0x2071, 0x19b6, 0x7018, 0x2058, 0x8bff, 0x0190, 0xb8a0, + 0xbca0, 0x2071, 0x19e5, 0x7018, 0x2058, 0x8bff, 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014, 0x0096, 0x2048, - 0xac6c, 0xad70, 0xae78, 0x009e, 0x080c, 0x60b0, 0x0110, 0x9085, + 0xac6c, 0xad70, 0xae78, 0x009e, 0x080c, 0x64ff, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, - 0x00ee, 0x00be, 0x0005, 0x080c, 0x8aa4, 0x7003, 0x1200, 0x7838, + 0x00ee, 0x00be, 0x0005, 0x080c, 0x99ef, 0x7003, 0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914, 0x00be, - 0x0020, 0x2061, 0x1800, 0x6074, 0x6178, 0x9084, 0x00ff, 0x700a, - 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0x8f8f, 0x080c, 0x8aa4, + 0x0020, 0x2061, 0x1800, 0x607c, 0x6180, 0x9084, 0x00ff, 0x700a, + 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0x9fd0, 0x080c, 0x99ef, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff, - 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f8f, 0x0156, - 0x080c, 0x8aef, 0x7003, 0x0200, 0x2011, 0x1848, 0x63f0, 0x2312, - 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0, 0x0002, - 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, - 0x1f04, 0x9150, 0x60c3, 0x001c, 0x015e, 0x0804, 0x8f8f, 0x0016, - 0x0026, 0x080c, 0x8acb, 0x080c, 0x8add, 0x9e80, 0x0004, 0x20e9, + 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9fd0, 0x0156, + 0x080c, 0x9a3a, 0x7003, 0x0200, 0x080c, 0x8368, 0x20a9, 0x0006, + 0x2011, 0xfff4, 0x2019, 0xfff5, 0x9ef0, 0x0002, 0x2305, 0x2072, + 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, + 0x1f04, 0xa1a6, 0x60c3, 0x001c, 0x015e, 0x0804, 0x9fd0, 0x0016, + 0x0026, 0x080c, 0x9a16, 0x080c, 0x9a28, 0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004, - 0x8003, 0x60c2, 0x080c, 0x8f8f, 0x002e, 0x001e, 0x0005, 0x20a9, - 0x0010, 0x4003, 0x080c, 0x97b9, 0x20a1, 0x0240, 0x22a8, 0x4003, - 0x0c68, 0x080c, 0x8aa4, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, - 0x0008, 0x0804, 0x8f8f, 0x0016, 0x0026, 0x080c, 0x8aa4, 0x20e9, + 0x8003, 0x60c2, 0x080c, 0x9fd0, 0x002e, 0x001e, 0x0005, 0x20a9, + 0x0010, 0x4003, 0x080c, 0xa816, 0x20a1, 0x0240, 0x22a8, 0x4003, + 0x0c68, 0x080c, 0x99ef, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, + 0x0008, 0x0804, 0x9fd0, 0x0016, 0x0026, 0x080c, 0x99ef, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098, 0x009e, 0x7808, - 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x8f8f, + 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x9fd0, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, - 0x8000, 0x2071, 0x19b6, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c, - 0xb7fa, 0x1110, 0x080c, 0xa364, 0x600c, 0x0006, 0x080c, 0xba61, - 0x080c, 0x99d6, 0x080c, 0x933f, 0x00ce, 0x0c78, 0x2c00, 0x700e, + 0x8000, 0x2071, 0x19e5, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c, + 0xca24, 0x1110, 0x080c, 0xb51d, 0x600c, 0x0006, 0x080c, 0xcc8b, + 0x080c, 0xab6b, 0x080c, 0xa39c, 0x00ce, 0x0c78, 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102, - 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19b6, 0x7024, 0x2060, - 0x8cff, 0x01f8, 0x080c, 0x8fbb, 0x6ac0, 0x68c3, 0x0000, 0x080c, - 0x7cc7, 0x00c6, 0x2061, 0x0100, 0x080c, 0x97d2, 0x00ce, 0x20a9, - 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0x9a50, 0x000e, 0x001e, + 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e5, 0x7024, 0x2060, + 0x8cff, 0x01f8, 0x080c, 0x9ffc, 0x6ac0, 0x68c3, 0x0000, 0x080c, + 0x8308, 0x00c6, 0x2061, 0x0100, 0x080c, 0xa967, 0x00ce, 0x20a9, + 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0xabe6, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096, - 0x0004, 0x0d60, 0x080c, 0x7cc7, 0x6814, 0x9084, 0x0001, 0x0110, - 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x588a, - 0x080c, 0x7c4a, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094, - 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2997, - 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x9236, - 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2987, - 0x9006, 0x080c, 0x2987, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, + 0x0004, 0x0d60, 0x080c, 0x8308, 0x6814, 0x9084, 0x0001, 0x0110, + 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x5c61, + 0x080c, 0x8285, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094, + 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2bb1, + 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0xa28e, + 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2ba1, + 0x9006, 0x080c, 0x2ba1, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100, - 0x2079, 0x0140, 0x2071, 0x19b6, 0x703c, 0x2060, 0x8cff, 0x0904, - 0x92e1, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904, - 0x92e1, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, - 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x7cd4, 0x080c, 0x1d14, - 0x0046, 0x2009, 0x017f, 0x200b, 0x00a5, 0x2021, 0x0169, 0x2404, + 0x2079, 0x0140, 0x2071, 0x19e5, 0x703c, 0x2060, 0x8cff, 0x0904, + 0xa33e, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904, + 0xa33e, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, + 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8315, 0x080c, 0x1ebc, + 0x0046, 0x2009, 0x00a5, 0x080c, 0x0e51, 0x2021, 0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af, 0x95f5, 0x68c6, - 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090, 0x2071, 0x1a34, + 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090, 0x2071, 0x1a64, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816, 0x782b, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002, 0x1128, 0x7884, - 0x9005, 0x1110, 0x7887, 0x0001, 0x2001, 0x1950, 0x2004, 0x200a, - 0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, - 0x7804, 0x9084, 0x4000, 0x190c, 0x2997, 0x0090, 0xd08c, 0x0118, - 0x6827, 0x0002, 0x0010, 0x1f04, 0x92bb, 0x7804, 0x9084, 0x1000, - 0x0138, 0x2001, 0x0100, 0x080c, 0x2987, 0x9006, 0x080c, 0x2987, - 0x6827, 0x4000, 0x6824, 0x83ff, 0x1120, 0x2009, 0x0049, 0x080c, - 0x9a50, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, - 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, - 0x2069, 0x19b6, 0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, - 0x2091, 0x8000, 0x2069, 0x19b6, 0x6a32, 0x012e, 0x00de, 0x0005, - 0x080c, 0x8c48, 0x7814, 0x080c, 0x511b, 0x0108, 0x782c, 0x7032, - 0x7042, 0x7047, 0x1000, 0x0478, 0x080c, 0x8c48, 0x7814, 0x080c, - 0x511b, 0x0108, 0x782c, 0x7032, 0x7042, 0x7047, 0x4000, 0x0418, - 0x080c, 0x8c48, 0x7814, 0x080c, 0x511b, 0x0108, 0x782c, 0x7032, - 0x7042, 0x7047, 0x2000, 0x00b8, 0x080c, 0x8c48, 0x7814, 0x080c, - 0x511b, 0x0108, 0x782c, 0x7032, 0x7042, 0x7047, 0x0400, 0x0058, - 0x080c, 0x8c48, 0x7814, 0x080c, 0x511b, 0x0108, 0x782c, 0x7032, - 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x8f8f, 0x00e6, - 0x2071, 0x19b6, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022, 0x00ee, - 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, - 0x0126, 0x2091, 0x8000, 0x2071, 0x19b6, 0x7614, 0x2660, 0x2678, - 0x2039, 0x0001, 0x87ff, 0x0904, 0x93e4, 0x8cff, 0x0904, 0x93e4, - 0x6020, 0x9086, 0x0006, 0x1904, 0x93df, 0x88ff, 0x0138, 0x2800, - 0x9c06, 0x1904, 0x93df, 0x2039, 0x0000, 0x0050, 0x6010, 0x9b06, - 0x1904, 0x93df, 0x85ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x93df, - 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, 0x1160, - 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x7cc7, 0x080c, - 0x9469, 0x7027, 0x0000, 0x0428, 0x080c, 0x7cc7, 0x6820, 0xd0b4, - 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, - 0x9469, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, - 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2987, 0x9006, 0x080c, - 0x2987, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, - 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, - 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, - 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, - 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, - 0x080c, 0xb5f9, 0x0110, 0x080c, 0xcf91, 0x009e, 0x080c, 0x9a06, - 0x080c, 0x933f, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x935a, 0x2c78, - 0x600c, 0x2060, 0x0804, 0x935a, 0x9006, 0x012e, 0x000e, 0x006e, - 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, - 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, + 0x9005, 0x1110, 0x7887, 0x0001, 0x2001, 0x197f, 0x200c, 0x080c, + 0x0e51, 0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140, 0x6827, + 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2bb1, 0x0090, 0xd08c, + 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0xa314, 0x7804, 0x9084, + 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2ba1, 0x9006, 0x080c, + 0x2ba1, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1140, 0x2009, 0x0049, + 0x6020, 0x9086, 0x0009, 0x0110, 0x080c, 0xabe6, 0x000e, 0x001e, + 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, + 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19e5, 0x6a06, + 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, + 0x19e5, 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c, 0x9b93, 0x7814, + 0x080c, 0x54bf, 0x0108, 0x782c, 0x7032, 0x7042, 0x7047, 0x1000, + 0x0478, 0x080c, 0x9b93, 0x7814, 0x080c, 0x54bf, 0x0108, 0x782c, + 0x7032, 0x7042, 0x7047, 0x4000, 0x0418, 0x080c, 0x9b93, 0x7814, + 0x080c, 0x54bf, 0x0108, 0x782c, 0x7032, 0x7042, 0x7047, 0x2000, + 0x00b8, 0x080c, 0x9b93, 0x7814, 0x080c, 0x54bf, 0x0108, 0x782c, + 0x7032, 0x7042, 0x7047, 0x0400, 0x0058, 0x080c, 0x9b93, 0x7814, + 0x080c, 0x54bf, 0x0108, 0x782c, 0x7032, 0x7042, 0x7047, 0x0200, + 0x60c3, 0x0020, 0x0804, 0x9fd0, 0x00e6, 0x2071, 0x19e5, 0x7020, + 0x9005, 0x0110, 0x8001, 0x7022, 0x00ee, 0x0005, 0x00f6, 0x00e6, + 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, + 0x2071, 0x19e5, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, + 0x0904, 0xa441, 0x8cff, 0x0904, 0xa441, 0x6020, 0x9086, 0x0006, + 0x1904, 0xa43c, 0x88ff, 0x0138, 0x2800, 0x9c06, 0x1904, 0xa43c, + 0x2039, 0x0000, 0x0050, 0x6010, 0x9b06, 0x1904, 0xa43c, 0x85ff, + 0x0120, 0x6054, 0x9106, 0x1904, 0xa43c, 0x7024, 0x9c06, 0x15b0, + 0x2069, 0x0100, 0x68c0, 0x9005, 0x1160, 0x6824, 0xd084, 0x0148, + 0x6827, 0x0001, 0x080c, 0x8308, 0x080c, 0xa4c6, 0x7027, 0x0000, + 0x0428, 0x080c, 0x8308, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, + 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0xa4c6, 0x7027, 0x0000, + 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, + 0x0100, 0x080c, 0x2ba1, 0x9006, 0x080c, 0x2ba1, 0x2069, 0x0100, + 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7014, 0x9c36, + 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, + 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, + 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1168, + 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c, 0xc823, 0x0110, + 0x080c, 0xe223, 0x009e, 0x080c, 0xab9c, 0x080c, 0xa39c, 0x88ff, + 0x1190, 0x00ce, 0x0804, 0xa3b7, 0x2c78, 0x600c, 0x2060, 0x0804, + 0xa3b7, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, + 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x98c5, 0x0001, + 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, 0x00c6, 0x0066, 0x0026, + 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e5, 0x7638, 0x2660, + 0x2678, 0x8cff, 0x0904, 0xa4b5, 0x6020, 0x9086, 0x0006, 0x1904, + 0xa4b0, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904, 0xa4b0, 0x0040, + 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x6054, 0x9106, 0x15c0, + 0x703c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa2ac, + 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, + 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, + 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, + 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, + 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xc823, 0x0110, 0x080c, + 0xe223, 0x080c, 0xab9c, 0x87ff, 0x1198, 0x00ce, 0x0804, 0xa461, + 0x2c78, 0x600c, 0x2060, 0x0804, 0xa461, 0x9006, 0x012e, 0x000e, + 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x00fe, 0x0005, + 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80, 0x00e6, 0x2071, + 0x19e5, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, + 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, - 0x19b6, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9458, 0x6020, - 0x9086, 0x0006, 0x1904, 0x9453, 0x87ff, 0x0128, 0x2700, 0x9c06, - 0x1904, 0x9453, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, - 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036, 0x2019, - 0x0001, 0x080c, 0x9254, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, - 0x7046, 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, - 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, - 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, - 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, - 0xb5f9, 0x0110, 0x080c, 0xcf91, 0x080c, 0x9a06, 0x87ff, 0x1198, - 0x00ce, 0x0804, 0x9404, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9404, - 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, - 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, - 0x0c80, 0x00e6, 0x2071, 0x19b6, 0x2001, 0x1800, 0x2004, 0x9086, - 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, - 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, - 0x2091, 0x8000, 0x2071, 0x19b6, 0x2c10, 0x7638, 0x2660, 0x2678, - 0x8cff, 0x0518, 0x2200, 0x9c06, 0x11e0, 0x7038, 0x9c36, 0x1110, - 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, - 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00, 0x9f06, - 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x9085, 0x0001, - 0x0020, 0x2c78, 0x600c, 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, - 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, - 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, - 0x2071, 0x19b6, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9545, - 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x9540, + 0x19e5, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200, + 0x9c06, 0x11e0, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, + 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, + 0x7037, 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, + 0x2678, 0x600f, 0x0000, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c, + 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, + 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, + 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e5, 0x760c, + 0x2660, 0x2678, 0x8cff, 0x0904, 0xa5a2, 0x6010, 0x00b6, 0x2058, + 0xb8a0, 0x00be, 0x9206, 0x1904, 0xa59d, 0x7024, 0x9c06, 0x1520, + 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa579, 0x080c, 0x9ffc, + 0x68c3, 0x0000, 0x080c, 0xa4c6, 0x7027, 0x0000, 0x0036, 0x2069, + 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, + 0x2ba1, 0x9006, 0x080c, 0x2ba1, 0x2069, 0x0100, 0x6824, 0xd084, + 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, + 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, + 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, + 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xca13, + 0x1158, 0x080c, 0x3093, 0x080c, 0xca24, 0x11f0, 0x080c, 0xb51d, + 0x00d8, 0x080c, 0xa4c6, 0x08c0, 0x080c, 0xca24, 0x1118, 0x080c, + 0xb51d, 0x0090, 0x6014, 0x2048, 0x080c, 0xc823, 0x0168, 0x6020, + 0x9086, 0x0003, 0x1508, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, + 0x080c, 0x6a3a, 0x080c, 0xca07, 0x080c, 0xcc8b, 0x080c, 0xab9c, + 0x080c, 0xa39c, 0x00ce, 0x0804, 0xa522, 0x2c78, 0x600c, 0x2060, + 0x0804, 0xa522, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, + 0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, + 0x080c, 0xe223, 0x0c08, 0x00d6, 0x080c, 0x9a3a, 0x7003, 0x0200, + 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1987, + 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, + 0x0004, 0x7027, 0x7878, 0x080c, 0x9fd0, 0x00de, 0x0005, 0x080c, + 0x9a3a, 0x700b, 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, + 0x9084, 0x00ff, 0x7022, 0x782c, 0x7026, 0x7858, 0x9084, 0x00ff, + 0x9085, 0x0200, 0x7002, 0x7858, 0x9084, 0xff00, 0x8007, 0x7006, + 0x60c2, 0x0804, 0x9fd0, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, + 0x2009, 0x0035, 0x080c, 0xce90, 0x00de, 0x1904, 0xa650, 0x080c, + 0x99ef, 0x7003, 0x1300, 0x782c, 0x080c, 0xa752, 0x2068, 0x6820, + 0x9086, 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xaad5, + 0x11d8, 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, + 0x0498, 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, + 0x0458, 0x9284, 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, + 0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, + 0x700a, 0xb814, 0x700e, 0x00c0, 0x6098, 0x700e, 0x00a8, 0x080c, + 0xaad5, 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, + 0x00d6, 0x2069, 0x181f, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, + 0x00de, 0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, + 0x60c3, 0x000c, 0x001e, 0x00de, 0x080c, 0x9fd0, 0x00be, 0x0005, + 0x781b, 0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, + 0x792c, 0x9180, 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, + 0x0003, 0x0904, 0xa6ca, 0x9186, 0x0005, 0x0904, 0xa6b3, 0x9186, + 0x0004, 0x05d8, 0x9186, 0x0008, 0x0904, 0xa6bb, 0x7807, 0x0037, + 0x782f, 0x0003, 0x7817, 0x1700, 0x080c, 0xa72f, 0x0005, 0x080c, + 0xa6f0, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, + 0x0002, 0xa694, 0xa69f, 0xa696, 0xa69f, 0xa69b, 0xa694, 0xa694, + 0xa69f, 0xa69f, 0xa69f, 0xa69f, 0xa694, 0xa694, 0xa694, 0xa694, + 0xa694, 0xa69f, 0xa694, 0xa69f, 0x080c, 0x0dd5, 0x6824, 0xd0e4, + 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, + 0x7022, 0x6830, 0x7026, 0x0804, 0xa6e9, 0x080c, 0xa6f0, 0x00d6, + 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, + 0x1108, 0x900e, 0x04b0, 0x04e1, 0x00d6, 0x0026, 0x792c, 0x2168, + 0x2009, 0x4000, 0x0470, 0x04a1, 0x00d6, 0x0026, 0x792c, 0x2168, + 0x2009, 0x4000, 0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108, + 0x900e, 0x00f8, 0x0429, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814, + 0x0096, 0x2048, 0xa9ac, 0xa834, 0x9112, 0xa9b0, 0xa838, 0x009e, + 0x9103, 0x7022, 0x7226, 0x792c, 0x9180, 0x0000, 0x2004, 0x908e, + 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, 0x2009, 0x4000, 0x0008, + 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, 0x00de, 0x0804, 0x9fd0, + 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, 0x080c, 0x9a3a, 0x9006, + 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, 0x710e, 0x7810, 0x2058, + 0xb8a0, 0x080c, 0xaad5, 0x1118, 0x9092, 0x007e, 0x0268, 0x00d6, + 0x2069, 0x181f, 0x2d2c, 0x8d68, 0x2d34, 0x90d8, 0x1000, 0x2b5c, + 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, 0x6498, 0x2029, 0x0000, + 0x6634, 0x782c, 0x9080, 0x0008, 0x2004, 0x9086, 0x0003, 0x1128, + 0x7512, 0x7616, 0x731a, 0x741e, 0x0020, 0x7312, 0x7416, 0x751a, + 0x761e, 0x006e, 0x005e, 0x004e, 0x003e, 0x00be, 0x0005, 0x080c, + 0x9a3a, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x700e, + 0x60c3, 0x0008, 0x0804, 0x9fd0, 0x080c, 0x99e6, 0x7003, 0x1400, + 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, 0x782c, 0x7012, 0x7830, + 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, 0x701a, 0x60c3, 0x0010, + 0x0804, 0x9fd0, 0x00e6, 0x2071, 0x0240, 0x0006, 0x00f6, 0x2078, + 0x7810, 0x00b6, 0x2058, 0xb8cc, 0xd084, 0x0120, 0x7848, 0x702a, + 0x7844, 0x702e, 0x00be, 0x00fe, 0x000e, 0x00ee, 0x0005, 0x080c, + 0x9a31, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x60c3, + 0x0008, 0x0804, 0x9fd0, 0x0021, 0x60c3, 0x0000, 0x0804, 0x9fd0, + 0x00d6, 0x080c, 0xa82b, 0xb810, 0x9085, 0x0300, 0x7002, 0xb814, + 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x7013, + 0x0819, 0x080c, 0x9fbe, 0x721a, 0x2f10, 0x7222, 0x7a08, 0x7226, + 0x2071, 0x024c, 0x00de, 0x0005, 0x00a9, 0x7914, 0x712a, 0x60c3, + 0x0000, 0x60a7, 0x9575, 0x0026, 0x080c, 0x2a57, 0x0228, 0x2011, + 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x080c, 0x9ff3, 0x080c, + 0x82ff, 0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6, 0x7858, 0x2048, + 0xaa7c, 0x9296, 0x00c0, 0x9294, 0xfffd, 0xaa7e, 0xaa80, 0x9294, + 0x0300, 0xaa82, 0xa96c, 0x9194, 0x00ff, 0xab74, 0x9384, 0x00ff, + 0x908d, 0xc200, 0xa96e, 0x9384, 0xff00, 0x9215, 0xaa76, 0xa870, + 0xaa78, 0xa87a, 0xaa72, 0x00d6, 0x2069, 0x0200, 0x080c, 0xa82b, + 0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860, + 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x4003, 0x60a3, 0x0035, + 0xaa68, 0x9294, 0x7000, 0x9286, 0x3000, 0x0110, 0x60a3, 0x0037, + 0x00ee, 0x00de, 0x009e, 0x003e, 0x0005, 0x900e, 0x7814, 0x0096, + 0x2048, 0xa87c, 0xd0fc, 0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001, + 0x180c, 0x2004, 0xd0bc, 0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4, + 0x1158, 0xa8a8, 0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5, + 0x2102, 0x2009, 0x19b0, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010, + 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005, 0x2009, 0x0009, + 0x00a0, 0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009, + 0x000c, 0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028, + 0x2009, 0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x080c, + 0x99ef, 0x0016, 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, + 0x0138, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1138, 0x2001, + 0x197c, 0x2004, 0x9086, 0xaaaa, 0x1904, 0xa8d0, 0x7003, 0x5400, + 0x00c6, 0x2061, 0x1800, 0x607c, 0x9084, 0x00ff, 0xa998, 0x810f, + 0x918c, 0xff00, 0x9105, 0x700a, 0x6080, 0x700e, 0xa998, 0x918c, + 0xff00, 0x7112, 0x20a9, 0x0004, 0x2009, 0x1805, 0x2e10, 0x9290, + 0x0006, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xa861, 0x20a9, + 0x0004, 0x2009, 0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, + 0xa86b, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098, 0x2009, + 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, + 0x1dc0, 0x00d6, 0x2069, 0x0200, 0x080c, 0xa816, 0x00de, 0x2071, + 0x0240, 0x2011, 0x0240, 0x2009, 0x0002, 0x20a9, 0x0001, 0x4002, + 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x2009, 0x0008, 0x20a9, + 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0xa85c, + 0x9080, 0x0031, 0x2098, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, + 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00ce, 0x60c3, 0x004c, + 0x60a3, 0x0056, 0x60a7, 0x9575, 0x2001, 0x1837, 0x2004, 0x9084, + 0x0028, 0x1168, 0x080c, 0x717d, 0x0150, 0x6028, 0xc0bd, 0x602a, + 0x6014, 0x9084, 0x1804, 0x9085, 0x0029, 0x6016, 0x0010, 0x080c, + 0x9fd0, 0x080c, 0x82ff, 0x00de, 0x009e, 0x002e, 0x001e, 0x0005, + 0x00e6, 0x2071, 0x0240, 0x2001, 0x2200, 0x9085, 0x00ff, 0x7002, + 0x7007, 0xffff, 0x2071, 0x0100, 0x709b, 0x00ff, 0x00ee, 0x0804, + 0xa846, 0x080c, 0x99ef, 0x0016, 0x0026, 0x0096, 0x00d6, 0x7814, + 0x2048, 0x7013, 0x0138, 0x7003, 0x5500, 0x00c6, 0xa89c, 0x9084, + 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00, 0x9105, 0x700a, 0xa99c, + 0x918c, 0xff00, 0xa8a0, 0x9084, 0x00ff, 0x9105, 0x700e, 0xa998, + 0x918c, 0xff00, 0x2061, 0x1800, 0x607c, 0x9084, 0x00ff, 0x910d, + 0x7112, 0x6180, 0x7116, 0x2009, 0x0008, 0xa860, 0x20e0, 0xa85c, + 0x9080, 0x0029, 0x2098, 0x2e10, 0x9290, 0x0006, 0x20a9, 0x0001, + 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x20a9, 0x0004, + 0x2009, 0x1805, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xa922, + 0x20a9, 0x0002, 0x2009, 0x1801, 0x2104, 0x2012, 0x8108, 0x8210, + 0x1f04, 0xa92c, 0x00d6, 0x0016, 0x2069, 0x0200, 0x080c, 0xa816, + 0x001e, 0x00de, 0x2071, 0x0240, 0x20a9, 0x0002, 0x2009, 0x1803, + 0x2011, 0x0240, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xa942, + 0x2009, 0x0008, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dd0, + 0x9006, 0x20a9, 0x0008, 0x2012, 0x8210, 0x1f04, 0xa953, 0x00ce, + 0x60c3, 0x004c, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x9fd0, + 0x080c, 0x82ff, 0x00de, 0x009e, 0x002e, 0x001e, 0x0005, 0x00d6, + 0x9290, 0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, + 0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, + 0x0020, 0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, + 0x0120, 0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6, + 0x0096, 0x6014, 0x2048, 0xa878, 0x6056, 0x9006, 0xa836, 0xa83a, + 0xa99c, 0xa946, 0xa84a, 0x6023, 0x0003, 0x6007, 0x0040, 0x6003, + 0x0003, 0x600b, 0xffff, 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900, + 0xa85a, 0xa813, 0x1f48, 0x080c, 0x8ee4, 0x0126, 0x2091, 0x8000, + 0x080c, 0x9548, 0x012e, 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6, + 0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, + 0x2071, 0x19e5, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0xaa35, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, - 0x951c, 0x080c, 0x8fbb, 0x68c3, 0x0000, 0x080c, 0x9469, 0x7027, + 0xaa0c, 0x080c, 0x9ffc, 0x68c3, 0x0000, 0x080c, 0xa4c6, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, - 0x2001, 0x0100, 0x080c, 0x2987, 0x9006, 0x080c, 0x2987, 0x2069, + 0x2001, 0x0100, 0x080c, 0x2ba1, 0x9006, 0x080c, 0x2ba1, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, - 0x0000, 0x080c, 0xb7e9, 0x1158, 0x080c, 0x2e55, 0x080c, 0xb7fa, - 0x11f0, 0x080c, 0xa364, 0x00d8, 0x080c, 0x9469, 0x08c0, 0x080c, - 0xb7fa, 0x1118, 0x080c, 0xa364, 0x0090, 0x6014, 0x2048, 0x080c, - 0xb5f9, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867, 0x0103, - 0xab7a, 0xa877, 0x0000, 0x080c, 0x6529, 0x080c, 0xb7dd, 0x080c, - 0xba61, 0x080c, 0x9a06, 0x080c, 0x933f, 0x00ce, 0x0804, 0x94c5, - 0x2c78, 0x600c, 0x2060, 0x0804, 0x94c5, 0x012e, 0x000e, 0x002e, - 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020, - 0x9086, 0x0006, 0x1d20, 0x080c, 0xcf91, 0x0c08, 0x00d6, 0x080c, - 0x8aef, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, - 0x0001, 0x2099, 0x1958, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, - 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, 0x8f8f, - 0x00de, 0x0005, 0x080c, 0x8aef, 0x700b, 0x0800, 0x7814, 0x9084, - 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c, 0x7026, - 0x7858, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7858, 0x9084, - 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x8f8f, 0x00b6, 0x00d6, - 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xbc66, 0x00de, - 0x1904, 0x95f3, 0x080c, 0x8aa4, 0x7003, 0x1300, 0x782c, 0x080c, - 0x96f5, 0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810, 0x2058, - 0xbaa0, 0x080c, 0x9940, 0x11d8, 0x9286, 0x007e, 0x1128, 0x700b, - 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128, 0x700b, - 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180, 0x9286, - 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8, - 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0, 0x6098, - 0x700e, 0x00a8, 0x080c, 0x9940, 0x1130, 0x7810, 0x2058, 0xb8a0, - 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, 0x181d, 0x2d04, 0x700a, - 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e, 0x7838, - 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de, 0x080c, - 0x8f8f, 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006, 0x001e, - 0x00de, 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c, 0x9186, - 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, 0x966d, 0x9186, 0x0005, - 0x0904, 0x9656, 0x9186, 0x0004, 0x05d8, 0x9186, 0x0008, 0x0904, - 0x965e, 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700, 0x080c, - 0x96d2, 0x0005, 0x080c, 0x9693, 0x00d6, 0x0026, 0x792c, 0x2168, - 0x2009, 0x4000, 0x6800, 0x0002, 0x9637, 0x9642, 0x9639, 0x9642, - 0x963e, 0x9637, 0x9637, 0x9642, 0x9642, 0x9642, 0x9642, 0x9637, - 0x9637, 0x9637, 0x9637, 0x9637, 0x9642, 0x9637, 0x9642, 0x080c, - 0x0db2, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010, - 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0x968c, - 0x080c, 0x9693, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, - 0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04b0, 0x04e1, 0x00d6, - 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0470, 0x04a1, 0x00d6, - 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005, 0x0118, - 0x9286, 0x0002, 0x1108, 0x900e, 0x00f8, 0x0429, 0x00d6, 0x0026, - 0x792c, 0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834, 0x9112, - 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180, - 0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, - 0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, - 0x00de, 0x0804, 0x8f8f, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, - 0x080c, 0x8aef, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, - 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0x9940, 0x1118, 0x9092, - 0x007e, 0x0268, 0x00d6, 0x2069, 0x181d, 0x2d2c, 0x8d68, 0x2d34, - 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, - 0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004, - 0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020, - 0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e, - 0x00be, 0x0005, 0x080c, 0x8aef, 0x7003, 0x0100, 0x782c, 0x700a, - 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f8f, 0x080c, - 0x8a9b, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, - 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, - 0x701a, 0x60c3, 0x0010, 0x0804, 0x8f8f, 0x00e6, 0x2071, 0x0240, - 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc, 0xd084, - 0x0120, 0x7848, 0x702a, 0x7844, 0x702e, 0x00be, 0x00fe, 0x000e, - 0x00ee, 0x0005, 0x080c, 0x8ae6, 0x7003, 0x0100, 0x782c, 0x700a, - 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f8f, 0x0021, 0x60c3, - 0x0000, 0x0804, 0x8f8f, 0x00d6, 0x080c, 0x97ce, 0xb810, 0x9085, - 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6874, 0x700a, - 0x6878, 0x700e, 0x7013, 0x0819, 0x080c, 0x8f7d, 0x721a, 0x2f10, - 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x00a9, - 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026, 0x080c, - 0x283d, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, - 0x080c, 0x8fb2, 0x080c, 0x7cbe, 0x0005, 0x0036, 0x0096, 0x00d6, - 0x00e6, 0x7858, 0x2048, 0xaa7c, 0x9296, 0x00c0, 0x9294, 0xfffd, - 0xaa7e, 0xaa80, 0x9294, 0x0300, 0xaa82, 0xa96c, 0x9194, 0x00ff, - 0xab74, 0x9384, 0x00ff, 0x908d, 0xc200, 0xa96e, 0x9384, 0xff00, - 0x9215, 0xaa76, 0xa870, 0xaa78, 0xa87a, 0xaa72, 0x00d6, 0x2069, - 0x0200, 0x080c, 0x97ce, 0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, - 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, - 0x4003, 0x60a3, 0x0035, 0xaa68, 0x9294, 0x7000, 0x9286, 0x3000, - 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e, 0x003e, 0x0005, - 0x900e, 0x7814, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x01c0, 0x9084, - 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc, 0x0180, 0x7824, - 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8a8, 0x9005, 0x1140, 0x2001, - 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009, 0x1981, 0x210c, 0x009e, - 0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, - 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a, 0x0088, 0x2009, - 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009, 0x000d, 0x0040, - 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010, 0x2009, 0x0008, - 0x6912, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214, 0x20e9, 0x0000, - 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128, - 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016, 0x20a1, 0x0240, - 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000, 0x6812, 0x0c60, - 0x00de, 0x0005, 0x00d6, 0x0096, 0x6014, 0x2048, 0xa878, 0x6056, - 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946, 0xa84a, 0x6023, 0x0003, - 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff, 0xa817, 0x0001, - 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x1da0, 0x080c, 0x8065, - 0x0126, 0x2091, 0x8000, 0x080c, 0x865d, 0x012e, 0x009e, 0x00de, - 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, - 0x0126, 0x2091, 0x8000, 0x2071, 0x19b6, 0x760c, 0x2660, 0x2678, - 0x8cff, 0x0904, 0x98a0, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, - 0x68c0, 0x9005, 0x0904, 0x9877, 0x080c, 0x8fbb, 0x68c3, 0x0000, - 0x080c, 0x9469, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, - 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2987, 0x9006, - 0x080c, 0x2987, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, - 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, - 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, - 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, - 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xb7e9, 0x1158, 0x080c, - 0x2e55, 0x080c, 0xb7fa, 0x11f0, 0x080c, 0xa364, 0x00d8, 0x080c, - 0x9469, 0x08c0, 0x080c, 0xb7fa, 0x1118, 0x080c, 0xa364, 0x0090, - 0x6014, 0x2048, 0x080c, 0xb5f9, 0x0168, 0x6020, 0x9086, 0x0003, - 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6536, - 0x080c, 0xb7dd, 0x080c, 0xba61, 0x080c, 0x9a06, 0x080c, 0x933f, - 0x00ce, 0x0804, 0x9828, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9828, - 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, - 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, - 0x1d08, 0x080c, 0xcf91, 0x08f0, 0x00d6, 0x0156, 0x080c, 0x8aef, - 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, - 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, - 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, - 0x6c53, 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad4, 0xd29c, 0x1110, - 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011, 0x1848, 0x63f0, 0x2312, - 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x2071, 0x0250, - 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, - 0x1f04, 0x98e8, 0x60c3, 0x0020, 0x080c, 0x8f8f, 0x015e, 0x00de, - 0x0005, 0x0156, 0x080c, 0x8aef, 0x7a14, 0x82ff, 0x0168, 0x9286, - 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, - 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, - 0x700f, 0x0001, 0x2011, 0x198c, 0x2204, 0x8007, 0x701a, 0x8210, - 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, - 0x0248, 0x2001, 0x181d, 0x2004, 0x7022, 0x2001, 0x181e, 0x2004, - 0x7026, 0x0030, 0x2001, 0x1816, 0x2004, 0x9084, 0x00ff, 0x7026, - 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, - 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x8f8f, - 0x0006, 0x2001, 0x1835, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, - 0x0003, 0x080c, 0x92ec, 0x2011, 0x0002, 0x080c, 0x92f6, 0x080c, - 0x91de, 0x0036, 0x901e, 0x080c, 0x9254, 0x003e, 0x0005, 0x080c, - 0x2f8b, 0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010, 0x9085, 0x0020, - 0x7012, 0x2009, 0x007e, 0x080c, 0x5f7e, 0xb85c, 0xc0ac, 0xb85e, - 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071, 0x1883, 0x7000, 0x9005, - 0x0140, 0x2001, 0x0976, 0x2071, 0x1800, 0x706e, 0x7072, 0x7063, - 0xffe0, 0x2071, 0x1800, 0x706c, 0x704e, 0x7053, 0x1cd0, 0x0005, - 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x754c, 0x9582, - 0x0010, 0x0608, 0x7050, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, - 0x9ce0, 0x0018, 0x7060, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, - 0x0c98, 0x6003, 0x0008, 0x8529, 0x754e, 0x9ca8, 0x0018, 0x7060, - 0x9502, 0x1230, 0x7552, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, - 0x7053, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, - 0x754c, 0x9582, 0x0010, 0x0600, 0x7050, 0x2060, 0x6000, 0x9086, - 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7060, 0x9c02, 0x1208, 0x0cb0, - 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x754e, 0x9ca8, - 0x0018, 0x7060, 0x9502, 0x1228, 0x7552, 0x9085, 0x0001, 0x00ee, - 0x0005, 0x7053, 0x1cd0, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1cd0, - 0x0a0c, 0x0db2, 0x2001, 0x1818, 0x2004, 0x9c02, 0x1a0c, 0x0db2, - 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, - 0x0000, 0x6003, 0x0000, 0x601e, 0x6056, 0x605a, 0x6026, 0x602a, - 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, 0x6042, 0x2061, 0x1800, - 0x604c, 0x8000, 0x604e, 0x9086, 0x0001, 0x0108, 0x0005, 0x0126, - 0x2091, 0x8000, 0x080c, 0x8582, 0x012e, 0x0cc0, 0x0006, 0x6000, - 0x9086, 0x0000, 0x01b0, 0x601c, 0xd084, 0x190c, 0x1827, 0x6017, - 0x0000, 0x6023, 0x0007, 0x2001, 0x1955, 0x2004, 0x0006, 0x9082, - 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xd240, 0x6043, - 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, - 0x8000, 0x754c, 0x9582, 0x0001, 0x0608, 0x7050, 0x2060, 0x6000, - 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7060, 0x9c02, 0x1208, - 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x754e, - 0x9ca8, 0x0018, 0x7060, 0x9502, 0x1230, 0x7552, 0x9085, 0x0001, - 0x012e, 0x00ee, 0x0005, 0x7053, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, - 0x6020, 0x9084, 0x000f, 0x0002, 0x9a63, 0x9a6c, 0x9a87, 0x9aa2, - 0xbd12, 0xbd2f, 0xbd4a, 0x9a63, 0x9a6c, 0x9a63, 0x9abe, 0x9a63, - 0x9a63, 0x9a63, 0x9a63, 0x9186, 0x0013, 0x1128, 0x080c, 0x847d, - 0x080c, 0x8582, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0016, - 0x1a0c, 0x0db2, 0x0013, 0x006e, 0x0005, 0x9a85, 0xa1dd, 0xa3ab, - 0x9a85, 0xa439, 0x9d9f, 0x9a85, 0x9a85, 0xa15f, 0xa947, 0x9a85, - 0x9a85, 0x9a85, 0x9a85, 0x9a85, 0x9a85, 0x080c, 0x0db2, 0x0066, - 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db2, 0x0013, 0x006e, 0x0005, - 0x9aa0, 0xb012, 0x9aa0, 0x9aa0, 0x9aa0, 0x9aa0, 0x9aa0, 0x9aa0, - 0xafb7, 0xb194, 0x9aa0, 0xb053, 0xb0d2, 0xb053, 0xb0d2, 0x9aa0, - 0x080c, 0x0db2, 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0db2, 0x6000, - 0x0002, 0x9abc, 0xa98e, 0xaa73, 0xaba3, 0xad45, 0x9abc, 0x9abc, - 0x9abc, 0xa962, 0xaf43, 0xaf46, 0x9abc, 0x9abc, 0x9abc, 0x9abc, - 0xaf75, 0x9abc, 0x9abc, 0x9abc, 0x080c, 0x0db2, 0x0066, 0x6000, - 0x90b2, 0x0016, 0x1a0c, 0x0db2, 0x0013, 0x006e, 0x0005, 0x9ad7, - 0x9ad7, 0x9b1a, 0x9bb8, 0x9c4c, 0x9ad7, 0x9ad7, 0x9ad7, 0x9ad9, - 0x9ad7, 0x9ad7, 0x9ad7, 0x9ad7, 0x9ad7, 0x9ad7, 0x9ad7, 0x080c, - 0x0db2, 0x9186, 0x004c, 0x0588, 0x9186, 0x0003, 0x190c, 0x0db2, - 0x0096, 0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, - 0x2048, 0xa87c, 0x9084, 0xa000, 0xc0b5, 0xa87e, 0xa8ac, 0xa846, - 0xa8b0, 0xa84a, 0x9006, 0xa836, 0xa83a, 0xa884, 0x9092, 0x199a, - 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, - 0x009e, 0x2c10, 0x080c, 0x1976, 0x080c, 0x8065, 0x0126, 0x2091, - 0x8000, 0x080c, 0x865d, 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, - 0xbca0, 0x00be, 0x2c00, 0x080c, 0x9c6e, 0x080c, 0xbd04, 0x6003, - 0x0007, 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a88, - 0x6014, 0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac78, - 0x0046, 0xa8e0, 0x9005, 0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220, - 0xa87b, 0x0007, 0x2010, 0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b, - 0x0000, 0x8214, 0xa883, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, - 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, - 0x2100, 0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, - 0x9086, 0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, - 0x8423, 0x9405, 0x0002, 0x9b80, 0x9b80, 0x9b7b, 0x9b7e, 0x9b80, - 0x9b78, 0x9b6b, 0x9b6b, 0x9b6b, 0x9b6b, 0x9b6b, 0x9b6b, 0x9b6b, - 0x9b6b, 0x9b6b, 0x9b6b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, - 0x001e, 0x000e, 0x004e, 0x00fe, 0x009e, 0x00de, 0x080c, 0x0db2, - 0x080c, 0xa5d7, 0x0028, 0x080c, 0xa6b5, 0x0010, 0x080c, 0xa7a4, - 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, - 0x000e, 0x080c, 0x9d2c, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, - 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, - 0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, - 0x0000, 0x2041, 0x1226, 0x080c, 0x9ed6, 0x0160, 0x000e, 0x9005, - 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, - 0x0804, 0x99d6, 0x2001, 0x002c, 0x900e, 0x080c, 0x9d92, 0x0c70, - 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, - 0x0a0c, 0x0db2, 0x91b2, 0x0050, 0x1a0c, 0x0db2, 0x9182, 0x0047, - 0x00ca, 0x2001, 0x0109, 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, - 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x7fb9, 0x002e, 0x001e, - 0x000e, 0x012e, 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, - 0x9b1a, 0x0005, 0x9beb, 0x9beb, 0x9bed, 0x9c22, 0x9beb, 0x9beb, - 0x9beb, 0x9beb, 0x9c35, 0x080c, 0x0db2, 0x00d6, 0x0016, 0x0096, - 0x080c, 0x8532, 0x080c, 0x865d, 0x6003, 0x0004, 0x6114, 0x2148, - 0xa87c, 0xd0fc, 0x01b8, 0xa878, 0x9005, 0x1158, 0xa894, 0x9005, - 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0x9d92, 0x080c, 0x99d6, + 0x0000, 0x080c, 0xca13, 0x1158, 0x080c, 0x3093, 0x080c, 0xca24, + 0x11f0, 0x080c, 0xb51d, 0x00d8, 0x080c, 0xa4c6, 0x08c0, 0x080c, + 0xca24, 0x1118, 0x080c, 0xb51d, 0x0090, 0x6014, 0x2048, 0x080c, + 0xc823, 0x0168, 0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103, + 0xab7a, 0xa877, 0x0000, 0x080c, 0x6a46, 0x080c, 0xca07, 0x080c, + 0xcc8b, 0x080c, 0xab9c, 0x080c, 0xa39c, 0x00ce, 0x0804, 0xa9bd, + 0x2c78, 0x600c, 0x2060, 0x0804, 0xa9bd, 0x700f, 0x0000, 0x700b, + 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, + 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xe223, + 0x08f0, 0x00d6, 0x0156, 0x080c, 0x9a3a, 0x7a14, 0x82ff, 0x0138, + 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, + 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, + 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x717d, 0x1110, 0xc3ad, + 0x0008, 0xc3a5, 0x6adc, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, + 0x730e, 0x080c, 0x8368, 0x20a9, 0x0006, 0x2011, 0xfff4, 0x2019, + 0xfff5, 0x2071, 0x0250, 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, + 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0xaa7b, 0x60c3, + 0x0020, 0x080c, 0x9fd0, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, + 0x9a3a, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, + 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, + 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, + 0x19bb, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, + 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181f, + 0x2004, 0x7022, 0x2001, 0x1820, 0x2004, 0x7026, 0x0030, 0x2001, + 0x1818, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, + 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, + 0x60c3, 0x001c, 0x015e, 0x0804, 0x9fd0, 0x0006, 0x2001, 0x1837, + 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0xa349, + 0x2011, 0x0002, 0x080c, 0xa353, 0x080c, 0xa236, 0x0036, 0x901e, + 0x080c, 0xa2ac, 0x003e, 0x0005, 0x080c, 0x31c9, 0x0188, 0x0016, + 0x00b6, 0x00c6, 0x7010, 0x9085, 0x0020, 0x7012, 0x2009, 0x007e, + 0x080c, 0x63cd, 0xb85c, 0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e, + 0x0005, 0x2071, 0x188d, 0x7000, 0x9005, 0x0140, 0x2001, 0x0976, + 0x2071, 0x1800, 0x7076, 0x707a, 0x706b, 0xffe0, 0x2071, 0x1800, + 0x7074, 0x7056, 0x705b, 0x1cd0, 0x0005, 0x00e6, 0x0126, 0x2071, + 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0010, 0x0608, 0x7058, + 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7068, + 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, + 0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502, 0x1230, 0x755a, + 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc0, + 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7554, 0x9582, 0x0010, + 0x0600, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, + 0x0018, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, + 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502, + 0x1228, 0x755a, 0x9085, 0x0001, 0x00ee, 0x0005, 0x705b, 0x1cd0, + 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0dd5, 0x2001, + 0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0dd5, 0x9006, 0x6006, 0x600a, + 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, + 0x601e, 0x6056, 0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, + 0x603a, 0x603e, 0x6042, 0x602a, 0x2061, 0x1800, 0x6054, 0x8000, + 0x6056, 0x9086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, + 0x080c, 0x941c, 0x012e, 0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000, + 0x01b0, 0x601c, 0xd084, 0x190c, 0x19b4, 0x6017, 0x0000, 0x6023, + 0x0007, 0x2001, 0x1984, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, + 0x0208, 0x8004, 0x601a, 0x080c, 0xe4d8, 0x6043, 0x0000, 0x000e, + 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, + 0x9582, 0x0001, 0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, + 0x0148, 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, + 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x0018, + 0x7068, 0x9502, 0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, + 0x0005, 0x705b, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, + 0x000f, 0x0002, 0xabf9, 0xac02, 0xac1d, 0xac38, 0xcf3e, 0xcf5b, + 0xcf76, 0xabf9, 0xac02, 0x8b1a, 0xac54, 0xabf9, 0xabf9, 0xabf9, + 0xabf9, 0x9186, 0x0013, 0x1128, 0x080c, 0x9317, 0x080c, 0x941c, + 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, + 0x0013, 0x006e, 0x0005, 0xac1b, 0xb389, 0xb564, 0xac1b, 0xb5fa, + 0xaf37, 0xac1b, 0xac1b, 0xb30b, 0xbb5f, 0xac1b, 0xac1b, 0xac1b, + 0xac1b, 0xac1b, 0xac1b, 0x080c, 0x0dd5, 0x0066, 0x6000, 0x90b2, + 0x0016, 0x1a0c, 0x0dd5, 0x0013, 0x006e, 0x0005, 0xac36, 0xc233, + 0xac36, 0xac36, 0xac36, 0xac36, 0xac36, 0xac36, 0xc1d8, 0xc3b5, + 0xac36, 0xc274, 0xc2f3, 0xc274, 0xc2f3, 0xac36, 0x080c, 0x0dd5, + 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0dd5, 0x6000, 0x0002, 0xac52, + 0xbba6, 0xbc8b, 0xbdbb, 0xbf66, 0xac52, 0xac52, 0xac52, 0xbb7a, + 0xc164, 0xc167, 0xac52, 0xac52, 0xac52, 0xac52, 0xc196, 0xac52, + 0xac52, 0xac52, 0x080c, 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, + 0x1a0c, 0x0dd5, 0x0013, 0x006e, 0x0005, 0xac6d, 0xac6d, 0xacb0, + 0xad4f, 0xade4, 0xac6d, 0xac6d, 0xac6d, 0xac6f, 0xac6d, 0xac6d, + 0xac6d, 0xac6d, 0xac6d, 0xac6d, 0xac6d, 0x080c, 0x0dd5, 0x9186, + 0x004c, 0x0588, 0x9186, 0x0003, 0x190c, 0x0dd5, 0x0096, 0x601c, + 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, + 0x9084, 0xa000, 0xc0b5, 0xa87e, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, + 0x9006, 0xa836, 0xa83a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, + 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, + 0x080c, 0x1b03, 0x080c, 0x8ee4, 0x0126, 0x2091, 0x8000, 0x080c, + 0x9548, 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, + 0x2c00, 0x080c, 0xae06, 0x080c, 0xcf30, 0x6003, 0x0007, 0x0005, + 0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a90, 0x6014, 0x2048, + 0xa87c, 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc, 0x0046, + 0xa8e0, 0x9005, 0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220, 0xa87b, + 0x0007, 0x2010, 0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b, 0x0000, + 0x8214, 0xa883, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, + 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, + 0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, + 0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, + 0x9405, 0x0002, 0xad17, 0xad17, 0xad12, 0xad15, 0xad17, 0xad0f, + 0xad02, 0xad02, 0xad02, 0xad02, 0xad02, 0xad02, 0xad02, 0xad02, + 0xad02, 0xad02, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, + 0x000e, 0x004e, 0x00fe, 0x009e, 0x00de, 0x080c, 0x0dd5, 0x080c, + 0xb7b7, 0x0028, 0x080c, 0xb89c, 0x0010, 0x080c, 0xb992, 0x00fe, + 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, + 0x080c, 0xaec4, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, + 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, + 0x9080, 0x0002, 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, + 0x2041, 0x1254, 0x080c, 0xb084, 0x0160, 0x000e, 0x9005, 0x0120, + 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, + 0xab6b, 0x2001, 0x002c, 0x900e, 0x080c, 0xaf2a, 0x0c70, 0x91b6, + 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, + 0x0dd5, 0x91b2, 0x0050, 0x1a0c, 0x0dd5, 0x9182, 0x0047, 0x00ca, + 0x2001, 0x0109, 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800, + 0x0006, 0x0016, 0x0026, 0x080c, 0x8e31, 0x002e, 0x001e, 0x000e, + 0x012e, 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xacb0, + 0x0005, 0xad82, 0xad82, 0xad84, 0xadba, 0xad82, 0xad82, 0xad82, + 0xad82, 0xadcd, 0x080c, 0x0dd5, 0x00d6, 0x0016, 0x0096, 0x080c, + 0x93cc, 0x080c, 0x9548, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, + 0xd0fc, 0x01c0, 0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, + 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xaf2a, 0x080c, 0xab6b, 0x00a8, 0x6003, 0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2, 0x0c78, 0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8, 0xa8b2, 0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e, - 0x00de, 0x0005, 0x080c, 0x8532, 0x00d6, 0x0096, 0x6114, 0x2148, - 0x080c, 0xb5fb, 0x0120, 0xa87b, 0x0006, 0x080c, 0x6536, 0x009e, - 0x00de, 0x080c, 0x99d6, 0x0804, 0x865d, 0x080c, 0x8532, 0x080c, - 0x2e30, 0x080c, 0xbd01, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, - 0xb5fb, 0x0120, 0xa87b, 0x0029, 0x080c, 0x6536, 0x009e, 0x00de, - 0x080c, 0x99d6, 0x0804, 0x865d, 0x9182, 0x0047, 0x0002, 0x9c5c, - 0x9c5e, 0x9c5c, 0x9c5c, 0x9c5c, 0x9c5c, 0x9c5c, 0x9c5c, 0x9c5c, - 0x9c5c, 0x9c5c, 0x9c5c, 0x9c5e, 0x080c, 0x0db2, 0x00d6, 0x0096, - 0x080c, 0x14c9, 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, - 0x080c, 0x6536, 0x009e, 0x00de, 0x0804, 0x99d6, 0x0026, 0x0036, - 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x0fd5, - 0x000e, 0x090c, 0x0db2, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, + 0x00de, 0x0005, 0x080c, 0x93cc, 0x00d6, 0x0096, 0x6114, 0x2148, + 0x080c, 0xc825, 0x0120, 0xa87b, 0x0006, 0x080c, 0x6a46, 0x009e, + 0x00de, 0x080c, 0xab6b, 0x0804, 0x9548, 0x080c, 0x93cc, 0x080c, + 0x306e, 0x080c, 0xcf2d, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, + 0xc825, 0x0120, 0xa87b, 0x0029, 0x080c, 0x6a46, 0x009e, 0x00de, + 0x080c, 0xab6b, 0x0804, 0x9548, 0x9182, 0x0047, 0x0002, 0xadf4, + 0xadf6, 0xadf4, 0xadf4, 0xadf4, 0xadf4, 0xadf4, 0xadf4, 0xadf4, + 0xadf4, 0xadf4, 0xadf4, 0xadf6, 0x080c, 0x0dd5, 0x00d6, 0x0096, + 0x601f, 0x0000, 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, + 0x080c, 0x6a46, 0x009e, 0x00de, 0x0804, 0xab6b, 0x0026, 0x0036, + 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x1000, + 0x000e, 0x090c, 0x0dd5, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, - 0x7988, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, + 0x7990, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, - 0x9182, 0x0034, 0x1228, 0x2011, 0x001f, 0x080c, 0xb219, 0x04c0, - 0x2130, 0x2009, 0x0034, 0x2011, 0x001f, 0x080c, 0xb219, 0x96b2, - 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0f87, 0x080c, 0x0fd5, + 0x9182, 0x0034, 0x1228, 0x2011, 0x001f, 0x080c, 0xc43a, 0x04c0, + 0x2130, 0x2009, 0x0034, 0x2011, 0x001f, 0x080c, 0xc43a, 0x96b2, + 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fb2, 0x080c, 0x1000, 0x01d0, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, - 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xb219, + 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xc43a, 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, - 0x080c, 0xb219, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, + 0x080c, 0xc43a, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, - 0xb566, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6536, + 0xb566, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6a46, 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, - 0x080c, 0x0fd5, 0x000e, 0x090c, 0x0db2, 0xa960, 0x21e8, 0xa95c, + 0x080c, 0x1000, 0x000e, 0x090c, 0x0dd5, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, - 0xa87a, 0x2079, 0x1800, 0x7988, 0x810c, 0x9188, 0x000c, 0x9182, + 0xa87a, 0x2079, 0x1800, 0x7990, 0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98, 0xa85c, 0x9080, 0x001f, 0x20a0, 0x2001, 0x0205, 0x200c, - 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6536, + 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6a46, 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200, 0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, - 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x0fd5, + 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x1000, 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, - 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0x9d41, 0x0804, - 0x9d43, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, + 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0xaed9, 0x0804, + 0xaedb, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, - 0xa982, 0x080c, 0x6529, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, - 0x0015, 0x1118, 0x080c, 0x99d6, 0x0030, 0x91b6, 0x0016, 0x190c, - 0x0db2, 0x080c, 0x99d6, 0x0005, 0x20a9, 0x000e, 0x20e1, 0x0000, + 0xa982, 0x080c, 0x6a3a, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, + 0x0015, 0x1118, 0x080c, 0xab6b, 0x0030, 0x91b6, 0x0016, 0x190c, + 0x0dd5, 0x080c, 0xab6b, 0x0005, 0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e, 0x4003, 0x0136, 0x9080, 0x001b, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8, 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003, 0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, - 0x080c, 0xb5fb, 0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, - 0x0103, 0x009e, 0x0804, 0x99d6, 0x0096, 0x00d6, 0x0036, 0x7330, - 0x9386, 0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8bf, 0x0000, + 0x080c, 0xc825, 0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, + 0x0103, 0x009e, 0x0804, 0xab6b, 0x0096, 0x00d6, 0x0036, 0x7330, + 0x9386, 0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8cf, 0x0000, 0x00be, 0x6014, 0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, - 0x0103, 0xab32, 0x080c, 0x99d6, 0x003e, 0x00de, 0x009e, 0x0005, - 0x0011, 0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, 0xbcec, 0x0188, + 0x0103, 0xab32, 0x080c, 0xab6b, 0x003e, 0x00de, 0x009e, 0x0005, + 0x0011, 0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, 0xcf18, 0x0188, 0x6014, 0x9005, 0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, - 0x0000, 0x2009, 0x0022, 0x080c, 0xa1b5, 0x9006, 0x001e, 0x000e, + 0x0000, 0x2009, 0x0022, 0x080c, 0xb361, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1, 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, @@ -4860,405 +5423,421 @@ 0x000a, 0xa804, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003, 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, - 0x2048, 0xa867, 0x0103, 0x080c, 0x99d6, 0x001e, 0x009e, 0x0005, + 0x2048, 0xa867, 0x0103, 0x080c, 0xab6b, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e, 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c, 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x810b, 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, - 0x2048, 0x080c, 0xb219, 0x080c, 0xb5fb, 0x0140, 0x6014, 0x2048, - 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0x99d6, - 0x001e, 0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086, 0x0100, - 0x1118, 0x2009, 0x0004, 0x0010, 0x7034, 0x800c, 0x810b, 0x2011, - 0x000c, 0x2019, 0x000c, 0x6014, 0x2048, 0xa804, 0x0096, 0x9005, - 0x0108, 0x2048, 0x080c, 0xb219, 0x009e, 0x080c, 0xb5fb, 0x0148, - 0xa804, 0x9005, 0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, - 0x0103, 0x080c, 0x99d6, 0x009e, 0x001e, 0x0005, 0x0086, 0x2040, - 0xa030, 0x8007, 0x9086, 0x0100, 0x1118, 0x080c, 0xa364, 0x00e0, - 0xa034, 0x8007, 0x800c, 0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, - 0x9084, 0xffc0, 0x9080, 0x000c, 0xa87b, 0x0000, 0xa883, 0x0000, - 0xa897, 0x4000, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, - 0x2041, 0x120c, 0x0019, 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, - 0x080c, 0x0fd5, 0x000e, 0x01b0, 0xa8ab, 0x0dcb, 0xa876, 0x000e, - 0xa8a2, 0x0006, 0xae6a, 0x2800, 0xa89e, 0xa97a, 0xaf72, 0xaa8e, - 0xab92, 0xac96, 0xad9a, 0x0086, 0x2940, 0x080c, 0x10b5, 0x008e, - 0x9085, 0x0001, 0x009e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, - 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, - 0x1520, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, - 0x11e0, 0x6043, 0x0000, 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, - 0xbc66, 0x001e, 0x1158, 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, - 0x9386, 0x0003, 0x0130, 0x9386, 0x0006, 0x0128, 0x080c, 0x99d6, - 0x0020, 0x0039, 0x0010, 0x080c, 0x9fe8, 0x002e, 0x00de, 0x00ee, - 0x0005, 0x0096, 0x6814, 0x2048, 0x9186, 0x0015, 0x0904, 0x9fd0, - 0x918e, 0x0016, 0x1904, 0x9fe6, 0x700c, 0x908c, 0xff00, 0x9186, - 0x1700, 0x0120, 0x9186, 0x0300, 0x1904, 0x9faa, 0x89ff, 0x1138, - 0x6800, 0x9086, 0x000f, 0x0904, 0x9f8d, 0x0804, 0x9fe4, 0x6808, - 0x9086, 0xffff, 0x1904, 0x9fd2, 0xa87c, 0x9084, 0x0060, 0x9086, - 0x0020, 0x1128, 0xa83c, 0xa940, 0x9105, 0x1904, 0x9fd2, 0x6824, - 0xd0b4, 0x1904, 0x9fd2, 0x080c, 0xb7dd, 0x685c, 0xa882, 0xa87c, - 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001, - 0x000a, 0x080c, 0x7e7f, 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86, - 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0xb33a, 0x00ce, - 0x0804, 0x9fe4, 0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c, 0x5a9d, - 0x0010, 0x080c, 0x5e34, 0x00ce, 0x1904, 0x9fd2, 0x00c6, 0x2d60, - 0x080c, 0x99d6, 0x00ce, 0x0804, 0x9fe4, 0x00c6, 0x080c, 0x9a23, - 0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c, 0xba69, 0x6023, - 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0x99d6, 0x00ce, 0x080c, - 0x9a50, 0x00ce, 0x0804, 0x9fe4, 0x2001, 0x1957, 0x2004, 0x6842, - 0x00ce, 0x04d0, 0x7008, 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, - 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa883, - 0x0003, 0x080c, 0xbca8, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, - 0x0002, 0x080c, 0x8000, 0x080c, 0x8582, 0x00ce, 0x00e8, 0x700c, - 0x9086, 0x2a00, 0x1138, 0x2001, 0x1957, 0x2004, 0x6842, 0x00a0, - 0x0479, 0x00a0, 0x89ff, 0x090c, 0x0db2, 0x00c6, 0x00d6, 0x2d60, - 0xa867, 0x0103, 0xa87b, 0x0003, 0x080c, 0x6351, 0x080c, 0xb7dd, - 0x080c, 0x9a06, 0x00de, 0x00ce, 0x080c, 0x99d6, 0x009e, 0x0005, - 0x9186, 0x0015, 0x1128, 0x2001, 0x1957, 0x2004, 0x6842, 0x0068, - 0x918e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xd240, - 0x080c, 0x7e13, 0x080c, 0x99d6, 0x00ce, 0x080c, 0x99d6, 0x0005, - 0x0026, 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, - 0x2001, 0x1957, 0x2004, 0x6842, 0x0804, 0xa064, 0x00c6, 0x2d60, - 0x080c, 0xb244, 0x00ce, 0x6804, 0x9086, 0x0050, 0x1170, 0x00c6, - 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x8000, - 0x080c, 0x8582, 0x00ce, 0x0804, 0xa064, 0x6800, 0x9086, 0x000f, - 0x01b0, 0x89ff, 0x090c, 0x0db2, 0x6800, 0x9086, 0x0004, 0x1198, - 0xa87c, 0xd0ac, 0x0180, 0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, - 0xc0f4, 0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832, 0x0400, 0x2001, - 0x0007, 0x6832, 0x00e0, 0xa87c, 0xd0b4, 0x1150, 0xd0ac, 0x0db8, - 0x6824, 0xd0f4, 0x1d40, 0xa838, 0xa934, 0x9105, 0x0d80, 0x0c18, - 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020, 0x9406, 0x0d38, - 0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005, 0x6832, 0x080c, - 0xb960, 0x080c, 0x8582, 0x0010, 0x080c, 0x99d6, 0x004e, 0x003e, - 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, - 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1904, 0xa0cf, - 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x1904, - 0xa0cf, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826, 0x6a20, 0x9286, - 0x0007, 0x0904, 0xa0cf, 0x9286, 0x0002, 0x0904, 0xa0cf, 0x9286, - 0x0000, 0x05e8, 0x6808, 0x633c, 0x9306, 0x15c8, 0x2071, 0x026c, - 0x9186, 0x0015, 0x0570, 0x918e, 0x0016, 0x1100, 0x00c6, 0x6038, - 0x2060, 0x6104, 0x9186, 0x004b, 0x01c0, 0x9186, 0x004c, 0x01a8, - 0x9186, 0x004d, 0x0190, 0x9186, 0x004e, 0x0178, 0x9186, 0x0052, - 0x0160, 0x6014, 0x0096, 0x2048, 0x080c, 0xb5fb, 0x090c, 0x0db2, - 0xa883, 0x0003, 0x009e, 0x080c, 0xbca8, 0x6007, 0x0085, 0x6003, - 0x000b, 0x6023, 0x0002, 0x080c, 0x8000, 0x080c, 0x8582, 0x00ce, - 0x0030, 0x6038, 0x2070, 0x2001, 0x1957, 0x2004, 0x7042, 0x080c, - 0x99d6, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00b6, 0x0096, 0x00f6, - 0x6014, 0x2048, 0x6010, 0x2058, 0x91b6, 0x0015, 0x0130, 0xba08, - 0xbb0c, 0xbc00, 0xc48c, 0xbc02, 0x0460, 0x0096, 0x0156, 0x0036, - 0x0026, 0x2b48, 0x9e90, 0x0010, 0x2019, 0x000a, 0x20a9, 0x0004, - 0x080c, 0xa91d, 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xa13e, - 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, - 0x0006, 0x20a9, 0x0004, 0x080c, 0xa91d, 0x002e, 0x003e, 0x015e, - 0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e, 0xbc00, 0xc48d, - 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, - 0x9dd7, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, - 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, - 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, - 0x2041, 0x120c, 0x080c, 0x9ed6, 0x0130, 0x00fe, 0x009e, 0x080c, - 0x99d6, 0x00be, 0x0005, 0x080c, 0xa364, 0x0cb8, 0x2b78, 0x00f6, - 0x080c, 0x2e30, 0x080c, 0xbd01, 0x00fe, 0x00c6, 0x080c, 0x9980, - 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, - 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x5ecf, 0x080c, 0x5efb, - 0x080c, 0x8048, 0x080c, 0x8582, 0x00ce, 0x0804, 0xa111, 0x2100, - 0x91b2, 0x0053, 0x1a0c, 0x0db2, 0x91b2, 0x0040, 0x1a04, 0xa1c7, - 0x0002, 0xa1b5, 0xa1b5, 0xa1ab, 0xa1b5, 0xa1b5, 0xa1b5, 0xa1a9, - 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, - 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, - 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, - 0xa1b5, 0xa1a9, 0xa1b5, 0xa1b5, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, - 0xa1a9, 0xa1ab, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, - 0xa1a9, 0xa1a9, 0xa1a9, 0xa1b5, 0xa1b5, 0xa1a9, 0xa1a9, 0xa1a9, - 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1a9, 0xa1b5, 0xa1a9, - 0xa1a9, 0x080c, 0x0db2, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8bc, - 0xc08c, 0xb8be, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106, - 0x9186, 0x0032, 0x0118, 0x080c, 0x8048, 0x0010, 0x080c, 0x8000, - 0x0126, 0x2091, 0x8000, 0x080c, 0x8582, 0x012e, 0x0005, 0x2600, - 0x0002, 0xa1db, 0xa1db, 0xa1db, 0xa1b5, 0xa1b5, 0xa1db, 0xa1db, - 0xa1db, 0xa1db, 0xa1b5, 0xa1db, 0xa1b5, 0xa1db, 0xa1b5, 0xa1db, - 0xa1db, 0xa1db, 0xa1db, 0x080c, 0x0db2, 0x6004, 0x90b2, 0x0053, - 0x1a0c, 0x0db2, 0x91b6, 0x0013, 0x0904, 0xa29f, 0x91b6, 0x0027, - 0x1904, 0xa25a, 0x080c, 0x847d, 0x6004, 0x080c, 0xb7e9, 0x01b0, - 0x080c, 0xb7fa, 0x01a8, 0x908e, 0x0021, 0x0904, 0xa257, 0x908e, - 0x0022, 0x1130, 0x080c, 0x9e03, 0x0904, 0xa253, 0x0804, 0xa254, - 0x908e, 0x003d, 0x0904, 0xa257, 0x0804, 0xa24d, 0x080c, 0x2e55, - 0x2001, 0x0007, 0x080c, 0x5ecf, 0x6010, 0x00b6, 0x2058, 0xb9a0, - 0x00be, 0x080c, 0xa364, 0x9186, 0x007e, 0x1148, 0x2001, 0x1835, - 0x2014, 0xc285, 0x080c, 0x6c53, 0x1108, 0xc2ad, 0x2202, 0x0036, - 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xd29b, 0x002e, 0x003e, - 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x8180, - 0x0076, 0x903e, 0x080c, 0x8078, 0x6010, 0x00b6, 0x905d, 0x0100, - 0x00be, 0x2c08, 0x080c, 0xcd62, 0x007e, 0x003e, 0x002e, 0x001e, - 0x080c, 0xbd01, 0x0016, 0x080c, 0xba61, 0x080c, 0x99d6, 0x001e, - 0x080c, 0x2f28, 0x080c, 0x8582, 0x0030, 0x080c, 0xba61, 0x080c, - 0x99d6, 0x080c, 0x8582, 0x0005, 0x080c, 0xa364, 0x0cb0, 0x080c, - 0xa3a0, 0x0c98, 0x9186, 0x0014, 0x1db0, 0x080c, 0x847d, 0x6004, - 0x908e, 0x0022, 0x1118, 0x080c, 0x9e03, 0x0d68, 0x080c, 0x2e30, - 0x080c, 0xbd01, 0x080c, 0xb7e9, 0x1190, 0x080c, 0x2e55, 0x6010, - 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xa364, 0x9186, 0x007e, - 0x1128, 0x2001, 0x1835, 0x200c, 0xc185, 0x2102, 0x0870, 0x080c, - 0xb7fa, 0x1118, 0x080c, 0xa364, 0x0840, 0x6004, 0x908e, 0x0032, - 0x1160, 0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079, 0x0000, 0x080c, - 0x31c3, 0x00fe, 0x00ee, 0x0804, 0xa24d, 0x6004, 0x908e, 0x0021, - 0x0d48, 0x908e, 0x0022, 0x090c, 0xa364, 0x0804, 0xa24d, 0x90b2, - 0x0040, 0x1a04, 0xa34d, 0x2008, 0x0002, 0xa2e7, 0xa2e8, 0xa2eb, - 0xa2ee, 0xa2f1, 0xa2f4, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, - 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, - 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, - 0xa2e5, 0xa2e5, 0xa2e5, 0xa2f7, 0xa302, 0xa2e5, 0xa304, 0xa302, - 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa302, 0xa302, 0xa2e5, - 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2e5, 0xa334, - 0xa302, 0xa2e5, 0xa2fe, 0xa2e5, 0xa2e5, 0xa2e5, 0xa2ff, 0xa2e5, - 0xa2e5, 0xa2e5, 0xa302, 0xa32b, 0xa2e5, 0x080c, 0x0db2, 0x00d0, - 0x2001, 0x000b, 0x0410, 0x2001, 0x0003, 0x00f8, 0x2001, 0x0005, - 0x00e0, 0x2001, 0x0001, 0x00c8, 0x2001, 0x0009, 0x00b0, 0x080c, - 0x847d, 0x6003, 0x0005, 0x080c, 0x8582, 0x0070, 0x0018, 0x0010, - 0x080c, 0x5ecf, 0x0804, 0xa345, 0x080c, 0x847d, 0x080c, 0xbd04, - 0x6003, 0x0004, 0x080c, 0x8582, 0x0005, 0x080c, 0x5ecf, 0x080c, - 0x847d, 0x6003, 0x0002, 0x0036, 0x2019, 0x185e, 0x2304, 0x9084, - 0xff00, 0x1120, 0x2001, 0x1955, 0x201c, 0x0040, 0x8007, 0x909a, - 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x003e, - 0x080c, 0x8582, 0x0c08, 0x080c, 0x847d, 0x080c, 0xba61, 0x080c, - 0x99d6, 0x080c, 0x8582, 0x08c0, 0x00e6, 0x00f6, 0x2071, 0x1894, - 0x2079, 0x0000, 0x080c, 0x31c3, 0x00fe, 0x00ee, 0x080c, 0x847d, - 0x080c, 0x99d6, 0x080c, 0x8582, 0x0838, 0x080c, 0x847d, 0x6003, - 0x0002, 0x080c, 0xbd04, 0x0804, 0x8582, 0x2600, 0x2008, 0x0002, - 0xa362, 0xa362, 0xa362, 0xa345, 0xa345, 0xa362, 0xa362, 0xa362, - 0xa362, 0xa345, 0xa362, 0xa345, 0xa362, 0xa345, 0xa362, 0xa362, - 0xa362, 0xa362, 0x080c, 0x0db2, 0x00e6, 0x0096, 0x0026, 0x0016, - 0x080c, 0xb5fb, 0x0568, 0x6014, 0x2048, 0xa864, 0x9086, 0x0139, - 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148, 0x080c, 0x4ebc, 0x0130, - 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, - 0x900e, 0x2011, 0x4005, 0x080c, 0xbbcd, 0x0090, 0xa868, 0xd0fc, - 0x0178, 0xa807, 0x0000, 0x0016, 0x6004, 0x908e, 0x0021, 0x0168, - 0x908e, 0x003d, 0x0150, 0x001e, 0xa867, 0x0103, 0xa833, 0x0100, - 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0, - 0x0096, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0xa823, - 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610, 0x2658, 0xb804, 0x9084, - 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0db2, 0x6604, 0x96b6, 0x004d, - 0x1120, 0x080c, 0xbaed, 0x0804, 0xa428, 0x6604, 0x96b6, 0x0043, - 0x1120, 0x080c, 0xbb36, 0x0804, 0xa428, 0x6604, 0x96b6, 0x004b, - 0x1120, 0x080c, 0xbb62, 0x0804, 0xa428, 0x6604, 0x96b6, 0x0033, - 0x1120, 0x080c, 0xba83, 0x0804, 0xa428, 0x6604, 0x96b6, 0x0028, - 0x1120, 0x080c, 0xb833, 0x0804, 0xa428, 0x6604, 0x96b6, 0x0029, - 0x1120, 0x080c, 0xb874, 0x0804, 0xa428, 0x6604, 0x96b6, 0x001f, - 0x1118, 0x080c, 0x9dac, 0x04e0, 0x6604, 0x96b6, 0x0000, 0x1118, - 0x080c, 0xa0d5, 0x04a8, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, - 0x9de4, 0x0470, 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0x9ef4, - 0x0438, 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, 0xa06a, 0x0400, - 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, 0x9e1c, 0x00c8, 0x6604, - 0x96b6, 0x0044, 0x1118, 0x080c, 0x9e58, 0x0090, 0x6604, 0x96b6, - 0x0049, 0x1118, 0x080c, 0x9e83, 0x0058, 0x91b6, 0x0015, 0x1110, - 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, 0xa65e, - 0x00be, 0x0005, 0x080c, 0x9a6b, 0x0cd8, 0xa445, 0xa448, 0xa445, - 0xa48d, 0xa445, 0xa5d7, 0xa66b, 0xa445, 0xa445, 0xa638, 0xa445, - 0xa64c, 0x0096, 0x080c, 0x14c9, 0x6014, 0x2048, 0xa800, 0x2048, - 0xa867, 0x0103, 0x009e, 0x0804, 0x99d6, 0xa001, 0xa001, 0x0005, - 0x00e6, 0x2071, 0x1800, 0x7088, 0x9086, 0x0074, 0x1540, 0x080c, - 0xcd33, 0x11b0, 0x6010, 0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, - 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802, 0x00e9, 0x00be, 0x2001, - 0x0006, 0x080c, 0x5ecf, 0x080c, 0x2e55, 0x080c, 0x99d6, 0x0088, - 0x2001, 0x000a, 0x080c, 0x5ecf, 0x080c, 0x2e55, 0x6003, 0x0001, - 0x6007, 0x0001, 0x080c, 0x8048, 0x080c, 0x8582, 0x0010, 0x080c, - 0xa5c2, 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, - 0x080c, 0x5ebb, 0x2069, 0x1853, 0x6804, 0xd0a4, 0x0120, 0x2001, - 0x0006, 0x080c, 0x5efb, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, - 0x2011, 0x1822, 0x2204, 0x9086, 0x0074, 0x1904, 0xa59b, 0x6010, - 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xa7af, 0x0804, - 0xa4ff, 0x080c, 0xa7a4, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, - 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, - 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, - 0x080c, 0xbbcd, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, - 0x0200, 0x2001, 0x0006, 0x080c, 0x5ecf, 0x080c, 0x2e55, 0x080c, - 0x99d6, 0x0804, 0xa59c, 0x080c, 0xa5aa, 0x6014, 0x9005, 0x0190, - 0x2048, 0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, - 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, - 0xbbcd, 0x08f8, 0x080c, 0xa5a0, 0x0160, 0x9006, 0x080c, 0x5ebb, - 0x2001, 0x0004, 0x080c, 0x5efb, 0x2001, 0x0007, 0x080c, 0x5ecf, - 0x08a0, 0x2001, 0x0004, 0x080c, 0x5ecf, 0x6003, 0x0001, 0x6007, - 0x0003, 0x080c, 0x8048, 0x080c, 0x8582, 0x0804, 0xa59c, 0xb85c, - 0xd0e4, 0x01d8, 0x080c, 0xba03, 0x080c, 0x6c53, 0x0118, 0xd0dc, - 0x1904, 0xa4c1, 0x2011, 0x1835, 0x2204, 0xc0ad, 0x2012, 0x2001, - 0x193e, 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, - 0x254a, 0x78e2, 0x00fe, 0x0804, 0xa4c1, 0x080c, 0xba40, 0x2011, - 0x1835, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xce81, 0x000e, - 0x1904, 0xa4c1, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x5ecf, - 0x9006, 0x080c, 0x5ebb, 0x00c6, 0x2001, 0x180e, 0x2004, 0xd09c, - 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, - 0x9084, 0x00ff, 0x78e6, 0x7076, 0x7010, 0x78ea, 0x707a, 0x908c, - 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x251f, - 0x00f6, 0x2100, 0x900e, 0x080c, 0x24d6, 0x7956, 0x00fe, 0x9186, - 0x0081, 0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, - 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, - 0x00fe, 0x080c, 0x251f, 0x00f6, 0x2079, 0x1800, 0x797a, 0x2100, - 0x900e, 0x080c, 0x24d6, 0x7956, 0x00fe, 0x8108, 0x080c, 0x5f1e, - 0x2b00, 0x00ce, 0x1904, 0xa4c1, 0x6012, 0x2009, 0x180e, 0x210c, - 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, - 0x2009, 0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x5ecf, - 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8048, - 0x080c, 0x8582, 0x0008, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, - 0x2001, 0x180f, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1854, 0x2004, - 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xd2f4, 0x0190, 0x2071, 0x0260, - 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, - 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, - 0x00ee, 0x0005, 0x2030, 0x2001, 0x0007, 0x080c, 0x5ecf, 0x080c, - 0x5127, 0x1120, 0x2001, 0x0007, 0x080c, 0x5efb, 0x080c, 0x2e55, - 0x6020, 0x9086, 0x000a, 0x1108, 0x0005, 0x0804, 0x99d6, 0x00b6, - 0x00e6, 0x0026, 0x0016, 0x2071, 0x1800, 0x7088, 0x9086, 0x0014, - 0x1904, 0xa62f, 0x080c, 0x5127, 0x1170, 0x6014, 0x9005, 0x1158, + 0x2048, 0x080c, 0xc43a, 0x080c, 0xc825, 0x0140, 0x6014, 0x2048, + 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xab6b, + 0x001e, 0x009e, 0x0005, 0x0016, 0x2009, 0x0000, 0x7030, 0x9086, + 0x0200, 0x0110, 0x2009, 0x0001, 0x0096, 0x6014, 0x904d, 0x090c, + 0x0dd5, 0xa97a, 0x080c, 0x6a46, 0x009e, 0x080c, 0xab6b, 0x001e, + 0x0005, 0x0016, 0x0096, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009, + 0x0004, 0x0010, 0x7034, 0x800c, 0x810b, 0x2011, 0x000c, 0x2019, + 0x000c, 0x6014, 0x2048, 0xa804, 0x0096, 0x9005, 0x0108, 0x2048, + 0x080c, 0xc43a, 0x009e, 0x080c, 0xc825, 0x0148, 0xa804, 0x9005, + 0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, + 0xab6b, 0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, + 0x9086, 0x0100, 0x1118, 0x080c, 0xb51d, 0x00e0, 0xa034, 0x8007, + 0x800c, 0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, + 0x9080,